ZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0FSTXY4TS9ub25fc2VjdXJlL3BvcnQuYyBiL3BvcnRhYmxlL0FSTXY4TS9ub25fc2VjdXJlL3BvcnQuYwppbmRleCAzZjM5YmMzLi44YmYxYWMxIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9BUk12OE0vbm9uX3NlY3VyZS9wb3J0LmMKKysrIGIvcG9ydGFibGUvQVJNdjhNL25vbl9zZWN1cmUvcG9ydC5jCkBAIC0yMiw3ICsyMiw2IEBACiAgKiBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZw0KICAqIGh0dHA6Ly9hd3MuYW1hem9uLmNvbS9mcmVlcnRvcw0KICAqDQotICogMSB0YWIgPT0gNCBzcGFjZXMhDQogICovDQogDQogLyogRGVmaW5pbmcgTVBVX1dSQVBQRVJTX0lOQ0xVREVEX0ZST01fQVBJX0ZJTEUgcHJldmVudHMgdGFzay5oIGZyb20gcmVkZWZpbmluZw0KQEAgLTU1LDEzICs1NCwxMyBAQAogICogb24gdGhlIHNlY3VyZSBzaWRlLiBUaGUgZm9sbG93aW5nIGFyZSB0aGUgdmFsaWQgY29uZmlndXJhdGlvbiBzZWV0aW5nczoNCiAgKg0KICAqIDEuIFJ1biBGcmVlUlRPUyBvbiB0aGUgU2VjdXJlIFNpZGU6DQotICoJCWNvbmZpZ1JVTl9GUkVFUlRPU19TRUNVUkVfT05MWSA9IDEgYW5kIGNvbmZpZ0VOQUJMRV9UUlVTVFpPTkUgPSAwDQorICogICAgY29uZmlnUlVOX0ZSRUVSVE9TX1NFQ1VSRV9PTkxZID0gMSBhbmQgY29uZmlnRU5BQkxFX1RSVVNUWk9ORSA9IDANCiAgKg0KICAqIDIuIFJ1biBGcmVlUlRPUyBvbiB0aGUgTm9uLVNlY3VyZSBTaWRlIHdpdGggU2VjdXJlIFNpZGUgZnVuY3Rpb24gY2FsbCBzdXBwb3J0Og0KLSAqCQljb25maWdSVU5fRlJFRVJUT1NfU0VDVVJFX09OTFkgPSAwIGFuZCBjb25maWdFTkFCTEVfVFJVU1RaT05FID0gMQ0KKyAqICAgIGNvbmZpZ1JVTl9GUkVFUlRPU19TRUNVUkVfT05MWSA9IDAgYW5kIGNvbmZpZ0VOQUJMRV9UUlVTVFpPTkUgPSAxDQogICoNCiAgKiAzLiBSdW4gRnJlZVJUT1Mgb24gdGhlIE5vbi1TZWN1cmUgU2lkZSBvbmx5IGkuZS4gbm8gU2VjdXJlIFNpZGUgZnVuY3Rpb24gY2FsbCBzdXBwb3J0Og0KLSAqCQljb25maWdSVU5fRlJFRVJUT1NfU0VDVVJFX09OTFkgPSAwIGFuZCBjb25maWdFTkFCTEVfVFJVU1RaT05FID0gMA0KKyAqICAgIGNvbmZpZ1JVTl9GUkVFUlRPU19TRUNVUkVfT05MWSA9IDAgYW5kIGNvbmZpZ0VOQUJMRV9UUlVTVFpPTkUgPSAwDQogICovDQogI2lmICggKCBjb25maWdSVU5fRlJFRVJUT1NfU0VDVVJFX09OTFkgPT0gMSApICYmICggY29uZmlnRU5BQkxFX1RSVVNUWk9ORSA9PSAxICkgKQ0KICAgICAjZXJyb3IgVHJ1c3Rab25lIG5lZWRzIHRvIGJlIGRpc2FibGVkIGluIG9yZGVyIHRvIHJ1biBGcmVlUlRPUyBvbiB0aGUgU2VjdXJlIFNpZGUuDQpAQCAtNjEyLDcgKzYxMSw3IEBACiAgICAgICAgICAgICBleHRlcm4gdWludDMyX3QgKiBfX3VucHJpdmlsZWdlZF9mbGFzaF9lbmRfXzsNCiAgICAgICAgICAgICBleHRlcm4gdWludDMyX3QgKiBfX3ByaXZpbGVnZWRfc3JhbV9zdGFydF9fOw0KICAgICAgICAgICAgIGV4dGVybiB1aW50MzJfdCAqIF9fcHJpdmlsZWdlZF9zcmFtX2VuZF9fOw0KLSAgICAgICAgI2Vsc2UgIC8qIGlmIGRlZmluZWQoIF9fQVJNQ0NfVkVSU0lPTiApICovDQorICAgICAgICAjZWxzZSAvKiBpZiBkZWZpbmVkKCBfX0FSTUNDX1ZFUlNJT04gKSAqLw0KICAgICAgICAgICAgIC8qIERlY2xhcmF0aW9uIHdoZW4gdGhlc2UgdmFyaWFibGUgYXJlIGV4cG9ydGVkIGZyb20gbGlua2VyIHNjcmlwdHMuICovDQogICAgICAgICAgICAgZXh0ZXJuIHVpbnQzMl90IF9fcHJpdmlsZWdlZF9mdW5jdGlvbnNfc3RhcnRfX1tdOw0KICAgICAgICAgICAgIGV4dGVybiB1aW50MzJfdCBfX3ByaXZpbGVnZWRfZnVuY3Rpb25zX2VuZF9fW107DQpAQCAtODAyLDIyICs4MDEsMjIgQEAKICAgICAgICAgICAgICAgICB1bFIwID0gcHVsQ2FsbGVyU3RhY2tBZGRyZXNzWyAwIF07DQogDQogICAgICAgICAgICAgICAgICNpZiAoIGNvbmZpZ0VOQUJMRV9NUFUgPT0gMSApDQotICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgIC8qIFJlYWQgdGhlIENPTlRST0wgcmVnaXN0ZXIgdmFsdWUuICovDQotICAgICAgICAgICAgICAgICAgICBfX2FzbSB2b2xhdGlsZSAoICJtcnMgJTAsIGNvbnRyb2wiICA6ICI9ciIgKCB1bENvbnRyb2wgKSApOw0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlYWQgdGhlIENPTlRST0wgcmVnaXN0ZXIgdmFsdWUuICovDQorICAgICAgICAgICAgICAgICAgICAgICAgX19hc20gdm9sYXRpbGUgKCAibXJzICUwLCBjb250cm9sIiAgOiAiPXIiICggdWxDb250cm9sICkgKTsNCiANCi0gICAgICAgICAgICAgICAgICAgIC8qIFRoZSB0YXNrIHRoYXQgcmFpc2VkIHRoZSBTVkMgaXMgcHJpdmlsZWdlZCBpZiBCaXRbMF0NCi0gICAgICAgICAgICAgICAgICAgICAqIGluIHRoZSBDT05UUk9MIHJlZ2lzdGVyIGlzIDAuICovDQotICAgICAgICAgICAgICAgICAgICB1bElzVGFza1ByaXZpbGVnZWQgPSAoICggdWxDb250cm9sICYgcG9ydENPTlRST0xfUFJJVklMRUdFRF9NQVNLICkgPT0gMCApOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZSB0YXNrIHRoYXQgcmFpc2VkIHRoZSBTVkMgaXMgcHJpdmlsZWdlZCBpZiBCaXRbMF0NCisgICAgICAgICAgICAgICAgICAgICAgICAgKiBpbiB0aGUgQ09OVFJPTCByZWdpc3RlciBpcyAwLiAqLw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHVsSXNUYXNrUHJpdmlsZWdlZCA9ICggKCB1bENvbnRyb2wgJiBwb3J0Q09OVFJPTF9QUklWSUxFR0VEX01BU0sgKSA9PSAwICk7DQogDQotICAgICAgICAgICAgICAgICAgICAvKiBBbGxvY2F0ZSBhbmQgbG9hZCBhIGNvbnRleHQgZm9yIHRoZSBzZWN1cmUgdGFzay4gKi8NCi0gICAgICAgICAgICAgICAgICAgIHhTZWN1cmVDb250ZXh0ID0gU2VjdXJlQ29udGV4dF9BbGxvY2F0ZUNvbnRleHQoIHVsUjAsIHVsSXNUYXNrUHJpdmlsZWdlZCApOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICNlbHNlICAvKiBpZiAoIGNvbmZpZ0VOQUJMRV9NUFUgPT0gMSApICovDQotICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgIC8qIEFsbG9jYXRlIGFuZCBsb2FkIGEgY29udGV4dCBmb3IgdGhlIHNlY3VyZSB0YXNrLiAqLw0KLSAgICAgICAgICAgICAgICAgICAgeFNlY3VyZUNvbnRleHQgPSBTZWN1cmVDb250ZXh0X0FsbG9jYXRlQ29udGV4dCggdWxSMCApOw0KLSAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICAgICAgLyogQWxsb2NhdGUgYW5kIGxvYWQgYSBjb250ZXh0IGZvciB0aGUgc2VjdXJlIHRhc2suICovDQorICAgICAgICAgICAgICAgICAgICAgICAgeFNlY3VyZUNvbnRleHQgPSBTZWN1cmVDb250ZXh0X0FsbG9jYXRlQ29udGV4dCggdWxSMCwgdWxJc1Rhc2tQcml2aWxlZ2VkICk7DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICNlbHNlIC8qIGlmICggY29uZmlnRU5BQkxFX01QVSA9PSAxICkgKi8NCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBBbGxvY2F0ZSBhbmQgbG9hZCBhIGNvbnRleHQgZm9yIHRoZSBzZWN1cmUgdGFzay4gKi8NCisgICAgICAgICAgICAgICAgICAgICAgICB4U2VjdXJlQ29udGV4dCA9IFNlY3VyZUNvbnRleHRfQWxsb2NhdGVDb250ZXh0KCB1bFIwICk7DQorICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICNlbmRpZiAvKiBjb25maWdFTkFCTEVfTVBVICovDQogDQogICAgICAgICAgICAgICAgIGNvbmZpZ0FTU0VSVCggeFNlY3VyZUNvbnRleHQgIT0gTlVMTCApOw0KQEAgLTgzNSwyMSArODM0LDIxIEBACiANCiAgICAgICAgIGNhc2UgcG9ydFNWQ19TVEFSVF9TQ0hFRFVMRVI6DQogICAgICAgICAgICAgI2lmICggY29uZmlnRU5BQkxFX1RSVVNUWk9ORSA9PSAxICkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIC8qIERlLXByaW9yaXRpemUgdGhlIG5vbi1zZWN1cmUgZXhjZXB0aW9ucyBzbyB0aGF0IHRoZQ0KLSAgICAgICAgICAgICAgICAgKiBub24tc2VjdXJlIHBlbmRTViBydW5zIGF0IHRoZSBsb3dlc3QgcHJpb3JpdHkuICovDQotICAgICAgICAgICAgICAgIFNlY3VyZUluaXRfRGVQcmlvcml0aXplTlNFeGNlcHRpb25zKCk7DQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIC8qIERlLXByaW9yaXRpemUgdGhlIG5vbi1zZWN1cmUgZXhjZXB0aW9ucyBzbyB0aGF0IHRoZQ0KKyAgICAgICAgICAgICAgICAgICAgICogbm9uLXNlY3VyZSBwZW5kU1YgcnVucyBhdCB0aGUgbG93ZXN0IHByaW9yaXR5LiAqLw0KKyAgICAgICAgICAgICAgICAgICAgU2VjdXJlSW5pdF9EZVByaW9yaXRpemVOU0V4Y2VwdGlvbnMoKTsNCiANCi0gICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSB0aGUgc2VjdXJlIGNvbnRleHQgbWFuYWdlbWVudCBzeXN0ZW0uICovDQotICAgICAgICAgICAgICAgIFNlY3VyZUNvbnRleHRfSW5pdCgpOw0KLSAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgdGhlIHNlY3VyZSBjb250ZXh0IG1hbmFnZW1lbnQgc3lzdGVtLiAqLw0KKyAgICAgICAgICAgICAgICAgICAgU2VjdXJlQ29udGV4dF9Jbml0KCk7DQorICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAjZW5kaWYgLyogY29uZmlnRU5BQkxFX1RSVVNUWk9ORSAqLw0KIA0KICAgICAgICAgICAgICNpZiAoIGNvbmZpZ0VOQUJMRV9GUFUgPT0gMSApDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAvKiBTZXR1cCB0aGUgRmxvYXRpbmcgUG9pbnQgVW5pdCAoRlBVKS4gKi8NCi0gICAgICAgICAgICAgICAgcHJ2U2V0dXBGUFUoKTsNCi0gICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIC8qIFNldHVwIHRoZSBGbG9hdGluZyBQb2ludCBVbml0IChGUFUpLiAqLw0KKyAgICAgICAgICAgICAgICAgICAgcHJ2U2V0dXBGUFUoKTsNCisgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICNlbmRpZiAvKiBjb25maWdFTkFCTEVfRlBVICovDQogDQogICAgICAgICAgICAgLyogU2V0dXAgdGhlIGNvbnRleHQgb2YgdGhlIGZpcnN0IHRhc2sgc28gdGhhdCB0aGUgZmlyc3QgdGFzayBzdGFydHMNCkBAIC04NzYsMTkgKzg3NSwyMCBAQAogICAgIH0NCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQotDQorLyogKklOREVOVC1PRkYqICovDQogI2lmICggY29uZmlnRU5BQkxFX01QVSA9PSAxICkNCiAgICAgU3RhY2tUeXBlX3QgKiBweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICogcHhUb3BPZlN0YWNrLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tUeXBlX3QgKiBweEVuZE9mU3RhY2ssDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYXNrRnVuY3Rpb25fdCBweENvZGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICogcHZQYXJhbWV0ZXJzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFzZVR5cGVfdCB4UnVuUHJpdmlsZWdlZCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBSSVZJTEVHRURfRlVOQ1RJT04gKi8NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhc2VUeXBlX3QgeFJ1blByaXZpbGVnZWQgKSAvKiBQUklWSUxFR0VEX0ZVTkNUSU9OICovDQogI2Vsc2UNCiAgICAgU3RhY2tUeXBlX3QgKiBweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICogcHhUb3BPZlN0YWNrLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tUeXBlX3QgKiBweEVuZE9mU3RhY2ssDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYXNrRnVuY3Rpb25fdCBweENvZGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICogcHZQYXJhbWV0ZXJzICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUFJJVklMRUdFRF9GVU5DVElPTiAqLw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqIHB2UGFyYW1ldGVycyApIC8qIFBSSVZJTEVHRURfRlVOQ1RJT04gKi8NCiAjZW5kaWYgLyogY29uZmlnRU5BQkxFX01QVSAqLw0KKy8qICpJTkRFTlQtT04qICovDQogew0KICAgICAvKiBTaW11bGF0ZSB0aGUgc3RhY2sgZnJhbWUgYXMgaXQgd291bGQgYmUgY3JlYXRlZCBieSBhIGNvbnRleHQgc3dpdGNoDQogICAgICAqIGludGVycnVwdC4gKi8NCkBAIC0xMDUxLDcgKzEwNTEsOSBAQAogICAgIHsNCiAgICAgICAgIHVpbnQzMl90IHVsUmVnaW9uU3RhcnRBZGRyZXNzLCB1bFJlZ2lvbkVuZEFkZHJlc3MsIHVsUmVnaW9uTnVtYmVyOw0KICAgICAgICAgaW50MzJfdCBsSW5kZXggPSAwOw0KKw0KICAgICAgICAgI2lmIGRlZmluZWQoIF9fQVJNQ0NfVkVSU0lPTiApDQorDQogICAgICAgICAgICAgLyogRGVjbGFyYXRpb24gd2hlbiB0aGVzZSB2YXJpYWJsZSBhcmUgZGVmaW5lZCBpbiBjb2RlIGluc3RlYWQgb2YgYmVpbmcNCiAgICAgICAgICAgICAgKiBleHBvcnRlZCBmcm9tIGxpbmtlciBzY3JpcHRzLiAqLw0KICAgICAgICAgICAgIGV4dGVybiB1aW50MzJfdCAqIF9fcHJpdmlsZWdlZF9zcmFtX3N0YXJ0X187DQpAQCAtMTA3OSw4ICsxMDgxLDggQEAKICAgICAgICAgICAgICAqIHVzaW5nIGEgc2VwYXJhdGUgTVBVIHJlZ2lvbi4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBwcml2aWxlZ2VkDQogICAgICAgICAgICAgICogU1JBTSBpcyBhbHJlYWR5IHByb3RlY3RlZCB1c2luZyBhbiBNUFUgcmVnaW9uIGFuZCBBUk12OC1NIGRvZXMNCiAgICAgICAgICAgICAgKiBub3QgYWxsb3cgb3ZlcmxhcHBpbmcgTVBVIHJlZ2lvbnMuICovDQotICAgICAgICAgICAgaWYoIHVsUmVnaW9uU3RhcnRBZGRyZXNzID49ICggdWludDMyX3QgKSBfX3ByaXZpbGVnZWRfc3JhbV9zdGFydF9fICYmDQotICAgICAgICAgICAgICAgIHVsUmVnaW9uRW5kQWRkcmVzcyA8PSAoIHVpbnQzMl90ICkgX19wcml2aWxlZ2VkX3NyYW1fZW5kX18gKQ0KKyAgICAgICAgICAgIGlmKCAoIHVsUmVnaW9uU3RhcnRBZGRyZXNzID49ICggdWludDMyX3QgKSBfX3ByaXZpbGVnZWRfc3JhbV9zdGFydF9fICkgJiYNCisgICAgICAgICAgICAgICAgKCB1bFJlZ2lvbkVuZEFkZHJlc3MgPD0gKCB1aW50MzJfdCApIF9fcHJpdmlsZWdlZF9zcmFtX2VuZF9fICkgKQ0KICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgeE1QVVNldHRpbmdzLT54UmVnaW9uc1NldHRpbmdzWyAwIF0udWxSQkFSID0gMDsNCiAgICAgICAgICAgICAgICAgeE1QVVNldHRpbmdzLT54UmVnaW9uc1NldHRpbmdzWyAwIF0udWxSTEFSID0gMDsNCkBAIC0xMDg5LDcgKzEwOTEsNyBAQAogICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAvKiBEZWZpbmUgdGhlIHJlZ2lvbiB0aGF0IGFsbG93cyBhY2Nlc3MgdG8gdGhlIHN0YWNrLiAqLw0KICAgICAgICAgICAgICAgICB1bFJlZ2lvblN0YXJ0QWRkcmVzcyAmPSBwb3J0TVBVX1JCQVJfQUREUkVTU19NQVNLOw0KLSAgICAgICAgICAgICAgICB1bFJlZ2lvbkVuZEFkZHJlc3MgICY9IHBvcnRNUFVfUkxBUl9BRERSRVNTX01BU0s7DQorICAgICAgICAgICAgICAgIHVsUmVnaW9uRW5kQWRkcmVzcyAmPSBwb3J0TVBVX1JMQVJfQUREUkVTU19NQVNLOw0KIA0KICAgICAgICAgICAgICAgICB4TVBVU2V0dGluZ3MtPnhSZWdpb25zU2V0dGluZ3NbIDAgXS51bFJCQVIgPSAoIHVsUmVnaW9uU3RhcnRBZGRyZXNzICkgfA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIHBvcnRNUFVfUkVHSU9OX05PTl9TSEFSRUFCTEUgKSB8DQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvQkNDLzE2Qml0RE9TL0Zsc2gxODYvcG9ydC5jIGIvcG9ydGFibGUvQkNDLzE2Qml0RE9TL0Zsc2gxODYvcG9ydC5jCmluZGV4IGU0MjM2NmEuLjQ1YmY4OTMgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0JDQy8xNkJpdERPUy9GbHNoMTg2L3BvcnQuYworKysgYi9wb3J0YWJsZS9CQ0MvMTZCaXRET1MvRmxzaDE4Ni9wb3J0LmMKQEAgLTI2LDIyICsyNiwyMiBAQAogICovDQogDQogLyoNCi0gKiBDaGFuZ2VzIGZyb20gVjEuMDA6DQotICoNCi0gKyBDYWxsIHRvIHRhc2tZSUVMRCgpIGZyb20gd2l0aGluIHRpY2sgSVNSIGhhcyBiZWVuIHJlcGxhY2VkIGJ5IHRoZSBtb3JlDQotICsgICAgZWZmaWNpZW50IHBvcnRTV0lUQ0hfQ09OVEVYVCgpLg0KLSArIElTUiBmdW5jdGlvbiBkZWZpbml0aW9ucyByZW5hbWVkIHRvIGluY2x1ZGUgdGhlIHBydiBwcmVmaXguDQotICsNCi0gKyBDaGFuZ2VzIGZyb20gVjIuNi4xDQotICsNCi0gKyBSZXBsYWNlZCB0aGUgc1VzaW5nUHJlZW1wdGlvbiB2YXJpYWJsZSB3aXRoIHRoZSBjb25maWdVU0VfUFJFRU1QVElPTg0KLSArICAgIG1hY3JvIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgbGF0ZXIgcG9ydHMuDQotICovDQorQ2hhbmdlcyBmcm9tIFYxLjAwOg0KKw0KKwkrIENhbGwgdG8gdGFza1lJRUxEKCkgZnJvbSB3aXRoaW4gdGljayBJU1IgaGFzIGJlZW4gcmVwbGFjZWQgYnkgdGhlIG1vcmUNCisJICBlZmZpY2llbnQgcG9ydFNXSVRDSF9DT05URVhUKCkuDQorCSsgSVNSIGZ1bmN0aW9uIGRlZmluaXRpb25zIHJlbmFtZWQgdG8gaW5jbHVkZSB0aGUgcHJ2IHByZWZpeC4NCisNCitDaGFuZ2VzIGZyb20gVjIuNi4xDQorDQorCSsgUmVwbGFjZWQgdGhlIHNVc2luZ1ByZWVtcHRpb24gdmFyaWFibGUgd2l0aCB0aGUgY29uZmlnVVNFX1BSRUVNUFRJT04NCisJICBtYWNybyB0byBiZSBjb25zaXN0ZW50IHdpdGggdGhlIGxhdGVyIHBvcnRzLg0KKyovDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLSogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFibGUuaCBmb3IgdGhlIEZsYXNobGl0ZSAxODYNCi0qIHBvcnQuDQotKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyAqIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBGbGFzaGxpdGUgMTg2DQorICogcG9ydC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KICNpbmNsdWRlIDxkb3MuaD4NCiAjaW5jbHVkZSA8c3RkbGliLmg+DQpAQCAtNTMsMTMgKzUzLDEzIEBACiANCiAvKmxpbnQgLWU5NTAgTm9uIEFOU0kgcmVzZXJ2ZWQgd29yZHMgb2theSBpbiB0aGlzIGZpbGUgb25seS4gKi8NCiANCi0jZGVmaW5lIHBvcnRUSU1FUl9FT0lfVFlQRSAgICAgICAgICAgICAgKCA4ICkNCi0jZGVmaW5lIHBvcnRSRVNFVF9QSUMoKSAgICBwb3J0T1VUUFVUX1dPUkQoICggdWludDE2X3QgKSAweGZmMjIsIHBvcnRUSU1FUl9FT0lfVFlQRSApDQotI2RlZmluZSBwb3J0VElNRVJfSU5UX05VTUJFUiAgICAgICAgICAgIDB4MTINCisjZGVmaW5lIHBvcnRUSU1FUl9FT0lfVFlQRQkJKCA4ICkNCisjZGVmaW5lIHBvcnRSRVNFVF9QSUMoKQkJCXBvcnRPVVRQVVRfV09SRCggKCB1aW50MTZfdCApIDB4ZmYyMiwgcG9ydFRJTUVSX0VPSV9UWVBFICkNCisjZGVmaW5lIHBvcnRUSU1FUl9JTlRfTlVNQkVSCTB4MTINCiANCi0jZGVmaW5lIHBvcnRUSU1FUl8xX0NPTlRST0xfUkVHSVNURVIgICAgKCAoIHVpbnQxNl90ICkgMHhmZjVlICkNCi0jZGVmaW5lIHBvcnRUSU1FUl8wX0NPTlRST0xfUkVHSVNURVIgICAgKCAoIHVpbnQxNl90ICkgMHhmZjU2ICkNCi0jZGVmaW5lIHBvcnRUSU1FUl9JTlRFUlJVUFRfRU5BQkxFICAgICAgKCAoIHVpbnQxNl90ICkgMHgyMDAwICkNCisjZGVmaW5lIHBvcnRUSU1FUl8xX0NPTlRST0xfUkVHSVNURVIJKCAoIHVpbnQxNl90ICkgMHhmZjVlICkNCisjZGVmaW5lIHBvcnRUSU1FUl8wX0NPTlRST0xfUkVHSVNURVIJKCAoIHVpbnQxNl90ICkgMHhmZjU2ICkNCisjZGVmaW5lIHBvcnRUSU1FUl9JTlRFUlJVUFRfRU5BQkxFCQkoICggdWludDE2X3QgKSAweDIwMDAgKQ0KIA0KIC8qIFNldHVwIHRoZSBoYXJkd2FyZSB0byBnZW5lcmF0ZSB0aGUgcmVxdWlyZWQgdGljayBmcmVxdWVuY3kuICovDQogc3RhdGljIHZvaWQgcHJ2U2V0VGlja0ZyZXF1ZW5jeSggdWludDMyX3QgdWxUaWNrUmF0ZUh6ICk7DQpAQCAtNjgsMTcgKzY4LDE1IEBACiBzdGF0aWMgdm9pZCBwcnZFeGl0RnVuY3Rpb24oIHZvaWQgKTsNCiANCiAvKiBUaGUgSVNSIHVzZWQgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSBwcmVlbXB0aXZlIG9yIGNvb3BlcmF0aXZlIHNjaGVkdWxlcg0KLSAqIGlzIGJlaW5nIHVzZWQuICovDQotI2lmICggY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMSApDQotDQotLyogVGljayBzZXJ2aWNlIHJvdXRpbmUgdXNlZCBieSB0aGUgc2NoZWR1bGVyIHdoZW4gcHJlZW1wdGl2ZSBzY2hlZHVsaW5nIGlzDQotICogYmVpbmcgdXNlZC4gKi8NCi0gICAgc3RhdGljIHZvaWQgX19pbnRlcnJ1cHQgX19mYXIgcHJ2UHJlZW1wdGl2ZVRpY2soIHZvaWQgKTsNCitpcyBiZWluZyB1c2VkLiAqLw0KKyNpZiggY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMSApDQorCS8qIFRpY2sgc2VydmljZSByb3V0aW5lIHVzZWQgYnkgdGhlIHNjaGVkdWxlciB3aGVuIHByZWVtcHRpdmUgc2NoZWR1bGluZyBpcw0KKwliZWluZyB1c2VkLiAqLw0KKwlzdGF0aWMgdm9pZCBfX2ludGVycnVwdCBfX2ZhciBwcnZQcmVlbXB0aXZlVGljayggdm9pZCApOw0KICNlbHNlDQotDQotLyogVGljayBzZXJ2aWNlIHJvdXRpbmUgdXNlZCBieSB0aGUgc2NoZWR1bGVyIHdoZW4gY29vcGVyYXRpdmUgc2NoZWR1bGluZyBpcw0KLSAqIGJlaW5nIHVzZWQuICovDQotICAgIHN0YXRpYyB2b2lkIF9faW50ZXJydXB0IF9fZmFyIHBydk5vblByZWVtcHRpdmVUaWNrKCB2b2lkICk7DQorCS8qIFRpY2sgc2VydmljZSByb3V0aW5lIHVzZWQgYnkgdGhlIHNjaGVkdWxlciB3aGVuIGNvb3BlcmF0aXZlIHNjaGVkdWxpbmcgaXMNCisJYmVpbmcgdXNlZC4gKi8NCisJc3RhdGljIHZvaWQgX19pbnRlcnJ1cHQgX19mYXIgcHJ2Tm9uUHJlZW1wdGl2ZVRpY2soIHZvaWQgKTsNCiAjZW5kaWYNCiANCiAvKiBUcmFwIHJvdXRpbmUgdXNlZCBieSB0YXNrWUlFTEQoKSB0byBtYW51YWxseSBjYXVzZSBhIGNvbnRleHQgc3dpdGNoLiAqLw0KQEAgLTkwLDkgKzg4LDkgQEAKIHN0YXRpYyBCYXNlVHlwZV90IHhTY2hlZHVsZXJSdW5uaW5nID0gcGRGQUxTRTsNCiANCiAvKiBQb2ludHMgdG8gdGhlIG9yaWdpbmFsIHJvdXRpbmUgaW5zdGFsbGVkIG9uIHRoZSB2ZWN0b3Igd2UgdXNlIGZvciBtYW51YWwNCi0gKiBjb250ZXh0IHN3aXRjaGVzLiAgVGhpcyBpcyB0aGVuIHVzZWQgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgcm91dGluZSBkdXJpbmcNCi0gKiBwcnZFeGl0RnVuY3Rpb24oKS4gKi8NCi1zdGF0aWMgdm9pZCggX19pbnRlcnJ1cHQgX19mYXIgKiBweE9sZFN3aXRjaElTUiApKCk7DQorY29udGV4dCBzd2l0Y2hlcy4gIFRoaXMgaXMgdGhlbiB1c2VkIHRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIHJvdXRpbmUgZHVyaW5nDQorcHJ2RXhpdEZ1bmN0aW9uKCkuICovDQorc3RhdGljIHZvaWQgKCBfX2ludGVycnVwdCBfX2ZhciAqcHhPbGRTd2l0Y2hJU1IgKSgpOw0KIA0KIC8qIFVzZWQgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgRE9TIGNvbnRleHQgd2hlbiB0aGUgc2NoZWR1bGVyIGlzIGVuZGVkLiAqLw0KIHN0YXRpYyBqbXBfYnVmIHhKdW1wQnVmOw0KQEAgLTEwMiwxNDUgKzEwMCwxNDUgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIEJhc2VUeXBlX3QgeFBvcnRTdGFydFNjaGVkdWxlciggdm9pZCApDQogew0KLSAgICAvKiBUaGlzIGlzIGNhbGxlZCB3aXRoIGludGVycnVwdHMgYWxyZWFkeSBkaXNhYmxlZC4gKi8NCisJLyogVGhpcyBpcyBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGFscmVhZHkgZGlzYWJsZWQuICovDQogDQotICAgIC8qIFJlbWVtYmVyIHdoYXQgd2FzIG9uIHRoZSBpbnRlcnJ1cHRzIHdlIGFyZSBnb2luZyB0byB1c2UNCi0gICAgICogc28gd2UgY2FuIHB1dCB0aGVtIGJhY2sgbGF0ZXIgaWYgcmVxdWlyZWQuICovDQotICAgIHB4T2xkU3dpdGNoSVNSID0gX2Rvc19nZXR2ZWN0KCBwb3J0U1dJVENIX0lOVF9OVU1CRVIgKTsNCisJLyogUmVtZW1iZXIgd2hhdCB3YXMgb24gdGhlIGludGVycnVwdHMgd2UgYXJlIGdvaW5nIHRvIHVzZQ0KKwlzbyB3ZSBjYW4gcHV0IHRoZW0gYmFjayBsYXRlciBpZiByZXF1aXJlZC4gKi8NCisJcHhPbGRTd2l0Y2hJU1IgPSBfZG9zX2dldHZlY3QoIHBvcnRTV0lUQ0hfSU5UX05VTUJFUiApOw0KIA0KLSAgICAvKiBQdXQgb3VyIG1hbnVhbCBzd2l0Y2ggKHlpZWxkKSBmdW5jdGlvbiBvbiBhIGtub3duDQotICAgICAqIHZlY3Rvci4gKi8NCi0gICAgX2Rvc19zZXR2ZWN0KCBwb3J0U1dJVENIX0lOVF9OVU1CRVIsIHBydllpZWxkUHJvY2Vzc29yICk7DQorCS8qIFB1dCBvdXIgbWFudWFsIHN3aXRjaCAoeWllbGQpIGZ1bmN0aW9uIG9uIGEga25vd24NCisJdmVjdG9yLiAqLw0KKwlfZG9zX3NldHZlY3QoIHBvcnRTV0lUQ0hfSU5UX05VTUJFUiwgcHJ2WWllbGRQcm9jZXNzb3IgKTsNCiANCi0gICAgI2lmICggY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMSApDQotICAgICAgICB7DQotICAgICAgICAgICAgLyogUHV0IG91ciB0aWNrIHN3aXRjaCBmdW5jdGlvbiBvbiB0aGUgdGltZXIgaW50ZXJydXB0LiAqLw0KLSAgICAgICAgICAgIF9kb3Nfc2V0dmVjdCggcG9ydFRJTUVSX0lOVF9OVU1CRVIsIHBydlByZWVtcHRpdmVUaWNrICk7DQotICAgICAgICB9DQotICAgICNlbHNlDQotICAgICAgICB7DQotICAgICAgICAgICAgLyogV2Ugd2FudCB0aGUgdGltZXIgaW50ZXJydXB0IHRvIGp1c3QgaW5jcmVtZW50IHRoZSB0aWNrIGNvdW50LiAqLw0KLSAgICAgICAgICAgIF9kb3Nfc2V0dmVjdCggcG9ydFRJTUVSX0lOVF9OVU1CRVIsIHBydk5vblByZWVtcHRpdmVUaWNrICk7DQotICAgICAgICB9DQotICAgICNlbmRpZg0KKwkjaWYoIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDEgKQ0KKwl7DQorCQkvKiBQdXQgb3VyIHRpY2sgc3dpdGNoIGZ1bmN0aW9uIG9uIHRoZSB0aW1lciBpbnRlcnJ1cHQuICovDQorCQlfZG9zX3NldHZlY3QoIHBvcnRUSU1FUl9JTlRfTlVNQkVSLCBwcnZQcmVlbXB0aXZlVGljayApOw0KKwl9DQorCSNlbHNlDQorCXsNCisJCS8qIFdlIHdhbnQgdGhlIHRpbWVyIGludGVycnVwdCB0byBqdXN0IGluY3JlbWVudCB0aGUgdGljayBjb3VudC4gKi8NCisJCV9kb3Nfc2V0dmVjdCggcG9ydFRJTUVSX0lOVF9OVU1CRVIsIHBydk5vblByZWVtcHRpdmVUaWNrICk7DQorCX0NCisJI2VuZGlmDQogDQotICAgIHBydlNldFRpY2tGcmVxdWVuY3koIGNvbmZpZ1RJQ0tfUkFURV9IWiApOw0KKwlwcnZTZXRUaWNrRnJlcXVlbmN5KCBjb25maWdUSUNLX1JBVEVfSFogKTsNCiANCi0gICAgLyogQ2xlYW4gdXAgZnVuY3Rpb24gaWYgd2Ugd2FudCB0byByZXR1cm4gdG8gRE9TLiAqLw0KLSAgICBpZiggc2V0am1wKCB4SnVtcEJ1ZiApICE9IDAgKQ0KLSAgICB7DQotICAgICAgICBwcnZFeGl0RnVuY3Rpb24oKTsNCi0gICAgICAgIHhTY2hlZHVsZXJSdW5uaW5nID0gcGRGQUxTRTsNCi0gICAgfQ0KLSAgICBlbHNlDQotICAgIHsNCi0gICAgICAgIHhTY2hlZHVsZXJSdW5uaW5nID0gcGRUUlVFOw0KKwkvKiBDbGVhbiB1cCBmdW5jdGlvbiBpZiB3ZSB3YW50IHRvIHJldHVybiB0byBET1MuICovDQorCWlmKCBzZXRqbXAoIHhKdW1wQnVmICkgIT0gMCApDQorCXsNCisJCXBydkV4aXRGdW5jdGlvbigpOw0KKwkJeFNjaGVkdWxlclJ1bm5pbmcgPSBwZEZBTFNFOw0KKwl9DQorCWVsc2UNCisJew0KKwkJeFNjaGVkdWxlclJ1bm5pbmcgPSBwZFRSVUU7DQogDQotICAgICAgICAvKiBLaWNrIG9mZiB0aGUgc2NoZWR1bGVyIGJ5IHNldHRpbmcgdXAgdGhlIGNvbnRleHQgb2YgdGhlIGZpcnN0IHRhc2suICovDQotICAgICAgICBwb3J0RklSU1RfQ09OVEVYVCgpOw0KLSAgICB9DQorCQkvKiBLaWNrIG9mZiB0aGUgc2NoZWR1bGVyIGJ5IHNldHRpbmcgdXAgdGhlIGNvbnRleHQgb2YgdGhlIGZpcnN0IHRhc2suICovDQorCQlwb3J0RklSU1RfQ09OVEVYVCgpOw0KKwl9DQogDQotICAgIHJldHVybiB4U2NoZWR1bGVyUnVubmluZzsNCisJcmV0dXJuIHhTY2hlZHVsZXJSdW5uaW5nOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBUaGUgSVNSIHVzZWQgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSBwcmVlbXB0aXZlIG9yIGNvb3BlcmF0aXZlIHNjaGVkdWxlcg0KLSAqIGlzIGJlaW5nIHVzZWQuICovDQotI2lmICggY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMSApDQotICAgIHN0YXRpYyB2b2lkIF9faW50ZXJydXB0IF9fZmFyIHBydlByZWVtcHRpdmVUaWNrKCB2b2lkICkNCi0gICAgew0KLSAgICAgICAgLyogR2V0IHRoZSBzY2hlZHVsZXIgdG8gdXBkYXRlIHRoZSB0YXNrIHN0YXRlcyBmb2xsb3dpbmcgdGhlIHRpY2suICovDQotICAgICAgICBpZiggeFRhc2tJbmNyZW1lbnRUaWNrKCkgIT0gcGRGQUxTRSApDQotICAgICAgICB7DQotICAgICAgICAgICAgLyogU3dpdGNoIGluIHRoZSBjb250ZXh0IG9mIHRoZSBuZXh0IHRhc2sgdG8gYmUgcnVuLiAqLw0KLSAgICAgICAgICAgIHBvcnRTV0lUQ0hfQ09OVEVYVCgpOw0KLSAgICAgICAgfQ0KK2lzIGJlaW5nIHVzZWQuICovDQorI2lmKCBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAxICkNCisJc3RhdGljIHZvaWQgX19pbnRlcnJ1cHQgX19mYXIgcHJ2UHJlZW1wdGl2ZVRpY2soIHZvaWQgKQ0KKwl7DQorCQkvKiBHZXQgdGhlIHNjaGVkdWxlciB0byB1cGRhdGUgdGhlIHRhc2sgc3RhdGVzIGZvbGxvd2luZyB0aGUgdGljay4gKi8NCisJCWlmKCB4VGFza0luY3JlbWVudFRpY2soKSAhPSBwZEZBTFNFICkNCisJCXsNCisJCQkvKiBTd2l0Y2ggaW4gdGhlIGNvbnRleHQgb2YgdGhlIG5leHQgdGFzayB0byBiZSBydW4uICovDQorCQkJcG9ydFNXSVRDSF9DT05URVhUKCk7DQorCQl9DQogDQotICAgICAgICAvKiBSZXNldCB0aGUgUElDIHJlYWR5IGZvciB0aGUgbmV4dCB0aW1lLiAqLw0KLSAgICAgICAgcG9ydFJFU0VUX1BJQygpOw0KLSAgICB9DQotI2Vsc2UgLyogaWYgKCBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAxICkgKi8NCi0gICAgc3RhdGljIHZvaWQgX19pbnRlcnJ1cHQgX19mYXIgcHJ2Tm9uUHJlZW1wdGl2ZVRpY2soIHZvaWQgKQ0KLSAgICB7DQotICAgICAgICAvKiBTYW1lIGFzIHByZWVtcHRpdmUgdGljaywgYnV0IHRoZSBjb29wZXJhdGl2ZSBzY2hlZHVsZXIgaXMgYmVpbmcgdXNlZA0KLSAgICAgICAgICogc28gd2UgZG9uJ3QgaGF2ZSB0byBzd2l0Y2ggaW4gdGhlIGNvbnRleHQgb2YgdGhlIG5leHQgdGFzay4gKi8NCi0gICAgICAgIHhUYXNrSW5jcmVtZW50VGljaygpOw0KLSAgICAgICAgcG9ydFJFU0VUX1BJQygpOw0KLSAgICB9DQotI2VuZGlmIC8qIGlmICggY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMSApICovDQorCQkvKiBSZXNldCB0aGUgUElDIHJlYWR5IGZvciB0aGUgbmV4dCB0aW1lLiAqLw0KKwkJcG9ydFJFU0VUX1BJQygpOw0KKwl9DQorI2Vsc2UNCisJc3RhdGljIHZvaWQgX19pbnRlcnJ1cHQgX19mYXIgcHJ2Tm9uUHJlZW1wdGl2ZVRpY2soIHZvaWQgKQ0KKwl7DQorCQkvKiBTYW1lIGFzIHByZWVtcHRpdmUgdGljaywgYnV0IHRoZSBjb29wZXJhdGl2ZSBzY2hlZHVsZXIgaXMgYmVpbmcgdXNlZA0KKwkJc28gd2UgZG9uJ3QgaGF2ZSB0byBzd2l0Y2ggaW4gdGhlIGNvbnRleHQgb2YgdGhlIG5leHQgdGFzay4gKi8NCisJCXhUYXNrSW5jcmVtZW50VGljaygpOw0KKwkJcG9ydFJFU0VUX1BJQygpOw0KKwl9DQorI2VuZGlmDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogc3RhdGljIHZvaWQgX19pbnRlcnJ1cHQgX19mYXIgcHJ2WWllbGRQcm9jZXNzb3IoIHZvaWQgKQ0KIHsNCi0gICAgLyogU3dpdGNoIGluIHRoZSBjb250ZXh0IG9mIHRoZSBuZXh0IHRhc2sgdG8gYmUgcnVuLiAqLw0KLSAgICBwb3J0U1dJVENIX0NPTlRFWFQoKTsNCisJLyogU3dpdGNoIGluIHRoZSBjb250ZXh0IG9mIHRoZSBuZXh0IHRhc2sgdG8gYmUgcnVuLiAqLw0KKwlwb3J0U1dJVENIX0NPTlRFWFQoKTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogdm9pZCB2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApDQogew0KLSAgICAvKiBKdW1wIGJhY2sgdG8gdGhlIHByb2Nlc3NvciBzdGF0ZSBwcmlvciB0byBzdGFydGluZyB0aGUNCi0gICAgICogc2NoZWR1bGVyLiAgVGhpcyBtZWFucyB3ZSBhcmUgbm90IGdvaW5nIHRvIGJlIHVzaW5nIGENCi0gICAgICogdGFzayBzdGFjayBmcmFtZSBzbyB0aGUgdGFzayBjYW4gYmUgZGVsZXRlZC4gKi8NCi0gICAgbG9uZ2ptcCggeEp1bXBCdWYsIDEgKTsNCisJLyogSnVtcCBiYWNrIHRvIHRoZSBwcm9jZXNzb3Igc3RhdGUgcHJpb3IgdG8gc3RhcnRpbmcgdGhlDQorCXNjaGVkdWxlci4gIFRoaXMgbWVhbnMgd2UgYXJlIG5vdCBnb2luZyB0byBiZSB1c2luZyBhDQorCXRhc2sgc3RhY2sgZnJhbWUgc28gdGhlIHRhc2sgY2FuIGJlIGRlbGV0ZWQuICovDQorCWxvbmdqbXAoIHhKdW1wQnVmLCAxICk7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHN0YXRpYyB2b2lkIHBydkV4aXRGdW5jdGlvbiggdm9pZCApDQogew0KLSAgICBjb25zdCB1aW50MTZfdCB1c1RpbWVyRGlzYWJsZSA9IDB4MDAwMDsNCi0gICAgdWludDE2X3QgdXNUaW1lcjBDb250cm9sOw0KK2NvbnN0IHVpbnQxNl90IHVzVGltZXJEaXNhYmxlID0gMHgwMDAwOw0KK3VpbnQxNl90IHVzVGltZXIwQ29udHJvbDsNCiANCi0gICAgLyogSW50ZXJydXB0cyBzaG91bGQgYmUgZGlzYWJsZWQgaGVyZSBhbnl3YXkgLSBidXQgbm8NCi0gICAgICogaGFybSBpbiBtYWtpbmcgc3VyZS4gKi8NCi0gICAgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOw0KKwkvKiBJbnRlcnJ1cHRzIHNob3VsZCBiZSBkaXNhYmxlZCBoZXJlIGFueXdheSAtIGJ1dCBubw0KKwloYXJtIGluIG1ha2luZyBzdXJlLiAqLw0KKwlwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7DQorCWlmKCB4U2NoZWR1bGVyUnVubmluZyA9PSBwZFRSVUUgKQ0KKwl7DQorCQkvKiBQdXQgYmFjayB0aGUgc3dpdGNoIGludGVycnVwdCByb3V0aW5lcyB0aGF0IHdhcyBpbiBwbGFjZQ0KKwkJYmVmb3JlIHRoZSBzY2hlZHVsZXIgc3RhcnRlZC4gKi8NCisJCV9kb3Nfc2V0dmVjdCggcG9ydFNXSVRDSF9JTlRfTlVNQkVSLCBweE9sZFN3aXRjaElTUiApOw0KKwl9DQogDQotICAgIGlmKCB4U2NoZWR1bGVyUnVubmluZyA9PSBwZFRSVUUgKQ0KLSAgICB7DQotICAgICAgICAvKiBQdXQgYmFjayB0aGUgc3dpdGNoIGludGVycnVwdCByb3V0aW5lcyB0aGF0IHdhcyBpbiBwbGFjZQ0KLSAgICAgICAgICogYmVmb3JlIHRoZSBzY2hlZHVsZXIgc3RhcnRlZC4gKi8NCi0gICAgICAgIF9kb3Nfc2V0dmVjdCggcG9ydFNXSVRDSF9JTlRfTlVNQkVSLCBweE9sZFN3aXRjaElTUiApOw0KLSAgICB9DQorCS8qIERpc2FibGUgdGhlIHRpbWVyIHVzZWQgZm9yIHRoZSB0aWNrIHRvIGVuc3VyZSB0aGUgc2NoZWR1bGVyIGlzDQorCW5vdCBjYWxsZWQgYmVmb3JlIHJlc3RvcmluZyBpbnRlcnJ1cHRzLiAgVGhlcmUgd2FzIHByZXZpb3VzbHkgbm90aGluZw0KKwlvbiB0aGlzIHRpbWVyIHNvIHRoZXJlIGlzIG5vIG9sZCBJU1IgdG8gcmVzdG9yZS4gKi8NCisJcG9ydE9VVFBVVF9XT1JEKCBwb3J0VElNRVJfMV9DT05UUk9MX1JFR0lTVEVSLCB1c1RpbWVyRGlzYWJsZSApOw0KIA0KLSAgICAvKiBEaXNhYmxlIHRoZSB0aW1lciB1c2VkIGZvciB0aGUgdGljayB0byBlbnN1cmUgdGhlIHNjaGVkdWxlciBpcw0KLSAgICAgKiBub3QgY2FsbGVkIGJlZm9yZSByZXN0b3JpbmcgaW50ZXJydXB0cy4gIFRoZXJlIHdhcyBwcmV2aW91c2x5IG5vdGhpbmcNCi0gICAgICogb24gdGhpcyB0aW1lciBzbyB0aGVyZSBpcyBubyBvbGQgSVNSIHRvIHJlc3RvcmUuICovDQotICAgIHBvcnRPVVRQVVRfV09SRCggcG9ydFRJTUVSXzFfQ09OVFJPTF9SRUdJU1RFUiwgdXNUaW1lckRpc2FibGUgKTsNCi0NCi0gICAgLyogUmVzdGFydCB0aGUgRE9TIHRpY2suICovDQotICAgIHVzVGltZXIwQ29udHJvbCA9IHBvcnRJTlBVVF9XT1JEKCBwb3J0VElNRVJfMF9DT05UUk9MX1JFR0lTVEVSICk7DQotICAgIHVzVGltZXIwQ29udHJvbCB8PSBwb3J0VElNRVJfSU5URVJSVVBUX0VOQUJMRTsNCi0gICAgcG9ydE9VVFBVVF9XT1JEKCBwb3J0VElNRVJfMF9DT05UUk9MX1JFR0lTVEVSLCB1c1RpbWVyMENvbnRyb2wgKTsNCisJLyogUmVzdGFydCB0aGUgRE9TIHRpY2suICovDQorCXVzVGltZXIwQ29udHJvbCA9IHBvcnRJTlBVVF9XT1JEKCBwb3J0VElNRVJfMF9DT05UUk9MX1JFR0lTVEVSICk7DQorCXVzVGltZXIwQ29udHJvbCB8PSBwb3J0VElNRVJfSU5URVJSVVBUX0VOQUJMRTsNCisJcG9ydE9VVFBVVF9XT1JEKCBwb3J0VElNRVJfMF9DT05UUk9MX1JFR0lTVEVSLCB1c1RpbWVyMENvbnRyb2wgKTsNCiANCiANCi0gICAgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7DQorCXBvcnRFTkFCTEVfSU5URVJSVVBUUygpOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBzdGF0aWMgdm9pZCBwcnZTZXRUaWNrRnJlcXVlbmN5KCB1aW50MzJfdCB1bFRpY2tSYXRlSHogKQ0KIHsNCi0gICAgY29uc3QgdWludDE2X3QgdXNNYXhDb3VudFJlZ2lzdGVyID0gMHhmZjVhOw0KLSAgICBjb25zdCB1aW50MTZfdCB1c1RpbWVyUHJpb3JpdHlSZWdpc3RlciA9IDB4ZmYzMjsNCi0gICAgY29uc3QgdWludDE2X3QgdXNUaW1lckVuYWJsZSA9IDB4QzAwMDsNCi0gICAgY29uc3QgdWludDE2X3QgdXNSZXRyaWdnZXIgPSAweDAwMDE7DQotICAgIGNvbnN0IHVpbnQxNl90IHVzVGltZXJIaWdoUHJpb3JpdHkgPSAweDAwMDA7DQotICAgIHVpbnQxNl90IHVzVGltZXIwQ29udHJvbDsNCitjb25zdCB1aW50MTZfdCB1c01heENvdW50UmVnaXN0ZXIgPSAweGZmNWE7DQorY29uc3QgdWludDE2X3QgdXNUaW1lclByaW9yaXR5UmVnaXN0ZXIgPSAweGZmMzI7DQorY29uc3QgdWludDE2X3QgdXNUaW1lckVuYWJsZSA9IDB4QzAwMDsNCitjb25zdCB1aW50MTZfdCB1c1JldHJpZ2dlciA9IDB4MDAwMTsNCitjb25zdCB1aW50MTZfdCB1c1RpbWVySGlnaFByaW9yaXR5ID0gMHgwMDAwOw0KK3VpbnQxNl90IHVzVGltZXIwQ29udHJvbDsNCiANCiAvKiAoIENQVSBmcmVxdWVuY3kgLyA0ICkgLyBjbG9jayAyIG1heCBjb3VudCBbaW5wdyggMHhmZjYyICkgPSA3XSAqLw0KIA0KLSAgICBjb25zdCB1aW50MzJfdCB1bENsb2NrRnJlcXVlbmN5ID0gKCB1aW50MzJfdCApIDB4N2YzMWEwVUw7DQorY29uc3QgdWludDMyX3QgdWxDbG9ja0ZyZXF1ZW5jeSA9ICggdWludDMyX3QgKSAweDdmMzFhMFVMOw0KIA0KLSAgICB1aW50MzJfdCB1bFRpbWVyQ291bnQgPSB1bENsb2NrRnJlcXVlbmN5IC8gdWxUaWNrUmF0ZUh6Ow0KK3VpbnQzMl90IHVsVGltZXJDb3VudCA9IHVsQ2xvY2tGcmVxdWVuY3kgLyB1bFRpY2tSYXRlSHo7DQogDQotICAgIHBvcnRPVVRQVVRfV09SRCggcG9ydFRJTUVSXzFfQ09OVFJPTF9SRUdJU1RFUiwgdXNUaW1lckVuYWJsZSB8IHBvcnRUSU1FUl9JTlRFUlJVUFRfRU5BQkxFIHwgdXNSZXRyaWdnZXIgKTsNCi0gICAgcG9ydE9VVFBVVF9XT1JEKCB1c01heENvdW50UmVnaXN0ZXIsICggdWludDE2X3QgKSB1bFRpbWVyQ291bnQgKTsNCi0gICAgcG9ydE9VVFBVVF9XT1JEKCB1c1RpbWVyUHJpb3JpdHlSZWdpc3RlciwgdXNUaW1lckhpZ2hQcmlvcml0eSApOw0KKwlwb3J0T1VUUFVUX1dPUkQoIHBvcnRUSU1FUl8xX0NPTlRST0xfUkVHSVNURVIsIHVzVGltZXJFbmFibGUgfCBwb3J0VElNRVJfSU5URVJSVVBUX0VOQUJMRSB8IHVzUmV0cmlnZ2VyICk7DQorCXBvcnRPVVRQVVRfV09SRCggdXNNYXhDb3VudFJlZ2lzdGVyLCAoIHVpbnQxNl90ICkgdWxUaW1lckNvdW50ICk7DQorCXBvcnRPVVRQVVRfV09SRCggdXNUaW1lclByaW9yaXR5UmVnaXN0ZXIsIHVzVGltZXJIaWdoUHJpb3JpdHkgKTsNCiANCi0gICAgLyogU3RvcCB0aGUgRE9TIHRpY2sgLSBkb24ndCBkbyB0aGlzIGlmIHlvdSB3YW50IHRvIG1haW50YWluIGEgVE9EIGNsb2NrLiAqLw0KLSAgICB1c1RpbWVyMENvbnRyb2wgPSBwb3J0SU5QVVRfV09SRCggcG9ydFRJTUVSXzBfQ09OVFJPTF9SRUdJU1RFUiApOw0KLSAgICB1c1RpbWVyMENvbnRyb2wgJj0gfnBvcnRUSU1FUl9JTlRFUlJVUFRfRU5BQkxFOw0KLSAgICBwb3J0T1VUUFVUX1dPUkQoIHBvcnRUSU1FUl8wX0NPTlRST0xfUkVHSVNURVIsIHVzVGltZXIwQ29udHJvbCApOw0KKwkvKiBTdG9wIHRoZSBET1MgdGljayAtIGRvbid0IGRvIHRoaXMgaWYgeW91IHdhbnQgdG8gbWFpbnRhaW4gYSBUT0QgY2xvY2suICovDQorCXVzVGltZXIwQ29udHJvbCA9IHBvcnRJTlBVVF9XT1JEKCBwb3J0VElNRVJfMF9DT05UUk9MX1JFR0lTVEVSICk7DQorCXVzVGltZXIwQ29udHJvbCAmPSB+cG9ydFRJTUVSX0lOVEVSUlVQVF9FTkFCTEU7DQorCXBvcnRPVVRQVVRfV09SRCggcG9ydFRJTUVSXzBfQ09OVFJPTF9SRUdJU1RFUiwgdXNUaW1lcjBDb250cm9sICk7DQogfQ0KIA0KIA0KIC8qbGludCArZTk1MCAqLw0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0JDQy8xNkJpdERPUy9GbHNoMTg2L3BydG1hY3JvLmggYi9wb3J0YWJsZS9CQ0MvMTZCaXRET1MvRmxzaDE4Ni9wcnRtYWNyby5oCmluZGV4IGNmZDM2ZTEuLmU5NmFjODMgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0JDQy8xNkJpdERPUy9GbHNoMTg2L3BydG1hY3JvLmgKKysrIGIvcG9ydGFibGUvQkNDLzE2Qml0RE9TL0Zsc2gxODYvcHJ0bWFjcm8uaApAQCAtMzksNTkgKzM5LDU5IEBACiAgKi8NCiANCiAvKiBUeXBlIGRlZmluaXRpb25zLiAqLw0KLSNkZWZpbmUgcG9ydENIQVIgICAgICAgICAgY2hhcg0KLSNkZWZpbmUgcG9ydEZMT0FUICAgICAgICAgZmxvYXQNCi0jZGVmaW5lIHBvcnRET1VCTEUgICAgICAgIGxvbmcNCi0jZGVmaW5lIHBvcnRMT05HICAgICAgICAgIGxvbmcNCi0jZGVmaW5lIHBvcnRTSE9SVCAgICAgICAgIGludA0KLSNkZWZpbmUgcG9ydFNUQUNLX1RZUEUgICAgdWludDE2X3QNCi0jZGVmaW5lIHBvcnRCQVNFX1RZUEUgICAgIHBvcnRTSE9SVA0KKyNkZWZpbmUgcG9ydENIQVIJCWNoYXINCisjZGVmaW5lIHBvcnRGTE9BVAkJZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUJCWxvbmcNCisjZGVmaW5lIHBvcnRMT05HCQlsb25nDQorI2RlZmluZSBwb3J0U0hPUlQJCWludA0KKyNkZWZpbmUgcG9ydFNUQUNLX1RZUEUJdWludDE2X3QNCisjZGVmaW5lIHBvcnRCQVNFX1RZUEUJcG9ydFNIT1JUDQogDQotdHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSAgIFN0YWNrVHlwZV90Ow0KLXR5cGVkZWYgc2hvcnQgICAgICAgICAgICBCYXNlVHlwZV90Ow0KLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgICBVQmFzZVR5cGVfdDsNCit0eXBlZGVmIHBvcnRTVEFDS19UWVBFIFN0YWNrVHlwZV90Ow0KK3R5cGVkZWYgc2hvcnQgQmFzZVR5cGVfdDsNCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IFVCYXNlVHlwZV90Ow0KIA0KLSNpZiAoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQotICAgIHR5cGVkZWYgdWludDE2X3QgICAgIFRpY2tUeXBlX3Q7DQotICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmYNCisjaWYoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQorCXR5cGVkZWYgdWludDE2X3QgVGlja1R5cGVfdDsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggVGlja1R5cGVfdCApIDB4ZmZmZg0KICNlbHNlDQotICAgIHR5cGVkZWYgdWludDMyX3QgICAgIFRpY2tUeXBlX3Q7DQotICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwNCisJdHlwZWRlZiB1aW50MzJfdCBUaWNrVHlwZV90Ow0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQogI2VuZGlmDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogQ3JpdGljYWwgc2VjdGlvbiBoYW5kbGluZy4gKi8NCi0jZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpIFwNCi0gICAgX19hc217IHB1c2hmIH0gICAgICAgICAgIFwNCi0gICAgX19hc217IGNsaSB9ICAgICAgICAgICAgIFwNCisjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpCQkJX19hc217IHB1c2hmIH0gIFwNCisJCQkJCQkJCQkJX19hc217IGNsaSAJIH0JXA0KIA0KLSNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKSAgICAgICAgIF9fYXNteyBwb3BmIH0NCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkJCQkJX19hc217IHBvcGYgfQ0KIA0KLSNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpICAgIF9fYXNteyBjbGkgfQ0KKyNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpCQlfX2FzbXsgY2xpIH0NCiANCi0jZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpICAgICBfX2FzbXsgc3RpIH0NCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpCQkJX19hc217IHN0aSB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogSGFyZHdhcmUgc3BlY2lmaWNzLiAqLw0KLSNkZWZpbmUgcG9ydE5PUCgpICAgICAgX19hc217IG5vcCB9DQotI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RIICAgICAgICAgKCAtMSApDQotI2RlZmluZSBwb3J0U1dJVENIX0lOVF9OVU1CRVIgICAgMHg4MA0KLSNkZWZpbmUgcG9ydFlJRUxEKCkgICAgX19hc217IGludCBwb3J0U1dJVENIX0lOVF9OVU1CRVIgfQ0KLSNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TICAgICAgICggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQotI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQgICAgICAgMg0KLSNkZWZpbmUgcG9ydElOSVRJQUxfU1cgICAgICAgICAgICggKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDIwMiApIC8qIFN0YXJ0IHRoZSB0YXNrcyB3aXRoIGludGVycnVwdHMgZW5hYmxlZC4gKi8NCisjZGVmaW5lIHBvcnROT1AoKQkJCQkJCV9fYXNteyBub3AgfQ0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJCQkoIC0xICkNCisjZGVmaW5lIHBvcnRTV0lUQ0hfSU5UX05VTUJFUiAJCQkweDgwDQorI2RlZmluZSBwb3J0WUlFTEQoKQkJCQkJCV9fYXNteyBpbnQgcG9ydFNXSVRDSF9JTlRfTlVNQkVSIH0NCisjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUwkJKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCisjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVCAgICAgIDINCisjZGVmaW5lIHBvcnRJTklUSUFMX1NXCQkoICggcG9ydFNUQUNLX1RZUEUgKSAweDAyMDIgKQkvKiBTdGFydCB0aGUgdGFza3Mgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQuICovDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogQ29tcGlsZXIgc3BlY2lmaWNzLiAqLw0KLSNkZWZpbmUgcG9ydElOUFVUX0JZVEUoIHhBZGRyICkgICAgICAgICAgICAgIGlucCggeEFkZHIgKQ0KLSNkZWZpbmUgcG9ydE9VVFBVVF9CWVRFKCB4QWRkciwgdWNWYWx1ZSApICAgIG91dHAoIHhBZGRyLCB1Y1ZhbHVlICkNCi0jZGVmaW5lIHBvcnRJTlBVVF9XT1JEKCB4QWRkciApICAgICAgICAgICAgICBpbnB3KCB4QWRkciApDQotI2RlZmluZSBwb3J0T1VUUFVUX1dPUkQoIHhBZGRyLCB1c1ZhbHVlICkgICAgb3V0cHcoIHhBZGRyLCB1c1ZhbHVlICkNCisjZGVmaW5lIHBvcnRJTlBVVF9CWVRFKCB4QWRkciApCQkJCWlucCggeEFkZHIgKQ0KKyNkZWZpbmUgcG9ydE9VVFBVVF9CWVRFKCB4QWRkciwgdWNWYWx1ZSApCW91dHAoIHhBZGRyLCB1Y1ZhbHVlICkNCisjZGVmaW5lIHBvcnRJTlBVVF9XT1JEKCB4QWRkciApCQkJCWlucHcoIHhBZGRyICkNCisjZGVmaW5lIHBvcnRPVVRQVVRfV09SRCggeEFkZHIsIHVzVmFsdWUgKQlvdXRwdyggeEFkZHIsIHVzVmFsdWUgKQ0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAqLw0KLSNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZUYXNrRnVuY3Rpb24sIHZQYXJhbWV0ZXJzICkgICAgdm9pZCB2VGFza0Z1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCi0jZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2VGFza0Z1bmN0aW9uLCB2UGFyYW1ldGVycyApICAgICAgICAgIHZvaWQgdlRhc2tGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdlRhc2tGdW5jdGlvbiwgdlBhcmFtZXRlcnMgKSB2b2lkIHZUYXNrRnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdlRhc2tGdW5jdGlvbiwgdlBhcmFtZXRlcnMgKSB2b2lkIHZUYXNrRnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQogDQogI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvQkNDLzE2Qml0RE9TL1BDL3BvcnQuYyBiL3BvcnRhYmxlL0JDQy8xNkJpdERPUy9QQy9wb3J0LmMKaW5kZXggZGE4NGRkOC4uNzBhZTcwYyAxMDA2NDQKLS0tIGEvcG9ydGFibGUvQkNDLzE2Qml0RE9TL1BDL3BvcnQuYworKysgYi9wb3J0YWJsZS9CQ0MvMTZCaXRET1MvUEMvcG9ydC5jCkBAIC0yNiwxNiArMjYsMTYgQEAKICAqLw0KIA0KIC8qDQotICogQ2hhbmdlcyBmcm9tIFYyLjYuMQ0KLSAqDQotICsgUmVwbGFjZWQgdGhlIHNVc2luZ1ByZWVtcHRpb24gdmFyaWFibGUgd2l0aCB0aGUgY29uZmlnVVNFX1BSRUVNUFRJT04NCi0gKyAgICBtYWNybyB0byBiZSBjb25zaXN0ZW50IHdpdGggdGhlIGxhdGVyIHBvcnRzLg0KLSArDQotICsgQ2hhbmdlcyBmcm9tIFY0LjAuMQ0KLSArDQotICsgQWRkIGZ1bmN0aW9uIHBydlNldFRpY2tGcmVxdWVuY3lEZWZhdWx0KCkgdG8gc2V0IHRoZSBET1MgdGljayBiYWNrIHRvDQotICsgICAgaXRzIHByb3BlciB2YWx1ZSB3aGVuIHRoZSBzY2hlZHVsZXIgZXhpdHMuDQotICovDQorQ2hhbmdlcyBmcm9tIFYyLjYuMQ0KKw0KKwkrIFJlcGxhY2VkIHRoZSBzVXNpbmdQcmVlbXB0aW9uIHZhcmlhYmxlIHdpdGggdGhlIGNvbmZpZ1VTRV9QUkVFTVBUSU9ODQorCSAgbWFjcm8gdG8gYmUgY29uc2lzdGVudCB3aXRoIHRoZSBsYXRlciBwb3J0cy4NCisNCitDaGFuZ2VzIGZyb20gVjQuMC4xDQorCQ0KKwkrIEFkZCBmdW5jdGlvbiBwcnZTZXRUaWNrRnJlcXVlbmN5RGVmYXVsdCgpIHRvIHNldCB0aGUgRE9TIHRpY2sgYmFjayB0bw0KKwkgIGl0cyBwcm9wZXIgdmFsdWUgd2hlbiB0aGUgc2NoZWR1bGVyIGV4aXRzLiANCisqLw0KIA0KICNpbmNsdWRlIDxzdGRsaWIuaD4NCiAjaW5jbHVkZSA8ZG9zLmg+DQpAQCAtNDYsMTMgKzQ2LDEzIEBACiAjaW5jbHVkZSAicG9ydGFzbS5oIg0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0qIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBpbmR1c3RyaWFsDQotKiBQQyBwb3J0Lg0KLSotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgaW5kdXN0cmlhbA0KKyAqIFBDIHBvcnQuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKmxpbnQgLWU5NTAgTm9uIEFOU0kgcmVzZXJ2ZWQgd29yZHMgb2theSBpbiB0aGlzIGZpbGUgb25seS4gKi8NCiANCi0jZGVmaW5lIHBvcnRUSU1FUl9JTlRfTlVNQkVSICAgIDB4MDgNCisjZGVmaW5lIHBvcnRUSU1FUl9JTlRfTlVNQkVSCTB4MDgNCiANCiAvKiBTZXR1cCBoYXJkd2FyZSBmb3IgcmVxdWlyZWQgdGljayBpbnRlcnJ1cHQgcmF0ZS4gKi8NCiBzdGF0aWMgdm9pZCBwcnZTZXRUaWNrRnJlcXVlbmN5KCB1aW50MzJfdCB1bFRpY2tSYXRlSHogKTsNCkBAIC02MSwyOSArNjEsMjcgQEAKIHN0YXRpYyB2b2lkIHBydkV4aXRGdW5jdGlvbiggdm9pZCApOw0KIA0KIC8qIEVpdGhlciBjaGFpbiB0byB0aGUgRE9TIHRpY2sgKHdoaWNoIGl0c2VsZiBjbGVhcnMgdGhlIFBJQykgb3IgY2xlYXIgdGhlIFBJQw0KLSAqIGRpcmVjdGx5LiAgV2UgY2hhaW4gdG8gdGhlIERPUyB0aWNrIGFzIGNsb3NlIGFzIHBvc3NpYmxlIHRvIHRoZSBzdGFuZGFyZCBET1MNCi0gKiB0aWNrIHJhdGUuICovDQorZGlyZWN0bHkuICBXZSBjaGFpbiB0byB0aGUgRE9TIHRpY2sgYXMgY2xvc2UgYXMgcG9zc2libGUgdG8gdGhlIHN0YW5kYXJkIERPUw0KK3RpY2sgcmF0ZS4gKi8NCiBzdGF0aWMgdm9pZCBwcnZQb3J0UmVzZXRQSUMoIHZvaWQgKTsNCiANCiAvKiBUaGUgSVNSIHVzZWQgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSBwcmVlbXB0aXZlIG9yIGNvb3BlcmF0aXZlDQotICogc2NoZWR1bGVyIGlzIGJlaW5nIHVzZWQuICovDQotI2lmICggY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMSApDQotDQotLyogVGljayBzZXJ2aWNlIHJvdXRpbmUgdXNlZCBieSB0aGUgc2NoZWR1bGVyIHdoZW4gcHJlZW1wdGl2ZSBzY2hlZHVsaW5nIGlzDQotICogYmVpbmcgdXNlZC4gKi8NCi0gICAgc3RhdGljIHZvaWQgX19pbnRlcnJ1cHQgX19mYXIgcHJ2UHJlZW1wdGl2ZVRpY2soIHZvaWQgKTsNCitzY2hlZHVsZXIgaXMgYmVpbmcgdXNlZC4gKi8NCisjaWYoIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDEgKQ0KKwkvKiBUaWNrIHNlcnZpY2Ugcm91dGluZSB1c2VkIGJ5IHRoZSBzY2hlZHVsZXIgd2hlbiBwcmVlbXB0aXZlIHNjaGVkdWxpbmcgaXMNCisJYmVpbmcgdXNlZC4gKi8NCisJc3RhdGljIHZvaWQgX19pbnRlcnJ1cHQgX19mYXIgcHJ2UHJlZW1wdGl2ZVRpY2soIHZvaWQgKTsNCiAjZWxzZQ0KLQ0KLS8qIFRpY2sgc2VydmljZSByb3V0aW5lIHVzZWQgYnkgdGhlIHNjaGVkdWxlciB3aGVuIGNvb3BlcmF0aXZlIHNjaGVkdWxpbmcgaXMNCi0gKiBiZWluZyB1c2VkLiAqLw0KLSAgICBzdGF0aWMgdm9pZCBfX2ludGVycnVwdCBfX2ZhciBwcnZOb25QcmVlbXB0aXZlVGljayggdm9pZCApOw0KKwkvKiBUaWNrIHNlcnZpY2Ugcm91dGluZSB1c2VkIGJ5IHRoZSBzY2hlZHVsZXIgd2hlbiBjb29wZXJhdGl2ZSBzY2hlZHVsaW5nIGlzDQorCWJlaW5nIHVzZWQuICovDQorCXN0YXRpYyB2b2lkIF9faW50ZXJydXB0IF9fZmFyIHBydk5vblByZWVtcHRpdmVUaWNrKCB2b2lkICk7DQogI2VuZGlmDQogDQogLyogVHJhcCByb3V0aW5lIHVzZWQgYnkgdGFza1lJRUxEKCkgdG8gbWFudWFsbHkgY2F1c2UgYSBjb250ZXh0IHN3aXRjaC4gKi8NCiBzdGF0aWMgdm9pZCBfX2ludGVycnVwdCBfX2ZhciBwcnZZaWVsZFByb2Nlc3Nvciggdm9pZCApOw0KIA0KIC8qIFNldCB0aGUgdGljayBmcmVxdWVuY3kgYmFjayBzbyB0aGUgZmxvcHB5IGRyaXZlIHdvcmtzIGNvcnJlY3RseSB3aGVuIHRoZQ0KLSAqIHNjaGVkdWxlciBleGl0cy4gKi8NCitzY2hlZHVsZXIgZXhpdHMuICovDQogc3RhdGljIHZvaWQgcHJ2U2V0VGlja0ZyZXF1ZW5jeURlZmF1bHQoIHZvaWQgKTsNCiANCiAvKmxpbnQgLWU5NTYgRmlsZSBzY29wZXMgbmVjZXNzYXJ5IGhlcmUuICovDQpAQCAtOTIsMTMgKzkwLDEzIEBACiBzdGF0aWMgaW50MTZfdCBzRE9TVGlja0NvdW50ZXI7DQogDQogLyogU2V0IHRydWUgd2hlbiB0aGUgdmVjdG9ycyBhcmUgc2V0IHNvIHRoZSBzY2hlZHVsZXIgd2lsbCBzZXJ2aWNlIHRoZSB0aWNrLiAqLw0KLXN0YXRpYyBCYXNlVHlwZV90IHhTY2hlZHVsZXJSdW5uaW5nID0gcGRGQUxTRTsNCitzdGF0aWMgQmFzZVR5cGVfdCB4U2NoZWR1bGVyUnVubmluZyA9IHBkRkFMU0U7CQkJCQ0KIA0KIC8qIFBvaW50cyB0byB0aGUgb3JpZ2luYWwgcm91dGluZSBpbnN0YWxsZWQgb24gdGhlIHZlY3RvciB3ZSB1c2UgZm9yIG1hbnVhbCBjb250ZXh0IHN3aXRjaGVzLiAgVGhpcyBpcyB0aGVuIHVzZWQgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgcm91dGluZSBkdXJpbmcgcHJ2RXhpdEZ1bmN0aW9uKCkuICovDQotc3RhdGljIHZvaWQoIF9faW50ZXJydXB0IF9fZmFyICogcHhPbGRTd2l0Y2hJU1IgKSgpOw0KK3N0YXRpYyB2b2lkICggX19pbnRlcnJ1cHQgX19mYXIgKnB4T2xkU3dpdGNoSVNSICkoKTsJCQ0KIA0KIC8qIFBvaW50cyB0byB0aGUgb3JpZ2luYWwgcm91dGluZSBpbnN0YWxsZWQgb24gdGhlIHZlY3RvciB3ZSB1c2UgdG8gY2hhaW4gdG8gdGhlIERPUyB0aWNrLiAgVGhpcyBpcyB0aGVuIHVzZWQgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgcm91dGluZSBkdXJpbmcgcHJ2RXhpdEZ1bmN0aW9uKCkuICovDQotc3RhdGljIHZvaWQoIF9faW50ZXJydXB0IF9fZmFyICogcHhPbGRTd2l0Y2hJU1JQbHVzMSApKCk7DQorc3RhdGljIHZvaWQgKCBfX2ludGVycnVwdCBfX2ZhciAqcHhPbGRTd2l0Y2hJU1JQbHVzMSApKCk7CQ0KIA0KIC8qIFVzZWQgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgRE9TIGNvbnRleHQgd2hlbiB0aGUgc2NoZWR1bGVyIGlzIGVuZGVkLiAqLw0KIHN0YXRpYyBqbXBfYnVmIHhKdW1wQnVmOw0KQEAgLTEwOCwxODcgKzEwNiwxODMgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIEJhc2VUeXBlX3QgeFBvcnRTdGFydFNjaGVkdWxlciggdm9pZCApDQogew0KLSAgICBweElTUiBweE9yaWdpbmFsVGlja0lTUjsNCitweElTUiBweE9yaWdpbmFsVGlja0lTUjsNCisJDQorCS8qIFRoaXMgaXMgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBhbHJlYWR5IGRpc2FibGVkLiAqLw0KIA0KLSAgICAvKiBUaGlzIGlzIGNhbGxlZCB3aXRoIGludGVycnVwdHMgYWxyZWFkeSBkaXNhYmxlZC4gKi8NCisJLyogUmVtZW1iZXIgd2hhdCB3YXMgb24gdGhlIGludGVycnVwdHMgd2UgYXJlIGdvaW5nIHRvIHVzZQ0KKwlzbyB3ZSBjYW4gcHV0IHRoZW0gYmFjayBsYXRlciBpZiByZXF1aXJlZC4gKi8NCisJcHhPbGRTd2l0Y2hJU1IgPSBfZG9zX2dldHZlY3QoIHBvcnRTV0lUQ0hfSU5UX05VTUJFUiApOw0KKwlweE9yaWdpbmFsVGlja0lTUiA9IF9kb3NfZ2V0dmVjdCggcG9ydFRJTUVSX0lOVF9OVU1CRVIgKTsNCisJcHhPbGRTd2l0Y2hJU1JQbHVzMSA9IF9kb3NfZ2V0dmVjdCggcG9ydFNXSVRDSF9JTlRfTlVNQkVSICsgMSApOw0KIA0KLSAgICAvKiBSZW1lbWJlciB3aGF0IHdhcyBvbiB0aGUgaW50ZXJydXB0cyB3ZSBhcmUgZ29pbmcgdG8gdXNlDQotICAgICAqIHNvIHdlIGNhbiBwdXQgdGhlbSBiYWNrIGxhdGVyIGlmIHJlcXVpcmVkLiAqLw0KLSAgICBweE9sZFN3aXRjaElTUiA9IF9kb3NfZ2V0dmVjdCggcG9ydFNXSVRDSF9JTlRfTlVNQkVSICk7DQotICAgIHB4T3JpZ2luYWxUaWNrSVNSID0gX2Rvc19nZXR2ZWN0KCBwb3J0VElNRVJfSU5UX05VTUJFUiApOw0KLSAgICBweE9sZFN3aXRjaElTUlBsdXMxID0gX2Rvc19nZXR2ZWN0KCBwb3J0U1dJVENIX0lOVF9OVU1CRVIgKyAxICk7DQorCXBydlNldFRpY2tGcmVxdWVuY3koIGNvbmZpZ1RJQ0tfUkFURV9IWiApOw0KIA0KLSAgICBwcnZTZXRUaWNrRnJlcXVlbmN5KCBjb25maWdUSUNLX1JBVEVfSFogKTsNCisJLyogUHV0IG91ciBtYW51YWwgc3dpdGNoICh5aWVsZCkgZnVuY3Rpb24gb24gYSBrbm93bg0KKwl2ZWN0b3IuICovDQorCV9kb3Nfc2V0dmVjdCggcG9ydFNXSVRDSF9JTlRfTlVNQkVSLCBwcnZZaWVsZFByb2Nlc3NvciApOw0KIA0KLSAgICAvKiBQdXQgb3VyIG1hbnVhbCBzd2l0Y2ggKHlpZWxkKSBmdW5jdGlvbiBvbiBhIGtub3duDQotICAgICAqIHZlY3Rvci4gKi8NCi0gICAgX2Rvc19zZXR2ZWN0KCBwb3J0U1dJVENIX0lOVF9OVU1CRVIsIHBydllpZWxkUHJvY2Vzc29yICk7DQorCS8qIFB1dCB0aGUgb2xkIHRpY2sgb24gYSBkaWZmZXJlbnQgaW50ZXJydXB0IG51bWJlciBzbyB3ZSBjYW4NCisJY2FsbCBpdCB3aGVuIHdlIHdhbnQuICovDQorCV9kb3Nfc2V0dmVjdCggcG9ydFNXSVRDSF9JTlRfTlVNQkVSICsgMSwgcHhPcmlnaW5hbFRpY2tJU1IgKTsNCiANCi0gICAgLyogUHV0IHRoZSBvbGQgdGljayBvbiBhIGRpZmZlcmVudCBpbnRlcnJ1cHQgbnVtYmVyIHNvIHdlIGNhbg0KLSAgICAgKiBjYWxsIGl0IHdoZW4gd2Ugd2FudC4gKi8NCi0gICAgX2Rvc19zZXR2ZWN0KCBwb3J0U1dJVENIX0lOVF9OVU1CRVIgKyAxLCBweE9yaWdpbmFsVGlja0lTUiApOw0KLQ0KLSAgICAvKiBUaGUgSVNSIHVzZWQgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSBwcmVlbXB0aXZlIG9yIGNvb3BlcmF0aXZlDQotICAgICAqIHNjaGVkdWxlciBpcyBiZWluZyB1c2VkLiAqLw0KLSAgICAjaWYgKCBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAxICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICAvKiBQdXQgb3VyIHRpY2sgc3dpdGNoIGZ1bmN0aW9uIG9uIHRoZSB0aW1lciBpbnRlcnJ1cHQuICovDQotICAgICAgICAgICAgX2Rvc19zZXR2ZWN0KCBwb3J0VElNRVJfSU5UX05VTUJFUiwgcHJ2UHJlZW1wdGl2ZVRpY2sgKTsNCi0gICAgICAgIH0NCi0gICAgI2Vsc2UNCi0gICAgICAgIHsNCi0gICAgICAgICAgICAvKiBXZSB3YW50IHRoZSB0aW1lciBpbnRlcnJ1cHQgdG8ganVzdCBpbmNyZW1lbnQgdGhlIHRpY2sgY291bnQuICovDQotICAgICAgICAgICAgX2Rvc19zZXR2ZWN0KCBwb3J0VElNRVJfSU5UX05VTUJFUiwgcHJ2Tm9uUHJlZW1wdGl2ZVRpY2sgKTsNCi0gICAgICAgIH0NCisJLyogVGhlIElTUiB1c2VkIGRlcGVuZHMgb24gd2hldGhlciB0aGUgcHJlZW1wdGl2ZSBvciBjb29wZXJhdGl2ZQ0KKwlzY2hlZHVsZXIgaXMgYmVpbmcgdXNlZC4gKi8NCisJI2lmKCBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAxICkNCisJew0KKwkJLyogUHV0IG91ciB0aWNrIHN3aXRjaCBmdW5jdGlvbiBvbiB0aGUgdGltZXIgaW50ZXJydXB0LiAqLw0KKwkJX2Rvc19zZXR2ZWN0KCBwb3J0VElNRVJfSU5UX05VTUJFUiwgcHJ2UHJlZW1wdGl2ZVRpY2sgKTsNCisJfQ0KKwkjZWxzZQ0KKwl7DQorCQkvKiBXZSB3YW50IHRoZSB0aW1lciBpbnRlcnJ1cHQgdG8ganVzdCBpbmNyZW1lbnQgdGhlIHRpY2sgY291bnQuICovDQorCQlfZG9zX3NldHZlY3QoIHBvcnRUSU1FUl9JTlRfTlVNQkVSLCBwcnZOb25QcmVlbXB0aXZlVGljayApOw0KKwl9DQogICAgICNlbmRpZg0KIA0KLSAgICAvKiBTZXR1cCBhIGNvdW50ZXIgdGhhdCBpcyB1c2VkIHRvIGNhbGwgdGhlIERPUyBpbnRlcnJ1cHQgYXMgY2xvc2UNCi0gICAgICogdG8gaXQncyBvcmlnaW5hbCBmcmVxdWVuY3kgYXMgY2FuIGJlIGFjaGlldmVkIGdpdmVuIG91ciBjaG9zZW4gdGljaw0KLSAgICAgKiBmcmVxdWVuY3kuICovDQotICAgIHNET1NUaWNrQ291bnRlciA9IHBvcnRUSUNLU19QRVJfRE9TX1RJQ0s7DQorCS8qIFNldHVwIGEgY291bnRlciB0aGF0IGlzIHVzZWQgdG8gY2FsbCB0aGUgRE9TIGludGVycnVwdCBhcyBjbG9zZQ0KKwl0byBpdCdzIG9yaWdpbmFsIGZyZXF1ZW5jeSBhcyBjYW4gYmUgYWNoaWV2ZWQgZ2l2ZW4gb3VyIGNob3NlbiB0aWNrDQorCWZyZXF1ZW5jeS4gKi8NCisJc0RPU1RpY2tDb3VudGVyID0gcG9ydFRJQ0tTX1BFUl9ET1NfVElDSzsNCiANCi0gICAgLyogQ2xlYW4gdXAgZnVuY3Rpb24gaWYgd2Ugd2FudCB0byByZXR1cm4gdG8gRE9TLiAqLw0KLSAgICBpZiggc2V0am1wKCB4SnVtcEJ1ZiApICE9IDAgKQ0KLSAgICB7DQotICAgICAgICBwcnZFeGl0RnVuY3Rpb24oKTsNCi0gICAgICAgIHhTY2hlZHVsZXJSdW5uaW5nID0gcGRGQUxTRTsNCi0gICAgfQ0KLSAgICBlbHNlDQotICAgIHsNCi0gICAgICAgIHhTY2hlZHVsZXJSdW5uaW5nID0gcGRUUlVFOw0KKwkvKiBDbGVhbiB1cCBmdW5jdGlvbiBpZiB3ZSB3YW50IHRvIHJldHVybiB0byBET1MuICovDQorCWlmKCBzZXRqbXAoIHhKdW1wQnVmICkgIT0gMCApDQorCXsNCisJCXBydkV4aXRGdW5jdGlvbigpOw0KKwkJeFNjaGVkdWxlclJ1bm5pbmcgPSBwZEZBTFNFOw0KKwl9DQorCWVsc2UNCisJew0KKwkJeFNjaGVkdWxlclJ1bm5pbmcgPSBwZFRSVUU7DQogDQotICAgICAgICAvKiBLaWNrIG9mZiB0aGUgc2NoZWR1bGVyIGJ5IHNldHRpbmcgdXAgdGhlIGNvbnRleHQgb2YgdGhlIGZpcnN0IHRhc2suICovDQotICAgICAgICBwb3J0RklSU1RfQ09OVEVYVCgpOw0KLSAgICB9DQorCQkvKiBLaWNrIG9mZiB0aGUgc2NoZWR1bGVyIGJ5IHNldHRpbmcgdXAgdGhlIGNvbnRleHQgb2YgdGhlIGZpcnN0IHRhc2suICovDQorCQlwb3J0RklSU1RfQ09OVEVYVCgpOw0KKwl9DQogDQotICAgIHJldHVybiB4U2NoZWR1bGVyUnVubmluZzsNCisJcmV0dXJuIHhTY2hlZHVsZXJSdW5uaW5nOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBUaGUgSVNSIHVzZWQgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSBwcmVlbXB0aXZlIG9yIGNvb3BlcmF0aXZlDQotICogc2NoZWR1bGVyIGlzIGJlaW5nIHVzZWQuICovDQotI2lmICggY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMSApDQotICAgIHN0YXRpYyB2b2lkIF9faW50ZXJydXB0IF9fZmFyIHBydlByZWVtcHRpdmVUaWNrKCB2b2lkICkNCi0gICAgew0KLSAgICAgICAgLyogR2V0IHRoZSBzY2hlZHVsZXIgdG8gdXBkYXRlIHRoZSB0YXNrIHN0YXRlcyBmb2xsb3dpbmcgdGhlIHRpY2suICovDQotICAgICAgICBpZiggeFRhc2tJbmNyZW1lbnRUaWNrKCkgIT0gcGRGQUxTRSApDQotICAgICAgICB7DQotICAgICAgICAgICAgLyogU3dpdGNoIGluIHRoZSBjb250ZXh0IG9mIHRoZSBuZXh0IHRhc2sgdG8gYmUgcnVuLiAqLw0KLSAgICAgICAgICAgIHBvcnRTV0lUQ0hfQ09OVEVYVCgpOw0KLSAgICAgICAgfQ0KK3NjaGVkdWxlciBpcyBiZWluZyB1c2VkLiAqLw0KKyNpZiggY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMSApDQorCXN0YXRpYyB2b2lkIF9faW50ZXJydXB0IF9fZmFyIHBydlByZWVtcHRpdmVUaWNrKCB2b2lkICkNCisJew0KKwkJLyogR2V0IHRoZSBzY2hlZHVsZXIgdG8gdXBkYXRlIHRoZSB0YXNrIHN0YXRlcyBmb2xsb3dpbmcgdGhlIHRpY2suICovDQorCQlpZiggeFRhc2tJbmNyZW1lbnRUaWNrKCkgIT0gcGRGQUxTRSApDQorCQl7DQorCQkJLyogU3dpdGNoIGluIHRoZSBjb250ZXh0IG9mIHRoZSBuZXh0IHRhc2sgdG8gYmUgcnVuLiAqLw0KKwkJCXBvcnRTV0lUQ0hfQ09OVEVYVCgpOw0KKwkJfQ0KIA0KLSAgICAgICAgLyogUmVzZXQgdGhlIFBJQyByZWFkeSBmb3IgdGhlIG5leHQgdGltZS4gKi8NCi0gICAgICAgIHBydlBvcnRSZXNldFBJQygpOw0KLSAgICB9DQotI2Vsc2UgLyogaWYgKCBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAxICkgKi8NCi0gICAgc3RhdGljIHZvaWQgX19pbnRlcnJ1cHQgX19mYXIgcHJ2Tm9uUHJlZW1wdGl2ZVRpY2soIHZvaWQgKQ0KLSAgICB7DQotICAgICAgICAvKiBTYW1lIGFzIHByZWVtcHRpdmUgdGljaywgYnV0IHRoZSBjb29wZXJhdGl2ZSBzY2hlZHVsZXIgaXMgYmVpbmcgdXNlZA0KLSAgICAgICAgICogc28gd2UgZG9uJ3QgaGF2ZSB0byBzd2l0Y2ggaW4gdGhlIGNvbnRleHQgb2YgdGhlIG5leHQgdGFzay4gKi8NCi0gICAgICAgIHhUYXNrSW5jcmVtZW50VGljaygpOw0KLSAgICAgICAgcHJ2UG9ydFJlc2V0UElDKCk7DQotICAgIH0NCi0jZW5kaWYgLyogaWYgKCBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAxICkgKi8NCisJCS8qIFJlc2V0IHRoZSBQSUMgcmVhZHkgZm9yIHRoZSBuZXh0IHRpbWUuICovDQorCQlwcnZQb3J0UmVzZXRQSUMoKTsNCisJfQ0KKyNlbHNlDQorCXN0YXRpYyB2b2lkIF9faW50ZXJydXB0IF9fZmFyIHBydk5vblByZWVtcHRpdmVUaWNrKCB2b2lkICkNCisJew0KKwkJLyogU2FtZSBhcyBwcmVlbXB0aXZlIHRpY2ssIGJ1dCB0aGUgY29vcGVyYXRpdmUgc2NoZWR1bGVyIGlzIGJlaW5nIHVzZWQNCisJCXNvIHdlIGRvbid0IGhhdmUgdG8gc3dpdGNoIGluIHRoZSBjb250ZXh0IG9mIHRoZSBuZXh0IHRhc2suICovDQorCQl4VGFza0luY3JlbWVudFRpY2soKTsNCisJCXBydlBvcnRSZXNldFBJQygpOw0KKwl9DQorI2VuZGlmDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogc3RhdGljIHZvaWQgX19pbnRlcnJ1cHQgX19mYXIgcHJ2WWllbGRQcm9jZXNzb3IoIHZvaWQgKQ0KIHsNCi0gICAgLyogU3dpdGNoIGluIHRoZSBjb250ZXh0IG9mIHRoZSBuZXh0IHRhc2sgdG8gYmUgcnVuLiAqLw0KLSAgICBwb3J0U1dJVENIX0NPTlRFWFQoKTsNCisJLyogU3dpdGNoIGluIHRoZSBjb250ZXh0IG9mIHRoZSBuZXh0IHRhc2sgdG8gYmUgcnVuLiAqLw0KKwlwb3J0U1dJVENIX0NPTlRFWFQoKTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogc3RhdGljIHZvaWQgcHJ2UG9ydFJlc2V0UElDKCB2b2lkICkNCiB7DQotICAgIC8qIFdlIGFyZSBnb2luZyB0byBjYWxsIHRoZSBET1MgdGljayBpbnRlcnJ1cHQgYXQgYXMgY2xvc2UgYQ0KLSAgICAgKiBmcmVxdWVuY3kgdG8gdGhlIG5vcm1hbCBET1MgdGljayBhcyBwb3NzaWJsZS4gKi8NCisJLyogV2UgYXJlIGdvaW5nIHRvIGNhbGwgdGhlIERPUyB0aWNrIGludGVycnVwdCBhdCBhcyBjbG9zZSBhDQorCWZyZXF1ZW5jeSB0byB0aGUgbm9ybWFsIERPUyB0aWNrIGFzIHBvc3NpYmxlLiAqLw0KIA0KLSAgICAvKiBXRSBTSE9VTEQgTk9UIERPIFRISVMgSUYgWUlFTEQgV0FTIENBTExFRC4gKi8NCi0gICAgLS1zRE9TVGlja0NvdW50ZXI7DQotDQotICAgIGlmKCBzRE9TVGlja0NvdW50ZXIgPD0gMCApDQotICAgIHsNCi0gICAgICAgIHNET1NUaWNrQ291bnRlciA9ICggaW50MTZfdCApIHBvcnRUSUNLU19QRVJfRE9TX1RJQ0s7DQotICAgICAgICBfX2FzbSB7DQotICAgICAgICAgICAgaW50IHBvcnRTV0lUQ0hfSU5UX05VTUJFUiArIDENCi0gICAgICAgIH07DQotICAgIH0NCi0gICAgZWxzZQ0KLSAgICB7DQotICAgICAgICAvKiBSZXNldCB0aGUgUElDIGFzIHRoZSBET1MgdGljayBpcyBub3QgYmVpbmcgY2FsbGVkIHRvDQotICAgICAgICAgKiBkbyBpdC4gKi8NCi0gICAgICAgIF9fYXNtDQotICAgICAgICB7DQotICAgICAgICAgICAgbW92IGFsLCAyMEgNCi0gICAgICAgICAgICBvdXQgMjBILCBhbA0KLSAgICAgICAgfTsNCi0gICAgfQ0KKwkvKiBXRSBTSE9VTEQgTk9UIERPIFRISVMgSUYgWUlFTEQgV0FTIENBTExFRC4gKi8NCisJLS1zRE9TVGlja0NvdW50ZXI7DQorCWlmKCBzRE9TVGlja0NvdW50ZXIgPD0gMCApDQorCXsNCisJCXNET1NUaWNrQ291bnRlciA9ICggaW50MTZfdCApIHBvcnRUSUNLU19QRVJfRE9TX1RJQ0s7DQorCQlfX2FzbXsgaW50CXBvcnRTV0lUQ0hfSU5UX05VTUJFUiArIDEgfTsJCSANCisJfQ0KKwllbHNlDQorCXsNCisJCS8qIFJlc2V0IHRoZSBQSUMgYXMgdGhlIERPUyB0aWNrIGlzIG5vdCBiZWluZyBjYWxsZWQgdG8NCisJCWRvIGl0LiAqLw0KKwkJX19hc20NCisJCXsNCisJCQltb3YJYWwsIDIwSA0KKwkJCW91dCAyMEgsIGFsDQorCQl9Ow0KKwl9DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQ0KIHsNCi0gICAgLyogSnVtcCBiYWNrIHRvIHRoZSBwcm9jZXNzb3Igc3RhdGUgcHJpb3IgdG8gc3RhcnRpbmcgdGhlDQotICAgICAqIHNjaGVkdWxlci4gIFRoaXMgbWVhbnMgd2UgYXJlIG5vdCBnb2luZyB0byBiZSB1c2luZyBhDQotICAgICAqIHRhc2sgc3RhY2sgZnJhbWUgc28gdGhlIHRhc2sgY2FuIGJlIGRlbGV0ZWQuICovDQotICAgIGxvbmdqbXAoIHhKdW1wQnVmLCAxICk7DQorCS8qIEp1bXAgYmFjayB0byB0aGUgcHJvY2Vzc29yIHN0YXRlIHByaW9yIHRvIHN0YXJ0aW5nIHRoZQ0KKwlzY2hlZHVsZXIuICBUaGlzIG1lYW5zIHdlIGFyZSBub3QgZ29pbmcgdG8gYmUgdXNpbmcgYQ0KKwl0YXNrIHN0YWNrIGZyYW1lIHNvIHRoZSB0YXNrIGNhbiBiZSBkZWxldGVkLiAqLw0KKwlsb25nam1wKCB4SnVtcEJ1ZiwgMSApOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBzdGF0aWMgdm9pZCBwcnZFeGl0RnVuY3Rpb24oIHZvaWQgKQ0KIHsNCi0gICAgdm9pZCggX19pbnRlcnJ1cHQgX19mYXIgKiBweE9yaWdpbmFsVGlja0lTUiApKCk7DQordm9pZCAoIF9faW50ZXJydXB0IF9fZmFyICpweE9yaWdpbmFsVGlja0lTUiApKCk7DQogDQotICAgIC8qIEludGVycnVwdHMgc2hvdWxkIGJlIGRpc2FibGVkIGhlcmUgYW55d2F5IC0gYnV0IG5vDQotICAgICAqIGhhcm0gaW4gbWFraW5nIHN1cmUuICovDQotICAgIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsNCisJLyogSW50ZXJydXB0cyBzaG91bGQgYmUgZGlzYWJsZWQgaGVyZSBhbnl3YXkgLSBidXQgbm8gDQorCWhhcm0gaW4gbWFraW5nIHN1cmUuICovDQorCXBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsNCisJaWYoIHhTY2hlZHVsZXJSdW5uaW5nID09IHBkVFJVRSApDQorCXsNCisJCS8qIFNldCB0aGUgRE9TIHRpY2sgYmFjayBvbnRvIHRoZSB0aW1lciB0aWNrZXIuICovDQorCQlweE9yaWdpbmFsVGlja0lTUiA9IF9kb3NfZ2V0dmVjdCggcG9ydFNXSVRDSF9JTlRfTlVNQkVSICsgMSApOw0KKwkJX2Rvc19zZXR2ZWN0KCBwb3J0VElNRVJfSU5UX05VTUJFUiwgcHhPcmlnaW5hbFRpY2tJU1IgKTsNCisJCXBydlNldFRpY2tGcmVxdWVuY3lEZWZhdWx0KCk7DQogDQotICAgIGlmKCB4U2NoZWR1bGVyUnVubmluZyA9PSBwZFRSVUUgKQ0KLSAgICB7DQotICAgICAgICAvKiBTZXQgdGhlIERPUyB0aWNrIGJhY2sgb250byB0aGUgdGltZXIgdGlja2VyLiAqLw0KLSAgICAgICAgcHhPcmlnaW5hbFRpY2tJU1IgPSBfZG9zX2dldHZlY3QoIHBvcnRTV0lUQ0hfSU5UX05VTUJFUiArIDEgKTsNCi0gICAgICAgIF9kb3Nfc2V0dmVjdCggcG9ydFRJTUVSX0lOVF9OVU1CRVIsIHB4T3JpZ2luYWxUaWNrSVNSICk7DQotICAgICAgICBwcnZTZXRUaWNrRnJlcXVlbmN5RGVmYXVsdCgpOw0KLQ0KLSAgICAgICAgLyogUHV0IGJhY2sgdGhlIHN3aXRjaCBpbnRlcnJ1cHQgcm91dGluZXMgdGhhdCB3YXMgaW4gcGxhY2UNCi0gICAgICAgICAqIGJlZm9yZSB0aGUgc2NoZWR1bGVyIHN0YXJ0ZWQuICovDQotICAgICAgICBfZG9zX3NldHZlY3QoIHBvcnRTV0lUQ0hfSU5UX05VTUJFUiwgcHhPbGRTd2l0Y2hJU1IgKTsNCi0gICAgICAgIF9kb3Nfc2V0dmVjdCggcG9ydFNXSVRDSF9JTlRfTlVNQkVSICsgMSwgcHhPbGRTd2l0Y2hJU1JQbHVzMSApOw0KLSAgICB9DQotDQotICAgIC8qIFRoZSB0aWNrIHRpbWVyIGlzIGJhY2sgaG93IERPUyB3YW50cyBpdC4gIFdlIGNhbiByZS1lbmFibGUNCi0gICAgICogaW50ZXJydXB0cyB3aXRob3V0IHRoZSBzY2hlZHVsZXIgYmVpbmcgY2FsbGVkLiAqLw0KLSAgICBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKTsNCisJCS8qIFB1dCBiYWNrIHRoZSBzd2l0Y2ggaW50ZXJydXB0IHJvdXRpbmVzIHRoYXQgd2FzIGluIHBsYWNlDQorCQliZWZvcmUgdGhlIHNjaGVkdWxlciBzdGFydGVkLiAqLw0KKwkJX2Rvc19zZXR2ZWN0KCBwb3J0U1dJVENIX0lOVF9OVU1CRVIsIHB4T2xkU3dpdGNoSVNSICk7DQorCQlfZG9zX3NldHZlY3QoIHBvcnRTV0lUQ0hfSU5UX05VTUJFUiArIDEsIHB4T2xkU3dpdGNoSVNSUGx1czEgKTsNCisJfQ0KKwkvKiBUaGUgdGljayB0aW1lciBpcyBiYWNrIGhvdyBET1Mgd2FudHMgaXQuICBXZSBjYW4gcmUtZW5hYmxlDQorCWludGVycnVwdHMgd2l0aG91dCB0aGUgc2NoZWR1bGVyIGJlaW5nIGNhbGxlZC4gKi8NCisJcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHN0YXRpYyB2b2lkIHBydlNldFRpY2tGcmVxdWVuY3koIHVpbnQzMl90IHVsVGlja1JhdGVIeiApDQogew0KLSAgICBjb25zdCB1aW50MTZfdCB1c1BJVF9NT0RFID0gKCB1aW50MTZfdCApIDB4NDM7DQotICAgIGNvbnN0IHVpbnQxNl90IHVzUElUMCA9ICggdWludDE2X3QgKSAweDQwOw0KLSAgICBjb25zdCB1aW50MzJfdCB1bFBJVF9DT05TVCA9ICggdWludDMyX3QgKSAxMTkzMTgwVUw7DQotICAgIGNvbnN0IHVpbnQxNl90IHVzODI1NF9DVFIwX01PREUzID0gKCB1aW50MTZfdCApIDB4MzY7DQotICAgIHVpbnQzMl90IHVsT3V0cHV0Ow0KK2NvbnN0IHVpbnQxNl90IHVzUElUX01PREUgPSAoIHVpbnQxNl90ICkgMHg0MzsNCitjb25zdCB1aW50MTZfdCB1c1BJVDAgPSAoIHVpbnQxNl90ICkgMHg0MDsNCitjb25zdCB1aW50MzJfdCB1bFBJVF9DT05TVCA9ICggdWludDMyX3QgKSAxMTkzMTgwVUw7DQorY29uc3QgdWludDE2X3QgdXM4MjU0X0NUUjBfTU9ERTMgPSAoIHVpbnQxNl90ICkgMHgzNjsNCit1aW50MzJfdCB1bE91dHB1dDsNCiANCi0gICAgLyogU2V0dXAgdGhlIDgyNDUgdG8gdGljayBhdCB0aGUgd2FudGVkIGZyZXF1ZW5jeS4gKi8NCi0gICAgcG9ydE9VVFBVVF9CWVRFKCB1c1BJVF9NT0RFLCB1czgyNTRfQ1RSMF9NT0RFMyApOw0KLSAgICB1bE91dHB1dCA9IHVsUElUX0NPTlNUIC8gdWxUaWNrUmF0ZUh6Ow0KLSAgICBwb3J0T1VUUFVUX0JZVEUoIHVzUElUMCwgKCB1aW50MTZfdCApICggdWxPdXRwdXQgJiAoIHVpbnQzMl90ICkgMHhmZiApICk7DQotICAgIHVsT3V0cHV0ID4+PSA4Ow0KLSAgICBwb3J0T1VUUFVUX0JZVEUoIHVzUElUMCwgKCB1aW50MTZfdCApICggdWxPdXRwdXQgJiAoIHVpbnQzMl90ICkgMHhmZiApICk7DQorCS8qIFNldHVwIHRoZSA4MjQ1IHRvIHRpY2sgYXQgdGhlIHdhbnRlZCBmcmVxdWVuY3kuICovDQorCXBvcnRPVVRQVVRfQllURSggdXNQSVRfTU9ERSwgdXM4MjU0X0NUUjBfTU9ERTMgKTsNCisJdWxPdXRwdXQgPSB1bFBJVF9DT05TVCAvIHVsVGlja1JhdGVIejsNCisJcG9ydE9VVFBVVF9CWVRFKCB1c1BJVDAsICggdWludDE2X3QgKSggdWxPdXRwdXQgJiAoIHVpbnQzMl90ICkgMHhmZiApICk7DQorCXVsT3V0cHV0ID4+PSA4Ow0KKwlwb3J0T1VUUFVUX0JZVEUoIHVzUElUMCwgKCB1aW50MTZfdCApICggdWxPdXRwdXQgJiAoIHVpbnQzMl90ICkgMHhmZiApICk7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHN0YXRpYyB2b2lkIHBydlNldFRpY2tGcmVxdWVuY3lEZWZhdWx0KCB2b2lkICkNCiB7DQotICAgIGNvbnN0IHVpbnQxNl90IHVzUElUX01PREUgPSAoIHVpbnQxNl90ICkgMHg0MzsNCi0gICAgY29uc3QgdWludDE2X3QgdXNQSVQwID0gKCB1aW50MTZfdCApIDB4NDA7DQotICAgIGNvbnN0IHVpbnQxNl90IHVzODI1NF9DVFIwX01PREUzID0gKCB1aW50MTZfdCApIDB4MzY7DQorY29uc3QgdWludDE2X3QgdXNQSVRfTU9ERSA9ICggdWludDE2X3QgKSAweDQzOw0KK2NvbnN0IHVpbnQxNl90IHVzUElUMCA9ICggdWludDE2X3QgKSAweDQwOw0KK2NvbnN0IHVpbnQxNl90IHVzODI1NF9DVFIwX01PREUzID0gKCB1aW50MTZfdCApIDB4MzY7DQogDQotICAgIHBvcnRPVVRQVVRfQllURSggdXNQSVRfTU9ERSwgdXM4MjU0X0NUUjBfTU9ERTMgKTsNCi0gICAgcG9ydE9VVFBVVF9CWVRFKCB1c1BJVDAsIDAgKTsNCi0gICAgcG9ydE9VVFBVVF9CWVRFKCB1c1BJVDAsIDAgKTsNCisJcG9ydE9VVFBVVF9CWVRFKCB1c1BJVF9NT0RFLCB1czgyNTRfQ1RSMF9NT0RFMyApOw0KKwlwb3J0T1VUUFVUX0JZVEUoIHVzUElUMCwwICk7DQorCXBvcnRPVVRQVVRfQllURSggdXNQSVQwLDAgKTsNCiB9DQogDQogDQogLypsaW50ICtlOTUwICovDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvQkNDLzE2Qml0RE9TL1BDL3BydG1hY3JvLmggYi9wb3J0YWJsZS9CQ0MvMTZCaXRET1MvUEMvcHJ0bWFjcm8uaAppbmRleCBmOTRlYzIzLi5jZmM3NGYzIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9CQ0MvMTZCaXRET1MvUEMvcHJ0bWFjcm8uaAorKysgYi9wb3J0YWJsZS9CQ0MvMTZCaXRET1MvUEMvcHJ0bWFjcm8uaApAQCAtMzksNTkgKzM5LDU5IEBACiAgKi8NCiANCiAvKiBUeXBlIGRlZmluaXRpb25zLiAqLw0KLSNkZWZpbmUgcG9ydENIQVIgICAgICAgICAgY2hhcg0KLSNkZWZpbmUgcG9ydEZMT0FUICAgICAgICAgbG9uZw0KLSNkZWZpbmUgcG9ydERPVUJMRSAgICAgICAgbG9uZw0KLSNkZWZpbmUgcG9ydExPTkcgICAgICAgICAgbG9uZw0KLSNkZWZpbmUgcG9ydFNIT1JUICAgICAgICAgaW50DQotI2RlZmluZSBwb3J0U1RBQ0tfVFlQRSAgICB1aW50MTZfdA0KLSNkZWZpbmUgcG9ydEJBU0VfVFlQRSAgICAgcG9ydFNIT1JUDQorI2RlZmluZSBwb3J0Q0hBUgkJY2hhcg0KKyNkZWZpbmUgcG9ydEZMT0FUCQlsb25nDQorI2RlZmluZSBwb3J0RE9VQkxFCQlsb25nDQorI2RlZmluZSBwb3J0TE9ORwkJbG9uZw0KKyNkZWZpbmUgcG9ydFNIT1JUCQlpbnQNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFCXVpbnQxNl90DQorI2RlZmluZSBwb3J0QkFTRV9UWVBFCXBvcnRTSE9SVA0KIA0KLXR5cGVkZWYgcG9ydFNUQUNLX1RZUEUgICBTdGFja1R5cGVfdDsNCi10eXBlZGVmIHNob3J0ICAgICAgICAgICAgQmFzZVR5cGVfdDsNCi10eXBlZGVmIHVuc2lnbmVkIHNob3J0ICAgVUJhc2VUeXBlX3Q7DQordHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSBTdGFja1R5cGVfdDsNCit0eXBlZGVmIHNob3J0IEJhc2VUeXBlX3Q7DQordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBVQmFzZVR5cGVfdDsNCiANCi0jaWYgKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KLSAgICB0eXBlZGVmIHVpbnQxNl90ICAgICBUaWNrVHlwZV90Ow0KLSAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQorI2lmKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KKwl0eXBlZGVmIHVpbnQxNl90IFRpY2tUeXBlX3Q7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIFRpY2tUeXBlX3QgKSAweGZmZmYNCiAjZWxzZQ0KLSAgICB0eXBlZGVmIHVpbnQzMl90ICAgICBUaWNrVHlwZV90Ow0KLSAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQorCXR5cGVkZWYgdWludDMyX3QgVGlja1R5cGVfdDsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTA0KICNlbmRpZg0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIENyaXRpY2FsIHNlY3Rpb24gbWFuYWdlbWVudC4gKi8NCi0jZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpIFwNCi0gICAgX19hc217IHB1c2hmIH0gICAgICAgICAgIFwNCi0gICAgX19hc217IGNsaSB9ICAgICAgICAgICAgIFwNCisjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpCQkJX19hc217IHB1c2hmIH0gIFwNCisJCQkJCQkJCQkJX19hc217IGNsaSAJIH0JXA0KIA0KLSNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKSAgICAgICAgIF9fYXNteyBwb3BmIH0NCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkJCQkJX19hc217IHBvcGYgfQ0KIA0KLSNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpICAgIF9fYXNteyBjbGkgfQ0KKyNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpCQlfX2FzbXsgY2xpIH0NCiANCi0jZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpICAgICBfX2FzbXsgc3RpIH0NCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpCQkJX19hc217IHN0aSB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogSGFyZHdhcmUgc3BlY2lmaWNzLiAqLw0KLSNkZWZpbmUgcG9ydE5PUCgpICAgICAgX19hc217IG5vcCB9DQotI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RIICAgICAgICAgICggLTEgKQ0KLSNkZWZpbmUgcG9ydFNXSVRDSF9JTlRfTlVNQkVSICAgICAweDgwDQotI2RlZmluZSBwb3J0WUlFTEQoKSAgICBfX2FzbXsgaW50IHBvcnRTV0lUQ0hfSU5UX05VTUJFUiB9DQotI2RlZmluZSBwb3J0RE9TX1RJQ0tfUkFURSAgICAgICAgICggMTguMjA2NDggKQ0KLSNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TICAgICAgICAoICggVGlja1R5cGVfdCApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KLSNkZWZpbmUgcG9ydFRJQ0tTX1BFUl9ET1NfVElDSyAgICAoICggdWludDE2X3QgKSAoICggKCBwb3J0RE9VQkxFICkgY29uZmlnVElDS19SQVRFX0haIC8gcG9ydERPU19USUNLX1JBVEUgKSArIDAuNSApICkNCi0jZGVmaW5lIHBvcnRJTklUSUFMX1NXICAgICAgICAgICAgKCAoIHBvcnRTVEFDS19UWVBFICkgMHgwMjAyICkgLyogU3RhcnQgdGhlIHRhc2tzIHdpdGggaW50ZXJydXB0cyBlbmFibGVkLiAqLw0KLSNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UICAgICAgICAoIDIgKQ0KKyNkZWZpbmUgcG9ydE5PUCgpCQkJCV9fYXNteyBub3AgfQ0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJKCAtMSApDQorI2RlZmluZSBwb3J0U1dJVENIX0lOVF9OVU1CRVIgCTB4ODANCisjZGVmaW5lIHBvcnRZSUVMRCgpCQkJCV9fYXNteyBpbnQgcG9ydFNXSVRDSF9JTlRfTlVNQkVSIH0NCisjZGVmaW5lIHBvcnRET1NfVElDS19SQVRFCQkoIDE4LjIwNjQ4ICkNCisjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUwkJKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCisjZGVmaW5lIHBvcnRUSUNLU19QRVJfRE9TX1RJQ0sJKCAoIHVpbnQxNl90ICkgKCAoICggcG9ydERPVUJMRSApIGNvbmZpZ1RJQ0tfUkFURV9IWiAvIHBvcnRET1NfVElDS19SQVRFICkgKyAwLjUgKSApDQorI2RlZmluZSBwb3J0SU5JVElBTF9TVwkJCSggKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDIwMiApCS8qIFN0YXJ0IHRoZSB0YXNrcyB3aXRoIGludGVycnVwdHMgZW5hYmxlZC4gKi8NCisjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVAkJKCAyICkNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBDb21waWxlciBzcGVjaWZpY3MuICovDQotI2RlZmluZSBwb3J0SU5QVVRfQllURSggeEFkZHIgKSAgICAgICAgICAgICAgaW5wKCB4QWRkciApDQotI2RlZmluZSBwb3J0T1VUUFVUX0JZVEUoIHhBZGRyLCB1Y1ZhbHVlICkgICAgb3V0cCggeEFkZHIsIHVjVmFsdWUgKQ0KKyNkZWZpbmUgcG9ydElOUFVUX0JZVEUoIHhBZGRyICkJCQkJaW5wKCB4QWRkciApDQorI2RlZmluZSBwb3J0T1VUUFVUX0JZVEUoIHhBZGRyLCB1Y1ZhbHVlICkJb3V0cCggeEFkZHIsIHVjVmFsdWUgKQ0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAqLw0KLSNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZUYXNrRnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgIHZvaWQgdlRhc2tGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQotI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdlRhc2tGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgICAgICAgdm9pZCB2VGFza0Z1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2VGFza0Z1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZUYXNrRnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdlRhc2tGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2VGFza0Z1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KIA0KICNlbmRpZiAvKiBQT1JUTUFDUk9fSCAqLw0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0JDQy8xNkJpdERPUy9jb21tb24vcG9ydGFzbS5oIGIvcG9ydGFibGUvQkNDLzE2Qml0RE9TL2NvbW1vbi9wb3J0YXNtLmgKaW5kZXggNDVkMTMwMi4uMmIxOTljNiAxMDA2NDQKLS0tIGEvcG9ydGFibGUvQkNDLzE2Qml0RE9TL2NvbW1vbi9wb3J0YXNtLmgKKysrIGIvcG9ydGFibGUvQkNDLzE2Qml0RE9TL2NvbW1vbi9wb3J0YXNtLmgKQEAgLTQ3LDQwICs0Nyw0MSBAQAogdm9pZCBwb3J0RklSU1RfQ09OVEVYVCggdm9pZCApOw0KIA0KIC8qIFRoZXJlIGFyZSBzbGlnaHRseSBkaWZmZXJlbnQgdmVyc2lvbnMgZGVwZW5kaW5nIG9uIHdoZXRoZXIgeW91IGFyZSBidWlsZGluZw0KLSAqIHRvIGluY2x1ZGUgZGVidWdnZXIgaW5mb3JtYXRpb24uICBJZiBkZWJ1Z2dlciBpbmZvcm1hdGlvbiBpcyB1c2VkIHRoZW4gdGhlcmUNCi0gKiBhcmUgYSBjb3VwbGUgb2YgZXh0cmEgYnl0ZXMgbGVmdCBvZiB0aGUgSVNSIHN0YWNrIChwcmVzdW1hYmx5IGZvciB1c2UgYnkgdGhlDQotICogZGVidWdnZXIpLiAgVGhlIHRydWUgc3RhY2sgcG9pbnRlciBpcyB0aGVuIHN0b3JlZCBpbiB0aGUgYnAgcmVnaXN0ZXIuICBXZSBhZGQNCi0gKiAyIHRvIHRoZSBzdGFjayBwb2ludGVyIHRvIHJlbW92ZSB0aGUgZXh0cmEgYnl0ZXMgYmVmb3JlIHdlIHJlc3RvcmUgb3VyIGNvbnRleHQuICovDQordG8gaW5jbHVkZSBkZWJ1Z2dlciBpbmZvcm1hdGlvbi4gIElmIGRlYnVnZ2VyIGluZm9ybWF0aW9uIGlzIHVzZWQgdGhlbiB0aGVyZQ0KK2FyZSBhIGNvdXBsZSBvZiBleHRyYSBieXRlcyBsZWZ0IG9mIHRoZSBJU1Igc3RhY2sgKHByZXN1bWFibHkgZm9yIHVzZSBieSB0aGUNCitkZWJ1Z2dlcikuICBUaGUgdHJ1ZSBzdGFjayBwb2ludGVyIGlzIHRoZW4gc3RvcmVkIGluIHRoZSBicCByZWdpc3Rlci4gIFdlIGFkZA0KKzIgdG8gdGhlIHN0YWNrIHBvaW50ZXIgdG8gcmVtb3ZlIHRoZSBleHRyYSBieXRlcyBiZWZvcmUgd2UgcmVzdG9yZSBvdXIgY29udGV4dC4gKi8NCiANCi0jZGVmaW5lIHBvcnRTV0lUQ0hfQ09OVEVYVCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIGFzbSB7IG1vdiBheCwgc2VnIHB4Q3VycmVudFRDQiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICBhc20geyBtb3YgZHMsIGF4IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgYXNtIHsgbGVzIGJ4LCBweEN1cnJlbnRUQ0IgfSAvKiBTYXZlIHRoZSBzdGFjayBwb2ludGVyIGludG8gdGhlIFRDQi4gKi8gICAgICAgICAgICAgICBcDQotICAgIGFzbSB7IG1vdiBlcyA6IDB4MlsgYnggXSwgc3MgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICBhc20geyBtb3YgZXM6WyBieCBdLCBzcCB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgYXNtIHsgY2FsbCBmYXIgcHRyIHZUYXNrU3dpdGNoQ29udGV4dCB9IC8qIFBlcmZvcm0gdGhlIHN3aXRjaC4gKi8gICAgICAgICAgICAgICAgICAgICBcDQotICAgIGFzbSB7IG1vdiBheCwgc2VnIHB4Q3VycmVudFRDQiB9ICAgICAgICAvKiBSZXN0b3JlIHRoZSBzdGFjayBwb2ludGVyIGZyb20gdGhlIFRDQi4gKi8gXA0KLSAgICBhc20geyBtb3YgZHMsIGF4IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgYXNtIHsgbGVzIGJ4LCBkd29yZCBwdHIgcHhDdXJyZW50VENCIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIGFzbSB7IG1vdiBzcywgZXM6WyBieCArIDIgXSB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgYXNtIHsgbW92IHNwLCBlczpbIGJ4IF0gfQ0KKyNkZWZpbmUgcG9ydFNXSVRDSF9DT05URVhUKCkJCQkJCQkJCQkJCVwNCisJCQkJCQkJYXNtIHsgbW92CWF4LCBzZWcgcHhDdXJyZW50VENCCQl9CVwNCisJCQkJCQkJYXNtIHsgbW92CWRzLCBheAkJCQkJCX0JXA0KKwkJCQkJCQlhc20geyBsZXMJYngsIHB4Q3VycmVudFRDQgkJCX0JLyogU2F2ZSB0aGUgc3RhY2sgcG9pbnRlciBpbnRvIHRoZSBUQ0IuICovCQlcDQorCQkJCQkJCWFzbSB7IG1vdgllczoweDJbIGJ4IF0sIHNzCQkJfQlcDQorCQkJCQkJCWFzbSB7IG1vdgllczpbIGJ4IF0sIHNwCQkJCX0JXA0KKwkJCQkJCQlhc20geyBjYWxsICBmYXIgcHRyIHZUYXNrU3dpdGNoQ29udGV4dAl9CS8qIFBlcmZvcm0gdGhlIHN3aXRjaC4gKi8JCQkJCQlcDQorCQkJCQkJCWFzbSB7IG1vdglheCwgc2VnIHB4Q3VycmVudFRDQgkJfQkvKiBSZXN0b3JlIHRoZSBzdGFjayBwb2ludGVyIGZyb20gdGhlIFRDQi4gKi8JXA0KKwkJCQkJCQlhc20geyBtb3YJZHMsIGF4CQkJCQkJfQlcDQorCQkJCQkJCWFzbSB7IGxlcwlieCwgZHdvcmQgcHRyIHB4Q3VycmVudFRDQgl9CVwNCisJCQkJCQkJYXNtIHsgbW92CXNzLCBlczpbIGJ4ICsgMiBdCQkJfQlcDQorCQkJCQkJCWFzbSB7IG1vdglzcCwgZXM6WyBieCBdCQkJCX0NCiANCi0jZGVmaW5lIHBvcnRGSVJTVF9DT05URVhUKCkgICAgICAgICAgICAgICAgICBcDQotICAgIF9fYXNtIHsgbW92IGF4LCBzZWcgcHhDdXJyZW50VENCIH0gICAgICAgXA0KLSAgICBfX2FzbSB7IG1vdiBkcywgYXggfSAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgX19hc20geyBsZXMgYngsIGR3b3JkIHB0ciBweEN1cnJlbnRUQ0IgfSBcDQotICAgIF9fYXNtIHsgbW92IHNzLCBlczpbIGJ4ICsgMiBdIH0gICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICBfX2FzbSB7IG1vdiBzcCwgZXM6WyBieCBdIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgX19hc20geyBwb3AgYnAgfSAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIF9fYXNtIHsgcG9wIGRpIH0gICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICBfX2FzbSB7IHBvcCBzaSB9ICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgX19hc20geyBwb3AgZHMgfSAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIF9fYXNtIHsgcG9wIGVzIH0gICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICBfX2FzbSB7IHBvcCBkeCB9ICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgX19hc20geyBwb3AgY3ggfSAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIF9fYXNtIHsgcG9wIGJ4IH0gICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICBfX2FzbSB7IHBvcCBheCB9ICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgX19hc20geyBpcmV0IH0NCisjZGVmaW5lIHBvcnRGSVJTVF9DT05URVhUKCkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCV9fYXNtIHsgbW92CWF4LCBzZWcgcHhDdXJyZW50VENCCQl9CVwNCisJCQkJCQkJX19hc20geyBtb3YJZHMsIGF4CQkJCQkJfQlcDQorCQkJCQkJCV9fYXNtIHsgbGVzCWJ4LCBkd29yZCBwdHIgcHhDdXJyZW50VENCCX0JXA0KKwkJCQkJCQlfX2FzbSB7IG1vdglzcywgZXM6WyBieCArIDIgXQkJCX0JXA0KKwkJCQkJCQlfX2FzbSB7IG1vdglzcCwgZXM6WyBieCBdCQkJCX0JXA0KKwkJCQkJCQlfX2FzbSB7IHBvcAlicAkJCQkJCQl9CVwNCisJCQkJCQkJX19hc20geyBwb3AJZGkJCQkJCQkJfQlcDQorCQkJCQkJCV9fYXNtIHsgcG9wCXNpCQkJCQkJCX0JXA0KKwkJCQkJCQlfX2FzbSB7IHBvcAlkcwkJCQkJCQl9CVwNCisJCQkJCQkJX19hc20geyBwb3AJZXMJCQkJCQkJfQlcDQorCQkJCQkJCV9fYXNtIHsgcG9wCWR4CQkJCQkJCX0JXA0KKwkJCQkJCQlfX2FzbSB7IHBvcAljeAkJCQkJCQl9CVwNCisJCQkJCQkJX19hc20geyBwb3AJYngJCQkJCQkJfQlcDQorCQkJCQkJCV9fYXNtIHsgcG9wCWF4CQkJCQkJCX0JXA0KKwkJCQkJCQlfX2FzbSB7IGlyZXQJCQkJCQkJfQ0KIA0KIA0KLSNlbmRpZiAvKiBpZm5kZWYgUE9SVF9BU01fSCAqLw0KKyNlbmRpZg0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0JDQy8xNkJpdERPUy9jb21tb24vcG9ydGNvbW4uYyBiL3BvcnRhYmxlL0JDQy8xNkJpdERPUy9jb21tb24vcG9ydGNvbW4uYwppbmRleCA1OTNjZjM4Li5jMjMwYjE0IDEwMDY0NAotLS0gYS9wb3J0YWJsZS9CQ0MvMTZCaXRET1MvY29tbW9uL3BvcnRjb21uLmMKKysrIGIvcG9ydGFibGUvQkNDLzE2Qml0RE9TL2NvbW1vbi9wb3J0Y29tbi5jCkBAIC0yNiwxNiArMjYsMTYgQEAKICAqLw0KIA0KIC8qDQotICogQ2hhbmdlcyBmcm9tIFYxLjAwOg0KLSAqDQotICsgcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCkgbm93IGluaXRpYWxpc2VzIHRoZSBzdGFjayBvZiBuZXcgdGFza3MgdG8gdGhlDQotICsgICAgc2FtZSBmb3JtYXQgdXNlZCBieSB0aGUgY29tcGlsZXIuICBUaGlzIGFsbG93cyB0aGUgY29tcGlsZXIgZ2VuZXJhdGVkDQotICsgICAgaW50ZXJydXB0IG1lY2hhbmlzbSB0byBiZSB1c2VkIGZvciBjb250ZXh0IHN3aXRjaGVzLg0KLSArDQotICsgQ2hhbmdlcyBmcm9tIFYyLjYuMQ0KLSArDQotICsgTW92ZSB1c1BvcnRDaGVja0ZyZWVTdGFja1NwYWNlKCkgdG8gdGFza3MuYy4NCi0gKi8NCitDaGFuZ2VzIGZyb20gVjEuMDA6DQorDQorCSsgcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCkgbm93IGluaXRpYWxpc2VzIHRoZSBzdGFjayBvZiBuZXcgdGFza3MgdG8gdGhlDQorCSAgc2FtZSBmb3JtYXQgdXNlZCBieSB0aGUgY29tcGlsZXIuICBUaGlzIGFsbG93cyB0aGUgY29tcGlsZXIgZ2VuZXJhdGVkDQorCSAgaW50ZXJydXB0IG1lY2hhbmlzbSB0byBiZSB1c2VkIGZvciBjb250ZXh0IHN3aXRjaGVzLg0KKw0KK0NoYW5nZXMgZnJvbSBWMi42LjENCisNCisJKyBNb3ZlIHVzUG9ydENoZWNrRnJlZVN0YWNrU3BhY2UoKSB0byB0YXNrcy5jLg0KKyovDQogDQogDQogI2luY2x1ZGUgPGRvcy5oPg0KQEAgLTQ1LDc5ICs0NSw3NiBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogU2VlIGhlYWRlciBmaWxlIGZvciBkZXNjcmlwdGlvbi4gKi8NCi1TdGFja1R5cGVfdCAqIHB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKiBweFRvcE9mU3RhY2ssDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqIHB2UGFyYW1ldGVycyApDQorU3RhY2tUeXBlX3QgKnB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKnB4VG9wT2ZTdGFjaywgVGFza0Z1bmN0aW9uX3QgcHhDb2RlLCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KIHsNCi0gICAgU3RhY2tUeXBlX3QgRFNfUmVnID0gMDsNCitTdGFja1R5cGVfdCBEU19SZWcgPSAwOw0KIA0KLSAgICAvKiBQbGFjZSBhIGZldyBieXRlcyBvZiBrbm93biB2YWx1ZXMgb24gdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suDQotICAgICAqIFRoaXMgaXMganVzdCB1c2VmdWwgZm9yIGRlYnVnZ2luZy4gKi8NCisJLyogUGxhY2UgYSBmZXcgYnl0ZXMgb2Yga25vd24gdmFsdWVzIG9uIHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLg0KKwlUaGlzIGlzIGp1c3QgdXNlZnVsIGZvciBkZWJ1Z2dpbmcuICovDQogDQotICAgICpweFRvcE9mU3RhY2sgPSAweDExMTE7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMHgyMjIyOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MzMzMzsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAweDQ0NDQ7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMHg1NTU1Ow0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MTExMTsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDIyMjI7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgzMzMzOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4NDQ0NDsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDU1NTU7DQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KIA0KLSAgICAvKmxpbnQgLWU5NTAgLWU2MTEgLWU5MjMgTGludCBkb2Vzbid0IGxpa2UgdGhpcyBtdWNoIC0gYnV0IG5vdGhpbmcgSSBjYW4gZG8gYWJvdXQgaXQuICovDQorCS8qbGludCAtZTk1MCAtZTYxMSAtZTkyMyBMaW50IGRvZXNuJ3QgbGlrZSB0aGlzIG11Y2ggLSBidXQgbm90aGluZyBJIGNhbiBkbyBhYm91dCBpdC4gKi8NCiANCi0gICAgLyogV2UgYXJlIGdvaW5nIHRvIHN0YXJ0IHRoZSBzY2hlZHVsZXIgdXNpbmcgYSByZXR1cm4gZnJvbSBpbnRlcnJ1cHQNCi0gICAgICogaW5zdHJ1Y3Rpb24gdG8gbG9hZCB0aGUgcHJvZ3JhbSBjb3VudGVyLCBzbyBmaXJzdCB0aGVyZSB3b3VsZCBiZSB0aGUNCi0gICAgICogZnVuY3Rpb24gY2FsbCB3aXRoIHBhcmFtZXRlcnMgcHJlYW1ibGUuICovDQorCS8qIFdlIGFyZSBnb2luZyB0byBzdGFydCB0aGUgc2NoZWR1bGVyIHVzaW5nIGEgcmV0dXJuIGZyb20gaW50ZXJydXB0DQorCWluc3RydWN0aW9uIHRvIGxvYWQgdGhlIHByb2dyYW0gY291bnRlciwgc28gZmlyc3QgdGhlcmUgd291bGQgYmUgdGhlDQorCWZ1bmN0aW9uIGNhbGwgd2l0aCBwYXJhbWV0ZXJzIHByZWFtYmxlLiAqLw0KKwkNCisJKnB4VG9wT2ZTdGFjayA9IEZQX1NFRyggcHZQYXJhbWV0ZXJzICk7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gRlBfT0ZGKCBwdlBhcmFtZXRlcnMgKTsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSBGUF9TRUcoIHB4Q29kZSApOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IEZQX09GRiggcHhDb2RlICk7DQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAqcHhUb3BPZlN0YWNrID0gRlBfU0VHKCBwdlBhcmFtZXRlcnMgKTsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSBGUF9PRkYoIHB2UGFyYW1ldGVycyApOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IEZQX1NFRyggcHhDb2RlICk7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gRlBfT0ZGKCBweENvZGUgKTsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIE5leHQgdGhlIHN0YXR1cyByZWdpc3RlciBhbmQgaW50ZXJydXB0IHJldHVybiBhZGRyZXNzLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gcG9ydElOSVRJQUxfU1c7IA0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IEZQX1NFRyggcHhDb2RlICk7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gRlBfT0ZGKCBweENvZGUgKTsNCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgIC8qIE5leHQgdGhlIHN0YXR1cyByZWdpc3RlciBhbmQgaW50ZXJydXB0IHJldHVybiBhZGRyZXNzLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gcG9ydElOSVRJQUxfU1c7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gRlBfU0VHKCBweENvZGUgKTsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSBGUF9PRkYoIHB4Q29kZSApOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJLyogVGhlIHJlbWFpbmluZyByZWdpc3RlcnMgd291bGQgYmUgcHVzaGVkIG9uIHRoZSBzdGFjayBieSBvdXIgY29udGV4dA0KKwlzd2l0Y2ggZnVuY3Rpb24uICBUaGVzZSBhcmUgbG9hZGVkIHdpdGggdmFsdWVzIHNpbXBseSB0byBtYWtlIGRlYnVnZ2luZw0KKwllYXNpZXIuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhBQUFBOwkvKiBBWCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweEJCQkI7CS8qIEJYICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4Q0NDQzsJLyogQ1ggKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhEREREOwkvKiBEWCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweEVFRUU7CS8qIEVTICovDQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBUaGUgcmVtYWluaW5nIHJlZ2lzdGVycyB3b3VsZCBiZSBwdXNoZWQgb24gdGhlIHN0YWNrIGJ5IG91ciBjb250ZXh0DQotICAgICAqIHN3aXRjaCBmdW5jdGlvbi4gIFRoZXNlIGFyZSBsb2FkZWQgd2l0aCB2YWx1ZXMgc2ltcGx5IHRvIG1ha2UgZGVidWdnaW5nDQotICAgICAqIGVhc2llci4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweEFBQUE7IC8qIEFYICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4QkJCQjsgLyogQlggKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhDQ0NDOyAvKiBDWCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweEREREQ7IC8qIERYICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4RUVFRTsgLyogRVMgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIFdlIG5lZWQgdGhlIHRydWUgZGF0YSBzZWdtZW50LiAqLw0KKwlfX2FzbXsJTU9WIERTX1JlZywgRFMgfTsNCiANCi0gICAgLyogV2UgbmVlZCB0aGUgdHJ1ZSBkYXRhIHNlZ21lbnQuICovDQotICAgIF9fYXNtIHsNCi0gICAgICAgIE1PViBEU19SZWcsIERTDQotICAgIH07DQorCSpweFRvcE9mU3RhY2sgPSBEU19SZWc7CQkJCQkJLyogRFMgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMTIzOwkvKiBTSSAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweEREREQ7CS8qIERJICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4QkJCQjsJLyogQlAgKi8NCiANCi0gICAgKnB4VG9wT2ZTdGFjayA9IERTX1JlZzsgICAgICAgICAgICAgICAgIC8qIERTICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDEyMzsgLyogU0kgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhEREREOyAvKiBESSAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweEJCQkI7IC8qIEJQICovDQorCS8qbGludCArZTk1MCArZTYxMSArZTkyMyAqLw0KIA0KLSAgICAvKmxpbnQgK2U5NTAgK2U2MTEgK2U5MjMgKi8NCi0NCi0gICAgcmV0dXJuIHB4VG9wT2ZTdGFjazsNCisJcmV0dXJuIHB4VG9wT2ZTdGFjazsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvQ0NTL0FSTV9Db3J0ZXgtUjQvcG9ydC5jIGIvcG9ydGFibGUvQ0NTL0FSTV9Db3J0ZXgtUjQvcG9ydC5jCmluZGV4IDFmM2YzMWMuLjk3MjE1MGIgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0NDUy9BUk1fQ29ydGV4LVI0L3BvcnQuYworKysgYi9wb3J0YWJsZS9DQ1MvQVJNX0NvcnRleC1SNC9wb3J0LmMKQEAgLTM3LDI4ICszNywyOCBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogUmVnaXN0ZXJzIHJlcXVpcmVkIHRvIGNvbmZpZ3VyZSB0aGUgUlRJLiAqLw0KLSNkZWZpbmUgcG9ydFJUSV9HQ1RSTF9SRUcgICAgICAgICAgKCAqKCAoIHZvbGF0aWxlIHVpbnQzMl90ICogKSAweEZGRkZGQzAwICkgKQ0KLSNkZWZpbmUgcG9ydFJUSV9UQkNUUkxfUkVHICAgICAgICAgKCAqKCAoIHZvbGF0aWxlIHVpbnQzMl90ICogKSAweEZGRkZGQzA0ICkgKQ0KLSNkZWZpbmUgcG9ydFJUSV9DT01QQ1RSTF9SRUcgICAgICAgKCAqKCAoIHZvbGF0aWxlIHVpbnQzMl90ICogKSAweEZGRkZGQzBDICkgKQ0KLSNkZWZpbmUgcG9ydFJUSV9DTlQwX0ZSQzBfUkVHICAgICAgKCAqKCAoIHZvbGF0aWxlIHVpbnQzMl90ICogKSAweEZGRkZGQzEwICkgKQ0KLSNkZWZpbmUgcG9ydFJUSV9DTlQwX1VDMF9SRUcgICAgICAgKCAqKCAoIHZvbGF0aWxlIHVpbnQzMl90ICogKSAweEZGRkZGQzE0ICkgKQ0KLSNkZWZpbmUgcG9ydFJUSV9DTlQwX0NQVUMwX1JFRyAgICAgKCAqKCAoIHZvbGF0aWxlIHVpbnQzMl90ICogKSAweEZGRkZGQzE4ICkgKQ0KLSNkZWZpbmUgcG9ydFJUSV9DTlQwX0NPTVAwX1JFRyAgICAgKCAqKCAoIHZvbGF0aWxlIHVpbnQzMl90ICogKSAweEZGRkZGQzUwICkgKQ0KLSNkZWZpbmUgcG9ydFJUSV9DTlQwX1VEQ1AwX1JFRyAgICAgKCAqKCAoIHZvbGF0aWxlIHVpbnQzMl90ICogKSAweEZGRkZGQzU0ICkgKQ0KLSNkZWZpbmUgcG9ydFJUSV9TRVRJTlRFTkFfUkVHICAgICAgKCAqKCAoIHZvbGF0aWxlIHVpbnQzMl90ICogKSAweEZGRkZGQzgwICkgKQ0KLSNkZWZpbmUgcG9ydFJUSV9DTEVBUklOVEVOQV9SRUcgICAgKCAqKCAoIHZvbGF0aWxlIHVpbnQzMl90ICogKSAweEZGRkZGQzg0ICkgKQ0KLSNkZWZpbmUgcG9ydFJUSV9JTlRGTEFHX1JFRyAgICAgICAgKCAqKCAoIHZvbGF0aWxlIHVpbnQzMl90ICogKSAweEZGRkZGQzg4ICkgKQ0KKyNkZWZpbmUgcG9ydFJUSV9HQ1RSTF9SRUcgIAkJKCAqICggKCB2b2xhdGlsZSB1aW50MzJfdCAqICkgMHhGRkZGRkMwMCApICkNCisjZGVmaW5lIHBvcnRSVElfVEJDVFJMX1JFRyAgCSggKiAoICggdm9sYXRpbGUgdWludDMyX3QgKiApIDB4RkZGRkZDMDQgKSApDQorI2RlZmluZSBwb3J0UlRJX0NPTVBDVFJMX1JFRyAgCSggKiAoICggdm9sYXRpbGUgdWludDMyX3QgKiApIDB4RkZGRkZDMEMgKSApDQorI2RlZmluZSBwb3J0UlRJX0NOVDBfRlJDMF9SRUcgIAkoICogKCAoIHZvbGF0aWxlIHVpbnQzMl90ICogKSAweEZGRkZGQzEwICkgKQ0KKyNkZWZpbmUgcG9ydFJUSV9DTlQwX1VDMF9SRUcgIAkoICogKCAoIHZvbGF0aWxlIHVpbnQzMl90ICogKSAweEZGRkZGQzE0ICkgKQ0KKyNkZWZpbmUgcG9ydFJUSV9DTlQwX0NQVUMwX1JFRyAgKCAqICggKCB2b2xhdGlsZSB1aW50MzJfdCAqICkgMHhGRkZGRkMxOCApICkNCisjZGVmaW5lIHBvcnRSVElfQ05UMF9DT01QMF9SRUcgICggKiAoICggdm9sYXRpbGUgdWludDMyX3QgKiApIDB4RkZGRkZDNTAgKSApDQorI2RlZmluZSBwb3J0UlRJX0NOVDBfVURDUDBfUkVHICAoICogKCAoIHZvbGF0aWxlIHVpbnQzMl90ICogKSAweEZGRkZGQzU0ICkgKQ0KKyNkZWZpbmUgcG9ydFJUSV9TRVRJTlRFTkFfUkVHICAJKCAqICggKCB2b2xhdGlsZSB1aW50MzJfdCAqICkgMHhGRkZGRkM4MCApICkNCisjZGVmaW5lIHBvcnRSVElfQ0xFQVJJTlRFTkFfUkVHICggKiAoICggdm9sYXRpbGUgdWludDMyX3QgKiApIDB4RkZGRkZDODQgKSApDQorI2RlZmluZSBwb3J0UlRJX0lOVEZMQUdfUkVHICAJKCAqICggKCB2b2xhdGlsZSB1aW50MzJfdCAqICkgMHhGRkZGRkM4OCApICkNCiANCiANCiAvKiBDb25zdGFudHMgcmVxdWlyZWQgdG8gc2V0IHVwIHRoZSBpbml0aWFsIHN0YWNrIG9mIGVhY2ggdGFzay4gKi8NCi0jZGVmaW5lIHBvcnRJTklUSUFMX1NQU1IgICAgICAgICAgICAgICAgICAgICAgICAoICggU3RhY2tUeXBlX3QgKSAweDFGICkNCi0jZGVmaW5lIHBvcnRJTklUSUFMX0ZQU0NSICAgICAgICAgICAgICAgICAgICAgICAoICggU3RhY2tUeXBlX3QgKSAweDAwICkNCi0jZGVmaW5lIHBvcnRJTlNUUlVDVElPTl9TSVpFICAgICAgICAgICAgICAgICAgICAoICggU3RhY2tUeXBlX3QgKSAweDA0ICkNCi0jZGVmaW5lIHBvcnRUSFVNQl9NT0RFX0JJVCAgICAgICAgICAgICAgICAgICAgICAoICggU3RhY2tUeXBlX3QgKSAweDIwICkNCisjZGVmaW5lIHBvcnRJTklUSUFMX1NQU1IJICAgCSggKCBTdGFja1R5cGVfdCApIDB4MUYgKQ0KKyNkZWZpbmUgcG9ydElOSVRJQUxfRlBTQ1IJICAJKCAoIFN0YWNrVHlwZV90ICkgMHgwMCApDQorI2RlZmluZSBwb3J0SU5TVFJVQ1RJT05fU0laRSAgIAkoICggU3RhY2tUeXBlX3QgKSAweDA0ICkNCisjZGVmaW5lIHBvcnRUSFVNQl9NT0RFX0JJVAkJKCAoIFN0YWNrVHlwZV90ICkgMHgyMCApDQogDQogLyogVGhlIG51bWJlciBvZiB3b3JkcyBvbiB0aGUgc3RhY2sgZnJhbWUgYmV0d2VlbiB0aGUgc2F2ZWQgVG9wIE9mIFN0YWNrIGFuZA0KLSAqIFIwIChpbiB3aGljaCB0aGUgcGFyYW1ldGVycyBhcmUgcGFzc2VkLiAqLw0KLSNkZWZpbmUgcG9ydFNQQUNFX0JFVFdFRU5fVE9TX0FORF9QQVJBTUVURVJTICAgICggMTIgKQ0KK1IwIChpbiB3aGljaCB0aGUgcGFyYW1ldGVycyBhcmUgcGFzc2VkLiAqLw0KKyNkZWZpbmUgcG9ydFNQQUNFX0JFVFdFRU5fVE9TX0FORF9QQVJBTUVURVJTCSggMTIgKQ0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KQEAgLTY4LDcgKzY4LDcgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFNhdmVkIGFzIHBhcnQgb2YgdGhlIHRhc2sgY29udGV4dC4gIFNldCB0byBwZEZBTFNFIGlmIHRoZSB0YXNrIGRvZXMgbm90DQotICogcmVxdWlyZSBhbiBGUFUgY29udGV4dC4gKi8NCityZXF1aXJlIGFuIEZQVSBjb250ZXh0LiAqLw0KIHVpbnQzMl90IHVsVGFza0hhc0ZQVUNvbnRleHQgPSAwOw0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KQEAgLTc3LDE4MyArNzcsMTgxIEBACiAvKg0KICAqIFNlZSBoZWFkZXIgZmlsZSBmb3IgZGVzY3JpcHRpb24uDQogICovDQotU3RhY2tUeXBlX3QgKiBweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICogcHhUb3BPZlN0YWNrLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYXNrRnVuY3Rpb25fdCBweENvZGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KK1N0YWNrVHlwZV90ICpweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICpweFRvcE9mU3RhY2ssIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzICkNCiB7DQotICAgIFN0YWNrVHlwZV90ICogcHhPcmlnaW5hbFRPUzsNCitTdGFja1R5cGVfdCAqcHhPcmlnaW5hbFRPUzsNCiANCi0gICAgcHhPcmlnaW5hbFRPUyA9IHB4VG9wT2ZTdGFjazsNCisJcHhPcmlnaW5hbFRPUyA9IHB4VG9wT2ZTdGFjazsNCiANCi0gICAgI2lmIF9fVElfVkZQX1NVUFBPUlRfXw0KLSAgICAgICAgew0KLSAgICAgICAgICAgIC8qIEVuc3VyZSB0aGUgc3RhY2sgaXMgY29ycmVjdGx5IGFsaWduZWQgb24gZXhpdC4gKi8NCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgIH0NCi0gICAgI2VuZGlmDQorCSNpZiBfX1RJX1ZGUF9TVVBQT1JUX18NCisJew0KKwkJLyogRW5zdXJlIHRoZSBzdGFjayBpcyBjb3JyZWN0bHkgYWxpZ25lZCBvbiBleGl0LiAqLw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCX0NCisJI2VuZGlmDQogDQotICAgIC8qIFNldHVwIHRoZSBpbml0aWFsIHN0YWNrIG9mIHRoZSB0YXNrLiAgVGhlIHN0YWNrIGlzIHNldCBleGFjdGx5IGFzDQotICAgICAqIGV4cGVjdGVkIGJ5IHRoZSBwb3J0UkVTVE9SRV9DT05URVhUKCkgbWFjcm8uICovDQorCS8qIFNldHVwIHRoZSBpbml0aWFsIHN0YWNrIG9mIHRoZSB0YXNrLiAgVGhlIHN0YWNrIGlzIHNldCBleGFjdGx5IGFzDQorCWV4cGVjdGVkIGJ5IHRoZSBwb3J0UkVTVE9SRV9DT05URVhUKCkgbWFjcm8uICovDQogDQotICAgIC8qIEZpcnN0IG9uIHRoZSBzdGFjayBpcyB0aGUgcmV0dXJuIGFkZHJlc3MgLSB3aGljaCBpcyB0aGUgc3RhcnQgb2YgdGhlIGFzDQotICAgICAqIHRoZSB0YXNrIGhhcyBub3QgZXhlY3V0ZWQgeWV0LiAgVGhlIG9mZnNldCBpcyBhZGRlZCB0byBtYWtlIHRoZSByZXR1cm4NCi0gICAgICogYWRkcmVzcyBhcHBlYXIgYXMgaXQgd291bGQgd2l0aGluIGFuIElSUSBJU1IuICovDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHhDb2RlICsgcG9ydElOU1RSVUNUSU9OX1NJWkU7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkvKiBGaXJzdCBvbiB0aGUgc3RhY2sgaXMgdGhlIHJldHVybiBhZGRyZXNzIC0gd2hpY2ggaXMgdGhlIHN0YXJ0IG9mIHRoZSBhcw0KKwl0aGUgdGFzayBoYXMgbm90IGV4ZWN1dGVkIHlldC4gIFRoZSBvZmZzZXQgaXMgYWRkZWQgdG8gbWFrZSB0aGUgcmV0dXJuDQorCWFkZHJlc3MgYXBwZWFyIGFzIGl0IHdvdWxkIHdpdGhpbiBhbiBJUlEgSVNSLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB4Q29kZSArIHBvcnRJTlNUUlVDVElPTl9TSVpFOw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAwMDAwMDAwOyAgICAvKiBSMTQgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHhPcmlnaW5hbFRPUzsgLyogU3RhY2sgdXNlZCB3aGVuIHRhc2sgc3RhcnRzIGdvZXMgaW4gUjEzLiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAwMDAwMDAwOwkvKiBSMTQgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHhPcmlnaW5hbFRPUzsgLyogU3RhY2sgdXNlZCB3aGVuIHRhc2sgc3RhcnRzIGdvZXMgaW4gUjEzLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgI2lmZGVmIHBvcnRQUkVMT0FEX1RBU0tfUkVHSVNURVJTDQotICAgICAgICB7DQotICAgICAgICAgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDEyMTIxMjEyOyAvKiBSMTIgKi8NCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTExMTExMTE7IC8qIFIxMSAqLw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMDEwMTAxMDsgLyogUjEwICovDQotICAgICAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICAgICAgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA5MDkwOTA5OyAvKiBSOSAqLw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwODA4MDgwODsgLyogUjggKi8NCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDcwNzA3MDc7IC8qIFI3ICovDQotICAgICAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICAgICAgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA2MDYwNjA2OyAvKiBSNiAqLw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNTA1MDUwNTsgLyogUjUgKi8NCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDQwNDA0MDQ7IC8qIFI0ICovDQotICAgICAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICAgICAgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAzMDMwMzAzOyAvKiBSMyAqLw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMjAyMDIwMjsgLyogUjIgKi8NCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDEwMTAxMDE7IC8qIFIxICovDQotICAgICAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICAgICB9DQotICAgICNlbHNlIC8qIGlmZGVmIHBvcnRQUkVMT0FEX1RBU0tfUkVHSVNURVJTICovDQotICAgICAgICB7DQotICAgICAgICAgICAgcHhUb3BPZlN0YWNrIC09IHBvcnRTUEFDRV9CRVRXRUVOX1RPU19BTkRfUEFSQU1FVEVSUzsNCi0gICAgICAgIH0NCi0gICAgI2VuZGlmIC8qIGlmZGVmIHBvcnRQUkVMT0FEX1RBU0tfUkVHSVNURVJTICovDQorCSNpZmRlZiBwb3J0UFJFTE9BRF9UQVNLX1JFR0lTVEVSUw0KKwl7DQorCQkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTIxMjEyMTI7CS8qIFIxMiAqLw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTExMTExMTE7CS8qIFIxMSAqLw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTAxMDEwMTA7CS8qIFIxMCAqLw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDkwOTA5MDk7CS8qIFI5ICovDQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwODA4MDgwODsJLyogUjggKi8NCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA3MDcwNzA3OwkvKiBSNyAqLw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDYwNjA2MDY7CS8qIFI2ICovDQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNTA1MDUwNTsJLyogUjUgKi8NCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA0MDQwNDA0OwkvKiBSNCAqLw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDMwMzAzMDM7CS8qIFIzICovDQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMjAyMDIwMjsJLyogUjIgKi8NCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAxMDEwMTAxOwkvKiBSMSAqLw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCX0NCisJI2Vsc2UNCisJew0KKwkJcHhUb3BPZlN0YWNrIC09IHBvcnRTUEFDRV9CRVRXRUVOX1RPU19BTkRfUEFSQU1FVEVSUzsNCisJfQ0KKwkjZW5kaWYNCiANCi0gICAgLyogRnVuY3Rpb24gcGFyYW1ldGVycyBhcmUgcGFzc2VkIGluIFIwLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB2UGFyYW1ldGVyczsgLyogUjAgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIEZ1bmN0aW9uIHBhcmFtZXRlcnMgYXJlIHBhc3NlZCBpbiBSMC4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwdlBhcmFtZXRlcnM7IC8qIFIwICovDQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBTZXQgdGhlIHN0YXR1cyByZWdpc3RlciBmb3Igc3lzdGVtIG1vZGUsIHdpdGggaW50ZXJydXB0cyBlbmFibGVkLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApICggKCBfZ2V0X0NQU1IoKSAmIH4weEZGICkgfCBwb3J0SU5JVElBTF9TUFNSICk7DQorCS8qIFNldCB0aGUgc3RhdHVzIHJlZ2lzdGVyIGZvciBzeXN0ZW0gbW9kZSwgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgKCAoIF9nZXRfQ1BTUigpICYgfjB4RkYgKSB8IHBvcnRJTklUSUFMX1NQU1IgKTsNCiANCi0gICAgaWYoICggKCB1aW50MzJfdCApIHB4Q29kZSAmIDB4MDFVTCApICE9IDB4MDAgKQ0KLSAgICB7DQotICAgICAgICAvKiBUaGUgdGFzayB3aWxsIHN0YXJ0IGluIHRodW1iIG1vZGUuICovDQotICAgICAgICAqcHhUb3BPZlN0YWNrIHw9IHBvcnRUSFVNQl9NT0RFX0JJVDsNCi0gICAgfQ0KKwlpZiggKCAoIHVpbnQzMl90ICkgcHhDb2RlICYgMHgwMVVMICkgIT0gMHgwMCApDQorCXsNCisJCS8qIFRoZSB0YXNrIHdpbGwgc3RhcnQgaW4gdGh1bWIgbW9kZS4gKi8NCisJCSpweFRvcE9mU3RhY2sgfD0gcG9ydFRIVU1CX01PREVfQklUOw0KKwl9DQogDQotICAgICNpZmRlZiBfX1RJX1ZGUF9TVVBQT1JUX18NCi0gICAgICAgIHsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCisJI2lmZGVmIF9fVElfVkZQX1NVUFBPUlRfXw0KKwl7DQorCQlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgICAgICAgICAvKiBUaGUgbGFzdCB0aGluZyBvbiB0aGUgc3RhY2sgaXMgdGhlIHRhc2tzIHVsVXNpbmdGUFUgdmFsdWUsIHdoaWNoIGJ5DQotICAgICAgICAgICAgICogZGVmYXVsdCBpcyBzZXQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgc3RhY2sgZnJhbWUgZG9lcyBub3QgaW5jbHVkZSBGUFUNCi0gICAgICAgICAgICAgKiByZWdpc3RlcnMuICovDQotICAgICAgICAgICAgKnB4VG9wT2ZTdGFjayA9IHBkRkFMU0U7DQotICAgICAgICB9DQotICAgICNlbmRpZg0KKwkJLyogVGhlIGxhc3QgdGhpbmcgb24gdGhlIHN0YWNrIGlzIHRoZSB0YXNrcyB1bFVzaW5nRlBVIHZhbHVlLCB3aGljaCBieQ0KKwkJZGVmYXVsdCBpcyBzZXQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgc3RhY2sgZnJhbWUgZG9lcyBub3QgaW5jbHVkZSBGUFUNCisJCXJlZ2lzdGVycy4gKi8NCisJCSpweFRvcE9mU3RhY2sgPSBwZEZBTFNFOw0KKwl9DQorCSNlbmRpZg0KIA0KLSAgICByZXR1cm4gcHhUb3BPZlN0YWNrOw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi1zdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICkNCitzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KHZvaWQpDQogew0KLSAgICAvKiBEaXNhYmxlIHRpbWVyIDAuICovDQotICAgIHBvcnRSVElfR0NUUkxfUkVHICY9IDB4RkZGRkZGRkVVTDsNCisJLyogRGlzYWJsZSB0aW1lciAwLiAqLw0KKwlwb3J0UlRJX0dDVFJMX1JFRyAmPSAweEZGRkZGRkZFVUw7DQogDQotICAgIC8qIFVzZSB0aGUgaW50ZXJuYWwgY291bnRlci4gKi8NCi0gICAgcG9ydFJUSV9UQkNUUkxfUkVHID0gMHgwMDAwMDAwMFU7DQorCS8qIFVzZSB0aGUgaW50ZXJuYWwgY291bnRlci4gKi8NCisJcG9ydFJUSV9UQkNUUkxfUkVHID0gMHgwMDAwMDAwMFU7DQogDQotICAgIC8qIENPTVBTRUwwIHdpbGwgdXNlIHRoZSBSVElGUkMwIGNvdW50ZXIuICovDQotICAgIHBvcnRSVElfQ09NUENUUkxfUkVHID0gMHgwMDAwMDAwMFU7DQorCS8qIENPTVBTRUwwIHdpbGwgdXNlIHRoZSBSVElGUkMwIGNvdW50ZXIuICovDQorCXBvcnRSVElfQ09NUENUUkxfUkVHID0gMHgwMDAwMDAwMFU7DQogDQotICAgIC8qIEluaXRpYWxpc2UgdGhlIGNvdW50ZXIgYW5kIHRoZSBwcmVzY2FsZSBjb3VudGVyIHJlZ2lzdGVycy4gKi8NCi0gICAgcG9ydFJUSV9DTlQwX1VDMF9SRUcgPSAweDAwMDAwMDAwVTsNCi0gICAgcG9ydFJUSV9DTlQwX0ZSQzBfUkVHID0gMHgwMDAwMDAwMFU7DQorCS8qIEluaXRpYWxpc2UgdGhlIGNvdW50ZXIgYW5kIHRoZSBwcmVzY2FsZSBjb3VudGVyIHJlZ2lzdGVycy4gKi8NCisJcG9ydFJUSV9DTlQwX1VDMF9SRUcgPSAgMHgwMDAwMDAwMFU7DQorCXBvcnRSVElfQ05UMF9GUkMwX1JFRyA9ICAweDAwMDAwMDAwVTsNCiANCi0gICAgLyogU2V0IFByZXNjYWxhciBmb3IgUlRJIGNsb2NrLiAqLw0KLSAgICBwb3J0UlRJX0NOVDBfQ1BVQzBfUkVHID0gMHgwMDAwMDAwMVU7DQotICAgIHBvcnRSVElfQ05UMF9DT01QMF9SRUcgPSAoIGNvbmZpZ0NQVV9DTE9DS19IWiAvIDIgKSAvIGNvbmZpZ1RJQ0tfUkFURV9IWjsNCi0gICAgcG9ydFJUSV9DTlQwX1VEQ1AwX1JFRyA9ICggY29uZmlnQ1BVX0NMT0NLX0haIC8gMiApIC8gY29uZmlnVElDS19SQVRFX0haOw0KKwkvKiBTZXQgUHJlc2NhbGFyIGZvciBSVEkgY2xvY2suICovDQorCXBvcnRSVElfQ05UMF9DUFVDMF9SRUcgPSAweDAwMDAwMDAxVTsNCisJcG9ydFJUSV9DTlQwX0NPTVAwX1JFRyA9ICggY29uZmlnQ1BVX0NMT0NLX0haIC8gMiApIC8gY29uZmlnVElDS19SQVRFX0haOw0KKwlwb3J0UlRJX0NOVDBfVURDUDBfUkVHID0gKCBjb25maWdDUFVfQ0xPQ0tfSFogLyAyICkgLyBjb25maWdUSUNLX1JBVEVfSFo7DQogDQotICAgIC8qIENsZWFyIGludGVycnVwdHMuICovDQotICAgIHBvcnRSVElfSU5URkxBR19SRUcgPSAweDAwMDcwMDBGVTsNCi0gICAgcG9ydFJUSV9DTEVBUklOVEVOQV9SRUcgPSAweDAwMDcwRjBGVTsNCisJLyogQ2xlYXIgaW50ZXJydXB0cy4gKi8NCisJcG9ydFJUSV9JTlRGTEFHX1JFRyA9ICAweDAwMDcwMDBGVTsNCisJcG9ydFJUSV9DTEVBUklOVEVOQV9SRUcJPSAweDAwMDcwRjBGVTsNCiANCi0gICAgLyogRW5hYmxlIHRoZSBjb21wYXJlIDAgaW50ZXJydXB0LiAqLw0KLSAgICBwb3J0UlRJX1NFVElOVEVOQV9SRUcgPSAweDAwMDAwMDAxVTsNCi0gICAgcG9ydFJUSV9HQ1RSTF9SRUcgfD0gMHgwMDAwMDAwMVU7DQorCS8qIEVuYWJsZSB0aGUgY29tcGFyZSAwIGludGVycnVwdC4gKi8NCisJcG9ydFJUSV9TRVRJTlRFTkFfUkVHID0gMHgwMDAwMDAwMVU7DQorCXBvcnRSVElfR0NUUkxfUkVHIHw9IDB4MDAwMDAwMDFVOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKg0KICAqIFNlZSBoZWFkZXIgZmlsZSBmb3IgZGVzY3JpcHRpb24uDQogICovDQotQmFzZVR5cGVfdCB4UG9ydFN0YXJ0U2NoZWR1bGVyKCB2b2lkICkNCitCYXNlVHlwZV90IHhQb3J0U3RhcnRTY2hlZHVsZXIodm9pZCkNCiB7DQotICAgIC8qIFN0YXJ0IHRoZSB0aW1lciB0aGF0IGdlbmVyYXRlcyB0aGUgdGljayBJU1IuICovDQotICAgIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoKTsNCisJLyogU3RhcnQgdGhlIHRpbWVyIHRoYXQgZ2VuZXJhdGVzIHRoZSB0aWNrIElTUi4gKi8NCisJcHJ2U2V0dXBUaW1lckludGVycnVwdCgpOw0KIA0KLSAgICAvKiBSZXNldCB0aGUgY3JpdGljYWwgc2VjdGlvbiBuZXN0aW5nIGNvdW50IHJlYWQgdG8gZXhlY3V0ZSB0aGUgZmlyc3QgdGFzay4gKi8NCi0gICAgdWxDcml0aWNhbE5lc3RpbmcgPSAwOw0KKwkvKiBSZXNldCB0aGUgY3JpdGljYWwgc2VjdGlvbiBuZXN0aW5nIGNvdW50IHJlYWQgdG8gZXhlY3V0ZSB0aGUgZmlyc3QgdGFzay4gKi8NCisJdWxDcml0aWNhbE5lc3RpbmcgPSAwOw0KIA0KLSAgICAvKiBTdGFydCB0aGUgZmlyc3QgdGFzay4gIFRoaXMgaXMgZG9uZSBmcm9tIHBvcnRBU00uYXNtIGFzIEFSTSBtb2RlIG11c3QgYmUNCi0gICAgICogdXNlZC4gKi8NCi0gICAgdlBvcnRTdGFydEZpcnN0VGFzaygpOw0KKwkvKiBTdGFydCB0aGUgZmlyc3QgdGFzay4gIFRoaXMgaXMgZG9uZSBmcm9tIHBvcnRBU00uYXNtIGFzIEFSTSBtb2RlIG11c3QgYmUNCisJdXNlZC4gKi8NCisJdlBvcnRTdGFydEZpcnN0VGFzaygpOw0KIA0KLSAgICAvKiBTaG91bGQgbm90IGdldCBoZXJlISAqLw0KLSAgICByZXR1cm4gcGRGQUlMOw0KKwkvKiBTaG91bGQgbm90IGdldCBoZXJlISAqLw0KKwlyZXR1cm4gcGRGQUlMOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKg0KICAqIFNlZSBoZWFkZXIgZmlsZSBmb3IgZGVzY3JpcHRpb24uDQogICovDQotdm9pZCB2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApDQordm9pZCB2UG9ydEVuZFNjaGVkdWxlcih2b2lkKQ0KIHsNCi0gICAgLyogTm90IGltcGxlbWVudGVkIGluIHBvcnRzIHdoZXJlIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmV0dXJuIHRvLg0KLSAgICAgKiBBcnRpZmljaWFsbHkgZm9yY2UgYW4gYXNzZXJ0LiAqLw0KLSAgICBjb25maWdBU1NFUlQoIHVsQ3JpdGljYWxOZXN0aW5nID09IDEwMDBVTCApOw0KKwkvKiBOb3QgaW1wbGVtZW50ZWQgaW4gcG9ydHMgd2hlcmUgdGhlcmUgaXMgbm90aGluZyB0byByZXR1cm4gdG8uDQorCUFydGlmaWNpYWxseSBmb3JjZSBhbiBhc3NlcnQuICovDQorCWNvbmZpZ0FTU0VSVCggdWxDcml0aWNhbE5lc3RpbmcgPT0gMTAwMFVMICk7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KICNpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAwDQogDQotLyogVGhlIGNvb3BlcmF0aXZlIHNjaGVkdWxlciByZXF1aXJlcyBhIG5vcm1hbCBJUlEgc2VydmljZSByb3V0aW5lIHRvDQotICogc2ltcGx5IGluY3JlbWVudCB0aGUgc3lzdGVtIHRpY2suICovDQotICAgIF9faW50ZXJydXB0IHZvaWQgdlBvcnROb25QcmVlbXB0aXZlVGljayggdm9pZCApDQotICAgIHsNCi0gICAgICAgIC8qIGNsZWFyIGNsb2NrIGludGVycnVwdCBmbGFnICovDQotICAgICAgICBwb3J0UlRJX0lOVEZMQUdfUkVHID0gMHgwMDAwMDAwMTsNCisJLyogVGhlIGNvb3BlcmF0aXZlIHNjaGVkdWxlciByZXF1aXJlcyBhIG5vcm1hbCBJUlEgc2VydmljZSByb3V0aW5lIHRvDQorCSAqIHNpbXBseSBpbmNyZW1lbnQgdGhlIHN5c3RlbSB0aWNrLiAqLw0KKwlfX2ludGVycnVwdCB2b2lkIHZQb3J0Tm9uUHJlZW1wdGl2ZVRpY2soIHZvaWQgKQ0KKwl7DQorCQkvKiBjbGVhciBjbG9jayBpbnRlcnJ1cHQgZmxhZyAqLw0KKwkJcG9ydFJUSV9JTlRGTEFHX1JFRyA9IDB4MDAwMDAwMDE7DQogDQotICAgICAgICAvKiBJbmNyZW1lbnQgdGhlIHRpY2sgY291bnQgLSB0aGlzIG1heSBtYWtlIGEgZGVsYXlpbmcgdGFzayByZWFkeQ0KLSAgICAgICAgICogdG8gcnVuIC0gYnV0IGEgY29udGV4dCBzd2l0Y2ggaXMgbm90IHBlcmZvcm1lZC4gKi8NCi0gICAgICAgIHhUYXNrSW5jcmVtZW50VGljaygpOw0KLSAgICB9DQorCQkvKiBJbmNyZW1lbnQgdGhlIHRpY2sgY291bnQgLSB0aGlzIG1heSBtYWtlIGEgZGVsYXlpbmcgdGFzayByZWFkeQ0KKwkJdG8gcnVuIC0gYnV0IGEgY29udGV4dCBzd2l0Y2ggaXMgbm90IHBlcmZvcm1lZC4gKi8NCisJCXhUYXNrSW5jcmVtZW50VGljaygpOw0KKwl9DQogDQotI2Vsc2UgLyogaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMCAqLw0KKyAjZWxzZQ0KIA0KLS8qDQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogVGhlIHByZWVtcHRpdmUgc2NoZWR1bGVyIElTUiBpcyB3cml0dGVuIGluIGFzc2VtYmxlciBhbmQgY2FuIGJlIGZvdW5kDQotICogaW4gdGhlIHBvcnRBU00uYXNtIGZpbGUuIFRoaXMgd2lsbCBvbmx5IGdldCB1c2VkIGlmIHBvcnRVU0VfUFJFRU1QVElPTg0KLSAqIGlzIHNldCB0byAxIGluIHBvcnRtYWNyby5oDQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICovDQotICAgIHZvaWQgdlBvcnRQcmVlbXB0aXZlVGljayggdm9pZCApOw0KKwkvKg0KKwkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisJICogVGhlIHByZWVtcHRpdmUgc2NoZWR1bGVyIElTUiBpcyB3cml0dGVuIGluIGFzc2VtYmxlciBhbmQgY2FuIGJlIGZvdW5kDQorCSAqIGluIHRoZSBwb3J0QVNNLmFzbSBmaWxlLiBUaGlzIHdpbGwgb25seSBnZXQgdXNlZCBpZiBwb3J0VVNFX1BSRUVNUFRJT04NCisJICogaXMgc2V0IHRvIDEgaW4gcG9ydG1hY3JvLmgNCisJICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorCSAqLw0KKwl2b2lkIHZQb3J0UHJlZW1wdGl2ZVRpY2soIHZvaWQgKTsNCiANCi0jZW5kaWYgLyogaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMCAqLw0KKyNlbmRpZg0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIA0KQEAgLTI2MiwxMyArMjYwLDEzIEBACiAgKi8NCiB2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCggdm9pZCApDQogew0KLSAgICAvKiBEaXNhYmxlIGludGVycnVwdHMgYXMgcGVyIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsgKi8NCi0gICAgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOw0KKwkvKiBEaXNhYmxlIGludGVycnVwdHMgYXMgcGVyIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsgKi8NCisJcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOw0KIA0KLSAgICAvKiBOb3cgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgdWxDcml0aWNhbE5lc3RpbmcgY2FuIGJlIGFjY2Vzc2VkDQotICAgICAqIGRpcmVjdGx5LiAgSW5jcmVtZW50IHVsQ3JpdGljYWxOZXN0aW5nIHRvIGtlZXAgYSBjb3VudCBvZiBob3cgbWFueSB0aW1lcw0KLSAgICAgKiBwb3J0RU5URVJfQ1JJVElDQUwoKSBoYXMgYmVlbiBjYWxsZWQuICovDQotICAgIHVsQ3JpdGljYWxOZXN0aW5nKys7DQorCS8qIE5vdyBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB1bENyaXRpY2FsTmVzdGluZyBjYW4gYmUgYWNjZXNzZWQNCisJZGlyZWN0bHkuICBJbmNyZW1lbnQgdWxDcml0aWNhbE5lc3RpbmcgdG8ga2VlcCBhIGNvdW50IG9mIGhvdyBtYW55IHRpbWVzDQorCXBvcnRFTlRFUl9DUklUSUNBTCgpIGhhcyBiZWVuIGNhbGxlZC4gKi8NCisJdWxDcml0aWNhbE5lc3RpbmcrKzsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQpAQCAtMjc4LDM2ICsyNzYsMzcgQEAKICAqLw0KIHZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoIHZvaWQgKQ0KIHsNCi0gICAgaWYoIHVsQ3JpdGljYWxOZXN0aW5nID4gMCApDQotICAgIHsNCi0gICAgICAgIC8qIERlY3JlbWVudCB0aGUgbmVzdGluZyBjb3VudCBhcyB3ZSBhcmUgbGVhdmluZyBhIGNyaXRpY2FsIHNlY3Rpb24uICovDQotICAgICAgICB1bENyaXRpY2FsTmVzdGluZy0tOw0KKwlpZiggdWxDcml0aWNhbE5lc3RpbmcgPiAwICkNCisJew0KKwkJLyogRGVjcmVtZW50IHRoZSBuZXN0aW5nIGNvdW50IGFzIHdlIGFyZSBsZWF2aW5nIGEgY3JpdGljYWwgc2VjdGlvbi4gKi8NCisJCXVsQ3JpdGljYWxOZXN0aW5nLS07DQogDQotICAgICAgICAvKiBJZiB0aGUgbmVzdGluZyBsZXZlbCBoYXMgcmVhY2hlZCB6ZXJvIHRoZW4gaW50ZXJydXB0cyBzaG91bGQgYmUNCi0gICAgICAgICAqIHJlLWVuYWJsZWQuICovDQotICAgICAgICBpZiggdWxDcml0aWNhbE5lc3RpbmcgPT0gMCApDQotICAgICAgICB7DQotICAgICAgICAgICAgLyogRW5hYmxlIGludGVycnVwdHMgYXMgcGVyIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpLiAqLw0KLSAgICAgICAgICAgIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpOw0KLSAgICAgICAgfQ0KLSAgICB9DQorCQkvKiBJZiB0aGUgbmVzdGluZyBsZXZlbCBoYXMgcmVhY2hlZCB6ZXJvIHRoZW4gaW50ZXJydXB0cyBzaG91bGQgYmUNCisJCXJlLWVuYWJsZWQuICovDQorCQlpZiggdWxDcml0aWNhbE5lc3RpbmcgPT0gMCApDQorCQl7DQorCQkJLyogRW5hYmxlIGludGVycnVwdHMgYXMgcGVyIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpLiAqLw0KKwkJCXBvcnRFTkFCTEVfSU5URVJSVVBUUygpOw0KKwkJfQ0KKwl9DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KICNpZiBfX1RJX1ZGUF9TVVBQT1JUX18NCiANCi0gICAgdm9pZCB2UG9ydFRhc2tVc2VzRlBVKCB2b2lkICkNCi0gICAgew0KLSAgICAgICAgZXh0ZXJuIHZvaWQgdlBvcnRJbml0aWFsaXNlRlBTQ1IoIHZvaWQgKTsNCisJdm9pZCB2UG9ydFRhc2tVc2VzRlBVKCB2b2lkICkNCisJew0KKwlleHRlcm4gdm9pZCB2UG9ydEluaXRpYWxpc2VGUFNDUiggdm9pZCApOw0KIA0KLSAgICAgICAgLyogQSB0YXNrIGlzIHJlZ2lzdGVyaW5nIHRoZSBmYWN0IHRoYXQgaXQgbmVlZHMgYW4gRlBVIGNvbnRleHQuICBTZXQgdGhlDQotICAgICAgICAgKiBGUFUgZmxhZyAoc2F2ZWQgYXMgcGFydCBvZiB0aGUgdGFzayBjb250ZXh0LiAqLw0KLSAgICAgICAgdWxUYXNrSGFzRlBVQ29udGV4dCA9IHBkVFJVRTsNCisJCS8qIEEgdGFzayBpcyByZWdpc3RlcmluZyB0aGUgZmFjdCB0aGF0IGl0IG5lZWRzIGFuIEZQVSBjb250ZXh0LiAgU2V0IHRoZQ0KKwkJRlBVIGZsYWcgKHNhdmVkIGFzIHBhcnQgb2YgdGhlIHRhc2sgY29udGV4dC4gKi8NCisJCXVsVGFza0hhc0ZQVUNvbnRleHQgPSBwZFRSVUU7DQogDQotICAgICAgICAvKiBJbml0aWFsaXNlIHRoZSBmbG9hdGluZyBwb2ludCBzdGF0dXMgcmVnaXN0ZXIuICovDQotICAgICAgICB2UG9ydEluaXRpYWxpc2VGUFNDUigpOw0KLSAgICB9DQorCQkvKiBJbml0aWFsaXNlIHRoZSBmbG9hdGluZyBwb2ludCBzdGF0dXMgcmVnaXN0ZXIuICovDQorCQl2UG9ydEluaXRpYWxpc2VGUFNDUigpOw0KKwl9DQogDQogI2VuZGlmIC8qIF9fVElfVkZQX1NVUFBPUlRfXyAqLw0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0NDUy9BUk1fQ29ydGV4LVI0L3BvcnRtYWNyby5oIGIvcG9ydGFibGUvQ0NTL0FSTV9Db3J0ZXgtUjQvcG9ydG1hY3JvLmgKaW5kZXggMTUzNmIwZi4uZDhhOWE0YyAxMDA2NDQKLS0tIGEvcG9ydGFibGUvQ0NTL0FSTV9Db3J0ZXgtUjQvcG9ydG1hY3JvLmgKKysrIGIvcG9ydGFibGUvQ0NTL0FSTV9Db3J0ZXgtUjQvcG9ydG1hY3JvLmgKQEAgLTM5LDc4ICszOSw3OSBAQAogICovDQogDQogLyogVHlwZSBkZWZpbml0aW9ucy4gKi8NCi0jZGVmaW5lIHBvcnRDSEFSICAgICAgICAgIGNoYXINCi0jZGVmaW5lIHBvcnRGTE9BVCAgICAgICAgIGZsb2F0DQotI2RlZmluZSBwb3J0RE9VQkxFICAgICAgICBkb3VibGUNCi0jZGVmaW5lIHBvcnRMT05HICAgICAgICAgIGxvbmcNCi0jZGVmaW5lIHBvcnRTSE9SVCAgICAgICAgIHNob3J0DQotI2RlZmluZSBwb3J0U1RBQ0tfVFlQRSAgICB1aW50MzJfdA0KLSNkZWZpbmUgcG9ydEJBU0VfVFlQRSAgICAgbG9uZw0KKyNkZWZpbmUgcG9ydENIQVIgICAgICAgIGNoYXINCisjZGVmaW5lIHBvcnRGTE9BVCAgICAgICBmbG9hdA0KKyNkZWZpbmUgcG9ydERPVUJMRSAgICAgIGRvdWJsZQ0KKyNkZWZpbmUgcG9ydExPTkcgICAgICAgIGxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVCAgICAgICBzaG9ydA0KKyNkZWZpbmUgcG9ydFNUQUNLX1RZUEUgIHVpbnQzMl90DQorI2RlZmluZSBwb3J0QkFTRV9UWVBFICAgbG9uZw0KIA0KLXR5cGVkZWYgcG9ydFNUQUNLX1RZUEUgICBTdGFja1R5cGVfdDsNCi10eXBlZGVmIGxvbmcgICAgICAgICAgICAgQmFzZVR5cGVfdDsNCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgICAgVUJhc2VUeXBlX3Q7DQordHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSBTdGFja1R5cGVfdDsNCit0eXBlZGVmIGxvbmcgQmFzZVR5cGVfdDsNCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgVUJhc2VUeXBlX3Q7DQogDQotI2lmICggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCi0gICAgdHlwZWRlZiB1aW50MTZfdCAgICAgVGlja1R5cGVfdDsNCi0gICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICAgICAgICAgICAoIFRpY2tUeXBlX3QgKSAweEZGRkYNCisjaWYgKGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSkNCisgICAgdHlwZWRlZiB1aW50MTZfdCBUaWNrVHlwZV90Ow0KKyAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgKFRpY2tUeXBlX3QpIDB4RkZGRg0KICNlbHNlDQotICAgIHR5cGVkZWYgdWludDMyX3QgICAgIFRpY2tUeXBlX3Q7DQotICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAgICAgICAgICAgKCBUaWNrVHlwZV90ICkgMHhGRkZGRkZGRkYNCisgICAgdHlwZWRlZiB1aW50MzJfdCBUaWNrVHlwZV90Ow0KKyAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgKFRpY2tUeXBlX3QpIDB4RkZGRkZGRkZGDQogDQotLyogMzItYml0IHRpY2sgdHlwZSBvbiBhIDMyLWJpdCBhcmNoaXRlY3R1cmUsIHNvIHJlYWRzIG9mIHRoZSB0aWNrIGNvdW50IGRvDQotICogbm90IG5lZWQgdG8gYmUgZ3VhcmRlZCB3aXRoIGEgY3JpdGljYWwgc2VjdGlvbi4gKi8NCi0gICAgI2RlZmluZSBwb3J0VElDS19UWVBFX0lTX0FUT01JQyAgICAxDQorCS8qIDMyLWJpdCB0aWNrIHR5cGUgb24gYSAzMi1iaXQgYXJjaGl0ZWN0dXJlLCBzbyByZWFkcyBvZiB0aGUgdGljayBjb3VudCBkbw0KKwlub3QgbmVlZCB0byBiZSBndWFyZGVkIHdpdGggYSBjcml0aWNhbCBzZWN0aW9uLiAqLw0KKwkjZGVmaW5lIHBvcnRUSUNLX1RZUEVfSVNfQVRPTUlDIDENCiAjZW5kaWYNCiANCiANCiAvKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWNzLiAqLw0KLSNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSCAgICAgICggLTEgKQ0KLSNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TICAgICggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQotI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQgICAgOA0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSCAgICAoLTEpDQorI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMgICAgKChUaWNrVHlwZV90KSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haKQ0KKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UICA4DQogDQogLyogQ3JpdGljYWwgc2VjdGlvbiBoYW5kbGluZy4gKi8NCi1leHRlcm4gdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKTsNCi1leHRlcm4gdm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApOw0KLSNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgICAgICAgIHZQb3J0RW50ZXJDcml0aWNhbCgpDQotI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpICAgICAgICAgdlBvcnRFeGl0Q3JpdGljYWwoKQ0KLSNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpICAgIGFzbSAoICIgQ1BTSUQgSSIgKQ0KLSNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkgICAgIGFzbSAoICIgQ1BTSUUgSSIgKQ0KK2V4dGVybiB2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCh2b2lkKTsNCitleHRlcm4gdm9pZCB2UG9ydEV4aXRDcml0aWNhbCh2b2lkKTsNCisjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpCQl2UG9ydEVudGVyQ3JpdGljYWwoKQ0KKyNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKQkJCXZQb3J0RXhpdENyaXRpY2FsKCkNCisjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKQlhc20oICIgQ1BTSUQgSSIgKQ0KKyNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkJCWFzbSggIiBDUFNJRSBJIiApDQogDQogLyogU2NoZWR1bGVyIHV0aWxpdGllcy4gKi8NCiAjcHJhZ21hIFNXSV9BTElBUyggdlBvcnRZaWVsZCwgMCApDQogZXh0ZXJuIHZvaWQgdlBvcnRZaWVsZCggdm9pZCApOw0KLSNkZWZpbmUgcG9ydFlJRUxEKCkgICAgICAgICAgICAgICAgdlBvcnRZaWVsZCgpDQotI2RlZmluZSBwb3J0U1lTX1NTSVIxX1JFRyAgICAgICggKiggKCB2b2xhdGlsZSB1aW50MzJfdCAqICkgMHhGRkZGRkZCMCApICkNCi0jZGVmaW5lIHBvcnRTWVNfU1NJUjFfU1NLRVkgICAgKCAweDc1MDBVTCApDQotI2RlZmluZSBwb3J0WUlFTERfV0lUSElOX0FQSSgpICAgICB7IHBvcnRTWVNfU1NJUjFfUkVHID0gcG9ydFNZU19TU0lSMV9TU0tFWTsgIGFzbSAoICIgRFNCICIgKTsgYXNtICggIiBJU0IgIiApOyB9DQotI2RlZmluZSBwb3J0WUlFTERfRlJPTV9JU1IoIHggKSAgICBpZiggeCAhPSBwZEZBTFNFICkgeyBwb3J0U1lTX1NTSVIxX1JFRyA9IHBvcnRTWVNfU1NJUjFfU1NLRVk7ICAoIHZvaWQgKSBwb3J0U1lTX1NTSVIxX1JFRzsgfQ0KKyNkZWZpbmUgcG9ydFlJRUxEKCkgICAgICAgICAgICAgCXZQb3J0WWllbGQoKQ0KKyNkZWZpbmUgcG9ydFNZU19TU0lSMV9SRUcJCQkoICogKCAoIHZvbGF0aWxlIHVpbnQzMl90ICogKSAweEZGRkZGRkIwICkgKQ0KKyNkZWZpbmUgcG9ydFNZU19TU0lSMV9TU0tFWQkJCSggMHg3NTAwVUwgKQ0KKyNkZWZpbmUgcG9ydFlJRUxEX1dJVEhJTl9BUEkoKQkJeyBwb3J0U1lTX1NTSVIxX1JFRyA9IHBvcnRTWVNfU1NJUjFfU1NLRVk7ICBhc20oICIgRFNCICIgKTsgYXNtKCAiIElTQiAiICk7IH0NCisjZGVmaW5lIHBvcnRZSUVMRF9GUk9NX0lTUiggeCApCQlpZiggeCAhPSBwZEZBTFNFICl7IHBvcnRTWVNfU1NJUjFfUkVHID0gcG9ydFNZU19TU0lSMV9TU0tFWTsgICggdm9pZCApIHBvcnRTWVNfU1NJUjFfUkVHOyB9DQogDQogI2lmbmRlZiBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04NCi0gICAgI2RlZmluZSBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gICAgMQ0KKwkjZGVmaW5lIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiAxDQogI2VuZGlmDQogDQogLyogQXJjaGl0ZWN0dXJlIHNwZWNpZmljIG9wdGltaXNhdGlvbnMuICovDQogI2lmIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiA9PSAxDQogDQotLyogQ2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24uICovDQotICAgICNpZiAoIGNvbmZpZ01BWF9QUklPUklUSUVTID4gMzIgKQ0KLSAgICAgICAgI2Vycm9yIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiBjYW4gb25seSBiZSBzZXQgdG8gMSB3aGVuIGNvbmZpZ01BWF9QUklPUklUSUVTIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAzMi4gIEl0IGlzIHZlcnkgcmFyZSB0aGF0IGEgc3lzdGVtIHJlcXVpcmVzIG1vcmUgdGhhbiAxMCB0byAxNSBkaWZmZXJlbmNlIHByaW9yaXRpZXMgYXMgdGFza3MgdGhhdCBzaGFyZSBhIHByaW9yaXR5IHdpbGwgdGltZSBzbGljZS4NCi0gICAgI2VuZGlmDQorCS8qIENoZWNrIHRoZSBjb25maWd1cmF0aW9uLiAqLw0KKwkjaWYoIGNvbmZpZ01BWF9QUklPUklUSUVTID4gMzIgKQ0KKwkJI2Vycm9yIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiBjYW4gb25seSBiZSBzZXQgdG8gMSB3aGVuIGNvbmZpZ01BWF9QUklPUklUSUVTIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAzMi4gIEl0IGlzIHZlcnkgcmFyZSB0aGF0IGEgc3lzdGVtIHJlcXVpcmVzIG1vcmUgdGhhbiAxMCB0byAxNSBkaWZmZXJlbmNlIHByaW9yaXRpZXMgYXMgdGFza3MgdGhhdCBzaGFyZSBhIHByaW9yaXR5IHdpbGwgdGltZSBzbGljZS4NCisJI2VuZGlmDQogDQotLyogU3RvcmUvY2xlYXIgdGhlIHJlYWR5IHByaW9yaXRpZXMgaW4gYSBiaXQgbWFwLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRSRUNPUkRfUkVBRFlfUFJJT1JJVFkoIHV4UHJpb3JpdHksIHV4UmVhZHlQcmlvcml0aWVzICkgICAgKCB1eFJlYWR5UHJpb3JpdGllcyApIHw9ICggMVVMIDw8ICggdXhQcmlvcml0eSApICkNCi0gICAgI2RlZmluZSBwb3J0UkVTRVRfUkVBRFlfUFJJT1JJVFkoIHV4UHJpb3JpdHksIHV4UmVhZHlQcmlvcml0aWVzICkgICAgICggdXhSZWFkeVByaW9yaXRpZXMgKSAmPSB+KCAxVUwgPDwgKCB1eFByaW9yaXR5ICkgKQ0KKwkvKiBTdG9yZS9jbGVhciB0aGUgcmVhZHkgcHJpb3JpdGllcyBpbiBhIGJpdCBtYXAuICovDQorCSNkZWZpbmUgcG9ydFJFQ09SRF9SRUFEWV9QUklPUklUWSggdXhQcmlvcml0eSwgdXhSZWFkeVByaW9yaXRpZXMgKSAoIHV4UmVhZHlQcmlvcml0aWVzICkgfD0gKCAxVUwgPDwgKCB1eFByaW9yaXR5ICkgKQ0KKwkjZGVmaW5lIHBvcnRSRVNFVF9SRUFEWV9QUklPUklUWSggdXhQcmlvcml0eSwgdXhSZWFkeVByaW9yaXRpZXMgKSAoIHV4UmVhZHlQcmlvcml0aWVzICkgJj0gfiggMVVMIDw8ICggdXhQcmlvcml0eSApICkNCiANCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQotICAgICNkZWZpbmUgcG9ydEdFVF9ISUdIRVNUX1BSSU9SSVRZKCB1eFRvcFByaW9yaXR5LCB1eFJlYWR5UHJpb3JpdGllcyApICAgIHV4VG9wUHJpb3JpdHkgPSAoIDMxIC0gX19jbHooICggdXhSZWFkeVByaW9yaXRpZXMgKSApICkNCisJI2RlZmluZSBwb3J0R0VUX0hJR0hFU1RfUFJJT1JJVFkoIHV4VG9wUHJpb3JpdHksIHV4UmVhZHlQcmlvcml0aWVzICkgdXhUb3BQcmlvcml0eSA9ICggMzEgLSBfX2NseiggKCB1eFJlYWR5UHJpb3JpdGllcyApICkgKQ0KIA0KICNlbmRpZiAvKiBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gKi8NCiANCiANCiAvKiBUYXNrIGZ1bmN0aW9uIG1hY3JvcyBhcyBkZXNjcmliZWQgb24gdGhlIEZyZWVSVE9TLm9yZyBXRUIgc2l0ZS4gKi8NCi0jZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgICAgICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCi0jZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzKSAgICAgICB2b2lkIHZGdW5jdGlvbih2b2lkICpwdlBhcmFtZXRlcnMpDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyh2RnVuY3Rpb24sIHB2UGFyYW1ldGVycykgdm9pZCB2RnVuY3Rpb24odm9pZCAqcHZQYXJhbWV0ZXJzKQ0KIA0KICNlbmRpZiAvKiBfX1BPUlRNQUNST19IX18gKi8NCisNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9DQ1MvTVNQNDMwWC9kYXRhX21vZGVsLmggYi9wb3J0YWJsZS9DQ1MvTVNQNDMwWC9kYXRhX21vZGVsLmgKaW5kZXggNmEwNzg3Yy4uZmNmY2ZhYiAxMDA2NDQKLS0tIGEvcG9ydGFibGUvQ0NTL01TUDQzMFgvZGF0YV9tb2RlbC5oCisrKyBiL3BvcnRhYmxlL0NDUy9NU1A0MzBYL2RhdGFfbW9kZWwuaApAQCAtMSw0OCArMSw1MyBAQAotOyAvKg0KLSAgICogOyAqIEZyZWVSVE9TIEtlcm5lbCBWMTAuMy4xDQotICAgKiA7ICogQ29weXJpZ2h0IChDKSAyMDIwIEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuICBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICogOyAqDQotICAgKiA7ICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZg0KLSAgICogOyAqIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluDQotICAgKiA7ICogdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bw0KLSAgICogOyAqIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mDQotICAgKiA7ICogdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLA0KLSAgICogOyAqIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOg0KLSAgICogOyAqDQotICAgKiA7ICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsDQotICAgKiA7ICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4NCi0gICAqIDsgKg0KLSAgICogOyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SDQotICAgKiA7ICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MNCi0gICAqIDsgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1INCi0gICAqIDsgKiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVINCi0gICAqIDsgKiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTg0KLSAgICogOyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuDQotICAgKiA7ICoNCi0gICAqIDsgKiBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZw0KLSAgICogOyAqIGh0dHA6Ly9hd3MuYW1hem9uLmNvbS9mcmVlcnRvcw0KLSAgICogOyAqDQotICAgKiA7ICogMSB0YWIgPT0gNCBzcGFjZXMhDQotICAgKiA7ICovDQorOy8qDQorOyAqIEZyZWVSVE9TIEtlcm5lbCBWMTAuMy4xDQorOyAqIENvcHlyaWdodCAoQykgMjAyMCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCis7ICoNCis7ICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZg0KKzsgKiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbg0KKzsgKiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvDQorOyAqIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mDQorOyAqIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywNCis7ICogc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6DQorOyAqDQorOyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbA0KKzsgKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLg0KKzsgKg0KKzsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUg0KKzsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUw0KKzsgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1INCis7ICogQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSDQorOyAqIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElODQorOyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuDQorOyAqDQorOyAqIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnDQorOyAqIGh0dHA6Ly9hd3MuYW1hem9uLmNvbS9mcmVlcnRvcw0KKzsgKg0KKzsgKiAxIHRhYiA9PSA0IHNwYWNlcyENCis7ICovDQogDQotLmlmICRERUZJTkVEKCBfX0xBUkdFX0RBVEFfTU9ERUxfXyApDQotICAgLmRlZmluZSAicHVzaG0uYSIsIHB1c2htX3gNCi0gICAuZGVmaW5lICJwb3BtLmEiLCBwb3BtX3gNCi0gICAuZGVmaW5lICJwdXNoLmEiLCBwdXNoX3gNCi0gICAuZGVmaW5lICJwb3AuYSIsIHBvcF94DQotICAgLmRlZmluZSAibW92LmEiLCBtb3ZfeA0KLSAgIC5lbHNlDQotICAgIC5kZWZpbmUgInB1c2htLnciLCBwdXNobV94DQotICAgICAgIC5kZWZpbmUgInBvcG0udyIsIHBvcG1feA0KLSAgICAgICAuZGVmaW5lICJwdXNoLnciLCBwdXNoX3gNCi0gICAgICAgLmRlZmluZSAicG9wLnciLCBwb3BfeA0KLSAgICAgICAuZGVmaW5lICJtb3YudyIsIG1vdl94DQotICAgICAgIC5lbmRpZg0KKwkuaWYgJERFRklORUQoIF9fTEFSR0VfREFUQV9NT0RFTF9fICkNCisJCS5kZWZpbmUgInB1c2htLmEiLCBwdXNobV94DQorCQkuZGVmaW5lICJwb3BtLmEiLCBwb3BtX3gNCisJCS5kZWZpbmUgInB1c2guYSIsIHB1c2hfeA0KKwkJLmRlZmluZSAicG9wLmEiLCBwb3BfeA0KKwkJLmRlZmluZSAibW92LmEiLCBtb3ZfeA0KKwkuZWxzZQ0KKwkJLmRlZmluZSAicHVzaG0udyIsIHB1c2htX3gNCisJCS5kZWZpbmUgInBvcG0udyIsIHBvcG1feA0KKwkJLmRlZmluZSAicHVzaC53IiwgcHVzaF94DQorCQkuZGVmaW5lICJwb3AudyIsIHBvcF94DQorCQkuZGVmaW5lICJtb3YudyIsIG1vdl94DQorCS5lbmRpZg0KIA0KLSAgICAgICAuaWYgJERFRklORUQoIF9fTEFSR0VfQ09ERV9NT0RFTF9fICkNCi0gICAgICAgLmRlZmluZSAiY2FsbGEiLCBjYWxsX3gNCi0gICAgICAgLmRlZmluZSAicmV0YSIsIHJldF94DQotICAgICAgIC5lbHNlDQotICAgICAgICAuZGVmaW5lICJjYWxsIiwgY2FsbF94DQotICAgICAgICAgICAuZGVmaW5lICJyZXQiLCByZXRfeA0KLSAgICAgICAgICAgLmVuZGlmDQorCS5pZiAkREVGSU5FRCggX19MQVJHRV9DT0RFX01PREVMX18gKQ0KKwkJLmRlZmluZSAiY2FsbGEiLCBjYWxsX3gNCisJCS5kZWZpbmUgInJldGEiLCByZXRfeA0KKwkuZWxzZQ0KKwkJLmRlZmluZSAiY2FsbCIsIGNhbGxfeA0KKwkJLmRlZmluZSAicmV0IiwgcmV0X3gNCisJLmVuZGlmDQorDQorDQorDQorDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvQ0NTL01TUDQzMFgvcG9ydC5jIGIvcG9ydGFibGUvQ0NTL01TUDQzMFgvcG9ydC5jCmluZGV4IDZlMGQ4NTcuLmM2YWJjZWQgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0NDUy9NU1A0MzBYL3BvcnQuYworKysgYi9wb3J0YWJsZS9DQ1MvTVNQNDMwWC9wb3J0LmMKQEAgLTMwLDI4ICszMCwyOCBAQAogI2luY2x1ZGUgInRhc2suaCINCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgTVNQNDMwWCBwb3J0Lg0KLSotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgTVNQNDMwWCBwb3J0Lg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogQ29uc3RhbnRzIHJlcXVpcmVkIGZvciBoYXJkd2FyZSBzZXR1cC4gIFRoZSB0aWNrIElTUiBydW5zIG9mZiB0aGUgQUNMSywNCi0gKiBub3QgdGhlIE1DTEsuICovDQotI2RlZmluZSBwb3J0QUNMS19GUkVRVUVOQ1lfSFogICAgICAgICAgICggKCBUaWNrVHlwZV90ICkgMzI3NjggKQ0KLSNkZWZpbmUgcG9ydElOSVRJQUxfQ1JJVElDQUxfTkVTVElORyAgICAoICggdWludDE2X3QgKSAxMCApDQotI2RlZmluZSBwb3J0RkxBR1NfSU5UX0VOQUJMRUQgICAgICAgICAgICggKCBTdGFja1R5cGVfdCApIDB4MDggKQ0KK25vdCB0aGUgTUNMSy4gKi8NCisjZGVmaW5lIHBvcnRBQ0xLX0ZSRVFVRU5DWV9IWgkJCSggKCBUaWNrVHlwZV90ICkgMzI3NjggKQ0KKyNkZWZpbmUgcG9ydElOSVRJQUxfQ1JJVElDQUxfTkVTVElORwkoICggdWludDE2X3QgKSAxMCApDQorI2RlZmluZSBwb3J0RkxBR1NfSU5UX0VOQUJMRUQJCQkoICggU3RhY2tUeXBlX3QgKSAweDA4ICkNCiANCiAvKiBXZSByZXF1aXJlIHRoZSBhZGRyZXNzIG9mIHRoZSBweEN1cnJlbnRUQ0IgdmFyaWFibGUsIGJ1dCBkb24ndCB3YW50IHRvIGtub3cNCi0gKiBhbnkgZGV0YWlscyBvZiBpdHMgdHlwZS4gKi8NCithbnkgZGV0YWlscyBvZiBpdHMgdHlwZS4gKi8NCiB0eXBlZGVmIHZvaWQgVENCX3Q7DQogZXh0ZXJuIHZvbGF0aWxlIFRDQl90ICogdm9sYXRpbGUgcHhDdXJyZW50VENCOw0KIA0KIC8qIEVhY2ggdGFzayBtYWludGFpbnMgYSBjb3VudCBvZiB0aGUgY3JpdGljYWwgc2VjdGlvbiBuZXN0aW5nIGRlcHRoLiAgRWFjaA0KLSAqIHRpbWUgYSBjcml0aWNhbCBzZWN0aW9uIGlzIGVudGVyZWQgdGhlIGNvdW50IGlzIGluY3JlbWVudGVkLiAgRWFjaCB0aW1lIGENCi0gKiBjcml0aWNhbCBzZWN0aW9uIGlzIGV4aXRlZCB0aGUgY291bnQgaXMgZGVjcmVtZW50ZWQgLSB3aXRoIGludGVycnVwdHMgb25seQ0KLSAqIGJlaW5nIHJlLWVuYWJsZWQgaWYgdGhlIGNvdW50IGlzIHplcm8uDQotICoNCi0gKiB1c0NyaXRpY2FsTmVzdGluZyB3aWxsIGdldCBzZXQgdG8gemVybyB3aGVuIHRoZSBzY2hlZHVsZXIgc3RhcnRzLCBidXQgbXVzdA0KLSAqIG5vdCBiZSBpbml0aWFsaXNlZCB0byB6ZXJvIGFzIHRoaXMgd2lsbCBjYXVzZSBwcm9ibGVtcyBkdXJpbmcgdGhlIHN0YXJ0dXANCi0gKiBzZXF1ZW5jZS4gKi8NCit0aW1lIGEgY3JpdGljYWwgc2VjdGlvbiBpcyBlbnRlcmVkIHRoZSBjb3VudCBpcyBpbmNyZW1lbnRlZC4gIEVhY2ggdGltZSBhDQorY3JpdGljYWwgc2VjdGlvbiBpcyBleGl0ZWQgdGhlIGNvdW50IGlzIGRlY3JlbWVudGVkIC0gd2l0aCBpbnRlcnJ1cHRzIG9ubHkNCitiZWluZyByZS1lbmFibGVkIGlmIHRoZSBjb3VudCBpcyB6ZXJvLg0KKw0KK3VzQ3JpdGljYWxOZXN0aW5nIHdpbGwgZ2V0IHNldCB0byB6ZXJvIHdoZW4gdGhlIHNjaGVkdWxlciBzdGFydHMsIGJ1dCBtdXN0DQorbm90IGJlIGluaXRpYWxpc2VkIHRvIHplcm8gYXMgdGhpcyB3aWxsIGNhdXNlIHByb2JsZW1zIGR1cmluZyB0aGUgc3RhcnR1cA0KK3NlcXVlbmNlLiAqLw0KIHZvbGF0aWxlIHVpbnQxNl90IHVzQ3JpdGljYWxOZXN0aW5nID0gcG9ydElOSVRJQUxfQ1JJVElDQUxfTkVTVElORzsNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCkBAIC02OSw5NiArNjksOTQgQEAKICAqDQogICogU2VlIHRoZSBoZWFkZXIgZmlsZSBwb3J0YWJsZS5oLg0KICAqLw0KLVN0YWNrVHlwZV90ICogcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqIHB4VG9wT2ZTdGFjaywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFza0Z1bmN0aW9uX3QgcHhDb2RlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICogcHZQYXJhbWV0ZXJzICkNCitTdGFja1R5cGVfdCAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqcHhUb3BPZlN0YWNrLCBUYXNrRnVuY3Rpb25fdCBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycyApDQogew0KLSAgICB1aW50MTZfdCAqIHB1c1RvcE9mU3RhY2s7DQotICAgIHVpbnQzMl90ICogcHVsVG9wT2ZTdGFjaywgdWxUZW1wOw0KK3VpbnQxNl90ICpwdXNUb3BPZlN0YWNrOw0KK3VpbnQzMl90ICpwdWxUb3BPZlN0YWNrLCB1bFRlbXA7DQogDQotICAgIC8qDQotICAgICAqICBQbGFjZSBhIGZldyBieXRlcyBvZiBrbm93biB2YWx1ZXMgb24gdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suDQotICAgICAqICBUaGlzIGlzIGp1c3QgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgYW5kIGNhbiBiZSBpbmNsdWRlZCBpZiByZXF1aXJlZC4NCi0gICAgICoNCi0gICAgICogcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTExMTsNCi0gICAgICogIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgKiBweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgyMjIyOw0KLSAgICAgKiAgcHhUb3BPZlN0YWNrLS07DQotICAgICAqIHB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDMzMzM7DQotICAgICAqICBweFRvcE9mU3RhY2stLTsNCi0gICAgICovDQorCS8qDQorCQlQbGFjZSBhIGZldyBieXRlcyBvZiBrbm93biB2YWx1ZXMgb24gdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suDQorCQlUaGlzIGlzIGp1c3QgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgYW5kIGNhbiBiZSBpbmNsdWRlZCBpZiByZXF1aXJlZC4NCiANCi0gICAgLyogRGF0YSB0eXBlcyBhcmUgbmVlZCBlaXRoZXIgMTYgYml0cyBvciAzMiBiaXRzIGRlcGVuZGluZyBvbiB0aGUgZGF0YQ0KLSAgICAgKiBhbmQgY29kZSBtb2RlbCB1c2VkLiAqLw0KLSAgICBpZiggc2l6ZW9mKCBweENvZGUgKSA9PSBzaXplb2YoIHVpbnQxNl90ICkgKQ0KLSAgICB7DQotICAgICAgICBwdXNUb3BPZlN0YWNrID0gKCB1aW50MTZfdCAqICkgcHhUb3BPZlN0YWNrOw0KLSAgICAgICAgdWxUZW1wID0gKCB1aW50MzJfdCApIHB4Q29kZTsNCi0gICAgICAgICpwdXNUb3BPZlN0YWNrID0gKCB1aW50MTZfdCApIHVsVGVtcDsNCi0gICAgfQ0KLSAgICBlbHNlDQotICAgIHsNCi0gICAgICAgIC8qIE1ha2Ugcm9vbSBmb3IgYSAyMCBiaXQgdmFsdWUgc3RvcmVkIGFzIGEgMzIgYml0IHZhbHVlLiAqLw0KLSAgICAgICAgcHVzVG9wT2ZTdGFjayA9ICggdWludDE2X3QgKiApIHB4VG9wT2ZTdGFjazsNCi0gICAgICAgIHB1c1RvcE9mU3RhY2stLTsNCi0gICAgICAgIHB1bFRvcE9mU3RhY2sgPSAoIHVpbnQzMl90ICogKSBwdXNUb3BPZlN0YWNrOw0KLSAgICAgICAgKnB1bFRvcE9mU3RhY2sgPSAoIHVpbnQzMl90ICkgcHhDb2RlOw0KLSAgICB9DQorCQkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTExMTsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDIyMjI7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgzMzMzOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCSovDQogDQotICAgIHB1c1RvcE9mU3RhY2stLTsNCi0gICAgKnB1c1RvcE9mU3RhY2sgPSBwb3J0RkxBR1NfSU5UX0VOQUJMRUQ7DQotICAgIHB1c1RvcE9mU3RhY2sgLT0gKCBzaXplb2YoIFN0YWNrVHlwZV90ICkgLyAyICk7DQorCS8qIERhdGEgdHlwZXMgYXJlIG5lZWQgZWl0aGVyIDE2IGJpdHMgb3IgMzIgYml0cyBkZXBlbmRpbmcgb24gdGhlIGRhdGEgDQorCWFuZCBjb2RlIG1vZGVsIHVzZWQuICovDQorCWlmKCBzaXplb2YoIHB4Q29kZSApID09IHNpemVvZiggdWludDE2X3QgKSApDQorCXsNCisJCXB1c1RvcE9mU3RhY2sgPSAoIHVpbnQxNl90ICogKSBweFRvcE9mU3RhY2s7DQorCQl1bFRlbXAgPSAoIHVpbnQzMl90ICkgcHhDb2RlOw0KKwkJKnB1c1RvcE9mU3RhY2sgPSAoIHVpbnQxNl90ICkgdWxUZW1wOw0KKwl9DQorCWVsc2UNCisJew0KKwkJLyogTWFrZSByb29tIGZvciBhIDIwIGJpdCB2YWx1ZSBzdG9yZWQgYXMgYSAzMiBiaXQgdmFsdWUuICovDQorCQlwdXNUb3BPZlN0YWNrID0gKCB1aW50MTZfdCAqICkgcHhUb3BPZlN0YWNrOwkJDQorCQlwdXNUb3BPZlN0YWNrLS07DQorCQlwdWxUb3BPZlN0YWNrID0gKCB1aW50MzJfdCAqICkgcHVzVG9wT2ZTdGFjazsNCisJCSpwdWxUb3BPZlN0YWNrID0gKCB1aW50MzJfdCApIHB4Q29kZTsNCisJfQ0KIA0KLSAgICAvKiBGcm9tIGhlcmUgb24gdGhlIHNpemUgb2Ygc3RhY2tlZCBpdGVtcyBkZXBlbmRzIG9uIHRoZSBtZW1vcnkgbW9kZWwuICovDQotICAgIHB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKiApIHB1c1RvcE9mU3RhY2s7DQorCXB1c1RvcE9mU3RhY2stLTsNCisJKnB1c1RvcE9mU3RhY2sgPSBwb3J0RkxBR1NfSU5UX0VOQUJMRUQ7DQorCXB1c1RvcE9mU3RhY2sgLT0gKCBzaXplb2YoIFN0YWNrVHlwZV90ICkgLyAyICk7DQorCQ0KKwkvKiBGcm9tIGhlcmUgb24gdGhlIHNpemUgb2Ygc3RhY2tlZCBpdGVtcyBkZXBlbmRzIG9uIHRoZSBtZW1vcnkgbW9kZWwuICovDQorCXB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKiApIHB1c1RvcE9mU3RhY2s7DQogDQotICAgIC8qIE5leHQgdGhlIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMuICovDQotICAgICNpZmRlZiBQUkVMT0FEX1JFR0lTVEVSX1ZBTFVFUw0KLSAgICAgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweGZmZmY7DQotICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhlZWVlOw0KLSAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4ZGRkZDsNCi0gICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwdlBhcmFtZXRlcnM7DQotICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhiYmJiOw0KLSAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4YWFhYTsNCi0gICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDk5OTk7DQotICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHg4ODg4Ow0KLSAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4NTU1NTsNCi0gICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDY2NjY7DQotICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHg1NTU1Ow0KLSAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4NDQ0NDsNCi0gICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAjZWxzZSAvKiBpZmRlZiBQUkVMT0FEX1JFR0lTVEVSX1ZBTFVFUyAqLw0KLSAgICAgICAgcHhUb3BPZlN0YWNrIC09IDM7DQotICAgICAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB2UGFyYW1ldGVyczsNCi0gICAgICAgIHB4VG9wT2ZTdGFjayAtPSA5Ow0KLSAgICAjZW5kaWYgLyogaWZkZWYgUFJFTE9BRF9SRUdJU1RFUl9WQUxVRVMgKi8NCisJLyogTmV4dCB0aGUgZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycy4gKi8NCisJI2lmZGVmIFBSRUxPQURfUkVHSVNURVJfVkFMVUVTDQorCQkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4ZmZmZjsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweGVlZWU7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhkZGRkOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB2UGFyYW1ldGVyczsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweGJiYmI7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhhYWFhOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4OTk5OTsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDg4ODg7DQorCQlweFRvcE9mU3RhY2stLTsJDQorCQkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4NTU1NTsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDY2NjY7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHg1NTU1Ow0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4NDQ0NDsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkjZWxzZQ0KKwkJcHhUb3BPZlN0YWNrIC09IDM7DQorCQkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB2UGFyYW1ldGVyczsNCisJCXB4VG9wT2ZTdGFjayAtPSA5Ow0KKwkjZW5kaWYNCiANCi0gICAgLyogQSB2YXJpYWJsZSBpcyB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGNyaXRpY2FsIHNlY3Rpb24gbmVzdGluZy4NCi0gICAgICogVGhpcyB2YXJpYWJsZSBoYXMgdG8gYmUgc3RvcmVkIGFzIHBhcnQgb2YgdGhlIHRhc2sgY29udGV4dCBhbmQgaXMNCi0gICAgICogaW5pdGlhbGx5IHNldCB0byB6ZXJvLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkc7DQorCS8qIEEgdmFyaWFibGUgaXMgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSBjcml0aWNhbCBzZWN0aW9uIG5lc3RpbmcuDQorCVRoaXMgdmFyaWFibGUgaGFzIHRvIGJlIHN0b3JlZCBhcyBwYXJ0IG9mIHRoZSB0YXNrIGNvbnRleHQgYW5kIGlzDQorCWluaXRpYWxseSBzZXQgdG8gemVyby4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwb3J0Tk9fQ1JJVElDQUxfU0VDVElPTl9ORVNUSU5HOwkNCiANCi0gICAgLyogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgdG9wIG9mIHRoZSBzdGFjayB3ZSBoYXZlIGdlbmVyYXRlZCBzbyB0aGlzIGNhbg0KLSAgICAgKiBiZSBzdG9yZWQgaW4gdGhlIHRhc2sgY29udHJvbCBibG9jayBmb3IgdGhlIHRhc2suICovDQotICAgIHJldHVybiBweFRvcE9mU3RhY2s7DQorCS8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHRvcCBvZiB0aGUgc3RhY2sgd2UgaGF2ZSBnZW5lcmF0ZWQgc28gdGhpcyBjYW4NCisJYmUgc3RvcmVkIGluIHRoZSB0YXNrIGNvbnRyb2wgYmxvY2sgZm9yIHRoZSB0YXNrLiAqLw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0RW5kU2NoZWR1bGVyKCB2b2lkICkNCiB7DQotICAgIC8qIEl0IGlzIHVubGlrZWx5IHRoYXQgdGhlIE1TUDQzMCBwb3J0IHdpbGwgZ2V0IHN0b3BwZWQuICBJZiByZXF1aXJlZCBzaW1wbHkNCi0gICAgICogZGlzYWJsZSB0aGUgdGljayBpbnRlcnJ1cHQgaGVyZS4gKi8NCisJLyogSXQgaXMgdW5saWtlbHkgdGhhdCB0aGUgTVNQNDMwIHBvcnQgd2lsbCBnZXQgc3RvcHBlZC4gIElmIHJlcXVpcmVkIHNpbXBseQ0KKwlkaXNhYmxlIHRoZSB0aWNrIGludGVycnVwdCBoZXJlLiAqLw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCkBAIC0xNjcsMjEgKzE2NSwyMyBAQAogICovDQogdm9pZCB2UG9ydFNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKQ0KIHsNCi0gICAgdkFwcGxpY2F0aW9uU2V0dXBUaW1lckludGVycnVwdCgpOw0KKwl2QXBwbGljYXRpb25TZXR1cFRpbWVySW50ZXJydXB0KCk7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KICNwcmFnbWEgdmVjdG9yPWNvbmZpZ1RJQ0tfVkVDVE9SDQogaW50ZXJydXB0IHZvaWQgdlRpY2tJU1JFbnRyeSggdm9pZCApDQogew0KLSAgICBleHRlcm4gdm9pZCB2UG9ydFRpY2tJU1IoIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2UG9ydFRpY2tJU1IoIHZvaWQgKTsNCiANCi0gICAgX19iaWNfU1JfcmVnaXN0ZXJfb25fZXhpdCggU0NHMSArIFNDRzAgKyBPU0NPRkYgKyBDUFVPRkYgKTsNCi0gICAgI2lmIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDENCi0gICAgICAgIGV4dGVybiB2b2lkIHZQb3J0UHJlZW1wdGl2ZVRpY2tJU1IoIHZvaWQgKTsNCi0gICAgICAgIHZQb3J0UHJlZW1wdGl2ZVRpY2tJU1IoKTsNCi0gICAgI2Vsc2UNCi0gICAgICAgIGV4dGVybiB2b2lkIHZQb3J0Q29vcGVyYXRpdmVUaWNrSVNSKCB2b2lkICk7DQotICAgICAgICB2UG9ydENvb3BlcmF0aXZlVGlja0lTUigpOw0KLSAgICAjZW5kaWYNCisJX19iaWNfU1JfcmVnaXN0ZXJfb25fZXhpdCggU0NHMSArIFNDRzAgKyBPU0NPRkYgKyBDUFVPRkYgKTsNCisJI2lmIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDENCisJCWV4dGVybiB2b2lkIHZQb3J0UHJlZW1wdGl2ZVRpY2tJU1IoIHZvaWQgKTsNCisJCXZQb3J0UHJlZW1wdGl2ZVRpY2tJU1IoKTsNCisJI2Vsc2UNCisJCWV4dGVybiB2b2lkIHZQb3J0Q29vcGVyYXRpdmVUaWNrSVNSKCB2b2lkICk7DQorCQl2UG9ydENvb3BlcmF0aXZlVGlja0lTUigpOw0KKwkjZW5kaWYNCiB9DQorDQorCQ0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0NDUy9NU1A0MzBYL3BvcnRtYWNyby5oIGIvcG9ydGFibGUvQ0NTL01TUDQzMFgvcG9ydG1hY3JvLmgKaW5kZXggNzg2MTJlMy4uY2EyZjAyZiAxMDA2NDQKLS0tIGEvcG9ydGFibGUvQ0NTL01TUDQzMFgvcG9ydG1hY3JvLmgKKysrIGIvcG9ydGFibGUvQ0NTL01TUDQzMFgvcG9ydG1hY3JvLmgKQEAgLTQyLDcyICs0Miw3MiBAQAogI2luY2x1ZGUgIm1zcDQzMC5oIg0KIA0KIC8qIFR5cGUgZGVmaW5pdGlvbnMuICovDQotI2RlZmluZSBwb3J0Q0hBUiAgICAgICAgIGNoYXINCi0jZGVmaW5lIHBvcnRGTE9BVCAgICAgICAgZmxvYXQNCi0jZGVmaW5lIHBvcnRET1VCTEUgICAgICAgZG91YmxlDQotI2RlZmluZSBwb3J0TE9ORyAgICAgICAgIGxvbmcNCi0jZGVmaW5lIHBvcnRTSE9SVCAgICAgICAgaW50DQotI2RlZmluZSBwb3J0QkFTRV9UWVBFICAgIHBvcnRTSE9SVA0KKyNkZWZpbmUgcG9ydENIQVIJCWNoYXINCisjZGVmaW5lIHBvcnRGTE9BVAkJZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUJCWRvdWJsZQ0KKyNkZWZpbmUgcG9ydExPTkcJCWxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVAkJaW50DQorI2RlZmluZSBwb3J0QkFTRV9UWVBFCXBvcnRTSE9SVA0KIA0KIC8qIFRoZSBzdGFjayB0eXBlIGNoYW5nZXMgZGVwZW5kaW5nIG9uIHRoZSBkYXRhIG1vZGVsLiAqLw0KICNpZmRlZiBfX0xBUkdFX0RBVEFfTU9ERUxfXw0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19UWVBFICAgICAgICAgICB1aW50MzJfdA0KKwkjZGVmaW5lIHBvcnRTVEFDS19UWVBFIHVpbnQzMl90DQogI2Vsc2UNCi0gICAgI2RlZmluZSBwb3J0U1RBQ0tfVFlQRSAgICAgICAgICAgdWludDE2X3QNCi0gICAgI2RlZmluZSBwb3J0UE9JTlRFUl9TSVpFX1RZUEUgICAgdWludDE2X3QNCisJI2RlZmluZSBwb3J0U1RBQ0tfVFlQRSB1aW50MTZfdA0KKwkjZGVmaW5lIHBvcnRQT0lOVEVSX1NJWkVfVFlQRSB1aW50MTZfdA0KICNlbmRpZg0KIA0KLXR5cGVkZWYgcG9ydFNUQUNLX1RZUEUgICBTdGFja1R5cGVfdDsNCi10eXBlZGVmIHNob3J0ICAgICAgICAgICAgQmFzZVR5cGVfdDsNCi10eXBlZGVmIHVuc2lnbmVkIHNob3J0ICAgVUJhc2VUeXBlX3Q7DQordHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSBTdGFja1R5cGVfdDsNCit0eXBlZGVmIHNob3J0IEJhc2VUeXBlX3Q7DQordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBVQmFzZVR5cGVfdDsNCiANCi0jaWYgKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KLSAgICB0eXBlZGVmIHVpbnQxNl90ICAgICBUaWNrVHlwZV90Ow0KLSAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQorI2lmKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KKwl0eXBlZGVmIHVpbnQxNl90IFRpY2tUeXBlX3Q7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIFRpY2tUeXBlX3QgKSAweGZmZmYNCiAjZWxzZQ0KLSAgICB0eXBlZGVmIHVpbnQzMl90ICAgICBUaWNrVHlwZV90Ow0KLSAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQorCXR5cGVkZWYgdWludDMyX3QgVGlja1R5cGVfdDsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTA0KICNlbmRpZg0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIEludGVycnVwdCBjb250cm9sIG1hY3Jvcy4gKi8NCi0jZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAgICBfZGlzYWJsZV9pbnRlcnJ1cHQoKTsgX25vcCgpDQotI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKSAgICAgX2VuYWJsZV9pbnRlcnJ1cHQoKTsgX25vcCgpDQorI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkJX2Rpc2FibGVfaW50ZXJydXB0KCk7IF9ub3AoKQ0KKyNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkJCV9lbmFibGVfaW50ZXJydXB0KCk7IF9ub3AoKQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIENyaXRpY2FsIHNlY3Rpb24gY29udHJvbCBtYWNyb3MuICovDQotI2RlZmluZSBwb3J0Tk9fQ1JJVElDQUxfU0VDVElPTl9ORVNUSU5HICAgICggKCB1aW50MTZfdCApIDAgKQ0KKyNkZWZpbmUgcG9ydE5PX0NSSVRJQ0FMX1NFQ1RJT05fTkVTVElORwkJKCAoIHVpbnQxNl90ICkgMCApDQogDQotI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGV4dGVybiB2b2xhdGlsZSB1aW50MTZfdCB1c0NyaXRpY2FsTmVzdGluZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAvKiBOb3cgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgdXNDcml0aWNhbE5lc3RpbmcgY2FuIGJlIGFjY2Vzc2VkICovICAgICAgXA0KLSAgICAgICAgLyogZGlyZWN0bHkuICBJbmNyZW1lbnQgdWxDcml0aWNhbE5lc3RpbmcgdG8ga2VlcCBhIGNvdW50IG9mIGhvdyBtYW55ICovIFwNCi0gICAgICAgIC8qIHRpbWVzIHBvcnRFTlRFUl9DUklUSUNBTCgpIGhhcyBiZWVuIGNhbGxlZC4gKi8gICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICB1c0NyaXRpY2FsTmVzdGluZysrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB9DQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKQkJCQkJCQkJCQkJCQlcDQorewkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KK2V4dGVybiB2b2xhdGlsZSB1aW50MTZfdCB1c0NyaXRpY2FsTmVzdGluZzsJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwlwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7CQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogTm93IGludGVycnVwdHMgYXJlIGRpc2FibGVkIHVzQ3JpdGljYWxOZXN0aW5nIGNhbiBiZSBhY2Nlc3NlZCAqLwkJCVwNCisJLyogZGlyZWN0bHkuICBJbmNyZW1lbnQgdWxDcml0aWNhbE5lc3RpbmcgdG8ga2VlcCBhIGNvdW50IG9mIGhvdyBtYW55ICovCVwNCisJLyogdGltZXMgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgaGFzIGJlZW4gY2FsbGVkLiAqLwkJCQkJCQlcDQorCXVzQ3JpdGljYWxOZXN0aW5nKys7CQkJCQkJCQkJCQkJCQlcDQorfQ0KIA0KLSNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBleHRlcm4gdm9sYXRpbGUgdWludDE2X3QgdXNDcml0aWNhbE5lc3Rpbmc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGlmKCB1c0NyaXRpY2FsTmVzdGluZyA+IHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkcgKSAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIERlY3JlbWVudCB0aGUgbmVzdGluZyBjb3VudCBhcyB3ZSBhcmUgbGVhdmluZyBhIGNyaXRpY2FsIHNlY3Rpb24uICovIFwNCi0gICAgICAgICAgICB1c0NyaXRpY2FsTmVzdGluZy0tOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIElmIHRoZSBuZXN0aW5nIGxldmVsIGhhcyByZWFjaGVkIHplcm8gdGhlbiBpbnRlcnJ1cHRzIHNob3VsZCBiZSAqLyAgIFwNCi0gICAgICAgICAgICAvKiByZS1lbmFibGVkLiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgaWYoIHVzQ3JpdGljYWxOZXN0aW5nID09IHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkcgKSAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgfQ0KKyNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKQkJCQkJCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCitleHRlcm4gdm9sYXRpbGUgdWludDE2X3QgdXNDcml0aWNhbE5lc3Rpbmc7CQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJaWYoIHVzQ3JpdGljYWxOZXN0aW5nID4gcG9ydE5PX0NSSVRJQ0FMX1NFQ1RJT05fTkVTVElORyApCQkJCQlcDQorCXsJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJLyogRGVjcmVtZW50IHRoZSBuZXN0aW5nIGNvdW50IGFzIHdlIGFyZSBsZWF2aW5nIGEgY3JpdGljYWwgc2VjdGlvbi4gKi8JXA0KKwkJdXNDcml0aWNhbE5lc3RpbmctLTsJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJLyogSWYgdGhlIG5lc3RpbmcgbGV2ZWwgaGFzIHJlYWNoZWQgemVybyB0aGVuIGludGVycnVwdHMgc2hvdWxkIGJlICovCVwNCisJCS8qIHJlLWVuYWJsZWQuICovCQkJCQkJCQkJCQkJCQlcDQorCQlpZiggdXNDcml0aWNhbE5lc3RpbmcgPT0gcG9ydE5PX0NSSVRJQ0FMX1NFQ1RJT05fTkVTVElORyApCQkJCVwNCisJCXsJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkJcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7CQkJCQkJCQkJCQlcDQorCQl9CQkJCQkJCQkJCQkJCQkJCQkJXA0KKwl9CQkJCQkJCQkJCQkJCQkJCQkJCVwNCit9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGFzayB1dGlsaXRpZXMuICovDQpAQCAtMTE2LDI3ICsxMTYsMjggQEAKICAqIE1hbnVhbCBjb250ZXh0IHN3aXRjaCBjYWxsZWQgYnkgcG9ydFlJRUxEIG9yIHRhc2tZSUVMRC4NCiAgKi8NCiBleHRlcm4gdm9pZCB2UG9ydFlpZWxkKCB2b2lkICk7DQotI2RlZmluZSBwb3J0WUlFTEQoKSAgICB2UG9ydFlpZWxkKCkNCisjZGVmaW5lIHBvcnRZSUVMRCgpIHZQb3J0WWllbGQoKQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIEhhcmR3YXJlIHNwZWNpZmljcy4gKi8NCi0jZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVCAgICAyDQotI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RIICAgICAgKCAtMSApDQotI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMgICAgKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCi0jZGVmaW5lIHBvcnROT1AoKSAgICBfX25vX29wZXJhdGlvbigpDQorI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQJCQkyDQorI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RICQkJKCAtMSApDQorI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMJCQkoICggVGlja1R5cGVfdCApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KKyNkZWZpbmUgcG9ydE5PUCgpCQkJCQlfX25vX29wZXJhdGlvbigpDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQotI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQotI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICAgICAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KIA0KIGV4dGVybiB2b2lkIHZUYXNrU3dpdGNoQ29udGV4dCggdm9pZCApOw0KLSNkZWZpbmUgcG9ydFlJRUxEX0ZST01fSVNSKCB4ICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIHggKSB2UG9ydFlpZWxkKCkNCisjZGVmaW5lIHBvcnRZSUVMRF9GUk9NX0lTUiggeCApIGlmKCB4ICkgdlBvcnRZaWVsZCgpDQogDQogdm9pZCB2QXBwbGljYXRpb25TZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICk7DQogDQogLyogc2l6ZW9mKCBpbnQgKSAhPSBzaXplb2YoIGxvbmcgKSBzbyBhIGZ1bGwgcHJpbnRmKCkgbGlicmFyeSBpcyByZXF1aXJlZCBpZg0KLSAqIHJ1biB0aW1lIHN0YXRzIGluZm9ybWF0aW9uIGlzIHRvIGJlIGRpc3BsYXllZC4gKi8NCitydW4gdGltZSBzdGF0cyBpbmZvcm1hdGlvbiBpcyB0byBiZSBkaXNwbGF5ZWQuICovDQogI2RlZmluZSBwb3J0TFVfUFJJTlRGX1NQRUNJRklFUl9SRVFVSVJFRA0KIA0KICNlbmRpZiAvKiBQT1JUTUFDUk9fSCAqLw0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0NvZGVXYXJyaW9yL0NvbGRGaXJlX1YxL3BvcnQuYyBiL3BvcnRhYmxlL0NvZGVXYXJyaW9yL0NvbGRGaXJlX1YxL3BvcnQuYwppbmRleCAyMWViZjE0Li4yNGNkZjhiIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9Db2RlV2Fycmlvci9Db2xkRmlyZV9WMS9wb3J0LmMKKysrIGIvcG9ydGFibGUvQ29kZVdhcnJpb3IvQ29sZEZpcmVfVjEvcG9ydC5jCkBAIC0zMCwxNTggKzMwLDE1NCBAQAogI2luY2x1ZGUgInRhc2suaCINCiANCiANCi0jZGVmaW5lIHBvcnRJTklUSUFMX0ZPUk1BVF9WRUNUT1IgICAgICAoICggU3RhY2tUeXBlX3QgKSAweDQwMDAgKQ0KKyNkZWZpbmUgcG9ydElOSVRJQUxfRk9STUFUX1ZFQ1RPUgkJKCAoIFN0YWNrVHlwZV90ICkgMHg0MDAwICkNCiANCiAvKiBTdXBlcnZpc29yIG1vZGUgc2V0LiAqLw0KLSNkZWZpbmUgcG9ydElOSVRJQUxfU1RBVFVTX1JFR0lTVEVSICAgICggKCBTdGFja1R5cGVfdCApIDB4MjAwMCApDQorI2RlZmluZSBwb3J0SU5JVElBTF9TVEFUVVNfUkVHSVNURVIJCSggKCBTdGFja1R5cGVfdCApIDB4MjAwMCkNCiANCiAvKiBUaGUgY2xvY2sgcHJlc2NhbGUgaW50byB0aGUgdGltZXIgcGVyaXBoZXJhbC4gKi8NCi0jZGVmaW5lIHBvcnRQUkVTQ0FMRV9WQUxVRSAgICAgICAgICAgICAoICggdWludDhfdCApIDEwICkNCisjZGVmaW5lIHBvcnRQUkVTQ0FMRV9WQUxVRQkJCQkoICggdWludDhfdCApIDEwICkNCiANCiAvKiBUaGUgY2xvY2sgZnJlcXVlbmN5IGludG8gdGhlIFJUQy4gKi8NCi0jZGVmaW5lIHBvcnRSVENfQ0xPQ0tfSFogICAgICAgICAgICAgICAoICggdWludDMyX3QgKSAxMDAwICkNCisjZGVmaW5lIHBvcnRSVENfQ0xPQ0tfSFoJCQkJKCAoIHVpbnQzMl90ICkgMTAwMCApDQogDQogYXNtIHZvaWQgaW50ZXJydXB0IFZlY3Rvck51bWJlcl9WTDFzd2kgdlBvcnRZaWVsZElTUiggdm9pZCApOw0KIHN0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKTsNCiANCiAvKiBVc2VkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIG51bWJlciBvZiBuZXN0ZWQgY2FsbHMgdG8gdGFza0VOVEVSX0NSSVRJQ0FMKCkuICBUaGlzDQotICogd2lsbCBiZSBzZXQgdG8gMCBwcmlvciB0byB0aGUgZmlyc3QgdGFzayBiZWluZyBzdGFydGVkLiAqLw0KK3dpbGwgYmUgc2V0IHRvIDAgcHJpb3IgdG8gdGhlIGZpcnN0IHRhc2sgYmVpbmcgc3RhcnRlZC4gKi8NCiBzdGF0aWMgdWludDMyX3QgdWxDcml0aWNhbE5lc3RpbmcgPSAweDk5OTlVTDsNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi1TdGFja1R5cGVfdCAqIHB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKiBweFRvcE9mU3RhY2ssDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqIHB2UGFyYW1ldGVycyApDQorU3RhY2tUeXBlX3QgKnB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKiBweFRvcE9mU3RhY2ssIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzICkNCiB7DQotICAgIHVpbnQzMl90IHVsT3JpZ2luYWxBNTsNCiANCi0gICAgX19hc20gew0KLSAgICAgICAgTU9WRS5MIEE1LCB1bE9yaWdpbmFsQTUNCi0gICAgfTsNCit1aW50MzJfdCB1bE9yaWdpbmFsQTU7DQorDQorCV9fYXNteyBNT1ZFLkwgQTUsIHVsT3JpZ2luYWxBNSB9Ow0KIA0KIA0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4REVBREJFRUY7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKFN0YWNrVHlwZV90KSAweERFQURCRUVGOw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgLyogRXhjZXB0aW9uIHN0YWNrIGZyYW1lIHN0YXJ0cyB3aXRoIHRoZSByZXR1cm4gYWRkcmVzcy4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBweENvZGU7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkvKiBFeGNlcHRpb24gc3RhY2sgZnJhbWUgc3RhcnRzIHdpdGggdGhlIHJldHVybiBhZGRyZXNzLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB4Q29kZTsNCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgICpweFRvcE9mU3RhY2sgPSAoIHBvcnRJTklUSUFMX0ZPUk1BVF9WRUNUT1IgPDwgMTZVTCApIHwgKCBwb3J0SU5JVElBTF9TVEFUVVNfUkVHSVNURVIgKTsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRJTklUSUFMX0ZPUk1BVF9WRUNUT1IgPDwgMTZVTCApIHwgKCBwb3J0SU5JVElBTF9TVEFUVVNfUkVHSVNURVIgKTsNCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwOyAvKkZQKi8NCi0gICAgcHhUb3BPZlN0YWNrIC09IDE0OyAgICAgICAgICAgICAgICAgIC8qIEE1IHRvIEQwLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDsgLypGUCovDQorCXB4VG9wT2ZTdGFjayAtPSAxNDsgLyogQTUgdG8gRDAuICovDQogDQotICAgIC8qIFBhcmFtZXRlciBpbiBBMC4gKi8NCi0gICAgKiggcHhUb3BPZlN0YWNrICsgOCApID0gKCBTdGFja1R5cGVfdCApIHB2UGFyYW1ldGVyczsNCisJLyogUGFyYW1ldGVyIGluIEEwLiAqLw0KKwkqKCBweFRvcE9mU3RhY2sgKyA4ICkgPSAoIFN0YWNrVHlwZV90ICkgcHZQYXJhbWV0ZXJzOw0KIA0KLSAgICAvKiBBNSBtdXN0IGJlIG1haW50YWluZWQgYXMgaXQgaXMgcmVzdXJ2ZWQgYnkgdGhlIGNvbXBpbGVyLiAqLw0KLSAgICAqKCBweFRvcE9mU3RhY2sgKyAxMyApID0gdWxPcmlnaW5hbEE1Ow0KKwkvKiBBNSBtdXN0IGJlIG1haW50YWluZWQgYXMgaXQgaXMgcmVzdXJ2ZWQgYnkgdGhlIGNvbXBpbGVyLiAqLw0KKwkqKCBweFRvcE9mU3RhY2sgKyAxMyApID0gdWxPcmlnaW5hbEE1Ow0KIA0KLSAgICByZXR1cm4gcHhUb3BPZlN0YWNrOw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOyAgDQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIEJhc2VUeXBlX3QgeFBvcnRTdGFydFNjaGVkdWxlciggdm9pZCApDQogew0KLSAgICBleHRlcm4gdm9pZCB2UG9ydFN0YXJ0Rmlyc3RUYXNrKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdlBvcnRTdGFydEZpcnN0VGFzayggdm9pZCApOw0KIA0KLSAgICB1bENyaXRpY2FsTmVzdGluZyA9IDBVTDsNCisJdWxDcml0aWNhbE5lc3RpbmcgPSAwVUw7DQogDQotICAgIC8qIENvbmZpZ3VyZSBhIHRpbWVyIHRvIGdlbmVyYXRlIHRoZSB0aWNrIGludGVycnVwdC4gKi8NCi0gICAgcHJ2U2V0dXBUaW1lckludGVycnVwdCgpOw0KKwkvKiBDb25maWd1cmUgYSB0aW1lciB0byBnZW5lcmF0ZSB0aGUgdGljayBpbnRlcnJ1cHQuICovDQorCXBydlNldHVwVGltZXJJbnRlcnJ1cHQoKTsNCiANCi0gICAgLyogU3RhcnQgdGhlIGZpcnN0IHRhc2sgZXhlY3V0aW5nLiAqLw0KLSAgICB2UG9ydFN0YXJ0Rmlyc3RUYXNrKCk7DQorCS8qIFN0YXJ0IHRoZSBmaXJzdCB0YXNrIGV4ZWN1dGluZy4gKi8NCisJdlBvcnRTdGFydEZpcnN0VGFzaygpOw0KIA0KLSAgICByZXR1cm4gcGRGQUxTRTsNCisJcmV0dXJuIHBkRkFMU0U7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHN0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKQ0KLXsNCi0gICAgLyogUHJlc2NhbGUgYnkgMSAtIGllIG5vIHByZXNjYWxlLiAqLw0KLSAgICBSVENTQyB8PSA4Ow0KLQ0KLSAgICAvKiBDb21wYXJlIG1hdGNoIHZhbHVlLiAqLw0KLSAgICBSVENNT0QgPSBwb3J0UlRDX0NMT0NLX0haIC8gY29uZmlnVElDS19SQVRFX0haOw0KLQ0KLSAgICAvKiBFbmFibGUgdGhlIFJUQyB0byBnZW5lcmF0ZSBpbnRlcnJ1cHRzIC0gaW50ZXJydXB0cyBhcmUgYWxyZWFkeSBkaXNhYmxlZA0KLSAgICAgKiB3aGVuIHRoaXMgY29kZSBleGVjdXRlcy4gKi8NCi0gICAgUlRDU0NfUlRJRSA9IDE7DQorewkJCQkNCisJLyogUHJlc2NhbGUgYnkgMSAtIGllIG5vIHByZXNjYWxlLiAqLw0KKwlSVENTQyB8PSA4Ow0KKwkNCisJLyogQ29tcGFyZSBtYXRjaCB2YWx1ZS4gKi8NCisJUlRDTU9EID0gcG9ydFJUQ19DTE9DS19IWiAvIGNvbmZpZ1RJQ0tfUkFURV9IWjsNCisJDQorCS8qIEVuYWJsZSB0aGUgUlRDIHRvIGdlbmVyYXRlIGludGVycnVwdHMgLSBpbnRlcnJ1cHRzIGFyZSBhbHJlYWR5IGRpc2FibGVkDQorCXdoZW4gdGhpcyBjb2RlIGV4ZWN1dGVzLiAqLw0KKwlSVENTQ19SVElFID0gMTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogdm9pZCB2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApDQogew0KLSAgICAvKiBOb3QgaW1wbGVtZW50ZWQgYXMgdGhlcmUgaXMgbm90aGluZyB0byByZXR1cm4gdG8uICovDQorCS8qIE5vdCBpbXBsZW1lbnRlZCBhcyB0aGVyZSBpcyBub3RoaW5nIHRvIHJldHVybiB0by4gKi8NCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKQ0KIHsNCi0gICAgaWYoIHVsQ3JpdGljYWxOZXN0aW5nID09IDBVTCApDQotICAgIHsNCi0gICAgICAgIC8qIEd1YXJkIGFnYWluc3QgY29udGV4dCBzd2l0Y2hlcyBiZWluZyBwZW5kZWQgc2ltdWx0YW5lb3VzbHkgd2l0aCBhDQotICAgICAgICAgKiBjcml0aWNhbCBzZWN0aW9uIGJlaW5nIGVudGVyZWQuICovDQotICAgICAgICBkbw0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsNCisJaWYoIHVsQ3JpdGljYWxOZXN0aW5nID09IDBVTCApDQorCXsNCisJCS8qIEd1YXJkIGFnYWluc3QgY29udGV4dCBzd2l0Y2hlcyBiZWluZyBwZW5kZWQgc2ltdWx0YW5lb3VzbHkgd2l0aCBhDQorCQljcml0aWNhbCBzZWN0aW9uIGJlaW5nIGVudGVyZWQuICovDQorCQlkbw0KKwkJew0KKwkJCXBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsNCisJCQlpZiggSU5UQ19GUkMgPT0gMFVMICkNCisJCQl7DQorCQkJCWJyZWFrOw0KKwkJCX0NCiANCi0gICAgICAgICAgICBpZiggSU5UQ19GUkMgPT0gMFVMICkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCisJCQlwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKTsNCiANCi0gICAgICAgICAgICBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKTsNCi0gICAgICAgIH0gd2hpbGUoIDEgKTsNCi0gICAgfQ0KLQ0KLSAgICB1bENyaXRpY2FsTmVzdGluZysrOw0KKwkJfSB3aGlsZSggMSApOw0KKwl9DQorCXVsQ3JpdGljYWxOZXN0aW5nKys7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoIHZvaWQgKQ0KIHsNCi0gICAgdWxDcml0aWNhbE5lc3RpbmctLTsNCi0NCi0gICAgaWYoIHVsQ3JpdGljYWxOZXN0aW5nID09IDAgKQ0KLSAgICB7DQotICAgICAgICBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKTsNCi0gICAgfQ0KKwl1bENyaXRpY2FsTmVzdGluZy0tOw0KKwlpZiggdWxDcml0aWNhbE5lc3RpbmcgPT0gMCApDQorCXsNCisJCXBvcnRFTkFCTEVfSU5URVJSVVBUUygpOw0KKwl9DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlBvcnRZaWVsZEhhbmRsZXIoIHZvaWQgKQ0KIHsNCi0gICAgdWludDMyX3QgdWxTYXZlZEludGVycnVwdE1hc2s7DQordWludDMyX3QgdWxTYXZlZEludGVycnVwdE1hc2s7DQogDQotICAgIHVsU2F2ZWRJbnRlcnJ1cHRNYXNrID0gcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpOw0KLSAgICB7DQotICAgICAgICAvKiBOb3RlIHRoaXMgd2lsbCBjbGVhciBhbGwgZm9yY2VkIGludGVycnVwdHMgLSB0aGlzIGlzIGRvbmUgZm9yIHNwZWVkLiAqLw0KLSAgICAgICAgSU5UQ19DRlJDID0gMHgzRTsNCi0gICAgICAgIHZUYXNrU3dpdGNoQ29udGV4dCgpOw0KLSAgICB9DQotICAgIHBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUiggdWxTYXZlZEludGVycnVwdE1hc2sgKTsNCisJdWxTYXZlZEludGVycnVwdE1hc2sgPSBwb3J0U0VUX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCk7DQorCXsNCisJCS8qIE5vdGUgdGhpcyB3aWxsIGNsZWFyIGFsbCBmb3JjZWQgaW50ZXJydXB0cyAtIHRoaXMgaXMgZG9uZSBmb3Igc3BlZWQuICovDQorCQlJTlRDX0NGUkMgPSAweDNFOw0KKwkJdlRhc2tTd2l0Y2hDb250ZXh0KCk7DQorCX0NCisJcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCB1bFNhdmVkSW50ZXJydXB0TWFzayApOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIGludGVycnVwdCBWZWN0b3JOdW1iZXJfVnJ0YyB2UG9ydFRpY2tJU1IoIHZvaWQgKQ0KIHsNCi0gICAgdWludDMyX3QgdWxTYXZlZEludGVycnVwdE1hc2s7DQordWludDMyX3QgdWxTYXZlZEludGVycnVwdE1hc2s7DQogDQotICAgIC8qIENsZWFyIHRoZSBpbnRlcnJ1cHQuICovDQotICAgIFJUQ1NDIHw9IFJUQ1NDX1JUSUZfTUFTSzsNCisJLyogQ2xlYXIgdGhlIGludGVycnVwdC4gKi8NCisJUlRDU0MgfD0gUlRDU0NfUlRJRl9NQVNLOw0KIA0KLSAgICAvKiBJbmNyZW1lbnQgdGhlIFJUT1MgdGljay4gKi8NCi0gICAgdWxTYXZlZEludGVycnVwdE1hc2sgPSBwb3J0U0VUX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCk7DQotICAgIHsNCi0gICAgICAgIGlmKCB4VGFza0luY3JlbWVudFRpY2soKSAhPSBwZEZBTFNFICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICB0YXNrWUlFTEQoKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoIHVsU2F2ZWRJbnRlcnJ1cHRNYXNrICk7DQorCS8qIEluY3JlbWVudCB0aGUgUlRPUyB0aWNrLiAqLw0KKwl1bFNhdmVkSW50ZXJydXB0TWFzayA9IHBvcnRTRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKTsNCisJew0KKwkJaWYoIHhUYXNrSW5jcmVtZW50VGljaygpICE9IHBkRkFMU0UgKQ0KKwkJew0KKwkJCXRhc2tZSUVMRCgpOw0KKwkJfQ0KKwl9DQorCXBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUiggdWxTYXZlZEludGVycnVwdE1hc2sgKTsNCiB9DQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvQ29kZVdhcnJpb3IvQ29sZEZpcmVfVjEvcG9ydG1hY3JvLmggYi9wb3J0YWJsZS9Db2RlV2Fycmlvci9Db2xkRmlyZV9WMS9wb3J0bWFjcm8uaAppbmRleCBlNWQ3ODNkLi5lZmIxZGNhIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9Db2RlV2Fycmlvci9Db2xkRmlyZV9WMS9wb3J0bWFjcm8uaAorKysgYi9wb3J0YWJsZS9Db2RlV2Fycmlvci9Db2xkRmlyZV9WMS9wb3J0bWFjcm8uaApAQCAtMjYsMTEgKzI2LDExIEBACiAgKi8NCiANCiAjaWZuZGVmIFBPUlRNQUNST19IDQotICAgICNkZWZpbmUgUE9SVE1BQ1JPX0gNCisjZGVmaW5lIFBPUlRNQUNST19IDQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgZXh0ZXJuICJDIiB7DQotICAgICNlbmRpZg0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgKiBQb3J0IHNwZWNpZmljIGRlZmluaXRpb25zLg0KQEAgLTQzLDczICs0Myw3MyBAQAogICovDQogDQogLyogVHlwZSBkZWZpbml0aW9ucy4gKi8NCi0gICAgI2RlZmluZSBwb3J0Q0hBUiAgICAgICAgICBjaGFyDQotICAgICNkZWZpbmUgcG9ydEZMT0FUICAgICAgICAgZmxvYXQNCi0gICAgI2RlZmluZSBwb3J0RE9VQkxFICAgICAgICBkb3VibGUNCi0gICAgI2RlZmluZSBwb3J0TE9ORyAgICAgICAgICBsb25nDQotICAgICNkZWZpbmUgcG9ydFNIT1JUICAgICAgICAgc2hvcnQNCi0gICAgI2RlZmluZSBwb3J0U1RBQ0tfVFlQRSAgICB1aW50MzJfdA0KLSAgICAjZGVmaW5lIHBvcnRCQVNFX1RZUEUgICAgIGxvbmcNCisjZGVmaW5lIHBvcnRDSEFSCQljaGFyDQorI2RlZmluZSBwb3J0RkxPQVQJCWZsb2F0DQorI2RlZmluZSBwb3J0RE9VQkxFCQlkb3VibGUNCisjZGVmaW5lIHBvcnRMT05HCQlsb25nDQorI2RlZmluZSBwb3J0U0hPUlQJCXNob3J0DQorI2RlZmluZSBwb3J0U1RBQ0tfVFlQRQl1aW50MzJfdA0KKyNkZWZpbmUgcG9ydEJBU0VfVFlQRQlsb25nDQogDQotICAgIHR5cGVkZWYgcG9ydFNUQUNLX1RZUEUgICBTdGFja1R5cGVfdDsNCi0gICAgdHlwZWRlZiBsb25nICAgICAgICAgICAgIEJhc2VUeXBlX3Q7DQotICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyAgICBVQmFzZVR5cGVfdDsNCit0eXBlZGVmIHBvcnRTVEFDS19UWVBFIFN0YWNrVHlwZV90Ow0KK3R5cGVkZWYgbG9uZyBCYXNlVHlwZV90Ow0KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBVQmFzZVR5cGVfdDsNCiANCiANCi0gICAgI2lmICggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCi0gICAgICAgIHR5cGVkZWYgdWludDE2X3QgICAgIFRpY2tUeXBlX3Q7DQotICAgICAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQotICAgICNlbHNlDQotICAgICAgICB0eXBlZGVmIHVpbnQzMl90ICAgICBUaWNrVHlwZV90Ow0KLSAgICAgICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTA0KLSAgICAjZW5kaWYNCisjaWYoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQorCXR5cGVkZWYgdWludDE2X3QgVGlja1R5cGVfdDsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggVGlja1R5cGVfdCApIDB4ZmZmZg0KKyNlbHNlDQorCXR5cGVkZWYgdWludDMyX3QgVGlja1R5cGVfdDsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTA0KKyNlbmRpZg0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIEhhcmR3YXJlIHNwZWNpZmljcy4gKi8NCi0gICAgI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQgICAgNA0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEggICAgICAtMQ0KLSAgICAjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUyAgICAoICggVGlja1R5cGVfdCApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UCQkJNA0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJCS0xDQorI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMJCQkoICggVGlja1R5cGVfdCApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KLSAgICB1aW50MzJfdCB1bFBvcnRTZXRJUEwoIHVpbnQzMl90ICk7DQotICAgICNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpICAgIHVsUG9ydFNldElQTCggY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkNCi0gICAgI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKSAgICAgdWxQb3J0U2V0SVBMKCAwICkNCit1aW50MzJfdCB1bFBvcnRTZXRJUEwoIHVpbnQzMl90ICk7DQorI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkJdWxQb3J0U2V0SVBMKCBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgKQ0KKyNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkJCXVsUG9ydFNldElQTCggMCApDQogDQogDQotICAgIGV4dGVybiB2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCggdm9pZCApOw0KLSAgICBleHRlcm4gdm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApOw0KLSAgICAjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpICAgIHZQb3J0RW50ZXJDcml0aWNhbCgpDQotICAgICNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKSAgICAgdlBvcnRFeGl0Q3JpdGljYWwoKQ0KK2V4dGVybiB2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCggdm9pZCApOw0KK2V4dGVybiB2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICk7DQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKQkJdlBvcnRFbnRlckNyaXRpY2FsKCkNCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkJCQl2UG9ydEV4aXRDcml0aWNhbCgpDQogDQotICAgIGV4dGVybiBVQmFzZVR5cGVfdCB1eFBvcnRTZXRJbnRlcnJ1cHRNYXNrRnJvbUlTUiggdm9pZCApOw0KLSAgICBleHRlcm4gdm9pZCB2UG9ydENsZWFySW50ZXJydXB0TWFza0Zyb21JU1IoIFVCYXNlVHlwZV90ICk7DQotICAgICNkZWZpbmUgcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bFBvcnRTZXRJUEwoIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSApDQotICAgICNkZWZpbmUgcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCB1eFNhdmVkU3RhdHVzUmVnaXN0ZXIgKSAgICB1bFBvcnRTZXRJUEwoIHV4U2F2ZWRTdGF0dXNSZWdpc3RlciApDQorZXh0ZXJuIFVCYXNlVHlwZV90IHV4UG9ydFNldEludGVycnVwdE1hc2tGcm9tSVNSKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdlBvcnRDbGVhckludGVycnVwdE1hc2tGcm9tSVNSKCBVQmFzZVR5cGVfdCApOw0KKyNkZWZpbmUgcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpCXVsUG9ydFNldElQTCggY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkNCisjZGVmaW5lIHBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUiggdXhTYXZlZFN0YXR1c1JlZ2lzdGVyICkgdWxQb3J0U2V0SVBMKCB1eFNhdmVkU3RhdHVzUmVnaXN0ZXIgKQ0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFRhc2sgdXRpbGl0aWVzLiAqLw0KLSAgICAjZGVmaW5lIHBvcnROT1AoKSAgICAgIGFzbSB2b2xhdGlsZSAoICJub3AiICkNCisjZGVmaW5lIHBvcnROT1AoKQlhc20gdm9sYXRpbGUgKCAibm9wIiApDQogDQogLyogQ29udGV4dCBzd2l0Y2hlcyBhcmUgcmVxdWVzdGVkIHVzaW5nIHRoZSBmb3JjZSByZWdpc3Rlci4gKi8NCi0gICAgI2RlZmluZSBwb3J0WUlFTEQoKSAgICBJTlRDX1NGUkMgPSAweDNFOyBwb3J0Tk9QKCk7IHBvcnROT1AoKTsgcG9ydE5PUCgpOyBwb3J0Tk9QKCk7IHBvcnROT1AoKQ0KKyNkZWZpbmUgcG9ydFlJRUxEKCkJSU5UQ19TRlJDID0gMHgzRTsgcG9ydE5PUCgpOyBwb3J0Tk9QKCk7IHBvcnROT1AoKTsgcG9ydE5PUCgpOyBwb3J0Tk9QKCkNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBUYXNrIGZ1bmN0aW9uIG1hY3JvcyBhcyBkZXNjcmliZWQgb24gdGhlIEZyZWVSVE9TLm9yZyBXRUIgc2l0ZS4gKi8NCi0gICAgI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApIF9fYXR0cmlidXRlX18oICggbm9yZXR1cm4gKSApDQotICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgICAgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KLSAgICAjZGVmaW5lIHBvcnRFTkRfU1dJVENISU5HX0lTUiggeFN3aXRjaFJlcXVpcmVkICkgXA0KLSAgICBpZiggeFN3aXRjaFJlcXVpcmVkICE9IHBkRkFMU0UgKSAgICAgICAgICAgICAgICAgXA0KLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgcG9ydFlJRUxEKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB9DQorI2RlZmluZSBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHhTd2l0Y2hSZXF1aXJlZCApCWlmKCB4U3dpdGNoUmVxdWlyZWQgIT0gcGRGQUxTRSApCVwNCisJCQkJCQkJCQkJCQkJewkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCXBvcnRZSUVMRCgpOwkJCQkJXA0KKwkJCQkJCQkJCQkJCQl9DQogDQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgfQ0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQogDQogI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvQ29kZVdhcnJpb3IvQ29sZEZpcmVfVjIvcG9ydC5jIGIvcG9ydGFibGUvQ29kZVdhcnJpb3IvQ29sZEZpcmVfVjIvcG9ydC5jCmluZGV4IDg2MTYwOTguLmVlZmNjZDYgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0NvZGVXYXJyaW9yL0NvbGRGaXJlX1YyL3BvcnQuYworKysgYi9wb3J0YWJsZS9Db2RlV2Fycmlvci9Db2xkRmlyZV9WMi9wb3J0LmMKQEAgLTMwLDUyICszMCw1MCBAQAogI2luY2x1ZGUgInRhc2suaCINCiANCiANCi0jZGVmaW5lIHBvcnRJTklUSUFMX0ZPUk1BVF9WRUNUT1IgICAgICAoICggU3RhY2tUeXBlX3QgKSAweDQwMDAgKQ0KKyNkZWZpbmUgcG9ydElOSVRJQUxfRk9STUFUX1ZFQ1RPUgkJKCAoIFN0YWNrVHlwZV90ICkgMHg0MDAwICkNCiANCiAvKiBTdXBlcnZpc29yIG1vZGUgc2V0LiAqLw0KLSNkZWZpbmUgcG9ydElOSVRJQUxfU1RBVFVTX1JFR0lTVEVSICAgICggKCBTdGFja1R5cGVfdCApIDB4MjAwMCApDQorI2RlZmluZSBwb3J0SU5JVElBTF9TVEFUVVNfUkVHSVNURVIJCSggKCBTdGFja1R5cGVfdCApIDB4MjAwMCkNCiANCiAvKiBVc2VkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIG51bWJlciBvZiBuZXN0ZWQgY2FsbHMgdG8gdGFza0VOVEVSX0NSSVRJQ0FMKCkuICBUaGlzDQotICogd2lsbCBiZSBzZXQgdG8gMCBwcmlvciB0byB0aGUgZmlyc3QgdGFzayBiZWluZyBzdGFydGVkLiAqLw0KK3dpbGwgYmUgc2V0IHRvIDAgcHJpb3IgdG8gdGhlIGZpcnN0IHRhc2sgYmVpbmcgc3RhcnRlZC4gKi8NCiBzdGF0aWMgdWludDMyX3QgdWxDcml0aWNhbE5lc3RpbmcgPSAweDk5OTlVTDsNCiANCiANCi0jZGVmaW5lIHBvcnRTQVZFX0NPTlRFWFQoKSAgICAgICAgIFwNCi0gICAgbGVhLmwoIC02MCwgJSBzcCApLCAlIHNwOyAgICAgIFwNCi0gICAgbW92ZW0ubCAlIGQwIC0gJSBmcCwgKCAlIHNwICk7IFwNCi0gICAgbW92ZS5sIHB4Q3VycmVudFRDQiwgJSBhMDsgICAgIFwNCi0gICAgbW92ZS5sICUgc3AsICggJSBhMCApOw0KKyNkZWZpbmUgcG9ydFNBVkVfQ09OVEVYVCgpCQkJCVwNCisJbGVhLmwJCSgtNjAsICVzcCksICVzcDsJCVwNCisJbW92ZW0ubAkJJWQwLSVmcCwgKCVzcCk7CQkJXA0KKwltb3ZlLmwJCXB4Q3VycmVudFRDQiwgJWEwOwkJXA0KKwltb3ZlLmwJCSVzcCwgKCVhMCk7DQogDQotI2RlZmluZSBwb3J0UkVTVE9SRV9DT05URVhUKCkgICAgIFwNCi0gICAgbW92ZS5sIHB4Q3VycmVudFRDQiwgJSBhMDsgICAgXA0KLSAgICBtb3ZlLmwoICUgYTAgKSwgJSBzcDsgICAgICAgICBcDQotICAgIG1vdmVtLmwoICUgc3AgKSwgJSBkMCAtICUgZnA7IFwNCi0gICAgbGVhLmwgJSBzcEAoIDYwICksICUgc3A7ICAgICAgXA0KLSAgICBydGUNCisjZGVmaW5lIHBvcnRSRVNUT1JFX0NPTlRFWFQoKQkJCVwNCisJbW92ZS5sCQlweEN1cnJlbnRUQ0IsICVhMDsJCVwNCisJbW92ZS5sCQkoJWEwKSwgJXNwOwkJCQlcDQorCW1vdmVtLmwJCSglc3ApLCAlZDAtJWZwOwkJCVwNCisJbGVhLmwJCSVzcEAoNjApLCAlc3A7CQkJXA0KKwlydGUNCiANCiANCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi1TdGFja1R5cGVfdCAqIHB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKiBweFRvcE9mU3RhY2ssDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqIHB2UGFyYW1ldGVycyApDQorU3RhY2tUeXBlX3QgKnB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKiBweFRvcE9mU3RhY2ssIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzICkNCiB7DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHZQYXJhbWV0ZXJzOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwdlBhcmFtZXRlcnM7DQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4REVBREJFRUY7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKFN0YWNrVHlwZV90KSAweERFQURCRUVGOw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgLyogRXhjZXB0aW9uIHN0YWNrIGZyYW1lIHN0YXJ0cyB3aXRoIHRoZSByZXR1cm4gYWRkcmVzcy4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBweENvZGU7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkvKiBFeGNlcHRpb24gc3RhY2sgZnJhbWUgc3RhcnRzIHdpdGggdGhlIHJldHVybiBhZGRyZXNzLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB4Q29kZTsNCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgICpweFRvcE9mU3RhY2sgPSAoIHBvcnRJTklUSUFMX0ZPUk1BVF9WRUNUT1IgPDwgMTZVTCApIHwgKCBwb3J0SU5JVElBTF9TVEFUVVNfUkVHSVNURVIgKTsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRJTklUSUFMX0ZPUk1BVF9WRUNUT1IgPDwgMTZVTCApIHwgKCBwb3J0SU5JVElBTF9TVEFUVVNfUkVHSVNURVIgKTsNCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwOyAvKkZQKi8NCi0gICAgcHhUb3BPZlN0YWNrIC09IDE0OyAgICAgICAgICAgICAgICAgIC8qIEE1IHRvIEQwLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDsgLypGUCovDQorCXB4VG9wT2ZTdGFjayAtPSAxNDsgLyogQTUgdG8gRDAuICovDQogDQogICAgIHJldHVybiBweFRvcE9mU3RhY2s7DQogfQ0KQEAgLTgzLDY4ICs4MSw2NyBAQAogDQogQmFzZVR5cGVfdCB4UG9ydFN0YXJ0U2NoZWR1bGVyKCB2b2lkICkNCiB7DQotICAgIGV4dGVybiB2b2lkIHZQb3J0U3RhcnRGaXJzdFRhc2soIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2UG9ydFN0YXJ0Rmlyc3RUYXNrKCB2b2lkICk7DQogDQotICAgIHVsQ3JpdGljYWxOZXN0aW5nID0gMFVMOw0KKwl1bENyaXRpY2FsTmVzdGluZyA9IDBVTDsNCiANCi0gICAgLyogQ29uZmlndXJlIHRoZSBpbnRlcnJ1cHRzIHVzZWQgYnkgdGhpcyBwb3J0LiAqLw0KLSAgICB2QXBwbGljYXRpb25TZXR1cEludGVycnVwdHMoKTsNCisJLyogQ29uZmlndXJlIHRoZSBpbnRlcnJ1cHRzIHVzZWQgYnkgdGhpcyBwb3J0LiAqLw0KKwl2QXBwbGljYXRpb25TZXR1cEludGVycnVwdHMoKTsNCiANCi0gICAgLyogU3RhcnQgdGhlIGZpcnN0IHRhc2sgZXhlY3V0aW5nLiAqLw0KLSAgICB2UG9ydFN0YXJ0Rmlyc3RUYXNrKCk7DQorCS8qIFN0YXJ0IHRoZSBmaXJzdCB0YXNrIGV4ZWN1dGluZy4gKi8NCisJdlBvcnRTdGFydEZpcnN0VGFzaygpOw0KIA0KLSAgICByZXR1cm4gcGRGQUxTRTsNCisJcmV0dXJuIHBkRkFMU0U7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQ0KIHsNCi0gICAgLyogTm90IGltcGxlbWVudGVkIGFzIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmV0dXJuIHRvLiAqLw0KKwkvKiBOb3QgaW1wbGVtZW50ZWQgYXMgdGhlcmUgaXMgbm90aGluZyB0byByZXR1cm4gdG8uICovDQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICkNCiB7DQotICAgIGlmKCB1bENyaXRpY2FsTmVzdGluZyA9PSAwVUwgKQ0KLSAgICB7DQotICAgICAgICAvKiBHdWFyZCBhZ2FpbnN0IGNvbnRleHQgc3dpdGNoZXMgYmVpbmcgcGVuZGVkIHNpbXVsdGFuZW91c2x5IHdpdGggYQ0KLSAgICAgICAgICogY3JpdGljYWwgc2VjdGlvbiBiZWluZyBlbnRlcmVkLiAqLw0KLSAgICAgICAgZG8NCi0gICAgICAgIHsNCi0gICAgICAgICAgICBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7DQorCWlmKCB1bENyaXRpY2FsTmVzdGluZyA9PSAwVUwgKQ0KKwl7DQorCQkvKiBHdWFyZCBhZ2FpbnN0IGNvbnRleHQgc3dpdGNoZXMgYmVpbmcgcGVuZGVkIHNpbXVsdGFuZW91c2x5IHdpdGggYQ0KKwkJY3JpdGljYWwgc2VjdGlvbiBiZWluZyBlbnRlcmVkLiAqLw0KKwkJZG8NCisJCXsNCisJCQlwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7DQorCQkJaWYoIE1DRl9JTlRDMF9JTlRGUkNIID09IDBVTCApDQorCQkJew0KKwkJCQlicmVhazsNCisJCQl9DQogDQotICAgICAgICAgICAgaWYoIE1DRl9JTlRDMF9JTlRGUkNIID09IDBVTCApDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9DQorCQkJcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7DQogDQotICAgICAgICAgICAgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7DQotICAgICAgICB9IHdoaWxlKCAxICk7DQotICAgIH0NCi0NCi0gICAgdWxDcml0aWNhbE5lc3RpbmcrKzsNCisJCX0gd2hpbGUoIDEgKTsNCisJfQ0KKwl1bENyaXRpY2FsTmVzdGluZysrOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICkNCiB7DQotICAgIHVsQ3JpdGljYWxOZXN0aW5nLS07DQotDQotICAgIGlmKCB1bENyaXRpY2FsTmVzdGluZyA9PSAwICkNCi0gICAgew0KLSAgICAgICAgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7DQotICAgIH0NCisJdWxDcml0aWNhbE5lc3RpbmctLTsNCisJaWYoIHVsQ3JpdGljYWxOZXN0aW5nID09IDAgKQ0KKwl7DQorCQlwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKTsNCisJfQ0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0WWllbGRIYW5kbGVyKCB2b2lkICkNCiB7DQotICAgIHVpbnQzMl90IHVsU2F2ZWRJbnRlcnJ1cHRNYXNrOw0KK3VpbnQzMl90IHVsU2F2ZWRJbnRlcnJ1cHRNYXNrOw0KIA0KLSAgICB1bFNhdmVkSW50ZXJydXB0TWFzayA9IHBvcnRTRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKTsNCi0gICAgLyogTm90ZSB0aGlzIHdpbGwgY2xlYXIgYWxsIGZvcmNlZCBpbnRlcnJ1cHRzIC0gdGhpcyBpcyBkb25lIGZvciBzcGVlZC4gKi8NCi0gICAgTUNGX0lOVEMwX0lOVEZSQ0wgPSAwOw0KLSAgICB2VGFza1N3aXRjaENvbnRleHQoKTsNCi0gICAgcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCB1bFNhdmVkSW50ZXJydXB0TWFzayApOw0KKwl1bFNhdmVkSW50ZXJydXB0TWFzayA9IHBvcnRTRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKTsNCisJCS8qIE5vdGUgdGhpcyB3aWxsIGNsZWFyIGFsbCBmb3JjZWQgaW50ZXJydXB0cyAtIHRoaXMgaXMgZG9uZSBmb3Igc3BlZWQuICovDQorCQlNQ0ZfSU5UQzBfSU5URlJDTCA9IDA7DQorCQl2VGFza1N3aXRjaENvbnRleHQoKTsNCisJcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCB1bFNhdmVkSW50ZXJydXB0TWFzayApOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9Db2RlV2Fycmlvci9Db2xkRmlyZV9WMi9wb3J0bWFjcm8uaCBiL3BvcnRhYmxlL0NvZGVXYXJyaW9yL0NvbGRGaXJlX1YyL3BvcnRtYWNyby5oCmluZGV4IGUyZWIwYWYuLjliYTE5ZGEgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0NvZGVXYXJyaW9yL0NvbGRGaXJlX1YyL3BvcnRtYWNyby5oCisrKyBiL3BvcnRhYmxlL0NvZGVXYXJyaW9yL0NvbGRGaXJlX1YyL3BvcnRtYWNyby5oCkBAIC0yNiwxMSArMjYsMTEgQEAKICAqLw0KIA0KICNpZm5kZWYgUE9SVE1BQ1JPX0gNCi0gICAgI2RlZmluZSBQT1JUTUFDUk9fSA0KKyNkZWZpbmUgUE9SVE1BQ1JPX0gNCiANCi0gICAgI2lmZGVmIF9fY3BsdXNwbHVzDQotICAgICAgICBleHRlcm4gIkMiIHsNCi0gICAgI2VuZGlmDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAqIFBvcnQgc3BlY2lmaWMgZGVmaW5pdGlvbnMuDQpAQCAtNDMsNzIgKzQzLDcyIEBACiAgKi8NCiANCiAvKiBUeXBlIGRlZmluaXRpb25zLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRDSEFSICAgICAgICAgIGNoYXINCi0gICAgI2RlZmluZSBwb3J0RkxPQVQgICAgICAgICBmbG9hdA0KLSAgICAjZGVmaW5lIHBvcnRET1VCTEUgICAgICAgIGRvdWJsZQ0KLSAgICAjZGVmaW5lIHBvcnRMT05HICAgICAgICAgIGxvbmcNCi0gICAgI2RlZmluZSBwb3J0U0hPUlQgICAgICAgICBzaG9ydA0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19UWVBFICAgIHVpbnQzMl90DQotICAgICNkZWZpbmUgcG9ydEJBU0VfVFlQRSAgICAgbG9uZw0KKyNkZWZpbmUgcG9ydENIQVIJCWNoYXINCisjZGVmaW5lIHBvcnRGTE9BVAkJZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUJCWRvdWJsZQ0KKyNkZWZpbmUgcG9ydExPTkcJCWxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVAkJc2hvcnQNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFCXVpbnQzMl90DQorI2RlZmluZSBwb3J0QkFTRV9UWVBFCWxvbmcNCiANCi0gICAgdHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSAgIFN0YWNrVHlwZV90Ow0KLSAgICB0eXBlZGVmIGxvbmcgICAgICAgICAgICAgQmFzZVR5cGVfdDsNCi0gICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nICAgIFVCYXNlVHlwZV90Ow0KK3R5cGVkZWYgcG9ydFNUQUNLX1RZUEUgU3RhY2tUeXBlX3Q7DQordHlwZWRlZiBsb25nIEJhc2VUeXBlX3Q7DQordHlwZWRlZiB1bnNpZ25lZCBsb25nIFVCYXNlVHlwZV90Ow0KIA0KLSAgICAjaWYgKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KLSAgICAgICAgdHlwZWRlZiB1aW50MTZfdCAgICAgVGlja1R5cGVfdDsNCi0gICAgICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmYNCi0gICAgI2Vsc2UNCi0gICAgICAgIHR5cGVkZWYgdWludDMyX3QgICAgIFRpY2tUeXBlX3Q7DQotICAgICAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQotICAgICNlbmRpZg0KKyNpZiggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCisJdHlwZWRlZiB1aW50MTZfdCBUaWNrVHlwZV90Ow0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQorI2Vsc2UNCisJdHlwZWRlZiB1aW50MzJfdCBUaWNrVHlwZV90Ow0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQorI2VuZGlmDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogSGFyZHdhcmUgc3BlY2lmaWNzLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVCAgICA0DQotICAgICNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSCAgICAgIC0xDQotICAgICNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TICAgICggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQorI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQJCQk0DQorI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RICQkJLTENCisjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUwkJCSggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQotICAgIHVpbnQzMl90IHVsUG9ydFNldElQTCggdWludDMyX3QgKTsNCi0gICAgI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgICAgdWxQb3J0U2V0SVBMKCBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgKQ0KLSAgICAjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpICAgICB1bFBvcnRTZXRJUEwoIDAgKQ0KK3VpbnQzMl90IHVsUG9ydFNldElQTCggdWludDMyX3QgKTsNCisjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKQl1bFBvcnRTZXRJUEwoIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSApDQorI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKQkJdWxQb3J0U2V0SVBMKCAwICkNCiANCiANCi0gICAgZXh0ZXJuIHZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICk7DQotICAgIGV4dGVybiB2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICk7DQotICAgICNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgICAgdlBvcnRFbnRlckNyaXRpY2FsKCkNCi0gICAgI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpICAgICB2UG9ydEV4aXRDcml0aWNhbCgpDQorZXh0ZXJuIHZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCisjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpCQl2UG9ydEVudGVyQ3JpdGljYWwoKQ0KKyNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKQkJCXZQb3J0RXhpdENyaXRpY2FsKCkNCiANCi0gICAgZXh0ZXJuIFVCYXNlVHlwZV90IHV4UG9ydFNldEludGVycnVwdE1hc2tGcm9tSVNSKCB2b2lkICk7DQotICAgIGV4dGVybiB2b2lkIHZQb3J0Q2xlYXJJbnRlcnJ1cHRNYXNrRnJvbUlTUiggVUJhc2VUeXBlX3QgKTsNCi0gICAgI2RlZmluZSBwb3J0U0VUX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsUG9ydFNldElQTCggY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkNCi0gICAgI2RlZmluZSBwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoIHV4U2F2ZWRTdGF0dXNSZWdpc3RlciApICAgIHVsUG9ydFNldElQTCggdXhTYXZlZFN0YXR1c1JlZ2lzdGVyICkNCitleHRlcm4gVUJhc2VUeXBlX3QgdXhQb3J0U2V0SW50ZXJydXB0TWFza0Zyb21JU1IoIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2UG9ydENsZWFySW50ZXJydXB0TWFza0Zyb21JU1IoIFVCYXNlVHlwZV90ICk7DQorI2RlZmluZSBwb3J0U0VUX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCkJdWxQb3J0U2V0SVBMKCBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgKQ0KKyNkZWZpbmUgcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCB1eFNhdmVkU3RhdHVzUmVnaXN0ZXIgKSB1bFBvcnRTZXRJUEwoIHV4U2F2ZWRTdGF0dXNSZWdpc3RlciApDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGFzayB1dGlsaXRpZXMuICovDQogDQotICAgICNkZWZpbmUgcG9ydE5PUCgpICAgICAgYXNtIHZvbGF0aWxlICggIm5vcCIgKQ0KKyNkZWZpbmUgcG9ydE5PUCgpCWFzbSB2b2xhdGlsZSAoIAkibm9wIiApDQogDQogLyogTm90ZSB0aGlzIHdpbGwgb3ZlcndyaXRlIGFsbCBvdGhlciBiaXRzIGluIHRoZSBmb3JjZSByZWdpc3RlciwgaXQgaXMgZG9uZSB0aGlzIHdheSBmb3Igc3BlZWQuICovDQotICAgICNkZWZpbmUgcG9ydFlJRUxEKCkgICAgTUNGX0lOVEMwX0lOVEZSQ0wgPSAoIDFVTCA8PCBjb25maWdZSUVMRF9JTlRFUlJVUFRfVkVDVE9SICk7IHBvcnROT1AoKTsgcG9ydE5PUCgpICAvKiAtMzIgYXMgd2UgYXJlIHVzaW5nIHRoZSBoaWdoIHdvcmQgb2YgdGhlIDY0Yml0IG1hc2suICovDQorI2RlZmluZSBwb3J0WUlFTEQoKQkJCU1DRl9JTlRDMF9JTlRGUkNMID0gKCAxVUwgPDwgY29uZmlnWUlFTERfSU5URVJSVVBUX1ZFQ1RPUiApOyBwb3J0Tk9QKCk7IHBvcnROT1AoKSAvKiAtMzIgYXMgd2UgYXJlIHVzaW5nIHRoZSBoaWdoIHdvcmQgb2YgdGhlIDY0Yml0IG1hc2suICovDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQotICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKSBfX2F0dHJpYnV0ZV9fKCAoIG5vcmV0dXJuICkgKQ0KLSAgICAjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgICAgICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKSBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0gICAgI2RlZmluZSBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHhTd2l0Y2hSZXF1aXJlZCApIFwNCi0gICAgaWYoIHhTd2l0Y2hSZXF1aXJlZCAhPSBwZEZBTFNFICkgICAgICAgICAgICAgICAgIFwNCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHBvcnRZSUVMRCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgfQ0KKyNkZWZpbmUgcG9ydEVORF9TV0lUQ0hJTkdfSVNSKCB4U3dpdGNoUmVxdWlyZWQgKQlpZiggeFN3aXRjaFJlcXVpcmVkICE9IHBkRkFMU0UgKQlcDQorCQkJCQkJCQkJCQkJCXsJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQlwb3J0WUlFTEQoKTsJCQkJCVwNCisJCQkJCQkJCQkJCQkJfQ0KIA0KIA0KLSAgICAjaWZkZWYgX19jcGx1c3BsdXMNCi0gICAgICAgIH0NCi0gICAgI2VuZGlmDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KIA0KICNlbmRpZiAvKiBQT1JUTUFDUk9fSCAqLw0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0NvZGVXYXJyaW9yL0hDUzEyL3BvcnQuYyBiL3BvcnRhYmxlL0NvZGVXYXJyaW9yL0hDUzEyL3BvcnQuYwppbmRleCA5MDY5ODUwLi5kNmQwMjk0IDEwMDY0NAotLS0gYS9wb3J0YWJsZS9Db2RlV2Fycmlvci9IQ1MxMi9wb3J0LmMKKysrIGIvcG9ydGFibGUvQ29kZVdhcnJpb3IvSENTMTIvcG9ydC5jCkBAIC0zMSwxMzkgKzMxLDEzNyBAQAogDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLSogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFibGUuaCBmb3IgdGhlIEhDUzEyIHBvcnQuDQotKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyAqIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBIQ1MxMiBwb3J0Lg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogDQogLyoNCi0gKiBDb25maWd1cmUgYSB0aW1lciB0byBnZW5lcmF0ZSB0aGUgUlRPUyB0aWNrIGF0IHRoZSBmcmVxdWVuY3kgc3BlY2lmaWVkDQorICogQ29uZmlndXJlIGEgdGltZXIgdG8gZ2VuZXJhdGUgdGhlIFJUT1MgdGljayBhdCB0aGUgZnJlcXVlbmN5IHNwZWNpZmllZCANCiAgKiB3aXRoaW4gRnJlZVJUT1NDb25maWcuaC4NCiAgKi8NCiBzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICk7DQogDQogLyogSW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZXMgaGF2ZSB0byBiZSBpbiBub24tYmFua2VkIG1lbW9yeSAtIGFzIGRvZXMgdGhlDQotICogc2NoZWR1bGVyIHN0YXJ0dXAgZnVuY3Rpb24uICovDQorc2NoZWR1bGVyIHN0YXJ0dXAgZnVuY3Rpb24uICovDQogI3ByYWdtYSBDT0RFX1NFRyBfX05FQVJfU0VHIE5PTl9CQU5LRUQNCiANCi0vKiBNYW51YWwgY29udGV4dCBzd2l0Y2ggZnVuY3Rpb24uICBUaGlzIGlzIHRoZSBTV0kgSVNSLiAqLw0KLXZvaWQgaW50ZXJydXB0IHZQb3J0WWllbGQoIHZvaWQgKTsNCisJLyogTWFudWFsIGNvbnRleHQgc3dpdGNoIGZ1bmN0aW9uLiAgVGhpcyBpcyB0aGUgU1dJIElTUi4gKi8NCisJdm9pZCBpbnRlcnJ1cHQgdlBvcnRZaWVsZCggdm9pZCApOw0KIA0KLS8qIFRpY2sgY29udGV4dCBzd2l0Y2ggZnVuY3Rpb24uICBUaGlzIGlzIHRoZSB0aW1lciBJU1IuICovDQotdm9pZCBpbnRlcnJ1cHQgdlBvcnRUaWNrSW50ZXJydXB0KCB2b2lkICk7DQotDQotLyogU2ltcGx5IGNhbGxlZCBieSB4UG9ydFN0YXJ0U2NoZWR1bGVyKCkuICB4UG9ydFN0YXJ0U2NoZWR1bGVyKCkgZG9lcyBub3QNCi0gKiBzdGFydCB0aGUgc2NoZWR1bGVyIGRpcmVjdGx5IGJlY2F1c2UgdGhlIGhlYWRlciBmaWxlIGNvbnRhaW5pbmcgdGhlDQotICogeFBvcnRTdGFydFNjaGVkdWxlcigpIHByb3RvdHlwZSBpcyBwYXJ0IG9mIHRoZSBjb21tb24ga2VybmVsIGNvZGUsIGFuZA0KLSAqIHRoZXJlZm9yZSBjYW5ub3QgdXNlIHRoZSBDT0RFX1NFRyBwcmFnbWEuICovDQotc3RhdGljIEJhc2VUeXBlX3QgeEJhbmtlZFN0YXJ0U2NoZWR1bGVyKCB2b2lkICk7DQorCS8qIFRpY2sgY29udGV4dCBzd2l0Y2ggZnVuY3Rpb24uICBUaGlzIGlzIHRoZSB0aW1lciBJU1IuICovDQorCXZvaWQgaW50ZXJydXB0IHZQb3J0VGlja0ludGVycnVwdCggdm9pZCApOw0KKwkNCisJLyogU2ltcGx5IGNhbGxlZCBieSB4UG9ydFN0YXJ0U2NoZWR1bGVyKCkuICB4UG9ydFN0YXJ0U2NoZWR1bGVyKCkgZG9lcyBub3QNCisJc3RhcnQgdGhlIHNjaGVkdWxlciBkaXJlY3RseSBiZWNhdXNlIHRoZSBoZWFkZXIgZmlsZSBjb250YWluaW5nIHRoZSANCisJeFBvcnRTdGFydFNjaGVkdWxlcigpIHByb3RvdHlwZSBpcyBwYXJ0IG9mIHRoZSBjb21tb24ga2VybmVsIGNvZGUsIGFuZCANCisJdGhlcmVmb3JlIGNhbm5vdCB1c2UgdGhlIENPREVfU0VHIHByYWdtYS4gKi8NCisJc3RhdGljIEJhc2VUeXBlX3QgeEJhbmtlZFN0YXJ0U2NoZWR1bGVyKCB2b2lkICk7DQogDQogI3ByYWdtYSBDT0RFX1NFRyBERUZBVUxUDQogDQotLyogQ2FsbHMgdG8gcG9ydEVOVEVSX0NSSVRJQ0FMKCkgY2FuIGJlIG5lc3RlZC4gIFdoZW4gdGhleSBhcmUgbmVzdGVkIHRoZQ0KLSAqIGNyaXRpY2FsIHNlY3Rpb24gc2hvdWxkIG5vdCBiZSBsZWZ0IChpLmUuIGludGVycnVwdHMgc2hvdWxkIG5vdCBiZSByZS1lbmFibGVkKQ0KLSAqIHVudGlsIHRoZSBuZXN0aW5nIGRlcHRoIHJlYWNoZXMgMC4gIFRoaXMgdmFyaWFibGUgc2ltcGx5IHRyYWNrcyB0aGUgbmVzdGluZw0KLSAqIGRlcHRoLiAgRWFjaCB0YXNrIG1haW50YWlucyBpdCdzIG93biBjcml0aWNhbCBuZXN0aW5nIGRlcHRoIHZhcmlhYmxlIHNvDQotICogdXhDcml0aWNhbE5lc3RpbmcgaXMgc2F2ZWQgYW5kIHJlc3RvcmVkIGZyb20gdGhlIHRhc2sgc3RhY2sgZHVyaW5nIGEgY29udGV4dA0KLSAqIHN3aXRjaC4gKi8NCisvKiBDYWxscyB0byBwb3J0RU5URVJfQ1JJVElDQUwoKSBjYW4gYmUgbmVzdGVkLiAgV2hlbiB0aGV5IGFyZSBuZXN0ZWQgdGhlIA0KK2NyaXRpY2FsIHNlY3Rpb24gc2hvdWxkIG5vdCBiZSBsZWZ0IChpLmUuIGludGVycnVwdHMgc2hvdWxkIG5vdCBiZSByZS1lbmFibGVkKQ0KK3VudGlsIHRoZSBuZXN0aW5nIGRlcHRoIHJlYWNoZXMgMC4gIFRoaXMgdmFyaWFibGUgc2ltcGx5IHRyYWNrcyB0aGUgbmVzdGluZyANCitkZXB0aC4gIEVhY2ggdGFzayBtYWludGFpbnMgaXQncyBvd24gY3JpdGljYWwgbmVzdGluZyBkZXB0aCB2YXJpYWJsZSBzbyANCit1eENyaXRpY2FsTmVzdGluZyBpcyBzYXZlZCBhbmQgcmVzdG9yZWQgZnJvbSB0aGUgdGFzayBzdGFjayBkdXJpbmcgYSBjb250ZXh0DQorc3dpdGNoLiAqLw0KIHZvbGF0aWxlIFVCYXNlVHlwZV90IHV4Q3JpdGljYWxOZXN0aW5nID0gMHhmZjsNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0vKg0KLSAqIFNlZSBoZWFkZXIgZmlsZSBmb3IgZGVzY3JpcHRpb24uDQorLyogDQorICogU2VlIGhlYWRlciBmaWxlIGZvciBkZXNjcmlwdGlvbi4gDQogICovDQotU3RhY2tUeXBlX3QgKiBweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICogcHhUb3BPZlN0YWNrLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYXNrRnVuY3Rpb25fdCBweENvZGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KK1N0YWNrVHlwZV90ICpweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICpweFRvcE9mU3RhY2ssIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzICkNCiB7DQotICAgIC8qDQotICAgICAqICBQbGFjZSBhIGZldyBieXRlcyBvZiBrbm93biB2YWx1ZXMgb24gdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suDQotICAgICAqICBUaGlzIGNhbiBiZSB1bmNvbW1lbnRlZCB0byBwcm92aWRlIHVzZWZ1bCBzdGFjayBtYXJrZXJzIHdoZW4gZGVidWdnaW5nLg0KLSAgICAgKg0KLSAgICAgKiBweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMTsNCi0gICAgICogIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgKiBweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgyMjsNCi0gICAgICogIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgKiBweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgzMzsNCi0gICAgICogIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgKi8NCisJLyogDQorCQlQbGFjZSBhIGZldyBieXRlcyBvZiBrbm93biB2YWx1ZXMgb24gdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suDQorCQlUaGlzIGNhbiBiZSB1bmNvbW1lbnRlZCB0byBwcm92aWRlIHVzZWZ1bCBzdGFjayBtYXJrZXJzIHdoZW4gZGVidWdnaW5nLg0KKw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDExOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MjI7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgzMzsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkqLw0KIA0KIA0KIA0KLSAgICAvKiBTZXR1cCB0aGUgaW5pdGlhbCBzdGFjayBvZiB0aGUgdGFzay4gIFRoZSBzdGFjayBpcyBzZXQgZXhhY3RseSBhcw0KLSAgICAgKiBleHBlY3RlZCBieSB0aGUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpIG1hY3JvLiAgSW4gdGhpcyBjYXNlIHRoZSBzdGFjayBhcw0KLSAgICAgKiBleHBlY3RlZCBieSB0aGUgSENTMTIgUlRJIGluc3RydWN0aW9uLiAqLw0KKwkvKiBTZXR1cCB0aGUgaW5pdGlhbCBzdGFjayBvZiB0aGUgdGFzay4gIFRoZSBzdGFjayBpcyBzZXQgZXhhY3RseSBhcyANCisJZXhwZWN0ZWQgYnkgdGhlIHBvcnRSRVNUT1JFX0NPTlRFWFQoKSBtYWNyby4gIEluIHRoaXMgY2FzZSB0aGUgc3RhY2sgYXMNCisJZXhwZWN0ZWQgYnkgdGhlIEhDUzEyIFJUSSBpbnN0cnVjdGlvbi4gKi8NCiANCiANCi0gICAgLyogVGhlIGFkZHJlc3Mgb2YgdGhlIHRhc2sgZnVuY3Rpb24gaXMgcGxhY2VkIGluIHRoZSBzdGFjayBieXRlIGF0IGEgdGltZS4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAqKCAoICggU3RhY2tUeXBlX3QgKiApICggJnB4Q29kZSApICkgKyAxICk7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApICooICggKCBTdGFja1R5cGVfdCAqICkgKCAmcHhDb2RlICkgKSArIDAgKTsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIFRoZSBhZGRyZXNzIG9mIHRoZSB0YXNrIGZ1bmN0aW9uIGlzIHBsYWNlZCBpbiB0aGUgc3RhY2sgYnl0ZSBhdCBhIHRpbWUuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgKiggKChTdGFja1R5cGVfdCAqKSAoJnB4Q29kZSkgKSArIDEgKTsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgKiggKChTdGFja1R5cGVfdCAqKSAoJnB4Q29kZSkgKSArIDAgKTsNCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgIC8qIE5leHQgYXJlIGFsbCB0aGUgcmVnaXN0ZXJzIHRoYXQgZm9ybSBwYXJ0IG9mIHRoZSB0YXNrIGNvbnRleHQuICovDQorCS8qIE5leHQgYXJlIGFsbCB0aGUgcmVnaXN0ZXJzIHRoYXQgZm9ybSBwYXJ0IG9mIHRoZSB0YXNrIGNvbnRleHQuICovDQogDQotICAgIC8qIFkgcmVnaXN0ZXIgKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweGZmOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweGVlOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJLyogWSByZWdpc3RlciAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4ZmY7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4ZWU7DQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBYIHJlZ2lzdGVyICovDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhkZDsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhjYzsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIFggcmVnaXN0ZXIgKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweGRkOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweGNjOw0KKwlweFRvcE9mU3RhY2stLTsNCisgDQorCS8qIEEgcmVnaXN0ZXIgY29udGFpbnMgcGFyYW1ldGVyIGhpZ2ggYnl0ZS4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAqKCAoKFN0YWNrVHlwZV90ICopICgmcHZQYXJhbWV0ZXJzKSApICsgMCApOw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgLyogQSByZWdpc3RlciBjb250YWlucyBwYXJhbWV0ZXIgaGlnaCBieXRlLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApICooICggKCBTdGFja1R5cGVfdCAqICkgKCAmcHZQYXJhbWV0ZXJzICkgKSArIDAgKTsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIEIgcmVnaXN0ZXIgY29udGFpbnMgcGFyYW1ldGVyIGxvdyBieXRlLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApICooICgoU3RhY2tUeXBlX3QgKikgKCZwdlBhcmFtZXRlcnMpICkgKyAxICk7DQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBCIHJlZ2lzdGVyIGNvbnRhaW5zIHBhcmFtZXRlciBsb3cgYnl0ZS4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAqKCAoICggU3RhY2tUeXBlX3QgKiApICggJnB2UGFyYW1ldGVycyApICkgKyAxICk7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkvKiBDQ1I6IE5vdGUgdGhhdCB3aGVuIHRoZSB0YXNrIHN0YXJ0cyBpbnRlcnJ1cHRzIHdpbGwgYmUgZW5hYmxlZCBzaW5jZQ0KKwkiSSIgYml0IG9mIENDUiBpcyBjbGVhcmVkICovDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMDsNCisJcHhUb3BPZlN0YWNrLS07DQorCQ0KKwkjaWZkZWYgQkFOS0VEX01PREVMDQorCQkvKiBUaGUgcGFnZSBvZiB0aGUgdGFzay4gKi8NCisJCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgKCAoIGludCApIHB4Q29kZSApOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCSNlbmRpZg0KKwkNCisJLyogRmluYWxseSB0aGUgY3JpdGljYWwgbmVzdGluZyBkZXB0aCBpcyBpbml0aWFsaXNlZCB3aXRoIDAgKG5vdCB3aXRoaW4NCisJYSBjcml0aWNhbCBzZWN0aW9uKS4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAwOw0KIA0KLSAgICAvKiBDQ1I6IE5vdGUgdGhhdCB3aGVuIHRoZSB0YXNrIHN0YXJ0cyBpbnRlcnJ1cHRzIHdpbGwgYmUgZW5hYmxlZCBzaW5jZQ0KLSAgICAgKiAiSSIgYml0IG9mIENDUiBpcyBjbGVhcmVkICovDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMDsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQotDQotICAgICNpZmRlZiBCQU5LRURfTU9ERUwNCi0gICAgICAgIC8qIFRoZSBwYWdlIG9mIHRoZSB0YXNrLiAqLw0KLSAgICAgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAoICggaW50ICkgcHhDb2RlICk7DQotICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgI2VuZGlmDQotDQotICAgIC8qIEZpbmFsbHkgdGhlIGNyaXRpY2FsIG5lc3RpbmcgZGVwdGggaXMgaW5pdGlhbGlzZWQgd2l0aCAwIChub3Qgd2l0aGluDQotICAgICAqIGEgY3JpdGljYWwgc2VjdGlvbikuICovDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMDsNCi0NCi0gICAgcmV0dXJuIHB4VG9wT2ZTdGFjazsNCisJcmV0dXJuIHB4VG9wT2ZTdGFjazsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogdm9pZCB2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApDQogew0KLSAgICAvKiBJdCBpcyB1bmxpa2VseSB0aGF0IHRoZSBIQ1MxMiBwb3J0IHdpbGwgZ2V0IHN0b3BwZWQuICovDQorCS8qIEl0IGlzIHVubGlrZWx5IHRoYXQgdGhlIEhDUzEyIHBvcnQgd2lsbCBnZXQgc3RvcHBlZC4gKi8NCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogc3RhdGljIHZvaWQgcHJ2U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApDQogew0KLSAgICBUaWNrVGltZXJfU2V0RnJlcUh6KCBjb25maWdUSUNLX1JBVEVfSFogKTsNCi0gICAgVGlja1RpbWVyX0VuYWJsZSgpOw0KKwlUaWNrVGltZXJfU2V0RnJlcUh6KCBjb25maWdUSUNLX1JBVEVfSFogKTsNCisJVGlja1RpbWVyX0VuYWJsZSgpOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBCYXNlVHlwZV90IHhQb3J0U3RhcnRTY2hlZHVsZXIoIHZvaWQgKQ0KIHsNCi0gICAgLyogeFBvcnRTdGFydFNjaGVkdWxlcigpIGRvZXMgbm90IHN0YXJ0IHRoZSBzY2hlZHVsZXIgZGlyZWN0bHkgYmVjYXVzZQ0KLSAgICAgKiB0aGUgaGVhZGVyIGZpbGUgY29udGFpbmluZyB0aGUgeFBvcnRTdGFydFNjaGVkdWxlcigpIHByb3RvdHlwZSBpcyBwYXJ0DQotICAgICAqIG9mIHRoZSBjb21tb24ga2VybmVsIGNvZGUsIGFuZCB0aGVyZWZvcmUgY2Fubm90IHVzZSB0aGUgQ09ERV9TRUcgcHJhZ21hLg0KLSAgICAgKiBJbnN0ZWFkIGl0IHNpbXBseSBjYWxscyB0aGUgbG9jYWxseSBkZWZpbmVkIHhCYW5rZWRTdGFydFNjaGVkdWxlcigpIC0NCi0gICAgICogd2hpY2ggZG9lcyB1c2UgdGhlIENPREVfU0VHIHByYWdtYS4gKi8NCisJLyogeFBvcnRTdGFydFNjaGVkdWxlcigpIGRvZXMgbm90IHN0YXJ0IHRoZSBzY2hlZHVsZXIgZGlyZWN0bHkgYmVjYXVzZSANCisJdGhlIGhlYWRlciBmaWxlIGNvbnRhaW5pbmcgdGhlIHhQb3J0U3RhcnRTY2hlZHVsZXIoKSBwcm90b3R5cGUgaXMgcGFydCANCisJb2YgdGhlIGNvbW1vbiBrZXJuZWwgY29kZSwgYW5kIHRoZXJlZm9yZSBjYW5ub3QgdXNlIHRoZSBDT0RFX1NFRyBwcmFnbWEuIA0KKwlJbnN0ZWFkIGl0IHNpbXBseSBjYWxscyB0aGUgbG9jYWxseSBkZWZpbmVkIHhCYW5rZWRTdGFydFNjaGVkdWxlcigpIC0gDQorCXdoaWNoIGRvZXMgdXNlIHRoZSBDT0RFX1NFRyBwcmFnbWEuICovDQogDQotICAgIHJldHVybiB4QmFua2VkU3RhcnRTY2hlZHVsZXIoKTsNCisJcmV0dXJuIHhCYW5rZWRTdGFydFNjaGVkdWxlcigpOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCkBAIC0xNzEsMTggKzE2OSwxOCBAQAogDQogc3RhdGljIEJhc2VUeXBlX3QgeEJhbmtlZFN0YXJ0U2NoZWR1bGVyKCB2b2lkICkNCiB7DQotICAgIC8qIENvbmZpZ3VyZSB0aGUgdGltZXIgdGhhdCB3aWxsIGdlbmVyYXRlIHRoZSBSVE9TIHRpY2suICBJbnRlcnJ1cHRzIGFyZQ0KLSAgICAgKiBkaXNhYmxlZCB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLiAqLw0KLSAgICBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCk7DQorCS8qIENvbmZpZ3VyZSB0aGUgdGltZXIgdGhhdCB3aWxsIGdlbmVyYXRlIHRoZSBSVE9TIHRpY2suICBJbnRlcnJ1cHRzIGFyZQ0KKwlkaXNhYmxlZCB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLiAqLw0KKwlwcnZTZXR1cFRpbWVySW50ZXJydXB0KCk7DQogDQotICAgIC8qIFJlc3RvcmUgdGhlIGNvbnRleHQgb2YgdGhlIGZpcnN0IHRhc2suICovDQotICAgIHBvcnRSRVNUT1JFX0NPTlRFWFQoKTsNCisJLyogUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgZmlyc3QgdGFzay4gKi8NCisJcG9ydFJFU1RPUkVfQ09OVEVYVCgpOw0KIA0KLSAgICAvKiBTaW11bGF0ZSB0aGUgZW5kIG9mIGFuIGludGVycnVwdCB0byBzdGFydCB0aGUgc2NoZWR1bGVyIG9mZi4gKi8NCi0gICAgX19hc20oICJydGkiICk7DQorCS8qIFNpbXVsYXRlIHRoZSBlbmQgb2YgYW4gaW50ZXJydXB0IHRvIHN0YXJ0IHRoZSBzY2hlZHVsZXIgb2ZmLiAqLw0KKwlfX2FzbSggInJ0aSIgKTsNCiANCi0gICAgLyogU2hvdWxkIG5vdCBnZXQgaGVyZSEgKi8NCi0gICAgcmV0dXJuIHBkRkFMU0U7DQorCS8qIFNob3VsZCBub3QgZ2V0IGhlcmUhICovDQorCXJldHVybiBwZEZBTFNFOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCkBAIC0xOTYsNDIgKzE5NCw0NCBAQAogICovDQogdm9pZCBpbnRlcnJ1cHQgdlBvcnRZaWVsZCggdm9pZCApDQogew0KLSAgICBwb3J0U0FWRV9DT05URVhUKCk7DQotICAgIHZUYXNrU3dpdGNoQ29udGV4dCgpOw0KLSAgICBwb3J0UkVTVE9SRV9DT05URVhUKCk7DQorCXBvcnRTQVZFX0NPTlRFWFQoKTsNCisJdlRhc2tTd2l0Y2hDb250ZXh0KCk7DQorCXBvcnRSRVNUT1JFX0NPTlRFWFQoKTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyoNCi0gKiBSVE9TIHRpY2sgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZS4gIElmIHRoZSBjb29wZXJhdGl2ZSBzY2hlZHVsZXIgaXMNCi0gKiBiZWluZyB1c2VkIHRoZW4gdGhpcyBzaW1wbHkgaW5jcmVtZW50cyB0aGUgdGljayBjb3VudC4gIElmIHRoZQ0KKyAqIFJUT1MgdGljayBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lLiAgSWYgdGhlIGNvb3BlcmF0aXZlIHNjaGVkdWxlciBpcyANCisgKiBiZWluZyB1c2VkIHRoZW4gdGhpcyBzaW1wbHkgaW5jcmVtZW50cyB0aGUgdGljayBjb3VudC4gIElmIHRoZSANCiAgKiBwcmVlbXB0aXZlIHNjaGVkdWxlciBpcyBiZWluZyB1c2VkIGEgY29udGV4dCBzd2l0Y2ggY2FuIG9jY3VyLg0KICAqLw0KIHZvaWQgaW50ZXJydXB0IHZQb3J0VGlja0ludGVycnVwdCggdm9pZCApDQogew0KLSAgICAjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIC8qIEEgY29udGV4dCBzd2l0Y2ggbWlnaHQgaGFwcGVuIHNvIHNhdmUgdGhlIGNvbnRleHQuICovDQotICAgICAgICAgICAgcG9ydFNBVkVfQ09OVEVYVCgpOw0KKwkjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMQ0KKwl7DQorCQkvKiBBIGNvbnRleHQgc3dpdGNoIG1pZ2h0IGhhcHBlbiBzbyBzYXZlIHRoZSBjb250ZXh0LiAqLw0KKwkJcG9ydFNBVkVfQ09OVEVYVCgpOw0KIA0KLSAgICAgICAgICAgIC8qIEluY3JlbWVudCB0aGUgdGljayAuLi4gKi8NCi0gICAgICAgICAgICBpZiggeFRhc2tJbmNyZW1lbnRUaWNrKCkgIT0gcGRGQUxTRSApDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICB2VGFza1N3aXRjaENvbnRleHQoKTsNCi0gICAgICAgICAgICB9DQorCQkvKiBJbmNyZW1lbnQgdGhlIHRpY2sgLi4uICovDQorCQlpZiggeFRhc2tJbmNyZW1lbnRUaWNrKCkgIT0gcGRGQUxTRSApDQorCQl7DQorCQkJdlRhc2tTd2l0Y2hDb250ZXh0KCk7DQorCQl9DQogDQotICAgICAgICAgICAgVEZMRzEgPSAxOw0KKwkJVEZMRzEgPSAxOwkJCQkJCQkJICAgDQogDQotICAgICAgICAgICAgLyogUmVzdG9yZSB0aGUgY29udGV4dCBvZiBhIHRhc2sgLSB3aGljaCBtYXkgYmUgYSBkaWZmZXJlbnQgdGFzaw0KLSAgICAgICAgICAgICAqIHRvIHRoYXQgaW50ZXJydXB0ZWQuICovDQotICAgICAgICAgICAgcG9ydFJFU1RPUkVfQ09OVEVYVCgpOw0KLSAgICAgICAgfQ0KLSAgICAjZWxzZSAvKiBpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAxICovDQotICAgICAgICB7DQotICAgICAgICAgICAgeFRhc2tJbmNyZW1lbnRUaWNrKCk7DQotICAgICAgICAgICAgVEZMRzEgPSAxOw0KLSAgICAgICAgfQ0KLSAgICAjZW5kaWYgLyogaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMSAqLw0KKwkJLyogUmVzdG9yZSB0aGUgY29udGV4dCBvZiBhIHRhc2sgLSB3aGljaCBtYXkgYmUgYSBkaWZmZXJlbnQgdGFzaw0KKwkJdG8gdGhhdCBpbnRlcnJ1cHRlZC4gKi8NCisJCXBvcnRSRVNUT1JFX0NPTlRFWFQoKTsJDQorCX0NCisJI2Vsc2UNCisJew0KKwkJeFRhc2tJbmNyZW1lbnRUaWNrKCk7DQorCQlURkxHMSA9IDE7DQorCX0NCisJI2VuZGlmDQogfQ0KIA0KICNwcmFnbWEgQ09ERV9TRUcgREVGQVVMVA0KKw0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0NvZGVXYXJyaW9yL0hDUzEyL3BvcnRtYWNyby5oIGIvcG9ydGFibGUvQ29kZVdhcnJpb3IvSENTMTIvcG9ydG1hY3JvLmgKaW5kZXggMDVmYTY1ZS4uZjRiZTI1NiAxMDA2NDQKLS0tIGEvcG9ydGFibGUvQ29kZVdhcnJpb3IvSENTMTIvcG9ydG1hY3JvLmgKKysrIGIvcG9ydGFibGUvQ29kZVdhcnJpb3IvSENTMTIvcG9ydG1hY3JvLmgKQEAgLTQwLDM4ICs0MCwzOCBAQAogICovDQogDQogLyogVHlwZSBkZWZpbml0aW9ucy4gKi8NCi0jZGVmaW5lIHBvcnRDSEFSICAgICAgICAgIGNoYXINCi0jZGVmaW5lIHBvcnRGTE9BVCAgICAgICAgIGZsb2F0DQotI2RlZmluZSBwb3J0RE9VQkxFICAgICAgICBkb3VibGUNCi0jZGVmaW5lIHBvcnRMT05HICAgICAgICAgIGxvbmcNCi0jZGVmaW5lIHBvcnRTSE9SVCAgICAgICAgIHNob3J0DQotI2RlZmluZSBwb3J0U1RBQ0tfVFlQRSAgICB1aW50OF90DQotI2RlZmluZSBwb3J0QkFTRV9UWVBFICAgICBjaGFyDQorI2RlZmluZSBwb3J0Q0hBUgkJY2hhcg0KKyNkZWZpbmUgcG9ydEZMT0FUCQlmbG9hdA0KKyNkZWZpbmUgcG9ydERPVUJMRQkJZG91YmxlDQorI2RlZmluZSBwb3J0TE9ORwkJbG9uZw0KKyNkZWZpbmUgcG9ydFNIT1JUCQlzaG9ydA0KKyNkZWZpbmUgcG9ydFNUQUNLX1RZUEUJdWludDhfdA0KKyNkZWZpbmUgcG9ydEJBU0VfVFlQRQljaGFyDQogDQotdHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSAgIFN0YWNrVHlwZV90Ow0KLXR5cGVkZWYgc2lnbmVkIGNoYXIgICAgICBCYXNlVHlwZV90Ow0KLXR5cGVkZWYgdW5zaWduZWQgY2hhciAgICBVQmFzZVR5cGVfdDsNCit0eXBlZGVmIHBvcnRTVEFDS19UWVBFIFN0YWNrVHlwZV90Ow0KK3R5cGVkZWYgc2lnbmVkIGNoYXIgQmFzZVR5cGVfdDsNCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgVUJhc2VUeXBlX3Q7DQogDQotI2lmICggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCi0gICAgdHlwZWRlZiB1aW50MTZfdCAgICAgVGlja1R5cGVfdDsNCi0gICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICggVGlja1R5cGVfdCApIDB4ZmZmZg0KKyNpZiggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCisJdHlwZWRlZiB1aW50MTZfdCBUaWNrVHlwZV90Ow0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQogI2Vsc2UNCi0gICAgdHlwZWRlZiB1aW50MzJfdCAgICAgVGlja1R5cGVfdDsNCi0gICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTA0KKwl0eXBlZGVmIHVpbnQzMl90IFRpY2tUeXBlX3Q7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwNCiAjZW5kaWYNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBIYXJkd2FyZSBzcGVjaWZpY3MuICovDQotI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQgICAgMQ0KLSNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSCAgICAgICggLTEgKQ0KLSNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TICAgICggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQotI2RlZmluZSBwb3J0WUlFTEQoKSAgICBfX2FzbSggInN3aSIgKTsNCi0jZGVmaW5lIHBvcnROT1AoKSAgICAgIF9fYXNtKCAibm9wIiApOw0KKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UCQkJMQ0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJCSggLTEgKQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TCQkJKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCisjZGVmaW5lIHBvcnRZSUVMRCgpCQkJCQlfX2FzbSggInN3aSIgKTsNCisjZGVmaW5lIHBvcnROT1AoKQkJCQkJX19hc20oICJub3AiICk7DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogQ3JpdGljYWwgc2VjdGlvbiBoYW5kbGluZy4gKi8NCi0jZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpICAgICBfX2FzbSggImNsaSIgKQ0KLSNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpICAgIF9fYXNtKCAic2VpIiApDQorI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKQkJCQlfX2FzbSggImNsaSIgKQ0KKyNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpCQkJX19hc20oICJzZWkiICkNCiANCiAvKg0KICAqIERpc2FibGUgaW50ZXJydXB0cyBiZWZvcmUgaW5jcmVtZW50aW5nIHRoZSBjb3VudCBvZiBjcml0aWNhbCBzZWN0aW9uIG5lc3RpbmcuDQpAQCAtNzksMjkgKzc5LDI5IEBACiAgKiByZS1lbmFibGVkLiAgT25jZSBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB0aGUgbmVzdGluZyBjb3VudCBjYW4gYmUgYWNjZXNzZWQNCiAgKiBkaXJlY3RseS4gIEVhY2ggdGFzayBtYWludGFpbnMgaXRzIG93biBuZXN0aW5nIGNvdW50Lg0KICAqLw0KLSNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGV4dGVybiB2b2xhdGlsZSBVQmFzZVR5cGVfdCB1eENyaXRpY2FsTmVzdGluZzsgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7ICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHV4Q3JpdGljYWxOZXN0aW5nKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB9DQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKSAgCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJXA0KKwlleHRlcm4gdm9sYXRpbGUgVUJhc2VUeXBlX3QgdXhDcml0aWNhbE5lc3Rpbmc7CVwNCisJCQkJCQkJCQkJCQkJCQkJXA0KKwlwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7CQkJCQkJCQkJXA0KKwl1eENyaXRpY2FsTmVzdGluZysrOwkJCQkJCQkJCQlcDQorfQ0KIA0KIC8qDQogICogSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgc28gd2UgY2FuIGFjY2VzcyB0aGUgbmVzdGluZyBjb3VudCBkaXJlY3RseS4gIElmIHRoZQ0KICAqIG5lc3RpbmcgaXMgZm91bmQgdG8gYmUgMCAobm8gbmVzdGluZykgdGhlbiB3ZSBhcmUgbGVhdmluZyB0aGUgY3JpdGljYWwNCiAgKiBzZWN0aW9uIGFuZCBpbnRlcnJ1cHRzIGNhbiBiZSByZS1lbmFibGVkLg0KICAqLw0KLSNkZWZpbmUgIHBvcnRFWElUX0NSSVRJQ0FMKCkgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGV4dGVybiB2b2xhdGlsZSBVQmFzZVR5cGVfdCB1eENyaXRpY2FsTmVzdGluZzsgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICB1eENyaXRpY2FsTmVzdGluZy0tOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGlmKCB1eENyaXRpY2FsTmVzdGluZyA9PSAwICkgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7ICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB9DQorI2RlZmluZSAgcG9ydEVYSVRfQ1JJVElDQUwoKQkJCQkJCQkJCVwNCit7CQkJCQkJCQkJCQkJCQkJCVwNCisJZXh0ZXJuIHZvbGF0aWxlIFVCYXNlVHlwZV90IHV4Q3JpdGljYWxOZXN0aW5nOwlcDQorCQkJCQkJCQkJCQkJCQkJCVwNCisJdXhDcml0aWNhbE5lc3RpbmctLTsJCQkJCQkJCQkJXA0KKwlpZiggdXhDcml0aWNhbE5lc3RpbmcgPT0gMCApCQkJCQkJCQlcDQorCXsJCQkJCQkJCQkJCQkJCQlcDQorCQlwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKTsJCQkJCQkJCVwNCisJfQkJCQkJCQkJCQkJCQkJCVwNCit9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGFzayB1dGlsaXRpZXMuICovDQpAQCAtMTE3LDcxICsxMTcsNzAgQEAKICAqLw0KIA0KICNpZmRlZiBCQU5LRURfTU9ERUwNCisJLyoNCisJICogTG9hZCB0aGUgc3RhY2sgcG9pbnRlciBmb3IgdGhlIHRhc2ssIHRoZW4gcHVsbCB0aGUgY3JpdGljYWwgbmVzdGluZw0KKwkgKiBjb3VudCBhbmQgUFBBR0UgcmVnaXN0ZXIgZnJvbSB0aGUgc3RhY2suICBUaGUgcmVtYWlucyBvZiB0aGUNCisJICogY29udGV4dCBhcmUgcmVzdG9yZWQgYnkgdGhlIFJUSSBpbnN0cnVjdGlvbi4NCisJICovDQorCSNkZWZpbmUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpCQkJCQkJCQkJXA0KKwl7CQkJCQkJCQkJCQkJCQkJCVwNCisJCWV4dGVybiB2b2xhdGlsZSB2b2lkICogcHhDdXJyZW50VENCOwkJCQkJCVwNCisJCWV4dGVybiB2b2xhdGlsZSBVQmFzZVR5cGVfdCB1eENyaXRpY2FsTmVzdGluZzsJXA0KKwkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJX19hc20oICJsZHggcHhDdXJyZW50VENCIiApOwkJCQkJCQkJXA0KKwkJX19hc20oICJsZHMgMCwgeCIgKTsJCQkJCQkJCQkJXA0KKwkJX19hc20oICJwdWxhIiApOwkJCQkJCQkJCQkJXA0KKwkJX19hc20oICJzdGFhIHV4Q3JpdGljYWxOZXN0aW5nIiApOwkJCQkJCQlcDQorCQlfX2FzbSggInB1bGEiICk7CQkJCQkJCQkJCQlcDQorCQlfX2FzbSggInN0YWEgMHgzMCIgKTsgLyogMHgzMCA9IFBQQUdFICovCQkJCQlcDQorCX0NCiANCi0vKg0KLSAqIExvYWQgdGhlIHN0YWNrIHBvaW50ZXIgZm9yIHRoZSB0YXNrLCB0aGVuIHB1bGwgdGhlIGNyaXRpY2FsIG5lc3RpbmcNCi0gKiBjb3VudCBhbmQgUFBBR0UgcmVnaXN0ZXIgZnJvbSB0aGUgc3RhY2suICBUaGUgcmVtYWlucyBvZiB0aGUNCi0gKiBjb250ZXh0IGFyZSByZXN0b3JlZCBieSB0aGUgUlRJIGluc3RydWN0aW9uLg0KLSAqLw0KLSAgICAjZGVmaW5lIHBvcnRSRVNUT1JFX0NPTlRFWFQoKSAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGV4dGVybiB2b2xhdGlsZSB2b2lkICogcHhDdXJyZW50VENCOyAgICAgICAgICAgXA0KLSAgICAgICAgZXh0ZXJuIHZvbGF0aWxlIFVCYXNlVHlwZV90IHV4Q3JpdGljYWxOZXN0aW5nOyBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIF9fYXNtKCAibGR4IHB4Q3VycmVudFRDQiIgKTsgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgX19hc20oICJsZHMgMCwgeCIgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBfX2FzbSggInB1bGEiICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIF9fYXNtKCAic3RhYSB1eENyaXRpY2FsTmVzdGluZyIgKTsgICAgICAgICAgICAgXA0KLSAgICAgICAgX19hc20oICJwdWxhIiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBfX2FzbSggInN0YWEgMHgzMCIgKTsgLyogMHgzMCA9IFBQQUdFICovICAgICAgIFwNCi0gICAgfQ0KKwkvKg0KKwkgKiBCeSB0aGUgdGltZSB0aGlzIG1hY3JvIGlzIGNhbGxlZCB0aGUgcHJvY2Vzc29yIGhhcyBhbHJlYWR5IHN0YWNrZWQgdGhlDQorCSAqIHJlZ2lzdGVycy4gIFNpbXBseSBzdGFjayB0aGUgbmVzdGluZyBjb3VudCBhbmQgUFBBR0UgdmFsdWUsIHRoZW4gc2F2ZQ0KKwkgKiB0aGUgdGFzayBzdGFjayBwb2ludGVyLg0KKwkgKi8NCisJI2RlZmluZSBwb3J0U0FWRV9DT05URVhUKCkJCQkJCQkJCQkJXA0KKwl7CQkJCQkJCQkJCQkJCQkJCVwNCisJCWV4dGVybiB2b2xhdGlsZSB2b2lkICogcHhDdXJyZW50VENCOwkJCQkJCVwNCisJCWV4dGVybiB2b2xhdGlsZSBVQmFzZVR5cGVfdCB1eENyaXRpY2FsTmVzdGluZzsJXA0KKwkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJX19hc20oICJsZGFhIDB4MzAiICk7ICAvKiAweDMwID0gUFBBR0UgKi8JCQkJCVwNCisJCV9fYXNtKCAicHNoYSIgKTsJCQkJCQkJCQkJCVwNCisJCV9fYXNtKCAibGRhYSB1eENyaXRpY2FsTmVzdGluZyIgKTsJCQkJCQkJXA0KKwkJX19hc20oICJwc2hhIiApOwkJCQkJCQkJCQkJXA0KKwkJX19hc20oICJsZHggcHhDdXJyZW50VENCIiApOwkJCQkJCQkJXA0KKwkJX19hc20oICJzdHMgMCwgeCIgKTsJCQkJCQkJCQkJXA0KKwl9DQorI2Vsc2UNCiANCi0vKg0KLSAqIEJ5IHRoZSB0aW1lIHRoaXMgbWFjcm8gaXMgY2FsbGVkIHRoZSBwcm9jZXNzb3IgaGFzIGFscmVhZHkgc3RhY2tlZCB0aGUNCi0gKiByZWdpc3RlcnMuICBTaW1wbHkgc3RhY2sgdGhlIG5lc3RpbmcgY291bnQgYW5kIFBQQUdFIHZhbHVlLCB0aGVuIHNhdmUNCi0gKiB0aGUgdGFzayBzdGFjayBwb2ludGVyLg0KLSAqLw0KLSAgICAjZGVmaW5lIHBvcnRTQVZFX0NPTlRFWFQoKSAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGV4dGVybiB2b2xhdGlsZSB2b2lkICogcHhDdXJyZW50VENCOyAgICAgICAgICAgXA0KLSAgICAgICAgZXh0ZXJuIHZvbGF0aWxlIFVCYXNlVHlwZV90IHV4Q3JpdGljYWxOZXN0aW5nOyBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIF9fYXNtKCAibGRhYSAweDMwIiApOyAvKiAweDMwID0gUFBBR0UgKi8gICAgICAgXA0KLSAgICAgICAgX19hc20oICJwc2hhIiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBfX2FzbSggImxkYWEgdXhDcml0aWNhbE5lc3RpbmciICk7ICAgICAgICAgICAgIFwNCi0gICAgICAgIF9fYXNtKCAicHNoYSIgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgX19hc20oICJsZHggcHhDdXJyZW50VENCIiApOyAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBfX2FzbSggInN0cyAwLCB4IiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgfQ0KLSNlbHNlIC8qIGlmZGVmIEJBTktFRF9NT0RFTCAqLw0KKwkvKg0KKwkgKiBUaGVzZSBtYWNyb3MgYXJlIGFzIHBlciB0aGUgQkFOS0VEIHZlcnNpb25zIGFib3ZlLCBidXQgd2l0aG91dCBzYXZpbmcNCisJICogYW5kIHJlc3RvcmluZyB0aGUgUFBBR0UgcmVnaXN0ZXIuDQorCSAqLw0KIA0KLS8qDQotICogVGhlc2UgbWFjcm9zIGFyZSBhcyBwZXIgdGhlIEJBTktFRCB2ZXJzaW9ucyBhYm92ZSwgYnV0IHdpdGhvdXQgc2F2aW5nDQotICogYW5kIHJlc3RvcmluZyB0aGUgUFBBR0UgcmVnaXN0ZXIuDQotICovDQorCSNkZWZpbmUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpCQkJCQkJCQkJXA0KKwl7CQkJCQkJCQkJCQkJCQkJCVwNCisJCWV4dGVybiB2b2xhdGlsZSB2b2lkICogcHhDdXJyZW50VENCOwkJCQkJCVwNCisJCWV4dGVybiB2b2xhdGlsZSBVQmFzZVR5cGVfdCB1eENyaXRpY2FsTmVzdGluZzsJXA0KKwkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJX19hc20oICJsZHggcHhDdXJyZW50VENCIiApOwkJCQkJCQkJXA0KKwkJX19hc20oICJsZHMgMCwgeCIgKTsJCQkJCQkJCQkJXA0KKwkJX19hc20oICJwdWxhIiApOwkJCQkJCQkJCQkJXA0KKwkJX19hc20oICJzdGFhIHV4Q3JpdGljYWxOZXN0aW5nIiApOwkJCQkJCQlcDQorCX0NCiANCi0gICAgI2RlZmluZSBwb3J0UkVTVE9SRV9DT05URVhUKCkgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBleHRlcm4gdm9sYXRpbGUgdm9pZCAqIHB4Q3VycmVudFRDQjsgICAgICAgICAgIFwNCi0gICAgICAgIGV4dGVybiB2b2xhdGlsZSBVQmFzZVR5cGVfdCB1eENyaXRpY2FsTmVzdGluZzsgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBfX2FzbSggImxkeCBweEN1cnJlbnRUQ0IiICk7ICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIF9fYXNtKCAibGRzIDAsIHgiICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgX19hc20oICJwdWxhIiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBfX2FzbSggInN0YWEgdXhDcml0aWNhbE5lc3RpbmciICk7ICAgICAgICAgICAgIFwNCi0gICAgfQ0KLQ0KLSAgICAjZGVmaW5lIHBvcnRTQVZFX0NPTlRFWFQoKSAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGV4dGVybiB2b2xhdGlsZSB2b2lkICogcHhDdXJyZW50VENCOyAgICAgICAgICAgXA0KLSAgICAgICAgZXh0ZXJuIHZvbGF0aWxlIFVCYXNlVHlwZV90IHV4Q3JpdGljYWxOZXN0aW5nOyBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIF9fYXNtKCAibGRhYSB1eENyaXRpY2FsTmVzdGluZyIgKTsgICAgICAgICAgICAgXA0KLSAgICAgICAgX19hc20oICJwc2hhIiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBfX2FzbSggImxkeCBweEN1cnJlbnRUQ0IiICk7ICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIF9fYXNtKCAic3RzIDAsIHgiICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB9DQotI2VuZGlmIC8qIGlmZGVmIEJBTktFRF9NT0RFTCAqLw0KKwkjZGVmaW5lIHBvcnRTQVZFX0NPTlRFWFQoKQkJCQkJCQkJCQlcDQorCXsJCQkJCQkJCQkJCQkJCQkJXA0KKwkJZXh0ZXJuIHZvbGF0aWxlIHZvaWQgKiBweEN1cnJlbnRUQ0I7CQkJCQkJXA0KKwkJZXh0ZXJuIHZvbGF0aWxlIFVCYXNlVHlwZV90IHV4Q3JpdGljYWxOZXN0aW5nOwlcDQorCQkJCQkJCQkJCQkJCQkJCQlcDQorCQlfX2FzbSggImxkYWEgdXhDcml0aWNhbE5lc3RpbmciICk7CQkJCQkJCVwNCisJCV9fYXNtKCAicHNoYSIgKTsJCQkJCQkJCQkJCVwNCisJCV9fYXNtKCAibGR4IHB4Q3VycmVudFRDQiIgKTsJCQkJCQkJCVwNCisJCV9fYXNtKCAic3RzIDAsIHgiICk7CQkJCQkJCQkJCVwNCisJfQ0KKyNlbmRpZg0KIA0KIC8qDQogICogVXRpbGl0eSBtYWNybyB0byBjYWxsIG1hY3JvcyBhYm92ZSBpbiBjb3JyZWN0IG9yZGVyIGluIG9yZGVyIHRvIHBlcmZvcm0gYQ0KQEAgLTE4OSwxNCArMTg4LDE1IEBACiAgKiB0aGUgSVNSIGRvZXMgbm90IHVzZSBhbnkgbG9jYWwgKHN0YWNrKSB2YXJpYWJsZXMuICBJZiB0aGUgSVNSIHVzZXMgc3RhY2sNCiAgKiB2YXJpYWJsZXMgcG9ydFlJRUxEKCkgc2hvdWxkIGJlIHVzZWQgaW4gaXQncyBwbGFjZS4NCiAgKi8NCi0jZGVmaW5lIHBvcnRUQVNLX1NXSVRDSF9GUk9NX0lTUigpIFwNCi0gICAgcG9ydFNBVkVfQ09OVEVYVCgpOyAgICAgICAgICAgIFwNCi0gICAgdlRhc2tTd2l0Y2hDb250ZXh0KCk7ICAgICAgICAgIFwNCi0gICAgcG9ydFJFU1RPUkVfQ09OVEVYVCgpOw0KKyNkZWZpbmUgcG9ydFRBU0tfU1dJVENIX0ZST01fSVNSKCkJCQkJCQkJCVwNCisJcG9ydFNBVkVfQ09OVEVYVCgpOwkJCQkJCQkJCQkJXA0KKwl2VGFza1N3aXRjaENvbnRleHQoKTsJCQkJCQkJCQkJXA0KKwlwb3J0UkVTVE9SRV9DT05URVhUKCk7DQogDQogDQogLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQotI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQotI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICAgICAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KIA0KICNlbmRpZiAvKiBQT1JUTUFDUk9fSCAqLw0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0dDQy9BUk03X0FUOTFGUjQwMDA4L3BvcnQuYyBiL3BvcnRhYmxlL0dDQy9BUk03X0FUOTFGUjQwMDA4L3BvcnQuYwppbmRleCA0Njk3YjRlLi44MDQxMzRhIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9HQ0MvQVJNN19BVDkxRlI0MDAwOC9wb3J0LmMKKysrIGIvcG9ydGFibGUvR0NDL0FSTTdfQVQ5MUZSNDAwMDgvcG9ydC5jCkBAIC0yNywxMyArMjcsMTMgQEAKIA0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0qIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBBdG1lbCBBVDkxUjQwMDA4DQotKiBwb3J0Lg0KLSoNCi0qIENvbXBvbmVudHMgdGhhdCBjYW4gYmUgY29tcGlsZWQgdG8gZWl0aGVyIEFSTSBvciBUSFVNQiBtb2RlIGFyZQ0KLSogY29udGFpbmVkIGluIHRoaXMgZmlsZS4gIFRoZSBJU1Igcm91dGluZXMsIHdoaWNoIGNhbiBvbmx5IGJlIGNvbXBpbGVkDQotKiB0byBBUk0gbW9kZSBhcmUgY29udGFpbmVkIGluIHBvcnRJU1IuYy4NCi0qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorICogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFibGUuaCBmb3IgdGhlIEF0bWVsIEFUOTFSNDAwMDgNCisgKiBwb3J0Lg0KKyAqDQorICogQ29tcG9uZW50cyB0aGF0IGNhbiBiZSBjb21waWxlZCB0byBlaXRoZXIgQVJNIG9yIFRIVU1CIG1vZGUgYXJlDQorICogY29udGFpbmVkIGluIHRoaXMgZmlsZS4gIFRoZSBJU1Igcm91dGluZXMsIHdoaWNoIGNhbiBvbmx5IGJlIGNvbXBpbGVkDQorICogdG8gQVJNIG1vZGUgYXJlIGNvbnRhaW5lZCBpbiBwb3J0SVNSLmMuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBTdGFuZGFyZCBpbmNsdWRlcy4gKi8NCiAjaW5jbHVkZSA8c3RkbGliLmg+DQpAQCAtNDksMTI2ICs0OSwxMjQgQEAKICNpbmNsdWRlICJ0Yy5oIg0KIA0KIC8qIENvbnN0YW50cyByZXF1aXJlZCB0byBzZXR1cCB0aGUgdGFzayBjb250ZXh0LiAqLw0KLSNkZWZpbmUgcG9ydElOSVRJQUxfU1BTUiAgICAgICAgICAgICAgICAgICAoICggU3RhY2tUeXBlX3QgKSAweDFmICkgLyogU3lzdGVtIG1vZGUsIEFSTSBtb2RlLCBpbnRlcnJ1cHRzIGVuYWJsZWQuICovDQotI2RlZmluZSBwb3J0VEhVTUJfTU9ERV9CSVQgICAgICAgICAgICAgICAgICggKCBTdGFja1R5cGVfdCApIDB4MjAgKQ0KLSNkZWZpbmUgcG9ydElOU1RSVUNUSU9OX1NJWkUgICAgICAgICAgICAgICAoICggU3RhY2tUeXBlX3QgKSA0ICkNCi0jZGVmaW5lIHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkcgICAgKCAoIFN0YWNrVHlwZV90ICkgMCApDQotI2RlZmluZSBwb3J0VElDS19QUklPUklUWV82ICAgICAgICAgICAgICAgICggNiApDQorI2RlZmluZSBwb3J0SU5JVElBTF9TUFNSCQkJCSggKCBTdGFja1R5cGVfdCApIDB4MWYgKSAvKiBTeXN0ZW0gbW9kZSwgQVJNIG1vZGUsIGludGVycnVwdHMgZW5hYmxlZC4gKi8NCisjZGVmaW5lIHBvcnRUSFVNQl9NT0RFX0JJVAkJCQkoICggU3RhY2tUeXBlX3QgKSAweDIwICkNCisjZGVmaW5lIHBvcnRJTlNUUlVDVElPTl9TSVpFCQkJKCAoIFN0YWNrVHlwZV90ICkgNCApDQorI2RlZmluZSBwb3J0Tk9fQ1JJVElDQUxfU0VDVElPTl9ORVNUSU5HCSggKCBTdGFja1R5cGVfdCApIDAgKQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUFJJT1JJVFlfNgkJCQkoIDYgKQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFNldHVwIHRoZSB0aW1lciB0byBnZW5lcmF0ZSB0aGUgdGljayBpbnRlcnJ1cHRzLiAqLw0KIHN0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKTsNCiANCi0vKg0KLSAqIFRoZSBzY2hlZHVsZXIgY2FuIG9ubHkgYmUgc3RhcnRlZCBmcm9tIEFSTSBtb2RlLCBzbw0KLSAqIHZQb3J0SVNSU3RhcnRGaXJzdFNUYXNrKCkgaXMgZGVmaW5lZCBpbiBwb3J0SVNSLmMuDQorLyogDQorICogVGhlIHNjaGVkdWxlciBjYW4gb25seSBiZSBzdGFydGVkIGZyb20gQVJNIG1vZGUsIHNvIA0KKyAqIHZQb3J0SVNSU3RhcnRGaXJzdFNUYXNrKCkgaXMgZGVmaW5lZCBpbiBwb3J0SVNSLmMuIA0KICAqLw0KIGV4dGVybiB2b2lkIHZQb3J0SVNSU3RhcnRGaXJzdFRhc2soIHZvaWQgKTsNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0vKg0KLSAqIEluaXRpYWxpc2UgdGhlIHN0YWNrIG9mIGEgdGFzayB0byBsb29rIGV4YWN0bHkgYXMgaWYgYSBjYWxsIHRvDQorLyogDQorICogSW5pdGlhbGlzZSB0aGUgc3RhY2sgb2YgYSB0YXNrIHRvIGxvb2sgZXhhY3RseSBhcyBpZiBhIGNhbGwgdG8gDQogICogcG9ydFNBVkVfQ09OVEVYVCBoYWQgYmVlbiBjYWxsZWQuDQogICoNCi0gKiBTZWUgaGVhZGVyIGZpbGUgZm9yIGRlc2NyaXB0aW9uLg0KKyAqIFNlZSBoZWFkZXIgZmlsZSBmb3IgZGVzY3JpcHRpb24uIA0KICAqLw0KLVN0YWNrVHlwZV90ICogcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqIHB4VG9wT2ZTdGFjaywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFza0Z1bmN0aW9uX3QgcHhDb2RlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICogcHZQYXJhbWV0ZXJzICkNCitTdGFja1R5cGVfdCAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqcHhUb3BPZlN0YWNrLCBUYXNrRnVuY3Rpb25fdCBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycyApDQogew0KLSAgICBTdGFja1R5cGVfdCAqIHB4T3JpZ2luYWxUT1M7DQorU3RhY2tUeXBlX3QgKnB4T3JpZ2luYWxUT1M7DQogDQotICAgIHB4T3JpZ2luYWxUT1MgPSBweFRvcE9mU3RhY2s7DQorCXB4T3JpZ2luYWxUT1MgPSBweFRvcE9mU3RhY2s7DQorCQ0KKwkvKiBUbyBlbnN1cmUgYXNzZXJ0cyBpbiB0YXNrcy5jIGRvbid0IGZhaWwsIGFsdGhvdWdoIGluIHRoaXMgY2FzZSB0aGUgYXNzZXJ0DQorCWlzIG5vdCByZWFsbHkgcmVxdWlyZWQuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBUbyBlbnN1cmUgYXNzZXJ0cyBpbiB0YXNrcy5jIGRvbid0IGZhaWwsIGFsdGhvdWdoIGluIHRoaXMgY2FzZSB0aGUgYXNzZXJ0DQotICAgICAqIGlzIG5vdCByZWFsbHkgcmVxdWlyZWQuICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkvKiBTZXR1cCB0aGUgaW5pdGlhbCBzdGFjayBvZiB0aGUgdGFzay4gIFRoZSBzdGFjayBpcyBzZXQgZXhhY3RseSBhcyANCisJZXhwZWN0ZWQgYnkgdGhlIHBvcnRSRVNUT1JFX0NPTlRFWFQoKSBtYWNyby4gKi8NCiANCi0gICAgLyogU2V0dXAgdGhlIGluaXRpYWwgc3RhY2sgb2YgdGhlIHRhc2suICBUaGUgc3RhY2sgaXMgc2V0IGV4YWN0bHkgYXMNCi0gICAgICogZXhwZWN0ZWQgYnkgdGhlIHBvcnRSRVNUT1JFX0NPTlRFWFQoKSBtYWNyby4gKi8NCisJLyogRmlyc3Qgb24gdGhlIHN0YWNrIGlzIHRoZSByZXR1cm4gYWRkcmVzcyAtIHdoaWNoIGluIHRoaXMgY2FzZSBpcyB0aGUNCisJc3RhcnQgb2YgdGhlIHRhc2suICBUaGUgb2Zmc2V0IGlzIGFkZGVkIHRvIG1ha2UgdGhlIHJldHVybiBhZGRyZXNzIGFwcGVhcg0KKwlhcyBpdCB3b3VsZCB3aXRoaW4gYW4gSVJRIElTUi4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBweENvZGUgKyBwb3J0SU5TVFJVQ1RJT05fU0laRTsJCQ0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgLyogRmlyc3Qgb24gdGhlIHN0YWNrIGlzIHRoZSByZXR1cm4gYWRkcmVzcyAtIHdoaWNoIGluIHRoaXMgY2FzZSBpcyB0aGUNCi0gICAgICogc3RhcnQgb2YgdGhlIHRhc2suICBUaGUgb2Zmc2V0IGlzIGFkZGVkIHRvIG1ha2UgdGhlIHJldHVybiBhZGRyZXNzIGFwcGVhcg0KLSAgICAgKiBhcyBpdCB3b3VsZCB3aXRoaW4gYW4gSVJRIElTUi4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBweENvZGUgKyBwb3J0SU5TVFJVQ1RJT05fU0laRTsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhhYWFhYWFhYTsJLyogUjE0ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBweE9yaWdpbmFsVE9TOyAvKiBTdGFjayB1c2VkIHdoZW4gdGFzayBzdGFydHMgZ29lcyBpbiBSMTMuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTIxMjEyMTI7CS8qIFIxMiAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMTExMTExMTsJLyogUjExICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDEwMTAxMDEwOwkvKiBSMTAgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDkwOTA5MDk7CS8qIFI5ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA4MDgwODA4OwkvKiBSOCAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNzA3MDcwNzsJLyogUjcgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDYwNjA2MDY7CS8qIFI2ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA1MDUwNTA1OwkvKiBSNSAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNDA0MDQwNDsJLyogUjQgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDMwMzAzMDM7CS8qIFIzICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAyMDIwMjAyOwkvKiBSMiAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMTAxMDEwMTsJLyogUjEgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KIA0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4YWFhYWFhYWE7ICAgIC8qIFIxNCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBweE9yaWdpbmFsVE9TOyAvKiBTdGFjayB1c2VkIHdoZW4gdGFzayBzdGFydHMgZ29lcyBpbiBSMTMuICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTIxMjEyMTI7ICAgIC8qIFIxMiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDExMTExMTExOyAgICAvKiBSMTEgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMDEwMTAxMDsgICAgLyogUjEwICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDkwOTA5MDk7ICAgIC8qIFI5ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDgwODA4MDg7ICAgIC8qIFI4ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDcwNzA3MDc7ICAgIC8qIFI3ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDYwNjA2MDY7ICAgIC8qIFI2ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDUwNTA1MDU7ICAgIC8qIFI1ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDQwNDA0MDQ7ICAgIC8qIFI0ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDMwMzAzMDM7ICAgIC8qIFIzICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDIwMjAyMDI7ICAgIC8qIFIyICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDEwMTAxMDE7ICAgIC8qIFIxICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkvKiBXaGVuIHRoZSB0YXNrIHN0YXJ0cyBpcyB3aWxsIGV4cGVjdCB0byBmaW5kIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXIgaW4NCisJUjAuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHZQYXJhbWV0ZXJzOyAvKiBSMCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgLyogV2hlbiB0aGUgdGFzayBzdGFydHMgaXMgd2lsbCBleHBlY3QgdG8gZmluZCB0aGUgZnVuY3Rpb24gcGFyYW1ldGVyIGluDQotICAgICAqIFIwLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB2UGFyYW1ldGVyczsgLyogUjAgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIFRoZSBsYXN0IHRoaW5nIG9udG8gdGhlIHN0YWNrIGlzIHRoZSBzdGF0dXMgcmVnaXN0ZXIsIHdoaWNoIGlzIHNldCBmb3INCisJc3lzdGVtIG1vZGUsIHdpdGggaW50ZXJydXB0cyBlbmFibGVkLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHBvcnRJTklUSUFMX1NQU1I7DQogDQotICAgIC8qIFRoZSBsYXN0IHRoaW5nIG9udG8gdGhlIHN0YWNrIGlzIHRoZSBzdGF0dXMgcmVnaXN0ZXIsIHdoaWNoIGlzIHNldCBmb3INCi0gICAgICogc3lzdGVtIG1vZGUsIHdpdGggaW50ZXJydXB0cyBlbmFibGVkLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHBvcnRJTklUSUFMX1NQU1I7DQorCSNpZmRlZiBUSFVNQl9JTlRFUldPUksNCisJew0KKwkJLyogV2Ugd2FudCB0aGUgdGFzayB0byBzdGFydCBpbiB0aHVtYiBtb2RlLiAqLw0KKwkJKnB4VG9wT2ZTdGFjayB8PSBwb3J0VEhVTUJfTU9ERV9CSVQ7DQorCX0NCisJI2VuZGlmDQogDQotICAgICNpZmRlZiBUSFVNQl9JTlRFUldPUksNCi0gICAgICAgIHsNCi0gICAgICAgICAgICAvKiBXZSB3YW50IHRoZSB0YXNrIHRvIHN0YXJ0IGluIHRodW1iIG1vZGUuICovDQotICAgICAgICAgICAgKnB4VG9wT2ZTdGFjayB8PSBwb3J0VEhVTUJfTU9ERV9CSVQ7DQotICAgICAgICB9DQotICAgICNlbmRpZg0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIFNvbWUgb3B0aW1pc2F0aW9uIGxldmVscyB1c2UgdGhlIHN0YWNrIGRpZmZlcmVudGx5IHRvIG90aGVycy4gIFRoaXMgDQorCW1lYW5zIHRoZSBpbnRlcnJ1cHQgZmxhZ3MgY2Fubm90IGFsd2F5cyBiZSBzdG9yZWQgb24gdGhlIHN0YWNrIGFuZCB3aWxsDQorCWluc3RlYWQgYmUgc3RvcmVkIGluIGEgdmFyaWFibGUsIHdoaWNoIGlzIHRoZW4gc2F2ZWQgYXMgcGFydCBvZiB0aGUNCisJdGFza3MgY29udGV4dC4gKi8NCisJKnB4VG9wT2ZTdGFjayA9IHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkc7DQogDQotICAgIC8qIFNvbWUgb3B0aW1pc2F0aW9uIGxldmVscyB1c2UgdGhlIHN0YWNrIGRpZmZlcmVudGx5IHRvIG90aGVycy4gIFRoaXMNCi0gICAgICogbWVhbnMgdGhlIGludGVycnVwdCBmbGFncyBjYW5ub3QgYWx3YXlzIGJlIHN0b3JlZCBvbiB0aGUgc3RhY2sgYW5kIHdpbGwNCi0gICAgICogaW5zdGVhZCBiZSBzdG9yZWQgaW4gYSB2YXJpYWJsZSwgd2hpY2ggaXMgdGhlbiBzYXZlZCBhcyBwYXJ0IG9mIHRoZQ0KLSAgICAgKiB0YXNrcyBjb250ZXh0LiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gcG9ydE5PX0NSSVRJQ0FMX1NFQ1RJT05fTkVTVElORzsNCi0NCi0gICAgcmV0dXJuIHB4VG9wT2ZTdGFjazsNCisJcmV0dXJuIHB4VG9wT2ZTdGFjazsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogQmFzZVR5cGVfdCB4UG9ydFN0YXJ0U2NoZWR1bGVyKCB2b2lkICkNCiB7DQotICAgIC8qIFN0YXJ0IHRoZSB0aW1lciB0aGF0IGdlbmVyYXRlcyB0aGUgdGljayBJU1IuICBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZA0KLSAgICAgKiBoZXJlIGFscmVhZHkuICovDQotICAgIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoKTsNCisJLyogU3RhcnQgdGhlIHRpbWVyIHRoYXQgZ2VuZXJhdGVzIHRoZSB0aWNrIElTUi4gIEludGVycnVwdHMgYXJlIGRpc2FibGVkDQorCWhlcmUgYWxyZWFkeS4gKi8NCisJcHJ2U2V0dXBUaW1lckludGVycnVwdCgpOw0KIA0KLSAgICAvKiBTdGFydCB0aGUgZmlyc3QgdGFzay4gKi8NCi0gICAgdlBvcnRJU1JTdGFydEZpcnN0VGFzaygpOw0KKwkvKiBTdGFydCB0aGUgZmlyc3QgdGFzay4gKi8NCisJdlBvcnRJU1JTdGFydEZpcnN0VGFzaygpOwkNCiANCi0gICAgLyogU2hvdWxkIG5vdCBnZXQgaGVyZSEgKi8NCi0gICAgcmV0dXJuIDA7DQorCS8qIFNob3VsZCBub3QgZ2V0IGhlcmUhICovDQorCXJldHVybiAwOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0RW5kU2NoZWR1bGVyKCB2b2lkICkNCiB7DQotICAgIC8qIEl0IGlzIHVubGlrZWx5IHRoYXQgdGhlIEFSTSBwb3J0IHdpbGwgcmVxdWlyZSB0aGlzIGZ1bmN0aW9uIGFzIHRoZXJlDQotICAgICAqIGlzIG5vdGhpbmcgdG8gcmV0dXJuIHRvLiAgKi8NCisJLyogSXQgaXMgdW5saWtlbHkgdGhhdCB0aGUgQVJNIHBvcnQgd2lsbCByZXF1aXJlIHRoaXMgZnVuY3Rpb24gYXMgdGhlcmUNCisJaXMgbm90aGluZyB0byByZXR1cm4gdG8uICAqLw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCkBAIC0xNzcsNjMgKzE3NSw2NCBAQAogICovDQogc3RhdGljIHZvaWQgcHJ2U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApDQogew0KLSAgICB2b2xhdGlsZSB1aW50MzJfdCB1bER1bW15Ow0KK3ZvbGF0aWxlIHVpbnQzMl90IHVsRHVtbXk7DQogDQotICAgIC8qIEVuYWJsZSBjbG9jayB0byB0aGUgdGljayB0aW1lci4uLiAqLw0KLSAgICBBVDkxQ19CQVNFX1BTLT5QU19QQ0VSID0gcG9ydFRJTUVSX0NMS19FTkFCTEVfQklUOw0KKwkvKiBFbmFibGUgY2xvY2sgdG8gdGhlIHRpY2sgdGltZXIuLi4gKi8NCisJQVQ5MUNfQkFTRV9QUy0+UFNfUENFUiA9IHBvcnRUSU1FUl9DTEtfRU5BQkxFX0JJVDsNCiANCi0gICAgLyogU3RvcCB0aGUgdGljayB0aW1lci4uLiAqLw0KLSAgICBwb3J0VElNRVJfUkVHX0JBU0VfUFRSLT5UQ19DQ1IgPSBUQ19DTEtESVM7DQorCS8qIFN0b3AgdGhlIHRpY2sgdGltZXIuLi4gKi8NCisJcG9ydFRJTUVSX1JFR19CQVNFX1BUUi0+VENfQ0NSID0gVENfQ0xLRElTOw0KIA0KLSAgICAvKiBTdGFydCB3aXRoIHRpY2sgdGltZXIgaW50ZXJydXB0cyBkaXNhYmxlZC4uLiAqLw0KLSAgICBwb3J0VElNRVJfUkVHX0JBU0VfUFRSLT5UQ19JRFIgPSAweEZGRkZGRkZGOw0KKwkvKiBTdGFydCB3aXRoIHRpY2sgdGltZXIgaW50ZXJydXB0cyBkaXNhYmxlZC4uLiAqLw0KKwlwb3J0VElNRVJfUkVHX0JBU0VfUFRSLT5UQ19JRFIgPSAweEZGRkZGRkZGOw0KIA0KLSAgICAvKiBDbGVhciBhbnkgcGVuZGluZyB0aWNrIHRpbWVyIGludGVycnVwdHMuLi4gKi8NCi0gICAgdWxEdW1teSA9IHBvcnRUSU1FUl9SRUdfQkFTRV9QVFItPlRDX1NSOw0KKwkvKiBDbGVhciBhbnkgcGVuZGluZyB0aWNrIHRpbWVyIGludGVycnVwdHMuLi4gKi8NCisJdWxEdW1teSA9IHBvcnRUSU1FUl9SRUdfQkFTRV9QVFItPlRDX1NSOw0KIA0KLSAgICAvKiBTdG9yZSBpbnRlcnJ1cHQgaGFuZGxlciBmdW5jdGlvbiBhZGRyZXNzIGluIHRpY2sgdGltZXIgdmVjdG9yIHJlZ2lzdGVyLi4uDQotICAgICAqIFRoZSBJU1IgaW5zdGFsbGVkIGRlcGVuZHMgb24gd2hldGhlciB0aGUgcHJlZW1wdGl2ZSBvciBjb29wZXJhdGl2ZQ0KLSAgICAgKiBzY2hlZHVsZXIgaXMgYmVpbmcgdXNlZC4gKi8NCi0gICAgI2lmIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDENCi0gICAgICAgIHsNCi0gICAgICAgICAgICBleHRlcm4gdm9pZCggdlByZWVtcHRpdmVUaWNrICkoIHZvaWQgKTsNCi0gICAgICAgICAgICBBVDkxQ19CQVNFX0FJQy0+QUlDX1NWUlsgcG9ydFRJTUVSX0FJQ19DSEFOTkVMIF0gPSAoIHVpbnQzMl90ICkgdlByZWVtcHRpdmVUaWNrOw0KLSAgICAgICAgfQ0KLSAgICAjZWxzZSAvLyBlbHNlIHVzZSBjb29wZXJhdGl2ZSBzY2hlZHVsZXINCi0gICAgICAgIHsNCi0gICAgICAgICAgICBleHRlcm4gdm9pZCggdk5vblByZWVtcHRpdmVUaWNrICkoIHZvaWQgKTsNCi0gICAgICAgICAgICBBVDkxQ19CQVNFX0FJQy0+QUlDX1NWUlsgcG9ydFRJTUVSX0FJQ19DSEFOTkVMIF0gPSAoIHVpbnQzMl90ICkgdk5vblByZWVtcHRpdmVUaWNrOw0KLSAgICAgICAgfQ0KLSAgICAjZW5kaWYNCisJLyogU3RvcmUgaW50ZXJydXB0IGhhbmRsZXIgZnVuY3Rpb24gYWRkcmVzcyBpbiB0aWNrIHRpbWVyIHZlY3RvciByZWdpc3Rlci4uLg0KKwlUaGUgSVNSIGluc3RhbGxlZCBkZXBlbmRzIG9uIHdoZXRoZXIgdGhlIHByZWVtcHRpdmUgb3IgY29vcGVyYXRpdmUNCisJc2NoZWR1bGVyIGlzIGJlaW5nIHVzZWQuICovDQorCSNpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAxDQorCXsNCisJCWV4dGVybiB2b2lkICggdlByZWVtcHRpdmVUaWNrICkoIHZvaWQgKTsNCisJCUFUOTFDX0JBU0VfQUlDLT5BSUNfU1ZSW3BvcnRUSU1FUl9BSUNfQ0hBTk5FTF0gPSAoIHVpbnQzMl90ICkgdlByZWVtcHRpdmVUaWNrOw0KKwl9DQorCSNlbHNlICAvLyBlbHNlIHVzZSBjb29wZXJhdGl2ZSBzY2hlZHVsZXINCisJew0KKwkJZXh0ZXJuIHZvaWQgKCB2Tm9uUHJlZW1wdGl2ZVRpY2sgKSggdm9pZCApOw0KKwkJQVQ5MUNfQkFTRV9BSUMtPkFJQ19TVlJbcG9ydFRJTUVSX0FJQ19DSEFOTkVMXSA9ICggdWludDMyX3QgKSB2Tm9uUHJlZW1wdGl2ZVRpY2s7DQorCX0NCisJI2VuZGlmDQogDQotICAgIC8qIFRpY2sgdGltZXIgaW50ZXJydXB0IGxldmVsLXNlbnNpdGl2ZSwgcHJpb3JpdHkgNi4uLiAqLw0KLSAgICBBVDkxQ19CQVNFX0FJQy0+QUlDX1NNUlsgcG9ydFRJTUVSX0FJQ19DSEFOTkVMIF0gPSBBSUNfU1JDVFlQRV9JTlRfTEVWRUxfU0VOU0lUSVZFIHwgcG9ydFRJQ0tfUFJJT1JJVFlfNjsNCisJLyogVGljayB0aW1lciBpbnRlcnJ1cHQgbGV2ZWwtc2Vuc2l0aXZlLCBwcmlvcml0eSA2Li4uICovDQorCUFUOTFDX0JBU0VfQUlDLT5BSUNfU01SWyBwb3J0VElNRVJfQUlDX0NIQU5ORUwgXSA9IEFJQ19TUkNUWVBFX0lOVF9MRVZFTF9TRU5TSVRJVkUgfCBwb3J0VElDS19QUklPUklUWV82Ow0KIA0KLSAgICAvKiBFbmFibGUgdGhlIHRpY2sgdGltZXIgaW50ZXJydXB0Li4uDQotICAgICAqDQotICAgICAqIEZpcnN0IGF0IHRpbWVyIGxldmVsICovDQotICAgIHBvcnRUSU1FUl9SRUdfQkFTRV9QVFItPlRDX0lFUiA9IFRDX0NQQ1M7DQorCS8qIEVuYWJsZSB0aGUgdGljayB0aW1lciBpbnRlcnJ1cHQuLi4NCiANCi0gICAgLyogVGhlbiBhdCB0aGUgQUlDIGxldmVsLiAqLw0KLSAgICBBVDkxQ19CQVNFX0FJQy0+QUlDX0lFQ1IgPSAoIDEgPDwgcG9ydFRJTUVSX0FJQ19DSEFOTkVMICk7DQorCUZpcnN0IGF0IHRpbWVyIGxldmVsICovDQorCXBvcnRUSU1FUl9SRUdfQkFTRV9QVFItPlRDX0lFUiA9IFRDX0NQQ1M7DQogDQotICAgIC8qIENhbGN1bGF0ZSB0aW1lciBjb21wYXJlIHZhbHVlIHRvIGFjaGlldmUgdGhlIGRlc2lyZWQgdGljayByYXRlLi4uICovDQotICAgIGlmKCAoIGNvbmZpZ0NQVV9DTE9DS19IWiAvICggY29uZmlnVElDS19SQVRFX0haICogMiApICkgPD0gMHhGRkZGICkNCi0gICAgew0KLSAgICAgICAgLyogVGhlIHRpY2sgcmF0ZSBpcyBmYXN0IGVub3VnaCBmb3IgdXMgdG8gdXNlIHRoZSBmYXN0ZXIgdGltZXIgaW5wdXQNCi0gICAgICAgICAqIGNsb2NrIChtYWluIGNsb2NrIC8gMikuICovDQotICAgICAgICBwb3J0VElNRVJfUkVHX0JBU0VfUFRSLT5UQ19DTVIgPSBUQ19XQVZFIHwgVENfQ0xLU19NQ0syIHwgVENfQlVSU1RfTk9ORSB8IFRDX0NQQ1RSRzsNCi0gICAgICAgIHBvcnRUSU1FUl9SRUdfQkFTRV9QVFItPlRDX1JDID0gY29uZmlnQ1BVX0NMT0NLX0haIC8gKCBjb25maWdUSUNLX1JBVEVfSFogKiAyICk7DQotICAgIH0NCi0gICAgZWxzZQ0KLSAgICB7DQotICAgICAgICAvKiBXZSBtdXN0IHVzZSBhIHNsb3dlciB0aW1lciBpbnB1dCBjbG9jayAobWFpbiBjbG9jayAvIDgpIGJlY2F1c2UgdGhlDQotICAgICAgICAgKiB0aWNrIHJhdGUgaXMgdG9vIHNsb3cgZm9yIHRoZSBmYXN0ZXIgaW5wdXQgY2xvY2suICovDQotICAgICAgICBwb3J0VElNRVJfUkVHX0JBU0VfUFRSLT5UQ19DTVIgPSBUQ19XQVZFIHwgVENfQ0xLU19NQ0s4IHwgVENfQlVSU1RfTk9ORSB8IFRDX0NQQ1RSRzsNCi0gICAgICAgIHBvcnRUSU1FUl9SRUdfQkFTRV9QVFItPlRDX1JDID0gY29uZmlnQ1BVX0NMT0NLX0haIC8gKCBjb25maWdUSUNLX1JBVEVfSFogKiA4ICk7DQotICAgIH0NCisJLyogVGhlbiBhdCB0aGUgQUlDIGxldmVsLiAqLw0KKwlBVDkxQ19CQVNFX0FJQy0+QUlDX0lFQ1IgPSAoMSA8PCBwb3J0VElNRVJfQUlDX0NIQU5ORUwpOw0KIA0KLSAgICAvKiBTdGFydCB0aWNrIHRpbWVyLi4uICovDQotICAgIHBvcnRUSU1FUl9SRUdfQkFTRV9QVFItPlRDX0NDUiA9IFRDX1NXVFJHIHwgVENfQ0xLRU47DQorCS8qIENhbGN1bGF0ZSB0aW1lciBjb21wYXJlIHZhbHVlIHRvIGFjaGlldmUgdGhlIGRlc2lyZWQgdGljayByYXRlLi4uICovDQorCWlmKCAoY29uZmlnQ1BVX0NMT0NLX0haIC8gKGNvbmZpZ1RJQ0tfUkFURV9IWiAqIDIpICkgPD0gMHhGRkZGICkNCisJew0KKwkJLyogVGhlIHRpY2sgcmF0ZSBpcyBmYXN0IGVub3VnaCBmb3IgdXMgdG8gdXNlIHRoZSBmYXN0ZXIgdGltZXIgaW5wdXQNCisJCWNsb2NrIChtYWluIGNsb2NrIC8gMikuICovDQorCQlwb3J0VElNRVJfUkVHX0JBU0VfUFRSLT5UQ19DTVIgPSBUQ19XQVZFIHwgVENfQ0xLU19NQ0syIHwgVENfQlVSU1RfTk9ORSB8IFRDX0NQQ1RSRzsNCisJCXBvcnRUSU1FUl9SRUdfQkFTRV9QVFItPlRDX1JDICA9IGNvbmZpZ0NQVV9DTE9DS19IWiAvIChjb25maWdUSUNLX1JBVEVfSFogKiAyKTsNCisJfQ0KKwllbHNlDQorCXsNCisJCS8qIFdlIG11c3QgdXNlIGEgc2xvd2VyIHRpbWVyIGlucHV0IGNsb2NrIChtYWluIGNsb2NrIC8gOCkgYmVjYXVzZSB0aGUNCisJCXRpY2sgcmF0ZSBpcyB0b28gc2xvdyBmb3IgdGhlIGZhc3RlciBpbnB1dCBjbG9jay4gKi8NCisJCXBvcnRUSU1FUl9SRUdfQkFTRV9QVFItPlRDX0NNUiA9IFRDX1dBVkUgfCBUQ19DTEtTX01DSzggfCBUQ19CVVJTVF9OT05FIHwgVENfQ1BDVFJHOw0KKwkJcG9ydFRJTUVSX1JFR19CQVNFX1BUUi0+VENfUkMgID0gY29uZmlnQ1BVX0NMT0NLX0haIC8gKGNvbmZpZ1RJQ0tfUkFURV9IWiAqIDgpOw0KKwl9DQorDQorCS8qIFN0YXJ0IHRpY2sgdGltZXIuLi4gKi8NCisJcG9ydFRJTUVSX1JFR19CQVNFX1BUUi0+VENfQ0NSID0gVENfU1dUUkcgfCBUQ19DTEtFTjsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvR0NDL0FSTTdfQVQ5MUZSNDAwMDgvcG9ydElTUi5jIGIvcG9ydGFibGUvR0NDL0FSTTdfQVQ5MUZSNDAwMDgvcG9ydElTUi5jCmluZGV4IDdmNGJiNDIuLjExYzQ2ZDAgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0dDQy9BUk03X0FUOTFGUjQwMDA4L3BvcnRJU1IuYworKysgYi9wb3J0YWJsZS9HQ0MvQVJNN19BVDkxRlI0MDAwOC9wb3J0SVNSLmMKQEAgLTI3LDE3ICsyNywxNyBAQAogDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLSogQ29tcG9uZW50cyB0aGF0IGNhbiBiZSBjb21waWxlZCB0byBlaXRoZXIgQVJNIG9yIFRIVU1CIG1vZGUgYXJlDQotKiBjb250YWluZWQgaW4gcG9ydC5jICBUaGUgSVNSIHJvdXRpbmVzLCB3aGljaCBjYW4gb25seSBiZSBjb21waWxlZA0KLSogdG8gQVJNIG1vZGUsIGFyZSBjb250YWluZWQgaW4gdGhpcyBmaWxlLg0KLSotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisgKiBDb21wb25lbnRzIHRoYXQgY2FuIGJlIGNvbXBpbGVkIHRvIGVpdGhlciBBUk0gb3IgVEhVTUIgbW9kZSBhcmUNCisgKiBjb250YWluZWQgaW4gcG9ydC5jICBUaGUgSVNSIHJvdXRpbmVzLCB3aGljaCBjYW4gb25seSBiZSBjb21waWxlZA0KKyAqIHRvIEFSTSBtb2RlLCBhcmUgY29udGFpbmVkIGluIHRoaXMgZmlsZS4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qDQotICogIENoYW5nZXMgZnJvbSBWMy4yLjQNCi0gKg0KLSArIFRoZSBhc3NlbWJsZXIgc3RhdGVtZW50cyBhcmUgbm93IGluY2x1ZGVkIGluIGEgc2luZ2xlIGFzbSBibG9jayByYXRoZXINCi0gKyAgICB0aGFuIGVhY2ggbGluZSBoYXZpbmcgaXRzIG93biBhc20gYmxvY2suDQotICovDQorCUNoYW5nZXMgZnJvbSBWMy4yLjQNCisNCisJKyBUaGUgYXNzZW1ibGVyIHN0YXRlbWVudHMgYXJlIG5vdyBpbmNsdWRlZCBpbiBhIHNpbmdsZSBhc20gYmxvY2sgcmF0aGVyDQorCSAgdGhhbiBlYWNoIGxpbmUgaGF2aW5nIGl0cyBvd24gYXNtIGJsb2NrLg0KKyovDQogDQogDQogLyogU2NoZWR1bGVyIGluY2x1ZGVzLiAqLw0KQEAgLTQ1LDE4ICs0NSwxOCBAQAogI2luY2x1ZGUgInRhc2suaCINCiANCiAvKiBDb25zdGFudHMgcmVxdWlyZWQgdG8gaGFuZGxlIGludGVycnVwdHMuICovDQotI2RlZmluZSBwb3J0Q0xFQVJfQUlDX0lOVEVSUlVQVCAgICAoICggdWludDMyX3QgKSAwICkNCisjZGVmaW5lIHBvcnRDTEVBUl9BSUNfSU5URVJSVVBUCQkoICggdWludDMyX3QgKSAwICkNCiANCiAvKiBDb25zdGFudHMgcmVxdWlyZWQgdG8gaGFuZGxlIGNyaXRpY2FsIHNlY3Rpb25zLiAqLw0KLSNkZWZpbmUgcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgICAgKCAoIHVpbnQzMl90ICkgMCApDQorI2RlZmluZSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORwkJKCAoIHVpbnQzMl90ICkgMCApDQogdm9sYXRpbGUgdWludDMyX3QgdWxDcml0aWNhbE5lc3RpbmcgPSA5OTk5VUw7DQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogSVNSIHRvIGhhbmRsZSBtYW51YWwgY29udGV4dCBzd2l0Y2hlcyAoZnJvbSBhIGNhbGwgdG8gdGFza1lJRUxEKCkpLiAqLw0KLXZvaWQgdlBvcnRZaWVsZFByb2Nlc3Nvciggdm9pZCApIF9fYXR0cmlidXRlX18oICggaW50ZXJydXB0KCAiU1dJIiApLCBuYWtlZCApICk7DQordm9pZCB2UG9ydFlpZWxkUHJvY2Vzc29yKCB2b2lkICkgX19hdHRyaWJ1dGVfXygoaW50ZXJydXB0KCJTV0kiKSwgbmFrZWQpKTsNCiANCi0vKg0KKy8qIA0KICAqIFRoZSBzY2hlZHVsZXIgY2FuIG9ubHkgYmUgc3RhcnRlZCBmcm9tIEFSTSBtb2RlLCBoZW5jZSB0aGUgaW5jbHVzaW9uIG9mIHRoaXMNCiAgKiBmdW5jdGlvbiBoZXJlLg0KICAqLw0KQEAgLTY1LDkzICs2NSw5MyBAQAogDQogdm9pZCB2UG9ydElTUlN0YXJ0Rmlyc3RUYXNrKCB2b2lkICkNCiB7DQotICAgIC8qIFNpbXBseSBzdGFydCB0aGUgc2NoZWR1bGVyLiAgVGhpcyBpcyBpbmNsdWRlZCBoZXJlIGFzIGl0IGNhbiBvbmx5IGJlDQotICAgICAqIGNhbGxlZCBmcm9tIEFSTSBtb2RlLiAqLw0KLSAgICBwb3J0UkVTVE9SRV9DT05URVhUKCk7DQorCS8qIFNpbXBseSBzdGFydCB0aGUgc2NoZWR1bGVyLiAgVGhpcyBpcyBpbmNsdWRlZCBoZXJlIGFzIGl0IGNhbiBvbmx5IGJlDQorCWNhbGxlZCBmcm9tIEFSTSBtb2RlLiAqLw0KKwlwb3J0UkVTVE9SRV9DT05URVhUKCk7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qDQogICogQ2FsbGVkIGJ5IHBvcnRZSUVMRCgpIG9yIHRhc2tZSUVMRCgpIHRvIG1hbnVhbGx5IGZvcmNlIGEgY29udGV4dCBzd2l0Y2guDQogICoNCi0gKiBXaGVuIGEgY29udGV4dCBzd2l0Y2ggaXMgcGVyZm9ybWVkIGZyb20gdGhlIHRhc2sgbGV2ZWwgdGhlIHNhdmVkIHRhc2sNCisgKiBXaGVuIGEgY29udGV4dCBzd2l0Y2ggaXMgcGVyZm9ybWVkIGZyb20gdGhlIHRhc2sgbGV2ZWwgdGhlIHNhdmVkIHRhc2sgDQogICogY29udGV4dCBpcyBtYWRlIHRvIGxvb2sgYXMgaWYgaXQgb2NjdXJyZWQgZnJvbSB3aXRoaW4gdGhlIHRpY2sgSVNSLiAgVGhpcw0KICAqIHdheSB0aGUgc2FtZSByZXN0b3JlIGNvbnRleHQgZnVuY3Rpb24gY2FuIGJlIHVzZWQgd2hlbiByZXN0b3JpbmcgdGhlIGNvbnRleHQNCiAgKiBzYXZlZCBmcm9tIHRoZSBJU1Igb3IgdGhhdCBzYXZlZCBmcm9tIGEgY2FsbCB0byB2UG9ydFlpZWxkUHJvY2Vzc29yLg0KICAqLw0KIHZvaWQgdlBvcnRZaWVsZFByb2Nlc3Nvciggdm9pZCApDQogew0KLSAgICAvKiBXaXRoaW4gYW4gSVJRIElTUiB0aGUgbGluayByZWdpc3RlciBoYXMgYW4gb2Zmc2V0IGZyb20gdGhlIHRydWUgcmV0dXJuDQotICAgICAqIGFkZHJlc3MsIGJ1dCBhbiBTV0kgSVNSIGRvZXMgbm90LiAgQWRkIHRoZSBvZmZzZXQgbWFudWFsbHkgc28gdGhlIHNhbWUNCi0gICAgICogSVNSIHJldHVybiBjb2RlIGNhbiBiZSB1c2VkIGluIGJvdGggY2FzZXMuICovDQotICAgIGFzbSB2b2xhdGlsZSAoICJBREQJCUxSLCBMUiwgIzQiKTsNCisJLyogV2l0aGluIGFuIElSUSBJU1IgdGhlIGxpbmsgcmVnaXN0ZXIgaGFzIGFuIG9mZnNldCBmcm9tIHRoZSB0cnVlIHJldHVybiANCisJYWRkcmVzcywgYnV0IGFuIFNXSSBJU1IgZG9lcyBub3QuICBBZGQgdGhlIG9mZnNldCBtYW51YWxseSBzbyB0aGUgc2FtZSANCisJSVNSIHJldHVybiBjb2RlIGNhbiBiZSB1c2VkIGluIGJvdGggY2FzZXMuICovDQorCWFzbSB2b2xhdGlsZSAoICJBREQJCUxSLCBMUiwgIzQiICk7DQogDQotICAgIC8qIFBlcmZvcm0gdGhlIGNvbnRleHQgc3dpdGNoLiAgRmlyc3Qgc2F2ZSB0aGUgY29udGV4dCBvZiB0aGUgY3VycmVudCB0YXNrLiAqLw0KLSAgICBwb3J0U0FWRV9DT05URVhUKCk7DQorCS8qIFBlcmZvcm0gdGhlIGNvbnRleHQgc3dpdGNoLiAgRmlyc3Qgc2F2ZSB0aGUgY29udGV4dCBvZiB0aGUgY3VycmVudCB0YXNrLiAqLw0KKwlwb3J0U0FWRV9DT05URVhUKCk7DQogDQotICAgIC8qIEZpbmQgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgdGFzayB0aGF0IGlzIHJlYWR5IHRvIHJ1bi4gKi8NCi0gICAgdlRhc2tTd2l0Y2hDb250ZXh0KCk7DQorCS8qIEZpbmQgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgdGFzayB0aGF0IGlzIHJlYWR5IHRvIHJ1bi4gKi8NCisJdlRhc2tTd2l0Y2hDb250ZXh0KCk7DQogDQotICAgIC8qIFJlc3RvcmUgdGhlIGNvbnRleHQgb2YgdGhlIG5ldyB0YXNrLiAqLw0KLSAgICBwb3J0UkVTVE9SRV9DT05URVhUKCk7DQorCS8qIFJlc3RvcmUgdGhlIGNvbnRleHQgb2YgdGhlIG5ldyB0YXNrLiAqLw0KKwlwb3J0UkVTVE9SRV9DT05URVhUKCk7CQ0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0vKg0KKy8qIA0KICAqIFRoZSBJU1IgdXNlZCBmb3IgdGhlIHNjaGVkdWxlciB0aWNrIGRlcGVuZHMgb24gd2hldGhlciB0aGUgY29vcGVyYXRpdmUgb3INCiAgKiB0aGUgcHJlZW1wdGl2ZSBzY2hlZHVsZXIgaXMgYmVpbmcgdXNlZC4NCiAgKi8NCiANCiAjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMA0KIA0KLS8qIFRoZSBjb29wZXJhdGl2ZSBzY2hlZHVsZXIgcmVxdWlyZXMgYSBub3JtYWwgSVJRIHNlcnZpY2Ugcm91dGluZSB0bw0KLSAqIHNpbXBseSBpbmNyZW1lbnQgdGhlIHN5c3RlbSB0aWNrLiAqLw0KLSAgICB2b2lkIHZOb25QcmVlbXB0aXZlVGljayggdm9pZCApIF9fYXR0cmlidXRlX18oICggaW50ZXJydXB0KCAiSVJRIiApICkgKTsNCi0gICAgdm9pZCB2Tm9uUHJlZW1wdGl2ZVRpY2soIHZvaWQgKQ0KLSAgICB7DQotICAgICAgICBzdGF0aWMgdm9sYXRpbGUgdWludDMyX3QgdWxEdW1teTsNCisJLyogVGhlIGNvb3BlcmF0aXZlIHNjaGVkdWxlciByZXF1aXJlcyBhIG5vcm1hbCBJUlEgc2VydmljZSByb3V0aW5lIHRvIA0KKwlzaW1wbHkgaW5jcmVtZW50IHRoZSBzeXN0ZW0gdGljay4gKi8NCisJdm9pZCB2Tm9uUHJlZW1wdGl2ZVRpY2soIHZvaWQgKSBfX2F0dHJpYnV0ZV9fICgoaW50ZXJydXB0ICgiSVJRIikpKTsNCisJdm9pZCB2Tm9uUHJlZW1wdGl2ZVRpY2soIHZvaWQgKQ0KKwl7CQkNCisJc3RhdGljIHZvbGF0aWxlIHVpbnQzMl90IHVsRHVtbXk7DQogDQotICAgICAgICAvKiBDbGVhciB0aWNrIHRpbWVyIGludGVycnVwdCBpbmRpY2F0aW9uLiAqLw0KLSAgICAgICAgdWxEdW1teSA9IHBvcnRUSU1FUl9SRUdfQkFTRV9QVFItPlRDX1NSOw0KKwkJLyogQ2xlYXIgdGljayB0aW1lciBpbnRlcnJ1cHQgaW5kaWNhdGlvbi4gKi8NCisJCXVsRHVtbXkgPSBwb3J0VElNRVJfUkVHX0JBU0VfUFRSLT5UQ19TUjsgIA0KIA0KLSAgICAgICAgeFRhc2tJbmNyZW1lbnRUaWNrKCk7DQorCQl4VGFza0luY3JlbWVudFRpY2soKTsNCiANCi0gICAgICAgIC8qIEFja25vd2xlZGdlIHRoZSBpbnRlcnJ1cHQgYXQgQUlDIGxldmVsLi4uICovDQotICAgICAgICBBVDkxQ19CQVNFX0FJQy0+QUlDX0VPSUNSID0gcG9ydENMRUFSX0FJQ19JTlRFUlJVUFQ7DQotICAgIH0NCisJCS8qIEFja25vd2xlZGdlIHRoZSBpbnRlcnJ1cHQgYXQgQUlDIGxldmVsLi4uICovDQorCQlBVDkxQ19CQVNFX0FJQy0+QUlDX0VPSUNSID0gcG9ydENMRUFSX0FJQ19JTlRFUlJVUFQ7DQorCX0NCiANCi0jZWxzZSAvKiBlbHNlIHByZWVtcHRpb24gaXMgdHVybmVkIG9uICovDQorI2Vsc2UgIC8qIGVsc2UgcHJlZW1wdGlvbiBpcyB0dXJuZWQgb24gKi8NCiANCi0vKiBUaGUgcHJlZW1wdGl2ZSBzY2hlZHVsZXIgaXMgZGVmaW5lZCBhcyAibmFrZWQiIGFzIHRoZSBmdWxsIGNvbnRleHQgaXMNCi0gKiBzYXZlZCBvbiBlbnRyeSBhcyBwYXJ0IG9mIHRoZSBjb250ZXh0IHN3aXRjaC4gKi8NCi0gICAgdm9pZCB2UHJlZW1wdGl2ZVRpY2soIHZvaWQgKSBfX2F0dHJpYnV0ZV9fKCAoIG5ha2VkICkgKTsNCi0gICAgdm9pZCB2UHJlZW1wdGl2ZVRpY2soIHZvaWQgKQ0KLSAgICB7DQotICAgICAgICAvKiBTYXZlIHRoZSBjb250ZXh0IG9mIHRoZSBpbnRlcnJ1cHRlZCB0YXNrLiAqLw0KLSAgICAgICAgcG9ydFNBVkVfQ09OVEVYVCgpOw0KKwkvKiBUaGUgcHJlZW1wdGl2ZSBzY2hlZHVsZXIgaXMgZGVmaW5lZCBhcyAibmFrZWQiIGFzIHRoZSBmdWxsIGNvbnRleHQgaXMNCisJc2F2ZWQgb24gZW50cnkgYXMgcGFydCBvZiB0aGUgY29udGV4dCBzd2l0Y2guICovDQorCXZvaWQgdlByZWVtcHRpdmVUaWNrKCB2b2lkICkgX19hdHRyaWJ1dGVfXygobmFrZWQpKTsNCisJdm9pZCB2UHJlZW1wdGl2ZVRpY2soIHZvaWQgKQ0KKwl7DQorCQkvKiBTYXZlIHRoZSBjb250ZXh0IG9mIHRoZSBpbnRlcnJ1cHRlZCB0YXNrLiAqLw0KKwkJcG9ydFNBVkVfQ09OVEVYVCgpOwkNCiANCi0gICAgICAgIC8qIFdBUk5JTkcgLSBEbyBub3QgdXNlIGxvY2FsIChzdGFjaykgdmFyaWFibGVzIGhlcmUuICBVc2UgZ2xvYmFscw0KLSAgICAgICAgICogICAgICAgICAgIGlmIHlvdSBtdXN0ISAqLw0KLSAgICAgICAgc3RhdGljIHZvbGF0aWxlIHVpbnQzMl90IHVsRHVtbXk7DQorCQkvKiBXQVJOSU5HIC0gRG8gbm90IHVzZSBsb2NhbCAoc3RhY2spIHZhcmlhYmxlcyBoZXJlLiAgVXNlIGdsb2JhbHMNCisJCQkJCSBpZiB5b3UgbXVzdCEgKi8NCisJCXN0YXRpYyB2b2xhdGlsZSB1aW50MzJfdCB1bER1bW15Ow0KIA0KLSAgICAgICAgLyogQ2xlYXIgdGljayB0aW1lciBpbnRlcnJ1cHQgaW5kaWNhdGlvbi4gKi8NCi0gICAgICAgIHVsRHVtbXkgPSBwb3J0VElNRVJfUkVHX0JBU0VfUFRSLT5UQ19TUjsNCisJCS8qIENsZWFyIHRpY2sgdGltZXIgaW50ZXJydXB0IGluZGljYXRpb24uICovDQorCQl1bER1bW15ID0gcG9ydFRJTUVSX1JFR19CQVNFX1BUUi0+VENfU1I7ICANCiANCi0gICAgICAgIC8qIEluY3JlbWVudCB0aGUgUlRPUyB0aWNrIGNvdW50LCB0aGVuIGxvb2sgZm9yIHRoZSBoaWdoZXN0IHByaW9yaXR5DQotICAgICAgICAgKiB0YXNrIHRoYXQgaXMgcmVhZHkgdG8gcnVuLiAqLw0KLSAgICAgICAgaWYoIHhUYXNrSW5jcmVtZW50VGljaygpICE9IHBkRkFMU0UgKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHZUYXNrU3dpdGNoQ29udGV4dCgpOw0KLSAgICAgICAgfQ0KKwkJLyogSW5jcmVtZW50IHRoZSBSVE9TIHRpY2sgY291bnQsIHRoZW4gbG9vayBmb3IgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgDQorCQl0YXNrIHRoYXQgaXMgcmVhZHkgdG8gcnVuLiAqLw0KKwkJaWYoIHhUYXNrSW5jcmVtZW50VGljaygpICE9IHBkRkFMU0UgKQ0KKwkJew0KKwkJCXZUYXNrU3dpdGNoQ29udGV4dCgpOw0KKwkJfQ0KIA0KLSAgICAgICAgLyogQWNrbm93bGVkZ2UgdGhlIGludGVycnVwdCBhdCBBSUMgbGV2ZWwuLi4gKi8NCi0gICAgICAgIEFUOTFDX0JBU0VfQUlDLT5BSUNfRU9JQ1IgPSBwb3J0Q0xFQVJfQUlDX0lOVEVSUlVQVDsNCisJCS8qIEFja25vd2xlZGdlIHRoZSBpbnRlcnJ1cHQgYXQgQUlDIGxldmVsLi4uICovDQorCQlBVDkxQ19CQVNFX0FJQy0+QUlDX0VPSUNSID0gcG9ydENMRUFSX0FJQ19JTlRFUlJVUFQ7DQogDQotICAgICAgICAvKiBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBuZXcgdGFzay4gKi8NCi0gICAgICAgIHBvcnRSRVNUT1JFX0NPTlRFWFQoKTsNCi0gICAgfQ0KKwkJLyogUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgbmV3IHRhc2suICovDQorCQlwb3J0UkVTVE9SRV9DT05URVhUKCk7DQorCX0NCiANCi0jZW5kaWYgLyogaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMCAqLw0KKyNlbmRpZg0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qDQpAQCAtMTYyLDcxICsxNjIsNzIgQEAKICAqLw0KICNpZmRlZiBUSFVNQl9JTlRFUldPUksNCiANCi0gICAgdm9pZCB2UG9ydERpc2FibGVJbnRlcnJ1cHRzRnJvbVRodW1iKCB2b2lkICkgX19hdHRyaWJ1dGVfXyggKCBuYWtlZCApICk7DQotICAgIHZvaWQgdlBvcnRFbmFibGVJbnRlcnJ1cHRzRnJvbVRodW1iKCB2b2lkICkgX19hdHRyaWJ1dGVfXyggKCBuYWtlZCApICk7DQorCXZvaWQgdlBvcnREaXNhYmxlSW50ZXJydXB0c0Zyb21UaHVtYiggdm9pZCApIF9fYXR0cmlidXRlX18gKChuYWtlZCkpOw0KKwl2b2lkIHZQb3J0RW5hYmxlSW50ZXJydXB0c0Zyb21UaHVtYiggdm9pZCApIF9fYXR0cmlidXRlX18gKChuYWtlZCkpOw0KIA0KLSAgICB2b2lkIHZQb3J0RGlzYWJsZUludGVycnVwdHNGcm9tVGh1bWIoIHZvaWQgKQ0KLSAgICB7DQotICAgICAgICBhc20gdm9sYXRpbGUgKA0KLSAgICAgICAgICAgICJTVE1EQglTUCEsIHtSMH0JCVxuXHQiLyogUHVzaCBSMC4JCQkJCQkJCQkqLw0KLSAgICAgICAgICAgICJNUlMJUjAsIENQU1IJCVxuXHQiLyogR2V0IENQU1IuCQkJCQkJCQkqLw0KLSAgICAgICAgICAgICJPUlIJUjAsIFIwLCAjMHhDMAlcblx0Ii8qIERpc2FibGUgSVJRLCBGSVEuCQkJCQkJKi8NCi0gICAgICAgICAgICAiTVNSCUNQU1IsIFIwCQlcblx0Ii8qIFdyaXRlIGJhY2sgbW9kaWZpZWQgdmFsdWUuCQkJCSovDQotICAgICAgICAgICAgIkxETUlBCVNQISwge1IwfQkJXG5cdCIvKiBQb3AgUjAuCQkJCQkJCQkJKi8NCi0gICAgICAgICAgICAiQlgJCVIxNCIpOyAgICAgICAgICAgICAgICAgIC8qIFJldHVybiBiYWNrIHRvIHRodW1iLgkJCQkJKi8NCi0gICAgfQ0KLQ0KLSAgICB2b2lkIHZQb3J0RW5hYmxlSW50ZXJydXB0c0Zyb21UaHVtYiggdm9pZCApDQotICAgIHsNCi0gICAgICAgIGFzbSB2b2xhdGlsZSAoDQotICAgICAgICAgICAgIlNUTURCCVNQISwge1IwfQkJXG5cdCIvKiBQdXNoIFIwLgkJCQkJCQkJCSovDQotICAgICAgICAgICAgIk1SUwlSMCwgQ1BTUgkJXG5cdCIvKiBHZXQgQ1BTUi4JCQkJCQkJCSovDQotICAgICAgICAgICAgIkJJQwlSMCwgUjAsICMweEMwCVxuXHQiLyogRW5hYmxlIElSUSwgRklRLgkJCQkJCQkqLw0KLSAgICAgICAgICAgICJNU1IJQ1BTUiwgUjAJCVxuXHQiLyogV3JpdGUgYmFjayBtb2RpZmllZCB2YWx1ZS4JCQkJKi8NCi0gICAgICAgICAgICAiTERNSUEJU1AhLCB7UjB9CQlcblx0Ii8qIFBvcCBSMC4JCQkJCQkJCQkqLw0KLSAgICAgICAgICAgICJCWAkJUjE0Iik7ICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIGJhY2sgdG8gdGh1bWIuCQkJCQkqLw0KLSAgICB9DQorCXZvaWQgdlBvcnREaXNhYmxlSW50ZXJydXB0c0Zyb21UaHVtYiggdm9pZCApDQorCXsNCisJCWFzbSB2b2xhdGlsZSAoIA0KKwkJCSJTVE1EQglTUCEsIHtSMH0JCVxuXHQiCS8qIFB1c2ggUjAuCQkJCQkJCQkJKi8NCisJCQkiTVJTCVIwLCBDUFNSCQlcblx0IgkvKiBHZXQgQ1BTUi4JCQkJCQkJCSovDQorCQkJIk9SUglSMCwgUjAsICMweEMwCVxuXHQiCS8qIERpc2FibGUgSVJRLCBGSVEuCQkJCQkJKi8NCisJCQkiTVNSCUNQU1IsIFIwCQlcblx0IgkvKiBXcml0ZSBiYWNrIG1vZGlmaWVkIHZhbHVlLgkJCQkqLw0KKwkJCSJMRE1JQQlTUCEsIHtSMH0JCVxuXHQiCS8qIFBvcCBSMC4JCQkJCQkJCQkqLw0KKwkJCSJCWAkJUjE0IiApOwkJCQkJLyogUmV0dXJuIGJhY2sgdG8gdGh1bWIuCQkJCQkqLw0KKwl9DQorCQkJDQorCXZvaWQgdlBvcnRFbmFibGVJbnRlcnJ1cHRzRnJvbVRodW1iKCB2b2lkICkNCisJew0KKwkJYXNtIHZvbGF0aWxlICggDQorCQkJIlNUTURCCVNQISwge1IwfQkJXG5cdCIJLyogUHVzaCBSMC4JCQkJCQkJCQkqLwkNCisJCQkiTVJTCVIwLCBDUFNSCQlcblx0IgkvKiBHZXQgQ1BTUi4JCQkJCQkJCSovCQ0KKwkJCSJCSUMJUjAsIFIwLCAjMHhDMAlcblx0IgkvKiBFbmFibGUgSVJRLCBGSVEuCQkJCQkJCSovCQ0KKwkJCSJNU1IJQ1BTUiwgUjAJCVxuXHQiCS8qIFdyaXRlIGJhY2sgbW9kaWZpZWQgdmFsdWUuCQkJCSovCQ0KKwkJCSJMRE1JQQlTUCEsIHtSMH0JCVxuXHQiCS8qIFBvcCBSMC4JCQkJCQkJCQkqLw0KKwkJCSJCWAkJUjE0IiApOwkJCQkJLyogUmV0dXJuIGJhY2sgdG8gdGh1bWIuCQkJCQkqLw0KKwl9DQogDQogI2VuZGlmIC8qIFRIVU1CX0lOVEVSV09SSyAqLw0KIA0KIC8qIFRoZSBjb2RlIGdlbmVyYXRlZCBieSB0aGUgR0NDIGNvbXBpbGVyIHVzZXMgdGhlIHN0YWNrIGluIGRpZmZlcmVudCB3YXlzIGF0DQotICogZGlmZmVyZW50IG9wdGltaXNhdGlvbiBsZXZlbHMuICBUaGUgaW50ZXJydXB0IGZsYWdzIGNhbiB0aGVyZWZvcmUgbm90IGFsd2F5cw0KLSAqIGJlIHNhdmVkIHRvIHRoZSBzdGFjay4gIEluc3RlYWQgdGhlIGNyaXRpY2FsIHNlY3Rpb24gbmVzdGluZyBsZXZlbCBpcyBzdG9yZWQNCi0gKiBpbiBhIHZhcmlhYmxlLCB3aGljaCBpcyB0aGVuIHNhdmVkIGFzIHBhcnQgb2YgdGhlIHN0YWNrIGNvbnRleHQuICovDQorZGlmZmVyZW50IG9wdGltaXNhdGlvbiBsZXZlbHMuICBUaGUgaW50ZXJydXB0IGZsYWdzIGNhbiB0aGVyZWZvcmUgbm90IGFsd2F5cw0KK2JlIHNhdmVkIHRvIHRoZSBzdGFjay4gIEluc3RlYWQgdGhlIGNyaXRpY2FsIHNlY3Rpb24gbmVzdGluZyBsZXZlbCBpcyBzdG9yZWQNCitpbiBhIHZhcmlhYmxlLCB3aGljaCBpcyB0aGVuIHNhdmVkIGFzIHBhcnQgb2YgdGhlIHN0YWNrIGNvbnRleHQuICovDQogdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKQ0KIHsNCi0gICAgLyogRGlzYWJsZSBpbnRlcnJ1cHRzIGFzIHBlciBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgICBhc20gdm9sYXRpbGUgKA0KLSAgICAgICAgIlNUTURCCVNQISwge1IwfQkJCVxuXHQiLyogUHVzaCBSMC4JCQkJCQkJCSovDQotICAgICAgICAiTVJTCVIwLCBDUFNSCQkJXG5cdCIvKiBHZXQgQ1BTUi4JCQkJCQkJKi8NCi0gICAgICAgICJPUlIJUjAsIFIwLCAjMHhDMAkJXG5cdCIvKiBEaXNhYmxlIElSUSwgRklRLgkJCQkJKi8NCi0gICAgICAgICJNU1IJQ1BTUiwgUjAJCQlcblx0Ii8qIFdyaXRlIGJhY2sgbW9kaWZpZWQgdmFsdWUuCQkJKi8NCi0gICAgICAgICJMRE1JQQlTUCEsIHtSMH0iKTsgICAgICAvKiBQb3AgUjAuCQkJCQkJCQkqLw0KKwkvKiBEaXNhYmxlIGludGVycnVwdHMgYXMgcGVyIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsgCQkJCQkJCSovDQorCWFzbSB2b2xhdGlsZSAoIA0KKwkJIlNUTURCCVNQISwge1IwfQkJCVxuXHQiCS8qIFB1c2ggUjAuCQkJCQkJCQkqLw0KKwkJIk1SUwlSMCwgQ1BTUgkJCVxuXHQiCS8qIEdldCBDUFNSLgkJCQkJCQkqLw0KKwkJIk9SUglSMCwgUjAsICMweEMwCQlcblx0IgkvKiBEaXNhYmxlIElSUSwgRklRLgkJCQkJKi8NCisJCSJNU1IJQ1BTUiwgUjAJCQlcblx0IgkvKiBXcml0ZSBiYWNrIG1vZGlmaWVkIHZhbHVlLgkJCSovDQorCQkiTERNSUEJU1AhLCB7UjB9IiApOwkJCQkvKiBQb3AgUjAuCQkJCQkJCQkqLw0KIA0KLSAgICAvKiBOb3cgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgdWxDcml0aWNhbE5lc3RpbmcgY2FuIGJlIGFjY2Vzc2VkDQotICAgICAqIGRpcmVjdGx5LiAgSW5jcmVtZW50IHVsQ3JpdGljYWxOZXN0aW5nIHRvIGtlZXAgYSBjb3VudCBvZiBob3cgbWFueSB0aW1lcw0KLSAgICAgKiBwb3J0RU5URVJfQ1JJVElDQUwoKSBoYXMgYmVlbiBjYWxsZWQuICovDQotICAgIHVsQ3JpdGljYWxOZXN0aW5nKys7DQorCS8qIE5vdyBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB1bENyaXRpY2FsTmVzdGluZyBjYW4gYmUgYWNjZXNzZWQgDQorCWRpcmVjdGx5LiAgSW5jcmVtZW50IHVsQ3JpdGljYWxOZXN0aW5nIHRvIGtlZXAgYSBjb3VudCBvZiBob3cgbWFueSB0aW1lcw0KKwlwb3J0RU5URVJfQ1JJVElDQUwoKSBoYXMgYmVlbiBjYWxsZWQuICovDQorCXVsQ3JpdGljYWxOZXN0aW5nKys7DQogfQ0KIA0KIHZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoIHZvaWQgKQ0KIHsNCi0gICAgaWYoIHVsQ3JpdGljYWxOZXN0aW5nID4gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgKQ0KLSAgICB7DQotICAgICAgICAvKiBEZWNyZW1lbnQgdGhlIG5lc3RpbmcgY291bnQgYXMgd2UgYXJlIGxlYXZpbmcgYSBjcml0aWNhbCBzZWN0aW9uLiAqLw0KLSAgICAgICAgdWxDcml0aWNhbE5lc3RpbmctLTsNCisJaWYoIHVsQ3JpdGljYWxOZXN0aW5nID4gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgKQ0KKwl7DQorCQkvKiBEZWNyZW1lbnQgdGhlIG5lc3RpbmcgY291bnQgYXMgd2UgYXJlIGxlYXZpbmcgYSBjcml0aWNhbCBzZWN0aW9uLiAqLw0KKwkJdWxDcml0aWNhbE5lc3RpbmctLTsNCiANCi0gICAgICAgIC8qIElmIHRoZSBuZXN0aW5nIGxldmVsIGhhcyByZWFjaGVkIHplcm8gdGhlbiBpbnRlcnJ1cHRzIHNob3VsZCBiZQ0KLSAgICAgICAgICogcmUtZW5hYmxlZC4gKi8NCi0gICAgICAgIGlmKCB1bENyaXRpY2FsTmVzdGluZyA9PSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyApDQotICAgICAgICB7DQotICAgICAgICAgICAgLyogRW5hYmxlIGludGVycnVwdHMgYXMgcGVyIHBvcnRFWElUX0NSSVRJQ0FMKCkuCQkJCSovDQotICAgICAgICAgICAgYXNtIHZvbGF0aWxlICgNCi0gICAgICAgICAgICAgICAgIlNUTURCCVNQISwge1IwfQkJXG5cdCIvKiBQdXNoIFIwLgkJCQkJCSovDQotICAgICAgICAgICAgICAgICJNUlMJUjAsIENQU1IJCVxuXHQiLyogR2V0IENQU1IuCQkJCQkqLw0KLSAgICAgICAgICAgICAgICAiQklDCVIwLCBSMCwgIzB4QzAJXG5cdCIvKiBFbmFibGUgSVJRLCBGSVEuCQkJCSovDQotICAgICAgICAgICAgICAgICJNU1IJQ1BTUiwgUjAJCVxuXHQiLyogV3JpdGUgYmFjayBtb2RpZmllZCB2YWx1ZS4JKi8NCi0gICAgICAgICAgICAgICAgIkxETUlBCVNQISwge1IwfSIpOyAgICAgLyogUG9wIFIwLgkJCQkJCSovDQotICAgICAgICB9DQotICAgIH0NCisJCS8qIElmIHRoZSBuZXN0aW5nIGxldmVsIGhhcyByZWFjaGVkIHplcm8gdGhlbiBpbnRlcnJ1cHRzIHNob3VsZCBiZQ0KKwkJcmUtZW5hYmxlZC4gKi8NCisJCWlmKCB1bENyaXRpY2FsTmVzdGluZyA9PSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyApDQorCQl7DQorCQkJLyogRW5hYmxlIGludGVycnVwdHMgYXMgcGVyIHBvcnRFWElUX0NSSVRJQ0FMKCkuCQkJCSovDQorCQkJYXNtIHZvbGF0aWxlICggDQorCQkJCSJTVE1EQglTUCEsIHtSMH0JCVxuXHQiCS8qIFB1c2ggUjAuCQkJCQkJKi8JDQorCQkJCSJNUlMJUjAsIENQU1IJCVxuXHQiCS8qIEdldCBDUFNSLgkJCQkJKi8JDQorCQkJCSJCSUMJUjAsIFIwLCAjMHhDMAlcblx0IgkvKiBFbmFibGUgSVJRLCBGSVEuCQkJCSovCQ0KKwkJCQkiTVNSCUNQU1IsIFIwCQlcblx0IgkvKiBXcml0ZSBiYWNrIG1vZGlmaWVkIHZhbHVlLgkqLwkNCisJCQkJIkxETUlBCVNQISwge1IwfSIgKTsJCQkvKiBQb3AgUjAuCQkJCQkJKi8NCisJCX0NCisJfQ0KIH0NCisNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9HQ0MvQVJNN19BVDkxRlI0MDAwOC9wb3J0bWFjcm8uaCBiL3BvcnRhYmxlL0dDQy9BUk03X0FUOTFGUjQwMDA4L3BvcnRtYWNyby5oCmluZGV4IDZlZWRjMTYuLmY5YjUyOWYgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0dDQy9BUk03X0FUOTFGUjQwMDA4L3BvcnRtYWNyby5oCisrKyBiL3BvcnRhYmxlL0dDQy9BUk03X0FUOTFGUjQwMDA4L3BvcnRtYWNyby5oCkBAIC0yNiwzNCArMjYsMzQgQEAKICAqLw0KIA0KIC8qDQotICogIENoYW5nZXMgZnJvbSBWMy4yLjMNCi0gKg0KLSArIE1vZGlmaWVkIHBvcnRFTlRFUl9TV0lUQ0hJTkdfSVNSKCkgdG8gYWxsb3cgdXNlIHdpdGggR0NDIFY0LjAuMS4NCi0gKw0KLSArICBDaGFuZ2VzIGZyb20gVjMuMi40DQotICsNCi0gKyBSZW1vdmVkIHRoZSB1c2Ugb2YgdGhlICUwIHBhcmFtZXRlciB3aXRoaW4gdGhlIGFzc2VtYmxlciBtYWNyb3MgYW5kDQotICsgICAgcmVwbGFjZWQgdGhlbSB3aXRoIGhhcmQgY29kZWQgcmVnaXN0ZXJzLiAgVGhpcyB3aWxsIGVuc3VyZSB0aGUNCi0gKyAgICBhc3NlbWJsZXIgZG9lcyBub3Qgc2VsZWN0IHRoZSBsaW5rIHJlZ2lzdGVyIGFzIHRoZSB0ZW1wIHJlZ2lzdGVyIGFzDQotICsgICAgd2FzIG9jY2FzaW9uYWxseSBoYXBwZW5pbmcgcHJldmlvdXNseS4NCi0gKw0KLSArIFRoZSBhc3NlbWJsZXIgc3RhdGVtZW50cyBhcmUgbm93IGluY2x1ZGVkIGluIGEgc2luZ2xlIGFzbSBibG9jayByYXRoZXINCi0gKyAgICB0aGFuIGVhY2ggbGluZSBoYXZpbmcgaXRzIG93biBhc20gYmxvY2suDQotICsNCi0gKyAgQ2hhbmdlcyBmcm9tIFY0LjUuMA0KLSArDQotICsgUmVtb3ZlZCB0aGUgcG9ydEVOVEVSX1NXSVRDSElOR19JU1IoKSBhbmQgcG9ydEVYSVRfU1dJVENISU5HX0lTUigpIG1hY3Jvcw0KLSArICAgIGFuZCByZXBsYWNlZCB0aGVtIHdpdGggcG9ydFlJRUxEX0ZST01fSVNSKCkgbWFjcm8uICBBcHBsaWNhdGlvbiBjb2RlDQotICsgICAgc2hvdWxkIG5vdyBtYWtlIHVzZSBvZiB0aGUgcG9ydFNBVkVfQ09OVEVYVCgpIGFuZCBwb3J0UkVTVE9SRV9DT05URVhUKCkNCi0gKyAgICBtYWNyb3MgYXMgcGVyIHRoZSBWNC41LjEgZGVtbyBjb2RlLg0KLSAqLw0KKwlDaGFuZ2VzIGZyb20gVjMuMi4zDQorDQorCSsgTW9kaWZpZWQgcG9ydEVOVEVSX1NXSVRDSElOR19JU1IoKSB0byBhbGxvdyB1c2Ugd2l0aCBHQ0MgVjQuMC4xLg0KKw0KKwlDaGFuZ2VzIGZyb20gVjMuMi40DQorDQorCSsgUmVtb3ZlZCB0aGUgdXNlIG9mIHRoZSAlMCBwYXJhbWV0ZXIgd2l0aGluIHRoZSBhc3NlbWJsZXIgbWFjcm9zIGFuZA0KKwkgIHJlcGxhY2VkIHRoZW0gd2l0aCBoYXJkIGNvZGVkIHJlZ2lzdGVycy4gIFRoaXMgd2lsbCBlbnN1cmUgdGhlDQorCSAgYXNzZW1ibGVyIGRvZXMgbm90IHNlbGVjdCB0aGUgbGluayByZWdpc3RlciBhcyB0aGUgdGVtcCByZWdpc3RlciBhcw0KKwkgIHdhcyBvY2Nhc2lvbmFsbHkgaGFwcGVuaW5nIHByZXZpb3VzbHkuDQorDQorCSsgVGhlIGFzc2VtYmxlciBzdGF0ZW1lbnRzIGFyZSBub3cgaW5jbHVkZWQgaW4gYSBzaW5nbGUgYXNtIGJsb2NrIHJhdGhlcg0KKwkgIHRoYW4gZWFjaCBsaW5lIGhhdmluZyBpdHMgb3duIGFzbSBibG9jay4NCisNCisJQ2hhbmdlcyBmcm9tIFY0LjUuMA0KKw0KKwkrIFJlbW92ZWQgdGhlIHBvcnRFTlRFUl9TV0lUQ0hJTkdfSVNSKCkgYW5kIHBvcnRFWElUX1NXSVRDSElOR19JU1IoKSBtYWNyb3MNCisJICBhbmQgcmVwbGFjZWQgdGhlbSB3aXRoIHBvcnRZSUVMRF9GUk9NX0lTUigpIG1hY3JvLiAgQXBwbGljYXRpb24gY29kZQ0KKwkgIHNob3VsZCBub3cgbWFrZSB1c2Ugb2YgdGhlIHBvcnRTQVZFX0NPTlRFWFQoKSBhbmQgcG9ydFJFU1RPUkVfQ09OVEVYVCgpDQorCSAgbWFjcm9zIGFzIHBlciB0aGUgVjQuNS4xIGRlbW8gY29kZS4NCisqLw0KIA0KICNpZm5kZWYgUE9SVE1BQ1JPX0gNCi0gICAgI2RlZmluZSBQT1JUTUFDUk9fSA0KKyNkZWZpbmUgUE9SVE1BQ1JPX0gNCiANCi0gICAgI2lmZGVmIF9fY3BsdXNwbHVzDQotICAgICAgICBleHRlcm4gIkMiIHsNCi0gICAgI2VuZGlmDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAqIFBvcnQgc3BlY2lmaWMgZGVmaW5pdGlvbnMuDQpAQCAtNjYsNDIgKzY2LDQyIEBACiAgKi8NCiANCiAvKiBUeXBlIGRlZmluaXRpb25zLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRDSEFSICAgICAgICAgIGNoYXINCi0gICAgI2RlZmluZSBwb3J0RkxPQVQgICAgICAgICBmbG9hdA0KLSAgICAjZGVmaW5lIHBvcnRET1VCTEUgICAgICAgIGRvdWJsZQ0KLSAgICAjZGVmaW5lIHBvcnRMT05HICAgICAgICAgIGxvbmcNCi0gICAgI2RlZmluZSBwb3J0U0hPUlQgICAgICAgICBzaG9ydA0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19UWVBFICAgIHVpbnQzMl90DQotICAgICNkZWZpbmUgcG9ydEJBU0VfVFlQRSAgICAgbG9uZw0KKyNkZWZpbmUgcG9ydENIQVIJCWNoYXINCisjZGVmaW5lIHBvcnRGTE9BVAkJZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUJCWRvdWJsZQ0KKyNkZWZpbmUgcG9ydExPTkcJCWxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVAkJc2hvcnQNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFCXVpbnQzMl90DQorI2RlZmluZSBwb3J0QkFTRV9UWVBFCWxvbmcNCiANCi0gICAgdHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSAgIFN0YWNrVHlwZV90Ow0KLSAgICB0eXBlZGVmIGxvbmcgICAgICAgICAgICAgQmFzZVR5cGVfdDsNCi0gICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nICAgIFVCYXNlVHlwZV90Ow0KK3R5cGVkZWYgcG9ydFNUQUNLX1RZUEUgU3RhY2tUeXBlX3Q7DQordHlwZWRlZiBsb25nIEJhc2VUeXBlX3Q7DQordHlwZWRlZiB1bnNpZ25lZCBsb25nIFVCYXNlVHlwZV90Ow0KIA0KLSAgICAjaWYgKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KLSAgICAgICAgdHlwZWRlZiB1aW50MTZfdCAgICAgVGlja1R5cGVfdDsNCi0gICAgICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmYNCi0gICAgI2Vsc2UNCi0gICAgICAgIHR5cGVkZWYgdWludDMyX3QgICAgIFRpY2tUeXBlX3Q7DQotICAgICAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQotICAgICNlbmRpZg0KKyNpZiggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCisJdHlwZWRlZiB1aW50MTZfdCBUaWNrVHlwZV90Ow0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQorI2Vsc2UNCisJdHlwZWRlZiB1aW50MzJfdCBUaWNrVHlwZV90Ow0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQorI2VuZGlmDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogSGFyZHdhcmUgc3BlY2lmaWNzLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEggICAgICAoIC0xICkNCi0gICAgI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMgICAgKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCi0gICAgI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQgICAgOA0KLSAgICAjZGVmaW5lIHBvcnRZSUVMRCgpICAgIGFzbSB2b2xhdGlsZSAoICJTV0kgMCIgKQ0KLSAgICAjZGVmaW5lIHBvcnROT1AoKSAgICAgIGFzbSB2b2xhdGlsZSAoICJOT1AiICkNCisjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEgJCQkoIC0xICkNCisjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUwkJCSggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQorI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQJCQk4DQorI2RlZmluZSBwb3J0WUlFTEQoKQkJCQkJYXNtIHZvbGF0aWxlICggIlNXSSAwIiApDQorI2RlZmluZSBwb3J0Tk9QKCkJCQkJCWFzbSB2b2xhdGlsZSAoICJOT1AiICkNCiANCiAvKg0KICAqIFRoZXNlIGRlZmluZSB0aGUgdGltZXIgdG8gdXNlIGZvciBnZW5lcmF0aW5nIHRoZSB0aWNrIGludGVycnVwdC4NCiAgKiBUaGV5IGFyZSBwdXQgaW4gdGhpcyBmaWxlIHNvIHRoZXkgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuICJwb3J0LmMiDQogICogYW5kICJwb3J0aXNyLmMiLg0KICAqLw0KLSAgICAjZGVmaW5lIHBvcnRUSU1FUl9SRUdfQkFTRV9QVFIgICAgICBBVDkxQ19CQVNFX1RDMA0KLSAgICAjZGVmaW5lIHBvcnRUSU1FUl9DTEtfRU5BQkxFX0JJVCAgICBBVDkxQ19QU19UQzANCi0gICAgI2RlZmluZSBwb3J0VElNRVJfQUlDX0NIQU5ORUwgICAgICAgKCAoIHVpbnQzMl90ICkgNCApDQorI2RlZmluZSBwb3J0VElNRVJfUkVHX0JBU0VfUFRSCQlBVDkxQ19CQVNFX1RDMA0KKyNkZWZpbmUgcG9ydFRJTUVSX0NMS19FTkFCTEVfQklUCUFUOTFDX1BTX1RDMA0KKyNkZWZpbmUgcG9ydFRJTUVSX0FJQ19DSEFOTkVMCQkoICggdWludDMyX3QgKSA0ICkNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBUYXNrIHV0aWxpdGllcy4gKi8NCkBAIC0xMTMsOTAgKzExMyw5MCBAQAogICogVEhVTUIgbW9kZSBjb2RlIHdpbGwgcmVzdWx0IGluIGEgY29tcGlsZSB0aW1lIGVycm9yLg0KICAqLw0KIA0KLSAgICAjZGVmaW5lIHBvcnRSRVNUT1JFX0NPTlRFWFQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgZXh0ZXJuIHZvbGF0aWxlIHZvaWQgKiB2b2xhdGlsZSBweEN1cnJlbnRUQ0I7ICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgZXh0ZXJuIHZvbGF0aWxlIHVpbnQzMl90IHVsQ3JpdGljYWxOZXN0aW5nOyAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgLyogU2V0IHRoZSBMUiB0byB0aGUgdGFzayBzdGFjay4gKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgYXNtIHZvbGF0aWxlICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICJMRFIJCVIwLCA9cHhDdXJyZW50VENCCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAiTERSCQlSMCwgW1IwXQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAiTERSCQlMUiwgW1IwXQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBUaGUgY3JpdGljYWwgbmVzdGluZyBkZXB0aCBpcyB0aGUgZmlyc3QgaXRlbSBvbiB0aGUgc3RhY2suICovIFwNCi0gICAgICAgICAgICAvKiBMb2FkIGl0IGludG8gdGhlIHVsQ3JpdGljYWxOZXN0aW5nIHZhcmlhYmxlLiAqLyAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAiTERSCQlSMCwgPXVsQ3JpdGljYWxOZXN0aW5nCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICJMRE1GRAlMUiEsIHtSMX0JCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICJTVFIJCVIxLCBbUjBdCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIEdldCB0aGUgU1BTUiBmcm9tIHRoZSBzdGFjay4gKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICJMRE1GRAlMUiEsIHtSMH0JCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICJNU1IJCVNQU1IsIFIwCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIFJlc3RvcmUgYWxsIHN5c3RlbSBtb2RlIHJlZ2lzdGVycyBmb3IgdGhlIHRhc2suICovICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICJMRE1GRAlMUiwge1IwLVIxNH1eCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICJOT1AJCQkJCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIFJlc3RvcmUgdGhlIHJldHVybiBhZGRyZXNzLiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICJMRFIJCUxSLCBbTFIsICMrNjBdCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogQW5kIHJldHVybiAtIGNvcnJlY3RpbmcgdGhlIG9mZnNldCBpbiB0aGUgTFIgdG8gb2J0YWluIHRoZSAqLyBcDQotICAgICAgICAgICAgLyogY29ycmVjdCBhZGRyZXNzLiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgIlNVQlMJUEMsIExSLCAjNAkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAoIHZvaWQgKSB1bENyaXRpY2FsTmVzdGluZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAoIHZvaWQgKSBweEN1cnJlbnRUQ0I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIH0NCisjZGVmaW5lIHBvcnRSRVNUT1JFX0NPTlRFWFQoKQkJCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJCQlcDQorZXh0ZXJuIHZvbGF0aWxlIHZvaWQgKiB2b2xhdGlsZSBweEN1cnJlbnRUQ0I7CQkJCQkJCVwNCitleHRlcm4gdm9sYXRpbGUgdWludDMyX3QgdWxDcml0aWNhbE5lc3Rpbmc7CQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBTZXQgdGhlIExSIHRvIHRoZSB0YXNrIHN0YWNrLiAqLwkJCQkJCQkJCVwNCisJYXNtIHZvbGF0aWxlICgJCQkJCQkJCQkJCQkJCVwNCisJIkxEUgkJUjAsID1weEN1cnJlbnRUQ0IJCQkJCQkJCVxuXHQiCVwNCisJIkxEUgkJUjAsIFtSMF0JCQkJCQkJCQkJXG5cdCIJXA0KKwkiTERSCQlMUiwgW1IwXQkJCQkJCQkJCQlcblx0IglcDQorCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBUaGUgY3JpdGljYWwgbmVzdGluZyBkZXB0aCBpcyB0aGUgZmlyc3QgaXRlbSBvbiB0aGUgc3RhY2suICovCVwNCisJLyogTG9hZCBpdCBpbnRvIHRoZSB1bENyaXRpY2FsTmVzdGluZyB2YXJpYWJsZS4gKi8JCQkJCVwNCisJIkxEUgkJUjAsID11bENyaXRpY2FsTmVzdGluZwkJCQkJCQlcblx0IglcDQorCSJMRE1GRAlMUiEsIHtSMX0JCQkJCQkJCQkJCVxuXHQiCVwNCisJIlNUUgkJUjEsIFtSMF0JCQkJCQkJCQkJXG5cdCIJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogR2V0IHRoZSBTUFNSIGZyb20gdGhlIHN0YWNrLiAqLwkJCQkJCQkJCVwNCisJIkxETUZECUxSISwge1IwfQkJCQkJCQkJCQkJXG5cdCIJXA0KKwkiTVNSCQlTUFNSLCBSMAkJCQkJCQkJCQlcblx0IglcDQorCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBSZXN0b3JlIGFsbCBzeXN0ZW0gbW9kZSByZWdpc3RlcnMgZm9yIHRoZSB0YXNrLiAqLwkJCQlcDQorCSJMRE1GRAlMUiwge1IwLVIxNH1eCQkJCQkJCQkJCVxuXHQiCVwNCisJIk5PUAkJCQkJCQkJCQkJCQkJXG5cdCIJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogUmVzdG9yZSB0aGUgcmV0dXJuIGFkZHJlc3MuICovCQkJCQkJCQkJXA0KKwkiTERSCQlMUiwgW0xSLCAjKzYwXQkJCQkJCQkJCVxuXHQiCVwNCisJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIEFuZCByZXR1cm4gLSBjb3JyZWN0aW5nIHRoZSBvZmZzZXQgaW4gdGhlIExSIHRvIG9idGFpbiB0aGUgKi8JXA0KKwkvKiBjb3JyZWN0IGFkZHJlc3MuICovCQkJCQkJCQkJCQkJXA0KKwkiU1VCUwlQQywgTFIsICM0CQkJCQkJCQkJCQlcblx0IglcDQorCSk7CQkJCQkJCQkJCQkJCQkJCQlcDQorCSggdm9pZCApIHVsQ3JpdGljYWxOZXN0aW5nOwkJCQkJCQkJCQkJXA0KKwkoIHZvaWQgKSBweEN1cnJlbnRUQ0I7CQkJCQkJCQkJCQkJXA0KK30NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0gICAgI2RlZmluZSBwb3J0U0FWRV9DT05URVhUKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGV4dGVybiB2b2xhdGlsZSB2b2lkICogdm9sYXRpbGUgcHhDdXJyZW50VENCOyAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGV4dGVybiB2b2xhdGlsZSB1aW50MzJfdCB1bENyaXRpY2FsTmVzdGluZzsgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIFB1c2ggUjAgYXMgd2UgYXJlIGdvaW5nIHRvIHVzZSB0aGUgcmVnaXN0ZXIuICovICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGFzbSB2b2xhdGlsZSAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAiU1RNREIJU1AhLCB7UjB9CQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBTZXQgUjAgdG8gcG9pbnQgdG8gdGhlIHRhc2sgc3RhY2sgcG9pbnRlci4gKi8gICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAiU1RNREIJU1Ase1NQfV4JCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICJOT1AJCQkJCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICJTVUIJU1AsIFNQLCAjNAkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgIkxETUlBCVNQISx7UjB9CQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBQdXNoIHRoZSByZXR1cm4gYWRkcmVzcyBvbnRvIHRoZSBzdGFjay4gKi8gICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAiU1RNREIJUjAhLCB7TFJ9CQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBOb3cgd2UgaGF2ZSBzYXZlZCBMUiB3ZSBjYW4gdXNlIGl0IGluc3RlYWQgb2YgUjAuICovICAgICAgIFwNCi0gICAgICAgICAgICAiTU9WCUxSLCBSMAkJCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIFBvcCBSMCBzbyB3ZSBjYW4gc2F2ZSBpdCBvbnRvIHRoZSBzeXN0ZW0gbW9kZSBzdGFjay4gKi8gICAgXA0KLSAgICAgICAgICAgICJMRE1JQQlTUCEsIHtSMH0JCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIFB1c2ggYWxsIHRoZSBzeXN0ZW0gbW9kZSByZWdpc3RlcnMgb250byB0aGUgdGFzayBzdGFjay4gKi8gXA0KLSAgICAgICAgICAgICJTVE1EQglMUix7UjAtTFJ9XgkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgIk5PUAkJCQkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgIlNVQglMUiwgTFIsICM2MAkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogUHVzaCB0aGUgU1BTUiBvbnRvIHRoZSB0YXNrIHN0YWNrLiAqLyAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgIk1SUwlSMCwgU1BTUgkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgIlNUTURCCUxSISwge1IwfQkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgIkxEUglSMCwgPXVsQ3JpdGljYWxOZXN0aW5nCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAiTERSCVIwLCBbUjBdCQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAiU1RNREIJTFIhLCB7UjB9CQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBTdG9yZSB0aGUgbmV3IHRvcCBvZiBzdGFjayBmb3IgdGhlIHRhc2suICovICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAiTERSCVIwLCA9cHhDdXJyZW50VENCCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgIkxEUglSMCwgW1IwXQkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgIlNUUglMUiwgW1IwXQkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAoIHZvaWQgKSB1bENyaXRpY2FsTmVzdGluZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAoIHZvaWQgKSBweEN1cnJlbnRUQ0I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIH0NCisjZGVmaW5lIHBvcnRTQVZFX0NPTlRFWFQoKQkJCQkJCQkJCQkJCVwNCit7CQkJCQkJCQkJCQkJCQkJCQkJXA0KK2V4dGVybiB2b2xhdGlsZSB2b2lkICogdm9sYXRpbGUgcHhDdXJyZW50VENCOwkJCQkJCQlcDQorZXh0ZXJuIHZvbGF0aWxlIHVpbnQzMl90IHVsQ3JpdGljYWxOZXN0aW5nOwkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogUHVzaCBSMCBhcyB3ZSBhcmUgZ29pbmcgdG8gdXNlIHRoZSByZWdpc3Rlci4gKi8JCQkJCVwNCisJYXNtIHZvbGF0aWxlICgJCQkJCQkJCQkJCQkJCVwNCisJIlNUTURCCVNQISwge1IwfQkJCQkJCQkJCQkJXG5cdCIJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogU2V0IFIwIHRvIHBvaW50IHRvIHRoZSB0YXNrIHN0YWNrIHBvaW50ZXIuICovCQkJCQlcDQorCSJTVE1EQglTUCx7U1B9XgkJCQkJCQkJCQkJXG5cdCIJXA0KKwkiTk9QCQkJCQkJCQkJCQkJCQlcblx0IglcDQorCSJTVUIJU1AsIFNQLCAjNAkJCQkJCQkJCQkJXG5cdCIJXA0KKwkiTERNSUEJU1AhLHtSMH0JCQkJCQkJCQkJCVxuXHQiCVwNCisJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIFB1c2ggdGhlIHJldHVybiBhZGRyZXNzIG9udG8gdGhlIHN0YWNrLiAqLwkJCQkJCVwNCisJIlNUTURCCVIwISwge0xSfQkJCQkJCQkJCQkJXG5cdCIJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogTm93IHdlIGhhdmUgc2F2ZWQgTFIgd2UgY2FuIHVzZSBpdCBpbnN0ZWFkIG9mIFIwLiAqLwkJCQlcDQorCSJNT1YJTFIsIFIwCQkJCQkJCQkJCQkJXG5cdCIJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogUG9wIFIwIHNvIHdlIGNhbiBzYXZlIGl0IG9udG8gdGhlIHN5c3RlbSBtb2RlIHN0YWNrLiAqLwkJCVwNCisJIkxETUlBCVNQISwge1IwfQkJCQkJCQkJCQkJXG5cdCIJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogUHVzaCBhbGwgdGhlIHN5c3RlbSBtb2RlIHJlZ2lzdGVycyBvbnRvIHRoZSB0YXNrIHN0YWNrLiAqLwkJXA0KKwkiU1RNREIJTFIse1IwLUxSfV4JCQkJCQkJCQkJCVxuXHQiCVwNCisJIk5PUAkJCQkJCQkJCQkJCQkJXG5cdCIJXA0KKwkiU1VCCUxSLCBMUiwgIzYwCQkJCQkJCQkJCQlcblx0IglcDQorCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBQdXNoIHRoZSBTUFNSIG9udG8gdGhlIHRhc2sgc3RhY2suICovCQkJCQkJCVwNCisJIk1SUwlSMCwgU1BTUgkJCQkJCQkJCQkJXG5cdCIJXA0KKwkiU1RNREIJTFIhLCB7UjB9CQkJCQkJCQkJCQlcblx0IglcDQorCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkiTERSCVIwLCA9dWxDcml0aWNhbE5lc3RpbmcJCQkJCQkJCVxuXHQiCVwNCisJIkxEUglSMCwgW1IwXQkJCQkJCQkJCQkJXG5cdCIJXA0KKwkiU1RNREIJTFIhLCB7UjB9CQkJCQkJCQkJCQlcblx0IglcDQorCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBTdG9yZSB0aGUgbmV3IHRvcCBvZiBzdGFjayBmb3IgdGhlIHRhc2suICovCQkJCQkJXA0KKwkiTERSCVIwLCA9cHhDdXJyZW50VENCCQkJCQkJCQkJXG5cdCIJXA0KKwkiTERSCVIwLCBbUjBdCQkJCQkJCQkJCQlcblx0IglcDQorCSJTVFIJTFIsIFtSMF0JCQkJCQkJCQkJCVxuXHQiCVwNCisJKTsJCQkJCQkJCQkJCQkJCQkJCVwNCisJKCB2b2lkICkgdWxDcml0aWNhbE5lc3Rpbmc7CQkJCQkJCQkJCQlcDQorCSggdm9pZCApIHB4Q3VycmVudFRDQjsJCQkJCQkJCQkJCQlcDQorfQ0KIA0KLSAgICAjZGVmaW5lIHBvcnRZSUVMRF9GUk9NX0lTUigpICAgIHZUYXNrU3dpdGNoQ29udGV4dCgpDQorI2RlZmluZSBwb3J0WUlFTERfRlJPTV9JU1IoKSB2VGFza1N3aXRjaENvbnRleHQoKQ0KIA0KIC8qIENyaXRpY2FsIHNlY3Rpb24gaGFuZGxpbmcuICovDQogDQpAQCAtMjA3LDQ4ICsyMDcsNDkgQEAKICAqIGRlZmluZWQgdGhlbiB0aGUgdXRpbGl0aWVzIGFyZSBkZWZpbmVkIGFzIG1hY3JvcyBoZXJlIC0gYXMgcGVyIG90aGVyIHBvcnRzLg0KICAqLw0KIA0KLSAgICAjaWZkZWYgVEhVTUJfSU5URVJXT1JLDQorI2lmZGVmIFRIVU1CX0lOVEVSV09SSw0KIA0KLSAgICAgICAgZXh0ZXJuIHZvaWQgdlBvcnREaXNhYmxlSW50ZXJydXB0c0Zyb21UaHVtYiggdm9pZCApIF9fYXR0cmlidXRlX18oICggbmFrZWQgKSApOw0KLSAgICAgICAgZXh0ZXJuIHZvaWQgdlBvcnRFbmFibGVJbnRlcnJ1cHRzRnJvbVRodW1iKCB2b2lkICkgX19hdHRyaWJ1dGVfXyggKCBuYWtlZCApICk7DQorCWV4dGVybiB2b2lkIHZQb3J0RGlzYWJsZUludGVycnVwdHNGcm9tVGh1bWIoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fICgobmFrZWQpKTsNCisJZXh0ZXJuIHZvaWQgdlBvcnRFbmFibGVJbnRlcnJ1cHRzRnJvbVRodW1iKCB2b2lkICkgX19hdHRyaWJ1dGVfXyAoKG5ha2VkKSk7DQogDQotICAgICAgICAjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAgICB2UG9ydERpc2FibGVJbnRlcnJ1cHRzRnJvbVRodW1iKCkNCi0gICAgICAgICNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkgICAgIHZQb3J0RW5hYmxlSW50ZXJydXB0c0Zyb21UaHVtYigpDQorCSNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpCXZQb3J0RGlzYWJsZUludGVycnVwdHNGcm9tVGh1bWIoKQ0KKwkjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpCQl2UG9ydEVuYWJsZUludGVycnVwdHNGcm9tVGh1bWIoKQ0KIA0KLSAgICAjZWxzZQ0KKyNlbHNlDQogDQotICAgICAgICAjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICBhc20gdm9sYXRpbGUgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICJTVE1EQglTUCEsIHtSMH0JCVxuXHQiLyogUHVzaCBSMC4JCQkJCQkqL1wNCi0gICAgICAgICJNUlMJUjAsIENQU1IJCVxuXHQiLyogR2V0IENQU1IuCQkJCQkqL1wNCi0gICAgICAgICJPUlIJUjAsIFIwLCAjMHhDMAlcblx0Ii8qIERpc2FibGUgSVJRLCBGSVEuCQkJKi9cDQotICAgICAgICAiTVNSCUNQU1IsIFIwCQlcblx0Ii8qIFdyaXRlIGJhY2sgbW9kaWZpZWQgdmFsdWUuCSovXA0KLSAgICAgICAgIkxETUlBCVNQISwge1IwfQkJCSIpICAgICAgLyogUG9wIFIwLgkJCQkJCSovDQorCSNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpCQkJCQkJCQkJCQlcDQorCQlhc20gdm9sYXRpbGUgKAkJCQkJCQkJCQkJCQkJCVwNCisJCQkiU1RNREIJU1AhLCB7UjB9CQlcblx0IgkvKiBQdXNoIFIwLgkJCQkJCSovCVwNCisJCQkiTVJTCVIwLCBDUFNSCQlcblx0IgkvKiBHZXQgQ1BTUi4JCQkJCSovCVwNCisJCQkiT1JSCVIwLCBSMCwgIzB4QzAJXG5cdCIJLyogRGlzYWJsZSBJUlEsIEZJUS4JCQkqLwlcDQorCQkJIk1TUglDUFNSLCBSMAkJXG5cdCIJLyogV3JpdGUgYmFjayBtb2RpZmllZCB2YWx1ZS4JKi8JXA0KKwkJCSJMRE1JQQlTUCEsIHtSMH0JCQkiICkJLyogUG9wIFIwLgkJCQkJCSovDQogDQotICAgICAgICAjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICBhc20gdm9sYXRpbGUgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICJTVE1EQglTUCEsIHtSMH0JCVxuXHQiLyogUHVzaCBSMC4JCQkJCQkqL1wNCi0gICAgICAgICJNUlMJUjAsIENQU1IJCVxuXHQiLyogR2V0IENQU1IuCQkJCQkqL1wNCi0gICAgICAgICJCSUMJUjAsIFIwLCAjMHhDMAlcblx0Ii8qIEVuYWJsZSBJUlEsIEZJUS4JCQkJKi9cDQotICAgICAgICAiTVNSCUNQU1IsIFIwCQlcblx0Ii8qIFdyaXRlIGJhY2sgbW9kaWZpZWQgdmFsdWUuCSovXA0KLSAgICAgICAgIkxETUlBCVNQISwge1IwfQkJCSIpICAgICAgLyogUG9wIFIwLgkJCQkJCSovDQorCSNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkJCQkJCQkJCQkJCQlcDQorCQlhc20gdm9sYXRpbGUgKAkJCQkJCQkJCQkJCQkJCVwNCisJCQkiU1RNREIJU1AhLCB7UjB9CQlcblx0IgkvKiBQdXNoIFIwLgkJCQkJCSovCVwNCisJCQkiTVJTCVIwLCBDUFNSCQlcblx0IgkvKiBHZXQgQ1BTUi4JCQkJCSovCVwNCisJCQkiQklDCVIwLCBSMCwgIzB4QzAJXG5cdCIJLyogRW5hYmxlIElSUSwgRklRLgkJCQkqLwlcDQorCQkJIk1TUglDUFNSLCBSMAkJXG5cdCIJLyogV3JpdGUgYmFjayBtb2RpZmllZCB2YWx1ZS4JKi8JXA0KKwkJCSJMRE1JQQlTUCEsIHtSMH0JCQkiICkJLyogUG9wIFIwLgkJCQkJCSovDQogDQotICAgICNlbmRpZiAvKiBUSFVNQl9JTlRFUldPUksgKi8NCisjZW5kaWYgLyogVEhVTUJfSU5URVJXT1JLICovDQogDQotICAgIGV4dGVybiB2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCggdm9pZCApOw0KLSAgICBleHRlcm4gdm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApOw0KK2V4dGVybiB2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCggdm9pZCApOw0KK2V4dGVybiB2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICk7DQogDQotICAgICNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgICAgdlBvcnRFbnRlckNyaXRpY2FsKCk7DQotICAgICNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKSAgICAgdlBvcnRFeGl0Q3JpdGljYWwoKTsNCisjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpCQl2UG9ydEVudGVyQ3JpdGljYWwoKTsNCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkJCQl2UG9ydEV4aXRDcml0aWNhbCgpOw0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCi0gICAgI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICAgICAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KIA0KLSAgICAjaWZkZWYgX19jcGx1c3BsdXMNCi0gICAgICAgIH0NCi0gICAgI2VuZGlmDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KIA0KICNlbmRpZiAvKiBQT1JUTUFDUk9fSCAqLw0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0dDQy9BUk03X0FUOTFTQU03Uy9BVDkxU0FNN1gyNTYuaCBiL3BvcnRhYmxlL0dDQy9BUk03X0FUOTFTQU03Uy9BVDkxU0FNN1gyNTYuaAppbmRleCA1MWQ1ZmNhLi5hMTQyNzllIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9HQ0MvQVJNN19BVDkxU0FNN1MvQVQ5MVNBTTdYMjU2LmgKKysrIGIvcG9ydGFibGUvR0NDL0FSTTdfQVQ5MVNBTTdTL0FUOTFTQU03WDI1Ni5oCkBAIC0xLDI3NTkgKzEsMjczMSBAQAotLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiAgICAgICAgICBBVE1FTCBNaWNyb2NvbnRyb2xsZXIgU29mdHdhcmUgU3VwcG9ydCAgLSAgUk9VU1NFVCAgLSAqLw0KLS8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyogIERJU0NMQUlNRVI6ICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFUTUVMICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SICovDQotLyogIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgKi8NCi0vKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVCBBUkUgKi8NCi0vKiAgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVRNRUwgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgKi8NCi0vKiAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCAqLw0KLS8qICBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgKi8NCi0vKiAgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiAqLw0KLS8qICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyAqLw0KLS8qICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsICovDQotLyogIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuICovDQotLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiBGaWxlIE5hbWUgICAgICAgICAgIDogQVQ5MVNBTTdYMjU2LmggKi8NCi0vKiBPYmplY3QgICAgICAgICAgICAgIDogQVQ5MVNBTTdYMjU2IGRlZmluaXRpb25zICovDQotLyogR2VuZXJhdGVkICAgICAgICAgICA6IEFUOTEgU1cgQXBwbGljYXRpb24gR3JvdXAgIDA1LzIwLzIwMDUgKDE2OjIyOjI5KSAqLw0KLS8qICovDQotLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9BVDkxU0FNN1gyNTYucGwvMS4xMS9UdWUgTWF5IDEwIDEyOjE1OjMyIDIwMDUvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvU1lTX1NBTTdYLnBsLzEuMy9UdWUgRmViICAxIDE3OjAxOjQzIDIwMDUvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvTUNfU0FNN1gucGwvMS4yL0ZyaSBNYXkgMjAgMTQ6MTM6MDQgMjAwNS8vICovDQotLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9QTUNfU0FNN1gucGwvMS40L1R1ZSBGZWIgIDggMTM6NTg6MTAgMjAwNS8vICovDQotLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9SU1RDX1NBTTdYLnBsLzEuMS9UdWUgRmViICAxIDE2OjE2OjI2IDIwMDUvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvVURQX1NBTTdYLnBsLzEuMS9UdWUgTWF5IDEwIDExOjM1OjM1IDIwMDUvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvUFdNX1NBTTdYLnBsLzEuMS9UdWUgTWF5IDEwIDExOjUzOjA3IDIwMDUvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvQUlDXzYwNzVCLnBsLzEuMy9GcmkgTWF5IDIwIDE0OjAxOjMwIDIwMDUvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvUElPXzYwNTdBLnBsLzEuMi9UaHUgRmViICAzIDEwOjE4OjI4IDIwMDUvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvUlRUQ182MDgxQS5wbC8xLjIvVHVlIE5vdiAgOSAxNDo0Mzo1OCAyMDA0Ly8gKi8NCi0vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL1BJVENfNjA3OUEucGwvMS4yL1R1ZSBOb3YgIDkgMTQ6NDM6NTYgMjAwNC8vICovDQotLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9XRFRDXzYwODBBLnBsLzEuMy9UdWUgTm92ICA5IDE0OjQ0OjAwIDIwMDQvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvVlJFR182MDg1Qi5wbC8xLjEvVHVlIEZlYiAgMSAxNjowNTo0OCAyMDA1Ly8gKi8NCi0vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL1BEQ182MDc0Qy5wbC8xLjIvVGh1IEZlYiAgMyAwODo0ODo1NCAyMDA1Ly8gKi8NCi0vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL0RCR1VfNjA1OUQucGwvMS4xL01vbiBKYW4gMzEgMTM6MTU6MzIgMjAwNS8vICovDQotLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9TUElfNjA4OEQucGwvMS4zL0ZyaSBNYXkgMjAgMTQ6MDg6NTkgMjAwNS8vICovDQotLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9VU182MDg5Qy5wbC8xLjEvTW9uIEp1bCAxMiAxODoyMzoyNiAyMDA0Ly8gKi8NCi0vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL1NTQ182MDc4QS5wbC8xLjEvVHVlIEp1bCAxMyAwNzo0NTo0MCAyMDA0Ly8gKi8NCi0vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL1RXSV82MDYxQS5wbC8xLjEvVHVlIEp1bCAxMyAwNzozODowNiAyMDA0Ly8gKi8NCi0vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL1RDXzYwODJBLnBsLzEuNy9GcmkgTWFyIDExIDEyOjUyOjE3IDIwMDUvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvQ0FOXzYwMTlCLnBsLzEuMS9UdWUgTWFyICA4IDEyOjQyOjIyIDIwMDUvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvRU1BQ0JfNjExOUEucGwvMS41L1RodSBGZWIgIDMgMTU6NTI6MDQgMjAwNS8vICovDQotLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9BRENfNjA1MUMucGwvMS4xL0ZyaSBPY3QgMTcgMDk6MTI6MzggMjAwMy8vICovDQotLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9BRVNfNjE0OUEucGwvMS4xMC9Nb24gRmViICA3IDA5OjQ0OjI1IDIwMDUvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvREVTM182MTUwQS5wbC8xLjEvTW9uIEphbiAxNyAwODozNDozMSAyMDA1Ly8gKi8NCi0vKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKy8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8gICAgICAgICAgQVRNRUwgTWljcm9jb250cm9sbGVyIFNvZnR3YXJlIFN1cHBvcnQgIC0gIFJPVVNTRVQgIC0NCisvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vICBESVNDTEFJTUVSOiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVE1FTCAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUg0KKy8vICBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GDQorLy8gIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQgQVJFDQorLy8gIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFUTUVMIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsDQorLy8gIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QNCisvLyAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsDQorLy8gIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YNCisvLyAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcNCisvLyAgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLA0KKy8vICBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKy8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8gRmlsZSBOYW1lICAgICAgICAgICA6IEFUOTFTQU03WDI1Ni5oDQorLy8gT2JqZWN0ICAgICAgICAgICAgICA6IEFUOTFTQU03WDI1NiBkZWZpbml0aW9ucw0KKy8vIEdlbmVyYXRlZCAgICAgICAgICAgOiBBVDkxIFNXIEFwcGxpY2F0aW9uIEdyb3VwICAwNS8yMC8yMDA1ICgxNjoyMjoyOSkNCisvLyANCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL0FUOTFTQU03WDI1Ni5wbC8xLjExL1R1ZSBNYXkgMTAgMTI6MTU6MzIgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9TWVNfU0FNN1gucGwvMS4zL1R1ZSBGZWIgIDEgMTc6MDE6NDMgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9NQ19TQU03WC5wbC8xLjIvRnJpIE1heSAyMCAxNDoxMzowNCAyMDA1Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1BNQ19TQU03WC5wbC8xLjQvVHVlIEZlYiAgOCAxMzo1ODoxMCAyMDA1Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1JTVENfU0FNN1gucGwvMS4xL1R1ZSBGZWIgIDEgMTY6MTY6MjYgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9VRFBfU0FNN1gucGwvMS4xL1R1ZSBNYXkgMTAgMTE6MzU6MzUgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9QV01fU0FNN1gucGwvMS4xL1R1ZSBNYXkgMTAgMTE6NTM6MDcgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9BSUNfNjA3NUIucGwvMS4zL0ZyaSBNYXkgMjAgMTQ6MDE6MzAgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9QSU9fNjA1N0EucGwvMS4yL1RodSBGZWIgIDMgMTA6MTg6MjggMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9SVFRDXzYwODFBLnBsLzEuMi9UdWUgTm92ICA5IDE0OjQzOjU4IDIwMDQvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvUElUQ182MDc5QS5wbC8xLjIvVHVlIE5vdiAgOSAxNDo0Mzo1NiAyMDA0Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1dEVENfNjA4MEEucGwvMS4zL1R1ZSBOb3YgIDkgMTQ6NDQ6MDAgMjAwNC8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9WUkVHXzYwODVCLnBsLzEuMS9UdWUgRmViICAxIDE2OjA1OjQ4IDIwMDUvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvUERDXzYwNzRDLnBsLzEuMi9UaHUgRmViICAzIDA4OjQ4OjU0IDIwMDUvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvREJHVV82MDU5RC5wbC8xLjEvTW9uIEphbiAzMSAxMzoxNTozMiAyMDA1Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1NQSV82MDg4RC5wbC8xLjMvRnJpIE1heSAyMCAxNDowODo1OSAyMDA1Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1VTXzYwODlDLnBsLzEuMS9Nb24gSnVsIDEyIDE4OjIzOjI2IDIwMDQvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvU1NDXzYwNzhBLnBsLzEuMS9UdWUgSnVsIDEzIDA3OjQ1OjQwIDIwMDQvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvVFdJXzYwNjFBLnBsLzEuMS9UdWUgSnVsIDEzIDA3OjM4OjA2IDIwMDQvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvVENfNjA4MkEucGwvMS43L0ZyaSBNYXIgMTEgMTI6NTI6MTcgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9DQU5fNjAxOUIucGwvMS4xL1R1ZSBNYXIgIDggMTI6NDI6MjIgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9FTUFDQl82MTE5QS5wbC8xLjUvVGh1IEZlYiAgMyAxNTo1MjowNCAyMDA1Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL0FEQ182MDUxQy5wbC8xLjEvRnJpIE9jdCAxNyAwOToxMjozOCAyMDAzLy8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL0FFU182MTQ5QS5wbC8xLjEwL01vbiBGZWIgIDcgMDk6NDQ6MjUgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9ERVMzXzYxNTBBLnBsLzEuMS9Nb24gSmFuIDE3IDA4OjM0OjMxIDIwMDUvLw0KKy8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogDQogI2lmbmRlZiBBVDkxU0FNN1gyNTZfSA0KICNkZWZpbmUgQVQ5MVNBTTdYMjU2X0gNCiANCi10eXBlZGVmIHZvbGF0aWxlIHVuc2lnbmVkIGludCBBVDkxX1JFRzsgLyogSGFyZHdhcmUgcmVnaXN0ZXIgZGVmaW5pdGlvbiAqLw0KK3R5cGVkZWYgdm9sYXRpbGUgdW5zaWduZWQgaW50IEFUOTFfUkVHOy8vIEhhcmR3YXJlIHJlZ2lzdGVyIGRlZmluaXRpb24NCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFN5c3RlbSBQZXJpcGhlcmFscyAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotdHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1NZUw0KLXsNCi0gICAgQVQ5MV9SRUcgQUlDX1NNUlsgMzIgXTsgICAgIC8qIFNvdXJjZSBNb2RlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFJQ19TVlJbIDMyIF07ICAgICAvKiBTb3VyY2UgVmVjdG9yIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFJQ19JVlI7ICAgICAgICAgICAvKiBJUlEgVmVjdG9yIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFJQ19GVlI7ICAgICAgICAgICAvKiBGSVEgVmVjdG9yIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFJQ19JU1I7ICAgICAgICAgICAvKiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFJQ19JUFI7ICAgICAgICAgICAvKiBJbnRlcnJ1cHQgUGVuZGluZyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBSUNfSU1SOyAgICAgICAgICAgLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUlDX0NJU1I7ICAgICAgICAgIC8qIENvcmUgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDBbIDIgXTsgICAgLyogKi8NCi0gICAgQVQ5MV9SRUcgQUlDX0lFQ1I7ICAgICAgICAgIC8qIEludGVycnVwdCBFbmFibGUgQ29tbWFuZCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBSUNfSURDUjsgICAgICAgICAgLyogSW50ZXJydXB0IERpc2FibGUgQ29tbWFuZCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBSUNfSUNDUjsgICAgICAgICAgLyogSW50ZXJydXB0IENsZWFyIENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUlDX0lTQ1I7ICAgICAgICAgIC8qIEludGVycnVwdCBTZXQgQ29tbWFuZCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBSUNfRU9JQ1I7ICAgICAgICAgLyogRW5kIG9mIEludGVycnVwdCBDb21tYW5kIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFJQ19TUFU7ICAgICAgICAgICAvKiBTcHVyaW91cyBWZWN0b3IgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUlDX0RDUjsgICAgICAgICAgIC8qIERlYnVnIENvbnRyb2wgUmVnaXN0ZXIgKFByb3RlY3QpICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMVsgMSBdOyAgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBBSUNfRkZFUjsgICAgICAgICAgLyogRmFzdCBGb3JjaW5nIEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBSUNfRkZEUjsgICAgICAgICAgLyogRmFzdCBGb3JjaW5nIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUlDX0ZGU1I7ICAgICAgICAgIC8qIEZhc3QgRm9yY2luZyBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQyWyA0NSBdOyAgIC8qICovDQotICAgIEFUOTFfUkVHIERCR1VfQ1I7ICAgICAgICAgICAvKiBDb250cm9sIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfTVI7ICAgICAgICAgICAvKiBNb2RlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfSUVSOyAgICAgICAgICAvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfSURSOyAgICAgICAgICAvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX0lNUjsgICAgICAgICAgLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9DU1I7ICAgICAgICAgIC8qIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfUkhSOyAgICAgICAgICAvKiBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfVEhSOyAgICAgICAgICAvKiBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfQlJHUjsgICAgICAgICAvKiBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkM1sgNyBdOyAgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX0NJRFI7ICAgICAgICAgLyogQ2hpcCBJRCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX0VYSUQ7ICAgICAgICAgLyogQ2hpcCBJRCBFeHRlbnNpb24gUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9GTlRSOyAgICAgICAgIC8qIEZvcmNlIE5UUlNUIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkNFsgNDUgXTsgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX1JQUjsgICAgICAgICAgLyogUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfUkNSOyAgICAgICAgICAvKiBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9UUFI7ICAgICAgICAgIC8qIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9UQ1I7ICAgICAgICAgIC8qIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9STlBSOyAgICAgICAgIC8qIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfUk5DUjsgICAgICAgICAvKiBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX1ROUFI7ICAgICAgICAgLyogVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfVE5DUjsgICAgICAgICAvKiBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9QVENSOyAgICAgICAgIC8qIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfUFRTUjsgICAgICAgICAvKiBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkNVsgNTQgXTsgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBQSU9BX1BFUjsgICAgICAgICAgLyogUElPIEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9BX1BEUjsgICAgICAgICAgLyogUElPIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQV9QU1I7ICAgICAgICAgIC8qIFBJTyBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQ2WyAxIF07ICAgIC8qICovDQotICAgIEFUOTFfUkVHIFBJT0FfT0VSOyAgICAgICAgICAvKiBPdXRwdXQgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0FfT0RSOyAgICAgICAgICAvKiBPdXRwdXQgRGlzYWJsZSBSZWdpc3RlcnIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQV9PU1I7ICAgICAgICAgIC8qIE91dHB1dCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQ3WyAxIF07ICAgIC8qICovDQotICAgIEFUOTFfUkVHIFBJT0FfSUZFUjsgICAgICAgICAvKiBJbnB1dCBGaWx0ZXIgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0FfSUZEUjsgICAgICAgICAvKiBJbnB1dCBGaWx0ZXIgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9BX0lGU1I7ICAgICAgICAgLyogSW5wdXQgRmlsdGVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDhbIDEgXTsgICAgLyogKi8NCi0gICAgQVQ5MV9SRUcgUElPQV9TT0RSOyAgICAgICAgIC8qIFNldCBPdXRwdXQgRGF0YSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9BX0NPRFI7ICAgICAgICAgLyogQ2xlYXIgT3V0cHV0IERhdGEgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQV9PRFNSOyAgICAgICAgIC8qIE91dHB1dCBEYXRhIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9BX1BEU1I7ICAgICAgICAgLyogUGluIERhdGEgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0FfSUVSOyAgICAgICAgICAvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0FfSURSOyAgICAgICAgICAvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9BX0lNUjsgICAgICAgICAgLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQV9JU1I7ICAgICAgICAgIC8qIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQV9NREVSOyAgICAgICAgIC8qIE11bHRpLWRyaXZlciBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQV9NRERSOyAgICAgICAgIC8qIE11bHRpLWRyaXZlciBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0FfTURTUjsgICAgICAgICAvKiBNdWx0aS1kcml2ZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkOVsgMSBdOyAgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBQSU9BX1BQVURSOyAgICAgICAgLyogUHVsbC11cCBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0FfUFBVRVI7ICAgICAgICAvKiBQdWxsLXVwIEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9BX1BQVVNSOyAgICAgICAgLyogUHVsbC11cCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQxMFsgMSBdOyAgIC8qICovDQotICAgIEFUOTFfUkVHIFBJT0FfQVNSOyAgICAgICAgICAvKiBTZWxlY3QgQSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9BX0JTUjsgICAgICAgICAgLyogU2VsZWN0IEIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQV9BQlNSOyAgICAgICAgIC8qIEFCIFNlbGVjdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQxMVsgOSBdOyAgIC8qICovDQotICAgIEFUOTFfUkVHIFBJT0FfT1dFUjsgICAgICAgICAvKiBPdXRwdXQgV3JpdGUgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0FfT1dEUjsgICAgICAgICAvKiBPdXRwdXQgV3JpdGUgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9BX09XU1I7ICAgICAgICAgLyogT3V0cHV0IFdyaXRlIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDEyWyA4NSBdOyAgLyogKi8NCi0gICAgQVQ5MV9SRUcgUElPQl9QRVI7ICAgICAgICAgIC8qIFBJTyBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQl9QRFI7ICAgICAgICAgIC8qIFBJTyBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0JfUFNSOyAgICAgICAgICAvKiBQSU8gU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMTNbIDEgXTsgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBQSU9CX09FUjsgICAgICAgICAgLyogT3V0cHV0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9CX09EUjsgICAgICAgICAgLyogT3V0cHV0IERpc2FibGUgUmVnaXN0ZXJyICovDQotICAgIEFUOTFfUkVHIFBJT0JfT1NSOyAgICAgICAgICAvKiBPdXRwdXQgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMTRbIDEgXTsgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBQSU9CX0lGRVI7ICAgICAgICAgLyogSW5wdXQgRmlsdGVyIEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9CX0lGRFI7ICAgICAgICAgLyogSW5wdXQgRmlsdGVyIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQl9JRlNSOyAgICAgICAgIC8qIElucHV0IEZpbHRlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQxNVsgMSBdOyAgIC8qICovDQotICAgIEFUOTFfUkVHIFBJT0JfU09EUjsgICAgICAgICAvKiBTZXQgT3V0cHV0IERhdGEgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQl9DT0RSOyAgICAgICAgIC8qIENsZWFyIE91dHB1dCBEYXRhIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0JfT0RTUjsgICAgICAgICAvKiBPdXRwdXQgRGF0YSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQl9QRFNSOyAgICAgICAgIC8qIFBpbiBEYXRhIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9CX0lFUjsgICAgICAgICAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9CX0lEUjsgICAgICAgICAgLyogSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQl9JTVI7ICAgICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0JfSVNSOyAgICAgICAgICAvKiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0JfTURFUjsgICAgICAgICAvKiBNdWx0aS1kcml2ZXIgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0JfTUREUjsgICAgICAgICAvKiBNdWx0aS1kcml2ZXIgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9CX01EU1I7ICAgICAgICAgLyogTXVsdGktZHJpdmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDE2WyAxIF07ICAgLyogKi8NCi0gICAgQVQ5MV9SRUcgUElPQl9QUFVEUjsgICAgICAgIC8qIFB1bGwtdXAgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9CX1BQVUVSOyAgICAgICAgLyogUHVsbC11cCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQl9QUFVTUjsgICAgICAgIC8qIFB1bGwtdXAgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMTdbIDEgXTsgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBQSU9CX0FTUjsgICAgICAgICAgLyogU2VsZWN0IEEgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQl9CU1I7ICAgICAgICAgIC8qIFNlbGVjdCBCIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0JfQUJTUjsgICAgICAgICAvKiBBQiBTZWxlY3QgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMThbIDkgXTsgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBQSU9CX09XRVI7ICAgICAgICAgLyogT3V0cHV0IFdyaXRlIEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9CX09XRFI7ICAgICAgICAgLyogT3V0cHV0IFdyaXRlIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQl9PV1NSOyAgICAgICAgIC8qIE91dHB1dCBXcml0ZSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQxOVsgMzQxIF07IC8qICovDQotICAgIEFUOTFfUkVHIFBNQ19TQ0VSOyAgICAgICAgICAvKiBTeXN0ZW0gQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBNQ19TQ0RSOyAgICAgICAgICAvKiBTeXN0ZW0gQ2xvY2sgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQTUNfU0NTUjsgICAgICAgICAgLyogU3lzdGVtIENsb2NrIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDIwWyAxIF07ICAgLyogKi8NCi0gICAgQVQ5MV9SRUcgUE1DX1BDRVI7ICAgICAgICAgIC8qIFBlcmlwaGVyYWwgQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBNQ19QQ0RSOyAgICAgICAgICAvKiBQZXJpcGhlcmFsIENsb2NrIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUE1DX1BDU1I7ICAgICAgICAgIC8qIFBlcmlwaGVyYWwgQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMjFbIDEgXTsgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBQTUNfTU9SOyAgICAgICAgICAgLyogTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBNQ19NQ0ZSOyAgICAgICAgICAvKiBNYWluIENsb2NrICBGcmVxdWVuY3kgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQyMlsgMSBdOyAgIC8qICovDQotICAgIEFUOTFfUkVHIFBNQ19QTExSOyAgICAgICAgICAvKiBQTEwgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUE1DX01DS1I7ICAgICAgICAgIC8qIE1hc3RlciBDbG9jayBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDIzWyAzIF07ICAgLyogKi8NCi0gICAgQVQ5MV9SRUcgUE1DX1BDS1JbIDQgXTsgICAgIC8qIFByb2dyYW1tYWJsZSBDbG9jayBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDI0WyA0IF07ICAgLyogKi8NCi0gICAgQVQ5MV9SRUcgUE1DX0lFUjsgICAgICAgICAgIC8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUE1DX0lEUjsgICAgICAgICAgIC8qIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBNQ19TUjsgICAgICAgICAgICAvKiBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUE1DX0lNUjsgICAgICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMjVbIDM2IF07ICAvKiAqLw0KLSAgICBBVDkxX1JFRyBSU1RDX1JDUjsgICAgICAgICAgLyogUmVzZXQgQ29udHJvbCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSU1RDX1JTUjsgICAgICAgICAgLyogUmVzZXQgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJTVENfUk1SOyAgICAgICAgICAvKiBSZXNldCBNb2RlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMjZbIDUgXTsgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBSVFRDX1JUTVI7ICAgICAgICAgLyogUmVhbC10aW1lIE1vZGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUlRUQ19SVEFSOyAgICAgICAgIC8qIFJlYWwtdGltZSBBbGFybSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSVFRDX1JUVlI7ICAgICAgICAgLyogUmVhbC10aW1lIFZhbHVlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJUVENfUlRTUjsgICAgICAgICAvKiBSZWFsLXRpbWUgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJVENfUElNUjsgICAgICAgICAvKiBQZXJpb2QgSW50ZXJ2YWwgTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSVRDX1BJU1I7ICAgICAgICAgLyogUGVyaW9kIEludGVydmFsIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSVRDX1BJVlI7ICAgICAgICAgLyogUGVyaW9kIEludGVydmFsIFZhbHVlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJVENfUElJUjsgICAgICAgICAvKiBQZXJpb2QgSW50ZXJ2YWwgSW1hZ2UgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgV0RUQ19XRENSOyAgICAgICAgIC8qIFdhdGNoZG9nIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgV0RUQ19XRE1SOyAgICAgICAgIC8qIFdhdGNoZG9nIE1vZGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgV0RUQ19XRFNSOyAgICAgICAgIC8qIFdhdGNoZG9nIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDI3WyA1IF07ICAgLyogKi8NCi0gICAgQVQ5MV9SRUcgVlJFR19NUjsgICAgICAgICAgIC8qIFZvbHRhZ2UgUmVndWxhdG9yIE1vZGUgUmVnaXN0ZXIgKi8NCi19IEFUOTFTX1NZUywgKiBBVDkxUFNfU1lTOw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgU3lzdGVtIFBlcmlwaGVyYWxzDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfU1lTIHsNCisJQVQ5MV9SRUcJIEFJQ19TTVJbMzJdOyAJLy8gU291cmNlIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19TVlJbMzJdOyAJLy8gU291cmNlIFZlY3RvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0lWUjsgCS8vIElSUSBWZWN0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19GVlI7IAkvLyBGSVEgVmVjdG9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfSVNSOyAJLy8gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0lQUjsgCS8vIEludGVycnVwdCBQZW5kaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19DSVNSOyAJLy8gQ29yZSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbMl07IAkvLyANCisJQVQ5MV9SRUcJIEFJQ19JRUNSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBDb21tYW5kIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfSURDUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIENvbW1hbmQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19JQ0NSOyAJLy8gSW50ZXJydXB0IENsZWFyIENvbW1hbmQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19JU0NSOyAJLy8gSW50ZXJydXB0IFNldCBDb21tYW5kIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfRU9JQ1I7IAkvLyBFbmQgb2YgSW50ZXJydXB0IENvbW1hbmQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19TUFU7IAkvLyBTcHVyaW91cyBWZWN0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19EQ1I7IAkvLyBEZWJ1ZyBDb250cm9sIFJlZ2lzdGVyIChQcm90ZWN0KQ0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBBSUNfRkZFUjsgCS8vIEZhc3QgRm9yY2luZyBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19GRkRSOyAJLy8gRmFzdCBGb3JjaW5nIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19GRlNSOyAJLy8gRmFzdCBGb3JjaW5nIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQyWzQ1XTsgCS8vIA0KKwlBVDkxX1JFRwkgREJHVV9DUjsgCS8vIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfTVI7IAkvLyBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX0lFUjsgCS8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfQ1NSOyAJLy8gQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfUkhSOyAJLy8gUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9USFI7IAkvLyBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX0JSR1I7IAkvLyBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDNbN107IAkvLyANCisJQVQ5MV9SRUcJIERCR1VfQ0lEUjsgCS8vIENoaXAgSUQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfRVhJRDsgCS8vIENoaXAgSUQgRXh0ZW5zaW9uIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX0ZOVFI7IAkvLyBGb3JjZSBOVFJTVCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQ0WzQ1XTsgCS8vIA0KKwlBVDkxX1JFRwkgREJHVV9SUFI7IAkvLyBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfUkNSOyAJLy8gUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1RQUjsgCS8vIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfVENSOyAJLy8gVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9STlBSOyAJLy8gUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfUk5DUjsgCS8vIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1ROUFI7IAkvLyBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfVE5DUjsgCS8vIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9QVENSOyAJLy8gUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfUFRTUjsgCS8vIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkNVs1NF07IAkvLyANCisJQVQ5MV9SRUcJIFBJT0FfUEVSOyAJLy8gUElPIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9QRFI7IAkvLyBQSU8gRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9QU1I7IAkvLyBQSU8gU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDZbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT0FfT0VSOyAJLy8gT3V0cHV0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9PRFI7IAkvLyBPdXRwdXQgRGlzYWJsZSBSZWdpc3RlcnINCisJQVQ5MV9SRUcJIFBJT0FfT1NSOyAJLy8gT3V0cHV0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQ3WzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9BX0lGRVI7IAkvLyBJbnB1dCBGaWx0ZXIgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX0lGRFI7IAkvLyBJbnB1dCBGaWx0ZXIgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9JRlNSOyAJLy8gSW5wdXQgRmlsdGVyIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQ4WzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9BX1NPRFI7IAkvLyBTZXQgT3V0cHV0IERhdGEgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0FfQ09EUjsgCS8vIENsZWFyIE91dHB1dCBEYXRhIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX09EU1I7IAkvLyBPdXRwdXQgRGF0YSBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0FfUERTUjsgCS8vIFBpbiBEYXRhIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX0lEUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX0lTUjsgCS8vIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0FfTURFUjsgCS8vIE11bHRpLWRyaXZlciBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0FfTUREUjsgCS8vIE11bHRpLWRyaXZlciBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX01EU1I7IAkvLyBNdWx0aS1kcml2ZXIgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDlbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT0FfUFBVRFI7IAkvLyBQdWxsLXVwIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0FfUFBVRVI7IAkvLyBQdWxsLXVwIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9QUFVTUjsgCS8vIFB1bGwtdXAgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDEwWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9BX0FTUjsgCS8vIFNlbGVjdCBBIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX0JTUjsgCS8vIFNlbGVjdCBCIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX0FCU1I7IAkvLyBBQiBTZWxlY3QgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDExWzldOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9BX09XRVI7IAkvLyBPdXRwdXQgV3JpdGUgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX09XRFI7IAkvLyBPdXRwdXQgV3JpdGUgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9PV1NSOyAJLy8gT3V0cHV0IFdyaXRlIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxMls4NV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT0JfUEVSOyAJLy8gUElPIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9QRFI7IAkvLyBQSU8gRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9QU1I7IAkvLyBQSU8gU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDEzWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9CX09FUjsgCS8vIE91dHB1dCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfT0RSOyAJLy8gT3V0cHV0IERpc2FibGUgUmVnaXN0ZXJyDQorCUFUOTFfUkVHCSBQSU9CX09TUjsgCS8vIE91dHB1dCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMTRbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT0JfSUZFUjsgCS8vIElucHV0IEZpbHRlciBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfSUZEUjsgCS8vIElucHV0IEZpbHRlciBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX0lGU1I7IAkvLyBJbnB1dCBGaWx0ZXIgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDE1WzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9CX1NPRFI7IAkvLyBTZXQgT3V0cHV0IERhdGEgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfQ09EUjsgCS8vIENsZWFyIE91dHB1dCBEYXRhIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX09EU1I7IAkvLyBPdXRwdXQgRGF0YSBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfUERTUjsgCS8vIFBpbiBEYXRhIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX0lEUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX0lTUjsgCS8vIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfTURFUjsgCS8vIE11bHRpLWRyaXZlciBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfTUREUjsgCS8vIE11bHRpLWRyaXZlciBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX01EU1I7IAkvLyBNdWx0aS1kcml2ZXIgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDE2WzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9CX1BQVURSOyAJLy8gUHVsbC11cCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX1BQVUVSOyAJLy8gUHVsbC11cCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfUFBVU1I7IAkvLyBQdWxsLXVwIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxN1sxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUElPQl9BU1I7IAkvLyBTZWxlY3QgQSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9CU1I7IAkvLyBTZWxlY3QgQiBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9BQlNSOyAJLy8gQUIgU2VsZWN0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxOFs5XTsgCS8vIA0KKwlBVDkxX1JFRwkgUElPQl9PV0VSOyAJLy8gT3V0cHV0IFdyaXRlIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9PV0RSOyAJLy8gT3V0cHV0IFdyaXRlIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfT1dTUjsgCS8vIE91dHB1dCBXcml0ZSBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMTlbMzQxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUE1DX1NDRVI7IAkvLyBTeXN0ZW0gQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfU0NEUjsgCS8vIFN5c3RlbSBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfU0NTUjsgCS8vIFN5c3RlbSBDbG9jayBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMjBbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBNQ19QQ0VSOyAJLy8gUGVyaXBoZXJhbCBDbG9jayBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19QQ0RSOyAJLy8gUGVyaXBoZXJhbCBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfUENTUjsgCS8vIFBlcmlwaGVyYWwgQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDIxWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQTUNfTU9SOyAJLy8gTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfTUNGUjsgCS8vIE1haW4gQ2xvY2sgIEZyZXF1ZW5jeSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQyMlsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUE1DX1BMTFI7IAkvLyBQTEwgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19NQ0tSOyAJLy8gTWFzdGVyIENsb2NrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDIzWzNdOyAJLy8gDQorCUFUOTFfUkVHCSBQTUNfUENLUls0XTsgCS8vIFByb2dyYW1tYWJsZSBDbG9jayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQyNFs0XTsgCS8vIA0KKwlBVDkxX1JFRwkgUE1DX0lFUjsgCS8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUE1DX1NSOyAJLy8gU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMjVbMzZdOyAJLy8gDQorCUFUOTFfUkVHCSBSU1RDX1JDUjsgCS8vIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJTVENfUlNSOyAJLy8gUmVzZXQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSU1RDX1JNUjsgCS8vIFJlc2V0IE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMjZbNV07IAkvLyANCisJQVQ5MV9SRUcJIFJUVENfUlRNUjsgCS8vIFJlYWwtdGltZSBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSVFRDX1JUQVI7IAkvLyBSZWFsLXRpbWUgQWxhcm0gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJUVENfUlRWUjsgCS8vIFJlYWwtdGltZSBWYWx1ZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUlRUQ19SVFNSOyAJLy8gUmVhbC10aW1lIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElUQ19QSU1SOyAJLy8gUGVyaW9kIEludGVydmFsIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJVENfUElTUjsgCS8vIFBlcmlvZCBJbnRlcnZhbCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJVENfUElWUjsgCS8vIFBlcmlvZCBJbnRlcnZhbCBWYWx1ZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElUQ19QSUlSOyAJLy8gUGVyaW9kIEludGVydmFsIEltYWdlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBXRFRDX1dEQ1I7IAkvLyBXYXRjaGRvZyBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBXRFRDX1dETVI7IAkvLyBXYXRjaGRvZyBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBXRFRDX1dEU1I7IAkvLyBXYXRjaGRvZyBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMjdbNV07IAkvLyANCisJQVQ5MV9SRUcJIFZSRUdfTVI7IAkvLyBWb2x0YWdlIFJlZ3VsYXRvciBNb2RlIFJlZ2lzdGVyDQorfSBBVDkxU19TWVMsICpBVDkxUFNfU1lTOw0KIA0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLXR5cGVkZWYgc3RydWN0IF9BVDkxU19BSUMNCi17DQotICAgIEFUOTFfUkVHIEFJQ19TTVJbIDMyIF07ICAvKiBTb3VyY2UgTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBSUNfU1ZSWyAzMiBdOyAgLyogU291cmNlIFZlY3RvciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBSUNfSVZSOyAgICAgICAgLyogSVJRIFZlY3RvciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBSUNfRlZSOyAgICAgICAgLyogRklRIFZlY3RvciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBSUNfSVNSOyAgICAgICAgLyogSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBSUNfSVBSOyAgICAgICAgLyogSW50ZXJydXB0IFBlbmRpbmcgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUlDX0lNUjsgICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFJQ19DSVNSOyAgICAgICAvKiBDb3JlIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQwWyAyIF07IC8qICovDQotICAgIEFUOTFfUkVHIEFJQ19JRUNSOyAgICAgICAvKiBJbnRlcnJ1cHQgRW5hYmxlIENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUlDX0lEQ1I7ICAgICAgIC8qIEludGVycnVwdCBEaXNhYmxlIENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUlDX0lDQ1I7ICAgICAgIC8qIEludGVycnVwdCBDbGVhciBDb21tYW5kIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFJQ19JU0NSOyAgICAgICAvKiBJbnRlcnJ1cHQgU2V0IENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUlDX0VPSUNSOyAgICAgIC8qIEVuZCBvZiBJbnRlcnJ1cHQgQ29tbWFuZCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBSUNfU1BVOyAgICAgICAgLyogU3B1cmlvdXMgVmVjdG9yIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFJQ19EQ1I7ICAgICAgICAvKiBEZWJ1ZyBDb250cm9sIFJlZ2lzdGVyIChQcm90ZWN0KSAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDFbIDEgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgQUlDX0ZGRVI7ICAgICAgIC8qIEZhc3QgRm9yY2luZyBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUlDX0ZGRFI7ICAgICAgIC8qIEZhc3QgRm9yY2luZyBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFJQ19GRlNSOyAgICAgICAvKiBGYXN0IEZvcmNpbmcgU3RhdHVzIFJlZ2lzdGVyICovDQotfSBBVDkxU19BSUMsICogQVQ5MVBTX0FJQzsNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfQUlDIHsNCisJQVQ5MV9SRUcJIEFJQ19TTVJbMzJdOyAJLy8gU291cmNlIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19TVlJbMzJdOyAJLy8gU291cmNlIFZlY3RvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0lWUjsgCS8vIElSUSBWZWN0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19GVlI7IAkvLyBGSVEgVmVjdG9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfSVNSOyAJLy8gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0lQUjsgCS8vIEludGVycnVwdCBQZW5kaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19DSVNSOyAJLy8gQ29yZSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbMl07IAkvLyANCisJQVQ5MV9SRUcJIEFJQ19JRUNSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBDb21tYW5kIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfSURDUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIENvbW1hbmQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19JQ0NSOyAJLy8gSW50ZXJydXB0IENsZWFyIENvbW1hbmQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19JU0NSOyAJLy8gSW50ZXJydXB0IFNldCBDb21tYW5kIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfRU9JQ1I7IAkvLyBFbmQgb2YgSW50ZXJydXB0IENvbW1hbmQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19TUFU7IAkvLyBTcHVyaW91cyBWZWN0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19EQ1I7IAkvLyBEZWJ1ZyBDb250cm9sIFJlZ2lzdGVyIChQcm90ZWN0KQ0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBBSUNfRkZFUjsgCS8vIEZhc3QgRm9yY2luZyBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19GRkRSOyAJLy8gRmFzdCBGb3JjaW5nIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19GRlNSOyAJLy8gRmFzdCBGb3JjaW5nIFN0YXR1cyBSZWdpc3Rlcg0KK30gQVQ5MVNfQUlDLCAqQVQ5MVBTX0FJQzsNCiANCi0vKiAtLS0tLS0tLSBBSUNfU01SIDogKEFJQyBPZmZzZXQ6IDB4MCkgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX1BSSU9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDcgPDwgMCApIC8qIChBSUMpIFByaW9yaXR5IExldmVsICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUlDX1BSSU9SX0xPV0VTVCAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCApICAgICAgLyogKEFJQykgTG93ZXN0IHByaW9yaXR5IGxldmVsICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUlDX1BSSU9SX0hJR0hFU1QgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NyApICAgICAgLyogKEFJQykgSGlnaGVzdCBwcmlvcml0eSBsZXZlbCAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX1NSQ1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgNSApIC8qIChBSUMpIEludGVycnVwdCBTb3VyY2UgVHlwZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FJQ19TUkNUWVBFX0lOVF9ISUdIX0xFVkVMICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgNSApIC8qIChBSUMpIEludGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBIaWdoLWxldmVsIFNlbnNpdGl2ZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FJQ19TUkNUWVBFX0VYVF9MT1dfTEVWRUwgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgNSApIC8qIChBSUMpIEV4dGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBMb3ctbGV2ZWwgU2Vuc2l0aXZlICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUlDX1NSQ1RZUEVfSU5UX1BPU0lUSVZFX0VER0UgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA1ICkgLyogKEFJQykgSW50ZXJuYWwgU291cmNlcyBDb2RlIExhYmVsIFBvc2l0aXZlIEVkZ2UgdHJpZ2dlcmVkICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUlDX1NSQ1RZUEVfRVhUX05FR0FUSVZFX0VER0UgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA1ICkgLyogKEFJQykgRXh0ZXJuYWwgU291cmNlcyBDb2RlIExhYmVsIE5lZ2F0aXZlIEVkZ2UgdHJpZ2dlcmVkICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUlDX1NSQ1RZUEVfSElHSF9MRVZFTCAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCA1ICkgLyogKEFJQykgSW50ZXJuYWwgT3IgRXh0ZXJuYWwgU291cmNlcyBDb2RlIExhYmVsIEhpZ2gtbGV2ZWwgU2Vuc2l0aXZlICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUlDX1NSQ1RZUEVfUE9TSVRJVkVfRURHRSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCA1ICkgLyogKEFJQykgSW50ZXJuYWwgT3IgRXh0ZXJuYWwgU291cmNlcyBDb2RlIExhYmVsIFBvc2l0aXZlIEVkZ2UgdHJpZ2dlcmVkICovDQotLyogLS0tLS0tLS0gQUlDX0NJU1IgOiAoQUlDIE9mZnNldDogMHgxMTQpIEFJQyBDb3JlIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19ORklRICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAvKiAoQUlDKSBORklRIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX05JUlEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApIC8qIChBSUMpIE5JUlEgU3RhdHVzICovDQotLyogLS0tLS0tLS0gQUlDX0RDUiA6IChBSUMgT2Zmc2V0OiAweDEzOCkgQUlDIERlYnVnIENvbnRyb2wgUmVnaXN0ZXIgKFByb3RlY3QpIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19BSUNfRENSX1BST1QgICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgLyogKEFJQykgUHJvdGVjdGlvbiBNb2RlICovDQotI2RlZmluZSBBVDkxQ19BSUNfRENSX0dNU0sgICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgLyogKEFJQykgR2VuZXJhbCBNYXNrICovDQorLy8gLS0tLS0tLS0gQUlDX1NNUiA6IChBSUMgT2Zmc2V0OiAweDApIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BSUNfUFJJT1IgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAgMCkgLy8gKEFJQykgUHJpb3JpdHkgTGV2ZWwNCisjZGVmaW5lIAlBVDkxQ19BSUNfUFJJT1JfTE9XRVNUICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCkgLy8gKEFJQykgTG93ZXN0IHByaW9yaXR5IGxldmVsDQorI2RlZmluZSAJQVQ5MUNfQUlDX1BSSU9SX0hJR0hFU1QgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDcpIC8vIChBSUMpIEhpZ2hlc3QgcHJpb3JpdHkgbGV2ZWwNCisjZGVmaW5lIEFUOTFDX0FJQ19TUkNUWVBFICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA1KSAvLyAoQUlDKSBJbnRlcnJ1cHQgU291cmNlIFR5cGUNCisjZGVmaW5lIAlBVDkxQ19BSUNfU1JDVFlQRV9JTlRfSElHSF9MRVZFTCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA1KSAvLyAoQUlDKSBJbnRlcm5hbCBTb3VyY2VzIENvZGUgTGFiZWwgSGlnaC1sZXZlbCBTZW5zaXRpdmUNCisjZGVmaW5lIAlBVDkxQ19BSUNfU1JDVFlQRV9FWFRfTE9XX0xFVkVMICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA1KSAvLyAoQUlDKSBFeHRlcm5hbCBTb3VyY2VzIENvZGUgTGFiZWwgTG93LWxldmVsIFNlbnNpdGl2ZQ0KKyNkZWZpbmUgCUFUOTFDX0FJQ19TUkNUWVBFX0lOVF9QT1NJVElWRV9FREdFICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChBSUMpIEludGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBQb3NpdGl2ZSBFZGdlIHRyaWdnZXJlZA0KKyNkZWZpbmUgCUFUOTFDX0FJQ19TUkNUWVBFX0VYVF9ORUdBVElWRV9FREdFICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChBSUMpIEV4dGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBOZWdhdGl2ZSBFZGdlIHRyaWdnZXJlZA0KKyNkZWZpbmUgCUFUOTFDX0FJQ19TUkNUWVBFX0hJR0hfTEVWRUwgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDUpIC8vIChBSUMpIEludGVybmFsIE9yIEV4dGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBIaWdoLWxldmVsIFNlbnNpdGl2ZQ0KKyNkZWZpbmUgCUFUOTFDX0FJQ19TUkNUWVBFX1BPU0lUSVZFX0VER0UgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDUpIC8vIChBSUMpIEludGVybmFsIE9yIEV4dGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBQb3NpdGl2ZSBFZGdlIHRyaWdnZXJlZA0KKy8vIC0tLS0tLS0tIEFJQ19DSVNSIDogKEFJQyBPZmZzZXQ6IDB4MTE0KSBBSUMgQ29yZSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQUlDX05GSVEgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChBSUMpIE5GSVEgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19BSUNfTklSUSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKEFJQykgTklSUSBTdGF0dXMNCisvLyAtLS0tLS0tLSBBSUNfRENSIDogKEFJQyBPZmZzZXQ6IDB4MTM4KSBBSUMgRGVidWcgQ29udHJvbCBSZWdpc3RlciAoUHJvdGVjdCkgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BSUNfRENSX1BST1QgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKEFJQykgUHJvdGVjdGlvbiBNb2RlDQorI2RlZmluZSBBVDkxQ19BSUNfRENSX0dNU0sgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKEFJQykgR2VuZXJhbCBNYXNrDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQZXJpcGhlcmFsIERNQSBDb250cm9sbGVyICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfUERDDQotew0KLSAgICBBVDkxX1JFRyBQRENfUlBSOyAgLyogUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBEQ19SQ1I7ICAvKiBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUERDX1RQUjsgIC8qIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUERDX1RDUjsgIC8qIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUERDX1JOUFI7IC8qIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBEQ19STkNSOyAvKiBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQRENfVE5QUjsgLyogVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBEQ19UTkNSOyAvKiBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUERDX1BUQ1I7IC8qIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBEQ19QVFNSOyAvKiBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotfSBBVDkxU19QREMsICogQVQ5MVBTX1BEQzsNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFBlcmlwaGVyYWwgRE1BIENvbnRyb2xsZXINCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19QREMgew0KKwlBVDkxX1JFRwkgUERDX1JQUjsgCS8vIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUERDX1JDUjsgCS8vIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUERDX1RQUjsgCS8vIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBEQ19UQ1I7IAkvLyBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQRENfUk5QUjsgCS8vIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQRENfUk5DUjsgCS8vIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQRENfVE5QUjsgCS8vIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUERDX1ROQ1I7IAkvLyBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBEQ19QVENSOyAJLy8gUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBEQ19QVFNSOyAJLy8gUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KK30gQVQ5MVNfUERDLCAqQVQ5MVBTX1BEQzsNCiANCi0vKiAtLS0tLS0tLSBQRENfUFRDUiA6IChQREMgT2Zmc2V0OiAweDIwKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfUERDX1JYVEVOICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAvKiAoUERDKSBSZWNlaXZlciBUcmFuc2ZlciBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1BEQ19SWFRESVMgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgLyogKFBEQykgUmVjZWl2ZXIgVHJhbnNmZXIgRGlzYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfUERDX1RYVEVOICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDggKSAvKiAoUERDKSBUcmFuc21pdHRlciBUcmFuc2ZlciBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1BEQ19UWFRESVMgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA5ICkgLyogKFBEQykgVHJhbnNtaXR0ZXIgVHJhbnNmZXIgRGlzYWJsZSAqLw0KLS8qIC0tLS0tLS0tIFBEQ19QVFNSIDogKFBEQyBPZmZzZXQ6IDB4MjQpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCisvLyAtLS0tLS0tLSBQRENfUFRDUiA6IChQREMgT2Zmc2V0OiAweDIwKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BEQ19SWFRFTiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoUERDKSBSZWNlaXZlciBUcmFuc2ZlciBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1BEQ19SWFRESVMgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoUERDKSBSZWNlaXZlciBUcmFuc2ZlciBEaXNhYmxlDQorI2RlZmluZSBBVDkxQ19QRENfVFhURU4gICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFBEQykgVHJhbnNtaXR0ZXIgVHJhbnNmZXIgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19QRENfVFhURElTICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLy8gKFBEQykgVHJhbnNtaXR0ZXIgVHJhbnNmZXIgRGlzYWJsZQ0KKy8vIC0tLS0tLS0tIFBEQ19QVFNSIDogKFBEQyBPZmZzZXQ6IDB4MjQpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBEZWJ1ZyBVbml0ICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfREJHVQ0KLXsNCi0gICAgQVQ5MV9SRUcgREJHVV9DUjsgICAgICAgICAvKiBDb250cm9sIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfTVI7ICAgICAgICAgLyogTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX0lFUjsgICAgICAgIC8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9JRFI7ICAgICAgICAvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX0lNUjsgICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfQ1NSOyAgICAgICAgLyogQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9SSFI7ICAgICAgICAvKiBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfVEhSOyAgICAgICAgLyogVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX0JSR1I7ICAgICAgIC8qIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQwWyA3IF07ICAvKiAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX0NJRFI7ICAgICAgIC8qIENoaXAgSUQgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9FWElEOyAgICAgICAvKiBDaGlwIElEIEV4dGVuc2lvbiBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX0ZOVFI7ICAgICAgIC8qIEZvcmNlIE5UUlNUIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMVsgNDUgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9SUFI7ICAgICAgICAvKiBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9SQ1I7ICAgICAgICAvKiBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9UUFI7ICAgICAgICAvKiBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfVENSOyAgICAgICAgLyogVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX1JOUFI7ICAgICAgIC8qIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfUk5DUjsgICAgICAgLyogUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9UTlBSOyAgICAgICAvKiBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9UTkNSOyAgICAgICAvKiBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9QVENSOyAgICAgICAvKiBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX1BUU1I7ICAgICAgIC8qIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi19IEFUOTFTX0RCR1UsICogQVQ5MVBTX0RCR1U7DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBEZWJ1ZyBVbml0DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfREJHVSB7DQorCUFUOTFfUkVHCSBEQkdVX0NSOyAJLy8gQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9NUjsgCS8vIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9DU1I7IAkvLyBDaGFubmVsIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9SSFI7IAkvLyBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1RIUjsgCS8vIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfQlJHUjsgCS8vIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFs3XTsgCS8vIA0KKwlBVDkxX1JFRwkgREJHVV9DSURSOyAJLy8gQ2hpcCBJRCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9FWElEOyAJLy8gQ2hpcCBJRCBFeHRlbnNpb24gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfRk5UUjsgCS8vIEZvcmNlIE5UUlNUIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbNDVdOyAJLy8gDQorCUFUOTFfUkVHCSBEQkdVX1JQUjsgCS8vIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9SQ1I7IAkvLyBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfVFBSOyAJLy8gVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9UQ1I7IAkvLyBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1JOUFI7IAkvLyBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9STkNSOyAJLy8gUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfVE5QUjsgCS8vIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9UTkNSOyAJLy8gVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1BUQ1I7IAkvLyBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9QVFNSOyAJLy8gUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KK30gQVQ5MVNfREJHVSwgKkFUOTFQU19EQkdVOw0KIA0KLS8qIC0tLS0tLS0tIERCR1VfQ1IgOiAoREJHVSBPZmZzZXQ6IDB4MCkgRGVidWcgVW5pdCBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19VU19SU1RSWCAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyICkgIC8qIChEQkdVKSBSZXNldCBSZWNlaXZlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfUlNUVFggICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMyApICAvKiAoREJHVSkgUmVzZXQgVHJhbnNtaXR0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1JYRU4gICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDQgKSAgLyogKERCR1UpIFJlY2VpdmVyIEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfUlhESVMgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNSApICAvKiAoREJHVSkgUmVjZWl2ZXIgRGlzYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfVFhFTiAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNiApICAvKiAoREJHVSkgVHJhbnNtaXR0ZXIgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19VU19UWERJUyAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA3ICkgIC8qIChEQkdVKSBUcmFuc21pdHRlciBEaXNhYmxlICovDQotI2RlZmluZSBBVDkxQ19VU19SU1RTVEEgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgIC8qIChEQkdVKSBSZXNldCBTdGF0dXMgQml0cyAqLw0KLS8qIC0tLS0tLS0tIERCR1VfTVIgOiAoREJHVSBPZmZzZXQ6IDB4NCkgRGVidWcgVW5pdCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19VU19QQVIgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NyA8PCA5ICkgIC8qIChEQkdVKSBQYXJpdHkgdHlwZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX1BBUl9FVkVOICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgOSApICAvKiAoREJHVSkgRXZlbiBQYXJpdHkgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19QQVJfT0REICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDkgKSAgLyogKERCR1UpIE9kZCBQYXJpdHkgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19QQVJfU1BBQ0UgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDkgKSAgLyogKERCR1UpIFBhcml0eSBmb3JjZWQgdG8gMCAoU3BhY2UpICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfUEFSX01BUksgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCA5ICkgIC8qIChEQkdVKSBQYXJpdHkgZm9yY2VkIHRvIDEgKE1hcmspICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfUEFSX05PTkUgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NCA8PCA5ICkgIC8qIChEQkdVKSBObyBQYXJpdHkgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19QQVJfTVVMVElfRFJPUCAgICAoICggdW5zaWduZWQgaW50ICkgMHg2IDw8IDkgKSAgLyogKERCR1UpIE11bHRpLWRyb3AgbW9kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfQ0hNT0RFICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTQgKSAvKiAoREJHVSkgQ2hhbm5lbCBNb2RlICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfQ0hNT0RFX05PUk1BTCAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAxNCApIC8qIChEQkdVKSBOb3JtYWwgTW9kZTogVGhlIFVTQVJUIGNoYW5uZWwgb3BlcmF0ZXMgYXMgYW4gUlgvVFggVVNBUlQuICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfQ0hNT0RFX0FVVE8gICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNCApIC8qIChEQkdVKSBBdXRvbWF0aWMgRWNobzogUmVjZWl2ZXIgRGF0YSBJbnB1dCBpcyBjb25uZWN0ZWQgdG8gdGhlIFRYRCBwaW4uICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfQ0hNT0RFX0xPQ0FMICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCAxNCApIC8qIChEQkdVKSBMb2NhbCBMb29wYmFjazogVHJhbnNtaXR0ZXIgT3V0cHV0IFNpZ25hbCBpcyBjb25uZWN0ZWQgdG8gUmVjZWl2ZXIgSW5wdXQgU2lnbmFsLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX0NITU9ERV9SRU1PVEUgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTQgKSAvKiAoREJHVSkgUmVtb3RlIExvb3BiYWNrOiBSWEQgcGluIGlzIGludGVybmFsbHkgY29ubmVjdGVkIHRvIFRYRCBwaW4uICovDQotLyogLS0tLS0tLS0gREJHVV9JRVIgOiAoREJHVSBPZmZzZXQ6IDB4OCkgRGVidWcgVW5pdCBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19VU19SWFJEWSAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgIC8qIChEQkdVKSBSWFJEWSBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1RYUkRZICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEgKSAgLyogKERCR1UpIFRYUkRZIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfRU5EUlggICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMyApICAvKiAoREJHVSkgRW5kIG9mIFJlY2VpdmUgVHJhbnNmZXIgSW50ZXJydXB0ICovDQotI2RlZmluZSBBVDkxQ19VU19FTkRUWCAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA0ICkgIC8qIChEQkdVKSBFbmQgb2YgVHJhbnNtaXQgSW50ZXJydXB0ICovDQotI2RlZmluZSBBVDkxQ19VU19PVlJFICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA1ICkgIC8qIChEQkdVKSBPdmVycnVuIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfRlJBTUUgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNiApICAvKiAoREJHVSkgRnJhbWluZyBFcnJvciBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1BBUkUgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDcgKSAgLyogKERCR1UpIFBhcml0eSBFcnJvciBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1RYRU1QVFkgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDkgKSAgLyogKERCR1UpIFRYRU1QVFkgSW50ZXJydXB0ICovDQotI2RlZmluZSBBVDkxQ19VU19UWEJVRkUgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMSApIC8qIChEQkdVKSBUWEJVRkUgSW50ZXJydXB0ICovDQotI2RlZmluZSBBVDkxQ19VU19SWEJVRkYgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMiApIC8qIChEQkdVKSBSWEJVRkYgSW50ZXJydXB0ICovDQotI2RlZmluZSBBVDkxQ19VU19DT01NX1RYICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzMCApIC8qIChEQkdVKSBDT01NX1RYIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfQ09NTV9SWCAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMzEgKSAvKiAoREJHVSkgQ09NTV9SWCBJbnRlcnJ1cHQgKi8NCi0vKiAtLS0tLS0tLSBEQkdVX0lEUiA6IChEQkdVIE9mZnNldDogMHhjKSBEZWJ1ZyBVbml0IEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gREJHVV9JTVIgOiAoREJHVSBPZmZzZXQ6IDB4MTApIERlYnVnIFVuaXQgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBEQkdVX0NTUiA6IChEQkdVIE9mZnNldDogMHgxNCkgRGVidWcgVW5pdCBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIERCR1VfRk5UUiA6IChEQkdVIE9mZnNldDogMHg0OCkgRGVidWcgVW5pdCBGT1JDRV9OVFJTVCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfRk9SQ0VfTlRSU1QgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgLyogKERCR1UpIEZvcmNlIE5UUlNUIGluIEpUQUcgKi8NCisvLyAtLS0tLS0tLSBEQkdVX0NSIDogKERCR1UgT2Zmc2V0OiAweDApIERlYnVnIFVuaXQgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VTX1JTVFJYICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoREJHVSkgUmVzZXQgUmVjZWl2ZXINCisjZGVmaW5lIEFUOTFDX1VTX1JTVFRYICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoREJHVSkgUmVzZXQgVHJhbnNtaXR0ZXINCisjZGVmaW5lIEFUOTFDX1VTX1JYRU4gICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoREJHVSkgUmVjZWl2ZXIgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19VU19SWERJUyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKERCR1UpIFJlY2VpdmVyIERpc2FibGUNCisjZGVmaW5lIEFUOTFDX1VTX1RYRU4gICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoREJHVSkgVHJhbnNtaXR0ZXIgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19VU19UWERJUyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKERCR1UpIFRyYW5zbWl0dGVyIERpc2FibGUNCisjZGVmaW5lIEFUOTFDX1VTX1JTVFNUQSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoREJHVSkgUmVzZXQgU3RhdHVzIEJpdHMNCisvLyAtLS0tLS0tLSBEQkdVX01SIDogKERCR1UgT2Zmc2V0OiAweDQpIERlYnVnIFVuaXQgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VTX1BBUiAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8ICA5KSAvLyAoREJHVSkgUGFyaXR5IHR5cGUNCisjZGVmaW5lIAlBVDkxQ19VU19QQVJfRVZFTiAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgOSkgLy8gKERCR1UpIEV2ZW4gUGFyaXR5DQorI2RlZmluZSAJQVQ5MUNfVVNfUEFSX09ERCAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChEQkdVKSBPZGQgUGFyaXR5DQorI2RlZmluZSAJQVQ5MUNfVVNfUEFSX1NQQUNFICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDkpIC8vIChEQkdVKSBQYXJpdHkgZm9yY2VkIHRvIDAgKFNwYWNlKQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1BBUl9NQVJLICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA5KSAvLyAoREJHVSkgUGFyaXR5IGZvcmNlZCB0byAxIChNYXJrKQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1BBUl9OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg0IDw8ICA5KSAvLyAoREJHVSkgTm8gUGFyaXR5DQorI2RlZmluZSAJQVQ5MUNfVVNfUEFSX01VTFRJX0RST1AgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDYgPDwgIDkpIC8vIChEQkdVKSBNdWx0aS1kcm9wIG1vZGUNCisjZGVmaW5lIEFUOTFDX1VTX0NITU9ERSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE0KSAvLyAoREJHVSkgQ2hhbm5lbCBNb2RlDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0hNT0RFX05PUk1BTCAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMTQpIC8vIChEQkdVKSBOb3JtYWwgTW9kZTogVGhlIFVTQVJUIGNoYW5uZWwgb3BlcmF0ZXMgYXMgYW4gUlgvVFggVVNBUlQuDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0hNT0RFX0FVVE8gICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTQpIC8vIChEQkdVKSBBdXRvbWF0aWMgRWNobzogUmVjZWl2ZXIgRGF0YSBJbnB1dCBpcyBjb25uZWN0ZWQgdG8gdGhlIFRYRCBwaW4uDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0hNT0RFX0xPQ0FMICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMTQpIC8vIChEQkdVKSBMb2NhbCBMb29wYmFjazogVHJhbnNtaXR0ZXIgT3V0cHV0IFNpZ25hbCBpcyBjb25uZWN0ZWQgdG8gUmVjZWl2ZXIgSW5wdXQgU2lnbmFsLg0KKyNkZWZpbmUgCUFUOTFDX1VTX0NITU9ERV9SRU1PVEUgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE0KSAvLyAoREJHVSkgUmVtb3RlIExvb3BiYWNrOiBSWEQgcGluIGlzIGludGVybmFsbHkgY29ubmVjdGVkIHRvIFRYRCBwaW4uDQorLy8gLS0tLS0tLS0gREJHVV9JRVIgOiAoREJHVSBPZmZzZXQ6IDB4OCkgRGVidWcgVW5pdCBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVVNfUlhSRFkgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChEQkdVKSBSWFJEWSBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX1RYUkRZICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoREJHVSkgVFhSRFkgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19FTkRSWCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKERCR1UpIEVuZCBvZiBSZWNlaXZlIFRyYW5zZmVyIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfRU5EVFggICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChEQkdVKSBFbmQgb2YgVHJhbnNtaXQgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19PVlJFICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKERCR1UpIE92ZXJydW4gSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19GUkFNRSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLy8gKERCR1UpIEZyYW1pbmcgRXJyb3IgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19QQVJFICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKERCR1UpIFBhcml0eSBFcnJvciBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX1RYRU1QVFkgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvLyAoREJHVSkgVFhFTVBUWSBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX1RYQlVGRSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDExKSAvLyAoREJHVSkgVFhCVUZFIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfUlhCVUZGICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8vIChEQkdVKSBSWEJVRkYgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19DT01NX1RYICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAzMCkgLy8gKERCR1UpIENPTU1fVFggSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19DT01NX1JYICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAzMSkgLy8gKERCR1UpIENPTU1fUlggSW50ZXJydXB0DQorLy8gLS0tLS0tLS0gREJHVV9JRFIgOiAoREJHVSBPZmZzZXQ6IDB4YykgRGVidWcgVW5pdCBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBEQkdVX0lNUiA6IChEQkdVIE9mZnNldDogMHgxMCkgRGVidWcgVW5pdCBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBEQkdVX0NTUiA6IChEQkdVIE9mZnNldDogMHgxNCkgRGVidWcgVW5pdCBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBEQkdVX0ZOVFIgOiAoREJHVSBPZmZzZXQ6IDB4NDgpIERlYnVnIFVuaXQgRk9SQ0VfTlRSU1QgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VU19GT1JDRV9OVFJTVCAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKERCR1UpIEZvcmNlIE5UUlNUIGluIEpUQUcNCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFBhcmFsbGVsIElucHV0IE91dHB1dCBDb250cm9sZXIgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLXR5cGVkZWYgc3RydWN0IF9BVDkxU19QSU8NCi17DQotICAgIEFUOTFfUkVHIFBJT19QRVI7ICAgICAgICAvKiBQSU8gRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT19QRFI7ICAgICAgICAvKiBQSU8gRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9fUFNSOyAgICAgICAgLyogUElPIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDBbIDEgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgUElPX09FUjsgICAgICAgIC8qIE91dHB1dCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPX09EUjsgICAgICAgIC8qIE91dHB1dCBEaXNhYmxlIFJlZ2lzdGVyciAqLw0KLSAgICBBVDkxX1JFRyBQSU9fT1NSOyAgICAgICAgLyogT3V0cHV0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDFbIDEgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgUElPX0lGRVI7ICAgICAgIC8qIElucHV0IEZpbHRlciBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPX0lGRFI7ICAgICAgIC8qIElucHV0IEZpbHRlciBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT19JRlNSOyAgICAgICAvKiBJbnB1dCBGaWx0ZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMlsgMSBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBQSU9fU09EUjsgICAgICAgLyogU2V0IE91dHB1dCBEYXRhIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT19DT0RSOyAgICAgICAvKiBDbGVhciBPdXRwdXQgRGF0YSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9fT0RTUjsgICAgICAgLyogT3V0cHV0IERhdGEgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT19QRFNSOyAgICAgICAvKiBQaW4gRGF0YSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPX0lFUjsgICAgICAgIC8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPX0lEUjsgICAgICAgIC8qIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT19JTVI7ICAgICAgICAvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9fSVNSOyAgICAgICAgLyogSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9fTURFUjsgICAgICAgLyogTXVsdGktZHJpdmVyIEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9fTUREUjsgICAgICAgLyogTXVsdGktZHJpdmVyIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPX01EU1I7ICAgICAgIC8qIE11bHRpLWRyaXZlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQzWyAxIF07IC8qICovDQotICAgIEFUOTFfUkVHIFBJT19QUFVEUjsgICAgICAvKiBQdWxsLXVwIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPX1BQVUVSOyAgICAgIC8qIFB1bGwtdXAgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT19QUFVTUjsgICAgICAvKiBQdWxsLXVwIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDRbIDEgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgUElPX0FTUjsgICAgICAgIC8qIFNlbGVjdCBBIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT19CU1I7ICAgICAgICAvKiBTZWxlY3QgQiBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9fQUJTUjsgICAgICAgLyogQUIgU2VsZWN0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDVbIDkgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgUElPX09XRVI7ICAgICAgIC8qIE91dHB1dCBXcml0ZSBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPX09XRFI7ICAgICAgIC8qIE91dHB1dCBXcml0ZSBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT19PV1NSOyAgICAgICAvKiBPdXRwdXQgV3JpdGUgU3RhdHVzIFJlZ2lzdGVyICovDQotfSBBVDkxU19QSU8sICogQVQ5MVBTX1BJTzsNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFBhcmFsbGVsIElucHV0IE91dHB1dCBDb250cm9sZXINCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19QSU8gew0KKwlBVDkxX1JFRwkgUElPX1BFUjsgCS8vIFBJTyBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19QRFI7IAkvLyBQSU8gRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX1BTUjsgCS8vIFBJTyBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUElPX09FUjsgCS8vIE91dHB1dCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19PRFI7IAkvLyBPdXRwdXQgRGlzYWJsZSBSZWdpc3RlcnINCisJQVQ5MV9SRUcJIFBJT19PU1I7IAkvLyBPdXRwdXQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT19JRkVSOyAJLy8gSW5wdXQgRmlsdGVyIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX0lGRFI7IAkvLyBJbnB1dCBGaWx0ZXIgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX0lGU1I7IAkvLyBJbnB1dCBGaWx0ZXIgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDJbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT19TT0RSOyAJLy8gU2V0IE91dHB1dCBEYXRhIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fQ09EUjsgCS8vIENsZWFyIE91dHB1dCBEYXRhIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fT0RTUjsgCS8vIE91dHB1dCBEYXRhIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX1BEU1I7IAkvLyBQaW4gRGF0YSBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX0lTUjsgCS8vIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19NREVSOyAJLy8gTXVsdGktZHJpdmVyIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX01ERFI7IAkvLyBNdWx0aS1kcml2ZXIgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX01EU1I7IAkvLyBNdWx0aS1kcml2ZXIgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDNbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT19QUFVEUjsgCS8vIFB1bGwtdXAgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX1BQVUVSOyAJLy8gUHVsbC11cCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19QUFVTUjsgCS8vIFB1bGwtdXAgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDRbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT19BU1I7IAkvLyBTZWxlY3QgQSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX0JTUjsgCS8vIFNlbGVjdCBCIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fQUJTUjsgCS8vIEFCIFNlbGVjdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkNVs5XTsgCS8vIA0KKwlBVDkxX1JFRwkgUElPX09XRVI7IAkvLyBPdXRwdXQgV3JpdGUgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fT1dEUjsgCS8vIE91dHB1dCBXcml0ZSBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fT1dTUjsgCS8vIE91dHB1dCBXcml0ZSBTdGF0dXMgUmVnaXN0ZXINCit9IEFUOTFTX1BJTywgKkFUOTFQU19QSU87DQogDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBDbG9jayBHZW5lcmF0b3IgQ29udHJvbGVyICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfQ0tHUg0KLXsNCi0gICAgQVQ5MV9SRUcgQ0tHUl9NT1I7ICAgICAgIC8qIE1haW4gT3NjaWxsYXRvciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBDS0dSX01DRlI7ICAgICAgLyogTWFpbiBDbG9jayAgRnJlcXVlbmN5IFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMFsgMSBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBDS0dSX1BMTFI7ICAgICAgLyogUExMIFJlZ2lzdGVyICovDQotfSBBVDkxU19DS0dSLCAqIEFUOTFQU19DS0dSOw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQ2xvY2sgR2VuZXJhdG9yIENvbnRyb2xlcg0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX0NLR1Igew0KKwlBVDkxX1JFRwkgQ0tHUl9NT1I7IAkvLyBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIENLR1JfTUNGUjsgCS8vIE1haW4gQ2xvY2sgIEZyZXF1ZW5jeSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBDS0dSX1BMTFI7IAkvLyBQTEwgUmVnaXN0ZXINCit9IEFUOTFTX0NLR1IsICpBVDkxUFNfQ0tHUjsNCiANCi0vKiAtLS0tLS0tLSBDS0dSX01PUiA6IChDS0dSIE9mZnNldDogMHgwKSBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0NLR1JfTU9TQ0VOICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgICAgLyogKENLR1IpIE1haW4gT3NjaWxsYXRvciBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX0NLR1JfT1NDQllQQVNTICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgICAgLyogKENLR1IpIE1haW4gT3NjaWxsYXRvciBCeXBhc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0NLR1JfT1NDT1VOVCAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RkYgPDwgOCApICAgLyogKENLR1IpIE1haW4gT3NjaWxsYXRvciBTdGFydC11cCBUaW1lICovDQotLyogLS0tLS0tLS0gQ0tHUl9NQ0ZSIDogKENLR1IgT2Zmc2V0OiAweDQpIE1haW4gQ2xvY2sgRnJlcXVlbmN5IFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19DS0dSX01BSU5GICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGRkYgPDwgMCApIC8qIChDS0dSKSBNYWluIENsb2NrIEZyZXF1ZW5jeSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0tHUl9NQUlOUkRZICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE2ICkgICAvKiAoQ0tHUikgTWFpbiBDbG9jayBSZWFkeSAqLw0KLS8qIC0tLS0tLS0tIENLR1JfUExMUiA6IChDS0dSIE9mZnNldDogMHhjKSBQTEwgQiBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0tHUl9ESVYgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRiA8PCAwICkgICAvKiAoQ0tHUikgRGl2aWRlciBTZWxlY3RlZCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0NLR1JfRElWXzAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwICkgICAgICAgICAvKiAoQ0tHUikgRGl2aWRlciBvdXRwdXQgaXMgMCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0NLR1JfRElWX0JZUEFTUyAgICAoICggdW5zaWduZWQgaW50ICkgMHgxICkgICAgICAgICAvKiAoQ0tHUikgRGl2aWRlciBpcyBieXBhc3NlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0tHUl9QTExDT1VOVCAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzRiA8PCA4ICkgICAvKiAoQ0tHUikgUExMIENvdW50ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NLR1JfT1VUICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAxNCApICAgLyogKENLR1IpIFBMTCBPdXRwdXQgRnJlcXVlbmN5IFJhbmdlICovDQotI2RlZmluZSAgICAgQVQ5MUNfQ0tHUl9PVVRfMCAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMTQgKSAgIC8qIChDS0dSKSBQbGVhc2UgcmVmZXIgdG8gdGhlIFBMTCBkYXRhc2hlZXQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19DS0dSX09VVF8xICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNCApICAgLyogKENLR1IpIFBsZWFzZSByZWZlciB0byB0aGUgUExMIGRhdGFzaGVldCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0NLR1JfT1VUXzIgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDE0ICkgICAvKiAoQ0tHUikgUGxlYXNlIHJlZmVyIHRvIHRoZSBQTEwgZGF0YXNoZWV0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfQ0tHUl9PVVRfMyAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTQgKSAgIC8qIChDS0dSKSBQbGVhc2UgcmVmZXIgdG8gdGhlIFBMTCBkYXRhc2hlZXQgKi8NCi0jZGVmaW5lIEFUOTFDX0NLR1JfTVVMICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4N0ZGIDw8IDE2ICkgLyogKENLR1IpIFBMTCBNdWx0aXBsaWVyICovDQotI2RlZmluZSBBVDkxQ19DS0dSX1VTQkRJViAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMjggKSAgIC8qIChDS0dSKSBEaXZpZGVyIGZvciBVU0IgQ2xvY2tzICovDQotI2RlZmluZSAgICAgQVQ5MUNfQ0tHUl9VU0JESVZfMCAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMjggKSAgIC8qIChDS0dSKSBEaXZpZGVyIG91dHB1dCBpcyBQTEwgY2xvY2sgb3V0cHV0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfQ0tHUl9VU0JESVZfMSAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjggKSAgIC8qIChDS0dSKSBEaXZpZGVyIG91dHB1dCBpcyBQTEwgY2xvY2sgb3V0cHV0IGRpdmlkZWQgYnkgMiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0NLR1JfVVNCRElWXzIgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDI4ICkgICAvKiAoQ0tHUikgRGl2aWRlciBvdXRwdXQgaXMgUExMIGNsb2NrIG91dHB1dCBkaXZpZGVkIGJ5IDQgKi8NCisvLyAtLS0tLS0tLSBDS0dSX01PUiA6IChDS0dSIE9mZnNldDogMHgwKSBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DS0dSX01PU0NFTiAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKENLR1IpIE1haW4gT3NjaWxsYXRvciBFbmFibGUNCisjZGVmaW5lIEFUOTFDX0NLR1JfT1NDQllQQVNTICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoQ0tHUikgTWFpbiBPc2NpbGxhdG9yIEJ5cGFzcw0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9PU0NPVU5UICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8ICA4KSAvLyAoQ0tHUikgTWFpbiBPc2NpbGxhdG9yIFN0YXJ0LXVwIFRpbWUNCisvLyAtLS0tLS0tLSBDS0dSX01DRlIgOiAoQ0tHUiBPZmZzZXQ6IDB4NCkgTWFpbiBDbG9jayBGcmVxdWVuY3kgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DS0dSX01BSU5GICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGRiA8PCAgMCkgLy8gKENLR1IpIE1haW4gQ2xvY2sgRnJlcXVlbmN5DQorI2RlZmluZSBBVDkxQ19DS0dSX01BSU5SRFkgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKENLR1IpIE1haW4gQ2xvY2sgUmVhZHkNCisvLyAtLS0tLS0tLSBDS0dSX1BMTFIgOiAoQ0tHUiBPZmZzZXQ6IDB4YykgUExMIEIgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DS0dSX0RJViAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgIDApIC8vIChDS0dSKSBEaXZpZGVyIFNlbGVjdGVkDQorI2RlZmluZSAJQVQ5MUNfQ0tHUl9ESVZfMCAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCkgLy8gKENLR1IpIERpdmlkZXIgb3V0cHV0IGlzIDANCisjZGVmaW5lIAlBVDkxQ19DS0dSX0RJVl9CWVBBU1MgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxKSAvLyAoQ0tHUikgRGl2aWRlciBpcyBieXBhc3NlZA0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9QTExDT1VOVCAgICgodW5zaWduZWQgaW50KSAweDNGIDw8ICA4KSAvLyAoQ0tHUikgUExMIENvdW50ZXINCisjZGVmaW5lIEFUOTFDX0NLR1JfT1VUICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE0KSAvLyAoQ0tHUikgUExMIE91dHB1dCBGcmVxdWVuY3kgUmFuZ2UNCisjZGVmaW5lIAlBVDkxQ19DS0dSX09VVF8wICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDE0KSAvLyAoQ0tHUikgUGxlYXNlIHJlZmVyIHRvIHRoZSBQTEwgZGF0YXNoZWV0DQorI2RlZmluZSAJQVQ5MUNfQ0tHUl9PVVRfMSAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNCkgLy8gKENLR1IpIFBsZWFzZSByZWZlciB0byB0aGUgUExMIGRhdGFzaGVldA0KKyNkZWZpbmUgCUFUOTFDX0NLR1JfT1VUXzIgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMTQpIC8vIChDS0dSKSBQbGVhc2UgcmVmZXIgdG8gdGhlIFBMTCBkYXRhc2hlZXQNCisjZGVmaW5lIAlBVDkxQ19DS0dSX09VVF8zICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE0KSAvLyAoQ0tHUikgUGxlYXNlIHJlZmVyIHRvIHRoZSBQTEwgZGF0YXNoZWV0DQorI2RlZmluZSBBVDkxQ19DS0dSX01VTCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4N0ZGIDw8IDE2KSAvLyAoQ0tHUikgUExMIE11bHRpcGxpZXINCisjZGVmaW5lIEFUOTFDX0NLR1JfVVNCRElWICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDI4KSAvLyAoQ0tHUikgRGl2aWRlciBmb3IgVVNCIENsb2Nrcw0KKyNkZWZpbmUgCUFUOTFDX0NLR1JfVVNCRElWXzAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMjgpIC8vIChDS0dSKSBEaXZpZGVyIG91dHB1dCBpcyBQTEwgY2xvY2sgb3V0cHV0DQorI2RlZmluZSAJQVQ5MUNfQ0tHUl9VU0JESVZfMSAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyOCkgLy8gKENLR1IpIERpdmlkZXIgb3V0cHV0IGlzIFBMTCBjbG9jayBvdXRwdXQgZGl2aWRlZCBieSAyDQorI2RlZmluZSAJQVQ5MUNfQ0tHUl9VU0JESVZfMiAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAyOCkgLy8gKENLR1IpIERpdmlkZXIgb3V0cHV0IGlzIFBMTCBjbG9jayBvdXRwdXQgZGl2aWRlZCBieSA0DQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQb3dlciBNYW5hZ2VtZW50IENvbnRyb2xlciAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotdHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1BNQw0KLXsNCi0gICAgQVQ5MV9SRUcgUE1DX1NDRVI7ICAgICAgIC8qIFN5c3RlbSBDbG9jayBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUE1DX1NDRFI7ICAgICAgIC8qIFN5c3RlbSBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBNQ19TQ1NSOyAgICAgICAvKiBTeXN0ZW0gQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMFsgMSBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBQTUNfUENFUjsgICAgICAgLyogUGVyaXBoZXJhbCBDbG9jayBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUE1DX1BDRFI7ICAgICAgIC8qIFBlcmlwaGVyYWwgQ2xvY2sgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQTUNfUENTUjsgICAgICAgLyogUGVyaXBoZXJhbCBDbG9jayBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQxWyAxIF07IC8qICovDQotICAgIEFUOTFfUkVHIFBNQ19NT1I7ICAgICAgICAvKiBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUE1DX01DRlI7ICAgICAgIC8qIE1haW4gQ2xvY2sgIEZyZXF1ZW5jeSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDJbIDEgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgUE1DX1BMTFI7ICAgICAgIC8qIFBMTCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQTUNfTUNLUjsgICAgICAgLyogTWFzdGVyIENsb2NrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkM1sgMyBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBQTUNfUENLUlsgNCBdOyAgLyogUHJvZ3JhbW1hYmxlIENsb2NrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkNFsgNCBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBQTUNfSUVSOyAgICAgICAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQTUNfSURSOyAgICAgICAgLyogSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUE1DX1NSOyAgICAgICAgIC8qIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQTUNfSU1SOyAgICAgICAgLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi19IEFUOTFTX1BNQywgKiBBVDkxUFNfUE1DOw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUG93ZXIgTWFuYWdlbWVudCBDb250cm9sZXINCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19QTUMgew0KKwlBVDkxX1JFRwkgUE1DX1NDRVI7IAkvLyBTeXN0ZW0gQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfU0NEUjsgCS8vIFN5c3RlbSBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfU0NTUjsgCS8vIFN5c3RlbSBDbG9jayBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUE1DX1BDRVI7IAkvLyBQZXJpcGhlcmFsIENsb2NrIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUE1DX1BDRFI7IAkvLyBQZXJpcGhlcmFsIENsb2NrIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19QQ1NSOyAJLy8gUGVyaXBoZXJhbCBDbG9jayBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMVsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUE1DX01PUjsgCS8vIE1haW4gT3NjaWxsYXRvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUE1DX01DRlI7IAkvLyBNYWluIENsb2NrICBGcmVxdWVuY3kgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMlsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUE1DX1BMTFI7IAkvLyBQTEwgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19NQ0tSOyAJLy8gTWFzdGVyIENsb2NrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDNbM107IAkvLyANCisJQVQ5MV9SRUcJIFBNQ19QQ0tSWzRdOyAJLy8gUHJvZ3JhbW1hYmxlIENsb2NrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDRbNF07IAkvLyANCisJQVQ5MV9SRUcJIFBNQ19JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19TUjsgCS8vIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUE1DX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorfSBBVDkxU19QTUMsICpBVDkxUFNfUE1DOw0KIA0KLS8qIC0tLS0tLS0tIFBNQ19TQ0VSIDogKFBNQyBPZmZzZXQ6IDB4MCkgU3lzdGVtIENsb2NrIEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDSyAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgIC8qIChQTUMpIFByb2Nlc3NvciBDbG9jayAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1VEUCAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA3ICkgIC8qIChQTUMpIFVTQiBEZXZpY2UgUG9ydCBDbG9jayAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDSzAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgIC8qIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19QQ0sxICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOSApICAvKiAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0ICovDQotI2RlZmluZSBBVDkxQ19QTUNfUENLMiAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEwICkgLyogKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDSzMgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMSApIC8qIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgKi8NCi0vKiAtLS0tLS0tLSBQTUNfU0NEUiA6IChQTUMgT2Zmc2V0OiAweDQpIFN5c3RlbSBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gUE1DX1NDU1IgOiAoUE1DIE9mZnNldDogMHg4KSBTeXN0ZW0gQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQ0tHUl9NT1IgOiAoUE1DIE9mZnNldDogMHgyMCkgTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQ0tHUl9NQ0ZSIDogKFBNQyBPZmZzZXQ6IDB4MjQpIE1haW4gQ2xvY2sgRnJlcXVlbmN5IFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQ0tHUl9QTExSIDogKFBNQyBPZmZzZXQ6IDB4MmMpIFBMTCBCIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gUE1DX01DS1IgOiAoUE1DIE9mZnNldDogMHgzMCkgTWFzdGVyIENsb2NrIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19QTUNfQ1NTICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDAgKSAvKiAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgU2VsZWN0aW9uICovDQotI2RlZmluZSAgICAgQVQ5MUNfUE1DX0NTU19TTE9XX0NMSyAgICAoICggdW5zaWduZWQgaW50ICkgMHgwICkgICAgICAvKiAoUE1DKSBTbG93IENsb2NrIGlzIHNlbGVjdGVkICovDQotI2RlZmluZSAgICAgQVQ5MUNfUE1DX0NTU19NQUlOX0NMSyAgICAoICggdW5zaWduZWQgaW50ICkgMHgxICkgICAgICAvKiAoUE1DKSBNYWluIENsb2NrIGlzIHNlbGVjdGVkICovDQotI2RlZmluZSAgICAgQVQ5MUNfUE1DX0NTU19QTExfQ0xLICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzICkgICAgICAvKiAoUE1DKSBDbG9jayBmcm9tIFBMTCBpcyBzZWxlY3RlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1BSRVMgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NyA8PCAyICkgLyogKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIFByZXNjYWxlciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1BNQ19QUkVTX0NMSyAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAyICkgLyogKFBNQykgU2VsZWN0ZWQgY2xvY2sgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19QTUNfUFJFU19DTEtfMiAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMiApIC8qIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgMiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1BNQ19QUkVTX0NMS180ICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCAyICkgLyogKFBNQykgU2VsZWN0ZWQgY2xvY2sgZGl2aWRlZCBieSA0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfUE1DX1BSRVNfQ0xLXzggICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDIgKSAvKiAoUE1DKSBTZWxlY3RlZCBjbG9jayBkaXZpZGVkIGJ5IDggKi8NCi0jZGVmaW5lICAgICBBVDkxQ19QTUNfUFJFU19DTEtfMTYgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDQgPDwgMiApIC8qIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgMTYgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19QTUNfUFJFU19DTEtfMzIgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDUgPDwgMiApIC8qIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgMzIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19QTUNfUFJFU19DTEtfNjQgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDYgPDwgMiApIC8qIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgNjQgKi8NCi0vKiAtLS0tLS0tLSBQTUNfUENLUiA6IChQTUMgT2Zmc2V0OiAweDQwKSBQcm9ncmFtbWFibGUgQ2xvY2sgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBQTUNfSUVSIDogKFBNQyBPZmZzZXQ6IDB4NjApIFBNQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19QTUNfTU9TQ1MgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgLyogKFBNQykgTU9TQyBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzayAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX0xPQ0sgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyICkgIC8qIChQTUMpIFBMTCBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzayAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX01DS1JEWSAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzICkgIC8qIChQTUMpIE1DS19SRFkgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sgKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19QQ0swUkRZICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOCApICAvKiAoUE1DKSBQQ0swX1JEWSBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzayAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDSzFSRFkgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA5ICkgIC8qIChQTUMpIFBDSzFfUkRZIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrICovDQotI2RlZmluZSBBVDkxQ19QTUNfUENLMlJEWSAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEwICkgLyogKFBNQykgUENLMl9SRFkgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sgKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19QQ0szUkRZICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTEgKSAvKiAoUE1DKSBQQ0szX1JEWSBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzayAqLw0KLS8qIC0tLS0tLS0tIFBNQ19JRFIgOiAoUE1DIE9mZnNldDogMHg2NCkgUE1DIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gUE1DX1NSIDogKFBNQyBPZmZzZXQ6IDB4NjgpIFBNQyBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBQTUNfSU1SIDogKFBNQyBPZmZzZXQ6IDB4NmMpIFBNQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSAqLw0KKy8vIC0tLS0tLS0tIFBNQ19TQ0VSIDogKFBNQyBPZmZzZXQ6IDB4MCkgU3lzdGVtIENsb2NrIEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0sgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoUE1DKSBQcm9jZXNzb3IgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BNQ19VRFAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoUE1DKSBVU0IgRGV2aWNlIFBvcnQgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0swICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0DQorI2RlZmluZSBBVDkxQ19QTUNfUENLMSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLy8gKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dA0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDSzIgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQNCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0szICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDExKSAvLyAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0DQorLy8gLS0tLS0tLS0gUE1DX1NDRFIgOiAoUE1DIE9mZnNldDogMHg0KSBTeXN0ZW0gQ2xvY2sgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQTUNfU0NTUiA6IChQTUMgT2Zmc2V0OiAweDgpIFN5c3RlbSBDbG9jayBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQ0tHUl9NT1IgOiAoUE1DIE9mZnNldDogMHgyMCkgTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIENLR1JfTUNGUiA6IChQTUMgT2Zmc2V0OiAweDI0KSBNYWluIENsb2NrIEZyZXF1ZW5jeSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBDS0dSX1BMTFIgOiAoUE1DIE9mZnNldDogMHgyYykgUExMIEIgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUE1DX01DS1IgOiAoUE1DIE9mZnNldDogMHgzMCkgTWFzdGVyIENsb2NrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUE1DX0NTUyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDApIC8vIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19QTUNfQ1NTX1NMT1dfQ0xLICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDApIC8vIChQTUMpIFNsb3cgQ2xvY2sgaXMgc2VsZWN0ZWQNCisjZGVmaW5lIAlBVDkxQ19QTUNfQ1NTX01BSU5fQ0xLICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEpIC8vIChQTUMpIE1haW4gQ2xvY2sgaXMgc2VsZWN0ZWQNCisjZGVmaW5lIAlBVDkxQ19QTUNfQ1NTX1BMTF9DTEsgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMpIC8vIChQTUMpIENsb2NrIGZyb20gUExMIGlzIHNlbGVjdGVkDQorI2RlZmluZSBBVDkxQ19QTUNfUFJFUyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAgMikgLy8gKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIFByZXNjYWxlcg0KKyNkZWZpbmUgCUFUOTFDX1BNQ19QUkVTX0NMSyAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDIpIC8vIChQTUMpIFNlbGVjdGVkIGNsb2NrDQorI2RlZmluZSAJQVQ5MUNfUE1DX1BSRVNfQ0xLXzIgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFBNQykgU2VsZWN0ZWQgY2xvY2sgZGl2aWRlZCBieSAyDQorI2RlZmluZSAJQVQ5MUNfUE1DX1BSRVNfQ0xLXzQgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgMikgLy8gKFBNQykgU2VsZWN0ZWQgY2xvY2sgZGl2aWRlZCBieSA0DQorI2RlZmluZSAJQVQ5MUNfUE1DX1BSRVNfQ0xLXzggICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgMikgLy8gKFBNQykgU2VsZWN0ZWQgY2xvY2sgZGl2aWRlZCBieSA4DQorI2RlZmluZSAJQVQ5MUNfUE1DX1BSRVNfQ0xLXzE2ICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NCA8PCAgMikgLy8gKFBNQykgU2VsZWN0ZWQgY2xvY2sgZGl2aWRlZCBieSAxNg0KKyNkZWZpbmUgCUFUOTFDX1BNQ19QUkVTX0NMS18zMiAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDUgPDwgIDIpIC8vIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgMzINCisjZGVmaW5lIAlBVDkxQ19QTUNfUFJFU19DTEtfNjQgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg2IDw8ICAyKSAvLyAoUE1DKSBTZWxlY3RlZCBjbG9jayBkaXZpZGVkIGJ5IDY0DQorLy8gLS0tLS0tLS0gUE1DX1BDS1IgOiAoUE1DIE9mZnNldDogMHg0MCkgUHJvZ3JhbW1hYmxlIENsb2NrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFBNQ19JRVIgOiAoUE1DIE9mZnNldDogMHg2MCkgUE1DIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QTUNfTU9TQ1MgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFBNQykgTU9TQyBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzaw0KKyNkZWZpbmUgQVQ5MUNfUE1DX0xPQ0sgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChQTUMpIFBMTCBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzaw0KKyNkZWZpbmUgQVQ5MUNfUE1DX01DS1JEWSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChQTUMpIE1DS19SRFkgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sNCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0swUkRZICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoUE1DKSBQQ0swX1JEWSBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzaw0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDSzFSRFkgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChQTUMpIFBDSzFfUkRZIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrDQorI2RlZmluZSBBVDkxQ19QTUNfUENLMlJEWSAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLy8gKFBNQykgUENLMl9SRFkgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sNCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0szUkRZICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDExKSAvLyAoUE1DKSBQQ0szX1JEWSBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzaw0KKy8vIC0tLS0tLS0tIFBNQ19JRFIgOiAoUE1DIE9mZnNldDogMHg2NCkgUE1DIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFBNQ19TUiA6IChQTUMgT2Zmc2V0OiAweDY4KSBQTUMgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFBNQ19JTVIgOiAoUE1DIE9mZnNldDogMHg2YykgUE1DIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUmVzZXQgQ29udHJvbGxlciBJbnRlcmZhY2UgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLXR5cGVkZWYgc3RydWN0IF9BVDkxU19SU1RDDQotew0KLSAgICBBVDkxX1JFRyBSU1RDX1JDUjsgLyogUmVzZXQgQ29udHJvbCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSU1RDX1JTUjsgLyogUmVzZXQgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJTVENfUk1SOyAvKiBSZXNldCBNb2RlIFJlZ2lzdGVyICovDQotfSBBVDkxU19SU1RDLCAqIEFUOTFQU19SU1RDOw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUmVzZXQgQ29udHJvbGxlciBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19SU1RDIHsNCisJQVQ5MV9SRUcJIFJTVENfUkNSOyAJLy8gUmVzZXQgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUlNUQ19SU1I7IAkvLyBSZXNldCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJTVENfUk1SOyAJLy8gUmVzZXQgTW9kZSBSZWdpc3Rlcg0KK30gQVQ5MVNfUlNUQywgKkFUOTFQU19SU1RDOw0KIA0KLS8qIC0tLS0tLS0tIFJTVENfUkNSIDogKFJTVEMgT2Zmc2V0OiAweDApIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1JTVENfUFJPQ1JTVCAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgIC8qIChSU1RDKSBQcm9jZXNzb3IgUmVzZXQgKi8NCi0jZGVmaW5lIEFUOTFDX1JTVENfUEVSUlNUICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAgIC8qIChSU1RDKSBQZXJpcGhlcmFsIFJlc2V0ICovDQotI2RlZmluZSBBVDkxQ19SU1RDX0VYVFJTVCAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzICkgICAvKiAoUlNUQykgRXh0ZXJuYWwgUmVzZXQgKi8NCi0jZGVmaW5lIEFUOTFDX1JTVENfS0VZICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRiA8PCAyNCApIC8qIChSU1RDKSBQYXNzd29yZCAqLw0KLS8qIC0tLS0tLS0tIFJTVENfUlNSIDogKFJTVEMgT2Zmc2V0OiAweDQpIFJlc2V0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfUlNUQ19VUlNUUyAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgLyogKFJTVEMpIFVzZXIgUmVzZXQgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19SU1RDX0JPRFNUUyAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgICAvKiAoUlNUQykgQnJvd25vdXQgRGV0ZWN0aW9uIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfUlNUQ19SU1RUWVAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDcgPDwgOCApICAgLyogKFJTVEMpIFJlc2V0IFR5cGUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19SU1RDX1JTVFRZUF9QT1dFUlVQICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDggKSAgIC8qIChSU1RDKSBQb3dlci11cCBSZXNldC4gVkREQ09SRSByaXNpbmcuICovDQotI2RlZmluZSAgICAgQVQ5MUNfUlNUQ19SU1RUWVBfV0FLRVVQICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgICAvKiAoUlNUQykgV2FrZVVwIFJlc2V0LiBWRERDT1JFIHJpc2luZy4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19SU1RDX1JTVFRZUF9XQVRDSERPRyAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDggKSAgIC8qIChSU1RDKSBXYXRjaGRvZyBSZXNldC4gV2F0Y2hkb2cgb3ZlcmZsb3cgb2NjdXJlZC4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19SU1RDX1JTVFRZUF9TT0ZUV0FSRSAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDggKSAgIC8qIChSU1RDKSBTb2Z0d2FyZSBSZXNldC4gUHJvY2Vzc29yIHJlc2V0IHJlcXVpcmVkIGJ5IHRoZSBzb2Z0d2FyZS4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19SU1RDX1JTVFRZUF9VU0VSICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg0IDw8IDggKSAgIC8qIChSU1RDKSBVc2VyIFJlc2V0LiBOUlNUIHBpbiBkZXRlY3RlZCBsb3cuICovDQotI2RlZmluZSAgICAgQVQ5MUNfUlNUQ19SU1RUWVBfQlJPV05PVVQgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NSA8PCA4ICkgICAvKiAoUlNUQykgQnJvd25vdXQgUmVzZXQgb2NjdXJlZC4gKi8NCi0jZGVmaW5lIEFUOTFDX1JTVENfTlJTVEwgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE2ICkgIC8qIChSU1RDKSBOUlNUIHBpbiBsZXZlbCAqLw0KLSNkZWZpbmUgQVQ5MUNfUlNUQ19TUkNNUCAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTcgKSAgLyogKFJTVEMpIFNvZnR3YXJlIFJlc2V0IENvbW1hbmQgaW4gUHJvZ3Jlc3MuICovDQotLyogLS0tLS0tLS0gUlNUQ19STVIgOiAoUlNUQyBPZmZzZXQ6IDB4OCkgUmVzZXQgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfUlNUQ19VUlNURU4gICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgLyogKFJTVEMpIFVzZXIgUmVzZXQgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19SU1RDX1VSU1RJRU4gICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA0ICkgICAvKiAoUlNUQykgVXNlciBSZXNldCBJbnRlcnJ1cHQgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19SU1RDX0VSU1RMICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RiA8PCA4ICkgICAvKiAoUlNUQykgVXNlciBSZXNldCBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1JTVENfQk9ESUVOICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE2ICkgIC8qIChSU1RDKSBCcm93bm91dCBEZXRlY3Rpb24gSW50ZXJydXB0IEVuYWJsZSAqLw0KKy8vIC0tLS0tLS0tIFJTVENfUkNSIDogKFJTVEMgT2Zmc2V0OiAweDApIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19SU1RDX1BST0NSU1QgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFJTVEMpIFByb2Nlc3NvciBSZXNldA0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19QRVJSU1QgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChSU1RDKSBQZXJpcGhlcmFsIFJlc2V0DQorI2RlZmluZSBBVDkxQ19SU1RDX0VYVFJTVCAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKFJTVEMpIEV4dGVybmFsIFJlc2V0DQorI2RlZmluZSBBVDkxQ19SU1RDX0tFWSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgMjQpIC8vIChSU1RDKSBQYXNzd29yZA0KKy8vIC0tLS0tLS0tIFJTVENfUlNSIDogKFJTVEMgT2Zmc2V0OiAweDQpIFJlc2V0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1JTVENfVVJTVFMgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoUlNUQykgVXNlciBSZXNldCBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX1JTVENfQk9EU1RTICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoUlNUQykgQnJvd25vdXQgRGV0ZWN0aW9uIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19SU1RUWVAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgIDgpIC8vIChSU1RDKSBSZXNldCBUeXBlDQorI2RlZmluZSAJQVQ5MUNfUlNUQ19SU1RUWVBfUE9XRVJVUCAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgOCkgLy8gKFJTVEMpIFBvd2VyLXVwIFJlc2V0LiBWRERDT1JFIHJpc2luZy4NCisjZGVmaW5lIAlBVDkxQ19SU1RDX1JTVFRZUF9XQUtFVVAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoUlNUQykgV2FrZVVwIFJlc2V0LiBWRERDT1JFIHJpc2luZy4NCisjZGVmaW5lIAlBVDkxQ19SU1RDX1JTVFRZUF9XQVRDSERPRyAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA4KSAvLyAoUlNUQykgV2F0Y2hkb2cgUmVzZXQuIFdhdGNoZG9nIG92ZXJmbG93IG9jY3VyZWQuDQorI2RlZmluZSAJQVQ5MUNfUlNUQ19SU1RUWVBfU09GVFdBUkUgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKFJTVEMpIFNvZnR3YXJlIFJlc2V0LiBQcm9jZXNzb3IgcmVzZXQgcmVxdWlyZWQgYnkgdGhlIHNvZnR3YXJlLg0KKyNkZWZpbmUgCUFUOTFDX1JTVENfUlNUVFlQX1VTRVIgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDQgPDwgIDgpIC8vIChSU1RDKSBVc2VyIFJlc2V0LiBOUlNUIHBpbiBkZXRlY3RlZCBsb3cuDQorI2RlZmluZSAJQVQ5MUNfUlNUQ19SU1RUWVBfQlJPV05PVVQgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NSA8PCAgOCkgLy8gKFJTVEMpIEJyb3dub3V0IFJlc2V0IG9jY3VyZWQuDQorI2RlZmluZSBBVDkxQ19SU1RDX05SU1RMICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKFJTVEMpIE5SU1QgcGluIGxldmVsDQorI2RlZmluZSBBVDkxQ19SU1RDX1NSQ01QICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNykgLy8gKFJTVEMpIFNvZnR3YXJlIFJlc2V0IENvbW1hbmQgaW4gUHJvZ3Jlc3MuDQorLy8gLS0tLS0tLS0gUlNUQ19STVIgOiAoUlNUQyBPZmZzZXQ6IDB4OCkgUmVzZXQgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1JTVENfVVJTVEVOICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoUlNUQykgVXNlciBSZXNldCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1JTVENfVVJTVElFTiAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoUlNUQykgVXNlciBSZXNldCBJbnRlcnJ1cHQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19SU1RDX0VSU1RMICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAgOCkgLy8gKFJTVEMpIFVzZXIgUmVzZXQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19SU1RDX0JPRElFTiAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKFJTVEMpIEJyb3dub3V0IERldGVjdGlvbiBJbnRlcnJ1cHQgRW5hYmxlDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBSZWFsIFRpbWUgVGltZXIgQ29udHJvbGxlciBJbnRlcmZhY2UgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLXR5cGVkZWYgc3RydWN0IF9BVDkxU19SVFRDDQotew0KLSAgICBBVDkxX1JFRyBSVFRDX1JUTVI7IC8qIFJlYWwtdGltZSBNb2RlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJUVENfUlRBUjsgLyogUmVhbC10aW1lIEFsYXJtIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJUVENfUlRWUjsgLyogUmVhbC10aW1lIFZhbHVlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJUVENfUlRTUjsgLyogUmVhbC10aW1lIFN0YXR1cyBSZWdpc3RlciAqLw0KLX0gQVQ5MVNfUlRUQywgKiBBVDkxUFNfUlRUQzsNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFJlYWwgVGltZSBUaW1lciBDb250cm9sbGVyIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1JUVEMgew0KKwlBVDkxX1JFRwkgUlRUQ19SVE1SOyAJLy8gUmVhbC10aW1lIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJUVENfUlRBUjsgCS8vIFJlYWwtdGltZSBBbGFybSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUlRUQ19SVFZSOyAJLy8gUmVhbC10aW1lIFZhbHVlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSVFRDX1JUU1I7IAkvLyBSZWFsLXRpbWUgU3RhdHVzIFJlZ2lzdGVyDQorfSBBVDkxU19SVFRDLCAqQVQ5MVBTX1JUVEM7DQogDQotLyogLS0tLS0tLS0gUlRUQ19SVE1SIDogKFJUVEMgT2Zmc2V0OiAweDApIFJlYWwtdGltZSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19SVFRDX1JUUFJFUyAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRkZGIDw8IDAgKSAvKiAoUlRUQykgUmVhbC10aW1lIFRpbWVyIFByZXNjYWxlciBWYWx1ZSAqLw0KLSNkZWZpbmUgQVQ5MUNfUlRUQ19BTE1JRU4gICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNiApICAgLyogKFJUVEMpIEFsYXJtIEludGVycnVwdCBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1JUVENfUlRUSU5DSUVOICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTcgKSAgIC8qIChSVFRDKSBSZWFsIFRpbWUgVGltZXIgSW5jcmVtZW50IEludGVycnVwdCBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1JUVENfUlRUUlNUICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTggKSAgIC8qIChSVFRDKSBSZWFsIFRpbWUgVGltZXIgUmVzdGFydCAqLw0KLS8qIC0tLS0tLS0tIFJUVENfUlRBUiA6IChSVFRDIE9mZnNldDogMHg0KSBSZWFsLXRpbWUgQWxhcm0gUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1JUVENfQUxNViAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMCApICAgIC8qIChSVFRDKSBBbGFybSBWYWx1ZSAqLw0KLS8qIC0tLS0tLS0tIFJUVENfUlRWUiA6IChSVFRDIE9mZnNldDogMHg4KSBDdXJyZW50IFJlYWwtdGltZSBWYWx1ZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfUlRUQ19DUlRWICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAwICkgICAgLyogKFJUVEMpIEN1cnJlbnQgUmVhbC10aW1lIFZhbHVlICovDQotLyogLS0tLS0tLS0gUlRUQ19SVFNSIDogKFJUVEMgT2Zmc2V0OiAweGMpIFJlYWwtdGltZSBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1JUVENfQUxNUyAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgIC8qIChSVFRDKSBSZWFsLXRpbWUgQWxhcm0gU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19SVFRDX1JUVElOQyAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEgKSAgICAvKiAoUlRUQykgUmVhbC10aW1lIFRpbWVyIEluY3JlbWVudCAqLw0KKy8vIC0tLS0tLS0tIFJUVENfUlRNUiA6IChSVFRDIE9mZnNldDogMHgwKSBSZWFsLXRpbWUgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1JUVENfUlRQUkVTICAgICAoKHVuc2lnbmVkIGludCkgMHhGRkZGIDw8ICAwKSAvLyAoUlRUQykgUmVhbC10aW1lIFRpbWVyIFByZXNjYWxlciBWYWx1ZQ0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19BTE1JRU4gICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChSVFRDKSBBbGFybSBJbnRlcnJ1cHQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19SVFRDX1JUVElOQ0lFTiAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNykgLy8gKFJUVEMpIFJlYWwgVGltZSBUaW1lciBJbmNyZW1lbnQgSW50ZXJydXB0IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19SVFRSU1QgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTgpIC8vIChSVFRDKSBSZWFsIFRpbWUgVGltZXIgUmVzdGFydA0KKy8vIC0tLS0tLS0tIFJUVENfUlRBUiA6IChSVFRDIE9mZnNldDogMHg0KSBSZWFsLXRpbWUgQWxhcm0gUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19SVFRDX0FMTVYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgMCkgLy8gKFJUVEMpIEFsYXJtIFZhbHVlDQorLy8gLS0tLS0tLS0gUlRUQ19SVFZSIDogKFJUVEMgT2Zmc2V0OiAweDgpIEN1cnJlbnQgUmVhbC10aW1lIFZhbHVlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19DUlRWICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDApIC8vIChSVFRDKSBDdXJyZW50IFJlYWwtdGltZSBWYWx1ZQ0KKy8vIC0tLS0tLS0tIFJUVENfUlRTUiA6IChSVFRDIE9mZnNldDogMHhjKSBSZWFsLXRpbWUgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19BTE1TICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChSVFRDKSBSZWFsLXRpbWUgQWxhcm0gU3RhdHVzDQorI2RlZmluZSBBVDkxQ19SVFRDX1JUVElOQyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFJUVEMpIFJlYWwtdGltZSBUaW1lciBJbmNyZW1lbnQNCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFBlcmlvZGljIEludGVydmFsIFRpbWVyIENvbnRyb2xsZXIgSW50ZXJmYWNlICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfUElUQw0KLXsNCi0gICAgQVQ5MV9SRUcgUElUQ19QSU1SOyAvKiBQZXJpb2QgSW50ZXJ2YWwgTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSVRDX1BJU1I7IC8qIFBlcmlvZCBJbnRlcnZhbCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElUQ19QSVZSOyAvKiBQZXJpb2QgSW50ZXJ2YWwgVmFsdWUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElUQ19QSUlSOyAvKiBQZXJpb2QgSW50ZXJ2YWwgSW1hZ2UgUmVnaXN0ZXIgKi8NCi19IEFUOTFTX1BJVEMsICogQVQ5MVBTX1BJVEM7DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQZXJpb2RpYyBJbnRlcnZhbCBUaW1lciBDb250cm9sbGVyIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1BJVEMgew0KKwlBVDkxX1JFRwkgUElUQ19QSU1SOyAJLy8gUGVyaW9kIEludGVydmFsIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJVENfUElTUjsgCS8vIFBlcmlvZCBJbnRlcnZhbCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJVENfUElWUjsgCS8vIFBlcmlvZCBJbnRlcnZhbCBWYWx1ZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElUQ19QSUlSOyAJLy8gUGVyaW9kIEludGVydmFsIEltYWdlIFJlZ2lzdGVyDQorfSBBVDkxU19QSVRDLCAqQVQ5MVBTX1BJVEM7DQogDQotLyogLS0tLS0tLS0gUElUQ19QSU1SIDogKFBJVEMgT2Zmc2V0OiAweDApIFBlcmlvZGljIEludGVydmFsIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1BJVENfUElWICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGRkZGIDw8IDAgKSAvKiAoUElUQykgUGVyaW9kaWMgSW50ZXJ2YWwgVmFsdWUgKi8NCi0jZGVmaW5lIEFUOTFDX1BJVENfUElURU4gICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjQgKSAgICAvKiAoUElUQykgUGVyaW9kaWMgSW50ZXJ2YWwgVGltZXIgRW5hYmxlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfUElUQ19QSVRJRU4gICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyNSApICAgIC8qIChQSVRDKSBQZXJpb2RpYyBJbnRlcnZhbCBUaW1lciBJbnRlcnJ1cHQgRW5hYmxlICovDQotLyogLS0tLS0tLS0gUElUQ19QSVNSIDogKFBJVEMgT2Zmc2V0OiAweDQpIFBlcmlvZGljIEludGVydmFsIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElUQ19QSVRTICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgICAgIC8qIChQSVRDKSBQZXJpb2RpYyBJbnRlcnZhbCBUaW1lciBTdGF0dXMgKi8NCi0vKiAtLS0tLS0tLSBQSVRDX1BJVlIgOiAoUElUQyBPZmZzZXQ6IDB4OCkgUGVyaW9kaWMgSW50ZXJ2YWwgVmFsdWUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1BJVENfQ1BJViAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGRkZGIDw8IDAgKSAvKiAoUElUQykgQ3VycmVudCBQZXJpb2RpYyBJbnRlcnZhbCBWYWx1ZSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElUQ19QSUNOVCAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RkZGIDw8IDIwICkgIC8qIChQSVRDKSBQZXJpb2RpYyBJbnRlcnZhbCBDb3VudGVyICovDQotLyogLS0tLS0tLS0gUElUQ19QSUlSIDogKFBJVEMgT2Zmc2V0OiAweGMpIFBlcmlvZGljIEludGVydmFsIEltYWdlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQorLy8gLS0tLS0tLS0gUElUQ19QSU1SIDogKFBJVEMgT2Zmc2V0OiAweDApIFBlcmlvZGljIEludGVydmFsIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QSVRDX1BJViAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGRkYgPDwgIDApIC8vIChQSVRDKSBQZXJpb2RpYyBJbnRlcnZhbCBWYWx1ZQ0KKyNkZWZpbmUgQVQ5MUNfUElUQ19QSVRFTiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjQpIC8vIChQSVRDKSBQZXJpb2RpYyBJbnRlcnZhbCBUaW1lciBFbmFibGVkDQorI2RlZmluZSBBVDkxQ19QSVRDX1BJVElFTiAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNSkgLy8gKFBJVEMpIFBlcmlvZGljIEludGVydmFsIFRpbWVyIEludGVycnVwdCBFbmFibGUNCisvLyAtLS0tLS0tLSBQSVRDX1BJU1IgOiAoUElUQyBPZmZzZXQ6IDB4NCkgUGVyaW9kaWMgSW50ZXJ2YWwgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUElUQ19QSVRTICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChQSVRDKSBQZXJpb2RpYyBJbnRlcnZhbCBUaW1lciBTdGF0dXMNCisvLyAtLS0tLS0tLSBQSVRDX1BJVlIgOiAoUElUQyBPZmZzZXQ6IDB4OCkgUGVyaW9kaWMgSW50ZXJ2YWwgVmFsdWUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QSVRDX0NQSVYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGRkYgPDwgIDApIC8vIChQSVRDKSBDdXJyZW50IFBlcmlvZGljIEludGVydmFsIFZhbHVlDQorI2RlZmluZSBBVDkxQ19QSVRDX1BJQ05UICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGIDw8IDIwKSAvLyAoUElUQykgUGVyaW9kaWMgSW50ZXJ2YWwgQ291bnRlcg0KKy8vIC0tLS0tLS0tIFBJVENfUElJUiA6IChQSVRDIE9mZnNldDogMHhjKSBQZXJpb2RpYyBJbnRlcnZhbCBJbWFnZSBSZWdpc3RlciAtLS0tLS0tLSANCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFdhdGNoZG9nIFRpbWVyIENvbnRyb2xsZXIgSW50ZXJmYWNlICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfV0RUQw0KLXsNCi0gICAgQVQ5MV9SRUcgV0RUQ19XRENSOyAvKiBXYXRjaGRvZyBDb250cm9sIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFdEVENfV0RNUjsgLyogV2F0Y2hkb2cgTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBXRFRDX1dEU1I7IC8qIFdhdGNoZG9nIFN0YXR1cyBSZWdpc3RlciAqLw0KLX0gQVQ5MVNfV0RUQywgKiBBVDkxUFNfV0RUQzsNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFdhdGNoZG9nIFRpbWVyIENvbnRyb2xsZXIgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfV0RUQyB7DQorCUFUOTFfUkVHCSBXRFRDX1dEQ1I7IAkvLyBXYXRjaGRvZyBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBXRFRDX1dETVI7IAkvLyBXYXRjaGRvZyBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBXRFRDX1dEU1I7IAkvLyBXYXRjaGRvZyBTdGF0dXMgUmVnaXN0ZXINCit9IEFUOTFTX1dEVEMsICpBVDkxUFNfV0RUQzsNCiANCi0vKiAtLS0tLS0tLSBXRFRDX1dEQ1IgOiAoV0RUQyBPZmZzZXQ6IDB4MCkgUGVyaW9kaWMgSW50ZXJ2YWwgSW1hZ2UgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1dEVENfV0RSU1RUICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgIC8qIChXRFRDKSBXYXRjaGRvZyBSZXN0YXJ0ICovDQotI2RlZmluZSBBVDkxQ19XRFRDX0tFWSAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRiA8PCAyNCApICAvKiAoV0RUQykgV2F0Y2hkb2cgS0VZIFBhc3N3b3JkICovDQotLyogLS0tLS0tLS0gV0RUQ19XRE1SIDogKFdEVEMgT2Zmc2V0OiAweDQpIFdhdGNoZG9nIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1dEVENfV0RWICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGRiA8PCAwICkgIC8qIChXRFRDKSBXYXRjaGRvZyBUaW1lciBSZXN0YXJ0ICovDQotI2RlZmluZSBBVDkxQ19XRFRDX1dERklFTiAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEyICkgICAvKiAoV0RUQykgV2F0Y2hkb2cgRmF1bHQgSW50ZXJydXB0IEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfV0RUQ19XRFJTVEVOICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMyApICAgLyogKFdEVEMpIFdhdGNoZG9nIFJlc2V0IEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfV0RUQ19XRFJQUk9DICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNCApICAgLyogKFdEVEMpIFdhdGNoZG9nIFRpbWVyIFJlc3RhcnQgKi8NCi0jZGVmaW5lIEFUOTFDX1dEVENfV0RESVMgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTUgKSAgIC8qIChXRFRDKSBXYXRjaGRvZyBEaXNhYmxlICovDQotI2RlZmluZSBBVDkxQ19XRFRDX1dERCAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRkYgPDwgMTYgKSAvKiAoV0RUQykgV2F0Y2hkb2cgRGVsdGEgVmFsdWUgKi8NCi0jZGVmaW5lIEFUOTFDX1dEVENfV0REQkdITFQgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjggKSAgIC8qIChXRFRDKSBXYXRjaGRvZyBEZWJ1ZyBIYWx0ICovDQotI2RlZmluZSBBVDkxQ19XRFRDX1dESURMRUhMVCAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDI5ICkgICAvKiAoV0RUQykgV2F0Y2hkb2cgSWRsZSBIYWx0ICovDQotLyogLS0tLS0tLS0gV0RUQ19XRFNSIDogKFdEVEMgT2Zmc2V0OiAweDgpIFdhdGNoZG9nIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfV0RUQ19XRFVORiAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgICAgLyogKFdEVEMpIFdhdGNoZG9nIFVuZGVyZmxvdyAqLw0KLSNkZWZpbmUgQVQ5MUNfV0RUQ19XREVSUiAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgICAgLyogKFdEVEMpIFdhdGNoZG9nIEVycm9yICovDQorLy8gLS0tLS0tLS0gV0RUQ19XRENSIDogKFdEVEMgT2Zmc2V0OiAweDApIFBlcmlvZGljIEludGVydmFsIEltYWdlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRFJTVFQgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChXRFRDKSBXYXRjaGRvZyBSZXN0YXJ0DQorI2RlZmluZSBBVDkxQ19XRFRDX0tFWSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgMjQpIC8vIChXRFRDKSBXYXRjaGRvZyBLRVkgUGFzc3dvcmQNCisvLyAtLS0tLS0tLSBXRFRDX1dETVIgOiAoV0RUQyBPZmZzZXQ6IDB4NCkgV2F0Y2hkb2cgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1dEVENfV0RWICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRkYgPDwgIDApIC8vIChXRFRDKSBXYXRjaGRvZyBUaW1lciBSZXN0YXJ0DQorI2RlZmluZSBBVDkxQ19XRFRDX1dERklFTiAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLy8gKFdEVEMpIFdhdGNoZG9nIEZhdWx0IEludGVycnVwdCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1dEVENfV0RSU1RFTiAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEzKSAvLyAoV0RUQykgV2F0Y2hkb2cgUmVzZXQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19XRFRDX1dEUlBST0MgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNCkgLy8gKFdEVEMpIFdhdGNoZG9nIFRpbWVyIFJlc3RhcnQNCisjZGVmaW5lIEFUOTFDX1dEVENfV0RESVMgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE1KSAvLyAoV0RUQykgV2F0Y2hkb2cgRGlzYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XREQgICAgICAgICgodW5zaWduZWQgaW50KSAweEZGRiA8PCAxNikgLy8gKFdEVEMpIFdhdGNoZG9nIERlbHRhIFZhbHVlDQorI2RlZmluZSBBVDkxQ19XRFRDX1dEREJHSExUICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyOCkgLy8gKFdEVEMpIFdhdGNoZG9nIERlYnVnIEhhbHQNCisjZGVmaW5lIEFUOTFDX1dEVENfV0RJRExFSExUICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI5KSAvLyAoV0RUQykgV2F0Y2hkb2cgSWRsZSBIYWx0DQorLy8gLS0tLS0tLS0gV0RUQ19XRFNSIDogKFdEVEMgT2Zmc2V0OiAweDgpIFdhdGNoZG9nIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1dEVENfV0RVTkYgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoV0RUQykgV2F0Y2hkb2cgVW5kZXJmbG93DQorI2RlZmluZSBBVDkxQ19XRFRDX1dERVJSICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFdEVEMpIFdhdGNoZG9nIEVycm9yDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBWb2x0YWdlIFJlZ3VsYXRvciBNb2RlIENvbnRyb2xsZXIgSW50ZXJmYWNlICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfVlJFRw0KLXsNCi0gICAgQVQ5MV9SRUcgVlJFR19NUjsgLyogVm9sdGFnZSBSZWd1bGF0b3IgTW9kZSBSZWdpc3RlciAqLw0KLX0gQVQ5MVNfVlJFRywgKiBBVDkxUFNfVlJFRzsNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFZvbHRhZ2UgUmVndWxhdG9yIE1vZGUgQ29udHJvbGxlciBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19WUkVHIHsNCisJQVQ5MV9SRUcJIFZSRUdfTVI7IAkvLyBWb2x0YWdlIFJlZ3VsYXRvciBNb2RlIFJlZ2lzdGVyDQorfSBBVDkxU19WUkVHLCAqQVQ5MVBTX1ZSRUc7DQogDQotLyogLS0tLS0tLS0gVlJFR19NUiA6IChWUkVHIE9mZnNldDogMHgwKSBWb2x0YWdlIFJlZ3VsYXRvciBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19WUkVHX1BTVERCWSAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAvKiAoVlJFRykgVm9sdGFnZSBSZWd1bGF0b3IgUG93ZXIgU3RhbmRieSBNb2RlICovDQorLy8gLS0tLS0tLS0gVlJFR19NUiA6IChWUkVHIE9mZnNldDogMHgwKSBWb2x0YWdlIFJlZ3VsYXRvciBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVlJFR19QU1REQlkgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChWUkVHKSBWb2x0YWdlIFJlZ3VsYXRvciBQb3dlciBTdGFuZGJ5IE1vZGUNCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIE1lbW9yeSBDb250cm9sbGVyIEludGVyZmFjZSAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotdHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX01DDQotew0KLSAgICBBVDkxX1JFRyBNQ19SQ1I7ICAgICAgICAgIC8qIE1DIFJlbWFwIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgTUNfQVNSOyAgICAgICAgICAvKiBNQyBBYm9ydCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgTUNfQUFTUjsgICAgICAgICAvKiBNQyBBYm9ydCBBZGRyZXNzIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDBbIDIxIF07IC8qICovDQotICAgIEFUOTFfUkVHIE1DX0ZNUjsgICAgICAgICAgLyogTUMgRmxhc2ggTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBNQ19GQ1I7ICAgICAgICAgIC8qIE1DIEZsYXNoIENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgTUNfRlNSOyAgICAgICAgICAvKiBNQyBGbGFzaCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi19IEFUOTFTX01DLCAqIEFUOTFQU19NQzsNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIE1lbW9yeSBDb250cm9sbGVyIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX01DIHsNCisJQVQ5MV9SRUcJIE1DX1JDUjsgCS8vIE1DIFJlbWFwIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIE1DX0FTUjsgCS8vIE1DIEFib3J0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgTUNfQUFTUjsgCS8vIE1DIEFib3J0IEFkZHJlc3MgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbMjFdOyAJLy8gDQorCUFUOTFfUkVHCSBNQ19GTVI7IAkvLyBNQyBGbGFzaCBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBNQ19GQ1I7IAkvLyBNQyBGbGFzaCBDb21tYW5kIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBNQ19GU1I7IAkvLyBNQyBGbGFzaCBTdGF0dXMgUmVnaXN0ZXINCit9IEFUOTFTX01DLCAqQVQ5MVBTX01DOw0KIA0KLS8qIC0tLS0tLS0tIE1DX1JDUiA6IChNQyBPZmZzZXQ6IDB4MCkgTUMgUmVtYXAgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfUkNCICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgIC8qIChNQykgUmVtYXAgQ29tbWFuZCBCaXQgKi8NCi0vKiAtLS0tLS0tLSBNQ19BU1IgOiAoTUMgT2Zmc2V0OiAweDQpIE1DIEFib3J0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfVU5EQUREICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgIC8qIChNQykgVW5kZWZpbmVkIEFkZGVzcyBBYm9ydCBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX01JU0FERCAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgICAvKiAoTUMpIE1pc2FsaWduZWQgQWRkZXNzIEFib3J0IFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfQUJUU1ogICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDggKSAgIC8qIChNQykgQWJvcnQgU2l6ZSBTdGF0dXMgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19NQ19BQlRTWl9CWVRFICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCA4ICkgICAvKiAoTUMpIEJ5dGUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19NQ19BQlRTWl9IV09SRCAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgICAvKiAoTUMpIEhhbGYtd29yZCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX01DX0FCVFNaX1dPUkQgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDggKSAgIC8qIChNQykgV29yZCAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfQUJUVFlQICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDEwICkgIC8qIChNQykgQWJvcnQgVHlwZSBTdGF0dXMgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19NQ19BQlRUWVBfREFUQVIgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAxMCApICAvKiAoTUMpIERhdGEgUmVhZCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX01DX0FCVFRZUF9EQVRBVyAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEwICkgIC8qIChNQykgRGF0YSBXcml0ZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX01DX0FCVFRZUF9GRVRDSCAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDEwICkgIC8qIChNQykgQ29kZSBGZXRjaCAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTVNUMCAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE2ICkgIC8qIChNQykgTWFzdGVyIDAgQWJvcnQgU291cmNlICovDQotI2RlZmluZSBBVDkxQ19NQ19NU1QxICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTcgKSAgLyogKE1DKSBNYXN0ZXIgMSBBYm9ydCBTb3VyY2UgKi8NCi0jZGVmaW5lIEFUOTFDX01DX1NWTVNUMCAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyNCApICAvKiAoTUMpIFNhdmVkIE1hc3RlciAwIEFib3J0IFNvdXJjZSAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfU1ZNU1QxICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDI1ICkgIC8qIChNQykgU2F2ZWQgTWFzdGVyIDEgQWJvcnQgU291cmNlICovDQotLyogLS0tLS0tLS0gTUNfRk1SIDogKE1DIE9mZnNldDogMHg2MCkgTUMgRmxhc2ggTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfRlJEWSAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgIC8qIChNQykgRmxhc2ggUmVhZHkgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0xPQ0tFICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyICkgICAvKiAoTUMpIExvY2sgRXJyb3IgKi8NCi0jZGVmaW5lIEFUOTFDX01DX1BST0dFICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzICkgICAvKiAoTUMpIFByb2dyYW1taW5nIEVycm9yICovDQotI2RlZmluZSBBVDkxQ19NQ19ORUJQICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNyApICAgLyogKE1DKSBObyBFcmFzZSBCZWZvcmUgUHJvZ3JhbW1pbmcgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0ZXUyAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCA4ICkgICAvKiAoTUMpIEZsYXNoIFdhaXQgU3RhdGUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19NQ19GV1NfMEZXUyAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCA4ICkgICAvKiAoTUMpIDEgY3ljbGUgZm9yIFJlYWQsIDIgZm9yIFdyaXRlIG9wZXJhdGlvbnMgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19NQ19GV1NfMUZXUyAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgICAvKiAoTUMpIDIgY3ljbGVzIGZvciBSZWFkLCAzIGZvciBXcml0ZSBvcGVyYXRpb25zICovDQotI2RlZmluZSAgICAgQVQ5MUNfTUNfRldTXzJGV1MgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgOCApICAgLyogKE1DKSAzIGN5Y2xlcyBmb3IgUmVhZCwgNCBmb3IgV3JpdGUgb3BlcmF0aW9ucyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX01DX0ZXU18zRldTICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDggKSAgIC8qIChNQykgNCBjeWNsZXMgZm9yIFJlYWQsIDQgZm9yIFdyaXRlIG9wZXJhdGlvbnMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0ZNQ04gICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RkYgPDwgMTYgKSAvKiAoTUMpIEZsYXNoIE1pY3Jvc2Vjb25kIEN5Y2xlIE51bWJlciAqLw0KLS8qIC0tLS0tLS0tIE1DX0ZDUiA6IChNQyBPZmZzZXQ6IDB4NjQpIE1DIEZsYXNoIENvbW1hbmQgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX01DX0ZDTUQgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RiA8PCAwICkgICAvKiAoTUMpIEZsYXNoIENvbW1hbmQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19NQ19GQ01EX1NUQVJUX1BST0cgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSApICAgICAgICAvKiAoTUMpIFN0YXJ0cyB0aGUgcHJvZ3JhbW1pbmcgb2YgdGggZXBhZ2Ugc3BlY2lmaWVkIGJ5IFBBR0VOLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX01DX0ZDTURfTE9DSyAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyICkgICAgICAgIC8qIChNQykgU3RhcnRzIGEgbG9jayBzZXF1ZW5jZSBvZiB0aGUgc2VjdG9yIGRlZmluZWQgYnkgdGhlIGJpdHMgNCB0byA3IG9mIHRoZSBmaWVsZCBQQUdFTi4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19NQ19GQ01EX1BST0dfQU5EX0xPQ0sgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyApICAgICAgICAvKiAoTUMpIFRoZSBsb2NrIHNlcXVlbmNlIGF1dG9tYXRpY2FsbHkgaGFwcGVucyBhZnRlciB0aGUgcHJvZ3JhbW1pbmcgc2VxdWVuY2UgaXMgY29tcGxldGVkLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX01DX0ZDTURfVU5MT0NLICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg0ICkgICAgICAgIC8qIChNQykgU3RhcnRzIGFuIHVubG9jayBzZXF1ZW5jZSBvZiB0aGUgc2VjdG9yIGRlZmluZWQgYnkgdGhlIGJpdHMgNCB0byA3IG9mIHRoZSBmaWVsZCBQQUdFTi4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19NQ19GQ01EX0VSQVNFX0FMTCAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4OCApICAgICAgICAvKiAoTUMpIFN0YXJ0cyB0aGUgZXJhc2Ugb2YgdGhlIGVudGlyZSBmbGFzaC5JZiBhdCBsZWFzdCBhIHBhZ2UgaXMgbG9ja2VkLCB0aGUgY29tbWFuZCBpcyBjYW5jZWxsZWQuICovDQotI2RlZmluZSAgICAgQVQ5MUNfTUNfRkNNRF9TRVRfR1BfTlZNICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEIgKSAgICAgICAgLyogKE1DKSBTZXQgR2VuZXJhbCBQdXJwb3NlIE5WTSBiaXRzLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX01DX0ZDTURfQ0xSX0dQX05WTSAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhEICkgICAgICAgIC8qIChNQykgQ2xlYXIgR2VuZXJhbCBQdXJwb3NlIE5WTSBiaXRzLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX01DX0ZDTURfU0VUX1NFQ1VSSVRZICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGICkgICAgICAgIC8qIChNQykgU2V0IFNlY3VyaXR5IEJpdC4gKi8NCi0jZGVmaW5lIEFUOTFDX01DX1BBR0VOICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4M0ZGIDw8IDggKSAvKiAoTUMpIFBhZ2UgTnVtYmVyICovDQotI2RlZmluZSBBVDkxQ19NQ19LRVkgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGIDw8IDI0ICkgLyogKE1DKSBXcml0aW5nIFByb3RlY3QgS2V5ICovDQotLyogLS0tLS0tLS0gTUNfRlNSIDogKE1DIE9mZnNldDogMHg2OCkgTUMgRmxhc2ggQ29tbWFuZCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfU0VDVVJJVFkgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDQgKSAgIC8qIChNQykgU2VjdXJpdHkgQml0IFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfR1BOVk0wICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDggKSAgIC8qIChNQykgU2VjdG9yIDAgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0dQTlZNMSAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA5ICkgICAvKiAoTUMpIFNlY3RvciAxIExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19HUE5WTTIgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTAgKSAgLyogKE1DKSBTZWN0b3IgMiBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfR1BOVk0zICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDExICkgIC8qIChNQykgU2VjdG9yIDMgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0dQTlZNNCAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMiApICAvKiAoTUMpIFNlY3RvciA0IExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19HUE5WTTUgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTMgKSAgLyogKE1DKSBTZWN0b3IgNSBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfR1BOVk02ICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE0ICkgIC8qIChNQykgU2VjdG9yIDYgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0dQTlZNNyAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNSApICAvKiAoTUMpIFNlY3RvciA3IExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19MT0NLUzAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTYgKSAgLyogKE1DKSBTZWN0b3IgMCBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE3ICkgIC8qIChNQykgU2VjdG9yIDEgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0xPQ0tTMiAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxOCApICAvKiAoTUMpIFNlY3RvciAyIExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19MT0NLUzMgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTkgKSAgLyogKE1DKSBTZWN0b3IgMyBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTE9DS1M0ICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIwICkgIC8qIChNQykgU2VjdG9yIDQgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0xPQ0tTNSAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyMSApICAvKiAoTUMpIFNlY3RvciA1IExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19MT0NLUzYgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjIgKSAgLyogKE1DKSBTZWN0b3IgNiBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTE9DS1M3ICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIzICkgIC8qIChNQykgU2VjdG9yIDcgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0xPQ0tTOCAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyNCApICAvKiAoTUMpIFNlY3RvciA4IExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19MT0NLUzkgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjUgKSAgLyogKE1DKSBTZWN0b3IgOSBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxMCAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDI2ICkgIC8qIChNQykgU2VjdG9yIDEwIExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19MT0NLUzExICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjcgKSAgLyogKE1DKSBTZWN0b3IgMTEgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0xPQ0tTMTIgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyOCApICAvKiAoTUMpIFNlY3RvciAxMiBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxMyAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDI5ICkgIC8qIChNQykgU2VjdG9yIDEzIExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19MT0NLUzE0ICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMzAgKSAgLyogKE1DKSBTZWN0b3IgMTQgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0xPQ0tTMTUgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzMSApICAvKiAoTUMpIFNlY3RvciAxNSBMb2NrIFN0YXR1cyAqLw0KKy8vIC0tLS0tLS0tIE1DX1JDUiA6IChNQyBPZmZzZXQ6IDB4MCkgTUMgUmVtYXAgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX01DX1JDQiAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoTUMpIFJlbWFwIENvbW1hbmQgQml0DQorLy8gLS0tLS0tLS0gTUNfQVNSIDogKE1DIE9mZnNldDogMHg0KSBNQyBBYm9ydCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19NQ19VTkRBREQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKE1DKSBVbmRlZmluZWQgQWRkZXNzIEFib3J0IFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTUlTQUREICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChNQykgTWlzYWxpZ25lZCBBZGRlc3MgQWJvcnQgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19BQlRTWiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKE1DKSBBYm9ydCBTaXplIFN0YXR1cw0KKyNkZWZpbmUgCUFUOTFDX01DX0FCVFNaX0JZVEUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDgpIC8vIChNQykgQnl0ZQ0KKyNkZWZpbmUgCUFUOTFDX01DX0FCVFNaX0hXT1JEICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChNQykgSGFsZi13b3JkDQorI2RlZmluZSAJQVQ5MUNfTUNfQUJUU1pfV09SRCAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgOCkgLy8gKE1DKSBXb3JkDQorI2RlZmluZSBBVDkxQ19NQ19BQlRUWVAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxMCkgLy8gKE1DKSBBYm9ydCBUeXBlIFN0YXR1cw0KKyNkZWZpbmUgCUFUOTFDX01DX0FCVFRZUF9EQVRBUiAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDEwKSAvLyAoTUMpIERhdGEgUmVhZA0KKyNkZWZpbmUgCUFUOTFDX01DX0FCVFRZUF9EQVRBVyAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEwKSAvLyAoTUMpIERhdGEgV3JpdGUNCisjZGVmaW5lIAlBVDkxQ19NQ19BQlRUWVBfRkVUQ0ggICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxMCkgLy8gKE1DKSBDb2RlIEZldGNoDQorI2RlZmluZSBBVDkxQ19NQ19NU1QwICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKE1DKSBNYXN0ZXIgMCBBYm9ydCBTb3VyY2UNCisjZGVmaW5lIEFUOTFDX01DX01TVDEgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE3KSAvLyAoTUMpIE1hc3RlciAxIEFib3J0IFNvdXJjZQ0KKyNkZWZpbmUgQVQ5MUNfTUNfU1ZNU1QwICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjQpIC8vIChNQykgU2F2ZWQgTWFzdGVyIDAgQWJvcnQgU291cmNlDQorI2RlZmluZSBBVDkxQ19NQ19TVk1TVDEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNSkgLy8gKE1DKSBTYXZlZCBNYXN0ZXIgMSBBYm9ydCBTb3VyY2UNCisvLyAtLS0tLS0tLSBNQ19GTVIgOiAoTUMgT2Zmc2V0OiAweDYwKSBNQyBGbGFzaCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfTUNfRlJEWSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChNQykgRmxhc2ggUmVhZHkNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tFICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoTUMpIExvY2sgRXJyb3INCisjZGVmaW5lIEFUOTFDX01DX1BST0dFICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoTUMpIFByb2dyYW1taW5nIEVycm9yDQorI2RlZmluZSBBVDkxQ19NQ19ORUJQICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKE1DKSBObyBFcmFzZSBCZWZvcmUgUHJvZ3JhbW1pbmcNCisjZGVmaW5lIEFUOTFDX01DX0ZXUyAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA4KSAvLyAoTUMpIEZsYXNoIFdhaXQgU3RhdGUNCisjZGVmaW5lIAlBVDkxQ19NQ19GV1NfMEZXUyAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgOCkgLy8gKE1DKSAxIGN5Y2xlIGZvciBSZWFkLCAyIGZvciBXcml0ZSBvcGVyYXRpb25zDQorI2RlZmluZSAJQVQ5MUNfTUNfRldTXzFGV1MgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChNQykgMiBjeWNsZXMgZm9yIFJlYWQsIDMgZm9yIFdyaXRlIG9wZXJhdGlvbnMNCisjZGVmaW5lIAlBVDkxQ19NQ19GV1NfMkZXUyAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgOCkgLy8gKE1DKSAzIGN5Y2xlcyBmb3IgUmVhZCwgNCBmb3IgV3JpdGUgb3BlcmF0aW9ucw0KKyNkZWZpbmUgCUFUOTFDX01DX0ZXU18zRldTICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA4KSAvLyAoTUMpIDQgY3ljbGVzIGZvciBSZWFkLCA0IGZvciBXcml0ZSBvcGVyYXRpb25zDQorI2RlZmluZSBBVDkxQ19NQ19GTUNOICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgMTYpIC8vIChNQykgRmxhc2ggTWljcm9zZWNvbmQgQ3ljbGUgTnVtYmVyDQorLy8gLS0tLS0tLS0gTUNfRkNSIDogKE1DIE9mZnNldDogMHg2NCkgTUMgRmxhc2ggQ29tbWFuZCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX01DX0ZDTUQgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8ICAwKSAvLyAoTUMpIEZsYXNoIENvbW1hbmQNCisjZGVmaW5lIAlBVDkxQ19NQ19GQ01EX1NUQVJUX1BST0cgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEpIC8vIChNQykgU3RhcnRzIHRoZSBwcm9ncmFtbWluZyBvZiB0aCBlcGFnZSBzcGVjaWZpZWQgYnkgUEFHRU4uDQorI2RlZmluZSAJQVQ5MUNfTUNfRkNNRF9MT0NLICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyKSAvLyAoTUMpIFN0YXJ0cyBhIGxvY2sgc2VxdWVuY2Ugb2YgdGhlIHNlY3RvciBkZWZpbmVkIGJ5IHRoZSBiaXRzIDQgdG8gNyBvZiB0aGUgZmllbGQgUEFHRU4uDQorI2RlZmluZSAJQVQ5MUNfTUNfRkNNRF9QUk9HX0FORF9MT0NLICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzKSAvLyAoTUMpIFRoZSBsb2NrIHNlcXVlbmNlIGF1dG9tYXRpY2FsbHkgaGFwcGVucyBhZnRlciB0aGUgcHJvZ3JhbW1pbmcgc2VxdWVuY2UgaXMgY29tcGxldGVkLg0KKyNkZWZpbmUgCUFUOTFDX01DX0ZDTURfVU5MT0NLICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NCkgLy8gKE1DKSBTdGFydHMgYW4gdW5sb2NrIHNlcXVlbmNlIG9mIHRoZSBzZWN0b3IgZGVmaW5lZCBieSB0aGUgYml0cyA0IHRvIDcgb2YgdGhlIGZpZWxkIFBBR0VOLg0KKyNkZWZpbmUgCUFUOTFDX01DX0ZDTURfRVJBU0VfQUxMICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4OCkgLy8gKE1DKSBTdGFydHMgdGhlIGVyYXNlIG9mIHRoZSBlbnRpcmUgZmxhc2guSWYgYXQgbGVhc3QgYSBwYWdlIGlzIGxvY2tlZCwgdGhlIGNvbW1hbmQgaXMgY2FuY2VsbGVkLg0KKyNkZWZpbmUgCUFUOTFDX01DX0ZDTURfU0VUX0dQX05WTSAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4QikgLy8gKE1DKSBTZXQgR2VuZXJhbCBQdXJwb3NlIE5WTSBiaXRzLg0KKyNkZWZpbmUgCUFUOTFDX01DX0ZDTURfQ0xSX0dQX05WTSAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RCkgLy8gKE1DKSBDbGVhciBHZW5lcmFsIFB1cnBvc2UgTlZNIGJpdHMuDQorI2RlZmluZSAJQVQ5MUNfTUNfRkNNRF9TRVRfU0VDVVJJVFkgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGKSAvLyAoTUMpIFNldCBTZWN1cml0eSBCaXQuDQorI2RlZmluZSBBVDkxQ19NQ19QQUdFTiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4M0ZGIDw8ICA4KSAvLyAoTUMpIFBhZ2UgTnVtYmVyDQorI2RlZmluZSBBVDkxQ19NQ19LRVkgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgMjQpIC8vIChNQykgV3JpdGluZyBQcm90ZWN0IEtleQ0KKy8vIC0tLS0tLS0tIE1DX0ZTUiA6IChNQyBPZmZzZXQ6IDB4NjgpIE1DIEZsYXNoIENvbW1hbmQgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19NQ19TRUNVUklUWSAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKE1DKSBTZWN1cml0eSBCaXQgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19HUE5WTTAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKE1DKSBTZWN0b3IgMCBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfR1BOVk0xICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChNQykgU2VjdG9yIDEgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0dQTlZNMiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEwKSAvLyAoTUMpIFNlY3RvciAyIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19HUE5WTTMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMSkgLy8gKE1DKSBTZWN0b3IgMyBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfR1BOVk00ICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8vIChNQykgU2VjdG9yIDQgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0dQTlZNNSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEzKSAvLyAoTUMpIFNlY3RvciA1IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19HUE5WTTYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNCkgLy8gKE1DKSBTZWN0b3IgNiBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfR1BOVk03ICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTUpIC8vIChNQykgU2VjdG9yIDcgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTMCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoTUMpIFNlY3RvciAwIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNykgLy8gKE1DKSBTZWN0b3IgMSBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MyICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTgpIC8vIChNQykgU2VjdG9yIDIgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTMyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE5KSAvLyAoTUMpIFNlY3RvciAzIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMCkgLy8gKE1DKSBTZWN0b3IgNCBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1M1ICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjEpIC8vIChNQykgU2VjdG9yIDUgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTNiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIyKSAvLyAoTUMpIFNlY3RvciA2IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzcgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMykgLy8gKE1DKSBTZWN0b3IgNyBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1M4ICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjQpIC8vIChNQykgU2VjdG9yIDggTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTOSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI1KSAvLyAoTUMpIFNlY3RvciA5IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzEwICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNikgLy8gKE1DKSBTZWN0b3IgMTAgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTMTEgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI3KSAvLyAoTUMpIFNlY3RvciAxMSBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxMiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjgpIC8vIChNQykgU2VjdG9yIDEyIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzEzICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyOSkgLy8gKE1DKSBTZWN0b3IgMTMgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTMTQgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDMwKSAvLyAoTUMpIFNlY3RvciAxNCBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxNSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMzEpIC8vIChNQykgU2VjdG9yIDE1IExvY2sgU3RhdHVzDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBTZXJpYWwgUGFyYWxsZWwgSW50ZXJmYWNlICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfU1BJDQotew0KLSAgICBBVDkxX1JFRyBTUElfQ1I7ICAgICAgICAgIC8qIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1BJX01SOyAgICAgICAgICAvKiBNb2RlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNQSV9SRFI7ICAgICAgICAgLyogUmVjZWl2ZSBEYXRhIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNQSV9URFI7ICAgICAgICAgLyogVHJhbnNtaXQgRGF0YSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTUElfU1I7ICAgICAgICAgIC8qIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTUElfSUVSOyAgICAgICAgIC8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1BJX0lEUjsgICAgICAgICAvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTUElfSU1SOyAgICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMFsgNCBdOyAgLyogKi8NCi0gICAgQVQ5MV9SRUcgU1BJX0NTUlsgNCBdOyAgICAvKiBDaGlwIFNlbGVjdCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDFbIDQ4IF07IC8qICovDQotICAgIEFUOTFfUkVHIFNQSV9SUFI7ICAgICAgICAgLyogUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNQSV9SQ1I7ICAgICAgICAgLyogUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNQSV9UUFI7ICAgICAgICAgLyogVHJhbnNtaXQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTUElfVENSOyAgICAgICAgIC8qIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1BJX1JOUFI7ICAgICAgICAvKiBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTUElfUk5DUjsgICAgICAgIC8qIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNQSV9UTlBSOyAgICAgICAgLyogVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNQSV9UTkNSOyAgICAgICAgLyogVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNQSV9QVENSOyAgICAgICAgLyogUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1BJX1BUU1I7ICAgICAgICAvKiBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotfSBBVDkxU19TUEksICogQVQ5MVBTX1NQSTsNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFNlcmlhbCBQYXJhbGxlbCBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19TUEkgew0KKwlBVDkxX1JFRwkgU1BJX0NSOyAJLy8gQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX01SOyAJLy8gTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX1JEUjsgCS8vIFJlY2VpdmUgRGF0YSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX1REUjsgCS8vIFRyYW5zbWl0IERhdGEgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9TUjsgCS8vIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX0lFUjsgCS8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbNF07IAkvLyANCisJQVQ5MV9SRUcJIFNQSV9DU1JbNF07IAkvLyBDaGlwIFNlbGVjdCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzQ4XTsgCS8vIA0KKwlBVDkxX1JFRwkgU1BJX1JQUjsgCS8vIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX1JDUjsgCS8vIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX1RQUjsgCS8vIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9UQ1I7IAkvLyBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTUElfUk5QUjsgCS8vIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTUElfUk5DUjsgCS8vIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTUElfVE5QUjsgCS8vIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX1ROQ1I7IAkvLyBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9QVENSOyAJLy8gUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9QVFNSOyAJLy8gUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KK30gQVQ5MVNfU1BJLCAqQVQ5MVBTX1NQSTsNCiANCi0vKiAtLS0tLS0tLSBTUElfQ1IgOiAoU1BJIE9mZnNldDogMHgwKSBTUEkgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX1NQSUVOICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgICAvKiAoU1BJKSBTUEkgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19TUElfU1BJRElTICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAgIC8qIChTUEkpIFNQSSBEaXNhYmxlICovDQotI2RlZmluZSBBVDkxQ19TUElfU1dSU1QgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNyApICAgIC8qIChTUEkpIFNQSSBTb2Z0d2FyZSByZXNldCAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX0xBU1RYRkVSICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDI0ICkgICAvKiAoU1BJKSBTUEkgTGFzdCBUcmFuc2ZlciAqLw0KLS8qIC0tLS0tLS0tIFNQSV9NUiA6IChTUEkgT2Zmc2V0OiAweDQpIFNQSSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19TUElfTVNUUiAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgIC8qIChTUEkpIE1hc3Rlci9TbGF2ZSBNb2RlICovDQotI2RlZmluZSBBVDkxQ19TUElfUFMgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAgIC8qIChTUEkpIFBlcmlwaGVyYWwgU2VsZWN0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1BJX1BTX0ZJWEVEICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMSApICAgIC8qIChTUEkpIEZpeGVkIFBlcmlwaGVyYWwgU2VsZWN0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1BJX1BTX1ZBUklBQkxFICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAgIC8qIChTUEkpIFZhcmlhYmxlIFBlcmlwaGVyYWwgU2VsZWN0ICovDQotI2RlZmluZSBBVDkxQ19TUElfUENTREVDICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMiApICAgIC8qIChTUEkpIENoaXAgU2VsZWN0IERlY29kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX0ZESVYgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDMgKSAgICAvKiAoU1BJKSBDbG9jayBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9NT0RGRElTICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA0ICkgICAgLyogKFNQSSkgTW9kZSBGYXVsdCBEZXRlY3Rpb24gKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9MTEIgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA3ICkgICAgLyogKFNQSSkgQ2xvY2sgU2VsZWN0aW9uICovDQotI2RlZmluZSBBVDkxQ19TUElfUENTICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEYgPDwgMTYgKSAgIC8qIChTUEkpIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9ETFlCQ1MgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RkYgPDwgMjQgKSAgLyogKFNQSSkgRGVsYXkgQmV0d2VlbiBDaGlwIFNlbGVjdHMgKi8NCi0vKiAtLS0tLS0tLSBTUElfUkRSIDogKFNQSSBPZmZzZXQ6IDB4OCkgUmVjZWl2ZSBEYXRhIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19TUElfUkQgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGRkYgPDwgMCApIC8qIChTUEkpIFJlY2VpdmUgRGF0YSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX1JQQ1MgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGIDw8IDE2ICkgICAvKiAoU1BJKSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IFN0YXR1cyAqLw0KLS8qIC0tLS0tLS0tIFNQSV9URFIgOiAoU1BJIE9mZnNldDogMHhjKSBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19TUElfVEQgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGRkYgPDwgMCApIC8qIChTUEkpIFRyYW5zbWl0IERhdGEgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9UUENTICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RiA8PCAxNiApICAgLyogKFNQSSkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCBTdGF0dXMgKi8NCi0vKiAtLS0tLS0tLSBTUElfU1IgOiAoU1BJIE9mZnNldDogMHgxMCkgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19TUElfUkRSRiAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgIC8qIChTUEkpIFJlY2VpdmUgRGF0YSBSZWdpc3RlciBGdWxsICovDQotI2RlZmluZSBBVDkxQ19TUElfVERSRSAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAgIC8qIChTUEkpIFRyYW5zbWl0IERhdGEgUmVnaXN0ZXIgRW1wdHkgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9NT0RGICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyICkgICAgLyogKFNQSSkgTW9kZSBGYXVsdCBFcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX09WUkVTICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDMgKSAgICAvKiAoU1BJKSBPdmVycnVuIEVycm9yIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX0VORFJYICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDQgKSAgICAvKiAoU1BJKSBFbmQgb2YgUmVjZWl2ZXIgVHJhbnNmZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9FTkRUWCAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA1ICkgICAgLyogKFNQSSkgRW5kIG9mIFJlY2VpdmVyIFRyYW5zZmVyICovDQotI2RlZmluZSBBVDkxQ19TUElfUlhCVUZGICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNiApICAgIC8qIChTUEkpIFJYQlVGRiBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9UWEJVRkUgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA3ICkgICAgLyogKFNQSSkgVFhCVUZFIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX05TU1IgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDggKSAgICAvKiAoU1BJKSBOU1NSIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX1RYRU1QVFkgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDkgKSAgICAvKiAoU1BJKSBUWEVNUFRZIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX1NQSUVOUyAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE2ICkgICAvKiAoU1BJKSBFbmFibGUgU3RhdHVzICovDQotLyogLS0tLS0tLS0gU1BJX0lFUiA6IChTUEkgT2Zmc2V0OiAweDE0KSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gU1BJX0lEUiA6IChTUEkgT2Zmc2V0OiAweDE4KSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFNQSV9JTVIgOiAoU1BJIE9mZnNldDogMHgxYykgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBTUElfQ1NSIDogKFNQSSBPZmZzZXQ6IDB4MzApIENoaXAgU2VsZWN0IFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19TUElfQ1BPTCAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgICAvKiAoU1BJKSBDbG9jayBQb2xhcml0eSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX05DUEhBICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAgLyogKFNQSSkgQ2xvY2sgUGhhc2UgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9DU0FBVCAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDMgKSAgIC8qIChTUEkpIENoaXAgU2VsZWN0IEFjdGl2ZSBBZnRlciBUcmFuc2ZlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX0JJVFMgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEYgPDwgNCApICAgLyogKFNQSSkgQml0cyBQZXIgVHJhbnNmZXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TUElfQklUU184ICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDQgKSAgIC8qIChTUEkpIDggQml0cyBQZXIgdHJhbnNmZXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TUElfQklUU185ICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDQgKSAgIC8qIChTUEkpIDkgQml0cyBQZXIgdHJhbnNmZXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TUElfQklUU18xMCAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDQgKSAgIC8qIChTUEkpIDEwIEJpdHMgUGVyIHRyYW5zZmVyICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1BJX0JJVFNfMTEgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCA0ICkgICAvKiAoU1BJKSAxMSBCaXRzIFBlciB0cmFuc2ZlciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NQSV9CSVRTXzEyICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDQgPDwgNCApICAgLyogKFNQSSkgMTIgQml0cyBQZXIgdHJhbnNmZXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TUElfQklUU18xMyAgICAoICggdW5zaWduZWQgaW50ICkgMHg1IDw8IDQgKSAgIC8qIChTUEkpIDEzIEJpdHMgUGVyIHRyYW5zZmVyICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1BJX0JJVFNfMTQgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NiA8PCA0ICkgICAvKiAoU1BJKSAxNCBCaXRzIFBlciB0cmFuc2ZlciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NQSV9CSVRTXzE1ICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDcgPDwgNCApICAgLyogKFNQSSkgMTUgQml0cyBQZXIgdHJhbnNmZXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TUElfQklUU18xNiAgICAoICggdW5zaWduZWQgaW50ICkgMHg4IDw8IDQgKSAgIC8qIChTUEkpIDE2IEJpdHMgUGVyIHRyYW5zZmVyICovDQotI2RlZmluZSBBVDkxQ19TUElfU0NCUiAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RkYgPDwgOCApICAvKiAoU1BJKSBTZXJpYWwgQ2xvY2sgQmF1ZCBSYXRlICovDQotI2RlZmluZSBBVDkxQ19TUElfRExZQlMgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RkYgPDwgMTYgKSAvKiAoU1BJKSBEZWxheSBCZWZvcmUgU1BDSyAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX0RMWUJDVCAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGIDw8IDI0ICkgLyogKFNQSSkgRGVsYXkgQmV0d2VlbiBDb25zZWN1dGl2ZSBUcmFuc2ZlcnMgKi8NCisvLyAtLS0tLS0tLSBTUElfQ1IgOiAoU1BJIE9mZnNldDogMHgwKSBTUEkgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NQSV9TUElFTiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoU1BJKSBTUEkgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19TUElfU1BJRElTICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFNQSSkgU1BJIERpc2FibGUNCisjZGVmaW5lIEFUOTFDX1NQSV9TV1JTVCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoU1BJKSBTUEkgU29mdHdhcmUgcmVzZXQNCisjZGVmaW5lIEFUOTFDX1NQSV9MQVNUWEZFUiAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI0KSAvLyAoU1BJKSBTUEkgTGFzdCBUcmFuc2Zlcg0KKy8vIC0tLS0tLS0tIFNQSV9NUiA6IChTUEkgT2Zmc2V0OiAweDQpIFNQSSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1BJX01TVFIgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChTUEkpIE1hc3Rlci9TbGF2ZSBNb2RlDQorI2RlZmluZSBBVDkxQ19TUElfUFMgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFNQSSkgUGVyaXBoZXJhbCBTZWxlY3QNCisjZGVmaW5lIAlBVDkxQ19TUElfUFNfRklYRUQgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgMSkgLy8gKFNQSSkgRml4ZWQgUGVyaXBoZXJhbCBTZWxlY3QNCisjZGVmaW5lIAlBVDkxQ19TUElfUFNfVkFSSUFCTEUgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFNQSSkgVmFyaWFibGUgUGVyaXBoZXJhbCBTZWxlY3QNCisjZGVmaW5lIEFUOTFDX1NQSV9QQ1NERUMgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoU1BJKSBDaGlwIFNlbGVjdCBEZWNvZGUNCisjZGVmaW5lIEFUOTFDX1NQSV9GRElWICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoU1BJKSBDbG9jayBTZWxlY3Rpb24NCisjZGVmaW5lIEFUOTFDX1NQSV9NT0RGRElTICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoU1BJKSBNb2RlIEZhdWx0IERldGVjdGlvbg0KKyNkZWZpbmUgQVQ5MUNfU1BJX0xMQiAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChTUEkpIENsb2NrIFNlbGVjdGlvbg0KKyNkZWZpbmUgQVQ5MUNfU1BJX1BDUyAgICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgMTYpIC8vIChTUEkpIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QNCisjZGVmaW5lIEFUOTFDX1NQSV9ETFlCQ1MgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRiA8PCAyNCkgLy8gKFNQSSkgRGVsYXkgQmV0d2VlbiBDaGlwIFNlbGVjdHMNCisvLyAtLS0tLS0tLSBTUElfUkRSIDogKFNQSSBPZmZzZXQ6IDB4OCkgUmVjZWl2ZSBEYXRhIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1BJX1JEICAgICAgICAgICgodW5zaWduZWQgaW50KSAweEZGRkYgPDwgIDApIC8vIChTUEkpIFJlY2VpdmUgRGF0YQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX1JQQ1MgICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgMTYpIC8vIChTUEkpIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgU3RhdHVzDQorLy8gLS0tLS0tLS0gU1BJX1REUiA6IChTUEkgT2Zmc2V0OiAweGMpIFRyYW5zbWl0IERhdGEgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TUElfVEQgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGRiA8PCAgMCkgLy8gKFNQSSkgVHJhbnNtaXQgRGF0YQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX1RQQ1MgICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgMTYpIC8vIChTUEkpIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgU3RhdHVzDQorLy8gLS0tLS0tLS0gU1BJX1NSIDogKFNQSSBPZmZzZXQ6IDB4MTApIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NQSV9SRFJGICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoU1BJKSBSZWNlaXZlIERhdGEgUmVnaXN0ZXIgRnVsbA0KKyNkZWZpbmUgQVQ5MUNfU1BJX1REUkUgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChTUEkpIFRyYW5zbWl0IERhdGEgUmVnaXN0ZXIgRW1wdHkNCisjZGVmaW5lIEFUOTFDX1NQSV9NT0RGICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoU1BJKSBNb2RlIEZhdWx0IEVycm9yDQorI2RlZmluZSBBVDkxQ19TUElfT1ZSRVMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKFNQSSkgT3ZlcnJ1biBFcnJvciBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX1NQSV9FTkRSWCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoU1BJKSBFbmQgb2YgUmVjZWl2ZXIgVHJhbnNmZXINCisjZGVmaW5lIEFUOTFDX1NQSV9FTkRUWCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoU1BJKSBFbmQgb2YgUmVjZWl2ZXIgVHJhbnNmZXINCisjZGVmaW5lIEFUOTFDX1NQSV9SWEJVRkYgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoU1BJKSBSWEJVRkYgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19TUElfVFhCVUZFICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKFNQSSkgVFhCVUZFIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfU1BJX05TU1IgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChTUEkpIE5TU1IgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19TUElfVFhFTVBUWSAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLy8gKFNQSSkgVFhFTVBUWSBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1NQSV9TUElFTlMgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoU1BJKSBFbmFibGUgU3RhdHVzDQorLy8gLS0tLS0tLS0gU1BJX0lFUiA6IChTUEkgT2Zmc2V0OiAweDE0KSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFNQSV9JRFIgOiAoU1BJIE9mZnNldDogMHgxOCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gU1BJX0lNUiA6IChTUEkgT2Zmc2V0OiAweDFjKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBTUElfQ1NSIDogKFNQSSBPZmZzZXQ6IDB4MzApIENoaXAgU2VsZWN0IFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1BJX0NQT0wgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChTUEkpIENsb2NrIFBvbGFyaXR5DQorI2RlZmluZSBBVDkxQ19TUElfTkNQSEEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFNQSSkgQ2xvY2sgUGhhc2UNCisjZGVmaW5lIEFUOTFDX1NQSV9DU0FBVCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoU1BJKSBDaGlwIFNlbGVjdCBBY3RpdmUgQWZ0ZXIgVHJhbnNmZXINCisjZGVmaW5lIEFUOTFDX1NQSV9CSVRTICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8ICA0KSAvLyAoU1BJKSBCaXRzIFBlciBUcmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NQSV9CSVRTXzggICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDQpIC8vIChTUEkpIDggQml0cyBQZXIgdHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TUElfQklUU185ICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoU1BJKSA5IEJpdHMgUGVyIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1BJX0JJVFNfMTAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgNCkgLy8gKFNQSSkgMTAgQml0cyBQZXIgdHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TUElfQklUU18xMSAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA0KSAvLyAoU1BJKSAxMSBCaXRzIFBlciB0cmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NQSV9CSVRTXzEyICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDQgPDwgIDQpIC8vIChTUEkpIDEyIEJpdHMgUGVyIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1BJX0JJVFNfMTMgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NSA8PCAgNCkgLy8gKFNQSSkgMTMgQml0cyBQZXIgdHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TUElfQklUU18xNCAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg2IDw8ICA0KSAvLyAoU1BJKSAxNCBCaXRzIFBlciB0cmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NQSV9CSVRTXzE1ICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgIDQpIC8vIChTUEkpIDE1IEJpdHMgUGVyIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1BJX0JJVFNfMTYgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4OCA8PCAgNCkgLy8gKFNQSSkgMTYgQml0cyBQZXIgdHJhbnNmZXINCisjZGVmaW5lIEFUOTFDX1NQSV9TQ0JSICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRiA8PCAgOCkgLy8gKFNQSSkgU2VyaWFsIENsb2NrIEJhdWQgUmF0ZQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX0RMWUJTICAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8IDE2KSAvLyAoU1BJKSBEZWxheSBCZWZvcmUgU1BDSw0KKyNkZWZpbmUgQVQ5MUNfU1BJX0RMWUJDVCAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8IDI0KSAvLyAoU1BJKSBEZWxheSBCZXR3ZWVuIENvbnNlY3V0aXZlIFRyYW5zZmVycw0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVXNhcnQgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLXR5cGVkZWYgc3RydWN0IF9BVDkxU19VU0FSVA0KLXsNCi0gICAgQVQ5MV9SRUcgVVNfQ1I7ICAgICAgICAgICAvKiBDb250cm9sIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFVTX01SOyAgICAgICAgICAgLyogTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBVU19JRVI7ICAgICAgICAgIC8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVVNfSURSOyAgICAgICAgICAvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBVU19JTVI7ICAgICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFVTX0NTUjsgICAgICAgICAgLyogQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVVNfUkhSOyAgICAgICAgICAvKiBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFVTX1RIUjsgICAgICAgICAgLyogVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBVU19CUkdSOyAgICAgICAgIC8qIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVVNfUlRPUjsgICAgICAgICAvKiBSZWNlaXZlciBUaW1lLW91dCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBVU19UVEdSOyAgICAgICAgIC8qIFRyYW5zbWl0dGVyIFRpbWUtZ3VhcmQgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQwWyA1IF07ICAvKiAqLw0KLSAgICBBVDkxX1JFRyBVU19GSURJOyAgICAgICAgIC8qIEZJX0RJX1JhdGlvIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFVTX05FUjsgICAgICAgICAgLyogTmIgRXJyb3JzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMVsgMSBdOyAgLyogKi8NCi0gICAgQVQ5MV9SRUcgVVNfSUY7ICAgICAgICAgICAvKiBJUkRBX0ZJTFRFUiBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDJbIDQ0IF07IC8qICovDQotICAgIEFUOTFfUkVHIFVTX1JQUjsgICAgICAgICAgLyogUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFVTX1JDUjsgICAgICAgICAgLyogUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFVTX1RQUjsgICAgICAgICAgLyogVHJhbnNtaXQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBVU19UQ1I7ICAgICAgICAgIC8qIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVVNfUk5QUjsgICAgICAgICAvKiBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBVU19STkNSOyAgICAgICAgIC8qIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFVTX1ROUFI7ICAgICAgICAgLyogVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFVTX1ROQ1I7ICAgICAgICAgLyogVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFVTX1BUQ1I7ICAgICAgICAgLyogUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVVNfUFRTUjsgICAgICAgICAvKiBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotfSBBVDkxU19VU0FSVCwgKiBBVDkxUFNfVVNBUlQ7DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBVc2FydA0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1VTQVJUIHsNCisJQVQ5MV9SRUcJIFVTX0NSOyAJLy8gQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfTVI7IAkvLyBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX0NTUjsgCS8vIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19SSFI7IAkvLyBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19USFI7IAkvLyBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19CUkdSOyAJLy8gQmF1ZCBSYXRlIEdlbmVyYXRvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfUlRPUjsgCS8vIFJlY2VpdmVyIFRpbWUtb3V0IFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19UVEdSOyAJLy8gVHJhbnNtaXR0ZXIgVGltZS1ndWFyZCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzVdOyAJLy8gDQorCUFUOTFfUkVHCSBVU19GSURJOyAJLy8gRklfRElfUmF0aW8gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX05FUjsgCS8vIE5iIEVycm9ycyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBVU19JRjsgCS8vIElSREFfRklMVEVSIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDJbNDRdOyAJLy8gDQorCUFUOTFfUkVHCSBVU19SUFI7IAkvLyBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX1JDUjsgCS8vIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfVFBSOyAJLy8gVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfVENSOyAJLy8gVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfUk5QUjsgCS8vIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19STkNSOyAJLy8gUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX1ROUFI7IAkvLyBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX1ROQ1I7IAkvLyBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX1BUQ1I7IAkvLyBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfUFRTUjsgCS8vIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCit9IEFUOTFTX1VTQVJULCAqQVQ5MVBTX1VTQVJUOw0KIA0KLS8qIC0tLS0tLS0tIFVTX0NSIDogKFVTQVJUIE9mZnNldDogMHgwKSBEZWJ1ZyBVbml0IENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1NUVEJSSyAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOSApICAvKiAoVVNBUlQpIFN0YXJ0IEJyZWFrICovDQotI2RlZmluZSBBVDkxQ19VU19TVFBCUksgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEwICkgLyogKFVTQVJUKSBTdG9wIEJyZWFrICovDQotI2RlZmluZSBBVDkxQ19VU19TVFRUTyAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDExICkgLyogKFVTQVJUKSBTdGFydCBUaW1lLW91dCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfU0VOREEgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMiApIC8qIChVU0FSVCkgU2VuZCBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19VU19SU1RJVCAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEzICkgLyogKFVTQVJUKSBSZXNldCBJdGVyYXRpb25zICovDQotI2RlZmluZSBBVDkxQ19VU19SU1ROQUNLICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE0ICkgLyogKFVTQVJUKSBSZXNldCBOb24gQWNrbm93bGVkZ2UgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1JFVFRPICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTUgKSAvKiAoVVNBUlQpIFJlYXJtIFRpbWUtb3V0ICovDQotI2RlZmluZSBBVDkxQ19VU19EVFJFTiAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE2ICkgLyogKFVTQVJUKSBEYXRhIFRlcm1pbmFsIHJlYWR5IEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfRFRSRElTICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNyApIC8qIChVU0FSVCkgRGF0YSBUZXJtaW5hbCByZWFkeSBEaXNhYmxlICovDQotI2RlZmluZSBBVDkxQ19VU19SVFNFTiAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE4ICkgLyogKFVTQVJUKSBSZXF1ZXN0IHRvIFNlbmQgZW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19VU19SVFNESVMgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE5ICkgLyogKFVTQVJUKSBSZXF1ZXN0IHRvIFNlbmQgRGlzYWJsZSAqLw0KLS8qIC0tLS0tLS0tIFVTX01SIDogKFVTQVJUIE9mZnNldDogMHg0KSBEZWJ1ZyBVbml0IE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1VTTU9ERSAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEYgPDwgMCApICAvKiAoVVNBUlQpIFVzYXJ0IG1vZGUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19VU01PREVfTk9STUFMICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgKSAgICAgICAvKiAoVVNBUlQpIE5vcm1hbCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX1VTTU9ERV9SUzQ4NSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSApICAgICAgIC8qIChVU0FSVCkgUlM0ODUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19VU01PREVfSFdIU0ggICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgKSAgICAgICAvKiAoVVNBUlQpIEhhcmR3YXJlIEhhbmRzaGFraW5nICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfVVNNT0RFX01PREVNICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzICkgICAgICAgLyogKFVTQVJUKSBNb2RlbSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX1VTTU9ERV9JU083ODE2XzAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NCApICAgICAgIC8qIChVU0FSVCkgSVNPNzgxNiBwcm90b2NvbDogVCA9IDAgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19VU01PREVfSVNPNzgxNl8xICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDYgKSAgICAgICAvKiAoVVNBUlQpIElTTzc4MTYgcHJvdG9jb2w6IFQgPSAxICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfVVNNT0RFX0lSREEgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg4ICkgICAgICAgLyogKFVTQVJUKSBJckRBICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfVVNNT0RFX1NXSFNIICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhDICkgICAgICAgLyogKFVTQVJUKSBTb2Z0d2FyZSBIYW5kc2hha2luZyAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfQ0xLUyAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCA0ICkgIC8qIChVU0FSVCkgQ2xvY2sgU2VsZWN0aW9uIChCYXVkIFJhdGUgZ2VuZXJhdG9yIElucHV0IENsb2NrICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfQ0xLU19DTE9DSyAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDQgKSAgLyogKFVTQVJUKSBDbG9jayAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX0NMS1NfRkRJVjEgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA0ICkgIC8qIChVU0FSVCkgZmRpdjEgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19DTEtTX1NMT1cgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgNCApICAvKiAoVVNBUlQpIHNsb3dfY2xvY2sgKEFSTSkgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19DTEtTX0VYVCAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgNCApICAvKiAoVVNBUlQpIEV4dGVybmFsIChTQ0spICovDQotI2RlZmluZSBBVDkxQ19VU19DSFJMICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDYgKSAgLyogKFVTQVJUKSBDbG9jayBTZWxlY3Rpb24gKEJhdWQgUmF0ZSBnZW5lcmF0b3IgSW5wdXQgQ2xvY2sgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19DSFJMXzVfQklUUyAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgNiApICAvKiAoVVNBUlQpIENoYXJhY3RlciBMZW5ndGg6IDUgYml0cyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX0NIUkxfNl9CSVRTICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA2ICkgIC8qIChVU0FSVCkgQ2hhcmFjdGVyIExlbmd0aDogNiBiaXRzICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfQ0hSTF83X0JJVFMgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDYgKSAgLyogKFVTQVJUKSBDaGFyYWN0ZXIgTGVuZ3RoOiA3IGJpdHMgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19DSFJMXzhfQklUUyAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgNiApICAvKiAoVVNBUlQpIENoYXJhY3RlciBMZW5ndGg6IDggYml0cyAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfU1lOQyAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgIC8qIChVU0FSVCkgU3luY2hyb25vdXMgTW9kZSBTZWxlY3QgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX05CU1RPUCAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTIgKSAvKiAoVVNBUlQpIE51bWJlciBvZiBTdG9wIGJpdHMgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19OQlNUT1BfMV9CSVQgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMTIgKSAvKiAoVVNBUlQpIDEgc3RvcCBiaXQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19OQlNUT1BfMTVfQklUICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTIgKSAvKiAoVVNBUlQpIEFzeW5jaHJvbm91cyAoU1lOQz0wKSAyIHN0b3AgYml0cyBTeW5jaHJvbm91cyAoU1lOQz0xKSAyIHN0b3AgYml0cyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX05CU1RPUF8yX0JJVCAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCAxMiApIC8qIChVU0FSVCkgMiBzdG9wIGJpdHMgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX01TQkYgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTYgKSAvKiAoVVNBUlQpIEJpdCBPcmRlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfTU9ERTkgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNyApIC8qIChVU0FSVCkgOS1iaXQgQ2hhcmFjdGVyIGxlbmd0aCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfQ0tMTyAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxOCApIC8qIChVU0FSVCkgQ2xvY2sgT3V0cHV0IFNlbGVjdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfT1ZFUiAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxOSApIC8qIChVU0FSVCkgT3ZlciBTYW1wbGluZyBNb2RlICovDQotI2RlZmluZSBBVDkxQ19VU19JTkFDSyAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIwICkgLyogKFVTQVJUKSBJbmhpYml0IE5vbiBBY2tub3dsZWRnZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfRFNOQUNLICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyMSApIC8qIChVU0FSVCkgRGlzYWJsZSBTdWNjZXNzaXZlIE5BQ0sgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX01BWF9JVEVSICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjQgKSAvKiAoVVNBUlQpIE51bWJlciBvZiBSZXBldGl0aW9ucyAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfRklMVEVSICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyOCApIC8qIChVU0FSVCkgUmVjZWl2ZSBMaW5lIEZpbHRlciAqLw0KLS8qIC0tLS0tLS0tIFVTX0lFUiA6IChVU0FSVCBPZmZzZXQ6IDB4OCkgRGVidWcgVW5pdCBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19VU19SWEJSSyAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAgLyogKFVTQVJUKSBCcmVhayBSZWNlaXZlZC9FbmQgb2YgQnJlYWsgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1RJTUVPVVQgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOCApICAvKiAoVVNBUlQpIFJlY2VpdmVyIFRpbWUtb3V0ICovDQotI2RlZmluZSBBVDkxQ19VU19JVEVSQVRJT04gICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEwICkgLyogKFVTQVJUKSBNYXggbnVtYmVyIG9mIFJlcGV0aXRpb25zIFJlYWNoZWQgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX05BQ0sgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTMgKSAvKiAoVVNBUlQpIE5vbiBBY2tub3dsZWRnZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfUklJQyAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNiApIC8qIChVU0FSVCkgUmluZyBJTmRpY2F0b3IgSW5wdXQgQ2hhbmdlIEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX0RTUklDICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTcgKSAvKiAoVVNBUlQpIERhdGEgU2V0IFJlYWR5IElucHV0IENoYW5nZSBGbGFnICovDQotI2RlZmluZSBBVDkxQ19VU19EQ0RJQyAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE4ICkgLyogKFVTQVJUKSBEYXRhIENhcnJpZXIgRmxhZyAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfQ1RTSUMgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxOSApIC8qIChVU0FSVCkgQ2xlYXIgVG8gU2VuZCBJbnB1dCBDaGFuZ2UgRmxhZyAqLw0KLS8qIC0tLS0tLS0tIFVTX0lEUiA6IChVU0FSVCBPZmZzZXQ6IDB4YykgRGVidWcgVW5pdCBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFVTX0lNUiA6IChVU0FSVCBPZmZzZXQ6IDB4MTApIERlYnVnIFVuaXQgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBVU19DU1IgOiAoVVNBUlQgT2Zmc2V0OiAweDE0KSBEZWJ1ZyBVbml0IENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19VU19SSSAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyMCApICAgLyogKFVTQVJUKSBJbWFnZSBvZiBSSSBJbnB1dCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfRFNSICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjEgKSAgIC8qIChVU0FSVCkgSW1hZ2Ugb2YgRFNSIElucHV0ICovDQotI2RlZmluZSBBVDkxQ19VU19EQ0QgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyMiApICAgLyogKFVTQVJUKSBJbWFnZSBvZiBEQ0QgSW5wdXQgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX0NUUyAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIzICkgICAvKiAoVVNBUlQpIEltYWdlIG9mIENUUyBJbnB1dCAqLw0KKy8vIC0tLS0tLS0tIFVTX0NSIDogKFVTQVJUIE9mZnNldDogMHgwKSBEZWJ1ZyBVbml0IENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VU19TVFRCUksgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLy8gKFVTQVJUKSBTdGFydCBCcmVhaw0KKyNkZWZpbmUgQVQ5MUNfVVNfU1RQQlJLICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChVU0FSVCkgU3RvcCBCcmVhaw0KKyNkZWZpbmUgQVQ5MUNfVVNfU1RUVE8gICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTEpIC8vIChVU0FSVCkgU3RhcnQgVGltZS1vdXQNCisjZGVmaW5lIEFUOTFDX1VTX1NFTkRBICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvLyAoVVNBUlQpIFNlbmQgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfVVNfUlNUSVQgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTMpIC8vIChVU0FSVCkgUmVzZXQgSXRlcmF0aW9ucw0KKyNkZWZpbmUgQVQ5MUNfVVNfUlNUTkFDSyAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTQpIC8vIChVU0FSVCkgUmVzZXQgTm9uIEFja25vd2xlZGdlDQorI2RlZmluZSBBVDkxQ19VU19SRVRUTyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNSkgLy8gKFVTQVJUKSBSZWFybSBUaW1lLW91dA0KKyNkZWZpbmUgQVQ5MUNfVVNfRFRSRU4gICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChVU0FSVCkgRGF0YSBUZXJtaW5hbCByZWFkeSBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1VTX0RUUkRJUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE3KSAvLyAoVVNBUlQpIERhdGEgVGVybWluYWwgcmVhZHkgRGlzYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfUlRTRU4gICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTgpIC8vIChVU0FSVCkgUmVxdWVzdCB0byBTZW5kIGVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfUlRTRElTICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTkpIC8vIChVU0FSVCkgUmVxdWVzdCB0byBTZW5kIERpc2FibGUNCisvLyAtLS0tLS0tLSBVU19NUiA6IChVU0FSVCBPZmZzZXQ6IDB4NCkgRGVidWcgVW5pdCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVVNfVVNNT0RFICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgIDApIC8vIChVU0FSVCkgVXNhcnQgbW9kZQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1VTTU9ERV9OT1JNQUwgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwKSAvLyAoVVNBUlQpIE5vcm1hbA0KKyNkZWZpbmUgCUFUOTFDX1VTX1VTTU9ERV9SUzQ4NSAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxKSAvLyAoVVNBUlQpIFJTNDg1DQorI2RlZmluZSAJQVQ5MUNfVVNfVVNNT0RFX0hXSFNIICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIpIC8vIChVU0FSVCkgSGFyZHdhcmUgSGFuZHNoYWtpbmcNCisjZGVmaW5lIAlBVDkxQ19VU19VU01PREVfTU9ERU0gICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MykgLy8gKFVTQVJUKSBNb2RlbQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1VTTU9ERV9JU083ODE2XzAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg0KSAvLyAoVVNBUlQpIElTTzc4MTYgcHJvdG9jb2w6IFQgPSAwDQorI2RlZmluZSAJQVQ5MUNfVVNfVVNNT0RFX0lTTzc4MTZfMSAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDYpIC8vIChVU0FSVCkgSVNPNzgxNiBwcm90b2NvbDogVCA9IDENCisjZGVmaW5lIAlBVDkxQ19VU19VU01PREVfSVJEQSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4OCkgLy8gKFVTQVJUKSBJckRBDQorI2RlZmluZSAJQVQ5MUNfVVNfVVNNT0RFX1NXSFNIICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweEMpIC8vIChVU0FSVCkgU29mdHdhcmUgSGFuZHNoYWtpbmcNCisjZGVmaW5lIEFUOTFDX1VTX0NMS1MgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA0KSAvLyAoVVNBUlQpIENsb2NrIFNlbGVjdGlvbiAoQmF1ZCBSYXRlIGdlbmVyYXRvciBJbnB1dCBDbG9jaw0KKyNkZWZpbmUgCUFUOTFDX1VTX0NMS1NfQ0xPQ0sgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgNCkgLy8gKFVTQVJUKSBDbG9jaw0KKyNkZWZpbmUgCUFUOTFDX1VTX0NMS1NfRkRJVjEgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFVTQVJUKSBmZGl2MQ0KKyNkZWZpbmUgCUFUOTFDX1VTX0NMS1NfU0xPVyAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgNCkgLy8gKFVTQVJUKSBzbG93X2Nsb2NrIChBUk0pDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0xLU19FWFQgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA0KSAvLyAoVVNBUlQpIEV4dGVybmFsIChTQ0spDQorI2RlZmluZSBBVDkxQ19VU19DSFJMICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgNikgLy8gKFVTQVJUKSBDbG9jayBTZWxlY3Rpb24gKEJhdWQgUmF0ZSBnZW5lcmF0b3IgSW5wdXQgQ2xvY2sNCisjZGVmaW5lIAlBVDkxQ19VU19DSFJMXzVfQklUUyAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDYpIC8vIChVU0FSVCkgQ2hhcmFjdGVyIExlbmd0aDogNSBiaXRzDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0hSTF82X0JJVFMgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoVVNBUlQpIENoYXJhY3RlciBMZW5ndGg6IDYgYml0cw0KKyNkZWZpbmUgCUFUOTFDX1VTX0NIUkxfN19CSVRTICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgNikgLy8gKFVTQVJUKSBDaGFyYWN0ZXIgTGVuZ3RoOiA3IGJpdHMNCisjZGVmaW5lIAlBVDkxQ19VU19DSFJMXzhfQklUUyAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDYpIC8vIChVU0FSVCkgQ2hhcmFjdGVyIExlbmd0aDogOCBiaXRzDQorI2RlZmluZSBBVDkxQ19VU19TWU5DICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFVTQVJUKSBTeW5jaHJvbm91cyBNb2RlIFNlbGVjdA0KKyNkZWZpbmUgQVQ5MUNfVVNfTkJTVE9QICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTIpIC8vIChVU0FSVCkgTnVtYmVyIG9mIFN0b3AgYml0cw0KKyNkZWZpbmUgCUFUOTFDX1VTX05CU1RPUF8xX0JJVCAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDEyKSAvLyAoVVNBUlQpIDEgc3RvcCBiaXQNCisjZGVmaW5lIAlBVDkxQ19VU19OQlNUT1BfMTVfQklUICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLy8gKFVTQVJUKSBBc3luY2hyb25vdXMgKFNZTkM9MCkgMiBzdG9wIGJpdHMgU3luY2hyb25vdXMgKFNZTkM9MSkgMiBzdG9wIGJpdHMNCisjZGVmaW5lIAlBVDkxQ19VU19OQlNUT1BfMl9CSVQgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxMikgLy8gKFVTQVJUKSAyIHN0b3AgYml0cw0KKyNkZWZpbmUgQVQ5MUNfVVNfTVNCRiAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChVU0FSVCkgQml0IE9yZGVyDQorI2RlZmluZSBBVDkxQ19VU19NT0RFOSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNykgLy8gKFVTQVJUKSA5LWJpdCBDaGFyYWN0ZXIgbGVuZ3RoDQorI2RlZmluZSBBVDkxQ19VU19DS0xPICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOCkgLy8gKFVTQVJUKSBDbG9jayBPdXRwdXQgU2VsZWN0DQorI2RlZmluZSBBVDkxQ19VU19PVkVSICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOSkgLy8gKFVTQVJUKSBPdmVyIFNhbXBsaW5nIE1vZGUNCisjZGVmaW5lIEFUOTFDX1VTX0lOQUNLICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIwKSAvLyAoVVNBUlQpIEluaGliaXQgTm9uIEFja25vd2xlZGdlDQorI2RlZmluZSBBVDkxQ19VU19EU05BQ0sgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMSkgLy8gKFVTQVJUKSBEaXNhYmxlIFN1Y2Nlc3NpdmUgTkFDSw0KKyNkZWZpbmUgQVQ5MUNfVVNfTUFYX0lURVIgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjQpIC8vIChVU0FSVCkgTnVtYmVyIG9mIFJlcGV0aXRpb25zDQorI2RlZmluZSBBVDkxQ19VU19GSUxURVIgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyOCkgLy8gKFVTQVJUKSBSZWNlaXZlIExpbmUgRmlsdGVyDQorLy8gLS0tLS0tLS0gVVNfSUVSIDogKFVTQVJUIE9mZnNldDogMHg4KSBEZWJ1ZyBVbml0IEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VU19SWEJSSyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFVTQVJUKSBCcmVhayBSZWNlaXZlZC9FbmQgb2YgQnJlYWsNCisjZGVmaW5lIEFUOTFDX1VTX1RJTUVPVVQgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoVVNBUlQpIFJlY2VpdmVyIFRpbWUtb3V0DQorI2RlZmluZSBBVDkxQ19VU19JVEVSQVRJT04gICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLy8gKFVTQVJUKSBNYXggbnVtYmVyIG9mIFJlcGV0aXRpb25zIFJlYWNoZWQNCisjZGVmaW5lIEFUOTFDX1VTX05BQ0sgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEzKSAvLyAoVVNBUlQpIE5vbiBBY2tub3dsZWRnZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfUklJQyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChVU0FSVCkgUmluZyBJTmRpY2F0b3IgSW5wdXQgQ2hhbmdlIEZsYWcNCisjZGVmaW5lIEFUOTFDX1VTX0RTUklDICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE3KSAvLyAoVVNBUlQpIERhdGEgU2V0IFJlYWR5IElucHV0IENoYW5nZSBGbGFnDQorI2RlZmluZSBBVDkxQ19VU19EQ0RJQyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOCkgLy8gKFVTQVJUKSBEYXRhIENhcnJpZXIgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfVVNfQ1RTSUMgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTkpIC8vIChVU0FSVCkgQ2xlYXIgVG8gU2VuZCBJbnB1dCBDaGFuZ2UgRmxhZw0KKy8vIC0tLS0tLS0tIFVTX0lEUiA6IChVU0FSVCBPZmZzZXQ6IDB4YykgRGVidWcgVW5pdCBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBVU19JTVIgOiAoVVNBUlQgT2Zmc2V0OiAweDEwKSBEZWJ1ZyBVbml0IEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFVTX0NTUiA6IChVU0FSVCBPZmZzZXQ6IDB4MTQpIERlYnVnIFVuaXQgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VU19SSSAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMCkgLy8gKFVTQVJUKSBJbWFnZSBvZiBSSSBJbnB1dA0KKyNkZWZpbmUgQVQ5MUNfVVNfRFNSICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjEpIC8vIChVU0FSVCkgSW1hZ2Ugb2YgRFNSIElucHV0DQorI2RlZmluZSBBVDkxQ19VU19EQ0QgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMikgLy8gKFVTQVJUKSBJbWFnZSBvZiBEQ0QgSW5wdXQNCisjZGVmaW5lIEFUOTFDX1VTX0NUUyAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIzKSAvLyAoVVNBUlQpIEltYWdlIG9mIENUUyBJbnB1dA0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgU3luY2hyb25vdXMgU2VyaWFsIENvbnRyb2xsZXIgSW50ZXJmYWNlICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfU1NDDQotew0KLSAgICBBVDkxX1JFRyBTU0NfQ1I7ICAgICAgICAgIC8qIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1NDX0NNUjsgICAgICAgICAvKiBDbG9jayBNb2RlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMFsgMiBdOyAgLyogKi8NCi0gICAgQVQ5MV9SRUcgU1NDX1JDTVI7ICAgICAgICAvKiBSZWNlaXZlIENsb2NrIE1vZGVSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTU0NfUkZNUjsgICAgICAgIC8qIFJlY2VpdmUgRnJhbWUgTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTU0NfVENNUjsgICAgICAgIC8qIFRyYW5zbWl0IENsb2NrIE1vZGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1NDX1RGTVI7ICAgICAgICAvKiBUcmFuc21pdCBGcmFtZSBNb2RlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNTQ19SSFI7ICAgICAgICAgLyogUmVjZWl2ZSBIb2xkaW5nIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNTQ19USFI7ICAgICAgICAgLyogVHJhbnNtaXQgSG9sZGluZyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDFbIDIgXTsgIC8qICovDQotICAgIEFUOTFfUkVHIFNTQ19SU0hSOyAgICAgICAgLyogUmVjZWl2ZSBTeW5jIEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1NDX1RTSFI7ICAgICAgICAvKiBUcmFuc21pdCBTeW5jIEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQyWyAyIF07ICAvKiAqLw0KLSAgICBBVDkxX1JFRyBTU0NfU1I7ICAgICAgICAgIC8qIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTU0NfSUVSOyAgICAgICAgIC8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1NDX0lEUjsgICAgICAgICAvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTU0NfSU1SOyAgICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkM1sgNDQgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgU1NDX1JQUjsgICAgICAgICAvKiBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1NDX1JDUjsgICAgICAgICAvKiBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1NDX1RQUjsgICAgICAgICAvKiBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNTQ19UQ1I7ICAgICAgICAgLyogVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTU0NfUk5QUjsgICAgICAgIC8qIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNTQ19STkNSOyAgICAgICAgLyogUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1NDX1ROUFI7ICAgICAgICAvKiBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1NDX1ROQ1I7ICAgICAgICAvKiBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1NDX1BUQ1I7ICAgICAgICAvKiBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTU0NfUFRTUjsgICAgICAgIC8qIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi19IEFUOTFTX1NTQywgKiBBVDkxUFNfU1NDOw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgU3luY2hyb25vdXMgU2VyaWFsIENvbnRyb2xsZXIgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfU1NDIHsNCisJQVQ5MV9SRUcJIFNTQ19DUjsgCS8vIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19DTVI7IAkvLyBDbG9jayBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbMl07IAkvLyANCisJQVQ5MV9SRUcJIFNTQ19SQ01SOyAJLy8gUmVjZWl2ZSBDbG9jayBNb2RlUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19SRk1SOyAJLy8gUmVjZWl2ZSBGcmFtZSBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfVENNUjsgCS8vIFRyYW5zbWl0IENsb2NrIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19URk1SOyAJLy8gVHJhbnNtaXQgRnJhbWUgTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1JIUjsgCS8vIFJlY2VpdmUgSG9sZGluZyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1RIUjsgCS8vIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMVsyXTsgCS8vIA0KKwlBVDkxX1JFRwkgU1NDX1JTSFI7IAkvLyBSZWNlaXZlIFN5bmMgSG9sZGluZyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1RTSFI7IAkvLyBUcmFuc21pdCBTeW5jIEhvbGRpbmcgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMlsyXTsgCS8vIA0KKwlBVDkxX1JFRwkgU1NDX1NSOyAJLy8gU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX0lEUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkM1s0NF07IAkvLyANCisJQVQ5MV9SRUcJIFNTQ19SUFI7IAkvLyBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19SQ1I7IAkvLyBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19UUFI7IAkvLyBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfVENSOyAJLy8gVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1JOUFI7IAkvLyBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1JOQ1I7IAkvLyBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1ROUFI7IAkvLyBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19UTkNSOyAJLy8gVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfUFRDUjsgCS8vIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfUFRTUjsgCS8vIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCit9IEFUOTFTX1NTQywgKkFUOTFQU19TU0M7DQogDQotLyogLS0tLS0tLS0gU1NDX0NSIDogKFNTQyBPZmZzZXQ6IDB4MCkgU1NDIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19SWEVOICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgLyogKFNTQykgUmVjZWl2ZSBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19SWERJUyAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAgLyogKFNTQykgUmVjZWl2ZSBEaXNhYmxlICovDQotI2RlZmluZSBBVDkxQ19TU0NfVFhFTiAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDggKSAgIC8qIChTU0MpIFRyYW5zbWl0IEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1RYRElTICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA5ICkgICAvKiAoU1NDKSBUcmFuc21pdCBEaXNhYmxlICovDQotI2RlZmluZSBBVDkxQ19TU0NfU1dSU1QgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE1ICkgIC8qIChTU0MpIFNvZnR3YXJlIFJlc2V0ICovDQotLyogLS0tLS0tLS0gU1NDX1JDTVIgOiAoU1NDIE9mZnNldDogMHgxMCkgU1NDIFJlY2VpdmUgQ2xvY2sgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0NLUyAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAwICkgICAvKiAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19DS1NfRElWICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCApICAgICAgICAvKiAoU1NDKSBEaXZpZGVkIENsb2NrICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX0NLU19USyAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxICkgICAgICAgIC8qIChTU0MpIFRLIENsb2NrIHNpZ25hbCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19DS1NfUksgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiApICAgICAgICAvKiAoU1NDKSBSSyBwaW4gKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19DS08gICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDcgPDwgMiApICAgLyogKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBPdXRwdXQgTW9kZSBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfQ0tPX05PTkUgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMiApICAgLyogKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBPdXRwdXQgTW9kZTogTm9uZSBSSyBwaW46IElucHV0LW9ubHkgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfQ0tPX0NPTlRJTk9VUyAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMiApICAgLyogKFNTQykgQ29udGludW91cyBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIFJLIHBpbjogT3V0cHV0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX0NLT19EQVRBX1RYICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDIgKSAgIC8qIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgb25seSBkdXJpbmcgZGF0YSB0cmFuc2ZlcnMgUksgcGluOiBPdXRwdXQgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19DS0kgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNSApICAgLyogKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBJbnZlcnNpb24gKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19TVEFSVCAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEYgPDwgOCApICAgLyogKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBTdGFydCBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfU1RBUlRfQ09OVElOT1VTICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgOCApICAgLyogKFNTQykgQ29udGludW91cywgYXMgc29vbiBhcyB0aGUgcmVjZWl2ZXIgaXMgZW5hYmxlZCwgYW5kIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBlbmQgb2YgdHJhbnNmZXIgb2YgdGhlIHByZXZpb3VzIGRhdGEuICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX1NUQVJUX1RYICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDggKSAgIC8qIChTU0MpIFRyYW5zbWl0L1JlY2VpdmUgc3RhcnQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfU1RBUlRfTE9XX1JGICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgOCApICAgLyogKFNTQykgRGV0ZWN0aW9uIG9mIGEgbG93IGxldmVsIG9uIFJGIGlucHV0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX1NUQVJUX0hJR0hfUkYgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDggKSAgIC8qIChTU0MpIERldGVjdGlvbiBvZiBhIGhpZ2ggbGV2ZWwgb24gUkYgaW5wdXQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfU1RBUlRfRkFMTF9SRiAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDQgPDwgOCApICAgLyogKFNTQykgRGV0ZWN0aW9uIG9mIGEgZmFsbGluZyBlZGdlIG9uIFJGIGlucHV0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX1NUQVJUX1JJU0VfUkYgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg1IDw8IDggKSAgIC8qIChTU0MpIERldGVjdGlvbiBvZiBhIHJpc2luZyBlZGdlIG9uIFJGIGlucHV0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX1NUQVJUX0xFVkVMX1JGICAgICAoICggdW5zaWduZWQgaW50ICkgMHg2IDw8IDggKSAgIC8qIChTU0MpIERldGVjdGlvbiBvZiBhbnkgbGV2ZWwgY2hhbmdlIG9uIFJGIGlucHV0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX1NUQVJUX0VER0VfUkYgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg3IDw8IDggKSAgIC8qIChTU0MpIERldGVjdGlvbiBvZiBhbnkgZWRnZSBvbiBSRiBpbnB1dCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19TVEFSVF8wICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4OCA8PCA4ICkgICAvKiAoU1NDKSBDb21wYXJlIDAgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19TVFRETFkgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGIDw8IDE2ICkgLyogKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBTdGFydCBEZWxheSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1BFUklPRCAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RkYgPDwgMjQgKSAvKiAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IFBlcmlvZCBEaXZpZGVyIFNlbGVjdGlvbiAqLw0KLS8qIC0tLS0tLS0tIFNTQ19SRk1SIDogKFNTQyBPZmZzZXQ6IDB4MTQpIFNTQyBSZWNlaXZlIEZyYW1lIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19EQVRMRU4gICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDFGIDw8IDAgKSAgLyogKFNTQykgRGF0YSBMZW5ndGggKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19MT09QICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNSApICAgLyogKFNTQykgTG9vcCBNb2RlICovDQotI2RlZmluZSBBVDkxQ19TU0NfTVNCRiAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDcgKSAgIC8qIChTU0MpIE1vc3QgU2lnbmlmaWNhbnQgQml0IEZpcnN0ICovDQotI2RlZmluZSBBVDkxQ19TU0NfREFUTkIgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGIDw8IDggKSAgIC8qIChTU0MpIERhdGEgTnVtYmVyIHBlciBGcmFtZSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0ZTTEVOICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RiA8PCAxNiApICAvKiAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgbGVuZ3RoICovDQotI2RlZmluZSBBVDkxQ19TU0NfRlNPUyAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg3IDw8IDIwICkgIC8qIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBPdXRwdXQgU2VsZWN0aW9uICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX0ZTT1NfTk9ORSAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDIwICkgIC8qIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IE5vbmUgUksgcGluIElucHV0LW9ubHkgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfRlNPU19ORUdBVElWRSAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjAgKSAgLyogKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogTmVnYXRpdmUgUHVsc2UgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfRlNPU19QT1NJVElWRSAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgMjAgKSAgLyogKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogUG9zaXRpdmUgUHVsc2UgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfRlNPU19MT1cgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMjAgKSAgLyogKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogRHJpdmVyIExvdyBkdXJpbmcgZGF0YSB0cmFuc2ZlciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19GU09TX0hJR0ggICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NCA8PCAyMCApICAvKiAoU1NDKSBTZWxlY3RlZCBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgU2lnbmFsOiBEcml2ZXIgSGlnaCBkdXJpbmcgZGF0YSB0cmFuc2ZlciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19GU09TX1RPR0dMRSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NSA8PCAyMCApICAvKiAoU1NDKSBTZWxlY3RlZCBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgU2lnbmFsOiBUb2dnbGluZyBhdCBlYWNoIHN0YXJ0IG9mIGRhdGEgdHJhbnNmZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19GU0VER0UgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjQgKSAgLyogKFNTQykgRnJhbWUgU3luYyBFZGdlIERldGVjdGlvbiAqLw0KLS8qIC0tLS0tLS0tIFNTQ19UQ01SIDogKFNTQyBPZmZzZXQ6IDB4MTgpIFNTQyBUcmFuc21pdCBDbG9jayBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gU1NDX1RGTVIgOiAoU1NDIE9mZnNldDogMHgxYykgU1NDIFRyYW5zbWl0IEZyYW1lIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19EQVRERUYgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNSApICAvKiAoU1NDKSBEYXRhIERlZmF1bHQgVmFsdWUgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19GU0RFTiAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjMgKSAvKiAoU1NDKSBGcmFtZSBTeW5jIERhdGEgRW5hYmxlICovDQotLyogLS0tLS0tLS0gU1NDX1NSIDogKFNTQyBPZmZzZXQ6IDB4NDApIFNTQyBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19UWFJEWSAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAvKiAoU1NDKSBUcmFuc21pdCBSZWFkeSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1RYRU1QVFkgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgIC8qIChTU0MpIFRyYW5zbWl0IEVtcHR5ICovDQotI2RlZmluZSBBVDkxQ19TU0NfRU5EVFggICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAgLyogKFNTQykgRW5kIE9mIFRyYW5zbWlzc2lvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1RYQlVGRSAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzICkgIC8qIChTU0MpIFRyYW5zbWl0IEJ1ZmZlciBFbXB0eSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1JYUkRZICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA0ICkgIC8qIChTU0MpIFJlY2VpdmUgUmVhZHkgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19PVlJVTiAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNSApICAvKiAoU1NDKSBSZWNlaXZlIE92ZXJydW4gKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19FTkRSWCAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNiApICAvKiAoU1NDKSBFbmQgb2YgUmVjZXB0aW9uICovDQotI2RlZmluZSBBVDkxQ19TU0NfUlhCVUZGICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDcgKSAgLyogKFNTQykgUmVjZWl2ZSBCdWZmZXIgRnVsbCAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1RYU1lOICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMCApIC8qIChTU0MpIFRyYW5zbWl0IFN5bmMgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19SWFNZTiAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTEgKSAvKiAoU1NDKSBSZWNlaXZlIFN5bmMgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19UWEVOQSAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTYgKSAvKiAoU1NDKSBUcmFuc21pdCBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19SWEVOQSAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTcgKSAvKiAoU1NDKSBSZWNlaXZlIEVuYWJsZSAqLw0KLS8qIC0tLS0tLS0tIFNTQ19JRVIgOiAoU1NDIE9mZnNldDogMHg0NCkgU1NDIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBTU0NfSURSIDogKFNTQyBPZmZzZXQ6IDB4NDgpIFNTQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFNTQ19JTVIgOiAoU1NDIE9mZnNldDogMHg0YykgU1NDIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tICovDQorLy8gLS0tLS0tLS0gU1NDX0NSIDogKFNTQyBPZmZzZXQ6IDB4MCkgU1NDIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TU0NfUlhFTiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFNTQykgUmVjZWl2ZSBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1NTQ19SWERJUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoU1NDKSBSZWNlaXZlIERpc2FibGUNCisjZGVmaW5lIEFUOTFDX1NTQ19UWEVOICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoU1NDKSBUcmFuc21pdCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1NTQ19UWERJUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvLyAoU1NDKSBUcmFuc21pdCBEaXNhYmxlDQorI2RlZmluZSBBVDkxQ19TU0NfU1dSU1QgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNSkgLy8gKFNTQykgU29mdHdhcmUgUmVzZXQNCisvLyAtLS0tLS0tLSBTU0NfUkNNUiA6IChTU0MgT2Zmc2V0OiAweDEwKSBTU0MgUmVjZWl2ZSBDbG9jayBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1NDX0NLUyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDApIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfU1NDX0NLU19ESVYgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwKSAvLyAoU1NDKSBEaXZpZGVkIENsb2NrDQorI2RlZmluZSAJQVQ5MUNfU1NDX0NLU19USyAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxKSAvLyAoU1NDKSBUSyBDbG9jayBzaWduYWwNCisjZGVmaW5lIAlBVDkxQ19TU0NfQ0tTX1JLICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIpIC8vIChTU0MpIFJLIHBpbg0KKyNkZWZpbmUgQVQ5MUNfU1NDX0NLTyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgIDIpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgT3V0cHV0IE1vZGUgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfU1NDX0NLT19OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICAyKSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIE91dHB1dCBNb2RlOiBOb25lIFJLIHBpbjogSW5wdXQtb25seQ0KKyNkZWZpbmUgCUFUOTFDX1NTQ19DS09fQ09OVElOT1VTICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFNTQykgQ29udGludW91cyBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIFJLIHBpbjogT3V0cHV0DQorI2RlZmluZSAJQVQ5MUNfU1NDX0NLT19EQVRBX1RYICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICAyKSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIG9ubHkgZHVyaW5nIGRhdGEgdHJhbnNmZXJzIFJLIHBpbjogT3V0cHV0DQorI2RlZmluZSBBVDkxQ19TU0NfQ0tJICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBJbnZlcnNpb24NCisjZGVmaW5lIEFUOTFDX1NTQ19TVEFSVCAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8ICA4KSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IFN0YXJ0IFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1NTQ19TVEFSVF9DT05USU5PVVMgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA4KSAvLyAoU1NDKSBDb250aW51b3VzLCBhcyBzb29uIGFzIHRoZSByZWNlaXZlciBpcyBlbmFibGVkLCBhbmQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGVuZCBvZiB0cmFuc2ZlciBvZiB0aGUgcHJldmlvdXMgZGF0YS4NCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfVFggICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFNTQykgVHJhbnNtaXQvUmVjZWl2ZSBzdGFydA0KKyNkZWZpbmUgCUFUOTFDX1NTQ19TVEFSVF9MT1dfUkYgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA4KSAvLyAoU1NDKSBEZXRlY3Rpb24gb2YgYSBsb3cgbGV2ZWwgb24gUkYgaW5wdXQNCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfSElHSF9SRiAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKFNTQykgRGV0ZWN0aW9uIG9mIGEgaGlnaCBsZXZlbCBvbiBSRiBpbnB1dA0KKyNkZWZpbmUgCUFUOTFDX1NTQ19TVEFSVF9GQUxMX1JGICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg0IDw8ICA4KSAvLyAoU1NDKSBEZXRlY3Rpb24gb2YgYSBmYWxsaW5nIGVkZ2Ugb24gUkYgaW5wdXQNCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfUklTRV9SRiAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NSA8PCAgOCkgLy8gKFNTQykgRGV0ZWN0aW9uIG9mIGEgcmlzaW5nIGVkZ2Ugb24gUkYgaW5wdXQNCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfTEVWRUxfUkYgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NiA8PCAgOCkgLy8gKFNTQykgRGV0ZWN0aW9uIG9mIGFueSBsZXZlbCBjaGFuZ2Ugb24gUkYgaW5wdXQNCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfRURHRV9SRiAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAgOCkgLy8gKFNTQykgRGV0ZWN0aW9uIG9mIGFueSBlZGdlIG9uIFJGIGlucHV0DQorI2RlZmluZSAJQVQ5MUNfU1NDX1NUQVJUXzAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDggPDwgIDgpIC8vIChTU0MpIENvbXBhcmUgMA0KKyNkZWZpbmUgQVQ5MUNfU1NDX1NUVERMWSAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8IDE2KSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IFN0YXJ0IERlbGF5DQorI2RlZmluZSBBVDkxQ19TU0NfUEVSSU9EICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgMjQpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgUGVyaW9kIERpdmlkZXIgU2VsZWN0aW9uDQorLy8gLS0tLS0tLS0gU1NDX1JGTVIgOiAoU1NDIE9mZnNldDogMHgxNCkgU1NDIFJlY2VpdmUgRnJhbWUgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NTQ19EQVRMRU4gICAgICAoKHVuc2lnbmVkIGludCkgMHgxRiA8PCAgMCkgLy8gKFNTQykgRGF0YSBMZW5ndGgNCisjZGVmaW5lIEFUOTFDX1NTQ19MT09QICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoU1NDKSBMb29wIE1vZGUNCisjZGVmaW5lIEFUOTFDX1NTQ19NU0JGICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoU1NDKSBNb3N0IFNpZ25pZmljYW50IEJpdCBGaXJzdA0KKyNkZWZpbmUgQVQ5MUNfU1NDX0RBVE5CICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgIDgpIC8vIChTU0MpIERhdGEgTnVtYmVyIHBlciBGcmFtZQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX0ZTTEVOICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgMTYpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBsZW5ndGgNCisjZGVmaW5lIEFUOTFDX1NTQ19GU09TICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8IDIwKSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgT3V0cHV0IFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1NTQ19GU09TX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMjApIC8vIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IE5vbmUgUksgcGluIElucHV0LW9ubHkNCisjZGVmaW5lIAlBVDkxQ19TU0NfRlNPU19ORUdBVElWRSAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIwKSAvLyAoU1NDKSBTZWxlY3RlZCBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgU2lnbmFsOiBOZWdhdGl2ZSBQdWxzZQ0KKyNkZWZpbmUgCUFUOTFDX1NTQ19GU09TX1BPU0lUSVZFICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMjApIC8vIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IFBvc2l0aXZlIFB1bHNlDQorI2RlZmluZSAJQVQ5MUNfU1NDX0ZTT1NfTE9XICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyMCkgLy8gKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogRHJpdmVyIExvdyBkdXJpbmcgZGF0YSB0cmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NTQ19GU09TX0hJR0ggICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDQgPDwgMjApIC8vIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IERyaXZlciBIaWdoIGR1cmluZyBkYXRhIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1NDX0ZTT1NfVE9HR0xFICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NSA8PCAyMCkgLy8gKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogVG9nZ2xpbmcgYXQgZWFjaCBzdGFydCBvZiBkYXRhIHRyYW5zZmVyDQorI2RlZmluZSBBVDkxQ19TU0NfRlNFREdFICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNCkgLy8gKFNTQykgRnJhbWUgU3luYyBFZGdlIERldGVjdGlvbg0KKy8vIC0tLS0tLS0tIFNTQ19UQ01SIDogKFNTQyBPZmZzZXQ6IDB4MTgpIFNTQyBUcmFuc21pdCBDbG9jayBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFNTQ19URk1SIDogKFNTQyBPZmZzZXQ6IDB4MWMpIFNTQyBUcmFuc21pdCBGcmFtZSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1NDX0RBVERFRiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChTU0MpIERhdGEgRGVmYXVsdCBWYWx1ZQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX0ZTREVOICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjMpIC8vIChTU0MpIEZyYW1lIFN5bmMgRGF0YSBFbmFibGUNCisvLyAtLS0tLS0tLSBTU0NfU1IgOiAoU1NDIE9mZnNldDogMHg0MCkgU1NDIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NTQ19UWFJEWSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoU1NDKSBUcmFuc21pdCBSZWFkeQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RYRU1QVFkgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChTU0MpIFRyYW5zbWl0IEVtcHR5DQorI2RlZmluZSBBVDkxQ19TU0NfRU5EVFggICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFNTQykgRW5kIE9mIFRyYW5zbWlzc2lvbg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RYQlVGRSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChTU0MpIFRyYW5zbWl0IEJ1ZmZlciBFbXB0eQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JYUkRZICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChTU0MpIFJlY2VpdmUgUmVhZHkNCisjZGVmaW5lIEFUOTFDX1NTQ19PVlJVTiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoU1NDKSBSZWNlaXZlIE92ZXJydW4NCisjZGVmaW5lIEFUOTFDX1NTQ19FTkRSWCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoU1NDKSBFbmQgb2YgUmVjZXB0aW9uDQorI2RlZmluZSBBVDkxQ19TU0NfUlhCVUZGICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKFNTQykgUmVjZWl2ZSBCdWZmZXIgRnVsbA0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RYU1lOICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChTU0MpIFRyYW5zbWl0IFN5bmMNCisjZGVmaW5lIEFUOTFDX1NTQ19SWFNZTiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDExKSAvLyAoU1NDKSBSZWNlaXZlIFN5bmMNCisjZGVmaW5lIEFUOTFDX1NTQ19UWEVOQSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoU1NDKSBUcmFuc21pdCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1NTQ19SWEVOQSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE3KSAvLyAoU1NDKSBSZWNlaXZlIEVuYWJsZQ0KKy8vIC0tLS0tLS0tIFNTQ19JRVIgOiAoU1NDIE9mZnNldDogMHg0NCkgU1NDIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gU1NDX0lEUiA6IChTU0MgT2Zmc2V0OiAweDQ4KSBTU0MgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gU1NDX0lNUiA6IChTU0MgT2Zmc2V0OiAweDRjKSBTU0MgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBUd28td2lyZSBJbnRlcmZhY2UgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLXR5cGVkZWYgc3RydWN0IF9BVDkxU19UV0kNCi17DQotICAgIEFUOTFfUkVHIFRXSV9DUjsgICAgICAgICAvKiBDb250cm9sIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFRXSV9NTVI7ICAgICAgICAvKiBNYXN0ZXIgTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDBbIDEgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgVFdJX0lBRFI7ICAgICAgIC8qIEludGVybmFsIEFkZHJlc3MgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVFdJX0NXR1I7ICAgICAgIC8qIENsb2NrIFdhdmVmb3JtIEdlbmVyYXRvciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDFbIDMgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgVFdJX1NSOyAgICAgICAgIC8qIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBUV0lfSUVSOyAgICAgICAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBUV0lfSURSOyAgICAgICAgLyogSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVFdJX0lNUjsgICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFRXSV9SSFI7ICAgICAgICAvKiBSZWNlaXZlIEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVFdJX1RIUjsgICAgICAgIC8qIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi19IEFUOTFTX1RXSSwgKiBBVDkxUFNfVFdJOw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVHdvLXdpcmUgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfVFdJIHsNCisJQVQ5MV9SRUcJIFRXSV9DUjsgCS8vIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRXSV9NTVI7IAkvLyBNYXN0ZXIgTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBUV0lfSUFEUjsgCS8vIEludGVybmFsIEFkZHJlc3MgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRXSV9DV0dSOyAJLy8gQ2xvY2sgV2F2ZWZvcm0gR2VuZXJhdG9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbM107IAkvLyANCisJQVQ5MV9SRUcJIFRXSV9TUjsgCS8vIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVFdJX0lFUjsgCS8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRXSV9JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVFdJX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUV0lfUkhSOyAJLy8gUmVjZWl2ZSBIb2xkaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUV0lfVEhSOyAJLy8gVHJhbnNtaXQgSG9sZGluZyBSZWdpc3Rlcg0KK30gQVQ5MVNfVFdJLCAqQVQ5MVBTX1RXSTsNCiANCi0vKiAtLS0tLS0tLSBUV0lfQ1IgOiAoVFdJIE9mZnNldDogMHgwKSBUV0kgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX1NUQVJUICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgLyogKFRXSSkgU2VuZCBhIFNUQVJUIENvbmRpdGlvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX1NUT1AgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAgLyogKFRXSSkgU2VuZCBhIFNUT1AgQ29uZGl0aW9uICovDQotI2RlZmluZSBBVDkxQ19UV0lfTVNFTiAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyICkgICAvKiAoVFdJKSBUV0kgTWFzdGVyIFRyYW5zZmVyIEVuYWJsZWQgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9NU0RJUyAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDMgKSAgIC8qIChUV0kpIFRXSSBNYXN0ZXIgVHJhbnNmZXIgRGlzYWJsZWQgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9TV1JTVCAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDcgKSAgIC8qIChUV0kpIFNvZnR3YXJlIFJlc2V0ICovDQotLyogLS0tLS0tLS0gVFdJX01NUiA6IChUV0kgT2Zmc2V0OiAweDQpIFRXSSBNYXN0ZXIgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX0lBRFJTWiAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgOCApICAgLyogKFRXSSkgSW50ZXJuYWwgRGV2aWNlIEFkZHJlc3MgU2l6ZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RXSV9JQURSU1pfTk8gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgOCApICAgLyogKFRXSSkgTm8gaW50ZXJuYWwgZGV2aWNlIGFkZHJlc3MgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UV0lfSUFEUlNaXzFfQllURSAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDggKSAgIC8qIChUV0kpIE9uZS1ieXRlIGludGVybmFsIGRldmljZSBhZGRyZXNzICovDQotI2RlZmluZSAgICAgQVQ5MUNfVFdJX0lBRFJTWl8yX0JZVEUgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCA4ICkgICAvKiAoVFdJKSBUd28tYnl0ZSBpbnRlcm5hbCBkZXZpY2UgYWRkcmVzcyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RXSV9JQURSU1pfM19CWVRFICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgOCApICAgLyogKFRXSSkgVGhyZWUtYnl0ZSBpbnRlcm5hbCBkZXZpY2UgYWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX01SRUFEICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTIgKSAgLyogKFRXSSkgTWFzdGVyIFJlYWQgRGlyZWN0aW9uICovDQotI2RlZmluZSBBVDkxQ19UV0lfREFEUiAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4N0YgPDwgMTYgKSAvKiAoVFdJKSBEZXZpY2UgQWRkcmVzcyAqLw0KLS8qIC0tLS0tLS0tIFRXSV9DV0dSIDogKFRXSSBPZmZzZXQ6IDB4MTApIFRXSSBDbG9jayBXYXZlZm9ybSBHZW5lcmF0b3IgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9DTERJViAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRiA8PCAwICkgIC8qIChUV0kpIENsb2NrIExvdyBEaXZpZGVyICovDQotI2RlZmluZSBBVDkxQ19UV0lfQ0hESVYgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RkYgPDwgOCApICAvKiAoVFdJKSBDbG9jayBIaWdoIERpdmlkZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9DS0RJViAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg3IDw8IDE2ICkgIC8qIChUV0kpIENsb2NrIERpdmlkZXIgKi8NCi0vKiAtLS0tLS0tLSBUV0lfU1IgOiAoVFdJIE9mZnNldDogMHgyMCkgVFdJIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX1RYQ09NUCAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgLyogKFRXSSkgVHJhbnNtaXNzaW9uIENvbXBsZXRlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX1JYUkRZICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAgLyogKFRXSSkgUmVjZWl2ZSBob2xkaW5nIHJlZ2lzdGVyIFJlYURZICovDQotI2RlZmluZSBBVDkxQ19UV0lfVFhSRFkgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyICkgICAvKiAoVFdJKSBUcmFuc21pdCBob2xkaW5nIHJlZ2lzdGVyIFJlYURZICovDQotI2RlZmluZSBBVDkxQ19UV0lfT1ZSRSAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA2ICkgICAvKiAoVFdJKSBPdmVycnVuIEVycm9yICovDQotI2RlZmluZSBBVDkxQ19UV0lfVU5SRSAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA3ICkgICAvKiAoVFdJKSBVbmRlcnJ1biBFcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX05BQ0sgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOCApICAgLyogKFRXSSkgTm90IEFja25vd2xlZGdlZCAqLw0KLS8qIC0tLS0tLS0tIFRXSV9JRVIgOiAoVFdJIE9mZnNldDogMHgyNCkgVFdJIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBUV0lfSURSIDogKFRXSSBPZmZzZXQ6IDB4MjgpIFRXSSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFRXSV9JTVIgOiAoVFdJIE9mZnNldDogMHgyYykgVFdJIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tICovDQorLy8gLS0tLS0tLS0gVFdJX0NSIDogKFRXSSBPZmZzZXQ6IDB4MCkgVFdJIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UV0lfU1RBUlQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFRXSSkgU2VuZCBhIFNUQVJUIENvbmRpdGlvbg0KKyNkZWZpbmUgQVQ5MUNfVFdJX1NUT1AgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChUV0kpIFNlbmQgYSBTVE9QIENvbmRpdGlvbg0KKyNkZWZpbmUgQVQ5MUNfVFdJX01TRU4gICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChUV0kpIFRXSSBNYXN0ZXIgVHJhbnNmZXIgRW5hYmxlZA0KKyNkZWZpbmUgQVQ5MUNfVFdJX01TRElTICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChUV0kpIFRXSSBNYXN0ZXIgVHJhbnNmZXIgRGlzYWJsZWQNCisjZGVmaW5lIEFUOTFDX1RXSV9TV1JTVCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoVFdJKSBTb2Z0d2FyZSBSZXNldA0KKy8vIC0tLS0tLS0tIFRXSV9NTVIgOiAoVFdJIE9mZnNldDogMHg0KSBUV0kgTWFzdGVyIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UV0lfSUFEUlNaICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKFRXSSkgSW50ZXJuYWwgRGV2aWNlIEFkZHJlc3MgU2l6ZQ0KKyNkZWZpbmUgCUFUOTFDX1RXSV9JQURSU1pfTk8gICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgOCkgLy8gKFRXSSkgTm8gaW50ZXJuYWwgZGV2aWNlIGFkZHJlc3MNCisjZGVmaW5lIAlBVDkxQ19UV0lfSUFEUlNaXzFfQllURSAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChUV0kpIE9uZS1ieXRlIGludGVybmFsIGRldmljZSBhZGRyZXNzDQorI2RlZmluZSAJQVQ5MUNfVFdJX0lBRFJTWl8yX0JZVEUgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA4KSAvLyAoVFdJKSBUd28tYnl0ZSBpbnRlcm5hbCBkZXZpY2UgYWRkcmVzcw0KKyNkZWZpbmUgCUFUOTFDX1RXSV9JQURSU1pfM19CWVRFICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKFRXSSkgVGhyZWUtYnl0ZSBpbnRlcm5hbCBkZXZpY2UgYWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfVFdJX01SRUFEICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8vIChUV0kpIE1hc3RlciBSZWFkIERpcmVjdGlvbg0KKyNkZWZpbmUgQVQ5MUNfVFdJX0RBRFIgICAgICAgICgodW5zaWduZWQgaW50KSAweDdGIDw8IDE2KSAvLyAoVFdJKSBEZXZpY2UgQWRkcmVzcw0KKy8vIC0tLS0tLS0tIFRXSV9DV0dSIDogKFRXSSBPZmZzZXQ6IDB4MTApIFRXSSBDbG9jayBXYXZlZm9ybSBHZW5lcmF0b3IgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UV0lfQ0xESVYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgIDApIC8vIChUV0kpIENsb2NrIExvdyBEaXZpZGVyDQorI2RlZmluZSBBVDkxQ19UV0lfQ0hESVYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgIDgpIC8vIChUV0kpIENsb2NrIEhpZ2ggRGl2aWRlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX0NLRElWICAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgMTYpIC8vIChUV0kpIENsb2NrIERpdmlkZXINCisvLyAtLS0tLS0tLSBUV0lfU1IgOiAoVFdJIE9mZnNldDogMHgyMCkgVFdJIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RXSV9UWENPTVAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoVFdJKSBUcmFuc21pc3Npb24gQ29tcGxldGVkDQorI2RlZmluZSBBVDkxQ19UV0lfUlhSRFkgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFRXSSkgUmVjZWl2ZSBob2xkaW5nIHJlZ2lzdGVyIFJlYURZDQorI2RlZmluZSBBVDkxQ19UV0lfVFhSRFkgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFRXSSkgVHJhbnNtaXQgaG9sZGluZyByZWdpc3RlciBSZWFEWQ0KKyNkZWZpbmUgQVQ5MUNfVFdJX09WUkUgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChUV0kpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX1RXSV9VTlJFICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoVFdJKSBVbmRlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX05BQ0sgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChUV0kpIE5vdCBBY2tub3dsZWRnZWQNCisvLyAtLS0tLS0tLSBUV0lfSUVSIDogKFRXSSBPZmZzZXQ6IDB4MjQpIFRXSSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFRXSV9JRFIgOiAoVFdJIE9mZnNldDogMHgyOCkgVFdJIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFRXSV9JTVIgOiAoVFdJIE9mZnNldDogMHgyYykgVFdJIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUFdNQyBDaGFubmVsIEludGVyZmFjZSAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotdHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1BXTUNfQ0gNCi17DQotICAgIEFUOTFfUkVHIFBXTUNfQ01SOyAgICAgICAgICAgLyogQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBXTUNfQ0RUWVI7ICAgICAgICAgLyogQ2hhbm5lbCBEdXR5IEN5Y2xlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBXTUNfQ1BSRFI7ICAgICAgICAgLyogQ2hhbm5lbCBQZXJpb2QgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUFdNQ19DQ05UUjsgICAgICAgICAvKiBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUFdNQ19DVVBEUjsgICAgICAgICAvKiBDaGFubmVsIFVwZGF0ZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQV01DX1Jlc2VydmVkWyAzIF07IC8qIFJlc2VydmVkICovDQotfSBBVDkxU19QV01DX0NILCAqIEFUOTFQU19QV01DX0NIOw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUFdNQyBDaGFubmVsIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1BXTUNfQ0ggew0KKwlBVDkxX1JFRwkgUFdNQ19DTVI7IAkvLyBDaGFubmVsIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBXTUNfQ0RUWVI7IAkvLyBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBXTUNfQ1BSRFI7IAkvLyBDaGFubmVsIFBlcmlvZCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUFdNQ19DQ05UUjsgCS8vIENoYW5uZWwgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUFdNQ19DVVBEUjsgCS8vIENoYW5uZWwgVXBkYXRlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQV01DX1Jlc2VydmVkWzNdOyAJLy8gUmVzZXJ2ZWQNCit9IEFUOTFTX1BXTUNfQ0gsICpBVDkxUFNfUFdNQ19DSDsNCiANCi0vKiAtLS0tLS0tLSBQV01DX0NNUiA6IChQV01DX0NIIE9mZnNldDogMHgwKSBQV01DIENoYW5uZWwgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DUFJFICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEYgPDwgMCApICAvKiAoUFdNQ19DSCkgQ2hhbm5lbCBQcmUtc2NhbGVyIDogUFdNQ19DTEt4ICovDQotI2RlZmluZSAgICAgQVQ5MUNfUFdNQ19DUFJFX01DSyAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCApICAgICAgIC8qIChQV01DX0NIKSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1BXTUNfQ1BSRV9NQ0tBICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEIgKSAgICAgICAvKiAoUFdNQ19DSCkgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19QV01DX0NQUkVfTUNLQiAgICAoICggdW5zaWduZWQgaW50ICkgMHhDICkgICAgICAgLyogKFBXTUNfQ0gpICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NBTEcgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgIC8qIChQV01DX0NIKSBDaGFubmVsIEFsaWdubWVudCAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DUE9MICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOSApICAvKiAoUFdNQ19DSCkgQ2hhbm5lbCBQb2xhcml0eSAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DUEQgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTAgKSAvKiAoUFdNQ19DSCkgQ2hhbm5lbCBVcGRhdGUgUGVyaW9kICovDQotLyogLS0tLS0tLS0gUFdNQ19DRFRZUiA6IChQV01DX0NIIE9mZnNldDogMHg0KSBQV01DIENoYW5uZWwgRHV0eSBDeWNsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DRFRZICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMCApICAvKiAoUFdNQ19DSCkgQ2hhbm5lbCBEdXR5IEN5Y2xlICovDQotLyogLS0tLS0tLS0gUFdNQ19DUFJEUiA6IChQV01DX0NIIE9mZnNldDogMHg4KSBQV01DIENoYW5uZWwgUGVyaW9kIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NQUkQgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAwICkgIC8qIChQV01DX0NIKSBDaGFubmVsIFBlcmlvZCAqLw0KLS8qIC0tLS0tLS0tIFBXTUNfQ0NOVFIgOiAoUFdNQ19DSCBPZmZzZXQ6IDB4YykgUFdNQyBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0NOVCAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDAgKSAgLyogKFBXTUNfQ0gpIENoYW5uZWwgQ291bnRlciAqLw0KLS8qIC0tLS0tLS0tIFBXTUNfQ1VQRFIgOiAoUFdNQ19DSCBPZmZzZXQ6IDB4MTApIFBXTUMgQ2hhbm5lbCBVcGRhdGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ1VQRCAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDAgKSAgLyogKFBXTUNfQ0gpIENoYW5uZWwgVXBkYXRlICovDQorLy8gLS0tLS0tLS0gUFdNQ19DTVIgOiAoUFdNQ19DSCBPZmZzZXQ6IDB4MCkgUFdNQyBDaGFubmVsIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QV01DX0NQUkUgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAgMCkgLy8gKFBXTUNfQ0gpIENoYW5uZWwgUHJlLXNjYWxlciA6IFBXTUNfQ0xLeA0KKyNkZWZpbmUgCUFUOTFDX1BXTUNfQ1BSRV9NQ0sgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwKSAvLyAoUFdNQ19DSCkgDQorI2RlZmluZSAJQVQ5MUNfUFdNQ19DUFJFX01DS0EgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweEIpIC8vIChQV01DX0NIKSANCisjZGVmaW5lIAlBVDkxQ19QV01DX0NQUkVfTUNLQiAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4QykgLy8gKFBXTUNfQ0gpIA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DQUxHICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChQV01DX0NIKSBDaGFubmVsIEFsaWdubWVudA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DUE9MICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChQV01DX0NIKSBDaGFubmVsIFBvbGFyaXR5DQorI2RlZmluZSBBVDkxQ19QV01DX0NQRCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLy8gKFBXTUNfQ0gpIENoYW5uZWwgVXBkYXRlIFBlcmlvZA0KKy8vIC0tLS0tLS0tIFBXTUNfQ0RUWVIgOiAoUFdNQ19DSCBPZmZzZXQ6IDB4NCkgUFdNQyBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QV01DX0NEVFkgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgMCkgLy8gKFBXTUNfQ0gpIENoYW5uZWwgRHV0eSBDeWNsZQ0KKy8vIC0tLS0tLS0tIFBXTUNfQ1BSRFIgOiAoUFdNQ19DSCBPZmZzZXQ6IDB4OCkgUFdNQyBDaGFubmVsIFBlcmlvZCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ1BSRCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICAwKSAvLyAoUFdNQ19DSCkgQ2hhbm5lbCBQZXJpb2QNCisvLyAtLS0tLS0tLSBQV01DX0NDTlRSIDogKFBXTUNfQ0ggT2Zmc2V0OiAweGMpIFBXTUMgQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DQ05UICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDApIC8vIChQV01DX0NIKSBDaGFubmVsIENvdW50ZXINCisvLyAtLS0tLS0tLSBQV01DX0NVUERSIDogKFBXTUNfQ0ggT2Zmc2V0OiAweDEwKSBQV01DIENoYW5uZWwgVXBkYXRlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DVVBEICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDApIC8vIChQV01DX0NIKSBDaGFubmVsIFVwZGF0ZQ0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUHVsc2UgV2lkdGggTW9kdWxhdGlvbiBDb250cm9sbGVyIEludGVyZmFjZSAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotdHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1BXTUMNCi17DQotICAgIEFUOTFfUkVHIFBXTUNfTVI7ICAgICAgICAgICAvKiBQV01DIE1vZGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUFdNQ19FTkE7ICAgICAgICAgIC8qIFBXTUMgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBXTUNfRElTOyAgICAgICAgICAvKiBQV01DIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUFdNQ19TUjsgICAgICAgICAgIC8qIFBXTUMgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBXTUNfSUVSOyAgICAgICAgICAvKiBQV01DIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUFdNQ19JRFI7ICAgICAgICAgIC8qIFBXTUMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUFdNQ19JTVI7ICAgICAgICAgIC8qIFBXTUMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUFdNQ19JU1I7ICAgICAgICAgIC8qIFBXTUMgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDBbIDU1IF07ICAgLyogKi8NCi0gICAgQVQ5MV9SRUcgUFdNQ19WUjsgICAgICAgICAgIC8qIFBXTUMgVmVyc2lvbiBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDFbIDY0IF07ICAgLyogKi8NCi0gICAgQVQ5MVNfUFdNQ19DSCBQV01DX0NIWyA0IF07IC8qIFBXTUMgQ2hhbm5lbCAqLw0KLX0gQVQ5MVNfUFdNQywgKiBBVDkxUFNfUFdNQzsNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFB1bHNlIFdpZHRoIE1vZHVsYXRpb24gQ29udHJvbGxlciBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19QV01DIHsNCisJQVQ5MV9SRUcJIFBXTUNfTVI7IAkvLyBQV01DIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBXTUNfRU5BOyAJLy8gUFdNQyBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBXTUNfRElTOyAJLy8gUFdNQyBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQV01DX1NSOyAJLy8gUFdNQyBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBXTUNfSUVSOyAJLy8gUFdNQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQV01DX0lEUjsgCS8vIFBXTUMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBXTUNfSU1SOyAJLy8gUFdNQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUFdNQ19JU1I7IAkvLyBQV01DIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFs1NV07IAkvLyANCisJQVQ5MV9SRUcJIFBXTUNfVlI7IAkvLyBQV01DIFZlcnNpb24gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMVs2NF07IAkvLyANCisJQVQ5MVNfUFdNQ19DSAkgUFdNQ19DSFs0XTsgCS8vIFBXTUMgQ2hhbm5lbA0KK30gQVQ5MVNfUFdNQywgKkFUOTFQU19QV01DOw0KIA0KLS8qIC0tLS0tLS0tIFBXTUNfTVIgOiAoUFdNQyBPZmZzZXQ6IDB4MCkgUFdNQyBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19QV01DX0RJVkEgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRiA8PCAwICkgIC8qIChQV01DKSBDTEtBIGRpdmlkZSBmYWN0b3IuICovDQotI2RlZmluZSBBVDkxQ19QV01DX1BSRUEgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGIDw8IDggKSAgIC8qIChQV01DKSBEaXZpZGVyIElucHV0IENsb2NrIFByZXNjYWxlciBBICovDQotI2RlZmluZSAgICAgQVQ5MUNfUFdNQ19QUkVBX01DSyAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDggKSAgIC8qIChQV01DKSAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19ESVZCICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RkYgPDwgMTYgKSAvKiAoUFdNQykgQ0xLQiBkaXZpZGUgZmFjdG9yLiAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19QUkVCICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RiA8PCAyNCApICAvKiAoUFdNQykgRGl2aWRlciBJbnB1dCBDbG9jayBQcmVzY2FsZXIgQiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1BXTUNfUFJFQl9NQ0sgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAyNCApICAvKiAoUFdNQykgKi8NCi0vKiAtLS0tLS0tLSBQV01DX0VOQSA6IChQV01DIE9mZnNldDogMHg0KSBQV01DIEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSElEMCAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgICAvKiAoUFdNQykgQ2hhbm5lbCBJRCAwICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NISUQxICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEgKSAgIC8qIChQV01DKSBDaGFubmVsIElEIDEgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0hJRDIgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMiApICAgLyogKFBXTUMpIENoYW5uZWwgSUQgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSElEMyAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzICkgICAvKiAoUFdNQykgQ2hhbm5lbCBJRCAzICovDQotLyogLS0tLS0tLS0gUFdNQ19ESVMgOiAoUFdNQyBPZmZzZXQ6IDB4OCkgUFdNQyBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gUFdNQ19TUiA6IChQV01DIE9mZnNldDogMHhjKSBQV01DIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFBXTUNfSUVSIDogKFBXTUMgT2Zmc2V0OiAweDEwKSBQV01DIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBQV01DX0lEUiA6IChQV01DIE9mZnNldDogMHgxNCkgUFdNQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFBXTUNfSU1SIDogKFBXTUMgT2Zmc2V0OiAweDE4KSBQV01DIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gUFdNQ19JU1IgOiAoUFdNQyBPZmZzZXQ6IDB4MWMpIFBXTUMgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KKy8vIC0tLS0tLS0tIFBXTUNfTVIgOiAoUFdNQyBPZmZzZXQ6IDB4MCkgUFdNQyBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19ESVZBICAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8ICAwKSAvLyAoUFdNQykgQ0xLQSBkaXZpZGUgZmFjdG9yLg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19QUkVBICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgIDgpIC8vIChQV01DKSBEaXZpZGVyIElucHV0IENsb2NrIFByZXNjYWxlciBBDQorI2RlZmluZSAJQVQ5MUNfUFdNQ19QUkVBX01DSyAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDgpIC8vIChQV01DKSANCisjZGVmaW5lIEFUOTFDX1BXTUNfRElWQiAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRiA8PCAxNikgLy8gKFBXTUMpIENMS0IgZGl2aWRlIGZhY3Rvci4NCisjZGVmaW5lIEFUOTFDX1BXTUNfUFJFQiAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8IDI0KSAvLyAoUFdNQykgRGl2aWRlciBJbnB1dCBDbG9jayBQcmVzY2FsZXIgQg0KKyNkZWZpbmUgCUFUOTFDX1BXTUNfUFJFQl9NQ0sgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDI0KSAvLyAoUFdNQykgDQorLy8gLS0tLS0tLS0gUFdNQ19FTkEgOiAoUFdNQyBPZmZzZXQ6IDB4NCkgUFdNQyBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QV01DX0NISUQwICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFBXTUMpIENoYW5uZWwgSUQgMA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSElEMSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChQV01DKSBDaGFubmVsIElEIDENCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0hJRDIgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoUFdNQykgQ2hhbm5lbCBJRCAyDQorI2RlZmluZSBBVDkxQ19QV01DX0NISUQzICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKFBXTUMpIENoYW5uZWwgSUQgMw0KKy8vIC0tLS0tLS0tIFBXTUNfRElTIDogKFBXTUMgT2Zmc2V0OiAweDgpIFBXTUMgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQV01DX1NSIDogKFBXTUMgT2Zmc2V0OiAweGMpIFBXTUMgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFBXTUNfSUVSIDogKFBXTUMgT2Zmc2V0OiAweDEwKSBQV01DIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUFdNQ19JRFIgOiAoUFdNQyBPZmZzZXQ6IDB4MTQpIFBXTUMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUFdNQ19JTVIgOiAoUFdNQyBPZmZzZXQ6IDB4MTgpIFBXTUMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUFdNQ19JU1IgOiAoUFdNQyBPZmZzZXQ6IDB4MWMpIFBXTUMgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFVTQiBEZXZpY2UgSW50ZXJmYWNlICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfVURQDQotew0KLSAgICBBVDkxX1JFRyBVRFBfTlVNOyAgICAgICAgLyogRnJhbWUgTnVtYmVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFVEUF9HTEJTVEFURTsgICAvKiBHbG9iYWwgU3RhdGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVURQX0ZBRERSOyAgICAgIC8qIEZ1bmN0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQwWyAxIF07IC8qICovDQotICAgIEFUOTFfUkVHIFVEUF9JRVI7ICAgICAgICAvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFVEUF9JRFI7ICAgICAgICAvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBVRFBfSU1SOyAgICAgICAgLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVURQX0lTUjsgICAgICAgIC8qIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVURQX0lDUjsgICAgICAgIC8qIEludGVycnVwdCBDbGVhciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDFbIDEgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgVURQX1JTVEVQOyAgICAgIC8qIFJlc2V0IEVuZHBvaW50IFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMlsgMSBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBVRFBfQ1NSWyA2IF07ICAgLyogRW5kcG9pbnQgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkM1sgMiBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBVRFBfRkRSWyA2IF07ICAgLyogRW5kcG9pbnQgRklGTyBEYXRhIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkNFsgMyBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBVRFBfVFhWQzsgICAgICAgLyogVHJhbnNjZWl2ZXIgQ29udHJvbCBSZWdpc3RlciAqLw0KLX0gQVQ5MVNfVURQLCAqIEFUOTFQU19VRFA7DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBVU0IgRGV2aWNlIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1VEUCB7DQorCUFUOTFfUkVHCSBVRFBfTlVNOyAJLy8gRnJhbWUgTnVtYmVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVRFBfR0xCU1RBVEU7IAkvLyBHbG9iYWwgU3RhdGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVEUF9GQUREUjsgCS8vIEZ1bmN0aW9uIEFkZHJlc3MgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgVURQX0lFUjsgCS8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVEUF9JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVURQX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVRFBfSVNSOyAJLy8gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVURQX0lDUjsgCS8vIEludGVycnVwdCBDbGVhciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBVRFBfUlNURVA7IAkvLyBSZXNldCBFbmRwb2ludCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQyWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBVRFBfQ1NSWzZdOyAJLy8gRW5kcG9pbnQgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDNbMl07IAkvLyANCisJQVQ5MV9SRUcJIFVEUF9GRFJbNl07IAkvLyBFbmRwb2ludCBGSUZPIERhdGEgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkNFszXTsgCS8vIA0KKwlBVDkxX1JFRwkgVURQX1RYVkM7IAkvLyBUcmFuc2NlaXZlciBDb250cm9sIFJlZ2lzdGVyDQorfSBBVDkxU19VRFAsICpBVDkxUFNfVURQOw0KIA0KLS8qIC0tLS0tLS0tIFVEUF9GUk1fTlVNIDogKFVEUCBPZmZzZXQ6IDB4MCkgVVNCIEZyYW1lIE51bWJlciBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0ZSTV9OVU0gICAgKCAoIHVuc2lnbmVkIGludCApIDB4N0ZGIDw8IDAgKSAvKiAoVURQKSBGcmFtZSBOdW1iZXIgYXMgRGVmaW5lZCBpbiB0aGUgUGFja2V0IEZpZWxkIEZvcm1hdHMgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9GUk1fRVJSICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTYgKSAgLyogKFVEUCkgRnJhbWUgRXJyb3IgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9GUk1fT0sgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTcgKSAgLyogKFVEUCkgRnJhbWUgT0sgKi8NCi0vKiAtLS0tLS0tLSBVRFBfR0xCX1NUQVRFIDogKFVEUCBPZmZzZXQ6IDB4NCkgVVNCIEdsb2JhbCBTdGF0ZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0ZBRERFTiAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgICAvKiAoVURQKSBGdW5jdGlvbiBBZGRyZXNzIEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0NPTkZHICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgICAvKiAoVURQKSBDb25maWd1cmVkICovDQotI2RlZmluZSBBVDkxQ19VRFBfRVNSICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAgIC8qIChVRFApIEVuYWJsZSBTZW5kIFJlc3VtZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX1JTTUlOUFIgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzICkgICAvKiAoVURQKSBBIFJlc3VtZSBIYXMgQmVlbiBTZW50IHRvIHRoZSBIb3N0ICovDQotI2RlZmluZSBBVDkxQ19VRFBfUk1XVVBFICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDQgKSAgIC8qIChVRFApIFJlbW90ZSBXYWtlIFVwIEVuYWJsZSAqLw0KLS8qIC0tLS0tLS0tIFVEUF9GQUREUiA6IChVRFAgT2Zmc2V0OiAweDgpIFVTQiBGdW5jdGlvbiBBZGRyZXNzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19VRFBfRkFERCAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRiA8PCAwICkgIC8qIChVRFApIEZ1bmN0aW9uIEFkZHJlc3MgVmFsdWUgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9GRU4gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOCApICAgLyogKFVEUCkgRnVuY3Rpb24gRW5hYmxlICovDQotLyogLS0tLS0tLS0gVURQX0lFUiA6IChVRFAgT2Zmc2V0OiAweDEwKSBVU0IgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UMCAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgICAvKiAoVURQKSBFbmRwb2ludCAwIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UMSAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgICAvKiAoVURQKSBFbmRwb2ludCAwIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UMiAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyICkgICAvKiAoVURQKSBFbmRwb2ludCAyIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UMyAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzICkgICAvKiAoVURQKSBFbmRwb2ludCAzIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UNCAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA0ICkgICAvKiAoVURQKSBFbmRwb2ludCA0IEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UNSAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA1ICkgICAvKiAoVURQKSBFbmRwb2ludCA1IEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX1JYU1VTUCAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgICAvKiAoVURQKSBVU0IgU3VzcGVuZCBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9SWFJTTSAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOSApICAgLyogKFVEUCkgVVNCIFJlc3VtZSBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FWFRSU00gICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTAgKSAgLyogKFVEUCkgVVNCIEV4dGVybmFsIFJlc3VtZSBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9TT0ZJTlQgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTEgKSAgLyogKFVEUCkgVVNCIFN0YXJ0IE9mIGZyYW1lIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX1dBS0VVUCAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMyApICAvKiAoVURQKSBVU0IgUmVzdW1lIEludGVycnVwdCAqLw0KLS8qIC0tLS0tLS0tIFVEUF9JRFIgOiAoVURQIE9mZnNldDogMHgxNCkgVVNCIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gVURQX0lNUiA6IChVRFAgT2Zmc2V0OiAweDE4KSBVU0IgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBVRFBfSVNSIDogKFVEUCBPZmZzZXQ6IDB4MWMpIFVTQiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19VRFBfRU5EQlVTUkVTICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEyICkgLyogKFVEUCkgVVNCIEVuZCBPZiBCdXMgUmVzZXQgSW50ZXJydXB0ICovDQotLyogLS0tLS0tLS0gVURQX0lDUiA6IChVRFAgT2Zmc2V0OiAweDIwKSBVU0IgSW50ZXJydXB0IENsZWFyIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gVURQX1JTVF9FUCA6IChVRFAgT2Zmc2V0OiAweDI4KSBVU0IgUmVzZXQgRW5kcG9pbnQgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUDAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgIC8qIChVRFApIFJlc2V0IEVuZHBvaW50IDAgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUDEgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAgIC8qIChVRFApIFJlc2V0IEVuZHBvaW50IDEgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUDIgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMiApICAgIC8qIChVRFApIFJlc2V0IEVuZHBvaW50IDIgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUDMgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMyApICAgIC8qIChVRFApIFJlc2V0IEVuZHBvaW50IDMgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUDQgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNCApICAgIC8qIChVRFApIFJlc2V0IEVuZHBvaW50IDQgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUDUgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNSApICAgIC8qIChVRFApIFJlc2V0IEVuZHBvaW50IDUgKi8NCi0vKiAtLS0tLS0tLSBVRFBfQ1NSIDogKFVEUCBPZmZzZXQ6IDB4MzApIFVTQiBFbmRwb2ludCBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9UWENPTVAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgIC8qIChVRFApIEdlbmVyYXRlcyBhbiBJTiBwYWNrZXQgd2l0aCBkYXRhIHByZXZpb3VzbHkgd3JpdHRlbiBpbiB0aGUgRFBSICovDQotI2RlZmluZSBBVDkxQ19VRFBfUlhfREFUQV9CSzAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEgKSAgICAvKiAoVURQKSBSZWNlaXZlIERhdGEgQmFuayAwICovDQotI2RlZmluZSBBVDkxQ19VRFBfUlhTRVRVUCAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAgICAvKiAoVURQKSBTZW5kcyBTVEFMTCB0byB0aGUgSG9zdCAoQ29udHJvbCBlbmRwb2ludHMpICovDQotI2RlZmluZSBBVDkxQ19VRFBfSVNPRVJST1IgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDMgKSAgICAvKiAoVURQKSBJc29jaHJvbm91cyBlcnJvciAoSXNvY2hyb25vdXMgZW5kcG9pbnRzKSAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX1RYUEtUUkRZICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA0ICkgICAgLyogKFVEUCkgVHJhbnNtaXQgUGFja2V0IFJlYWR5ICovDQotI2RlZmluZSBBVDkxQ19VRFBfRk9SQ0VTVEFMTCAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDUgKSAgICAvKiAoVURQKSBGb3JjZSBTdGFsbCAodXNlZCBieSBDb250cm9sLCBCdWxrIGFuZCBJc29jaHJvbm91cyBlbmRwb2ludHMpLiAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX1JYX0RBVEFfQksxICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA2ICkgICAgLyogKFVEUCkgUmVjZWl2ZSBEYXRhIEJhbmsgMSAob25seSB1c2VkIGJ5IGVuZHBvaW50cyB3aXRoIHBpbmctcG9uZyBhdHRyaWJ1dGVzKS4gKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9ESVIgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNyApICAgIC8qIChVRFApIFRyYW5zZmVyIERpcmVjdGlvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0VQVFlQRSAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NyA8PCA4ICkgICAgLyogKFVEUCkgRW5kcG9pbnQgdHlwZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VEUF9FUFRZUEVfQ1RSTCAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCA4ICkgICAgLyogKFVEUCkgQ29udHJvbCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VEUF9FUFRZUEVfSVNPX09VVCAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgICAgLyogKFVEUCkgSXNvY2hyb25vdXMgT1VUICovDQotI2RlZmluZSAgICAgQVQ5MUNfVURQX0VQVFlQRV9CVUxLX09VVCAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDggKSAgICAvKiAoVURQKSBCdWxrIE9VVCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VEUF9FUFRZUEVfSU5UX09VVCAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCA4ICkgICAgLyogKFVEUCkgSW50ZXJydXB0IE9VVCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VEUF9FUFRZUEVfSVNPX0lOICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NSA8PCA4ICkgICAgLyogKFVEUCkgSXNvY2hyb25vdXMgSU4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VRFBfRVBUWVBFX0JVTEtfSU4gICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDYgPDwgOCApICAgIC8qIChVRFApIEJ1bGsgSU4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VRFBfRVBUWVBFX0lOVF9JTiAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDcgPDwgOCApICAgIC8qIChVRFApIEludGVycnVwdCBJTiAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0RUR0xFICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMSApICAgLyogKFVEUCkgRGF0YSBUb2dnbGUgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUEVEUyAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTUgKSAgIC8qIChVRFApIEVuZHBvaW50IEVuYWJsZSBEaXNhYmxlICovDQotI2RlZmluZSBBVDkxQ19VRFBfUlhCWVRFQ05UICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg3RkYgPDwgMTYgKSAvKiAoVURQKSBOdW1iZXIgT2YgQnl0ZXMgQXZhaWxhYmxlIGluIHRoZSBGSUZPICovDQotLyogLS0tLS0tLS0gVURQX1RYVkMgOiAoVURQIE9mZnNldDogMHg3NCkgVHJhbnNjZWl2ZXIgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX1RYVkRJUyAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgICAgLyogKFVEUCkgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9QVU9OICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOSApICAgIC8qIChVRFApIFB1bGwtdXAgT04gKi8NCisvLyAtLS0tLS0tLSBVRFBfRlJNX05VTSA6IChVRFAgT2Zmc2V0OiAweDApIFVTQiBGcmFtZSBOdW1iZXIgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VRFBfRlJNX05VTSAgICAgKCh1bnNpZ25lZCBpbnQpIDB4N0ZGIDw8ICAwKSAvLyAoVURQKSBGcmFtZSBOdW1iZXIgYXMgRGVmaW5lZCBpbiB0aGUgUGFja2V0IEZpZWxkIEZvcm1hdHMNCisjZGVmaW5lIEFUOTFDX1VEUF9GUk1fRVJSICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoVURQKSBGcmFtZSBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZSTV9PSyAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTcpIC8vIChVRFApIEZyYW1lIE9LDQorLy8gLS0tLS0tLS0gVURQX0dMQl9TVEFURSA6IChVRFAgT2Zmc2V0OiAweDQpIFVTQiBHbG9iYWwgU3RhdGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VRFBfRkFEREVOICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFVEUCkgRnVuY3Rpb24gQWRkcmVzcyBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1VEUF9DT05GRyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoVURQKSBDb25maWd1cmVkDQorI2RlZmluZSBBVDkxQ19VRFBfRVNSICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFVEUCkgRW5hYmxlIFNlbmQgUmVzdW1lDQorI2RlZmluZSBBVDkxQ19VRFBfUlNNSU5QUiAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKFVEUCkgQSBSZXN1bWUgSGFzIEJlZW4gU2VudCB0byB0aGUgSG9zdA0KKyNkZWZpbmUgQVQ5MUNfVURQX1JNV1VQRSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChVRFApIFJlbW90ZSBXYWtlIFVwIEVuYWJsZQ0KKy8vIC0tLS0tLS0tIFVEUF9GQUREUiA6IChVRFAgT2Zmc2V0OiAweDgpIFVTQiBGdW5jdGlvbiBBZGRyZXNzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZBREQgICAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8ICAwKSAvLyAoVURQKSBGdW5jdGlvbiBBZGRyZXNzIFZhbHVlDQorI2RlZmluZSBBVDkxQ19VRFBfRkVOICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFVEUCkgRnVuY3Rpb24gRW5hYmxlDQorLy8gLS0tLS0tLS0gVURQX0lFUiA6IChVRFAgT2Zmc2V0OiAweDEwKSBVU0IgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VEUF9FUElOVDAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoVURQKSBFbmRwb2ludCAwIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UMSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChVRFApIEVuZHBvaW50IDAgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfRVBJTlQyICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFVEUCkgRW5kcG9pbnQgMiBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9FUElOVDMgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoVURQKSBFbmRwb2ludCAzIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UNCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChVRFApIEVuZHBvaW50IDQgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfRVBJTlQ1ICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKFVEUCkgRW5kcG9pbnQgNSBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9SWFNVU1AgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoVURQKSBVU0IgU3VzcGVuZCBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9SWFJTTSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvLyAoVURQKSBVU0IgUmVzdW1lIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VYVFJTTSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChVRFApIFVTQiBFeHRlcm5hbCBSZXN1bWUgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfU09GSU5UICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMSkgLy8gKFVEUCkgVVNCIFN0YXJ0IE9mIGZyYW1lIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX1dBS0VVUCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTMpIC8vIChVRFApIFVTQiBSZXN1bWUgSW50ZXJydXB0DQorLy8gLS0tLS0tLS0gVURQX0lEUiA6IChVRFAgT2Zmc2V0OiAweDE0KSBVU0IgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVURQX0lNUiA6IChVRFAgT2Zmc2V0OiAweDE4KSBVU0IgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVURQX0lTUiA6IChVRFAgT2Zmc2V0OiAweDFjKSBVU0IgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VEUF9FTkRCVVNSRVMgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvLyAoVURQKSBVU0IgRW5kIE9mIEJ1cyBSZXNldCBJbnRlcnJ1cHQNCisvLyAtLS0tLS0tLSBVRFBfSUNSIDogKFVEUCBPZmZzZXQ6IDB4MjApIFVTQiBJbnRlcnJ1cHQgQ2xlYXIgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVURQX1JTVF9FUCA6IChVRFAgT2Zmc2V0OiAweDI4KSBVU0IgUmVzZXQgRW5kcG9pbnQgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VRFBfRVAwICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFVEUCkgUmVzZXQgRW5kcG9pbnQgMA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQMSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChVRFApIFJlc2V0IEVuZHBvaW50IDENCisjZGVmaW5lIEFUOTFDX1VEUF9FUDIgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoVURQKSBSZXNldCBFbmRwb2ludCAyDQorI2RlZmluZSBBVDkxQ19VRFBfRVAzICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKFVEUCkgUmVzZXQgRW5kcG9pbnQgMw0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQNCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChVRFApIFJlc2V0IEVuZHBvaW50IDQNCisjZGVmaW5lIEFUOTFDX1VEUF9FUDUgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoVURQKSBSZXNldCBFbmRwb2ludCA1DQorLy8gLS0tLS0tLS0gVURQX0NTUiA6IChVRFAgT2Zmc2V0OiAweDMwKSBVU0IgRW5kcG9pbnQgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVURQX1RYQ09NUCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChVRFApIEdlbmVyYXRlcyBhbiBJTiBwYWNrZXQgd2l0aCBkYXRhIHByZXZpb3VzbHkgd3JpdHRlbiBpbiB0aGUgRFBSDQorI2RlZmluZSBBVDkxQ19VRFBfUlhfREFUQV9CSzAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFVEUCkgUmVjZWl2ZSBEYXRhIEJhbmsgMA0KKyNkZWZpbmUgQVQ5MUNfVURQX1JYU0VUVVAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChVRFApIFNlbmRzIFNUQUxMIHRvIHRoZSBIb3N0IChDb250cm9sIGVuZHBvaW50cykNCisjZGVmaW5lIEFUOTFDX1VEUF9JU09FUlJPUiAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoVURQKSBJc29jaHJvbm91cyBlcnJvciAoSXNvY2hyb25vdXMgZW5kcG9pbnRzKQ0KKyNkZWZpbmUgQVQ5MUNfVURQX1RYUEtUUkRZICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChVRFApIFRyYW5zbWl0IFBhY2tldCBSZWFkeQ0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZPUkNFU1RBTEwgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChVRFApIEZvcmNlIFN0YWxsICh1c2VkIGJ5IENvbnRyb2wsIEJ1bGsgYW5kIElzb2Nocm9ub3VzIGVuZHBvaW50cykuDQorI2RlZmluZSBBVDkxQ19VRFBfUlhfREFUQV9CSzEgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLy8gKFVEUCkgUmVjZWl2ZSBEYXRhIEJhbmsgMSAob25seSB1c2VkIGJ5IGVuZHBvaW50cyB3aXRoIHBpbmctcG9uZyBhdHRyaWJ1dGVzKS4NCisjZGVmaW5lIEFUOTFDX1VEUF9ESVIgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoVURQKSBUcmFuc2ZlciBEaXJlY3Rpb24NCisjZGVmaW5lIEFUOTFDX1VEUF9FUFRZUEUgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8ICA4KSAvLyAoVURQKSBFbmRwb2ludCB0eXBlDQorI2RlZmluZSAJQVQ5MUNfVURQX0VQVFlQRV9DVFJMICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA4KSAvLyAoVURQKSBDb250cm9sDQorI2RlZmluZSAJQVQ5MUNfVURQX0VQVFlQRV9JU09fT1VUICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoVURQKSBJc29jaHJvbm91cyBPVVQNCisjZGVmaW5lIAlBVDkxQ19VRFBfRVBUWVBFX0JVTEtfT1VUICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDgpIC8vIChVRFApIEJ1bGsgT1VUDQorI2RlZmluZSAJQVQ5MUNfVURQX0VQVFlQRV9JTlRfT1VUICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA4KSAvLyAoVURQKSBJbnRlcnJ1cHQgT1VUDQorI2RlZmluZSAJQVQ5MUNfVURQX0VQVFlQRV9JU09fSU4gICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg1IDw8ICA4KSAvLyAoVURQKSBJc29jaHJvbm91cyBJTg0KKyNkZWZpbmUgCUFUOTFDX1VEUF9FUFRZUEVfQlVMS19JTiAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NiA8PCAgOCkgLy8gKFVEUCkgQnVsayBJTg0KKyNkZWZpbmUgCUFUOTFDX1VEUF9FUFRZUEVfSU5UX0lOICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAgOCkgLy8gKFVEUCkgSW50ZXJydXB0IElODQorI2RlZmluZSBBVDkxQ19VRFBfRFRHTEUgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMSkgLy8gKFVEUCkgRGF0YSBUb2dnbGUNCisjZGVmaW5lIEFUOTFDX1VEUF9FUEVEUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE1KSAvLyAoVURQKSBFbmRwb2ludCBFbmFibGUgRGlzYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVURQX1JYQllURUNOVCAgICgodW5zaWduZWQgaW50KSAweDdGRiA8PCAxNikgLy8gKFVEUCkgTnVtYmVyIE9mIEJ5dGVzIEF2YWlsYWJsZSBpbiB0aGUgRklGTw0KKy8vIC0tLS0tLS0tIFVEUF9UWFZDIDogKFVEUCBPZmZzZXQ6IDB4NzQpIFRyYW5zY2VpdmVyIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VRFBfVFhWRElTICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFVEUCkgDQorI2RlZmluZSBBVDkxQ19VRFBfUFVPTiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLy8gKFVEUCkgUHVsbC11cCBPTg0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVGltZXIgQ291bnRlciBDaGFubmVsIEludGVyZmFjZSAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotdHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1RDDQotew0KLSAgICBBVDkxX1JFRyBUQ19DQ1I7ICAgICAgICAgLyogQ2hhbm5lbCBDb250cm9sIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFRDX0NNUjsgICAgICAgICAvKiBDaGFubmVsIE1vZGUgUmVnaXN0ZXIgKENhcHR1cmUgTW9kZSAvIFdhdmVmb3JtIE1vZGUpICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMFsgMiBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBUQ19DVjsgICAgICAgICAgLyogQ291bnRlciBWYWx1ZSAqLw0KLSAgICBBVDkxX1JFRyBUQ19SQTsgICAgICAgICAgLyogUmVnaXN0ZXIgQSAqLw0KLSAgICBBVDkxX1JFRyBUQ19SQjsgICAgICAgICAgLyogUmVnaXN0ZXIgQiAqLw0KLSAgICBBVDkxX1JFRyBUQ19SQzsgICAgICAgICAgLyogUmVnaXN0ZXIgQyAqLw0KLSAgICBBVDkxX1JFRyBUQ19TUjsgICAgICAgICAgLyogU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFRDX0lFUjsgICAgICAgICAvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFRDX0lEUjsgICAgICAgICAvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBUQ19JTVI7ICAgICAgICAgLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi19IEFUOTFTX1RDLCAqIEFUOTFQU19UQzsNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFRpbWVyIENvdW50ZXIgQ2hhbm5lbCBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19UQyB7DQorCUFUOTFfUkVHCSBUQ19DQ1I7IAkvLyBDaGFubmVsIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRDX0NNUjsgCS8vIENoYW5uZWwgTW9kZSBSZWdpc3RlciAoQ2FwdHVyZSBNb2RlIC8gV2F2ZWZvcm0gTW9kZSkNCisJQVQ5MV9SRUcJIFJlc2VydmVkMFsyXTsgCS8vIA0KKwlBVDkxX1JFRwkgVENfQ1Y7IAkvLyBDb3VudGVyIFZhbHVlDQorCUFUOTFfUkVHCSBUQ19SQTsgCS8vIFJlZ2lzdGVyIEENCisJQVQ5MV9SRUcJIFRDX1JCOyAJLy8gUmVnaXN0ZXIgQg0KKwlBVDkxX1JFRwkgVENfUkM7IAkvLyBSZWdpc3RlciBDDQorCUFUOTFfUkVHCSBUQ19TUjsgCS8vIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVENfSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVENfSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRDX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorfSBBVDkxU19UQywgKkFUOTFQU19UQzsNCiANCi0vKiAtLS0tLS0tLSBUQ19DQ1IgOiAoVEMgT2Zmc2V0OiAweDApIFRDIENoYW5uZWwgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQ0xLRU4gICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgLyogKFRDKSBDb3VudGVyIENsb2NrIEVuYWJsZSBDb21tYW5kICovDQotI2RlZmluZSBBVDkxQ19UQ19DTEtESVMgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAvKiAoVEMpIENvdW50ZXIgQ2xvY2sgRGlzYWJsZSBDb21tYW5kICovDQotI2RlZmluZSBBVDkxQ19UQ19TV1RSRyAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMiApICAvKiAoVEMpIFNvZnR3YXJlIFRyaWdnZXIgQ29tbWFuZCAqLw0KLS8qIC0tLS0tLS0tIFRDX0NNUiA6IChUQyBPZmZzZXQ6IDB4NCkgVEMgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyOiBDYXB0dXJlIE1vZGUgLyBXYXZlZm9ybSBNb2RlIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19UQ19DTEtTICAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDcgPDwgMCApICAvKiAoVEMpIENsb2NrIFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0NMS1NfVElNRVJfRElWMV9DTE9DSyAgICAoICggdW5zaWduZWQgaW50ICkgMHgwICkgICAgICAgLyogKFRDKSBDbG9jayBzZWxlY3RlZDogVElNRVJfRElWMV9DTE9DSyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0NMS1NfVElNRVJfRElWMl9DTE9DSyAgICAoICggdW5zaWduZWQgaW50ICkgMHgxICkgICAgICAgLyogKFRDKSBDbG9jayBzZWxlY3RlZDogVElNRVJfRElWMl9DTE9DSyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0NMS1NfVElNRVJfRElWM19DTE9DSyAgICAoICggdW5zaWduZWQgaW50ICkgMHgyICkgICAgICAgLyogKFRDKSBDbG9jayBzZWxlY3RlZDogVElNRVJfRElWM19DTE9DSyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0NMS1NfVElNRVJfRElWNF9DTE9DSyAgICAoICggdW5zaWduZWQgaW50ICkgMHgzICkgICAgICAgLyogKFRDKSBDbG9jayBzZWxlY3RlZDogVElNRVJfRElWNF9DTE9DSyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0NMS1NfVElNRVJfRElWNV9DTE9DSyAgICAoICggdW5zaWduZWQgaW50ICkgMHg0ICkgICAgICAgLyogKFRDKSBDbG9jayBzZWxlY3RlZDogVElNRVJfRElWNV9DTE9DSyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0NMS1NfWEMwICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg1ICkgICAgICAgLyogKFRDKSBDbG9jayBzZWxlY3RlZDogWEMwICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQ0xLU19YQzEgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDYgKSAgICAgICAvKiAoVEMpIENsb2NrIHNlbGVjdGVkOiBYQzEgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19DTEtTX1hDMiAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NyApICAgICAgIC8qIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFhDMiAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQ0xLSSAgICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDMgKSAgLyogKFRDKSBDbG9jayBJbnZlcnQgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0JVUlNUICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCA0ICkgIC8qIChUQykgQnVyc3QgU2lnbmFsIFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JVUlNUX05PTkUgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDQgKSAgLyogKFRDKSBUaGUgY2xvY2sgaXMgbm90IGdhdGVkIGJ5IGFuIGV4dGVybmFsIHNpZ25hbCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JVUlNUX1hDMCAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDQgKSAgLyogKFRDKSBYQzAgaXMgQU5EZWQgd2l0aCB0aGUgc2VsZWN0ZWQgY2xvY2sgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19CVVJTVF9YQzEgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCA0ICkgIC8qIChUQykgWEMxIGlzIEFORGVkIHdpdGggdGhlIHNlbGVjdGVkIGNsb2NrICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQlVSU1RfWEMyICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgNCApICAvKiAoVEMpIFhDMiBpcyBBTkRlZCB3aXRoIHRoZSBzZWxlY3RlZCBjbG9jayAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQ1BDU1RPUCAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDYgKSAgLyogKFRDKSBDb3VudGVyIENsb2NrIFN0b3BwZWQgd2l0aCBSQyBDb21wYXJlICovDQotI2RlZmluZSBBVDkxQ19UQ19MREJTVE9QICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNiApICAvKiAoVEMpIENvdW50ZXIgQ2xvY2sgU3RvcHBlZCB3aXRoIFJCIExvYWRpbmcgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0NQQ0RJUyAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA3ICkgIC8qIChUQykgQ291bnRlciBDbG9jayBEaXNhYmxlIHdpdGggUkMgQ29tcGFyZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfTERCRElTICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDcgKSAgLyogKFRDKSBDb3VudGVyIENsb2NrIERpc2FibGVkIHdpdGggUkIgTG9hZGluZyAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfRVRSR0VERyAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDggKSAgLyogKFRDKSBFeHRlcm5hbCBUcmlnZ2VyIEVkZ2UgU2VsZWN0aW9uICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfRVRSR0VER19OT05FICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgOCApICAvKiAoVEMpIEVkZ2U6IE5vbmUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19FVFJHRURHX1JJU0lORyAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgIC8qIChUQykgRWRnZTogcmlzaW5nIGVkZ2UgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19FVFJHRURHX0ZBTExJTkcgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCA4ICkgIC8qIChUQykgRWRnZTogZmFsbGluZyBlZGdlICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfRVRSR0VER19CT1RIICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgOCApICAvKiAoVEMpIEVkZ2U6IGVhY2ggZWRnZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfRUVWVEVERyAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDggKSAgLyogKFRDKSBFeHRlcm5hbCBFdmVudCBFZGdlIFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0VFVlRFREdfTk9ORSAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDggKSAgLyogKFRDKSBFZGdlOiBOb25lICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfRUVWVEVER19SSVNJTkcgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOCApICAvKiAoVEMpIEVkZ2U6IHJpc2luZyBlZGdlICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfRUVWVEVER19GQUxMSU5HICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgOCApICAvKiAoVEMpIEVkZ2U6IGZhbGxpbmcgZWRnZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0VFVlRFREdfQk9USCAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDggKSAgLyogKFRDKSBFZGdlOiBlYWNoIGVkZ2UgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0VFVlQgICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAxMCApIC8qIChUQykgRXh0ZXJuYWwgRXZlbnQgIFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0VFVlRfVElPQiAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDEwICkgLyogKFRDKSBTaWduYWwgc2VsZWN0ZWQgYXMgZXh0ZXJuYWwgZXZlbnQ6IFRJT0IgVElPQiBkaXJlY3Rpb246IGlucHV0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfRUVWVF9YQzAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTAgKSAvKiAoVEMpIFNpZ25hbCBzZWxlY3RlZCBhcyBleHRlcm5hbCBldmVudDogWEMwIFRJT0IgZGlyZWN0aW9uOiBvdXRwdXQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19FRVZUX1hDMSAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCAxMCApIC8qIChUQykgU2lnbmFsIHNlbGVjdGVkIGFzIGV4dGVybmFsIGV2ZW50OiBYQzEgVElPQiBkaXJlY3Rpb246IG91dHB1dCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0VFVlRfWEMyICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDEwICkgLyogKFRDKSBTaWduYWwgc2VsZWN0ZWQgYXMgZXh0ZXJuYWwgZXZlbnQ6IFhDMiBUSU9CIGRpcmVjdGlvbjogb3V0cHV0ICovDQotI2RlZmluZSBBVDkxQ19UQ19BQkVUUkcgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTAgKSAvKiAoVEMpIFRJT0Egb3IgVElPQiBFeHRlcm5hbCBUcmlnZ2VyIFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfRU5FVFJHICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEyICkgLyogKFRDKSBFeHRlcm5hbCBFdmVudCBUcmlnZ2VyIGVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfV0FWRVNFTCAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDEzICkgLyogKFRDKSBXYXZlZm9ybSAgU2VsZWN0aW9uICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfV0FWRVNFTF9VUCAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMTMgKSAvKiAoVEMpIFVQIG1vZGUgd2l0aG91dCBhdG9tYXRpYyB0cmlnZ2VyIG9uIFJDIENvbXBhcmUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19XQVZFU0VMX1VQRE9XTiAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMyApIC8qIChUQykgVVBET1dOIG1vZGUgd2l0aG91dCBhdXRvbWF0aWMgdHJpZ2dlciBvbiBSQyBDb21wYXJlICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfV0FWRVNFTF9VUF9BVVRPICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgMTMgKSAvKiAoVEMpIFVQIG1vZGUgd2l0aCBhdXRvbWF0aWMgdHJpZ2dlciBvbiBSQyBDb21wYXJlICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfV0FWRVNFTF9VUERPV05fQVVUTyAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTMgKSAvKiAoVEMpIFVQRE9XTiBtb2RlIHdpdGggYXV0b21hdGljIHRyaWdnZXIgb24gUkMgQ29tcGFyZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQ1BDVFJHICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE0ICkgLyogKFRDKSBSQyBDb21wYXJlIFRyaWdnZXIgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19UQ19XQVZFICAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTUgKSAvKiAoVEMpICovDQotI2RlZmluZSBBVDkxQ19UQ19BQ1BBICAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTYgKSAvKiAoVEMpIFJBIENvbXBhcmUgRWZmZWN0IG9uIFRJT0EgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19BQ1BBX05PTkUgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAxNiApIC8qIChUQykgRWZmZWN0OiBub25lICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQUNQQV9TRVQgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTYgKSAvKiAoVEMpIEVmZmVjdDogc2V0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQUNQQV9DTEVBUiAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgMTYgKSAvKiAoVEMpIEVmZmVjdDogY2xlYXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19BQ1BBX1RPR0dMRSAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAxNiApIC8qIChUQykgRWZmZWN0OiB0b2dnbGUgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0xEUkEgICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAxNiApIC8qIChUQykgUkEgTG9hZGluZyBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19MRFJBX05PTkUgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAxNiApIC8qIChUQykgRWRnZTogTm9uZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0xEUkFfUklTSU5HICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE2ICkgLyogKFRDKSBFZGdlOiByaXNpbmcgZWRnZSBvZiBUSU9BICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfTERSQV9GQUxMSU5HICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgMTYgKSAvKiAoVEMpIEVkZ2U6IGZhbGxpbmcgZWRnZSBvZiBUSU9BICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfTERSQV9CT1RIICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTYgKSAvKiAoVEMpIEVkZ2U6IGVhY2ggZWRnZSBvZiBUSU9BICovDQotI2RlZmluZSBBVDkxQ19UQ19BQ1BDICAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTggKSAvKiAoVEMpIFJDIENvbXBhcmUgRWZmZWN0IG9uIFRJT0EgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19BQ1BDX05PTkUgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAxOCApIC8qIChUQykgRWZmZWN0OiBub25lICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQUNQQ19TRVQgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTggKSAvKiAoVEMpIEVmZmVjdDogc2V0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQUNQQ19DTEVBUiAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgMTggKSAvKiAoVEMpIEVmZmVjdDogY2xlYXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19BQ1BDX1RPR0dMRSAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAxOCApIC8qIChUQykgRWZmZWN0OiB0b2dnbGUgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0xEUkIgICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAxOCApIC8qIChUQykgUkIgTG9hZGluZyBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19MRFJCX05PTkUgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAxOCApIC8qIChUQykgRWRnZTogTm9uZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0xEUkJfUklTSU5HICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE4ICkgLyogKFRDKSBFZGdlOiByaXNpbmcgZWRnZSBvZiBUSU9BICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfTERSQl9GQUxMSU5HICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgMTggKSAvKiAoVEMpIEVkZ2U6IGZhbGxpbmcgZWRnZSBvZiBUSU9BICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfTERSQl9CT1RIICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTggKSAvKiAoVEMpIEVkZ2U6IGVhY2ggZWRnZSBvZiBUSU9BICovDQotI2RlZmluZSBBVDkxQ19UQ19BRUVWVCAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMjAgKSAvKiAoVEMpIEV4dGVybmFsIEV2ZW50IEVmZmVjdCBvbiBUSU9BICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQUVFVlRfTk9ORSAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMjAgKSAvKiAoVEMpIEVmZmVjdDogbm9uZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0FFRVZUX1NFVCAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIwICkgLyogKFRDKSBFZmZlY3Q6IHNldCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0FFRVZUX0NMRUFSICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDIwICkgLyogKFRDKSBFZmZlY3Q6IGNsZWFyICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQUVFVlRfVE9HR0xFICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMjAgKSAvKiAoVEMpIEVmZmVjdDogdG9nZ2xlICovDQotI2RlZmluZSBBVDkxQ19UQ19BU1dUUkcgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMjIgKSAvKiAoVEMpIFNvZnR3YXJlIFRyaWdnZXIgRWZmZWN0IG9uIFRJT0EgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19BU1dUUkdfTk9ORSAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAyMiApIC8qIChUQykgRWZmZWN0OiBub25lICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQVNXVFJHX1NFVCAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjIgKSAvKiAoVEMpIEVmZmVjdDogc2V0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQVNXVFJHX0NMRUFSICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgMjIgKSAvKiAoVEMpIEVmZmVjdDogY2xlYXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19BU1dUUkdfVE9HR0xFICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAyMiApIC8qIChUQykgRWZmZWN0OiB0b2dnbGUgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0JDUEIgICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAyNCApIC8qIChUQykgUkIgQ29tcGFyZSBFZmZlY3Qgb24gVElPQiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JDUEJfTk9ORSAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDI0ICkgLyogKFRDKSBFZmZlY3Q6IG5vbmUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19CQ1BCX1NFVCAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyNCApIC8qIChUQykgRWZmZWN0OiBzZXQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19CQ1BCX0NMRUFSICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCAyNCApIC8qIChUQykgRWZmZWN0OiBjbGVhciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JDUEJfVE9HR0xFICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDI0ICkgLyogKFRDKSBFZmZlY3Q6IHRvZ2dsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQkNQQyAgICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDI2ICkgLyogKFRDKSBSQyBDb21wYXJlIEVmZmVjdCBvbiBUSU9CICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQkNQQ19OT05FICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMjYgKSAvKiAoVEMpIEVmZmVjdDogbm9uZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JDUENfU0VUICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDI2ICkgLyogKFRDKSBFZmZlY3Q6IHNldCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JDUENfQ0xFQVIgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDI2ICkgLyogKFRDKSBFZmZlY3Q6IGNsZWFyICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQkNQQ19UT0dHTEUgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMjYgKSAvKiAoVEMpIEVmZmVjdDogdG9nZ2xlICovDQotI2RlZmluZSBBVDkxQ19UQ19CRUVWVCAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMjggKSAvKiAoVEMpIEV4dGVybmFsIEV2ZW50IEVmZmVjdCBvbiBUSU9CICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQkVFVlRfTk9ORSAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMjggKSAvKiAoVEMpIEVmZmVjdDogbm9uZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JFRVZUX1NFVCAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDI4ICkgLyogKFRDKSBFZmZlY3Q6IHNldCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JFRVZUX0NMRUFSICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDI4ICkgLyogKFRDKSBFZmZlY3Q6IGNsZWFyICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQkVFVlRfVE9HR0xFICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMjggKSAvKiAoVEMpIEVmZmVjdDogdG9nZ2xlICovDQotI2RlZmluZSBBVDkxQ19UQ19CU1dUUkcgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMzAgKSAvKiAoVEMpIFNvZnR3YXJlIFRyaWdnZXIgRWZmZWN0IG9uIFRJT0IgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19CU1dUUkdfTk9ORSAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAzMCApIC8qIChUQykgRWZmZWN0OiBub25lICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQlNXVFJHX1NFVCAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMzAgKSAvKiAoVEMpIEVmZmVjdDogc2V0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQlNXVFJHX0NMRUFSICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgMzAgKSAvKiAoVEMpIEVmZmVjdDogY2xlYXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19CU1dUUkdfVE9HR0xFICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAzMCApIC8qIChUQykgRWZmZWN0OiB0b2dnbGUgKi8NCi0vKiAtLS0tLS0tLSBUQ19TUiA6IChUQyBPZmZzZXQ6IDB4MjApIFRDIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19UQ19DT1ZGUyAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAvKiAoVEMpIENvdW50ZXIgT3ZlcmZsb3cgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0xPVlJTICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgIC8qIChUQykgTG9hZCBPdmVycnVuICovDQotI2RlZmluZSBBVDkxQ19UQ19DUEFTICAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMiApICAvKiAoVEMpIFJBIENvbXBhcmUgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0NQQlMgICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzICkgIC8qIChUQykgUkIgQ29tcGFyZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQ1BDUyAgICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDQgKSAgLyogKFRDKSBSQyBDb21wYXJlICovDQotI2RlZmluZSBBVDkxQ19UQ19MRFJBUyAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNSApICAvKiAoVEMpIFJBIExvYWRpbmcgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0xEUkJTICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA2ICkgIC8qIChUQykgUkIgTG9hZGluZyAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfRVRSR1MgICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDcgKSAgLyogKFRDKSBFeHRlcm5hbCBUcmlnZ2VyICovDQotI2RlZmluZSBBVDkxQ19UQ19DTEtTVEEgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTYgKSAvKiAoVEMpIENsb2NrIEVuYWJsaW5nICovDQotI2RlZmluZSBBVDkxQ19UQ19NVElPQSAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTcgKSAvKiAoVEMpIFRJT0EgTWlycm9yICovDQotI2RlZmluZSBBVDkxQ19UQ19NVElPQiAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTggKSAvKiAoVEMpIFRJT0EgTWlycm9yICovDQotLyogLS0tLS0tLS0gVENfSUVSIDogKFRDIE9mZnNldDogMHgyNCkgVEMgQ2hhbm5lbCBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gVENfSURSIDogKFRDIE9mZnNldDogMHgyOCkgVEMgQ2hhbm5lbCBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFRDX0lNUiA6IChUQyBPZmZzZXQ6IDB4MmMpIFRDIENoYW5uZWwgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCisvLyAtLS0tLS0tLSBUQ19DQ1IgOiAoVEMgT2Zmc2V0OiAweDApIFRDIENoYW5uZWwgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RDX0NMS0VOICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoVEMpIENvdW50ZXIgQ2xvY2sgRW5hYmxlIENvbW1hbmQNCisjZGVmaW5lIEFUOTFDX1RDX0NMS0RJUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoVEMpIENvdW50ZXIgQ2xvY2sgRGlzYWJsZSBDb21tYW5kDQorI2RlZmluZSBBVDkxQ19UQ19TV1RSRyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFRDKSBTb2Z0d2FyZSBUcmlnZ2VyIENvbW1hbmQNCisvLyAtLS0tLS0tLSBUQ19DTVIgOiAoVEMgT2Zmc2V0OiAweDQpIFRDIENoYW5uZWwgTW9kZSBSZWdpc3RlcjogQ2FwdHVyZSBNb2RlIC8gV2F2ZWZvcm0gTW9kZSAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RDX0NMS1MgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8ICAwKSAvLyAoVEMpIENsb2NrIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDX0NMS1NfVElNRVJfRElWMV9DTE9DSyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCkgLy8gKFRDKSBDbG9jayBzZWxlY3RlZDogVElNRVJfRElWMV9DTE9DSw0KKyNkZWZpbmUgCUFUOTFDX1RDX0NMS1NfVElNRVJfRElWMl9DTE9DSyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSkgLy8gKFRDKSBDbG9jayBzZWxlY3RlZDogVElNRVJfRElWMl9DTE9DSw0KKyNkZWZpbmUgCUFUOTFDX1RDX0NMS1NfVElNRVJfRElWM19DTE9DSyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MikgLy8gKFRDKSBDbG9jayBzZWxlY3RlZDogVElNRVJfRElWM19DTE9DSw0KKyNkZWZpbmUgCUFUOTFDX1RDX0NMS1NfVElNRVJfRElWNF9DTE9DSyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MykgLy8gKFRDKSBDbG9jayBzZWxlY3RlZDogVElNRVJfRElWNF9DTE9DSw0KKyNkZWZpbmUgCUFUOTFDX1RDX0NMS1NfVElNRVJfRElWNV9DTE9DSyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NCkgLy8gKFRDKSBDbG9jayBzZWxlY3RlZDogVElNRVJfRElWNV9DTE9DSw0KKyNkZWZpbmUgCUFUOTFDX1RDX0NMS1NfWEMwICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NSkgLy8gKFRDKSBDbG9jayBzZWxlY3RlZDogWEMwDQorI2RlZmluZSAJQVQ5MUNfVENfQ0xLU19YQzEgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg2KSAvLyAoVEMpIENsb2NrIHNlbGVjdGVkOiBYQzENCisjZGVmaW5lIAlBVDkxQ19UQ19DTEtTX1hDMiAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDcpIC8vIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFhDMg0KKyNkZWZpbmUgQVQ5MUNfVENfQ0xLSSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChUQykgQ2xvY2sgSW52ZXJ0DQorI2RlZmluZSBBVDkxQ19UQ19CVVJTVCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgNCkgLy8gKFRDKSBCdXJzdCBTaWduYWwgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfVENfQlVSU1RfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgNCkgLy8gKFRDKSBUaGUgY2xvY2sgaXMgbm90IGdhdGVkIGJ5IGFuIGV4dGVybmFsIHNpZ25hbA0KKyNkZWZpbmUgCUFUOTFDX1RDX0JVUlNUX1hDMCAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChUQykgWEMwIGlzIEFORGVkIHdpdGggdGhlIHNlbGVjdGVkIGNsb2NrDQorI2RlZmluZSAJQVQ5MUNfVENfQlVSU1RfWEMxICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgNCkgLy8gKFRDKSBYQzEgaXMgQU5EZWQgd2l0aCB0aGUgc2VsZWN0ZWQgY2xvY2sNCisjZGVmaW5lIAlBVDkxQ19UQ19CVVJTVF9YQzIgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA0KSAvLyAoVEMpIFhDMiBpcyBBTkRlZCB3aXRoIHRoZSBzZWxlY3RlZCBjbG9jaw0KKyNkZWZpbmUgQVQ5MUNfVENfQ1BDU1RPUCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChUQykgQ291bnRlciBDbG9jayBTdG9wcGVkIHdpdGggUkMgQ29tcGFyZQ0KKyNkZWZpbmUgQVQ5MUNfVENfTERCU1RPUCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChUQykgQ291bnRlciBDbG9jayBTdG9wcGVkIHdpdGggUkIgTG9hZGluZw0KKyNkZWZpbmUgQVQ5MUNfVENfQ1BDRElTICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChUQykgQ291bnRlciBDbG9jayBEaXNhYmxlIHdpdGggUkMgQ29tcGFyZQ0KKyNkZWZpbmUgQVQ5MUNfVENfTERCRElTICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChUQykgQ291bnRlciBDbG9jayBEaXNhYmxlZCB3aXRoIFJCIExvYWRpbmcNCisjZGVmaW5lIEFUOTFDX1RDX0VUUkdFREcgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA4KSAvLyAoVEMpIEV4dGVybmFsIFRyaWdnZXIgRWRnZSBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ19FVFJHRURHX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDgpIC8vIChUQykgRWRnZTogTm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0VUUkdFREdfUklTSU5HICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFRDKSBFZGdlOiByaXNpbmcgZWRnZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0VUUkdFREdfRkFMTElORyAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgOCkgLy8gKFRDKSBFZGdlOiBmYWxsaW5nIGVkZ2UNCisjZGVmaW5lIAlBVDkxQ19UQ19FVFJHRURHX0JPVEggICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDgpIC8vIChUQykgRWRnZTogZWFjaCBlZGdlDQorI2RlZmluZSBBVDkxQ19UQ19FRVZURURHICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKFRDKSBFeHRlcm5hbCBFdmVudCBFZGdlIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDX0VFVlRFREdfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgOCkgLy8gKFRDKSBFZGdlOiBOb25lDQorI2RlZmluZSAJQVQ5MUNfVENfRUVWVEVER19SSVNJTkcgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoVEMpIEVkZ2U6IHJpc2luZyBlZGdlDQorI2RlZmluZSAJQVQ5MUNfVENfRUVWVEVER19GQUxMSU5HICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA4KSAvLyAoVEMpIEVkZ2U6IGZhbGxpbmcgZWRnZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0VFVlRFREdfQk9USCAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKFRDKSBFZGdlOiBlYWNoIGVkZ2UNCisjZGVmaW5lIEFUOTFDX1RDX0VFVlQgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDEwKSAvLyAoVEMpIEV4dGVybmFsIEV2ZW50ICBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ19FRVZUX1RJT0IgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMTApIC8vIChUQykgU2lnbmFsIHNlbGVjdGVkIGFzIGV4dGVybmFsIGV2ZW50OiBUSU9CIFRJT0IgZGlyZWN0aW9uOiBpbnB1dA0KKyNkZWZpbmUgCUFUOTFDX1RDX0VFVlRfWEMwICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLy8gKFRDKSBTaWduYWwgc2VsZWN0ZWQgYXMgZXh0ZXJuYWwgZXZlbnQ6IFhDMCBUSU9CIGRpcmVjdGlvbjogb3V0cHV0DQorI2RlZmluZSAJQVQ5MUNfVENfRUVWVF9YQzEgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDEwKSAvLyAoVEMpIFNpZ25hbCBzZWxlY3RlZCBhcyBleHRlcm5hbCBldmVudDogWEMxIFRJT0IgZGlyZWN0aW9uOiBvdXRwdXQNCisjZGVmaW5lIAlBVDkxQ19UQ19FRVZUX1hDMiAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTApIC8vIChUQykgU2lnbmFsIHNlbGVjdGVkIGFzIGV4dGVybmFsIGV2ZW50OiBYQzIgVElPQiBkaXJlY3Rpb246IG91dHB1dA0KKyNkZWZpbmUgQVQ5MUNfVENfQUJFVFJHICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChUQykgVElPQSBvciBUSU9CIEV4dGVybmFsIFRyaWdnZXIgU2VsZWN0aW9uDQorI2RlZmluZSBBVDkxQ19UQ19FTkVUUkcgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLy8gKFRDKSBFeHRlcm5hbCBFdmVudCBUcmlnZ2VyIGVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVENfV0FWRVNFTCAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTMpIC8vIChUQykgV2F2ZWZvcm0gIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDX1dBVkVTRUxfVVAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAxMykgLy8gKFRDKSBVUCBtb2RlIHdpdGhvdXQgYXRvbWF0aWMgdHJpZ2dlciBvbiBSQyBDb21wYXJlDQorI2RlZmluZSAJQVQ5MUNfVENfV0FWRVNFTF9VUERPV04gICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEzKSAvLyAoVEMpIFVQRE9XTiBtb2RlIHdpdGhvdXQgYXV0b21hdGljIHRyaWdnZXIgb24gUkMgQ29tcGFyZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX1dBVkVTRUxfVVBfQVVUTyAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxMykgLy8gKFRDKSBVUCBtb2RlIHdpdGggYXV0b21hdGljIHRyaWdnZXIgb24gUkMgQ29tcGFyZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX1dBVkVTRUxfVVBET1dOX0FVVE8gICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxMykgLy8gKFRDKSBVUERPV04gbW9kZSB3aXRoIGF1dG9tYXRpYyB0cmlnZ2VyIG9uIFJDIENvbXBhcmUNCisjZGVmaW5lIEFUOTFDX1RDX0NQQ1RSRyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE0KSAvLyAoVEMpIFJDIENvbXBhcmUgVHJpZ2dlciBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1RDX1dBVkUgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE1KSAvLyAoVEMpIA0KKyNkZWZpbmUgQVQ5MUNfVENfQUNQQSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTYpIC8vIChUQykgUkEgQ29tcGFyZSBFZmZlY3Qgb24gVElPQQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0FDUEFfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAxNikgLy8gKFRDKSBFZmZlY3Q6IG5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19BQ1BBX1NFVCAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChUQykgRWZmZWN0OiBzZXQNCisjZGVmaW5lIAlBVDkxQ19UQ19BQ1BBX0NMRUFSICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMTYpIC8vIChUQykgRWZmZWN0OiBjbGVhcg0KKyNkZWZpbmUgCUFUOTFDX1RDX0FDUEFfVE9HR0xFICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxNikgLy8gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KKyNkZWZpbmUgQVQ5MUNfVENfTERSQSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTYpIC8vIChUQykgUkEgTG9hZGluZyBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ19MRFJBX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMTYpIC8vIChUQykgRWRnZTogTm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0xEUkFfUklTSU5HICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKFRDKSBFZGdlOiByaXNpbmcgZWRnZSBvZiBUSU9BDQorI2RlZmluZSAJQVQ5MUNfVENfTERSQV9GQUxMSU5HICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDE2KSAvLyAoVEMpIEVkZ2U6IGZhbGxpbmcgZWRnZSBvZiBUSU9BDQorI2RlZmluZSAJQVQ5MUNfVENfTERSQV9CT1RIICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE2KSAvLyAoVEMpIEVkZ2U6IGVhY2ggZWRnZSBvZiBUSU9BDQorI2RlZmluZSBBVDkxQ19UQ19BQ1BDICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxOCkgLy8gKFRDKSBSQyBDb21wYXJlIEVmZmVjdCBvbiBUSU9BDQorI2RlZmluZSAJQVQ5MUNfVENfQUNQQ19OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDE4KSAvLyAoVEMpIEVmZmVjdDogbm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0FDUENfU0VUICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOCkgLy8gKFRDKSBFZmZlY3Q6IHNldA0KKyNkZWZpbmUgCUFUOTFDX1RDX0FDUENfQ0xFQVIgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxOCkgLy8gKFRDKSBFZmZlY3Q6IGNsZWFyDQorI2RlZmluZSAJQVQ5MUNfVENfQUNQQ19UT0dHTEUgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE4KSAvLyAoVEMpIEVmZmVjdDogdG9nZ2xlDQorI2RlZmluZSBBVDkxQ19UQ19MRFJCICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxOCkgLy8gKFRDKSBSQiBMb2FkaW5nIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDX0xEUkJfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAxOCkgLy8gKFRDKSBFZGdlOiBOb25lDQorI2RlZmluZSAJQVQ5MUNfVENfTERSQl9SSVNJTkcgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE4KSAvLyAoVEMpIEVkZ2U6IHJpc2luZyBlZGdlIG9mIFRJT0ENCisjZGVmaW5lIAlBVDkxQ19UQ19MRFJCX0ZBTExJTkcgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMTgpIC8vIChUQykgRWRnZTogZmFsbGluZyBlZGdlIG9mIFRJT0ENCisjZGVmaW5lIAlBVDkxQ19UQ19MRFJCX0JPVEggICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTgpIC8vIChUQykgRWRnZTogZWFjaCBlZGdlIG9mIFRJT0ENCisjZGVmaW5lIEFUOTFDX1RDX0FFRVZUICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDIwKSAvLyAoVEMpIEV4dGVybmFsIEV2ZW50IEVmZmVjdCBvbiBUSU9BDQorI2RlZmluZSAJQVQ5MUNfVENfQUVFVlRfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAyMCkgLy8gKFRDKSBFZmZlY3Q6IG5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19BRUVWVF9TRVQgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIwKSAvLyAoVEMpIEVmZmVjdDogc2V0DQorI2RlZmluZSAJQVQ5MUNfVENfQUVFVlRfQ0xFQVIgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAyMCkgLy8gKFRDKSBFZmZlY3Q6IGNsZWFyDQorI2RlZmluZSAJQVQ5MUNfVENfQUVFVlRfVE9HR0xFICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyMCkgLy8gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KKyNkZWZpbmUgQVQ5MUNfVENfQVNXVFJHICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMjIpIC8vIChUQykgU29mdHdhcmUgVHJpZ2dlciBFZmZlY3Qgb24gVElPQQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0FTV1RSR19OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDIyKSAvLyAoVEMpIEVmZmVjdDogbm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0FTV1RSR19TRVQgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIyKSAvLyAoVEMpIEVmZmVjdDogc2V0DQorI2RlZmluZSAJQVQ5MUNfVENfQVNXVFJHX0NMRUFSICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMjIpIC8vIChUQykgRWZmZWN0OiBjbGVhcg0KKyNkZWZpbmUgCUFUOTFDX1RDX0FTV1RSR19UT0dHTEUgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDIyKSAvLyAoVEMpIEVmZmVjdDogdG9nZ2xlDQorI2RlZmluZSBBVDkxQ19UQ19CQ1BCICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyNCkgLy8gKFRDKSBSQiBDb21wYXJlIEVmZmVjdCBvbiBUSU9CDQorI2RlZmluZSAJQVQ5MUNfVENfQkNQQl9OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDI0KSAvLyAoVEMpIEVmZmVjdDogbm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0JDUEJfU0VUICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNCkgLy8gKFRDKSBFZmZlY3Q6IHNldA0KKyNkZWZpbmUgCUFUOTFDX1RDX0JDUEJfQ0xFQVIgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAyNCkgLy8gKFRDKSBFZmZlY3Q6IGNsZWFyDQorI2RlZmluZSAJQVQ5MUNfVENfQkNQQl9UT0dHTEUgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDI0KSAvLyAoVEMpIEVmZmVjdDogdG9nZ2xlDQorI2RlZmluZSBBVDkxQ19UQ19CQ1BDICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyNikgLy8gKFRDKSBSQyBDb21wYXJlIEVmZmVjdCBvbiBUSU9CDQorI2RlZmluZSAJQVQ5MUNfVENfQkNQQ19OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDI2KSAvLyAoVEMpIEVmZmVjdDogbm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0JDUENfU0VUICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNikgLy8gKFRDKSBFZmZlY3Q6IHNldA0KKyNkZWZpbmUgCUFUOTFDX1RDX0JDUENfQ0xFQVIgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAyNikgLy8gKFRDKSBFZmZlY3Q6IGNsZWFyDQorI2RlZmluZSAJQVQ5MUNfVENfQkNQQ19UT0dHTEUgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDI2KSAvLyAoVEMpIEVmZmVjdDogdG9nZ2xlDQorI2RlZmluZSBBVDkxQ19UQ19CRUVWVCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyOCkgLy8gKFRDKSBFeHRlcm5hbCBFdmVudCBFZmZlY3Qgb24gVElPQg0KKyNkZWZpbmUgCUFUOTFDX1RDX0JFRVZUX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMjgpIC8vIChUQykgRWZmZWN0OiBub25lDQorI2RlZmluZSAJQVQ5MUNfVENfQkVFVlRfU0VUICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyOCkgLy8gKFRDKSBFZmZlY3Q6IHNldA0KKyNkZWZpbmUgCUFUOTFDX1RDX0JFRVZUX0NMRUFSICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMjgpIC8vIChUQykgRWZmZWN0OiBjbGVhcg0KKyNkZWZpbmUgCUFUOTFDX1RDX0JFRVZUX1RPR0dMRSAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMjgpIC8vIChUQykgRWZmZWN0OiB0b2dnbGUNCisjZGVmaW5lIEFUOTFDX1RDX0JTV1RSRyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDMwKSAvLyAoVEMpIFNvZnR3YXJlIFRyaWdnZXIgRWZmZWN0IG9uIFRJT0INCisjZGVmaW5lIAlBVDkxQ19UQ19CU1dUUkdfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAzMCkgLy8gKFRDKSBFZmZlY3Q6IG5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19CU1dUUkdfU0VUICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAzMCkgLy8gKFRDKSBFZmZlY3Q6IHNldA0KKyNkZWZpbmUgCUFUOTFDX1RDX0JTV1RSR19DTEVBUiAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDMwKSAvLyAoVEMpIEVmZmVjdDogY2xlYXINCisjZGVmaW5lIAlBVDkxQ19UQ19CU1dUUkdfVE9HR0xFICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAzMCkgLy8gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KKy8vIC0tLS0tLS0tIFRDX1NSIDogKFRDIE9mZnNldDogMHgyMCkgVEMgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UQ19DT1ZGUyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFRDKSBDb3VudGVyIE92ZXJmbG93DQorI2RlZmluZSBBVDkxQ19UQ19MT1ZSUyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFRDKSBMb2FkIE92ZXJydW4NCisjZGVmaW5lIEFUOTFDX1RDX0NQQVMgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoVEMpIFJBIENvbXBhcmUNCisjZGVmaW5lIEFUOTFDX1RDX0NQQlMgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoVEMpIFJCIENvbXBhcmUNCisjZGVmaW5lIEFUOTFDX1RDX0NQQ1MgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoVEMpIFJDIENvbXBhcmUNCisjZGVmaW5lIEFUOTFDX1RDX0xEUkFTICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoVEMpIFJBIExvYWRpbmcNCisjZGVmaW5lIEFUOTFDX1RDX0xEUkJTICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoVEMpIFJCIExvYWRpbmcNCisjZGVmaW5lIEFUOTFDX1RDX0VUUkdTICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoVEMpIEV4dGVybmFsIFRyaWdnZXINCisjZGVmaW5lIEFUOTFDX1RDX0NMS1NUQSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoVEMpIENsb2NrIEVuYWJsaW5nDQorI2RlZmluZSBBVDkxQ19UQ19NVElPQSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNykgLy8gKFRDKSBUSU9BIE1pcnJvcg0KKyNkZWZpbmUgQVQ5MUNfVENfTVRJT0IgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTgpIC8vIChUQykgVElPQSBNaXJyb3INCisvLyAtLS0tLS0tLSBUQ19JRVIgOiAoVEMgT2Zmc2V0OiAweDI0KSBUQyBDaGFubmVsIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVENfSURSIDogKFRDIE9mZnNldDogMHgyOCkgVEMgQ2hhbm5lbCBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBUQ19JTVIgOiAoVEMgT2Zmc2V0OiAweDJjKSBUQyBDaGFubmVsIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVGltZXIgQ291bnRlciBJbnRlcmZhY2UgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLXR5cGVkZWYgc3RydWN0IF9BVDkxU19UQ0INCi17DQotICAgIEFUOTFTX1RDIFRDQl9UQzA7ICAgICAgICAvKiBUQyBDaGFubmVsIDAgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQwWyA0IF07IC8qICovDQotICAgIEFUOTFTX1RDIFRDQl9UQzE7ICAgICAgICAvKiBUQyBDaGFubmVsIDEgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQxWyA0IF07IC8qICovDQotICAgIEFUOTFTX1RDIFRDQl9UQzI7ICAgICAgICAvKiBUQyBDaGFubmVsIDIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQyWyA0IF07IC8qICovDQotICAgIEFUOTFfUkVHIFRDQl9CQ1I7ICAgICAgICAvKiBUQyBCbG9jayBDb250cm9sIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFRDQl9CTVI7ICAgICAgICAvKiBUQyBCbG9jayBNb2RlIFJlZ2lzdGVyICovDQotfSBBVDkxU19UQ0IsICogQVQ5MVBTX1RDQjsNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFRpbWVyIENvdW50ZXIgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfVENCIHsNCisJQVQ5MVNfVEMJIFRDQl9UQzA7IAkvLyBUQyBDaGFubmVsIDANCisJQVQ5MV9SRUcJIFJlc2VydmVkMFs0XTsgCS8vIA0KKwlBVDkxU19UQwkgVENCX1RDMTsgCS8vIFRDIENoYW5uZWwgMQ0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzRdOyAJLy8gDQorCUFUOTFTX1RDCSBUQ0JfVEMyOyAJLy8gVEMgQ2hhbm5lbCAyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDJbNF07IAkvLyANCisJQVQ5MV9SRUcJIFRDQl9CQ1I7IAkvLyBUQyBCbG9jayBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUQ0JfQk1SOyAJLy8gVEMgQmxvY2sgTW9kZSBSZWdpc3Rlcg0KK30gQVQ5MVNfVENCLCAqQVQ5MVBTX1RDQjsNCiANCi0vKiAtLS0tLS0tLSBUQ0JfQkNSIDogKFRDQiBPZmZzZXQ6IDB4YzApIFRDIEJsb2NrIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1RDQl9TWU5DICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAvKiAoVENCKSBTeW5jaHJvIENvbW1hbmQgKi8NCi0vKiAtLS0tLS0tLSBUQ0JfQk1SIDogKFRDQiBPZmZzZXQ6IDB4YzQpIFRDIEJsb2NrIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1RDQl9UQzBYQzBTICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDAgKSAvKiAoVENCKSBFeHRlcm5hbCBDbG9jayBTaWduYWwgMCBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ0JfVEMwWEMwU19UQ0xLMCAgICAoICggdW5zaWduZWQgaW50ICkgMHgwICkgICAgICAvKiAoVENCKSBUQ0xLMCBjb25uZWN0ZWQgdG8gWEMwICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENCX1RDMFhDMFNfTk9ORSAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSApICAgICAgLyogKFRDQikgTm9uZSBzaWduYWwgY29ubmVjdGVkIHRvIFhDMCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDQl9UQzBYQzBTX1RJT0ExICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgKSAgICAgIC8qIChUQ0IpIFRJT0ExIGNvbm5lY3RlZCB0byBYQzAgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ0JfVEMwWEMwU19USU9BMiAgICAoICggdW5zaWduZWQgaW50ICkgMHgzICkgICAgICAvKiAoVENCKSBUSU9BMiBjb25uZWN0ZWQgdG8gWEMwICovDQotI2RlZmluZSBBVDkxQ19UQ0JfVEMxWEMxUyAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAyICkgLyogKFRDQikgRXh0ZXJuYWwgQ2xvY2sgU2lnbmFsIDEgU2VsZWN0aW9uICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENCX1RDMVhDMVNfVENMSzEgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAyICkgLyogKFRDQikgVENMSzEgY29ubmVjdGVkIHRvIFhDMSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDQl9UQzFYQzFTX05PTkUgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMiApIC8qIChUQ0IpIE5vbmUgc2lnbmFsIGNvbm5lY3RlZCB0byBYQzEgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ0JfVEMxWEMxU19USU9BMCAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDIgKSAvKiAoVENCKSBUSU9BMCBjb25uZWN0ZWQgdG8gWEMxICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENCX1RDMVhDMVNfVElPQTIgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAyICkgLyogKFRDQikgVElPQTIgY29ubmVjdGVkIHRvIFhDMSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENCX1RDMlhDMlMgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgNCApIC8qIChUQ0IpIEV4dGVybmFsIENsb2NrIFNpZ25hbCAyIFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDQl9UQzJYQzJTX1RDTEsyICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgNCApIC8qIChUQ0IpIFRDTEsyIGNvbm5lY3RlZCB0byBYQzIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ0JfVEMyWEMyU19OT05FICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDQgKSAvKiAoVENCKSBOb25lIHNpZ25hbCBjb25uZWN0ZWQgdG8gWEMyICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENCX1RDMlhDMlNfVElPQTAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCA0ICkgLyogKFRDQikgVElPQTAgY29ubmVjdGVkIHRvIFhDMiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDQl9UQzJYQzJTX1RJT0ExICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgNCApIC8qIChUQ0IpIFRJT0EyIGNvbm5lY3RlZCB0byBYQzIgKi8NCisvLyAtLS0tLS0tLSBUQ0JfQkNSIDogKFRDQiBPZmZzZXQ6IDB4YzApIFRDIEJsb2NrIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UQ0JfU1lOQyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFRDQikgU3luY2hybyBDb21tYW5kDQorLy8gLS0tLS0tLS0gVENCX0JNUiA6IChUQ0IgT2Zmc2V0OiAweGM0KSBUQyBCbG9jayBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVENCX1RDMFhDMFMgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDApIC8vIChUQ0IpIEV4dGVybmFsIENsb2NrIFNpZ25hbCAwIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzBYQzBTX1RDTEswICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDApIC8vIChUQ0IpIFRDTEswIGNvbm5lY3RlZCB0byBYQzANCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMwWEMwU19OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxKSAvLyAoVENCKSBOb25lIHNpZ25hbCBjb25uZWN0ZWQgdG8gWEMwDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMFhDMFNfVElPQTEgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MikgLy8gKFRDQikgVElPQTEgY29ubmVjdGVkIHRvIFhDMA0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzBYQzBTX1RJT0EyICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMpIC8vIChUQ0IpIFRJT0EyIGNvbm5lY3RlZCB0byBYQzANCisjZGVmaW5lIEFUOTFDX1RDQl9UQzFYQzFTICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICAyKSAvLyAoVENCKSBFeHRlcm5hbCBDbG9jayBTaWduYWwgMSBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMxWEMxU19UQ0xLMSAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICAyKSAvLyAoVENCKSBUQ0xLMSBjb25uZWN0ZWQgdG8gWEMxDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMVhDMVNfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFRDQikgTm9uZSBzaWduYWwgY29ubmVjdGVkIHRvIFhDMQ0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzFYQzFTX1RJT0EwICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDIpIC8vIChUQ0IpIFRJT0EwIGNvbm5lY3RlZCB0byBYQzENCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMxWEMxU19USU9BMiAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICAyKSAvLyAoVENCKSBUSU9BMiBjb25uZWN0ZWQgdG8gWEMxDQorI2RlZmluZSBBVDkxQ19UQ0JfVEMyWEMyUyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgNCkgLy8gKFRDQikgRXh0ZXJuYWwgQ2xvY2sgU2lnbmFsIDIgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMlhDMlNfVENMSzIgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgNCkgLy8gKFRDQikgVENMSzIgY29ubmVjdGVkIHRvIFhDMg0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzJYQzJTX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChUQ0IpIE5vbmUgc2lnbmFsIGNvbm5lY3RlZCB0byBYQzINCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMyWEMyU19USU9BMCAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA0KSAvLyAoVENCKSBUSU9BMCBjb25uZWN0ZWQgdG8gWEMyDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMlhDMlNfVElPQTEgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgNCkgLy8gKFRDQikgVElPQTIgY29ubmVjdGVkIHRvIFhDMg0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQ29udHJvbCBBcmVhIE5ldHdvcmsgTWFpbEJveCBJbnRlcmZhY2UgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLXR5cGVkZWYgc3RydWN0IF9BVDkxU19DQU5fTUINCi17DQotICAgIEFUOTFfUkVHIENBTl9NQl9NTVI7ICAvKiBNYWlsQm94IE1vZGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQ0FOX01CX01BTTsgIC8qIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIENBTl9NQl9NSUQ7ICAvKiBNYWlsQm94IElEIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIENBTl9NQl9NRklEOyAvKiBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBDQU5fTUJfTVNSOyAgLyogTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQ0FOX01CX01ETDsgIC8qIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQ0FOX01CX01ESDsgIC8qIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIENBTl9NQl9NQ1I7ICAvKiBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXIgKi8NCi19IEFUOTFTX0NBTl9NQiwgKiBBVDkxUFNfQ0FOX01COw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQ29udHJvbCBBcmVhIE5ldHdvcmsgTWFpbEJveCBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19DQU5fTUIgew0KKwlBVDkxX1JFRwkgQ0FOX01CX01NUjsgCS8vIE1haWxCb3ggTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0FOX01CX01BTTsgCS8vIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBDQU5fTUJfTUlEOyAJLy8gTWFpbEJveCBJRCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0FOX01CX01GSUQ7IAkvLyBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0FOX01CX01TUjsgCS8vIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBDQU5fTUJfTURMOyAJLy8gTWFpbEJveCBEYXRhIExvdyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0FOX01CX01ESDsgCS8vIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBDQU5fTUJfTUNSOyAJLy8gTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyDQorfSBBVDkxU19DQU5fTUIsICpBVDkxUFNfQ0FOX01COw0KIA0KLS8qIC0tLS0tLS0tIENBTl9NTVIgOiAoQ0FOX01CIE9mZnNldDogMHgwKSBDQU4gTWVzc2FnZSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19DQU5fTVRJTUVNQVJLICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRkZGIDw8IDAgKSAgLyogKENBTl9NQikgTWFpbGJveCBUaW1lbWFyayAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1BSSU9SICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RiA8PCAxNiApICAgIC8qIChDQU5fTUIpIE1haWxib3ggUHJpb3JpdHkgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NT1QgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDcgPDwgMjQgKSAgICAvKiAoQ0FOX01CKSBNYWlsYm94IE9iamVjdCBUeXBlICovDQotI2RlZmluZSAgICAgQVQ5MUNfQ0FOX01PVF9ESVMgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDI0ICkgICAgLyogKENBTl9NQikgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19DQU5fTU9UX1JYICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjQgKSAgICAvKiAoQ0FOX01CKSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0NBTl9NT1RfUlhPVkVSV1JJVEUgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCAyNCApICAgIC8qIChDQU5fTUIpICovDQotI2RlZmluZSAgICAgQVQ5MUNfQ0FOX01PVF9UWCAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDI0ICkgICAgLyogKENBTl9NQikgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19DQU5fTU9UX0NPTlNVTUVSICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDQgPDwgMjQgKSAgICAvKiAoQ0FOX01CKSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0NBTl9NT1RfUFJPRFVDRVIgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NSA8PCAyNCApICAgIC8qIChDQU5fTUIpICovDQotLyogLS0tLS0tLS0gQ0FOX01BTSA6IChDQU5fTUIgT2Zmc2V0OiAweDQpIENBTiBNZXNzYWdlIEFjY2VwdGFuY2UgTWFzayBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01JRHZCICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4M0ZGRkYgPDwgMCApIC8qIChDQU5fTUIpIENvbXBsZW1lbnRhcnkgYml0cyBmb3IgaWRlbnRpZmllciBpbiBleHRlbmRlZCBtb2RlICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUlEdkEgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg3RkYgPDwgMTggKSAgLyogKENBTl9NQikgSWRlbnRpZmllciBmb3Igc3RhbmRhcmQgZnJhbWUgbW9kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01JREUgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyOSApICAgIC8qIChDQU5fTUIpIElkZW50aWZpZXIgVmVyc2lvbiAqLw0KLS8qIC0tLS0tLS0tIENBTl9NSUQgOiAoQ0FOX01CIE9mZnNldDogMHg4KSBDQU4gTWVzc2FnZSBJRCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIENBTl9NRklEIDogKENBTl9NQiBPZmZzZXQ6IDB4YykgQ0FOIE1lc3NhZ2UgRmFtaWx5IElEIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQ0FOX01TUiA6IChDQU5fTUIgT2Zmc2V0OiAweDEwKSBDQU4gTWVzc2FnZSBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NVElNRVNUQU1QICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGRkYgPDwgMCApIC8qIChDQU5fTUIpIFRpbWVyIFZhbHVlICovDQotI2RlZmluZSBBVDkxQ19DQU5fTURMQyAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGIDw8IDE2ICkgICAvKiAoQ0FOX01CKSBNYWlsYm94IERhdGEgTGVuZ3RoIENvZGUgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NUlRSICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjAgKSAgIC8qIChDQU5fTUIpIE1haWxib3ggUmVtb3RlIFRyYW5zbWlzc2lvbiBSZXF1ZXN0ICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUFCVCAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIyICkgICAvKiAoQ0FOX01CKSBNYWlsYm94IE1lc3NhZ2UgQWJvcnQgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NUkRZICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjMgKSAgIC8qIChDQU5fTUIpIE1haWxib3ggUmVhZHkgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NTUkgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjQgKSAgIC8qIChDQU5fTUIpIE1haWxib3ggTWVzc2FnZSBJZ25vcmVkICovDQotLyogLS0tLS0tLS0gQ0FOX01ETCA6IChDQU5fTUIgT2Zmc2V0OiAweDE0KSBDQU4gTWVzc2FnZSBEYXRhIExvdyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIENBTl9NREggOiAoQ0FOX01CIE9mZnNldDogMHgxOCkgQ0FOIE1lc3NhZ2UgRGF0YSBIaWdoIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQ0FOX01DUiA6IChDQU5fTUIgT2Zmc2V0OiAweDFjKSBDQU4gTWVzc2FnZSBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUFDUiAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIyICkgLyogKENBTl9NQikgQWJvcnQgUmVxdWVzdCBmb3IgTWFpbGJveCAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01UQ1IgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyMyApIC8qIChDQU5fTUIpIE1haWxib3ggVHJhbnNmZXIgQ29tbWFuZCAqLw0KKy8vIC0tLS0tLS0tIENBTl9NTVIgOiAoQ0FOX01CIE9mZnNldDogMHgwKSBDQU4gTWVzc2FnZSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01USU1FTUFSSyAgICgodW5zaWduZWQgaW50KSAweEZGRkYgPDwgIDApIC8vIChDQU5fTUIpIE1haWxib3ggVGltZW1hcmsNCisjZGVmaW5lIEFUOTFDX0NBTl9QUklPUiAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8IDE2KSAvLyAoQ0FOX01CKSBNYWlsYm94IFByaW9yaXR5DQorI2RlZmluZSBBVDkxQ19DQU5fTU9UICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAyNCkgLy8gKENBTl9NQikgTWFpbGJveCBPYmplY3QgVHlwZQ0KKyNkZWZpbmUgCUFUOTFDX0NBTl9NT1RfRElTICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAyNCkgLy8gKENBTl9NQikgDQorI2RlZmluZSAJQVQ5MUNfQ0FOX01PVF9SWCAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI0KSAvLyAoQ0FOX01CKSANCisjZGVmaW5lIAlBVDkxQ19DQU5fTU9UX1JYT1ZFUldSSVRFICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMjQpIC8vIChDQU5fTUIpIA0KKyNkZWZpbmUgCUFUOTFDX0NBTl9NT1RfVFggICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyNCkgLy8gKENBTl9NQikgDQorI2RlZmluZSAJQVQ5MUNfQ0FOX01PVF9DT05TVU1FUiAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg0IDw8IDI0KSAvLyAoQ0FOX01CKSANCisjZGVmaW5lIAlBVDkxQ19DQU5fTU9UX1BST0RVQ0VSICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDUgPDwgMjQpIC8vIChDQU5fTUIpIA0KKy8vIC0tLS0tLS0tIENBTl9NQU0gOiAoQ0FOX01CIE9mZnNldDogMHg0KSBDQU4gTWVzc2FnZSBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DQU5fTUlEdkIgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4M0ZGRkYgPDwgIDApIC8vIChDQU5fTUIpIENvbXBsZW1lbnRhcnkgYml0cyBmb3IgaWRlbnRpZmllciBpbiBleHRlbmRlZCBtb2RlDQorI2RlZmluZSBBVDkxQ19DQU5fTUlEdkEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4N0ZGIDw8IDE4KSAvLyAoQ0FOX01CKSBJZGVudGlmaWVyIGZvciBzdGFuZGFyZCBmcmFtZSBtb2RlDQorI2RlZmluZSBBVDkxQ19DQU5fTUlERSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyOSkgLy8gKENBTl9NQikgSWRlbnRpZmllciBWZXJzaW9uDQorLy8gLS0tLS0tLS0gQ0FOX01JRCA6IChDQU5fTUIgT2Zmc2V0OiAweDgpIENBTiBNZXNzYWdlIElEIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIENBTl9NRklEIDogKENBTl9NQiBPZmZzZXQ6IDB4YykgQ0FOIE1lc3NhZ2UgRmFtaWx5IElEIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIENBTl9NU1IgOiAoQ0FOX01CIE9mZnNldDogMHgxMCkgQ0FOIE1lc3NhZ2UgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01USU1FU1RBTVAgICgodW5zaWduZWQgaW50KSAweEZGRkYgPDwgIDApIC8vIChDQU5fTUIpIFRpbWVyIFZhbHVlDQorI2RlZmluZSBBVDkxQ19DQU5fTURMQyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAxNikgLy8gKENBTl9NQikgTWFpbGJveCBEYXRhIExlbmd0aCBDb2RlDQorI2RlZmluZSBBVDkxQ19DQU5fTVJUUiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMCkgLy8gKENBTl9NQikgTWFpbGJveCBSZW1vdGUgVHJhbnNtaXNzaW9uIFJlcXVlc3QNCisjZGVmaW5lIEFUOTFDX0NBTl9NQUJUICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIyKSAvLyAoQ0FOX01CKSBNYWlsYm94IE1lc3NhZ2UgQWJvcnQNCisjZGVmaW5lIEFUOTFDX0NBTl9NUkRZICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIzKSAvLyAoQ0FOX01CKSBNYWlsYm94IFJlYWR5DQorI2RlZmluZSBBVDkxQ19DQU5fTU1JICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNCkgLy8gKENBTl9NQikgTWFpbGJveCBNZXNzYWdlIElnbm9yZWQNCisvLyAtLS0tLS0tLSBDQU5fTURMIDogKENBTl9NQiBPZmZzZXQ6IDB4MTQpIENBTiBNZXNzYWdlIERhdGEgTG93IFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIENBTl9NREggOiAoQ0FOX01CIE9mZnNldDogMHgxOCkgQ0FOIE1lc3NhZ2UgRGF0YSBIaWdoIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIENBTl9NQ1IgOiAoQ0FOX01CIE9mZnNldDogMHgxYykgQ0FOIE1lc3NhZ2UgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0NBTl9NQUNSICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIyKSAvLyAoQ0FOX01CKSBBYm9ydCBSZXF1ZXN0IGZvciBNYWlsYm94DQorI2RlZmluZSBBVDkxQ19DQU5fTVRDUiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMykgLy8gKENBTl9NQikgTWFpbGJveCBUcmFuc2ZlciBDb21tYW5kDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBDb250cm9sIEFyZWEgTmV0d29yayBJbnRlcmZhY2UgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLXR5cGVkZWYgc3RydWN0IF9BVDkxU19DQU4NCi17DQotICAgIEFUOTFfUkVHIENBTl9NUjsgICAgICAgICAgLyogTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBDQU5fSUVSOyAgICAgICAgIC8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQ0FOX0lEUjsgICAgICAgICAvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBDQU5fSU1SOyAgICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIENBTl9TUjsgICAgICAgICAgLyogU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIENBTl9CUjsgICAgICAgICAgLyogQmF1ZHJhdGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQ0FOX1RJTTsgICAgICAgICAvKiBUaW1lciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBDQU5fVElNRVNUUDsgICAgIC8qIFRpbWUgU3RhbXAgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQ0FOX0VDUjsgICAgICAgICAvKiBFcnJvciBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIENBTl9UQ1I7ICAgICAgICAgLyogVHJhbnNmZXIgQ29tbWFuZCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBDQU5fQUNSOyAgICAgICAgIC8qIEFib3J0IENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQwWyA1MiBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBDQU5fVlI7ICAgICAgICAgIC8qIFZlcnNpb24gUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQxWyA2NCBdOyAvKiAqLw0KLSAgICBBVDkxU19DQU5fTUIgQ0FOX01CMDsgICAgIC8qIENBTiBNYWlsYm94IDAgKi8NCi0gICAgQVQ5MVNfQ0FOX01CIENBTl9NQjE7ICAgICAvKiBDQU4gTWFpbGJveCAxICovDQotICAgIEFUOTFTX0NBTl9NQiBDQU5fTUIyOyAgICAgLyogQ0FOIE1haWxib3ggMiAqLw0KLSAgICBBVDkxU19DQU5fTUIgQ0FOX01CMzsgICAgIC8qIENBTiBNYWlsYm94IDMgKi8NCi0gICAgQVQ5MVNfQ0FOX01CIENBTl9NQjQ7ICAgICAvKiBDQU4gTWFpbGJveCA0ICovDQotICAgIEFUOTFTX0NBTl9NQiBDQU5fTUI1OyAgICAgLyogQ0FOIE1haWxib3ggNSAqLw0KLSAgICBBVDkxU19DQU5fTUIgQ0FOX01CNjsgICAgIC8qIENBTiBNYWlsYm94IDYgKi8NCi0gICAgQVQ5MVNfQ0FOX01CIENBTl9NQjc7ICAgICAvKiBDQU4gTWFpbGJveCA3ICovDQotICAgIEFUOTFTX0NBTl9NQiBDQU5fTUI4OyAgICAgLyogQ0FOIE1haWxib3ggOCAqLw0KLSAgICBBVDkxU19DQU5fTUIgQ0FOX01COTsgICAgIC8qIENBTiBNYWlsYm94IDkgKi8NCi0gICAgQVQ5MVNfQ0FOX01CIENBTl9NQjEwOyAgICAvKiBDQU4gTWFpbGJveCAxMCAqLw0KLSAgICBBVDkxU19DQU5fTUIgQ0FOX01CMTE7ICAgIC8qIENBTiBNYWlsYm94IDExICovDQotICAgIEFUOTFTX0NBTl9NQiBDQU5fTUIxMjsgICAgLyogQ0FOIE1haWxib3ggMTIgKi8NCi0gICAgQVQ5MVNfQ0FOX01CIENBTl9NQjEzOyAgICAvKiBDQU4gTWFpbGJveCAxMyAqLw0KLSAgICBBVDkxU19DQU5fTUIgQ0FOX01CMTQ7ICAgIC8qIENBTiBNYWlsYm94IDE0ICovDQotICAgIEFUOTFTX0NBTl9NQiBDQU5fTUIxNTsgICAgLyogQ0FOIE1haWxib3ggMTUgKi8NCi19IEFUOTFTX0NBTiwgKiBBVDkxUFNfQ0FOOw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQ29udHJvbCBBcmVhIE5ldHdvcmsgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfQ0FOIHsNCisJQVQ5MV9SRUcJIENBTl9NUjsgCS8vIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIENBTl9JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBDQU5fSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIENBTl9JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0FOX1NSOyAJLy8gU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBDQU5fQlI7IAkvLyBCYXVkcmF0ZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0FOX1RJTTsgCS8vIFRpbWVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBDQU5fVElNRVNUUDsgCS8vIFRpbWUgU3RhbXAgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIENBTl9FQ1I7IAkvLyBFcnJvciBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBDQU5fVENSOyAJLy8gVHJhbnNmZXIgQ29tbWFuZCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0FOX0FDUjsgCS8vIEFib3J0IENvbW1hbmQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFs1Ml07IAkvLyANCisJQVQ5MV9SRUcJIENBTl9WUjsgCS8vIFZlcnNpb24gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMVs2NF07IAkvLyANCisJQVQ5MVNfQ0FOX01CCSBDQU5fTUIwOyAJLy8gQ0FOIE1haWxib3ggMA0KKwlBVDkxU19DQU5fTUIJIENBTl9NQjE7IAkvLyBDQU4gTWFpbGJveCAxDQorCUFUOTFTX0NBTl9NQgkgQ0FOX01CMjsgCS8vIENBTiBNYWlsYm94IDINCisJQVQ5MVNfQ0FOX01CCSBDQU5fTUIzOyAJLy8gQ0FOIE1haWxib3ggMw0KKwlBVDkxU19DQU5fTUIJIENBTl9NQjQ7IAkvLyBDQU4gTWFpbGJveCA0DQorCUFUOTFTX0NBTl9NQgkgQ0FOX01CNTsgCS8vIENBTiBNYWlsYm94IDUNCisJQVQ5MVNfQ0FOX01CCSBDQU5fTUI2OyAJLy8gQ0FOIE1haWxib3ggNg0KKwlBVDkxU19DQU5fTUIJIENBTl9NQjc7IAkvLyBDQU4gTWFpbGJveCA3DQorCUFUOTFTX0NBTl9NQgkgQ0FOX01CODsgCS8vIENBTiBNYWlsYm94IDgNCisJQVQ5MVNfQ0FOX01CCSBDQU5fTUI5OyAJLy8gQ0FOIE1haWxib3ggOQ0KKwlBVDkxU19DQU5fTUIJIENBTl9NQjEwOyAJLy8gQ0FOIE1haWxib3ggMTANCisJQVQ5MVNfQ0FOX01CCSBDQU5fTUIxMTsgCS8vIENBTiBNYWlsYm94IDExDQorCUFUOTFTX0NBTl9NQgkgQ0FOX01CMTI7IAkvLyBDQU4gTWFpbGJveCAxMg0KKwlBVDkxU19DQU5fTUIJIENBTl9NQjEzOyAJLy8gQ0FOIE1haWxib3ggMTMNCisJQVQ5MVNfQ0FOX01CCSBDQU5fTUIxNDsgCS8vIENBTiBNYWlsYm94IDE0DQorCUFUOTFTX0NBTl9NQgkgQ0FOX01CMTU7IAkvLyBDQU4gTWFpbGJveCAxNQ0KK30gQVQ5MVNfQ0FOLCAqQVQ5MVBTX0NBTjsNCiANCi0vKiAtLS0tLS0tLSBDQU5fTVIgOiAoQ0FOIE9mZnNldDogMHgwKSBDQU4gTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX0NBTkVOICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgLyogKENBTikgQ0FOIENvbnRyb2xsZXIgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19DQU5fTFBNICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAvKiAoQ0FOKSBEaXNhYmxlL0VuYWJsZSBMb3cgUG93ZXIgTW9kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX0FCTSAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAgLyogKENBTikgRGlzYWJsZS9FbmFibGUgQXV0b2JhdWQvTGlzdGVuIE1vZGUgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9PVkwgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzICkgIC8qIChDQU4pIERpc2FibGUvRW5hYmxlIE92ZXJsb2FkIEZyYW1lICovDQotI2RlZmluZSBBVDkxQ19DQU5fVEVPRiAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNCApICAvKiAoQ0FOKSBUaW1lIFN0YW1wIG1lc3NhZ2VzIGF0IGVhY2ggZW5kIG9mIEZyYW1lICovDQotI2RlZmluZSBBVDkxQ19DQU5fVFRNICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNSApICAvKiAoQ0FOKSBEaXNhYmxlL0VuYWJsZSBUaW1lIFRyaWdnZXIgTW9kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1RJTUZSWiAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDYgKSAgLyogKENBTikgRW5hYmxlIFRpbWVyIEZyZWV6ZSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX0RSUFQgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDcgKSAgLyogKENBTikgRGlzYWJsZSBSZXBlYXQgKi8NCi0vKiAtLS0tLS0tLSBDQU5fSUVSIDogKENBTiBPZmZzZXQ6IDB4NCkgQ0FOIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgIC8qIChDQU4pIE1haWxib3ggMCBGbGFnICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIxICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAvKiAoQ0FOKSBNYWlsYm94IDEgRmxhZyAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMiAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAgLyogKENBTikgTWFpbGJveCAyIEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjMgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzICkgIC8qIChDQU4pIE1haWxib3ggMyBGbGFnICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI0ICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNCApICAvKiAoQ0FOKSBNYWlsYm94IDQgRmxhZyAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CNSAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDUgKSAgLyogKENBTikgTWFpbGJveCA1IEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjYgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA2ICkgIC8qIChDQU4pIE1haWxib3ggNiBGbGFnICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI3ICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNyApICAvKiAoQ0FOKSBNYWlsYm94IDcgRmxhZyAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01COCAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDggKSAgLyogKENBTikgTWFpbGJveCA4IEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjkgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA5ICkgIC8qIChDQU4pIE1haWxib3ggOSBGbGFnICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIxMCAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTAgKSAvKiAoQ0FOKSBNYWlsYm94IDEwIEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjExICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMSApIC8qIChDQU4pIE1haWxib3ggMTEgRmxhZyAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMTIgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEyICkgLyogKENBTikgTWFpbGJveCAxMiBGbGFnICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIxMyAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTMgKSAvKiAoQ0FOKSBNYWlsYm94IDEzIEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjE0ICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNCApIC8qIChDQU4pIE1haWxib3ggMTQgRmxhZyAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMTUgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE1ICkgLyogKENBTikgTWFpbGJveCAxNSBGbGFnICovDQotI2RlZmluZSBBVDkxQ19DQU5fRVJSQSAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTYgKSAvKiAoQ0FOKSBFcnJvciBBY3RpdmUgTW9kZSBGbGFnICovDQotI2RlZmluZSBBVDkxQ19DQU5fV0FSTiAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTcgKSAvKiAoQ0FOKSBXYXJuaW5nIExpbWl0IEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9FUlJQICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxOCApIC8qIChDQU4pIEVycm9yIFBhc3NpdmUgTW9kZSBGbGFnICovDQotI2RlZmluZSBBVDkxQ19DQU5fQk9GRiAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTkgKSAvKiAoQ0FOKSBCdXMgT2ZmIE1vZGUgRmxhZyAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1NMRUVQICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIwICkgLyogKENBTikgU2xlZXAgRmxhZyAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1dBS0VVUCAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIxICkgLyogKENBTikgV2FrZXVwIEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9UT1ZGICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyMiApIC8qIChDQU4pIFRpbWVyIE92ZXJmbG93IEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9UU1RQICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyMyApIC8qIChDQU4pIFRpbWVzdGFtcCBGbGFnICovDQotI2RlZmluZSBBVDkxQ19DQU5fQ0VSUiAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjQgKSAvKiAoQ0FOKSBDUkMgRXJyb3IgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9TRVJSICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyNSApIC8qIChDQU4pIFN0dWZmaW5nIEVycm9yICovDQotI2RlZmluZSBBVDkxQ19DQU5fQUVSUiAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjYgKSAvKiAoQ0FOKSBBY2tub3dsZWRnbWVudCBFcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX0ZFUlIgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDI3ICkgLyogKENBTikgRm9ybSBFcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX0JFUlIgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDI4ICkgLyogKENBTikgQml0IEVycm9yICovDQotLyogLS0tLS0tLS0gQ0FOX0lEUiA6IChDQU4gT2Zmc2V0OiAweDgpIENBTiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIENBTl9JTVIgOiAoQ0FOIE9mZnNldDogMHhjKSBDQU4gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBDQU5fU1IgOiAoQ0FOIE9mZnNldDogMHgxMCkgQ0FOIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1JCU1kgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDI5ICkgICAvKiAoQ0FOKSBSZWNlaXZlciBCdXN5ICovDQotI2RlZmluZSBBVDkxQ19DQU5fVEJTWSAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMzAgKSAgIC8qIChDQU4pIFRyYW5zbWl0dGVyIEJ1c3kgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9PVkxZICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzMSApICAgLyogKENBTikgT3ZlcmxvYWQgQnVzeSAqLw0KLS8qIC0tLS0tLS0tIENBTl9CUiA6IChDQU4gT2Zmc2V0OiAweDE0KSBDQU4gQmF1ZHJhdGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9QSEFTRTIgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NyA8PCAwICkgICAgLyogKENBTikgUGhhc2UgMiBzZWdtZW50ICovDQotI2RlZmluZSBBVDkxQ19DQU5fUEhBU0UxICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDcgPDwgNCApICAgIC8qIChDQU4pIFBoYXNlIDEgc2VnbWVudCAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1BST1BBRyAgICAoICggdW5zaWduZWQgaW50ICkgMHg3IDw8IDggKSAgICAvKiAoQ0FOKSBQcm9ncmFtbWF0aW9uIHRpbWUgc2VnbWVudCAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1NZTkMgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDEyICkgICAvKiAoQ0FOKSBSZS1zeW5jaHJvbml6YXRpb24ganVtcCB3aWR0aCBzZWdtZW50ICovDQotI2RlZmluZSBBVDkxQ19DQU5fQlJQICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDdGIDw8IDE2ICkgIC8qIChDQU4pIEJhdWRyYXRlIFByZXNjYWxlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1NNUCAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDI0ICkgICAvKiAoQ0FOKSBTYW1wbGluZyBtb2RlICovDQotLyogLS0tLS0tLS0gQ0FOX1RJTSA6IChDQU4gT2Zmc2V0OiAweDE4KSBDQU4gVGltZXIgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9USU1FUiAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RkZGRiA8PCAwICkgLyogKENBTikgVGltZXIgZmllbGQgKi8NCi0vKiAtLS0tLS0tLSBDQU5fVElNRVNUUCA6IChDQU4gT2Zmc2V0OiAweDFjKSBDQU4gVGltZXN0YW1wIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQ0FOX0VDUiA6IChDQU4gT2Zmc2V0OiAweDIwKSBDQU4gRXJyb3IgQ291bnRlciBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1JFQyAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRiA8PCAwICkgIC8qIChDQU4pIFJlY2VpdmUgRXJyb3IgQ291bnRlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1RFQyAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRiA8PCAxNiApIC8qIChDQU4pIFRyYW5zbWl0IEVycm9yIENvdW50ZXIgKi8NCi0vKiAtLS0tLS0tLSBDQU5fVENSIDogKENBTiBPZmZzZXQ6IDB4MjQpIENBTiBUcmFuc2ZlciBDb21tYW5kIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19DQU5fVElNUlNUICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMzEgKSAgLyogKENBTikgVGltZXIgUmVzZXQgRmllbGQgKi8NCi0vKiAtLS0tLS0tLSBDQU5fQUNSIDogKENBTiBPZmZzZXQ6IDB4MjgpIENBTiBBYm9ydCBDb21tYW5kIFJlZ2lzdGVyIC0tLS0tLS0tICovDQorLy8gLS0tLS0tLS0gQ0FOX01SIDogKENBTiBPZmZzZXQ6IDB4MCkgQ0FOIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DQU5fQ0FORU4gICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKENBTikgQ0FOIENvbnRyb2xsZXIgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19DQU5fTFBNICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKENBTikgRGlzYWJsZS9FbmFibGUgTG93IFBvd2VyIE1vZGUNCisjZGVmaW5lIEFUOTFDX0NBTl9BQk0gICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoQ0FOKSBEaXNhYmxlL0VuYWJsZSBBdXRvYmF1ZC9MaXN0ZW4gTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX09WTCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChDQU4pIERpc2FibGUvRW5hYmxlIE92ZXJsb2FkIEZyYW1lDQorI2RlZmluZSBBVDkxQ19DQU5fVEVPRiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKENBTikgVGltZSBTdGFtcCBtZXNzYWdlcyBhdCBlYWNoIGVuZCBvZiBGcmFtZQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1RUTSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChDQU4pIERpc2FibGUvRW5hYmxlIFRpbWUgVHJpZ2dlciBNb2RlDQorI2RlZmluZSBBVDkxQ19DQU5fVElNRlJaICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLy8gKENBTikgRW5hYmxlIFRpbWVyIEZyZWV6ZQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0RSUFQgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChDQU4pIERpc2FibGUgUmVwZWF0DQorLy8gLS0tLS0tLS0gQ0FOX0lFUiA6IChDQU4gT2Zmc2V0OiAweDQpIENBTiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChDQU4pIE1haWxib3ggMCBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKENBTikgTWFpbGJveCAxIEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9NQjIgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoQ0FOKSBNYWlsYm94IDIgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChDQU4pIE1haWxib3ggMyBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUI0ICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKENBTikgTWFpbGJveCA0IEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9NQjUgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoQ0FOKSBNYWlsYm94IDUgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNiAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChDQU4pIE1haWxib3ggNiBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUI3ICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKENBTikgTWFpbGJveCA3IEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9NQjggICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoQ0FOKSBNYWlsYm94IDggRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01COSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChDQU4pIE1haWxib3ggOSBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxMCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLy8gKENBTikgTWFpbGJveCAxMCBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxMSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMSkgLy8gKENBTikgTWFpbGJveCAxMSBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxMiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLy8gKENBTikgTWFpbGJveCAxMiBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxMyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMykgLy8gKENBTikgTWFpbGJveCAxMyBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxNCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNCkgLy8gKENBTikgTWFpbGJveCAxNCBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxNSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNSkgLy8gKENBTikgTWFpbGJveCAxNSBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fRVJSQSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKENBTikgRXJyb3IgQWN0aXZlIE1vZGUgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1dBUk4gICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTcpIC8vIChDQU4pIFdhcm5pbmcgTGltaXQgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0VSUlAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTgpIC8vIChDQU4pIEVycm9yIFBhc3NpdmUgTW9kZSBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fQk9GRiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOSkgLy8gKENBTikgQnVzIE9mZiBNb2RlIEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9TTEVFUCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIwKSAvLyAoQ0FOKSBTbGVlcCBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fV0FLRVVQICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMSkgLy8gKENBTikgV2FrZXVwIEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9UT1ZGICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIyKSAvLyAoQ0FOKSBUaW1lciBPdmVyZmxvdyBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fVFNUUCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMykgLy8gKENBTikgVGltZXN0YW1wIEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9DRVJSICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI0KSAvLyAoQ0FOKSBDUkMgRXJyb3INCisjZGVmaW5lIEFUOTFDX0NBTl9TRVJSICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI1KSAvLyAoQ0FOKSBTdHVmZmluZyBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0FFUlIgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjYpIC8vIChDQU4pIEFja25vd2xlZGdtZW50IEVycm9yDQorI2RlZmluZSBBVDkxQ19DQU5fRkVSUiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNykgLy8gKENBTikgRm9ybSBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0JFUlIgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjgpIC8vIChDQU4pIEJpdCBFcnJvcg0KKy8vIC0tLS0tLS0tIENBTl9JRFIgOiAoQ0FOIE9mZnNldDogMHg4KSBDQU4gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQ0FOX0lNUiA6IChDQU4gT2Zmc2V0OiAweGMpIENBTiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBDQU5fU1IgOiAoQ0FOIE9mZnNldDogMHgxMCkgQ0FOIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0NBTl9SQlNZICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI5KSAvLyAoQ0FOKSBSZWNlaXZlciBCdXN5DQorI2RlZmluZSBBVDkxQ19DQU5fVEJTWSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAzMCkgLy8gKENBTikgVHJhbnNtaXR0ZXIgQnVzeQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX09WTFkgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMzEpIC8vIChDQU4pIE92ZXJsb2FkIEJ1c3kNCisvLyAtLS0tLS0tLSBDQU5fQlIgOiAoQ0FOIE9mZnNldDogMHgxNCkgQ0FOIEJhdWRyYXRlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1BIQVNFMiAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgIDApIC8vIChDQU4pIFBoYXNlIDIgc2VnbWVudA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1BIQVNFMSAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgIDQpIC8vIChDQU4pIFBoYXNlIDEgc2VnbWVudA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1BST1BBRyAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgIDgpIC8vIChDQU4pIFByb2dyYW1tYXRpb24gdGltZSBzZWdtZW50DQorI2RlZmluZSBBVDkxQ19DQU5fU1lOQyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxMikgLy8gKENBTikgUmUtc3luY2hyb25pemF0aW9uIGp1bXAgd2lkdGggc2VnbWVudA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0JSUCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDdGIDw8IDE2KSAvLyAoQ0FOKSBCYXVkcmF0ZSBQcmVzY2FsZXINCisjZGVmaW5lIEFUOTFDX0NBTl9TTVAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI0KSAvLyAoQ0FOKSBTYW1wbGluZyBtb2RlDQorLy8gLS0tLS0tLS0gQ0FOX1RJTSA6IChDQU4gT2Zmc2V0OiAweDE4KSBDQU4gVGltZXIgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DQU5fVElNRVIgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGRiA8PCAgMCkgLy8gKENBTikgVGltZXIgZmllbGQNCisvLyAtLS0tLS0tLSBDQU5fVElNRVNUUCA6IChDQU4gT2Zmc2V0OiAweDFjKSBDQU4gVGltZXN0YW1wIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIENBTl9FQ1IgOiAoQ0FOIE9mZnNldDogMHgyMCkgQ0FOIEVycm9yIENvdW50ZXIgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DQU5fUkVDICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgIDApIC8vIChDQU4pIFJlY2VpdmUgRXJyb3IgQ291bnRlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1RFQyAgICAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8IDE2KSAvLyAoQ0FOKSBUcmFuc21pdCBFcnJvciBDb3VudGVyDQorLy8gLS0tLS0tLS0gQ0FOX1RDUiA6IChDQU4gT2Zmc2V0OiAweDI0KSBDQU4gVHJhbnNmZXIgQ29tbWFuZCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0NBTl9USU1SU1QgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDMxKSAvLyAoQ0FOKSBUaW1lciBSZXNldCBGaWVsZA0KKy8vIC0tLS0tLS0tIENBTl9BQ1IgOiAoQ0FOIE9mZnNldDogMHgyOCkgQ0FOIEFib3J0IENvbW1hbmQgUmVnaXN0ZXIgLS0tLS0tLS0gDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBFdGhlcm5ldCBNQUMgMTAvMTAwICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfRU1BQw0KLXsNCi0gICAgQVQ5MV9SRUcgRU1BQ19OQ1I7ICAgICAgICAvKiBOZXR3b3JrIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19OQ0ZHUjsgICAgICAvKiBOZXR3b3JrIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19OU1I7ICAgICAgICAvKiBOZXR3b3JrIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDBbIDIgXTsgIC8qICovDQotICAgIEFUOTFfUkVHIEVNQUNfVFNSOyAgICAgICAgLyogVHJhbnNtaXQgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfUkJRUDsgICAgICAgLyogUmVjZWl2ZSBCdWZmZXIgUXVldWUgUG9pbnRlciAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX1RCUVA7ICAgICAgIC8qIFRyYW5zbWl0IEJ1ZmZlciBRdWV1ZSBQb2ludGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfUlNSOyAgICAgICAgLyogUmVjZWl2ZSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19JU1I7ICAgICAgICAvKiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfSUVSOyAgICAgICAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX0lEUjsgICAgICAgIC8qIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfSU1SOyAgICAgICAgLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19NQU47ICAgICAgICAvKiBQSFkgTWFpbnRlbmFuY2UgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19QVFI7ICAgICAgICAvKiBQYXVzZSBUaW1lIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfUEZSOyAgICAgICAgLyogUGF1c2UgRnJhbWVzIHJlY2VpdmVkIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfRlRPOyAgICAgICAgLyogRnJhbWVzIFRyYW5zbWl0dGVkIE9LIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfU0NGOyAgICAgICAgLyogU2luZ2xlIENvbGxpc2lvbiBGcmFtZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX01DRjsgICAgICAgIC8qIE11bHRpcGxlIENvbGxpc2lvbiBGcmFtZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX0ZSTzsgICAgICAgIC8qIEZyYW1lcyBSZWNlaXZlZCBPSyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX0ZDU0U7ICAgICAgIC8qIEZyYW1lIENoZWNrIFNlcXVlbmNlIEVycm9yIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfQUxFOyAgICAgICAgLyogQWxpZ25tZW50IEVycm9yIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfRFRGOyAgICAgICAgLyogRGVmZXJyZWQgVHJhbnNtaXNzaW9uIEZyYW1lIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfTENPTDsgICAgICAgLyogTGF0ZSBDb2xsaXNpb24gUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19FQ09MOyAgICAgICAvKiBFeGNlc3NpdmUgQ29sbGlzaW9uIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfVFVORDsgICAgICAgLyogVHJhbnNtaXQgVW5kZXJydW4gRXJyb3IgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19DU0U7ICAgICAgICAvKiBDYXJyaWVyIFNlbnNlIEVycm9yIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfUlJFOyAgICAgICAgLyogUmVjZWl2ZSBSZXNzb3VyY2UgRXJyb3IgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19ST1Y7ICAgICAgICAvKiBSZWNlaXZlIE92ZXJydW4gRXJyb3JzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfUlNFOyAgICAgICAgLyogUmVjZWl2ZSBTeW1ib2wgRXJyb3JzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfRUxFOyAgICAgICAgLyogRXhjZXNzaXZlIExlbmd0aCBFcnJvcnMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19SSkE7ICAgICAgICAvKiBSZWNlaXZlIEphYmJlcnMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19VU0Y7ICAgICAgICAvKiBVbmRlcnNpemUgRnJhbWVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfU1RFOyAgICAgICAgLyogU1FFIFRlc3QgRXJyb3IgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19STEU7ICAgICAgICAvKiBSZWNlaXZlIExlbmd0aCBGaWVsZCBNaXNtYXRjaCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX1RQRjsgICAgICAgIC8qIFRyYW5zbWl0dGVkIFBhdXNlIEZyYW1lcyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX0hSQjsgICAgICAgIC8qIEhhc2ggQWRkcmVzcyBCb3R0b21bMzE6MF0gKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19IUlQ7ICAgICAgICAvKiBIYXNoIEFkZHJlc3MgVG9wWzYzOjMyXSAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX1NBMUw7ICAgICAgIC8qIFNwZWNpZmljIEFkZHJlc3MgMSBCb3R0b20sIEZpcnN0IDQgYnl0ZXMgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19TQTFIOyAgICAgICAvKiBTcGVjaWZpYyBBZGRyZXNzIDEgVG9wLCBMYXN0IDIgYnl0ZXMgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19TQTJMOyAgICAgICAvKiBTcGVjaWZpYyBBZGRyZXNzIDIgQm90dG9tLCBGaXJzdCA0IGJ5dGVzICovDQotICAgIEFUOTFfUkVHIEVNQUNfU0EySDsgICAgICAgLyogU3BlY2lmaWMgQWRkcmVzcyAyIFRvcCwgTGFzdCAyIGJ5dGVzICovDQotICAgIEFUOTFfUkVHIEVNQUNfU0EzTDsgICAgICAgLyogU3BlY2lmaWMgQWRkcmVzcyAzIEJvdHRvbSwgRmlyc3QgNCBieXRlcyAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX1NBM0g7ICAgICAgIC8qIFNwZWNpZmljIEFkZHJlc3MgMyBUb3AsIExhc3QgMiBieXRlcyAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX1NBNEw7ICAgICAgIC8qIFNwZWNpZmljIEFkZHJlc3MgNCBCb3R0b20sIEZpcnN0IDQgYnl0ZXMgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19TQTRIOyAgICAgICAvKiBTcGVjaWZpYyBBZGRyZXNzIDQgVG9wLCBMYXN0IDIgYnl0ZXMgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19USUQ7ICAgICAgICAvKiBUeXBlIElEIENoZWNraW5nIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfVFBROyAgICAgICAgLyogVHJhbnNtaXQgUGF1c2UgUXVhbnR1bSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX1VTUklPOyAgICAgIC8qIFVTRVIgSW5wdXQvT3V0cHV0IFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfV09MOyAgICAgICAgLyogV2FrZSBPbiBMQU4gUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQxWyAxMyBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX1JFVjsgICAgICAgIC8qIFJldmlzaW9uIFJlZ2lzdGVyICovDQotfSBBVDkxU19FTUFDLCAqIEFUOTFQU19FTUFDOw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgRXRoZXJuZXQgTUFDIDEwLzEwMA0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX0VNQUMgew0KKwlBVDkxX1JFRwkgRU1BQ19OQ1I7IAkvLyBOZXR3b3JrIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfTkNGR1I7IAkvLyBOZXR3b3JrIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfTlNSOyAJLy8gTmV0d29yayBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFsyXTsgCS8vIA0KKwlBVDkxX1JFRwkgRU1BQ19UU1I7IAkvLyBUcmFuc21pdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfUkJRUDsgCS8vIFJlY2VpdmUgQnVmZmVyIFF1ZXVlIFBvaW50ZXINCisJQVQ5MV9SRUcJIEVNQUNfVEJRUDsgCS8vIFRyYW5zbWl0IEJ1ZmZlciBRdWV1ZSBQb2ludGVyDQorCUFUOTFfUkVHCSBFTUFDX1JTUjsgCS8vIFJlY2VpdmUgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX0lTUjsgCS8vIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19NQU47IAkvLyBQSFkgTWFpbnRlbmFuY2UgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfUFRSOyAJLy8gUGF1c2UgVGltZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19QRlI7IAkvLyBQYXVzZSBGcmFtZXMgcmVjZWl2ZWQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfRlRPOyAJLy8gRnJhbWVzIFRyYW5zbWl0dGVkIE9LIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX1NDRjsgCS8vIFNpbmdsZSBDb2xsaXNpb24gRnJhbWUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfTUNGOyAJLy8gTXVsdGlwbGUgQ29sbGlzaW9uIEZyYW1lIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX0ZSTzsgCS8vIEZyYW1lcyBSZWNlaXZlZCBPSyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19GQ1NFOyAJLy8gRnJhbWUgQ2hlY2sgU2VxdWVuY2UgRXJyb3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfQUxFOyAJLy8gQWxpZ25tZW50IEVycm9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX0RURjsgCS8vIERlZmVycmVkIFRyYW5zbWlzc2lvbiBGcmFtZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19MQ09MOyAJLy8gTGF0ZSBDb2xsaXNpb24gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfRUNPTDsgCS8vIEV4Y2Vzc2l2ZSBDb2xsaXNpb24gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfVFVORDsgCS8vIFRyYW5zbWl0IFVuZGVycnVuIEVycm9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX0NTRTsgCS8vIENhcnJpZXIgU2Vuc2UgRXJyb3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfUlJFOyAJLy8gUmVjZWl2ZSBSZXNzb3VyY2UgRXJyb3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfUk9WOyAJLy8gUmVjZWl2ZSBPdmVycnVuIEVycm9ycyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19SU0U7IAkvLyBSZWNlaXZlIFN5bWJvbCBFcnJvcnMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfRUxFOyAJLy8gRXhjZXNzaXZlIExlbmd0aCBFcnJvcnMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfUkpBOyAJLy8gUmVjZWl2ZSBKYWJiZXJzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX1VTRjsgCS8vIFVuZGVyc2l6ZSBGcmFtZXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfU1RFOyAJLy8gU1FFIFRlc3QgRXJyb3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfUkxFOyAJLy8gUmVjZWl2ZSBMZW5ndGggRmllbGQgTWlzbWF0Y2ggUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfVFBGOyAJLy8gVHJhbnNtaXR0ZWQgUGF1c2UgRnJhbWVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX0hSQjsgCS8vIEhhc2ggQWRkcmVzcyBCb3R0b21bMzE6MF0NCisJQVQ5MV9SRUcJIEVNQUNfSFJUOyAJLy8gSGFzaCBBZGRyZXNzIFRvcFs2MzozMl0NCisJQVQ5MV9SRUcJIEVNQUNfU0ExTDsgCS8vIFNwZWNpZmljIEFkZHJlc3MgMSBCb3R0b20sIEZpcnN0IDQgYnl0ZXMNCisJQVQ5MV9SRUcJIEVNQUNfU0ExSDsgCS8vIFNwZWNpZmljIEFkZHJlc3MgMSBUb3AsIExhc3QgMiBieXRlcw0KKwlBVDkxX1JFRwkgRU1BQ19TQTJMOyAJLy8gU3BlY2lmaWMgQWRkcmVzcyAyIEJvdHRvbSwgRmlyc3QgNCBieXRlcw0KKwlBVDkxX1JFRwkgRU1BQ19TQTJIOyAJLy8gU3BlY2lmaWMgQWRkcmVzcyAyIFRvcCwgTGFzdCAyIGJ5dGVzDQorCUFUOTFfUkVHCSBFTUFDX1NBM0w7IAkvLyBTcGVjaWZpYyBBZGRyZXNzIDMgQm90dG9tLCBGaXJzdCA0IGJ5dGVzDQorCUFUOTFfUkVHCSBFTUFDX1NBM0g7IAkvLyBTcGVjaWZpYyBBZGRyZXNzIDMgVG9wLCBMYXN0IDIgYnl0ZXMNCisJQVQ5MV9SRUcJIEVNQUNfU0E0TDsgCS8vIFNwZWNpZmljIEFkZHJlc3MgNCBCb3R0b20sIEZpcnN0IDQgYnl0ZXMNCisJQVQ5MV9SRUcJIEVNQUNfU0E0SDsgCS8vIFNwZWNpZmljIEFkZHJlc3MgNCBUb3AsIExhc3QgMiBieXRlcw0KKwlBVDkxX1JFRwkgRU1BQ19USUQ7IAkvLyBUeXBlIElEIENoZWNraW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX1RQUTsgCS8vIFRyYW5zbWl0IFBhdXNlIFF1YW50dW0gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfVVNSSU87IAkvLyBVU0VSIElucHV0L091dHB1dCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19XT0w7IAkvLyBXYWtlIE9uIExBTiBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzEzXTsgCS8vIA0KKwlBVDkxX1JFRwkgRU1BQ19SRVY7IAkvLyBSZXZpc2lvbiBSZWdpc3Rlcg0KK30gQVQ5MVNfRU1BQywgKkFUOTFQU19FTUFDOw0KIA0KLS8qIC0tLS0tLS0tIEVNQUNfTkNSIDogKEVNQUMgT2Zmc2V0OiAweDApICAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19MQiAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgLyogKEVNQUMpIExvb3BiYWNrLiBPcHRpb25hbC4gV2hlbiBzZXQsIGxvb3BiYWNrIHNpZ25hbCBpcyBhdCBoaWdoIGxldmVsLiAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19MTEIgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEgKSAgLyogKEVNQUMpIExvb3BiYWNrIGxvY2FsLiAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19SRSAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAgLyogKEVNQUMpIFJlY2VpdmUgZW5hYmxlLiAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19URSAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDMgKSAgLyogKEVNQUMpIFRyYW5zbWl0IGVuYWJsZS4gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfTVBFICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA0ICkgIC8qIChFTUFDKSBNYW5hZ2VtZW50IHBvcnQgZW5hYmxlLiAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19DTFJTVEFUICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDUgKSAgLyogKEVNQUMpIENsZWFyIHN0YXRpc3RpY3MgcmVnaXN0ZXJzLiAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19JTkNTVEFUICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDYgKSAgLyogKEVNQUMpIEluY3JlbWVudCBzdGF0aXN0aWNzIHJlZ2lzdGVycy4gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfV0VTVEFUICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA3ICkgIC8qIChFTUFDKSBXcml0ZSBlbmFibGUgZm9yIHN0YXRpc3RpY3MgcmVnaXN0ZXJzLiAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19CUCAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDggKSAgLyogKEVNQUMpIEJhY2sgcHJlc3N1cmUuICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1RTVEFSVCAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOSApICAvKiAoRU1BQykgU3RhcnQgVHJhbnNtaXNzaW9uLiAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19USEFMVCAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEwICkgLyogKEVNQUMpIFRyYW5zbWlzc2lvbiBIYWx0LiAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19UUEZSICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDExICkgLyogKEVNQUMpIFRyYW5zbWl0IHBhdXNlIGZyYW1lICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1RaUSAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTIgKSAvKiAoRU1BQykgVHJhbnNtaXQgemVybyBxdWFudHVtIHBhdXNlIGZyYW1lICovDQotLyogLS0tLS0tLS0gRU1BQ19OQ0ZHUiA6IChFTUFDIE9mZnNldDogMHg0KSBOZXR3b3JrIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfU1BEICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgIC8qIChFTUFDKSBTcGVlZC4gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfRkQgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgIC8qIChFTUFDKSBGdWxsIGR1cGxleC4gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfSkZSQU1FICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzICkgIC8qIChFTUFDKSBKdW1ibyBGcmFtZXMuICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0NBRiAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNCApICAvKiAoRU1BQykgQ29weSBhbGwgZnJhbWVzLiAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19OQkMgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDUgKSAgLyogKEVNQUMpIE5vIGJyb2FkY2FzdC4gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfTVRJICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA2ICkgIC8qIChFTUFDKSBNdWx0aWNhc3QgaGFzaCBldmVudCBlbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfVU5JICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA3ICkgIC8qIChFTUFDKSBVbmljYXN0IGhhc2ggZW5hYmxlLiAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19CSUcgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDggKSAgLyogKEVNQUMpIFJlY2VpdmUgMTUyMiBieXRlcy4gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfRUFFICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA5ICkgIC8qIChFTUFDKSBFeHRlcm5hbCBhZGRyZXNzIG1hdGNoIGVuYWJsZS4gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfQ0xLICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAxMCApIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0VNQUNfQ0xLX0hDTEtfOCAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDEwICkgLyogKEVNQUMpIEhDTEsgZGl2aWRlZCBieSA4ICovDQotI2RlZmluZSAgICAgQVQ5MUNfRU1BQ19DTEtfSENMS18xNiAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTAgKSAvKiAoRU1BQykgSENMSyBkaXZpZGVkIGJ5IDE2ICovDQotI2RlZmluZSAgICAgQVQ5MUNfRU1BQ19DTEtfSENMS18zMiAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgMTAgKSAvKiAoRU1BQykgSENMSyBkaXZpZGVkIGJ5IDMyICovDQotI2RlZmluZSAgICAgQVQ5MUNfRU1BQ19DTEtfSENMS182NCAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTAgKSAvKiAoRU1BQykgSENMSyBkaXZpZGVkIGJ5IDY0ICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1JUWSAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTIgKSAvKiAoRU1BQykgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfUEFFICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMyApIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19SQk9GICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDE0ICkgLyogKEVNQUMpICovDQotI2RlZmluZSAgICAgQVQ5MUNfRU1BQ19SQk9GX09GRlNFVF8wICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMTQgKSAvKiAoRU1BQykgbm8gb2Zmc2V0IGZyb20gc3RhcnQgb2YgcmVjZWl2ZSBidWZmZXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19FTUFDX1JCT0ZfT0ZGU0VUXzEgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNCApIC8qIChFTUFDKSBvbmUgYnl0ZSBvZmZzZXQgZnJvbSBzdGFydCBvZiByZWNlaXZlIGJ1ZmZlciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0VNQUNfUkJPRl9PRkZTRVRfMiAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDE0ICkgLyogKEVNQUMpIHR3byBieXRlcyBvZmZzZXQgZnJvbSBzdGFydCBvZiByZWNlaXZlIGJ1ZmZlciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0VNQUNfUkJPRl9PRkZTRVRfMyAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDE0ICkgLyogKEVNQUMpIHRocmVlIGJ5dGVzIG9mZnNldCBmcm9tIHN0YXJ0IG9mIHJlY2VpdmUgYnVmZmVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1JMQ0UgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTYgKSAvKiAoRU1BQykgUmVjZWl2ZSBMZW5ndGggZmllbGQgQ2hlY2tpbmcgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0RSRkNTICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTcgKSAvKiAoRU1BQykgRGlzY2FyZCBSZWNlaXZlIEZDUyAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19FRlJIRCAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE4ICkgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0lSWEZDUyAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTkgKSAvKiAoRU1BQykgSWdub3JlIFJYIEZDUyAqLw0KLS8qIC0tLS0tLS0tIEVNQUNfTlNSIDogKEVNQUMgT2Zmc2V0OiAweDgpIE5ldHdvcmsgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0xJTktSICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAvKiAoRU1BQykgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfTURJTyAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19JRExFICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAgLyogKEVNQUMpICovDQotLyogLS0tLS0tLS0gRU1BQ19UU1IgOiAoRU1BQyBPZmZzZXQ6IDB4MTQpIFRyYW5zbWl0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19VQlIgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0NPTCAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAvKiAoRU1BQykgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfUkxFUyAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyICkgIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19UR08gICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDMgKSAgLyogKEVNQUMpIFRyYW5zbWl0IEdvICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0JFWCAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNCApICAvKiAoRU1BQykgQnVmZmVycyBleGhhdXN0ZWQgbWlkIGZyYW1lICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0NPTVAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNSApICAvKiAoRU1BQykgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfVU5EICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA2ICkgIC8qIChFTUFDKSAqLw0KLS8qIC0tLS0tLS0tIEVNQUNfUlNSIDogKEVNQUMgT2Zmc2V0OiAweDIwKSBSZWNlaXZlIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19CTkEgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1JFQyAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAvKiAoRU1BQykgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfT1ZSICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyICkgIC8qIChFTUFDKSAqLw0KLS8qIC0tLS0tLS0tIEVNQUNfSVNSIDogKEVNQUMgT2Zmc2V0OiAweDI0KSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19FTUFDX01GRCAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAvKiAoRU1BQykgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfUkNPTVAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19SWFVCUiAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1RYVUJSICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMyApICAvKiAoRU1BQykgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfVFVORFIgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA0ICkgIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19STEVYICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDUgKSAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1RYRVJSICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNiApICAvKiAoRU1BQykgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfVENPTVAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA3ICkgIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19MSU5LICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDkgKSAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1JPVlIgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTAgKSAvKiAoRU1BQykgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfSFJFU1AgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMSApIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19QRlJFICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEyICkgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1BUWiAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTMgKSAvKiAoRU1BQykgKi8NCi0vKiAtLS0tLS0tLSBFTUFDX0lFUiA6IChFTUFDIE9mZnNldDogMHgyOCkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIEVNQUNfSURSIDogKEVNQUMgT2Zmc2V0OiAweDJjKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIEVNQUNfSU1SIDogKEVNQUMgT2Zmc2V0OiAweDMwKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIEVNQUNfTUFOIDogKEVNQUMgT2Zmc2V0OiAweDM0KSBQSFkgTWFpbnRlbmFuY2UgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfREFUQSAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRkZGIDw8IDAgKSAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0NPREUgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAxNiApICAgIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19SRUdBICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDFGIDw8IDE4ICkgICAvKiAoRU1BQykgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfUEhZQSAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxRiA8PCAyMyApICAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1JXICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAyOCApICAgIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19TT0YgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMzAgKSAgICAvKiAoRU1BQykgKi8NCi0vKiAtLS0tLS0tLSBFTUFDX1VTUklPIDogKEVNQUMgT2Zmc2V0OiAweGMwKSBVU0VSIElucHV0IE91dHB1dCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19STUlJICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgICAvKiAoRU1BQykgUmVkdWNlIE1JSSAqLw0KLS8qIC0tLS0tLS0tIEVNQUNfV09MIDogKEVNQUMgT2Zmc2V0OiAweGM0KSBXYWtlIE9uIExBTiBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19JUCAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGRkYgPDwgMCApICAvKiAoRU1BQykgQVJQIHJlcXVlc3QgSVAgYWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19NQUcgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTYgKSAgICAvKiAoRU1BQykgTWFnaWMgcGFja2V0IGV2ZW50IGVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19BUlAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTcgKSAgICAvKiAoRU1BQykgQVJQIHJlcXVlc3QgZXZlbnQgZW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1NBMSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxOCApICAgIC8qIChFTUFDKSBTcGVjaWZpYyBhZGRyZXNzIHJlZ2lzdGVyIDEgZXZlbnQgZW5hYmxlICovDQotLyogLS0tLS0tLS0gRU1BQ19SRVYgOiAoRU1BQyBPZmZzZXQ6IDB4ZmMpIFJldmlzaW9uIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1JFVlJFRiAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RkZGRiA8PCAwICkgIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19QQVJUUkVGICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGRkYgPDwgMTYgKSAvKiAoRU1BQykgKi8NCisvLyAtLS0tLS0tLSBFTUFDX05DUiA6IChFTUFDIE9mZnNldDogMHgwKSAgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19FTUFDX0xCICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKEVNQUMpIExvb3BiYWNrLiBPcHRpb25hbC4gV2hlbiBzZXQsIGxvb3BiYWNrIHNpZ25hbCBpcyBhdCBoaWdoIGxldmVsLg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19MTEIgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChFTUFDKSBMb29wYmFjayBsb2NhbC4gDQorI2RlZmluZSBBVDkxQ19FTUFDX1JFICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKEVNQUMpIFJlY2VpdmUgZW5hYmxlLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfVEUgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoRU1BQykgVHJhbnNtaXQgZW5hYmxlLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfTVBFICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoRU1BQykgTWFuYWdlbWVudCBwb3J0IGVuYWJsZS4gDQorI2RlZmluZSBBVDkxQ19FTUFDX0NMUlNUQVQgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKEVNQUMpIENsZWFyIHN0YXRpc3RpY3MgcmVnaXN0ZXJzLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfSU5DU1RBVCAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoRU1BQykgSW5jcmVtZW50IHN0YXRpc3RpY3MgcmVnaXN0ZXJzLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfV0VTVEFUICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoRU1BQykgV3JpdGUgZW5hYmxlIGZvciBzdGF0aXN0aWNzIHJlZ2lzdGVycy4gDQorI2RlZmluZSBBVDkxQ19FTUFDX0JQICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKEVNQUMpIEJhY2sgcHJlc3N1cmUuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19UU1RBUlQgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChFTUFDKSBTdGFydCBUcmFuc21pc3Npb24uIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19USEFMVCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChFTUFDKSBUcmFuc21pc3Npb24gSGFsdC4gDQorI2RlZmluZSBBVDkxQ19FTUFDX1RQRlIgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMSkgLy8gKEVNQUMpIFRyYW5zbWl0IHBhdXNlIGZyYW1lIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19UWlEgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8vIChFTUFDKSBUcmFuc21pdCB6ZXJvIHF1YW50dW0gcGF1c2UgZnJhbWUNCisvLyAtLS0tLS0tLSBFTUFDX05DRkdSIDogKEVNQUMgT2Zmc2V0OiAweDQpIE5ldHdvcmsgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0VNQUNfU1BEICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoRU1BQykgU3BlZWQuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19GRCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChFTUFDKSBGdWxsIGR1cGxleC4gDQorI2RlZmluZSBBVDkxQ19FTUFDX0pGUkFNRSAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKEVNQUMpIEp1bWJvIEZyYW1lcy4gDQorI2RlZmluZSBBVDkxQ19FTUFDX0NBRiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKEVNQUMpIENvcHkgYWxsIGZyYW1lcy4gDQorI2RlZmluZSBBVDkxQ19FTUFDX05CQyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKEVNQUMpIE5vIGJyb2FkY2FzdC4gDQorI2RlZmluZSBBVDkxQ19FTUFDX01USSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLy8gKEVNQUMpIE11bHRpY2FzdCBoYXNoIGV2ZW50IGVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19VTkkgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChFTUFDKSBVbmljYXN0IGhhc2ggZW5hYmxlLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfQklHICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoRU1BQykgUmVjZWl2ZSAxNTIyIGJ5dGVzLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfRUFFICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvLyAoRU1BQykgRXh0ZXJuYWwgYWRkcmVzcyBtYXRjaCBlbmFibGUuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19DTEsgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTApIC8vIChFTUFDKSANCisjZGVmaW5lIAlBVDkxQ19FTUFDX0NMS19IQ0xLXzggICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDEwKSAvLyAoRU1BQykgSENMSyBkaXZpZGVkIGJ5IDgNCisjZGVmaW5lIAlBVDkxQ19FTUFDX0NMS19IQ0xLXzE2ICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEwKSAvLyAoRU1BQykgSENMSyBkaXZpZGVkIGJ5IDE2DQorI2RlZmluZSAJQVQ5MUNfRU1BQ19DTEtfSENMS18zMiAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxMCkgLy8gKEVNQUMpIEhDTEsgZGl2aWRlZCBieSAzMg0KKyNkZWZpbmUgCUFUOTFDX0VNQUNfQ0xLX0hDTEtfNjQgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTApIC8vIChFTUFDKSBIQ0xLIGRpdmlkZWQgYnkgNjQNCisjZGVmaW5lIEFUOTFDX0VNQUNfUlRZICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1BBRSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMykgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SQk9GICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTQpIC8vIChFTUFDKSANCisjZGVmaW5lIAlBVDkxQ19FTUFDX1JCT0ZfT0ZGU0VUXzAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAxNCkgLy8gKEVNQUMpIG5vIG9mZnNldCBmcm9tIHN0YXJ0IG9mIHJlY2VpdmUgYnVmZmVyDQorI2RlZmluZSAJQVQ5MUNfRU1BQ19SQk9GX09GRlNFVF8xICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTQpIC8vIChFTUFDKSBvbmUgYnl0ZSBvZmZzZXQgZnJvbSBzdGFydCBvZiByZWNlaXZlIGJ1ZmZlcg0KKyNkZWZpbmUgCUFUOTFDX0VNQUNfUkJPRl9PRkZTRVRfMiAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDE0KSAvLyAoRU1BQykgdHdvIGJ5dGVzIG9mZnNldCBmcm9tIHN0YXJ0IG9mIHJlY2VpdmUgYnVmZmVyDQorI2RlZmluZSAJQVQ5MUNfRU1BQ19SQk9GX09GRlNFVF8zICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTQpIC8vIChFTUFDKSB0aHJlZSBieXRlcyBvZmZzZXQgZnJvbSBzdGFydCBvZiByZWNlaXZlIGJ1ZmZlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19STENFICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChFTUFDKSBSZWNlaXZlIExlbmd0aCBmaWVsZCBDaGVja2luZyBFbmFibGUNCisjZGVmaW5lIEFUOTFDX0VNQUNfRFJGQ1MgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE3KSAvLyAoRU1BQykgRGlzY2FyZCBSZWNlaXZlIEZDUw0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19FRlJIRCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTgpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfSVJYRkNTICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE5KSAvLyAoRU1BQykgSWdub3JlIFJYIEZDUw0KKy8vIC0tLS0tLS0tIEVNQUNfTlNSIDogKEVNQUMgT2Zmc2V0OiAweDgpIE5ldHdvcmsgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19MSU5LUiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfTURJTyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX0lETEUgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKEVNQUMpIA0KKy8vIC0tLS0tLS0tIEVNQUNfVFNSIDogKEVNQUMgT2Zmc2V0OiAweDE0KSBUcmFuc21pdCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19FTUFDX1VCUiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19DT0wgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUkxFUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1RHTyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKEVNQUMpIFRyYW5zbWl0IEdvDQorI2RlZmluZSBBVDkxQ19FTUFDX0JFWCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKEVNQUMpIEJ1ZmZlcnMgZXhoYXVzdGVkIG1pZCBmcmFtZQ0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19DT01QICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfVU5EICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoRU1BQykgDQorLy8gLS0tLS0tLS0gRU1BQ19SU1IgOiAoRU1BQyBPZmZzZXQ6IDB4MjApIFJlY2VpdmUgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19CTkEgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUkVDICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX09WUiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKEVNQUMpIA0KKy8vIC0tLS0tLS0tIEVNQUNfSVNSIDogKEVNQUMgT2Zmc2V0OiAweDI0KSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19NRkQgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUkNPTVAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1JYVUJSICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19UWFVCUiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfVFVORFIgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1JMRVggICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19UWEVSUiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfVENPTVAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX0xJTksgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19ST1ZSICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfSFJFU1AgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDExKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1BGUkUgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19QVFogICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTMpIC8vIChFTUFDKSANCisvLyAtLS0tLS0tLSBFTUFDX0lFUiA6IChFTUFDIE9mZnNldDogMHgyOCkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBFTUFDX0lEUiA6IChFTUFDIE9mZnNldDogMHgyYykgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gRU1BQ19JTVIgOiAoRU1BQyBPZmZzZXQ6IDB4MzApIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEVNQUNfTUFOIDogKEVNQUMgT2Zmc2V0OiAweDM0KSBQSFkgTWFpbnRlbmFuY2UgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19FTUFDX0RBVEEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGRiA8PCAgMCkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19DT0RFICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTYpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUkVHQSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxRiA8PCAxOCkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19QSFlBICAgICAgICgodW5zaWduZWQgaW50KSAweDFGIDw8IDIzKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1JXICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyOCkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TT0YgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMzApIC8vIChFTUFDKSANCisvLyAtLS0tLS0tLSBFTUFDX1VTUklPIDogKEVNQUMgT2Zmc2V0OiAweGMwKSBVU0VSIElucHV0IE91dHB1dCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUk1JSSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoRU1BQykgUmVkdWNlIE1JSQ0KKy8vIC0tLS0tLS0tIEVNQUNfV09MIDogKEVNQUMgT2Zmc2V0OiAweGM0KSBXYWtlIE9uIExBTiBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0VNQUNfSVAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRkZGIDw8ICAwKSAvLyAoRU1BQykgQVJQIHJlcXVlc3QgSVAgYWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19NQUcgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChFTUFDKSBNYWdpYyBwYWNrZXQgZXZlbnQgZW5hYmxlDQorI2RlZmluZSBBVDkxQ19FTUFDX0FSUCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNykgLy8gKEVNQUMpIEFSUCByZXF1ZXN0IGV2ZW50IGVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TQTEgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTgpIC8vIChFTUFDKSBTcGVjaWZpYyBhZGRyZXNzIHJlZ2lzdGVyIDEgZXZlbnQgZW5hYmxlDQorLy8gLS0tLS0tLS0gRU1BQ19SRVYgOiAoRU1BQyBPZmZzZXQ6IDB4ZmMpIFJldmlzaW9uIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SRVZSRUYgICAgICgodW5zaWduZWQgaW50KSAweEZGRkYgPDwgIDApIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUEFSVFJFRiAgICAoKHVuc2lnbmVkIGludCkgMHhGRkZGIDw8IDE2KSAvLyAoRU1BQykgDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBBbmFsb2cgdG8gRGlnaXRhbCBDb252ZXJ0b3IgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLXR5cGVkZWYgc3RydWN0IF9BVDkxU19BREMNCi17DQotICAgIEFUOTFfUkVHIEFEQ19DUjsgICAgICAgICAgLyogQURDIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQURDX01SOyAgICAgICAgICAvKiBBREMgTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDBbIDIgXTsgIC8qICovDQotICAgIEFUOTFfUkVHIEFEQ19DSEVSOyAgICAgICAgLyogQURDIENoYW5uZWwgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFEQ19DSERSOyAgICAgICAgLyogQURDIENoYW5uZWwgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBRENfQ0hTUjsgICAgICAgIC8qIEFEQyBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBRENfU1I7ICAgICAgICAgIC8qIEFEQyBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQURDX0xDRFI7ICAgICAgICAvKiBBREMgTGFzdCBDb252ZXJ0ZWQgRGF0YSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBRENfSUVSOyAgICAgICAgIC8qIEFEQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFEQ19JRFI7ICAgICAgICAgLyogQURDIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFEQ19JTVI7ICAgICAgICAgLyogQURDIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFEQ19DRFIwOyAgICAgICAgLyogQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAwICovDQotICAgIEFUOTFfUkVHIEFEQ19DRFIxOyAgICAgICAgLyogQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAxICovDQotICAgIEFUOTFfUkVHIEFEQ19DRFIyOyAgICAgICAgLyogQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAyICovDQotICAgIEFUOTFfUkVHIEFEQ19DRFIzOyAgICAgICAgLyogQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAzICovDQotICAgIEFUOTFfUkVHIEFEQ19DRFI0OyAgICAgICAgLyogQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA0ICovDQotICAgIEFUOTFfUkVHIEFEQ19DRFI1OyAgICAgICAgLyogQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA1ICovDQotICAgIEFUOTFfUkVHIEFEQ19DRFI2OyAgICAgICAgLyogQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA2ICovDQotICAgIEFUOTFfUkVHIEFEQ19DRFI3OyAgICAgICAgLyogQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA3ICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMVsgNDQgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgQURDX1JQUjsgICAgICAgICAvKiBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQURDX1JDUjsgICAgICAgICAvKiBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQURDX1RQUjsgICAgICAgICAvKiBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFEQ19UQ1I7ICAgICAgICAgLyogVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBRENfUk5QUjsgICAgICAgIC8qIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFEQ19STkNSOyAgICAgICAgLyogUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQURDX1ROUFI7ICAgICAgICAvKiBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQURDX1ROQ1I7ICAgICAgICAvKiBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQURDX1BUQ1I7ICAgICAgICAvKiBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBRENfUFRTUjsgICAgICAgIC8qIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi19IEFUOTFTX0FEQywgKiBBVDkxUFNfQURDOw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQW5hbG9nIHRvIERpZ2l0YWwgQ29udmVydG9yDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfQURDIHsNCisJQVQ5MV9SRUcJIEFEQ19DUjsgCS8vIEFEQyBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfTVI7IAkvLyBBREMgTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzJdOyAJLy8gDQorCUFUOTFfUkVHCSBBRENfQ0hFUjsgCS8vIEFEQyBDaGFubmVsIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX0NIRFI7IAkvLyBBREMgQ2hhbm5lbCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfQ0hTUjsgCS8vIEFEQyBDaGFubmVsIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX1NSOyAJLy8gQURDIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX0xDRFI7IAkvLyBBREMgTGFzdCBDb252ZXJ0ZWQgRGF0YSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX0lFUjsgCS8vIEFEQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfSURSOyAJLy8gQURDIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfSU1SOyAJLy8gQURDIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfQ0RSMDsgCS8vIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMA0KKwlBVDkxX1JFRwkgQURDX0NEUjE7IAkvLyBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDENCisJQVQ5MV9SRUcJIEFEQ19DRFIyOyAJLy8gQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAyDQorCUFUOTFfUkVHCSBBRENfQ0RSMzsgCS8vIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMw0KKwlBVDkxX1JFRwkgQURDX0NEUjQ7IAkvLyBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDQNCisJQVQ5MV9SRUcJIEFEQ19DRFI1OyAJLy8gQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA1DQorCUFUOTFfUkVHCSBBRENfQ0RSNjsgCS8vIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNg0KKwlBVDkxX1JFRwkgQURDX0NEUjc7IAkvLyBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDcNCisJQVQ5MV9SRUcJIFJlc2VydmVkMVs0NF07IAkvLyANCisJQVQ5MV9SRUcJIEFEQ19SUFI7IAkvLyBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19SQ1I7IAkvLyBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19UUFI7IAkvLyBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfVENSOyAJLy8gVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX1JOUFI7IAkvLyBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX1JOQ1I7IAkvLyBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX1ROUFI7IAkvLyBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19UTkNSOyAJLy8gVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfUFRDUjsgCS8vIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfUFRTUjsgCS8vIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCit9IEFUOTFTX0FEQywgKkFUOTFQU19BREM7DQogDQotLyogLS0tLS0tLS0gQURDX0NSIDogKEFEQyBPZmZzZXQ6IDB4MCkgQURDIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19TV1JTVCAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgICAvKiAoQURDKSBTb2Z0d2FyZSBSZXNldCAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1NUQVJUICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEgKSAgIC8qIChBREMpIFN0YXJ0IENvbnZlcnNpb24gKi8NCi0vKiAtLS0tLS0tLSBBRENfTVIgOiAoQURDIE9mZnNldDogMHg0KSBBREMgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1RSR0VOICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgIC8qIChBREMpIFRyaWdnZXIgRW5hYmxlICovDQotI2RlZmluZSAgICAgQVQ5MUNfQURDX1RSR0VOX0RJUyAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgKSAgICAgICAgLyogKEFEQykgSHJhZHdhcmUgdHJpZ2dlcnMgYXJlIGRpc2FibGVkLiBTdGFydGluZyBhIGNvbnZlcnNpb24gaXMgb25seSBwb3NzaWJsZSBieSBzb2Z0d2FyZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FEQ19UUkdFTl9FTiAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxICkgICAgICAgIC8qIChBREMpIEhhcmR3YXJlIHRyaWdnZXIgc2VsZWN0ZWQgYnkgVFJHU0VMIGZpZWxkIGlzIGVuYWJsZWQuICovDQotI2RlZmluZSBBVDkxQ19BRENfVFJHU0VMICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDcgPDwgMSApICAgLyogKEFEQykgVHJpZ2dlciBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRENfVFJHU0VMX1RJT0EwICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAxICkgICAvKiAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPMCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FEQ19UUkdTRUxfVElPQTEgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEgKSAgIC8qIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IFRJQU8xICovDQotI2RlZmluZSAgICAgQVQ5MUNfQURDX1RSR1NFTF9USU9BMiAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgMSApICAgLyogKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gVElBTzIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRENfVFJHU0VMX1RJT0EzICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAxICkgICAvKiAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPMyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FEQ19UUkdTRUxfVElPQTQgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg0IDw8IDEgKSAgIC8qIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IFRJQU80ICovDQotI2RlZmluZSAgICAgQVQ5MUNfQURDX1RSR1NFTF9USU9BNSAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDUgPDwgMSApICAgLyogKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gVElBTzUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRENfVFJHU0VMX0VYVCAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NiA8PCAxICkgICAvKiAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBFeHRlcm5hbCBUcmlnZ2VyICovDQotI2RlZmluZSBBVDkxQ19BRENfTE9XUkVTICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNCApICAgLyogKEFEQykgUmVzb2x1dGlvbi4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRENfTE9XUkVTXzEwX0JJVCAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCA0ICkgICAvKiAoQURDKSAxMC1iaXQgcmVzb2x1dGlvbiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FEQ19MT1dSRVNfOF9CSVQgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDQgKSAgIC8qIChBREMpIDgtYml0IHJlc29sdXRpb24gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19TTEVFUCAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA1ICkgICAvKiAoQURDKSBTbGVlcCBNb2RlICovDQotI2RlZmluZSAgICAgQVQ5MUNfQURDX1NMRUVQX05PUk1BTF9NT0RFICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgNSApICAgLyogKEFEQykgTm9ybWFsIE1vZGUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRENfU0xFRVBfTU9ERSAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA1ICkgICAvKiAoQURDKSBTbGVlcCBNb2RlICovDQotI2RlZmluZSBBVDkxQ19BRENfUFJFU0NBTCAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDNGIDw8IDggKSAgLyogKEFEQykgUHJlc2NhbGVyIHJhdGUgc2VsZWN0aW9uICovDQotI2RlZmluZSBBVDkxQ19BRENfU1RBUlRVUCAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDFGIDw8IDE2ICkgLyogKEFEQykgU3RhcnR1cCBUaW1lICovDQotI2RlZmluZSBBVDkxQ19BRENfU0hUSU0gICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEYgPDwgMjQgKSAgLyogKEFEQykgU2FtcGxlICYgSG9sZCBUaW1lICovDQotLyogLS0tLS0tLS0gICAgIEFEQ19DSEVSIDogKEFEQyBPZmZzZXQ6IDB4MTApIEFEQyBDaGFubmVsIEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NIMCAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgIC8qIChBREMpIENoYW5uZWwgMCAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NIMSAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEgKSAgIC8qIChBREMpIENoYW5uZWwgMSAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NIMiAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAgIC8qIChBREMpIENoYW5uZWwgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NIMyAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDMgKSAgIC8qIChBREMpIENoYW5uZWwgMyAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NINCAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDQgKSAgIC8qIChBREMpIENoYW5uZWwgNCAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NINSAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDUgKSAgIC8qIChBREMpIENoYW5uZWwgNSAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NINiAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDYgKSAgIC8qIChBREMpIENoYW5uZWwgNiAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NINyAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDcgKSAgIC8qIChBREMpIENoYW5uZWwgNyAqLw0KLS8qIC0tLS0tLS0tICAgICBBRENfQ0hEUiA6IChBREMgT2Zmc2V0OiAweDE0KSBBREMgQ2hhbm5lbCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gICAgIEFEQ19DSFNSIDogKEFEQyBPZmZzZXQ6IDB4MTgpIEFEQyBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIEFEQ19TUiA6IChBREMgT2Zmc2V0OiAweDFjKSBBREMgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19BRENfRU9DMCAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgLyogKEFEQykgRW5kIG9mIENvbnZlcnNpb24gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19FT0MxICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgICAvKiAoQURDKSBFbmQgb2YgQ29udmVyc2lvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0VPQzIgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAgIC8qIChBREMpIEVuZCBvZiBDb252ZXJzaW9uICovDQotI2RlZmluZSBBVDkxQ19BRENfRU9DMyAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMyApICAgLyogKEFEQykgRW5kIG9mIENvbnZlcnNpb24gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19FT0M0ICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA0ICkgICAvKiAoQURDKSBFbmQgb2YgQ29udmVyc2lvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0VPQzUgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDUgKSAgIC8qIChBREMpIEVuZCBvZiBDb252ZXJzaW9uICovDQotI2RlZmluZSBBVDkxQ19BRENfRU9DNiAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNiApICAgLyogKEFEQykgRW5kIG9mIENvbnZlcnNpb24gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19FT0M3ICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA3ICkgICAvKiAoQURDKSBFbmQgb2YgQ29udmVyc2lvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX09WUkUwICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDggKSAgIC8qIChBREMpIE92ZXJydW4gRXJyb3IgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19PVlJFMSAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA5ICkgICAvKiAoQURDKSBPdmVycnVuIEVycm9yICovDQotI2RlZmluZSBBVDkxQ19BRENfT1ZSRTIgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTAgKSAgLyogKEFEQykgT3ZlcnJ1biBFcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX09WUkUzICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDExICkgIC8qIChBREMpIE92ZXJydW4gRXJyb3IgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19PVlJFNCAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMiApICAvKiAoQURDKSBPdmVycnVuIEVycm9yICovDQotI2RlZmluZSBBVDkxQ19BRENfT1ZSRTUgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTMgKSAgLyogKEFEQykgT3ZlcnJ1biBFcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX09WUkU2ICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE0ICkgIC8qIChBREMpIE92ZXJydW4gRXJyb3IgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19PVlJFNyAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNSApICAvKiAoQURDKSBPdmVycnVuIEVycm9yICovDQotI2RlZmluZSBBVDkxQ19BRENfRFJEWSAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTYgKSAgLyogKEFEQykgRGF0YSBSZWFkeSAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0dPVlJFICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE3ICkgIC8qIChBREMpIEdlbmVyYWwgT3ZlcnJ1biAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0VORFJYICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE4ICkgIC8qIChBREMpIEVuZCBvZiBSZWNlaXZlciBUcmFuc2ZlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1JYQlVGRiAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE5ICkgIC8qIChBREMpIFJYQlVGRiBJbnRlcnJ1cHQgKi8NCi0vKiAtLS0tLS0tLSBBRENfTENEUiA6IChBREMgT2Zmc2V0OiAweDIwKSBBREMgTGFzdCBDb252ZXJ0ZWQgRGF0YSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0xEQVRBICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzRkYgPDwgMCApIC8qIChBREMpIExhc3QgRGF0YSBDb252ZXJ0ZWQgKi8NCi0vKiAtLS0tLS0tLSBBRENfSUVSIDogKEFEQyBPZmZzZXQ6IDB4MjQpIEFEQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQURDX0lEUiA6IChBREMgT2Zmc2V0OiAweDI4KSBBREMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBBRENfSU1SIDogKEFEQyBPZmZzZXQ6IDB4MmMpIEFEQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIEFEQ19DRFIwIDogKEFEQyBPZmZzZXQ6IDB4MzApIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMCAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0RBVEEgICAgKCAoIHVuc2lnbmVkIGludCApIDB4M0ZGIDw8IDAgKSAgLyogKEFEQykgQ29udmVydGVkIERhdGEgKi8NCi0vKiAtLS0tLS0tLSBBRENfQ0RSMSA6IChBREMgT2Zmc2V0OiAweDM0KSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDEgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBBRENfQ0RSMiA6IChBREMgT2Zmc2V0OiAweDM4KSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBBRENfQ0RSMyA6IChBREMgT2Zmc2V0OiAweDNjKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDMgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBBRENfQ0RSNCA6IChBREMgT2Zmc2V0OiAweDQwKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDQgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBBRENfQ0RSNSA6IChBREMgT2Zmc2V0OiAweDQ0KSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDUgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBBRENfQ0RSNiA6IChBREMgT2Zmc2V0OiAweDQ4KSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDYgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBBRENfQ0RSNyA6IChBREMgT2Zmc2V0OiAweDRjKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDcgLS0tLS0tLS0gKi8NCisvLyAtLS0tLS0tLSBBRENfQ1IgOiAoQURDIE9mZnNldDogMHgwKSBBREMgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FEQ19TV1JTVCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoQURDKSBTb2Z0d2FyZSBSZXNldA0KKyNkZWZpbmUgQVQ5MUNfQURDX1NUQVJUICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChBREMpIFN0YXJ0IENvbnZlcnNpb24NCisvLyAtLS0tLS0tLSBBRENfTVIgOiAoQURDIE9mZnNldDogMHg0KSBBREMgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FEQ19UUkdFTiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoQURDKSBUcmlnZ2VyIEVuYWJsZQ0KKyNkZWZpbmUgCUFUOTFDX0FEQ19UUkdFTl9ESVMgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwKSAvLyAoQURDKSBIcmFkd2FyZSB0cmlnZ2VycyBhcmUgZGlzYWJsZWQuIFN0YXJ0aW5nIGEgY29udmVyc2lvbiBpcyBvbmx5IHBvc3NpYmxlIGJ5IHNvZnR3YXJlDQorI2RlZmluZSAJQVQ5MUNfQURDX1RSR0VOX0VOICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEpIC8vIChBREMpIEhhcmR3YXJlIHRyaWdnZXIgc2VsZWN0ZWQgYnkgVFJHU0VMIGZpZWxkIGlzIGVuYWJsZWQuDQorI2RlZmluZSBBVDkxQ19BRENfVFJHU0VMICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAgMSkgLy8gKEFEQykgVHJpZ2dlciBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19BRENfVFJHU0VMX1RJT0EwICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDEpIC8vIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IFRJQU8wDQorI2RlZmluZSAJQVQ5MUNfQURDX1RSR1NFTF9USU9BMSAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPMQ0KKyNkZWZpbmUgCUFUOTFDX0FEQ19UUkdTRUxfVElPQTIgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgMSkgLy8gKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gVElBTzINCisjZGVmaW5lIAlBVDkxQ19BRENfVFJHU0VMX1RJT0EzICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDEpIC8vIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IFRJQU8zDQorI2RlZmluZSAJQVQ5MUNfQURDX1RSR1NFTF9USU9BNCAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg0IDw8ICAxKSAvLyAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPNA0KKyNkZWZpbmUgCUFUOTFDX0FEQ19UUkdTRUxfVElPQTUgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NSA8PCAgMSkgLy8gKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gVElBTzUNCisjZGVmaW5lIAlBVDkxQ19BRENfVFJHU0VMX0VYVCAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDYgPDwgIDEpIC8vIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IEV4dGVybmFsIFRyaWdnZXINCisjZGVmaW5lIEFUOTFDX0FEQ19MT1dSRVMgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoQURDKSBSZXNvbHV0aW9uLg0KKyNkZWZpbmUgCUFUOTFDX0FEQ19MT1dSRVNfMTBfQklUICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgNCkgLy8gKEFEQykgMTAtYml0IHJlc29sdXRpb24NCisjZGVmaW5lIAlBVDkxQ19BRENfTE9XUkVTXzhfQklUICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChBREMpIDgtYml0IHJlc29sdXRpb24NCisjZGVmaW5lIEFUOTFDX0FEQ19TTEVFUCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoQURDKSBTbGVlcCBNb2RlDQorI2RlZmluZSAJQVQ5MUNfQURDX1NMRUVQX05PUk1BTF9NT0RFICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDUpIC8vIChBREMpIE5vcm1hbCBNb2RlDQorI2RlZmluZSAJQVQ5MUNfQURDX1NMRUVQX01PREUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChBREMpIFNsZWVwIE1vZGUNCisjZGVmaW5lIEFUOTFDX0FEQ19QUkVTQ0FMICAgICAoKHVuc2lnbmVkIGludCkgMHgzRiA8PCAgOCkgLy8gKEFEQykgUHJlc2NhbGVyIHJhdGUgc2VsZWN0aW9uDQorI2RlZmluZSBBVDkxQ19BRENfU1RBUlRVUCAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MUYgPDwgMTYpIC8vIChBREMpIFN0YXJ0dXAgVGltZQ0KKyNkZWZpbmUgQVQ5MUNfQURDX1NIVElNICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgMjQpIC8vIChBREMpIFNhbXBsZSAmIEhvbGQgVGltZQ0KKy8vIC0tLS0tLS0tIAlBRENfQ0hFUiA6IChBREMgT2Zmc2V0OiAweDEwKSBBREMgQ2hhbm5lbCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BRENfQ0gwICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKEFEQykgQ2hhbm5lbCAwDQorI2RlZmluZSBBVDkxQ19BRENfQ0gxICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKEFEQykgQ2hhbm5lbCAxDQorI2RlZmluZSBBVDkxQ19BRENfQ0gyICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKEFEQykgQ2hhbm5lbCAyDQorI2RlZmluZSBBVDkxQ19BRENfQ0gzICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKEFEQykgQ2hhbm5lbCAzDQorI2RlZmluZSBBVDkxQ19BRENfQ0g0ICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKEFEQykgQ2hhbm5lbCA0DQorI2RlZmluZSBBVDkxQ19BRENfQ0g1ICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKEFEQykgQ2hhbm5lbCA1DQorI2RlZmluZSBBVDkxQ19BRENfQ0g2ICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLy8gKEFEQykgQ2hhbm5lbCA2DQorI2RlZmluZSBBVDkxQ19BRENfQ0g3ICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKEFEQykgQ2hhbm5lbCA3DQorLy8gLS0tLS0tLS0gCUFEQ19DSERSIDogKEFEQyBPZmZzZXQ6IDB4MTQpIEFEQyBDaGFubmVsIERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gCUFEQ19DSFNSIDogKEFEQyBPZmZzZXQ6IDB4MTgpIEFEQyBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRENfU1IgOiAoQURDIE9mZnNldDogMHgxYykgQURDIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FEQ19FT0MwICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoQURDKSBFbmQgb2YgQ29udmVyc2lvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX0VPQzEgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19BRENfRU9DMiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKEFEQykgRW5kIG9mIENvbnZlcnNpb24NCisjZGVmaW5lIEFUOTFDX0FEQ19FT0MzICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoQURDKSBFbmQgb2YgQ29udmVyc2lvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX0VPQzQgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19BRENfRU9DNSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKEFEQykgRW5kIG9mIENvbnZlcnNpb24NCisjZGVmaW5lIEFUOTFDX0FEQ19FT0M2ICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoQURDKSBFbmQgb2YgQ29udmVyc2lvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX0VPQzcgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19BRENfT1ZSRTAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKEFEQykgT3ZlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQURDX09WUkUxICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChBREMpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX0FEQ19PVlJFMiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEwKSAvLyAoQURDKSBPdmVycnVuIEVycm9yDQorI2RlZmluZSBBVDkxQ19BRENfT1ZSRTMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMSkgLy8gKEFEQykgT3ZlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQURDX09WUkU0ICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8vIChBREMpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX0FEQ19PVlJFNSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEzKSAvLyAoQURDKSBPdmVycnVuIEVycm9yDQorI2RlZmluZSBBVDkxQ19BRENfT1ZSRTYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNCkgLy8gKEFEQykgT3ZlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQURDX09WUkU3ICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTUpIC8vIChBREMpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX0FEQ19EUkRZICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoQURDKSBEYXRhIFJlYWR5DQorI2RlZmluZSBBVDkxQ19BRENfR09WUkUgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNykgLy8gKEFEQykgR2VuZXJhbCBPdmVycnVuDQorI2RlZmluZSBBVDkxQ19BRENfRU5EUlggICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOCkgLy8gKEFEQykgRW5kIG9mIFJlY2VpdmVyIFRyYW5zZmVyDQorI2RlZmluZSBBVDkxQ19BRENfUlhCVUZGICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOSkgLy8gKEFEQykgUlhCVUZGIEludGVycnVwdA0KKy8vIC0tLS0tLS0tIEFEQ19MQ0RSIDogKEFEQyBPZmZzZXQ6IDB4MjApIEFEQyBMYXN0IENvbnZlcnRlZCBEYXRhIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQURDX0xEQVRBICAgICAgICgodW5zaWduZWQgaW50KSAweDNGRiA8PCAgMCkgLy8gKEFEQykgTGFzdCBEYXRhIENvbnZlcnRlZA0KKy8vIC0tLS0tLS0tIEFEQ19JRVIgOiAoQURDIE9mZnNldDogMHgyNCkgQURDIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX0lEUiA6IChBREMgT2Zmc2V0OiAweDI4KSBBREMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX0lNUiA6IChBREMgT2Zmc2V0OiAweDJjKSBBREMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX0NEUjAgOiAoQURDIE9mZnNldDogMHgzMCkgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAwIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQURDX0RBVEEgICAgICAgICgodW5zaWduZWQgaW50KSAweDNGRiA8PCAgMCkgLy8gKEFEQykgQ29udmVydGVkIERhdGENCisvLyAtLS0tLS0tLSBBRENfQ0RSMSA6IChBREMgT2Zmc2V0OiAweDM0KSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDEgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX0NEUjIgOiAoQURDIE9mZnNldDogMHgzOCkgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19DRFIzIDogKEFEQyBPZmZzZXQ6IDB4M2MpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMyAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRENfQ0RSNCA6IChBREMgT2Zmc2V0OiAweDQwKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDQgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX0NEUjUgOiAoQURDIE9mZnNldDogMHg0NCkgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA1IC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19DRFI2IDogKEFEQyBPZmZzZXQ6IDB4NDgpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNiAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRENfQ0RSNyA6IChBREMgT2Zmc2V0OiAweDRjKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDcgLS0tLS0tLS0gDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBBZHZhbmNlZCAgRW5jcnlwdGlvbiBTdGFuZGFyZCAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotdHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX0FFUw0KLXsNCi0gICAgQVQ5MV9SRUcgQUVTX0NSOyAgICAgICAgICAgLyogQ29udHJvbCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBRVNfTVI7ICAgICAgICAgICAvKiBNb2RlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMFsgMiBdOyAgIC8qICovDQotICAgIEFUOTFfUkVHIEFFU19JRVI7ICAgICAgICAgIC8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUVTX0lEUjsgICAgICAgICAgLyogSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUVTX0lNUjsgICAgICAgICAgLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUVTX0lTUjsgICAgICAgICAgLyogSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBRVNfS0VZV3hSWyA0IF07ICAvKiBLZXkgV29yZCB4IFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMVsgNCBdOyAgIC8qICovDQotICAgIEFUOTFfUkVHIEFFU19JREFUQXhSWyA0IF07IC8qIElucHV0IERhdGEgeCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBRVNfT0RBVEF4UlsgNCBdOyAvKiBPdXRwdXQgRGF0YSB4IFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFFU19JVnhSWyA0IF07ICAgIC8qIEluaXRpYWxpemF0aW9uIFZlY3RvciB4IFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMlsgMzUgXTsgIC8qICovDQotICAgIEFUOTFfUkVHIEFFU19WUjsgICAgICAgICAgIC8qIEFFUyBWZXJzaW9uIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFFU19SUFI7ICAgICAgICAgIC8qIFJlY2VpdmUgUG9pbnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBRVNfUkNSOyAgICAgICAgICAvKiBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUVTX1RQUjsgICAgICAgICAgLyogVHJhbnNtaXQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBRVNfVENSOyAgICAgICAgICAvKiBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFFU19STlBSOyAgICAgICAgIC8qIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFFU19STkNSOyAgICAgICAgIC8qIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFFU19UTlBSOyAgICAgICAgIC8qIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBRVNfVE5DUjsgICAgICAgICAvKiBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUVTX1BUQ1I7ICAgICAgICAgLyogUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUVTX1BUU1I7ICAgICAgICAgLyogUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLX0gQVQ5MVNfQUVTLCAqIEFUOTFQU19BRVM7DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBBZHZhbmNlZCAgRW5jcnlwdGlvbiBTdGFuZGFyZA0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX0FFUyB7DQorCUFUOTFfUkVHCSBBRVNfQ1I7IAkvLyBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRVNfTVI7IAkvLyBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbMl07IAkvLyANCisJQVQ5MV9SRUcJIEFFU19JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRVNfSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFFU19JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUVTX0lTUjsgCS8vIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFFU19LRVlXeFJbNF07IAkvLyBLZXkgV29yZCB4IFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbNF07IAkvLyANCisJQVQ5MV9SRUcJIEFFU19JREFUQXhSWzRdOyAJLy8gSW5wdXQgRGF0YSB4IFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRVNfT0RBVEF4Uls0XTsgCS8vIE91dHB1dCBEYXRhIHggUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFFU19JVnhSWzRdOyAJLy8gSW5pdGlhbGl6YXRpb24gVmVjdG9yIHggUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMlszNV07IAkvLyANCisJQVQ5MV9SRUcJIEFFU19WUjsgCS8vIEFFUyBWZXJzaW9uIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRVNfUlBSOyAJLy8gUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRVNfUkNSOyAJLy8gUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRVNfVFBSOyAJLy8gVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUVTX1RDUjsgCS8vIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFFU19STlBSOyAJLy8gUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFFU19STkNSOyAJLy8gUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFFU19UTlBSOyAJLy8gVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRVNfVE5DUjsgCS8vIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUVTX1BUQ1I7IAkvLyBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUVTX1BUU1I7IAkvLyBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorfSBBVDkxU19BRVMsICpBVDkxUFNfQUVTOw0KIA0KLS8qIC0tLS0tLS0tIEFFU19DUiA6IChBRVMgT2Zmc2V0OiAweDApIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19TVEFSVCAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgICAvKiAoQUVTKSBTdGFydHMgUHJvY2Vzc2luZyAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX1NXUlNUICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDggKSAgIC8qIChBRVMpIFNvZnR3YXJlIFJlc2V0ICovDQotI2RlZmluZSBBVDkxQ19BRVNfTE9BRFNFRUQgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTYgKSAgLyogKEFFUykgUmFuZG9tIE51bWJlciBHZW5lcmF0b3IgU2VlZCBMb2FkaW5nICovDQotLyogLS0tLS0tLS0gQUVTX01SIDogKEFFUyBPZmZzZXQ6IDB4NCkgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX0NJUEhFUiAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgIC8qIChBRVMpIFByb2Nlc3NpbmcgTW9kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX1BST0NETFkgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGIDw8IDQgKSAgIC8qIChBRVMpIFByb2Nlc3NpbmcgRGVsYXkgKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19TTU9EICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCA4ICkgICAvKiAoQUVTKSBTdGFydCBNb2RlICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUVTX1NNT0RfTUFOVUFMICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgOCApICAgLyogKEFFUykgTWFudWFsIE1vZGU6IFRoZSBTVEFSVCBiaXQgaW4gcmVnaXN0ZXIgQUVTX0NSIG11c3QgYmUgc2V0IHRvIGJlZ2luIGVuY3J5cHRpb24gb3IgZGVjcnlwdGlvbi4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfU01PRF9BVVRPICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgICAvKiAoQUVTKSBBdXRvIE1vZGU6IG5vIGFjdGlvbiBpbiBBRVNfQ1IgaXMgbmVjZXNzYXJ5IChjZiBkYXRhc2hlZXQpLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FFU19TTU9EX1BEQyAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDggKSAgIC8qIChBRVMpIFBEQyBNb2RlIChjZiBkYXRhc2hlZXQpLiAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX09QTU9EICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg3IDw8IDEyICkgIC8qIChBRVMpIE9wZXJhdGlvbiBNb2RlICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUVTX09QTU9EX0VDQiAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMTIgKSAgLyogKEFFUykgRUNCIEVsZWN0cm9uaWMgQ29kZUJvb2sgbW9kZS4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfT1BNT0RfQ0JDICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMiApICAvKiAoQUVTKSBDQkMgQ2lwaGVyIEJsb2NrIENoYWluaW5nIG1vZGUuICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUVTX09QTU9EX09GQiAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgMTIgKSAgLyogKEFFUykgT0ZCIE91dHB1dCBGZWVkYmFjayBtb2RlLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FFU19PUE1PRF9DRkIgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDEyICkgIC8qIChBRVMpIENGQiBDaXBoZXIgRmVlZGJhY2sgbW9kZS4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfT1BNT0RfQ1RSICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NCA8PCAxMiApICAvKiAoQUVTKSBDVFIgQ291bnRlciBtb2RlLiAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX0xPRCAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE1ICkgIC8qIChBRVMpIExhc3QgT3V0cHV0IERhdGEgTW9kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX0NGQlMgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg3IDw8IDE2ICkgIC8qIChBRVMpIENpcGhlciBGZWVkYmFjayBEYXRhIFNpemUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfQ0ZCU18xMjhfQklUICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAxNiApICAvKiAoQUVTKSAxMjgtYml0LiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FFU19DRkJTXzY0X0JJVCAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE2ICkgIC8qIChBRVMpIDY0LWJpdC4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfQ0ZCU18zMl9CSVQgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCAxNiApICAvKiAoQUVTKSAzMi1iaXQuICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUVTX0NGQlNfMTZfQklUICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTYgKSAgLyogKEFFUykgMTYtYml0LiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FFU19DRkJTXzhfQklUICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg0IDw8IDE2ICkgIC8qIChBRVMpIDgtYml0LiAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX0NLRVkgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGIDw8IDIwICkgIC8qIChBRVMpIENvdW50ZXJtZWFzdXJlIEtleSAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX0NUWVBFICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxRiA8PCAyNCApIC8qIChBRVMpIENvdW50ZXJtZWFzdXJlIFR5cGUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfQ1RZUEVfVFlQRTFfRU4gICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyNCApICAvKiAoQUVTKSBDb3VudGVybWVhc3VyZSB0eXBlIDEgaXMgZW5hYmxlZC4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfQ1RZUEVfVFlQRTJfRU4gICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCAyNCApICAvKiAoQUVTKSBDb3VudGVybWVhc3VyZSB0eXBlIDIgaXMgZW5hYmxlZC4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfQ1RZUEVfVFlQRTNfRU4gICAgKCAoIHVuc2lnbmVkIGludCApIDB4NCA8PCAyNCApICAvKiAoQUVTKSBDb3VudGVybWVhc3VyZSB0eXBlIDMgaXMgZW5hYmxlZC4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfQ1RZUEVfVFlQRTRfRU4gICAgKCAoIHVuc2lnbmVkIGludCApIDB4OCA8PCAyNCApICAvKiAoQUVTKSBDb3VudGVybWVhc3VyZSB0eXBlIDQgaXMgZW5hYmxlZC4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfQ1RZUEVfVFlQRTVfRU4gICAgKCAoIHVuc2lnbmVkIGludCApIDB4MTAgPDwgMjQgKSAvKiAoQUVTKSBDb3VudGVybWVhc3VyZSB0eXBlIDUgaXMgZW5hYmxlZC4gKi8NCi0vKiAtLS0tLS0tLSBBRVNfSUVSIDogKEFFUyBPZmZzZXQ6IDB4MTApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19EQVRSRFkgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgICAvKiAoQUVTKSBEQVRSRFkgKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19FTkRSWCAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgICAvKiAoQUVTKSBQREMgUmVhZCBCdWZmZXIgRW5kICovDQotI2RlZmluZSBBVDkxQ19BRVNfRU5EVFggICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMiApICAgLyogKEFFUykgUERDIFdyaXRlIEJ1ZmZlciBFbmQgKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19SWEJVRkYgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzICkgICAvKiAoQUVTKSBQREMgUmVhZCBCdWZmZXIgRnVsbCAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX1RYQlVGRSAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDQgKSAgIC8qIChBRVMpIFBEQyBXcml0ZSBCdWZmZXIgRW1wdHkgKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19VUkFEICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgICAvKiAoQUVTKSBVbnNwZWNpZmllZCBSZWdpc3RlciBBY2Nlc3MgRGV0ZWN0aW9uICovDQotLyogLS0tLS0tLS0gQUVTX0lEUiA6IChBRVMgT2Zmc2V0OiAweDE0KSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIEFFU19JTVIgOiAoQUVTIE9mZnNldDogMHgxOCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBBRVNfSVNSIDogKEFFUyBPZmZzZXQ6IDB4MWMpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19VUkFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NyA8PCAxMiApIC8qIChBRVMpIFVuc3BlY2lmaWVkIFJlZ2lzdGVyIEFjY2VzcyBUeXBlIFN0YXR1cyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FFU19VUkFUX0lOX0RBVF9XUklURV9EQVRQUk9DICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDEyICkgLyogKEFFUykgSW5wdXQgZGF0YSByZWdpc3RlciB3cml0dGVuIGR1cmluZyB0aGUgZGF0YSBwcm9jZXNzaW5nIGluIFBEQyBtb2RlLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FFU19VUkFUX09VVF9EQVRfUkVBRF9EQVRQUk9DICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEyICkgLyogKEFFUykgT3V0cHV0IGRhdGEgcmVnaXN0ZXIgcmVhZCBkdXJpbmcgdGhlIGRhdGEgcHJvY2Vzc2luZy4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfVVJBVF9NT0RFUkVHX1dSSVRFX0RBVFBST0MgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCAxMiApIC8qIChBRVMpIE1vZGUgcmVnaXN0ZXIgd3JpdHRlbiBkdXJpbmcgdGhlIGRhdGEgcHJvY2Vzc2luZy4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfVVJBVF9PVVRfREFUX1JFQURfU1VCS0VZICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAxMiApIC8qIChBRVMpIE91dHB1dCBkYXRhIHJlZ2lzdGVyIHJlYWQgZHVyaW5nIHRoZSBzdWIta2V5cyBnZW5lcmF0aW9uLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FFU19VUkFUX01PREVSRUdfV1JJVEVfU1VCS0VZICAgICAoICggdW5zaWduZWQgaW50ICkgMHg0IDw8IDEyICkgLyogKEFFUykgTW9kZSByZWdpc3RlciB3cml0dGVuIGR1cmluZyB0aGUgc3ViLWtleXMgZ2VuZXJhdGlvbi4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfVVJBVF9XT19SRUdfUkVBRCAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NSA8PCAxMiApIC8qIChBRVMpIFdyaXRlLW9ubHkgcmVnaXN0ZXIgcmVhZCBhY2Nlc3MuICovDQorLy8gLS0tLS0tLS0gQUVTX0NSIDogKEFFUyBPZmZzZXQ6IDB4MCkgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FFU19TVEFSVCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoQUVTKSBTdGFydHMgUHJvY2Vzc2luZw0KKyNkZWZpbmUgQVQ5MUNfQUVTX1NXUlNUICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChBRVMpIFNvZnR3YXJlIFJlc2V0DQorI2RlZmluZSBBVDkxQ19BRVNfTE9BRFNFRUQgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKEFFUykgUmFuZG9tIE51bWJlciBHZW5lcmF0b3IgU2VlZCBMb2FkaW5nDQorLy8gLS0tLS0tLS0gQUVTX01SIDogKEFFUyBPZmZzZXQ6IDB4NCkgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FFU19DSVBIRVIgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoQUVTKSBQcm9jZXNzaW5nIE1vZGUNCisjZGVmaW5lIEFUOTFDX0FFU19QUk9DRExZICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8ICA0KSAvLyAoQUVTKSBQcm9jZXNzaW5nIERlbGF5DQorI2RlZmluZSBBVDkxQ19BRVNfU01PRCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKEFFUykgU3RhcnQgTW9kZQ0KKyNkZWZpbmUgCUFUOTFDX0FFU19TTU9EX01BTlVBTCAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDgpIC8vIChBRVMpIE1hbnVhbCBNb2RlOiBUaGUgU1RBUlQgYml0IGluIHJlZ2lzdGVyIEFFU19DUiBtdXN0IGJlIHNldCB0byBiZWdpbiBlbmNyeXB0aW9uIG9yIGRlY3J5cHRpb24uDQorI2RlZmluZSAJQVQ5MUNfQUVTX1NNT0RfQVVUTyAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKEFFUykgQXV0byBNb2RlOiBubyBhY3Rpb24gaW4gQUVTX0NSIGlzIG5lY2Vzc2FyeSAoY2YgZGF0YXNoZWV0KS4NCisjZGVmaW5lIAlBVDkxQ19BRVNfU01PRF9QREMgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA4KSAvLyAoQUVTKSBQREMgTW9kZSAoY2YgZGF0YXNoZWV0KS4NCisjZGVmaW5lIEFUOTFDX0FFU19PUE1PRCAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8IDEyKSAvLyAoQUVTKSBPcGVyYXRpb24gTW9kZQ0KKyNkZWZpbmUgCUFUOTFDX0FFU19PUE1PRF9FQ0IgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDEyKSAvLyAoQUVTKSBFQ0IgRWxlY3Ryb25pYyBDb2RlQm9vayBtb2RlLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19PUE1PRF9DQkMgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvLyAoQUVTKSBDQkMgQ2lwaGVyIEJsb2NrIENoYWluaW5nIG1vZGUuDQorI2RlZmluZSAJQVQ5MUNfQUVTX09QTU9EX09GQiAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMTIpIC8vIChBRVMpIE9GQiBPdXRwdXQgRmVlZGJhY2sgbW9kZS4NCisjZGVmaW5lIAlBVDkxQ19BRVNfT1BNT0RfQ0ZCICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxMikgLy8gKEFFUykgQ0ZCIENpcGhlciBGZWVkYmFjayBtb2RlLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19PUE1PRF9DVFIgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg0IDw8IDEyKSAvLyAoQUVTKSBDVFIgQ291bnRlciBtb2RlLg0KKyNkZWZpbmUgQVQ5MUNfQUVTX0xPRCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTUpIC8vIChBRVMpIExhc3QgT3V0cHV0IERhdGEgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfQUVTX0NGQlMgICAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgMTYpIC8vIChBRVMpIENpcGhlciBGZWVkYmFjayBEYXRhIFNpemUNCisjZGVmaW5lIAlBVDkxQ19BRVNfQ0ZCU18xMjhfQklUICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDE2KSAvLyAoQUVTKSAxMjgtYml0Lg0KKyNkZWZpbmUgCUFUOTFDX0FFU19DRkJTXzY0X0JJVCAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChBRVMpIDY0LWJpdC4NCisjZGVmaW5lIAlBVDkxQ19BRVNfQ0ZCU18zMl9CSVQgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDE2KSAvLyAoQUVTKSAzMi1iaXQuDQorI2RlZmluZSAJQVQ5MUNfQUVTX0NGQlNfMTZfQklUICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxNikgLy8gKEFFUykgMTYtYml0Lg0KKyNkZWZpbmUgCUFUOTFDX0FFU19DRkJTXzhfQklUICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDQgPDwgMTYpIC8vIChBRVMpIDgtYml0Lg0KKyNkZWZpbmUgQVQ5MUNfQUVTX0NLRVkgICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgMjApIC8vIChBRVMpIENvdW50ZXJtZWFzdXJlIEtleQ0KKyNkZWZpbmUgQVQ5MUNfQUVTX0NUWVBFICAgICAgICgodW5zaWduZWQgaW50KSAweDFGIDw8IDI0KSAvLyAoQUVTKSBDb3VudGVybWVhc3VyZSBUeXBlDQorI2RlZmluZSAJQVQ5MUNfQUVTX0NUWVBFX1RZUEUxX0VOICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjQpIC8vIChBRVMpIENvdW50ZXJtZWFzdXJlIHR5cGUgMSBpcyBlbmFibGVkLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19DVFlQRV9UWVBFMl9FTiAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDI0KSAvLyAoQUVTKSBDb3VudGVybWVhc3VyZSB0eXBlIDIgaXMgZW5hYmxlZC4NCisjZGVmaW5lIAlBVDkxQ19BRVNfQ1RZUEVfVFlQRTNfRU4gICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NCA8PCAyNCkgLy8gKEFFUykgQ291bnRlcm1lYXN1cmUgdHlwZSAzIGlzIGVuYWJsZWQuDQorI2RlZmluZSAJQVQ5MUNfQUVTX0NUWVBFX1RZUEU0X0VOICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDggPDwgMjQpIC8vIChBRVMpIENvdW50ZXJtZWFzdXJlIHR5cGUgNCBpcyBlbmFibGVkLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19DVFlQRV9UWVBFNV9FTiAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxMCA8PCAyNCkgLy8gKEFFUykgQ291bnRlcm1lYXN1cmUgdHlwZSA1IGlzIGVuYWJsZWQuDQorLy8gLS0tLS0tLS0gQUVTX0lFUiA6IChBRVMgT2Zmc2V0OiAweDEwKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQUVTX0RBVFJEWSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChBRVMpIERBVFJEWQ0KKyNkZWZpbmUgQVQ5MUNfQUVTX0VORFJYICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChBRVMpIFBEQyBSZWFkIEJ1ZmZlciBFbmQNCisjZGVmaW5lIEFUOTFDX0FFU19FTkRUWCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoQUVTKSBQREMgV3JpdGUgQnVmZmVyIEVuZA0KKyNkZWZpbmUgQVQ5MUNfQUVTX1JYQlVGRiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChBRVMpIFBEQyBSZWFkIEJ1ZmZlciBGdWxsDQorI2RlZmluZSBBVDkxQ19BRVNfVFhCVUZFICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKEFFUykgUERDIFdyaXRlIEJ1ZmZlciBFbXB0eQ0KKyNkZWZpbmUgQVQ5MUNfQUVTX1VSQUQgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChBRVMpIFVuc3BlY2lmaWVkIFJlZ2lzdGVyIEFjY2VzcyBEZXRlY3Rpb24NCisvLyAtLS0tLS0tLSBBRVNfSURSIDogKEFFUyBPZmZzZXQ6IDB4MTQpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFFU19JTVIgOiAoQUVTIE9mZnNldDogMHgxOCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQUVTX0lTUiA6IChBRVMgT2Zmc2V0OiAweDFjKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQUVTX1VSQVQgICAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgMTIpIC8vIChBRVMpIFVuc3BlY2lmaWVkIFJlZ2lzdGVyIEFjY2VzcyBUeXBlIFN0YXR1cw0KKyNkZWZpbmUgCUFUOTFDX0FFU19VUkFUX0lOX0RBVF9XUklURV9EQVRQUk9DICgodW5zaWduZWQgaW50KSAweDAgPDwgMTIpIC8vIChBRVMpIElucHV0IGRhdGEgcmVnaXN0ZXIgd3JpdHRlbiBkdXJpbmcgdGhlIGRhdGEgcHJvY2Vzc2luZyBpbiBQREMgbW9kZS4NCisjZGVmaW5lIAlBVDkxQ19BRVNfVVJBVF9PVVRfREFUX1JFQURfREFUUFJPQyAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvLyAoQUVTKSBPdXRwdXQgZGF0YSByZWdpc3RlciByZWFkIGR1cmluZyB0aGUgZGF0YSBwcm9jZXNzaW5nLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19VUkFUX01PREVSRUdfV1JJVEVfREFUUFJPQyAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDEyKSAvLyAoQUVTKSBNb2RlIHJlZ2lzdGVyIHdyaXR0ZW4gZHVyaW5nIHRoZSBkYXRhIHByb2Nlc3NpbmcuDQorI2RlZmluZSAJQVQ5MUNfQUVTX1VSQVRfT1VUX0RBVF9SRUFEX1NVQktFWSAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxMikgLy8gKEFFUykgT3V0cHV0IGRhdGEgcmVnaXN0ZXIgcmVhZCBkdXJpbmcgdGhlIHN1Yi1rZXlzIGdlbmVyYXRpb24uDQorI2RlZmluZSAJQVQ5MUNfQUVTX1VSQVRfTU9ERVJFR19XUklURV9TVUJLRVkgKCh1bnNpZ25lZCBpbnQpIDB4NCA8PCAxMikgLy8gKEFFUykgTW9kZSByZWdpc3RlciB3cml0dGVuIGR1cmluZyB0aGUgc3ViLWtleXMgZ2VuZXJhdGlvbi4NCisjZGVmaW5lIAlBVDkxQ19BRVNfVVJBVF9XT19SRUdfUkVBRCAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg1IDw8IDEyKSAvLyAoQUVTKSBXcml0ZS1vbmx5IHJlZ2lzdGVyIHJlYWQgYWNjZXNzLg0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVHJpcGxlIERhdGEgRW5jcnlwdGlvbiBTdGFuZGFyZCAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotdHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1RERVMNCi17DQotICAgIEFUOTFfUkVHIFRERVNfQ1I7ICAgICAgICAgICAvKiBDb250cm9sIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFRERVNfTVI7ICAgICAgICAgICAvKiBNb2RlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMFsgMiBdOyAgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBUREVTX0lFUjsgICAgICAgICAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBUREVTX0lEUjsgICAgICAgICAgLyogSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVERFU19JTVI7ICAgICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFRERVNfSVNSOyAgICAgICAgICAvKiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFRERVNfS0VZMVd4UlsgMiBdOyAvKiBLZXkgMSBXb3JkIHggUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVERFU19LRVkyV3hSWyAyIF07IC8qIEtleSAyIFdvcmQgeCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBUREVTX0tFWTNXeFJbIDIgXTsgLyogS2V5IDMgV29yZCB4IFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMVsgMiBdOyAgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBUREVTX0lEQVRBeFJbIDIgXTsgLyogSW5wdXQgRGF0YSB4IFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMlsgMiBdOyAgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBUREVTX09EQVRBeFJbIDIgXTsgLyogT3V0cHV0IERhdGEgeCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDNbIDIgXTsgICAgLyogKi8NCi0gICAgQVQ5MV9SRUcgVERFU19JVnhSWyAyIF07ICAgIC8qIEluaXRpYWxpemF0aW9uIFZlY3RvciB4IFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkNFsgMzcgXTsgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBUREVTX1ZSOyAgICAgICAgICAgLyogVERFUyBWZXJzaW9uIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFRERVNfUlBSOyAgICAgICAgICAvKiBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVERFU19SQ1I7ICAgICAgICAgIC8qIFJlY2VpdmUgQ291bnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBUREVTX1RQUjsgICAgICAgICAgLyogVHJhbnNtaXQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBUREVTX1RDUjsgICAgICAgICAgLyogVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBUREVTX1JOUFI7ICAgICAgICAgLyogUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVERFU19STkNSOyAgICAgICAgIC8qIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFRERVNfVE5QUjsgICAgICAgICAvKiBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVERFU19UTkNSOyAgICAgICAgIC8qIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBUREVTX1BUQ1I7ICAgICAgICAgLyogUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVERFU19QVFNSOyAgICAgICAgIC8qIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi19IEFUOTFTX1RERVMsICogQVQ5MVBTX1RERVM7DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBUcmlwbGUgRGF0YSBFbmNyeXB0aW9uIFN0YW5kYXJkDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfVERFUyB7DQorCUFUOTFfUkVHCSBUREVTX0NSOyAJLy8gQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVERFU19NUjsgCS8vIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFsyXTsgCS8vIA0KKwlBVDkxX1JFRwkgVERFU19JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUREVTX0lEUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUREVTX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUREVTX0lTUjsgCS8vIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRERVNfS0VZMVd4UlsyXTsgCS8vIEtleSAxIFdvcmQgeCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVERFU19LRVkyV3hSWzJdOyAJLy8gS2V5IDIgV29yZCB4IFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUREVTX0tFWTNXeFJbMl07IAkvLyBLZXkgMyBXb3JkIHggUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMVsyXTsgCS8vIA0KKwlBVDkxX1JFRwkgVERFU19JREFUQXhSWzJdOyAJLy8gSW5wdXQgRGF0YSB4IFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDJbMl07IAkvLyANCisJQVQ5MV9SRUcJIFRERVNfT0RBVEF4UlsyXTsgCS8vIE91dHB1dCBEYXRhIHggUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkM1syXTsgCS8vIA0KKwlBVDkxX1JFRwkgVERFU19JVnhSWzJdOyAJLy8gSW5pdGlhbGl6YXRpb24gVmVjdG9yIHggUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkNFszN107IAkvLyANCisJQVQ5MV9SRUcJIFRERVNfVlI7IAkvLyBUREVTIFZlcnNpb24gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRERVNfUlBSOyAJLy8gUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUREVTX1JDUjsgCS8vIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVERFU19UUFI7IAkvLyBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUREVTX1RDUjsgCS8vIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRERVNfUk5QUjsgCS8vIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUREVTX1JOQ1I7IAkvLyBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVERFU19UTlBSOyAJLy8gVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUREVTX1ROQ1I7IAkvLyBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRERVNfUFRDUjsgCS8vIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUREVTX1BUU1I7IAkvLyBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorfSBBVDkxU19UREVTLCAqQVQ5MVBTX1RERVM7DQogDQotLyogLS0tLS0tLS0gVERFU19DUiA6IChUREVTIE9mZnNldDogMHgwKSBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19UREVTX1NUQVJUICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgLyogKFRERVMpIFN0YXJ0cyBQcm9jZXNzaW5nICovDQotI2RlZmluZSBBVDkxQ19UREVTX1NXUlNUICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDggKSAgLyogKFRERVMpIFNvZnR3YXJlIFJlc2V0ICovDQotLyogLS0tLS0tLS0gVERFU19NUiA6IChUREVTIE9mZnNldDogMHg0KSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19UREVTX0NJUEhFUiAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgLyogKFRERVMpIFByb2Nlc3NpbmcgTW9kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19UREVTTU9EICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgIC8qIChUREVTKSBTaW5nbGUgb3IgVHJpcGxlIERFUyBNb2RlICovDQotI2RlZmluZSBBVDkxQ19UREVTX0tFWU1PRCAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDQgKSAgLyogKFRERVMpIEtleSBNb2RlICovDQotI2RlZmluZSBBVDkxQ19UREVTX1NNT0QgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDggKSAgLyogKFRERVMpIFN0YXJ0IE1vZGUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UREVTX1NNT0RfTUFOVUFMICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgOCApICAvKiAoVERFUykgTWFudWFsIE1vZGU6IFRoZSBTVEFSVCBiaXQgaW4gcmVnaXN0ZXIgVERFU19DUiBtdXN0IGJlIHNldCB0byBiZWdpbiBlbmNyeXB0aW9uIG9yIGRlY3J5cHRpb24uICovDQotI2RlZmluZSAgICAgQVQ5MUNfVERFU19TTU9EX0FVVE8gICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDggKSAgLyogKFRERVMpIEF1dG8gTW9kZTogbm8gYWN0aW9uIGluIFRERVNfQ1IgaXMgbmVjZXNzYXJ5IChjZiBkYXRhc2hlZXQpLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RERVNfU01PRF9QREMgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCA4ICkgIC8qIChUREVTKSBQREMgTW9kZSAoY2YgZGF0YXNoZWV0KS4gKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfT1BNT0QgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTIgKSAvKiAoVERFUykgT3BlcmF0aW9uIE1vZGUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UREVTX09QTU9EX0VDQiAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMTIgKSAvKiAoVERFUykgRUNCIEVsZWN0cm9uaWMgQ29kZUJvb2sgbW9kZS4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UREVTX09QTU9EX0NCQyAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTIgKSAvKiAoVERFUykgQ0JDIENpcGhlciBCbG9jayBDaGFpbmluZyBtb2RlLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RERVNfT1BNT0RfT0ZCICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCAxMiApIC8qIChUREVTKSBPRkIgT3V0cHV0IEZlZWRiYWNrIG1vZGUuICovDQotI2RlZmluZSAgICAgQVQ5MUNfVERFU19PUE1PRF9DRkIgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDEyICkgLyogKFRERVMpIENGQiBDaXBoZXIgRmVlZGJhY2sgbW9kZS4gKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfTE9EICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTUgKSAvKiAoVERFUykgTGFzdCBPdXRwdXQgRGF0YSBNb2RlICovDQotI2RlZmluZSBBVDkxQ19UREVTX0NGQlMgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDE2ICkgLyogKFRERVMpIENpcGhlciBGZWVkYmFjayBEYXRhIFNpemUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UREVTX0NGQlNfNjRfQklUICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMTYgKSAvKiAoVERFUykgNjQtYml0LiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RERVNfQ0ZCU18zMl9CSVQgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNiApIC8qIChUREVTKSAzMi1iaXQuICovDQotI2RlZmluZSAgICAgQVQ5MUNfVERFU19DRkJTXzE2X0JJVCAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDE2ICkgLyogKFRERVMpIDE2LWJpdC4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UREVTX0NGQlNfOF9CSVQgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTYgKSAvKiAoVERFUykgOC1iaXQuICovDQotLyogLS0tLS0tLS0gVERFU19JRVIgOiAoVERFUyBPZmZzZXQ6IDB4MTApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfREFUUkRZICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAvKiAoVERFUykgREFUUkRZICovDQotI2RlZmluZSBBVDkxQ19UREVTX0VORFJYICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEgKSAgLyogKFRERVMpIFBEQyBSZWFkIEJ1ZmZlciBFbmQgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfRU5EVFggICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMiApICAvKiAoVERFUykgUERDIFdyaXRlIEJ1ZmZlciBFbmQgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfUlhCVUZGICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMyApICAvKiAoVERFUykgUERDIFJlYWQgQnVmZmVyIEZ1bGwgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfVFhCVUZFICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNCApICAvKiAoVERFUykgUERDIFdyaXRlIEJ1ZmZlciBFbXB0eSAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19VUkFEICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgIC8qIChUREVTKSBVbnNwZWNpZmllZCBSZWdpc3RlciBBY2Nlc3MgRGV0ZWN0aW9uICovDQotLyogLS0tLS0tLS0gVERFU19JRFIgOiAoVERFUyBPZmZzZXQ6IDB4MTQpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gVERFU19JTVIgOiAoVERFUyBPZmZzZXQ6IDB4MTgpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gVERFU19JU1IgOiAoVERFUyBPZmZzZXQ6IDB4MWMpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfVVJBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTIgKSAvKiAoVERFUykgVW5zcGVjaWZpZWQgUmVnaXN0ZXIgQWNjZXNzIFR5cGUgU3RhdHVzICovDQotI2RlZmluZSAgICAgQVQ5MUNfVERFU19VUkFUX0lOX0RBVF9XUklURV9EQVRQUk9DICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDEyICkgLyogKFRERVMpIElucHV0IGRhdGEgcmVnaXN0ZXIgd3JpdHRlbiBkdXJpbmcgdGhlIGRhdGEgcHJvY2Vzc2luZyBpbiBQREMgbW9kZS4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UREVTX1VSQVRfT1VUX0RBVF9SRUFEX0RBVFBST0MgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTIgKSAvKiAoVERFUykgT3V0cHV0IGRhdGEgcmVnaXN0ZXIgcmVhZCBkdXJpbmcgdGhlIGRhdGEgcHJvY2Vzc2luZy4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UREVTX1VSQVRfTU9ERVJFR19XUklURV9EQVRQUk9DICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgMTIgKSAvKiAoVERFUykgTW9kZSByZWdpc3RlciB3cml0dGVuIGR1cmluZyB0aGUgZGF0YSBwcm9jZXNzaW5nLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RERVNfVVJBVF9XT19SRUdfUkVBRCAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAxMiApIC8qIChUREVTKSBXcml0ZS1vbmx5IHJlZ2lzdGVyIHJlYWQgYWNjZXNzLiAqLw0KKy8vIC0tLS0tLS0tIFRERVNfQ1IgOiAoVERFUyBPZmZzZXQ6IDB4MCkgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RERVNfU1RBUlQgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoVERFUykgU3RhcnRzIFByb2Nlc3NpbmcNCisjZGVmaW5lIEFUOTFDX1RERVNfU1dSU1QgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoVERFUykgU29mdHdhcmUgUmVzZXQNCisvLyAtLS0tLS0tLSBUREVTX01SIDogKFRERVMgT2Zmc2V0OiAweDQpIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UREVTX0NJUEhFUiAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFRERVMpIFByb2Nlc3NpbmcgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfVERFU19UREVTTU9EICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChUREVTKSBTaW5nbGUgb3IgVHJpcGxlIERFUyBNb2RlDQorI2RlZmluZSBBVDkxQ19UREVTX0tFWU1PRCAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFRERVMpIEtleSBNb2RlDQorI2RlZmluZSBBVDkxQ19UREVTX1NNT0QgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKFRERVMpIFN0YXJ0IE1vZGUNCisjZGVmaW5lIAlBVDkxQ19UREVTX1NNT0RfTUFOVUFMICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgOCkgLy8gKFRERVMpIE1hbnVhbCBNb2RlOiBUaGUgU1RBUlQgYml0IGluIHJlZ2lzdGVyIFRERVNfQ1IgbXVzdCBiZSBzZXQgdG8gYmVnaW4gZW5jcnlwdGlvbiBvciBkZWNyeXB0aW9uLg0KKyNkZWZpbmUgCUFUOTFDX1RERVNfU01PRF9BVVRPICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoVERFUykgQXV0byBNb2RlOiBubyBhY3Rpb24gaW4gVERFU19DUiBpcyBuZWNlc3NhcnkgKGNmIGRhdGFzaGVldCkuDQorI2RlZmluZSAJQVQ5MUNfVERFU19TTU9EX1BEQyAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDgpIC8vIChUREVTKSBQREMgTW9kZSAoY2YgZGF0YXNoZWV0KS4NCisjZGVmaW5lIEFUOTFDX1RERVNfT1BNT0QgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDEyKSAvLyAoVERFUykgT3BlcmF0aW9uIE1vZGUNCisjZGVmaW5lIAlBVDkxQ19UREVTX09QTU9EX0VDQiAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMTIpIC8vIChUREVTKSBFQ0IgRWxlY3Ryb25pYyBDb2RlQm9vayBtb2RlLg0KKyNkZWZpbmUgCUFUOTFDX1RERVNfT1BNT0RfQ0JDICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLy8gKFRERVMpIENCQyBDaXBoZXIgQmxvY2sgQ2hhaW5pbmcgbW9kZS4NCisjZGVmaW5lIAlBVDkxQ19UREVTX09QTU9EX09GQiAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMTIpIC8vIChUREVTKSBPRkIgT3V0cHV0IEZlZWRiYWNrIG1vZGUuDQorI2RlZmluZSAJQVQ5MUNfVERFU19PUE1PRF9DRkIgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDEyKSAvLyAoVERFUykgQ0ZCIENpcGhlciBGZWVkYmFjayBtb2RlLg0KKyNkZWZpbmUgQVQ5MUNfVERFU19MT0QgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTUpIC8vIChUREVTKSBMYXN0IE91dHB1dCBEYXRhIE1vZGUNCisjZGVmaW5lIEFUOTFDX1RERVNfQ0ZCUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE2KSAvLyAoVERFUykgQ2lwaGVyIEZlZWRiYWNrIERhdGEgU2l6ZQ0KKyNkZWZpbmUgCUFUOTFDX1RERVNfQ0ZCU182NF9CSVQgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDE2KSAvLyAoVERFUykgNjQtYml0Lg0KKyNkZWZpbmUgCUFUOTFDX1RERVNfQ0ZCU18zMl9CSVQgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoVERFUykgMzItYml0Lg0KKyNkZWZpbmUgCUFUOTFDX1RERVNfQ0ZCU18xNl9CSVQgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDE2KSAvLyAoVERFUykgMTYtYml0Lg0KKyNkZWZpbmUgCUFUOTFDX1RERVNfQ0ZCU184X0JJVCAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE2KSAvLyAoVERFUykgOC1iaXQuDQorLy8gLS0tLS0tLS0gVERFU19JRVIgOiAoVERFUyBPZmZzZXQ6IDB4MTApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UREVTX0RBVFJEWSAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFRERVMpIERBVFJEWQ0KKyNkZWZpbmUgQVQ5MUNfVERFU19FTkRSWCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChUREVTKSBQREMgUmVhZCBCdWZmZXIgRW5kDQorI2RlZmluZSBBVDkxQ19UREVTX0VORFRYICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFRERVMpIFBEQyBXcml0ZSBCdWZmZXIgRW5kDQorI2RlZmluZSBBVDkxQ19UREVTX1JYQlVGRiAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKFRERVMpIFBEQyBSZWFkIEJ1ZmZlciBGdWxsDQorI2RlZmluZSBBVDkxQ19UREVTX1RYQlVGRSAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFRERVMpIFBEQyBXcml0ZSBCdWZmZXIgRW1wdHkNCisjZGVmaW5lIEFUOTFDX1RERVNfVVJBRCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoVERFUykgVW5zcGVjaWZpZWQgUmVnaXN0ZXIgQWNjZXNzIERldGVjdGlvbg0KKy8vIC0tLS0tLS0tIFRERVNfSURSIDogKFRERVMgT2Zmc2V0OiAweDE0KSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBUREVTX0lNUiA6IChUREVTIE9mZnNldDogMHgxOCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVERFU19JU1IgOiAoVERFUyBPZmZzZXQ6IDB4MWMpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UREVTX1VSQVQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxMikgLy8gKFRERVMpIFVuc3BlY2lmaWVkIFJlZ2lzdGVyIEFjY2VzcyBUeXBlIFN0YXR1cw0KKyNkZWZpbmUgCUFUOTFDX1RERVNfVVJBVF9JTl9EQVRfV1JJVEVfREFUUFJPQyAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDEyKSAvLyAoVERFUykgSW5wdXQgZGF0YSByZWdpc3RlciB3cml0dGVuIGR1cmluZyB0aGUgZGF0YSBwcm9jZXNzaW5nIGluIFBEQyBtb2RlLg0KKyNkZWZpbmUgCUFUOTFDX1RERVNfVVJBVF9PVVRfREFUX1JFQURfREFUUFJPQyAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvLyAoVERFUykgT3V0cHV0IGRhdGEgcmVnaXN0ZXIgcmVhZCBkdXJpbmcgdGhlIGRhdGEgcHJvY2Vzc2luZy4NCisjZGVmaW5lIAlBVDkxQ19UREVTX1VSQVRfTU9ERVJFR19XUklURV9EQVRQUk9DICgodW5zaWduZWQgaW50KSAweDIgPDwgMTIpIC8vIChUREVTKSBNb2RlIHJlZ2lzdGVyIHdyaXR0ZW4gZHVyaW5nIHRoZSBkYXRhIHByb2Nlc3NpbmcuDQorI2RlZmluZSAJQVQ5MUNfVERFU19VUkFUX1dPX1JFR19SRUFEICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTIpIC8vIChUREVTKSBXcml0ZS1vbmx5IHJlZ2lzdGVyIHJlYWQgYWNjZXNzLg0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgICBSRUdJU1RFUiBBRERSRVNTIERFRklOSVRJT04gRk9SIEFUOTFTQU03WDI1NiAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBTWVMgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBBSUMgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19BSUNfSVZSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYxMDAgKSAvKiAoQUlDKSBJUlEgVmVjdG9yIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BSUNfU01SICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYwMDAgKSAvKiAoQUlDKSBTb3VyY2UgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX0ZWUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMTA0ICkgLyogKEFJQykgRklRIFZlY3RvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX0RDUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMTM4ICkgLyogKEFJQykgRGVidWcgQ29udHJvbCBSZWdpc3RlciAoUHJvdGVjdCkgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19FT0lDUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjEzMCApIC8qIChBSUMpIEVuZCBvZiBJbnRlcnJ1cHQgQ29tbWFuZCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX1NWUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMDgwICkgLyogKEFJQykgU291cmNlIFZlY3RvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX0ZGU1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMTQ4ICkgLyogKEFJQykgRmFzdCBGb3JjaW5nIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX0lDQ1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMTI4ICkgLyogKEFJQykgSW50ZXJydXB0IENsZWFyIENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19JU1IgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjEwOCApIC8qIChBSUMpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19JTVIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjExMCApIC8qIChBSUMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BSUNfSVBSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYxMEMgKSAvKiAoQUlDKSBJbnRlcnJ1cHQgUGVuZGluZyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX0ZGRVIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMTQwICkgLyogKEFJQykgRmFzdCBGb3JjaW5nIEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX0lFQ1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMTIwICkgLyogKEFJQykgSW50ZXJydXB0IEVuYWJsZSBDb21tYW5kIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BSUNfSVNDUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYxMkMgKSAvKiAoQUlDKSBJbnRlcnJ1cHQgU2V0IENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19GRkRSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjE0NCApIC8qIChBSUMpIEZhc3QgRm9yY2luZyBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BSUNfQ0lTUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYxMTQgKSAvKiAoQUlDKSBDb3JlIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19JRENSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjEyNCApIC8qIChBSUMpIEludGVycnVwdCBEaXNhYmxlIENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19TUFUgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjEzNCApIC8qIChBSUMpIFNwdXJpb3VzIFZlY3RvciBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX0RCR1UgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19EQkdVX1RDUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYzMEMgKSAvKiAoUERDX0RCR1UpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfUk5QUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjMxMCApIC8qIChQRENfREJHVSkgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfVE5QUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjMxOCApIC8qIChQRENfREJHVSkgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19EQkdVX1RQUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYzMDggKSAvKiAoUERDX0RCR1UpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfUlBSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjMwMCApIC8qIChQRENfREJHVSkgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19EQkdVX1JDUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYzMDQgKSAvKiAoUERDX0RCR1UpIFJlY2VpdmUgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9STkNSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMzE0ICkgLyogKFBEQ19EQkdVKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9QVENSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMzIwICkgLyogKFBEQ19EQkdVKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9QVFNSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMzI0ICkgLyogKFBEQ19EQkdVKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19EQkdVX1ROQ1IgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYzMUMgKSAvKiAoUERDX0RCR1UpIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgREJHVSBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfRVhJRCAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjI0NCApIC8qIChEQkdVKSBDaGlwIElEIEV4dGVuc2lvbiBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9CUkdSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMjIwICkgLyogKERCR1UpIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfSURSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjIwQyApIC8qIChEQkdVKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9DU1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMjE0ICkgLyogKERCR1UpIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19EQkdVX0NJRFIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYyNDAgKSAvKiAoREJHVSkgQ2hpcCBJRCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9NUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMjA0ICkgLyogKERCR1UpIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfSU1SICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjIxMCApIC8qIChEQkdVKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9DUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMjAwICkgLyogKERCR1UpIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfRk5UUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjI0OCApIC8qIChEQkdVKSBGb3JjZSBOVFJTVCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9USFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMjFDICkgLyogKERCR1UpIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfUkhSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjIxOCApIC8qIChEQkdVKSBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19EQkdVX0lFUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYyMDggKSAvKiAoREJHVSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUElPQSBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfT0RSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjQxNCApIC8qIChQSU9BKSBPdXRwdXQgRGlzYWJsZSBSZWdpc3RlcnIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfU09EUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjQzMCApIC8qIChQSU9BKSBTZXQgT3V0cHV0IERhdGEgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfSVNSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjQ0QyApIC8qIChQSU9BKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX0FCU1IgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY0NzggKSAvKiAoUElPQSkgQUIgU2VsZWN0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9JRVIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNDQwICkgLyogKFBJT0EpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfUFBVRFIgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjQ2MCApIC8qIChQSU9BKSBQdWxsLXVwIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfSU1SICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjQ0OCApIC8qIChQSU9BKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9QRVIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNDAwICkgLyogKFBJT0EpIFBJTyBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfSUZEUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjQyNCApIC8qIChQSU9BKSBJbnB1dCBGaWx0ZXIgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9PV0RSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNEE0ICkgLyogKFBJT0EpIE91dHB1dCBXcml0ZSBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX01EU1IgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY0NTggKSAvKiAoUElPQSkgTXVsdGktZHJpdmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9JRFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNDQ0ICkgLyogKFBJT0EpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX09EU1IgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY0MzggKSAvKiAoUElPQSkgT3V0cHV0IERhdGEgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX1BQVVNSICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY0NjggKSAvKiAoUElPQSkgUHVsbC11cCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfT1dTUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjRBOCApIC8qIChQSU9BKSBPdXRwdXQgV3JpdGUgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX0JTUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY0NzQgKSAvKiAoUElPQSkgU2VsZWN0IEIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfT1dFUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjRBMCApIC8qIChQSU9BKSBPdXRwdXQgV3JpdGUgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX0lGRVIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY0MjAgKSAvKiAoUElPQSkgSW5wdXQgRmlsdGVyIEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9QRFNSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNDNDICkgLyogKFBJT0EpIFBpbiBEYXRhIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9QUFVFUiAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNDY0ICkgLyogKFBJT0EpIFB1bGwtdXAgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX09TUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY0MTggKSAvKiAoUElPQSkgT3V0cHV0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9BU1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNDcwICkgLyogKFBJT0EpIFNlbGVjdCBBIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX01ERFIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY0NTQgKSAvKiAoUElPQSkgTXVsdGktZHJpdmVyIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfQ09EUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjQzNCApIC8qIChQSU9BKSBDbGVhciBPdXRwdXQgRGF0YSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9NREVSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNDUwICkgLyogKFBJT0EpIE11bHRpLWRyaXZlciBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfUERSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjQwNCApIC8qIChQSU9BKSBQSU8gRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9JRlNSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNDI4ICkgLyogKFBJT0EpIElucHV0IEZpbHRlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfT0VSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjQxMCApIC8qIChQSU9BKSBPdXRwdXQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX1BTUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY0MDggKSAvKiAoUElPQSkgUElPIFN0YXR1cyBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUElPQiBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0JfT1dEUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjZBNCApIC8qIChQSU9CKSBPdXRwdXQgV3JpdGUgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9NREVSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNjUwICkgLyogKFBJT0IpIE11bHRpLWRyaXZlciBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0JfUFBVU1IgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjY2OCApIC8qIChQSU9CKSBQdWxsLXVwIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9JTVIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNjQ4ICkgLyogKFBJT0IpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX0FTUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY2NzAgKSAvKiAoUElPQikgU2VsZWN0IEEgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0JfUFBVRFIgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjY2MCApIC8qIChQSU9CKSBQdWxsLXVwIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0JfUFNSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjYwOCApIC8qIChQSU9CKSBQSU8gU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX0lFUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY2NDAgKSAvKiAoUElPQikgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9DT0RSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNjM0ICkgLyogKFBJT0IpIENsZWFyIE91dHB1dCBEYXRhIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX09XRVIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY2QTAgKSAvKiAoUElPQikgT3V0cHV0IFdyaXRlIEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9BQlNSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNjc4ICkgLyogKFBJT0IpIEFCIFNlbGVjdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0JfSUZEUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjYyNCApIC8qIChQSU9CKSBJbnB1dCBGaWx0ZXIgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9QRFNSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNjNDICkgLyogKFBJT0IpIFBpbiBEYXRhIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9JRFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNjQ0ICkgLyogKFBJT0IpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX09XU1IgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY2QTggKSAvKiAoUElPQikgT3V0cHV0IFdyaXRlIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9QRFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNjA0ICkgLyogKFBJT0IpIFBJTyBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX09EUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY2MTQgKSAvKiAoUElPQikgT3V0cHV0IERpc2FibGUgUmVnaXN0ZXJyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX0lGU1IgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY2MjggKSAvKiAoUElPQikgSW5wdXQgRmlsdGVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9QUFVFUiAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNjY0ICkgLyogKFBJT0IpIFB1bGwtdXAgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX1NPRFIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY2MzAgKSAvKiAoUElPQikgU2V0IE91dHB1dCBEYXRhIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX0lTUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY2NEMgKSAvKiAoUElPQikgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9PRFNSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNjM4ICkgLyogKFBJT0IpIE91dHB1dCBEYXRhIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9PU1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNjE4ICkgLyogKFBJT0IpIE91dHB1dCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0JfTURTUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjY1OCApIC8qIChQSU9CKSBNdWx0aS1kcml2ZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX0lGRVIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY2MjAgKSAvKiAoUElPQikgSW5wdXQgRmlsdGVyIEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9CU1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNjc0ICkgLyogKFBJT0IpIFNlbGVjdCBCIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX01ERFIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY2NTQgKSAvKiAoUElPQikgTXVsdGktZHJpdmVyIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0JfT0VSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjYxMCApIC8qIChQSU9CKSBPdXRwdXQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX1BFUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY2MDAgKSAvKiAoUElPQikgUElPIEVuYWJsZSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0tHUiBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX0NLR1JfTU9SICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkMyMCApIC8qIChDS0dSKSBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NLR1JfUExMUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkMyQyApIC8qIChDS0dSKSBQTEwgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NLR1JfTUNGUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkMyNCApIC8qIChDS0dSKSBNYWluIENsb2NrICBGcmVxdWVuY3kgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBNQyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19JRFIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkM2NCApIC8qIChQTUMpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QTUNfTU9SICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZDMjAgKSAvKiAoUE1DKSBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19QTExSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkMyQyApIC8qIChQTUMpIFBMTCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDRVIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGQzEwICkgLyogKFBNQykgUGVyaXBoZXJhbCBDbG9jayBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19QQ0tSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkM0MCApIC8qIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX01DS1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGQzMwICkgLyogKFBNQykgTWFzdGVyIENsb2NrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QTUNfU0NEUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZDMDQgKSAvKiAoUE1DKSBTeXN0ZW0gQ2xvY2sgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDRFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGQzE0ICkgLyogKFBNQykgUGVyaXBoZXJhbCBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QTUNfU0NTUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZDMDggKSAvKiAoUE1DKSBTeXN0ZW0gQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QTUNfUENTUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZDMTggKSAvKiAoUE1DKSBQZXJpcGhlcmFsIENsb2NrIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX01DRlIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGQzI0ICkgLyogKFBNQykgTWFpbiBDbG9jayAgRnJlcXVlbmN5IFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QTUNfU0NFUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZDMDAgKSAvKiAoUE1DKSBTeXN0ZW0gQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QTUNfSU1SICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZDNkMgKSAvKiAoUE1DKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX0lFUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGQzYwICkgLyogKFBNQykgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1NSICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGQzY4ICkgLyogKFBNQykgU3RhdHVzIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBSU1RDIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfUlNUQ19SQ1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGRDAwICkgLyogKFJTVEMpIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1JTVENfUk1SICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkQwOCApIC8qIChSU1RDKSBSZXNldCBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19SU1RDX1JTUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZEMDQgKSAvKiAoUlNUQykgUmVzZXQgU3RhdHVzIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBSVFRDIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfUlRUQ19SVFNSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGRDJDICkgLyogKFJUVEMpIFJlYWwtdGltZSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1JUVENfUlRNUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkQyMCApIC8qIChSVFRDKSBSZWFsLXRpbWUgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUlRUQ19SVFZSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGRDI4ICkgLyogKFJUVEMpIFJlYWwtdGltZSBWYWx1ZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUlRUQ19SVEFSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGRDI0ICkgLyogKFJUVEMpIFJlYWwtdGltZSBBbGFybSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUElUQyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1BJVENfUElWUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkQzOCApIC8qIChQSVRDKSBQZXJpb2QgSW50ZXJ2YWwgVmFsdWUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJVENfUElTUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkQzNCApIC8qIChQSVRDKSBQZXJpb2QgSW50ZXJ2YWwgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSVRDX1BJSVIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZEM0MgKSAvKiAoUElUQykgUGVyaW9kIEludGVydmFsIEltYWdlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSVRDX1BJTVIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZEMzAgKSAvKiAoUElUQykgUGVyaW9kIEludGVydmFsIE1vZGUgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFdEVEMgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19XRFRDX1dEQ1IgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZENDAgKSAvKiAoV0RUQykgV2F0Y2hkb2cgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfV0RUQ19XRFNSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGRDQ4ICkgLyogKFdEVEMpIFdhdGNoZG9nIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfV0RUQ19XRE1SICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGRDQ0ICkgLyogKFdEVEMpIFdhdGNoZG9nIE1vZGUgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFZSRUcgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19WUkVHX01SICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZENjAgKSAvKiAoVlJFRykgVm9sdGFnZSBSZWd1bGF0b3IgTW9kZSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgTUMgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19NQ19BU1IgICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZGMDQgKSAvKiAoTUMpIE1DIEFib3J0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfUkNSICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGRjAwICkgLyogKE1DKSBNQyBSZW1hcCBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19NQ19GQ1IgICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZGNjQgKSAvKiAoTUMpIE1DIEZsYXNoIENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0FBU1IgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkYwOCApIC8qIChNQykgTUMgQWJvcnQgQWRkcmVzcyBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0ZTUiAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkY2OCApIC8qIChNQykgTUMgRmxhc2ggU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19NQ19GTVIgICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZGNjAgKSAvKiAoTUMpIE1DIEZsYXNoIE1vZGUgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19TUEkxIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMV9QVENSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkU0MTIwICkgLyogKFBEQ19TUEkxKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMV9SUFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkU0MTAwICkgLyogKFBEQ19TUEkxKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTFfVE5DUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZFNDExQyApIC8qIChQRENfU1BJMSkgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkxX1RQUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTQxMDggKSAvKiAoUERDX1NQSTEpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTFfVE5QUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZFNDExOCApIC8qIChQRENfU1BJMSkgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkxX1RDUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTQxMEMgKSAvKiAoUERDX1NQSTEpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTFfUkNSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZFNDEwNCApIC8qIChQRENfU1BJMSkgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkxX1JOUFIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTQxMTAgKSAvKiAoUERDX1NQSTEpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkxX1JOQ1IgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTQxMTQgKSAvKiAoUERDX1NQSTEpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkxX1BUU1IgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTQxMjQgKSAvKiAoUERDX1NQSTEpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFNQSTEgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19TUEkxX0lNUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTQwMUMgKSAvKiAoU1BJMSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTFfSUVSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZFNDAxNCApIC8qIChTUEkxKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkxX01SICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTQwMDQgKSAvKiAoU1BJMSkgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMV9SRFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkU0MDA4ICkgLyogKFNQSTEpIFJlY2VpdmUgRGF0YSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMV9JRFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkU0MDE4ICkgLyogKFNQSTEpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkxX1NSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTQwMTAgKSAvKiAoU1BJMSkgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkxX1REUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTQwMEMgKSAvKiAoU1BJMSkgVHJhbnNtaXQgRGF0YSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMV9DUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkU0MDAwICkgLyogKFNQSTEpIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTFfQ1NSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZFNDAzMCApIC8qIChTUEkxKSBDaGlwIFNlbGVjdCBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX1NQSTAgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19TUEkwX1BUQ1IgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTAxMjAgKSAvKiAoUERDX1NQSTApIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkwX1RQUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTAxMDggKSAvKiAoUERDX1NQSTApIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTBfVENSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZFMDEwQyApIC8qIChQRENfU1BJMCkgVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMF9SQ1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkUwMTA0ICkgLyogKFBEQ19TUEkwKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTBfUFRTUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZFMDEyNCApIC8qIChQRENfU1BJMCkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMF9STlBSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkUwMTEwICkgLyogKFBEQ19TUEkwKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMF9SUFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkUwMTAwICkgLyogKFBEQ19TUEkwKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTBfVE5DUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZFMDExQyApIC8qIChQRENfU1BJMCkgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkwX1JOQ1IgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTAxMTQgKSAvKiAoUERDX1NQSTApIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkwX1ROUFIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTAxMTggKSAvKiAoUERDX1NQSTApIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgU1BJMCBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTBfSUVSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZFMDAxNCApIC8qIChTUEkwKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkwX1NSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTAwMTAgKSAvKiAoU1BJMCkgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkwX0lEUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTAwMTggKSAvKiAoU1BJMCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTBfQ1IgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZFMDAwMCApIC8qIChTUEkwKSBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkwX01SICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTAwMDQgKSAvKiAoU1BJMCkgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMF9JTVIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkUwMDFDICkgLyogKFNQSTApIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkwX1REUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTAwMEMgKSAvKiAoU1BJMCkgVHJhbnNtaXQgRGF0YSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMF9SRFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkUwMDA4ICkgLyogKFNQSTApIFJlY2VpdmUgRGF0YSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMF9DU1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkUwMDMwICkgLyogKFNQSTApIENoaXAgU2VsZWN0IFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfVVMxIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1JOQ1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkM0MTE0ICkgLyogKFBEQ19VUzEpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfUFRDUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzQxMjAgKSAvKiAoUERDX1VTMSkgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMV9UQ1IgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDNDEwQyApIC8qIChQRENfVVMxKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfUFRTUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzQxMjQgKSAvKiAoUERDX1VTMSkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1ROUFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkM0MTE4ICkgLyogKFBEQ19VUzEpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1JDUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkM0MTA0ICkgLyogKFBEQ19VUzEpIFJlY2VpdmUgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1JOUFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkM0MTEwICkgLyogKFBEQ19VUzEpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfUlBSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzQxMDAgKSAvKiAoUERDX1VTMSkgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfVE5DUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzQxMUMgKSAvKiAoUERDX1VTMSkgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfVFBSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzQxMDggKSAvKiAoUERDX1VTMSkgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVVMxIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX0lGICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkM0MDRDICkgLyogKFVTMSkgSVJEQV9GSUxURVIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMV9ORVIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDNDA0NCApIC8qIChVUzEpIE5iIEVycm9ycyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1JUT1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkM0MDI0ICkgLyogKFVTMSkgUmVjZWl2ZXIgVGltZS1vdXQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMV9DU1IgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDNDAxNCApIC8qIChVUzEpIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfSURSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzQwMEMgKSAvKiAoVVMxKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX0lFUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkM0MDA4ICkgLyogKFVTMSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1RIUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkM0MDFDICkgLyogKFVTMSkgVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1RUR1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkM0MDI4ICkgLyogKFVTMSkgVHJhbnNtaXR0ZXIgVGltZS1ndWFyZCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1JIUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkM0MDE4ICkgLyogKFVTMSkgUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX0JSR1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkM0MDIwICkgLyogKFVTMSkgQmF1ZCBSYXRlIEdlbmVyYXRvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX0lNUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkM0MDEwICkgLyogKFVTMSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMV9GSURJICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDNDA0MCApIC8qIChVUzEpIEZJX0RJX1JhdGlvIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfQ1IgICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzQwMDAgKSAvKiAoVVMxKSBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfTVIgICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzQwMDQgKSAvKiAoVVMxKSBNb2RlIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfVVMwIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX1ROUFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkMwMTE4ICkgLyogKFBEQ19VUzApIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX1JOUFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkMwMTEwICkgLyogKFBEQ19VUzApIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzBfVENSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzAxMEMgKSAvKiAoUERDX1VTMCkgVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX1BUQ1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkMwMTIwICkgLyogKFBEQ19VUzApIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzBfUFRTUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzAxMjQgKSAvKiAoUERDX1VTMCkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX1ROQ1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkMwMTFDICkgLyogKFBEQ19VUzApIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX1RQUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkMwMTA4ICkgLyogKFBEQ19VUzApIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9SQ1IgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDMDEwNCApIC8qIChQRENfVVMwKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9SUFIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDMDEwMCApIC8qIChQRENfVVMwKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9STkNSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDMDExNCApIC8qIChQRENfVVMwKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVVMwIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX0JSR1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkMwMDIwICkgLyogKFVTMCkgQmF1ZCBSYXRlIEdlbmVyYXRvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX05FUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkMwMDQ0ICkgLyogKFVTMCkgTmIgRXJyb3JzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzBfQ1IgICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzAwMDAgKSAvKiAoVVMwKSBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzBfSU1SICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzAwMTAgKSAvKiAoVVMwKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX0ZJREkgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkMwMDQwICkgLyogKFVTMCkgRklfRElfUmF0aW8gUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9UVEdSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDMDAyOCApIC8qIChVUzApIFRyYW5zbWl0dGVyIFRpbWUtZ3VhcmQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9NUiAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDMDAwNCApIC8qIChVUzApIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9SVE9SICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDMDAyNCApIC8qIChVUzApIFJlY2VpdmVyIFRpbWUtb3V0IFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzBfQ1NSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzAwMTQgKSAvKiAoVVMwKSBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX1JIUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkMwMDE4ICkgLyogKFVTMCkgUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX0lEUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkMwMDBDICkgLyogKFVTMCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9USFIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDMDAxQyApIC8qIChVUzApIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9JRiAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDMDA0QyApIC8qIChVUzApIElSREFfRklMVEVSIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzBfSUVSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzAwMDggKSAvKiAoVVMwKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfU1NDIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1ROQ1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ0MTFDICkgLyogKFBEQ19TU0MpIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1JQUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ0MTAwICkgLyogKFBEQ19TU0MpIFJlY2VpdmUgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1JOQ1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ0MTE0ICkgLyogKFBEQ19TU0MpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfVFBSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDQxMDggKSAvKiAoUERDX1NTQykgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1BUQ1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ0MTIwICkgLyogKFBEQ19TU0MpIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfVENSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDQxMEMgKSAvKiAoUERDX1NTQykgVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1JDUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ0MTA0ICkgLyogKFBEQ19TU0MpIFJlY2VpdmUgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1JOUFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ0MTEwICkgLyogKFBEQ19TU0MpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfVE5QUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDQxMTggKSAvKiAoUERDX1NTQykgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfUFRTUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDQxMjQgKSAvKiAoUERDX1NTQykgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgU1NDIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1JIUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ0MDIwICkgLyogKFNTQykgUmVjZWl2ZSBIb2xkaW5nIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfUlNIUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDQwMzAgKSAvKiAoU1NDKSBSZWNlaXZlIFN5bmMgSG9sZGluZyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1RGTVIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ0MDFDICkgLyogKFNTQykgVHJhbnNtaXQgRnJhbWUgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0lEUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ0MDQ4ICkgLyogKFNTQykgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19USFIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZENDAyNCApIC8qIChTU0MpIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19SQ01SICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZENDAxMCApIC8qIChTU0MpIFJlY2VpdmUgQ2xvY2sgTW9kZVJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfSUVSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDQwNDQgKSAvKiAoU1NDKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfVFNIUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDQwMzQgKSAvKiAoU1NDKSBUcmFuc21pdCBTeW5jIEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19TUiAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZENDA0MCApIC8qIChTU0MpIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0NNUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ0MDA0ICkgLyogKFNTQykgQ2xvY2sgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1RDTVIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ0MDE4ICkgLyogKFNTQykgVHJhbnNtaXQgQ2xvY2sgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0NSICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ0MDAwICkgLyogKFNTQykgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0lNUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ0MDRDICkgLyogKFNTQykgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19SRk1SICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZENDAxNCApIC8qIChTU0MpIFJlY2VpdmUgRnJhbWUgTW9kZSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVFdJIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX0lFUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkI4MDI0ICkgLyogKFRXSSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX0NSICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkI4MDAwICkgLyogKFRXSSkgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX1NSICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkI4MDIwICkgLyogKFRXSSkgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UV0lfSU1SICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQjgwMkMgKSAvKiAoVFdJKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX1RIUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkI4MDM0ICkgLyogKFRXSSkgVHJhbnNtaXQgSG9sZGluZyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX0lEUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkI4MDI4ICkgLyogKFRXSSkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9JQURSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZCODAwQyApIC8qIChUV0kpIEludGVybmFsIEFkZHJlc3MgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9NTVIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZCODAwNCApIC8qIChUV0kpIE1hc3RlciBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UV0lfQ1dHUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQjgwMTAgKSAvKiAoVFdJKSBDbG9jayBXYXZlZm9ybSBHZW5lcmF0b3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9SSFIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZCODAzMCApIC8qIChUV0kpIFJlY2VpdmUgSG9sZGluZyBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUFdNQ19DSDMgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NIM19DVVBEUiAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQ0MyNzAgKSAvKiAoUFdNQ19DSDMpIENoYW5uZWwgVXBkYXRlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NIM19SZXNlcnZlZCAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQ0MyNzQgKSAvKiAoUFdNQ19DSDMpIFJlc2VydmVkICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NIM19DUFJEUiAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQ0MyNjggKSAvKiAoUFdNQ19DSDMpIENoYW5uZWwgUGVyaW9kIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NIM19DRFRZUiAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQ0MyNjQgKSAvKiAoUFdNQ19DSDMpIENoYW5uZWwgRHV0eSBDeWNsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDNfQ0NOVFIgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMjZDICkgLyogKFBXTUNfQ0gzKSBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0gzX0NNUiAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzI2MCApIC8qIChQV01DX0NIMykgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQV01DX0NIMiBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0gyX1Jlc2VydmVkICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzI1NCApIC8qIChQV01DX0NIMikgUmVzZXJ2ZWQgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0gyX0NNUiAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzI0MCApIC8qIChQV01DX0NIMikgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NIMl9DQ05UUiAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQ0MyNEMgKSAvKiAoUFdNQ19DSDIpIENoYW5uZWwgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDJfQ1BSRFIgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMjQ4ICkgLyogKFBXTUNfQ0gyKSBDaGFubmVsIFBlcmlvZCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDJfQ1VQRFIgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMjUwICkgLyogKFBXTUNfQ0gyKSBDaGFubmVsIFVwZGF0ZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDJfQ0RUWVIgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMjQ0ICkgLyogKFBXTUNfQ0gyKSBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBXTUNfQ0gxIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDFfUmVzZXJ2ZWQgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMjM0ICkgLyogKFBXTUNfQ0gxKSBSZXNlcnZlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDFfQ1VQRFIgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMjMwICkgLyogKFBXTUNfQ0gxKSBDaGFubmVsIFVwZGF0ZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDFfQ1BSRFIgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMjI4ICkgLyogKFBXTUNfQ0gxKSBDaGFubmVsIFBlcmlvZCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDFfQ0NOVFIgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMjJDICkgLyogKFBXTUNfQ0gxKSBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0gxX0NEVFlSICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzIyNCApIC8qIChQV01DX0NIMSkgQ2hhbm5lbCBEdXR5IEN5Y2xlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NIMV9DTVIgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQ0MyMjAgKSAvKiAoUFdNQ19DSDEpIENoYW5uZWwgTW9kZSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUFdNQ19DSDAgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NIMF9SZXNlcnZlZCAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQ0MyMTQgKSAvKiAoUFdNQ19DSDApIFJlc2VydmVkICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NIMF9DUFJEUiAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQ0MyMDggKSAvKiAoUFdNQ19DSDApIENoYW5uZWwgUGVyaW9kIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NIMF9DRFRZUiAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQ0MyMDQgKSAvKiAoUFdNQ19DSDApIENoYW5uZWwgRHV0eSBDeWNsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDBfQ01SICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMjAwICkgLyogKFBXTUNfQ0gwKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0gwX0NVUERSICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzIxMCApIC8qIChQV01DX0NIMCkgQ2hhbm5lbCBVcGRhdGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0gwX0NDTlRSICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzIwQyApIC8qIChQV01DX0NIMCkgQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQV01DIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19JRFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMDE0ICkgLyogKFBXTUMpIFBXTUMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfRElTICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzAwOCApIC8qIChQV01DKSBQV01DIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfSUVSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzAxMCApIC8qIChQV01DKSBQV01DIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfVlIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzBGQyApIC8qIChQV01DKSBQV01DIFZlcnNpb24gUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfSVNSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzAxQyApIC8qIChQV01DKSBQV01DIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfU1IgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzAwQyApIC8qIChQV01DKSBQV01DIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19JTVIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMDE4ICkgLyogKFBXTUMpIFBXTUMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfTVIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzAwMCApIC8qIChQV01DKSBQV01DIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfRU5BICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzAwNCApIC8qIChQV01DKSBQV01DIEVuYWJsZSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVURQIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0lNUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkIwMDE4ICkgLyogKFVEUCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9GQUREUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZCMDAwOCApIC8qIChVRFApIEZ1bmN0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9OVU0gICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZCMDAwMCApIC8qIChVRFApIEZyYW1lIE51bWJlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0ZEUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkIwMDUwICkgLyogKFVEUCkgRW5kcG9pbnQgRklGTyBEYXRhIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VRFBfSVNSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQjAwMUMgKSAvKiAoVURQKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VRFBfQ1NSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQjAwMzAgKSAvKiAoVURQKSBFbmRwb2ludCBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9JRFIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZCMDAxNCApIC8qIChVRFApIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VRFBfSUNSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQjAwMjAgKSAvKiAoVURQKSBJbnRlcnJ1cHQgQ2xlYXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9SU1RFUCAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZCMDAyOCApIC8qIChVRFApIFJlc2V0IEVuZHBvaW50IFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VRFBfVFhWQyAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQjAwNzQgKSAvKiAoVURQKSBUcmFuc2NlaXZlciBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VRFBfR0xCU1RBVEUgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQjAwMDQgKSAvKiAoVURQKSBHbG9iYWwgU3RhdGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9JRVIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZCMDAxMCApIC8qIChVRFApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRDMCBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1RDMF9TUiAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDAyMCApIC8qIChUQzApIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMwX1JDICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMDFDICkgLyogKFRDMCkgUmVnaXN0ZXIgQyAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMwX1JCICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMDE4ICkgLyogKFRDMCkgUmVnaXN0ZXIgQiAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMwX0NDUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMDAwICkgLyogKFRDMCkgQ2hhbm5lbCBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UQzBfQ01SICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTAwMDQgKSAvKiAoVEMwKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXIgKENhcHR1cmUgTW9kZSAvIFdhdmVmb3JtIE1vZGUpICovDQotI2RlZmluZSBBVDkxQ19UQzBfSUVSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTAwMjQgKSAvKiAoVEMwKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UQzBfUkEgICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTAwMTQgKSAvKiAoVEMwKSBSZWdpc3RlciBBICovDQotI2RlZmluZSBBVDkxQ19UQzBfSURSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTAwMjggKSAvKiAoVEMwKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMwX0NWICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMDEwICkgLyogKFRDMCkgQ291bnRlciBWYWx1ZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMwX0lNUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMDJDICkgLyogKFRDMCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRDMSBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1RDMV9SQiAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDA1OCApIC8qIChUQzEpIFJlZ2lzdGVyIEIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMV9DQ1IgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDA0MCApIC8qIChUQzEpIENoYW5uZWwgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMxX0lFUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMDY0ICkgLyogKFRDMSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMxX0lEUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMDY4ICkgLyogKFRDMSkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMV9TUiAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDA2MCApIC8qIChUQzEpIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMxX0NNUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMDQ0ICkgLyogKFRDMSkgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyIChDYXB0dXJlIE1vZGUgLyBXYXZlZm9ybSBNb2RlKSAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMxX1JBICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMDU0ICkgLyogKFRDMSkgUmVnaXN0ZXIgQSAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMxX1JDICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMDVDICkgLyogKFRDMSkgUmVnaXN0ZXIgQyAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMxX0lNUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMDZDICkgLyogKFRDMSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMV9DViAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDA1MCApIC8qIChUQzEpIENvdW50ZXIgVmFsdWUgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRDMiBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1RDMl9DTVIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDA4NCApIC8qIChUQzIpIENoYW5uZWwgTW9kZSBSZWdpc3RlciAoQ2FwdHVyZSBNb2RlIC8gV2F2ZWZvcm0gTW9kZSkgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMl9DQ1IgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDA4MCApIC8qIChUQzIpIENoYW5uZWwgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMyX0NWICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMDkwICkgLyogKFRDMikgQ291bnRlciBWYWx1ZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMyX1JBICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMDk0ICkgLyogKFRDMikgUmVnaXN0ZXIgQSAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMyX1JCICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMDk4ICkgLyogKFRDMikgUmVnaXN0ZXIgQiAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMyX0lEUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMEE4ICkgLyogKFRDMikgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMl9JTVIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDBBQyApIC8qIChUQzIpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UQzJfUkMgICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTAwOUMgKSAvKiAoVEMyKSBSZWdpc3RlciBDICovDQotI2RlZmluZSBBVDkxQ19UQzJfSUVSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTAwQTQgKSAvKiAoVEMyKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UQzJfU1IgICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTAwQTAgKSAvKiAoVEMyKSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRDQiBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1RDQl9CTVIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDBDNCApIC8qIChUQ0IpIFRDIEJsb2NrIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDQl9CQ1IgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDBDMCApIC8qIChUQ0IpIFRDIEJsb2NrIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENBTl9NQjAgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIwX01ETCAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyMTQgKSAvKiAoQ0FOX01CMCkgTWFpbEJveCBEYXRhIExvdyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMF9NQU0gICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjA0ICkgLyogKENBTl9NQjApIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIwX01DUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyMUMgKSAvKiAoQ0FOX01CMCkgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIwX01JRCAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyMDggKSAvKiAoQ0FOX01CMCkgTWFpbEJveCBJRCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMF9NU1IgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjEwICkgLyogKENBTl9NQjApIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIwX01GSUQgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyMEMgKSAvKiAoQ0FOX01CMCkgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjBfTURIICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDIxOCApIC8qIChDQU5fTUIwKSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMF9NTVIgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjAwICkgLyogKENBTl9NQjApIE1haWxCb3ggTW9kZSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CMSBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjFfTURMICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDIzNCApIC8qIChDQU5fTUIxKSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIxX01JRCAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyMjggKSAvKiAoQ0FOX01CMSkgTWFpbEJveCBJRCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMV9NTVIgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjIwICkgLyogKENBTl9NQjEpIE1haWxCb3ggTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMV9NU1IgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjMwICkgLyogKENBTl9NQjEpIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIxX01BTSAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyMjQgKSAvKiAoQ0FOX01CMSkgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjFfTURIICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDIzOCApIC8qIChDQU5fTUIxKSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMV9NQ1IgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjNDICkgLyogKENBTl9NQjEpIE1haWxCb3ggQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMV9NRklEICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjJDICkgLyogKENBTl9NQjEpIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU5fTUIyIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NQ1IgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjVDICkgLyogKENBTl9NQjIpIE1haWxCb3ggQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NREggICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjU4ICkgLyogKENBTl9NQjIpIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIyX01JRCAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyNDggKSAvKiAoQ0FOX01CMikgTWFpbEJveCBJRCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NREwgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjU0ICkgLyogKENBTl9NQjIpIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjJfTU1SICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDI0MCApIC8qIChDQU5fTUIyKSBNYWlsQm94IE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjJfTUFNICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDI0NCApIC8qIChDQU5fTUIyKSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NRklEICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjRDICkgLyogKENBTl9NQjIpIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIyX01TUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyNTAgKSAvKiAoQ0FOX01CMikgTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENBTl9NQjMgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIzX01GSUQgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyNkMgKSAvKiAoQ0FOX01CMykgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjNfTUFNICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDI2NCApIC8qIChDQU5fTUIzKSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CM19NSUQgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjY4ICkgLyogKENBTl9NQjMpIE1haWxCb3ggSUQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjNfTUNSICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDI3QyApIC8qIChDQU5fTUIzKSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjNfTU1SICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDI2MCApIC8qIChDQU5fTUIzKSBNYWlsQm94IE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjNfTVNSICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDI3MCApIC8qIChDQU5fTUIzKSBNYWlsQm94IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CM19NREwgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjc0ICkgLyogKENBTl9NQjMpIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjNfTURIICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDI3OCApIC8qIChDQU5fTUIzKSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CNCBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjRfTUlEICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDI4OCApIC8qIChDQU5fTUI0KSBNYWlsQm94IElEIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI0X01NUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyODAgKSAvKiAoQ0FOX01CNCkgTWFpbEJveCBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI0X01ESCAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyOTggKSAvKiAoQ0FOX01CNCkgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjRfTUZJRCAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDI4QyApIC8qIChDQU5fTUI0KSBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CNF9NU1IgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjkwICkgLyogKENBTl9NQjQpIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI0X01DUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyOUMgKSAvKiAoQ0FOX01CNCkgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI0X01ETCAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyOTQgKSAvKiAoQ0FOX01CNCkgTWFpbEJveCBEYXRhIExvdyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CNF9NQU0gICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjg0ICkgLyogKENBTl9NQjQpIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU5fTUI1IHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CNV9NU1IgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMkIwICkgLyogKENBTl9NQjUpIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI1X01DUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyQkMgKSAvKiAoQ0FOX01CNSkgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI1X01GSUQgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyQUMgKSAvKiAoQ0FOX01CNSkgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjVfTURIICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDJCOCApIC8qIChDQU5fTUI1KSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CNV9NSUQgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMkE4ICkgLyogKENBTl9NQjUpIE1haWxCb3ggSUQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjVfTU1SICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDJBMCApIC8qIChDQU5fTUI1KSBNYWlsQm94IE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjVfTURMICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDJCNCApIC8qIChDQU5fTUI1KSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI1X01BTSAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyQTQgKSAvKiAoQ0FOX01CNSkgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENBTl9NQjYgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI2X01GSUQgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyQ0MgKSAvKiAoQ0FOX01CNikgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjZfTUlEICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDJDOCApIC8qIChDQU5fTUI2KSBNYWlsQm94IElEIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI2X01BTSAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyQzQgKSAvKiAoQ0FOX01CNikgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjZfTVNSICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDJEMCApIC8qIChDQU5fTUI2KSBNYWlsQm94IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CNl9NREwgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMkQ0ICkgLyogKENBTl9NQjYpIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjZfTUNSICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDJEQyApIC8qIChDQU5fTUI2KSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjZfTURIICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDJEOCApIC8qIChDQU5fTUI2KSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CNl9NTVIgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMkMwICkgLyogKENBTl9NQjYpIE1haWxCb3ggTW9kZSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CNyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjdfTUNSICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDJGQyApIC8qIChDQU5fTUI3KSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjdfTURIICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDJGOCApIC8qIChDQU5fTUI3KSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CN19NRklEICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMkVDICkgLyogKENBTl9NQjcpIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI3X01ETCAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyRjQgKSAvKiAoQ0FOX01CNykgTWFpbEJveCBEYXRhIExvdyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CN19NSUQgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMkU4ICkgLyogKENBTl9NQjcpIE1haWxCb3ggSUQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjdfTU1SICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDJFMCApIC8qIChDQU5fTUI3KSBNYWlsQm94IE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjdfTUFNICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDJFNCApIC8qIChDQU5fTUI3KSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CN19NU1IgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMkYwICkgLyogKENBTl9NQjcpIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU4gcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19DQU5fVENSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAwMjQgKSAvKiAoQ0FOKSBUcmFuc2ZlciBDb21tYW5kIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fSU1SICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAwMEMgKSAvKiAoQ0FOKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX0lFUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMDA0ICkgLyogKENBTikgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX0VDUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMDIwICkgLyogKENBTikgRXJyb3IgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1RJTUVTVFAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMDFDICkgLyogKENBTikgVGltZSBTdGFtcCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01SICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMDAwICkgLyogKENBTikgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX0lEUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMDA4ICkgLyogKENBTikgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9BQ1IgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDAyOCApIC8qIChDQU4pIEFib3J0IENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9USU0gICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDAxOCApIC8qIChDQU4pIFRpbWVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fU1IgICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAwMTAgKSAvKiAoQ0FOKSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9CUiAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDAxNCApIC8qIChDQU4pIEJhdWRyYXRlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fVlIgICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAwRkMgKSAvKiAoQ0FOKSBWZXJzaW9uIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBFTUFDIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19JU1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDI0ICkgLyogKEVNQUMpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfU0E0SCAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzBCNCApIC8qIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDQgVG9wLCBMYXN0IDIgYnl0ZXMgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfU0ExTCAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzA5OCApIC8qIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDEgQm90dG9tLCBGaXJzdCA0IGJ5dGVzICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0VMRSAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGREMwNzggKSAvKiAoRU1BQykgRXhjZXNzaXZlIExlbmd0aCBFcnJvcnMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfTENPTCAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzA1QyApIC8qIChFTUFDKSBMYXRlIENvbGxpc2lvbiBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19STEUgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDg4ICkgLyogKEVNQUMpIFJlY2VpdmUgTGVuZ3RoIEZpZWxkIE1pc21hdGNoIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1dPTCAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGREMwQzQgKSAvKiAoRU1BQykgV2FrZSBPbiBMQU4gUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfRFRGICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzA1OCApIC8qIChFTUFDKSBEZWZlcnJlZCBUcmFuc21pc3Npb24gRnJhbWUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfVFVORCAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzA2NCApIC8qIChFTUFDKSBUcmFuc21pdCBVbmRlcnJ1biBFcnJvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19OQ1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDAwICkgLyogKEVNQUMpIE5ldHdvcmsgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19TQTRMICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMEIwICkgLyogKEVNQUMpIFNwZWNpZmljIEFkZHJlc3MgNCBCb3R0b20sIEZpcnN0IDQgYnl0ZXMgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfUlNSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzAyMCApIC8qIChFTUFDKSBSZWNlaXZlIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19TQTNMICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMEE4ICkgLyogKEVNQUMpIFNwZWNpZmljIEFkZHJlc3MgMyBCb3R0b20sIEZpcnN0IDQgYnl0ZXMgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfVFNSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzAxNCApIC8qIChFTUFDKSBUcmFuc21pdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfSURSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzAyQyApIC8qIChFTUFDKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19SU0UgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDc0ICkgLyogKEVNQUMpIFJlY2VpdmUgU3ltYm9sIEVycm9ycyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19FQ09MICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDYwICkgLyogKEVNQUMpIEV4Y2Vzc2l2ZSBDb2xsaXNpb24gUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfVElEICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzBCOCApIC8qIChFTUFDKSBUeXBlIElEIENoZWNraW5nIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0hSQiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGREMwOTAgKSAvKiAoRU1BQykgSGFzaCBBZGRyZXNzIEJvdHRvbVszMTowXSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19UQlFQICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDFDICkgLyogKEVNQUMpIFRyYW5zbWl0IEJ1ZmZlciBRdWV1ZSBQb2ludGVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1VTUklPICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGREMwQzAgKSAvKiAoRU1BQykgVVNFUiBJbnB1dC9PdXRwdXQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfUFRSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzAzOCApIC8qIChFTUFDKSBQYXVzZSBUaW1lIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1NBMkggICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGREMwQTQgKSAvKiAoRU1BQykgU3BlY2lmaWMgQWRkcmVzcyAyIFRvcCwgTGFzdCAyIGJ5dGVzICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1JPViAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGREMwNzAgKSAvKiAoRU1BQykgUmVjZWl2ZSBPdmVycnVuIEVycm9ycyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19BTEUgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDU0ICkgLyogKEVNQUMpIEFsaWdubWVudCBFcnJvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19SSkEgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDdDICkgLyogKEVNQUMpIFJlY2VpdmUgSmFiYmVycyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19SQlFQICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDE4ICkgLyogKEVNQUMpIFJlY2VpdmUgQnVmZmVyIFF1ZXVlIFBvaW50ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfVFBGICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzA4QyApIC8qIChFTUFDKSBUcmFuc21pdHRlZCBQYXVzZSBGcmFtZXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfTkNGR1IgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzAwNCApIC8qIChFTUFDKSBOZXR3b3JrIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfSFJUICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzA5NCApIC8qIChFTUFDKSBIYXNoIEFkZHJlc3MgVG9wWzYzOjMyXSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19VU0YgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDgwICkgLyogKEVNQUMpIFVuZGVyc2l6ZSBGcmFtZXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfRkNTRSAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzA1MCApIC8qIChFTUFDKSBGcmFtZSBDaGVjayBTZXF1ZW5jZSBFcnJvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19UUFEgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMEJDICkgLyogKEVNQUMpIFRyYW5zbWl0IFBhdXNlIFF1YW50dW0gUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfTUFOICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzAzNCApIC8qIChFTUFDKSBQSFkgTWFpbnRlbmFuY2UgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfRlRPICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzA0MCApIC8qIChFTUFDKSBGcmFtZXMgVHJhbnNtaXR0ZWQgT0sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfUkVWICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzBGQyApIC8qIChFTUFDKSBSZXZpc2lvbiBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19JTVIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDMwICkgLyogKEVNQUMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1NDRiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGREMwNDQgKSAvKiAoRU1BQykgU2luZ2xlIENvbGxpc2lvbiBGcmFtZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19QRlIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDNDICkgLyogKEVNQUMpIFBhdXNlIEZyYW1lcyByZWNlaXZlZCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19NQ0YgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDQ4ICkgLyogKEVNQUMpIE11bHRpcGxlIENvbGxpc2lvbiBGcmFtZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19OU1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDA4ICkgLyogKEVNQUMpIE5ldHdvcmsgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1NBMkwgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGREMwQTAgKSAvKiAoRU1BQykgU3BlY2lmaWMgQWRkcmVzcyAyIEJvdHRvbSwgRmlyc3QgNCBieXRlcyAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19GUk8gICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDRDICkgLyogKEVNQUMpIEZyYW1lcyBSZWNlaXZlZCBPSyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19JRVIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDI4ICkgLyogKEVNQUMpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfU0ExSCAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzA5QyApIC8qIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDEgVG9wLCBMYXN0IDIgYnl0ZXMgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfQ1NFICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzA2OCApIC8qIChFTUFDKSBDYXJyaWVyIFNlbnNlIEVycm9yIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1NBM0ggICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGREMwQUMgKSAvKiAoRU1BQykgU3BlY2lmaWMgQWRkcmVzcyAzIFRvcCwgTGFzdCAyIGJ5dGVzICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1JSRSAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGREMwNkMgKSAvKiAoRU1BQykgUmVjZWl2ZSBSZXNzb3VyY2UgRXJyb3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfU1RFICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzA4NCApIC8qIChFTUFDKSBTUUUgVGVzdCBFcnJvciBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX0FEQyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19QVFNSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEODEyNCApIC8qIChQRENfQURDKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRENfUFRDUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDgxMjAgKSAvKiAoUERDX0FEQykgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19UTlBSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEODExOCApIC8qIChQRENfQURDKSBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19UTkNSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEODExQyApIC8qIChQRENfQURDKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19STlBSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEODExMCApIC8qIChQRENfQURDKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1JOQ1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ4MTE0ICkgLyogKFBEQ19BREMpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRENfUlBSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDgxMDAgKSAvKiAoUERDX0FEQykgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRENfVENSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDgxMEMgKSAvKiAoUERDX0FEQykgVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1RQUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ4MTA4ICkgLyogKFBEQ19BREMpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19SQ1IgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEODEwNCApIC8qIChQRENfQURDKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIEFEQyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DRFIyICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEODAzOCApIC8qIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NEUjMgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ4MDNDICkgLyogKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAzICovDQotI2RlZmluZSBBVDkxQ19BRENfQ0RSMCAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDgwMzAgKSAvKiAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDAgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DRFI1ICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEODA0NCApIC8qIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNSAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NIRFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ4MDE0ICkgLyogKEFEQykgQURDIENoYW5uZWwgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1NSICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ4MDFDICkgLyogKEFEQykgQURDIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NEUjQgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ4MDQwICkgLyogKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA0ICovDQotI2RlZmluZSBBVDkxQ19BRENfQ0RSMSAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDgwMzQgKSAvKiAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDEgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19MQ0RSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEODAyMCApIC8qIChBREMpIEFEQyBMYXN0IENvbnZlcnRlZCBEYXRhIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRENfSURSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDgwMjggKSAvKiAoQURDKSBBREMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DUiAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEODAwMCApIC8qIChBREMpIEFEQyBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRENfQ0RSNyAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDgwNEMgKSAvKiAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDcgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DRFI2ICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEODA0OCApIC8qIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNiAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0lFUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ4MDI0ICkgLyogKEFEQykgQURDIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DSEVSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEODAxMCApIC8qIChBREMpIEFEQyBDaGFubmVsIEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NIU1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ4MDE4ICkgLyogKEFEQykgQURDIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRENfTVIgICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDgwMDQgKSAvKiAoQURDKSBBREMgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0lNUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ4MDJDICkgLyogKEFEQykgQURDIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfQUVTIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX1RQUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE0MTA4ICkgLyogKFBEQ19BRVMpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19QVENSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBNDEyMCApIC8qIChQRENfQUVTKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX1JOUFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE0MTEwICkgLyogKFBEQ19BRVMpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRVNfVE5DUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTQxMUMgKSAvKiAoUERDX0FFUykgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRVNfVENSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTQxMEMgKSAvKiAoUERDX0FFUykgVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX1JDUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE0MTA0ICkgLyogKFBEQ19BRVMpIFJlY2VpdmUgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX1JOQ1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE0MTE0ICkgLyogKFBEQ19BRVMpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRVNfVE5QUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTQxMTggKSAvKiAoUERDX0FFUykgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRVNfUlBSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTQxMDAgKSAvKiAoUERDX0FFUykgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRVNfUFRTUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTQxMjQgKSAvKiAoUERDX0FFUykgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQUVTIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX0lWeFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE0MDYwICkgLyogKEFFUykgSW5pdGlhbGl6YXRpb24gVmVjdG9yIHggUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19NUiAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBNDAwNCApIC8qIChBRVMpIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19WUiAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBNDBGQyApIC8qIChBRVMpIEFFUyBWZXJzaW9uIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRVNfT0RBVEF4UiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTQwNTAgKSAvKiAoQUVTKSBPdXRwdXQgRGF0YSB4IFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRVNfSURBVEF4UiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTQwNDAgKSAvKiAoQUVTKSBJbnB1dCBEYXRhIHggUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19DUiAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBNDAwMCApIC8qIChBRVMpIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19JRFIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBNDAxNCApIC8qIChBRVMpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRVNfSU1SICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTQwMTggKSAvKiAoQUVTKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX0lFUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE0MDEwICkgLyogKEFFUykgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX0tFWVd4UiAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE0MDIwICkgLyogKEFFUykgS2V5IFdvcmQgeCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX0lTUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE0MDFDICkgLyogKEFFUykgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX1RERVMgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19UREVTX1JOQ1IgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTgxMTQgKSAvKiAoUERDX1RERVMpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UREVTX1RDUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTgxMEMgKSAvKiAoUERDX1RERVMpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfUkNSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBODEwNCApIC8qIChQRENfVERFUykgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UREVTX1ROUFIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTgxMTggKSAvKiAoUERDX1RERVMpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19STlBSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE4MTEwICkgLyogKFBEQ19UREVTKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19SUFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE4MTAwICkgLyogKFBEQ19UREVTKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfVE5DUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBODExQyApIC8qIChQRENfVERFUykgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UREVTX1RQUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTgxMDggKSAvKiAoUERDX1RERVMpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfUFRTUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBODEyNCApIC8qIChQRENfVERFUykgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19QVENSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE4MTIwICkgLyogKFBEQ19UREVTKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVERFUyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfS0VZMld4UiAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBODAyOCApIC8qIChUREVTKSBLZXkgMiBXb3JkIHggUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfS0VZM1d4UiAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBODAzMCApIC8qIChUREVTKSBLZXkgMyBXb3JkIHggUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfSURSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBODAxNCApIC8qIChUREVTKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19WUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE4MEZDICkgLyogKFRERVMpIFRERVMgVmVyc2lvbiBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19JVnhSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE4MDYwICkgLyogKFRERVMpIEluaXRpYWxpemF0aW9uIFZlY3RvciB4IFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UREVTX09EQVRBeFIgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTgwNTAgKSAvKiAoVERFUykgT3V0cHV0IERhdGEgeCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19JTVIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE4MDE4ICkgLyogKFRERVMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UREVTX01SICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTgwMDQgKSAvKiAoVERFUykgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19DUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE4MDAwICkgLyogKFRERVMpIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfSUVSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBODAxMCApIC8qIChUREVTKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UREVTX0lTUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTgwMUMgKSAvKiAoVERFUykgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19JREFUQXhSICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE4MDQwICkgLyogKFRERVMpIElucHV0IERhdGEgeCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19LRVkxV3hSICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE4MDIwICkgLyogKFRERVMpIEtleSAxIFdvcmQgeCBSZWdpc3RlciAqLw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgICBSRUdJU1RFUiBBRERSRVNTIERFRklOSVRJT04gRk9SIEFUOTFTQU03WDI1Ng0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBTWVMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQUlDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0FJQ19JVlIgICAoKEFUOTFfUkVHICopIAkweEZGRkZGMTAwKSAvLyAoQUlDKSBJUlEgVmVjdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfU01SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjAwMCkgLy8gKEFJQykgU291cmNlIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19GVlIgICAoKEFUOTFfUkVHICopIAkweEZGRkZGMTA0KSAvLyAoQUlDKSBGSVEgVmVjdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfRENSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjEzOCkgLy8gKEFJQykgRGVidWcgQ29udHJvbCBSZWdpc3RlciAoUHJvdGVjdCkNCisjZGVmaW5lIEFUOTFDX0FJQ19FT0lDUiAoKEFUOTFfUkVHICopIAkweEZGRkZGMTMwKSAvLyAoQUlDKSBFbmQgb2YgSW50ZXJydXB0IENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19TVlIgICAoKEFUOTFfUkVHICopIAkweEZGRkZGMDgwKSAvLyAoQUlDKSBTb3VyY2UgVmVjdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfRkZTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjE0OCkgLy8gKEFJQykgRmFzdCBGb3JjaW5nIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0lDQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYxMjgpIC8vIChBSUMpIEludGVycnVwdCBDbGVhciBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfSVNSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjEwOCkgLy8gKEFJQykgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0lNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYxMTApIC8vIChBSUMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfSVBSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjEwQykgLy8gKEFJQykgSW50ZXJydXB0IFBlbmRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19GRkVSICAoKEFUOTFfUkVHICopIAkweEZGRkZGMTQwKSAvLyAoQUlDKSBGYXN0IEZvcmNpbmcgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfSUVDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjEyMCkgLy8gKEFJQykgSW50ZXJydXB0IEVuYWJsZSBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfSVNDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjEyQykgLy8gKEFJQykgSW50ZXJydXB0IFNldCBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfRkZEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjE0NCkgLy8gKEFJQykgRmFzdCBGb3JjaW5nIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19DSVNSICAoKEFUOTFfUkVHICopIAkweEZGRkZGMTE0KSAvLyAoQUlDKSBDb3JlIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19JRENSICAoKEFUOTFfUkVHICopIAkweEZGRkZGMTI0KSAvLyAoQUlDKSBJbnRlcnJ1cHQgRGlzYWJsZSBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfU1BVICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjEzNCkgLy8gKEFJQykgU3B1cmlvdXMgVmVjdG9yIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfREJHVSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19EQkdVX1RDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjMwQykgLy8gKFBEQ19EQkdVKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1JOUFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjMxMCkgLy8gKFBEQ19EQkdVKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9UTlBSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYzMTgpIC8vIChQRENfREJHVSkgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1RQUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjMwOCkgLy8gKFBEQ19EQkdVKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1JQUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjMwMCkgLy8gKFBEQ19EQkdVKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfUkNSICAoKEFUOTFfUkVHICopIAkweEZGRkZGMzA0KSAvLyAoUERDX0RCR1UpIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9STkNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYzMTQpIC8vIChQRENfREJHVSkgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfUFRDUiAoKEFUOTFfUkVHICopIAkweEZGRkZGMzIwKSAvLyAoUERDX0RCR1UpIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1BUU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjMyNCkgLy8gKFBEQ19EQkdVKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1ROQ1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjMxQykgLy8gKFBEQ19EQkdVKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIERCR1UgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfREJHVV9FWElEICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYyNDQpIC8vIChEQkdVKSBDaGlwIElEIEV4dGVuc2lvbiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9CUkdSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYyMjApIC8vIChEQkdVKSBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX0lEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjIwQykgLy8gKERCR1UpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX0NTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjIxNCkgLy8gKERCR1UpIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX0NJRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjI0MCkgLy8gKERCR1UpIENoaXAgSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkZGMjA0KSAvLyAoREJHVSkgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9JTVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYyMTApIC8vIChEQkdVKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9DUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYyMDApIC8vIChEQkdVKSBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX0ZOVFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjI0OCkgLy8gKERCR1UpIEZvcmNlIE5UUlNUIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1RIUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjIxQykgLy8gKERCR1UpIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfUkhSICAoKEFUOTFfUkVHICopIAkweEZGRkZGMjE4KSAvLyAoREJHVSkgUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9JRVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYyMDgpIC8vIChEQkdVKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQSU9BIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1BJT0FfT0RSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNDE0KSAvLyAoUElPQSkgT3V0cHV0IERpc2FibGUgUmVnaXN0ZXJyDQorI2RlZmluZSBBVDkxQ19QSU9BX1NPRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQzMCkgLy8gKFBJT0EpIFNldCBPdXRwdXQgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9JU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0NEMpIC8vIChQSU9BKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0FCU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQ3OCkgLy8gKFBJT0EpIEFCIFNlbGVjdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfSUVSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNDQwKSAvLyAoUElPQSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9QUFVEUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNDYwKSAvLyAoUElPQSkgUHVsbC11cCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0lNUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQ0OCkgLy8gKFBJT0EpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX1BFUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQwMCkgLy8gKFBJT0EpIFBJTyBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfSUZEUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNDI0KSAvLyAoUElPQSkgSW5wdXQgRmlsdGVyIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfT1dEUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNEE0KSAvLyAoUElPQSkgT3V0cHV0IFdyaXRlIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfTURTUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNDU4KSAvLyAoUElPQSkgTXVsdGktZHJpdmVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9JRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0NDQpIC8vIChQSU9BKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9PRFNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0MzgpIC8vIChQSU9BKSBPdXRwdXQgRGF0YSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfUFBVU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQ2OCkgLy8gKFBJT0EpIFB1bGwtdXAgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX09XU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjRBOCkgLy8gKFBJT0EpIE91dHB1dCBXcml0ZSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfQlNSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNDc0KSAvLyAoUElPQSkgU2VsZWN0IEIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfT1dFUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNEEwKSAvLyAoUElPQSkgT3V0cHV0IFdyaXRlIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9JRkVSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0MjApIC8vIChQSU9BKSBJbnB1dCBGaWx0ZXIgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX1BEU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQzQykgLy8gKFBJT0EpIFBpbiBEYXRhIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9QUFVFUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNDY0KSAvLyAoUElPQSkgUHVsbC11cCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfT1NSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNDE4KSAvLyAoUElPQSkgT3V0cHV0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9BU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0NzApIC8vIChQSU9BKSBTZWxlY3QgQSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9NRERSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0NTQpIC8vIChQSU9BKSBNdWx0aS1kcml2ZXIgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9DT0RSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0MzQpIC8vIChQSU9BKSBDbGVhciBPdXRwdXQgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9NREVSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0NTApIC8vIChQSU9BKSBNdWx0aS1kcml2ZXIgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX1BEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQwNCkgLy8gKFBJT0EpIFBJTyBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0lGU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQyOCkgLy8gKFBJT0EpIElucHV0IEZpbHRlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfT0VSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNDEwKSAvLyAoUElPQSkgT3V0cHV0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9QU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0MDgpIC8vIChQSU9BKSBQSU8gU3RhdHVzIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQSU9CIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1BJT0JfT1dEUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNkE0KSAvLyAoUElPQikgT3V0cHV0IFdyaXRlIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfTURFUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNjUwKSAvLyAoUElPQikgTXVsdGktZHJpdmVyIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9QUFVTUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNjY4KSAvLyAoUElPQikgUHVsbC11cCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfSU1SICAoKEFUOTFfUkVHICopIAkweEZGRkZGNjQ4KSAvLyAoUElPQikgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfQVNSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNjcwKSAvLyAoUElPQikgU2VsZWN0IEEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfUFBVRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjY2MCkgLy8gKFBJT0IpIFB1bGwtdXAgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9QU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2MDgpIC8vIChQSU9CKSBQSU8gU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX0lFUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjY0MCkgLy8gKFBJT0IpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfQ09EUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNjM0KSAvLyAoUElPQikgQ2xlYXIgT3V0cHV0IERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfT1dFUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNkEwKSAvLyAoUElPQikgT3V0cHV0IFdyaXRlIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9BQlNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2NzgpIC8vIChQSU9CKSBBQiBTZWxlY3QgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX0lGRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjYyNCkgLy8gKFBJT0IpIElucHV0IEZpbHRlciBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX1BEU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjYzQykgLy8gKFBJT0IpIFBpbiBEYXRhIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9JRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2NDQpIC8vIChQSU9CKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9PV1NSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2QTgpIC8vIChQSU9CKSBPdXRwdXQgV3JpdGUgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX1BEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjYwNCkgLy8gKFBJT0IpIFBJTyBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX09EUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjYxNCkgLy8gKFBJT0IpIE91dHB1dCBEaXNhYmxlIFJlZ2lzdGVycg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9JRlNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2MjgpIC8vIChQSU9CKSBJbnB1dCBGaWx0ZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX1BQVUVSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2NjQpIC8vIChQSU9CKSBQdWxsLXVwIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9TT0RSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2MzApIC8vIChQSU9CKSBTZXQgT3V0cHV0IERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfSVNSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNjRDKSAvLyAoUElPQikgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9PRFNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2MzgpIC8vIChQSU9CKSBPdXRwdXQgRGF0YSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfT1NSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNjE4KSAvLyAoUElPQikgT3V0cHV0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9NRFNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2NTgpIC8vIChQSU9CKSBNdWx0aS1kcml2ZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX0lGRVIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjYyMCkgLy8gKFBJT0IpIElucHV0IEZpbHRlciBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfQlNSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNjc0KSAvLyAoUElPQikgU2VsZWN0IEIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfTUREUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNjU0KSAvLyAoUElPQikgTXVsdGktZHJpdmVyIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfT0VSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNjEwKSAvLyAoUElPQikgT3V0cHV0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9QRVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2MDApIC8vIChQSU9CKSBQSU8gRW5hYmxlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDS0dSIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0NLR1JfTU9SICAoKEFUOTFfUkVHICopIAkweEZGRkZGQzIwKSAvLyAoQ0tHUikgTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DS0dSX1BMTFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkMyQykgLy8gKENLR1IpIFBMTCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9NQ0ZSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDMjQpIC8vIChDS0dSKSBNYWluIENsb2NrICBGcmVxdWVuY3kgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBNQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19QTUNfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkM2NCkgLy8gKFBNQykgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19NT1IgICAoKEFUOTFfUkVHICopIAkweEZGRkZGQzIwKSAvLyAoUE1DKSBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19QTExSICAoKEFUOTFfUkVHICopIAkweEZGRkZGQzJDKSAvLyAoUE1DKSBQTEwgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0VSICAoKEFUOTFfUkVHICopIAkweEZGRkZGQzEwKSAvLyAoUE1DKSBQZXJpcGhlcmFsIENsb2NrIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDS1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDNDApIC8vIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX01DS1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDMzApIC8vIChQTUMpIE1hc3RlciBDbG9jayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX1NDRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDMDQpIC8vIChQTUMpIFN5c3RlbSBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfUENEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkMxNCkgLy8gKFBNQykgUGVyaXBoZXJhbCBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfU0NTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkMwOCkgLy8gKFBNQykgU3lzdGVtIENsb2NrIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDMTgpIC8vIChQTUMpIFBlcmlwaGVyYWwgQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfTUNGUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkMyNCkgLy8gKFBNQykgTWFpbiBDbG9jayAgRnJlcXVlbmN5IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfU0NFUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkMwMCkgLy8gKFBNQykgU3lzdGVtIENsb2NrIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX0lNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDNkMpIC8vIChQTUMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfSUVSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkM2MCkgLy8gKFBNQykgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX1NSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDNjgpIC8vIChQTUMpIFN0YXR1cyBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUlNUQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19SU1RDX1JDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkQwMCkgLy8gKFJTVEMpIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1JTVENfUk1SICAoKEFUOTFfUkVHICopIAkweEZGRkZGRDA4KSAvLyAoUlNUQykgUmVzZXQgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19SU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZEMDQpIC8vIChSU1RDKSBSZXNldCBTdGF0dXMgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFJUVEMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19SVFNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZEMkMpIC8vIChSVFRDKSBSZWFsLXRpbWUgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19SVFRDX1JUTVIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkQyMCkgLy8gKFJUVEMpIFJlYWwtdGltZSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19SVFRDX1JUVlIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkQyOCkgLy8gKFJUVEMpIFJlYWwtdGltZSBWYWx1ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19SVEFSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZEMjQpIC8vIChSVFRDKSBSZWFsLXRpbWUgQWxhcm0gUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBJVEMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUElUQ19QSVZSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZEMzgpIC8vIChQSVRDKSBQZXJpb2QgSW50ZXJ2YWwgVmFsdWUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJVENfUElTUiAoKEFUOTFfUkVHICopIAkweEZGRkZGRDM0KSAvLyAoUElUQykgUGVyaW9kIEludGVydmFsIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElUQ19QSUlSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZEM0MpIC8vIChQSVRDKSBQZXJpb2QgSW50ZXJ2YWwgSW1hZ2UgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJVENfUElNUiAoKEFUOTFfUkVHICopIAkweEZGRkZGRDMwKSAvLyAoUElUQykgUGVyaW9kIEludGVydmFsIE1vZGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFdEVEMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRENSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZENDApIC8vIChXRFRDKSBXYXRjaGRvZyBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19XRFRDX1dEU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkQ0OCkgLy8gKFdEVEMpIFdhdGNoZG9nIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRE1SICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZENDQpIC8vIChXRFRDKSBXYXRjaGRvZyBNb2RlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBWUkVHIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1ZSRUdfTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkZGRDYwKSAvLyAoVlJFRykgVm9sdGFnZSBSZWd1bGF0b3IgTW9kZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgTUMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfTUNfQVNSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZGMDQpIC8vIChNQykgTUMgQWJvcnQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19NQ19SQ1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkYwMCkgLy8gKE1DKSBNQyBSZW1hcCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19NQ19GQ1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkY2NCkgLy8gKE1DKSBNQyBGbGFzaCBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19NQ19BQVNSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkYwOCkgLy8gKE1DKSBNQyBBYm9ydCBBZGRyZXNzIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfTUNfRlNSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZGNjgpIC8vIChNQykgTUMgRmxhc2ggU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19NQ19GTVIgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkY2MCkgLy8gKE1DKSBNQyBGbGFzaCBNb2RlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfU1BJMSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19TUEkxX1BUQ1IgKChBVDkxX1JFRyAqKSAJMHhGRkZFNDEyMCkgLy8gKFBEQ19TUEkxKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9SUFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQxMDApIC8vIChQRENfU1BJMSkgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX1ROQ1IgKChBVDkxX1JFRyAqKSAJMHhGRkZFNDExQykgLy8gKFBEQ19TUEkxKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfVFBSICAoKEFUOTFfUkVHICopIAkweEZGRkU0MTA4KSAvLyAoUERDX1NQSTEpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfVE5QUiAoKEFUOTFfUkVHICopIAkweEZGRkU0MTE4KSAvLyAoUERDX1NQSTEpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9UQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQxMEMpIC8vIChQRENfU1BJMSkgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9SQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQxMDQpIC8vIChQRENfU1BJMSkgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX1JOUFIgKChBVDkxX1JFRyAqKSAJMHhGRkZFNDExMCkgLy8gKFBEQ19TUEkxKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9STkNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQxMTQpIC8vIChQRENfU1BJMSkgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfUFRTUiAoKEFUOTFfUkVHICopIAkweEZGRkU0MTI0KSAvLyAoUERDX1NQSTEpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFNQSTEgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9JTVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQwMUMpIC8vIChTUEkxKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9JRVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQwMTQpIC8vIChTUEkxKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX01SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZFNDAwNCkgLy8gKFNQSTEpIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfUkRSICAoKEFUOTFfUkVHICopIAkweEZGRkU0MDA4KSAvLyAoU1BJMSkgUmVjZWl2ZSBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX0lEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFNDAxOCkgLy8gKFNQSTEpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX1NSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZFNDAxMCkgLy8gKFNQSTEpIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9URFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQwMEMpIC8vIChTUEkxKSBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX0NSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZFNDAwMCkgLy8gKFNQSTEpIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfQ1NSICAoKEFUOTFfUkVHICopIAkweEZGRkU0MDMwKSAvLyAoU1BJMSkgQ2hpcCBTZWxlY3QgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19TUEkwIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1NQSTBfUFRDUiAoKEFUOTFfUkVHICopIAkweEZGRkUwMTIwKSAvLyAoUERDX1NQSTApIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1RQUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDEwOCkgLy8gKFBEQ19TUEkwKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1RDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDEwQykgLy8gKFBEQ19TUEkwKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1JDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDEwNCkgLy8gKFBEQ19TUEkwKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfUFRTUiAoKEFUOTFfUkVHICopIAkweEZGRkUwMTI0KSAvLyAoUERDX1NQSTApIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfUk5QUiAoKEFUOTFfUkVHICopIAkweEZGRkUwMTEwKSAvLyAoUERDX1NQSTApIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1JQUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDEwMCkgLy8gKFBEQ19TUEkwKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfVE5DUiAoKEFUOTFfUkVHICopIAkweEZGRkUwMTFDKSAvLyAoUERDX1NQSTApIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9STkNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAxMTQpIC8vIChQRENfU1BJMCkgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfVE5QUiAoKEFUOTFfUkVHICopIAkweEZGRkUwMTE4KSAvLyAoUERDX1NQSTApIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgU1BJMCBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19TUEkwX0lFUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDAxNCkgLy8gKFNQSTApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfU1IgICAoKEFUOTFfUkVHICopIAkweEZGRkUwMDEwKSAvLyAoU1BJMCkgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX0lEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDAxOCkgLy8gKFNQSTApIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX0NSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDAwMCkgLy8gKFNQSTApIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkUwMDA0KSAvLyAoU1BJMCkgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9JTVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAwMUMpIC8vIChTUEkwKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9URFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAwMEMpIC8vIChTUEkwKSBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1JEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDAwOCkgLy8gKFNQSTApIFJlY2VpdmUgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9DU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAwMzApIC8vIChTUEkwKSBDaGlwIFNlbGVjdCBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX1VTMSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19VUzFfUk5DUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDExNCkgLy8gKFBEQ19VUzEpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfUFRDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDEyMCkgLy8gKFBEQ19VUzEpIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfVENSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDEwQykgLy8gKFBEQ19VUzEpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9QVFNSICAoKEFUOTFfUkVHICopIAkweEZGRkM0MTI0KSAvLyAoUERDX1VTMSkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1ROUFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQxMTgpIC8vIChQRENfVVMxKSBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9SQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkM0MTA0KSAvLyAoUERDX1VTMSkgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfUk5QUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDExMCkgLy8gKFBEQ19VUzEpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfUlBSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDEwMCkgLy8gKFBEQ19VUzEpIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1ROQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQxMUMpIC8vIChQRENfVVMxKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9UUFIgICAoKEFUOTFfUkVHICopIAkweEZGRkM0MTA4KSAvLyAoUERDX1VTMSkgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVVMxIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1VTMV9JRiAgICAoKEFUOTFfUkVHICopIAkweEZGRkM0MDRDKSAvLyAoVVMxKSBJUkRBX0ZJTFRFUiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX05FUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQwNDQpIC8vIChVUzEpIE5iIEVycm9ycyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1JUT1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQwMjQpIC8vIChVUzEpIFJlY2VpdmVyIFRpbWUtb3V0IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfQ1NSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDAxNCkgLy8gKFVTMSkgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9JRFIgICAoKEFUOTFfUkVHICopIAkweEZGRkM0MDBDKSAvLyAoVVMxKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX0lFUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQwMDgpIC8vIChVUzEpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9USFIgICAoKEFUOTFfUkVHICopIAkweEZGRkM0MDFDKSAvLyAoVVMxKSBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfVFRHUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDAyOCkgLy8gKFVTMSkgVHJhbnNtaXR0ZXIgVGltZS1ndWFyZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1JIUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQwMTgpIC8vIChVUzEpIFJlY2VpdmVyIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9CUkdSICAoKEFUOTFfUkVHICopIAkweEZGRkM0MDIwKSAvLyAoVVMxKSBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfSU1SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDAxMCkgLy8gKFVTMSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9GSURJICAoKEFUOTFfUkVHICopIAkweEZGRkM0MDQwKSAvLyAoVVMxKSBGSV9ESV9SYXRpbyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX0NSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQwMDApIC8vIChVUzEpIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9NUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkM0MDA0KSAvLyAoVVMxKSBNb2RlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfVVMwIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1VTMF9UTlBSICAoKEFUOTFfUkVHICopIAkweEZGRkMwMTE4KSAvLyAoUERDX1VTMCkgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfUk5QUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDExMCkgLy8gKFBEQ19VUzApIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfVENSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDEwQykgLy8gKFBEQ19VUzApIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9QVENSICAoKEFUOTFfUkVHICopIAkweEZGRkMwMTIwKSAvLyAoUERDX1VTMCkgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9QVFNSICAoKEFUOTFfUkVHICopIAkweEZGRkMwMTI0KSAvLyAoUERDX1VTMCkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1ROQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAxMUMpIC8vIChQRENfVVMwKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9UUFIgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMTA4KSAvLyAoUERDX1VTMCkgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1JDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAxMDQpIC8vIChQRENfVVMwKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9SUFIgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMTAwKSAvLyAoUERDX1VTMCkgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfUk5DUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDExNCkgLy8gKFBEQ19VUzApIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBVUzAgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVVMwX0JSR1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAwMjApIC8vIChVUzApIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9ORVIgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDQ0KSAvLyAoVVMwKSBOYiBFcnJvcnMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9DUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDAwKSAvLyAoVVMwKSBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfSU1SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDAxMCkgLy8gKFVTMCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9GSURJICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDQwKSAvLyAoVVMwKSBGSV9ESV9SYXRpbyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1RUR1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAwMjgpIC8vIChVUzApIFRyYW5zbWl0dGVyIFRpbWUtZ3VhcmQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9NUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDA0KSAvLyAoVVMwKSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfUlRPUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDAyNCkgLy8gKFVTMCkgUmVjZWl2ZXIgVGltZS1vdXQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9DU1IgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDE0KSAvLyAoVVMwKSBDaGFubmVsIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1JIUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAwMTgpIC8vIChVUzApIFJlY2VpdmVyIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9JRFIgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDBDKSAvLyAoVVMwKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1RIUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAwMUMpIC8vIChVUzApIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9JRiAgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDRDKSAvLyAoVVMwKSBJUkRBX0ZJTFRFUiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX0lFUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAwMDgpIC8vIChVUzApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19TU0MgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfU1NDX1ROQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQxMUMpIC8vIChQRENfU1NDKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19SUFIgICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MTAwKSAvLyAoUERDX1NTQykgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUk5DUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDExNCkgLy8gKFBEQ19TU0MpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfVFBSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDEwOCkgLy8gKFBEQ19TU0MpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19QVENSICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MTIwKSAvLyAoUERDX1NTQykgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19UQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MTBDKSAvLyAoUERDX1NTQykgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQxMDQpIC8vIChQRENfU1NDKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19STlBSICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MTEwKSAvLyAoUERDX1NTQykgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19UTlBSICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MTE4KSAvLyAoUERDX1NTQykgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUFRTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDEyNCkgLy8gKFBEQ19TU0MpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFNTQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19TU0NfUkhSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDAyMCkgLy8gKFNTQykgUmVjZWl2ZSBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUlNIUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDAzMCkgLy8gKFNTQykgUmVjZWl2ZSBTeW5jIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19URk1SICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MDFDKSAvLyAoU1NDKSBUcmFuc21pdCBGcmFtZSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDA0OCkgLy8gKFNTQykgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19USFIgICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MDI0KSAvLyAoU1NDKSBUcmFuc21pdCBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUkNNUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDAxMCkgLy8gKFNTQykgUmVjZWl2ZSBDbG9jayBNb2RlUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19JRVIgICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MDQ0KSAvLyAoU1NDKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfVFNIUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDAzNCkgLy8gKFNTQykgVHJhbnNtaXQgU3luYyBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfU1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDA0MCkgLy8gKFNTQykgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfQ01SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDAwNCkgLy8gKFNTQykgQ2xvY2sgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RDTVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQwMTgpIC8vIChTU0MpIFRyYW5zbWl0IENsb2NrIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19DUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MDAwKSAvLyAoU1NDKSBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfSU1SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDA0QykgLy8gKFNTQykgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19SRk1SICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MDE0KSAvLyAoU1NDKSBSZWNlaXZlIEZyYW1lIE1vZGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRXSSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19UV0lfSUVSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZCODAyNCkgLy8gKFRXSSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX0NSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjgwMDApIC8vIChUV0kpIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9TUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkI4MDIwKSAvLyAoVFdJKSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9JTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkI4MDJDKSAvLyAoVFdJKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX1RIUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjgwMzQpIC8vIChUV0kpIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9JRFIgICAoKEFUOTFfUkVHICopIAkweEZGRkI4MDI4KSAvLyAoVFdJKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX0lBRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjgwMEMpIC8vIChUV0kpIEludGVybmFsIEFkZHJlc3MgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9NTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkI4MDA0KSAvLyAoVFdJKSBNYXN0ZXIgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX0NXR1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjgwMTApIC8vIChUV0kpIENsb2NrIFdhdmVmb3JtIEdlbmVyYXRvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX1JIUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjgwMzApIC8vIChUV0kpIFJlY2VpdmUgSG9sZGluZyBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUFdNQ19DSDMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDNfQ1VQRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzI3MCkgLy8gKFBXTUNfQ0gzKSBDaGFubmVsIFVwZGF0ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDNfUmVzZXJ2ZWQgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzI3NCkgLy8gKFBXTUNfQ0gzKSBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDNfQ1BSRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzI2OCkgLy8gKFBXTUNfQ0gzKSBDaGFubmVsIFBlcmlvZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDNfQ0RUWVIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzI2NCkgLy8gKFBXTUNfQ0gzKSBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gzX0NDTlRSICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyNkMpIC8vIChQV01DX0NIMykgQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIM19DTVIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzI2MCkgLy8gKFBXTUNfQ0gzKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBXTUNfQ0gyIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gyX1Jlc2VydmVkICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyNTQpIC8vIChQV01DX0NIMikgUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gyX0NNUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjQwKSAvLyAoUFdNQ19DSDIpIENoYW5uZWwgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDJfQ0NOVFIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzI0QykgLy8gKFBXTUNfQ0gyKSBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gyX0NQUkRSICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyNDgpIC8vIChQV01DX0NIMikgQ2hhbm5lbCBQZXJpb2QgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gyX0NVUERSICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyNTApIC8vIChQV01DX0NIMikgQ2hhbm5lbCBVcGRhdGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gyX0NEVFlSICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyNDQpIC8vIChQV01DX0NIMikgQ2hhbm5lbCBEdXR5IEN5Y2xlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQV01DX0NIMSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMV9SZXNlcnZlZCAoKEFUOTFfUkVHICopIAkweEZGRkNDMjM0KSAvLyAoUFdNQ19DSDEpIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMV9DVVBEUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjMwKSAvLyAoUFdNQ19DSDEpIENoYW5uZWwgVXBkYXRlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMV9DUFJEUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjI4KSAvLyAoUFdNQ19DSDEpIENoYW5uZWwgUGVyaW9kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMV9DQ05UUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjJDKSAvLyAoUFdNQ19DSDEpIENoYW5uZWwgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDFfQ0RUWVIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzIyNCkgLy8gKFBXTUNfQ0gxKSBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gxX0NNUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjIwKSAvLyAoUFdNQ19DSDEpIENoYW5uZWwgTW9kZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUFdNQ19DSDAgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDBfUmVzZXJ2ZWQgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzIxNCkgLy8gKFBXTUNfQ0gwKSBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDBfQ1BSRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzIwOCkgLy8gKFBXTUNfQ0gwKSBDaGFubmVsIFBlcmlvZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDBfQ0RUWVIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzIwNCkgLy8gKFBXTUNfQ0gwKSBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gwX0NNUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjAwKSAvLyAoUFdNQ19DSDApIENoYW5uZWwgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDBfQ1VQRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzIxMCkgLy8gKFBXTUNfQ0gwKSBDaGFubmVsIFVwZGF0ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDBfQ0NOVFIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzIwQykgLy8gKFBXTUNfQ0gwKSBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBXTUMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19JRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MwMTQpIC8vIChQV01DKSBQV01DIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0RJUyAgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzAwOCkgLy8gKFBXTUMpIFBXTUMgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19JRVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MwMTApIC8vIChQV01DKSBQV01DIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfVlIgICAoKEFUOTFfUkVHICopIAkweEZGRkNDMEZDKSAvLyAoUFdNQykgUFdNQyBWZXJzaW9uIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0lTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzAxQykgLy8gKFBXTUMpIFBXTUMgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19TUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MwMEMpIC8vIChQV01DKSBQV01DIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19JTVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MwMTgpIC8vIChQV01DKSBQV01DIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX01SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzAwMCkgLy8gKFBXTUMpIFBXTUMgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19FTkEgICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MwMDQpIC8vIChQV01DKSBQV01DIEVuYWJsZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVURQIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1VEUF9JTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkIwMDE4KSAvLyAoVURQKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZBRERSICgoQVQ5MV9SRUcgKikgCTB4RkZGQjAwMDgpIC8vIChVRFApIEZ1bmN0aW9uIEFkZHJlc3MgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9OVU0gICAoKEFUOTFfUkVHICopIAkweEZGRkIwMDAwKSAvLyAoVURQKSBGcmFtZSBOdW1iZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9GRFIgICAoKEFUOTFfUkVHICopIAkweEZGRkIwMDUwKSAvLyAoVURQKSBFbmRwb2ludCBGSUZPIERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9JU1IgICAoKEFUOTFfUkVHICopIAkweEZGRkIwMDFDKSAvLyAoVURQKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfQ1NSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZCMDAzMCkgLy8gKFVEUCkgRW5kcG9pbnQgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZCMDAxNCkgLy8gKFVEUCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9JQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkIwMDIwKSAvLyAoVURQKSBJbnRlcnJ1cHQgQ2xlYXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9SU1RFUCAoKEFUOTFfUkVHICopIAkweEZGRkIwMDI4KSAvLyAoVURQKSBSZXNldCBFbmRwb2ludCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVURQX1RYVkMgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjAwNzQpIC8vIChVRFApIFRyYW5zY2VpdmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9HTEJTVEFURSAoKEFUOTFfUkVHICopIAkweEZGRkIwMDA0KSAvLyAoVURQKSBHbG9iYWwgU3RhdGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9JRVIgICAoKEFUOTFfUkVHICopIAkweEZGRkIwMDEwKSAvLyAoVURQKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBUQzAgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVEMwX1NSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwMjApIC8vIChUQzApIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMwX1JDICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwMUMpIC8vIChUQzApIFJlZ2lzdGVyIEMNCisjZGVmaW5lIEFUOTFDX1RDMF9SQiAgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDE4KSAvLyAoVEMwKSBSZWdpc3RlciBCDQorI2RlZmluZSBBVDkxQ19UQzBfQ0NSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDAwMCkgLy8gKFRDMCkgQ2hhbm5lbCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzBfQ01SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDAwNCkgLy8gKFRDMCkgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyIChDYXB0dXJlIE1vZGUgLyBXYXZlZm9ybSBNb2RlKQ0KKyNkZWZpbmUgQVQ5MUNfVEMwX0lFUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwMjQpIC8vIChUQzApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMF9SQSAgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDE0KSAvLyAoVEMwKSBSZWdpc3RlciBBDQorI2RlZmluZSBBVDkxQ19UQzBfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDAyOCkgLy8gKFRDMCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMF9DViAgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDEwKSAvLyAoVEMwKSBDb3VudGVyIFZhbHVlDQorI2RlZmluZSBBVDkxQ19UQzBfSU1SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDAyQykgLy8gKFRDMCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRDMSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19UQzFfUkIgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDA1OCkgLy8gKFRDMSkgUmVnaXN0ZXIgQg0KKyNkZWZpbmUgQVQ5MUNfVEMxX0NDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwNDApIC8vIChUQzEpIENoYW5uZWwgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMxX0lFUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwNjQpIC8vIChUQzEpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMV9JRFIgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDY4KSAvLyAoVEMxKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMxX1NSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwNjApIC8vIChUQzEpIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMxX0NNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwNDQpIC8vIChUQzEpIENoYW5uZWwgTW9kZSBSZWdpc3RlciAoQ2FwdHVyZSBNb2RlIC8gV2F2ZWZvcm0gTW9kZSkNCisjZGVmaW5lIEFUOTFDX1RDMV9SQSAgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDU0KSAvLyAoVEMxKSBSZWdpc3RlciBBDQorI2RlZmluZSBBVDkxQ19UQzFfUkMgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDA1QykgLy8gKFRDMSkgUmVnaXN0ZXIgQw0KKyNkZWZpbmUgQVQ5MUNfVEMxX0lNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwNkMpIC8vIChUQzEpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzFfQ1YgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDA1MCkgLy8gKFRDMSkgQ291bnRlciBWYWx1ZQ0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVEMyIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1RDMl9DTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDg0KSAvLyAoVEMyKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXIgKENhcHR1cmUgTW9kZSAvIFdhdmVmb3JtIE1vZGUpDQorI2RlZmluZSBBVDkxQ19UQzJfQ0NSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDA4MCkgLy8gKFRDMikgQ2hhbm5lbCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzJfQ1YgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDA5MCkgLy8gKFRDMikgQ291bnRlciBWYWx1ZQ0KKyNkZWZpbmUgQVQ5MUNfVEMyX1JBICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwOTQpIC8vIChUQzIpIFJlZ2lzdGVyIEENCisjZGVmaW5lIEFUOTFDX1RDMl9SQiAgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDk4KSAvLyAoVEMyKSBSZWdpc3RlciBCDQorI2RlZmluZSBBVDkxQ19UQzJfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDBBOCkgLy8gKFRDMikgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMl9JTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMEFDKSAvLyAoVEMyKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMyX1JDICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwOUMpIC8vIChUQzIpIFJlZ2lzdGVyIEMNCisjZGVmaW5lIEFUOTFDX1RDMl9JRVIgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMEE0KSAvLyAoVEMyKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzJfU1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDBBMCkgLy8gKFRDMikgU3RhdHVzIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBUQ0IgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVENCX0JNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwQzQpIC8vIChUQ0IpIFRDIEJsb2NrIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDQl9CQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMEMwKSAvLyAoVENCKSBUQyBCbG9jayBDb250cm9sIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU5fTUIwIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0NBTl9NQjBfTURMICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyMTQpIC8vIChDQU5fTUIwKSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIwX01BTSAoKEFUOTFfUkVHICopIAkweEZGRkQwMjA0KSAvLyAoQ0FOX01CMCkgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjBfTUNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyMUMpIC8vIChDQU5fTUIwKSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjBfTUlEICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyMDgpIC8vIChDQU5fTUIwKSBNYWlsQm94IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIwX01TUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMjEwKSAvLyAoQ0FOX01CMCkgTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjBfTUZJRCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjBDKSAvLyAoQ0FOX01CMCkgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjBfTURIICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyMTgpIC8vIChDQU5fTUIwKSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMF9NTVIgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDIwMCkgLy8gKENBTl9NQjApIE1haWxCb3ggTW9kZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CMSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxX01ETCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjM0KSAvLyAoQ0FOX01CMSkgTWFpbEJveCBEYXRhIExvdyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMV9NSUQgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDIyOCkgLy8gKENBTl9NQjEpIE1haWxCb3ggSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjFfTU1SICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyMjApIC8vIChDQU5fTUIxKSBNYWlsQm94IE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjFfTVNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyMzApIC8vIChDQU5fTUIxKSBNYWlsQm94IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMV9NQU0gKChBVDkxX1JFRyAqKSAJMHhGRkZEMDIyNCkgLy8gKENBTl9NQjEpIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxX01ESCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjM4KSAvLyAoQ0FOX01CMSkgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjFfTUNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyM0MpIC8vIChDQU5fTUIxKSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjFfTUZJRCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjJDKSAvLyAoQ0FOX01CMSkgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENBTl9NQjIgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NQ1IgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI1QykgLy8gKENBTl9NQjIpIE1haWxCb3ggQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NREggKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI1OCkgLy8gKENBTl9NQjIpIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIyX01JRCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjQ4KSAvLyAoQ0FOX01CMikgTWFpbEJveCBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NREwgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI1NCkgLy8gKENBTl9NQjIpIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjJfTU1SICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyNDApIC8vIChDQU5fTUIyKSBNYWlsQm94IE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjJfTUFNICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyNDQpIC8vIChDQU5fTUIyKSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NRklEICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyNEMpIC8vIChDQU5fTUIyKSBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI1MCkgLy8gKENBTl9NQjIpIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU5fTUIzIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0NBTl9NQjNfTUZJRCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjZDKSAvLyAoQ0FOX01CMykgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjNfTUFNICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyNjQpIC8vIChDQU5fTUIzKSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CM19NSUQgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI2OCkgLy8gKENBTl9NQjMpIE1haWxCb3ggSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjNfTUNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyN0MpIC8vIChDQU5fTUIzKSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjNfTU1SICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyNjApIC8vIChDQU5fTUIzKSBNYWlsQm94IE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjNfTVNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyNzApIC8vIChDQU5fTUIzKSBNYWlsQm94IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CM19NREwgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI3NCkgLy8gKENBTl9NQjMpIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjNfTURIICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyNzgpIC8vIChDQU5fTUIzKSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CNCBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19DQU5fTUI0X01JRCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjg4KSAvLyAoQ0FOX01CNCkgTWFpbEJveCBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNF9NTVIgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI4MCkgLy8gKENBTl9NQjQpIE1haWxCb3ggTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNF9NREggKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI5OCkgLy8gKENBTl9NQjQpIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI0X01GSUQgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI4QykgLy8gKENBTl9NQjQpIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI0X01TUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMjkwKSAvLyAoQ0FOX01CNCkgTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjRfTUNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyOUMpIC8vIChDQU5fTUI0KSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjRfTURMICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyOTQpIC8vIChDQU5fTUI0KSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI0X01BTSAoKEFUOTFfUkVHICopIAkweEZGRkQwMjg0KSAvLyAoQ0FOX01CNCkgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENBTl9NQjUgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNV9NU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJCMCkgLy8gKENBTl9NQjUpIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI1X01DUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMkJDKSAvLyAoQ0FOX01CNSkgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI1X01GSUQgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJBQykgLy8gKENBTl9NQjUpIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI1X01ESCAoKEFUOTFfUkVHICopIAkweEZGRkQwMkI4KSAvLyAoQ0FOX01CNSkgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjVfTUlEICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyQTgpIC8vIChDQU5fTUI1KSBNYWlsQm94IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI1X01NUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMkEwKSAvLyAoQ0FOX01CNSkgTWFpbEJveCBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI1X01ETCAoKEFUOTFfUkVHICopIAkweEZGRkQwMkI0KSAvLyAoQ0FOX01CNSkgTWFpbEJveCBEYXRhIExvdyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNV9NQU0gKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJBNCkgLy8gKENBTl9NQjUpIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU5fTUI2IHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0NBTl9NQjZfTUZJRCAoKEFUOTFfUkVHICopIAkweEZGRkQwMkNDKSAvLyAoQ0FOX01CNikgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjZfTUlEICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyQzgpIC8vIChDQU5fTUI2KSBNYWlsQm94IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI2X01BTSAoKEFUOTFfUkVHICopIAkweEZGRkQwMkM0KSAvLyAoQ0FOX01CNikgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjZfTVNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyRDApIC8vIChDQU5fTUI2KSBNYWlsQm94IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNl9NREwgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJENCkgLy8gKENBTl9NQjYpIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjZfTUNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyREMpIC8vIChDQU5fTUI2KSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjZfTURIICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyRDgpIC8vIChDQU5fTUI2KSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNl9NTVIgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJDMCkgLy8gKENBTl9NQjYpIE1haWxCb3ggTW9kZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CNyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19DQU5fTUI3X01DUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMkZDKSAvLyAoQ0FOX01CNykgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI3X01ESCAoKEFUOTFfUkVHICopIAkweEZGRkQwMkY4KSAvLyAoQ0FOX01CNykgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjdfTUZJRCAoKEFUOTFfUkVHICopIAkweEZGRkQwMkVDKSAvLyAoQ0FOX01CNykgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjdfTURMICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyRjQpIC8vIChDQU5fTUI3KSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI3X01JRCAoKEFUOTFfUkVHICopIAkweEZGRkQwMkU4KSAvLyAoQ0FOX01CNykgTWFpbEJveCBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CN19NTVIgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJFMCkgLy8gKENBTl9NQjcpIE1haWxCb3ggTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CN19NQU0gKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJFNCkgLy8gKENBTl9NQjcpIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI3X01TUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMkYwKSAvLyAoQ0FOX01CNykgTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENBTiBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19DQU5fVENSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDAyNCkgLy8gKENBTikgVHJhbnNmZXIgQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0lNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAwMEMpIC8vIChDQU4pIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fSUVSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDAwNCkgLy8gKENBTikgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0VDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAwMjApIC8vIChDQU4pIEVycm9yIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9USU1FU1RQICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAwMUMpIC8vIChDQU4pIFRpbWUgU3RhbXAgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkQwMDAwKSAvLyAoQ0FOKSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDAwOCkgLy8gKENBTikgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9BQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkQwMDI4KSAvLyAoQ0FOKSBBYm9ydCBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fVElNICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDAxOCkgLy8gKENBTikgVGltZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9TUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkQwMDEwKSAvLyAoQ0FOKSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9CUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkQwMDE0KSAvLyAoQ0FOKSBCYXVkcmF0ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1ZSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAwRkMpIC8vIChDQU4pIFZlcnNpb24gUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIEVNQUMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19JU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwMjQpIC8vIChFTUFDKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1NBNEggKChBVDkxX1JFRyAqKSAJMHhGRkZEQzBCNCkgLy8gKEVNQUMpIFNwZWNpZmljIEFkZHJlc3MgNCBUb3AsIExhc3QgMiBieXRlcw0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TQTFMICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwOTgpIC8vIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDEgQm90dG9tLCBGaXJzdCA0IGJ5dGVzDQorI2RlZmluZSBBVDkxQ19FTUFDX0VMRSAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA3OCkgLy8gKEVNQUMpIEV4Y2Vzc2l2ZSBMZW5ndGggRXJyb3JzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX0xDT0wgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA1QykgLy8gKEVNQUMpIExhdGUgQ29sbGlzaW9uIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1JMRSAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA4OCkgLy8gKEVNQUMpIFJlY2VpdmUgTGVuZ3RoIEZpZWxkIE1pc21hdGNoIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1dPTCAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzBDNCkgLy8gKEVNQUMpIFdha2UgT24gTEFOIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX0RURiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA1OCkgLy8gKEVNQUMpIERlZmVycmVkIFRyYW5zbWlzc2lvbiBGcmFtZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19UVU5EICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwNjQpIC8vIChFTUFDKSBUcmFuc21pdCBVbmRlcnJ1biBFcnJvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19OQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwMDApIC8vIChFTUFDKSBOZXR3b3JrIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfU0E0TCAoKEFUOTFfUkVHICopIAkweEZGRkRDMEIwKSAvLyAoRU1BQykgU3BlY2lmaWMgQWRkcmVzcyA0IEJvdHRvbSwgRmlyc3QgNCBieXRlcw0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwMjApIC8vIChFTUFDKSBSZWNlaXZlIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TQTNMICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwQTgpIC8vIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDMgQm90dG9tLCBGaXJzdCA0IGJ5dGVzDQorI2RlZmluZSBBVDkxQ19FTUFDX1RTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzAxNCkgLy8gKEVNQUMpIFRyYW5zbWl0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19JRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwMkMpIC8vIChFTUFDKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SU0UgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwNzQpIC8vIChFTUFDKSBSZWNlaXZlIFN5bWJvbCBFcnJvcnMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfRUNPTCAoKEFUOTFfUkVHICopIAkweEZGRkRDMDYwKSAvLyAoRU1BQykgRXhjZXNzaXZlIENvbGxpc2lvbiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19USUQgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwQjgpIC8vIChFTUFDKSBUeXBlIElEIENoZWNraW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX0hSQiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA5MCkgLy8gKEVNQUMpIEhhc2ggQWRkcmVzcyBCb3R0b21bMzE6MF0NCisjZGVmaW5lIEFUOTFDX0VNQUNfVEJRUCAoKEFUOTFfUkVHICopIAkweEZGRkRDMDFDKSAvLyAoRU1BQykgVHJhbnNtaXQgQnVmZmVyIFF1ZXVlIFBvaW50ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfVVNSSU8gKChBVDkxX1JFRyAqKSAJMHhGRkZEQzBDMCkgLy8gKEVNQUMpIFVTRVIgSW5wdXQvT3V0cHV0IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1BUUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzAzOCkgLy8gKEVNQUMpIFBhdXNlIFRpbWUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfU0EySCAoKEFUOTFfUkVHICopIAkweEZGRkRDMEE0KSAvLyAoRU1BQykgU3BlY2lmaWMgQWRkcmVzcyAyIFRvcCwgTGFzdCAyIGJ5dGVzDQorI2RlZmluZSBBVDkxQ19FTUFDX1JPViAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA3MCkgLy8gKEVNQUMpIFJlY2VpdmUgT3ZlcnJ1biBFcnJvcnMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfQUxFICAoKEFUOTFfUkVHICopIAkweEZGRkRDMDU0KSAvLyAoRU1BQykgQWxpZ25tZW50IEVycm9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1JKQSAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA3QykgLy8gKEVNQUMpIFJlY2VpdmUgSmFiYmVycyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SQlFQICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwMTgpIC8vIChFTUFDKSBSZWNlaXZlIEJ1ZmZlciBRdWV1ZSBQb2ludGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1RQRiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA4QykgLy8gKEVNQUMpIFRyYW5zbWl0dGVkIFBhdXNlIEZyYW1lcyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19OQ0ZHUiAoKEFUOTFfUkVHICopIAkweEZGRkRDMDA0KSAvLyAoRU1BQykgTmV0d29yayBDb25maWd1cmF0aW9uIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX0hSVCAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA5NCkgLy8gKEVNQUMpIEhhc2ggQWRkcmVzcyBUb3BbNjM6MzJdDQorI2RlZmluZSBBVDkxQ19FTUFDX1VTRiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA4MCkgLy8gKEVNQUMpIFVuZGVyc2l6ZSBGcmFtZXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfRkNTRSAoKEFUOTFfUkVHICopIAkweEZGRkRDMDUwKSAvLyAoRU1BQykgRnJhbWUgQ2hlY2sgU2VxdWVuY2UgRXJyb3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfVFBRICAoKEFUOTFfUkVHICopIAkweEZGRkRDMEJDKSAvLyAoRU1BQykgVHJhbnNtaXQgUGF1c2UgUXVhbnR1bSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19NQU4gICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwMzQpIC8vIChFTUFDKSBQSFkgTWFpbnRlbmFuY2UgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfRlRPICAoKEFUOTFfUkVHICopIAkweEZGRkRDMDQwKSAvLyAoRU1BQykgRnJhbWVzIFRyYW5zbWl0dGVkIE9LIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1JFViAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzBGQykgLy8gKEVNQUMpIFJldmlzaW9uIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX0lNUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzAzMCkgLy8gKEVNQUMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1NDRiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA0NCkgLy8gKEVNQUMpIFNpbmdsZSBDb2xsaXNpb24gRnJhbWUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfUEZSICAoKEFUOTFfUkVHICopIAkweEZGRkRDMDNDKSAvLyAoRU1BQykgUGF1c2UgRnJhbWVzIHJlY2VpdmVkIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX01DRiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA0OCkgLy8gKEVNQUMpIE11bHRpcGxlIENvbGxpc2lvbiBGcmFtZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19OU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwMDgpIC8vIChFTUFDKSBOZXR3b3JrIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TQTJMICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwQTApIC8vIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDIgQm90dG9tLCBGaXJzdCA0IGJ5dGVzDQorI2RlZmluZSBBVDkxQ19FTUFDX0ZSTyAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA0QykgLy8gKEVNQUMpIEZyYW1lcyBSZWNlaXZlZCBPSyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19JRVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwMjgpIC8vIChFTUFDKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1NBMUggKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA5QykgLy8gKEVNQUMpIFNwZWNpZmljIEFkZHJlc3MgMSBUb3AsIExhc3QgMiBieXRlcw0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19DU0UgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwNjgpIC8vIChFTUFDKSBDYXJyaWVyIFNlbnNlIEVycm9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1NBM0ggKChBVDkxX1JFRyAqKSAJMHhGRkZEQzBBQykgLy8gKEVNQUMpIFNwZWNpZmljIEFkZHJlc3MgMyBUb3AsIExhc3QgMiBieXRlcw0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SUkUgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwNkMpIC8vIChFTUFDKSBSZWNlaXZlIFJlc3NvdXJjZSBFcnJvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TVEUgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwODQpIC8vIChFTUFDKSBTUUUgVGVzdCBFcnJvciBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX0FEQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19BRENfUFRTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODEyNCkgLy8gKFBEQ19BREMpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19QVENSICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MTIwKSAvLyAoUERDX0FEQykgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19UTlBSICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MTE4KSAvLyAoUERDX0FEQykgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfVE5DUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODExQykgLy8gKFBEQ19BREMpIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1JOUFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgxMTApIC8vIChQRENfQURDKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1JOQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgxMTQpIC8vIChQRENfQURDKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1JQUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgxMDApIC8vIChQRENfQURDKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19UQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MTBDKSAvLyAoUERDX0FEQykgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1RQUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgxMDgpIC8vIChQRENfQURDKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfUkNSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODEwNCkgLy8gKFBEQ19BREMpIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQURDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0FEQ19DRFIyICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDM4KSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDINCisjZGVmaW5lIEFUOTFDX0FEQ19DRFIzICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDNDKSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDMNCisjZGVmaW5lIEFUOTFDX0FEQ19DRFIwICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDMwKSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDANCisjZGVmaW5lIEFUOTFDX0FEQ19DRFI1ICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDQ0KSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDUNCisjZGVmaW5lIEFUOTFDX0FEQ19DSERSICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDE0KSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfU1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODAxQykgLy8gKEFEQykgQURDIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX0NEUjQgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwNDApIC8vIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNA0KKyNkZWZpbmUgQVQ5MUNfQURDX0NEUjEgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwMzQpIC8vIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMQ0KKyNkZWZpbmUgQVQ5MUNfQURDX0xDRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwMjApIC8vIChBREMpIEFEQyBMYXN0IENvbnZlcnRlZCBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODAyOCkgLy8gKEFEQykgQURDIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfQ1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODAwMCkgLy8gKEFEQykgQURDIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19DRFI3ICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDRDKSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDcNCisjZGVmaW5lIEFUOTFDX0FEQ19DRFI2ICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDQ4KSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDYNCisjZGVmaW5lIEFUOTFDX0FEQ19JRVIgICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDI0KSAvLyAoQURDKSBBREMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX0NIRVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwMTApIC8vIChBREMpIEFEQyBDaGFubmVsIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX0NIU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwMTgpIC8vIChBREMpIEFEQyBDaGFubmVsIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX01SICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwMDQpIC8vIChBREMpIEFEQyBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfSU1SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODAyQykgLy8gKEFEQykgQURDIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfQUVTIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0FFU19UUFIgICAoKEFUOTFfUkVHICopIAkweEZGRkE0MTA4KSAvLyAoUERDX0FFUykgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX1BUQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQxMjApIC8vIChQRENfQUVTKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX1JOUFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQxMTApIC8vIChQRENfQUVTKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX1ROQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQxMUMpIC8vIChQRENfQUVTKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19UQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkE0MTBDKSAvLyAoUERDX0FFUykgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX1JDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQxMDQpIC8vIChQRENfQUVTKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19STkNSICAoKEFUOTFfUkVHICopIAkweEZGRkE0MTE0KSAvLyAoUERDX0FFUykgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19UTlBSICAoKEFUOTFfUkVHICopIAkweEZGRkE0MTE4KSAvLyAoUERDX0FFUykgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfUlBSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBNDEwMCkgLy8gKFBEQ19BRVMpIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX1BUU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQxMjQpIC8vIChQRENfQUVTKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBBRVMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQUVTX0lWeFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQwNjApIC8vIChBRVMpIEluaXRpYWxpemF0aW9uIFZlY3RvciB4IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfTVIgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBNDAwNCkgLy8gKEFFUykgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX1ZSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQwRkMpIC8vIChBRVMpIEFFUyBWZXJzaW9uIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfT0RBVEF4UiAoKEFUOTFfUkVHICopIAkweEZGRkE0MDUwKSAvLyAoQUVTKSBPdXRwdXQgRGF0YSB4IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfSURBVEF4UiAoKEFUOTFfUkVHICopIAkweEZGRkE0MDQwKSAvLyAoQUVTKSBJbnB1dCBEYXRhIHggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19DUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkE0MDAwKSAvLyAoQUVTKSBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBNDAxNCkgLy8gKEFFUykgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19JTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkE0MDE4KSAvLyAoQUVTKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX0lFUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQwMTApIC8vIChBRVMpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19LRVlXeFIgKChBVDkxX1JFRyAqKSAJMHhGRkZBNDAyMCkgLy8gKEFFUykgS2V5IFdvcmQgeCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX0lTUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQwMUMpIC8vIChBRVMpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19UREVTIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1RERVNfUk5DUiAoKEFUOTFfUkVHICopIAkweEZGRkE4MTE0KSAvLyAoUERDX1RERVMpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX1RDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZBODEwQykgLy8gKFBEQ19UREVTKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX1JDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZBODEwNCkgLy8gKFBEQ19UREVTKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfVE5QUiAoKEFUOTFfUkVHICopIAkweEZGRkE4MTE4KSAvLyAoUERDX1RERVMpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19STlBSICgoQVQ5MV9SRUcgKikgCTB4RkZGQTgxMTApIC8vIChQRENfVERFUykgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfUlBSICAoKEFUOTFfUkVHICopIAkweEZGRkE4MTAwKSAvLyAoUERDX1RERVMpIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19UTkNSICgoQVQ5MV9SRUcgKikgCTB4RkZGQTgxMUMpIC8vIChQRENfVERFUykgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX1RQUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZBODEwOCkgLy8gKFBEQ19UREVTKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX1BUU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZBODEyNCkgLy8gKFBEQ19UREVTKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX1BUQ1IgKChBVDkxX1JFRyAqKSAJMHhGRkZBODEyMCkgLy8gKFBEQ19UREVTKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVERFUyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19UREVTX0tFWTJXeFIgKChBVDkxX1JFRyAqKSAJMHhGRkZBODAyOCkgLy8gKFRERVMpIEtleSAyIFdvcmQgeCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19LRVkzV3hSICgoQVQ5MV9SRUcgKikgCTB4RkZGQTgwMzApIC8vIChUREVTKSBLZXkgMyBXb3JkIHggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfSURSICAoKEFUOTFfUkVHICopIAkweEZGRkE4MDE0KSAvLyAoVERFUykgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfVlIgICAoKEFUOTFfUkVHICopIAkweEZGRkE4MEZDKSAvLyAoVERFUykgVERFUyBWZXJzaW9uIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX0lWeFIgKChBVDkxX1JFRyAqKSAJMHhGRkZBODA2MCkgLy8gKFRERVMpIEluaXRpYWxpemF0aW9uIFZlY3RvciB4IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX09EQVRBeFIgKChBVDkxX1JFRyAqKSAJMHhGRkZBODA1MCkgLy8gKFRERVMpIE91dHB1dCBEYXRhIHggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfSU1SICAoKEFUOTFfUkVHICopIAkweEZGRkE4MDE4KSAvLyAoVERFUykgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkE4MDA0KSAvLyAoVERFUykgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19DUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTgwMDApIC8vIChUREVTKSBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX0lFUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZBODAxMCkgLy8gKFRERVMpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfSVNSICAoKEFUOTFfUkVHICopIAkweEZGRkE4MDFDKSAvLyAoVERFUykgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19JREFUQXhSICgoQVQ5MV9SRUcgKikgCTB4RkZGQTgwNDApIC8vIChUREVTKSBJbnB1dCBEYXRhIHggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfS0VZMVd4UiAoKEFUOTFfUkVHICopIAkweEZGRkE4MDIwKSAvLyAoVERFUykgS2V5IDEgV29yZCB4IFJlZ2lzdGVyDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgIFBJTyBERUZJTklUSU9OUyBGT1IgQVQ5MVNBTTdYMjU2ICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMCApICAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEEwICovDQotI2RlZmluZSBBVDkxQ19QQTBfUlhEMCAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEEwICkgIC8qICBVU0FSVCAwIFJlY2VpdmUgRGF0YSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMSAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAxICkgICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTEgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMV9UWEQwICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTEgKSAgLyogIFVTQVJUIDAgVHJhbnNtaXQgRGF0YSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMTAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAxMCApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTEwICovDQotI2RlZmluZSBBVDkxQ19QQTEwX1RXRCAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEExMCApIC8qICBUV0kgVHdvLXdpcmUgU2VyaWFsIERhdGEgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTExICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMTEgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEExMSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEExMV9UV0NLICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMTEgKSAvKiAgVFdJIFR3by13aXJlIFNlcmlhbCBDbG9jayAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMTIgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAxMiApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTEyICovDQotI2RlZmluZSBBVDkxQ19QQTEyX05QQ1MwMCAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEExMiApIC8qICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDAgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTEzICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMTMgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEExMyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEExM19OUENTMDEgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMTMgKSAvKiAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAxICovDQotI2RlZmluZSBBVDkxQ19QQTEzX1BDSzEgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEExMyApIC8qICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAxICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEExNCAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDE0ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMTQgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMTRfTlBDUzAyICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTE0ICkgLyogIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEExNF9JUlExICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMTQgKSAvKiAgRXh0ZXJuYWwgSW50ZXJydXB0IDEgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTE1ICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMTUgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEExNSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEExNV9OUENTMDMgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMTUgKSAvKiAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzICovDQotI2RlZmluZSBBVDkxQ19QQTE1X1RDTEsyICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEExNSApIC8qICBUaW1lciBDb3VudGVyIDIgZXh0ZXJuYWwgY2xvY2sgaW5wdXQgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTE2ICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMTYgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEExNiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEExNl9NSVNPMCAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMTYgKSAvKiAgU1BJIDAgTWFzdGVyIEluIFNsYXZlICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEExNyAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDE3ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMTcgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMTdfTU9TSTAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTE3ICkgLyogIFNQSSAwIE1hc3RlciBPdXQgU2xhdmUgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTE4ICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMTggKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEExOCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEExOF9TUENLMCAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMTggKSAvKiAgU1BJIDAgU2VyaWFsIENsb2NrICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEExOSAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDE5ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMTkgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMTlfQ0FOUlggICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTE5ICkgLyogIENBTiBSZWNlaXZlICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEEyICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDIgKSAgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyX1NDSzAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMiApICAvKiAgVVNBUlQgMCBTZXJpYWwgQ2xvY2sgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMl9OUENTMTEgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTIgKSAgLyogIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMjAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAyMCApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTIwICovDQotI2RlZmluZSBBVDkxQ19QQTIwX0NBTlRYICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEEyMCApIC8qICBDQU4gVHJhbnNtaXQgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTIxICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMjEgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEEyMSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyMV9URiAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMjEgKSAvKiAgU1NDIFRyYW5zbWl0IEZyYW1lIFN5bmMgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjFfTlBDUzEwICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTIxICkgLyogIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMCAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMjIgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAyMiApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTIyICovDQotI2RlZmluZSBBVDkxQ19QQTIyX1RLICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEEyMiApIC8qICBTU0MgVHJhbnNtaXQgQ2xvY2sgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjJfU1BDSzEgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTIyICkgLyogIFNQSSAxIFNlcmlhbCBDbG9jayAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMjMgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAyMyApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTIzICovDQotI2RlZmluZSBBVDkxQ19QQTIzX1REICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEEyMyApIC8qICBTU0MgVHJhbnNtaXQgZGF0YSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyM19NT1NJMSAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMjMgKSAvKiAgU1BJIDEgTWFzdGVyIE91dCBTbGF2ZSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMjQgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAyNCApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTI0ICovDQotI2RlZmluZSBBVDkxQ19QQTI0X1JEICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEEyNCApIC8qICBTU0MgUmVjZWl2ZSBEYXRhICovDQotI2RlZmluZSBBVDkxQ19QQTI0X01JU08xICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEEyNCApIC8qICBTUEkgMSBNYXN0ZXIgSW4gU2xhdmUgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTI1ICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMjUgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEEyNSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyNV9SSyAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMjUgKSAvKiAgU1NDIFJlY2VpdmUgQ2xvY2sgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjVfTlBDUzExICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTI1ICkgLyogIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMjYgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAyNiApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTI2ICovDQotI2RlZmluZSBBVDkxQ19QQTI2X1JGICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEEyNiApIC8qICBTU0MgUmVjZWl2ZSBGcmFtZSBTeW5jICovDQotI2RlZmluZSBBVDkxQ19QQTI2X05QQ1MxMiAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEEyNiApIC8qICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTI3ICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMjcgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEEyNyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyN19EUlhEICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMjcgKSAvKiAgREJHVSBEZWJ1ZyBSZWNlaXZlIERhdGEgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjdfUENLMyAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTI3ICkgLyogIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDMgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTI4ICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMjggKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEEyOCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyOF9EVFhEICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMjggKSAvKiAgREJHVSBEZWJ1ZyBUcmFuc21pdCBEYXRhICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEEyOSAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDI5ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMjkgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjlfRklRICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTI5ICkgLyogIEFJQyBGYXN0IEludGVycnVwdCBJbnB1dCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyOV9OUENTMTMgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMjkgKSAvKiAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEEzICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDMgKSAgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEzX1JUUzAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMyApICAvKiAgVVNBUlQgMCBSZWFkeSBUbyBTZW5kICovDQotI2RlZmluZSBBVDkxQ19QQTNfTlBDUzEyICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEEzICkgIC8qICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTMwICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMzAgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEEzMCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEzMF9JUlEwICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMzAgKSAvKiAgRXh0ZXJuYWwgSW50ZXJydXB0IDAgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMzBfUENLMiAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTMwICkgLyogIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTQgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgNCApICAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEE0ICovDQotI2RlZmluZSBBVDkxQ19QQTRfQ1RTMCAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEE0ICkgIC8qICBVU0FSVCAwIENsZWFyIFRvIFNlbmQgKi8NCi0jZGVmaW5lIEFUOTFDX1BBNF9OUENTMTMgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTQgKSAgLyogIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMyAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBNSAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCA1ICkgICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTUgKi8NCi0jZGVmaW5lIEFUOTFDX1BBNV9SWEQxICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTUgKSAgLyogIFVTQVJUIDEgUmVjZWl2ZSBEYXRhICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEE2ICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDYgKSAgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBNiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEE2X1RYRDEgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBNiApICAvKiAgVVNBUlQgMSBUcmFuc21pdCBEYXRhICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEE3ICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDcgKSAgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBNyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEE3X1NDSzEgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBNyApICAvKiAgVVNBUlQgMSBTZXJpYWwgQ2xvY2sgKi8NCi0jZGVmaW5lIEFUOTFDX1BBN19OUENTMDEgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTcgKSAgLyogIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBOCAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCA4ICkgICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTggKi8NCi0jZGVmaW5lIEFUOTFDX1BBOF9SVFMxICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTggKSAgLyogIFVTQVJUIDEgUmVhZHkgVG8gU2VuZCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEE4X05QQ1MwMiAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBOCApICAvKiAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAyICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEE5ICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDkgKSAgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBOSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEE5X0NUUzEgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBOSApICAvKiAgVVNBUlQgMSBDbGVhciBUbyBTZW5kICovDQotI2RlZmluZSBBVDkxQ19QQTlfTlBDUzAzICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEE5ICkgIC8qICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMCApICAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIwICovDQotI2RlZmluZSBBVDkxQ19QQjBfRVRYQ0tfRVJFRkNLICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIwICkgIC8qICBFdGhlcm5ldCBNQUMgVHJhbnNtaXQgQ2xvY2svUmVmZXJlbmNlIENsb2NrICovDQotI2RlZmluZSBBVDkxQ19QQjBfUENLMCAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIwICkgIC8qICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAwICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEIxICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDEgKSAgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxX0VUWEVOICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMSApICAvKiAgRXRoZXJuZXQgTUFDIFRyYW5zbWl0IEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BCMTAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAxMCApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQjEwICovDQotI2RlZmluZSBBVDkxQ19QQjEwX0VUWDIgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIxMCApIC8qICBFdGhlcm5ldCBNQUMgVHJhbnNtaXQgRGF0YSAyICovDQotI2RlZmluZSBBVDkxQ19QQjEwX05QQ1MxMSAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIxMCApIC8qICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDEgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjExICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMTEgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIxMSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxMV9FVFgzICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMTEgKSAvKiAgRXRoZXJuZXQgTUFDIFRyYW5zbWl0IERhdGEgMyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxMV9OUENTMTIgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMTEgKSAvKiAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAyICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEIxMiAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDEyICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMTIgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMTJfRVRYRVIgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjEyICkgLyogIEV0aGVybmV0IE1BQyBUcmFuc21pa3QgQ29kaW5nIEVycm9yICovDQotI2RlZmluZSBBVDkxQ19QQjEyX1RDTEswICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIxMiApIC8qICBUaW1lciBDb3VudGVyIDAgZXh0ZXJuYWwgY2xvY2sgaW5wdXQgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjEzICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMTMgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIxMyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxM19FUlgyICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMTMgKSAvKiAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgRGF0YSAyICovDQotI2RlZmluZSBBVDkxQ19QQjEzX05QQ1MwMSAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIxMyApIC8qICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDEgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjE0ICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMTQgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIxNCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxNF9FUlgzICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMTQgKSAvKiAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgRGF0YSAzICovDQotI2RlZmluZSBBVDkxQ19QQjE0X05QQ1MwMiAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIxNCApIC8qICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjE1ICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMTUgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIxNSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxNV9FUlhEViAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMTUgKSAvKiAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgRGF0YSBWYWxpZCAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BCMTYgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAxNiApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQjE2ICovDQotI2RlZmluZSBBVDkxQ19QQjE2X0VDT0wgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIxNiApIC8qICBFdGhlcm5ldCBNQUMgQ29sbGlzaW9uIERldGVjdGVkICovDQotI2RlZmluZSBBVDkxQ19QQjE2X05QQ1MxMyAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIxNiApIC8qICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjE3ICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMTcgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIxNyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxN19FUlhDSyAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMTcgKSAvKiAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgQ2xvY2sgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMTdfTlBDUzAzICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjE3ICkgLyogIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMyAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BCMTggICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAxOCApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQjE4ICovDQotI2RlZmluZSBBVDkxQ19QQjE4X0VGMTAwICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIxOCApIC8qICBFdGhlcm5ldCBNQUMgRm9yY2UgMTAwIE1iaXRzL3NlYyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxOF9BRFRSRyAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMTggKSAvKiAgQURDIEV4dGVybmFsIFRyaWdnZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjE5ICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMTkgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIxOSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxOV9QV00wICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMTkgKSAvKiAgUFdNIENoYW5uZWwgMCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxOV9UQ0xLMSAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMTkgKSAvKiAgVGltZXIgQ291bnRlciAxIGV4dGVybmFsIGNsb2NrIGlucHV0ICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEIyICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDIgKSAgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIyX0VUWDAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMiApICAvKiAgRXRoZXJuZXQgTUFDIFRyYW5zbWl0IERhdGEgMCAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BCMjAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAyMCApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQjIwICovDQotI2RlZmluZSBBVDkxQ19QQjIwX1BXTTEgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIyMCApIC8qICBQV00gQ2hhbm5lbCAxICovDQotI2RlZmluZSBBVDkxQ19QQjIwX1BDSzAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIyMCApIC8qICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAwICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEIyMSAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDIxICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMjEgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMjFfUFdNMiAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjIxICkgLyogIFBXTSBDaGFubmVsIDIgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMjFfUENLMSAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjIxICkgLyogIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDEgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjIyICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMjIgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIyMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIyMl9QV00zICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMjIgKSAvKiAgUFdNIENoYW5uZWwgMyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIyMl9QQ0syICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMjIgKSAvKiAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BCMjMgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAyMyApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQjIzICovDQotI2RlZmluZSBBVDkxQ19QQjIzX1RJT0EwICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIyMyApIC8qICBUaW1lciBDb3VudGVyIDAgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIyM19EQ0QxICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMjMgKSAvKiAgVVNBUlQgMSBEYXRhIENhcnJpZXIgRGV0ZWN0ICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEIyNCAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDI0ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMjQgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMjRfVElPQjAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjI0ICkgLyogIFRpbWVyIENvdW50ZXIgMCBNdWx0aXB1cnBvc2UgVGltZXIgSS9PIFBpbiBCICovDQotI2RlZmluZSBBVDkxQ19QQjI0X0RTUjEgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIyNCApIC8qICBVU0FSVCAxIERhdGEgU2V0IHJlYWR5ICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEIyNSAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDI1ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMjUgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMjVfVElPQTEgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjI1ICkgLyogIFRpbWVyIENvdW50ZXIgMSBNdWx0aXB1cnBvc2UgVGltZXIgSS9PIFBpbiBBICovDQotI2RlZmluZSBBVDkxQ19QQjI1X0RUUjEgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIyNSApIC8qICBVU0FSVCAxIERhdGEgVGVybWluYWwgcmVhZHkgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjI2ICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMjYgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIyNiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIyNl9USU9CMSAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMjYgKSAvKiAgVGltZXIgQ291bnRlciAxIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEIgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMjZfUkkxICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjI2ICkgLyogIFVTQVJUIDEgUmluZyBJbmRpY2F0b3IgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjI3ICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMjcgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIyNyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIyN19USU9BMiAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMjcgKSAvKiAgVGltZXIgQ291bnRlciAyIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEEgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMjdfUFdNMCAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjI3ICkgLyogIFBXTSBDaGFubmVsIDAgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjI4ICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMjggKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIyOCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIyOF9USU9CMiAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMjggKSAvKiAgVGltZXIgQ291bnRlciAyIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEIgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMjhfUFdNMSAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjI4ICkgLyogIFBXTSBDaGFubmVsIDEgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjI5ICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMjkgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIyOSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIyOV9QQ0sxICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMjkgKSAvKiAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIyOV9QV00yICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMjkgKSAvKiAgUFdNIENoYW5uZWwgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BCMyAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAzICkgICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQjMgKi8NCi0jZGVmaW5lIEFUOTFDX1BCM19FVFgxICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjMgKSAgLyogIEV0aGVybmV0IE1BQyBUcmFuc21pdCBEYXRhIDEgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjMwICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMzAgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIzMCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIzMF9QQ0syICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMzAgKSAvKiAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIzMF9QV00zICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMzAgKSAvKiAgUFdNIENoYW5uZWwgMyAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BCNCAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCA0ICkgICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQjQgKi8NCi0jZGVmaW5lIEFUOTFDX1BCNF9FQ1JTX0VDUlNEViAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjQgKSAgLyogIEV0aGVybmV0IE1BQyBDYXJyaWVyIFNlbnNlL0NhcnJpZXIgU2Vuc2UgYW5kIERhdGEgVmFsaWQgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjUgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgNSApICAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEI1ICovDQotI2RlZmluZSBBVDkxQ19QQjVfRVJYMCAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEI1ICkgIC8qICBFdGhlcm5ldCBNQUMgUmVjZWl2ZSBEYXRhIDAgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjYgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgNiApICAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEI2ICovDQotI2RlZmluZSBBVDkxQ19QQjZfRVJYMSAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEI2ICkgIC8qICBFdGhlcm5ldCBNQUMgUmVjZWl2ZSBEYXRhIDEgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjcgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgNyApICAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEI3ICovDQotI2RlZmluZSBBVDkxQ19QQjdfRVJYRVIgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEI3ICkgIC8qICBFdGhlcm5ldCBNQUMgUmVjZWl2ZSBFcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BCOCAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCA4ICkgICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQjggKi8NCi0jZGVmaW5lIEFUOTFDX1BCOF9FTURDICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjggKSAgLyogIEV0aGVybmV0IE1BQyBNYW5hZ2VtZW50IERhdGEgQ2xvY2sgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjkgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgOSApICAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEI5ICovDQotI2RlZmluZSBBVDkxQ19QQjlfRU1ESU8gICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEI5ICkgIC8qICBFdGhlcm5ldCBNQUMgTWFuYWdlbWVudCBEYXRhIElucHV0L091dHB1dCAqLw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgICBQSU8gREVGSU5JVElPTlMgRk9SIEFUOTFTQU03WDI1Ng0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorI2RlZmluZSBBVDkxQ19QSU9fUEEwICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgMCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEwDQorI2RlZmluZSBBVDkxQ19QQTBfUlhEMCAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTApIC8vICBVU0FSVCAwIFJlY2VpdmUgRGF0YQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDEpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMQ0KKyNkZWZpbmUgQVQ5MUNfUEExX1RYRDAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExKSAvLyAgVVNBUlQgMCBUcmFuc21pdCBEYXRhDQorI2RlZmluZSBBVDkxQ19QSU9fUEExMCAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxMCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExMA0KKyNkZWZpbmUgQVQ5MUNfUEExMF9UV0QgICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMTApIC8vICBUV0kgVHdvLXdpcmUgU2VyaWFsIERhdGENCisjZGVmaW5lIEFUOTFDX1BJT19QQTExICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDExKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTExDQorI2RlZmluZSBBVDkxQ19QQTExX1RXQ0sgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExMSkgLy8gIFRXSSBUd28td2lyZSBTZXJpYWwgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BJT19QQTEyICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDEyKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTEyDQorI2RlZmluZSBBVDkxQ19QQTEyX05QQ1MwMCAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExMikgLy8gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMTMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTMpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMTMNCisjZGVmaW5lIEFUOTFDX1BBMTNfTlBDUzAxICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTEzKSAvLyAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAxDQorI2RlZmluZSBBVDkxQ19QQTEzX1BDSzEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExMykgLy8gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDENCisjZGVmaW5lIEFUOTFDX1BJT19QQTE0ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDE0KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTE0DQorI2RlZmluZSBBVDkxQ19QQTE0X05QQ1MwMiAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExNCkgLy8gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMg0KKyNkZWZpbmUgQVQ5MUNfUEExNF9JUlExICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMTQpIC8vICBFeHRlcm5hbCBJbnRlcnJ1cHQgMQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMTUgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTUpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMTUNCisjZGVmaW5lIEFUOTFDX1BBMTVfTlBDUzAzICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTE1KSAvLyAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzDQorI2RlZmluZSBBVDkxQ19QQTE1X1RDTEsyICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExNSkgLy8gIFRpbWVyIENvdW50ZXIgMiBleHRlcm5hbCBjbG9jayBpbnB1dA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMTYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTYpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMTYNCisjZGVmaW5lIEFUOTFDX1BBMTZfTUlTTzAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTE2KSAvLyAgU1BJIDAgTWFzdGVyIEluIFNsYXZlDQorI2RlZmluZSBBVDkxQ19QSU9fUEExNyAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxNykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExNw0KKyNkZWZpbmUgQVQ5MUNfUEExN19NT1NJMCAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMTcpIC8vICBTUEkgMCBNYXN0ZXIgT3V0IFNsYXZlDQorI2RlZmluZSBBVDkxQ19QSU9fUEExOCAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxOCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExOA0KKyNkZWZpbmUgQVQ5MUNfUEExOF9TUENLMCAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMTgpIC8vICBTUEkgMCBTZXJpYWwgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BJT19QQTE5ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDE5KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTE5DQorI2RlZmluZSBBVDkxQ19QQTE5X0NBTlJYICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExOSkgLy8gIENBTiBSZWNlaXZlDQorI2RlZmluZSBBVDkxQ19QSU9fUEEyICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgMikgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEyDQorI2RlZmluZSBBVDkxQ19QQTJfU0NLMCAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTIpIC8vICBVU0FSVCAwIFNlcmlhbCBDbG9jaw0KKyNkZWZpbmUgQVQ5MUNfUEEyX05QQ1MxMSAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyKSAvLyAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAxDQorI2RlZmluZSBBVDkxQ19QSU9fUEEyMCAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAyMCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEyMA0KKyNkZWZpbmUgQVQ5MUNfUEEyMF9DQU5UWCAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjApIC8vICBDQU4gVHJhbnNtaXQNCisjZGVmaW5lIEFUOTFDX1BJT19QQTIxICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDIxKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTIxDQorI2RlZmluZSBBVDkxQ19QQTIxX1RGICAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyMSkgLy8gIFNTQyBUcmFuc21pdCBGcmFtZSBTeW5jDQorI2RlZmluZSBBVDkxQ19QQTIxX05QQ1MxMCAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyMSkgLy8gIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMjIgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjIpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjINCisjZGVmaW5lIEFUOTFDX1BBMjJfVEsgICAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTIyKSAvLyAgU1NDIFRyYW5zbWl0IENsb2NrDQorI2RlZmluZSBBVDkxQ19QQTIyX1NQQ0sxICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyMikgLy8gIFNQSSAxIFNlcmlhbCBDbG9jaw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMjMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjMpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjMNCisjZGVmaW5lIEFUOTFDX1BBMjNfVEQgICAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTIzKSAvLyAgU1NDIFRyYW5zbWl0IGRhdGENCisjZGVmaW5lIEFUOTFDX1BBMjNfTU9TSTEgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTIzKSAvLyAgU1BJIDEgTWFzdGVyIE91dCBTbGF2ZQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMjQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjQpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjQNCisjZGVmaW5lIEFUOTFDX1BBMjRfUkQgICAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTI0KSAvLyAgU1NDIFJlY2VpdmUgRGF0YQ0KKyNkZWZpbmUgQVQ5MUNfUEEyNF9NSVNPMSAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjQpIC8vICBTUEkgMSBNYXN0ZXIgSW4gU2xhdmUNCisjZGVmaW5lIEFUOTFDX1BJT19QQTI1ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDI1KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTI1DQorI2RlZmluZSBBVDkxQ19QQTI1X1JLICAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyNSkgLy8gIFNTQyBSZWNlaXZlIENsb2NrDQorI2RlZmluZSBBVDkxQ19QQTI1X05QQ1MxMSAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyNSkgLy8gIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMjYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjYpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjYNCisjZGVmaW5lIEFUOTFDX1BBMjZfUkYgICAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTI2KSAvLyAgU1NDIFJlY2VpdmUgRnJhbWUgU3luYw0KKyNkZWZpbmUgQVQ5MUNfUEEyNl9OUENTMTIgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjYpIC8vICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDINCisjZGVmaW5lIEFUOTFDX1BJT19QQTI3ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDI3KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTI3DQorI2RlZmluZSBBVDkxQ19QQTI3X0RSWEQgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyNykgLy8gIERCR1UgRGVidWcgUmVjZWl2ZSBEYXRhDQorI2RlZmluZSBBVDkxQ19QQTI3X1BDSzMgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyNykgLy8gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDMNCisjZGVmaW5lIEFUOTFDX1BJT19QQTI4ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDI4KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTI4DQorI2RlZmluZSBBVDkxQ19QQTI4X0RUWEQgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyOCkgLy8gIERCR1UgRGVidWcgVHJhbnNtaXQgRGF0YQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMjkgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjkpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjkNCisjZGVmaW5lIEFUOTFDX1BBMjlfRklRICAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTI5KSAvLyAgQUlDIEZhc3QgSW50ZXJydXB0IElucHV0DQorI2RlZmluZSBBVDkxQ19QQTI5X05QQ1MxMyAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyOSkgLy8gIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDMpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMw0KKyNkZWZpbmUgQVQ5MUNfUEEzX1JUUzAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEzKSAvLyAgVVNBUlQgMCBSZWFkeSBUbyBTZW5kDQorI2RlZmluZSBBVDkxQ19QQTNfTlBDUzEyICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTMpIC8vICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDINCisjZGVmaW5lIEFUOTFDX1BJT19QQTMwICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDMwKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTMwDQorI2RlZmluZSBBVDkxQ19QQTMwX0lSUTAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEzMCkgLy8gIEV4dGVybmFsIEludGVycnVwdCAwDQorI2RlZmluZSBBVDkxQ19QQTMwX1BDSzIgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEzMCkgLy8gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDINCisjZGVmaW5lIEFUOTFDX1BJT19QQTQgICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICA0KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTQNCisjZGVmaW5lIEFUOTFDX1BBNF9DVFMwICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBNCkgLy8gIFVTQVJUIDAgQ2xlYXIgVG8gU2VuZA0KKyNkZWZpbmUgQVQ5MUNfUEE0X05QQ1MxMyAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEE0KSAvLyAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzDQorI2RlZmluZSBBVDkxQ19QSU9fUEE1ICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgNSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEE1DQorI2RlZmluZSBBVDkxQ19QQTVfUlhEMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTUpIC8vICBVU0FSVCAxIFJlY2VpdmUgRGF0YQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBNiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDYpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBNg0KKyNkZWZpbmUgQVQ5MUNfUEE2X1RYRDEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEE2KSAvLyAgVVNBUlQgMSBUcmFuc21pdCBEYXRhDQorI2RlZmluZSBBVDkxQ19QSU9fUEE3ICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgNykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEE3DQorI2RlZmluZSBBVDkxQ19QQTdfU0NLMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTcpIC8vICBVU0FSVCAxIFNlcmlhbCBDbG9jaw0KKyNkZWZpbmUgQVQ5MUNfUEE3X05QQ1MwMSAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEE3KSAvLyAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAxDQorI2RlZmluZSBBVDkxQ19QSU9fUEE4ICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgOCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEE4DQorI2RlZmluZSBBVDkxQ19QQThfUlRTMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTgpIC8vICBVU0FSVCAxIFJlYWR5IFRvIFNlbmQNCisjZGVmaW5lIEFUOTFDX1BBOF9OUENTMDIgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBOCkgLy8gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBOSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDkpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBOQ0KKyNkZWZpbmUgQVQ5MUNfUEE5X0NUUzEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEE5KSAvLyAgVVNBUlQgMSBDbGVhciBUbyBTZW5kDQorI2RlZmluZSBBVDkxQ19QQTlfTlBDUzAzICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTkpIC8vICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMNCisjZGVmaW5lIEFUOTFDX1BJT19QQjAgICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICAwKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjANCisjZGVmaW5lIEFUOTFDX1BCMF9FVFhDS19FUkVGQ0sgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjApIC8vICBFdGhlcm5ldCBNQUMgVHJhbnNtaXQgQ2xvY2svUmVmZXJlbmNlIENsb2NrDQorI2RlZmluZSBBVDkxQ19QQjBfUENLMCAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjApIC8vICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAwDQorI2RlZmluZSBBVDkxQ19QSU9fUEIxICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgMSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIxDQorI2RlZmluZSBBVDkxQ19QQjFfRVRYRU4gICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjEpIC8vICBFdGhlcm5ldCBNQUMgVHJhbnNtaXQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19QSU9fUEIxMCAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxMCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIxMA0KKyNkZWZpbmUgQVQ5MUNfUEIxMF9FVFgyICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMTApIC8vICBFdGhlcm5ldCBNQUMgVHJhbnNtaXQgRGF0YSAyDQorI2RlZmluZSBBVDkxQ19QQjEwX05QQ1MxMSAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxMCkgLy8gIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMTEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTEpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMTENCisjZGVmaW5lIEFUOTFDX1BCMTFfRVRYMyAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjExKSAvLyAgRXRoZXJuZXQgTUFDIFRyYW5zbWl0IERhdGEgMw0KKyNkZWZpbmUgQVQ5MUNfUEIxMV9OUENTMTIgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMTEpIC8vICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDINCisjZGVmaW5lIEFUOTFDX1BJT19QQjEyICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDEyKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjEyDQorI2RlZmluZSBBVDkxQ19QQjEyX0VUWEVSICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxMikgLy8gIEV0aGVybmV0IE1BQyBUcmFuc21pa3QgQ29kaW5nIEVycm9yDQorI2RlZmluZSBBVDkxQ19QQjEyX1RDTEswICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxMikgLy8gIFRpbWVyIENvdW50ZXIgMCBleHRlcm5hbCBjbG9jayBpbnB1dA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMTMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTMpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMTMNCisjZGVmaW5lIEFUOTFDX1BCMTNfRVJYMiAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjEzKSAvLyAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgRGF0YSAyDQorI2RlZmluZSBBVDkxQ19QQjEzX05QQ1MwMSAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxMykgLy8gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMTQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTQpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMTQNCisjZGVmaW5lIEFUOTFDX1BCMTRfRVJYMyAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjE0KSAvLyAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgRGF0YSAzDQorI2RlZmluZSBBVDkxQ19QQjE0X05QQ1MwMiAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxNCkgLy8gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMTUgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTUpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMTUNCisjZGVmaW5lIEFUOTFDX1BCMTVfRVJYRFYgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjE1KSAvLyAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgRGF0YSBWYWxpZA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMTYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTYpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMTYNCisjZGVmaW5lIEFUOTFDX1BCMTZfRUNPTCAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjE2KSAvLyAgRXRoZXJuZXQgTUFDIENvbGxpc2lvbiBEZXRlY3RlZA0KKyNkZWZpbmUgQVQ5MUNfUEIxNl9OUENTMTMgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMTYpIC8vICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMNCisjZGVmaW5lIEFUOTFDX1BJT19QQjE3ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDE3KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjE3DQorI2RlZmluZSBBVDkxQ19QQjE3X0VSWENLICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxNykgLy8gIEV0aGVybmV0IE1BQyBSZWNlaXZlIENsb2NrDQorI2RlZmluZSBBVDkxQ19QQjE3X05QQ1MwMyAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxNykgLy8gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMTggICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTgpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMTgNCisjZGVmaW5lIEFUOTFDX1BCMThfRUYxMDAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjE4KSAvLyAgRXRoZXJuZXQgTUFDIEZvcmNlIDEwMCBNYml0cy9zZWMNCisjZGVmaW5lIEFUOTFDX1BCMThfQURUUkcgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjE4KSAvLyAgQURDIEV4dGVybmFsIFRyaWdnZXINCisjZGVmaW5lIEFUOTFDX1BJT19QQjE5ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDE5KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjE5DQorI2RlZmluZSBBVDkxQ19QQjE5X1BXTTAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxOSkgLy8gIFBXTSBDaGFubmVsIDANCisjZGVmaW5lIEFUOTFDX1BCMTlfVENMSzEgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjE5KSAvLyAgVGltZXIgQ291bnRlciAxIGV4dGVybmFsIGNsb2NrIGlucHV0DQorI2RlZmluZSBBVDkxQ19QSU9fUEIyICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgMikgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIyDQorI2RlZmluZSBBVDkxQ19QQjJfRVRYMCAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjIpIC8vICBFdGhlcm5ldCBNQUMgVHJhbnNtaXQgRGF0YSAwDQorI2RlZmluZSBBVDkxQ19QSU9fUEIyMCAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAyMCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIyMA0KKyNkZWZpbmUgQVQ5MUNfUEIyMF9QV00xICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMjApIC8vICBQV00gQ2hhbm5lbCAxDQorI2RlZmluZSBBVDkxQ19QQjIwX1BDSzAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyMCkgLy8gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDANCisjZGVmaW5lIEFUOTFDX1BJT19QQjIxICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDIxKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjIxDQorI2RlZmluZSBBVDkxQ19QQjIxX1BXTTIgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyMSkgLy8gIFBXTSBDaGFubmVsIDINCisjZGVmaW5lIEFUOTFDX1BCMjFfUENLMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjIxKSAvLyAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMjIgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjIpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMjINCisjZGVmaW5lIEFUOTFDX1BCMjJfUFdNMyAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjIyKSAvLyAgUFdNIENoYW5uZWwgMw0KKyNkZWZpbmUgQVQ5MUNfUEIyMl9QQ0syICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMjIpIC8vICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAyDQorI2RlZmluZSBBVDkxQ19QSU9fUEIyMyAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAyMykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIyMw0KKyNkZWZpbmUgQVQ5MUNfUEIyM19USU9BMCAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMjMpIC8vICBUaW1lciBDb3VudGVyIDAgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQQ0KKyNkZWZpbmUgQVQ5MUNfUEIyM19EQ0QxICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMjMpIC8vICBVU0FSVCAxIERhdGEgQ2FycmllciBEZXRlY3QNCisjZGVmaW5lIEFUOTFDX1BJT19QQjI0ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDI0KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjI0DQorI2RlZmluZSBBVDkxQ19QQjI0X1RJT0IwICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyNCkgLy8gIFRpbWVyIENvdW50ZXIgMCBNdWx0aXB1cnBvc2UgVGltZXIgSS9PIFBpbiBCDQorI2RlZmluZSBBVDkxQ19QQjI0X0RTUjEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyNCkgLy8gIFVTQVJUIDEgRGF0YSBTZXQgcmVhZHkNCisjZGVmaW5lIEFUOTFDX1BJT19QQjI1ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDI1KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjI1DQorI2RlZmluZSBBVDkxQ19QQjI1X1RJT0ExICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyNSkgLy8gIFRpbWVyIENvdW50ZXIgMSBNdWx0aXB1cnBvc2UgVGltZXIgSS9PIFBpbiBBDQorI2RlZmluZSBBVDkxQ19QQjI1X0RUUjEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyNSkgLy8gIFVTQVJUIDEgRGF0YSBUZXJtaW5hbCByZWFkeQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMjYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjYpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMjYNCisjZGVmaW5lIEFUOTFDX1BCMjZfVElPQjEgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjI2KSAvLyAgVGltZXIgQ291bnRlciAxIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEINCisjZGVmaW5lIEFUOTFDX1BCMjZfUkkxICAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjI2KSAvLyAgVVNBUlQgMSBSaW5nIEluZGljYXRvcg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMjcgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjcpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMjcNCisjZGVmaW5lIEFUOTFDX1BCMjdfVElPQTIgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjI3KSAvLyAgVGltZXIgQ291bnRlciAyIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEENCisjZGVmaW5lIEFUOTFDX1BCMjdfUFdNMCAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjI3KSAvLyAgUFdNIENoYW5uZWwgMA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMjggICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjgpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMjgNCisjZGVmaW5lIEFUOTFDX1BCMjhfVElPQjIgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjI4KSAvLyAgVGltZXIgQ291bnRlciAyIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEINCisjZGVmaW5lIEFUOTFDX1BCMjhfUFdNMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjI4KSAvLyAgUFdNIENoYW5uZWwgMQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMjkgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjkpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMjkNCisjZGVmaW5lIEFUOTFDX1BCMjlfUENLMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjI5KSAvLyAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMQ0KKyNkZWZpbmUgQVQ5MUNfUEIyOV9QV00yICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMjkpIC8vICBQV00gQ2hhbm5lbCAyDQorI2RlZmluZSBBVDkxQ19QSU9fUEIzICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgMykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIzDQorI2RlZmluZSBBVDkxQ19QQjNfRVRYMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjMpIC8vICBFdGhlcm5ldCBNQUMgVHJhbnNtaXQgRGF0YSAxDQorI2RlZmluZSBBVDkxQ19QSU9fUEIzMCAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAzMCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIzMA0KKyNkZWZpbmUgQVQ5MUNfUEIzMF9QQ0syICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMzApIC8vICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAyDQorI2RlZmluZSBBVDkxQ19QQjMwX1BXTTMgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIzMCkgLy8gIFBXTSBDaGFubmVsIDMNCisjZGVmaW5lIEFUOTFDX1BJT19QQjQgICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICA0KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjQNCisjZGVmaW5lIEFUOTFDX1BCNF9FQ1JTX0VDUlNEViAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCNCkgLy8gIEV0aGVybmV0IE1BQyBDYXJyaWVyIFNlbnNlL0NhcnJpZXIgU2Vuc2UgYW5kIERhdGEgVmFsaWQNCisjZGVmaW5lIEFUOTFDX1BJT19QQjUgICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICA1KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjUNCisjZGVmaW5lIEFUOTFDX1BCNV9FUlgwICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCNSkgLy8gIEV0aGVybmV0IE1BQyBSZWNlaXZlIERhdGEgMA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCNiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDYpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCNg0KKyNkZWZpbmUgQVQ5MUNfUEI2X0VSWDEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEI2KSAvLyAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgRGF0YSAxDQorI2RlZmluZSBBVDkxQ19QSU9fUEI3ICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgNykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEI3DQorI2RlZmluZSBBVDkxQ19QQjdfRVJYRVIgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjcpIC8vICBFdGhlcm5ldCBNQUMgUmVjZWl2ZSBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCOCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDgpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCOA0KKyNkZWZpbmUgQVQ5MUNfUEI4X0VNREMgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEI4KSAvLyAgRXRoZXJuZXQgTUFDIE1hbmFnZW1lbnQgRGF0YSBDbG9jaw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCOSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDkpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCOQ0KKyNkZWZpbmUgQVQ5MUNfUEI5X0VNRElPICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEI5KSAvLyAgRXRoZXJuZXQgTUFDIE1hbmFnZW1lbnQgRGF0YSBJbnB1dC9PdXRwdXQNCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICAgUEVSSVBIRVJBTCBJRCBERUZJTklUSU9OUyBGT1IgQVQ5MVNBTTdYMjU2ICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0jZGVmaW5lIEFUOTFDX0lEX0ZJUSAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAwICkgIC8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChGSVEpICovDQotI2RlZmluZSBBVDkxQ19JRF9TWVMgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSApICAvKiBTeXN0ZW0gUGVyaXBoZXJhbCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfUElPQSAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDIgKSAgLyogUGFyYWxsZWwgSU8gQ29udHJvbGxlciBBICovDQotI2RlZmluZSBBVDkxQ19JRF9QSU9CICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMyApICAvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEIgKi8NCi0jZGVmaW5lIEFUOTFDX0lEX1NQSTAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSA0ICkgIC8qIFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSAwICovDQotI2RlZmluZSBBVDkxQ19JRF9TUEkxICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgNSApICAvKiBTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgMSAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfVVMwICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDYgKSAgLyogVVNBUlQgMCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfVVMxICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDcgKSAgLyogVVNBUlQgMSAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfU1NDICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDggKSAgLyogU2VyaWFsIFN5bmNocm9ub3VzIENvbnRyb2xsZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0lEX1RXSSAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSA5ICkgIC8qIFR3by1XaXJlIEludGVyZmFjZSAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfUFdNQyAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEwICkgLyogUFdNIENvbnRyb2xsZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0lEX1VEUCAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxMSApIC8qIFVTQiBEZXZpY2UgUG9ydCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfVEMwICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEyICkgLyogVGltZXIgQ291bnRlciAwICovDQotI2RlZmluZSBBVDkxQ19JRF9UQzEgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMTMgKSAvKiBUaW1lciBDb3VudGVyIDEgKi8NCi0jZGVmaW5lIEFUOTFDX0lEX1RDMiAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxNCApIC8qIFRpbWVyIENvdW50ZXIgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfQ0FOICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDE1ICkgLyogQ29udHJvbCBBcmVhIE5ldHdvcmsgQ29udHJvbGxlciAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfRU1BQyAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDE2ICkgLyogRXRoZXJuZXQgTUFDICovDQotI2RlZmluZSBBVDkxQ19JRF9BREMgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMTcgKSAvKiBBbmFsb2ctdG8tRGlnaXRhbCBDb252ZXJ0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0lEX0FFUyAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxOCApIC8qIEFkdmFuY2VkIEVuY3J5cHRpb24gU3RhbmRhcmQgMTI4LWJpdCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfVERFUyAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDE5ICkgLyogVHJpcGxlIERhdGEgRW5jcnlwdGlvbiBTdGFuZGFyZCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfMjBfUmVzZXJ2ZWQgICAgKCAoIHVuc2lnbmVkIGludCApIDIwICkgLyogUmVzZXJ2ZWQgKi8NCi0jZGVmaW5lIEFUOTFDX0lEXzIxX1Jlc2VydmVkICAgICggKCB1bnNpZ25lZCBpbnQgKSAyMSApIC8qIFJlc2VydmVkICovDQotI2RlZmluZSBBVDkxQ19JRF8yMl9SZXNlcnZlZCAgICAoICggdW5zaWduZWQgaW50ICkgMjIgKSAvKiBSZXNlcnZlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfMjNfUmVzZXJ2ZWQgICAgKCAoIHVuc2lnbmVkIGludCApIDIzICkgLyogUmVzZXJ2ZWQgKi8NCi0jZGVmaW5lIEFUOTFDX0lEXzI0X1Jlc2VydmVkICAgICggKCB1bnNpZ25lZCBpbnQgKSAyNCApIC8qIFJlc2VydmVkICovDQotI2RlZmluZSBBVDkxQ19JRF8yNV9SZXNlcnZlZCAgICAoICggdW5zaWduZWQgaW50ICkgMjUgKSAvKiBSZXNlcnZlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfMjZfUmVzZXJ2ZWQgICAgKCAoIHVuc2lnbmVkIGludCApIDI2ICkgLyogUmVzZXJ2ZWQgKi8NCi0jZGVmaW5lIEFUOTFDX0lEXzI3X1Jlc2VydmVkICAgICggKCB1bnNpZ25lZCBpbnQgKSAyNyApIC8qIFJlc2VydmVkICovDQotI2RlZmluZSBBVDkxQ19JRF8yOF9SZXNlcnZlZCAgICAoICggdW5zaWduZWQgaW50ICkgMjggKSAvKiBSZXNlcnZlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfMjlfUmVzZXJ2ZWQgICAgKCAoIHVuc2lnbmVkIGludCApIDI5ICkgLyogUmVzZXJ2ZWQgKi8NCi0jZGVmaW5lIEFUOTFDX0lEX0lSUTAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAzMCApIC8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChJUlEwKSAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfSVJRMSAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDMxICkgLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKElSUTEpICovDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgIFBFUklQSEVSQUwgSUQgREVGSU5JVElPTlMgRk9SIEFUOTFTQU03WDI1Ng0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorI2RlZmluZSBBVDkxQ19JRF9GSVEgICAgKCh1bnNpZ25lZCBpbnQpICAwKSAvLyBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoRklRKQ0KKyNkZWZpbmUgQVQ5MUNfSURfU1lTICAgICgodW5zaWduZWQgaW50KSAgMSkgLy8gU3lzdGVtIFBlcmlwaGVyYWwNCisjZGVmaW5lIEFUOTFDX0lEX1BJT0EgICAoKHVuc2lnbmVkIGludCkgIDIpIC8vIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgQQ0KKyNkZWZpbmUgQVQ5MUNfSURfUElPQiAgICgodW5zaWduZWQgaW50KSAgMykgLy8gUGFyYWxsZWwgSU8gQ29udHJvbGxlciBCDQorI2RlZmluZSBBVDkxQ19JRF9TUEkwICAgKCh1bnNpZ25lZCBpbnQpICA0KSAvLyBTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgMA0KKyNkZWZpbmUgQVQ5MUNfSURfU1BJMSAgICgodW5zaWduZWQgaW50KSAgNSkgLy8gU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlIDENCisjZGVmaW5lIEFUOTFDX0lEX1VTMCAgICAoKHVuc2lnbmVkIGludCkgIDYpIC8vIFVTQVJUIDANCisjZGVmaW5lIEFUOTFDX0lEX1VTMSAgICAoKHVuc2lnbmVkIGludCkgIDcpIC8vIFVTQVJUIDENCisjZGVmaW5lIEFUOTFDX0lEX1NTQyAgICAoKHVuc2lnbmVkIGludCkgIDgpIC8vIFNlcmlhbCBTeW5jaHJvbm91cyBDb250cm9sbGVyDQorI2RlZmluZSBBVDkxQ19JRF9UV0kgICAgKCh1bnNpZ25lZCBpbnQpICA5KSAvLyBUd28tV2lyZSBJbnRlcmZhY2UNCisjZGVmaW5lIEFUOTFDX0lEX1BXTUMgICAoKHVuc2lnbmVkIGludCkgMTApIC8vIFBXTSBDb250cm9sbGVyDQorI2RlZmluZSBBVDkxQ19JRF9VRFAgICAgKCh1bnNpZ25lZCBpbnQpIDExKSAvLyBVU0IgRGV2aWNlIFBvcnQNCisjZGVmaW5lIEFUOTFDX0lEX1RDMCAgICAoKHVuc2lnbmVkIGludCkgMTIpIC8vIFRpbWVyIENvdW50ZXIgMA0KKyNkZWZpbmUgQVQ5MUNfSURfVEMxICAgICgodW5zaWduZWQgaW50KSAxMykgLy8gVGltZXIgQ291bnRlciAxDQorI2RlZmluZSBBVDkxQ19JRF9UQzIgICAgKCh1bnNpZ25lZCBpbnQpIDE0KSAvLyBUaW1lciBDb3VudGVyIDINCisjZGVmaW5lIEFUOTFDX0lEX0NBTiAgICAoKHVuc2lnbmVkIGludCkgMTUpIC8vIENvbnRyb2wgQXJlYSBOZXR3b3JrIENvbnRyb2xsZXINCisjZGVmaW5lIEFUOTFDX0lEX0VNQUMgICAoKHVuc2lnbmVkIGludCkgMTYpIC8vIEV0aGVybmV0IE1BQw0KKyNkZWZpbmUgQVQ5MUNfSURfQURDICAgICgodW5zaWduZWQgaW50KSAxNykgLy8gQW5hbG9nLXRvLURpZ2l0YWwgQ29udmVydGVyDQorI2RlZmluZSBBVDkxQ19JRF9BRVMgICAgKCh1bnNpZ25lZCBpbnQpIDE4KSAvLyBBZHZhbmNlZCBFbmNyeXB0aW9uIFN0YW5kYXJkIDEyOC1iaXQNCisjZGVmaW5lIEFUOTFDX0lEX1RERVMgICAoKHVuc2lnbmVkIGludCkgMTkpIC8vIFRyaXBsZSBEYXRhIEVuY3J5cHRpb24gU3RhbmRhcmQNCisjZGVmaW5lIEFUOTFDX0lEXzIwX1Jlc2VydmVkICgodW5zaWduZWQgaW50KSAyMCkgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzIxX1Jlc2VydmVkICgodW5zaWduZWQgaW50KSAyMSkgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzIyX1Jlc2VydmVkICgodW5zaWduZWQgaW50KSAyMikgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzIzX1Jlc2VydmVkICgodW5zaWduZWQgaW50KSAyMykgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzI0X1Jlc2VydmVkICgodW5zaWduZWQgaW50KSAyNCkgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzI1X1Jlc2VydmVkICgodW5zaWduZWQgaW50KSAyNSkgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzI2X1Jlc2VydmVkICgodW5zaWduZWQgaW50KSAyNikgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzI3X1Jlc2VydmVkICgodW5zaWduZWQgaW50KSAyNykgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzI4X1Jlc2VydmVkICgodW5zaWduZWQgaW50KSAyOCkgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzI5X1Jlc2VydmVkICgodW5zaWduZWQgaW50KSAyOSkgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEX0lSUTAgICAoKHVuc2lnbmVkIGludCkgMzApIC8vIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChJUlEwKQ0KKyNkZWZpbmUgQVQ5MUNfSURfSVJRMSAgICgodW5zaWduZWQgaW50KSAzMSkgLy8gQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKElSUTEpDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgIEJBU0UgQUREUkVTUyBERUZJTklUSU9OUyBGT1IgQVQ5MVNBTTdYMjU2ICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfU1lTICAgICAgICAgKCAoIEFUOTFQU19TWVMgKSAweEZGRkZGMDAwICkgICAgIC8qIChTWVMpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9BSUMgICAgICAgICAoICggQVQ5MVBTX0FJQyApIDB4RkZGRkYwMDAgKSAgICAgLyogKEFJQykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19EQkdVICAgICggKCBBVDkxUFNfUERDICkgMHhGRkZGRjMwMCApICAgICAvKiAoUERDX0RCR1UpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9EQkdVICAgICAgICAoICggQVQ5MVBTX0RCR1UgKSAweEZGRkZGMjAwICkgICAgLyogKERCR1UpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9QSU9BICAgICAgICAoICggQVQ5MVBTX1BJTyApIDB4RkZGRkY0MDAgKSAgICAgLyogKFBJT0EpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9QSU9CICAgICAgICAoICggQVQ5MVBTX1BJTyApIDB4RkZGRkY2MDAgKSAgICAgLyogKFBJT0IpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9DS0dSICAgICAgICAoICggQVQ5MVBTX0NLR1IgKSAweEZGRkZGQzIwICkgICAgLyogKENLR1IpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9QTUMgICAgICAgICAoICggQVQ5MVBTX1BNQyApIDB4RkZGRkZDMDAgKSAgICAgLyogKFBNQykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1JTVEMgICAgICAgICggKCBBVDkxUFNfUlNUQyApIDB4RkZGRkZEMDAgKSAgICAvKiAoUlNUQykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1JUVEMgICAgICAgICggKCBBVDkxUFNfUlRUQyApIDB4RkZGRkZEMjAgKSAgICAvKiAoUlRUQykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1BJVEMgICAgICAgICggKCBBVDkxUFNfUElUQyApIDB4RkZGRkZEMzAgKSAgICAvKiAoUElUQykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1dEVEMgICAgICAgICggKCBBVDkxUFNfV0RUQyApIDB4RkZGRkZENDAgKSAgICAvKiAoV0RUQykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1ZSRUcgICAgICAgICggKCBBVDkxUFNfVlJFRyApIDB4RkZGRkZENjAgKSAgICAvKiAoVlJFRykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX01DICAgICAgICAgICggKCBBVDkxUFNfTUMgKSAweEZGRkZGRjAwICkgICAgICAvKiAoTUMpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfU1BJMSAgICAoICggQVQ5MVBTX1BEQyApIDB4RkZGRTQxMDAgKSAgICAgLyogKFBEQ19TUEkxKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfU1BJMSAgICAgICAgKCAoIEFUOTFQU19TUEkgKSAweEZGRkU0MDAwICkgICAgIC8qIChTUEkxKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfUERDX1NQSTAgICAgKCAoIEFUOTFQU19QREMgKSAweEZGRkUwMTAwICkgICAgIC8qIChQRENfU1BJMCkgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1NQSTAgICAgICAgICggKCBBVDkxUFNfU1BJICkgMHhGRkZFMDAwMCApICAgICAvKiAoU1BJMCkgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19VUzEgICAgICggKCBBVDkxUFNfUERDICkgMHhGRkZDNDEwMCApICAgICAvKiAoUERDX1VTMSkgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1VTMSAgICAgICAgICggKCBBVDkxUFNfVVNBUlQgKSAweEZGRkM0MDAwICkgICAvKiAoVVMxKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfUERDX1VTMCAgICAgKCAoIEFUOTFQU19QREMgKSAweEZGRkMwMTAwICkgICAgIC8qIChQRENfVVMwKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfVVMwICAgICAgICAgKCAoIEFUOTFQU19VU0FSVCApIDB4RkZGQzAwMDAgKSAgIC8qIChVUzApIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfU1NDICAgICAoICggQVQ5MVBTX1BEQyApIDB4RkZGRDQxMDAgKSAgICAgLyogKFBEQ19TU0MpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9TU0MgICAgICAgICAoICggQVQ5MVBTX1NTQyApIDB4RkZGRDQwMDAgKSAgICAgLyogKFNTQykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1RXSSAgICAgICAgICggKCBBVDkxUFNfVFdJICkgMHhGRkZCODAwMCApICAgICAvKiAoVFdJKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfUFdNQ19DSDMgICAgKCAoIEFUOTFQU19QV01DX0NIICkgMHhGRkZDQzI2MCApIC8qIChQV01DX0NIMykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1BXTUNfQ0gyICAgICggKCBBVDkxUFNfUFdNQ19DSCApIDB4RkZGQ0MyNDAgKSAvKiAoUFdNQ19DSDIpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9QV01DX0NIMSAgICAoICggQVQ5MVBTX1BXTUNfQ0ggKSAweEZGRkNDMjIwICkgLyogKFBXTUNfQ0gxKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfUFdNQ19DSDAgICAgKCAoIEFUOTFQU19QV01DX0NIICkgMHhGRkZDQzIwMCApIC8qIChQV01DX0NIMCkgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1BXTUMgICAgICAgICggKCBBVDkxUFNfUFdNQyApIDB4RkZGQ0MwMDAgKSAgICAvKiAoUFdNQykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1VEUCAgICAgICAgICggKCBBVDkxUFNfVURQICkgMHhGRkZCMDAwMCApICAgICAvKiAoVURQKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfVEMwICAgICAgICAgKCAoIEFUOTFQU19UQyApIDB4RkZGQTAwMDAgKSAgICAgIC8qIChUQzApIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9UQzEgICAgICAgICAoICggQVQ5MVBTX1RDICkgMHhGRkZBMDA0MCApICAgICAgLyogKFRDMSkgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1RDMiAgICAgICAgICggKCBBVDkxUFNfVEMgKSAweEZGRkEwMDgwICkgICAgICAvKiAoVEMyKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfVENCICAgICAgICAgKCAoIEFUOTFQU19UQ0IgKSAweEZGRkEwMDAwICkgICAgIC8qIChUQ0IpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUIwICAgICAoICggQVQ5MVBTX0NBTl9NQiApIDB4RkZGRDAyMDAgKSAgLyogKENBTl9NQjApIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUIxICAgICAoICggQVQ5MVBTX0NBTl9NQiApIDB4RkZGRDAyMjAgKSAgLyogKENBTl9NQjEpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUIyICAgICAoICggQVQ5MVBTX0NBTl9NQiApIDB4RkZGRDAyNDAgKSAgLyogKENBTl9NQjIpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUIzICAgICAoICggQVQ5MVBTX0NBTl9NQiApIDB4RkZGRDAyNjAgKSAgLyogKENBTl9NQjMpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUI0ICAgICAoICggQVQ5MVBTX0NBTl9NQiApIDB4RkZGRDAyODAgKSAgLyogKENBTl9NQjQpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUI1ICAgICAoICggQVQ5MVBTX0NBTl9NQiApIDB4RkZGRDAyQTAgKSAgLyogKENBTl9NQjUpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUI2ICAgICAoICggQVQ5MVBTX0NBTl9NQiApIDB4RkZGRDAyQzAgKSAgLyogKENBTl9NQjYpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUI3ICAgICAoICggQVQ5MVBTX0NBTl9NQiApIDB4RkZGRDAyRTAgKSAgLyogKENBTl9NQjcpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9DQU4gICAgICAgICAoICggQVQ5MVBTX0NBTiApIDB4RkZGRDAwMDAgKSAgICAgLyogKENBTikgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX0VNQUMgICAgICAgICggKCBBVDkxUFNfRU1BQyApIDB4RkZGREMwMDAgKSAgICAvKiAoRU1BQykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19BREMgICAgICggKCBBVDkxUFNfUERDICkgMHhGRkZEODEwMCApICAgICAvKiAoUERDX0FEQykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX0FEQyAgICAgICAgICggKCBBVDkxUFNfQURDICkgMHhGRkZEODAwMCApICAgICAvKiAoQURDKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfUERDX0FFUyAgICAgKCAoIEFUOTFQU19QREMgKSAweEZGRkE0MTAwICkgICAgIC8qIChQRENfQUVTKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfQUVTICAgICAgICAgKCAoIEFUOTFQU19BRVMgKSAweEZGRkE0MDAwICkgICAgIC8qIChBRVMpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfVERFUyAgICAoICggQVQ5MVBTX1BEQyApIDB4RkZGQTgxMDAgKSAgICAgLyogKFBEQ19UREVTKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfVERFUyAgICAgICAgKCAoIEFUOTFQU19UREVTICkgMHhGRkZBODAwMCApICAgIC8qIChUREVTKSBCYXNlIEFkZHJlc3MgKi8NCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICAgQkFTRSBBRERSRVNTIERFRklOSVRJT05TIEZPUiBBVDkxU0FNN1gyNTYNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9TWVMgICAgICAgKChBVDkxUFNfU1lTKSAJMHhGRkZGRjAwMCkgLy8gKFNZUykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0FJQyAgICAgICAoKEFUOTFQU19BSUMpIAkweEZGRkZGMDAwKSAvLyAoQUlDKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUERDX0RCR1UgICgoQVQ5MVBTX1BEQykgCTB4RkZGRkYzMDApIC8vIChQRENfREJHVSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0RCR1UgICAgICAoKEFUOTFQU19EQkdVKSAJMHhGRkZGRjIwMCkgLy8gKERCR1UpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QSU9BICAgICAgKChBVDkxUFNfUElPKSAJMHhGRkZGRjQwMCkgLy8gKFBJT0EpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QSU9CICAgICAgKChBVDkxUFNfUElPKSAJMHhGRkZGRjYwMCkgLy8gKFBJT0IpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DS0dSICAgICAgKChBVDkxUFNfQ0tHUikgCTB4RkZGRkZDMjApIC8vIChDS0dSKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUE1DICAgICAgICgoQVQ5MVBTX1BNQykgCTB4RkZGRkZDMDApIC8vIChQTUMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9SU1RDICAgICAgKChBVDkxUFNfUlNUQykgCTB4RkZGRkZEMDApIC8vIChSU1RDKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUlRUQyAgICAgICgoQVQ5MVBTX1JUVEMpIAkweEZGRkZGRDIwKSAvLyAoUlRUQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BJVEMgICAgICAoKEFUOTFQU19QSVRDKSAJMHhGRkZGRkQzMCkgLy8gKFBJVEMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9XRFRDICAgICAgKChBVDkxUFNfV0RUQykgCTB4RkZGRkZENDApIC8vIChXRFRDKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfVlJFRyAgICAgICgoQVQ5MVBTX1ZSRUcpIAkweEZGRkZGRDYwKSAvLyAoVlJFRykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX01DICAgICAgICAoKEFUOTFQU19NQykgCTB4RkZGRkZGMDApIC8vIChNQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19TUEkxICAoKEFUOTFQU19QREMpIAkweEZGRkU0MTAwKSAvLyAoUERDX1NQSTEpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9TUEkxICAgICAgKChBVDkxUFNfU1BJKSAJMHhGRkZFNDAwMCkgLy8gKFNQSTEpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfU1BJMCAgKChBVDkxUFNfUERDKSAJMHhGRkZFMDEwMCkgLy8gKFBEQ19TUEkwKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfU1BJMCAgICAgICgoQVQ5MVBTX1NQSSkgCTB4RkZGRTAwMDApIC8vIChTUEkwKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUERDX1VTMSAgICgoQVQ5MVBTX1BEQykgCTB4RkZGQzQxMDApIC8vIChQRENfVVMxKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfVVMxICAgICAgICgoQVQ5MVBTX1VTQVJUKSAJMHhGRkZDNDAwMCkgLy8gKFVTMSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19VUzAgICAoKEFUOTFQU19QREMpIAkweEZGRkMwMTAwKSAvLyAoUERDX1VTMCkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1VTMCAgICAgICAoKEFUOTFQU19VU0FSVCkgCTB4RkZGQzAwMDApIC8vIChVUzApIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfU1NDICAgKChBVDkxUFNfUERDKSAJMHhGRkZENDEwMCkgLy8gKFBEQ19TU0MpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9TU0MgICAgICAgKChBVDkxUFNfU1NDKSAJMHhGRkZENDAwMCkgLy8gKFNTQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1RXSSAgICAgICAoKEFUOTFQU19UV0kpIAkweEZGRkI4MDAwKSAvLyAoVFdJKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUFdNQ19DSDMgICgoQVQ5MVBTX1BXTUNfQ0gpIAkweEZGRkNDMjYwKSAvLyAoUFdNQ19DSDMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QV01DX0NIMiAgKChBVDkxUFNfUFdNQ19DSCkgCTB4RkZGQ0MyNDApIC8vIChQV01DX0NIMikgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BXTUNfQ0gxICAoKEFUOTFQU19QV01DX0NIKSAJMHhGRkZDQzIyMCkgLy8gKFBXTUNfQ0gxKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUFdNQ19DSDAgICgoQVQ5MVBTX1BXTUNfQ0gpIAkweEZGRkNDMjAwKSAvLyAoUFdNQ19DSDApIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QV01DICAgICAgKChBVDkxUFNfUFdNQykgCTB4RkZGQ0MwMDApIC8vIChQV01DKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfVURQICAgICAgICgoQVQ5MVBTX1VEUCkgCTB4RkZGQjAwMDApIC8vIChVRFApIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9UQzAgICAgICAgKChBVDkxUFNfVEMpIAkweEZGRkEwMDAwKSAvLyAoVEMwKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfVEMxICAgICAgICgoQVQ5MVBTX1RDKSAJMHhGRkZBMDA0MCkgLy8gKFRDMSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1RDMiAgICAgICAoKEFUOTFQU19UQykgCTB4RkZGQTAwODApIC8vIChUQzIpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9UQ0IgICAgICAgKChBVDkxUFNfVENCKSAJMHhGRkZBMDAwMCkgLy8gKFRDQikgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0NBTl9NQjAgICAoKEFUOTFQU19DQU5fTUIpIAkweEZGRkQwMjAwKSAvLyAoQ0FOX01CMCkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0NBTl9NQjEgICAoKEFUOTFQU19DQU5fTUIpIAkweEZGRkQwMjIwKSAvLyAoQ0FOX01CMSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0NBTl9NQjIgICAoKEFUOTFQU19DQU5fTUIpIAkweEZGRkQwMjQwKSAvLyAoQ0FOX01CMikgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0NBTl9NQjMgICAoKEFUOTFQU19DQU5fTUIpIAkweEZGRkQwMjYwKSAvLyAoQ0FOX01CMykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0NBTl9NQjQgICAoKEFUOTFQU19DQU5fTUIpIAkweEZGRkQwMjgwKSAvLyAoQ0FOX01CNCkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0NBTl9NQjUgICAoKEFUOTFQU19DQU5fTUIpIAkweEZGRkQwMkEwKSAvLyAoQ0FOX01CNSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0NBTl9NQjYgICAoKEFUOTFQU19DQU5fTUIpIAkweEZGRkQwMkMwKSAvLyAoQ0FOX01CNikgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0NBTl9NQjcgICAoKEFUOTFQU19DQU5fTUIpIAkweEZGRkQwMkUwKSAvLyAoQ0FOX01CNykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0NBTiAgICAgICAoKEFUOTFQU19DQU4pIAkweEZGRkQwMDAwKSAvLyAoQ0FOKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfRU1BQyAgICAgICgoQVQ5MVBTX0VNQUMpIAkweEZGRkRDMDAwKSAvLyAoRU1BQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19BREMgICAoKEFUOTFQU19QREMpIAkweEZGRkQ4MTAwKSAvLyAoUERDX0FEQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0FEQyAgICAgICAoKEFUOTFQU19BREMpIAkweEZGRkQ4MDAwKSAvLyAoQURDKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUERDX0FFUyAgICgoQVQ5MVBTX1BEQykgCTB4RkZGQTQxMDApIC8vIChQRENfQUVTKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfQUVTICAgICAgICgoQVQ5MVBTX0FFUykgCTB4RkZGQTQwMDApIC8vIChBRVMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfVERFUyAgKChBVDkxUFNfUERDKSAJMHhGRkZBODEwMCkgLy8gKFBEQ19UREVTKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfVERFUyAgICAgICgoQVQ5MVBTX1RERVMpIAkweEZGRkE4MDAwKSAvLyAoVERFUykgQmFzZSBBZGRyZXNzDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgIE1FTU9SWSBNQVBQSU5HIERFRklOSVRJT05TIEZPUiBBVDkxU0FNN1gyNTYgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLSNkZWZpbmUgQVQ5MUNfSVNSQU0gICAgICAgICAgKCAoIGNoYXIgKiApIDB4MDAyMDAwMDAgKSAgICAgICAvKiBJbnRlcm5hbCBTUkFNIGJhc2UgYWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfSVNSQU1fU0laRSAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MDAwMTAwMDAgKSAvKiBJbnRlcm5hbCBTUkFNIHNpemUgaW4gYnl0ZSAoNjQgS2J5dGUpICovDQotI2RlZmluZSBBVDkxQ19JRkxBU0ggICAgICAgICAoICggY2hhciAqICkgMHgwMDEwMDAwMCApICAgICAgIC8qIEludGVybmFsIFJPTSBiYXNlIGFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0lGTEFTSF9TSVpFICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAwMDQwMDAwICkgLyogSW50ZXJuYWwgUk9NIHNpemUgaW4gYnl0ZSAoMjU2IEtieXRlKSAqLw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgICBNRU1PUlkgTUFQUElORyBERUZJTklUSU9OUyBGT1IgQVQ5MVNBTTdYMjU2DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisjZGVmaW5lIEFUOTFDX0lTUkFNCSAoKGNoYXIgKikgCTB4MDAyMDAwMDApIC8vIEludGVybmFsIFNSQU0gYmFzZSBhZGRyZXNzDQorI2RlZmluZSBBVDkxQ19JU1JBTV9TSVpFCSAoKHVuc2lnbmVkIGludCkgMHgwMDAxMDAwMCkgLy8gSW50ZXJuYWwgU1JBTSBzaXplIGluIGJ5dGUgKDY0IEtieXRlKQ0KKyNkZWZpbmUgQVQ5MUNfSUZMQVNICSAoKGNoYXIgKikgCTB4MDAxMDAwMDApIC8vIEludGVybmFsIFJPTSBiYXNlIGFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0lGTEFTSF9TSVpFCSAoKHVuc2lnbmVkIGludCkgMHgwMDA0MDAwMCkgLy8gSW50ZXJuYWwgUk9NIHNpemUgaW4gYnl0ZSAoMjU2IEtieXRlKQ0KIA0KLSNkZWZpbmUgQVQ5MUZfQUlDX0NvbmZpZ3VyZUl0KCBpcnFfaWQsIHByaW9yaXR5LCBzcmNfdHlwZSwgbmV3SGFuZGxlciApICAgICAgICAgICAgIFwNCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICB1bnNpZ25lZCBpbnQgbWFzazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIG1hc2sgPSAweDEgPDwgaXJxX2lkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAvKiBEaXNhYmxlIHRoZSBpbnRlcnJ1cHQgb24gdGhlIGludGVycnVwdCBjb250cm9sbGVyICovICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgQVQ5MUNfQkFTRV9BSUMtPkFJQ19JRENSID0gbWFzazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIFNhdmUgdGhlIGludGVycnVwdCBoYW5kbGVyIHJvdXRpbmUgcG9pbnRlciBhbmQgdGhlIGludGVycnVwdCBwcmlvcml0eSAqLyBcDQotICAgICAgICBBVDkxQ19CQVNFX0FJQy0+QUlDX1NWUlsgaXJxX2lkIF0gPSAoIHVuc2lnbmVkIGludCApIG5ld0hhbmRsZXI7ICAgICAgICAgICAgXA0KLSAgICAgICAgLyogU3RvcmUgdGhlIFNvdXJjZSBNb2RlIFJlZ2lzdGVyICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIEFUOTFDX0JBU0VfQUlDLT5BSUNfU01SWyBpcnFfaWQgXSA9IHNyY190eXBlIHwgcHJpb3JpdHk7ICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAvKiBDbGVhciB0aGUgaW50ZXJydXB0IG9uIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciAqLyAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgQVQ5MUNfQkFTRV9BSUMtPkFJQ19JQ0NSID0gbWFzazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgfQ0KKyNkZWZpbmUgQVQ5MUZfQUlDX0NvbmZpZ3VyZUl0KCBpcnFfaWQsIHByaW9yaXR5LCBzcmNfdHlwZSwgbmV3SGFuZGxlciApCQlcDQorewkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIHVuc2lnbmVkIGludCBtYXNrIDsJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICBtYXNrID0gMHgxIDw8IGlycV9pZDsJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBEaXNhYmxlIHRoZSBpbnRlcnJ1cHQgb24gdGhlIGludGVycnVwdCBjb250cm9sbGVyICovCQkJCQlcDQorICAgIEFUOTFDX0JBU0VfQUlDLT5BSUNfSURDUiA9IG1hc2sgOwkJCQkJCQkJCQlcDQorICAgIC8qIFNhdmUgdGhlIGludGVycnVwdCBoYW5kbGVyIHJvdXRpbmUgcG9pbnRlciBhbmQgdGhlIGludGVycnVwdCBwcmlvcml0eSAqLwlcDQorICAgIEFUOTFDX0JBU0VfQUlDLT5BSUNfU1ZSW2lycV9pZF0gPSAodW5zaWduZWQgaW50KSBuZXdIYW5kbGVyIDsJCQlcDQorICAgIC8qIFN0b3JlIHRoZSBTb3VyY2UgTW9kZSBSZWdpc3RlciAqLwkJCQkJCQkJCVwNCisgICAgQVQ5MUNfQkFTRV9BSUMtPkFJQ19TTVJbaXJxX2lkXSA9IHNyY190eXBlIHwgcHJpb3JpdHkgIDsJCQkJXA0KKyAgICAvKiBDbGVhciB0aGUgaW50ZXJydXB0IG9uIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciAqLwkJCQkJXA0KKyAgICBBVDkxQ19CQVNFX0FJQy0+QUlDX0lDQ1IgPSBtYXNrIDsJCQkJCQkJCQkJXA0KK30NCiANCiANCi0jZW5kaWYgLyogaWZuZGVmIEFUOTFTQU03WDI1Nl9IICovDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvR0NDL0FSTTdfQVQ5MVNBTTdTL2lvYXQ5MXNhbTd4MjU2LmggYi9wb3J0YWJsZS9HQ0MvQVJNN19BVDkxU0FNN1MvaW9hdDkxc2FtN3gyNTYuaAppbmRleCA2NTQ4NzgyLi44ZWE3MjFlIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9HQ0MvQVJNN19BVDkxU0FNN1MvaW9hdDkxc2FtN3gyNTYuaAorKysgYi9wb3J0YWJsZS9HQ0MvQVJNN19BVDkxU0FNN1MvaW9hdDkxc2FtN3gyNTYuaApAQCAtMSw2MzQ2ICsxLDQ2OTcgQEAKLS8qIC0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qIC0gICAgICAgICAgQVRNRUwgTWljcm9jb250cm9sbGVyIFNvZnR3YXJlIFN1cHBvcnQgIC0gIFJPVVNTRVQgIC0gKi8NCi0vKiAtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiAtICBESVNDTEFJTUVSOiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVE1FTCAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiAqLw0KLS8qIC0gIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgKi8NCi0vKiAtICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5UIEFSRSAqLw0KLS8qIC0gIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFUTUVMIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsICovDQotLyogLSAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCAqLw0KLS8qIC0gIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCAqLw0KLS8qIC0gIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgKi8NCi0vKiAtICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyAqLw0KLS8qIC0gIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgKi8NCi0vKiAtICBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAqLw0KLS8qIC0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qIC0gRmlsZSBOYW1lICAgICAgICAgICA6IEFUOTFTQU03WDI1Ni5oICovDQotLyogLSBPYmplY3QgICAgICAgICAgICAgIDogQVQ5MVNBTTdYMjU2IGRlZmluaXRpb25zICovDQotLyogLSBHZW5lcmF0ZWQgICAgICAgICAgIDogQVQ5MSBTVyBBcHBsaWNhdGlvbiBHcm91cCAgMDUvMjAvMjAwNSAoMTY6MjI6MjkpICovDQotLyogLSAqLw0KLS8qIC0gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9BVDkxU0FNN1gyNTYucGwvMS4xMS9UdWUgTWF5IDEwIDEyOjE1OjMyIDIwMDUvLyAqLw0KLS8qIC0gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9TWVNfU0FNN1gucGwvMS4zL1R1ZSBGZWIgIDEgMTc6MDE6NDMgMjAwNS8vICovDQotLyogLSBDVlMgUmVmZXJlbmNlICAgICAgIDogL01DX1NBTTdYLnBsLzEuMi9GcmkgTWF5IDIwIDE0OjEzOjA0IDIwMDUvLyAqLw0KLS8qIC0gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9QTUNfU0FNN1gucGwvMS40L1R1ZSBGZWIgIDggMTM6NTg6MTAgMjAwNS8vICovDQotLyogLSBDVlMgUmVmZXJlbmNlICAgICAgIDogL1JTVENfU0FNN1gucGwvMS4xL1R1ZSBGZWIgIDEgMTY6MTY6MjYgMjAwNS8vICovDQotLyogLSBDVlMgUmVmZXJlbmNlICAgICAgIDogL1VEUF9TQU03WC5wbC8xLjEvVHVlIE1heSAxMCAxMTozNTozNSAyMDA1Ly8gKi8NCi0vKiAtIENWUyBSZWZlcmVuY2UgICAgICAgOiAvUFdNX1NBTTdYLnBsLzEuMS9UdWUgTWF5IDEwIDExOjUzOjA3IDIwMDUvLyAqLw0KLS8qIC0gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9BSUNfNjA3NUIucGwvMS4zL0ZyaSBNYXkgMjAgMTQ6MDE6MzAgMjAwNS8vICovDQotLyogLSBDVlMgUmVmZXJlbmNlICAgICAgIDogL1BJT182MDU3QS5wbC8xLjIvVGh1IEZlYiAgMyAxMDoxODoyOCAyMDA1Ly8gKi8NCi0vKiAtIENWUyBSZWZlcmVuY2UgICAgICAgOiAvUlRUQ182MDgxQS5wbC8xLjIvVHVlIE5vdiAgOSAxNDo0Mzo1OCAyMDA0Ly8gKi8NCi0vKiAtIENWUyBSZWZlcmVuY2UgICAgICAgOiAvUElUQ182MDc5QS5wbC8xLjIvVHVlIE5vdiAgOSAxNDo0Mzo1NiAyMDA0Ly8gKi8NCi0vKiAtIENWUyBSZWZlcmVuY2UgICAgICAgOiAvV0RUQ182MDgwQS5wbC8xLjMvVHVlIE5vdiAgOSAxNDo0NDowMCAyMDA0Ly8gKi8NCi0vKiAtIENWUyBSZWZlcmVuY2UgICAgICAgOiAvVlJFR182MDg1Qi5wbC8xLjEvVHVlIEZlYiAgMSAxNjowNTo0OCAyMDA1Ly8gKi8NCi0vKiAtIENWUyBSZWZlcmVuY2UgICAgICAgOiAvUERDXzYwNzRDLnBsLzEuMi9UaHUgRmViICAzIDA4OjQ4OjU0IDIwMDUvLyAqLw0KLS8qIC0gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9EQkdVXzYwNTlELnBsLzEuMS9Nb24gSmFuIDMxIDEzOjE1OjMyIDIwMDUvLyAqLw0KLS8qIC0gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9TUElfNjA4OEQucGwvMS4zL0ZyaSBNYXkgMjAgMTQ6MDg6NTkgMjAwNS8vICovDQotLyogLSBDVlMgUmVmZXJlbmNlICAgICAgIDogL1VTXzYwODlDLnBsLzEuMS9Nb24gSnVsIDEyIDE4OjIzOjI2IDIwMDQvLyAqLw0KLS8qIC0gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9TU0NfNjA3OEEucGwvMS4xL1R1ZSBKdWwgMTMgMDc6NDU6NDAgMjAwNC8vICovDQotLyogLSBDVlMgUmVmZXJlbmNlICAgICAgIDogL1RXSV82MDYxQS5wbC8xLjEvVHVlIEp1bCAxMyAwNzozODowNiAyMDA0Ly8gKi8NCi0vKiAtIENWUyBSZWZlcmVuY2UgICAgICAgOiAvVENfNjA4MkEucGwvMS43L0ZyaSBNYXIgMTEgMTI6NTI6MTcgMjAwNS8vICovDQotLyogLSBDVlMgUmVmZXJlbmNlICAgICAgIDogL0NBTl82MDE5Qi5wbC8xLjEvVHVlIE1hciAgOCAxMjo0MjoyMiAyMDA1Ly8gKi8NCi0vKiAtIENWUyBSZWZlcmVuY2UgICAgICAgOiAvRU1BQ0JfNjExOUEucGwvMS41L1RodSBGZWIgIDMgMTU6NTI6MDQgMjAwNS8vICovDQotLyogLSBDVlMgUmVmZXJlbmNlICAgICAgIDogL0FEQ182MDUxQy5wbC8xLjEvRnJpIE9jdCAxNyAwOToxMjozOCAyMDAzLy8gKi8NCi0vKiAtIENWUyBSZWZlcmVuY2UgICAgICAgOiAvQUVTXzYxNDlBLnBsLzEuMTAvTW9uIEZlYiAgNyAwOTo0NDoyNSAyMDA1Ly8gKi8NCi0vKiAtIENWUyBSZWZlcmVuY2UgICAgICAgOiAvREVTM182MTUwQS5wbC8xLjEvTW9uIEphbiAxNyAwODozNDozMSAyMDA1Ly8gKi8NCi0vKiAtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisvLyAtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyAtICAgICAgICAgIEFUTUVMIE1pY3JvY29udHJvbGxlciBTb2Z0d2FyZSBTdXBwb3J0ICAtICBST1VTU0VUICAtDQorLy8gLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8gLSAgRElTQ0xBSU1FUjogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVRNRUwgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1INCisvLyAtICBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GDQorLy8gLSAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVCBBUkUNCisvLyAtICBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBVE1FTCBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULA0KKy8vIC0gIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QNCisvLyAtICBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwNCisvLyAtICBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GDQorLy8gLSAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcNCisvLyAtICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsDQorLy8gLSAgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisvLyAtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyAtIEZpbGUgTmFtZSAgICAgICAgICAgOiBBVDkxU0FNN1gyNTYuaA0KKy8vIC0gT2JqZWN0ICAgICAgICAgICAgICA6IEFUOTFTQU03WDI1NiBkZWZpbml0aW9ucw0KKy8vIC0gR2VuZXJhdGVkICAgICAgICAgICA6IEFUOTEgU1cgQXBwbGljYXRpb24gR3JvdXAgIDA1LzIwLzIwMDUgKDE2OjIyOjI5KQ0KKy8vIC0gDQorLy8gLSBDVlMgUmVmZXJlbmNlICAgICAgIDogL0FUOTFTQU03WDI1Ni5wbC8xLjExL1R1ZSBNYXkgMTAgMTI6MTU6MzIgMjAwNS8vDQorLy8gLSBDVlMgUmVmZXJlbmNlICAgICAgIDogL1NZU19TQU03WC5wbC8xLjMvVHVlIEZlYiAgMSAxNzowMTo0MyAyMDA1Ly8NCisvLyAtIENWUyBSZWZlcmVuY2UgICAgICAgOiAvTUNfU0FNN1gucGwvMS4yL0ZyaSBNYXkgMjAgMTQ6MTM6MDQgMjAwNS8vDQorLy8gLSBDVlMgUmVmZXJlbmNlICAgICAgIDogL1BNQ19TQU03WC5wbC8xLjQvVHVlIEZlYiAgOCAxMzo1ODoxMCAyMDA1Ly8NCisvLyAtIENWUyBSZWZlcmVuY2UgICAgICAgOiAvUlNUQ19TQU03WC5wbC8xLjEvVHVlIEZlYiAgMSAxNjoxNjoyNiAyMDA1Ly8NCisvLyAtIENWUyBSZWZlcmVuY2UgICAgICAgOiAvVURQX1NBTTdYLnBsLzEuMS9UdWUgTWF5IDEwIDExOjM1OjM1IDIwMDUvLw0KKy8vIC0gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9QV01fU0FNN1gucGwvMS4xL1R1ZSBNYXkgMTAgMTE6NTM6MDcgMjAwNS8vDQorLy8gLSBDVlMgUmVmZXJlbmNlICAgICAgIDogL0FJQ182MDc1Qi5wbC8xLjMvRnJpIE1heSAyMCAxNDowMTozMCAyMDA1Ly8NCisvLyAtIENWUyBSZWZlcmVuY2UgICAgICAgOiAvUElPXzYwNTdBLnBsLzEuMi9UaHUgRmViICAzIDEwOjE4OjI4IDIwMDUvLw0KKy8vIC0gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9SVFRDXzYwODFBLnBsLzEuMi9UdWUgTm92ICA5IDE0OjQzOjU4IDIwMDQvLw0KKy8vIC0gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9QSVRDXzYwNzlBLnBsLzEuMi9UdWUgTm92ICA5IDE0OjQzOjU2IDIwMDQvLw0KKy8vIC0gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9XRFRDXzYwODBBLnBsLzEuMy9UdWUgTm92ICA5IDE0OjQ0OjAwIDIwMDQvLw0KKy8vIC0gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9WUkVHXzYwODVCLnBsLzEuMS9UdWUgRmViICAxIDE2OjA1OjQ4IDIwMDUvLw0KKy8vIC0gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9QRENfNjA3NEMucGwvMS4yL1RodSBGZWIgIDMgMDg6NDg6NTQgMjAwNS8vDQorLy8gLSBDVlMgUmVmZXJlbmNlICAgICAgIDogL0RCR1VfNjA1OUQucGwvMS4xL01vbiBKYW4gMzEgMTM6MTU6MzIgMjAwNS8vDQorLy8gLSBDVlMgUmVmZXJlbmNlICAgICAgIDogL1NQSV82MDg4RC5wbC8xLjMvRnJpIE1heSAyMCAxNDowODo1OSAyMDA1Ly8NCisvLyAtIENWUyBSZWZlcmVuY2UgICAgICAgOiAvVVNfNjA4OUMucGwvMS4xL01vbiBKdWwgMTIgMTg6MjM6MjYgMjAwNC8vDQorLy8gLSBDVlMgUmVmZXJlbmNlICAgICAgIDogL1NTQ182MDc4QS5wbC8xLjEvVHVlIEp1bCAxMyAwNzo0NTo0MCAyMDA0Ly8NCisvLyAtIENWUyBSZWZlcmVuY2UgICAgICAgOiAvVFdJXzYwNjFBLnBsLzEuMS9UdWUgSnVsIDEzIDA3OjM4OjA2IDIwMDQvLw0KKy8vIC0gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9UQ182MDgyQS5wbC8xLjcvRnJpIE1hciAxMSAxMjo1MjoxNyAyMDA1Ly8NCisvLyAtIENWUyBSZWZlcmVuY2UgICAgICAgOiAvQ0FOXzYwMTlCLnBsLzEuMS9UdWUgTWFyICA4IDEyOjQyOjIyIDIwMDUvLw0KKy8vIC0gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9FTUFDQl82MTE5QS5wbC8xLjUvVGh1IEZlYiAgMyAxNTo1MjowNCAyMDA1Ly8NCisvLyAtIENWUyBSZWZlcmVuY2UgICAgICAgOiAvQURDXzYwNTFDLnBsLzEuMS9GcmkgT2N0IDE3IDA5OjEyOjM4IDIwMDMvLw0KKy8vIC0gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9BRVNfNjE0OUEucGwvMS4xMC9Nb24gRmViICA3IDA5OjQ0OjI1IDIwMDUvLw0KKy8vIC0gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9ERVMzXzYxNTBBLnBsLzEuMS9Nb24gSmFuIDE3IDA4OjM0OjMxIDIwMDUvLw0KKy8vIC0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIA0KICNpZm5kZWYgQVQ5MVNBTTdYMjU2X0gNCiAjZGVmaW5lIEFUOTFTQU03WDI1Nl9IDQogDQotdHlwZWRlZiB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQVQ5MV9SRUc7IC8qIEhhcmR3YXJlIHJlZ2lzdGVyIGRlZmluaXRpb24gKi8NCit0eXBlZGVmIHZvbGF0aWxlIHVuc2lnbmVkIGludCBBVDkxX1JFRzsvLyBIYXJkd2FyZSByZWdpc3RlciBkZWZpbml0aW9uDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBTeXN0ZW0gUGVyaXBoZXJhbHMgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLXR5cGVkZWYgc3RydWN0IF9BVDkxU19TWVMNCi17DQotICAgIEFUOTFfUkVHIEFJQ19TTVJbIDMyIF07ICAgICAvKiBTb3VyY2UgTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBSUNfU1ZSWyAzMiBdOyAgICAgLyogU291cmNlIFZlY3RvciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBSUNfSVZSOyAgICAgICAgICAgLyogSVJRIFZlY3RvciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBSUNfRlZSOyAgICAgICAgICAgLyogRklRIFZlY3RvciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBSUNfSVNSOyAgICAgICAgICAgLyogSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBSUNfSVBSOyAgICAgICAgICAgLyogSW50ZXJydXB0IFBlbmRpbmcgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUlDX0lNUjsgICAgICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFJQ19DSVNSOyAgICAgICAgICAvKiBDb3JlIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQwWyAyIF07ICAgIC8qICovDQotICAgIEFUOTFfUkVHIEFJQ19JRUNSOyAgICAgICAgICAvKiBJbnRlcnJ1cHQgRW5hYmxlIENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUlDX0lEQ1I7ICAgICAgICAgIC8qIEludGVycnVwdCBEaXNhYmxlIENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUlDX0lDQ1I7ICAgICAgICAgIC8qIEludGVycnVwdCBDbGVhciBDb21tYW5kIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFJQ19JU0NSOyAgICAgICAgICAvKiBJbnRlcnJ1cHQgU2V0IENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUlDX0VPSUNSOyAgICAgICAgIC8qIEVuZCBvZiBJbnRlcnJ1cHQgQ29tbWFuZCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBSUNfU1BVOyAgICAgICAgICAgLyogU3B1cmlvdXMgVmVjdG9yIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFJQ19EQ1I7ICAgICAgICAgICAvKiBEZWJ1ZyBDb250cm9sIFJlZ2lzdGVyIChQcm90ZWN0KSAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDFbIDEgXTsgICAgLyogKi8NCi0gICAgQVQ5MV9SRUcgQUlDX0ZGRVI7ICAgICAgICAgIC8qIEZhc3QgRm9yY2luZyBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUlDX0ZGRFI7ICAgICAgICAgIC8qIEZhc3QgRm9yY2luZyBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFJQ19GRlNSOyAgICAgICAgICAvKiBGYXN0IEZvcmNpbmcgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMlsgNDUgXTsgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX0NSOyAgICAgICAgICAgLyogQ29udHJvbCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX01SOyAgICAgICAgICAgLyogTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX0lFUjsgICAgICAgICAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX0lEUjsgICAgICAgICAgLyogSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9JTVI7ICAgICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfQ1NSOyAgICAgICAgICAvKiBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX1JIUjsgICAgICAgICAgLyogUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX1RIUjsgICAgICAgICAgLyogVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX0JSR1I7ICAgICAgICAgLyogQmF1ZCBSYXRlIEdlbmVyYXRvciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDNbIDcgXTsgICAgLyogKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9DSURSOyAgICAgICAgIC8qIENoaXAgSUQgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9FWElEOyAgICAgICAgIC8qIENoaXAgSUQgRXh0ZW5zaW9uIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfRk5UUjsgICAgICAgICAvKiBGb3JjZSBOVFJTVCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDRbIDQ1IF07ICAgLyogKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9SUFI7ICAgICAgICAgIC8qIFJlY2VpdmUgUG9pbnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX1JDUjsgICAgICAgICAgLyogUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfVFBSOyAgICAgICAgICAvKiBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfVENSOyAgICAgICAgICAvKiBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfUk5QUjsgICAgICAgICAvKiBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX1JOQ1I7ICAgICAgICAgLyogUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9UTlBSOyAgICAgICAgIC8qIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX1ROQ1I7ICAgICAgICAgLyogVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfUFRDUjsgICAgICAgICAvKiBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX1BUU1I7ICAgICAgICAgLyogUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDVbIDU0IF07ICAgLyogKi8NCi0gICAgQVQ5MV9SRUcgUElPQV9QRVI7ICAgICAgICAgIC8qIFBJTyBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQV9QRFI7ICAgICAgICAgIC8qIFBJTyBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0FfUFNSOyAgICAgICAgICAvKiBQSU8gU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkNlsgMSBdOyAgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBQSU9BX09FUjsgICAgICAgICAgLyogT3V0cHV0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9BX09EUjsgICAgICAgICAgLyogT3V0cHV0IERpc2FibGUgUmVnaXN0ZXJyICovDQotICAgIEFUOTFfUkVHIFBJT0FfT1NSOyAgICAgICAgICAvKiBPdXRwdXQgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkN1sgMSBdOyAgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBQSU9BX0lGRVI7ICAgICAgICAgLyogSW5wdXQgRmlsdGVyIEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9BX0lGRFI7ICAgICAgICAgLyogSW5wdXQgRmlsdGVyIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQV9JRlNSOyAgICAgICAgIC8qIElucHV0IEZpbHRlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQ4WyAxIF07ICAgIC8qICovDQotICAgIEFUOTFfUkVHIFBJT0FfU09EUjsgICAgICAgICAvKiBTZXQgT3V0cHV0IERhdGEgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQV9DT0RSOyAgICAgICAgIC8qIENsZWFyIE91dHB1dCBEYXRhIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0FfT0RTUjsgICAgICAgICAvKiBPdXRwdXQgRGF0YSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQV9QRFNSOyAgICAgICAgIC8qIFBpbiBEYXRhIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9BX0lFUjsgICAgICAgICAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9BX0lEUjsgICAgICAgICAgLyogSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQV9JTVI7ICAgICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0FfSVNSOyAgICAgICAgICAvKiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0FfTURFUjsgICAgICAgICAvKiBNdWx0aS1kcml2ZXIgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0FfTUREUjsgICAgICAgICAvKiBNdWx0aS1kcml2ZXIgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9BX01EU1I7ICAgICAgICAgLyogTXVsdGktZHJpdmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDlbIDEgXTsgICAgLyogKi8NCi0gICAgQVQ5MV9SRUcgUElPQV9QUFVEUjsgICAgICAgIC8qIFB1bGwtdXAgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9BX1BQVUVSOyAgICAgICAgLyogUHVsbC11cCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQV9QUFVTUjsgICAgICAgIC8qIFB1bGwtdXAgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMTBbIDEgXTsgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBQSU9BX0FTUjsgICAgICAgICAgLyogU2VsZWN0IEEgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQV9CU1I7ICAgICAgICAgIC8qIFNlbGVjdCBCIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0FfQUJTUjsgICAgICAgICAvKiBBQiBTZWxlY3QgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMTFbIDkgXTsgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBQSU9BX09XRVI7ICAgICAgICAgLyogT3V0cHV0IFdyaXRlIEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9BX09XRFI7ICAgICAgICAgLyogT3V0cHV0IFdyaXRlIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQV9PV1NSOyAgICAgICAgIC8qIE91dHB1dCBXcml0ZSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQxMlsgODUgXTsgIC8qICovDQotICAgIEFUOTFfUkVHIFBJT0JfUEVSOyAgICAgICAgICAvKiBQSU8gRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0JfUERSOyAgICAgICAgICAvKiBQSU8gRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9CX1BTUjsgICAgICAgICAgLyogUElPIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDEzWyAxIF07ICAgLyogKi8NCi0gICAgQVQ5MV9SRUcgUElPQl9PRVI7ICAgICAgICAgIC8qIE91dHB1dCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQl9PRFI7ICAgICAgICAgIC8qIE91dHB1dCBEaXNhYmxlIFJlZ2lzdGVyciAqLw0KLSAgICBBVDkxX1JFRyBQSU9CX09TUjsgICAgICAgICAgLyogT3V0cHV0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDE0WyAxIF07ICAgLyogKi8NCi0gICAgQVQ5MV9SRUcgUElPQl9JRkVSOyAgICAgICAgIC8qIElucHV0IEZpbHRlciBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQl9JRkRSOyAgICAgICAgIC8qIElucHV0IEZpbHRlciBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0JfSUZTUjsgICAgICAgICAvKiBJbnB1dCBGaWx0ZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMTVbIDEgXTsgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBQSU9CX1NPRFI7ICAgICAgICAgLyogU2V0IE91dHB1dCBEYXRhIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0JfQ09EUjsgICAgICAgICAvKiBDbGVhciBPdXRwdXQgRGF0YSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9CX09EU1I7ICAgICAgICAgLyogT3V0cHV0IERhdGEgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0JfUERTUjsgICAgICAgICAvKiBQaW4gRGF0YSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQl9JRVI7ICAgICAgICAgIC8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQl9JRFI7ICAgICAgICAgIC8qIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0JfSU1SOyAgICAgICAgICAvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9CX0lTUjsgICAgICAgICAgLyogSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9CX01ERVI7ICAgICAgICAgLyogTXVsdGktZHJpdmVyIEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9CX01ERFI7ICAgICAgICAgLyogTXVsdGktZHJpdmVyIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQl9NRFNSOyAgICAgICAgIC8qIE11bHRpLWRyaXZlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQxNlsgMSBdOyAgIC8qICovDQotICAgIEFUOTFfUkVHIFBJT0JfUFBVRFI7ICAgICAgICAvKiBQdWxsLXVwIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQl9QUFVFUjsgICAgICAgIC8qIFB1bGwtdXAgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0JfUFBVU1I7ICAgICAgICAvKiBQdWxsLXVwIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDE3WyAxIF07ICAgLyogKi8NCi0gICAgQVQ5MV9SRUcgUElPQl9BU1I7ICAgICAgICAgIC8qIFNlbGVjdCBBIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0JfQlNSOyAgICAgICAgICAvKiBTZWxlY3QgQiBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9CX0FCU1I7ICAgICAgICAgLyogQUIgU2VsZWN0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDE4WyA5IF07ICAgLyogKi8NCi0gICAgQVQ5MV9SRUcgUElPQl9PV0VSOyAgICAgICAgIC8qIE91dHB1dCBXcml0ZSBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQl9PV0RSOyAgICAgICAgIC8qIE91dHB1dCBXcml0ZSBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0JfT1dTUjsgICAgICAgICAvKiBPdXRwdXQgV3JpdGUgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMTlbIDM0MSBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBQTUNfU0NFUjsgICAgICAgICAgLyogU3lzdGVtIENsb2NrIEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQTUNfU0NEUjsgICAgICAgICAgLyogU3lzdGVtIENsb2NrIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUE1DX1NDU1I7ICAgICAgICAgIC8qIFN5c3RlbSBDbG9jayBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQyMFsgMSBdOyAgIC8qICovDQotICAgIEFUOTFfUkVHIFBNQ19QQ0VSOyAgICAgICAgICAvKiBQZXJpcGhlcmFsIENsb2NrIEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQTUNfUENEUjsgICAgICAgICAgLyogUGVyaXBoZXJhbCBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBNQ19QQ1NSOyAgICAgICAgICAvKiBQZXJpcGhlcmFsIENsb2NrIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDIxWyAxIF07ICAgLyogKi8NCi0gICAgQVQ5MV9SRUcgUE1DX01PUjsgICAgICAgICAgIC8qIE1haW4gT3NjaWxsYXRvciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQTUNfTUNGUjsgICAgICAgICAgLyogTWFpbiBDbG9jayAgRnJlcXVlbmN5IFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMjJbIDEgXTsgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBQTUNfUExMUjsgICAgICAgICAgLyogUExMIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBNQ19NQ0tSOyAgICAgICAgICAvKiBNYXN0ZXIgQ2xvY2sgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQyM1sgMyBdOyAgIC8qICovDQotICAgIEFUOTFfUkVHIFBNQ19QQ0tSWyA0IF07ICAgICAvKiBQcm9ncmFtbWFibGUgQ2xvY2sgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQyNFsgNCBdOyAgIC8qICovDQotICAgIEFUOTFfUkVHIFBNQ19JRVI7ICAgICAgICAgICAvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBNQ19JRFI7ICAgICAgICAgICAvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQTUNfU1I7ICAgICAgICAgICAgLyogU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBNQ19JTVI7ICAgICAgICAgICAvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDI1WyAzNiBdOyAgLyogKi8NCi0gICAgQVQ5MV9SRUcgUlNUQ19SQ1I7ICAgICAgICAgIC8qIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUlNUQ19SU1I7ICAgICAgICAgIC8qIFJlc2V0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSU1RDX1JNUjsgICAgICAgICAgLyogUmVzZXQgTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDI2WyA1IF07ICAgLyogKi8NCi0gICAgQVQ5MV9SRUcgUlRUQ19SVE1SOyAgICAgICAgIC8qIFJlYWwtdGltZSBNb2RlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJUVENfUlRBUjsgICAgICAgICAvKiBSZWFsLXRpbWUgQWxhcm0gUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUlRUQ19SVFZSOyAgICAgICAgIC8qIFJlYWwtdGltZSBWYWx1ZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSVFRDX1JUU1I7ICAgICAgICAgLyogUmVhbC10aW1lIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSVRDX1BJTVI7ICAgICAgICAgLyogUGVyaW9kIEludGVydmFsIE1vZGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElUQ19QSVNSOyAgICAgICAgIC8qIFBlcmlvZCBJbnRlcnZhbCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElUQ19QSVZSOyAgICAgICAgIC8qIFBlcmlvZCBJbnRlcnZhbCBWYWx1ZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSVRDX1BJSVI7ICAgICAgICAgLyogUGVyaW9kIEludGVydmFsIEltYWdlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFdEVENfV0RDUjsgICAgICAgICAvKiBXYXRjaGRvZyBDb250cm9sIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFdEVENfV0RNUjsgICAgICAgICAvKiBXYXRjaGRvZyBNb2RlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFdEVENfV0RTUjsgICAgICAgICAvKiBXYXRjaGRvZyBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQyN1sgNSBdOyAgIC8qICovDQotICAgIEFUOTFfUkVHIFZSRUdfTVI7ICAgICAgICAgICAvKiBWb2x0YWdlIFJlZ3VsYXRvciBNb2RlIFJlZ2lzdGVyICovDQotfSBBVDkxU19TWVMsICogQVQ5MVBTX1NZUzsNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFN5c3RlbSBQZXJpcGhlcmFscw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1NZUyB7DQorCUFUOTFfUkVHCSBBSUNfU01SWzMyXTsgCS8vIFNvdXJjZSBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfU1ZSWzMyXTsgCS8vIFNvdXJjZSBWZWN0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19JVlI7IAkvLyBJUlEgVmVjdG9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfRlZSOyAJLy8gRklRIFZlY3RvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0lTUjsgCS8vIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19JUFI7IAkvLyBJbnRlcnJ1cHQgUGVuZGluZyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfQ0lTUjsgCS8vIENvcmUgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzJdOyAJLy8gDQorCUFUOTFfUkVHCSBBSUNfSUVDUjsgCS8vIEludGVycnVwdCBFbmFibGUgQ29tbWFuZCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0lEQ1I7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBDb21tYW5kIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfSUNDUjsgCS8vIEludGVycnVwdCBDbGVhciBDb21tYW5kIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfSVNDUjsgCS8vIEludGVycnVwdCBTZXQgQ29tbWFuZCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0VPSUNSOyAJLy8gRW5kIG9mIEludGVycnVwdCBDb21tYW5kIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfU1BVOyAJLy8gU3B1cmlvdXMgVmVjdG9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfRENSOyAJLy8gRGVidWcgQ29udHJvbCBSZWdpc3RlciAoUHJvdGVjdCkNCisJQVQ5MV9SRUcJIFJlc2VydmVkMVsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgQUlDX0ZGRVI7IAkvLyBGYXN0IEZvcmNpbmcgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfRkZEUjsgCS8vIEZhc3QgRm9yY2luZyBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfRkZTUjsgCS8vIEZhc3QgRm9yY2luZyBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMls0NV07IAkvLyANCisJQVQ5MV9SRUcJIERCR1VfQ1I7IAkvLyBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX01SOyAJLy8gTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX0lEUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX0NTUjsgCS8vIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1JIUjsgCS8vIFJlY2VpdmVyIEhvbGRpbmcgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfVEhSOyAJLy8gVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9CUkdSOyAJLy8gQmF1ZCBSYXRlIEdlbmVyYXRvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQzWzddOyAJLy8gDQorCUFUOTFfUkVHCSBEQkdVX0NJRFI7IAkvLyBDaGlwIElEIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX0VYSUQ7IAkvLyBDaGlwIElEIEV4dGVuc2lvbiBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9GTlRSOyAJLy8gRm9yY2UgTlRSU1QgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkNFs0NV07IAkvLyANCisJQVQ5MV9SRUcJIERCR1VfUlBSOyAJLy8gUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1JDUjsgCS8vIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9UUFI7IAkvLyBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1RDUjsgCS8vIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfUk5QUjsgCS8vIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1JOQ1I7IAkvLyBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9UTlBSOyAJLy8gVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1ROQ1I7IAkvLyBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfUFRDUjsgCS8vIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1BUU1I7IAkvLyBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDVbNTRdOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9BX1BFUjsgCS8vIFBJTyBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0FfUERSOyAJLy8gUElPIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0FfUFNSOyAJLy8gUElPIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQ2WzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9BX09FUjsgCS8vIE91dHB1dCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0FfT0RSOyAJLy8gT3V0cHV0IERpc2FibGUgUmVnaXN0ZXJyDQorCUFUOTFfUkVHCSBQSU9BX09TUjsgCS8vIE91dHB1dCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkN1sxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUElPQV9JRkVSOyAJLy8gSW5wdXQgRmlsdGVyIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9JRkRSOyAJLy8gSW5wdXQgRmlsdGVyIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0FfSUZTUjsgCS8vIElucHV0IEZpbHRlciBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkOFsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUElPQV9TT0RSOyAJLy8gU2V0IE91dHB1dCBEYXRhIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX0NPRFI7IAkvLyBDbGVhciBPdXRwdXQgRGF0YSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9PRFNSOyAJLy8gT3V0cHV0IERhdGEgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX1BEU1I7IAkvLyBQaW4gRGF0YSBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0FfSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9JU1I7IAkvLyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX01ERVI7IAkvLyBNdWx0aS1kcml2ZXIgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX01ERFI7IAkvLyBNdWx0aS1kcml2ZXIgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9NRFNSOyAJLy8gTXVsdGktZHJpdmVyIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQ5WzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9BX1BQVURSOyAJLy8gUHVsbC11cCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX1BQVUVSOyAJLy8gUHVsbC11cCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0FfUFBVU1I7IAkvLyBQdWxsLXVwIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxMFsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUElPQV9BU1I7IAkvLyBTZWxlY3QgQSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9CU1I7IAkvLyBTZWxlY3QgQiBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9BQlNSOyAJLy8gQUIgU2VsZWN0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxMVs5XTsgCS8vIA0KKwlBVDkxX1JFRwkgUElPQV9PV0VSOyAJLy8gT3V0cHV0IFdyaXRlIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9PV0RSOyAJLy8gT3V0cHV0IFdyaXRlIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0FfT1dTUjsgCS8vIE91dHB1dCBXcml0ZSBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMTJbODVdOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9CX1BFUjsgCS8vIFBJTyBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfUERSOyAJLy8gUElPIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfUFNSOyAJLy8gUElPIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxM1sxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUElPQl9PRVI7IAkvLyBPdXRwdXQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX09EUjsgCS8vIE91dHB1dCBEaXNhYmxlIFJlZ2lzdGVycg0KKwlBVDkxX1JFRwkgUElPQl9PU1I7IAkvLyBPdXRwdXQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDE0WzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9CX0lGRVI7IAkvLyBJbnB1dCBGaWx0ZXIgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX0lGRFI7IAkvLyBJbnB1dCBGaWx0ZXIgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9JRlNSOyAJLy8gSW5wdXQgRmlsdGVyIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxNVsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUElPQl9TT0RSOyAJLy8gU2V0IE91dHB1dCBEYXRhIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX0NPRFI7IAkvLyBDbGVhciBPdXRwdXQgRGF0YSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9PRFNSOyAJLy8gT3V0cHV0IERhdGEgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX1BEU1I7IAkvLyBQaW4gRGF0YSBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9JU1I7IAkvLyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX01ERVI7IAkvLyBNdWx0aS1kcml2ZXIgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX01ERFI7IAkvLyBNdWx0aS1kcml2ZXIgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9NRFNSOyAJLy8gTXVsdGktZHJpdmVyIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxNlsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUElPQl9QUFVEUjsgCS8vIFB1bGwtdXAgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9QUFVFUjsgCS8vIFB1bGwtdXAgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX1BQVVNSOyAJLy8gUHVsbC11cCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMTdbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT0JfQVNSOyAJLy8gU2VsZWN0IEEgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfQlNSOyAJLy8gU2VsZWN0IEIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfQUJTUjsgCS8vIEFCIFNlbGVjdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMThbOV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT0JfT1dFUjsgCS8vIE91dHB1dCBXcml0ZSBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfT1dEUjsgCS8vIE91dHB1dCBXcml0ZSBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX09XU1I7IAkvLyBPdXRwdXQgV3JpdGUgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDE5WzM0MV07IAkvLyANCisJQVQ5MV9SRUcJIFBNQ19TQ0VSOyAJLy8gU3lzdGVtIENsb2NrIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUE1DX1NDRFI7IAkvLyBTeXN0ZW0gQ2xvY2sgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUE1DX1NDU1I7IAkvLyBTeXN0ZW0gQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDIwWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQTUNfUENFUjsgCS8vIFBlcmlwaGVyYWwgQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfUENEUjsgCS8vIFBlcmlwaGVyYWwgQ2xvY2sgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUE1DX1BDU1I7IAkvLyBQZXJpcGhlcmFsIENsb2NrIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQyMVsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUE1DX01PUjsgCS8vIE1haW4gT3NjaWxsYXRvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUE1DX01DRlI7IAkvLyBNYWluIENsb2NrICBGcmVxdWVuY3kgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMjJbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBNQ19QTExSOyAJLy8gUExMIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfTUNLUjsgCS8vIE1hc3RlciBDbG9jayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQyM1szXTsgCS8vIA0KKwlBVDkxX1JFRwkgUE1DX1BDS1JbNF07IAkvLyBQcm9ncmFtbWFibGUgQ2xvY2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMjRbNF07IAkvLyANCisJQVQ5MV9SRUcJIFBNQ19JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19TUjsgCS8vIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUE1DX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDI1WzM2XTsgCS8vIA0KKwlBVDkxX1JFRwkgUlNUQ19SQ1I7IAkvLyBSZXNldCBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSU1RDX1JTUjsgCS8vIFJlc2V0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUlNUQ19STVI7IAkvLyBSZXNldCBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDI2WzVdOyAJLy8gDQorCUFUOTFfUkVHCSBSVFRDX1JUTVI7IAkvLyBSZWFsLXRpbWUgTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUlRUQ19SVEFSOyAJLy8gUmVhbC10aW1lIEFsYXJtIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSVFRDX1JUVlI7IAkvLyBSZWFsLXRpbWUgVmFsdWUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJUVENfUlRTUjsgCS8vIFJlYWwtdGltZSBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJVENfUElNUjsgCS8vIFBlcmlvZCBJbnRlcnZhbCBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSVRDX1BJU1I7IAkvLyBQZXJpb2QgSW50ZXJ2YWwgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSVRDX1BJVlI7IAkvLyBQZXJpb2QgSW50ZXJ2YWwgVmFsdWUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJVENfUElJUjsgCS8vIFBlcmlvZCBJbnRlcnZhbCBJbWFnZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgV0RUQ19XRENSOyAJLy8gV2F0Y2hkb2cgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgV0RUQ19XRE1SOyAJLy8gV2F0Y2hkb2cgTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgV0RUQ19XRFNSOyAJLy8gV2F0Y2hkb2cgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDI3WzVdOyAJLy8gDQorCUFUOTFfUkVHCSBWUkVHX01SOyAJLy8gVm9sdGFnZSBSZWd1bGF0b3IgTW9kZSBSZWdpc3Rlcg0KK30gQVQ5MVNfU1lTLCAqQVQ5MVBTX1NZUzsNCiANCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfQUlDDQotew0KLSAgICBBVDkxX1JFRyBBSUNfU01SWyAzMiBdOyAgLyogU291cmNlIE1vZGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUlDX1NWUlsgMzIgXTsgIC8qIFNvdXJjZSBWZWN0b3IgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUlDX0lWUjsgICAgICAgIC8qIElSUSBWZWN0b3IgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUlDX0ZWUjsgICAgICAgIC8qIEZJUSBWZWN0b3IgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUlDX0lTUjsgICAgICAgIC8qIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUlDX0lQUjsgICAgICAgIC8qIEludGVycnVwdCBQZW5kaW5nIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFJQ19JTVI7ICAgICAgICAvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBSUNfQ0lTUjsgICAgICAgLyogQ29yZSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMFsgMiBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBBSUNfSUVDUjsgICAgICAgLyogSW50ZXJydXB0IEVuYWJsZSBDb21tYW5kIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFJQ19JRENSOyAgICAgICAvKiBJbnRlcnJ1cHQgRGlzYWJsZSBDb21tYW5kIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFJQ19JQ0NSOyAgICAgICAvKiBJbnRlcnJ1cHQgQ2xlYXIgQ29tbWFuZCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBSUNfSVNDUjsgICAgICAgLyogSW50ZXJydXB0IFNldCBDb21tYW5kIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFJQ19FT0lDUjsgICAgICAvKiBFbmQgb2YgSW50ZXJydXB0IENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUlDX1NQVTsgICAgICAgIC8qIFNwdXJpb3VzIFZlY3RvciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBSUNfRENSOyAgICAgICAgLyogRGVidWcgQ29udHJvbCBSZWdpc3RlciAoUHJvdGVjdCkgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQxWyAxIF07IC8qICovDQotICAgIEFUOTFfUkVHIEFJQ19GRkVSOyAgICAgICAvKiBGYXN0IEZvcmNpbmcgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFJQ19GRkRSOyAgICAgICAvKiBGYXN0IEZvcmNpbmcgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBSUNfRkZTUjsgICAgICAgLyogRmFzdCBGb3JjaW5nIFN0YXR1cyBSZWdpc3RlciAqLw0KLX0gQVQ5MVNfQUlDLCAqIEFUOTFQU19BSUM7DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlcg0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX0FJQyB7DQorCUFUOTFfUkVHCSBBSUNfU01SWzMyXTsgCS8vIFNvdXJjZSBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfU1ZSWzMyXTsgCS8vIFNvdXJjZSBWZWN0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19JVlI7IAkvLyBJUlEgVmVjdG9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfRlZSOyAJLy8gRklRIFZlY3RvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0lTUjsgCS8vIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19JUFI7IAkvLyBJbnRlcnJ1cHQgUGVuZGluZyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfQ0lTUjsgCS8vIENvcmUgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzJdOyAJLy8gDQorCUFUOTFfUkVHCSBBSUNfSUVDUjsgCS8vIEludGVycnVwdCBFbmFibGUgQ29tbWFuZCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0lEQ1I7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBDb21tYW5kIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfSUNDUjsgCS8vIEludGVycnVwdCBDbGVhciBDb21tYW5kIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfSVNDUjsgCS8vIEludGVycnVwdCBTZXQgQ29tbWFuZCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0VPSUNSOyAJLy8gRW5kIG9mIEludGVycnVwdCBDb21tYW5kIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfU1BVOyAJLy8gU3B1cmlvdXMgVmVjdG9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfRENSOyAJLy8gRGVidWcgQ29udHJvbCBSZWdpc3RlciAoUHJvdGVjdCkNCisJQVQ5MV9SRUcJIFJlc2VydmVkMVsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgQUlDX0ZGRVI7IAkvLyBGYXN0IEZvcmNpbmcgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfRkZEUjsgCS8vIEZhc3QgRm9yY2luZyBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfRkZTUjsgCS8vIEZhc3QgRm9yY2luZyBTdGF0dXMgUmVnaXN0ZXINCit9IEFUOTFTX0FJQywgKkFUOTFQU19BSUM7DQogDQotLyogLS0tLS0tLS0gQUlDX1NNUiA6IChBSUMgT2Zmc2V0OiAweDApIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19QUklPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg3IDw8IDAgKSAvKiAoQUlDKSBQcmlvcml0eSBMZXZlbCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FJQ19QUklPUl9MT1dFU1QgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgKSAgICAgIC8qIChBSUMpIExvd2VzdCBwcmlvcml0eSBsZXZlbCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FJQ19QUklPUl9ISUdIRVNUICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDcgKSAgICAgIC8qIChBSUMpIEhpZ2hlc3QgcHJpb3JpdHkgbGV2ZWwgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19TUkNUWVBFICAgICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDUgKSAvKiAoQUlDKSBJbnRlcnJ1cHQgU291cmNlIFR5cGUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BSUNfU1JDVFlQRV9JTlRfSElHSF9MRVZFTCAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDUgKSAvKiAoQUlDKSBJbnRlcm5hbCBTb3VyY2VzIENvZGUgTGFiZWwgSGlnaC1sZXZlbCBTZW5zaXRpdmUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BSUNfU1JDVFlQRV9FWFRfTE9XX0xFVkVMICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDUgKSAvKiAoQUlDKSBFeHRlcm5hbCBTb3VyY2VzIENvZGUgTGFiZWwgTG93LWxldmVsIFNlbnNpdGl2ZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FJQ19TUkNUWVBFX0lOVF9QT1NJVElWRV9FREdFICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNSApIC8qIChBSUMpIEludGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBQb3NpdGl2ZSBFZGdlIHRyaWdnZXJlZCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FJQ19TUkNUWVBFX0VYVF9ORUdBVElWRV9FREdFICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNSApIC8qIChBSUMpIEV4dGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBOZWdhdGl2ZSBFZGdlIHRyaWdnZXJlZCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FJQ19TUkNUWVBFX0hJR0hfTEVWRUwgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgNSApIC8qIChBSUMpIEludGVybmFsIE9yIEV4dGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBIaWdoLWxldmVsIFNlbnNpdGl2ZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FJQ19TUkNUWVBFX1BPU0lUSVZFX0VER0UgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgNSApIC8qIChBSUMpIEludGVybmFsIE9yIEV4dGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBQb3NpdGl2ZSBFZGdlIHRyaWdnZXJlZCAqLw0KLS8qIC0tLS0tLS0tIEFJQ19DSVNSIDogKEFJQyBPZmZzZXQ6IDB4MTE0KSBBSUMgQ29yZSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19BSUNfTkZJUSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgLyogKEFJQykgTkZJUSBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19OSVJRICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEgKSAvKiAoQUlDKSBOSVJRIFN0YXR1cyAqLw0KLS8qIC0tLS0tLS0tIEFJQ19EQ1IgOiAoQUlDIE9mZnNldDogMHgxMzgpIEFJQyBEZWJ1ZyBDb250cm9sIFJlZ2lzdGVyIChQcm90ZWN0KSAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX0RDUl9QUk9UICAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApIC8qIChBSUMpIFByb3RlY3Rpb24gTW9kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX0RDUl9HTVNLICAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApIC8qIChBSUMpIEdlbmVyYWwgTWFzayAqLw0KKy8vIC0tLS0tLS0tIEFJQ19TTVIgOiAoQUlDIE9mZnNldDogMHgwKSBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQUlDX1BSSU9SICAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgIDApIC8vIChBSUMpIFByaW9yaXR5IExldmVsDQorI2RlZmluZSAJQVQ5MUNfQUlDX1BSSU9SX0xPV0VTVCAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDApIC8vIChBSUMpIExvd2VzdCBwcmlvcml0eSBsZXZlbA0KKyNkZWZpbmUgCUFUOTFDX0FJQ19QUklPUl9ISUdIRVNUICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3KSAvLyAoQUlDKSBIaWdoZXN0IHByaW9yaXR5IGxldmVsDQorI2RlZmluZSBBVDkxQ19BSUNfU1JDVFlQRSAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgNSkgLy8gKEFJQykgSW50ZXJydXB0IFNvdXJjZSBUeXBlDQorI2RlZmluZSAJQVQ5MUNfQUlDX1NSQ1RZUEVfSU5UX0hJR0hfTEVWRUwgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgNSkgLy8gKEFJQykgSW50ZXJuYWwgU291cmNlcyBDb2RlIExhYmVsIEhpZ2gtbGV2ZWwgU2Vuc2l0aXZlDQorI2RlZmluZSAJQVQ5MUNfQUlDX1NSQ1RZUEVfRVhUX0xPV19MRVZFTCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgNSkgLy8gKEFJQykgRXh0ZXJuYWwgU291cmNlcyBDb2RlIExhYmVsIExvdy1sZXZlbCBTZW5zaXRpdmUNCisjZGVmaW5lIAlBVDkxQ19BSUNfU1JDVFlQRV9JTlRfUE9TSVRJVkVfRURHRSAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoQUlDKSBJbnRlcm5hbCBTb3VyY2VzIENvZGUgTGFiZWwgUG9zaXRpdmUgRWRnZSB0cmlnZ2VyZWQNCisjZGVmaW5lIAlBVDkxQ19BSUNfU1JDVFlQRV9FWFRfTkVHQVRJVkVfRURHRSAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoQUlDKSBFeHRlcm5hbCBTb3VyY2VzIENvZGUgTGFiZWwgTmVnYXRpdmUgRWRnZSB0cmlnZ2VyZWQNCisjZGVmaW5lIAlBVDkxQ19BSUNfU1JDVFlQRV9ISUdIX0xFVkVMICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA1KSAvLyAoQUlDKSBJbnRlcm5hbCBPciBFeHRlcm5hbCBTb3VyY2VzIENvZGUgTGFiZWwgSGlnaC1sZXZlbCBTZW5zaXRpdmUNCisjZGVmaW5lIAlBVDkxQ19BSUNfU1JDVFlQRV9QT1NJVElWRV9FREdFICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA1KSAvLyAoQUlDKSBJbnRlcm5hbCBPciBFeHRlcm5hbCBTb3VyY2VzIENvZGUgTGFiZWwgUG9zaXRpdmUgRWRnZSB0cmlnZ2VyZWQNCisvLyAtLS0tLS0tLSBBSUNfQ0lTUiA6IChBSUMgT2Zmc2V0OiAweDExNCkgQUlDIENvcmUgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FJQ19ORklRICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoQUlDKSBORklRIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfQUlDX05JUlEgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChBSUMpIE5JUlEgU3RhdHVzDQorLy8gLS0tLS0tLS0gQUlDX0RDUiA6IChBSUMgT2Zmc2V0OiAweDEzOCkgQUlDIERlYnVnIENvbnRyb2wgUmVnaXN0ZXIgKFByb3RlY3QpIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQUlDX0RDUl9QUk9UICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChBSUMpIFByb3RlY3Rpb24gTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfQUlDX0RDUl9HTVNLICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChBSUMpIEdlbmVyYWwgTWFzaw0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUGVyaXBoZXJhbCBETUEgQ29udHJvbGxlciAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotdHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1BEQw0KLXsNCi0gICAgQVQ5MV9SRUcgUERDX1JQUjsgIC8qIFJlY2VpdmUgUG9pbnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQRENfUkNSOyAgLyogUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBEQ19UUFI7ICAvKiBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBEQ19UQ1I7ICAvKiBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBEQ19STlBSOyAvKiBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQRENfUk5DUjsgLyogUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUERDX1ROUFI7IC8qIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQRENfVE5DUjsgLyogVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBEQ19QVENSOyAvKiBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQRENfUFRTUjsgLyogUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLX0gQVQ5MVNfUERDLCAqIEFUOTFQU19QREM7DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQZXJpcGhlcmFsIERNQSBDb250cm9sbGVyDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfUERDIHsNCisJQVQ5MV9SRUcJIFBEQ19SUFI7IAkvLyBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBEQ19SQ1I7IAkvLyBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBEQ19UUFI7IAkvLyBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQRENfVENSOyAJLy8gVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUERDX1JOUFI7IAkvLyBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUERDX1JOQ1I7IAkvLyBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUERDX1ROUFI7IAkvLyBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBEQ19UTkNSOyAJLy8gVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQRENfUFRDUjsgCS8vIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQRENfUFRTUjsgCS8vIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCit9IEFUOTFTX1BEQywgKkFUOTFQU19QREM7DQogDQotLyogLS0tLS0tLS0gUERDX1BUQ1IgOiAoUERDIE9mZnNldDogMHgyMCkgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1BEQ19SWFRFTiAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgLyogKFBEQykgUmVjZWl2ZXIgVHJhbnNmZXIgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19QRENfUlhURElTICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApIC8qIChQREMpIFJlY2VpdmVyIFRyYW5zZmVyIERpc2FibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1BEQ19UWFRFTiAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgLyogKFBEQykgVHJhbnNtaXR0ZXIgVHJhbnNmZXIgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19QRENfVFhURElTICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOSApIC8qIChQREMpIFRyYW5zbWl0dGVyIFRyYW5zZmVyIERpc2FibGUgKi8NCi0vKiAtLS0tLS0tLSBQRENfUFRTUiA6IChQREMgT2Zmc2V0OiAweDI0KSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQorLy8gLS0tLS0tLS0gUERDX1BUQ1IgOiAoUERDIE9mZnNldDogMHgyMCkgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QRENfUlhURU4gICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFBEQykgUmVjZWl2ZXIgVHJhbnNmZXIgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19QRENfUlhURElTICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFBEQykgUmVjZWl2ZXIgVHJhbnNmZXIgRGlzYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfUERDX1RYVEVOICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChQREMpIFRyYW5zbWl0dGVyIFRyYW5zZmVyIEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfUERDX1RYVERJUyAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChQREMpIFRyYW5zbWl0dGVyIFRyYW5zZmVyIERpc2FibGUNCisvLyAtLS0tLS0tLSBQRENfUFRTUiA6IChQREMgT2Zmc2V0OiAweDI0KSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgRGVidWcgVW5pdCAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotdHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX0RCR1UNCi17DQotICAgIEFUOTFfUkVHIERCR1VfQ1I7ICAgICAgICAgLyogQ29udHJvbCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX01SOyAgICAgICAgIC8qIE1vZGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9JRVI7ICAgICAgICAvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfSURSOyAgICAgICAgLyogSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9JTVI7ICAgICAgICAvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX0NTUjsgICAgICAgIC8qIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfUkhSOyAgICAgICAgLyogUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX1RIUjsgICAgICAgIC8qIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9CUkdSOyAgICAgICAvKiBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMFsgNyBdOyAgLyogKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9DSURSOyAgICAgICAvKiBDaGlwIElEIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfRVhJRDsgICAgICAgLyogQ2hpcCBJRCBFeHRlbnNpb24gUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9GTlRSOyAgICAgICAvKiBGb3JjZSBOVFJTVCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDFbIDQ1IF07IC8qICovDQotICAgIEFUOTFfUkVHIERCR1VfUlBSOyAgICAgICAgLyogUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfUkNSOyAgICAgICAgLyogUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfVFBSOyAgICAgICAgLyogVHJhbnNtaXQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX1RDUjsgICAgICAgIC8qIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9STlBSOyAgICAgICAvKiBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX1JOQ1I7ICAgICAgIC8qIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfVE5QUjsgICAgICAgLyogVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfVE5DUjsgICAgICAgLyogVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfUFRDUjsgICAgICAgLyogUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9QVFNSOyAgICAgICAvKiBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotfSBBVDkxU19EQkdVLCAqIEFUOTFQU19EQkdVOw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgRGVidWcgVW5pdA0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX0RCR1Ugew0KKwlBVDkxX1JFRwkgREJHVV9DUjsgCS8vIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfTVI7IAkvLyBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX0lFUjsgCS8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfQ1NSOyAJLy8gQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfUkhSOyAJLy8gUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9USFI7IAkvLyBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX0JSR1I7IAkvLyBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbN107IAkvLyANCisJQVQ5MV9SRUcJIERCR1VfQ0lEUjsgCS8vIENoaXAgSUQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfRVhJRDsgCS8vIENoaXAgSUQgRXh0ZW5zaW9uIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX0ZOVFI7IAkvLyBGb3JjZSBOVFJTVCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzQ1XTsgCS8vIA0KKwlBVDkxX1JFRwkgREJHVV9SUFI7IAkvLyBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfUkNSOyAJLy8gUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1RQUjsgCS8vIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfVENSOyAJLy8gVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9STlBSOyAJLy8gUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfUk5DUjsgCS8vIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1ROUFI7IAkvLyBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfVE5DUjsgCS8vIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9QVENSOyAJLy8gUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfUFRTUjsgCS8vIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCit9IEFUOTFTX0RCR1UsICpBVDkxUFNfREJHVTsNCiANCi0vKiAtLS0tLS0tLSBEQkdVX0NSIDogKERCR1UgT2Zmc2V0OiAweDApIERlYnVnIFVuaXQgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfUlNUUlggICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMiApICAvKiAoREJHVSkgUmVzZXQgUmVjZWl2ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1JTVFRYICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDMgKSAgLyogKERCR1UpIFJlc2V0IFRyYW5zbWl0dGVyICovDQotI2RlZmluZSBBVDkxQ19VU19SWEVOICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA0ICkgIC8qIChEQkdVKSBSZWNlaXZlciBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1JYRElTICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDUgKSAgLyogKERCR1UpIFJlY2VpdmVyIERpc2FibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1RYRU4gICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDYgKSAgLyogKERCR1UpIFRyYW5zbWl0dGVyIEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfVFhESVMgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNyApICAvKiAoREJHVSkgVHJhbnNtaXR0ZXIgRGlzYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfUlNUU1RBICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOCApICAvKiAoREJHVSkgUmVzZXQgU3RhdHVzIEJpdHMgKi8NCi0vKiAtLS0tLS0tLSBEQkdVX01SIDogKERCR1UgT2Zmc2V0OiAweDQpIERlYnVnIFVuaXQgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfUEFSICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDcgPDwgOSApICAvKiAoREJHVSkgUGFyaXR5IHR5cGUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19QQVJfRVZFTiAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDkgKSAgLyogKERCR1UpIEV2ZW4gUGFyaXR5ICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfUEFSX09ERCAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA5ICkgIC8qIChEQkdVKSBPZGQgUGFyaXR5ICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfUEFSX1NQQUNFICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCA5ICkgIC8qIChEQkdVKSBQYXJpdHkgZm9yY2VkIHRvIDAgKFNwYWNlKSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX1BBUl9NQVJLICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgOSApICAvKiAoREJHVSkgUGFyaXR5IGZvcmNlZCB0byAxIChNYXJrKSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX1BBUl9OT05FICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDQgPDwgOSApICAvKiAoREJHVSkgTm8gUGFyaXR5ICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfUEFSX01VTFRJX0RST1AgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NiA8PCA5ICkgIC8qIChEQkdVKSBNdWx0aS1kcm9wIG1vZGUgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX0NITU9ERSAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDE0ICkgLyogKERCR1UpIENoYW5uZWwgTW9kZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX0NITU9ERV9OT1JNQUwgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMTQgKSAvKiAoREJHVSkgTm9ybWFsIE1vZGU6IFRoZSBVU0FSVCBjaGFubmVsIG9wZXJhdGVzIGFzIGFuIFJYL1RYIFVTQVJULiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX0NITU9ERV9BVVRPICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTQgKSAvKiAoREJHVSkgQXV0b21hdGljIEVjaG86IFJlY2VpdmVyIERhdGEgSW5wdXQgaXMgY29ubmVjdGVkIHRvIHRoZSBUWEQgcGluLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX0NITU9ERV9MT0NBTCAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgMTQgKSAvKiAoREJHVSkgTG9jYWwgTG9vcGJhY2s6IFRyYW5zbWl0dGVyIE91dHB1dCBTaWduYWwgaXMgY29ubmVjdGVkIHRvIFJlY2VpdmVyIElucHV0IFNpZ25hbC4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19DSE1PREVfUkVNT1RFICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDE0ICkgLyogKERCR1UpIFJlbW90ZSBMb29wYmFjazogUlhEIHBpbiBpcyBpbnRlcm5hbGx5IGNvbm5lY3RlZCB0byBUWEQgcGluLiAqLw0KLS8qIC0tLS0tLS0tIERCR1VfSUVSIDogKERCR1UgT2Zmc2V0OiAweDgpIERlYnVnIFVuaXQgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfUlhSRFkgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAvKiAoREJHVSkgUlhSRFkgSW50ZXJydXB0ICovDQotI2RlZmluZSBBVDkxQ19VU19UWFJEWSAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgIC8qIChEQkdVKSBUWFJEWSBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX0VORFJYICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDMgKSAgLyogKERCR1UpIEVuZCBvZiBSZWNlaXZlIFRyYW5zZmVyIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfRU5EVFggICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNCApICAvKiAoREJHVSkgRW5kIG9mIFRyYW5zbWl0IEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfT1ZSRSAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNSApICAvKiAoREJHVSkgT3ZlcnJ1biBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX0ZSQU1FICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDYgKSAgLyogKERCR1UpIEZyYW1pbmcgRXJyb3IgSW50ZXJydXB0ICovDQotI2RlZmluZSBBVDkxQ19VU19QQVJFICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA3ICkgIC8qIChEQkdVKSBQYXJpdHkgRXJyb3IgSW50ZXJydXB0ICovDQotI2RlZmluZSBBVDkxQ19VU19UWEVNUFRZICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA5ICkgIC8qIChEQkdVKSBUWEVNUFRZIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfVFhCVUZFICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTEgKSAvKiAoREJHVSkgVFhCVUZFIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfUlhCVUZGICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTIgKSAvKiAoREJHVSkgUlhCVUZGIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfQ09NTV9UWCAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMzAgKSAvKiAoREJHVSkgQ09NTV9UWCBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX0NPTU1fUlggICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDMxICkgLyogKERCR1UpIENPTU1fUlggSW50ZXJydXB0ICovDQotLyogLS0tLS0tLS0gREJHVV9JRFIgOiAoREJHVSBPZmZzZXQ6IDB4YykgRGVidWcgVW5pdCBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIERCR1VfSU1SIDogKERCR1UgT2Zmc2V0OiAweDEwKSBEZWJ1ZyBVbml0IEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gREJHVV9DU1IgOiAoREJHVSBPZmZzZXQ6IDB4MTQpIERlYnVnIFVuaXQgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBEQkdVX0ZOVFIgOiAoREJHVSBPZmZzZXQ6IDB4NDgpIERlYnVnIFVuaXQgRk9SQ0VfTlRSU1QgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1VTX0ZPUkNFX05UUlNUICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApIC8qIChEQkdVKSBGb3JjZSBOVFJTVCBpbiBKVEFHICovDQorLy8gLS0tLS0tLS0gREJHVV9DUiA6IChEQkdVIE9mZnNldDogMHgwKSBEZWJ1ZyBVbml0IENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VU19SU1RSWCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKERCR1UpIFJlc2V0IFJlY2VpdmVyDQorI2RlZmluZSBBVDkxQ19VU19SU1RUWCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKERCR1UpIFJlc2V0IFRyYW5zbWl0dGVyDQorI2RlZmluZSBBVDkxQ19VU19SWEVOICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKERCR1UpIFJlY2VpdmVyIEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfUlhESVMgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChEQkdVKSBSZWNlaXZlciBEaXNhYmxlDQorI2RlZmluZSBBVDkxQ19VU19UWEVOICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLy8gKERCR1UpIFRyYW5zbWl0dGVyIEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfVFhESVMgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChEQkdVKSBUcmFuc21pdHRlciBEaXNhYmxlDQorI2RlZmluZSBBVDkxQ19VU19SU1RTVEEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKERCR1UpIFJlc2V0IFN0YXR1cyBCaXRzDQorLy8gLS0tLS0tLS0gREJHVV9NUiA6IChEQkdVIE9mZnNldDogMHg0KSBEZWJ1ZyBVbml0IE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VU19QQVIgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAgOSkgLy8gKERCR1UpIFBhcml0eSB0eXBlDQorI2RlZmluZSAJQVQ5MUNfVVNfUEFSX0VWRU4gICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDkpIC8vIChEQkdVKSBFdmVuIFBhcml0eQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1BBUl9PREQgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvLyAoREJHVSkgT2RkIFBhcml0eQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1BBUl9TUEFDRSAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA5KSAvLyAoREJHVSkgUGFyaXR5IGZvcmNlZCB0byAwIChTcGFjZSkNCisjZGVmaW5lIAlBVDkxQ19VU19QQVJfTUFSSyAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOSkgLy8gKERCR1UpIFBhcml0eSBmb3JjZWQgdG8gMSAoTWFyaykNCisjZGVmaW5lIAlBVDkxQ19VU19QQVJfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NCA8PCAgOSkgLy8gKERCR1UpIE5vIFBhcml0eQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1BBUl9NVUxUSV9EUk9QICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg2IDw8ICA5KSAvLyAoREJHVSkgTXVsdGktZHJvcCBtb2RlDQorI2RlZmluZSBBVDkxQ19VU19DSE1PREUgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxNCkgLy8gKERCR1UpIENoYW5uZWwgTW9kZQ0KKyNkZWZpbmUgCUFUOTFDX1VTX0NITU9ERV9OT1JNQUwgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDE0KSAvLyAoREJHVSkgTm9ybWFsIE1vZGU6IFRoZSBVU0FSVCBjaGFubmVsIG9wZXJhdGVzIGFzIGFuIFJYL1RYIFVTQVJULg0KKyNkZWZpbmUgCUFUOTFDX1VTX0NITU9ERV9BVVRPICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE0KSAvLyAoREJHVSkgQXV0b21hdGljIEVjaG86IFJlY2VpdmVyIERhdGEgSW5wdXQgaXMgY29ubmVjdGVkIHRvIHRoZSBUWEQgcGluLg0KKyNkZWZpbmUgCUFUOTFDX1VTX0NITU9ERV9MT0NBTCAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDE0KSAvLyAoREJHVSkgTG9jYWwgTG9vcGJhY2s6IFRyYW5zbWl0dGVyIE91dHB1dCBTaWduYWwgaXMgY29ubmVjdGVkIHRvIFJlY2VpdmVyIElucHV0IFNpZ25hbC4NCisjZGVmaW5lIAlBVDkxQ19VU19DSE1PREVfUkVNT1RFICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxNCkgLy8gKERCR1UpIFJlbW90ZSBMb29wYmFjazogUlhEIHBpbiBpcyBpbnRlcm5hbGx5IGNvbm5lY3RlZCB0byBUWEQgcGluLg0KKy8vIC0tLS0tLS0tIERCR1VfSUVSIDogKERCR1UgT2Zmc2V0OiAweDgpIERlYnVnIFVuaXQgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VTX1JYUkRZICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoREJHVSkgUlhSRFkgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19UWFJEWSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKERCR1UpIFRYUkRZIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfRU5EUlggICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChEQkdVKSBFbmQgb2YgUmVjZWl2ZSBUcmFuc2ZlciBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX0VORFRYICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoREJHVSkgRW5kIG9mIFRyYW5zbWl0IEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfT1ZSRSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChEQkdVKSBPdmVycnVuIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfRlJBTUUgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChEQkdVKSBGcmFtaW5nIEVycm9yIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfUEFSRSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChEQkdVKSBQYXJpdHkgRXJyb3IgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19UWEVNUFRZICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLy8gKERCR1UpIFRYRU1QVFkgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19UWEJVRkUgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMSkgLy8gKERCR1UpIFRYQlVGRSBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX1JYQlVGRiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvLyAoREJHVSkgUlhCVUZGIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfQ09NTV9UWCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMzApIC8vIChEQkdVKSBDT01NX1RYIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfQ09NTV9SWCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMzEpIC8vIChEQkdVKSBDT01NX1JYIEludGVycnVwdA0KKy8vIC0tLS0tLS0tIERCR1VfSURSIDogKERCR1UgT2Zmc2V0OiAweGMpIERlYnVnIFVuaXQgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gREJHVV9JTVIgOiAoREJHVSBPZmZzZXQ6IDB4MTApIERlYnVnIFVuaXQgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gREJHVV9DU1IgOiAoREJHVSBPZmZzZXQ6IDB4MTQpIERlYnVnIFVuaXQgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gREJHVV9GTlRSIDogKERCR1UgT2Zmc2V0OiAweDQ4KSBEZWJ1ZyBVbml0IEZPUkNFX05UUlNUIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVVNfRk9SQ0VfTlRSU1QgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChEQkdVKSBGb3JjZSBOVFJTVCBpbiBKVEFHDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQYXJhbGxlbCBJbnB1dCBPdXRwdXQgQ29udHJvbGVyICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfUElPDQotew0KLSAgICBBVDkxX1JFRyBQSU9fUEVSOyAgICAgICAgLyogUElPIEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9fUERSOyAgICAgICAgLyogUElPIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPX1BTUjsgICAgICAgIC8qIFBJTyBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQwWyAxIF07IC8qICovDQotICAgIEFUOTFfUkVHIFBJT19PRVI7ICAgICAgICAvKiBPdXRwdXQgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT19PRFI7ICAgICAgICAvKiBPdXRwdXQgRGlzYWJsZSBSZWdpc3RlcnIgKi8NCi0gICAgQVQ5MV9SRUcgUElPX09TUjsgICAgICAgIC8qIE91dHB1dCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQxWyAxIF07IC8qICovDQotICAgIEFUOTFfUkVHIFBJT19JRkVSOyAgICAgICAvKiBJbnB1dCBGaWx0ZXIgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT19JRkRSOyAgICAgICAvKiBJbnB1dCBGaWx0ZXIgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9fSUZTUjsgICAgICAgLyogSW5wdXQgRmlsdGVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDJbIDEgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgUElPX1NPRFI7ICAgICAgIC8qIFNldCBPdXRwdXQgRGF0YSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9fQ09EUjsgICAgICAgLyogQ2xlYXIgT3V0cHV0IERhdGEgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPX09EU1I7ICAgICAgIC8qIE91dHB1dCBEYXRhIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9fUERTUjsgICAgICAgLyogUGluIERhdGEgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT19JRVI7ICAgICAgICAvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT19JRFI7ICAgICAgICAvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9fSU1SOyAgICAgICAgLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPX0lTUjsgICAgICAgIC8qIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPX01ERVI7ICAgICAgIC8qIE11bHRpLWRyaXZlciBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPX01ERFI7ICAgICAgIC8qIE11bHRpLWRyaXZlciBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT19NRFNSOyAgICAgICAvKiBNdWx0aS1kcml2ZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkM1sgMSBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBQSU9fUFBVRFI7ICAgICAgLyogUHVsbC11cCBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT19QUFVFUjsgICAgICAvKiBQdWxsLXVwIEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9fUFBVU1I7ICAgICAgLyogUHVsbC11cCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQ0WyAxIF07IC8qICovDQotICAgIEFUOTFfUkVHIFBJT19BU1I7ICAgICAgICAvKiBTZWxlY3QgQSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9fQlNSOyAgICAgICAgLyogU2VsZWN0IEIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPX0FCU1I7ICAgICAgIC8qIEFCIFNlbGVjdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQ1WyA5IF07IC8qICovDQotICAgIEFUOTFfUkVHIFBJT19PV0VSOyAgICAgICAvKiBPdXRwdXQgV3JpdGUgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT19PV0RSOyAgICAgICAvKiBPdXRwdXQgV3JpdGUgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9fT1dTUjsgICAgICAgLyogT3V0cHV0IFdyaXRlIFN0YXR1cyBSZWdpc3RlciAqLw0KLX0gQVQ5MVNfUElPLCAqIEFUOTFQU19QSU87DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQYXJhbGxlbCBJbnB1dCBPdXRwdXQgQ29udHJvbGVyDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfUElPIHsNCisJQVQ5MV9SRUcJIFBJT19QRVI7IAkvLyBQSU8gRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fUERSOyAJLy8gUElPIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19QU1I7IAkvLyBQSU8gU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT19PRVI7IAkvLyBPdXRwdXQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fT0RSOyAJLy8gT3V0cHV0IERpc2FibGUgUmVnaXN0ZXJyDQorCUFUOTFfUkVHCSBQSU9fT1NSOyAJLy8gT3V0cHV0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9fSUZFUjsgCS8vIElucHV0IEZpbHRlciBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19JRkRSOyAJLy8gSW5wdXQgRmlsdGVyIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19JRlNSOyAJLy8gSW5wdXQgRmlsdGVyIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQyWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9fU09EUjsgCS8vIFNldCBPdXRwdXQgRGF0YSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX0NPRFI7IAkvLyBDbGVhciBPdXRwdXQgRGF0YSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX09EU1I7IAkvLyBPdXRwdXQgRGF0YSBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19QRFNSOyAJLy8gUGluIERhdGEgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX0lEUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19JU1I7IAkvLyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fTURFUjsgCS8vIE11bHRpLWRyaXZlciBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19NRERSOyAJLy8gTXVsdGktZHJpdmVyIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19NRFNSOyAJLy8gTXVsdGktZHJpdmVyIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQzWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9fUFBVRFI7IAkvLyBQdWxsLXVwIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19QUFVFUjsgCS8vIFB1bGwtdXAgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fUFBVU1I7IAkvLyBQdWxsLXVwIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQ0WzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9fQVNSOyAJLy8gU2VsZWN0IEEgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19CU1I7IAkvLyBTZWxlY3QgQiBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX0FCU1I7IAkvLyBBQiBTZWxlY3QgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDVbOV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT19PV0VSOyAJLy8gT3V0cHV0IFdyaXRlIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX09XRFI7IAkvLyBPdXRwdXQgV3JpdGUgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX09XU1I7IAkvLyBPdXRwdXQgV3JpdGUgU3RhdHVzIFJlZ2lzdGVyDQorfSBBVDkxU19QSU8sICpBVDkxUFNfUElPOw0KIA0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQ2xvY2sgR2VuZXJhdG9yIENvbnRyb2xlciAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotdHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX0NLR1INCi17DQotICAgIEFUOTFfUkVHIENLR1JfTU9SOyAgICAgICAvKiBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQ0tHUl9NQ0ZSOyAgICAgIC8qIE1haW4gQ2xvY2sgIEZyZXF1ZW5jeSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDBbIDEgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgQ0tHUl9QTExSOyAgICAgIC8qIFBMTCBSZWdpc3RlciAqLw0KLX0gQVQ5MVNfQ0tHUiwgKiBBVDkxUFNfQ0tHUjsNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIENsb2NrIEdlbmVyYXRvciBDb250cm9sZXINCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19DS0dSIHsNCisJQVQ5MV9SRUcJIENLR1JfTU9SOyAJLy8gTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBDS0dSX01DRlI7IAkvLyBNYWluIENsb2NrICBGcmVxdWVuY3kgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgQ0tHUl9QTExSOyAJLy8gUExMIFJlZ2lzdGVyDQorfSBBVDkxU19DS0dSLCAqQVQ5MVBTX0NLR1I7DQogDQotLyogLS0tLS0tLS0gQ0tHUl9NT1IgOiAoQ0tHUiBPZmZzZXQ6IDB4MCkgTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19DS0dSX01PU0NFTiAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgIC8qIChDS0dSKSBNYWluIE9zY2lsbGF0b3IgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19DS0dSX09TQ0JZUEFTUyAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAgIC8qIChDS0dSKSBNYWluIE9zY2lsbGF0b3IgQnlwYXNzICovDQotI2RlZmluZSBBVDkxQ19DS0dSX09TQ09VTlQgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGIDw8IDggKSAgIC8qIChDS0dSKSBNYWluIE9zY2lsbGF0b3IgU3RhcnQtdXAgVGltZSAqLw0KLS8qIC0tLS0tLS0tIENLR1JfTUNGUiA6IChDS0dSIE9mZnNldDogMHg0KSBNYWluIENsb2NrIEZyZXF1ZW5jeSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0tHUl9NQUlORiAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRkZGIDw8IDAgKSAvKiAoQ0tHUikgTWFpbiBDbG9jayBGcmVxdWVuY3kgKi8NCi0jZGVmaW5lIEFUOTFDX0NLR1JfTUFJTlJEWSAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNiApICAgLyogKENLR1IpIE1haW4gQ2xvY2sgUmVhZHkgKi8NCi0vKiAtLS0tLS0tLSBDS0dSX1BMTFIgOiAoQ0tHUiBPZmZzZXQ6IDB4YykgUExMIEIgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0NLR1JfRElWICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RkYgPDwgMCApICAgLyogKENLR1IpIERpdmlkZXIgU2VsZWN0ZWQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19DS0dSX0RJVl8wICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCApICAgICAgICAgLyogKENLR1IpIERpdmlkZXIgb3V0cHV0IGlzIDAgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19DS0dSX0RJVl9CWVBBU1MgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSApICAgICAgICAgLyogKENLR1IpIERpdmlkZXIgaXMgYnlwYXNzZWQgKi8NCi0jZGVmaW5lIEFUOTFDX0NLR1JfUExMQ09VTlQgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4M0YgPDwgOCApICAgLyogKENLR1IpIFBMTCBDb3VudGVyICovDQotI2RlZmluZSBBVDkxQ19DS0dSX09VVCAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTQgKSAgIC8qIChDS0dSKSBQTEwgT3V0cHV0IEZyZXF1ZW5jeSBSYW5nZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0NLR1JfT1VUXzAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDE0ICkgICAvKiAoQ0tHUikgUGxlYXNlIHJlZmVyIHRvIHRoZSBQTEwgZGF0YXNoZWV0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfQ0tHUl9PVVRfMSAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTQgKSAgIC8qIChDS0dSKSBQbGVhc2UgcmVmZXIgdG8gdGhlIFBMTCBkYXRhc2hlZXQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19DS0dSX09VVF8yICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCAxNCApICAgLyogKENLR1IpIFBsZWFzZSByZWZlciB0byB0aGUgUExMIGRhdGFzaGVldCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0NLR1JfT1VUXzMgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDE0ICkgICAvKiAoQ0tHUikgUGxlYXNlIHJlZmVyIHRvIHRoZSBQTEwgZGF0YXNoZWV0ICovDQotI2RlZmluZSBBVDkxQ19DS0dSX01VTCAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDdGRiA8PCAxNiApIC8qIChDS0dSKSBQTEwgTXVsdGlwbGllciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0tHUl9VU0JESVYgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDI4ICkgICAvKiAoQ0tHUikgRGl2aWRlciBmb3IgVVNCIENsb2NrcyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0NLR1JfVVNCRElWXzAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDI4ICkgICAvKiAoQ0tHUikgRGl2aWRlciBvdXRwdXQgaXMgUExMIGNsb2NrIG91dHB1dCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0NLR1JfVVNCRElWXzEgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDI4ICkgICAvKiAoQ0tHUikgRGl2aWRlciBvdXRwdXQgaXMgUExMIGNsb2NrIG91dHB1dCBkaXZpZGVkIGJ5IDIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19DS0dSX1VTQkRJVl8yICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCAyOCApICAgLyogKENLR1IpIERpdmlkZXIgb3V0cHV0IGlzIFBMTCBjbG9jayBvdXRwdXQgZGl2aWRlZCBieSA0ICovDQorLy8gLS0tLS0tLS0gQ0tHUl9NT1IgOiAoQ0tHUiBPZmZzZXQ6IDB4MCkgTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9NT1NDRU4gICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChDS0dSKSBNYWluIE9zY2lsbGF0b3IgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19DS0dSX09TQ0JZUEFTUyAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKENLR1IpIE1haW4gT3NjaWxsYXRvciBCeXBhc3MNCisjZGVmaW5lIEFUOTFDX0NLR1JfT1NDT1VOVCAgICAoKHVuc2lnbmVkIGludCkgMHhGRiA8PCAgOCkgLy8gKENLR1IpIE1haW4gT3NjaWxsYXRvciBTdGFydC11cCBUaW1lDQorLy8gLS0tLS0tLS0gQ0tHUl9NQ0ZSIDogKENLR1IgT2Zmc2V0OiAweDQpIE1haW4gQ2xvY2sgRnJlcXVlbmN5IFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9NQUlORiAgICAgICgodW5zaWduZWQgaW50KSAweEZGRkYgPDwgIDApIC8vIChDS0dSKSBNYWluIENsb2NrIEZyZXF1ZW5jeQ0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9NQUlOUkRZICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChDS0dSKSBNYWluIENsb2NrIFJlYWR5DQorLy8gLS0tLS0tLS0gQ0tHUl9QTExSIDogKENLR1IgT2Zmc2V0OiAweGMpIFBMTCBCIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9ESVYgICAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8ICAwKSAvLyAoQ0tHUikgRGl2aWRlciBTZWxlY3RlZA0KKyNkZWZpbmUgCUFUOTFDX0NLR1JfRElWXzAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDApIC8vIChDS0dSKSBEaXZpZGVyIG91dHB1dCBpcyAwDQorI2RlZmluZSAJQVQ5MUNfQ0tHUl9ESVZfQllQQVNTICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSkgLy8gKENLR1IpIERpdmlkZXIgaXMgYnlwYXNzZWQNCisjZGVmaW5lIEFUOTFDX0NLR1JfUExMQ09VTlQgICAoKHVuc2lnbmVkIGludCkgMHgzRiA8PCAgOCkgLy8gKENLR1IpIFBMTCBDb3VudGVyDQorI2RlZmluZSBBVDkxQ19DS0dSX09VVCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxNCkgLy8gKENLR1IpIFBMTCBPdXRwdXQgRnJlcXVlbmN5IFJhbmdlDQorI2RlZmluZSAJQVQ5MUNfQ0tHUl9PVVRfMCAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAxNCkgLy8gKENLR1IpIFBsZWFzZSByZWZlciB0byB0aGUgUExMIGRhdGFzaGVldA0KKyNkZWZpbmUgCUFUOTFDX0NLR1JfT1VUXzEgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTQpIC8vIChDS0dSKSBQbGVhc2UgcmVmZXIgdG8gdGhlIFBMTCBkYXRhc2hlZXQNCisjZGVmaW5lIAlBVDkxQ19DS0dSX09VVF8yICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDE0KSAvLyAoQ0tHUikgUGxlYXNlIHJlZmVyIHRvIHRoZSBQTEwgZGF0YXNoZWV0DQorI2RlZmluZSAJQVQ5MUNfQ0tHUl9PVVRfMyAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxNCkgLy8gKENLR1IpIFBsZWFzZSByZWZlciB0byB0aGUgUExMIGRhdGFzaGVldA0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9NVUwgICAgICAgICgodW5zaWduZWQgaW50KSAweDdGRiA8PCAxNikgLy8gKENLR1IpIFBMTCBNdWx0aXBsaWVyDQorI2RlZmluZSBBVDkxQ19DS0dSX1VTQkRJViAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyOCkgLy8gKENLR1IpIERpdmlkZXIgZm9yIFVTQiBDbG9ja3MNCisjZGVmaW5lIAlBVDkxQ19DS0dSX1VTQkRJVl8wICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDI4KSAvLyAoQ0tHUikgRGl2aWRlciBvdXRwdXQgaXMgUExMIGNsb2NrIG91dHB1dA0KKyNkZWZpbmUgCUFUOTFDX0NLR1JfVVNCRElWXzEgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjgpIC8vIChDS0dSKSBEaXZpZGVyIG91dHB1dCBpcyBQTEwgY2xvY2sgb3V0cHV0IGRpdmlkZWQgYnkgMg0KKyNkZWZpbmUgCUFUOTFDX0NLR1JfVVNCRElWXzIgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMjgpIC8vIChDS0dSKSBEaXZpZGVyIG91dHB1dCBpcyBQTEwgY2xvY2sgb3V0cHV0IGRpdmlkZWQgYnkgNA0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUG93ZXIgTWFuYWdlbWVudCBDb250cm9sZXIgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLXR5cGVkZWYgc3RydWN0IF9BVDkxU19QTUMNCi17DQotICAgIEFUOTFfUkVHIFBNQ19TQ0VSOyAgICAgICAvKiBTeXN0ZW0gQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBNQ19TQ0RSOyAgICAgICAvKiBTeXN0ZW0gQ2xvY2sgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQTUNfU0NTUjsgICAgICAgLyogU3lzdGVtIENsb2NrIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDBbIDEgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgUE1DX1BDRVI7ICAgICAgIC8qIFBlcmlwaGVyYWwgQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBNQ19QQ0RSOyAgICAgICAvKiBQZXJpcGhlcmFsIENsb2NrIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUE1DX1BDU1I7ICAgICAgIC8qIFBlcmlwaGVyYWwgQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMVsgMSBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBQTUNfTU9SOyAgICAgICAgLyogTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBNQ19NQ0ZSOyAgICAgICAvKiBNYWluIENsb2NrICBGcmVxdWVuY3kgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQyWyAxIF07IC8qICovDQotICAgIEFUOTFfUkVHIFBNQ19QTExSOyAgICAgICAvKiBQTEwgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUE1DX01DS1I7ICAgICAgIC8qIE1hc3RlciBDbG9jayBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDNbIDMgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgUE1DX1BDS1JbIDQgXTsgIC8qIFByb2dyYW1tYWJsZSBDbG9jayBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDRbIDQgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgUE1DX0lFUjsgICAgICAgIC8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUE1DX0lEUjsgICAgICAgIC8qIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBNQ19TUjsgICAgICAgICAvKiBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUE1DX0lNUjsgICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotfSBBVDkxU19QTUMsICogQVQ5MVBTX1BNQzsNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFBvd2VyIE1hbmFnZW1lbnQgQ29udHJvbGVyDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfUE1DIHsNCisJQVQ5MV9SRUcJIFBNQ19TQ0VSOyAJLy8gU3lzdGVtIENsb2NrIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUE1DX1NDRFI7IAkvLyBTeXN0ZW0gQ2xvY2sgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUE1DX1NDU1I7IAkvLyBTeXN0ZW0gQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBNQ19QQ0VSOyAJLy8gUGVyaXBoZXJhbCBDbG9jayBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19QQ0RSOyAJLy8gUGVyaXBoZXJhbCBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfUENTUjsgCS8vIFBlcmlwaGVyYWwgQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBNQ19NT1I7IAkvLyBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19NQ0ZSOyAJLy8gTWFpbiBDbG9jayAgRnJlcXVlbmN5IFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDJbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBNQ19QTExSOyAJLy8gUExMIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfTUNLUjsgCS8vIE1hc3RlciBDbG9jayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQzWzNdOyAJLy8gDQorCUFUOTFfUkVHCSBQTUNfUENLUls0XTsgCS8vIFByb2dyYW1tYWJsZSBDbG9jayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQ0WzRdOyAJLy8gDQorCUFUOTFfUkVHCSBQTUNfSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUE1DX0lEUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfU1I7IAkvLyBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KK30gQVQ5MVNfUE1DLCAqQVQ5MVBTX1BNQzsNCiANCi0vKiAtLS0tLS0tLSBQTUNfU0NFUiA6IChQTUMgT2Zmc2V0OiAweDApIFN5c3RlbSBDbG9jayBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19QQ0sgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAvKiAoUE1DKSBQcm9jZXNzb3IgQ2xvY2sgKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19VRFAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNyApICAvKiAoUE1DKSBVU0IgRGV2aWNlIFBvcnQgQ2xvY2sgKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19QQ0swICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOCApICAvKiAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0ICovDQotI2RlZmluZSBBVDkxQ19QTUNfUENLMSAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDkgKSAgLyogKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDSzIgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMCApIC8qIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19QQ0szICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTEgKSAvKiAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0ICovDQotLyogLS0tLS0tLS0gUE1DX1NDRFIgOiAoUE1DIE9mZnNldDogMHg0KSBTeXN0ZW0gQ2xvY2sgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFBNQ19TQ1NSIDogKFBNQyBPZmZzZXQ6IDB4OCkgU3lzdGVtIENsb2NrIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIENLR1JfTU9SIDogKFBNQyBPZmZzZXQ6IDB4MjApIE1haW4gT3NjaWxsYXRvciBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIENLR1JfTUNGUiA6IChQTUMgT2Zmc2V0OiAweDI0KSBNYWluIENsb2NrIEZyZXF1ZW5jeSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIENLR1JfUExMUiA6IChQTUMgT2Zmc2V0OiAweDJjKSBQTEwgQiBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFBNQ19NQ0tSIDogKFBNQyBPZmZzZXQ6IDB4MzApIE1hc3RlciBDbG9jayBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX0NTUyAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAwICkgLyogKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1BNQ19DU1NfU0xPV19DTEsgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCApICAgICAgLyogKFBNQykgU2xvdyBDbG9jayBpcyBzZWxlY3RlZCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1BNQ19DU1NfTUFJTl9DTEsgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSApICAgICAgLyogKFBNQykgTWFpbiBDbG9jayBpcyBzZWxlY3RlZCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1BNQ19DU1NfUExMX0NMSyAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyApICAgICAgLyogKFBNQykgQ2xvY2sgZnJvbSBQTEwgaXMgc2VsZWN0ZWQgKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19QUkVTICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDcgPDwgMiApIC8qIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBQcmVzY2FsZXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19QTUNfUFJFU19DTEsgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMiApIC8qIChQTUMpIFNlbGVjdGVkIGNsb2NrICovDQotI2RlZmluZSAgICAgQVQ5MUNfUE1DX1BSRVNfQ0xLXzIgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAvKiAoUE1DKSBTZWxlY3RlZCBjbG9jayBkaXZpZGVkIGJ5IDIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19QTUNfUFJFU19DTEtfNCAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgMiApIC8qIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgNCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1BNQ19QUkVTX0NMS184ICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAyICkgLyogKFBNQykgU2VsZWN0ZWQgY2xvY2sgZGl2aWRlZCBieSA4ICovDQotI2RlZmluZSAgICAgQVQ5MUNfUE1DX1BSRVNfQ0xLXzE2ICAgICAoICggdW5zaWduZWQgaW50ICkgMHg0IDw8IDIgKSAvKiAoUE1DKSBTZWxlY3RlZCBjbG9jayBkaXZpZGVkIGJ5IDE2ICovDQotI2RlZmluZSAgICAgQVQ5MUNfUE1DX1BSRVNfQ0xLXzMyICAgICAoICggdW5zaWduZWQgaW50ICkgMHg1IDw8IDIgKSAvKiAoUE1DKSBTZWxlY3RlZCBjbG9jayBkaXZpZGVkIGJ5IDMyICovDQotI2RlZmluZSAgICAgQVQ5MUNfUE1DX1BSRVNfQ0xLXzY0ICAgICAoICggdW5zaWduZWQgaW50ICkgMHg2IDw8IDIgKSAvKiAoUE1DKSBTZWxlY3RlZCBjbG9jayBkaXZpZGVkIGJ5IDY0ICovDQotLyogLS0tLS0tLS0gUE1DX1BDS1IgOiAoUE1DIE9mZnNldDogMHg0MCkgUHJvZ3JhbW1hYmxlIENsb2NrIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gUE1DX0lFUiA6IChQTUMgT2Zmc2V0OiAweDYwKSBQTUMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX01PU0NTICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgIC8qIChQTUMpIE1PU0MgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sgKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19MT0NLICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMiApICAvKiAoUE1DKSBQTEwgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sgKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19NQ0tSRFkgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMyApICAvKiAoUE1DKSBNQ0tfUkRZIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrICovDQotI2RlZmluZSBBVDkxQ19QTUNfUENLMFJEWSAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDggKSAgLyogKFBNQykgUENLMF9SRFkgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sgKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19QQ0sxUkRZICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOSApICAvKiAoUE1DKSBQQ0sxX1JEWSBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzayAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDSzJSRFkgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMCApIC8qIChQTUMpIFBDSzJfUkRZIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrICovDQotI2RlZmluZSBBVDkxQ19QTUNfUENLM1JEWSAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDExICkgLyogKFBNQykgUENLM19SRFkgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sgKi8NCi0vKiAtLS0tLS0tLSBQTUNfSURSIDogKFBNQyBPZmZzZXQ6IDB4NjQpIFBNQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFBNQ19TUiA6IChQTUMgT2Zmc2V0OiAweDY4KSBQTUMgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gUE1DX0lNUiA6IChQTUMgT2Zmc2V0OiAweDZjKSBQTUMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCisvLyAtLS0tLS0tLSBQTUNfU0NFUiA6IChQTUMgT2Zmc2V0OiAweDApIFN5c3RlbSBDbG9jayBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QTUNfUENLICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFBNQykgUHJvY2Vzc29yIENsb2NrDQorI2RlZmluZSBBVDkxQ19QTUNfVURQICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKFBNQykgVVNCIERldmljZSBQb3J0IENsb2NrDQorI2RlZmluZSBBVDkxQ19QTUNfUENLMCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dA0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDSzEgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQNCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0syICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEwKSAvLyAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0DQorI2RlZmluZSBBVDkxQ19QTUNfUENLMyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMSkgLy8gKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dA0KKy8vIC0tLS0tLS0tIFBNQ19TQ0RSIDogKFBNQyBPZmZzZXQ6IDB4NCkgU3lzdGVtIENsb2NrIERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUE1DX1NDU1IgOiAoUE1DIE9mZnNldDogMHg4KSBTeXN0ZW0gQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIENLR1JfTU9SIDogKFBNQyBPZmZzZXQ6IDB4MjApIE1haW4gT3NjaWxsYXRvciBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBDS0dSX01DRlIgOiAoUE1DIE9mZnNldDogMHgyNCkgTWFpbiBDbG9jayBGcmVxdWVuY3kgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQ0tHUl9QTExSIDogKFBNQyBPZmZzZXQ6IDB4MmMpIFBMTCBCIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFBNQ19NQ0tSIDogKFBNQyBPZmZzZXQ6IDB4MzApIE1hc3RlciBDbG9jayBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BNQ19DU1MgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICAwKSAvLyAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfUE1DX0NTU19TTE9XX0NMSyAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwKSAvLyAoUE1DKSBTbG93IENsb2NrIGlzIHNlbGVjdGVkDQorI2RlZmluZSAJQVQ5MUNfUE1DX0NTU19NQUlOX0NMSyAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxKSAvLyAoUE1DKSBNYWluIENsb2NrIGlzIHNlbGVjdGVkDQorI2RlZmluZSAJQVQ5MUNfUE1DX0NTU19QTExfQ0xLICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzKSAvLyAoUE1DKSBDbG9jayBmcm9tIFBMTCBpcyBzZWxlY3RlZA0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BSRVMgICAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgIDIpIC8vIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBQcmVzY2FsZXINCisjZGVmaW5lIAlBVDkxQ19QTUNfUFJFU19DTEsgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICAyKSAvLyAoUE1DKSBTZWxlY3RlZCBjbG9jaw0KKyNkZWZpbmUgCUFUOTFDX1BNQ19QUkVTX0NMS18yICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgMg0KKyNkZWZpbmUgCUFUOTFDX1BNQ19QUkVTX0NMS180ICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDIpIC8vIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgNA0KKyNkZWZpbmUgCUFUOTFDX1BNQ19QUkVTX0NMS184ICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDIpIC8vIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgOA0KKyNkZWZpbmUgCUFUOTFDX1BNQ19QUkVTX0NMS18xNiAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDQgPDwgIDIpIC8vIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgMTYNCisjZGVmaW5lIAlBVDkxQ19QTUNfUFJFU19DTEtfMzIgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg1IDw8ICAyKSAvLyAoUE1DKSBTZWxlY3RlZCBjbG9jayBkaXZpZGVkIGJ5IDMyDQorI2RlZmluZSAJQVQ5MUNfUE1DX1BSRVNfQ0xLXzY0ICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NiA8PCAgMikgLy8gKFBNQykgU2VsZWN0ZWQgY2xvY2sgZGl2aWRlZCBieSA2NA0KKy8vIC0tLS0tLS0tIFBNQ19QQ0tSIDogKFBNQyBPZmZzZXQ6IDB4NDApIFByb2dyYW1tYWJsZSBDbG9jayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQTUNfSUVSIDogKFBNQyBPZmZzZXQ6IDB4NjApIFBNQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUE1DX01PU0NTICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChQTUMpIE1PU0MgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sNCisjZGVmaW5lIEFUOTFDX1BNQ19MT0NLICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoUE1DKSBQTEwgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sNCisjZGVmaW5lIEFUOTFDX1BNQ19NQ0tSRFkgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoUE1DKSBNQ0tfUkRZIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrDQorI2RlZmluZSBBVDkxQ19QTUNfUENLMFJEWSAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFBNQykgUENLMF9SRFkgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sNCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0sxUkRZICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvLyAoUE1DKSBQQ0sxX1JEWSBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzaw0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDSzJSRFkgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChQTUMpIFBDSzJfUkRZIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrDQorI2RlZmluZSBBVDkxQ19QTUNfUENLM1JEWSAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMSkgLy8gKFBNQykgUENLM19SRFkgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sNCisvLyAtLS0tLS0tLSBQTUNfSURSIDogKFBNQyBPZmZzZXQ6IDB4NjQpIFBNQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQTUNfU1IgOiAoUE1DIE9mZnNldDogMHg2OCkgUE1DIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQTUNfSU1SIDogKFBNQyBPZmZzZXQ6IDB4NmMpIFBNQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFJlc2V0IENvbnRyb2xsZXIgSW50ZXJmYWNlICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfUlNUQw0KLXsNCi0gICAgQVQ5MV9SRUcgUlNUQ19SQ1I7IC8qIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUlNUQ19SU1I7IC8qIFJlc2V0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSU1RDX1JNUjsgLyogUmVzZXQgTW9kZSBSZWdpc3RlciAqLw0KLX0gQVQ5MVNfUlNUQywgKiBBVDkxUFNfUlNUQzsNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFJlc2V0IENvbnRyb2xsZXIgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfUlNUQyB7DQorCUFUOTFfUkVHCSBSU1RDX1JDUjsgCS8vIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJTVENfUlNSOyAJLy8gUmVzZXQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSU1RDX1JNUjsgCS8vIFJlc2V0IE1vZGUgUmVnaXN0ZXINCit9IEFUOTFTX1JTVEMsICpBVDkxUFNfUlNUQzsNCiANCi0vKiAtLS0tLS0tLSBSU1RDX1JDUiA6IChSU1RDIE9mZnNldDogMHgwKSBSZXNldCBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19SU1RDX1BST0NSU1QgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgICAvKiAoUlNUQykgUHJvY2Vzc29yIFJlc2V0ICovDQotI2RlZmluZSBBVDkxQ19SU1RDX1BFUlJTVCAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyICkgICAvKiAoUlNUQykgUGVyaXBoZXJhbCBSZXNldCAqLw0KLSNkZWZpbmUgQVQ5MUNfUlNUQ19FWFRSU1QgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMyApICAgLyogKFJTVEMpIEV4dGVybmFsIFJlc2V0ICovDQotI2RlZmluZSBBVDkxQ19SU1RDX0tFWSAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RkYgPDwgMjQgKSAvKiAoUlNUQykgUGFzc3dvcmQgKi8NCi0vKiAtLS0tLS0tLSBSU1RDX1JTUiA6IChSU1RDIE9mZnNldDogMHg0KSBSZXNldCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1JTVENfVVJTVFMgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgIC8qIChSU1RDKSBVc2VyIFJlc2V0IFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfUlNUQ19CT0RTVFMgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAgLyogKFJTVEMpIEJyb3dub3V0IERldGVjdGlvbiBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX1JTVENfUlNUVFlQICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg3IDw8IDggKSAgIC8qIChSU1RDKSBSZXNldCBUeXBlICovDQotI2RlZmluZSAgICAgQVQ5MUNfUlNUQ19SU1RUWVBfUE9XRVJVUCAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCA4ICkgICAvKiAoUlNUQykgUG93ZXItdXAgUmVzZXQuIFZERENPUkUgcmlzaW5nLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1JTVENfUlNUVFlQX1dBS0VVUCAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOCApICAgLyogKFJTVEMpIFdha2VVcCBSZXNldC4gVkREQ09SRSByaXNpbmcuICovDQotI2RlZmluZSAgICAgQVQ5MUNfUlNUQ19SU1RUWVBfV0FUQ0hET0cgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCA4ICkgICAvKiAoUlNUQykgV2F0Y2hkb2cgUmVzZXQuIFdhdGNoZG9nIG92ZXJmbG93IG9jY3VyZWQuICovDQotI2RlZmluZSAgICAgQVQ5MUNfUlNUQ19SU1RUWVBfU09GVFdBUkUgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCA4ICkgICAvKiAoUlNUQykgU29mdHdhcmUgUmVzZXQuIFByb2Nlc3NvciByZXNldCByZXF1aXJlZCBieSB0aGUgc29mdHdhcmUuICovDQotI2RlZmluZSAgICAgQVQ5MUNfUlNUQ19SU1RUWVBfVVNFUiAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NCA8PCA4ICkgICAvKiAoUlNUQykgVXNlciBSZXNldC4gTlJTVCBwaW4gZGV0ZWN0ZWQgbG93LiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1JTVENfUlNUVFlQX0JST1dOT1VUICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDUgPDwgOCApICAgLyogKFJTVEMpIEJyb3dub3V0IFJlc2V0IG9jY3VyZWQuICovDQotI2RlZmluZSBBVDkxQ19SU1RDX05SU1RMICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNiApICAvKiAoUlNUQykgTlJTVCBwaW4gbGV2ZWwgKi8NCi0jZGVmaW5lIEFUOTFDX1JTVENfU1JDTVAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE3ICkgIC8qIChSU1RDKSBTb2Z0d2FyZSBSZXNldCBDb21tYW5kIGluIFByb2dyZXNzLiAqLw0KLS8qIC0tLS0tLS0tIFJTVENfUk1SIDogKFJTVEMgT2Zmc2V0OiAweDgpIFJlc2V0IE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1JTVENfVVJTVEVOICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgIC8qIChSU1RDKSBVc2VyIFJlc2V0IEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfUlNUQ19VUlNUSUVOICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNCApICAgLyogKFJTVEMpIFVzZXIgUmVzZXQgSW50ZXJydXB0IEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfUlNUQ19FUlNUTCAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEYgPDwgOCApICAgLyogKFJTVEMpIFVzZXIgUmVzZXQgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19SU1RDX0JPRElFTiAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNiApICAvKiAoUlNUQykgQnJvd25vdXQgRGV0ZWN0aW9uIEludGVycnVwdCBFbmFibGUgKi8NCisvLyAtLS0tLS0tLSBSU1RDX1JDUiA6IChSU1RDIE9mZnNldDogMHgwKSBSZXNldCBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19QUk9DUlNUICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChSU1RDKSBQcm9jZXNzb3IgUmVzZXQNCisjZGVmaW5lIEFUOTFDX1JTVENfUEVSUlNUICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoUlNUQykgUGVyaXBoZXJhbCBSZXNldA0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19FWFRSU1QgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChSU1RDKSBFeHRlcm5hbCBSZXNldA0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19LRVkgICAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8IDI0KSAvLyAoUlNUQykgUGFzc3dvcmQNCisvLyAtLS0tLS0tLSBSU1RDX1JTUiA6IChSU1RDIE9mZnNldDogMHg0KSBSZXNldCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19SU1RDX1VSU1RTICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFJTVEMpIFVzZXIgUmVzZXQgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19SU1RDX0JPRFNUUyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFJTVEMpIEJyb3dub3V0IERldGVjdGlvbiBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX1JTVENfUlNUVFlQICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8ICA4KSAvLyAoUlNUQykgUmVzZXQgVHlwZQ0KKyNkZWZpbmUgCUFUOTFDX1JTVENfUlNUVFlQX1BPV0VSVVAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDgpIC8vIChSU1RDKSBQb3dlci11cCBSZXNldC4gVkREQ09SRSByaXNpbmcuDQorI2RlZmluZSAJQVQ5MUNfUlNUQ19SU1RUWVBfV0FLRVVQICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFJTVEMpIFdha2VVcCBSZXNldC4gVkREQ09SRSByaXNpbmcuDQorI2RlZmluZSAJQVQ5MUNfUlNUQ19SU1RUWVBfV0FUQ0hET0cgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgOCkgLy8gKFJTVEMpIFdhdGNoZG9nIFJlc2V0LiBXYXRjaGRvZyBvdmVyZmxvdyBvY2N1cmVkLg0KKyNkZWZpbmUgCUFUOTFDX1JTVENfUlNUVFlQX1NPRlRXQVJFICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDgpIC8vIChSU1RDKSBTb2Z0d2FyZSBSZXNldC4gUHJvY2Vzc29yIHJlc2V0IHJlcXVpcmVkIGJ5IHRoZSBzb2Z0d2FyZS4NCisjZGVmaW5lIAlBVDkxQ19SU1RDX1JTVFRZUF9VU0VSICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg0IDw8ICA4KSAvLyAoUlNUQykgVXNlciBSZXNldC4gTlJTVCBwaW4gZGV0ZWN0ZWQgbG93Lg0KKyNkZWZpbmUgCUFUOTFDX1JTVENfUlNUVFlQX0JST1dOT1VUICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDUgPDwgIDgpIC8vIChSU1RDKSBCcm93bm91dCBSZXNldCBvY2N1cmVkLg0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19OUlNUTCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChSU1RDKSBOUlNUIHBpbiBsZXZlbA0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19TUkNNUCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTcpIC8vIChSU1RDKSBTb2Z0d2FyZSBSZXNldCBDb21tYW5kIGluIFByb2dyZXNzLg0KKy8vIC0tLS0tLS0tIFJTVENfUk1SIDogKFJTVEMgT2Zmc2V0OiAweDgpIFJlc2V0IE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19SU1RDX1VSU1RFTiAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFJTVEMpIFVzZXIgUmVzZXQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19SU1RDX1VSU1RJRU4gICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFJTVEMpIFVzZXIgUmVzZXQgSW50ZXJydXB0IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19FUlNUTCAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgIDgpIC8vIChSU1RDKSBVc2VyIFJlc2V0IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19CT0RJRU4gICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChSU1RDKSBCcm93bm91dCBEZXRlY3Rpb24gSW50ZXJydXB0IEVuYWJsZQ0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUmVhbCBUaW1lIFRpbWVyIENvbnRyb2xsZXIgSW50ZXJmYWNlICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfUlRUQw0KLXsNCi0gICAgQVQ5MV9SRUcgUlRUQ19SVE1SOyAvKiBSZWFsLXRpbWUgTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSVFRDX1JUQVI7IC8qIFJlYWwtdGltZSBBbGFybSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSVFRDX1JUVlI7IC8qIFJlYWwtdGltZSBWYWx1ZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSVFRDX1JUU1I7IC8qIFJlYWwtdGltZSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi19IEFUOTFTX1JUVEMsICogQVQ5MVBTX1JUVEM7DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBSZWFsIFRpbWUgVGltZXIgQ29udHJvbGxlciBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19SVFRDIHsNCisJQVQ5MV9SRUcJIFJUVENfUlRNUjsgCS8vIFJlYWwtdGltZSBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSVFRDX1JUQVI7IAkvLyBSZWFsLXRpbWUgQWxhcm0gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJUVENfUlRWUjsgCS8vIFJlYWwtdGltZSBWYWx1ZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUlRUQ19SVFNSOyAJLy8gUmVhbC10aW1lIFN0YXR1cyBSZWdpc3Rlcg0KK30gQVQ5MVNfUlRUQywgKkFUOTFQU19SVFRDOw0KIA0KLS8qIC0tLS0tLS0tIFJUVENfUlRNUiA6IChSVFRDIE9mZnNldDogMHgwKSBSZWFsLXRpbWUgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfUlRUQ19SVFBSRVMgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RkZGRiA8PCAwICkgLyogKFJUVEMpIFJlYWwtdGltZSBUaW1lciBQcmVzY2FsZXIgVmFsdWUgKi8NCi0jZGVmaW5lIEFUOTFDX1JUVENfQUxNSUVOICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTYgKSAgIC8qIChSVFRDKSBBbGFybSBJbnRlcnJ1cHQgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19SVFRDX1JUVElOQ0lFTiAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE3ICkgICAvKiAoUlRUQykgUmVhbCBUaW1lIFRpbWVyIEluY3JlbWVudCBJbnRlcnJ1cHQgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19SVFRDX1JUVFJTVCAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE4ICkgICAvKiAoUlRUQykgUmVhbCBUaW1lIFRpbWVyIFJlc3RhcnQgKi8NCi0vKiAtLS0tLS0tLSBSVFRDX1JUQVIgOiAoUlRUQyBPZmZzZXQ6IDB4NCkgUmVhbC10aW1lIEFsYXJtIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19SVFRDX0FMTVYgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDAgKSAgICAvKiAoUlRUQykgQWxhcm0gVmFsdWUgKi8NCi0vKiAtLS0tLS0tLSBSVFRDX1JUVlIgOiAoUlRUQyBPZmZzZXQ6IDB4OCkgQ3VycmVudCBSZWFsLXRpbWUgVmFsdWUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1JUVENfQ1JUViAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMCApICAgIC8qIChSVFRDKSBDdXJyZW50IFJlYWwtdGltZSBWYWx1ZSAqLw0KLS8qIC0tLS0tLS0tIFJUVENfUlRTUiA6IChSVFRDIE9mZnNldDogMHhjKSBSZWFsLXRpbWUgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19SVFRDX0FMTVMgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgICAvKiAoUlRUQykgUmVhbC10aW1lIEFsYXJtIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfUlRUQ19SVFRJTkMgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgICAgLyogKFJUVEMpIFJlYWwtdGltZSBUaW1lciBJbmNyZW1lbnQgKi8NCisvLyAtLS0tLS0tLSBSVFRDX1JUTVIgOiAoUlRUQyBPZmZzZXQ6IDB4MCkgUmVhbC10aW1lIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19SVFRDX1JUUFJFUyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGRiA8PCAgMCkgLy8gKFJUVEMpIFJlYWwtdGltZSBUaW1lciBQcmVzY2FsZXIgVmFsdWUNCisjZGVmaW5lIEFUOTFDX1JUVENfQUxNSUVOICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoUlRUQykgQWxhcm0gSW50ZXJydXB0IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19SVFRJTkNJRU4gICgodW5zaWduZWQgaW50KSAweDEgPDwgMTcpIC8vIChSVFRDKSBSZWFsIFRpbWUgVGltZXIgSW5jcmVtZW50IEludGVycnVwdCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1JUVENfUlRUUlNUICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE4KSAvLyAoUlRUQykgUmVhbCBUaW1lIFRpbWVyIFJlc3RhcnQNCisvLyAtLS0tLS0tLSBSVFRDX1JUQVIgOiAoUlRUQyBPZmZzZXQ6IDB4NCkgUmVhbC10aW1lIEFsYXJtIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19BTE1WICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDApIC8vIChSVFRDKSBBbGFybSBWYWx1ZQ0KKy8vIC0tLS0tLS0tIFJUVENfUlRWUiA6IChSVFRDIE9mZnNldDogMHg4KSBDdXJyZW50IFJlYWwtdGltZSBWYWx1ZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1JUVENfQ1JUViAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICAwKSAvLyAoUlRUQykgQ3VycmVudCBSZWFsLXRpbWUgVmFsdWUNCisvLyAtLS0tLS0tLSBSVFRDX1JUU1IgOiAoUlRUQyBPZmZzZXQ6IDB4YykgUmVhbC10aW1lIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1JUVENfQUxNUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoUlRUQykgUmVhbC10aW1lIEFsYXJtIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19SVFRJTkMgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChSVFRDKSBSZWFsLXRpbWUgVGltZXIgSW5jcmVtZW50DQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQZXJpb2RpYyBJbnRlcnZhbCBUaW1lciBDb250cm9sbGVyIEludGVyZmFjZSAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotdHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1BJVEMNCi17DQotICAgIEFUOTFfUkVHIFBJVENfUElNUjsgLyogUGVyaW9kIEludGVydmFsIE1vZGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElUQ19QSVNSOyAvKiBQZXJpb2QgSW50ZXJ2YWwgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJVENfUElWUjsgLyogUGVyaW9kIEludGVydmFsIFZhbHVlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJVENfUElJUjsgLyogUGVyaW9kIEludGVydmFsIEltYWdlIFJlZ2lzdGVyICovDQotfSBBVDkxU19QSVRDLCAqIEFUOTFQU19QSVRDOw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUGVyaW9kaWMgSW50ZXJ2YWwgVGltZXIgQ29udHJvbGxlciBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19QSVRDIHsNCisJQVQ5MV9SRUcJIFBJVENfUElNUjsgCS8vIFBlcmlvZCBJbnRlcnZhbCBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSVRDX1BJU1I7IAkvLyBQZXJpb2QgSW50ZXJ2YWwgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSVRDX1BJVlI7IAkvLyBQZXJpb2QgSW50ZXJ2YWwgVmFsdWUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJVENfUElJUjsgCS8vIFBlcmlvZCBJbnRlcnZhbCBJbWFnZSBSZWdpc3Rlcg0KK30gQVQ5MVNfUElUQywgKkFUOTFQU19QSVRDOw0KIA0KLS8qIC0tLS0tLS0tIFBJVENfUElNUiA6IChQSVRDIE9mZnNldDogMHgwKSBQZXJpb2RpYyBJbnRlcnZhbCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19QSVRDX1BJViAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRkZGRiA8PCAwICkgLyogKFBJVEMpIFBlcmlvZGljIEludGVydmFsIFZhbHVlICovDQotI2RlZmluZSBBVDkxQ19QSVRDX1BJVEVOICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDI0ICkgICAgLyogKFBJVEMpIFBlcmlvZGljIEludGVydmFsIFRpbWVyIEVuYWJsZWQgKi8NCi0jZGVmaW5lIEFUOTFDX1BJVENfUElUSUVOICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjUgKSAgICAvKiAoUElUQykgUGVyaW9kaWMgSW50ZXJ2YWwgVGltZXIgSW50ZXJydXB0IEVuYWJsZSAqLw0KLS8qIC0tLS0tLS0tIFBJVENfUElTUiA6IChQSVRDIE9mZnNldDogMHg0KSBQZXJpb2RpYyBJbnRlcnZhbCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1BJVENfUElUUyAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgICAvKiAoUElUQykgUGVyaW9kaWMgSW50ZXJ2YWwgVGltZXIgU3RhdHVzICovDQotLyogLS0tLS0tLS0gUElUQ19QSVZSIDogKFBJVEMgT2Zmc2V0OiAweDgpIFBlcmlvZGljIEludGVydmFsIFZhbHVlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19QSVRDX0NQSVYgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRkZGRiA8PCAwICkgLyogKFBJVEMpIEN1cnJlbnQgUGVyaW9kaWMgSW50ZXJ2YWwgVmFsdWUgKi8NCi0jZGVmaW5lIEFUOTFDX1BJVENfUElDTlQgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGRiA8PCAyMCApICAvKiAoUElUQykgUGVyaW9kaWMgSW50ZXJ2YWwgQ291bnRlciAqLw0KLS8qIC0tLS0tLS0tIFBJVENfUElJUiA6IChQSVRDIE9mZnNldDogMHhjKSBQZXJpb2RpYyBJbnRlcnZhbCBJbWFnZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KKy8vIC0tLS0tLS0tIFBJVENfUElNUiA6IChQSVRDIE9mZnNldDogMHgwKSBQZXJpb2RpYyBJbnRlcnZhbCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUElUQ19QSVYgICAgICAgICgodW5zaWduZWQgaW50KSAweEZGRkZGIDw8ICAwKSAvLyAoUElUQykgUGVyaW9kaWMgSW50ZXJ2YWwgVmFsdWUNCisjZGVmaW5lIEFUOTFDX1BJVENfUElURU4gICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI0KSAvLyAoUElUQykgUGVyaW9kaWMgSW50ZXJ2YWwgVGltZXIgRW5hYmxlZA0KKyNkZWZpbmUgQVQ5MUNfUElUQ19QSVRJRU4gICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjUpIC8vIChQSVRDKSBQZXJpb2RpYyBJbnRlcnZhbCBUaW1lciBJbnRlcnJ1cHQgRW5hYmxlDQorLy8gLS0tLS0tLS0gUElUQ19QSVNSIDogKFBJVEMgT2Zmc2V0OiAweDQpIFBlcmlvZGljIEludGVydmFsIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BJVENfUElUUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoUElUQykgUGVyaW9kaWMgSW50ZXJ2YWwgVGltZXIgU3RhdHVzDQorLy8gLS0tLS0tLS0gUElUQ19QSVZSIDogKFBJVEMgT2Zmc2V0OiAweDgpIFBlcmlvZGljIEludGVydmFsIFZhbHVlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUElUQ19DUElWICAgICAgICgodW5zaWduZWQgaW50KSAweEZGRkZGIDw8ICAwKSAvLyAoUElUQykgQ3VycmVudCBQZXJpb2RpYyBJbnRlcnZhbCBWYWx1ZQ0KKyNkZWZpbmUgQVQ5MUNfUElUQ19QSUNOVCAgICAgICgodW5zaWduZWQgaW50KSAweEZGRiA8PCAyMCkgLy8gKFBJVEMpIFBlcmlvZGljIEludGVydmFsIENvdW50ZXINCisvLyAtLS0tLS0tLSBQSVRDX1BJSVIgOiAoUElUQyBPZmZzZXQ6IDB4YykgUGVyaW9kaWMgSW50ZXJ2YWwgSW1hZ2UgUmVnaXN0ZXIgLS0tLS0tLS0gDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBXYXRjaGRvZyBUaW1lciBDb250cm9sbGVyIEludGVyZmFjZSAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotdHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1dEVEMNCi17DQotICAgIEFUOTFfUkVHIFdEVENfV0RDUjsgLyogV2F0Y2hkb2cgQ29udHJvbCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBXRFRDX1dETVI7IC8qIFdhdGNoZG9nIE1vZGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgV0RUQ19XRFNSOyAvKiBXYXRjaGRvZyBTdGF0dXMgUmVnaXN0ZXIgKi8NCi19IEFUOTFTX1dEVEMsICogQVQ5MVBTX1dEVEM7DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBXYXRjaGRvZyBUaW1lciBDb250cm9sbGVyIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1dEVEMgew0KKwlBVDkxX1JFRwkgV0RUQ19XRENSOyAJLy8gV2F0Y2hkb2cgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgV0RUQ19XRE1SOyAJLy8gV2F0Y2hkb2cgTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgV0RUQ19XRFNSOyAJLy8gV2F0Y2hkb2cgU3RhdHVzIFJlZ2lzdGVyDQorfSBBVDkxU19XRFRDLCAqQVQ5MVBTX1dEVEM7DQogDQotLyogLS0tLS0tLS0gV0RUQ19XRENSIDogKFdEVEMgT2Zmc2V0OiAweDApIFBlcmlvZGljIEludGVydmFsIEltYWdlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19XRFRDX1dEUlNUVCAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgICAvKiAoV0RUQykgV2F0Y2hkb2cgUmVzdGFydCAqLw0KLSNkZWZpbmUgQVQ5MUNfV0RUQ19LRVkgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RkYgPDwgMjQgKSAgLyogKFdEVEMpIFdhdGNoZG9nIEtFWSBQYXNzd29yZCAqLw0KLS8qIC0tLS0tLS0tIFdEVENfV0RNUiA6IChXRFRDIE9mZnNldDogMHg0KSBXYXRjaGRvZyBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19XRFRDX1dEViAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRkYgPDwgMCApICAvKiAoV0RUQykgV2F0Y2hkb2cgVGltZXIgUmVzdGFydCAqLw0KLSNkZWZpbmUgQVQ5MUNfV0RUQ19XREZJRU4gICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMiApICAgLyogKFdEVEMpIFdhdGNoZG9nIEZhdWx0IEludGVycnVwdCBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1dEVENfV0RSU1RFTiAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTMgKSAgIC8qIChXRFRDKSBXYXRjaGRvZyBSZXNldCBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1dEVENfV0RSUFJPQyAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTQgKSAgIC8qIChXRFRDKSBXYXRjaGRvZyBUaW1lciBSZXN0YXJ0ICovDQotI2RlZmluZSBBVDkxQ19XRFRDX1dERElTICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE1ICkgICAvKiAoV0RUQykgV2F0Y2hkb2cgRGlzYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfV0RUQ19XREQgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RkZGIDw8IDE2ICkgLyogKFdEVEMpIFdhdGNoZG9nIERlbHRhIFZhbHVlICovDQotI2RlZmluZSBBVDkxQ19XRFRDX1dEREJHSExUICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDI4ICkgICAvKiAoV0RUQykgV2F0Y2hkb2cgRGVidWcgSGFsdCAqLw0KLSNkZWZpbmUgQVQ5MUNfV0RUQ19XRElETEVITFQgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyOSApICAgLyogKFdEVEMpIFdhdGNoZG9nIElkbGUgSGFsdCAqLw0KLS8qIC0tLS0tLS0tIFdEVENfV0RTUiA6IChXRFRDIE9mZnNldDogMHg4KSBXYXRjaGRvZyBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1dEVENfV0RVTkYgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgIC8qIChXRFRDKSBXYXRjaGRvZyBVbmRlcmZsb3cgKi8NCi0jZGVmaW5lIEFUOTFDX1dEVENfV0RFUlIgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAgIC8qIChXRFRDKSBXYXRjaGRvZyBFcnJvciAqLw0KKy8vIC0tLS0tLS0tIFdEVENfV0RDUiA6IChXRFRDIE9mZnNldDogMHgwKSBQZXJpb2RpYyBJbnRlcnZhbCBJbWFnZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1dEVENfV0RSU1RUICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoV0RUQykgV2F0Y2hkb2cgUmVzdGFydA0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19LRVkgICAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8IDI0KSAvLyAoV0RUQykgV2F0Y2hkb2cgS0VZIFBhc3N3b3JkDQorLy8gLS0tLS0tLS0gV0RUQ19XRE1SIDogKFdEVEMgT2Zmc2V0OiAweDQpIFdhdGNoZG9nIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19XRFRDX1dEViAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGIDw8ICAwKSAvLyAoV0RUQykgV2F0Y2hkb2cgVGltZXIgUmVzdGFydA0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XREZJRU4gICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8vIChXRFRDKSBXYXRjaGRvZyBGYXVsdCBJbnRlcnJ1cHQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19XRFRDX1dEUlNURU4gICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMykgLy8gKFdEVEMpIFdhdGNoZG9nIFJlc2V0IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRFJQUk9DICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTQpIC8vIChXRFRDKSBXYXRjaGRvZyBUaW1lciBSZXN0YXJ0DQorI2RlZmluZSBBVDkxQ19XRFRDX1dERElTICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNSkgLy8gKFdEVEMpIFdhdGNoZG9nIERpc2FibGUNCisjZGVmaW5lIEFUOTFDX1dEVENfV0REICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRkYgPDwgMTYpIC8vIChXRFRDKSBXYXRjaGRvZyBEZWx0YSBWYWx1ZQ0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRERCR0hMVCAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjgpIC8vIChXRFRDKSBXYXRjaGRvZyBEZWJ1ZyBIYWx0DQorI2RlZmluZSBBVDkxQ19XRFRDX1dESURMRUhMVCAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyOSkgLy8gKFdEVEMpIFdhdGNoZG9nIElkbGUgSGFsdA0KKy8vIC0tLS0tLS0tIFdEVENfV0RTUiA6IChXRFRDIE9mZnNldDogMHg4KSBXYXRjaGRvZyBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19XRFRDX1dEVU5GICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFdEVEMpIFdhdGNoZG9nIFVuZGVyZmxvdw0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XREVSUiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChXRFRDKSBXYXRjaGRvZyBFcnJvcg0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVm9sdGFnZSBSZWd1bGF0b3IgTW9kZSBDb250cm9sbGVyIEludGVyZmFjZSAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotdHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1ZSRUcNCi17DQotICAgIEFUOTFfUkVHIFZSRUdfTVI7IC8qIFZvbHRhZ2UgUmVndWxhdG9yIE1vZGUgUmVnaXN0ZXIgKi8NCi19IEFUOTFTX1ZSRUcsICogQVQ5MVBTX1ZSRUc7DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBWb2x0YWdlIFJlZ3VsYXRvciBNb2RlIENvbnRyb2xsZXIgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfVlJFRyB7DQorCUFUOTFfUkVHCSBWUkVHX01SOyAJLy8gVm9sdGFnZSBSZWd1bGF0b3IgTW9kZSBSZWdpc3Rlcg0KK30gQVQ5MVNfVlJFRywgKkFUOTFQU19WUkVHOw0KIA0KLS8qIC0tLS0tLS0tIFZSRUdfTVIgOiAoVlJFRyBPZmZzZXQ6IDB4MCkgVm9sdGFnZSBSZWd1bGF0b3IgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVlJFR19QU1REQlkgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgLyogKFZSRUcpIFZvbHRhZ2UgUmVndWxhdG9yIFBvd2VyIFN0YW5kYnkgTW9kZSAqLw0KKy8vIC0tLS0tLS0tIFZSRUdfTVIgOiAoVlJFRyBPZmZzZXQ6IDB4MCkgVm9sdGFnZSBSZWd1bGF0b3IgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1ZSRUdfUFNUREJZICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoVlJFRykgVm9sdGFnZSBSZWd1bGF0b3IgUG93ZXIgU3RhbmRieSBNb2RlDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBNZW1vcnkgQ29udHJvbGxlciBJbnRlcmZhY2UgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLXR5cGVkZWYgc3RydWN0IF9BVDkxU19NQw0KLXsNCi0gICAgQVQ5MV9SRUcgTUNfUkNSOyAgICAgICAgICAvKiBNQyBSZW1hcCBDb250cm9sIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIE1DX0FTUjsgICAgICAgICAgLyogTUMgQWJvcnQgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIE1DX0FBU1I7ICAgICAgICAgLyogTUMgQWJvcnQgQWRkcmVzcyBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQwWyAyMSBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBNQ19GTVI7ICAgICAgICAgIC8qIE1DIEZsYXNoIE1vZGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgTUNfRkNSOyAgICAgICAgICAvKiBNQyBGbGFzaCBDb21tYW5kIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIE1DX0ZTUjsgICAgICAgICAgLyogTUMgRmxhc2ggU3RhdHVzIFJlZ2lzdGVyICovDQotfSBBVDkxU19NQywgKiBBVDkxUFNfTUM7DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBNZW1vcnkgQ29udHJvbGxlciBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19NQyB7DQorCUFUOTFfUkVHCSBNQ19SQ1I7IAkvLyBNQyBSZW1hcCBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBNQ19BU1I7IAkvLyBNQyBBYm9ydCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIE1DX0FBU1I7IAkvLyBNQyBBYm9ydCBBZGRyZXNzIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzIxXTsgCS8vIA0KKwlBVDkxX1JFRwkgTUNfRk1SOyAJLy8gTUMgRmxhc2ggTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgTUNfRkNSOyAJLy8gTUMgRmxhc2ggQ29tbWFuZCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgTUNfRlNSOyAJLy8gTUMgRmxhc2ggU3RhdHVzIFJlZ2lzdGVyDQorfSBBVDkxU19NQywgKkFUOTFQU19NQzsNCiANCi0vKiAtLS0tLS0tLSBNQ19SQ1IgOiAoTUMgT2Zmc2V0OiAweDApIE1DIFJlbWFwIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX01DX1JDQiAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgICAvKiAoTUMpIFJlbWFwIENvbW1hbmQgQml0ICovDQotLyogLS0tLS0tLS0gTUNfQVNSIDogKE1DIE9mZnNldDogMHg0KSBNQyBBYm9ydCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX01DX1VOREFERCAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgICAvKiAoTUMpIFVuZGVmaW5lZCBBZGRlc3MgQWJvcnQgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19NSVNBREQgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAgLyogKE1DKSBNaXNhbGlnbmVkIEFkZGVzcyBBYm9ydCBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0FCVFNaICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCA4ICkgICAvKiAoTUMpIEFib3J0IFNpemUgU3RhdHVzICovDQotI2RlZmluZSAgICAgQVQ5MUNfTUNfQUJUU1pfQllURSAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgOCApICAgLyogKE1DKSBCeXRlICovDQotI2RlZmluZSAgICAgQVQ5MUNfTUNfQUJUU1pfSFdPUkQgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOCApICAgLyogKE1DKSBIYWxmLXdvcmQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19NQ19BQlRTWl9XT1JEICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCA4ICkgICAvKiAoTUMpIFdvcmQgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0FCVFRZUCAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAxMCApICAvKiAoTUMpIEFib3J0IFR5cGUgU3RhdHVzICovDQotI2RlZmluZSAgICAgQVQ5MUNfTUNfQUJUVFlQX0RBVEFSICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMTAgKSAgLyogKE1DKSBEYXRhIFJlYWQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19NQ19BQlRUWVBfREFUQVcgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMCApICAvKiAoTUMpIERhdGEgV3JpdGUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19NQ19BQlRUWVBfRkVUQ0ggICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCAxMCApICAvKiAoTUMpIENvZGUgRmV0Y2ggKi8NCi0jZGVmaW5lIEFUOTFDX01DX01TVDAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNiApICAvKiAoTUMpIE1hc3RlciAwIEFib3J0IFNvdXJjZSAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTVNUMSAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE3ICkgIC8qIChNQykgTWFzdGVyIDEgQWJvcnQgU291cmNlICovDQotI2RlZmluZSBBVDkxQ19NQ19TVk1TVDAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjQgKSAgLyogKE1DKSBTYXZlZCBNYXN0ZXIgMCBBYm9ydCBTb3VyY2UgKi8NCi0jZGVmaW5lIEFUOTFDX01DX1NWTVNUMSAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyNSApICAvKiAoTUMpIFNhdmVkIE1hc3RlciAxIEFib3J0IFNvdXJjZSAqLw0KLS8qIC0tLS0tLS0tIE1DX0ZNUiA6IChNQyBPZmZzZXQ6IDB4NjApIE1DIEZsYXNoIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX01DX0ZSRFkgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgICAvKiAoTUMpIEZsYXNoIFJlYWR5ICovDQotI2RlZmluZSBBVDkxQ19NQ19MT0NLRSAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMiApICAgLyogKE1DKSBMb2NrIEVycm9yICovDQotI2RlZmluZSBBVDkxQ19NQ19QUk9HRSAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMyApICAgLyogKE1DKSBQcm9ncmFtbWluZyBFcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTkVCUCAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDcgKSAgIC8qIChNQykgTm8gRXJhc2UgQmVmb3JlIFByb2dyYW1taW5nICovDQotI2RlZmluZSBBVDkxQ19NQ19GV1MgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgOCApICAgLyogKE1DKSBGbGFzaCBXYWl0IFN0YXRlICovDQotI2RlZmluZSAgICAgQVQ5MUNfTUNfRldTXzBGV1MgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgOCApICAgLyogKE1DKSAxIGN5Y2xlIGZvciBSZWFkLCAyIGZvciBXcml0ZSBvcGVyYXRpb25zICovDQotI2RlZmluZSAgICAgQVQ5MUNfTUNfRldTXzFGV1MgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOCApICAgLyogKE1DKSAyIGN5Y2xlcyBmb3IgUmVhZCwgMyBmb3IgV3JpdGUgb3BlcmF0aW9ucyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX01DX0ZXU18yRldTICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDggKSAgIC8qIChNQykgMyBjeWNsZXMgZm9yIFJlYWQsIDQgZm9yIFdyaXRlIG9wZXJhdGlvbnMgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19NQ19GV1NfM0ZXUyAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCA4ICkgICAvKiAoTUMpIDQgY3ljbGVzIGZvciBSZWFkLCA0IGZvciBXcml0ZSBvcGVyYXRpb25zICovDQotI2RlZmluZSBBVDkxQ19NQ19GTUNOICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGIDw8IDE2ICkgLyogKE1DKSBGbGFzaCBNaWNyb3NlY29uZCBDeWNsZSBOdW1iZXIgKi8NCi0vKiAtLS0tLS0tLSBNQ19GQ1IgOiAoTUMgT2Zmc2V0OiAweDY0KSBNQyBGbGFzaCBDb21tYW5kIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19NQ19GQ01EICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEYgPDwgMCApICAgLyogKE1DKSBGbGFzaCBDb21tYW5kICovDQotI2RlZmluZSAgICAgQVQ5MUNfTUNfRkNNRF9TVEFSVF9QUk9HICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgKSAgICAgICAgLyogKE1DKSBTdGFydHMgdGhlIHByb2dyYW1taW5nIG9mIHRoIGVwYWdlIHNwZWNpZmllZCBieSBQQUdFTi4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19NQ19GQ01EX0xPQ0sgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiApICAgICAgICAvKiAoTUMpIFN0YXJ0cyBhIGxvY2sgc2VxdWVuY2Ugb2YgdGhlIHNlY3RvciBkZWZpbmVkIGJ5IHRoZSBiaXRzIDQgdG8gNyBvZiB0aGUgZmllbGQgUEFHRU4uICovDQotI2RlZmluZSAgICAgQVQ5MUNfTUNfRkNNRF9QUk9HX0FORF9MT0NLICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgKSAgICAgICAgLyogKE1DKSBUaGUgbG9jayBzZXF1ZW5jZSBhdXRvbWF0aWNhbGx5IGhhcHBlbnMgYWZ0ZXIgdGhlIHByb2dyYW1taW5nIHNlcXVlbmNlIGlzIGNvbXBsZXRlZC4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19NQ19GQ01EX1VOTE9DSyAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NCApICAgICAgICAvKiAoTUMpIFN0YXJ0cyBhbiB1bmxvY2sgc2VxdWVuY2Ugb2YgdGhlIHNlY3RvciBkZWZpbmVkIGJ5IHRoZSBiaXRzIDQgdG8gNyBvZiB0aGUgZmllbGQgUEFHRU4uICovDQotI2RlZmluZSAgICAgQVQ5MUNfTUNfRkNNRF9FUkFTRV9BTEwgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDggKSAgICAgICAgLyogKE1DKSBTdGFydHMgdGhlIGVyYXNlIG9mIHRoZSBlbnRpcmUgZmxhc2guSWYgYXQgbGVhc3QgYSBwYWdlIGlzIGxvY2tlZCwgdGhlIGNvbW1hbmQgaXMgY2FuY2VsbGVkLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX01DX0ZDTURfU0VUX0dQX05WTSAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhCICkgICAgICAgIC8qIChNQykgU2V0IEdlbmVyYWwgUHVycG9zZSBOVk0gYml0cy4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19NQ19GQ01EX0NMUl9HUF9OVk0gICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RCApICAgICAgICAvKiAoTUMpIENsZWFyIEdlbmVyYWwgUHVycG9zZSBOVk0gYml0cy4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19NQ19GQ01EX1NFVF9TRUNVUklUWSAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RiApICAgICAgICAvKiAoTUMpIFNldCBTZWN1cml0eSBCaXQuICovDQotI2RlZmluZSBBVDkxQ19NQ19QQUdFTiAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDNGRiA8PCA4ICkgLyogKE1DKSBQYWdlIE51bWJlciAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfS0VZICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRiA8PCAyNCApIC8qIChNQykgV3JpdGluZyBQcm90ZWN0IEtleSAqLw0KLS8qIC0tLS0tLS0tIE1DX0ZTUiA6IChNQyBPZmZzZXQ6IDB4NjgpIE1DIEZsYXNoIENvbW1hbmQgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX01DX1NFQ1VSSVRZICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA0ICkgICAvKiAoTUMpIFNlY3VyaXR5IEJpdCBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0dQTlZNMCAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgICAvKiAoTUMpIFNlY3RvciAwIExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19HUE5WTTEgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOSApICAgLyogKE1DKSBTZWN0b3IgMSBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfR1BOVk0yICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEwICkgIC8qIChNQykgU2VjdG9yIDIgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0dQTlZNMyAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMSApICAvKiAoTUMpIFNlY3RvciAzIExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19HUE5WTTQgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTIgKSAgLyogKE1DKSBTZWN0b3IgNCBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfR1BOVk01ICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEzICkgIC8qIChNQykgU2VjdG9yIDUgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0dQTlZNNiAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNCApICAvKiAoTUMpIFNlY3RvciA2IExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19HUE5WTTcgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTUgKSAgLyogKE1DKSBTZWN0b3IgNyBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MwICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE2ICkgIC8qIChNQykgU2VjdG9yIDAgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0xPQ0tTMSAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNyApICAvKiAoTUMpIFNlY3RvciAxIExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19MT0NLUzIgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTggKSAgLyogKE1DKSBTZWN0b3IgMiBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MzICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE5ICkgIC8qIChNQykgU2VjdG9yIDMgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0xPQ0tTNCAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyMCApICAvKiAoTUMpIFNlY3RvciA0IExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19MT0NLUzUgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjEgKSAgLyogKE1DKSBTZWN0b3IgNSBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTE9DS1M2ICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIyICkgIC8qIChNQykgU2VjdG9yIDYgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0xPQ0tTNyAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyMyApICAvKiAoTUMpIFNlY3RvciA3IExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19MT0NLUzggICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjQgKSAgLyogKE1DKSBTZWN0b3IgOCBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTE9DS1M5ICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDI1ICkgIC8qIChNQykgU2VjdG9yIDkgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0xPQ0tTMTAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyNiApICAvKiAoTUMpIFNlY3RvciAxMCBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxMSAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDI3ICkgIC8qIChNQykgU2VjdG9yIDExIExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19MT0NLUzEyICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjggKSAgLyogKE1DKSBTZWN0b3IgMTIgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0xPQ0tTMTMgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyOSApICAvKiAoTUMpIFNlY3RvciAxMyBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxNCAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDMwICkgIC8qIChNQykgU2VjdG9yIDE0IExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19MT0NLUzE1ICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMzEgKSAgLyogKE1DKSBTZWN0b3IgMTUgTG9jayBTdGF0dXMgKi8NCisvLyAtLS0tLS0tLSBNQ19SQ1IgOiAoTUMgT2Zmc2V0OiAweDApIE1DIFJlbWFwIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19NQ19SQ0IgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKE1DKSBSZW1hcCBDb21tYW5kIEJpdA0KKy8vIC0tLS0tLS0tIE1DX0FTUiA6IChNQyBPZmZzZXQ6IDB4NCkgTUMgQWJvcnQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfTUNfVU5EQUREICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChNQykgVW5kZWZpbmVkIEFkZGVzcyBBYm9ydCBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX01JU0FERCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoTUMpIE1pc2FsaWduZWQgQWRkZXNzIEFib3J0IFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfQUJUU1ogICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDgpIC8vIChNQykgQWJvcnQgU2l6ZSBTdGF0dXMNCisjZGVmaW5lIAlBVDkxQ19NQ19BQlRTWl9CWVRFICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA4KSAvLyAoTUMpIEJ5dGUNCisjZGVmaW5lIAlBVDkxQ19NQ19BQlRTWl9IV09SRCAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoTUMpIEhhbGYtd29yZA0KKyNkZWZpbmUgCUFUOTFDX01DX0FCVFNaX1dPUkQgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDgpIC8vIChNQykgV29yZA0KKyNkZWZpbmUgQVQ5MUNfTUNfQUJUVFlQICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTApIC8vIChNQykgQWJvcnQgVHlwZSBTdGF0dXMNCisjZGVmaW5lIAlBVDkxQ19NQ19BQlRUWVBfREFUQVIgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAxMCkgLy8gKE1DKSBEYXRhIFJlYWQNCisjZGVmaW5lIAlBVDkxQ19NQ19BQlRUWVBfREFUQVcgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLy8gKE1DKSBEYXRhIFdyaXRlDQorI2RlZmluZSAJQVQ5MUNfTUNfQUJUVFlQX0ZFVENIICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMTApIC8vIChNQykgQ29kZSBGZXRjaA0KKyNkZWZpbmUgQVQ5MUNfTUNfTVNUMCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChNQykgTWFzdGVyIDAgQWJvcnQgU291cmNlDQorI2RlZmluZSBBVDkxQ19NQ19NU1QxICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNykgLy8gKE1DKSBNYXN0ZXIgMSBBYm9ydCBTb3VyY2UNCisjZGVmaW5lIEFUOTFDX01DX1NWTVNUMCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI0KSAvLyAoTUMpIFNhdmVkIE1hc3RlciAwIEFib3J0IFNvdXJjZQ0KKyNkZWZpbmUgQVQ5MUNfTUNfU1ZNU1QxICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjUpIC8vIChNQykgU2F2ZWQgTWFzdGVyIDEgQWJvcnQgU291cmNlDQorLy8gLS0tLS0tLS0gTUNfRk1SIDogKE1DIE9mZnNldDogMHg2MCkgTUMgRmxhc2ggTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX01DX0ZSRFkgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoTUMpIEZsYXNoIFJlYWR5DQorI2RlZmluZSBBVDkxQ19NQ19MT0NLRSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKE1DKSBMb2NrIEVycm9yDQorI2RlZmluZSBBVDkxQ19NQ19QUk9HRSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKE1DKSBQcm9ncmFtbWluZyBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfTUNfTkVCUCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChNQykgTm8gRXJhc2UgQmVmb3JlIFByb2dyYW1taW5nDQorI2RlZmluZSBBVDkxQ19NQ19GV1MgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKE1DKSBGbGFzaCBXYWl0IFN0YXRlDQorI2RlZmluZSAJQVQ5MUNfTUNfRldTXzBGV1MgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDgpIC8vIChNQykgMSBjeWNsZSBmb3IgUmVhZCwgMiBmb3IgV3JpdGUgb3BlcmF0aW9ucw0KKyNkZWZpbmUgCUFUOTFDX01DX0ZXU18xRldTICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoTUMpIDIgY3ljbGVzIGZvciBSZWFkLCAzIGZvciBXcml0ZSBvcGVyYXRpb25zDQorI2RlZmluZSAJQVQ5MUNfTUNfRldTXzJGV1MgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDgpIC8vIChNQykgMyBjeWNsZXMgZm9yIFJlYWQsIDQgZm9yIFdyaXRlIG9wZXJhdGlvbnMNCisjZGVmaW5lIAlBVDkxQ19NQ19GV1NfM0ZXUyAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKE1DKSA0IGN5Y2xlcyBmb3IgUmVhZCwgNCBmb3IgV3JpdGUgb3BlcmF0aW9ucw0KKyNkZWZpbmUgQVQ5MUNfTUNfRk1DTiAgICAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8IDE2KSAvLyAoTUMpIEZsYXNoIE1pY3Jvc2Vjb25kIEN5Y2xlIE51bWJlcg0KKy8vIC0tLS0tLS0tIE1DX0ZDUiA6IChNQyBPZmZzZXQ6IDB4NjQpIE1DIEZsYXNoIENvbW1hbmQgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19NQ19GQ01EICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAgMCkgLy8gKE1DKSBGbGFzaCBDb21tYW5kDQorI2RlZmluZSAJQVQ5MUNfTUNfRkNNRF9TVEFSVF9QUk9HICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxKSAvLyAoTUMpIFN0YXJ0cyB0aGUgcHJvZ3JhbW1pbmcgb2YgdGggZXBhZ2Ugc3BlY2lmaWVkIGJ5IFBBR0VOLg0KKyNkZWZpbmUgCUFUOTFDX01DX0ZDTURfTE9DSyAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MikgLy8gKE1DKSBTdGFydHMgYSBsb2NrIHNlcXVlbmNlIG9mIHRoZSBzZWN0b3IgZGVmaW5lZCBieSB0aGUgYml0cyA0IHRvIDcgb2YgdGhlIGZpZWxkIFBBR0VOLg0KKyNkZWZpbmUgCUFUOTFDX01DX0ZDTURfUFJPR19BTkRfTE9DSyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MykgLy8gKE1DKSBUaGUgbG9jayBzZXF1ZW5jZSBhdXRvbWF0aWNhbGx5IGhhcHBlbnMgYWZ0ZXIgdGhlIHByb2dyYW1taW5nIHNlcXVlbmNlIGlzIGNvbXBsZXRlZC4NCisjZGVmaW5lIAlBVDkxQ19NQ19GQ01EX1VOTE9DSyAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDQpIC8vIChNQykgU3RhcnRzIGFuIHVubG9jayBzZXF1ZW5jZSBvZiB0aGUgc2VjdG9yIGRlZmluZWQgYnkgdGhlIGJpdHMgNCB0byA3IG9mIHRoZSBmaWVsZCBQQUdFTi4NCisjZGVmaW5lIAlBVDkxQ19NQ19GQ01EX0VSQVNFX0FMTCAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDgpIC8vIChNQykgU3RhcnRzIHRoZSBlcmFzZSBvZiB0aGUgZW50aXJlIGZsYXNoLklmIGF0IGxlYXN0IGEgcGFnZSBpcyBsb2NrZWQsIHRoZSBjb21tYW5kIGlzIGNhbmNlbGxlZC4NCisjZGVmaW5lIAlBVDkxQ19NQ19GQ01EX1NFVF9HUF9OVk0gICAgICAgICAgICgodW5zaWduZWQgaW50KSAweEIpIC8vIChNQykgU2V0IEdlbmVyYWwgUHVycG9zZSBOVk0gYml0cy4NCisjZGVmaW5lIAlBVDkxQ19NQ19GQ01EX0NMUl9HUF9OVk0gICAgICAgICAgICgodW5zaWduZWQgaW50KSAweEQpIC8vIChNQykgQ2xlYXIgR2VuZXJhbCBQdXJwb3NlIE5WTSBiaXRzLg0KKyNkZWZpbmUgCUFUOTFDX01DX0ZDTURfU0VUX1NFQ1VSSVRZICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RikgLy8gKE1DKSBTZXQgU2VjdXJpdHkgQml0Lg0KKyNkZWZpbmUgQVQ5MUNfTUNfUEFHRU4gICAgICAgICgodW5zaWduZWQgaW50KSAweDNGRiA8PCAgOCkgLy8gKE1DKSBQYWdlIE51bWJlcg0KKyNkZWZpbmUgQVQ5MUNfTUNfS0VZICAgICAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8IDI0KSAvLyAoTUMpIFdyaXRpbmcgUHJvdGVjdCBLZXkNCisvLyAtLS0tLS0tLSBNQ19GU1IgOiAoTUMgT2Zmc2V0OiAweDY4KSBNQyBGbGFzaCBDb21tYW5kIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfTUNfU0VDVVJJVFkgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChNQykgU2VjdXJpdHkgQml0IFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfR1BOVk0wICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChNQykgU2VjdG9yIDAgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0dQTlZNMSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvLyAoTUMpIFNlY3RvciAxIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19HUE5WTTIgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLy8gKE1DKSBTZWN0b3IgMiBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfR1BOVk0zICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTEpIC8vIChNQykgU2VjdG9yIDMgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0dQTlZNNCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvLyAoTUMpIFNlY3RvciA0IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19HUE5WTTUgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMykgLy8gKE1DKSBTZWN0b3IgNSBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfR1BOVk02ICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTQpIC8vIChNQykgU2VjdG9yIDYgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0dQTlZNNyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE1KSAvLyAoTUMpIFNlY3RvciA3IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKE1DKSBTZWN0b3IgMCBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTcpIC8vIChNQykgU2VjdG9yIDEgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTMiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE4KSAvLyAoTUMpIFNlY3RvciAyIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOSkgLy8gKE1DKSBTZWN0b3IgMyBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1M0ICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjApIC8vIChNQykgU2VjdG9yIDQgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTNSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIxKSAvLyAoTUMpIFNlY3RvciA1IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMikgLy8gKE1DKSBTZWN0b3IgNiBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1M3ICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjMpIC8vIChNQykgU2VjdG9yIDcgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTOCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI0KSAvLyAoTUMpIFNlY3RvciA4IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzkgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNSkgLy8gKE1DKSBTZWN0b3IgOSBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxMCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjYpIC8vIChNQykgU2VjdG9yIDEwIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzExICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNykgLy8gKE1DKSBTZWN0b3IgMTEgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTMTIgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI4KSAvLyAoTUMpIFNlY3RvciAxMiBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxMyAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjkpIC8vIChNQykgU2VjdG9yIDEzIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzE0ICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAzMCkgLy8gKE1DKSBTZWN0b3IgMTQgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTMTUgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDMxKSAvLyAoTUMpIFNlY3RvciAxNSBMb2NrIFN0YXR1cw0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgU2VyaWFsIFBhcmFsbGVsIEludGVyZmFjZSAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotdHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1NQSQ0KLXsNCi0gICAgQVQ5MV9SRUcgU1BJX0NSOyAgICAgICAgICAvKiBDb250cm9sIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNQSV9NUjsgICAgICAgICAgLyogTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTUElfUkRSOyAgICAgICAgIC8qIFJlY2VpdmUgRGF0YSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTUElfVERSOyAgICAgICAgIC8qIFRyYW5zbWl0IERhdGEgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1BJX1NSOyAgICAgICAgICAvKiBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1BJX0lFUjsgICAgICAgICAvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNQSV9JRFI7ICAgICAgICAgLyogSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1BJX0lNUjsgICAgICAgICAvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDBbIDQgXTsgIC8qICovDQotICAgIEFUOTFfUkVHIFNQSV9DU1JbIDQgXTsgICAgLyogQ2hpcCBTZWxlY3QgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQxWyA0OCBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBTUElfUlBSOyAgICAgICAgIC8qIFJlY2VpdmUgUG9pbnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTUElfUkNSOyAgICAgICAgIC8qIFJlY2VpdmUgQ291bnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTUElfVFBSOyAgICAgICAgIC8qIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1BJX1RDUjsgICAgICAgICAvKiBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNQSV9STlBSOyAgICAgICAgLyogUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1BJX1JOQ1I7ICAgICAgICAvKiBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTUElfVE5QUjsgICAgICAgIC8qIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTUElfVE5DUjsgICAgICAgIC8qIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTUElfUFRDUjsgICAgICAgIC8qIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNQSV9QVFNSOyAgICAgICAgLyogUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLX0gQVQ5MVNfU1BJLCAqIEFUOTFQU19TUEk7DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBTZXJpYWwgUGFyYWxsZWwgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfU1BJIHsNCisJQVQ5MV9SRUcJIFNQSV9DUjsgCS8vIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9NUjsgCS8vIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9SRFI7IAkvLyBSZWNlaXZlIERhdGEgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9URFI7IAkvLyBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTUElfU1I7IAkvLyBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTUElfSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzRdOyAJLy8gDQorCUFUOTFfUkVHCSBTUElfQ1NSWzRdOyAJLy8gQ2hpcCBTZWxlY3QgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMVs0OF07IAkvLyANCisJQVQ5MV9SRUcJIFNQSV9SUFI7IAkvLyBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9SQ1I7IAkvLyBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9UUFI7IAkvLyBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTUElfVENSOyAJLy8gVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX1JOUFI7IAkvLyBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX1JOQ1I7IAkvLyBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX1ROUFI7IAkvLyBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9UTkNSOyAJLy8gVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTUElfUFRDUjsgCS8vIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTUElfUFRTUjsgCS8vIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCit9IEFUOTFTX1NQSSwgKkFUOTFQU19TUEk7DQogDQotLyogLS0tLS0tLS0gU1BJX0NSIDogKFNQSSBPZmZzZXQ6IDB4MCkgU1BJIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9TUElFTiAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgICAgLyogKFNQSSkgU1BJIEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX1NQSURJUyAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEgKSAgICAvKiAoU1BJKSBTUEkgRGlzYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX1NXUlNUICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDcgKSAgICAvKiAoU1BJKSBTUEkgU29mdHdhcmUgcmVzZXQgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9MQVNUWEZFUiAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyNCApICAgLyogKFNQSSkgU1BJIExhc3QgVHJhbnNmZXIgKi8NCi0vKiAtLS0tLS0tLSBTUElfTVIgOiAoU1BJIE9mZnNldDogMHg0KSBTUEkgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX01TVFIgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgICAvKiAoU1BJKSBNYXN0ZXIvU2xhdmUgTW9kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX1BTICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEgKSAgICAvKiAoU1BJKSBQZXJpcGhlcmFsIFNlbGVjdCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NQSV9QU19GSVhFRCAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDEgKSAgICAvKiAoU1BJKSBGaXhlZCBQZXJpcGhlcmFsIFNlbGVjdCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NQSV9QU19WQVJJQUJMRSAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEgKSAgICAvKiAoU1BJKSBWYXJpYWJsZSBQZXJpcGhlcmFsIFNlbGVjdCAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX1BDU0RFQyAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAgICAvKiAoU1BJKSBDaGlwIFNlbGVjdCBEZWNvZGUgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9GRElWICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzICkgICAgLyogKFNQSSkgQ2xvY2sgU2VsZWN0aW9uICovDQotI2RlZmluZSBBVDkxQ19TUElfTU9ERkRJUyAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNCApICAgIC8qIChTUEkpIE1vZGUgRmF1bHQgRGV0ZWN0aW9uICovDQotI2RlZmluZSBBVDkxQ19TUElfTExCICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNyApICAgIC8qIChTUEkpIENsb2NrIFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX1BDUyAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGIDw8IDE2ICkgICAvKiAoU1BJKSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0ICovDQotI2RlZmluZSBBVDkxQ19TUElfRExZQkNTICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGIDw8IDI0ICkgIC8qIChTUEkpIERlbGF5IEJldHdlZW4gQ2hpcCBTZWxlY3RzICovDQotLyogLS0tLS0tLS0gU1BJX1JEUiA6IChTUEkgT2Zmc2V0OiAweDgpIFJlY2VpdmUgRGF0YSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX1JEICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRkZGIDw8IDAgKSAvKiAoU1BJKSBSZWNlaXZlIERhdGEgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9SUENTICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RiA8PCAxNiApICAgLyogKFNQSSkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCBTdGF0dXMgKi8NCi0vKiAtLS0tLS0tLSBTUElfVERSIDogKFNQSSBPZmZzZXQ6IDB4YykgVHJhbnNtaXQgRGF0YSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX1REICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRkZGIDw8IDAgKSAvKiAoU1BJKSBUcmFuc21pdCBEYXRhICovDQotI2RlZmluZSBBVDkxQ19TUElfVFBDUyAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEYgPDwgMTYgKSAgIC8qIChTUEkpIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgU3RhdHVzICovDQotLyogLS0tLS0tLS0gU1BJX1NSIDogKFNQSSBPZmZzZXQ6IDB4MTApIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX1JEUkYgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgICAvKiAoU1BJKSBSZWNlaXZlIERhdGEgUmVnaXN0ZXIgRnVsbCAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX1REUkUgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEgKSAgICAvKiAoU1BJKSBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyIEVtcHR5ICovDQotI2RlZmluZSBBVDkxQ19TUElfTU9ERiAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMiApICAgIC8qIChTUEkpIE1vZGUgRmF1bHQgRXJyb3IgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9PVlJFUyAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzICkgICAgLyogKFNQSSkgT3ZlcnJ1biBFcnJvciBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9FTkRSWCAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA0ICkgICAgLyogKFNQSSkgRW5kIG9mIFJlY2VpdmVyIFRyYW5zZmVyICovDQotI2RlZmluZSBBVDkxQ19TUElfRU5EVFggICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNSApICAgIC8qIChTUEkpIEVuZCBvZiBSZWNlaXZlciBUcmFuc2ZlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX1JYQlVGRiAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDYgKSAgICAvKiAoU1BJKSBSWEJVRkYgSW50ZXJydXB0ICovDQotI2RlZmluZSBBVDkxQ19TUElfVFhCVUZFICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNyApICAgIC8qIChTUEkpIFRYQlVGRSBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9OU1NSICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgICAgLyogKFNQSSkgTlNTUiBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9UWEVNUFRZICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA5ICkgICAgLyogKFNQSSkgVFhFTVBUWSBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9TUElFTlMgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNiApICAgLyogKFNQSSkgRW5hYmxlIFN0YXR1cyAqLw0KLS8qIC0tLS0tLS0tIFNQSV9JRVIgOiAoU1BJIE9mZnNldDogMHgxNCkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFNQSV9JRFIgOiAoU1BJIE9mZnNldDogMHgxOCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBTUElfSU1SIDogKFNQSSBPZmZzZXQ6IDB4MWMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gU1BJX0NTUiA6IChTUEkgT2Zmc2V0OiAweDMwKSBDaGlwIFNlbGVjdCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX0NQT0wgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgLyogKFNQSSkgQ2xvY2sgUG9sYXJpdHkgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9OQ1BIQSAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEgKSAgIC8qIChTUEkpIENsb2NrIFBoYXNlICovDQotI2RlZmluZSBBVDkxQ19TUElfQ1NBQVQgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzICkgICAvKiAoU1BJKSBDaGlwIFNlbGVjdCBBY3RpdmUgQWZ0ZXIgVHJhbnNmZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9CSVRTICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGIDw8IDQgKSAgIC8qIChTUEkpIEJpdHMgUGVyIFRyYW5zZmVyICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1BJX0JJVFNfOCAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCA0ICkgICAvKiAoU1BJKSA4IEJpdHMgUGVyIHRyYW5zZmVyICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1BJX0JJVFNfOSAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA0ICkgICAvKiAoU1BJKSA5IEJpdHMgUGVyIHRyYW5zZmVyICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1BJX0JJVFNfMTAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCA0ICkgICAvKiAoU1BJKSAxMCBCaXRzIFBlciB0cmFuc2ZlciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NQSV9CSVRTXzExICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgNCApICAgLyogKFNQSSkgMTEgQml0cyBQZXIgdHJhbnNmZXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TUElfQklUU18xMiAgICAoICggdW5zaWduZWQgaW50ICkgMHg0IDw8IDQgKSAgIC8qIChTUEkpIDEyIEJpdHMgUGVyIHRyYW5zZmVyICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1BJX0JJVFNfMTMgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NSA8PCA0ICkgICAvKiAoU1BJKSAxMyBCaXRzIFBlciB0cmFuc2ZlciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NQSV9CSVRTXzE0ICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDYgPDwgNCApICAgLyogKFNQSSkgMTQgQml0cyBQZXIgdHJhbnNmZXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TUElfQklUU18xNSAgICAoICggdW5zaWduZWQgaW50ICkgMHg3IDw8IDQgKSAgIC8qIChTUEkpIDE1IEJpdHMgUGVyIHRyYW5zZmVyICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1BJX0JJVFNfMTYgICAgKCAoIHVuc2lnbmVkIGludCApIDB4OCA8PCA0ICkgICAvKiAoU1BJKSAxNiBCaXRzIFBlciB0cmFuc2ZlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX1NDQlIgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGIDw8IDggKSAgLyogKFNQSSkgU2VyaWFsIENsb2NrIEJhdWQgUmF0ZSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX0RMWUJTICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGIDw8IDE2ICkgLyogKFNQSSkgRGVsYXkgQmVmb3JlIFNQQ0sgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9ETFlCQ1QgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRiA8PCAyNCApIC8qIChTUEkpIERlbGF5IEJldHdlZW4gQ29uc2VjdXRpdmUgVHJhbnNmZXJzICovDQorLy8gLS0tLS0tLS0gU1BJX0NSIDogKFNQSSBPZmZzZXQ6IDB4MCkgU1BJIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TUElfU1BJRU4gICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFNQSSkgU1BJIEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX1NQSURJUyAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChTUEkpIFNQSSBEaXNhYmxlDQorI2RlZmluZSBBVDkxQ19TUElfU1dSU1QgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKFNQSSkgU1BJIFNvZnR3YXJlIHJlc2V0DQorI2RlZmluZSBBVDkxQ19TUElfTEFTVFhGRVIgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNCkgLy8gKFNQSSkgU1BJIExhc3QgVHJhbnNmZXINCisvLyAtLS0tLS0tLSBTUElfTVIgOiAoU1BJIE9mZnNldDogMHg0KSBTUEkgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NQSV9NU1RSICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoU1BJKSBNYXN0ZXIvU2xhdmUgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX1BTICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChTUEkpIFBlcmlwaGVyYWwgU2VsZWN0DQorI2RlZmluZSAJQVQ5MUNfU1BJX1BTX0ZJWEVEICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDEpIC8vIChTUEkpIEZpeGVkIFBlcmlwaGVyYWwgU2VsZWN0DQorI2RlZmluZSAJQVQ5MUNfU1BJX1BTX1ZBUklBQkxFICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChTUEkpIFZhcmlhYmxlIFBlcmlwaGVyYWwgU2VsZWN0DQorI2RlZmluZSBBVDkxQ19TUElfUENTREVDICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFNQSSkgQ2hpcCBTZWxlY3QgRGVjb2RlDQorI2RlZmluZSBBVDkxQ19TUElfRkRJViAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKFNQSSkgQ2xvY2sgU2VsZWN0aW9uDQorI2RlZmluZSBBVDkxQ19TUElfTU9ERkRJUyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFNQSSkgTW9kZSBGYXVsdCBEZXRlY3Rpb24NCisjZGVmaW5lIEFUOTFDX1NQSV9MTEIgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoU1BJKSBDbG9jayBTZWxlY3Rpb24NCisjZGVmaW5lIEFUOTFDX1NQSV9QQ1MgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8IDE2KSAvLyAoU1BJKSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0DQorI2RlZmluZSBBVDkxQ19TUElfRExZQkNTICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgMjQpIC8vIChTUEkpIERlbGF5IEJldHdlZW4gQ2hpcCBTZWxlY3RzDQorLy8gLS0tLS0tLS0gU1BJX1JEUiA6IChTUEkgT2Zmc2V0OiAweDgpIFJlY2VpdmUgRGF0YSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NQSV9SRCAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRkZGIDw8ICAwKSAvLyAoU1BJKSBSZWNlaXZlIERhdGENCisjZGVmaW5lIEFUOTFDX1NQSV9SUENTICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8IDE2KSAvLyAoU1BJKSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IFN0YXR1cw0KKy8vIC0tLS0tLS0tIFNQSV9URFIgOiAoU1BJIE9mZnNldDogMHhjKSBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1BJX1REICAgICAgICAgICgodW5zaWduZWQgaW50KSAweEZGRkYgPDwgIDApIC8vIChTUEkpIFRyYW5zbWl0IERhdGENCisjZGVmaW5lIEFUOTFDX1NQSV9UUENTICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8IDE2KSAvLyAoU1BJKSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IFN0YXR1cw0KKy8vIC0tLS0tLS0tIFNQSV9TUiA6IChTUEkgT2Zmc2V0OiAweDEwKSBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TUElfUkRSRiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFNQSSkgUmVjZWl2ZSBEYXRhIFJlZ2lzdGVyIEZ1bGwNCisjZGVmaW5lIEFUOTFDX1NQSV9URFJFICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoU1BJKSBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyIEVtcHR5DQorI2RlZmluZSBBVDkxQ19TUElfTU9ERiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFNQSSkgTW9kZSBGYXVsdCBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfU1BJX09WUkVTICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChTUEkpIE92ZXJydW4gRXJyb3IgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19TUElfRU5EUlggICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFNQSSkgRW5kIG9mIFJlY2VpdmVyIFRyYW5zZmVyDQorI2RlZmluZSBBVDkxQ19TUElfRU5EVFggICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKFNQSSkgRW5kIG9mIFJlY2VpdmVyIFRyYW5zZmVyDQorI2RlZmluZSBBVDkxQ19TUElfUlhCVUZGICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLy8gKFNQSSkgUlhCVUZGIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfU1BJX1RYQlVGRSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChTUEkpIFRYQlVGRSBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1NQSV9OU1NSICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoU1BJKSBOU1NSIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfU1BJX1RYRU1QVFkgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChTUEkpIFRYRU1QVFkgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19TUElfU1BJRU5TICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKFNQSSkgRW5hYmxlIFN0YXR1cw0KKy8vIC0tLS0tLS0tIFNQSV9JRVIgOiAoU1BJIE9mZnNldDogMHgxNCkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBTUElfSURSIDogKFNQSSBPZmZzZXQ6IDB4MTgpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFNQSV9JTVIgOiAoU1BJIE9mZnNldDogMHgxYykgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gU1BJX0NTUiA6IChTUEkgT2Zmc2V0OiAweDMwKSBDaGlwIFNlbGVjdCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NQSV9DUE9MICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoU1BJKSBDbG9jayBQb2xhcml0eQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX05DUEhBICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChTUEkpIENsb2NrIFBoYXNlDQorI2RlZmluZSBBVDkxQ19TUElfQ1NBQVQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKFNQSSkgQ2hpcCBTZWxlY3QgQWN0aXZlIEFmdGVyIFRyYW5zZmVyDQorI2RlZmluZSBBVDkxQ19TUElfQklUUyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAgNCkgLy8gKFNQSSkgQml0cyBQZXIgVHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TUElfQklUU184ICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA0KSAvLyAoU1BJKSA4IEJpdHMgUGVyIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1BJX0JJVFNfOSAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFNQSSkgOSBCaXRzIFBlciB0cmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NQSV9CSVRTXzEwICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDQpIC8vIChTUEkpIDEwIEJpdHMgUGVyIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1BJX0JJVFNfMTEgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgNCkgLy8gKFNQSSkgMTEgQml0cyBQZXIgdHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TUElfQklUU18xMiAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg0IDw8ICA0KSAvLyAoU1BJKSAxMiBCaXRzIFBlciB0cmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NQSV9CSVRTXzEzICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDUgPDwgIDQpIC8vIChTUEkpIDEzIEJpdHMgUGVyIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1BJX0JJVFNfMTQgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NiA8PCAgNCkgLy8gKFNQSSkgMTQgQml0cyBQZXIgdHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TUElfQklUU18xNSAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8ICA0KSAvLyAoU1BJKSAxNSBCaXRzIFBlciB0cmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NQSV9CSVRTXzE2ICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDggPDwgIDQpIC8vIChTUEkpIDE2IEJpdHMgUGVyIHRyYW5zZmVyDQorI2RlZmluZSBBVDkxQ19TUElfU0NCUiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgIDgpIC8vIChTUEkpIFNlcmlhbCBDbG9jayBCYXVkIFJhdGUNCisjZGVmaW5lIEFUOTFDX1NQSV9ETFlCUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRiA8PCAxNikgLy8gKFNQSSkgRGVsYXkgQmVmb3JlIFNQQ0sNCisjZGVmaW5lIEFUOTFDX1NQSV9ETFlCQ1QgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRiA8PCAyNCkgLy8gKFNQSSkgRGVsYXkgQmV0d2VlbiBDb25zZWN1dGl2ZSBUcmFuc2ZlcnMNCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFVzYXJ0ICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfVVNBUlQNCi17DQotICAgIEFUOTFfUkVHIFVTX0NSOyAgICAgICAgICAgLyogQ29udHJvbCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBVU19NUjsgICAgICAgICAgIC8qIE1vZGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVVNfSUVSOyAgICAgICAgICAvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFVTX0lEUjsgICAgICAgICAgLyogSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVVNfSU1SOyAgICAgICAgICAvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBVU19DU1I7ICAgICAgICAgIC8qIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFVTX1JIUjsgICAgICAgICAgLyogUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBVU19USFI7ICAgICAgICAgIC8qIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVVNfQlJHUjsgICAgICAgICAvKiBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFVTX1JUT1I7ICAgICAgICAgLyogUmVjZWl2ZXIgVGltZS1vdXQgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVVNfVFRHUjsgICAgICAgICAvKiBUcmFuc21pdHRlciBUaW1lLWd1YXJkIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMFsgNSBdOyAgLyogKi8NCi0gICAgQVQ5MV9SRUcgVVNfRklESTsgICAgICAgICAvKiBGSV9ESV9SYXRpbyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBVU19ORVI7ICAgICAgICAgIC8qIE5iIEVycm9ycyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDFbIDEgXTsgIC8qICovDQotICAgIEFUOTFfUkVHIFVTX0lGOyAgICAgICAgICAgLyogSVJEQV9GSUxURVIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQyWyA0NCBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBVU19SUFI7ICAgICAgICAgIC8qIFJlY2VpdmUgUG9pbnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBVU19SQ1I7ICAgICAgICAgIC8qIFJlY2VpdmUgQ291bnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBVU19UUFI7ICAgICAgICAgIC8qIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVVNfVENSOyAgICAgICAgICAvKiBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFVTX1JOUFI7ICAgICAgICAgLyogUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVVNfUk5DUjsgICAgICAgICAvKiBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBVU19UTlBSOyAgICAgICAgIC8qIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBVU19UTkNSOyAgICAgICAgIC8qIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBVU19QVENSOyAgICAgICAgIC8qIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFVTX1BUU1I7ICAgICAgICAgLyogUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLX0gQVQ5MVNfVVNBUlQsICogQVQ5MVBTX1VTQVJUOw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVXNhcnQNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19VU0FSVCB7DQorCUFUOTFfUkVHCSBVU19DUjsgCS8vIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX01SOyAJLy8gTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19DU1I7IAkvLyBDaGFubmVsIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfUkhSOyAJLy8gUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfVEhSOyAJLy8gVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfQlJHUjsgCS8vIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX1JUT1I7IAkvLyBSZWNlaXZlciBUaW1lLW91dCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfVFRHUjsgCS8vIFRyYW5zbWl0dGVyIFRpbWUtZ3VhcmQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFs1XTsgCS8vIA0KKwlBVDkxX1JFRwkgVVNfRklESTsgCS8vIEZJX0RJX1JhdGlvIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19ORVI7IAkvLyBOYiBFcnJvcnMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMVsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgVVNfSUY7IAkvLyBJUkRBX0ZJTFRFUiBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQyWzQ0XTsgCS8vIA0KKwlBVDkxX1JFRwkgVVNfUlBSOyAJLy8gUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19SQ1I7IAkvLyBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX1RQUjsgCS8vIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX1RDUjsgCS8vIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX1JOUFI7IAkvLyBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfUk5DUjsgCS8vIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19UTlBSOyAJLy8gVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19UTkNSOyAJLy8gVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19QVENSOyAJLy8gUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX1BUU1I7IAkvLyBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorfSBBVDkxU19VU0FSVCwgKkFUOTFQU19VU0FSVDsNCiANCi0vKiAtLS0tLS0tLSBVU19DUiA6IChVU0FSVCBPZmZzZXQ6IDB4MCkgRGVidWcgVW5pdCBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19VU19TVFRCUksgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDkgKSAgLyogKFVTQVJUKSBTdGFydCBCcmVhayAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfU1RQQlJLICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMCApIC8qIChVU0FSVCkgU3RvcCBCcmVhayAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfU1RUVE8gICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMSApIC8qIChVU0FSVCkgU3RhcnQgVGltZS1vdXQgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1NFTkRBICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTIgKSAvKiAoVVNBUlQpIFNlbmQgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfUlNUSVQgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMyApIC8qIChVU0FSVCkgUmVzZXQgSXRlcmF0aW9ucyAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfUlNUTkFDSyAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNCApIC8qIChVU0FSVCkgUmVzZXQgTm9uIEFja25vd2xlZGdlICovDQotI2RlZmluZSBBVDkxQ19VU19SRVRUTyAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE1ICkgLyogKFVTQVJUKSBSZWFybSBUaW1lLW91dCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfRFRSRU4gICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNiApIC8qIChVU0FSVCkgRGF0YSBUZXJtaW5hbCByZWFkeSBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX0RUUkRJUyAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTcgKSAvKiAoVVNBUlQpIERhdGEgVGVybWluYWwgcmVhZHkgRGlzYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfUlRTRU4gICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxOCApIC8qIChVU0FSVCkgUmVxdWVzdCB0byBTZW5kIGVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfUlRTRElTICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxOSApIC8qIChVU0FSVCkgUmVxdWVzdCB0byBTZW5kIERpc2FibGUgKi8NCi0vKiAtLS0tLS0tLSBVU19NUiA6IChVU0FSVCBPZmZzZXQ6IDB4NCkgRGVidWcgVW5pdCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19VU19VU01PREUgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGIDw8IDAgKSAgLyogKFVTQVJUKSBVc2FydCBtb2RlICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfVVNNT0RFX05PUk1BTCAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwICkgICAgICAgLyogKFVTQVJUKSBOb3JtYWwgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19VU01PREVfUlM0ODUgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgKSAgICAgICAvKiAoVVNBUlQpIFJTNDg1ICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfVVNNT0RFX0hXSFNIICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyICkgICAgICAgLyogKFVTQVJUKSBIYXJkd2FyZSBIYW5kc2hha2luZyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX1VTTU9ERV9NT0RFTSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyApICAgICAgIC8qIChVU0FSVCkgTW9kZW0gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19VU01PREVfSVNPNzgxNl8wICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDQgKSAgICAgICAvKiAoVVNBUlQpIElTTzc4MTYgcHJvdG9jb2w6IFQgPSAwICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfVVNNT0RFX0lTTzc4MTZfMSAgICAoICggdW5zaWduZWQgaW50ICkgMHg2ICkgICAgICAgLyogKFVTQVJUKSBJU083ODE2IHByb3RvY29sOiBUID0gMSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX1VTTU9ERV9JUkRBICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4OCApICAgICAgIC8qIChVU0FSVCkgSXJEQSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX1VTTU9ERV9TV0hTSCAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4QyApICAgICAgIC8qIChVU0FSVCkgU29mdHdhcmUgSGFuZHNoYWtpbmcgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX0NMS1MgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgNCApICAvKiAoVVNBUlQpIENsb2NrIFNlbGVjdGlvbiAoQmF1ZCBSYXRlIGdlbmVyYXRvciBJbnB1dCBDbG9jayAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX0NMS1NfQ0xPQ0sgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCA0ICkgIC8qIChVU0FSVCkgQ2xvY2sgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19DTEtTX0ZESVYxICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNCApICAvKiAoVVNBUlQpIGZkaXYxICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfQ0xLU19TTE9XICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDQgKSAgLyogKFVTQVJUKSBzbG93X2Nsb2NrIChBUk0pICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfQ0xLU19FWFQgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDQgKSAgLyogKFVTQVJUKSBFeHRlcm5hbCAoU0NLKSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfQ0hSTCAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCA2ICkgIC8qIChVU0FSVCkgQ2xvY2sgU2VsZWN0aW9uIChCYXVkIFJhdGUgZ2VuZXJhdG9yIElucHV0IENsb2NrICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfQ0hSTF81X0JJVFMgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDYgKSAgLyogKFVTQVJUKSBDaGFyYWN0ZXIgTGVuZ3RoOiA1IGJpdHMgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19DSFJMXzZfQklUUyAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNiApICAvKiAoVVNBUlQpIENoYXJhY3RlciBMZW5ndGg6IDYgYml0cyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX0NIUkxfN19CSVRTICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCA2ICkgIC8qIChVU0FSVCkgQ2hhcmFjdGVyIExlbmd0aDogNyBiaXRzICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfQ0hSTF84X0JJVFMgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDYgKSAgLyogKFVTQVJUKSBDaGFyYWN0ZXIgTGVuZ3RoOiA4IGJpdHMgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1NZTkMgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOCApICAvKiAoVVNBUlQpIFN5bmNocm9ub3VzIE1vZGUgU2VsZWN0ICovDQotI2RlZmluZSBBVDkxQ19VU19OQlNUT1AgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDEyICkgLyogKFVTQVJUKSBOdW1iZXIgb2YgU3RvcCBiaXRzICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfTkJTVE9QXzFfQklUICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDEyICkgLyogKFVTQVJUKSAxIHN0b3AgYml0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfTkJTVE9QXzE1X0JJVCAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEyICkgLyogKFVTQVJUKSBBc3luY2hyb25vdXMgKFNZTkM9MCkgMiBzdG9wIGJpdHMgU3luY2hyb25vdXMgKFNZTkM9MSkgMiBzdG9wIGJpdHMgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19OQlNUT1BfMl9CSVQgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgMTIgKSAvKiAoVVNBUlQpIDIgc3RvcCBiaXRzICovDQotI2RlZmluZSBBVDkxQ19VU19NU0JGICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE2ICkgLyogKFVTQVJUKSBCaXQgT3JkZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX01PREU5ICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTcgKSAvKiAoVVNBUlQpIDktYml0IENoYXJhY3RlciBsZW5ndGggKi8NCi0jZGVmaW5lIEFUOTFDX1VTX0NLTE8gICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTggKSAvKiAoVVNBUlQpIENsb2NrIE91dHB1dCBTZWxlY3QgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX09WRVIgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTkgKSAvKiAoVVNBUlQpIE92ZXIgU2FtcGxpbmcgTW9kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfSU5BQ0sgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyMCApIC8qIChVU0FSVCkgSW5oaWJpdCBOb24gQWNrbm93bGVkZ2UgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX0RTTkFDSyAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjEgKSAvKiAoVVNBUlQpIERpc2FibGUgU3VjY2Vzc2l2ZSBOQUNLICovDQotI2RlZmluZSBBVDkxQ19VU19NQVhfSVRFUiAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDI0ICkgLyogKFVTQVJUKSBOdW1iZXIgb2YgUmVwZXRpdGlvbnMgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX0ZJTFRFUiAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjggKSAvKiAoVVNBUlQpIFJlY2VpdmUgTGluZSBGaWx0ZXIgKi8NCi0vKiAtLS0tLS0tLSBVU19JRVIgOiAoVVNBUlQgT2Zmc2V0OiAweDgpIERlYnVnIFVuaXQgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfUlhCUksgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyICkgIC8qIChVU0FSVCkgQnJlYWsgUmVjZWl2ZWQvRW5kIG9mIEJyZWFrICovDQotI2RlZmluZSBBVDkxQ19VU19USU1FT1VUICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDggKSAgLyogKFVTQVJUKSBSZWNlaXZlciBUaW1lLW91dCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfSVRFUkFUSU9OICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMCApIC8qIChVU0FSVCkgTWF4IG51bWJlciBvZiBSZXBldGl0aW9ucyBSZWFjaGVkICovDQotI2RlZmluZSBBVDkxQ19VU19OQUNLICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEzICkgLyogKFVTQVJUKSBOb24gQWNrbm93bGVkZ2UgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1JJSUMgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTYgKSAvKiAoVVNBUlQpIFJpbmcgSU5kaWNhdG9yIElucHV0IENoYW5nZSBGbGFnICovDQotI2RlZmluZSBBVDkxQ19VU19EU1JJQyAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE3ICkgLyogKFVTQVJUKSBEYXRhIFNldCBSZWFkeSBJbnB1dCBDaGFuZ2UgRmxhZyAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfRENESUMgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxOCApIC8qIChVU0FSVCkgRGF0YSBDYXJyaWVyIEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX0NUU0lDICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTkgKSAvKiAoVVNBUlQpIENsZWFyIFRvIFNlbmQgSW5wdXQgQ2hhbmdlIEZsYWcgKi8NCi0vKiAtLS0tLS0tLSBVU19JRFIgOiAoVVNBUlQgT2Zmc2V0OiAweGMpIERlYnVnIFVuaXQgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBVU19JTVIgOiAoVVNBUlQgT2Zmc2V0OiAweDEwKSBEZWJ1ZyBVbml0IEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gVVNfQ1NSIDogKFVTQVJUIE9mZnNldDogMHgxNCkgRGVidWcgVW5pdCBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfUkkgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjAgKSAgIC8qIChVU0FSVCkgSW1hZ2Ugb2YgUkkgSW5wdXQgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX0RTUiAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIxICkgICAvKiAoVVNBUlQpIEltYWdlIG9mIERTUiBJbnB1dCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfRENEICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjIgKSAgIC8qIChVU0FSVCkgSW1hZ2Ugb2YgRENEIElucHV0ICovDQotI2RlZmluZSBBVDkxQ19VU19DVFMgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyMyApICAgLyogKFVTQVJUKSBJbWFnZSBvZiBDVFMgSW5wdXQgKi8NCisvLyAtLS0tLS0tLSBVU19DUiA6IChVU0FSVCBPZmZzZXQ6IDB4MCkgRGVidWcgVW5pdCBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVVNfU1RUQlJLICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChVU0FSVCkgU3RhcnQgQnJlYWsNCisjZGVmaW5lIEFUOTFDX1VTX1NUUEJSSyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEwKSAvLyAoVVNBUlQpIFN0b3AgQnJlYWsNCisjZGVmaW5lIEFUOTFDX1VTX1NUVFRPICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDExKSAvLyAoVVNBUlQpIFN0YXJ0IFRpbWUtb3V0DQorI2RlZmluZSBBVDkxQ19VU19TRU5EQSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLy8gKFVTQVJUKSBTZW5kIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX1VTX1JTVElUICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEzKSAvLyAoVVNBUlQpIFJlc2V0IEl0ZXJhdGlvbnMNCisjZGVmaW5lIEFUOTFDX1VTX1JTVE5BQ0sgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE0KSAvLyAoVVNBUlQpIFJlc2V0IE5vbiBBY2tub3dsZWRnZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfUkVUVE8gICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTUpIC8vIChVU0FSVCkgUmVhcm0gVGltZS1vdXQNCisjZGVmaW5lIEFUOTFDX1VTX0RUUkVOICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoVVNBUlQpIERhdGEgVGVybWluYWwgcmVhZHkgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19VU19EVFJESVMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNykgLy8gKFVTQVJUKSBEYXRhIFRlcm1pbmFsIHJlYWR5IERpc2FibGUNCisjZGVmaW5lIEFUOTFDX1VTX1JUU0VOICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE4KSAvLyAoVVNBUlQpIFJlcXVlc3QgdG8gU2VuZCBlbmFibGUNCisjZGVmaW5lIEFUOTFDX1VTX1JUU0RJUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE5KSAvLyAoVVNBUlQpIFJlcXVlc3QgdG8gU2VuZCBEaXNhYmxlDQorLy8gLS0tLS0tLS0gVVNfTVIgOiAoVVNBUlQgT2Zmc2V0OiAweDQpIERlYnVnIFVuaXQgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VTX1VTTU9ERSAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8ICAwKSAvLyAoVVNBUlQpIFVzYXJ0IG1vZGUNCisjZGVmaW5lIAlBVDkxQ19VU19VU01PREVfTk9STUFMICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCkgLy8gKFVTQVJUKSBOb3JtYWwNCisjZGVmaW5lIAlBVDkxQ19VU19VU01PREVfUlM0ODUgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSkgLy8gKFVTQVJUKSBSUzQ4NQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1VTTU9ERV9IV0hTSCAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyKSAvLyAoVVNBUlQpIEhhcmR3YXJlIEhhbmRzaGFraW5nDQorI2RlZmluZSAJQVQ5MUNfVVNfVVNNT0RFX01PREVNICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMpIC8vIChVU0FSVCkgTW9kZW0NCisjZGVmaW5lIAlBVDkxQ19VU19VU01PREVfSVNPNzgxNl8wICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NCkgLy8gKFVTQVJUKSBJU083ODE2IHByb3RvY29sOiBUID0gMA0KKyNkZWZpbmUgCUFUOTFDX1VTX1VTTU9ERV9JU083ODE2XzEgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg2KSAvLyAoVVNBUlQpIElTTzc4MTYgcHJvdG9jb2w6IFQgPSAxDQorI2RlZmluZSAJQVQ5MUNfVVNfVVNNT0RFX0lSREEgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDgpIC8vIChVU0FSVCkgSXJEQQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1VTTU9ERV9TV0hTSCAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhDKSAvLyAoVVNBUlQpIFNvZnR3YXJlIEhhbmRzaGFraW5nDQorI2RlZmluZSBBVDkxQ19VU19DTEtTICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgNCkgLy8gKFVTQVJUKSBDbG9jayBTZWxlY3Rpb24gKEJhdWQgUmF0ZSBnZW5lcmF0b3IgSW5wdXQgQ2xvY2sNCisjZGVmaW5lIAlBVDkxQ19VU19DTEtTX0NMT0NLICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDQpIC8vIChVU0FSVCkgQ2xvY2sNCisjZGVmaW5lIAlBVDkxQ19VU19DTEtTX0ZESVYxICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChVU0FSVCkgZmRpdjENCisjZGVmaW5lIAlBVDkxQ19VU19DTEtTX1NMT1cgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDQpIC8vIChVU0FSVCkgc2xvd19jbG9jayAoQVJNKQ0KKyNkZWZpbmUgCUFUOTFDX1VTX0NMS1NfRVhUICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgNCkgLy8gKFVTQVJUKSBFeHRlcm5hbCAoU0NLKQ0KKyNkZWZpbmUgQVQ5MUNfVVNfQ0hSTCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDYpIC8vIChVU0FSVCkgQ2xvY2sgU2VsZWN0aW9uIChCYXVkIFJhdGUgZ2VuZXJhdG9yIElucHV0IENsb2NrDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0hSTF81X0JJVFMgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA2KSAvLyAoVVNBUlQpIENoYXJhY3RlciBMZW5ndGg6IDUgYml0cw0KKyNkZWZpbmUgCUFUOTFDX1VTX0NIUkxfNl9CSVRTICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLy8gKFVTQVJUKSBDaGFyYWN0ZXIgTGVuZ3RoOiA2IGJpdHMNCisjZGVmaW5lIAlBVDkxQ19VU19DSFJMXzdfQklUUyAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDYpIC8vIChVU0FSVCkgQ2hhcmFjdGVyIExlbmd0aDogNyBiaXRzDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0hSTF84X0JJVFMgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA2KSAvLyAoVVNBUlQpIENoYXJhY3RlciBMZW5ndGg6IDggYml0cw0KKyNkZWZpbmUgQVQ5MUNfVVNfU1lOQyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChVU0FSVCkgU3luY2hyb25vdXMgTW9kZSBTZWxlY3QNCisjZGVmaW5lIEFUOTFDX1VTX05CU1RPUCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDEyKSAvLyAoVVNBUlQpIE51bWJlciBvZiBTdG9wIGJpdHMNCisjZGVmaW5lIAlBVDkxQ19VU19OQlNUT1BfMV9CSVQgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAxMikgLy8gKFVTQVJUKSAxIHN0b3AgYml0DQorI2RlZmluZSAJQVQ5MUNfVVNfTkJTVE9QXzE1X0JJVCAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8vIChVU0FSVCkgQXN5bmNocm9ub3VzIChTWU5DPTApIDIgc3RvcCBiaXRzIFN5bmNocm9ub3VzIChTWU5DPTEpIDIgc3RvcCBiaXRzDQorI2RlZmluZSAJQVQ5MUNfVVNfTkJTVE9QXzJfQklUICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMTIpIC8vIChVU0FSVCkgMiBzdG9wIGJpdHMNCisjZGVmaW5lIEFUOTFDX1VTX01TQkYgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoVVNBUlQpIEJpdCBPcmRlcg0KKyNkZWZpbmUgQVQ5MUNfVVNfTU9ERTkgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTcpIC8vIChVU0FSVCkgOS1iaXQgQ2hhcmFjdGVyIGxlbmd0aA0KKyNkZWZpbmUgQVQ5MUNfVVNfQ0tMTyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTgpIC8vIChVU0FSVCkgQ2xvY2sgT3V0cHV0IFNlbGVjdA0KKyNkZWZpbmUgQVQ5MUNfVVNfT1ZFUiAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTkpIC8vIChVU0FSVCkgT3ZlciBTYW1wbGluZyBNb2RlDQorI2RlZmluZSBBVDkxQ19VU19JTkFDSyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMCkgLy8gKFVTQVJUKSBJbmhpYml0IE5vbiBBY2tub3dsZWRnZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfRFNOQUNLICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjEpIC8vIChVU0FSVCkgRGlzYWJsZSBTdWNjZXNzaXZlIE5BQ0sNCisjZGVmaW5lIEFUOTFDX1VTX01BWF9JVEVSICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI0KSAvLyAoVVNBUlQpIE51bWJlciBvZiBSZXBldGl0aW9ucw0KKyNkZWZpbmUgQVQ5MUNfVVNfRklMVEVSICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjgpIC8vIChVU0FSVCkgUmVjZWl2ZSBMaW5lIEZpbHRlcg0KKy8vIC0tLS0tLS0tIFVTX0lFUiA6IChVU0FSVCBPZmZzZXQ6IDB4OCkgRGVidWcgVW5pdCBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVVNfUlhCUksgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChVU0FSVCkgQnJlYWsgUmVjZWl2ZWQvRW5kIG9mIEJyZWFrDQorI2RlZmluZSBBVDkxQ19VU19USU1FT1VUICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFVTQVJUKSBSZWNlaXZlciBUaW1lLW91dA0KKyNkZWZpbmUgQVQ5MUNfVVNfSVRFUkFUSU9OICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChVU0FSVCkgTWF4IG51bWJlciBvZiBSZXBldGl0aW9ucyBSZWFjaGVkDQorI2RlZmluZSBBVDkxQ19VU19OQUNLICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMykgLy8gKFVTQVJUKSBOb24gQWNrbm93bGVkZ2UNCisjZGVmaW5lIEFUOTFDX1VTX1JJSUMgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoVVNBUlQpIFJpbmcgSU5kaWNhdG9yIElucHV0IENoYW5nZSBGbGFnDQorI2RlZmluZSBBVDkxQ19VU19EU1JJQyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNykgLy8gKFVTQVJUKSBEYXRhIFNldCBSZWFkeSBJbnB1dCBDaGFuZ2UgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfVVNfRENESUMgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTgpIC8vIChVU0FSVCkgRGF0YSBDYXJyaWVyIEZsYWcNCisjZGVmaW5lIEFUOTFDX1VTX0NUU0lDICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE5KSAvLyAoVVNBUlQpIENsZWFyIFRvIFNlbmQgSW5wdXQgQ2hhbmdlIEZsYWcNCisvLyAtLS0tLS0tLSBVU19JRFIgOiAoVVNBUlQgT2Zmc2V0OiAweGMpIERlYnVnIFVuaXQgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVVNfSU1SIDogKFVTQVJUIE9mZnNldDogMHgxMCkgRGVidWcgVW5pdCBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBVU19DU1IgOiAoVVNBUlQgT2Zmc2V0OiAweDE0KSBEZWJ1ZyBVbml0IENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVVNfUkkgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjApIC8vIChVU0FSVCkgSW1hZ2Ugb2YgUkkgSW5wdXQNCisjZGVmaW5lIEFUOTFDX1VTX0RTUiAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIxKSAvLyAoVVNBUlQpIEltYWdlIG9mIERTUiBJbnB1dA0KKyNkZWZpbmUgQVQ5MUNfVVNfRENEICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjIpIC8vIChVU0FSVCkgSW1hZ2Ugb2YgRENEIElucHV0DQorI2RlZmluZSBBVDkxQ19VU19DVFMgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMykgLy8gKFVTQVJUKSBJbWFnZSBvZiBDVFMgSW5wdXQNCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFN5bmNocm9ub3VzIFNlcmlhbCBDb250cm9sbGVyIEludGVyZmFjZSAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotdHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1NTQw0KLXsNCi0gICAgQVQ5MV9SRUcgU1NDX0NSOyAgICAgICAgICAvKiBDb250cm9sIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNTQ19DTVI7ICAgICAgICAgLyogQ2xvY2sgTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDBbIDIgXTsgIC8qICovDQotICAgIEFUOTFfUkVHIFNTQ19SQ01SOyAgICAgICAgLyogUmVjZWl2ZSBDbG9jayBNb2RlUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1NDX1JGTVI7ICAgICAgICAvKiBSZWNlaXZlIEZyYW1lIE1vZGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1NDX1RDTVI7ICAgICAgICAvKiBUcmFuc21pdCBDbG9jayBNb2RlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNTQ19URk1SOyAgICAgICAgLyogVHJhbnNtaXQgRnJhbWUgTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTU0NfUkhSOyAgICAgICAgIC8qIFJlY2VpdmUgSG9sZGluZyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTU0NfVEhSOyAgICAgICAgIC8qIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQxWyAyIF07ICAvKiAqLw0KLSAgICBBVDkxX1JFRyBTU0NfUlNIUjsgICAgICAgIC8qIFJlY2VpdmUgU3luYyBIb2xkaW5nIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNTQ19UU0hSOyAgICAgICAgLyogVHJhbnNtaXQgU3luYyBIb2xkaW5nIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMlsgMiBdOyAgLyogKi8NCi0gICAgQVQ5MV9SRUcgU1NDX1NSOyAgICAgICAgICAvKiBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1NDX0lFUjsgICAgICAgICAvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNTQ19JRFI7ICAgICAgICAgLyogSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1NDX0lNUjsgICAgICAgICAvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDNbIDQ0IF07IC8qICovDQotICAgIEFUOTFfUkVHIFNTQ19SUFI7ICAgICAgICAgLyogUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNTQ19SQ1I7ICAgICAgICAgLyogUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNTQ19UUFI7ICAgICAgICAgLyogVHJhbnNtaXQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTU0NfVENSOyAgICAgICAgIC8qIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1NDX1JOUFI7ICAgICAgICAvKiBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTU0NfUk5DUjsgICAgICAgIC8qIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNTQ19UTlBSOyAgICAgICAgLyogVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNTQ19UTkNSOyAgICAgICAgLyogVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNTQ19QVENSOyAgICAgICAgLyogUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1NDX1BUU1I7ICAgICAgICAvKiBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotfSBBVDkxU19TU0MsICogQVQ5MVBTX1NTQzsNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFN5bmNocm9ub3VzIFNlcmlhbCBDb250cm9sbGVyIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1NTQyB7DQorCUFUOTFfUkVHCSBTU0NfQ1I7IAkvLyBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfQ01SOyAJLy8gQ2xvY2sgTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzJdOyAJLy8gDQorCUFUOTFfUkVHCSBTU0NfUkNNUjsgCS8vIFJlY2VpdmUgQ2xvY2sgTW9kZVJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfUkZNUjsgCS8vIFJlY2VpdmUgRnJhbWUgTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1RDTVI7IAkvLyBUcmFuc21pdCBDbG9jayBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfVEZNUjsgCS8vIFRyYW5zbWl0IEZyYW1lIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19SSFI7IAkvLyBSZWNlaXZlIEhvbGRpbmcgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19USFI7IAkvLyBUcmFuc21pdCBIb2xkaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbMl07IAkvLyANCisJQVQ5MV9SRUcJIFNTQ19SU0hSOyAJLy8gUmVjZWl2ZSBTeW5jIEhvbGRpbmcgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19UU0hSOyAJLy8gVHJhbnNtaXQgU3luYyBIb2xkaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDJbMl07IAkvLyANCisJQVQ5MV9SRUcJIFNTQ19TUjsgCS8vIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX0lFUjsgCS8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDNbNDRdOyAJLy8gDQorCUFUOTFfUkVHCSBTU0NfUlBSOyAJLy8gUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfUkNSOyAJLy8gUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfVFBSOyAJLy8gVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1RDUjsgCS8vIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19STlBSOyAJLy8gUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19STkNSOyAJLy8gUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19UTlBSOyAJLy8gVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfVE5DUjsgCS8vIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1BUQ1I7IAkvLyBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1BUU1I7IAkvLyBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorfSBBVDkxU19TU0MsICpBVDkxUFNfU1NDOw0KIA0KLS8qIC0tLS0tLS0tIFNTQ19DUiA6IChTU0MgT2Zmc2V0OiAweDApIFNTQyBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19TU0NfUlhFTiAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgIC8qIChTU0MpIFJlY2VpdmUgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19TU0NfUlhESVMgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEgKSAgIC8qIChTU0MpIFJlY2VpdmUgRGlzYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1RYRU4gICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgICAvKiAoU1NDKSBUcmFuc21pdCBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19UWERJUyAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOSApICAgLyogKFNTQykgVHJhbnNtaXQgRGlzYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1NXUlNUICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNSApICAvKiAoU1NDKSBTb2Z0d2FyZSBSZXNldCAqLw0KLS8qIC0tLS0tLS0tIFNTQ19SQ01SIDogKFNTQyBPZmZzZXQ6IDB4MTApIFNTQyBSZWNlaXZlIENsb2NrIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19DS1MgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMCApICAgLyogKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfQ0tTX0RJViAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgKSAgICAgICAgLyogKFNTQykgRGl2aWRlZCBDbG9jayAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19DS1NfVEsgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSApICAgICAgICAvKiAoU1NDKSBUSyBDbG9jayBzaWduYWwgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfQ0tTX1JLICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgKSAgICAgICAgLyogKFNTQykgUksgcGluICovDQotI2RlZmluZSBBVDkxQ19TU0NfQ0tPICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg3IDw8IDIgKSAgIC8qIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgT3V0cHV0IE1vZGUgU2VsZWN0aW9uICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX0NLT19OT05FICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDIgKSAgIC8qIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgT3V0cHV0IE1vZGU6IE5vbmUgUksgcGluOiBJbnB1dC1vbmx5ICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX0NLT19DT05USU5PVVMgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAgIC8qIChTU0MpIENvbnRpbnVvdXMgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBSSyBwaW46IE91dHB1dCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19DS09fREFUQV9UWCAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCAyICkgICAvKiAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIG9ubHkgZHVyaW5nIGRhdGEgdHJhbnNmZXJzIFJLIHBpbjogT3V0cHV0ICovDQotI2RlZmluZSBBVDkxQ19TU0NfQ0tJICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDUgKSAgIC8qIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgSW52ZXJzaW9uICovDQotI2RlZmluZSBBVDkxQ19TU0NfU1RBUlQgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGIDw8IDggKSAgIC8qIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgU3RhcnQgU2VsZWN0aW9uICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX1NUQVJUX0NPTlRJTk9VUyAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDggKSAgIC8qIChTU0MpIENvbnRpbnVvdXMsIGFzIHNvb24gYXMgdGhlIHJlY2VpdmVyIGlzIGVuYWJsZWQsIGFuZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgZW5kIG9mIHRyYW5zZmVyIG9mIHRoZSBwcmV2aW91cyBkYXRhLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19TVEFSVF9UWCAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgICAvKiAoU1NDKSBUcmFuc21pdC9SZWNlaXZlIHN0YXJ0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX1NUQVJUX0xPV19SRiAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDggKSAgIC8qIChTU0MpIERldGVjdGlvbiBvZiBhIGxvdyBsZXZlbCBvbiBSRiBpbnB1dCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19TVEFSVF9ISUdIX1JGICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCA4ICkgICAvKiAoU1NDKSBEZXRlY3Rpb24gb2YgYSBoaWdoIGxldmVsIG9uIFJGIGlucHV0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX1NUQVJUX0ZBTExfUkYgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg0IDw8IDggKSAgIC8qIChTU0MpIERldGVjdGlvbiBvZiBhIGZhbGxpbmcgZWRnZSBvbiBSRiBpbnB1dCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19TVEFSVF9SSVNFX1JGICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NSA8PCA4ICkgICAvKiAoU1NDKSBEZXRlY3Rpb24gb2YgYSByaXNpbmcgZWRnZSBvbiBSRiBpbnB1dCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19TVEFSVF9MRVZFTF9SRiAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NiA8PCA4ICkgICAvKiAoU1NDKSBEZXRlY3Rpb24gb2YgYW55IGxldmVsIGNoYW5nZSBvbiBSRiBpbnB1dCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19TVEFSVF9FREdFX1JGICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NyA8PCA4ICkgICAvKiAoU1NDKSBEZXRlY3Rpb24gb2YgYW55IGVkZ2Ugb24gUkYgaW5wdXQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfU1RBUlRfMCAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDggPDwgOCApICAgLyogKFNTQykgQ29tcGFyZSAwICovDQotI2RlZmluZSBBVDkxQ19TU0NfU1RURExZICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRiA8PCAxNiApIC8qIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgU3RhcnQgRGVsYXkgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19QRVJJT0QgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGIDw8IDI0ICkgLyogKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBQZXJpb2QgRGl2aWRlciBTZWxlY3Rpb24gKi8NCi0vKiAtLS0tLS0tLSBTU0NfUkZNUiA6IChTU0MgT2Zmc2V0OiAweDE0KSBTU0MgUmVjZWl2ZSBGcmFtZSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19TU0NfREFUTEVOICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxRiA8PCAwICkgIC8qIChTU0MpIERhdGEgTGVuZ3RoICovDQotI2RlZmluZSBBVDkxQ19TU0NfTE9PUCAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDUgKSAgIC8qIChTU0MpIExvb3AgTW9kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX01TQkYgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA3ICkgICAvKiAoU1NDKSBNb3N0IFNpZ25pZmljYW50IEJpdCBGaXJzdCAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0RBVE5CICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RiA8PCA4ICkgICAvKiAoU1NDKSBEYXRhIE51bWJlciBwZXIgRnJhbWUgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19GU0xFTiAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEYgPDwgMTYgKSAgLyogKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIGxlbmd0aCAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0ZTT1MgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NyA8PCAyMCApICAvKiAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgT3V0cHV0IFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19GU09TX05PTkUgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAyMCApICAvKiAoU1NDKSBTZWxlY3RlZCBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgU2lnbmFsOiBOb25lIFJLIHBpbiBJbnB1dC1vbmx5ICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX0ZTT1NfTkVHQVRJVkUgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIwICkgIC8qIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IE5lZ2F0aXZlIFB1bHNlICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX0ZTT1NfUE9TSVRJVkUgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDIwICkgIC8qIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IFBvc2l0aXZlIFB1bHNlICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX0ZTT1NfTE9XICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDIwICkgIC8qIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IERyaXZlciBMb3cgZHVyaW5nIGRhdGEgdHJhbnNmZXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfRlNPU19ISUdIICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDQgPDwgMjAgKSAgLyogKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogRHJpdmVyIEhpZ2ggZHVyaW5nIGRhdGEgdHJhbnNmZXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfRlNPU19UT0dHTEUgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDUgPDwgMjAgKSAgLyogKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogVG9nZ2xpbmcgYXQgZWFjaCBzdGFydCBvZiBkYXRhIHRyYW5zZmVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfRlNFREdFICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDI0ICkgIC8qIChTU0MpIEZyYW1lIFN5bmMgRWRnZSBEZXRlY3Rpb24gKi8NCi0vKiAtLS0tLS0tLSBTU0NfVENNUiA6IChTU0MgT2Zmc2V0OiAweDE4KSBTU0MgVHJhbnNtaXQgQ2xvY2sgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFNTQ19URk1SIDogKFNTQyBPZmZzZXQ6IDB4MWMpIFNTQyBUcmFuc21pdCBGcmFtZSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19TU0NfREFUREVGICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDUgKSAgLyogKFNTQykgRGF0YSBEZWZhdWx0IFZhbHVlICovDQotI2RlZmluZSBBVDkxQ19TU0NfRlNERU4gICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIzICkgLyogKFNTQykgRnJhbWUgU3luYyBEYXRhIEVuYWJsZSAqLw0KLS8qIC0tLS0tLS0tIFNTQ19TUiA6IChTU0MgT2Zmc2V0OiAweDQwKSBTU0MgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19TU0NfVFhSRFkgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgLyogKFNTQykgVHJhbnNtaXQgUmVhZHkgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19UWEVNUFRZICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAvKiAoU1NDKSBUcmFuc21pdCBFbXB0eSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0VORFRYICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyICkgIC8qIChTU0MpIEVuZCBPZiBUcmFuc21pc3Npb24gKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19UWEJVRkUgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMyApICAvKiAoU1NDKSBUcmFuc21pdCBCdWZmZXIgRW1wdHkgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19SWFJEWSAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNCApICAvKiAoU1NDKSBSZWNlaXZlIFJlYWR5ICovDQotI2RlZmluZSBBVDkxQ19TU0NfT1ZSVU4gICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDUgKSAgLyogKFNTQykgUmVjZWl2ZSBPdmVycnVuICovDQotI2RlZmluZSBBVDkxQ19TU0NfRU5EUlggICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDYgKSAgLyogKFNTQykgRW5kIG9mIFJlY2VwdGlvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1JYQlVGRiAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA3ICkgIC8qIChTU0MpIFJlY2VpdmUgQnVmZmVyIEZ1bGwgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19UWFNZTiAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTAgKSAvKiAoU1NDKSBUcmFuc21pdCBTeW5jICovDQotI2RlZmluZSBBVDkxQ19TU0NfUlhTWU4gICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDExICkgLyogKFNTQykgUmVjZWl2ZSBTeW5jICovDQotI2RlZmluZSBBVDkxQ19TU0NfVFhFTkEgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE2ICkgLyogKFNTQykgVHJhbnNtaXQgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19TU0NfUlhFTkEgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE3ICkgLyogKFNTQykgUmVjZWl2ZSBFbmFibGUgKi8NCi0vKiAtLS0tLS0tLSBTU0NfSUVSIDogKFNTQyBPZmZzZXQ6IDB4NDQpIFNTQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gU1NDX0lEUiA6IChTU0MgT2Zmc2V0OiAweDQ4KSBTU0MgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBTU0NfSU1SIDogKFNTQyBPZmZzZXQ6IDB4NGMpIFNTQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSAqLw0KKy8vIC0tLS0tLS0tIFNTQ19DUiA6IChTU0MgT2Zmc2V0OiAweDApIFNTQyBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JYRU4gICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChTU0MpIFJlY2VpdmUgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19TU0NfUlhESVMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFNTQykgUmVjZWl2ZSBEaXNhYmxlDQorI2RlZmluZSBBVDkxQ19TU0NfVFhFTiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFNTQykgVHJhbnNtaXQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19TU0NfVFhESVMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLy8gKFNTQykgVHJhbnNtaXQgRGlzYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX1NXUlNUICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTUpIC8vIChTU0MpIFNvZnR3YXJlIFJlc2V0DQorLy8gLS0tLS0tLS0gU1NDX1JDTVIgOiAoU1NDIE9mZnNldDogMHgxMCkgU1NDIFJlY2VpdmUgQ2xvY2sgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NTQ19DS1MgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICAwKSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1NTQ19DS1NfRElWICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCkgLy8gKFNTQykgRGl2aWRlZCBDbG9jaw0KKyNkZWZpbmUgCUFUOTFDX1NTQ19DS1NfVEsgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSkgLy8gKFNTQykgVEsgQ2xvY2sgc2lnbmFsDQorI2RlZmluZSAJQVQ5MUNfU1NDX0NLU19SSyAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyKSAvLyAoU1NDKSBSSyBwaW4NCisjZGVmaW5lIEFUOTFDX1NTQ19DS08gICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8ICAyKSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIE91dHB1dCBNb2RlIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1NTQ19DS09fTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgMikgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBPdXRwdXQgTW9kZTogTm9uZSBSSyBwaW46IElucHV0LW9ubHkNCisjZGVmaW5lIAlBVDkxQ19TU0NfQ0tPX0NPTlRJTk9VUyAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChTU0MpIENvbnRpbnVvdXMgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBSSyBwaW46IE91dHB1dA0KKyNkZWZpbmUgCUFUOTFDX1NTQ19DS09fREFUQV9UWCAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgMikgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBvbmx5IGR1cmluZyBkYXRhIHRyYW5zZmVycyBSSyBwaW46IE91dHB1dA0KKyNkZWZpbmUgQVQ5MUNfU1NDX0NLSSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgSW52ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19TU0NfU1RBUlQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAgOCkgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBTdGFydCBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfQ09OVElOT1VTICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgOCkgLy8gKFNTQykgQ29udGludW91cywgYXMgc29vbiBhcyB0aGUgcmVjZWl2ZXIgaXMgZW5hYmxlZCwgYW5kIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBlbmQgb2YgdHJhbnNmZXIgb2YgdGhlIHByZXZpb3VzIGRhdGEuDQorI2RlZmluZSAJQVQ5MUNfU1NDX1NUQVJUX1RYICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChTU0MpIFRyYW5zbWl0L1JlY2VpdmUgc3RhcnQNCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfTE9XX1JGICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgOCkgLy8gKFNTQykgRGV0ZWN0aW9uIG9mIGEgbG93IGxldmVsIG9uIFJGIGlucHV0DQorI2RlZmluZSAJQVQ5MUNfU1NDX1NUQVJUX0hJR0hfUkYgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDgpIC8vIChTU0MpIERldGVjdGlvbiBvZiBhIGhpZ2ggbGV2ZWwgb24gUkYgaW5wdXQNCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfRkFMTF9SRiAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NCA8PCAgOCkgLy8gKFNTQykgRGV0ZWN0aW9uIG9mIGEgZmFsbGluZyBlZGdlIG9uIFJGIGlucHV0DQorI2RlZmluZSAJQVQ5MUNfU1NDX1NUQVJUX1JJU0VfUkYgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDUgPDwgIDgpIC8vIChTU0MpIERldGVjdGlvbiBvZiBhIHJpc2luZyBlZGdlIG9uIFJGIGlucHV0DQorI2RlZmluZSAJQVQ5MUNfU1NDX1NUQVJUX0xFVkVMX1JGICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDYgPDwgIDgpIC8vIChTU0MpIERldGVjdGlvbiBvZiBhbnkgbGV2ZWwgY2hhbmdlIG9uIFJGIGlucHV0DQorI2RlZmluZSAJQVQ5MUNfU1NDX1NUQVJUX0VER0VfUkYgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgIDgpIC8vIChTU0MpIERldGVjdGlvbiBvZiBhbnkgZWRnZSBvbiBSRiBpbnB1dA0KKyNkZWZpbmUgCUFUOTFDX1NTQ19TVEFSVF8wICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg4IDw8ICA4KSAvLyAoU1NDKSBDb21wYXJlIDANCisjZGVmaW5lIEFUOTFDX1NTQ19TVFRETFkgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRiA8PCAxNikgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBTdGFydCBEZWxheQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX1BFUklPRCAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8IDI0KSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IFBlcmlvZCBEaXZpZGVyIFNlbGVjdGlvbg0KKy8vIC0tLS0tLS0tIFNTQ19SRk1SIDogKFNTQyBPZmZzZXQ6IDB4MTQpIFNTQyBSZWNlaXZlIEZyYW1lIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TU0NfREFUTEVOICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MUYgPDwgIDApIC8vIChTU0MpIERhdGEgTGVuZ3RoDQorI2RlZmluZSBBVDkxQ19TU0NfTE9PUCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKFNTQykgTG9vcCBNb2RlDQorI2RlZmluZSBBVDkxQ19TU0NfTVNCRiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKFNTQykgTW9zdCBTaWduaWZpY2FudCBCaXQgRmlyc3QNCisjZGVmaW5lIEFUOTFDX1NTQ19EQVROQiAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8ICA4KSAvLyAoU1NDKSBEYXRhIE51bWJlciBwZXIgRnJhbWUNCisjZGVmaW5lIEFUOTFDX1NTQ19GU0xFTiAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8IDE2KSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgbGVuZ3RoDQorI2RlZmluZSBBVDkxQ19TU0NfRlNPUyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAyMCkgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIE91dHB1dCBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19TU0NfRlNPU19OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDIwKSAvLyAoU1NDKSBTZWxlY3RlZCBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgU2lnbmFsOiBOb25lIFJLIHBpbiBJbnB1dC1vbmx5DQorI2RlZmluZSAJQVQ5MUNfU1NDX0ZTT1NfTkVHQVRJVkUgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMCkgLy8gKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogTmVnYXRpdmUgUHVsc2UNCisjZGVmaW5lIAlBVDkxQ19TU0NfRlNPU19QT1NJVElWRSAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDIwKSAvLyAoU1NDKSBTZWxlY3RlZCBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgU2lnbmFsOiBQb3NpdGl2ZSBQdWxzZQ0KKyNkZWZpbmUgCUFUOTFDX1NTQ19GU09TX0xPVyAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMjApIC8vIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IERyaXZlciBMb3cgZHVyaW5nIGRhdGEgdHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TU0NfRlNPU19ISUdIICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg0IDw8IDIwKSAvLyAoU1NDKSBTZWxlY3RlZCBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgU2lnbmFsOiBEcml2ZXIgSGlnaCBkdXJpbmcgZGF0YSB0cmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NTQ19GU09TX1RPR0dMRSAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDUgPDwgMjApIC8vIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IFRvZ2dsaW5nIGF0IGVhY2ggc3RhcnQgb2YgZGF0YSB0cmFuc2Zlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX0ZTRURHRSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjQpIC8vIChTU0MpIEZyYW1lIFN5bmMgRWRnZSBEZXRlY3Rpb24NCisvLyAtLS0tLS0tLSBTU0NfVENNUiA6IChTU0MgT2Zmc2V0OiAweDE4KSBTU0MgVHJhbnNtaXQgQ2xvY2sgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBTU0NfVEZNUiA6IChTU0MgT2Zmc2V0OiAweDFjKSBTU0MgVHJhbnNtaXQgRnJhbWUgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NTQ19EQVRERUYgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoU1NDKSBEYXRhIERlZmF1bHQgVmFsdWUNCisjZGVmaW5lIEFUOTFDX1NTQ19GU0RFTiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIzKSAvLyAoU1NDKSBGcmFtZSBTeW5jIERhdGEgRW5hYmxlDQorLy8gLS0tLS0tLS0gU1NDX1NSIDogKFNTQyBPZmZzZXQ6IDB4NDApIFNTQyBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TU0NfVFhSRFkgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFNTQykgVHJhbnNtaXQgUmVhZHkNCisjZGVmaW5lIEFUOTFDX1NTQ19UWEVNUFRZICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoU1NDKSBUcmFuc21pdCBFbXB0eQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX0VORFRYICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChTU0MpIEVuZCBPZiBUcmFuc21pc3Npb24NCisjZGVmaW5lIEFUOTFDX1NTQ19UWEJVRkUgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoU1NDKSBUcmFuc21pdCBCdWZmZXIgRW1wdHkNCisjZGVmaW5lIEFUOTFDX1NTQ19SWFJEWSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoU1NDKSBSZWNlaXZlIFJlYWR5DQorI2RlZmluZSBBVDkxQ19TU0NfT1ZSVU4gICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKFNTQykgUmVjZWl2ZSBPdmVycnVuDQorI2RlZmluZSBBVDkxQ19TU0NfRU5EUlggICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLy8gKFNTQykgRW5kIG9mIFJlY2VwdGlvbg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JYQlVGRiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChTU0MpIFJlY2VpdmUgQnVmZmVyIEZ1bGwNCisjZGVmaW5lIEFUOTFDX1NTQ19UWFNZTiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEwKSAvLyAoU1NDKSBUcmFuc21pdCBTeW5jDQorI2RlZmluZSBBVDkxQ19TU0NfUlhTWU4gICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMSkgLy8gKFNTQykgUmVjZWl2ZSBTeW5jDQorI2RlZmluZSBBVDkxQ19TU0NfVFhFTkEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKFNTQykgVHJhbnNtaXQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19TU0NfUlhFTkEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNykgLy8gKFNTQykgUmVjZWl2ZSBFbmFibGUNCisvLyAtLS0tLS0tLSBTU0NfSUVSIDogKFNTQyBPZmZzZXQ6IDB4NDQpIFNTQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFNTQ19JRFIgOiAoU1NDIE9mZnNldDogMHg0OCkgU1NDIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFNTQ19JTVIgOiAoU1NDIE9mZnNldDogMHg0YykgU1NDIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVHdvLXdpcmUgSW50ZXJmYWNlICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfVFdJDQotew0KLSAgICBBVDkxX1JFRyBUV0lfQ1I7ICAgICAgICAgLyogQ29udHJvbCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBUV0lfTU1SOyAgICAgICAgLyogTWFzdGVyIE1vZGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQwWyAxIF07IC8qICovDQotICAgIEFUOTFfUkVHIFRXSV9JQURSOyAgICAgICAvKiBJbnRlcm5hbCBBZGRyZXNzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFRXSV9DV0dSOyAgICAgICAvKiBDbG9jayBXYXZlZm9ybSBHZW5lcmF0b3IgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQxWyAzIF07IC8qICovDQotICAgIEFUOTFfUkVHIFRXSV9TUjsgICAgICAgICAvKiBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVFdJX0lFUjsgICAgICAgIC8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVFdJX0lEUjsgICAgICAgIC8qIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFRXSV9JTVI7ICAgICAgICAvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBUV0lfUkhSOyAgICAgICAgLyogUmVjZWl2ZSBIb2xkaW5nIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFRXSV9USFI7ICAgICAgICAvKiBUcmFuc21pdCBIb2xkaW5nIFJlZ2lzdGVyICovDQotfSBBVDkxU19UV0ksICogQVQ5MVBTX1RXSTsNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFR3by13aXJlIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1RXSSB7DQorCUFUOTFfUkVHCSBUV0lfQ1I7IAkvLyBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUV0lfTU1SOyAJLy8gTWFzdGVyIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgVFdJX0lBRFI7IAkvLyBJbnRlcm5hbCBBZGRyZXNzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUV0lfQ1dHUjsgCS8vIENsb2NrIFdhdmVmb3JtIEdlbmVyYXRvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzNdOyAJLy8gDQorCUFUOTFfUkVHCSBUV0lfU1I7IAkvLyBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRXSV9JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUV0lfSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRXSV9JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVFdJX1JIUjsgCS8vIFJlY2VpdmUgSG9sZGluZyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVFdJX1RIUjsgCS8vIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXINCit9IEFUOTFTX1RXSSwgKkFUOTFQU19UV0k7DQogDQotLyogLS0tLS0tLS0gVFdJX0NSIDogKFRXSSBPZmZzZXQ6IDB4MCkgVFdJIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9TVEFSVCAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgIC8qIChUV0kpIFNlbmQgYSBTVEFSVCBDb25kaXRpb24gKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9TVE9QICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEgKSAgIC8qIChUV0kpIFNlbmQgYSBTVE9QIENvbmRpdGlvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX01TRU4gICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMiApICAgLyogKFRXSSkgVFdJIE1hc3RlciBUcmFuc2ZlciBFbmFibGVkICovDQotI2RlZmluZSBBVDkxQ19UV0lfTVNESVMgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzICkgICAvKiAoVFdJKSBUV0kgTWFzdGVyIFRyYW5zZmVyIERpc2FibGVkICovDQotI2RlZmluZSBBVDkxQ19UV0lfU1dSU1QgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA3ICkgICAvKiAoVFdJKSBTb2Z0d2FyZSBSZXNldCAqLw0KLS8qIC0tLS0tLS0tIFRXSV9NTVIgOiAoVFdJIE9mZnNldDogMHg0KSBUV0kgTWFzdGVyIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9JQURSU1ogICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDggKSAgIC8qIChUV0kpIEludGVybmFsIERldmljZSBBZGRyZXNzIFNpemUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UV0lfSUFEUlNaX05PICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDggKSAgIC8qIChUV0kpIE5vIGludGVybmFsIGRldmljZSBhZGRyZXNzICovDQotI2RlZmluZSAgICAgQVQ5MUNfVFdJX0lBRFJTWl8xX0JZVEUgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgICAvKiAoVFdJKSBPbmUtYnl0ZSBpbnRlcm5hbCBkZXZpY2UgYWRkcmVzcyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RXSV9JQURSU1pfMl9CWVRFICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgOCApICAgLyogKFRXSSkgVHdvLWJ5dGUgaW50ZXJuYWwgZGV2aWNlIGFkZHJlc3MgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UV0lfSUFEUlNaXzNfQllURSAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDggKSAgIC8qIChUV0kpIFRocmVlLWJ5dGUgaW50ZXJuYWwgZGV2aWNlIGFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9NUkVBRCAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEyICkgIC8qIChUV0kpIE1hc3RlciBSZWFkIERpcmVjdGlvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX0RBRFIgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDdGIDw8IDE2ICkgLyogKFRXSSkgRGV2aWNlIEFkZHJlc3MgKi8NCi0vKiAtLS0tLS0tLSBUV0lfQ1dHUiA6IChUV0kgT2Zmc2V0OiAweDEwKSBUV0kgQ2xvY2sgV2F2ZWZvcm0gR2VuZXJhdG9yIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19UV0lfQ0xESVYgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RkYgPDwgMCApICAvKiAoVFdJKSBDbG9jayBMb3cgRGl2aWRlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX0NIRElWICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGIDw8IDggKSAgLyogKFRXSSkgQ2xvY2sgSGlnaCBEaXZpZGVyICovDQotI2RlZmluZSBBVDkxQ19UV0lfQ0tESVYgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NyA8PCAxNiApICAvKiAoVFdJKSBDbG9jayBEaXZpZGVyICovDQotLyogLS0tLS0tLS0gVFdJX1NSIDogKFRXSSBPZmZzZXQ6IDB4MjApIFRXSSBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9UWENPTVAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgIC8qIChUV0kpIFRyYW5zbWlzc2lvbiBDb21wbGV0ZWQgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9SWFJEWSAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEgKSAgIC8qIChUV0kpIFJlY2VpdmUgaG9sZGluZyByZWdpc3RlciBSZWFEWSAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX1RYUkRZICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMiApICAgLyogKFRXSSkgVHJhbnNtaXQgaG9sZGluZyByZWdpc3RlciBSZWFEWSAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX09WUkUgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNiApICAgLyogKFRXSSkgT3ZlcnJ1biBFcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX1VOUkUgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNyApICAgLyogKFRXSSkgVW5kZXJydW4gRXJyb3IgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9OQUNLICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDggKSAgIC8qIChUV0kpIE5vdCBBY2tub3dsZWRnZWQgKi8NCi0vKiAtLS0tLS0tLSBUV0lfSUVSIDogKFRXSSBPZmZzZXQ6IDB4MjQpIFRXSSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gVFdJX0lEUiA6IChUV0kgT2Zmc2V0OiAweDI4KSBUV0kgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBUV0lfSU1SIDogKFRXSSBPZmZzZXQ6IDB4MmMpIFRXSSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSAqLw0KKy8vIC0tLS0tLS0tIFRXSV9DUiA6IChUV0kgT2Zmc2V0OiAweDApIFRXSSBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVFdJX1NUQVJUICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChUV0kpIFNlbmQgYSBTVEFSVCBDb25kaXRpb24NCisjZGVmaW5lIEFUOTFDX1RXSV9TVE9QICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoVFdJKSBTZW5kIGEgU1RPUCBDb25kaXRpb24NCisjZGVmaW5lIEFUOTFDX1RXSV9NU0VOICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoVFdJKSBUV0kgTWFzdGVyIFRyYW5zZmVyIEVuYWJsZWQNCisjZGVmaW5lIEFUOTFDX1RXSV9NU0RJUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoVFdJKSBUV0kgTWFzdGVyIFRyYW5zZmVyIERpc2FibGVkDQorI2RlZmluZSBBVDkxQ19UV0lfU1dSU1QgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKFRXSSkgU29mdHdhcmUgUmVzZXQNCisvLyAtLS0tLS0tLSBUV0lfTU1SIDogKFRXSSBPZmZzZXQ6IDB4NCkgVFdJIE1hc3RlciBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVFdJX0lBRFJTWiAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDgpIC8vIChUV0kpIEludGVybmFsIERldmljZSBBZGRyZXNzIFNpemUNCisjZGVmaW5lIAlBVDkxQ19UV0lfSUFEUlNaX05PICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDgpIC8vIChUV0kpIE5vIGludGVybmFsIGRldmljZSBhZGRyZXNzDQorI2RlZmluZSAJQVQ5MUNfVFdJX0lBRFJTWl8xX0JZVEUgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoVFdJKSBPbmUtYnl0ZSBpbnRlcm5hbCBkZXZpY2UgYWRkcmVzcw0KKyNkZWZpbmUgCUFUOTFDX1RXSV9JQURSU1pfMl9CWVRFICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgOCkgLy8gKFRXSSkgVHdvLWJ5dGUgaW50ZXJuYWwgZGV2aWNlIGFkZHJlc3MNCisjZGVmaW5lIAlBVDkxQ19UV0lfSUFEUlNaXzNfQllURSAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDgpIC8vIChUV0kpIFRocmVlLWJ5dGUgaW50ZXJuYWwgZGV2aWNlIGFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX1RXSV9NUkVBRCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvLyAoVFdJKSBNYXN0ZXIgUmVhZCBEaXJlY3Rpb24NCisjZGVmaW5lIEFUOTFDX1RXSV9EQURSICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3RiA8PCAxNikgLy8gKFRXSSkgRGV2aWNlIEFkZHJlc3MNCisvLyAtLS0tLS0tLSBUV0lfQ1dHUiA6IChUV0kgT2Zmc2V0OiAweDEwKSBUV0kgQ2xvY2sgV2F2ZWZvcm0gR2VuZXJhdG9yIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVFdJX0NMRElWICAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8ICAwKSAvLyAoVFdJKSBDbG9jayBMb3cgRGl2aWRlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX0NIRElWICAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8ICA4KSAvLyAoVFdJKSBDbG9jayBIaWdoIERpdmlkZXINCisjZGVmaW5lIEFUOTFDX1RXSV9DS0RJViAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8IDE2KSAvLyAoVFdJKSBDbG9jayBEaXZpZGVyDQorLy8gLS0tLS0tLS0gVFdJX1NSIDogKFRXSSBPZmZzZXQ6IDB4MjApIFRXSSBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UV0lfVFhDT01QICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFRXSSkgVHJhbnNtaXNzaW9uIENvbXBsZXRlZA0KKyNkZWZpbmUgQVQ5MUNfVFdJX1JYUkRZICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChUV0kpIFJlY2VpdmUgaG9sZGluZyByZWdpc3RlciBSZWFEWQ0KKyNkZWZpbmUgQVQ5MUNfVFdJX1RYUkRZICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChUV0kpIFRyYW5zbWl0IGhvbGRpbmcgcmVnaXN0ZXIgUmVhRFkNCisjZGVmaW5lIEFUOTFDX1RXSV9PVlJFICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoVFdJKSBPdmVycnVuIEVycm9yDQorI2RlZmluZSBBVDkxQ19UV0lfVU5SRSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKFRXSSkgVW5kZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX1RXSV9OQUNLICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoVFdJKSBOb3QgQWNrbm93bGVkZ2VkDQorLy8gLS0tLS0tLS0gVFdJX0lFUiA6IChUV0kgT2Zmc2V0OiAweDI0KSBUV0kgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBUV0lfSURSIDogKFRXSSBPZmZzZXQ6IDB4MjgpIFRXSSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBUV0lfSU1SIDogKFRXSSBPZmZzZXQ6IDB4MmMpIFRXSSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFBXTUMgQ2hhbm5lbCBJbnRlcmZhY2UgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLXR5cGVkZWYgc3RydWN0IF9BVDkxU19QV01DX0NIDQotew0KLSAgICBBVDkxX1JFRyBQV01DX0NNUjsgICAgICAgICAgIC8qIENoYW5uZWwgTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQV01DX0NEVFlSOyAgICAgICAgIC8qIENoYW5uZWwgRHV0eSBDeWNsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQV01DX0NQUkRSOyAgICAgICAgIC8qIENoYW5uZWwgUGVyaW9kIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBXTUNfQ0NOVFI7ICAgICAgICAgLyogQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBXTUNfQ1VQRFI7ICAgICAgICAgLyogQ2hhbm5lbCBVcGRhdGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUFdNQ19SZXNlcnZlZFsgMyBdOyAvKiBSZXNlcnZlZCAqLw0KLX0gQVQ5MVNfUFdNQ19DSCwgKiBBVDkxUFNfUFdNQ19DSDsNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFBXTUMgQ2hhbm5lbCBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19QV01DX0NIIHsNCisJQVQ5MV9SRUcJIFBXTUNfQ01SOyAJLy8gQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQV01DX0NEVFlSOyAJLy8gQ2hhbm5lbCBEdXR5IEN5Y2xlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQV01DX0NQUkRSOyAJLy8gQ2hhbm5lbCBQZXJpb2QgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBXTUNfQ0NOVFI7IAkvLyBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBXTUNfQ1VQRFI7IAkvLyBDaGFubmVsIFVwZGF0ZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUFdNQ19SZXNlcnZlZFszXTsgCS8vIFJlc2VydmVkDQorfSBBVDkxU19QV01DX0NILCAqQVQ5MVBTX1BXTUNfQ0g7DQogDQotLyogLS0tLS0tLS0gUFdNQ19DTVIgOiAoUFdNQ19DSCBPZmZzZXQ6IDB4MCkgUFdNQyBDaGFubmVsIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ1BSRSAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGIDw8IDAgKSAgLyogKFBXTUNfQ0gpIENoYW5uZWwgUHJlLXNjYWxlciA6IFBXTUNfQ0xLeCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1BXTUNfQ1BSRV9NQ0sgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgKSAgICAgICAvKiAoUFdNQ19DSCkgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19QV01DX0NQUkVfTUNLQSAgICAoICggdW5zaWduZWQgaW50ICkgMHhCICkgICAgICAgLyogKFBXTUNfQ0gpICovDQotI2RlZmluZSAgICAgQVQ5MUNfUFdNQ19DUFJFX01DS0IgICAgKCAoIHVuc2lnbmVkIGludCApIDB4QyApICAgICAgIC8qIChQV01DX0NIKSAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DQUxHICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOCApICAvKiAoUFdNQ19DSCkgQ2hhbm5lbCBBbGlnbm1lbnQgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ1BPTCAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDkgKSAgLyogKFBXTUNfQ0gpIENoYW5uZWwgUG9sYXJpdHkgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ1BEICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEwICkgLyogKFBXTUNfQ0gpIENoYW5uZWwgVXBkYXRlIFBlcmlvZCAqLw0KLS8qIC0tLS0tLS0tIFBXTUNfQ0RUWVIgOiAoUFdNQ19DSCBPZmZzZXQ6IDB4NCkgUFdNQyBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0RUWSAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDAgKSAgLyogKFBXTUNfQ0gpIENoYW5uZWwgRHV0eSBDeWNsZSAqLw0KLS8qIC0tLS0tLS0tIFBXTUNfQ1BSRFIgOiAoUFdNQ19DSCBPZmZzZXQ6IDB4OCkgUFdNQyBDaGFubmVsIFBlcmlvZCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DUFJEICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMCApICAvKiAoUFdNQ19DSCkgQ2hhbm5lbCBQZXJpb2QgKi8NCi0vKiAtLS0tLS0tLSBQV01DX0NDTlRSIDogKFBXTUNfQ0ggT2Zmc2V0OiAweGMpIFBXTUMgQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NDTlQgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAwICkgIC8qIChQV01DX0NIKSBDaGFubmVsIENvdW50ZXIgKi8NCi0vKiAtLS0tLS0tLSBQV01DX0NVUERSIDogKFBXTUNfQ0ggT2Zmc2V0OiAweDEwKSBQV01DIENoYW5uZWwgVXBkYXRlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NVUEQgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAwICkgIC8qIChQV01DX0NIKSBDaGFubmVsIFVwZGF0ZSAqLw0KKy8vIC0tLS0tLS0tIFBXTUNfQ01SIDogKFBXTUNfQ0ggT2Zmc2V0OiAweDApIFBXTUMgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DUFJFICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgIDApIC8vIChQV01DX0NIKSBDaGFubmVsIFByZS1zY2FsZXIgOiBQV01DX0NMS3gNCisjZGVmaW5lIAlBVDkxQ19QV01DX0NQUkVfTUNLICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCkgLy8gKFBXTUNfQ0gpIA0KKyNkZWZpbmUgCUFUOTFDX1BXTUNfQ1BSRV9NQ0tBICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhCKSAvLyAoUFdNQ19DSCkgDQorI2RlZmluZSAJQVQ5MUNfUFdNQ19DUFJFX01DS0IgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweEMpIC8vIChQV01DX0NIKSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0FMRyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoUFdNQ19DSCkgQ2hhbm5lbCBBbGlnbm1lbnQNCisjZGVmaW5lIEFUOTFDX1BXTUNfQ1BPTCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvLyAoUFdNQ19DSCkgQ2hhbm5lbCBQb2xhcml0eQ0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DUEQgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChQV01DX0NIKSBDaGFubmVsIFVwZGF0ZSBQZXJpb2QNCisvLyAtLS0tLS0tLSBQV01DX0NEVFlSIDogKFBXTUNfQ0ggT2Zmc2V0OiAweDQpIFBXTUMgQ2hhbm5lbCBEdXR5IEN5Y2xlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DRFRZICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDApIC8vIChQV01DX0NIKSBDaGFubmVsIER1dHkgQ3ljbGUNCisvLyAtLS0tLS0tLSBQV01DX0NQUkRSIDogKFBXTUNfQ0ggT2Zmc2V0OiAweDgpIFBXTUMgQ2hhbm5lbCBQZXJpb2QgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QV01DX0NQUkQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgMCkgLy8gKFBXTUNfQ0gpIENoYW5uZWwgUGVyaW9kDQorLy8gLS0tLS0tLS0gUFdNQ19DQ05UUiA6IChQV01DX0NIIE9mZnNldDogMHhjKSBQV01DIENoYW5uZWwgQ291bnRlciBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0NOVCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICAwKSAvLyAoUFdNQ19DSCkgQ2hhbm5lbCBDb3VudGVyDQorLy8gLS0tLS0tLS0gUFdNQ19DVVBEUiA6IChQV01DX0NIIE9mZnNldDogMHgxMCkgUFdNQyBDaGFubmVsIFVwZGF0ZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ1VQRCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICAwKSAvLyAoUFdNQ19DSCkgQ2hhbm5lbCBVcGRhdGUNCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFB1bHNlIFdpZHRoIE1vZHVsYXRpb24gQ29udHJvbGxlciBJbnRlcmZhY2UgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLXR5cGVkZWYgc3RydWN0IF9BVDkxU19QV01DDQotew0KLSAgICBBVDkxX1JFRyBQV01DX01SOyAgICAgICAgICAgLyogUFdNQyBNb2RlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBXTUNfRU5BOyAgICAgICAgICAvKiBQV01DIEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQV01DX0RJUzsgICAgICAgICAgLyogUFdNQyBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBXTUNfU1I7ICAgICAgICAgICAvKiBQV01DIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQV01DX0lFUjsgICAgICAgICAgLyogUFdNQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBXTUNfSURSOyAgICAgICAgICAvKiBQV01DIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBXTUNfSU1SOyAgICAgICAgICAvKiBQV01DIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBXTUNfSVNSOyAgICAgICAgICAvKiBQV01DIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQwWyA1NSBdOyAgIC8qICovDQotICAgIEFUOTFfUkVHIFBXTUNfVlI7ICAgICAgICAgICAvKiBQV01DIFZlcnNpb24gUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQxWyA2NCBdOyAgIC8qICovDQotICAgIEFUOTFTX1BXTUNfQ0ggUFdNQ19DSFsgNCBdOyAvKiBQV01DIENoYW5uZWwgKi8NCi19IEFUOTFTX1BXTUMsICogQVQ5MVBTX1BXTUM7DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQdWxzZSBXaWR0aCBNb2R1bGF0aW9uIENvbnRyb2xsZXIgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfUFdNQyB7DQorCUFUOTFfUkVHCSBQV01DX01SOyAJLy8gUFdNQyBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQV01DX0VOQTsgCS8vIFBXTUMgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQV01DX0RJUzsgCS8vIFBXTUMgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUFdNQ19TUjsgCS8vIFBXTUMgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQV01DX0lFUjsgCS8vIFBXTUMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUFdNQ19JRFI7IAkvLyBQV01DIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQV01DX0lNUjsgCS8vIFBXTUMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBXTUNfSVNSOyAJLy8gUFdNQyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbNTVdOyAJLy8gDQorCUFUOTFfUkVHCSBQV01DX1ZSOyAJLy8gUFdNQyBWZXJzaW9uIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbNjRdOyAJLy8gDQorCUFUOTFTX1BXTUNfQ0gJIFBXTUNfQ0hbNF07IAkvLyBQV01DIENoYW5uZWwNCit9IEFUOTFTX1BXTUMsICpBVDkxUFNfUFdNQzsNCiANCi0vKiAtLS0tLS0tLSBQV01DX01SIDogKFBXTUMgT2Zmc2V0OiAweDApIFBXTUMgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19ESVZBICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RkYgPDwgMCApICAvKiAoUFdNQykgQ0xLQSBkaXZpZGUgZmFjdG9yLiAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19QUkVBICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RiA8PCA4ICkgICAvKiAoUFdNQykgRGl2aWRlciBJbnB1dCBDbG9jayBQcmVzY2FsZXIgQSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1BXTUNfUFJFQV9NQ0sgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCA4ICkgICAvKiAoUFdNQykgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfRElWQiAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGIDw8IDE2ICkgLyogKFBXTUMpIENMS0IgZGl2aWRlIGZhY3Rvci4gKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfUFJFQiAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEYgPDwgMjQgKSAgLyogKFBXTUMpIERpdmlkZXIgSW5wdXQgQ2xvY2sgUHJlc2NhbGVyIEIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19QV01DX1BSRUJfTUNLICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMjQgKSAgLyogKFBXTUMpICovDQotLyogLS0tLS0tLS0gUFdNQ19FTkEgOiAoUFdNQyBPZmZzZXQ6IDB4NCkgUFdNQyBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0hJRDAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgLyogKFBXTUMpIENoYW5uZWwgSUQgMCAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSElEMSAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgICAvKiAoUFdNQykgQ2hhbm5lbCBJRCAxICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NISUQyICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAgIC8qIChQV01DKSBDaGFubmVsIElEIDIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0hJRDMgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMyApICAgLyogKFBXTUMpIENoYW5uZWwgSUQgMyAqLw0KLS8qIC0tLS0tLS0tIFBXTUNfRElTIDogKFBXTUMgT2Zmc2V0OiAweDgpIFBXTUMgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFBXTUNfU1IgOiAoUFdNQyBPZmZzZXQ6IDB4YykgUFdNQyBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBQV01DX0lFUiA6IChQV01DIE9mZnNldDogMHgxMCkgUFdNQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gUFdNQ19JRFIgOiAoUFdNQyBPZmZzZXQ6IDB4MTQpIFBXTUMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBQV01DX0lNUiA6IChQV01DIE9mZnNldDogMHgxOCkgUFdNQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFBXTUNfSVNSIDogKFBXTUMgT2Zmc2V0OiAweDFjKSBQV01DIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCisvLyAtLS0tLS0tLSBQV01DX01SIDogKFBXTUMgT2Zmc2V0OiAweDApIFBXTUMgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BXTUNfRElWQSAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRiA8PCAgMCkgLy8gKFBXTUMpIENMS0EgZGl2aWRlIGZhY3Rvci4NCisjZGVmaW5lIEFUOTFDX1BXTUNfUFJFQSAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8ICA4KSAvLyAoUFdNQykgRGl2aWRlciBJbnB1dCBDbG9jayBQcmVzY2FsZXIgQQ0KKyNkZWZpbmUgCUFUOTFDX1BXTUNfUFJFQV9NQ0sgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA4KSAvLyAoUFdNQykgDQorI2RlZmluZSBBVDkxQ19QV01DX0RJVkIgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgMTYpIC8vIChQV01DKSBDTEtCIGRpdmlkZSBmYWN0b3IuDQorI2RlZmluZSBBVDkxQ19QV01DX1BSRUIgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAyNCkgLy8gKFBXTUMpIERpdmlkZXIgSW5wdXQgQ2xvY2sgUHJlc2NhbGVyIEINCisjZGVmaW5lIAlBVDkxQ19QV01DX1BSRUJfTUNLICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAyNCkgLy8gKFBXTUMpIA0KKy8vIC0tLS0tLS0tIFBXTUNfRU5BIDogKFBXTUMgT2Zmc2V0OiAweDQpIFBXTUMgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSElEMCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChQV01DKSBDaGFubmVsIElEIDANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0hJRDEgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoUFdNQykgQ2hhbm5lbCBJRCAxDQorI2RlZmluZSBBVDkxQ19QV01DX0NISUQyICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFBXTUMpIENoYW5uZWwgSUQgMg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSElEMyAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChQV01DKSBDaGFubmVsIElEIDMNCisvLyAtLS0tLS0tLSBQV01DX0RJUyA6IChQV01DIE9mZnNldDogMHg4KSBQV01DIERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUFdNQ19TUiA6IChQV01DIE9mZnNldDogMHhjKSBQV01DIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQV01DX0lFUiA6IChQV01DIE9mZnNldDogMHgxMCkgUFdNQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFBXTUNfSURSIDogKFBXTUMgT2Zmc2V0OiAweDE0KSBQV01DIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFBXTUNfSU1SIDogKFBXTUMgT2Zmc2V0OiAweDE4KSBQV01DIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFBXTUNfSVNSIDogKFBXTUMgT2Zmc2V0OiAweDFjKSBQV01DIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBVU0IgRGV2aWNlIEludGVyZmFjZSAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotdHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1VEUA0KLXsNCi0gICAgQVQ5MV9SRUcgVURQX05VTTsgICAgICAgIC8qIEZyYW1lIE51bWJlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBVRFBfR0xCU1RBVEU7ICAgLyogR2xvYmFsIFN0YXRlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFVEUF9GQUREUjsgICAgICAvKiBGdW5jdGlvbiBBZGRyZXNzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMFsgMSBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBVRFBfSUVSOyAgICAgICAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBVRFBfSURSOyAgICAgICAgLyogSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVURQX0lNUjsgICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFVEUF9JU1I7ICAgICAgICAvKiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFVEUF9JQ1I7ICAgICAgICAvKiBJbnRlcnJ1cHQgQ2xlYXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQxWyAxIF07IC8qICovDQotICAgIEFUOTFfUkVHIFVEUF9SU1RFUDsgICAgICAvKiBSZXNldCBFbmRwb2ludCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDJbIDEgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgVURQX0NTUlsgNiBdOyAgIC8qIEVuZHBvaW50IENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDNbIDIgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgVURQX0ZEUlsgNiBdOyAgIC8qIEVuZHBvaW50IEZJRk8gRGF0YSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDRbIDMgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgVURQX1RYVkM7ICAgICAgIC8qIFRyYW5zY2VpdmVyIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi19IEFUOTFTX1VEUCwgKiBBVDkxUFNfVURQOw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVVNCIERldmljZSBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19VRFAgew0KKwlBVDkxX1JFRwkgVURQX05VTTsgCS8vIEZyYW1lIE51bWJlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVURQX0dMQlNUQVRFOyAJLy8gR2xvYmFsIFN0YXRlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVRFBfRkFERFI7IAkvLyBGdW5jdGlvbiBBZGRyZXNzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbMV07IAkvLyANCisJQVQ5MV9SRUcJIFVEUF9JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVRFBfSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVEUF9JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVURQX0lTUjsgCS8vIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVEUF9JQ1I7IAkvLyBJbnRlcnJ1cHQgQ2xlYXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMVsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgVURQX1JTVEVQOyAJLy8gUmVzZXQgRW5kcG9pbnQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMlsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgVURQX0NTUls2XTsgCS8vIEVuZHBvaW50IENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQzWzJdOyAJLy8gDQorCUFUOTFfUkVHCSBVRFBfRkRSWzZdOyAJLy8gRW5kcG9pbnQgRklGTyBEYXRhIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDRbM107IAkvLyANCisJQVQ5MV9SRUcJIFVEUF9UWFZDOyAJLy8gVHJhbnNjZWl2ZXIgQ29udHJvbCBSZWdpc3Rlcg0KK30gQVQ5MVNfVURQLCAqQVQ5MVBTX1VEUDsNCiANCi0vKiAtLS0tLS0tLSBVRFBfRlJNX05VTSA6IChVRFAgT2Zmc2V0OiAweDApIFVTQiBGcmFtZSBOdW1iZXIgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9GUk1fTlVNICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDdGRiA8PCAwICkgLyogKFVEUCkgRnJhbWUgTnVtYmVyIGFzIERlZmluZWQgaW4gdGhlIFBhY2tldCBGaWVsZCBGb3JtYXRzICovDQotI2RlZmluZSBBVDkxQ19VRFBfRlJNX0VSUiAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE2ICkgIC8qIChVRFApIEZyYW1lIEVycm9yICovDQotI2RlZmluZSBBVDkxQ19VRFBfRlJNX09LICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE3ICkgIC8qIChVRFApIEZyYW1lIE9LICovDQotLyogLS0tLS0tLS0gVURQX0dMQl9TVEFURSA6IChVRFAgT2Zmc2V0OiAweDQpIFVTQiBHbG9iYWwgU3RhdGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9GQURERU4gICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgLyogKFVEUCkgRnVuY3Rpb24gQWRkcmVzcyBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9DT05GRyAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAgLyogKFVEUCkgQ29uZmlndXJlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0VTUiAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyICkgICAvKiAoVURQKSBFbmFibGUgU2VuZCBSZXN1bWUgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9SU01JTlBSICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMyApICAgLyogKFVEUCkgQSBSZXN1bWUgSGFzIEJlZW4gU2VudCB0byB0aGUgSG9zdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX1JNV1VQRSAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA0ICkgICAvKiAoVURQKSBSZW1vdGUgV2FrZSBVcCBFbmFibGUgKi8NCi0vKiAtLS0tLS0tLSBVRFBfRkFERFIgOiAoVURQIE9mZnNldDogMHg4KSBVU0IgRnVuY3Rpb24gQWRkcmVzcyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0ZBREQgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RkYgPDwgMCApICAvKiAoVURQKSBGdW5jdGlvbiBBZGRyZXNzIFZhbHVlICovDQotI2RlZmluZSBBVDkxQ19VRFBfRkVOICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDggKSAgIC8qIChVRFApIEZ1bmN0aW9uIEVuYWJsZSAqLw0KLS8qIC0tLS0tLS0tIFVEUF9JRVIgOiAoVURQIE9mZnNldDogMHgxMCkgVVNCIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUElOVDAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgLyogKFVEUCkgRW5kcG9pbnQgMCBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUElOVDEgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAgLyogKFVEUCkgRW5kcG9pbnQgMCBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUElOVDIgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMiApICAgLyogKFVEUCkgRW5kcG9pbnQgMiBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUElOVDMgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMyApICAgLyogKFVEUCkgRW5kcG9pbnQgMyBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUElOVDQgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNCApICAgLyogKFVEUCkgRW5kcG9pbnQgNCBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUElOVDUgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNSApICAgLyogKFVEUCkgRW5kcG9pbnQgNSBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9SWFNVU1AgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOCApICAgLyogKFVEUCkgVVNCIFN1c3BlbmQgSW50ZXJydXB0ICovDQotI2RlZmluZSBBVDkxQ19VRFBfUlhSU00gICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDkgKSAgIC8qIChVRFApIFVTQiBSZXN1bWUgSW50ZXJydXB0ICovDQotI2RlZmluZSBBVDkxQ19VRFBfRVhUUlNNICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEwICkgIC8qIChVRFApIFVTQiBFeHRlcm5hbCBSZXN1bWUgSW50ZXJydXB0ICovDQotI2RlZmluZSBBVDkxQ19VRFBfU09GSU5UICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDExICkgIC8qIChVRFApIFVTQiBTdGFydCBPZiBmcmFtZSBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9XQUtFVVAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTMgKSAgLyogKFVEUCkgVVNCIFJlc3VtZSBJbnRlcnJ1cHQgKi8NCi0vKiAtLS0tLS0tLSBVRFBfSURSIDogKFVEUCBPZmZzZXQ6IDB4MTQpIFVTQiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFVEUF9JTVIgOiAoVURQIE9mZnNldDogMHgxOCkgVVNCIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gVURQX0lTUiA6IChVRFAgT2Zmc2V0OiAweDFjKSBVU0IgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0VOREJVU1JFUyAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMiApIC8qIChVRFApIFVTQiBFbmQgT2YgQnVzIFJlc2V0IEludGVycnVwdCAqLw0KLS8qIC0tLS0tLS0tIFVEUF9JQ1IgOiAoVURQIE9mZnNldDogMHgyMCkgVVNCIEludGVycnVwdCBDbGVhciBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFVEUF9SU1RfRVAgOiAoVURQIE9mZnNldDogMHgyOCkgVVNCIFJlc2V0IEVuZHBvaW50IFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19VRFBfRVAwICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgICAvKiAoVURQKSBSZXNldCBFbmRwb2ludCAwICovDQotI2RlZmluZSBBVDkxQ19VRFBfRVAxICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEgKSAgICAvKiAoVURQKSBSZXNldCBFbmRwb2ludCAxICovDQotI2RlZmluZSBBVDkxQ19VRFBfRVAyICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAgICAvKiAoVURQKSBSZXNldCBFbmRwb2ludCAyICovDQotI2RlZmluZSBBVDkxQ19VRFBfRVAzICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDMgKSAgICAvKiAoVURQKSBSZXNldCBFbmRwb2ludCAzICovDQotI2RlZmluZSBBVDkxQ19VRFBfRVA0ICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDQgKSAgICAvKiAoVURQKSBSZXNldCBFbmRwb2ludCA0ICovDQotI2RlZmluZSBBVDkxQ19VRFBfRVA1ICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDUgKSAgICAvKiAoVURQKSBSZXNldCBFbmRwb2ludCA1ICovDQotLyogLS0tLS0tLS0gVURQX0NTUiA6IChVRFAgT2Zmc2V0OiAweDMwKSBVU0IgRW5kcG9pbnQgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19VRFBfVFhDT01QICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgICAvKiAoVURQKSBHZW5lcmF0ZXMgYW4gSU4gcGFja2V0IHdpdGggZGF0YSBwcmV2aW91c2x5IHdyaXR0ZW4gaW4gdGhlIERQUiAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX1JYX0RBVEFfQkswICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgICAgLyogKFVEUCkgUmVjZWl2ZSBEYXRhIEJhbmsgMCAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX1JYU0VUVVAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyICkgICAgLyogKFVEUCkgU2VuZHMgU1RBTEwgdG8gdGhlIEhvc3QgKENvbnRyb2wgZW5kcG9pbnRzKSAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0lTT0VSUk9SICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzICkgICAgLyogKFVEUCkgSXNvY2hyb25vdXMgZXJyb3IgKElzb2Nocm9ub3VzIGVuZHBvaW50cykgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9UWFBLVFJEWSAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNCApICAgIC8qIChVRFApIFRyYW5zbWl0IFBhY2tldCBSZWFkeSAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0ZPUkNFU1RBTEwgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA1ICkgICAgLyogKFVEUCkgRm9yY2UgU3RhbGwgKHVzZWQgYnkgQ29udHJvbCwgQnVsayBhbmQgSXNvY2hyb25vdXMgZW5kcG9pbnRzKS4gKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9SWF9EQVRBX0JLMSAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNiApICAgIC8qIChVRFApIFJlY2VpdmUgRGF0YSBCYW5rIDEgKG9ubHkgdXNlZCBieSBlbmRwb2ludHMgd2l0aCBwaW5nLXBvbmcgYXR0cmlidXRlcykuICovDQotI2RlZmluZSBBVDkxQ19VRFBfRElSICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDcgKSAgICAvKiAoVURQKSBUcmFuc2ZlciBEaXJlY3Rpb24gKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUFRZUEUgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDcgPDwgOCApICAgIC8qIChVRFApIEVuZHBvaW50IHR5cGUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VRFBfRVBUWVBFX0NUUkwgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgOCApICAgIC8qIChVRFApIENvbnRyb2wgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VRFBfRVBUWVBFX0lTT19PVVQgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOCApICAgIC8qIChVRFApIElzb2Nocm9ub3VzIE9VVCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VEUF9FUFRZUEVfQlVMS19PVVQgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCA4ICkgICAgLyogKFVEUCkgQnVsayBPVVQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VRFBfRVBUWVBFX0lOVF9PVVQgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgOCApICAgIC8qIChVRFApIEludGVycnVwdCBPVVQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VRFBfRVBUWVBFX0lTT19JTiAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDUgPDwgOCApICAgIC8qIChVRFApIElzb2Nocm9ub3VzIElOICovDQotI2RlZmluZSAgICAgQVQ5MUNfVURQX0VQVFlQRV9CVUxLX0lOICAgICAoICggdW5zaWduZWQgaW50ICkgMHg2IDw8IDggKSAgICAvKiAoVURQKSBCdWxrIElOICovDQotI2RlZmluZSAgICAgQVQ5MUNfVURQX0VQVFlQRV9JTlRfSU4gICAgICAoICggdW5zaWduZWQgaW50ICkgMHg3IDw8IDggKSAgICAvKiAoVURQKSBJbnRlcnJ1cHQgSU4gKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9EVEdMRSAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTEgKSAgIC8qIChVRFApIERhdGEgVG9nZ2xlICovDQotI2RlZmluZSBBVDkxQ19VRFBfRVBFRFMgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE1ICkgICAvKiAoVURQKSBFbmRwb2ludCBFbmFibGUgRGlzYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX1JYQllURUNOVCAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4N0ZGIDw8IDE2ICkgLyogKFVEUCkgTnVtYmVyIE9mIEJ5dGVzIEF2YWlsYWJsZSBpbiB0aGUgRklGTyAqLw0KLS8qIC0tLS0tLS0tIFVEUF9UWFZDIDogKFVEUCBPZmZzZXQ6IDB4NzQpIFRyYW5zY2VpdmVyIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9UWFZESVMgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOCApICAgIC8qIChVRFApICovDQotI2RlZmluZSBBVDkxQ19VRFBfUFVPTiAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDkgKSAgICAvKiAoVURQKSBQdWxsLXVwIE9OICovDQorLy8gLS0tLS0tLS0gVURQX0ZSTV9OVU0gOiAoVURQIE9mZnNldDogMHgwKSBVU0IgRnJhbWUgTnVtYmVyIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZSTV9OVU0gICAgICgodW5zaWduZWQgaW50KSAweDdGRiA8PCAgMCkgLy8gKFVEUCkgRnJhbWUgTnVtYmVyIGFzIERlZmluZWQgaW4gdGhlIFBhY2tldCBGaWVsZCBGb3JtYXRzDQorI2RlZmluZSBBVDkxQ19VRFBfRlJNX0VSUiAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKFVEUCkgRnJhbWUgRXJyb3INCisjZGVmaW5lIEFUOTFDX1VEUF9GUk1fT0sgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE3KSAvLyAoVURQKSBGcmFtZSBPSw0KKy8vIC0tLS0tLS0tIFVEUF9HTEJfU1RBVEUgOiAoVURQIE9mZnNldDogMHg0KSBVU0IgR2xvYmFsIFN0YXRlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZBRERFTiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChVRFApIEZ1bmN0aW9uIEFkZHJlc3MgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19VRFBfQ09ORkcgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFVEUCkgQ29uZmlndXJlZA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VTUiAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChVRFApIEVuYWJsZSBTZW5kIFJlc3VtZQ0KKyNkZWZpbmUgQVQ5MUNfVURQX1JTTUlOUFIgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChVRFApIEEgUmVzdW1lIEhhcyBCZWVuIFNlbnQgdG8gdGhlIEhvc3QNCisjZGVmaW5lIEFUOTFDX1VEUF9STVdVUEUgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoVURQKSBSZW1vdGUgV2FrZSBVcCBFbmFibGUNCisvLyAtLS0tLS0tLSBVRFBfRkFERFIgOiAoVURQIE9mZnNldDogMHg4KSBVU0IgRnVuY3Rpb24gQWRkcmVzcyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VEUF9GQUREICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRiA8PCAgMCkgLy8gKFVEUCkgRnVuY3Rpb24gQWRkcmVzcyBWYWx1ZQ0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZFTiAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChVRFApIEZ1bmN0aW9uIEVuYWJsZQ0KKy8vIC0tLS0tLS0tIFVEUF9JRVIgOiAoVURQIE9mZnNldDogMHgxMCkgVVNCIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VRFBfRVBJTlQwICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFVEUCkgRW5kcG9pbnQgMCBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9FUElOVDEgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoVURQKSBFbmRwb2ludCAwIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UMiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChVRFApIEVuZHBvaW50IDIgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfRVBJTlQzICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKFVEUCkgRW5kcG9pbnQgMyBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9FUElOVDQgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoVURQKSBFbmRwb2ludCA0IEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UNSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChVRFApIEVuZHBvaW50IDUgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfUlhTVVNQICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFVEUCkgVVNCIFN1c3BlbmQgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfUlhSU00gICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLy8gKFVEUCkgVVNCIFJlc3VtZSBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9FWFRSU00gICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEwKSAvLyAoVURQKSBVU0IgRXh0ZXJuYWwgUmVzdW1lIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX1NPRklOVCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTEpIC8vIChVRFApIFVTQiBTdGFydCBPZiBmcmFtZSBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9XQUtFVVAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEzKSAvLyAoVURQKSBVU0IgUmVzdW1lIEludGVycnVwdA0KKy8vIC0tLS0tLS0tIFVEUF9JRFIgOiAoVURQIE9mZnNldDogMHgxNCkgVVNCIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFVEUF9JTVIgOiAoVURQIE9mZnNldDogMHgxOCkgVVNCIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFVEUF9JU1IgOiAoVURQIE9mZnNldDogMHgxYykgVVNCIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VRFBfRU5EQlVTUkVTICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLy8gKFVEUCkgVVNCIEVuZCBPZiBCdXMgUmVzZXQgSW50ZXJydXB0DQorLy8gLS0tLS0tLS0gVURQX0lDUiA6IChVRFAgT2Zmc2V0OiAweDIwKSBVU0IgSW50ZXJydXB0IENsZWFyIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFVEUF9SU1RfRVAgOiAoVURQIE9mZnNldDogMHgyOCkgVVNCIFJlc2V0IEVuZHBvaW50IFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQMCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChVRFApIFJlc2V0IEVuZHBvaW50IDANCisjZGVmaW5lIEFUOTFDX1VEUF9FUDEgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoVURQKSBSZXNldCBFbmRwb2ludCAxDQorI2RlZmluZSBBVDkxQ19VRFBfRVAyICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFVEUCkgUmVzZXQgRW5kcG9pbnQgMg0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQMyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChVRFApIFJlc2V0IEVuZHBvaW50IDMNCisjZGVmaW5lIEFUOTFDX1VEUF9FUDQgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoVURQKSBSZXNldCBFbmRwb2ludCA0DQorI2RlZmluZSBBVDkxQ19VRFBfRVA1ICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKFVEUCkgUmVzZXQgRW5kcG9pbnQgNQ0KKy8vIC0tLS0tLS0tIFVEUF9DU1IgOiAoVURQIE9mZnNldDogMHgzMCkgVVNCIEVuZHBvaW50IENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VEUF9UWENPTVAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoVURQKSBHZW5lcmF0ZXMgYW4gSU4gcGFja2V0IHdpdGggZGF0YSBwcmV2aW91c2x5IHdyaXR0ZW4gaW4gdGhlIERQUg0KKyNkZWZpbmUgQVQ5MUNfVURQX1JYX0RBVEFfQkswICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChVRFApIFJlY2VpdmUgRGF0YSBCYW5rIDANCisjZGVmaW5lIEFUOTFDX1VEUF9SWFNFVFVQICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoVURQKSBTZW5kcyBTVEFMTCB0byB0aGUgSG9zdCAoQ29udHJvbCBlbmRwb2ludHMpDQorI2RlZmluZSBBVDkxQ19VRFBfSVNPRVJST1IgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKFVEUCkgSXNvY2hyb25vdXMgZXJyb3IgKElzb2Nocm9ub3VzIGVuZHBvaW50cykNCisjZGVmaW5lIEFUOTFDX1VEUF9UWFBLVFJEWSAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoVURQKSBUcmFuc21pdCBQYWNrZXQgUmVhZHkNCisjZGVmaW5lIEFUOTFDX1VEUF9GT1JDRVNUQUxMICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoVURQKSBGb3JjZSBTdGFsbCAodXNlZCBieSBDb250cm9sLCBCdWxrIGFuZCBJc29jaHJvbm91cyBlbmRwb2ludHMpLg0KKyNkZWZpbmUgQVQ5MUNfVURQX1JYX0RBVEFfQksxICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChVRFApIFJlY2VpdmUgRGF0YSBCYW5rIDEgKG9ubHkgdXNlZCBieSBlbmRwb2ludHMgd2l0aCBwaW5nLXBvbmcgYXR0cmlidXRlcykuDQorI2RlZmluZSBBVDkxQ19VRFBfRElSICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKFVEUCkgVHJhbnNmZXIgRGlyZWN0aW9uDQorI2RlZmluZSBBVDkxQ19VRFBfRVBUWVBFICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAgOCkgLy8gKFVEUCkgRW5kcG9pbnQgdHlwZQ0KKyNkZWZpbmUgCUFUOTFDX1VEUF9FUFRZUEVfQ1RSTCAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgOCkgLy8gKFVEUCkgQ29udHJvbA0KKyNkZWZpbmUgCUFUOTFDX1VEUF9FUFRZUEVfSVNPX09VVCAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFVEUCkgSXNvY2hyb25vdXMgT1VUDQorI2RlZmluZSAJQVQ5MUNfVURQX0VQVFlQRV9CVUxLX09VVCAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA4KSAvLyAoVURQKSBCdWxrIE9VVA0KKyNkZWZpbmUgCUFUOTFDX1VEUF9FUFRZUEVfSU5UX09VVCAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKFVEUCkgSW50ZXJydXB0IE9VVA0KKyNkZWZpbmUgCUFUOTFDX1VEUF9FUFRZUEVfSVNPX0lOICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NSA8PCAgOCkgLy8gKFVEUCkgSXNvY2hyb25vdXMgSU4NCisjZGVmaW5lIAlBVDkxQ19VRFBfRVBUWVBFX0JVTEtfSU4gICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDYgPDwgIDgpIC8vIChVRFApIEJ1bGsgSU4NCisjZGVmaW5lIAlBVDkxQ19VRFBfRVBUWVBFX0lOVF9JTiAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgIDgpIC8vIChVRFApIEludGVycnVwdCBJTg0KKyNkZWZpbmUgQVQ5MUNfVURQX0RUR0xFICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTEpIC8vIChVRFApIERhdGEgVG9nZ2xlDQorI2RlZmluZSBBVDkxQ19VRFBfRVBFRFMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNSkgLy8gKFVEUCkgRW5kcG9pbnQgRW5hYmxlIERpc2FibGUNCisjZGVmaW5lIEFUOTFDX1VEUF9SWEJZVEVDTlQgICAoKHVuc2lnbmVkIGludCkgMHg3RkYgPDwgMTYpIC8vIChVRFApIE51bWJlciBPZiBCeXRlcyBBdmFpbGFibGUgaW4gdGhlIEZJRk8NCisvLyAtLS0tLS0tLSBVRFBfVFhWQyA6IChVRFAgT2Zmc2V0OiAweDc0KSBUcmFuc2NlaXZlciBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVURQX1RYVkRJUyAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChVRFApIA0KKyNkZWZpbmUgQVQ5MUNfVURQX1BVT04gICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChVRFApIFB1bGwtdXAgT04NCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFRpbWVyIENvdW50ZXIgQ2hhbm5lbCBJbnRlcmZhY2UgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLXR5cGVkZWYgc3RydWN0IF9BVDkxU19UQw0KLXsNCi0gICAgQVQ5MV9SRUcgVENfQ0NSOyAgICAgICAgIC8qIENoYW5uZWwgQ29udHJvbCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBUQ19DTVI7ICAgICAgICAgLyogQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyIChDYXB0dXJlIE1vZGUgLyBXYXZlZm9ybSBNb2RlKSAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDBbIDIgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgVENfQ1Y7ICAgICAgICAgIC8qIENvdW50ZXIgVmFsdWUgKi8NCi0gICAgQVQ5MV9SRUcgVENfUkE7ICAgICAgICAgIC8qIFJlZ2lzdGVyIEEgKi8NCi0gICAgQVQ5MV9SRUcgVENfUkI7ICAgICAgICAgIC8qIFJlZ2lzdGVyIEIgKi8NCi0gICAgQVQ5MV9SRUcgVENfUkM7ICAgICAgICAgIC8qIFJlZ2lzdGVyIEMgKi8NCi0gICAgQVQ5MV9SRUcgVENfU1I7ICAgICAgICAgIC8qIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBUQ19JRVI7ICAgICAgICAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBUQ19JRFI7ICAgICAgICAgLyogSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVENfSU1SOyAgICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotfSBBVDkxU19UQywgKiBBVDkxUFNfVEM7DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBUaW1lciBDb3VudGVyIENoYW5uZWwgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfVEMgew0KKwlBVDkxX1JFRwkgVENfQ0NSOyAJLy8gQ2hhbm5lbCBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUQ19DTVI7IAkvLyBDaGFubmVsIE1vZGUgUmVnaXN0ZXIgKENhcHR1cmUgTW9kZSAvIFdhdmVmb3JtIE1vZGUpDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbMl07IAkvLyANCisJQVQ5MV9SRUcJIFRDX0NWOyAJLy8gQ291bnRlciBWYWx1ZQ0KKwlBVDkxX1JFRwkgVENfUkE7IAkvLyBSZWdpc3RlciBBDQorCUFUOTFfUkVHCSBUQ19SQjsgCS8vIFJlZ2lzdGVyIEINCisJQVQ5MV9SRUcJIFRDX1JDOyAJLy8gUmVnaXN0ZXIgQw0KKwlBVDkxX1JFRwkgVENfU1I7IAkvLyBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRDX0lFUjsgCS8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRDX0lEUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUQ19JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KK30gQVQ5MVNfVEMsICpBVDkxUFNfVEM7DQogDQotLyogLS0tLS0tLS0gVENfQ0NSIDogKFRDIE9mZnNldDogMHgwKSBUQyBDaGFubmVsIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0NMS0VOICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgIC8qIChUQykgQ291bnRlciBDbG9jayBFbmFibGUgQ29tbWFuZCAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQ0xLRElTICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEgKSAgLyogKFRDKSBDb3VudGVyIENsb2NrIERpc2FibGUgQ29tbWFuZCAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfU1dUUkcgICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAgLyogKFRDKSBTb2Z0d2FyZSBUcmlnZ2VyIENvbW1hbmQgKi8NCi0vKiAtLS0tLS0tLSBUQ19DTVIgOiAoVEMgT2Zmc2V0OiAweDQpIFRDIENoYW5uZWwgTW9kZSBSZWdpc3RlcjogQ2FwdHVyZSBNb2RlIC8gV2F2ZWZvcm0gTW9kZSAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQ0xLUyAgICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg3IDw8IDAgKSAgLyogKFRDKSBDbG9jayBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjFfQ0xPQ0sgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCApICAgICAgIC8qIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjFfQ0xPQ0sgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjJfQ0xPQ0sgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSApICAgICAgIC8qIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjJfQ0xPQ0sgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjNfQ0xPQ0sgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiApICAgICAgIC8qIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjNfQ0xPQ0sgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjRfQ0xPQ0sgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyApICAgICAgIC8qIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjRfQ0xPQ0sgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjVfQ0xPQ0sgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NCApICAgICAgIC8qIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjVfQ0xPQ0sgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19DTEtTX1hDMCAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NSApICAgICAgIC8qIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFhDMCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0NMS1NfWEMxICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg2ICkgICAgICAgLyogKFRDKSBDbG9jayBzZWxlY3RlZDogWEMxICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQ0xLU19YQzIgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDcgKSAgICAgICAvKiAoVEMpIENsb2NrIHNlbGVjdGVkOiBYQzIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0NMS0kgICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzICkgIC8qIChUQykgQ2xvY2sgSW52ZXJ0ICovDQotI2RlZmluZSBBVDkxQ19UQ19CVVJTVCAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgNCApICAvKiAoVEMpIEJ1cnN0IFNpZ25hbCBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19CVVJTVF9OT05FICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCA0ICkgIC8qIChUQykgVGhlIGNsb2NrIGlzIG5vdCBnYXRlZCBieSBhbiBleHRlcm5hbCBzaWduYWwgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19CVVJTVF9YQzAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA0ICkgIC8qIChUQykgWEMwIGlzIEFORGVkIHdpdGggdGhlIHNlbGVjdGVkIGNsb2NrICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQlVSU1RfWEMxICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgNCApICAvKiAoVEMpIFhDMSBpcyBBTkRlZCB3aXRoIHRoZSBzZWxlY3RlZCBjbG9jayAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JVUlNUX1hDMiAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDQgKSAgLyogKFRDKSBYQzIgaXMgQU5EZWQgd2l0aCB0aGUgc2VsZWN0ZWQgY2xvY2sgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0NQQ1NUT1AgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA2ICkgIC8qIChUQykgQ291bnRlciBDbG9jayBTdG9wcGVkIHdpdGggUkMgQ29tcGFyZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfTERCU1RPUCAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDYgKSAgLyogKFRDKSBDb3VudGVyIENsb2NrIFN0b3BwZWQgd2l0aCBSQiBMb2FkaW5nICovDQotI2RlZmluZSBBVDkxQ19UQ19DUENESVMgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNyApICAvKiAoVEMpIENvdW50ZXIgQ2xvY2sgRGlzYWJsZSB3aXRoIFJDIENvbXBhcmUgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0xEQkRJUyAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA3ICkgIC8qIChUQykgQ291bnRlciBDbG9jayBEaXNhYmxlZCB3aXRoIFJCIExvYWRpbmcgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0VUUkdFREcgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCA4ICkgIC8qIChUQykgRXh0ZXJuYWwgVHJpZ2dlciBFZGdlIFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0VUUkdFREdfTk9ORSAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDggKSAgLyogKFRDKSBFZGdlOiBOb25lICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfRVRSR0VER19SSVNJTkcgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOCApICAvKiAoVEMpIEVkZ2U6IHJpc2luZyBlZGdlICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfRVRSR0VER19GQUxMSU5HICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgOCApICAvKiAoVEMpIEVkZ2U6IGZhbGxpbmcgZWRnZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0VUUkdFREdfQk9USCAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDggKSAgLyogKFRDKSBFZGdlOiBlYWNoIGVkZ2UgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0VFVlRFREcgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCA4ICkgIC8qIChUQykgRXh0ZXJuYWwgRXZlbnQgRWRnZSBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19FRVZURURHX05PTkUgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCA4ICkgIC8qIChUQykgRWRnZTogTm9uZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0VFVlRFREdfUklTSU5HICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDggKSAgLyogKFRDKSBFZGdlOiByaXNpbmcgZWRnZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0VFVlRFREdfRkFMTElORyAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDggKSAgLyogKFRDKSBFZGdlOiBmYWxsaW5nIGVkZ2UgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19FRVZURURHX0JPVEggICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCA4ICkgIC8qIChUQykgRWRnZTogZWFjaCBlZGdlICovDQotI2RlZmluZSBBVDkxQ19UQ19FRVZUICAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTAgKSAvKiAoVEMpIEV4dGVybmFsIEV2ZW50ICBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19FRVZUX1RJT0IgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAxMCApIC8qIChUQykgU2lnbmFsIHNlbGVjdGVkIGFzIGV4dGVybmFsIGV2ZW50OiBUSU9CIFRJT0IgZGlyZWN0aW9uOiBpbnB1dCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0VFVlRfWEMwICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEwICkgLyogKFRDKSBTaWduYWwgc2VsZWN0ZWQgYXMgZXh0ZXJuYWwgZXZlbnQ6IFhDMCBUSU9CIGRpcmVjdGlvbjogb3V0cHV0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfRUVWVF9YQzEgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgMTAgKSAvKiAoVEMpIFNpZ25hbCBzZWxlY3RlZCBhcyBleHRlcm5hbCBldmVudDogWEMxIFRJT0IgZGlyZWN0aW9uOiBvdXRwdXQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19FRVZUX1hDMiAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAxMCApIC8qIChUQykgU2lnbmFsIHNlbGVjdGVkIGFzIGV4dGVybmFsIGV2ZW50OiBYQzIgVElPQiBkaXJlY3Rpb246IG91dHB1dCAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQUJFVFJHICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEwICkgLyogKFRDKSBUSU9BIG9yIFRJT0IgRXh0ZXJuYWwgVHJpZ2dlciBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0VORVRSRyAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMiApIC8qIChUQykgRXh0ZXJuYWwgRXZlbnQgVHJpZ2dlciBlbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX1dBVkVTRUwgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAxMyApIC8qIChUQykgV2F2ZWZvcm0gIFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX1dBVkVTRUxfVVAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDEzICkgLyogKFRDKSBVUCBtb2RlIHdpdGhvdXQgYXRvbWF0aWMgdHJpZ2dlciBvbiBSQyBDb21wYXJlICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfV0FWRVNFTF9VUERPV04gICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTMgKSAvKiAoVEMpIFVQRE9XTiBtb2RlIHdpdGhvdXQgYXV0b21hdGljIHRyaWdnZXIgb24gUkMgQ29tcGFyZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX1dBVkVTRUxfVVBfQVVUTyAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDEzICkgLyogKFRDKSBVUCBtb2RlIHdpdGggYXV0b21hdGljIHRyaWdnZXIgb24gUkMgQ29tcGFyZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX1dBVkVTRUxfVVBET1dOX0FVVE8gICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDEzICkgLyogKFRDKSBVUERPV04gbW9kZSB3aXRoIGF1dG9tYXRpYyB0cmlnZ2VyIG9uIFJDIENvbXBhcmUgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0NQQ1RSRyAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNCApIC8qIChUQykgUkMgQ29tcGFyZSBUcmlnZ2VyIEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfV0FWRSAgICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE1ICkgLyogKFRDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQUNQQSAgICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDE2ICkgLyogKFRDKSBSQSBDb21wYXJlIEVmZmVjdCBvbiBUSU9BICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQUNQQV9OT05FICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMTYgKSAvKiAoVEMpIEVmZmVjdDogbm9uZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0FDUEFfU0VUICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE2ICkgLyogKFRDKSBFZmZlY3Q6IHNldCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0FDUEFfQ0xFQVIgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDE2ICkgLyogKFRDKSBFZmZlY3Q6IGNsZWFyICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQUNQQV9UT0dHTEUgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTYgKSAvKiAoVEMpIEVmZmVjdDogdG9nZ2xlICovDQotI2RlZmluZSBBVDkxQ19UQ19MRFJBICAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTYgKSAvKiAoVEMpIFJBIExvYWRpbmcgU2VsZWN0aW9uICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfTERSQV9OT05FICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMTYgKSAvKiAoVEMpIEVkZ2U6IE5vbmUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19MRFJBX1JJU0lORyAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNiApIC8qIChUQykgRWRnZTogcmlzaW5nIGVkZ2Ugb2YgVElPQSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0xEUkFfRkFMTElORyAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDE2ICkgLyogKFRDKSBFZGdlOiBmYWxsaW5nIGVkZ2Ugb2YgVElPQSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0xEUkFfQk9USCAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDE2ICkgLyogKFRDKSBFZGdlOiBlYWNoIGVkZ2Ugb2YgVElPQSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQUNQQyAgICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDE4ICkgLyogKFRDKSBSQyBDb21wYXJlIEVmZmVjdCBvbiBUSU9BICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQUNQQ19OT05FICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMTggKSAvKiAoVEMpIEVmZmVjdDogbm9uZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0FDUENfU0VUICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE4ICkgLyogKFRDKSBFZmZlY3Q6IHNldCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0FDUENfQ0xFQVIgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDE4ICkgLyogKFRDKSBFZmZlY3Q6IGNsZWFyICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQUNQQ19UT0dHTEUgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTggKSAvKiAoVEMpIEVmZmVjdDogdG9nZ2xlICovDQotI2RlZmluZSBBVDkxQ19UQ19MRFJCICAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTggKSAvKiAoVEMpIFJCIExvYWRpbmcgU2VsZWN0aW9uICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfTERSQl9OT05FICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMTggKSAvKiAoVEMpIEVkZ2U6IE5vbmUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19MRFJCX1JJU0lORyAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxOCApIC8qIChUQykgRWRnZTogcmlzaW5nIGVkZ2Ugb2YgVElPQSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0xEUkJfRkFMTElORyAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDE4ICkgLyogKFRDKSBFZGdlOiBmYWxsaW5nIGVkZ2Ugb2YgVElPQSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0xEUkJfQk9USCAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDE4ICkgLyogKFRDKSBFZGdlOiBlYWNoIGVkZ2Ugb2YgVElPQSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQUVFVlQgICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDIwICkgLyogKFRDKSBFeHRlcm5hbCBFdmVudCBFZmZlY3Qgb24gVElPQSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0FFRVZUX05PTkUgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDIwICkgLyogKFRDKSBFZmZlY3Q6IG5vbmUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19BRUVWVF9TRVQgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyMCApIC8qIChUQykgRWZmZWN0OiBzZXQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19BRUVWVF9DTEVBUiAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCAyMCApIC8qIChUQykgRWZmZWN0OiBjbGVhciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0FFRVZUX1RPR0dMRSAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDIwICkgLyogKFRDKSBFZmZlY3Q6IHRvZ2dsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQVNXVFJHICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDIyICkgLyogKFRDKSBTb2Z0d2FyZSBUcmlnZ2VyIEVmZmVjdCBvbiBUSU9BICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQVNXVFJHX05PTkUgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMjIgKSAvKiAoVEMpIEVmZmVjdDogbm9uZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0FTV1RSR19TRVQgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIyICkgLyogKFRDKSBFZmZlY3Q6IHNldCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0FTV1RSR19DTEVBUiAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDIyICkgLyogKFRDKSBFZmZlY3Q6IGNsZWFyICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQVNXVFJHX1RPR0dMRSAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMjIgKSAvKiAoVEMpIEVmZmVjdDogdG9nZ2xlICovDQotI2RlZmluZSBBVDkxQ19UQ19CQ1BCICAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMjQgKSAvKiAoVEMpIFJCIENvbXBhcmUgRWZmZWN0IG9uIFRJT0IgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19CQ1BCX05PTkUgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAyNCApIC8qIChUQykgRWZmZWN0OiBub25lICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQkNQQl9TRVQgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjQgKSAvKiAoVEMpIEVmZmVjdDogc2V0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQkNQQl9DTEVBUiAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgMjQgKSAvKiAoVEMpIEVmZmVjdDogY2xlYXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19CQ1BCX1RPR0dMRSAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAyNCApIC8qIChUQykgRWZmZWN0OiB0b2dnbGUgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0JDUEMgICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAyNiApIC8qIChUQykgUkMgQ29tcGFyZSBFZmZlY3Qgb24gVElPQiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JDUENfTk9ORSAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDI2ICkgLyogKFRDKSBFZmZlY3Q6IG5vbmUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19CQ1BDX1NFVCAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyNiApIC8qIChUQykgRWZmZWN0OiBzZXQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19CQ1BDX0NMRUFSICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCAyNiApIC8qIChUQykgRWZmZWN0OiBjbGVhciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JDUENfVE9HR0xFICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDI2ICkgLyogKFRDKSBFZmZlY3Q6IHRvZ2dsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQkVFVlQgICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDI4ICkgLyogKFRDKSBFeHRlcm5hbCBFdmVudCBFZmZlY3Qgb24gVElPQiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JFRVZUX05PTkUgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDI4ICkgLyogKFRDKSBFZmZlY3Q6IG5vbmUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19CRUVWVF9TRVQgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyOCApIC8qIChUQykgRWZmZWN0OiBzZXQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19CRUVWVF9DTEVBUiAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCAyOCApIC8qIChUQykgRWZmZWN0OiBjbGVhciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JFRVZUX1RPR0dMRSAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDI4ICkgLyogKFRDKSBFZmZlY3Q6IHRvZ2dsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQlNXVFJHICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDMwICkgLyogKFRDKSBTb2Z0d2FyZSBUcmlnZ2VyIEVmZmVjdCBvbiBUSU9CICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQlNXVFJHX05PTkUgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMzAgKSAvKiAoVEMpIEVmZmVjdDogbm9uZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JTV1RSR19TRVQgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDMwICkgLyogKFRDKSBFZmZlY3Q6IHNldCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JTV1RSR19DTEVBUiAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDMwICkgLyogKFRDKSBFZmZlY3Q6IGNsZWFyICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQlNXVFJHX1RPR0dMRSAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMzAgKSAvKiAoVEMpIEVmZmVjdDogdG9nZ2xlICovDQotLyogLS0tLS0tLS0gVENfU1IgOiAoVEMgT2Zmc2V0OiAweDIwKSBUQyBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQ09WRlMgICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgLyogKFRDKSBDb3VudGVyIE92ZXJmbG93ICovDQotI2RlZmluZSBBVDkxQ19UQ19MT1ZSUyAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAvKiAoVEMpIExvYWQgT3ZlcnJ1biAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQ1BBUyAgICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAgLyogKFRDKSBSQSBDb21wYXJlICovDQotI2RlZmluZSBBVDkxQ19UQ19DUEJTICAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMyApICAvKiAoVEMpIFJCIENvbXBhcmUgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0NQQ1MgICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA0ICkgIC8qIChUQykgUkMgQ29tcGFyZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfTERSQVMgICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDUgKSAgLyogKFRDKSBSQSBMb2FkaW5nICovDQotI2RlZmluZSBBVDkxQ19UQ19MRFJCUyAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNiApICAvKiAoVEMpIFJCIExvYWRpbmcgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0VUUkdTICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA3ICkgIC8qIChUQykgRXh0ZXJuYWwgVHJpZ2dlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQ0xLU1RBICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE2ICkgLyogKFRDKSBDbG9jayBFbmFibGluZyAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfTVRJT0EgICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE3ICkgLyogKFRDKSBUSU9BIE1pcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfTVRJT0IgICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE4ICkgLyogKFRDKSBUSU9BIE1pcnJvciAqLw0KLS8qIC0tLS0tLS0tIFRDX0lFUiA6IChUQyBPZmZzZXQ6IDB4MjQpIFRDIENoYW5uZWwgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFRDX0lEUiA6IChUQyBPZmZzZXQ6IDB4MjgpIFRDIENoYW5uZWwgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBUQ19JTVIgOiAoVEMgT2Zmc2V0OiAweDJjKSBUQyBDaGFubmVsIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tICovDQorLy8gLS0tLS0tLS0gVENfQ0NSIDogKFRDIE9mZnNldDogMHgwKSBUQyBDaGFubmVsIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UQ19DTEtFTiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFRDKSBDb3VudGVyIENsb2NrIEVuYWJsZSBDb21tYW5kDQorI2RlZmluZSBBVDkxQ19UQ19DTEtESVMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFRDKSBDb3VudGVyIENsb2NrIERpc2FibGUgQ29tbWFuZA0KKyNkZWZpbmUgQVQ5MUNfVENfU1dUUkcgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChUQykgU29mdHdhcmUgVHJpZ2dlciBDb21tYW5kDQorLy8gLS0tLS0tLS0gVENfQ01SIDogKFRDIE9mZnNldDogMHg0KSBUQyBDaGFubmVsIE1vZGUgUmVnaXN0ZXI6IENhcHR1cmUgTW9kZSAvIFdhdmVmb3JtIE1vZGUgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UQ19DTEtTICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAgMCkgLy8gKFRDKSBDbG9jayBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjFfQ0xPQ0sgICAgICgodW5zaWduZWQgaW50KSAweDApIC8vIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjFfQ0xPQ0sNCisjZGVmaW5lIAlBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjJfQ0xPQ0sgICAgICgodW5zaWduZWQgaW50KSAweDEpIC8vIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjJfQ0xPQ0sNCisjZGVmaW5lIAlBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjNfQ0xPQ0sgICAgICgodW5zaWduZWQgaW50KSAweDIpIC8vIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjNfQ0xPQ0sNCisjZGVmaW5lIAlBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjRfQ0xPQ0sgICAgICgodW5zaWduZWQgaW50KSAweDMpIC8vIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjRfQ0xPQ0sNCisjZGVmaW5lIAlBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjVfQ0xPQ0sgICAgICgodW5zaWduZWQgaW50KSAweDQpIC8vIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjVfQ0xPQ0sNCisjZGVmaW5lIAlBVDkxQ19UQ19DTEtTX1hDMCAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDUpIC8vIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFhDMA0KKyNkZWZpbmUgCUFUOTFDX1RDX0NMS1NfWEMxICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NikgLy8gKFRDKSBDbG9jayBzZWxlY3RlZDogWEMxDQorI2RlZmluZSAJQVQ5MUNfVENfQ0xLU19YQzIgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3KSAvLyAoVEMpIENsb2NrIHNlbGVjdGVkOiBYQzINCisjZGVmaW5lIEFUOTFDX1RDX0NMS0kgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoVEMpIENsb2NrIEludmVydA0KKyNkZWZpbmUgQVQ5MUNfVENfQlVSU1QgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDQpIC8vIChUQykgQnVyc3QgU2lnbmFsIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDX0JVUlNUX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDQpIC8vIChUQykgVGhlIGNsb2NrIGlzIG5vdCBnYXRlZCBieSBhbiBleHRlcm5hbCBzaWduYWwNCisjZGVmaW5lIAlBVDkxQ19UQ19CVVJTVF9YQzAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoVEMpIFhDMCBpcyBBTkRlZCB3aXRoIHRoZSBzZWxlY3RlZCBjbG9jaw0KKyNkZWZpbmUgCUFUOTFDX1RDX0JVUlNUX1hDMSAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDQpIC8vIChUQykgWEMxIGlzIEFORGVkIHdpdGggdGhlIHNlbGVjdGVkIGNsb2NrDQorI2RlZmluZSAJQVQ5MUNfVENfQlVSU1RfWEMyICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgNCkgLy8gKFRDKSBYQzIgaXMgQU5EZWQgd2l0aCB0aGUgc2VsZWN0ZWQgY2xvY2sNCisjZGVmaW5lIEFUOTFDX1RDX0NQQ1NUT1AgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoVEMpIENvdW50ZXIgQ2xvY2sgU3RvcHBlZCB3aXRoIFJDIENvbXBhcmUNCisjZGVmaW5lIEFUOTFDX1RDX0xEQlNUT1AgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoVEMpIENvdW50ZXIgQ2xvY2sgU3RvcHBlZCB3aXRoIFJCIExvYWRpbmcNCisjZGVmaW5lIEFUOTFDX1RDX0NQQ0RJUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoVEMpIENvdW50ZXIgQ2xvY2sgRGlzYWJsZSB3aXRoIFJDIENvbXBhcmUNCisjZGVmaW5lIEFUOTFDX1RDX0xEQkRJUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoVEMpIENvdW50ZXIgQ2xvY2sgRGlzYWJsZWQgd2l0aCBSQiBMb2FkaW5nDQorI2RlZmluZSBBVDkxQ19UQ19FVFJHRURHICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKFRDKSBFeHRlcm5hbCBUcmlnZ2VyIEVkZ2UgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfVENfRVRSR0VER19OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA4KSAvLyAoVEMpIEVkZ2U6IE5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19FVFJHRURHX1JJU0lORyAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChUQykgRWRnZTogcmlzaW5nIGVkZ2UNCisjZGVmaW5lIAlBVDkxQ19UQ19FVFJHRURHX0ZBTExJTkcgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDgpIC8vIChUQykgRWRnZTogZmFsbGluZyBlZGdlDQorI2RlZmluZSAJQVQ5MUNfVENfRVRSR0VER19CT1RIICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA4KSAvLyAoVEMpIEVkZ2U6IGVhY2ggZWRnZQ0KKyNkZWZpbmUgQVQ5MUNfVENfRUVWVEVERyAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDgpIC8vIChUQykgRXh0ZXJuYWwgRXZlbnQgRWRnZSBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ19FRVZURURHX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDgpIC8vIChUQykgRWRnZTogTm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0VFVlRFREdfUklTSU5HICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFRDKSBFZGdlOiByaXNpbmcgZWRnZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0VFVlRFREdfRkFMTElORyAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgOCkgLy8gKFRDKSBFZGdlOiBmYWxsaW5nIGVkZ2UNCisjZGVmaW5lIAlBVDkxQ19UQ19FRVZURURHX0JPVEggICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDgpIC8vIChUQykgRWRnZTogZWFjaCBlZGdlDQorI2RlZmluZSBBVDkxQ19UQ19FRVZUICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxMCkgLy8gKFRDKSBFeHRlcm5hbCBFdmVudCAgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfVENfRUVWVF9USU9CICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDEwKSAvLyAoVEMpIFNpZ25hbCBzZWxlY3RlZCBhcyBleHRlcm5hbCBldmVudDogVElPQiBUSU9CIGRpcmVjdGlvbjogaW5wdXQNCisjZGVmaW5lIAlBVDkxQ19UQ19FRVZUX1hDMCAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChUQykgU2lnbmFsIHNlbGVjdGVkIGFzIGV4dGVybmFsIGV2ZW50OiBYQzAgVElPQiBkaXJlY3Rpb246IG91dHB1dA0KKyNkZWZpbmUgCUFUOTFDX1RDX0VFVlRfWEMxICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxMCkgLy8gKFRDKSBTaWduYWwgc2VsZWN0ZWQgYXMgZXh0ZXJuYWwgZXZlbnQ6IFhDMSBUSU9CIGRpcmVjdGlvbjogb3V0cHV0DQorI2RlZmluZSAJQVQ5MUNfVENfRUVWVF9YQzIgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDEwKSAvLyAoVEMpIFNpZ25hbCBzZWxlY3RlZCBhcyBleHRlcm5hbCBldmVudDogWEMyIFRJT0IgZGlyZWN0aW9uOiBvdXRwdXQNCisjZGVmaW5lIEFUOTFDX1RDX0FCRVRSRyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEwKSAvLyAoVEMpIFRJT0Egb3IgVElPQiBFeHRlcm5hbCBUcmlnZ2VyIFNlbGVjdGlvbg0KKyNkZWZpbmUgQVQ5MUNfVENfRU5FVFJHICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8vIChUQykgRXh0ZXJuYWwgRXZlbnQgVHJpZ2dlciBlbmFibGUNCisjZGVmaW5lIEFUOTFDX1RDX1dBVkVTRUwgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDEzKSAvLyAoVEMpIFdhdmVmb3JtICBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ19XQVZFU0VMX1VQICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMTMpIC8vIChUQykgVVAgbW9kZSB3aXRob3V0IGF0b21hdGljIHRyaWdnZXIgb24gUkMgQ29tcGFyZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX1dBVkVTRUxfVVBET1dOICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMykgLy8gKFRDKSBVUERPV04gbW9kZSB3aXRob3V0IGF1dG9tYXRpYyB0cmlnZ2VyIG9uIFJDIENvbXBhcmUNCisjZGVmaW5lIAlBVDkxQ19UQ19XQVZFU0VMX1VQX0FVVE8gICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMTMpIC8vIChUQykgVVAgbW9kZSB3aXRoIGF1dG9tYXRpYyB0cmlnZ2VyIG9uIFJDIENvbXBhcmUNCisjZGVmaW5lIAlBVDkxQ19UQ19XQVZFU0VMX1VQRE9XTl9BVVRPICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTMpIC8vIChUQykgVVBET1dOIG1vZGUgd2l0aCBhdXRvbWF0aWMgdHJpZ2dlciBvbiBSQyBDb21wYXJlDQorI2RlZmluZSBBVDkxQ19UQ19DUENUUkcgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNCkgLy8gKFRDKSBSQyBDb21wYXJlIFRyaWdnZXIgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19UQ19XQVZFICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNSkgLy8gKFRDKSANCisjZGVmaW5lIEFUOTFDX1RDX0FDUEEgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE2KSAvLyAoVEMpIFJBIENvbXBhcmUgRWZmZWN0IG9uIFRJT0ENCisjZGVmaW5lIAlBVDkxQ19UQ19BQ1BBX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMTYpIC8vIChUQykgRWZmZWN0OiBub25lDQorI2RlZmluZSAJQVQ5MUNfVENfQUNQQV9TRVQgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoVEMpIEVmZmVjdDogc2V0DQorI2RlZmluZSAJQVQ5MUNfVENfQUNQQV9DTEVBUiAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDE2KSAvLyAoVEMpIEVmZmVjdDogY2xlYXINCisjZGVmaW5lIAlBVDkxQ19UQ19BQ1BBX1RPR0dMRSAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTYpIC8vIChUQykgRWZmZWN0OiB0b2dnbGUNCisjZGVmaW5lIEFUOTFDX1RDX0xEUkEgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE2KSAvLyAoVEMpIFJBIExvYWRpbmcgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfVENfTERSQV9OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDE2KSAvLyAoVEMpIEVkZ2U6IE5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19MRFJBX1JJU0lORyAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChUQykgRWRnZTogcmlzaW5nIGVkZ2Ugb2YgVElPQQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0xEUkFfRkFMTElORyAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxNikgLy8gKFRDKSBFZGdlOiBmYWxsaW5nIGVkZ2Ugb2YgVElPQQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0xEUkFfQk9USCAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxNikgLy8gKFRDKSBFZGdlOiBlYWNoIGVkZ2Ugb2YgVElPQQ0KKyNkZWZpbmUgQVQ5MUNfVENfQUNQQyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTgpIC8vIChUQykgUkMgQ29tcGFyZSBFZmZlY3Qgb24gVElPQQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0FDUENfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAxOCkgLy8gKFRDKSBFZmZlY3Q6IG5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19BQ1BDX1NFVCAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTgpIC8vIChUQykgRWZmZWN0OiBzZXQNCisjZGVmaW5lIAlBVDkxQ19UQ19BQ1BDX0NMRUFSICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMTgpIC8vIChUQykgRWZmZWN0OiBjbGVhcg0KKyNkZWZpbmUgCUFUOTFDX1RDX0FDUENfVE9HR0xFICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxOCkgLy8gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KKyNkZWZpbmUgQVQ5MUNfVENfTERSQiAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTgpIC8vIChUQykgUkIgTG9hZGluZyBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ19MRFJCX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMTgpIC8vIChUQykgRWRnZTogTm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0xEUkJfUklTSU5HICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOCkgLy8gKFRDKSBFZGdlOiByaXNpbmcgZWRnZSBvZiBUSU9BDQorI2RlZmluZSAJQVQ5MUNfVENfTERSQl9GQUxMSU5HICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDE4KSAvLyAoVEMpIEVkZ2U6IGZhbGxpbmcgZWRnZSBvZiBUSU9BDQorI2RlZmluZSAJQVQ5MUNfVENfTERSQl9CT1RIICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE4KSAvLyAoVEMpIEVkZ2U6IGVhY2ggZWRnZSBvZiBUSU9BDQorI2RlZmluZSBBVDkxQ19UQ19BRUVWVCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyMCkgLy8gKFRDKSBFeHRlcm5hbCBFdmVudCBFZmZlY3Qgb24gVElPQQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0FFRVZUX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMjApIC8vIChUQykgRWZmZWN0OiBub25lDQorI2RlZmluZSAJQVQ5MUNfVENfQUVFVlRfU0VUICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMCkgLy8gKFRDKSBFZmZlY3Q6IHNldA0KKyNkZWZpbmUgCUFUOTFDX1RDX0FFRVZUX0NMRUFSICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMjApIC8vIChUQykgRWZmZWN0OiBjbGVhcg0KKyNkZWZpbmUgCUFUOTFDX1RDX0FFRVZUX1RPR0dMRSAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMjApIC8vIChUQykgRWZmZWN0OiB0b2dnbGUNCisjZGVmaW5lIEFUOTFDX1RDX0FTV1RSRyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDIyKSAvLyAoVEMpIFNvZnR3YXJlIFRyaWdnZXIgRWZmZWN0IG9uIFRJT0ENCisjZGVmaW5lIAlBVDkxQ19UQ19BU1dUUkdfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAyMikgLy8gKFRDKSBFZmZlY3Q6IG5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19BU1dUUkdfU0VUICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMikgLy8gKFRDKSBFZmZlY3Q6IHNldA0KKyNkZWZpbmUgCUFUOTFDX1RDX0FTV1RSR19DTEVBUiAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDIyKSAvLyAoVEMpIEVmZmVjdDogY2xlYXINCisjZGVmaW5lIAlBVDkxQ19UQ19BU1dUUkdfVE9HR0xFICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyMikgLy8gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KKyNkZWZpbmUgQVQ5MUNfVENfQkNQQiAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMjQpIC8vIChUQykgUkIgQ29tcGFyZSBFZmZlY3Qgb24gVElPQg0KKyNkZWZpbmUgCUFUOTFDX1RDX0JDUEJfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAyNCkgLy8gKFRDKSBFZmZlY3Q6IG5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19CQ1BCX1NFVCAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjQpIC8vIChUQykgRWZmZWN0OiBzZXQNCisjZGVmaW5lIAlBVDkxQ19UQ19CQ1BCX0NMRUFSICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMjQpIC8vIChUQykgRWZmZWN0OiBjbGVhcg0KKyNkZWZpbmUgCUFUOTFDX1RDX0JDUEJfVE9HR0xFICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyNCkgLy8gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KKyNkZWZpbmUgQVQ5MUNfVENfQkNQQyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMjYpIC8vIChUQykgUkMgQ29tcGFyZSBFZmZlY3Qgb24gVElPQg0KKyNkZWZpbmUgCUFUOTFDX1RDX0JDUENfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAyNikgLy8gKFRDKSBFZmZlY3Q6IG5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19CQ1BDX1NFVCAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjYpIC8vIChUQykgRWZmZWN0OiBzZXQNCisjZGVmaW5lIAlBVDkxQ19UQ19CQ1BDX0NMRUFSICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMjYpIC8vIChUQykgRWZmZWN0OiBjbGVhcg0KKyNkZWZpbmUgCUFUOTFDX1RDX0JDUENfVE9HR0xFICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyNikgLy8gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KKyNkZWZpbmUgQVQ5MUNfVENfQkVFVlQgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMjgpIC8vIChUQykgRXh0ZXJuYWwgRXZlbnQgRWZmZWN0IG9uIFRJT0INCisjZGVmaW5lIAlBVDkxQ19UQ19CRUVWVF9OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDI4KSAvLyAoVEMpIEVmZmVjdDogbm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0JFRVZUX1NFVCAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjgpIC8vIChUQykgRWZmZWN0OiBzZXQNCisjZGVmaW5lIAlBVDkxQ19UQ19CRUVWVF9DTEVBUiAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDI4KSAvLyAoVEMpIEVmZmVjdDogY2xlYXINCisjZGVmaW5lIAlBVDkxQ19UQ19CRUVWVF9UT0dHTEUgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDI4KSAvLyAoVEMpIEVmZmVjdDogdG9nZ2xlDQorI2RlZmluZSBBVDkxQ19UQ19CU1dUUkcgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAzMCkgLy8gKFRDKSBTb2Z0d2FyZSBUcmlnZ2VyIEVmZmVjdCBvbiBUSU9CDQorI2RlZmluZSAJQVQ5MUNfVENfQlNXVFJHX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMzApIC8vIChUQykgRWZmZWN0OiBub25lDQorI2RlZmluZSAJQVQ5MUNfVENfQlNXVFJHX1NFVCAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMzApIC8vIChUQykgRWZmZWN0OiBzZXQNCisjZGVmaW5lIAlBVDkxQ19UQ19CU1dUUkdfQ0xFQVIgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAzMCkgLy8gKFRDKSBFZmZlY3Q6IGNsZWFyDQorI2RlZmluZSAJQVQ5MUNfVENfQlNXVFJHX1RPR0dMRSAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMzApIC8vIChUQykgRWZmZWN0OiB0b2dnbGUNCisvLyAtLS0tLS0tLSBUQ19TUiA6IChUQyBPZmZzZXQ6IDB4MjApIFRDIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVENfQ09WRlMgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChUQykgQ291bnRlciBPdmVyZmxvdw0KKyNkZWZpbmUgQVQ5MUNfVENfTE9WUlMgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChUQykgTG9hZCBPdmVycnVuDQorI2RlZmluZSBBVDkxQ19UQ19DUEFTICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFRDKSBSQSBDb21wYXJlDQorI2RlZmluZSBBVDkxQ19UQ19DUEJTICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKFRDKSBSQiBDb21wYXJlDQorI2RlZmluZSBBVDkxQ19UQ19DUENTICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFRDKSBSQyBDb21wYXJlDQorI2RlZmluZSBBVDkxQ19UQ19MRFJBUyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKFRDKSBSQSBMb2FkaW5nDQorI2RlZmluZSBBVDkxQ19UQ19MRFJCUyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLy8gKFRDKSBSQiBMb2FkaW5nDQorI2RlZmluZSBBVDkxQ19UQ19FVFJHUyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKFRDKSBFeHRlcm5hbCBUcmlnZ2VyDQorI2RlZmluZSBBVDkxQ19UQ19DTEtTVEEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKFRDKSBDbG9jayBFbmFibGluZw0KKyNkZWZpbmUgQVQ5MUNfVENfTVRJT0EgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTcpIC8vIChUQykgVElPQSBNaXJyb3INCisjZGVmaW5lIEFUOTFDX1RDX01USU9CICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE4KSAvLyAoVEMpIFRJT0EgTWlycm9yDQorLy8gLS0tLS0tLS0gVENfSUVSIDogKFRDIE9mZnNldDogMHgyNCkgVEMgQ2hhbm5lbCBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFRDX0lEUiA6IChUQyBPZmZzZXQ6IDB4MjgpIFRDIENoYW5uZWwgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVENfSU1SIDogKFRDIE9mZnNldDogMHgyYykgVEMgQ2hhbm5lbCBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFRpbWVyIENvdW50ZXIgSW50ZXJmYWNlICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfVENCDQotew0KLSAgICBBVDkxU19UQyBUQ0JfVEMwOyAgICAgICAgLyogVEMgQ2hhbm5lbCAwICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMFsgNCBdOyAvKiAqLw0KLSAgICBBVDkxU19UQyBUQ0JfVEMxOyAgICAgICAgLyogVEMgQ2hhbm5lbCAxICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMVsgNCBdOyAvKiAqLw0KLSAgICBBVDkxU19UQyBUQ0JfVEMyOyAgICAgICAgLyogVEMgQ2hhbm5lbCAyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMlsgNCBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBUQ0JfQkNSOyAgICAgICAgLyogVEMgQmxvY2sgQ29udHJvbCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBUQ0JfQk1SOyAgICAgICAgLyogVEMgQmxvY2sgTW9kZSBSZWdpc3RlciAqLw0KLX0gQVQ5MVNfVENCLCAqIEFUOTFQU19UQ0I7DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBUaW1lciBDb3VudGVyIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1RDQiB7DQorCUFUOTFTX1RDCSBUQ0JfVEMwOyAJLy8gVEMgQ2hhbm5lbCAwDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbNF07IAkvLyANCisJQVQ5MVNfVEMJIFRDQl9UQzE7IAkvLyBUQyBDaGFubmVsIDENCisJQVQ5MV9SRUcJIFJlc2VydmVkMVs0XTsgCS8vIA0KKwlBVDkxU19UQwkgVENCX1RDMjsgCS8vIFRDIENoYW5uZWwgMg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQyWzRdOyAJLy8gDQorCUFUOTFfUkVHCSBUQ0JfQkNSOyAJLy8gVEMgQmxvY2sgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVENCX0JNUjsgCS8vIFRDIEJsb2NrIE1vZGUgUmVnaXN0ZXINCit9IEFUOTFTX1RDQiwgKkFUOTFQU19UQ0I7DQogDQotLyogLS0tLS0tLS0gVENCX0JDUiA6IChUQ0IgT2Zmc2V0OiAweGMwKSBUQyBCbG9jayBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19UQ0JfU1lOQyAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgLyogKFRDQikgU3luY2hybyBDb21tYW5kICovDQotLyogLS0tLS0tLS0gVENCX0JNUiA6IChUQ0IgT2Zmc2V0OiAweGM0KSBUQyBCbG9jayBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19UQ0JfVEMwWEMwUyAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAwICkgLyogKFRDQikgRXh0ZXJuYWwgQ2xvY2sgU2lnbmFsIDAgU2VsZWN0aW9uICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENCX1RDMFhDMFNfVENMSzAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCApICAgICAgLyogKFRDQikgVENMSzAgY29ubmVjdGVkIHRvIFhDMCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDQl9UQzBYQzBTX05PTkUgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgKSAgICAgIC8qIChUQ0IpIE5vbmUgc2lnbmFsIGNvbm5lY3RlZCB0byBYQzAgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ0JfVEMwWEMwU19USU9BMSAgICAoICggdW5zaWduZWQgaW50ICkgMHgyICkgICAgICAvKiAoVENCKSBUSU9BMSBjb25uZWN0ZWQgdG8gWEMwICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENCX1RDMFhDMFNfVElPQTIgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyApICAgICAgLyogKFRDQikgVElPQTIgY29ubmVjdGVkIHRvIFhDMCAqLw0KLSNkZWZpbmUgQVQ5MUNfVENCX1RDMVhDMVMgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMiApIC8qIChUQ0IpIEV4dGVybmFsIENsb2NrIFNpZ25hbCAxIFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDQl9UQzFYQzFTX1RDTEsxICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMiApIC8qIChUQ0IpIFRDTEsxIGNvbm5lY3RlZCB0byBYQzEgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ0JfVEMxWEMxU19OT05FICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAvKiAoVENCKSBOb25lIHNpZ25hbCBjb25uZWN0ZWQgdG8gWEMxICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENCX1RDMVhDMVNfVElPQTAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCAyICkgLyogKFRDQikgVElPQTAgY29ubmVjdGVkIHRvIFhDMSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDQl9UQzFYQzFTX1RJT0EyICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMiApIC8qIChUQ0IpIFRJT0EyIGNvbm5lY3RlZCB0byBYQzEgKi8NCi0jZGVmaW5lIEFUOTFDX1RDQl9UQzJYQzJTICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDQgKSAvKiAoVENCKSBFeHRlcm5hbCBDbG9jayBTaWduYWwgMiBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ0JfVEMyWEMyU19UQ0xLMiAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDQgKSAvKiAoVENCKSBUQ0xLMiBjb25uZWN0ZWQgdG8gWEMyICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENCX1RDMlhDMlNfTk9ORSAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA0ICkgLyogKFRDQikgTm9uZSBzaWduYWwgY29ubmVjdGVkIHRvIFhDMiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDQl9UQzJYQzJTX1RJT0EwICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgNCApIC8qIChUQ0IpIFRJT0EwIGNvbm5lY3RlZCB0byBYQzIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ0JfVEMyWEMyU19USU9BMSAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDQgKSAvKiAoVENCKSBUSU9BMiBjb25uZWN0ZWQgdG8gWEMyICovDQorLy8gLS0tLS0tLS0gVENCX0JDUiA6IChUQ0IgT2Zmc2V0OiAweGMwKSBUQyBCbG9jayBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVENCX1NZTkMgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChUQ0IpIFN5bmNocm8gQ29tbWFuZA0KKy8vIC0tLS0tLS0tIFRDQl9CTVIgOiAoVENCIE9mZnNldDogMHhjNCkgVEMgQmxvY2sgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RDQl9UQzBYQzBTICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICAwKSAvLyAoVENCKSBFeHRlcm5hbCBDbG9jayBTaWduYWwgMCBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMwWEMwU19UQ0xLMCAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwKSAvLyAoVENCKSBUQ0xLMCBjb25uZWN0ZWQgdG8gWEMwDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMFhDMFNfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSkgLy8gKFRDQikgTm9uZSBzaWduYWwgY29ubmVjdGVkIHRvIFhDMA0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzBYQzBTX1RJT0ExICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIpIC8vIChUQ0IpIFRJT0ExIGNvbm5lY3RlZCB0byBYQzANCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMwWEMwU19USU9BMiAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzKSAvLyAoVENCKSBUSU9BMiBjb25uZWN0ZWQgdG8gWEMwDQorI2RlZmluZSBBVDkxQ19UQ0JfVEMxWEMxUyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgMikgLy8gKFRDQikgRXh0ZXJuYWwgQ2xvY2sgU2lnbmFsIDEgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMVhDMVNfVENMSzEgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgMikgLy8gKFRDQikgVENMSzEgY29ubmVjdGVkIHRvIFhDMQ0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzFYQzFTX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChUQ0IpIE5vbmUgc2lnbmFsIGNvbm5lY3RlZCB0byBYQzENCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMxWEMxU19USU9BMCAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICAyKSAvLyAoVENCKSBUSU9BMCBjb25uZWN0ZWQgdG8gWEMxDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMVhDMVNfVElPQTIgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgMikgLy8gKFRDQikgVElPQTIgY29ubmVjdGVkIHRvIFhDMQ0KKyNkZWZpbmUgQVQ5MUNfVENCX1RDMlhDMlMgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDQpIC8vIChUQ0IpIEV4dGVybmFsIENsb2NrIFNpZ25hbCAyIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzJYQzJTX1RDTEsyICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDQpIC8vIChUQ0IpIFRDTEsyIGNvbm5lY3RlZCB0byBYQzINCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMyWEMyU19OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoVENCKSBOb25lIHNpZ25hbCBjb25uZWN0ZWQgdG8gWEMyDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMlhDMlNfVElPQTAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgNCkgLy8gKFRDQikgVElPQTAgY29ubmVjdGVkIHRvIFhDMg0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzJYQzJTX1RJT0ExICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDQpIC8vIChUQ0IpIFRJT0EyIGNvbm5lY3RlZCB0byBYQzINCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIENvbnRyb2wgQXJlYSBOZXR3b3JrIE1haWxCb3ggSW50ZXJmYWNlICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfQ0FOX01CDQotew0KLSAgICBBVDkxX1JFRyBDQU5fTUJfTU1SOyAgLyogTWFpbEJveCBNb2RlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIENBTl9NQl9NQU07ICAvKiBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBDQU5fTUJfTUlEOyAgLyogTWFpbEJveCBJRCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBDQU5fTUJfTUZJRDsgLyogTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQ0FOX01CX01TUjsgIC8qIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIENBTl9NQl9NREw7ICAvKiBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIENBTl9NQl9NREg7ICAvKiBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBDQU5fTUJfTUNSOyAgLyogTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyICovDQotfSBBVDkxU19DQU5fTUIsICogQVQ5MVBTX0NBTl9NQjsNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIENvbnRyb2wgQXJlYSBOZXR3b3JrIE1haWxCb3ggSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfQ0FOX01CIHsNCisJQVQ5MV9SRUcJIENBTl9NQl9NTVI7IAkvLyBNYWlsQm94IE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIENBTl9NQl9NQU07IAkvLyBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0FOX01CX01JRDsgCS8vIE1haWxCb3ggSUQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIENBTl9NQl9NRklEOyAJLy8gTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIENBTl9NQl9NU1I7IAkvLyBNYWlsQm94IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0FOX01CX01ETDsgCS8vIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIENBTl9NQl9NREg7IAkvLyBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0FOX01CX01DUjsgCS8vIE1haWxCb3ggQ29udHJvbCBSZWdpc3Rlcg0KK30gQVQ5MVNfQ0FOX01CLCAqQVQ5MVBTX0NBTl9NQjsNCiANCi0vKiAtLS0tLS0tLSBDQU5fTU1SIDogKENBTl9NQiBPZmZzZXQ6IDB4MCkgQ0FOIE1lc3NhZ2UgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01USU1FTUFSSyAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RkZGRiA8PCAwICkgIC8qIChDQU5fTUIpIE1haWxib3ggVGltZW1hcmsgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9QUklPUiAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEYgPDwgMTYgKSAgICAvKiAoQ0FOX01CKSBNYWlsYm94IFByaW9yaXR5ICovDQotI2RlZmluZSBBVDkxQ19DQU5fTU9UICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg3IDw8IDI0ICkgICAgLyogKENBTl9NQikgTWFpbGJveCBPYmplY3QgVHlwZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0NBTl9NT1RfRElTICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAyNCApICAgIC8qIChDQU5fTUIpICovDQotI2RlZmluZSAgICAgQVQ5MUNfQ0FOX01PVF9SWCAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDI0ICkgICAgLyogKENBTl9NQikgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19DQU5fTU9UX1JYT1ZFUldSSVRFICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgMjQgKSAgICAvKiAoQ0FOX01CKSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0NBTl9NT1RfVFggICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAyNCApICAgIC8qIChDQU5fTUIpICovDQotI2RlZmluZSAgICAgQVQ5MUNfQ0FOX01PVF9DT05TVU1FUiAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg0IDw8IDI0ICkgICAgLyogKENBTl9NQikgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19DQU5fTU9UX1BST0RVQ0VSICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDUgPDwgMjQgKSAgICAvKiAoQ0FOX01CKSAqLw0KLS8qIC0tLS0tLS0tIENBTl9NQU0gOiAoQ0FOX01CIE9mZnNldDogMHg0KSBDQU4gTWVzc2FnZSBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NSUR2QiAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDNGRkZGIDw8IDAgKSAvKiAoQ0FOX01CKSBDb21wbGVtZW50YXJ5IGJpdHMgZm9yIGlkZW50aWZpZXIgaW4gZXh0ZW5kZWQgbW9kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01JRHZBICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4N0ZGIDw8IDE4ICkgIC8qIChDQU5fTUIpIElkZW50aWZpZXIgZm9yIHN0YW5kYXJkIGZyYW1lIG1vZGUgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NSURFICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjkgKSAgICAvKiAoQ0FOX01CKSBJZGVudGlmaWVyIFZlcnNpb24gKi8NCi0vKiAtLS0tLS0tLSBDQU5fTUlEIDogKENBTl9NQiBPZmZzZXQ6IDB4OCkgQ0FOIE1lc3NhZ2UgSUQgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBDQU5fTUZJRCA6IChDQU5fTUIgT2Zmc2V0OiAweGMpIENBTiBNZXNzYWdlIEZhbWlseSBJRCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIENBTl9NU1IgOiAoQ0FOX01CIE9mZnNldDogMHgxMCkgQ0FOIE1lc3NhZ2UgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19DQU5fTVRJTUVTVEFNUCAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRkZGIDw8IDAgKSAvKiAoQ0FOX01CKSBUaW1lciBWYWx1ZSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01ETEMgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RiA8PCAxNiApICAgLyogKENBTl9NQikgTWFpbGJveCBEYXRhIExlbmd0aCBDb2RlICovDQotI2RlZmluZSBBVDkxQ19DQU5fTVJUUiAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIwICkgICAvKiAoQ0FOX01CKSBNYWlsYm94IFJlbW90ZSBUcmFuc21pc3Npb24gUmVxdWVzdCAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01BQlQgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyMiApICAgLyogKENBTl9NQikgTWFpbGJveCBNZXNzYWdlIEFib3J0ICovDQotI2RlZmluZSBBVDkxQ19DQU5fTVJEWSAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIzICkgICAvKiAoQ0FOX01CKSBNYWlsYm94IFJlYWR5ICovDQotI2RlZmluZSBBVDkxQ19DQU5fTU1JICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDI0ICkgICAvKiAoQ0FOX01CKSBNYWlsYm94IE1lc3NhZ2UgSWdub3JlZCAqLw0KLS8qIC0tLS0tLS0tIENBTl9NREwgOiAoQ0FOX01CIE9mZnNldDogMHgxNCkgQ0FOIE1lc3NhZ2UgRGF0YSBMb3cgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBDQU5fTURIIDogKENBTl9NQiBPZmZzZXQ6IDB4MTgpIENBTiBNZXNzYWdlIERhdGEgSGlnaCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIENBTl9NQ1IgOiAoQ0FOX01CIE9mZnNldDogMHgxYykgQ0FOIE1lc3NhZ2UgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01BQ1IgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyMiApIC8qIChDQU5fTUIpIEFib3J0IFJlcXVlc3QgZm9yIE1haWxib3ggKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NVENSICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjMgKSAvKiAoQ0FOX01CKSBNYWlsYm94IFRyYW5zZmVyIENvbW1hbmQgKi8NCisvLyAtLS0tLS0tLSBDQU5fTU1SIDogKENBTl9NQiBPZmZzZXQ6IDB4MCkgQ0FOIE1lc3NhZ2UgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0NBTl9NVElNRU1BUksgICAoKHVuc2lnbmVkIGludCkgMHhGRkZGIDw8ICAwKSAvLyAoQ0FOX01CKSBNYWlsYm94IFRpbWVtYXJrDQorI2RlZmluZSBBVDkxQ19DQU5fUFJJT1IgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAxNikgLy8gKENBTl9NQikgTWFpbGJveCBQcmlvcml0eQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01PVCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgMjQpIC8vIChDQU5fTUIpIE1haWxib3ggT2JqZWN0IFR5cGUNCisjZGVmaW5lIAlBVDkxQ19DQU5fTU9UX0RJUyAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMjQpIC8vIChDQU5fTUIpIA0KKyNkZWZpbmUgCUFUOTFDX0NBTl9NT1RfUlggICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNCkgLy8gKENBTl9NQikgDQorI2RlZmluZSAJQVQ5MUNfQ0FOX01PVF9SWE9WRVJXUklURSAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDI0KSAvLyAoQ0FOX01CKSANCisjZGVmaW5lIAlBVDkxQ19DQU5fTU9UX1RYICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMjQpIC8vIChDQU5fTUIpIA0KKyNkZWZpbmUgCUFUOTFDX0NBTl9NT1RfQ09OU1VNRVIgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NCA8PCAyNCkgLy8gKENBTl9NQikgDQorI2RlZmluZSAJQVQ5MUNfQ0FOX01PVF9QUk9EVUNFUiAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg1IDw8IDI0KSAvLyAoQ0FOX01CKSANCisvLyAtLS0tLS0tLSBDQU5fTUFNIDogKENBTl9NQiBPZmZzZXQ6IDB4NCkgQ0FOIE1lc3NhZ2UgQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01JRHZCICAgICAgICgodW5zaWduZWQgaW50KSAweDNGRkZGIDw8ICAwKSAvLyAoQ0FOX01CKSBDb21wbGVtZW50YXJ5IGJpdHMgZm9yIGlkZW50aWZpZXIgaW4gZXh0ZW5kZWQgbW9kZQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01JRHZBICAgICAgICgodW5zaWduZWQgaW50KSAweDdGRiA8PCAxOCkgLy8gKENBTl9NQikgSWRlbnRpZmllciBmb3Igc3RhbmRhcmQgZnJhbWUgbW9kZQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01JREUgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjkpIC8vIChDQU5fTUIpIElkZW50aWZpZXIgVmVyc2lvbg0KKy8vIC0tLS0tLS0tIENBTl9NSUQgOiAoQ0FOX01CIE9mZnNldDogMHg4KSBDQU4gTWVzc2FnZSBJRCBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBDQU5fTUZJRCA6IChDQU5fTUIgT2Zmc2V0OiAweGMpIENBTiBNZXNzYWdlIEZhbWlseSBJRCBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBDQU5fTVNSIDogKENBTl9NQiBPZmZzZXQ6IDB4MTApIENBTiBNZXNzYWdlIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0NBTl9NVElNRVNUQU1QICAoKHVuc2lnbmVkIGludCkgMHhGRkZGIDw8ICAwKSAvLyAoQ0FOX01CKSBUaW1lciBWYWx1ZQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01ETEMgICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgMTYpIC8vIChDQU5fTUIpIE1haWxib3ggRGF0YSBMZW5ndGggQ29kZQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01SVFIgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjApIC8vIChDQU5fTUIpIE1haWxib3ggUmVtb3RlIFRyYW5zbWlzc2lvbiBSZXF1ZXN0DQorI2RlZmluZSBBVDkxQ19DQU5fTUFCVCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMikgLy8gKENBTl9NQikgTWFpbGJveCBNZXNzYWdlIEFib3J0DQorI2RlZmluZSBBVDkxQ19DQU5fTVJEWSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMykgLy8gKENBTl9NQikgTWFpbGJveCBSZWFkeQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01NSSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjQpIC8vIChDQU5fTUIpIE1haWxib3ggTWVzc2FnZSBJZ25vcmVkDQorLy8gLS0tLS0tLS0gQ0FOX01ETCA6IChDQU5fTUIgT2Zmc2V0OiAweDE0KSBDQU4gTWVzc2FnZSBEYXRhIExvdyBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBDQU5fTURIIDogKENBTl9NQiBPZmZzZXQ6IDB4MTgpIENBTiBNZXNzYWdlIERhdGEgSGlnaCBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBDQU5fTUNSIDogKENBTl9NQiBPZmZzZXQ6IDB4MWMpIENBTiBNZXNzYWdlIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DQU5fTUFDUiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMikgLy8gKENBTl9NQikgQWJvcnQgUmVxdWVzdCBmb3IgTWFpbGJveA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01UQ1IgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjMpIC8vIChDQU5fTUIpIE1haWxib3ggVHJhbnNmZXIgQ29tbWFuZA0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQ29udHJvbCBBcmVhIE5ldHdvcmsgSW50ZXJmYWNlICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfQ0FODQotew0KLSAgICBBVDkxX1JFRyBDQU5fTVI7ICAgICAgICAgIC8qIE1vZGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQ0FOX0lFUjsgICAgICAgICAvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIENBTl9JRFI7ICAgICAgICAgLyogSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQ0FOX0lNUjsgICAgICAgICAvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBDQU5fU1I7ICAgICAgICAgIC8qIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBDQU5fQlI7ICAgICAgICAgIC8qIEJhdWRyYXRlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIENBTl9USU07ICAgICAgICAgLyogVGltZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQ0FOX1RJTUVTVFA7ICAgICAvKiBUaW1lIFN0YW1wIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIENBTl9FQ1I7ICAgICAgICAgLyogRXJyb3IgQ291bnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBDQU5fVENSOyAgICAgICAgIC8qIFRyYW5zZmVyIENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQ0FOX0FDUjsgICAgICAgICAvKiBBYm9ydCBDb21tYW5kIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMFsgNTIgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgQ0FOX1ZSOyAgICAgICAgICAvKiBWZXJzaW9uIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMVsgNjQgXTsgLyogKi8NCi0gICAgQVQ5MVNfQ0FOX01CIENBTl9NQjA7ICAgICAvKiBDQU4gTWFpbGJveCAwICovDQotICAgIEFUOTFTX0NBTl9NQiBDQU5fTUIxOyAgICAgLyogQ0FOIE1haWxib3ggMSAqLw0KLSAgICBBVDkxU19DQU5fTUIgQ0FOX01CMjsgICAgIC8qIENBTiBNYWlsYm94IDIgKi8NCi0gICAgQVQ5MVNfQ0FOX01CIENBTl9NQjM7ICAgICAvKiBDQU4gTWFpbGJveCAzICovDQotICAgIEFUOTFTX0NBTl9NQiBDQU5fTUI0OyAgICAgLyogQ0FOIE1haWxib3ggNCAqLw0KLSAgICBBVDkxU19DQU5fTUIgQ0FOX01CNTsgICAgIC8qIENBTiBNYWlsYm94IDUgKi8NCi0gICAgQVQ5MVNfQ0FOX01CIENBTl9NQjY7ICAgICAvKiBDQU4gTWFpbGJveCA2ICovDQotICAgIEFUOTFTX0NBTl9NQiBDQU5fTUI3OyAgICAgLyogQ0FOIE1haWxib3ggNyAqLw0KLSAgICBBVDkxU19DQU5fTUIgQ0FOX01CODsgICAgIC8qIENBTiBNYWlsYm94IDggKi8NCi0gICAgQVQ5MVNfQ0FOX01CIENBTl9NQjk7ICAgICAvKiBDQU4gTWFpbGJveCA5ICovDQotICAgIEFUOTFTX0NBTl9NQiBDQU5fTUIxMDsgICAgLyogQ0FOIE1haWxib3ggMTAgKi8NCi0gICAgQVQ5MVNfQ0FOX01CIENBTl9NQjExOyAgICAvKiBDQU4gTWFpbGJveCAxMSAqLw0KLSAgICBBVDkxU19DQU5fTUIgQ0FOX01CMTI7ICAgIC8qIENBTiBNYWlsYm94IDEyICovDQotICAgIEFUOTFTX0NBTl9NQiBDQU5fTUIxMzsgICAgLyogQ0FOIE1haWxib3ggMTMgKi8NCi0gICAgQVQ5MVNfQ0FOX01CIENBTl9NQjE0OyAgICAvKiBDQU4gTWFpbGJveCAxNCAqLw0KLSAgICBBVDkxU19DQU5fTUIgQ0FOX01CMTU7ICAgIC8qIENBTiBNYWlsYm94IDE1ICovDQotfSBBVDkxU19DQU4sICogQVQ5MVBTX0NBTjsNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIENvbnRyb2wgQXJlYSBOZXR3b3JrIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX0NBTiB7DQorCUFUOTFfUkVHCSBDQU5fTVI7IAkvLyBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBDQU5fSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0FOX0lEUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBDQU5fSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIENBTl9TUjsgCS8vIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0FOX0JSOyAJLy8gQmF1ZHJhdGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIENBTl9USU07IAkvLyBUaW1lciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0FOX1RJTUVTVFA7IAkvLyBUaW1lIFN0YW1wIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBDQU5fRUNSOyAJLy8gRXJyb3IgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0FOX1RDUjsgCS8vIFRyYW5zZmVyIENvbW1hbmQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIENBTl9BQ1I7IAkvLyBBYm9ydCBDb21tYW5kIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbNTJdOyAJLy8gDQorCUFUOTFfUkVHCSBDQU5fVlI7IAkvLyBWZXJzaW9uIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbNjRdOyAJLy8gDQorCUFUOTFTX0NBTl9NQgkgQ0FOX01CMDsgCS8vIENBTiBNYWlsYm94IDANCisJQVQ5MVNfQ0FOX01CCSBDQU5fTUIxOyAJLy8gQ0FOIE1haWxib3ggMQ0KKwlBVDkxU19DQU5fTUIJIENBTl9NQjI7IAkvLyBDQU4gTWFpbGJveCAyDQorCUFUOTFTX0NBTl9NQgkgQ0FOX01CMzsgCS8vIENBTiBNYWlsYm94IDMNCisJQVQ5MVNfQ0FOX01CCSBDQU5fTUI0OyAJLy8gQ0FOIE1haWxib3ggNA0KKwlBVDkxU19DQU5fTUIJIENBTl9NQjU7IAkvLyBDQU4gTWFpbGJveCA1DQorCUFUOTFTX0NBTl9NQgkgQ0FOX01CNjsgCS8vIENBTiBNYWlsYm94IDYNCisJQVQ5MVNfQ0FOX01CCSBDQU5fTUI3OyAJLy8gQ0FOIE1haWxib3ggNw0KKwlBVDkxU19DQU5fTUIJIENBTl9NQjg7IAkvLyBDQU4gTWFpbGJveCA4DQorCUFUOTFTX0NBTl9NQgkgQ0FOX01COTsgCS8vIENBTiBNYWlsYm94IDkNCisJQVQ5MVNfQ0FOX01CCSBDQU5fTUIxMDsgCS8vIENBTiBNYWlsYm94IDEwDQorCUFUOTFTX0NBTl9NQgkgQ0FOX01CMTE7IAkvLyBDQU4gTWFpbGJveCAxMQ0KKwlBVDkxU19DQU5fTUIJIENBTl9NQjEyOyAJLy8gQ0FOIE1haWxib3ggMTINCisJQVQ5MVNfQ0FOX01CCSBDQU5fTUIxMzsgCS8vIENBTiBNYWlsYm94IDEzDQorCUFUOTFTX0NBTl9NQgkgQ0FOX01CMTQ7IAkvLyBDQU4gTWFpbGJveCAxNA0KKwlBVDkxU19DQU5fTUIJIENBTl9NQjE1OyAJLy8gQ0FOIE1haWxib3ggMTUNCit9IEFUOTFTX0NBTiwgKkFUOTFQU19DQU47DQogDQotLyogLS0tLS0tLS0gQ0FOX01SIDogKENBTiBPZmZzZXQ6IDB4MCkgQ0FOIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9DQU5FTiAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgIC8qIChDQU4pIENBTiBDb250cm9sbGVyIEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX0xQTSAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEgKSAgLyogKENBTikgRGlzYWJsZS9FbmFibGUgTG93IFBvd2VyIE1vZGUgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9BQk0gICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyICkgIC8qIChDQU4pIERpc2FibGUvRW5hYmxlIEF1dG9iYXVkL0xpc3RlbiBNb2RlICovDQotI2RlZmluZSBBVDkxQ19DQU5fT1ZMICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMyApICAvKiAoQ0FOKSBEaXNhYmxlL0VuYWJsZSBPdmVybG9hZCBGcmFtZSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1RFT0YgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDQgKSAgLyogKENBTikgVGltZSBTdGFtcCBtZXNzYWdlcyBhdCBlYWNoIGVuZCBvZiBGcmFtZSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1RUTSAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDUgKSAgLyogKENBTikgRGlzYWJsZS9FbmFibGUgVGltZSBUcmlnZ2VyIE1vZGUgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9USU1GUlogICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA2ICkgIC8qIChDQU4pIEVuYWJsZSBUaW1lciBGcmVlemUgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9EUlBUICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA3ICkgIC8qIChDQU4pIERpc2FibGUgUmVwZWF0ICovDQotLyogLS0tLS0tLS0gQ0FOX0lFUiA6IChDQU4gT2Zmc2V0OiAweDQpIENBTiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIwICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAvKiAoQ0FOKSBNYWlsYm94IDAgRmxhZyAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMSAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEgKSAgLyogKENBTikgTWFpbGJveCAxIEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjIgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyICkgIC8qIChDQU4pIE1haWxib3ggMiBGbGFnICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIzICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMyApICAvKiAoQ0FOKSBNYWlsYm94IDMgRmxhZyAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CNCAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDQgKSAgLyogKENBTikgTWFpbGJveCA0IEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjUgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA1ICkgIC8qIChDQU4pIE1haWxib3ggNSBGbGFnICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI2ICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNiApICAvKiAoQ0FOKSBNYWlsYm94IDYgRmxhZyAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CNyAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDcgKSAgLyogKENBTikgTWFpbGJveCA3IEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjggICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgIC8qIChDQU4pIE1haWxib3ggOCBGbGFnICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI5ICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOSApICAvKiAoQ0FOKSBNYWlsYm94IDkgRmxhZyAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMTAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEwICkgLyogKENBTikgTWFpbGJveCAxMCBGbGFnICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIxMSAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTEgKSAvKiAoQ0FOKSBNYWlsYm94IDExIEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjEyICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMiApIC8qIChDQU4pIE1haWxib3ggMTIgRmxhZyAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMTMgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEzICkgLyogKENBTikgTWFpbGJveCAxMyBGbGFnICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIxNCAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTQgKSAvKiAoQ0FOKSBNYWlsYm94IDE0IEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjE1ICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNSApIC8qIChDQU4pIE1haWxib3ggMTUgRmxhZyAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX0VSUkEgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE2ICkgLyogKENBTikgRXJyb3IgQWN0aXZlIE1vZGUgRmxhZyAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1dBUk4gICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE3ICkgLyogKENBTikgV2FybmluZyBMaW1pdCBGbGFnICovDQotI2RlZmluZSBBVDkxQ19DQU5fRVJSUCAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTggKSAvKiAoQ0FOKSBFcnJvciBQYXNzaXZlIE1vZGUgRmxhZyAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX0JPRkYgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE5ICkgLyogKENBTikgQnVzIE9mZiBNb2RlIEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9TTEVFUCAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyMCApIC8qIChDQU4pIFNsZWVwIEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9XQUtFVVAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyMSApIC8qIChDQU4pIFdha2V1cCBGbGFnICovDQotI2RlZmluZSBBVDkxQ19DQU5fVE9WRiAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjIgKSAvKiAoQ0FOKSBUaW1lciBPdmVyZmxvdyBGbGFnICovDQotI2RlZmluZSBBVDkxQ19DQU5fVFNUUCAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjMgKSAvKiAoQ0FOKSBUaW1lc3RhbXAgRmxhZyAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX0NFUlIgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDI0ICkgLyogKENBTikgQ1JDIEVycm9yICovDQotI2RlZmluZSBBVDkxQ19DQU5fU0VSUiAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjUgKSAvKiAoQ0FOKSBTdHVmZmluZyBFcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX0FFUlIgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDI2ICkgLyogKENBTikgQWNrbm93bGVkZ21lbnQgRXJyb3IgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9GRVJSICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyNyApIC8qIChDQU4pIEZvcm0gRXJyb3IgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9CRVJSICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyOCApIC8qIChDQU4pIEJpdCBFcnJvciAqLw0KLS8qIC0tLS0tLS0tIENBTl9JRFIgOiAoQ0FOIE9mZnNldDogMHg4KSBDQU4gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBDQU5fSU1SIDogKENBTiBPZmZzZXQ6IDB4YykgQ0FOIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQ0FOX1NSIDogKENBTiBPZmZzZXQ6IDB4MTApIENBTiBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9SQlNZICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyOSApICAgLyogKENBTikgUmVjZWl2ZXIgQnVzeSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1RCU1kgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDMwICkgICAvKiAoQ0FOKSBUcmFuc21pdHRlciBCdXN5ICovDQotI2RlZmluZSBBVDkxQ19DQU5fT1ZMWSAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMzEgKSAgIC8qIChDQU4pIE92ZXJsb2FkIEJ1c3kgKi8NCi0vKiAtLS0tLS0tLSBDQU5fQlIgOiAoQ0FOIE9mZnNldDogMHgxNCkgQ0FOIEJhdWRyYXRlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19DQU5fUEhBU0UyICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDcgPDwgMCApICAgIC8qIChDQU4pIFBoYXNlIDIgc2VnbWVudCAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1BIQVNFMSAgICAoICggdW5zaWduZWQgaW50ICkgMHg3IDw8IDQgKSAgICAvKiAoQ0FOKSBQaGFzZSAxIHNlZ21lbnQgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9QUk9QQUcgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NyA8PCA4ICkgICAgLyogKENBTikgUHJvZ3JhbW1hdGlvbiB0aW1lIHNlZ21lbnQgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9TWU5DICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAxMiApICAgLyogKENBTikgUmUtc3luY2hyb25pemF0aW9uIGp1bXAgd2lkdGggc2VnbWVudCAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX0JSUCAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg3RiA8PCAxNiApICAvKiAoQ0FOKSBCYXVkcmF0ZSBQcmVzY2FsZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9TTVAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyNCApICAgLyogKENBTikgU2FtcGxpbmcgbW9kZSAqLw0KLS8qIC0tLS0tLS0tIENBTl9USU0gOiAoQ0FOIE9mZnNldDogMHgxOCkgQ0FOIFRpbWVyIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19DQU5fVElNRVIgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGRkYgPDwgMCApIC8qIChDQU4pIFRpbWVyIGZpZWxkICovDQotLyogLS0tLS0tLS0gQ0FOX1RJTUVTVFAgOiAoQ0FOIE9mZnNldDogMHgxYykgQ0FOIFRpbWVzdGFtcCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIENBTl9FQ1IgOiAoQ0FOIE9mZnNldDogMHgyMCkgQ0FOIEVycm9yIENvdW50ZXIgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9SRUMgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RkYgPDwgMCApICAvKiAoQ0FOKSBSZWNlaXZlIEVycm9yIENvdW50ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9URUMgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RkYgPDwgMTYgKSAvKiAoQ0FOKSBUcmFuc21pdCBFcnJvciBDb3VudGVyICovDQotLyogLS0tLS0tLS0gQ0FOX1RDUiA6IChDQU4gT2Zmc2V0OiAweDI0KSBDQU4gVHJhbnNmZXIgQ29tbWFuZCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1RJTVJTVCAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDMxICkgIC8qIChDQU4pIFRpbWVyIFJlc2V0IEZpZWxkICovDQotLyogLS0tLS0tLS0gQ0FOX0FDUiA6IChDQU4gT2Zmc2V0OiAweDI4KSBDQU4gQWJvcnQgQ29tbWFuZCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KKy8vIC0tLS0tLS0tIENBTl9NUiA6IChDQU4gT2Zmc2V0OiAweDApIENBTiBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0NBTkVOICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChDQU4pIENBTiBDb250cm9sbGVyIEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0xQTSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChDQU4pIERpc2FibGUvRW5hYmxlIExvdyBQb3dlciBNb2RlDQorI2RlZmluZSBBVDkxQ19DQU5fQUJNICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKENBTikgRGlzYWJsZS9FbmFibGUgQXV0b2JhdWQvTGlzdGVuIE1vZGUNCisjZGVmaW5lIEFUOTFDX0NBTl9PVkwgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoQ0FOKSBEaXNhYmxlL0VuYWJsZSBPdmVybG9hZCBGcmFtZQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1RFT0YgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChDQU4pIFRpbWUgU3RhbXAgbWVzc2FnZXMgYXQgZWFjaCBlbmQgb2YgRnJhbWUNCisjZGVmaW5lIEFUOTFDX0NBTl9UVE0gICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoQ0FOKSBEaXNhYmxlL0VuYWJsZSBUaW1lIFRyaWdnZXIgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1RJTUZSWiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChDQU4pIEVuYWJsZSBUaW1lciBGcmVlemUNCisjZGVmaW5lIEFUOTFDX0NBTl9EUlBUICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoQ0FOKSBEaXNhYmxlIFJlcGVhdA0KKy8vIC0tLS0tLS0tIENBTl9JRVIgOiAoQ0FOIE9mZnNldDogMHg0KSBDQU4gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0NBTl9NQjAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoQ0FOKSBNYWlsYm94IDAgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChDQU4pIE1haWxib3ggMSBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUIyICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKENBTikgTWFpbGJveCAyIEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9NQjMgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoQ0FOKSBNYWlsYm94IDMgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChDQU4pIE1haWxib3ggNCBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUI1ICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKENBTikgTWFpbGJveCA1IEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9NQjYgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoQ0FOKSBNYWlsYm94IDYgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChDQU4pIE1haWxib3ggNyBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUI4ICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKENBTikgTWFpbGJveCA4IEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9NQjkgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvLyAoQ0FOKSBNYWlsYm94IDkgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMTAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChDQU4pIE1haWxib3ggMTAgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMTEgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTEpIC8vIChDQU4pIE1haWxib3ggMTEgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMTIgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8vIChDQU4pIE1haWxib3ggMTIgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMTMgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTMpIC8vIChDQU4pIE1haWxib3ggMTMgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMTQgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTQpIC8vIChDQU4pIE1haWxib3ggMTQgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMTUgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTUpIC8vIChDQU4pIE1haWxib3ggMTUgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0VSUkEgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChDQU4pIEVycm9yIEFjdGl2ZSBNb2RlIEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9XQVJOICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE3KSAvLyAoQ0FOKSBXYXJuaW5nIExpbWl0IEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9FUlJQICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE4KSAvLyAoQ0FOKSBFcnJvciBQYXNzaXZlIE1vZGUgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0JPRkYgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTkpIC8vIChDQU4pIEJ1cyBPZmYgTW9kZSBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fU0xFRVAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMCkgLy8gKENBTikgU2xlZXAgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1dBS0VVUCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjEpIC8vIChDQU4pIFdha2V1cCBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fVE9WRiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMikgLy8gKENBTikgVGltZXIgT3ZlcmZsb3cgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1RTVFAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjMpIC8vIChDQU4pIFRpbWVzdGFtcCBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fQ0VSUiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNCkgLy8gKENBTikgQ1JDIEVycm9yDQorI2RlZmluZSBBVDkxQ19DQU5fU0VSUiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNSkgLy8gKENBTikgU3R1ZmZpbmcgRXJyb3INCisjZGVmaW5lIEFUOTFDX0NBTl9BRVJSICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI2KSAvLyAoQ0FOKSBBY2tub3dsZWRnbWVudCBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0ZFUlIgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjcpIC8vIChDQU4pIEZvcm0gRXJyb3INCisjZGVmaW5lIEFUOTFDX0NBTl9CRVJSICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI4KSAvLyAoQ0FOKSBCaXQgRXJyb3INCisvLyAtLS0tLS0tLSBDQU5fSURSIDogKENBTiBPZmZzZXQ6IDB4OCkgQ0FOIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIENBTl9JTVIgOiAoQ0FOIE9mZnNldDogMHhjKSBDQU4gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQ0FOX1NSIDogKENBTiBPZmZzZXQ6IDB4MTApIENBTiBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DQU5fUkJTWSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyOSkgLy8gKENBTikgUmVjZWl2ZXIgQnVzeQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1RCU1kgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMzApIC8vIChDQU4pIFRyYW5zbWl0dGVyIEJ1c3kNCisjZGVmaW5lIEFUOTFDX0NBTl9PVkxZICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDMxKSAvLyAoQ0FOKSBPdmVybG9hZCBCdXN5DQorLy8gLS0tLS0tLS0gQ0FOX0JSIDogKENBTiBPZmZzZXQ6IDB4MTQpIENBTiBCYXVkcmF0ZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0NBTl9QSEFTRTIgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8ICAwKSAvLyAoQ0FOKSBQaGFzZSAyIHNlZ21lbnQNCisjZGVmaW5lIEFUOTFDX0NBTl9QSEFTRTEgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8ICA0KSAvLyAoQ0FOKSBQaGFzZSAxIHNlZ21lbnQNCisjZGVmaW5lIEFUOTFDX0NBTl9QUk9QQUcgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8ICA4KSAvLyAoQ0FOKSBQcm9ncmFtbWF0aW9uIHRpbWUgc2VnbWVudA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1NZTkMgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTIpIC8vIChDQU4pIFJlLXN5bmNocm9uaXphdGlvbiBqdW1wIHdpZHRoIHNlZ21lbnQNCisjZGVmaW5lIEFUOTFDX0NBTl9CUlAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3RiA8PCAxNikgLy8gKENBTikgQmF1ZHJhdGUgUHJlc2NhbGVyDQorI2RlZmluZSBBVDkxQ19DQU5fU01QICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNCkgLy8gKENBTikgU2FtcGxpbmcgbW9kZQ0KKy8vIC0tLS0tLS0tIENBTl9USU0gOiAoQ0FOIE9mZnNldDogMHgxOCkgQ0FOIFRpbWVyIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1RJTUVSICAgICAgICgodW5zaWduZWQgaW50KSAweEZGRkYgPDwgIDApIC8vIChDQU4pIFRpbWVyIGZpZWxkDQorLy8gLS0tLS0tLS0gQ0FOX1RJTUVTVFAgOiAoQ0FOIE9mZnNldDogMHgxYykgQ0FOIFRpbWVzdGFtcCBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBDQU5fRUNSIDogKENBTiBPZmZzZXQ6IDB4MjApIENBTiBFcnJvciBDb3VudGVyIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1JFQyAgICAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8ICAwKSAvLyAoQ0FOKSBSZWNlaXZlIEVycm9yIENvdW50ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9URUMgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRiA8PCAxNikgLy8gKENBTikgVHJhbnNtaXQgRXJyb3IgQ291bnRlcg0KKy8vIC0tLS0tLS0tIENBTl9UQ1IgOiAoQ0FOIE9mZnNldDogMHgyNCkgQ0FOIFRyYW5zZmVyIENvbW1hbmQgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DQU5fVElNUlNUICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAzMSkgLy8gKENBTikgVGltZXIgUmVzZXQgRmllbGQNCisvLyAtLS0tLS0tLSBDQU5fQUNSIDogKENBTiBPZmZzZXQ6IDB4MjgpIENBTiBBYm9ydCBDb21tYW5kIFJlZ2lzdGVyIC0tLS0tLS0tIA0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgRXRoZXJuZXQgTUFDIDEwLzEwMCAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotdHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX0VNQUMNCi17DQotICAgIEFUOTFfUkVHIEVNQUNfTkNSOyAgICAgICAgLyogTmV0d29yayBDb250cm9sIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfTkNGR1I7ICAgICAgLyogTmV0d29yayBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfTlNSOyAgICAgICAgLyogTmV0d29yayBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQwWyAyIF07ICAvKiAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX1RTUjsgICAgICAgIC8qIFRyYW5zbWl0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX1JCUVA7ICAgICAgIC8qIFJlY2VpdmUgQnVmZmVyIFF1ZXVlIFBvaW50ZXIgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19UQlFQOyAgICAgICAvKiBUcmFuc21pdCBCdWZmZXIgUXVldWUgUG9pbnRlciAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX1JTUjsgICAgICAgIC8qIFJlY2VpdmUgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfSVNSOyAgICAgICAgLyogSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX0lFUjsgICAgICAgIC8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19JRFI7ICAgICAgICAvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX0lNUjsgICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfTUFOOyAgICAgICAgLyogUEhZIE1haW50ZW5hbmNlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfUFRSOyAgICAgICAgLyogUGF1c2UgVGltZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX1BGUjsgICAgICAgIC8qIFBhdXNlIEZyYW1lcyByZWNlaXZlZCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX0ZUTzsgICAgICAgIC8qIEZyYW1lcyBUcmFuc21pdHRlZCBPSyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX1NDRjsgICAgICAgIC8qIFNpbmdsZSBDb2xsaXNpb24gRnJhbWUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19NQ0Y7ICAgICAgICAvKiBNdWx0aXBsZSBDb2xsaXNpb24gRnJhbWUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19GUk87ICAgICAgICAvKiBGcmFtZXMgUmVjZWl2ZWQgT0sgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19GQ1NFOyAgICAgICAvKiBGcmFtZSBDaGVjayBTZXF1ZW5jZSBFcnJvciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX0FMRTsgICAgICAgIC8qIEFsaWdubWVudCBFcnJvciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX0RURjsgICAgICAgIC8qIERlZmVycmVkIFRyYW5zbWlzc2lvbiBGcmFtZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX0xDT0w7ICAgICAgIC8qIExhdGUgQ29sbGlzaW9uIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfRUNPTDsgICAgICAgLyogRXhjZXNzaXZlIENvbGxpc2lvbiBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX1RVTkQ7ICAgICAgIC8qIFRyYW5zbWl0IFVuZGVycnVuIEVycm9yIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfQ1NFOyAgICAgICAgLyogQ2FycmllciBTZW5zZSBFcnJvciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX1JSRTsgICAgICAgIC8qIFJlY2VpdmUgUmVzc291cmNlIEVycm9yIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfUk9WOyAgICAgICAgLyogUmVjZWl2ZSBPdmVycnVuIEVycm9ycyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX1JTRTsgICAgICAgIC8qIFJlY2VpdmUgU3ltYm9sIEVycm9ycyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX0VMRTsgICAgICAgIC8qIEV4Y2Vzc2l2ZSBMZW5ndGggRXJyb3JzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfUkpBOyAgICAgICAgLyogUmVjZWl2ZSBKYWJiZXJzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfVVNGOyAgICAgICAgLyogVW5kZXJzaXplIEZyYW1lcyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX1NURTsgICAgICAgIC8qIFNRRSBUZXN0IEVycm9yIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfUkxFOyAgICAgICAgLyogUmVjZWl2ZSBMZW5ndGggRmllbGQgTWlzbWF0Y2ggUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19UUEY7ICAgICAgICAvKiBUcmFuc21pdHRlZCBQYXVzZSBGcmFtZXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19IUkI7ICAgICAgICAvKiBIYXNoIEFkZHJlc3MgQm90dG9tWzMxOjBdICovDQotICAgIEFUOTFfUkVHIEVNQUNfSFJUOyAgICAgICAgLyogSGFzaCBBZGRyZXNzIFRvcFs2MzozMl0gKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19TQTFMOyAgICAgICAvKiBTcGVjaWZpYyBBZGRyZXNzIDEgQm90dG9tLCBGaXJzdCA0IGJ5dGVzICovDQotICAgIEFUOTFfUkVHIEVNQUNfU0ExSDsgICAgICAgLyogU3BlY2lmaWMgQWRkcmVzcyAxIFRvcCwgTGFzdCAyIGJ5dGVzICovDQotICAgIEFUOTFfUkVHIEVNQUNfU0EyTDsgICAgICAgLyogU3BlY2lmaWMgQWRkcmVzcyAyIEJvdHRvbSwgRmlyc3QgNCBieXRlcyAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX1NBMkg7ICAgICAgIC8qIFNwZWNpZmljIEFkZHJlc3MgMiBUb3AsIExhc3QgMiBieXRlcyAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX1NBM0w7ICAgICAgIC8qIFNwZWNpZmljIEFkZHJlc3MgMyBCb3R0b20sIEZpcnN0IDQgYnl0ZXMgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19TQTNIOyAgICAgICAvKiBTcGVjaWZpYyBBZGRyZXNzIDMgVG9wLCBMYXN0IDIgYnl0ZXMgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19TQTRMOyAgICAgICAvKiBTcGVjaWZpYyBBZGRyZXNzIDQgQm90dG9tLCBGaXJzdCA0IGJ5dGVzICovDQotICAgIEFUOTFfUkVHIEVNQUNfU0E0SDsgICAgICAgLyogU3BlY2lmaWMgQWRkcmVzcyA0IFRvcCwgTGFzdCAyIGJ5dGVzICovDQotICAgIEFUOTFfUkVHIEVNQUNfVElEOyAgICAgICAgLyogVHlwZSBJRCBDaGVja2luZyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX1RQUTsgICAgICAgIC8qIFRyYW5zbWl0IFBhdXNlIFF1YW50dW0gUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19VU1JJTzsgICAgICAvKiBVU0VSIElucHV0L091dHB1dCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX1dPTDsgICAgICAgIC8qIFdha2UgT24gTEFOIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMVsgMTMgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19SRVY7ICAgICAgICAvKiBSZXZpc2lvbiBSZWdpc3RlciAqLw0KLX0gQVQ5MVNfRU1BQywgKiBBVDkxUFNfRU1BQzsNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIEV0aGVybmV0IE1BQyAxMC8xMDANCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19FTUFDIHsNCisJQVQ5MV9SRUcJIEVNQUNfTkNSOyAJLy8gTmV0d29yayBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX05DRkdSOyAJLy8gTmV0d29yayBDb25maWd1cmF0aW9uIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX05TUjsgCS8vIE5ldHdvcmsgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbMl07IAkvLyANCisJQVQ5MV9SRUcJIEVNQUNfVFNSOyAJLy8gVHJhbnNtaXQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX1JCUVA7IAkvLyBSZWNlaXZlIEJ1ZmZlciBRdWV1ZSBQb2ludGVyDQorCUFUOTFfUkVHCSBFTUFDX1RCUVA7IAkvLyBUcmFuc21pdCBCdWZmZXIgUXVldWUgUG9pbnRlcg0KKwlBVDkxX1JFRwkgRU1BQ19SU1I7IAkvLyBSZWNlaXZlIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19JU1I7IAkvLyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX0lFUjsgCS8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfTUFOOyAJLy8gUEhZIE1haW50ZW5hbmNlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX1BUUjsgCS8vIFBhdXNlIFRpbWUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfUEZSOyAJLy8gUGF1c2UgRnJhbWVzIHJlY2VpdmVkIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX0ZUTzsgCS8vIEZyYW1lcyBUcmFuc21pdHRlZCBPSyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19TQ0Y7IAkvLyBTaW5nbGUgQ29sbGlzaW9uIEZyYW1lIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX01DRjsgCS8vIE11bHRpcGxlIENvbGxpc2lvbiBGcmFtZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19GUk87IAkvLyBGcmFtZXMgUmVjZWl2ZWQgT0sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfRkNTRTsgCS8vIEZyYW1lIENoZWNrIFNlcXVlbmNlIEVycm9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX0FMRTsgCS8vIEFsaWdubWVudCBFcnJvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19EVEY7IAkvLyBEZWZlcnJlZCBUcmFuc21pc3Npb24gRnJhbWUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfTENPTDsgCS8vIExhdGUgQ29sbGlzaW9uIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX0VDT0w7IAkvLyBFeGNlc3NpdmUgQ29sbGlzaW9uIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX1RVTkQ7IAkvLyBUcmFuc21pdCBVbmRlcnJ1biBFcnJvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19DU0U7IAkvLyBDYXJyaWVyIFNlbnNlIEVycm9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX1JSRTsgCS8vIFJlY2VpdmUgUmVzc291cmNlIEVycm9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX1JPVjsgCS8vIFJlY2VpdmUgT3ZlcnJ1biBFcnJvcnMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfUlNFOyAJLy8gUmVjZWl2ZSBTeW1ib2wgRXJyb3JzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX0VMRTsgCS8vIEV4Y2Vzc2l2ZSBMZW5ndGggRXJyb3JzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX1JKQTsgCS8vIFJlY2VpdmUgSmFiYmVycyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19VU0Y7IAkvLyBVbmRlcnNpemUgRnJhbWVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX1NURTsgCS8vIFNRRSBUZXN0IEVycm9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX1JMRTsgCS8vIFJlY2VpdmUgTGVuZ3RoIEZpZWxkIE1pc21hdGNoIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX1RQRjsgCS8vIFRyYW5zbWl0dGVkIFBhdXNlIEZyYW1lcyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19IUkI7IAkvLyBIYXNoIEFkZHJlc3MgQm90dG9tWzMxOjBdDQorCUFUOTFfUkVHCSBFTUFDX0hSVDsgCS8vIEhhc2ggQWRkcmVzcyBUb3BbNjM6MzJdDQorCUFUOTFfUkVHCSBFTUFDX1NBMUw7IAkvLyBTcGVjaWZpYyBBZGRyZXNzIDEgQm90dG9tLCBGaXJzdCA0IGJ5dGVzDQorCUFUOTFfUkVHCSBFTUFDX1NBMUg7IAkvLyBTcGVjaWZpYyBBZGRyZXNzIDEgVG9wLCBMYXN0IDIgYnl0ZXMNCisJQVQ5MV9SRUcJIEVNQUNfU0EyTDsgCS8vIFNwZWNpZmljIEFkZHJlc3MgMiBCb3R0b20sIEZpcnN0IDQgYnl0ZXMNCisJQVQ5MV9SRUcJIEVNQUNfU0EySDsgCS8vIFNwZWNpZmljIEFkZHJlc3MgMiBUb3AsIExhc3QgMiBieXRlcw0KKwlBVDkxX1JFRwkgRU1BQ19TQTNMOyAJLy8gU3BlY2lmaWMgQWRkcmVzcyAzIEJvdHRvbSwgRmlyc3QgNCBieXRlcw0KKwlBVDkxX1JFRwkgRU1BQ19TQTNIOyAJLy8gU3BlY2lmaWMgQWRkcmVzcyAzIFRvcCwgTGFzdCAyIGJ5dGVzDQorCUFUOTFfUkVHCSBFTUFDX1NBNEw7IAkvLyBTcGVjaWZpYyBBZGRyZXNzIDQgQm90dG9tLCBGaXJzdCA0IGJ5dGVzDQorCUFUOTFfUkVHCSBFTUFDX1NBNEg7IAkvLyBTcGVjaWZpYyBBZGRyZXNzIDQgVG9wLCBMYXN0IDIgYnl0ZXMNCisJQVQ5MV9SRUcJIEVNQUNfVElEOyAJLy8gVHlwZSBJRCBDaGVja2luZyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19UUFE7IAkvLyBUcmFuc21pdCBQYXVzZSBRdWFudHVtIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX1VTUklPOyAJLy8gVVNFUiBJbnB1dC9PdXRwdXQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfV09MOyAJLy8gV2FrZSBPbiBMQU4gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMVsxM107IAkvLyANCisJQVQ5MV9SRUcJIEVNQUNfUkVWOyAJLy8gUmV2aXNpb24gUmVnaXN0ZXINCit9IEFUOTFTX0VNQUMsICpBVDkxUFNfRU1BQzsNCiANCi0vKiAtLS0tLS0tLSBFTUFDX05DUiA6IChFTUFDIE9mZnNldDogMHgwKSAgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfTEIgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgIC8qIChFTUFDKSBMb29wYmFjay4gT3B0aW9uYWwuIFdoZW4gc2V0LCBsb29wYmFjayBzaWduYWwgaXMgYXQgaGlnaCBsZXZlbC4gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfTExCICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgIC8qIChFTUFDKSBMb29wYmFjayBsb2NhbC4gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfUkUgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyICkgIC8qIChFTUFDKSBSZWNlaXZlIGVuYWJsZS4gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfVEUgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzICkgIC8qIChFTUFDKSBUcmFuc21pdCBlbmFibGUuICovDQotI2RlZmluZSBBVDkxQ19FTUFDX01QRSAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNCApICAvKiAoRU1BQykgTWFuYWdlbWVudCBwb3J0IGVuYWJsZS4gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfQ0xSU1RBVCAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA1ICkgIC8qIChFTUFDKSBDbGVhciBzdGF0aXN0aWNzIHJlZ2lzdGVycy4gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfSU5DU1RBVCAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA2ICkgIC8qIChFTUFDKSBJbmNyZW1lbnQgc3RhdGlzdGljcyByZWdpc3RlcnMuICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1dFU1RBVCAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNyApICAvKiAoRU1BQykgV3JpdGUgZW5hYmxlIGZvciBzdGF0aXN0aWNzIHJlZ2lzdGVycy4gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfQlAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgIC8qIChFTUFDKSBCYWNrIHByZXNzdXJlLiAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19UU1RBUlQgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDkgKSAgLyogKEVNQUMpIFN0YXJ0IFRyYW5zbWlzc2lvbi4gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfVEhBTFQgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMCApIC8qIChFTUFDKSBUcmFuc21pc3Npb24gSGFsdC4gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfVFBGUiAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMSApIC8qIChFTUFDKSBUcmFuc21pdCBwYXVzZSBmcmFtZSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19UWlEgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEyICkgLyogKEVNQUMpIFRyYW5zbWl0IHplcm8gcXVhbnR1bSBwYXVzZSBmcmFtZSAqLw0KLS8qIC0tLS0tLS0tIEVNQUNfTkNGR1IgOiAoRU1BQyBPZmZzZXQ6IDB4NCkgTmV0d29yayBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1NQRCAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAvKiAoRU1BQykgU3BlZWQuICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0ZEICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAvKiAoRU1BQykgRnVsbCBkdXBsZXguICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0pGUkFNRSAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMyApICAvKiAoRU1BQykgSnVtYm8gRnJhbWVzLiAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19DQUYgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDQgKSAgLyogKEVNQUMpIENvcHkgYWxsIGZyYW1lcy4gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfTkJDICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA1ICkgIC8qIChFTUFDKSBObyBicm9hZGNhc3QuICovDQotI2RlZmluZSBBVDkxQ19FTUFDX01USSAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNiApICAvKiAoRU1BQykgTXVsdGljYXN0IGhhc2ggZXZlbnQgZW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1VOSSAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNyApICAvKiAoRU1BQykgVW5pY2FzdCBoYXNoIGVuYWJsZS4gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfQklHICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgIC8qIChFTUFDKSBSZWNlaXZlIDE1MjIgYnl0ZXMuICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0VBRSAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOSApICAvKiAoRU1BQykgRXh0ZXJuYWwgYWRkcmVzcyBtYXRjaCBlbmFibGUuICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0NMSyAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTAgKSAvKiAoRU1BQykgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19FTUFDX0NMS19IQ0xLXzggICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAxMCApIC8qIChFTUFDKSBIQ0xLIGRpdmlkZWQgYnkgOCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0VNQUNfQ0xLX0hDTEtfMTYgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEwICkgLyogKEVNQUMpIEhDTEsgZGl2aWRlZCBieSAxNiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0VNQUNfQ0xLX0hDTEtfMzIgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDEwICkgLyogKEVNQUMpIEhDTEsgZGl2aWRlZCBieSAzMiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0VNQUNfQ0xLX0hDTEtfNjQgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDEwICkgLyogKEVNQUMpIEhDTEsgZGl2aWRlZCBieSA2NCAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19SVFkgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEyICkgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1BBRSAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTMgKSAvKiAoRU1BQykgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfUkJPRiAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAxNCApIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0VNQUNfUkJPRl9PRkZTRVRfMCAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDE0ICkgLyogKEVNQUMpIG5vIG9mZnNldCBmcm9tIHN0YXJ0IG9mIHJlY2VpdmUgYnVmZmVyICovDQotI2RlZmluZSAgICAgQVQ5MUNfRU1BQ19SQk9GX09GRlNFVF8xICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTQgKSAvKiAoRU1BQykgb25lIGJ5dGUgb2Zmc2V0IGZyb20gc3RhcnQgb2YgcmVjZWl2ZSBidWZmZXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19FTUFDX1JCT0ZfT0ZGU0VUXzIgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCAxNCApIC8qIChFTUFDKSB0d28gYnl0ZXMgb2Zmc2V0IGZyb20gc3RhcnQgb2YgcmVjZWl2ZSBidWZmZXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19FTUFDX1JCT0ZfT0ZGU0VUXzMgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAxNCApIC8qIChFTUFDKSB0aHJlZSBieXRlcyBvZmZzZXQgZnJvbSBzdGFydCBvZiByZWNlaXZlIGJ1ZmZlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19STENFICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE2ICkgLyogKEVNQUMpIFJlY2VpdmUgTGVuZ3RoIGZpZWxkIENoZWNraW5nIEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19EUkZDUyAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE3ICkgLyogKEVNQUMpIERpc2NhcmQgUmVjZWl2ZSBGQ1MgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfRUZSSEQgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxOCApIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19JUlhGQ1MgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE5ICkgLyogKEVNQUMpIElnbm9yZSBSWCBGQ1MgKi8NCi0vKiAtLS0tLS0tLSBFTUFDX05TUiA6IChFTUFDIE9mZnNldDogMHg4KSBOZXR3b3JrIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19MSU5LUiAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX01ESU8gICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAvKiAoRU1BQykgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfSURMRSAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyICkgIC8qIChFTUFDKSAqLw0KLS8qIC0tLS0tLS0tIEVNQUNfVFNSIDogKEVNQUMgT2Zmc2V0OiAweDE0KSBUcmFuc21pdCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfVUJSICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19DT0wgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEgKSAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1JMRVMgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMiApICAvKiAoRU1BQykgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfVEdPICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzICkgIC8qIChFTUFDKSBUcmFuc21pdCBHbyAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19CRVggICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDQgKSAgLyogKEVNQUMpIEJ1ZmZlcnMgZXhoYXVzdGVkIG1pZCBmcmFtZSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19DT01QICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDUgKSAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1VORCAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNiApICAvKiAoRU1BQykgKi8NCi0vKiAtLS0tLS0tLSBFTUFDX1JTUiA6IChFTUFDIE9mZnNldDogMHgyMCkgUmVjZWl2ZSBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfQk5BICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19SRUMgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEgKSAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX09WUiAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMiApICAvKiAoRU1BQykgKi8NCi0vKiAtLS0tLS0tLSBFTUFDX0lTUiA6IChFTUFDIE9mZnNldDogMHgyNCkgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19NRkQgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1JDT01QICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAvKiAoRU1BQykgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfUlhVQlIgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyICkgIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19UWFVCUiAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDMgKSAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1RVTkRSICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNCApICAvKiAoRU1BQykgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfUkxFWCAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA1ICkgIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19UWEVSUiAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDYgKSAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1RDT01QICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNyApICAvKiAoRU1BQykgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfTElOSyAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA5ICkgIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19ST1ZSICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEwICkgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0hSRVNQICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTEgKSAvKiAoRU1BQykgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfUEZSRSAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMiApIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19QVFogICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEzICkgLyogKEVNQUMpICovDQotLyogLS0tLS0tLS0gRU1BQ19JRVIgOiAoRU1BQyBPZmZzZXQ6IDB4MjgpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBFTUFDX0lEUiA6IChFTUFDIE9mZnNldDogMHgyYykgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBFTUFDX0lNUiA6IChFTUFDIE9mZnNldDogMHgzMCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBFTUFDX01BTiA6IChFTUFDIE9mZnNldDogMHgzNCkgUEhZIE1haW50ZW5hbmNlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0RBVEEgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RkZGRiA8PCAwICkgIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19DT0RFICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTYgKSAgICAvKiAoRU1BQykgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfUkVHQSAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxRiA8PCAxOCApICAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1BIWUEgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MUYgPDwgMjMgKSAgIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19SVyAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMjggKSAgICAvKiAoRU1BQykgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfU09GICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDMwICkgICAgLyogKEVNQUMpICovDQotLyogLS0tLS0tLS0gRU1BQ19VU1JJTyA6IChFTUFDIE9mZnNldDogMHhjMCkgVVNFUiBJbnB1dCBPdXRwdXQgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfUk1JSSAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgICAgLyogKEVNQUMpIFJlZHVjZSBNSUkgKi8NCi0vKiAtLS0tLS0tLSBFTUFDX1dPTCA6IChFTUFDIE9mZnNldDogMHhjNCkgV2FrZSBPbiBMQU4gUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfSVAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRkZGIDw8IDAgKSAgLyogKEVNQUMpIEFSUCByZXF1ZXN0IElQIGFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfTUFHICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE2ICkgICAgLyogKEVNQUMpIE1hZ2ljIHBhY2tldCBldmVudCBlbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfQVJQICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE3ICkgICAgLyogKEVNQUMpIEFSUCByZXF1ZXN0IGV2ZW50IGVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19TQTEgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTggKSAgICAvKiAoRU1BQykgU3BlY2lmaWMgYWRkcmVzcyByZWdpc3RlciAxIGV2ZW50IGVuYWJsZSAqLw0KLS8qIC0tLS0tLS0tIEVNQUNfUkVWIDogKEVNQUMgT2Zmc2V0OiAweGZjKSBSZXZpc2lvbiBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19SRVZSRUYgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGRkYgPDwgMCApICAvKiAoRU1BQykgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfUEFSVFJFRiAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRkZGIDw8IDE2ICkgLyogKEVNQUMpICovDQorLy8gLS0tLS0tLS0gRU1BQ19OQ1IgOiAoRU1BQyBPZmZzZXQ6IDB4MCkgIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19MQiAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChFTUFDKSBMb29wYmFjay4gT3B0aW9uYWwuIFdoZW4gc2V0LCBsb29wYmFjayBzaWduYWwgaXMgYXQgaGlnaCBsZXZlbC4NCisjZGVmaW5lIEFUOTFDX0VNQUNfTExCICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoRU1BQykgTG9vcGJhY2sgbG9jYWwuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SRSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChFTUFDKSBSZWNlaXZlIGVuYWJsZS4gDQorI2RlZmluZSBBVDkxQ19FTUFDX1RFICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKEVNQUMpIFRyYW5zbWl0IGVuYWJsZS4gDQorI2RlZmluZSBBVDkxQ19FTUFDX01QRSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKEVNQUMpIE1hbmFnZW1lbnQgcG9ydCBlbmFibGUuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19DTFJTVEFUICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChFTUFDKSBDbGVhciBzdGF0aXN0aWNzIHJlZ2lzdGVycy4gDQorI2RlZmluZSBBVDkxQ19FTUFDX0lOQ1NUQVQgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLy8gKEVNQUMpIEluY3JlbWVudCBzdGF0aXN0aWNzIHJlZ2lzdGVycy4gDQorI2RlZmluZSBBVDkxQ19FTUFDX1dFU1RBVCAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKEVNQUMpIFdyaXRlIGVuYWJsZSBmb3Igc3RhdGlzdGljcyByZWdpc3RlcnMuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19CUCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChFTUFDKSBCYWNrIHByZXNzdXJlLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfVFNUQVJUICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvLyAoRU1BQykgU3RhcnQgVHJhbnNtaXNzaW9uLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfVEhBTFQgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEwKSAvLyAoRU1BQykgVHJhbnNtaXNzaW9uIEhhbHQuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19UUEZSICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTEpIC8vIChFTUFDKSBUcmFuc21pdCBwYXVzZSBmcmFtZSANCisjZGVmaW5lIEFUOTFDX0VNQUNfVFpRICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvLyAoRU1BQykgVHJhbnNtaXQgemVybyBxdWFudHVtIHBhdXNlIGZyYW1lDQorLy8gLS0tLS0tLS0gRU1BQ19OQ0ZHUiA6IChFTUFDIE9mZnNldDogMHg0KSBOZXR3b3JrIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19FTUFDX1NQRCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKEVNQUMpIFNwZWVkLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfRkQgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoRU1BQykgRnVsbCBkdXBsZXguIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19KRlJBTUUgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChFTUFDKSBKdW1ibyBGcmFtZXMuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19DQUYgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChFTUFDKSBDb3B5IGFsbCBmcmFtZXMuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19OQkMgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChFTUFDKSBObyBicm9hZGNhc3QuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19NVEkgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChFTUFDKSBNdWx0aWNhc3QgaGFzaCBldmVudCBlbmFibGUNCisjZGVmaW5lIEFUOTFDX0VNQUNfVU5JICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoRU1BQykgVW5pY2FzdCBoYXNoIGVuYWJsZS4gDQorI2RlZmluZSBBVDkxQ19FTUFDX0JJRyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKEVNQUMpIFJlY2VpdmUgMTUyMiBieXRlcy4gDQorI2RlZmluZSBBVDkxQ19FTUFDX0VBRSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLy8gKEVNQUMpIEV4dGVybmFsIGFkZHJlc3MgbWF0Y2ggZW5hYmxlLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfQ0xLICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDEwKSAvLyAoRU1BQykgDQorI2RlZmluZSAJQVQ5MUNfRU1BQ19DTEtfSENMS184ICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAxMCkgLy8gKEVNQUMpIEhDTEsgZGl2aWRlZCBieSA4DQorI2RlZmluZSAJQVQ5MUNfRU1BQ19DTEtfSENMS18xNiAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLy8gKEVNQUMpIEhDTEsgZGl2aWRlZCBieSAxNg0KKyNkZWZpbmUgCUFUOTFDX0VNQUNfQ0xLX0hDTEtfMzIgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMTApIC8vIChFTUFDKSBIQ0xLIGRpdmlkZWQgYnkgMzINCisjZGVmaW5lIAlBVDkxQ19FTUFDX0NMS19IQ0xLXzY0ICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDEwKSAvLyAoRU1BQykgSENMSyBkaXZpZGVkIGJ5IDY0DQorI2RlZmluZSBBVDkxQ19FTUFDX1JUWSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19QQUUgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTMpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUkJPRiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE0KSAvLyAoRU1BQykgDQorI2RlZmluZSAJQVQ5MUNfRU1BQ19SQk9GX09GRlNFVF8wICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMTQpIC8vIChFTUFDKSBubyBvZmZzZXQgZnJvbSBzdGFydCBvZiByZWNlaXZlIGJ1ZmZlcg0KKyNkZWZpbmUgCUFUOTFDX0VNQUNfUkJPRl9PRkZTRVRfMSAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE0KSAvLyAoRU1BQykgb25lIGJ5dGUgb2Zmc2V0IGZyb20gc3RhcnQgb2YgcmVjZWl2ZSBidWZmZXINCisjZGVmaW5lIAlBVDkxQ19FTUFDX1JCT0ZfT0ZGU0VUXzIgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxNCkgLy8gKEVNQUMpIHR3byBieXRlcyBvZmZzZXQgZnJvbSBzdGFydCBvZiByZWNlaXZlIGJ1ZmZlcg0KKyNkZWZpbmUgCUFUOTFDX0VNQUNfUkJPRl9PRkZTRVRfMyAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE0KSAvLyAoRU1BQykgdGhyZWUgYnl0ZXMgb2Zmc2V0IGZyb20gc3RhcnQgb2YgcmVjZWl2ZSBidWZmZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfUkxDRSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoRU1BQykgUmVjZWl2ZSBMZW5ndGggZmllbGQgQ2hlY2tpbmcgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19FTUFDX0RSRkNTICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNykgLy8gKEVNQUMpIERpc2NhcmQgUmVjZWl2ZSBGQ1MNCisjZGVmaW5lIEFUOTFDX0VNQUNfRUZSSEQgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE4KSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX0lSWEZDUyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOSkgLy8gKEVNQUMpIElnbm9yZSBSWCBGQ1MNCisvLyAtLS0tLS0tLSBFTUFDX05TUiA6IChFTUFDIE9mZnNldDogMHg4KSBOZXR3b3JrIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0VNQUNfTElOS1IgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX01ESU8gICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19JRExFICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChFTUFDKSANCisvLyAtLS0tLS0tLSBFTUFDX1RTUiA6IChFTUFDIE9mZnNldDogMHgxNCkgVHJhbnNtaXQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19VQlIgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfQ09MICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1JMRVMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19UR08gICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChFTUFDKSBUcmFuc21pdCBHbw0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19CRVggICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChFTUFDKSBCdWZmZXJzIGV4aGF1c3RlZCBtaWQgZnJhbWUNCisjZGVmaW5lIEFUOTFDX0VNQUNfQ09NUCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1VORCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLy8gKEVNQUMpIA0KKy8vIC0tLS0tLS0tIEVNQUNfUlNSIDogKEVNQUMgT2Zmc2V0OiAweDIwKSBSZWNlaXZlIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0VNQUNfQk5BICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1JFQyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19PVlIgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChFTUFDKSANCisvLyAtLS0tLS0tLSBFTUFDX0lTUiA6IChFTUFDIE9mZnNldDogMHgyNCkgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0VNQUNfTUZEICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1JDT01QICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SWFVCUiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfVFhVQlIgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1RVTkRSICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19STEVYICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfVFhFUlIgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1RDT01QICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19MSU5LICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUk9WUiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEwKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX0hSRVNQICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMSkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19QRlJFICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUFRaICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEzKSAvLyAoRU1BQykgDQorLy8gLS0tLS0tLS0gRU1BQ19JRVIgOiAoRU1BQyBPZmZzZXQ6IDB4MjgpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gRU1BQ19JRFIgOiAoRU1BQyBPZmZzZXQ6IDB4MmMpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEVNQUNfSU1SIDogKEVNQUMgT2Zmc2V0OiAweDMwKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBFTUFDX01BTiA6IChFTUFDIE9mZnNldDogMHgzNCkgUEhZIE1haW50ZW5hbmNlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19EQVRBICAgICAgICgodW5zaWduZWQgaW50KSAweEZGRkYgPDwgIDApIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfQ09ERSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE2KSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1JFR0EgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MUYgPDwgMTgpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUEhZQSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxRiA8PCAyMykgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SVyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMjgpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfU09GICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDMwKSAvLyAoRU1BQykgDQorLy8gLS0tLS0tLS0gRU1BQ19VU1JJTyA6IChFTUFDIE9mZnNldDogMHhjMCkgVVNFUiBJbnB1dCBPdXRwdXQgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19FTUFDX1JNSUkgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKEVNQUMpIFJlZHVjZSBNSUkNCisvLyAtLS0tLS0tLSBFTUFDX1dPTCA6IChFTUFDIE9mZnNldDogMHhjNCkgV2FrZSBPbiBMQU4gUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19FTUFDX0lQICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGRiA8PCAgMCkgLy8gKEVNQUMpIEFSUCByZXF1ZXN0IElQIGFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0VNQUNfTUFHICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoRU1BQykgTWFnaWMgcGFja2V0IGV2ZW50IGVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19BUlAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTcpIC8vIChFTUFDKSBBUlAgcmVxdWVzdCBldmVudCBlbmFibGUNCisjZGVmaW5lIEFUOTFDX0VNQUNfU0ExICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE4KSAvLyAoRU1BQykgU3BlY2lmaWMgYWRkcmVzcyByZWdpc3RlciAxIGV2ZW50IGVuYWJsZQ0KKy8vIC0tLS0tLS0tIEVNQUNfUkVWIDogKEVNQUMgT2Zmc2V0OiAweGZjKSBSZXZpc2lvbiBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUkVWUkVGICAgICAoKHVuc2lnbmVkIGludCkgMHhGRkZGIDw8ICAwKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1BBUlRSRUYgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGRiA8PCAxNikgLy8gKEVNQUMpIA0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQW5hbG9nIHRvIERpZ2l0YWwgQ29udmVydG9yICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfQURDDQotew0KLSAgICBBVDkxX1JFRyBBRENfQ1I7ICAgICAgICAgIC8qIEFEQyBDb250cm9sIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFEQ19NUjsgICAgICAgICAgLyogQURDIE1vZGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQwWyAyIF07ICAvKiAqLw0KLSAgICBBVDkxX1JFRyBBRENfQ0hFUjsgICAgICAgIC8qIEFEQyBDaGFubmVsIEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBRENfQ0hEUjsgICAgICAgIC8qIEFEQyBDaGFubmVsIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQURDX0NIU1I7ICAgICAgICAvKiBBREMgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQURDX1NSOyAgICAgICAgICAvKiBBREMgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFEQ19MQ0RSOyAgICAgICAgLyogQURDIExhc3QgQ29udmVydGVkIERhdGEgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQURDX0lFUjsgICAgICAgICAvKiBBREMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBRENfSURSOyAgICAgICAgIC8qIEFEQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBRENfSU1SOyAgICAgICAgIC8qIEFEQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBRENfQ0RSMDsgICAgICAgIC8qIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMCAqLw0KLSAgICBBVDkxX1JFRyBBRENfQ0RSMTsgICAgICAgIC8qIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMSAqLw0KLSAgICBBVDkxX1JFRyBBRENfQ0RSMjsgICAgICAgIC8qIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMiAqLw0KLSAgICBBVDkxX1JFRyBBRENfQ0RSMzsgICAgICAgIC8qIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMyAqLw0KLSAgICBBVDkxX1JFRyBBRENfQ0RSNDsgICAgICAgIC8qIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNCAqLw0KLSAgICBBVDkxX1JFRyBBRENfQ0RSNTsgICAgICAgIC8qIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNSAqLw0KLSAgICBBVDkxX1JFRyBBRENfQ0RSNjsgICAgICAgIC8qIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNiAqLw0KLSAgICBBVDkxX1JFRyBBRENfQ0RSNzsgICAgICAgIC8qIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNyAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDFbIDQ0IF07IC8qICovDQotICAgIEFUOTFfUkVHIEFEQ19SUFI7ICAgICAgICAgLyogUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFEQ19SQ1I7ICAgICAgICAgLyogUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFEQ19UUFI7ICAgICAgICAgLyogVHJhbnNtaXQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBRENfVENSOyAgICAgICAgIC8qIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQURDX1JOUFI7ICAgICAgICAvKiBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBRENfUk5DUjsgICAgICAgIC8qIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFEQ19UTlBSOyAgICAgICAgLyogVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFEQ19UTkNSOyAgICAgICAgLyogVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFEQ19QVENSOyAgICAgICAgLyogUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQURDX1BUU1I7ICAgICAgICAvKiBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotfSBBVDkxU19BREMsICogQVQ5MVBTX0FEQzsNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIEFuYWxvZyB0byBEaWdpdGFsIENvbnZlcnRvcg0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX0FEQyB7DQorCUFUOTFfUkVHCSBBRENfQ1I7IAkvLyBBREMgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX01SOyAJLy8gQURDIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFsyXTsgCS8vIA0KKwlBVDkxX1JFRwkgQURDX0NIRVI7IAkvLyBBREMgQ2hhbm5lbCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19DSERSOyAJLy8gQURDIENoYW5uZWwgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX0NIU1I7IAkvLyBBREMgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19TUjsgCS8vIEFEQyBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19MQ0RSOyAJLy8gQURDIExhc3QgQ29udmVydGVkIERhdGEgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19JRVI7IAkvLyBBREMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX0lEUjsgCS8vIEFEQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX0lNUjsgCS8vIEFEQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX0NEUjA7IAkvLyBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDANCisJQVQ5MV9SRUcJIEFEQ19DRFIxOyAJLy8gQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAxDQorCUFUOTFfUkVHCSBBRENfQ0RSMjsgCS8vIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMg0KKwlBVDkxX1JFRwkgQURDX0NEUjM7IAkvLyBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDMNCisJQVQ5MV9SRUcJIEFEQ19DRFI0OyAJLy8gQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA0DQorCUFUOTFfUkVHCSBBRENfQ0RSNTsgCS8vIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNQ0KKwlBVDkxX1JFRwkgQURDX0NEUjY7IAkvLyBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDYNCisJQVQ5MV9SRUcJIEFEQ19DRFI3OyAJLy8gQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA3DQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbNDRdOyAJLy8gDQorCUFUOTFfUkVHCSBBRENfUlBSOyAJLy8gUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfUkNSOyAJLy8gUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfVFBSOyAJLy8gVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX1RDUjsgCS8vIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19STlBSOyAJLy8gUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19STkNSOyAJLy8gUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19UTlBSOyAJLy8gVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfVE5DUjsgCS8vIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX1BUQ1I7IAkvLyBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX1BUU1I7IAkvLyBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorfSBBVDkxU19BREMsICpBVDkxUFNfQURDOw0KIA0KLS8qIC0tLS0tLS0tIEFEQ19DUiA6IChBREMgT2Zmc2V0OiAweDApIEFEQyBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19BRENfU1dSU1QgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgLyogKEFEQykgU29mdHdhcmUgUmVzZXQgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19TVEFSVCAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgICAvKiAoQURDKSBTdGFydCBDb252ZXJzaW9uICovDQotLyogLS0tLS0tLS0gQURDX01SIDogKEFEQyBPZmZzZXQ6IDB4NCkgQURDIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19UUkdFTiAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgICAvKiAoQURDKSBUcmlnZ2VyIEVuYWJsZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FEQ19UUkdFTl9ESVMgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwICkgICAgICAgIC8qIChBREMpIEhyYWR3YXJlIHRyaWdnZXJzIGFyZSBkaXNhYmxlZC4gU3RhcnRpbmcgYSBjb252ZXJzaW9uIGlzIG9ubHkgcG9zc2libGUgYnkgc29mdHdhcmUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRENfVFJHRU5fRU4gICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSApICAgICAgICAvKiAoQURDKSBIYXJkd2FyZSB0cmlnZ2VyIHNlbGVjdGVkIGJ5IFRSR1NFTCBmaWVsZCBpcyBlbmFibGVkLiAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1RSR1NFTCAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg3IDw8IDEgKSAgIC8qIChBREMpIFRyaWdnZXIgU2VsZWN0aW9uICovDQotI2RlZmluZSAgICAgQVQ5MUNfQURDX1RSR1NFTF9USU9BMCAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMSApICAgLyogKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gVElBTzAgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRENfVFJHU0VMX1RJT0ExICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgICAvKiAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPMSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FEQ19UUkdTRUxfVElPQTIgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDEgKSAgIC8qIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IFRJQU8yICovDQotI2RlZmluZSAgICAgQVQ5MUNfQURDX1RSR1NFTF9USU9BMyAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMSApICAgLyogKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gVElBTzMgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRENfVFJHU0VMX1RJT0E0ICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NCA8PCAxICkgICAvKiAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPNCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FEQ19UUkdTRUxfVElPQTUgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg1IDw8IDEgKSAgIC8qIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IFRJQU81ICovDQotI2RlZmluZSAgICAgQVQ5MUNfQURDX1RSR1NFTF9FWFQgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDYgPDwgMSApICAgLyogKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gRXh0ZXJuYWwgVHJpZ2dlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0xPV1JFUyAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDQgKSAgIC8qIChBREMpIFJlc29sdXRpb24uICovDQotI2RlZmluZSAgICAgQVQ5MUNfQURDX0xPV1JFU18xMF9CSVQgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgNCApICAgLyogKEFEQykgMTAtYml0IHJlc29sdXRpb24gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRENfTE9XUkVTXzhfQklUICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA0ICkgICAvKiAoQURDKSA4LWJpdCByZXNvbHV0aW9uICovDQotI2RlZmluZSBBVDkxQ19BRENfU0xFRVAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNSApICAgLyogKEFEQykgU2xlZXAgTW9kZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FEQ19TTEVFUF9OT1JNQUxfTU9ERSAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDUgKSAgIC8qIChBREMpIE5vcm1hbCBNb2RlICovDQotI2RlZmluZSAgICAgQVQ5MUNfQURDX1NMRUVQX01PREUgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNSApICAgLyogKEFEQykgU2xlZXAgTW9kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1BSRVNDQUwgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzRiA8PCA4ICkgIC8qIChBREMpIFByZXNjYWxlciByYXRlIHNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1NUQVJUVVAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxRiA8PCAxNiApIC8qIChBREMpIFN0YXJ0dXAgVGltZSAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1NIVElNICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGIDw8IDI0ICkgIC8qIChBREMpIFNhbXBsZSAmIEhvbGQgVGltZSAqLw0KLS8qIC0tLS0tLS0tICAgICBBRENfQ0hFUiA6IChBREMgT2Zmc2V0OiAweDEwKSBBREMgQ2hhbm5lbCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DSDAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgICAvKiAoQURDKSBDaGFubmVsIDAgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DSDEgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgICAvKiAoQURDKSBDaGFubmVsIDEgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DSDIgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyICkgICAvKiAoQURDKSBDaGFubmVsIDIgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DSDMgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzICkgICAvKiAoQURDKSBDaGFubmVsIDMgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DSDQgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA0ICkgICAvKiAoQURDKSBDaGFubmVsIDQgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DSDUgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA1ICkgICAvKiAoQURDKSBDaGFubmVsIDUgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DSDYgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA2ICkgICAvKiAoQURDKSBDaGFubmVsIDYgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DSDcgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA3ICkgICAvKiAoQURDKSBDaGFubmVsIDcgKi8NCi0vKiAtLS0tLS0tLSAgICAgQURDX0NIRFIgOiAoQURDIE9mZnNldDogMHgxNCkgQURDIENoYW5uZWwgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tICAgICBBRENfQ0hTUiA6IChBREMgT2Zmc2V0OiAweDE4KSBBREMgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBBRENfU1IgOiAoQURDIE9mZnNldDogMHgxYykgQURDIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0VPQzAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgIC8qIChBREMpIEVuZCBvZiBDb252ZXJzaW9uICovDQotI2RlZmluZSBBVDkxQ19BRENfRU9DMSAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAgLyogKEFEQykgRW5kIG9mIENvbnZlcnNpb24gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19FT0MyICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyICkgICAvKiAoQURDKSBFbmQgb2YgQ29udmVyc2lvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0VPQzMgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDMgKSAgIC8qIChBREMpIEVuZCBvZiBDb252ZXJzaW9uICovDQotI2RlZmluZSBBVDkxQ19BRENfRU9DNCAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNCApICAgLyogKEFEQykgRW5kIG9mIENvbnZlcnNpb24gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19FT0M1ICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA1ICkgICAvKiAoQURDKSBFbmQgb2YgQ29udmVyc2lvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0VPQzYgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDYgKSAgIC8qIChBREMpIEVuZCBvZiBDb252ZXJzaW9uICovDQotI2RlZmluZSBBVDkxQ19BRENfRU9DNyAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNyApICAgLyogKEFEQykgRW5kIG9mIENvbnZlcnNpb24gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19PVlJFMCAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgICAvKiAoQURDKSBPdmVycnVuIEVycm9yICovDQotI2RlZmluZSBBVDkxQ19BRENfT1ZSRTEgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOSApICAgLyogKEFEQykgT3ZlcnJ1biBFcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX09WUkUyICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEwICkgIC8qIChBREMpIE92ZXJydW4gRXJyb3IgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19PVlJFMyAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMSApICAvKiAoQURDKSBPdmVycnVuIEVycm9yICovDQotI2RlZmluZSBBVDkxQ19BRENfT1ZSRTQgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTIgKSAgLyogKEFEQykgT3ZlcnJ1biBFcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX09WUkU1ICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEzICkgIC8qIChBREMpIE92ZXJydW4gRXJyb3IgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19PVlJFNiAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNCApICAvKiAoQURDKSBPdmVycnVuIEVycm9yICovDQotI2RlZmluZSBBVDkxQ19BRENfT1ZSRTcgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTUgKSAgLyogKEFEQykgT3ZlcnJ1biBFcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0RSRFkgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE2ICkgIC8qIChBREMpIERhdGEgUmVhZHkgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19HT1ZSRSAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNyApICAvKiAoQURDKSBHZW5lcmFsIE92ZXJydW4gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19FTkRSWCAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxOCApICAvKiAoQURDKSBFbmQgb2YgUmVjZWl2ZXIgVHJhbnNmZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19SWEJVRkYgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxOSApICAvKiAoQURDKSBSWEJVRkYgSW50ZXJydXB0ICovDQotLyogLS0tLS0tLS0gQURDX0xDRFIgOiAoQURDIE9mZnNldDogMHgyMCkgQURDIExhc3QgQ29udmVydGVkIERhdGEgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19MREFUQSAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4M0ZGIDw8IDAgKSAvKiAoQURDKSBMYXN0IERhdGEgQ29udmVydGVkICovDQotLyogLS0tLS0tLS0gQURDX0lFUiA6IChBREMgT2Zmc2V0OiAweDI0KSBBREMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIEFEQ19JRFIgOiAoQURDIE9mZnNldDogMHgyOCkgQURDIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQURDX0lNUiA6IChBREMgT2Zmc2V0OiAweDJjKSBBREMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBBRENfQ0RSMCA6IChBREMgT2Zmc2V0OiAweDMwKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDAgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19EQVRBICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDNGRiA8PCAwICkgIC8qIChBREMpIENvbnZlcnRlZCBEYXRhICovDQotLyogLS0tLS0tLS0gQURDX0NEUjEgOiAoQURDIE9mZnNldDogMHgzNCkgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAxIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQURDX0NEUjIgOiAoQURDIE9mZnNldDogMHgzOCkgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQURDX0NEUjMgOiAoQURDIE9mZnNldDogMHgzYykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAzIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQURDX0NEUjQgOiAoQURDIE9mZnNldDogMHg0MCkgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA0IC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQURDX0NEUjUgOiAoQURDIE9mZnNldDogMHg0NCkgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA1IC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQURDX0NEUjYgOiAoQURDIE9mZnNldDogMHg0OCkgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA2IC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQURDX0NEUjcgOiAoQURDIE9mZnNldDogMHg0YykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA3IC0tLS0tLS0tICovDQorLy8gLS0tLS0tLS0gQURDX0NSIDogKEFEQyBPZmZzZXQ6IDB4MCkgQURDIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BRENfU1dSU1QgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKEFEQykgU29mdHdhcmUgUmVzZXQNCisjZGVmaW5lIEFUOTFDX0FEQ19TVEFSVCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoQURDKSBTdGFydCBDb252ZXJzaW9uDQorLy8gLS0tLS0tLS0gQURDX01SIDogKEFEQyBPZmZzZXQ6IDB4NCkgQURDIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BRENfVFJHRU4gICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKEFEQykgVHJpZ2dlciBFbmFibGUNCisjZGVmaW5lIAlBVDkxQ19BRENfVFJHRU5fRElTICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCkgLy8gKEFEQykgSHJhZHdhcmUgdHJpZ2dlcnMgYXJlIGRpc2FibGVkLiBTdGFydGluZyBhIGNvbnZlcnNpb24gaXMgb25seSBwb3NzaWJsZSBieSBzb2Z0d2FyZQ0KKyNkZWZpbmUgCUFUOTFDX0FEQ19UUkdFTl9FTiAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxKSAvLyAoQURDKSBIYXJkd2FyZSB0cmlnZ2VyIHNlbGVjdGVkIGJ5IFRSR1NFTCBmaWVsZCBpcyBlbmFibGVkLg0KKyNkZWZpbmUgQVQ5MUNfQURDX1RSR1NFTCAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgIDEpIC8vIChBREMpIFRyaWdnZXIgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfQURDX1RSR1NFTF9USU9BMCAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICAxKSAvLyAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPMA0KKyNkZWZpbmUgCUFUOTFDX0FEQ19UUkdTRUxfVElPQTEgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gVElBTzENCisjZGVmaW5lIAlBVDkxQ19BRENfVFJHU0VMX1RJT0EyICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDEpIC8vIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IFRJQU8yDQorI2RlZmluZSAJQVQ5MUNfQURDX1RSR1NFTF9USU9BMyAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICAxKSAvLyAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPMw0KKyNkZWZpbmUgCUFUOTFDX0FEQ19UUkdTRUxfVElPQTQgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NCA8PCAgMSkgLy8gKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gVElBTzQNCisjZGVmaW5lIAlBVDkxQ19BRENfVFJHU0VMX1RJT0E1ICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDUgPDwgIDEpIC8vIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IFRJQU81DQorI2RlZmluZSAJQVQ5MUNfQURDX1RSR1NFTF9FWFQgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg2IDw8ICAxKSAvLyAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBFeHRlcm5hbCBUcmlnZ2VyDQorI2RlZmluZSBBVDkxQ19BRENfTE9XUkVTICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKEFEQykgUmVzb2x1dGlvbi4NCisjZGVmaW5lIAlBVDkxQ19BRENfTE9XUkVTXzEwX0JJVCAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDQpIC8vIChBREMpIDEwLWJpdCByZXNvbHV0aW9uDQorI2RlZmluZSAJQVQ5MUNfQURDX0xPV1JFU184X0JJVCAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoQURDKSA4LWJpdCByZXNvbHV0aW9uDQorI2RlZmluZSBBVDkxQ19BRENfU0xFRVAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKEFEQykgU2xlZXAgTW9kZQ0KKyNkZWZpbmUgCUFUOTFDX0FEQ19TTEVFUF9OT1JNQUxfTU9ERSAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA1KSAvLyAoQURDKSBOb3JtYWwgTW9kZQ0KKyNkZWZpbmUgCUFUOTFDX0FEQ19TTEVFUF9NT0RFICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoQURDKSBTbGVlcCBNb2RlDQorI2RlZmluZSBBVDkxQ19BRENfUFJFU0NBTCAgICAgKCh1bnNpZ25lZCBpbnQpIDB4M0YgPDwgIDgpIC8vIChBREMpIFByZXNjYWxlciByYXRlIHNlbGVjdGlvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX1NUQVJUVVAgICAgICgodW5zaWduZWQgaW50KSAweDFGIDw8IDE2KSAvLyAoQURDKSBTdGFydHVwIFRpbWUNCisjZGVmaW5lIEFUOTFDX0FEQ19TSFRJTSAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8IDI0KSAvLyAoQURDKSBTYW1wbGUgJiBIb2xkIFRpbWUNCisvLyAtLS0tLS0tLSAJQURDX0NIRVIgOiAoQURDIE9mZnNldDogMHgxMCkgQURDIENoYW5uZWwgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQURDX0NIMCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChBREMpIENoYW5uZWwgMA0KKyNkZWZpbmUgQVQ5MUNfQURDX0NIMSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChBREMpIENoYW5uZWwgMQ0KKyNkZWZpbmUgQVQ5MUNfQURDX0NIMiAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChBREMpIENoYW5uZWwgMg0KKyNkZWZpbmUgQVQ5MUNfQURDX0NIMyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChBREMpIENoYW5uZWwgMw0KKyNkZWZpbmUgQVQ5MUNfQURDX0NINCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChBREMpIENoYW5uZWwgNA0KKyNkZWZpbmUgQVQ5MUNfQURDX0NINSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChBREMpIENoYW5uZWwgNQ0KKyNkZWZpbmUgQVQ5MUNfQURDX0NINiAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChBREMpIENoYW5uZWwgNg0KKyNkZWZpbmUgQVQ5MUNfQURDX0NINyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChBREMpIENoYW5uZWwgNw0KKy8vIC0tLS0tLS0tIAlBRENfQ0hEUiA6IChBREMgT2Zmc2V0OiAweDE0KSBBREMgQ2hhbm5lbCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIAlBRENfQ0hTUiA6IChBREMgT2Zmc2V0OiAweDE4KSBBREMgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX1NSIDogKEFEQyBPZmZzZXQ6IDB4MWMpIEFEQyBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BRENfRU9DMCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKEFEQykgRW5kIG9mIENvbnZlcnNpb24NCisjZGVmaW5lIEFUOTFDX0FEQ19FT0MxICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoQURDKSBFbmQgb2YgQ29udmVyc2lvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX0VPQzIgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19BRENfRU9DMyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKEFEQykgRW5kIG9mIENvbnZlcnNpb24NCisjZGVmaW5lIEFUOTFDX0FEQ19FT0M0ICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoQURDKSBFbmQgb2YgQ29udmVyc2lvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX0VPQzUgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19BRENfRU9DNiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLy8gKEFEQykgRW5kIG9mIENvbnZlcnNpb24NCisjZGVmaW5lIEFUOTFDX0FEQ19FT0M3ICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoQURDKSBFbmQgb2YgQ29udmVyc2lvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX09WUkUwICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChBREMpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX0FEQ19PVlJFMSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvLyAoQURDKSBPdmVycnVuIEVycm9yDQorI2RlZmluZSBBVDkxQ19BRENfT1ZSRTIgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLy8gKEFEQykgT3ZlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQURDX09WUkUzICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTEpIC8vIChBREMpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX0FEQ19PVlJFNCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvLyAoQURDKSBPdmVycnVuIEVycm9yDQorI2RlZmluZSBBVDkxQ19BRENfT1ZSRTUgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMykgLy8gKEFEQykgT3ZlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQURDX09WUkU2ICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTQpIC8vIChBREMpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX0FEQ19PVlJFNyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE1KSAvLyAoQURDKSBPdmVycnVuIEVycm9yDQorI2RlZmluZSBBVDkxQ19BRENfRFJEWSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKEFEQykgRGF0YSBSZWFkeQ0KKyNkZWZpbmUgQVQ5MUNfQURDX0dPVlJFICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTcpIC8vIChBREMpIEdlbmVyYWwgT3ZlcnJ1bg0KKyNkZWZpbmUgQVQ5MUNfQURDX0VORFJYICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTgpIC8vIChBREMpIEVuZCBvZiBSZWNlaXZlciBUcmFuc2Zlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1JYQlVGRiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTkpIC8vIChBREMpIFJYQlVGRiBJbnRlcnJ1cHQNCisvLyAtLS0tLS0tLSBBRENfTENEUiA6IChBREMgT2Zmc2V0OiAweDIwKSBBREMgTGFzdCBDb252ZXJ0ZWQgRGF0YSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FEQ19MREFUQSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzRkYgPDwgIDApIC8vIChBREMpIExhc3QgRGF0YSBDb252ZXJ0ZWQNCisvLyAtLS0tLS0tLSBBRENfSUVSIDogKEFEQyBPZmZzZXQ6IDB4MjQpIEFEQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19JRFIgOiAoQURDIE9mZnNldDogMHgyOCkgQURDIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19JTVIgOiAoQURDIE9mZnNldDogMHgyYykgQURDIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19DRFIwIDogKEFEQyBPZmZzZXQ6IDB4MzApIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMCAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FEQ19EQVRBICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzRkYgPDwgIDApIC8vIChBREMpIENvbnZlcnRlZCBEYXRhDQorLy8gLS0tLS0tLS0gQURDX0NEUjEgOiAoQURDIE9mZnNldDogMHgzNCkgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAxIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19DRFIyIDogKEFEQyBPZmZzZXQ6IDB4MzgpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMiAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRENfQ0RSMyA6IChBREMgT2Zmc2V0OiAweDNjKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDMgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX0NEUjQgOiAoQURDIE9mZnNldDogMHg0MCkgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA0IC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19DRFI1IDogKEFEQyBPZmZzZXQ6IDB4NDQpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNSAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRENfQ0RSNiA6IChBREMgT2Zmc2V0OiAweDQ4KSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDYgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX0NEUjcgOiAoQURDIE9mZnNldDogMHg0YykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA3IC0tLS0tLS0tIA0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQWR2YW5jZWQgIEVuY3J5cHRpb24gU3RhbmRhcmQgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLXR5cGVkZWYgc3RydWN0IF9BVDkxU19BRVMNCi17DQotICAgIEFUOTFfUkVHIEFFU19DUjsgICAgICAgICAgIC8qIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUVTX01SOyAgICAgICAgICAgLyogTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDBbIDIgXTsgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBBRVNfSUVSOyAgICAgICAgICAvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFFU19JRFI7ICAgICAgICAgIC8qIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFFU19JTVI7ICAgICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFFU19JU1I7ICAgICAgICAgIC8qIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUVTX0tFWVd4UlsgNCBdOyAgLyogS2V5IFdvcmQgeCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDFbIDQgXTsgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBBRVNfSURBVEF4UlsgNCBdOyAvKiBJbnB1dCBEYXRhIHggUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUVTX09EQVRBeFJbIDQgXTsgLyogT3V0cHV0IERhdGEgeCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBRVNfSVZ4UlsgNCBdOyAgICAvKiBJbml0aWFsaXphdGlvbiBWZWN0b3IgeCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDJbIDM1IF07ICAvKiAqLw0KLSAgICBBVDkxX1JFRyBBRVNfVlI7ICAgICAgICAgICAvKiBBRVMgVmVyc2lvbiBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBRVNfUlBSOyAgICAgICAgICAvKiBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUVTX1JDUjsgICAgICAgICAgLyogUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFFU19UUFI7ICAgICAgICAgIC8qIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUVTX1RDUjsgICAgICAgICAgLyogVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBRVNfUk5QUjsgICAgICAgICAvKiBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBRVNfUk5DUjsgICAgICAgICAvKiBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBRVNfVE5QUjsgICAgICAgICAvKiBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUVTX1ROQ1I7ICAgICAgICAgLyogVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFFU19QVENSOyAgICAgICAgIC8qIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFFU19QVFNSOyAgICAgICAgIC8qIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi19IEFUOTFTX0FFUywgKiBBVDkxUFNfQUVTOw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQWR2YW5jZWQgIEVuY3J5cHRpb24gU3RhbmRhcmQNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19BRVMgew0KKwlBVDkxX1JFRwkgQUVTX0NSOyAJLy8gQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUVTX01SOyAJLy8gTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzJdOyAJLy8gDQorCUFUOTFfUkVHCSBBRVNfSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUVTX0lEUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRVNfSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFFU19JU1I7IAkvLyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRVNfS0VZV3hSWzRdOyAJLy8gS2V5IFdvcmQgeCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzRdOyAJLy8gDQorCUFUOTFfUkVHCSBBRVNfSURBVEF4Uls0XTsgCS8vIElucHV0IERhdGEgeCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUVTX09EQVRBeFJbNF07IAkvLyBPdXRwdXQgRGF0YSB4IFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRVNfSVZ4Uls0XTsgCS8vIEluaXRpYWxpemF0aW9uIFZlY3RvciB4IFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDJbMzVdOyAJLy8gDQorCUFUOTFfUkVHCSBBRVNfVlI7IAkvLyBBRVMgVmVyc2lvbiBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUVTX1JQUjsgCS8vIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUVTX1JDUjsgCS8vIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUVTX1RQUjsgCS8vIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFFU19UQ1I7IAkvLyBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRVNfUk5QUjsgCS8vIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRVNfUk5DUjsgCS8vIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRVNfVE5QUjsgCS8vIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUVTX1ROQ1I7IAkvLyBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFFU19QVENSOyAJLy8gUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFFU19QVFNSOyAJLy8gUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KK30gQVQ5MVNfQUVTLCAqQVQ5MVBTX0FFUzsNCiANCi0vKiAtLS0tLS0tLSBBRVNfQ1IgOiAoQUVTIE9mZnNldDogMHgwKSBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19BRVNfU1RBUlQgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgLyogKEFFUykgU3RhcnRzIFByb2Nlc3NpbmcgKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19TV1JTVCAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgICAvKiAoQUVTKSBTb2Z0d2FyZSBSZXNldCAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX0xPQURTRUVEICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE2ICkgIC8qIChBRVMpIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yIFNlZWQgTG9hZGluZyAqLw0KLS8qIC0tLS0tLS0tIEFFU19NUiA6IChBRVMgT2Zmc2V0OiAweDQpIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19DSVBIRVIgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgICAvKiAoQUVTKSBQcm9jZXNzaW5nIE1vZGUgKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19QUk9DRExZICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RiA8PCA0ICkgICAvKiAoQUVTKSBQcm9jZXNzaW5nIERlbGF5ICovDQotI2RlZmluZSBBVDkxQ19BRVNfU01PRCAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgOCApICAgLyogKEFFUykgU3RhcnQgTW9kZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FFU19TTU9EX01BTlVBTCAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDggKSAgIC8qIChBRVMpIE1hbnVhbCBNb2RlOiBUaGUgU1RBUlQgYml0IGluIHJlZ2lzdGVyIEFFU19DUiBtdXN0IGJlIHNldCB0byBiZWdpbiBlbmNyeXB0aW9uIG9yIGRlY3J5cHRpb24uICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUVTX1NNT0RfQVVUTyAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOCApICAgLyogKEFFUykgQXV0byBNb2RlOiBubyBhY3Rpb24gaW4gQUVTX0NSIGlzIG5lY2Vzc2FyeSAoY2YgZGF0YXNoZWV0KS4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfU01PRF9QREMgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCA4ICkgICAvKiAoQUVTKSBQREMgTW9kZSAoY2YgZGF0YXNoZWV0KS4gKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19PUE1PRCAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NyA8PCAxMiApICAvKiAoQUVTKSBPcGVyYXRpb24gTW9kZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FFU19PUE1PRF9FQ0IgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDEyICkgIC8qIChBRVMpIEVDQiBFbGVjdHJvbmljIENvZGVCb29rIG1vZGUuICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUVTX09QTU9EX0NCQyAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTIgKSAgLyogKEFFUykgQ0JDIENpcGhlciBCbG9jayBDaGFpbmluZyBtb2RlLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FFU19PUE1PRF9PRkIgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDEyICkgIC8qIChBRVMpIE9GQiBPdXRwdXQgRmVlZGJhY2sgbW9kZS4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfT1BNT0RfQ0ZCICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAxMiApICAvKiAoQUVTKSBDRkIgQ2lwaGVyIEZlZWRiYWNrIG1vZGUuICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUVTX09QTU9EX0NUUiAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDQgPDwgMTIgKSAgLyogKEFFUykgQ1RSIENvdW50ZXIgbW9kZS4gKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19MT0QgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNSApICAvKiAoQUVTKSBMYXN0IE91dHB1dCBEYXRhIE1vZGUgKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19DRkJTICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NyA8PCAxNiApICAvKiAoQUVTKSBDaXBoZXIgRmVlZGJhY2sgRGF0YSBTaXplICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUVTX0NGQlNfMTI4X0JJVCAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMTYgKSAgLyogKEFFUykgMTI4LWJpdC4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfQ0ZCU182NF9CSVQgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNiApICAvKiAoQUVTKSA2NC1iaXQuICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUVTX0NGQlNfMzJfQklUICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgMTYgKSAgLyogKEFFUykgMzItYml0LiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FFU19DRkJTXzE2X0JJVCAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDE2ICkgIC8qIChBRVMpIDE2LWJpdC4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfQ0ZCU184X0JJVCAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NCA8PCAxNiApICAvKiAoQUVTKSA4LWJpdC4gKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19DS0VZICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RiA8PCAyMCApICAvKiAoQUVTKSBDb3VudGVybWVhc3VyZSBLZXkgKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19DVFlQRSAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MUYgPDwgMjQgKSAvKiAoQUVTKSBDb3VudGVybWVhc3VyZSBUeXBlICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUVTX0NUWVBFX1RZUEUxX0VOICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjQgKSAgLyogKEFFUykgQ291bnRlcm1lYXN1cmUgdHlwZSAxIGlzIGVuYWJsZWQuICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUVTX0NUWVBFX1RZUEUyX0VOICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgMjQgKSAgLyogKEFFUykgQ291bnRlcm1lYXN1cmUgdHlwZSAyIGlzIGVuYWJsZWQuICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUVTX0NUWVBFX1RZUEUzX0VOICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDQgPDwgMjQgKSAgLyogKEFFUykgQ291bnRlcm1lYXN1cmUgdHlwZSAzIGlzIGVuYWJsZWQuICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUVTX0NUWVBFX1RZUEU0X0VOICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDggPDwgMjQgKSAgLyogKEFFUykgQ291bnRlcm1lYXN1cmUgdHlwZSA0IGlzIGVuYWJsZWQuICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUVTX0NUWVBFX1RZUEU1X0VOICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEwIDw8IDI0ICkgLyogKEFFUykgQ291bnRlcm1lYXN1cmUgdHlwZSA1IGlzIGVuYWJsZWQuICovDQotLyogLS0tLS0tLS0gQUVTX0lFUiA6IChBRVMgT2Zmc2V0OiAweDEwKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19BRVNfREFUUkRZICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgLyogKEFFUykgREFUUkRZICovDQotI2RlZmluZSBBVDkxQ19BRVNfRU5EUlggICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAgLyogKEFFUykgUERDIFJlYWQgQnVmZmVyIEVuZCAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX0VORFRYICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAgIC8qIChBRVMpIFBEQyBXcml0ZSBCdWZmZXIgRW5kICovDQotI2RlZmluZSBBVDkxQ19BRVNfUlhCVUZGICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMyApICAgLyogKEFFUykgUERDIFJlYWQgQnVmZmVyIEZ1bGwgKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19UWEJVRkUgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA0ICkgICAvKiAoQUVTKSBQREMgV3JpdGUgQnVmZmVyIEVtcHR5ICovDQotI2RlZmluZSBBVDkxQ19BRVNfVVJBRCAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOCApICAgLyogKEFFUykgVW5zcGVjaWZpZWQgUmVnaXN0ZXIgQWNjZXNzIERldGVjdGlvbiAqLw0KLS8qIC0tLS0tLS0tIEFFU19JRFIgOiAoQUVTIE9mZnNldDogMHgxNCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBBRVNfSU1SIDogKEFFUyBPZmZzZXQ6IDB4MTgpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQUVTX0lTUiA6IChBRVMgT2Zmc2V0OiAweDFjKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19BRVNfVVJBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDcgPDwgMTIgKSAvKiAoQUVTKSBVbnNwZWNpZmllZCBSZWdpc3RlciBBY2Nlc3MgVHlwZSBTdGF0dXMgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfVVJBVF9JTl9EQVRfV1JJVEVfREFUUFJPQyAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAxMiApIC8qIChBRVMpIElucHV0IGRhdGEgcmVnaXN0ZXIgd3JpdHRlbiBkdXJpbmcgdGhlIGRhdGEgcHJvY2Vzc2luZyBpbiBQREMgbW9kZS4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfVVJBVF9PVVRfREFUX1JFQURfREFUUFJPQyAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMiApIC8qIChBRVMpIE91dHB1dCBkYXRhIHJlZ2lzdGVyIHJlYWQgZHVyaW5nIHRoZSBkYXRhIHByb2Nlc3NpbmcuICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUVTX1VSQVRfTU9ERVJFR19XUklURV9EQVRQUk9DICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgMTIgKSAvKiAoQUVTKSBNb2RlIHJlZ2lzdGVyIHdyaXR0ZW4gZHVyaW5nIHRoZSBkYXRhIHByb2Nlc3NpbmcuICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUVTX1VSQVRfT1VUX0RBVF9SRUFEX1NVQktFWSAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTIgKSAvKiAoQUVTKSBPdXRwdXQgZGF0YSByZWdpc3RlciByZWFkIGR1cmluZyB0aGUgc3ViLWtleXMgZ2VuZXJhdGlvbi4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfVVJBVF9NT0RFUkVHX1dSSVRFX1NVQktFWSAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NCA8PCAxMiApIC8qIChBRVMpIE1vZGUgcmVnaXN0ZXIgd3JpdHRlbiBkdXJpbmcgdGhlIHN1Yi1rZXlzIGdlbmVyYXRpb24uICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUVTX1VSQVRfV09fUkVHX1JFQUQgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDUgPDwgMTIgKSAvKiAoQUVTKSBXcml0ZS1vbmx5IHJlZ2lzdGVyIHJlYWQgYWNjZXNzLiAqLw0KKy8vIC0tLS0tLS0tIEFFU19DUiA6IChBRVMgT2Zmc2V0OiAweDApIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BRVNfU1RBUlQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKEFFUykgU3RhcnRzIFByb2Nlc3NpbmcNCisjZGVmaW5lIEFUOTFDX0FFU19TV1JTVCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoQUVTKSBTb2Z0d2FyZSBSZXNldA0KKyNkZWZpbmUgQVQ5MUNfQUVTX0xPQURTRUVEICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChBRVMpIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yIFNlZWQgTG9hZGluZw0KKy8vIC0tLS0tLS0tIEFFU19NUiA6IChBRVMgT2Zmc2V0OiAweDQpIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BRVNfQ0lQSEVSICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKEFFUykgUHJvY2Vzc2luZyBNb2RlDQorI2RlZmluZSBBVDkxQ19BRVNfUFJPQ0RMWSAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAgNCkgLy8gKEFFUykgUHJvY2Vzc2luZyBEZWxheQ0KKyNkZWZpbmUgQVQ5MUNfQUVTX1NNT0QgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDgpIC8vIChBRVMpIFN0YXJ0IE1vZGUNCisjZGVmaW5lIAlBVDkxQ19BRVNfU01PRF9NQU5VQUwgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA4KSAvLyAoQUVTKSBNYW51YWwgTW9kZTogVGhlIFNUQVJUIGJpdCBpbiByZWdpc3RlciBBRVNfQ1IgbXVzdCBiZSBzZXQgdG8gYmVnaW4gZW5jcnlwdGlvbiBvciBkZWNyeXB0aW9uLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19TTU9EX0FVVE8gICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChBRVMpIEF1dG8gTW9kZTogbm8gYWN0aW9uIGluIEFFU19DUiBpcyBuZWNlc3NhcnkgKGNmIGRhdGFzaGVldCkuDQorI2RlZmluZSAJQVQ5MUNfQUVTX1NNT0RfUERDICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgOCkgLy8gKEFFUykgUERDIE1vZGUgKGNmIGRhdGFzaGVldCkuDQorI2RlZmluZSBBVDkxQ19BRVNfT1BNT0QgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAxMikgLy8gKEFFUykgT3BlcmF0aW9uIE1vZGUNCisjZGVmaW5lIAlBVDkxQ19BRVNfT1BNT0RfRUNCICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAxMikgLy8gKEFFUykgRUNCIEVsZWN0cm9uaWMgQ29kZUJvb2sgbW9kZS4NCisjZGVmaW5lIAlBVDkxQ19BRVNfT1BNT0RfQ0JDICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLy8gKEFFUykgQ0JDIENpcGhlciBCbG9jayBDaGFpbmluZyBtb2RlLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19PUE1PRF9PRkIgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDEyKSAvLyAoQUVTKSBPRkIgT3V0cHV0IEZlZWRiYWNrIG1vZGUuDQorI2RlZmluZSAJQVQ5MUNfQUVTX09QTU9EX0NGQiAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTIpIC8vIChBRVMpIENGQiBDaXBoZXIgRmVlZGJhY2sgbW9kZS4NCisjZGVmaW5lIAlBVDkxQ19BRVNfT1BNT0RfQ1RSICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NCA8PCAxMikgLy8gKEFFUykgQ1RSIENvdW50ZXIgbW9kZS4NCisjZGVmaW5lIEFUOTFDX0FFU19MT0QgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE1KSAvLyAoQUVTKSBMYXN0IE91dHB1dCBEYXRhIE1vZGUNCisjZGVmaW5lIEFUOTFDX0FFU19DRkJTICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8IDE2KSAvLyAoQUVTKSBDaXBoZXIgRmVlZGJhY2sgRGF0YSBTaXplDQorI2RlZmluZSAJQVQ5MUNfQUVTX0NGQlNfMTI4X0JJVCAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAxNikgLy8gKEFFUykgMTI4LWJpdC4NCisjZGVmaW5lIAlBVDkxQ19BRVNfQ0ZCU182NF9CSVQgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoQUVTKSA2NC1iaXQuDQorI2RlZmluZSAJQVQ5MUNfQUVTX0NGQlNfMzJfQklUICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxNikgLy8gKEFFUykgMzItYml0Lg0KKyNkZWZpbmUgCUFUOTFDX0FFU19DRkJTXzE2X0JJVCAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTYpIC8vIChBRVMpIDE2LWJpdC4NCisjZGVmaW5lIAlBVDkxQ19BRVNfQ0ZCU184X0JJVCAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg0IDw8IDE2KSAvLyAoQUVTKSA4LWJpdC4NCisjZGVmaW5lIEFUOTFDX0FFU19DS0VZICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8IDIwKSAvLyAoQUVTKSBDb3VudGVybWVhc3VyZSBLZXkNCisjZGVmaW5lIEFUOTFDX0FFU19DVFlQRSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxRiA8PCAyNCkgLy8gKEFFUykgQ291bnRlcm1lYXN1cmUgVHlwZQ0KKyNkZWZpbmUgCUFUOTFDX0FFU19DVFlQRV9UWVBFMV9FTiAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI0KSAvLyAoQUVTKSBDb3VudGVybWVhc3VyZSB0eXBlIDEgaXMgZW5hYmxlZC4NCisjZGVmaW5lIAlBVDkxQ19BRVNfQ1RZUEVfVFlQRTJfRU4gICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAyNCkgLy8gKEFFUykgQ291bnRlcm1lYXN1cmUgdHlwZSAyIGlzIGVuYWJsZWQuDQorI2RlZmluZSAJQVQ5MUNfQUVTX0NUWVBFX1RZUEUzX0VOICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDQgPDwgMjQpIC8vIChBRVMpIENvdW50ZXJtZWFzdXJlIHR5cGUgMyBpcyBlbmFibGVkLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19DVFlQRV9UWVBFNF9FTiAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg4IDw8IDI0KSAvLyAoQUVTKSBDb3VudGVybWVhc3VyZSB0eXBlIDQgaXMgZW5hYmxlZC4NCisjZGVmaW5lIAlBVDkxQ19BRVNfQ1RZUEVfVFlQRTVfRU4gICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MTAgPDwgMjQpIC8vIChBRVMpIENvdW50ZXJtZWFzdXJlIHR5cGUgNSBpcyBlbmFibGVkLg0KKy8vIC0tLS0tLS0tIEFFU19JRVIgOiAoQUVTIE9mZnNldDogMHgxMCkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FFU19EQVRSRFkgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoQUVTKSBEQVRSRFkNCisjZGVmaW5lIEFUOTFDX0FFU19FTkRSWCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoQUVTKSBQREMgUmVhZCBCdWZmZXIgRW5kDQorI2RlZmluZSBBVDkxQ19BRVNfRU5EVFggICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKEFFUykgUERDIFdyaXRlIEJ1ZmZlciBFbmQNCisjZGVmaW5lIEFUOTFDX0FFU19SWEJVRkYgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoQUVTKSBQREMgUmVhZCBCdWZmZXIgRnVsbA0KKyNkZWZpbmUgQVQ5MUNfQUVTX1RYQlVGRSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChBRVMpIFBEQyBXcml0ZSBCdWZmZXIgRW1wdHkNCisjZGVmaW5lIEFUOTFDX0FFU19VUkFEICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoQUVTKSBVbnNwZWNpZmllZCBSZWdpc3RlciBBY2Nlc3MgRGV0ZWN0aW9uDQorLy8gLS0tLS0tLS0gQUVTX0lEUiA6IChBRVMgT2Zmc2V0OiAweDE0KSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRVNfSU1SIDogKEFFUyBPZmZzZXQ6IDB4MTgpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFFU19JU1IgOiAoQUVTIE9mZnNldDogMHgxYykgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FFU19VUkFUICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8IDEyKSAvLyAoQUVTKSBVbnNwZWNpZmllZCBSZWdpc3RlciBBY2Nlc3MgVHlwZSBTdGF0dXMNCisjZGVmaW5lIAlBVDkxQ19BRVNfVVJBVF9JTl9EQVRfV1JJVEVfREFUUFJPQyAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDEyKSAvLyAoQUVTKSBJbnB1dCBkYXRhIHJlZ2lzdGVyIHdyaXR0ZW4gZHVyaW5nIHRoZSBkYXRhIHByb2Nlc3NpbmcgaW4gUERDIG1vZGUuDQorI2RlZmluZSAJQVQ5MUNfQUVTX1VSQVRfT1VUX0RBVF9SRUFEX0RBVFBST0MgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLy8gKEFFUykgT3V0cHV0IGRhdGEgcmVnaXN0ZXIgcmVhZCBkdXJpbmcgdGhlIGRhdGEgcHJvY2Vzc2luZy4NCisjZGVmaW5lIAlBVDkxQ19BRVNfVVJBVF9NT0RFUkVHX1dSSVRFX0RBVFBST0MgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxMikgLy8gKEFFUykgTW9kZSByZWdpc3RlciB3cml0dGVuIGR1cmluZyB0aGUgZGF0YSBwcm9jZXNzaW5nLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19VUkFUX09VVF9EQVRfUkVBRF9TVUJLRVkgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTIpIC8vIChBRVMpIE91dHB1dCBkYXRhIHJlZ2lzdGVyIHJlYWQgZHVyaW5nIHRoZSBzdWIta2V5cyBnZW5lcmF0aW9uLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19VUkFUX01PREVSRUdfV1JJVEVfU1VCS0VZICgodW5zaWduZWQgaW50KSAweDQgPDwgMTIpIC8vIChBRVMpIE1vZGUgcmVnaXN0ZXIgd3JpdHRlbiBkdXJpbmcgdGhlIHN1Yi1rZXlzIGdlbmVyYXRpb24uDQorI2RlZmluZSAJQVQ5MUNfQUVTX1VSQVRfV09fUkVHX1JFQUQgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NSA8PCAxMikgLy8gKEFFUykgV3JpdGUtb25seSByZWdpc3RlciByZWFkIGFjY2Vzcy4NCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFRyaXBsZSBEYXRhIEVuY3J5cHRpb24gU3RhbmRhcmQgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLXR5cGVkZWYgc3RydWN0IF9BVDkxU19UREVTDQotew0KLSAgICBBVDkxX1JFRyBUREVTX0NSOyAgICAgICAgICAgLyogQ29udHJvbCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBUREVTX01SOyAgICAgICAgICAgLyogTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDBbIDIgXTsgICAgLyogKi8NCi0gICAgQVQ5MV9SRUcgVERFU19JRVI7ICAgICAgICAgIC8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVERFU19JRFI7ICAgICAgICAgIC8qIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFRERVNfSU1SOyAgICAgICAgICAvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBUREVTX0lTUjsgICAgICAgICAgLyogSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBUREVTX0tFWTFXeFJbIDIgXTsgLyogS2V5IDEgV29yZCB4IFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFRERVNfS0VZMld4UlsgMiBdOyAvKiBLZXkgMiBXb3JkIHggUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVERFU19LRVkzV3hSWyAyIF07IC8qIEtleSAzIFdvcmQgeCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDFbIDIgXTsgICAgLyogKi8NCi0gICAgQVQ5MV9SRUcgVERFU19JREFUQXhSWyAyIF07IC8qIElucHV0IERhdGEgeCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDJbIDIgXTsgICAgLyogKi8NCi0gICAgQVQ5MV9SRUcgVERFU19PREFUQXhSWyAyIF07IC8qIE91dHB1dCBEYXRhIHggUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQzWyAyIF07ICAgIC8qICovDQotICAgIEFUOTFfUkVHIFRERVNfSVZ4UlsgMiBdOyAgICAvKiBJbml0aWFsaXphdGlvbiBWZWN0b3IgeCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDRbIDM3IF07ICAgLyogKi8NCi0gICAgQVQ5MV9SRUcgVERFU19WUjsgICAgICAgICAgIC8qIFRERVMgVmVyc2lvbiBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBUREVTX1JQUjsgICAgICAgICAgLyogUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFRERVNfUkNSOyAgICAgICAgICAvKiBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVERFU19UUFI7ICAgICAgICAgIC8qIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVERFU19UQ1I7ICAgICAgICAgIC8qIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVERFU19STlBSOyAgICAgICAgIC8qIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFRERVNfUk5DUjsgICAgICAgICAvKiBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBUREVTX1ROUFI7ICAgICAgICAgLyogVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFRERVNfVE5DUjsgICAgICAgICAvKiBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVERFU19QVENSOyAgICAgICAgIC8qIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFRERVNfUFRTUjsgICAgICAgICAvKiBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotfSBBVDkxU19UREVTLCAqIEFUOTFQU19UREVTOw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVHJpcGxlIERhdGEgRW5jcnlwdGlvbiBTdGFuZGFyZA0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1RERVMgew0KKwlBVDkxX1JFRwkgVERFU19DUjsgCS8vIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRERVNfTVI7IAkvLyBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbMl07IAkvLyANCisJQVQ5MV9SRUcJIFRERVNfSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVERFU19JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVERFU19JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVERFU19JU1I7IAkvLyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUREVTX0tFWTFXeFJbMl07IAkvLyBLZXkgMSBXb3JkIHggUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRERVNfS0VZMld4UlsyXTsgCS8vIEtleSAyIFdvcmQgeCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVERFU19LRVkzV3hSWzJdOyAJLy8gS2V5IDMgV29yZCB4IFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbMl07IAkvLyANCisJQVQ5MV9SRUcJIFRERVNfSURBVEF4UlsyXTsgCS8vIElucHV0IERhdGEgeCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQyWzJdOyAJLy8gDQorCUFUOTFfUkVHCSBUREVTX09EQVRBeFJbMl07IAkvLyBPdXRwdXQgRGF0YSB4IFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDNbMl07IAkvLyANCisJQVQ5MV9SRUcJIFRERVNfSVZ4UlsyXTsgCS8vIEluaXRpYWxpemF0aW9uIFZlY3RvciB4IFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDRbMzddOyAJLy8gDQorCUFUOTFfUkVHCSBUREVTX1ZSOyAJLy8gVERFUyBWZXJzaW9uIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUREVTX1JQUjsgCS8vIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVERFU19SQ1I7IAkvLyBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRERVNfVFBSOyAJLy8gVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVERFU19UQ1I7IAkvLyBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUREVTX1JOUFI7IAkvLyBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVERFU19STkNSOyAJLy8gUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRERVNfVE5QUjsgCS8vIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVERFU19UTkNSOyAJLy8gVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUREVTX1BUQ1I7IAkvLyBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVERFU19QVFNSOyAJLy8gUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KK30gQVQ5MVNfVERFUywgKkFUOTFQU19UREVTOw0KIA0KLS8qIC0tLS0tLS0tIFRERVNfQ1IgOiAoVERFUyBPZmZzZXQ6IDB4MCkgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19TVEFSVCAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgIC8qIChUREVTKSBTdGFydHMgUHJvY2Vzc2luZyAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19TV1JTVCAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgIC8qIChUREVTKSBTb2Z0d2FyZSBSZXNldCAqLw0KLS8qIC0tLS0tLS0tIFRERVNfTVIgOiAoVERFUyBPZmZzZXQ6IDB4NCkgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19DSVBIRVIgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgIC8qIChUREVTKSBQcm9jZXNzaW5nIE1vZGUgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfVERFU01PRCAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAvKiAoVERFUykgU2luZ2xlIG9yIFRyaXBsZSBERVMgTW9kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19LRVlNT0QgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA0ICkgIC8qIChUREVTKSBLZXkgTW9kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19TTU9EICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCA4ICkgIC8qIChUREVTKSBTdGFydCBNb2RlICovDQotI2RlZmluZSAgICAgQVQ5MUNfVERFU19TTU9EX01BTlVBTCAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDggKSAgLyogKFRERVMpIE1hbnVhbCBNb2RlOiBUaGUgU1RBUlQgYml0IGluIHJlZ2lzdGVyIFRERVNfQ1IgbXVzdCBiZSBzZXQgdG8gYmVnaW4gZW5jcnlwdGlvbiBvciBkZWNyeXB0aW9uLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RERVNfU01PRF9BVVRPICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgIC8qIChUREVTKSBBdXRvIE1vZGU6IG5vIGFjdGlvbiBpbiBUREVTX0NSIGlzIG5lY2Vzc2FyeSAoY2YgZGF0YXNoZWV0KS4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UREVTX1NNT0RfUERDICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgOCApICAvKiAoVERFUykgUERDIE1vZGUgKGNmIGRhdGFzaGVldCkuICovDQotI2RlZmluZSBBVDkxQ19UREVTX09QTU9EICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDEyICkgLyogKFRERVMpIE9wZXJhdGlvbiBNb2RlICovDQotI2RlZmluZSAgICAgQVQ5MUNfVERFU19PUE1PRF9FQ0IgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDEyICkgLyogKFRERVMpIEVDQiBFbGVjdHJvbmljIENvZGVCb29rIG1vZGUuICovDQotI2RlZmluZSAgICAgQVQ5MUNfVERFU19PUE1PRF9DQkMgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEyICkgLyogKFRERVMpIENCQyBDaXBoZXIgQmxvY2sgQ2hhaW5pbmcgbW9kZS4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UREVTX09QTU9EX09GQiAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgMTIgKSAvKiAoVERFUykgT0ZCIE91dHB1dCBGZWVkYmFjayBtb2RlLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RERVNfT1BNT0RfQ0ZCICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAxMiApIC8qIChUREVTKSBDRkIgQ2lwaGVyIEZlZWRiYWNrIG1vZGUuICovDQotI2RlZmluZSBBVDkxQ19UREVTX0xPRCAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE1ICkgLyogKFRERVMpIExhc3QgT3V0cHV0IERhdGEgTW9kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19DRkJTICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAxNiApIC8qIChUREVTKSBDaXBoZXIgRmVlZGJhY2sgRGF0YSBTaXplICovDQotI2RlZmluZSAgICAgQVQ5MUNfVERFU19DRkJTXzY0X0JJVCAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDE2ICkgLyogKFRERVMpIDY0LWJpdC4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UREVTX0NGQlNfMzJfQklUICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTYgKSAvKiAoVERFUykgMzItYml0LiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RERVNfQ0ZCU18xNl9CSVQgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCAxNiApIC8qIChUREVTKSAxNi1iaXQuICovDQotI2RlZmluZSAgICAgQVQ5MUNfVERFU19DRkJTXzhfQklUICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDE2ICkgLyogKFRERVMpIDgtYml0LiAqLw0KLS8qIC0tLS0tLS0tIFRERVNfSUVSIDogKFRERVMgT2Zmc2V0OiAweDEwKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19UREVTX0RBVFJEWSAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgLyogKFRERVMpIERBVFJEWSAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19FTkRSWCAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgIC8qIChUREVTKSBQREMgUmVhZCBCdWZmZXIgRW5kICovDQotI2RlZmluZSBBVDkxQ19UREVTX0VORFRYICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAgLyogKFRERVMpIFBEQyBXcml0ZSBCdWZmZXIgRW5kICovDQotI2RlZmluZSBBVDkxQ19UREVTX1JYQlVGRiAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDMgKSAgLyogKFRERVMpIFBEQyBSZWFkIEJ1ZmZlciBGdWxsICovDQotI2RlZmluZSBBVDkxQ19UREVTX1RYQlVGRSAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDQgKSAgLyogKFRERVMpIFBEQyBXcml0ZSBCdWZmZXIgRW1wdHkgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfVVJBRCAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOCApICAvKiAoVERFUykgVW5zcGVjaWZpZWQgUmVnaXN0ZXIgQWNjZXNzIERldGVjdGlvbiAqLw0KLS8qIC0tLS0tLS0tIFRERVNfSURSIDogKFRERVMgT2Zmc2V0OiAweDE0KSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFRERVNfSU1SIDogKFRERVMgT2Zmc2V0OiAweDE4KSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFRERVNfSVNSIDogKFRERVMgT2Zmc2V0OiAweDFjKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19UREVTX1VSQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDEyICkgLyogKFRERVMpIFVuc3BlY2lmaWVkIFJlZ2lzdGVyIEFjY2VzcyBUeXBlIFN0YXR1cyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RERVNfVVJBVF9JTl9EQVRfV1JJVEVfREFUUFJPQyAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAxMiApIC8qIChUREVTKSBJbnB1dCBkYXRhIHJlZ2lzdGVyIHdyaXR0ZW4gZHVyaW5nIHRoZSBkYXRhIHByb2Nlc3NpbmcgaW4gUERDIG1vZGUuICovDQotI2RlZmluZSAgICAgQVQ5MUNfVERFU19VUkFUX09VVF9EQVRfUkVBRF9EQVRQUk9DICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEyICkgLyogKFRERVMpIE91dHB1dCBkYXRhIHJlZ2lzdGVyIHJlYWQgZHVyaW5nIHRoZSBkYXRhIHByb2Nlc3NpbmcuICovDQotI2RlZmluZSAgICAgQVQ5MUNfVERFU19VUkFUX01PREVSRUdfV1JJVEVfREFUUFJPQyAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDEyICkgLyogKFRERVMpIE1vZGUgcmVnaXN0ZXIgd3JpdHRlbiBkdXJpbmcgdGhlIGRhdGEgcHJvY2Vzc2luZy4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UREVTX1VSQVRfV09fUkVHX1JFQUQgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTIgKSAvKiAoVERFUykgV3JpdGUtb25seSByZWdpc3RlciByZWFkIGFjY2Vzcy4gKi8NCisvLyAtLS0tLS0tLSBUREVTX0NSIDogKFRERVMgT2Zmc2V0OiAweDApIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UREVTX1NUQVJUICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFRERVMpIFN0YXJ0cyBQcm9jZXNzaW5nDQorI2RlZmluZSBBVDkxQ19UREVTX1NXUlNUICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFRERVMpIFNvZnR3YXJlIFJlc2V0DQorLy8gLS0tLS0tLS0gVERFU19NUiA6IChUREVTIE9mZnNldDogMHg0KSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVERFU19DSVBIRVIgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChUREVTKSBQcm9jZXNzaW5nIE1vZGUNCisjZGVmaW5lIEFUOTFDX1RERVNfVERFU01PRCAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoVERFUykgU2luZ2xlIG9yIFRyaXBsZSBERVMgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfVERFU19LRVlNT0QgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChUREVTKSBLZXkgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfVERFU19TTU9EICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDgpIC8vIChUREVTKSBTdGFydCBNb2RlDQorI2RlZmluZSAJQVQ5MUNfVERFU19TTU9EX01BTlVBTCAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDgpIC8vIChUREVTKSBNYW51YWwgTW9kZTogVGhlIFNUQVJUIGJpdCBpbiByZWdpc3RlciBUREVTX0NSIG11c3QgYmUgc2V0IHRvIGJlZ2luIGVuY3J5cHRpb24gb3IgZGVjcnlwdGlvbi4NCisjZGVmaW5lIAlBVDkxQ19UREVTX1NNT0RfQVVUTyAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFRERVMpIEF1dG8gTW9kZTogbm8gYWN0aW9uIGluIFRERVNfQ1IgaXMgbmVjZXNzYXJ5IChjZiBkYXRhc2hlZXQpLg0KKyNkZWZpbmUgCUFUOTFDX1RERVNfU01PRF9QREMgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA4KSAvLyAoVERFUykgUERDIE1vZGUgKGNmIGRhdGFzaGVldCkuDQorI2RlZmluZSBBVDkxQ19UREVTX09QTU9EICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxMikgLy8gKFRERVMpIE9wZXJhdGlvbiBNb2RlDQorI2RlZmluZSAJQVQ5MUNfVERFU19PUE1PRF9FQ0IgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDEyKSAvLyAoVERFUykgRUNCIEVsZWN0cm9uaWMgQ29kZUJvb2sgbW9kZS4NCisjZGVmaW5lIAlBVDkxQ19UREVTX09QTU9EX0NCQyAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8vIChUREVTKSBDQkMgQ2lwaGVyIEJsb2NrIENoYWluaW5nIG1vZGUuDQorI2RlZmluZSAJQVQ5MUNfVERFU19PUE1PRF9PRkIgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDEyKSAvLyAoVERFUykgT0ZCIE91dHB1dCBGZWVkYmFjayBtb2RlLg0KKyNkZWZpbmUgCUFUOTFDX1RERVNfT1BNT0RfQ0ZCICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxMikgLy8gKFRERVMpIENGQiBDaXBoZXIgRmVlZGJhY2sgbW9kZS4NCisjZGVmaW5lIEFUOTFDX1RERVNfTE9EICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE1KSAvLyAoVERFUykgTGFzdCBPdXRwdXQgRGF0YSBNb2RlDQorI2RlZmluZSBBVDkxQ19UREVTX0NGQlMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxNikgLy8gKFRERVMpIENpcGhlciBGZWVkYmFjayBEYXRhIFNpemUNCisjZGVmaW5lIAlBVDkxQ19UREVTX0NGQlNfNjRfQklUICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAxNikgLy8gKFRERVMpIDY0LWJpdC4NCisjZGVmaW5lIAlBVDkxQ19UREVTX0NGQlNfMzJfQklUICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKFRERVMpIDMyLWJpdC4NCisjZGVmaW5lIAlBVDkxQ19UREVTX0NGQlNfMTZfQklUICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxNikgLy8gKFRERVMpIDE2LWJpdC4NCisjZGVmaW5lIAlBVDkxQ19UREVTX0NGQlNfOF9CSVQgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxNikgLy8gKFRERVMpIDgtYml0Lg0KKy8vIC0tLS0tLS0tIFRERVNfSUVSIDogKFRERVMgT2Zmc2V0OiAweDEwKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVERFU19EQVRSRFkgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChUREVTKSBEQVRSRFkNCisjZGVmaW5lIEFUOTFDX1RERVNfRU5EUlggICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoVERFUykgUERDIFJlYWQgQnVmZmVyIEVuZA0KKyNkZWZpbmUgQVQ5MUNfVERFU19FTkRUWCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChUREVTKSBQREMgV3JpdGUgQnVmZmVyIEVuZA0KKyNkZWZpbmUgQVQ5MUNfVERFU19SWEJVRkYgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChUREVTKSBQREMgUmVhZCBCdWZmZXIgRnVsbA0KKyNkZWZpbmUgQVQ5MUNfVERFU19UWEJVRkUgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChUREVTKSBQREMgV3JpdGUgQnVmZmVyIEVtcHR5DQorI2RlZmluZSBBVDkxQ19UREVTX1VSQUQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFRERVMpIFVuc3BlY2lmaWVkIFJlZ2lzdGVyIEFjY2VzcyBEZXRlY3Rpb24NCisvLyAtLS0tLS0tLSBUREVTX0lEUiA6IChUREVTIE9mZnNldDogMHgxNCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVERFU19JTVIgOiAoVERFUyBPZmZzZXQ6IDB4MTgpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFRERVNfSVNSIDogKFRERVMgT2Zmc2V0OiAweDFjKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVERFU19VUkFUICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTIpIC8vIChUREVTKSBVbnNwZWNpZmllZCBSZWdpc3RlciBBY2Nlc3MgVHlwZSBTdGF0dXMNCisjZGVmaW5lIAlBVDkxQ19UREVTX1VSQVRfSU5fREFUX1dSSVRFX0RBVFBST0MgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAxMikgLy8gKFRERVMpIElucHV0IGRhdGEgcmVnaXN0ZXIgd3JpdHRlbiBkdXJpbmcgdGhlIGRhdGEgcHJvY2Vzc2luZyBpbiBQREMgbW9kZS4NCisjZGVmaW5lIAlBVDkxQ19UREVTX1VSQVRfT1VUX0RBVF9SRUFEX0RBVFBST0MgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLy8gKFRERVMpIE91dHB1dCBkYXRhIHJlZ2lzdGVyIHJlYWQgZHVyaW5nIHRoZSBkYXRhIHByb2Nlc3NpbmcuDQorI2RlZmluZSAJQVQ5MUNfVERFU19VUkFUX01PREVSRUdfV1JJVEVfREFUUFJPQyAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDEyKSAvLyAoVERFUykgTW9kZSByZWdpc3RlciB3cml0dGVuIGR1cmluZyB0aGUgZGF0YSBwcm9jZXNzaW5nLg0KKyNkZWZpbmUgCUFUOTFDX1RERVNfVVJBVF9XT19SRUdfUkVBRCAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDEyKSAvLyAoVERFUykgV3JpdGUtb25seSByZWdpc3RlciByZWFkIGFjY2Vzcy4NCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICAgUkVHSVNURVIgQUREUkVTUyBERUZJTklUSU9OIEZPUiBBVDkxU0FNN1gyNTYgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgU1lTIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQUlDIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX0lWUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMTAwICkgLyogKEFJQykgSVJRIFZlY3RvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX1NNUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMDAwICkgLyogKEFJQykgU291cmNlIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19GVlIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjEwNCApIC8qIChBSUMpIEZJUSBWZWN0b3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19EQ1IgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjEzOCApIC8qIChBSUMpIERlYnVnIENvbnRyb2wgUmVnaXN0ZXIgKFByb3RlY3QpICovDQotI2RlZmluZSBBVDkxQ19BSUNfRU9JQ1IgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYxMzAgKSAvKiAoQUlDKSBFbmQgb2YgSW50ZXJydXB0IENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19TVlIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjA4MCApIC8qIChBSUMpIFNvdXJjZSBWZWN0b3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19GRlNSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjE0OCApIC8qIChBSUMpIEZhc3QgRm9yY2luZyBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19JQ0NSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjEyOCApIC8qIChBSUMpIEludGVycnVwdCBDbGVhciBDb21tYW5kIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BSUNfSVNSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYxMDggKSAvKiAoQUlDKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BSUNfSU1SICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYxMTAgKSAvKiAoQUlDKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX0lQUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMTBDICkgLyogKEFJQykgSW50ZXJydXB0IFBlbmRpbmcgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19GRkVSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjE0MCApIC8qIChBSUMpIEZhc3QgRm9yY2luZyBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19JRUNSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjEyMCApIC8qIChBSUMpIEludGVycnVwdCBFbmFibGUgQ29tbWFuZCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX0lTQ1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMTJDICkgLyogKEFJQykgSW50ZXJydXB0IFNldCBDb21tYW5kIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BSUNfRkZEUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYxNDQgKSAvKiAoQUlDKSBGYXN0IEZvcmNpbmcgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX0NJU1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMTE0ICkgLyogKEFJQykgQ29yZSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BSUNfSURDUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYxMjQgKSAvKiAoQUlDKSBJbnRlcnJ1cHQgRGlzYWJsZSBDb21tYW5kIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BSUNfU1BVICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYxMzQgKSAvKiAoQUlDKSBTcHVyaW91cyBWZWN0b3IgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19EQkdVIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9UQ1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMzBDICkgLyogKFBEQ19EQkdVKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19EQkdVX1JOUFIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYzMTAgKSAvKiAoUERDX0RCR1UpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19EQkdVX1ROUFIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYzMTggKSAvKiAoUERDX0RCR1UpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9UUFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMzA4ICkgLyogKFBEQ19EQkdVKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19EQkdVX1JQUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYzMDAgKSAvKiAoUERDX0RCR1UpIFJlY2VpdmUgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9SQ1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMzA0ICkgLyogKFBEQ19EQkdVKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfUk5DUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjMxNCApIC8qIChQRENfREJHVSkgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfUFRDUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjMyMCApIC8qIChQRENfREJHVSkgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfUFRTUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjMyNCApIC8qIChQRENfREJHVSkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9UTkNSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMzFDICkgLyogKFBEQ19EQkdVKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIERCR1UgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19EQkdVX0VYSUQgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYyNDQgKSAvKiAoREJHVSkgQ2hpcCBJRCBFeHRlbnNpb24gUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfQlJHUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjIyMCApIC8qIChEQkdVKSBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19EQkdVX0lEUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYyMEMgKSAvKiAoREJHVSkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfQ1NSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjIxNCApIC8qIChEQkdVKSBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9DSURSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMjQwICkgLyogKERCR1UpIENoaXAgSUQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfTVIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjIwNCApIC8qIChEQkdVKSBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19EQkdVX0lNUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYyMTAgKSAvKiAoREJHVSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfQ1IgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjIwMCApIC8qIChEQkdVKSBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19EQkdVX0ZOVFIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYyNDggKSAvKiAoREJHVSkgRm9yY2UgTlRSU1QgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfVEhSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjIxQyApIC8qIChEQkdVKSBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19EQkdVX1JIUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYyMTggKSAvKiAoREJHVSkgUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9JRVIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMjA4ICkgLyogKERCR1UpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBJT0EgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19QSU9BX09EUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY0MTQgKSAvKiAoUElPQSkgT3V0cHV0IERpc2FibGUgUmVnaXN0ZXJyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX1NPRFIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY0MzAgKSAvKiAoUElPQSkgU2V0IE91dHB1dCBEYXRhIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX0lTUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY0NEMgKSAvKiAoUElPQSkgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9BQlNSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNDc4ICkgLyogKFBJT0EpIEFCIFNlbGVjdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfSUVSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjQ0MCApIC8qIChQSU9BKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX1BQVURSICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY0NjAgKSAvKiAoUElPQSkgUHVsbC11cCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX0lNUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY0NDggKSAvKiAoUElPQSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfUEVSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjQwMCApIC8qIChQSU9BKSBQSU8gRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX0lGRFIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY0MjQgKSAvKiAoUElPQSkgSW5wdXQgRmlsdGVyIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfT1dEUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjRBNCApIC8qIChQSU9BKSBPdXRwdXQgV3JpdGUgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9NRFNSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNDU4ICkgLyogKFBJT0EpIE11bHRpLWRyaXZlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfSURSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjQ0NCApIC8qIChQSU9BKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9PRFNSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNDM4ICkgLyogKFBJT0EpIE91dHB1dCBEYXRhIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9QUFVTUiAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNDY4ICkgLyogKFBJT0EpIFB1bGwtdXAgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX09XU1IgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY0QTggKSAvKiAoUElPQSkgT3V0cHV0IFdyaXRlIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9CU1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNDc0ICkgLyogKFBJT0EpIFNlbGVjdCBCIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX09XRVIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY0QTAgKSAvKiAoUElPQSkgT3V0cHV0IFdyaXRlIEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9JRkVSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNDIwICkgLyogKFBJT0EpIElucHV0IEZpbHRlciBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfUERTUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjQzQyApIC8qIChQSU9BKSBQaW4gRGF0YSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfUFBVRVIgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjQ2NCApIC8qIChQSU9BKSBQdWxsLXVwIEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9PU1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNDE4ICkgLyogKFBJT0EpIE91dHB1dCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfQVNSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjQ3MCApIC8qIChQSU9BKSBTZWxlY3QgQSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9NRERSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNDU0ICkgLyogKFBJT0EpIE11bHRpLWRyaXZlciBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX0NPRFIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY0MzQgKSAvKiAoUElPQSkgQ2xlYXIgT3V0cHV0IERhdGEgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfTURFUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjQ1MCApIC8qIChQSU9BKSBNdWx0aS1kcml2ZXIgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX1BEUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY0MDQgKSAvKiAoUElPQSkgUElPIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfSUZTUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjQyOCApIC8qIChQSU9BKSBJbnB1dCBGaWx0ZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX09FUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY0MTAgKSAvKiAoUElPQSkgT3V0cHV0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9QU1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNDA4ICkgLyogKFBJT0EpIFBJTyBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBJT0IgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19QSU9CX09XRFIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY2QTQgKSAvKiAoUElPQikgT3V0cHV0IFdyaXRlIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0JfTURFUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjY1MCApIC8qIChQSU9CKSBNdWx0aS1kcml2ZXIgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX1BQVVNSICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY2NjggKSAvKiAoUElPQikgUHVsbC11cCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0JfSU1SICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjY0OCApIC8qIChQSU9CKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9BU1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNjcwICkgLyogKFBJT0IpIFNlbGVjdCBBIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX1BQVURSICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY2NjAgKSAvKiAoUElPQikgUHVsbC11cCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX1BTUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY2MDggKSAvKiAoUElPQikgUElPIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9JRVIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNjQwICkgLyogKFBJT0IpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0JfQ09EUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjYzNCApIC8qIChQSU9CKSBDbGVhciBPdXRwdXQgRGF0YSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9PV0VSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNkEwICkgLyogKFBJT0IpIE91dHB1dCBXcml0ZSBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0JfQUJTUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjY3OCApIC8qIChQSU9CKSBBQiBTZWxlY3QgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX0lGRFIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY2MjQgKSAvKiAoUElPQikgSW5wdXQgRmlsdGVyIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0JfUERTUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjYzQyApIC8qIChQSU9CKSBQaW4gRGF0YSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0JfSURSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjY0NCApIC8qIChQSU9CKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9PV1NSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNkE4ICkgLyogKFBJT0IpIE91dHB1dCBXcml0ZSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0JfUERSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjYwNCApIC8qIChQSU9CKSBQSU8gRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9PRFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNjE0ICkgLyogKFBJT0IpIE91dHB1dCBEaXNhYmxlIFJlZ2lzdGVyciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9JRlNSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNjI4ICkgLyogKFBJT0IpIElucHV0IEZpbHRlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0JfUFBVRVIgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjY2NCApIC8qIChQSU9CKSBQdWxsLXVwIEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9TT0RSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNjMwICkgLyogKFBJT0IpIFNldCBPdXRwdXQgRGF0YSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9JU1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNjRDICkgLyogKFBJT0IpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0JfT0RTUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjYzOCApIC8qIChQSU9CKSBPdXRwdXQgRGF0YSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0JfT1NSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjYxOCApIC8qIChQSU9CKSBPdXRwdXQgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX01EU1IgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY2NTggKSAvKiAoUElPQikgTXVsdGktZHJpdmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9JRkVSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNjIwICkgLyogKFBJT0IpIElucHV0IEZpbHRlciBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0JfQlNSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjY3NCApIC8qIChQSU9CKSBTZWxlY3QgQiBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9NRERSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNjU0ICkgLyogKFBJT0IpIE11bHRpLWRyaXZlciBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX09FUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY2MTAgKSAvKiAoUElPQikgT3V0cHV0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9QRVIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNjAwICkgLyogKFBJT0IpIFBJTyBFbmFibGUgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENLR1IgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19DS0dSX01PUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZDMjAgKSAvKiAoQ0tHUikgTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DS0dSX1BMTFIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZDMkMgKSAvKiAoQ0tHUikgUExMIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DS0dSX01DRlIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZDMjQgKSAvKiAoQ0tHUikgTWFpbiBDbG9jayAgRnJlcXVlbmN5IFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQTUMgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19QTUNfSURSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZDNjQgKSAvKiAoUE1DKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX01PUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGQzIwICkgLyogKFBNQykgTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QTUNfUExMUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZDMkMgKSAvKiAoUE1DKSBQTEwgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19QQ0VSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkMxMCApIC8qIChQTUMpIFBlcmlwaGVyYWwgQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QTUNfUENLUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZDNDAgKSAvKiAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19NQ0tSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkMzMCApIC8qIChQTUMpIE1hc3RlciBDbG9jayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1NDRFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGQzA0ICkgLyogKFBNQykgU3lzdGVtIENsb2NrIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19QQ0RSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkMxNCApIC8qIChQTUMpIFBlcmlwaGVyYWwgQ2xvY2sgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1NDU1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGQzA4ICkgLyogKFBNQykgU3lzdGVtIENsb2NrIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDU1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGQzE4ICkgLyogKFBNQykgUGVyaXBoZXJhbCBDbG9jayBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19NQ0ZSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkMyNCApIC8qIChQTUMpIE1haW4gQ2xvY2sgIEZyZXF1ZW5jeSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1NDRVIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGQzAwICkgLyogKFBNQykgU3lzdGVtIENsb2NrIEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX0lNUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGQzZDICkgLyogKFBNQykgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19JRVIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkM2MCApIC8qIChQTUMpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19TUiAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkM2OCApIC8qIChQTUMpIFN0YXR1cyBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUlNUQyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1JTVENfUkNSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkQwMCApIC8qIChSU1RDKSBSZXNldCBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19SU1RDX1JNUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZEMDggKSAvKiAoUlNUQykgUmVzZXQgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUlNUQ19SU1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGRDA0ICkgLyogKFJTVEMpIFJlc2V0IFN0YXR1cyBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUlRUQyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1JUVENfUlRTUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkQyQyApIC8qIChSVFRDKSBSZWFsLXRpbWUgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19SVFRDX1JUTVIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZEMjAgKSAvKiAoUlRUQykgUmVhbC10aW1lIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1JUVENfUlRWUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkQyOCApIC8qIChSVFRDKSBSZWFsLXRpbWUgVmFsdWUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1JUVENfUlRBUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkQyNCApIC8qIChSVFRDKSBSZWFsLXRpbWUgQWxhcm0gUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBJVEMgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19QSVRDX1BJVlIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZEMzggKSAvKiAoUElUQykgUGVyaW9kIEludGVydmFsIFZhbHVlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSVRDX1BJU1IgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZEMzQgKSAvKiAoUElUQykgUGVyaW9kIEludGVydmFsIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElUQ19QSUlSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGRDNDICkgLyogKFBJVEMpIFBlcmlvZCBJbnRlcnZhbCBJbWFnZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElUQ19QSU1SICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGRDMwICkgLyogKFBJVEMpIFBlcmlvZCBJbnRlcnZhbCBNb2RlIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBXRFRDIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfV0RUQ19XRENSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGRDQwICkgLyogKFdEVEMpIFdhdGNoZG9nIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1dEVENfV0RTUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkQ0OCApIC8qIChXRFRDKSBXYXRjaGRvZyBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1dEVENfV0RNUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkQ0NCApIC8qIChXRFRDKSBXYXRjaGRvZyBNb2RlIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBWUkVHIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfVlJFR19NUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGRDYwICkgLyogKFZSRUcpIFZvbHRhZ2UgUmVndWxhdG9yIE1vZGUgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIE1DIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfQVNSICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGRjA0ICkgLyogKE1DKSBNQyBBYm9ydCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX01DX1JDUiAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkYwMCApIC8qIChNQykgTUMgUmVtYXAgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfRkNSICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGRjY0ICkgLyogKE1DKSBNQyBGbGFzaCBDb21tYW5kIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19NQ19BQVNSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZGMDggKSAvKiAoTUMpIE1DIEFib3J0IEFkZHJlc3MgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19NQ19GU1IgICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZGNjggKSAvKiAoTUMpIE1DIEZsYXNoIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfRk1SICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGRjYwICkgLyogKE1DKSBNQyBGbGFzaCBNb2RlIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfU1BJMSBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTFfUFRDUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZFNDEyMCApIC8qIChQRENfU1BJMSkgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTFfUlBSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZFNDEwMCApIC8qIChQRENfU1BJMSkgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkxX1ROQ1IgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTQxMUMgKSAvKiAoUERDX1NQSTEpIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMV9UUFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkU0MTA4ICkgLyogKFBEQ19TUEkxKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkxX1ROUFIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTQxMTggKSAvKiAoUERDX1NQSTEpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMV9UQ1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkU0MTBDICkgLyogKFBEQ19TUEkxKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkxX1JDUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTQxMDQgKSAvKiAoUERDX1NQSTEpIFJlY2VpdmUgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMV9STlBSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkU0MTEwICkgLyogKFBEQ19TUEkxKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMV9STkNSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkU0MTE0ICkgLyogKFBEQ19TUEkxKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMV9QVFNSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkU0MTI0ICkgLyogKFBEQ19TUEkxKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBTUEkxIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMV9JTVIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkU0MDFDICkgLyogKFNQSTEpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkxX0lFUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTQwMTQgKSAvKiAoU1BJMSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMV9NUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkU0MDA0ICkgLyogKFNQSTEpIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTFfUkRSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZFNDAwOCApIC8qIChTUEkxKSBSZWNlaXZlIERhdGEgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTFfSURSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZFNDAxOCApIC8qIChTUEkxKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMV9TUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkU0MDEwICkgLyogKFNQSTEpIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMV9URFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkU0MDBDICkgLyogKFNQSTEpIFRyYW5zbWl0IERhdGEgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTFfQ1IgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZFNDAwMCApIC8qIChTUEkxKSBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkxX0NTUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTQwMzAgKSAvKiAoU1BJMSkgQ2hpcCBTZWxlY3QgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19TUEkwIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMF9QVENSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkUwMTIwICkgLyogKFBEQ19TUEkwKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMF9UUFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkUwMTA4ICkgLyogKFBEQ19TUEkwKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkwX1RDUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTAxMEMgKSAvKiAoUERDX1NQSTApIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTBfUkNSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZFMDEwNCApIC8qIChQRENfU1BJMCkgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkwX1BUU1IgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTAxMjQgKSAvKiAoUERDX1NQSTApIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTBfUk5QUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZFMDExMCApIC8qIChQRENfU1BJMCkgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTBfUlBSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZFMDEwMCApIC8qIChQRENfU1BJMCkgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkwX1ROQ1IgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTAxMUMgKSAvKiAoUERDX1NQSTApIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMF9STkNSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkUwMTE0ICkgLyogKFBEQ19TUEkwKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMF9UTlBSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkUwMTE4ICkgLyogKFBEQ19TUEkwKSBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFNQSTAgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19TUEkwX0lFUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTAwMTQgKSAvKiAoU1BJMCkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMF9TUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkUwMDEwICkgLyogKFNQSTApIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMF9JRFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkUwMDE4ICkgLyogKFNQSTApIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkwX0NSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTAwMDAgKSAvKiAoU1BJMCkgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMF9NUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkUwMDA0ICkgLyogKFNQSTApIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTBfSU1SICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZFMDAxQyApIC8qIChTUEkwKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMF9URFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkUwMDBDICkgLyogKFNQSTApIFRyYW5zbWl0IERhdGEgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTBfUkRSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZFMDAwOCApIC8qIChTUEkwKSBSZWNlaXZlIERhdGEgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTBfQ1NSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZFMDAzMCApIC8qIChTUEkwKSBDaGlwIFNlbGVjdCBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX1VTMSBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1VTMV9STkNSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDNDExNCApIC8qIChQRENfVVMxKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1BUQ1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkM0MTIwICkgLyogKFBEQ19VUzEpIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfVENSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzQxMEMgKSAvKiAoUERDX1VTMSkgVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1BUU1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkM0MTI0ICkgLyogKFBEQ19VUzEpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMV9UTlBSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDNDExOCApIC8qIChQRENfVVMxKSBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMV9SQ1IgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDNDEwNCApIC8qIChQRENfVVMxKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMV9STlBSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDNDExMCApIC8qIChQRENfVVMxKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1JQUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkM0MTAwICkgLyogKFBEQ19VUzEpIFJlY2VpdmUgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1ROQ1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkM0MTFDICkgLyogKFBEQ19VUzEpIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1RQUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkM0MTA4ICkgLyogKFBEQ19VUzEpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFVTMSBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1VTMV9JRiAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDNDA0QyApIC8qIChVUzEpIElSREFfRklMVEVSIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfTkVSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzQwNDQgKSAvKiAoVVMxKSBOYiBFcnJvcnMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMV9SVE9SICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDNDAyNCApIC8qIChVUzEpIFJlY2VpdmVyIFRpbWUtb3V0IFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfQ1NSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzQwMTQgKSAvKiAoVVMxKSBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX0lEUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkM0MDBDICkgLyogKFVTMSkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMV9JRVIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDNDAwOCApIC8qIChVUzEpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMV9USFIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDNDAxQyApIC8qIChVUzEpIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMV9UVEdSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDNDAyOCApIC8qIChVUzEpIFRyYW5zbWl0dGVyIFRpbWUtZ3VhcmQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMV9SSFIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDNDAxOCApIC8qIChVUzEpIFJlY2VpdmVyIEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMV9CUkdSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDNDAyMCApIC8qIChVUzEpIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMV9JTVIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDNDAxMCApIC8qIChVUzEpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfRklESSAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzQwNDAgKSAvKiAoVVMxKSBGSV9ESV9SYXRpbyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX0NSICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkM0MDAwICkgLyogKFVTMSkgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX01SICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkM0MDA0ICkgLyogKFVTMSkgTW9kZSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX1VTMCBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9UTlBSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDMDExOCApIC8qIChQRENfVVMwKSBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9STlBSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDMDExMCApIC8qIChQRENfVVMwKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX1RDUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkMwMTBDICkgLyogKFBEQ19VUzApIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9QVENSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDMDEyMCApIC8qIChQRENfVVMwKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX1BUU1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkMwMTI0ICkgLyogKFBEQ19VUzApIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9UTkNSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDMDExQyApIC8qIChQRENfVVMwKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9UUFIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDMDEwOCApIC8qIChQRENfVVMwKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzBfUkNSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzAxMDQgKSAvKiAoUERDX1VTMCkgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzBfUlBSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzAxMDAgKSAvKiAoUERDX1VTMCkgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzBfUk5DUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzAxMTQgKSAvKiAoUERDX1VTMCkgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFVTMCBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9CUkdSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDMDAyMCApIC8qIChVUzApIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9ORVIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDMDA0NCApIC8qIChVUzApIE5iIEVycm9ycyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX0NSICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkMwMDAwICkgLyogKFVTMCkgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX0lNUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkMwMDEwICkgLyogKFVTMCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9GSURJICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDMDA0MCApIC8qIChVUzApIEZJX0RJX1JhdGlvIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzBfVFRHUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzAwMjggKSAvKiAoVVMwKSBUcmFuc21pdHRlciBUaW1lLWd1YXJkIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzBfTVIgICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzAwMDQgKSAvKiAoVVMwKSBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzBfUlRPUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzAwMjQgKSAvKiAoVVMwKSBSZWNlaXZlciBUaW1lLW91dCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX0NTUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkMwMDE0ICkgLyogKFVTMCkgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9SSFIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDMDAxOCApIC8qIChVUzApIFJlY2VpdmVyIEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9JRFIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDMDAwQyApIC8qIChVUzApIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzBfVEhSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzAwMUMgKSAvKiAoVVMwKSBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzBfSUYgICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzAwNEMgKSAvKiAoVVMwKSBJUkRBX0ZJTFRFUiBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX0lFUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkMwMDA4ICkgLyogKFVTMCkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX1NTQyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19UTkNSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZENDExQyApIC8qIChQRENfU1NDKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19SUFIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZENDEwMCApIC8qIChQRENfU1NDKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19STkNSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZENDExNCApIC8qIChQRENfU1NDKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1RQUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ0MTA4ICkgLyogKFBEQ19TU0MpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19QVENSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZENDEyMCApIC8qIChQRENfU1NDKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1RDUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ0MTBDICkgLyogKFBEQ19TU0MpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19SQ1IgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZENDEwNCApIC8qIChQRENfU1NDKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19STlBSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZENDExMCApIC8qIChQRENfU1NDKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1ROUFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ0MTE4ICkgLyogKFBEQ19TU0MpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1BUU1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ0MTI0ICkgLyogKFBEQ19TU0MpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFNTQyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19SSFIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZENDAyMCApIC8qIChTU0MpIFJlY2VpdmUgSG9sZGluZyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1JTSFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ0MDMwICkgLyogKFNTQykgUmVjZWl2ZSBTeW5jIEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19URk1SICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZENDAxQyApIC8qIChTU0MpIFRyYW5zbWl0IEZyYW1lIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19JRFIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZENDA0OCApIC8qIChTU0MpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfVEhSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDQwMjQgKSAvKiAoU1NDKSBUcmFuc21pdCBIb2xkaW5nIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfUkNNUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDQwMTAgKSAvKiAoU1NDKSBSZWNlaXZlIENsb2NrIE1vZGVSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0lFUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ0MDQ0ICkgLyogKFNTQykgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1RTSFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ0MDM0ICkgLyogKFNTQykgVHJhbnNtaXQgU3luYyBIb2xkaW5nIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfU1IgICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDQwNDAgKSAvKiAoU1NDKSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19DTVIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZENDAwNCApIC8qIChTU0MpIENsb2NrIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19UQ01SICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZENDAxOCApIC8qIChTU0MpIFRyYW5zbWl0IENsb2NrIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19DUiAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZENDAwMCApIC8qIChTU0MpIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19JTVIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZENDA0QyApIC8qIChTU0MpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfUkZNUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDQwMTQgKSAvKiAoU1NDKSBSZWNlaXZlIEZyYW1lIE1vZGUgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRXSSBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9JRVIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZCODAyNCApIC8qIChUV0kpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9DUiAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZCODAwMCApIC8qIChUV0kpIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9TUiAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZCODAyMCApIC8qIChUV0kpIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX0lNUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkI4MDJDICkgLyogKFRXSSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9USFIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZCODAzNCApIC8qIChUV0kpIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9JRFIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZCODAyOCApIC8qIChUV0kpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UV0lfSUFEUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQjgwMEMgKSAvKiAoVFdJKSBJbnRlcm5hbCBBZGRyZXNzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UV0lfTU1SICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQjgwMDQgKSAvKiAoVFdJKSBNYXN0ZXIgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX0NXR1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkI4MDEwICkgLyogKFRXSSkgQ2xvY2sgV2F2ZWZvcm0gR2VuZXJhdG9yIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UV0lfUkhSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQjgwMzAgKSAvKiAoVFdJKSBSZWNlaXZlIEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBXTUNfQ0gzIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDNfQ1VQRFIgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMjcwICkgLyogKFBXTUNfQ0gzKSBDaGFubmVsIFVwZGF0ZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDNfUmVzZXJ2ZWQgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMjc0ICkgLyogKFBXTUNfQ0gzKSBSZXNlcnZlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDNfQ1BSRFIgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMjY4ICkgLyogKFBXTUNfQ0gzKSBDaGFubmVsIFBlcmlvZCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDNfQ0RUWVIgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMjY0ICkgLyogKFBXTUNfQ0gzKSBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0gzX0NDTlRSICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzI2QyApIC8qIChQV01DX0NIMykgQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NIM19DTVIgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQ0MyNjAgKSAvKiAoUFdNQ19DSDMpIENoYW5uZWwgTW9kZSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUFdNQ19DSDIgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NIMl9SZXNlcnZlZCAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQ0MyNTQgKSAvKiAoUFdNQ19DSDIpIFJlc2VydmVkICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NIMl9DTVIgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQ0MyNDAgKSAvKiAoUFdNQ19DSDIpIENoYW5uZWwgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDJfQ0NOVFIgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMjRDICkgLyogKFBXTUNfQ0gyKSBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0gyX0NQUkRSICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzI0OCApIC8qIChQV01DX0NIMikgQ2hhbm5lbCBQZXJpb2QgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0gyX0NVUERSICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzI1MCApIC8qIChQV01DX0NIMikgQ2hhbm5lbCBVcGRhdGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0gyX0NEVFlSICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzI0NCApIC8qIChQV01DX0NIMikgQ2hhbm5lbCBEdXR5IEN5Y2xlIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQV01DX0NIMSBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0gxX1Jlc2VydmVkICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzIzNCApIC8qIChQV01DX0NIMSkgUmVzZXJ2ZWQgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0gxX0NVUERSICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzIzMCApIC8qIChQV01DX0NIMSkgQ2hhbm5lbCBVcGRhdGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0gxX0NQUkRSICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzIyOCApIC8qIChQV01DX0NIMSkgQ2hhbm5lbCBQZXJpb2QgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0gxX0NDTlRSICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzIyQyApIC8qIChQV01DX0NIMSkgQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NIMV9DRFRZUiAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQ0MyMjQgKSAvKiAoUFdNQ19DSDEpIENoYW5uZWwgRHV0eSBDeWNsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDFfQ01SICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMjIwICkgLyogKFBXTUNfQ0gxKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBXTUNfQ0gwIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDBfUmVzZXJ2ZWQgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMjE0ICkgLyogKFBXTUNfQ0gwKSBSZXNlcnZlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDBfQ1BSRFIgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMjA4ICkgLyogKFBXTUNfQ0gwKSBDaGFubmVsIFBlcmlvZCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDBfQ0RUWVIgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMjA0ICkgLyogKFBXTUNfQ0gwKSBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0gwX0NNUiAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzIwMCApIC8qIChQV01DX0NIMCkgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NIMF9DVVBEUiAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQ0MyMTAgKSAvKiAoUFdNQ19DSDApIENoYW5uZWwgVXBkYXRlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NIMF9DQ05UUiAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQ0MyMEMgKSAvKiAoUFdNQ19DSDApIENoYW5uZWwgQ291bnRlciBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUFdNQyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfSURSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzAxNCApIC8qIChQV01DKSBQV01DIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QV01DX0RJUyAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQ0MwMDggKSAvKiAoUFdNQykgUFdNQyBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QV01DX0lFUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQ0MwMTAgKSAvKiAoUFdNQykgUFdNQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QV01DX1ZSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQ0MwRkMgKSAvKiAoUFdNQykgUFdNQyBWZXJzaW9uIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QV01DX0lTUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQ0MwMUMgKSAvKiAoUFdNQykgUFdNQyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QV01DX1NSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQ0MwMEMgKSAvKiAoUFdNQykgUFdNQyBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfSU1SICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzAxOCApIC8qIChQV01DKSBQV01DIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QV01DX01SICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQ0MwMDAgKSAvKiAoUFdNQykgUFdNQyBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QV01DX0VOQSAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQ0MwMDQgKSAvKiAoUFdNQykgUFdNQyBFbmFibGUgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFVEUCBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9JTVIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZCMDAxOCApIC8qIChVRFApIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VRFBfRkFERFIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQjAwMDggKSAvKiAoVURQKSBGdW5jdGlvbiBBZGRyZXNzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VRFBfTlVNICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQjAwMDAgKSAvKiAoVURQKSBGcmFtZSBOdW1iZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9GRFIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZCMDA1MCApIC8qIChVRFApIEVuZHBvaW50IEZJRk8gRGF0YSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0lTUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkIwMDFDICkgLyogKFVEUCkgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0NTUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkIwMDMwICkgLyogKFVEUCkgRW5kcG9pbnQgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VRFBfSURSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQjAwMTQgKSAvKiAoVURQKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0lDUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkIwMDIwICkgLyogKFVEUCkgSW50ZXJydXB0IENsZWFyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VRFBfUlNURVAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQjAwMjggKSAvKiAoVURQKSBSZXNldCBFbmRwb2ludCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX1RYVkMgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkIwMDc0ICkgLyogKFVEUCkgVHJhbnNjZWl2ZXIgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0dMQlNUQVRFICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkIwMDA0ICkgLyogKFVEUCkgR2xvYmFsIFN0YXRlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VRFBfSUVSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQjAwMTAgKSAvKiAoVURQKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBUQzAgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19UQzBfU1IgICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTAwMjAgKSAvKiAoVEMwKSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMF9SQyAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDAxQyApIC8qIChUQzApIFJlZ2lzdGVyIEMgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMF9SQiAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDAxOCApIC8qIChUQzApIFJlZ2lzdGVyIEIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMF9DQ1IgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDAwMCApIC8qIChUQzApIENoYW5uZWwgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMwX0NNUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMDA0ICkgLyogKFRDMCkgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyIChDYXB0dXJlIE1vZGUgLyBXYXZlZm9ybSBNb2RlKSAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMwX0lFUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMDI0ICkgLyogKFRDMCkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMwX1JBICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMDE0ICkgLyogKFRDMCkgUmVnaXN0ZXIgQSAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMwX0lEUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMDI4ICkgLyogKFRDMCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMF9DViAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDAxMCApIC8qIChUQzApIENvdW50ZXIgVmFsdWUgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMF9JTVIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDAyQyApIC8qIChUQzApIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBUQzEgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19UQzFfUkIgICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTAwNTggKSAvKiAoVEMxKSBSZWdpc3RlciBCICovDQotI2RlZmluZSBBVDkxQ19UQzFfQ0NSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTAwNDAgKSAvKiAoVEMxKSBDaGFubmVsIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMV9JRVIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDA2NCApIC8qIChUQzEpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMV9JRFIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDA2OCApIC8qIChUQzEpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UQzFfU1IgICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTAwNjAgKSAvKiAoVEMxKSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMV9DTVIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDA0NCApIC8qIChUQzEpIENoYW5uZWwgTW9kZSBSZWdpc3RlciAoQ2FwdHVyZSBNb2RlIC8gV2F2ZWZvcm0gTW9kZSkgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMV9SQSAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDA1NCApIC8qIChUQzEpIFJlZ2lzdGVyIEEgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMV9SQyAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDA1QyApIC8qIChUQzEpIFJlZ2lzdGVyIEMgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMV9JTVIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDA2QyApIC8qIChUQzEpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UQzFfQ1YgICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTAwNTAgKSAvKiAoVEMxKSBDb3VudGVyIFZhbHVlICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBUQzIgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19UQzJfQ01SICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTAwODQgKSAvKiAoVEMyKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXIgKENhcHR1cmUgTW9kZSAvIFdhdmVmb3JtIE1vZGUpICovDQotI2RlZmluZSBBVDkxQ19UQzJfQ0NSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTAwODAgKSAvKiAoVEMyKSBDaGFubmVsIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMl9DViAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDA5MCApIC8qIChUQzIpIENvdW50ZXIgVmFsdWUgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMl9SQSAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDA5NCApIC8qIChUQzIpIFJlZ2lzdGVyIEEgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMl9SQiAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDA5OCApIC8qIChUQzIpIFJlZ2lzdGVyIEIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMl9JRFIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDBBOCApIC8qIChUQzIpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UQzJfSU1SICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTAwQUMgKSAvKiAoVEMyKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMyX1JDICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMDlDICkgLyogKFRDMikgUmVnaXN0ZXIgQyAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMyX0lFUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMEE0ICkgLyogKFRDMikgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMyX1NSICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMEEwICkgLyogKFRDMikgU3RhdHVzIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBUQ0IgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19UQ0JfQk1SICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTAwQzQgKSAvKiAoVENCKSBUQyBCbG9jayBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UQ0JfQkNSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTAwQzAgKSAvKiAoVENCKSBUQyBCbG9jayBDb250cm9sIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU5fTUIwIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMF9NREwgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjE0ICkgLyogKENBTl9NQjApIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjBfTUFNICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDIwNCApIC8qIChDQU5fTUIwKSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMF9NQ1IgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjFDICkgLyogKENBTl9NQjApIE1haWxCb3ggQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMF9NSUQgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjA4ICkgLyogKENBTl9NQjApIE1haWxCb3ggSUQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjBfTVNSICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDIxMCApIC8qIChDQU5fTUIwKSBNYWlsQm94IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMF9NRklEICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjBDICkgLyogKENBTl9NQjApIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIwX01ESCAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyMTggKSAvKiAoQ0FOX01CMCkgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjBfTU1SICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDIwMCApIC8qIChDQU5fTUIwKSBNYWlsQm94IE1vZGUgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENBTl9NQjEgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIxX01ETCAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyMzQgKSAvKiAoQ0FOX01CMSkgTWFpbEJveCBEYXRhIExvdyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMV9NSUQgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjI4ICkgLyogKENBTl9NQjEpIE1haWxCb3ggSUQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjFfTU1SICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDIyMCApIC8qIChDQU5fTUIxKSBNYWlsQm94IE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjFfTVNSICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDIzMCApIC8qIChDQU5fTUIxKSBNYWlsQm94IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMV9NQU0gICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjI0ICkgLyogKENBTl9NQjEpIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIxX01ESCAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyMzggKSAvKiAoQ0FOX01CMSkgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjFfTUNSICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDIzQyApIC8qIChDQU5fTUIxKSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjFfTUZJRCAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDIyQyApIC8qIChDQU5fTUIxKSBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CMiBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjJfTUNSICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDI1QyApIC8qIChDQU5fTUIyKSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjJfTURIICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDI1OCApIC8qIChDQU5fTUIyKSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NSUQgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjQ4ICkgLyogKENBTl9NQjIpIE1haWxCb3ggSUQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjJfTURMICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDI1NCApIC8qIChDQU5fTUIyKSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIyX01NUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyNDAgKSAvKiAoQ0FOX01CMikgTWFpbEJveCBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIyX01BTSAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyNDQgKSAvKiAoQ0FOX01CMikgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjJfTUZJRCAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDI0QyApIC8qIChDQU5fTUIyKSBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NU1IgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjUwICkgLyogKENBTl9NQjIpIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU5fTUIzIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CM19NRklEICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjZDICkgLyogKENBTl9NQjMpIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIzX01BTSAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyNjQgKSAvKiAoQ0FOX01CMykgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjNfTUlEICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDI2OCApIC8qIChDQU5fTUIzKSBNYWlsQm94IElEIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIzX01DUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyN0MgKSAvKiAoQ0FOX01CMykgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIzX01NUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyNjAgKSAvKiAoQ0FOX01CMykgTWFpbEJveCBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIzX01TUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyNzAgKSAvKiAoQ0FOX01CMykgTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjNfTURMICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDI3NCApIC8qIChDQU5fTUIzKSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIzX01ESCAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyNzggKSAvKiAoQ0FOX01CMykgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENBTl9NQjQgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI0X01JRCAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyODggKSAvKiAoQ0FOX01CNCkgTWFpbEJveCBJRCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CNF9NTVIgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjgwICkgLyogKENBTl9NQjQpIE1haWxCb3ggTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CNF9NREggICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjk4ICkgLyogKENBTl9NQjQpIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI0X01GSUQgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyOEMgKSAvKiAoQ0FOX01CNCkgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjRfTVNSICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDI5MCApIC8qIChDQU5fTUI0KSBNYWlsQm94IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CNF9NQ1IgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjlDICkgLyogKENBTl9NQjQpIE1haWxCb3ggQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CNF9NREwgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjk0ICkgLyogKENBTl9NQjQpIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjRfTUFNICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDI4NCApIC8qIChDQU5fTUI0KSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CNSBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjVfTVNSICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDJCMCApIC8qIChDQU5fTUI1KSBNYWlsQm94IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CNV9NQ1IgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMkJDICkgLyogKENBTl9NQjUpIE1haWxCb3ggQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CNV9NRklEICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMkFDICkgLyogKENBTl9NQjUpIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI1X01ESCAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyQjggKSAvKiAoQ0FOX01CNSkgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjVfTUlEICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDJBOCApIC8qIChDQU5fTUI1KSBNYWlsQm94IElEIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI1X01NUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyQTAgKSAvKiAoQ0FOX01CNSkgTWFpbEJveCBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI1X01ETCAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyQjQgKSAvKiAoQ0FOX01CNSkgTWFpbEJveCBEYXRhIExvdyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CNV9NQU0gICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMkE0ICkgLyogKENBTl9NQjUpIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU5fTUI2IHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CNl9NRklEICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMkNDICkgLyogKENBTl9NQjYpIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI2X01JRCAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyQzggKSAvKiAoQ0FOX01CNikgTWFpbEJveCBJRCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CNl9NQU0gICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMkM0ICkgLyogKENBTl9NQjYpIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI2X01TUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyRDAgKSAvKiAoQ0FOX01CNikgTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjZfTURMICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDJENCApIC8qIChDQU5fTUI2KSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI2X01DUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyREMgKSAvKiAoQ0FOX01CNikgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI2X01ESCAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyRDggKSAvKiAoQ0FOX01CNikgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjZfTU1SICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDJDMCApIC8qIChDQU5fTUI2KSBNYWlsQm94IE1vZGUgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENBTl9NQjcgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI3X01DUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyRkMgKSAvKiAoQ0FOX01CNykgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI3X01ESCAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyRjggKSAvKiAoQ0FOX01CNykgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjdfTUZJRCAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDJFQyApIC8qIChDQU5fTUI3KSBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CN19NREwgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMkY0ICkgLyogKENBTl9NQjcpIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjdfTUlEICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDJFOCApIC8qIChDQU5fTUI3KSBNYWlsQm94IElEIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI3X01NUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyRTAgKSAvKiAoQ0FOX01CNykgTWFpbEJveCBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI3X01BTSAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyRTQgKSAvKiAoQ0FOX01CNykgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjdfTVNSICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDJGMCApIC8qIChDQU5fTUI3KSBNYWlsQm94IFN0YXR1cyBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1RDUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMDI0ICkgLyogKENBTikgVHJhbnNmZXIgQ29tbWFuZCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX0lNUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMDBDICkgLyogKENBTikgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9JRVIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDAwNCApIC8qIChDQU4pIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9FQ1IgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDAyMCApIC8qIChDQU4pIEVycm9yIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9USU1FU1RQICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDAxQyApIC8qIChDQU4pIFRpbWUgU3RhbXAgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NUiAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDAwMCApIC8qIChDQU4pIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9JRFIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDAwOCApIC8qIChDQU4pIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fQUNSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAwMjggKSAvKiAoQ0FOKSBBYm9ydCBDb21tYW5kIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fVElNICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAwMTggKSAvKiAoQ0FOKSBUaW1lciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1NSICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMDEwICkgLyogKENBTikgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fQlIgICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAwMTQgKSAvKiAoQ0FOKSBCYXVkcmF0ZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1ZSICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMEZDICkgLyogKENBTikgVmVyc2lvbiBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgRU1BQyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfSVNSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzAyNCApIC8qIChFTUFDKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1NBNEggICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGREMwQjQgKSAvKiAoRU1BQykgU3BlY2lmaWMgQWRkcmVzcyA0IFRvcCwgTGFzdCAyIGJ5dGVzICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1NBMUwgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGREMwOTggKSAvKiAoRU1BQykgU3BlY2lmaWMgQWRkcmVzcyAxIEJvdHRvbSwgRmlyc3QgNCBieXRlcyAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19FTEUgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDc4ICkgLyogKEVNQUMpIEV4Y2Vzc2l2ZSBMZW5ndGggRXJyb3JzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0xDT0wgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGREMwNUMgKSAvKiAoRU1BQykgTGF0ZSBDb2xsaXNpb24gUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfUkxFICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzA4OCApIC8qIChFTUFDKSBSZWNlaXZlIExlbmd0aCBGaWVsZCBNaXNtYXRjaCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19XT0wgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMEM0ICkgLyogKEVNQUMpIFdha2UgT24gTEFOIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0RURiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGREMwNTggKSAvKiAoRU1BQykgRGVmZXJyZWQgVHJhbnNtaXNzaW9uIEZyYW1lIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1RVTkQgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGREMwNjQgKSAvKiAoRU1BQykgVHJhbnNtaXQgVW5kZXJydW4gRXJyb3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfTkNSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzAwMCApIC8qIChFTUFDKSBOZXR3b3JrIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfU0E0TCAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzBCMCApIC8qIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDQgQm90dG9tLCBGaXJzdCA0IGJ5dGVzICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1JTUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGREMwMjAgKSAvKiAoRU1BQykgUmVjZWl2ZSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfU0EzTCAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzBBOCApIC8qIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDMgQm90dG9tLCBGaXJzdCA0IGJ5dGVzICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1RTUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGREMwMTQgKSAvKiAoRU1BQykgVHJhbnNtaXQgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0lEUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGREMwMkMgKSAvKiAoRU1BQykgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfUlNFICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzA3NCApIC8qIChFTUFDKSBSZWNlaXZlIFN5bWJvbCBFcnJvcnMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfRUNPTCAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzA2MCApIC8qIChFTUFDKSBFeGNlc3NpdmUgQ29sbGlzaW9uIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1RJRCAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGREMwQjggKSAvKiAoRU1BQykgVHlwZSBJRCBDaGVja2luZyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19IUkIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDkwICkgLyogKEVNQUMpIEhhc2ggQWRkcmVzcyBCb3R0b21bMzE6MF0gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfVEJRUCAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzAxQyApIC8qIChFTUFDKSBUcmFuc21pdCBCdWZmZXIgUXVldWUgUG9pbnRlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19VU1JJTyAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMEMwICkgLyogKEVNQUMpIFVTRVIgSW5wdXQvT3V0cHV0IFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1BUUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGREMwMzggKSAvKiAoRU1BQykgUGF1c2UgVGltZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19TQTJIICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMEE0ICkgLyogKEVNQUMpIFNwZWNpZmljIEFkZHJlc3MgMiBUb3AsIExhc3QgMiBieXRlcyAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19ST1YgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDcwICkgLyogKEVNQUMpIFJlY2VpdmUgT3ZlcnJ1biBFcnJvcnMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfQUxFICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzA1NCApIC8qIChFTUFDKSBBbGlnbm1lbnQgRXJyb3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfUkpBICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzA3QyApIC8qIChFTUFDKSBSZWNlaXZlIEphYmJlcnMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfUkJRUCAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzAxOCApIC8qIChFTUFDKSBSZWNlaXZlIEJ1ZmZlciBRdWV1ZSBQb2ludGVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1RQRiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGREMwOEMgKSAvKiAoRU1BQykgVHJhbnNtaXR0ZWQgUGF1c2UgRnJhbWVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX05DRkdSICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGREMwMDQgKSAvKiAoRU1BQykgTmV0d29yayBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0hSVCAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGREMwOTQgKSAvKiAoRU1BQykgSGFzaCBBZGRyZXNzIFRvcFs2MzozMl0gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfVVNGICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzA4MCApIC8qIChFTUFDKSBVbmRlcnNpemUgRnJhbWVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0ZDU0UgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGREMwNTAgKSAvKiAoRU1BQykgRnJhbWUgQ2hlY2sgU2VxdWVuY2UgRXJyb3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfVFBRICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzBCQyApIC8qIChFTUFDKSBUcmFuc21pdCBQYXVzZSBRdWFudHVtIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX01BTiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGREMwMzQgKSAvKiAoRU1BQykgUEhZIE1haW50ZW5hbmNlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0ZUTyAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGREMwNDAgKSAvKiAoRU1BQykgRnJhbWVzIFRyYW5zbWl0dGVkIE9LIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1JFViAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGREMwRkMgKSAvKiAoRU1BQykgUmV2aXNpb24gUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfSU1SICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzAzMCApIC8qIChFTUFDKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19TQ0YgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDQ0ICkgLyogKEVNQUMpIFNpbmdsZSBDb2xsaXNpb24gRnJhbWUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfUEZSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzAzQyApIC8qIChFTUFDKSBQYXVzZSBGcmFtZXMgcmVjZWl2ZWQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfTUNGICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzA0OCApIC8qIChFTUFDKSBNdWx0aXBsZSBDb2xsaXNpb24gRnJhbWUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfTlNSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzAwOCApIC8qIChFTUFDKSBOZXR3b3JrIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19TQTJMICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMEEwICkgLyogKEVNQUMpIFNwZWNpZmljIEFkZHJlc3MgMiBCb3R0b20sIEZpcnN0IDQgYnl0ZXMgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfRlJPICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzA0QyApIC8qIChFTUFDKSBGcmFtZXMgUmVjZWl2ZWQgT0sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfSUVSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzAyOCApIC8qIChFTUFDKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1NBMUggICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGREMwOUMgKSAvKiAoRU1BQykgU3BlY2lmaWMgQWRkcmVzcyAxIFRvcCwgTGFzdCAyIGJ5dGVzICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0NTRSAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGREMwNjggKSAvKiAoRU1BQykgQ2FycmllciBTZW5zZSBFcnJvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19TQTNIICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMEFDICkgLyogKEVNQUMpIFNwZWNpZmljIEFkZHJlc3MgMyBUb3AsIExhc3QgMiBieXRlcyAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19SUkUgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDZDICkgLyogKEVNQUMpIFJlY2VpdmUgUmVzc291cmNlIEVycm9yIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1NURSAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGREMwODQgKSAvKiAoRU1BQykgU1FFIFRlc3QgRXJyb3IgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19BREMgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19BRENfUFRTUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDgxMjQgKSAvKiAoUERDX0FEQykgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1BUQ1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ4MTIwICkgLyogKFBEQ19BREMpIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRENfVE5QUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDgxMTggKSAvKiAoUERDX0FEQykgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRENfVE5DUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDgxMUMgKSAvKiAoUERDX0FEQykgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRENfUk5QUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDgxMTAgKSAvKiAoUERDX0FEQykgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19STkNSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEODExNCApIC8qIChQRENfQURDKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1JQUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ4MTAwICkgLyogKFBEQ19BREMpIFJlY2VpdmUgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1RDUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ4MTBDICkgLyogKFBEQ19BREMpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19UUFIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEODEwOCApIC8qIChQRENfQURDKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRENfUkNSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDgxMDQgKSAvKiAoUERDX0FEQykgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBBREMgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19BRENfQ0RSMiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDgwMzggKSAvKiAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDIgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DRFIzICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEODAzQyApIC8qIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMyAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NEUjAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ4MDMwICkgLyogKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAwICovDQotI2RlZmluZSBBVDkxQ19BRENfQ0RSNSAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDgwNDQgKSAvKiAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDUgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DSERSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEODAxNCApIC8qIChBREMpIEFEQyBDaGFubmVsIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19TUiAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEODAxQyApIC8qIChBREMpIEFEQyBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DRFI0ICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEODA0MCApIC8qIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNCAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NEUjEgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ4MDM0ICkgLyogKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAxICovDQotI2RlZmluZSBBVDkxQ19BRENfTENEUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDgwMjAgKSAvKiAoQURDKSBBREMgTGFzdCBDb252ZXJ0ZWQgRGF0YSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0lEUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ4MDI4ICkgLyogKEFEQykgQURDIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRENfQ1IgICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDgwMDAgKSAvKiAoQURDKSBBREMgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NEUjcgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ4MDRDICkgLyogKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA3ICovDQotI2RlZmluZSBBVDkxQ19BRENfQ0RSNiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDgwNDggKSAvKiAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDYgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19JRVIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEODAyNCApIC8qIChBREMpIEFEQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRENfQ0hFUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDgwMTAgKSAvKiAoQURDKSBBREMgQ2hhbm5lbCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DSFNSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEODAxOCApIC8qIChBREMpIEFEQyBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX01SICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ4MDA0ICkgLyogKEFEQykgQURDIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19JTVIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEODAyQyApIC8qIChBREMpIEFEQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX0FFUyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19UUFIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBNDEwOCApIC8qIChQRENfQUVTKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRVNfUFRDUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTQxMjAgKSAvKiAoUERDX0FFUykgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19STlBSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBNDExMCApIC8qIChQRENfQUVTKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX1ROQ1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE0MTFDICkgLyogKFBEQ19BRVMpIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX1RDUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE0MTBDICkgLyogKFBEQ19BRVMpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19SQ1IgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBNDEwNCApIC8qIChQRENfQUVTKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19STkNSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBNDExNCApIC8qIChQRENfQUVTKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX1ROUFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE0MTE4ICkgLyogKFBEQ19BRVMpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX1JQUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE0MTAwICkgLyogKFBEQ19BRVMpIFJlY2VpdmUgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX1BUU1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE0MTI0ICkgLyogKFBEQ19BRVMpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIEFFUyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19JVnhSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBNDA2MCApIC8qIChBRVMpIEluaXRpYWxpemF0aW9uIFZlY3RvciB4IFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRVNfTVIgICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTQwMDQgKSAvKiAoQUVTKSBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRVNfVlIgICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTQwRkMgKSAvKiAoQUVTKSBBRVMgVmVyc2lvbiBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX09EQVRBeFIgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE0MDUwICkgLyogKEFFUykgT3V0cHV0IERhdGEgeCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX0lEQVRBeFIgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE0MDQwICkgLyogKEFFUykgSW5wdXQgRGF0YSB4IFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRVNfQ1IgICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTQwMDAgKSAvKiAoQUVTKSBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRVNfSURSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTQwMTQgKSAvKiAoQUVTKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX0lNUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE0MDE4ICkgLyogKEFFUykgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19JRVIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBNDAxMCApIC8qIChBRVMpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19LRVlXeFIgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBNDAyMCApIC8qIChBRVMpIEtleSBXb3JkIHggUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19JU1IgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBNDAxQyApIC8qIChBRVMpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19UREVTIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19STkNSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE4MTE0ICkgLyogKFBEQ19UREVTKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19UQ1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE4MTBDICkgLyogKFBEQ19UREVTKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UREVTX1JDUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTgxMDQgKSAvKiAoUERDX1RERVMpIFJlY2VpdmUgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19UTlBSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE4MTE4ICkgLyogKFBEQ19UREVTKSBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfUk5QUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBODExMCApIC8qIChQRENfVERFUykgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfUlBSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBODEwMCApIC8qIChQRENfVERFUykgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UREVTX1ROQ1IgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTgxMUMgKSAvKiAoUERDX1RERVMpIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19UUFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE4MTA4ICkgLyogKFBEQ19UREVTKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UREVTX1BUU1IgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTgxMjQgKSAvKiAoUERDX1RERVMpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfUFRDUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBODEyMCApIC8qIChQRENfVERFUykgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRERVMgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19UREVTX0tFWTJXeFIgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTgwMjggKSAvKiAoVERFUykgS2V5IDIgV29yZCB4IFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UREVTX0tFWTNXeFIgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTgwMzAgKSAvKiAoVERFUykgS2V5IDMgV29yZCB4IFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UREVTX0lEUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTgwMTQgKSAvKiAoVERFUykgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfVlIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBODBGQyApIC8qIChUREVTKSBUREVTIFZlcnNpb24gUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfSVZ4UiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBODA2MCApIC8qIChUREVTKSBJbml0aWFsaXphdGlvbiBWZWN0b3IgeCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19PREFUQXhSICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE4MDUwICkgLyogKFRERVMpIE91dHB1dCBEYXRhIHggUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfSU1SICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBODAxOCApIC8qIChUREVTKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19NUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE4MDA0ICkgLyogKFRERVMpIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfQ1IgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBODAwMCApIC8qIChUREVTKSBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UREVTX0lFUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTgwMTAgKSAvKiAoVERFUykgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19JU1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE4MDFDICkgLyogKFRERVMpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfSURBVEF4UiAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBODA0MCApIC8qIChUREVTKSBJbnB1dCBEYXRhIHggUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfS0VZMVd4UiAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBODAyMCApIC8qIChUREVTKSBLZXkgMSBXb3JkIHggUmVnaXN0ZXIgKi8NCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICAgUkVHSVNURVIgQUREUkVTUyBERUZJTklUSU9OIEZPUiBBVDkxU0FNN1gyNTYNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgU1lTIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIEFJQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19BSUNfSVZSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjEwMCkgLy8gKEFJQykgSVJRIFZlY3RvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX1NNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYwMDApIC8vIChBSUMpIFNvdXJjZSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfRlZSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjEwNCkgLy8gKEFJQykgRklRIFZlY3RvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0RDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYxMzgpIC8vIChBSUMpIERlYnVnIENvbnRyb2wgUmVnaXN0ZXIgKFByb3RlY3QpDQorI2RlZmluZSBBVDkxQ19BSUNfRU9JQ1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjEzMCkgLy8gKEFJQykgRW5kIG9mIEludGVycnVwdCBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfU1ZSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjA4MCkgLy8gKEFJQykgU291cmNlIFZlY3RvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0ZGU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYxNDgpIC8vIChBSUMpIEZhc3QgRm9yY2luZyBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19JQ0NSICAoKEFUOTFfUkVHICopIAkweEZGRkZGMTI4KSAvLyAoQUlDKSBJbnRlcnJ1cHQgQ2xlYXIgQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0lTUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYxMDgpIC8vIChBSUMpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19JTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkZGMTEwKSAvLyAoQUlDKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0lQUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYxMEMpIC8vIChBSUMpIEludGVycnVwdCBQZW5kaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfRkZFUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjE0MCkgLy8gKEFJQykgRmFzdCBGb3JjaW5nIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0lFQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYxMjApIC8vIChBSUMpIEludGVycnVwdCBFbmFibGUgQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0lTQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYxMkMpIC8vIChBSUMpIEludGVycnVwdCBTZXQgQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0ZGRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYxNDQpIC8vIChBSUMpIEZhc3QgRm9yY2luZyBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfQ0lTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjExNCkgLy8gKEFJQykgQ29yZSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfSURDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjEyNCkgLy8gKEFJQykgSW50ZXJydXB0IERpc2FibGUgQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX1NQVSAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYxMzQpIC8vIChBSUMpIFNwdXJpb3VzIFZlY3RvciBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX0RCR1UgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfREJHVV9UQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYzMEMpIC8vIChQRENfREJHVSkgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9STlBSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYzMTApIC8vIChQRENfREJHVSkgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfVE5QUiAoKEFUOTFfUkVHICopIAkweEZGRkZGMzE4KSAvLyAoUERDX0RCR1UpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9UUFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYzMDgpIC8vIChQRENfREJHVSkgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9SUFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYzMDApIC8vIChQRENfREJHVSkgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1JDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjMwNCkgLy8gKFBEQ19EQkdVKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfUk5DUiAoKEFUOTFfUkVHICopIAkweEZGRkZGMzE0KSAvLyAoUERDX0RCR1UpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1BUQ1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjMyMCkgLy8gKFBEQ19EQkdVKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9QVFNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYzMjQpIC8vIChQRENfREJHVSkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9UTkNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYzMUMpIC8vIChQRENfREJHVSkgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBEQkdVIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0RCR1VfRVhJRCAoKEFUOTFfUkVHICopIAkweEZGRkZGMjQ0KSAvLyAoREJHVSkgQ2hpcCBJRCBFeHRlbnNpb24gUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfQlJHUiAoKEFUOTFfUkVHICopIAkweEZGRkZGMjIwKSAvLyAoREJHVSkgQmF1ZCBSYXRlIEdlbmVyYXRvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9JRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYyMEMpIC8vIChEQkdVKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9DU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYyMTQpIC8vIChEQkdVKSBDaGFubmVsIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9DSURSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYyNDApIC8vIChEQkdVKSBDaGlwIElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX01SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjIwNCkgLy8gKERCR1UpIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfSU1SICAoKEFUOTFfUkVHICopIAkweEZGRkZGMjEwKSAvLyAoREJHVSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkZGMjAwKSAvLyAoREJHVSkgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9GTlRSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYyNDgpIC8vIChEQkdVKSBGb3JjZSBOVFJTVCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9USFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYyMUMpIC8vIChEQkdVKSBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1JIUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjIxOCkgLy8gKERCR1UpIFJlY2VpdmVyIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfSUVSICAoKEFUOTFfUkVHICopIAkweEZGRkZGMjA4KSAvLyAoREJHVSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUElPQSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19QSU9BX09EUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQxNCkgLy8gKFBJT0EpIE91dHB1dCBEaXNhYmxlIFJlZ2lzdGVycg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9TT0RSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0MzApIC8vIChQSU9BKSBTZXQgT3V0cHV0IERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfSVNSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNDRDKSAvLyAoUElPQSkgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9BQlNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0NzgpIC8vIChQSU9BKSBBQiBTZWxlY3QgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0lFUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQ0MCkgLy8gKFBJT0EpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfUFBVRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQ2MCkgLy8gKFBJT0EpIFB1bGwtdXAgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9JTVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0NDgpIC8vIChQSU9BKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9QRVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0MDApIC8vIChQSU9BKSBQSU8gRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0lGRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQyNCkgLy8gKFBJT0EpIElucHV0IEZpbHRlciBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX09XRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjRBNCkgLy8gKFBJT0EpIE91dHB1dCBXcml0ZSBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX01EU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQ1OCkgLy8gKFBJT0EpIE11bHRpLWRyaXZlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfSURSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNDQ0KSAvLyAoUElPQSkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfT0RTUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNDM4KSAvLyAoUElPQSkgT3V0cHV0IERhdGEgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX1BQVVNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0NjgpIC8vIChQSU9BKSBQdWxsLXVwIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9PV1NSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0QTgpIC8vIChQSU9BKSBPdXRwdXQgV3JpdGUgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0JTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQ3NCkgLy8gKFBJT0EpIFNlbGVjdCBCIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX09XRVIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjRBMCkgLy8gKFBJT0EpIE91dHB1dCBXcml0ZSBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfSUZFUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNDIwKSAvLyAoUElPQSkgSW5wdXQgRmlsdGVyIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9QRFNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0M0MpIC8vIChQSU9BKSBQaW4gRGF0YSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfUFBVRVIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQ2NCkgLy8gKFBJT0EpIFB1bGwtdXAgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX09TUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQxOCkgLy8gKFBJT0EpIE91dHB1dCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfQVNSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNDcwKSAvLyAoUElPQSkgU2VsZWN0IEEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfTUREUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNDU0KSAvLyAoUElPQSkgTXVsdGktZHJpdmVyIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfQ09EUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNDM0KSAvLyAoUElPQSkgQ2xlYXIgT3V0cHV0IERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfTURFUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNDUwKSAvLyAoUElPQSkgTXVsdGktZHJpdmVyIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9QRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0MDQpIC8vIChQSU9BKSBQSU8gRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9JRlNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0MjgpIC8vIChQSU9BKSBJbnB1dCBGaWx0ZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX09FUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQxMCkgLy8gKFBJT0EpIE91dHB1dCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfUFNSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNDA4KSAvLyAoUElPQSkgUElPIFN0YXR1cyBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUElPQiBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19QSU9CX09XRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjZBNCkgLy8gKFBJT0IpIE91dHB1dCBXcml0ZSBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX01ERVIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjY1MCkgLy8gKFBJT0IpIE11bHRpLWRyaXZlciBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfUFBVU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjY2OCkgLy8gKFBJT0IpIFB1bGwtdXAgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX0lNUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjY0OCkgLy8gKFBJT0IpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX0FTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjY3MCkgLy8gKFBJT0IpIFNlbGVjdCBBIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX1BQVURSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2NjApIC8vIChQSU9CKSBQdWxsLXVwIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfUFNSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNjA4KSAvLyAoUElPQikgUElPIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9JRVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2NDApIC8vIChQSU9CKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX0NPRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjYzNCkgLy8gKFBJT0IpIENsZWFyIE91dHB1dCBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX09XRVIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjZBMCkgLy8gKFBJT0IpIE91dHB1dCBXcml0ZSBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfQUJTUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNjc4KSAvLyAoUElPQikgQUIgU2VsZWN0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9JRkRSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2MjQpIC8vIChQSU9CKSBJbnB1dCBGaWx0ZXIgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9QRFNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2M0MpIC8vIChQSU9CKSBQaW4gRGF0YSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfSURSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNjQ0KSAvLyAoUElPQikgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfT1dTUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNkE4KSAvLyAoUElPQikgT3V0cHV0IFdyaXRlIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9QRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2MDQpIC8vIChQSU9CKSBQSU8gRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9PRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2MTQpIC8vIChQSU9CKSBPdXRwdXQgRGlzYWJsZSBSZWdpc3RlcnINCisjZGVmaW5lIEFUOTFDX1BJT0JfSUZTUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNjI4KSAvLyAoUElPQikgSW5wdXQgRmlsdGVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9QUFVFUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNjY0KSAvLyAoUElPQikgUHVsbC11cCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfU09EUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNjMwKSAvLyAoUElPQikgU2V0IE91dHB1dCBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX0lTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjY0QykgLy8gKFBJT0IpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfT0RTUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNjM4KSAvLyAoUElPQikgT3V0cHV0IERhdGEgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX09TUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjYxOCkgLy8gKFBJT0IpIE91dHB1dCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfTURTUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNjU4KSAvLyAoUElPQikgTXVsdGktZHJpdmVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9JRkVSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2MjApIC8vIChQSU9CKSBJbnB1dCBGaWx0ZXIgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX0JTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjY3NCkgLy8gKFBJT0IpIFNlbGVjdCBCIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX01ERFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjY1NCkgLy8gKFBJT0IpIE11bHRpLWRyaXZlciBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX09FUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjYxMCkgLy8gKFBJT0IpIE91dHB1dCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfUEVSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNjAwKSAvLyAoUElPQikgUElPIEVuYWJsZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0tHUiBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19DS0dSX01PUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkMyMCkgLy8gKENLR1IpIE1haW4gT3NjaWxsYXRvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9QTExSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDMkMpIC8vIChDS0dSKSBQTEwgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NLR1JfTUNGUiAoKEFUOTFfUkVHICopIAkweEZGRkZGQzI0KSAvLyAoQ0tHUikgTWFpbiBDbG9jayAgRnJlcXVlbmN5IFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQTUMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUE1DX0lEUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDNjQpIC8vIChQTUMpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfTU9SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkMyMCkgLy8gKFBNQykgTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfUExMUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkMyQykgLy8gKFBNQykgUExMIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfUENFUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkMxMCkgLy8gKFBNQykgUGVyaXBoZXJhbCBDbG9jayBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0tSICAoKEFUOTFfUkVHICopIAkweEZGRkZGQzQwKSAvLyAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19NQ0tSICAoKEFUOTFfUkVHICopIAkweEZGRkZGQzMwKSAvLyAoUE1DKSBNYXN0ZXIgQ2xvY2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19TQ0RSICAoKEFUOTFfUkVHICopIAkweEZGRkZGQzA0KSAvLyAoUE1DKSBTeXN0ZW0gQ2xvY2sgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDMTQpIC8vIChQTUMpIFBlcmlwaGVyYWwgQ2xvY2sgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX1NDU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDMDgpIC8vIChQTUMpIFN5c3RlbSBDbG9jayBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19QQ1NSICAoKEFUOTFfUkVHICopIAkweEZGRkZGQzE4KSAvLyAoUE1DKSBQZXJpcGhlcmFsIENsb2NrIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX01DRlIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDMjQpIC8vIChQTUMpIE1haW4gQ2xvY2sgIEZyZXF1ZW5jeSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX1NDRVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDMDApIC8vIChQTUMpIFN5c3RlbSBDbG9jayBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19JTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkZGQzZDKSAvLyAoUE1DKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX0lFUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDNjApIC8vIChQTUMpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19TUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkZGQzY4KSAvLyAoUE1DKSBTdGF0dXMgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFJTVEMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19SQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZEMDApIC8vIChSU1RDKSBSZXNldCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19SU1RDX1JNUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkQwOCkgLy8gKFJTVEMpIFJlc2V0IE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1JTVENfUlNSICAoKEFUOTFfUkVHICopIAkweEZGRkZGRDA0KSAvLyAoUlNUQykgUmVzZXQgU3RhdHVzIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBSVFRDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1JUVENfUlRTUiAoKEFUOTFfUkVHICopIAkweEZGRkZGRDJDKSAvLyAoUlRUQykgUmVhbC10aW1lIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19SVE1SICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZEMjApIC8vIChSVFRDKSBSZWFsLXRpbWUgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19SVFZSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZEMjgpIC8vIChSVFRDKSBSZWFsLXRpbWUgVmFsdWUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1JUVENfUlRBUiAoKEFUOTFfUkVHICopIAkweEZGRkZGRDI0KSAvLyAoUlRUQykgUmVhbC10aW1lIEFsYXJtIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQSVRDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1BJVENfUElWUiAoKEFUOTFfUkVHICopIAkweEZGRkZGRDM4KSAvLyAoUElUQykgUGVyaW9kIEludGVydmFsIFZhbHVlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSVRDX1BJU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkQzNCkgLy8gKFBJVEMpIFBlcmlvZCBJbnRlcnZhbCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJVENfUElJUiAoKEFUOTFfUkVHICopIAkweEZGRkZGRDNDKSAvLyAoUElUQykgUGVyaW9kIEludGVydmFsIEltYWdlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSVRDX1BJTVIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkQzMCkgLy8gKFBJVEMpIFBlcmlvZCBJbnRlcnZhbCBNb2RlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBXRFRDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1dEVENfV0RDUiAoKEFUOTFfUkVHICopIAkweEZGRkZGRDQwKSAvLyAoV0RUQykgV2F0Y2hkb2cgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRFNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZENDgpIC8vIChXRFRDKSBXYXRjaGRvZyBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1dEVENfV0RNUiAoKEFUOTFfUkVHICopIAkweEZGRkZGRDQ0KSAvLyAoV0RUQykgV2F0Y2hkb2cgTW9kZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVlJFRyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19WUkVHX01SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkQ2MCkgLy8gKFZSRUcpIFZvbHRhZ2UgUmVndWxhdG9yIE1vZGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIE1DIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX01DX0FTUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkZGRjA0KSAvLyAoTUMpIE1DIEFib3J0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfTUNfUkNSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZGMDApIC8vIChNQykgTUMgUmVtYXAgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfTUNfRkNSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZGNjQpIC8vIChNQykgTUMgRmxhc2ggQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfTUNfQUFTUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZGMDgpIC8vIChNQykgTUMgQWJvcnQgQWRkcmVzcyBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX01DX0ZTUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkZGRjY4KSAvLyAoTUMpIE1DIEZsYXNoIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfTUNfRk1SICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZGNjApIC8vIChNQykgTUMgRmxhc2ggTW9kZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX1NQSTEgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9QVENSICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQxMjApIC8vIChQRENfU1BJMSkgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfUlBSICAoKEFUOTFfUkVHICopIAkweEZGRkU0MTAwKSAvLyAoUERDX1NQSTEpIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9UTkNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQxMUMpIC8vIChQRENfU1BJMSkgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX1RQUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFNDEwOCkgLy8gKFBEQ19TUEkxKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX1ROUFIgKChBVDkxX1JFRyAqKSAJMHhGRkZFNDExOCkgLy8gKFBEQ19TUEkxKSBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfVENSICAoKEFUOTFfUkVHICopIAkweEZGRkU0MTBDKSAvLyAoUERDX1NQSTEpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfUkNSICAoKEFUOTFfUkVHICopIAkweEZGRkU0MTA0KSAvLyAoUERDX1NQSTEpIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9STlBSICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQxMTApIC8vIChQRENfU1BJMSkgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfUk5DUiAoKEFUOTFfUkVHICopIAkweEZGRkU0MTE0KSAvLyAoUERDX1NQSTEpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX1BUU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZFNDEyNCkgLy8gKFBEQ19TUEkxKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBTUEkxIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1NQSTFfSU1SICAoKEFUOTFfUkVHICopIAkweEZGRkU0MDFDKSAvLyAoU1BJMSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfSUVSICAoKEFUOTFfUkVHICopIAkweEZGRkU0MDE0KSAvLyAoU1BJMSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9NUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQwMDQpIC8vIChTUEkxKSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX1JEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFNDAwOCkgLy8gKFNQSTEpIFJlY2VpdmUgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9JRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQwMTgpIC8vIChTUEkxKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9TUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQwMTApIC8vIChTUEkxKSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfVERSICAoKEFUOTFfUkVHICopIAkweEZGRkU0MDBDKSAvLyAoU1BJMSkgVHJhbnNtaXQgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9DUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQwMDApIC8vIChTUEkxKSBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX0NTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFNDAzMCkgLy8gKFNQSTEpIENoaXAgU2VsZWN0IFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfU1BJMCBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19TUEkwX1BUQ1IgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDEyMCkgLy8gKFBEQ19TUEkwKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9UUFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAxMDgpIC8vIChQRENfU1BJMCkgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9UQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAxMEMpIC8vIChQRENfU1BJMCkgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9SQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAxMDQpIC8vIChQRENfU1BJMCkgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1BUU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDEyNCkgLy8gKFBEQ19TUEkwKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1JOUFIgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDExMCkgLy8gKFBEQ19TUEkwKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9SUFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAxMDApIC8vIChQRENfU1BJMCkgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1ROQ1IgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDExQykgLy8gKFBEQ19TUEkwKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfUk5DUiAoKEFUOTFfUkVHICopIAkweEZGRkUwMTE0KSAvLyAoUERDX1NQSTApIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1ROUFIgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDExOCkgLy8gKFBEQ19TUEkwKSBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFNQSTAgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9JRVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAwMTQpIC8vIChTUEkwKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1NSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDAxMCkgLy8gKFNQSTApIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9JRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAwMTgpIC8vIChTUEkwKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9DUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAwMDApIC8vIChTUEkwKSBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX01SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDAwNCkgLy8gKFNQSTApIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfSU1SICAoKEFUOTFfUkVHICopIAkweEZGRkUwMDFDKSAvLyAoU1BJMCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfVERSICAoKEFUOTFfUkVHICopIAkweEZGRkUwMDBDKSAvLyAoU1BJMCkgVHJhbnNtaXQgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9SRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAwMDgpIC8vIChTUEkwKSBSZWNlaXZlIERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfQ1NSICAoKEFUOTFfUkVHICopIAkweEZGRkUwMDMwKSAvLyAoU1BJMCkgQ2hpcCBTZWxlY3QgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19VUzEgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVVMxX1JOQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQxMTQpIC8vIChQRENfVVMxKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1BUQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQxMjApIC8vIChQRENfVVMxKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1RDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQxMEMpIC8vIChQRENfVVMxKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfUFRTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDEyNCkgLy8gKFBEQ19VUzEpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9UTlBSICAoKEFUOTFfUkVHICopIAkweEZGRkM0MTE4KSAvLyAoUERDX1VTMSkgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfUkNSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDEwNCkgLy8gKFBEQ19VUzEpIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1JOUFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQxMTApIC8vIChQRENfVVMxKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1JQUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQxMDApIC8vIChQRENfVVMxKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9UTkNSICAoKEFUOTFfUkVHICopIAkweEZGRkM0MTFDKSAvLyAoUERDX1VTMSkgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfVFBSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDEwOCkgLy8gKFBEQ19VUzEpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFVTMSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19VUzFfSUYgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDA0QykgLy8gKFVTMSkgSVJEQV9GSUxURVIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9ORVIgICAoKEFUOTFfUkVHICopIAkweEZGRkM0MDQ0KSAvLyAoVVMxKSBOYiBFcnJvcnMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9SVE9SICAoKEFUOTFfUkVHICopIAkweEZGRkM0MDI0KSAvLyAoVVMxKSBSZWNlaXZlciBUaW1lLW91dCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX0NTUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQwMTQpIC8vIChVUzEpIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDAwQykgLy8gKFVTMSkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9JRVIgICAoKEFUOTFfUkVHICopIAkweEZGRkM0MDA4KSAvLyAoVVMxKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfVEhSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDAxQykgLy8gKFVTMSkgVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1RUR1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQwMjgpIC8vIChVUzEpIFRyYW5zbWl0dGVyIFRpbWUtZ3VhcmQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9SSFIgICAoKEFUOTFfUkVHICopIAkweEZGRkM0MDE4KSAvLyAoVVMxKSBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfQlJHUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDAyMCkgLy8gKFVTMSkgQmF1ZCBSYXRlIEdlbmVyYXRvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX0lNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQwMTApIC8vIChVUzEpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfRklESSAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDA0MCkgLy8gKFVTMSkgRklfRElfUmF0aW8gUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9DUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkM0MDAwKSAvLyAoVVMxKSBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfTVIgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDAwNCkgLy8gKFVTMSkgTW9kZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX1VTMCBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19VUzBfVE5QUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDExOCkgLy8gKFBEQ19VUzApIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1JOUFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAxMTApIC8vIChQRENfVVMwKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1RDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAxMEMpIC8vIChQRENfVVMwKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfUFRDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDEyMCkgLy8gKFBEQ19VUzApIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfUFRTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDEyNCkgLy8gKFBEQ19VUzApIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9UTkNSICAoKEFUOTFfUkVHICopIAkweEZGRkMwMTFDKSAvLyAoUERDX1VTMCkgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfVFBSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDEwOCkgLy8gKFBEQ19VUzApIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9SQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMTA0KSAvLyAoUERDX1VTMCkgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfUlBSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDEwMCkgLy8gKFBEQ19VUzApIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1JOQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAxMTQpIC8vIChQRENfVVMwKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVVMwIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1VTMF9CUkdSICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDIwKSAvLyAoVVMwKSBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfTkVSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDA0NCkgLy8gKFVTMCkgTmIgRXJyb3JzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfQ1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDAwMCkgLy8gKFVTMCkgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX0lNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAwMTApIC8vIChVUzApIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfRklESSAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDA0MCkgLy8gKFVTMCkgRklfRElfUmF0aW8gUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9UVEdSICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDI4KSAvLyAoVVMwKSBUcmFuc21pdHRlciBUaW1lLWd1YXJkIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfTVIgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDAwNCkgLy8gKFVTMCkgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1JUT1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAwMjQpIC8vIChVUzApIFJlY2VpdmVyIFRpbWUtb3V0IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfQ1NSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDAxNCkgLy8gKFVTMCkgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9SSFIgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDE4KSAvLyAoVVMwKSBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDAwQykgLy8gKFVTMCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9USFIgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDFDKSAvLyAoVVMwKSBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfSUYgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDA0QykgLy8gKFVTMCkgSVJEQV9GSUxURVIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9JRVIgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDA4KSAvLyAoVVMwKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfU1NDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1NTQ19UTkNSICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MTFDKSAvLyAoUERDX1NTQykgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUlBSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDEwMCkgLy8gKFBEQ19TU0MpIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JOQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQxMTQpIC8vIChQRENfU1NDKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RQUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQxMDgpIC8vIChQRENfU1NDKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUFRDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDEyMCkgLy8gKFBEQ19TU0MpIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfVENSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDEwQykgLy8gKFBEQ19TU0MpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19SQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MTA0KSAvLyAoUERDX1NTQykgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUk5QUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDExMCkgLy8gKFBEQ19TU0MpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfVE5QUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDExOCkgLy8gKFBEQ19TU0MpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1BUU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQxMjQpIC8vIChQRENfU1NDKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBTU0MgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JIUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQwMjApIC8vIChTU0MpIFJlY2VpdmUgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JTSFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQwMzApIC8vIChTU0MpIFJlY2VpdmUgU3luYyBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfVEZNUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDAxQykgLy8gKFNTQykgVHJhbnNtaXQgRnJhbWUgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX0lEUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQwNDgpIC8vIChTU0MpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfVEhSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDAyNCkgLy8gKFNTQykgVHJhbnNtaXQgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JDTVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQwMTApIC8vIChTU0MpIFJlY2VpdmUgQ2xvY2sgTW9kZVJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfSUVSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDA0NCkgLy8gKFNTQykgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RTSFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQwMzQpIC8vIChTU0MpIFRyYW5zbWl0IFN5bmMgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1NSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQwNDApIC8vIChTU0MpIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX0NNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQwMDQpIC8vIChTU0MpIENsb2NrIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19UQ01SICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MDE4KSAvLyAoU1NDKSBUcmFuc21pdCBDbG9jayBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfQ1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDAwMCkgLy8gKFNTQykgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX0lNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQwNEMpIC8vIChTU0MpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUkZNUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDAxNCkgLy8gKFNTQykgUmVjZWl2ZSBGcmFtZSBNb2RlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBUV0kgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVFdJX0lFUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjgwMjQpIC8vIChUV0kpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9DUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkI4MDAwKSAvLyAoVFdJKSBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UV0lfU1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZCODAyMCkgLy8gKFRXSSkgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UV0lfSU1SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZCODAyQykgLy8gKFRXSSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9USFIgICAoKEFUOTFfUkVHICopIAkweEZGRkI4MDM0KSAvLyAoVFdJKSBUcmFuc21pdCBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UV0lfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZCODAyOCkgLy8gKFRXSSkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9JQURSICAoKEFUOTFfUkVHICopIAkweEZGRkI4MDBDKSAvLyAoVFdJKSBJbnRlcm5hbCBBZGRyZXNzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UV0lfTU1SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZCODAwNCkgLy8gKFRXSSkgTWFzdGVyIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9DV0dSICAoKEFUOTFfUkVHICopIAkweEZGRkI4MDEwKSAvLyAoVFdJKSBDbG9jayBXYXZlZm9ybSBHZW5lcmF0b3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9SSFIgICAoKEFUOTFfUkVHICopIAkweEZGRkI4MDMwKSAvLyAoVFdJKSBSZWNlaXZlIEhvbGRpbmcgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBXTUNfQ0gzIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gzX0NVUERSICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyNzApIC8vIChQV01DX0NIMykgQ2hhbm5lbCBVcGRhdGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gzX1Jlc2VydmVkICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyNzQpIC8vIChQV01DX0NIMykgUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gzX0NQUkRSICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyNjgpIC8vIChQV01DX0NIMykgQ2hhbm5lbCBQZXJpb2QgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gzX0NEVFlSICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyNjQpIC8vIChQV01DX0NIMykgQ2hhbm5lbCBEdXR5IEN5Y2xlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIM19DQ05UUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjZDKSAvLyAoUFdNQ19DSDMpIENoYW5uZWwgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDNfQ01SICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyNjApIC8vIChQV01DX0NIMykgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQV01DX0NIMiBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMl9SZXNlcnZlZCAoKEFUOTFfUkVHICopIAkweEZGRkNDMjU0KSAvLyAoUFdNQ19DSDIpIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMl9DTVIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzI0MCkgLy8gKFBXTUNfQ0gyKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gyX0NDTlRSICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyNEMpIC8vIChQV01DX0NIMikgQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMl9DUFJEUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjQ4KSAvLyAoUFdNQ19DSDIpIENoYW5uZWwgUGVyaW9kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMl9DVVBEUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjUwKSAvLyAoUFdNQ19DSDIpIENoYW5uZWwgVXBkYXRlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMl9DRFRZUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjQ0KSAvLyAoUFdNQ19DSDIpIENoYW5uZWwgRHV0eSBDeWNsZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUFdNQ19DSDEgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDFfUmVzZXJ2ZWQgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzIzNCkgLy8gKFBXTUNfQ0gxKSBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDFfQ1VQRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzIzMCkgLy8gKFBXTUNfQ0gxKSBDaGFubmVsIFVwZGF0ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDFfQ1BSRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzIyOCkgLy8gKFBXTUNfQ0gxKSBDaGFubmVsIFBlcmlvZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDFfQ0NOVFIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzIyQykgLy8gKFBXTUNfQ0gxKSBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gxX0NEVFlSICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyMjQpIC8vIChQV01DX0NIMSkgQ2hhbm5lbCBEdXR5IEN5Y2xlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMV9DTVIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzIyMCkgLy8gKFBXTUNfQ0gxKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBXTUNfQ0gwIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gwX1Jlc2VydmVkICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyMTQpIC8vIChQV01DX0NIMCkgUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gwX0NQUkRSICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyMDgpIC8vIChQV01DX0NIMCkgQ2hhbm5lbCBQZXJpb2QgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gwX0NEVFlSICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyMDQpIC8vIChQV01DX0NIMCkgQ2hhbm5lbCBEdXR5IEN5Y2xlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMF9DTVIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzIwMCkgLy8gKFBXTUNfQ0gwKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gwX0NVUERSICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyMTApIC8vIChQV01DX0NIMCkgQ2hhbm5lbCBVcGRhdGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gwX0NDTlRSICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyMEMpIC8vIChQV01DX0NIMCkgQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQV01DIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1BXTUNfSURSICAoKEFUOTFfUkVHICopIAkweEZGRkNDMDE0KSAvLyAoUFdNQykgUFdNQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19ESVMgICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MwMDgpIC8vIChQV01DKSBQV01DIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfSUVSICAoKEFUOTFfUkVHICopIAkweEZGRkNDMDEwKSAvLyAoUFdNQykgUFdNQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX1ZSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzBGQykgLy8gKFBXTUMpIFBXTUMgVmVyc2lvbiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19JU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MwMUMpIC8vIChQV01DKSBQV01DIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfU1IgICAoKEFUOTFfUkVHICopIAkweEZGRkNDMDBDKSAvLyAoUFdNQykgUFdNQyBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfSU1SICAoKEFUOTFfUkVHICopIAkweEZGRkNDMDE4KSAvLyAoUFdNQykgUFdNQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19NUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MwMDApIC8vIChQV01DKSBQV01DIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfRU5BICAoKEFUOTFfUkVHICopIAkweEZGRkNDMDA0KSAvLyAoUFdNQykgUFdNQyBFbmFibGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFVEUCBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19VRFBfSU1SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZCMDAxOCkgLy8gKFVEUCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9GQUREUiAoKEFUOTFfUkVHICopIAkweEZGRkIwMDA4KSAvLyAoVURQKSBGdW5jdGlvbiBBZGRyZXNzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfTlVNICAgKChBVDkxX1JFRyAqKSAJMHhGRkZCMDAwMCkgLy8gKFVEUCkgRnJhbWUgTnVtYmVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfRkRSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZCMDA1MCkgLy8gKFVEUCkgRW5kcG9pbnQgRklGTyBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfSVNSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZCMDAxQykgLy8gKFVEUCkgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVURQX0NTUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjAwMzApIC8vIChVRFApIEVuZHBvaW50IENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVURQX0lEUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjAwMTQpIC8vIChVRFApIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfSUNSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZCMDAyMCkgLy8gKFVEUCkgSW50ZXJydXB0IENsZWFyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfUlNURVAgKChBVDkxX1JFRyAqKSAJMHhGRkZCMDAyOCkgLy8gKFVEUCkgUmVzZXQgRW5kcG9pbnQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9UWFZDICAoKEFUOTFfUkVHICopIAkweEZGRkIwMDc0KSAvLyAoVURQKSBUcmFuc2NlaXZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfR0xCU1RBVEUgKChBVDkxX1JFRyAqKSAJMHhGRkZCMDAwNCkgLy8gKFVEUCkgR2xvYmFsIFN0YXRlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfSUVSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZCMDAxMCkgLy8gKFVEUCkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVEMwIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1RDMF9TUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDIwKSAvLyAoVEMwKSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMF9SQyAgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDFDKSAvLyAoVEMwKSBSZWdpc3RlciBDDQorI2RlZmluZSBBVDkxQ19UQzBfUkIgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDAxOCkgLy8gKFRDMCkgUmVnaXN0ZXIgQg0KKyNkZWZpbmUgQVQ5MUNfVEMwX0NDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwMDApIC8vIChUQzApIENoYW5uZWwgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMwX0NNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwMDQpIC8vIChUQzApIENoYW5uZWwgTW9kZSBSZWdpc3RlciAoQ2FwdHVyZSBNb2RlIC8gV2F2ZWZvcm0gTW9kZSkNCisjZGVmaW5lIEFUOTFDX1RDMF9JRVIgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDI0KSAvLyAoVEMwKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzBfUkEgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDAxNCkgLy8gKFRDMCkgUmVnaXN0ZXIgQQ0KKyNkZWZpbmUgQVQ5MUNfVEMwX0lEUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwMjgpIC8vIChUQzApIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzBfQ1YgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDAxMCkgLy8gKFRDMCkgQ291bnRlciBWYWx1ZQ0KKyNkZWZpbmUgQVQ5MUNfVEMwX0lNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwMkMpIC8vIChUQzApIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBUQzEgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVEMxX1JCICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwNTgpIC8vIChUQzEpIFJlZ2lzdGVyIEINCisjZGVmaW5lIEFUOTFDX1RDMV9DQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDQwKSAvLyAoVEMxKSBDaGFubmVsIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMV9JRVIgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDY0KSAvLyAoVEMxKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzFfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDA2OCkgLy8gKFRDMSkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMV9TUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDYwKSAvLyAoVEMxKSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMV9DTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDQ0KSAvLyAoVEMxKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXIgKENhcHR1cmUgTW9kZSAvIFdhdmVmb3JtIE1vZGUpDQorI2RlZmluZSBBVDkxQ19UQzFfUkEgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDA1NCkgLy8gKFRDMSkgUmVnaXN0ZXIgQQ0KKyNkZWZpbmUgQVQ5MUNfVEMxX1JDICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwNUMpIC8vIChUQzEpIFJlZ2lzdGVyIEMNCisjZGVmaW5lIEFUOTFDX1RDMV9JTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDZDKSAvLyAoVEMxKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMxX0NWICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwNTApIC8vIChUQzEpIENvdW50ZXIgVmFsdWUNCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRDMiBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19UQzJfQ01SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDA4NCkgLy8gKFRDMikgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyIChDYXB0dXJlIE1vZGUgLyBXYXZlZm9ybSBNb2RlKQ0KKyNkZWZpbmUgQVQ5MUNfVEMyX0NDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwODApIC8vIChUQzIpIENoYW5uZWwgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMyX0NWICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwOTApIC8vIChUQzIpIENvdW50ZXIgVmFsdWUNCisjZGVmaW5lIEFUOTFDX1RDMl9SQSAgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDk0KSAvLyAoVEMyKSBSZWdpc3RlciBBDQorI2RlZmluZSBBVDkxQ19UQzJfUkIgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDA5OCkgLy8gKFRDMikgUmVnaXN0ZXIgQg0KKyNkZWZpbmUgQVQ5MUNfVEMyX0lEUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwQTgpIC8vIChUQzIpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzJfSU1SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDBBQykgLy8gKFRDMikgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMl9SQyAgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDlDKSAvLyAoVEMyKSBSZWdpc3RlciBDDQorI2RlZmluZSBBVDkxQ19UQzJfSUVSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDBBNCkgLy8gKFRDMikgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMyX1NSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwQTApIC8vIChUQzIpIFN0YXR1cyBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVENCIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1RDQl9CTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMEM0KSAvLyAoVENCKSBUQyBCbG9jayBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQ0JfQkNSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDBDMCkgLy8gKFRDQikgVEMgQmxvY2sgQ29udHJvbCBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CMCBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19DQU5fTUIwX01ETCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjE0KSAvLyAoQ0FOX01CMCkgTWFpbEJveCBEYXRhIExvdyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMF9NQU0gKChBVDkxX1JFRyAqKSAJMHhGRkZEMDIwNCkgLy8gKENBTl9NQjApIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIwX01DUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMjFDKSAvLyAoQ0FOX01CMCkgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIwX01JRCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjA4KSAvLyAoQ0FOX01CMCkgTWFpbEJveCBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMF9NU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDIxMCkgLy8gKENBTl9NQjApIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIwX01GSUQgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDIwQykgLy8gKENBTl9NQjApIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIwX01ESCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjE4KSAvLyAoQ0FOX01CMCkgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjBfTU1SICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyMDApIC8vIChDQU5fTUIwKSBNYWlsQm94IE1vZGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENBTl9NQjEgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMV9NREwgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDIzNCkgLy8gKENBTl9NQjEpIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjFfTUlEICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyMjgpIC8vIChDQU5fTUIxKSBNYWlsQm94IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxX01NUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMjIwKSAvLyAoQ0FOX01CMSkgTWFpbEJveCBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxX01TUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMjMwKSAvLyAoQ0FOX01CMSkgTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjFfTUFNICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyMjQpIC8vIChDQU5fTUIxKSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMV9NREggKChBVDkxX1JFRyAqKSAJMHhGRkZEMDIzOCkgLy8gKENBTl9NQjEpIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxX01DUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMjNDKSAvLyAoQ0FOX01CMSkgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxX01GSUQgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDIyQykgLy8gKENBTl9NQjEpIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU5fTUIyIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0NBTl9NQjJfTUNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyNUMpIC8vIChDQU5fTUIyKSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjJfTURIICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyNTgpIC8vIChDQU5fTUIyKSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NSUQgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI0OCkgLy8gKENBTl9NQjIpIE1haWxCb3ggSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjJfTURMICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyNTQpIC8vIChDQU5fTUIyKSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIyX01NUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMjQwKSAvLyAoQ0FOX01CMikgTWFpbEJveCBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIyX01BTSAoKEFUOTFfUkVHICopIAkweEZGRkQwMjQ0KSAvLyAoQ0FOX01CMikgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjJfTUZJRCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjRDKSAvLyAoQ0FOX01CMikgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjJfTVNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyNTApIC8vIChDQU5fTUIyKSBNYWlsQm94IFN0YXR1cyBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CMyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19DQU5fTUIzX01GSUQgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI2QykgLy8gKENBTl9NQjMpIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIzX01BTSAoKEFUOTFfUkVHICopIAkweEZGRkQwMjY0KSAvLyAoQ0FOX01CMykgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjNfTUlEICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyNjgpIC8vIChDQU5fTUIzKSBNYWlsQm94IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIzX01DUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMjdDKSAvLyAoQ0FOX01CMykgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIzX01NUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMjYwKSAvLyAoQ0FOX01CMykgTWFpbEJveCBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIzX01TUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMjcwKSAvLyAoQ0FOX01CMykgTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjNfTURMICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyNzQpIC8vIChDQU5fTUIzKSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIzX01ESCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjc4KSAvLyAoQ0FOX01CMykgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENBTl9NQjQgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNF9NSUQgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI4OCkgLy8gKENBTl9NQjQpIE1haWxCb3ggSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjRfTU1SICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyODApIC8vIChDQU5fTUI0KSBNYWlsQm94IE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjRfTURIICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyOTgpIC8vIChDQU5fTUI0KSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNF9NRklEICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyOEMpIC8vIChDQU5fTUI0KSBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNF9NU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI5MCkgLy8gKENBTl9NQjQpIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI0X01DUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMjlDKSAvLyAoQ0FOX01CNCkgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI0X01ETCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjk0KSAvLyAoQ0FOX01CNCkgTWFpbEJveCBEYXRhIExvdyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNF9NQU0gKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI4NCkgLy8gKENBTl9NQjQpIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU5fTUI1IHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0NBTl9NQjVfTVNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyQjApIC8vIChDQU5fTUI1KSBNYWlsQm94IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNV9NQ1IgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJCQykgLy8gKENBTl9NQjUpIE1haWxCb3ggQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNV9NRklEICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyQUMpIC8vIChDQU5fTUI1KSBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNV9NREggKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJCOCkgLy8gKENBTl9NQjUpIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI1X01JRCAoKEFUOTFfUkVHICopIAkweEZGRkQwMkE4KSAvLyAoQ0FOX01CNSkgTWFpbEJveCBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNV9NTVIgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJBMCkgLy8gKENBTl9NQjUpIE1haWxCb3ggTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNV9NREwgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJCNCkgLy8gKENBTl9NQjUpIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjVfTUFNICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyQTQpIC8vIChDQU5fTUI1KSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CNiBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19DQU5fTUI2X01GSUQgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJDQykgLy8gKENBTl9NQjYpIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI2X01JRCAoKEFUOTFfUkVHICopIAkweEZGRkQwMkM4KSAvLyAoQ0FOX01CNikgTWFpbEJveCBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNl9NQU0gKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJDNCkgLy8gKENBTl9NQjYpIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI2X01TUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMkQwKSAvLyAoQ0FOX01CNikgTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjZfTURMICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyRDQpIC8vIChDQU5fTUI2KSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI2X01DUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMkRDKSAvLyAoQ0FOX01CNikgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI2X01ESCAoKEFUOTFfUkVHICopIAkweEZGRkQwMkQ4KSAvLyAoQ0FOX01CNikgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjZfTU1SICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyQzApIC8vIChDQU5fTUI2KSBNYWlsQm94IE1vZGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENBTl9NQjcgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CN19NQ1IgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJGQykgLy8gKENBTl9NQjcpIE1haWxCb3ggQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CN19NREggKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJGOCkgLy8gKENBTl9NQjcpIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI3X01GSUQgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJFQykgLy8gKENBTl9NQjcpIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI3X01ETCAoKEFUOTFfUkVHICopIAkweEZGRkQwMkY0KSAvLyAoQ0FOX01CNykgTWFpbEJveCBEYXRhIExvdyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CN19NSUQgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJFOCkgLy8gKENBTl9NQjcpIE1haWxCb3ggSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjdfTU1SICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyRTApIC8vIChDQU5fTUI3KSBNYWlsQm94IE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjdfTUFNICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyRTQpIC8vIChDQU5fTUI3KSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CN19NU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJGMCkgLy8gKENBTl9NQjcpIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU4gcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1RDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAwMjQpIC8vIChDQU4pIFRyYW5zZmVyIENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9JTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkQwMDBDKSAvLyAoQ0FOKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0lFUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAwMDQpIC8vIChDQU4pIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9FQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkQwMDIwKSAvLyAoQ0FOKSBFcnJvciBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fVElNRVNUUCAoKEFUOTFfUkVHICopIAkweEZGRkQwMDFDKSAvLyAoQ0FOKSBUaW1lIFN0YW1wIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTVIgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDAwMCkgLy8gKENBTikgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0lEUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAwMDgpIC8vIChDQU4pIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fQUNSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDAyOCkgLy8gKENBTikgQWJvcnQgQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1RJTSAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAwMTgpIC8vIChDQU4pIFRpbWVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fU1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDAxMCkgLy8gKENBTikgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fQlIgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDAxNCkgLy8gKENBTikgQmF1ZHJhdGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9WUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkQwMEZDKSAvLyAoQ0FOKSBWZXJzaW9uIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBFTUFDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0VNQUNfSVNSICAoKEFUOTFfUkVHICopIAkweEZGRkRDMDI0KSAvLyAoRU1BQykgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TQTRIICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwQjQpIC8vIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDQgVG9wLCBMYXN0IDIgYnl0ZXMNCisjZGVmaW5lIEFUOTFDX0VNQUNfU0ExTCAoKEFUOTFfUkVHICopIAkweEZGRkRDMDk4KSAvLyAoRU1BQykgU3BlY2lmaWMgQWRkcmVzcyAxIEJvdHRvbSwgRmlyc3QgNCBieXRlcw0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19FTEUgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwNzgpIC8vIChFTUFDKSBFeGNlc3NpdmUgTGVuZ3RoIEVycm9ycyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19MQ09MICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwNUMpIC8vIChFTUFDKSBMYXRlIENvbGxpc2lvbiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19STEUgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwODgpIC8vIChFTUFDKSBSZWNlaXZlIExlbmd0aCBGaWVsZCBNaXNtYXRjaCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19XT0wgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwQzQpIC8vIChFTUFDKSBXYWtlIE9uIExBTiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19EVEYgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwNTgpIC8vIChFTUFDKSBEZWZlcnJlZCBUcmFuc21pc3Npb24gRnJhbWUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfVFVORCAoKEFUOTFfUkVHICopIAkweEZGRkRDMDY0KSAvLyAoRU1BQykgVHJhbnNtaXQgVW5kZXJydW4gRXJyb3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfTkNSICAoKEFUOTFfUkVHICopIAkweEZGRkRDMDAwKSAvLyAoRU1BQykgTmV0d29yayBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1NBNEwgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzBCMCkgLy8gKEVNQUMpIFNwZWNpZmljIEFkZHJlc3MgNCBCb3R0b20sIEZpcnN0IDQgYnl0ZXMNCisjZGVmaW5lIEFUOTFDX0VNQUNfUlNSICAoKEFUOTFfUkVHICopIAkweEZGRkRDMDIwKSAvLyAoRU1BQykgUmVjZWl2ZSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfU0EzTCAoKEFUOTFfUkVHICopIAkweEZGRkRDMEE4KSAvLyAoRU1BQykgU3BlY2lmaWMgQWRkcmVzcyAzIEJvdHRvbSwgRmlyc3QgNCBieXRlcw0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19UU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwMTQpIC8vIChFTUFDKSBUcmFuc21pdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfSURSICAoKEFUOTFfUkVHICopIAkweEZGRkRDMDJDKSAvLyAoRU1BQykgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfUlNFICAoKEFUOTFfUkVHICopIAkweEZGRkRDMDc0KSAvLyAoRU1BQykgUmVjZWl2ZSBTeW1ib2wgRXJyb3JzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX0VDT0wgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA2MCkgLy8gKEVNQUMpIEV4Y2Vzc2l2ZSBDb2xsaXNpb24gUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfVElEICAoKEFUOTFfUkVHICopIAkweEZGRkRDMEI4KSAvLyAoRU1BQykgVHlwZSBJRCBDaGVja2luZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19IUkIgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwOTApIC8vIChFTUFDKSBIYXNoIEFkZHJlc3MgQm90dG9tWzMxOjBdDQorI2RlZmluZSBBVDkxQ19FTUFDX1RCUVAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzAxQykgLy8gKEVNQUMpIFRyYW5zbWl0IEJ1ZmZlciBRdWV1ZSBQb2ludGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1VTUklPICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwQzApIC8vIChFTUFDKSBVU0VSIElucHV0L091dHB1dCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19QVFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwMzgpIC8vIChFTUFDKSBQYXVzZSBUaW1lIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1NBMkggKChBVDkxX1JFRyAqKSAJMHhGRkZEQzBBNCkgLy8gKEVNQUMpIFNwZWNpZmljIEFkZHJlc3MgMiBUb3AsIExhc3QgMiBieXRlcw0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19ST1YgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwNzApIC8vIChFTUFDKSBSZWNlaXZlIE92ZXJydW4gRXJyb3JzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX0FMRSAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA1NCkgLy8gKEVNQUMpIEFsaWdubWVudCBFcnJvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SSkEgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwN0MpIC8vIChFTUFDKSBSZWNlaXZlIEphYmJlcnMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfUkJRUCAoKEFUOTFfUkVHICopIAkweEZGRkRDMDE4KSAvLyAoRU1BQykgUmVjZWl2ZSBCdWZmZXIgUXVldWUgUG9pbnRlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19UUEYgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwOEMpIC8vIChFTUFDKSBUcmFuc21pdHRlZCBQYXVzZSBGcmFtZXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfTkNGR1IgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzAwNCkgLy8gKEVNQUMpIE5ldHdvcmsgQ29uZmlndXJhdGlvbiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19IUlQgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwOTQpIC8vIChFTUFDKSBIYXNoIEFkZHJlc3MgVG9wWzYzOjMyXQ0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19VU0YgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwODApIC8vIChFTUFDKSBVbmRlcnNpemUgRnJhbWVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX0ZDU0UgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA1MCkgLy8gKEVNQUMpIEZyYW1lIENoZWNrIFNlcXVlbmNlIEVycm9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1RQUSAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzBCQykgLy8gKEVNQUMpIFRyYW5zbWl0IFBhdXNlIFF1YW50dW0gUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfTUFOICAoKEFUOTFfUkVHICopIAkweEZGRkRDMDM0KSAvLyAoRU1BQykgUEhZIE1haW50ZW5hbmNlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX0ZUTyAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA0MCkgLy8gKEVNQUMpIEZyYW1lcyBUcmFuc21pdHRlZCBPSyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SRVYgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwRkMpIC8vIChFTUFDKSBSZXZpc2lvbiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19JTVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwMzApIC8vIChFTUFDKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TQ0YgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwNDQpIC8vIChFTUFDKSBTaW5nbGUgQ29sbGlzaW9uIEZyYW1lIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1BGUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzAzQykgLy8gKEVNQUMpIFBhdXNlIEZyYW1lcyByZWNlaXZlZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19NQ0YgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwNDgpIC8vIChFTUFDKSBNdWx0aXBsZSBDb2xsaXNpb24gRnJhbWUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfTlNSICAoKEFUOTFfUkVHICopIAkweEZGRkRDMDA4KSAvLyAoRU1BQykgTmV0d29yayBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfU0EyTCAoKEFUOTFfUkVHICopIAkweEZGRkRDMEEwKSAvLyAoRU1BQykgU3BlY2lmaWMgQWRkcmVzcyAyIEJvdHRvbSwgRmlyc3QgNCBieXRlcw0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19GUk8gICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwNEMpIC8vIChFTUFDKSBGcmFtZXMgUmVjZWl2ZWQgT0sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfSUVSICAoKEFUOTFfUkVHICopIAkweEZGRkRDMDI4KSAvLyAoRU1BQykgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TQTFIICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwOUMpIC8vIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDEgVG9wLCBMYXN0IDIgYnl0ZXMNCisjZGVmaW5lIEFUOTFDX0VNQUNfQ1NFICAoKEFUOTFfUkVHICopIAkweEZGRkRDMDY4KSAvLyAoRU1BQykgQ2FycmllciBTZW5zZSBFcnJvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TQTNIICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwQUMpIC8vIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDMgVG9wLCBMYXN0IDIgYnl0ZXMNCisjZGVmaW5lIEFUOTFDX0VNQUNfUlJFICAoKEFUOTFfUkVHICopIAkweEZGRkRDMDZDKSAvLyAoRU1BQykgUmVjZWl2ZSBSZXNzb3VyY2UgRXJyb3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfU1RFICAoKEFUOTFfUkVHICopIAkweEZGRkRDMDg0KSAvLyAoRU1BQykgU1FFIFRlc3QgRXJyb3IgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19BREMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQURDX1BUU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgxMjQpIC8vIChQRENfQURDKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfUFRDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODEyMCkgLy8gKFBEQ19BREMpIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfVE5QUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODExOCkgLy8gKFBEQ19BREMpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1ROQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgxMUMpIC8vIChQRENfQURDKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19STlBSICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MTEwKSAvLyAoUERDX0FEQykgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19STkNSICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MTE0KSAvLyAoUERDX0FEQykgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19SUFIgICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MTAwKSAvLyAoUERDX0FEQykgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfVENSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODEwQykgLy8gKFBEQ19BREMpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19UUFIgICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MTA4KSAvLyAoUERDX0FEQykgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1JDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgxMDQpIC8vIChQRENfQURDKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIEFEQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19BRENfQ0RSMiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODAzOCkgLy8gKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAyDQorI2RlZmluZSBBVDkxQ19BRENfQ0RSMyAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODAzQykgLy8gKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAzDQorI2RlZmluZSBBVDkxQ19BRENfQ0RSMCAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODAzMCkgLy8gKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAwDQorI2RlZmluZSBBVDkxQ19BRENfQ0RSNSAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODA0NCkgLy8gKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA1DQorI2RlZmluZSBBVDkxQ19BRENfQ0hEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODAxNCkgLy8gKEFEQykgQURDIENoYW5uZWwgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1NSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwMUMpIC8vIChBREMpIEFEQyBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19DRFI0ICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDQwKSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDQNCisjZGVmaW5lIEFUOTFDX0FEQ19DRFIxICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDM0KSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDENCisjZGVmaW5lIEFUOTFDX0FEQ19MQ0RSICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDIwKSAvLyAoQURDKSBBREMgTGFzdCBDb252ZXJ0ZWQgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX0lEUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwMjgpIC8vIChBREMpIEFEQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX0NSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwMDApIC8vIChBREMpIEFEQyBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfQ0RSNyAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODA0QykgLy8gKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA3DQorI2RlZmluZSBBVDkxQ19BRENfQ0RSNiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODA0OCkgLy8gKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA2DQorI2RlZmluZSBBVDkxQ19BRENfSUVSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODAyNCkgLy8gKEFEQykgQURDIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19DSEVSICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDEwKSAvLyAoQURDKSBBREMgQ2hhbm5lbCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19DSFNSICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDE4KSAvLyAoQURDKSBBREMgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19NUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDA0KSAvLyAoQURDKSBBREMgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX0lNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwMkMpIC8vIChBREMpIEFEQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX0FFUyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19BRVNfVFBSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBNDEwOCkgLy8gKFBEQ19BRVMpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19QVENSICAoKEFUOTFfUkVHICopIAkweEZGRkE0MTIwKSAvLyAoUERDX0FFUykgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19STlBSICAoKEFUOTFfUkVHICopIAkweEZGRkE0MTEwKSAvLyAoUERDX0FFUykgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19UTkNSICAoKEFUOTFfUkVHICopIAkweEZGRkE0MTFDKSAvLyAoUERDX0FFUykgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfVENSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBNDEwQykgLy8gKFBEQ19BRVMpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19SQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkE0MTA0KSAvLyAoUERDX0FFUykgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfUk5DUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZBNDExNCkgLy8gKFBEQ19BRVMpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfVE5QUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZBNDExOCkgLy8gKFBEQ19BRVMpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX1JQUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQxMDApIC8vIChQRENfQUVTKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19QVFNSICAoKEFUOTFfUkVHICopIAkweEZGRkE0MTI0KSAvLyAoUERDX0FFUykgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQUVTIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0FFU19JVnhSICAoKEFUOTFfUkVHICopIAkweEZGRkE0MDYwKSAvLyAoQUVTKSBJbml0aWFsaXphdGlvbiBWZWN0b3IgeCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX01SICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQwMDQpIC8vIChBRVMpIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19WUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkE0MEZDKSAvLyAoQUVTKSBBRVMgVmVyc2lvbiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX09EQVRBeFIgKChBVDkxX1JFRyAqKSAJMHhGRkZBNDA1MCkgLy8gKEFFUykgT3V0cHV0IERhdGEgeCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX0lEQVRBeFIgKChBVDkxX1JFRyAqKSAJMHhGRkZBNDA0MCkgLy8gKEFFUykgSW5wdXQgRGF0YSB4IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfQ1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBNDAwMCkgLy8gKEFFUykgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX0lEUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQwMTQpIC8vIChBRVMpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfSU1SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBNDAxOCkgLy8gKEFFUykgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19JRVIgICAoKEFUOTFfUkVHICopIAkweEZGRkE0MDEwKSAvLyAoQUVTKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfS0VZV3hSICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQwMjApIC8vIChBRVMpIEtleSBXb3JkIHggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19JU1IgICAoKEFUOTFfUkVHICopIAkweEZGRkE0MDFDKSAvLyAoQUVTKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfVERFUyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19UREVTX1JOQ1IgKChBVDkxX1JFRyAqKSAJMHhGRkZBODExNCkgLy8gKFBEQ19UREVTKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19UQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTgxMEMpIC8vIChQRENfVERFUykgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19SQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTgxMDQpIC8vIChQRENfVERFUykgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX1ROUFIgKChBVDkxX1JFRyAqKSAJMHhGRkZBODExOCkgLy8gKFBEQ19UREVTKSBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfUk5QUiAoKEFUOTFfUkVHICopIAkweEZGRkE4MTEwKSAvLyAoUERDX1RERVMpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX1JQUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZBODEwMCkgLy8gKFBEQ19UREVTKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfVE5DUiAoKEFUOTFfUkVHICopIAkweEZGRkE4MTFDKSAvLyAoUERDX1RERVMpIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19UUFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTgxMDgpIC8vIChQRENfVERFUykgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19QVFNSICgoQVQ5MV9SRUcgKikgCTB4RkZGQTgxMjQpIC8vIChQRENfVERFUykgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19QVENSICgoQVQ5MV9SRUcgKikgCTB4RkZGQTgxMjApIC8vIChQRENfVERFUykgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRERVMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVERFU19LRVkyV3hSICgoQVQ5MV9SRUcgKikgCTB4RkZGQTgwMjgpIC8vIChUREVTKSBLZXkgMiBXb3JkIHggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfS0VZM1d4UiAoKEFUOTFfUkVHICopIAkweEZGRkE4MDMwKSAvLyAoVERFUykgS2V5IDMgV29yZCB4IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX0lEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZBODAxNCkgLy8gKFRERVMpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX1ZSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBODBGQykgLy8gKFRERVMpIFRERVMgVmVyc2lvbiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19JVnhSICgoQVQ5MV9SRUcgKikgCTB4RkZGQTgwNjApIC8vIChUREVTKSBJbml0aWFsaXphdGlvbiBWZWN0b3IgeCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19PREFUQXhSICgoQVQ5MV9SRUcgKikgCTB4RkZGQTgwNTApIC8vIChUREVTKSBPdXRwdXQgRGF0YSB4IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX0lNUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZBODAxOCkgLy8gKFRERVMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX01SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBODAwNCkgLy8gKFRERVMpIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkE4MDAwKSAvLyAoVERFUykgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19JRVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTgwMTApIC8vIChUREVTKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX0lTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZBODAxQykgLy8gKFRERVMpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfSURBVEF4UiAoKEFUOTFfUkVHICopIAkweEZGRkE4MDQwKSAvLyAoVERFUykgSW5wdXQgRGF0YSB4IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX0tFWTFXeFIgKChBVDkxX1JFRyAqKSAJMHhGRkZBODAyMCkgLy8gKFRERVMpIEtleSAxIFdvcmQgeCBSZWdpc3Rlcg0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgICBQSU8gREVGSU5JVElPTlMgRk9SIEFUOTFTQU03WDI1NiAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEEwICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDAgKSAgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEwX1JYRDAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMCApICAvKiAgVVNBUlQgMCBSZWNlaXZlIERhdGEgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTEgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMSApICAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEExICovDQotI2RlZmluZSBBVDkxQ19QQTFfVFhEMCAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEExICkgIC8qICBVU0FSVCAwIFRyYW5zbWl0IERhdGEgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTEwICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMTAgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEExMCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEExMF9UV0QgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMTAgKSAvKiAgVFdJIFR3by13aXJlIFNlcmlhbCBEYXRhICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEExMSAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDExICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMTEgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMTFfVFdDSyAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTExICkgLyogIFRXSSBUd28td2lyZSBTZXJpYWwgQ2xvY2sgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTEyICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMTIgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEExMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEExMl9OUENTMDAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMTIgKSAvKiAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAwICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEExMyAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDEzICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMTMgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMTNfTlBDUzAxICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTEzICkgLyogIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEExM19QQ0sxICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMTMgKSAvKiAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMTQgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAxNCApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTE0ICovDQotI2RlZmluZSBBVDkxQ19QQTE0X05QQ1MwMiAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEExNCApIC8qICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDIgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMTRfSVJRMSAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTE0ICkgLyogIEV4dGVybmFsIEludGVycnVwdCAxICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEExNSAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDE1ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMTUgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMTVfTlBDUzAzICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTE1ICkgLyogIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEExNV9UQ0xLMiAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMTUgKSAvKiAgVGltZXIgQ291bnRlciAyIGV4dGVybmFsIGNsb2NrIGlucHV0ICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEExNiAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDE2ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMTYgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMTZfTUlTTzAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTE2ICkgLyogIFNQSSAwIE1hc3RlciBJbiBTbGF2ZSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMTcgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAxNyApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTE3ICovDQotI2RlZmluZSBBVDkxQ19QQTE3X01PU0kwICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEExNyApIC8qICBTUEkgMCBNYXN0ZXIgT3V0IFNsYXZlICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEExOCAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDE4ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMTggKi8NCi0jZGVmaW5lIEFUOTFDX1BBMThfU1BDSzAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTE4ICkgLyogIFNQSSAwIFNlcmlhbCBDbG9jayAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMTkgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAxOSApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTE5ICovDQotI2RlZmluZSBBVDkxQ19QQTE5X0NBTlJYICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEExOSApIC8qICBDQU4gUmVjZWl2ZSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMiAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAyICkgICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTIgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMl9TQ0swICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTIgKSAgLyogIFVTQVJUIDAgU2VyaWFsIENsb2NrICovDQotI2RlZmluZSBBVDkxQ19QQTJfTlBDUzExICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEEyICkgIC8qICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDEgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTIwICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMjAgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEEyMCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyMF9DQU5UWCAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMjAgKSAvKiAgQ0FOIFRyYW5zbWl0ICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEEyMSAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDIxICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMjEgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjFfVEYgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTIxICkgLyogIFNTQyBUcmFuc21pdCBGcmFtZSBTeW5jICovDQotI2RlZmluZSBBVDkxQ19QQTIxX05QQ1MxMCAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEEyMSApIC8qICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDAgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTIyICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMjIgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEEyMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyMl9USyAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMjIgKSAvKiAgU1NDIFRyYW5zbWl0IENsb2NrICovDQotI2RlZmluZSBBVDkxQ19QQTIyX1NQQ0sxICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEEyMiApIC8qICBTUEkgMSBTZXJpYWwgQ2xvY2sgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTIzICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMjMgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEEyMyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyM19URCAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMjMgKSAvKiAgU1NDIFRyYW5zbWl0IGRhdGEgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjNfTU9TSTEgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTIzICkgLyogIFNQSSAxIE1hc3RlciBPdXQgU2xhdmUgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTI0ICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMjQgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEEyNCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyNF9SRCAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMjQgKSAvKiAgU1NDIFJlY2VpdmUgRGF0YSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyNF9NSVNPMSAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMjQgKSAvKiAgU1BJIDEgTWFzdGVyIEluIFNsYXZlICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEEyNSAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDI1ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMjUgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjVfUksgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTI1ICkgLyogIFNTQyBSZWNlaXZlIENsb2NrICovDQotI2RlZmluZSBBVDkxQ19QQTI1X05QQ1MxMSAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEEyNSApIC8qICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDEgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTI2ICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMjYgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEEyNiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyNl9SRiAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMjYgKSAvKiAgU1NDIFJlY2VpdmUgRnJhbWUgU3luYyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyNl9OUENTMTIgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMjYgKSAvKiAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAyICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEEyNyAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDI3ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMjcgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjdfRFJYRCAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTI3ICkgLyogIERCR1UgRGVidWcgUmVjZWl2ZSBEYXRhICovDQotI2RlZmluZSBBVDkxQ19QQTI3X1BDSzMgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEEyNyApIC8qICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAzICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEEyOCAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDI4ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMjggKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjhfRFRYRCAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTI4ICkgLyogIERCR1UgRGVidWcgVHJhbnNtaXQgRGF0YSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMjkgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAyOSApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTI5ICovDQotI2RlZmluZSBBVDkxQ19QQTI5X0ZJUSAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEEyOSApIC8qICBBSUMgRmFzdCBJbnRlcnJ1cHQgSW5wdXQgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjlfTlBDUzEzICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTI5ICkgLyogIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMyAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMyAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAzICkgICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTMgKi8NCi0jZGVmaW5lIEFUOTFDX1BBM19SVFMwICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTMgKSAgLyogIFVTQVJUIDAgUmVhZHkgVG8gU2VuZCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEzX05QQ1MxMiAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMyApICAvKiAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAyICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEEzMCAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDMwICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMzAgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMzBfSVJRMCAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTMwICkgLyogIEV4dGVybmFsIEludGVycnVwdCAwICovDQotI2RlZmluZSBBVDkxQ19QQTMwX1BDSzIgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEEzMCApIC8qICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAyICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEE0ICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDQgKSAgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBNCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEE0X0NUUzAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBNCApICAvKiAgVVNBUlQgMCBDbGVhciBUbyBTZW5kICovDQotI2RlZmluZSBBVDkxQ19QQTRfTlBDUzEzICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEE0ICkgIC8qICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTUgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgNSApICAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEE1ICovDQotI2RlZmluZSBBVDkxQ19QQTVfUlhEMSAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEE1ICkgIC8qICBVU0FSVCAxIFJlY2VpdmUgRGF0YSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBNiAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCA2ICkgICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTYgKi8NCi0jZGVmaW5lIEFUOTFDX1BBNl9UWEQxICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTYgKSAgLyogIFVTQVJUIDEgVHJhbnNtaXQgRGF0YSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBNyAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCA3ICkgICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTcgKi8NCi0jZGVmaW5lIEFUOTFDX1BBN19TQ0sxICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTcgKSAgLyogIFVTQVJUIDEgU2VyaWFsIENsb2NrICovDQotI2RlZmluZSBBVDkxQ19QQTdfTlBDUzAxICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEE3ICkgIC8qICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDEgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTggICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgOCApICAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEE4ICovDQotI2RlZmluZSBBVDkxQ19QQThfUlRTMSAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEE4ICkgIC8qICBVU0FSVCAxIFJlYWR5IFRvIFNlbmQgKi8NCi0jZGVmaW5lIEFUOTFDX1BBOF9OUENTMDIgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTggKSAgLyogIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBOSAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCA5ICkgICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTkgKi8NCi0jZGVmaW5lIEFUOTFDX1BBOV9DVFMxICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTkgKSAgLyogIFVTQVJUIDEgQ2xlYXIgVG8gU2VuZCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEE5X05QQ1MwMyAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBOSApICAvKiAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEIwICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDAgKSAgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIwX0VUWENLX0VSRUZDSyAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMCApICAvKiAgRXRoZXJuZXQgTUFDIFRyYW5zbWl0IENsb2NrL1JlZmVyZW5jZSBDbG9jayAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIwX1BDSzAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMCApICAvKiAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMCAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BCMSAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAxICkgICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQjEgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMV9FVFhFTiAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjEgKSAgLyogIEV0aGVybmV0IE1BQyBUcmFuc21pdCBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjEwICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMTAgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIxMCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxMF9FVFgyICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMTAgKSAvKiAgRXRoZXJuZXQgTUFDIFRyYW5zbWl0IERhdGEgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxMF9OUENTMTEgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMTAgKSAvKiAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAxICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEIxMSAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDExICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMTEgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMTFfRVRYMyAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjExICkgLyogIEV0aGVybmV0IE1BQyBUcmFuc21pdCBEYXRhIDMgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMTFfTlBDUzEyICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjExICkgLyogIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BCMTIgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAxMiApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQjEyICovDQotI2RlZmluZSBBVDkxQ19QQjEyX0VUWEVSICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIxMiApIC8qICBFdGhlcm5ldCBNQUMgVHJhbnNtaWt0IENvZGluZyBFcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxMl9UQ0xLMCAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMTIgKSAvKiAgVGltZXIgQ291bnRlciAwIGV4dGVybmFsIGNsb2NrIGlucHV0ICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEIxMyAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDEzICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMTMgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMTNfRVJYMiAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjEzICkgLyogIEV0aGVybmV0IE1BQyBSZWNlaXZlIERhdGEgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxM19OUENTMDEgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMTMgKSAvKiAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAxICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEIxNCAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDE0ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMTQgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMTRfRVJYMyAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjE0ICkgLyogIEV0aGVybmV0IE1BQyBSZWNlaXZlIERhdGEgMyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxNF9OUENTMDIgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMTQgKSAvKiAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAyICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEIxNSAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDE1ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMTUgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMTVfRVJYRFYgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjE1ICkgLyogIEV0aGVybmV0IE1BQyBSZWNlaXZlIERhdGEgVmFsaWQgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjE2ICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMTYgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIxNiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxNl9FQ09MICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMTYgKSAvKiAgRXRoZXJuZXQgTUFDIENvbGxpc2lvbiBEZXRlY3RlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxNl9OUENTMTMgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMTYgKSAvKiAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEIxNyAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDE3ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMTcgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMTdfRVJYQ0sgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjE3ICkgLyogIEV0aGVybmV0IE1BQyBSZWNlaXZlIENsb2NrICovDQotI2RlZmluZSBBVDkxQ19QQjE3X05QQ1MwMyAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIxNyApIC8qICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjE4ICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMTggKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIxOCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxOF9FRjEwMCAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMTggKSAvKiAgRXRoZXJuZXQgTUFDIEZvcmNlIDEwMCBNYml0cy9zZWMgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMThfQURUUkcgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjE4ICkgLyogIEFEQyBFeHRlcm5hbCBUcmlnZ2VyICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEIxOSAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDE5ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMTkgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMTlfUFdNMCAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjE5ICkgLyogIFBXTSBDaGFubmVsIDAgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMTlfVENMSzEgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjE5ICkgLyogIFRpbWVyIENvdW50ZXIgMSBleHRlcm5hbCBjbG9jayBpbnB1dCAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BCMiAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAyICkgICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQjIgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMl9FVFgwICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjIgKSAgLyogIEV0aGVybmV0IE1BQyBUcmFuc21pdCBEYXRhIDAgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjIwICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMjAgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIyMCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIyMF9QV00xICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMjAgKSAvKiAgUFdNIENoYW5uZWwgMSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIyMF9QQ0swICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMjAgKSAvKiAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMCAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BCMjEgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAyMSApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQjIxICovDQotI2RlZmluZSBBVDkxQ19QQjIxX1BXTTIgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIyMSApIC8qICBQV00gQ2hhbm5lbCAyICovDQotI2RlZmluZSBBVDkxQ19QQjIxX1BDSzEgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIyMSApIC8qICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAxICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEIyMiAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDIyICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMjIgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMjJfUFdNMyAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjIyICkgLyogIFBXTSBDaGFubmVsIDMgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMjJfUENLMiAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjIyICkgLyogIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjIzICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMjMgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIyMyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIyM19USU9BMCAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMjMgKSAvKiAgVGltZXIgQ291bnRlciAwIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEEgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMjNfRENEMSAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjIzICkgLyogIFVTQVJUIDEgRGF0YSBDYXJyaWVyIERldGVjdCAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BCMjQgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAyNCApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQjI0ICovDQotI2RlZmluZSBBVDkxQ19QQjI0X1RJT0IwICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIyNCApIC8qICBUaW1lciBDb3VudGVyIDAgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIyNF9EU1IxICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMjQgKSAvKiAgVVNBUlQgMSBEYXRhIFNldCByZWFkeSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BCMjUgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAyNSApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQjI1ICovDQotI2RlZmluZSBBVDkxQ19QQjI1X1RJT0ExICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIyNSApIC8qICBUaW1lciBDb3VudGVyIDEgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIyNV9EVFIxICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMjUgKSAvKiAgVVNBUlQgMSBEYXRhIFRlcm1pbmFsIHJlYWR5ICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEIyNiAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDI2ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMjYgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMjZfVElPQjEgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjI2ICkgLyogIFRpbWVyIENvdW50ZXIgMSBNdWx0aXB1cnBvc2UgVGltZXIgSS9PIFBpbiBCICovDQotI2RlZmluZSBBVDkxQ19QQjI2X1JJMSAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIyNiApIC8qICBVU0FSVCAxIFJpbmcgSW5kaWNhdG9yICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEIyNyAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDI3ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMjcgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMjdfVElPQTIgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjI3ICkgLyogIFRpbWVyIENvdW50ZXIgMiBNdWx0aXB1cnBvc2UgVGltZXIgSS9PIFBpbiBBICovDQotI2RlZmluZSBBVDkxQ19QQjI3X1BXTTAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIyNyApIC8qICBQV00gQ2hhbm5lbCAwICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEIyOCAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDI4ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMjggKi8NCi0jZGVmaW5lIEFUOTFDX1BCMjhfVElPQjIgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjI4ICkgLyogIFRpbWVyIENvdW50ZXIgMiBNdWx0aXB1cnBvc2UgVGltZXIgSS9PIFBpbiBCICovDQotI2RlZmluZSBBVDkxQ19QQjI4X1BXTTEgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIyOCApIC8qICBQV00gQ2hhbm5lbCAxICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEIyOSAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDI5ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMjkgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMjlfUENLMSAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjI5ICkgLyogIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDEgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMjlfUFdNMiAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjI5ICkgLyogIFBXTSBDaGFubmVsIDIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjMgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMyApICAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIzICovDQotI2RlZmluZSBBVDkxQ19QQjNfRVRYMSAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIzICkgIC8qICBFdGhlcm5ldCBNQUMgVHJhbnNtaXQgRGF0YSAxICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEIzMCAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDMwICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMzAgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMzBfUENLMiAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjMwICkgLyogIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDIgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMzBfUFdNMyAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjMwICkgLyogIFBXTSBDaGFubmVsIDMgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjQgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgNCApICAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEI0ICovDQotI2RlZmluZSBBVDkxQ19QQjRfRUNSU19FQ1JTRFYgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEI0ICkgIC8qICBFdGhlcm5ldCBNQUMgQ2FycmllciBTZW5zZS9DYXJyaWVyIFNlbnNlIGFuZCBEYXRhIFZhbGlkICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEI1ICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDUgKSAgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCNSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEI1X0VSWDAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCNSApICAvKiAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgRGF0YSAwICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEI2ICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDYgKSAgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCNiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEI2X0VSWDEgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCNiApICAvKiAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgRGF0YSAxICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEI3ICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDcgKSAgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCNyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEI3X0VSWEVSICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCNyApICAvKiAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgRXJyb3IgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjggICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgOCApICAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEI4ICovDQotI2RlZmluZSBBVDkxQ19QQjhfRU1EQyAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEI4ICkgIC8qICBFdGhlcm5ldCBNQUMgTWFuYWdlbWVudCBEYXRhIENsb2NrICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEI5ICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDkgKSAgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCOSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEI5X0VNRElPICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCOSApICAvKiAgRXRoZXJuZXQgTUFDIE1hbmFnZW1lbnQgRGF0YSBJbnB1dC9PdXRwdXQgKi8NCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICAgUElPIERFRklOSVRJT05TIEZPUiBBVDkxU0FNN1gyNTYNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDApIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMA0KKyNkZWZpbmUgQVQ5MUNfUEEwX1JYRDAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEwKSAvLyAgVVNBUlQgMCBSZWNlaXZlIERhdGENCisjZGVmaW5lIEFUOTFDX1BJT19QQTEgICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICAxKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTENCisjZGVmaW5lIEFUOTFDX1BBMV9UWEQwICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMSkgLy8gIFVTQVJUIDAgVHJhbnNtaXQgRGF0YQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMTAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTApIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMTANCisjZGVmaW5lIEFUOTFDX1BBMTBfVFdEICAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTEwKSAvLyAgVFdJIFR3by13aXJlIFNlcmlhbCBEYXRhDQorI2RlZmluZSBBVDkxQ19QSU9fUEExMSAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxMSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExMQ0KKyNkZWZpbmUgQVQ5MUNfUEExMV9UV0NLICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMTEpIC8vICBUV0kgVHdvLXdpcmUgU2VyaWFsIENsb2NrDQorI2RlZmluZSBBVDkxQ19QSU9fUEExMiAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxMikgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExMg0KKyNkZWZpbmUgQVQ5MUNfUEExMl9OUENTMDAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMTIpIC8vICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDANCisjZGVmaW5lIEFUOTFDX1BJT19QQTEzICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDEzKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTEzDQorI2RlZmluZSBBVDkxQ19QQTEzX05QQ1MwMSAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExMykgLy8gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMQ0KKyNkZWZpbmUgQVQ5MUNfUEExM19QQ0sxICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMTMpIC8vICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAxDQorI2RlZmluZSBBVDkxQ19QSU9fUEExNCAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxNCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExNA0KKyNkZWZpbmUgQVQ5MUNfUEExNF9OUENTMDIgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMTQpIC8vICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDINCisjZGVmaW5lIEFUOTFDX1BBMTRfSVJRMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTE0KSAvLyAgRXh0ZXJuYWwgSW50ZXJydXB0IDENCisjZGVmaW5lIEFUOTFDX1BJT19QQTE1ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDE1KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTE1DQorI2RlZmluZSBBVDkxQ19QQTE1X05QQ1MwMyAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExNSkgLy8gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMw0KKyNkZWZpbmUgQVQ5MUNfUEExNV9UQ0xLMiAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMTUpIC8vICBUaW1lciBDb3VudGVyIDIgZXh0ZXJuYWwgY2xvY2sgaW5wdXQNCisjZGVmaW5lIEFUOTFDX1BJT19QQTE2ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDE2KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTE2DQorI2RlZmluZSBBVDkxQ19QQTE2X01JU08wICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExNikgLy8gIFNQSSAwIE1hc3RlciBJbiBTbGF2ZQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMTcgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTcpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMTcNCisjZGVmaW5lIEFUOTFDX1BBMTdfTU9TSTAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTE3KSAvLyAgU1BJIDAgTWFzdGVyIE91dCBTbGF2ZQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMTggICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTgpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMTgNCisjZGVmaW5lIEFUOTFDX1BBMThfU1BDSzAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTE4KSAvLyAgU1BJIDAgU2VyaWFsIENsb2NrDQorI2RlZmluZSBBVDkxQ19QSU9fUEExOSAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxOSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExOQ0KKyNkZWZpbmUgQVQ5MUNfUEExOV9DQU5SWCAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMTkpIC8vICBDQU4gUmVjZWl2ZQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDIpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMg0KKyNkZWZpbmUgQVQ5MUNfUEEyX1NDSzAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyKSAvLyAgVVNBUlQgMCBTZXJpYWwgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BBMl9OUENTMTEgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMikgLy8gIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMjAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjApIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjANCisjZGVmaW5lIEFUOTFDX1BBMjBfQ0FOVFggICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTIwKSAvLyAgQ0FOIFRyYW5zbWl0DQorI2RlZmluZSBBVDkxQ19QSU9fUEEyMSAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAyMSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEyMQ0KKyNkZWZpbmUgQVQ5MUNfUEEyMV9URiAgICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjEpIC8vICBTU0MgVHJhbnNtaXQgRnJhbWUgU3luYw0KKyNkZWZpbmUgQVQ5MUNfUEEyMV9OUENTMTAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjEpIC8vICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDANCisjZGVmaW5lIEFUOTFDX1BJT19QQTIyICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDIyKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTIyDQorI2RlZmluZSBBVDkxQ19QQTIyX1RLICAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyMikgLy8gIFNTQyBUcmFuc21pdCBDbG9jaw0KKyNkZWZpbmUgQVQ5MUNfUEEyMl9TUENLMSAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjIpIC8vICBTUEkgMSBTZXJpYWwgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BJT19QQTIzICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDIzKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTIzDQorI2RlZmluZSBBVDkxQ19QQTIzX1REICAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyMykgLy8gIFNTQyBUcmFuc21pdCBkYXRhDQorI2RlZmluZSBBVDkxQ19QQTIzX01PU0kxICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyMykgLy8gIFNQSSAxIE1hc3RlciBPdXQgU2xhdmUNCisjZGVmaW5lIEFUOTFDX1BJT19QQTI0ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDI0KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTI0DQorI2RlZmluZSBBVDkxQ19QQTI0X1JEICAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyNCkgLy8gIFNTQyBSZWNlaXZlIERhdGENCisjZGVmaW5lIEFUOTFDX1BBMjRfTUlTTzEgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTI0KSAvLyAgU1BJIDEgTWFzdGVyIEluIFNsYXZlDQorI2RlZmluZSBBVDkxQ19QSU9fUEEyNSAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAyNSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEyNQ0KKyNkZWZpbmUgQVQ5MUNfUEEyNV9SSyAgICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjUpIC8vICBTU0MgUmVjZWl2ZSBDbG9jaw0KKyNkZWZpbmUgQVQ5MUNfUEEyNV9OUENTMTEgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjUpIC8vICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDENCisjZGVmaW5lIEFUOTFDX1BJT19QQTI2ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDI2KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTI2DQorI2RlZmluZSBBVDkxQ19QQTI2X1JGICAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyNikgLy8gIFNTQyBSZWNlaXZlIEZyYW1lIFN5bmMNCisjZGVmaW5lIEFUOTFDX1BBMjZfTlBDUzEyICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTI2KSAvLyAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAyDQorI2RlZmluZSBBVDkxQ19QSU9fUEEyNyAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAyNykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEyNw0KKyNkZWZpbmUgQVQ5MUNfUEEyN19EUlhEICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjcpIC8vICBEQkdVIERlYnVnIFJlY2VpdmUgRGF0YQ0KKyNkZWZpbmUgQVQ5MUNfUEEyN19QQ0szICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjcpIC8vICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAzDQorI2RlZmluZSBBVDkxQ19QSU9fUEEyOCAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAyOCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEyOA0KKyNkZWZpbmUgQVQ5MUNfUEEyOF9EVFhEICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjgpIC8vICBEQkdVIERlYnVnIFRyYW5zbWl0IERhdGENCisjZGVmaW5lIEFUOTFDX1BJT19QQTI5ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDI5KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTI5DQorI2RlZmluZSBBVDkxQ19QQTI5X0ZJUSAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyOSkgLy8gIEFJQyBGYXN0IEludGVycnVwdCBJbnB1dA0KKyNkZWZpbmUgQVQ5MUNfUEEyOV9OUENTMTMgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjkpIC8vICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMNCisjZGVmaW5lIEFUOTFDX1BJT19QQTMgICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICAzKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTMNCisjZGVmaW5lIEFUOTFDX1BBM19SVFMwICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMykgLy8gIFVTQVJUIDAgUmVhZHkgVG8gU2VuZA0KKyNkZWZpbmUgQVQ5MUNfUEEzX05QQ1MxMiAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEzKSAvLyAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAyDQorI2RlZmluZSBBVDkxQ19QSU9fUEEzMCAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAzMCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEzMA0KKyNkZWZpbmUgQVQ5MUNfUEEzMF9JUlEwICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMzApIC8vICBFeHRlcm5hbCBJbnRlcnJ1cHQgMA0KKyNkZWZpbmUgQVQ5MUNfUEEzMF9QQ0syICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMzApIC8vICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAyDQorI2RlZmluZSBBVDkxQ19QSU9fUEE0ICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgNCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEE0DQorI2RlZmluZSBBVDkxQ19QQTRfQ1RTMCAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTQpIC8vICBVU0FSVCAwIENsZWFyIFRvIFNlbmQNCisjZGVmaW5lIEFUOTFDX1BBNF9OUENTMTMgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBNCkgLy8gIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBNSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDUpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBNQ0KKyNkZWZpbmUgQVQ5MUNfUEE1X1JYRDEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEE1KSAvLyAgVVNBUlQgMSBSZWNlaXZlIERhdGENCisjZGVmaW5lIEFUOTFDX1BJT19QQTYgICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICA2KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTYNCisjZGVmaW5lIEFUOTFDX1BBNl9UWEQxICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBNikgLy8gIFVTQVJUIDEgVHJhbnNtaXQgRGF0YQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBNyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDcpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBNw0KKyNkZWZpbmUgQVQ5MUNfUEE3X1NDSzEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEE3KSAvLyAgVVNBUlQgMSBTZXJpYWwgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BBN19OUENTMDEgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBNykgLy8gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBOCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDgpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBOA0KKyNkZWZpbmUgQVQ5MUNfUEE4X1JUUzEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEE4KSAvLyAgVVNBUlQgMSBSZWFkeSBUbyBTZW5kDQorI2RlZmluZSBBVDkxQ19QQThfTlBDUzAyICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTgpIC8vICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDINCisjZGVmaW5lIEFUOTFDX1BJT19QQTkgICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICA5KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTkNCisjZGVmaW5lIEFUOTFDX1BBOV9DVFMxICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBOSkgLy8gIFVTQVJUIDEgQ2xlYXIgVG8gU2VuZA0KKyNkZWZpbmUgQVQ5MUNfUEE5X05QQ1MwMyAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEE5KSAvLyAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzDQorI2RlZmluZSBBVDkxQ19QSU9fUEIwICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgMCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIwDQorI2RlZmluZSBBVDkxQ19QQjBfRVRYQ0tfRVJFRkNLICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIwKSAvLyAgRXRoZXJuZXQgTUFDIFRyYW5zbWl0IENsb2NrL1JlZmVyZW5jZSBDbG9jaw0KKyNkZWZpbmUgQVQ5MUNfUEIwX1BDSzAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIwKSAvLyAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDEpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMQ0KKyNkZWZpbmUgQVQ5MUNfUEIxX0VUWEVOICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxKSAvLyAgRXRoZXJuZXQgTUFDIFRyYW5zbWl0IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMTAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTApIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMTANCisjZGVmaW5lIEFUOTFDX1BCMTBfRVRYMiAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjEwKSAvLyAgRXRoZXJuZXQgTUFDIFRyYW5zbWl0IERhdGEgMg0KKyNkZWZpbmUgQVQ5MUNfUEIxMF9OUENTMTEgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMTApIC8vICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDENCisjZGVmaW5lIEFUOTFDX1BJT19QQjExICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDExKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjExDQorI2RlZmluZSBBVDkxQ19QQjExX0VUWDMgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxMSkgLy8gIEV0aGVybmV0IE1BQyBUcmFuc21pdCBEYXRhIDMNCisjZGVmaW5lIEFUOTFDX1BCMTFfTlBDUzEyICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjExKSAvLyAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAyDQorI2RlZmluZSBBVDkxQ19QSU9fUEIxMiAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxMikgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIxMg0KKyNkZWZpbmUgQVQ5MUNfUEIxMl9FVFhFUiAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMTIpIC8vICBFdGhlcm5ldCBNQUMgVHJhbnNtaWt0IENvZGluZyBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfUEIxMl9UQ0xLMCAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMTIpIC8vICBUaW1lciBDb3VudGVyIDAgZXh0ZXJuYWwgY2xvY2sgaW5wdXQNCisjZGVmaW5lIEFUOTFDX1BJT19QQjEzICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDEzKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjEzDQorI2RlZmluZSBBVDkxQ19QQjEzX0VSWDIgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxMykgLy8gIEV0aGVybmV0IE1BQyBSZWNlaXZlIERhdGEgMg0KKyNkZWZpbmUgQVQ5MUNfUEIxM19OUENTMDEgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMTMpIC8vICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDENCisjZGVmaW5lIEFUOTFDX1BJT19QQjE0ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDE0KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjE0DQorI2RlZmluZSBBVDkxQ19QQjE0X0VSWDMgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxNCkgLy8gIEV0aGVybmV0IE1BQyBSZWNlaXZlIERhdGEgMw0KKyNkZWZpbmUgQVQ5MUNfUEIxNF9OUENTMDIgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMTQpIC8vICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDINCisjZGVmaW5lIEFUOTFDX1BJT19QQjE1ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDE1KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjE1DQorI2RlZmluZSBBVDkxQ19QQjE1X0VSWERWICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxNSkgLy8gIEV0aGVybmV0IE1BQyBSZWNlaXZlIERhdGEgVmFsaWQNCisjZGVmaW5lIEFUOTFDX1BJT19QQjE2ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDE2KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjE2DQorI2RlZmluZSBBVDkxQ19QQjE2X0VDT0wgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxNikgLy8gIEV0aGVybmV0IE1BQyBDb2xsaXNpb24gRGV0ZWN0ZWQNCisjZGVmaW5lIEFUOTFDX1BCMTZfTlBDUzEzICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjE2KSAvLyAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzDQorI2RlZmluZSBBVDkxQ19QSU9fUEIxNyAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxNykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIxNw0KKyNkZWZpbmUgQVQ5MUNfUEIxN19FUlhDSyAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMTcpIC8vICBFdGhlcm5ldCBNQUMgUmVjZWl2ZSBDbG9jaw0KKyNkZWZpbmUgQVQ5MUNfUEIxN19OUENTMDMgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMTcpIC8vICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMNCisjZGVmaW5lIEFUOTFDX1BJT19QQjE4ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDE4KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjE4DQorI2RlZmluZSBBVDkxQ19QQjE4X0VGMTAwICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxOCkgLy8gIEV0aGVybmV0IE1BQyBGb3JjZSAxMDAgTWJpdHMvc2VjDQorI2RlZmluZSBBVDkxQ19QQjE4X0FEVFJHICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxOCkgLy8gIEFEQyBFeHRlcm5hbCBUcmlnZ2VyDQorI2RlZmluZSBBVDkxQ19QSU9fUEIxOSAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxOSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIxOQ0KKyNkZWZpbmUgQVQ5MUNfUEIxOV9QV00wICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMTkpIC8vICBQV00gQ2hhbm5lbCAwDQorI2RlZmluZSBBVDkxQ19QQjE5X1RDTEsxICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxOSkgLy8gIFRpbWVyIENvdW50ZXIgMSBleHRlcm5hbCBjbG9jayBpbnB1dA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDIpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMg0KKyNkZWZpbmUgQVQ5MUNfUEIyX0VUWDAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyKSAvLyAgRXRoZXJuZXQgTUFDIFRyYW5zbWl0IERhdGEgMA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMjAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjApIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMjANCisjZGVmaW5lIEFUOTFDX1BCMjBfUFdNMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjIwKSAvLyAgUFdNIENoYW5uZWwgMQ0KKyNkZWZpbmUgQVQ5MUNfUEIyMF9QQ0swICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMjApIC8vICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAwDQorI2RlZmluZSBBVDkxQ19QSU9fUEIyMSAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAyMSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIyMQ0KKyNkZWZpbmUgQVQ5MUNfUEIyMV9QV00yICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMjEpIC8vICBQV00gQ2hhbm5lbCAyDQorI2RlZmluZSBBVDkxQ19QQjIxX1BDSzEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyMSkgLy8gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDENCisjZGVmaW5lIEFUOTFDX1BJT19QQjIyICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDIyKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjIyDQorI2RlZmluZSBBVDkxQ19QQjIyX1BXTTMgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyMikgLy8gIFBXTSBDaGFubmVsIDMNCisjZGVmaW5lIEFUOTFDX1BCMjJfUENLMiAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjIyKSAvLyAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMjMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjMpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMjMNCisjZGVmaW5lIEFUOTFDX1BCMjNfVElPQTAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjIzKSAvLyAgVGltZXIgQ291bnRlciAwIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEENCisjZGVmaW5lIEFUOTFDX1BCMjNfRENEMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjIzKSAvLyAgVVNBUlQgMSBEYXRhIENhcnJpZXIgRGV0ZWN0DQorI2RlZmluZSBBVDkxQ19QSU9fUEIyNCAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAyNCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIyNA0KKyNkZWZpbmUgQVQ5MUNfUEIyNF9USU9CMCAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMjQpIC8vICBUaW1lciBDb3VudGVyIDAgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQg0KKyNkZWZpbmUgQVQ5MUNfUEIyNF9EU1IxICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMjQpIC8vICBVU0FSVCAxIERhdGEgU2V0IHJlYWR5DQorI2RlZmluZSBBVDkxQ19QSU9fUEIyNSAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAyNSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIyNQ0KKyNkZWZpbmUgQVQ5MUNfUEIyNV9USU9BMSAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMjUpIC8vICBUaW1lciBDb3VudGVyIDEgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQQ0KKyNkZWZpbmUgQVQ5MUNfUEIyNV9EVFIxICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMjUpIC8vICBVU0FSVCAxIERhdGEgVGVybWluYWwgcmVhZHkNCisjZGVmaW5lIEFUOTFDX1BJT19QQjI2ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDI2KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjI2DQorI2RlZmluZSBBVDkxQ19QQjI2X1RJT0IxICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyNikgLy8gIFRpbWVyIENvdW50ZXIgMSBNdWx0aXB1cnBvc2UgVGltZXIgSS9PIFBpbiBCDQorI2RlZmluZSBBVDkxQ19QQjI2X1JJMSAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyNikgLy8gIFVTQVJUIDEgUmluZyBJbmRpY2F0b3INCisjZGVmaW5lIEFUOTFDX1BJT19QQjI3ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDI3KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjI3DQorI2RlZmluZSBBVDkxQ19QQjI3X1RJT0EyICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyNykgLy8gIFRpbWVyIENvdW50ZXIgMiBNdWx0aXB1cnBvc2UgVGltZXIgSS9PIFBpbiBBDQorI2RlZmluZSBBVDkxQ19QQjI3X1BXTTAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyNykgLy8gIFBXTSBDaGFubmVsIDANCisjZGVmaW5lIEFUOTFDX1BJT19QQjI4ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDI4KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjI4DQorI2RlZmluZSBBVDkxQ19QQjI4X1RJT0IyICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyOCkgLy8gIFRpbWVyIENvdW50ZXIgMiBNdWx0aXB1cnBvc2UgVGltZXIgSS9PIFBpbiBCDQorI2RlZmluZSBBVDkxQ19QQjI4X1BXTTEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyOCkgLy8gIFBXTSBDaGFubmVsIDENCisjZGVmaW5lIEFUOTFDX1BJT19QQjI5ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDI5KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjI5DQorI2RlZmluZSBBVDkxQ19QQjI5X1BDSzEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyOSkgLy8gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDENCisjZGVmaW5lIEFUOTFDX1BCMjlfUFdNMiAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjI5KSAvLyAgUFdNIENoYW5uZWwgMg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDMpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMw0KKyNkZWZpbmUgQVQ5MUNfUEIzX0VUWDEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIzKSAvLyAgRXRoZXJuZXQgTUFDIFRyYW5zbWl0IERhdGEgMQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMzAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMzApIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMzANCisjZGVmaW5lIEFUOTFDX1BCMzBfUENLMiAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjMwKSAvLyAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMg0KKyNkZWZpbmUgQVQ5MUNfUEIzMF9QV00zICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMzApIC8vICBQV00gQ2hhbm5lbCAzDQorI2RlZmluZSBBVDkxQ19QSU9fUEI0ICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgNCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEI0DQorI2RlZmluZSBBVDkxQ19QQjRfRUNSU19FQ1JTRFYgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjQpIC8vICBFdGhlcm5ldCBNQUMgQ2FycmllciBTZW5zZS9DYXJyaWVyIFNlbnNlIGFuZCBEYXRhIFZhbGlkDQorI2RlZmluZSBBVDkxQ19QSU9fUEI1ICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgNSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEI1DQorI2RlZmluZSBBVDkxQ19QQjVfRVJYMCAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjUpIC8vICBFdGhlcm5ldCBNQUMgUmVjZWl2ZSBEYXRhIDANCisjZGVmaW5lIEFUOTFDX1BJT19QQjYgICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICA2KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjYNCisjZGVmaW5lIEFUOTFDX1BCNl9FUlgxICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCNikgLy8gIEV0aGVybmV0IE1BQyBSZWNlaXZlIERhdGEgMQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCNyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDcpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCNw0KKyNkZWZpbmUgQVQ5MUNfUEI3X0VSWEVSICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEI3KSAvLyAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgRXJyb3INCisjZGVmaW5lIEFUOTFDX1BJT19QQjggICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICA4KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjgNCisjZGVmaW5lIEFUOTFDX1BCOF9FTURDICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCOCkgLy8gIEV0aGVybmV0IE1BQyBNYW5hZ2VtZW50IERhdGEgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BJT19QQjkgICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICA5KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjkNCisjZGVmaW5lIEFUOTFDX1BCOV9FTURJTyAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCOSkgLy8gIEV0aGVybmV0IE1BQyBNYW5hZ2VtZW50IERhdGEgSW5wdXQvT3V0cHV0DQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgIFBFUklQSEVSQUwgSUQgREVGSU5JVElPTlMgRk9SIEFUOTFTQU03WDI1NiAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotI2RlZmluZSBBVDkxQ19JRF9GSVEgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMCApICAvKiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoRklRKSAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfU1lTICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgKSAgLyogU3lzdGVtIFBlcmlwaGVyYWwgKi8NCi0jZGVmaW5lIEFUOTFDX0lEX1BJT0EgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAyICkgIC8qIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgQSAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfUElPQiAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDMgKSAgLyogUGFyYWxsZWwgSU8gQ29udHJvbGxlciBCICovDQotI2RlZmluZSBBVDkxQ19JRF9TUEkwICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgNCApICAvKiBTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgMCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfU1BJMSAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDUgKSAgLyogU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlIDEgKi8NCi0jZGVmaW5lIEFUOTFDX0lEX1VTMCAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSA2ICkgIC8qIFVTQVJUIDAgKi8NCi0jZGVmaW5lIEFUOTFDX0lEX1VTMSAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSA3ICkgIC8qIFVTQVJUIDEgKi8NCi0jZGVmaW5lIEFUOTFDX0lEX1NTQyAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSA4ICkgIC8qIFNlcmlhbCBTeW5jaHJvbm91cyBDb250cm9sbGVyICovDQotI2RlZmluZSBBVDkxQ19JRF9UV0kgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgOSApICAvKiBUd28tV2lyZSBJbnRlcmZhY2UgKi8NCi0jZGVmaW5lIEFUOTFDX0lEX1BXTUMgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxMCApIC8qIFBXTSBDb250cm9sbGVyICovDQotI2RlZmluZSBBVDkxQ19JRF9VRFAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMTEgKSAvKiBVU0IgRGV2aWNlIFBvcnQgKi8NCi0jZGVmaW5lIEFUOTFDX0lEX1RDMCAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxMiApIC8qIFRpbWVyIENvdW50ZXIgMCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfVEMxICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEzICkgLyogVGltZXIgQ291bnRlciAxICovDQotI2RlZmluZSBBVDkxQ19JRF9UQzIgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMTQgKSAvKiBUaW1lciBDb3VudGVyIDIgKi8NCi0jZGVmaW5lIEFUOTFDX0lEX0NBTiAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxNSApIC8qIENvbnRyb2wgQXJlYSBOZXR3b3JrIENvbnRyb2xsZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0lEX0VNQUMgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxNiApIC8qIEV0aGVybmV0IE1BQyAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfQURDICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDE3ICkgLyogQW5hbG9nLXRvLURpZ2l0YWwgQ29udmVydGVyICovDQotI2RlZmluZSBBVDkxQ19JRF9BRVMgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMTggKSAvKiBBZHZhbmNlZCBFbmNyeXB0aW9uIFN0YW5kYXJkIDEyOC1iaXQgKi8NCi0jZGVmaW5lIEFUOTFDX0lEX1RERVMgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxOSApIC8qIFRyaXBsZSBEYXRhIEVuY3J5cHRpb24gU3RhbmRhcmQgKi8NCi0jZGVmaW5lIEFUOTFDX0lEXzIwX1Jlc2VydmVkICAgICggKCB1bnNpZ25lZCBpbnQgKSAyMCApIC8qIFJlc2VydmVkICovDQotI2RlZmluZSBBVDkxQ19JRF8yMV9SZXNlcnZlZCAgICAoICggdW5zaWduZWQgaW50ICkgMjEgKSAvKiBSZXNlcnZlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfMjJfUmVzZXJ2ZWQgICAgKCAoIHVuc2lnbmVkIGludCApIDIyICkgLyogUmVzZXJ2ZWQgKi8NCi0jZGVmaW5lIEFUOTFDX0lEXzIzX1Jlc2VydmVkICAgICggKCB1bnNpZ25lZCBpbnQgKSAyMyApIC8qIFJlc2VydmVkICovDQotI2RlZmluZSBBVDkxQ19JRF8yNF9SZXNlcnZlZCAgICAoICggdW5zaWduZWQgaW50ICkgMjQgKSAvKiBSZXNlcnZlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfMjVfUmVzZXJ2ZWQgICAgKCAoIHVuc2lnbmVkIGludCApIDI1ICkgLyogUmVzZXJ2ZWQgKi8NCi0jZGVmaW5lIEFUOTFDX0lEXzI2X1Jlc2VydmVkICAgICggKCB1bnNpZ25lZCBpbnQgKSAyNiApIC8qIFJlc2VydmVkICovDQotI2RlZmluZSBBVDkxQ19JRF8yN19SZXNlcnZlZCAgICAoICggdW5zaWduZWQgaW50ICkgMjcgKSAvKiBSZXNlcnZlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfMjhfUmVzZXJ2ZWQgICAgKCAoIHVuc2lnbmVkIGludCApIDI4ICkgLyogUmVzZXJ2ZWQgKi8NCi0jZGVmaW5lIEFUOTFDX0lEXzI5X1Jlc2VydmVkICAgICggKCB1bnNpZ25lZCBpbnQgKSAyOSApIC8qIFJlc2VydmVkICovDQotI2RlZmluZSBBVDkxQ19JRF9JUlEwICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMzAgKSAvKiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoSVJRMCkgKi8NCi0jZGVmaW5lIEFUOTFDX0lEX0lSUTEgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAzMSApIC8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChJUlExKSAqLw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgICBQRVJJUEhFUkFMIElEIERFRklOSVRJT05TIEZPUiBBVDkxU0FNN1gyNTYNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyNkZWZpbmUgQVQ5MUNfSURfRklRICAgICgodW5zaWduZWQgaW50KSAgMCkgLy8gQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKEZJUSkNCisjZGVmaW5lIEFUOTFDX0lEX1NZUyAgICAoKHVuc2lnbmVkIGludCkgIDEpIC8vIFN5c3RlbSBQZXJpcGhlcmFsDQorI2RlZmluZSBBVDkxQ19JRF9QSU9BICAgKCh1bnNpZ25lZCBpbnQpICAyKSAvLyBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEENCisjZGVmaW5lIEFUOTFDX0lEX1BJT0IgICAoKHVuc2lnbmVkIGludCkgIDMpIC8vIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgQg0KKyNkZWZpbmUgQVQ5MUNfSURfU1BJMCAgICgodW5zaWduZWQgaW50KSAgNCkgLy8gU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlIDANCisjZGVmaW5lIEFUOTFDX0lEX1NQSTEgICAoKHVuc2lnbmVkIGludCkgIDUpIC8vIFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSAxDQorI2RlZmluZSBBVDkxQ19JRF9VUzAgICAgKCh1bnNpZ25lZCBpbnQpICA2KSAvLyBVU0FSVCAwDQorI2RlZmluZSBBVDkxQ19JRF9VUzEgICAgKCh1bnNpZ25lZCBpbnQpICA3KSAvLyBVU0FSVCAxDQorI2RlZmluZSBBVDkxQ19JRF9TU0MgICAgKCh1bnNpZ25lZCBpbnQpICA4KSAvLyBTZXJpYWwgU3luY2hyb25vdXMgQ29udHJvbGxlcg0KKyNkZWZpbmUgQVQ5MUNfSURfVFdJICAgICgodW5zaWduZWQgaW50KSAgOSkgLy8gVHdvLVdpcmUgSW50ZXJmYWNlDQorI2RlZmluZSBBVDkxQ19JRF9QV01DICAgKCh1bnNpZ25lZCBpbnQpIDEwKSAvLyBQV00gQ29udHJvbGxlcg0KKyNkZWZpbmUgQVQ5MUNfSURfVURQICAgICgodW5zaWduZWQgaW50KSAxMSkgLy8gVVNCIERldmljZSBQb3J0DQorI2RlZmluZSBBVDkxQ19JRF9UQzAgICAgKCh1bnNpZ25lZCBpbnQpIDEyKSAvLyBUaW1lciBDb3VudGVyIDANCisjZGVmaW5lIEFUOTFDX0lEX1RDMSAgICAoKHVuc2lnbmVkIGludCkgMTMpIC8vIFRpbWVyIENvdW50ZXIgMQ0KKyNkZWZpbmUgQVQ5MUNfSURfVEMyICAgICgodW5zaWduZWQgaW50KSAxNCkgLy8gVGltZXIgQ291bnRlciAyDQorI2RlZmluZSBBVDkxQ19JRF9DQU4gICAgKCh1bnNpZ25lZCBpbnQpIDE1KSAvLyBDb250cm9sIEFyZWEgTmV0d29yayBDb250cm9sbGVyDQorI2RlZmluZSBBVDkxQ19JRF9FTUFDICAgKCh1bnNpZ25lZCBpbnQpIDE2KSAvLyBFdGhlcm5ldCBNQUMNCisjZGVmaW5lIEFUOTFDX0lEX0FEQyAgICAoKHVuc2lnbmVkIGludCkgMTcpIC8vIEFuYWxvZy10by1EaWdpdGFsIENvbnZlcnRlcg0KKyNkZWZpbmUgQVQ5MUNfSURfQUVTICAgICgodW5zaWduZWQgaW50KSAxOCkgLy8gQWR2YW5jZWQgRW5jcnlwdGlvbiBTdGFuZGFyZCAxMjgtYml0DQorI2RlZmluZSBBVDkxQ19JRF9UREVTICAgKCh1bnNpZ25lZCBpbnQpIDE5KSAvLyBUcmlwbGUgRGF0YSBFbmNyeXB0aW9uIFN0YW5kYXJkDQorI2RlZmluZSBBVDkxQ19JRF8yMF9SZXNlcnZlZCAoKHVuc2lnbmVkIGludCkgMjApIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yMV9SZXNlcnZlZCAoKHVuc2lnbmVkIGludCkgMjEpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yMl9SZXNlcnZlZCAoKHVuc2lnbmVkIGludCkgMjIpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yM19SZXNlcnZlZCAoKHVuc2lnbmVkIGludCkgMjMpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yNF9SZXNlcnZlZCAoKHVuc2lnbmVkIGludCkgMjQpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yNV9SZXNlcnZlZCAoKHVuc2lnbmVkIGludCkgMjUpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yNl9SZXNlcnZlZCAoKHVuc2lnbmVkIGludCkgMjYpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yN19SZXNlcnZlZCAoKHVuc2lnbmVkIGludCkgMjcpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yOF9SZXNlcnZlZCAoKHVuc2lnbmVkIGludCkgMjgpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yOV9SZXNlcnZlZCAoKHVuc2lnbmVkIGludCkgMjkpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF9JUlEwICAgKCh1bnNpZ25lZCBpbnQpIDMwKSAvLyBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoSVJRMCkNCisjZGVmaW5lIEFUOTFDX0lEX0lSUTEgICAoKHVuc2lnbmVkIGludCkgMzEpIC8vIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChJUlExKQ0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgICBCQVNFIEFERFJFU1MgREVGSU5JVElPTlMgRk9SIEFUOTFTQU03WDI1NiAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1NZUyAgICAgICAgICggKCBBVDkxUFNfU1lTICkgMHhGRkZGRjAwMCApICAgICAvKiAoU1lTKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfQUlDICAgICAgICAgKCAoIEFUOTFQU19BSUMgKSAweEZGRkZGMDAwICkgICAgIC8qIChBSUMpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfREJHVSAgICAoICggQVQ5MVBTX1BEQyApIDB4RkZGRkYzMDAgKSAgICAgLyogKFBEQ19EQkdVKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfREJHVSAgICAgICAgKCAoIEFUOTFQU19EQkdVICkgMHhGRkZGRjIwMCApICAgIC8qIChEQkdVKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfUElPQSAgICAgICAgKCAoIEFUOTFQU19QSU8gKSAweEZGRkZGNDAwICkgICAgIC8qIChQSU9BKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfUElPQiAgICAgICAgKCAoIEFUOTFQU19QSU8gKSAweEZGRkZGNjAwICkgICAgIC8qIChQSU9CKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfQ0tHUiAgICAgICAgKCAoIEFUOTFQU19DS0dSICkgMHhGRkZGRkMyMCApICAgIC8qIChDS0dSKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfUE1DICAgICAgICAgKCAoIEFUOTFQU19QTUMgKSAweEZGRkZGQzAwICkgICAgIC8qIChQTUMpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9SU1RDICAgICAgICAoICggQVQ5MVBTX1JTVEMgKSAweEZGRkZGRDAwICkgICAgLyogKFJTVEMpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9SVFRDICAgICAgICAoICggQVQ5MVBTX1JUVEMgKSAweEZGRkZGRDIwICkgICAgLyogKFJUVEMpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9QSVRDICAgICAgICAoICggQVQ5MVBTX1BJVEMgKSAweEZGRkZGRDMwICkgICAgLyogKFBJVEMpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9XRFRDICAgICAgICAoICggQVQ5MVBTX1dEVEMgKSAweEZGRkZGRDQwICkgICAgLyogKFdEVEMpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9WUkVHICAgICAgICAoICggQVQ5MVBTX1ZSRUcgKSAweEZGRkZGRDYwICkgICAgLyogKFZSRUcpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9NQyAgICAgICAgICAoICggQVQ5MVBTX01DICkgMHhGRkZGRkYwMCApICAgICAgLyogKE1DKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfUERDX1NQSTEgICAgKCAoIEFUOTFQU19QREMgKSAweEZGRkU0MTAwICkgICAgIC8qIChQRENfU1BJMSkgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1NQSTEgICAgICAgICggKCBBVDkxUFNfU1BJICkgMHhGRkZFNDAwMCApICAgICAvKiAoU1BJMSkgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19TUEkwICAgICggKCBBVDkxUFNfUERDICkgMHhGRkZFMDEwMCApICAgICAvKiAoUERDX1NQSTApIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9TUEkwICAgICAgICAoICggQVQ5MVBTX1NQSSApIDB4RkZGRTAwMDAgKSAgICAgLyogKFNQSTApIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfVVMxICAgICAoICggQVQ5MVBTX1BEQyApIDB4RkZGQzQxMDAgKSAgICAgLyogKFBEQ19VUzEpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9VUzEgICAgICAgICAoICggQVQ5MVBTX1VTQVJUICkgMHhGRkZDNDAwMCApICAgLyogKFVTMSkgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19VUzAgICAgICggKCBBVDkxUFNfUERDICkgMHhGRkZDMDEwMCApICAgICAvKiAoUERDX1VTMCkgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1VTMCAgICAgICAgICggKCBBVDkxUFNfVVNBUlQgKSAweEZGRkMwMDAwICkgICAvKiAoVVMwKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfUERDX1NTQyAgICAgKCAoIEFUOTFQU19QREMgKSAweEZGRkQ0MTAwICkgICAgIC8qIChQRENfU1NDKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfU1NDICAgICAgICAgKCAoIEFUOTFQU19TU0MgKSAweEZGRkQ0MDAwICkgICAgIC8qIChTU0MpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9UV0kgICAgICAgICAoICggQVQ5MVBTX1RXSSApIDB4RkZGQjgwMDAgKSAgICAgLyogKFRXSSkgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1BXTUNfQ0gzICAgICggKCBBVDkxUFNfUFdNQ19DSCApIDB4RkZGQ0MyNjAgKSAvKiAoUFdNQ19DSDMpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9QV01DX0NIMiAgICAoICggQVQ5MVBTX1BXTUNfQ0ggKSAweEZGRkNDMjQwICkgLyogKFBXTUNfQ0gyKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfUFdNQ19DSDEgICAgKCAoIEFUOTFQU19QV01DX0NIICkgMHhGRkZDQzIyMCApIC8qIChQV01DX0NIMSkgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1BXTUNfQ0gwICAgICggKCBBVDkxUFNfUFdNQ19DSCApIDB4RkZGQ0MyMDAgKSAvKiAoUFdNQ19DSDApIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9QV01DICAgICAgICAoICggQVQ5MVBTX1BXTUMgKSAweEZGRkNDMDAwICkgICAgLyogKFBXTUMpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9VRFAgICAgICAgICAoICggQVQ5MVBTX1VEUCApIDB4RkZGQjAwMDAgKSAgICAgLyogKFVEUCkgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1RDMCAgICAgICAgICggKCBBVDkxUFNfVEMgKSAweEZGRkEwMDAwICkgICAgICAvKiAoVEMwKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfVEMxICAgICAgICAgKCAoIEFUOTFQU19UQyApIDB4RkZGQTAwNDAgKSAgICAgIC8qIChUQzEpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9UQzIgICAgICAgICAoICggQVQ5MVBTX1RDICkgMHhGRkZBMDA4MCApICAgICAgLyogKFRDMikgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1RDQiAgICAgICAgICggKCBBVDkxUFNfVENCICkgMHhGRkZBMDAwMCApICAgICAvKiAoVENCKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfQ0FOX01CMCAgICAgKCAoIEFUOTFQU19DQU5fTUIgKSAweEZGRkQwMjAwICkgIC8qIChDQU5fTUIwKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfQ0FOX01CMSAgICAgKCAoIEFUOTFQU19DQU5fTUIgKSAweEZGRkQwMjIwICkgIC8qIChDQU5fTUIxKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfQ0FOX01CMiAgICAgKCAoIEFUOTFQU19DQU5fTUIgKSAweEZGRkQwMjQwICkgIC8qIChDQU5fTUIyKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfQ0FOX01CMyAgICAgKCAoIEFUOTFQU19DQU5fTUIgKSAweEZGRkQwMjYwICkgIC8qIChDQU5fTUIzKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfQ0FOX01CNCAgICAgKCAoIEFUOTFQU19DQU5fTUIgKSAweEZGRkQwMjgwICkgIC8qIChDQU5fTUI0KSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfQ0FOX01CNSAgICAgKCAoIEFUOTFQU19DQU5fTUIgKSAweEZGRkQwMkEwICkgIC8qIChDQU5fTUI1KSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfQ0FOX01CNiAgICAgKCAoIEFUOTFQU19DQU5fTUIgKSAweEZGRkQwMkMwICkgIC8qIChDQU5fTUI2KSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfQ0FOX01CNyAgICAgKCAoIEFUOTFQU19DQU5fTUIgKSAweEZGRkQwMkUwICkgIC8qIChDQU5fTUI3KSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfQ0FOICAgICAgICAgKCAoIEFUOTFQU19DQU4gKSAweEZGRkQwMDAwICkgICAgIC8qIChDQU4pIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9FTUFDICAgICAgICAoICggQVQ5MVBTX0VNQUMgKSAweEZGRkRDMDAwICkgICAgLyogKEVNQUMpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfQURDICAgICAoICggQVQ5MVBTX1BEQyApIDB4RkZGRDgxMDAgKSAgICAgLyogKFBEQ19BREMpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9BREMgICAgICAgICAoICggQVQ5MVBTX0FEQyApIDB4RkZGRDgwMDAgKSAgICAgLyogKEFEQykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19BRVMgICAgICggKCBBVDkxUFNfUERDICkgMHhGRkZBNDEwMCApICAgICAvKiAoUERDX0FFUykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX0FFUyAgICAgICAgICggKCBBVDkxUFNfQUVTICkgMHhGRkZBNDAwMCApICAgICAvKiAoQUVTKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfUERDX1RERVMgICAgKCAoIEFUOTFQU19QREMgKSAweEZGRkE4MTAwICkgICAgIC8qIChQRENfVERFUykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1RERVMgICAgICAgICggKCBBVDkxUFNfVERFUyApIDB4RkZGQTgwMDAgKSAgICAvKiAoVERFUykgQmFzZSBBZGRyZXNzICovDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgIEJBU0UgQUREUkVTUyBERUZJTklUSU9OUyBGT1IgQVQ5MVNBTTdYMjU2DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisjZGVmaW5lIEFUOTFDX0JBU0VfU1lTICAgICAgICgoQVQ5MVBTX1NZUykgCTB4RkZGRkYwMDApIC8vIChTWVMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9BSUMgICAgICAgKChBVDkxUFNfQUlDKSAJMHhGRkZGRjAwMCkgLy8gKEFJQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19EQkdVICAoKEFUOTFQU19QREMpIAkweEZGRkZGMzAwKSAvLyAoUERDX0RCR1UpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9EQkdVICAgICAgKChBVDkxUFNfREJHVSkgCTB4RkZGRkYyMDApIC8vIChEQkdVKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUElPQSAgICAgICgoQVQ5MVBTX1BJTykgCTB4RkZGRkY0MDApIC8vIChQSU9BKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUElPQiAgICAgICgoQVQ5MVBTX1BJTykgCTB4RkZGRkY2MDApIC8vIChQSU9CKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfQ0tHUiAgICAgICgoQVQ5MVBTX0NLR1IpIAkweEZGRkZGQzIwKSAvLyAoQ0tHUikgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BNQyAgICAgICAoKEFUOTFQU19QTUMpIAkweEZGRkZGQzAwKSAvLyAoUE1DKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUlNUQyAgICAgICgoQVQ5MVBTX1JTVEMpIAkweEZGRkZGRDAwKSAvLyAoUlNUQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1JUVEMgICAgICAoKEFUOTFQU19SVFRDKSAJMHhGRkZGRkQyMCkgLy8gKFJUVEMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QSVRDICAgICAgKChBVDkxUFNfUElUQykgCTB4RkZGRkZEMzApIC8vIChQSVRDKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfV0RUQyAgICAgICgoQVQ5MVBTX1dEVEMpIAkweEZGRkZGRDQwKSAvLyAoV0RUQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1ZSRUcgICAgICAoKEFUOTFQU19WUkVHKSAJMHhGRkZGRkQ2MCkgLy8gKFZSRUcpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9NQyAgICAgICAgKChBVDkxUFNfTUMpIAkweEZGRkZGRjAwKSAvLyAoTUMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfU1BJMSAgKChBVDkxUFNfUERDKSAJMHhGRkZFNDEwMCkgLy8gKFBEQ19TUEkxKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfU1BJMSAgICAgICgoQVQ5MVBTX1NQSSkgCTB4RkZGRTQwMDApIC8vIChTUEkxKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUERDX1NQSTAgICgoQVQ5MVBTX1BEQykgCTB4RkZGRTAxMDApIC8vIChQRENfU1BJMCkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1NQSTAgICAgICAoKEFUOTFQU19TUEkpIAkweEZGRkUwMDAwKSAvLyAoU1BJMCkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19VUzEgICAoKEFUOTFQU19QREMpIAkweEZGRkM0MTAwKSAvLyAoUERDX1VTMSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1VTMSAgICAgICAoKEFUOTFQU19VU0FSVCkgCTB4RkZGQzQwMDApIC8vIChVUzEpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfVVMwICAgKChBVDkxUFNfUERDKSAJMHhGRkZDMDEwMCkgLy8gKFBEQ19VUzApIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9VUzAgICAgICAgKChBVDkxUFNfVVNBUlQpIAkweEZGRkMwMDAwKSAvLyAoVVMwKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUERDX1NTQyAgICgoQVQ5MVBTX1BEQykgCTB4RkZGRDQxMDApIC8vIChQRENfU1NDKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfU1NDICAgICAgICgoQVQ5MVBTX1NTQykgCTB4RkZGRDQwMDApIC8vIChTU0MpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9UV0kgICAgICAgKChBVDkxUFNfVFdJKSAJMHhGRkZCODAwMCkgLy8gKFRXSSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BXTUNfQ0gzICAoKEFUOTFQU19QV01DX0NIKSAJMHhGRkZDQzI2MCkgLy8gKFBXTUNfQ0gzKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUFdNQ19DSDIgICgoQVQ5MVBTX1BXTUNfQ0gpIAkweEZGRkNDMjQwKSAvLyAoUFdNQ19DSDIpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QV01DX0NIMSAgKChBVDkxUFNfUFdNQ19DSCkgCTB4RkZGQ0MyMjApIC8vIChQV01DX0NIMSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BXTUNfQ0gwICAoKEFUOTFQU19QV01DX0NIKSAJMHhGRkZDQzIwMCkgLy8gKFBXTUNfQ0gwKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUFdNQyAgICAgICgoQVQ5MVBTX1BXTUMpIAkweEZGRkNDMDAwKSAvLyAoUFdNQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1VEUCAgICAgICAoKEFUOTFQU19VRFApIAkweEZGRkIwMDAwKSAvLyAoVURQKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfVEMwICAgICAgICgoQVQ5MVBTX1RDKSAJMHhGRkZBMDAwMCkgLy8gKFRDMCkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1RDMSAgICAgICAoKEFUOTFQU19UQykgCTB4RkZGQTAwNDApIC8vIChUQzEpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9UQzIgICAgICAgKChBVDkxUFNfVEMpIAkweEZGRkEwMDgwKSAvLyAoVEMyKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfVENCICAgICAgICgoQVQ5MVBTX1RDQikgCTB4RkZGQTAwMDApIC8vIChUQ0IpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUIwICAgKChBVDkxUFNfQ0FOX01CKSAJMHhGRkZEMDIwMCkgLy8gKENBTl9NQjApIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUIxICAgKChBVDkxUFNfQ0FOX01CKSAJMHhGRkZEMDIyMCkgLy8gKENBTl9NQjEpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUIyICAgKChBVDkxUFNfQ0FOX01CKSAJMHhGRkZEMDI0MCkgLy8gKENBTl9NQjIpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUIzICAgKChBVDkxUFNfQ0FOX01CKSAJMHhGRkZEMDI2MCkgLy8gKENBTl9NQjMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUI0ICAgKChBVDkxUFNfQ0FOX01CKSAJMHhGRkZEMDI4MCkgLy8gKENBTl9NQjQpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUI1ICAgKChBVDkxUFNfQ0FOX01CKSAJMHhGRkZEMDJBMCkgLy8gKENBTl9NQjUpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUI2ICAgKChBVDkxUFNfQ0FOX01CKSAJMHhGRkZEMDJDMCkgLy8gKENBTl9NQjYpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUI3ICAgKChBVDkxUFNfQ0FOX01CKSAJMHhGRkZEMDJFMCkgLy8gKENBTl9NQjcpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DQU4gICAgICAgKChBVDkxUFNfQ0FOKSAJMHhGRkZEMDAwMCkgLy8gKENBTikgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0VNQUMgICAgICAoKEFUOTFQU19FTUFDKSAJMHhGRkZEQzAwMCkgLy8gKEVNQUMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfQURDICAgKChBVDkxUFNfUERDKSAJMHhGRkZEODEwMCkgLy8gKFBEQ19BREMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9BREMgICAgICAgKChBVDkxUFNfQURDKSAJMHhGRkZEODAwMCkgLy8gKEFEQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19BRVMgICAoKEFUOTFQU19QREMpIAkweEZGRkE0MTAwKSAvLyAoUERDX0FFUykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0FFUyAgICAgICAoKEFUOTFQU19BRVMpIAkweEZGRkE0MDAwKSAvLyAoQUVTKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUERDX1RERVMgICgoQVQ5MVBTX1BEQykgCTB4RkZGQTgxMDApIC8vIChQRENfVERFUykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1RERVMgICAgICAoKEFUOTFQU19UREVTKSAJMHhGRkZBODAwMCkgLy8gKFRERVMpIEJhc2UgQWRkcmVzcw0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgICBNRU1PUlkgTUFQUElORyBERUZJTklUSU9OUyBGT1IgQVQ5MVNBTTdYMjU2ICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0jZGVmaW5lIEFUOTFDX0lTUkFNICAgICAgICAgICggKCBjaGFyICogKSAweDAwMjAwMDAwICkgICAgICAgLyogSW50ZXJuYWwgU1JBTSBiYXNlIGFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0lTUkFNX1NJWkUgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAwMDEwMDAwICkgLyogSW50ZXJuYWwgU1JBTSBzaXplIGluIGJ5dGUgKDY0IEtieXRlKSAqLw0KLSNkZWZpbmUgQVQ5MUNfSUZMQVNIICAgICAgICAgKCAoIGNoYXIgKiApIDB4MDAxMDAwMDAgKSAgICAgICAvKiBJbnRlcm5hbCBST00gYmFzZSBhZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19JRkxBU0hfU0laRSAgICAoICggdW5zaWduZWQgaW50ICkgMHgwMDA0MDAwMCApIC8qIEludGVybmFsIFJPTSBzaXplIGluIGJ5dGUgKDI1NiBLYnl0ZSkgKi8NCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICAgTUVNT1JZIE1BUFBJTkcgREVGSU5JVElPTlMgRk9SIEFUOTFTQU03WDI1Ng0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorI2RlZmluZSBBVDkxQ19JU1JBTQkgKChjaGFyICopIAkweDAwMjAwMDAwKSAvLyBJbnRlcm5hbCBTUkFNIGJhc2UgYWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfSVNSQU1fU0laRQkgKCh1bnNpZ25lZCBpbnQpIDB4MDAwMTAwMDApIC8vIEludGVybmFsIFNSQU0gc2l6ZSBpbiBieXRlICg2NCBLYnl0ZSkNCisjZGVmaW5lIEFUOTFDX0lGTEFTSAkgKChjaGFyICopIAkweDAwMTAwMDAwKSAvLyBJbnRlcm5hbCBST00gYmFzZSBhZGRyZXNzDQorI2RlZmluZSBBVDkxQ19JRkxBU0hfU0laRQkgKCh1bnNpZ25lZCBpbnQpIDB4MDAwNDAwMDApIC8vIEludGVybmFsIFJPTSBzaXplIGluIGJ5dGUgKDI1NiBLYnl0ZSkNCiANCiANCiANCi0vKiAtIEhhcmR3YXJlIHJlZ2lzdGVyIGRlZmluaXRpb24gKi8NCisvLyAtIEhhcmR3YXJlIHJlZ2lzdGVyIGRlZmluaXRpb24NCiANCi0vKiAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogLSAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBTeXN0ZW0gUGVyaXBoZXJhbHMgKi8NCi0vKiAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorLy8gLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vIC0gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgU3lzdGVtIFBlcmlwaGVyYWxzDQorLy8gLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KIA0KLS8qIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAtICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyICovDQotLyogLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qIC0gLS0tLS0tLS0gQUlDX1NNUiA6IChBSUMgT2Zmc2V0OiAweDApIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCisvLyAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gLSAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlcg0KKy8vIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAtIC0tLS0tLS0tIEFJQ19TTVIgOiAoQUlDIE9mZnNldDogMHgwKSBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KICNpZiAwIC8qX1JCXyovDQotICAgIEFUOTFDX0FJQ19QUklPUiBFUVUoIDB4NyA8PCAwICk7DQotICAgIC0gKCBBSUMgKSBQcmlvcml0eSBMZXZlbA0KLSAgICAgICAgQVQ5MUNfQUlDX1BSSU9SX0xPV0VTVCBFUVUoIDB4MCApOw0KLSAgICAtICggQUlDICkgTG93ZXN0IHByaW9yaXR5IGxldmVsDQotICAgICAgICBBVDkxQ19BSUNfUFJJT1JfSElHSEVTVCBFUVUoIDB4NyApOw0KLSAgICAtICggQUlDICkgSGlnaGVzdCBwcmlvcml0eSBsZXZlbA0KLSAgICAgICAgQVQ5MUNfQUlDX1NSQ1RZUEUgRVFVKCAweDMgPDwgNSApOw0KLSAgICAtICggQUlDICkgSW50ZXJydXB0IFNvdXJjZSBUeXBlDQotICAgICAgICBBVDkxQ19BSUNfU1JDVFlQRV9JTlRfSElHSF9MRVZFTCBFUVUoIDB4MCA8PCA1ICk7DQotICAgIC0gKCBBSUMgKSBJbnRlcm5hbCBTb3VyY2VzIENvZGUgTGFiZWwgSGlnaCAtIGxldmVsIFNlbnNpdGl2ZQ0KLSAgICAgICAgQVQ5MUNfQUlDX1NSQ1RZUEVfRVhUX0xPV19MRVZFTCBFUVUoIDB4MCA8PCA1ICk7DQotICAgIC0gKCBBSUMgKSBFeHRlcm5hbCBTb3VyY2VzIENvZGUgTGFiZWwgTG93IC0gbGV2ZWwgU2Vuc2l0aXZlDQotICAgICAgICBBVDkxQ19BSUNfU1JDVFlQRV9JTlRfUE9TSVRJVkVfRURHRSBFUVUoIDB4MSA8PCA1ICk7DQotICAgIC0gKCBBSUMgKSBJbnRlcm5hbCBTb3VyY2VzIENvZGUgTGFiZWwgUG9zaXRpdmUgRWRnZSB0cmlnZ2VyZWQNCi0gICAgICAgIEFUOTFDX0FJQ19TUkNUWVBFX0VYVF9ORUdBVElWRV9FREdFIEVRVSggMHgxIDw8IDUgKTsNCi0gICAgLSAoIEFJQyApIEV4dGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBOZWdhdGl2ZSBFZGdlIHRyaWdnZXJlZA0KLSAgICAgICAgQVQ5MUNfQUlDX1NSQ1RZUEVfSElHSF9MRVZFTCBFUVUoIDB4MiA8PCA1ICk7DQotICAgIC0gKCBBSUMgKSBJbnRlcm5hbCBPciBFeHRlcm5hbCBTb3VyY2VzIENvZGUgTGFiZWwgSGlnaCAtIGxldmVsIFNlbnNpdGl2ZQ0KLSAgICAgICAgQVQ5MUNfQUlDX1NSQ1RZUEVfUE9TSVRJVkVfRURHRSBFUVUoIDB4MyA8PCA1ICk7DQotICAgIC0gKCBBSUMgKSBJbnRlcm5hbCBPciBFeHRlcm5hbCBTb3VyY2VzIENvZGUgTGFiZWwgUG9zaXRpdmUgRWRnZSB0cmlnZ2VyZWQNCi0vKiAtIC0tLS0tLS0tIEFJQ19DSVNSIDogKEFJQyBPZmZzZXQ6IDB4MTE0KSBBSUMgQ29yZSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotICAgICAgICBBVDkxQ19BSUNfTkZJUSBFUVUoIDB4MSA8PCAwICk7DQotICAgIC0gKCBBSUMgKSBORklRIFN0YXR1cw0KLSAgICAgICAgQVQ5MUNfQUlDX05JUlEgRVFVKCAweDEgPDwgMSApOw0KLSAgICAtICggQUlDICkgTklSUSBTdGF0dXMNCi0vKiAtIC0tLS0tLS0tIEFJQ19EQ1IgOiAoQUlDIE9mZnNldDogMHgxMzgpIEFJQyBEZWJ1ZyBDb250cm9sIFJlZ2lzdGVyIChQcm90ZWN0KSAtLS0tLS0tLSAqLw0KLSAgICAgICAgQVQ5MUNfQUlDX0RDUl9QUk9UIEVRVSggMHgxIDw8IDAgKTsNCi0gICAgLSAoIEFJQyApIFByb3RlY3Rpb24gTW9kZQ0KLSAgICAgICAgQVQ5MUNfQUlDX0RDUl9HTVNLIEVRVSggMHgxIDw8IDEgKTsNCi0gICAgLSAoIEFJQyApIEdlbmVyYWwgTWFzaw0KLSNlbmRpZiAvKiBpZiAwICovDQotLyogLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qIC0gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUGVyaXBoZXJhbCBETUEgQ29udHJvbGxlciAqLw0KLS8qIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAtIC0tLS0tLS0tIFBEQ19QVENSIDogKFBEQyBPZmZzZXQ6IDB4MjApIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotQVQ5MUNfUERDX1JYVEVOIEVRVSggMHgxIDw8IDAgKTsNCi0tICggUERDICkgUmVjZWl2ZXIgVHJhbnNmZXIgRW5hYmxlDQotICAgIEFUOTFDX1BEQ19SWFRESVMgRVFVKCAweDEgPDwgMSApOw0KLS0gKCBQREMgKSBSZWNlaXZlciBUcmFuc2ZlciBEaXNhYmxlDQotICAgIEFUOTFDX1BEQ19UWFRFTiBFUVUoIDB4MSA8PCA4ICk7DQotLSAoIFBEQyApIFRyYW5zbWl0dGVyIFRyYW5zZmVyIEVuYWJsZQ0KLSAgICBBVDkxQ19QRENfVFhURElTIEVRVSggMHgxIDw8IDkgKTsNCi0tICggUERDICkgVHJhbnNtaXR0ZXIgVHJhbnNmZXIgRGlzYWJsZQ0KLS8qIC0gLS0tLS0tLS0gUERDX1BUU1IgOiAoUERDIE9mZnNldDogMHgyNCkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KK0FUOTFDX0FJQ19QUklPUiAgICAgICAgICAgRVFVICgweDcgPDwgIDApIDstIChBSUMpIFByaW9yaXR5IExldmVsDQorQVQ5MUNfQUlDX1BSSU9SX0xPV0VTVCAgICBFUVUgKDB4MCkgOy0gKEFJQykgTG93ZXN0IHByaW9yaXR5IGxldmVsDQorQVQ5MUNfQUlDX1BSSU9SX0hJR0hFU1QgICBFUVUgKDB4NykgOy0gKEFJQykgSGlnaGVzdCBwcmlvcml0eSBsZXZlbA0KK0FUOTFDX0FJQ19TUkNUWVBFICAgICAgICAgRVFVICgweDMgPDwgIDUpIDstIChBSUMpIEludGVycnVwdCBTb3VyY2UgVHlwZQ0KK0FUOTFDX0FJQ19TUkNUWVBFX0lOVF9ISUdIX0xFVkVMIEVRVSAoMHgwIDw8ICA1KSA7LSAoQUlDKSBJbnRlcm5hbCBTb3VyY2VzIENvZGUgTGFiZWwgSGlnaC1sZXZlbCBTZW5zaXRpdmUNCitBVDkxQ19BSUNfU1JDVFlQRV9FWFRfTE9XX0xFVkVMIEVRVSAoMHgwIDw8ICA1KSA7LSAoQUlDKSBFeHRlcm5hbCBTb3VyY2VzIENvZGUgTGFiZWwgTG93LWxldmVsIFNlbnNpdGl2ZQ0KK0FUOTFDX0FJQ19TUkNUWVBFX0lOVF9QT1NJVElWRV9FREdFIEVRVSAoMHgxIDw8ICA1KSA7LSAoQUlDKSBJbnRlcm5hbCBTb3VyY2VzIENvZGUgTGFiZWwgUG9zaXRpdmUgRWRnZSB0cmlnZ2VyZWQNCitBVDkxQ19BSUNfU1JDVFlQRV9FWFRfTkVHQVRJVkVfRURHRSBFUVUgKDB4MSA8PCAgNSkgOy0gKEFJQykgRXh0ZXJuYWwgU291cmNlcyBDb2RlIExhYmVsIE5lZ2F0aXZlIEVkZ2UgdHJpZ2dlcmVkDQorQVQ5MUNfQUlDX1NSQ1RZUEVfSElHSF9MRVZFTCBFUVUgKDB4MiA8PCAgNSkgOy0gKEFJQykgSW50ZXJuYWwgT3IgRXh0ZXJuYWwgU291cmNlcyBDb2RlIExhYmVsIEhpZ2gtbGV2ZWwgU2Vuc2l0aXZlDQorQVQ5MUNfQUlDX1NSQ1RZUEVfUE9TSVRJVkVfRURHRSBFUVUgKDB4MyA8PCAgNSkgOy0gKEFJQykgSW50ZXJuYWwgT3IgRXh0ZXJuYWwgU291cmNlcyBDb2RlIExhYmVsIFBvc2l0aXZlIEVkZ2UgdHJpZ2dlcmVkDQorLy8gLSAtLS0tLS0tLSBBSUNfQ0lTUiA6IChBSUMgT2Zmc2V0OiAweDExNCkgQUlDIENvcmUgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19BSUNfTkZJUSAgICAgICAgICAgIEVRVSAoMHgxIDw8ICAwKSA7LSAoQUlDKSBORklRIFN0YXR1cw0KK0FUOTFDX0FJQ19OSVJRICAgICAgICAgICAgRVFVICgweDEgPDwgIDEpIDstIChBSUMpIE5JUlEgU3RhdHVzDQorLy8gLSAtLS0tLS0tLSBBSUNfRENSIDogKEFJQyBPZmZzZXQ6IDB4MTM4KSBBSUMgRGVidWcgQ29udHJvbCBSZWdpc3RlciAoUHJvdGVjdCkgLS0tLS0tLS0gDQorQVQ5MUNfQUlDX0RDUl9QUk9UICAgICAgICBFUVUgKDB4MSA8PCAgMCkgOy0gKEFJQykgUHJvdGVjdGlvbiBNb2RlDQorQVQ5MUNfQUlDX0RDUl9HTVNLICAgICAgICBFUVUgKDB4MSA8PCAgMSkgOy0gKEFJQykgR2VuZXJhbCBNYXNrDQorI2VuZGlmDQorLy8gLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vIC0gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUGVyaXBoZXJhbCBETUEgQ29udHJvbGxlcg0KKy8vIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAtIC0tLS0tLS0tIFBEQ19QVENSIDogKFBEQyBPZmZzZXQ6IDB4MjApIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX1BEQ19SWFRFTiAgICAgICAgICAgRVFVICgweDEgPDwgIDApIDstIChQREMpIFJlY2VpdmVyIFRyYW5zZmVyIEVuYWJsZQ0KK0FUOTFDX1BEQ19SWFRESVMgICAgICAgICAgRVFVICgweDEgPDwgIDEpIDstIChQREMpIFJlY2VpdmVyIFRyYW5zZmVyIERpc2FibGUNCitBVDkxQ19QRENfVFhURU4gICAgICAgICAgIEVRVSAoMHgxIDw8ICA4KSA7LSAoUERDKSBUcmFuc21pdHRlciBUcmFuc2ZlciBFbmFibGUNCitBVDkxQ19QRENfVFhURElTICAgICAgICAgIEVRVSAoMHgxIDw8ICA5KSA7LSAoUERDKSBUcmFuc21pdHRlciBUcmFuc2ZlciBEaXNhYmxlDQorLy8gLSAtLS0tLS0tLSBQRENfUFRTUiA6IChQREMgT2Zmc2V0OiAweDI0KSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KIA0KLS8qIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAtICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIERlYnVnIFVuaXQgKi8NCi0vKiAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogLSAtLS0tLS0tLSBEQkdVX0NSIDogKERCR1UgT2Zmc2V0OiAweDApIERlYnVnIFVuaXQgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSAgICBBVDkxQ19VU19SU1RSWCBFUVUoIDB4MSA8PCAyICk7DQotLSAoIERCR1UgKSBSZXNldCBSZWNlaXZlcg0KLSAgICBBVDkxQ19VU19SU1RUWCBFUVUoIDB4MSA8PCAzICk7DQotLSAoIERCR1UgKSBSZXNldCBUcmFuc21pdHRlcg0KLSAgICBBVDkxQ19VU19SWEVOIEVRVSggMHgxIDw8IDQgKTsNCi0tICggREJHVSApIFJlY2VpdmVyIEVuYWJsZQ0KLSAgICBBVDkxQ19VU19SWERJUyBFUVUoIDB4MSA8PCA1ICk7DQotLSAoIERCR1UgKSBSZWNlaXZlciBEaXNhYmxlDQotICAgIEFUOTFDX1VTX1RYRU4gRVFVKCAweDEgPDwgNiApOw0KLS0gKCBEQkdVICkgVHJhbnNtaXR0ZXIgRW5hYmxlDQotICAgIEFUOTFDX1VTX1RYRElTIEVRVSggMHgxIDw8IDcgKTsNCi0tICggREJHVSApIFRyYW5zbWl0dGVyIERpc2FibGUNCi0gICAgQVQ5MUNfVVNfUlNUU1RBIEVRVSggMHgxIDw8IDggKTsNCi0tICggREJHVSApIFJlc2V0IFN0YXR1cyBCaXRzDQotLyogLSAtLS0tLS0tLSBEQkdVX01SIDogKERCR1UgT2Zmc2V0OiAweDQpIERlYnVnIFVuaXQgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSAgICBBVDkxQ19VU19QQVIgRVFVKCAweDcgPDwgOSApOw0KLS0gKCBEQkdVICkgUGFyaXR5IHR5cGUNCi0gICAgQVQ5MUNfVVNfUEFSX0VWRU4gRVFVKCAweDAgPDwgOSApOw0KLS0gKCBEQkdVICkgRXZlbiBQYXJpdHkNCi0gICAgQVQ5MUNfVVNfUEFSX09ERCBFUVUoIDB4MSA8PCA5ICk7DQotLSAoIERCR1UgKSBPZGQgUGFyaXR5DQotICAgIEFUOTFDX1VTX1BBUl9TUEFDRSBFUVUoIDB4MiA8PCA5ICk7DQotLSAoIERCR1UgKSBQYXJpdHkgZm9yY2VkIHRvIDAgKCBTcGFjZSApDQotICAgIEFUOTFDX1VTX1BBUl9NQVJLIEVRVSggMHgzIDw8IDkgKTsNCi0tICggREJHVSApIFBhcml0eSBmb3JjZWQgdG8gMSAoIE1hcmsgKQ0KLSAgICBBVDkxQ19VU19QQVJfTk9ORSBFUVUoIDB4NCA8PCA5ICk7DQotLSAoIERCR1UgKSBObyBQYXJpdHkNCi0gICAgQVQ5MUNfVVNfUEFSX01VTFRJX0RST1AgRVFVKCAweDYgPDwgOSApOw0KLS0gKCBEQkdVICkgTXVsdGkgLSBkcm9wIG1vZGUNCi0gICAgQVQ5MUNfVVNfQ0hNT0RFIEVRVSggMHgzIDw8IDE0ICk7DQotLSAoIERCR1UgKSBDaGFubmVsIE1vZGUNCi0gICAgQVQ5MUNfVVNfQ0hNT0RFX05PUk1BTCBFUVUoIDB4MCA8PCAxNCApOw0KLS0gKCBEQkdVICkgTm9ybWFsIE1vZGU6IFRoZSBVU0FSVCBjaGFubmVsIG9wZXJhdGVzIGFzIGFuIFJYIC8gVFggVVNBUlQuDQotICAgICAgIEFUOTFDX1VTX0NITU9ERV9BVVRPIEVRVSggMHgxIDw8IDE0ICk7DQotLSAoIERCR1UgKSBBdXRvbWF0aWMgRWNobzogUmVjZWl2ZXIgRGF0YSBJbnB1dCBpcyBjb25uZWN0ZWQgdG8gdGhlIFRYRCBwaW4uDQotICAgICAgIEFUOTFDX1VTX0NITU9ERV9MT0NBTCBFUVUoIDB4MiA8PCAxNCApOw0KLS0gKCBEQkdVICkgTG9jYWwgTG9vcGJhY2s6IFRyYW5zbWl0dGVyIE91dHB1dCBTaWduYWwgaXMgY29ubmVjdGVkIHRvIFJlY2VpdmVyIElucHV0IFNpZ25hbC4NCi0gICAgICAgQVQ5MUNfVVNfQ0hNT0RFX1JFTU9URSBFUVUoIDB4MyA8PCAxNCApOw0KLS0gKCBEQkdVICkgUmVtb3RlIExvb3BiYWNrOiBSWEQgcGluIGlzIGludGVybmFsbHkgY29ubmVjdGVkIHRvIFRYRCBwaW4uDQotLyogLSAtLS0tLS0tLSBEQkdVX0lFUiA6IChEQkdVIE9mZnNldDogMHg4KSBEZWJ1ZyBVbml0IEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0gICAgICAgQVQ5MUNfVVNfUlhSRFkgRVFVKCAweDEgPDwgMCApOw0KLS0gKCBEQkdVICkgUlhSRFkgSW50ZXJydXB0DQotICAgIEFUOTFDX1VTX1RYUkRZIEVRVSggMHgxIDw8IDEgKTsNCi0tICggREJHVSApIFRYUkRZIEludGVycnVwdA0KLSAgICBBVDkxQ19VU19FTkRSWCBFUVUoIDB4MSA8PCAzICk7DQotLSAoIERCR1UgKSBFbmQgb2YgUmVjZWl2ZSBUcmFuc2ZlciBJbnRlcnJ1cHQNCi0gICAgQVQ5MUNfVVNfRU5EVFggRVFVKCAweDEgPDwgNCApOw0KLS0gKCBEQkdVICkgRW5kIG9mIFRyYW5zbWl0IEludGVycnVwdA0KLSAgICBBVDkxQ19VU19PVlJFIEVRVSggMHgxIDw8IDUgKTsNCi0tICggREJHVSApIE92ZXJydW4gSW50ZXJydXB0DQotICAgIEFUOTFDX1VTX0ZSQU1FIEVRVSggMHgxIDw8IDYgKTsNCi0tICggREJHVSApIEZyYW1pbmcgRXJyb3IgSW50ZXJydXB0DQotICAgIEFUOTFDX1VTX1BBUkUgRVFVKCAweDEgPDwgNyApOw0KLS0gKCBEQkdVICkgUGFyaXR5IEVycm9yIEludGVycnVwdA0KLSAgICBBVDkxQ19VU19UWEVNUFRZIEVRVSggMHgxIDw8IDkgKTsNCi0tICggREJHVSApIFRYRU1QVFkgSW50ZXJydXB0DQotICAgIEFUOTFDX1VTX1RYQlVGRSBFUVUoIDB4MSA8PCAxMSApOw0KLS0gKCBEQkdVICkgVFhCVUZFIEludGVycnVwdA0KLSAgICBBVDkxQ19VU19SWEJVRkYgRVFVKCAweDEgPDwgMTIgKTsNCi0tICggREJHVSApIFJYQlVGRiBJbnRlcnJ1cHQNCi0gICAgQVQ5MUNfVVNfQ09NTV9UWCBFUVUoIDB4MSA8PCAzMCApOw0KLS0gKCBEQkdVICkgQ09NTV9UWCBJbnRlcnJ1cHQNCi0gICAgQVQ5MUNfVVNfQ09NTV9SWCBFUVUoIDB4MSA8PCAzMSApOw0KLS0gKCBEQkdVICkgQ09NTV9SWCBJbnRlcnJ1cHQNCi0vKiAtIC0tLS0tLS0tIERCR1VfSURSIDogKERCR1UgT2Zmc2V0OiAweGMpIERlYnVnIFVuaXQgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtIC0tLS0tLS0tIERCR1VfSU1SIDogKERCR1UgT2Zmc2V0OiAweDEwKSBEZWJ1ZyBVbml0IEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLSAtLS0tLS0tLSBEQkdVX0NTUiA6IChEQkdVIE9mZnNldDogMHgxNCkgRGVidWcgVW5pdCBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0gLS0tLS0tLS0gREJHVV9GTlRSIDogKERCR1UgT2Zmc2V0OiAweDQ4KSBEZWJ1ZyBVbml0IEZPUkNFX05UUlNUIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotICAgIEFUOTFDX1VTX0ZPUkNFX05UUlNUIEVRVSggMHgxIDw8IDAgKTsNCi0tICggREJHVSApIEZvcmNlIE5UUlNUIGluIEpUQUcNCisvLyAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gLSAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBEZWJ1ZyBVbml0DQorLy8gLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vIC0gLS0tLS0tLS0gREJHVV9DUiA6IChEQkdVIE9mZnNldDogMHgwKSBEZWJ1ZyBVbml0IENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfVVNfUlNUUlggICAgICAgICAgICBFUVUgKDB4MSA8PCAgMikgOy0gKERCR1UpIFJlc2V0IFJlY2VpdmVyDQorQVQ5MUNfVVNfUlNUVFggICAgICAgICAgICBFUVUgKDB4MSA8PCAgMykgOy0gKERCR1UpIFJlc2V0IFRyYW5zbWl0dGVyDQorQVQ5MUNfVVNfUlhFTiAgICAgICAgICAgICBFUVUgKDB4MSA8PCAgNCkgOy0gKERCR1UpIFJlY2VpdmVyIEVuYWJsZQ0KK0FUOTFDX1VTX1JYRElTICAgICAgICAgICAgRVFVICgweDEgPDwgIDUpIDstIChEQkdVKSBSZWNlaXZlciBEaXNhYmxlDQorQVQ5MUNfVVNfVFhFTiAgICAgICAgICAgICBFUVUgKDB4MSA8PCAgNikgOy0gKERCR1UpIFRyYW5zbWl0dGVyIEVuYWJsZQ0KK0FUOTFDX1VTX1RYRElTICAgICAgICAgICAgRVFVICgweDEgPDwgIDcpIDstIChEQkdVKSBUcmFuc21pdHRlciBEaXNhYmxlDQorQVQ5MUNfVVNfUlNUU1RBICAgICAgICAgICBFUVUgKDB4MSA8PCAgOCkgOy0gKERCR1UpIFJlc2V0IFN0YXR1cyBCaXRzDQorLy8gLSAtLS0tLS0tLSBEQkdVX01SIDogKERCR1UgT2Zmc2V0OiAweDQpIERlYnVnIFVuaXQgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19VU19QQVIgICAgICAgICAgICAgIEVRVSAoMHg3IDw8ICA5KSA7LSAoREJHVSkgUGFyaXR5IHR5cGUNCitBVDkxQ19VU19QQVJfRVZFTiAgICAgICAgIEVRVSAoMHgwIDw8ICA5KSA7LSAoREJHVSkgRXZlbiBQYXJpdHkNCitBVDkxQ19VU19QQVJfT0REICAgICAgICAgIEVRVSAoMHgxIDw8ICA5KSA7LSAoREJHVSkgT2RkIFBhcml0eQ0KK0FUOTFDX1VTX1BBUl9TUEFDRSAgICAgICAgRVFVICgweDIgPDwgIDkpIDstIChEQkdVKSBQYXJpdHkgZm9yY2VkIHRvIDAgKFNwYWNlKQ0KK0FUOTFDX1VTX1BBUl9NQVJLICAgICAgICAgRVFVICgweDMgPDwgIDkpIDstIChEQkdVKSBQYXJpdHkgZm9yY2VkIHRvIDEgKE1hcmspDQorQVQ5MUNfVVNfUEFSX05PTkUgICAgICAgICBFUVUgKDB4NCA8PCAgOSkgOy0gKERCR1UpIE5vIFBhcml0eQ0KK0FUOTFDX1VTX1BBUl9NVUxUSV9EUk9QICAgRVFVICgweDYgPDwgIDkpIDstIChEQkdVKSBNdWx0aS1kcm9wIG1vZGUNCitBVDkxQ19VU19DSE1PREUgICAgICAgICAgIEVRVSAoMHgzIDw8IDE0KSA7LSAoREJHVSkgQ2hhbm5lbCBNb2RlDQorQVQ5MUNfVVNfQ0hNT0RFX05PUk1BTCAgICBFUVUgKDB4MCA8PCAxNCkgOy0gKERCR1UpIE5vcm1hbCBNb2RlOiBUaGUgVVNBUlQgY2hhbm5lbCBvcGVyYXRlcyBhcyBhbiBSWC9UWCBVU0FSVC4NCitBVDkxQ19VU19DSE1PREVfQVVUTyAgICAgIEVRVSAoMHgxIDw8IDE0KSA7LSAoREJHVSkgQXV0b21hdGljIEVjaG86IFJlY2VpdmVyIERhdGEgSW5wdXQgaXMgY29ubmVjdGVkIHRvIHRoZSBUWEQgcGluLg0KK0FUOTFDX1VTX0NITU9ERV9MT0NBTCAgICAgRVFVICgweDIgPDwgMTQpIDstIChEQkdVKSBMb2NhbCBMb29wYmFjazogVHJhbnNtaXR0ZXIgT3V0cHV0IFNpZ25hbCBpcyBjb25uZWN0ZWQgdG8gUmVjZWl2ZXIgSW5wdXQgU2lnbmFsLg0KK0FUOTFDX1VTX0NITU9ERV9SRU1PVEUgICAgRVFVICgweDMgPDwgMTQpIDstIChEQkdVKSBSZW1vdGUgTG9vcGJhY2s6IFJYRCBwaW4gaXMgaW50ZXJuYWxseSBjb25uZWN0ZWQgdG8gVFhEIHBpbi4NCisvLyAtIC0tLS0tLS0tIERCR1VfSUVSIDogKERCR1UgT2Zmc2V0OiAweDgpIERlYnVnIFVuaXQgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19VU19SWFJEWSAgICAgICAgICAgIEVRVSAoMHgxIDw8ICAwKSA7LSAoREJHVSkgUlhSRFkgSW50ZXJydXB0DQorQVQ5MUNfVVNfVFhSRFkgICAgICAgICAgICBFUVUgKDB4MSA8PCAgMSkgOy0gKERCR1UpIFRYUkRZIEludGVycnVwdA0KK0FUOTFDX1VTX0VORFJYICAgICAgICAgICAgRVFVICgweDEgPDwgIDMpIDstIChEQkdVKSBFbmQgb2YgUmVjZWl2ZSBUcmFuc2ZlciBJbnRlcnJ1cHQNCitBVDkxQ19VU19FTkRUWCAgICAgICAgICAgIEVRVSAoMHgxIDw8ICA0KSA7LSAoREJHVSkgRW5kIG9mIFRyYW5zbWl0IEludGVycnVwdA0KK0FUOTFDX1VTX09WUkUgICAgICAgICAgICAgRVFVICgweDEgPDwgIDUpIDstIChEQkdVKSBPdmVycnVuIEludGVycnVwdA0KK0FUOTFDX1VTX0ZSQU1FICAgICAgICAgICAgRVFVICgweDEgPDwgIDYpIDstIChEQkdVKSBGcmFtaW5nIEVycm9yIEludGVycnVwdA0KK0FUOTFDX1VTX1BBUkUgICAgICAgICAgICAgRVFVICgweDEgPDwgIDcpIDstIChEQkdVKSBQYXJpdHkgRXJyb3IgSW50ZXJydXB0DQorQVQ5MUNfVVNfVFhFTVBUWSAgICAgICAgICBFUVUgKDB4MSA8PCAgOSkgOy0gKERCR1UpIFRYRU1QVFkgSW50ZXJydXB0DQorQVQ5MUNfVVNfVFhCVUZFICAgICAgICAgICBFUVUgKDB4MSA8PCAxMSkgOy0gKERCR1UpIFRYQlVGRSBJbnRlcnJ1cHQNCitBVDkxQ19VU19SWEJVRkYgICAgICAgICAgIEVRVSAoMHgxIDw8IDEyKSA7LSAoREJHVSkgUlhCVUZGIEludGVycnVwdA0KK0FUOTFDX1VTX0NPTU1fVFggICAgICAgICAgRVFVICgweDEgPDwgMzApIDstIChEQkdVKSBDT01NX1RYIEludGVycnVwdA0KK0FUOTFDX1VTX0NPTU1fUlggICAgICAgICAgRVFVICgweDEgPDwgMzEpIDstIChEQkdVKSBDT01NX1JYIEludGVycnVwdA0KKy8vIC0gLS0tLS0tLS0gREJHVV9JRFIgOiAoREJHVSBPZmZzZXQ6IDB4YykgRGVidWcgVW5pdCBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtIC0tLS0tLS0tIERCR1VfSU1SIDogKERCR1UgT2Zmc2V0OiAweDEwKSBEZWJ1ZyBVbml0IEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0gLS0tLS0tLS0gREJHVV9DU1IgOiAoREJHVSBPZmZzZXQ6IDB4MTQpIERlYnVnIFVuaXQgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLSAtLS0tLS0tLSBEQkdVX0ZOVFIgOiAoREJHVSBPZmZzZXQ6IDB4NDgpIERlYnVnIFVuaXQgRk9SQ0VfTlRSU1QgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfVVNfRk9SQ0VfTlRSU1QgICAgICBFUVUgKDB4MSA8PCAgMCkgOy0gKERCR1UpIEZvcmNlIE5UUlNUIGluIEpUQUcNCiANCi0vKiAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogLSAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQYXJhbGxlbCBJbnB1dCBPdXRwdXQgQ29udHJvbGVyICovDQotLyogLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKy8vIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAtICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFBhcmFsbGVsIElucHV0IE91dHB1dCBDb250cm9sZXINCisvLyAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogDQotLyogLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qIC0gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQ2xvY2sgR2VuZXJhdG9yIENvbnRyb2xlciAqLw0KLS8qIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAtIC0tLS0tLS0tIENLR1JfTU9SIDogKENLR1IgT2Zmc2V0OiAweDApIE1haW4gT3NjaWxsYXRvciBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSAgICBBVDkxQ19DS0dSX01PU0NFTiBFUVUoIDB4MSA8PCAwICk7DQotLSAoIENLR1IgKSBNYWluIE9zY2lsbGF0b3IgRW5hYmxlDQotICAgIEFUOTFDX0NLR1JfT1NDQllQQVNTIEVRVSggMHgxIDw8IDEgKTsNCi0tICggQ0tHUiApIE1haW4gT3NjaWxsYXRvciBCeXBhc3MNCi0gICAgQVQ5MUNfQ0tHUl9PU0NPVU5UIEVRVSggMHhGRiA8PCA4ICk7DQotLSAoIENLR1IgKSBNYWluIE9zY2lsbGF0b3IgU3RhcnQgLSB1cCBUaW1lDQotLyogLSAtLS0tLS0tLSBDS0dSX01DRlIgOiAoQ0tHUiBPZmZzZXQ6IDB4NCkgTWFpbiBDbG9jayBGcmVxdWVuY3kgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0gICAgQVQ5MUNfQ0tHUl9NQUlORiBFUVUoIDB4RkZGRiA8PCAwICk7DQotLSAoIENLR1IgKSBNYWluIENsb2NrIEZyZXF1ZW5jeQ0KLSAgICBBVDkxQ19DS0dSX01BSU5SRFkgRVFVKCAweDEgPDwgMTYgKTsNCi0tICggQ0tHUiApIE1haW4gQ2xvY2sgUmVhZHkNCi0vKiAtIC0tLS0tLS0tIENLR1JfUExMUiA6IChDS0dSIE9mZnNldDogMHhjKSBQTEwgQiBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSAgICBBVDkxQ19DS0dSX0RJViBFUVUoIDB4RkYgPDwgMCApOw0KLS0gKCBDS0dSICkgRGl2aWRlciBTZWxlY3RlZA0KLSAgICBBVDkxQ19DS0dSX0RJVl8wIEVRVSggMHgwICk7DQotLSAoIENLR1IgKSBEaXZpZGVyIG91dHB1dCBpcyAwDQotICAgIEFUOTFDX0NLR1JfRElWX0JZUEFTUyBFUVUoIDB4MSApOw0KLS0gKCBDS0dSICkgRGl2aWRlciBpcyBieXBhc3NlZA0KLSAgICBBVDkxQ19DS0dSX1BMTENPVU5UIEVRVSggMHgzRiA8PCA4ICk7DQotLSAoIENLR1IgKSBQTEwgQ291bnRlcg0KLSAgICBBVDkxQ19DS0dSX09VVCBFUVUoIDB4MyA8PCAxNCApOw0KLS0gKCBDS0dSICkgUExMIE91dHB1dCBGcmVxdWVuY3kgUmFuZ2UNCi0gICAgQVQ5MUNfQ0tHUl9PVVRfMCBFUVUoIDB4MCA8PCAxNCApOw0KLS0gKCBDS0dSICkgUGxlYXNlIHJlZmVyIHRvIHRoZSBQTEwgZGF0YXNoZWV0DQotICAgIEFUOTFDX0NLR1JfT1VUXzEgRVFVKCAweDEgPDwgMTQgKTsNCi0tICggQ0tHUiApIFBsZWFzZSByZWZlciB0byB0aGUgUExMIGRhdGFzaGVldA0KLSAgICBBVDkxQ19DS0dSX09VVF8yIEVRVSggMHgyIDw8IDE0ICk7DQotLSAoIENLR1IgKSBQbGVhc2UgcmVmZXIgdG8gdGhlIFBMTCBkYXRhc2hlZXQNCi0gICAgQVQ5MUNfQ0tHUl9PVVRfMyBFUVUoIDB4MyA8PCAxNCApOw0KLS0gKCBDS0dSICkgUGxlYXNlIHJlZmVyIHRvIHRoZSBQTEwgZGF0YXNoZWV0DQotICAgIEFUOTFDX0NLR1JfTVVMIEVRVSggMHg3RkYgPDwgMTYgKTsNCi0tICggQ0tHUiApIFBMTCBNdWx0aXBsaWVyDQotICAgIEFUOTFDX0NLR1JfVVNCRElWIEVRVSggMHgzIDw8IDI4ICk7DQotLSAoIENLR1IgKSBEaXZpZGVyIGZvciBVU0IgQ2xvY2tzDQotICAgIEFUOTFDX0NLR1JfVVNCRElWXzAgRVFVKCAweDAgPDwgMjggKTsNCi0tICggQ0tHUiApIERpdmlkZXIgb3V0cHV0IGlzIFBMTCBjbG9jayBvdXRwdXQNCi0gICAgQVQ5MUNfQ0tHUl9VU0JESVZfMSBFUVUoIDB4MSA8PCAyOCApOw0KLS0gKCBDS0dSICkgRGl2aWRlciBvdXRwdXQgaXMgUExMIGNsb2NrIG91dHB1dCBkaXZpZGVkIGJ5IDINCi0gICAgQVQ5MUNfQ0tHUl9VU0JESVZfMiBFUVUoIDB4MiA8PCAyOCApOw0KLS0gKCBDS0dSICkgRGl2aWRlciBvdXRwdXQgaXMgUExMIGNsb2NrIG91dHB1dCBkaXZpZGVkIGJ5IDQNCisvLyAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gLSAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBDbG9jayBHZW5lcmF0b3IgQ29udHJvbGVyDQorLy8gLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vIC0gLS0tLS0tLS0gQ0tHUl9NT1IgOiAoQ0tHUiBPZmZzZXQ6IDB4MCkgTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX0NLR1JfTU9TQ0VOICAgICAgICAgRVFVICgweDEgPDwgIDApIDstIChDS0dSKSBNYWluIE9zY2lsbGF0b3IgRW5hYmxlDQorQVQ5MUNfQ0tHUl9PU0NCWVBBU1MgICAgICBFUVUgKDB4MSA8PCAgMSkgOy0gKENLR1IpIE1haW4gT3NjaWxsYXRvciBCeXBhc3MNCitBVDkxQ19DS0dSX09TQ09VTlQgICAgICAgIEVRVSAoMHhGRiA8PCAgOCkgOy0gKENLR1IpIE1haW4gT3NjaWxsYXRvciBTdGFydC11cCBUaW1lDQorLy8gLSAtLS0tLS0tLSBDS0dSX01DRlIgOiAoQ0tHUiBPZmZzZXQ6IDB4NCkgTWFpbiBDbG9jayBGcmVxdWVuY3kgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfQ0tHUl9NQUlORiAgICAgICAgICBFUVUgKDB4RkZGRiA8PCAgMCkgOy0gKENLR1IpIE1haW4gQ2xvY2sgRnJlcXVlbmN5DQorQVQ5MUNfQ0tHUl9NQUlOUkRZICAgICAgICBFUVUgKDB4MSA8PCAxNikgOy0gKENLR1IpIE1haW4gQ2xvY2sgUmVhZHkNCisvLyAtIC0tLS0tLS0tIENLR1JfUExMUiA6IChDS0dSIE9mZnNldDogMHhjKSBQTEwgQiBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19DS0dSX0RJViAgICAgICAgICAgIEVRVSAoMHhGRiA8PCAgMCkgOy0gKENLR1IpIERpdmlkZXIgU2VsZWN0ZWQNCitBVDkxQ19DS0dSX0RJVl8wICAgICAgICAgIEVRVSAoMHgwKSA7LSAoQ0tHUikgRGl2aWRlciBvdXRwdXQgaXMgMA0KK0FUOTFDX0NLR1JfRElWX0JZUEFTUyAgICAgRVFVICgweDEpIDstIChDS0dSKSBEaXZpZGVyIGlzIGJ5cGFzc2VkDQorQVQ5MUNfQ0tHUl9QTExDT1VOVCAgICAgICBFUVUgKDB4M0YgPDwgIDgpIDstIChDS0dSKSBQTEwgQ291bnRlcg0KK0FUOTFDX0NLR1JfT1VUICAgICAgICAgICAgRVFVICgweDMgPDwgMTQpIDstIChDS0dSKSBQTEwgT3V0cHV0IEZyZXF1ZW5jeSBSYW5nZQ0KK0FUOTFDX0NLR1JfT1VUXzAgICAgICAgICAgRVFVICgweDAgPDwgMTQpIDstIChDS0dSKSBQbGVhc2UgcmVmZXIgdG8gdGhlIFBMTCBkYXRhc2hlZXQNCitBVDkxQ19DS0dSX09VVF8xICAgICAgICAgIEVRVSAoMHgxIDw8IDE0KSA7LSAoQ0tHUikgUGxlYXNlIHJlZmVyIHRvIHRoZSBQTEwgZGF0YXNoZWV0DQorQVQ5MUNfQ0tHUl9PVVRfMiAgICAgICAgICBFUVUgKDB4MiA8PCAxNCkgOy0gKENLR1IpIFBsZWFzZSByZWZlciB0byB0aGUgUExMIGRhdGFzaGVldA0KK0FUOTFDX0NLR1JfT1VUXzMgICAgICAgICAgRVFVICgweDMgPDwgMTQpIDstIChDS0dSKSBQbGVhc2UgcmVmZXIgdG8gdGhlIFBMTCBkYXRhc2hlZXQNCitBVDkxQ19DS0dSX01VTCAgICAgICAgICAgIEVRVSAoMHg3RkYgPDwgMTYpIDstIChDS0dSKSBQTEwgTXVsdGlwbGllcg0KK0FUOTFDX0NLR1JfVVNCRElWICAgICAgICAgRVFVICgweDMgPDwgMjgpIDstIChDS0dSKSBEaXZpZGVyIGZvciBVU0IgQ2xvY2tzDQorQVQ5MUNfQ0tHUl9VU0JESVZfMCAgICAgICBFUVUgKDB4MCA8PCAyOCkgOy0gKENLR1IpIERpdmlkZXIgb3V0cHV0IGlzIFBMTCBjbG9jayBvdXRwdXQNCitBVDkxQ19DS0dSX1VTQkRJVl8xICAgICAgIEVRVSAoMHgxIDw8IDI4KSA7LSAoQ0tHUikgRGl2aWRlciBvdXRwdXQgaXMgUExMIGNsb2NrIG91dHB1dCBkaXZpZGVkIGJ5IDINCitBVDkxQ19DS0dSX1VTQkRJVl8yICAgICAgIEVRVSAoMHgyIDw8IDI4KSA7LSAoQ0tHUikgRGl2aWRlciBvdXRwdXQgaXMgUExMIGNsb2NrIG91dHB1dCBkaXZpZGVkIGJ5IDQNCiANCi0vKiAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogLSAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQb3dlciBNYW5hZ2VtZW50IENvbnRyb2xlciAqLw0KLS8qIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAtIC0tLS0tLS0tIFBNQ19TQ0VSIDogKFBNQyBPZmZzZXQ6IDB4MCkgU3lzdGVtIENsb2NrIEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSAgICBBVDkxQ19QTUNfUENLIEVRVSggMHgxIDw8IDAgKTsNCi0tICggUE1DICkgUHJvY2Vzc29yIENsb2NrDQotICAgIEFUOTFDX1BNQ19VRFAgRVFVKCAweDEgPDwgNyApOw0KLS0gKCBQTUMgKSBVU0IgRGV2aWNlIFBvcnQgQ2xvY2sNCi0gICAgQVQ5MUNfUE1DX1BDSzAgRVFVKCAweDEgPDwgOCApOw0KLS0gKCBQTUMgKSBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0DQotICAgIEFUOTFDX1BNQ19QQ0sxIEVRVSggMHgxIDw8IDkgKTsNCi0tICggUE1DICkgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dA0KLSAgICBBVDkxQ19QTUNfUENLMiBFUVUoIDB4MSA8PCAxMCApOw0KLS0gKCBQTUMgKSBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0DQotICAgIEFUOTFDX1BNQ19QQ0szIEVRVSggMHgxIDw8IDExICk7DQotLSAoIFBNQyApIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQNCi0vKiAtIC0tLS0tLS0tIFBNQ19TQ0RSIDogKFBNQyBPZmZzZXQ6IDB4NCkgU3lzdGVtIENsb2NrIERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtIC0tLS0tLS0tIFBNQ19TQ1NSIDogKFBNQyBPZmZzZXQ6IDB4OCkgU3lzdGVtIENsb2NrIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0gLS0tLS0tLS0gQ0tHUl9NT1IgOiAoUE1DIE9mZnNldDogMHgyMCkgTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLSAtLS0tLS0tLSBDS0dSX01DRlIgOiAoUE1DIE9mZnNldDogMHgyNCkgTWFpbiBDbG9jayBGcmVxdWVuY3kgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtIC0tLS0tLS0tIENLR1JfUExMUiA6IChQTUMgT2Zmc2V0OiAweDJjKSBQTEwgQiBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0gLS0tLS0tLS0gUE1DX01DS1IgOiAoUE1DIE9mZnNldDogMHgzMCkgTWFzdGVyIENsb2NrIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotICAgIEFUOTFDX1BNQ19DU1MgRVFVKCAweDMgPDwgMCApOw0KLS0gKCBQTUMgKSBQcm9ncmFtbWFibGUgQ2xvY2sgU2VsZWN0aW9uDQotICAgIEFUOTFDX1BNQ19DU1NfU0xPV19DTEsgRVFVKCAweDAgKTsNCi0tICggUE1DICkgU2xvdyBDbG9jayBpcyBzZWxlY3RlZA0KLSAgICBBVDkxQ19QTUNfQ1NTX01BSU5fQ0xLIEVRVSggMHgxICk7DQotLSAoIFBNQyApIE1haW4gQ2xvY2sgaXMgc2VsZWN0ZWQNCi0gICAgQVQ5MUNfUE1DX0NTU19QTExfQ0xLIEVRVSggMHgzICk7DQotLSAoIFBNQyApIENsb2NrIGZyb20gUExMIGlzIHNlbGVjdGVkDQotICAgIEFUOTFDX1BNQ19QUkVTIEVRVSggMHg3IDw8IDIgKTsNCi0tICggUE1DICkgUHJvZ3JhbW1hYmxlIENsb2NrIFByZXNjYWxlcg0KLSAgICBBVDkxQ19QTUNfUFJFU19DTEsgRVFVKCAweDAgPDwgMiApOw0KLS0gKCBQTUMgKSBTZWxlY3RlZCBjbG9jaw0KLSAgICBBVDkxQ19QTUNfUFJFU19DTEtfMiBFUVUoIDB4MSA8PCAyICk7DQotLSAoIFBNQyApIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgMg0KLSAgICBBVDkxQ19QTUNfUFJFU19DTEtfNCBFUVUoIDB4MiA8PCAyICk7DQotLSAoIFBNQyApIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgNA0KLSAgICBBVDkxQ19QTUNfUFJFU19DTEtfOCBFUVUoIDB4MyA8PCAyICk7DQotLSAoIFBNQyApIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgOA0KLSAgICBBVDkxQ19QTUNfUFJFU19DTEtfMTYgRVFVKCAweDQgPDwgMiApOw0KLS0gKCBQTUMgKSBTZWxlY3RlZCBjbG9jayBkaXZpZGVkIGJ5IDE2DQotICAgIEFUOTFDX1BNQ19QUkVTX0NMS18zMiBFUVUoIDB4NSA8PCAyICk7DQotLSAoIFBNQyApIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgMzINCi0gICAgQVQ5MUNfUE1DX1BSRVNfQ0xLXzY0IEVRVSggMHg2IDw8IDIgKTsNCi0tICggUE1DICkgU2VsZWN0ZWQgY2xvY2sgZGl2aWRlZCBieSA2NA0KLS8qIC0gLS0tLS0tLS0gUE1DX1BDS1IgOiAoUE1DIE9mZnNldDogMHg0MCkgUHJvZ3JhbW1hYmxlIENsb2NrIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLSAtLS0tLS0tLSBQTUNfSUVSIDogKFBNQyBPZmZzZXQ6IDB4NjApIFBNQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotICAgIEFUOTFDX1BNQ19NT1NDUyBFUVUoIDB4MSA8PCAwICk7DQotLSAoIFBNQyApIE1PU0MgU3RhdHVzIC8gRW5hYmxlIC8gRGlzYWJsZSAvIE1hc2sNCi0gICAgQVQ5MUNfUE1DX0xPQ0sgRVFVKCAweDEgPDwgMiApOw0KLS0gKCBQTUMgKSBQTEwgU3RhdHVzIC8gRW5hYmxlIC8gRGlzYWJsZSAvIE1hc2sNCi0gICAgQVQ5MUNfUE1DX01DS1JEWSBFUVUoIDB4MSA8PCAzICk7DQotLSAoIFBNQyApIE1DS19SRFkgU3RhdHVzIC8gRW5hYmxlIC8gRGlzYWJsZSAvIE1hc2sNCi0gICAgQVQ5MUNfUE1DX1BDSzBSRFkgRVFVKCAweDEgPDwgOCApOw0KLS0gKCBQTUMgKSBQQ0swX1JEWSBTdGF0dXMgLyBFbmFibGUgLyBEaXNhYmxlIC8gTWFzaw0KLSAgICBBVDkxQ19QTUNfUENLMVJEWSBFUVUoIDB4MSA8PCA5ICk7DQotLSAoIFBNQyApIFBDSzFfUkRZIFN0YXR1cyAvIEVuYWJsZSAvIERpc2FibGUgLyBNYXNrDQotICAgIEFUOTFDX1BNQ19QQ0syUkRZIEVRVSggMHgxIDw8IDEwICk7DQotLSAoIFBNQyApIFBDSzJfUkRZIFN0YXR1cyAvIEVuYWJsZSAvIERpc2FibGUgLyBNYXNrDQotICAgIEFUOTFDX1BNQ19QQ0szUkRZIEVRVSggMHgxIDw8IDExICk7DQotLSAoIFBNQyApIFBDSzNfUkRZIFN0YXR1cyAvIEVuYWJsZSAvIERpc2FibGUgLyBNYXNrDQotLyogLSAtLS0tLS0tLSBQTUNfSURSIDogKFBNQyBPZmZzZXQ6IDB4NjQpIFBNQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0gLS0tLS0tLS0gUE1DX1NSIDogKFBNQyBPZmZzZXQ6IDB4NjgpIFBNQyBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtIC0tLS0tLS0tIFBNQ19JTVIgOiAoUE1DIE9mZnNldDogMHg2YykgUE1DIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tICovDQorLy8gLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vIC0gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUG93ZXIgTWFuYWdlbWVudCBDb250cm9sZXINCisvLyAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gLSAtLS0tLS0tLSBQTUNfU0NFUiA6IChQTUMgT2Zmc2V0OiAweDApIFN5c3RlbSBDbG9jayBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfUE1DX1BDSyAgICAgICAgICAgICBFUVUgKDB4MSA8PCAgMCkgOy0gKFBNQykgUHJvY2Vzc29yIENsb2NrDQorQVQ5MUNfUE1DX1VEUCAgICAgICAgICAgICBFUVUgKDB4MSA8PCAgNykgOy0gKFBNQykgVVNCIERldmljZSBQb3J0IENsb2NrDQorQVQ5MUNfUE1DX1BDSzAgICAgICAgICAgICBFUVUgKDB4MSA8PCAgOCkgOy0gKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dA0KK0FUOTFDX1BNQ19QQ0sxICAgICAgICAgICAgRVFVICgweDEgPDwgIDkpIDstIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQNCitBVDkxQ19QTUNfUENLMiAgICAgICAgICAgIEVRVSAoMHgxIDw8IDEwKSA7LSAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0DQorQVQ5MUNfUE1DX1BDSzMgICAgICAgICAgICBFUVUgKDB4MSA8PCAxMSkgOy0gKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dA0KKy8vIC0gLS0tLS0tLS0gUE1DX1NDRFIgOiAoUE1DIE9mZnNldDogMHg0KSBTeXN0ZW0gQ2xvY2sgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtIC0tLS0tLS0tIFBNQ19TQ1NSIDogKFBNQyBPZmZzZXQ6IDB4OCkgU3lzdGVtIENsb2NrIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtIC0tLS0tLS0tIENLR1JfTU9SIDogKFBNQyBPZmZzZXQ6IDB4MjApIE1haW4gT3NjaWxsYXRvciBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtIC0tLS0tLS0tIENLR1JfTUNGUiA6IChQTUMgT2Zmc2V0OiAweDI0KSBNYWluIENsb2NrIEZyZXF1ZW5jeSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtIC0tLS0tLS0tIENLR1JfUExMUiA6IChQTUMgT2Zmc2V0OiAweDJjKSBQTEwgQiBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtIC0tLS0tLS0tIFBNQ19NQ0tSIDogKFBNQyBPZmZzZXQ6IDB4MzApIE1hc3RlciBDbG9jayBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19QTUNfQ1NTICAgICAgICAgICAgIEVRVSAoMHgzIDw8ICAwKSA7LSAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgU2VsZWN0aW9uDQorQVQ5MUNfUE1DX0NTU19TTE9XX0NMSyAgICBFUVUgKDB4MCkgOy0gKFBNQykgU2xvdyBDbG9jayBpcyBzZWxlY3RlZA0KK0FUOTFDX1BNQ19DU1NfTUFJTl9DTEsgICAgRVFVICgweDEpIDstIChQTUMpIE1haW4gQ2xvY2sgaXMgc2VsZWN0ZWQNCitBVDkxQ19QTUNfQ1NTX1BMTF9DTEsgICAgIEVRVSAoMHgzKSA7LSAoUE1DKSBDbG9jayBmcm9tIFBMTCBpcyBzZWxlY3RlZA0KK0FUOTFDX1BNQ19QUkVTICAgICAgICAgICAgRVFVICgweDcgPDwgIDIpIDstIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBQcmVzY2FsZXINCitBVDkxQ19QTUNfUFJFU19DTEsgICAgICAgIEVRVSAoMHgwIDw8ICAyKSA7LSAoUE1DKSBTZWxlY3RlZCBjbG9jaw0KK0FUOTFDX1BNQ19QUkVTX0NMS18yICAgICAgRVFVICgweDEgPDwgIDIpIDstIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgMg0KK0FUOTFDX1BNQ19QUkVTX0NMS180ICAgICAgRVFVICgweDIgPDwgIDIpIDstIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgNA0KK0FUOTFDX1BNQ19QUkVTX0NMS184ICAgICAgRVFVICgweDMgPDwgIDIpIDstIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgOA0KK0FUOTFDX1BNQ19QUkVTX0NMS18xNiAgICAgRVFVICgweDQgPDwgIDIpIDstIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgMTYNCitBVDkxQ19QTUNfUFJFU19DTEtfMzIgICAgIEVRVSAoMHg1IDw8ICAyKSA7LSAoUE1DKSBTZWxlY3RlZCBjbG9jayBkaXZpZGVkIGJ5IDMyDQorQVQ5MUNfUE1DX1BSRVNfQ0xLXzY0ICAgICBFUVUgKDB4NiA8PCAgMikgOy0gKFBNQykgU2VsZWN0ZWQgY2xvY2sgZGl2aWRlZCBieSA2NA0KKy8vIC0gLS0tLS0tLS0gUE1DX1BDS1IgOiAoUE1DIE9mZnNldDogMHg0MCkgUHJvZ3JhbW1hYmxlIENsb2NrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0gLS0tLS0tLS0gUE1DX0lFUiA6IChQTUMgT2Zmc2V0OiAweDYwKSBQTUMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19QTUNfTU9TQ1MgICAgICAgICAgIEVRVSAoMHgxIDw8ICAwKSA7LSAoUE1DKSBNT1NDIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrDQorQVQ5MUNfUE1DX0xPQ0sgICAgICAgICAgICBFUVUgKDB4MSA8PCAgMikgOy0gKFBNQykgUExMIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrDQorQVQ5MUNfUE1DX01DS1JEWSAgICAgICAgICBFUVUgKDB4MSA8PCAgMykgOy0gKFBNQykgTUNLX1JEWSBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzaw0KK0FUOTFDX1BNQ19QQ0swUkRZICAgICAgICAgRVFVICgweDEgPDwgIDgpIDstIChQTUMpIFBDSzBfUkRZIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrDQorQVQ5MUNfUE1DX1BDSzFSRFkgICAgICAgICBFUVUgKDB4MSA8PCAgOSkgOy0gKFBNQykgUENLMV9SRFkgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sNCitBVDkxQ19QTUNfUENLMlJEWSAgICAgICAgIEVRVSAoMHgxIDw8IDEwKSA7LSAoUE1DKSBQQ0syX1JEWSBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzaw0KK0FUOTFDX1BNQ19QQ0szUkRZICAgICAgICAgRVFVICgweDEgPDwgMTEpIDstIChQTUMpIFBDSzNfUkRZIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrDQorLy8gLSAtLS0tLS0tLSBQTUNfSURSIDogKFBNQyBPZmZzZXQ6IDB4NjQpIFBNQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtIC0tLS0tLS0tIFBNQ19TUiA6IChQTUMgT2Zmc2V0OiAweDY4KSBQTUMgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0gLS0tLS0tLS0gUE1DX0lNUiA6IChQTUMgT2Zmc2V0OiAweDZjKSBQTUMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQogDQotLyogLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qIC0gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUmVzZXQgQ29udHJvbGxlciBJbnRlcmZhY2UgKi8NCi0vKiAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogLSAtLS0tLS0tLSBSU1RDX1JDUiA6IChSU1RDIE9mZnNldDogMHgwKSBSZXNldCBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotICAgIEFUOTFDX1JTVENfUFJPQ1JTVCBFUVUoIDB4MSA8PCAwICk7DQotLSAoIFJTVEMgKSBQcm9jZXNzb3IgUmVzZXQNCi0gICAgQVQ5MUNfUlNUQ19QRVJSU1QgRVFVKCAweDEgPDwgMiApOw0KLS0gKCBSU1RDICkgUGVyaXBoZXJhbCBSZXNldA0KLSAgICBBVDkxQ19SU1RDX0VYVFJTVCBFUVUoIDB4MSA8PCAzICk7DQotLSAoIFJTVEMgKSBFeHRlcm5hbCBSZXNldA0KLSAgICBBVDkxQ19SU1RDX0tFWSBFUVUoIDB4RkYgPDwgMjQgKTsNCi0tICggUlNUQyApIFBhc3N3b3JkDQotLyogLSAtLS0tLS0tLSBSU1RDX1JTUiA6IChSU1RDIE9mZnNldDogMHg0KSBSZXNldCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0gICAgQVQ5MUNfUlNUQ19VUlNUUyBFUVUoIDB4MSA8PCAwICk7DQotLSAoIFJTVEMgKSBVc2VyIFJlc2V0IFN0YXR1cw0KLSAgICBBVDkxQ19SU1RDX0JPRFNUUyBFUVUoIDB4MSA8PCAxICk7DQotLSAoIFJTVEMgKSBCcm93bm91dCBEZXRlY3Rpb24gU3RhdHVzDQotICAgIEFUOTFDX1JTVENfUlNUVFlQIEVRVSggMHg3IDw8IDggKTsNCi0tICggUlNUQyApIFJlc2V0IFR5cGUNCi0gICAgQVQ5MUNfUlNUQ19SU1RUWVBfUE9XRVJVUCBFUVUoIDB4MCA8PCA4ICk7DQotLSAoIFJTVEMgKSBQb3dlciAtIHVwIFJlc2V0LlZERENPUkUgcmlzaW5nLg0KLSAgICAgICBBVDkxQ19SU1RDX1JTVFRZUF9XQUtFVVAgRVFVKCAweDEgPDwgOCApOw0KLS0gKCBSU1RDICkgV2FrZVVwIFJlc2V0LlZERENPUkUgcmlzaW5nLg0KLSAgICAgICBBVDkxQ19SU1RDX1JTVFRZUF9XQVRDSERPRyBFUVUoIDB4MiA8PCA4ICk7DQotLSAoIFJTVEMgKSBXYXRjaGRvZyBSZXNldC5XYXRjaGRvZyBvdmVyZmxvdyBvY2N1cmVkLg0KLSAgICAgICBBVDkxQ19SU1RDX1JTVFRZUF9TT0ZUV0FSRSBFUVUoIDB4MyA8PCA4ICk7DQotLSAoIFJTVEMgKSBTb2Z0d2FyZSBSZXNldC5Qcm9jZXNzb3IgcmVzZXQgcmVxdWlyZWQgYnkgdGhlIHNvZnR3YXJlLg0KLSAgICAgICBBVDkxQ19SU1RDX1JTVFRZUF9VU0VSIEVRVSggMHg0IDw8IDggKTsNCi0tICggUlNUQyApIFVzZXIgUmVzZXQuTlJTVCBwaW4gZGV0ZWN0ZWQgbG93Lg0KLSAgICAgICBBVDkxQ19SU1RDX1JTVFRZUF9CUk9XTk9VVCBFUVUoIDB4NSA8PCA4ICk7DQotLSAoIFJTVEMgKSBCcm93bm91dCBSZXNldCBvY2N1cmVkLg0KLSAgICAgICBBVDkxQ19SU1RDX05SU1RMIEVRVSggMHgxIDw8IDE2ICk7DQotLSAoIFJTVEMgKSBOUlNUIHBpbiBsZXZlbA0KLSAgICBBVDkxQ19SU1RDX1NSQ01QIEVRVSggMHgxIDw8IDE3ICk7DQotLSAoIFJTVEMgKSBTb2Z0d2FyZSBSZXNldCBDb21tYW5kIGluIFByb2dyZXNzLg0KLS8qIC0gLS0tLS0tLS0gUlNUQ19STVIgOiAoUlNUQyBPZmZzZXQ6IDB4OCkgUmVzZXQgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSAgICAgICBBVDkxQ19SU1RDX1VSU1RFTiBFUVUoIDB4MSA8PCAwICk7DQotLSAoIFJTVEMgKSBVc2VyIFJlc2V0IEVuYWJsZQ0KLSAgICBBVDkxQ19SU1RDX1VSU1RJRU4gRVFVKCAweDEgPDwgNCApOw0KLS0gKCBSU1RDICkgVXNlciBSZXNldCBJbnRlcnJ1cHQgRW5hYmxlDQotICAgIEFUOTFDX1JTVENfRVJTVEwgRVFVKCAweEYgPDwgOCApOw0KLS0gKCBSU1RDICkgVXNlciBSZXNldCBFbmFibGUNCi0gICAgQVQ5MUNfUlNUQ19CT0RJRU4gRVFVKCAweDEgPDwgMTYgKTsNCi0tICggUlNUQyApIEJyb3dub3V0IERldGVjdGlvbiBJbnRlcnJ1cHQgRW5hYmxlDQorLy8gLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vIC0gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUmVzZXQgQ29udHJvbGxlciBJbnRlcmZhY2UNCisvLyAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gLSAtLS0tLS0tLSBSU1RDX1JDUiA6IChSU1RDIE9mZnNldDogMHgwKSBSZXNldCBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX1JTVENfUFJPQ1JTVCAgICAgICAgRVFVICgweDEgPDwgIDApIDstIChSU1RDKSBQcm9jZXNzb3IgUmVzZXQNCitBVDkxQ19SU1RDX1BFUlJTVCAgICAgICAgIEVRVSAoMHgxIDw8ICAyKSA7LSAoUlNUQykgUGVyaXBoZXJhbCBSZXNldA0KK0FUOTFDX1JTVENfRVhUUlNUICAgICAgICAgRVFVICgweDEgPDwgIDMpIDstIChSU1RDKSBFeHRlcm5hbCBSZXNldA0KK0FUOTFDX1JTVENfS0VZICAgICAgICAgICAgRVFVICgweEZGIDw8IDI0KSA7LSAoUlNUQykgUGFzc3dvcmQNCisvLyAtIC0tLS0tLS0tIFJTVENfUlNSIDogKFJTVEMgT2Zmc2V0OiAweDQpIFJlc2V0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19SU1RDX1VSU1RTICAgICAgICAgIEVRVSAoMHgxIDw8ICAwKSA7LSAoUlNUQykgVXNlciBSZXNldCBTdGF0dXMNCitBVDkxQ19SU1RDX0JPRFNUUyAgICAgICAgIEVRVSAoMHgxIDw8ICAxKSA7LSAoUlNUQykgQnJvd25vdXQgRGV0ZWN0aW9uIFN0YXR1cw0KK0FUOTFDX1JTVENfUlNUVFlQICAgICAgICAgRVFVICgweDcgPDwgIDgpIDstIChSU1RDKSBSZXNldCBUeXBlDQorQVQ5MUNfUlNUQ19SU1RUWVBfUE9XRVJVUCBFUVUgKDB4MCA8PCAgOCkgOy0gKFJTVEMpIFBvd2VyLXVwIFJlc2V0LiBWRERDT1JFIHJpc2luZy4NCitBVDkxQ19SU1RDX1JTVFRZUF9XQUtFVVAgIEVRVSAoMHgxIDw8ICA4KSA7LSAoUlNUQykgV2FrZVVwIFJlc2V0LiBWRERDT1JFIHJpc2luZy4NCitBVDkxQ19SU1RDX1JTVFRZUF9XQVRDSERPRyBFUVUgKDB4MiA8PCAgOCkgOy0gKFJTVEMpIFdhdGNoZG9nIFJlc2V0LiBXYXRjaGRvZyBvdmVyZmxvdyBvY2N1cmVkLg0KK0FUOTFDX1JTVENfUlNUVFlQX1NPRlRXQVJFIEVRVSAoMHgzIDw8ICA4KSA7LSAoUlNUQykgU29mdHdhcmUgUmVzZXQuIFByb2Nlc3NvciByZXNldCByZXF1aXJlZCBieSB0aGUgc29mdHdhcmUuDQorQVQ5MUNfUlNUQ19SU1RUWVBfVVNFUiAgICBFUVUgKDB4NCA8PCAgOCkgOy0gKFJTVEMpIFVzZXIgUmVzZXQuIE5SU1QgcGluIGRldGVjdGVkIGxvdy4NCitBVDkxQ19SU1RDX1JTVFRZUF9CUk9XTk9VVCBFUVUgKDB4NSA8PCAgOCkgOy0gKFJTVEMpIEJyb3dub3V0IFJlc2V0IG9jY3VyZWQuDQorQVQ5MUNfUlNUQ19OUlNUTCAgICAgICAgICBFUVUgKDB4MSA8PCAxNikgOy0gKFJTVEMpIE5SU1QgcGluIGxldmVsDQorQVQ5MUNfUlNUQ19TUkNNUCAgICAgICAgICBFUVUgKDB4MSA8PCAxNykgOy0gKFJTVEMpIFNvZnR3YXJlIFJlc2V0IENvbW1hbmQgaW4gUHJvZ3Jlc3MuDQorLy8gLSAtLS0tLS0tLSBSU1RDX1JNUiA6IChSU1RDIE9mZnNldDogMHg4KSBSZXNldCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX1JTVENfVVJTVEVOICAgICAgICAgRVFVICgweDEgPDwgIDApIDstIChSU1RDKSBVc2VyIFJlc2V0IEVuYWJsZQ0KK0FUOTFDX1JTVENfVVJTVElFTiAgICAgICAgRVFVICgweDEgPDwgIDQpIDstIChSU1RDKSBVc2VyIFJlc2V0IEludGVycnVwdCBFbmFibGUNCitBVDkxQ19SU1RDX0VSU1RMICAgICAgICAgIEVRVSAoMHhGIDw8ICA4KSA7LSAoUlNUQykgVXNlciBSZXNldCBFbmFibGUNCitBVDkxQ19SU1RDX0JPRElFTiAgICAgICAgIEVRVSAoMHgxIDw8IDE2KSA7LSAoUlNUQykgQnJvd25vdXQgRGV0ZWN0aW9uIEludGVycnVwdCBFbmFibGUNCiANCi0vKiAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogLSAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBSZWFsIFRpbWUgVGltZXIgQ29udHJvbGxlciBJbnRlcmZhY2UgKi8NCi0vKiAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogLSAtLS0tLS0tLSBSVFRDX1JUTVIgOiAoUlRUQyBPZmZzZXQ6IDB4MCkgUmVhbC10aW1lIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0gICAgQVQ5MUNfUlRUQ19SVFBSRVMgRVFVKCAweEZGRkYgPDwgMCApOw0KLS0gKCBSVFRDICkgUmVhbCAtIHRpbWUgVGltZXIgUHJlc2NhbGVyIFZhbHVlDQotICAgIEFUOTFDX1JUVENfQUxNSUVOIEVRVSggMHgxIDw8IDE2ICk7DQotLSAoIFJUVEMgKSBBbGFybSBJbnRlcnJ1cHQgRW5hYmxlDQotICAgIEFUOTFDX1JUVENfUlRUSU5DSUVOIEVRVSggMHgxIDw8IDE3ICk7DQotLSAoIFJUVEMgKSBSZWFsIFRpbWUgVGltZXIgSW5jcmVtZW50IEludGVycnVwdCBFbmFibGUNCi0gICAgQVQ5MUNfUlRUQ19SVFRSU1QgRVFVKCAweDEgPDwgMTggKTsNCi0tICggUlRUQyApIFJlYWwgVGltZSBUaW1lciBSZXN0YXJ0DQotLyogLSAtLS0tLS0tLSBSVFRDX1JUQVIgOiAoUlRUQyBPZmZzZXQ6IDB4NCkgUmVhbC10aW1lIEFsYXJtIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotICAgIEFUOTFDX1JUVENfQUxNViBFUVUoIDB4MCA8PCAwICk7DQotLSAoIFJUVEMgKSBBbGFybSBWYWx1ZQ0KLS8qIC0gLS0tLS0tLS0gUlRUQ19SVFZSIDogKFJUVEMgT2Zmc2V0OiAweDgpIEN1cnJlbnQgUmVhbC10aW1lIFZhbHVlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotICAgIEFUOTFDX1JUVENfQ1JUViBFUVUoIDB4MCA8PCAwICk7DQotLSAoIFJUVEMgKSBDdXJyZW50IFJlYWwgLSB0aW1lIFZhbHVlDQotLyogLSAtLS0tLS0tLSBSVFRDX1JUU1IgOiAoUlRUQyBPZmZzZXQ6IDB4YykgUmVhbC10aW1lIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSAgICBBVDkxQ19SVFRDX0FMTVMgRVFVKCAweDEgPDwgMCApOw0KLS0gKCBSVFRDICkgUmVhbCAtIHRpbWUgQWxhcm0gU3RhdHVzDQotICAgIEFUOTFDX1JUVENfUlRUSU5DIEVRVSggMHgxIDw8IDEgKTsNCi0tICggUlRUQyApIFJlYWwgLSB0aW1lIFRpbWVyIEluY3JlbWVudA0KKy8vIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAtICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFJlYWwgVGltZSBUaW1lciBDb250cm9sbGVyIEludGVyZmFjZQ0KKy8vIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAtIC0tLS0tLS0tIFJUVENfUlRNUiA6IChSVFRDIE9mZnNldDogMHgwKSBSZWFsLXRpbWUgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19SVFRDX1JUUFJFUyAgICAgICAgIEVRVSAoMHhGRkZGIDw8ICAwKSA7LSAoUlRUQykgUmVhbC10aW1lIFRpbWVyIFByZXNjYWxlciBWYWx1ZQ0KK0FUOTFDX1JUVENfQUxNSUVOICAgICAgICAgRVFVICgweDEgPDwgMTYpIDstIChSVFRDKSBBbGFybSBJbnRlcnJ1cHQgRW5hYmxlDQorQVQ5MUNfUlRUQ19SVFRJTkNJRU4gICAgICBFUVUgKDB4MSA8PCAxNykgOy0gKFJUVEMpIFJlYWwgVGltZSBUaW1lciBJbmNyZW1lbnQgSW50ZXJydXB0IEVuYWJsZQ0KK0FUOTFDX1JUVENfUlRUUlNUICAgICAgICAgRVFVICgweDEgPDwgMTgpIDstIChSVFRDKSBSZWFsIFRpbWUgVGltZXIgUmVzdGFydA0KKy8vIC0gLS0tLS0tLS0gUlRUQ19SVEFSIDogKFJUVEMgT2Zmc2V0OiAweDQpIFJlYWwtdGltZSBBbGFybSBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19SVFRDX0FMTVYgICAgICAgICAgIEVRVSAoMHgwIDw8ICAwKSA7LSAoUlRUQykgQWxhcm0gVmFsdWUNCisvLyAtIC0tLS0tLS0tIFJUVENfUlRWUiA6IChSVFRDIE9mZnNldDogMHg4KSBDdXJyZW50IFJlYWwtdGltZSBWYWx1ZSBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19SVFRDX0NSVFYgICAgICAgICAgIEVRVSAoMHgwIDw8ICAwKSA7LSAoUlRUQykgQ3VycmVudCBSZWFsLXRpbWUgVmFsdWUNCisvLyAtIC0tLS0tLS0tIFJUVENfUlRTUiA6IChSVFRDIE9mZnNldDogMHhjKSBSZWFsLXRpbWUgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX1JUVENfQUxNUyAgICAgICAgICAgRVFVICgweDEgPDwgIDApIDstIChSVFRDKSBSZWFsLXRpbWUgQWxhcm0gU3RhdHVzDQorQVQ5MUNfUlRUQ19SVFRJTkMgICAgICAgICBFUVUgKDB4MSA8PCAgMSkgOy0gKFJUVEMpIFJlYWwtdGltZSBUaW1lciBJbmNyZW1lbnQNCiANCi0vKiAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogLSAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQZXJpb2RpYyBJbnRlcnZhbCBUaW1lciBDb250cm9sbGVyIEludGVyZmFjZSAqLw0KLS8qIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAtIC0tLS0tLS0tIFBJVENfUElNUiA6IChQSVRDIE9mZnNldDogMHgwKSBQZXJpb2RpYyBJbnRlcnZhbCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotICAgIEFUOTFDX1BJVENfUElWIEVRVSggMHhGRkZGRiA8PCAwICk7DQotLSAoIFBJVEMgKSBQZXJpb2RpYyBJbnRlcnZhbCBWYWx1ZQ0KLSAgICBBVDkxQ19QSVRDX1BJVEVOIEVRVSggMHgxIDw8IDI0ICk7DQotLSAoIFBJVEMgKSBQZXJpb2RpYyBJbnRlcnZhbCBUaW1lciBFbmFibGVkDQotICAgIEFUOTFDX1BJVENfUElUSUVOIEVRVSggMHgxIDw8IDI1ICk7DQotLSAoIFBJVEMgKSBQZXJpb2RpYyBJbnRlcnZhbCBUaW1lciBJbnRlcnJ1cHQgRW5hYmxlDQotLyogLSAtLS0tLS0tLSBQSVRDX1BJU1IgOiAoUElUQyBPZmZzZXQ6IDB4NCkgUGVyaW9kaWMgSW50ZXJ2YWwgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotICAgIEFUOTFDX1BJVENfUElUUyBFUVUoIDB4MSA8PCAwICk7DQotLSAoIFBJVEMgKSBQZXJpb2RpYyBJbnRlcnZhbCBUaW1lciBTdGF0dXMNCi0vKiAtIC0tLS0tLS0tIFBJVENfUElWUiA6IChQSVRDIE9mZnNldDogMHg4KSBQZXJpb2RpYyBJbnRlcnZhbCBWYWx1ZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSAgICBBVDkxQ19QSVRDX0NQSVYgRVFVKCAweEZGRkZGIDw8IDAgKTsNCi0tICggUElUQyApIEN1cnJlbnQgUGVyaW9kaWMgSW50ZXJ2YWwgVmFsdWUNCi0gICAgQVQ5MUNfUElUQ19QSUNOVCBFUVUoIDB4RkZGIDw8IDIwICk7DQotLSAoIFBJVEMgKSBQZXJpb2RpYyBJbnRlcnZhbCBDb3VudGVyDQotLyogLSAtLS0tLS0tLSBQSVRDX1BJSVIgOiAoUElUQyBPZmZzZXQ6IDB4YykgUGVyaW9kaWMgSW50ZXJ2YWwgSW1hZ2UgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCisvLyAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gLSAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQZXJpb2RpYyBJbnRlcnZhbCBUaW1lciBDb250cm9sbGVyIEludGVyZmFjZQ0KKy8vIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAtIC0tLS0tLS0tIFBJVENfUElNUiA6IChQSVRDIE9mZnNldDogMHgwKSBQZXJpb2RpYyBJbnRlcnZhbCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX1BJVENfUElWICAgICAgICAgICAgRVFVICgweEZGRkZGIDw8ICAwKSA7LSAoUElUQykgUGVyaW9kaWMgSW50ZXJ2YWwgVmFsdWUNCitBVDkxQ19QSVRDX1BJVEVOICAgICAgICAgIEVRVSAoMHgxIDw8IDI0KSA7LSAoUElUQykgUGVyaW9kaWMgSW50ZXJ2YWwgVGltZXIgRW5hYmxlZA0KK0FUOTFDX1BJVENfUElUSUVOICAgICAgICAgRVFVICgweDEgPDwgMjUpIDstIChQSVRDKSBQZXJpb2RpYyBJbnRlcnZhbCBUaW1lciBJbnRlcnJ1cHQgRW5hYmxlDQorLy8gLSAtLS0tLS0tLSBQSVRDX1BJU1IgOiAoUElUQyBPZmZzZXQ6IDB4NCkgUGVyaW9kaWMgSW50ZXJ2YWwgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX1BJVENfUElUUyAgICAgICAgICAgRVFVICgweDEgPDwgIDApIDstIChQSVRDKSBQZXJpb2RpYyBJbnRlcnZhbCBUaW1lciBTdGF0dXMNCisvLyAtIC0tLS0tLS0tIFBJVENfUElWUiA6IChQSVRDIE9mZnNldDogMHg4KSBQZXJpb2RpYyBJbnRlcnZhbCBWYWx1ZSBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19QSVRDX0NQSVYgICAgICAgICAgIEVRVSAoMHhGRkZGRiA8PCAgMCkgOy0gKFBJVEMpIEN1cnJlbnQgUGVyaW9kaWMgSW50ZXJ2YWwgVmFsdWUNCitBVDkxQ19QSVRDX1BJQ05UICAgICAgICAgIEVRVSAoMHhGRkYgPDwgMjApIDstIChQSVRDKSBQZXJpb2RpYyBJbnRlcnZhbCBDb3VudGVyDQorLy8gLSAtLS0tLS0tLSBQSVRDX1BJSVIgOiAoUElUQyBPZmZzZXQ6IDB4YykgUGVyaW9kaWMgSW50ZXJ2YWwgSW1hZ2UgUmVnaXN0ZXIgLS0tLS0tLS0gDQogDQotLyogLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qIC0gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgV2F0Y2hkb2cgVGltZXIgQ29udHJvbGxlciBJbnRlcmZhY2UgKi8NCi0vKiAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogLSAtLS0tLS0tLSBXRFRDX1dEQ1IgOiAoV0RUQyBPZmZzZXQ6IDB4MCkgUGVyaW9kaWMgSW50ZXJ2YWwgSW1hZ2UgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0gICAgQVQ5MUNfV0RUQ19XRFJTVFQgRVFVKCAweDEgPDwgMCApOw0KLS0gKCBXRFRDICkgV2F0Y2hkb2cgUmVzdGFydA0KLSAgICBBVDkxQ19XRFRDX0tFWSBFUVUoIDB4RkYgPDwgMjQgKTsNCi0tICggV0RUQyApIFdhdGNoZG9nIEtFWSBQYXNzd29yZA0KLS8qIC0gLS0tLS0tLS0gV0RUQ19XRE1SIDogKFdEVEMgT2Zmc2V0OiAweDQpIFdhdGNoZG9nIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0gICAgQVQ5MUNfV0RUQ19XRFYgRVFVKCAweEZGRiA8PCAwICk7DQotLSAoIFdEVEMgKSBXYXRjaGRvZyBUaW1lciBSZXN0YXJ0DQotICAgIEFUOTFDX1dEVENfV0RGSUVOIEVRVSggMHgxIDw8IDEyICk7DQotLSAoIFdEVEMgKSBXYXRjaGRvZyBGYXVsdCBJbnRlcnJ1cHQgRW5hYmxlDQotICAgIEFUOTFDX1dEVENfV0RSU1RFTiBFUVUoIDB4MSA8PCAxMyApOw0KLS0gKCBXRFRDICkgV2F0Y2hkb2cgUmVzZXQgRW5hYmxlDQotICAgIEFUOTFDX1dEVENfV0RSUFJPQyBFUVUoIDB4MSA8PCAxNCApOw0KLS0gKCBXRFRDICkgV2F0Y2hkb2cgVGltZXIgUmVzdGFydA0KLSAgICBBVDkxQ19XRFRDX1dERElTIEVRVSggMHgxIDw8IDE1ICk7DQotLSAoIFdEVEMgKSBXYXRjaGRvZyBEaXNhYmxlDQotICAgIEFUOTFDX1dEVENfV0REIEVRVSggMHhGRkYgPDwgMTYgKTsNCi0tICggV0RUQyApIFdhdGNoZG9nIERlbHRhIFZhbHVlDQotICAgIEFUOTFDX1dEVENfV0REQkdITFQgRVFVKCAweDEgPDwgMjggKTsNCi0tICggV0RUQyApIFdhdGNoZG9nIERlYnVnIEhhbHQNCi0gICAgQVQ5MUNfV0RUQ19XRElETEVITFQgRVFVKCAweDEgPDwgMjkgKTsNCi0tICggV0RUQyApIFdhdGNoZG9nIElkbGUgSGFsdA0KLS8qIC0gLS0tLS0tLS0gV0RUQ19XRFNSIDogKFdEVEMgT2Zmc2V0OiAweDgpIFdhdGNoZG9nIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSAgICBBVDkxQ19XRFRDX1dEVU5GIEVRVSggMHgxIDw8IDAgKTsNCi0tICggV0RUQyApIFdhdGNoZG9nIFVuZGVyZmxvdw0KLSAgICBBVDkxQ19XRFRDX1dERVJSIEVRVSggMHgxIDw8IDEgKTsNCi0tICggV0RUQyApIFdhdGNoZG9nIEVycm9yDQorLy8gLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vIC0gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgV2F0Y2hkb2cgVGltZXIgQ29udHJvbGxlciBJbnRlcmZhY2UNCisvLyAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gLSAtLS0tLS0tLSBXRFRDX1dEQ1IgOiAoV0RUQyBPZmZzZXQ6IDB4MCkgUGVyaW9kaWMgSW50ZXJ2YWwgSW1hZ2UgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfV0RUQ19XRFJTVFQgICAgICAgICBFUVUgKDB4MSA8PCAgMCkgOy0gKFdEVEMpIFdhdGNoZG9nIFJlc3RhcnQNCitBVDkxQ19XRFRDX0tFWSAgICAgICAgICAgIEVRVSAoMHhGRiA8PCAyNCkgOy0gKFdEVEMpIFdhdGNoZG9nIEtFWSBQYXNzd29yZA0KKy8vIC0gLS0tLS0tLS0gV0RUQ19XRE1SIDogKFdEVEMgT2Zmc2V0OiAweDQpIFdhdGNoZG9nIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfV0RUQ19XRFYgICAgICAgICAgICBFUVUgKDB4RkZGIDw8ICAwKSA7LSAoV0RUQykgV2F0Y2hkb2cgVGltZXIgUmVzdGFydA0KK0FUOTFDX1dEVENfV0RGSUVOICAgICAgICAgRVFVICgweDEgPDwgMTIpIDstIChXRFRDKSBXYXRjaGRvZyBGYXVsdCBJbnRlcnJ1cHQgRW5hYmxlDQorQVQ5MUNfV0RUQ19XRFJTVEVOICAgICAgICBFUVUgKDB4MSA8PCAxMykgOy0gKFdEVEMpIFdhdGNoZG9nIFJlc2V0IEVuYWJsZQ0KK0FUOTFDX1dEVENfV0RSUFJPQyAgICAgICAgRVFVICgweDEgPDwgMTQpIDstIChXRFRDKSBXYXRjaGRvZyBUaW1lciBSZXN0YXJ0DQorQVQ5MUNfV0RUQ19XRERJUyAgICAgICAgICBFUVUgKDB4MSA8PCAxNSkgOy0gKFdEVEMpIFdhdGNoZG9nIERpc2FibGUNCitBVDkxQ19XRFRDX1dERCAgICAgICAgICAgIEVRVSAoMHhGRkYgPDwgMTYpIDstIChXRFRDKSBXYXRjaGRvZyBEZWx0YSBWYWx1ZQ0KK0FUOTFDX1dEVENfV0REQkdITFQgICAgICAgRVFVICgweDEgPDwgMjgpIDstIChXRFRDKSBXYXRjaGRvZyBEZWJ1ZyBIYWx0DQorQVQ5MUNfV0RUQ19XRElETEVITFQgICAgICBFUVUgKDB4MSA8PCAyOSkgOy0gKFdEVEMpIFdhdGNoZG9nIElkbGUgSGFsdA0KKy8vIC0gLS0tLS0tLS0gV0RUQ19XRFNSIDogKFdEVEMgT2Zmc2V0OiAweDgpIFdhdGNoZG9nIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19XRFRDX1dEVU5GICAgICAgICAgIEVRVSAoMHgxIDw8ICAwKSA7LSAoV0RUQykgV2F0Y2hkb2cgVW5kZXJmbG93DQorQVQ5MUNfV0RUQ19XREVSUiAgICAgICAgICBFUVUgKDB4MSA8PCAgMSkgOy0gKFdEVEMpIFdhdGNoZG9nIEVycm9yDQogDQotLyogLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qIC0gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVm9sdGFnZSBSZWd1bGF0b3IgTW9kZSBDb250cm9sbGVyIEludGVyZmFjZSAqLw0KLS8qIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAtIC0tLS0tLS0tIFZSRUdfTVIgOiAoVlJFRyBPZmZzZXQ6IDB4MCkgVm9sdGFnZSBSZWd1bGF0b3IgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSAgICBBVDkxQ19WUkVHX1BTVERCWSBFUVUoIDB4MSA8PCAwICk7DQotLSAoIFZSRUcgKSBWb2x0YWdlIFJlZ3VsYXRvciBQb3dlciBTdGFuZGJ5IE1vZGUNCisvLyAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gLSAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBWb2x0YWdlIFJlZ3VsYXRvciBNb2RlIENvbnRyb2xsZXIgSW50ZXJmYWNlDQorLy8gLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vIC0gLS0tLS0tLS0gVlJFR19NUiA6IChWUkVHIE9mZnNldDogMHgwKSBWb2x0YWdlIFJlZ3VsYXRvciBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX1ZSRUdfUFNUREJZICAgICAgICAgRVFVICgweDEgPDwgIDApIDstIChWUkVHKSBWb2x0YWdlIFJlZ3VsYXRvciBQb3dlciBTdGFuZGJ5IE1vZGUNCiANCi0vKiAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogLSAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBNZW1vcnkgQ29udHJvbGxlciBJbnRlcmZhY2UgKi8NCi0vKiAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogLSAtLS0tLS0tLSBNQ19SQ1IgOiAoTUMgT2Zmc2V0OiAweDApIE1DIFJlbWFwIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0gICAgQVQ5MUNfTUNfUkNCIEVRVSggMHgxIDw8IDAgKTsNCi0tICggTUMgKSBSZW1hcCBDb21tYW5kIEJpdA0KLS8qIC0gLS0tLS0tLS0gTUNfQVNSIDogKE1DIE9mZnNldDogMHg0KSBNQyBBYm9ydCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0gICAgQVQ5MUNfTUNfVU5EQUREIEVRVSggMHgxIDw8IDAgKTsNCi0tICggTUMgKSBVbmRlZmluZWQgQWRkZXNzIEFib3J0IFN0YXR1cw0KLSAgICBBVDkxQ19NQ19NSVNBREQgRVFVKCAweDEgPDwgMSApOw0KLS0gKCBNQyApIE1pc2FsaWduZWQgQWRkZXNzIEFib3J0IFN0YXR1cw0KLSAgICBBVDkxQ19NQ19BQlRTWiBFUVUoIDB4MyA8PCA4ICk7DQotLSAoIE1DICkgQWJvcnQgU2l6ZSBTdGF0dXMNCi0gICAgQVQ5MUNfTUNfQUJUU1pfQllURSBFUVUoIDB4MCA8PCA4ICk7DQotLSAoIE1DICkgQnl0ZQ0KLSAgICBBVDkxQ19NQ19BQlRTWl9IV09SRCBFUVUoIDB4MSA8PCA4ICk7DQotLSAoIE1DICkgSGFsZiAtIHdvcmQNCi0gICAgQVQ5MUNfTUNfQUJUU1pfV09SRCBFUVUoIDB4MiA8PCA4ICk7DQotLSAoIE1DICkgV29yZA0KLSAgICBBVDkxQ19NQ19BQlRUWVAgRVFVKCAweDMgPDwgMTAgKTsNCi0tICggTUMgKSBBYm9ydCBUeXBlIFN0YXR1cw0KLSAgICBBVDkxQ19NQ19BQlRUWVBfREFUQVIgRVFVKCAweDAgPDwgMTAgKTsNCi0tICggTUMgKSBEYXRhIFJlYWQNCi0gICAgQVQ5MUNfTUNfQUJUVFlQX0RBVEFXIEVRVSggMHgxIDw8IDEwICk7DQotLSAoIE1DICkgRGF0YSBXcml0ZQ0KLSAgICBBVDkxQ19NQ19BQlRUWVBfRkVUQ0ggRVFVKCAweDIgPDwgMTAgKTsNCi0tICggTUMgKSBDb2RlIEZldGNoDQotICAgIEFUOTFDX01DX01TVDAgRVFVKCAweDEgPDwgMTYgKTsNCi0tICggTUMgKSBNYXN0ZXIgMCBBYm9ydCBTb3VyY2UNCi0gICAgQVQ5MUNfTUNfTVNUMSBFUVUoIDB4MSA8PCAxNyApOw0KLS0gKCBNQyApIE1hc3RlciAxIEFib3J0IFNvdXJjZQ0KLSAgICBBVDkxQ19NQ19TVk1TVDAgRVFVKCAweDEgPDwgMjQgKTsNCi0tICggTUMgKSBTYXZlZCBNYXN0ZXIgMCBBYm9ydCBTb3VyY2UNCi0gICAgQVQ5MUNfTUNfU1ZNU1QxIEVRVSggMHgxIDw8IDI1ICk7DQotLSAoIE1DICkgU2F2ZWQgTWFzdGVyIDEgQWJvcnQgU291cmNlDQotLyogLSAtLS0tLS0tLSBNQ19GTVIgOiAoTUMgT2Zmc2V0OiAweDYwKSBNQyBGbGFzaCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotICAgIEFUOTFDX01DX0ZSRFkgRVFVKCAweDEgPDwgMCApOw0KLS0gKCBNQyApIEZsYXNoIFJlYWR5DQotICAgIEFUOTFDX01DX0xPQ0tFIEVRVSggMHgxIDw8IDIgKTsNCi0tICggTUMgKSBMb2NrIEVycm9yDQotICAgIEFUOTFDX01DX1BST0dFIEVRVSggMHgxIDw8IDMgKTsNCi0tICggTUMgKSBQcm9ncmFtbWluZyBFcnJvcg0KLSAgICBBVDkxQ19NQ19ORUJQIEVRVSggMHgxIDw8IDcgKTsNCi0tICggTUMgKSBObyBFcmFzZSBCZWZvcmUgUHJvZ3JhbW1pbmcNCi0gICAgQVQ5MUNfTUNfRldTIEVRVSggMHgzIDw8IDggKTsNCi0tICggTUMgKSBGbGFzaCBXYWl0IFN0YXRlDQotICAgIEFUOTFDX01DX0ZXU18wRldTIEVRVSggMHgwIDw8IDggKTsNCi0tICggTUMgKSAxIGN5Y2xlIGZvciBSZWFkLCAyIGZvciBXcml0ZSBvcGVyYXRpb25zDQotICAgIEFUOTFDX01DX0ZXU18xRldTIEVRVSggMHgxIDw8IDggKTsNCi0tICggTUMgKSAyIGN5Y2xlcyBmb3IgUmVhZCwgMyBmb3IgV3JpdGUgb3BlcmF0aW9ucw0KLSAgICBBVDkxQ19NQ19GV1NfMkZXUyBFUVUoIDB4MiA8PCA4ICk7DQotLSAoIE1DICkgMyBjeWNsZXMgZm9yIFJlYWQsIDQgZm9yIFdyaXRlIG9wZXJhdGlvbnMNCi0gICAgQVQ5MUNfTUNfRldTXzNGV1MgRVFVKCAweDMgPDwgOCApOw0KLS0gKCBNQyApIDQgY3ljbGVzIGZvciBSZWFkLCA0IGZvciBXcml0ZSBvcGVyYXRpb25zDQotICAgIEFUOTFDX01DX0ZNQ04gRVFVKCAweEZGIDw8IDE2ICk7DQotLSAoIE1DICkgRmxhc2ggTWljcm9zZWNvbmQgQ3ljbGUgTnVtYmVyDQotLyogLSAtLS0tLS0tLSBNQ19GQ1IgOiAoTUMgT2Zmc2V0OiAweDY0KSBNQyBGbGFzaCBDb21tYW5kIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotICAgIEFUOTFDX01DX0ZDTUQgRVFVKCAweEYgPDwgMCApOw0KLS0gKCBNQyApIEZsYXNoIENvbW1hbmQNCi0gICAgQVQ5MUNfTUNfRkNNRF9TVEFSVF9QUk9HIEVRVSggMHgxICk7DQotLSAoIE1DICkgU3RhcnRzIHRoZSBwcm9ncmFtbWluZyBvZiB0aCBlcGFnZSBzcGVjaWZpZWQgYnkgUEFHRU4uDQotICAgICAgIEFUOTFDX01DX0ZDTURfTE9DSyBFUVUoIDB4MiApOw0KLS0gKCBNQyApIFN0YXJ0cyBhIGxvY2sgc2VxdWVuY2Ugb2YgdGhlIHNlY3RvciBkZWZpbmVkIGJ5IHRoZSBiaXRzIDQgdG8gNyBvZiB0aGUgZmllbGQgUEFHRU4uDQotICAgICAgIEFUOTFDX01DX0ZDTURfUFJPR19BTkRfTE9DSyBFUVUoIDB4MyApOw0KLS0gKCBNQyApIFRoZSBsb2NrIHNlcXVlbmNlIGF1dG9tYXRpY2FsbHkgaGFwcGVucyBhZnRlciB0aGUgcHJvZ3JhbW1pbmcgc2VxdWVuY2UgaXMgY29tcGxldGVkLg0KLSAgICAgICBBVDkxQ19NQ19GQ01EX1VOTE9DSyBFUVUoIDB4NCApOw0KLS0gKCBNQyApIFN0YXJ0cyBhbiB1bmxvY2sgc2VxdWVuY2Ugb2YgdGhlIHNlY3RvciBkZWZpbmVkIGJ5IHRoZSBiaXRzIDQgdG8gNyBvZiB0aGUgZmllbGQgUEFHRU4uDQotICAgICAgIEFUOTFDX01DX0ZDTURfRVJBU0VfQUxMIEVRVSggMHg4ICk7DQotLSAoIE1DICkgU3RhcnRzIHRoZSBlcmFzZSBvZiB0aGUgZW50aXJlIGZsYXNoLklmIGF0IGxlYXN0IGEgcGFnZSBpcyBsb2NrZWQsIHRoZSBjb21tYW5kIGlzIGNhbmNlbGxlZC4NCi0gICAgICAgQVQ5MUNfTUNfRkNNRF9TRVRfR1BfTlZNIEVRVSggMHhCICk7DQotLSAoIE1DICkgU2V0IEdlbmVyYWwgUHVycG9zZSBOVk0gYml0cy4NCi0gICAgICAgQVQ5MUNfTUNfRkNNRF9DTFJfR1BfTlZNIEVRVSggMHhEICk7DQotLSAoIE1DICkgQ2xlYXIgR2VuZXJhbCBQdXJwb3NlIE5WTSBiaXRzLg0KLSAgICAgICBBVDkxQ19NQ19GQ01EX1NFVF9TRUNVUklUWSBFUVUoIDB4RiApOw0KLS0gKCBNQyApIFNldCBTZWN1cml0eSBCaXQuDQotICAgICAgIEFUOTFDX01DX1BBR0VOIEVRVSggMHgzRkYgPDwgOCApOw0KLS0gKCBNQyApIFBhZ2UgTnVtYmVyDQotICAgIEFUOTFDX01DX0tFWSBFUVUoIDB4RkYgPDwgMjQgKTsNCi0tICggTUMgKSBXcml0aW5nIFByb3RlY3QgS2V5DQotLyogLSAtLS0tLS0tLSBNQ19GU1IgOiAoTUMgT2Zmc2V0OiAweDY4KSBNQyBGbGFzaCBDb21tYW5kIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotICAgIEFUOTFDX01DX1NFQ1VSSVRZIEVRVSggMHgxIDw8IDQgKTsNCi0tICggTUMgKSBTZWN1cml0eSBCaXQgU3RhdHVzDQotICAgIEFUOTFDX01DX0dQTlZNMCBFUVUoIDB4MSA8PCA4ICk7DQotLSAoIE1DICkgU2VjdG9yIDAgTG9jayBTdGF0dXMNCi0gICAgQVQ5MUNfTUNfR1BOVk0xIEVRVSggMHgxIDw8IDkgKTsNCi0tICggTUMgKSBTZWN0b3IgMSBMb2NrIFN0YXR1cw0KLSAgICBBVDkxQ19NQ19HUE5WTTIgRVFVKCAweDEgPDwgMTAgKTsNCi0tICggTUMgKSBTZWN0b3IgMiBMb2NrIFN0YXR1cw0KLSAgICBBVDkxQ19NQ19HUE5WTTMgRVFVKCAweDEgPDwgMTEgKTsNCi0tICggTUMgKSBTZWN0b3IgMyBMb2NrIFN0YXR1cw0KLSAgICBBVDkxQ19NQ19HUE5WTTQgRVFVKCAweDEgPDwgMTIgKTsNCi0tICggTUMgKSBTZWN0b3IgNCBMb2NrIFN0YXR1cw0KLSAgICBBVDkxQ19NQ19HUE5WTTUgRVFVKCAweDEgPDwgMTMgKTsNCi0tICggTUMgKSBTZWN0b3IgNSBMb2NrIFN0YXR1cw0KLSAgICBBVDkxQ19NQ19HUE5WTTYgRVFVKCAweDEgPDwgMTQgKTsNCi0tICggTUMgKSBTZWN0b3IgNiBMb2NrIFN0YXR1cw0KLSAgICBBVDkxQ19NQ19HUE5WTTcgRVFVKCAweDEgPDwgMTUgKTsNCi0tICggTUMgKSBTZWN0b3IgNyBMb2NrIFN0YXR1cw0KLSAgICBBVDkxQ19NQ19MT0NLUzAgRVFVKCAweDEgPDwgMTYgKTsNCi0tICggTUMgKSBTZWN0b3IgMCBMb2NrIFN0YXR1cw0KLSAgICBBVDkxQ19NQ19MT0NLUzEgRVFVKCAweDEgPDwgMTcgKTsNCi0tICggTUMgKSBTZWN0b3IgMSBMb2NrIFN0YXR1cw0KLSAgICBBVDkxQ19NQ19MT0NLUzIgRVFVKCAweDEgPDwgMTggKTsNCi0tICggTUMgKSBTZWN0b3IgMiBMb2NrIFN0YXR1cw0KLSAgICBBVDkxQ19NQ19MT0NLUzMgRVFVKCAweDEgPDwgMTkgKTsNCi0tICggTUMgKSBTZWN0b3IgMyBMb2NrIFN0YXR1cw0KLSAgICBBVDkxQ19NQ19MT0NLUzQgRVFVKCAweDEgPDwgMjAgKTsNCi0tICggTUMgKSBTZWN0b3IgNCBMb2NrIFN0YXR1cw0KLSAgICBBVDkxQ19NQ19MT0NLUzUgRVFVKCAweDEgPDwgMjEgKTsNCi0tICggTUMgKSBTZWN0b3IgNSBMb2NrIFN0YXR1cw0KLSAgICBBVDkxQ19NQ19MT0NLUzYgRVFVKCAweDEgPDwgMjIgKTsNCi0tICggTUMgKSBTZWN0b3IgNiBMb2NrIFN0YXR1cw0KLSAgICBBVDkxQ19NQ19MT0NLUzcgRVFVKCAweDEgPDwgMjMgKTsNCi0tICggTUMgKSBTZWN0b3IgNyBMb2NrIFN0YXR1cw0KLSAgICBBVDkxQ19NQ19MT0NLUzggRVFVKCAweDEgPDwgMjQgKTsNCi0tICggTUMgKSBTZWN0b3IgOCBMb2NrIFN0YXR1cw0KLSAgICBBVDkxQ19NQ19MT0NLUzkgRVFVKCAweDEgPDwgMjUgKTsNCi0tICggTUMgKSBTZWN0b3IgOSBMb2NrIFN0YXR1cw0KLSAgICBBVDkxQ19NQ19MT0NLUzEwIEVRVSggMHgxIDw8IDI2ICk7DQotLSAoIE1DICkgU2VjdG9yIDEwIExvY2sgU3RhdHVzDQotICAgIEFUOTFDX01DX0xPQ0tTMTEgRVFVKCAweDEgPDwgMjcgKTsNCi0tICggTUMgKSBTZWN0b3IgMTEgTG9jayBTdGF0dXMNCi0gICAgQVQ5MUNfTUNfTE9DS1MxMiBFUVUoIDB4MSA8PCAyOCApOw0KLS0gKCBNQyApIFNlY3RvciAxMiBMb2NrIFN0YXR1cw0KLSAgICBBVDkxQ19NQ19MT0NLUzEzIEVRVSggMHgxIDw8IDI5ICk7DQotLSAoIE1DICkgU2VjdG9yIDEzIExvY2sgU3RhdHVzDQotICAgIEFUOTFDX01DX0xPQ0tTMTQgRVFVKCAweDEgPDwgMzAgKTsNCi0tICggTUMgKSBTZWN0b3IgMTQgTG9jayBTdGF0dXMNCi0gICAgQVQ5MUNfTUNfTE9DS1MxNSBFUVUoIDB4MSA8PCAzMSApOw0KLS0gKCBNQyApIFNlY3RvciAxNSBMb2NrIFN0YXR1cw0KKy8vIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAtICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIE1lbW9yeSBDb250cm9sbGVyIEludGVyZmFjZQ0KKy8vIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAtIC0tLS0tLS0tIE1DX1JDUiA6IChNQyBPZmZzZXQ6IDB4MCkgTUMgUmVtYXAgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19NQ19SQ0IgICAgICAgICAgICAgIEVRVSAoMHgxIDw8ICAwKSA7LSAoTUMpIFJlbWFwIENvbW1hbmQgQml0DQorLy8gLSAtLS0tLS0tLSBNQ19BU1IgOiAoTUMgT2Zmc2V0OiAweDQpIE1DIEFib3J0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19NQ19VTkRBREQgICAgICAgICAgIEVRVSAoMHgxIDw8ICAwKSA7LSAoTUMpIFVuZGVmaW5lZCBBZGRlc3MgQWJvcnQgU3RhdHVzDQorQVQ5MUNfTUNfTUlTQUREICAgICAgICAgICBFUVUgKDB4MSA8PCAgMSkgOy0gKE1DKSBNaXNhbGlnbmVkIEFkZGVzcyBBYm9ydCBTdGF0dXMNCitBVDkxQ19NQ19BQlRTWiAgICAgICAgICAgIEVRVSAoMHgzIDw8ICA4KSA7LSAoTUMpIEFib3J0IFNpemUgU3RhdHVzDQorQVQ5MUNfTUNfQUJUU1pfQllURSAgICAgICBFUVUgKDB4MCA8PCAgOCkgOy0gKE1DKSBCeXRlDQorQVQ5MUNfTUNfQUJUU1pfSFdPUkQgICAgICBFUVUgKDB4MSA8PCAgOCkgOy0gKE1DKSBIYWxmLXdvcmQNCitBVDkxQ19NQ19BQlRTWl9XT1JEICAgICAgIEVRVSAoMHgyIDw8ICA4KSA7LSAoTUMpIFdvcmQNCitBVDkxQ19NQ19BQlRUWVAgICAgICAgICAgIEVRVSAoMHgzIDw8IDEwKSA7LSAoTUMpIEFib3J0IFR5cGUgU3RhdHVzDQorQVQ5MUNfTUNfQUJUVFlQX0RBVEFSICAgICBFUVUgKDB4MCA8PCAxMCkgOy0gKE1DKSBEYXRhIFJlYWQNCitBVDkxQ19NQ19BQlRUWVBfREFUQVcgICAgIEVRVSAoMHgxIDw8IDEwKSA7LSAoTUMpIERhdGEgV3JpdGUNCitBVDkxQ19NQ19BQlRUWVBfRkVUQ0ggICAgIEVRVSAoMHgyIDw8IDEwKSA7LSAoTUMpIENvZGUgRmV0Y2gNCitBVDkxQ19NQ19NU1QwICAgICAgICAgICAgIEVRVSAoMHgxIDw8IDE2KSA7LSAoTUMpIE1hc3RlciAwIEFib3J0IFNvdXJjZQ0KK0FUOTFDX01DX01TVDEgICAgICAgICAgICAgRVFVICgweDEgPDwgMTcpIDstIChNQykgTWFzdGVyIDEgQWJvcnQgU291cmNlDQorQVQ5MUNfTUNfU1ZNU1QwICAgICAgICAgICBFUVUgKDB4MSA8PCAyNCkgOy0gKE1DKSBTYXZlZCBNYXN0ZXIgMCBBYm9ydCBTb3VyY2UNCitBVDkxQ19NQ19TVk1TVDEgICAgICAgICAgIEVRVSAoMHgxIDw8IDI1KSA7LSAoTUMpIFNhdmVkIE1hc3RlciAxIEFib3J0IFNvdXJjZQ0KKy8vIC0gLS0tLS0tLS0gTUNfRk1SIDogKE1DIE9mZnNldDogMHg2MCkgTUMgRmxhc2ggTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19NQ19GUkRZICAgICAgICAgICAgIEVRVSAoMHgxIDw8ICAwKSA7LSAoTUMpIEZsYXNoIFJlYWR5DQorQVQ5MUNfTUNfTE9DS0UgICAgICAgICAgICBFUVUgKDB4MSA8PCAgMikgOy0gKE1DKSBMb2NrIEVycm9yDQorQVQ5MUNfTUNfUFJPR0UgICAgICAgICAgICBFUVUgKDB4MSA8PCAgMykgOy0gKE1DKSBQcm9ncmFtbWluZyBFcnJvcg0KK0FUOTFDX01DX05FQlAgICAgICAgICAgICAgRVFVICgweDEgPDwgIDcpIDstIChNQykgTm8gRXJhc2UgQmVmb3JlIFByb2dyYW1taW5nDQorQVQ5MUNfTUNfRldTICAgICAgICAgICAgICBFUVUgKDB4MyA8PCAgOCkgOy0gKE1DKSBGbGFzaCBXYWl0IFN0YXRlDQorQVQ5MUNfTUNfRldTXzBGV1MgICAgICAgICBFUVUgKDB4MCA8PCAgOCkgOy0gKE1DKSAxIGN5Y2xlIGZvciBSZWFkLCAyIGZvciBXcml0ZSBvcGVyYXRpb25zDQorQVQ5MUNfTUNfRldTXzFGV1MgICAgICAgICBFUVUgKDB4MSA8PCAgOCkgOy0gKE1DKSAyIGN5Y2xlcyBmb3IgUmVhZCwgMyBmb3IgV3JpdGUgb3BlcmF0aW9ucw0KK0FUOTFDX01DX0ZXU18yRldTICAgICAgICAgRVFVICgweDIgPDwgIDgpIDstIChNQykgMyBjeWNsZXMgZm9yIFJlYWQsIDQgZm9yIFdyaXRlIG9wZXJhdGlvbnMNCitBVDkxQ19NQ19GV1NfM0ZXUyAgICAgICAgIEVRVSAoMHgzIDw8ICA4KSA7LSAoTUMpIDQgY3ljbGVzIGZvciBSZWFkLCA0IGZvciBXcml0ZSBvcGVyYXRpb25zDQorQVQ5MUNfTUNfRk1DTiAgICAgICAgICAgICBFUVUgKDB4RkYgPDwgMTYpIDstIChNQykgRmxhc2ggTWljcm9zZWNvbmQgQ3ljbGUgTnVtYmVyDQorLy8gLSAtLS0tLS0tLSBNQ19GQ1IgOiAoTUMgT2Zmc2V0OiAweDY0KSBNQyBGbGFzaCBDb21tYW5kIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX01DX0ZDTUQgICAgICAgICAgICAgRVFVICgweEYgPDwgIDApIDstIChNQykgRmxhc2ggQ29tbWFuZA0KK0FUOTFDX01DX0ZDTURfU1RBUlRfUFJPRyAgRVFVICgweDEpIDstIChNQykgU3RhcnRzIHRoZSBwcm9ncmFtbWluZyBvZiB0aCBlcGFnZSBzcGVjaWZpZWQgYnkgUEFHRU4uDQorQVQ5MUNfTUNfRkNNRF9MT0NLICAgICAgICBFUVUgKDB4MikgOy0gKE1DKSBTdGFydHMgYSBsb2NrIHNlcXVlbmNlIG9mIHRoZSBzZWN0b3IgZGVmaW5lZCBieSB0aGUgYml0cyA0IHRvIDcgb2YgdGhlIGZpZWxkIFBBR0VOLg0KK0FUOTFDX01DX0ZDTURfUFJPR19BTkRfTE9DSyBFUVUgKDB4MykgOy0gKE1DKSBUaGUgbG9jayBzZXF1ZW5jZSBhdXRvbWF0aWNhbGx5IGhhcHBlbnMgYWZ0ZXIgdGhlIHByb2dyYW1taW5nIHNlcXVlbmNlIGlzIGNvbXBsZXRlZC4NCitBVDkxQ19NQ19GQ01EX1VOTE9DSyAgICAgIEVRVSAoMHg0KSA7LSAoTUMpIFN0YXJ0cyBhbiB1bmxvY2sgc2VxdWVuY2Ugb2YgdGhlIHNlY3RvciBkZWZpbmVkIGJ5IHRoZSBiaXRzIDQgdG8gNyBvZiB0aGUgZmllbGQgUEFHRU4uDQorQVQ5MUNfTUNfRkNNRF9FUkFTRV9BTEwgICBFUVUgKDB4OCkgOy0gKE1DKSBTdGFydHMgdGhlIGVyYXNlIG9mIHRoZSBlbnRpcmUgZmxhc2guSWYgYXQgbGVhc3QgYSBwYWdlIGlzIGxvY2tlZCwgdGhlIGNvbW1hbmQgaXMgY2FuY2VsbGVkLg0KK0FUOTFDX01DX0ZDTURfU0VUX0dQX05WTSAgRVFVICgweEIpIDstIChNQykgU2V0IEdlbmVyYWwgUHVycG9zZSBOVk0gYml0cy4NCitBVDkxQ19NQ19GQ01EX0NMUl9HUF9OVk0gIEVRVSAoMHhEKSA7LSAoTUMpIENsZWFyIEdlbmVyYWwgUHVycG9zZSBOVk0gYml0cy4NCitBVDkxQ19NQ19GQ01EX1NFVF9TRUNVUklUWSBFUVUgKDB4RikgOy0gKE1DKSBTZXQgU2VjdXJpdHkgQml0Lg0KK0FUOTFDX01DX1BBR0VOICAgICAgICAgICAgRVFVICgweDNGRiA8PCAgOCkgOy0gKE1DKSBQYWdlIE51bWJlcg0KK0FUOTFDX01DX0tFWSAgICAgICAgICAgICAgRVFVICgweEZGIDw8IDI0KSA7LSAoTUMpIFdyaXRpbmcgUHJvdGVjdCBLZXkNCisvLyAtIC0tLS0tLS0tIE1DX0ZTUiA6IChNQyBPZmZzZXQ6IDB4NjgpIE1DIEZsYXNoIENvbW1hbmQgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfTUNfU0VDVVJJVFkgICAgICAgICBFUVUgKDB4MSA8PCAgNCkgOy0gKE1DKSBTZWN1cml0eSBCaXQgU3RhdHVzDQorQVQ5MUNfTUNfR1BOVk0wICAgICAgICAgICBFUVUgKDB4MSA8PCAgOCkgOy0gKE1DKSBTZWN0b3IgMCBMb2NrIFN0YXR1cw0KK0FUOTFDX01DX0dQTlZNMSAgICAgICAgICAgRVFVICgweDEgPDwgIDkpIDstIChNQykgU2VjdG9yIDEgTG9jayBTdGF0dXMNCitBVDkxQ19NQ19HUE5WTTIgICAgICAgICAgIEVRVSAoMHgxIDw8IDEwKSA7LSAoTUMpIFNlY3RvciAyIExvY2sgU3RhdHVzDQorQVQ5MUNfTUNfR1BOVk0zICAgICAgICAgICBFUVUgKDB4MSA8PCAxMSkgOy0gKE1DKSBTZWN0b3IgMyBMb2NrIFN0YXR1cw0KK0FUOTFDX01DX0dQTlZNNCAgICAgICAgICAgRVFVICgweDEgPDwgMTIpIDstIChNQykgU2VjdG9yIDQgTG9jayBTdGF0dXMNCitBVDkxQ19NQ19HUE5WTTUgICAgICAgICAgIEVRVSAoMHgxIDw8IDEzKSA7LSAoTUMpIFNlY3RvciA1IExvY2sgU3RhdHVzDQorQVQ5MUNfTUNfR1BOVk02ICAgICAgICAgICBFUVUgKDB4MSA8PCAxNCkgOy0gKE1DKSBTZWN0b3IgNiBMb2NrIFN0YXR1cw0KK0FUOTFDX01DX0dQTlZNNyAgICAgICAgICAgRVFVICgweDEgPDwgMTUpIDstIChNQykgU2VjdG9yIDcgTG9jayBTdGF0dXMNCitBVDkxQ19NQ19MT0NLUzAgICAgICAgICAgIEVRVSAoMHgxIDw8IDE2KSA7LSAoTUMpIFNlY3RvciAwIExvY2sgU3RhdHVzDQorQVQ5MUNfTUNfTE9DS1MxICAgICAgICAgICBFUVUgKDB4MSA8PCAxNykgOy0gKE1DKSBTZWN0b3IgMSBMb2NrIFN0YXR1cw0KK0FUOTFDX01DX0xPQ0tTMiAgICAgICAgICAgRVFVICgweDEgPDwgMTgpIDstIChNQykgU2VjdG9yIDIgTG9jayBTdGF0dXMNCitBVDkxQ19NQ19MT0NLUzMgICAgICAgICAgIEVRVSAoMHgxIDw8IDE5KSA7LSAoTUMpIFNlY3RvciAzIExvY2sgU3RhdHVzDQorQVQ5MUNfTUNfTE9DS1M0ICAgICAgICAgICBFUVUgKDB4MSA8PCAyMCkgOy0gKE1DKSBTZWN0b3IgNCBMb2NrIFN0YXR1cw0KK0FUOTFDX01DX0xPQ0tTNSAgICAgICAgICAgRVFVICgweDEgPDwgMjEpIDstIChNQykgU2VjdG9yIDUgTG9jayBTdGF0dXMNCitBVDkxQ19NQ19MT0NLUzYgICAgICAgICAgIEVRVSAoMHgxIDw8IDIyKSA7LSAoTUMpIFNlY3RvciA2IExvY2sgU3RhdHVzDQorQVQ5MUNfTUNfTE9DS1M3ICAgICAgICAgICBFUVUgKDB4MSA8PCAyMykgOy0gKE1DKSBTZWN0b3IgNyBMb2NrIFN0YXR1cw0KK0FUOTFDX01DX0xPQ0tTOCAgICAgICAgICAgRVFVICgweDEgPDwgMjQpIDstIChNQykgU2VjdG9yIDggTG9jayBTdGF0dXMNCitBVDkxQ19NQ19MT0NLUzkgICAgICAgICAgIEVRVSAoMHgxIDw8IDI1KSA7LSAoTUMpIFNlY3RvciA5IExvY2sgU3RhdHVzDQorQVQ5MUNfTUNfTE9DS1MxMCAgICAgICAgICBFUVUgKDB4MSA8PCAyNikgOy0gKE1DKSBTZWN0b3IgMTAgTG9jayBTdGF0dXMNCitBVDkxQ19NQ19MT0NLUzExICAgICAgICAgIEVRVSAoMHgxIDw8IDI3KSA7LSAoTUMpIFNlY3RvciAxMSBMb2NrIFN0YXR1cw0KK0FUOTFDX01DX0xPQ0tTMTIgICAgICAgICAgRVFVICgweDEgPDwgMjgpIDstIChNQykgU2VjdG9yIDEyIExvY2sgU3RhdHVzDQorQVQ5MUNfTUNfTE9DS1MxMyAgICAgICAgICBFUVUgKDB4MSA8PCAyOSkgOy0gKE1DKSBTZWN0b3IgMTMgTG9jayBTdGF0dXMNCitBVDkxQ19NQ19MT0NLUzE0ICAgICAgICAgIEVRVSAoMHgxIDw8IDMwKSA7LSAoTUMpIFNlY3RvciAxNCBMb2NrIFN0YXR1cw0KK0FUOTFDX01DX0xPQ0tTMTUgICAgICAgICAgRVFVICgweDEgPDwgMzEpIDstIChNQykgU2VjdG9yIDE1IExvY2sgU3RhdHVzDQogDQotLyogLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qIC0gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgU2VyaWFsIFBhcmFsbGVsIEludGVyZmFjZSAqLw0KLS8qIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAtIC0tLS0tLS0tIFNQSV9DUiA6IChTUEkgT2Zmc2V0OiAweDApIFNQSSBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotICAgIEFUOTFDX1NQSV9TUElFTiBFUVUoIDB4MSA8PCAwICk7DQotLSAoIFNQSSApIFNQSSBFbmFibGUNCi0gICAgQVQ5MUNfU1BJX1NQSURJUyBFUVUoIDB4MSA8PCAxICk7DQotLSAoIFNQSSApIFNQSSBEaXNhYmxlDQotICAgIEFUOTFDX1NQSV9TV1JTVCBFUVUoIDB4MSA8PCA3ICk7DQotLSAoIFNQSSApIFNQSSBTb2Z0d2FyZSByZXNldA0KLSAgICBBVDkxQ19TUElfTEFTVFhGRVIgRVFVKCAweDEgPDwgMjQgKTsNCi0tICggU1BJICkgU1BJIExhc3QgVHJhbnNmZXINCi0vKiAtIC0tLS0tLS0tIFNQSV9NUiA6IChTUEkgT2Zmc2V0OiAweDQpIFNQSSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotICAgIEFUOTFDX1NQSV9NU1RSIEVRVSggMHgxIDw8IDAgKTsNCi0tICggU1BJICkgTWFzdGVyIC8gU2xhdmUgTW9kZQ0KLSAgICBBVDkxQ19TUElfUFMgRVFVKCAweDEgPDwgMSApOw0KLS0gKCBTUEkgKSBQZXJpcGhlcmFsIFNlbGVjdA0KLSAgICBBVDkxQ19TUElfUFNfRklYRUQgRVFVKCAweDAgPDwgMSApOw0KLS0gKCBTUEkgKSBGaXhlZCBQZXJpcGhlcmFsIFNlbGVjdA0KLSAgICBBVDkxQ19TUElfUFNfVkFSSUFCTEUgRVFVKCAweDEgPDwgMSApOw0KLS0gKCBTUEkgKSBWYXJpYWJsZSBQZXJpcGhlcmFsIFNlbGVjdA0KLSAgICBBVDkxQ19TUElfUENTREVDIEVRVSggMHgxIDw8IDIgKTsNCi0tICggU1BJICkgQ2hpcCBTZWxlY3QgRGVjb2RlDQotICAgIEFUOTFDX1NQSV9GRElWIEVRVSggMHgxIDw8IDMgKTsNCi0tICggU1BJICkgQ2xvY2sgU2VsZWN0aW9uDQotICAgIEFUOTFDX1NQSV9NT0RGRElTIEVRVSggMHgxIDw8IDQgKTsNCi0tICggU1BJICkgTW9kZSBGYXVsdCBEZXRlY3Rpb24NCi0gICAgQVQ5MUNfU1BJX0xMQiBFUVUoIDB4MSA8PCA3ICk7DQotLSAoIFNQSSApIENsb2NrIFNlbGVjdGlvbg0KLSAgICBBVDkxQ19TUElfUENTIEVRVSggMHhGIDw8IDE2ICk7DQotLSAoIFNQSSApIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QNCi0gICAgQVQ5MUNfU1BJX0RMWUJDUyBFUVUoIDB4RkYgPDwgMjQgKTsNCi0tICggU1BJICkgRGVsYXkgQmV0d2VlbiBDaGlwIFNlbGVjdHMNCi0vKiAtIC0tLS0tLS0tIFNQSV9SRFIgOiAoU1BJIE9mZnNldDogMHg4KSBSZWNlaXZlIERhdGEgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0gICAgQVQ5MUNfU1BJX1JEIEVRVSggMHhGRkZGIDw8IDAgKTsNCi0tICggU1BJICkgUmVjZWl2ZSBEYXRhDQotICAgIEFUOTFDX1NQSV9SUENTIEVRVSggMHhGIDw8IDE2ICk7DQotLSAoIFNQSSApIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgU3RhdHVzDQotLyogLSAtLS0tLS0tLSBTUElfVERSIDogKFNQSSBPZmZzZXQ6IDB4YykgVHJhbnNtaXQgRGF0YSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSAgICBBVDkxQ19TUElfVEQgRVFVKCAweEZGRkYgPDwgMCApOw0KLS0gKCBTUEkgKSBUcmFuc21pdCBEYXRhDQotICAgIEFUOTFDX1NQSV9UUENTIEVRVSggMHhGIDw8IDE2ICk7DQotLSAoIFNQSSApIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgU3RhdHVzDQotLyogLSAtLS0tLS0tLSBTUElfU1IgOiAoU1BJIE9mZnNldDogMHgxMCkgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotICAgIEFUOTFDX1NQSV9SRFJGIEVRVSggMHgxIDw8IDAgKTsNCi0tICggU1BJICkgUmVjZWl2ZSBEYXRhIFJlZ2lzdGVyIEZ1bGwNCi0gICAgQVQ5MUNfU1BJX1REUkUgRVFVKCAweDEgPDwgMSApOw0KLS0gKCBTUEkgKSBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyIEVtcHR5DQotICAgIEFUOTFDX1NQSV9NT0RGIEVRVSggMHgxIDw8IDIgKTsNCi0tICggU1BJICkgTW9kZSBGYXVsdCBFcnJvcg0KLSAgICBBVDkxQ19TUElfT1ZSRVMgRVFVKCAweDEgPDwgMyApOw0KLS0gKCBTUEkgKSBPdmVycnVuIEVycm9yIFN0YXR1cw0KLSAgICBBVDkxQ19TUElfRU5EUlggRVFVKCAweDEgPDwgNCApOw0KLS0gKCBTUEkgKSBFbmQgb2YgUmVjZWl2ZXIgVHJhbnNmZXINCi0gICAgQVQ5MUNfU1BJX0VORFRYIEVRVSggMHgxIDw8IDUgKTsNCi0tICggU1BJICkgRW5kIG9mIFJlY2VpdmVyIFRyYW5zZmVyDQotICAgIEFUOTFDX1NQSV9SWEJVRkYgRVFVKCAweDEgPDwgNiApOw0KLS0gKCBTUEkgKSBSWEJVRkYgSW50ZXJydXB0DQotICAgIEFUOTFDX1NQSV9UWEJVRkUgRVFVKCAweDEgPDwgNyApOw0KLS0gKCBTUEkgKSBUWEJVRkUgSW50ZXJydXB0DQotICAgIEFUOTFDX1NQSV9OU1NSIEVRVSggMHgxIDw8IDggKTsNCi0tICggU1BJICkgTlNTUiBJbnRlcnJ1cHQNCi0gICAgQVQ5MUNfU1BJX1RYRU1QVFkgRVFVKCAweDEgPDwgOSApOw0KLS0gKCBTUEkgKSBUWEVNUFRZIEludGVycnVwdA0KLSAgICBBVDkxQ19TUElfU1BJRU5TIEVRVSggMHgxIDw8IDE2ICk7DQotLSAoIFNQSSApIEVuYWJsZSBTdGF0dXMNCi0vKiAtIC0tLS0tLS0tIFNQSV9JRVIgOiAoU1BJIE9mZnNldDogMHgxNCkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0gLS0tLS0tLS0gU1BJX0lEUiA6IChTUEkgT2Zmc2V0OiAweDE4KSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0gLS0tLS0tLS0gU1BJX0lNUiA6IChTUEkgT2Zmc2V0OiAweDFjKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0gLS0tLS0tLS0gU1BJX0NTUiA6IChTUEkgT2Zmc2V0OiAweDMwKSBDaGlwIFNlbGVjdCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSAgICBBVDkxQ19TUElfQ1BPTCBFUVUoIDB4MSA8PCAwICk7DQotLSAoIFNQSSApIENsb2NrIFBvbGFyaXR5DQotICAgIEFUOTFDX1NQSV9OQ1BIQSBFUVUoIDB4MSA8PCAxICk7DQotLSAoIFNQSSApIENsb2NrIFBoYXNlDQotICAgIEFUOTFDX1NQSV9DU0FBVCBFUVUoIDB4MSA8PCAzICk7DQotLSAoIFNQSSApIENoaXAgU2VsZWN0IEFjdGl2ZSBBZnRlciBUcmFuc2Zlcg0KLSAgICBBVDkxQ19TUElfQklUUyBFUVUoIDB4RiA8PCA0ICk7DQotLSAoIFNQSSApIEJpdHMgUGVyIFRyYW5zZmVyDQotICAgIEFUOTFDX1NQSV9CSVRTXzggRVFVKCAweDAgPDwgNCApOw0KLS0gKCBTUEkgKSA4IEJpdHMgUGVyIHRyYW5zZmVyDQotICAgIEFUOTFDX1NQSV9CSVRTXzkgRVFVKCAweDEgPDwgNCApOw0KLS0gKCBTUEkgKSA5IEJpdHMgUGVyIHRyYW5zZmVyDQotICAgIEFUOTFDX1NQSV9CSVRTXzEwIEVRVSggMHgyIDw8IDQgKTsNCi0tICggU1BJICkgMTAgQml0cyBQZXIgdHJhbnNmZXINCi0gICAgQVQ5MUNfU1BJX0JJVFNfMTEgRVFVKCAweDMgPDwgNCApOw0KLS0gKCBTUEkgKSAxMSBCaXRzIFBlciB0cmFuc2Zlcg0KLSAgICBBVDkxQ19TUElfQklUU18xMiBFUVUoIDB4NCA8PCA0ICk7DQotLSAoIFNQSSApIDEyIEJpdHMgUGVyIHRyYW5zZmVyDQotICAgIEFUOTFDX1NQSV9CSVRTXzEzIEVRVSggMHg1IDw8IDQgKTsNCi0tICggU1BJICkgMTMgQml0cyBQZXIgdHJhbnNmZXINCi0gICAgQVQ5MUNfU1BJX0JJVFNfMTQgRVFVKCAweDYgPDwgNCApOw0KLS0gKCBTUEkgKSAxNCBCaXRzIFBlciB0cmFuc2Zlcg0KLSAgICBBVDkxQ19TUElfQklUU18xNSBFUVUoIDB4NyA8PCA0ICk7DQotLSAoIFNQSSApIDE1IEJpdHMgUGVyIHRyYW5zZmVyDQotICAgIEFUOTFDX1NQSV9CSVRTXzE2IEVRVSggMHg4IDw8IDQgKTsNCi0tICggU1BJICkgMTYgQml0cyBQZXIgdHJhbnNmZXINCi0gICAgQVQ5MUNfU1BJX1NDQlIgRVFVKCAweEZGIDw8IDggKTsNCi0tICggU1BJICkgU2VyaWFsIENsb2NrIEJhdWQgUmF0ZQ0KLSAgICBBVDkxQ19TUElfRExZQlMgRVFVKCAweEZGIDw8IDE2ICk7DQotLSAoIFNQSSApIERlbGF5IEJlZm9yZSBTUENLDQotICAgIEFUOTFDX1NQSV9ETFlCQ1QgRVFVKCAweEZGIDw8IDI0ICk7DQotLSAoIFNQSSApIERlbGF5IEJldHdlZW4gQ29uc2VjdXRpdmUgVHJhbnNmZXJzDQorLy8gLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vIC0gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgU2VyaWFsIFBhcmFsbGVsIEludGVyZmFjZQ0KKy8vIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAtIC0tLS0tLS0tIFNQSV9DUiA6IChTUEkgT2Zmc2V0OiAweDApIFNQSSBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX1NQSV9TUElFTiAgICAgICAgICAgRVFVICgweDEgPDwgIDApIDstIChTUEkpIFNQSSBFbmFibGUNCitBVDkxQ19TUElfU1BJRElTICAgICAgICAgIEVRVSAoMHgxIDw8ICAxKSA7LSAoU1BJKSBTUEkgRGlzYWJsZQ0KK0FUOTFDX1NQSV9TV1JTVCAgICAgICAgICAgRVFVICgweDEgPDwgIDcpIDstIChTUEkpIFNQSSBTb2Z0d2FyZSByZXNldA0KK0FUOTFDX1NQSV9MQVNUWEZFUiAgICAgICAgRVFVICgweDEgPDwgMjQpIDstIChTUEkpIFNQSSBMYXN0IFRyYW5zZmVyDQorLy8gLSAtLS0tLS0tLSBTUElfTVIgOiAoU1BJIE9mZnNldDogMHg0KSBTUEkgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19TUElfTVNUUiAgICAgICAgICAgIEVRVSAoMHgxIDw8ICAwKSA7LSAoU1BJKSBNYXN0ZXIvU2xhdmUgTW9kZQ0KK0FUOTFDX1NQSV9QUyAgICAgICAgICAgICAgRVFVICgweDEgPDwgIDEpIDstIChTUEkpIFBlcmlwaGVyYWwgU2VsZWN0DQorQVQ5MUNfU1BJX1BTX0ZJWEVEICAgICAgICBFUVUgKDB4MCA8PCAgMSkgOy0gKFNQSSkgRml4ZWQgUGVyaXBoZXJhbCBTZWxlY3QNCitBVDkxQ19TUElfUFNfVkFSSUFCTEUgICAgIEVRVSAoMHgxIDw8ICAxKSA7LSAoU1BJKSBWYXJpYWJsZSBQZXJpcGhlcmFsIFNlbGVjdA0KK0FUOTFDX1NQSV9QQ1NERUMgICAgICAgICAgRVFVICgweDEgPDwgIDIpIDstIChTUEkpIENoaXAgU2VsZWN0IERlY29kZQ0KK0FUOTFDX1NQSV9GRElWICAgICAgICAgICAgRVFVICgweDEgPDwgIDMpIDstIChTUEkpIENsb2NrIFNlbGVjdGlvbg0KK0FUOTFDX1NQSV9NT0RGRElTICAgICAgICAgRVFVICgweDEgPDwgIDQpIDstIChTUEkpIE1vZGUgRmF1bHQgRGV0ZWN0aW9uDQorQVQ5MUNfU1BJX0xMQiAgICAgICAgICAgICBFUVUgKDB4MSA8PCAgNykgOy0gKFNQSSkgQ2xvY2sgU2VsZWN0aW9uDQorQVQ5MUNfU1BJX1BDUyAgICAgICAgICAgICBFUVUgKDB4RiA8PCAxNikgOy0gKFNQSSkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdA0KK0FUOTFDX1NQSV9ETFlCQ1MgICAgICAgICAgRVFVICgweEZGIDw8IDI0KSA7LSAoU1BJKSBEZWxheSBCZXR3ZWVuIENoaXAgU2VsZWN0cw0KKy8vIC0gLS0tLS0tLS0gU1BJX1JEUiA6IChTUEkgT2Zmc2V0OiAweDgpIFJlY2VpdmUgRGF0YSBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19TUElfUkQgICAgICAgICAgICAgIEVRVSAoMHhGRkZGIDw8ICAwKSA7LSAoU1BJKSBSZWNlaXZlIERhdGENCitBVDkxQ19TUElfUlBDUyAgICAgICAgICAgIEVRVSAoMHhGIDw8IDE2KSA7LSAoU1BJKSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IFN0YXR1cw0KKy8vIC0gLS0tLS0tLS0gU1BJX1REUiA6IChTUEkgT2Zmc2V0OiAweGMpIFRyYW5zbWl0IERhdGEgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfU1BJX1REICAgICAgICAgICAgICBFUVUgKDB4RkZGRiA8PCAgMCkgOy0gKFNQSSkgVHJhbnNtaXQgRGF0YQ0KK0FUOTFDX1NQSV9UUENTICAgICAgICAgICAgRVFVICgweEYgPDwgMTYpIDstIChTUEkpIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgU3RhdHVzDQorLy8gLSAtLS0tLS0tLSBTUElfU1IgOiAoU1BJIE9mZnNldDogMHgxMCkgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX1NQSV9SRFJGICAgICAgICAgICAgRVFVICgweDEgPDwgIDApIDstIChTUEkpIFJlY2VpdmUgRGF0YSBSZWdpc3RlciBGdWxsDQorQVQ5MUNfU1BJX1REUkUgICAgICAgICAgICBFUVUgKDB4MSA8PCAgMSkgOy0gKFNQSSkgVHJhbnNtaXQgRGF0YSBSZWdpc3RlciBFbXB0eQ0KK0FUOTFDX1NQSV9NT0RGICAgICAgICAgICAgRVFVICgweDEgPDwgIDIpIDstIChTUEkpIE1vZGUgRmF1bHQgRXJyb3INCitBVDkxQ19TUElfT1ZSRVMgICAgICAgICAgIEVRVSAoMHgxIDw8ICAzKSA7LSAoU1BJKSBPdmVycnVuIEVycm9yIFN0YXR1cw0KK0FUOTFDX1NQSV9FTkRSWCAgICAgICAgICAgRVFVICgweDEgPDwgIDQpIDstIChTUEkpIEVuZCBvZiBSZWNlaXZlciBUcmFuc2Zlcg0KK0FUOTFDX1NQSV9FTkRUWCAgICAgICAgICAgRVFVICgweDEgPDwgIDUpIDstIChTUEkpIEVuZCBvZiBSZWNlaXZlciBUcmFuc2Zlcg0KK0FUOTFDX1NQSV9SWEJVRkYgICAgICAgICAgRVFVICgweDEgPDwgIDYpIDstIChTUEkpIFJYQlVGRiBJbnRlcnJ1cHQNCitBVDkxQ19TUElfVFhCVUZFICAgICAgICAgIEVRVSAoMHgxIDw8ICA3KSA7LSAoU1BJKSBUWEJVRkUgSW50ZXJydXB0DQorQVQ5MUNfU1BJX05TU1IgICAgICAgICAgICBFUVUgKDB4MSA8PCAgOCkgOy0gKFNQSSkgTlNTUiBJbnRlcnJ1cHQNCitBVDkxQ19TUElfVFhFTVBUWSAgICAgICAgIEVRVSAoMHgxIDw8ICA5KSA7LSAoU1BJKSBUWEVNUFRZIEludGVycnVwdA0KK0FUOTFDX1NQSV9TUElFTlMgICAgICAgICAgRVFVICgweDEgPDwgMTYpIDstIChTUEkpIEVuYWJsZSBTdGF0dXMNCisvLyAtIC0tLS0tLS0tIFNQSV9JRVIgOiAoU1BJIE9mZnNldDogMHgxNCkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtIC0tLS0tLS0tIFNQSV9JRFIgOiAoU1BJIE9mZnNldDogMHgxOCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLSAtLS0tLS0tLSBTUElfSU1SIDogKFNQSSBPZmZzZXQ6IDB4MWMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0gLS0tLS0tLS0gU1BJX0NTUiA6IChTUEkgT2Zmc2V0OiAweDMwKSBDaGlwIFNlbGVjdCBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19TUElfQ1BPTCAgICAgICAgICAgIEVRVSAoMHgxIDw8ICAwKSA7LSAoU1BJKSBDbG9jayBQb2xhcml0eQ0KK0FUOTFDX1NQSV9OQ1BIQSAgICAgICAgICAgRVFVICgweDEgPDwgIDEpIDstIChTUEkpIENsb2NrIFBoYXNlDQorQVQ5MUNfU1BJX0NTQUFUICAgICAgICAgICBFUVUgKDB4MSA8PCAgMykgOy0gKFNQSSkgQ2hpcCBTZWxlY3QgQWN0aXZlIEFmdGVyIFRyYW5zZmVyDQorQVQ5MUNfU1BJX0JJVFMgICAgICAgICAgICBFUVUgKDB4RiA8PCAgNCkgOy0gKFNQSSkgQml0cyBQZXIgVHJhbnNmZXINCitBVDkxQ19TUElfQklUU184ICAgICAgICAgIEVRVSAoMHgwIDw8ICA0KSA7LSAoU1BJKSA4IEJpdHMgUGVyIHRyYW5zZmVyDQorQVQ5MUNfU1BJX0JJVFNfOSAgICAgICAgICBFUVUgKDB4MSA8PCAgNCkgOy0gKFNQSSkgOSBCaXRzIFBlciB0cmFuc2Zlcg0KK0FUOTFDX1NQSV9CSVRTXzEwICAgICAgICAgRVFVICgweDIgPDwgIDQpIDstIChTUEkpIDEwIEJpdHMgUGVyIHRyYW5zZmVyDQorQVQ5MUNfU1BJX0JJVFNfMTEgICAgICAgICBFUVUgKDB4MyA8PCAgNCkgOy0gKFNQSSkgMTEgQml0cyBQZXIgdHJhbnNmZXINCitBVDkxQ19TUElfQklUU18xMiAgICAgICAgIEVRVSAoMHg0IDw8ICA0KSA7LSAoU1BJKSAxMiBCaXRzIFBlciB0cmFuc2Zlcg0KK0FUOTFDX1NQSV9CSVRTXzEzICAgICAgICAgRVFVICgweDUgPDwgIDQpIDstIChTUEkpIDEzIEJpdHMgUGVyIHRyYW5zZmVyDQorQVQ5MUNfU1BJX0JJVFNfMTQgICAgICAgICBFUVUgKDB4NiA8PCAgNCkgOy0gKFNQSSkgMTQgQml0cyBQZXIgdHJhbnNmZXINCitBVDkxQ19TUElfQklUU18xNSAgICAgICAgIEVRVSAoMHg3IDw8ICA0KSA7LSAoU1BJKSAxNSBCaXRzIFBlciB0cmFuc2Zlcg0KK0FUOTFDX1NQSV9CSVRTXzE2ICAgICAgICAgRVFVICgweDggPDwgIDQpIDstIChTUEkpIDE2IEJpdHMgUGVyIHRyYW5zZmVyDQorQVQ5MUNfU1BJX1NDQlIgICAgICAgICAgICBFUVUgKDB4RkYgPDwgIDgpIDstIChTUEkpIFNlcmlhbCBDbG9jayBCYXVkIFJhdGUNCitBVDkxQ19TUElfRExZQlMgICAgICAgICAgIEVRVSAoMHhGRiA8PCAxNikgOy0gKFNQSSkgRGVsYXkgQmVmb3JlIFNQQ0sNCitBVDkxQ19TUElfRExZQkNUICAgICAgICAgIEVRVSAoMHhGRiA8PCAyNCkgOy0gKFNQSSkgRGVsYXkgQmV0d2VlbiBDb25zZWN1dGl2ZSBUcmFuc2ZlcnMNCiANCi0vKiAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogLSAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBVc2FydCAqLw0KLS8qIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAtIC0tLS0tLS0tIFVTX0NSIDogKFVTQVJUIE9mZnNldDogMHgwKSBEZWJ1ZyBVbml0IENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0gICAgQVQ5MUNfVVNfU1RUQlJLIEVRVSggMHgxIDw8IDkgKTsNCi0tICggVVNBUlQgKSBTdGFydCBCcmVhaw0KLSAgICBBVDkxQ19VU19TVFBCUksgRVFVKCAweDEgPDwgMTAgKTsNCi0tICggVVNBUlQgKSBTdG9wIEJyZWFrDQotICAgIEFUOTFDX1VTX1NUVFRPIEVRVSggMHgxIDw8IDExICk7DQotLSAoIFVTQVJUICkgU3RhcnQgVGltZSAtIG91dA0KLSAgICBBVDkxQ19VU19TRU5EQSBFUVUoIDB4MSA8PCAxMiApOw0KLS0gKCBVU0FSVCApIFNlbmQgQWRkcmVzcw0KLSAgICBBVDkxQ19VU19SU1RJVCBFUVUoIDB4MSA8PCAxMyApOw0KLS0gKCBVU0FSVCApIFJlc2V0IEl0ZXJhdGlvbnMNCi0gICAgQVQ5MUNfVVNfUlNUTkFDSyBFUVUoIDB4MSA8PCAxNCApOw0KLS0gKCBVU0FSVCApIFJlc2V0IE5vbiBBY2tub3dsZWRnZQ0KLSAgICBBVDkxQ19VU19SRVRUTyBFUVUoIDB4MSA8PCAxNSApOw0KLS0gKCBVU0FSVCApIFJlYXJtIFRpbWUgLSBvdXQNCi0gICAgQVQ5MUNfVVNfRFRSRU4gRVFVKCAweDEgPDwgMTYgKTsNCi0tICggVVNBUlQgKSBEYXRhIFRlcm1pbmFsIHJlYWR5IEVuYWJsZQ0KLSAgICBBVDkxQ19VU19EVFJESVMgRVFVKCAweDEgPDwgMTcgKTsNCi0tICggVVNBUlQgKSBEYXRhIFRlcm1pbmFsIHJlYWR5IERpc2FibGUNCi0gICAgQVQ5MUNfVVNfUlRTRU4gRVFVKCAweDEgPDwgMTggKTsNCi0tICggVVNBUlQgKSBSZXF1ZXN0IHRvIFNlbmQgZW5hYmxlDQotICAgIEFUOTFDX1VTX1JUU0RJUyBFUVUoIDB4MSA8PCAxOSApOw0KLS0gKCBVU0FSVCApIFJlcXVlc3QgdG8gU2VuZCBEaXNhYmxlDQotLyogLSAtLS0tLS0tLSBVU19NUiA6IChVU0FSVCBPZmZzZXQ6IDB4NCkgRGVidWcgVW5pdCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotICAgIEFUOTFDX1VTX1VTTU9ERSBFUVUoIDB4RiA8PCAwICk7DQotLSAoIFVTQVJUICkgVXNhcnQgbW9kZQ0KLSAgICBBVDkxQ19VU19VU01PREVfTk9STUFMIEVRVSggMHgwICk7DQotLSAoIFVTQVJUICkgTm9ybWFsDQotICAgIEFUOTFDX1VTX1VTTU9ERV9SUzQ4NSBFUVUoIDB4MSApOw0KLS0gKCBVU0FSVCApIFJTNDg1DQotICAgIEFUOTFDX1VTX1VTTU9ERV9IV0hTSCBFUVUoIDB4MiApOw0KLS0gKCBVU0FSVCApIEhhcmR3YXJlIEhhbmRzaGFraW5nDQotICAgIEFUOTFDX1VTX1VTTU9ERV9NT0RFTSBFUVUoIDB4MyApOw0KLS0gKCBVU0FSVCApIE1vZGVtDQotICAgIEFUOTFDX1VTX1VTTU9ERV9JU083ODE2XzAgRVFVKCAweDQgKTsNCi0tICggVVNBUlQgKSBJU083ODE2IHByb3RvY29sOiBUID0gMA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19VU01PREVfSVNPNzgxNl8xIEVRVSggMHg2ICk7DQotLSAoIFVTQVJUICkgSVNPNzgxNiBwcm90b2NvbDogVCA9IDENCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfVVNNT0RFX0lSREEgRVFVKCAweDggKTsNCi0tICggVVNBUlQgKSBJckRBDQotICAgIEFUOTFDX1VTX1VTTU9ERV9TV0hTSCBFUVUoIDB4QyApOw0KLS0gKCBVU0FSVCApIFNvZnR3YXJlIEhhbmRzaGFraW5nDQotICAgIEFUOTFDX1VTX0NMS1MgRVFVKCAweDMgPDwgNCApOw0KLS0gKCBVU0FSVCApIENsb2NrIFNlbGVjdGlvbiAoIEJhdWQgUmF0ZSBnZW5lcmF0b3IgSW5wdXQgQ2xvY2sNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19DTEtTX0NMT0NLIEVRVSggMHgwIDw8IDQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBVU0FSVCApIENsb2NrDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfQ0xLU19GRElWMSBFUVUoIDB4MSA8PCA0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVVNBUlQgKSBmZGl2MQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX0NMS1NfU0xPVyBFUVUoIDB4MiA8PCA0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVVNBUlQgKSBzbG93X2Nsb2NrKCBBUk0gKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX0NMS1NfRVhUIEVRVSggMHgzIDw8IDQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBVU0FSVCApIEV4dGVybmFsKCBTQ0sgKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX0NIUkwgRVFVKCAweDMgPDwgNiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFVTQVJUICkgQ2xvY2sgU2VsZWN0aW9uICggQmF1ZCBSYXRlIGdlbmVyYXRvciBJbnB1dCBDbG9jaw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfQ0hSTF81X0JJVFMgRVFVKCAweDAgPDwgNiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVVNBUlQgKSBDaGFyYWN0ZXIgTGVuZ3RoIDogNSBiaXRzDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19DSFJMXzZfQklUUyBFUVUoIDB4MSA8PCA2ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBVU0FSVCApIENoYXJhY3RlciBMZW5ndGggOiA2IGJpdHMNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX0NIUkxfN19CSVRTIEVRVSggMHgyIDw8IDYgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFVTQVJUICkgQ2hhcmFjdGVyIExlbmd0aCA6IDcgYml0cw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfQ0hSTF84X0JJVFMgRVFVKCAweDMgPDwgNiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVVNBUlQgKSBDaGFyYWN0ZXIgTGVuZ3RoIDogOCBiaXRzDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19TWU5DIEVRVSggMHgxIDw8IDggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFVTQVJUICkgU3luY2hyb25vdXMgTW9kZSBTZWxlY3QNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX05CU1RPUCBFUVUoIDB4MyA8PCAxMiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVVNBUlQgKSBOdW1iZXIgb2YgU3RvcCBiaXRzDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19OQlNUT1BfMV9CSVQgRVFVKCAweDAgPDwgMTIgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFVTQVJUICkgMSBzdG9wIGJpdA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfTkJTVE9QXzE1X0JJVCBFUVUoIDB4MSA8PCAxMiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVVNBUlQgKSBBc3luY2hyb25vdXMoIFNZTkMgPSAwICkgMiBzdG9wIGJpdHMgU3luY2hyb25vdXMoIFNZTkMgPSAxICkgMiBzdG9wIGJpdHMNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX05CU1RPUF8yX0JJVCBFUVUoIDB4MiA8PCAxMiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVVNBUlQgKSAyIHN0b3AgYml0cw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfTVNCRiBFUVUoIDB4MSA8PCAxNiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVVNBUlQgKSBCaXQgT3JkZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX01PREU5IEVRVSggMHgxIDw8IDE3ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBVU0FSVCApIDkgLSBiaXQgQ2hhcmFjdGVyIGxlbmd0aA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfQ0tMTyBFUVUoIDB4MSA8PCAxOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVVNBUlQgKSBDbG9jayBPdXRwdXQgU2VsZWN0DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19PVkVSIEVRVSggMHgxIDw8IDE5ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBVU0FSVCApIE92ZXIgU2FtcGxpbmcgTW9kZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfSU5BQ0sgRVFVKCAweDEgPDwgMjAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFVTQVJUICkgSW5oaWJpdCBOb24gQWNrbm93bGVkZ2UNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX0RTTkFDSyBFUVUoIDB4MSA8PCAyMSApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVVNBUlQgKSBEaXNhYmxlIFN1Y2Nlc3NpdmUgTkFDSw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfTUFYX0lURVIgRVFVKCAweDEgPDwgMjQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFVTQVJUICkgTnVtYmVyIG9mIFJlcGV0aXRpb25zDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19GSUxURVIgRVFVKCAweDEgPDwgMjggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFVTQVJUICkgUmVjZWl2ZSBMaW5lIEZpbHRlcg0KLS8qIC0gLS0tLS0tLS0gVVNfSUVSIDogKFVTQVJUIE9mZnNldDogMHg4KSBEZWJ1ZyBVbml0IEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX1JYQlJLIEVRVSggMHgxIDw8IDIgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFVTQVJUICkgQnJlYWsgUmVjZWl2ZWQgLyBFbmQgb2YgQnJlYWsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX1RJTUVPVVQgRVFVKCAweDEgPDwgOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVVNBUlQgKSBSZWNlaXZlciBUaW1lIC0gb3V0DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19JVEVSQVRJT04gRVFVKCAweDEgPDwgMTAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFVTQVJUICkgTWF4IG51bWJlciBvZiBSZXBldGl0aW9ucyBSZWFjaGVkDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19OQUNLIEVRVSggMHgxIDw8IDEzICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBVU0FSVCApIE5vbiBBY2tub3dsZWRnZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfUklJQyBFUVUoIDB4MSA8PCAxNiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVVNBUlQgKSBSaW5nIElOZGljYXRvciBJbnB1dCBDaGFuZ2UgRmxhZw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfRFNSSUMgRVFVKCAweDEgPDwgMTcgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFVTQVJUICkgRGF0YSBTZXQgUmVhZHkgSW5wdXQgQ2hhbmdlIEZsYWcNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX0RDRElDIEVRVSggMHgxIDw8IDE4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBVU0FSVCApIERhdGEgQ2FycmllciBGbGFnDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19DVFNJQyBFUVUoIDB4MSA8PCAxOSApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVVNBUlQgKSBDbGVhciBUbyBTZW5kIElucHV0IENoYW5nZSBGbGFnDQotLyogLSAtLS0tLS0tLSBVU19JRFIgOiAoVVNBUlQgT2Zmc2V0OiAweGMpIERlYnVnIFVuaXQgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtIC0tLS0tLS0tIFVTX0lNUiA6IChVU0FSVCBPZmZzZXQ6IDB4MTApIERlYnVnIFVuaXQgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtIC0tLS0tLS0tIFVTX0NTUiA6IChVU0FSVCBPZmZzZXQ6IDB4MTQpIERlYnVnIFVuaXQgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX1JJIEVRVSggMHgxIDw8IDIwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBVU0FSVCApIEltYWdlIG9mIFJJIElucHV0DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19EU1IgRVFVKCAweDEgPDwgMjEgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFVTQVJUICkgSW1hZ2Ugb2YgRFNSIElucHV0DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19EQ0QgRVFVKCAweDEgPDwgMjIgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFVTQVJUICkgSW1hZ2Ugb2YgRENEIElucHV0DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19DVFMgRVFVKCAweDEgPDwgMjMgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFVTQVJUICkgSW1hZ2Ugb2YgQ1RTIElucHV0DQorLy8gLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vIC0gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVXNhcnQNCisvLyAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gLSAtLS0tLS0tLSBVU19DUiA6IChVU0FSVCBPZmZzZXQ6IDB4MCkgRGVidWcgVW5pdCBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX1VTX1NUVEJSSyAgICAgICAgICAgRVFVICgweDEgPDwgIDkpIDstIChVU0FSVCkgU3RhcnQgQnJlYWsNCitBVDkxQ19VU19TVFBCUksgICAgICAgICAgIEVRVSAoMHgxIDw8IDEwKSA7LSAoVVNBUlQpIFN0b3AgQnJlYWsNCitBVDkxQ19VU19TVFRUTyAgICAgICAgICAgIEVRVSAoMHgxIDw8IDExKSA7LSAoVVNBUlQpIFN0YXJ0IFRpbWUtb3V0DQorQVQ5MUNfVVNfU0VOREEgICAgICAgICAgICBFUVUgKDB4MSA8PCAxMikgOy0gKFVTQVJUKSBTZW5kIEFkZHJlc3MNCitBVDkxQ19VU19SU1RJVCAgICAgICAgICAgIEVRVSAoMHgxIDw8IDEzKSA7LSAoVVNBUlQpIFJlc2V0IEl0ZXJhdGlvbnMNCitBVDkxQ19VU19SU1ROQUNLICAgICAgICAgIEVRVSAoMHgxIDw8IDE0KSA7LSAoVVNBUlQpIFJlc2V0IE5vbiBBY2tub3dsZWRnZQ0KK0FUOTFDX1VTX1JFVFRPICAgICAgICAgICAgRVFVICgweDEgPDwgMTUpIDstIChVU0FSVCkgUmVhcm0gVGltZS1vdXQNCitBVDkxQ19VU19EVFJFTiAgICAgICAgICAgIEVRVSAoMHgxIDw8IDE2KSA7LSAoVVNBUlQpIERhdGEgVGVybWluYWwgcmVhZHkgRW5hYmxlDQorQVQ5MUNfVVNfRFRSRElTICAgICAgICAgICBFUVUgKDB4MSA8PCAxNykgOy0gKFVTQVJUKSBEYXRhIFRlcm1pbmFsIHJlYWR5IERpc2FibGUNCitBVDkxQ19VU19SVFNFTiAgICAgICAgICAgIEVRVSAoMHgxIDw8IDE4KSA7LSAoVVNBUlQpIFJlcXVlc3QgdG8gU2VuZCBlbmFibGUNCitBVDkxQ19VU19SVFNESVMgICAgICAgICAgIEVRVSAoMHgxIDw8IDE5KSA7LSAoVVNBUlQpIFJlcXVlc3QgdG8gU2VuZCBEaXNhYmxlDQorLy8gLSAtLS0tLS0tLSBVU19NUiA6IChVU0FSVCBPZmZzZXQ6IDB4NCkgRGVidWcgVW5pdCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX1VTX1VTTU9ERSAgICAgICAgICAgRVFVICgweEYgPDwgIDApIDstIChVU0FSVCkgVXNhcnQgbW9kZQ0KK0FUOTFDX1VTX1VTTU9ERV9OT1JNQUwgICAgRVFVICgweDApIDstIChVU0FSVCkgTm9ybWFsDQorQVQ5MUNfVVNfVVNNT0RFX1JTNDg1ICAgICBFUVUgKDB4MSkgOy0gKFVTQVJUKSBSUzQ4NQ0KK0FUOTFDX1VTX1VTTU9ERV9IV0hTSCAgICAgRVFVICgweDIpIDstIChVU0FSVCkgSGFyZHdhcmUgSGFuZHNoYWtpbmcNCitBVDkxQ19VU19VU01PREVfTU9ERU0gICAgIEVRVSAoMHgzKSA7LSAoVVNBUlQpIE1vZGVtDQorQVQ5MUNfVVNfVVNNT0RFX0lTTzc4MTZfMCBFUVUgKDB4NCkgOy0gKFVTQVJUKSBJU083ODE2IHByb3RvY29sOiBUID0gMA0KK0FUOTFDX1VTX1VTTU9ERV9JU083ODE2XzEgRVFVICgweDYpIDstIChVU0FSVCkgSVNPNzgxNiBwcm90b2NvbDogVCA9IDENCitBVDkxQ19VU19VU01PREVfSVJEQSAgICAgIEVRVSAoMHg4KSA7LSAoVVNBUlQpIElyREENCitBVDkxQ19VU19VU01PREVfU1dIU0ggICAgIEVRVSAoMHhDKSA7LSAoVVNBUlQpIFNvZnR3YXJlIEhhbmRzaGFraW5nDQorQVQ5MUNfVVNfQ0xLUyAgICAgICAgICAgICBFUVUgKDB4MyA8PCAgNCkgOy0gKFVTQVJUKSBDbG9jayBTZWxlY3Rpb24gKEJhdWQgUmF0ZSBnZW5lcmF0b3IgSW5wdXQgQ2xvY2sNCitBVDkxQ19VU19DTEtTX0NMT0NLICAgICAgIEVRVSAoMHgwIDw8ICA0KSA7LSAoVVNBUlQpIENsb2NrDQorQVQ5MUNfVVNfQ0xLU19GRElWMSAgICAgICBFUVUgKDB4MSA8PCAgNCkgOy0gKFVTQVJUKSBmZGl2MQ0KK0FUOTFDX1VTX0NMS1NfU0xPVyAgICAgICAgRVFVICgweDIgPDwgIDQpIDstIChVU0FSVCkgc2xvd19jbG9jayAoQVJNKQ0KK0FUOTFDX1VTX0NMS1NfRVhUICAgICAgICAgRVFVICgweDMgPDwgIDQpIDstIChVU0FSVCkgRXh0ZXJuYWwgKFNDSykNCitBVDkxQ19VU19DSFJMICAgICAgICAgICAgIEVRVSAoMHgzIDw8ICA2KSA7LSAoVVNBUlQpIENsb2NrIFNlbGVjdGlvbiAoQmF1ZCBSYXRlIGdlbmVyYXRvciBJbnB1dCBDbG9jaw0KK0FUOTFDX1VTX0NIUkxfNV9CSVRTICAgICAgRVFVICgweDAgPDwgIDYpIDstIChVU0FSVCkgQ2hhcmFjdGVyIExlbmd0aDogNSBiaXRzDQorQVQ5MUNfVVNfQ0hSTF82X0JJVFMgICAgICBFUVUgKDB4MSA8PCAgNikgOy0gKFVTQVJUKSBDaGFyYWN0ZXIgTGVuZ3RoOiA2IGJpdHMNCitBVDkxQ19VU19DSFJMXzdfQklUUyAgICAgIEVRVSAoMHgyIDw8ICA2KSA7LSAoVVNBUlQpIENoYXJhY3RlciBMZW5ndGg6IDcgYml0cw0KK0FUOTFDX1VTX0NIUkxfOF9CSVRTICAgICAgRVFVICgweDMgPDwgIDYpIDstIChVU0FSVCkgQ2hhcmFjdGVyIExlbmd0aDogOCBiaXRzDQorQVQ5MUNfVVNfU1lOQyAgICAgICAgICAgICBFUVUgKDB4MSA8PCAgOCkgOy0gKFVTQVJUKSBTeW5jaHJvbm91cyBNb2RlIFNlbGVjdA0KK0FUOTFDX1VTX05CU1RPUCAgICAgICAgICAgRVFVICgweDMgPDwgMTIpIDstIChVU0FSVCkgTnVtYmVyIG9mIFN0b3AgYml0cw0KK0FUOTFDX1VTX05CU1RPUF8xX0JJVCAgICAgRVFVICgweDAgPDwgMTIpIDstIChVU0FSVCkgMSBzdG9wIGJpdA0KK0FUOTFDX1VTX05CU1RPUF8xNV9CSVQgICAgRVFVICgweDEgPDwgMTIpIDstIChVU0FSVCkgQXN5bmNocm9ub3VzIChTWU5DPTApIDIgc3RvcCBiaXRzIFN5bmNocm9ub3VzIChTWU5DPTEpIDIgc3RvcCBiaXRzDQorQVQ5MUNfVVNfTkJTVE9QXzJfQklUICAgICBFUVUgKDB4MiA8PCAxMikgOy0gKFVTQVJUKSAyIHN0b3AgYml0cw0KK0FUOTFDX1VTX01TQkYgICAgICAgICAgICAgRVFVICgweDEgPDwgMTYpIDstIChVU0FSVCkgQml0IE9yZGVyDQorQVQ5MUNfVVNfTU9ERTkgICAgICAgICAgICBFUVUgKDB4MSA8PCAxNykgOy0gKFVTQVJUKSA5LWJpdCBDaGFyYWN0ZXIgbGVuZ3RoDQorQVQ5MUNfVVNfQ0tMTyAgICAgICAgICAgICBFUVUgKDB4MSA8PCAxOCkgOy0gKFVTQVJUKSBDbG9jayBPdXRwdXQgU2VsZWN0DQorQVQ5MUNfVVNfT1ZFUiAgICAgICAgICAgICBFUVUgKDB4MSA8PCAxOSkgOy0gKFVTQVJUKSBPdmVyIFNhbXBsaW5nIE1vZGUNCitBVDkxQ19VU19JTkFDSyAgICAgICAgICAgIEVRVSAoMHgxIDw8IDIwKSA7LSAoVVNBUlQpIEluaGliaXQgTm9uIEFja25vd2xlZGdlDQorQVQ5MUNfVVNfRFNOQUNLICAgICAgICAgICBFUVUgKDB4MSA8PCAyMSkgOy0gKFVTQVJUKSBEaXNhYmxlIFN1Y2Nlc3NpdmUgTkFDSw0KK0FUOTFDX1VTX01BWF9JVEVSICAgICAgICAgRVFVICgweDEgPDwgMjQpIDstIChVU0FSVCkgTnVtYmVyIG9mIFJlcGV0aXRpb25zDQorQVQ5MUNfVVNfRklMVEVSICAgICAgICAgICBFUVUgKDB4MSA8PCAyOCkgOy0gKFVTQVJUKSBSZWNlaXZlIExpbmUgRmlsdGVyDQorLy8gLSAtLS0tLS0tLSBVU19JRVIgOiAoVVNBUlQgT2Zmc2V0OiAweDgpIERlYnVnIFVuaXQgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19VU19SWEJSSyAgICAgICAgICAgIEVRVSAoMHgxIDw8ICAyKSA7LSAoVVNBUlQpIEJyZWFrIFJlY2VpdmVkL0VuZCBvZiBCcmVhaw0KK0FUOTFDX1VTX1RJTUVPVVQgICAgICAgICAgRVFVICgweDEgPDwgIDgpIDstIChVU0FSVCkgUmVjZWl2ZXIgVGltZS1vdXQNCitBVDkxQ19VU19JVEVSQVRJT04gICAgICAgIEVRVSAoMHgxIDw8IDEwKSA7LSAoVVNBUlQpIE1heCBudW1iZXIgb2YgUmVwZXRpdGlvbnMgUmVhY2hlZA0KK0FUOTFDX1VTX05BQ0sgICAgICAgICAgICAgRVFVICgweDEgPDwgMTMpIDstIChVU0FSVCkgTm9uIEFja25vd2xlZGdlDQorQVQ5MUNfVVNfUklJQyAgICAgICAgICAgICBFUVUgKDB4MSA8PCAxNikgOy0gKFVTQVJUKSBSaW5nIElOZGljYXRvciBJbnB1dCBDaGFuZ2UgRmxhZw0KK0FUOTFDX1VTX0RTUklDICAgICAgICAgICAgRVFVICgweDEgPDwgMTcpIDstIChVU0FSVCkgRGF0YSBTZXQgUmVhZHkgSW5wdXQgQ2hhbmdlIEZsYWcNCitBVDkxQ19VU19EQ0RJQyAgICAgICAgICAgIEVRVSAoMHgxIDw8IDE4KSA7LSAoVVNBUlQpIERhdGEgQ2FycmllciBGbGFnDQorQVQ5MUNfVVNfQ1RTSUMgICAgICAgICAgICBFUVUgKDB4MSA8PCAxOSkgOy0gKFVTQVJUKSBDbGVhciBUbyBTZW5kIElucHV0IENoYW5nZSBGbGFnDQorLy8gLSAtLS0tLS0tLSBVU19JRFIgOiAoVVNBUlQgT2Zmc2V0OiAweGMpIERlYnVnIFVuaXQgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLSAtLS0tLS0tLSBVU19JTVIgOiAoVVNBUlQgT2Zmc2V0OiAweDEwKSBEZWJ1ZyBVbml0IEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0gLS0tLS0tLS0gVVNfQ1NSIDogKFVTQVJUIE9mZnNldDogMHgxNCkgRGVidWcgVW5pdCBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19VU19SSSAgICAgICAgICAgICAgIEVRVSAoMHgxIDw8IDIwKSA7LSAoVVNBUlQpIEltYWdlIG9mIFJJIElucHV0DQorQVQ5MUNfVVNfRFNSICAgICAgICAgICAgICBFUVUgKDB4MSA8PCAyMSkgOy0gKFVTQVJUKSBJbWFnZSBvZiBEU1IgSW5wdXQNCitBVDkxQ19VU19EQ0QgICAgICAgICAgICAgIEVRVSAoMHgxIDw8IDIyKSA7LSAoVVNBUlQpIEltYWdlIG9mIERDRCBJbnB1dA0KK0FUOTFDX1VTX0NUUyAgICAgICAgICAgICAgRVFVICgweDEgPDwgMjMpIDstIChVU0FSVCkgSW1hZ2Ugb2YgQ1RTIElucHV0DQogDQotLyogLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qIC0gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgU3luY2hyb25vdXMgU2VyaWFsIENvbnRyb2xsZXIgSW50ZXJmYWNlICovDQotLyogLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qIC0gLS0tLS0tLS0gU1NDX0NSIDogKFNTQyBPZmZzZXQ6IDB4MCkgU1NDIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1NTQ19SWEVOIEVRVSggMHgxIDw8IDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFNTQyApIFJlY2VpdmUgRW5hYmxlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19TU0NfUlhESVMgRVFVKCAweDEgPDwgMSApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggU1NDICkgUmVjZWl2ZSBEaXNhYmxlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19TU0NfVFhFTiBFUVUoIDB4MSA8PCA4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBTU0MgKSBUcmFuc21pdCBFbmFibGUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1NTQ19UWERJUyBFUVUoIDB4MSA8PCA5ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBTU0MgKSBUcmFuc21pdCBEaXNhYmxlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19TU0NfU1dSU1QgRVFVKCAweDEgPDwgMTUgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFNTQyApIFNvZnR3YXJlIFJlc2V0DQotLyogLSAtLS0tLS0tLSBTU0NfUkNNUiA6IChTU0MgT2Zmc2V0OiAweDEwKSBTU0MgUmVjZWl2ZSBDbG9jayBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19TU0NfQ0tTIEVRVSggMHgzIDw8IDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFNTQyApIFJlY2VpdmUgLyBUcmFuc21pdCBDbG9jayBTZWxlY3Rpb24NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1NTQ19DS1NfRElWIEVRVSggMHgwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBTU0MgKSBEaXZpZGVkIENsb2NrDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19TU0NfQ0tTX1RLIEVRVSggMHgxICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBTU0MgKSBUSyBDbG9jayBzaWduYWwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1NTQ19DS1NfUksgRVFVKCAweDIgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFNTQyApIFJLIHBpbg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfU1NDX0NLTyBFUVUoIDB4NyA8PCAyICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBTU0MgKSBSZWNlaXZlIC8gVHJhbnNtaXQgQ2xvY2sgT3V0cHV0IE1vZGUgU2VsZWN0aW9uDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19TU0NfQ0tPX05PTkUgRVFVKCAweDAgPDwgMiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggU1NDICkgUmVjZWl2ZSAvIFRyYW5zbWl0IENsb2NrIE91dHB1dCBNb2RlOk5vbmUgUksgcGluOiBJbnB1dCAtIG9ubHkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1NTQ19DS09fQ09OVElOT1VTIEVRVSggMHgxIDw8IDIgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFNTQyApIENvbnRpbnVvdXMgUmVjZWl2ZSAvIFRyYW5zbWl0IENsb2NrIFJLIHBpbjpPdXRwdXQNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1NTQ19DS09fREFUQV9UWCBFUVUoIDB4MiA8PCAyICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBTU0MgKSBSZWNlaXZlIC8gVHJhbnNtaXQgQ2xvY2sgb25seSBkdXJpbmcgZGF0YSB0cmFuc2ZlcnMgUksgcGluOk91dHB1dA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfU1NDX0NLSSBFUVUoIDB4MSA8PCA1ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBTU0MgKSBSZWNlaXZlIC8gVHJhbnNtaXQgQ2xvY2sgSW52ZXJzaW9uDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19TU0NfU1RBUlQgRVFVKCAweEYgPDwgOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggU1NDICkgUmVjZWl2ZSAvIFRyYW5zbWl0IFN0YXJ0IFNlbGVjdGlvbg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfU1NDX1NUQVJUX0NPTlRJTk9VUyBFUVUoIDB4MCA8PCA4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBTU0MgKSBDb250aW51b3VzLCBhcyBzb29uIGFzIHRoZSByZWNlaXZlciBpcyBlbmFibGVkLCBhbmQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGVuZCBvZiB0cmFuc2ZlciBvZiB0aGUgcHJldmlvdXMgZGF0YS4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1NTQ19TVEFSVF9UWCBFUVUoIDB4MSA8PCA4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBTU0MgKSBUcmFuc21pdCAvIFJlY2VpdmUgc3RhcnQNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1NTQ19TVEFSVF9MT1dfUkYgRVFVKCAweDIgPDwgOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggU1NDICkgRGV0ZWN0aW9uIG9mIGEgbG93IGxldmVsIG9uIFJGIGlucHV0DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19TU0NfU1RBUlRfSElHSF9SRiBFUVUoIDB4MyA8PCA4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBTU0MgKSBEZXRlY3Rpb24gb2YgYSBoaWdoIGxldmVsIG9uIFJGIGlucHV0DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19TU0NfU1RBUlRfRkFMTF9SRiBFUVUoIDB4NCA8PCA4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBTU0MgKSBEZXRlY3Rpb24gb2YgYSBmYWxsaW5nIGVkZ2Ugb24gUkYgaW5wdXQNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1NTQ19TVEFSVF9SSVNFX1JGIEVRVSggMHg1IDw8IDggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFNTQyApIERldGVjdGlvbiBvZiBhIHJpc2luZyBlZGdlIG9uIFJGIGlucHV0DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19TU0NfU1RBUlRfTEVWRUxfUkYgRVFVKCAweDYgPDwgOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggU1NDICkgRGV0ZWN0aW9uIG9mIGFueSBsZXZlbCBjaGFuZ2Ugb24gUkYgaW5wdXQNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1NTQ19TVEFSVF9FREdFX1JGIEVRVSggMHg3IDw8IDggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFNTQyApIERldGVjdGlvbiBvZiBhbnkgZWRnZSBvbiBSRiBpbnB1dA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfU1NDX1NUQVJUXzAgRVFVKCAweDggPDwgOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggU1NDICkgQ29tcGFyZSAwDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19TU0NfU1RURExZIEVRVSggMHhGRiA8PCAxNiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggU1NDICkgUmVjZWl2ZSAvIFRyYW5zbWl0IFN0YXJ0IERlbGF5DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19TU0NfUEVSSU9EIEVRVSggMHhGRiA8PCAyNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggU1NDICkgUmVjZWl2ZSAvIFRyYW5zbWl0IFBlcmlvZCBEaXZpZGVyIFNlbGVjdGlvbg0KLS8qIC0gLS0tLS0tLS0gU1NDX1JGTVIgOiAoU1NDIE9mZnNldDogMHgxNCkgU1NDIFJlY2VpdmUgRnJhbWUgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfU1NDX0RBVExFTiBFUVUoIDB4MUYgPDwgMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggU1NDICkgRGF0YSBMZW5ndGgNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1NTQ19MT09QIEVRVSggMHgxIDw8IDUgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFNTQyApIExvb3AgTW9kZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfU1NDX01TQkYgRVFVKCAweDEgPDwgNyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggU1NDICkgTW9zdCBTaWduaWZpY2FudCBCaXQgRmlyc3QNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1NTQ19EQVROQiBFUVUoIDB4RiA8PCA4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBTU0MgKSBEYXRhIE51bWJlciBwZXIgRnJhbWUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1NTQ19GU0xFTiBFUVUoIDB4RiA8PCAxNiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggU1NDICkgUmVjZWl2ZSAvIFRyYW5zbWl0IEZyYW1lIFN5bmMgbGVuZ3RoDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19TU0NfRlNPUyBFUVUoIDB4NyA8PCAyMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggU1NDICkgUmVjZWl2ZSAvIFRyYW5zbWl0IEZyYW1lIFN5bmMgT3V0cHV0IFNlbGVjdGlvbg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfU1NDX0ZTT1NfTk9ORSBFUVUoIDB4MCA8PCAyMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggU1NDICkgU2VsZWN0ZWQgUmVjZWl2ZSAvIFRyYW5zbWl0IEZyYW1lIFN5bmMgU2lnbmFsOk5vbmUgUksgcGluIElucHV0IC0gb25seQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfU1NDX0ZTT1NfTkVHQVRJVkUgRVFVKCAweDEgPDwgMjAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFNTQyApIFNlbGVjdGVkIFJlY2VpdmUgLyBUcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDpOZWdhdGl2ZSBQdWxzZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfU1NDX0ZTT1NfUE9TSVRJVkUgRVFVKCAweDIgPDwgMjAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFNTQyApIFNlbGVjdGVkIFJlY2VpdmUgLyBUcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDpQb3NpdGl2ZSBQdWxzZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfU1NDX0ZTT1NfTE9XIEVRVSggMHgzIDw8IDIwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBTU0MgKSBTZWxlY3RlZCBSZWNlaXZlIC8gVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6RHJpdmVyIExvdyBkdXJpbmcgZGF0YSB0cmFuc2Zlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfU1NDX0ZTT1NfSElHSCBFUVUoIDB4NCA8PCAyMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggU1NDICkgU2VsZWN0ZWQgUmVjZWl2ZSAvIFRyYW5zbWl0IEZyYW1lIFN5bmMgU2lnbmFsOkRyaXZlciBIaWdoIGR1cmluZyBkYXRhIHRyYW5zZmVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19TU0NfRlNPU19UT0dHTEUgRVFVKCAweDUgPDwgMjAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFNTQyApIFNlbGVjdGVkIFJlY2VpdmUgLyBUcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDpUb2dnbGluZyBhdCBlYWNoIHN0YXJ0IG9mIGRhdGEgdHJhbnNmZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1NTQ19GU0VER0UgRVFVKCAweDEgPDwgMjQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFNTQyApIEZyYW1lIFN5bmMgRWRnZSBEZXRlY3Rpb24NCi0vKiAtIC0tLS0tLS0tIFNTQ19UQ01SIDogKFNTQyBPZmZzZXQ6IDB4MTgpIFNTQyBUcmFuc21pdCBDbG9jayBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLSAtLS0tLS0tLSBTU0NfVEZNUiA6IChTU0MgT2Zmc2V0OiAweDFjKSBTU0MgVHJhbnNtaXQgRnJhbWUgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfU1NDX0RBVERFRiBFUVUoIDB4MSA8PCA1ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBTU0MgKSBEYXRhIERlZmF1bHQgVmFsdWUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1NTQ19GU0RFTiBFUVUoIDB4MSA8PCAyMyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggU1NDICkgRnJhbWUgU3luYyBEYXRhIEVuYWJsZQ0KLS8qIC0gLS0tLS0tLS0gU1NDX1NSIDogKFNTQyBPZmZzZXQ6IDB4NDApIFNTQyBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1NTQ19UWFJEWSBFUVUoIDB4MSA8PCAwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBTU0MgKSBUcmFuc21pdCBSZWFkeQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfU1NDX1RYRU1QVFkgRVFVKCAweDEgPDwgMSApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggU1NDICkgVHJhbnNtaXQgRW1wdHkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1NTQ19FTkRUWCBFUVUoIDB4MSA8PCAyICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBTU0MgKSBFbmQgT2YgVHJhbnNtaXNzaW9uDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19TU0NfVFhCVUZFIEVRVSggMHgxIDw8IDMgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFNTQyApIFRyYW5zbWl0IEJ1ZmZlciBFbXB0eQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfU1NDX1JYUkRZIEVRVSggMHgxIDw8IDQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFNTQyApIFJlY2VpdmUgUmVhZHkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1NTQ19PVlJVTiBFUVUoIDB4MSA8PCA1ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBTU0MgKSBSZWNlaXZlIE92ZXJydW4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1NTQ19FTkRSWCBFUVUoIDB4MSA8PCA2ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBTU0MgKSBFbmQgb2YgUmVjZXB0aW9uDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19TU0NfUlhCVUZGIEVRVSggMHgxIDw8IDcgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFNTQyApIFJlY2VpdmUgQnVmZmVyIEZ1bGwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1NTQ19UWFNZTiBFUVUoIDB4MSA8PCAxMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggU1NDICkgVHJhbnNtaXQgU3luYw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfU1NDX1JYU1lOIEVRVSggMHgxIDw8IDExICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBTU0MgKSBSZWNlaXZlIFN5bmMNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1NTQ19UWEVOQSBFUVUoIDB4MSA8PCAxNiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggU1NDICkgVHJhbnNtaXQgRW5hYmxlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19TU0NfUlhFTkEgRVFVKCAweDEgPDwgMTcgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFNTQyApIFJlY2VpdmUgRW5hYmxlDQotLyogLSAtLS0tLS0tLSBTU0NfSUVSIDogKFNTQyBPZmZzZXQ6IDB4NDQpIFNTQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLSAtLS0tLS0tLSBTU0NfSURSIDogKFNTQyBPZmZzZXQ6IDB4NDgpIFNTQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0gLS0tLS0tLS0gU1NDX0lNUiA6IChTU0MgT2Zmc2V0OiAweDRjKSBTU0MgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCisvLyAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gLSAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBTeW5jaHJvbm91cyBTZXJpYWwgQ29udHJvbGxlciBJbnRlcmZhY2UNCisvLyAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gLSAtLS0tLS0tLSBTU0NfQ1IgOiAoU1NDIE9mZnNldDogMHgwKSBTU0MgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19TU0NfUlhFTiAgICAgICAgICAgIEVRVSAoMHgxIDw8ICAwKSA7LSAoU1NDKSBSZWNlaXZlIEVuYWJsZQ0KK0FUOTFDX1NTQ19SWERJUyAgICAgICAgICAgRVFVICgweDEgPDwgIDEpIDstIChTU0MpIFJlY2VpdmUgRGlzYWJsZQ0KK0FUOTFDX1NTQ19UWEVOICAgICAgICAgICAgRVFVICgweDEgPDwgIDgpIDstIChTU0MpIFRyYW5zbWl0IEVuYWJsZQ0KK0FUOTFDX1NTQ19UWERJUyAgICAgICAgICAgRVFVICgweDEgPDwgIDkpIDstIChTU0MpIFRyYW5zbWl0IERpc2FibGUNCitBVDkxQ19TU0NfU1dSU1QgICAgICAgICAgIEVRVSAoMHgxIDw8IDE1KSA7LSAoU1NDKSBTb2Z0d2FyZSBSZXNldA0KKy8vIC0gLS0tLS0tLS0gU1NDX1JDTVIgOiAoU1NDIE9mZnNldDogMHgxMCkgU1NDIFJlY2VpdmUgQ2xvY2sgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19TU0NfQ0tTICAgICAgICAgICAgIEVRVSAoMHgzIDw8ICAwKSA7LSAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIFNlbGVjdGlvbg0KK0FUOTFDX1NTQ19DS1NfRElWICAgICAgICAgRVFVICgweDApIDstIChTU0MpIERpdmlkZWQgQ2xvY2sNCitBVDkxQ19TU0NfQ0tTX1RLICAgICAgICAgIEVRVSAoMHgxKSA7LSAoU1NDKSBUSyBDbG9jayBzaWduYWwNCitBVDkxQ19TU0NfQ0tTX1JLICAgICAgICAgIEVRVSAoMHgyKSA7LSAoU1NDKSBSSyBwaW4NCitBVDkxQ19TU0NfQ0tPICAgICAgICAgICAgIEVRVSAoMHg3IDw8ICAyKSA7LSAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIE91dHB1dCBNb2RlIFNlbGVjdGlvbg0KK0FUOTFDX1NTQ19DS09fTk9ORSAgICAgICAgRVFVICgweDAgPDwgIDIpIDstIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgT3V0cHV0IE1vZGU6IE5vbmUgUksgcGluOiBJbnB1dC1vbmx5DQorQVQ5MUNfU1NDX0NLT19DT05USU5PVVMgICBFUVUgKDB4MSA8PCAgMikgOy0gKFNTQykgQ29udGludW91cyBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIFJLIHBpbjogT3V0cHV0DQorQVQ5MUNfU1NDX0NLT19EQVRBX1RYICAgICBFUVUgKDB4MiA8PCAgMikgOy0gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBvbmx5IGR1cmluZyBkYXRhIHRyYW5zZmVycyBSSyBwaW46IE91dHB1dA0KK0FUOTFDX1NTQ19DS0kgICAgICAgICAgICAgRVFVICgweDEgPDwgIDUpIDstIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgSW52ZXJzaW9uDQorQVQ5MUNfU1NDX1NUQVJUICAgICAgICAgICBFUVUgKDB4RiA8PCAgOCkgOy0gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBTdGFydCBTZWxlY3Rpb24NCitBVDkxQ19TU0NfU1RBUlRfQ09OVElOT1VTIEVRVSAoMHgwIDw8ICA4KSA7LSAoU1NDKSBDb250aW51b3VzLCBhcyBzb29uIGFzIHRoZSByZWNlaXZlciBpcyBlbmFibGVkLCBhbmQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGVuZCBvZiB0cmFuc2ZlciBvZiB0aGUgcHJldmlvdXMgZGF0YS4NCitBVDkxQ19TU0NfU1RBUlRfVFggICAgICAgIEVRVSAoMHgxIDw8ICA4KSA7LSAoU1NDKSBUcmFuc21pdC9SZWNlaXZlIHN0YXJ0DQorQVQ5MUNfU1NDX1NUQVJUX0xPV19SRiAgICBFUVUgKDB4MiA8PCAgOCkgOy0gKFNTQykgRGV0ZWN0aW9uIG9mIGEgbG93IGxldmVsIG9uIFJGIGlucHV0DQorQVQ5MUNfU1NDX1NUQVJUX0hJR0hfUkYgICBFUVUgKDB4MyA8PCAgOCkgOy0gKFNTQykgRGV0ZWN0aW9uIG9mIGEgaGlnaCBsZXZlbCBvbiBSRiBpbnB1dA0KK0FUOTFDX1NTQ19TVEFSVF9GQUxMX1JGICAgRVFVICgweDQgPDwgIDgpIDstIChTU0MpIERldGVjdGlvbiBvZiBhIGZhbGxpbmcgZWRnZSBvbiBSRiBpbnB1dA0KK0FUOTFDX1NTQ19TVEFSVF9SSVNFX1JGICAgRVFVICgweDUgPDwgIDgpIDstIChTU0MpIERldGVjdGlvbiBvZiBhIHJpc2luZyBlZGdlIG9uIFJGIGlucHV0DQorQVQ5MUNfU1NDX1NUQVJUX0xFVkVMX1JGICBFUVUgKDB4NiA8PCAgOCkgOy0gKFNTQykgRGV0ZWN0aW9uIG9mIGFueSBsZXZlbCBjaGFuZ2Ugb24gUkYgaW5wdXQNCitBVDkxQ19TU0NfU1RBUlRfRURHRV9SRiAgIEVRVSAoMHg3IDw8ICA4KSA7LSAoU1NDKSBEZXRlY3Rpb24gb2YgYW55IGVkZ2Ugb24gUkYgaW5wdXQNCitBVDkxQ19TU0NfU1RBUlRfMCAgICAgICAgIEVRVSAoMHg4IDw8ICA4KSA7LSAoU1NDKSBDb21wYXJlIDANCitBVDkxQ19TU0NfU1RURExZICAgICAgICAgIEVRVSAoMHhGRiA8PCAxNikgOy0gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBTdGFydCBEZWxheQ0KK0FUOTFDX1NTQ19QRVJJT0QgICAgICAgICAgRVFVICgweEZGIDw8IDI0KSA7LSAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IFBlcmlvZCBEaXZpZGVyIFNlbGVjdGlvbg0KKy8vIC0gLS0tLS0tLS0gU1NDX1JGTVIgOiAoU1NDIE9mZnNldDogMHgxNCkgU1NDIFJlY2VpdmUgRnJhbWUgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19TU0NfREFUTEVOICAgICAgICAgIEVRVSAoMHgxRiA8PCAgMCkgOy0gKFNTQykgRGF0YSBMZW5ndGgNCitBVDkxQ19TU0NfTE9PUCAgICAgICAgICAgIEVRVSAoMHgxIDw8ICA1KSA7LSAoU1NDKSBMb29wIE1vZGUNCitBVDkxQ19TU0NfTVNCRiAgICAgICAgICAgIEVRVSAoMHgxIDw8ICA3KSA7LSAoU1NDKSBNb3N0IFNpZ25pZmljYW50IEJpdCBGaXJzdA0KK0FUOTFDX1NTQ19EQVROQiAgICAgICAgICAgRVFVICgweEYgPDwgIDgpIDstIChTU0MpIERhdGEgTnVtYmVyIHBlciBGcmFtZQ0KK0FUOTFDX1NTQ19GU0xFTiAgICAgICAgICAgRVFVICgweEYgPDwgMTYpIDstIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBsZW5ndGgNCitBVDkxQ19TU0NfRlNPUyAgICAgICAgICAgIEVRVSAoMHg3IDw8IDIwKSA7LSAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgT3V0cHV0IFNlbGVjdGlvbg0KK0FUOTFDX1NTQ19GU09TX05PTkUgICAgICAgRVFVICgweDAgPDwgMjApIDstIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IE5vbmUgUksgcGluIElucHV0LW9ubHkNCitBVDkxQ19TU0NfRlNPU19ORUdBVElWRSAgIEVRVSAoMHgxIDw8IDIwKSA7LSAoU1NDKSBTZWxlY3RlZCBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgU2lnbmFsOiBOZWdhdGl2ZSBQdWxzZQ0KK0FUOTFDX1NTQ19GU09TX1BPU0lUSVZFICAgRVFVICgweDIgPDwgMjApIDstIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IFBvc2l0aXZlIFB1bHNlDQorQVQ5MUNfU1NDX0ZTT1NfTE9XICAgICAgICBFUVUgKDB4MyA8PCAyMCkgOy0gKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogRHJpdmVyIExvdyBkdXJpbmcgZGF0YSB0cmFuc2Zlcg0KK0FUOTFDX1NTQ19GU09TX0hJR0ggICAgICAgRVFVICgweDQgPDwgMjApIDstIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IERyaXZlciBIaWdoIGR1cmluZyBkYXRhIHRyYW5zZmVyDQorQVQ5MUNfU1NDX0ZTT1NfVE9HR0xFICAgICBFUVUgKDB4NSA8PCAyMCkgOy0gKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogVG9nZ2xpbmcgYXQgZWFjaCBzdGFydCBvZiBkYXRhIHRyYW5zZmVyDQorQVQ5MUNfU1NDX0ZTRURHRSAgICAgICAgICBFUVUgKDB4MSA8PCAyNCkgOy0gKFNTQykgRnJhbWUgU3luYyBFZGdlIERldGVjdGlvbg0KKy8vIC0gLS0tLS0tLS0gU1NDX1RDTVIgOiAoU1NDIE9mZnNldDogMHgxOCkgU1NDIFRyYW5zbWl0IENsb2NrIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLSAtLS0tLS0tLSBTU0NfVEZNUiA6IChTU0MgT2Zmc2V0OiAweDFjKSBTU0MgVHJhbnNtaXQgRnJhbWUgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19TU0NfREFUREVGICAgICAgICAgIEVRVSAoMHgxIDw8ICA1KSA7LSAoU1NDKSBEYXRhIERlZmF1bHQgVmFsdWUNCitBVDkxQ19TU0NfRlNERU4gICAgICAgICAgIEVRVSAoMHgxIDw8IDIzKSA7LSAoU1NDKSBGcmFtZSBTeW5jIERhdGEgRW5hYmxlDQorLy8gLSAtLS0tLS0tLSBTU0NfU1IgOiAoU1NDIE9mZnNldDogMHg0MCkgU1NDIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19TU0NfVFhSRFkgICAgICAgICAgIEVRVSAoMHgxIDw8ICAwKSA7LSAoU1NDKSBUcmFuc21pdCBSZWFkeQ0KK0FUOTFDX1NTQ19UWEVNUFRZICAgICAgICAgRVFVICgweDEgPDwgIDEpIDstIChTU0MpIFRyYW5zbWl0IEVtcHR5DQorQVQ5MUNfU1NDX0VORFRYICAgICAgICAgICBFUVUgKDB4MSA8PCAgMikgOy0gKFNTQykgRW5kIE9mIFRyYW5zbWlzc2lvbg0KK0FUOTFDX1NTQ19UWEJVRkUgICAgICAgICAgRVFVICgweDEgPDwgIDMpIDstIChTU0MpIFRyYW5zbWl0IEJ1ZmZlciBFbXB0eQ0KK0FUOTFDX1NTQ19SWFJEWSAgICAgICAgICAgRVFVICgweDEgPDwgIDQpIDstIChTU0MpIFJlY2VpdmUgUmVhZHkNCitBVDkxQ19TU0NfT1ZSVU4gICAgICAgICAgIEVRVSAoMHgxIDw8ICA1KSA7LSAoU1NDKSBSZWNlaXZlIE92ZXJydW4NCitBVDkxQ19TU0NfRU5EUlggICAgICAgICAgIEVRVSAoMHgxIDw8ICA2KSA7LSAoU1NDKSBFbmQgb2YgUmVjZXB0aW9uDQorQVQ5MUNfU1NDX1JYQlVGRiAgICAgICAgICBFUVUgKDB4MSA8PCAgNykgOy0gKFNTQykgUmVjZWl2ZSBCdWZmZXIgRnVsbA0KK0FUOTFDX1NTQ19UWFNZTiAgICAgICAgICAgRVFVICgweDEgPDwgMTApIDstIChTU0MpIFRyYW5zbWl0IFN5bmMNCitBVDkxQ19TU0NfUlhTWU4gICAgICAgICAgIEVRVSAoMHgxIDw8IDExKSA7LSAoU1NDKSBSZWNlaXZlIFN5bmMNCitBVDkxQ19TU0NfVFhFTkEgICAgICAgICAgIEVRVSAoMHgxIDw8IDE2KSA7LSAoU1NDKSBUcmFuc21pdCBFbmFibGUNCitBVDkxQ19TU0NfUlhFTkEgICAgICAgICAgIEVRVSAoMHgxIDw8IDE3KSA7LSAoU1NDKSBSZWNlaXZlIEVuYWJsZQ0KKy8vIC0gLS0tLS0tLS0gU1NDX0lFUiA6IChTU0MgT2Zmc2V0OiAweDQ0KSBTU0MgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtIC0tLS0tLS0tIFNTQ19JRFIgOiAoU1NDIE9mZnNldDogMHg0OCkgU1NDIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0gLS0tLS0tLS0gU1NDX0lNUiA6IChTU0MgT2Zmc2V0OiAweDRjKSBTU0MgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQogDQotLyogLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qIC0gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVHdvLXdpcmUgSW50ZXJmYWNlICovDQotLyogLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qIC0gLS0tLS0tLS0gVFdJX0NSIDogKFRXSSBPZmZzZXQ6IDB4MCkgVFdJIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RXSV9TVEFSVCBFUVUoIDB4MSA8PCAwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUV0kgKSBTZW5kIGEgU1RBUlQgQ29uZGl0aW9uDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UV0lfU1RPUCBFUVUoIDB4MSA8PCAxICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUV0kgKSBTZW5kIGEgU1RPUCBDb25kaXRpb24NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RXSV9NU0VOIEVRVSggMHgxIDw8IDIgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRXSSApIFRXSSBNYXN0ZXIgVHJhbnNmZXIgRW5hYmxlZA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVFdJX01TRElTIEVRVSggMHgxIDw8IDMgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRXSSApIFRXSSBNYXN0ZXIgVHJhbnNmZXIgRGlzYWJsZWQNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RXSV9TV1JTVCBFUVUoIDB4MSA8PCA3ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUV0kgKSBTb2Z0d2FyZSBSZXNldA0KLS8qIC0gLS0tLS0tLS0gVFdJX01NUiA6IChUV0kgT2Zmc2V0OiAweDQpIFRXSSBNYXN0ZXIgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVFdJX0lBRFJTWiBFUVUoIDB4MyA8PCA4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUV0kgKSBJbnRlcm5hbCBEZXZpY2UgQWRkcmVzcyBTaXplDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UV0lfSUFEUlNaX05PIEVRVSggMHgwIDw8IDggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRXSSApIE5vIGludGVybmFsIGRldmljZSBhZGRyZXNzDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UV0lfSUFEUlNaXzFfQllURSBFUVUoIDB4MSA8PCA4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUV0kgKSBPbmUgLSBieXRlIGludGVybmFsIGRldmljZSBhZGRyZXNzDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UV0lfSUFEUlNaXzJfQllURSBFUVUoIDB4MiA8PCA4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUV0kgKSBUd28gLSBieXRlIGludGVybmFsIGRldmljZSBhZGRyZXNzDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UV0lfSUFEUlNaXzNfQllURSBFUVUoIDB4MyA8PCA4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUV0kgKSBUaHJlZSAtIGJ5dGUgaW50ZXJuYWwgZGV2aWNlIGFkZHJlc3MNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RXSV9NUkVBRCBFUVUoIDB4MSA8PCAxMiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVFdJICkgTWFzdGVyIFJlYWQgRGlyZWN0aW9uDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UV0lfREFEUiBFUVUoIDB4N0YgPDwgMTYgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRXSSApIERldmljZSBBZGRyZXNzDQotLyogLSAtLS0tLS0tLSBUV0lfQ1dHUiA6IChUV0kgT2Zmc2V0OiAweDEwKSBUV0kgQ2xvY2sgV2F2ZWZvcm0gR2VuZXJhdG9yIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UV0lfQ0xESVYgRVFVKCAweEZGIDw8IDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRXSSApIENsb2NrIExvdyBEaXZpZGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UV0lfQ0hESVYgRVFVKCAweEZGIDw8IDggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRXSSApIENsb2NrIEhpZ2ggRGl2aWRlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVFdJX0NLRElWIEVRVSggMHg3IDw8IDE2ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUV0kgKSBDbG9jayBEaXZpZGVyDQotLyogLSAtLS0tLS0tLSBUV0lfU1IgOiAoVFdJIE9mZnNldDogMHgyMCkgVFdJIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVFdJX1RYQ09NUCBFUVUoIDB4MSA8PCAwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUV0kgKSBUcmFuc21pc3Npb24gQ29tcGxldGVkDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UV0lfUlhSRFkgRVFVKCAweDEgPDwgMSApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVFdJICkgUmVjZWl2ZSBob2xkaW5nIHJlZ2lzdGVyIFJlYURZDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UV0lfVFhSRFkgRVFVKCAweDEgPDwgMiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVFdJICkgVHJhbnNtaXQgaG9sZGluZyByZWdpc3RlciBSZWFEWQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVFdJX09WUkUgRVFVKCAweDEgPDwgNiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVFdJICkgT3ZlcnJ1biBFcnJvcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVFdJX1VOUkUgRVFVKCAweDEgPDwgNyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVFdJICkgVW5kZXJydW4gRXJyb3INCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RXSV9OQUNLIEVRVSggMHgxIDw8IDggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRXSSApIE5vdCBBY2tub3dsZWRnZWQNCi0vKiAtIC0tLS0tLS0tIFRXSV9JRVIgOiAoVFdJIE9mZnNldDogMHgyNCkgVFdJIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtIC0tLS0tLS0tIFRXSV9JRFIgOiAoVFdJIE9mZnNldDogMHgyOCkgVFdJIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLSAtLS0tLS0tLSBUV0lfSU1SIDogKFRXSSBPZmZzZXQ6IDB4MmMpIFRXSSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSAqLw0KKy8vIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAtICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFR3by13aXJlIEludGVyZmFjZQ0KKy8vIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAtIC0tLS0tLS0tIFRXSV9DUiA6IChUV0kgT2Zmc2V0OiAweDApIFRXSSBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX1RXSV9TVEFSVCAgICAgICAgICAgRVFVICgweDEgPDwgIDApIDstIChUV0kpIFNlbmQgYSBTVEFSVCBDb25kaXRpb24NCitBVDkxQ19UV0lfU1RPUCAgICAgICAgICAgIEVRVSAoMHgxIDw8ICAxKSA7LSAoVFdJKSBTZW5kIGEgU1RPUCBDb25kaXRpb24NCitBVDkxQ19UV0lfTVNFTiAgICAgICAgICAgIEVRVSAoMHgxIDw8ICAyKSA7LSAoVFdJKSBUV0kgTWFzdGVyIFRyYW5zZmVyIEVuYWJsZWQNCitBVDkxQ19UV0lfTVNESVMgICAgICAgICAgIEVRVSAoMHgxIDw8ICAzKSA7LSAoVFdJKSBUV0kgTWFzdGVyIFRyYW5zZmVyIERpc2FibGVkDQorQVQ5MUNfVFdJX1NXUlNUICAgICAgICAgICBFUVUgKDB4MSA8PCAgNykgOy0gKFRXSSkgU29mdHdhcmUgUmVzZXQNCisvLyAtIC0tLS0tLS0tIFRXSV9NTVIgOiAoVFdJIE9mZnNldDogMHg0KSBUV0kgTWFzdGVyIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfVFdJX0lBRFJTWiAgICAgICAgICBFUVUgKDB4MyA8PCAgOCkgOy0gKFRXSSkgSW50ZXJuYWwgRGV2aWNlIEFkZHJlc3MgU2l6ZQ0KK0FUOTFDX1RXSV9JQURSU1pfTk8gICAgICAgRVFVICgweDAgPDwgIDgpIDstIChUV0kpIE5vIGludGVybmFsIGRldmljZSBhZGRyZXNzDQorQVQ5MUNfVFdJX0lBRFJTWl8xX0JZVEUgICBFUVUgKDB4MSA8PCAgOCkgOy0gKFRXSSkgT25lLWJ5dGUgaW50ZXJuYWwgZGV2aWNlIGFkZHJlc3MNCitBVDkxQ19UV0lfSUFEUlNaXzJfQllURSAgIEVRVSAoMHgyIDw8ICA4KSA7LSAoVFdJKSBUd28tYnl0ZSBpbnRlcm5hbCBkZXZpY2UgYWRkcmVzcw0KK0FUOTFDX1RXSV9JQURSU1pfM19CWVRFICAgRVFVICgweDMgPDwgIDgpIDstIChUV0kpIFRocmVlLWJ5dGUgaW50ZXJuYWwgZGV2aWNlIGFkZHJlc3MNCitBVDkxQ19UV0lfTVJFQUQgICAgICAgICAgIEVRVSAoMHgxIDw8IDEyKSA7LSAoVFdJKSBNYXN0ZXIgUmVhZCBEaXJlY3Rpb24NCitBVDkxQ19UV0lfREFEUiAgICAgICAgICAgIEVRVSAoMHg3RiA8PCAxNikgOy0gKFRXSSkgRGV2aWNlIEFkZHJlc3MNCisvLyAtIC0tLS0tLS0tIFRXSV9DV0dSIDogKFRXSSBPZmZzZXQ6IDB4MTApIFRXSSBDbG9jayBXYXZlZm9ybSBHZW5lcmF0b3IgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfVFdJX0NMRElWICAgICAgICAgICBFUVUgKDB4RkYgPDwgIDApIDstIChUV0kpIENsb2NrIExvdyBEaXZpZGVyDQorQVQ5MUNfVFdJX0NIRElWICAgICAgICAgICBFUVUgKDB4RkYgPDwgIDgpIDstIChUV0kpIENsb2NrIEhpZ2ggRGl2aWRlcg0KK0FUOTFDX1RXSV9DS0RJViAgICAgICAgICAgRVFVICgweDcgPDwgMTYpIDstIChUV0kpIENsb2NrIERpdmlkZXINCisvLyAtIC0tLS0tLS0tIFRXSV9TUiA6IChUV0kgT2Zmc2V0OiAweDIwKSBUV0kgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX1RXSV9UWENPTVAgICAgICAgICAgRVFVICgweDEgPDwgIDApIDstIChUV0kpIFRyYW5zbWlzc2lvbiBDb21wbGV0ZWQNCitBVDkxQ19UV0lfUlhSRFkgICAgICAgICAgIEVRVSAoMHgxIDw8ICAxKSA7LSAoVFdJKSBSZWNlaXZlIGhvbGRpbmcgcmVnaXN0ZXIgUmVhRFkNCitBVDkxQ19UV0lfVFhSRFkgICAgICAgICAgIEVRVSAoMHgxIDw8ICAyKSA7LSAoVFdJKSBUcmFuc21pdCBob2xkaW5nIHJlZ2lzdGVyIFJlYURZDQorQVQ5MUNfVFdJX09WUkUgICAgICAgICAgICBFUVUgKDB4MSA8PCAgNikgOy0gKFRXSSkgT3ZlcnJ1biBFcnJvcg0KK0FUOTFDX1RXSV9VTlJFICAgICAgICAgICAgRVFVICgweDEgPDwgIDcpIDstIChUV0kpIFVuZGVycnVuIEVycm9yDQorQVQ5MUNfVFdJX05BQ0sgICAgICAgICAgICBFUVUgKDB4MSA8PCAgOCkgOy0gKFRXSSkgTm90IEFja25vd2xlZGdlZA0KKy8vIC0gLS0tLS0tLS0gVFdJX0lFUiA6IChUV0kgT2Zmc2V0OiAweDI0KSBUV0kgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtIC0tLS0tLS0tIFRXSV9JRFIgOiAoVFdJIE9mZnNldDogMHgyOCkgVFdJIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0gLS0tLS0tLS0gVFdJX0lNUiA6IChUV0kgT2Zmc2V0OiAweDJjKSBUV0kgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQogDQotLyogLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qIC0gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUFdNQyBDaGFubmVsIEludGVyZmFjZSAqLw0KLS8qIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAtIC0tLS0tLS0tIFBXTUNfQ01SIDogKFBXTUNfQ0ggT2Zmc2V0OiAweDApIFBXTUMgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QV01DX0NQUkUgRVFVKCAweEYgPDwgMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUFdNQ19DSCApIENoYW5uZWwgUHJlIC0gc2NhbGVyOlBXTUNfQ0xLeA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUFdNQ19DUFJFX01DSyBFUVUoIDB4MCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUFdNQ19DSCApDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QV01DX0NQUkVfTUNLQSBFUVUoIDB4QiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUFdNQ19DSCApDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QV01DX0NQUkVfTUNLQiBFUVUoIDB4QyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUFdNQ19DSCApDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QV01DX0NBTEcgRVFVKCAweDEgPDwgOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUFdNQ19DSCApIENoYW5uZWwgQWxpZ25tZW50DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QV01DX0NQT0wgRVFVKCAweDEgPDwgOSApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUFdNQ19DSCApIENoYW5uZWwgUG9sYXJpdHkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BXTUNfQ1BEIEVRVSggMHgxIDw8IDEwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQV01DX0NIICkgQ2hhbm5lbCBVcGRhdGUgUGVyaW9kDQotLyogLSAtLS0tLS0tLSBQV01DX0NEVFlSIDogKFBXTUNfQ0ggT2Zmc2V0OiAweDQpIFBXTUMgQ2hhbm5lbCBEdXR5IEN5Y2xlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QV01DX0NEVFkgRVFVKCAweDAgPDwgMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUFdNQ19DSCApIENoYW5uZWwgRHV0eSBDeWNsZQ0KLS8qIC0gLS0tLS0tLS0gUFdNQ19DUFJEUiA6IChQV01DX0NIIE9mZnNldDogMHg4KSBQV01DIENoYW5uZWwgUGVyaW9kIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QV01DX0NQUkQgRVFVKCAweDAgPDwgMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUFdNQ19DSCApIENoYW5uZWwgUGVyaW9kDQotLyogLSAtLS0tLS0tLSBQV01DX0NDTlRSIDogKFBXTUNfQ0ggT2Zmc2V0OiAweGMpIFBXTUMgQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QV01DX0NDTlQgRVFVKCAweDAgPDwgMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUFdNQ19DSCApIENoYW5uZWwgQ291bnRlcg0KLS8qIC0gLS0tLS0tLS0gUFdNQ19DVVBEUiA6IChQV01DX0NIIE9mZnNldDogMHgxMCkgUFdNQyBDaGFubmVsIFVwZGF0ZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUFdNQ19DVVBEIEVRVSggMHgwIDw8IDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBXTUNfQ0ggKSBDaGFubmVsIFVwZGF0ZQ0KKy8vIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAtICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFBXTUMgQ2hhbm5lbCBJbnRlcmZhY2UNCisvLyAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gLSAtLS0tLS0tLSBQV01DX0NNUiA6IChQV01DX0NIIE9mZnNldDogMHgwKSBQV01DIENoYW5uZWwgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19QV01DX0NQUkUgICAgICAgICAgIEVRVSAoMHhGIDw8ICAwKSA7LSAoUFdNQ19DSCkgQ2hhbm5lbCBQcmUtc2NhbGVyIDogUFdNQ19DTEt4DQorQVQ5MUNfUFdNQ19DUFJFX01DSyAgICAgICBFUVUgKDB4MCkgOy0gKFBXTUNfQ0gpIA0KK0FUOTFDX1BXTUNfQ1BSRV9NQ0tBICAgICAgRVFVICgweEIpIDstIChQV01DX0NIKSANCitBVDkxQ19QV01DX0NQUkVfTUNLQiAgICAgIEVRVSAoMHhDKSA7LSAoUFdNQ19DSCkgDQorQVQ5MUNfUFdNQ19DQUxHICAgICAgICAgICBFUVUgKDB4MSA8PCAgOCkgOy0gKFBXTUNfQ0gpIENoYW5uZWwgQWxpZ25tZW50DQorQVQ5MUNfUFdNQ19DUE9MICAgICAgICAgICBFUVUgKDB4MSA8PCAgOSkgOy0gKFBXTUNfQ0gpIENoYW5uZWwgUG9sYXJpdHkNCitBVDkxQ19QV01DX0NQRCAgICAgICAgICAgIEVRVSAoMHgxIDw8IDEwKSA7LSAoUFdNQ19DSCkgQ2hhbm5lbCBVcGRhdGUgUGVyaW9kDQorLy8gLSAtLS0tLS0tLSBQV01DX0NEVFlSIDogKFBXTUNfQ0ggT2Zmc2V0OiAweDQpIFBXTUMgQ2hhbm5lbCBEdXR5IEN5Y2xlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX1BXTUNfQ0RUWSAgICAgICAgICAgRVFVICgweDAgPDwgIDApIDstIChQV01DX0NIKSBDaGFubmVsIER1dHkgQ3ljbGUNCisvLyAtIC0tLS0tLS0tIFBXTUNfQ1BSRFIgOiAoUFdNQ19DSCBPZmZzZXQ6IDB4OCkgUFdNQyBDaGFubmVsIFBlcmlvZCBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19QV01DX0NQUkQgICAgICAgICAgIEVRVSAoMHgwIDw8ICAwKSA7LSAoUFdNQ19DSCkgQ2hhbm5lbCBQZXJpb2QNCisvLyAtIC0tLS0tLS0tIFBXTUNfQ0NOVFIgOiAoUFdNQ19DSCBPZmZzZXQ6IDB4YykgUFdNQyBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfUFdNQ19DQ05UICAgICAgICAgICBFUVUgKDB4MCA8PCAgMCkgOy0gKFBXTUNfQ0gpIENoYW5uZWwgQ291bnRlcg0KKy8vIC0gLS0tLS0tLS0gUFdNQ19DVVBEUiA6IChQV01DX0NIIE9mZnNldDogMHgxMCkgUFdNQyBDaGFubmVsIFVwZGF0ZSBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19QV01DX0NVUEQgICAgICAgICAgIEVRVSAoMHgwIDw8ICAwKSA7LSAoUFdNQ19DSCkgQ2hhbm5lbCBVcGRhdGUNCiANCi0vKiAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogLSAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQdWxzZSBXaWR0aCBNb2R1bGF0aW9uIENvbnRyb2xsZXIgSW50ZXJmYWNlICovDQotLyogLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qIC0gLS0tLS0tLS0gUFdNQ19NUiA6IChQV01DIE9mZnNldDogMHgwKSBQV01DIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BXTUNfRElWQSBFUVUoIDB4RkYgPDwgMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUFdNQyApIENMS0EgZGl2aWRlIGZhY3Rvci4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BXTUNfUFJFQSBFUVUoIDB4RiA8PCA4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQV01DICkgRGl2aWRlciBJbnB1dCBDbG9jayBQcmVzY2FsZXIgQQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUFdNQ19QUkVBX01DSyBFUVUoIDB4MCA8PCA4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQV01DICkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BXTUNfRElWQiBFUVUoIDB4RkYgPDwgMTYgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBXTUMgKSBDTEtCIGRpdmlkZSBmYWN0b3IuDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QV01DX1BSRUIgRVFVKCAweEYgPDwgMjQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBXTUMgKSBEaXZpZGVyIElucHV0IENsb2NrIFByZXNjYWxlciBCDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QV01DX1BSRUJfTUNLIEVRVSggMHgwIDw8IDI0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQV01DICkNCi0vKiAtIC0tLS0tLS0tIFBXTUNfRU5BIDogKFBXTUMgT2Zmc2V0OiAweDQpIFBXTUMgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QV01DX0NISUQwIEVRVSggMHgxIDw8IDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBXTUMgKSBDaGFubmVsIElEIDANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BXTUNfQ0hJRDEgRVFVKCAweDEgPDwgMSApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUFdNQyApIENoYW5uZWwgSUQgMQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUFdNQ19DSElEMiBFUVUoIDB4MSA8PCAyICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQV01DICkgQ2hhbm5lbCBJRCAyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QV01DX0NISUQzIEVRVSggMHgxIDw8IDMgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBXTUMgKSBDaGFubmVsIElEIDMNCi0vKiAtIC0tLS0tLS0tIFBXTUNfRElTIDogKFBXTUMgT2Zmc2V0OiAweDgpIFBXTUMgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0gLS0tLS0tLS0gUFdNQ19TUiA6IChQV01DIE9mZnNldDogMHhjKSBQV01DIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0gLS0tLS0tLS0gUFdNQ19JRVIgOiAoUFdNQyBPZmZzZXQ6IDB4MTApIFBXTUMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0gLS0tLS0tLS0gUFdNQ19JRFIgOiAoUFdNQyBPZmZzZXQ6IDB4MTQpIFBXTUMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtIC0tLS0tLS0tIFBXTUNfSU1SIDogKFBXTUMgT2Zmc2V0OiAweDE4KSBQV01DIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLSAtLS0tLS0tLSBQV01DX0lTUiA6IChQV01DIE9mZnNldDogMHgxYykgUFdNQyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQorLy8gLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vIC0gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUHVsc2UgV2lkdGggTW9kdWxhdGlvbiBDb250cm9sbGVyIEludGVyZmFjZQ0KKy8vIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAtIC0tLS0tLS0tIFBXTUNfTVIgOiAoUFdNQyBPZmZzZXQ6IDB4MCkgUFdNQyBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX1BXTUNfRElWQSAgICAgICAgICAgRVFVICgweEZGIDw8ICAwKSA7LSAoUFdNQykgQ0xLQSBkaXZpZGUgZmFjdG9yLg0KK0FUOTFDX1BXTUNfUFJFQSAgICAgICAgICAgRVFVICgweEYgPDwgIDgpIDstIChQV01DKSBEaXZpZGVyIElucHV0IENsb2NrIFByZXNjYWxlciBBDQorQVQ5MUNfUFdNQ19QUkVBX01DSyAgICAgICBFUVUgKDB4MCA8PCAgOCkgOy0gKFBXTUMpIA0KK0FUOTFDX1BXTUNfRElWQiAgICAgICAgICAgRVFVICgweEZGIDw8IDE2KSA7LSAoUFdNQykgQ0xLQiBkaXZpZGUgZmFjdG9yLg0KK0FUOTFDX1BXTUNfUFJFQiAgICAgICAgICAgRVFVICgweEYgPDwgMjQpIDstIChQV01DKSBEaXZpZGVyIElucHV0IENsb2NrIFByZXNjYWxlciBCDQorQVQ5MUNfUFdNQ19QUkVCX01DSyAgICAgICBFUVUgKDB4MCA8PCAyNCkgOy0gKFBXTUMpIA0KKy8vIC0gLS0tLS0tLS0gUFdNQ19FTkEgOiAoUFdNQyBPZmZzZXQ6IDB4NCkgUFdNQyBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfUFdNQ19DSElEMCAgICAgICAgICBFUVUgKDB4MSA8PCAgMCkgOy0gKFBXTUMpIENoYW5uZWwgSUQgMA0KK0FUOTFDX1BXTUNfQ0hJRDEgICAgICAgICAgRVFVICgweDEgPDwgIDEpIDstIChQV01DKSBDaGFubmVsIElEIDENCitBVDkxQ19QV01DX0NISUQyICAgICAgICAgIEVRVSAoMHgxIDw8ICAyKSA7LSAoUFdNQykgQ2hhbm5lbCBJRCAyDQorQVQ5MUNfUFdNQ19DSElEMyAgICAgICAgICBFUVUgKDB4MSA8PCAgMykgOy0gKFBXTUMpIENoYW5uZWwgSUQgMw0KKy8vIC0gLS0tLS0tLS0gUFdNQ19ESVMgOiAoUFdNQyBPZmZzZXQ6IDB4OCkgUFdNQyBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0gLS0tLS0tLS0gUFdNQ19TUiA6IChQV01DIE9mZnNldDogMHhjKSBQV01DIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtIC0tLS0tLS0tIFBXTUNfSUVSIDogKFBXTUMgT2Zmc2V0OiAweDEwKSBQV01DIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLSAtLS0tLS0tLSBQV01DX0lEUiA6IChQV01DIE9mZnNldDogMHgxNCkgUFdNQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtIC0tLS0tLS0tIFBXTUNfSU1SIDogKFBXTUMgT2Zmc2V0OiAweDE4KSBQV01DIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0gLS0tLS0tLS0gUFdNQ19JU1IgOiAoUFdNQyBPZmZzZXQ6IDB4MWMpIFBXTUMgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCiANCi0vKiAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogLSAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBVU0IgRGV2aWNlIEludGVyZmFjZSAqLw0KLS8qIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAtIC0tLS0tLS0tIFVEUF9GUk1fTlVNIDogKFVEUCBPZmZzZXQ6IDB4MCkgVVNCIEZyYW1lIE51bWJlciBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVURQX0ZSTV9OVU0gRVFVKCAweDdGRiA8PCAwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBVRFAgKSBGcmFtZSBOdW1iZXIgYXMgRGVmaW5lZCBpbiB0aGUgUGFja2V0IEZpZWxkIEZvcm1hdHMNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VEUF9GUk1fRVJSIEVRVSggMHgxIDw8IDE2ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBVRFAgKSBGcmFtZSBFcnJvcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVURQX0ZSTV9PSyBFUVUoIDB4MSA8PCAxNyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVURQICkgRnJhbWUgT0sNCi0vKiAtIC0tLS0tLS0tIFVEUF9HTEJfU1RBVEUgOiAoVURQIE9mZnNldDogMHg0KSBVU0IgR2xvYmFsIFN0YXRlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VRFBfRkFEREVOIEVRVSggMHgxIDw8IDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFVEUCApIEZ1bmN0aW9uIEFkZHJlc3MgRW5hYmxlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VRFBfQ09ORkcgRVFVKCAweDEgPDwgMSApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVURQICkgQ29uZmlndXJlZA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVURQX0VTUiBFUVUoIDB4MSA8PCAyICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBVRFAgKSBFbmFibGUgU2VuZCBSZXN1bWUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VEUF9SU01JTlBSIEVRVSggMHgxIDw8IDMgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFVEUCApIEEgUmVzdW1lIEhhcyBCZWVuIFNlbnQgdG8gdGhlIEhvc3QNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VEUF9STVdVUEUgRVFVKCAweDEgPDwgNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVURQICkgUmVtb3RlIFdha2UgVXAgRW5hYmxlDQotLyogLSAtLS0tLS0tLSBVRFBfRkFERFIgOiAoVURQIE9mZnNldDogMHg4KSBVU0IgRnVuY3Rpb24gQWRkcmVzcyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVURQX0ZBREQgRVFVKCAweEZGIDw8IDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFVEUCApIEZ1bmN0aW9uIEFkZHJlc3MgVmFsdWUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VEUF9GRU4gRVFVKCAweDEgPDwgOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVURQICkgRnVuY3Rpb24gRW5hYmxlDQotLyogLSAtLS0tLS0tLSBVRFBfSUVSIDogKFVEUCBPZmZzZXQ6IDB4MTApIFVTQiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VRFBfRVBJTlQwIEVRVSggMHgxIDw8IDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFVEUCApIEVuZHBvaW50IDAgSW50ZXJydXB0DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VRFBfRVBJTlQxIEVRVSggMHgxIDw8IDEgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFVEUCApIEVuZHBvaW50IDAgSW50ZXJydXB0DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VRFBfRVBJTlQyIEVRVSggMHgxIDw8IDIgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFVEUCApIEVuZHBvaW50IDIgSW50ZXJydXB0DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VRFBfRVBJTlQzIEVRVSggMHgxIDw8IDMgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFVEUCApIEVuZHBvaW50IDMgSW50ZXJydXB0DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VRFBfRVBJTlQ0IEVRVSggMHgxIDw8IDQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFVEUCApIEVuZHBvaW50IDQgSW50ZXJydXB0DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VRFBfRVBJTlQ1IEVRVSggMHgxIDw8IDUgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFVEUCApIEVuZHBvaW50IDUgSW50ZXJydXB0DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VRFBfUlhTVVNQIEVRVSggMHgxIDw8IDggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFVEUCApIFVTQiBTdXNwZW5kIEludGVycnVwdA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVURQX1JYUlNNIEVRVSggMHgxIDw8IDkgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFVEUCApIFVTQiBSZXN1bWUgSW50ZXJydXB0DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VRFBfRVhUUlNNIEVRVSggMHgxIDw8IDEwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBVRFAgKSBVU0IgRXh0ZXJuYWwgUmVzdW1lIEludGVycnVwdA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVURQX1NPRklOVCBFUVUoIDB4MSA8PCAxMSApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVURQICkgVVNCIFN0YXJ0IE9mIGZyYW1lIEludGVycnVwdA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVURQX1dBS0VVUCBFUVUoIDB4MSA8PCAxMyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVURQICkgVVNCIFJlc3VtZSBJbnRlcnJ1cHQNCi0vKiAtIC0tLS0tLS0tIFVEUF9JRFIgOiAoVURQIE9mZnNldDogMHgxNCkgVVNCIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLSAtLS0tLS0tLSBVRFBfSU1SIDogKFVEUCBPZmZzZXQ6IDB4MTgpIFVTQiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0gLS0tLS0tLS0gVURQX0lTUiA6IChVRFAgT2Zmc2V0OiAweDFjKSBVU0IgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVURQX0VOREJVU1JFUyBFUVUoIDB4MSA8PCAxMiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVURQICkgVVNCIEVuZCBPZiBCdXMgUmVzZXQgSW50ZXJydXB0DQotLyogLSAtLS0tLS0tLSBVRFBfSUNSIDogKFVEUCBPZmZzZXQ6IDB4MjApIFVTQiBJbnRlcnJ1cHQgQ2xlYXIgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtIC0tLS0tLS0tIFVEUF9SU1RfRVAgOiAoVURQIE9mZnNldDogMHgyOCkgVVNCIFJlc2V0IEVuZHBvaW50IFJlZ2lzdGVyIC0tLS0tLS0tICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VRFBfRVAwIEVRVSggMHgxIDw8IDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFVEUCApIFJlc2V0IEVuZHBvaW50IDANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VEUF9FUDEgRVFVKCAweDEgPDwgMSApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVURQICkgUmVzZXQgRW5kcG9pbnQgMQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVURQX0VQMiBFUVUoIDB4MSA8PCAyICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBVRFAgKSBSZXNldCBFbmRwb2ludCAyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VRFBfRVAzIEVRVSggMHgxIDw8IDMgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFVEUCApIFJlc2V0IEVuZHBvaW50IDMNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VEUF9FUDQgRVFVKCAweDEgPDwgNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVURQICkgUmVzZXQgRW5kcG9pbnQgNA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVURQX0VQNSBFUVUoIDB4MSA8PCA1ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBVRFAgKSBSZXNldCBFbmRwb2ludCA1DQotLyogLSAtLS0tLS0tLSBVRFBfQ1NSIDogKFVEUCBPZmZzZXQ6IDB4MzApIFVTQiBFbmRwb2ludCBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VEUF9UWENPTVAgRVFVKCAweDEgPDwgMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVURQICkgR2VuZXJhdGVzIGFuIElOIHBhY2tldCB3aXRoIGRhdGEgcHJldmlvdXNseSB3cml0dGVuIGluIHRoZSBEUFINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VEUF9SWF9EQVRBX0JLMCBFUVUoIDB4MSA8PCAxICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBVRFAgKSBSZWNlaXZlIERhdGEgQmFuayAwDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VRFBfUlhTRVRVUCBFUVUoIDB4MSA8PCAyICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBVRFAgKSBTZW5kcyBTVEFMTCB0byB0aGUgSG9zdCggQ29udHJvbCBlbmRwb2ludHMgKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVURQX0lTT0VSUk9SIEVRVSggMHgxIDw8IDMgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFVEUCApIElzb2Nocm9ub3VzIGVycm9yKCBJc29jaHJvbm91cyBlbmRwb2ludHMgKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVURQX1RYUEtUUkRZIEVRVSggMHgxIDw8IDQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFVEUCApIFRyYW5zbWl0IFBhY2tldCBSZWFkeQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVURQX0ZPUkNFU1RBTEwgRVFVKCAweDEgPDwgNSApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVURQICkgRm9yY2UgU3RhbGwoIHVzZWQgYnkgQ29udHJvbCwgQnVsayBhbmQgSXNvY2hyb25vdXMgZW5kcG9pbnRzICkuDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VRFBfUlhfREFUQV9CSzEgRVFVKCAweDEgPDwgNiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVURQICkgUmVjZWl2ZSBEYXRhIEJhbmsgMSAoIG9ubHkgdXNlZCBieSBlbmRwb2ludHMgd2l0aCBwaW5nIC0gcG9uZyBhdHRyaWJ1dGVzICkuDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VRFBfRElSIEVRVSggMHgxIDw8IDcgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFVEUCApIFRyYW5zZmVyIERpcmVjdGlvbg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVURQX0VQVFlQRSBFUVUoIDB4NyA8PCA4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBVRFAgKSBFbmRwb2ludCB0eXBlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VRFBfRVBUWVBFX0NUUkwgRVFVKCAweDAgPDwgOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVURQICkgQ29udHJvbA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVURQX0VQVFlQRV9JU09fT1VUIEVRVSggMHgxIDw8IDggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFVEUCApIElzb2Nocm9ub3VzIE9VVA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVURQX0VQVFlQRV9CVUxLX09VVCBFUVUoIDB4MiA8PCA4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBVRFAgKSBCdWxrIE9VVA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVURQX0VQVFlQRV9JTlRfT1VUIEVRVSggMHgzIDw8IDggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFVEUCApIEludGVycnVwdCBPVVQNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VEUF9FUFRZUEVfSVNPX0lOIEVRVSggMHg1IDw8IDggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFVEUCApIElzb2Nocm9ub3VzIElODQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VRFBfRVBUWVBFX0JVTEtfSU4gRVFVKCAweDYgPDwgOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVURQICkgQnVsayBJTg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVURQX0VQVFlQRV9JTlRfSU4gRVFVKCAweDcgPDwgOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVURQICkgSW50ZXJydXB0IElODQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VRFBfRFRHTEUgRVFVKCAweDEgPDwgMTEgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFVEUCApIERhdGEgVG9nZ2xlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VRFBfRVBFRFMgRVFVKCAweDEgPDwgMTUgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFVEUCApIEVuZHBvaW50IEVuYWJsZSBEaXNhYmxlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VRFBfUlhCWVRFQ05UIEVRVSggMHg3RkYgPDwgMTYgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFVEUCApIE51bWJlciBPZiBCeXRlcyBBdmFpbGFibGUgaW4gdGhlIEZJRk8NCi0vKiAtIC0tLS0tLS0tIFVEUF9UWFZDIDogKFVEUCBPZmZzZXQ6IDB4NzQpIFRyYW5zY2VpdmVyIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VEUF9UWFZESVMgRVFVKCAweDEgPDwgOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVURQICkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VEUF9QVU9OIEVRVSggMHgxIDw8IDkgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFVEUCApIFB1bGwgLSB1cCBPTg0KKy8vIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAtICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFVTQiBEZXZpY2UgSW50ZXJmYWNlDQorLy8gLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vIC0gLS0tLS0tLS0gVURQX0ZSTV9OVU0gOiAoVURQIE9mZnNldDogMHgwKSBVU0IgRnJhbWUgTnVtYmVyIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX1VEUF9GUk1fTlVNICAgICAgICAgRVFVICgweDdGRiA8PCAgMCkgOy0gKFVEUCkgRnJhbWUgTnVtYmVyIGFzIERlZmluZWQgaW4gdGhlIFBhY2tldCBGaWVsZCBGb3JtYXRzDQorQVQ5MUNfVURQX0ZSTV9FUlIgICAgICAgICBFUVUgKDB4MSA8PCAxNikgOy0gKFVEUCkgRnJhbWUgRXJyb3INCitBVDkxQ19VRFBfRlJNX09LICAgICAgICAgIEVRVSAoMHgxIDw8IDE3KSA7LSAoVURQKSBGcmFtZSBPSw0KKy8vIC0gLS0tLS0tLS0gVURQX0dMQl9TVEFURSA6IChVRFAgT2Zmc2V0OiAweDQpIFVTQiBHbG9iYWwgU3RhdGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfVURQX0ZBRERFTiAgICAgICAgICBFUVUgKDB4MSA8PCAgMCkgOy0gKFVEUCkgRnVuY3Rpb24gQWRkcmVzcyBFbmFibGUNCitBVDkxQ19VRFBfQ09ORkcgICAgICAgICAgIEVRVSAoMHgxIDw8ICAxKSA7LSAoVURQKSBDb25maWd1cmVkDQorQVQ5MUNfVURQX0VTUiAgICAgICAgICAgICBFUVUgKDB4MSA8PCAgMikgOy0gKFVEUCkgRW5hYmxlIFNlbmQgUmVzdW1lDQorQVQ5MUNfVURQX1JTTUlOUFIgICAgICAgICBFUVUgKDB4MSA8PCAgMykgOy0gKFVEUCkgQSBSZXN1bWUgSGFzIEJlZW4gU2VudCB0byB0aGUgSG9zdA0KK0FUOTFDX1VEUF9STVdVUEUgICAgICAgICAgRVFVICgweDEgPDwgIDQpIDstIChVRFApIFJlbW90ZSBXYWtlIFVwIEVuYWJsZQ0KKy8vIC0gLS0tLS0tLS0gVURQX0ZBRERSIDogKFVEUCBPZmZzZXQ6IDB4OCkgVVNCIEZ1bmN0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfVURQX0ZBREQgICAgICAgICAgICBFUVUgKDB4RkYgPDwgIDApIDstIChVRFApIEZ1bmN0aW9uIEFkZHJlc3MgVmFsdWUNCitBVDkxQ19VRFBfRkVOICAgICAgICAgICAgIEVRVSAoMHgxIDw8ICA4KSA7LSAoVURQKSBGdW5jdGlvbiBFbmFibGUNCisvLyAtIC0tLS0tLS0tIFVEUF9JRVIgOiAoVURQIE9mZnNldDogMHgxMCkgVVNCIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfVURQX0VQSU5UMCAgICAgICAgICBFUVUgKDB4MSA8PCAgMCkgOy0gKFVEUCkgRW5kcG9pbnQgMCBJbnRlcnJ1cHQNCitBVDkxQ19VRFBfRVBJTlQxICAgICAgICAgIEVRVSAoMHgxIDw8ICAxKSA7LSAoVURQKSBFbmRwb2ludCAwIEludGVycnVwdA0KK0FUOTFDX1VEUF9FUElOVDIgICAgICAgICAgRVFVICgweDEgPDwgIDIpIDstIChVRFApIEVuZHBvaW50IDIgSW50ZXJydXB0DQorQVQ5MUNfVURQX0VQSU5UMyAgICAgICAgICBFUVUgKDB4MSA8PCAgMykgOy0gKFVEUCkgRW5kcG9pbnQgMyBJbnRlcnJ1cHQNCitBVDkxQ19VRFBfRVBJTlQ0ICAgICAgICAgIEVRVSAoMHgxIDw8ICA0KSA7LSAoVURQKSBFbmRwb2ludCA0IEludGVycnVwdA0KK0FUOTFDX1VEUF9FUElOVDUgICAgICAgICAgRVFVICgweDEgPDwgIDUpIDstIChVRFApIEVuZHBvaW50IDUgSW50ZXJydXB0DQorQVQ5MUNfVURQX1JYU1VTUCAgICAgICAgICBFUVUgKDB4MSA8PCAgOCkgOy0gKFVEUCkgVVNCIFN1c3BlbmQgSW50ZXJydXB0DQorQVQ5MUNfVURQX1JYUlNNICAgICAgICAgICBFUVUgKDB4MSA8PCAgOSkgOy0gKFVEUCkgVVNCIFJlc3VtZSBJbnRlcnJ1cHQNCitBVDkxQ19VRFBfRVhUUlNNICAgICAgICAgIEVRVSAoMHgxIDw8IDEwKSA7LSAoVURQKSBVU0IgRXh0ZXJuYWwgUmVzdW1lIEludGVycnVwdA0KK0FUOTFDX1VEUF9TT0ZJTlQgICAgICAgICAgRVFVICgweDEgPDwgMTEpIDstIChVRFApIFVTQiBTdGFydCBPZiBmcmFtZSBJbnRlcnJ1cHQNCitBVDkxQ19VRFBfV0FLRVVQICAgICAgICAgIEVRVSAoMHgxIDw8IDEzKSA7LSAoVURQKSBVU0IgUmVzdW1lIEludGVycnVwdA0KKy8vIC0gLS0tLS0tLS0gVURQX0lEUiA6IChVRFAgT2Zmc2V0OiAweDE0KSBVU0IgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLSAtLS0tLS0tLSBVRFBfSU1SIDogKFVEUCBPZmZzZXQ6IDB4MTgpIFVTQiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtIC0tLS0tLS0tIFVEUF9JU1IgOiAoVURQIE9mZnNldDogMHgxYykgVVNCIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfVURQX0VOREJVU1JFUyAgICAgICBFUVUgKDB4MSA8PCAxMikgOy0gKFVEUCkgVVNCIEVuZCBPZiBCdXMgUmVzZXQgSW50ZXJydXB0DQorLy8gLSAtLS0tLS0tLSBVRFBfSUNSIDogKFVEUCBPZmZzZXQ6IDB4MjApIFVTQiBJbnRlcnJ1cHQgQ2xlYXIgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLSAtLS0tLS0tLSBVRFBfUlNUX0VQIDogKFVEUCBPZmZzZXQ6IDB4MjgpIFVTQiBSZXNldCBFbmRwb2ludCBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19VRFBfRVAwICAgICAgICAgICAgIEVRVSAoMHgxIDw8ICAwKSA7LSAoVURQKSBSZXNldCBFbmRwb2ludCAwDQorQVQ5MUNfVURQX0VQMSAgICAgICAgICAgICBFUVUgKDB4MSA8PCAgMSkgOy0gKFVEUCkgUmVzZXQgRW5kcG9pbnQgMQ0KK0FUOTFDX1VEUF9FUDIgICAgICAgICAgICAgRVFVICgweDEgPDwgIDIpIDstIChVRFApIFJlc2V0IEVuZHBvaW50IDINCitBVDkxQ19VRFBfRVAzICAgICAgICAgICAgIEVRVSAoMHgxIDw8ICAzKSA7LSAoVURQKSBSZXNldCBFbmRwb2ludCAzDQorQVQ5MUNfVURQX0VQNCAgICAgICAgICAgICBFUVUgKDB4MSA8PCAgNCkgOy0gKFVEUCkgUmVzZXQgRW5kcG9pbnQgNA0KK0FUOTFDX1VEUF9FUDUgICAgICAgICAgICAgRVFVICgweDEgPDwgIDUpIDstIChVRFApIFJlc2V0IEVuZHBvaW50IDUNCisvLyAtIC0tLS0tLS0tIFVEUF9DU1IgOiAoVURQIE9mZnNldDogMHgzMCkgVVNCIEVuZHBvaW50IENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19VRFBfVFhDT01QICAgICAgICAgIEVRVSAoMHgxIDw8ICAwKSA7LSAoVURQKSBHZW5lcmF0ZXMgYW4gSU4gcGFja2V0IHdpdGggZGF0YSBwcmV2aW91c2x5IHdyaXR0ZW4gaW4gdGhlIERQUg0KK0FUOTFDX1VEUF9SWF9EQVRBX0JLMCAgICAgRVFVICgweDEgPDwgIDEpIDstIChVRFApIFJlY2VpdmUgRGF0YSBCYW5rIDANCitBVDkxQ19VRFBfUlhTRVRVUCAgICAgICAgIEVRVSAoMHgxIDw8ICAyKSA7LSAoVURQKSBTZW5kcyBTVEFMTCB0byB0aGUgSG9zdCAoQ29udHJvbCBlbmRwb2ludHMpDQorQVQ5MUNfVURQX0lTT0VSUk9SICAgICAgICBFUVUgKDB4MSA8PCAgMykgOy0gKFVEUCkgSXNvY2hyb25vdXMgZXJyb3IgKElzb2Nocm9ub3VzIGVuZHBvaW50cykNCitBVDkxQ19VRFBfVFhQS1RSRFkgICAgICAgIEVRVSAoMHgxIDw8ICA0KSA7LSAoVURQKSBUcmFuc21pdCBQYWNrZXQgUmVhZHkNCitBVDkxQ19VRFBfRk9SQ0VTVEFMTCAgICAgIEVRVSAoMHgxIDw8ICA1KSA7LSAoVURQKSBGb3JjZSBTdGFsbCAodXNlZCBieSBDb250cm9sLCBCdWxrIGFuZCBJc29jaHJvbm91cyBlbmRwb2ludHMpLg0KK0FUOTFDX1VEUF9SWF9EQVRBX0JLMSAgICAgRVFVICgweDEgPDwgIDYpIDstIChVRFApIFJlY2VpdmUgRGF0YSBCYW5rIDEgKG9ubHkgdXNlZCBieSBlbmRwb2ludHMgd2l0aCBwaW5nLXBvbmcgYXR0cmlidXRlcykuDQorQVQ5MUNfVURQX0RJUiAgICAgICAgICAgICBFUVUgKDB4MSA8PCAgNykgOy0gKFVEUCkgVHJhbnNmZXIgRGlyZWN0aW9uDQorQVQ5MUNfVURQX0VQVFlQRSAgICAgICAgICBFUVUgKDB4NyA8PCAgOCkgOy0gKFVEUCkgRW5kcG9pbnQgdHlwZQ0KK0FUOTFDX1VEUF9FUFRZUEVfQ1RSTCAgICAgRVFVICgweDAgPDwgIDgpIDstIChVRFApIENvbnRyb2wNCitBVDkxQ19VRFBfRVBUWVBFX0lTT19PVVQgIEVRVSAoMHgxIDw8ICA4KSA7LSAoVURQKSBJc29jaHJvbm91cyBPVVQNCitBVDkxQ19VRFBfRVBUWVBFX0JVTEtfT1VUIEVRVSAoMHgyIDw8ICA4KSA7LSAoVURQKSBCdWxrIE9VVA0KK0FUOTFDX1VEUF9FUFRZUEVfSU5UX09VVCAgRVFVICgweDMgPDwgIDgpIDstIChVRFApIEludGVycnVwdCBPVVQNCitBVDkxQ19VRFBfRVBUWVBFX0lTT19JTiAgIEVRVSAoMHg1IDw8ICA4KSA7LSAoVURQKSBJc29jaHJvbm91cyBJTg0KK0FUOTFDX1VEUF9FUFRZUEVfQlVMS19JTiAgRVFVICgweDYgPDwgIDgpIDstIChVRFApIEJ1bGsgSU4NCitBVDkxQ19VRFBfRVBUWVBFX0lOVF9JTiAgIEVRVSAoMHg3IDw8ICA4KSA7LSAoVURQKSBJbnRlcnJ1cHQgSU4NCitBVDkxQ19VRFBfRFRHTEUgICAgICAgICAgIEVRVSAoMHgxIDw8IDExKSA7LSAoVURQKSBEYXRhIFRvZ2dsZQ0KK0FUOTFDX1VEUF9FUEVEUyAgICAgICAgICAgRVFVICgweDEgPDwgMTUpIDstIChVRFApIEVuZHBvaW50IEVuYWJsZSBEaXNhYmxlDQorQVQ5MUNfVURQX1JYQllURUNOVCAgICAgICBFUVUgKDB4N0ZGIDw8IDE2KSA7LSAoVURQKSBOdW1iZXIgT2YgQnl0ZXMgQXZhaWxhYmxlIGluIHRoZSBGSUZPDQorLy8gLSAtLS0tLS0tLSBVRFBfVFhWQyA6IChVRFAgT2Zmc2V0OiAweDc0KSBUcmFuc2NlaXZlciBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX1VEUF9UWFZESVMgICAgICAgICAgRVFVICgweDEgPDwgIDgpIDstIChVRFApIA0KK0FUOTFDX1VEUF9QVU9OICAgICAgICAgICAgRVFVICgweDEgPDwgIDkpIDstIChVRFApIFB1bGwtdXAgT04NCiANCi0vKiAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogLSAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBUaW1lciBDb3VudGVyIENoYW5uZWwgSW50ZXJmYWNlICovDQotLyogLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qIC0gLS0tLS0tLS0gVENfQ0NSIDogKFRDIE9mZnNldDogMHgwKSBUQyBDaGFubmVsIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDX0NMS0VOIEVRVSggMHgxIDw8IDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDICkgQ291bnRlciBDbG9jayBFbmFibGUgQ29tbWFuZA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVENfQ0xLRElTIEVRVSggMHgxIDw8IDEgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDICkgQ291bnRlciBDbG9jayBEaXNhYmxlIENvbW1hbmQNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDX1NXVFJHIEVRVSggMHgxIDw8IDIgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDICkgU29mdHdhcmUgVHJpZ2dlciBDb21tYW5kDQotLyogLSAtLS0tLS0tLSBUQ19DTVIgOiAoVEMgT2Zmc2V0OiAweDQpIFRDIENoYW5uZWwgTW9kZSBSZWdpc3RlcjogQ2FwdHVyZSBNb2RlIC8gV2F2ZWZvcm0gTW9kZSAtLS0tLS0tLSAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVENfQ0xLUyBFUVUoIDB4NyA8PCAwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUQyApIENsb2NrIFNlbGVjdGlvbg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVENfQ0xLU19USU1FUl9ESVYxX0NMT0NLIEVRVSggMHgwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUQyApIENsb2NrIHNlbGVjdGVkOlRJTUVSX0RJVjFfQ0xPQ0sNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDX0NMS1NfVElNRVJfRElWMl9DTE9DSyBFUVUoIDB4MSApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMgKSBDbG9jayBzZWxlY3RlZDpUSU1FUl9ESVYyX0NMT0NLDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjNfQ0xPQ0sgRVFVKCAweDIgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDICkgQ2xvY2sgc2VsZWN0ZWQ6VElNRVJfRElWM19DTE9DSw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVENfQ0xLU19USU1FUl9ESVY0X0NMT0NLIEVRVSggMHgzICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUQyApIENsb2NrIHNlbGVjdGVkOlRJTUVSX0RJVjRfQ0xPQ0sNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDX0NMS1NfVElNRVJfRElWNV9DTE9DSyBFUVUoIDB4NCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMgKSBDbG9jayBzZWxlY3RlZDpUSU1FUl9ESVY1X0NMT0NLDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UQ19DTEtTX1hDMCBFUVUoIDB4NSApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMgKSBDbG9jayBzZWxlY3RlZDpYQzANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDX0NMS1NfWEMxIEVRVSggMHg2ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUQyApIENsb2NrIHNlbGVjdGVkOlhDMQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVENfQ0xLU19YQzIgRVFVKCAweDcgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDICkgQ2xvY2sgc2VsZWN0ZWQ6WEMyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UQ19DTEtJIEVRVSggMHgxIDw8IDMgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDICkgQ2xvY2sgSW52ZXJ0DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UQ19CVVJTVCBFUVUoIDB4MyA8PCA0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUQyApIEJ1cnN0IFNpZ25hbCBTZWxlY3Rpb24NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDX0JVUlNUX05PTkUgRVFVKCAweDAgPDwgNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMgKSBUaGUgY2xvY2sgaXMgbm90IGdhdGVkIGJ5IGFuIGV4dGVybmFsIHNpZ25hbA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVENfQlVSU1RfWEMwIEVRVSggMHgxIDw8IDQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDICkgWEMwIGlzIEFORGVkIHdpdGggdGhlIHNlbGVjdGVkIGNsb2NrDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UQ19CVVJTVF9YQzEgRVFVKCAweDIgPDwgNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMgKSBYQzEgaXMgQU5EZWQgd2l0aCB0aGUgc2VsZWN0ZWQgY2xvY2sNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDX0JVUlNUX1hDMiBFUVUoIDB4MyA8PCA0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUQyApIFhDMiBpcyBBTkRlZCB3aXRoIHRoZSBzZWxlY3RlZCBjbG9jaw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVENfQ1BDU1RPUCBFUVUoIDB4MSA8PCA2ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUQyApIENvdW50ZXIgQ2xvY2sgU3RvcHBlZCB3aXRoIFJDIENvbXBhcmUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDX0xEQlNUT1AgRVFVKCAweDEgPDwgNiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMgKSBDb3VudGVyIENsb2NrIFN0b3BwZWQgd2l0aCBSQiBMb2FkaW5nDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UQ19DUENESVMgRVFVKCAweDEgPDwgNyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMgKSBDb3VudGVyIENsb2NrIERpc2FibGUgd2l0aCBSQyBDb21wYXJlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UQ19MREJESVMgRVFVKCAweDEgPDwgNyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMgKSBDb3VudGVyIENsb2NrIERpc2FibGVkIHdpdGggUkIgTG9hZGluZw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVENfRVRSR0VERyBFUVUoIDB4MyA8PCA4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUQyApIEV4dGVybmFsIFRyaWdnZXIgRWRnZSBTZWxlY3Rpb24NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDX0VUUkdFREdfTk9ORSBFUVUoIDB4MCA8PCA4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUQyApIEVkZ2U6Tm9uZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVENfRVRSR0VER19SSVNJTkcgRVFVKCAweDEgPDwgOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMgKSBFZGdlOnJpc2luZyBlZGdlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UQ19FVFJHRURHX0ZBTExJTkcgRVFVKCAweDIgPDwgOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMgKSBFZGdlOmZhbGxpbmcgZWRnZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVENfRVRSR0VER19CT1RIIEVRVSggMHgzIDw8IDggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDICkgRWRnZTplYWNoIGVkZ2UNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDX0VFVlRFREcgRVFVKCAweDMgPDwgOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMgKSBFeHRlcm5hbCBFdmVudCBFZGdlIFNlbGVjdGlvbg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVENfRUVWVEVER19OT05FIEVRVSggMHgwIDw8IDggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDICkgRWRnZTpOb25lDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UQ19FRVZURURHX1JJU0lORyBFUVUoIDB4MSA8PCA4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUQyApIEVkZ2U6cmlzaW5nIGVkZ2UNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDX0VFVlRFREdfRkFMTElORyBFUVUoIDB4MiA8PCA4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUQyApIEVkZ2U6ZmFsbGluZyBlZGdlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UQ19FRVZURURHX0JPVEggRVFVKCAweDMgPDwgOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMgKSBFZGdlOmVhY2ggZWRnZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVENfRUVWVCBFUVUoIDB4MyA8PCAxMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMgKSBFeHRlcm5hbCBFdmVudCBTZWxlY3Rpb24NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDX0VFVlRfVElPQiBFUVUoIDB4MCA8PCAxMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMgKSBTaWduYWwgc2VsZWN0ZWQgYXMgZXh0ZXJuYWwgZXZlbnQ6VElPQiBUSU9CIGRpcmVjdGlvbjogaW5wdXQNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDX0VFVlRfWEMwIEVRVSggMHgxIDw8IDEwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUQyApIFNpZ25hbCBzZWxlY3RlZCBhcyBleHRlcm5hbCBldmVudDpYQzAgVElPQiBkaXJlY3Rpb246IG91dHB1dA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVENfRUVWVF9YQzEgRVFVKCAweDIgPDwgMTAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDICkgU2lnbmFsIHNlbGVjdGVkIGFzIGV4dGVybmFsIGV2ZW50OlhDMSBUSU9CIGRpcmVjdGlvbjogb3V0cHV0DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UQ19FRVZUX1hDMiBFUVUoIDB4MyA8PCAxMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMgKSBTaWduYWwgc2VsZWN0ZWQgYXMgZXh0ZXJuYWwgZXZlbnQ6WEMyIFRJT0IgZGlyZWN0aW9uOiBvdXRwdXQNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDX0FCRVRSRyBFUVUoIDB4MSA8PCAxMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMgKSBUSU9BIG9yIFRJT0IgRXh0ZXJuYWwgVHJpZ2dlciBTZWxlY3Rpb24NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDX0VORVRSRyBFUVUoIDB4MSA8PCAxMiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMgKSBFeHRlcm5hbCBFdmVudCBUcmlnZ2VyIGVuYWJsZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVENfV0FWRVNFTCBFUVUoIDB4MyA8PCAxMyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMgKSBXYXZlZm9ybSBTZWxlY3Rpb24NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDX1dBVkVTRUxfVVAgRVFVKCAweDAgPDwgMTMgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDICkgVVAgbW9kZSB3aXRob3V0IGF0b21hdGljIHRyaWdnZXIgb24gUkMgQ29tcGFyZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVENfV0FWRVNFTF9VUERPV04gRVFVKCAweDEgPDwgMTMgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDICkgVVBET1dOIG1vZGUgd2l0aG91dCBhdXRvbWF0aWMgdHJpZ2dlciBvbiBSQyBDb21wYXJlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UQ19XQVZFU0VMX1VQX0FVVE8gRVFVKCAweDIgPDwgMTMgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDICkgVVAgbW9kZSB3aXRoIGF1dG9tYXRpYyB0cmlnZ2VyIG9uIFJDIENvbXBhcmUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDX1dBVkVTRUxfVVBET1dOX0FVVE8gRVFVKCAweDMgPDwgMTMgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDICkgVVBET1dOIG1vZGUgd2l0aCBhdXRvbWF0aWMgdHJpZ2dlciBvbiBSQyBDb21wYXJlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UQ19DUENUUkcgRVFVKCAweDEgPDwgMTQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDICkgUkMgQ29tcGFyZSBUcmlnZ2VyIEVuYWJsZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVENfV0FWRSBFUVUoIDB4MSA8PCAxNSApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMgKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVENfQUNQQSBFUVUoIDB4MyA8PCAxNiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMgKSBSQSBDb21wYXJlIEVmZmVjdCBvbiBUSU9BDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UQ19BQ1BBX05PTkUgRVFVKCAweDAgPDwgMTYgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDICkgRWZmZWN0Om5vbmUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDX0FDUEFfU0VUIEVRVSggMHgxIDw8IDE2ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUQyApIEVmZmVjdDpzZXQNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDX0FDUEFfQ0xFQVIgRVFVKCAweDIgPDwgMTYgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDICkgRWZmZWN0OmNsZWFyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UQ19BQ1BBX1RPR0dMRSBFUVUoIDB4MyA8PCAxNiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMgKSBFZmZlY3Q6dG9nZ2xlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UQ19MRFJBIEVRVSggMHgzIDw8IDE2ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUQyApIFJBIExvYWRpbmcgU2VsZWN0aW9uDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UQ19MRFJBX05PTkUgRVFVKCAweDAgPDwgMTYgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDICkgRWRnZTpOb25lDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UQ19MRFJBX1JJU0lORyBFUVUoIDB4MSA8PCAxNiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMgKSBFZGdlOnJpc2luZyBlZGdlIG9mIFRJT0ENCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDX0xEUkFfRkFMTElORyBFUVUoIDB4MiA8PCAxNiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMgKSBFZGdlOmZhbGxpbmcgZWRnZSBvZiBUSU9BDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UQ19MRFJBX0JPVEggRVFVKCAweDMgPDwgMTYgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDICkgRWRnZTplYWNoIGVkZ2Ugb2YgVElPQQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVENfQUNQQyBFUVUoIDB4MyA8PCAxOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMgKSBSQyBDb21wYXJlIEVmZmVjdCBvbiBUSU9BDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UQ19BQ1BDX05PTkUgRVFVKCAweDAgPDwgMTggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDICkgRWZmZWN0Om5vbmUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDX0FDUENfU0VUIEVRVSggMHgxIDw8IDE4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUQyApIEVmZmVjdDpzZXQNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDX0FDUENfQ0xFQVIgRVFVKCAweDIgPDwgMTggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDICkgRWZmZWN0OmNsZWFyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UQ19BQ1BDX1RPR0dMRSBFUVUoIDB4MyA8PCAxOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMgKSBFZmZlY3Q6dG9nZ2xlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UQ19MRFJCIEVRVSggMHgzIDw8IDE4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUQyApIFJCIExvYWRpbmcgU2VsZWN0aW9uDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UQ19MRFJCX05PTkUgRVFVKCAweDAgPDwgMTggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDICkgRWRnZTpOb25lDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UQ19MRFJCX1JJU0lORyBFUVUoIDB4MSA8PCAxOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMgKSBFZGdlOnJpc2luZyBlZGdlIG9mIFRJT0ENCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDX0xEUkJfRkFMTElORyBFUVUoIDB4MiA8PCAxOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMgKSBFZGdlOmZhbGxpbmcgZWRnZSBvZiBUSU9BDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UQ19MRFJCX0JPVEggRVFVKCAweDMgPDwgMTggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDICkgRWRnZTplYWNoIGVkZ2Ugb2YgVElPQQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVENfQUVFVlQgRVFVKCAweDMgPDwgMjAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDICkgRXh0ZXJuYWwgRXZlbnQgRWZmZWN0IG9uIFRJT0ENCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDX0FFRVZUX05PTkUgRVFVKCAweDAgPDwgMjAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDICkgRWZmZWN0Om5vbmUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDX0FFRVZUX1NFVCBFUVUoIDB4MSA8PCAyMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMgKSBFZmZlY3Q6c2V0DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UQ19BRUVWVF9DTEVBUiBFUVUoIDB4MiA8PCAyMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMgKSBFZmZlY3Q6Y2xlYXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDX0FFRVZUX1RPR0dMRSBFUVUoIDB4MyA8PCAyMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMgKSBFZmZlY3Q6dG9nZ2xlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UQ19BU1dUUkcgRVFVKCAweDMgPDwgMjIgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDICkgU29mdHdhcmUgVHJpZ2dlciBFZmZlY3Qgb24gVElPQQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVENfQVNXVFJHX05PTkUgRVFVKCAweDAgPDwgMjIgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDICkgRWZmZWN0Om5vbmUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDX0FTV1RSR19TRVQgRVFVKCAweDEgPDwgMjIgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDICkgRWZmZWN0OnNldA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVENfQVNXVFJHX0NMRUFSIEVRVSggMHgyIDw8IDIyICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUQyApIEVmZmVjdDpjbGVhcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVENfQVNXVFJHX1RPR0dMRSBFUVUoIDB4MyA8PCAyMiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMgKSBFZmZlY3Q6dG9nZ2xlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UQ19CQ1BCIEVRVSggMHgzIDw8IDI0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUQyApIFJCIENvbXBhcmUgRWZmZWN0IG9uIFRJT0INCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDX0JDUEJfTk9ORSBFUVUoIDB4MCA8PCAyNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMgKSBFZmZlY3Q6bm9uZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVENfQkNQQl9TRVQgRVFVKCAweDEgPDwgMjQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDICkgRWZmZWN0OnNldA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVENfQkNQQl9DTEVBUiBFUVUoIDB4MiA8PCAyNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMgKSBFZmZlY3Q6Y2xlYXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDX0JDUEJfVE9HR0xFIEVRVSggMHgzIDw8IDI0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUQyApIEVmZmVjdDp0b2dnbGUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDX0JDUEMgRVFVKCAweDMgPDwgMjYgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDICkgUkMgQ29tcGFyZSBFZmZlY3Qgb24gVElPQg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVENfQkNQQ19OT05FIEVRVSggMHgwIDw8IDI2ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUQyApIEVmZmVjdDpub25lDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UQ19CQ1BDX1NFVCBFUVUoIDB4MSA8PCAyNiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMgKSBFZmZlY3Q6c2V0DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UQ19CQ1BDX0NMRUFSIEVRVSggMHgyIDw8IDI2ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUQyApIEVmZmVjdDpjbGVhcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVENfQkNQQ19UT0dHTEUgRVFVKCAweDMgPDwgMjYgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDICkgRWZmZWN0OnRvZ2dsZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVENfQkVFVlQgRVFVKCAweDMgPDwgMjggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDICkgRXh0ZXJuYWwgRXZlbnQgRWZmZWN0IG9uIFRJT0INCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDX0JFRVZUX05PTkUgRVFVKCAweDAgPDwgMjggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDICkgRWZmZWN0Om5vbmUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDX0JFRVZUX1NFVCBFUVUoIDB4MSA8PCAyOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMgKSBFZmZlY3Q6c2V0DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UQ19CRUVWVF9DTEVBUiBFUVUoIDB4MiA8PCAyOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMgKSBFZmZlY3Q6Y2xlYXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDX0JFRVZUX1RPR0dMRSBFUVUoIDB4MyA8PCAyOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMgKSBFZmZlY3Q6dG9nZ2xlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UQ19CU1dUUkcgRVFVKCAweDMgPDwgMzAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDICkgU29mdHdhcmUgVHJpZ2dlciBFZmZlY3Qgb24gVElPQg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVENfQlNXVFJHX05PTkUgRVFVKCAweDAgPDwgMzAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDICkgRWZmZWN0Om5vbmUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDX0JTV1RSR19TRVQgRVFVKCAweDEgPDwgMzAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDICkgRWZmZWN0OnNldA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVENfQlNXVFJHX0NMRUFSIEVRVSggMHgyIDw8IDMwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUQyApIEVmZmVjdDpjbGVhcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVENfQlNXVFJHX1RPR0dMRSBFUVUoIDB4MyA8PCAzMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMgKSBFZmZlY3Q6dG9nZ2xlDQotLyogLSAtLS0tLS0tLSBUQ19TUiA6IChUQyBPZmZzZXQ6IDB4MjApIFRDIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UQ19DT1ZGUyBFUVUoIDB4MSA8PCAwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUQyApIENvdW50ZXIgT3ZlcmZsb3cNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDX0xPVlJTIEVRVSggMHgxIDw8IDEgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDICkgTG9hZCBPdmVycnVuDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UQ19DUEFTIEVRVSggMHgxIDw8IDIgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDICkgUkEgQ29tcGFyZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVENfQ1BCUyBFUVUoIDB4MSA8PCAzICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUQyApIFJCIENvbXBhcmUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDX0NQQ1MgRVFVKCAweDEgPDwgNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMgKSBSQyBDb21wYXJlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UQ19MRFJBUyBFUVUoIDB4MSA8PCA1ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUQyApIFJBIExvYWRpbmcNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDX0xEUkJTIEVRVSggMHgxIDw8IDYgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDICkgUkIgTG9hZGluZw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVENfRVRSR1MgRVFVKCAweDEgPDwgNyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMgKSBFeHRlcm5hbCBUcmlnZ2VyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UQ19DTEtTVEEgRVFVKCAweDEgPDwgMTYgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDICkgQ2xvY2sgRW5hYmxpbmcNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDX01USU9BIEVRVSggMHgxIDw8IDE3ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUQyApIFRJT0EgTWlycm9yDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UQ19NVElPQiBFUVUoIDB4MSA8PCAxOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMgKSBUSU9BIE1pcnJvcg0KLS8qIC0gLS0tLS0tLS0gVENfSUVSIDogKFRDIE9mZnNldDogMHgyNCkgVEMgQ2hhbm5lbCBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLSAtLS0tLS0tLSBUQ19JRFIgOiAoVEMgT2Zmc2V0OiAweDI4KSBUQyBDaGFubmVsIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLSAtLS0tLS0tLSBUQ19JTVIgOiAoVEMgT2Zmc2V0OiAweDJjKSBUQyBDaGFubmVsIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tICovDQorLy8gLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vIC0gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVGltZXIgQ291bnRlciBDaGFubmVsIEludGVyZmFjZQ0KKy8vIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAtIC0tLS0tLS0tIFRDX0NDUiA6IChUQyBPZmZzZXQ6IDB4MCkgVEMgQ2hhbm5lbCBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX1RDX0NMS0VOICAgICAgICAgICAgRVFVICgweDEgPDwgIDApIDstIChUQykgQ291bnRlciBDbG9jayBFbmFibGUgQ29tbWFuZA0KK0FUOTFDX1RDX0NMS0RJUyAgICAgICAgICAgRVFVICgweDEgPDwgIDEpIDstIChUQykgQ291bnRlciBDbG9jayBEaXNhYmxlIENvbW1hbmQNCitBVDkxQ19UQ19TV1RSRyAgICAgICAgICAgIEVRVSAoMHgxIDw8ICAyKSA7LSAoVEMpIFNvZnR3YXJlIFRyaWdnZXIgQ29tbWFuZA0KKy8vIC0gLS0tLS0tLS0gVENfQ01SIDogKFRDIE9mZnNldDogMHg0KSBUQyBDaGFubmVsIE1vZGUgUmVnaXN0ZXI6IENhcHR1cmUgTW9kZSAvIFdhdmVmb3JtIE1vZGUgLS0tLS0tLS0gDQorQVQ5MUNfVENfQ0xLUyAgICAgICAgICAgICBFUVUgKDB4NyA8PCAgMCkgOy0gKFRDKSBDbG9jayBTZWxlY3Rpb24NCitBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjFfQ0xPQ0sgRVFVICgweDApIDstIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjFfQ0xPQ0sNCitBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjJfQ0xPQ0sgRVFVICgweDEpIDstIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjJfQ0xPQ0sNCitBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjNfQ0xPQ0sgRVFVICgweDIpIDstIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjNfQ0xPQ0sNCitBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjRfQ0xPQ0sgRVFVICgweDMpIDstIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjRfQ0xPQ0sNCitBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjVfQ0xPQ0sgRVFVICgweDQpIDstIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjVfQ0xPQ0sNCitBVDkxQ19UQ19DTEtTX1hDMCAgICAgICAgIEVRVSAoMHg1KSA7LSAoVEMpIENsb2NrIHNlbGVjdGVkOiBYQzANCitBVDkxQ19UQ19DTEtTX1hDMSAgICAgICAgIEVRVSAoMHg2KSA7LSAoVEMpIENsb2NrIHNlbGVjdGVkOiBYQzENCitBVDkxQ19UQ19DTEtTX1hDMiAgICAgICAgIEVRVSAoMHg3KSA7LSAoVEMpIENsb2NrIHNlbGVjdGVkOiBYQzINCitBVDkxQ19UQ19DTEtJICAgICAgICAgICAgIEVRVSAoMHgxIDw8ICAzKSA7LSAoVEMpIENsb2NrIEludmVydA0KK0FUOTFDX1RDX0JVUlNUICAgICAgICAgICAgRVFVICgweDMgPDwgIDQpIDstIChUQykgQnVyc3QgU2lnbmFsIFNlbGVjdGlvbg0KK0FUOTFDX1RDX0JVUlNUX05PTkUgICAgICAgRVFVICgweDAgPDwgIDQpIDstIChUQykgVGhlIGNsb2NrIGlzIG5vdCBnYXRlZCBieSBhbiBleHRlcm5hbCBzaWduYWwNCitBVDkxQ19UQ19CVVJTVF9YQzAgICAgICAgIEVRVSAoMHgxIDw8ICA0KSA7LSAoVEMpIFhDMCBpcyBBTkRlZCB3aXRoIHRoZSBzZWxlY3RlZCBjbG9jaw0KK0FUOTFDX1RDX0JVUlNUX1hDMSAgICAgICAgRVFVICgweDIgPDwgIDQpIDstIChUQykgWEMxIGlzIEFORGVkIHdpdGggdGhlIHNlbGVjdGVkIGNsb2NrDQorQVQ5MUNfVENfQlVSU1RfWEMyICAgICAgICBFUVUgKDB4MyA8PCAgNCkgOy0gKFRDKSBYQzIgaXMgQU5EZWQgd2l0aCB0aGUgc2VsZWN0ZWQgY2xvY2sNCitBVDkxQ19UQ19DUENTVE9QICAgICAgICAgIEVRVSAoMHgxIDw8ICA2KSA7LSAoVEMpIENvdW50ZXIgQ2xvY2sgU3RvcHBlZCB3aXRoIFJDIENvbXBhcmUNCitBVDkxQ19UQ19MREJTVE9QICAgICAgICAgIEVRVSAoMHgxIDw8ICA2KSA7LSAoVEMpIENvdW50ZXIgQ2xvY2sgU3RvcHBlZCB3aXRoIFJCIExvYWRpbmcNCitBVDkxQ19UQ19DUENESVMgICAgICAgICAgIEVRVSAoMHgxIDw8ICA3KSA7LSAoVEMpIENvdW50ZXIgQ2xvY2sgRGlzYWJsZSB3aXRoIFJDIENvbXBhcmUNCitBVDkxQ19UQ19MREJESVMgICAgICAgICAgIEVRVSAoMHgxIDw8ICA3KSA7LSAoVEMpIENvdW50ZXIgQ2xvY2sgRGlzYWJsZWQgd2l0aCBSQiBMb2FkaW5nDQorQVQ5MUNfVENfRVRSR0VERyAgICAgICAgICBFUVUgKDB4MyA8PCAgOCkgOy0gKFRDKSBFeHRlcm5hbCBUcmlnZ2VyIEVkZ2UgU2VsZWN0aW9uDQorQVQ5MUNfVENfRVRSR0VER19OT05FICAgICBFUVUgKDB4MCA8PCAgOCkgOy0gKFRDKSBFZGdlOiBOb25lDQorQVQ5MUNfVENfRVRSR0VER19SSVNJTkcgICBFUVUgKDB4MSA8PCAgOCkgOy0gKFRDKSBFZGdlOiByaXNpbmcgZWRnZQ0KK0FUOTFDX1RDX0VUUkdFREdfRkFMTElORyAgRVFVICgweDIgPDwgIDgpIDstIChUQykgRWRnZTogZmFsbGluZyBlZGdlDQorQVQ5MUNfVENfRVRSR0VER19CT1RIICAgICBFUVUgKDB4MyA8PCAgOCkgOy0gKFRDKSBFZGdlOiBlYWNoIGVkZ2UNCitBVDkxQ19UQ19FRVZURURHICAgICAgICAgIEVRVSAoMHgzIDw8ICA4KSA7LSAoVEMpIEV4dGVybmFsIEV2ZW50IEVkZ2UgU2VsZWN0aW9uDQorQVQ5MUNfVENfRUVWVEVER19OT05FICAgICBFUVUgKDB4MCA8PCAgOCkgOy0gKFRDKSBFZGdlOiBOb25lDQorQVQ5MUNfVENfRUVWVEVER19SSVNJTkcgICBFUVUgKDB4MSA8PCAgOCkgOy0gKFRDKSBFZGdlOiByaXNpbmcgZWRnZQ0KK0FUOTFDX1RDX0VFVlRFREdfRkFMTElORyAgRVFVICgweDIgPDwgIDgpIDstIChUQykgRWRnZTogZmFsbGluZyBlZGdlDQorQVQ5MUNfVENfRUVWVEVER19CT1RIICAgICBFUVUgKDB4MyA8PCAgOCkgOy0gKFRDKSBFZGdlOiBlYWNoIGVkZ2UNCitBVDkxQ19UQ19FRVZUICAgICAgICAgICAgIEVRVSAoMHgzIDw8IDEwKSA7LSAoVEMpIEV4dGVybmFsIEV2ZW50ICBTZWxlY3Rpb24NCitBVDkxQ19UQ19FRVZUX1RJT0IgICAgICAgIEVRVSAoMHgwIDw8IDEwKSA7LSAoVEMpIFNpZ25hbCBzZWxlY3RlZCBhcyBleHRlcm5hbCBldmVudDogVElPQiBUSU9CIGRpcmVjdGlvbjogaW5wdXQNCitBVDkxQ19UQ19FRVZUX1hDMCAgICAgICAgIEVRVSAoMHgxIDw8IDEwKSA7LSAoVEMpIFNpZ25hbCBzZWxlY3RlZCBhcyBleHRlcm5hbCBldmVudDogWEMwIFRJT0IgZGlyZWN0aW9uOiBvdXRwdXQNCitBVDkxQ19UQ19FRVZUX1hDMSAgICAgICAgIEVRVSAoMHgyIDw8IDEwKSA7LSAoVEMpIFNpZ25hbCBzZWxlY3RlZCBhcyBleHRlcm5hbCBldmVudDogWEMxIFRJT0IgZGlyZWN0aW9uOiBvdXRwdXQNCitBVDkxQ19UQ19FRVZUX1hDMiAgICAgICAgIEVRVSAoMHgzIDw8IDEwKSA7LSAoVEMpIFNpZ25hbCBzZWxlY3RlZCBhcyBleHRlcm5hbCBldmVudDogWEMyIFRJT0IgZGlyZWN0aW9uOiBvdXRwdXQNCitBVDkxQ19UQ19BQkVUUkcgICAgICAgICAgIEVRVSAoMHgxIDw8IDEwKSA7LSAoVEMpIFRJT0Egb3IgVElPQiBFeHRlcm5hbCBUcmlnZ2VyIFNlbGVjdGlvbg0KK0FUOTFDX1RDX0VORVRSRyAgICAgICAgICAgRVFVICgweDEgPDwgMTIpIDstIChUQykgRXh0ZXJuYWwgRXZlbnQgVHJpZ2dlciBlbmFibGUNCitBVDkxQ19UQ19XQVZFU0VMICAgICAgICAgIEVRVSAoMHgzIDw8IDEzKSA7LSAoVEMpIFdhdmVmb3JtICBTZWxlY3Rpb24NCitBVDkxQ19UQ19XQVZFU0VMX1VQICAgICAgIEVRVSAoMHgwIDw8IDEzKSA7LSAoVEMpIFVQIG1vZGUgd2l0aG91dCBhdG9tYXRpYyB0cmlnZ2VyIG9uIFJDIENvbXBhcmUNCitBVDkxQ19UQ19XQVZFU0VMX1VQRE9XTiAgIEVRVSAoMHgxIDw8IDEzKSA7LSAoVEMpIFVQRE9XTiBtb2RlIHdpdGhvdXQgYXV0b21hdGljIHRyaWdnZXIgb24gUkMgQ29tcGFyZQ0KK0FUOTFDX1RDX1dBVkVTRUxfVVBfQVVUTyAgRVFVICgweDIgPDwgMTMpIDstIChUQykgVVAgbW9kZSB3aXRoIGF1dG9tYXRpYyB0cmlnZ2VyIG9uIFJDIENvbXBhcmUNCitBVDkxQ19UQ19XQVZFU0VMX1VQRE9XTl9BVVRPIEVRVSAoMHgzIDw8IDEzKSA7LSAoVEMpIFVQRE9XTiBtb2RlIHdpdGggYXV0b21hdGljIHRyaWdnZXIgb24gUkMgQ29tcGFyZQ0KK0FUOTFDX1RDX0NQQ1RSRyAgICAgICAgICAgRVFVICgweDEgPDwgMTQpIDstIChUQykgUkMgQ29tcGFyZSBUcmlnZ2VyIEVuYWJsZQ0KK0FUOTFDX1RDX1dBVkUgICAgICAgICAgICAgRVFVICgweDEgPDwgMTUpIDstIChUQykgDQorQVQ5MUNfVENfQUNQQSAgICAgICAgICAgICBFUVUgKDB4MyA8PCAxNikgOy0gKFRDKSBSQSBDb21wYXJlIEVmZmVjdCBvbiBUSU9BDQorQVQ5MUNfVENfQUNQQV9OT05FICAgICAgICBFUVUgKDB4MCA8PCAxNikgOy0gKFRDKSBFZmZlY3Q6IG5vbmUNCitBVDkxQ19UQ19BQ1BBX1NFVCAgICAgICAgIEVRVSAoMHgxIDw8IDE2KSA7LSAoVEMpIEVmZmVjdDogc2V0DQorQVQ5MUNfVENfQUNQQV9DTEVBUiAgICAgICBFUVUgKDB4MiA8PCAxNikgOy0gKFRDKSBFZmZlY3Q6IGNsZWFyDQorQVQ5MUNfVENfQUNQQV9UT0dHTEUgICAgICBFUVUgKDB4MyA8PCAxNikgOy0gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KK0FUOTFDX1RDX0xEUkEgICAgICAgICAgICAgRVFVICgweDMgPDwgMTYpIDstIChUQykgUkEgTG9hZGluZyBTZWxlY3Rpb24NCitBVDkxQ19UQ19MRFJBX05PTkUgICAgICAgIEVRVSAoMHgwIDw8IDE2KSA7LSAoVEMpIEVkZ2U6IE5vbmUNCitBVDkxQ19UQ19MRFJBX1JJU0lORyAgICAgIEVRVSAoMHgxIDw8IDE2KSA7LSAoVEMpIEVkZ2U6IHJpc2luZyBlZGdlIG9mIFRJT0ENCitBVDkxQ19UQ19MRFJBX0ZBTExJTkcgICAgIEVRVSAoMHgyIDw8IDE2KSA7LSAoVEMpIEVkZ2U6IGZhbGxpbmcgZWRnZSBvZiBUSU9BDQorQVQ5MUNfVENfTERSQV9CT1RIICAgICAgICBFUVUgKDB4MyA8PCAxNikgOy0gKFRDKSBFZGdlOiBlYWNoIGVkZ2Ugb2YgVElPQQ0KK0FUOTFDX1RDX0FDUEMgICAgICAgICAgICAgRVFVICgweDMgPDwgMTgpIDstIChUQykgUkMgQ29tcGFyZSBFZmZlY3Qgb24gVElPQQ0KK0FUOTFDX1RDX0FDUENfTk9ORSAgICAgICAgRVFVICgweDAgPDwgMTgpIDstIChUQykgRWZmZWN0OiBub25lDQorQVQ5MUNfVENfQUNQQ19TRVQgICAgICAgICBFUVUgKDB4MSA8PCAxOCkgOy0gKFRDKSBFZmZlY3Q6IHNldA0KK0FUOTFDX1RDX0FDUENfQ0xFQVIgICAgICAgRVFVICgweDIgPDwgMTgpIDstIChUQykgRWZmZWN0OiBjbGVhcg0KK0FUOTFDX1RDX0FDUENfVE9HR0xFICAgICAgRVFVICgweDMgPDwgMTgpIDstIChUQykgRWZmZWN0OiB0b2dnbGUNCitBVDkxQ19UQ19MRFJCICAgICAgICAgICAgIEVRVSAoMHgzIDw8IDE4KSA7LSAoVEMpIFJCIExvYWRpbmcgU2VsZWN0aW9uDQorQVQ5MUNfVENfTERSQl9OT05FICAgICAgICBFUVUgKDB4MCA8PCAxOCkgOy0gKFRDKSBFZGdlOiBOb25lDQorQVQ5MUNfVENfTERSQl9SSVNJTkcgICAgICBFUVUgKDB4MSA8PCAxOCkgOy0gKFRDKSBFZGdlOiByaXNpbmcgZWRnZSBvZiBUSU9BDQorQVQ5MUNfVENfTERSQl9GQUxMSU5HICAgICBFUVUgKDB4MiA8PCAxOCkgOy0gKFRDKSBFZGdlOiBmYWxsaW5nIGVkZ2Ugb2YgVElPQQ0KK0FUOTFDX1RDX0xEUkJfQk9USCAgICAgICAgRVFVICgweDMgPDwgMTgpIDstIChUQykgRWRnZTogZWFjaCBlZGdlIG9mIFRJT0ENCitBVDkxQ19UQ19BRUVWVCAgICAgICAgICAgIEVRVSAoMHgzIDw8IDIwKSA7LSAoVEMpIEV4dGVybmFsIEV2ZW50IEVmZmVjdCBvbiBUSU9BDQorQVQ5MUNfVENfQUVFVlRfTk9ORSAgICAgICBFUVUgKDB4MCA8PCAyMCkgOy0gKFRDKSBFZmZlY3Q6IG5vbmUNCitBVDkxQ19UQ19BRUVWVF9TRVQgICAgICAgIEVRVSAoMHgxIDw8IDIwKSA7LSAoVEMpIEVmZmVjdDogc2V0DQorQVQ5MUNfVENfQUVFVlRfQ0xFQVIgICAgICBFUVUgKDB4MiA8PCAyMCkgOy0gKFRDKSBFZmZlY3Q6IGNsZWFyDQorQVQ5MUNfVENfQUVFVlRfVE9HR0xFICAgICBFUVUgKDB4MyA8PCAyMCkgOy0gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KK0FUOTFDX1RDX0FTV1RSRyAgICAgICAgICAgRVFVICgweDMgPDwgMjIpIDstIChUQykgU29mdHdhcmUgVHJpZ2dlciBFZmZlY3Qgb24gVElPQQ0KK0FUOTFDX1RDX0FTV1RSR19OT05FICAgICAgRVFVICgweDAgPDwgMjIpIDstIChUQykgRWZmZWN0OiBub25lDQorQVQ5MUNfVENfQVNXVFJHX1NFVCAgICAgICBFUVUgKDB4MSA8PCAyMikgOy0gKFRDKSBFZmZlY3Q6IHNldA0KK0FUOTFDX1RDX0FTV1RSR19DTEVBUiAgICAgRVFVICgweDIgPDwgMjIpIDstIChUQykgRWZmZWN0OiBjbGVhcg0KK0FUOTFDX1RDX0FTV1RSR19UT0dHTEUgICAgRVFVICgweDMgPDwgMjIpIDstIChUQykgRWZmZWN0OiB0b2dnbGUNCitBVDkxQ19UQ19CQ1BCICAgICAgICAgICAgIEVRVSAoMHgzIDw8IDI0KSA7LSAoVEMpIFJCIENvbXBhcmUgRWZmZWN0IG9uIFRJT0INCitBVDkxQ19UQ19CQ1BCX05PTkUgICAgICAgIEVRVSAoMHgwIDw8IDI0KSA7LSAoVEMpIEVmZmVjdDogbm9uZQ0KK0FUOTFDX1RDX0JDUEJfU0VUICAgICAgICAgRVFVICgweDEgPDwgMjQpIDstIChUQykgRWZmZWN0OiBzZXQNCitBVDkxQ19UQ19CQ1BCX0NMRUFSICAgICAgIEVRVSAoMHgyIDw8IDI0KSA7LSAoVEMpIEVmZmVjdDogY2xlYXINCitBVDkxQ19UQ19CQ1BCX1RPR0dMRSAgICAgIEVRVSAoMHgzIDw8IDI0KSA7LSAoVEMpIEVmZmVjdDogdG9nZ2xlDQorQVQ5MUNfVENfQkNQQyAgICAgICAgICAgICBFUVUgKDB4MyA8PCAyNikgOy0gKFRDKSBSQyBDb21wYXJlIEVmZmVjdCBvbiBUSU9CDQorQVQ5MUNfVENfQkNQQ19OT05FICAgICAgICBFUVUgKDB4MCA8PCAyNikgOy0gKFRDKSBFZmZlY3Q6IG5vbmUNCitBVDkxQ19UQ19CQ1BDX1NFVCAgICAgICAgIEVRVSAoMHgxIDw8IDI2KSA7LSAoVEMpIEVmZmVjdDogc2V0DQorQVQ5MUNfVENfQkNQQ19DTEVBUiAgICAgICBFUVUgKDB4MiA8PCAyNikgOy0gKFRDKSBFZmZlY3Q6IGNsZWFyDQorQVQ5MUNfVENfQkNQQ19UT0dHTEUgICAgICBFUVUgKDB4MyA8PCAyNikgOy0gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KK0FUOTFDX1RDX0JFRVZUICAgICAgICAgICAgRVFVICgweDMgPDwgMjgpIDstIChUQykgRXh0ZXJuYWwgRXZlbnQgRWZmZWN0IG9uIFRJT0INCitBVDkxQ19UQ19CRUVWVF9OT05FICAgICAgIEVRVSAoMHgwIDw8IDI4KSA7LSAoVEMpIEVmZmVjdDogbm9uZQ0KK0FUOTFDX1RDX0JFRVZUX1NFVCAgICAgICAgRVFVICgweDEgPDwgMjgpIDstIChUQykgRWZmZWN0OiBzZXQNCitBVDkxQ19UQ19CRUVWVF9DTEVBUiAgICAgIEVRVSAoMHgyIDw8IDI4KSA7LSAoVEMpIEVmZmVjdDogY2xlYXINCitBVDkxQ19UQ19CRUVWVF9UT0dHTEUgICAgIEVRVSAoMHgzIDw8IDI4KSA7LSAoVEMpIEVmZmVjdDogdG9nZ2xlDQorQVQ5MUNfVENfQlNXVFJHICAgICAgICAgICBFUVUgKDB4MyA8PCAzMCkgOy0gKFRDKSBTb2Z0d2FyZSBUcmlnZ2VyIEVmZmVjdCBvbiBUSU9CDQorQVQ5MUNfVENfQlNXVFJHX05PTkUgICAgICBFUVUgKDB4MCA8PCAzMCkgOy0gKFRDKSBFZmZlY3Q6IG5vbmUNCitBVDkxQ19UQ19CU1dUUkdfU0VUICAgICAgIEVRVSAoMHgxIDw8IDMwKSA7LSAoVEMpIEVmZmVjdDogc2V0DQorQVQ5MUNfVENfQlNXVFJHX0NMRUFSICAgICBFUVUgKDB4MiA8PCAzMCkgOy0gKFRDKSBFZmZlY3Q6IGNsZWFyDQorQVQ5MUNfVENfQlNXVFJHX1RPR0dMRSAgICBFUVUgKDB4MyA8PCAzMCkgOy0gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KKy8vIC0gLS0tLS0tLS0gVENfU1IgOiAoVEMgT2Zmc2V0OiAweDIwKSBUQyBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19UQ19DT1ZGUyAgICAgICAgICAgIEVRVSAoMHgxIDw8ICAwKSA7LSAoVEMpIENvdW50ZXIgT3ZlcmZsb3cNCitBVDkxQ19UQ19MT1ZSUyAgICAgICAgICAgIEVRVSAoMHgxIDw8ICAxKSA7LSAoVEMpIExvYWQgT3ZlcnJ1bg0KK0FUOTFDX1RDX0NQQVMgICAgICAgICAgICAgRVFVICgweDEgPDwgIDIpIDstIChUQykgUkEgQ29tcGFyZQ0KK0FUOTFDX1RDX0NQQlMgICAgICAgICAgICAgRVFVICgweDEgPDwgIDMpIDstIChUQykgUkIgQ29tcGFyZQ0KK0FUOTFDX1RDX0NQQ1MgICAgICAgICAgICAgRVFVICgweDEgPDwgIDQpIDstIChUQykgUkMgQ29tcGFyZQ0KK0FUOTFDX1RDX0xEUkFTICAgICAgICAgICAgRVFVICgweDEgPDwgIDUpIDstIChUQykgUkEgTG9hZGluZw0KK0FUOTFDX1RDX0xEUkJTICAgICAgICAgICAgRVFVICgweDEgPDwgIDYpIDstIChUQykgUkIgTG9hZGluZw0KK0FUOTFDX1RDX0VUUkdTICAgICAgICAgICAgRVFVICgweDEgPDwgIDcpIDstIChUQykgRXh0ZXJuYWwgVHJpZ2dlcg0KK0FUOTFDX1RDX0NMS1NUQSAgICAgICAgICAgRVFVICgweDEgPDwgMTYpIDstIChUQykgQ2xvY2sgRW5hYmxpbmcNCitBVDkxQ19UQ19NVElPQSAgICAgICAgICAgIEVRVSAoMHgxIDw8IDE3KSA7LSAoVEMpIFRJT0EgTWlycm9yDQorQVQ5MUNfVENfTVRJT0IgICAgICAgICAgICBFUVUgKDB4MSA8PCAxOCkgOy0gKFRDKSBUSU9BIE1pcnJvcg0KKy8vIC0gLS0tLS0tLS0gVENfSUVSIDogKFRDIE9mZnNldDogMHgyNCkgVEMgQ2hhbm5lbCBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0gLS0tLS0tLS0gVENfSURSIDogKFRDIE9mZnNldDogMHgyOCkgVEMgQ2hhbm5lbCBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtIC0tLS0tLS0tIFRDX0lNUiA6IChUQyBPZmZzZXQ6IDB4MmMpIFRDIENoYW5uZWwgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQogDQotLyogLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qIC0gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVGltZXIgQ291bnRlciBJbnRlcmZhY2UgKi8NCi0vKiAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogLSAtLS0tLS0tLSBUQ0JfQkNSIDogKFRDQiBPZmZzZXQ6IDB4YzApIFRDIEJsb2NrIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDQl9TWU5DIEVRVSggMHgxIDw8IDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDQiApIFN5bmNocm8gQ29tbWFuZA0KLS8qIC0gLS0tLS0tLS0gVENCX0JNUiA6IChUQ0IgT2Zmc2V0OiAweGM0KSBUQyBCbG9jayBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UQ0JfVEMwWEMwUyBFUVUoIDB4MyA8PCAwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUQ0IgKSBFeHRlcm5hbCBDbG9jayBTaWduYWwgMCBTZWxlY3Rpb24NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDQl9UQzBYQzBTX1RDTEswIEVRVSggMHgwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUQ0IgKSBUQ0xLMCBjb25uZWN0ZWQgdG8gWEMwDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UQ0JfVEMwWEMwU19OT05FIEVRVSggMHgxICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUQ0IgKSBOb25lIHNpZ25hbCBjb25uZWN0ZWQgdG8gWEMwDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UQ0JfVEMwWEMwU19USU9BMSBFUVUoIDB4MiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVENCICkgVElPQTEgY29ubmVjdGVkIHRvIFhDMA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVENCX1RDMFhDMFNfVElPQTIgRVFVKCAweDMgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDQiApIFRJT0EyIGNvbm5lY3RlZCB0byBYQzANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDQl9UQzFYQzFTIEVRVSggMHgzIDw8IDIgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDQiApIEV4dGVybmFsIENsb2NrIFNpZ25hbCAxIFNlbGVjdGlvbg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVENCX1RDMVhDMVNfVENMSzEgRVFVKCAweDAgPDwgMiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVENCICkgVENMSzEgY29ubmVjdGVkIHRvIFhDMQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVENCX1RDMVhDMVNfTk9ORSBFUVUoIDB4MSA8PCAyICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUQ0IgKSBOb25lIHNpZ25hbCBjb25uZWN0ZWQgdG8gWEMxDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UQ0JfVEMxWEMxU19USU9BMCBFUVUoIDB4MiA8PCAyICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUQ0IgKSBUSU9BMCBjb25uZWN0ZWQgdG8gWEMxDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UQ0JfVEMxWEMxU19USU9BMiBFUVUoIDB4MyA8PCAyICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUQ0IgKSBUSU9BMiBjb25uZWN0ZWQgdG8gWEMxDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UQ0JfVEMyWEMyUyBFUVUoIDB4MyA8PCA0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUQ0IgKSBFeHRlcm5hbCBDbG9jayBTaWduYWwgMiBTZWxlY3Rpb24NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDQl9UQzJYQzJTX1RDTEsyIEVRVSggMHgwIDw8IDQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDQiApIFRDTEsyIGNvbm5lY3RlZCB0byBYQzINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDQl9UQzJYQzJTX05PTkUgRVFVKCAweDEgPDwgNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVENCICkgTm9uZSBzaWduYWwgY29ubmVjdGVkIHRvIFhDMg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVENCX1RDMlhDMlNfVElPQTAgRVFVKCAweDIgPDwgNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVENCICkgVElPQTAgY29ubmVjdGVkIHRvIFhDMg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVENCX1RDMlhDMlNfVElPQTEgRVFVKCAweDMgPDwgNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVENCICkgVElPQTIgY29ubmVjdGVkIHRvIFhDMg0KKy8vIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAtICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFRpbWVyIENvdW50ZXIgSW50ZXJmYWNlDQorLy8gLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vIC0gLS0tLS0tLS0gVENCX0JDUiA6IChUQ0IgT2Zmc2V0OiAweGMwKSBUQyBCbG9jayBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX1RDQl9TWU5DICAgICAgICAgICAgRVFVICgweDEgPDwgIDApIDstIChUQ0IpIFN5bmNocm8gQ29tbWFuZA0KKy8vIC0gLS0tLS0tLS0gVENCX0JNUiA6IChUQ0IgT2Zmc2V0OiAweGM0KSBUQyBCbG9jayBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX1RDQl9UQzBYQzBTICAgICAgICAgRVFVICgweDMgPDwgIDApIDstIChUQ0IpIEV4dGVybmFsIENsb2NrIFNpZ25hbCAwIFNlbGVjdGlvbg0KK0FUOTFDX1RDQl9UQzBYQzBTX1RDTEswICAgRVFVICgweDApIDstIChUQ0IpIFRDTEswIGNvbm5lY3RlZCB0byBYQzANCitBVDkxQ19UQ0JfVEMwWEMwU19OT05FICAgIEVRVSAoMHgxKSA7LSAoVENCKSBOb25lIHNpZ25hbCBjb25uZWN0ZWQgdG8gWEMwDQorQVQ5MUNfVENCX1RDMFhDMFNfVElPQTEgICBFUVUgKDB4MikgOy0gKFRDQikgVElPQTEgY29ubmVjdGVkIHRvIFhDMA0KK0FUOTFDX1RDQl9UQzBYQzBTX1RJT0EyICAgRVFVICgweDMpIDstIChUQ0IpIFRJT0EyIGNvbm5lY3RlZCB0byBYQzANCitBVDkxQ19UQ0JfVEMxWEMxUyAgICAgICAgIEVRVSAoMHgzIDw8ICAyKSA7LSAoVENCKSBFeHRlcm5hbCBDbG9jayBTaWduYWwgMSBTZWxlY3Rpb24NCitBVDkxQ19UQ0JfVEMxWEMxU19UQ0xLMSAgIEVRVSAoMHgwIDw8ICAyKSA7LSAoVENCKSBUQ0xLMSBjb25uZWN0ZWQgdG8gWEMxDQorQVQ5MUNfVENCX1RDMVhDMVNfTk9ORSAgICBFUVUgKDB4MSA8PCAgMikgOy0gKFRDQikgTm9uZSBzaWduYWwgY29ubmVjdGVkIHRvIFhDMQ0KK0FUOTFDX1RDQl9UQzFYQzFTX1RJT0EwICAgRVFVICgweDIgPDwgIDIpIDstIChUQ0IpIFRJT0EwIGNvbm5lY3RlZCB0byBYQzENCitBVDkxQ19UQ0JfVEMxWEMxU19USU9BMiAgIEVRVSAoMHgzIDw8ICAyKSA7LSAoVENCKSBUSU9BMiBjb25uZWN0ZWQgdG8gWEMxDQorQVQ5MUNfVENCX1RDMlhDMlMgICAgICAgICBFUVUgKDB4MyA8PCAgNCkgOy0gKFRDQikgRXh0ZXJuYWwgQ2xvY2sgU2lnbmFsIDIgU2VsZWN0aW9uDQorQVQ5MUNfVENCX1RDMlhDMlNfVENMSzIgICBFUVUgKDB4MCA8PCAgNCkgOy0gKFRDQikgVENMSzIgY29ubmVjdGVkIHRvIFhDMg0KK0FUOTFDX1RDQl9UQzJYQzJTX05PTkUgICAgRVFVICgweDEgPDwgIDQpIDstIChUQ0IpIE5vbmUgc2lnbmFsIGNvbm5lY3RlZCB0byBYQzINCitBVDkxQ19UQ0JfVEMyWEMyU19USU9BMCAgIEVRVSAoMHgyIDw8ICA0KSA7LSAoVENCKSBUSU9BMCBjb25uZWN0ZWQgdG8gWEMyDQorQVQ5MUNfVENCX1RDMlhDMlNfVElPQTEgICBFUVUgKDB4MyA8PCAgNCkgOy0gKFRDQikgVElPQTIgY29ubmVjdGVkIHRvIFhDMg0KIA0KLS8qIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAtICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIENvbnRyb2wgQXJlYSBOZXR3b3JrIE1haWxCb3ggSW50ZXJmYWNlICovDQotLyogLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qIC0gLS0tLS0tLS0gQ0FOX01NUiA6IChDQU5fTUIgT2Zmc2V0OiAweDApIENBTiBNZXNzYWdlIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0NBTl9NVElNRU1BUksgRVFVKCAweEZGRkYgPDwgMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOX01CICkgTWFpbGJveCBUaW1lbWFyaw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0FOX1BSSU9SIEVRVSggMHhGIDw8IDE2ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU5fTUIgKSBNYWlsYm94IFByaW9yaXR5DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19DQU5fTU9UIEVRVSggMHg3IDw8IDI0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU5fTUIgKSBNYWlsYm94IE9iamVjdCBUeXBlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19DQU5fTU9UX0RJUyBFUVUoIDB4MCA8PCAyNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOX01CICkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0NBTl9NT1RfUlggRVFVKCAweDEgPDwgMjQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIENBTl9NQiApDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19DQU5fTU9UX1JYT1ZFUldSSVRFIEVRVSggMHgyIDw8IDI0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU5fTUIgKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0FOX01PVF9UWCBFUVUoIDB4MyA8PCAyNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOX01CICkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0NBTl9NT1RfQ09OU1VNRVIgRVFVKCAweDQgPDwgMjQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIENBTl9NQiApDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19DQU5fTU9UX1BST0RVQ0VSIEVRVSggMHg1IDw8IDI0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU5fTUIgKQ0KLS8qIC0gLS0tLS0tLS0gQ0FOX01BTSA6IChDQU5fTUIgT2Zmc2V0OiAweDQpIENBTiBNZXNzYWdlIEFjY2VwdGFuY2UgTWFzayBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0FOX01JRHZCIEVRVSggMHgzRkZGRiA8PCAwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU5fTUIgKSBDb21wbGVtZW50YXJ5IGJpdHMgZm9yIGlkZW50aWZpZXIgaW4gZXh0ZW5kZWQgbW9kZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0FOX01JRHZBIEVRVSggMHg3RkYgPDwgMTggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIENBTl9NQiApIElkZW50aWZpZXIgZm9yIHN0YW5kYXJkIGZyYW1lIG1vZGUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0NBTl9NSURFIEVRVSggMHgxIDw8IDI5ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU5fTUIgKSBJZGVudGlmaWVyIFZlcnNpb24NCi0vKiAtIC0tLS0tLS0tIENBTl9NSUQgOiAoQ0FOX01CIE9mZnNldDogMHg4KSBDQU4gTWVzc2FnZSBJRCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0gLS0tLS0tLS0gQ0FOX01GSUQgOiAoQ0FOX01CIE9mZnNldDogMHhjKSBDQU4gTWVzc2FnZSBGYW1pbHkgSUQgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtIC0tLS0tLS0tIENBTl9NU1IgOiAoQ0FOX01CIE9mZnNldDogMHgxMCkgQ0FOIE1lc3NhZ2UgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19DQU5fTVRJTUVTVEFNUCBFUVUoIDB4RkZGRiA8PCAwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU5fTUIgKSBUaW1lciBWYWx1ZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0FOX01ETEMgRVFVKCAweEYgPDwgMTYgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIENBTl9NQiApIE1haWxib3ggRGF0YSBMZW5ndGggQ29kZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0FOX01SVFIgRVFVKCAweDEgPDwgMjAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIENBTl9NQiApIE1haWxib3ggUmVtb3RlIFRyYW5zbWlzc2lvbiBSZXF1ZXN0DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19DQU5fTUFCVCBFUVUoIDB4MSA8PCAyMiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOX01CICkgTWFpbGJveCBNZXNzYWdlIEFib3J0DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19DQU5fTVJEWSBFUVUoIDB4MSA8PCAyMyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOX01CICkgTWFpbGJveCBSZWFkeQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0FOX01NSSBFUVUoIDB4MSA8PCAyNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOX01CICkgTWFpbGJveCBNZXNzYWdlIElnbm9yZWQNCi0vKiAtIC0tLS0tLS0tIENBTl9NREwgOiAoQ0FOX01CIE9mZnNldDogMHgxNCkgQ0FOIE1lc3NhZ2UgRGF0YSBMb3cgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtIC0tLS0tLS0tIENBTl9NREggOiAoQ0FOX01CIE9mZnNldDogMHgxOCkgQ0FOIE1lc3NhZ2UgRGF0YSBIaWdoIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLSAtLS0tLS0tLSBDQU5fTUNSIDogKENBTl9NQiBPZmZzZXQ6IDB4MWMpIENBTiBNZXNzYWdlIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0NBTl9NQUNSIEVRVSggMHgxIDw8IDIyICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU5fTUIgKSBBYm9ydCBSZXF1ZXN0IGZvciBNYWlsYm94DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19DQU5fTVRDUiBFUVUoIDB4MSA8PCAyMyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOX01CICkgTWFpbGJveCBUcmFuc2ZlciBDb21tYW5kDQorLy8gLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vIC0gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQ29udHJvbCBBcmVhIE5ldHdvcmsgTWFpbEJveCBJbnRlcmZhY2UNCisvLyAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gLSAtLS0tLS0tLSBDQU5fTU1SIDogKENBTl9NQiBPZmZzZXQ6IDB4MCkgQ0FOIE1lc3NhZ2UgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19DQU5fTVRJTUVNQVJLICAgICAgIEVRVSAoMHhGRkZGIDw8ICAwKSA7LSAoQ0FOX01CKSBNYWlsYm94IFRpbWVtYXJrDQorQVQ5MUNfQ0FOX1BSSU9SICAgICAgICAgICBFUVUgKDB4RiA8PCAxNikgOy0gKENBTl9NQikgTWFpbGJveCBQcmlvcml0eQ0KK0FUOTFDX0NBTl9NT1QgICAgICAgICAgICAgRVFVICgweDcgPDwgMjQpIDstIChDQU5fTUIpIE1haWxib3ggT2JqZWN0IFR5cGUNCitBVDkxQ19DQU5fTU9UX0RJUyAgICAgICAgIEVRVSAoMHgwIDw8IDI0KSA7LSAoQ0FOX01CKSANCitBVDkxQ19DQU5fTU9UX1JYICAgICAgICAgIEVRVSAoMHgxIDw8IDI0KSA7LSAoQ0FOX01CKSANCitBVDkxQ19DQU5fTU9UX1JYT1ZFUldSSVRFIEVRVSAoMHgyIDw8IDI0KSA7LSAoQ0FOX01CKSANCitBVDkxQ19DQU5fTU9UX1RYICAgICAgICAgIEVRVSAoMHgzIDw8IDI0KSA7LSAoQ0FOX01CKSANCitBVDkxQ19DQU5fTU9UX0NPTlNVTUVSICAgIEVRVSAoMHg0IDw8IDI0KSA7LSAoQ0FOX01CKSANCitBVDkxQ19DQU5fTU9UX1BST0RVQ0VSICAgIEVRVSAoMHg1IDw8IDI0KSA7LSAoQ0FOX01CKSANCisvLyAtIC0tLS0tLS0tIENBTl9NQU0gOiAoQ0FOX01CIE9mZnNldDogMHg0KSBDQU4gTWVzc2FnZSBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfQ0FOX01JRHZCICAgICAgICAgICBFUVUgKDB4M0ZGRkYgPDwgIDApIDstIChDQU5fTUIpIENvbXBsZW1lbnRhcnkgYml0cyBmb3IgaWRlbnRpZmllciBpbiBleHRlbmRlZCBtb2RlDQorQVQ5MUNfQ0FOX01JRHZBICAgICAgICAgICBFUVUgKDB4N0ZGIDw8IDE4KSA7LSAoQ0FOX01CKSBJZGVudGlmaWVyIGZvciBzdGFuZGFyZCBmcmFtZSBtb2RlDQorQVQ5MUNfQ0FOX01JREUgICAgICAgICAgICBFUVUgKDB4MSA8PCAyOSkgOy0gKENBTl9NQikgSWRlbnRpZmllciBWZXJzaW9uDQorLy8gLSAtLS0tLS0tLSBDQU5fTUlEIDogKENBTl9NQiBPZmZzZXQ6IDB4OCkgQ0FOIE1lc3NhZ2UgSUQgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLSAtLS0tLS0tLSBDQU5fTUZJRCA6IChDQU5fTUIgT2Zmc2V0OiAweGMpIENBTiBNZXNzYWdlIEZhbWlseSBJRCBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtIC0tLS0tLS0tIENBTl9NU1IgOiAoQ0FOX01CIE9mZnNldDogMHgxMCkgQ0FOIE1lc3NhZ2UgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX0NBTl9NVElNRVNUQU1QICAgICAgRVFVICgweEZGRkYgPDwgIDApIDstIChDQU5fTUIpIFRpbWVyIFZhbHVlDQorQVQ5MUNfQ0FOX01ETEMgICAgICAgICAgICBFUVUgKDB4RiA8PCAxNikgOy0gKENBTl9NQikgTWFpbGJveCBEYXRhIExlbmd0aCBDb2RlDQorQVQ5MUNfQ0FOX01SVFIgICAgICAgICAgICBFUVUgKDB4MSA8PCAyMCkgOy0gKENBTl9NQikgTWFpbGJveCBSZW1vdGUgVHJhbnNtaXNzaW9uIFJlcXVlc3QNCitBVDkxQ19DQU5fTUFCVCAgICAgICAgICAgIEVRVSAoMHgxIDw8IDIyKSA7LSAoQ0FOX01CKSBNYWlsYm94IE1lc3NhZ2UgQWJvcnQNCitBVDkxQ19DQU5fTVJEWSAgICAgICAgICAgIEVRVSAoMHgxIDw8IDIzKSA7LSAoQ0FOX01CKSBNYWlsYm94IFJlYWR5DQorQVQ5MUNfQ0FOX01NSSAgICAgICAgICAgICBFUVUgKDB4MSA8PCAyNCkgOy0gKENBTl9NQikgTWFpbGJveCBNZXNzYWdlIElnbm9yZWQNCisvLyAtIC0tLS0tLS0tIENBTl9NREwgOiAoQ0FOX01CIE9mZnNldDogMHgxNCkgQ0FOIE1lc3NhZ2UgRGF0YSBMb3cgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLSAtLS0tLS0tLSBDQU5fTURIIDogKENBTl9NQiBPZmZzZXQ6IDB4MTgpIENBTiBNZXNzYWdlIERhdGEgSGlnaCBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtIC0tLS0tLS0tIENBTl9NQ1IgOiAoQ0FOX01CIE9mZnNldDogMHgxYykgQ0FOIE1lc3NhZ2UgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19DQU5fTUFDUiAgICAgICAgICAgIEVRVSAoMHgxIDw8IDIyKSA7LSAoQ0FOX01CKSBBYm9ydCBSZXF1ZXN0IGZvciBNYWlsYm94DQorQVQ5MUNfQ0FOX01UQ1IgICAgICAgICAgICBFUVUgKDB4MSA8PCAyMykgOy0gKENBTl9NQikgTWFpbGJveCBUcmFuc2ZlciBDb21tYW5kDQogDQotLyogLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qIC0gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQ29udHJvbCBBcmVhIE5ldHdvcmsgSW50ZXJmYWNlICovDQotLyogLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qIC0gLS0tLS0tLS0gQ0FOX01SIDogKENBTiBPZmZzZXQ6IDB4MCkgQ0FOIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0NBTl9DQU5FTiBFUVUoIDB4MSA8PCAwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU4gKSBDQU4gQ29udHJvbGxlciBFbmFibGUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0NBTl9MUE0gRVFVKCAweDEgPDwgMSApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOICkgRGlzYWJsZSAvIEVuYWJsZSBMb3cgUG93ZXIgTW9kZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0FOX0FCTSBFUVUoIDB4MSA8PCAyICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU4gKSBEaXNhYmxlIC8gRW5hYmxlIEF1dG9iYXVkIC8gTGlzdGVuIE1vZGUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0NBTl9PVkwgRVFVKCAweDEgPDwgMyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOICkgRGlzYWJsZSAvIEVuYWJsZSBPdmVybG9hZCBGcmFtZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0FOX1RFT0YgRVFVKCAweDEgPDwgNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOICkgVGltZSBTdGFtcCBtZXNzYWdlcyBhdCBlYWNoIGVuZCBvZiBGcmFtZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0FOX1RUTSBFUVUoIDB4MSA8PCA1ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU4gKSBEaXNhYmxlIC8gRW5hYmxlIFRpbWUgVHJpZ2dlciBNb2RlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19DQU5fVElNRlJaIEVRVSggMHgxIDw8IDYgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIENBTiApIEVuYWJsZSBUaW1lciBGcmVlemUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0NBTl9EUlBUIEVRVSggMHgxIDw8IDcgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIENBTiApIERpc2FibGUgUmVwZWF0DQotLyogLSAtLS0tLS0tLSBDQU5fSUVSIDogKENBTiBPZmZzZXQ6IDB4NCkgQ0FOIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0NBTl9NQjAgRVFVKCAweDEgPDwgMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOICkgTWFpbGJveCAwIEZsYWcNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0NBTl9NQjEgRVFVKCAweDEgPDwgMSApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOICkgTWFpbGJveCAxIEZsYWcNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0NBTl9NQjIgRVFVKCAweDEgPDwgMiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOICkgTWFpbGJveCAyIEZsYWcNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0NBTl9NQjMgRVFVKCAweDEgPDwgMyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOICkgTWFpbGJveCAzIEZsYWcNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0NBTl9NQjQgRVFVKCAweDEgPDwgNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOICkgTWFpbGJveCA0IEZsYWcNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0NBTl9NQjUgRVFVKCAweDEgPDwgNSApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOICkgTWFpbGJveCA1IEZsYWcNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0NBTl9NQjYgRVFVKCAweDEgPDwgNiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOICkgTWFpbGJveCA2IEZsYWcNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0NBTl9NQjcgRVFVKCAweDEgPDwgNyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOICkgTWFpbGJveCA3IEZsYWcNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0NBTl9NQjggRVFVKCAweDEgPDwgOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOICkgTWFpbGJveCA4IEZsYWcNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0NBTl9NQjkgRVFVKCAweDEgPDwgOSApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOICkgTWFpbGJveCA5IEZsYWcNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0NBTl9NQjEwIEVRVSggMHgxIDw8IDEwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU4gKSBNYWlsYm94IDEwIEZsYWcNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0NBTl9NQjExIEVRVSggMHgxIDw8IDExICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU4gKSBNYWlsYm94IDExIEZsYWcNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0NBTl9NQjEyIEVRVSggMHgxIDw8IDEyICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU4gKSBNYWlsYm94IDEyIEZsYWcNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0NBTl9NQjEzIEVRVSggMHgxIDw8IDEzICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU4gKSBNYWlsYm94IDEzIEZsYWcNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0NBTl9NQjE0IEVRVSggMHgxIDw8IDE0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU4gKSBNYWlsYm94IDE0IEZsYWcNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0NBTl9NQjE1IEVRVSggMHgxIDw8IDE1ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU4gKSBNYWlsYm94IDE1IEZsYWcNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0NBTl9FUlJBIEVRVSggMHgxIDw8IDE2ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU4gKSBFcnJvciBBY3RpdmUgTW9kZSBGbGFnDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19DQU5fV0FSTiBFUVUoIDB4MSA8PCAxNyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOICkgV2FybmluZyBMaW1pdCBGbGFnDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19DQU5fRVJSUCBFUVUoIDB4MSA8PCAxOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOICkgRXJyb3IgUGFzc2l2ZSBNb2RlIEZsYWcNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0NBTl9CT0ZGIEVRVSggMHgxIDw8IDE5ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU4gKSBCdXMgT2ZmIE1vZGUgRmxhZw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0FOX1NMRUVQIEVRVSggMHgxIDw8IDIwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU4gKSBTbGVlcCBGbGFnDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19DQU5fV0FLRVVQIEVRVSggMHgxIDw8IDIxICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU4gKSBXYWtldXAgRmxhZw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0FOX1RPVkYgRVFVKCAweDEgPDwgMjIgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIENBTiApIFRpbWVyIE92ZXJmbG93IEZsYWcNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0NBTl9UU1RQIEVRVSggMHgxIDw8IDIzICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU4gKSBUaW1lc3RhbXAgRmxhZw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0FOX0NFUlIgRVFVKCAweDEgPDwgMjQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIENBTiApIENSQyBFcnJvcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0FOX1NFUlIgRVFVKCAweDEgPDwgMjUgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIENBTiApIFN0dWZmaW5nIEVycm9yDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19DQU5fQUVSUiBFUVUoIDB4MSA8PCAyNiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOICkgQWNrbm93bGVkZ21lbnQgRXJyb3INCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0NBTl9GRVJSIEVRVSggMHgxIDw8IDI3ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU4gKSBGb3JtIEVycm9yDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19DQU5fQkVSUiBFUVUoIDB4MSA8PCAyOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOICkgQml0IEVycm9yDQotLyogLSAtLS0tLS0tLSBDQU5fSURSIDogKENBTiBPZmZzZXQ6IDB4OCkgQ0FOIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLSAtLS0tLS0tLSBDQU5fSU1SIDogKENBTiBPZmZzZXQ6IDB4YykgQ0FOIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLSAtLS0tLS0tLSBDQU5fU1IgOiAoQ0FOIE9mZnNldDogMHgxMCkgQ0FOIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0FOX1JCU1kgRVFVKCAweDEgPDwgMjkgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIENBTiApIFJlY2VpdmVyIEJ1c3kNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0NBTl9UQlNZIEVRVSggMHgxIDw8IDMwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU4gKSBUcmFuc21pdHRlciBCdXN5DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19DQU5fT1ZMWSBFUVUoIDB4MSA8PCAzMSApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOICkgT3ZlcmxvYWQgQnVzeQ0KLS8qIC0gLS0tLS0tLS0gQ0FOX0JSIDogKENBTiBPZmZzZXQ6IDB4MTQpIENBTiBCYXVkcmF0ZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0FOX1BIQVNFMiBFUVUoIDB4NyA8PCAwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU4gKSBQaGFzZSAyIHNlZ21lbnQNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0NBTl9QSEFTRTEgRVFVKCAweDcgPDwgNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOICkgUGhhc2UgMSBzZWdtZW50DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19DQU5fUFJPUEFHIEVRVSggMHg3IDw8IDggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIENBTiApIFByb2dyYW1tYXRpb24gdGltZSBzZWdtZW50DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19DQU5fU1lOQyBFUVUoIDB4MyA8PCAxMiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOICkgUmUgLSBzeW5jaHJvbml6YXRpb24ganVtcCB3aWR0aCBzZWdtZW50DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19DQU5fQlJQIEVRVSggMHg3RiA8PCAxNiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOICkgQmF1ZHJhdGUgUHJlc2NhbGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19DQU5fU01QIEVRVSggMHgxIDw8IDI0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU4gKSBTYW1wbGluZyBtb2RlDQotLyogLSAtLS0tLS0tLSBDQU5fVElNIDogKENBTiBPZmZzZXQ6IDB4MTgpIENBTiBUaW1lciBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0FOX1RJTUVSIEVRVSggMHhGRkZGIDw8IDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIENBTiApIFRpbWVyIGZpZWxkDQotLyogLSAtLS0tLS0tLSBDQU5fVElNRVNUUCA6IChDQU4gT2Zmc2V0OiAweDFjKSBDQU4gVGltZXN0YW1wIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLSAtLS0tLS0tLSBDQU5fRUNSIDogKENBTiBPZmZzZXQ6IDB4MjApIENBTiBFcnJvciBDb3VudGVyIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19DQU5fUkVDIEVRVSggMHhGRiA8PCAwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU4gKSBSZWNlaXZlIEVycm9yIENvdW50ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0NBTl9URUMgRVFVKCAweEZGIDw8IDE2ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU4gKSBUcmFuc21pdCBFcnJvciBDb3VudGVyDQotLyogLSAtLS0tLS0tLSBDQU5fVENSIDogKENBTiBPZmZzZXQ6IDB4MjQpIENBTiBUcmFuc2ZlciBDb21tYW5kIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19DQU5fVElNUlNUIEVRVSggMHgxIDw8IDMxICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU4gKSBUaW1lciBSZXNldCBGaWVsZA0KLS8qIC0gLS0tLS0tLS0gQ0FOX0FDUiA6IChDQU4gT2Zmc2V0OiAweDI4KSBDQU4gQWJvcnQgQ29tbWFuZCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KKy8vIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAtICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIENvbnRyb2wgQXJlYSBOZXR3b3JrIEludGVyZmFjZQ0KKy8vIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAtIC0tLS0tLS0tIENBTl9NUiA6IChDQU4gT2Zmc2V0OiAweDApIENBTiBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX0NBTl9DQU5FTiAgICAgICAgICAgRVFVICgweDEgPDwgIDApIDstIChDQU4pIENBTiBDb250cm9sbGVyIEVuYWJsZQ0KK0FUOTFDX0NBTl9MUE0gICAgICAgICAgICAgRVFVICgweDEgPDwgIDEpIDstIChDQU4pIERpc2FibGUvRW5hYmxlIExvdyBQb3dlciBNb2RlDQorQVQ5MUNfQ0FOX0FCTSAgICAgICAgICAgICBFUVUgKDB4MSA8PCAgMikgOy0gKENBTikgRGlzYWJsZS9FbmFibGUgQXV0b2JhdWQvTGlzdGVuIE1vZGUNCitBVDkxQ19DQU5fT1ZMICAgICAgICAgICAgIEVRVSAoMHgxIDw8ICAzKSA7LSAoQ0FOKSBEaXNhYmxlL0VuYWJsZSBPdmVybG9hZCBGcmFtZQ0KK0FUOTFDX0NBTl9URU9GICAgICAgICAgICAgRVFVICgweDEgPDwgIDQpIDstIChDQU4pIFRpbWUgU3RhbXAgbWVzc2FnZXMgYXQgZWFjaCBlbmQgb2YgRnJhbWUNCitBVDkxQ19DQU5fVFRNICAgICAgICAgICAgIEVRVSAoMHgxIDw8ICA1KSA7LSAoQ0FOKSBEaXNhYmxlL0VuYWJsZSBUaW1lIFRyaWdnZXIgTW9kZQ0KK0FUOTFDX0NBTl9USU1GUlogICAgICAgICAgRVFVICgweDEgPDwgIDYpIDstIChDQU4pIEVuYWJsZSBUaW1lciBGcmVlemUNCitBVDkxQ19DQU5fRFJQVCAgICAgICAgICAgIEVRVSAoMHgxIDw8ICA3KSA7LSAoQ0FOKSBEaXNhYmxlIFJlcGVhdA0KKy8vIC0gLS0tLS0tLS0gQ0FOX0lFUiA6IChDQU4gT2Zmc2V0OiAweDQpIENBTiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX0NBTl9NQjAgICAgICAgICAgICAgRVFVICgweDEgPDwgIDApIDstIChDQU4pIE1haWxib3ggMCBGbGFnDQorQVQ5MUNfQ0FOX01CMSAgICAgICAgICAgICBFUVUgKDB4MSA8PCAgMSkgOy0gKENBTikgTWFpbGJveCAxIEZsYWcNCitBVDkxQ19DQU5fTUIyICAgICAgICAgICAgIEVRVSAoMHgxIDw8ICAyKSA7LSAoQ0FOKSBNYWlsYm94IDIgRmxhZw0KK0FUOTFDX0NBTl9NQjMgICAgICAgICAgICAgRVFVICgweDEgPDwgIDMpIDstIChDQU4pIE1haWxib3ggMyBGbGFnDQorQVQ5MUNfQ0FOX01CNCAgICAgICAgICAgICBFUVUgKDB4MSA8PCAgNCkgOy0gKENBTikgTWFpbGJveCA0IEZsYWcNCitBVDkxQ19DQU5fTUI1ICAgICAgICAgICAgIEVRVSAoMHgxIDw8ICA1KSA7LSAoQ0FOKSBNYWlsYm94IDUgRmxhZw0KK0FUOTFDX0NBTl9NQjYgICAgICAgICAgICAgRVFVICgweDEgPDwgIDYpIDstIChDQU4pIE1haWxib3ggNiBGbGFnDQorQVQ5MUNfQ0FOX01CNyAgICAgICAgICAgICBFUVUgKDB4MSA8PCAgNykgOy0gKENBTikgTWFpbGJveCA3IEZsYWcNCitBVDkxQ19DQU5fTUI4ICAgICAgICAgICAgIEVRVSAoMHgxIDw8ICA4KSA7LSAoQ0FOKSBNYWlsYm94IDggRmxhZw0KK0FUOTFDX0NBTl9NQjkgICAgICAgICAgICAgRVFVICgweDEgPDwgIDkpIDstIChDQU4pIE1haWxib3ggOSBGbGFnDQorQVQ5MUNfQ0FOX01CMTAgICAgICAgICAgICBFUVUgKDB4MSA8PCAxMCkgOy0gKENBTikgTWFpbGJveCAxMCBGbGFnDQorQVQ5MUNfQ0FOX01CMTEgICAgICAgICAgICBFUVUgKDB4MSA8PCAxMSkgOy0gKENBTikgTWFpbGJveCAxMSBGbGFnDQorQVQ5MUNfQ0FOX01CMTIgICAgICAgICAgICBFUVUgKDB4MSA8PCAxMikgOy0gKENBTikgTWFpbGJveCAxMiBGbGFnDQorQVQ5MUNfQ0FOX01CMTMgICAgICAgICAgICBFUVUgKDB4MSA8PCAxMykgOy0gKENBTikgTWFpbGJveCAxMyBGbGFnDQorQVQ5MUNfQ0FOX01CMTQgICAgICAgICAgICBFUVUgKDB4MSA8PCAxNCkgOy0gKENBTikgTWFpbGJveCAxNCBGbGFnDQorQVQ5MUNfQ0FOX01CMTUgICAgICAgICAgICBFUVUgKDB4MSA8PCAxNSkgOy0gKENBTikgTWFpbGJveCAxNSBGbGFnDQorQVQ5MUNfQ0FOX0VSUkEgICAgICAgICAgICBFUVUgKDB4MSA8PCAxNikgOy0gKENBTikgRXJyb3IgQWN0aXZlIE1vZGUgRmxhZw0KK0FUOTFDX0NBTl9XQVJOICAgICAgICAgICAgRVFVICgweDEgPDwgMTcpIDstIChDQU4pIFdhcm5pbmcgTGltaXQgRmxhZw0KK0FUOTFDX0NBTl9FUlJQICAgICAgICAgICAgRVFVICgweDEgPDwgMTgpIDstIChDQU4pIEVycm9yIFBhc3NpdmUgTW9kZSBGbGFnDQorQVQ5MUNfQ0FOX0JPRkYgICAgICAgICAgICBFUVUgKDB4MSA8PCAxOSkgOy0gKENBTikgQnVzIE9mZiBNb2RlIEZsYWcNCitBVDkxQ19DQU5fU0xFRVAgICAgICAgICAgIEVRVSAoMHgxIDw8IDIwKSA7LSAoQ0FOKSBTbGVlcCBGbGFnDQorQVQ5MUNfQ0FOX1dBS0VVUCAgICAgICAgICBFUVUgKDB4MSA8PCAyMSkgOy0gKENBTikgV2FrZXVwIEZsYWcNCitBVDkxQ19DQU5fVE9WRiAgICAgICAgICAgIEVRVSAoMHgxIDw8IDIyKSA7LSAoQ0FOKSBUaW1lciBPdmVyZmxvdyBGbGFnDQorQVQ5MUNfQ0FOX1RTVFAgICAgICAgICAgICBFUVUgKDB4MSA8PCAyMykgOy0gKENBTikgVGltZXN0YW1wIEZsYWcNCitBVDkxQ19DQU5fQ0VSUiAgICAgICAgICAgIEVRVSAoMHgxIDw8IDI0KSA7LSAoQ0FOKSBDUkMgRXJyb3INCitBVDkxQ19DQU5fU0VSUiAgICAgICAgICAgIEVRVSAoMHgxIDw8IDI1KSA7LSAoQ0FOKSBTdHVmZmluZyBFcnJvcg0KK0FUOTFDX0NBTl9BRVJSICAgICAgICAgICAgRVFVICgweDEgPDwgMjYpIDstIChDQU4pIEFja25vd2xlZGdtZW50IEVycm9yDQorQVQ5MUNfQ0FOX0ZFUlIgICAgICAgICAgICBFUVUgKDB4MSA8PCAyNykgOy0gKENBTikgRm9ybSBFcnJvcg0KK0FUOTFDX0NBTl9CRVJSICAgICAgICAgICAgRVFVICgweDEgPDwgMjgpIDstIChDQU4pIEJpdCBFcnJvcg0KKy8vIC0gLS0tLS0tLS0gQ0FOX0lEUiA6IChDQU4gT2Zmc2V0OiAweDgpIENBTiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtIC0tLS0tLS0tIENBTl9JTVIgOiAoQ0FOIE9mZnNldDogMHhjKSBDQU4gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLSAtLS0tLS0tLSBDQU5fU1IgOiAoQ0FOIE9mZnNldDogMHgxMCkgQ0FOIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19DQU5fUkJTWSAgICAgICAgICAgIEVRVSAoMHgxIDw8IDI5KSA7LSAoQ0FOKSBSZWNlaXZlciBCdXN5DQorQVQ5MUNfQ0FOX1RCU1kgICAgICAgICAgICBFUVUgKDB4MSA8PCAzMCkgOy0gKENBTikgVHJhbnNtaXR0ZXIgQnVzeQ0KK0FUOTFDX0NBTl9PVkxZICAgICAgICAgICAgRVFVICgweDEgPDwgMzEpIDstIChDQU4pIE92ZXJsb2FkIEJ1c3kNCisvLyAtIC0tLS0tLS0tIENBTl9CUiA6IChDQU4gT2Zmc2V0OiAweDE0KSBDQU4gQmF1ZHJhdGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfQ0FOX1BIQVNFMiAgICAgICAgICBFUVUgKDB4NyA8PCAgMCkgOy0gKENBTikgUGhhc2UgMiBzZWdtZW50DQorQVQ5MUNfQ0FOX1BIQVNFMSAgICAgICAgICBFUVUgKDB4NyA8PCAgNCkgOy0gKENBTikgUGhhc2UgMSBzZWdtZW50DQorQVQ5MUNfQ0FOX1BST1BBRyAgICAgICAgICBFUVUgKDB4NyA8PCAgOCkgOy0gKENBTikgUHJvZ3JhbW1hdGlvbiB0aW1lIHNlZ21lbnQNCitBVDkxQ19DQU5fU1lOQyAgICAgICAgICAgIEVRVSAoMHgzIDw8IDEyKSA7LSAoQ0FOKSBSZS1zeW5jaHJvbml6YXRpb24ganVtcCB3aWR0aCBzZWdtZW50DQorQVQ5MUNfQ0FOX0JSUCAgICAgICAgICAgICBFUVUgKDB4N0YgPDwgMTYpIDstIChDQU4pIEJhdWRyYXRlIFByZXNjYWxlcg0KK0FUOTFDX0NBTl9TTVAgICAgICAgICAgICAgRVFVICgweDEgPDwgMjQpIDstIChDQU4pIFNhbXBsaW5nIG1vZGUNCisvLyAtIC0tLS0tLS0tIENBTl9USU0gOiAoQ0FOIE9mZnNldDogMHgxOCkgQ0FOIFRpbWVyIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX0NBTl9USU1FUiAgICAgICAgICAgRVFVICgweEZGRkYgPDwgIDApIDstIChDQU4pIFRpbWVyIGZpZWxkDQorLy8gLSAtLS0tLS0tLSBDQU5fVElNRVNUUCA6IChDQU4gT2Zmc2V0OiAweDFjKSBDQU4gVGltZXN0YW1wIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0gLS0tLS0tLS0gQ0FOX0VDUiA6IChDQU4gT2Zmc2V0OiAweDIwKSBDQU4gRXJyb3IgQ291bnRlciBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19DQU5fUkVDICAgICAgICAgICAgIEVRVSAoMHhGRiA8PCAgMCkgOy0gKENBTikgUmVjZWl2ZSBFcnJvciBDb3VudGVyDQorQVQ5MUNfQ0FOX1RFQyAgICAgICAgICAgICBFUVUgKDB4RkYgPDwgMTYpIDstIChDQU4pIFRyYW5zbWl0IEVycm9yIENvdW50ZXINCisvLyAtIC0tLS0tLS0tIENBTl9UQ1IgOiAoQ0FOIE9mZnNldDogMHgyNCkgQ0FOIFRyYW5zZmVyIENvbW1hbmQgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfQ0FOX1RJTVJTVCAgICAgICAgICBFUVUgKDB4MSA8PCAzMSkgOy0gKENBTikgVGltZXIgUmVzZXQgRmllbGQNCisvLyAtIC0tLS0tLS0tIENBTl9BQ1IgOiAoQ0FOIE9mZnNldDogMHgyOCkgQ0FOIEFib3J0IENvbW1hbmQgUmVnaXN0ZXIgLS0tLS0tLS0gDQogDQotLyogLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qIC0gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgRXRoZXJuZXQgTUFDIDEwLzEwMCAqLw0KLS8qIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAtIC0tLS0tLS0tIEVNQUNfTkNSIDogKEVNQUMgT2Zmc2V0OiAweDApICAtLS0tLS0tLSAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfRU1BQ19MQiBFUVUoIDB4MSA8PCAwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBFTUFDICkgTG9vcGJhY2suT3B0aW9uYWwuV2hlbiBzZXQsIGxvb3BiYWNrIHNpZ25hbCBpcyBhdCBoaWdoIGxldmVsLg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfRU1BQ19MTEIgRVFVKCAweDEgPDwgMSApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggRU1BQyApIExvb3BiYWNrIGxvY2FsLg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfRU1BQ19SRSBFUVUoIDB4MSA8PCAyICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBFTUFDICkgUmVjZWl2ZSBlbmFibGUuDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19FTUFDX1RFIEVRVSggMHgxIDw8IDMgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEVNQUMgKSBUcmFuc21pdCBlbmFibGUuDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19FTUFDX01QRSBFUVUoIDB4MSA8PCA0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBFTUFDICkgTWFuYWdlbWVudCBwb3J0IGVuYWJsZS4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0VNQUNfQ0xSU1RBVCBFUVUoIDB4MSA8PCA1ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBFTUFDICkgQ2xlYXIgc3RhdGlzdGljcyByZWdpc3RlcnMuDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19FTUFDX0lOQ1NUQVQgRVFVKCAweDEgPDwgNiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggRU1BQyApIEluY3JlbWVudCBzdGF0aXN0aWNzIHJlZ2lzdGVycy4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0VNQUNfV0VTVEFUIEVRVSggMHgxIDw8IDcgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEVNQUMgKSBXcml0ZSBlbmFibGUgZm9yIHN0YXRpc3RpY3MgcmVnaXN0ZXJzLg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfRU1BQ19CUCBFUVUoIDB4MSA8PCA4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBFTUFDICkgQmFjayBwcmVzc3VyZS4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0VNQUNfVFNUQVJUIEVRVSggMHgxIDw8IDkgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEVNQUMgKSBTdGFydCBUcmFuc21pc3Npb24uDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19FTUFDX1RIQUxUIEVRVSggMHgxIDw8IDEwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBFTUFDICkgVHJhbnNtaXNzaW9uIEhhbHQuDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19FTUFDX1RQRlIgRVFVKCAweDEgPDwgMTEgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEVNQUMgKSBUcmFuc21pdCBwYXVzZSBmcmFtZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfRU1BQ19UWlEgRVFVKCAweDEgPDwgMTIgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEVNQUMgKSBUcmFuc21pdCB6ZXJvIHF1YW50dW0gcGF1c2UgZnJhbWUNCi0vKiAtIC0tLS0tLS0tIEVNQUNfTkNGR1IgOiAoRU1BQyBPZmZzZXQ6IDB4NCkgTmV0d29yayBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19FTUFDX1NQRCBFUVUoIDB4MSA8PCAwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBFTUFDICkgU3BlZWQuDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19FTUFDX0ZEIEVRVSggMHgxIDw8IDEgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEVNQUMgKSBGdWxsIGR1cGxleC4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0VNQUNfSkZSQU1FIEVRVSggMHgxIDw8IDMgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEVNQUMgKSBKdW1ibyBGcmFtZXMuDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19FTUFDX0NBRiBFUVUoIDB4MSA8PCA0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBFTUFDICkgQ29weSBhbGwgZnJhbWVzLg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfRU1BQ19OQkMgRVFVKCAweDEgPDwgNSApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggRU1BQyApIE5vIGJyb2FkY2FzdC4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0VNQUNfTVRJIEVRVSggMHgxIDw8IDYgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEVNQUMgKSBNdWx0aWNhc3QgaGFzaCBldmVudCBlbmFibGUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0VNQUNfVU5JIEVRVSggMHgxIDw8IDcgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEVNQUMgKSBVbmljYXN0IGhhc2ggZW5hYmxlLg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfRU1BQ19CSUcgRVFVKCAweDEgPDwgOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggRU1BQyApIFJlY2VpdmUgMTUyMiBieXRlcy4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0VNQUNfRUFFIEVRVSggMHgxIDw8IDkgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEVNQUMgKSBFeHRlcm5hbCBhZGRyZXNzIG1hdGNoIGVuYWJsZS4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0VNQUNfQ0xLIEVRVSggMHgzIDw8IDEwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBFTUFDICkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0VNQUNfQ0xLX0hDTEtfOCBFUVUoIDB4MCA8PCAxMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggRU1BQyApIEhDTEsgZGl2aWRlZCBieSA4DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19FTUFDX0NMS19IQ0xLXzE2IEVRVSggMHgxIDw8IDEwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBFTUFDICkgSENMSyBkaXZpZGVkIGJ5IDE2DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19FTUFDX0NMS19IQ0xLXzMyIEVRVSggMHgyIDw8IDEwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBFTUFDICkgSENMSyBkaXZpZGVkIGJ5IDMyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19FTUFDX0NMS19IQ0xLXzY0IEVRVSggMHgzIDw8IDEwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBFTUFDICkgSENMSyBkaXZpZGVkIGJ5IDY0DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19FTUFDX1JUWSBFUVUoIDB4MSA8PCAxMiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggRU1BQyApDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19FTUFDX1BBRSBFUVUoIDB4MSA8PCAxMyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggRU1BQyApDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19FTUFDX1JCT0YgRVFVKCAweDMgPDwgMTQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEVNQUMgKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfRU1BQ19SQk9GX09GRlNFVF8wIEVRVSggMHgwIDw8IDE0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBFTUFDICkgbm8gb2Zmc2V0IGZyb20gc3RhcnQgb2YgcmVjZWl2ZSBidWZmZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0VNQUNfUkJPRl9PRkZTRVRfMSBFUVUoIDB4MSA8PCAxNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggRU1BQyApIG9uZSBieXRlIG9mZnNldCBmcm9tIHN0YXJ0IG9mIHJlY2VpdmUgYnVmZmVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19FTUFDX1JCT0ZfT0ZGU0VUXzIgRVFVKCAweDIgPDwgMTQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEVNQUMgKSB0d28gYnl0ZXMgb2Zmc2V0IGZyb20gc3RhcnQgb2YgcmVjZWl2ZSBidWZmZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0VNQUNfUkJPRl9PRkZTRVRfMyBFUVUoIDB4MyA8PCAxNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggRU1BQyApIHRocmVlIGJ5dGVzIG9mZnNldCBmcm9tIHN0YXJ0IG9mIHJlY2VpdmUgYnVmZmVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19FTUFDX1JMQ0UgRVFVKCAweDEgPDwgMTYgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEVNQUMgKSBSZWNlaXZlIExlbmd0aCBmaWVsZCBDaGVja2luZyBFbmFibGUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0VNQUNfRFJGQ1MgRVFVKCAweDEgPDwgMTcgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEVNQUMgKSBEaXNjYXJkIFJlY2VpdmUgRkNTDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19FTUFDX0VGUkhEIEVRVSggMHgxIDw8IDE4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBFTUFDICkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0VNQUNfSVJYRkNTIEVRVSggMHgxIDw8IDE5ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBFTUFDICkgSWdub3JlIFJYIEZDUw0KLS8qIC0gLS0tLS0tLS0gRU1BQ19OU1IgOiAoRU1BQyBPZmZzZXQ6IDB4OCkgTmV0d29yayBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0VNQUNfTElOS1IgRVFVKCAweDEgPDwgMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggRU1BQyApDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19FTUFDX01ESU8gRVFVKCAweDEgPDwgMSApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggRU1BQyApDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19FTUFDX0lETEUgRVFVKCAweDEgPDwgMiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggRU1BQyApDQotLyogLSAtLS0tLS0tLSBFTUFDX1RTUiA6IChFTUFDIE9mZnNldDogMHgxNCkgVHJhbnNtaXQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19FTUFDX1VCUiBFUVUoIDB4MSA8PCAwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBFTUFDICkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0VNQUNfQ09MIEVRVSggMHgxIDw8IDEgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEVNQUMgKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfRU1BQ19STEVTIEVRVSggMHgxIDw8IDIgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEVNQUMgKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfRU1BQ19UR08gRVFVKCAweDEgPDwgMyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggRU1BQyApIFRyYW5zbWl0IEdvDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19FTUFDX0JFWCBFUVUoIDB4MSA8PCA0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBFTUFDICkgQnVmZmVycyBleGhhdXN0ZWQgbWlkIGZyYW1lDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19FTUFDX0NPTVAgRVFVKCAweDEgPDwgNSApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggRU1BQyApDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19FTUFDX1VORCBFUVUoIDB4MSA8PCA2ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBFTUFDICkNCi0vKiAtIC0tLS0tLS0tIEVNQUNfUlNSIDogKEVNQUMgT2Zmc2V0OiAweDIwKSBSZWNlaXZlIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfRU1BQ19CTkEgRVFVKCAweDEgPDwgMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggRU1BQyApDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19FTUFDX1JFQyBFUVUoIDB4MSA8PCAxICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBFTUFDICkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0VNQUNfT1ZSIEVRVSggMHgxIDw8IDIgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEVNQUMgKQ0KLS8qIC0gLS0tLS0tLS0gRU1BQ19JU1IgOiAoRU1BQyBPZmZzZXQ6IDB4MjQpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0VNQUNfTUZEIEVRVSggMHgxIDw8IDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEVNQUMgKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfRU1BQ19SQ09NUCBFUVUoIDB4MSA8PCAxICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBFTUFDICkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0VNQUNfUlhVQlIgRVFVKCAweDEgPDwgMiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggRU1BQyApDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19FTUFDX1RYVUJSIEVRVSggMHgxIDw8IDMgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEVNQUMgKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfRU1BQ19UVU5EUiBFUVUoIDB4MSA8PCA0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBFTUFDICkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0VNQUNfUkxFWCBFUVUoIDB4MSA8PCA1ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBFTUFDICkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0VNQUNfVFhFUlIgRVFVKCAweDEgPDwgNiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggRU1BQyApDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19FTUFDX1RDT01QIEVRVSggMHgxIDw8IDcgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEVNQUMgKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfRU1BQ19MSU5LIEVRVSggMHgxIDw8IDkgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEVNQUMgKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfRU1BQ19ST1ZSIEVRVSggMHgxIDw8IDEwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBFTUFDICkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0VNQUNfSFJFU1AgRVFVKCAweDEgPDwgMTEgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEVNQUMgKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfRU1BQ19QRlJFIEVRVSggMHgxIDw8IDEyICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBFTUFDICkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0VNQUNfUFRaIEVRVSggMHgxIDw8IDEzICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBFTUFDICkNCi0vKiAtIC0tLS0tLS0tIEVNQUNfSUVSIDogKEVNQUMgT2Zmc2V0OiAweDI4KSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLSAtLS0tLS0tLSBFTUFDX0lEUiA6IChFTUFDIE9mZnNldDogMHgyYykgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtIC0tLS0tLS0tIEVNQUNfSU1SIDogKEVNQUMgT2Zmc2V0OiAweDMwKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0gLS0tLS0tLS0gRU1BQ19NQU4gOiAoRU1BQyBPZmZzZXQ6IDB4MzQpIFBIWSBNYWludGVuYW5jZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfRU1BQ19EQVRBIEVRVSggMHhGRkZGIDw8IDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEVNQUMgKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfRU1BQ19DT0RFIEVRVSggMHgzIDw8IDE2ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBFTUFDICkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0VNQUNfUkVHQSBFUVUoIDB4MUYgPDwgMTggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEVNQUMgKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfRU1BQ19QSFlBIEVRVSggMHgxRiA8PCAyMyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggRU1BQyApDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19FTUFDX1JXIEVRVSggMHgzIDw8IDI4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBFTUFDICkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0VNQUNfU09GIEVRVSggMHgzIDw8IDMwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBFTUFDICkNCi0vKiAtIC0tLS0tLS0tIEVNQUNfVVNSSU8gOiAoRU1BQyBPZmZzZXQ6IDB4YzApIFVTRVIgSW5wdXQgT3V0cHV0IFJlZ2lzdGVyIC0tLS0tLS0tICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19FTUFDX1JNSUkgRVFVKCAweDEgPDwgMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggRU1BQyApIFJlZHVjZSBNSUkNCi0vKiAtIC0tLS0tLS0tIEVNQUNfV09MIDogKEVNQUMgT2Zmc2V0OiAweGM0KSBXYWtlIE9uIExBTiBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfRU1BQ19JUCBFUVUoIDB4RkZGRiA8PCAwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBFTUFDICkgQVJQIHJlcXVlc3QgSVAgYWRkcmVzcw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfRU1BQ19NQUcgRVFVKCAweDEgPDwgMTYgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEVNQUMgKSBNYWdpYyBwYWNrZXQgZXZlbnQgZW5hYmxlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19FTUFDX0FSUCBFUVUoIDB4MSA8PCAxNyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggRU1BQyApIEFSUCByZXF1ZXN0IGV2ZW50IGVuYWJsZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfRU1BQ19TQTEgRVFVKCAweDEgPDwgMTggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEVNQUMgKSBTcGVjaWZpYyBhZGRyZXNzIHJlZ2lzdGVyIDEgZXZlbnQgZW5hYmxlDQotLyogLSAtLS0tLS0tLSBFTUFDX1JFViA6IChFTUFDIE9mZnNldDogMHhmYykgUmV2aXNpb24gUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0VNQUNfUkVWUkVGIEVRVSggMHhGRkZGIDw8IDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEVNQUMgKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfRU1BQ19QQVJUUkVGIEVRVSggMHhGRkZGIDw8IDE2ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBFTUFDICkNCisvLyAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gLSAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBFdGhlcm5ldCBNQUMgMTAvMTAwDQorLy8gLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vIC0gLS0tLS0tLS0gRU1BQ19OQ1IgOiAoRU1BQyBPZmZzZXQ6IDB4MCkgIC0tLS0tLS0tIA0KK0FUOTFDX0VNQUNfTEIgICAgICAgICAgICAgRVFVICgweDEgPDwgIDApIDstIChFTUFDKSBMb29wYmFjay4gT3B0aW9uYWwuIFdoZW4gc2V0LCBsb29wYmFjayBzaWduYWwgaXMgYXQgaGlnaCBsZXZlbC4NCitBVDkxQ19FTUFDX0xMQiAgICAgICAgICAgIEVRVSAoMHgxIDw8ICAxKSA7LSAoRU1BQykgTG9vcGJhY2sgbG9jYWwuIA0KK0FUOTFDX0VNQUNfUkUgICAgICAgICAgICAgRVFVICgweDEgPDwgIDIpIDstIChFTUFDKSBSZWNlaXZlIGVuYWJsZS4gDQorQVQ5MUNfRU1BQ19URSAgICAgICAgICAgICBFUVUgKDB4MSA8PCAgMykgOy0gKEVNQUMpIFRyYW5zbWl0IGVuYWJsZS4gDQorQVQ5MUNfRU1BQ19NUEUgICAgICAgICAgICBFUVUgKDB4MSA8PCAgNCkgOy0gKEVNQUMpIE1hbmFnZW1lbnQgcG9ydCBlbmFibGUuIA0KK0FUOTFDX0VNQUNfQ0xSU1RBVCAgICAgICAgRVFVICgweDEgPDwgIDUpIDstIChFTUFDKSBDbGVhciBzdGF0aXN0aWNzIHJlZ2lzdGVycy4gDQorQVQ5MUNfRU1BQ19JTkNTVEFUICAgICAgICBFUVUgKDB4MSA8PCAgNikgOy0gKEVNQUMpIEluY3JlbWVudCBzdGF0aXN0aWNzIHJlZ2lzdGVycy4gDQorQVQ5MUNfRU1BQ19XRVNUQVQgICAgICAgICBFUVUgKDB4MSA8PCAgNykgOy0gKEVNQUMpIFdyaXRlIGVuYWJsZSBmb3Igc3RhdGlzdGljcyByZWdpc3RlcnMuIA0KK0FUOTFDX0VNQUNfQlAgICAgICAgICAgICAgRVFVICgweDEgPDwgIDgpIDstIChFTUFDKSBCYWNrIHByZXNzdXJlLiANCitBVDkxQ19FTUFDX1RTVEFSVCAgICAgICAgIEVRVSAoMHgxIDw8ICA5KSA7LSAoRU1BQykgU3RhcnQgVHJhbnNtaXNzaW9uLiANCitBVDkxQ19FTUFDX1RIQUxUICAgICAgICAgIEVRVSAoMHgxIDw8IDEwKSA7LSAoRU1BQykgVHJhbnNtaXNzaW9uIEhhbHQuIA0KK0FUOTFDX0VNQUNfVFBGUiAgICAgICAgICAgRVFVICgweDEgPDwgMTEpIDstIChFTUFDKSBUcmFuc21pdCBwYXVzZSBmcmFtZSANCitBVDkxQ19FTUFDX1RaUSAgICAgICAgICAgIEVRVSAoMHgxIDw8IDEyKSA7LSAoRU1BQykgVHJhbnNtaXQgemVybyBxdWFudHVtIHBhdXNlIGZyYW1lDQorLy8gLSAtLS0tLS0tLSBFTUFDX05DRkdSIDogKEVNQUMgT2Zmc2V0OiAweDQpIE5ldHdvcmsgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19FTUFDX1NQRCAgICAgICAgICAgIEVRVSAoMHgxIDw8ICAwKSA7LSAoRU1BQykgU3BlZWQuIA0KK0FUOTFDX0VNQUNfRkQgICAgICAgICAgICAgRVFVICgweDEgPDwgIDEpIDstIChFTUFDKSBGdWxsIGR1cGxleC4gDQorQVQ5MUNfRU1BQ19KRlJBTUUgICAgICAgICBFUVUgKDB4MSA8PCAgMykgOy0gKEVNQUMpIEp1bWJvIEZyYW1lcy4gDQorQVQ5MUNfRU1BQ19DQUYgICAgICAgICAgICBFUVUgKDB4MSA8PCAgNCkgOy0gKEVNQUMpIENvcHkgYWxsIGZyYW1lcy4gDQorQVQ5MUNfRU1BQ19OQkMgICAgICAgICAgICBFUVUgKDB4MSA8PCAgNSkgOy0gKEVNQUMpIE5vIGJyb2FkY2FzdC4gDQorQVQ5MUNfRU1BQ19NVEkgICAgICAgICAgICBFUVUgKDB4MSA8PCAgNikgOy0gKEVNQUMpIE11bHRpY2FzdCBoYXNoIGV2ZW50IGVuYWJsZQ0KK0FUOTFDX0VNQUNfVU5JICAgICAgICAgICAgRVFVICgweDEgPDwgIDcpIDstIChFTUFDKSBVbmljYXN0IGhhc2ggZW5hYmxlLiANCitBVDkxQ19FTUFDX0JJRyAgICAgICAgICAgIEVRVSAoMHgxIDw8ICA4KSA7LSAoRU1BQykgUmVjZWl2ZSAxNTIyIGJ5dGVzLiANCitBVDkxQ19FTUFDX0VBRSAgICAgICAgICAgIEVRVSAoMHgxIDw8ICA5KSA7LSAoRU1BQykgRXh0ZXJuYWwgYWRkcmVzcyBtYXRjaCBlbmFibGUuIA0KK0FUOTFDX0VNQUNfQ0xLICAgICAgICAgICAgRVFVICgweDMgPDwgMTApIDstIChFTUFDKSANCitBVDkxQ19FTUFDX0NMS19IQ0xLXzggICAgIEVRVSAoMHgwIDw8IDEwKSA7LSAoRU1BQykgSENMSyBkaXZpZGVkIGJ5IDgNCitBVDkxQ19FTUFDX0NMS19IQ0xLXzE2ICAgIEVRVSAoMHgxIDw8IDEwKSA7LSAoRU1BQykgSENMSyBkaXZpZGVkIGJ5IDE2DQorQVQ5MUNfRU1BQ19DTEtfSENMS18zMiAgICBFUVUgKDB4MiA8PCAxMCkgOy0gKEVNQUMpIEhDTEsgZGl2aWRlZCBieSAzMg0KK0FUOTFDX0VNQUNfQ0xLX0hDTEtfNjQgICAgRVFVICgweDMgPDwgMTApIDstIChFTUFDKSBIQ0xLIGRpdmlkZWQgYnkgNjQNCitBVDkxQ19FTUFDX1JUWSAgICAgICAgICAgIEVRVSAoMHgxIDw8IDEyKSA7LSAoRU1BQykgDQorQVQ5MUNfRU1BQ19QQUUgICAgICAgICAgICBFUVUgKDB4MSA8PCAxMykgOy0gKEVNQUMpIA0KK0FUOTFDX0VNQUNfUkJPRiAgICAgICAgICAgRVFVICgweDMgPDwgMTQpIDstIChFTUFDKSANCitBVDkxQ19FTUFDX1JCT0ZfT0ZGU0VUXzAgIEVRVSAoMHgwIDw8IDE0KSA7LSAoRU1BQykgbm8gb2Zmc2V0IGZyb20gc3RhcnQgb2YgcmVjZWl2ZSBidWZmZXINCitBVDkxQ19FTUFDX1JCT0ZfT0ZGU0VUXzEgIEVRVSAoMHgxIDw8IDE0KSA7LSAoRU1BQykgb25lIGJ5dGUgb2Zmc2V0IGZyb20gc3RhcnQgb2YgcmVjZWl2ZSBidWZmZXINCitBVDkxQ19FTUFDX1JCT0ZfT0ZGU0VUXzIgIEVRVSAoMHgyIDw8IDE0KSA7LSAoRU1BQykgdHdvIGJ5dGVzIG9mZnNldCBmcm9tIHN0YXJ0IG9mIHJlY2VpdmUgYnVmZmVyDQorQVQ5MUNfRU1BQ19SQk9GX09GRlNFVF8zICBFUVUgKDB4MyA8PCAxNCkgOy0gKEVNQUMpIHRocmVlIGJ5dGVzIG9mZnNldCBmcm9tIHN0YXJ0IG9mIHJlY2VpdmUgYnVmZmVyDQorQVQ5MUNfRU1BQ19STENFICAgICAgICAgICBFUVUgKDB4MSA8PCAxNikgOy0gKEVNQUMpIFJlY2VpdmUgTGVuZ3RoIGZpZWxkIENoZWNraW5nIEVuYWJsZQ0KK0FUOTFDX0VNQUNfRFJGQ1MgICAgICAgICAgRVFVICgweDEgPDwgMTcpIDstIChFTUFDKSBEaXNjYXJkIFJlY2VpdmUgRkNTDQorQVQ5MUNfRU1BQ19FRlJIRCAgICAgICAgICBFUVUgKDB4MSA8PCAxOCkgOy0gKEVNQUMpIA0KK0FUOTFDX0VNQUNfSVJYRkNTICAgICAgICAgRVFVICgweDEgPDwgMTkpIDstIChFTUFDKSBJZ25vcmUgUlggRkNTDQorLy8gLSAtLS0tLS0tLSBFTUFDX05TUiA6IChFTUFDIE9mZnNldDogMHg4KSBOZXR3b3JrIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19FTUFDX0xJTktSICAgICAgICAgIEVRVSAoMHgxIDw8ICAwKSA7LSAoRU1BQykgDQorQVQ5MUNfRU1BQ19NRElPICAgICAgICAgICBFUVUgKDB4MSA8PCAgMSkgOy0gKEVNQUMpIA0KK0FUOTFDX0VNQUNfSURMRSAgICAgICAgICAgRVFVICgweDEgPDwgIDIpIDstIChFTUFDKSANCisvLyAtIC0tLS0tLS0tIEVNQUNfVFNSIDogKEVNQUMgT2Zmc2V0OiAweDE0KSBUcmFuc21pdCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfRU1BQ19VQlIgICAgICAgICAgICBFUVUgKDB4MSA8PCAgMCkgOy0gKEVNQUMpIA0KK0FUOTFDX0VNQUNfQ09MICAgICAgICAgICAgRVFVICgweDEgPDwgIDEpIDstIChFTUFDKSANCitBVDkxQ19FTUFDX1JMRVMgICAgICAgICAgIEVRVSAoMHgxIDw8ICAyKSA7LSAoRU1BQykgDQorQVQ5MUNfRU1BQ19UR08gICAgICAgICAgICBFUVUgKDB4MSA8PCAgMykgOy0gKEVNQUMpIFRyYW5zbWl0IEdvDQorQVQ5MUNfRU1BQ19CRVggICAgICAgICAgICBFUVUgKDB4MSA8PCAgNCkgOy0gKEVNQUMpIEJ1ZmZlcnMgZXhoYXVzdGVkIG1pZCBmcmFtZQ0KK0FUOTFDX0VNQUNfQ09NUCAgICAgICAgICAgRVFVICgweDEgPDwgIDUpIDstIChFTUFDKSANCitBVDkxQ19FTUFDX1VORCAgICAgICAgICAgIEVRVSAoMHgxIDw8ICA2KSA7LSAoRU1BQykgDQorLy8gLSAtLS0tLS0tLSBFTUFDX1JTUiA6IChFTUFDIE9mZnNldDogMHgyMCkgUmVjZWl2ZSBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfRU1BQ19CTkEgICAgICAgICAgICBFUVUgKDB4MSA8PCAgMCkgOy0gKEVNQUMpIA0KK0FUOTFDX0VNQUNfUkVDICAgICAgICAgICAgRVFVICgweDEgPDwgIDEpIDstIChFTUFDKSANCitBVDkxQ19FTUFDX09WUiAgICAgICAgICAgIEVRVSAoMHgxIDw8ICAyKSA7LSAoRU1BQykgDQorLy8gLSAtLS0tLS0tLSBFTUFDX0lTUiA6IChFTUFDIE9mZnNldDogMHgyNCkgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19FTUFDX01GRCAgICAgICAgICAgIEVRVSAoMHgxIDw8ICAwKSA7LSAoRU1BQykgDQorQVQ5MUNfRU1BQ19SQ09NUCAgICAgICAgICBFUVUgKDB4MSA8PCAgMSkgOy0gKEVNQUMpIA0KK0FUOTFDX0VNQUNfUlhVQlIgICAgICAgICAgRVFVICgweDEgPDwgIDIpIDstIChFTUFDKSANCitBVDkxQ19FTUFDX1RYVUJSICAgICAgICAgIEVRVSAoMHgxIDw8ICAzKSA7LSAoRU1BQykgDQorQVQ5MUNfRU1BQ19UVU5EUiAgICAgICAgICBFUVUgKDB4MSA8PCAgNCkgOy0gKEVNQUMpIA0KK0FUOTFDX0VNQUNfUkxFWCAgICAgICAgICAgRVFVICgweDEgPDwgIDUpIDstIChFTUFDKSANCitBVDkxQ19FTUFDX1RYRVJSICAgICAgICAgIEVRVSAoMHgxIDw8ICA2KSA7LSAoRU1BQykgDQorQVQ5MUNfRU1BQ19UQ09NUCAgICAgICAgICBFUVUgKDB4MSA8PCAgNykgOy0gKEVNQUMpIA0KK0FUOTFDX0VNQUNfTElOSyAgICAgICAgICAgRVFVICgweDEgPDwgIDkpIDstIChFTUFDKSANCitBVDkxQ19FTUFDX1JPVlIgICAgICAgICAgIEVRVSAoMHgxIDw8IDEwKSA7LSAoRU1BQykgDQorQVQ5MUNfRU1BQ19IUkVTUCAgICAgICAgICBFUVUgKDB4MSA8PCAxMSkgOy0gKEVNQUMpIA0KK0FUOTFDX0VNQUNfUEZSRSAgICAgICAgICAgRVFVICgweDEgPDwgMTIpIDstIChFTUFDKSANCitBVDkxQ19FTUFDX1BUWiAgICAgICAgICAgIEVRVSAoMHgxIDw8IDEzKSA7LSAoRU1BQykgDQorLy8gLSAtLS0tLS0tLSBFTUFDX0lFUiA6IChFTUFDIE9mZnNldDogMHgyOCkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtIC0tLS0tLS0tIEVNQUNfSURSIDogKEVNQUMgT2Zmc2V0OiAweDJjKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtIC0tLS0tLS0tIEVNQUNfSU1SIDogKEVNQUMgT2Zmc2V0OiAweDMwKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtIC0tLS0tLS0tIEVNQUNfTUFOIDogKEVNQUMgT2Zmc2V0OiAweDM0KSBQSFkgTWFpbnRlbmFuY2UgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfRU1BQ19EQVRBICAgICAgICAgICBFUVUgKDB4RkZGRiA8PCAgMCkgOy0gKEVNQUMpIA0KK0FUOTFDX0VNQUNfQ09ERSAgICAgICAgICAgRVFVICgweDMgPDwgMTYpIDstIChFTUFDKSANCitBVDkxQ19FTUFDX1JFR0EgICAgICAgICAgIEVRVSAoMHgxRiA8PCAxOCkgOy0gKEVNQUMpIA0KK0FUOTFDX0VNQUNfUEhZQSAgICAgICAgICAgRVFVICgweDFGIDw8IDIzKSA7LSAoRU1BQykgDQorQVQ5MUNfRU1BQ19SVyAgICAgICAgICAgICBFUVUgKDB4MyA8PCAyOCkgOy0gKEVNQUMpIA0KK0FUOTFDX0VNQUNfU09GICAgICAgICAgICAgRVFVICgweDMgPDwgMzApIDstIChFTUFDKSANCisvLyAtIC0tLS0tLS0tIEVNQUNfVVNSSU8gOiAoRU1BQyBPZmZzZXQ6IDB4YzApIFVTRVIgSW5wdXQgT3V0cHV0IFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX0VNQUNfUk1JSSAgICAgICAgICAgRVFVICgweDEgPDwgIDApIDstIChFTUFDKSBSZWR1Y2UgTUlJDQorLy8gLSAtLS0tLS0tLSBFTUFDX1dPTCA6IChFTUFDIE9mZnNldDogMHhjNCkgV2FrZSBPbiBMQU4gUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfRU1BQ19JUCAgICAgICAgICAgICBFUVUgKDB4RkZGRiA8PCAgMCkgOy0gKEVNQUMpIEFSUCByZXF1ZXN0IElQIGFkZHJlc3MNCitBVDkxQ19FTUFDX01BRyAgICAgICAgICAgIEVRVSAoMHgxIDw8IDE2KSA7LSAoRU1BQykgTWFnaWMgcGFja2V0IGV2ZW50IGVuYWJsZQ0KK0FUOTFDX0VNQUNfQVJQICAgICAgICAgICAgRVFVICgweDEgPDwgMTcpIDstIChFTUFDKSBBUlAgcmVxdWVzdCBldmVudCBlbmFibGUNCitBVDkxQ19FTUFDX1NBMSAgICAgICAgICAgIEVRVSAoMHgxIDw8IDE4KSA7LSAoRU1BQykgU3BlY2lmaWMgYWRkcmVzcyByZWdpc3RlciAxIGV2ZW50IGVuYWJsZQ0KKy8vIC0gLS0tLS0tLS0gRU1BQ19SRVYgOiAoRU1BQyBPZmZzZXQ6IDB4ZmMpIFJldmlzaW9uIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX0VNQUNfUkVWUkVGICAgICAgICAgRVFVICgweEZGRkYgPDwgIDApIDstIChFTUFDKSANCitBVDkxQ19FTUFDX1BBUlRSRUYgICAgICAgIEVRVSAoMHhGRkZGIDw8IDE2KSA7LSAoRU1BQykgDQogDQotLyogLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qIC0gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQW5hbG9nIHRvIERpZ2l0YWwgQ29udmVydG9yICovDQotLyogLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qIC0gLS0tLS0tLS0gQURDX0NSIDogKEFEQyBPZmZzZXQ6IDB4MCkgQURDIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FEQ19TV1JTVCBFUVUoIDB4MSA8PCAwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBREMgKSBTb2Z0d2FyZSBSZXNldA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQURDX1NUQVJUIEVRVSggMHgxIDw8IDEgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEFEQyApIFN0YXJ0IENvbnZlcnNpb24NCi0vKiAtIC0tLS0tLS0tIEFEQ19NUiA6IChBREMgT2Zmc2V0OiAweDQpIEFEQyBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19BRENfVFJHRU4gRVFVKCAweDEgPDwgMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQURDICkgVHJpZ2dlciBFbmFibGUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FEQ19UUkdFTl9ESVMgRVFVKCAweDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEFEQyApIEhyYWR3YXJlIHRyaWdnZXJzIGFyZSBkaXNhYmxlZC5TdGFydGluZyBhIGNvbnZlcnNpb24gaXMgb25seSBwb3NzaWJsZSBieSBzb2Z0d2FyZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQURDX1RSR0VOX0VOIEVRVSggMHgxICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBREMgKSBIYXJkd2FyZSB0cmlnZ2VyIHNlbGVjdGVkIGJ5IFRSR1NFTCBmaWVsZCBpcyBlbmFibGVkLg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQURDX1RSR1NFTCBFUVUoIDB4NyA8PCAxICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBREMgKSBUcmlnZ2VyIFNlbGVjdGlvbg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQURDX1RSR1NFTF9USU9BMCBFUVUoIDB4MCA8PCAxICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBREMgKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPMA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQURDX1RSR1NFTF9USU9BMSBFUVUoIDB4MSA8PCAxICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBREMgKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPMQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQURDX1RSR1NFTF9USU9BMiBFUVUoIDB4MiA8PCAxICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBREMgKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPMg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQURDX1RSR1NFTF9USU9BMyBFUVUoIDB4MyA8PCAxICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBREMgKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPMw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQURDX1RSR1NFTF9USU9BNCBFUVUoIDB4NCA8PCAxICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBREMgKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPNA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQURDX1RSR1NFTF9USU9BNSBFUVUoIDB4NSA8PCAxICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBREMgKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPNQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQURDX1RSR1NFTF9FWFQgRVFVKCAweDYgPDwgMSApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQURDICkgU2VsZWN0ZWQgVFJHU0VMID0gRXh0ZXJuYWwgVHJpZ2dlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQURDX0xPV1JFUyBFUVUoIDB4MSA8PCA0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBREMgKSBSZXNvbHV0aW9uLg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQURDX0xPV1JFU18xMF9CSVQgRVFVKCAweDAgPDwgNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQURDICkgMTAgLSBiaXQgcmVzb2x1dGlvbg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQURDX0xPV1JFU184X0JJVCBFUVUoIDB4MSA8PCA0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBREMgKSA4IC0gYml0IHJlc29sdXRpb24NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FEQ19TTEVFUCBFUVUoIDB4MSA8PCA1ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBREMgKSBTbGVlcCBNb2RlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19BRENfU0xFRVBfTk9STUFMX01PREUgRVFVKCAweDAgPDwgNSApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQURDICkgTm9ybWFsIE1vZGUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FEQ19TTEVFUF9NT0RFIEVRVSggMHgxIDw8IDUgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEFEQyApIFNsZWVwIE1vZGUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FEQ19QUkVTQ0FMIEVRVSggMHgzRiA8PCA4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBREMgKSBQcmVzY2FsZXIgcmF0ZSBzZWxlY3Rpb24NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FEQ19TVEFSVFVQIEVRVSggMHgxRiA8PCAxNiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQURDICkgU3RhcnR1cCBUaW1lDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19BRENfU0hUSU0gRVFVKCAweEYgPDwgMjQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEFEQyApIFNhbXBsZSAmIEhvbGQgVGltZQ0KLS8qIC0gLS0tLS0tLS0gICBBRENfQ0hFUiA6IChBREMgT2Zmc2V0OiAweDEwKSBBREMgQ2hhbm5lbCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FEQ19DSDAgRVFVKCAweDEgPDwgMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQURDICkgQ2hhbm5lbCAwDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19BRENfQ0gxIEVRVSggMHgxIDw8IDEgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEFEQyApIENoYW5uZWwgMQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQURDX0NIMiBFUVUoIDB4MSA8PCAyICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBREMgKSBDaGFubmVsIDINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FEQ19DSDMgRVFVKCAweDEgPDwgMyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQURDICkgQ2hhbm5lbCAzDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19BRENfQ0g0IEVRVSggMHgxIDw8IDQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEFEQyApIENoYW5uZWwgNA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQURDX0NINSBFUVUoIDB4MSA8PCA1ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBREMgKSBDaGFubmVsIDUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FEQ19DSDYgRVFVKCAweDEgPDwgNiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQURDICkgQ2hhbm5lbCA2DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19BRENfQ0g3IEVRVSggMHgxIDw8IDcgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEFEQyApIENoYW5uZWwgNw0KLS8qIC0gLS0tLS0tLS0gICBBRENfQ0hEUiA6IChBREMgT2Zmc2V0OiAweDE0KSBBREMgQ2hhbm5lbCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLSAtLS0tLS0tLSAgIEFEQ19DSFNSIDogKEFEQyBPZmZzZXQ6IDB4MTgpIEFEQyBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0gLS0tLS0tLS0gQURDX1NSIDogKEFEQyBPZmZzZXQ6IDB4MWMpIEFEQyBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FEQ19FT0MwIEVRVSggMHgxIDw8IDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEFEQyApIEVuZCBvZiBDb252ZXJzaW9uDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19BRENfRU9DMSBFUVUoIDB4MSA8PCAxICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBREMgKSBFbmQgb2YgQ29udmVyc2lvbg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQURDX0VPQzIgRVFVKCAweDEgPDwgMiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQURDICkgRW5kIG9mIENvbnZlcnNpb24NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FEQ19FT0MzIEVRVSggMHgxIDw8IDMgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEFEQyApIEVuZCBvZiBDb252ZXJzaW9uDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19BRENfRU9DNCBFUVUoIDB4MSA8PCA0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBREMgKSBFbmQgb2YgQ29udmVyc2lvbg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQURDX0VPQzUgRVFVKCAweDEgPDwgNSApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQURDICkgRW5kIG9mIENvbnZlcnNpb24NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FEQ19FT0M2IEVRVSggMHgxIDw8IDYgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEFEQyApIEVuZCBvZiBDb252ZXJzaW9uDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19BRENfRU9DNyBFUVUoIDB4MSA8PCA3ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBREMgKSBFbmQgb2YgQ29udmVyc2lvbg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQURDX09WUkUwIEVRVSggMHgxIDw8IDggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEFEQyApIE92ZXJydW4gRXJyb3INCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FEQ19PVlJFMSBFUVUoIDB4MSA8PCA5ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBREMgKSBPdmVycnVuIEVycm9yDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19BRENfT1ZSRTIgRVFVKCAweDEgPDwgMTAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEFEQyApIE92ZXJydW4gRXJyb3INCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FEQ19PVlJFMyBFUVUoIDB4MSA8PCAxMSApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQURDICkgT3ZlcnJ1biBFcnJvcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQURDX09WUkU0IEVRVSggMHgxIDw8IDEyICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBREMgKSBPdmVycnVuIEVycm9yDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19BRENfT1ZSRTUgRVFVKCAweDEgPDwgMTMgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEFEQyApIE92ZXJydW4gRXJyb3INCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FEQ19PVlJFNiBFUVUoIDB4MSA8PCAxNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQURDICkgT3ZlcnJ1biBFcnJvcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQURDX09WUkU3IEVRVSggMHgxIDw8IDE1ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBREMgKSBPdmVycnVuIEVycm9yDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19BRENfRFJEWSBFUVUoIDB4MSA8PCAxNiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQURDICkgRGF0YSBSZWFkeQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQURDX0dPVlJFIEVRVSggMHgxIDw8IDE3ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBREMgKSBHZW5lcmFsIE92ZXJydW4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FEQ19FTkRSWCBFUVUoIDB4MSA8PCAxOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQURDICkgRW5kIG9mIFJlY2VpdmVyIFRyYW5zZmVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19BRENfUlhCVUZGIEVRVSggMHgxIDw8IDE5ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBREMgKSBSWEJVRkYgSW50ZXJydXB0DQotLyogLSAtLS0tLS0tLSBBRENfTENEUiA6IChBREMgT2Zmc2V0OiAweDIwKSBBREMgTGFzdCBDb252ZXJ0ZWQgRGF0YSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQURDX0xEQVRBIEVRVSggMHgzRkYgPDwgMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQURDICkgTGFzdCBEYXRhIENvbnZlcnRlZA0KLS8qIC0gLS0tLS0tLS0gQURDX0lFUiA6IChBREMgT2Zmc2V0OiAweDI0KSBBREMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0gLS0tLS0tLS0gQURDX0lEUiA6IChBREMgT2Zmc2V0OiAweDI4KSBBREMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtIC0tLS0tLS0tIEFEQ19JTVIgOiAoQURDIE9mZnNldDogMHgyYykgQURDIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLSAtLS0tLS0tLSBBRENfQ0RSMCA6IChBREMgT2Zmc2V0OiAweDMwKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDAgLS0tLS0tLS0gKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FEQ19EQVRBIEVRVSggMHgzRkYgPDwgMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQURDICkgQ29udmVydGVkIERhdGENCi0vKiAtIC0tLS0tLS0tIEFEQ19DRFIxIDogKEFEQyBPZmZzZXQ6IDB4MzQpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMSAtLS0tLS0tLSAqLw0KLS8qIC0gLS0tLS0tLS0gQURDX0NEUjIgOiAoQURDIE9mZnNldDogMHgzOCkgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAyIC0tLS0tLS0tICovDQotLyogLSAtLS0tLS0tLSBBRENfQ0RSMyA6IChBREMgT2Zmc2V0OiAweDNjKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDMgLS0tLS0tLS0gKi8NCi0vKiAtIC0tLS0tLS0tIEFEQ19DRFI0IDogKEFEQyBPZmZzZXQ6IDB4NDApIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNCAtLS0tLS0tLSAqLw0KLS8qIC0gLS0tLS0tLS0gQURDX0NEUjUgOiAoQURDIE9mZnNldDogMHg0NCkgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA1IC0tLS0tLS0tICovDQotLyogLSAtLS0tLS0tLSBBRENfQ0RSNiA6IChBREMgT2Zmc2V0OiAweDQ4KSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDYgLS0tLS0tLS0gKi8NCi0vKiAtIC0tLS0tLS0tIEFEQ19DRFI3IDogKEFEQyBPZmZzZXQ6IDB4NGMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNyAtLS0tLS0tLSAqLw0KKy8vIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAtICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIEFuYWxvZyB0byBEaWdpdGFsIENvbnZlcnRvcg0KKy8vIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAtIC0tLS0tLS0tIEFEQ19DUiA6IChBREMgT2Zmc2V0OiAweDApIEFEQyBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX0FEQ19TV1JTVCAgICAgICAgICAgRVFVICgweDEgPDwgIDApIDstIChBREMpIFNvZnR3YXJlIFJlc2V0DQorQVQ5MUNfQURDX1NUQVJUICAgICAgICAgICBFUVUgKDB4MSA8PCAgMSkgOy0gKEFEQykgU3RhcnQgQ29udmVyc2lvbg0KKy8vIC0gLS0tLS0tLS0gQURDX01SIDogKEFEQyBPZmZzZXQ6IDB4NCkgQURDIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfQURDX1RSR0VOICAgICAgICAgICBFUVUgKDB4MSA8PCAgMCkgOy0gKEFEQykgVHJpZ2dlciBFbmFibGUNCitBVDkxQ19BRENfVFJHRU5fRElTICAgICAgIEVRVSAoMHgwKSA7LSAoQURDKSBIcmFkd2FyZSB0cmlnZ2VycyBhcmUgZGlzYWJsZWQuIFN0YXJ0aW5nIGEgY29udmVyc2lvbiBpcyBvbmx5IHBvc3NpYmxlIGJ5IHNvZnR3YXJlDQorQVQ5MUNfQURDX1RSR0VOX0VOICAgICAgICBFUVUgKDB4MSkgOy0gKEFEQykgSGFyZHdhcmUgdHJpZ2dlciBzZWxlY3RlZCBieSBUUkdTRUwgZmllbGQgaXMgZW5hYmxlZC4NCitBVDkxQ19BRENfVFJHU0VMICAgICAgICAgIEVRVSAoMHg3IDw8ICAxKSA7LSAoQURDKSBUcmlnZ2VyIFNlbGVjdGlvbg0KK0FUOTFDX0FEQ19UUkdTRUxfVElPQTAgICAgRVFVICgweDAgPDwgIDEpIDstIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IFRJQU8wDQorQVQ5MUNfQURDX1RSR1NFTF9USU9BMSAgICBFUVUgKDB4MSA8PCAgMSkgOy0gKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gVElBTzENCitBVDkxQ19BRENfVFJHU0VMX1RJT0EyICAgIEVRVSAoMHgyIDw8ICAxKSA7LSAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPMg0KK0FUOTFDX0FEQ19UUkdTRUxfVElPQTMgICAgRVFVICgweDMgPDwgIDEpIDstIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IFRJQU8zDQorQVQ5MUNfQURDX1RSR1NFTF9USU9BNCAgICBFUVUgKDB4NCA8PCAgMSkgOy0gKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gVElBTzQNCitBVDkxQ19BRENfVFJHU0VMX1RJT0E1ICAgIEVRVSAoMHg1IDw8ICAxKSA7LSAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPNQ0KK0FUOTFDX0FEQ19UUkdTRUxfRVhUICAgICAgRVFVICgweDYgPDwgIDEpIDstIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IEV4dGVybmFsIFRyaWdnZXINCitBVDkxQ19BRENfTE9XUkVTICAgICAgICAgIEVRVSAoMHgxIDw8ICA0KSA7LSAoQURDKSBSZXNvbHV0aW9uLg0KK0FUOTFDX0FEQ19MT1dSRVNfMTBfQklUICAgRVFVICgweDAgPDwgIDQpIDstIChBREMpIDEwLWJpdCByZXNvbHV0aW9uDQorQVQ5MUNfQURDX0xPV1JFU184X0JJVCAgICBFUVUgKDB4MSA8PCAgNCkgOy0gKEFEQykgOC1iaXQgcmVzb2x1dGlvbg0KK0FUOTFDX0FEQ19TTEVFUCAgICAgICAgICAgRVFVICgweDEgPDwgIDUpIDstIChBREMpIFNsZWVwIE1vZGUNCitBVDkxQ19BRENfU0xFRVBfTk9STUFMX01PREUgRVFVICgweDAgPDwgIDUpIDstIChBREMpIE5vcm1hbCBNb2RlDQorQVQ5MUNfQURDX1NMRUVQX01PREUgICAgICBFUVUgKDB4MSA8PCAgNSkgOy0gKEFEQykgU2xlZXAgTW9kZQ0KK0FUOTFDX0FEQ19QUkVTQ0FMICAgICAgICAgRVFVICgweDNGIDw8ICA4KSA7LSAoQURDKSBQcmVzY2FsZXIgcmF0ZSBzZWxlY3Rpb24NCitBVDkxQ19BRENfU1RBUlRVUCAgICAgICAgIEVRVSAoMHgxRiA8PCAxNikgOy0gKEFEQykgU3RhcnR1cCBUaW1lDQorQVQ5MUNfQURDX1NIVElNICAgICAgICAgICBFUVUgKDB4RiA8PCAyNCkgOy0gKEFEQykgU2FtcGxlICYgSG9sZCBUaW1lDQorLy8gLSAtLS0tLS0tLSAJQURDX0NIRVIgOiAoQURDIE9mZnNldDogMHgxMCkgQURDIENoYW5uZWwgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX0FEQ19DSDAgICAgICAgICAgICAgRVFVICgweDEgPDwgIDApIDstIChBREMpIENoYW5uZWwgMA0KK0FUOTFDX0FEQ19DSDEgICAgICAgICAgICAgRVFVICgweDEgPDwgIDEpIDstIChBREMpIENoYW5uZWwgMQ0KK0FUOTFDX0FEQ19DSDIgICAgICAgICAgICAgRVFVICgweDEgPDwgIDIpIDstIChBREMpIENoYW5uZWwgMg0KK0FUOTFDX0FEQ19DSDMgICAgICAgICAgICAgRVFVICgweDEgPDwgIDMpIDstIChBREMpIENoYW5uZWwgMw0KK0FUOTFDX0FEQ19DSDQgICAgICAgICAgICAgRVFVICgweDEgPDwgIDQpIDstIChBREMpIENoYW5uZWwgNA0KK0FUOTFDX0FEQ19DSDUgICAgICAgICAgICAgRVFVICgweDEgPDwgIDUpIDstIChBREMpIENoYW5uZWwgNQ0KK0FUOTFDX0FEQ19DSDYgICAgICAgICAgICAgRVFVICgweDEgPDwgIDYpIDstIChBREMpIENoYW5uZWwgNg0KK0FUOTFDX0FEQ19DSDcgICAgICAgICAgICAgRVFVICgweDEgPDwgIDcpIDstIChBREMpIENoYW5uZWwgNw0KKy8vIC0gLS0tLS0tLS0gCUFEQ19DSERSIDogKEFEQyBPZmZzZXQ6IDB4MTQpIEFEQyBDaGFubmVsIERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLSAtLS0tLS0tLSAJQURDX0NIU1IgOiAoQURDIE9mZnNldDogMHgxOCkgQURDIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0gLS0tLS0tLS0gQURDX1NSIDogKEFEQyBPZmZzZXQ6IDB4MWMpIEFEQyBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfQURDX0VPQzAgICAgICAgICAgICBFUVUgKDB4MSA8PCAgMCkgOy0gKEFEQykgRW5kIG9mIENvbnZlcnNpb24NCitBVDkxQ19BRENfRU9DMSAgICAgICAgICAgIEVRVSAoMHgxIDw8ICAxKSA7LSAoQURDKSBFbmQgb2YgQ29udmVyc2lvbg0KK0FUOTFDX0FEQ19FT0MyICAgICAgICAgICAgRVFVICgweDEgPDwgIDIpIDstIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorQVQ5MUNfQURDX0VPQzMgICAgICAgICAgICBFUVUgKDB4MSA8PCAgMykgOy0gKEFEQykgRW5kIG9mIENvbnZlcnNpb24NCitBVDkxQ19BRENfRU9DNCAgICAgICAgICAgIEVRVSAoMHgxIDw8ICA0KSA7LSAoQURDKSBFbmQgb2YgQ29udmVyc2lvbg0KK0FUOTFDX0FEQ19FT0M1ICAgICAgICAgICAgRVFVICgweDEgPDwgIDUpIDstIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorQVQ5MUNfQURDX0VPQzYgICAgICAgICAgICBFUVUgKDB4MSA8PCAgNikgOy0gKEFEQykgRW5kIG9mIENvbnZlcnNpb24NCitBVDkxQ19BRENfRU9DNyAgICAgICAgICAgIEVRVSAoMHgxIDw8ICA3KSA7LSAoQURDKSBFbmQgb2YgQ29udmVyc2lvbg0KK0FUOTFDX0FEQ19PVlJFMCAgICAgICAgICAgRVFVICgweDEgPDwgIDgpIDstIChBREMpIE92ZXJydW4gRXJyb3INCitBVDkxQ19BRENfT1ZSRTEgICAgICAgICAgIEVRVSAoMHgxIDw8ICA5KSA7LSAoQURDKSBPdmVycnVuIEVycm9yDQorQVQ5MUNfQURDX09WUkUyICAgICAgICAgICBFUVUgKDB4MSA8PCAxMCkgOy0gKEFEQykgT3ZlcnJ1biBFcnJvcg0KK0FUOTFDX0FEQ19PVlJFMyAgICAgICAgICAgRVFVICgweDEgPDwgMTEpIDstIChBREMpIE92ZXJydW4gRXJyb3INCitBVDkxQ19BRENfT1ZSRTQgICAgICAgICAgIEVRVSAoMHgxIDw8IDEyKSA7LSAoQURDKSBPdmVycnVuIEVycm9yDQorQVQ5MUNfQURDX09WUkU1ICAgICAgICAgICBFUVUgKDB4MSA8PCAxMykgOy0gKEFEQykgT3ZlcnJ1biBFcnJvcg0KK0FUOTFDX0FEQ19PVlJFNiAgICAgICAgICAgRVFVICgweDEgPDwgMTQpIDstIChBREMpIE92ZXJydW4gRXJyb3INCitBVDkxQ19BRENfT1ZSRTcgICAgICAgICAgIEVRVSAoMHgxIDw8IDE1KSA7LSAoQURDKSBPdmVycnVuIEVycm9yDQorQVQ5MUNfQURDX0RSRFkgICAgICAgICAgICBFUVUgKDB4MSA8PCAxNikgOy0gKEFEQykgRGF0YSBSZWFkeQ0KK0FUOTFDX0FEQ19HT1ZSRSAgICAgICAgICAgRVFVICgweDEgPDwgMTcpIDstIChBREMpIEdlbmVyYWwgT3ZlcnJ1bg0KK0FUOTFDX0FEQ19FTkRSWCAgICAgICAgICAgRVFVICgweDEgPDwgMTgpIDstIChBREMpIEVuZCBvZiBSZWNlaXZlciBUcmFuc2Zlcg0KK0FUOTFDX0FEQ19SWEJVRkYgICAgICAgICAgRVFVICgweDEgPDwgMTkpIDstIChBREMpIFJYQlVGRiBJbnRlcnJ1cHQNCisvLyAtIC0tLS0tLS0tIEFEQ19MQ0RSIDogKEFEQyBPZmZzZXQ6IDB4MjApIEFEQyBMYXN0IENvbnZlcnRlZCBEYXRhIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX0FEQ19MREFUQSAgICAgICAgICAgRVFVICgweDNGRiA8PCAgMCkgOy0gKEFEQykgTGFzdCBEYXRhIENvbnZlcnRlZA0KKy8vIC0gLS0tLS0tLS0gQURDX0lFUiA6IChBREMgT2Zmc2V0OiAweDI0KSBBREMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtIC0tLS0tLS0tIEFEQ19JRFIgOiAoQURDIE9mZnNldDogMHgyOCkgQURDIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0gLS0tLS0tLS0gQURDX0lNUiA6IChBREMgT2Zmc2V0OiAweDJjKSBBREMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLSAtLS0tLS0tLSBBRENfQ0RSMCA6IChBREMgT2Zmc2V0OiAweDMwKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDAgLS0tLS0tLS0gDQorQVQ5MUNfQURDX0RBVEEgICAgICAgICAgICBFUVUgKDB4M0ZGIDw8ICAwKSA7LSAoQURDKSBDb252ZXJ0ZWQgRGF0YQ0KKy8vIC0gLS0tLS0tLS0gQURDX0NEUjEgOiAoQURDIE9mZnNldDogMHgzNCkgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAxIC0tLS0tLS0tIA0KKy8vIC0gLS0tLS0tLS0gQURDX0NEUjIgOiAoQURDIE9mZnNldDogMHgzOCkgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAyIC0tLS0tLS0tIA0KKy8vIC0gLS0tLS0tLS0gQURDX0NEUjMgOiAoQURDIE9mZnNldDogMHgzYykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAzIC0tLS0tLS0tIA0KKy8vIC0gLS0tLS0tLS0gQURDX0NEUjQgOiAoQURDIE9mZnNldDogMHg0MCkgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA0IC0tLS0tLS0tIA0KKy8vIC0gLS0tLS0tLS0gQURDX0NEUjUgOiAoQURDIE9mZnNldDogMHg0NCkgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA1IC0tLS0tLS0tIA0KKy8vIC0gLS0tLS0tLS0gQURDX0NEUjYgOiAoQURDIE9mZnNldDogMHg0OCkgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA2IC0tLS0tLS0tIA0KKy8vIC0gLS0tLS0tLS0gQURDX0NEUjcgOiAoQURDIE9mZnNldDogMHg0YykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA3IC0tLS0tLS0tIA0KIA0KLS8qIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAtICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIEFkdmFuY2VkICBFbmNyeXB0aW9uIFN0YW5kYXJkICovDQotLyogLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qIC0gLS0tLS0tLS0gQUVTX0NSIDogKEFFUyBPZmZzZXQ6IDB4MCkgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQUVTX1NUQVJUIEVRVSggMHgxIDw8IDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEFFUyApIFN0YXJ0cyBQcm9jZXNzaW5nDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19BRVNfU1dSU1QgRVFVKCAweDEgPDwgOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQUVTICkgU29mdHdhcmUgUmVzZXQNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FFU19MT0FEU0VFRCBFUVUoIDB4MSA8PCAxNiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQUVTICkgUmFuZG9tIE51bWJlciBHZW5lcmF0b3IgU2VlZCBMb2FkaW5nDQotLyogLSAtLS0tLS0tLSBBRVNfTVIgOiAoQUVTIE9mZnNldDogMHg0KSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19BRVNfQ0lQSEVSIEVRVSggMHgxIDw8IDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEFFUyApIFByb2Nlc3NpbmcgTW9kZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQUVTX1BST0NETFkgRVFVKCAweEYgPDwgNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQUVTICkgUHJvY2Vzc2luZyBEZWxheQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQUVTX1NNT0QgRVFVKCAweDMgPDwgOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQUVTICkgU3RhcnQgTW9kZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQUVTX1NNT0RfTUFOVUFMIEVRVSggMHgwIDw8IDggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEFFUyApIE1hbnVhbCBNb2RlOlRoZSBTVEFSVCBiaXQgaW4gcmVnaXN0ZXIgQUVTX0NSIG11c3QgYmUgc2V0IHRvIGJlZ2luIGVuY3J5cHRpb24gb3IgZGVjcnlwdGlvbi4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FFU19TTU9EX0FVVE8gRVFVKCAweDEgPDwgOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQUVTICkgQXV0byBNb2RlOm5vIGFjdGlvbiBpbiBBRVNfQ1IgaXMgbmVjZXNzYXJ5KCBjZiBkYXRhc2hlZXQgKS4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FFU19TTU9EX1BEQyBFUVUoIDB4MiA8PCA4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBRVMgKSBQREMgTW9kZSggY2YgZGF0YXNoZWV0ICkuDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19BRVNfT1BNT0QgRVFVKCAweDcgPDwgMTIgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEFFUyApIE9wZXJhdGlvbiBNb2RlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19BRVNfT1BNT0RfRUNCIEVRVSggMHgwIDw8IDEyICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBRVMgKSBFQ0IgRWxlY3Ryb25pYyBDb2RlQm9vayBtb2RlLg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQUVTX09QTU9EX0NCQyBFUVUoIDB4MSA8PCAxMiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQUVTICkgQ0JDIENpcGhlciBCbG9jayBDaGFpbmluZyBtb2RlLg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQUVTX09QTU9EX09GQiBFUVUoIDB4MiA8PCAxMiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQUVTICkgT0ZCIE91dHB1dCBGZWVkYmFjayBtb2RlLg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQUVTX09QTU9EX0NGQiBFUVUoIDB4MyA8PCAxMiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQUVTICkgQ0ZCIENpcGhlciBGZWVkYmFjayBtb2RlLg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQUVTX09QTU9EX0NUUiBFUVUoIDB4NCA8PCAxMiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQUVTICkgQ1RSIENvdW50ZXIgbW9kZS4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FFU19MT0QgRVFVKCAweDEgPDwgMTUgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEFFUyApIExhc3QgT3V0cHV0IERhdGEgTW9kZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQUVTX0NGQlMgRVFVKCAweDcgPDwgMTYgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEFFUyApIENpcGhlciBGZWVkYmFjayBEYXRhIFNpemUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FFU19DRkJTXzEyOF9CSVQgRVFVKCAweDAgPDwgMTYgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEFFUyApIDEyOCAtIGJpdC4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FFU19DRkJTXzY0X0JJVCBFUVUoIDB4MSA8PCAxNiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQUVTICkgNjQgLSBiaXQuDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19BRVNfQ0ZCU18zMl9CSVQgRVFVKCAweDIgPDwgMTYgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEFFUyApIDMyIC0gYml0Lg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQUVTX0NGQlNfMTZfQklUIEVRVSggMHgzIDw8IDE2ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBRVMgKSAxNiAtIGJpdC4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FFU19DRkJTXzhfQklUIEVRVSggMHg0IDw8IDE2ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBRVMgKSA4IC0gYml0Lg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQUVTX0NLRVkgRVFVKCAweEYgPDwgMjAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEFFUyApIENvdW50ZXJtZWFzdXJlIEtleQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQUVTX0NUWVBFIEVRVSggMHgxRiA8PCAyNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQUVTICkgQ291bnRlcm1lYXN1cmUgVHlwZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQUVTX0NUWVBFX1RZUEUxX0VOIEVRVSggMHgxIDw8IDI0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBRVMgKSBDb3VudGVybWVhc3VyZSB0eXBlIDEgaXMgZW5hYmxlZC4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FFU19DVFlQRV9UWVBFMl9FTiBFUVUoIDB4MiA8PCAyNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQUVTICkgQ291bnRlcm1lYXN1cmUgdHlwZSAyIGlzIGVuYWJsZWQuDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19BRVNfQ1RZUEVfVFlQRTNfRU4gRVFVKCAweDQgPDwgMjQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEFFUyApIENvdW50ZXJtZWFzdXJlIHR5cGUgMyBpcyBlbmFibGVkLg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQUVTX0NUWVBFX1RZUEU0X0VOIEVRVSggMHg4IDw8IDI0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBRVMgKSBDb3VudGVybWVhc3VyZSB0eXBlIDQgaXMgZW5hYmxlZC4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FFU19DVFlQRV9UWVBFNV9FTiBFUVUoIDB4MTAgPDwgMjQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEFFUyApIENvdW50ZXJtZWFzdXJlIHR5cGUgNSBpcyBlbmFibGVkLg0KLS8qIC0gLS0tLS0tLS0gQUVTX0lFUiA6IChBRVMgT2Zmc2V0OiAweDEwKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19BRVNfREFUUkRZIEVRVSggMHgxIDw8IDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEFFUyApIERBVFJEWQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQUVTX0VORFJYIEVRVSggMHgxIDw8IDEgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEFFUyApIFBEQyBSZWFkIEJ1ZmZlciBFbmQNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FFU19FTkRUWCBFUVUoIDB4MSA8PCAyICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBRVMgKSBQREMgV3JpdGUgQnVmZmVyIEVuZA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQUVTX1JYQlVGRiBFUVUoIDB4MSA8PCAzICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBRVMgKSBQREMgUmVhZCBCdWZmZXIgRnVsbA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQUVTX1RYQlVGRSBFUVUoIDB4MSA8PCA0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBRVMgKSBQREMgV3JpdGUgQnVmZmVyIEVtcHR5DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19BRVNfVVJBRCBFUVUoIDB4MSA8PCA4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBRVMgKSBVbnNwZWNpZmllZCBSZWdpc3RlciBBY2Nlc3MgRGV0ZWN0aW9uDQotLyogLSAtLS0tLS0tLSBBRVNfSURSIDogKEFFUyBPZmZzZXQ6IDB4MTQpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLSAtLS0tLS0tLSBBRVNfSU1SIDogKEFFUyBPZmZzZXQ6IDB4MTgpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLSAtLS0tLS0tLSBBRVNfSVNSIDogKEFFUyBPZmZzZXQ6IDB4MWMpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FFU19VUkFUIEVRVSggMHg3IDw8IDEyICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBRVMgKSBVbnNwZWNpZmllZCBSZWdpc3RlciBBY2Nlc3MgVHlwZSBTdGF0dXMNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FFU19VUkFUX0lOX0RBVF9XUklURV9EQVRQUk9DIEVRVSggMHgwIDw8IDEyICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBRVMgKSBJbnB1dCBkYXRhIHJlZ2lzdGVyIHdyaXR0ZW4gZHVyaW5nIHRoZSBkYXRhIHByb2Nlc3NpbmcgaW4gUERDIG1vZGUuDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19BRVNfVVJBVF9PVVRfREFUX1JFQURfREFUUFJPQyBFUVUoIDB4MSA8PCAxMiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQUVTICkgT3V0cHV0IGRhdGEgcmVnaXN0ZXIgcmVhZCBkdXJpbmcgdGhlIGRhdGEgcHJvY2Vzc2luZy4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FFU19VUkFUX01PREVSRUdfV1JJVEVfREFUUFJPQyBFUVUoIDB4MiA8PCAxMiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQUVTICkgTW9kZSByZWdpc3RlciB3cml0dGVuIGR1cmluZyB0aGUgZGF0YSBwcm9jZXNzaW5nLg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQUVTX1VSQVRfT1VUX0RBVF9SRUFEX1NVQktFWSBFUVUoIDB4MyA8PCAxMiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQUVTICkgT3V0cHV0IGRhdGEgcmVnaXN0ZXIgcmVhZCBkdXJpbmcgdGhlIHN1YiAtIGtleXMgZ2VuZXJhdGlvbi4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FFU19VUkFUX01PREVSRUdfV1JJVEVfU1VCS0VZIEVRVSggMHg0IDw8IDEyICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBRVMgKSBNb2RlIHJlZ2lzdGVyIHdyaXR0ZW4gZHVyaW5nIHRoZSBzdWIgLSBrZXlzIGdlbmVyYXRpb24uDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19BRVNfVVJBVF9XT19SRUdfUkVBRCBFUVUoIDB4NSA8PCAxMiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQUVTICkgV3JpdGUgLSBvbmx5IHJlZ2lzdGVyIHJlYWQgYWNjZXNzLg0KKy8vIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAtICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIEFkdmFuY2VkICBFbmNyeXB0aW9uIFN0YW5kYXJkDQorLy8gLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vIC0gLS0tLS0tLS0gQUVTX0NSIDogKEFFUyBPZmZzZXQ6IDB4MCkgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCitBVDkxQ19BRVNfU1RBUlQgICAgICAgICAgIEVRVSAoMHgxIDw8ICAwKSA7LSAoQUVTKSBTdGFydHMgUHJvY2Vzc2luZw0KK0FUOTFDX0FFU19TV1JTVCAgICAgICAgICAgRVFVICgweDEgPDwgIDgpIDstIChBRVMpIFNvZnR3YXJlIFJlc2V0DQorQVQ5MUNfQUVTX0xPQURTRUVEICAgICAgICBFUVUgKDB4MSA8PCAxNikgOy0gKEFFUykgUmFuZG9tIE51bWJlciBHZW5lcmF0b3IgU2VlZCBMb2FkaW5nDQorLy8gLSAtLS0tLS0tLSBBRVNfTVIgOiAoQUVTIE9mZnNldDogMHg0KSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX0FFU19DSVBIRVIgICAgICAgICAgRVFVICgweDEgPDwgIDApIDstIChBRVMpIFByb2Nlc3NpbmcgTW9kZQ0KK0FUOTFDX0FFU19QUk9DRExZICAgICAgICAgRVFVICgweEYgPDwgIDQpIDstIChBRVMpIFByb2Nlc3NpbmcgRGVsYXkNCitBVDkxQ19BRVNfU01PRCAgICAgICAgICAgIEVRVSAoMHgzIDw8ICA4KSA7LSAoQUVTKSBTdGFydCBNb2RlDQorQVQ5MUNfQUVTX1NNT0RfTUFOVUFMICAgICBFUVUgKDB4MCA8PCAgOCkgOy0gKEFFUykgTWFudWFsIE1vZGU6IFRoZSBTVEFSVCBiaXQgaW4gcmVnaXN0ZXIgQUVTX0NSIG11c3QgYmUgc2V0IHRvIGJlZ2luIGVuY3J5cHRpb24gb3IgZGVjcnlwdGlvbi4NCitBVDkxQ19BRVNfU01PRF9BVVRPICAgICAgIEVRVSAoMHgxIDw8ICA4KSA7LSAoQUVTKSBBdXRvIE1vZGU6IG5vIGFjdGlvbiBpbiBBRVNfQ1IgaXMgbmVjZXNzYXJ5IChjZiBkYXRhc2hlZXQpLg0KK0FUOTFDX0FFU19TTU9EX1BEQyAgICAgICAgRVFVICgweDIgPDwgIDgpIDstIChBRVMpIFBEQyBNb2RlIChjZiBkYXRhc2hlZXQpLg0KK0FUOTFDX0FFU19PUE1PRCAgICAgICAgICAgRVFVICgweDcgPDwgMTIpIDstIChBRVMpIE9wZXJhdGlvbiBNb2RlDQorQVQ5MUNfQUVTX09QTU9EX0VDQiAgICAgICBFUVUgKDB4MCA8PCAxMikgOy0gKEFFUykgRUNCIEVsZWN0cm9uaWMgQ29kZUJvb2sgbW9kZS4NCitBVDkxQ19BRVNfT1BNT0RfQ0JDICAgICAgIEVRVSAoMHgxIDw8IDEyKSA7LSAoQUVTKSBDQkMgQ2lwaGVyIEJsb2NrIENoYWluaW5nIG1vZGUuDQorQVQ5MUNfQUVTX09QTU9EX09GQiAgICAgICBFUVUgKDB4MiA8PCAxMikgOy0gKEFFUykgT0ZCIE91dHB1dCBGZWVkYmFjayBtb2RlLg0KK0FUOTFDX0FFU19PUE1PRF9DRkIgICAgICAgRVFVICgweDMgPDwgMTIpIDstIChBRVMpIENGQiBDaXBoZXIgRmVlZGJhY2sgbW9kZS4NCitBVDkxQ19BRVNfT1BNT0RfQ1RSICAgICAgIEVRVSAoMHg0IDw8IDEyKSA7LSAoQUVTKSBDVFIgQ291bnRlciBtb2RlLg0KK0FUOTFDX0FFU19MT0QgICAgICAgICAgICAgRVFVICgweDEgPDwgMTUpIDstIChBRVMpIExhc3QgT3V0cHV0IERhdGEgTW9kZQ0KK0FUOTFDX0FFU19DRkJTICAgICAgICAgICAgRVFVICgweDcgPDwgMTYpIDstIChBRVMpIENpcGhlciBGZWVkYmFjayBEYXRhIFNpemUNCitBVDkxQ19BRVNfQ0ZCU18xMjhfQklUICAgIEVRVSAoMHgwIDw8IDE2KSA7LSAoQUVTKSAxMjgtYml0Lg0KK0FUOTFDX0FFU19DRkJTXzY0X0JJVCAgICAgRVFVICgweDEgPDwgMTYpIDstIChBRVMpIDY0LWJpdC4NCitBVDkxQ19BRVNfQ0ZCU18zMl9CSVQgICAgIEVRVSAoMHgyIDw8IDE2KSA7LSAoQUVTKSAzMi1iaXQuDQorQVQ5MUNfQUVTX0NGQlNfMTZfQklUICAgICBFUVUgKDB4MyA8PCAxNikgOy0gKEFFUykgMTYtYml0Lg0KK0FUOTFDX0FFU19DRkJTXzhfQklUICAgICAgRVFVICgweDQgPDwgMTYpIDstIChBRVMpIDgtYml0Lg0KK0FUOTFDX0FFU19DS0VZICAgICAgICAgICAgRVFVICgweEYgPDwgMjApIDstIChBRVMpIENvdW50ZXJtZWFzdXJlIEtleQ0KK0FUOTFDX0FFU19DVFlQRSAgICAgICAgICAgRVFVICgweDFGIDw8IDI0KSA7LSAoQUVTKSBDb3VudGVybWVhc3VyZSBUeXBlDQorQVQ5MUNfQUVTX0NUWVBFX1RZUEUxX0VOICBFUVUgKDB4MSA8PCAyNCkgOy0gKEFFUykgQ291bnRlcm1lYXN1cmUgdHlwZSAxIGlzIGVuYWJsZWQuDQorQVQ5MUNfQUVTX0NUWVBFX1RZUEUyX0VOICBFUVUgKDB4MiA8PCAyNCkgOy0gKEFFUykgQ291bnRlcm1lYXN1cmUgdHlwZSAyIGlzIGVuYWJsZWQuDQorQVQ5MUNfQUVTX0NUWVBFX1RZUEUzX0VOICBFUVUgKDB4NCA8PCAyNCkgOy0gKEFFUykgQ291bnRlcm1lYXN1cmUgdHlwZSAzIGlzIGVuYWJsZWQuDQorQVQ5MUNfQUVTX0NUWVBFX1RZUEU0X0VOICBFUVUgKDB4OCA8PCAyNCkgOy0gKEFFUykgQ291bnRlcm1lYXN1cmUgdHlwZSA0IGlzIGVuYWJsZWQuDQorQVQ5MUNfQUVTX0NUWVBFX1RZUEU1X0VOICBFUVUgKDB4MTAgPDwgMjQpIDstIChBRVMpIENvdW50ZXJtZWFzdXJlIHR5cGUgNSBpcyBlbmFibGVkLg0KKy8vIC0gLS0tLS0tLS0gQUVTX0lFUiA6IChBRVMgT2Zmc2V0OiAweDEwKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX0FFU19EQVRSRFkgICAgICAgICAgRVFVICgweDEgPDwgIDApIDstIChBRVMpIERBVFJEWQ0KK0FUOTFDX0FFU19FTkRSWCAgICAgICAgICAgRVFVICgweDEgPDwgIDEpIDstIChBRVMpIFBEQyBSZWFkIEJ1ZmZlciBFbmQNCitBVDkxQ19BRVNfRU5EVFggICAgICAgICAgIEVRVSAoMHgxIDw8ICAyKSA7LSAoQUVTKSBQREMgV3JpdGUgQnVmZmVyIEVuZA0KK0FUOTFDX0FFU19SWEJVRkYgICAgICAgICAgRVFVICgweDEgPDwgIDMpIDstIChBRVMpIFBEQyBSZWFkIEJ1ZmZlciBGdWxsDQorQVQ5MUNfQUVTX1RYQlVGRSAgICAgICAgICBFUVUgKDB4MSA8PCAgNCkgOy0gKEFFUykgUERDIFdyaXRlIEJ1ZmZlciBFbXB0eQ0KK0FUOTFDX0FFU19VUkFEICAgICAgICAgICAgRVFVICgweDEgPDwgIDgpIDstIChBRVMpIFVuc3BlY2lmaWVkIFJlZ2lzdGVyIEFjY2VzcyBEZXRlY3Rpb24NCisvLyAtIC0tLS0tLS0tIEFFU19JRFIgOiAoQUVTIE9mZnNldDogMHgxNCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLSAtLS0tLS0tLSBBRVNfSU1SIDogKEFFUyBPZmZzZXQ6IDB4MTgpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0gLS0tLS0tLS0gQUVTX0lTUiA6IChBRVMgT2Zmc2V0OiAweDFjKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX0FFU19VUkFUICAgICAgICAgICAgRVFVICgweDcgPDwgMTIpIDstIChBRVMpIFVuc3BlY2lmaWVkIFJlZ2lzdGVyIEFjY2VzcyBUeXBlIFN0YXR1cw0KK0FUOTFDX0FFU19VUkFUX0lOX0RBVF9XUklURV9EQVRQUk9DIEVRVSAoMHgwIDw8IDEyKSA7LSAoQUVTKSBJbnB1dCBkYXRhIHJlZ2lzdGVyIHdyaXR0ZW4gZHVyaW5nIHRoZSBkYXRhIHByb2Nlc3NpbmcgaW4gUERDIG1vZGUuDQorQVQ5MUNfQUVTX1VSQVRfT1VUX0RBVF9SRUFEX0RBVFBST0MgRVFVICgweDEgPDwgMTIpIDstIChBRVMpIE91dHB1dCBkYXRhIHJlZ2lzdGVyIHJlYWQgZHVyaW5nIHRoZSBkYXRhIHByb2Nlc3NpbmcuDQorQVQ5MUNfQUVTX1VSQVRfTU9ERVJFR19XUklURV9EQVRQUk9DIEVRVSAoMHgyIDw8IDEyKSA7LSAoQUVTKSBNb2RlIHJlZ2lzdGVyIHdyaXR0ZW4gZHVyaW5nIHRoZSBkYXRhIHByb2Nlc3NpbmcuDQorQVQ5MUNfQUVTX1VSQVRfT1VUX0RBVF9SRUFEX1NVQktFWSBFUVUgKDB4MyA8PCAxMikgOy0gKEFFUykgT3V0cHV0IGRhdGEgcmVnaXN0ZXIgcmVhZCBkdXJpbmcgdGhlIHN1Yi1rZXlzIGdlbmVyYXRpb24uDQorQVQ5MUNfQUVTX1VSQVRfTU9ERVJFR19XUklURV9TVUJLRVkgRVFVICgweDQgPDwgMTIpIDstIChBRVMpIE1vZGUgcmVnaXN0ZXIgd3JpdHRlbiBkdXJpbmcgdGhlIHN1Yi1rZXlzIGdlbmVyYXRpb24uDQorQVQ5MUNfQUVTX1VSQVRfV09fUkVHX1JFQUQgRVFVICgweDUgPDwgMTIpIDstIChBRVMpIFdyaXRlLW9ubHkgcmVnaXN0ZXIgcmVhZCBhY2Nlc3MuDQogDQotLyogLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qIC0gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVHJpcGxlIERhdGEgRW5jcnlwdGlvbiBTdGFuZGFyZCAqLw0KLS8qIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAtIC0tLS0tLS0tIFRERVNfQ1IgOiAoVERFUyBPZmZzZXQ6IDB4MCkgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVERFU19TVEFSVCBFUVUoIDB4MSA8PCAwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUREVTICkgU3RhcnRzIFByb2Nlc3NpbmcNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RERVNfU1dSU1QgRVFVKCAweDEgPDwgOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVERFUyApIFNvZnR3YXJlIFJlc2V0DQotLyogLSAtLS0tLS0tLSBUREVTX01SIDogKFRERVMgT2Zmc2V0OiAweDQpIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RERVNfQ0lQSEVSIEVRVSggMHgxIDw8IDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRERVMgKSBQcm9jZXNzaW5nIE1vZGUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RERVNfVERFU01PRCBFUVUoIDB4MSA8PCAxICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUREVTICkgU2luZ2xlIG9yIFRyaXBsZSBERVMgTW9kZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVERFU19LRVlNT0QgRVFVKCAweDEgPDwgNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVERFUyApIEtleSBNb2RlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UREVTX1NNT0QgRVFVKCAweDMgPDwgOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVERFUyApIFN0YXJ0IE1vZGUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RERVNfU01PRF9NQU5VQUwgRVFVKCAweDAgPDwgOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVERFUyApIE1hbnVhbCBNb2RlOlRoZSBTVEFSVCBiaXQgaW4gcmVnaXN0ZXIgVERFU19DUiBtdXN0IGJlIHNldCB0byBiZWdpbiBlbmNyeXB0aW9uIG9yIGRlY3J5cHRpb24uDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UREVTX1NNT0RfQVVUTyBFUVUoIDB4MSA8PCA4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUREVTICkgQXV0byBNb2RlOm5vIGFjdGlvbiBpbiBUREVTX0NSIGlzIG5lY2Vzc2FyeSggY2YgZGF0YXNoZWV0ICkuDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UREVTX1NNT0RfUERDIEVRVSggMHgyIDw8IDggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRERVMgKSBQREMgTW9kZSggY2YgZGF0YXNoZWV0ICkuDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UREVTX09QTU9EIEVRVSggMHgzIDw8IDEyICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUREVTICkgT3BlcmF0aW9uIE1vZGUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RERVNfT1BNT0RfRUNCIEVRVSggMHgwIDw8IDEyICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUREVTICkgRUNCIEVsZWN0cm9uaWMgQ29kZUJvb2sgbW9kZS4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RERVNfT1BNT0RfQ0JDIEVRVSggMHgxIDw8IDEyICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUREVTICkgQ0JDIENpcGhlciBCbG9jayBDaGFpbmluZyBtb2RlLg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVERFU19PUE1PRF9PRkIgRVFVKCAweDIgPDwgMTIgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRERVMgKSBPRkIgT3V0cHV0IEZlZWRiYWNrIG1vZGUuDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UREVTX09QTU9EX0NGQiBFUVUoIDB4MyA8PCAxMiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVERFUyApIENGQiBDaXBoZXIgRmVlZGJhY2sgbW9kZS4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RERVNfTE9EIEVRVSggMHgxIDw8IDE1ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUREVTICkgTGFzdCBPdXRwdXQgRGF0YSBNb2RlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UREVTX0NGQlMgRVFVKCAweDMgPDwgMTYgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRERVMgKSBDaXBoZXIgRmVlZGJhY2sgRGF0YSBTaXplDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UREVTX0NGQlNfNjRfQklUIEVRVSggMHgwIDw8IDE2ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUREVTICkgNjQgLSBiaXQuDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UREVTX0NGQlNfMzJfQklUIEVRVSggMHgxIDw8IDE2ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUREVTICkgMzIgLSBiaXQuDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UREVTX0NGQlNfMTZfQklUIEVRVSggMHgyIDw8IDE2ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUREVTICkgMTYgLSBiaXQuDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UREVTX0NGQlNfOF9CSVQgRVFVKCAweDMgPDwgMTYgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRERVMgKSA4IC0gYml0Lg0KLS8qIC0gLS0tLS0tLS0gVERFU19JRVIgOiAoVERFUyBPZmZzZXQ6IDB4MTApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RERVNfREFUUkRZIEVRVSggMHgxIDw8IDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRERVMgKSBEQVRSRFkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RERVNfRU5EUlggRVFVKCAweDEgPDwgMSApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVERFUyApIFBEQyBSZWFkIEJ1ZmZlciBFbmQNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RERVNfRU5EVFggRVFVKCAweDEgPDwgMiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVERFUyApIFBEQyBXcml0ZSBCdWZmZXIgRW5kDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UREVTX1JYQlVGRiBFUVUoIDB4MSA8PCAzICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUREVTICkgUERDIFJlYWQgQnVmZmVyIEZ1bGwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RERVNfVFhCVUZFIEVRVSggMHgxIDw8IDQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRERVMgKSBQREMgV3JpdGUgQnVmZmVyIEVtcHR5DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UREVTX1VSQUQgRVFVKCAweDEgPDwgOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVERFUyApIFVuc3BlY2lmaWVkIFJlZ2lzdGVyIEFjY2VzcyBEZXRlY3Rpb24NCi0vKiAtIC0tLS0tLS0tIFRERVNfSURSIDogKFRERVMgT2Zmc2V0OiAweDE0KSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0gLS0tLS0tLS0gVERFU19JTVIgOiAoVERFUyBPZmZzZXQ6IDB4MTgpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLSAtLS0tLS0tLSBUREVTX0lTUiA6IChUREVTIE9mZnNldDogMHgxYykgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVERFU19VUkFUIEVRVSggMHgzIDw8IDEyICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUREVTICkgVW5zcGVjaWZpZWQgUmVnaXN0ZXIgQWNjZXNzIFR5cGUgU3RhdHVzDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UREVTX1VSQVRfSU5fREFUX1dSSVRFX0RBVFBST0MgRVFVKCAweDAgPDwgMTIgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRERVMgKSBJbnB1dCBkYXRhIHJlZ2lzdGVyIHdyaXR0ZW4gZHVyaW5nIHRoZSBkYXRhIHByb2Nlc3NpbmcgaW4gUERDIG1vZGUuDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UREVTX1VSQVRfT1VUX0RBVF9SRUFEX0RBVFBST0MgRVFVKCAweDEgPDwgMTIgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRERVMgKSBPdXRwdXQgZGF0YSByZWdpc3RlciByZWFkIGR1cmluZyB0aGUgZGF0YSBwcm9jZXNzaW5nLg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVERFU19VUkFUX01PREVSRUdfV1JJVEVfREFUUFJPQyBFUVUoIDB4MiA8PCAxMiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVERFUyApIE1vZGUgcmVnaXN0ZXIgd3JpdHRlbiBkdXJpbmcgdGhlIGRhdGEgcHJvY2Vzc2luZy4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RERVNfVVJBVF9XT19SRUdfUkVBRCBFUVUoIDB4MyA8PCAxMiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVERFUyApIFdyaXRlIC0gb25seSByZWdpc3RlciByZWFkIGFjY2Vzcy4NCisvLyAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gLSAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBUcmlwbGUgRGF0YSBFbmNyeXB0aW9uIFN0YW5kYXJkDQorLy8gLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vIC0gLS0tLS0tLS0gVERFU19DUiA6IChUREVTIE9mZnNldDogMHgwKSBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX1RERVNfU1RBUlQgICAgICAgICAgRVFVICgweDEgPDwgIDApIDstIChUREVTKSBTdGFydHMgUHJvY2Vzc2luZw0KK0FUOTFDX1RERVNfU1dSU1QgICAgICAgICAgRVFVICgweDEgPDwgIDgpIDstIChUREVTKSBTb2Z0d2FyZSBSZXNldA0KKy8vIC0gLS0tLS0tLS0gVERFU19NUiA6IChUREVTIE9mZnNldDogMHg0KSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KK0FUOTFDX1RERVNfQ0lQSEVSICAgICAgICAgRVFVICgweDEgPDwgIDApIDstIChUREVTKSBQcm9jZXNzaW5nIE1vZGUNCitBVDkxQ19UREVTX1RERVNNT0QgICAgICAgIEVRVSAoMHgxIDw8ICAxKSA7LSAoVERFUykgU2luZ2xlIG9yIFRyaXBsZSBERVMgTW9kZQ0KK0FUOTFDX1RERVNfS0VZTU9EICAgICAgICAgRVFVICgweDEgPDwgIDQpIDstIChUREVTKSBLZXkgTW9kZQ0KK0FUOTFDX1RERVNfU01PRCAgICAgICAgICAgRVFVICgweDMgPDwgIDgpIDstIChUREVTKSBTdGFydCBNb2RlDQorQVQ5MUNfVERFU19TTU9EX01BTlVBTCAgICBFUVUgKDB4MCA8PCAgOCkgOy0gKFRERVMpIE1hbnVhbCBNb2RlOiBUaGUgU1RBUlQgYml0IGluIHJlZ2lzdGVyIFRERVNfQ1IgbXVzdCBiZSBzZXQgdG8gYmVnaW4gZW5jcnlwdGlvbiBvciBkZWNyeXB0aW9uLg0KK0FUOTFDX1RERVNfU01PRF9BVVRPICAgICAgRVFVICgweDEgPDwgIDgpIDstIChUREVTKSBBdXRvIE1vZGU6IG5vIGFjdGlvbiBpbiBUREVTX0NSIGlzIG5lY2Vzc2FyeSAoY2YgZGF0YXNoZWV0KS4NCitBVDkxQ19UREVTX1NNT0RfUERDICAgICAgIEVRVSAoMHgyIDw8ICA4KSA7LSAoVERFUykgUERDIE1vZGUgKGNmIGRhdGFzaGVldCkuDQorQVQ5MUNfVERFU19PUE1PRCAgICAgICAgICBFUVUgKDB4MyA8PCAxMikgOy0gKFRERVMpIE9wZXJhdGlvbiBNb2RlDQorQVQ5MUNfVERFU19PUE1PRF9FQ0IgICAgICBFUVUgKDB4MCA8PCAxMikgOy0gKFRERVMpIEVDQiBFbGVjdHJvbmljIENvZGVCb29rIG1vZGUuDQorQVQ5MUNfVERFU19PUE1PRF9DQkMgICAgICBFUVUgKDB4MSA8PCAxMikgOy0gKFRERVMpIENCQyBDaXBoZXIgQmxvY2sgQ2hhaW5pbmcgbW9kZS4NCitBVDkxQ19UREVTX09QTU9EX09GQiAgICAgIEVRVSAoMHgyIDw8IDEyKSA7LSAoVERFUykgT0ZCIE91dHB1dCBGZWVkYmFjayBtb2RlLg0KK0FUOTFDX1RERVNfT1BNT0RfQ0ZCICAgICAgRVFVICgweDMgPDwgMTIpIDstIChUREVTKSBDRkIgQ2lwaGVyIEZlZWRiYWNrIG1vZGUuDQorQVQ5MUNfVERFU19MT0QgICAgICAgICAgICBFUVUgKDB4MSA8PCAxNSkgOy0gKFRERVMpIExhc3QgT3V0cHV0IERhdGEgTW9kZQ0KK0FUOTFDX1RERVNfQ0ZCUyAgICAgICAgICAgRVFVICgweDMgPDwgMTYpIDstIChUREVTKSBDaXBoZXIgRmVlZGJhY2sgRGF0YSBTaXplDQorQVQ5MUNfVERFU19DRkJTXzY0X0JJVCAgICBFUVUgKDB4MCA8PCAxNikgOy0gKFRERVMpIDY0LWJpdC4NCitBVDkxQ19UREVTX0NGQlNfMzJfQklUICAgIEVRVSAoMHgxIDw8IDE2KSA7LSAoVERFUykgMzItYml0Lg0KK0FUOTFDX1RERVNfQ0ZCU18xNl9CSVQgICAgRVFVICgweDIgPDwgMTYpIDstIChUREVTKSAxNi1iaXQuDQorQVQ5MUNfVERFU19DRkJTXzhfQklUICAgICBFUVUgKDB4MyA8PCAxNikgOy0gKFRERVMpIDgtYml0Lg0KKy8vIC0gLS0tLS0tLS0gVERFU19JRVIgOiAoVERFUyBPZmZzZXQ6IDB4MTApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfVERFU19EQVRSRFkgICAgICAgICBFUVUgKDB4MSA8PCAgMCkgOy0gKFRERVMpIERBVFJEWQ0KK0FUOTFDX1RERVNfRU5EUlggICAgICAgICAgRVFVICgweDEgPDwgIDEpIDstIChUREVTKSBQREMgUmVhZCBCdWZmZXIgRW5kDQorQVQ5MUNfVERFU19FTkRUWCAgICAgICAgICBFUVUgKDB4MSA8PCAgMikgOy0gKFRERVMpIFBEQyBXcml0ZSBCdWZmZXIgRW5kDQorQVQ5MUNfVERFU19SWEJVRkYgICAgICAgICBFUVUgKDB4MSA8PCAgMykgOy0gKFRERVMpIFBEQyBSZWFkIEJ1ZmZlciBGdWxsDQorQVQ5MUNfVERFU19UWEJVRkUgICAgICAgICBFUVUgKDB4MSA8PCAgNCkgOy0gKFRERVMpIFBEQyBXcml0ZSBCdWZmZXIgRW1wdHkNCitBVDkxQ19UREVTX1VSQUQgICAgICAgICAgIEVRVSAoMHgxIDw8ICA4KSA7LSAoVERFUykgVW5zcGVjaWZpZWQgUmVnaXN0ZXIgQWNjZXNzIERldGVjdGlvbg0KKy8vIC0gLS0tLS0tLS0gVERFU19JRFIgOiAoVERFUyBPZmZzZXQ6IDB4MTQpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0gLS0tLS0tLS0gVERFU19JTVIgOiAoVERFUyBPZmZzZXQ6IDB4MTgpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0gLS0tLS0tLS0gVERFU19JU1IgOiAoVERFUyBPZmZzZXQ6IDB4MWMpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorQVQ5MUNfVERFU19VUkFUICAgICAgICAgICBFUVUgKDB4MyA8PCAxMikgOy0gKFRERVMpIFVuc3BlY2lmaWVkIFJlZ2lzdGVyIEFjY2VzcyBUeXBlIFN0YXR1cw0KK0FUOTFDX1RERVNfVVJBVF9JTl9EQVRfV1JJVEVfREFUUFJPQyBFUVUgKDB4MCA8PCAxMikgOy0gKFRERVMpIElucHV0IGRhdGEgcmVnaXN0ZXIgd3JpdHRlbiBkdXJpbmcgdGhlIGRhdGEgcHJvY2Vzc2luZyBpbiBQREMgbW9kZS4NCitBVDkxQ19UREVTX1VSQVRfT1VUX0RBVF9SRUFEX0RBVFBST0MgRVFVICgweDEgPDwgMTIpIDstIChUREVTKSBPdXRwdXQgZGF0YSByZWdpc3RlciByZWFkIGR1cmluZyB0aGUgZGF0YSBwcm9jZXNzaW5nLg0KK0FUOTFDX1RERVNfVVJBVF9NT0RFUkVHX1dSSVRFX0RBVFBST0MgRVFVICgweDIgPDwgMTIpIDstIChUREVTKSBNb2RlIHJlZ2lzdGVyIHdyaXR0ZW4gZHVyaW5nIHRoZSBkYXRhIHByb2Nlc3NpbmcuDQorQVQ5MUNfVERFU19VUkFUX1dPX1JFR19SRUFEIEVRVSAoMHgzIDw8IDEyKSA7LSAoVERFUykgV3JpdGUtb25seSByZWdpc3RlciByZWFkIGFjY2Vzcy4NCiANCi0vKiAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogLSAgICAgICAgICAgICAgIFJFR0lTVEVSIEFERFJFU1MgREVGSU5JVElPTiBGT1IgQVQ5MVNBTTdYMjU2ICovDQotLyogLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qIC0gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBTWVMgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotLyogLSA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIEFJQyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FJQ19JVlIgRVFVKCAweEZGRkZGMTAwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBSUMgKSBJUlEgVmVjdG9yIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19BSUNfU01SIEVRVSggMHhGRkZGRjAwMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQUlDICkgU291cmNlIE1vZGUgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FJQ19GVlIgRVFVKCAweEZGRkZGMTA0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBSUMgKSBGSVEgVmVjdG9yIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19BSUNfRENSIEVRVSggMHhGRkZGRjEzOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQUlDICkgRGVidWcgQ29udHJvbCBSZWdpc3RlciggUHJvdGVjdCApDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19BSUNfRU9JQ1IgRVFVKCAweEZGRkZGMTMwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBSUMgKSBFbmQgb2YgSW50ZXJydXB0IENvbW1hbmQgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FJQ19TVlIgRVFVKCAweEZGRkZGMDgwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBSUMgKSBTb3VyY2UgVmVjdG9yIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19BSUNfRkZTUiBFUVUoIDB4RkZGRkYxNDggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEFJQyApIEZhc3QgRm9yY2luZyBTdGF0dXMgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FJQ19JQ0NSIEVRVSggMHhGRkZGRjEyOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQUlDICkgSW50ZXJydXB0IENsZWFyIENvbW1hbmQgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FJQ19JU1IgRVFVKCAweEZGRkZGMTA4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBSUMgKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19BSUNfSU1SIEVRVSggMHhGRkZGRjExMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQUlDICkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FJQ19JUFIgRVFVKCAweEZGRkZGMTBDICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBSUMgKSBJbnRlcnJ1cHQgUGVuZGluZyBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQUlDX0ZGRVIgRVFVKCAweEZGRkZGMTQwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBSUMgKSBGYXN0IEZvcmNpbmcgRW5hYmxlIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19BSUNfSUVDUiBFUVUoIDB4RkZGRkYxMjAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEFJQyApIEludGVycnVwdCBFbmFibGUgQ29tbWFuZCBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQUlDX0lTQ1IgRVFVKCAweEZGRkZGMTJDICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBSUMgKSBJbnRlcnJ1cHQgU2V0IENvbW1hbmQgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FJQ19GRkRSIEVRVSggMHhGRkZGRjE0NCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQUlDICkgRmFzdCBGb3JjaW5nIERpc2FibGUgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FJQ19DSVNSIEVRVSggMHhGRkZGRjExNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQUlDICkgQ29yZSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19BSUNfSURDUiBFUVUoIDB4RkZGRkYxMjQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEFJQyApIEludGVycnVwdCBEaXNhYmxlIENvbW1hbmQgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FJQ19TUFUgRVFVKCAweEZGRkZGMTM0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBSUMgKSBTcHVyaW91cyBWZWN0b3IgUmVnaXN0ZXINCi0vKiAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX0RCR1UgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19EQkdVX1RDUiBFUVUoIDB4RkZGRkYzMEMgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBEQ19EQkdVICkgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfREJHVV9STlBSIEVRVSggMHhGRkZGRjMxMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUERDX0RCR1UgKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfREJHVV9UTlBSIEVRVSggMHhGRkZGRjMxOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUERDX0RCR1UgKSBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0RCR1VfVFBSIEVRVSggMHhGRkZGRjMwOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUERDX0RCR1UgKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19EQkdVX1JQUiBFUVUoIDB4RkZGRkYzMDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBEQ19EQkdVICkgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19EQkdVX1JDUiBFUVUoIDB4RkZGRkYzMDQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBEQ19EQkdVICkgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19EQkdVX1JOQ1IgRVFVKCAweEZGRkZGMzE0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQRENfREJHVSApIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19EQkdVX1BUQ1IgRVFVKCAweEZGRkZGMzIwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQRENfREJHVSApIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19EQkdVX1BUU1IgRVFVKCAweEZGRkZGMzI0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQRENfREJHVSApIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0RCR1VfVE5DUiBFUVUoIDB4RkZGRkYzMUMgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBEQ19EQkdVICkgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQotLyogLSA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIERCR1UgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19EQkdVX0VYSUQgRVFVKCAweEZGRkZGMjQ0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBEQkdVICkgQ2hpcCBJRCBFeHRlbnNpb24gUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0RCR1VfQlJHUiBFUVUoIDB4RkZGRkYyMjAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIERCR1UgKSBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19EQkdVX0lEUiBFUVUoIDB4RkZGRkYyMEMgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIERCR1UgKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfREJHVV9DU1IgRVFVKCAweEZGRkZGMjE0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBEQkdVICkgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0RCR1VfQ0lEUiBFUVUoIDB4RkZGRkYyNDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIERCR1UgKSBDaGlwIElEIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19EQkdVX01SIEVRVSggMHhGRkZGRjIwNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggREJHVSApIE1vZGUgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0RCR1VfSU1SIEVRVSggMHhGRkZGRjIxMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggREJHVSApIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19EQkdVX0NSIEVRVSggMHhGRkZGRjIwMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggREJHVSApIENvbnRyb2wgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0RCR1VfRk5UUiBFUVUoIDB4RkZGRkYyNDggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIERCR1UgKSBGb3JjZSBOVFJTVCBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfREJHVV9USFIgRVFVKCAweEZGRkZGMjFDICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBEQkdVICkgVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfREJHVV9SSFIgRVFVKCAweEZGRkZGMjE4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBEQkdVICkgUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfREJHVV9JRVIgRVFVKCAweEZGRkZGMjA4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBEQkdVICkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KLS8qIC0gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQSU9BIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUElPQV9PRFIgRVFVKCAweEZGRkZGNDE0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQSU9BICkgT3V0cHV0IERpc2FibGUgUmVnaXN0ZXJyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QSU9BX1NPRFIgRVFVKCAweEZGRkZGNDMwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQSU9BICkgU2V0IE91dHB1dCBEYXRhIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QSU9BX0lTUiBFUVUoIDB4RkZGRkY0NEMgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBJT0EgKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QSU9BX0FCU1IgRVFVKCAweEZGRkZGNDc4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQSU9BICkgQUIgU2VsZWN0IFN0YXR1cyBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUElPQV9JRVIgRVFVKCAweEZGRkZGNDQwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQSU9BICkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUElPQV9QUFVEUiBFUVUoIDB4RkZGRkY0NjAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBJT0EgKSBQdWxsIC0gdXAgRGlzYWJsZSBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUElPQV9JTVIgRVFVKCAweEZGRkZGNDQ4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQSU9BICkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BJT0FfUEVSIEVRVSggMHhGRkZGRjQwMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUElPQSApIFBJTyBFbmFibGUgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BJT0FfSUZEUiBFUVUoIDB4RkZGRkY0MjQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBJT0EgKSBJbnB1dCBGaWx0ZXIgRGlzYWJsZSBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUElPQV9PV0RSIEVRVSggMHhGRkZGRjRBNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUElPQSApIE91dHB1dCBXcml0ZSBEaXNhYmxlIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QSU9BX01EU1IgRVFVKCAweEZGRkZGNDU4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQSU9BICkgTXVsdGkgLSBkcml2ZXIgU3RhdHVzIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QSU9BX0lEUiBFUVUoIDB4RkZGRkY0NDQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBJT0EgKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUElPQV9PRFNSIEVRVSggMHhGRkZGRjQzOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUElPQSApIE91dHB1dCBEYXRhIFN0YXR1cyBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUElPQV9QUFVTUiBFUVUoIDB4RkZGRkY0NjggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBJT0EgKSBQdWxsIC0gdXAgU3RhdHVzIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QSU9BX09XU1IgRVFVKCAweEZGRkZGNEE4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQSU9BICkgT3V0cHV0IFdyaXRlIFN0YXR1cyBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUElPQV9CU1IgRVFVKCAweEZGRkZGNDc0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQSU9BICkgU2VsZWN0IEIgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BJT0FfT1dFUiBFUVUoIDB4RkZGRkY0QTAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBJT0EgKSBPdXRwdXQgV3JpdGUgRW5hYmxlIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QSU9BX0lGRVIgRVFVKCAweEZGRkZGNDIwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQSU9BICkgSW5wdXQgRmlsdGVyIEVuYWJsZSBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUElPQV9QRFNSIEVRVSggMHhGRkZGRjQzQyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUElPQSApIFBpbiBEYXRhIFN0YXR1cyBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUElPQV9QUFVFUiBFUVUoIDB4RkZGRkY0NjQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBJT0EgKSBQdWxsIC0gdXAgRW5hYmxlIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QSU9BX09TUiBFUVUoIDB4RkZGRkY0MTggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBJT0EgKSBPdXRwdXQgU3RhdHVzIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QSU9BX0FTUiBFUVUoIDB4RkZGRkY0NzAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBJT0EgKSBTZWxlY3QgQSBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUElPQV9NRERSIEVRVSggMHhGRkZGRjQ1NCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUElPQSApIE11bHRpIC0gZHJpdmVyIERpc2FibGUgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BJT0FfQ09EUiBFUVUoIDB4RkZGRkY0MzQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBJT0EgKSBDbGVhciBPdXRwdXQgRGF0YSBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUElPQV9NREVSIEVRVSggMHhGRkZGRjQ1MCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUElPQSApIE11bHRpIC0gZHJpdmVyIEVuYWJsZSBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUElPQV9QRFIgRVFVKCAweEZGRkZGNDA0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQSU9BICkgUElPIERpc2FibGUgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BJT0FfSUZTUiBFUVUoIDB4RkZGRkY0MjggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBJT0EgKSBJbnB1dCBGaWx0ZXIgU3RhdHVzIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QSU9BX09FUiBFUVUoIDB4RkZGRkY0MTAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBJT0EgKSBPdXRwdXQgRW5hYmxlIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QSU9BX1BTUiBFUVUoIDB4RkZGRkY0MDggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBJT0EgKSBQSU8gU3RhdHVzIFJlZ2lzdGVyDQotLyogLSA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBJT0IgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QSU9CX09XRFIgRVFVKCAweEZGRkZGNkE0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQSU9CICkgT3V0cHV0IFdyaXRlIERpc2FibGUgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BJT0JfTURFUiBFUVUoIDB4RkZGRkY2NTAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBJT0IgKSBNdWx0aSAtIGRyaXZlciBFbmFibGUgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BJT0JfUFBVU1IgRVFVKCAweEZGRkZGNjY4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQSU9CICkgUHVsbCAtIHVwIFN0YXR1cyBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUElPQl9JTVIgRVFVKCAweEZGRkZGNjQ4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQSU9CICkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BJT0JfQVNSIEVRVSggMHhGRkZGRjY3MCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUElPQiApIFNlbGVjdCBBIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QSU9CX1BQVURSIEVRVSggMHhGRkZGRjY2MCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUElPQiApIFB1bGwgLSB1cCBEaXNhYmxlIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QSU9CX1BTUiBFUVUoIDB4RkZGRkY2MDggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBJT0IgKSBQSU8gU3RhdHVzIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QSU9CX0lFUiBFUVUoIDB4RkZGRkY2NDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBJT0IgKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QSU9CX0NPRFIgRVFVKCAweEZGRkZGNjM0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQSU9CICkgQ2xlYXIgT3V0cHV0IERhdGEgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BJT0JfT1dFUiBFUVUoIDB4RkZGRkY2QTAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBJT0IgKSBPdXRwdXQgV3JpdGUgRW5hYmxlIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QSU9CX0FCU1IgRVFVKCAweEZGRkZGNjc4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQSU9CICkgQUIgU2VsZWN0IFN0YXR1cyBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUElPQl9JRkRSIEVRVSggMHhGRkZGRjYyNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUElPQiApIElucHV0IEZpbHRlciBEaXNhYmxlIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QSU9CX1BEU1IgRVFVKCAweEZGRkZGNjNDICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQSU9CICkgUGluIERhdGEgU3RhdHVzIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QSU9CX0lEUiBFUVUoIDB4RkZGRkY2NDQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBJT0IgKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUElPQl9PV1NSIEVRVSggMHhGRkZGRjZBOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUElPQiApIE91dHB1dCBXcml0ZSBTdGF0dXMgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BJT0JfUERSIEVRVSggMHhGRkZGRjYwNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUElPQiApIFBJTyBEaXNhYmxlIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QSU9CX09EUiBFUVUoIDB4RkZGRkY2MTQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBJT0IgKSBPdXRwdXQgRGlzYWJsZSBSZWdpc3RlcnINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BJT0JfSUZTUiBFUVUoIDB4RkZGRkY2MjggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBJT0IgKSBJbnB1dCBGaWx0ZXIgU3RhdHVzIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QSU9CX1BQVUVSIEVRVSggMHhGRkZGRjY2NCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUElPQiApIFB1bGwgLSB1cCBFbmFibGUgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BJT0JfU09EUiBFUVUoIDB4RkZGRkY2MzAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBJT0IgKSBTZXQgT3V0cHV0IERhdGEgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BJT0JfSVNSIEVRVSggMHhGRkZGRjY0QyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUElPQiApIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BJT0JfT0RTUiBFUVUoIDB4RkZGRkY2MzggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBJT0IgKSBPdXRwdXQgRGF0YSBTdGF0dXMgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BJT0JfT1NSIEVRVSggMHhGRkZGRjYxOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUElPQiApIE91dHB1dCBTdGF0dXMgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BJT0JfTURTUiBFUVUoIDB4RkZGRkY2NTggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBJT0IgKSBNdWx0aSAtIGRyaXZlciBTdGF0dXMgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BJT0JfSUZFUiBFUVUoIDB4RkZGRkY2MjAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBJT0IgKSBJbnB1dCBGaWx0ZXIgRW5hYmxlIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QSU9CX0JTUiBFUVUoIDB4RkZGRkY2NzQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBJT0IgKSBTZWxlY3QgQiBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUElPQl9NRERSIEVRVSggMHhGRkZGRjY1NCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUElPQiApIE11bHRpIC0gZHJpdmVyIERpc2FibGUgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BJT0JfT0VSIEVRVSggMHhGRkZGRjYxMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUElPQiApIE91dHB1dCBFbmFibGUgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BJT0JfUEVSIEVRVSggMHhGRkZGRjYwMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUElPQiApIFBJTyBFbmFibGUgUmVnaXN0ZXINCi0vKiAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0tHUiBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0NLR1JfTU9SIEVRVSggMHhGRkZGRkMyMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0tHUiApIE1haW4gT3NjaWxsYXRvciBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0tHUl9QTExSIEVRVSggMHhGRkZGRkMyQyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0tHUiApIFBMTCBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0tHUl9NQ0ZSIEVRVSggMHhGRkZGRkMyNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0tHUiApIE1haW4gQ2xvY2sgRnJlcXVlbmN5IFJlZ2lzdGVyDQotLyogLSA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBNQyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BNQ19JRFIgRVFVKCAweEZGRkZGQzY0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQTUMgKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUE1DX01PUiBFUVUoIDB4RkZGRkZDMjAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBNQyApIE1haW4gT3NjaWxsYXRvciBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUE1DX1BMTFIgRVFVKCAweEZGRkZGQzJDICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQTUMgKSBQTEwgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BNQ19QQ0VSIEVRVSggMHhGRkZGRkMxMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUE1DICkgUGVyaXBoZXJhbCBDbG9jayBFbmFibGUgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BNQ19QQ0tSIEVRVSggMHhGRkZGRkM0MCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUE1DICkgUHJvZ3JhbW1hYmxlIENsb2NrIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QTUNfTUNLUiBFUVUoIDB4RkZGRkZDMzAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBNQyApIE1hc3RlciBDbG9jayBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUE1DX1NDRFIgRVFVKCAweEZGRkZGQzA0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQTUMgKSBTeXN0ZW0gQ2xvY2sgRGlzYWJsZSBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUE1DX1BDRFIgRVFVKCAweEZGRkZGQzE0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQTUMgKSBQZXJpcGhlcmFsIENsb2NrIERpc2FibGUgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BNQ19TQ1NSIEVRVSggMHhGRkZGRkMwOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUE1DICkgU3lzdGVtIENsb2NrIFN0YXR1cyBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUE1DX1BDU1IgRVFVKCAweEZGRkZGQzE4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQTUMgKSBQZXJpcGhlcmFsIENsb2NrIFN0YXR1cyBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUE1DX01DRlIgRVFVKCAweEZGRkZGQzI0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQTUMgKSBNYWluIENsb2NrIEZyZXF1ZW5jeSBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUE1DX1NDRVIgRVFVKCAweEZGRkZGQzAwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQTUMgKSBTeXN0ZW0gQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QTUNfSU1SIEVRVSggMHhGRkZGRkM2QyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUE1DICkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BNQ19JRVIgRVFVKCAweEZGRkZGQzYwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQTUMgKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QTUNfU1IgRVFVKCAweEZGRkZGQzY4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQTUMgKSBTdGF0dXMgUmVnaXN0ZXINCi0vKiAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUlNUQyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1JTVENfUkNSIEVRVSggMHhGRkZGRkQwMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUlNUQyApIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1JTVENfUk1SIEVRVSggMHhGRkZGRkQwOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUlNUQyApIFJlc2V0IE1vZGUgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1JTVENfUlNSIEVRVSggMHhGRkZGRkQwNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUlNUQyApIFJlc2V0IFN0YXR1cyBSZWdpc3Rlcg0KLS8qIC0gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBSVFRDIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUlRUQ19SVFNSIEVRVSggMHhGRkZGRkQyQyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUlRUQyApIFJlYWwgLSB0aW1lIFN0YXR1cyBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUlRUQ19SVE1SIEVRVSggMHhGRkZGRkQyMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUlRUQyApIFJlYWwgLSB0aW1lIE1vZGUgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1JUVENfUlRWUiBFUVUoIDB4RkZGRkZEMjggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFJUVEMgKSBSZWFsIC0gdGltZSBWYWx1ZSBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUlRUQ19SVEFSIEVRVSggMHhGRkZGRkQyNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUlRUQyApIFJlYWwgLSB0aW1lIEFsYXJtIFJlZ2lzdGVyDQotLyogLSA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBJVEMgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QSVRDX1BJVlIgRVFVKCAweEZGRkZGRDM4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQSVRDICkgUGVyaW9kIEludGVydmFsIFZhbHVlIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QSVRDX1BJU1IgRVFVKCAweEZGRkZGRDM0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQSVRDICkgUGVyaW9kIEludGVydmFsIFN0YXR1cyBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUElUQ19QSUlSIEVRVSggMHhGRkZGRkQzQyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUElUQyApIFBlcmlvZCBJbnRlcnZhbCBJbWFnZSBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUElUQ19QSU1SIEVRVSggMHhGRkZGRkQzMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUElUQyApIFBlcmlvZCBJbnRlcnZhbCBNb2RlIFJlZ2lzdGVyDQotLyogLSA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFdEVEMgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19XRFRDX1dEQ1IgRVFVKCAweEZGRkZGRDQwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBXRFRDICkgV2F0Y2hkb2cgQ29udHJvbCBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfV0RUQ19XRFNSIEVRVSggMHhGRkZGRkQ0OCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggV0RUQyApIFdhdGNoZG9nIFN0YXR1cyBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfV0RUQ19XRE1SIEVRVSggMHhGRkZGRkQ0NCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggV0RUQyApIFdhdGNoZG9nIE1vZGUgUmVnaXN0ZXINCi0vKiAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVlJFRyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1ZSRUdfTVIgRVFVKCAweEZGRkZGRDYwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBWUkVHICkgVm9sdGFnZSBSZWd1bGF0b3IgTW9kZSBSZWdpc3Rlcg0KLS8qIC0gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBNQyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX01DX0FTUiBFUVUoIDB4RkZGRkZGMDQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIE1DICkgTUMgQWJvcnQgU3RhdHVzIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19NQ19SQ1IgRVFVKCAweEZGRkZGRjAwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBNQyApIE1DIFJlbWFwIENvbnRyb2wgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX01DX0ZDUiBFUVUoIDB4RkZGRkZGNjQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIE1DICkgTUMgRmxhc2ggQ29tbWFuZCBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfTUNfQUFTUiBFUVUoIDB4RkZGRkZGMDggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIE1DICkgTUMgQWJvcnQgQWRkcmVzcyBTdGF0dXMgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX01DX0ZTUiBFUVUoIDB4RkZGRkZGNjggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIE1DICkgTUMgRmxhc2ggU3RhdHVzIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19NQ19GTVIgRVFVKCAweEZGRkZGRjYwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBNQyApIE1DIEZsYXNoIE1vZGUgUmVnaXN0ZXINCi0vKiAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX1NQSTEgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19TUEkxX1BUQ1IgRVFVKCAweEZGRkU0MTIwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQRENfU1BJMSApIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19TUEkxX1JQUiBFUVUoIDB4RkZGRTQxMDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBEQ19TUEkxICkgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19TUEkxX1ROQ1IgRVFVKCAweEZGRkU0MTFDICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQRENfU1BJMSApIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfU1BJMV9UUFIgRVFVKCAweEZGRkU0MTA4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQRENfU1BJMSApIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1NQSTFfVE5QUiBFUVUoIDB4RkZGRTQxMTggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBEQ19TUEkxICkgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19TUEkxX1RDUiBFUVUoIDB4RkZGRTQxMEMgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBEQ19TUEkxICkgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfU1BJMV9SQ1IgRVFVKCAweEZGRkU0MTA0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQRENfU1BJMSApIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfU1BJMV9STlBSIEVRVSggMHhGRkZFNDExMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUERDX1NQSTEgKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfU1BJMV9STkNSIEVRVSggMHhGRkZFNDExNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUERDX1NQSTEgKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfU1BJMV9QVFNSIEVRVSggMHhGRkZFNDEyNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUERDX1NQSTEgKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQotLyogLSA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFNQSTEgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19TUEkxX0lNUiBFUVUoIDB4RkZGRTQwMUMgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFNQSTEgKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfU1BJMV9JRVIgRVFVKCAweEZGRkU0MDE0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBTUEkxICkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfU1BJMV9NUiBFUVUoIDB4RkZGRTQwMDQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFNQSTEgKSBNb2RlIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19TUEkxX1JEUiBFUVUoIDB4RkZGRTQwMDggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFNQSTEgKSBSZWNlaXZlIERhdGEgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1NQSTFfSURSIEVRVSggMHhGRkZFNDAxOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggU1BJMSApIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19TUEkxX1NSIEVRVSggMHhGRkZFNDAxMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggU1BJMSApIFN0YXR1cyBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfU1BJMV9URFIgRVFVKCAweEZGRkU0MDBDICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBTUEkxICkgVHJhbnNtaXQgRGF0YSBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfU1BJMV9DUiBFUVUoIDB4RkZGRTQwMDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFNQSTEgKSBDb250cm9sIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19TUEkxX0NTUiBFUVUoIDB4RkZGRTQwMzAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFNQSTEgKSBDaGlwIFNlbGVjdCBSZWdpc3Rlcg0KLS8qIC0gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfU1BJMCBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1NQSTBfUFRDUiBFUVUoIDB4RkZGRTAxMjAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBEQ19TUEkwICkgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1NQSTBfVFBSIEVRVSggMHhGRkZFMDEwOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUERDX1NQSTAgKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19TUEkwX1RDUiBFUVUoIDB4RkZGRTAxMEMgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBEQ19TUEkwICkgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfU1BJMF9SQ1IgRVFVKCAweEZGRkUwMTA0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQRENfU1BJMCApIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfU1BJMF9QVFNSIEVRVSggMHhGRkZFMDEyNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUERDX1NQSTAgKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19TUEkwX1JOUFIgRVFVKCAweEZGRkUwMTEwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQRENfU1BJMCApIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19TUEkwX1JQUiBFUVUoIDB4RkZGRTAxMDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBEQ19TUEkwICkgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19TUEkwX1ROQ1IgRVFVKCAweEZGRkUwMTFDICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQRENfU1BJMCApIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfU1BJMF9STkNSIEVRVSggMHhGRkZFMDExNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUERDX1NQSTAgKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfU1BJMF9UTlBSIEVRVSggMHhGRkZFMDExOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUERDX1NQSTAgKSBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCi0vKiAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgU1BJMCBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1NQSTBfSUVSIEVRVSggMHhGRkZFMDAxNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggU1BJMCApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1NQSTBfU1IgRVFVKCAweEZGRkUwMDEwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBTUEkwICkgU3RhdHVzIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19TUEkwX0lEUiBFUVUoIDB4RkZGRTAwMTggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFNQSTAgKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfU1BJMF9DUiBFUVUoIDB4RkZGRTAwMDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFNQSTAgKSBDb250cm9sIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19TUEkwX01SIEVRVSggMHhGRkZFMDAwNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggU1BJMCApIE1vZGUgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1NQSTBfSU1SIEVRVSggMHhGRkZFMDAxQyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggU1BJMCApIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19TUEkwX1REUiBFUVUoIDB4RkZGRTAwMEMgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFNQSTAgKSBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19TUEkwX1JEUiBFUVUoIDB4RkZGRTAwMDggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFNQSTAgKSBSZWNlaXZlIERhdGEgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1NQSTBfQ1NSIEVRVSggMHhGRkZFMDAzMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggU1BJMCApIENoaXAgU2VsZWN0IFJlZ2lzdGVyDQotLyogLSA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19VUzEgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VUzFfUk5DUiBFUVUoIDB4RkZGQzQxMTQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBEQ19VUzEgKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVMxX1BUQ1IgRVFVKCAweEZGRkM0MTIwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQRENfVVMxICkgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTMV9UQ1IgRVFVKCAweEZGRkM0MTBDICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQRENfVVMxICkgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVMxX1BUU1IgRVFVKCAweEZGRkM0MTI0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQRENfVVMxICkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVMxX1ROUFIgRVFVKCAweEZGRkM0MTE4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQRENfVVMxICkgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VUzFfUkNSIEVRVSggMHhGRkZDNDEwNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUERDX1VTMSApIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVMxX1JOUFIgRVFVKCAweEZGRkM0MTEwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQRENfVVMxICkgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTMV9SUFIgRVFVKCAweEZGRkM0MTAwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQRENfVVMxICkgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VUzFfVE5DUiBFUVUoIDB4RkZGQzQxMUMgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBEQ19VUzEgKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTMV9UUFIgRVFVKCAweEZGRkM0MTA4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQRENfVVMxICkgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KLS8qIC0gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBVUzEgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VUzFfSUYgRVFVKCAweEZGRkM0MDRDICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBVUzEgKSBJUkRBX0ZJTFRFUiBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVMxX05FUiBFUVUoIDB4RkZGQzQwNDQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFVTMSApIE5iIEVycm9ycyBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVMxX1JUT1IgRVFVKCAweEZGRkM0MDI0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBVUzEgKSBSZWNlaXZlciBUaW1lIC0gb3V0IFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VUzFfQ1NSIEVRVSggMHhGRkZDNDAxNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVVMxICkgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTMV9JRFIgRVFVKCAweEZGRkM0MDBDICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBVUzEgKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVMxX0lFUiBFUVUoIDB4RkZGQzQwMDggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFVTMSApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTMV9USFIgRVFVKCAweEZGRkM0MDFDICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBVUzEgKSBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VUzFfVFRHUiBFUVUoIDB4RkZGQzQwMjggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFVTMSApIFRyYW5zbWl0dGVyIFRpbWUgLSBndWFyZCBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVMxX1JIUiBFUVUoIDB4RkZGQzQwMTggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFVTMSApIFJlY2VpdmVyIEhvbGRpbmcgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTMV9CUkdSIEVRVSggMHhGRkZDNDAyMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVVMxICkgQmF1ZCBSYXRlIEdlbmVyYXRvciBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVMxX0lNUiBFUVUoIDB4RkZGQzQwMTAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFVTMSApIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VUzFfRklESSBFUVUoIDB4RkZGQzQwNDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFVTMSApIEZJX0RJX1JhdGlvIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VUzFfQ1IgRVFVKCAweEZGRkM0MDAwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBVUzEgKSBDb250cm9sIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VUzFfTVIgRVFVKCAweEZGRkM0MDA0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBVUzEgKSBNb2RlIFJlZ2lzdGVyDQotLyogLSA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19VUzAgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VUzBfVE5QUiBFUVUoIDB4RkZGQzAxMTggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBEQ19VUzAgKSBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTMF9STlBSIEVRVSggMHhGRkZDMDExMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUERDX1VTMCApIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VUzBfVENSIEVRVSggMHhGRkZDMDEwQyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUERDX1VTMCApIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTMF9QVENSIEVRVSggMHhGRkZDMDEyMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUERDX1VTMCApIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VUzBfUFRTUiBFUVUoIDB4RkZGQzAxMjQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBEQ19VUzAgKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VUzBfVE5DUiBFUVUoIDB4RkZGQzAxMUMgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBEQ19VUzAgKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTMF9UUFIgRVFVKCAweEZGRkMwMTA4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQRENfVVMwICkgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVMwX1JDUiBFUVUoIDB4RkZGQzAxMDQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBEQ19VUzAgKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTMF9SUFIgRVFVKCAweEZGRkMwMTAwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQRENfVVMwICkgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VUzBfUk5DUiBFUVUoIDB4RkZGQzAxMTQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBEQ19VUzAgKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KLS8qIC0gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBVUzAgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VUzBfQlJHUiBFUVUoIDB4RkZGQzAwMjAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFVTMCApIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTMF9ORVIgRVFVKCAweEZGRkMwMDQ0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBVUzAgKSBOYiBFcnJvcnMgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTMF9DUiBFUVUoIDB4RkZGQzAwMDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFVTMCApIENvbnRyb2wgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTMF9JTVIgRVFVKCAweEZGRkMwMDEwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBVUzAgKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVMwX0ZJREkgRVFVKCAweEZGRkMwMDQwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBVUzAgKSBGSV9ESV9SYXRpbyBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVMwX1RUR1IgRVFVKCAweEZGRkMwMDI4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBVUzAgKSBUcmFuc21pdHRlciBUaW1lIC0gZ3VhcmQgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTMF9NUiBFUVUoIDB4RkZGQzAwMDQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFVTMCApIE1vZGUgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTMF9SVE9SIEVRVSggMHhGRkZDMDAyNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVVMwICkgUmVjZWl2ZXIgVGltZSAtIG91dCBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVMwX0NTUiBFUVUoIDB4RkZGQzAwMTQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFVTMCApIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VUzBfUkhSIEVRVSggMHhGRkZDMDAxOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVVMwICkgUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVMwX0lEUiBFUVUoIDB4RkZGQzAwMEMgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFVTMCApIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VUzBfVEhSIEVRVSggMHhGRkZDMDAxQyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVVMwICkgVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVMwX0lGIEVRVSggMHhGRkZDMDA0QyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVVMwICkgSVJEQV9GSUxURVIgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTMF9JRVIgRVFVKCAweEZGRkMwMDA4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBVUzAgKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQotLyogLSA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19TU0MgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19TU0NfVE5DUiBFUVUoIDB4RkZGRDQxMUMgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBEQ19TU0MgKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1NTQ19SUFIgRVFVKCAweEZGRkQ0MTAwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQRENfU1NDICkgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19TU0NfUk5DUiBFUVUoIDB4RkZGRDQxMTQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBEQ19TU0MgKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfU1NDX1RQUiBFUVUoIDB4RkZGRDQxMDggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBEQ19TU0MgKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19TU0NfUFRDUiBFUVUoIDB4RkZGRDQxMjAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBEQ19TU0MgKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfU1NDX1RDUiBFUVUoIDB4RkZGRDQxMEMgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBEQ19TU0MgKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19TU0NfUkNSIEVRVSggMHhGRkZENDEwNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUERDX1NTQyApIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfU1NDX1JOUFIgRVFVKCAweEZGRkQ0MTEwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQRENfU1NDICkgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1NTQ19UTlBSIEVRVSggMHhGRkZENDExOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUERDX1NTQyApIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfU1NDX1BUU1IgRVFVKCAweEZGRkQ0MTI0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQRENfU1NDICkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KLS8qIC0gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBTU0MgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19TU0NfUkhSIEVRVSggMHhGRkZENDAyMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggU1NDICkgUmVjZWl2ZSBIb2xkaW5nIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19TU0NfUlNIUiBFUVUoIDB4RkZGRDQwMzAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFNTQyApIFJlY2VpdmUgU3luYyBIb2xkaW5nIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19TU0NfVEZNUiBFUVUoIDB4RkZGRDQwMUMgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFNTQyApIFRyYW5zbWl0IEZyYW1lIE1vZGUgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1NTQ19JRFIgRVFVKCAweEZGRkQ0MDQ4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBTU0MgKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfU1NDX1RIUiBFUVUoIDB4RkZGRDQwMjQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFNTQyApIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1NTQ19SQ01SIEVRVSggMHhGRkZENDAxMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggU1NDICkgUmVjZWl2ZSBDbG9jayBNb2RlUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1NTQ19JRVIgRVFVKCAweEZGRkQ0MDQ0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBTU0MgKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19TU0NfVFNIUiBFUVUoIDB4RkZGRDQwMzQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFNTQyApIFRyYW5zbWl0IFN5bmMgSG9sZGluZyBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfU1NDX1NSIEVRVSggMHhGRkZENDA0MCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggU1NDICkgU3RhdHVzIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19TU0NfQ01SIEVRVSggMHhGRkZENDAwNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggU1NDICkgQ2xvY2sgTW9kZSBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfU1NDX1RDTVIgRVFVKCAweEZGRkQ0MDE4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBTU0MgKSBUcmFuc21pdCBDbG9jayBNb2RlIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19TU0NfQ1IgRVFVKCAweEZGRkQ0MDAwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBTU0MgKSBDb250cm9sIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19TU0NfSU1SIEVRVSggMHhGRkZENDA0QyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggU1NDICkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1NTQ19SRk1SIEVRVSggMHhGRkZENDAxNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggU1NDICkgUmVjZWl2ZSBGcmFtZSBNb2RlIFJlZ2lzdGVyDQotLyogLSA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRXSSBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RXSV9JRVIgRVFVKCAweEZGRkI4MDI0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUV0kgKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UV0lfQ1IgRVFVKCAweEZGRkI4MDAwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUV0kgKSBDb250cm9sIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UV0lfU1IgRVFVKCAweEZGRkI4MDIwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUV0kgKSBTdGF0dXMgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RXSV9JTVIgRVFVKCAweEZGRkI4MDJDICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUV0kgKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVFdJX1RIUiBFUVUoIDB4RkZGQjgwMzQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRXSSApIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RXSV9JRFIgRVFVKCAweEZGRkI4MDI4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUV0kgKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVFdJX0lBRFIgRVFVKCAweEZGRkI4MDBDICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUV0kgKSBJbnRlcm5hbCBBZGRyZXNzIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UV0lfTU1SIEVRVSggMHhGRkZCODAwNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVFdJICkgTWFzdGVyIE1vZGUgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RXSV9DV0dSIEVRVSggMHhGRkZCODAxMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVFdJICkgQ2xvY2sgV2F2ZWZvcm0gR2VuZXJhdG9yIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UV0lfUkhSIEVRVSggMHhGRkZCODAzMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVFdJICkgUmVjZWl2ZSBIb2xkaW5nIFJlZ2lzdGVyDQotLyogLSA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBXTUNfQ0gzIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUFdNQ19DSDNfQ1VQRFIgRVFVKCAweEZGRkNDMjcwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQV01DX0NIMyApIENoYW5uZWwgVXBkYXRlIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QV01DX0NIM19SZXNlcnZlZCBFUVUoIDB4RkZGQ0MyNzQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBXTUNfQ0gzICkgUmVzZXJ2ZWQNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BXTUNfQ0gzX0NQUkRSIEVRVSggMHhGRkZDQzI2OCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUFdNQ19DSDMgKSBDaGFubmVsIFBlcmlvZCBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUFdNQ19DSDNfQ0RUWVIgRVFVKCAweEZGRkNDMjY0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQV01DX0NIMyApIENoYW5uZWwgRHV0eSBDeWNsZSBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUFdNQ19DSDNfQ0NOVFIgRVFVKCAweEZGRkNDMjZDICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQV01DX0NIMyApIENoYW5uZWwgQ291bnRlciBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUFdNQ19DSDNfQ01SIEVRVSggMHhGRkZDQzI2MCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUFdNQ19DSDMgKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXINCi0vKiAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUFdNQ19DSDIgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QV01DX0NIMl9SZXNlcnZlZCBFUVUoIDB4RkZGQ0MyNTQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBXTUNfQ0gyICkgUmVzZXJ2ZWQNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BXTUNfQ0gyX0NNUiBFUVUoIDB4RkZGQ0MyNDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBXTUNfQ0gyICkgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QV01DX0NIMl9DQ05UUiBFUVUoIDB4RkZGQ0MyNEMgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBXTUNfQ0gyICkgQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QV01DX0NIMl9DUFJEUiBFUVUoIDB4RkZGQ0MyNDggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBXTUNfQ0gyICkgQ2hhbm5lbCBQZXJpb2QgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BXTUNfQ0gyX0NVUERSIEVRVSggMHhGRkZDQzI1MCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUFdNQ19DSDIgKSBDaGFubmVsIFVwZGF0ZSBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUFdNQ19DSDJfQ0RUWVIgRVFVKCAweEZGRkNDMjQ0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQV01DX0NIMiApIENoYW5uZWwgRHV0eSBDeWNsZSBSZWdpc3Rlcg0KLS8qIC0gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQV01DX0NIMSBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BXTUNfQ0gxX1Jlc2VydmVkIEVRVSggMHhGRkZDQzIzNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUFdNQ19DSDEgKSBSZXNlcnZlZA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUFdNQ19DSDFfQ1VQRFIgRVFVKCAweEZGRkNDMjMwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQV01DX0NIMSApIENoYW5uZWwgVXBkYXRlIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QV01DX0NIMV9DUFJEUiBFUVUoIDB4RkZGQ0MyMjggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBXTUNfQ0gxICkgQ2hhbm5lbCBQZXJpb2QgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BXTUNfQ0gxX0NDTlRSIEVRVSggMHhGRkZDQzIyQyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUFdNQ19DSDEgKSBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BXTUNfQ0gxX0NEVFlSIEVRVSggMHhGRkZDQzIyNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUFdNQ19DSDEgKSBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BXTUNfQ0gxX0NNUiBFUVUoIDB4RkZGQ0MyMjAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBXTUNfQ0gxICkgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyDQotLyogLSA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBXTUNfQ0gwIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUFdNQ19DSDBfUmVzZXJ2ZWQgRVFVKCAweEZGRkNDMjE0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQV01DX0NIMCApIFJlc2VydmVkDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QV01DX0NIMF9DUFJEUiBFUVUoIDB4RkZGQ0MyMDggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBXTUNfQ0gwICkgQ2hhbm5lbCBQZXJpb2QgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BXTUNfQ0gwX0NEVFlSIEVRVSggMHhGRkZDQzIwNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUFdNQ19DSDAgKSBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BXTUNfQ0gwX0NNUiBFUVUoIDB4RkZGQ0MyMDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBXTUNfQ0gwICkgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QV01DX0NIMF9DVVBEUiBFUVUoIDB4RkZGQ0MyMTAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBXTUNfQ0gwICkgQ2hhbm5lbCBVcGRhdGUgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BXTUNfQ0gwX0NDTlRSIEVRVSggMHhGRkZDQzIwQyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUFdNQ19DSDAgKSBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXINCi0vKiAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUFdNQyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BXTUNfSURSIEVRVSggMHhGRkZDQzAxNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUFdNQyApIFBXTUMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BXTUNfRElTIEVRVSggMHhGRkZDQzAwOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUFdNQyApIFBXTUMgRGlzYWJsZSBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUFdNQ19JRVIgRVFVKCAweEZGRkNDMDEwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQV01DICkgUFdNQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QV01DX1ZSIEVRVSggMHhGRkZDQzBGQyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUFdNQyApIFBXTUMgVmVyc2lvbiBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUFdNQ19JU1IgRVFVKCAweEZGRkNDMDFDICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQV01DICkgUFdNQyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QV01DX1NSIEVRVSggMHhGRkZDQzAwQyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUFdNQyApIFBXTUMgU3RhdHVzIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QV01DX0lNUiBFUVUoIDB4RkZGQ0MwMTggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBXTUMgKSBQV01DIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QV01DX01SIEVRVSggMHhGRkZDQzAwMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUFdNQyApIFBXTUMgTW9kZSBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUFdNQ19FTkEgRVFVKCAweEZGRkNDMDA0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQV01DICkgUFdNQyBFbmFibGUgUmVnaXN0ZXINCi0vKiAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVURQIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVURQX0lNUiBFUVUoIDB4RkZGQjAwMTggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFVEUCApIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VRFBfRkFERFIgRVFVKCAweEZGRkIwMDA4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBVRFAgKSBGdW5jdGlvbiBBZGRyZXNzIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VRFBfTlVNIEVRVSggMHhGRkZCMDAwMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVURQICkgRnJhbWUgTnVtYmVyIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VRFBfRkRSIEVRVSggMHhGRkZCMDA1MCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVURQICkgRW5kcG9pbnQgRklGTyBEYXRhIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VRFBfSVNSIEVRVSggMHhGRkZCMDAxQyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVURQICkgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVURQX0NTUiBFUVUoIDB4RkZGQjAwMzAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFVEUCApIEVuZHBvaW50IENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVURQX0lEUiBFUVUoIDB4RkZGQjAwMTQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFVEUCApIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VRFBfSUNSIEVRVSggMHhGRkZCMDAyMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVURQICkgSW50ZXJydXB0IENsZWFyIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VRFBfUlNURVAgRVFVKCAweEZGRkIwMDI4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBVRFAgKSBSZXNldCBFbmRwb2ludCBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVURQX1RYVkMgRVFVKCAweEZGRkIwMDc0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBVRFAgKSBUcmFuc2NlaXZlciBDb250cm9sIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VRFBfR0xCU1RBVEUgRVFVKCAweEZGRkIwMDA0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBVRFAgKSBHbG9iYWwgU3RhdGUgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VEUF9JRVIgRVFVKCAweEZGRkIwMDEwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBVRFAgKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQotLyogLSA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRDMCBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDMF9TUiBFUVUoIDB4RkZGQTAwMjAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDMCApIFN0YXR1cyBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVEMwX1JDIEVRVSggMHhGRkZBMDAxQyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMwICkgUmVnaXN0ZXIgQw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVEMwX1JCIEVRVSggMHhGRkZBMDAxOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMwICkgUmVnaXN0ZXIgQg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVEMwX0NDUiBFUVUoIDB4RkZGQTAwMDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDMCApIENoYW5uZWwgQ29udHJvbCBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVEMwX0NNUiBFUVUoIDB4RkZGQTAwMDQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDMCApIENoYW5uZWwgTW9kZSBSZWdpc3RlciggQ2FwdHVyZSBNb2RlIC8gV2F2ZWZvcm0gTW9kZSApDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UQzBfSUVSIEVRVSggMHhGRkZBMDAyNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMwICkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVEMwX1JBIEVRVSggMHhGRkZBMDAxNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMwICkgUmVnaXN0ZXIgQQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVEMwX0lEUiBFUVUoIDB4RkZGQTAwMjggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDMCApIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UQzBfQ1YgRVFVKCAweEZGRkEwMDEwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUQzAgKSBDb3VudGVyIFZhbHVlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UQzBfSU1SIEVRVSggMHhGRkZBMDAyQyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMwICkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCi0vKiAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVEMxIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVEMxX1JCIEVRVSggMHhGRkZBMDA1OCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMxICkgUmVnaXN0ZXIgQg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVEMxX0NDUiBFUVUoIDB4RkZGQTAwNDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDMSApIENoYW5uZWwgQ29udHJvbCBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVEMxX0lFUiBFUVUoIDB4RkZGQTAwNjQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDMSApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDMV9JRFIgRVFVKCAweEZGRkEwMDY4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUQzEgKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVEMxX1NSIEVRVSggMHhGRkZBMDA2MCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMxICkgU3RhdHVzIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UQzFfQ01SIEVRVSggMHhGRkZBMDA0NCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMxICkgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyKCBDYXB0dXJlIE1vZGUgLyBXYXZlZm9ybSBNb2RlICkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDMV9SQSBFUVUoIDB4RkZGQTAwNTQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDMSApIFJlZ2lzdGVyIEENCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDMV9SQyBFUVUoIDB4RkZGQTAwNUMgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDMSApIFJlZ2lzdGVyIEMNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDMV9JTVIgRVFVKCAweEZGRkEwMDZDICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUQzEgKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVEMxX0NWIEVRVSggMHhGRkZBMDA1MCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMxICkgQ291bnRlciBWYWx1ZQ0KLS8qIC0gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBUQzIgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UQzJfQ01SIEVRVSggMHhGRkZBMDA4NCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMyICkgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyKCBDYXB0dXJlIE1vZGUgLyBXYXZlZm9ybSBNb2RlICkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDMl9DQ1IgRVFVKCAweEZGRkEwMDgwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUQzIgKSBDaGFubmVsIENvbnRyb2wgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDMl9DViBFUVUoIDB4RkZGQTAwOTAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDMiApIENvdW50ZXIgVmFsdWUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDMl9SQSBFUVUoIDB4RkZGQTAwOTQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDMiApIFJlZ2lzdGVyIEENCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDMl9SQiBFUVUoIDB4RkZGQTAwOTggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDMiApIFJlZ2lzdGVyIEINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDMl9JRFIgRVFVKCAweEZGRkEwMEE4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUQzIgKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVEMyX0lNUiBFUVUoIDB4RkZGQTAwQUMgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDMiApIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UQzJfUkMgRVFVKCAweEZGRkEwMDlDICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUQzIgKSBSZWdpc3RlciBDDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UQzJfSUVSIEVRVSggMHhGRkZBMDBBNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMyICkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVEMyX1NSIEVRVSggMHhGRkZBMDBBMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMyICkgU3RhdHVzIFJlZ2lzdGVyDQotLyogLSA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRDQiBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RDQl9CTVIgRVFVKCAweEZGRkEwMEM0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUQ0IgKSBUQyBCbG9jayBNb2RlIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UQ0JfQkNSIEVRVSggMHhGRkZBMDBDMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVENCICkgVEMgQmxvY2sgQ29udHJvbCBSZWdpc3Rlcg0KLS8qIC0gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU5fTUIwIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0FOX01CMF9NREwgRVFVKCAweEZGRkQwMjE0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU5fTUIwICkgTWFpbEJveCBEYXRhIExvdyBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0FOX01CMF9NQU0gRVFVKCAweEZGRkQwMjA0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU5fTUIwICkgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0NBTl9NQjBfTUNSIEVRVSggMHhGRkZEMDIxQyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOX01CMCApIE1haWxCb3ggQ29udHJvbCBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0FOX01CMF9NSUQgRVFVKCAweEZGRkQwMjA4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU5fTUIwICkgTWFpbEJveCBJRCBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0FOX01CMF9NU1IgRVFVKCAweEZGRkQwMjEwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU5fTUIwICkgTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0NBTl9NQjBfTUZJRCBFUVUoIDB4RkZGRDAyMEMgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIENBTl9NQjAgKSBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0FOX01CMF9NREggRVFVKCAweEZGRkQwMjE4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU5fTUIwICkgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0NBTl9NQjBfTU1SIEVRVSggMHhGRkZEMDIwMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOX01CMCApIE1haWxCb3ggTW9kZSBSZWdpc3Rlcg0KLS8qIC0gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU5fTUIxIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0FOX01CMV9NREwgRVFVKCAweEZGRkQwMjM0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU5fTUIxICkgTWFpbEJveCBEYXRhIExvdyBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0FOX01CMV9NSUQgRVFVKCAweEZGRkQwMjI4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU5fTUIxICkgTWFpbEJveCBJRCBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0FOX01CMV9NTVIgRVFVKCAweEZGRkQwMjIwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU5fTUIxICkgTWFpbEJveCBNb2RlIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19DQU5fTUIxX01TUiBFUVUoIDB4RkZGRDAyMzAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIENBTl9NQjEgKSBNYWlsQm94IFN0YXR1cyBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0FOX01CMV9NQU0gRVFVKCAweEZGRkQwMjI0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU5fTUIxICkgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0NBTl9NQjFfTURIIEVRVSggMHhGRkZEMDIzOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOX01CMSApIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19DQU5fTUIxX01DUiBFUVUoIDB4RkZGRDAyM0MgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIENBTl9NQjEgKSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0NBTl9NQjFfTUZJRCBFUVUoIDB4RkZGRDAyMkMgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIENBTl9NQjEgKSBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3Rlcg0KLS8qIC0gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU5fTUIyIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0FOX01CMl9NQ1IgRVFVKCAweEZGRkQwMjVDICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU5fTUIyICkgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19DQU5fTUIyX01ESCBFUVUoIDB4RkZGRDAyNTggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIENBTl9NQjIgKSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0FOX01CMl9NSUQgRVFVKCAweEZGRkQwMjQ4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU5fTUIyICkgTWFpbEJveCBJRCBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0FOX01CMl9NREwgRVFVKCAweEZGRkQwMjU0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU5fTUIyICkgTWFpbEJveCBEYXRhIExvdyBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0FOX01CMl9NTVIgRVFVKCAweEZGRkQwMjQwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU5fTUIyICkgTWFpbEJveCBNb2RlIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19DQU5fTUIyX01BTSBFUVUoIDB4RkZGRDAyNDQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIENBTl9NQjIgKSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0FOX01CMl9NRklEIEVRVSggMHhGRkZEMDI0QyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOX01CMiApIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19DQU5fTUIyX01TUiBFUVUoIDB4RkZGRDAyNTAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIENBTl9NQjIgKSBNYWlsQm94IFN0YXR1cyBSZWdpc3Rlcg0KLS8qIC0gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU5fTUIzIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0FOX01CM19NRklEIEVRVSggMHhGRkZEMDI2QyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOX01CMyApIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19DQU5fTUIzX01BTSBFUVUoIDB4RkZGRDAyNjQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIENBTl9NQjMgKSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0FOX01CM19NSUQgRVFVKCAweEZGRkQwMjY4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU5fTUIzICkgTWFpbEJveCBJRCBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0FOX01CM19NQ1IgRVFVKCAweEZGRkQwMjdDICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU5fTUIzICkgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19DQU5fTUIzX01NUiBFUVUoIDB4RkZGRDAyNjAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIENBTl9NQjMgKSBNYWlsQm94IE1vZGUgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0NBTl9NQjNfTVNSIEVRVSggMHhGRkZEMDI3MCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOX01CMyApIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19DQU5fTUIzX01ETCBFUVUoIDB4RkZGRDAyNzQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIENBTl9NQjMgKSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19DQU5fTUIzX01ESCBFUVUoIDB4RkZGRDAyNzggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIENBTl9NQjMgKSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3Rlcg0KLS8qIC0gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU5fTUI0IHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0FOX01CNF9NSUQgRVFVKCAweEZGRkQwMjg4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU5fTUI0ICkgTWFpbEJveCBJRCBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0FOX01CNF9NTVIgRVFVKCAweEZGRkQwMjgwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU5fTUI0ICkgTWFpbEJveCBNb2RlIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19DQU5fTUI0X01ESCBFUVUoIDB4RkZGRDAyOTggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIENBTl9NQjQgKSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0FOX01CNF9NRklEIEVRVSggMHhGRkZEMDI4QyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOX01CNCApIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19DQU5fTUI0X01TUiBFUVUoIDB4RkZGRDAyOTAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIENBTl9NQjQgKSBNYWlsQm94IFN0YXR1cyBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0FOX01CNF9NQ1IgRVFVKCAweEZGRkQwMjlDICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU5fTUI0ICkgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19DQU5fTUI0X01ETCBFUVUoIDB4RkZGRDAyOTQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIENBTl9NQjQgKSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19DQU5fTUI0X01BTSBFUVUoIDB4RkZGRDAyODQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIENBTl9NQjQgKSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3Rlcg0KLS8qIC0gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU5fTUI1IHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0FOX01CNV9NU1IgRVFVKCAweEZGRkQwMkIwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU5fTUI1ICkgTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0NBTl9NQjVfTUNSIEVRVSggMHhGRkZEMDJCQyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOX01CNSApIE1haWxCb3ggQ29udHJvbCBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0FOX01CNV9NRklEIEVRVSggMHhGRkZEMDJBQyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOX01CNSApIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19DQU5fTUI1X01ESCBFUVUoIDB4RkZGRDAyQjggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIENBTl9NQjUgKSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0FOX01CNV9NSUQgRVFVKCAweEZGRkQwMkE4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU5fTUI1ICkgTWFpbEJveCBJRCBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0FOX01CNV9NTVIgRVFVKCAweEZGRkQwMkEwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU5fTUI1ICkgTWFpbEJveCBNb2RlIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19DQU5fTUI1X01ETCBFUVUoIDB4RkZGRDAyQjQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIENBTl9NQjUgKSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19DQU5fTUI1X01BTSBFUVUoIDB4RkZGRDAyQTQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIENBTl9NQjUgKSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3Rlcg0KLS8qIC0gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU5fTUI2IHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0FOX01CNl9NRklEIEVRVSggMHhGRkZEMDJDQyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOX01CNiApIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19DQU5fTUI2X01JRCBFUVUoIDB4RkZGRDAyQzggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIENBTl9NQjYgKSBNYWlsQm94IElEIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19DQU5fTUI2X01BTSBFUVUoIDB4RkZGRDAyQzQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIENBTl9NQjYgKSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0FOX01CNl9NU1IgRVFVKCAweEZGRkQwMkQwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU5fTUI2ICkgTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0NBTl9NQjZfTURMIEVRVSggMHhGRkZEMDJENCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOX01CNiApIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0NBTl9NQjZfTUNSIEVRVSggMHhGRkZEMDJEQyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOX01CNiApIE1haWxCb3ggQ29udHJvbCBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0FOX01CNl9NREggRVFVKCAweEZGRkQwMkQ4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU5fTUI2ICkgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0NBTl9NQjZfTU1SIEVRVSggMHhGRkZEMDJDMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOX01CNiApIE1haWxCb3ggTW9kZSBSZWdpc3Rlcg0KLS8qIC0gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU5fTUI3IHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0FOX01CN19NQ1IgRVFVKCAweEZGRkQwMkZDICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU5fTUI3ICkgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19DQU5fTUI3X01ESCBFUVUoIDB4RkZGRDAyRjggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIENBTl9NQjcgKSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0FOX01CN19NRklEIEVRVSggMHhGRkZEMDJFQyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOX01CNyApIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19DQU5fTUI3X01ETCBFUVUoIDB4RkZGRDAyRjQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIENBTl9NQjcgKSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19DQU5fTUI3X01JRCBFUVUoIDB4RkZGRDAyRTggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIENBTl9NQjcgKSBNYWlsQm94IElEIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19DQU5fTUI3X01NUiBFUVUoIDB4RkZGRDAyRTAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIENBTl9NQjcgKSBNYWlsQm94IE1vZGUgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0NBTl9NQjdfTUFNIEVRVSggMHhGRkZEMDJFNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOX01CNyApIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19DQU5fTUI3X01TUiBFUVUoIDB4RkZGRDAyRjAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIENBTl9NQjcgKSBNYWlsQm94IFN0YXR1cyBSZWdpc3Rlcg0KLS8qIC0gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU4gcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19DQU5fVENSIEVRVSggMHhGRkZEMDAyNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOICkgVHJhbnNmZXIgQ29tbWFuZCBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0FOX0lNUiBFUVUoIDB4RkZGRDAwMEMgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIENBTiApIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19DQU5fSUVSIEVRVSggMHhGRkZEMDAwNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOICkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0FOX0VDUiBFUVUoIDB4RkZGRDAwMjAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIENBTiApIEVycm9yIENvdW50ZXIgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0NBTl9USU1FU1RQIEVRVSggMHhGRkZEMDAxQyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOICkgVGltZSBTdGFtcCBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0FOX01SIEVRVSggMHhGRkZEMDAwMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOICkgTW9kZSBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0FOX0lEUiBFUVUoIDB4RkZGRDAwMDggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIENBTiApIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19DQU5fQUNSIEVRVSggMHhGRkZEMDAyOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOICkgQWJvcnQgQ29tbWFuZCBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQ0FOX1RJTSBFUVUoIDB4RkZGRDAwMTggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIENBTiApIFRpbWVyIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19DQU5fU1IgRVFVKCAweEZGRkQwMDEwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU4gKSBTdGF0dXMgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0NBTl9CUiBFUVUoIDB4RkZGRDAwMTQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIENBTiApIEJhdWRyYXRlIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19DQU5fVlIgRVFVKCAweEZGRkQwMEZDICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU4gKSBWZXJzaW9uIFJlZ2lzdGVyDQotLyogLSA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIEVNQUMgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19FTUFDX0lTUiBFUVUoIDB4RkZGREMwMjQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEVNQUMgKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19FTUFDX1NBNEggRVFVKCAweEZGRkRDMEI0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBFTUFDICkgU3BlY2lmaWMgQWRkcmVzcyA0IFRvcCwgTGFzdCAyIGJ5dGVzDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19FTUFDX1NBMUwgRVFVKCAweEZGRkRDMDk4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBFTUFDICkgU3BlY2lmaWMgQWRkcmVzcyAxIEJvdHRvbSwgRmlyc3QgNCBieXRlcw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfRU1BQ19FTEUgRVFVKCAweEZGRkRDMDc4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBFTUFDICkgRXhjZXNzaXZlIExlbmd0aCBFcnJvcnMgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0VNQUNfTENPTCBFUVUoIDB4RkZGREMwNUMgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEVNQUMgKSBMYXRlIENvbGxpc2lvbiBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfRU1BQ19STEUgRVFVKCAweEZGRkRDMDg4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBFTUFDICkgUmVjZWl2ZSBMZW5ndGggRmllbGQgTWlzbWF0Y2ggUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0VNQUNfV09MIEVRVSggMHhGRkZEQzBDNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggRU1BQyApIFdha2UgT24gTEFOIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19FTUFDX0RURiBFUVUoIDB4RkZGREMwNTggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEVNQUMgKSBEZWZlcnJlZCBUcmFuc21pc3Npb24gRnJhbWUgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0VNQUNfVFVORCBFUVUoIDB4RkZGREMwNjQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEVNQUMgKSBUcmFuc21pdCBVbmRlcnJ1biBFcnJvciBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfRU1BQ19OQ1IgRVFVKCAweEZGRkRDMDAwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBFTUFDICkgTmV0d29yayBDb250cm9sIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19FTUFDX1NBNEwgRVFVKCAweEZGRkRDMEIwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBFTUFDICkgU3BlY2lmaWMgQWRkcmVzcyA0IEJvdHRvbSwgRmlyc3QgNCBieXRlcw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfRU1BQ19SU1IgRVFVKCAweEZGRkRDMDIwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBFTUFDICkgUmVjZWl2ZSBTdGF0dXMgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0VNQUNfU0EzTCBFUVUoIDB4RkZGREMwQTggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEVNQUMgKSBTcGVjaWZpYyBBZGRyZXNzIDMgQm90dG9tLCBGaXJzdCA0IGJ5dGVzDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19FTUFDX1RTUiBFUVUoIDB4RkZGREMwMTQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEVNQUMgKSBUcmFuc21pdCBTdGF0dXMgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0VNQUNfSURSIEVRVSggMHhGRkZEQzAyQyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggRU1BQyApIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19FTUFDX1JTRSBFUVUoIDB4RkZGREMwNzQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEVNQUMgKSBSZWNlaXZlIFN5bWJvbCBFcnJvcnMgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0VNQUNfRUNPTCBFUVUoIDB4RkZGREMwNjAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEVNQUMgKSBFeGNlc3NpdmUgQ29sbGlzaW9uIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19FTUFDX1RJRCBFUVUoIDB4RkZGREMwQjggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEVNQUMgKSBUeXBlIElEIENoZWNraW5nIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19FTUFDX0hSQiBFUVUoIDB4RkZGREMwOTAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEVNQUMgKSBIYXNoIEFkZHJlc3MgQm90dG9tWyAzMSA6IDAgXQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfRU1BQ19UQlFQIEVRVSggMHhGRkZEQzAxQyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggRU1BQyApIFRyYW5zbWl0IEJ1ZmZlciBRdWV1ZSBQb2ludGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19FTUFDX1VTUklPIEVRVSggMHhGRkZEQzBDMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggRU1BQyApIFVTRVIgSW5wdXQgLyBPdXRwdXQgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0VNQUNfUFRSIEVRVSggMHhGRkZEQzAzOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggRU1BQyApIFBhdXNlIFRpbWUgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0VNQUNfU0EySCBFUVUoIDB4RkZGREMwQTQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEVNQUMgKSBTcGVjaWZpYyBBZGRyZXNzIDIgVG9wLCBMYXN0IDIgYnl0ZXMNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0VNQUNfUk9WIEVRVSggMHhGRkZEQzA3MCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggRU1BQyApIFJlY2VpdmUgT3ZlcnJ1biBFcnJvcnMgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0VNQUNfQUxFIEVRVSggMHhGRkZEQzA1NCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggRU1BQyApIEFsaWdubWVudCBFcnJvciBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfRU1BQ19SSkEgRVFVKCAweEZGRkRDMDdDICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBFTUFDICkgUmVjZWl2ZSBKYWJiZXJzIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19FTUFDX1JCUVAgRVFVKCAweEZGRkRDMDE4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBFTUFDICkgUmVjZWl2ZSBCdWZmZXIgUXVldWUgUG9pbnRlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfRU1BQ19UUEYgRVFVKCAweEZGRkRDMDhDICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBFTUFDICkgVHJhbnNtaXR0ZWQgUGF1c2UgRnJhbWVzIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19FTUFDX05DRkdSIEVRVSggMHhGRkZEQzAwNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggRU1BQyApIE5ldHdvcmsgQ29uZmlndXJhdGlvbiBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfRU1BQ19IUlQgRVFVKCAweEZGRkRDMDk0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBFTUFDICkgSGFzaCBBZGRyZXNzIFRvcFsgNjMgOiAzMiBdDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19FTUFDX1VTRiBFUVUoIDB4RkZGREMwODAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEVNQUMgKSBVbmRlcnNpemUgRnJhbWVzIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19FTUFDX0ZDU0UgRVFVKCAweEZGRkRDMDUwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBFTUFDICkgRnJhbWUgQ2hlY2sgU2VxdWVuY2UgRXJyb3IgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0VNQUNfVFBRIEVRVSggMHhGRkZEQzBCQyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggRU1BQyApIFRyYW5zbWl0IFBhdXNlIFF1YW50dW0gUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0VNQUNfTUFOIEVRVSggMHhGRkZEQzAzNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggRU1BQyApIFBIWSBNYWludGVuYW5jZSBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfRU1BQ19GVE8gRVFVKCAweEZGRkRDMDQwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBFTUFDICkgRnJhbWVzIFRyYW5zbWl0dGVkIE9LIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19FTUFDX1JFViBFUVUoIDB4RkZGREMwRkMgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEVNQUMgKSBSZXZpc2lvbiBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfRU1BQ19JTVIgRVFVKCAweEZGRkRDMDMwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBFTUFDICkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0VNQUNfU0NGIEVRVSggMHhGRkZEQzA0NCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggRU1BQyApIFNpbmdsZSBDb2xsaXNpb24gRnJhbWUgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0VNQUNfUEZSIEVRVSggMHhGRkZEQzAzQyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggRU1BQyApIFBhdXNlIEZyYW1lcyByZWNlaXZlZCBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfRU1BQ19NQ0YgRVFVKCAweEZGRkRDMDQ4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBFTUFDICkgTXVsdGlwbGUgQ29sbGlzaW9uIEZyYW1lIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19FTUFDX05TUiBFUVUoIDB4RkZGREMwMDggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEVNQUMgKSBOZXR3b3JrIFN0YXR1cyBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfRU1BQ19TQTJMIEVRVSggMHhGRkZEQzBBMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggRU1BQyApIFNwZWNpZmljIEFkZHJlc3MgMiBCb3R0b20sIEZpcnN0IDQgYnl0ZXMNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0VNQUNfRlJPIEVRVSggMHhGRkZEQzA0QyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggRU1BQyApIEZyYW1lcyBSZWNlaXZlZCBPSyBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfRU1BQ19JRVIgRVFVKCAweEZGRkRDMDI4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBFTUFDICkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfRU1BQ19TQTFIIEVRVSggMHhGRkZEQzA5QyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggRU1BQyApIFNwZWNpZmljIEFkZHJlc3MgMSBUb3AsIExhc3QgMiBieXRlcw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfRU1BQ19DU0UgRVFVKCAweEZGRkRDMDY4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBFTUFDICkgQ2FycmllciBTZW5zZSBFcnJvciBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfRU1BQ19TQTNIIEVRVSggMHhGRkZEQzBBQyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggRU1BQyApIFNwZWNpZmljIEFkZHJlc3MgMyBUb3AsIExhc3QgMiBieXRlcw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfRU1BQ19SUkUgRVFVKCAweEZGRkRDMDZDICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBFTUFDICkgUmVjZWl2ZSBSZXNzb3VyY2UgRXJyb3IgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0VNQUNfU1RFIEVRVSggMHhGRkZEQzA4NCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggRU1BQyApIFNRRSBUZXN0IEVycm9yIFJlZ2lzdGVyDQotLyogLSA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19BREMgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19BRENfUFRTUiBFUVUoIDB4RkZGRDgxMjQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBEQ19BREMgKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19BRENfUFRDUiBFUVUoIDB4RkZGRDgxMjAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBEQ19BREMgKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQURDX1ROUFIgRVFVKCAweEZGRkQ4MTE4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQRENfQURDICkgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19BRENfVE5DUiBFUVUoIDB4RkZGRDgxMUMgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBEQ19BREMgKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FEQ19STlBSIEVRVSggMHhGRkZEODExMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUERDX0FEQyApIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19BRENfUk5DUiBFUVUoIDB4RkZGRDgxMTQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBEQ19BREMgKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQURDX1JQUiBFUVUoIDB4RkZGRDgxMDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBEQ19BREMgKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FEQ19UQ1IgRVFVKCAweEZGRkQ4MTBDICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQRENfQURDICkgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQURDX1RQUiBFUVUoIDB4RkZGRDgxMDggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBEQ19BREMgKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19BRENfUkNSIEVRVSggMHhGRkZEODEwNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUERDX0FEQyApIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KLS8qIC0gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBBREMgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19BRENfQ0RSMiBFUVUoIDB4RkZGRDgwMzggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEFEQyApIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQURDX0NEUjMgRVFVKCAweEZGRkQ4MDNDICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBREMgKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDMNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FEQ19DRFIwIEVRVSggMHhGRkZEODAzMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQURDICkgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAwDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19BRENfQ0RSNSBFUVUoIDB4RkZGRDgwNDQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEFEQyApIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQURDX0NIRFIgRVFVKCAweEZGRkQ4MDE0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBREMgKSBBREMgQ2hhbm5lbCBEaXNhYmxlIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19BRENfU1IgRVFVKCAweEZGRkQ4MDFDICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBREMgKSBBREMgU3RhdHVzIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19BRENfQ0RSNCBFUVUoIDB4RkZGRDgwNDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEFEQyApIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQURDX0NEUjEgRVFVKCAweEZGRkQ4MDM0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBREMgKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDENCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FEQ19MQ0RSIEVRVSggMHhGRkZEODAyMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQURDICkgQURDIExhc3QgQ29udmVydGVkIERhdGEgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FEQ19JRFIgRVFVKCAweEZGRkQ4MDI4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBREMgKSBBREMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FEQ19DUiBFUVUoIDB4RkZGRDgwMDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEFEQyApIEFEQyBDb250cm9sIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19BRENfQ0RSNyBFUVUoIDB4RkZGRDgwNEMgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEFEQyApIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQURDX0NEUjYgRVFVKCAweEZGRkQ4MDQ4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBREMgKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDYNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FEQ19JRVIgRVFVKCAweEZGRkQ4MDI0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBREMgKSBBREMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQURDX0NIRVIgRVFVKCAweEZGRkQ4MDEwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBREMgKSBBREMgQ2hhbm5lbCBFbmFibGUgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FEQ19DSFNSIEVRVSggMHhGRkZEODAxOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQURDICkgQURDIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19BRENfTVIgRVFVKCAweEZGRkQ4MDA0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBREMgKSBBREMgTW9kZSBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQURDX0lNUiBFUVUoIDB4RkZGRDgwMkMgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEFEQyApIEFEQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KLS8qIC0gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfQUVTIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQUVTX1RQUiBFUVUoIDB4RkZGQTQxMDggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBEQ19BRVMgKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19BRVNfUFRDUiBFUVUoIDB4RkZGQTQxMjAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBEQ19BRVMgKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQUVTX1JOUFIgRVFVKCAweEZGRkE0MTEwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQRENfQUVTICkgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FFU19UTkNSIEVRVSggMHhGRkZBNDExQyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUERDX0FFUyApIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQUVTX1RDUiBFUVUoIDB4RkZGQTQxMEMgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBEQ19BRVMgKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19BRVNfUkNSIEVRVSggMHhGRkZBNDEwNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUERDX0FFUyApIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQUVTX1JOQ1IgRVFVKCAweEZGRkE0MTE0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQRENfQUVTICkgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FFU19UTlBSIEVRVSggMHhGRkZBNDExOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUERDX0FFUyApIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQUVTX1JQUiBFUVUoIDB4RkZGQTQxMDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBEQ19BRVMgKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FFU19QVFNSIEVRVSggMHhGRkZBNDEyNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUERDX0FFUyApIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCi0vKiAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQUVTIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQUVTX0lWeFIgRVFVKCAweEZGRkE0MDYwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBRVMgKSBJbml0aWFsaXphdGlvbiBWZWN0b3IgeCBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQUVTX01SIEVRVSggMHhGRkZBNDAwNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQUVTICkgTW9kZSBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQUVTX1ZSIEVRVSggMHhGRkZBNDBGQyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQUVTICkgQUVTIFZlcnNpb24gUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FFU19PREFUQXhSIEVRVSggMHhGRkZBNDA1MCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQUVTICkgT3V0cHV0IERhdGEgeCBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQUVTX0lEQVRBeFIgRVFVKCAweEZGRkE0MDQwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBRVMgKSBJbnB1dCBEYXRhIHggUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FFU19DUiBFUVUoIDB4RkZGQTQwMDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEFFUyApIENvbnRyb2wgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FFU19JRFIgRVFVKCAweEZGRkE0MDE0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBRVMgKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQUVTX0lNUiBFUVUoIDB4RkZGQTQwMTggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEFFUyApIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19BRVNfSUVSIEVRVSggMHhGRkZBNDAxMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQUVTICkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQUVTX0tFWVd4UiBFUVUoIDB4RkZGQTQwMjAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEFFUyApIEtleSBXb3JkIHggUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0FFU19JU1IgRVFVKCAweEZGRkE0MDFDICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBRVMgKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQotLyogLSA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19UREVTIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVERFU19STkNSIEVRVSggMHhGRkZBODExNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUERDX1RERVMgKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVERFU19UQ1IgRVFVKCAweEZGRkE4MTBDICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQRENfVERFUyApIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RERVNfUkNSIEVRVSggMHhGRkZBODEwNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUERDX1RERVMgKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RERVNfVE5QUiBFUVUoIDB4RkZGQTgxMTggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBEQ19UREVTICkgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UREVTX1JOUFIgRVFVKCAweEZGRkE4MTEwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQRENfVERFUyApIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UREVTX1JQUiBFUVUoIDB4RkZGQTgxMDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBEQ19UREVTICkgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UREVTX1ROQ1IgRVFVKCAweEZGRkE4MTFDICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQRENfVERFUyApIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVERFU19UUFIgRVFVKCAweEZGRkE4MTA4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQRENfVERFUyApIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RERVNfUFRTUiBFUVUoIDB4RkZGQTgxMjQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBEQ19UREVTICkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVERFU19QVENSIEVRVSggMHhGRkZBODEyMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUERDX1RERVMgKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KLS8qIC0gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBUREVTIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVERFU19LRVkyV3hSIEVRVSggMHhGRkZBODAyOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVERFUyApIEtleSAyIFdvcmQgeCBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVERFU19LRVkzV3hSIEVRVSggMHhGRkZBODAzMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVERFUyApIEtleSAzIFdvcmQgeCBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVERFU19JRFIgRVFVKCAweEZGRkE4MDE0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUREVTICkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RERVNfVlIgRVFVKCAweEZGRkE4MEZDICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUREVTICkgVERFUyBWZXJzaW9uIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UREVTX0lWeFIgRVFVKCAweEZGRkE4MDYwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUREVTICkgSW5pdGlhbGl6YXRpb24gVmVjdG9yIHggUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RERVNfT0RBVEF4UiBFUVUoIDB4RkZGQTgwNTAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRERVMgKSBPdXRwdXQgRGF0YSB4IFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UREVTX0lNUiBFUVUoIDB4RkZGQTgwMTggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRERVMgKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVERFU19NUiBFUVUoIDB4RkZGQTgwMDQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRERVMgKSBNb2RlIFJlZ2lzdGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19UREVTX0NSIEVRVSggMHhGRkZBODAwMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVERFUyApIENvbnRyb2wgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RERVNfSUVSIEVRVSggMHhGRkZBODAxMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVERFUyApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RERVNfSVNSIEVRVSggMHhGRkZBODAxQyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVERFUyApIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RERVNfSURBVEF4UiBFUVUoIDB4RkZGQTgwNDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRERVMgKSBJbnB1dCBEYXRhIHggUmVnaXN0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1RERVNfS0VZMVd4UiBFUVUoIDB4RkZGQTgwMjAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRERVMgKSBLZXkgMSBXb3JkIHggUmVnaXN0ZXINCisvLyAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gLSAgICAgICAgICAgICAgIFJFR0lTVEVSIEFERFJFU1MgREVGSU5JVElPTiBGT1IgQVQ5MVNBTTdYMjU2DQorLy8gLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vIC0gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBTWVMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKy8vIC0gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBBSUMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KK0FUOTFDX0FJQ19JVlIgICAgICAgICAgICAgRVFVICgweEZGRkZGMTAwKSA7LSAoQUlDKSBJUlEgVmVjdG9yIFJlZ2lzdGVyDQorQVQ5MUNfQUlDX1NNUiAgICAgICAgICAgICBFUVUgKDB4RkZGRkYwMDApIDstIChBSUMpIFNvdXJjZSBNb2RlIFJlZ2lzdGVyDQorQVQ5MUNfQUlDX0ZWUiAgICAgICAgICAgICBFUVUgKDB4RkZGRkYxMDQpIDstIChBSUMpIEZJUSBWZWN0b3IgUmVnaXN0ZXINCitBVDkxQ19BSUNfRENSICAgICAgICAgICAgIEVRVSAoMHhGRkZGRjEzOCkgOy0gKEFJQykgRGVidWcgQ29udHJvbCBSZWdpc3RlciAoUHJvdGVjdCkNCitBVDkxQ19BSUNfRU9JQ1IgICAgICAgICAgIEVRVSAoMHhGRkZGRjEzMCkgOy0gKEFJQykgRW5kIG9mIEludGVycnVwdCBDb21tYW5kIFJlZ2lzdGVyDQorQVQ5MUNfQUlDX1NWUiAgICAgICAgICAgICBFUVUgKDB4RkZGRkYwODApIDstIChBSUMpIFNvdXJjZSBWZWN0b3IgUmVnaXN0ZXINCitBVDkxQ19BSUNfRkZTUiAgICAgICAgICAgIEVRVSAoMHhGRkZGRjE0OCkgOy0gKEFJQykgRmFzdCBGb3JjaW5nIFN0YXR1cyBSZWdpc3Rlcg0KK0FUOTFDX0FJQ19JQ0NSICAgICAgICAgICAgRVFVICgweEZGRkZGMTI4KSA7LSAoQUlDKSBJbnRlcnJ1cHQgQ2xlYXIgQ29tbWFuZCBSZWdpc3Rlcg0KK0FUOTFDX0FJQ19JU1IgICAgICAgICAgICAgRVFVICgweEZGRkZGMTA4KSA7LSAoQUlDKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorQVQ5MUNfQUlDX0lNUiAgICAgICAgICAgICBFUVUgKDB4RkZGRkYxMTApIDstIChBSUMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorQVQ5MUNfQUlDX0lQUiAgICAgICAgICAgICBFUVUgKDB4RkZGRkYxMEMpIDstIChBSUMpIEludGVycnVwdCBQZW5kaW5nIFJlZ2lzdGVyDQorQVQ5MUNfQUlDX0ZGRVIgICAgICAgICAgICBFUVUgKDB4RkZGRkYxNDApIDstIChBSUMpIEZhc3QgRm9yY2luZyBFbmFibGUgUmVnaXN0ZXINCitBVDkxQ19BSUNfSUVDUiAgICAgICAgICAgIEVRVSAoMHhGRkZGRjEyMCkgOy0gKEFJQykgSW50ZXJydXB0IEVuYWJsZSBDb21tYW5kIFJlZ2lzdGVyDQorQVQ5MUNfQUlDX0lTQ1IgICAgICAgICAgICBFUVUgKDB4RkZGRkYxMkMpIDstIChBSUMpIEludGVycnVwdCBTZXQgQ29tbWFuZCBSZWdpc3Rlcg0KK0FUOTFDX0FJQ19GRkRSICAgICAgICAgICAgRVFVICgweEZGRkZGMTQ0KSA7LSAoQUlDKSBGYXN0IEZvcmNpbmcgRGlzYWJsZSBSZWdpc3Rlcg0KK0FUOTFDX0FJQ19DSVNSICAgICAgICAgICAgRVFVICgweEZGRkZGMTE0KSA7LSAoQUlDKSBDb3JlIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCitBVDkxQ19BSUNfSURDUiAgICAgICAgICAgIEVRVSAoMHhGRkZGRjEyNCkgOy0gKEFJQykgSW50ZXJydXB0IERpc2FibGUgQ29tbWFuZCBSZWdpc3Rlcg0KK0FUOTFDX0FJQ19TUFUgICAgICAgICAgICAgRVFVICgweEZGRkZGMTM0KSA7LSAoQUlDKSBTcHVyaW91cyBWZWN0b3IgUmVnaXN0ZXINCisvLyAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX0RCR1UgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KK0FUOTFDX0RCR1VfVENSICAgICAgICAgICAgRVFVICgweEZGRkZGMzBDKSA7LSAoUERDX0RCR1UpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCitBVDkxQ19EQkdVX1JOUFIgICAgICAgICAgIEVRVSAoMHhGRkZGRjMxMCkgOy0gKFBEQ19EQkdVKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KK0FUOTFDX0RCR1VfVE5QUiAgICAgICAgICAgRVFVICgweEZGRkZGMzE4KSA7LSAoUERDX0RCR1UpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KK0FUOTFDX0RCR1VfVFBSICAgICAgICAgICAgRVFVICgweEZGRkZGMzA4KSA7LSAoUERDX0RCR1UpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCitBVDkxQ19EQkdVX1JQUiAgICAgICAgICAgIEVRVSAoMHhGRkZGRjMwMCkgOy0gKFBEQ19EQkdVKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCitBVDkxQ19EQkdVX1JDUiAgICAgICAgICAgIEVRVSAoMHhGRkZGRjMwNCkgOy0gKFBEQ19EQkdVKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCitBVDkxQ19EQkdVX1JOQ1IgICAgICAgICAgIEVRVSAoMHhGRkZGRjMxNCkgOy0gKFBEQ19EQkdVKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KK0FUOTFDX0RCR1VfUFRDUiAgICAgICAgICAgRVFVICgweEZGRkZGMzIwKSA7LSAoUERDX0RCR1UpIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorQVQ5MUNfREJHVV9QVFNSICAgICAgICAgICBFUVUgKDB4RkZGRkYzMjQpIDstIChQRENfREJHVSkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KK0FUOTFDX0RCR1VfVE5DUiAgICAgICAgICAgRVFVICgweEZGRkZGMzFDKSA7LSAoUERDX0RCR1UpIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKy8vIC0gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBEQkdVIHBlcmlwaGVyYWwgPT09PT09PT09PSANCitBVDkxQ19EQkdVX0VYSUQgICAgICAgICAgIEVRVSAoMHhGRkZGRjI0NCkgOy0gKERCR1UpIENoaXAgSUQgRXh0ZW5zaW9uIFJlZ2lzdGVyDQorQVQ5MUNfREJHVV9CUkdSICAgICAgICAgICBFUVUgKDB4RkZGRkYyMjApIDstIChEQkdVKSBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyDQorQVQ5MUNfREJHVV9JRFIgICAgICAgICAgICBFUVUgKDB4RkZGRkYyMEMpIDstIChEQkdVKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KK0FUOTFDX0RCR1VfQ1NSICAgICAgICAgICAgRVFVICgweEZGRkZGMjE0KSA7LSAoREJHVSkgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXINCitBVDkxQ19EQkdVX0NJRFIgICAgICAgICAgIEVRVSAoMHhGRkZGRjI0MCkgOy0gKERCR1UpIENoaXAgSUQgUmVnaXN0ZXINCitBVDkxQ19EQkdVX01SICAgICAgICAgICAgIEVRVSAoMHhGRkZGRjIwNCkgOy0gKERCR1UpIE1vZGUgUmVnaXN0ZXINCitBVDkxQ19EQkdVX0lNUiAgICAgICAgICAgIEVRVSAoMHhGRkZGRjIxMCkgOy0gKERCR1UpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorQVQ5MUNfREJHVV9DUiAgICAgICAgICAgICBFUVUgKDB4RkZGRkYyMDApIDstIChEQkdVKSBDb250cm9sIFJlZ2lzdGVyDQorQVQ5MUNfREJHVV9GTlRSICAgICAgICAgICBFUVUgKDB4RkZGRkYyNDgpIDstIChEQkdVKSBGb3JjZSBOVFJTVCBSZWdpc3Rlcg0KK0FUOTFDX0RCR1VfVEhSICAgICAgICAgICAgRVFVICgweEZGRkZGMjFDKSA7LSAoREJHVSkgVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3Rlcg0KK0FUOTFDX0RCR1VfUkhSICAgICAgICAgICAgRVFVICgweEZGRkZGMjE4KSA7LSAoREJHVSkgUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3Rlcg0KK0FUOTFDX0RCR1VfSUVSICAgICAgICAgICAgRVFVICgweEZGRkZGMjA4KSA7LSAoREJHVSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKy8vIC0gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQSU9BIHBlcmlwaGVyYWwgPT09PT09PT09PSANCitBVDkxQ19QSU9BX09EUiAgICAgICAgICAgIEVRVSAoMHhGRkZGRjQxNCkgOy0gKFBJT0EpIE91dHB1dCBEaXNhYmxlIFJlZ2lzdGVycg0KK0FUOTFDX1BJT0FfU09EUiAgICAgICAgICAgRVFVICgweEZGRkZGNDMwKSA7LSAoUElPQSkgU2V0IE91dHB1dCBEYXRhIFJlZ2lzdGVyDQorQVQ5MUNfUElPQV9JU1IgICAgICAgICAgICBFUVUgKDB4RkZGRkY0NEMpIDstIChQSU9BKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorQVQ5MUNfUElPQV9BQlNSICAgICAgICAgICBFUVUgKDB4RkZGRkY0NzgpIDstIChQSU9BKSBBQiBTZWxlY3QgU3RhdHVzIFJlZ2lzdGVyDQorQVQ5MUNfUElPQV9JRVIgICAgICAgICAgICBFUVUgKDB4RkZGRkY0NDApIDstIChQSU9BKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorQVQ5MUNfUElPQV9QUFVEUiAgICAgICAgICBFUVUgKDB4RkZGRkY0NjApIDstIChQSU9BKSBQdWxsLXVwIERpc2FibGUgUmVnaXN0ZXINCitBVDkxQ19QSU9BX0lNUiAgICAgICAgICAgIEVRVSAoMHhGRkZGRjQ0OCkgOy0gKFBJT0EpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorQVQ5MUNfUElPQV9QRVIgICAgICAgICAgICBFUVUgKDB4RkZGRkY0MDApIDstIChQSU9BKSBQSU8gRW5hYmxlIFJlZ2lzdGVyDQorQVQ5MUNfUElPQV9JRkRSICAgICAgICAgICBFUVUgKDB4RkZGRkY0MjQpIDstIChQSU9BKSBJbnB1dCBGaWx0ZXIgRGlzYWJsZSBSZWdpc3Rlcg0KK0FUOTFDX1BJT0FfT1dEUiAgICAgICAgICAgRVFVICgweEZGRkZGNEE0KSA7LSAoUElPQSkgT3V0cHV0IFdyaXRlIERpc2FibGUgUmVnaXN0ZXINCitBVDkxQ19QSU9BX01EU1IgICAgICAgICAgIEVRVSAoMHhGRkZGRjQ1OCkgOy0gKFBJT0EpIE11bHRpLWRyaXZlciBTdGF0dXMgUmVnaXN0ZXINCitBVDkxQ19QSU9BX0lEUiAgICAgICAgICAgIEVRVSAoMHhGRkZGRjQ0NCkgOy0gKFBJT0EpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorQVQ5MUNfUElPQV9PRFNSICAgICAgICAgICBFUVUgKDB4RkZGRkY0MzgpIDstIChQSU9BKSBPdXRwdXQgRGF0YSBTdGF0dXMgUmVnaXN0ZXINCitBVDkxQ19QSU9BX1BQVVNSICAgICAgICAgIEVRVSAoMHhGRkZGRjQ2OCkgOy0gKFBJT0EpIFB1bGwtdXAgU3RhdHVzIFJlZ2lzdGVyDQorQVQ5MUNfUElPQV9PV1NSICAgICAgICAgICBFUVUgKDB4RkZGRkY0QTgpIDstIChQSU9BKSBPdXRwdXQgV3JpdGUgU3RhdHVzIFJlZ2lzdGVyDQorQVQ5MUNfUElPQV9CU1IgICAgICAgICAgICBFUVUgKDB4RkZGRkY0NzQpIDstIChQSU9BKSBTZWxlY3QgQiBSZWdpc3Rlcg0KK0FUOTFDX1BJT0FfT1dFUiAgICAgICAgICAgRVFVICgweEZGRkZGNEEwKSA7LSAoUElPQSkgT3V0cHV0IFdyaXRlIEVuYWJsZSBSZWdpc3Rlcg0KK0FUOTFDX1BJT0FfSUZFUiAgICAgICAgICAgRVFVICgweEZGRkZGNDIwKSA7LSAoUElPQSkgSW5wdXQgRmlsdGVyIEVuYWJsZSBSZWdpc3Rlcg0KK0FUOTFDX1BJT0FfUERTUiAgICAgICAgICAgRVFVICgweEZGRkZGNDNDKSA7LSAoUElPQSkgUGluIERhdGEgU3RhdHVzIFJlZ2lzdGVyDQorQVQ5MUNfUElPQV9QUFVFUiAgICAgICAgICBFUVUgKDB4RkZGRkY0NjQpIDstIChQSU9BKSBQdWxsLXVwIEVuYWJsZSBSZWdpc3Rlcg0KK0FUOTFDX1BJT0FfT1NSICAgICAgICAgICAgRVFVICgweEZGRkZGNDE4KSA7LSAoUElPQSkgT3V0cHV0IFN0YXR1cyBSZWdpc3Rlcg0KK0FUOTFDX1BJT0FfQVNSICAgICAgICAgICAgRVFVICgweEZGRkZGNDcwKSA7LSAoUElPQSkgU2VsZWN0IEEgUmVnaXN0ZXINCitBVDkxQ19QSU9BX01ERFIgICAgICAgICAgIEVRVSAoMHhGRkZGRjQ1NCkgOy0gKFBJT0EpIE11bHRpLWRyaXZlciBEaXNhYmxlIFJlZ2lzdGVyDQorQVQ5MUNfUElPQV9DT0RSICAgICAgICAgICBFUVUgKDB4RkZGRkY0MzQpIDstIChQSU9BKSBDbGVhciBPdXRwdXQgRGF0YSBSZWdpc3Rlcg0KK0FUOTFDX1BJT0FfTURFUiAgICAgICAgICAgRVFVICgweEZGRkZGNDUwKSA7LSAoUElPQSkgTXVsdGktZHJpdmVyIEVuYWJsZSBSZWdpc3Rlcg0KK0FUOTFDX1BJT0FfUERSICAgICAgICAgICAgRVFVICgweEZGRkZGNDA0KSA7LSAoUElPQSkgUElPIERpc2FibGUgUmVnaXN0ZXINCitBVDkxQ19QSU9BX0lGU1IgICAgICAgICAgIEVRVSAoMHhGRkZGRjQyOCkgOy0gKFBJT0EpIElucHV0IEZpbHRlciBTdGF0dXMgUmVnaXN0ZXINCitBVDkxQ19QSU9BX09FUiAgICAgICAgICAgIEVRVSAoMHhGRkZGRjQxMCkgOy0gKFBJT0EpIE91dHB1dCBFbmFibGUgUmVnaXN0ZXINCitBVDkxQ19QSU9BX1BTUiAgICAgICAgICAgIEVRVSAoMHhGRkZGRjQwOCkgOy0gKFBJT0EpIFBJTyBTdGF0dXMgUmVnaXN0ZXINCisvLyAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUElPQiBwZXJpcGhlcmFsID09PT09PT09PT0gDQorQVQ5MUNfUElPQl9PV0RSICAgICAgICAgICBFUVUgKDB4RkZGRkY2QTQpIDstIChQSU9CKSBPdXRwdXQgV3JpdGUgRGlzYWJsZSBSZWdpc3Rlcg0KK0FUOTFDX1BJT0JfTURFUiAgICAgICAgICAgRVFVICgweEZGRkZGNjUwKSA7LSAoUElPQikgTXVsdGktZHJpdmVyIEVuYWJsZSBSZWdpc3Rlcg0KK0FUOTFDX1BJT0JfUFBVU1IgICAgICAgICAgRVFVICgweEZGRkZGNjY4KSA7LSAoUElPQikgUHVsbC11cCBTdGF0dXMgUmVnaXN0ZXINCitBVDkxQ19QSU9CX0lNUiAgICAgICAgICAgIEVRVSAoMHhGRkZGRjY0OCkgOy0gKFBJT0IpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorQVQ5MUNfUElPQl9BU1IgICAgICAgICAgICBFUVUgKDB4RkZGRkY2NzApIDstIChQSU9CKSBTZWxlY3QgQSBSZWdpc3Rlcg0KK0FUOTFDX1BJT0JfUFBVRFIgICAgICAgICAgRVFVICgweEZGRkZGNjYwKSA7LSAoUElPQikgUHVsbC11cCBEaXNhYmxlIFJlZ2lzdGVyDQorQVQ5MUNfUElPQl9QU1IgICAgICAgICAgICBFUVUgKDB4RkZGRkY2MDgpIDstIChQSU9CKSBQSU8gU3RhdHVzIFJlZ2lzdGVyDQorQVQ5MUNfUElPQl9JRVIgICAgICAgICAgICBFUVUgKDB4RkZGRkY2NDApIDstIChQSU9CKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorQVQ5MUNfUElPQl9DT0RSICAgICAgICAgICBFUVUgKDB4RkZGRkY2MzQpIDstIChQSU9CKSBDbGVhciBPdXRwdXQgRGF0YSBSZWdpc3Rlcg0KK0FUOTFDX1BJT0JfT1dFUiAgICAgICAgICAgRVFVICgweEZGRkZGNkEwKSA7LSAoUElPQikgT3V0cHV0IFdyaXRlIEVuYWJsZSBSZWdpc3Rlcg0KK0FUOTFDX1BJT0JfQUJTUiAgICAgICAgICAgRVFVICgweEZGRkZGNjc4KSA7LSAoUElPQikgQUIgU2VsZWN0IFN0YXR1cyBSZWdpc3Rlcg0KK0FUOTFDX1BJT0JfSUZEUiAgICAgICAgICAgRVFVICgweEZGRkZGNjI0KSA7LSAoUElPQikgSW5wdXQgRmlsdGVyIERpc2FibGUgUmVnaXN0ZXINCitBVDkxQ19QSU9CX1BEU1IgICAgICAgICAgIEVRVSAoMHhGRkZGRjYzQykgOy0gKFBJT0IpIFBpbiBEYXRhIFN0YXR1cyBSZWdpc3Rlcg0KK0FUOTFDX1BJT0JfSURSICAgICAgICAgICAgRVFVICgweEZGRkZGNjQ0KSA7LSAoUElPQikgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCitBVDkxQ19QSU9CX09XU1IgICAgICAgICAgIEVRVSAoMHhGRkZGRjZBOCkgOy0gKFBJT0IpIE91dHB1dCBXcml0ZSBTdGF0dXMgUmVnaXN0ZXINCitBVDkxQ19QSU9CX1BEUiAgICAgICAgICAgIEVRVSAoMHhGRkZGRjYwNCkgOy0gKFBJT0IpIFBJTyBEaXNhYmxlIFJlZ2lzdGVyDQorQVQ5MUNfUElPQl9PRFIgICAgICAgICAgICBFUVUgKDB4RkZGRkY2MTQpIDstIChQSU9CKSBPdXRwdXQgRGlzYWJsZSBSZWdpc3RlcnINCitBVDkxQ19QSU9CX0lGU1IgICAgICAgICAgIEVRVSAoMHhGRkZGRjYyOCkgOy0gKFBJT0IpIElucHV0IEZpbHRlciBTdGF0dXMgUmVnaXN0ZXINCitBVDkxQ19QSU9CX1BQVUVSICAgICAgICAgIEVRVSAoMHhGRkZGRjY2NCkgOy0gKFBJT0IpIFB1bGwtdXAgRW5hYmxlIFJlZ2lzdGVyDQorQVQ5MUNfUElPQl9TT0RSICAgICAgICAgICBFUVUgKDB4RkZGRkY2MzApIDstIChQSU9CKSBTZXQgT3V0cHV0IERhdGEgUmVnaXN0ZXINCitBVDkxQ19QSU9CX0lTUiAgICAgICAgICAgIEVRVSAoMHhGRkZGRjY0QykgOy0gKFBJT0IpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCitBVDkxQ19QSU9CX09EU1IgICAgICAgICAgIEVRVSAoMHhGRkZGRjYzOCkgOy0gKFBJT0IpIE91dHB1dCBEYXRhIFN0YXR1cyBSZWdpc3Rlcg0KK0FUOTFDX1BJT0JfT1NSICAgICAgICAgICAgRVFVICgweEZGRkZGNjE4KSA7LSAoUElPQikgT3V0cHV0IFN0YXR1cyBSZWdpc3Rlcg0KK0FUOTFDX1BJT0JfTURTUiAgICAgICAgICAgRVFVICgweEZGRkZGNjU4KSA7LSAoUElPQikgTXVsdGktZHJpdmVyIFN0YXR1cyBSZWdpc3Rlcg0KK0FUOTFDX1BJT0JfSUZFUiAgICAgICAgICAgRVFVICgweEZGRkZGNjIwKSA7LSAoUElPQikgSW5wdXQgRmlsdGVyIEVuYWJsZSBSZWdpc3Rlcg0KK0FUOTFDX1BJT0JfQlNSICAgICAgICAgICAgRVFVICgweEZGRkZGNjc0KSA7LSAoUElPQikgU2VsZWN0IEIgUmVnaXN0ZXINCitBVDkxQ19QSU9CX01ERFIgICAgICAgICAgIEVRVSAoMHhGRkZGRjY1NCkgOy0gKFBJT0IpIE11bHRpLWRyaXZlciBEaXNhYmxlIFJlZ2lzdGVyDQorQVQ5MUNfUElPQl9PRVIgICAgICAgICAgICBFUVUgKDB4RkZGRkY2MTApIDstIChQSU9CKSBPdXRwdXQgRW5hYmxlIFJlZ2lzdGVyDQorQVQ5MUNfUElPQl9QRVIgICAgICAgICAgICBFUVUgKDB4RkZGRkY2MDApIDstIChQSU9CKSBQSU8gRW5hYmxlIFJlZ2lzdGVyDQorLy8gLSA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENLR1IgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KK0FUOTFDX0NLR1JfTU9SICAgICAgICAgICAgRVFVICgweEZGRkZGQzIwKSA7LSAoQ0tHUikgTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyDQorQVQ5MUNfQ0tHUl9QTExSICAgICAgICAgICBFUVUgKDB4RkZGRkZDMkMpIDstIChDS0dSKSBQTEwgUmVnaXN0ZXINCitBVDkxQ19DS0dSX01DRlIgICAgICAgICAgIEVRVSAoMHhGRkZGRkMyNCkgOy0gKENLR1IpIE1haW4gQ2xvY2sgIEZyZXF1ZW5jeSBSZWdpc3Rlcg0KKy8vIC0gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQTUMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KK0FUOTFDX1BNQ19JRFIgICAgICAgICAgICAgRVFVICgweEZGRkZGQzY0KSA7LSAoUE1DKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KK0FUOTFDX1BNQ19NT1IgICAgICAgICAgICAgRVFVICgweEZGRkZGQzIwKSA7LSAoUE1DKSBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXINCitBVDkxQ19QTUNfUExMUiAgICAgICAgICAgIEVRVSAoMHhGRkZGRkMyQykgOy0gKFBNQykgUExMIFJlZ2lzdGVyDQorQVQ5MUNfUE1DX1BDRVIgICAgICAgICAgICBFUVUgKDB4RkZGRkZDMTApIDstIChQTUMpIFBlcmlwaGVyYWwgQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyDQorQVQ5MUNfUE1DX1BDS1IgICAgICAgICAgICBFUVUgKDB4RkZGRkZDNDApIDstIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBSZWdpc3Rlcg0KK0FUOTFDX1BNQ19NQ0tSICAgICAgICAgICAgRVFVICgweEZGRkZGQzMwKSA7LSAoUE1DKSBNYXN0ZXIgQ2xvY2sgUmVnaXN0ZXINCitBVDkxQ19QTUNfU0NEUiAgICAgICAgICAgIEVRVSAoMHhGRkZGRkMwNCkgOy0gKFBNQykgU3lzdGVtIENsb2NrIERpc2FibGUgUmVnaXN0ZXINCitBVDkxQ19QTUNfUENEUiAgICAgICAgICAgIEVRVSAoMHhGRkZGRkMxNCkgOy0gKFBNQykgUGVyaXBoZXJhbCBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyDQorQVQ5MUNfUE1DX1NDU1IgICAgICAgICAgICBFUVUgKDB4RkZGRkZDMDgpIDstIChQTUMpIFN5c3RlbSBDbG9jayBTdGF0dXMgUmVnaXN0ZXINCitBVDkxQ19QTUNfUENTUiAgICAgICAgICAgIEVRVSAoMHhGRkZGRkMxOCkgOy0gKFBNQykgUGVyaXBoZXJhbCBDbG9jayBTdGF0dXMgUmVnaXN0ZXINCitBVDkxQ19QTUNfTUNGUiAgICAgICAgICAgIEVRVSAoMHhGRkZGRkMyNCkgOy0gKFBNQykgTWFpbiBDbG9jayAgRnJlcXVlbmN5IFJlZ2lzdGVyDQorQVQ5MUNfUE1DX1NDRVIgICAgICAgICAgICBFUVUgKDB4RkZGRkZDMDApIDstIChQTUMpIFN5c3RlbSBDbG9jayBFbmFibGUgUmVnaXN0ZXINCitBVDkxQ19QTUNfSU1SICAgICAgICAgICAgIEVRVSAoMHhGRkZGRkM2QykgOy0gKFBNQykgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCitBVDkxQ19QTUNfSUVSICAgICAgICAgICAgIEVRVSAoMHhGRkZGRkM2MCkgOy0gKFBNQykgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KK0FUOTFDX1BNQ19TUiAgICAgICAgICAgICAgRVFVICgweEZGRkZGQzY4KSA7LSAoUE1DKSBTdGF0dXMgUmVnaXN0ZXINCisvLyAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUlNUQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorQVQ5MUNfUlNUQ19SQ1IgICAgICAgICAgICBFUVUgKDB4RkZGRkZEMDApIDstIChSU1RDKSBSZXNldCBDb250cm9sIFJlZ2lzdGVyDQorQVQ5MUNfUlNUQ19STVIgICAgICAgICAgICBFUVUgKDB4RkZGRkZEMDgpIDstIChSU1RDKSBSZXNldCBNb2RlIFJlZ2lzdGVyDQorQVQ5MUNfUlNUQ19SU1IgICAgICAgICAgICBFUVUgKDB4RkZGRkZEMDQpIDstIChSU1RDKSBSZXNldCBTdGF0dXMgUmVnaXN0ZXINCisvLyAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUlRUQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorQVQ5MUNfUlRUQ19SVFNSICAgICAgICAgICBFUVUgKDB4RkZGRkZEMkMpIDstIChSVFRDKSBSZWFsLXRpbWUgU3RhdHVzIFJlZ2lzdGVyDQorQVQ5MUNfUlRUQ19SVE1SICAgICAgICAgICBFUVUgKDB4RkZGRkZEMjApIDstIChSVFRDKSBSZWFsLXRpbWUgTW9kZSBSZWdpc3Rlcg0KK0FUOTFDX1JUVENfUlRWUiAgICAgICAgICAgRVFVICgweEZGRkZGRDI4KSA7LSAoUlRUQykgUmVhbC10aW1lIFZhbHVlIFJlZ2lzdGVyDQorQVQ5MUNfUlRUQ19SVEFSICAgICAgICAgICBFUVUgKDB4RkZGRkZEMjQpIDstIChSVFRDKSBSZWFsLXRpbWUgQWxhcm0gUmVnaXN0ZXINCisvLyAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUElUQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorQVQ5MUNfUElUQ19QSVZSICAgICAgICAgICBFUVUgKDB4RkZGRkZEMzgpIDstIChQSVRDKSBQZXJpb2QgSW50ZXJ2YWwgVmFsdWUgUmVnaXN0ZXINCitBVDkxQ19QSVRDX1BJU1IgICAgICAgICAgIEVRVSAoMHhGRkZGRkQzNCkgOy0gKFBJVEMpIFBlcmlvZCBJbnRlcnZhbCBTdGF0dXMgUmVnaXN0ZXINCitBVDkxQ19QSVRDX1BJSVIgICAgICAgICAgIEVRVSAoMHhGRkZGRkQzQykgOy0gKFBJVEMpIFBlcmlvZCBJbnRlcnZhbCBJbWFnZSBSZWdpc3Rlcg0KK0FUOTFDX1BJVENfUElNUiAgICAgICAgICAgRVFVICgweEZGRkZGRDMwKSA7LSAoUElUQykgUGVyaW9kIEludGVydmFsIE1vZGUgUmVnaXN0ZXINCisvLyAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgV0RUQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorQVQ5MUNfV0RUQ19XRENSICAgICAgICAgICBFUVUgKDB4RkZGRkZENDApIDstIChXRFRDKSBXYXRjaGRvZyBDb250cm9sIFJlZ2lzdGVyDQorQVQ5MUNfV0RUQ19XRFNSICAgICAgICAgICBFUVUgKDB4RkZGRkZENDgpIDstIChXRFRDKSBXYXRjaGRvZyBTdGF0dXMgUmVnaXN0ZXINCitBVDkxQ19XRFRDX1dETVIgICAgICAgICAgIEVRVSAoMHhGRkZGRkQ0NCkgOy0gKFdEVEMpIFdhdGNoZG9nIE1vZGUgUmVnaXN0ZXINCisvLyAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVlJFRyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorQVQ5MUNfVlJFR19NUiAgICAgICAgICAgICBFUVUgKDB4RkZGRkZENjApIDstIChWUkVHKSBWb2x0YWdlIFJlZ3VsYXRvciBNb2RlIFJlZ2lzdGVyDQorLy8gLSA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIE1DIHBlcmlwaGVyYWwgPT09PT09PT09PSANCitBVDkxQ19NQ19BU1IgICAgICAgICAgICAgIEVRVSAoMHhGRkZGRkYwNCkgOy0gKE1DKSBNQyBBYm9ydCBTdGF0dXMgUmVnaXN0ZXINCitBVDkxQ19NQ19SQ1IgICAgICAgICAgICAgIEVRVSAoMHhGRkZGRkYwMCkgOy0gKE1DKSBNQyBSZW1hcCBDb250cm9sIFJlZ2lzdGVyDQorQVQ5MUNfTUNfRkNSICAgICAgICAgICAgICBFUVUgKDB4RkZGRkZGNjQpIDstIChNQykgTUMgRmxhc2ggQ29tbWFuZCBSZWdpc3Rlcg0KK0FUOTFDX01DX0FBU1IgICAgICAgICAgICAgRVFVICgweEZGRkZGRjA4KSA7LSAoTUMpIE1DIEFib3J0IEFkZHJlc3MgU3RhdHVzIFJlZ2lzdGVyDQorQVQ5MUNfTUNfRlNSICAgICAgICAgICAgICBFUVUgKDB4RkZGRkZGNjgpIDstIChNQykgTUMgRmxhc2ggU3RhdHVzIFJlZ2lzdGVyDQorQVQ5MUNfTUNfRk1SICAgICAgICAgICAgICBFUVUgKDB4RkZGRkZGNjApIDstIChNQykgTUMgRmxhc2ggTW9kZSBSZWdpc3Rlcg0KKy8vIC0gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfU1BJMSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorQVQ5MUNfU1BJMV9QVENSICAgICAgICAgICBFUVUgKDB4RkZGRTQxMjApIDstIChQRENfU1BJMSkgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCitBVDkxQ19TUEkxX1JQUiAgICAgICAgICAgIEVRVSAoMHhGRkZFNDEwMCkgOy0gKFBEQ19TUEkxKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCitBVDkxQ19TUEkxX1ROQ1IgICAgICAgICAgIEVRVSAoMHhGRkZFNDExQykgOy0gKFBEQ19TUEkxKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCitBVDkxQ19TUEkxX1RQUiAgICAgICAgICAgIEVRVSAoMHhGRkZFNDEwOCkgOy0gKFBEQ19TUEkxKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorQVQ5MUNfU1BJMV9UTlBSICAgICAgICAgICBFUVUgKDB4RkZGRTQxMTgpIDstIChQRENfU1BJMSkgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorQVQ5MUNfU1BJMV9UQ1IgICAgICAgICAgICBFUVUgKDB4RkZGRTQxMEMpIDstIChQRENfU1BJMSkgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KK0FUOTFDX1NQSTFfUkNSICAgICAgICAgICAgRVFVICgweEZGRkU0MTA0KSA7LSAoUERDX1NQSTEpIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KK0FUOTFDX1NQSTFfUk5QUiAgICAgICAgICAgRVFVICgweEZGRkU0MTEwKSA7LSAoUERDX1NQSTEpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorQVQ5MUNfU1BJMV9STkNSICAgICAgICAgICBFUVUgKDB4RkZGRTQxMTQpIDstIChQRENfU1BJMSkgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCitBVDkxQ19TUEkxX1BUU1IgICAgICAgICAgIEVRVSAoMHhGRkZFNDEyNCkgOy0gKFBEQ19TUEkxKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorLy8gLSA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFNQSTEgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KK0FUOTFDX1NQSTFfSU1SICAgICAgICAgICAgRVFVICgweEZGRkU0MDFDKSA7LSAoU1BJMSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCitBVDkxQ19TUEkxX0lFUiAgICAgICAgICAgIEVRVSAoMHhGRkZFNDAxNCkgOy0gKFNQSTEpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCitBVDkxQ19TUEkxX01SICAgICAgICAgICAgIEVRVSAoMHhGRkZFNDAwNCkgOy0gKFNQSTEpIE1vZGUgUmVnaXN0ZXINCitBVDkxQ19TUEkxX1JEUiAgICAgICAgICAgIEVRVSAoMHhGRkZFNDAwOCkgOy0gKFNQSTEpIFJlY2VpdmUgRGF0YSBSZWdpc3Rlcg0KK0FUOTFDX1NQSTFfSURSICAgICAgICAgICAgRVFVICgweEZGRkU0MDE4KSA7LSAoU1BJMSkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCitBVDkxQ19TUEkxX1NSICAgICAgICAgICAgIEVRVSAoMHhGRkZFNDAxMCkgOy0gKFNQSTEpIFN0YXR1cyBSZWdpc3Rlcg0KK0FUOTFDX1NQSTFfVERSICAgICAgICAgICAgRVFVICgweEZGRkU0MDBDKSA7LSAoU1BJMSkgVHJhbnNtaXQgRGF0YSBSZWdpc3Rlcg0KK0FUOTFDX1NQSTFfQ1IgICAgICAgICAgICAgRVFVICgweEZGRkU0MDAwKSA7LSAoU1BJMSkgQ29udHJvbCBSZWdpc3Rlcg0KK0FUOTFDX1NQSTFfQ1NSICAgICAgICAgICAgRVFVICgweEZGRkU0MDMwKSA7LSAoU1BJMSkgQ2hpcCBTZWxlY3QgUmVnaXN0ZXINCisvLyAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX1NQSTAgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KK0FUOTFDX1NQSTBfUFRDUiAgICAgICAgICAgRVFVICgweEZGRkUwMTIwKSA7LSAoUERDX1NQSTApIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorQVQ5MUNfU1BJMF9UUFIgICAgICAgICAgICBFUVUgKDB4RkZGRTAxMDgpIDstIChQRENfU1BJMCkgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KK0FUOTFDX1NQSTBfVENSICAgICAgICAgICAgRVFVICgweEZGRkUwMTBDKSA7LSAoUERDX1NQSTApIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCitBVDkxQ19TUEkwX1JDUiAgICAgICAgICAgIEVRVSAoMHhGRkZFMDEwNCkgOy0gKFBEQ19TUEkwKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCitBVDkxQ19TUEkwX1BUU1IgICAgICAgICAgIEVRVSAoMHhGRkZFMDEyNCkgOy0gKFBEQ19TUEkwKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorQVQ5MUNfU1BJMF9STlBSICAgICAgICAgICBFUVUgKDB4RkZGRTAxMTApIDstIChQRENfU1BJMCkgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCitBVDkxQ19TUEkwX1JQUiAgICAgICAgICAgIEVRVSAoMHhGRkZFMDEwMCkgOy0gKFBEQ19TUEkwKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCitBVDkxQ19TUEkwX1ROQ1IgICAgICAgICAgIEVRVSAoMHhGRkZFMDExQykgOy0gKFBEQ19TUEkwKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCitBVDkxQ19TUEkwX1JOQ1IgICAgICAgICAgIEVRVSAoMHhGRkZFMDExNCkgOy0gKFBEQ19TUEkwKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KK0FUOTFDX1NQSTBfVE5QUiAgICAgICAgICAgRVFVICgweEZGRkUwMTE4KSA7LSAoUERDX1NQSTApIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKy8vIC0gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBTUEkwIHBlcmlwaGVyYWwgPT09PT09PT09PSANCitBVDkxQ19TUEkwX0lFUiAgICAgICAgICAgIEVRVSAoMHhGRkZFMDAxNCkgOy0gKFNQSTApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCitBVDkxQ19TUEkwX1NSICAgICAgICAgICAgIEVRVSAoMHhGRkZFMDAxMCkgOy0gKFNQSTApIFN0YXR1cyBSZWdpc3Rlcg0KK0FUOTFDX1NQSTBfSURSICAgICAgICAgICAgRVFVICgweEZGRkUwMDE4KSA7LSAoU1BJMCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCitBVDkxQ19TUEkwX0NSICAgICAgICAgICAgIEVRVSAoMHhGRkZFMDAwMCkgOy0gKFNQSTApIENvbnRyb2wgUmVnaXN0ZXINCitBVDkxQ19TUEkwX01SICAgICAgICAgICAgIEVRVSAoMHhGRkZFMDAwNCkgOy0gKFNQSTApIE1vZGUgUmVnaXN0ZXINCitBVDkxQ19TUEkwX0lNUiAgICAgICAgICAgIEVRVSAoMHhGRkZFMDAxQykgOy0gKFNQSTApIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorQVQ5MUNfU1BJMF9URFIgICAgICAgICAgICBFUVUgKDB4RkZGRTAwMEMpIDstIChTUEkwKSBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyDQorQVQ5MUNfU1BJMF9SRFIgICAgICAgICAgICBFUVUgKDB4RkZGRTAwMDgpIDstIChTUEkwKSBSZWNlaXZlIERhdGEgUmVnaXN0ZXINCitBVDkxQ19TUEkwX0NTUiAgICAgICAgICAgIEVRVSAoMHhGRkZFMDAzMCkgOy0gKFNQSTApIENoaXAgU2VsZWN0IFJlZ2lzdGVyDQorLy8gLSA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19VUzEgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KK0FUOTFDX1VTMV9STkNSICAgICAgICAgICAgRVFVICgweEZGRkM0MTE0KSA7LSAoUERDX1VTMSkgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCitBVDkxQ19VUzFfUFRDUiAgICAgICAgICAgIEVRVSAoMHhGRkZDNDEyMCkgOy0gKFBEQ19VUzEpIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorQVQ5MUNfVVMxX1RDUiAgICAgICAgICAgICBFUVUgKDB4RkZGQzQxMEMpIDstIChQRENfVVMxKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorQVQ5MUNfVVMxX1BUU1IgICAgICAgICAgICBFUVUgKDB4RkZGQzQxMjQpIDstIChQRENfVVMxKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorQVQ5MUNfVVMxX1ROUFIgICAgICAgICAgICBFUVUgKDB4RkZGQzQxMTgpIDstIChQRENfVVMxKSBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCitBVDkxQ19VUzFfUkNSICAgICAgICAgICAgIEVRVSAoMHhGRkZDNDEwNCkgOy0gKFBEQ19VUzEpIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KK0FUOTFDX1VTMV9STlBSICAgICAgICAgICAgRVFVICgweEZGRkM0MTEwKSA7LSAoUERDX1VTMSkgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCitBVDkxQ19VUzFfUlBSICAgICAgICAgICAgIEVRVSAoMHhGRkZDNDEwMCkgOy0gKFBEQ19VUzEpIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KK0FUOTFDX1VTMV9UTkNSICAgICAgICAgICAgRVFVICgweEZGRkM0MTFDKSA7LSAoUERDX1VTMSkgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorQVQ5MUNfVVMxX1RQUiAgICAgICAgICAgICBFUVUgKDB4RkZGQzQxMDgpIDstIChQRENfVVMxKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorLy8gLSA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFVTMSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorQVQ5MUNfVVMxX0lGICAgICAgICAgICAgICBFUVUgKDB4RkZGQzQwNEMpIDstIChVUzEpIElSREFfRklMVEVSIFJlZ2lzdGVyDQorQVQ5MUNfVVMxX05FUiAgICAgICAgICAgICBFUVUgKDB4RkZGQzQwNDQpIDstIChVUzEpIE5iIEVycm9ycyBSZWdpc3Rlcg0KK0FUOTFDX1VTMV9SVE9SICAgICAgICAgICAgRVFVICgweEZGRkM0MDI0KSA7LSAoVVMxKSBSZWNlaXZlciBUaW1lLW91dCBSZWdpc3Rlcg0KK0FUOTFDX1VTMV9DU1IgICAgICAgICAgICAgRVFVICgweEZGRkM0MDE0KSA7LSAoVVMxKSBDaGFubmVsIFN0YXR1cyBSZWdpc3Rlcg0KK0FUOTFDX1VTMV9JRFIgICAgICAgICAgICAgRVFVICgweEZGRkM0MDBDKSA7LSAoVVMxKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KK0FUOTFDX1VTMV9JRVIgICAgICAgICAgICAgRVFVICgweEZGRkM0MDA4KSA7LSAoVVMxKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorQVQ5MUNfVVMxX1RIUiAgICAgICAgICAgICBFUVUgKDB4RkZGQzQwMUMpIDstIChVUzEpIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXINCitBVDkxQ19VUzFfVFRHUiAgICAgICAgICAgIEVRVSAoMHhGRkZDNDAyOCkgOy0gKFVTMSkgVHJhbnNtaXR0ZXIgVGltZS1ndWFyZCBSZWdpc3Rlcg0KK0FUOTFDX1VTMV9SSFIgICAgICAgICAgICAgRVFVICgweEZGRkM0MDE4KSA7LSAoVVMxKSBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyDQorQVQ5MUNfVVMxX0JSR1IgICAgICAgICAgICBFUVUgKDB4RkZGQzQwMjApIDstIChVUzEpIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXINCitBVDkxQ19VUzFfSU1SICAgICAgICAgICAgIEVRVSAoMHhGRkZDNDAxMCkgOy0gKFVTMSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCitBVDkxQ19VUzFfRklESSAgICAgICAgICAgIEVRVSAoMHhGRkZDNDA0MCkgOy0gKFVTMSkgRklfRElfUmF0aW8gUmVnaXN0ZXINCitBVDkxQ19VUzFfQ1IgICAgICAgICAgICAgIEVRVSAoMHhGRkZDNDAwMCkgOy0gKFVTMSkgQ29udHJvbCBSZWdpc3Rlcg0KK0FUOTFDX1VTMV9NUiAgICAgICAgICAgICAgRVFVICgweEZGRkM0MDA0KSA7LSAoVVMxKSBNb2RlIFJlZ2lzdGVyDQorLy8gLSA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19VUzAgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KK0FUOTFDX1VTMF9UTlBSICAgICAgICAgICAgRVFVICgweEZGRkMwMTE4KSA7LSAoUERDX1VTMCkgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorQVQ5MUNfVVMwX1JOUFIgICAgICAgICAgICBFUVUgKDB4RkZGQzAxMTApIDstIChQRENfVVMwKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KK0FUOTFDX1VTMF9UQ1IgICAgICAgICAgICAgRVFVICgweEZGRkMwMTBDKSA7LSAoUERDX1VTMCkgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KK0FUOTFDX1VTMF9QVENSICAgICAgICAgICAgRVFVICgweEZGRkMwMTIwKSA7LSAoUERDX1VTMCkgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCitBVDkxQ19VUzBfUFRTUiAgICAgICAgICAgIEVRVSAoMHhGRkZDMDEyNCkgOy0gKFBEQ19VUzApIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCitBVDkxQ19VUzBfVE5DUiAgICAgICAgICAgIEVRVSAoMHhGRkZDMDExQykgOy0gKFBEQ19VUzApIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KK0FUOTFDX1VTMF9UUFIgICAgICAgICAgICAgRVFVICgweEZGRkMwMTA4KSA7LSAoUERDX1VTMCkgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KK0FUOTFDX1VTMF9SQ1IgICAgICAgICAgICAgRVFVICgweEZGRkMwMTA0KSA7LSAoUERDX1VTMCkgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorQVQ5MUNfVVMwX1JQUiAgICAgICAgICAgICBFUVUgKDB4RkZGQzAxMDApIDstIChQRENfVVMwKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCitBVDkxQ19VUzBfUk5DUiAgICAgICAgICAgIEVRVSAoMHhGRkZDMDExNCkgOy0gKFBEQ19VUzApIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorLy8gLSA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFVTMCBwZXJpcGhlcmFsID09PT09PT09PT0gDQorQVQ5MUNfVVMwX0JSR1IgICAgICAgICAgICBFUVUgKDB4RkZGQzAwMjApIDstIChVUzApIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXINCitBVDkxQ19VUzBfTkVSICAgICAgICAgICAgIEVRVSAoMHhGRkZDMDA0NCkgOy0gKFVTMCkgTmIgRXJyb3JzIFJlZ2lzdGVyDQorQVQ5MUNfVVMwX0NSICAgICAgICAgICAgICBFUVUgKDB4RkZGQzAwMDApIDstIChVUzApIENvbnRyb2wgUmVnaXN0ZXINCitBVDkxQ19VUzBfSU1SICAgICAgICAgICAgIEVRVSAoMHhGRkZDMDAxMCkgOy0gKFVTMCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCitBVDkxQ19VUzBfRklESSAgICAgICAgICAgIEVRVSAoMHhGRkZDMDA0MCkgOy0gKFVTMCkgRklfRElfUmF0aW8gUmVnaXN0ZXINCitBVDkxQ19VUzBfVFRHUiAgICAgICAgICAgIEVRVSAoMHhGRkZDMDAyOCkgOy0gKFVTMCkgVHJhbnNtaXR0ZXIgVGltZS1ndWFyZCBSZWdpc3Rlcg0KK0FUOTFDX1VTMF9NUiAgICAgICAgICAgICAgRVFVICgweEZGRkMwMDA0KSA7LSAoVVMwKSBNb2RlIFJlZ2lzdGVyDQorQVQ5MUNfVVMwX1JUT1IgICAgICAgICAgICBFUVUgKDB4RkZGQzAwMjQpIDstIChVUzApIFJlY2VpdmVyIFRpbWUtb3V0IFJlZ2lzdGVyDQorQVQ5MUNfVVMwX0NTUiAgICAgICAgICAgICBFUVUgKDB4RkZGQzAwMTQpIDstIChVUzApIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyDQorQVQ5MUNfVVMwX1JIUiAgICAgICAgICAgICBFUVUgKDB4RkZGQzAwMTgpIDstIChVUzApIFJlY2VpdmVyIEhvbGRpbmcgUmVnaXN0ZXINCitBVDkxQ19VUzBfSURSICAgICAgICAgICAgIEVRVSAoMHhGRkZDMDAwQykgOy0gKFVTMCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCitBVDkxQ19VUzBfVEhSICAgICAgICAgICAgIEVRVSAoMHhGRkZDMDAxQykgOy0gKFVTMCkgVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3Rlcg0KK0FUOTFDX1VTMF9JRiAgICAgICAgICAgICAgRVFVICgweEZGRkMwMDRDKSA7LSAoVVMwKSBJUkRBX0ZJTFRFUiBSZWdpc3Rlcg0KK0FUOTFDX1VTMF9JRVIgICAgICAgICAgICAgRVFVICgweEZGRkMwMDA4KSA7LSAoVVMwKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorLy8gLSA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19TU0MgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KK0FUOTFDX1NTQ19UTkNSICAgICAgICAgICAgRVFVICgweEZGRkQ0MTFDKSA7LSAoUERDX1NTQykgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorQVQ5MUNfU1NDX1JQUiAgICAgICAgICAgICBFUVUgKDB4RkZGRDQxMDApIDstIChQRENfU1NDKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCitBVDkxQ19TU0NfUk5DUiAgICAgICAgICAgIEVRVSAoMHhGRkZENDExNCkgOy0gKFBEQ19TU0MpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorQVQ5MUNfU1NDX1RQUiAgICAgICAgICAgICBFUVUgKDB4RkZGRDQxMDgpIDstIChQRENfU1NDKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorQVQ5MUNfU1NDX1BUQ1IgICAgICAgICAgICBFUVUgKDB4RkZGRDQxMjApIDstIChQRENfU1NDKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KK0FUOTFDX1NTQ19UQ1IgICAgICAgICAgICAgRVFVICgweEZGRkQ0MTBDKSA7LSAoUERDX1NTQykgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KK0FUOTFDX1NTQ19SQ1IgICAgICAgICAgICAgRVFVICgweEZGRkQ0MTA0KSA7LSAoUERDX1NTQykgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorQVQ5MUNfU1NDX1JOUFIgICAgICAgICAgICBFUVUgKDB4RkZGRDQxMTApIDstIChQRENfU1NDKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KK0FUOTFDX1NTQ19UTlBSICAgICAgICAgICAgRVFVICgweEZGRkQ0MTE4KSA7LSAoUERDX1NTQykgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorQVQ5MUNfU1NDX1BUU1IgICAgICAgICAgICBFUVUgKDB4RkZGRDQxMjQpIDstIChQRENfU1NDKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorLy8gLSA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFNTQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorQVQ5MUNfU1NDX1JIUiAgICAgICAgICAgICBFUVUgKDB4RkZGRDQwMjApIDstIChTU0MpIFJlY2VpdmUgSG9sZGluZyBSZWdpc3Rlcg0KK0FUOTFDX1NTQ19SU0hSICAgICAgICAgICAgRVFVICgweEZGRkQ0MDMwKSA7LSAoU1NDKSBSZWNlaXZlIFN5bmMgSG9sZGluZyBSZWdpc3Rlcg0KK0FUOTFDX1NTQ19URk1SICAgICAgICAgICAgRVFVICgweEZGRkQ0MDFDKSA7LSAoU1NDKSBUcmFuc21pdCBGcmFtZSBNb2RlIFJlZ2lzdGVyDQorQVQ5MUNfU1NDX0lEUiAgICAgICAgICAgICBFUVUgKDB4RkZGRDQwNDgpIDstIChTU0MpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorQVQ5MUNfU1NDX1RIUiAgICAgICAgICAgICBFUVUgKDB4RkZGRDQwMjQpIDstIChTU0MpIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXINCitBVDkxQ19TU0NfUkNNUiAgICAgICAgICAgIEVRVSAoMHhGRkZENDAxMCkgOy0gKFNTQykgUmVjZWl2ZSBDbG9jayBNb2RlUmVnaXN0ZXINCitBVDkxQ19TU0NfSUVSICAgICAgICAgICAgIEVRVSAoMHhGRkZENDA0NCkgOy0gKFNTQykgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KK0FUOTFDX1NTQ19UU0hSICAgICAgICAgICAgRVFVICgweEZGRkQ0MDM0KSA7LSAoU1NDKSBUcmFuc21pdCBTeW5jIEhvbGRpbmcgUmVnaXN0ZXINCitBVDkxQ19TU0NfU1IgICAgICAgICAgICAgIEVRVSAoMHhGRkZENDA0MCkgOy0gKFNTQykgU3RhdHVzIFJlZ2lzdGVyDQorQVQ5MUNfU1NDX0NNUiAgICAgICAgICAgICBFUVUgKDB4RkZGRDQwMDQpIDstIChTU0MpIENsb2NrIE1vZGUgUmVnaXN0ZXINCitBVDkxQ19TU0NfVENNUiAgICAgICAgICAgIEVRVSAoMHhGRkZENDAxOCkgOy0gKFNTQykgVHJhbnNtaXQgQ2xvY2sgTW9kZSBSZWdpc3Rlcg0KK0FUOTFDX1NTQ19DUiAgICAgICAgICAgICAgRVFVICgweEZGRkQ0MDAwKSA7LSAoU1NDKSBDb250cm9sIFJlZ2lzdGVyDQorQVQ5MUNfU1NDX0lNUiAgICAgICAgICAgICBFUVUgKDB4RkZGRDQwNEMpIDstIChTU0MpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorQVQ5MUNfU1NDX1JGTVIgICAgICAgICAgICBFUVUgKDB4RkZGRDQwMTQpIDstIChTU0MpIFJlY2VpdmUgRnJhbWUgTW9kZSBSZWdpc3Rlcg0KKy8vIC0gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBUV0kgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KK0FUOTFDX1RXSV9JRVIgICAgICAgICAgICAgRVFVICgweEZGRkI4MDI0KSA7LSAoVFdJKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorQVQ5MUNfVFdJX0NSICAgICAgICAgICAgICBFUVUgKDB4RkZGQjgwMDApIDstIChUV0kpIENvbnRyb2wgUmVnaXN0ZXINCitBVDkxQ19UV0lfU1IgICAgICAgICAgICAgIEVRVSAoMHhGRkZCODAyMCkgOy0gKFRXSSkgU3RhdHVzIFJlZ2lzdGVyDQorQVQ5MUNfVFdJX0lNUiAgICAgICAgICAgICBFUVUgKDB4RkZGQjgwMkMpIDstIChUV0kpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorQVQ5MUNfVFdJX1RIUiAgICAgICAgICAgICBFUVUgKDB4RkZGQjgwMzQpIDstIChUV0kpIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXINCitBVDkxQ19UV0lfSURSICAgICAgICAgICAgIEVRVSAoMHhGRkZCODAyOCkgOy0gKFRXSSkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCitBVDkxQ19UV0lfSUFEUiAgICAgICAgICAgIEVRVSAoMHhGRkZCODAwQykgOy0gKFRXSSkgSW50ZXJuYWwgQWRkcmVzcyBSZWdpc3Rlcg0KK0FUOTFDX1RXSV9NTVIgICAgICAgICAgICAgRVFVICgweEZGRkI4MDA0KSA7LSAoVFdJKSBNYXN0ZXIgTW9kZSBSZWdpc3Rlcg0KK0FUOTFDX1RXSV9DV0dSICAgICAgICAgICAgRVFVICgweEZGRkI4MDEwKSA7LSAoVFdJKSBDbG9jayBXYXZlZm9ybSBHZW5lcmF0b3IgUmVnaXN0ZXINCitBVDkxQ19UV0lfUkhSICAgICAgICAgICAgIEVRVSAoMHhGRkZCODAzMCkgOy0gKFRXSSkgUmVjZWl2ZSBIb2xkaW5nIFJlZ2lzdGVyDQorLy8gLSA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBXTUNfQ0gzIHBlcmlwaGVyYWwgPT09PT09PT09PSANCitBVDkxQ19QV01DX0NIM19DVVBEUiAgICAgIEVRVSAoMHhGRkZDQzI3MCkgOy0gKFBXTUNfQ0gzKSBDaGFubmVsIFVwZGF0ZSBSZWdpc3Rlcg0KK0FUOTFDX1BXTUNfQ0gzX1Jlc2VydmVkICAgRVFVICgweEZGRkNDMjc0KSA7LSAoUFdNQ19DSDMpIFJlc2VydmVkDQorQVQ5MUNfUFdNQ19DSDNfQ1BSRFIgICAgICBFUVUgKDB4RkZGQ0MyNjgpIDstIChQV01DX0NIMykgQ2hhbm5lbCBQZXJpb2QgUmVnaXN0ZXINCitBVDkxQ19QV01DX0NIM19DRFRZUiAgICAgIEVRVSAoMHhGRkZDQzI2NCkgOy0gKFBXTUNfQ0gzKSBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXINCitBVDkxQ19QV01DX0NIM19DQ05UUiAgICAgIEVRVSAoMHhGRkZDQzI2QykgOy0gKFBXTUNfQ0gzKSBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXINCitBVDkxQ19QV01DX0NIM19DTVIgICAgICAgIEVRVSAoMHhGRkZDQzI2MCkgOy0gKFBXTUNfQ0gzKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXINCisvLyAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUFdNQ19DSDIgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KK0FUOTFDX1BXTUNfQ0gyX1Jlc2VydmVkICAgRVFVICgweEZGRkNDMjU0KSA7LSAoUFdNQ19DSDIpIFJlc2VydmVkDQorQVQ5MUNfUFdNQ19DSDJfQ01SICAgICAgICBFUVUgKDB4RkZGQ0MyNDApIDstIChQV01DX0NIMikgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyDQorQVQ5MUNfUFdNQ19DSDJfQ0NOVFIgICAgICBFUVUgKDB4RkZGQ0MyNEMpIDstIChQV01DX0NIMikgQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyDQorQVQ5MUNfUFdNQ19DSDJfQ1BSRFIgICAgICBFUVUgKDB4RkZGQ0MyNDgpIDstIChQV01DX0NIMikgQ2hhbm5lbCBQZXJpb2QgUmVnaXN0ZXINCitBVDkxQ19QV01DX0NIMl9DVVBEUiAgICAgIEVRVSAoMHhGRkZDQzI1MCkgOy0gKFBXTUNfQ0gyKSBDaGFubmVsIFVwZGF0ZSBSZWdpc3Rlcg0KK0FUOTFDX1BXTUNfQ0gyX0NEVFlSICAgICAgRVFVICgweEZGRkNDMjQ0KSA7LSAoUFdNQ19DSDIpIENoYW5uZWwgRHV0eSBDeWNsZSBSZWdpc3Rlcg0KKy8vIC0gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQV01DX0NIMSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorQVQ5MUNfUFdNQ19DSDFfUmVzZXJ2ZWQgICBFUVUgKDB4RkZGQ0MyMzQpIDstIChQV01DX0NIMSkgUmVzZXJ2ZWQNCitBVDkxQ19QV01DX0NIMV9DVVBEUiAgICAgIEVRVSAoMHhGRkZDQzIzMCkgOy0gKFBXTUNfQ0gxKSBDaGFubmVsIFVwZGF0ZSBSZWdpc3Rlcg0KK0FUOTFDX1BXTUNfQ0gxX0NQUkRSICAgICAgRVFVICgweEZGRkNDMjI4KSA7LSAoUFdNQ19DSDEpIENoYW5uZWwgUGVyaW9kIFJlZ2lzdGVyDQorQVQ5MUNfUFdNQ19DSDFfQ0NOVFIgICAgICBFUVUgKDB4RkZGQ0MyMkMpIDstIChQV01DX0NIMSkgQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyDQorQVQ5MUNfUFdNQ19DSDFfQ0RUWVIgICAgICBFUVUgKDB4RkZGQ0MyMjQpIDstIChQV01DX0NIMSkgQ2hhbm5lbCBEdXR5IEN5Y2xlIFJlZ2lzdGVyDQorQVQ5MUNfUFdNQ19DSDFfQ01SICAgICAgICBFUVUgKDB4RkZGQ0MyMjApIDstIChQV01DX0NIMSkgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyDQorLy8gLSA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBXTUNfQ0gwIHBlcmlwaGVyYWwgPT09PT09PT09PSANCitBVDkxQ19QV01DX0NIMF9SZXNlcnZlZCAgIEVRVSAoMHhGRkZDQzIxNCkgOy0gKFBXTUNfQ0gwKSBSZXNlcnZlZA0KK0FUOTFDX1BXTUNfQ0gwX0NQUkRSICAgICAgRVFVICgweEZGRkNDMjA4KSA7LSAoUFdNQ19DSDApIENoYW5uZWwgUGVyaW9kIFJlZ2lzdGVyDQorQVQ5MUNfUFdNQ19DSDBfQ0RUWVIgICAgICBFUVUgKDB4RkZGQ0MyMDQpIDstIChQV01DX0NIMCkgQ2hhbm5lbCBEdXR5IEN5Y2xlIFJlZ2lzdGVyDQorQVQ5MUNfUFdNQ19DSDBfQ01SICAgICAgICBFUVUgKDB4RkZGQ0MyMDApIDstIChQV01DX0NIMCkgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyDQorQVQ5MUNfUFdNQ19DSDBfQ1VQRFIgICAgICBFUVUgKDB4RkZGQ0MyMTApIDstIChQV01DX0NIMCkgQ2hhbm5lbCBVcGRhdGUgUmVnaXN0ZXINCitBVDkxQ19QV01DX0NIMF9DQ05UUiAgICAgIEVRVSAoMHhGRkZDQzIwQykgOy0gKFBXTUNfQ0gwKSBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXINCisvLyAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUFdNQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorQVQ5MUNfUFdNQ19JRFIgICAgICAgICAgICBFUVUgKDB4RkZGQ0MwMTQpIDstIChQV01DKSBQV01DIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorQVQ5MUNfUFdNQ19ESVMgICAgICAgICAgICBFUVUgKDB4RkZGQ0MwMDgpIDstIChQV01DKSBQV01DIERpc2FibGUgUmVnaXN0ZXINCitBVDkxQ19QV01DX0lFUiAgICAgICAgICAgIEVRVSAoMHhGRkZDQzAxMCkgOy0gKFBXTUMpIFBXTUMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KK0FUOTFDX1BXTUNfVlIgICAgICAgICAgICAgRVFVICgweEZGRkNDMEZDKSA7LSAoUFdNQykgUFdNQyBWZXJzaW9uIFJlZ2lzdGVyDQorQVQ5MUNfUFdNQ19JU1IgICAgICAgICAgICBFUVUgKDB4RkZGQ0MwMUMpIDstIChQV01DKSBQV01DIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCitBVDkxQ19QV01DX1NSICAgICAgICAgICAgIEVRVSAoMHhGRkZDQzAwQykgOy0gKFBXTUMpIFBXTUMgU3RhdHVzIFJlZ2lzdGVyDQorQVQ5MUNfUFdNQ19JTVIgICAgICAgICAgICBFUVUgKDB4RkZGQ0MwMTgpIDstIChQV01DKSBQV01DIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorQVQ5MUNfUFdNQ19NUiAgICAgICAgICAgICBFUVUgKDB4RkZGQ0MwMDApIDstIChQV01DKSBQV01DIE1vZGUgUmVnaXN0ZXINCitBVDkxQ19QV01DX0VOQSAgICAgICAgICAgIEVRVSAoMHhGRkZDQzAwNCkgOy0gKFBXTUMpIFBXTUMgRW5hYmxlIFJlZ2lzdGVyDQorLy8gLSA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFVEUCBwZXJpcGhlcmFsID09PT09PT09PT0gDQorQVQ5MUNfVURQX0lNUiAgICAgICAgICAgICBFUVUgKDB4RkZGQjAwMTgpIDstIChVRFApIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorQVQ5MUNfVURQX0ZBRERSICAgICAgICAgICBFUVUgKDB4RkZGQjAwMDgpIDstIChVRFApIEZ1bmN0aW9uIEFkZHJlc3MgUmVnaXN0ZXINCitBVDkxQ19VRFBfTlVNICAgICAgICAgICAgIEVRVSAoMHhGRkZCMDAwMCkgOy0gKFVEUCkgRnJhbWUgTnVtYmVyIFJlZ2lzdGVyDQorQVQ5MUNfVURQX0ZEUiAgICAgICAgICAgICBFUVUgKDB4RkZGQjAwNTApIDstIChVRFApIEVuZHBvaW50IEZJRk8gRGF0YSBSZWdpc3Rlcg0KK0FUOTFDX1VEUF9JU1IgICAgICAgICAgICAgRVFVICgweEZGRkIwMDFDKSA7LSAoVURQKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorQVQ5MUNfVURQX0NTUiAgICAgICAgICAgICBFUVUgKDB4RkZGQjAwMzApIDstIChVRFApIEVuZHBvaW50IENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3Rlcg0KK0FUOTFDX1VEUF9JRFIgICAgICAgICAgICAgRVFVICgweEZGRkIwMDE0KSA7LSAoVURQKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KK0FUOTFDX1VEUF9JQ1IgICAgICAgICAgICAgRVFVICgweEZGRkIwMDIwKSA7LSAoVURQKSBJbnRlcnJ1cHQgQ2xlYXIgUmVnaXN0ZXINCitBVDkxQ19VRFBfUlNURVAgICAgICAgICAgIEVRVSAoMHhGRkZCMDAyOCkgOy0gKFVEUCkgUmVzZXQgRW5kcG9pbnQgUmVnaXN0ZXINCitBVDkxQ19VRFBfVFhWQyAgICAgICAgICAgIEVRVSAoMHhGRkZCMDA3NCkgOy0gKFVEUCkgVHJhbnNjZWl2ZXIgQ29udHJvbCBSZWdpc3Rlcg0KK0FUOTFDX1VEUF9HTEJTVEFURSAgICAgICAgRVFVICgweEZGRkIwMDA0KSA7LSAoVURQKSBHbG9iYWwgU3RhdGUgUmVnaXN0ZXINCitBVDkxQ19VRFBfSUVSICAgICAgICAgICAgIEVRVSAoMHhGRkZCMDAxMCkgOy0gKFVEUCkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKy8vIC0gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBUQzAgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KK0FUOTFDX1RDMF9TUiAgICAgICAgICAgICAgRVFVICgweEZGRkEwMDIwKSA7LSAoVEMwKSBTdGF0dXMgUmVnaXN0ZXINCitBVDkxQ19UQzBfUkMgICAgICAgICAgICAgIEVRVSAoMHhGRkZBMDAxQykgOy0gKFRDMCkgUmVnaXN0ZXIgQw0KK0FUOTFDX1RDMF9SQiAgICAgICAgICAgICAgRVFVICgweEZGRkEwMDE4KSA7LSAoVEMwKSBSZWdpc3RlciBCDQorQVQ5MUNfVEMwX0NDUiAgICAgICAgICAgICBFUVUgKDB4RkZGQTAwMDApIDstIChUQzApIENoYW5uZWwgQ29udHJvbCBSZWdpc3Rlcg0KK0FUOTFDX1RDMF9DTVIgICAgICAgICAgICAgRVFVICgweEZGRkEwMDA0KSA7LSAoVEMwKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXIgKENhcHR1cmUgTW9kZSAvIFdhdmVmb3JtIE1vZGUpDQorQVQ5MUNfVEMwX0lFUiAgICAgICAgICAgICBFUVUgKDB4RkZGQTAwMjQpIDstIChUQzApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCitBVDkxQ19UQzBfUkEgICAgICAgICAgICAgIEVRVSAoMHhGRkZBMDAxNCkgOy0gKFRDMCkgUmVnaXN0ZXIgQQ0KK0FUOTFDX1RDMF9JRFIgICAgICAgICAgICAgRVFVICgweEZGRkEwMDI4KSA7LSAoVEMwKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KK0FUOTFDX1RDMF9DViAgICAgICAgICAgICAgRVFVICgweEZGRkEwMDEwKSA7LSAoVEMwKSBDb3VudGVyIFZhbHVlDQorQVQ5MUNfVEMwX0lNUiAgICAgICAgICAgICBFUVUgKDB4RkZGQTAwMkMpIDstIChUQzApIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorLy8gLSA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRDMSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorQVQ5MUNfVEMxX1JCICAgICAgICAgICAgICBFUVUgKDB4RkZGQTAwNTgpIDstIChUQzEpIFJlZ2lzdGVyIEINCitBVDkxQ19UQzFfQ0NSICAgICAgICAgICAgIEVRVSAoMHhGRkZBMDA0MCkgOy0gKFRDMSkgQ2hhbm5lbCBDb250cm9sIFJlZ2lzdGVyDQorQVQ5MUNfVEMxX0lFUiAgICAgICAgICAgICBFUVUgKDB4RkZGQTAwNjQpIDstIChUQzEpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCitBVDkxQ19UQzFfSURSICAgICAgICAgICAgIEVRVSAoMHhGRkZBMDA2OCkgOy0gKFRDMSkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCitBVDkxQ19UQzFfU1IgICAgICAgICAgICAgIEVRVSAoMHhGRkZBMDA2MCkgOy0gKFRDMSkgU3RhdHVzIFJlZ2lzdGVyDQorQVQ5MUNfVEMxX0NNUiAgICAgICAgICAgICBFUVUgKDB4RkZGQTAwNDQpIDstIChUQzEpIENoYW5uZWwgTW9kZSBSZWdpc3RlciAoQ2FwdHVyZSBNb2RlIC8gV2F2ZWZvcm0gTW9kZSkNCitBVDkxQ19UQzFfUkEgICAgICAgICAgICAgIEVRVSAoMHhGRkZBMDA1NCkgOy0gKFRDMSkgUmVnaXN0ZXIgQQ0KK0FUOTFDX1RDMV9SQyAgICAgICAgICAgICAgRVFVICgweEZGRkEwMDVDKSA7LSAoVEMxKSBSZWdpc3RlciBDDQorQVQ5MUNfVEMxX0lNUiAgICAgICAgICAgICBFUVUgKDB4RkZGQTAwNkMpIDstIChUQzEpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorQVQ5MUNfVEMxX0NWICAgICAgICAgICAgICBFUVUgKDB4RkZGQTAwNTApIDstIChUQzEpIENvdW50ZXIgVmFsdWUNCisvLyAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVEMyIHBlcmlwaGVyYWwgPT09PT09PT09PSANCitBVDkxQ19UQzJfQ01SICAgICAgICAgICAgIEVRVSAoMHhGRkZBMDA4NCkgOy0gKFRDMikgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyIChDYXB0dXJlIE1vZGUgLyBXYXZlZm9ybSBNb2RlKQ0KK0FUOTFDX1RDMl9DQ1IgICAgICAgICAgICAgRVFVICgweEZGRkEwMDgwKSA7LSAoVEMyKSBDaGFubmVsIENvbnRyb2wgUmVnaXN0ZXINCitBVDkxQ19UQzJfQ1YgICAgICAgICAgICAgIEVRVSAoMHhGRkZBMDA5MCkgOy0gKFRDMikgQ291bnRlciBWYWx1ZQ0KK0FUOTFDX1RDMl9SQSAgICAgICAgICAgICAgRVFVICgweEZGRkEwMDk0KSA7LSAoVEMyKSBSZWdpc3RlciBBDQorQVQ5MUNfVEMyX1JCICAgICAgICAgICAgICBFUVUgKDB4RkZGQTAwOTgpIDstIChUQzIpIFJlZ2lzdGVyIEINCitBVDkxQ19UQzJfSURSICAgICAgICAgICAgIEVRVSAoMHhGRkZBMDBBOCkgOy0gKFRDMikgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCitBVDkxQ19UQzJfSU1SICAgICAgICAgICAgIEVRVSAoMHhGRkZBMDBBQykgOy0gKFRDMikgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCitBVDkxQ19UQzJfUkMgICAgICAgICAgICAgIEVRVSAoMHhGRkZBMDA5QykgOy0gKFRDMikgUmVnaXN0ZXIgQw0KK0FUOTFDX1RDMl9JRVIgICAgICAgICAgICAgRVFVICgweEZGRkEwMEE0KSA7LSAoVEMyKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorQVQ5MUNfVEMyX1NSICAgICAgICAgICAgICBFUVUgKDB4RkZGQTAwQTApIDstIChUQzIpIFN0YXR1cyBSZWdpc3Rlcg0KKy8vIC0gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBUQ0IgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KK0FUOTFDX1RDQl9CTVIgICAgICAgICAgICAgRVFVICgweEZGRkEwMEM0KSA7LSAoVENCKSBUQyBCbG9jayBNb2RlIFJlZ2lzdGVyDQorQVQ5MUNfVENCX0JDUiAgICAgICAgICAgICBFUVUgKDB4RkZGQTAwQzApIDstIChUQ0IpIFRDIEJsb2NrIENvbnRyb2wgUmVnaXN0ZXINCisvLyAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CMCBwZXJpcGhlcmFsID09PT09PT09PT0gDQorQVQ5MUNfQ0FOX01CMF9NREwgICAgICAgICBFUVUgKDB4RkZGRDAyMTQpIDstIChDQU5fTUIwKSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyDQorQVQ5MUNfQ0FOX01CMF9NQU0gICAgICAgICBFUVUgKDB4RkZGRDAyMDQpIDstIChDQU5fTUIwKSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3Rlcg0KK0FUOTFDX0NBTl9NQjBfTUNSICAgICAgICAgRVFVICgweEZGRkQwMjFDKSA7LSAoQ0FOX01CMCkgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyDQorQVQ5MUNfQ0FOX01CMF9NSUQgICAgICAgICBFUVUgKDB4RkZGRDAyMDgpIDstIChDQU5fTUIwKSBNYWlsQm94IElEIFJlZ2lzdGVyDQorQVQ5MUNfQ0FOX01CMF9NU1IgICAgICAgICBFUVUgKDB4RkZGRDAyMTApIDstIChDQU5fTUIwKSBNYWlsQm94IFN0YXR1cyBSZWdpc3Rlcg0KK0FUOTFDX0NBTl9NQjBfTUZJRCAgICAgICAgRVFVICgweEZGRkQwMjBDKSA7LSAoQ0FOX01CMCkgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXINCitBVDkxQ19DQU5fTUIwX01ESCAgICAgICAgIEVRVSAoMHhGRkZEMDIxOCkgOy0gKENBTl9NQjApIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyDQorQVQ5MUNfQ0FOX01CMF9NTVIgICAgICAgICBFUVUgKDB4RkZGRDAyMDApIDstIChDQU5fTUIwKSBNYWlsQm94IE1vZGUgUmVnaXN0ZXINCisvLyAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CMSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorQVQ5MUNfQ0FOX01CMV9NREwgICAgICAgICBFUVUgKDB4RkZGRDAyMzQpIDstIChDQU5fTUIxKSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyDQorQVQ5MUNfQ0FOX01CMV9NSUQgICAgICAgICBFUVUgKDB4RkZGRDAyMjgpIDstIChDQU5fTUIxKSBNYWlsQm94IElEIFJlZ2lzdGVyDQorQVQ5MUNfQ0FOX01CMV9NTVIgICAgICAgICBFUVUgKDB4RkZGRDAyMjApIDstIChDQU5fTUIxKSBNYWlsQm94IE1vZGUgUmVnaXN0ZXINCitBVDkxQ19DQU5fTUIxX01TUiAgICAgICAgIEVRVSAoMHhGRkZEMDIzMCkgOy0gKENBTl9NQjEpIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyDQorQVQ5MUNfQ0FOX01CMV9NQU0gICAgICAgICBFUVUgKDB4RkZGRDAyMjQpIDstIChDQU5fTUIxKSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3Rlcg0KK0FUOTFDX0NBTl9NQjFfTURIICAgICAgICAgRVFVICgweEZGRkQwMjM4KSA7LSAoQ0FOX01CMSkgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXINCitBVDkxQ19DQU5fTUIxX01DUiAgICAgICAgIEVRVSAoMHhGRkZEMDIzQykgOy0gKENBTl9NQjEpIE1haWxCb3ggQ29udHJvbCBSZWdpc3Rlcg0KK0FUOTFDX0NBTl9NQjFfTUZJRCAgICAgICAgRVFVICgweEZGRkQwMjJDKSA7LSAoQ0FOX01CMSkgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXINCisvLyAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CMiBwZXJpcGhlcmFsID09PT09PT09PT0gDQorQVQ5MUNfQ0FOX01CMl9NQ1IgICAgICAgICBFUVUgKDB4RkZGRDAyNUMpIDstIChDQU5fTUIyKSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXINCitBVDkxQ19DQU5fTUIyX01ESCAgICAgICAgIEVRVSAoMHhGRkZEMDI1OCkgOy0gKENBTl9NQjIpIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyDQorQVQ5MUNfQ0FOX01CMl9NSUQgICAgICAgICBFUVUgKDB4RkZGRDAyNDgpIDstIChDQU5fTUIyKSBNYWlsQm94IElEIFJlZ2lzdGVyDQorQVQ5MUNfQ0FOX01CMl9NREwgICAgICAgICBFUVUgKDB4RkZGRDAyNTQpIDstIChDQU5fTUIyKSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyDQorQVQ5MUNfQ0FOX01CMl9NTVIgICAgICAgICBFUVUgKDB4RkZGRDAyNDApIDstIChDQU5fTUIyKSBNYWlsQm94IE1vZGUgUmVnaXN0ZXINCitBVDkxQ19DQU5fTUIyX01BTSAgICAgICAgIEVRVSAoMHhGRkZEMDI0NCkgOy0gKENBTl9NQjIpIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyDQorQVQ5MUNfQ0FOX01CMl9NRklEICAgICAgICBFUVUgKDB4RkZGRDAyNEMpIDstIChDQU5fTUIyKSBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3Rlcg0KK0FUOTFDX0NBTl9NQjJfTVNSICAgICAgICAgRVFVICgweEZGRkQwMjUwKSA7LSAoQ0FOX01CMikgTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXINCisvLyAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CMyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorQVQ5MUNfQ0FOX01CM19NRklEICAgICAgICBFUVUgKDB4RkZGRDAyNkMpIDstIChDQU5fTUIzKSBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3Rlcg0KK0FUOTFDX0NBTl9NQjNfTUFNICAgICAgICAgRVFVICgweEZGRkQwMjY0KSA7LSAoQ0FOX01CMykgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXINCitBVDkxQ19DQU5fTUIzX01JRCAgICAgICAgIEVRVSAoMHhGRkZEMDI2OCkgOy0gKENBTl9NQjMpIE1haWxCb3ggSUQgUmVnaXN0ZXINCitBVDkxQ19DQU5fTUIzX01DUiAgICAgICAgIEVRVSAoMHhGRkZEMDI3QykgOy0gKENBTl9NQjMpIE1haWxCb3ggQ29udHJvbCBSZWdpc3Rlcg0KK0FUOTFDX0NBTl9NQjNfTU1SICAgICAgICAgRVFVICgweEZGRkQwMjYwKSA7LSAoQ0FOX01CMykgTWFpbEJveCBNb2RlIFJlZ2lzdGVyDQorQVQ5MUNfQ0FOX01CM19NU1IgICAgICAgICBFUVUgKDB4RkZGRDAyNzApIDstIChDQU5fTUIzKSBNYWlsQm94IFN0YXR1cyBSZWdpc3Rlcg0KK0FUOTFDX0NBTl9NQjNfTURMICAgICAgICAgRVFVICgweEZGRkQwMjc0KSA7LSAoQ0FOX01CMykgTWFpbEJveCBEYXRhIExvdyBSZWdpc3Rlcg0KK0FUOTFDX0NBTl9NQjNfTURIICAgICAgICAgRVFVICgweEZGRkQwMjc4KSA7LSAoQ0FOX01CMykgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXINCisvLyAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CNCBwZXJpcGhlcmFsID09PT09PT09PT0gDQorQVQ5MUNfQ0FOX01CNF9NSUQgICAgICAgICBFUVUgKDB4RkZGRDAyODgpIDstIChDQU5fTUI0KSBNYWlsQm94IElEIFJlZ2lzdGVyDQorQVQ5MUNfQ0FOX01CNF9NTVIgICAgICAgICBFUVUgKDB4RkZGRDAyODApIDstIChDQU5fTUI0KSBNYWlsQm94IE1vZGUgUmVnaXN0ZXINCitBVDkxQ19DQU5fTUI0X01ESCAgICAgICAgIEVRVSAoMHhGRkZEMDI5OCkgOy0gKENBTl9NQjQpIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyDQorQVQ5MUNfQ0FOX01CNF9NRklEICAgICAgICBFUVUgKDB4RkZGRDAyOEMpIDstIChDQU5fTUI0KSBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3Rlcg0KK0FUOTFDX0NBTl9NQjRfTVNSICAgICAgICAgRVFVICgweEZGRkQwMjkwKSA7LSAoQ0FOX01CNCkgTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXINCitBVDkxQ19DQU5fTUI0X01DUiAgICAgICAgIEVRVSAoMHhGRkZEMDI5QykgOy0gKENBTl9NQjQpIE1haWxCb3ggQ29udHJvbCBSZWdpc3Rlcg0KK0FUOTFDX0NBTl9NQjRfTURMICAgICAgICAgRVFVICgweEZGRkQwMjk0KSA7LSAoQ0FOX01CNCkgTWFpbEJveCBEYXRhIExvdyBSZWdpc3Rlcg0KK0FUOTFDX0NBTl9NQjRfTUFNICAgICAgICAgRVFVICgweEZGRkQwMjg0KSA7LSAoQ0FOX01CNCkgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXINCisvLyAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CNSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorQVQ5MUNfQ0FOX01CNV9NU1IgICAgICAgICBFUVUgKDB4RkZGRDAyQjApIDstIChDQU5fTUI1KSBNYWlsQm94IFN0YXR1cyBSZWdpc3Rlcg0KK0FUOTFDX0NBTl9NQjVfTUNSICAgICAgICAgRVFVICgweEZGRkQwMkJDKSA7LSAoQ0FOX01CNSkgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyDQorQVQ5MUNfQ0FOX01CNV9NRklEICAgICAgICBFUVUgKDB4RkZGRDAyQUMpIDstIChDQU5fTUI1KSBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3Rlcg0KK0FUOTFDX0NBTl9NQjVfTURIICAgICAgICAgRVFVICgweEZGRkQwMkI4KSA7LSAoQ0FOX01CNSkgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXINCitBVDkxQ19DQU5fTUI1X01JRCAgICAgICAgIEVRVSAoMHhGRkZEMDJBOCkgOy0gKENBTl9NQjUpIE1haWxCb3ggSUQgUmVnaXN0ZXINCitBVDkxQ19DQU5fTUI1X01NUiAgICAgICAgIEVRVSAoMHhGRkZEMDJBMCkgOy0gKENBTl9NQjUpIE1haWxCb3ggTW9kZSBSZWdpc3Rlcg0KK0FUOTFDX0NBTl9NQjVfTURMICAgICAgICAgRVFVICgweEZGRkQwMkI0KSA7LSAoQ0FOX01CNSkgTWFpbEJveCBEYXRhIExvdyBSZWdpc3Rlcg0KK0FUOTFDX0NBTl9NQjVfTUFNICAgICAgICAgRVFVICgweEZGRkQwMkE0KSA7LSAoQ0FOX01CNSkgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXINCisvLyAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CNiBwZXJpcGhlcmFsID09PT09PT09PT0gDQorQVQ5MUNfQ0FOX01CNl9NRklEICAgICAgICBFUVUgKDB4RkZGRDAyQ0MpIDstIChDQU5fTUI2KSBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3Rlcg0KK0FUOTFDX0NBTl9NQjZfTUlEICAgICAgICAgRVFVICgweEZGRkQwMkM4KSA7LSAoQ0FOX01CNikgTWFpbEJveCBJRCBSZWdpc3Rlcg0KK0FUOTFDX0NBTl9NQjZfTUFNICAgICAgICAgRVFVICgweEZGRkQwMkM0KSA7LSAoQ0FOX01CNikgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXINCitBVDkxQ19DQU5fTUI2X01TUiAgICAgICAgIEVRVSAoMHhGRkZEMDJEMCkgOy0gKENBTl9NQjYpIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyDQorQVQ5MUNfQ0FOX01CNl9NREwgICAgICAgICBFUVUgKDB4RkZGRDAyRDQpIDstIChDQU5fTUI2KSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyDQorQVQ5MUNfQ0FOX01CNl9NQ1IgICAgICAgICBFUVUgKDB4RkZGRDAyREMpIDstIChDQU5fTUI2KSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXINCitBVDkxQ19DQU5fTUI2X01ESCAgICAgICAgIEVRVSAoMHhGRkZEMDJEOCkgOy0gKENBTl9NQjYpIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyDQorQVQ5MUNfQ0FOX01CNl9NTVIgICAgICAgICBFUVUgKDB4RkZGRDAyQzApIDstIChDQU5fTUI2KSBNYWlsQm94IE1vZGUgUmVnaXN0ZXINCisvLyAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CNyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorQVQ5MUNfQ0FOX01CN19NQ1IgICAgICAgICBFUVUgKDB4RkZGRDAyRkMpIDstIChDQU5fTUI3KSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXINCitBVDkxQ19DQU5fTUI3X01ESCAgICAgICAgIEVRVSAoMHhGRkZEMDJGOCkgOy0gKENBTl9NQjcpIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyDQorQVQ5MUNfQ0FOX01CN19NRklEICAgICAgICBFUVUgKDB4RkZGRDAyRUMpIDstIChDQU5fTUI3KSBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3Rlcg0KK0FUOTFDX0NBTl9NQjdfTURMICAgICAgICAgRVFVICgweEZGRkQwMkY0KSA7LSAoQ0FOX01CNykgTWFpbEJveCBEYXRhIExvdyBSZWdpc3Rlcg0KK0FUOTFDX0NBTl9NQjdfTUlEICAgICAgICAgRVFVICgweEZGRkQwMkU4KSA7LSAoQ0FOX01CNykgTWFpbEJveCBJRCBSZWdpc3Rlcg0KK0FUOTFDX0NBTl9NQjdfTU1SICAgICAgICAgRVFVICgweEZGRkQwMkUwKSA7LSAoQ0FOX01CNykgTWFpbEJveCBNb2RlIFJlZ2lzdGVyDQorQVQ5MUNfQ0FOX01CN19NQU0gICAgICAgICBFUVUgKDB4RkZGRDAyRTQpIDstIChDQU5fTUI3KSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3Rlcg0KK0FUOTFDX0NBTl9NQjdfTVNSICAgICAgICAgRVFVICgweEZGRkQwMkYwKSA7LSAoQ0FOX01CNykgTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXINCisvLyAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOIHBlcmlwaGVyYWwgPT09PT09PT09PSANCitBVDkxQ19DQU5fVENSICAgICAgICAgICAgIEVRVSAoMHhGRkZEMDAyNCkgOy0gKENBTikgVHJhbnNmZXIgQ29tbWFuZCBSZWdpc3Rlcg0KK0FUOTFDX0NBTl9JTVIgICAgICAgICAgICAgRVFVICgweEZGRkQwMDBDKSA7LSAoQ0FOKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KK0FUOTFDX0NBTl9JRVIgICAgICAgICAgICAgRVFVICgweEZGRkQwMDA0KSA7LSAoQ0FOKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorQVQ5MUNfQ0FOX0VDUiAgICAgICAgICAgICBFUVUgKDB4RkZGRDAwMjApIDstIChDQU4pIEVycm9yIENvdW50ZXIgUmVnaXN0ZXINCitBVDkxQ19DQU5fVElNRVNUUCAgICAgICAgIEVRVSAoMHhGRkZEMDAxQykgOy0gKENBTikgVGltZSBTdGFtcCBSZWdpc3Rlcg0KK0FUOTFDX0NBTl9NUiAgICAgICAgICAgICAgRVFVICgweEZGRkQwMDAwKSA7LSAoQ0FOKSBNb2RlIFJlZ2lzdGVyDQorQVQ5MUNfQ0FOX0lEUiAgICAgICAgICAgICBFUVUgKDB4RkZGRDAwMDgpIDstIChDQU4pIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorQVQ5MUNfQ0FOX0FDUiAgICAgICAgICAgICBFUVUgKDB4RkZGRDAwMjgpIDstIChDQU4pIEFib3J0IENvbW1hbmQgUmVnaXN0ZXINCitBVDkxQ19DQU5fVElNICAgICAgICAgICAgIEVRVSAoMHhGRkZEMDAxOCkgOy0gKENBTikgVGltZXIgUmVnaXN0ZXINCitBVDkxQ19DQU5fU1IgICAgICAgICAgICAgIEVRVSAoMHhGRkZEMDAxMCkgOy0gKENBTikgU3RhdHVzIFJlZ2lzdGVyDQorQVQ5MUNfQ0FOX0JSICAgICAgICAgICAgICBFUVUgKDB4RkZGRDAwMTQpIDstIChDQU4pIEJhdWRyYXRlIFJlZ2lzdGVyDQorQVQ5MUNfQ0FOX1ZSICAgICAgICAgICAgICBFUVUgKDB4RkZGRDAwRkMpIDstIChDQU4pIFZlcnNpb24gUmVnaXN0ZXINCisvLyAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgRU1BQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorQVQ5MUNfRU1BQ19JU1IgICAgICAgICAgICBFUVUgKDB4RkZGREMwMjQpIDstIChFTUFDKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorQVQ5MUNfRU1BQ19TQTRIICAgICAgICAgICBFUVUgKDB4RkZGREMwQjQpIDstIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDQgVG9wLCBMYXN0IDIgYnl0ZXMNCitBVDkxQ19FTUFDX1NBMUwgICAgICAgICAgIEVRVSAoMHhGRkZEQzA5OCkgOy0gKEVNQUMpIFNwZWNpZmljIEFkZHJlc3MgMSBCb3R0b20sIEZpcnN0IDQgYnl0ZXMNCitBVDkxQ19FTUFDX0VMRSAgICAgICAgICAgIEVRVSAoMHhGRkZEQzA3OCkgOy0gKEVNQUMpIEV4Y2Vzc2l2ZSBMZW5ndGggRXJyb3JzIFJlZ2lzdGVyDQorQVQ5MUNfRU1BQ19MQ09MICAgICAgICAgICBFUVUgKDB4RkZGREMwNUMpIDstIChFTUFDKSBMYXRlIENvbGxpc2lvbiBSZWdpc3Rlcg0KK0FUOTFDX0VNQUNfUkxFICAgICAgICAgICAgRVFVICgweEZGRkRDMDg4KSA7LSAoRU1BQykgUmVjZWl2ZSBMZW5ndGggRmllbGQgTWlzbWF0Y2ggUmVnaXN0ZXINCitBVDkxQ19FTUFDX1dPTCAgICAgICAgICAgIEVRVSAoMHhGRkZEQzBDNCkgOy0gKEVNQUMpIFdha2UgT24gTEFOIFJlZ2lzdGVyDQorQVQ5MUNfRU1BQ19EVEYgICAgICAgICAgICBFUVUgKDB4RkZGREMwNTgpIDstIChFTUFDKSBEZWZlcnJlZCBUcmFuc21pc3Npb24gRnJhbWUgUmVnaXN0ZXINCitBVDkxQ19FTUFDX1RVTkQgICAgICAgICAgIEVRVSAoMHhGRkZEQzA2NCkgOy0gKEVNQUMpIFRyYW5zbWl0IFVuZGVycnVuIEVycm9yIFJlZ2lzdGVyDQorQVQ5MUNfRU1BQ19OQ1IgICAgICAgICAgICBFUVUgKDB4RkZGREMwMDApIDstIChFTUFDKSBOZXR3b3JrIENvbnRyb2wgUmVnaXN0ZXINCitBVDkxQ19FTUFDX1NBNEwgICAgICAgICAgIEVRVSAoMHhGRkZEQzBCMCkgOy0gKEVNQUMpIFNwZWNpZmljIEFkZHJlc3MgNCBCb3R0b20sIEZpcnN0IDQgYnl0ZXMNCitBVDkxQ19FTUFDX1JTUiAgICAgICAgICAgIEVRVSAoMHhGRkZEQzAyMCkgOy0gKEVNQUMpIFJlY2VpdmUgU3RhdHVzIFJlZ2lzdGVyDQorQVQ5MUNfRU1BQ19TQTNMICAgICAgICAgICBFUVUgKDB4RkZGREMwQTgpIDstIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDMgQm90dG9tLCBGaXJzdCA0IGJ5dGVzDQorQVQ5MUNfRU1BQ19UU1IgICAgICAgICAgICBFUVUgKDB4RkZGREMwMTQpIDstIChFTUFDKSBUcmFuc21pdCBTdGF0dXMgUmVnaXN0ZXINCitBVDkxQ19FTUFDX0lEUiAgICAgICAgICAgIEVRVSAoMHhGRkZEQzAyQykgOy0gKEVNQUMpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorQVQ5MUNfRU1BQ19SU0UgICAgICAgICAgICBFUVUgKDB4RkZGREMwNzQpIDstIChFTUFDKSBSZWNlaXZlIFN5bWJvbCBFcnJvcnMgUmVnaXN0ZXINCitBVDkxQ19FTUFDX0VDT0wgICAgICAgICAgIEVRVSAoMHhGRkZEQzA2MCkgOy0gKEVNQUMpIEV4Y2Vzc2l2ZSBDb2xsaXNpb24gUmVnaXN0ZXINCitBVDkxQ19FTUFDX1RJRCAgICAgICAgICAgIEVRVSAoMHhGRkZEQzBCOCkgOy0gKEVNQUMpIFR5cGUgSUQgQ2hlY2tpbmcgUmVnaXN0ZXINCitBVDkxQ19FTUFDX0hSQiAgICAgICAgICAgIEVRVSAoMHhGRkZEQzA5MCkgOy0gKEVNQUMpIEhhc2ggQWRkcmVzcyBCb3R0b21bMzE6MF0NCitBVDkxQ19FTUFDX1RCUVAgICAgICAgICAgIEVRVSAoMHhGRkZEQzAxQykgOy0gKEVNQUMpIFRyYW5zbWl0IEJ1ZmZlciBRdWV1ZSBQb2ludGVyDQorQVQ5MUNfRU1BQ19VU1JJTyAgICAgICAgICBFUVUgKDB4RkZGREMwQzApIDstIChFTUFDKSBVU0VSIElucHV0L091dHB1dCBSZWdpc3Rlcg0KK0FUOTFDX0VNQUNfUFRSICAgICAgICAgICAgRVFVICgweEZGRkRDMDM4KSA7LSAoRU1BQykgUGF1c2UgVGltZSBSZWdpc3Rlcg0KK0FUOTFDX0VNQUNfU0EySCAgICAgICAgICAgRVFVICgweEZGRkRDMEE0KSA7LSAoRU1BQykgU3BlY2lmaWMgQWRkcmVzcyAyIFRvcCwgTGFzdCAyIGJ5dGVzDQorQVQ5MUNfRU1BQ19ST1YgICAgICAgICAgICBFUVUgKDB4RkZGREMwNzApIDstIChFTUFDKSBSZWNlaXZlIE92ZXJydW4gRXJyb3JzIFJlZ2lzdGVyDQorQVQ5MUNfRU1BQ19BTEUgICAgICAgICAgICBFUVUgKDB4RkZGREMwNTQpIDstIChFTUFDKSBBbGlnbm1lbnQgRXJyb3IgUmVnaXN0ZXINCitBVDkxQ19FTUFDX1JKQSAgICAgICAgICAgIEVRVSAoMHhGRkZEQzA3QykgOy0gKEVNQUMpIFJlY2VpdmUgSmFiYmVycyBSZWdpc3Rlcg0KK0FUOTFDX0VNQUNfUkJRUCAgICAgICAgICAgRVFVICgweEZGRkRDMDE4KSA7LSAoRU1BQykgUmVjZWl2ZSBCdWZmZXIgUXVldWUgUG9pbnRlcg0KK0FUOTFDX0VNQUNfVFBGICAgICAgICAgICAgRVFVICgweEZGRkRDMDhDKSA7LSAoRU1BQykgVHJhbnNtaXR0ZWQgUGF1c2UgRnJhbWVzIFJlZ2lzdGVyDQorQVQ5MUNfRU1BQ19OQ0ZHUiAgICAgICAgICBFUVUgKDB4RkZGREMwMDQpIDstIChFTUFDKSBOZXR3b3JrIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXINCitBVDkxQ19FTUFDX0hSVCAgICAgICAgICAgIEVRVSAoMHhGRkZEQzA5NCkgOy0gKEVNQUMpIEhhc2ggQWRkcmVzcyBUb3BbNjM6MzJdDQorQVQ5MUNfRU1BQ19VU0YgICAgICAgICAgICBFUVUgKDB4RkZGREMwODApIDstIChFTUFDKSBVbmRlcnNpemUgRnJhbWVzIFJlZ2lzdGVyDQorQVQ5MUNfRU1BQ19GQ1NFICAgICAgICAgICBFUVUgKDB4RkZGREMwNTApIDstIChFTUFDKSBGcmFtZSBDaGVjayBTZXF1ZW5jZSBFcnJvciBSZWdpc3Rlcg0KK0FUOTFDX0VNQUNfVFBRICAgICAgICAgICAgRVFVICgweEZGRkRDMEJDKSA7LSAoRU1BQykgVHJhbnNtaXQgUGF1c2UgUXVhbnR1bSBSZWdpc3Rlcg0KK0FUOTFDX0VNQUNfTUFOICAgICAgICAgICAgRVFVICgweEZGRkRDMDM0KSA7LSAoRU1BQykgUEhZIE1haW50ZW5hbmNlIFJlZ2lzdGVyDQorQVQ5MUNfRU1BQ19GVE8gICAgICAgICAgICBFUVUgKDB4RkZGREMwNDApIDstIChFTUFDKSBGcmFtZXMgVHJhbnNtaXR0ZWQgT0sgUmVnaXN0ZXINCitBVDkxQ19FTUFDX1JFViAgICAgICAgICAgIEVRVSAoMHhGRkZEQzBGQykgOy0gKEVNQUMpIFJldmlzaW9uIFJlZ2lzdGVyDQorQVQ5MUNfRU1BQ19JTVIgICAgICAgICAgICBFUVUgKDB4RkZGREMwMzApIDstIChFTUFDKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KK0FUOTFDX0VNQUNfU0NGICAgICAgICAgICAgRVFVICgweEZGRkRDMDQ0KSA7LSAoRU1BQykgU2luZ2xlIENvbGxpc2lvbiBGcmFtZSBSZWdpc3Rlcg0KK0FUOTFDX0VNQUNfUEZSICAgICAgICAgICAgRVFVICgweEZGRkRDMDNDKSA7LSAoRU1BQykgUGF1c2UgRnJhbWVzIHJlY2VpdmVkIFJlZ2lzdGVyDQorQVQ5MUNfRU1BQ19NQ0YgICAgICAgICAgICBFUVUgKDB4RkZGREMwNDgpIDstIChFTUFDKSBNdWx0aXBsZSBDb2xsaXNpb24gRnJhbWUgUmVnaXN0ZXINCitBVDkxQ19FTUFDX05TUiAgICAgICAgICAgIEVRVSAoMHhGRkZEQzAwOCkgOy0gKEVNQUMpIE5ldHdvcmsgU3RhdHVzIFJlZ2lzdGVyDQorQVQ5MUNfRU1BQ19TQTJMICAgICAgICAgICBFUVUgKDB4RkZGREMwQTApIDstIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDIgQm90dG9tLCBGaXJzdCA0IGJ5dGVzDQorQVQ5MUNfRU1BQ19GUk8gICAgICAgICAgICBFUVUgKDB4RkZGREMwNEMpIDstIChFTUFDKSBGcmFtZXMgUmVjZWl2ZWQgT0sgUmVnaXN0ZXINCitBVDkxQ19FTUFDX0lFUiAgICAgICAgICAgIEVRVSAoMHhGRkZEQzAyOCkgOy0gKEVNQUMpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCitBVDkxQ19FTUFDX1NBMUggICAgICAgICAgIEVRVSAoMHhGRkZEQzA5QykgOy0gKEVNQUMpIFNwZWNpZmljIEFkZHJlc3MgMSBUb3AsIExhc3QgMiBieXRlcw0KK0FUOTFDX0VNQUNfQ1NFICAgICAgICAgICAgRVFVICgweEZGRkRDMDY4KSA7LSAoRU1BQykgQ2FycmllciBTZW5zZSBFcnJvciBSZWdpc3Rlcg0KK0FUOTFDX0VNQUNfU0EzSCAgICAgICAgICAgRVFVICgweEZGRkRDMEFDKSA7LSAoRU1BQykgU3BlY2lmaWMgQWRkcmVzcyAzIFRvcCwgTGFzdCAyIGJ5dGVzDQorQVQ5MUNfRU1BQ19SUkUgICAgICAgICAgICBFUVUgKDB4RkZGREMwNkMpIDstIChFTUFDKSBSZWNlaXZlIFJlc3NvdXJjZSBFcnJvciBSZWdpc3Rlcg0KK0FUOTFDX0VNQUNfU1RFICAgICAgICAgICAgRVFVICgweEZGRkRDMDg0KSA7LSAoRU1BQykgU1FFIFRlc3QgRXJyb3IgUmVnaXN0ZXINCisvLyAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX0FEQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorQVQ5MUNfQURDX1BUU1IgICAgICAgICAgICBFUVUgKDB4RkZGRDgxMjQpIDstIChQRENfQURDKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorQVQ5MUNfQURDX1BUQ1IgICAgICAgICAgICBFUVUgKDB4RkZGRDgxMjApIDstIChQRENfQURDKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KK0FUOTFDX0FEQ19UTlBSICAgICAgICAgICAgRVFVICgweEZGRkQ4MTE4KSA7LSAoUERDX0FEQykgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorQVQ5MUNfQURDX1ROQ1IgICAgICAgICAgICBFUVUgKDB4RkZGRDgxMUMpIDstIChQRENfQURDKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCitBVDkxQ19BRENfUk5QUiAgICAgICAgICAgIEVRVSAoMHhGRkZEODExMCkgOy0gKFBEQ19BREMpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorQVQ5MUNfQURDX1JOQ1IgICAgICAgICAgICBFUVUgKDB4RkZGRDgxMTQpIDstIChQRENfQURDKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KK0FUOTFDX0FEQ19SUFIgICAgICAgICAgICAgRVFVICgweEZGRkQ4MTAwKSA7LSAoUERDX0FEQykgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorQVQ5MUNfQURDX1RDUiAgICAgICAgICAgICBFUVUgKDB4RkZGRDgxMEMpIDstIChQRENfQURDKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorQVQ5MUNfQURDX1RQUiAgICAgICAgICAgICBFUVUgKDB4RkZGRDgxMDgpIDstIChQRENfQURDKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorQVQ5MUNfQURDX1JDUiAgICAgICAgICAgICBFUVUgKDB4RkZGRDgxMDQpIDstIChQRENfQURDKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisvLyAtID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQURDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCitBVDkxQ19BRENfQ0RSMiAgICAgICAgICAgIEVRVSAoMHhGRkZEODAzOCkgOy0gKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAyDQorQVQ5MUNfQURDX0NEUjMgICAgICAgICAgICBFUVUgKDB4RkZGRDgwM0MpIDstIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMw0KK0FUOTFDX0FEQ19DRFIwICAgICAgICAgICAgRVFVICgweEZGRkQ4MDMwKSA7LSAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDANCitBVDkxQ19BRENfQ0RSNSAgICAgICAgICAgIEVRVSAoMHhGRkZEODA0NCkgOy0gKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA1DQorQVQ5MUNfQURDX0NIRFIgICAgICAgICAgICBFUVUgKDB4RkZGRDgwMTQpIDstIChBREMpIEFEQyBDaGFubmVsIERpc2FibGUgUmVnaXN0ZXINCitBVDkxQ19BRENfU1IgICAgICAgICAgICAgIEVRVSAoMHhGRkZEODAxQykgOy0gKEFEQykgQURDIFN0YXR1cyBSZWdpc3Rlcg0KK0FUOTFDX0FEQ19DRFI0ICAgICAgICAgICAgRVFVICgweEZGRkQ4MDQwKSA7LSAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDQNCitBVDkxQ19BRENfQ0RSMSAgICAgICAgICAgIEVRVSAoMHhGRkZEODAzNCkgOy0gKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAxDQorQVQ5MUNfQURDX0xDRFIgICAgICAgICAgICBFUVUgKDB4RkZGRDgwMjApIDstIChBREMpIEFEQyBMYXN0IENvbnZlcnRlZCBEYXRhIFJlZ2lzdGVyDQorQVQ5MUNfQURDX0lEUiAgICAgICAgICAgICBFUVUgKDB4RkZGRDgwMjgpIDstIChBREMpIEFEQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KK0FUOTFDX0FEQ19DUiAgICAgICAgICAgICAgRVFVICgweEZGRkQ4MDAwKSA7LSAoQURDKSBBREMgQ29udHJvbCBSZWdpc3Rlcg0KK0FUOTFDX0FEQ19DRFI3ICAgICAgICAgICAgRVFVICgweEZGRkQ4MDRDKSA7LSAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDcNCitBVDkxQ19BRENfQ0RSNiAgICAgICAgICAgIEVRVSAoMHhGRkZEODA0OCkgOy0gKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA2DQorQVQ5MUNfQURDX0lFUiAgICAgICAgICAgICBFUVUgKDB4RkZGRDgwMjQpIDstIChBREMpIEFEQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorQVQ5MUNfQURDX0NIRVIgICAgICAgICAgICBFUVUgKDB4RkZGRDgwMTApIDstIChBREMpIEFEQyBDaGFubmVsIEVuYWJsZSBSZWdpc3Rlcg0KK0FUOTFDX0FEQ19DSFNSICAgICAgICAgICAgRVFVICgweEZGRkQ4MDE4KSA7LSAoQURDKSBBREMgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXINCitBVDkxQ19BRENfTVIgICAgICAgICAgICAgIEVRVSAoMHhGRkZEODAwNCkgOy0gKEFEQykgQURDIE1vZGUgUmVnaXN0ZXINCitBVDkxQ19BRENfSU1SICAgICAgICAgICAgIEVRVSAoMHhGRkZEODAyQykgOy0gKEFEQykgQURDIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorLy8gLSA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19BRVMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KK0FUOTFDX0FFU19UUFIgICAgICAgICAgICAgRVFVICgweEZGRkE0MTA4KSA7LSAoUERDX0FFUykgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KK0FUOTFDX0FFU19QVENSICAgICAgICAgICAgRVFVICgweEZGRkE0MTIwKSA7LSAoUERDX0FFUykgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCitBVDkxQ19BRVNfUk5QUiAgICAgICAgICAgIEVRVSAoMHhGRkZBNDExMCkgOy0gKFBEQ19BRVMpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorQVQ5MUNfQUVTX1ROQ1IgICAgICAgICAgICBFUVUgKDB4RkZGQTQxMUMpIDstIChQRENfQUVTKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCitBVDkxQ19BRVNfVENSICAgICAgICAgICAgIEVRVSAoMHhGRkZBNDEwQykgOy0gKFBEQ19BRVMpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCitBVDkxQ19BRVNfUkNSICAgICAgICAgICAgIEVRVSAoMHhGRkZBNDEwNCkgOy0gKFBEQ19BRVMpIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KK0FUOTFDX0FFU19STkNSICAgICAgICAgICAgRVFVICgweEZGRkE0MTE0KSA7LSAoUERDX0FFUykgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCitBVDkxQ19BRVNfVE5QUiAgICAgICAgICAgIEVRVSAoMHhGRkZBNDExOCkgOy0gKFBEQ19BRVMpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KK0FUOTFDX0FFU19SUFIgICAgICAgICAgICAgRVFVICgweEZGRkE0MTAwKSA7LSAoUERDX0FFUykgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorQVQ5MUNfQUVTX1BUU1IgICAgICAgICAgICBFUVUgKDB4RkZGQTQxMjQpIDstIChQRENfQUVTKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorLy8gLSA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIEFFUyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorQVQ5MUNfQUVTX0lWeFIgICAgICAgICAgICBFUVUgKDB4RkZGQTQwNjApIDstIChBRVMpIEluaXRpYWxpemF0aW9uIFZlY3RvciB4IFJlZ2lzdGVyDQorQVQ5MUNfQUVTX01SICAgICAgICAgICAgICBFUVUgKDB4RkZGQTQwMDQpIDstIChBRVMpIE1vZGUgUmVnaXN0ZXINCitBVDkxQ19BRVNfVlIgICAgICAgICAgICAgIEVRVSAoMHhGRkZBNDBGQykgOy0gKEFFUykgQUVTIFZlcnNpb24gUmVnaXN0ZXINCitBVDkxQ19BRVNfT0RBVEF4UiAgICAgICAgIEVRVSAoMHhGRkZBNDA1MCkgOy0gKEFFUykgT3V0cHV0IERhdGEgeCBSZWdpc3Rlcg0KK0FUOTFDX0FFU19JREFUQXhSICAgICAgICAgRVFVICgweEZGRkE0MDQwKSA7LSAoQUVTKSBJbnB1dCBEYXRhIHggUmVnaXN0ZXINCitBVDkxQ19BRVNfQ1IgICAgICAgICAgICAgIEVRVSAoMHhGRkZBNDAwMCkgOy0gKEFFUykgQ29udHJvbCBSZWdpc3Rlcg0KK0FUOTFDX0FFU19JRFIgICAgICAgICAgICAgRVFVICgweEZGRkE0MDE0KSA7LSAoQUVTKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KK0FUOTFDX0FFU19JTVIgICAgICAgICAgICAgRVFVICgweEZGRkE0MDE4KSA7LSAoQUVTKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KK0FUOTFDX0FFU19JRVIgICAgICAgICAgICAgRVFVICgweEZGRkE0MDEwKSA7LSAoQUVTKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorQVQ5MUNfQUVTX0tFWVd4UiAgICAgICAgICBFUVUgKDB4RkZGQTQwMjApIDstIChBRVMpIEtleSBXb3JkIHggUmVnaXN0ZXINCitBVDkxQ19BRVNfSVNSICAgICAgICAgICAgIEVRVSAoMHhGRkZBNDAxQykgOy0gKEFFUykgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKy8vIC0gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfVERFUyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorQVQ5MUNfVERFU19STkNSICAgICAgICAgICBFUVUgKDB4RkZGQTgxMTQpIDstIChQRENfVERFUykgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCitBVDkxQ19UREVTX1RDUiAgICAgICAgICAgIEVRVSAoMHhGRkZBODEwQykgOy0gKFBEQ19UREVTKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorQVQ5MUNfVERFU19SQ1IgICAgICAgICAgICBFUVUgKDB4RkZGQTgxMDQpIDstIChQRENfVERFUykgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorQVQ5MUNfVERFU19UTlBSICAgICAgICAgICBFUVUgKDB4RkZGQTgxMTgpIDstIChQRENfVERFUykgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorQVQ5MUNfVERFU19STlBSICAgICAgICAgICBFUVUgKDB4RkZGQTgxMTApIDstIChQRENfVERFUykgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCitBVDkxQ19UREVTX1JQUiAgICAgICAgICAgIEVRVSAoMHhGRkZBODEwMCkgOy0gKFBEQ19UREVTKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCitBVDkxQ19UREVTX1ROQ1IgICAgICAgICAgIEVRVSAoMHhGRkZBODExQykgOy0gKFBEQ19UREVTKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCitBVDkxQ19UREVTX1RQUiAgICAgICAgICAgIEVRVSAoMHhGRkZBODEwOCkgOy0gKFBEQ19UREVTKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorQVQ5MUNfVERFU19QVFNSICAgICAgICAgICBFUVUgKDB4RkZGQTgxMjQpIDstIChQRENfVERFUykgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KK0FUOTFDX1RERVNfUFRDUiAgICAgICAgICAgRVFVICgweEZGRkE4MTIwKSA7LSAoUERDX1RERVMpIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorLy8gLSA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRERVMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KK0FUOTFDX1RERVNfS0VZMld4UiAgICAgICAgRVFVICgweEZGRkE4MDI4KSA7LSAoVERFUykgS2V5IDIgV29yZCB4IFJlZ2lzdGVyDQorQVQ5MUNfVERFU19LRVkzV3hSICAgICAgICBFUVUgKDB4RkZGQTgwMzApIDstIChUREVTKSBLZXkgMyBXb3JkIHggUmVnaXN0ZXINCitBVDkxQ19UREVTX0lEUiAgICAgICAgICAgIEVRVSAoMHhGRkZBODAxNCkgOy0gKFRERVMpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorQVQ5MUNfVERFU19WUiAgICAgICAgICAgICBFUVUgKDB4RkZGQTgwRkMpIDstIChUREVTKSBUREVTIFZlcnNpb24gUmVnaXN0ZXINCitBVDkxQ19UREVTX0lWeFIgICAgICAgICAgIEVRVSAoMHhGRkZBODA2MCkgOy0gKFRERVMpIEluaXRpYWxpemF0aW9uIFZlY3RvciB4IFJlZ2lzdGVyDQorQVQ5MUNfVERFU19PREFUQXhSICAgICAgICBFUVUgKDB4RkZGQTgwNTApIDstIChUREVTKSBPdXRwdXQgRGF0YSB4IFJlZ2lzdGVyDQorQVQ5MUNfVERFU19JTVIgICAgICAgICAgICBFUVUgKDB4RkZGQTgwMTgpIDstIChUREVTKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KK0FUOTFDX1RERVNfTVIgICAgICAgICAgICAgRVFVICgweEZGRkE4MDA0KSA7LSAoVERFUykgTW9kZSBSZWdpc3Rlcg0KK0FUOTFDX1RERVNfQ1IgICAgICAgICAgICAgRVFVICgweEZGRkE4MDAwKSA7LSAoVERFUykgQ29udHJvbCBSZWdpc3Rlcg0KK0FUOTFDX1RERVNfSUVSICAgICAgICAgICAgRVFVICgweEZGRkE4MDEwKSA7LSAoVERFUykgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KK0FUOTFDX1RERVNfSVNSICAgICAgICAgICAgRVFVICgweEZGRkE4MDFDKSA7LSAoVERFUykgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KK0FUOTFDX1RERVNfSURBVEF4UiAgICAgICAgRVFVICgweEZGRkE4MDQwKSA7LSAoVERFUykgSW5wdXQgRGF0YSB4IFJlZ2lzdGVyDQorQVQ5MUNfVERFU19LRVkxV3hSICAgICAgICBFUVUgKDB4RkZGQTgwMjApIDstIChUREVTKSBLZXkgMSBXb3JkIHggUmVnaXN0ZXINCiANCi0vKiAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogLSAgICAgICAgICAgICAgIFBJTyBERUZJTklUSU9OUyBGT1IgQVQ5MVNBTTdYMjU2ICovDQotLyogLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUElPX1BBMCBFUVUoIDEgPDwgMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVBpbiBDb250cm9sbGVkIGJ5IFBBMA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUEEwX1JYRDAgRVFVKCBBVDkxQ19QSU9fUEEwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtVVNBUlQgMCBSZWNlaXZlIERhdGENCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BJT19QQTEgRVFVKCAxIDw8IDEgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1QaW4gQ29udHJvbGxlZCBieSBQQTENCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BBMV9UWEQwIEVRVSggQVQ5MUNfUElPX1BBMSApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVVTQVJUIDAgVHJhbnNtaXQgRGF0YQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUElPX1BBMTAgRVFVKCAxIDw8IDEwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtUGluIENvbnRyb2xsZWQgYnkgUEExMA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUEExMF9UV0QgRVFVKCBBVDkxQ19QSU9fUEExMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVRXSSBUd28gLSB3aXJlIFNlcmlhbCBEYXRhDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QSU9fUEExMSBFUVUoIDEgPDwgMTEgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1QaW4gQ29udHJvbGxlZCBieSBQQTExDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QQTExX1RXQ0sgRVFVKCBBVDkxQ19QSU9fUEExMSApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVRXSSBUd28gLSB3aXJlIFNlcmlhbCBDbG9jaw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUElPX1BBMTIgRVFVKCAxIDw8IDEyICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtUGluIENvbnRyb2xsZWQgYnkgUEExMg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUEExMl9OUENTMDAgRVFVKCBBVDkxQ19QSU9fUEExMiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUElPX1BBMTMgRVFVKCAxIDw8IDEzICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtUGluIENvbnRyb2xsZWQgYnkgUEExMw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUEExM19OUENTMDEgRVFVKCBBVDkxQ19QSU9fUEExMyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUEExM19QQ0sxIEVRVSggQVQ5MUNfUElPX1BBMTMgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1QTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAxDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QSU9fUEExNCBFUVUoIDEgPDwgMTQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1QaW4gQ29udHJvbGxlZCBieSBQQTE0DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QQTE0X05QQ1MwMiBFUVUoIEFUOTFDX1BJT19QQTE0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QQTE0X0lSUTEgRVFVKCBBVDkxQ19QSU9fUEExNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLUV4dGVybmFsIEludGVycnVwdCAxDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QSU9fUEExNSBFUVUoIDEgPDwgMTUgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1QaW4gQ29udHJvbGxlZCBieSBQQTE1DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QQTE1X05QQ1MwMyBFUVUoIEFUOTFDX1BJT19QQTE1ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QQTE1X1RDTEsyIEVRVSggQVQ5MUNfUElPX1BBMTUgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1UaW1lciBDb3VudGVyIDIgZXh0ZXJuYWwgY2xvY2sgaW5wdXQNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BJT19QQTE2IEVRVSggMSA8PCAxNiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVBpbiBDb250cm9sbGVkIGJ5IFBBMTYNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BBMTZfTUlTTzAgRVFVKCBBVDkxQ19QSU9fUEExNiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVNQSSAwIE1hc3RlciBJbiBTbGF2ZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUElPX1BBMTcgRVFVKCAxIDw8IDE3ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtUGluIENvbnRyb2xsZWQgYnkgUEExNw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUEExN19NT1NJMCBFUVUoIEFUOTFDX1BJT19QQTE3ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtU1BJIDAgTWFzdGVyIE91dCBTbGF2ZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUElPX1BBMTggRVFVKCAxIDw8IDE4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtUGluIENvbnRyb2xsZWQgYnkgUEExOA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUEExOF9TUENLMCBFUVUoIEFUOTFDX1BJT19QQTE4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtU1BJIDAgU2VyaWFsIENsb2NrDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QSU9fUEExOSBFUVUoIDEgPDwgMTkgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1QaW4gQ29udHJvbGxlZCBieSBQQTE5DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QQTE5X0NBTlJYIEVRVSggQVQ5MUNfUElPX1BBMTkgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1DQU4gUmVjZWl2ZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUElPX1BBMiBFUVUoIDEgPDwgMiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVBpbiBDb250cm9sbGVkIGJ5IFBBMg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUEEyX1NDSzAgRVFVKCBBVDkxQ19QSU9fUEEyICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtVVNBUlQgMCBTZXJpYWwgQ2xvY2sNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BBMl9OUENTMTEgRVFVKCBBVDkxQ19QSU9fUEEyICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAxDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QSU9fUEEyMCBFUVUoIDEgPDwgMjAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1QaW4gQ29udHJvbGxlZCBieSBQQTIwDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QQTIwX0NBTlRYIEVRVSggQVQ5MUNfUElPX1BBMjAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1DQU4gVHJhbnNtaXQNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BJT19QQTIxIEVRVSggMSA8PCAyMSApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVBpbiBDb250cm9sbGVkIGJ5IFBBMjENCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BBMjFfVEYgRVFVKCBBVDkxQ19QSU9fUEEyMSApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVNTQyBUcmFuc21pdCBGcmFtZSBTeW5jDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QQTIxX05QQ1MxMCBFUVUoIEFUOTFDX1BJT19QQTIxICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAwDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QSU9fUEEyMiBFUVUoIDEgPDwgMjIgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1QaW4gQ29udHJvbGxlZCBieSBQQTIyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QQTIyX1RLIEVRVSggQVQ5MUNfUElPX1BBMjIgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1TU0MgVHJhbnNtaXQgQ2xvY2sNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BBMjJfU1BDSzEgRVFVKCBBVDkxQ19QSU9fUEEyMiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVNQSSAxIFNlcmlhbCBDbG9jaw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUElPX1BBMjMgRVFVKCAxIDw8IDIzICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtUGluIENvbnRyb2xsZWQgYnkgUEEyMw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUEEyM19URCBFUVUoIEFUOTFDX1BJT19QQTIzICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtU1NDIFRyYW5zbWl0IGRhdGENCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BBMjNfTU9TSTEgRVFVKCBBVDkxQ19QSU9fUEEyMyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVNQSSAxIE1hc3RlciBPdXQgU2xhdmUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BJT19QQTI0IEVRVSggMSA8PCAyNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVBpbiBDb250cm9sbGVkIGJ5IFBBMjQNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BBMjRfUkQgRVFVKCBBVDkxQ19QSU9fUEEyNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVNTQyBSZWNlaXZlIERhdGENCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BBMjRfTUlTTzEgRVFVKCBBVDkxQ19QSU9fUEEyNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVNQSSAxIE1hc3RlciBJbiBTbGF2ZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUElPX1BBMjUgRVFVKCAxIDw8IDI1ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtUGluIENvbnRyb2xsZWQgYnkgUEEyNQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUEEyNV9SSyBFUVUoIEFUOTFDX1BJT19QQTI1ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtU1NDIFJlY2VpdmUgQ2xvY2sNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BBMjVfTlBDUzExIEVRVSggQVQ5MUNfUElPX1BBMjUgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1TUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDENCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BJT19QQTI2IEVRVSggMSA8PCAyNiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVBpbiBDb250cm9sbGVkIGJ5IFBBMjYNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BBMjZfUkYgRVFVKCBBVDkxQ19QSU9fUEEyNiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVNTQyBSZWNlaXZlIEZyYW1lIFN5bmMNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BBMjZfTlBDUzEyIEVRVSggQVQ5MUNfUElPX1BBMjYgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1TUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BJT19QQTI3IEVRVSggMSA8PCAyNyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVBpbiBDb250cm9sbGVkIGJ5IFBBMjcNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BBMjdfRFJYRCBFUVUoIEFUOTFDX1BJT19QQTI3ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtREJHVSBEZWJ1ZyBSZWNlaXZlIERhdGENCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BBMjdfUENLMyBFUVUoIEFUOTFDX1BJT19QQTI3ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUElPX1BBMjggRVFVKCAxIDw8IDI4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtUGluIENvbnRyb2xsZWQgYnkgUEEyOA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUEEyOF9EVFhEIEVRVSggQVQ5MUNfUElPX1BBMjggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1EQkdVIERlYnVnIFRyYW5zbWl0IERhdGENCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BJT19QQTI5IEVRVSggMSA8PCAyOSApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVBpbiBDb250cm9sbGVkIGJ5IFBBMjkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BBMjlfRklRIEVRVSggQVQ5MUNfUElPX1BBMjkgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1BSUMgRmFzdCBJbnRlcnJ1cHQgSW5wdXQNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BBMjlfTlBDUzEzIEVRVSggQVQ5MUNfUElPX1BBMjkgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1TUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BJT19QQTMgRVFVKCAxIDw8IDMgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1QaW4gQ29udHJvbGxlZCBieSBQQTMNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BBM19SVFMwIEVRVSggQVQ5MUNfUElPX1BBMyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVVTQVJUIDAgUmVhZHkgVG8gU2VuZA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUEEzX05QQ1MxMiBFUVUoIEFUOTFDX1BJT19QQTMgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1TUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BJT19QQTMwIEVRVSggMSA8PCAzMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVBpbiBDb250cm9sbGVkIGJ5IFBBMzANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BBMzBfSVJRMCBFUVUoIEFUOTFDX1BJT19QQTMwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtRXh0ZXJuYWwgSW50ZXJydXB0IDANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BBMzBfUENLMiBFUVUoIEFUOTFDX1BJT19QQTMwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUElPX1BBNCBFUVUoIDEgPDwgNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVBpbiBDb250cm9sbGVkIGJ5IFBBNA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUEE0X0NUUzAgRVFVKCBBVDkxQ19QSU9fUEE0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtVVNBUlQgMCBDbGVhciBUbyBTZW5kDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QQTRfTlBDUzEzIEVRVSggQVQ5MUNfUElPX1BBNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUElPX1BBNSBFUVUoIDEgPDwgNSApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVBpbiBDb250cm9sbGVkIGJ5IFBBNQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUEE1X1JYRDEgRVFVKCBBVDkxQ19QSU9fUEE1ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtVVNBUlQgMSBSZWNlaXZlIERhdGENCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BJT19QQTYgRVFVKCAxIDw8IDYgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1QaW4gQ29udHJvbGxlZCBieSBQQTYNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BBNl9UWEQxIEVRVSggQVQ5MUNfUElPX1BBNiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVVTQVJUIDEgVHJhbnNtaXQgRGF0YQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUElPX1BBNyBFUVUoIDEgPDwgNyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVBpbiBDb250cm9sbGVkIGJ5IFBBNw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUEE3X1NDSzEgRVFVKCBBVDkxQ19QSU9fUEE3ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtVVNBUlQgMSBTZXJpYWwgQ2xvY2sNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BBN19OUENTMDEgRVFVKCBBVDkxQ19QSU9fUEE3ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAxDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QSU9fUEE4IEVRVSggMSA8PCA4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtUGluIENvbnRyb2xsZWQgYnkgUEE4DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QQThfUlRTMSBFUVUoIEFUOTFDX1BJT19QQTggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1VU0FSVCAxIFJlYWR5IFRvIFNlbmQNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BBOF9OUENTMDIgRVFVKCBBVDkxQ19QSU9fUEE4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QSU9fUEE5IEVRVSggMSA8PCA5ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtUGluIENvbnRyb2xsZWQgYnkgUEE5DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QQTlfQ1RTMSBFUVUoIEFUOTFDX1BJT19QQTkgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1VU0FSVCAxIENsZWFyIFRvIFNlbmQNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BBOV9OUENTMDMgRVFVKCBBVDkxQ19QSU9fUEE5ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QSU9fUEIwIEVRVSggMSA8PCAwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtUGluIENvbnRyb2xsZWQgYnkgUEIwDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QQjBfRVRYQ0tfRVJFRkNLIEVRVSggQVQ5MUNfUElPX1BCMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLUV0aGVybmV0IE1BQyBUcmFuc21pdCBDbG9jayAvIFJlZmVyZW5jZSBDbG9jaw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUEIwX1BDSzAgRVFVKCBBVDkxQ19QSU9fUEIwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUElPX1BCMSBFUVUoIDEgPDwgMSApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVBpbiBDb250cm9sbGVkIGJ5IFBCMQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUEIxX0VUWEVOIEVRVSggQVQ5MUNfUElPX1BCMSApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLUV0aGVybmV0IE1BQyBUcmFuc21pdCBFbmFibGUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BJT19QQjEwIEVRVSggMSA8PCAxMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVBpbiBDb250cm9sbGVkIGJ5IFBCMTANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BCMTBfRVRYMiBFUVUoIEFUOTFDX1BJT19QQjEwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtRXRoZXJuZXQgTUFDIFRyYW5zbWl0IERhdGEgMg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUEIxMF9OUENTMTEgRVFVKCBBVDkxQ19QSU9fUEIxMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUElPX1BCMTEgRVFVKCAxIDw8IDExICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtUGluIENvbnRyb2xsZWQgYnkgUEIxMQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUEIxMV9FVFgzIEVRVSggQVQ5MUNfUElPX1BCMTEgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1FdGhlcm5ldCBNQUMgVHJhbnNtaXQgRGF0YSAzDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QQjExX05QQ1MxMiBFUVUoIEFUOTFDX1BJT19QQjExICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QSU9fUEIxMiBFUVUoIDEgPDwgMTIgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1QaW4gQ29udHJvbGxlZCBieSBQQjEyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QQjEyX0VUWEVSIEVRVSggQVQ5MUNfUElPX1BCMTIgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1FdGhlcm5ldCBNQUMgVHJhbnNtaWt0IENvZGluZyBFcnJvcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUEIxMl9UQ0xLMCBFUVUoIEFUOTFDX1BJT19QQjEyICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtVGltZXIgQ291bnRlciAwIGV4dGVybmFsIGNsb2NrIGlucHV0DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QSU9fUEIxMyBFUVUoIDEgPDwgMTMgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1QaW4gQ29udHJvbGxlZCBieSBQQjEzDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QQjEzX0VSWDIgRVFVKCBBVDkxQ19QSU9fUEIxMyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLUV0aGVybmV0IE1BQyBSZWNlaXZlIERhdGEgMg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUEIxM19OUENTMDEgRVFVKCBBVDkxQ19QSU9fUEIxMyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUElPX1BCMTQgRVFVKCAxIDw8IDE0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtUGluIENvbnRyb2xsZWQgYnkgUEIxNA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUEIxNF9FUlgzIEVRVSggQVQ5MUNfUElPX1BCMTQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1FdGhlcm5ldCBNQUMgUmVjZWl2ZSBEYXRhIDMNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BCMTRfTlBDUzAyIEVRVSggQVQ5MUNfUElPX1BCMTQgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1TUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BJT19QQjE1IEVRVSggMSA8PCAxNSApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVBpbiBDb250cm9sbGVkIGJ5IFBCMTUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BCMTVfRVJYRFYgRVFVKCBBVDkxQ19QSU9fUEIxNSApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLUV0aGVybmV0IE1BQyBSZWNlaXZlIERhdGEgVmFsaWQNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BJT19QQjE2IEVRVSggMSA8PCAxNiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVBpbiBDb250cm9sbGVkIGJ5IFBCMTYNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BCMTZfRUNPTCBFUVUoIEFUOTFDX1BJT19QQjE2ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtRXRoZXJuZXQgTUFDIENvbGxpc2lvbiBEZXRlY3RlZA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUEIxNl9OUENTMTMgRVFVKCBBVDkxQ19QSU9fUEIxNiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUElPX1BCMTcgRVFVKCAxIDw8IDE3ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtUGluIENvbnRyb2xsZWQgYnkgUEIxNw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUEIxN19FUlhDSyBFUVUoIEFUOTFDX1BJT19QQjE3ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtRXRoZXJuZXQgTUFDIFJlY2VpdmUgQ2xvY2sNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BCMTdfTlBDUzAzIEVRVSggQVQ5MUNfUElPX1BCMTcgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1TUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BJT19QQjE4IEVRVSggMSA8PCAxOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVBpbiBDb250cm9sbGVkIGJ5IFBCMTgNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BCMThfRUYxMDAgRVFVKCBBVDkxQ19QSU9fUEIxOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLUV0aGVybmV0IE1BQyBGb3JjZSAxMDAgTWJpdHMgLyBzZWMNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BCMThfQURUUkcgRVFVKCBBVDkxQ19QSU9fUEIxOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLUFEQyBFeHRlcm5hbCBUcmlnZ2VyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QSU9fUEIxOSBFUVUoIDEgPDwgMTkgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1QaW4gQ29udHJvbGxlZCBieSBQQjE5DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QQjE5X1BXTTAgRVFVKCBBVDkxQ19QSU9fUEIxOSApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVBXTSBDaGFubmVsIDANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BCMTlfVENMSzEgRVFVKCBBVDkxQ19QSU9fUEIxOSApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVRpbWVyIENvdW50ZXIgMSBleHRlcm5hbCBjbG9jayBpbnB1dA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUElPX1BCMiBFUVUoIDEgPDwgMiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVBpbiBDb250cm9sbGVkIGJ5IFBCMg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUEIyX0VUWDAgRVFVKCBBVDkxQ19QSU9fUEIyICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtRXRoZXJuZXQgTUFDIFRyYW5zbWl0IERhdGEgMA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUElPX1BCMjAgRVFVKCAxIDw8IDIwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtUGluIENvbnRyb2xsZWQgYnkgUEIyMA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUEIyMF9QV00xIEVRVSggQVQ5MUNfUElPX1BCMjAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1QV00gQ2hhbm5lbCAxDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QQjIwX1BDSzAgRVFVKCBBVDkxQ19QSU9fUEIyMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BJT19QQjIxIEVRVSggMSA8PCAyMSApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVBpbiBDb250cm9sbGVkIGJ5IFBCMjENCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BCMjFfUFdNMiBFUVUoIEFUOTFDX1BJT19QQjIxICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtUFdNIENoYW5uZWwgMg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUEIyMV9QQ0sxIEVRVSggQVQ5MUNfUElPX1BCMjEgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1QTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAxDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QSU9fUEIyMiBFUVUoIDEgPDwgMjIgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1QaW4gQ29udHJvbGxlZCBieSBQQjIyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QQjIyX1BXTTMgRVFVKCBBVDkxQ19QSU9fUEIyMiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVBXTSBDaGFubmVsIDMNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BCMjJfUENLMiBFUVUoIEFUOTFDX1BJT19QQjIyICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUElPX1BCMjMgRVFVKCAxIDw8IDIzICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtUGluIENvbnRyb2xsZWQgYnkgUEIyMw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUEIyM19USU9BMCBFUVUoIEFUOTFDX1BJT19QQjIzICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtVGltZXIgQ291bnRlciAwIE11bHRpcHVycG9zZSBUaW1lciBJIC8gTyBQaW4gQQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUEIyM19EQ0QxIEVRVSggQVQ5MUNfUElPX1BCMjMgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1VU0FSVCAxIERhdGEgQ2FycmllciBEZXRlY3QNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BJT19QQjI0IEVRVSggMSA8PCAyNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVBpbiBDb250cm9sbGVkIGJ5IFBCMjQNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BCMjRfVElPQjAgRVFVKCBBVDkxQ19QSU9fUEIyNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVRpbWVyIENvdW50ZXIgMCBNdWx0aXB1cnBvc2UgVGltZXIgSSAvIE8gUGluIEINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BCMjRfRFNSMSBFUVUoIEFUOTFDX1BJT19QQjI0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtVVNBUlQgMSBEYXRhIFNldCByZWFkeQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUElPX1BCMjUgRVFVKCAxIDw8IDI1ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtUGluIENvbnRyb2xsZWQgYnkgUEIyNQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUEIyNV9USU9BMSBFUVUoIEFUOTFDX1BJT19QQjI1ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtVGltZXIgQ291bnRlciAxIE11bHRpcHVycG9zZSBUaW1lciBJIC8gTyBQaW4gQQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUEIyNV9EVFIxIEVRVSggQVQ5MUNfUElPX1BCMjUgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1VU0FSVCAxIERhdGEgVGVybWluYWwgcmVhZHkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BJT19QQjI2IEVRVSggMSA8PCAyNiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVBpbiBDb250cm9sbGVkIGJ5IFBCMjYNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BCMjZfVElPQjEgRVFVKCBBVDkxQ19QSU9fUEIyNiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVRpbWVyIENvdW50ZXIgMSBNdWx0aXB1cnBvc2UgVGltZXIgSSAvIE8gUGluIEINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BCMjZfUkkxIEVRVSggQVQ5MUNfUElPX1BCMjYgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1VU0FSVCAxIFJpbmcgSW5kaWNhdG9yDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QSU9fUEIyNyBFUVUoIDEgPDwgMjcgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1QaW4gQ29udHJvbGxlZCBieSBQQjI3DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QQjI3X1RJT0EyIEVRVSggQVQ5MUNfUElPX1BCMjcgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1UaW1lciBDb3VudGVyIDIgTXVsdGlwdXJwb3NlIFRpbWVyIEkgLyBPIFBpbiBBDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QQjI3X1BXTTAgRVFVKCBBVDkxQ19QSU9fUEIyNyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVBXTSBDaGFubmVsIDANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BJT19QQjI4IEVRVSggMSA8PCAyOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVBpbiBDb250cm9sbGVkIGJ5IFBCMjgNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BCMjhfVElPQjIgRVFVKCBBVDkxQ19QSU9fUEIyOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVRpbWVyIENvdW50ZXIgMiBNdWx0aXB1cnBvc2UgVGltZXIgSSAvIE8gUGluIEINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BCMjhfUFdNMSBFUVUoIEFUOTFDX1BJT19QQjI4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtUFdNIENoYW5uZWwgMQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUElPX1BCMjkgRVFVKCAxIDw8IDI5ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtUGluIENvbnRyb2xsZWQgYnkgUEIyOQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUEIyOV9QQ0sxIEVRVSggQVQ5MUNfUElPX1BCMjkgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1QTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAxDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QQjI5X1BXTTIgRVFVKCBBVDkxQ19QSU9fUEIyOSApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVBXTSBDaGFubmVsIDINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BJT19QQjMgRVFVKCAxIDw8IDMgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1QaW4gQ29udHJvbGxlZCBieSBQQjMNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BCM19FVFgxIEVRVSggQVQ5MUNfUElPX1BCMyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLUV0aGVybmV0IE1BQyBUcmFuc21pdCBEYXRhIDENCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BJT19QQjMwIEVRVSggMSA8PCAzMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVBpbiBDb250cm9sbGVkIGJ5IFBCMzANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BCMzBfUENLMiBFUVUoIEFUOTFDX1BJT19QQjMwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUEIzMF9QV00zIEVRVSggQVQ5MUNfUElPX1BCMzAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1QV00gQ2hhbm5lbCAzDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QSU9fUEI0IEVRVSggMSA8PCA0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtUGluIENvbnRyb2xsZWQgYnkgUEI0DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QQjRfRUNSU19FQ1JTRFYgRVFVKCBBVDkxQ19QSU9fUEI0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtRXRoZXJuZXQgTUFDIENhcnJpZXIgU2Vuc2UgLyBDYXJyaWVyIFNlbnNlIGFuZCBEYXRhIFZhbGlkDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QSU9fUEI1IEVRVSggMSA8PCA1ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtUGluIENvbnRyb2xsZWQgYnkgUEI1DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QQjVfRVJYMCBFUVUoIEFUOTFDX1BJT19QQjUgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1FdGhlcm5ldCBNQUMgUmVjZWl2ZSBEYXRhIDANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BJT19QQjYgRVFVKCAxIDw8IDYgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1QaW4gQ29udHJvbGxlZCBieSBQQjYNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1BCNl9FUlgxIEVRVSggQVQ5MUNfUElPX1BCNiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLUV0aGVybmV0IE1BQyBSZWNlaXZlIERhdGEgMQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUElPX1BCNyBFUVUoIDEgPDwgNyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVBpbiBDb250cm9sbGVkIGJ5IFBCNw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfUEI3X0VSWEVSIEVRVSggQVQ5MUNfUElPX1BCNyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLUV0aGVybmV0IE1BQyBSZWNlaXZlIEVycm9yDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QSU9fUEI4IEVRVSggMSA8PCA4ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtUGluIENvbnRyb2xsZWQgYnkgUEI4DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QQjhfRU1EQyBFUVUoIEFUOTFDX1BJT19QQjggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1FdGhlcm5ldCBNQUMgTWFuYWdlbWVudCBEYXRhIENsb2NrDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QSU9fUEI5IEVRVSggMSA8PCA5ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtUGluIENvbnRyb2xsZWQgYnkgUEI5DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19QQjlfRU1ESU8gRVFVKCBBVDkxQ19QSU9fUEI5ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtRXRoZXJuZXQgTUFDIE1hbmFnZW1lbnQgRGF0YSBJbnB1dCAvIE91dHB1dA0KKy8vIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAtICAgICAgICAgICAgICAgUElPIERFRklOSVRJT05TIEZPUiBBVDkxU0FNN1gyNTYNCisvLyAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorQVQ5MUNfUElPX1BBMCAgICAgICAgICAgICBFUVUgKDEgPDwgIDApIDstIFBpbiBDb250cm9sbGVkIGJ5IFBBMA0KK0FUOTFDX1BBMF9SWEQwICAgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEEwKSA7LSAgVVNBUlQgMCBSZWNlaXZlIERhdGENCitBVDkxQ19QSU9fUEExICAgICAgICAgICAgIEVRVSAoMSA8PCAgMSkgOy0gUGluIENvbnRyb2xsZWQgYnkgUEExDQorQVQ5MUNfUEExX1RYRDAgICAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQTEpIDstICBVU0FSVCAwIFRyYW5zbWl0IERhdGENCitBVDkxQ19QSU9fUEExMCAgICAgICAgICAgIEVRVSAoMSA8PCAxMCkgOy0gUGluIENvbnRyb2xsZWQgYnkgUEExMA0KK0FUOTFDX1BBMTBfVFdEICAgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEExMCkgOy0gIFRXSSBUd28td2lyZSBTZXJpYWwgRGF0YQ0KK0FUOTFDX1BJT19QQTExICAgICAgICAgICAgRVFVICgxIDw8IDExKSA7LSBQaW4gQ29udHJvbGxlZCBieSBQQTExDQorQVQ5MUNfUEExMV9UV0NLICAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQTExKSA7LSAgVFdJIFR3by13aXJlIFNlcmlhbCBDbG9jaw0KK0FUOTFDX1BJT19QQTEyICAgICAgICAgICAgRVFVICgxIDw8IDEyKSA7LSBQaW4gQ29udHJvbGxlZCBieSBQQTEyDQorQVQ5MUNfUEExMl9OUENTMDAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQTEyKSA7LSAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAwDQorQVQ5MUNfUElPX1BBMTMgICAgICAgICAgICBFUVUgKDEgPDwgMTMpIDstIFBpbiBDb250cm9sbGVkIGJ5IFBBMTMNCitBVDkxQ19QQTEzX05QQ1MwMSAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BBMTMpIDstICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDENCitBVDkxQ19QQTEzX1BDSzEgICAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BBMTMpIDstICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAxDQorQVQ5MUNfUElPX1BBMTQgICAgICAgICAgICBFUVUgKDEgPDwgMTQpIDstIFBpbiBDb250cm9sbGVkIGJ5IFBBMTQNCitBVDkxQ19QQTE0X05QQ1MwMiAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BBMTQpIDstICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDINCitBVDkxQ19QQTE0X0lSUTEgICAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BBMTQpIDstICBFeHRlcm5hbCBJbnRlcnJ1cHQgMQ0KK0FUOTFDX1BJT19QQTE1ICAgICAgICAgICAgRVFVICgxIDw8IDE1KSA7LSBQaW4gQ29udHJvbGxlZCBieSBQQTE1DQorQVQ5MUNfUEExNV9OUENTMDMgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQTE1KSA7LSAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzDQorQVQ5MUNfUEExNV9UQ0xLMiAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQTE1KSA7LSAgVGltZXIgQ291bnRlciAyIGV4dGVybmFsIGNsb2NrIGlucHV0DQorQVQ5MUNfUElPX1BBMTYgICAgICAgICAgICBFUVUgKDEgPDwgMTYpIDstIFBpbiBDb250cm9sbGVkIGJ5IFBBMTYNCitBVDkxQ19QQTE2X01JU08wICAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BBMTYpIDstICBTUEkgMCBNYXN0ZXIgSW4gU2xhdmUNCitBVDkxQ19QSU9fUEExNyAgICAgICAgICAgIEVRVSAoMSA8PCAxNykgOy0gUGluIENvbnRyb2xsZWQgYnkgUEExNw0KK0FUOTFDX1BBMTdfTU9TSTAgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEExNykgOy0gIFNQSSAwIE1hc3RlciBPdXQgU2xhdmUNCitBVDkxQ19QSU9fUEExOCAgICAgICAgICAgIEVRVSAoMSA8PCAxOCkgOy0gUGluIENvbnRyb2xsZWQgYnkgUEExOA0KK0FUOTFDX1BBMThfU1BDSzAgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEExOCkgOy0gIFNQSSAwIFNlcmlhbCBDbG9jaw0KK0FUOTFDX1BJT19QQTE5ICAgICAgICAgICAgRVFVICgxIDw8IDE5KSA7LSBQaW4gQ29udHJvbGxlZCBieSBQQTE5DQorQVQ5MUNfUEExOV9DQU5SWCAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQTE5KSA7LSAgQ0FOIFJlY2VpdmUNCitBVDkxQ19QSU9fUEEyICAgICAgICAgICAgIEVRVSAoMSA8PCAgMikgOy0gUGluIENvbnRyb2xsZWQgYnkgUEEyDQorQVQ5MUNfUEEyX1NDSzAgICAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQTIpIDstICBVU0FSVCAwIFNlcmlhbCBDbG9jaw0KK0FUOTFDX1BBMl9OUENTMTEgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEEyKSA7LSAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAxDQorQVQ5MUNfUElPX1BBMjAgICAgICAgICAgICBFUVUgKDEgPDwgMjApIDstIFBpbiBDb250cm9sbGVkIGJ5IFBBMjANCitBVDkxQ19QQTIwX0NBTlRYICAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BBMjApIDstICBDQU4gVHJhbnNtaXQNCitBVDkxQ19QSU9fUEEyMSAgICAgICAgICAgIEVRVSAoMSA8PCAyMSkgOy0gUGluIENvbnRyb2xsZWQgYnkgUEEyMQ0KK0FUOTFDX1BBMjFfVEYgICAgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEEyMSkgOy0gIFNTQyBUcmFuc21pdCBGcmFtZSBTeW5jDQorQVQ5MUNfUEEyMV9OUENTMTAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQTIxKSA7LSAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAwDQorQVQ5MUNfUElPX1BBMjIgICAgICAgICAgICBFUVUgKDEgPDwgMjIpIDstIFBpbiBDb250cm9sbGVkIGJ5IFBBMjINCitBVDkxQ19QQTIyX1RLICAgICAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BBMjIpIDstICBTU0MgVHJhbnNtaXQgQ2xvY2sNCitBVDkxQ19QQTIyX1NQQ0sxICAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BBMjIpIDstICBTUEkgMSBTZXJpYWwgQ2xvY2sNCitBVDkxQ19QSU9fUEEyMyAgICAgICAgICAgIEVRVSAoMSA8PCAyMykgOy0gUGluIENvbnRyb2xsZWQgYnkgUEEyMw0KK0FUOTFDX1BBMjNfVEQgICAgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEEyMykgOy0gIFNTQyBUcmFuc21pdCBkYXRhDQorQVQ5MUNfUEEyM19NT1NJMSAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQTIzKSA7LSAgU1BJIDEgTWFzdGVyIE91dCBTbGF2ZQ0KK0FUOTFDX1BJT19QQTI0ICAgICAgICAgICAgRVFVICgxIDw8IDI0KSA7LSBQaW4gQ29udHJvbGxlZCBieSBQQTI0DQorQVQ5MUNfUEEyNF9SRCAgICAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQTI0KSA7LSAgU1NDIFJlY2VpdmUgRGF0YQ0KK0FUOTFDX1BBMjRfTUlTTzEgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEEyNCkgOy0gIFNQSSAxIE1hc3RlciBJbiBTbGF2ZQ0KK0FUOTFDX1BJT19QQTI1ICAgICAgICAgICAgRVFVICgxIDw8IDI1KSA7LSBQaW4gQ29udHJvbGxlZCBieSBQQTI1DQorQVQ5MUNfUEEyNV9SSyAgICAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQTI1KSA7LSAgU1NDIFJlY2VpdmUgQ2xvY2sNCitBVDkxQ19QQTI1X05QQ1MxMSAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BBMjUpIDstICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDENCitBVDkxQ19QSU9fUEEyNiAgICAgICAgICAgIEVRVSAoMSA8PCAyNikgOy0gUGluIENvbnRyb2xsZWQgYnkgUEEyNg0KK0FUOTFDX1BBMjZfUkYgICAgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEEyNikgOy0gIFNTQyBSZWNlaXZlIEZyYW1lIFN5bmMNCitBVDkxQ19QQTI2X05QQ1MxMiAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BBMjYpIDstICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDINCitBVDkxQ19QSU9fUEEyNyAgICAgICAgICAgIEVRVSAoMSA8PCAyNykgOy0gUGluIENvbnRyb2xsZWQgYnkgUEEyNw0KK0FUOTFDX1BBMjdfRFJYRCAgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEEyNykgOy0gIERCR1UgRGVidWcgUmVjZWl2ZSBEYXRhDQorQVQ5MUNfUEEyN19QQ0szICAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQTI3KSA7LSAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMw0KK0FUOTFDX1BJT19QQTI4ICAgICAgICAgICAgRVFVICgxIDw8IDI4KSA7LSBQaW4gQ29udHJvbGxlZCBieSBQQTI4DQorQVQ5MUNfUEEyOF9EVFhEICAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQTI4KSA7LSAgREJHVSBEZWJ1ZyBUcmFuc21pdCBEYXRhDQorQVQ5MUNfUElPX1BBMjkgICAgICAgICAgICBFUVUgKDEgPDwgMjkpIDstIFBpbiBDb250cm9sbGVkIGJ5IFBBMjkNCitBVDkxQ19QQTI5X0ZJUSAgICAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BBMjkpIDstICBBSUMgRmFzdCBJbnRlcnJ1cHQgSW5wdXQNCitBVDkxQ19QQTI5X05QQ1MxMyAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BBMjkpIDstICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMNCitBVDkxQ19QSU9fUEEzICAgICAgICAgICAgIEVRVSAoMSA8PCAgMykgOy0gUGluIENvbnRyb2xsZWQgYnkgUEEzDQorQVQ5MUNfUEEzX1JUUzAgICAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQTMpIDstICBVU0FSVCAwIFJlYWR5IFRvIFNlbmQNCitBVDkxQ19QQTNfTlBDUzEyICAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BBMykgOy0gIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMg0KK0FUOTFDX1BJT19QQTMwICAgICAgICAgICAgRVFVICgxIDw8IDMwKSA7LSBQaW4gQ29udHJvbGxlZCBieSBQQTMwDQorQVQ5MUNfUEEzMF9JUlEwICAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQTMwKSA7LSAgRXh0ZXJuYWwgSW50ZXJydXB0IDANCitBVDkxQ19QQTMwX1BDSzIgICAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BBMzApIDstICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAyDQorQVQ5MUNfUElPX1BBNCAgICAgICAgICAgICBFUVUgKDEgPDwgIDQpIDstIFBpbiBDb250cm9sbGVkIGJ5IFBBNA0KK0FUOTFDX1BBNF9DVFMwICAgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEE0KSA7LSAgVVNBUlQgMCBDbGVhciBUbyBTZW5kDQorQVQ5MUNfUEE0X05QQ1MxMyAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQTQpIDstICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMNCitBVDkxQ19QSU9fUEE1ICAgICAgICAgICAgIEVRVSAoMSA8PCAgNSkgOy0gUGluIENvbnRyb2xsZWQgYnkgUEE1DQorQVQ5MUNfUEE1X1JYRDEgICAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQTUpIDstICBVU0FSVCAxIFJlY2VpdmUgRGF0YQ0KK0FUOTFDX1BJT19QQTYgICAgICAgICAgICAgRVFVICgxIDw8ICA2KSA7LSBQaW4gQ29udHJvbGxlZCBieSBQQTYNCitBVDkxQ19QQTZfVFhEMSAgICAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BBNikgOy0gIFVTQVJUIDEgVHJhbnNtaXQgRGF0YQ0KK0FUOTFDX1BJT19QQTcgICAgICAgICAgICAgRVFVICgxIDw8ICA3KSA7LSBQaW4gQ29udHJvbGxlZCBieSBQQTcNCitBVDkxQ19QQTdfU0NLMSAgICAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BBNykgOy0gIFVTQVJUIDEgU2VyaWFsIENsb2NrDQorQVQ5MUNfUEE3X05QQ1MwMSAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQTcpIDstICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDENCitBVDkxQ19QSU9fUEE4ICAgICAgICAgICAgIEVRVSAoMSA8PCAgOCkgOy0gUGluIENvbnRyb2xsZWQgYnkgUEE4DQorQVQ5MUNfUEE4X1JUUzEgICAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQTgpIDstICBVU0FSVCAxIFJlYWR5IFRvIFNlbmQNCitBVDkxQ19QQThfTlBDUzAyICAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BBOCkgOy0gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMg0KK0FUOTFDX1BJT19QQTkgICAgICAgICAgICAgRVFVICgxIDw8ICA5KSA7LSBQaW4gQ29udHJvbGxlZCBieSBQQTkNCitBVDkxQ19QQTlfQ1RTMSAgICAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BBOSkgOy0gIFVTQVJUIDEgQ2xlYXIgVG8gU2VuZA0KK0FUOTFDX1BBOV9OUENTMDMgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEE5KSA7LSAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzDQorQVQ5MUNfUElPX1BCMCAgICAgICAgICAgICBFUVUgKDEgPDwgIDApIDstIFBpbiBDb250cm9sbGVkIGJ5IFBCMA0KK0FUOTFDX1BCMF9FVFhDS19FUkVGQ0sgICAgRVFVIChBVDkxQ19QSU9fUEIwKSA7LSAgRXRoZXJuZXQgTUFDIFRyYW5zbWl0IENsb2NrL1JlZmVyZW5jZSBDbG9jaw0KK0FUOTFDX1BCMF9QQ0swICAgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEIwKSA7LSAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMA0KK0FUOTFDX1BJT19QQjEgICAgICAgICAgICAgRVFVICgxIDw8ICAxKSA7LSBQaW4gQ29udHJvbGxlZCBieSBQQjENCitBVDkxQ19QQjFfRVRYRU4gICAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BCMSkgOy0gIEV0aGVybmV0IE1BQyBUcmFuc21pdCBFbmFibGUNCitBVDkxQ19QSU9fUEIxMCAgICAgICAgICAgIEVRVSAoMSA8PCAxMCkgOy0gUGluIENvbnRyb2xsZWQgYnkgUEIxMA0KK0FUOTFDX1BCMTBfRVRYMiAgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEIxMCkgOy0gIEV0aGVybmV0IE1BQyBUcmFuc21pdCBEYXRhIDINCitBVDkxQ19QQjEwX05QQ1MxMSAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BCMTApIDstICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDENCitBVDkxQ19QSU9fUEIxMSAgICAgICAgICAgIEVRVSAoMSA8PCAxMSkgOy0gUGluIENvbnRyb2xsZWQgYnkgUEIxMQ0KK0FUOTFDX1BCMTFfRVRYMyAgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEIxMSkgOy0gIEV0aGVybmV0IE1BQyBUcmFuc21pdCBEYXRhIDMNCitBVDkxQ19QQjExX05QQ1MxMiAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BCMTEpIDstICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDINCitBVDkxQ19QSU9fUEIxMiAgICAgICAgICAgIEVRVSAoMSA8PCAxMikgOy0gUGluIENvbnRyb2xsZWQgYnkgUEIxMg0KK0FUOTFDX1BCMTJfRVRYRVIgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEIxMikgOy0gIEV0aGVybmV0IE1BQyBUcmFuc21pa3QgQ29kaW5nIEVycm9yDQorQVQ5MUNfUEIxMl9UQ0xLMCAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQjEyKSA7LSAgVGltZXIgQ291bnRlciAwIGV4dGVybmFsIGNsb2NrIGlucHV0DQorQVQ5MUNfUElPX1BCMTMgICAgICAgICAgICBFUVUgKDEgPDwgMTMpIDstIFBpbiBDb250cm9sbGVkIGJ5IFBCMTMNCitBVDkxQ19QQjEzX0VSWDIgICAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BCMTMpIDstICBFdGhlcm5ldCBNQUMgUmVjZWl2ZSBEYXRhIDINCitBVDkxQ19QQjEzX05QQ1MwMSAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BCMTMpIDstICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDENCitBVDkxQ19QSU9fUEIxNCAgICAgICAgICAgIEVRVSAoMSA8PCAxNCkgOy0gUGluIENvbnRyb2xsZWQgYnkgUEIxNA0KK0FUOTFDX1BCMTRfRVJYMyAgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEIxNCkgOy0gIEV0aGVybmV0IE1BQyBSZWNlaXZlIERhdGEgMw0KK0FUOTFDX1BCMTRfTlBDUzAyICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEIxNCkgOy0gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMg0KK0FUOTFDX1BJT19QQjE1ICAgICAgICAgICAgRVFVICgxIDw8IDE1KSA7LSBQaW4gQ29udHJvbGxlZCBieSBQQjE1DQorQVQ5MUNfUEIxNV9FUlhEViAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQjE1KSA7LSAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgRGF0YSBWYWxpZA0KK0FUOTFDX1BJT19QQjE2ICAgICAgICAgICAgRVFVICgxIDw8IDE2KSA7LSBQaW4gQ29udHJvbGxlZCBieSBQQjE2DQorQVQ5MUNfUEIxNl9FQ09MICAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQjE2KSA7LSAgRXRoZXJuZXQgTUFDIENvbGxpc2lvbiBEZXRlY3RlZA0KK0FUOTFDX1BCMTZfTlBDUzEzICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEIxNikgOy0gIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMw0KK0FUOTFDX1BJT19QQjE3ICAgICAgICAgICAgRVFVICgxIDw8IDE3KSA7LSBQaW4gQ29udHJvbGxlZCBieSBQQjE3DQorQVQ5MUNfUEIxN19FUlhDSyAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQjE3KSA7LSAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgQ2xvY2sNCitBVDkxQ19QQjE3X05QQ1MwMyAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BCMTcpIDstICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMNCitBVDkxQ19QSU9fUEIxOCAgICAgICAgICAgIEVRVSAoMSA8PCAxOCkgOy0gUGluIENvbnRyb2xsZWQgYnkgUEIxOA0KK0FUOTFDX1BCMThfRUYxMDAgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEIxOCkgOy0gIEV0aGVybmV0IE1BQyBGb3JjZSAxMDAgTWJpdHMvc2VjDQorQVQ5MUNfUEIxOF9BRFRSRyAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQjE4KSA7LSAgQURDIEV4dGVybmFsIFRyaWdnZXINCitBVDkxQ19QSU9fUEIxOSAgICAgICAgICAgIEVRVSAoMSA8PCAxOSkgOy0gUGluIENvbnRyb2xsZWQgYnkgUEIxOQ0KK0FUOTFDX1BCMTlfUFdNMCAgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEIxOSkgOy0gIFBXTSBDaGFubmVsIDANCitBVDkxQ19QQjE5X1RDTEsxICAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BCMTkpIDstICBUaW1lciBDb3VudGVyIDEgZXh0ZXJuYWwgY2xvY2sgaW5wdXQNCitBVDkxQ19QSU9fUEIyICAgICAgICAgICAgIEVRVSAoMSA8PCAgMikgOy0gUGluIENvbnRyb2xsZWQgYnkgUEIyDQorQVQ5MUNfUEIyX0VUWDAgICAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQjIpIDstICBFdGhlcm5ldCBNQUMgVHJhbnNtaXQgRGF0YSAwDQorQVQ5MUNfUElPX1BCMjAgICAgICAgICAgICBFUVUgKDEgPDwgMjApIDstIFBpbiBDb250cm9sbGVkIGJ5IFBCMjANCitBVDkxQ19QQjIwX1BXTTEgICAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BCMjApIDstICBQV00gQ2hhbm5lbCAxDQorQVQ5MUNfUEIyMF9QQ0swICAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQjIwKSA7LSAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMA0KK0FUOTFDX1BJT19QQjIxICAgICAgICAgICAgRVFVICgxIDw8IDIxKSA7LSBQaW4gQ29udHJvbGxlZCBieSBQQjIxDQorQVQ5MUNfUEIyMV9QV00yICAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQjIxKSA7LSAgUFdNIENoYW5uZWwgMg0KK0FUOTFDX1BCMjFfUENLMSAgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEIyMSkgOy0gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDENCitBVDkxQ19QSU9fUEIyMiAgICAgICAgICAgIEVRVSAoMSA8PCAyMikgOy0gUGluIENvbnRyb2xsZWQgYnkgUEIyMg0KK0FUOTFDX1BCMjJfUFdNMyAgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEIyMikgOy0gIFBXTSBDaGFubmVsIDMNCitBVDkxQ19QQjIyX1BDSzIgICAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BCMjIpIDstICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAyDQorQVQ5MUNfUElPX1BCMjMgICAgICAgICAgICBFUVUgKDEgPDwgMjMpIDstIFBpbiBDb250cm9sbGVkIGJ5IFBCMjMNCitBVDkxQ19QQjIzX1RJT0EwICAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BCMjMpIDstICBUaW1lciBDb3VudGVyIDAgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQQ0KK0FUOTFDX1BCMjNfRENEMSAgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEIyMykgOy0gIFVTQVJUIDEgRGF0YSBDYXJyaWVyIERldGVjdA0KK0FUOTFDX1BJT19QQjI0ICAgICAgICAgICAgRVFVICgxIDw8IDI0KSA7LSBQaW4gQ29udHJvbGxlZCBieSBQQjI0DQorQVQ5MUNfUEIyNF9USU9CMCAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQjI0KSA7LSAgVGltZXIgQ291bnRlciAwIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEINCitBVDkxQ19QQjI0X0RTUjEgICAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BCMjQpIDstICBVU0FSVCAxIERhdGEgU2V0IHJlYWR5DQorQVQ5MUNfUElPX1BCMjUgICAgICAgICAgICBFUVUgKDEgPDwgMjUpIDstIFBpbiBDb250cm9sbGVkIGJ5IFBCMjUNCitBVDkxQ19QQjI1X1RJT0ExICAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BCMjUpIDstICBUaW1lciBDb3VudGVyIDEgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQQ0KK0FUOTFDX1BCMjVfRFRSMSAgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEIyNSkgOy0gIFVTQVJUIDEgRGF0YSBUZXJtaW5hbCByZWFkeQ0KK0FUOTFDX1BJT19QQjI2ICAgICAgICAgICAgRVFVICgxIDw8IDI2KSA7LSBQaW4gQ29udHJvbGxlZCBieSBQQjI2DQorQVQ5MUNfUEIyNl9USU9CMSAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQjI2KSA7LSAgVGltZXIgQ291bnRlciAxIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEINCitBVDkxQ19QQjI2X1JJMSAgICAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BCMjYpIDstICBVU0FSVCAxIFJpbmcgSW5kaWNhdG9yDQorQVQ5MUNfUElPX1BCMjcgICAgICAgICAgICBFUVUgKDEgPDwgMjcpIDstIFBpbiBDb250cm9sbGVkIGJ5IFBCMjcNCitBVDkxQ19QQjI3X1RJT0EyICAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BCMjcpIDstICBUaW1lciBDb3VudGVyIDIgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQQ0KK0FUOTFDX1BCMjdfUFdNMCAgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEIyNykgOy0gIFBXTSBDaGFubmVsIDANCitBVDkxQ19QSU9fUEIyOCAgICAgICAgICAgIEVRVSAoMSA8PCAyOCkgOy0gUGluIENvbnRyb2xsZWQgYnkgUEIyOA0KK0FUOTFDX1BCMjhfVElPQjIgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEIyOCkgOy0gIFRpbWVyIENvdW50ZXIgMiBNdWx0aXB1cnBvc2UgVGltZXIgSS9PIFBpbiBCDQorQVQ5MUNfUEIyOF9QV00xICAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQjI4KSA7LSAgUFdNIENoYW5uZWwgMQ0KK0FUOTFDX1BJT19QQjI5ICAgICAgICAgICAgRVFVICgxIDw8IDI5KSA7LSBQaW4gQ29udHJvbGxlZCBieSBQQjI5DQorQVQ5MUNfUEIyOV9QQ0sxICAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQjI5KSA7LSAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMQ0KK0FUOTFDX1BCMjlfUFdNMiAgICAgICAgICAgRVFVIChBVDkxQ19QSU9fUEIyOSkgOy0gIFBXTSBDaGFubmVsIDINCitBVDkxQ19QSU9fUEIzICAgICAgICAgICAgIEVRVSAoMSA8PCAgMykgOy0gUGluIENvbnRyb2xsZWQgYnkgUEIzDQorQVQ5MUNfUEIzX0VUWDEgICAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQjMpIDstICBFdGhlcm5ldCBNQUMgVHJhbnNtaXQgRGF0YSAxDQorQVQ5MUNfUElPX1BCMzAgICAgICAgICAgICBFUVUgKDEgPDwgMzApIDstIFBpbiBDb250cm9sbGVkIGJ5IFBCMzANCitBVDkxQ19QQjMwX1BDSzIgICAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BCMzApIDstICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAyDQorQVQ5MUNfUEIzMF9QV00zICAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQjMwKSA7LSAgUFdNIENoYW5uZWwgMw0KK0FUOTFDX1BJT19QQjQgICAgICAgICAgICAgRVFVICgxIDw8ICA0KSA7LSBQaW4gQ29udHJvbGxlZCBieSBQQjQNCitBVDkxQ19QQjRfRUNSU19FQ1JTRFYgICAgIEVRVSAoQVQ5MUNfUElPX1BCNCkgOy0gIEV0aGVybmV0IE1BQyBDYXJyaWVyIFNlbnNlL0NhcnJpZXIgU2Vuc2UgYW5kIERhdGEgVmFsaWQNCitBVDkxQ19QSU9fUEI1ICAgICAgICAgICAgIEVRVSAoMSA8PCAgNSkgOy0gUGluIENvbnRyb2xsZWQgYnkgUEI1DQorQVQ5MUNfUEI1X0VSWDAgICAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQjUpIDstICBFdGhlcm5ldCBNQUMgUmVjZWl2ZSBEYXRhIDANCitBVDkxQ19QSU9fUEI2ICAgICAgICAgICAgIEVRVSAoMSA8PCAgNikgOy0gUGluIENvbnRyb2xsZWQgYnkgUEI2DQorQVQ5MUNfUEI2X0VSWDEgICAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQjYpIDstICBFdGhlcm5ldCBNQUMgUmVjZWl2ZSBEYXRhIDENCitBVDkxQ19QSU9fUEI3ICAgICAgICAgICAgIEVRVSAoMSA8PCAgNykgOy0gUGluIENvbnRyb2xsZWQgYnkgUEI3DQorQVQ5MUNfUEI3X0VSWEVSICAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQjcpIDstICBFdGhlcm5ldCBNQUMgUmVjZWl2ZSBFcnJvcg0KK0FUOTFDX1BJT19QQjggICAgICAgICAgICAgRVFVICgxIDw8ICA4KSA7LSBQaW4gQ29udHJvbGxlZCBieSBQQjgNCitBVDkxQ19QQjhfRU1EQyAgICAgICAgICAgIEVRVSAoQVQ5MUNfUElPX1BCOCkgOy0gIEV0aGVybmV0IE1BQyBNYW5hZ2VtZW50IERhdGEgQ2xvY2sNCitBVDkxQ19QSU9fUEI5ICAgICAgICAgICAgIEVRVSAoMSA8PCAgOSkgOy0gUGluIENvbnRyb2xsZWQgYnkgUEI5DQorQVQ5MUNfUEI5X0VNRElPICAgICAgICAgICBFUVUgKEFUOTFDX1BJT19QQjkpIDstICBFdGhlcm5ldCBNQUMgTWFuYWdlbWVudCBEYXRhIElucHV0L091dHB1dA0KIA0KLS8qIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAtICAgICAgICAgICAgICAgUEVSSVBIRVJBTCBJRCBERUZJTklUSU9OUyBGT1IgQVQ5MVNBTTdYMjU2ICovDQotLyogLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfSURfRklRIEVRVSggMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLUFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyKCBGSVEgKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfSURfU1lTIEVRVSggMSApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVN5c3RlbSBQZXJpcGhlcmFsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19JRF9QSU9BIEVRVSggMiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVBhcmFsbGVsIElPIENvbnRyb2xsZXIgQQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfSURfUElPQiBFUVUoIDMgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1QYXJhbGxlbCBJTyBDb250cm9sbGVyIEINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0lEX1NQSTAgRVFVKCA0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlIDANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0lEX1NQSTEgRVFVKCA1ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlIDENCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0lEX1VTMCBFUVUoIDYgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1VU0FSVCAwDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19JRF9VUzEgRVFVKCA3ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtVVNBUlQgMQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfSURfU1NDIEVRVSggOCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVNlcmlhbCBTeW5jaHJvbm91cyBDb250cm9sbGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19JRF9UV0kgRVFVKCA5ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtVHdvIC0gV2lyZSBJbnRlcmZhY2UNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0lEX1BXTUMgRVFVKCAxMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVBXTSBDb250cm9sbGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19JRF9VRFAgRVFVKCAxMSApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVVTQiBEZXZpY2UgUG9ydA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfSURfVEMwIEVRVSggMTIgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1UaW1lciBDb3VudGVyIDANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0lEX1RDMSBFUVUoIDEzICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtVGltZXIgQ291bnRlciAxDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19JRF9UQzIgRVFVKCAxNCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVRpbWVyIENvdW50ZXIgMg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfSURfQ0FOIEVRVSggMTUgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1Db250cm9sIEFyZWEgTmV0d29yayBDb250cm9sbGVyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19JRF9FTUFDIEVRVSggMTYgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1FdGhlcm5ldCBNQUMNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0lEX0FEQyBFUVUoIDE3ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtQW5hbG9nIC0gdG8gLSBEaWdpdGFsIENvbnZlcnRlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfSURfQUVTIEVRVSggMTggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1BZHZhbmNlZCBFbmNyeXB0aW9uIFN0YW5kYXJkIDEyOCAtIGJpdA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfSURfVERFUyBFUVUoIDE5ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtVHJpcGxlIERhdGEgRW5jcnlwdGlvbiBTdGFuZGFyZA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfSURfMjBfUmVzZXJ2ZWQgRVFVKCAyMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVJlc2VydmVkDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19JRF8yMV9SZXNlcnZlZCBFUVUoIDIxICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtUmVzZXJ2ZWQNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0lEXzIyX1Jlc2VydmVkIEVRVSggMjIgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1SZXNlcnZlZA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfSURfMjNfUmVzZXJ2ZWQgRVFVKCAyMyApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVJlc2VydmVkDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19JRF8yNF9SZXNlcnZlZCBFUVUoIDI0ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtUmVzZXJ2ZWQNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0lEXzI1X1Jlc2VydmVkIEVRVSggMjUgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1SZXNlcnZlZA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfSURfMjZfUmVzZXJ2ZWQgRVFVKCAyNiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVJlc2VydmVkDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19JRF8yN19SZXNlcnZlZCBFUVUoIDI3ICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtUmVzZXJ2ZWQNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0lEXzI4X1Jlc2VydmVkIEVRVSggMjggKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1SZXNlcnZlZA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfSURfMjlfUmVzZXJ2ZWQgRVFVKCAyOSApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVJlc2VydmVkDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19JRF9JUlEwIEVRVSggMzAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1BZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciggSVJRMCApDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19JRF9JUlExIEVRVSggMzEgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1BZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciggSVJRMSApDQorLy8gLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vIC0gICAgICAgICAgICAgICBQRVJJUEhFUkFMIElEIERFRklOSVRJT05TIEZPUiBBVDkxU0FNN1gyNTYNCisvLyAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorQVQ5MUNfSURfRklRICAgICAgICAgICAgICBFUVUgKCAwKSA7LSBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoRklRKQ0KK0FUOTFDX0lEX1NZUyAgICAgICAgICAgICAgRVFVICggMSkgOy0gU3lzdGVtIFBlcmlwaGVyYWwNCitBVDkxQ19JRF9QSU9BICAgICAgICAgICAgIEVRVSAoIDIpIDstIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgQQ0KK0FUOTFDX0lEX1BJT0IgICAgICAgICAgICAgRVFVICggMykgOy0gUGFyYWxsZWwgSU8gQ29udHJvbGxlciBCDQorQVQ5MUNfSURfU1BJMCAgICAgICAgICAgICBFUVUgKCA0KSA7LSBTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgMA0KK0FUOTFDX0lEX1NQSTEgICAgICAgICAgICAgRVFVICggNSkgOy0gU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlIDENCitBVDkxQ19JRF9VUzAgICAgICAgICAgICAgIEVRVSAoIDYpIDstIFVTQVJUIDANCitBVDkxQ19JRF9VUzEgICAgICAgICAgICAgIEVRVSAoIDcpIDstIFVTQVJUIDENCitBVDkxQ19JRF9TU0MgICAgICAgICAgICAgIEVRVSAoIDgpIDstIFNlcmlhbCBTeW5jaHJvbm91cyBDb250cm9sbGVyDQorQVQ5MUNfSURfVFdJICAgICAgICAgICAgICBFUVUgKCA5KSA7LSBUd28tV2lyZSBJbnRlcmZhY2UNCitBVDkxQ19JRF9QV01DICAgICAgICAgICAgIEVRVSAoMTApIDstIFBXTSBDb250cm9sbGVyDQorQVQ5MUNfSURfVURQICAgICAgICAgICAgICBFUVUgKDExKSA7LSBVU0IgRGV2aWNlIFBvcnQNCitBVDkxQ19JRF9UQzAgICAgICAgICAgICAgIEVRVSAoMTIpIDstIFRpbWVyIENvdW50ZXIgMA0KK0FUOTFDX0lEX1RDMSAgICAgICAgICAgICAgRVFVICgxMykgOy0gVGltZXIgQ291bnRlciAxDQorQVQ5MUNfSURfVEMyICAgICAgICAgICAgICBFUVUgKDE0KSA7LSBUaW1lciBDb3VudGVyIDINCitBVDkxQ19JRF9DQU4gICAgICAgICAgICAgIEVRVSAoMTUpIDstIENvbnRyb2wgQXJlYSBOZXR3b3JrIENvbnRyb2xsZXINCitBVDkxQ19JRF9FTUFDICAgICAgICAgICAgIEVRVSAoMTYpIDstIEV0aGVybmV0IE1BQw0KK0FUOTFDX0lEX0FEQyAgICAgICAgICAgICAgRVFVICgxNykgOy0gQW5hbG9nLXRvLURpZ2l0YWwgQ29udmVydGVyDQorQVQ5MUNfSURfQUVTICAgICAgICAgICAgICBFUVUgKDE4KSA7LSBBZHZhbmNlZCBFbmNyeXB0aW9uIFN0YW5kYXJkIDEyOC1iaXQNCitBVDkxQ19JRF9UREVTICAgICAgICAgICAgIEVRVSAoMTkpIDstIFRyaXBsZSBEYXRhIEVuY3J5cHRpb24gU3RhbmRhcmQNCitBVDkxQ19JRF8yMF9SZXNlcnZlZCAgICAgIEVRVSAoMjApIDstIFJlc2VydmVkDQorQVQ5MUNfSURfMjFfUmVzZXJ2ZWQgICAgICBFUVUgKDIxKSA7LSBSZXNlcnZlZA0KK0FUOTFDX0lEXzIyX1Jlc2VydmVkICAgICAgRVFVICgyMikgOy0gUmVzZXJ2ZWQNCitBVDkxQ19JRF8yM19SZXNlcnZlZCAgICAgIEVRVSAoMjMpIDstIFJlc2VydmVkDQorQVQ5MUNfSURfMjRfUmVzZXJ2ZWQgICAgICBFUVUgKDI0KSA7LSBSZXNlcnZlZA0KK0FUOTFDX0lEXzI1X1Jlc2VydmVkICAgICAgRVFVICgyNSkgOy0gUmVzZXJ2ZWQNCitBVDkxQ19JRF8yNl9SZXNlcnZlZCAgICAgIEVRVSAoMjYpIDstIFJlc2VydmVkDQorQVQ5MUNfSURfMjdfUmVzZXJ2ZWQgICAgICBFUVUgKDI3KSA7LSBSZXNlcnZlZA0KK0FUOTFDX0lEXzI4X1Jlc2VydmVkICAgICAgRVFVICgyOCkgOy0gUmVzZXJ2ZWQNCitBVDkxQ19JRF8yOV9SZXNlcnZlZCAgICAgIEVRVSAoMjkpIDstIFJlc2VydmVkDQorQVQ5MUNfSURfSVJRMCAgICAgICAgICAgICBFUVUgKDMwKSA7LSBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoSVJRMCkNCitBVDkxQ19JRF9JUlExICAgICAgICAgICAgIEVRVSAoMzEpIDstIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChJUlExKQ0KIA0KLS8qIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAtICAgICAgICAgICAgICAgQkFTRSBBRERSRVNTIERFRklOSVRJT05TIEZPUiBBVDkxU0FNN1gyNTYgKi8NCi0vKiAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19CQVNFX1NZUyBFUVUoIDB4RkZGRkYwMDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFNZUyApIEJhc2UgQWRkcmVzcw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQkFTRV9BSUMgRVFVKCAweEZGRkZGMDAwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBBSUMgKSBCYXNlIEFkZHJlc3MNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0JBU0VfUERDX0RCR1UgRVFVKCAweEZGRkZGMzAwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQRENfREJHVSApIEJhc2UgQWRkcmVzcw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQkFTRV9EQkdVIEVRVSggMHhGRkZGRjIwMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggREJHVSApIEJhc2UgQWRkcmVzcw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQkFTRV9QSU9BIEVRVSggMHhGRkZGRjQwMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUElPQSApIEJhc2UgQWRkcmVzcw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQkFTRV9QSU9CIEVRVSggMHhGRkZGRjYwMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUElPQiApIEJhc2UgQWRkcmVzcw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQkFTRV9DS0dSIEVRVSggMHhGRkZGRkMyMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0tHUiApIEJhc2UgQWRkcmVzcw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQkFTRV9QTUMgRVFVKCAweEZGRkZGQzAwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQTUMgKSBCYXNlIEFkZHJlc3MNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0JBU0VfUlNUQyBFUVUoIDB4RkZGRkZEMDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFJTVEMgKSBCYXNlIEFkZHJlc3MNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0JBU0VfUlRUQyBFUVUoIDB4RkZGRkZEMjAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFJUVEMgKSBCYXNlIEFkZHJlc3MNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0JBU0VfUElUQyBFUVUoIDB4RkZGRkZEMzAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBJVEMgKSBCYXNlIEFkZHJlc3MNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0JBU0VfV0RUQyBFUVUoIDB4RkZGRkZENDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFdEVEMgKSBCYXNlIEFkZHJlc3MNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0JBU0VfVlJFRyBFUVUoIDB4RkZGRkZENjAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFZSRUcgKSBCYXNlIEFkZHJlc3MNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0JBU0VfTUMgRVFVKCAweEZGRkZGRjAwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBNQyApIEJhc2UgQWRkcmVzcw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQkFTRV9QRENfU1BJMSBFUVUoIDB4RkZGRTQxMDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBEQ19TUEkxICkgQmFzZSBBZGRyZXNzDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19CQVNFX1NQSTEgRVFVKCAweEZGRkU0MDAwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBTUEkxICkgQmFzZSBBZGRyZXNzDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19CQVNFX1BEQ19TUEkwIEVRVSggMHhGRkZFMDEwMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUERDX1NQSTAgKSBCYXNlIEFkZHJlc3MNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0JBU0VfU1BJMCBFUVUoIDB4RkZGRTAwMDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFNQSTAgKSBCYXNlIEFkZHJlc3MNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0JBU0VfUERDX1VTMSBFUVUoIDB4RkZGQzQxMDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBEQ19VUzEgKSBCYXNlIEFkZHJlc3MNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0JBU0VfVVMxIEVRVSggMHhGRkZDNDAwMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVVMxICkgQmFzZSBBZGRyZXNzDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19CQVNFX1BEQ19VUzAgRVFVKCAweEZGRkMwMTAwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQRENfVVMwICkgQmFzZSBBZGRyZXNzDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19CQVNFX1VTMCBFUVUoIDB4RkZGQzAwMDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFVTMCApIEJhc2UgQWRkcmVzcw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQkFTRV9QRENfU1NDIEVRVSggMHhGRkZENDEwMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUERDX1NTQyApIEJhc2UgQWRkcmVzcw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQkFTRV9TU0MgRVFVKCAweEZGRkQ0MDAwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBTU0MgKSBCYXNlIEFkZHJlc3MNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0JBU0VfVFdJIEVRVSggMHhGRkZCODAwMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVFdJICkgQmFzZSBBZGRyZXNzDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19CQVNFX1BXTUNfQ0gzIEVRVSggMHhGRkZDQzI2MCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUFdNQ19DSDMgKSBCYXNlIEFkZHJlc3MNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0JBU0VfUFdNQ19DSDIgRVFVKCAweEZGRkNDMjQwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQV01DX0NIMiApIEJhc2UgQWRkcmVzcw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQkFTRV9QV01DX0NIMSBFUVUoIDB4RkZGQ0MyMjAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBXTUNfQ0gxICkgQmFzZSBBZGRyZXNzDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19CQVNFX1BXTUNfQ0gwIEVRVSggMHhGRkZDQzIwMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggUFdNQ19DSDAgKSBCYXNlIEFkZHJlc3MNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0JBU0VfUFdNQyBFUVUoIDB4RkZGQ0MwMDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBXTUMgKSBCYXNlIEFkZHJlc3MNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0JBU0VfVURQIEVRVSggMHhGRkZCMDAwMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVURQICkgQmFzZSBBZGRyZXNzDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19CQVNFX1RDMCBFUVUoIDB4RkZGQTAwMDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDMCApIEJhc2UgQWRkcmVzcw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQkFTRV9UQzEgRVFVKCAweEZGRkEwMDQwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUQzEgKSBCYXNlIEFkZHJlc3MNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0JBU0VfVEMyIEVRVSggMHhGRkZBMDA4MCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggVEMyICkgQmFzZSBBZGRyZXNzDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19CQVNFX1RDQiBFUVUoIDB4RkZGQTAwMDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFRDQiApIEJhc2UgQWRkcmVzcw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQkFTRV9DQU5fTUIwIEVRVSggMHhGRkZEMDIwMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOX01CMCApIEJhc2UgQWRkcmVzcw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQkFTRV9DQU5fTUIxIEVRVSggMHhGRkZEMDIyMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOX01CMSApIEJhc2UgQWRkcmVzcw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQkFTRV9DQU5fTUIyIEVRVSggMHhGRkZEMDI0MCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOX01CMiApIEJhc2UgQWRkcmVzcw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQkFTRV9DQU5fTUIzIEVRVSggMHhGRkZEMDI2MCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOX01CMyApIEJhc2UgQWRkcmVzcw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQkFTRV9DQU5fTUI0IEVRVSggMHhGRkZEMDI4MCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOX01CNCApIEJhc2UgQWRkcmVzcw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQkFTRV9DQU5fTUI1IEVRVSggMHhGRkZEMDJBMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOX01CNSApIEJhc2UgQWRkcmVzcw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQkFTRV9DQU5fTUI2IEVRVSggMHhGRkZEMDJDMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOX01CNiApIEJhc2UgQWRkcmVzcw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQkFTRV9DQU5fTUI3IEVRVSggMHhGRkZEMDJFMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQ0FOX01CNyApIEJhc2UgQWRkcmVzcw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQkFTRV9DQU4gRVFVKCAweEZGRkQwMDAwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBDQU4gKSBCYXNlIEFkZHJlc3MNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0JBU0VfRU1BQyBFUVUoIDB4RkZGREMwMDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEVNQUMgKSBCYXNlIEFkZHJlc3MNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0JBU0VfUERDX0FEQyBFUVUoIDB4RkZGRDgxMDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBEQ19BREMgKSBCYXNlIEFkZHJlc3MNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0JBU0VfQURDIEVRVSggMHhGRkZEODAwMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggQURDICkgQmFzZSBBZGRyZXNzDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19CQVNFX1BEQ19BRVMgRVFVKCAweEZGRkE0MTAwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBQRENfQUVTICkgQmFzZSBBZGRyZXNzDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19CQVNFX0FFUyBFUVUoIDB4RkZGQTQwMDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIEFFUyApIEJhc2UgQWRkcmVzcw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfQkFTRV9QRENfVERFUyBFUVUoIDB4RkZGQTgxMDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oIFBEQ19UREVTICkgQmFzZSBBZGRyZXNzDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19CQVNFX1RERVMgRVFVKCAweEZGRkE4MDAwICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKCBUREVTICkgQmFzZSBBZGRyZXNzDQorLy8gLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vIC0gICAgICAgICAgICAgICBCQVNFIEFERFJFU1MgREVGSU5JVElPTlMgRk9SIEFUOTFTQU03WDI1Ng0KKy8vIC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCitBVDkxQ19CQVNFX1NZUyAgICAgICAgICAgIEVRVSAoMHhGRkZGRjAwMCkgOy0gKFNZUykgQmFzZSBBZGRyZXNzDQorQVQ5MUNfQkFTRV9BSUMgICAgICAgICAgICBFUVUgKDB4RkZGRkYwMDApIDstIChBSUMpIEJhc2UgQWRkcmVzcw0KK0FUOTFDX0JBU0VfUERDX0RCR1UgICAgICAgRVFVICgweEZGRkZGMzAwKSA7LSAoUERDX0RCR1UpIEJhc2UgQWRkcmVzcw0KK0FUOTFDX0JBU0VfREJHVSAgICAgICAgICAgRVFVICgweEZGRkZGMjAwKSA7LSAoREJHVSkgQmFzZSBBZGRyZXNzDQorQVQ5MUNfQkFTRV9QSU9BICAgICAgICAgICBFUVUgKDB4RkZGRkY0MDApIDstIChQSU9BKSBCYXNlIEFkZHJlc3MNCitBVDkxQ19CQVNFX1BJT0IgICAgICAgICAgIEVRVSAoMHhGRkZGRjYwMCkgOy0gKFBJT0IpIEJhc2UgQWRkcmVzcw0KK0FUOTFDX0JBU0VfQ0tHUiAgICAgICAgICAgRVFVICgweEZGRkZGQzIwKSA7LSAoQ0tHUikgQmFzZSBBZGRyZXNzDQorQVQ5MUNfQkFTRV9QTUMgICAgICAgICAgICBFUVUgKDB4RkZGRkZDMDApIDstIChQTUMpIEJhc2UgQWRkcmVzcw0KK0FUOTFDX0JBU0VfUlNUQyAgICAgICAgICAgRVFVICgweEZGRkZGRDAwKSA7LSAoUlNUQykgQmFzZSBBZGRyZXNzDQorQVQ5MUNfQkFTRV9SVFRDICAgICAgICAgICBFUVUgKDB4RkZGRkZEMjApIDstIChSVFRDKSBCYXNlIEFkZHJlc3MNCitBVDkxQ19CQVNFX1BJVEMgICAgICAgICAgIEVRVSAoMHhGRkZGRkQzMCkgOy0gKFBJVEMpIEJhc2UgQWRkcmVzcw0KK0FUOTFDX0JBU0VfV0RUQyAgICAgICAgICAgRVFVICgweEZGRkZGRDQwKSA7LSAoV0RUQykgQmFzZSBBZGRyZXNzDQorQVQ5MUNfQkFTRV9WUkVHICAgICAgICAgICBFUVUgKDB4RkZGRkZENjApIDstIChWUkVHKSBCYXNlIEFkZHJlc3MNCitBVDkxQ19CQVNFX01DICAgICAgICAgICAgIEVRVSAoMHhGRkZGRkYwMCkgOy0gKE1DKSBCYXNlIEFkZHJlc3MNCitBVDkxQ19CQVNFX1BEQ19TUEkxICAgICAgIEVRVSAoMHhGRkZFNDEwMCkgOy0gKFBEQ19TUEkxKSBCYXNlIEFkZHJlc3MNCitBVDkxQ19CQVNFX1NQSTEgICAgICAgICAgIEVRVSAoMHhGRkZFNDAwMCkgOy0gKFNQSTEpIEJhc2UgQWRkcmVzcw0KK0FUOTFDX0JBU0VfUERDX1NQSTAgICAgICAgRVFVICgweEZGRkUwMTAwKSA7LSAoUERDX1NQSTApIEJhc2UgQWRkcmVzcw0KK0FUOTFDX0JBU0VfU1BJMCAgICAgICAgICAgRVFVICgweEZGRkUwMDAwKSA7LSAoU1BJMCkgQmFzZSBBZGRyZXNzDQorQVQ5MUNfQkFTRV9QRENfVVMxICAgICAgICBFUVUgKDB4RkZGQzQxMDApIDstIChQRENfVVMxKSBCYXNlIEFkZHJlc3MNCitBVDkxQ19CQVNFX1VTMSAgICAgICAgICAgIEVRVSAoMHhGRkZDNDAwMCkgOy0gKFVTMSkgQmFzZSBBZGRyZXNzDQorQVQ5MUNfQkFTRV9QRENfVVMwICAgICAgICBFUVUgKDB4RkZGQzAxMDApIDstIChQRENfVVMwKSBCYXNlIEFkZHJlc3MNCitBVDkxQ19CQVNFX1VTMCAgICAgICAgICAgIEVRVSAoMHhGRkZDMDAwMCkgOy0gKFVTMCkgQmFzZSBBZGRyZXNzDQorQVQ5MUNfQkFTRV9QRENfU1NDICAgICAgICBFUVUgKDB4RkZGRDQxMDApIDstIChQRENfU1NDKSBCYXNlIEFkZHJlc3MNCitBVDkxQ19CQVNFX1NTQyAgICAgICAgICAgIEVRVSAoMHhGRkZENDAwMCkgOy0gKFNTQykgQmFzZSBBZGRyZXNzDQorQVQ5MUNfQkFTRV9UV0kgICAgICAgICAgICBFUVUgKDB4RkZGQjgwMDApIDstIChUV0kpIEJhc2UgQWRkcmVzcw0KK0FUOTFDX0JBU0VfUFdNQ19DSDMgICAgICAgRVFVICgweEZGRkNDMjYwKSA7LSAoUFdNQ19DSDMpIEJhc2UgQWRkcmVzcw0KK0FUOTFDX0JBU0VfUFdNQ19DSDIgICAgICAgRVFVICgweEZGRkNDMjQwKSA7LSAoUFdNQ19DSDIpIEJhc2UgQWRkcmVzcw0KK0FUOTFDX0JBU0VfUFdNQ19DSDEgICAgICAgRVFVICgweEZGRkNDMjIwKSA7LSAoUFdNQ19DSDEpIEJhc2UgQWRkcmVzcw0KK0FUOTFDX0JBU0VfUFdNQ19DSDAgICAgICAgRVFVICgweEZGRkNDMjAwKSA7LSAoUFdNQ19DSDApIEJhc2UgQWRkcmVzcw0KK0FUOTFDX0JBU0VfUFdNQyAgICAgICAgICAgRVFVICgweEZGRkNDMDAwKSA7LSAoUFdNQykgQmFzZSBBZGRyZXNzDQorQVQ5MUNfQkFTRV9VRFAgICAgICAgICAgICBFUVUgKDB4RkZGQjAwMDApIDstIChVRFApIEJhc2UgQWRkcmVzcw0KK0FUOTFDX0JBU0VfVEMwICAgICAgICAgICAgRVFVICgweEZGRkEwMDAwKSA7LSAoVEMwKSBCYXNlIEFkZHJlc3MNCitBVDkxQ19CQVNFX1RDMSAgICAgICAgICAgIEVRVSAoMHhGRkZBMDA0MCkgOy0gKFRDMSkgQmFzZSBBZGRyZXNzDQorQVQ5MUNfQkFTRV9UQzIgICAgICAgICAgICBFUVUgKDB4RkZGQTAwODApIDstIChUQzIpIEJhc2UgQWRkcmVzcw0KK0FUOTFDX0JBU0VfVENCICAgICAgICAgICAgRVFVICgweEZGRkEwMDAwKSA7LSAoVENCKSBCYXNlIEFkZHJlc3MNCitBVDkxQ19CQVNFX0NBTl9NQjAgICAgICAgIEVRVSAoMHhGRkZEMDIwMCkgOy0gKENBTl9NQjApIEJhc2UgQWRkcmVzcw0KK0FUOTFDX0JBU0VfQ0FOX01CMSAgICAgICAgRVFVICgweEZGRkQwMjIwKSA7LSAoQ0FOX01CMSkgQmFzZSBBZGRyZXNzDQorQVQ5MUNfQkFTRV9DQU5fTUIyICAgICAgICBFUVUgKDB4RkZGRDAyNDApIDstIChDQU5fTUIyKSBCYXNlIEFkZHJlc3MNCitBVDkxQ19CQVNFX0NBTl9NQjMgICAgICAgIEVRVSAoMHhGRkZEMDI2MCkgOy0gKENBTl9NQjMpIEJhc2UgQWRkcmVzcw0KK0FUOTFDX0JBU0VfQ0FOX01CNCAgICAgICAgRVFVICgweEZGRkQwMjgwKSA7LSAoQ0FOX01CNCkgQmFzZSBBZGRyZXNzDQorQVQ5MUNfQkFTRV9DQU5fTUI1ICAgICAgICBFUVUgKDB4RkZGRDAyQTApIDstIChDQU5fTUI1KSBCYXNlIEFkZHJlc3MNCitBVDkxQ19CQVNFX0NBTl9NQjYgICAgICAgIEVRVSAoMHhGRkZEMDJDMCkgOy0gKENBTl9NQjYpIEJhc2UgQWRkcmVzcw0KK0FUOTFDX0JBU0VfQ0FOX01CNyAgICAgICAgRVFVICgweEZGRkQwMkUwKSA7LSAoQ0FOX01CNykgQmFzZSBBZGRyZXNzDQorQVQ5MUNfQkFTRV9DQU4gICAgICAgICAgICBFUVUgKDB4RkZGRDAwMDApIDstIChDQU4pIEJhc2UgQWRkcmVzcw0KK0FUOTFDX0JBU0VfRU1BQyAgICAgICAgICAgRVFVICgweEZGRkRDMDAwKSA7LSAoRU1BQykgQmFzZSBBZGRyZXNzDQorQVQ5MUNfQkFTRV9QRENfQURDICAgICAgICBFUVUgKDB4RkZGRDgxMDApIDstIChQRENfQURDKSBCYXNlIEFkZHJlc3MNCitBVDkxQ19CQVNFX0FEQyAgICAgICAgICAgIEVRVSAoMHhGRkZEODAwMCkgOy0gKEFEQykgQmFzZSBBZGRyZXNzDQorQVQ5MUNfQkFTRV9QRENfQUVTICAgICAgICBFUVUgKDB4RkZGQTQxMDApIDstIChQRENfQUVTKSBCYXNlIEFkZHJlc3MNCitBVDkxQ19CQVNFX0FFUyAgICAgICAgICAgIEVRVSAoMHhGRkZBNDAwMCkgOy0gKEFFUykgQmFzZSBBZGRyZXNzDQorQVQ5MUNfQkFTRV9QRENfVERFUyAgICAgICBFUVUgKDB4RkZGQTgxMDApIDstIChQRENfVERFUykgQmFzZSBBZGRyZXNzDQorQVQ5MUNfQkFTRV9UREVTICAgICAgICAgICBFUVUgKDB4RkZGQTgwMDApIDstIChUREVTKSBCYXNlIEFkZHJlc3MNCiANCi0vKiAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogLSAgICAgICAgICAgICAgIE1FTU9SWSBNQVBQSU5HIERFRklOSVRJT05TIEZPUiBBVDkxU0FNN1gyNTYgKi8NCi0vKiAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19JU1JBTSBFUVUoIDB4MDAyMDAwMDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1JbnRlcm5hbCBTUkFNIGJhc2UgYWRkcmVzcw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfSVNSQU1fU0laRSBFUVUoIDB4MDAwMTAwMDAgKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1JbnRlcm5hbCBTUkFNIHNpemUgaW4gYnl0ZSggNjQgS2J5dGUgKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfSUZMQVNIIEVRVSggMHgwMDEwMDAwMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLUludGVybmFsIFJPTSBiYXNlIGFkZHJlc3MNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX0lGTEFTSF9TSVpFIEVRVSggMHgwMDA0MDAwMCApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLUludGVybmFsIFJPTSBzaXplIGluIGJ5dGUoIDI1NiBLYnl0ZSApDQorLy8gLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vIC0gICAgICAgICAgICAgICBNRU1PUlkgTUFQUElORyBERUZJTklUSU9OUyBGT1IgQVQ5MVNBTTdYMjU2DQorLy8gLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK0FUOTFDX0lTUkFNICAgICAgICAgICAgICAgRVFVICgweDAwMjAwMDAwKSA7LSBJbnRlcm5hbCBTUkFNIGJhc2UgYWRkcmVzcw0KK0FUOTFDX0lTUkFNX1NJWkUgICAgICAgICAgRVFVICgweDAwMDEwMDAwKSA7LSBJbnRlcm5hbCBTUkFNIHNpemUgaW4gYnl0ZSAoNjQgS2J5dGUpDQorQVQ5MUNfSUZMQVNIICAgICAgICAgICAgICBFUVUgKDB4MDAxMDAwMDApIDstIEludGVybmFsIFJPTSBiYXNlIGFkZHJlc3MNCitBVDkxQ19JRkxBU0hfU0laRSAgICAgICAgIEVRVSAoMHgwMDA0MDAwMCkgOy0gSW50ZXJuYWwgUk9NIHNpemUgaW4gYnl0ZSAoMjU2IEtieXRlKQ0KIA0KIA0KIA0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0dDQy9BUk03X0FUOTFTQU03Uy9saWJfQVQ5MVNBTTdYMjU2LmMgYi9wb3J0YWJsZS9HQ0MvQVJNN19BVDkxU0FNN1MvbGliX0FUOTFTQU03WDI1Ni5jCmluZGV4IDk0ZmRkNzMuLjljYmQ4MjMgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0dDQy9BUk03X0FUOTFTQU03Uy9saWJfQVQ5MVNBTTdYMjU2LmMKKysrIGIvcG9ydGFibGUvR0NDL0FSTTdfQVQ5MVNBTTdTL2xpYl9BVDkxU0FNN1gyNTYuYwpAQCAtMSw1MCArMSw1MSBAQAotLyoqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogICAgICAgICBBVE1FTCBNaWNyb2NvbnRyb2xsZXIgU29mdHdhcmUgU3VwcG9ydCAgLSAgUk9VU1NFVCAgLSAqLw0KLS8qKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIERJU0NMQUlNRVI6ICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFUTUVMICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SICovDQotLyoqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgKi8NCi0vKiogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVCBBUkUgKi8NCi0vKiogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVRNRUwgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgKi8NCi0vKiogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCAqLw0KLS8qKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgKi8NCi0vKiogT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiAqLw0KLS8qKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyAqLw0KLS8qKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsICovDQotLyoqIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuICovDQotLyoqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogRmlsZSBOYW1lICAgICAgICAgICA6IGxpYl9BVDkxU0FNN1gyNTYuaCAqLw0KLS8qKiBPYmplY3QgICAgICAgICAgICAgIDogQVQ5MVNBTTdYMjU2IGlubGluZWQgZnVuY3Rpb25zICovDQotLyoqIEdlbmVyYXRlZCAgICAgICAgICAgOiBBVDkxIFNXIEFwcGxpY2F0aW9uIEdyb3VwICAwNS8yMC8yMDA1ICgxNjoyMjoyOSkgKi8NCi0vKiogKi8NCi0vKiogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfZGJndS5oLzEuMS9GcmkgSmFuIDMxIDEyOjE4OjQwIDIwMDMvLyAqLw0KLS8qKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9wbWNfU0FNN1guaC8xLjEvVHVlIEZlYiAgMSAwODozMjoxMCAyMDA1Ly8gKi8NCi0vKiogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfVlJFR182MDg1Qi5oLzEuMS9UdWUgRmViICAxIDE2OjIwOjQ3IDIwMDUvLyAqLw0KLS8qKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9yc3RjXzYwOThBLmgvMS4xL1dlZCBPY3QgIDYgMTA6Mzk6MjAgMjAwNC8vICovDQotLyoqIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3NzYy5oLzEuNC9GcmkgSmFuIDMxIDEyOjE5OjIwIDIwMDMvLyAqLw0KLS8qKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl93ZHRjXzYwODBBLmgvMS4xL1dlZCBPY3QgIDYgMTA6Mzg6MzAgMjAwNC8vICovDQotLyoqIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3VzYXJ0LmgvMS41L1RodSBOb3YgMjEgMTY6MDE6NTQgMjAwMi8vICovDQotLyoqIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3NwaTIuaC8xLjEvTW9uIEF1ZyAyNSAxNDoyMzo1MiAyMDAzLy8gKi8NCi0vKiogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfcGl0Y182MDc5QS5oLzEuMi9UdWUgTm92ICA5IDE0OjQzOjU2IDIwMDQvLyAqLw0KLS8qKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9haWNfNjA3NWIuaC8xLjEvRnJpIE1heSAyMCAxNDowMToxOSAyMDA1Ly8gKi8NCi0vKiogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfYWVzXzYxNDlhLmgvMS4xL01vbiBKYW4gMTcgMDc6NDM6MDkgMjAwNS8vICovDQotLyoqIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3R3aS5oLzEuMy9Nb24gSnVsIDE5IDE0OjI3OjU4IDIwMDQvLyAqLw0KLS8qKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9hZGMuaC8xLjYvRnJpIE9jdCAxNyAwOToxMjozOCAyMDAzLy8gKi8NCi0vKiogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfcnR0Y182MDgxQS5oLzEuMS9XZWQgT2N0ICA2IDEwOjM5OjM4IDIwMDQvLyAqLw0KLS8qKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl91ZHAuaC8xLjQvV2VkIEZlYiAxNiAwODozOTozNCAyMDA1Ly8gKi8NCi0vKiogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfZGVzM182MTUwYS5oLzEuMS9Nb24gSmFuIDE3IDA5OjE5OjE5IDIwMDUvLyAqLw0KLS8qKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl90Y18xNzUzYi5oLzEuMS9GcmkgSmFuIDMxIDEyOjIwOjAyIDIwMDMvLyAqLw0KLS8qKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9NQ19TQU03WC5oLzEuMS9UaHUgTWFyIDI1IDE1OjE5OjE0IDIwMDQvLyAqLw0KLS8qKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9waW8uaC8xLjMvRnJpIEphbiAzMSAxMjoxODo1NiAyMDAzLy8gKi8NCi0vKiogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfY2FuX0FUOTEuaC8xLjQvRnJpIE9jdCAxNyAwOToxMjo1MCAyMDAzLy8gKi8NCi0vKiogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfUFdNX1NBTS5oLzEuMy9UaHUgSmFuIDIyIDEwOjEwOjUwIDIwMDQvLyAqLw0KLS8qKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9wZGMuaC8xLjIvVHVlIEp1bCAgMiAxMzoyOTo0MCAyMDAyLy8gKi8NCi0vKiogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKy8vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qICAgICAgICAgQVRNRUwgTWljcm9jb250cm9sbGVyIFNvZnR3YXJlIFN1cHBvcnQgIC0gIFJPVVNTRVQgIC0NCisvLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBESVNDTEFJTUVSOiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVE1FTCAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUg0KKy8vKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GDQorLy8qIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQgQVJFDQorLy8qIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFUTUVMIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsDQorLy8qIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QNCisvLyogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsDQorLy8qIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YNCisvLyogTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcNCisvLyogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLA0KKy8vKiBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKy8vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIEZpbGUgTmFtZSAgICAgICAgICAgOiBsaWJfQVQ5MVNBTTdYMjU2LmgNCisvLyogT2JqZWN0ICAgICAgICAgICAgICA6IEFUOTFTQU03WDI1NiBpbmxpbmVkIGZ1bmN0aW9ucw0KKy8vKiBHZW5lcmF0ZWQgICAgICAgICAgIDogQVQ5MSBTVyBBcHBsaWNhdGlvbiBHcm91cCAgMDUvMjAvMjAwNSAoMTY6MjI6MjkpDQorLy8qDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX2RiZ3UuaC8xLjEvRnJpIEphbiAzMSAxMjoxODo0MCAyMDAzLy8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfcG1jX1NBTTdYLmgvMS4xL1R1ZSBGZWIgIDEgMDg6MzI6MTAgMjAwNS8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX1ZSRUdfNjA4NUIuaC8xLjEvVHVlIEZlYiAgMSAxNjoyMDo0NyAyMDA1Ly8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfcnN0Y182MDk4QS5oLzEuMS9XZWQgT2N0ICA2IDEwOjM5OjIwIDIwMDQvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9zc2MuaC8xLjQvRnJpIEphbiAzMSAxMjoxOToyMCAyMDAzLy8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfd2R0Y182MDgwQS5oLzEuMS9XZWQgT2N0ICA2IDEwOjM4OjMwIDIwMDQvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl91c2FydC5oLzEuNS9UaHUgTm92IDIxIDE2OjAxOjU0IDIwMDIvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9zcGkyLmgvMS4xL01vbiBBdWcgMjUgMTQ6MjM6NTIgMjAwMy8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3BpdGNfNjA3OUEuaC8xLjIvVHVlIE5vdiAgOSAxNDo0Mzo1NiAyMDA0Ly8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfYWljXzYwNzViLmgvMS4xL0ZyaSBNYXkgMjAgMTQ6MDE6MTkgMjAwNS8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX2Flc182MTQ5YS5oLzEuMS9Nb24gSmFuIDE3IDA3OjQzOjA5IDIwMDUvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl90d2kuaC8xLjMvTW9uIEp1bCAxOSAxNDoyNzo1OCAyMDA0Ly8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfYWRjLmgvMS42L0ZyaSBPY3QgMTcgMDk6MTI6MzggMjAwMy8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3J0dGNfNjA4MUEuaC8xLjEvV2VkIE9jdCAgNiAxMDozOTozOCAyMDA0Ly8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfdWRwLmgvMS40L1dlZCBGZWIgMTYgMDg6Mzk6MzQgMjAwNS8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX2RlczNfNjE1MGEuaC8xLjEvTW9uIEphbiAxNyAwOToxOToxOSAyMDA1Ly8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfdGNfMTc1M2IuaC8xLjEvRnJpIEphbiAzMSAxMjoyMDowMiAyMDAzLy8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfTUNfU0FNN1guaC8xLjEvVGh1IE1hciAyNSAxNToxOToxNCAyMDA0Ly8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfcGlvLmgvMS4zL0ZyaSBKYW4gMzEgMTI6MTg6NTYgMjAwMy8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX2Nhbl9BVDkxLmgvMS40L0ZyaSBPY3QgMTcgMDk6MTI6NTAgMjAwMy8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX1BXTV9TQU0uaC8xLjMvVGh1IEphbiAyMiAxMDoxMDo1MCAyMDA0Ly8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfcGRjLmgvMS4yL1R1ZSBKdWwgIDIgMTM6Mjk6NDAgMjAwMi8vDQorLy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiANCiANCiAjaW5jbHVkZSAiQVQ5MVNBTTdYMjU2LmgiDQogDQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQUlDX0NvbmZpZ3VyZUl0ICovDQotLyoqIFxicmllZiBJbnRlcnJ1cHQgSGFuZGxlciBJbml0aWFsaXphdGlvbiAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BSUNfQ29uZmlndXJlSXQNCisvLyogXGJyaWVmIEludGVycnVwdCBIYW5kbGVyIEluaXRpYWxpemF0aW9uDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0dDQy9BUk03X0FUOTFTQU03Uy9saWJfQVQ5MVNBTTdYMjU2LmggYi9wb3J0YWJsZS9HQ0MvQVJNN19BVDkxU0FNN1MvbGliX0FUOTFTQU03WDI1Ni5oCmluZGV4IDNjNGZkN2QuLmU2NmI0ZTEgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0dDQy9BUk03X0FUOTFTQU03Uy9saWJfQVQ5MVNBTTdYMjU2LmgKKysrIGIvcG9ydGFibGUvR0NDL0FSTTdfQVQ5MVNBTTdTL2xpYl9BVDkxU0FNN1gyNTYuaApAQCAtMSw0MzMyICsxLDQ1NTggQEAKLS8qKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqICAgICAgICAgQVRNRUwgTWljcm9jb250cm9sbGVyIFNvZnR3YXJlIFN1cHBvcnQgIC0gIFJPVVNTRVQgIC0gKi8NCi0vKiogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBESVNDTEFJTUVSOiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVE1FTCAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiAqLw0KLS8qKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GICovDQotLyoqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQgQVJFICovDQotLyoqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFUTUVMIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsICovDQotLyoqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgKi8NCi0vKiogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsICovDQotLyoqIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgKi8NCi0vKiogTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgKi8NCi0vKiogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCAqLw0KLS8qKiBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAqLw0KLS8qKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIEZpbGUgTmFtZSAgICAgICAgICAgOiBsaWJfQVQ5MVNBTTdYMjU2LmggKi8NCi0vKiogT2JqZWN0ICAgICAgICAgICAgICA6IEFUOTFTQU03WDI1NiBpbmxpbmVkIGZ1bmN0aW9ucyAqLw0KLS8qKiBHZW5lcmF0ZWQgICAgICAgICAgIDogQVQ5MSBTVyBBcHBsaWNhdGlvbiBHcm91cCAgMDUvMjAvMjAwNSAoMTY6MjI6MjkpICovDQotLyoqICovDQotLyoqIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX2RiZ3UuaC8xLjEvRnJpIEphbiAzMSAxMjoxODo0MCAyMDAzLy8gKi8NCi0vKiogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfcG1jX1NBTTdYLmgvMS4xL1R1ZSBGZWIgIDEgMDg6MzI6MTAgMjAwNS8vICovDQotLyoqIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX1ZSRUdfNjA4NUIuaC8xLjEvVHVlIEZlYiAgMSAxNjoyMDo0NyAyMDA1Ly8gKi8NCi0vKiogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfcnN0Y182MDk4QS5oLzEuMS9XZWQgT2N0ICA2IDEwOjM5OjIwIDIwMDQvLyAqLw0KLS8qKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9zc2MuaC8xLjQvRnJpIEphbiAzMSAxMjoxOToyMCAyMDAzLy8gKi8NCi0vKiogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfd2R0Y182MDgwQS5oLzEuMS9XZWQgT2N0ICA2IDEwOjM4OjMwIDIwMDQvLyAqLw0KLS8qKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl91c2FydC5oLzEuNS9UaHUgTm92IDIxIDE2OjAxOjU0IDIwMDIvLyAqLw0KLS8qKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9zcGkyLmgvMS4xL01vbiBBdWcgMjUgMTQ6MjM6NTIgMjAwMy8vICovDQotLyoqIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3BpdGNfNjA3OUEuaC8xLjIvVHVlIE5vdiAgOSAxNDo0Mzo1NiAyMDA0Ly8gKi8NCi0vKiogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfYWljXzYwNzViLmgvMS4xL0ZyaSBNYXkgMjAgMTQ6MDE6MTkgMjAwNS8vICovDQotLyoqIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX2Flc182MTQ5YS5oLzEuMS9Nb24gSmFuIDE3IDA3OjQzOjA5IDIwMDUvLyAqLw0KLS8qKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl90d2kuaC8xLjMvTW9uIEp1bCAxOSAxNDoyNzo1OCAyMDA0Ly8gKi8NCi0vKiogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfYWRjLmgvMS42L0ZyaSBPY3QgMTcgMDk6MTI6MzggMjAwMy8vICovDQotLyoqIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3J0dGNfNjA4MUEuaC8xLjEvV2VkIE9jdCAgNiAxMDozOTozOCAyMDA0Ly8gKi8NCi0vKiogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfdWRwLmgvMS40L1dlZCBGZWIgMTYgMDg6Mzk6MzQgMjAwNS8vICovDQotLyoqIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX2RlczNfNjE1MGEuaC8xLjEvTW9uIEphbiAxNyAwOToxOToxOSAyMDA1Ly8gKi8NCi0vKiogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfdGNfMTc1M2IuaC8xLjEvRnJpIEphbiAzMSAxMjoyMDowMiAyMDAzLy8gKi8NCi0vKiogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfTUNfU0FNN1guaC8xLjEvVGh1IE1hciAyNSAxNToxOToxNCAyMDA0Ly8gKi8NCi0vKiogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfcGlvLmgvMS4zL0ZyaSBKYW4gMzEgMTI6MTg6NTYgMjAwMy8vICovDQotLyoqIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX2Nhbl9BVDkxLmgvMS40L0ZyaSBPY3QgMTcgMDk6MTI6NTAgMjAwMy8vICovDQotLyoqIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX1BXTV9TQU0uaC8xLjMvVGh1IEphbiAyMiAxMDoxMDo1MCAyMDA0Ly8gKi8NCi0vKiogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfcGRjLmgvMS4yL1R1ZSBKdWwgIDIgMTM6Mjk6NDAgMjAwMi8vICovDQotLyoqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisvLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiAgICAgICAgIEFUTUVMIE1pY3JvY29udHJvbGxlciBTb2Z0d2FyZSBTdXBwb3J0ICAtICBST1VTU0VUICAtDQorLy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogRElTQ0xBSU1FUjogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVRNRUwgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1INCisvLyogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRg0KKy8vKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5UIEFSRQ0KKy8vKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBVE1FTCBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULA0KKy8vKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UDQorLy8qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLA0KKy8vKiBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GDQorLy8qIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HDQorLy8qIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwNCisvLyogRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisvLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBGaWxlIE5hbWUgICAgICAgICAgIDogbGliX0FUOTFTQU03WDI1Ni5oDQorLy8qIE9iamVjdCAgICAgICAgICAgICAgOiBBVDkxU0FNN1gyNTYgaW5saW5lZCBmdW5jdGlvbnMNCisvLyogR2VuZXJhdGVkICAgICAgICAgICA6IEFUOTEgU1cgQXBwbGljYXRpb24gR3JvdXAgIDA1LzIwLzIwMDUgKDE2OjIyOjI5KQ0KKy8vKg0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9kYmd1LmgvMS4xL0ZyaSBKYW4gMzEgMTI6MTg6NDAgMjAwMy8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3BtY19TQU03WC5oLzEuMS9UdWUgRmViICAxIDA4OjMyOjEwIDIwMDUvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9WUkVHXzYwODVCLmgvMS4xL1R1ZSBGZWIgIDEgMTY6MjA6NDcgMjAwNS8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3JzdGNfNjA5OEEuaC8xLjEvV2VkIE9jdCAgNiAxMDozOToyMCAyMDA0Ly8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfc3NjLmgvMS40L0ZyaSBKYW4gMzEgMTI6MTk6MjAgMjAwMy8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3dkdGNfNjA4MEEuaC8xLjEvV2VkIE9jdCAgNiAxMDozODozMCAyMDA0Ly8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfdXNhcnQuaC8xLjUvVGh1IE5vdiAyMSAxNjowMTo1NCAyMDAyLy8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfc3BpMi5oLzEuMS9Nb24gQXVnIDI1IDE0OjIzOjUyIDIwMDMvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9waXRjXzYwNzlBLmgvMS4yL1R1ZSBOb3YgIDkgMTQ6NDM6NTYgMjAwNC8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX2FpY182MDc1Yi5oLzEuMS9GcmkgTWF5IDIwIDE0OjAxOjE5IDIwMDUvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9hZXNfNjE0OWEuaC8xLjEvTW9uIEphbiAxNyAwNzo0MzowOSAyMDA1Ly8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfdHdpLmgvMS4zL01vbiBKdWwgMTkgMTQ6Mjc6NTggMjAwNC8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX2FkYy5oLzEuNi9GcmkgT2N0IDE3IDA5OjEyOjM4IDIwMDMvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9ydHRjXzYwODFBLmgvMS4xL1dlZCBPY3QgIDYgMTA6Mzk6MzggMjAwNC8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3VkcC5oLzEuNC9XZWQgRmViIDE2IDA4OjM5OjM0IDIwMDUvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9kZXMzXzYxNTBhLmgvMS4xL01vbiBKYW4gMTcgMDk6MTk6MTkgMjAwNS8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3RjXzE3NTNiLmgvMS4xL0ZyaSBKYW4gMzEgMTI6MjA6MDIgMjAwMy8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX01DX1NBTTdYLmgvMS4xL1RodSBNYXIgMjUgMTU6MTk6MTQgMjAwNC8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3Bpby5oLzEuMy9GcmkgSmFuIDMxIDEyOjE4OjU2IDIwMDMvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9jYW5fQVQ5MS5oLzEuNC9GcmkgT2N0IDE3IDA5OjEyOjUwIDIwMDMvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9QV01fU0FNLmgvMS4zL1RodSBKYW4gMjIgMTA6MTA6NTAgMjAwNC8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3BkYy5oLzEuMi9UdWUgSnVsICAyIDEzOjI5OjQwIDIwMDIvLw0KKy8vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogDQogI2lmbmRlZiBsaWJfQVQ5MVNBTTdYMjU2X0gNCiAjZGVmaW5lIGxpYl9BVDkxU0FNN1gyNTZfSA0KIA0KIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotKiAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgQUlDDQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19CUkFOQ0hfT1BDT0RFICAgICggKCB2b2lkICggKiApKCkgKSAweEU1MUZGRjIwICkgLyogbGRyLCBwYywgW3BjLCAjLSZGMjBdICovDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgQUlDDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisjZGVmaW5lIEFUOTFDX0FJQ19CUkFOQ0hfT1BDT0RFICgodm9pZCAoKikgKCkpIDB4RTUxRkZGMjApIC8vIGxkciwgcGMsIFtwYywgIy0mRjIwXQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FJQ19Db25maWd1cmVJdCAqLw0KLS8qKiBcYnJpZWYgSW50ZXJydXB0IEhhbmRsZXIgSW5pdGlhbGl6YXRpb24gKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FJQ19Db25maWd1cmVJdCggQVQ5MVBTX0FJQyBwQWljLCAgICAgICAgICAgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gdGhlIEFJQyByZWdpc3RlcnMgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaXJxX2lkLCAgICAgICAgICAgIC8qIFxhcmcgaW50ZXJydXB0IG51bWJlciB0byBpbml0aWFsaXplICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHByaW9yaXR5LCAgICAgICAgICAvKiBcYXJnIHByaW9yaXR5IHRvIGdpdmUgdG8gdGhlIGludGVycnVwdCAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzcmNfdHlwZSwgICAgICAgICAgLyogXGFyZyBhY3RpdmF0aW9uIGFuZCBzZW5zZSBvZiBhY3RpdmF0aW9uICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoICogbmV3SGFuZGxlciApKCB2b2lkICkgKSAvKiBcYXJnIGFkZHJlc3Mgb2YgdGhlIGludGVycnVwdCBoYW5kbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUlDX0NvbmZpZ3VyZUl0DQorLy8qIFxicmllZiBJbnRlcnJ1cHQgSGFuZGxlciBJbml0aWFsaXphdGlvbg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQUlDX0NvbmZpZ3VyZUl0ICgNCisJQVQ5MVBTX0FJQyBwQWljLCAgLy8gXGFyZyBwb2ludGVyIHRvIHRoZSBBSUMgcmVnaXN0ZXJzDQorCXVuc2lnbmVkIGludCBpcnFfaWQsICAgICAvLyBcYXJnIGludGVycnVwdCBudW1iZXIgdG8gaW5pdGlhbGl6ZQ0KKwl1bnNpZ25lZCBpbnQgcHJpb3JpdHksICAgLy8gXGFyZyBwcmlvcml0eSB0byBnaXZlIHRvIHRoZSBpbnRlcnJ1cHQNCisJdW5zaWduZWQgaW50IHNyY190eXBlLCAgIC8vIFxhcmcgYWN0aXZhdGlvbiBhbmQgc2Vuc2Ugb2YgYWN0aXZhdGlvbg0KKwl2b2lkICgqbmV3SGFuZGxlcikgKHZvaWQpICkgLy8gXGFyZyBhZGRyZXNzIG9mIHRoZSBpbnRlcnJ1cHQgaGFuZGxlcg0KIHsNCi0gICAgdW5zaWduZWQgaW50IG9sZEhhbmRsZXI7DQotICAgIHVuc2lnbmVkIGludCBtYXNrOw0KKwl1bnNpZ25lZCBpbnQgb2xkSGFuZGxlcjsNCisgICAgdW5zaWduZWQgaW50IG1hc2sgOw0KIA0KLSAgICBvbGRIYW5kbGVyID0gcEFpYy0+QUlDX1NWUlsgaXJxX2lkIF07DQorICAgIG9sZEhhbmRsZXIgPSBwQWljLT5BSUNfU1ZSW2lycV9pZF07DQogDQotICAgIG1hc2sgPSAweDEgPDwgaXJxX2lkOw0KLSAgICAvKiogRGlzYWJsZSB0aGUgaW50ZXJydXB0IG9uIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciAqLw0KLSAgICBwQWljLT5BSUNfSURDUiA9IG1hc2s7DQotICAgIC8qKiBTYXZlIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciByb3V0aW5lIHBvaW50ZXIgYW5kIHRoZSBpbnRlcnJ1cHQgcHJpb3JpdHkgKi8NCi0gICAgcEFpYy0+QUlDX1NWUlsgaXJxX2lkIF0gPSAoIHVuc2lnbmVkIGludCApIG5ld0hhbmRsZXI7DQotICAgIC8qKiBTdG9yZSB0aGUgU291cmNlIE1vZGUgUmVnaXN0ZXIgKi8NCi0gICAgcEFpYy0+QUlDX1NNUlsgaXJxX2lkIF0gPSBzcmNfdHlwZSB8IHByaW9yaXR5Ow0KLSAgICAvKiogQ2xlYXIgdGhlIGludGVycnVwdCBvbiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIgKi8NCi0gICAgcEFpYy0+QUlDX0lDQ1IgPSBtYXNrOw0KKyAgICBtYXNrID0gMHgxIDw8IGlycV9pZCA7DQorICAgIC8vKiBEaXNhYmxlIHRoZSBpbnRlcnJ1cHQgb24gdGhlIGludGVycnVwdCBjb250cm9sbGVyDQorICAgIHBBaWMtPkFJQ19JRENSID0gbWFzayA7DQorICAgIC8vKiBTYXZlIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciByb3V0aW5lIHBvaW50ZXIgYW5kIHRoZSBpbnRlcnJ1cHQgcHJpb3JpdHkNCisgICAgcEFpYy0+QUlDX1NWUltpcnFfaWRdID0gKHVuc2lnbmVkIGludCkgbmV3SGFuZGxlciA7DQorICAgIC8vKiBTdG9yZSB0aGUgU291cmNlIE1vZGUgUmVnaXN0ZXINCisgICAgcEFpYy0+QUlDX1NNUltpcnFfaWRdID0gc3JjX3R5cGUgfCBwcmlvcml0eSAgOw0KKyAgICAvLyogQ2xlYXIgdGhlIGludGVycnVwdCBvbiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXINCisgICAgcEFpYy0+QUlDX0lDQ1IgPSBtYXNrIDsNCiANCi0gICAgcmV0dXJuIG9sZEhhbmRsZXI7DQorCXJldHVybiBvbGRIYW5kbGVyOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BSUNfRW5hYmxlSXQgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBjb3JyZXNwb25kaW5nIElUIG51bWJlciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0FJQ19FbmFibGVJdCggQVQ5MVBTX0FJQyBwQWljLCAgICAgIC8qIFxhcmcgcG9pbnRlciB0byB0aGUgQUlDIHJlZ2lzdGVycyAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaXJxX2lkICkgLyogXGFyZyBpbnRlcnJ1cHQgbnVtYmVyIHRvIGluaXRpYWxpemUgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BSUNfRW5hYmxlSXQNCisvLyogXGJyaWVmIEVuYWJsZSBjb3JyZXNwb25kaW5nIElUIG51bWJlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FJQ19FbmFibGVJdCAoDQorCUFUOTFQU19BSUMgcEFpYywgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gdGhlIEFJQyByZWdpc3RlcnMNCisJdW5zaWduZWQgaW50IGlycV9pZCApIC8vIFxhcmcgaW50ZXJydXB0IG51bWJlciB0byBpbml0aWFsaXplDQogew0KLSAgICAvKiogRW5hYmxlIHRoZSBpbnRlcnJ1cHQgb24gdGhlIGludGVycnVwdCBjb250cm9sbGVyICovDQotICAgIHBBaWMtPkFJQ19JRUNSID0gMHgxIDw8IGlycV9pZDsNCisgICAgLy8qIEVuYWJsZSB0aGUgaW50ZXJydXB0IG9uIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlcg0KKyAgICBwQWljLT5BSUNfSUVDUiA9IDB4MSA8PCBpcnFfaWQgOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BSUNfRGlzYWJsZUl0ICovDQotLyoqIFxicmllZiBEaXNhYmxlIGNvcnJlc3BvbmRpbmcgSVQgbnVtYmVyICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQUlDX0Rpc2FibGVJdCggQVQ5MVBTX0FJQyBwQWljLCAgICAgIC8qIFxhcmcgcG9pbnRlciB0byB0aGUgQUlDIHJlZ2lzdGVycyAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGlycV9pZCApIC8qIFxhcmcgaW50ZXJydXB0IG51bWJlciB0byBpbml0aWFsaXplICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUlDX0Rpc2FibGVJdA0KKy8vKiBcYnJpZWYgRGlzYWJsZSBjb3JyZXNwb25kaW5nIElUIG51bWJlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FJQ19EaXNhYmxlSXQgKA0KKwlBVDkxUFNfQUlDIHBBaWMsICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIHRoZSBBSUMgcmVnaXN0ZXJzDQorCXVuc2lnbmVkIGludCBpcnFfaWQgKSAvLyBcYXJnIGludGVycnVwdCBudW1iZXIgdG8gaW5pdGlhbGl6ZQ0KIHsNCiAgICAgdW5zaWduZWQgaW50IG1hc2sgPSAweDEgPDwgaXJxX2lkOw0KLQ0KLSAgICAvKiogRGlzYWJsZSB0aGUgaW50ZXJydXB0IG9uIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciAqLw0KLSAgICBwQWljLT5BSUNfSURDUiA9IG1hc2s7DQotICAgIC8qKiBDbGVhciB0aGUgaW50ZXJydXB0IG9uIHRoZSBJbnRlcnJ1cHQgQ29udHJvbGxlciAoIGlmIG9uZSBpcyBwZW5kaW5nICkgKi8NCi0gICAgcEFpYy0+QUlDX0lDQ1IgPSBtYXNrOw0KKyAgICAvLyogRGlzYWJsZSB0aGUgaW50ZXJydXB0IG9uIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlcg0KKyAgICBwQWljLT5BSUNfSURDUiA9IG1hc2sgOw0KKyAgICAvLyogQ2xlYXIgdGhlIGludGVycnVwdCBvbiB0aGUgSW50ZXJydXB0IENvbnRyb2xsZXIgKCBpZiBvbmUgaXMgcGVuZGluZyApDQorICAgIHBBaWMtPkFJQ19JQ0NSID0gbWFzayA7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FJQ19DbGVhckl0ICovDQotLyoqIFxicmllZiBDbGVhciBjb3JyZXNwb25kaW5nIElUIG51bWJlciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0FJQ19DbGVhckl0KCBBVDkxUFNfQUlDIHBBaWMsICAgICAgLyogXGFyZyBwb2ludGVyIHRvIHRoZSBBSUMgcmVnaXN0ZXJzICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGlycV9pZCApIC8qIFxhcmcgaW50ZXJydXB0IG51bWJlciB0byBpbml0aWFsaXplICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUlDX0NsZWFySXQNCisvLyogXGJyaWVmIENsZWFyIGNvcnJlc3BvbmRpbmcgSVQgbnVtYmVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQUlDX0NsZWFySXQgKA0KKwlBVDkxUFNfQUlDIHBBaWMsICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gdGhlIEFJQyByZWdpc3RlcnMNCisJdW5zaWduZWQgaW50IGlycV9pZCkgLy8gXGFyZyBpbnRlcnJ1cHQgbnVtYmVyIHRvIGluaXRpYWxpemUNCiB7DQotICAgIC8qKiBDbGVhciB0aGUgaW50ZXJydXB0IG9uIHRoZSBJbnRlcnJ1cHQgQ29udHJvbGxlciAoIGlmIG9uZSBpcyBwZW5kaW5nICkgKi8NCi0gICAgcEFpYy0+QUlDX0lDQ1IgPSAoIDB4MSA8PCBpcnFfaWQgKTsNCisgICAgLy8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgb24gdGhlIEludGVycnVwdCBDb250cm9sbGVyICggaWYgb25lIGlzIHBlbmRpbmcgKQ0KKyAgICBwQWljLT5BSUNfSUNDUiA9ICgweDEgPDwgaXJxX2lkKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQUlDX0Fja25vd2xlZGdlSXQgKi8NCi0vKiogXGJyaWVmIEFja25vd2xlZGdlIGNvcnJlc3BvbmRpbmcgSVQgbnVtYmVyICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQUlDX0Fja25vd2xlZGdlSXQoIEFUOTFQU19BSUMgcEFpYyApIC8qIFxhcmcgcG9pbnRlciB0byB0aGUgQUlDIHJlZ2lzdGVycyAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FJQ19BY2tub3dsZWRnZUl0DQorLy8qIFxicmllZiBBY2tub3dsZWRnZSBjb3JyZXNwb25kaW5nIElUIG51bWJlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FJQ19BY2tub3dsZWRnZUl0ICgNCisJQVQ5MVBTX0FJQyBwQWljKSAgICAgLy8gXGFyZyBwb2ludGVyIHRvIHRoZSBBSUMgcmVnaXN0ZXJzDQogew0KICAgICBwQWljLT5BSUNfRU9JQ1IgPSBwQWljLT5BSUNfRU9JQ1I7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FJQ19TZXRFeGNlcHRpb25WZWN0b3IgKi8NCi0vKiogXGJyaWVmIENvbmZpZ3VyZSB2ZWN0b3IgaGFuZGxlciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQUlDX1NldEV4Y2VwdGlvblZlY3RvciggdW5zaWduZWQgaW50ICogcFZlY3RvciwgLyogXGFyZyBwb2ludGVyIHRvIHRoZSBBSUMgcmVnaXN0ZXJzICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCAqIEhhbmRsZXIgKSgpICkgIC8qIFxhcmcgSW50ZXJydXB0IEhhbmRsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BSUNfU2V0RXhjZXB0aW9uVmVjdG9yDQorLy8qIFxicmllZiBDb25maWd1cmUgdmVjdG9yIGhhbmRsZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50ICBBVDkxRl9BSUNfU2V0RXhjZXB0aW9uVmVjdG9yICgNCisJdW5zaWduZWQgaW50ICpwVmVjdG9yLCAvLyBcYXJnIHBvaW50ZXIgdG8gdGhlIEFJQyByZWdpc3RlcnMNCisJdm9pZCAoKkhhbmRsZXIpICgpICkgICAvLyBcYXJnIEludGVycnVwdCBIYW5kbGVyDQogew0KLSAgICB1bnNpZ25lZCBpbnQgb2xkVmVjdG9yID0gKnBWZWN0b3I7DQorCXVuc2lnbmVkIGludCBvbGRWZWN0b3IgPSAqcFZlY3RvcjsNCiANCi0gICAgaWYoICggdW5zaWduZWQgaW50ICkgSGFuZGxlciA9PSAoIHVuc2lnbmVkIGludCApIEFUOTFDX0FJQ19CUkFOQ0hfT1BDT0RFICkNCi0gICAgew0KLSAgICAgICAgKnBWZWN0b3IgPSAoIHVuc2lnbmVkIGludCApIEFUOTFDX0FJQ19CUkFOQ0hfT1BDT0RFOw0KLSAgICB9DQotICAgIGVsc2UNCi0gICAgew0KLSAgICAgICAgKnBWZWN0b3IgPSAoICggKCAoICggdW5zaWduZWQgaW50ICkgSGFuZGxlciApIC0gKCAoIHVuc2lnbmVkIGludCApIHBWZWN0b3IgKSAtIDB4OCApID4+IDIgKSAmIDB4MDBGRkZGRkYgKSB8IDB4RUEwMDAwMDA7DQotICAgIH0NCisJaWYgKCh1bnNpZ25lZCBpbnQpIEhhbmRsZXIgPT0gKHVuc2lnbmVkIGludCkgQVQ5MUNfQUlDX0JSQU5DSF9PUENPREUpDQorCQkqcFZlY3RvciA9ICh1bnNpZ25lZCBpbnQpIEFUOTFDX0FJQ19CUkFOQ0hfT1BDT0RFOw0KKwllbHNlDQorCQkqcFZlY3RvciA9ICgoKCgodW5zaWduZWQgaW50KSBIYW5kbGVyKSAtICgodW5zaWduZWQgaW50KSBwVmVjdG9yKSAtIDB4OCkgPj4gMikgJiAweDAwRkZGRkZGKSB8IDB4RUEwMDAwMDA7DQogDQotICAgIHJldHVybiBvbGRWZWN0b3I7DQorCXJldHVybiBvbGRWZWN0b3I7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FJQ19UcmlnICovDQotLyoqIFxicmllZiBUcmlnIGFuIElUICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQUlDX1RyaWcoIEFUOTFQU19BSUMgcEFpYywgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gdGhlIEFJQyByZWdpc3RlcnMgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaXJxX2lkICkgLyogXGFyZyBpbnRlcnJ1cHQgbnVtYmVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUlDX1RyaWcNCisvLyogXGJyaWVmIFRyaWcgYW4gSVQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCAgQVQ5MUZfQUlDX1RyaWcgKA0KKwlBVDkxUFNfQUlDIHBBaWMsICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gdGhlIEFJQyByZWdpc3RlcnMNCisJdW5zaWduZWQgaW50IGlycV9pZCkgLy8gXGFyZyBpbnRlcnJ1cHQgbnVtYmVyDQogew0KLSAgICBwQWljLT5BSUNfSVNDUiA9ICggMHgxIDw8IGlycV9pZCApOw0KKwlwQWljLT5BSUNfSVNDUiA9ICgweDEgPDwgaXJxX2lkKSA7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FJQ19Jc0FjdGl2ZSAqLw0KLS8qKiBcYnJpZWYgVGVzdCBpZiBhbiBJVCBpcyBhY3RpdmUgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FJQ19Jc0FjdGl2ZSggQVQ5MVBTX0FJQyBwQWljLCAgICAgIC8qIFxhcmcgcG9pbnRlciB0byB0aGUgQUlDIHJlZ2lzdGVycyAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpcnFfaWQgKSAvKiBcYXJnIEludGVycnVwdCBOdW1iZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BSUNfSXNBY3RpdmUNCisvLyogXGJyaWVmIFRlc3QgaWYgYW4gSVQgaXMgYWN0aXZlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCAgQVQ5MUZfQUlDX0lzQWN0aXZlICgNCisJQVQ5MVBTX0FJQyBwQWljLCAgICAgLy8gXGFyZyBwb2ludGVyIHRvIHRoZSBBSUMgcmVnaXN0ZXJzDQorCXVuc2lnbmVkIGludCBpcnFfaWQpIC8vIFxhcmcgSW50ZXJydXB0IE51bWJlcg0KIHsNCi0gICAgcmV0dXJuKCBwQWljLT5BSUNfSVNSICYgKCAweDEgPDwgaXJxX2lkICkgKTsNCisJcmV0dXJuIChwQWljLT5BSUNfSVNSICYgKDB4MSA8PCBpcnFfaWQpKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQUlDX0lzUGVuZGluZyAqLw0KLS8qKiBcYnJpZWYgVGVzdCBpZiBhbiBJVCBpcyBwZW5kaW5nICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BSUNfSXNQZW5kaW5nKCBBVDkxUFNfQUlDIHBBaWMsICAgICAgLyogXGFyZyBwb2ludGVyIHRvIHRoZSBBSUMgcmVnaXN0ZXJzICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpcnFfaWQgKSAvKiBcYXJnIEludGVycnVwdCBOdW1iZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BSUNfSXNQZW5kaW5nDQorLy8qIFxicmllZiBUZXN0IGlmIGFuIElUIGlzIHBlbmRpbmcNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50ICBBVDkxRl9BSUNfSXNQZW5kaW5nICgNCisJQVQ5MVBTX0FJQyBwQWljLCAgICAgLy8gXGFyZyBwb2ludGVyIHRvIHRoZSBBSUMgcmVnaXN0ZXJzDQorCXVuc2lnbmVkIGludCBpcnFfaWQpIC8vIFxhcmcgSW50ZXJydXB0IE51bWJlcg0KIHsNCi0gICAgcmV0dXJuKCBwQWljLT5BSUNfSVBSICYgKCAweDEgPDwgaXJxX2lkICkgKTsNCisJcmV0dXJuIChwQWljLT5BSUNfSVBSICYgKDB4MSA8PCBpcnFfaWQpKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQUlDX09wZW4gKi8NCi0vKiogXGJyaWVmIFNldCBleGNlcHRpb24gdmVjdG9ycyBhbmQgQUlDIHJlZ2lzdGVycyB0byBkZWZhdWx0IHZhbHVlcyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0FJQ19PcGVuKCBBVDkxUFNfQUlDIHBBaWMsICAgICAgICAgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gdGhlIEFJQyByZWdpc3RlcnMgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICggKiBJcnFIYW5kbGVyICkoKSwgICAgICAvKiBcYXJnIERlZmF1bHQgSVJRIHZlY3RvciBleGNlcHRpb24gKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICggKiBGaXFIYW5kbGVyICkoKSwgICAgICAvKiBcYXJnIERlZmF1bHQgRklRIHZlY3RvciBleGNlcHRpb24gKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICggKiBEZWZhdWx0SGFuZGxlciApKCksICAvKiBcYXJnIERlZmF1bHQgSGFuZGxlciBzZXQgaW4gSVNSICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoICogU3B1cmlvdXNIYW5kbGVyICkoKSwgLyogXGFyZyBEZWZhdWx0IFNwdXJpb3VzIEhhbmRsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcHJvdGVjdE1vZGUgKSAgICAvKiBcYXJnIERlYnVnIENvbnRyb2wgUmVnaXN0ZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BSUNfT3Blbg0KKy8vKiBcYnJpZWYgU2V0IGV4Y2VwdGlvbiB2ZWN0b3JzIGFuZCBBSUMgcmVnaXN0ZXJzIHRvIGRlZmF1bHQgdmFsdWVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQUlDX09wZW4oDQorCUFUOTFQU19BSUMgcEFpYywgICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byB0aGUgQUlDIHJlZ2lzdGVycw0KKwl2b2lkICgqSXJxSGFuZGxlcikgKCksICAvLyBcYXJnIERlZmF1bHQgSVJRIHZlY3RvciBleGNlcHRpb24NCisJdm9pZCAoKkZpcUhhbmRsZXIpICgpLCAgLy8gXGFyZyBEZWZhdWx0IEZJUSB2ZWN0b3IgZXhjZXB0aW9uDQorCXZvaWQgKCpEZWZhdWx0SGFuZGxlcikgICgpLCAvLyBcYXJnIERlZmF1bHQgSGFuZGxlciBzZXQgaW4gSVNSDQorCXZvaWQgKCpTcHVyaW91c0hhbmRsZXIpICgpLCAvLyBcYXJnIERlZmF1bHQgU3B1cmlvdXMgSGFuZGxlcg0KKwl1bnNpZ25lZCBpbnQgcHJvdGVjdE1vZGUpICAgLy8gXGFyZyBEZWJ1ZyBDb250cm9sIFJlZ2lzdGVyDQogew0KLSAgICBpbnQgaTsNCisJaW50IGk7DQogDQotICAgIC8qIERpc2FibGUgYWxsIGludGVycnVwdHMgYW5kIHNldCBJVlIgdG8gdGhlIGRlZmF1bHQgaGFuZGxlciAqLw0KLSAgICBmb3IoIGkgPSAwOyBpIDwgMzI7ICsraSApDQotICAgIHsNCi0gICAgICAgIEFUOTFGX0FJQ19EaXNhYmxlSXQoIHBBaWMsIGkgKTsNCi0gICAgICAgIEFUOTFGX0FJQ19Db25maWd1cmVJdCggcEFpYywgaSwgQVQ5MUNfQUlDX1BSSU9SX0xPV0VTVCwgQVQ5MUNfQUlDX1NSQ1RZUEVfSElHSF9MRVZFTCwgRGVmYXVsdEhhbmRsZXIgKTsNCi0gICAgfQ0KKwkvLyBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzIGFuZCBzZXQgSVZSIHRvIHRoZSBkZWZhdWx0IGhhbmRsZXINCisJZm9yIChpID0gMDsgaSA8IDMyOyArK2kpIHsNCisJCUFUOTFGX0FJQ19EaXNhYmxlSXQocEFpYywgaSk7DQorCQlBVDkxRl9BSUNfQ29uZmlndXJlSXQocEFpYywgaSwgQVQ5MUNfQUlDX1BSSU9SX0xPV0VTVCwgQVQ5MUNfQUlDX1NSQ1RZUEVfSElHSF9MRVZFTCwgRGVmYXVsdEhhbmRsZXIpOw0KKwl9DQogDQotICAgIC8qIFNldCB0aGUgSVJRIGV4Y2VwdGlvbiB2ZWN0b3IgKi8NCi0gICAgQVQ5MUZfQUlDX1NldEV4Y2VwdGlvblZlY3RvciggKCB1bnNpZ25lZCBpbnQgKiApIDB4MTgsIElycUhhbmRsZXIgKTsNCi0gICAgLyogU2V0IHRoZSBGYXN0IEludGVycnVwdCBleGNlcHRpb24gdmVjdG9yICovDQotICAgIEFUOTFGX0FJQ19TZXRFeGNlcHRpb25WZWN0b3IoICggdW5zaWduZWQgaW50ICogKSAweDFDLCBGaXFIYW5kbGVyICk7DQorCS8vIFNldCB0aGUgSVJRIGV4Y2VwdGlvbiB2ZWN0b3INCisJQVQ5MUZfQUlDX1NldEV4Y2VwdGlvblZlY3RvcigodW5zaWduZWQgaW50ICopIDB4MTgsIElycUhhbmRsZXIpOw0KKwkvLyBTZXQgdGhlIEZhc3QgSW50ZXJydXB0IGV4Y2VwdGlvbiB2ZWN0b3INCisJQVQ5MUZfQUlDX1NldEV4Y2VwdGlvblZlY3RvcigodW5zaWduZWQgaW50ICopIDB4MUMsIEZpcUhhbmRsZXIpOw0KIA0KLSAgICBwQWljLT5BSUNfU1BVID0gKCB1bnNpZ25lZCBpbnQgKSBTcHVyaW91c0hhbmRsZXI7DQotICAgIHBBaWMtPkFJQ19EQ1IgPSBwcm90ZWN0TW9kZTsNCisJcEFpYy0+QUlDX1NQVSA9ICh1bnNpZ25lZCBpbnQpIFNwdXJpb3VzSGFuZGxlcjsNCisJcEFpYy0+QUlDX0RDUiA9IHByb3RlY3RNb2RlOw0KK30NCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFBEQw0KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUERDX1NldE5leHRSeA0KKy8vKiBcYnJpZWYgU2V0IHRoZSBuZXh0IHJlY2VpdmUgdHJhbnNmZXIgZGVzY3JpcHRvcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BEQ19TZXROZXh0UnggKA0KKwlBVDkxUFNfUERDIHBQREMsICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlcg0KKwljaGFyICphZGRyZXNzLCAgICAgICAvLyBcYXJnIGFkZHJlc3MgdG8gdGhlIG5leHQgYmxvYyB0byBiZSByZWNlaXZlZA0KKwl1bnNpZ25lZCBpbnQgYnl0ZXMpICAvLyBcYXJnIG51bWJlciBvZiBieXRlcyB0byBiZSByZWNlaXZlZA0KK3sNCisJcFBEQy0+UERDX1JOUFIgPSAodW5zaWduZWQgaW50KSBhZGRyZXNzOw0KKwlwUERDLT5QRENfUk5DUiA9IGJ5dGVzOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QRENfU2V0TmV4dFR4DQorLy8qIFxicmllZiBTZXQgdGhlIG5leHQgdHJhbnNtaXQgdHJhbnNmZXIgZGVzY3JpcHRvcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BEQ19TZXROZXh0VHggKA0KKwlBVDkxUFNfUERDIHBQREMsICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyDQorCWNoYXIgKmFkZHJlc3MsICAgICAgICAgLy8gXGFyZyBhZGRyZXNzIHRvIHRoZSBuZXh0IGJsb2MgdG8gYmUgdHJhbnNtaXR0ZWQNCisJdW5zaWduZWQgaW50IGJ5dGVzKSAgICAvLyBcYXJnIG51bWJlciBvZiBieXRlcyB0byBiZSB0cmFuc21pdHRlZA0KK3sNCisJcFBEQy0+UERDX1ROUFIgPSAodW5zaWduZWQgaW50KSBhZGRyZXNzOw0KKwlwUERDLT5QRENfVE5DUiA9IGJ5dGVzOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QRENfU2V0UngNCisvLyogXGJyaWVmIFNldCB0aGUgcmVjZWl2ZSB0cmFuc2ZlciBkZXNjcmlwdG9yDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUERDX1NldFJ4ICgNCisJQVQ5MVBTX1BEQyBwUERDLCAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlcg0KKwljaGFyICphZGRyZXNzLCAgICAgICAgIC8vIFxhcmcgYWRkcmVzcyB0byB0aGUgbmV4dCBibG9jIHRvIGJlIHJlY2VpdmVkDQorCXVuc2lnbmVkIGludCBieXRlcykgICAgLy8gXGFyZyBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgcmVjZWl2ZWQNCit7DQorCXBQREMtPlBEQ19SUFIgPSAodW5zaWduZWQgaW50KSBhZGRyZXNzOw0KKwlwUERDLT5QRENfUkNSID0gYnl0ZXM7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BEQ19TZXRUeA0KKy8vKiBcYnJpZWYgU2V0IHRoZSB0cmFuc21pdCB0cmFuc2ZlciBkZXNjcmlwdG9yDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUERDX1NldFR4ICgNCisJQVQ5MVBTX1BEQyBwUERDLCAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlcg0KKwljaGFyICphZGRyZXNzLCAgICAgICAgIC8vIFxhcmcgYWRkcmVzcyB0byB0aGUgbmV4dCBibG9jIHRvIGJlIHRyYW5zbWl0dGVkDQorCXVuc2lnbmVkIGludCBieXRlcykgICAgLy8gXGFyZyBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgdHJhbnNtaXR0ZWQNCit7DQorCXBQREMtPlBEQ19UUFIgPSAodW5zaWduZWQgaW50KSBhZGRyZXNzOw0KKwlwUERDLT5QRENfVENSID0gYnl0ZXM7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BEQ19FbmFibGVUeA0KKy8vKiBcYnJpZWYgRW5hYmxlIHRyYW5zbWl0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUERDX0VuYWJsZVR4ICgNCisJQVQ5MVBTX1BEQyBwUERDICkgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXINCit7DQorCXBQREMtPlBEQ19QVENSID0gQVQ5MUNfUERDX1RYVEVOOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QRENfRW5hYmxlUngNCisvLyogXGJyaWVmIEVuYWJsZSByZWNlaXZlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUERDX0VuYWJsZVJ4ICgNCisJQVQ5MVBTX1BEQyBwUERDICkgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXINCit7DQorCXBQREMtPlBEQ19QVENSID0gQVQ5MUNfUERDX1JYVEVOOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QRENfRGlzYWJsZVR4DQorLy8qIFxicmllZiBEaXNhYmxlIHRyYW5zbWl0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUERDX0Rpc2FibGVUeCAoDQorCUFUOTFQU19QREMgcFBEQyApICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyDQorew0KKwlwUERDLT5QRENfUFRDUiA9IEFUOTFDX1BEQ19UWFRESVM7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BEQ19EaXNhYmxlUngNCisvLyogXGJyaWVmIERpc2FibGUgcmVjZWl2ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BEQ19EaXNhYmxlUnggKA0KKwlBVDkxUFNfUERDIHBQREMgKSAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlcg0KK3sNCisJcFBEQy0+UERDX1BUQ1IgPSBBVDkxQ19QRENfUlhURElTOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QRENfSXNUeEVtcHR5DQorLy8qIFxicmllZiBUZXN0IGlmIHRoZSBjdXJyZW50IHRyYW5zZmVyIGRlc2NyaXB0b3IgaGFzIGJlZW4gc2VudA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfUERDX0lzVHhFbXB0eSAoIC8vIFxyZXR1cm4gcmV0dXJuIDEgaWYgdHJhbnNmZXIgaXMgY29tcGxldGUNCisJQVQ5MVBTX1BEQyBwUERDICkgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXINCit7DQorCXJldHVybiAhKHBQREMtPlBEQ19UQ1IpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QRENfSXNOZXh0VHhFbXB0eQ0KKy8vKiBcYnJpZWYgVGVzdCBpZiB0aGUgbmV4dCB0cmFuc2ZlciBkZXNjcmlwdG9yIGhhcyBiZWVuIG1vdmVkIHRvIHRoZSBjdXJyZW50IHRkDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9QRENfSXNOZXh0VHhFbXB0eSAoIC8vIFxyZXR1cm4gcmV0dXJuIDEgaWYgdHJhbnNmZXIgaXMgY29tcGxldGUNCisJQVQ5MVBTX1BEQyBwUERDICkgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXINCit7DQorCXJldHVybiAhKHBQREMtPlBEQ19UTkNSKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUERDX0lzUnhFbXB0eQ0KKy8vKiBcYnJpZWYgVGVzdCBpZiB0aGUgY3VycmVudCB0cmFuc2ZlciBkZXNjcmlwdG9yIGhhcyBiZWVuIGZpbGxlZA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfUERDX0lzUnhFbXB0eSAoIC8vIFxyZXR1cm4gcmV0dXJuIDEgaWYgdHJhbnNmZXIgaXMgY29tcGxldGUNCisJQVQ5MVBTX1BEQyBwUERDICkgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXINCit7DQorCXJldHVybiAhKHBQREMtPlBEQ19SQ1IpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QRENfSXNOZXh0UnhFbXB0eQ0KKy8vKiBcYnJpZWYgVGVzdCBpZiB0aGUgbmV4dCB0cmFuc2ZlciBkZXNjcmlwdG9yIGhhcyBiZWVuIG1vdmVkIHRvIHRoZSBjdXJyZW50IHRkDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9QRENfSXNOZXh0UnhFbXB0eSAoIC8vIFxyZXR1cm4gcmV0dXJuIDEgaWYgdHJhbnNmZXIgaXMgY29tcGxldGUNCisJQVQ5MVBTX1BEQyBwUERDICkgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXINCit7DQorCXJldHVybiAhKHBQREMtPlBEQ19STkNSKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUERDX09wZW4NCisvLyogXGJyaWVmIE9wZW4gUERDOiBkaXNhYmxlIFRYIGFuZCBSWCByZXNldCB0cmFuc2ZlciBkZXNjcmlwdG9ycywgcmUtZW5hYmxlIFJYIGFuZCBUWA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BEQ19PcGVuICgNCisJQVQ5MVBTX1BEQyBwUERDKSAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlcg0KK3sNCisgICAgLy8qIERpc2FibGUgdGhlIFJYIGFuZCBUWCBQREMgdHJhbnNmZXIgcmVxdWVzdHMNCisJQVQ5MUZfUERDX0Rpc2FibGVSeChwUERDKTsNCisJQVQ5MUZfUERDX0Rpc2FibGVUeChwUERDKTsNCisNCisJLy8qIFJlc2V0IGFsbCBDb3VudGVyIHJlZ2lzdGVyIE5leHQgYnVmZmVyIGZpcnN0DQorCUFUOTFGX1BEQ19TZXROZXh0VHgocFBEQywgKGNoYXIgKikgMCwgMCk7DQorCUFUOTFGX1BEQ19TZXROZXh0UngocFBEQywgKGNoYXIgKikgMCwgMCk7DQorCUFUOTFGX1BEQ19TZXRUeChwUERDLCAoY2hhciAqKSAwLCAwKTsNCisJQVQ5MUZfUERDX1NldFJ4KHBQREMsIChjaGFyICopIDAsIDApOw0KKw0KKyAgICAvLyogRW5hYmxlIHRoZSBSWCBhbmQgVFggUERDIHRyYW5zZmVyIHJlcXVlc3RzDQorCUFUOTFGX1BEQ19FbmFibGVSeChwUERDKTsNCisJQVQ5MUZfUERDX0VuYWJsZVR4KHBQREMpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QRENfQ2xvc2UNCisvLyogXGJyaWVmIENsb3NlIFBEQzogZGlzYWJsZSBUWCBhbmQgUlggcmVzZXQgdHJhbnNmZXIgZGVzY3JpcHRvcnMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QRENfQ2xvc2UgKA0KKwlBVDkxUFNfUERDIHBQREMpICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyDQorew0KKyAgICAvLyogRGlzYWJsZSB0aGUgUlggYW5kIFRYIFBEQyB0cmFuc2ZlciByZXF1ZXN0cw0KKwlBVDkxRl9QRENfRGlzYWJsZVJ4KHBQREMpOw0KKwlBVDkxRl9QRENfRGlzYWJsZVR4KHBQREMpOw0KKw0KKwkvLyogUmVzZXQgYWxsIENvdW50ZXIgcmVnaXN0ZXIgTmV4dCBidWZmZXIgZmlyc3QNCisJQVQ5MUZfUERDX1NldE5leHRUeChwUERDLCAoY2hhciAqKSAwLCAwKTsNCisJQVQ5MUZfUERDX1NldE5leHRSeChwUERDLCAoY2hhciAqKSAwLCAwKTsNCisJQVQ5MUZfUERDX1NldFR4KHBQREMsIChjaGFyICopIDAsIDApOw0KKwlBVDkxRl9QRENfU2V0UngocFBEQywgKGNoYXIgKikgMCwgMCk7DQorDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BEQ19TZW5kRnJhbWUNCisvLyogXGJyaWVmIENsb3NlIFBEQzogZGlzYWJsZSBUWCBhbmQgUlggcmVzZXQgdHJhbnNmZXIgZGVzY3JpcHRvcnMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BEQ19TZW5kRnJhbWUoDQorCUFUOTFQU19QREMgcFBEQywNCisJY2hhciAqcEJ1ZmZlciwNCisJdW5zaWduZWQgaW50IHN6QnVmZmVyLA0KKwljaGFyICpwTmV4dEJ1ZmZlciwNCisJdW5zaWduZWQgaW50IHN6TmV4dEJ1ZmZlciApDQorew0KKwlpZiAoQVQ5MUZfUERDX0lzVHhFbXB0eShwUERDKSkgew0KKwkJLy8qIEJ1ZmZlciBhbmQgbmV4dCBidWZmZXIgY2FuIGJlIGluaXRpYWxpemVkDQorCQlBVDkxRl9QRENfU2V0VHgocFBEQywgcEJ1ZmZlciwgc3pCdWZmZXIpOw0KKwkJQVQ5MUZfUERDX1NldE5leHRUeChwUERDLCBwTmV4dEJ1ZmZlciwgc3pOZXh0QnVmZmVyKTsNCisJCXJldHVybiAyOw0KKwl9DQorCWVsc2UgaWYgKEFUOTFGX1BEQ19Jc05leHRUeEVtcHR5KHBQREMpKSB7DQorCQkvLyogT25seSBvbmUgYnVmZmVyIGNhbiBiZSBpbml0aWFsaXplZA0KKwkJQVQ5MUZfUERDX1NldE5leHRUeChwUERDLCBwQnVmZmVyLCBzekJ1ZmZlcik7DQorCQlyZXR1cm4gMTsNCisJfQ0KKwllbHNlIHsNCisJCS8vKiBBbGwgYnVmZmVyIGFyZSBpbiB1c2UuLi4NCisJCXJldHVybiAwOw0KKwl9DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BEQ19SZWNlaXZlRnJhbWUNCisvLyogXGJyaWVmIENsb3NlIFBEQzogZGlzYWJsZSBUWCBhbmQgUlggcmVzZXQgdHJhbnNmZXIgZGVzY3JpcHRvcnMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BEQ19SZWNlaXZlRnJhbWUgKA0KKwlBVDkxUFNfUERDIHBQREMsDQorCWNoYXIgKnBCdWZmZXIsDQorCXVuc2lnbmVkIGludCBzekJ1ZmZlciwNCisJY2hhciAqcE5leHRCdWZmZXIsDQorCXVuc2lnbmVkIGludCBzek5leHRCdWZmZXIgKQ0KK3sNCisJaWYgKEFUOTFGX1BEQ19Jc1J4RW1wdHkocFBEQykpIHsNCisJCS8vKiBCdWZmZXIgYW5kIG5leHQgYnVmZmVyIGNhbiBiZSBpbml0aWFsaXplZA0KKwkJQVQ5MUZfUERDX1NldFJ4KHBQREMsIHBCdWZmZXIsIHN6QnVmZmVyKTsNCisJCUFUOTFGX1BEQ19TZXROZXh0UngocFBEQywgcE5leHRCdWZmZXIsIHN6TmV4dEJ1ZmZlcik7DQorCQlyZXR1cm4gMjsNCisJfQ0KKwllbHNlIGlmIChBVDkxRl9QRENfSXNOZXh0UnhFbXB0eShwUERDKSkgew0KKwkJLy8qIE9ubHkgb25lIGJ1ZmZlciBjYW4gYmUgaW5pdGlhbGl6ZWQNCisJCUFUOTFGX1BEQ19TZXROZXh0UngocFBEQywgcEJ1ZmZlciwgc3pCdWZmZXIpOw0KKwkJcmV0dXJuIDE7DQorCX0NCisJZWxzZSB7DQorCQkvLyogQWxsIGJ1ZmZlciBhcmUgaW4gdXNlLi4uDQorCQlyZXR1cm4gMDsNCisJfQ0KK30NCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIERCR1UNCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0RCR1VfSW50ZXJydXB0RW5hYmxlDQorLy8qIFxicmllZiBFbmFibGUgREJHVSBJbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9EQkdVX0ludGVycnVwdEVuYWJsZSgNCisgICAgICAgIEFUOTFQU19EQkdVIHBEYmd1LCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBEQkdVIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBkYmd1IGludGVycnVwdCB0byBiZSBlbmFibGVkDQorew0KKyAgICAgICAgcERiZ3UtPkRCR1VfSUVSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfREJHVV9JbnRlcnJ1cHREaXNhYmxlDQorLy8qIFxicmllZiBEaXNhYmxlIERCR1UgSW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfREJHVV9JbnRlcnJ1cHREaXNhYmxlKA0KKyAgICAgICAgQVQ5MVBTX0RCR1UgcERiZ3UsICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIERCR1UgY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGRiZ3UgaW50ZXJydXB0IHRvIGJlIGRpc2FibGVkDQorew0KKyAgICAgICAgcERiZ3UtPkRCR1VfSURSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfREJHVV9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gREJHVSBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0RCR1VfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLy8gXHJldHVybiBEQkdVIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKyAgICAgICAgQVQ5MVBTX0RCR1UgcERiZ3UpIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBEQkdVIGNvbnRyb2xsZXINCit7DQorICAgICAgICByZXR1cm4gcERiZ3UtPkRCR1VfSU1SOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9EQkdVX0lzSW50ZXJydXB0TWFza2VkDQorLy8qIFxicmllZiBUZXN0IGlmIERCR1UgSW50ZXJydXB0IGlzIE1hc2tlZCANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX0RCR1VfSXNJbnRlcnJ1cHRNYXNrZWQoDQorICAgICAgICBBVDkxUFNfREJHVSBwRGJndSwgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgREJHVSBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorICAgICAgICByZXR1cm4gKEFUOTFGX0RCR1VfR2V0SW50ZXJydXB0TWFza1N0YXR1cyhwRGJndSkgJiBmbGFnKTsNCiB9DQogDQogLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0qICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBQREMNCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BEQ19TZXROZXh0UnggKi8NCi0vKiogXGJyaWVmIFNldCB0aGUgbmV4dCByZWNlaXZlIHRyYW5zZmVyIGRlc2NyaXB0b3IgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QRENfU2V0TmV4dFJ4KCBBVDkxUFNfUERDIHBQREMsICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqIGFkZHJlc3MsICAgICAgLyogXGFyZyBhZGRyZXNzIHRvIHRoZSBuZXh0IGJsb2MgdG8gYmUgcmVjZWl2ZWQgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBieXRlcyApIC8qIFxhcmcgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHJlY2VpdmVkICovDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgUElPDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fQ2ZnUGVyaXBoDQorLy8qIFxicmllZiBFbmFibGUgcGlucyB0byBiZSBkcml2ZWQgYnkgcGVyaXBoZXJhbA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19DZmdQZXJpcGgoDQorCUFUOTFQU19QSU8gcFBpbywgICAgICAgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IHBlcmlwaEFFbmFibGUsICAvLyBcYXJnIFBFUklQSCBBIHRvIGVuYWJsZQ0KKwl1bnNpZ25lZCBpbnQgcGVyaXBoQkVuYWJsZSkgIC8vIFxhcmcgUEVSSVBIIEIgdG8gZW5hYmxlDQorDQogew0KLSAgICBwUERDLT5QRENfUk5QUiA9ICggdW5zaWduZWQgaW50ICkgYWRkcmVzczsNCi0gICAgcFBEQy0+UERDX1JOQ1IgPSBieXRlczsNCisJcFBpby0+UElPX0FTUiA9IHBlcmlwaEFFbmFibGU7DQorCXBQaW8tPlBJT19CU1IgPSBwZXJpcGhCRW5hYmxlOw0KKwlwUGlvLT5QSU9fUERSID0gKHBlcmlwaEFFbmFibGUgfCBwZXJpcGhCRW5hYmxlKTsgLy8gU2V0IGluIFBlcmlwaCBtb2RlDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BEQ19TZXROZXh0VHggKi8NCi0vKiogXGJyaWVmIFNldCB0aGUgbmV4dCB0cmFuc21pdCB0cmFuc2ZlciBkZXNjcmlwdG9yICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUERDX1NldE5leHRUeCggQVQ5MVBTX1BEQyBwUERDLCAgICAgLyogXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBhZGRyZXNzLCAgICAgIC8qIFxhcmcgYWRkcmVzcyB0byB0aGUgbmV4dCBibG9jIHRvIGJlIHRyYW5zbWl0dGVkICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYnl0ZXMgKSAvKiBcYXJnIG51bWJlciBvZiBieXRlcyB0byBiZSB0cmFuc21pdHRlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19DZmdPdXRwdXQNCisvLyogXGJyaWVmIEVuYWJsZSBQSU8gaW4gb3V0cHV0IG1vZGUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fQ2ZnT3V0cHV0KA0KKwlBVDkxUFNfUElPIHBQaW8sICAgICAgICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBwaW9FbmFibGUpICAgICAgLy8gXGFyZyBQSU8gdG8gYmUgZW5hYmxlZA0KIHsNCi0gICAgcFBEQy0+UERDX1ROUFIgPSAoIHVuc2lnbmVkIGludCApIGFkZHJlc3M7DQotICAgIHBQREMtPlBEQ19UTkNSID0gYnl0ZXM7DQorCXBQaW8tPlBJT19QRVIgPSBwaW9FbmFibGU7IC8vIFNldCBpbiBQSU8gbW9kZQ0KKwlwUGlvLT5QSU9fT0VSID0gcGlvRW5hYmxlOyAvLyBDb25maWd1cmUgaW4gT3V0cHV0DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BEQ19TZXRSeCAqLw0KLS8qKiBcYnJpZWYgU2V0IHRoZSByZWNlaXZlIHRyYW5zZmVyIGRlc2NyaXB0b3IgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QRENfU2V0UngoIEFUOTFQU19QREMgcFBEQywgICAgIC8qIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBhZGRyZXNzLCAgICAgIC8qIFxhcmcgYWRkcmVzcyB0byB0aGUgbmV4dCBibG9jIHRvIGJlIHJlY2VpdmVkICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBieXRlcyApIC8qIFxhcmcgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHJlY2VpdmVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0NmZ0lucHV0DQorLy8qIFxicmllZiBFbmFibGUgUElPIGluIGlucHV0IG1vZGUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fQ2ZnSW5wdXQoDQorCUFUOTFQU19QSU8gcFBpbywgICAgICAgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGlucHV0RW5hYmxlKSAgICAgIC8vIFxhcmcgUElPIHRvIGJlIGVuYWJsZWQNCiB7DQotICAgIHBQREMtPlBEQ19SUFIgPSAoIHVuc2lnbmVkIGludCApIGFkZHJlc3M7DQotICAgIHBQREMtPlBEQ19SQ1IgPSBieXRlczsNCisJLy8gRGlzYWJsZSBvdXRwdXQNCisJcFBpby0+UElPX09EUiAgPSBpbnB1dEVuYWJsZTsNCisJcFBpby0+UElPX1BFUiAgPSBpbnB1dEVuYWJsZTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUERDX1NldFR4ICovDQotLyoqIFxicmllZiBTZXQgdGhlIHRyYW5zbWl0IHRyYW5zZmVyIGRlc2NyaXB0b3IgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QRENfU2V0VHgoIEFUOTFQU19QREMgcFBEQywgICAgIC8qIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBhZGRyZXNzLCAgICAgIC8qIFxhcmcgYWRkcmVzcyB0byB0aGUgbmV4dCBibG9jIHRvIGJlIHRyYW5zbWl0dGVkICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBieXRlcyApIC8qIFxhcmcgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHRyYW5zbWl0dGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0NmZ09wZW5kcmFpbg0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBpbiBvcGVuIGRyYWluDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX0NmZ09wZW5kcmFpbigNCisJQVQ5MVBTX1BJTyBwUGlvLCAgICAgICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgbXVsdGlEcnZFbmFibGUpIC8vIFxhcmcgcGlvIHRvIGJlIGNvbmZpZ3VyZWQgaW4gb3BlbiBkcmFpbg0KIHsNCi0gICAgcFBEQy0+UERDX1RQUiA9ICggdW5zaWduZWQgaW50ICkgYWRkcmVzczsNCi0gICAgcFBEQy0+UERDX1RDUiA9IGJ5dGVzOw0KKwkvLyBDb25maWd1cmUgdGhlIG11bHRpLWRyaXZlIG9wdGlvbg0KKwlwUGlvLT5QSU9fTUREUiA9IH5tdWx0aURydkVuYWJsZTsNCisJcFBpby0+UElPX01ERVIgPSBtdWx0aURydkVuYWJsZTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUERDX0VuYWJsZVR4ICovDQotLyoqIFxicmllZiBFbmFibGUgdHJhbnNtaXQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QRENfRW5hYmxlVHgoIEFUOTFQU19QREMgcFBEQyApIC8qIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0NmZ1B1bGx1cA0KKy8vKiBcYnJpZWYgRW5hYmxlIHB1bGx1cCBvbiBQSU8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fQ2ZnUHVsbHVwKA0KKwlBVDkxUFNfUElPIHBQaW8sICAgICAgICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBwdWxsdXBFbmFibGUpICAgLy8gXGFyZyBlbmFibGUgcHVsbHVwIG9uIFBJTw0KIHsNCi0gICAgcFBEQy0+UERDX1BUQ1IgPSBBVDkxQ19QRENfVFhURU47DQorCQkvLyBDb25uZWN0IG9yIG5vdCBQdWxsdXANCisJcFBpby0+UElPX1BQVURSID0gfnB1bGx1cEVuYWJsZTsNCisJcFBpby0+UElPX1BQVUVSID0gcHVsbHVwRW5hYmxlOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QRENfRW5hYmxlUnggKi8NCi0vKiogXGJyaWVmIEVuYWJsZSByZWNlaXZlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUERDX0VuYWJsZVJ4KCBBVDkxUFNfUERDIHBQREMgKSAvKiBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19DZmdEaXJlY3REcml2ZQ0KKy8vKiBcYnJpZWYgRW5hYmxlIGRpcmVjdCBkcml2ZSBvbiBQSU8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fQ2ZnRGlyZWN0RHJpdmUoDQorCUFUOTFQU19QSU8gcFBpbywgICAgICAgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGRpcmVjdERyaXZlKSAgICAvLyBcYXJnIFBJTyB0byBiZSBjb25maWd1cmVkIHdpdGggZGlyZWN0IGRyaXZlDQorDQogew0KLSAgICBwUERDLT5QRENfUFRDUiA9IEFUOTFDX1BEQ19SWFRFTjsNCisJLy8gQ29uZmlndXJlIHRoZSBEaXJlY3QgRHJpdmUNCisJcFBpby0+UElPX09XRFIgID0gfmRpcmVjdERyaXZlOw0KKwlwUGlvLT5QSU9fT1dFUiAgPSBkaXJlY3REcml2ZTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUERDX0Rpc2FibGVUeCAqLw0KLS8qKiBcYnJpZWYgRGlzYWJsZSB0cmFuc21pdCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BEQ19EaXNhYmxlVHgoIEFUOTFQU19QREMgcFBEQyApIC8qIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0NmZ0lucHV0RmlsdGVyDQorLy8qIFxicmllZiBFbmFibGUgaW5wdXQgZmlsdGVyIG9uIGlucHV0IFBJTw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19DZmdJbnB1dEZpbHRlcigNCisJQVQ5MVBTX1BJTyBwUGlvLCAgICAgICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgaW5wdXRGaWx0ZXIpICAgIC8vIFxhcmcgUElPIHRvIGJlIGNvbmZpZ3VyZWQgd2l0aCBpbnB1dCBmaWx0ZXINCisNCiB7DQotICAgIHBQREMtPlBEQ19QVENSID0gQVQ5MUNfUERDX1RYVERJUzsNCisJLy8gQ29uZmlndXJlIHRoZSBEaXJlY3QgRHJpdmUNCisJcFBpby0+UElPX0lGRFIgID0gfmlucHV0RmlsdGVyOw0KKwlwUGlvLT5QSU9fSUZFUiAgPSBpbnB1dEZpbHRlcjsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUERDX0Rpc2FibGVSeCAqLw0KLS8qKiBcYnJpZWYgRGlzYWJsZSByZWNlaXZlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUERDX0Rpc2FibGVSeCggQVQ5MVBTX1BEQyBwUERDICkgLyogXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fR2V0SW5wdXQNCisvLyogXGJyaWVmIFJldHVybiBQSU8gaW5wdXQgdmFsdWUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJT19HZXRJbnB1dCggLy8gXHJldHVybiBQSU8gaW5wdXQNCisJQVQ5MVBTX1BJTyBwUGlvKSAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCiB7DQotICAgIHBQREMtPlBEQ19QVENSID0gQVQ5MUNfUERDX1JYVERJUzsNCisJcmV0dXJuIHBQaW8tPlBJT19QRFNSOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QRENfSXNUeEVtcHR5ICovDQotLyoqIFxicmllZiBUZXN0IGlmIHRoZSBjdXJyZW50IHRyYW5zZmVyIGRlc2NyaXB0b3IgaGFzIGJlZW4gc2VudCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSBpbnQgQVQ5MUZfUERDX0lzVHhFbXB0eSggLyogXHJldHVybiByZXR1cm4gMSBpZiB0cmFuc2ZlciBpcyBjb21wbGV0ZSAqLw0KLSAgICBBVDkxUFNfUERDIHBQREMgKSAgICAgICAgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19Jc0lucHV0U2V0DQorLy8qIFxicmllZiBUZXN0IGlmIFBJTyBpcyBpbnB1dCBmbGFnIGlzIGFjdGl2ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfUElPX0lzSW5wdXRTZXQoDQorCUFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQogew0KLSAgICByZXR1cm4gISggcFBEQy0+UERDX1RDUiApOw0KKwlyZXR1cm4gKEFUOTFGX1BJT19HZXRJbnB1dChwUGlvKSAmIGZsYWcpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QRENfSXNOZXh0VHhFbXB0eSAqLw0KLS8qKiBcYnJpZWYgVGVzdCBpZiB0aGUgbmV4dCB0cmFuc2ZlciBkZXNjcmlwdG9yIGhhcyBiZWVuIG1vdmVkIHRvIHRoZSBjdXJyZW50IHRkICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIGludCBBVDkxRl9QRENfSXNOZXh0VHhFbXB0eSggLyogXHJldHVybiByZXR1cm4gMSBpZiB0cmFuc2ZlciBpcyBjb21wbGV0ZSAqLw0KLSAgICBBVDkxUFNfUERDIHBQREMgKSAgICAgICAgICAgICAgICAgLyogXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXIgKi8NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fU2V0T3V0cHV0DQorLy8qIFxicmllZiBTZXQgdG8gMSBvdXRwdXQgUElPDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX1NldE91dHB1dCgNCisJQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgb3V0cHV0IHRvIGJlIHNldA0KIHsNCi0gICAgcmV0dXJuICEoIHBQREMtPlBEQ19UTkNSICk7DQorCXBQaW8tPlBJT19TT0RSID0gZmxhZzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUERDX0lzUnhFbXB0eSAqLw0KLS8qKiBcYnJpZWYgVGVzdCBpZiB0aGUgY3VycmVudCB0cmFuc2ZlciBkZXNjcmlwdG9yIGhhcyBiZWVuIGZpbGxlZCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSBpbnQgQVQ5MUZfUERDX0lzUnhFbXB0eSggLyogXHJldHVybiByZXR1cm4gMSBpZiB0cmFuc2ZlciBpcyBjb21wbGV0ZSAqLw0KLSAgICBBVDkxUFNfUERDIHBQREMgKSAgICAgICAgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19DbGVhck91dHB1dA0KKy8vKiBcYnJpZWYgU2V0IHRvIDAgb3V0cHV0IFBJTw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19DbGVhck91dHB1dCgNCisJQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgb3V0cHV0IHRvIGJlIGNsZWFyZWQNCiB7DQotICAgIHJldHVybiAhKCBwUERDLT5QRENfUkNSICk7DQorCXBQaW8tPlBJT19DT0RSID0gZmxhZzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUERDX0lzTmV4dFJ4RW1wdHkgKi8NCi0vKiogXGJyaWVmIFRlc3QgaWYgdGhlIG5leHQgdHJhbnNmZXIgZGVzY3JpcHRvciBoYXMgYmVlbiBtb3ZlZCB0byB0aGUgY3VycmVudCB0ZCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSBpbnQgQVQ5MUZfUERDX0lzTmV4dFJ4RW1wdHkoIC8qIFxyZXR1cm4gcmV0dXJuIDEgaWYgdHJhbnNmZXIgaXMgY29tcGxldGUgKi8NCi0gICAgQVQ5MVBTX1BEQyBwUERDICkgICAgICAgICAgICAgICAgIC8qIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0ZvcmNlT3V0cHV0DQorLy8qIFxicmllZiBGb3JjZSBvdXRwdXQgd2hlbiBEaXJlY3QgZHJpdmUgb3B0aW9uIGlzIGVuYWJsZWQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fRm9yY2VPdXRwdXQoDQorCUFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIG91dHB1dCB0byBiZSBmb3JjZWQNCiB7DQotICAgIHJldHVybiAhKCBwUERDLT5QRENfUk5DUiApOw0KKwlwUGlvLT5QSU9fT0RTUiA9IGZsYWc7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BEQ19PcGVuICovDQotLyoqIFxicmllZiBPcGVuIFBEQzogZGlzYWJsZSBUWCBhbmQgUlggcmVzZXQgdHJhbnNmZXIgZGVzY3JpcHRvcnMsIHJlLWVuYWJsZSBSWCBhbmQgVFggKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QRENfT3BlbiggQVQ5MVBTX1BEQyBwUERDICkgLyogXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fRW5hYmxlDQorLy8qIFxicmllZiBFbmFibGUgUElPDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX0VuYWJsZSgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBwaW8gdG8gYmUgZW5hYmxlZCANCiB7DQotICAgIC8qKiBEaXNhYmxlIHRoZSBSWCBhbmQgVFggUERDIHRyYW5zZmVyIHJlcXVlc3RzICovDQotICAgIEFUOTFGX1BEQ19EaXNhYmxlUngoIHBQREMgKTsNCi0gICAgQVQ5MUZfUERDX0Rpc2FibGVUeCggcFBEQyApOw0KLQ0KLSAgICAvKiogUmVzZXQgYWxsIENvdW50ZXIgcmVnaXN0ZXIgTmV4dCBidWZmZXIgZmlyc3QgKi8NCi0gICAgQVQ5MUZfUERDX1NldE5leHRUeCggcFBEQywgKCBjaGFyICogKSAwLCAwICk7DQotICAgIEFUOTFGX1BEQ19TZXROZXh0UngoIHBQREMsICggY2hhciAqICkgMCwgMCApOw0KLSAgICBBVDkxRl9QRENfU2V0VHgoIHBQREMsICggY2hhciAqICkgMCwgMCApOw0KLSAgICBBVDkxRl9QRENfU2V0UngoIHBQREMsICggY2hhciAqICkgMCwgMCApOw0KLQ0KLSAgICAvKiogRW5hYmxlIHRoZSBSWCBhbmQgVFggUERDIHRyYW5zZmVyIHJlcXVlc3RzICovDQotICAgIEFUOTFGX1BEQ19FbmFibGVSeCggcFBEQyApOw0KLSAgICBBVDkxRl9QRENfRW5hYmxlVHgoIHBQREMgKTsNCisgICAgICAgIHBQaW8tPlBJT19QRVIgPSBmbGFnOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QRENfQ2xvc2UgKi8NCi0vKiogXGJyaWVmIENsb3NlIFBEQzogZGlzYWJsZSBUWCBhbmQgUlggcmVzZXQgdHJhbnNmZXIgZGVzY3JpcHRvcnMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QRENfQ2xvc2UoIEFUOTFQU19QREMgcFBEQyApIC8qIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0Rpc2FibGUNCisvLyogXGJyaWVmIERpc2FibGUgUElPDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX0Rpc2FibGUoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgcGlvIHRvIGJlIGRpc2FibGVkIA0KIHsNCi0gICAgLyoqIERpc2FibGUgdGhlIFJYIGFuZCBUWCBQREMgdHJhbnNmZXIgcmVxdWVzdHMgKi8NCi0gICAgQVQ5MUZfUERDX0Rpc2FibGVSeCggcFBEQyApOw0KLSAgICBBVDkxRl9QRENfRGlzYWJsZVR4KCBwUERDICk7DQotDQotICAgIC8qKiBSZXNldCBhbGwgQ291bnRlciByZWdpc3RlciBOZXh0IGJ1ZmZlciBmaXJzdCAqLw0KLSAgICBBVDkxRl9QRENfU2V0TmV4dFR4KCBwUERDLCAoIGNoYXIgKiApIDAsIDAgKTsNCi0gICAgQVQ5MUZfUERDX1NldE5leHRSeCggcFBEQywgKCBjaGFyICogKSAwLCAwICk7DQotICAgIEFUOTFGX1BEQ19TZXRUeCggcFBEQywgKCBjaGFyICogKSAwLCAwICk7DQotICAgIEFUOTFGX1BEQ19TZXRSeCggcFBEQywgKCBjaGFyICogKSAwLCAwICk7DQorICAgICAgICBwUGlvLT5QSU9fUERSID0gZmxhZzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUERDX1NlbmRGcmFtZSAqLw0KLS8qKiBcYnJpZWYgQ2xvc2UgUERDOiBkaXNhYmxlIFRYIGFuZCBSWCByZXNldCB0cmFuc2ZlciBkZXNjcmlwdG9ycyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUERDX1NlbmRGcmFtZSggQVQ5MVBTX1BEQyBwUERDLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICogcEJ1ZmZlciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHN6QnVmZmVyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICogcE5leHRCdWZmZXIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzek5leHRCdWZmZXIgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19HZXRTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBQSU8gU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSU9fR2V0U3RhdHVzKCAvLyBccmV0dXJuIFBJTyBTdGF0dXMNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbykgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQogew0KLSAgICBpZiggQVQ5MUZfUERDX0lzVHhFbXB0eSggcFBEQyApICkNCi0gICAgew0KLSAgICAgICAgLyoqIEJ1ZmZlciBhbmQgbmV4dCBidWZmZXIgY2FuIGJlIGluaXRpYWxpemVkICovDQotICAgICAgICBBVDkxRl9QRENfU2V0VHgoIHBQREMsIHBCdWZmZXIsIHN6QnVmZmVyICk7DQotICAgICAgICBBVDkxRl9QRENfU2V0TmV4dFR4KCBwUERDLCBwTmV4dEJ1ZmZlciwgc3pOZXh0QnVmZmVyICk7DQotICAgICAgICByZXR1cm4gMjsNCi0gICAgfQ0KLSAgICBlbHNlIGlmKCBBVDkxRl9QRENfSXNOZXh0VHhFbXB0eSggcFBEQyApICkNCi0gICAgew0KLSAgICAgICAgLyoqIE9ubHkgb25lIGJ1ZmZlciBjYW4gYmUgaW5pdGlhbGl6ZWQgKi8NCi0gICAgICAgIEFUOTFGX1BEQ19TZXROZXh0VHgoIHBQREMsIHBCdWZmZXIsIHN6QnVmZmVyICk7DQotICAgICAgICByZXR1cm4gMTsNCi0gICAgfQ0KLSAgICBlbHNlDQotICAgIHsNCi0gICAgICAgIC8qKiBBbGwgYnVmZmVyIGFyZSBpbiB1c2UuLi4gKi8NCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQorICAgICAgICByZXR1cm4gcFBpby0+UElPX1BTUjsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUERDX1JlY2VpdmVGcmFtZSAqLw0KLS8qKiBcYnJpZWYgQ2xvc2UgUERDOiBkaXNhYmxlIFRYIGFuZCBSWCByZXNldCB0cmFuc2ZlciBkZXNjcmlwdG9ycyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUERDX1JlY2VpdmVGcmFtZSggQVQ5MVBTX1BEQyBwUERDLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICogcEJ1ZmZlciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHN6QnVmZmVyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICogcE5leHRCdWZmZXIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzek5leHRCdWZmZXIgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19Jc1NldA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBQSU8gaXMgU2V0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9QSU9fSXNTZXQoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCiB7DQotICAgIGlmKCBBVDkxRl9QRENfSXNSeEVtcHR5KCBwUERDICkgKQ0KLSAgICB7DQotICAgICAgICAvKiogQnVmZmVyIGFuZCBuZXh0IGJ1ZmZlciBjYW4gYmUgaW5pdGlhbGl6ZWQgKi8NCi0gICAgICAgIEFUOTFGX1BEQ19TZXRSeCggcFBEQywgcEJ1ZmZlciwgc3pCdWZmZXIgKTsNCi0gICAgICAgIEFUOTFGX1BEQ19TZXROZXh0UngoIHBQREMsIHBOZXh0QnVmZmVyLCBzek5leHRCdWZmZXIgKTsNCi0gICAgICAgIHJldHVybiAyOw0KLSAgICB9DQotICAgIGVsc2UgaWYoIEFUOTFGX1BEQ19Jc05leHRSeEVtcHR5KCBwUERDICkgKQ0KLSAgICB7DQotICAgICAgICAvKiogT25seSBvbmUgYnVmZmVyIGNhbiBiZSBpbml0aWFsaXplZCAqLw0KLSAgICAgICAgQVQ5MUZfUERDX1NldE5leHRSeCggcFBEQywgcEJ1ZmZlciwgc3pCdWZmZXIgKTsNCi0gICAgICAgIHJldHVybiAxOw0KLSAgICB9DQotICAgIGVsc2UNCi0gICAgew0KLSAgICAgICAgLyoqIEFsbCBidWZmZXIgYXJlIGluIHVzZS4uLiAqLw0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCisgICAgICAgIHJldHVybiAoQVQ5MUZfUElPX0dldFN0YXR1cyhwUGlvKSAmIGZsYWcpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fT3V0cHV0RW5hYmxlDQorLy8qIFxicmllZiBPdXRwdXQgRW5hYmxlIFBJTw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19PdXRwdXRFbmFibGUoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgcGlvIG91dHB1dCB0byBiZSBlbmFibGVkDQorew0KKyAgICAgICAgcFBpby0+UElPX09FUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19PdXRwdXREaXNhYmxlDQorLy8qIFxicmllZiBPdXRwdXQgRW5hYmxlIFBJTw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19PdXRwdXREaXNhYmxlKA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIHBpbyBvdXRwdXQgdG8gYmUgZGlzYWJsZWQNCit7DQorICAgICAgICBwUGlvLT5QSU9fT0RSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0dldE91dHB1dFN0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFBJTyBPdXRwdXQgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSU9fR2V0T3V0cHV0U3RhdHVzKCAvLyBccmV0dXJuIFBJTyBPdXRwdXQgU3RhdHVzDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8pIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KK3sNCisgICAgICAgIHJldHVybiBwUGlvLT5QSU9fT1NSOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fSXNPdXB1dFNldA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBQSU8gT3V0cHV0IGlzIFNldA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfUElPX0lzT3V0cHV0U2V0KA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQorew0KKyAgICAgICAgcmV0dXJuIChBVDkxRl9QSU9fR2V0T3V0cHV0U3RhdHVzKHBQaW8pICYgZmxhZyk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19JbnB1dEZpbHRlckVuYWJsZQ0KKy8vKiBcYnJpZWYgSW5wdXQgRmlsdGVyIEVuYWJsZSBQSU8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fSW5wdXRGaWx0ZXJFbmFibGUoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgcGlvIGlucHV0IGZpbHRlciB0byBiZSBlbmFibGVkDQorew0KKyAgICAgICAgcFBpby0+UElPX0lGRVIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fSW5wdXRGaWx0ZXJEaXNhYmxlDQorLy8qIFxicmllZiBJbnB1dCBGaWx0ZXIgRGlzYWJsZSBQSU8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fSW5wdXRGaWx0ZXJEaXNhYmxlKA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIHBpbyBpbnB1dCBmaWx0ZXIgdG8gYmUgZGlzYWJsZWQNCit7DQorICAgICAgICBwUGlvLT5QSU9fSUZEUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19HZXRJbnB1dEZpbHRlclN0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFBJTyBJbnB1dCBGaWx0ZXIgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSU9fR2V0SW5wdXRGaWx0ZXJTdGF0dXMoIC8vIFxyZXR1cm4gUElPIElucHV0IEZpbHRlciBTdGF0dXMNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbykgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorew0KKyAgICAgICAgcmV0dXJuIHBQaW8tPlBJT19JRlNSOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fSXNJbnB1dEZpbHRlclNldA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBQSU8gSW5wdXQgZmlsdGVyIGlzIFNldA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfUElPX0lzSW5wdXRGaWx0ZXJTZXQoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorICAgICAgICByZXR1cm4gKEFUOTFGX1BJT19HZXRJbnB1dEZpbHRlclN0YXR1cyhwUGlvKSAmIGZsYWcpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fR2V0T3V0cHV0RGF0YVN0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFBJTyBPdXRwdXQgRGF0YSBTdGF0dXMgDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSU9fR2V0T3V0cHV0RGF0YVN0YXR1cyggLy8gXHJldHVybiBQSU8gT3V0cHV0IERhdGEgU3RhdHVzIA0KKwlBVDkxUFNfUElPIHBQaW8pIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KK3sNCisgICAgICAgIHJldHVybiBwUGlvLT5QSU9fT0RTUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0ludGVycnVwdEVuYWJsZQ0KKy8vKiBcYnJpZWYgRW5hYmxlIFBJTyBJbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fSW50ZXJydXB0RW5hYmxlKA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIHBpbyBpbnRlcnJ1cHQgdG8gYmUgZW5hYmxlZA0KK3sNCisgICAgICAgIHBQaW8tPlBJT19JRVIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fSW50ZXJydXB0RGlzYWJsZQ0KKy8vKiBcYnJpZWYgRGlzYWJsZSBQSU8gSW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX0ludGVycnVwdERpc2FibGUoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgcGlvIGludGVycnVwdCB0byBiZSBkaXNhYmxlZA0KK3sNCisgICAgICAgIHBQaW8tPlBJT19JRFIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fR2V0SW50ZXJydXB0TWFza1N0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFBJTyBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJT19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCAvLyBccmV0dXJuIFBJTyBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbykgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorew0KKyAgICAgICAgcmV0dXJuIHBQaW8tPlBJT19JTVI7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19HZXRJbnRlcnJ1cHRTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBQSU8gSW50ZXJydXB0IFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElPX0dldEludGVycnVwdFN0YXR1cyggLy8gXHJldHVybiBQSU8gSW50ZXJydXB0IFN0YXR1cw0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvKSAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCit7DQorICAgICAgICByZXR1cm4gcFBpby0+UElPX0lTUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0lzSW50ZXJydXB0TWFza2VkDQorLy8qIFxicmllZiBUZXN0IGlmIFBJTyBJbnRlcnJ1cHQgaXMgTWFza2VkIA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfUElPX0lzSW50ZXJydXB0TWFza2VkKA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQorew0KKyAgICAgICAgcmV0dXJuIChBVDkxRl9QSU9fR2V0SW50ZXJydXB0TWFza1N0YXR1cyhwUGlvKSAmIGZsYWcpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fSXNJbnRlcnJ1cHRTZXQNCisvLyogXGJyaWVmIFRlc3QgaWYgUElPIEludGVycnVwdCBpcyBTZXQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1BJT19Jc0ludGVycnVwdFNldCgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisgICAgICAgIHJldHVybiAoQVQ5MUZfUElPX0dldEludGVycnVwdFN0YXR1cyhwUGlvKSAmIGZsYWcpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fTXVsdGlEcml2ZXJFbmFibGUNCisvLyogXGJyaWVmIE11bHRpIERyaXZlciBFbmFibGUgUElPDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX011bHRpRHJpdmVyRW5hYmxlKA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIHBpbyB0byBiZSBlbmFibGVkDQorew0KKyAgICAgICAgcFBpby0+UElPX01ERVIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fTXVsdGlEcml2ZXJEaXNhYmxlDQorLy8qIFxicmllZiBNdWx0aSBEcml2ZXIgRGlzYWJsZSBQSU8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fTXVsdGlEcml2ZXJEaXNhYmxlKA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIHBpbyB0byBiZSBkaXNhYmxlZA0KK3sNCisgICAgICAgIHBQaW8tPlBJT19NRERSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0dldE11bHRpRHJpdmVyU3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gUElPIE11bHRpIERyaXZlciBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJT19HZXRNdWx0aURyaXZlclN0YXR1cyggLy8gXHJldHVybiBQSU8gTXVsdGkgRHJpdmVyIFN0YXR1cw0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvKSAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCit7DQorICAgICAgICByZXR1cm4gcFBpby0+UElPX01EU1I7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19Jc011bHRpRHJpdmVyU2V0DQorLy8qIFxicmllZiBUZXN0IGlmIFBJTyBNdWx0aURyaXZlciBpcyBTZXQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1BJT19Jc011bHRpRHJpdmVyU2V0KA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQorew0KKyAgICAgICAgcmV0dXJuIChBVDkxRl9QSU9fR2V0TXVsdGlEcml2ZXJTdGF0dXMocFBpbykgJiBmbGFnKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0FfUmVnaXN0ZXJTZWxlY3Rpb24NCisvLyogXGJyaWVmIFBJTyBBIFJlZ2lzdGVyIFNlbGVjdGlvbiANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fQV9SZWdpc3RlclNlbGVjdGlvbigNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBwaW8gQSByZWdpc3RlciBzZWxlY3Rpb24NCit7DQorICAgICAgICBwUGlvLT5QSU9fQVNSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0JfUmVnaXN0ZXJTZWxlY3Rpb24NCisvLyogXGJyaWVmIFBJTyBCIFJlZ2lzdGVyIFNlbGVjdGlvbiANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fQl9SZWdpc3RlclNlbGVjdGlvbigNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBwaW8gQiByZWdpc3RlciBzZWxlY3Rpb24gDQorew0KKyAgICAgICAgcFBpby0+UElPX0JTUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19HZXRfQUJfUmVnaXN0ZXJTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBQSU8gSW50ZXJydXB0IFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElPX0dldF9BQl9SZWdpc3RlclN0YXR1cyggLy8gXHJldHVybiBQSU8gQUIgUmVnaXN0ZXIgU3RhdHVzDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8pIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KK3sNCisgICAgICAgIHJldHVybiBwUGlvLT5QSU9fQUJTUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0lzQUJfUmVnaXN0ZXJTZXQNCisvLyogXGJyaWVmIFRlc3QgaWYgUElPIEFCIFJlZ2lzdGVyIGlzIFNldA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfUElPX0lzQUJfUmVnaXN0ZXJTZXQoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorICAgICAgICByZXR1cm4gKEFUOTFGX1BJT19HZXRfQUJfUmVnaXN0ZXJTdGF0dXMocFBpbykgJiBmbGFnKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX091dHB1dFdyaXRlRW5hYmxlDQorLy8qIFxicmllZiBPdXRwdXQgV3JpdGUgRW5hYmxlIFBJTw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19PdXRwdXRXcml0ZUVuYWJsZSgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBwaW8gb3V0cHV0IHdyaXRlIHRvIGJlIGVuYWJsZWQNCit7DQorICAgICAgICBwUGlvLT5QSU9fT1dFUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19PdXRwdXRXcml0ZURpc2FibGUNCisvLyogXGJyaWVmIE91dHB1dCBXcml0ZSBEaXNhYmxlIFBJTw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19PdXRwdXRXcml0ZURpc2FibGUoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgcGlvIG91dHB1dCB3cml0ZSB0byBiZSBkaXNhYmxlZA0KK3sNCisgICAgICAgIHBQaW8tPlBJT19PV0RSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0dldE91dHB1dFdyaXRlU3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gUElPIE91dHB1dCBXcml0ZSBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJT19HZXRPdXRwdXRXcml0ZVN0YXR1cyggLy8gXHJldHVybiBQSU8gT3V0cHV0IFdyaXRlIFN0YXR1cw0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvKSAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCit7DQorICAgICAgICByZXR1cm4gcFBpby0+UElPX09XU1I7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19Jc091dHB1dFdyaXRlU2V0DQorLy8qIFxicmllZiBUZXN0IGlmIFBJTyBPdXRwdXRXcml0ZSBpcyBTZXQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1BJT19Jc091dHB1dFdyaXRlU2V0KA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQorew0KKyAgICAgICAgcmV0dXJuIChBVDkxRl9QSU9fR2V0T3V0cHV0V3JpdGVTdGF0dXMocFBpbykgJiBmbGFnKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0dldENmZ1B1bGx1cA0KKy8vKiBcYnJpZWYgUmV0dXJuIFBJTyBDb25maWd1cmF0aW9uIFB1bGx1cA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElPX0dldENmZ1B1bGx1cCggLy8gXHJldHVybiBQSU8gQ29uZmlndXJhdGlvbiBQdWxsdXAgDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8pIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KK3sNCisgICAgICAgIHJldHVybiBwUGlvLT5QSU9fUFBVU1I7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19Jc091dHB1dERhdGFTdGF0dXNTZXQNCisvLyogXGJyaWVmIFRlc3QgaWYgUElPIE91dHB1dCBEYXRhIFN0YXR1cyBpcyBTZXQgDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9QSU9fSXNPdXRwdXREYXRhU3RhdHVzU2V0KA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQorew0KKyAgICAgICAgcmV0dXJuIChBVDkxRl9QSU9fR2V0T3V0cHV0RGF0YVN0YXR1cyhwUGlvKSAmIGZsYWcpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fSXNDZmdQdWxsdXBTdGF0dXNTZXQNCisvLyogXGJyaWVmIFRlc3QgaWYgUElPIENvbmZpZ3VyYXRpb24gUHVsbHVwIFN0YXR1cyBpcyBTZXQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1BJT19Jc0NmZ1B1bGx1cFN0YXR1c1NldCgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisgICAgICAgIHJldHVybiAofkFUOTFGX1BJT19HZXRDZmdQdWxsdXAocFBpbykgJiBmbGFnKTsNCiB9DQogDQogLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0qICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBEQkdVDQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9EQkdVX0ludGVycnVwdEVuYWJsZSAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIERCR1UgSW50ZXJydXB0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfREJHVV9JbnRlcnJ1cHRFbmFibGUoIEFUOTFQU19EQkdVIHBEYmd1LCAgLyogXGFyZyAgcG9pbnRlciB0byBhIERCR1UgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgZGJndSBpbnRlcnJ1cHQgdG8gYmUgZW5hYmxlZCAqLw0KKyAgICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFBNQw0KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUE1DX0NmZ1N5c0Nsa0VuYWJsZVJlZw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIHRoZSBTeXN0ZW0gQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyIG9mIHRoZSBQTUMgY29udHJvbGxlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BNQ19DZmdTeXNDbGtFbmFibGVSZWcgKA0KKwlBVDkxUFNfUE1DIHBQTUMsIC8vIFxhcmcgcG9pbnRlciB0byBQTUMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgbW9kZSkNCiB7DQotICAgIHBEYmd1LT5EQkdVX0lFUiA9IGZsYWc7DQorCS8vKiBXcml0ZSB0byB0aGUgU0NFUiByZWdpc3Rlcg0KKwlwUE1DLT5QTUNfU0NFUiA9IG1vZGU7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0RCR1VfSW50ZXJydXB0RGlzYWJsZSAqLw0KLS8qKiBcYnJpZWYgRGlzYWJsZSBEQkdVIEludGVycnVwdCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0RCR1VfSW50ZXJydXB0RGlzYWJsZSggQVQ5MVBTX0RCR1UgcERiZ3UsICAvKiBcYXJnICBwb2ludGVyIHRvIGEgREJHVSBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgZGJndSBpbnRlcnJ1cHQgdG8gYmUgZGlzYWJsZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfQ2ZnU3lzQ2xrRGlzYWJsZVJlZw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIHRoZSBTeXN0ZW0gQ2xvY2sgRGlzYWJsZSBSZWdpc3RlciBvZiB0aGUgUE1DIGNvbnRyb2xsZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QTUNfQ2ZnU3lzQ2xrRGlzYWJsZVJlZyAoDQorCUFUOTFQU19QTUMgcFBNQywgLy8gXGFyZyBwb2ludGVyIHRvIFBNQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBtb2RlKQ0KIHsNCi0gICAgcERiZ3UtPkRCR1VfSURSID0gZmxhZzsNCisJLy8qIFdyaXRlIHRvIHRoZSBTQ0RSIHJlZ2lzdGVyDQorCXBQTUMtPlBNQ19TQ0RSID0gbW9kZTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfREJHVV9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzICovDQotLyoqIFxicmllZiBSZXR1cm4gREJHVSBJbnRlcnJ1cHQgTWFzayBTdGF0dXMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0RCR1VfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLyogXHJldHVybiBEQkdVIEludGVycnVwdCBNYXNrIFN0YXR1cyAqLw0KLSAgICBBVDkxUFNfREJHVSBwRGJndSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBEQkdVIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfR2V0U3lzQ2xrU3RhdHVzUmVnDQorLy8qIFxicmllZiBSZXR1cm4gdGhlIFN5c3RlbSBDbG9jayBTdGF0dXMgUmVnaXN0ZXIgb2YgdGhlIFBNQyBjb250cm9sbGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QTUNfR2V0U3lzQ2xrU3RhdHVzUmVnICgNCisJQVQ5MVBTX1BNQyBwUE1DIC8vIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlcg0KKwkpDQogew0KLSAgICByZXR1cm4gcERiZ3UtPkRCR1VfSU1SOw0KKwlyZXR1cm4gcFBNQy0+UE1DX1NDU1I7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0RCR1VfSXNJbnRlcnJ1cHRNYXNrZWQgKi8NCi0vKiogXGJyaWVmIFRlc3QgaWYgREJHVSBJbnRlcnJ1cHQgaXMgTWFza2VkICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIGludCBBVDkxRl9EQkdVX0lzSW50ZXJydXB0TWFza2VkKCBBVDkxUFNfREJHVSBwRGJndSwgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBEQkdVIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaw0KKy8vKiBcYnJpZWYgRW5hYmxlIHBlcmlwaGVyYWwgY2xvY2sNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2sgKA0KKwlBVDkxUFNfUE1DIHBQTUMsIC8vIFxhcmcgcG9pbnRlciB0byBQTUMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgcGVyaXBoSWRzKSAgLy8gXGFyZyBJRHMgb2YgcGVyaXBoZXJhbHMgdG8gZW5hYmxlDQogew0KLSAgICByZXR1cm4oIEFUOTFGX0RCR1VfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggcERiZ3UgKSAmIGZsYWcgKTsNCisJcFBNQy0+UE1DX1BDRVIgPSBwZXJpcGhJZHM7DQogfQ0KIA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19EaXNhYmxlUGVyaXBoQ2xvY2sNCisvLyogXGJyaWVmIERpc2FibGUgcGVyaXBoZXJhbCBjbG9jaw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BNQ19EaXNhYmxlUGVyaXBoQ2xvY2sgKA0KKwlBVDkxUFNfUE1DIHBQTUMsIC8vIFxhcmcgcG9pbnRlciB0byBQTUMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgcGVyaXBoSWRzKSAgLy8gXGFyZyBJRHMgb2YgcGVyaXBoZXJhbHMgdG8gZW5hYmxlDQorew0KKwlwUE1DLT5QTUNfUENEUiA9IHBlcmlwaElkczsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUE1DX0dldFBlcmlwaENsb2NrDQorLy8qIFxicmllZiBHZXQgcGVyaXBoZXJhbCBjbG9jayBzdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BNQ19HZXRQZXJpcGhDbG9jayAoDQorCUFUOTFQU19QTUMgcFBNQykgLy8gXGFyZyBwb2ludGVyIHRvIFBNQyBjb250cm9sbGVyDQorew0KKwlyZXR1cm4gcFBNQy0+UE1DX1BDU1I7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NLR1JfQ2ZnTWFpbk9zY2lsbGF0b3JSZWcNCisvLyogXGJyaWVmIENmZyB0aGUgbWFpbiBvc2NpbGxhdG9yDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQ0tHUl9DZmdNYWluT3NjaWxsYXRvclJlZyAoDQorCUFUOTFQU19DS0dSIHBDS0dSLCAvLyBcYXJnIHBvaW50ZXIgdG8gQ0tHUiBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBtb2RlKQ0KK3sNCisJcENLR1ItPkNLR1JfTU9SID0gbW9kZTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0tHUl9HZXRNYWluT3NjaWxsYXRvclJlZw0KKy8vKiBcYnJpZWYgQ2ZnIHRoZSBtYWluIG9zY2lsbGF0b3INCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NLR1JfR2V0TWFpbk9zY2lsbGF0b3JSZWcgKA0KKwlBVDkxUFNfQ0tHUiBwQ0tHUikgLy8gXGFyZyBwb2ludGVyIHRvIENLR1IgY29udHJvbGxlcg0KK3sNCisJcmV0dXJuIHBDS0dSLT5DS0dSX01PUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0tHUl9FbmFibGVNYWluT3NjaWxsYXRvcg0KKy8vKiBcYnJpZWYgRW5hYmxlIHRoZSBtYWluIG9zY2lsbGF0b3INCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9DS0dSX0VuYWJsZU1haW5Pc2NpbGxhdG9yKA0KKwlBVDkxUFNfQ0tHUiBwQ0tHUikgLy8gXGFyZyBwb2ludGVyIHRvIENLR1IgY29udHJvbGxlcg0KK3sNCisJcENLR1ItPkNLR1JfTU9SIHw9IEFUOTFDX0NLR1JfTU9TQ0VOOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DS0dSX0Rpc2FibGVNYWluT3NjaWxsYXRvcg0KKy8vKiBcYnJpZWYgRGlzYWJsZSB0aGUgbWFpbiBvc2NpbGxhdG9yDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQ0tHUl9EaXNhYmxlTWFpbk9zY2lsbGF0b3IgKA0KKwlBVDkxUFNfQ0tHUiBwQ0tHUikgLy8gXGFyZyBwb2ludGVyIHRvIENLR1IgY29udHJvbGxlcg0KK3sNCisJcENLR1ItPkNLR1JfTU9SICY9IH5BVDkxQ19DS0dSX01PU0NFTjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0tHUl9DZmdNYWluT3NjU3RhcnRVcFRpbWUNCisvLyogXGJyaWVmIENmZyBNT1IgUmVnaXN0ZXIgYWNjb3JkaW5nIHRvIHRoZSBtYWluIG9zYyBzdGFydHVwIHRpbWUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9DS0dSX0NmZ01haW5Pc2NTdGFydFVwVGltZSAoDQorCUFUOTFQU19DS0dSIHBDS0dSLCAvLyBcYXJnIHBvaW50ZXIgdG8gQ0tHUiBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBzdGFydHVwX3RpbWUsICAvLyBcYXJnIG1haW4gb3NjIHN0YXJ0dXAgdGltZSBpbiBtaWNyb3NlY29uZCAodXMpDQorCXVuc2lnbmVkIGludCBzbG93Q2xvY2spICAvLyBcYXJnIHNsb3dDbG9jayBpbiBIeg0KK3sNCisJcENLR1ItPkNLR1JfTU9SICY9IH5BVDkxQ19DS0dSX09TQ09VTlQ7DQorCXBDS0dSLT5DS0dSX01PUiB8PSAoKHNsb3dDbG9jayAqIHN0YXJ0dXBfdGltZSkvKDgqMTAwMDAwMCkpIDw8IDg7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NLR1JfR2V0TWFpbkNsb2NrRnJlcVJlZw0KKy8vKiBcYnJpZWYgQ2ZnIHRoZSBtYWluIG9zY2lsbGF0b3INCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NLR1JfR2V0TWFpbkNsb2NrRnJlcVJlZyAoDQorCUFUOTFQU19DS0dSIHBDS0dSKSAvLyBcYXJnIHBvaW50ZXIgdG8gQ0tHUiBjb250cm9sbGVyDQorew0KKwlyZXR1cm4gcENLR1ItPkNLR1JfTUNGUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0tHUl9HZXRNYWluQ2xvY2sNCisvLyogXGJyaWVmIFJldHVybiBNYWluIGNsb2NrIGluIEh6DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DS0dSX0dldE1haW5DbG9jayAoDQorCUFUOTFQU19DS0dSIHBDS0dSLCAvLyBcYXJnIHBvaW50ZXIgdG8gQ0tHUiBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBzbG93Q2xvY2spICAvLyBcYXJnIHNsb3dDbG9jayBpbiBIeg0KK3sNCisJcmV0dXJuICgocENLR1ItPkNLR1JfTUNGUiAgJiBBVDkxQ19DS0dSX01BSU5GKSAqIHNsb3dDbG9jaykgPj4gNDsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUE1DX0NmZ01DS1JlZw0KKy8vKiBcYnJpZWYgQ2ZnIE1hc3RlciBDbG9jayBSZWdpc3Rlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BNQ19DZmdNQ0tSZWcgKA0KKwlBVDkxUFNfUE1DIHBQTUMsIC8vIFxhcmcgcG9pbnRlciB0byBQTUMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgbW9kZSkNCit7DQorCXBQTUMtPlBNQ19NQ0tSID0gbW9kZTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUE1DX0dldE1DS1JlZw0KKy8vKiBcYnJpZWYgUmV0dXJuIE1hc3RlciBDbG9jayBSZWdpc3Rlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUE1DX0dldE1DS1JlZygNCisJQVQ5MVBTX1BNQyBwUE1DKSAvLyBcYXJnIHBvaW50ZXIgdG8gUE1DIGNvbnRyb2xsZXINCit7DQorCXJldHVybiBwUE1DLT5QTUNfTUNLUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfR2V0TWFzdGVyQ2xvY2sNCisvLyogXGJyaWVmIFJldHVybiBtYXN0ZXIgY2xvY2sgaW4gSHogd2hpY2ggY29ycmVwb25kcyB0byBwcm9jZXNzb3IgY2xvY2sgZm9yIEFSTTcNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUE1DX0dldE1hc3RlckNsb2NrICgNCisJQVQ5MVBTX1BNQyBwUE1DLCAvLyBcYXJnIHBvaW50ZXIgdG8gUE1DIGNvbnRyb2xsZXINCisJQVQ5MVBTX0NLR1IgcENLR1IsIC8vIFxhcmcgcG9pbnRlciB0byBDS0dSIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IHNsb3dDbG9jaykgIC8vIFxhcmcgc2xvd0Nsb2NrIGluIEh6DQorew0KKwl1bnNpZ25lZCBpbnQgcmVnID0gcFBNQy0+UE1DX01DS1I7DQorCXVuc2lnbmVkIGludCBwcmVzY2FsZXIgPSAoMSA8PCAoKHJlZyAmIEFUOTFDX1BNQ19QUkVTKSA+PiAyKSk7DQorCXVuc2lnbmVkIGludCBwbGxEaXZpZGVyLCBwbGxNdWx0aXBsaWVyOw0KKw0KKwlzd2l0Y2ggKHJlZyAmIEFUOTFDX1BNQ19DU1MpIHsNCisJCWNhc2UgQVQ5MUNfUE1DX0NTU19TTE9XX0NMSzogLy8gU2xvdyBjbG9jayBzZWxlY3RlZA0KKwkJCXJldHVybiBzbG93Q2xvY2sgLyBwcmVzY2FsZXI7DQorCQljYXNlIEFUOTFDX1BNQ19DU1NfTUFJTl9DTEs6IC8vIE1haW4gY2xvY2sgaXMgc2VsZWN0ZWQNCisJCQlyZXR1cm4gQVQ5MUZfQ0tHUl9HZXRNYWluQ2xvY2socENLR1IsIHNsb3dDbG9jaykgLyBwcmVzY2FsZXI7DQorCQljYXNlIEFUOTFDX1BNQ19DU1NfUExMX0NMSzogLy8gUExMQiBjbG9jayBpcyBzZWxlY3RlZA0KKwkJCXJlZyA9IHBDS0dSLT5DS0dSX1BMTFI7DQorCQkJcGxsRGl2aWRlciAgICA9IChyZWcgICYgQVQ5MUNfQ0tHUl9ESVYpOw0KKwkJCXBsbE11bHRpcGxpZXIgPSAoKHJlZyAgJiBBVDkxQ19DS0dSX01VTCkgPj4gMTYpICsgMTsNCisJCQlyZXR1cm4gQVQ5MUZfQ0tHUl9HZXRNYWluQ2xvY2socENLR1IsIHNsb3dDbG9jaykgLyBwbGxEaXZpZGVyICogcGxsTXVsdGlwbGllciAvIHByZXNjYWxlcjsNCisJfQ0KKwlyZXR1cm4gMDsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUE1DX0VuYWJsZVBDSw0KKy8vKiBcYnJpZWYgRW5hYmxlIHBlcmlwaGVyYWwgY2xvY2sNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QTUNfRW5hYmxlUENLICgNCisJQVQ5MVBTX1BNQyBwUE1DLCAvLyBcYXJnIHBvaW50ZXIgdG8gUE1DIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IHBjaywgIC8vIFxhcmcgUGVyaXBoZXJhbCBjbG9jayBpZGVudGlmaWVyIDAgLi4gNw0KKwl1bnNpZ25lZCBpbnQgbW9kZSkNCit7DQorCXBQTUMtPlBNQ19QQ0tSW3Bja10gPSBtb2RlOw0KKwlwUE1DLT5QTUNfU0NFUiA9ICgxIDw8IHBjaykgPDwgODsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUE1DX0Rpc2FibGVQQ0sNCisvLyogXGJyaWVmIEVuYWJsZSBwZXJpcGhlcmFsIGNsb2NrDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0Rpc2FibGVQQ0sgKA0KKwlBVDkxUFNfUE1DIHBQTUMsIC8vIFxhcmcgcG9pbnRlciB0byBQTUMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgcGNrKSAgLy8gXGFyZyBQZXJpcGhlcmFsIGNsb2NrIGlkZW50aWZpZXIgMCAuLiA3DQorew0KKwlwUE1DLT5QTUNfU0NEUiA9ICgxIDw8IHBjaykgPDwgODsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUE1DX0VuYWJsZUl0DQorLy8qIFxicmllZiBFbmFibGUgUE1DIGludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BNQ19FbmFibGVJdCAoDQorCUFUOTFQU19QTUMgcFBNQywgICAgIC8vIHBvaW50ZXIgdG8gYSBQTUMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgICAvLyBJVCB0byBiZSBlbmFibGVkDQorew0KKwkvLyogV3JpdGUgdG8gdGhlIElFUiByZWdpc3Rlcg0KKwlwUE1DLT5QTUNfSUVSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUE1DX0Rpc2FibGVJdA0KKy8vKiBcYnJpZWYgRGlzYWJsZSBQTUMgaW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0Rpc2FibGVJdCAoDQorCUFUOTFQU19QTUMgcFBNQywgLy8gcG9pbnRlciB0byBhIFBNQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAvLyBJVCB0byBiZSBkaXNhYmxlZA0KK3sNCisJLy8qIFdyaXRlIHRvIHRoZSBJRFIgcmVnaXN0ZXINCisJcFBNQy0+UE1DX0lEUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19HZXRTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBQTUMgSW50ZXJydXB0IFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUE1DX0dldFN0YXR1cyggLy8gXHJldHVybiBQTUMgSW50ZXJydXB0IFN0YXR1cw0KKwlBVDkxUFNfUE1DIHBQTUMpIC8vIHBvaW50ZXIgdG8gYSBQTUMgY29udHJvbGxlcg0KK3sNCisJcmV0dXJuIHBQTUMtPlBNQ19TUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUE1DX0dldEludGVycnVwdE1hc2tTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBQTUMgSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QTUNfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLy8gXHJldHVybiBQTUMgSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorCUFUOTFQU19QTUMgcFBNQykgLy8gcG9pbnRlciB0byBhIFBNQyBjb250cm9sbGVyDQorew0KKwlyZXR1cm4gcFBNQy0+UE1DX0lNUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUE1DX0lzSW50ZXJydXB0TWFza2VkDQorLy8qIFxicmllZiBUZXN0IGlmIFBNQyBJbnRlcnJ1cHQgaXMgTWFza2VkDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QTUNfSXNJbnRlcnJ1cHRNYXNrZWQoDQorICAgICAgICBBVDkxUFNfUE1DIHBQTUMsICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBNQyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorCXJldHVybiAoQVQ5MUZfUE1DX0dldEludGVycnVwdE1hc2tTdGF0dXMocFBNQykgJiBmbGFnKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUE1DX0lzU3RhdHVzU2V0DQorLy8qIFxicmllZiBUZXN0IGlmIFBNQyBTdGF0dXMgaXMgU2V0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QTUNfSXNTdGF0dXNTZXQoDQorICAgICAgICBBVDkxUFNfUE1DIHBQTUMsICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBNQyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorCXJldHVybiAoQVQ5MUZfUE1DX0dldFN0YXR1cyhwUE1DKSAmIGZsYWcpOw0KK30vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFJTVEMNCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1JTVFNvZnRSZXNldA0KKy8vKiBcYnJpZWYgU3RhcnQgU29mdHdhcmUgUmVzZXQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9SU1RTb2Z0UmVzZXQoDQorICAgICAgICBBVDkxUFNfUlNUQyBwUlNUQywNCisgICAgICAgIHVuc2lnbmVkIGludCByZXNldCkNCit7DQorCXBSU1RDLT5SU1RDX1JDUiA9ICgweEE1MDAwMDAwIHwgcmVzZXQpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9SU1RTZXRNb2RlDQorLy8qIFxicmllZiBTZXQgUmVzZXQgTW9kZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1JTVFNldE1vZGUoDQorICAgICAgICBBVDkxUFNfUlNUQyBwUlNUQywNCisgICAgICAgIHVuc2lnbmVkIGludCBtb2RlKQ0KK3sNCisJcFJTVEMtPlJTVENfUk1SID0gKDB4QTUwMDAwMDAgfCBtb2RlKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUlNUR2V0TW9kZQ0KKy8vKiBcYnJpZWYgR2V0IFJlc2V0IE1vZGUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1JTVEdldE1vZGUoDQorICAgICAgICBBVDkxUFNfUlNUQyBwUlNUQykNCit7DQorCXJldHVybiAocFJTVEMtPlJTVENfUk1SKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUlNUR2V0U3RhdHVzDQorLy8qIFxicmllZiBHZXQgUmVzZXQgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9SU1RHZXRTdGF0dXMoDQorICAgICAgICBBVDkxUFNfUlNUQyBwUlNUQykNCit7DQorCXJldHVybiAocFJTVEMtPlJTVENfUlNSKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUlNUSXNTb2Z0UnN0QWN0aXZlDQorLy8qIFxicmllZiBSZXR1cm4gIT0wIGlmIHNvZnR3YXJlIHJlc2V0IGlzIHN0aWxsIG5vdCBjb21wbGV0ZWQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1JTVElzU29mdFJzdEFjdGl2ZSgNCisgICAgICAgIEFUOTFQU19SU1RDIHBSU1RDKQ0KK3sNCisJcmV0dXJuICgocFJTVEMtPlJTVENfUlNSKSAmIEFUOTFDX1JTVENfU1JDTVApOw0KK30NCiAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSogICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFBJTw0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX0NmZ1BlcmlwaCAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIHBpbnMgdG8gYmUgZHJpdmVkIGJ5IHBlcmlwaGVyYWwgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fQ2ZnUGVyaXBoKCBBVDkxUFNfUElPIHBQaW8sICAgICAgICAgICAgIC8qIFxhcmcgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcGVyaXBoQUVuYWJsZSwgIC8qIFxhcmcgUEVSSVBIIEEgdG8gZW5hYmxlICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcGVyaXBoQkVuYWJsZSApIC8qIFxhcmcgUEVSSVBIIEIgdG8gZW5hYmxlICovDQotDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgUlRUQw0KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgICBBVDkxRl9TZXRSVFRfVGltZUJhc2UoKQ0KKy8vKiBcYnJpZWYgIFNldCB0aGUgUlRUIHByZXNjYWxlciBhY2NvcmRpbmcgdG8gdGhlIFRpbWVCYXNlIGluIG1zDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUlRUU2V0VGltZUJhc2UoDQorICAgICAgICBBVDkxUFNfUlRUQyBwUlRUQywgDQorICAgICAgICB1bnNpZ25lZCBpbnQgbXMpDQogew0KLSAgICBwUGlvLT5QSU9fQVNSID0gcGVyaXBoQUVuYWJsZTsNCi0gICAgcFBpby0+UElPX0JTUiA9IHBlcmlwaEJFbmFibGU7DQotICAgIHBQaW8tPlBJT19QRFIgPSAoIHBlcmlwaEFFbmFibGUgfCBwZXJpcGhCRW5hYmxlICk7IC8qIFNldCBpbiBQZXJpcGggbW9kZSAqLw0KKwlpZiAobXMgPiAyMDAwKQ0KKwkJcmV0dXJuIDE7ICAgLy8gQVQ5MUNfVElNRV9PVVRfT0ZfUkFOR0UNCisJcFJUVEMtPlJUVENfUlRNUiAmPSB+MHhGRkZGOwkNCisJcFJUVEMtPlJUVENfUlRNUiB8PSAoKChtcyA8PCAxNSkgLzEwMDApICYgMHhGRkZGKTsJDQorCXJldHVybiAwOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fQ2ZnT3V0cHV0ICovDQotLyoqIFxicmllZiBFbmFibGUgUElPIGluIG91dHB1dCBtb2RlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUElPX0NmZ091dHB1dCggQVQ5MVBTX1BJTyBwUGlvLCAgICAgICAgIC8qIFxhcmcgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcGlvRW5hYmxlICkgLyogXGFyZyBQSU8gdG8gYmUgZW5hYmxlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICAgQVQ5MUZfUlRUU2V0UHJlc2NhbGVyKCkNCisvLyogXGJyaWVmICBTZXQgdGhlIG5ldyBwcmVzY2FsZXIgdmFsdWUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9SVFRTZXRQcmVzY2FsZXIoDQorICAgICAgICBBVDkxUFNfUlRUQyBwUlRUQywgDQorICAgICAgICB1bnNpZ25lZCBpbnQgcnRwcmVzKQ0KIHsNCi0gICAgcFBpby0+UElPX1BFUiA9IHBpb0VuYWJsZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZXQgaW4gUElPIG1vZGUgKi8NCi0gICAgcFBpby0+UElPX09FUiA9IHBpb0VuYWJsZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb25maWd1cmUgaW4gT3V0cHV0ICovDQorCXBSVFRDLT5SVFRDX1JUTVIgJj0gfjB4RkZGRjsJDQorCXBSVFRDLT5SVFRDX1JUTVIgfD0gKHJ0cHJlcyAmIDB4RkZGRik7CQ0KKwlyZXR1cm4gKHBSVFRDLT5SVFRDX1JUTVIpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fQ2ZnSW5wdXQgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBQSU8gaW4gaW5wdXQgbW9kZSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BJT19DZmdJbnB1dCggQVQ5MVBTX1BJTyBwUGlvLCAgICAgICAgICAgLyogXGFyZyBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGlucHV0RW5hYmxlICkgLyogXGFyZyBQSU8gdG8gYmUgZW5hYmxlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICAgQVQ5MUZfUlRUUmVzdGFydCgpDQorLy8qIFxicmllZiAgUmVzdGFydCB0aGUgUlRUIHByZXNjYWxlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9SVFRSZXN0YXJ0KA0KKyAgICAgICAgQVQ5MVBTX1JUVEMgcFJUVEMpDQogew0KLSAgICAvKiBEaXNhYmxlIG91dHB1dCAqLw0KLSAgICBwUGlvLT5QSU9fT0RSID0gaW5wdXRFbmFibGU7DQotICAgIHBQaW8tPlBJT19QRVIgPSBpbnB1dEVuYWJsZTsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX0NmZ09wZW5kcmFpbiAqLw0KLS8qKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBpbiBvcGVuIGRyYWluICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUElPX0NmZ09wZW5kcmFpbiggQVQ5MVBTX1BJTyBwUGlvLCAgICAgICAgICAgICAgLyogXGFyZyBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtdWx0aURydkVuYWJsZSApIC8qIFxhcmcgcGlvIHRvIGJlIGNvbmZpZ3VyZWQgaW4gb3BlbiBkcmFpbiAqLw0KLXsNCi0gICAgLyogQ29uZmlndXJlIHRoZSBtdWx0aS1kcml2ZSBvcHRpb24gKi8NCi0gICAgcFBpby0+UElPX01ERFIgPSB+bXVsdGlEcnZFbmFibGU7DQotICAgIHBQaW8tPlBJT19NREVSID0gbXVsdGlEcnZFbmFibGU7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19DZmdQdWxsdXAgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBwdWxsdXAgb24gUElPICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUElPX0NmZ1B1bGx1cCggQVQ5MVBTX1BJTyBwUGlvLCAgICAgICAgICAgIC8qIFxhcmcgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcHVsbHVwRW5hYmxlICkgLyogXGFyZyBlbmFibGUgcHVsbHVwIG9uIFBJTyAqLw0KLXsNCi0gICAgLyogQ29ubmVjdCBvciBub3QgUHVsbHVwICovDQotICAgIHBQaW8tPlBJT19QUFVEUiA9IH5wdWxsdXBFbmFibGU7DQotICAgIHBQaW8tPlBJT19QUFVFUiA9IHB1bGx1cEVuYWJsZTsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX0NmZ0RpcmVjdERyaXZlICovDQotLyoqIFxicmllZiBFbmFibGUgZGlyZWN0IGRyaXZlIG9uIFBJTyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BJT19DZmdEaXJlY3REcml2ZSggQVQ5MVBTX1BJTyBwUGlvLCAgICAgICAgICAgLyogXGFyZyBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGRpcmVjdERyaXZlICkgLyogXGFyZyBQSU8gdG8gYmUgY29uZmlndXJlZCB3aXRoIGRpcmVjdCBkcml2ZSAqLw0KLQ0KLXsNCi0gICAgLyogQ29uZmlndXJlIHRoZSBEaXJlY3QgRHJpdmUgKi8NCi0gICAgcFBpby0+UElPX09XRFIgPSB+ZGlyZWN0RHJpdmU7DQotICAgIHBQaW8tPlBJT19PV0VSID0gZGlyZWN0RHJpdmU7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19DZmdJbnB1dEZpbHRlciAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIGlucHV0IGZpbHRlciBvbiBpbnB1dCBQSU8gKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fQ2ZnSW5wdXRGaWx0ZXIoIEFUOTFQU19QSU8gcFBpbywgICAgICAgICAgIC8qIFxhcmcgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbnB1dEZpbHRlciApIC8qIFxhcmcgUElPIHRvIGJlIGNvbmZpZ3VyZWQgd2l0aCBpbnB1dCBmaWx0ZXIgKi8NCi0NCi17DQotICAgIC8qIENvbmZpZ3VyZSB0aGUgRGlyZWN0IERyaXZlICovDQotICAgIHBQaW8tPlBJT19JRkRSID0gfmlucHV0RmlsdGVyOw0KLSAgICBwUGlvLT5QSU9fSUZFUiA9IGlucHV0RmlsdGVyOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fR2V0SW5wdXQgKi8NCi0vKiogXGJyaWVmIFJldHVybiBQSU8gaW5wdXQgdmFsdWUgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJT19HZXRJbnB1dCggLyogXHJldHVybiBQSU8gaW5wdXQgKi8NCi0gICAgQVQ5MVBTX1BJTyBwUGlvICkgICAgICAgICAgICAgICAgICAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi17DQotICAgIHJldHVybiBwUGlvLT5QSU9fUERTUjsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX0lzSW5wdXRTZXQgKi8NCi0vKiogXGJyaWVmIFRlc3QgaWYgUElPIGlzIGlucHV0IGZsYWcgaXMgYWN0aXZlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIGludCBBVDkxRl9QSU9fSXNJbnB1dFNldCggQVQ5MVBTX1BJTyBwUGlvLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQgKi8NCi17DQotICAgIHJldHVybiggQVQ5MUZfUElPX0dldElucHV0KCBwUGlvICkgJiBmbGFnICk7DQorCXBSVFRDLT5SVFRDX1JUTVIgfD0gQVQ5MUNfUlRUQ19SVFRSU1Q7CQ0KIH0NCiANCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fU2V0T3V0cHV0ICovDQotLyoqIFxicmllZiBTZXQgdG8gMSBvdXRwdXQgUElPICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUElPX1NldE91dHB1dCggQVQ5MVBTX1BJTyBwUGlvLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgb3V0cHV0IHRvIGJlIHNldCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICAgQVQ5MUZfUlRUX1NldEFsYXJtSU5UKCkNCisvLyogXGJyaWVmICBFbmFibGUgUlRUIEFsYXJtIEludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9SVFRTZXRBbGFybUlOVCgNCisgICAgICAgIEFUOTFQU19SVFRDIHBSVFRDKQ0KIHsNCi0gICAgcFBpby0+UElPX1NPRFIgPSBmbGFnOw0KKwlwUlRUQy0+UlRUQ19SVE1SIHw9IEFUOTFDX1JUVENfQUxNSUVOOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fQ2xlYXJPdXRwdXQgKi8NCi0vKiogXGJyaWVmIFNldCB0byAwIG91dHB1dCBQSU8gKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fQ2xlYXJPdXRwdXQoIEFUOTFQU19QSU8gcFBpbywgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgb3V0cHV0IHRvIGJlIGNsZWFyZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgIEFUOTFGX1JUVF9DbGVhckFsYXJtSU5UKCkNCisvLyogXGJyaWVmICBEaXNhYmxlIFJUVCBBbGFybSBJbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUlRUQ2xlYXJBbGFybUlOVCgNCisgICAgICAgIEFUOTFQU19SVFRDIHBSVFRDKQ0KIHsNCi0gICAgcFBpby0+UElPX0NPRFIgPSBmbGFnOw0KKwlwUlRUQy0+UlRUQ19SVE1SICY9IH5BVDkxQ19SVFRDX0FMTUlFTjsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX0ZvcmNlT3V0cHV0ICovDQotLyoqIFxicmllZiBGb3JjZSBvdXRwdXQgd2hlbiBEaXJlY3QgZHJpdmUgb3B0aW9uIGlzIGVuYWJsZWQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fRm9yY2VPdXRwdXQoIEFUOTFQU19QSU8gcFBpbywgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgb3V0cHV0IHRvIGJlIGZvcmNlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICAgQVQ5MUZfUlRUX1NldFJ0dEluY0lOVCgpDQorLy8qIFxicmllZiAgRW5hYmxlIFJUVCBJTkMgSW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1JUVFNldFJ0dEluY0lOVCgNCisgICAgICAgIEFUOTFQU19SVFRDIHBSVFRDKQ0KIHsNCi0gICAgcFBpby0+UElPX09EU1IgPSBmbGFnOw0KKwlwUlRUQy0+UlRUQ19SVE1SIHw9IEFUOTFDX1JUVENfUlRUSU5DSUVOOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fRW5hYmxlICovDQotLyoqIFxicmllZiBFbmFibGUgUElPICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUElPX0VuYWJsZSggQVQ5MVBTX1BJTyBwUGlvLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgcGlvIHRvIGJlIGVuYWJsZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgIEFUOTFGX1JUVF9DbGVhclJ0dEluY0lOVCgpDQorLy8qIFxicmllZiAgRGlzYWJsZSBSVFQgSU5DIEludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9SVFRDbGVhclJ0dEluY0lOVCgNCisgICAgICAgIEFUOTFQU19SVFRDIHBSVFRDKQ0KIHsNCi0gICAgcFBpby0+UElPX1BFUiA9IGZsYWc7DQorCXBSVFRDLT5SVFRDX1JUTVIgJj0gfkFUOTFDX1JUVENfUlRUSU5DSUVOOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fRGlzYWJsZSAqLw0KLS8qKiBcYnJpZWYgRGlzYWJsZSBQSU8gKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fRGlzYWJsZSggQVQ5MVBTX1BJTyBwUGlvLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIHBpbyB0byBiZSBkaXNhYmxlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICAgQVQ5MUZfUlRUX1NldEFsYXJtVmFsdWUoKQ0KKy8vKiBcYnJpZWYgIFNldCBSVFQgQWxhcm0gVmFsdWUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUlRUU2V0QWxhcm1WYWx1ZSgNCisgICAgICAgIEFUOTFQU19SVFRDIHBSVFRDLCB1bnNpZ25lZCBpbnQgYWxhcm0pDQogew0KLSAgICBwUGlvLT5QSU9fUERSID0gZmxhZzsNCisJcFJUVEMtPlJUVENfUlRBUiA9IGFsYXJtOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fR2V0U3RhdHVzICovDQotLyoqIFxicmllZiBSZXR1cm4gUElPIFN0YXR1cyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElPX0dldFN0YXR1cyggLyogXHJldHVybiBQSU8gU3RhdHVzICovDQotICAgIEFUOTFQU19QSU8gcFBpbyApICAgICAgICAgICAgICAgICAgICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICAgQVQ5MUZfUlRUX0dldEFsYXJtVmFsdWUoKQ0KKy8vKiBcYnJpZWYgIEdldCBSVFQgQWxhcm0gVmFsdWUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9SVFRHZXRBbGFybVZhbHVlKA0KKyAgICAgICAgQVQ5MVBTX1JUVEMgcFJUVEMpDQogew0KLSAgICByZXR1cm4gcFBpby0+UElPX1BTUjsNCisJcmV0dXJuKHBSVFRDLT5SVFRDX1JUQVIpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fSXNTZXQgKi8NCi0vKiogXGJyaWVmIFRlc3QgaWYgUElPIGlzIFNldCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSBpbnQgQVQ5MUZfUElPX0lzU2V0KCBBVDkxUFNfUElPIHBQaW8sICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgIEFUOTFGX1JUVEdldFN0YXR1cygpDQorLy8qIFxicmllZiAgUmVhZCB0aGUgUlRUIHN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1JUVEdldFN0YXR1cygNCisgICAgICAgIEFUOTFQU19SVFRDIHBSVFRDKQ0KIHsNCi0gICAgcmV0dXJuKCBBVDkxRl9QSU9fR2V0U3RhdHVzKCBwUGlvICkgJiBmbGFnICk7DQorCXJldHVybihwUlRUQy0+UlRUQ19SVFNSKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX091dHB1dEVuYWJsZSAqLw0KLS8qKiBcYnJpZWYgT3V0cHV0IEVuYWJsZSBQSU8gKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fT3V0cHV0RW5hYmxlKCBBVDkxUFNfUElPIHBQaW8sICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBwaW8gb3V0cHV0IHRvIGJlIGVuYWJsZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgIEFUOTFGX1JUVF9SZWFkVmFsdWUoKQ0KKy8vKiBcYnJpZWYgIFJlYWQgdGhlIFJUVCB2YWx1ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1JUVFJlYWRWYWx1ZSgNCisgICAgICAgIEFUOTFQU19SVFRDIHBSVFRDKQ0KIHsNCi0gICAgcFBpby0+UElPX09FUiA9IGZsYWc7DQorICAgICAgICByZWdpc3RlciB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgdmFsMSx2YWwyOw0KKwlkbw0KKwl7DQorCQl2YWwxID0gcFJUVEMtPlJUVENfUlRWUjsNCisJCXZhbDIgPSBwUlRUQy0+UlRUQ19SVFZSOw0KKwl9CQ0KKwl3aGlsZSh2YWwxICE9IHZhbDIpOw0KKwlyZXR1cm4odmFsMSk7DQogfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19PdXRwdXREaXNhYmxlICovDQotLyoqIFxicmllZiBPdXRwdXQgRW5hYmxlIFBJTyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BJT19PdXRwdXREaXNhYmxlKCBBVDkxUFNfUElPIHBQaW8sICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgcGlvIG91dHB1dCB0byBiZSBkaXNhYmxlZCAqLw0KLXsNCi0gICAgcFBpby0+UElPX09EUiA9IGZsYWc7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19HZXRPdXRwdXRTdGF0dXMgKi8NCi0vKiogXGJyaWVmIFJldHVybiBQSU8gT3V0cHV0IFN0YXR1cyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElPX0dldE91dHB1dFN0YXR1cyggLyogXHJldHVybiBQSU8gT3V0cHV0IFN0YXR1cyAqLw0KLSAgICBBVDkxUFNfUElPIHBQaW8gKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi17DQotICAgIHJldHVybiBwUGlvLT5QSU9fT1NSOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fSXNPdXB1dFNldCAqLw0KLS8qKiBcYnJpZWYgVGVzdCBpZiBQSU8gT3V0cHV0IGlzIFNldCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSBpbnQgQVQ5MUZfUElPX0lzT3V0cHV0U2V0KCBBVDkxUFNfUElPIHBQaW8sICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQgKi8NCi17DQotICAgIHJldHVybiggQVQ5MUZfUElPX0dldE91dHB1dFN0YXR1cyggcFBpbyApICYgZmxhZyApOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fSW5wdXRGaWx0ZXJFbmFibGUgKi8NCi0vKiogXGJyaWVmIElucHV0IEZpbHRlciBFbmFibGUgUElPICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUElPX0lucHV0RmlsdGVyRW5hYmxlKCBBVDkxUFNfUElPIHBQaW8sICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIHBpbyBpbnB1dCBmaWx0ZXIgdG8gYmUgZW5hYmxlZCAqLw0KLXsNCi0gICAgcFBpby0+UElPX0lGRVIgPSBmbGFnOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fSW5wdXRGaWx0ZXJEaXNhYmxlICovDQotLyoqIFxicmllZiBJbnB1dCBGaWx0ZXIgRGlzYWJsZSBQSU8gKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fSW5wdXRGaWx0ZXJEaXNhYmxlKCBBVDkxUFNfUElPIHBQaW8sICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBwaW8gaW5wdXQgZmlsdGVyIHRvIGJlIGRpc2FibGVkICovDQotew0KLSAgICBwUGlvLT5QSU9fSUZEUiA9IGZsYWc7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19HZXRJbnB1dEZpbHRlclN0YXR1cyAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIFBJTyBJbnB1dCBGaWx0ZXIgU3RhdHVzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSU9fR2V0SW5wdXRGaWx0ZXJTdGF0dXMoIC8qIFxyZXR1cm4gUElPIElucHV0IEZpbHRlciBTdGF0dXMgKi8NCi0gICAgQVQ5MVBTX1BJTyBwUGlvICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi17DQotICAgIHJldHVybiBwUGlvLT5QSU9fSUZTUjsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX0lzSW5wdXRGaWx0ZXJTZXQgKi8NCi0vKiogXGJyaWVmIFRlc3QgaWYgUElPIElucHV0IGZpbHRlciBpcyBTZXQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgaW50IEFUOTFGX1BJT19Jc0lucHV0RmlsdGVyU2V0KCBBVDkxUFNfUElPIHBQaW8sICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZCAqLw0KLXsNCi0gICAgcmV0dXJuKCBBVDkxRl9QSU9fR2V0SW5wdXRGaWx0ZXJTdGF0dXMoIHBQaW8gKSAmIGZsYWcgKTsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX0dldE91dHB1dERhdGFTdGF0dXMgKi8NCi0vKiogXGJyaWVmIFJldHVybiBQSU8gT3V0cHV0IERhdGEgU3RhdHVzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSU9fR2V0T3V0cHV0RGF0YVN0YXR1cyggLyogXHJldHVybiBQSU8gT3V0cHV0IERhdGEgU3RhdHVzICovDQotICAgIEFUOTFQU19QSU8gcFBpbyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi17DQotICAgIHJldHVybiBwUGlvLT5QSU9fT0RTUjsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX0ludGVycnVwdEVuYWJsZSAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIFBJTyBJbnRlcnJ1cHQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fSW50ZXJydXB0RW5hYmxlKCBBVDkxUFNfUElPIHBQaW8sICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBwaW8gaW50ZXJydXB0IHRvIGJlIGVuYWJsZWQgKi8NCi17DQotICAgIHBQaW8tPlBJT19JRVIgPSBmbGFnOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fSW50ZXJydXB0RGlzYWJsZSAqLw0KLS8qKiBcYnJpZWYgRGlzYWJsZSBQSU8gSW50ZXJydXB0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUElPX0ludGVycnVwdERpc2FibGUoIEFUOTFQU19QSU8gcFBpbywgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBwaW8gaW50ZXJydXB0IHRvIGJlIGRpc2FibGVkICovDQotew0KLSAgICBwUGlvLT5QSU9fSURSID0gZmxhZzsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX0dldEludGVycnVwdE1hc2tTdGF0dXMgKi8NCi0vKiogXGJyaWVmIFJldHVybiBQSU8gSW50ZXJydXB0IE1hc2sgU3RhdHVzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSU9fR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLyogXHJldHVybiBQSU8gSW50ZXJydXB0IE1hc2sgU3RhdHVzICovDQotICAgIEFUOTFQU19QSU8gcFBpbyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi17DQotICAgIHJldHVybiBwUGlvLT5QSU9fSU1SOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fR2V0SW50ZXJydXB0U3RhdHVzICovDQotLyoqIFxicmllZiBSZXR1cm4gUElPIEludGVycnVwdCBTdGF0dXMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJT19HZXRJbnRlcnJ1cHRTdGF0dXMoIC8qIFxyZXR1cm4gUElPIEludGVycnVwdCBTdGF0dXMgKi8NCi0gICAgQVQ5MVBTX1BJTyBwUGlvICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyICovDQotew0KLSAgICByZXR1cm4gcFBpby0+UElPX0lTUjsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX0lzSW50ZXJydXB0TWFza2VkICovDQotLyoqIFxicmllZiBUZXN0IGlmIFBJTyBJbnRlcnJ1cHQgaXMgTWFza2VkICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIGludCBBVDkxRl9QSU9fSXNJbnRlcnJ1cHRNYXNrZWQoIEFUOTFQU19QSU8gcFBpbywgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZCAqLw0KLXsNCi0gICAgcmV0dXJuKCBBVDkxRl9QSU9fR2V0SW50ZXJydXB0TWFza1N0YXR1cyggcFBpbyApICYgZmxhZyApOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fSXNJbnRlcnJ1cHRTZXQgKi8NCi0vKiogXGJyaWVmIFRlc3QgaWYgUElPIEludGVycnVwdCBpcyBTZXQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgaW50IEFUOTFGX1BJT19Jc0ludGVycnVwdFNldCggQVQ5MVBTX1BJTyBwUGlvLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkICovDQotew0KLSAgICByZXR1cm4oIEFUOTFGX1BJT19HZXRJbnRlcnJ1cHRTdGF0dXMoIHBQaW8gKSAmIGZsYWcgKTsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX011bHRpRHJpdmVyRW5hYmxlICovDQotLyoqIFxicmllZiBNdWx0aSBEcml2ZXIgRW5hYmxlIFBJTyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BJT19NdWx0aURyaXZlckVuYWJsZSggQVQ5MVBTX1BJTyBwUGlvLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBwaW8gdG8gYmUgZW5hYmxlZCAqLw0KLXsNCi0gICAgcFBpby0+UElPX01ERVIgPSBmbGFnOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fTXVsdGlEcml2ZXJEaXNhYmxlICovDQotLyoqIFxicmllZiBNdWx0aSBEcml2ZXIgRGlzYWJsZSBQSU8gKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fTXVsdGlEcml2ZXJEaXNhYmxlKCBBVDkxUFNfUElPIHBQaW8sICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBwaW8gdG8gYmUgZGlzYWJsZWQgKi8NCi17DQotICAgIHBQaW8tPlBJT19NRERSID0gZmxhZzsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX0dldE11bHRpRHJpdmVyU3RhdHVzICovDQotLyoqIFxicmllZiBSZXR1cm4gUElPIE11bHRpIERyaXZlciBTdGF0dXMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJT19HZXRNdWx0aURyaXZlclN0YXR1cyggLyogXHJldHVybiBQSU8gTXVsdGkgRHJpdmVyIFN0YXR1cyAqLw0KLSAgICBBVDkxUFNfUElPIHBQaW8gKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLXsNCi0gICAgcmV0dXJuIHBQaW8tPlBJT19NRFNSOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fSXNNdWx0aURyaXZlclNldCAqLw0KLS8qKiBcYnJpZWYgVGVzdCBpZiBQSU8gTXVsdGlEcml2ZXIgaXMgU2V0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIGludCBBVDkxRl9QSU9fSXNNdWx0aURyaXZlclNldCggQVQ5MVBTX1BJTyBwUGlvLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQgKi8NCi17DQotICAgIHJldHVybiggQVQ5MUZfUElPX0dldE11bHRpRHJpdmVyU3RhdHVzKCBwUGlvICkgJiBmbGFnICk7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19BX1JlZ2lzdGVyU2VsZWN0aW9uICovDQotLyoqIFxicmllZiBQSU8gQSBSZWdpc3RlciBTZWxlY3Rpb24gKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fQV9SZWdpc3RlclNlbGVjdGlvbiggQVQ5MVBTX1BJTyBwUGlvLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIHBpbyBBIHJlZ2lzdGVyIHNlbGVjdGlvbiAqLw0KLXsNCi0gICAgcFBpby0+UElPX0FTUiA9IGZsYWc7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19CX1JlZ2lzdGVyU2VsZWN0aW9uICovDQotLyoqIFxicmllZiBQSU8gQiBSZWdpc3RlciBTZWxlY3Rpb24gKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fQl9SZWdpc3RlclNlbGVjdGlvbiggQVQ5MVBTX1BJTyBwUGlvLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIHBpbyBCIHJlZ2lzdGVyIHNlbGVjdGlvbiAqLw0KLXsNCi0gICAgcFBpby0+UElPX0JTUiA9IGZsYWc7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19HZXRfQUJfUmVnaXN0ZXJTdGF0dXMgKi8NCi0vKiogXGJyaWVmIFJldHVybiBQSU8gSW50ZXJydXB0IFN0YXR1cyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElPX0dldF9BQl9SZWdpc3RlclN0YXR1cyggLyogXHJldHVybiBQSU8gQUIgUmVnaXN0ZXIgU3RhdHVzICovDQotICAgIEFUOTFQU19QSU8gcFBpbyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLXsNCi0gICAgcmV0dXJuIHBQaW8tPlBJT19BQlNSOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fSXNBQl9SZWdpc3RlclNldCAqLw0KLS8qKiBcYnJpZWYgVGVzdCBpZiBQSU8gQUIgUmVnaXN0ZXIgaXMgU2V0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIGludCBBVDkxRl9QSU9fSXNBQl9SZWdpc3RlclNldCggQVQ5MVBTX1BJTyBwUGlvLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQgKi8NCi17DQotICAgIHJldHVybiggQVQ5MUZfUElPX0dldF9BQl9SZWdpc3RlclN0YXR1cyggcFBpbyApICYgZmxhZyApOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fT3V0cHV0V3JpdGVFbmFibGUgKi8NCi0vKiogXGJyaWVmIE91dHB1dCBXcml0ZSBFbmFibGUgUElPICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUElPX091dHB1dFdyaXRlRW5hYmxlKCBBVDkxUFNfUElPIHBQaW8sICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIHBpbyBvdXRwdXQgd3JpdGUgdG8gYmUgZW5hYmxlZCAqLw0KLXsNCi0gICAgcFBpby0+UElPX09XRVIgPSBmbGFnOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fT3V0cHV0V3JpdGVEaXNhYmxlICovDQotLyoqIFxicmllZiBPdXRwdXQgV3JpdGUgRGlzYWJsZSBQSU8gKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fT3V0cHV0V3JpdGVEaXNhYmxlKCBBVDkxUFNfUElPIHBQaW8sICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBwaW8gb3V0cHV0IHdyaXRlIHRvIGJlIGRpc2FibGVkICovDQotew0KLSAgICBwUGlvLT5QSU9fT1dEUiA9IGZsYWc7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19HZXRPdXRwdXRXcml0ZVN0YXR1cyAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIFBJTyBPdXRwdXQgV3JpdGUgU3RhdHVzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSU9fR2V0T3V0cHV0V3JpdGVTdGF0dXMoIC8qIFxyZXR1cm4gUElPIE91dHB1dCBXcml0ZSBTdGF0dXMgKi8NCi0gICAgQVQ5MVBTX1BJTyBwUGlvICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi17DQotICAgIHJldHVybiBwUGlvLT5QSU9fT1dTUjsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX0lzT3V0cHV0V3JpdGVTZXQgKi8NCi0vKiogXGJyaWVmIFRlc3QgaWYgUElPIE91dHB1dFdyaXRlIGlzIFNldCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSBpbnQgQVQ5MUZfUElPX0lzT3V0cHV0V3JpdGVTZXQoIEFUOTFQU19QSU8gcFBpbywgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkICovDQotew0KLSAgICByZXR1cm4oIEFUOTFGX1BJT19HZXRPdXRwdXRXcml0ZVN0YXR1cyggcFBpbyApICYgZmxhZyApOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fR2V0Q2ZnUHVsbHVwICovDQotLyoqIFxicmllZiBSZXR1cm4gUElPIENvbmZpZ3VyYXRpb24gUHVsbHVwICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSU9fR2V0Q2ZnUHVsbHVwKCAvKiBccmV0dXJuIFBJTyBDb25maWd1cmF0aW9uIFB1bGx1cCAqLw0KLSAgICBBVDkxUFNfUElPIHBQaW8gKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi17DQotICAgIHJldHVybiBwUGlvLT5QSU9fUFBVU1I7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19Jc091dHB1dERhdGFTdGF0dXNTZXQgKi8NCi0vKiogXGJyaWVmIFRlc3QgaWYgUElPIE91dHB1dCBEYXRhIFN0YXR1cyBpcyBTZXQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgaW50IEFUOTFGX1BJT19Jc091dHB1dERhdGFTdGF0dXNTZXQoIEFUOTFQU19QSU8gcFBpbywgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQgKi8NCi17DQotICAgIHJldHVybiggQVQ5MUZfUElPX0dldE91dHB1dERhdGFTdGF0dXMoIHBQaW8gKSAmIGZsYWcgKTsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX0lzQ2ZnUHVsbHVwU3RhdHVzU2V0ICovDQotLyoqIFxicmllZiBUZXN0IGlmIFBJTyBDb25maWd1cmF0aW9uIFB1bGx1cCBTdGF0dXMgaXMgU2V0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIGludCBBVDkxRl9QSU9fSXNDZmdQdWxsdXBTdGF0dXNTZXQoIEFUOTFQU19QSU8gcFBpbywgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZCAqLw0KLXsNCi0gICAgcmV0dXJuKCB+QVQ5MUZfUElPX0dldENmZ1B1bGx1cCggcFBpbyApICYgZmxhZyApOw0KLX0NCi0NCiAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSogICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFBNQw0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUE1DX0NmZ1N5c0Nsa0VuYWJsZVJlZyAqLw0KLS8qKiBcYnJpZWYgQ29uZmlndXJlIHRoZSBTeXN0ZW0gQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyIG9mIHRoZSBQTUMgY29udHJvbGxlciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BNQ19DZmdTeXNDbGtFbmFibGVSZWcoIEFUOTFQU19QTUMgcFBNQywgLyogXGFyZyBwb2ludGVyIHRvIFBNQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbW9kZSApDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgUElUQw0KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElUSW5pdA0KKy8vKiBcYnJpZWYgU3lzdGVtIHRpbWVyIGluaXQgOiBwZXJpb2QgaW4gtXNlY29uZCwgc3lzdGVtIGNsb2NrIGZyZXEgaW4gTUh6DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElUSW5pdCgNCisgICAgICAgIEFUOTFQU19QSVRDIHBQSVRDLA0KKyAgICAgICAgdW5zaWduZWQgaW50IHBlcmlvZCwNCisgICAgICAgIHVuc2lnbmVkIGludCBwaXRfZnJlcXVlbmN5KQ0KIHsNCi0gICAgLyoqIFdyaXRlIHRvIHRoZSBTQ0VSIHJlZ2lzdGVyICovDQotICAgIHBQTUMtPlBNQ19TQ0VSID0gbW9kZTsNCisJcFBJVEMtPlBJVENfUElNUiA9IHBlcmlvZD8gKHBlcmlvZCAqIHBpdF9mcmVxdWVuY3kgKyA4KSA+PiA0IDogMDsgLy8gKzggdG8gYXZvaWQgJTEwIGFuZCAvMTANCisJcFBJVEMtPlBJVENfUElNUiB8PSBBVDkxQ19QSVRDX1BJVEVOOwkgDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BNQ19DZmdTeXNDbGtEaXNhYmxlUmVnICovDQotLyoqIFxicmllZiBDb25maWd1cmUgdGhlIFN5c3RlbSBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyIG9mIHRoZSBQTUMgY29udHJvbGxlciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BNQ19DZmdTeXNDbGtEaXNhYmxlUmVnKCBBVDkxUFNfUE1DIHBQTUMsIC8qIFxhcmcgcG9pbnRlciB0byBQTUMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtb2RlICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSVRTZXRQSVYNCisvLyogXGJyaWVmIFNldCB0aGUgUElUIFBlcmlvZGljIEludGVydmFsIFZhbHVlIA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJVFNldFBJVigNCisgICAgICAgIEFUOTFQU19QSVRDIHBQSVRDLA0KKyAgICAgICAgdW5zaWduZWQgaW50IHBpdikNCiB7DQotICAgIC8qKiBXcml0ZSB0byB0aGUgU0NEUiByZWdpc3RlciAqLw0KLSAgICBwUE1DLT5QTUNfU0NEUiA9IG1vZGU7DQorCXBQSVRDLT5QSVRDX1BJTVIgPSBwaXYgfCAocFBJVEMtPlBJVENfUElNUiAmIChBVDkxQ19QSVRDX1BJVEVOIHwgQVQ5MUNfUElUQ19QSVRJRU4pKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUE1DX0dldFN5c0Nsa1N0YXR1c1JlZyAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIHRoZSBTeXN0ZW0gQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyIG9mIHRoZSBQTUMgY29udHJvbGxlciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUE1DX0dldFN5c0Nsa1N0YXR1c1JlZyggQVQ5MVBTX1BNQyBwUE1DIC8qIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElURW5hYmxlSW50DQorLy8qIFxicmllZiBFbmFibGUgUElUIHBlcmlvZGljIGludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJVEVuYWJsZUludCgNCisgICAgICAgIEFUOTFQU19QSVRDIHBQSVRDKQ0KIHsNCi0gICAgcmV0dXJuIHBQTUMtPlBNQ19TQ1NSOw0KKwlwUElUQy0+UElUQ19QSU1SIHw9IEFUOTFDX1BJVENfUElUSUVOOwkgDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jayAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIHBlcmlwaGVyYWwgY2xvY2sgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soIEFUOTFQU19QTUMgcFBNQywgICAgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gUE1DIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHBlcmlwaElkcyApIC8qIFxhcmcgSURzIG9mIHBlcmlwaGVyYWxzIHRvIGVuYWJsZSAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJVERpc2FibGVJbnQNCisvLyogXGJyaWVmIERpc2FibGUgUElUIHBlcmlvZGljIGludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJVERpc2FibGVJbnQoDQorICAgICAgICBBVDkxUFNfUElUQyBwUElUQykNCiB7DQotICAgIHBQTUMtPlBNQ19QQ0VSID0gcGVyaXBoSWRzOw0KKwlwUElUQy0+UElUQ19QSU1SICY9IH5BVDkxQ19QSVRDX1BJVElFTjsJIA0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QTUNfRGlzYWJsZVBlcmlwaENsb2NrICovDQotLyoqIFxicmllZiBEaXNhYmxlIHBlcmlwaGVyYWwgY2xvY2sgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QTUNfRGlzYWJsZVBlcmlwaENsb2NrKCBBVDkxUFNfUE1DIHBQTUMsICAgICAgICAgLyogXGFyZyBwb2ludGVyIHRvIFBNQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcGVyaXBoSWRzICkgLyogXGFyZyBJRHMgb2YgcGVyaXBoZXJhbHMgdG8gZW5hYmxlICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElUR2V0TW9kZQ0KKy8vKiBcYnJpZWYgUmVhZCBQSVQgbW9kZSByZWdpc3Rlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElUR2V0TW9kZSgNCisgICAgICAgIEFUOTFQU19QSVRDIHBQSVRDKQ0KIHsNCi0gICAgcFBNQy0+UE1DX1BDRFIgPSBwZXJpcGhJZHM7DQorCXJldHVybihwUElUQy0+UElUQ19QSU1SKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUE1DX0dldFBlcmlwaENsb2NrICovDQotLyoqIFxicmllZiBHZXQgcGVyaXBoZXJhbCBjbG9jayBzdGF0dXMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BNQ19HZXRQZXJpcGhDbG9jayggQVQ5MVBTX1BNQyBwUE1DICkgLyogXGFyZyBwb2ludGVyIHRvIFBNQyBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElUR2V0U3RhdHVzDQorLy8qIFxicmllZiBSZWFkIFBJVCBzdGF0dXMgcmVnaXN0ZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJVEdldFN0YXR1cygNCisgICAgICAgIEFUOTFQU19QSVRDIHBQSVRDKQ0KIHsNCi0gICAgcmV0dXJuIHBQTUMtPlBNQ19QQ1NSOw0KKwlyZXR1cm4ocFBJVEMtPlBJVENfUElTUik7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0NLR1JfQ2ZnTWFpbk9zY2lsbGF0b3JSZWcgKi8NCi0vKiogXGJyaWVmIENmZyB0aGUgbWFpbiBvc2NpbGxhdG9yICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQ0tHUl9DZmdNYWluT3NjaWxsYXRvclJlZyggQVQ5MVBTX0NLR1IgcENLR1IsIC8qIFxhcmcgcG9pbnRlciB0byBDS0dSIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtb2RlICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSVRHZXRQSUlSDQorLy8qIFxicmllZiBSZWFkIFBJVCBDUElWIGFuZCBQSUNOVCB3aXRob3V0IHJlc3NldHRpbmcgdGhlIGNvdW50ZXJzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSVRHZXRQSUlSKA0KKyAgICAgICAgQVQ5MVBTX1BJVEMgcFBJVEMpDQogew0KLSAgICBwQ0tHUi0+Q0tHUl9NT1IgPSBtb2RlOw0KKwlyZXR1cm4ocFBJVEMtPlBJVENfUElJUik7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0NLR1JfR2V0TWFpbk9zY2lsbGF0b3JSZWcgKi8NCi0vKiogXGJyaWVmIENmZyB0aGUgbWFpbiBvc2NpbGxhdG9yICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DS0dSX0dldE1haW5Pc2NpbGxhdG9yUmVnKCBBVDkxUFNfQ0tHUiBwQ0tHUiApIC8qIFxhcmcgcG9pbnRlciB0byBDS0dSIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSVRHZXRQSVZSDQorLy8qIFxicmllZiBSZWFkIFN5c3RlbSB0aW1lciBDUElWIGFuZCBQSUNOVCB3aXRob3V0IHJlc3NldHRpbmcgdGhlIGNvdW50ZXJzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSVRHZXRQSVZSKA0KKyAgICAgICAgQVQ5MVBTX1BJVEMgcFBJVEMpDQogew0KLSAgICByZXR1cm4gcENLR1ItPkNLR1JfTU9SOw0KKwlyZXR1cm4ocFBJVEMtPlBJVENfUElWUik7DQogfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0NLR1JfRW5hYmxlTWFpbk9zY2lsbGF0b3IgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSB0aGUgbWFpbiBvc2NpbGxhdG9yICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQ0tHUl9FbmFibGVNYWluT3NjaWxsYXRvciggQVQ5MVBTX0NLR1IgcENLR1IgKSAvKiBcYXJnIHBvaW50ZXIgdG8gQ0tHUiBjb250cm9sbGVyICovDQotew0KLSAgICBwQ0tHUi0+Q0tHUl9NT1IgfD0gQVQ5MUNfQ0tHUl9NT1NDRU47DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0NLR1JfRGlzYWJsZU1haW5Pc2NpbGxhdG9yICovDQotLyoqIFxicmllZiBEaXNhYmxlIHRoZSBtYWluIG9zY2lsbGF0b3IgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9DS0dSX0Rpc2FibGVNYWluT3NjaWxsYXRvciggQVQ5MVBTX0NLR1IgcENLR1IgKSAvKiBcYXJnIHBvaW50ZXIgdG8gQ0tHUiBjb250cm9sbGVyICovDQotew0KLSAgICBwQ0tHUi0+Q0tHUl9NT1IgJj0gfkFUOTFDX0NLR1JfTU9TQ0VOOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9DS0dSX0NmZ01haW5Pc2NTdGFydFVwVGltZSAqLw0KLS8qKiBcYnJpZWYgQ2ZnIE1PUiBSZWdpc3RlciBhY2NvcmRpbmcgdG8gdGhlIG1haW4gb3NjIHN0YXJ0dXAgdGltZSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0NLR1JfQ2ZnTWFpbk9zY1N0YXJ0VXBUaW1lKCBBVDkxUFNfQ0tHUiBwQ0tHUiwgICAgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gQ0tHUiBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHN0YXJ0dXBfdGltZSwgLyogXGFyZyBtYWluIG9zYyBzdGFydHVwIHRpbWUgaW4gbWljcm9zZWNvbmQgKHVzKSAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzbG93Q2xvY2sgKSAgIC8qIFxhcmcgc2xvd0Nsb2NrIGluIEh6ICovDQotew0KLSAgICBwQ0tHUi0+Q0tHUl9NT1IgJj0gfkFUOTFDX0NLR1JfT1NDT1VOVDsNCi0gICAgcENLR1ItPkNLR1JfTU9SIHw9ICggKCBzbG93Q2xvY2sgKiBzdGFydHVwX3RpbWUgKSAvICggOCAqIDEwMDAwMDAgKSApIDw8IDg7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0NLR1JfR2V0TWFpbkNsb2NrRnJlcVJlZyAqLw0KLS8qKiBcYnJpZWYgQ2ZnIHRoZSBtYWluIG9zY2lsbGF0b3IgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NLR1JfR2V0TWFpbkNsb2NrRnJlcVJlZyggQVQ5MVBTX0NLR1IgcENLR1IgKSAvKiBcYXJnIHBvaW50ZXIgdG8gQ0tHUiBjb250cm9sbGVyICovDQotew0KLSAgICByZXR1cm4gcENLR1ItPkNLR1JfTUNGUjsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQ0tHUl9HZXRNYWluQ2xvY2sgKi8NCi0vKiogXGJyaWVmIFJldHVybiBNYWluIGNsb2NrIGluIEh6ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DS0dSX0dldE1haW5DbG9jayggQVQ5MVBTX0NLR1IgcENLR1IsICAgICAgIC8qIFxhcmcgcG9pbnRlciB0byBDS0dSIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzbG93Q2xvY2sgKSAvKiBcYXJnIHNsb3dDbG9jayBpbiBIeiAqLw0KLXsNCi0gICAgcmV0dXJuICggKCBwQ0tHUi0+Q0tHUl9NQ0ZSICYgQVQ5MUNfQ0tHUl9NQUlORiApICogc2xvd0Nsb2NrICkgPj4gNDsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUE1DX0NmZ01DS1JlZyAqLw0KLS8qKiBcYnJpZWYgQ2ZnIE1hc3RlciBDbG9jayBSZWdpc3RlciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BNQ19DZmdNQ0tSZWcoIEFUOTFQU19QTUMgcFBNQywgLyogXGFyZyBwb2ludGVyIHRvIFBNQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbW9kZSApDQotew0KLSAgICBwUE1DLT5QTUNfTUNLUiA9IG1vZGU7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BNQ19HZXRNQ0tSZWcgKi8NCi0vKiogXGJyaWVmIFJldHVybiBNYXN0ZXIgQ2xvY2sgUmVnaXN0ZXIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BNQ19HZXRNQ0tSZWcoIEFUOTFQU19QTUMgcFBNQyApIC8qIFxhcmcgcG9pbnRlciB0byBQTUMgY29udHJvbGxlciAqLw0KLXsNCi0gICAgcmV0dXJuIHBQTUMtPlBNQ19NQ0tSOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BNQ19HZXRNYXN0ZXJDbG9jayAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIG1hc3RlciBjbG9jayBpbiBIeiB3aGljaCBjb3JyZXBvbmRzIHRvIHByb2Nlc3NvciBjbG9jayBmb3IgQVJNNyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QTUNfR2V0TWFzdGVyQ2xvY2soIEFUOTFQU19QTUMgcFBNQywgICAgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gUE1DIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxUFNfQ0tHUiBwQ0tHUiwgICAgICAgLyogXGFyZyBwb2ludGVyIHRvIENLR1IgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzbG93Q2xvY2sgKSAvKiBcYXJnIHNsb3dDbG9jayBpbiBIeiAqLw0KLXsNCi0gICAgdW5zaWduZWQgaW50IHJlZyA9IHBQTUMtPlBNQ19NQ0tSOw0KLSAgICB1bnNpZ25lZCBpbnQgcHJlc2NhbGVyID0gKCAxIDw8ICggKCByZWcgJiBBVDkxQ19QTUNfUFJFUyApID4+IDIgKSApOw0KLSAgICB1bnNpZ25lZCBpbnQgcGxsRGl2aWRlciwgcGxsTXVsdGlwbGllcjsNCi0NCi0gICAgc3dpdGNoKCByZWcgJiBBVDkxQ19QTUNfQ1NTICkNCi0gICAgew0KLSAgICAgICAgY2FzZSBBVDkxQ19QTUNfQ1NTX1NMT1dfQ0xLOiAvKiBTbG93IGNsb2NrIHNlbGVjdGVkICovDQotICAgICAgICAgICAgcmV0dXJuIHNsb3dDbG9jayAvIHByZXNjYWxlcjsNCi0NCi0gICAgICAgIGNhc2UgQVQ5MUNfUE1DX0NTU19NQUlOX0NMSzogLyogTWFpbiBjbG9jayBpcyBzZWxlY3RlZCAqLw0KLSAgICAgICAgICAgIHJldHVybiBBVDkxRl9DS0dSX0dldE1haW5DbG9jayggcENLR1IsIHNsb3dDbG9jayApIC8gcHJlc2NhbGVyOw0KLQ0KLSAgICAgICAgY2FzZSBBVDkxQ19QTUNfQ1NTX1BMTF9DTEs6IC8qIFBMTEIgY2xvY2sgaXMgc2VsZWN0ZWQgKi8NCi0gICAgICAgICAgICByZWcgPSBwQ0tHUi0+Q0tHUl9QTExSOw0KLSAgICAgICAgICAgIHBsbERpdmlkZXIgPSAoIHJlZyAmIEFUOTFDX0NLR1JfRElWICk7DQotICAgICAgICAgICAgcGxsTXVsdGlwbGllciA9ICggKCByZWcgJiBBVDkxQ19DS0dSX01VTCApID4+IDE2ICkgKyAxOw0KLSAgICAgICAgICAgIHJldHVybiBBVDkxRl9DS0dSX0dldE1haW5DbG9jayggcENLR1IsIHNsb3dDbG9jayApIC8gcGxsRGl2aWRlciAqIHBsbE11bHRpcGxpZXIgLyBwcmVzY2FsZXI7DQotICAgIH0NCi0NCi0gICAgcmV0dXJuIDA7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BNQ19FbmFibGVQQ0sgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBwZXJpcGhlcmFsIGNsb2NrICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0VuYWJsZVBDSyggQVQ5MVBTX1BNQyBwUE1DLCAgLyogXGFyZyBwb2ludGVyIHRvIFBNQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcGNrLCAvKiBcYXJnIFBlcmlwaGVyYWwgY2xvY2sgaWRlbnRpZmllciAwIC4uIDcgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtb2RlICkNCi17DQotICAgIHBQTUMtPlBNQ19QQ0tSWyBwY2sgXSA9IG1vZGU7DQotICAgIHBQTUMtPlBNQ19TQ0VSID0gKCAxIDw8IHBjayApIDw8IDg7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BNQ19EaXNhYmxlUENLICovDQotLyoqIFxicmllZiBFbmFibGUgcGVyaXBoZXJhbCBjbG9jayAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BNQ19EaXNhYmxlUENLKCBBVDkxUFNfUE1DIHBQTUMsICAgLyogXGFyZyBwb2ludGVyIHRvIFBNQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHBjayApIC8qIFxhcmcgUGVyaXBoZXJhbCBjbG9jayBpZGVudGlmaWVyIDAgLi4gNyAqLw0KLXsNCi0gICAgcFBNQy0+UE1DX1NDRFIgPSAoIDEgPDwgcGNrICkgPDwgODsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUE1DX0VuYWJsZUl0ICovDQotLyoqIFxicmllZiBFbmFibGUgUE1DIGludGVycnVwdCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BNQ19FbmFibGVJdCggQVQ5MVBTX1BNQyBwUE1DLCAgICAvKiBwb2ludGVyIHRvIGEgUE1DIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBJVCB0byBiZSBlbmFibGVkICovDQotew0KLSAgICAvKiogV3JpdGUgdG8gdGhlIElFUiByZWdpc3RlciAqLw0KLSAgICBwUE1DLT5QTUNfSUVSID0gZmxhZzsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUE1DX0Rpc2FibGVJdCAqLw0KLS8qKiBcYnJpZWYgRGlzYWJsZSBQTUMgaW50ZXJydXB0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0Rpc2FibGVJdCggQVQ5MVBTX1BNQyBwUE1DLCAgICAvKiBwb2ludGVyIHRvIGEgUE1DIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogSVQgdG8gYmUgZGlzYWJsZWQgKi8NCi17DQotICAgIC8qKiBXcml0ZSB0byB0aGUgSURSIHJlZ2lzdGVyICovDQotICAgIHBQTUMtPlBNQ19JRFIgPSBmbGFnOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QTUNfR2V0U3RhdHVzICovDQotLyoqIFxicmllZiBSZXR1cm4gUE1DIEludGVycnVwdCBTdGF0dXMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BNQ19HZXRTdGF0dXMoIC8qIFxyZXR1cm4gUE1DIEludGVycnVwdCBTdGF0dXMgKi8NCi0gICAgQVQ5MVBTX1BNQyBwUE1DICkgICAgICAgICAgICAgICAgICAgICAgLyogcG9pbnRlciB0byBhIFBNQyBjb250cm9sbGVyICovDQotew0KLSAgICByZXR1cm4gcFBNQy0+UE1DX1NSOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QTUNfR2V0SW50ZXJydXB0TWFza1N0YXR1cyAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIFBNQyBJbnRlcnJ1cHQgTWFzayBTdGF0dXMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BNQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCAvKiBccmV0dXJuIFBNQyBJbnRlcnJ1cHQgTWFzayBTdGF0dXMgKi8NCi0gICAgQVQ5MVBTX1BNQyBwUE1DICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gYSBQTUMgY29udHJvbGxlciAqLw0KLXsNCi0gICAgcmV0dXJuIHBQTUMtPlBNQ19JTVI7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BNQ19Jc0ludGVycnVwdE1hc2tlZCAqLw0KLS8qKiBcYnJpZWYgVGVzdCBpZiBQTUMgSW50ZXJydXB0IGlzIE1hc2tlZCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUE1DX0lzSW50ZXJydXB0TWFza2VkKCBBVDkxUFNfUE1DIHBQTUMsICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQTUMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQgKi8NCi17DQotICAgIHJldHVybiggQVQ5MUZfUE1DX0dldEludGVycnVwdE1hc2tTdGF0dXMoIHBQTUMgKSAmIGZsYWcgKTsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUE1DX0lzU3RhdHVzU2V0ICovDQotLyoqIFxicmllZiBUZXN0IGlmIFBNQyBTdGF0dXMgaXMgU2V0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QTUNfSXNTdGF0dXNTZXQoIEFUOTFQU19QTUMgcFBNQywgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBNQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZCAqLw0KLXsNCi0gICAgcmV0dXJuKCBBVDkxRl9QTUNfR2V0U3RhdHVzKCBwUE1DICkgJiBmbGFnICk7DQotfSAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAgKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBSU1RDDQotICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1JTVFNvZnRSZXNldCAqLw0KLS8qKiBcYnJpZWYgU3RhcnQgU29mdHdhcmUgUmVzZXQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9SU1RTb2Z0UmVzZXQoIEFUOTFQU19SU1RDIHBSU1RDLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmVzZXQgKQ0KLXsNCi0gICAgcFJTVEMtPlJTVENfUkNSID0gKCAweEE1MDAwMDAwIHwgcmVzZXQgKTsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUlNUU2V0TW9kZSAqLw0KLS8qKiBcYnJpZWYgU2V0IFJlc2V0IE1vZGUgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9SU1RTZXRNb2RlKCBBVDkxUFNfUlNUQyBwUlNUQywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtb2RlICkNCi17DQotICAgIHBSU1RDLT5SU1RDX1JNUiA9ICggMHhBNTAwMDAwMCB8IG1vZGUgKTsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUlNUR2V0TW9kZSAqLw0KLS8qKiBcYnJpZWYgR2V0IFJlc2V0IE1vZGUgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1JTVEdldE1vZGUoIEFUOTFQU19SU1RDIHBSU1RDICkNCi17DQotICAgIHJldHVybiggcFJTVEMtPlJTVENfUk1SICk7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1JTVEdldFN0YXR1cyAqLw0KLS8qKiBcYnJpZWYgR2V0IFJlc2V0IFN0YXR1cyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUlNUR2V0U3RhdHVzKCBBVDkxUFNfUlNUQyBwUlNUQyApDQotew0KLSAgICByZXR1cm4oIHBSU1RDLT5SU1RDX1JTUiApOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9SU1RJc1NvZnRSc3RBY3RpdmUgKi8NCi0vKiogXGJyaWVmIFJldHVybiAhPTAgaWYgc29mdHdhcmUgcmVzZXQgaXMgc3RpbGwgbm90IGNvbXBsZXRlZCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUlNUSXNTb2Z0UnN0QWN0aXZlKCBBVDkxUFNfUlNUQyBwUlNUQyApDQotew0KLSAgICByZXR1cm4oICggcFJTVEMtPlJTVENfUlNSICkgJiBBVDkxQ19SU1RDX1NSQ01QICk7DQotfQ0KLQ0KIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotKiAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgUlRUQw0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgICBBVDkxRl9TZXRSVFRfVGltZUJhc2UoKSAqLw0KLS8qKiBcYnJpZWYgIFNldCB0aGUgUlRUIHByZXNjYWxlciBhY2NvcmRpbmcgdG8gdGhlIFRpbWVCYXNlIGluIG1zICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUlRUU2V0VGltZUJhc2UoIEFUOTFQU19SVFRDIHBSVFRDLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1zICkNCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBXRFRDDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9XRFRTZXRNb2RlDQorLy8qIFxicmllZiBTZXQgV2F0Y2hkb2cgTW9kZSBSZWdpc3Rlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1dEVFNldE1vZGUoDQorICAgICAgICBBVDkxUFNfV0RUQyBwV0RUQywNCisgICAgICAgIHVuc2lnbmVkIGludCBNb2RlKQ0KIHsNCi0gICAgaWYoIG1zID4gMjAwMCApDQotICAgIHsNCi0gICAgICAgIHJldHVybiAxOyAvKiBBVDkxQ19USU1FX09VVF9PRl9SQU5HRSAqLw0KLSAgICB9DQotDQotICAgIHBSVFRDLT5SVFRDX1JUTVIgJj0gfjB4RkZGRjsNCi0gICAgcFJUVEMtPlJUVENfUlRNUiB8PSAoICggKCBtcyA8PCAxNSApIC8gMTAwMCApICYgMHhGRkZGICk7DQotICAgIHJldHVybiAwOw0KKwlwV0RUQy0+V0RUQ19XRE1SID0gTW9kZTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgICBBVDkxRl9SVFRTZXRQcmVzY2FsZXIoKSAqLw0KLS8qKiBcYnJpZWYgIFNldCB0aGUgbmV3IHByZXNjYWxlciB2YWx1ZSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1JUVFNldFByZXNjYWxlciggQVQ5MVBTX1JUVEMgcFJUVEMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHJ0cHJlcyApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfV0RUUmVzdGFydA0KKy8vKiBcYnJpZWYgUmVzdGFydCBXYXRjaGRvZw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1dEVFJlc3RhcnQoDQorICAgICAgICBBVDkxUFNfV0RUQyBwV0RUQykNCiB7DQotICAgIHBSVFRDLT5SVFRDX1JUTVIgJj0gfjB4RkZGRjsNCi0gICAgcFJUVEMtPlJUVENfUlRNUiB8PSAoIHJ0cHJlcyAmIDB4RkZGRiApOw0KLSAgICByZXR1cm4oIHBSVFRDLT5SVFRDX1JUTVIgKTsNCisJcFdEVEMtPldEVENfV0RDUiA9IDB4QTUwMDAwMDE7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICAgQVQ5MUZfUlRUUmVzdGFydCgpICovDQotLyoqIFxicmllZiAgUmVzdGFydCB0aGUgUlRUIHByZXNjYWxlciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9SVFRSZXN0YXJ0KCBBVDkxUFNfUlRUQyBwUlRUQyApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfV0RUU0dldHRhdHVzDQorLy8qIFxicmllZiBHZXQgV2F0Y2hkb2cgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9XRFRTR2V0dGF0dXMoDQorICAgICAgICBBVDkxUFNfV0RUQyBwV0RUQykNCiB7DQotICAgIHBSVFRDLT5SVFRDX1JUTVIgfD0gQVQ5MUNfUlRUQ19SVFRSU1Q7DQorCXJldHVybihwV0RUQy0+V0RUQ19XRFNSICYgMHgzKTsNCiB9DQogDQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgICBBVDkxRl9SVFRfU2V0QWxhcm1JTlQoKSAqLw0KLS8qKiBcYnJpZWYgIEVuYWJsZSBSVFQgQWxhcm0gSW50ZXJydXB0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1JUVFNldEFsYXJtSU5UKCBBVDkxUFNfUlRUQyBwUlRUQyApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfV0RUR2V0UGVyaW9kDQorLy8qIFxicmllZiBUcmFuc2xhdGUgbXMgaW50byBXYXRjaGRvZyBDb21wYXRpYmxlIHZhbHVlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9XRFRHZXRQZXJpb2QodW5zaWduZWQgaW50IG1zKQ0KIHsNCi0gICAgcFJUVEMtPlJUVENfUlRNUiB8PSBBVDkxQ19SVFRDX0FMTUlFTjsNCisJaWYgKChtcyA8IDQpIHx8IChtcyA+IDE2MDAwKSkNCisJCXJldHVybiAwOw0KKwlyZXR1cm4oKG1zIDw8IDgpIC8gMTAwMCk7DQogfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICAgQVQ5MUZfUlRUX0NsZWFyQWxhcm1JTlQoKSAqLw0KLS8qKiBcYnJpZWYgIERpc2FibGUgUlRUIEFsYXJtIEludGVycnVwdCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9SVFRDbGVhckFsYXJtSU5UKCBBVDkxUFNfUlRUQyBwUlRUQyApDQotew0KLSAgICBwUlRUQy0+UlRUQ19SVE1SICY9IH5BVDkxQ19SVFRDX0FMTUlFTjsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgICBBVDkxRl9SVFRfU2V0UnR0SW5jSU5UKCkgKi8NCi0vKiogXGJyaWVmICBFbmFibGUgUlRUIElOQyBJbnRlcnJ1cHQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUlRUU2V0UnR0SW5jSU5UKCBBVDkxUFNfUlRUQyBwUlRUQyApDQotew0KLSAgICBwUlRUQy0+UlRUQ19SVE1SIHw9IEFUOTFDX1JUVENfUlRUSU5DSUVOOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgIEFUOTFGX1JUVF9DbGVhclJ0dEluY0lOVCgpICovDQotLyoqIFxicmllZiAgRGlzYWJsZSBSVFQgSU5DIEludGVycnVwdCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9SVFRDbGVhclJ0dEluY0lOVCggQVQ5MVBTX1JUVEMgcFJUVEMgKQ0KLXsNCi0gICAgcFJUVEMtPlJUVENfUlRNUiAmPSB+QVQ5MUNfUlRUQ19SVFRJTkNJRU47DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICAgQVQ5MUZfUlRUX1NldEFsYXJtVmFsdWUoKSAqLw0KLS8qKiBcYnJpZWYgIFNldCBSVFQgQWxhcm0gVmFsdWUgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUlRUU2V0QWxhcm1WYWx1ZSggQVQ5MVBTX1JUVEMgcFJUVEMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYWxhcm0gKQ0KLXsNCi0gICAgcFJUVEMtPlJUVENfUlRBUiA9IGFsYXJtOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgIEFUOTFGX1JUVF9HZXRBbGFybVZhbHVlKCkgKi8NCi0vKiogXGJyaWVmICBHZXQgUlRUIEFsYXJtIFZhbHVlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUlRUR2V0QWxhcm1WYWx1ZSggQVQ5MVBTX1JUVEMgcFJUVEMgKQ0KLXsNCi0gICAgcmV0dXJuKCBwUlRUQy0+UlRUQ19SVEFSICk7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICAgQVQ5MUZfUlRUR2V0U3RhdHVzKCkgKi8NCi0vKiogXGJyaWVmICBSZWFkIHRoZSBSVFQgc3RhdHVzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUlRUR2V0U3RhdHVzKCBBVDkxUFNfUlRUQyBwUlRUQyApDQotew0KLSAgICByZXR1cm4oIHBSVFRDLT5SVFRDX1JUU1IgKTsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgICBBVDkxRl9SVFRfUmVhZFZhbHVlKCkgKi8NCi0vKiogXGJyaWVmICBSZWFkIHRoZSBSVFQgdmFsdWUgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9SVFRSZWFkVmFsdWUoIEFUOTFQU19SVFRDIHBSVFRDICkNCi17DQotICAgIHJlZ2lzdGVyIHZvbGF0aWxlIHVuc2lnbmVkIGludCB2YWwxLCB2YWwyOw0KLQ0KLSAgICBkbw0KLSAgICB7DQotICAgICAgICB2YWwxID0gcFJUVEMtPlJUVENfUlRWUjsNCi0gICAgICAgIHZhbDIgPSBwUlRUQy0+UlRUQ19SVFZSOw0KLSAgICB9DQotICAgIHdoaWxlKCB2YWwxICE9IHZhbDIgKTsNCi0NCi0gICAgcmV0dXJuKCB2YWwxICk7DQotfQ0KLQ0KIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotKiAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgUElUQw0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElUSW5pdCAqLw0KLS8qKiBcYnJpZWYgU3lzdGVtIHRpbWVyIGluaXQgOiBwZXJpb2QgaW4gtXNlY29uZCwgc3lzdGVtIGNsb2NrIGZyZXEgaW4gTUh6ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUElUSW5pdCggQVQ5MVBTX1BJVEMgcFBJVEMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcGVyaW9kLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHBpdF9mcmVxdWVuY3kgKQ0KKyAgICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFZSRUcNCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1ZSRUdfRW5hYmxlX0xvd1Bvd2VyTW9kZQ0KKy8vKiBcYnJpZWYgRW5hYmxlIFZSRUcgTG93IFBvd2VyIE1vZGUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9WUkVHX0VuYWJsZV9Mb3dQb3dlck1vZGUoDQorICAgICAgICBBVDkxUFNfVlJFRyBwVlJFRykNCiB7DQotICAgIHBQSVRDLT5QSVRDX1BJTVIgPSBwZXJpb2QgPyAoIHBlcmlvZCAqIHBpdF9mcmVxdWVuY3kgKyA4ICkgPj4gNCA6IDA7IC8qICs4IHRvIGF2b2lkICUxMCBhbmQgLzEwICovDQotICAgIHBQSVRDLT5QSVRDX1BJTVIgfD0gQVQ5MUNfUElUQ19QSVRFTjsNCisJcFZSRUctPlZSRUdfTVIgfD0gQVQ5MUNfVlJFR19QU1REQlk7CSANCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElUU2V0UElWICovDQotLyoqIFxicmllZiBTZXQgdGhlIFBJVCBQZXJpb2RpYyBJbnRlcnZhbCBWYWx1ZSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BJVFNldFBJViggQVQ5MVBTX1BJVEMgcFBJVEMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwaXYgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1ZSRUdfRGlzYWJsZV9Mb3dQb3dlck1vZGUNCisvLyogXGJyaWVmIERpc2FibGUgVlJFRyBMb3cgUG93ZXIgTW9kZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1ZSRUdfRGlzYWJsZV9Mb3dQb3dlck1vZGUoDQorICAgICAgICBBVDkxUFNfVlJFRyBwVlJFRykNCiB7DQotICAgIHBQSVRDLT5QSVRDX1BJTVIgPSBwaXYgfCAoIHBQSVRDLT5QSVRDX1BJTVIgJiAoIEFUOTFDX1BJVENfUElURU4gfCBBVDkxQ19QSVRDX1BJVElFTiApICk7DQotfQ0KKwlwVlJFRy0+VlJFR19NUiAmPSB+QVQ5MUNfVlJFR19QU1REQlk7CSANCit9LyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBNQw0KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElURW5hYmxlSW50ICovDQotLyoqIFxicmllZiBFbmFibGUgUElUIHBlcmlvZGljIGludGVycnVwdCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BJVEVuYWJsZUludCggQVQ5MVBTX1BJVEMgcFBJVEMgKQ0KKyNkZWZpbmUgQVQ5MUNfTUNfQ09SUkVDVF9LRVkgICgodW5zaWduZWQgaW50KSAweDVBIDw8IDI0KSAvLyAoTUMpIENvcnJlY3QgUHJvdGVjdCBLZXkNCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9NQ19SZW1hcA0KKy8vKiBcYnJpZWYgTWFrZSBSZW1hcA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX01DX1JlbWFwICh2b2lkKSAgICAgLy8gIA0KIHsNCi0gICAgcFBJVEMtPlBJVENfUElNUiB8PSBBVDkxQ19QSVRDX1BJVElFTjsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElURGlzYWJsZUludCAqLw0KLS8qKiBcYnJpZWYgRGlzYWJsZSBQSVQgcGVyaW9kaWMgaW50ZXJydXB0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUElURGlzYWJsZUludCggQVQ5MVBTX1BJVEMgcFBJVEMgKQ0KLXsNCi0gICAgcFBJVEMtPlBJVENfUElNUiAmPSB+QVQ5MUNfUElUQ19QSVRJRU47DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJVEdldE1vZGUgKi8NCi0vKiogXGJyaWVmIFJlYWQgUElUIG1vZGUgcmVnaXN0ZXIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJVEdldE1vZGUoIEFUOTFQU19QSVRDIHBQSVRDICkNCi17DQotICAgIHJldHVybiggcFBJVEMtPlBJVENfUElNUiApOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSVRHZXRTdGF0dXMgKi8NCi0vKiogXGJyaWVmIFJlYWQgUElUIHN0YXR1cyByZWdpc3RlciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElUR2V0U3RhdHVzKCBBVDkxUFNfUElUQyBwUElUQyApDQotew0KLSAgICByZXR1cm4oIHBQSVRDLT5QSVRDX1BJU1IgKTsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElUR2V0UElJUiAqLw0KLS8qKiBcYnJpZWYgUmVhZCBQSVQgQ1BJViBhbmQgUElDTlQgd2l0aG91dCByZXNzZXR0aW5nIHRoZSBjb3VudGVycyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElUR2V0UElJUiggQVQ5MVBTX1BJVEMgcFBJVEMgKQ0KLXsNCi0gICAgcmV0dXJuKCBwUElUQy0+UElUQ19QSUlSICk7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJVEdldFBJVlIgKi8NCi0vKiogXGJyaWVmIFJlYWQgU3lzdGVtIHRpbWVyIENQSVYgYW5kIFBJQ05UIHdpdGhvdXQgcmVzc2V0dGluZyB0aGUgY291bnRlcnMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJVEdldFBJVlIoIEFUOTFQU19QSVRDIHBQSVRDICkNCi17DQotICAgIHJldHVybiggcFBJVEMtPlBJVENfUElWUiApOw0KLX0NCi0NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSogICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFdEVEMNCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1dEVFNldE1vZGUgKi8NCi0vKiogXGJyaWVmIFNldCBXYXRjaGRvZyBNb2RlIFJlZ2lzdGVyICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfV0RUU2V0TW9kZSggQVQ5MVBTX1dEVEMgcFdEVEMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgTW9kZSApDQotew0KLSAgICBwV0RUQy0+V0RUQ19XRE1SID0gTW9kZTsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfV0RUUmVzdGFydCAqLw0KLS8qKiBcYnJpZWYgUmVzdGFydCBXYXRjaGRvZyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1dEVFJlc3RhcnQoIEFUOTFQU19XRFRDIHBXRFRDICkNCi17DQotICAgIHBXRFRDLT5XRFRDX1dEQ1IgPSAweEE1MDAwMDAxOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9XRFRTR2V0dGF0dXMgKi8NCi0vKiogXGJyaWVmIEdldCBXYXRjaGRvZyBTdGF0dXMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1dEVFNHZXR0YXR1cyggQVQ5MVBTX1dEVEMgcFdEVEMgKQ0KLXsNCi0gICAgcmV0dXJuKCBwV0RUQy0+V0RUQ19XRFNSICYgMHgzICk7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1dEVEdldFBlcmlvZCAqLw0KLS8qKiBcYnJpZWYgVHJhbnNsYXRlIG1zIGludG8gV2F0Y2hkb2cgQ29tcGF0aWJsZSB2YWx1ZSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfV0RUR2V0UGVyaW9kKCB1bnNpZ25lZCBpbnQgbXMgKQ0KLXsNCi0gICAgaWYoICggbXMgPCA0ICkgfHwgKCBtcyA+IDE2MDAwICkgKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLQ0KLSAgICByZXR1cm4oICggbXMgPDwgOCApIC8gMTAwMCApOw0KLX0NCi0NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSogICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFZSRUcNCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1ZSRUdfRW5hYmxlX0xvd1Bvd2VyTW9kZSAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIFZSRUcgTG93IFBvd2VyIE1vZGUgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9WUkVHX0VuYWJsZV9Mb3dQb3dlck1vZGUoIEFUOTFQU19WUkVHIHBWUkVHICkNCi17DQotICAgIHBWUkVHLT5WUkVHX01SIHw9IEFUOTFDX1ZSRUdfUFNUREJZOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9WUkVHX0Rpc2FibGVfTG93UG93ZXJNb2RlICovDQotLyoqIFxicmllZiBEaXNhYmxlIFZSRUcgTG93IFBvd2VyIE1vZGUgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9WUkVHX0Rpc2FibGVfTG93UG93ZXJNb2RlKCBBVDkxUFNfVlJFRyBwVlJFRyApDQotew0KLSAgICBwVlJFRy0+VlJFR19NUiAmPSB+QVQ5MUNfVlJFR19QU1REQlk7DQotfSAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAgKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBNQw0KLSAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0NCi0jZGVmaW5lIEFUOTFDX01DX0NPUlJFQ1RfS0VZICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDVBIDw8IDI0ICkgLyogKE1DKSBDb3JyZWN0IFByb3RlY3QgS2V5ICovDQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfTUNfUmVtYXAgKi8NCi0vKiogXGJyaWVmIE1ha2UgUmVtYXAgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9NQ19SZW1hcCggdm9pZCApIC8qICovDQotew0KLSAgICBBVDkxUFNfTUMgcE1DID0gKCBBVDkxUFNfTUMgKSBBVDkxQ19CQVNFX01DOw0KLQ0KKyAgICBBVDkxUFNfTUMgcE1DID0gKEFUOTFQU19NQykgQVQ5MUNfQkFTRV9NQzsNCisgICAgDQogICAgIHBNQy0+TUNfUkNSID0gQVQ5MUNfTUNfUkNCOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9NQ19FRkNfQ2ZnTW9kZVJlZyAqLw0KLS8qKiBcYnJpZWYgQ29uZmlndXJlIHRoZSBFRkMgTW9kZSBSZWdpc3RlciBvZiB0aGUgTUMgY29udHJvbGxlciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX01DX0VGQ19DZmdNb2RlUmVnKCBBVDkxUFNfTUMgcE1DLCAgICAgIC8qIHBvaW50ZXIgdG8gYSBNQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1vZGUgKSAvKiBtb2RlIHJlZ2lzdGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfTUNfRUZDX0NmZ01vZGVSZWcNCisvLyogXGJyaWVmIENvbmZpZ3VyZSB0aGUgRUZDIE1vZGUgUmVnaXN0ZXIgb2YgdGhlIE1DIGNvbnRyb2xsZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9NQ19FRkNfQ2ZnTW9kZVJlZyAoDQorCUFUOTFQU19NQyBwTUMsIC8vIHBvaW50ZXIgdG8gYSBNQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBtb2RlKSAgICAgICAgLy8gbW9kZSByZWdpc3RlciANCiB7DQotICAgIC8qIFdyaXRlIHRvIHRoZSBGTVIgcmVnaXN0ZXIgKi8NCi0gICAgcE1DLT5NQ19GTVIgPSBtb2RlOw0KKwkvLyBXcml0ZSB0byB0aGUgRk1SIHJlZ2lzdGVyDQorCXBNQy0+TUNfRk1SID0gbW9kZTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfTUNfRUZDX0dldE1vZGVSZWcgKi8NCi0vKiogXGJyaWVmIFJldHVybiBNQyBFRkMgTW9kZSBSZWdzaXRlciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfTUNfRUZDX0dldE1vZGVSZWcoIEFUOTFQU19NQyBwTUMgKSAvKiBwb2ludGVyIHRvIGEgTUMgY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX01DX0VGQ19HZXRNb2RlUmVnDQorLy8qIFxicmllZiBSZXR1cm4gTUMgRUZDIE1vZGUgUmVnc2l0ZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX01DX0VGQ19HZXRNb2RlUmVnKA0KKwlBVDkxUFNfTUMgcE1DKSAvLyBwb2ludGVyIHRvIGEgTUMgY29udHJvbGxlcg0KIHsNCi0gICAgcmV0dXJuIHBNQy0+TUNfRk1SOw0KKwlyZXR1cm4gcE1DLT5NQ19GTVI7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX01DX0VGQ19Db21wdXRlRk1DTiAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIE1DIEVGQyBNb2RlIFJlZ3NpdGVyICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9NQ19FRkNfQ29tcHV0ZUZNQ04oIGludCBtYXN0ZXJfY2xvY2sgKSAvKiBtYXN0ZXIgY2xvY2sgaW4gSHogKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9NQ19FRkNfQ29tcHV0ZUZNQ04NCisvLyogXGJyaWVmIFJldHVybiBNQyBFRkMgTW9kZSBSZWdzaXRlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfTUNfRUZDX0NvbXB1dGVGTUNOKA0KKwlpbnQgbWFzdGVyX2Nsb2NrKSAvLyBtYXN0ZXIgY2xvY2sgaW4gSHoNCiB7DQotICAgIHJldHVybiggbWFzdGVyX2Nsb2NrIC8gMTAwMDAwMCArIDIgKTsNCisJcmV0dXJuIChtYXN0ZXJfY2xvY2svMTAwMDAwMCArMik7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX01DX0VGQ19QZXJmb3JtQ21kICovDQotLyoqIFxicmllZiBQZXJmb3JtIEVGQyBDb21tYW5kICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfTUNfRUZDX1BlcmZvcm1DbWQoIEFUOTFQU19NQyBwTUMsIC8qIHBvaW50ZXIgdG8gYSBNQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHRyYW5zZmVyX2NtZCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfTUNfRUZDX1BlcmZvcm1DbWQNCisvLyogXGJyaWVmIFBlcmZvcm0gRUZDIENvbW1hbmQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9NQ19FRkNfUGVyZm9ybUNtZCAoDQorCUFUOTFQU19NQyBwTUMsIC8vIHBvaW50ZXIgdG8gYSBNQyBjb250cm9sbGVyDQorICAgIHVuc2lnbmVkIGludCB0cmFuc2Zlcl9jbWQpDQogew0KLSAgICBwTUMtPk1DX0ZDUiA9IHRyYW5zZmVyX2NtZDsNCisJcE1DLT5NQ19GQ1IgPSB0cmFuc2Zlcl9jbWQ7CQ0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9NQ19FRkNfR2V0U3RhdHVzICovDQotLyoqIFxicmllZiBSZXR1cm4gTUMgRUZDIFN0YXR1cyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfTUNfRUZDX0dldFN0YXR1cyggQVQ5MVBTX01DIHBNQyApIC8qIHBvaW50ZXIgdG8gYSBNQyBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfTUNfRUZDX0dldFN0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIE1DIEVGQyBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX01DX0VGQ19HZXRTdGF0dXMoDQorCUFUOTFQU19NQyBwTUMpIC8vIHBvaW50ZXIgdG8gYSBNQyBjb250cm9sbGVyDQogew0KLSAgICByZXR1cm4gcE1DLT5NQ19GU1I7DQorCXJldHVybiBwTUMtPk1DX0ZTUjsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfTUNfRUZDX0lzSW50ZXJydXB0TWFza2VkICovDQotLyoqIFxicmllZiBUZXN0IGlmIEVGQyBNQyBJbnRlcnJ1cHQgaXMgTWFza2VkICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9NQ19FRkNfSXNJbnRlcnJ1cHRNYXNrZWQoIEFUOTFQU19NQyBwTUMsICAgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIE1DIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfTUNfRUZDX0lzSW50ZXJydXB0TWFza2VkDQorLy8qIFxicmllZiBUZXN0IGlmIEVGQyBNQyBJbnRlcnJ1cHQgaXMgTWFza2VkIA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfTUNfRUZDX0lzSW50ZXJydXB0TWFza2VkKA0KKyAgICAgICAgQVQ5MVBTX01DIHBNQywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgTUMgY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQogew0KLSAgICByZXR1cm4oIEFUOTFGX01DX0VGQ19HZXRNb2RlUmVnKCBwTUMgKSAmIGZsYWcgKTsNCisJcmV0dXJuIChBVDkxRl9NQ19FRkNfR2V0TW9kZVJlZyhwTUMpICYgZmxhZyk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX01DX0VGQ19Jc0ludGVycnVwdFNldCAqLw0KLS8qKiBcYnJpZWYgVGVzdCBpZiBFRkMgTUMgSW50ZXJydXB0IGlzIFNldCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfTUNfRUZDX0lzSW50ZXJydXB0U2V0KCBBVDkxUFNfTUMgcE1DLCAgICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBNQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX01DX0VGQ19Jc0ludGVycnVwdFNldA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBFRkMgTUMgSW50ZXJydXB0IGlzIFNldA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfTUNfRUZDX0lzSW50ZXJydXB0U2V0KA0KKyAgICAgICAgQVQ5MVBTX01DIHBNQywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgTUMgY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQogew0KLSAgICByZXR1cm4oIEFUOTFGX01DX0VGQ19HZXRTdGF0dXMoIHBNQyApICYgZmxhZyApOw0KKwlyZXR1cm4gKEFUOTFGX01DX0VGQ19HZXRTdGF0dXMocE1DKSAmIGZsYWcpOw0KIH0NCiANCiAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSogICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFNQSQ0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1BJX09wZW4gKi8NCi0vKiogXGJyaWVmIE9wZW4gYSBTUEkgUG9ydCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfU1BJX09wZW4oIGNvbnN0IHVuc2lnbmVkIGludCBudWxsICkgLyogXGFyZyAqLw0KKyAgICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFNQSQ0KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1BJX09wZW4NCisvLyogXGJyaWVmIE9wZW4gYSBTUEkgUG9ydA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfU1BJX09wZW4gKA0KKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IG51bGwpICAvLyBcYXJnDQogew0KLSAgICAvKiBOT1QgREVGSU5FRCBBVCBUSElTIE1PTUVOVCAqLw0KLSAgICByZXR1cm4oIDAgKTsNCisgICAgICAgIC8qIE5PVCBERUZJTkVEIEFUIFRISVMgTU9NRU5UICovDQorICAgICAgICByZXR1cm4gKCAwICk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1NQSV9DZmdDcyAqLw0KLS8qKiBcYnJpZWYgQ29uZmlndXJlIFNQSSBjaGlwIHNlbGVjdCByZWdpc3RlciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1NQSV9DZmdDcyggQVQ5MVBTX1NQSSBwU1BJLCAvKiBwb2ludGVyIHRvIGEgU1BJIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNzLCAgICAgICAgICAvKiBTUEkgY3MgbnVtYmVyICgwIHRvIDMpICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2YWwgKSAgICAgICAgLyogIGNoaXAgc2VsZWN0IHJlZ2lzdGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1BJX0NmZ0NzDQorLy8qIFxicmllZiBDb25maWd1cmUgU1BJIGNoaXAgc2VsZWN0IHJlZ2lzdGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1BJX0NmZ0NzICgNCisJQVQ5MVBTX1NQSSBwU1BJLCAgICAgLy8gcG9pbnRlciB0byBhIFNQSSBjb250cm9sbGVyDQorCWludCBjcywgICAgIC8vIFNQSSBjcyBudW1iZXIgKDAgdG8gMykNCisgCWludCB2YWwpICAgLy8gIGNoaXAgc2VsZWN0IHJlZ2lzdGVyDQogew0KLSAgICAvKiogV3JpdGUgdG8gdGhlIENTUiByZWdpc3RlciAqLw0KLSAgICAqKCBwU1BJLT5TUElfQ1NSICsgY3MgKSA9IHZhbDsNCisJLy8qIFdyaXRlIHRvIHRoZSBDU1IgcmVnaXN0ZXINCisJKihwU1BJLT5TUElfQ1NSICsgY3MpID0gdmFsOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9TUElfRW5hYmxlSXQgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBTUEkgaW50ZXJydXB0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfU1BJX0VuYWJsZUl0KCBBVDkxUFNfU1BJIHBTUEksICAgIC8qIHBvaW50ZXIgdG8gYSBTUEkgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIElUIHRvIGJlIGVuYWJsZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUElfRW5hYmxlSXQNCisvLyogXGJyaWVmIEVuYWJsZSBTUEkgaW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1BJX0VuYWJsZUl0ICgNCisJQVQ5MVBTX1NQSSBwU1BJLCAgICAgLy8gcG9pbnRlciB0byBhIFNQSSBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAgIC8vIElUIHRvIGJlIGVuYWJsZWQNCiB7DQotICAgIC8qKiBXcml0ZSB0byB0aGUgSUVSIHJlZ2lzdGVyICovDQotICAgIHBTUEktPlNQSV9JRVIgPSBmbGFnOw0KKwkvLyogV3JpdGUgdG8gdGhlIElFUiByZWdpc3Rlcg0KKwlwU1BJLT5TUElfSUVSID0gZmxhZzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1BJX0Rpc2FibGVJdCAqLw0KLS8qKiBcYnJpZWYgRGlzYWJsZSBTUEkgaW50ZXJydXB0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfU1BJX0Rpc2FibGVJdCggQVQ5MVBTX1NQSSBwU1BJLCAgICAvKiBwb2ludGVyIHRvIGEgU1BJIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogSVQgdG8gYmUgZGlzYWJsZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUElfRGlzYWJsZUl0DQorLy8qIFxicmllZiBEaXNhYmxlIFNQSSBpbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TUElfRGlzYWJsZUl0ICgNCisJQVQ5MVBTX1NQSSBwU1BJLCAvLyBwb2ludGVyIHRvIGEgU1BJIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpIC8vIElUIHRvIGJlIGRpc2FibGVkDQogew0KLSAgICAvKiogV3JpdGUgdG8gdGhlIElEUiByZWdpc3RlciAqLw0KLSAgICBwU1BJLT5TUElfSURSID0gZmxhZzsNCisJLy8qIFdyaXRlIHRvIHRoZSBJRFIgcmVnaXN0ZXINCisJcFNQSS0+U1BJX0lEUiA9IGZsYWc7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1NQSV9SZXNldCAqLw0KLS8qKiBcYnJpZWYgUmVzZXQgdGhlIFNQSSBjb250cm9sbGVyICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfU1BJX1Jlc2V0KCBBVDkxUFNfU1BJIHBTUEkgLyogcG9pbnRlciB0byBhIFNQSSBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUElfUmVzZXQNCisvLyogXGJyaWVmIFJlc2V0IHRoZSBTUEkgY29udHJvbGxlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NQSV9SZXNldCAoDQorCUFUOTFQU19TUEkgcFNQSSAvLyBwb2ludGVyIHRvIGEgU1BJIGNvbnRyb2xsZXINCisJKQ0KIHsNCi0gICAgLyoqIFdyaXRlIHRvIHRoZSBDUiByZWdpc3RlciAqLw0KLSAgICBwU1BJLT5TUElfQ1IgPSBBVDkxQ19TUElfU1dSU1Q7DQorCS8vKiBXcml0ZSB0byB0aGUgQ1IgcmVnaXN0ZXINCisJcFNQSS0+U1BJX0NSID0gQVQ5MUNfU1BJX1NXUlNUOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9TUElfRW5hYmxlICovDQotLyoqIFxicmllZiBFbmFibGUgdGhlIFNQSSBjb250cm9sbGVyICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfU1BJX0VuYWJsZSggQVQ5MVBTX1NQSSBwU1BJIC8qIHBvaW50ZXIgdG8gYSBTUEkgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSV9FbmFibGUNCisvLyogXGJyaWVmIEVuYWJsZSB0aGUgU1BJIGNvbnRyb2xsZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TUElfRW5hYmxlICgNCisJQVQ5MVBTX1NQSSBwU1BJIC8vIHBvaW50ZXIgdG8gYSBTUEkgY29udHJvbGxlcg0KKwkpDQogew0KLSAgICAvKiogV3JpdGUgdG8gdGhlIENSIHJlZ2lzdGVyICovDQotICAgIHBTUEktPlNQSV9DUiA9IEFUOTFDX1NQSV9TUElFTjsNCisJLy8qIFdyaXRlIHRvIHRoZSBDUiByZWdpc3Rlcg0KKwlwU1BJLT5TUElfQ1IgPSBBVDkxQ19TUElfU1BJRU47DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1NQSV9EaXNhYmxlICovDQotLyoqIFxicmllZiBEaXNhYmxlIHRoZSBTUEkgY29udHJvbGxlciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1NQSV9EaXNhYmxlKCBBVDkxUFNfU1BJIHBTUEkgLyogcG9pbnRlciB0byBhIFNQSSBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSV9EaXNhYmxlDQorLy8qIFxicmllZiBEaXNhYmxlIHRoZSBTUEkgY29udHJvbGxlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NQSV9EaXNhYmxlICgNCisJQVQ5MVBTX1NQSSBwU1BJIC8vIHBvaW50ZXIgdG8gYSBTUEkgY29udHJvbGxlcg0KKwkpDQogew0KLSAgICAvKiogV3JpdGUgdG8gdGhlIENSIHJlZ2lzdGVyICovDQorCS8vKiBXcml0ZSB0byB0aGUgQ1IgcmVnaXN0ZXINCisJcFNQSS0+U1BJX0NSID0gQVQ5MUNfU1BJX1NQSURJUzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1BJX0NmZ01vZGUNCisvLyogXGJyaWVmIEVuYWJsZSB0aGUgU1BJIGNvbnRyb2xsZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TUElfQ2ZnTW9kZSAoDQorCUFUOTFQU19TUEkgcFNQSSwgLy8gcG9pbnRlciB0byBhIFNQSSBjb250cm9sbGVyDQorCWludCBtb2RlKSAgICAgICAgLy8gbW9kZSByZWdpc3RlciANCit7DQorCS8vKiBXcml0ZSB0byB0aGUgTVIgcmVnaXN0ZXINCisJcFNQSS0+U1BJX01SID0gbW9kZTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1BJX0NmZ1BDUw0KKy8vKiBcYnJpZWYgU3dpdGNoIHRvIHRoZSBjb3JyZWN0IFBDUyBvZiBTUEkgTW9kZSBSZWdpc3RlciA6IEZpeGVkIFBlcmlwaGVyYWwgU2VsZWN0ZWQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TUElfQ2ZnUENTICgNCisJQVQ5MVBTX1NQSSBwU1BJLCAvLyBwb2ludGVyIHRvIGEgU1BJIGNvbnRyb2xsZXINCisJY2hhciBQQ1NfRGV2aWNlKSAvLyBQQ1Mgb2YgdGhlIERldmljZQ0KK3sJDQorIAkvLyogV3JpdGUgdG8gdGhlIE1SIHJlZ2lzdGVyDQorCXBTUEktPlNQSV9NUiAmPSAweEZGRjBGRkZGOw0KKwlwU1BJLT5TUElfTVIgfD0gKCAoUENTX0RldmljZTw8MTYpICYgQVQ5MUNfU1BJX1BDUyApOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUElfUmVjZWl2ZUZyYW1lDQorLy8qIFxicmllZiBSZXR1cm4gMiBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgd2l0aCBCdWZmZXIgYW5kIE5leHQgQnVmZmVyLCAxIGlmIFBEQyBoYXMgYmVlbiBpbml0aWFsaXphZWQgd2l0aCBOZXh0IEJ1ZmZlciwgMCBpZiBQREMgaXMgYnVzeQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfU1BJX1JlY2VpdmVGcmFtZSAoDQorCUFUOTFQU19TUEkgcFNQSSwNCisJY2hhciAqcEJ1ZmZlciwNCisJdW5zaWduZWQgaW50IHN6QnVmZmVyLA0KKwljaGFyICpwTmV4dEJ1ZmZlciwNCisJdW5zaWduZWQgaW50IHN6TmV4dEJ1ZmZlciApDQorew0KKwlyZXR1cm4gQVQ5MUZfUERDX1JlY2VpdmVGcmFtZSgNCisJCShBVDkxUFNfUERDKSAmKHBTUEktPlNQSV9SUFIpLA0KKwkJcEJ1ZmZlciwNCisJCXN6QnVmZmVyLA0KKwkJcE5leHRCdWZmZXIsDQorCQlzek5leHRCdWZmZXIpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUElfU2VuZEZyYW1lDQorLy8qIFxicmllZiBSZXR1cm4gMiBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgd2l0aCBCdWZmZXIgYW5kIE5leHQgQnVmZmVyLCAxIGlmIFBEQyBoYXMgYmVlbiBpbml0aWFsaXphZWQgd2l0aCBOZXh0IEJ1ZmZlciwgMCBpZiBQREMgaXMgYlNQSXkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1NQSV9TZW5kRnJhbWUoDQorCUFUOTFQU19TUEkgcFNQSSwNCisJY2hhciAqcEJ1ZmZlciwNCisJdW5zaWduZWQgaW50IHN6QnVmZmVyLA0KKwljaGFyICpwTmV4dEJ1ZmZlciwNCisJdW5zaWduZWQgaW50IHN6TmV4dEJ1ZmZlciApDQorew0KKwlyZXR1cm4gQVQ5MUZfUERDX1NlbmRGcmFtZSgNCisJCShBVDkxUFNfUERDKSAmKHBTUEktPlNQSV9SUFIpLA0KKwkJcEJ1ZmZlciwNCisJCXN6QnVmZmVyLA0KKwkJcE5leHRCdWZmZXIsDQorCQlzek5leHRCdWZmZXIpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUElfQ2xvc2UNCisvLyogXGJyaWVmIENsb3NlIFNQSTogZGlzYWJsZSBJVCBkaXNhYmxlIHRyYW5zZmVydCwgY2xvc2UgUERDDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1BJX0Nsb3NlICgNCisJQVQ5MVBTX1NQSSBwU1BJKSAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgU1BJIGNvbnRyb2xsZXINCit7DQorICAgIC8vKiBSZXNldCBhbGwgdGhlIENoaXAgU2VsZWN0IHJlZ2lzdGVyDQorICAgIHBTUEktPlNQSV9DU1JbMF0gPSAwIDsNCisgICAgcFNQSS0+U1BJX0NTUlsxXSA9IDAgOw0KKyAgICBwU1BJLT5TUElfQ1NSWzJdID0gMCA7DQorICAgIHBTUEktPlNQSV9DU1JbM10gPSAwIDsNCisNCisgICAgLy8qIFJlc2V0IHRoZSBTUEkgbW9kZQ0KKyAgICBwU1BJLT5TUElfTVIgPSAwICA7DQorDQorICAgIC8vKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzDQorICAgIHBTUEktPlNQSV9JRFIgPSAweEZGRkZGRkZGIDsNCisNCisgICAgLy8qIEFib3J0IHRoZSBQZXJpcGhlcmFsIERhdGEgVHJhbnNmZXJzDQorICAgIEFUOTFGX1BEQ19DbG9zZSgoQVQ5MVBTX1BEQykgJihwU1BJLT5TUElfUlBSKSk7DQorDQorICAgIC8vKiBEaXNhYmxlIHJlY2VpdmVyIGFuZCB0cmFuc21pdHRlciBhbmQgc3RvcCBhbnkgYWN0aXZpdHkgaW1tZWRpYXRlbHkNCiAgICAgcFNQSS0+U1BJX0NSID0gQVQ5MUNfU1BJX1NQSURJUzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1BJX0NmZ01vZGUgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSB0aGUgU1BJIGNvbnRyb2xsZXIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9TUElfQ2ZnTW9kZSggQVQ5MVBTX1NQSSBwU1BJLCAvKiBwb2ludGVyIHRvIGEgU1BJIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSApICAgICAgIC8qIG1vZGUgcmVnaXN0ZXIgKi8NCi17DQotICAgIC8qKiBXcml0ZSB0byB0aGUgTVIgcmVnaXN0ZXIgKi8NCi0gICAgcFNQSS0+U1BJX01SID0gbW9kZTsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1BJX0NmZ1BDUyAqLw0KLS8qKiBcYnJpZWYgU3dpdGNoIHRvIHRoZSBjb3JyZWN0IFBDUyBvZiBTUEkgTW9kZSBSZWdpc3RlciA6IEZpeGVkIFBlcmlwaGVyYWwgU2VsZWN0ZWQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9TUElfQ2ZnUENTKCBBVDkxUFNfU1BJIHBTUEksICAvKiBwb2ludGVyIHRvIGEgU1BJIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgUENTX0RldmljZSApIC8qIFBDUyBvZiB0aGUgRGV2aWNlICovDQotew0KLSAgICAvKiogV3JpdGUgdG8gdGhlIE1SIHJlZ2lzdGVyICovDQotICAgIHBTUEktPlNQSV9NUiAmPSAweEZGRjBGRkZGOw0KLSAgICBwU1BJLT5TUElfTVIgfD0gKCAoIFBDU19EZXZpY2UgPDwgMTYgKSAmIEFUOTFDX1NQSV9QQ1MgKTsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1BJX1JlY2VpdmVGcmFtZSAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIDIgaWYgUERDIGhhcyBiZWVuIGluaXRpYWxpemVkIHdpdGggQnVmZmVyIGFuZCBOZXh0IEJ1ZmZlciwgMSBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6YWVkIHdpdGggTmV4dCBCdWZmZXIsIDAgaWYgUERDIGlzIGJ1c3kgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1NQSV9SZWNlaXZlRnJhbWUoIEFUOTFQU19TUEkgcFNQSSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqIHBCdWZmZXIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzekJ1ZmZlciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqIHBOZXh0QnVmZmVyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3pOZXh0QnVmZmVyICkNCi17DQotICAgIHJldHVybiBBVDkxRl9QRENfUmVjZWl2ZUZyYW1lKA0KLSAgICAgICAgKCBBVDkxUFNfUERDICkgJiggcFNQSS0+U1BJX1JQUiApLA0KLSAgICAgICAgcEJ1ZmZlciwNCi0gICAgICAgIHN6QnVmZmVyLA0KLSAgICAgICAgcE5leHRCdWZmZXIsDQotICAgICAgICBzek5leHRCdWZmZXIgKTsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1BJX1NlbmRGcmFtZSAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIDIgaWYgUERDIGhhcyBiZWVuIGluaXRpYWxpemVkIHdpdGggQnVmZmVyIGFuZCBOZXh0IEJ1ZmZlciwgMSBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6YWVkIHdpdGggTmV4dCBCdWZmZXIsIDAgaWYgUERDIGlzIGJTUEl5ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9TUElfU2VuZEZyYW1lKCBBVDkxUFNfU1BJIHBTUEksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBwQnVmZmVyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3pCdWZmZXIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBwTmV4dEJ1ZmZlciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHN6TmV4dEJ1ZmZlciApDQotew0KLSAgICByZXR1cm4gQVQ5MUZfUERDX1NlbmRGcmFtZSgNCi0gICAgICAgICggQVQ5MVBTX1BEQyApICYoIHBTUEktPlNQSV9SUFIgKSwNCi0gICAgICAgIHBCdWZmZXIsDQotICAgICAgICBzekJ1ZmZlciwNCi0gICAgICAgIHBOZXh0QnVmZmVyLA0KLSAgICAgICAgc3pOZXh0QnVmZmVyICk7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1NQSV9DbG9zZSAqLw0KLS8qKiBcYnJpZWYgQ2xvc2UgU1BJOiBkaXNhYmxlIElUIGRpc2FibGUgdHJhbnNmZXJ0LCBjbG9zZSBQREMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9TUElfQ2xvc2UoIEFUOTFQU19TUEkgcFNQSSApIC8qIFxhcmcgcG9pbnRlciB0byBhIFNQSSBjb250cm9sbGVyICovDQotew0KLSAgICAvKiogUmVzZXQgYWxsIHRoZSBDaGlwIFNlbGVjdCByZWdpc3RlciAqLw0KLSAgICBwU1BJLT5TUElfQ1NSWyAwIF0gPSAwOw0KLSAgICBwU1BJLT5TUElfQ1NSWyAxIF0gPSAwOw0KLSAgICBwU1BJLT5TUElfQ1NSWyAyIF0gPSAwOw0KLSAgICBwU1BJLT5TUElfQ1NSWyAzIF0gPSAwOw0KLQ0KLSAgICAvKiogUmVzZXQgdGhlIFNQSSBtb2RlICovDQotICAgIHBTUEktPlNQSV9NUiA9IDA7DQotDQotICAgIC8qKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICovDQotICAgIHBTUEktPlNQSV9JRFIgPSAweEZGRkZGRkZGOw0KLQ0KLSAgICAvKiogQWJvcnQgdGhlIFBlcmlwaGVyYWwgRGF0YSBUcmFuc2ZlcnMgKi8NCi0gICAgQVQ5MUZfUERDX0Nsb3NlKCAoIEFUOTFQU19QREMgKSAmKCBwU1BJLT5TUElfUlBSICkgKTsNCi0NCi0gICAgLyoqIERpc2FibGUgcmVjZWl2ZXIgYW5kIHRyYW5zbWl0dGVyIGFuZCBzdG9wIGFueSBhY3Rpdml0eSBpbW1lZGlhdGVseSAqLw0KLSAgICBwU1BJLT5TUElfQ1IgPSBBVDkxQ19TUElfU1BJRElTOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9TUElfUHV0Q2hhciAqLw0KLS8qKiBcYnJpZWYgU2VuZCBhIGNoYXJhY3Rlcixkb2VzIG5vdCBjaGVjayBpZiByZWFkeSB0byBzZW5kICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfU1BJX1B1dENoYXIoIEFUOTFQU19TUEkgcFNQSSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY2hhcmFjdGVyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjc19udW1iZXIgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSV9QdXRDaGFyDQorLy8qIFxicmllZiBTZW5kIGEgY2hhcmFjdGVyLGRvZXMgbm90IGNoZWNrIGlmIHJlYWR5IHRvIHNlbmQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TUElfUHV0Q2hhciAoDQorCUFUOTFQU19TUEkgcFNQSSwNCisJdW5zaWduZWQgaW50IGNoYXJhY3RlciwNCisgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNzX251bWJlciApDQogew0KICAgICB1bnNpZ25lZCBpbnQgdmFsdWVfZm9yX2NzOw0KLQ0KLSAgICB2YWx1ZV9mb3JfY3MgPSAoIH4oIDEgPDwgY3NfbnVtYmVyICkgKSAmIDB4RjsgLypQbGFjZSBhIHplcm8gYW1vbmcgYSA0IE9ORXMgbnVtYmVyICovDQotICAgIHBTUEktPlNQSV9URFIgPSAoIGNoYXJhY3RlciAmIDB4RkZGRiApIHwgKCB2YWx1ZV9mb3JfY3MgPDwgMTYgKTsNCisgICAgdmFsdWVfZm9yX2NzID0gKH4oMSA8PCBjc19udW1iZXIpKSAmIDB4RjsgIC8vUGxhY2UgYSB6ZXJvIGFtb25nIGEgNCBPTkVzIG51bWJlcg0KKyAgICBwU1BJLT5TUElfVERSID0gKGNoYXJhY3RlciAmIDB4RkZGRikgfCAodmFsdWVfZm9yX2NzIDw8IDE2KTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1BJX0dldENoYXIgKi8NCi0vKiogXGJyaWVmIFJlY2VpdmUgYSBjaGFyYWN0ZXIsZG9lcyBub3QgY2hlY2sgaWYgYSBjaGFyYWN0ZXIgaXMgYXZhaWxhYmxlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIGludCBBVDkxRl9TUElfR2V0Q2hhciggY29uc3QgQVQ5MVBTX1NQSSBwU1BJICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUElfR2V0Q2hhcg0KKy8vKiBcYnJpZWYgUmVjZWl2ZSBhIGNoYXJhY3Rlcixkb2VzIG5vdCBjaGVjayBpZiBhIGNoYXJhY3RlciBpcyBhdmFpbGFibGUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1NQSV9HZXRDaGFyICgNCisJY29uc3QgQVQ5MVBTX1NQSSBwU1BJKQ0KIHsNCi0gICAgcmV0dXJuKCAoIHBTUEktPlNQSV9SRFIgKSAmIDB4RkZGRiApOw0KKyAgICByZXR1cm4oKHBTUEktPlNQSV9SRFIpICYgMHhGRkZGKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1BJX0dldEludGVycnVwdE1hc2tTdGF0dXMgKi8NCi0vKiogXGJyaWVmIFJldHVybiBTUEkgSW50ZXJydXB0IE1hc2sgU3RhdHVzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9TUElfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLyogXHJldHVybiBTUEkgSW50ZXJydXB0IE1hc2sgU3RhdHVzICovDQotICAgIEFUOTFQU19TUEkgcFNwaSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgU1BJIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUElfR2V0SW50ZXJydXB0TWFza1N0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFNQSSBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1NQSV9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCAvLyBccmV0dXJuIFNQSSBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisgICAgICAgIEFUOTFQU19TUEkgcFNwaSkgLy8gXGFyZyAgcG9pbnRlciB0byBhIFNQSSBjb250cm9sbGVyDQogew0KLSAgICByZXR1cm4gcFNwaS0+U1BJX0lNUjsNCisgICAgICAgIHJldHVybiBwU3BpLT5TUElfSU1SOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9TUElfSXNJbnRlcnJ1cHRNYXNrZWQgKi8NCi0vKiogXGJyaWVmIFRlc3QgaWYgU1BJIEludGVycnVwdCBpcyBNYXNrZWQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgaW50IEFUOTFGX1NQSV9Jc0ludGVycnVwdE1hc2tlZCggQVQ5MVBTX1NQSSBwU3BpLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgU1BJIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1BJX0lzSW50ZXJydXB0TWFza2VkDQorLy8qIFxicmllZiBUZXN0IGlmIFNQSSBJbnRlcnJ1cHQgaXMgTWFza2VkIA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfU1BJX0lzSW50ZXJydXB0TWFza2VkKA0KKyAgICAgICAgQVQ5MVBTX1NQSSBwU3BpLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBTUEkgY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQogew0KLSAgICByZXR1cm4oIEFUOTFGX1NQSV9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCBwU3BpICkgJiBmbGFnICk7DQorICAgICAgICByZXR1cm4gKEFUOTFGX1NQSV9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKHBTcGkpICYgZmxhZyk7DQogfQ0KIA0KIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotKiAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgVVNBUlQNCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VTX0JhdWRyYXRlICovDQotLyoqIFxicmllZiBDYWxjdWxhdGUgdGhlIGJhdWRyYXRlICovDQotLyoqIFN0YW5kYXJkIEFzeW5jaHJvbm91cyBNb2RlIDogOCBiaXRzICwgMSBzdG9wICwgbm8gcGFyaXR5ICovDQotI2RlZmluZSBBVDkxQ19VU19BU1lOQ19NT0RFICAgIFwNCi0gICAgKCBBVDkxQ19VU19VU01PREVfTk9STUFMICsgXA0KLSAgICAgIEFUOTFDX1VTX05CU1RPUF8xX0JJVCArICBcDQotICAgICAgQVQ5MUNfVVNfUEFSX05PTkUgKyAgICAgIFwNCi0gICAgICBBVDkxQ19VU19DSFJMXzhfQklUUyArICAgXA0KLSAgICAgIEFUOTFDX1VTX0NMS1NfQ0xPQ0sgKQ0KKyAgICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFVTQVJUDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19CYXVkcmF0ZQ0KKy8vKiBcYnJpZWYgQ2FsY3VsYXRlIHRoZSBiYXVkcmF0ZQ0KKy8vKiBTdGFuZGFyZCBBc3luY2hyb25vdXMgTW9kZSA6IDggYml0cyAsIDEgc3RvcCAsIG5vIHBhcml0eQ0KKyNkZWZpbmUgQVQ5MUNfVVNfQVNZTkNfTU9ERSAoIEFUOTFDX1VTX1VTTU9ERV9OT1JNQUwgKyBcDQorICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfTkJTVE9QXzFfQklUICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX1BBUl9OT05FICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX0NIUkxfOF9CSVRTICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX0NMS1NfQ0xPQ0sgKQ0KIA0KLS8qKiBTdGFuZGFyZCBFeHRlcm5hbCBBc3luY2hyb25vdXMgTW9kZSA6IDggYml0cyAsIDEgc3RvcCAsIG5vIHBhcml0eSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfQVNZTkNfU0NLX01PREUgXA0KLSAgICAoIEFUOTFDX1VTX1VTTU9ERV9OT1JNQUwgKyAgXA0KLSAgICAgIEFUOTFDX1VTX05CU1RPUF8xX0JJVCArICAgXA0KLSAgICAgIEFUOTFDX1VTX1BBUl9OT05FICsgICAgICAgXA0KLSAgICAgIEFUOTFDX1VTX0NIUkxfOF9CSVRTICsgICAgXA0KLSAgICAgIEFUOTFDX1VTX0NMS1NfRVhUICkNCisvLyogU3RhbmRhcmQgRXh0ZXJuYWwgQXN5bmNocm9ub3VzIE1vZGUgOiA4IGJpdHMgLCAxIHN0b3AgLCBubyBwYXJpdHkNCisjZGVmaW5lIEFUOTFDX1VTX0FTWU5DX1NDS19NT0RFICggQVQ5MUNfVVNfVVNNT0RFX05PUk1BTCArIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfTkJTVE9QXzFfQklUICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19QQVJfTk9ORSArIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfQ0hSTF84X0JJVFMgKyBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX0NMS1NfRVhUICkNCiANCi0vKiogU3RhbmRhcmQgU3luY2hyb25vdXMgTW9kZSA6IDggYml0cyAsIDEgc3RvcCAsIG5vIHBhcml0eSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfU1lOQ19NT0RFICAgICBcDQotICAgICggQVQ5MUNfVVNfU1lOQyArICAgICAgICAgIFwNCi0gICAgICBBVDkxQ19VU19VU01PREVfTk9STUFMICsgXA0KLSAgICAgIEFUOTFDX1VTX05CU1RPUF8xX0JJVCArICBcDQotICAgICAgQVQ5MUNfVVNfUEFSX05PTkUgKyAgICAgIFwNCi0gICAgICBBVDkxQ19VU19DSFJMXzhfQklUUyArICAgXA0KLSAgICAgIEFUOTFDX1VTX0NMS1NfQ0xPQ0sgKQ0KKy8vKiBTdGFuZGFyZCBTeW5jaHJvbm91cyBNb2RlIDogOCBiaXRzICwgMSBzdG9wICwgbm8gcGFyaXR5DQorI2RlZmluZSBBVDkxQ19VU19TWU5DX01PREUgKCBBVDkxQ19VU19TWU5DICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfVVNNT0RFX05PUk1BTCArIFwNCisgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX05CU1RPUF8xX0JJVCArIFwNCisgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX1BBUl9OT05FICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfQ0hSTF84X0JJVFMgKyBcDQorICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19DTEtTX0NMT0NLICkNCiANCi0vKiogU0NLIHVzZWQgTGFiZWwgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1NDS19VU0VEICAgICggQVQ5MUNfVVNfQ0tMTyB8IEFUOTFDX1VTX0NMS1NfRVhUICkNCisvLyogU0NLIHVzZWQgTGFiZWwNCisjZGVmaW5lIEFUOTFDX1VTX1NDS19VU0VEIChBVDkxQ19VU19DS0xPIHwgQVQ5MUNfVVNfQ0xLU19FWFQpDQogDQotLyoqIFN0YW5kYXJkIElTTyBUPTAgTW9kZSA6IDggYml0cyAsIDEgc3RvcCAsIHBhcml0eSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfSVNPX1JFQURFUl9NT0RFICBcDQotICAgICggQVQ5MUNfVVNfVVNNT0RFX0lTTzc4MTZfMCArIFwNCi0gICAgICBBVDkxQ19VU19DTEtTX0NMT0NLICsgICAgICAgXA0KLSAgICAgIEFUOTFDX1VTX05CU1RPUF8xX0JJVCArICAgICBcDQotICAgICAgQVQ5MUNfVVNfUEFSX0VWRU4gKyAgICAgICAgIFwNCi0gICAgICBBVDkxQ19VU19DSFJMXzhfQklUUyArICAgICAgXA0KLSAgICAgIEFUOTFDX1VTX0NLTE8gKyAgICAgICAgICAgICBcDQotICAgICAgQVQ5MUNfVVNfT1ZFUiApDQorLy8qIFN0YW5kYXJkIElTTyBUPTAgTW9kZSA6IDggYml0cyAsIDEgc3RvcCAsIHBhcml0eQ0KKyNkZWZpbmUgQVQ5MUNfVVNfSVNPX1JFQURFUl9NT0RFICggQVQ5MUNfVVNfVVNNT0RFX0lTTzc4MTZfMCArIFwNCisJCQkJCSAgIAkJIEFUOTFDX1VTX0NMS1NfQ0xPQ0sgK1wNCisgICAgICAgICAgICAgICAgICAgICAgIAkJIEFUOTFDX1VTX05CU1RPUF8xX0JJVCArIFwNCisgICAgICAgICAgICAgICAgICAgICAgIAkJIEFUOTFDX1VTX1BBUl9FVkVOICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgCQkgQVQ5MUNfVVNfQ0hSTF84X0JJVFMgKyBcDQorICAgICAgICAgICAgICAgICAgICAgICAJCSBBVDkxQ19VU19DS0xPICtcDQorICAgICAgICAgICAgICAgICAgICAgICAJCSBBVDkxQ19VU19PVkVSKQ0KIA0KLS8qKiBTdGFuZGFyZCBJUkRBIG1vZGUgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX0FTWU5DX0lSREFfTU9ERSBcDQotICAgICggQVQ5MUNfVVNfVVNNT0RFX0lSREEgKyAgICAgXA0KLSAgICAgIEFUOTFDX1VTX05CU1RPUF8xX0JJVCArICAgIFwNCi0gICAgICBBVDkxQ19VU19QQVJfTk9ORSArICAgICAgICBcDQotICAgICAgQVQ5MUNfVVNfQ0hSTF84X0JJVFMgKyAgICAgXA0KLSAgICAgIEFUOTFDX1VTX0NMS1NfQ0xPQ0sgKQ0KKy8vKiBTdGFuZGFyZCBJUkRBIG1vZGUNCisjZGVmaW5lIEFUOTFDX1VTX0FTWU5DX0lSREFfTU9ERSAoICBBVDkxQ19VU19VU01PREVfSVJEQSArIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfTkJTVE9QXzFfQklUICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19QQVJfTk9ORSArIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfQ0hSTF84X0JJVFMgKyBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX0NMS1NfQ0xPQ0sgKQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VTX0JhdWRyYXRlICovDQotLyoqIFxicmllZiBDYWx1Y3VsYXRlIGJhdWRfdmFsdWUgYWNjb3JkaW5nIHRvIHRoZSBtYWluIGNsb2NrIGFuZCB0aGUgYmF1ZCByYXRlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9VU19CYXVkcmF0ZSggY29uc3QgdW5zaWduZWQgaW50IG1haW5fY2xvY2ssIC8qIFxhcmcgcGVyaXBoZXJhbCBjbG9jayAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGJhdWRfcmF0ZSApIC8qIFxhcmcgVUFSVCBiYXVkcmF0ZSAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX0JhdWRyYXRlDQorLy8qIFxicmllZiBDYWx1Y3VsYXRlIGJhdWRfdmFsdWUgYWNjb3JkaW5nIHRvIHRoZSBtYWluIGNsb2NrIGFuZCB0aGUgYmF1ZCByYXRlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9VU19CYXVkcmF0ZSAoDQorCWNvbnN0IHVuc2lnbmVkIGludCBtYWluX2Nsb2NrLCAvLyBcYXJnIHBlcmlwaGVyYWwgY2xvY2sNCisJY29uc3QgdW5zaWduZWQgaW50IGJhdWRfcmF0ZSkgIC8vIFxhcmcgVUFSVCBiYXVkcmF0ZQ0KIHsNCi0gICAgdW5zaWduZWQgaW50IGJhdWRfdmFsdWUgPSAoICggbWFpbl9jbG9jayAqIDEwICkgLyAoIGJhdWRfcmF0ZSAqIDE2ICkgKTsNCi0NCi0gICAgaWYoICggYmF1ZF92YWx1ZSAlIDEwICkgPj0gNSApDQotICAgIHsNCi0gICAgICAgIGJhdWRfdmFsdWUgPSAoIGJhdWRfdmFsdWUgLyAxMCApICsgMTsNCi0gICAgfQ0KLSAgICBlbHNlDQotICAgIHsNCi0gICAgICAgIGJhdWRfdmFsdWUgLz0gMTA7DQotICAgIH0NCi0NCi0gICAgcmV0dXJuIGJhdWRfdmFsdWU7DQorCXVuc2lnbmVkIGludCBiYXVkX3ZhbHVlID0gKChtYWluX2Nsb2NrKjEwKS8oYmF1ZF9yYXRlICogMTYpKTsNCisJaWYgKChiYXVkX3ZhbHVlICUgMTApID49IDUpDQorCQliYXVkX3ZhbHVlID0gKGJhdWRfdmFsdWUgLyAxMCkgKyAxOw0KKwllbHNlDQorCQliYXVkX3ZhbHVlIC89IDEwOw0KKwlyZXR1cm4gYmF1ZF92YWx1ZTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVVNfU2V0QmF1ZHJhdGUgKi8NCi0vKiogXGJyaWVmIFNldCB0aGUgYmF1ZHJhdGUgYWNjb3JkaW5nIHRvIHRoZSBDUFUgY2xvY2sgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9VU19TZXRCYXVkcmF0ZSggQVQ5MVBTX1VTQVJUIHBVU0FSVCwgICAgLyogXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtYWluQ2xvY2ssIC8qIFxhcmcgcGVyaXBoZXJhbCBjbG9jayAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzcGVlZCApICAgIC8qIFxhcmcgVUFSVCBiYXVkcmF0ZSAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX1NldEJhdWRyYXRlDQorLy8qIFxicmllZiBTZXQgdGhlIGJhdWRyYXRlIGFjY29yZGluZyB0byB0aGUgQ1BVIGNsb2NrDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVVNfU2V0QmF1ZHJhdGUgKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJULCAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBtYWluQ2xvY2ssIC8vIFxhcmcgcGVyaXBoZXJhbCBjbG9jaw0KKwl1bnNpZ25lZCBpbnQgc3BlZWQpICAgICAvLyBcYXJnIFVBUlQgYmF1ZHJhdGUNCiB7DQotICAgIC8qKiBEZWZpbmUgdGhlIGJhdWQgcmF0ZSBkaXZpc29yIHJlZ2lzdGVyICovDQotICAgIHBVU0FSVC0+VVNfQlJHUiA9IEFUOTFGX1VTX0JhdWRyYXRlKCBtYWluQ2xvY2ssIHNwZWVkICk7DQorCS8vKiBEZWZpbmUgdGhlIGJhdWQgcmF0ZSBkaXZpc29yIHJlZ2lzdGVyDQorCXBVU0FSVC0+VVNfQlJHUiA9IEFUOTFGX1VTX0JhdWRyYXRlKG1haW5DbG9jaywgc3BlZWQpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9VU19TZXRUaW1lZ3VhcmQgKi8NCi0vKiogXGJyaWVmIFNldCBVU0FSVCB0aW1lZ3VhcmQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9VU19TZXRUaW1lZ3VhcmQoIEFUOTFQU19VU0FSVCBwVVNBUlQsICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB0aW1lZ3VhcmQgKSAvKiBcYXJnIHRpbWVndWFyZCB2YWx1ZSAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX1NldFRpbWVndWFyZA0KKy8vKiBcYnJpZWYgU2V0IFVTQVJUIHRpbWVndWFyZA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VTX1NldFRpbWVndWFyZCAoDQorCUFUOTFQU19VU0FSVCBwVVNBUlQsICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IHRpbWVndWFyZCkgLy8gXGFyZyB0aW1lZ3VhcmQgdmFsdWUNCiB7DQotICAgIC8qKiBXcml0ZSB0aGUgVGltZWd1YXJkIFJlZ2lzdGVyICovDQotICAgIHBVU0FSVC0+VVNfVFRHUiA9IHRpbWVndWFyZDsNCisJLy8qIFdyaXRlIHRoZSBUaW1lZ3VhcmQgUmVnaXN0ZXINCisJcFVTQVJULT5VU19UVEdSID0gdGltZWd1YXJkIDsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVVNfRW5hYmxlSXQgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBVU0FSVCBJVCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1VTX0VuYWJsZUl0KCBBVDkxUFNfVVNBUlQgcFVTQVJULCAvKiBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAgLyogXGFyZyBJVCB0byBiZSBlbmFibGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfRW5hYmxlSXQNCisvLyogXGJyaWVmIEVuYWJsZSBVU0FSVCBJVA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VTX0VuYWJsZUl0ICgNCisJQVQ5MVBTX1VTQVJUIHBVU0FSVCwgLy8gXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgICAvLyBcYXJnIElUIHRvIGJlIGVuYWJsZWQNCiB7DQotICAgIC8qKiBXcml0ZSB0byB0aGUgSUVSIHJlZ2lzdGVyICovDQotICAgIHBVU0FSVC0+VVNfSUVSID0gZmxhZzsNCisJLy8qIFdyaXRlIHRvIHRoZSBJRVIgcmVnaXN0ZXINCisJcFVTQVJULT5VU19JRVIgPSBmbGFnOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9VU19EaXNhYmxlSXQgKi8NCi0vKiogXGJyaWVmIERpc2FibGUgVVNBUlQgSVQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9VU19EaXNhYmxlSXQoIEFUOTFQU19VU0FSVCBwVVNBUlQsIC8qIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAgLyogXGFyZyBJVCB0byBiZSBkaXNhYmxlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX0Rpc2FibGVJdA0KKy8vKiBcYnJpZWYgRGlzYWJsZSBVU0FSVCBJVA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VTX0Rpc2FibGVJdCAoDQorCUFUOTFQU19VU0FSVCBwVVNBUlQsIC8vIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpICAgLy8gXGFyZyBJVCB0byBiZSBkaXNhYmxlZA0KIHsNCi0gICAgLyoqIFdyaXRlIHRvIHRoZSBJRVIgcmVnaXN0ZXIgKi8NCi0gICAgcFVTQVJULT5VU19JRFIgPSBmbGFnOw0KKwkvLyogV3JpdGUgdG8gdGhlIElFUiByZWdpc3Rlcg0KKwlwVVNBUlQtPlVTX0lEUiA9IGZsYWc7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VTX0NvbmZpZ3VyZSAqLw0KLS8qKiBcYnJpZWYgQ29uZmlndXJlIFVTQVJUICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVVNfQ29uZmlndXJlKCBBVDkxUFNfVVNBUlQgcFVTQVJULCAgICAgLyogXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbWFpbkNsb2NrLCAgLyogXGFyZyBwZXJpcGhlcmFsIGNsb2NrICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtb2RlLCAgICAgICAvKiBcYXJnIG1vZGUgUmVnaXN0ZXIgdG8gYmUgcHJvZ3JhbW1lZCAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYmF1ZFJhdGUsICAgLyogXGFyZyBiYXVkcmF0ZSB0byBiZSBwcm9ncmFtbWVkICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB0aW1lZ3VhcmQgKSAvKiBcYXJnIHRpbWVndWFyZCB0byBiZSBwcm9ncmFtbWVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfQ29uZmlndXJlDQorLy8qIFxicmllZiBDb25maWd1cmUgVVNBUlQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VU19Db25maWd1cmUgKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJULCAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgbWFpbkNsb2NrLCAgLy8gXGFyZyBwZXJpcGhlcmFsIGNsb2NrDQorCXVuc2lnbmVkIGludCBtb2RlICwgICAgICAvLyBcYXJnIG1vZGUgUmVnaXN0ZXIgdG8gYmUgcHJvZ3JhbW1lZA0KKwl1bnNpZ25lZCBpbnQgYmF1ZFJhdGUgLCAgLy8gXGFyZyBiYXVkcmF0ZSB0byBiZSBwcm9ncmFtbWVkDQorCXVuc2lnbmVkIGludCB0aW1lZ3VhcmQgKSAvLyBcYXJnIHRpbWVndWFyZCB0byBiZSBwcm9ncmFtbWVkDQogew0KLSAgICAvKiogRGlzYWJsZSBpbnRlcnJ1cHRzICovDQotICAgIHBVU0FSVC0+VVNfSURSID0gKCB1bnNpZ25lZCBpbnQgKSAtMTsNCisgICAgLy8qIERpc2FibGUgaW50ZXJydXB0cw0KKyAgICBwVVNBUlQtPlVTX0lEUiA9ICh1bnNpZ25lZCBpbnQpIC0xOw0KIA0KLSAgICAvKiogUmVzZXQgcmVjZWl2ZXIgYW5kIHRyYW5zbWl0dGVyICovDQotICAgIHBVU0FSVC0+VVNfQ1IgPSBBVDkxQ19VU19SU1RSWCB8IEFUOTFDX1VTX1JTVFRYIHwgQVQ5MUNfVVNfUlhESVMgfCBBVDkxQ19VU19UWERJUzsNCisgICAgLy8qIFJlc2V0IHJlY2VpdmVyIGFuZCB0cmFuc21pdHRlcg0KKyAgICBwVVNBUlQtPlVTX0NSID0gQVQ5MUNfVVNfUlNUUlggfCBBVDkxQ19VU19SU1RUWCB8IEFUOTFDX1VTX1JYRElTIHwgQVQ5MUNfVVNfVFhESVMgOw0KIA0KLSAgICAvKiogRGVmaW5lIHRoZSBiYXVkIHJhdGUgZGl2aXNvciByZWdpc3RlciAqLw0KLSAgICBBVDkxRl9VU19TZXRCYXVkcmF0ZSggcFVTQVJULCBtYWluQ2xvY2ssIGJhdWRSYXRlICk7DQorCS8vKiBEZWZpbmUgdGhlIGJhdWQgcmF0ZSBkaXZpc29yIHJlZ2lzdGVyDQorCUFUOTFGX1VTX1NldEJhdWRyYXRlKHBVU0FSVCwgbWFpbkNsb2NrLCBiYXVkUmF0ZSk7DQogDQotICAgIC8qKiBXcml0ZSB0aGUgVGltZWd1YXJkIFJlZ2lzdGVyICovDQotICAgIEFUOTFGX1VTX1NldFRpbWVndWFyZCggcFVTQVJULCB0aW1lZ3VhcmQgKTsNCisJLy8qIFdyaXRlIHRoZSBUaW1lZ3VhcmQgUmVnaXN0ZXINCisJQVQ5MUZfVVNfU2V0VGltZWd1YXJkKHBVU0FSVCwgdGltZWd1YXJkKTsNCiANCi0gICAgLyoqIENsZWFyIFRyYW5zbWl0IGFuZCBSZWNlaXZlIENvdW50ZXJzICovDQotICAgIEFUOTFGX1BEQ19PcGVuKCAoIEFUOTFQU19QREMgKSAmKCBwVVNBUlQtPlVTX1JQUiApICk7DQorICAgIC8vKiBDbGVhciBUcmFuc21pdCBhbmQgUmVjZWl2ZSBDb3VudGVycw0KKyAgICBBVDkxRl9QRENfT3BlbigoQVQ5MVBTX1BEQykgJihwVVNBUlQtPlVTX1JQUikpOw0KIA0KLSAgICAvKiogRGVmaW5lIHRoZSBVU0FSVCBtb2RlICovDQotICAgIHBVU0FSVC0+VVNfTVIgPSBtb2RlOw0KKyAgICAvLyogRGVmaW5lIHRoZSBVU0FSVCBtb2RlDQorICAgIHBVU0FSVC0+VVNfTVIgPSBtb2RlICA7DQorDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VTX0VuYWJsZVJ4ICovDQotLyoqIFxicmllZiBFbmFibGUgcmVjZWl2aW5nIGNoYXJhY3RlcnMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9VU19FbmFibGVSeCggQVQ5MVBTX1VTQVJUIHBVU0FSVCApIC8qIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19FbmFibGVSeA0KKy8vKiBcYnJpZWYgRW5hYmxlIHJlY2VpdmluZyBjaGFyYWN0ZXJzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVVNfRW5hYmxlUnggKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJUKSAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlcg0KIHsNCi0gICAgLyoqIEVuYWJsZSByZWNlaXZlciAqLw0KKyAgICAvLyogRW5hYmxlIHJlY2VpdmVyDQogICAgIHBVU0FSVC0+VVNfQ1IgPSBBVDkxQ19VU19SWEVOOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9VU19FbmFibGVUeCAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIHNlbmRpbmcgY2hhcmFjdGVycyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1VTX0VuYWJsZVR4KCBBVDkxUFNfVVNBUlQgcFVTQVJUICkgLyogXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX0VuYWJsZVR4DQorLy8qIFxicmllZiBFbmFibGUgc2VuZGluZyBjaGFyYWN0ZXJzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVVNfRW5hYmxlVHggKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJUKSAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlcg0KIHsNCi0gICAgLyoqIEVuYWJsZSAgdHJhbnNtaXR0ZXIgKi8NCisgICAgLy8qIEVuYWJsZSAgdHJhbnNtaXR0ZXINCiAgICAgcFVTQVJULT5VU19DUiA9IEFUOTFDX1VTX1RYRU47DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VTX1Jlc2V0UnggKi8NCi0vKiogXGJyaWVmIFJlc2V0IFJlY2VpdmVyIGFuZCByZS1lbmFibGUgaXQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9VU19SZXNldFJ4KCBBVDkxUFNfVVNBUlQgcFVTQVJUICkgLyogXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX1Jlc2V0UngNCisvLyogXGJyaWVmIFJlc2V0IFJlY2VpdmVyIGFuZCByZS1lbmFibGUgaXQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VU19SZXNldFJ4ICgNCisJQVQ5MVBTX1VTQVJUIHBVU0FSVCkgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXINCiB7DQotICAgIC8qKiBSZXNldCByZWNlaXZlciAqLw0KLSAgICBwVVNBUlQtPlVTX0NSID0gQVQ5MUNfVVNfUlNUUlg7DQotICAgIC8qKiBSZS1FbmFibGUgcmVjZWl2ZXIgKi8NCisJLy8qIFJlc2V0IHJlY2VpdmVyDQorCXBVU0FSVC0+VVNfQ1IgPSBBVDkxQ19VU19SU1RSWDsNCisgICAgLy8qIFJlLUVuYWJsZSByZWNlaXZlcg0KICAgICBwVVNBUlQtPlVTX0NSID0gQVQ5MUNfVVNfUlhFTjsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVVNfUmVzZXRUeCAqLw0KLS8qKiBcYnJpZWYgUmVzZXQgVHJhbnNtaXR0ZXIgYW5kIHJlLWVuYWJsZSBpdCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1VTX1Jlc2V0VHgoIEFUOTFQU19VU0FSVCBwVVNBUlQgKSAvKiBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfUmVzZXRUeA0KKy8vKiBcYnJpZWYgUmVzZXQgVHJhbnNtaXR0ZXIgYW5kIHJlLWVuYWJsZSBpdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VTX1Jlc2V0VHggKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJUKSAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlcg0KIHsNCi0gICAgLyoqIFJlc2V0IHRyYW5zbWl0dGVyICovDQotICAgIHBVU0FSVC0+VVNfQ1IgPSBBVDkxQ19VU19SU1RUWDsNCi0gICAgLyoqIEVuYWJsZSB0cmFuc21pdHRlciAqLw0KKwkvLyogUmVzZXQgdHJhbnNtaXR0ZXINCisJcFVTQVJULT5VU19DUiA9IEFUOTFDX1VTX1JTVFRYOw0KKyAgICAvLyogRW5hYmxlIHRyYW5zbWl0dGVyDQogICAgIHBVU0FSVC0+VVNfQ1IgPSBBVDkxQ19VU19UWEVOOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9VU19EaXNhYmxlUnggKi8NCi0vKiogXGJyaWVmIERpc2FibGUgUmVjZWl2ZXIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9VU19EaXNhYmxlUngoIEFUOTFQU19VU0FSVCBwVVNBUlQgKSAvKiBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfRGlzYWJsZVJ4DQorLy8qIFxicmllZiBEaXNhYmxlIFJlY2VpdmVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVVNfRGlzYWJsZVJ4ICgNCisJQVQ5MVBTX1VTQVJUIHBVU0FSVCkgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXINCiB7DQotICAgIC8qKiBEaXNhYmxlIHJlY2VpdmVyICovDQorICAgIC8vKiBEaXNhYmxlIHJlY2VpdmVyDQogICAgIHBVU0FSVC0+VVNfQ1IgPSBBVDkxQ19VU19SWERJUzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVVNfRGlzYWJsZVR4ICovDQotLyoqIFxicmllZiBEaXNhYmxlIFRyYW5zbWl0dGVyICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVVNfRGlzYWJsZVR4KCBBVDkxUFNfVVNBUlQgcFVTQVJUICkgLyogXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX0Rpc2FibGVUeA0KKy8vKiBcYnJpZWYgRGlzYWJsZSBUcmFuc21pdHRlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VTX0Rpc2FibGVUeCAoDQorCUFUOTFQU19VU0FSVCBwVVNBUlQpICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyDQogew0KLSAgICAvKiogRGlzYWJsZSB0cmFuc21pdHRlciAqLw0KKyAgICAvLyogRGlzYWJsZSB0cmFuc21pdHRlcg0KICAgICBwVVNBUlQtPlVTX0NSID0gQVQ5MUNfVVNfVFhESVM7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VTX0Nsb3NlICovDQotLyoqIFxicmllZiBDbG9zZSBVU0FSVDogZGlzYWJsZSBJVCBkaXNhYmxlIHJlY2VpdmVyIGFuZCB0cmFuc21pdHRlciwgY2xvc2UgUERDICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVVNfQ2xvc2UoIEFUOTFQU19VU0FSVCBwVVNBUlQgKSAvKiBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfQ2xvc2UNCisvLyogXGJyaWVmIENsb3NlIFVTQVJUOiBkaXNhYmxlIElUIGRpc2FibGUgcmVjZWl2ZXIgYW5kIHRyYW5zbWl0dGVyLCBjbG9zZSBQREMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VU19DbG9zZSAoDQorCUFUOTFQU19VU0FSVCBwVVNBUlQpICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyDQogew0KLSAgICAvKiogUmVzZXQgdGhlIGJhdWQgcmF0ZSBkaXZpc29yIHJlZ2lzdGVyICovDQotICAgIHBVU0FSVC0+VVNfQlJHUiA9IDA7DQorICAgIC8vKiBSZXNldCB0aGUgYmF1ZCByYXRlIGRpdmlzb3IgcmVnaXN0ZXINCisgICAgcFVTQVJULT5VU19CUkdSID0gMCA7DQogDQotICAgIC8qKiBSZXNldCB0aGUgVVNBUlQgbW9kZSAqLw0KLSAgICBwVVNBUlQtPlVTX01SID0gMDsNCisgICAgLy8qIFJlc2V0IHRoZSBVU0FSVCBtb2RlDQorICAgIHBVU0FSVC0+VVNfTVIgPSAwICA7DQogDQotICAgIC8qKiBSZXNldCB0aGUgVGltZWd1YXJkIFJlZ2lzdGVyICovDQorICAgIC8vKiBSZXNldCB0aGUgVGltZWd1YXJkIFJlZ2lzdGVyDQogICAgIHBVU0FSVC0+VVNfVFRHUiA9IDA7DQogDQotICAgIC8qKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICovDQotICAgIHBVU0FSVC0+VVNfSURSID0gMHhGRkZGRkZGRjsNCisgICAgLy8qIERpc2FibGUgYWxsIGludGVycnVwdHMNCisgICAgcFVTQVJULT5VU19JRFIgPSAweEZGRkZGRkZGIDsNCiANCi0gICAgLyoqIEFib3J0IHRoZSBQZXJpcGhlcmFsIERhdGEgVHJhbnNmZXJzICovDQotICAgIEFUOTFGX1BEQ19DbG9zZSggKCBBVDkxUFNfUERDICkgJiggcFVTQVJULT5VU19SUFIgKSApOw0KKyAgICAvLyogQWJvcnQgdGhlIFBlcmlwaGVyYWwgRGF0YSBUcmFuc2ZlcnMNCisgICAgQVQ5MUZfUERDX0Nsb3NlKChBVDkxUFNfUERDKSAmKHBVU0FSVC0+VVNfUlBSKSk7DQogDQotICAgIC8qKiBEaXNhYmxlIHJlY2VpdmVyIGFuZCB0cmFuc21pdHRlciBhbmQgc3RvcCBhbnkgYWN0aXZpdHkgaW1tZWRpYXRlbHkgKi8NCi0gICAgcFVTQVJULT5VU19DUiA9IEFUOTFDX1VTX1RYRElTIHwgQVQ5MUNfVVNfUlhESVMgfCBBVDkxQ19VU19SU1RUWCB8IEFUOTFDX1VTX1JTVFJYOw0KKyAgICAvLyogRGlzYWJsZSByZWNlaXZlciBhbmQgdHJhbnNtaXR0ZXIgYW5kIHN0b3AgYW55IGFjdGl2aXR5IGltbWVkaWF0ZWx5DQorICAgIHBVU0FSVC0+VVNfQ1IgPSBBVDkxQ19VU19UWERJUyB8IEFUOTFDX1VTX1JYRElTIHwgQVQ5MUNfVVNfUlNUVFggfCBBVDkxQ19VU19SU1RSWCA7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VTX1R4UmVhZHkgKi8NCi0vKiogXGJyaWVmIFJldHVybiAxIGlmIGEgY2hhcmFjdGVyIGNhbiBiZSB3cml0dGVuIGluIFVTX1RIUiAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVVNfVHhSZWFkeSggQVQ5MVBTX1VTQVJUIHBVU0FSVCApIC8qIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19UeFJlYWR5DQorLy8qIFxicmllZiBSZXR1cm4gMSBpZiBhIGNoYXJhY3RlciBjYW4gYmUgd3JpdHRlbiBpbiBVU19USFINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1VTX1R4UmVhZHkgKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJUICkgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXINCiB7DQotICAgIHJldHVybiggcFVTQVJULT5VU19DU1IgJiBBVDkxQ19VU19UWFJEWSApOw0KKyAgICByZXR1cm4gKHBVU0FSVC0+VVNfQ1NSICYgQVQ5MUNfVVNfVFhSRFkpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9VU19SeFJlYWR5ICovDQotLyoqIFxicmllZiBSZXR1cm4gMSBpZiBhIGNoYXJhY3RlciBjYW4gYmUgcmVhZCBpbiBVU19SSFIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1VTX1J4UmVhZHkoIEFUOTFQU19VU0FSVCBwVVNBUlQgKSAvKiBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfUnhSZWFkeQ0KKy8vKiBcYnJpZWYgUmV0dXJuIDEgaWYgYSBjaGFyYWN0ZXIgY2FuIGJlIHJlYWQgaW4gVVNfUkhSDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9VU19SeFJlYWR5ICgNCisJQVQ5MVBTX1VTQVJUIHBVU0FSVCApICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyDQogew0KLSAgICByZXR1cm4oIHBVU0FSVC0+VVNfQ1NSICYgQVQ5MUNfVVNfUlhSRFkgKTsNCisgICAgcmV0dXJuIChwVVNBUlQtPlVTX0NTUiAmIEFUOTFDX1VTX1JYUkRZKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVVNfRXJyb3IgKi8NCi0vKiogXGJyaWVmIFJldHVybiB0aGUgZXJyb3IgZmxhZyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVVNfRXJyb3IoIEFUOTFQU19VU0FSVCBwVVNBUlQgKSAvKiBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfRXJyb3INCisvLyogXGJyaWVmIFJldHVybiB0aGUgZXJyb3IgZmxhZw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVVNfRXJyb3IgKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJUICkgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXINCiB7DQotICAgIHJldHVybiggcFVTQVJULT5VU19DU1IgJg0KLSAgICAgICAgICAgICggQVQ5MUNfVVNfT1ZSRSB8ICAgIC8qIE92ZXJydW4gZXJyb3IgKi8NCi0gICAgICAgICAgICAgIEFUOTFDX1VTX0ZSQU1FIHwgICAvKiBGcmFtaW5nIGVycm9yICovDQotICAgICAgICAgICAgICBBVDkxQ19VU19QQVJFICkgKTsgLyogUGFyaXR5IGVycm9yICovDQorICAgIHJldHVybiAocFVTQVJULT5VU19DU1IgJg0KKyAgICAJKEFUOTFDX1VTX09WUkUgfCAgLy8gT3ZlcnJ1biBlcnJvcg0KKyAgICAJIEFUOTFDX1VTX0ZSQU1FIHwgLy8gRnJhbWluZyBlcnJvcg0KKyAgICAJIEFUOTFDX1VTX1BBUkUpKTsgIC8vIFBhcml0eSBlcnJvcg0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9VU19QdXRDaGFyICovDQotLyoqIFxicmllZiBTZW5kIGEgY2hhcmFjdGVyLGRvZXMgbm90IGNoZWNrIGlmIHJlYWR5IHRvIHNlbmQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9VU19QdXRDaGFyKCBBVDkxUFNfVVNBUlQgcFVTQVJULA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNoYXJhY3RlciApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfUHV0Q2hhcg0KKy8vKiBcYnJpZWYgU2VuZCBhIGNoYXJhY3Rlcixkb2VzIG5vdCBjaGVjayBpZiByZWFkeSB0byBzZW5kDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVVNfUHV0Q2hhciAoDQorCUFUOTFQU19VU0FSVCBwVVNBUlQsDQorCWludCBjaGFyYWN0ZXIgKQ0KIHsNCi0gICAgcFVTQVJULT5VU19USFIgPSAoIGNoYXJhY3RlciAmIDB4MUZGICk7DQorICAgIHBVU0FSVC0+VVNfVEhSID0gKGNoYXJhY3RlciAmIDB4MUZGKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVVNfR2V0Q2hhciAqLw0KLS8qKiBcYnJpZWYgUmVjZWl2ZSBhIGNoYXJhY3Rlcixkb2VzIG5vdCBjaGVjayBpZiBhIGNoYXJhY3RlciBpcyBhdmFpbGFibGUgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgaW50IEFUOTFGX1VTX0dldENoYXIoIGNvbnN0IEFUOTFQU19VU0FSVCBwVVNBUlQgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX0dldENoYXINCisvLyogXGJyaWVmIFJlY2VpdmUgYSBjaGFyYWN0ZXIsZG9lcyBub3QgY2hlY2sgaWYgYSBjaGFyYWN0ZXIgaXMgYXZhaWxhYmxlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9VU19HZXRDaGFyICgNCisJY29uc3QgQVQ5MVBTX1VTQVJUIHBVU0FSVCkNCiB7DQotICAgIHJldHVybiggKCBwVVNBUlQtPlVTX1JIUiApICYgMHgxRkYgKTsNCisgICAgcmV0dXJuKChwVVNBUlQtPlVTX1JIUikgJiAweDFGRik7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VTX1NlbmRGcmFtZSAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIDIgaWYgUERDIGhhcyBiZWVuIGluaXRpYWxpemVkIHdpdGggQnVmZmVyIGFuZCBOZXh0IEJ1ZmZlciwgMSBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6YWVkIHdpdGggTmV4dCBCdWZmZXIsIDAgaWYgUERDIGlzIGJ1c3kgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1VTX1NlbmRGcmFtZSggQVQ5MVBTX1VTQVJUIHBVU0FSVCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICogcEJ1ZmZlciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3pCdWZmZXIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqIHBOZXh0QnVmZmVyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzek5leHRCdWZmZXIgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX1NlbmRGcmFtZQ0KKy8vKiBcYnJpZWYgUmV0dXJuIDIgaWYgUERDIGhhcyBiZWVuIGluaXRpYWxpemVkIHdpdGggQnVmZmVyIGFuZCBOZXh0IEJ1ZmZlciwgMSBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6YWVkIHdpdGggTmV4dCBCdWZmZXIsIDAgaWYgUERDIGlzIGJ1c3kNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1VTX1NlbmRGcmFtZSgNCisJQVQ5MVBTX1VTQVJUIHBVU0FSVCwNCisJY2hhciAqcEJ1ZmZlciwNCisJdW5zaWduZWQgaW50IHN6QnVmZmVyLA0KKwljaGFyICpwTmV4dEJ1ZmZlciwNCisJdW5zaWduZWQgaW50IHN6TmV4dEJ1ZmZlciApDQogew0KLSAgICByZXR1cm4gQVQ5MUZfUERDX1NlbmRGcmFtZSgNCi0gICAgICAgICggQVQ5MVBTX1BEQyApICYoIHBVU0FSVC0+VVNfUlBSICksDQotICAgICAgICBwQnVmZmVyLA0KLSAgICAgICAgc3pCdWZmZXIsDQotICAgICAgICBwTmV4dEJ1ZmZlciwNCi0gICAgICAgIHN6TmV4dEJ1ZmZlciApOw0KKwlyZXR1cm4gQVQ5MUZfUERDX1NlbmRGcmFtZSgNCisJCShBVDkxUFNfUERDKSAmKHBVU0FSVC0+VVNfUlBSKSwNCisJCXBCdWZmZXIsDQorCQlzekJ1ZmZlciwNCisJCXBOZXh0QnVmZmVyLA0KKwkJc3pOZXh0QnVmZmVyKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVVNfUmVjZWl2ZUZyYW1lICovDQotLyoqIFxicmllZiBSZXR1cm4gMiBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgd2l0aCBCdWZmZXIgYW5kIE5leHQgQnVmZmVyLCAxIGlmIFBEQyBoYXMgYmVlbiBpbml0aWFsaXphZWQgd2l0aCBOZXh0IEJ1ZmZlciwgMCBpZiBQREMgaXMgYnVzeSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVVNfUmVjZWl2ZUZyYW1lKCBBVDkxUFNfVVNBUlQgcFVTQVJULA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBwQnVmZmVyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzekJ1ZmZlciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICogcE5leHRCdWZmZXIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHN6TmV4dEJ1ZmZlciApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfUmVjZWl2ZUZyYW1lDQorLy8qIFxicmllZiBSZXR1cm4gMiBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgd2l0aCBCdWZmZXIgYW5kIE5leHQgQnVmZmVyLCAxIGlmIFBEQyBoYXMgYmVlbiBpbml0aWFsaXphZWQgd2l0aCBOZXh0IEJ1ZmZlciwgMCBpZiBQREMgaXMgYnVzeQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVVNfUmVjZWl2ZUZyYW1lICgNCisJQVQ5MVBTX1VTQVJUIHBVU0FSVCwNCisJY2hhciAqcEJ1ZmZlciwNCisJdW5zaWduZWQgaW50IHN6QnVmZmVyLA0KKwljaGFyICpwTmV4dEJ1ZmZlciwNCisJdW5zaWduZWQgaW50IHN6TmV4dEJ1ZmZlciApDQogew0KLSAgICByZXR1cm4gQVQ5MUZfUERDX1JlY2VpdmVGcmFtZSgNCi0gICAgICAgICggQVQ5MVBTX1BEQyApICYoIHBVU0FSVC0+VVNfUlBSICksDQotICAgICAgICBwQnVmZmVyLA0KLSAgICAgICAgc3pCdWZmZXIsDQotICAgICAgICBwTmV4dEJ1ZmZlciwNCi0gICAgICAgIHN6TmV4dEJ1ZmZlciApOw0KKwlyZXR1cm4gQVQ5MUZfUERDX1JlY2VpdmVGcmFtZSgNCisJCShBVDkxUFNfUERDKSAmKHBVU0FSVC0+VVNfUlBSKSwNCisJCXBCdWZmZXIsDQorCQlzekJ1ZmZlciwNCisJCXBOZXh0QnVmZmVyLA0KKwkJc3pOZXh0QnVmZmVyKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVVNfU2V0SXJkYUZpbHRlciAqLw0KLS8qKiBcYnJpZWYgU2V0IHRoZSB2YWx1ZSBvZiBJckRhIGZpbHRlciB0cmVnaXN0ZXIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9VU19TZXRJcmRhRmlsdGVyKCBBVDkxUFNfVVNBUlQgcFVTQVJULA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciB2YWx1ZSApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfU2V0SXJkYUZpbHRlcg0KKy8vKiBcYnJpZWYgU2V0IHRoZSB2YWx1ZSBvZiBJckRhIGZpbHRlciB0cmVnaXN0ZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VU19TZXRJcmRhRmlsdGVyICgNCisJQVQ5MVBTX1VTQVJUIHBVU0FSVCwNCisJdW5zaWduZWQgY2hhciB2YWx1ZQ0KKykNCiB7DQotICAgIHBVU0FSVC0+VVNfSUYgPSB2YWx1ZTsNCisJcFVTQVJULT5VU19JRiA9IHZhbHVlOw0KIH0NCiANCiAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSogICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFNTQw0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyoqIERlZmluZSB0aGUgc3RhbmRhcmQgSTJTIG1vZGUgY29uZmlndXJhdGlvbiAqLw0KKyAgICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFNTQw0KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorLy8qIERlZmluZSB0aGUgc3RhbmRhcmQgSTJTIG1vZGUgY29uZmlndXJhdGlvbg0KIA0KLS8qKiBDb25maWd1cmF0aW9uIHRvIHNldCBpbiB0aGUgU1NDIFRyYW5zbWl0IENsb2NrIE1vZGUgUmVnaXN0ZXIgKi8NCi0vKiogUGFyYW1ldGVycyA6ICBuYl9iaXRfYnlfc2xvdCA6IDgsIDE2IG9yIDMyIGJpdHMgKi8NCi0vKiogICAgICAgICAgICAgICBuYl9zbG90X2J5X2ZyYW1lIDogbnVtYmVyIG9mIGNoYW5uZWxzICovDQotI2RlZmluZSBBVDkxQ19JMlNfQVNZX01BU1RFUl9UWF9TRVRUSU5HKCBuYl9iaXRfYnlfc2xvdCwgbmJfc2xvdF9ieV9mcmFtZSApIFwNCi0gICAgKCArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgIEFUOTFDX1NTQ19DS1NfRElWICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgQVQ5MUNfU1NDX0NLT19DT05USU5PVVMgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICBBVDkxQ19TU0NfQ0tHX05PTkUgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgIEFUOTFDX1NTQ19TVEFSVF9GQUxMX1JGICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgQVQ5MUNfU1NDX1NUVE9VVCArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAoICggMSA8PCAxNiApICYgQVQ5MUNfU1NDX1NUVERMWSApICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICggKCAoICggbmJfYml0X2J5X3Nsb3QgKiBuYl9zbG90X2J5X2ZyYW1lICkgLyAyICkgLSAxICkgPDwgMjQgKSApDQorLy8qIENvbmZpZ3VyYXRpb24gdG8gc2V0IGluIHRoZSBTU0MgVHJhbnNtaXQgQ2xvY2sgTW9kZSBSZWdpc3Rlcg0KKy8vKiBQYXJhbWV0ZXJzIDogIG5iX2JpdF9ieV9zbG90IDogOCwgMTYgb3IgMzIgYml0cw0KKy8vKiAJCQkgIG5iX3Nsb3RfYnlfZnJhbWUgOiBudW1iZXIgb2YgY2hhbm5lbHMNCisjZGVmaW5lIEFUOTFDX0kyU19BU1lfTUFTVEVSX1RYX1NFVFRJTkcobmJfYml0X2J5X3Nsb3QsIG5iX3Nsb3RfYnlfZnJhbWUpKCArXA0KKwkJCQkJCQkJCSAgIEFUOTFDX1NTQ19DS1NfRElWICAgK1wNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkgICBBVDkxQ19TU0NfQ0tPX0NPTlRJTk9VUyAgICAgICtcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJICAgQVQ5MUNfU1NDX0NLR19OT05FICAgICtcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfU1NDX1NUQVJUX0ZBTExfUkYgK1wNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkgICBBVDkxQ19TU0NfU1RUT1VUICArXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCSAgICgoMTw8MTYpICYgQVQ5MUNfU1NDX1NUVERMWSkgK1wNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkgICAoKCgobmJfYml0X2J5X3Nsb3QqbmJfc2xvdF9ieV9mcmFtZSkvMiktMSkgPDwyNCkpDQogDQogDQotLyoqIENvbmZpZ3VyYXRpb24gdG8gc2V0IGluIHRoZSBTU0MgVHJhbnNtaXQgRnJhbWUgTW9kZSBSZWdpc3RlciAqLw0KLS8qKiBQYXJhbWV0ZXJzIDogbmJfYml0X2J5X3Nsb3QgOiA4LCAxNiBvciAzMiBiaXRzICovDQotLyoqICAgICAgICAgICAgICBuYl9zbG90X2J5X2ZyYW1lIDogbnVtYmVyIG9mIGNoYW5uZWxzICovDQotI2RlZmluZSBBVDkxQ19JMlNfQVNZX1RYX0ZSQU1FX1NFVFRJTkcoIG5iX2JpdF9ieV9zbG90LCBuYl9zbG90X2J5X2ZyYW1lICkgXA0KLSAgICAoICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAoIG5iX2JpdF9ieV9zbG90IC0gMSApICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgQVQ5MUNfU1NDX01TQkYgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICggKCAoIG5iX3Nsb3RfYnlfZnJhbWUgLSAxICkgPDwgOCApICYgQVQ5MUNfU1NDX0RBVE5CICkgKyAgICAgICAgICAgIFwNCi0gICAgICAoICggKCBuYl9iaXRfYnlfc2xvdCAtIDEgKSA8PCAxNiApICYgQVQ5MUNfU1NDX0ZTTEVOICkgKyAgICAgICAgICAgICBcDQotICAgICAgQVQ5MUNfU1NDX0ZTT1NfTkVHQVRJVkUgKQ0KKy8vKiBDb25maWd1cmF0aW9uIHRvIHNldCBpbiB0aGUgU1NDIFRyYW5zbWl0IEZyYW1lIE1vZGUgUmVnaXN0ZXINCisvLyogUGFyYW1ldGVycyA6IG5iX2JpdF9ieV9zbG90IDogOCwgMTYgb3IgMzIgYml0cw0KKy8vKiAJCQkgbmJfc2xvdF9ieV9mcmFtZSA6IG51bWJlciBvZiBjaGFubmVscw0KKyNkZWZpbmUgQVQ5MUNfSTJTX0FTWV9UWF9GUkFNRV9TRVRUSU5HKG5iX2JpdF9ieV9zbG90LCBuYl9zbG90X2J5X2ZyYW1lKSggK1wNCisJCQkJCQkJCQkobmJfYml0X2J5X3Nsb3QtMSkgICtcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJQVQ5MUNfU1NDX01TQkYgICArXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCSgoKG5iX3Nsb3RfYnlfZnJhbWUtMSk8PDgpICYgQVQ5MUNfU1NDX0RBVE5CKSAgK1wNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkoKChuYl9iaXRfYnlfc2xvdC0xKTw8MTYpICYgQVQ5MUNfU1NDX0ZTTEVOKSArXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCUFUOTFDX1NTQ19GU09TX05FR0FUSVZFKQ0KIA0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1NTQ19TZXRCYXVkcmF0ZSAqLw0KLS8qKiBcYnJpZWYgU2V0IHRoZSBiYXVkcmF0ZSBhY2NvcmRpbmcgdG8gdGhlIENQVSBjbG9jayAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1NTQ19TZXRCYXVkcmF0ZSggQVQ5MVBTX1NTQyBwU1NDLCAgICAgICAgLyogXGFyZyBwb2ludGVyIHRvIGEgU1NDIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1haW5DbG9jaywgLyogXGFyZyBwZXJpcGhlcmFsIGNsb2NrICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzcGVlZCApICAgIC8qIFxhcmcgU1NDIGJhdWRyYXRlICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1NDX1NldEJhdWRyYXRlDQorLy8qIFxicmllZiBTZXQgdGhlIGJhdWRyYXRlIGFjY29yZGluZyB0byB0aGUgQ1BVIGNsb2NrDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1NDX1NldEJhdWRyYXRlICgNCisgICAgICAgIEFUOTFQU19TU0MgcFNTQywgICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFNTQyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgbWFpbkNsb2NrLCAvLyBcYXJnIHBlcmlwaGVyYWwgY2xvY2sNCisgICAgICAgIHVuc2lnbmVkIGludCBzcGVlZCkgICAgIC8vIFxhcmcgU1NDIGJhdWRyYXRlDQogew0KLSAgICB1bnNpZ25lZCBpbnQgYmF1ZF92YWx1ZTsNCi0NCi0gICAgLyoqIERlZmluZSB0aGUgYmF1ZCByYXRlIGRpdmlzb3IgcmVnaXN0ZXIgKi8NCi0gICAgaWYoIHNwZWVkID09IDAgKQ0KLSAgICB7DQotICAgICAgICBiYXVkX3ZhbHVlID0gMDsNCi0gICAgfQ0KLSAgICBlbHNlDQotICAgIHsNCi0gICAgICAgIGJhdWRfdmFsdWUgPSAoIHVuc2lnbmVkIGludCApICggbWFpbkNsb2NrICogMTAgKSAvICggMiAqIHNwZWVkICk7DQotDQotICAgICAgICBpZiggKCBiYXVkX3ZhbHVlICUgMTAgKSA+PSA1ICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBiYXVkX3ZhbHVlID0gKCBiYXVkX3ZhbHVlIC8gMTAgKSArIDE7DQotICAgICAgICB9DQorICAgICAgICB1bnNpZ25lZCBpbnQgYmF1ZF92YWx1ZTsNCisgICAgICAgIC8vKiBEZWZpbmUgdGhlIGJhdWQgcmF0ZSBkaXZpc29yIHJlZ2lzdGVyDQorICAgICAgICBpZiAoc3BlZWQgPT0gMCkNCisgICAgICAgICAgIGJhdWRfdmFsdWUgPSAwOw0KICAgICAgICAgZWxzZQ0KICAgICAgICAgew0KLSAgICAgICAgICAgIGJhdWRfdmFsdWUgLz0gMTA7DQorICAgICAgICAgICBiYXVkX3ZhbHVlID0gKHVuc2lnbmVkIGludCkgKG1haW5DbG9jayAqIDEwKS8oMipzcGVlZCk7DQorICAgICAgICAgICBpZiAoKGJhdWRfdmFsdWUgJSAxMCkgPj0gNSkNCisgICAgICAgICAgICAgICAgICBiYXVkX3ZhbHVlID0gKGJhdWRfdmFsdWUgLyAxMCkgKyAxOw0KKyAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgICAgICAgIGJhdWRfdmFsdWUgLz0gMTA7DQogICAgICAgICB9DQotICAgIH0NCiANCi0gICAgcFNTQy0+U1NDX0NNUiA9IGJhdWRfdmFsdWU7DQorICAgICAgICBwU1NDLT5TU0NfQ01SID0gYmF1ZF92YWx1ZTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1NDX0NvbmZpZ3VyZSAqLw0KLS8qKiBcYnJpZWYgQ29uZmlndXJlIFNTQyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1NTQ19Db25maWd1cmUoIEFUOTFQU19TU0MgcFNTQywgICAgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBTU0MgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHN5c3RfY2xvY2ssIC8qIFxhcmcgU3lzdGVtIENsb2NrIEZyZXF1ZW5jeSAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJhdWRfcmF0ZSwgIC8qIFxhcmcgRXhwZWN0ZWQgQmF1ZCBSYXRlIEZyZXF1ZW5jeSAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNsb2NrX3J4LCAgIC8qIFxhcmcgUmVjZWl2ZXIgQ2xvY2sgUGFyYW1ldGVycyAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1vZGVfcngsICAgIC8qIFxhcmcgbW9kZSBSZWdpc3RlciB0byBiZSBwcm9ncmFtbWVkICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY2xvY2tfdHgsICAgLyogXGFyZyBUcmFuc21pdHRlciBDbG9jayBQYXJhbWV0ZXJzICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbW9kZV90eCApICAgLyogXGFyZyBtb2RlIFJlZ2lzdGVyIHRvIGJlIHByb2dyYW1tZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TU0NfQ29uZmlndXJlDQorLy8qIFxicmllZiBDb25maWd1cmUgU1NDDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1NDX0NvbmZpZ3VyZSAoDQorICAgICAgICAgICAgIEFUOTFQU19TU0MgcFNTQywgICAgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgU1NDIGNvbnRyb2xsZXINCisgICAgICAgICAgICAgdW5zaWduZWQgaW50IHN5c3RfY2xvY2ssICAvLyBcYXJnIFN5c3RlbSBDbG9jayBGcmVxdWVuY3kNCisgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJhdWRfcmF0ZSwgICAvLyBcYXJnIEV4cGVjdGVkIEJhdWQgUmF0ZSBGcmVxdWVuY3kNCisgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNsb2NrX3J4LCAgICAvLyBcYXJnIFJlY2VpdmVyIENsb2NrIFBhcmFtZXRlcnMNCisgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1vZGVfcngsICAgICAvLyBcYXJnIG1vZGUgUmVnaXN0ZXIgdG8gYmUgcHJvZ3JhbW1lZA0KKyAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY2xvY2tfdHgsICAgIC8vIFxhcmcgVHJhbnNtaXR0ZXIgQ2xvY2sgUGFyYW1ldGVycw0KKyAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbW9kZV90eCkgICAgIC8vIFxhcmcgbW9kZSBSZWdpc3RlciB0byBiZSBwcm9ncmFtbWVkDQogew0KLSAgICAvKiogRGlzYWJsZSBpbnRlcnJ1cHRzICovDQotICAgIHBTU0MtPlNTQ19JRFIgPSAoIHVuc2lnbmVkIGludCApIC0xOw0KKyAgICAvLyogRGlzYWJsZSBpbnRlcnJ1cHRzDQorCXBTU0MtPlNTQ19JRFIgPSAodW5zaWduZWQgaW50KSAtMTsNCiANCi0gICAgLyoqIFJlc2V0IHJlY2VpdmVyIGFuZCB0cmFuc21pdHRlciAqLw0KLSAgICBwU1NDLT5TU0NfQ1IgPSBBVDkxQ19TU0NfU1dSU1QgfCBBVDkxQ19TU0NfUlhESVMgfCBBVDkxQ19TU0NfVFhESVM7DQorICAgIC8vKiBSZXNldCByZWNlaXZlciBhbmQgdHJhbnNtaXR0ZXINCisJcFNTQy0+U1NDX0NSID0gQVQ5MUNfU1NDX1NXUlNUIHwgQVQ5MUNfU1NDX1JYRElTIHwgQVQ5MUNfU1NDX1RYRElTIDsNCiANCi0gICAgLyoqIERlZmluZSB0aGUgQ2xvY2sgTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxRl9TU0NfU2V0QmF1ZHJhdGUoIHBTU0MsIHN5c3RfY2xvY2ssIGJhdWRfcmF0ZSApOw0KKyAgICAvLyogRGVmaW5lIHRoZSBDbG9jayBNb2RlIFJlZ2lzdGVyDQorCUFUOTFGX1NTQ19TZXRCYXVkcmF0ZShwU1NDLCBzeXN0X2Nsb2NrLCBiYXVkX3JhdGUpOw0KIA0KLSAgICAvKiogV3JpdGUgdGhlIFJlY2VpdmUgQ2xvY2sgTW9kZSBSZWdpc3RlciAqLw0KLSAgICBwU1NDLT5TU0NfUkNNUiA9IGNsb2NrX3J4Ow0KKyAgICAgLy8qIFdyaXRlIHRoZSBSZWNlaXZlIENsb2NrIE1vZGUgUmVnaXN0ZXINCisJcFNTQy0+U1NDX1JDTVIgPSAgY2xvY2tfcng7DQogDQotICAgIC8qKiBXcml0ZSB0aGUgVHJhbnNtaXQgQ2xvY2sgTW9kZSBSZWdpc3RlciAqLw0KLSAgICBwU1NDLT5TU0NfVENNUiA9IGNsb2NrX3R4Ow0KKyAgICAgLy8qIFdyaXRlIHRoZSBUcmFuc21pdCBDbG9jayBNb2RlIFJlZ2lzdGVyDQorCXBTU0MtPlNTQ19UQ01SID0gIGNsb2NrX3R4Ow0KIA0KLSAgICAvKiogV3JpdGUgdGhlIFJlY2VpdmUgRnJhbWUgTW9kZSBSZWdpc3RlciAqLw0KLSAgICBwU1NDLT5TU0NfUkZNUiA9IG1vZGVfcng7DQorICAgICAvLyogV3JpdGUgdGhlIFJlY2VpdmUgRnJhbWUgTW9kZSBSZWdpc3Rlcg0KKwlwU1NDLT5TU0NfUkZNUiA9ICBtb2RlX3J4Ow0KIA0KLSAgICAvKiogV3JpdGUgdGhlIFRyYW5zbWl0IEZyYW1lIE1vZGUgUmVnaXN0ZXIgKi8NCi0gICAgcFNTQy0+U1NDX1RGTVIgPSBtb2RlX3R4Ow0KKyAgICAgLy8qIFdyaXRlIHRoZSBUcmFuc21pdCBGcmFtZSBNb2RlIFJlZ2lzdGVyDQorCXBTU0MtPlNTQ19URk1SID0gIG1vZGVfdHg7DQogDQotICAgIC8qKiBDbGVhciBUcmFuc21pdCBhbmQgUmVjZWl2ZSBDb3VudGVycyAqLw0KLSAgICBBVDkxRl9QRENfT3BlbiggKCBBVDkxUFNfUERDICkgJiggcFNTQy0+U1NDX1JQUiApICk7DQorICAgIC8vKiBDbGVhciBUcmFuc21pdCBhbmQgUmVjZWl2ZSBDb3VudGVycw0KKwlBVDkxRl9QRENfT3BlbigoQVQ5MVBTX1BEQykgJihwU1NDLT5TU0NfUlBSKSk7DQorDQorDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1NTQ19FbmFibGVSeCAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIHJlY2VpdmluZyBkYXRhcyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1NTQ19FbmFibGVSeCggQVQ5MVBTX1NTQyBwU1NDICkgLyogXGFyZyBwb2ludGVyIHRvIGEgU1NDIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TU0NfRW5hYmxlUngNCisvLyogXGJyaWVmIEVuYWJsZSByZWNlaXZpbmcgZGF0YXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TU0NfRW5hYmxlUnggKA0KKwlBVDkxUFNfU1NDIHBTU0MpICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBTU0MgY29udHJvbGxlcg0KIHsNCi0gICAgLyoqIEVuYWJsZSByZWNlaXZlciAqLw0KKyAgICAvLyogRW5hYmxlIHJlY2VpdmVyDQogICAgIHBTU0MtPlNTQ19DUiA9IEFUOTFDX1NTQ19SWEVOOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9TU0NfRGlzYWJsZVJ4ICovDQotLyoqIFxicmllZiBEaXNhYmxlIHJlY2VpdmluZyBkYXRhcyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1NTQ19EaXNhYmxlUngoIEFUOTFQU19TU0MgcFNTQyApIC8qIFxhcmcgcG9pbnRlciB0byBhIFNTQyBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1NDX0Rpc2FibGVSeA0KKy8vKiBcYnJpZWYgRGlzYWJsZSByZWNlaXZpbmcgZGF0YXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TU0NfRGlzYWJsZVJ4ICgNCisJQVQ5MVBTX1NTQyBwU1NDKSAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgU1NDIGNvbnRyb2xsZXINCiB7DQotICAgIC8qKiBEaXNhYmxlIHJlY2VpdmVyICovDQorICAgIC8vKiBEaXNhYmxlIHJlY2VpdmVyDQogICAgIHBTU0MtPlNTQ19DUiA9IEFUOTFDX1NTQ19SWERJUzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1NDX0VuYWJsZVR4ICovDQotLyoqIFxicmllZiBFbmFibGUgc2VuZGluZyBkYXRhcyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1NTQ19FbmFibGVUeCggQVQ5MVBTX1NTQyBwU1NDICkgLyogXGFyZyBwb2ludGVyIHRvIGEgU1NDIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TU0NfRW5hYmxlVHgNCisvLyogXGJyaWVmIEVuYWJsZSBzZW5kaW5nIGRhdGFzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1NDX0VuYWJsZVR4ICgNCisJQVQ5MVBTX1NTQyBwU1NDKSAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgU1NDIGNvbnRyb2xsZXINCiB7DQotICAgIC8qKiBFbmFibGUgIHRyYW5zbWl0dGVyICovDQorICAgIC8vKiBFbmFibGUgIHRyYW5zbWl0dGVyDQogICAgIHBTU0MtPlNTQ19DUiA9IEFUOTFDX1NTQ19UWEVOOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9TU0NfRGlzYWJsZVR4ICovDQotLyoqIFxicmllZiBEaXNhYmxlIHNlbmRpbmcgZGF0YXMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9TU0NfRGlzYWJsZVR4KCBBVDkxUFNfU1NDIHBTU0MgKSAvKiBcYXJnIHBvaW50ZXIgdG8gYSBTU0MgY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NTQ19EaXNhYmxlVHgNCisvLyogXGJyaWVmIERpc2FibGUgc2VuZGluZyBkYXRhcw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NTQ19EaXNhYmxlVHggKA0KKwlBVDkxUFNfU1NDIHBTU0MpICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBTU0MgY29udHJvbGxlcg0KIHsNCi0gICAgLyoqIERpc2FibGUgIHRyYW5zbWl0dGVyICovDQorICAgIC8vKiBEaXNhYmxlICB0cmFuc21pdHRlcg0KICAgICBwU1NDLT5TU0NfQ1IgPSBBVDkxQ19TU0NfVFhESVM7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1NTQ19FbmFibGVJdCAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIFNTQyBJVCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1NTQ19FbmFibGVJdCggQVQ5MVBTX1NTQyBwU1NDLCAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBTU0MgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgSVQgdG8gYmUgZW5hYmxlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NTQ19FbmFibGVJdA0KKy8vKiBcYnJpZWYgRW5hYmxlIFNTQyBJVA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NTQ19FbmFibGVJdCAoDQorCUFUOTFQU19TU0MgcFNTQywgLy8gXGFyZyBwb2ludGVyIHRvIGEgU1NDIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpICAgLy8gXGFyZyBJVCB0byBiZSBlbmFibGVkDQogew0KLSAgICAvKiogV3JpdGUgdG8gdGhlIElFUiByZWdpc3RlciAqLw0KLSAgICBwU1NDLT5TU0NfSUVSID0gZmxhZzsNCisJLy8qIFdyaXRlIHRvIHRoZSBJRVIgcmVnaXN0ZXINCisJcFNTQy0+U1NDX0lFUiA9IGZsYWc7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1NTQ19EaXNhYmxlSXQgKi8NCi0vKiogXGJyaWVmIERpc2FibGUgU1NDIElUICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfU1NDX0Rpc2FibGVJdCggQVQ5MVBTX1NTQyBwU1NDLCAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBTU0MgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnIElUIHRvIGJlIGRpc2FibGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1NDX0Rpc2FibGVJdA0KKy8vKiBcYnJpZWYgRGlzYWJsZSBTU0MgSVQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TU0NfRGlzYWJsZUl0ICgNCisJQVQ5MVBTX1NTQyBwU1NDLCAvLyBcYXJnIHBvaW50ZXIgdG8gYSBTU0MgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgICAvLyBcYXJnIElUIHRvIGJlIGRpc2FibGVkDQogew0KLSAgICAvKiogV3JpdGUgdG8gdGhlIElEUiByZWdpc3RlciAqLw0KLSAgICBwU1NDLT5TU0NfSURSID0gZmxhZzsNCisJLy8qIFdyaXRlIHRvIHRoZSBJRFIgcmVnaXN0ZXINCisJcFNTQy0+U1NDX0lEUiA9IGZsYWc7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1NTQ19SZWNlaXZlRnJhbWUgKi8NCi0vKiogXGJyaWVmIFJldHVybiAyIGlmIFBEQyBoYXMgYmVlbiBpbml0aWFsaXplZCB3aXRoIEJ1ZmZlciBhbmQgTmV4dCBCdWZmZXIsIDEgaWYgUERDIGhhcyBiZWVuIGluaXRpYWxpemVkIHdpdGggTmV4dCBCdWZmZXIsIDAgaWYgUERDIGlzIGJ1c3kgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1NTQ19SZWNlaXZlRnJhbWUoIEFUOTFQU19TU0MgcFNTQywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqIHBCdWZmZXIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzekJ1ZmZlciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqIHBOZXh0QnVmZmVyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3pOZXh0QnVmZmVyICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TU0NfUmVjZWl2ZUZyYW1lDQorLy8qIFxicmllZiBSZXR1cm4gMiBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgd2l0aCBCdWZmZXIgYW5kIE5leHQgQnVmZmVyLCAxIGlmIFBEQyBoYXMgYmVlbiBpbml0aWFsaXplZCB3aXRoIE5leHQgQnVmZmVyLCAwIGlmIFBEQyBpcyBidXN5DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9TU0NfUmVjZWl2ZUZyYW1lICgNCisJQVQ5MVBTX1NTQyBwU1NDLA0KKwljaGFyICpwQnVmZmVyLA0KKwl1bnNpZ25lZCBpbnQgc3pCdWZmZXIsDQorCWNoYXIgKnBOZXh0QnVmZmVyLA0KKwl1bnNpZ25lZCBpbnQgc3pOZXh0QnVmZmVyICkNCiB7DQotICAgIHJldHVybiBBVDkxRl9QRENfUmVjZWl2ZUZyYW1lKA0KLSAgICAgICAgKCBBVDkxUFNfUERDICkgJiggcFNTQy0+U1NDX1JQUiApLA0KLSAgICAgICAgcEJ1ZmZlciwNCi0gICAgICAgIHN6QnVmZmVyLA0KLSAgICAgICAgcE5leHRCdWZmZXIsDQotICAgICAgICBzek5leHRCdWZmZXIgKTsNCisJcmV0dXJuIEFUOTFGX1BEQ19SZWNlaXZlRnJhbWUoDQorCQkoQVQ5MVBTX1BEQykgJihwU1NDLT5TU0NfUlBSKSwNCisJCXBCdWZmZXIsDQorCQlzekJ1ZmZlciwNCisJCXBOZXh0QnVmZmVyLA0KKwkJc3pOZXh0QnVmZmVyKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1NDX1NlbmRGcmFtZSAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIDIgaWYgUERDIGhhcyBiZWVuIGluaXRpYWxpemVkIHdpdGggQnVmZmVyIGFuZCBOZXh0IEJ1ZmZlciwgMSBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgd2l0aCBOZXh0IEJ1ZmZlciwgMCBpZiBQREMgaXMgYnVzeSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfU1NDX1NlbmRGcmFtZSggQVQ5MVBTX1NTQyBwU1NDLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICogcEJ1ZmZlciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHN6QnVmZmVyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICogcE5leHRCdWZmZXIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzek5leHRCdWZmZXIgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NTQ19TZW5kRnJhbWUNCisvLyogXGJyaWVmIFJldHVybiAyIGlmIFBEQyBoYXMgYmVlbiBpbml0aWFsaXplZCB3aXRoIEJ1ZmZlciBhbmQgTmV4dCBCdWZmZXIsIDEgaWYgUERDIGhhcyBiZWVuIGluaXRpYWxpemVkIHdpdGggTmV4dCBCdWZmZXIsIDAgaWYgUERDIGlzIGJ1c3kNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1NTQ19TZW5kRnJhbWUoDQorCUFUOTFQU19TU0MgcFNTQywNCisJY2hhciAqcEJ1ZmZlciwNCisJdW5zaWduZWQgaW50IHN6QnVmZmVyLA0KKwljaGFyICpwTmV4dEJ1ZmZlciwNCisJdW5zaWduZWQgaW50IHN6TmV4dEJ1ZmZlciApDQogew0KLSAgICByZXR1cm4gQVQ5MUZfUERDX1NlbmRGcmFtZSgNCi0gICAgICAgICggQVQ5MVBTX1BEQyApICYoIHBTU0MtPlNTQ19SUFIgKSwNCi0gICAgICAgIHBCdWZmZXIsDQotICAgICAgICBzekJ1ZmZlciwNCi0gICAgICAgIHBOZXh0QnVmZmVyLA0KLSAgICAgICAgc3pOZXh0QnVmZmVyICk7DQorCXJldHVybiBBVDkxRl9QRENfU2VuZEZyYW1lKA0KKwkJKEFUOTFQU19QREMpICYocFNTQy0+U1NDX1JQUiksDQorCQlwQnVmZmVyLA0KKwkJc3pCdWZmZXIsDQorCQlwTmV4dEJ1ZmZlciwNCisJCXN6TmV4dEJ1ZmZlcik7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1NTQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzICovDQotLyoqIFxicmllZiBSZXR1cm4gU1NDIEludGVycnVwdCBNYXNrIFN0YXR1cyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfU1NDX0dldEludGVycnVwdE1hc2tTdGF0dXMoIC8qIFxyZXR1cm4gU1NDIEludGVycnVwdCBNYXNrIFN0YXR1cyAqLw0KLSAgICBBVDkxUFNfU1NDIHBTc2MgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFNTQyBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1NDX0dldEludGVycnVwdE1hc2tTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBTU0MgSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9TU0NfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLy8gXHJldHVybiBTU0MgSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorICAgICAgICBBVDkxUFNfU1NDIHBTc2MpIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBTU0MgY29udHJvbGxlcg0KIHsNCi0gICAgcmV0dXJuIHBTc2MtPlNTQ19JTVI7DQorICAgICAgICByZXR1cm4gcFNzYy0+U1NDX0lNUjsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1NDX0lzSW50ZXJydXB0TWFza2VkICovDQotLyoqIFxicmllZiBUZXN0IGlmIFNTQyBJbnRlcnJ1cHQgaXMgTWFza2VkICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIGludCBBVDkxRl9TU0NfSXNJbnRlcnJ1cHRNYXNrZWQoIEFUOTFQU19TU0MgcFNzYywgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFNTQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NTQ19Jc0ludGVycnVwdE1hc2tlZA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBTU0MgSW50ZXJydXB0IGlzIE1hc2tlZCANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1NTQ19Jc0ludGVycnVwdE1hc2tlZCgNCisgICAgICAgIEFUOTFQU19TU0MgcFNzYywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgU1NDIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KIHsNCi0gICAgcmV0dXJuKCBBVDkxRl9TU0NfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggcFNzYyApICYgZmxhZyApOw0KKyAgICAgICAgcmV0dXJuIChBVDkxRl9TU0NfR2V0SW50ZXJydXB0TWFza1N0YXR1cyhwU3NjKSAmIGZsYWcpOw0KIH0NCiANCiAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSogICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFRXSQ0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVFdJX0VuYWJsZUl0ICovDQotLyoqIFxicmllZiBFbmFibGUgVFdJIElUICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVFdJX0VuYWJsZUl0KCBBVDkxUFNfVFdJIHBUV0ksICAgIC8qIFxhcmcgcG9pbnRlciB0byBhIFRXSSBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyBJVCB0byBiZSBlbmFibGVkICovDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgVFdJDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UV0lfRW5hYmxlSXQNCisvLyogXGJyaWVmIEVuYWJsZSBUV0kgSVQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UV0lfRW5hYmxlSXQgKA0KKwlBVDkxUFNfVFdJIHBUV0ksIC8vIFxhcmcgcG9pbnRlciB0byBhIFRXSSBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAgIC8vIFxhcmcgSVQgdG8gYmUgZW5hYmxlZA0KIHsNCi0gICAgLyoqIFdyaXRlIHRvIHRoZSBJRVIgcmVnaXN0ZXIgKi8NCi0gICAgcFRXSS0+VFdJX0lFUiA9IGZsYWc7DQorCS8vKiBXcml0ZSB0byB0aGUgSUVSIHJlZ2lzdGVyDQorCXBUV0ktPlRXSV9JRVIgPSBmbGFnOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9UV0lfRGlzYWJsZUl0ICovDQotLyoqIFxicmllZiBEaXNhYmxlIFRXSSBJVCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1RXSV9EaXNhYmxlSXQoIEFUOTFQU19UV0kgcFRXSSwgICAgLyogXGFyZyBwb2ludGVyIHRvIGEgVFdJIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyBJVCB0byBiZSBkaXNhYmxlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RXSV9EaXNhYmxlSXQNCisvLyogXGJyaWVmIERpc2FibGUgVFdJIElUDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVFdJX0Rpc2FibGVJdCAoDQorCUFUOTFQU19UV0kgcFRXSSwgLy8gXGFyZyBwb2ludGVyIHRvIGEgVFdJIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpICAgLy8gXGFyZyBJVCB0byBiZSBkaXNhYmxlZA0KIHsNCi0gICAgLyoqIFdyaXRlIHRvIHRoZSBJRFIgcmVnaXN0ZXIgKi8NCi0gICAgcFRXSS0+VFdJX0lEUiA9IGZsYWc7DQorCS8vKiBXcml0ZSB0byB0aGUgSURSIHJlZ2lzdGVyDQorCXBUV0ktPlRXSV9JRFIgPSBmbGFnOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9UV0lfQ29uZmlndXJlICovDQotLyoqIFxicmllZiBDb25maWd1cmUgVFdJIGluIG1hc3RlciBtb2RlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVFdJX0NvbmZpZ3VyZSggQVQ5MVBTX1RXSSBwVFdJICkgLyogXGFyZyBwb2ludGVyIHRvIGEgVFdJIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UV0lfQ29uZmlndXJlDQorLy8qIFxicmllZiBDb25maWd1cmUgVFdJIGluIG1hc3RlciBtb2RlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVFdJX0NvbmZpZ3VyZSAoIEFUOTFQU19UV0kgcFRXSSApICAgICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFRXSSBjb250cm9sbGVyDQogew0KLSAgICAvKiogRGlzYWJsZSBpbnRlcnJ1cHRzICovDQotICAgIHBUV0ktPlRXSV9JRFIgPSAoIHVuc2lnbmVkIGludCApIC0xOw0KKyAgICAvLyogRGlzYWJsZSBpbnRlcnJ1cHRzDQorCXBUV0ktPlRXSV9JRFIgPSAodW5zaWduZWQgaW50KSAtMTsNCiANCi0gICAgLyoqIFJlc2V0IHBlcmlwaGVyYWwgKi8NCi0gICAgcFRXSS0+VFdJX0NSID0gQVQ5MUNfVFdJX1NXUlNUOw0KKyAgICAvLyogUmVzZXQgcGVyaXBoZXJhbA0KKwlwVFdJLT5UV0lfQ1IgPSBBVDkxQ19UV0lfU1dSU1Q7DQogDQotICAgIC8qKiBTZXQgTWFzdGVyIG1vZGUgKi8NCi0gICAgcFRXSS0+VFdJX0NSID0gQVQ5MUNfVFdJX01TRU47DQorCS8vKiBTZXQgTWFzdGVyIG1vZGUNCisJcFRXSS0+VFdJX0NSID0gQVQ5MUNfVFdJX01TRU47DQorDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1RXSV9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzICovDQotLyoqIFxicmllZiBSZXR1cm4gVFdJIEludGVycnVwdCBNYXNrIFN0YXR1cyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVFdJX0dldEludGVycnVwdE1hc2tTdGF0dXMoIC8qIFxyZXR1cm4gVFdJIEludGVycnVwdCBNYXNrIFN0YXR1cyAqLw0KLSAgICBBVDkxUFNfVFdJIHBUd2kgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFRXSSBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVFdJX0dldEludGVycnVwdE1hc2tTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBUV0kgSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9UV0lfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLy8gXHJldHVybiBUV0kgSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorICAgICAgICBBVDkxUFNfVFdJIHBUd2kpIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBUV0kgY29udHJvbGxlcg0KIHsNCi0gICAgcmV0dXJuIHBUd2ktPlRXSV9JTVI7DQorICAgICAgICByZXR1cm4gcFR3aS0+VFdJX0lNUjsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVFdJX0lzSW50ZXJydXB0TWFza2VkICovDQotLyoqIFxicmllZiBUZXN0IGlmIFRXSSBJbnRlcnJ1cHQgaXMgTWFza2VkICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIGludCBBVDkxRl9UV0lfSXNJbnRlcnJ1cHRNYXNrZWQoIEFUOTFQU19UV0kgcFR3aSwgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFRXSSBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RXSV9Jc0ludGVycnVwdE1hc2tlZA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBUV0kgSW50ZXJydXB0IGlzIE1hc2tlZCANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1RXSV9Jc0ludGVycnVwdE1hc2tlZCgNCisgICAgICAgIEFUOTFQU19UV0kgcFR3aSwgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgVFdJIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KIHsNCi0gICAgcmV0dXJuKCBBVDkxRl9UV0lfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggcFR3aSApICYgZmxhZyApOw0KKyAgICAgICAgcmV0dXJuIChBVDkxRl9UV0lfR2V0SW50ZXJydXB0TWFza1N0YXR1cyhwVHdpKSAmIGZsYWcpOw0KIH0NCiANCiAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSogICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFBXTUMNCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BXTV9HZXRTdGF0dXMgKi8NCi0vKiogXGJyaWVmIFJldHVybiBQV00gSW50ZXJydXB0IFN0YXR1cyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUFdNQ19HZXRTdGF0dXMoIC8qIFxyZXR1cm4gUFdNIEludGVycnVwdCBTdGF0dXMgKi8NCi0gICAgQVQ5MVBTX1BXTUMgcFBXTSApICAgICAgICAgICAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gYSBQV00gY29udHJvbGxlciAqLw0KKyAgICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFBXTUMNCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BXTV9HZXRTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBQV00gSW50ZXJydXB0IFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUFdNQ19HZXRTdGF0dXMoIC8vIFxyZXR1cm4gUFdNIEludGVycnVwdCBTdGF0dXMNCisJQVQ5MVBTX1BXTUMgcFBXTSkgLy8gcG9pbnRlciB0byBhIFBXTSBjb250cm9sbGVyDQogew0KLSAgICByZXR1cm4gcFBXTS0+UFdNQ19TUjsNCisJcmV0dXJuIHBQV00tPlBXTUNfU1I7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BXTV9JbnRlcnJ1cHRFbmFibGUgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBQV00gSW50ZXJydXB0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUFdNQ19JbnRlcnJ1cHRFbmFibGUoIEFUOTFQU19QV01DIHBQd20sICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBXTSBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBQV00gaW50ZXJydXB0IHRvIGJlIGVuYWJsZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QV01fSW50ZXJydXB0RW5hYmxlDQorLy8qIFxicmllZiBFbmFibGUgUFdNIEludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BXTUNfSW50ZXJydXB0RW5hYmxlKA0KKyAgICAgICAgQVQ5MVBTX1BXTUMgcFB3bSwgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUFdNIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBQV00gaW50ZXJydXB0IHRvIGJlIGVuYWJsZWQNCiB7DQotICAgIHBQd20tPlBXTUNfSUVSID0gZmxhZzsNCisgICAgICAgIHBQd20tPlBXTUNfSUVSID0gZmxhZzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUFdNX0ludGVycnVwdERpc2FibGUgKi8NCi0vKiogXGJyaWVmIERpc2FibGUgUFdNIEludGVycnVwdCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BXTUNfSW50ZXJydXB0RGlzYWJsZSggQVQ5MVBTX1BXTUMgcFB3bSwgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUFdNIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBQV00gaW50ZXJydXB0IHRvIGJlIGRpc2FibGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUFdNX0ludGVycnVwdERpc2FibGUNCisvLyogXGJyaWVmIERpc2FibGUgUFdNIEludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BXTUNfSW50ZXJydXB0RGlzYWJsZSgNCisgICAgICAgIEFUOTFQU19QV01DIHBQd20sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBXTSBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgUFdNIGludGVycnVwdCB0byBiZSBkaXNhYmxlZA0KIHsNCi0gICAgcFB3bS0+UFdNQ19JRFIgPSBmbGFnOw0KKyAgICAgICAgcFB3bS0+UFdNQ19JRFIgPSBmbGFnOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QV01fR2V0SW50ZXJydXB0TWFza1N0YXR1cyAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIFBXTSBJbnRlcnJ1cHQgTWFzayBTdGF0dXMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BXTUNfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLyogXHJldHVybiBQV00gSW50ZXJydXB0IE1hc2sgU3RhdHVzICovDQotICAgIEFUOTFQU19QV01DIHBQd20gKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBXTSBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUFdNX0dldEludGVycnVwdE1hc2tTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBQV00gSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QV01DX0dldEludGVycnVwdE1hc2tTdGF0dXMoIC8vIFxyZXR1cm4gUFdNIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKyAgICAgICAgQVQ5MVBTX1BXTUMgcFB3bSkgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBXTSBjb250cm9sbGVyDQogew0KLSAgICByZXR1cm4gcFB3bS0+UFdNQ19JTVI7DQorICAgICAgICByZXR1cm4gcFB3bS0+UFdNQ19JTVI7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BXTV9Jc0ludGVycnVwdE1hc2tlZCAqLw0KLS8qKiBcYnJpZWYgVGVzdCBpZiBQV00gSW50ZXJydXB0IGlzIE1hc2tlZCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUFdNQ19Jc0ludGVycnVwdE1hc2tlZCggQVQ5MVBTX1BXTUMgcFBXTSwgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUFdNIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BXTV9Jc0ludGVycnVwdE1hc2tlZA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBQV00gSW50ZXJydXB0IGlzIE1hc2tlZA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUFdNQ19Jc0ludGVycnVwdE1hc2tlZCgNCisgICAgICAgIEFUOTFQU19QV01DIHBQV00sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBXTSBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCiB7DQotICAgIHJldHVybiggQVQ5MUZfUFdNQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCBwUFdNICkgJiBmbGFnICk7DQorCXJldHVybiAoQVQ5MUZfUFdNQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKHBQV00pICYgZmxhZyk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BXTV9Jc1N0YXR1c1NldCAqLw0KLS8qKiBcYnJpZWYgVGVzdCBpZiBQV00gSW50ZXJydXB0IGlzIFNldCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUFdNQ19Jc1N0YXR1c1NldCggQVQ5MVBTX1BXTUMgcFBXTSwgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUFdNIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BXTV9Jc1N0YXR1c1NldA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBQV00gSW50ZXJydXB0IGlzIFNldA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUFdNQ19Jc1N0YXR1c1NldCgNCisgICAgICAgIEFUOTFQU19QV01DIHBQV00sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBXTSBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCiB7DQotICAgIHJldHVybiggQVQ5MUZfUFdNQ19HZXRTdGF0dXMoIHBQV00gKSAmIGZsYWcgKTsNCisJcmV0dXJuIChBVDkxRl9QV01DX0dldFN0YXR1cyhwUFdNKSAmIGZsYWcpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QV01fQ2ZnQ2hhbm5lbCAqLw0KLS8qKiBcYnJpZWYgVGVzdCBpZiBQV00gSW50ZXJydXB0IGlzIFNldCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BXTUNfQ2ZnQ2hhbm5lbCggQVQ5MVBTX1BXTUMgcFBXTSwgICAgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBXTSBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjaGFubmVsSWQsIC8qIFxhcmcgUFdNIGNoYW5uZWwgSUQgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1vZGUsICAgICAgLyogXGFyZyAgUFdNIG1vZGUgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHBlcmlvZCwgICAgLyogXGFyZyBQV00gcGVyaW9kICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBkdXR5ICkgICAgIC8qIFxhcmcgUFdNIGR1dHkgY3ljbGUgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QV01fQ2ZnQ2hhbm5lbA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBQV00gSW50ZXJydXB0IGlzIFNldA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BXTUNfQ2ZnQ2hhbm5lbCgNCisgICAgICAgIEFUOTFQU19QV01DIHBQV00sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBXTSBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgY2hhbm5lbElkLCAvLyBcYXJnIFBXTSBjaGFubmVsIElEDQorICAgICAgICB1bnNpZ25lZCBpbnQgbW9kZSwgLy8gXGFyZyAgUFdNIG1vZGUNCisgICAgICAgIHVuc2lnbmVkIGludCBwZXJpb2QsIC8vIFxhcmcgUFdNIHBlcmlvZA0KKyAgICAgICAgdW5zaWduZWQgaW50IGR1dHkpIC8vIFxhcmcgUFdNIGR1dHkgY3ljbGUNCiB7DQotICAgIHBQV00tPlBXTUNfQ0hbIGNoYW5uZWxJZCBdLlBXTUNfQ01SID0gbW9kZTsNCi0gICAgcFBXTS0+UFdNQ19DSFsgY2hhbm5lbElkIF0uUFdNQ19DRFRZUiA9IGR1dHk7DQotICAgIHBQV00tPlBXTUNfQ0hbIGNoYW5uZWxJZCBdLlBXTUNfQ1BSRFIgPSBwZXJpb2Q7DQorCXBQV00tPlBXTUNfQ0hbY2hhbm5lbElkXS5QV01DX0NNUiA9IG1vZGU7DQorCXBQV00tPlBXTUNfQ0hbY2hhbm5lbElkXS5QV01DX0NEVFlSID0gZHV0eTsNCisJcFBXTS0+UFdNQ19DSFtjaGFubmVsSWRdLlBXTUNfQ1BSRFIgPSBwZXJpb2Q7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BXTV9TdGFydENoYW5uZWwgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBjaGFubmVsICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUFdNQ19TdGFydENoYW5uZWwoIEFUOTFQU19QV01DIHBQV00sICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBXTSBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBDaGFubmVscyBJRHMgdG8gYmUgZW5hYmxlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BXTV9TdGFydENoYW5uZWwNCisvLyogXGJyaWVmIEVuYWJsZSBjaGFubmVsDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUFdNQ19TdGFydENoYW5uZWwoDQorICAgICAgICBBVDkxUFNfUFdNQyBwUFdNLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQV00gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIENoYW5uZWxzIElEcyB0byBiZSBlbmFibGVkDQogew0KLSAgICBwUFdNLT5QV01DX0VOQSA9IGZsYWc7DQorCXBQV00tPlBXTUNfRU5BID0gZmxhZzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUFdNX1N0b3BDaGFubmVsICovDQotLyoqIFxicmllZiBEaXNhYmxlIGNoYW5uZWwgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QV01DX1N0b3BDaGFubmVsKCBBVDkxUFNfUFdNQyBwUFdNLCAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQV00gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBDaGFubmVscyBJRHMgdG8gYmUgZW5hYmxlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BXTV9TdG9wQ2hhbm5lbA0KKy8vKiBcYnJpZWYgRGlzYWJsZSBjaGFubmVsDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUFdNQ19TdG9wQ2hhbm5lbCgNCisgICAgICAgIEFUOTFQU19QV01DIHBQV00sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBXTSBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgQ2hhbm5lbHMgSURzIHRvIGJlIGVuYWJsZWQNCiB7DQotICAgIHBQV00tPlBXTUNfRElTID0gZmxhZzsNCisJcFBXTS0+UFdNQ19ESVMgPSBmbGFnOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QV01fVXBkYXRlQ2hhbm5lbCAqLw0KLS8qKiBcYnJpZWYgVXBkYXRlIFBlcmlvZCBvciBEdXR5IEN5Y2xlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUFdNQ19VcGRhdGVDaGFubmVsKCBBVDkxUFNfUFdNQyBwUFdNLCAgICAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUFdNIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNoYW5uZWxJZCwgLyogXGFyZyBQV00gY2hhbm5lbCBJRCAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdXBkYXRlICkgICAvKiBcYXJnICBDaGFubmVscyBJRHMgdG8gYmUgZW5hYmxlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BXTV9VcGRhdGVDaGFubmVsDQorLy8qIFxicmllZiBVcGRhdGUgUGVyaW9kIG9yIER1dHkgQ3ljbGUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QV01DX1VwZGF0ZUNoYW5uZWwoDQorICAgICAgICBBVDkxUFNfUFdNQyBwUFdNLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQV00gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGNoYW5uZWxJZCwgLy8gXGFyZyBQV00gY2hhbm5lbCBJRA0KKyAgICAgICAgdW5zaWduZWQgaW50IHVwZGF0ZSkgLy8gXGFyZyAgQ2hhbm5lbHMgSURzIHRvIGJlIGVuYWJsZWQNCiB7DQotICAgIHBQV00tPlBXTUNfQ0hbIGNoYW5uZWxJZCBdLlBXTUNfQ1VQRFIgPSB1cGRhdGU7DQorCXBQV00tPlBXTUNfQ0hbY2hhbm5lbElkXS5QV01DX0NVUERSID0gdXBkYXRlOw0KIH0NCiANCiAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSogICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFVEUA0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVURQX0VuYWJsZUl0ICovDQotLyoqIFxicmllZiBFbmFibGUgVURQIElUICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVURQX0VuYWJsZUl0KCBBVDkxUFNfVURQIHBVRFAsICAgIC8qIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyBJVCB0byBiZSBlbmFibGVkICovDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgVURQDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfRW5hYmxlSXQNCisvLyogXGJyaWVmIEVuYWJsZSBVRFAgSVQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfRW5hYmxlSXQgKA0KKwlBVDkxUFNfVURQIHBVRFAsICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgICAvLyBcYXJnIElUIHRvIGJlIGVuYWJsZWQNCiB7DQotICAgIC8qKiBXcml0ZSB0byB0aGUgSUVSIHJlZ2lzdGVyICovDQotICAgIHBVRFAtPlVEUF9JRVIgPSBmbGFnOw0KKwkvLyogV3JpdGUgdG8gdGhlIElFUiByZWdpc3Rlcg0KKwlwVURQLT5VRFBfSUVSID0gZmxhZzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVURQX0Rpc2FibGVJdCAqLw0KLS8qKiBcYnJpZWYgRGlzYWJsZSBVRFAgSVQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfRGlzYWJsZUl0KCBBVDkxUFNfVURQIHBVRFAsICAgIC8qIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgSVQgdG8gYmUgZGlzYWJsZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfRGlzYWJsZUl0DQorLy8qIFxicmllZiBEaXNhYmxlIFVEUCBJVA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VEUF9EaXNhYmxlSXQgKA0KKwlBVDkxUFNfVURQIHBVRFAsICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgICAvLyBcYXJnIElUIHRvIGJlIGRpc2FibGVkDQogew0KLSAgICAvKiogV3JpdGUgdG8gdGhlIElEUiByZWdpc3RlciAqLw0KLSAgICBwVURQLT5VRFBfSURSID0gZmxhZzsNCisJLy8qIFdyaXRlIHRvIHRoZSBJRFIgcmVnaXN0ZXINCisJcFVEUC0+VURQX0lEUiA9IGZsYWc7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VEUF9TZXRBZGRyZXNzICovDQotLyoqIFxicmllZiBTZXQgVURQIGZ1bmN0aW9uYWwgYWRkcmVzcyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1VEUF9TZXRBZGRyZXNzKCBBVDkxUFNfVURQIHBVRFAsICAgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYWRkcmVzcyApIC8qIFxhcmcgbmV3IFVEUCBhZGRyZXNzICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVURQX1NldEFkZHJlc3MNCisvLyogXGJyaWVmIFNldCBVRFAgZnVuY3Rpb25hbCBhZGRyZXNzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVURQX1NldEFkZHJlc3MgKA0KKwlBVDkxUFNfVURQIHBVRFAsICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGFkZHJlc3MpICAgLy8gXGFyZyBuZXcgVURQIGFkZHJlc3MNCiB7DQotICAgIHBVRFAtPlVEUF9GQUREUiA9ICggQVQ5MUNfVURQX0ZFTiB8IGFkZHJlc3MgKTsNCisJcFVEUC0+VURQX0ZBRERSID0gKEFUOTFDX1VEUF9GRU4gfCBhZGRyZXNzKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVURQX0VuYWJsZUVwICovDQotLyoqIFxicmllZiBFbmFibGUgRW5kcG9pbnQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfRW5hYmxlRXAoIEFUOTFQU19VRFAgcFVEUCwgICAgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGVuZHBvaW50ICkgLyogXGFyZyBlbmRwb2ludCBudW1iZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfRW5hYmxlRXANCisvLyogXGJyaWVmIEVuYWJsZSBFbmRwb2ludA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VEUF9FbmFibGVFcCAoDQorCUFUOTFQU19VRFAgcFVEUCwgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGNoYXIgZW5kcG9pbnQpICAgLy8gXGFyZyBlbmRwb2ludCBudW1iZXINCiB7DQotICAgIHBVRFAtPlVEUF9DU1JbIGVuZHBvaW50IF0gfD0gQVQ5MUNfVURQX0VQRURTOw0KKwlwVURQLT5VRFBfQ1NSW2VuZHBvaW50XSB8PSBBVDkxQ19VRFBfRVBFRFM7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VEUF9EaXNhYmxlRXAgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBFbmRwb2ludCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1VEUF9EaXNhYmxlRXAoIEFUOTFQU19VRFAgcFVEUCwgICAgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBlbmRwb2ludCApIC8qIFxhcmcgZW5kcG9pbnQgbnVtYmVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVURQX0Rpc2FibGVFcA0KKy8vKiBcYnJpZWYgRW5hYmxlIEVuZHBvaW50DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVURQX0Rpc2FibGVFcCAoDQorCUFUOTFQU19VRFAgcFVEUCwgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGNoYXIgZW5kcG9pbnQpICAgLy8gXGFyZyBlbmRwb2ludCBudW1iZXINCiB7DQotICAgIHBVRFAtPlVEUF9DU1JbIGVuZHBvaW50IF0gJj0gfkFUOTFDX1VEUF9FUEVEUzsNCisJcFVEUC0+VURQX0NTUltlbmRwb2ludF0gJj0gfkFUOTFDX1VEUF9FUEVEUzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVURQX1NldFN0YXRlICovDQotLyoqIFxicmllZiBTZXQgVURQIERldmljZSBzdGF0ZSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1VEUF9TZXRTdGF0ZSggQVQ5MVBTX1VEUCBwVURQLCAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgbmV3IFVEUCBhZGRyZXNzICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVURQX1NldFN0YXRlDQorLy8qIFxicmllZiBTZXQgVURQIERldmljZSBzdGF0ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VEUF9TZXRTdGF0ZSAoDQorCUFUOTFQU19VRFAgcFVEUCwgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAgIC8vIFxhcmcgbmV3IFVEUCBhZGRyZXNzDQogew0KLSAgICBwVURQLT5VRFBfR0xCU1RBVEUgJj0gfiggQVQ5MUNfVURQX0ZBRERFTiB8IEFUOTFDX1VEUF9DT05GRyApOw0KLSAgICBwVURQLT5VRFBfR0xCU1RBVEUgfD0gZmxhZzsNCisJcFVEUC0+VURQX0dMQlNUQVRFICAmPSB+KEFUOTFDX1VEUF9GQURERU4gfCBBVDkxQ19VRFBfQ09ORkcpOw0KKwlwVURQLT5VRFBfR0xCU1RBVEUgIHw9IGZsYWc7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VEUF9HZXRTdGF0ZSAqLw0KLS8qKiBcYnJpZWYgcmV0dXJuIFVEUCBEZXZpY2Ugc3RhdGUgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1VEUF9HZXRTdGF0ZSggLyogXHJldHVybiB0aGUgVURQIGRldmljZSBzdGF0ZSAqLw0KLSAgICBBVDkxUFNfVURQIHBVRFAgKSAgICAgICAgICAgICAgICAgICAgIC8qIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVURQX0dldFN0YXRlDQorLy8qIFxicmllZiByZXR1cm4gVURQIERldmljZSBzdGF0ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVURQX0dldFN0YXRlICggLy8gXHJldHVybiB0aGUgVURQIGRldmljZSBzdGF0ZQ0KKwlBVDkxUFNfVURQIHBVRFApICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlcg0KIHsNCi0gICAgcmV0dXJuKCBwVURQLT5VRFBfR0xCU1RBVEUgJiAoIEFUOTFDX1VEUF9GQURERU4gfCBBVDkxQ19VRFBfQ09ORkcgKSApOw0KKwlyZXR1cm4gKHBVRFAtPlVEUF9HTEJTVEFURSAgJiAoQVQ5MUNfVURQX0ZBRERFTiB8IEFUOTFDX1VEUF9DT05GRykpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9VRFBfUmVzZXRFcCAqLw0KLS8qKiBcYnJpZWYgUmVzZXQgVURQIGVuZHBvaW50ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVURQX1Jlc2V0RXAoIC8qIFxyZXR1cm4gdGhlIFVEUCBkZXZpY2Ugc3RhdGUgKi8NCi0gICAgQVQ5MVBTX1VEUCBwVURQLCAgICAgICAgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlciAqLw0KLSAgICB1bnNpZ25lZCBpbnQgZmxhZyApICAgICAgICAgIC8qIFxhcmcgRW5kcG9pbnRzIHRvIGJlIHJlc2V0ICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVURQX1Jlc2V0RXANCisvLyogXGJyaWVmIFJlc2V0IFVEUCBlbmRwb2ludA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VEUF9SZXNldEVwICggLy8gXHJldHVybiB0aGUgVURQIGRldmljZSBzdGF0ZQ0KKwlBVDkxUFNfVURQIHBVRFAsICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgICAvLyBcYXJnIEVuZHBvaW50cyB0byBiZSByZXNldA0KIHsNCi0gICAgcFVEUC0+VURQX1JTVEVQID0gZmxhZzsNCi0gICAgcFVEUC0+VURQX1JTVEVQID0gMDsNCisJcFVEUC0+VURQX1JTVEVQID0gZmxhZzsNCisJcFVEUC0+VURQX1JTVEVQID0gMDsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVURQX0VwU3RhbGwgKi8NCi0vKiogXGJyaWVmIEVuZHBvaW50IHdpbGwgU1RBTEwgcmVxdWVzdHMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfRXBTdGFsbCggQVQ5MVBTX1VEUCBwVURQLCAgICAgICAgIC8qIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBlbmRwb2ludCApIC8qIFxhcmcgZW5kcG9pbnQgbnVtYmVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVURQX0VwU3RhbGwNCisvLyogXGJyaWVmIEVuZHBvaW50IHdpbGwgU1RBTEwgcmVxdWVzdHMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfRXBTdGFsbCgNCisJQVQ5MVBTX1VEUCBwVURQLCAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVURQIGNvbnRyb2xsZXINCisJdW5zaWduZWQgY2hhciBlbmRwb2ludCkgICAvLyBcYXJnIGVuZHBvaW50IG51bWJlcg0KIHsNCi0gICAgcFVEUC0+VURQX0NTUlsgZW5kcG9pbnQgXSB8PSBBVDkxQ19VRFBfRk9SQ0VTVEFMTDsNCisJcFVEUC0+VURQX0NTUltlbmRwb2ludF0gfD0gQVQ5MUNfVURQX0ZPUkNFU1RBTEw7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VEUF9FcFdyaXRlICovDQotLyoqIFxicmllZiBXcml0ZSB2YWx1ZSBpbiB0aGUgRFBSICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVURQX0VwV3JpdGUoIEFUOTFQU19VRFAgcFVEUCwgICAgICAgIC8qIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBlbmRwb2ludCwgLyogXGFyZyBlbmRwb2ludCBudW1iZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHZhbHVlICkgICAvKiBcYXJnIHZhbHVlIHRvIGJlIHdyaXR0ZW4gaW4gdGhlIERQUiAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VEUF9FcFdyaXRlDQorLy8qIFxicmllZiBXcml0ZSB2YWx1ZSBpbiB0aGUgRFBSDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVURQX0VwV3JpdGUoDQorCUFUOTFQU19VRFAgcFVEUCwgICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGVuZHBvaW50LCAgLy8gXGFyZyBlbmRwb2ludCBudW1iZXINCisJdW5zaWduZWQgY2hhciB2YWx1ZSkgICAgIC8vIFxhcmcgdmFsdWUgdG8gYmUgd3JpdHRlbiBpbiB0aGUgRFBSDQogew0KLSAgICBwVURQLT5VRFBfRkRSWyBlbmRwb2ludCBdID0gdmFsdWU7DQorCXBVRFAtPlVEUF9GRFJbZW5kcG9pbnRdID0gdmFsdWU7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VEUF9FcFJlYWQgKi8NCi0vKiogXGJyaWVmIFJldHVybiB2YWx1ZSBmcm9tIHRoZSBEUFIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1VEUF9FcFJlYWQoIEFUOTFQU19VRFAgcFVEUCwgICAgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGVuZHBvaW50ICkgLyogXGFyZyBlbmRwb2ludCBudW1iZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfRXBSZWFkDQorLy8qIFxicmllZiBSZXR1cm4gdmFsdWUgZnJvbSB0aGUgRFBSDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9VRFBfRXBSZWFkKA0KKwlBVDkxUFNfVURQIHBVRFAsICAgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVURQIGNvbnRyb2xsZXINCisJdW5zaWduZWQgY2hhciBlbmRwb2ludCkgIC8vIFxhcmcgZW5kcG9pbnQgbnVtYmVyDQogew0KLSAgICByZXR1cm4gcFVEUC0+VURQX0ZEUlsgZW5kcG9pbnQgXTsNCisJcmV0dXJuIHBVRFAtPlVEUF9GRFJbZW5kcG9pbnRdOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9VRFBfRXBFbmRPZldyICovDQotLyoqIFxicmllZiBOb3RpZnkgdGhlIFVEUCB0aGF0IHZhbHVlcyBpbiBEUFIgYXJlIHJlYWR5IHRvIGJlIHNlbnQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfRXBFbmRPZldyKCBBVDkxUFNfVURQIHBVRFAsICAgICAgICAgLyogXGFyZyBwb2ludGVyIHRvIGEgVURQIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgZW5kcG9pbnQgKSAvKiBcYXJnIGVuZHBvaW50IG51bWJlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VEUF9FcEVuZE9mV3INCisvLyogXGJyaWVmIE5vdGlmeSB0aGUgVURQIHRoYXQgdmFsdWVzIGluIERQUiBhcmUgcmVhZHkgdG8gYmUgc2VudA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VEUF9FcEVuZE9mV3IoDQorCUFUOTFQU19VRFAgcFVEUCwgICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGVuZHBvaW50KSAgLy8gXGFyZyBlbmRwb2ludCBudW1iZXINCiB7DQotICAgIHBVRFAtPlVEUF9DU1JbIGVuZHBvaW50IF0gfD0gQVQ5MUNfVURQX1RYUEtUUkRZOw0KKwlwVURQLT5VRFBfQ1NSW2VuZHBvaW50XSB8PSBBVDkxQ19VRFBfVFhQS1RSRFk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VEUF9FcENsZWFyICovDQotLyoqIFxicmllZiBDbGVhciBmbGFnIGluIHRoZSBlbmRwb2ludCBDU1IgcmVnaXN0ZXIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfRXBDbGVhciggQVQ5MVBTX1VEUCBwVURQLCAgICAgICAgLyogXGFyZyBwb2ludGVyIHRvIGEgVURQIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGVuZHBvaW50LCAvKiBcYXJnIGVuZHBvaW50IG51bWJlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgICAgIC8qIFxhcmcgZmxhZyB0byBiZSBjbGVhcmVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVURQX0VwQ2xlYXINCisvLyogXGJyaWVmIENsZWFyIGZsYWcgaW4gdGhlIGVuZHBvaW50IENTUiByZWdpc3Rlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VEUF9FcENsZWFyKA0KKwlBVDkxUFNfVURQIHBVRFAsICAgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVURQIGNvbnRyb2xsZXINCisJdW5zaWduZWQgY2hhciBlbmRwb2ludCwgIC8vIFxhcmcgZW5kcG9pbnQgbnVtYmVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAgICAgICAvLyBcYXJnIGZsYWcgdG8gYmUgY2xlYXJlZA0KIHsNCi0gICAgcFVEUC0+VURQX0NTUlsgZW5kcG9pbnQgXSAmPSB+KCBmbGFnICk7DQorCXBVRFAtPlVEUF9DU1JbZW5kcG9pbnRdICY9IH4oZmxhZyk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VEUF9FcFNldCAqLw0KLS8qKiBcYnJpZWYgU2V0IGZsYWcgaW4gdGhlIGVuZHBvaW50IENTUiByZWdpc3RlciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1VEUF9FcFNldCggQVQ5MVBTX1VEUCBwVURQLCAgICAgICAgLyogXGFyZyBwb2ludGVyIHRvIGEgVURQIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBlbmRwb2ludCwgLyogXGFyZyBlbmRwb2ludCBudW1iZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAgICAgLyogXGFyZyBmbGFnIHRvIGJlIGNsZWFyZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfRXBTZXQNCisvLyogXGJyaWVmIFNldCBmbGFnIGluIHRoZSBlbmRwb2ludCBDU1IgcmVnaXN0ZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfRXBTZXQoDQorCUFUOTFQU19VRFAgcFVEUCwgICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGVuZHBvaW50LCAgLy8gXGFyZyBlbmRwb2ludCBudW1iZXINCisJdW5zaWduZWQgaW50IGZsYWcpICAgICAgIC8vIFxhcmcgZmxhZyB0byBiZSBjbGVhcmVkDQogew0KLSAgICBwVURQLT5VRFBfQ1NSWyBlbmRwb2ludCBdIHw9IGZsYWc7DQorCXBVRFAtPlVEUF9DU1JbZW5kcG9pbnRdIHw9IGZsYWc7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VEUF9FcFN0YXR1cyAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIHRoZSBlbmRwb2ludCBDU1IgcmVnaXN0ZXIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1VEUF9FcFN0YXR1cyggQVQ5MVBTX1VEUCBwVURQLCAgICAgICAgIC8qIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBlbmRwb2ludCApIC8qIFxhcmcgZW5kcG9pbnQgbnVtYmVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVURQX0VwU3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gdGhlIGVuZHBvaW50IENTUiByZWdpc3Rlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVURQX0VwU3RhdHVzKA0KKwlBVDkxUFNfVURQIHBVRFAsICAgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVURQIGNvbnRyb2xsZXINCisJdW5zaWduZWQgY2hhciBlbmRwb2ludCkgIC8vIFxhcmcgZW5kcG9pbnQgbnVtYmVyDQogew0KLSAgICByZXR1cm4gcFVEUC0+VURQX0NTUlsgZW5kcG9pbnQgXTsNCisJcmV0dXJuIHBVRFAtPlVEUF9DU1JbZW5kcG9pbnRdOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9VRFBfR2V0SW50ZXJydXB0TWFza1N0YXR1cyAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIFVEUCBJbnRlcnJ1cHQgTWFzayBTdGF0dXMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1VEUF9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCAvKiBccmV0dXJuIFVEUCBJbnRlcnJ1cHQgTWFzayBTdGF0dXMgKi8NCi0gICAgQVQ5MVBTX1VEUCBwVWRwICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VEUF9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gVURQIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVURQX0dldEludGVycnVwdE1hc2tTdGF0dXMoIC8vIFxyZXR1cm4gVURQIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKyAgICAgICAgQVQ5MVBTX1VEUCBwVWRwKSAvLyBcYXJnICBwb2ludGVyIHRvIGEgVURQIGNvbnRyb2xsZXINCiB7DQotICAgIHJldHVybiBwVWRwLT5VRFBfSU1SOw0KKyAgICAgICAgcmV0dXJuIHBVZHAtPlVEUF9JTVI7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VEUF9Jc0ludGVycnVwdE1hc2tlZCAqLw0KLS8qKiBcYnJpZWYgVGVzdCBpZiBVRFAgSW50ZXJydXB0IGlzIE1hc2tlZCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSBpbnQgQVQ5MUZfVURQX0lzSW50ZXJydXB0TWFza2VkKCBBVDkxUFNfVURQIHBVZHAsICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfSXNJbnRlcnJ1cHRNYXNrZWQNCisvLyogXGJyaWVmIFRlc3QgaWYgVURQIEludGVycnVwdCBpcyBNYXNrZWQgDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9VRFBfSXNJbnRlcnJ1cHRNYXNrZWQoDQorICAgICAgICBBVDkxUFNfVURQIHBVZHAsICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCiB7DQotICAgIHJldHVybiggQVQ5MUZfVURQX0dldEludGVycnVwdE1hc2tTdGF0dXMoIHBVZHAgKSAmIGZsYWcgKTsNCisgICAgICAgIHJldHVybiAoQVQ5MUZfVURQX0dldEludGVycnVwdE1hc2tTdGF0dXMocFVkcCkgJiBmbGFnKTsNCiB9DQogDQogLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0qICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBUQw0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVENfSW50ZXJydXB0RW5hYmxlICovDQotLyoqIFxicmllZiBFbmFibGUgVEMgSW50ZXJydXB0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVENfSW50ZXJydXB0RW5hYmxlKCBBVDkxUFNfVEMgcFRjLCAgICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBUQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgVEMgaW50ZXJydXB0IHRvIGJlIGVuYWJsZWQgKi8NCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBUQw0KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVENfSW50ZXJydXB0RW5hYmxlDQorLy8qIFxicmllZiBFbmFibGUgVEMgSW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVENfSW50ZXJydXB0RW5hYmxlKA0KKyAgICAgICAgQVQ5MVBTX1RDIHBUYywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgVEMgY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIFRDIGludGVycnVwdCB0byBiZSBlbmFibGVkDQogew0KLSAgICBwVGMtPlRDX0lFUiA9IGZsYWc7DQorICAgICAgICBwVGMtPlRDX0lFUiA9IGZsYWc7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1RDX0ludGVycnVwdERpc2FibGUgKi8NCi0vKiogXGJyaWVmIERpc2FibGUgVEMgSW50ZXJydXB0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVENfSW50ZXJydXB0RGlzYWJsZSggQVQ5MVBTX1RDIHBUYywgICAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgVEMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBUQyBpbnRlcnJ1cHQgdG8gYmUgZGlzYWJsZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UQ19JbnRlcnJ1cHREaXNhYmxlDQorLy8qIFxicmllZiBEaXNhYmxlIFRDIEludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1RDX0ludGVycnVwdERpc2FibGUoDQorICAgICAgICBBVDkxUFNfVEMgcFRjLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBUQyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgVEMgaW50ZXJydXB0IHRvIGJlIGRpc2FibGVkDQogew0KLSAgICBwVGMtPlRDX0lEUiA9IGZsYWc7DQorICAgICAgICBwVGMtPlRDX0lEUiA9IGZsYWc7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1RDX0dldEludGVycnVwdE1hc2tTdGF0dXMgKi8NCi0vKiogXGJyaWVmIFJldHVybiBUQyBJbnRlcnJ1cHQgTWFzayBTdGF0dXMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1RDX0dldEludGVycnVwdE1hc2tTdGF0dXMoIC8qIFxyZXR1cm4gVEMgSW50ZXJydXB0IE1hc2sgU3RhdHVzICovDQotICAgIEFUOTFQU19UQyBwVGMgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBUQyBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVENfR2V0SW50ZXJydXB0TWFza1N0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFRDIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVENfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLy8gXHJldHVybiBUQyBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisgICAgICAgIEFUOTFQU19UQyBwVGMpIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBUQyBjb250cm9sbGVyDQogew0KLSAgICByZXR1cm4gcFRjLT5UQ19JTVI7DQorICAgICAgICByZXR1cm4gcFRjLT5UQ19JTVI7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1RDX0lzSW50ZXJydXB0TWFza2VkICovDQotLyoqIFxicmllZiBUZXN0IGlmIFRDIEludGVycnVwdCBpcyBNYXNrZWQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgaW50IEFUOTFGX1RDX0lzSW50ZXJydXB0TWFza2VkKCBBVDkxUFNfVEMgcFRjLCAgICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBUQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVENfSXNJbnRlcnJ1cHRNYXNrZWQNCisvLyogXGJyaWVmIFRlc3QgaWYgVEMgSW50ZXJydXB0IGlzIE1hc2tlZCANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1RDX0lzSW50ZXJydXB0TWFza2VkKA0KKyAgICAgICAgQVQ5MVBTX1RDIHBUYywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgVEMgY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQogew0KLSAgICByZXR1cm4oIEFUOTFGX1RDX0dldEludGVycnVwdE1hc2tTdGF0dXMoIHBUYyApICYgZmxhZyApOw0KKyAgICAgICAgcmV0dXJuIChBVDkxRl9UQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKHBUYykgJiBmbGFnKTsNCiB9DQogDQogLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0qICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBDQU4NCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLSNkZWZpbmUgU1RBTkRBUkRfRk9STUFUICAgIDANCi0jZGVmaW5lIEVYVEVOREVEX0ZPUk1BVCAgICAxDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgQ0FODQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisjZGVmaW5lCVNUQU5EQVJEX0ZPUk1BVCAwDQorI2RlZmluZQlFWFRFTkRFRF9GT1JNQVQgMQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0luaXRNYWlsYm94UmVnaXN0ZXJzKCkgKi8NCi0vKiogXGJyaWVmIENvbmZpZ3VyZSB0aGUgY29ycmVzcG9uZGluZyBtYWlsYm94ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfSW5pdE1haWxib3hSZWdpc3RlcnMoIEFUOTFQU19DQU5fTUIgQ0FOX01haWxib3gsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1vZGVfcmVnLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhY2NlcHRhbmNlX21hc2tfcmVnLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpZF9yZWcsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRhdGFfbG93X3JlZywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGF0YV9oaWdoX3JlZywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29udHJvbF9yZWcgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0luaXRNYWlsYm94UmVnaXN0ZXJzKCkNCisvLyogXGJyaWVmIENvbmZpZ3VyZSB0aGUgY29ycmVzcG9uZGluZyBtYWlsYm94DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfSW5pdE1haWxib3hSZWdpc3RlcnMoQVQ5MVBTX0NBTl9NQglDQU5fTWFpbGJveCwNCisJCQkJCQkJCWludCAgCQkJbW9kZV9yZWcsDQorCQkJCQkJCQlpbnQgCQkJYWNjZXB0YW5jZV9tYXNrX3JlZywNCisJCQkJCQkJCWludCAgCQkJaWRfcmVnLA0KKwkJCQkJCQkJaW50ICAJCQlkYXRhX2xvd19yZWcsDQorCQkJCQkJCQlpbnQgIAkJCWRhdGFfaGlnaF9yZWcsDQorCQkJCQkJCQlpbnQgIAkJCWNvbnRyb2xfcmVnKQ0KIHsNCi0gICAgQ0FOX01haWxib3gtPkNBTl9NQl9NQ1IgPSAweDA7DQotICAgIENBTl9NYWlsYm94LT5DQU5fTUJfTU1SID0gbW9kZV9yZWc7DQotICAgIENBTl9NYWlsYm94LT5DQU5fTUJfTUFNID0gYWNjZXB0YW5jZV9tYXNrX3JlZzsNCi0gICAgQ0FOX01haWxib3gtPkNBTl9NQl9NSUQgPSBpZF9yZWc7DQotICAgIENBTl9NYWlsYm94LT5DQU5fTUJfTURMID0gZGF0YV9sb3dfcmVnOw0KLSAgICBDQU5fTWFpbGJveC0+Q0FOX01CX01ESCA9IGRhdGFfaGlnaF9yZWc7DQotICAgIENBTl9NYWlsYm94LT5DQU5fTUJfTUNSID0gY29udHJvbF9yZWc7DQorCUNBTl9NYWlsYm94LT5DQU5fTUJfTUNSIAk9IDB4MDsNCisJQ0FOX01haWxib3gtPkNBTl9NQl9NTVIgCT0gbW9kZV9yZWc7DQorCUNBTl9NYWlsYm94LT5DQU5fTUJfTUFNIAk9IGFjY2VwdGFuY2VfbWFza19yZWc7DQorCUNBTl9NYWlsYm94LT5DQU5fTUJfTUlEIAk9IGlkX3JlZzsNCisJQ0FOX01haWxib3gtPkNBTl9NQl9NREwgCT0gZGF0YV9sb3dfcmVnOyAJCQ0KKwlDQU5fTWFpbGJveC0+Q0FOX01CX01ESCAJPSBkYXRhX2hpZ2hfcmVnOw0KKwlDQU5fTWFpbGJveC0+Q0FOX01CX01DUiAJPSBjb250cm9sX3JlZzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfRW5hYmxlQ0FOKCkgKi8NCi0vKiogXGJyaWVmICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfRW5hYmxlQ0FOKCBBVDkxUFNfQ0FOIHBDQU4gKSAvKiBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9FbmFibGVDQU4oKQ0KKy8vKiBcYnJpZWYgDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfRW5hYmxlQ0FOKA0KKwlBVDkxUFNfQ0FOIHBDQU4pICAgICAvLyBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXINCiB7DQotICAgIHBDQU4tPkNBTl9NUiB8PSBBVDkxQ19DQU5fQ0FORU47DQorCXBDQU4tPkNBTl9NUiB8PSBBVDkxQ19DQU5fQ0FORU47DQogDQotICAgIC8qIFdhaXQgZm9yIFdBS0VVUCBmbGFnIHJhaXNpbmcgPD0+IDExLXJlY2Vzc2l2ZS1iaXQgd2VyZSBzY2FubmVkIGJ5IHRoZSB0cmFuc2NlaXZlciAqLw0KLSAgICB3aGlsZSggKCBwQ0FOLT5DQU5fU1IgJiBBVDkxQ19DQU5fV0FLRVVQICkgIT0gQVQ5MUNfQ0FOX1dBS0VVUCApDQotICAgIHsNCi0gICAgfQ0KKwkvLyBXYWl0IGZvciBXQUtFVVAgZmxhZyByYWlzaW5nIDw9PiAxMS1yZWNlc3NpdmUtYml0IHdlcmUgc2Nhbm5lZCBieSB0aGUgdHJhbnNjZWl2ZXINCisJd2hpbGUoIChwQ0FOLT5DQU5fU1IgJiBBVDkxQ19DQU5fV0FLRVVQKSAhPSBBVDkxQ19DQU5fV0FLRVVQICk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0Rpc2FibGVDQU4oKSAqLw0KLS8qKiBcYnJpZWYgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9EaXNhYmxlQ0FOKCBBVDkxUFNfQ0FOIHBDQU4gKSAvKiBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9EaXNhYmxlQ0FOKCkNCisvLyogXGJyaWVmIA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0Rpc2FibGVDQU4oDQorCUFUOTFQU19DQU4gcENBTikgICAgIC8vIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlcg0KIHsNCi0gICAgcENBTi0+Q0FOX01SICY9IH5BVDkxQ19DQU5fQ0FORU47DQorCXBDQU4tPkNBTl9NUiAmPSB+QVQ5MUNfQ0FOX0NBTkVOOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9DQU5fRW5hYmxlSXQgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBDQU4gaW50ZXJydXB0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQ0FOX0VuYWJsZUl0KCBBVDkxUFNfQ0FOIHBDQU4sICAgIC8qIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIElUIHRvIGJlIGVuYWJsZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fRW5hYmxlSXQNCisvLyogXGJyaWVmIEVuYWJsZSBDQU4gaW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQ0FOX0VuYWJsZUl0ICgNCisJQVQ5MVBTX0NBTiBwQ0FOLCAgICAgLy8gcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAgIC8vIElUIHRvIGJlIGVuYWJsZWQNCiB7DQotICAgIC8qKiBXcml0ZSB0byB0aGUgSUVSIHJlZ2lzdGVyICovDQotICAgIHBDQU4tPkNBTl9JRVIgPSBmbGFnOw0KKwkvLyogV3JpdGUgdG8gdGhlIElFUiByZWdpc3Rlcg0KKwlwQ0FOLT5DQU5fSUVSID0gZmxhZzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQ0FOX0Rpc2FibGVJdCAqLw0KLS8qKiBcYnJpZWYgRGlzYWJsZSBDQU4gaW50ZXJydXB0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQ0FOX0Rpc2FibGVJdCggQVQ5MVBTX0NBTiBwQ0FOLCAgICAvKiBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogSVQgdG8gYmUgZGlzYWJsZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fRGlzYWJsZUl0DQorLy8qIFxicmllZiBEaXNhYmxlIENBTiBpbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9DQU5fRGlzYWJsZUl0ICgNCisJQVQ5MVBTX0NBTiBwQ0FOLCAvLyBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpIC8vIElUIHRvIGJlIGRpc2FibGVkDQogew0KLSAgICAvKiogV3JpdGUgdG8gdGhlIElEUiByZWdpc3RlciAqLw0KLSAgICBwQ0FOLT5DQU5fSURSID0gZmxhZzsNCisJLy8qIFdyaXRlIHRvIHRoZSBJRFIgcmVnaXN0ZXINCisJcENBTi0+Q0FOX0lEUiA9IGZsYWc7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0NBTl9HZXRTdGF0dXMgKi8NCi0vKiogXGJyaWVmIFJldHVybiBDQU4gSW50ZXJydXB0IFN0YXR1cyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0FOX0dldFN0YXR1cyggLyogXHJldHVybiBDQU4gSW50ZXJydXB0IFN0YXR1cyAqLw0KLSAgICBBVDkxUFNfQ0FOIHBDQU4gKSAgICAgICAgICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fR2V0U3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gQ0FOIEludGVycnVwdCBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NBTl9HZXRTdGF0dXMoIC8vIFxyZXR1cm4gQ0FOIEludGVycnVwdCBTdGF0dXMNCisJQVQ5MVBTX0NBTiBwQ0FOKSAvLyBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXINCiB7DQotICAgIHJldHVybiBwQ0FOLT5DQU5fU1I7DQorCXJldHVybiBwQ0FOLT5DQU5fU1I7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0NBTl9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzICovDQotLyoqIFxicmllZiBSZXR1cm4gQ0FOIEludGVycnVwdCBNYXNrIFN0YXR1cyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0FOX0dldEludGVycnVwdE1hc2tTdGF0dXMoIC8qIFxyZXR1cm4gQ0FOIEludGVycnVwdCBNYXNrIFN0YXR1cyAqLw0KLSAgICBBVDkxUFNfQ0FOIHBDQU4gKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0dldEludGVycnVwdE1hc2tTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBDQU4gSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLy8gXHJldHVybiBDQU4gSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorCUFUOTFQU19DQU4gcENBTikgLy8gcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyDQogew0KLSAgICByZXR1cm4gcENBTi0+Q0FOX0lNUjsNCisJcmV0dXJuIHBDQU4tPkNBTl9JTVI7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0NBTl9Jc0ludGVycnVwdE1hc2tlZCAqLw0KLS8qKiBcYnJpZWYgVGVzdCBpZiBDQU4gSW50ZXJydXB0IGlzIE1hc2tlZCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0FOX0lzSW50ZXJydXB0TWFza2VkKCBBVDkxUFNfQ0FOIHBDQU4sICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fSXNJbnRlcnJ1cHRNYXNrZWQNCisvLyogXGJyaWVmIFRlc3QgaWYgQ0FOIEludGVycnVwdCBpcyBNYXNrZWQgDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fSXNJbnRlcnJ1cHRNYXNrZWQoDQorICAgICAgICBBVDkxUFNfQ0FOIHBDQU4sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCiB7DQotICAgIHJldHVybiggQVQ5MUZfQ0FOX0dldEludGVycnVwdE1hc2tTdGF0dXMoIHBDQU4gKSAmIGZsYWcgKTsNCisJcmV0dXJuIChBVDkxRl9DQU5fR2V0SW50ZXJydXB0TWFza1N0YXR1cyhwQ0FOKSAmIGZsYWcpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9DQU5fSXNTdGF0dXNTZXQgKi8NCi0vKiogXGJyaWVmIFRlc3QgaWYgQ0FOIEludGVycnVwdCBpcyBTZXQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NBTl9Jc1N0YXR1c1NldCggQVQ5MVBTX0NBTiBwQ0FOLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0lzU3RhdHVzU2V0DQorLy8qIFxicmllZiBUZXN0IGlmIENBTiBJbnRlcnJ1cHQgaXMgU2V0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fSXNTdGF0dXNTZXQoDQorICAgICAgICBBVDkxUFNfQ0FOIHBDQU4sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCiB7DQotICAgIHJldHVybiggQVQ5MUZfQ0FOX0dldFN0YXR1cyggcENBTiApICYgZmxhZyApOw0KKwlyZXR1cm4gKEFUOTFGX0NBTl9HZXRTdGF0dXMocENBTikgJiBmbGFnKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQ0FOX0NmZ01vZGVSZWcgKi8NCi0vKiogXGJyaWVmIENvbmZpZ3VyZSB0aGUgTW9kZSBSZWdpc3RlciBvZiB0aGUgQ0FOIGNvbnRyb2xsZXIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9DQU5fQ2ZnTW9kZVJlZyggQVQ5MVBTX0NBTiBwQ0FOLCAgICAvKiBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbW9kZSApIC8qIG1vZGUgcmVnaXN0ZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fQ2ZnTW9kZVJlZw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIHRoZSBNb2RlIFJlZ2lzdGVyIG9mIHRoZSBDQU4gY29udHJvbGxlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0NBTl9DZmdNb2RlUmVnICgNCisJQVQ5MVBTX0NBTiBwQ0FOLCAvLyBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IG1vZGUpICAgICAgICAvLyBtb2RlIHJlZ2lzdGVyIA0KIHsNCi0gICAgLyoqIFdyaXRlIHRvIHRoZSBNUiByZWdpc3RlciAqLw0KLSAgICBwQ0FOLT5DQU5fTVIgPSBtb2RlOw0KKwkvLyogV3JpdGUgdG8gdGhlIE1SIHJlZ2lzdGVyDQorCXBDQU4tPkNBTl9NUiA9IG1vZGU7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0NBTl9HZXRNb2RlUmVnICovDQotLyoqIFxicmllZiBSZXR1cm4gdGhlIE1vZGUgUmVnaXN0ZXIgb2YgdGhlIENBTiBjb250cm9sbGVyIHZhbHVlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fR2V0TW9kZVJlZyggQVQ5MVBTX0NBTiBwQ0FOIC8qIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9HZXRNb2RlUmVnDQorLy8qIFxicmllZiBSZXR1cm4gdGhlIE1vZGUgUmVnaXN0ZXIgb2YgdGhlIENBTiBjb250cm9sbGVyIHZhbHVlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fR2V0TW9kZVJlZyAoDQorCUFUOTFQU19DQU4gcENBTiAvLyBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXINCisJKQ0KIHsNCi0gICAgcmV0dXJuIHBDQU4tPkNBTl9NUjsNCisJcmV0dXJuIHBDQU4tPkNBTl9NUjsJDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0NBTl9DZmdCYXVkcmF0ZVJlZyAqLw0KLS8qKiBcYnJpZWYgQ29uZmlndXJlIHRoZSBCYXVkcmF0ZSBvZiB0aGUgQ0FOIGNvbnRyb2xsZXIgZm9yIHRoZSBuZXR3b3JrICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQ0FOX0NmZ0JhdWRyYXRlUmVnKCBBVDkxUFNfQ0FOIHBDQU4sIC8qIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYmF1ZHJhdGVfY2ZnICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fQ2ZnQmF1ZHJhdGVSZWcNCisvLyogXGJyaWVmIENvbmZpZ3VyZSB0aGUgQmF1ZHJhdGUgb2YgdGhlIENBTiBjb250cm9sbGVyIGZvciB0aGUgbmV0d29yaw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0NBTl9DZmdCYXVkcmF0ZVJlZyAoDQorCUFUOTFQU19DQU4gcENBTiwgLy8gcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBiYXVkcmF0ZV9jZmcpDQogew0KLSAgICAvKiogV3JpdGUgdG8gdGhlIEJSIHJlZ2lzdGVyICovDQotICAgIHBDQU4tPkNBTl9CUiA9IGJhdWRyYXRlX2NmZzsNCisJLy8qIFdyaXRlIHRvIHRoZSBCUiByZWdpc3Rlcg0KKwlwQ0FOLT5DQU5fQlIgPSBiYXVkcmF0ZV9jZmc7CQ0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9DQU5fR2V0QmF1ZHJhdGUgKi8NCi0vKiogXGJyaWVmIFJldHVybiB0aGUgQmF1ZHJhdGUgb2YgdGhlIENBTiBjb250cm9sbGVyIGZvciB0aGUgbmV0d29yayB2YWx1ZSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0FOX0dldEJhdWRyYXRlKCBBVDkxUFNfQ0FOIHBDQU4gLyogcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9HZXRCYXVkcmF0ZQ0KKy8vKiBcYnJpZWYgUmV0dXJuIHRoZSBCYXVkcmF0ZSBvZiB0aGUgQ0FOIGNvbnRyb2xsZXIgZm9yIHRoZSBuZXR3b3JrIHZhbHVlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fR2V0QmF1ZHJhdGUgKA0KKwlBVDkxUFNfQ0FOIHBDQU4gLy8gcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyDQorCSkNCiB7DQotICAgIHJldHVybiBwQ0FOLT5DQU5fQlI7DQorCXJldHVybiBwQ0FOLT5DQU5fQlI7CQ0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9DQU5fR2V0SW50ZXJuYWxDb3VudGVyICovDQotLyoqIFxicmllZiBSZXR1cm4gQ0FOIFRpbWVyIFJlZ3NpdGVyIFZhbHVlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fR2V0SW50ZXJuYWxDb3VudGVyKCBBVDkxUFNfQ0FOIHBDQU4gLyogcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fR2V0SW50ZXJuYWxDb3VudGVyDQorLy8qIFxicmllZiBSZXR1cm4gQ0FOIFRpbWVyIFJlZ3NpdGVyIFZhbHVlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fR2V0SW50ZXJuYWxDb3VudGVyICgNCisJQVQ5MVBTX0NBTiBwQ0FOIC8vIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlcg0KKwkpDQogew0KLSAgICByZXR1cm4gcENBTi0+Q0FOX1RJTTsNCisJcmV0dXJuIHBDQU4tPkNBTl9USU07CQ0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9DQU5fR2V0VGltZXN0YW1wICovDQotLyoqIFxicmllZiBSZXR1cm4gQ0FOIFRpbWVzdGFtcCBSZWdpc3RlciBWYWx1ZSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0FOX0dldFRpbWVzdGFtcCggQVQ5MVBTX0NBTiBwQ0FOIC8qIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0dldFRpbWVzdGFtcA0KKy8vKiBcYnJpZWYgUmV0dXJuIENBTiBUaW1lc3RhbXAgUmVnaXN0ZXIgVmFsdWUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NBTl9HZXRUaW1lc3RhbXAgKA0KKwlBVDkxUFNfQ0FOIHBDQU4gLy8gcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyDQorCSkNCiB7DQotICAgIHJldHVybiBwQ0FOLT5DQU5fVElNRVNUUDsNCisJcmV0dXJuIHBDQU4tPkNBTl9USU1FU1RQOwkNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQ0FOX0dldEVycm9yQ291bnRlciAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIENBTiBFcnJvciBDb3VudGVyIFJlZ2lzdGVyIFZhbHVlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fR2V0RXJyb3JDb3VudGVyKCBBVDkxUFNfQ0FOIHBDQU4gLyogcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fR2V0RXJyb3JDb3VudGVyDQorLy8qIFxicmllZiBSZXR1cm4gQ0FOIEVycm9yIENvdW50ZXIgUmVnaXN0ZXIgVmFsdWUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NBTl9HZXRFcnJvckNvdW50ZXIgKA0KKwlBVDkxUFNfQ0FOIHBDQU4gLy8gcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyDQorCSkNCiB7DQotICAgIHJldHVybiBwQ0FOLT5DQU5fRUNSOw0KKwlyZXR1cm4gcENBTi0+Q0FOX0VDUjsJDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0NBTl9Jbml0VHJhbnNmZXJSZXF1ZXN0ICovDQotLyoqIFxicmllZiBSZXF1ZXN0IGZvciBhIHRyYW5zZmVyIG9uIHRoZSBjb3JyZXNwb25kaW5nIG1haWxib3hlcyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0NBTl9Jbml0VHJhbnNmZXJSZXF1ZXN0KCBBVDkxUFNfQ0FOIHBDQU4sIC8qIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB0cmFuc2Zlcl9jbWQgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9Jbml0VHJhbnNmZXJSZXF1ZXN0DQorLy8qIFxicmllZiBSZXF1ZXN0IGZvciBhIHRyYW5zZmVyIG9uIHRoZSBjb3JyZXNwb25kaW5nIG1haWxib3hlcw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0NBTl9Jbml0VHJhbnNmZXJSZXF1ZXN0ICgNCisJQVQ5MVBTX0NBTiBwQ0FOLCAvLyBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXINCisgICAgdW5zaWduZWQgaW50IHRyYW5zZmVyX2NtZCkNCiB7DQotICAgIHBDQU4tPkNBTl9UQ1IgPSB0cmFuc2Zlcl9jbWQ7DQorCXBDQU4tPkNBTl9UQ1IgPSB0cmFuc2Zlcl9jbWQ7CQ0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9DQU5fSW5pdEFib3J0UmVxdWVzdCAqLw0KLS8qKiBcYnJpZWYgQWJvcnQgdGhlIGNvcnJlc3BvbmRpbmcgbWFpbGJveGVzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQ0FOX0luaXRBYm9ydFJlcXVlc3QoIEFUOTFQU19DQU4gcENBTiwgLyogcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGFib3J0X2NtZCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0luaXRBYm9ydFJlcXVlc3QNCisvLyogXGJyaWVmIEFib3J0IHRoZSBjb3JyZXNwb25kaW5nIG1haWxib3hlcw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0NBTl9Jbml0QWJvcnRSZXF1ZXN0ICgNCisJQVQ5MVBTX0NBTiBwQ0FOLCAvLyBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXINCisgICAgdW5zaWduZWQgaW50IGFib3J0X2NtZCkNCiB7DQotICAgIHBDQU4tPkNBTl9BQ1IgPSBhYm9ydF9jbWQ7DQorCXBDQU4tPkNBTl9BQ1IgPSBhYm9ydF9jbWQ7CQ0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9DQU5fQ2ZnTWVzc2FnZU1vZGVSZWcgKi8NCi0vKiogXGJyaWVmIFByb2dyYW0gdGhlIE1lc3NhZ2UgTW9kZSBSZWdpc3RlciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0NBTl9DZmdNZXNzYWdlTW9kZVJlZyggQVQ5MVBTX0NBTl9NQiBDQU5fTWFpbGJveCwgLyogcG9pbnRlciB0byBhIENBTiBNYWlsYm94ICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtb2RlICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fQ2ZnTWVzc2FnZU1vZGVSZWcNCisvLyogXGJyaWVmIFByb2dyYW0gdGhlIE1lc3NhZ2UgTW9kZSBSZWdpc3Rlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0NBTl9DZmdNZXNzYWdlTW9kZVJlZyAoDQorCUFUOTFQU19DQU5fTUIJQ0FOX01haWxib3gsIC8vIHBvaW50ZXIgdG8gYSBDQU4gTWFpbGJveA0KKyAgICB1bnNpZ25lZCBpbnQgbW9kZSkNCiB7DQotICAgIENBTl9NYWlsYm94LT5DQU5fTUJfTU1SID0gbW9kZTsNCisJQ0FOX01haWxib3gtPkNBTl9NQl9NTVIgPSBtb2RlOwkNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQ0FOX0dldE1lc3NhZ2VNb2RlUmVnICovDQotLyoqIFxicmllZiBSZXR1cm4gdGhlIE1lc3NhZ2UgTW9kZSBSZWdpc3RlciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0FOX0dldE1lc3NhZ2VNb2RlUmVnKCBBVDkxUFNfQ0FOX01CIENBTl9NYWlsYm94ICkgLyogcG9pbnRlciB0byBhIENBTiBNYWlsYm94ICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0dldE1lc3NhZ2VNb2RlUmVnDQorLy8qIFxicmllZiBSZXR1cm4gdGhlIE1lc3NhZ2UgTW9kZSBSZWdpc3Rlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0FOX0dldE1lc3NhZ2VNb2RlUmVnICgNCisJQVQ5MVBTX0NBTl9NQglDQU5fTWFpbGJveCkgLy8gcG9pbnRlciB0byBhIENBTiBNYWlsYm94DQogew0KLSAgICByZXR1cm4gQ0FOX01haWxib3gtPkNBTl9NQl9NTVI7DQorCXJldHVybiBDQU5fTWFpbGJveC0+Q0FOX01CX01NUjsJDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0NBTl9DZmdNZXNzYWdlSURSZWcgKi8NCi0vKiogXGJyaWVmIFByb2dyYW0gdGhlIE1lc3NhZ2UgSUQgUmVnaXN0ZXIgKi8NCi0vKiogXGJyaWVmIFZlcnNpb24gPT0gMCBmb3IgU3RhbmRhcmQgbWVzc3NhZ2UsIFZlcnNpb24gPT0gMSBmb3IgRXh0ZW5kZWQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9DQU5fQ2ZnTWVzc2FnZUlEUmVnKCBBVDkxUFNfQ0FOX01CIENBTl9NYWlsYm94LCAvKiBwb2ludGVyIHRvIGEgQ0FOIE1haWxib3ggKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpZCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgdmVyc2lvbiApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0NmZ01lc3NhZ2VJRFJlZw0KKy8vKiBcYnJpZWYgUHJvZ3JhbSB0aGUgTWVzc2FnZSBJRCBSZWdpc3Rlcg0KKy8vKiBcYnJpZWYgVmVyc2lvbiA9PSAwIGZvciBTdGFuZGFyZCBtZXNzc2FnZSwgVmVyc2lvbiA9PSAxIGZvciBFeHRlbmRlZCAgDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQ0FOX0NmZ01lc3NhZ2VJRFJlZyAoDQorCUFUOTFQU19DQU5fTUIJQ0FOX01haWxib3gsIC8vIHBvaW50ZXIgdG8gYSBDQU4gTWFpbGJveA0KKyAgICB1bnNpZ25lZCBpbnQgaWQsDQorICAgIHVuc2lnbmVkIGNoYXIgdmVyc2lvbikNCiB7DQotICAgIGlmKCB2ZXJzaW9uID09IDAgKSAvKiBJRHZBIFN0YW5kYXJkIEZvcm1hdCAqLw0KLSAgICB7DQotICAgICAgICBDQU5fTWFpbGJveC0+Q0FOX01CX01JRCA9IGlkIDw8IDE4Ow0KLSAgICB9DQotICAgIGVsc2UgLyogSUR2QiBFeHRlbmRlZCBGb3JtYXQgKi8NCi0gICAgew0KLSAgICAgICAgQ0FOX01haWxib3gtPkNBTl9NQl9NSUQgPSBpZCB8ICggMSA8PCAyOSApOyAvKiBzZXQgTUlERSBiaXQgKi8NCi0gICAgfQ0KKwlpZih2ZXJzaW9uPT0wKQkvLyBJRHZBIFN0YW5kYXJkIEZvcm1hdA0KKwkJQ0FOX01haWxib3gtPkNBTl9NQl9NSUQgPSBpZDw8MTg7DQorCWVsc2UJLy8gSUR2QiBFeHRlbmRlZCBGb3JtYXQNCisJCUNBTl9NYWlsYm94LT5DQU5fTUJfTUlEID0gaWQgfCAoMTw8MjkpOwkvLyBzZXQgTUlERSBiaXQNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQ0FOX0dldE1lc3NhZ2VJRFJlZyAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIHRoZSBNZXNzYWdlIElEIFJlZ2lzdGVyICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fR2V0TWVzc2FnZUlEUmVnKCBBVDkxUFNfQ0FOX01CIENBTl9NYWlsYm94ICkgLyogcG9pbnRlciB0byBhIENBTiBNYWlsYm94ICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0dldE1lc3NhZ2VJRFJlZw0KKy8vKiBcYnJpZWYgUmV0dXJuIHRoZSBNZXNzYWdlIElEIFJlZ2lzdGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fR2V0TWVzc2FnZUlEUmVnICgNCisJQVQ5MVBTX0NBTl9NQglDQU5fTWFpbGJveCkgLy8gcG9pbnRlciB0byBhIENBTiBNYWlsYm94DQogew0KLSAgICByZXR1cm4gQ0FOX01haWxib3gtPkNBTl9NQl9NSUQ7DQorCXJldHVybiBDQU5fTWFpbGJveC0+Q0FOX01CX01JRDsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQ0FOX0NmZ01lc3NhZ2VBY2NlcHRhbmNlTWFza1JlZyAqLw0KLS8qKiBcYnJpZWYgUHJvZ3JhbSB0aGUgTWVzc2FnZSBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9DQU5fQ2ZnTWVzc2FnZUFjY2VwdGFuY2VNYXNrUmVnKCBBVDkxUFNfQ0FOX01CIENBTl9NYWlsYm94LCAvKiBwb2ludGVyIHRvIGEgQ0FOIE1haWxib3ggKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtYXNrICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fQ2ZnTWVzc2FnZUFjY2VwdGFuY2VNYXNrUmVnDQorLy8qIFxicmllZiBQcm9ncmFtIHRoZSBNZXNzYWdlIEFjY2VwdGFuY2UgTWFzayBSZWdpc3Rlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0NBTl9DZmdNZXNzYWdlQWNjZXB0YW5jZU1hc2tSZWcgKA0KKwlBVDkxUFNfQ0FOX01CCUNBTl9NYWlsYm94LCAvLyBwb2ludGVyIHRvIGEgQ0FOIE1haWxib3gNCisgICAgdW5zaWduZWQgaW50IG1hc2spDQogew0KLSAgICBDQU5fTWFpbGJveC0+Q0FOX01CX01BTSA9IG1hc2s7DQorCUNBTl9NYWlsYm94LT5DQU5fTUJfTUFNID0gbWFzazsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQ0FOX0dldE1lc3NhZ2VBY2NlcHRhbmNlTWFza1JlZyAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIHRoZSBNZXNzYWdlIEFjY2VwdGFuY2UgTWFzayBSZWdpc3RlciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0FOX0dldE1lc3NhZ2VBY2NlcHRhbmNlTWFza1JlZyggQVQ5MVBTX0NBTl9NQiBDQU5fTWFpbGJveCApIC8qIHBvaW50ZXIgdG8gYSBDQU4gTWFpbGJveCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9HZXRNZXNzYWdlQWNjZXB0YW5jZU1hc2tSZWcNCisvLyogXGJyaWVmIFJldHVybiB0aGUgTWVzc2FnZSBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NBTl9HZXRNZXNzYWdlQWNjZXB0YW5jZU1hc2tSZWcgKA0KKwlBVDkxUFNfQ0FOX01CCUNBTl9NYWlsYm94KSAvLyBwb2ludGVyIHRvIGEgQ0FOIE1haWxib3gNCiB7DQotICAgIHJldHVybiBDQU5fTWFpbGJveC0+Q0FOX01CX01BTTsNCisJcmV0dXJuIENBTl9NYWlsYm94LT5DQU5fTUJfTUFNOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9DQU5fR2V0RmFtaWx5SUQgKi8NCi0vKiogXGJyaWVmIFJldHVybiB0aGUgTWVzc2FnZSBJRCBSZWdpc3RlciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0FOX0dldEZhbWlseUlEKCBBVDkxUFNfQ0FOX01CIENBTl9NYWlsYm94ICkgLyogcG9pbnRlciB0byBhIENBTiBNYWlsYm94ICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0dldEZhbWlseUlEDQorLy8qIFxicmllZiBSZXR1cm4gdGhlIE1lc3NhZ2UgSUQgUmVnaXN0ZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NBTl9HZXRGYW1pbHlJRCAoDQorCUFUOTFQU19DQU5fTUIJQ0FOX01haWxib3gpIC8vIHBvaW50ZXIgdG8gYSBDQU4gTWFpbGJveA0KIHsNCi0gICAgcmV0dXJuIENBTl9NYWlsYm94LT5DQU5fTUJfTUZJRDsNCisJcmV0dXJuIENBTl9NYWlsYm94LT5DQU5fTUJfTUZJRDsJDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0NBTl9DZmdNZXNzYWdlQ3RybCAqLw0KLS8qKiBcYnJpZWYgUmVxdWVzdCBhbmQgY29uZmlnIGZvciBhIHRyYW5zZmVyIG9uIHRoZSBjb3JyZXNwb25kaW5nIG1haWxib3ggKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9DQU5fQ2ZnTWVzc2FnZUN0cmxSZWcoIEFUOTFQU19DQU5fTUIgQ0FOX01haWxib3gsIC8qIHBvaW50ZXIgdG8gYSBDQU4gTWFpbGJveCAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbWVzc2FnZV9jdHJsX2NtZCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0NmZ01lc3NhZ2VDdHJsDQorLy8qIFxicmllZiBSZXF1ZXN0IGFuZCBjb25maWcgZm9yIGEgdHJhbnNmZXIgb24gdGhlIGNvcnJlc3BvbmRpbmcgbWFpbGJveA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0NBTl9DZmdNZXNzYWdlQ3RybFJlZyAoDQorCUFUOTFQU19DQU5fTUIJQ0FOX01haWxib3gsIC8vIHBvaW50ZXIgdG8gYSBDQU4gTWFpbGJveA0KKyAgICB1bnNpZ25lZCBpbnQgbWVzc2FnZV9jdHJsX2NtZCkNCiB7DQotICAgIENBTl9NYWlsYm94LT5DQU5fTUJfTUNSID0gbWVzc2FnZV9jdHJsX2NtZDsNCisJQ0FOX01haWxib3gtPkNBTl9NQl9NQ1IgPSBtZXNzYWdlX2N0cmxfY21kOwkNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQ0FOX0dldE1lc3NhZ2VTdGF0dXMgKi8NCi0vKiogXGJyaWVmIFJldHVybiBDQU4gTWFpbGJveCBTdGF0dXMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NBTl9HZXRNZXNzYWdlU3RhdHVzKCBBVDkxUFNfQ0FOX01CIENBTl9NYWlsYm94ICkgLyogcG9pbnRlciB0byBhIENBTiBNYWlsYm94ICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0dldE1lc3NhZ2VTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBDQU4gTWFpbGJveCBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NBTl9HZXRNZXNzYWdlU3RhdHVzICgNCisJQVQ5MVBTX0NBTl9NQglDQU5fTWFpbGJveCkgLy8gcG9pbnRlciB0byBhIENBTiBNYWlsYm94DQogew0KLSAgICByZXR1cm4gQ0FOX01haWxib3gtPkNBTl9NQl9NU1I7DQorCXJldHVybiBDQU5fTWFpbGJveC0+Q0FOX01CX01TUjsJDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0NBTl9DZmdNZXNzYWdlRGF0YUxvdyAqLw0KLS8qKiBcYnJpZWYgUHJvZ3JhbSBkYXRhIGxvdyB2YWx1ZSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0NBTl9DZmdNZXNzYWdlRGF0YUxvdyggQVQ5MVBTX0NBTl9NQiBDQU5fTWFpbGJveCwgLyogcG9pbnRlciB0byBhIENBTiBNYWlsYm94ICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBkYXRhICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fQ2ZnTWVzc2FnZURhdGFMb3cNCisvLyogXGJyaWVmIFByb2dyYW0gZGF0YSBsb3cgdmFsdWUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9DQU5fQ2ZnTWVzc2FnZURhdGFMb3cgKA0KKwlBVDkxUFNfQ0FOX01CCUNBTl9NYWlsYm94LCAvLyBwb2ludGVyIHRvIGEgQ0FOIE1haWxib3gNCisgICAgdW5zaWduZWQgaW50IGRhdGEpDQogew0KLSAgICBDQU5fTWFpbGJveC0+Q0FOX01CX01ETCA9IGRhdGE7DQorCUNBTl9NYWlsYm94LT5DQU5fTUJfTURMID0gZGF0YTsJDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0NBTl9HZXRNZXNzYWdlRGF0YUxvdyAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIGRhdGEgbG93IHZhbHVlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fR2V0TWVzc2FnZURhdGFMb3coIEFUOTFQU19DQU5fTUIgQ0FOX01haWxib3ggKSAvKiBwb2ludGVyIHRvIGEgQ0FOIE1haWxib3ggKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fR2V0TWVzc2FnZURhdGFMb3cNCisvLyogXGJyaWVmIFJldHVybiBkYXRhIGxvdyB2YWx1ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0FOX0dldE1lc3NhZ2VEYXRhTG93ICgNCisJQVQ5MVBTX0NBTl9NQglDQU5fTWFpbGJveCkgLy8gcG9pbnRlciB0byBhIENBTiBNYWlsYm94DQogew0KLSAgICByZXR1cm4gQ0FOX01haWxib3gtPkNBTl9NQl9NREw7DQorCXJldHVybiBDQU5fTWFpbGJveC0+Q0FOX01CX01ETDsJDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0NBTl9DZmdNZXNzYWdlRGF0YUhpZ2ggKi8NCi0vKiogXGJyaWVmIFByb2dyYW0gZGF0YSBoaWdoIHZhbHVlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQ0FOX0NmZ01lc3NhZ2VEYXRhSGlnaCggQVQ5MVBTX0NBTl9NQiBDQU5fTWFpbGJveCwgLyogcG9pbnRlciB0byBhIENBTiBNYWlsYm94ICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZGF0YSApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0NmZ01lc3NhZ2VEYXRhSGlnaA0KKy8vKiBcYnJpZWYgUHJvZ3JhbSBkYXRhIGhpZ2ggdmFsdWUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9DQU5fQ2ZnTWVzc2FnZURhdGFIaWdoICgNCisJQVQ5MVBTX0NBTl9NQglDQU5fTWFpbGJveCwgLy8gcG9pbnRlciB0byBhIENBTiBNYWlsYm94DQorICAgIHVuc2lnbmVkIGludCBkYXRhKQ0KIHsNCi0gICAgQ0FOX01haWxib3gtPkNBTl9NQl9NREggPSBkYXRhOw0KKwlDQU5fTWFpbGJveC0+Q0FOX01CX01ESCA9IGRhdGE7CQ0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9DQU5fR2V0TWVzc2FnZURhdGFIaWdoICovDQotLyoqIFxicmllZiBSZXR1cm4gZGF0YSBoaWdoIHZhbHVlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fR2V0TWVzc2FnZURhdGFIaWdoKCBBVDkxUFNfQ0FOX01CIENBTl9NYWlsYm94ICkgLyogcG9pbnRlciB0byBhIENBTiBNYWlsYm94ICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0dldE1lc3NhZ2VEYXRhSGlnaA0KKy8vKiBcYnJpZWYgUmV0dXJuIGRhdGEgaGlnaCB2YWx1ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0FOX0dldE1lc3NhZ2VEYXRhSGlnaCAoDQorCUFUOTFQU19DQU5fTUIJQ0FOX01haWxib3gpIC8vIHBvaW50ZXIgdG8gYSBDQU4gTWFpbGJveA0KIHsNCi0gICAgcmV0dXJuIENBTl9NYWlsYm94LT5DQU5fTUJfTURIOw0KKwlyZXR1cm4gQ0FOX01haWxib3gtPkNBTl9NQl9NREg7CQ0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9DQU5fT3BlbiAqLw0KLS8qKiBcYnJpZWYgT3BlbiBhIENBTiBQb3J0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fT3BlbiggY29uc3QgdW5zaWduZWQgaW50IG51bGwgKSAvKiBcYXJnICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX09wZW4NCisvLyogXGJyaWVmIE9wZW4gYSBDQU4gUG9ydA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0FOX09wZW4gKA0KKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IG51bGwpICAvLyBcYXJnDQogew0KLSAgICAvKiBOT1QgREVGSU5FRCBBVCBUSElTIE1PTUVOVCAqLw0KLSAgICByZXR1cm4oIDAgKTsNCisgICAgICAgIC8qIE5PVCBERUZJTkVEIEFUIFRISVMgTU9NRU5UICovDQorICAgICAgICByZXR1cm4gKCAwICk7DQorfQ0KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgQURDDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfRW5hYmxlSXQNCisvLyogXGJyaWVmIEVuYWJsZSBBREMgaW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQURDX0VuYWJsZUl0ICgNCisJQVQ5MVBTX0FEQyBwQURDLCAgICAgLy8gcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAgIC8vIElUIHRvIGJlIGVuYWJsZWQNCit7DQorCS8vKiBXcml0ZSB0byB0aGUgSUVSIHJlZ2lzdGVyDQorCXBBREMtPkFEQ19JRVIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfRGlzYWJsZUl0DQorLy8qIFxicmllZiBEaXNhYmxlIEFEQyBpbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BRENfRGlzYWJsZUl0ICgNCisJQVQ5MVBTX0FEQyBwQURDLCAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpIC8vIElUIHRvIGJlIGRpc2FibGVkDQorew0KKwkvLyogV3JpdGUgdG8gdGhlIElEUiByZWdpc3Rlcg0KKwlwQURDLT5BRENfSURSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0dldFN0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIEFEQyBJbnRlcnJ1cHQgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0U3RhdHVzKCAvLyBccmV0dXJuIEFEQyBJbnRlcnJ1cHQgU3RhdHVzDQorCUFUOTFQU19BREMgcEFEQykgLy8gcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorew0KKwlyZXR1cm4gcEFEQy0+QURDX1NSOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfR2V0SW50ZXJydXB0TWFza1N0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIEFEQyBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCAvLyBccmV0dXJuIEFEQyBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisJQVQ5MVBTX0FEQyBwQURDKSAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCit7DQorCXJldHVybiBwQURDLT5BRENfSU1SOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfSXNJbnRlcnJ1cHRNYXNrZWQNCisvLyogXGJyaWVmIFRlc3QgaWYgQURDIEludGVycnVwdCBpcyBNYXNrZWQgDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfSXNJbnRlcnJ1cHRNYXNrZWQoDQorICAgICAgICBBVDkxUFNfQURDIHBBREMsICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorCXJldHVybiAoQVQ5MUZfQURDX0dldEludGVycnVwdE1hc2tTdGF0dXMocEFEQykgJiBmbGFnKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0lzU3RhdHVzU2V0DQorLy8qIFxicmllZiBUZXN0IGlmIEFEQyBTdGF0dXMgaXMgU2V0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfSXNTdGF0dXNTZXQoDQorICAgICAgICBBVDkxUFNfQURDIHBBREMsICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorCXJldHVybiAoQVQ5MUZfQURDX0dldFN0YXR1cyhwQURDKSAmIGZsYWcpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfQ2ZnTW9kZVJlZw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIHRoZSBNb2RlIFJlZ2lzdGVyIG9mIHRoZSBBREMgY29udHJvbGxlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FEQ19DZmdNb2RlUmVnICgNCisJQVQ5MVBTX0FEQyBwQURDLCAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IG1vZGUpICAgICAgICAvLyBtb2RlIHJlZ2lzdGVyIA0KK3sNCisJLy8qIFdyaXRlIHRvIHRoZSBNUiByZWdpc3Rlcg0KKwlwQURDLT5BRENfTVIgPSBtb2RlOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfR2V0TW9kZVJlZw0KKy8vKiBcYnJpZWYgUmV0dXJuIHRoZSBNb2RlIFJlZ2lzdGVyIG9mIHRoZSBBREMgY29udHJvbGxlciB2YWx1ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQURDX0dldE1vZGVSZWcgKA0KKwlBVDkxUFNfQURDIHBBREMgLy8gcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorCSkNCit7DQorCXJldHVybiBwQURDLT5BRENfTVI7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfQ2ZnVGltaW5ncw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIHRoZSBkaWZmZXJlbnQgbmVjZXNzYXJ5IHRpbWluZ3Mgb2YgdGhlIEFEQyBjb250cm9sbGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQURDX0NmZ1RpbWluZ3MgKA0KKwlBVDkxUFNfQURDIHBBREMsIC8vIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgbWNrX2Nsb2NrLCAvLyBpbiBNSHogDQorCXVuc2lnbmVkIGludCBhZGNfY2xvY2ssIC8vIGluIE1IeiANCisJdW5zaWduZWQgaW50IHN0YXJ0dXBfdGltZSwgLy8gaW4gdXMgDQorCXVuc2lnbmVkIGludCBzYW1wbGVfYW5kX2hvbGRfdGltZSkJLy8gaW4gbnMgIA0KK3sNCisJdW5zaWduZWQgaW50IHByZXNjYWwsc3RhcnR1cCxzaHRpbTsNCisJDQorCXByZXNjYWwgPSBtY2tfY2xvY2svKDIqYWRjX2Nsb2NrKSAtIDE7DQorCXN0YXJ0dXAgPSBhZGNfY2xvY2sqc3RhcnR1cF90aW1lLzggLSAxOw0KKwlzaHRpbSA9IGFkY19jbG9jaypzYW1wbGVfYW5kX2hvbGRfdGltZS8xMDAwIC0gMTsNCisJDQorCS8vKiBXcml0ZSB0byB0aGUgTVIgcmVnaXN0ZXINCisJcEFEQy0+QURDX01SID0gKCAocHJlc2NhbDw8OCkgJiBBVDkxQ19BRENfUFJFU0NBTCkgfCAoIChzdGFydHVwPDwxNikgJiBBVDkxQ19BRENfU1RBUlRVUCkgfCAoIChzaHRpbTw8MjQpICYgQVQ5MUNfQURDX1NIVElNKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0VuYWJsZUNoYW5uZWwNCisvLyogXGJyaWVmIFJldHVybiBBREMgVGltZXIgUmVnaXN0ZXIgVmFsdWUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BRENfRW5hYmxlQ2hhbm5lbCAoDQorCUFUOTFQU19BREMgcEFEQywgLy8gcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBjaGFubmVsKSAgICAgICAgLy8gbW9kZSByZWdpc3RlciANCit7DQorCS8vKiBXcml0ZSB0byB0aGUgQ0hFUiByZWdpc3Rlcg0KKwlwQURDLT5BRENfQ0hFUiA9IGNoYW5uZWw7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FEQ19EaXNhYmxlQ2hhbm5lbA0KKy8vKiBcYnJpZWYgUmV0dXJuIEFEQyBUaW1lciBSZWdpc3RlciBWYWx1ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FEQ19EaXNhYmxlQ2hhbm5lbCAoDQorCUFUOTFQU19BREMgcEFEQywgLy8gcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBjaGFubmVsKSAgICAgICAgLy8gbW9kZSByZWdpc3RlciANCit7DQorCS8vKiBXcml0ZSB0byB0aGUgQ0hEUiByZWdpc3Rlcg0KKwlwQURDLT5BRENfQ0hEUiA9IGNoYW5uZWw7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FEQ19HZXRDaGFubmVsU3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gQURDIFRpbWVyIFJlZ2lzdGVyIFZhbHVlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0Q2hhbm5lbFN0YXR1cyAoDQorCUFUOTFQU19BREMgcEFEQyAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcmV0dXJuIHBBREMtPkFEQ19DSFNSOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX1N0YXJ0Q29udmVyc2lvbg0KKy8vKiBcYnJpZWYgU29mdHdhcmUgcmVxdWVzdCBmb3IgYSBhbmFsb2cgdG8gZGlnaXRhbCBjb252ZXJzaW9uIA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FEQ19TdGFydENvbnZlcnNpb24gKA0KKwlBVDkxUFNfQURDIHBBREMgLy8gcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorCSkNCit7DQorCXBBREMtPkFEQ19DUiA9IEFUOTFDX0FEQ19TVEFSVDsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FEQ19Tb2Z0UmVzZXQNCisvLyogXGJyaWVmIFNvZnR3YXJlIHJlc2V0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQURDX1NvZnRSZXNldCAoDQorCUFUOTFQU19BREMgcEFEQyAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcEFEQy0+QURDX0NSID0gQVQ5MUNfQURDX1NXUlNUOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0dldExhc3RDb252ZXJ0ZWREYXRhDQorLy8qIFxicmllZiBSZXR1cm4gdGhlIExhc3QgQ29udmVydGVkIERhdGENCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRMYXN0Q29udmVydGVkRGF0YSAoDQorCUFUOTFQU19BREMgcEFEQyAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcmV0dXJuIHBBREMtPkFEQ19MQ0RSOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDANCisvLyogXGJyaWVmIFJldHVybiB0aGUgQ2hhbm5lbCAwIENvbnZlcnRlZCBEYXRhDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNIMCAoDQorCUFUOTFQU19BREMgcEFEQyAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcmV0dXJuIHBBREMtPkFEQ19DRFIwOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDENCisvLyogXGJyaWVmIFJldHVybiB0aGUgQ2hhbm5lbCAxIENvbnZlcnRlZCBEYXRhDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNIMSAoDQorCUFUOTFQU19BREMgcEFEQyAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcmV0dXJuIHBBREMtPkFEQ19DRFIxOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDINCisvLyogXGJyaWVmIFJldHVybiB0aGUgQ2hhbm5lbCAyIENvbnZlcnRlZCBEYXRhDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNIMiAoDQorCUFUOTFQU19BREMgcEFEQyAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcmV0dXJuIHBBREMtPkFEQ19DRFIyOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDMNCisvLyogXGJyaWVmIFJldHVybiB0aGUgQ2hhbm5lbCAzIENvbnZlcnRlZCBEYXRhDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNIMyAoDQorCUFUOTFQU19BREMgcEFEQyAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcmV0dXJuIHBBREMtPkFEQ19DRFIzOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDQNCisvLyogXGJyaWVmIFJldHVybiB0aGUgQ2hhbm5lbCA0IENvbnZlcnRlZCBEYXRhDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNINCAoDQorCUFUOTFQU19BREMgcEFEQyAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcmV0dXJuIHBBREMtPkFEQ19DRFI0OwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDUNCisvLyogXGJyaWVmIFJldHVybiB0aGUgQ2hhbm5lbCA1IENvbnZlcnRlZCBEYXRhDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNINSAoDQorCUFUOTFQU19BREMgcEFEQyAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcmV0dXJuIHBBREMtPkFEQ19DRFI1OwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDYNCisvLyogXGJyaWVmIFJldHVybiB0aGUgQ2hhbm5lbCA2IENvbnZlcnRlZCBEYXRhDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNINiAoDQorCUFUOTFQU19BREMgcEFEQyAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcmV0dXJuIHBBREMtPkFEQ19DRFI2OwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDcNCisvLyogXGJyaWVmIFJldHVybiB0aGUgQ2hhbm5lbCA3IENvbnZlcnRlZCBEYXRhDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNINyAoDQorCUFUOTFQU19BREMgcEFEQyAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcmV0dXJuIHBBREMtPkFEQ19DRFI3OwkNCiB9DQogDQogLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0qICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBBREMNCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FEQ19FbmFibGVJdCAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIEFEQyBpbnRlcnJ1cHQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9BRENfRW5hYmxlSXQoIEFUOTFQU19BREMgcEFEQywgICAgLyogcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogSVQgdG8gYmUgZW5hYmxlZCAqLw0KKyAgICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIEFFUw0KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUVTX0VuYWJsZUl0DQorLy8qIFxicmllZiBFbmFibGUgQUVTIGludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FFU19FbmFibGVJdCAoDQorCUFUOTFQU19BRVMgcEFFUywgICAgIC8vIHBvaW50ZXIgdG8gYSBBRVMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgICAvLyBJVCB0byBiZSBlbmFibGVkDQogew0KLSAgICAvKiogV3JpdGUgdG8gdGhlIElFUiByZWdpc3RlciAqLw0KLSAgICBwQURDLT5BRENfSUVSID0gZmxhZzsNCisJLy8qIFdyaXRlIHRvIHRoZSBJRVIgcmVnaXN0ZXINCisJcEFFUy0+QUVTX0lFUiA9IGZsYWc7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FEQ19EaXNhYmxlSXQgKi8NCi0vKiogXGJyaWVmIERpc2FibGUgQURDIGludGVycnVwdCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0FEQ19EaXNhYmxlSXQoIEFUOTFQU19BREMgcEFEQywgICAgLyogcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIElUIHRvIGJlIGRpc2FibGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUVTX0Rpc2FibGVJdA0KKy8vKiBcYnJpZWYgRGlzYWJsZSBBRVMgaW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQUVTX0Rpc2FibGVJdCAoDQorCUFUOTFQU19BRVMgcEFFUywgLy8gcG9pbnRlciB0byBhIEFFUyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAvLyBJVCB0byBiZSBkaXNhYmxlZA0KIHsNCi0gICAgLyoqIFdyaXRlIHRvIHRoZSBJRFIgcmVnaXN0ZXIgKi8NCi0gICAgcEFEQy0+QURDX0lEUiA9IGZsYWc7DQorCS8vKiBXcml0ZSB0byB0aGUgSURSIHJlZ2lzdGVyDQorCXBBRVMtPkFFU19JRFIgPSBmbGFnOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BRENfR2V0U3RhdHVzICovDQotLyoqIFxicmllZiBSZXR1cm4gQURDIEludGVycnVwdCBTdGF0dXMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRTdGF0dXMoIC8qIFxyZXR1cm4gQURDIEludGVycnVwdCBTdGF0dXMgKi8NCi0gICAgQVQ5MVBTX0FEQyBwQURDICkgICAgICAgICAgICAgICAgICAgICAgLyogcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUVTX0dldFN0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIEFFUyBJbnRlcnJ1cHQgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRVNfR2V0U3RhdHVzKCAvLyBccmV0dXJuIEFFUyBJbnRlcnJ1cHQgU3RhdHVzDQorCUFUOTFQU19BRVMgcEFFUykgLy8gcG9pbnRlciB0byBhIEFFUyBjb250cm9sbGVyDQogew0KLSAgICByZXR1cm4gcEFEQy0+QURDX1NSOw0KKwlyZXR1cm4gcEFFUy0+QUVTX0lTUjsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQURDX0dldEludGVycnVwdE1hc2tTdGF0dXMgKi8NCi0vKiogXGJyaWVmIFJldHVybiBBREMgSW50ZXJydXB0IE1hc2sgU3RhdHVzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLyogXHJldHVybiBBREMgSW50ZXJydXB0IE1hc2sgU3RhdHVzICovDQotICAgIEFUOTFQU19BREMgcEFEQyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRVNfR2V0SW50ZXJydXB0TWFza1N0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIEFFUyBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FFU19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCAvLyBccmV0dXJuIEFFUyBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisJQVQ5MVBTX0FFUyBwQUVTKSAvLyBwb2ludGVyIHRvIGEgQUVTIGNvbnRyb2xsZXINCiB7DQotICAgIHJldHVybiBwQURDLT5BRENfSU1SOw0KKwlyZXR1cm4gcEFFUy0+QUVTX0lNUjsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQURDX0lzSW50ZXJydXB0TWFza2VkICovDQotLyoqIFxicmllZiBUZXN0IGlmIEFEQyBJbnRlcnJ1cHQgaXMgTWFza2VkICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfSXNJbnRlcnJ1cHRNYXNrZWQoIEFUOTFQU19BREMgcEFEQywgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FFU19Jc0ludGVycnVwdE1hc2tlZA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBBRVMgSW50ZXJydXB0IGlzIE1hc2tlZCANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FFU19Jc0ludGVycnVwdE1hc2tlZCgNCisgICAgICAgIEFUOTFQU19BRVMgcEFFUywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgQUVTIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KIHsNCi0gICAgcmV0dXJuKCBBVDkxRl9BRENfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggcEFEQyApICYgZmxhZyApOw0KKwlyZXR1cm4gKEFUOTFGX0FFU19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKHBBRVMpICYgZmxhZyk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FEQ19Jc1N0YXR1c1NldCAqLw0KLS8qKiBcYnJpZWYgVGVzdCBpZiBBREMgU3RhdHVzIGlzIFNldCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQURDX0lzU3RhdHVzU2V0KCBBVDkxUFNfQURDIHBBREMsICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRVNfSXNTdGF0dXNTZXQNCisvLyogXGJyaWVmIFRlc3QgaWYgQUVTIFN0YXR1cyBpcyBTZXQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FFU19Jc1N0YXR1c1NldCgNCisgICAgICAgIEFUOTFQU19BRVMgcEFFUywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgQUVTIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KIHsNCi0gICAgcmV0dXJuKCBBVDkxRl9BRENfR2V0U3RhdHVzKCBwQURDICkgJiBmbGFnICk7DQorCXJldHVybiAoQVQ5MUZfQUVTX0dldFN0YXR1cyhwQUVTKSAmIGZsYWcpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BRENfQ2ZnTW9kZVJlZyAqLw0KLS8qKiBcYnJpZWYgQ29uZmlndXJlIHRoZSBNb2RlIFJlZ2lzdGVyIG9mIHRoZSBBREMgY29udHJvbGxlciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0FEQ19DZmdNb2RlUmVnKCBBVDkxUFNfQURDIHBBREMsICAgIC8qIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtb2RlICkgLyogbW9kZSByZWdpc3RlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FFU19DZmdNb2RlUmVnDQorLy8qIFxicmllZiBDb25maWd1cmUgdGhlIE1vZGUgUmVnaXN0ZXIgb2YgdGhlIEFFUyBjb250cm9sbGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQUVTX0NmZ01vZGVSZWcgKA0KKwlBVDkxUFNfQUVTIHBBRVMsIC8vIHBvaW50ZXIgdG8gYSBBRVMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgbW9kZSkgICAgICAgIC8vIG1vZGUgcmVnaXN0ZXIgDQogew0KLSAgICAvKiogV3JpdGUgdG8gdGhlIE1SIHJlZ2lzdGVyICovDQotICAgIHBBREMtPkFEQ19NUiA9IG1vZGU7DQorCS8vKiBXcml0ZSB0byB0aGUgTVIgcmVnaXN0ZXINCisJcEFFUy0+QUVTX01SID0gbW9kZTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQURDX0dldE1vZGVSZWcgKi8NCi0vKiogXGJyaWVmIFJldHVybiB0aGUgTW9kZSBSZWdpc3RlciBvZiB0aGUgQURDIGNvbnRyb2xsZXIgdmFsdWUgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRNb2RlUmVnKCBBVDkxUFNfQURDIHBBREMgLyogcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUVTX0dldE1vZGVSZWcNCisvLyogXGJyaWVmIFJldHVybiB0aGUgTW9kZSBSZWdpc3RlciBvZiB0aGUgQUVTIGNvbnRyb2xsZXIgdmFsdWUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FFU19HZXRNb2RlUmVnICgNCisJQVQ5MVBTX0FFUyBwQUVTIC8vIHBvaW50ZXIgdG8gYSBBRVMgY29udHJvbGxlcg0KKwkpDQogew0KLSAgICByZXR1cm4gcEFEQy0+QURDX01SOw0KKwlyZXR1cm4gcEFFUy0+QUVTX01SOwkNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQURDX0NmZ1RpbWluZ3MgKi8NCi0vKiogXGJyaWVmIENvbmZpZ3VyZSB0aGUgZGlmZmVyZW50IG5lY2Vzc2FyeSB0aW1pbmdzIG9mIHRoZSBBREMgY29udHJvbGxlciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0FEQ19DZmdUaW1pbmdzKCBBVDkxUFNfQURDIHBBREMsICAgICAgICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbWNrX2Nsb2NrLCAgICAgICAgICAgICAvKiBpbiBNSHogKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYWRjX2Nsb2NrLCAgICAgICAgICAgICAvKiBpbiBNSHogKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3RhcnR1cF90aW1lLCAgICAgICAgICAvKiBpbiB1cyAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVfYW5kX2hvbGRfdGltZSApIC8qIGluIG5zICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUVTX1N0YXJ0UHJvY2Vzc2luZw0KKy8vKiBcYnJpZWYgU3RhcnQgRW5jcnlwdGlvbiBvciBEZWNyeXB0aW9uDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQUVTX1N0YXJ0UHJvY2Vzc2luZyAoDQorCUFUOTFQU19BRVMgcEFFUyAvLyBwb2ludGVyIHRvIGEgQUVTIGNvbnRyb2xsZXINCisJKQ0KIHsNCi0gICAgdW5zaWduZWQgaW50IHByZXNjYWwsIHN0YXJ0dXAsIHNodGltOw0KLQ0KLSAgICBwcmVzY2FsID0gbWNrX2Nsb2NrIC8gKCAyICogYWRjX2Nsb2NrICkgLSAxOw0KLSAgICBzdGFydHVwID0gYWRjX2Nsb2NrICogc3RhcnR1cF90aW1lIC8gOCAtIDE7DQotICAgIHNodGltID0gYWRjX2Nsb2NrICogc2FtcGxlX2FuZF9ob2xkX3RpbWUgLyAxMDAwIC0gMTsNCi0NCi0gICAgLyoqIFdyaXRlIHRvIHRoZSBNUiByZWdpc3RlciAqLw0KLSAgICBwQURDLT5BRENfTVIgPSAoICggcHJlc2NhbCA8PCA4ICkgJiBBVDkxQ19BRENfUFJFU0NBTCApIHwgKCAoIHN0YXJ0dXAgPDwgMTYgKSAmIEFUOTFDX0FEQ19TVEFSVFVQICkgfCAoICggc2h0aW0gPDwgMjQgKSAmIEFUOTFDX0FEQ19TSFRJTSApOw0KKwlwQUVTLT5BRVNfQ1IgPSBBVDkxQ19BRVNfU1RBUlQ7CQ0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BRENfRW5hYmxlQ2hhbm5lbCAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIEFEQyBUaW1lciBSZWdpc3RlciBWYWx1ZSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0FEQ19FbmFibGVDaGFubmVsKCBBVDkxUFNfQURDIHBBREMsICAgICAgIC8qIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjaGFubmVsICkgLyogbW9kZSByZWdpc3RlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FFU19Tb2Z0UmVzZXQNCisvLyogXGJyaWVmIFJlc2V0IEFFUw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FFU19Tb2Z0UmVzZXQgKA0KKwlBVDkxUFNfQUVTIHBBRVMgLy8gcG9pbnRlciB0byBhIEFFUyBjb250cm9sbGVyDQorCSkNCiB7DQotICAgIC8qKiBXcml0ZSB0byB0aGUgQ0hFUiByZWdpc3RlciAqLw0KLSAgICBwQURDLT5BRENfQ0hFUiA9IGNoYW5uZWw7DQorCXBBRVMtPkFFU19DUiA9IEFUOTFDX0FFU19TV1JTVDsJDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FEQ19EaXNhYmxlQ2hhbm5lbCAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIEFEQyBUaW1lciBSZWdpc3RlciBWYWx1ZSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0FEQ19EaXNhYmxlQ2hhbm5lbCggQVQ5MVBTX0FEQyBwQURDLCAgICAgICAvKiBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNoYW5uZWwgKSAvKiBtb2RlIHJlZ2lzdGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUVTX0xvYWROZXdTZWVkDQorLy8qIFxicmllZiBMb2FkIE5ldyBTZWVkIGluIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FFU19Mb2FkTmV3U2VlZCAoDQorCUFUOTFQU19BRVMgcEFFUyAvLyBwb2ludGVyIHRvIGEgQUVTIGNvbnRyb2xsZXINCisJKQ0KIHsNCi0gICAgLyoqIFdyaXRlIHRvIHRoZSBDSERSIHJlZ2lzdGVyICovDQotICAgIHBBREMtPkFEQ19DSERSID0gY2hhbm5lbDsNCisJcEFFUy0+QUVTX0NSID0gQVQ5MUNfQUVTX0xPQURTRUVEOwkNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQURDX0dldENoYW5uZWxTdGF0dXMgKi8NCi0vKiogXGJyaWVmIFJldHVybiBBREMgVGltZXIgUmVnaXN0ZXIgVmFsdWUgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRDaGFubmVsU3RhdHVzKCBBVDkxUFNfQURDIHBBREMgLyogcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUVTX1NldENyeXB0b0tleQ0KKy8vKiBcYnJpZWYgU2V0IENyeXB0b2dyYXBoaWMgS2V5IHgNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BRVNfU2V0Q3J5cHRvS2V5ICgNCisJQVQ5MVBTX0FFUyBwQUVTLCAvLyBwb2ludGVyIHRvIGEgQUVTIGNvbnRyb2xsZXINCisJdW5zaWduZWQgY2hhciBpbmRleCwNCisJdW5zaWduZWQgaW50IGtleXdvcmQNCisJKQ0KIHsNCi0gICAgcmV0dXJuIHBBREMtPkFEQ19DSFNSOw0KKwlwQUVTLT5BRVNfS0VZV3hSW2luZGV4XSA9IGtleXdvcmQ7CQ0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BRENfU3RhcnRDb252ZXJzaW9uICovDQotLyoqIFxicmllZiBTb2Z0d2FyZSByZXF1ZXN0IGZvciBhIGFuYWxvZyB0byBkaWdpdGFsIGNvbnZlcnNpb24gKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9BRENfU3RhcnRDb252ZXJzaW9uKCBBVDkxUFNfQURDIHBBREMgLyogcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUVTX0lucHV0RGF0YQ0KKy8vKiBcYnJpZWYgU2V0IElucHV0IERhdGEgeA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FFU19JbnB1dERhdGEgKA0KKwlBVDkxUFNfQUVTIHBBRVMsIC8vIHBvaW50ZXIgdG8gYSBBRVMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGluZGV4LA0KKwl1bnNpZ25lZCBpbnQgaW5kYXRhDQorCSkNCiB7DQotICAgIHBBREMtPkFEQ19DUiA9IEFUOTFDX0FEQ19TVEFSVDsNCisJcEFFUy0+QUVTX0lEQVRBeFJbaW5kZXhdID0gaW5kYXRhOwkNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQURDX1NvZnRSZXNldCAqLw0KLS8qKiBcYnJpZWYgU29mdHdhcmUgcmVzZXQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9BRENfU29mdFJlc2V0KCBBVDkxUFNfQURDIHBBREMgLyogcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUVTX0dldE91dHB1dERhdGENCisvLyogXGJyaWVmIEdldCBPdXRwdXQgRGF0YSB4DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRVNfR2V0T3V0cHV0RGF0YSAoDQorCUFUOTFQU19BRVMgcEFFUywgLy8gcG9pbnRlciB0byBhIEFFUyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGNoYXIgaW5kZXgNCisJKQ0KIHsNCi0gICAgcEFEQy0+QURDX0NSID0gQVQ5MUNfQURDX1NXUlNUOw0KKwlyZXR1cm4gcEFFUy0+QUVTX09EQVRBeFJbaW5kZXhdOwkNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQURDX0dldExhc3RDb252ZXJ0ZWREYXRhICovDQotLyoqIFxicmllZiBSZXR1cm4gdGhlIExhc3QgQ29udmVydGVkIERhdGEgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRMYXN0Q29udmVydGVkRGF0YSggQVQ5MVBTX0FEQyBwQURDIC8qIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRVNfU2V0SW5pdGlhbGl6YXRpb25WZWN0b3INCisvLyogXGJyaWVmIFNldCBJbml0aWFsaXphdGlvbiBWZWN0b3IgKG9yIENvdW50ZXIpIHgNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BRVNfU2V0SW5pdGlhbGl6YXRpb25WZWN0b3IgKA0KKwlBVDkxUFNfQUVTIHBBRVMsIC8vIHBvaW50ZXIgdG8gYSBBRVMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGluZGV4LA0KKwl1bnNpZ25lZCBpbnQgaW5pdHZlY3Rvcg0KKwkpDQogew0KLSAgICByZXR1cm4gcEFEQy0+QURDX0xDRFI7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0gwICovDQotLyoqIFxicmllZiBSZXR1cm4gdGhlIENoYW5uZWwgMCBDb252ZXJ0ZWQgRGF0YSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDAoIEFUOTFQU19BREMgcEFEQyAvKiBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCi17DQotICAgIHJldHVybiBwQURDLT5BRENfQ0RSMDsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDEgKi8NCi0vKiogXGJyaWVmIFJldHVybiB0aGUgQ2hhbm5lbCAxIENvbnZlcnRlZCBEYXRhICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNIMSggQVQ5MVBTX0FEQyBwQURDIC8qIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KLXsNCi0gICAgcmV0dXJuIHBBREMtPkFEQ19DRFIxOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNIMiAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIHRoZSBDaGFubmVsIDIgQ29udmVydGVkIERhdGEgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0gyKCBBVDkxUFNfQURDIHBBREMgLyogcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQotew0KLSAgICByZXR1cm4gcEFEQy0+QURDX0NEUjI7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0gzICovDQotLyoqIFxicmllZiBSZXR1cm4gdGhlIENoYW5uZWwgMyBDb252ZXJ0ZWQgRGF0YSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDMoIEFUOTFQU19BREMgcEFEQyAvKiBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCi17DQotICAgIHJldHVybiBwQURDLT5BRENfQ0RSMzsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDQgKi8NCi0vKiogXGJyaWVmIFJldHVybiB0aGUgQ2hhbm5lbCA0IENvbnZlcnRlZCBEYXRhICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNINCggQVQ5MVBTX0FEQyBwQURDIC8qIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KLXsNCi0gICAgcmV0dXJuIHBBREMtPkFEQ19DRFI0Ow0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNINSAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIHRoZSBDaGFubmVsIDUgQ29udmVydGVkIERhdGEgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0g1KCBBVDkxUFNfQURDIHBBREMgLyogcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQotew0KLSAgICByZXR1cm4gcEFEQy0+QURDX0NEUjU7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0g2ICovDQotLyoqIFxicmllZiBSZXR1cm4gdGhlIENoYW5uZWwgNiBDb252ZXJ0ZWQgRGF0YSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDYoIEFUOTFQU19BREMgcEFEQyAvKiBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCi17DQotICAgIHJldHVybiBwQURDLT5BRENfQ0RSNjsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDcgKi8NCi0vKiogXGJyaWVmIFJldHVybiB0aGUgQ2hhbm5lbCA3IENvbnZlcnRlZCBEYXRhICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNINyggQVQ5MVBTX0FEQyBwQURDIC8qIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KLXsNCi0gICAgcmV0dXJuIHBBREMtPkFEQ19DRFI3Ow0KKwlwQUVTLT5BRVNfSVZ4UltpbmRleF0gPSBpbml0dmVjdG9yOwkNCiB9DQogDQogLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0qICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBBRVMNCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FFU19FbmFibGVJdCAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIEFFUyBpbnRlcnJ1cHQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9BRVNfRW5hYmxlSXQoIEFUOTFQU19BRVMgcEFFUywgICAgLyogcG9pbnRlciB0byBhIEFFUyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogSVQgdG8gYmUgZW5hYmxlZCAqLw0KKyAgICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFRERVMNCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RERVNfRW5hYmxlSXQNCisvLyogXGJyaWVmIEVuYWJsZSBUREVTIGludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1RERVNfRW5hYmxlSXQgKA0KKwlBVDkxUFNfVERFUyBwVERFUywgICAgIC8vIHBvaW50ZXIgdG8gYSBUREVTIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpICAgLy8gSVQgdG8gYmUgZW5hYmxlZA0KIHsNCi0gICAgLyoqIFdyaXRlIHRvIHRoZSBJRVIgcmVnaXN0ZXIgKi8NCi0gICAgcEFFUy0+QUVTX0lFUiA9IGZsYWc7DQorCS8vKiBXcml0ZSB0byB0aGUgSUVSIHJlZ2lzdGVyDQorCXBUREVTLT5UREVTX0lFUiA9IGZsYWc7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FFU19EaXNhYmxlSXQgKi8NCi0vKiogXGJyaWVmIERpc2FibGUgQUVTIGludGVycnVwdCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0FFU19EaXNhYmxlSXQoIEFUOTFQU19BRVMgcEFFUywgICAgLyogcG9pbnRlciB0byBhIEFFUyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIElUIHRvIGJlIGRpc2FibGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVERFU19EaXNhYmxlSXQNCisvLyogXGJyaWVmIERpc2FibGUgVERFUyBpbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UREVTX0Rpc2FibGVJdCAoDQorCUFUOTFQU19UREVTIHBUREVTLCAvLyBwb2ludGVyIHRvIGEgVERFUyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAvLyBJVCB0byBiZSBkaXNhYmxlZA0KIHsNCi0gICAgLyoqIFdyaXRlIHRvIHRoZSBJRFIgcmVnaXN0ZXIgKi8NCi0gICAgcEFFUy0+QUVTX0lEUiA9IGZsYWc7DQorCS8vKiBXcml0ZSB0byB0aGUgSURSIHJlZ2lzdGVyDQorCXBUREVTLT5UREVTX0lEUiA9IGZsYWc7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FFU19HZXRTdGF0dXMgKi8NCi0vKiogXGJyaWVmIFJldHVybiBBRVMgSW50ZXJydXB0IFN0YXR1cyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQUVTX0dldFN0YXR1cyggLyogXHJldHVybiBBRVMgSW50ZXJydXB0IFN0YXR1cyAqLw0KLSAgICBBVDkxUFNfQUVTIHBBRVMgKSAgICAgICAgICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIGEgQUVTIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UREVTX0dldFN0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFRERVMgSW50ZXJydXB0IFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVERFU19HZXRTdGF0dXMoIC8vIFxyZXR1cm4gVERFUyBJbnRlcnJ1cHQgU3RhdHVzDQorCUFUOTFQU19UREVTIHBUREVTKSAvLyBwb2ludGVyIHRvIGEgVERFUyBjb250cm9sbGVyDQogew0KLSAgICByZXR1cm4gcEFFUy0+QUVTX0lTUjsNCisJcmV0dXJuIHBUREVTLT5UREVTX0lTUjsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQUVTX0dldEludGVycnVwdE1hc2tTdGF0dXMgKi8NCi0vKiogXGJyaWVmIFJldHVybiBBRVMgSW50ZXJydXB0IE1hc2sgU3RhdHVzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRVNfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLyogXHJldHVybiBBRVMgSW50ZXJydXB0IE1hc2sgU3RhdHVzICovDQotICAgIEFUOTFQU19BRVMgcEFFUyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIGEgQUVTIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UREVTX0dldEludGVycnVwdE1hc2tTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBUREVTIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVERFU19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCAvLyBccmV0dXJuIFRERVMgSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorCUFUOTFQU19UREVTIHBUREVTKSAvLyBwb2ludGVyIHRvIGEgVERFUyBjb250cm9sbGVyDQogew0KLSAgICByZXR1cm4gcEFFUy0+QUVTX0lNUjsNCisJcmV0dXJuIHBUREVTLT5UREVTX0lNUjsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQUVTX0lzSW50ZXJydXB0TWFza2VkICovDQotLyoqIFxicmllZiBUZXN0IGlmIEFFUyBJbnRlcnJ1cHQgaXMgTWFza2VkICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRVNfSXNJbnRlcnJ1cHRNYXNrZWQoIEFUOTFQU19BRVMgcEFFUywgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIEFFUyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RERVNfSXNJbnRlcnJ1cHRNYXNrZWQNCisvLyogXGJyaWVmIFRlc3QgaWYgVERFUyBJbnRlcnJ1cHQgaXMgTWFza2VkIA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVERFU19Jc0ludGVycnVwdE1hc2tlZCgNCisgICAgICAgIEFUOTFQU19UREVTIHBUREVTLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBUREVTIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KIHsNCi0gICAgcmV0dXJuKCBBVDkxRl9BRVNfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggcEFFUyApICYgZmxhZyApOw0KKwlyZXR1cm4gKEFUOTFGX1RERVNfR2V0SW50ZXJydXB0TWFza1N0YXR1cyhwVERFUykgJiBmbGFnKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQUVTX0lzU3RhdHVzU2V0ICovDQotLyoqIFxicmllZiBUZXN0IGlmIEFFUyBTdGF0dXMgaXMgU2V0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRVNfSXNTdGF0dXNTZXQoIEFUOTFQU19BRVMgcEFFUywgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIEFFUyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RERVNfSXNTdGF0dXNTZXQNCisvLyogXGJyaWVmIFRlc3QgaWYgVERFUyBTdGF0dXMgaXMgU2V0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9UREVTX0lzU3RhdHVzU2V0KA0KKyAgICAgICAgQVQ5MVBTX1RERVMgcFRERVMsICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFRERVMgY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQogew0KLSAgICByZXR1cm4oIEFUOTFGX0FFU19HZXRTdGF0dXMoIHBBRVMgKSAmIGZsYWcgKTsNCisJcmV0dXJuIChBVDkxRl9UREVTX0dldFN0YXR1cyhwVERFUykgJiBmbGFnKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQUVTX0NmZ01vZGVSZWcgKi8NCi0vKiogXGJyaWVmIENvbmZpZ3VyZSB0aGUgTW9kZSBSZWdpc3RlciBvZiB0aGUgQUVTIGNvbnRyb2xsZXIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9BRVNfQ2ZnTW9kZVJlZyggQVQ5MVBTX0FFUyBwQUVTLCAgICAvKiBwb2ludGVyIHRvIGEgQUVTIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbW9kZSApIC8qIG1vZGUgcmVnaXN0ZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UREVTX0NmZ01vZGVSZWcNCisvLyogXGJyaWVmIENvbmZpZ3VyZSB0aGUgTW9kZSBSZWdpc3RlciBvZiB0aGUgVERFUyBjb250cm9sbGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVERFU19DZmdNb2RlUmVnICgNCisJQVQ5MVBTX1RERVMgcFRERVMsIC8vIHBvaW50ZXIgdG8gYSBUREVTIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IG1vZGUpICAgICAgICAvLyBtb2RlIHJlZ2lzdGVyIA0KIHsNCi0gICAgLyoqIFdyaXRlIHRvIHRoZSBNUiByZWdpc3RlciAqLw0KLSAgICBwQUVTLT5BRVNfTVIgPSBtb2RlOw0KKwkvLyogV3JpdGUgdG8gdGhlIE1SIHJlZ2lzdGVyDQorCXBUREVTLT5UREVTX01SID0gbW9kZTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQUVTX0dldE1vZGVSZWcgKi8NCi0vKiogXGJyaWVmIFJldHVybiB0aGUgTW9kZSBSZWdpc3RlciBvZiB0aGUgQUVTIGNvbnRyb2xsZXIgdmFsdWUgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FFU19HZXRNb2RlUmVnKCBBVDkxUFNfQUVTIHBBRVMgLyogcG9pbnRlciB0byBhIEFFUyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVERFU19HZXRNb2RlUmVnDQorLy8qIFxicmllZiBSZXR1cm4gdGhlIE1vZGUgUmVnaXN0ZXIgb2YgdGhlIFRERVMgY29udHJvbGxlciB2YWx1ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVERFU19HZXRNb2RlUmVnICgNCisJQVQ5MVBTX1RERVMgcFRERVMgLy8gcG9pbnRlciB0byBhIFRERVMgY29udHJvbGxlcg0KKwkpDQogew0KLSAgICByZXR1cm4gcEFFUy0+QUVTX01SOw0KKwlyZXR1cm4gcFRERVMtPlRERVNfTVI7CQ0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BRVNfU3RhcnRQcm9jZXNzaW5nICovDQotLyoqIFxicmllZiBTdGFydCBFbmNyeXB0aW9uIG9yIERlY3J5cHRpb24gKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9BRVNfU3RhcnRQcm9jZXNzaW5nKCBBVDkxUFNfQUVTIHBBRVMgLyogcG9pbnRlciB0byBhIEFFUyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVERFU19TdGFydFByb2Nlc3NpbmcNCisvLyogXGJyaWVmIFN0YXJ0IEVuY3J5cHRpb24gb3IgRGVjcnlwdGlvbg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1RERVNfU3RhcnRQcm9jZXNzaW5nICgNCisJQVQ5MVBTX1RERVMgcFRERVMgLy8gcG9pbnRlciB0byBhIFRERVMgY29udHJvbGxlcg0KKwkpDQogew0KLSAgICBwQUVTLT5BRVNfQ1IgPSBBVDkxQ19BRVNfU1RBUlQ7DQorCXBUREVTLT5UREVTX0NSID0gQVQ5MUNfVERFU19TVEFSVDsJDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FFU19Tb2Z0UmVzZXQgKi8NCi0vKiogXGJyaWVmIFJlc2V0IEFFUyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0FFU19Tb2Z0UmVzZXQoIEFUOTFQU19BRVMgcEFFUyAvKiBwb2ludGVyIHRvIGEgQUVTIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UREVTX1NvZnRSZXNldA0KKy8vKiBcYnJpZWYgUmVzZXQgVERFUw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1RERVNfU29mdFJlc2V0ICgNCisJQVQ5MVBTX1RERVMgcFRERVMgLy8gcG9pbnRlciB0byBhIFRERVMgY29udHJvbGxlcg0KKwkpDQogew0KLSAgICBwQUVTLT5BRVNfQ1IgPSBBVDkxQ19BRVNfU1dSU1Q7DQorCXBUREVTLT5UREVTX0NSID0gQVQ5MUNfVERFU19TV1JTVDsJDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FFU19Mb2FkTmV3U2VlZCAqLw0KLS8qKiBcYnJpZWYgTG9hZCBOZXcgU2VlZCBpbiB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9BRVNfTG9hZE5ld1NlZWQoIEFUOTFQU19BRVMgcEFFUyAvKiBwb2ludGVyIHRvIGEgQUVTIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RERVNfU2V0Q3J5cHRvS2V5MQ0KKy8vKiBcYnJpZWYgU2V0IENyeXB0b2dyYXBoaWMgS2V5IDEgV29yZCB4DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVERFU19TZXRDcnlwdG9LZXkxICgNCisJQVQ5MVBTX1RERVMgcFRERVMsIC8vIHBvaW50ZXIgdG8gYSBUREVTIGNvbnRyb2xsZXINCisJdW5zaWduZWQgY2hhciBpbmRleCwNCisJdW5zaWduZWQgaW50IGtleXdvcmQNCisJKQ0KIHsNCi0gICAgcEFFUy0+QUVTX0NSID0gQVQ5MUNfQUVTX0xPQURTRUVEOw0KKwlwVERFUy0+VERFU19LRVkxV3hSW2luZGV4XSA9IGtleXdvcmQ7CQ0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BRVNfU2V0Q3J5cHRvS2V5ICovDQotLyoqIFxicmllZiBTZXQgQ3J5cHRvZ3JhcGhpYyBLZXkgeCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0FFU19TZXRDcnlwdG9LZXkoIEFUOTFQU19BRVMgcEFFUywgLyogcG9pbnRlciB0byBhIEFFUyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGluZGV4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGtleXdvcmQgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RERVNfU2V0Q3J5cHRvS2V5Mg0KKy8vKiBcYnJpZWYgU2V0IENyeXB0b2dyYXBoaWMgS2V5IDIgV29yZCB4DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVERFU19TZXRDcnlwdG9LZXkyICgNCisJQVQ5MVBTX1RERVMgcFRERVMsIC8vIHBvaW50ZXIgdG8gYSBUREVTIGNvbnRyb2xsZXINCisJdW5zaWduZWQgY2hhciBpbmRleCwNCisJdW5zaWduZWQgaW50IGtleXdvcmQNCisJKQ0KIHsNCi0gICAgcEFFUy0+QUVTX0tFWVd4UlsgaW5kZXggXSA9IGtleXdvcmQ7DQorCXBUREVTLT5UREVTX0tFWTJXeFJbaW5kZXhdID0ga2V5d29yZDsJDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FFU19JbnB1dERhdGEgKi8NCi0vKiogXGJyaWVmIFNldCBJbnB1dCBEYXRhIHggKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9BRVNfSW5wdXREYXRhKCBBVDkxUFNfQUVTIHBBRVMsIC8qIHBvaW50ZXIgdG8gYSBBRVMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBpbmRleCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbmRhdGEgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RERVNfU2V0Q3J5cHRvS2V5Mw0KKy8vKiBcYnJpZWYgU2V0IENyeXB0b2dyYXBoaWMgS2V5IDMgV29yZCB4DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVERFU19TZXRDcnlwdG9LZXkzICgNCisJQVQ5MVBTX1RERVMgcFRERVMsIC8vIHBvaW50ZXIgdG8gYSBUREVTIGNvbnRyb2xsZXINCisJdW5zaWduZWQgY2hhciBpbmRleCwNCisJdW5zaWduZWQgaW50IGtleXdvcmQNCisJKQ0KIHsNCi0gICAgcEFFUy0+QUVTX0lEQVRBeFJbIGluZGV4IF0gPSBpbmRhdGE7DQorCXBUREVTLT5UREVTX0tFWTNXeFJbaW5kZXhdID0ga2V5d29yZDsJDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FFU19HZXRPdXRwdXREYXRhICovDQotLyoqIFxicmllZiBHZXQgT3V0cHV0IERhdGEgeCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQUVTX0dldE91dHB1dERhdGEoIEFUOTFQU19BRVMgcEFFUywgLyogcG9pbnRlciB0byBhIEFFUyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGluZGV4ICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UREVTX0lucHV0RGF0YQ0KKy8vKiBcYnJpZWYgU2V0IElucHV0IERhdGEgeA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1RERVNfSW5wdXREYXRhICgNCisJQVQ5MVBTX1RERVMgcFRERVMsIC8vIHBvaW50ZXIgdG8gYSBUREVTIGNvbnRyb2xsZXINCisJdW5zaWduZWQgY2hhciBpbmRleCwNCisJdW5zaWduZWQgaW50IGluZGF0YQ0KKwkpDQogew0KLSAgICByZXR1cm4gcEFFUy0+QUVTX09EQVRBeFJbIGluZGV4IF07DQorCXBUREVTLT5UREVTX0lEQVRBeFJbaW5kZXhdID0gaW5kYXRhOwkNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQUVTX1NldEluaXRpYWxpemF0aW9uVmVjdG9yICovDQotLyoqIFxicmllZiBTZXQgSW5pdGlhbGl6YXRpb24gVmVjdG9yIChvciBDb3VudGVyKSB4ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQUVTX1NldEluaXRpYWxpemF0aW9uVmVjdG9yKCBBVDkxUFNfQUVTIHBBRVMsIC8qIHBvaW50ZXIgdG8gYSBBRVMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGluZGV4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaW5pdHZlY3RvciApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVERFU19HZXRPdXRwdXREYXRhDQorLy8qIFxicmllZiBHZXQgT3V0cHV0IERhdGEgeA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVERFU19HZXRPdXRwdXREYXRhICgNCisJQVQ5MVBTX1RERVMgcFRERVMsIC8vIHBvaW50ZXIgdG8gYSBUREVTIGNvbnRyb2xsZXINCisJdW5zaWduZWQgY2hhciBpbmRleA0KKwkpDQogew0KLSAgICBwQUVTLT5BRVNfSVZ4UlsgaW5kZXggXSA9IGluaXR2ZWN0b3I7DQorCXJldHVybiBwVERFUy0+VERFU19PREFUQXhSW2luZGV4XTsJDQogfQ0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotKiAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgVERFUw0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVERFU19FbmFibGVJdCAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIFRERVMgaW50ZXJydXB0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVERFU19FbmFibGVJdCggQVQ5MVBTX1RERVMgcFRERVMsICAvKiBwb2ludGVyIHRvIGEgVERFUyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIElUIHRvIGJlIGVuYWJsZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UREVTX1NldEluaXRpYWxpemF0aW9uVmVjdG9yDQorLy8qIFxicmllZiBTZXQgSW5pdGlhbGl6YXRpb24gVmVjdG9yIHgNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UREVTX1NldEluaXRpYWxpemF0aW9uVmVjdG9yICgNCisJQVQ5MVBTX1RERVMgcFRERVMsIC8vIHBvaW50ZXIgdG8gYSBUREVTIGNvbnRyb2xsZXINCisJdW5zaWduZWQgY2hhciBpbmRleCwNCisJdW5zaWduZWQgaW50IGluaXR2ZWN0b3INCisJKQ0KIHsNCi0gICAgLyoqIFdyaXRlIHRvIHRoZSBJRVIgcmVnaXN0ZXIgKi8NCi0gICAgcFRERVMtPlRERVNfSUVSID0gZmxhZzsNCisJcFRERVMtPlRERVNfSVZ4UltpbmRleF0gPSBpbml0dmVjdG9yOwkNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVERFU19EaXNhYmxlSXQgKi8NCi0vKiogXGJyaWVmIERpc2FibGUgVERFUyBpbnRlcnJ1cHQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9UREVTX0Rpc2FibGVJdCggQVQ5MVBTX1RERVMgcFRERVMsICAvKiBwb2ludGVyIHRvIGEgVERFUyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBJVCB0byBiZSBkaXNhYmxlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0RCR1VfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBEQkdVDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfREJHVV9DZmdQTUMgKHZvaWQpDQogew0KLSAgICAvKiogV3JpdGUgdG8gdGhlIElEUiByZWdpc3RlciAqLw0KLSAgICBwVERFUy0+VERFU19JRFIgPSBmbGFnOw0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9TWVMpKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVERFU19HZXRTdGF0dXMgKi8NCi0vKiogXGJyaWVmIFJldHVybiBUREVTIEludGVycnVwdCBTdGF0dXMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1RERVNfR2V0U3RhdHVzKCAvKiBccmV0dXJuIFRERVMgSW50ZXJydXB0IFN0YXR1cyAqLw0KLSAgICBBVDkxUFNfVERFUyBwVERFUyApICAgICAgICAgICAgICAgICAgICAgLyogcG9pbnRlciB0byBhIFRERVMgY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0RCR1VfQ2ZnUElPDQorLy8qIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIERCR1Ugc2lnbmFscw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0RCR1VfQ2ZnUElPICh2b2lkKQ0KIHsNCi0gICAgcmV0dXJuIHBUREVTLT5UREVTX0lTUjsNCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9BLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTI3X0RSWEQgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyOF9EVFhEICAgICksIC8vIFBlcmlwaGVyYWwgQQ0KKwkJMCk7IC8vIFBlcmlwaGVyYWwgQg0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9UREVTX0dldEludGVycnVwdE1hc2tTdGF0dXMgKi8NCi0vKiogXGJyaWVmIFJldHVybiBUREVTIEludGVycnVwdCBNYXNrIFN0YXR1cyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVERFU19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCAvKiBccmV0dXJuIFRERVMgSW50ZXJydXB0IE1hc2sgU3RhdHVzICovDQotICAgIEFUOTFQU19UREVTIHBUREVTICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcG9pbnRlciB0byBhIFRERVMgY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFBNQw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BNQ19DZmdQTUMgKHZvaWQpDQogew0KLSAgICByZXR1cm4gcFRERVMtPlRERVNfSU1SOw0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9TWVMpKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVERFU19Jc0ludGVycnVwdE1hc2tlZCAqLw0KLS8qKiBcYnJpZWYgVGVzdCBpZiBUREVTIEludGVycnVwdCBpcyBNYXNrZWQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1RERVNfSXNJbnRlcnJ1cHRNYXNrZWQoIEFUOTFQU19UREVTIHBUREVTLCAgLyogXGFyZyAgcG9pbnRlciB0byBhIFRERVMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUE1DX0NmZ1BJTw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBQTUMgc2lnbmFscw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BNQ19DZmdQSU8gKHZvaWQpDQogew0KLSAgICByZXR1cm4oIEFUOTFGX1RERVNfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggcFRERVMgKSAmIGZsYWcgKTsNCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9CLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjMwX1BDSzIgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIyOV9QQ0sxICAgICksIC8vIFBlcmlwaGVyYWwgQQ0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMjBfUENLMCAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjBfUENLMCAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjIyX1BDSzIgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIyMV9QQ0sxICAgICkpOyAvLyBQZXJpcGhlcmFsIEINCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9BLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCTAsIC8vIFBlcmlwaGVyYWwgQQ0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMzBfUENLMiAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTEzX1BDSzEgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyN19QQ0szICAgICkpOyAvLyBQZXJpcGhlcmFsIEINCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVERFU19Jc1N0YXR1c1NldCAqLw0KLS8qKiBcYnJpZWYgVGVzdCBpZiBUREVTIFN0YXR1cyBpcyBTZXQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1RERVNfSXNTdGF0dXNTZXQoIEFUOTFQU19UREVTIHBUREVTLCAgLyogXGFyZyAgcG9pbnRlciB0byBhIFRERVMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVlJFR19DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFZSRUcNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9WUkVHX0NmZ1BNQyAodm9pZCkNCiB7DQotICAgIHJldHVybiggQVQ5MUZfVERFU19HZXRTdGF0dXMoIHBUREVTICkgJiBmbGFnICk7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1NZUykpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9UREVTX0NmZ01vZGVSZWcgKi8NCi0vKiogXGJyaWVmIENvbmZpZ3VyZSB0aGUgTW9kZSBSZWdpc3RlciBvZiB0aGUgVERFUyBjb250cm9sbGVyICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVERFU19DZmdNb2RlUmVnKCBBVDkxUFNfVERFUyBwVERFUywgIC8qIHBvaW50ZXIgdG8gYSBUREVTIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1vZGUgKSAvKiBtb2RlIHJlZ2lzdGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUlNUQ19DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFJTVEMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9SU1RDX0NmZ1BNQyAodm9pZCkNCiB7DQotICAgIC8qKiBXcml0ZSB0byB0aGUgTVIgcmVnaXN0ZXIgKi8NCi0gICAgcFRERVMtPlRERVNfTVIgPSBtb2RlOw0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9TWVMpKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVERFU19HZXRNb2RlUmVnICovDQotLyoqIFxicmllZiBSZXR1cm4gdGhlIE1vZGUgUmVnaXN0ZXIgb2YgdGhlIFRERVMgY29udHJvbGxlciB2YWx1ZSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVERFU19HZXRNb2RlUmVnKCBBVDkxUFNfVERFUyBwVERFUyAvKiBwb2ludGVyIHRvIGEgVERFUyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NTQ19DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFNTQw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NTQ19DZmdQTUMgKHZvaWQpDQogew0KLSAgICByZXR1cm4gcFRERVMtPlRERVNfTVI7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1NTQykpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9UREVTX1N0YXJ0UHJvY2Vzc2luZyAqLw0KLS8qKiBcYnJpZWYgU3RhcnQgRW5jcnlwdGlvbiBvciBEZWNyeXB0aW9uICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVERFU19TdGFydFByb2Nlc3NpbmcoIEFUOTFQU19UREVTIHBUREVTIC8qIHBvaW50ZXIgdG8gYSBUREVTIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1NDX0NmZ1BJTw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBTU0Mgc2lnbmFscw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NTQ19DZmdQSU8gKHZvaWQpDQogew0KLSAgICBwVERFUy0+VERFU19DUiA9IEFUOTFDX1RERVNfU1RBUlQ7DQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQSwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyNV9SSyAgICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMjJfVEsgICAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTIxX1RGICAgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyNF9SRCAgICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMjZfUkYgICAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTIzX1REICAgICAgKSwgLy8gUGVyaXBoZXJhbCBBDQorCQkwKTsgLy8gUGVyaXBoZXJhbCBCDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1RERVNfU29mdFJlc2V0ICovDQotLyoqIFxicmllZiBSZXNldCBUREVTICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVERFU19Tb2Z0UmVzZXQoIEFUOTFQU19UREVTIHBUREVTIC8qIHBvaW50ZXIgdG8gYSBUREVTIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfV0RUQ19DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFdEVEMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9XRFRDX0NmZ1BNQyAodm9pZCkNCiB7DQotICAgIHBUREVTLT5UREVTX0NSID0gQVQ5MUNfVERFU19TV1JTVDsNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfU1lTKSk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1RERVNfU2V0Q3J5cHRvS2V5MSAqLw0KLS8qKiBcYnJpZWYgU2V0IENyeXB0b2dyYXBoaWMgS2V5IDEgV29yZCB4ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVERFU19TZXRDcnlwdG9LZXkxKCBBVDkxUFNfVERFUyBwVERFUywgLyogcG9pbnRlciB0byBhIFRERVMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGluZGV4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQga2V5d29yZCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVMxX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgVVMxDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVVMxX0NmZ1BNQyAodm9pZCkNCiB7DQotICAgIHBUREVTLT5UREVTX0tFWTFXeFJbIGluZGV4IF0gPSBrZXl3b3JkOw0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9VUzEpKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVERFU19TZXRDcnlwdG9LZXkyICovDQotLyoqIFxicmllZiBTZXQgQ3J5cHRvZ3JhcGhpYyBLZXkgMiBXb3JkIHggKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9UREVTX1NldENyeXB0b0tleTIoIEFUOTFQU19UREVTIHBUREVTLCAvKiBwb2ludGVyIHRvIGEgVERFUyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgaW5kZXgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBrZXl3b3JkICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VUzFfQ2ZnUElPDQorLy8qIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFVTMSBzaWduYWxzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVVMxX0NmZ1BJTyAodm9pZCkNCiB7DQotICAgIHBUREVTLT5UREVTX0tFWTJXeFJbIGluZGV4IF0gPSBrZXl3b3JkOw0KKwkvLyBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlDQorCUFUOTFGX1BJT19DZmdQZXJpcGgoDQorCQlBVDkxQ19CQVNFX1BJT0IsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJMCwgLy8gUGVyaXBoZXJhbCBBDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIyNl9SSTEgICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMjRfRFNSMSAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjIzX0RDRDEgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIyNV9EVFIxICAgICkpOyAvLyBQZXJpcGhlcmFsIEINCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9BLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTdfU0NLMSAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQThfUlRTMSAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTZfVFhEMSAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTVfUlhEMSAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTlfQ1RTMSAgICApLCAvLyBQZXJpcGhlcmFsIEENCisJCTApOyAvLyBQZXJpcGhlcmFsIEINCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVERFU19TZXRDcnlwdG9LZXkzICovDQotLyoqIFxicmllZiBTZXQgQ3J5cHRvZ3JhcGhpYyBLZXkgMyBXb3JkIHggKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9UREVTX1NldENyeXB0b0tleTMoIEFUOTFQU19UREVTIHBUREVTLCAvKiBwb2ludGVyIHRvIGEgVERFUyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgaW5kZXgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBrZXl3b3JkICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VUzBfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBVUzANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VUzBfQ2ZnUE1DICh2b2lkKQ0KIHsNCi0gICAgcFRERVMtPlRERVNfS0VZM1d4UlsgaW5kZXggXSA9IGtleXdvcmQ7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1VTMCkpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9UREVTX0lucHV0RGF0YSAqLw0KLS8qKiBcYnJpZWYgU2V0IElucHV0IERhdGEgeCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1RERVNfSW5wdXREYXRhKCBBVDkxUFNfVERFUyBwVERFUywgLyogcG9pbnRlciB0byBhIFRERVMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgaW5kZXgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGluZGF0YSApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVMwX0NmZ1BJTw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBVUzAgc2lnbmFscw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VTMF9DZmdQSU8gKHZvaWQpDQogew0KLSAgICBwVERFUy0+VERFU19JREFUQXhSWyBpbmRleCBdID0gaW5kYXRhOw0KKwkvLyBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlDQorCUFUOTFGX1BJT19DZmdQZXJpcGgoDQorCQlBVDkxQ19CQVNFX1BJT0EsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMF9SWEQwICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBNF9DVFMwICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBM19SVFMwICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMl9TQ0swICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMV9UWEQwICAgICksIC8vIFBlcmlwaGVyYWwgQQ0KKwkJMCk7IC8vIFBlcmlwaGVyYWwgQg0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9UREVTX0dldE91dHB1dERhdGEgKi8NCi0vKiogXGJyaWVmIEdldCBPdXRwdXQgRGF0YSB4ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9UREVTX0dldE91dHB1dERhdGEoIEFUOTFQU19UREVTIHBUREVTLCAvKiBwb2ludGVyIHRvIGEgVERFUyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBpbmRleCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1BJMV9DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFNQSTENCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TUEkxX0NmZ1BNQyAodm9pZCkNCiB7DQotICAgIHJldHVybiBwVERFUy0+VERFU19PREFUQXhSWyBpbmRleCBdOw0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9TUEkxKSk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1RERVNfU2V0SW5pdGlhbGl6YXRpb25WZWN0b3IgKi8NCi0vKiogXGJyaWVmIFNldCBJbml0aWFsaXphdGlvbiBWZWN0b3IgeCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1RERVNfU2V0SW5pdGlhbGl6YXRpb25WZWN0b3IoIEFUOTFQU19UREVTIHBUREVTLCAvKiBwb2ludGVyIHRvIGEgVERFUyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGluZGV4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGluaXR2ZWN0b3IgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSTFfQ2ZnUElPDQorLy8qIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFNQSTEgc2lnbmFscw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NQSTFfQ2ZnUElPICh2b2lkKQ0KIHsNCi0gICAgcFRERVMtPlRERVNfSVZ4UlsgaW5kZXggXSA9IGluaXR2ZWN0b3I7DQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQiwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkwLCAvLyBQZXJpcGhlcmFsIEENCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjE2X05QQ1MxMyAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIxMF9OUENTMTEgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMTFfTlBDUzEyICApKTsgLy8gUGVyaXBoZXJhbCBCDQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQSwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkwLCAvLyBQZXJpcGhlcmFsIEENCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTRfTlBDUzEzICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTI5X05QQ1MxMyAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyMV9OUENTMTAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMjJfU1BDSzEgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTI1X05QQ1MxMSAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyX05QQ1MxMSAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyNF9NSVNPMSAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBM19OUENTMTIgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMjZfTlBDUzEyICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTIzX01PU0kxICAgKSk7IC8vIFBlcmlwaGVyYWwgQg0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9EQkdVX0NmZ1BNQyAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgREJHVSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0RCR1VfQ2ZnUE1DKCB2b2lkICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUEkwX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgU1BJMA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NQSTBfQ2ZnUE1DICh2b2lkKQ0KIHsNCi0gICAgQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QTUMsIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgQVQ5MUNfSURfU1lTICkgKTsNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfU1BJMCkpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9EQkdVX0NmZ1BJTyAqLw0KLS8qKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBEQkdVIHNpZ25hbHMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9EQkdVX0NmZ1BJTyggdm9pZCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1BJMF9DZmdQSU8NCisvLyogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgU1BJMCBzaWduYWxzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1BJMF9DZmdQSU8gKHZvaWQpDQogew0KLSAgICAvKiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlICovDQotICAgIEFUOTFGX1BJT19DZmdQZXJpcGgoDQotICAgICAgICBBVDkxQ19CQVNFX1BJT0EsICAgICAgICAgICAgICAgICAgICAgIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMjdfRFJYRCApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTI4X0RUWEQgKSwgLyogUGVyaXBoZXJhbCBBICovDQotICAgICAgICAwICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBlcmlwaGVyYWwgQiAqLw0KKwkvLyBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlDQorCUFUOTFGX1BJT19DZmdQZXJpcGgoDQorCQlBVDkxQ19CQVNFX1BJT0IsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJMCwgLy8gUGVyaXBoZXJhbCBBDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIxM19OUENTMDEgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMTdfTlBDUzAzICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjE0X05QQ1MwMiAgKSk7IC8vIFBlcmlwaGVyYWwgQg0KKwkvLyBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlDQorCUFUOTFGX1BJT19DZmdQZXJpcGgoDQorCQlBVDkxQ19CQVNFX1BJT0EsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMTZfTUlTTzAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTEzX05QQ1MwMSAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEExNV9OUENTMDMgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMTdfTU9TSTAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTE4X1NQQ0swICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEExNF9OUENTMDIgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMTJfTlBDUzAwICApLCAvLyBQZXJpcGhlcmFsIEENCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTdfTlBDUzAxICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTlfTlBDUzAzICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQThfTlBDUzAyICApKTsgLy8gUGVyaXBoZXJhbCBCDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BNQ19DZmdQTUMgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFBNQyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BNQ19DZmdQTUMoIHZvaWQgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJVENfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBQSVRDDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElUQ19DZmdQTUMgKHZvaWQpDQogew0KLSAgICBBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQotICAgICAgICBBVDkxQ19CQVNFX1BNQywgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCBBVDkxQ19JRF9TWVMgKSApOw0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9TWVMpKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUE1DX0NmZ1BJTyAqLw0KLS8qKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBQTUMgc2lnbmFscyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BNQ19DZmdQSU8oIHZvaWQgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FJQ19DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIEFJQw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FJQ19DZmdQTUMgKHZvaWQpDQogew0KLSAgICAvKiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlICovDQotICAgIEFUOTFGX1BJT19DZmdQZXJpcGgoDQotICAgICAgICBBVDkxQ19CQVNFX1BJT0IsICAgICAgICAgICAgICAgICAgICAgIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BCMzBfUENLMiApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQjI5X1BDSzEgKSwgLyogUGVyaXBoZXJhbCBBICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEIyMF9QQ0swICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BCMF9QQ0swICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BCMjJfUENLMiApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQjIxX1BDSzEgKSApOyAvKiBQZXJpcGhlcmFsIEIgKi8NCi0gICAgLyogQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZSAqLw0KLSAgICBBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QSU9BLCAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgIDAsICAgICAgICAgICAgICAgLyogUGVyaXBoZXJhbCBBICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEEzMF9QQ0syICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMTNfUENLMSApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTI3X1BDSzMgKSApOyAvKiBQZXJpcGhlcmFsIEIgKi8NCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfRklRKSB8DQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9JUlEwKSB8DQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9JUlExKSk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1ZSRUdfQ2ZnUE1DICovDQotLyoqIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBWUkVHICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVlJFR19DZmdQTUMoIHZvaWQgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FJQ19DZmdQSU8NCisvLyogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgQUlDIHNpZ25hbHMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BSUNfQ2ZnUElPICh2b2lkKQ0KIHsNCi0gICAgQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QTUMsIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgQVQ5MUNfSURfU1lTICkgKTsNCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9BLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTMwX0lSUTAgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyOV9GSVEgICAgICksIC8vIFBlcmlwaGVyYWwgQQ0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMTRfSVJRMSAgICApKTsgLy8gUGVyaXBoZXJhbCBCDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1JTVENfQ2ZnUE1DICovDQotLyoqIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBSU1RDICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUlNUQ19DZmdQTUMoIHZvaWQgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FFU19DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIEFFUw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FFU19DZmdQTUMgKHZvaWQpDQogew0KLSAgICBBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQotICAgICAgICBBVDkxQ19CQVNFX1BNQywgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCBBVDkxQ19JRF9TWVMgKSApOw0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9BRVMpKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1NDX0NmZ1BNQyAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgU1NDICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfU1NDX0NmZ1BNQyggdm9pZCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVFdJX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgVFdJDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVFdJX0NmZ1BNQyAodm9pZCkNCiB7DQotICAgIEFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCi0gICAgICAgIEFUOTFDX0JBU0VfUE1DLCAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IEFUOTFDX0lEX1NTQyApICk7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1RXSSkpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9TU0NfQ2ZnUElPICovDQotLyoqIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFNTQyBzaWduYWxzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfU1NDX0NmZ1BJTyggdm9pZCApDQotew0KLSAgICAvKiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlICovDQotICAgIEFUOTFGX1BJT19DZmdQZXJpcGgoDQotICAgICAgICBBVDkxQ19CQVNFX1BJT0EsIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMjVfUksgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEEyMl9USyApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTIxX1RGICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMjRfUkQgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEEyNl9SRiApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTIzX1REICksIC8qIFBlcmlwaGVyYWwgQSAqLw0KLSAgICAgICAgMCApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUGVyaXBoZXJhbCBCICovDQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1dEVENfQ2ZnUE1DICovDQotLyoqIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBXRFRDICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfV0RUQ19DZmdQTUMoIHZvaWQgKQ0KLXsNCi0gICAgQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QTUMsIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgQVQ5MUNfSURfU1lTICkgKTsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVVMxX0NmZ1BNQyAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgVVMxICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVVMxX0NmZ1BNQyggdm9pZCApDQotew0KLSAgICBBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQotICAgICAgICBBVDkxQ19CQVNFX1BNQywgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCBBVDkxQ19JRF9VUzEgKSApOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9VUzFfQ2ZnUElPICovDQotLyoqIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFVTMSBzaWduYWxzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVVMxX0NmZ1BJTyggdm9pZCApDQotew0KLSAgICAvKiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlICovDQotICAgIEFUOTFGX1BJT19DZmdQZXJpcGgoDQotICAgICAgICBBVDkxQ19CQVNFX1BJT0IsIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgMCwgICAgICAgICAgICAgICAvKiBQZXJpcGhlcmFsIEEgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQjI2X1JJMSApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQjI0X0RTUjEgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEIyM19EQ0QxICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BCMjVfRFRSMSApICk7IC8qIFBlcmlwaGVyYWwgQiAqLw0KLSAgICAvKiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlICovDQotICAgIEFUOTFGX1BJT19DZmdQZXJpcGgoDQotICAgICAgICBBVDkxQ19CQVNFX1BJT0EsIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBN19TQ0sxICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBOF9SVFMxICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBNl9UWEQxICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBNV9SWEQxICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBOV9DVFMxICksIC8qIFBlcmlwaGVyYWwgQSAqLw0KLSAgICAgICAgMCApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBlcmlwaGVyYWwgQiAqLw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9VUzBfQ2ZnUE1DICovDQotLyoqIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBVUzAgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9VUzBfQ2ZnUE1DKCB2b2lkICkNCi17DQotICAgIEFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCi0gICAgICAgIEFUOTFDX0JBU0VfUE1DLCAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IEFUOTFDX0lEX1VTMCApICk7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VTMF9DZmdQSU8gKi8NCi0vKiogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgVVMwIHNpZ25hbHMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9VUzBfQ2ZnUElPKCB2b2lkICkNCi17DQotICAgIC8qIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUgKi8NCi0gICAgQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCi0gICAgICAgIEFUOTFDX0JBU0VfUElPQSwgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEEwX1JYRDAgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEE0X0NUUzAgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEEzX1JUUzAgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEEyX1NDSzAgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEExX1RYRDAgKSwgLyogUGVyaXBoZXJhbCBBICovDQotICAgICAgICAwICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUGVyaXBoZXJhbCBCICovDQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1NQSTFfQ2ZnUE1DICovDQotLyoqIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBTUEkxICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfU1BJMV9DZmdQTUMoIHZvaWQgKQ0KLXsNCi0gICAgQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QTUMsIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgQVQ5MUNfSURfU1BJMSApICk7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1NQSTFfQ2ZnUElPICovDQotLyoqIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFNQSTEgc2lnbmFscyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1NQSTFfQ2ZnUElPKCB2b2lkICkNCi17DQotICAgIC8qIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUgKi8NCi0gICAgQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCi0gICAgICAgIEFUOTFDX0JBU0VfUElPQiwgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAwLCAgICAgICAgICAgICAgIC8qIFBlcmlwaGVyYWwgQSAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BCMTZfTlBDUzEzICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BCMTBfTlBDUzExICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BCMTFfTlBDUzEyICkgKTsgLyogUGVyaXBoZXJhbCBCICovDQotICAgIC8qIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUgKi8NCi0gICAgQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCi0gICAgICAgIEFUOTFDX0JBU0VfUElPQSwgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAwLCAgICAgICAgICAgICAgIC8qIFBlcmlwaGVyYWwgQSAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBNF9OUENTMTMgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEEyOV9OUENTMTMgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEEyMV9OUENTMTAgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEEyMl9TUENLMSApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTI1X05QQ1MxMSApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTJfTlBDUzExICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMjRfTUlTTzEgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEEzX05QQ1MxMiApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTI2X05QQ1MxMiApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTIzX01PU0kxICkgKTsgLyogUGVyaXBoZXJhbCBCICovDQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1NQSTBfQ2ZnUE1DICovDQotLyoqIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBTUEkwICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfU1BJMF9DZmdQTUMoIHZvaWQgKQ0KLXsNCi0gICAgQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QTUMsIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgQVQ5MUNfSURfU1BJMCApICk7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1NQSTBfQ2ZnUElPICovDQotLyoqIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFNQSTAgc2lnbmFscyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1NQSTBfQ2ZnUElPKCB2b2lkICkNCi17DQotICAgIC8qIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUgKi8NCi0gICAgQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCi0gICAgICAgIEFUOTFDX0JBU0VfUElPQiwgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAwLCAgICAgICAgICAgICAgIC8qIFBlcmlwaGVyYWwgQSAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BCMTNfTlBDUzAxICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BCMTdfTlBDUzAzICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BCMTRfTlBDUzAyICkgKTsgLyogUGVyaXBoZXJhbCBCICovDQotICAgIC8qIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUgKi8NCi0gICAgQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCi0gICAgICAgIEFUOTFDX0JBU0VfUElPQSwgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEExNl9NSVNPMCApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTEzX05QQ1MwMSApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTE1X05QQ1MwMyApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTE3X01PU0kwICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMThfU1BDSzAgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEExNF9OUENTMDIgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEExMl9OUENTMDAgKSwgLyogUGVyaXBoZXJhbCBBICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEE3X05QQ1MwMSApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTlfTlBDUzAzICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBOF9OUENTMDIgKSApOyAvKiBQZXJpcGhlcmFsIEIgKi8NCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElUQ19DZmdQTUMgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFBJVEMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QSVRDX0NmZ1BNQyggdm9pZCApDQotew0KLSAgICBBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQotICAgICAgICBBVDkxQ19CQVNFX1BNQywgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCBBVDkxQ19JRF9TWVMgKSApOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BSUNfQ2ZnUE1DICovDQotLyoqIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBBSUMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9BSUNfQ2ZnUE1DKCB2b2lkICkNCi17DQotICAgIEFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCi0gICAgICAgIEFUOTFDX0JBU0VfUE1DLCAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IEFUOTFDX0lEX0ZJUSApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IEFUOTFDX0lEX0lSUTAgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCBBVDkxQ19JRF9JUlExICkgKTsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQUlDX0NmZ1BJTyAqLw0KLS8qKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBBSUMgc2lnbmFscyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0FJQ19DZmdQSU8oIHZvaWQgKQ0KLXsNCi0gICAgLyogQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZSAqLw0KLSAgICBBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QSU9BLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMzBfSVJRMCApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTI5X0ZJUSApLCAgICAvKiBQZXJpcGhlcmFsIEEgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTE0X0lSUTEgKSApOyAvKiBQZXJpcGhlcmFsIEIgKi8NCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQUVTX0NmZ1BNQyAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgQUVTICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQUVTX0NmZ1BNQyggdm9pZCApDQotew0KLSAgICBBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQotICAgICAgICBBVDkxQ19CQVNFX1BNQywgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCBBVDkxQ19JRF9BRVMgKSApOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9UV0lfQ2ZnUE1DICovDQotLyoqIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBUV0kgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9UV0lfQ2ZnUE1DKCB2b2lkICkNCi17DQotICAgIEFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCi0gICAgICAgIEFUOTFDX0JBU0VfUE1DLCAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IEFUOTFDX0lEX1RXSSApICk7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1RXSV9DZmdQSU8gKi8NCi0vKiogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgVFdJIHNpZ25hbHMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9UV0lfQ2ZnUElPKCB2b2lkICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UV0lfQ2ZnUElPDQorLy8qIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFRXSSBzaWduYWxzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVFdJX0NmZ1BJTyAodm9pZCkNCiB7DQotICAgIC8qIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUgKi8NCi0gICAgQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCi0gICAgICAgIEFUOTFDX0JBU0VfUElPQSwgICAgICAgICAgICAgICAgICAgICAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTExX1RXQ0sgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEExMF9UV0QgKSwgLyogUGVyaXBoZXJhbCBBICovDQotICAgICAgICAwICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUGVyaXBoZXJhbCBCICovDQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQSwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEExMV9UV0NLICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMTBfVFdEICAgICApLCAvLyBQZXJpcGhlcmFsIEENCisJCTApOyAvLyBQZXJpcGhlcmFsIEINCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQURDX0NmZ1BNQyAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgQURDICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQURDX0NmZ1BNQyggdm9pZCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgQURDDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQURDX0NmZ1BNQyAodm9pZCkNCiB7DQotICAgIEFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCi0gICAgICAgIEFUOTFDX0JBU0VfUE1DLCAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IEFUOTFDX0lEX0FEQyApICk7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX0FEQykpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BRENfQ2ZnUElPICovDQotLyoqIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIEFEQyBzaWduYWxzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQURDX0NmZ1BJTyggdm9pZCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0NmZ1BJTw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBBREMgc2lnbmFscw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FEQ19DZmdQSU8gKHZvaWQpDQogew0KLSAgICAvKiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlICovDQotICAgIEFUOTFGX1BJT19DZmdQZXJpcGgoDQotICAgICAgICBBVDkxQ19CQVNFX1BJT0IsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQZXJpcGhlcmFsIEEgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQjE4X0FEVFJHICkgKTsgLyogUGVyaXBoZXJhbCBCICovDQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQiwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkwLCAvLyBQZXJpcGhlcmFsIEENCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjE4X0FEVFJHICAgKSk7IC8vIFBlcmlwaGVyYWwgQg0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QV01DX0NIM19DZmdQSU8gKi8NCi0vKiogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgUFdNQ19DSDMgc2lnbmFscyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BXTUNfQ0gzX0NmZ1BJTyggdm9pZCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUFdNQ19DSDNfQ2ZnUElPDQorLy8qIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFBXTUNfQ0gzIHNpZ25hbHMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QV01DX0NIM19DZmdQSU8gKHZvaWQpDQogew0KLSAgICAvKiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlICovDQotICAgIEFUOTFGX1BJT19DZmdQZXJpcGgoDQotICAgICAgICBBVDkxQ19CQVNFX1BJT0IsICAgICAgICAgICAgICAgICAgICAgICAgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEIyMl9QV00zICksICAgLyogUGVyaXBoZXJhbCBBICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEIzMF9QV00zICkgKTsgLyogUGVyaXBoZXJhbCBCICovDQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQiwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIyMl9QV00zICAgICksIC8vIFBlcmlwaGVyYWwgQQ0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMzBfUFdNMyAgICApKTsgLy8gUGVyaXBoZXJhbCBCDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BXTUNfQ0gyX0NmZ1BJTyAqLw0KLS8qKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBQV01DX0NIMiBzaWduYWxzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUFdNQ19DSDJfQ2ZnUElPKCB2b2lkICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QV01DX0NIMl9DZmdQSU8NCisvLyogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgUFdNQ19DSDIgc2lnbmFscw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BXTUNfQ0gyX0NmZ1BJTyAodm9pZCkNCiB7DQotICAgIC8qIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUgKi8NCi0gICAgQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCi0gICAgICAgIEFUOTFDX0JBU0VfUElPQiwgICAgICAgICAgICAgICAgICAgICAgICAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQjIxX1BXTTIgKSwgICAvKiBQZXJpcGhlcmFsIEEgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQjI5X1BXTTIgKSApOyAvKiBQZXJpcGhlcmFsIEIgKi8NCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9CLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjIxX1BXTTIgICAgKSwgLy8gUGVyaXBoZXJhbCBBDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIyOV9QV00yICAgICkpOyAvLyBQZXJpcGhlcmFsIEINCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUFdNQ19DSDFfQ2ZnUElPICovDQotLyoqIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFBXTUNfQ0gxIHNpZ25hbHMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QV01DX0NIMV9DZmdQSU8oIHZvaWQgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BXTUNfQ0gxX0NmZ1BJTw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBQV01DX0NIMSBzaWduYWxzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUFdNQ19DSDFfQ2ZnUElPICh2b2lkKQ0KIHsNCi0gICAgLyogQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZSAqLw0KLSAgICBBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QSU9CLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BCMjBfUFdNMSApLCAgIC8qIFBlcmlwaGVyYWwgQSAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BCMjhfUFdNMSApICk7IC8qIFBlcmlwaGVyYWwgQiAqLw0KKwkvLyBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlDQorCUFUOTFGX1BJT19DZmdQZXJpcGgoDQorCQlBVDkxQ19CQVNFX1BJT0IsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMjBfUFdNMSAgICApLCAvLyBQZXJpcGhlcmFsIEENCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjI4X1BXTTEgICAgKSk7IC8vIFBlcmlwaGVyYWwgQg0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QV01DX0NIMF9DZmdQSU8gKi8NCi0vKiogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgUFdNQ19DSDAgc2lnbmFscyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BXTUNfQ0gwX0NmZ1BJTyggdm9pZCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUFdNQ19DSDBfQ2ZnUElPDQorLy8qIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFBXTUNfQ0gwIHNpZ25hbHMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QV01DX0NIMF9DZmdQSU8gKHZvaWQpDQogew0KLSAgICAvKiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlICovDQotICAgIEFUOTFGX1BJT19DZmdQZXJpcGgoDQotICAgICAgICBBVDkxQ19CQVNFX1BJT0IsICAgICAgICAgICAgICAgICAgICAgICAgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEIxOV9QV00wICksICAgLyogUGVyaXBoZXJhbCBBICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEIyN19QV00wICkgKTsgLyogUGVyaXBoZXJhbCBCICovDQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQiwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIxOV9QV00wICAgICksIC8vIFBlcmlwaGVyYWwgQQ0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMjdfUFdNMCAgICApKTsgLy8gUGVyaXBoZXJhbCBCDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1JUVENfQ2ZnUE1DICovDQotLyoqIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBSVFRDICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUlRUQ19DZmdQTUMoIHZvaWQgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1JUVENfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBSVFRDDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUlRUQ19DZmdQTUMgKHZvaWQpDQogew0KLSAgICBBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQotICAgICAgICBBVDkxQ19CQVNFX1BNQywgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCBBVDkxQ19JRF9TWVMgKSApOw0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9TWVMpKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVURQX0NmZ1BNQyAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgVURQICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVURQX0NmZ1BNQyggdm9pZCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVURQX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgVURQDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVURQX0NmZ1BNQyAodm9pZCkNCiB7DQotICAgIEFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCi0gICAgICAgIEFUOTFDX0JBU0VfUE1DLCAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IEFUOTFDX0lEX1VEUCApICk7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1VEUCkpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9UREVTX0NmZ1BNQyAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgVERFUyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1RERVNfQ2ZnUE1DKCB2b2lkICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UREVTX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgVERFUw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1RERVNfQ2ZnUE1DICh2b2lkKQ0KIHsNCi0gICAgQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QTUMsIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgQVQ5MUNfSURfVERFUyApICk7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1RERVMpKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfRU1BQ19DZmdQTUMgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIEVNQUMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9FTUFDX0NmZ1BNQyggdm9pZCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfRU1BQ19DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIEVNQUMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9FTUFDX0NmZ1BNQyAodm9pZCkNCiB7DQotICAgIEFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCi0gICAgICAgIEFUOTFDX0JBU0VfUE1DLCAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IEFUOTFDX0lEX0VNQUMgKSApOw0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9FTUFDKSk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0VNQUNfQ2ZnUElPICovDQotLyoqIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIEVNQUMgc2lnbmFscyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0VNQUNfQ2ZnUElPKCB2b2lkICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9FTUFDX0NmZ1BJTw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBFTUFDIHNpZ25hbHMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9FTUFDX0NmZ1BJTyAodm9pZCkNCiB7DQotICAgIC8qIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUgKi8NCi0gICAgQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCi0gICAgICAgIEFUOTFDX0JBU0VfUElPQiwgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEIyX0VUWDAgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEIxMl9FVFhFUiApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQjE2X0VDT0wgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEIxMV9FVFgzICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BCNl9FUlgxICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BCMTVfRVJYRFYgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEIxM19FUlgyICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BCM19FVFgxICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BCOF9FTURDICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BCNV9FUlgwICkgfA0KLSAgICAgICAgLyooKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIxOF9FRjEwMCAgICkgfCAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BCMTRfRVJYMyApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQjRfRUNSU19FQ1JTRFYgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEIxX0VUWEVOICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BCMTBfRVRYMiApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQjBfRVRYQ0tfRVJFRkNLICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BCOV9FTURJTyApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQjdfRVJYRVIgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEIxN19FUlhDSyApLCAvKiBQZXJpcGhlcmFsIEEgKi8NCi0gICAgICAgIDAgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBlcmlwaGVyYWwgQiAqLw0KKwkvLyBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlDQorCUFUOTFGX1BJT19DZmdQZXJpcGgoDQorCQlBVDkxQ19CQVNFX1BJT0IsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMl9FVFgwICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMTJfRVRYRVIgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjE2X0VDT0wgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIxMV9FVFgzICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCNl9FUlgxICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMTVfRVJYRFYgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjEzX0VSWDIgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIzX0VUWDEgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEI4X0VNREMgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEI1X0VSWDAgICAgKSB8DQorCQkvLygodW5zaWduZWQgaW50KSBBVDkxQ19QQjE4X0VGMTAwICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIxNF9FUlgzICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCNF9FQ1JTX0VDUlNEVikgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMV9FVFhFTiAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMTBfRVRYMiAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjBfRVRYQ0tfRVJFRkNLKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEI5X0VNRElPICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEI3X0VSWEVSICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIxN19FUlhDSyAgICksIC8vIFBlcmlwaGVyYWwgQQ0KKwkJMCk7IC8vIFBlcmlwaGVyYWwgQg0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9UQzBfQ2ZnUE1DICovDQotLyoqIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBUQzAgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9UQzBfQ2ZnUE1DKCB2b2lkICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UQzBfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBUQzANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UQzBfQ2ZnUE1DICh2b2lkKQ0KIHsNCi0gICAgQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QTUMsIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgQVQ5MUNfSURfVEMwICkgKTsNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfVEMwKSk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1RDMF9DZmdQSU8gKi8NCi0vKiogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgVEMwIHNpZ25hbHMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9UQzBfQ2ZnUElPKCB2b2lkICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UQzBfQ2ZnUElPDQorLy8qIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFRDMCBzaWduYWxzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVEMwX0NmZ1BJTyAodm9pZCkNCiB7DQotICAgIC8qIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUgKi8NCi0gICAgQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCi0gICAgICAgIEFUOTFDX0JBU0VfUElPQiwgICAgICAgICAgICAgICAgICAgICAgICAgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEIyM19USU9BMCApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQjI0X1RJT0IwICksICAgLyogUGVyaXBoZXJhbCBBICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEIxMl9UQ0xLMCApICk7IC8qIFBlcmlwaGVyYWwgQiAqLw0KKwkvLyBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlDQorCUFUOTFGX1BJT19DZmdQZXJpcGgoDQorCQlBVDkxQ19CQVNFX1BJT0IsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMjNfVElPQTAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjI0X1RJT0IwICAgKSwgLy8gUGVyaXBoZXJhbCBBDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIxMl9UQ0xLMCAgICkpOyAvLyBQZXJpcGhlcmFsIEINCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVEMxX0NmZ1BNQyAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgVEMxICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVEMxX0NmZ1BNQyggdm9pZCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVEMxX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgVEMxDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVEMxX0NmZ1BNQyAodm9pZCkNCiB7DQotICAgIEFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCi0gICAgICAgIEFUOTFDX0JBU0VfUE1DLCAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IEFUOTFDX0lEX1RDMSApICk7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1RDMSkpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9UQzFfQ2ZnUElPICovDQotLyoqIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFRDMSBzaWduYWxzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVEMxX0NmZ1BJTyggdm9pZCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVEMxX0NmZ1BJTw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBUQzEgc2lnbmFscw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1RDMV9DZmdQSU8gKHZvaWQpDQogew0KLSAgICAvKiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlICovDQotICAgIEFUOTFGX1BJT19DZmdQZXJpcGgoDQotICAgICAgICBBVDkxQ19CQVNFX1BJT0IsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BCMjVfVElPQTEgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEIyNl9USU9CMSApLCAgIC8qIFBlcmlwaGVyYWwgQSAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BCMTlfVENMSzEgKSApOyAvKiBQZXJpcGhlcmFsIEIgKi8NCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9CLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjI1X1RJT0ExICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIyNl9USU9CMSAgICksIC8vIFBlcmlwaGVyYWwgQQ0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMTlfVENMSzEgICApKTsgLy8gUGVyaXBoZXJhbCBCDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1RDMl9DZmdQTUMgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFRDMiAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1RDMl9DZmdQTUMoIHZvaWQgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RDMl9DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFRDMg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1RDMl9DZmdQTUMgKHZvaWQpDQogew0KLSAgICBBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQotICAgICAgICBBVDkxQ19CQVNFX1BNQywgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCBBVDkxQ19JRF9UQzIgKSApOw0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9UQzIpKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVEMyX0NmZ1BJTyAqLw0KLS8qKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBUQzIgc2lnbmFscyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1RDMl9DZmdQSU8oIHZvaWQgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RDMl9DZmdQSU8NCisvLyogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgVEMyIHNpZ25hbHMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UQzJfQ2ZnUElPICh2b2lkKQ0KIHsNCi0gICAgLyogQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZSAqLw0KLSAgICBBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QSU9CLCAgICAgICAgICAgICAgICAgICAgICAgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEIyOF9USU9CMiApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQjI3X1RJT0EyICksIC8qIFBlcmlwaGVyYWwgQSAqLw0KLSAgICAgICAgMCApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUGVyaXBoZXJhbCBCICovDQotICAgIC8qIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUgKi8NCi0gICAgQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCi0gICAgICAgIEFUOTFDX0JBU0VfUElPQSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBlcmlwaGVyYWwgQSAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMTVfVENMSzIgKSApOyAvKiBQZXJpcGhlcmFsIEIgKi8NCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9CLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjI4X1RJT0IyICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIyN19USU9BMiAgICksIC8vIFBlcmlwaGVyYWwgQQ0KKwkJMCk7IC8vIFBlcmlwaGVyYWwgQg0KKwkvLyBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlDQorCUFUOTFGX1BJT19DZmdQZXJpcGgoDQorCQlBVDkxQ19CQVNFX1BJT0EsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJMCwgLy8gUGVyaXBoZXJhbCBBDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEExNV9UQ0xLMiAgICkpOyAvLyBQZXJpcGhlcmFsIEINCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfTUNfQ2ZnUE1DICovDQotLyoqIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBNQyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX01DX0NmZ1BNQyggdm9pZCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfTUNfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBNQw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX01DX0NmZ1BNQyAodm9pZCkNCiB7DQotICAgIEFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCi0gICAgICAgIEFUOTFDX0JBU0VfUE1DLCAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IEFUOTFDX0lEX1NZUyApICk7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1NZUykpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9BX0NmZ1BNQyAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgUElPQSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BJT0FfQ2ZnUE1DKCB2b2lkICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9BX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgUElPQQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT0FfQ2ZnUE1DICh2b2lkKQ0KIHsNCi0gICAgQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QTUMsIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgQVQ5MUNfSURfUElPQSApICk7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1BJT0EpKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPQl9DZmdQTUMgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFBJT0IgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9CX0NmZ1BNQyggdm9pZCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPQl9DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFBJT0INCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9CX0NmZ1BNQyAodm9pZCkNCiB7DQotICAgIEFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCi0gICAgICAgIEFUOTFDX0JBU0VfUE1DLCAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IEFUOTFDX0lEX1BJT0IgKSApOw0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9QSU9CKSk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0NBTl9DZmdQTUMgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIENBTiAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0NBTl9DZmdQTUMoIHZvaWQgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIENBTg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0NBTl9DZmdQTUMgKHZvaWQpDQogew0KLSAgICBBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQotICAgICAgICBBVDkxQ19CQVNFX1BNQywgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCBBVDkxQ19JRF9DQU4gKSApOw0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9DQU4pKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQ0FOX0NmZ1BJTyAqLw0KLS8qKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBDQU4gc2lnbmFscyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0NBTl9DZmdQSU8oIHZvaWQgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9DZmdQSU8NCisvLyogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgQ0FOIHNpZ25hbHMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9DQU5fQ2ZnUElPICh2b2lkKQ0KIHsNCi0gICAgLyogQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZSAqLw0KLSAgICBBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QSU9BLCAgICAgICAgICAgICAgICAgICAgICAgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEEyMF9DQU5UWCApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTE5X0NBTlJYICksIC8qIFBlcmlwaGVyYWwgQSAqLw0KLSAgICAgICAgMCApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUGVyaXBoZXJhbCBCICovDQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQSwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyMF9DQU5UWCAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMTlfQ0FOUlggICApLCAvLyBQZXJpcGhlcmFsIEENCisJCTApOyAvLyBQZXJpcGhlcmFsIEINCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUFdNQ19DZmdQTUMgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFBXTUMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QV01DX0NmZ1BNQyggdm9pZCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUFdNQ19DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFBXTUMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QV01DX0NmZ1BNQyAodm9pZCkNCiB7DQotICAgIEFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCi0gICAgICAgIEFUOTFDX0JBU0VfUE1DLCAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IEFUOTFDX0lEX1BXTUMgKSApOw0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9QV01DKSk7DQogfQ0KIA0KICNlbmRpZiAvLyBsaWJfQVQ5MVNBTTdYMjU2X0gNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9HQ0MvQVJNN19BVDkxU0FNN1MvcG9ydC5jIGIvcG9ydGFibGUvR0NDL0FSTTdfQVQ5MVNBTTdTL3BvcnQuYwppbmRleCBjYTM5ZTliLi5mNGQxN2I5IDEwMDY0NAotLS0gYS9wb3J0YWJsZS9HQ0MvQVJNN19BVDkxU0FNN1MvcG9ydC5jCisrKyBiL3BvcnRhYmxlL0dDQy9BUk03X0FUOTFTQU03Uy9wb3J0LmMKQEAgLTI3LDEyICsyNywxMiBAQAogDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLSogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFibGUuaCBmb3IgdGhlIEFSTTcgcG9ydC4NCi0qDQotKiBDb21wb25lbnRzIHRoYXQgY2FuIGJlIGNvbXBpbGVkIHRvIGVpdGhlciBBUk0gb3IgVEhVTUIgbW9kZSBhcmUNCi0qIGNvbnRhaW5lZCBpbiB0aGlzIGZpbGUuICBUaGUgSVNSIHJvdXRpbmVzLCB3aGljaCBjYW4gb25seSBiZSBjb21waWxlZA0KLSogdG8gQVJNIG1vZGUgYXJlIGNvbnRhaW5lZCBpbiBwb3J0SVNSLmMuDQotKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyAqIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBBUk03IHBvcnQuDQorICoNCisgKiBDb21wb25lbnRzIHRoYXQgY2FuIGJlIGNvbXBpbGVkIHRvIGVpdGhlciBBUk0gb3IgVEhVTUIgbW9kZSBhcmUNCisgKiBjb250YWluZWQgaW4gdGhpcyBmaWxlLiAgVGhlIElTUiByb3V0aW5lcywgd2hpY2ggY2FuIG9ubHkgYmUgY29tcGlsZWQNCisgKiB0byBBUk0gbW9kZSBhcmUgY29udGFpbmVkIGluIHBvcnRJU1IuYy4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFN0YW5kYXJkIGluY2x1ZGVzLiAqLw0KICNpbmNsdWRlIDxzdGRsaWIuaD4NCkBAIC00NSwxMzkgKzQ1LDEzNyBAQAogI2luY2x1ZGUgIkFUOTFTQU03WDI1Ni5oIg0KIA0KIC8qIENvbnN0YW50cyByZXF1aXJlZCB0byBzZXR1cCB0aGUgdGFzayBjb250ZXh0LiAqLw0KLSNkZWZpbmUgcG9ydElOSVRJQUxfU1BTUiAgICAgICAgICAgICAgICAgICAoICggU3RhY2tUeXBlX3QgKSAweDFmICkgLyogU3lzdGVtIG1vZGUsIEFSTSBtb2RlLCBpbnRlcnJ1cHRzIGVuYWJsZWQuICovDQotI2RlZmluZSBwb3J0VEhVTUJfTU9ERV9CSVQgICAgICAgICAgICAgICAgICggKCBTdGFja1R5cGVfdCApIDB4MjAgKQ0KLSNkZWZpbmUgcG9ydElOU1RSVUNUSU9OX1NJWkUgICAgICAgICAgICAgICAoICggU3RhY2tUeXBlX3QgKSA0ICkNCi0jZGVmaW5lIHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkcgICAgKCAoIFN0YWNrVHlwZV90ICkgMCApDQorI2RlZmluZSBwb3J0SU5JVElBTF9TUFNSCQkJCSggKCBTdGFja1R5cGVfdCApIDB4MWYgKSAvKiBTeXN0ZW0gbW9kZSwgQVJNIG1vZGUsIGludGVycnVwdHMgZW5hYmxlZC4gKi8NCisjZGVmaW5lIHBvcnRUSFVNQl9NT0RFX0JJVAkJCQkoICggU3RhY2tUeXBlX3QgKSAweDIwICkNCisjZGVmaW5lIHBvcnRJTlNUUlVDVElPTl9TSVpFCQkJKCAoIFN0YWNrVHlwZV90ICkgNCApDQorI2RlZmluZSBwb3J0Tk9fQ1JJVElDQUxfU0VDVElPTl9ORVNUSU5HCSggKCBTdGFja1R5cGVfdCApIDAgKQ0KIA0KIC8qIENvbnN0YW50cyByZXF1aXJlZCB0byBzZXR1cCB0aGUgdGljayBJU1IuICovDQotI2RlZmluZSBwb3J0RU5BQkxFX1RJTUVSICAgICAgICAgICAgICAgICAgICggKCB1aW50OF90ICkgMHgwMSApDQotI2RlZmluZSBwb3J0UFJFU0NBTEVfVkFMVUUgICAgICAgICAgICAgICAgIDB4MDANCi0jZGVmaW5lIHBvcnRJTlRFUlJVUFRfT05fTUFUQ0ggICAgICAgICAgICAgKCAoIHVpbnQzMl90ICkgMHgwMSApDQotI2RlZmluZSBwb3J0UkVTRVRfQ09VTlRfT05fTUFUQ0ggICAgICAgICAgICggKCB1aW50MzJfdCApIDB4MDIgKQ0KKyNkZWZpbmUgcG9ydEVOQUJMRV9USU1FUgkJCSggKCB1aW50OF90ICkgMHgwMSApDQorI2RlZmluZSBwb3J0UFJFU0NBTEVfVkFMVUUJCQkweDAwDQorI2RlZmluZSBwb3J0SU5URVJSVVBUX09OX01BVENICQkoICggdWludDMyX3QgKSAweDAxICkNCisjZGVmaW5lIHBvcnRSRVNFVF9DT1VOVF9PTl9NQVRDSAkoICggdWludDMyX3QgKSAweDAyICkNCiANCiAvKiBDb25zdGFudHMgcmVxdWlyZWQgdG8gc2V0dXAgdGhlIFBJVC4gKi8NCi0jZGVmaW5lIHBvcnRQSVRfQ0xPQ0tfRElWSVNPUiAgICAgICAgICAgICAgKCAoIHVpbnQzMl90ICkgMTYgKQ0KLSNkZWZpbmUgcG9ydFBJVF9DT1VOVEVSX1ZBTFVFICAgICAgICAgICAgICAoICggKCBjb25maWdDUFVfQ0xPQ0tfSFogLyBwb3J0UElUX0NMT0NLX0RJVklTT1IgKSAvIDEwMDBVTCApICogcG9ydFRJQ0tfUEVSSU9EX01TICkNCisjZGVmaW5lIHBvcnRQSVRfQ0xPQ0tfRElWSVNPUgkJCSggKCB1aW50MzJfdCApIDE2ICkNCisjZGVmaW5lIHBvcnRQSVRfQ09VTlRFUl9WQUxVRQkJCSggKCAoIGNvbmZpZ0NQVV9DTE9DS19IWiAvIHBvcnRQSVRfQ0xPQ0tfRElWSVNPUiApIC8gMTAwMFVMICkgKiBwb3J0VElDS19QRVJJT0RfTVMgKQ0KIA0KLSNkZWZpbmUgcG9ydElOVF9MRVZFTF9TRU5TSVRJVkUgICAgICAgICAgICAwDQotI2RlZmluZSBwb3J0UElUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICggKCB1aW50MTZfdCApIDB4MSA8PCAyNCApDQotI2RlZmluZSBwb3J0UElUX0lOVF9FTkFCTEUgICAgICAgICAgICAgICAgICggKCB1aW50MTZfdCApIDB4MSA8PCAyNSApDQorI2RlZmluZSBwb3J0SU5UX0xFVkVMX1NFTlNJVElWRSAgMA0KKyNkZWZpbmUgcG9ydFBJVF9FTkFCTEUgICAgICAJKCAoIHVpbnQxNl90ICkgMHgxIDw8IDI0ICkNCisjZGVmaW5lIHBvcnRQSVRfSU5UX0VOQUJMRSAgICAgCSggKCB1aW50MTZfdCApIDB4MSA8PCAyNSApDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogU2V0dXAgdGhlIHRpbWVyIHRvIGdlbmVyYXRlIHRoZSB0aWNrIGludGVycnVwdHMuICovDQogc3RhdGljIHZvaWQgcHJ2U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApOw0KIA0KLS8qDQotICogVGhlIHNjaGVkdWxlciBjYW4gb25seSBiZSBzdGFydGVkIGZyb20gQVJNIG1vZGUsIHNvDQotICogdlBvcnRJU1JTdGFydEZpcnN0U1Rhc2soKSBpcyBkZWZpbmVkIGluIHBvcnRJU1IuYy4NCisvKiANCisgKiBUaGUgc2NoZWR1bGVyIGNhbiBvbmx5IGJlIHN0YXJ0ZWQgZnJvbSBBUk0gbW9kZSwgc28gDQorICogdlBvcnRJU1JTdGFydEZpcnN0U1Rhc2soKSBpcyBkZWZpbmVkIGluIHBvcnRJU1IuYy4gDQogICovDQogZXh0ZXJuIHZvaWQgdlBvcnRJU1JTdGFydEZpcnN0VGFzayggdm9pZCApOw0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KLS8qDQotICogSW5pdGlhbGlzZSB0aGUgc3RhY2sgb2YgYSB0YXNrIHRvIGxvb2sgZXhhY3RseSBhcyBpZiBhIGNhbGwgdG8NCisvKiANCisgKiBJbml0aWFsaXNlIHRoZSBzdGFjayBvZiBhIHRhc2sgdG8gbG9vayBleGFjdGx5IGFzIGlmIGEgY2FsbCB0byANCiAgKiBwb3J0U0FWRV9DT05URVhUIGhhZCBiZWVuIGNhbGxlZC4NCiAgKg0KLSAqIFNlZSBoZWFkZXIgZmlsZSBmb3IgZGVzY3JpcHRpb24uDQorICogU2VlIGhlYWRlciBmaWxlIGZvciBkZXNjcmlwdGlvbi4gDQogICovDQotU3RhY2tUeXBlX3QgKiBweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICogcHhUb3BPZlN0YWNrLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYXNrRnVuY3Rpb25fdCBweENvZGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KK1N0YWNrVHlwZV90ICpweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICpweFRvcE9mU3RhY2ssIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzICkNCiB7DQotICAgIFN0YWNrVHlwZV90ICogcHhPcmlnaW5hbFRPUzsNCitTdGFja1R5cGVfdCAqcHhPcmlnaW5hbFRPUzsNCiANCi0gICAgcHhPcmlnaW5hbFRPUyA9IHB4VG9wT2ZTdGFjazsNCisJcHhPcmlnaW5hbFRPUyA9IHB4VG9wT2ZTdGFjazsNCiANCi0gICAgLyogVG8gZW5zdXJlIGFzc2VydHMgaW4gdGFza3MuYyBkb24ndCBmYWlsLCBhbHRob3VnaCBpbiB0aGlzIGNhc2UgdGhlIGFzc2VydA0KLSAgICAgKiBpcyBub3QgcmVhbGx5IHJlcXVpcmVkLiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJLyogVG8gZW5zdXJlIGFzc2VydHMgaW4gdGFza3MuYyBkb24ndCBmYWlsLCBhbHRob3VnaCBpbiB0aGlzIGNhc2UgdGhlIGFzc2VydA0KKwlpcyBub3QgcmVhbGx5IHJlcXVpcmVkLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgLyogU2V0dXAgdGhlIGluaXRpYWwgc3RhY2sgb2YgdGhlIHRhc2suICBUaGUgc3RhY2sgaXMgc2V0IGV4YWN0bHkgYXMNCi0gICAgICogZXhwZWN0ZWQgYnkgdGhlIHBvcnRSRVNUT1JFX0NPTlRFWFQoKSBtYWNyby4gKi8NCisJLyogU2V0dXAgdGhlIGluaXRpYWwgc3RhY2sgb2YgdGhlIHRhc2suICBUaGUgc3RhY2sgaXMgc2V0IGV4YWN0bHkgYXMgDQorCWV4cGVjdGVkIGJ5IHRoZSBwb3J0UkVTVE9SRV9DT05URVhUKCkgbWFjcm8uICovDQogDQotICAgIC8qIEZpcnN0IG9uIHRoZSBzdGFjayBpcyB0aGUgcmV0dXJuIGFkZHJlc3MgLSB3aGljaCBpbiB0aGlzIGNhc2UgaXMgdGhlDQotICAgICAqIHN0YXJ0IG9mIHRoZSB0YXNrLiAgVGhlIG9mZnNldCBpcyBhZGRlZCB0byBtYWtlIHRoZSByZXR1cm4gYWRkcmVzcyBhcHBlYXINCi0gICAgICogYXMgaXQgd291bGQgd2l0aGluIGFuIElSUSBJU1IuICovDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHhDb2RlICsgcG9ydElOU1RSVUNUSU9OX1NJWkU7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkvKiBGaXJzdCBvbiB0aGUgc3RhY2sgaXMgdGhlIHJldHVybiBhZGRyZXNzIC0gd2hpY2ggaW4gdGhpcyBjYXNlIGlzIHRoZQ0KKwlzdGFydCBvZiB0aGUgdGFzay4gIFRoZSBvZmZzZXQgaXMgYWRkZWQgdG8gbWFrZSB0aGUgcmV0dXJuIGFkZHJlc3MgYXBwZWFyDQorCWFzIGl0IHdvdWxkIHdpdGhpbiBhbiBJUlEgSVNSLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB4Q29kZSArIHBvcnRJTlNUUlVDVElPTl9TSVpFOwkJDQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDAwMDAwMDA7ICAgIC8qIFIxNCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBweE9yaWdpbmFsVE9TOyAvKiBTdGFjayB1c2VkIHdoZW4gdGFzayBzdGFydHMgZ29lcyBpbiBSMTMuICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTIxMjEyMTI7ICAgIC8qIFIxMiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDExMTExMTExOyAgICAvKiBSMTEgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMDEwMTAxMDsgICAgLyogUjEwICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDkwOTA5MDk7ICAgIC8qIFI5ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDgwODA4MDg7ICAgIC8qIFI4ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDcwNzA3MDc7ICAgIC8qIFI3ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDYwNjA2MDY7ICAgIC8qIFI2ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDUwNTA1MDU7ICAgIC8qIFI1ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDQwNDA0MDQ7ICAgIC8qIFI0ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDMwMzAzMDM7ICAgIC8qIFIzICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDIwMjAyMDI7ICAgIC8qIFIyICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDEwMTAxMDE7ICAgIC8qIFIxICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDAwMDAwMDA7CS8qIFIxNCAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHhPcmlnaW5hbFRPUzsgLyogU3RhY2sgdXNlZCB3aGVuIHRhc2sgc3RhcnRzIGdvZXMgaW4gUjEzLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDEyMTIxMjEyOwkvKiBSMTIgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTExMTExMTE7CS8qIFIxMSAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMDEwMTAxMDsJLyogUjEwICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA5MDkwOTA5OwkvKiBSOSAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwODA4MDgwODsJLyogUjggKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDcwNzA3MDc7CS8qIFI3ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA2MDYwNjA2OwkvKiBSNiAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNTA1MDUwNTsJLyogUjUgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDQwNDA0MDQ7CS8qIFI0ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAzMDMwMzAzOwkvKiBSMyAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMjAyMDIwMjsJLyogUjIgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDEwMTAxMDE7CS8qIFIxICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCiANCi0gICAgLyogV2hlbiB0aGUgdGFzayBzdGFydHMgaXMgd2lsbCBleHBlY3QgdG8gZmluZCB0aGUgZnVuY3Rpb24gcGFyYW1ldGVyIGluDQotICAgICAqIFIwLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB2UGFyYW1ldGVyczsgLyogUjAgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIFdoZW4gdGhlIHRhc2sgc3RhcnRzIGlzIHdpbGwgZXhwZWN0IHRvIGZpbmQgdGhlIGZ1bmN0aW9uIHBhcmFtZXRlciBpbg0KKwlSMC4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwdlBhcmFtZXRlcnM7IC8qIFIwICovDQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBUaGUgbGFzdCB0aGluZyBvbnRvIHRoZSBzdGFjayBpcyB0aGUgc3RhdHVzIHJlZ2lzdGVyLCB3aGljaCBpcyBzZXQgZm9yDQotICAgICAqIHN5c3RlbSBtb2RlLCB3aXRoIGludGVycnVwdHMgZW5hYmxlZC4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwb3J0SU5JVElBTF9TUFNSOw0KKwkvKiBUaGUgbGFzdCB0aGluZyBvbnRvIHRoZSBzdGFjayBpcyB0aGUgc3RhdHVzIHJlZ2lzdGVyLCB3aGljaCBpcyBzZXQgZm9yDQorCXN5c3RlbSBtb2RlLCB3aXRoIGludGVycnVwdHMgZW5hYmxlZC4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwb3J0SU5JVElBTF9TUFNSOw0KIA0KLSAgICAjaWZkZWYgVEhVTUJfSU5URVJXT1JLDQotICAgICAgICB7DQotICAgICAgICAgICAgLyogV2Ugd2FudCB0aGUgdGFzayB0byBzdGFydCBpbiB0aHVtYiBtb2RlLiAqLw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgfD0gcG9ydFRIVU1CX01PREVfQklUOw0KLSAgICAgICAgfQ0KLSAgICAjZW5kaWYNCisJI2lmZGVmIFRIVU1CX0lOVEVSV09SSw0KKwl7DQorCQkvKiBXZSB3YW50IHRoZSB0YXNrIHRvIHN0YXJ0IGluIHRodW1iIG1vZGUuICovDQorCQkqcHhUb3BPZlN0YWNrIHw9IHBvcnRUSFVNQl9NT0RFX0JJVDsNCisJfQ0KKwkjZW5kaWYNCiANCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBTb21lIG9wdGltaXNhdGlvbiBsZXZlbHMgdXNlIHRoZSBzdGFjayBkaWZmZXJlbnRseSB0byBvdGhlcnMuICBUaGlzDQotICAgICAqIG1lYW5zIHRoZSBpbnRlcnJ1cHQgZmxhZ3MgY2Fubm90IGFsd2F5cyBiZSBzdG9yZWQgb24gdGhlIHN0YWNrIGFuZCB3aWxsDQotICAgICAqIGluc3RlYWQgYmUgc3RvcmVkIGluIGEgdmFyaWFibGUsIHdoaWNoIGlzIHRoZW4gc2F2ZWQgYXMgcGFydCBvZiB0aGUNCi0gICAgICogdGFza3MgY29udGV4dC4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9IHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkc7DQorCS8qIFNvbWUgb3B0aW1pc2F0aW9uIGxldmVscyB1c2UgdGhlIHN0YWNrIGRpZmZlcmVudGx5IHRvIG90aGVycy4gIFRoaXMgDQorCW1lYW5zIHRoZSBpbnRlcnJ1cHQgZmxhZ3MgY2Fubm90IGFsd2F5cyBiZSBzdG9yZWQgb24gdGhlIHN0YWNrIGFuZCB3aWxsDQorCWluc3RlYWQgYmUgc3RvcmVkIGluIGEgdmFyaWFibGUsIHdoaWNoIGlzIHRoZW4gc2F2ZWQgYXMgcGFydCBvZiB0aGUNCisJdGFza3MgY29udGV4dC4gKi8NCisJKnB4VG9wT2ZTdGFjayA9IHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkc7DQogDQotICAgIHJldHVybiBweFRvcE9mU3RhY2s7DQorCXJldHVybiBweFRvcE9mU3RhY2s7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIEJhc2VUeXBlX3QgeFBvcnRTdGFydFNjaGVkdWxlciggdm9pZCApDQogew0KLSAgICAvKiBTdGFydCB0aGUgdGltZXIgdGhhdCBnZW5lcmF0ZXMgdGhlIHRpY2sgSVNSLiAgSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQNCi0gICAgICogaGVyZSBhbHJlYWR5LiAqLw0KLSAgICBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCk7DQorCS8qIFN0YXJ0IHRoZSB0aW1lciB0aGF0IGdlbmVyYXRlcyB0aGUgdGljayBJU1IuICBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZA0KKwloZXJlIGFscmVhZHkuICovDQorCXBydlNldHVwVGltZXJJbnRlcnJ1cHQoKTsNCiANCi0gICAgLyogU3RhcnQgdGhlIGZpcnN0IHRhc2suICovDQotICAgIHZQb3J0SVNSU3RhcnRGaXJzdFRhc2soKTsNCisJLyogU3RhcnQgdGhlIGZpcnN0IHRhc2suICovDQorCXZQb3J0SVNSU3RhcnRGaXJzdFRhc2soKTsJDQogDQotICAgIC8qIFNob3VsZCBub3QgZ2V0IGhlcmUhICovDQotICAgIHJldHVybiAwOw0KKwkvKiBTaG91bGQgbm90IGdldCBoZXJlISAqLw0KKwlyZXR1cm4gMDsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogdm9pZCB2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApDQogew0KLSAgICAvKiBJdCBpcyB1bmxpa2VseSB0aGF0IHRoZSBBUk0gcG9ydCB3aWxsIHJlcXVpcmUgdGhpcyBmdW5jdGlvbiBhcyB0aGVyZQ0KLSAgICAgKiBpcyBub3RoaW5nIHRvIHJldHVybiB0by4gICovDQorCS8qIEl0IGlzIHVubGlrZWx5IHRoYXQgdGhlIEFSTSBwb3J0IHdpbGwgcmVxdWlyZSB0aGlzIGZ1bmN0aW9uIGFzIHRoZXJlDQorCWlzIG5vdGhpbmcgdG8gcmV0dXJuIHRvLiAgKi8NCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQpAQCAtMTg2LDIzICsxODQsMzAgQEAKICAqLw0KIHN0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKQ0KIHsNCi0gICAgQVQ5MVBTX1BJVEMgcHhQSVQgPSBBVDkxQ19CQVNFX1BJVEM7DQorQVQ5MVBTX1BJVEMgcHhQSVQgPSBBVDkxQ19CQVNFX1BJVEM7DQogDQotICAgIC8qIFNldHVwIHRoZSBBSUMgZm9yIFBJVCBpbnRlcnJ1cHRzLiAgVGhlIGludGVycnVwdCByb3V0aW5lIGNob3NlbiBkZXBlbmRzDQotICAgICAqIG9uIHdoZXRoZXIgdGhlIHByZWVtcHRpdmUgb3IgY29vcGVyYXRpdmUgc2NoZWR1bGVyIGlzIGJlaW5nIHVzZWQuICovDQotICAgICNpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAwDQotICAgICAgICBleHRlcm4gdm9pZCggdk5vblByZWVtcHRpdmVUaWNrICkgKCB2b2lkICk7DQotICAgICAgICBBVDkxRl9BSUNfQ29uZmlndXJlSXQoIEFUOTFDX0lEX1NZUywgQVQ5MUNfQUlDX1BSSU9SX0hJR0hFU1QsIHBvcnRJTlRfTEVWRUxfU0VOU0lUSVZFLCAoIHZvaWQgKCAqICkoIHZvaWQgKSApdk5vblByZWVtcHRpdmVUaWNrICk7DQotICAgICNlbHNlDQotICAgICAgICBleHRlcm4gdm9pZCggdlByZWVtcHRpdmVUaWNrICkoIHZvaWQgKTsNCi0gICAgICAgIEFUOTFGX0FJQ19Db25maWd1cmVJdCggQVQ5MUNfSURfU1lTLCBBVDkxQ19BSUNfUFJJT1JfSElHSEVTVCwgcG9ydElOVF9MRVZFTF9TRU5TSVRJVkUsICggdm9pZCAoICogKSggdm9pZCApICl2UHJlZW1wdGl2ZVRpY2sgKTsNCi0gICAgI2VuZGlmDQorCS8qIFNldHVwIHRoZSBBSUMgZm9yIFBJVCBpbnRlcnJ1cHRzLiAgVGhlIGludGVycnVwdCByb3V0aW5lIGNob3NlbiBkZXBlbmRzDQorCW9uIHdoZXRoZXIgdGhlIHByZWVtcHRpdmUgb3IgY29vcGVyYXRpdmUgc2NoZWR1bGVyIGlzIGJlaW5nIHVzZWQuICovDQorCSNpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAwDQogDQotICAgIC8qIENvbmZpZ3VyZSB0aGUgUElUIHBlcmlvZC4gKi8NCi0gICAgcHhQSVQtPlBJVENfUElNUiA9IHBvcnRQSVRfRU5BQkxFIHwgcG9ydFBJVF9JTlRfRU5BQkxFIHwgcG9ydFBJVF9DT1VOVEVSX1ZBTFVFOw0KKwkJZXh0ZXJuIHZvaWQgKCB2Tm9uUHJlZW1wdGl2ZVRpY2sgKSAoIHZvaWQgKTsNCisJCUFUOTFGX0FJQ19Db25maWd1cmVJdCggQVQ5MUNfSURfU1lTLCBBVDkxQ19BSUNfUFJJT1JfSElHSEVTVCwgcG9ydElOVF9MRVZFTF9TRU5TSVRJVkUsICggdm9pZCAoKikodm9pZCkgKSB2Tm9uUHJlZW1wdGl2ZVRpY2sgKTsNCiANCi0gICAgLyogRW5hYmxlIHRoZSBpbnRlcnJ1cHQuICBHbG9iYWwgaW50ZXJydXB0cyBhcmUgZGlzYWJsZXMgYXQgdGhpcyBwb2ludCBzbw0KLSAgICAgKiB0aGlzIGlzIHNhZmUuICovDQorCSNlbHNlDQorCQkNCisJCWV4dGVybiB2b2lkICggdlByZWVtcHRpdmVUaWNrICkoIHZvaWQgKTsNCisJCUFUOTFGX0FJQ19Db25maWd1cmVJdCggQVQ5MUNfSURfU1lTLCBBVDkxQ19BSUNfUFJJT1JfSElHSEVTVCwgcG9ydElOVF9MRVZFTF9TRU5TSVRJVkUsICggdm9pZCAoKikodm9pZCkgKSB2UHJlZW1wdGl2ZVRpY2sgKTsNCisNCisJI2VuZGlmDQorDQorCS8qIENvbmZpZ3VyZSB0aGUgUElUIHBlcmlvZC4gKi8NCisJcHhQSVQtPlBJVENfUElNUiA9IHBvcnRQSVRfRU5BQkxFIHwgcG9ydFBJVF9JTlRfRU5BQkxFIHwgcG9ydFBJVF9DT1VOVEVSX1ZBTFVFOw0KKw0KKwkvKiBFbmFibGUgdGhlIGludGVycnVwdC4gIEdsb2JhbCBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlcyBhdCB0aGlzIHBvaW50IHNvIA0KKwl0aGlzIGlzIHNhZmUuICovDQogICAgIEFUOTFDX0JBU0VfQUlDLT5BSUNfSUVDUiA9IDB4MSA8PCBBVDkxQ19JRF9TWVM7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKw0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0dDQy9BUk03X0FUOTFTQU03Uy9wb3J0SVNSLmMgYi9wb3J0YWJsZS9HQ0MvQVJNN19BVDkxU0FNN1MvcG9ydElTUi5jCmluZGV4IGE4ZDllMDAuLjE0NDViNGIgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0dDQy9BUk03X0FUOTFTQU03Uy9wb3J0SVNSLmMKKysrIGIvcG9ydGFibGUvR0NDL0FSTTdfQVQ5MVNBTTdTL3BvcnRJU1IuYwpAQCAtMjcsMTcgKzI3LDE3IEBACiANCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotKiBDb21wb25lbnRzIHRoYXQgY2FuIGJlIGNvbXBpbGVkIHRvIGVpdGhlciBBUk0gb3IgVEhVTUIgbW9kZSBhcmUNCi0qIGNvbnRhaW5lZCBpbiBwb3J0LmMgIFRoZSBJU1Igcm91dGluZXMsIHdoaWNoIGNhbiBvbmx5IGJlIGNvbXBpbGVkDQotKiB0byBBUk0gbW9kZSwgYXJlIGNvbnRhaW5lZCBpbiB0aGlzIGZpbGUuDQotKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyAqIENvbXBvbmVudHMgdGhhdCBjYW4gYmUgY29tcGlsZWQgdG8gZWl0aGVyIEFSTSBvciBUSFVNQiBtb2RlIGFyZQ0KKyAqIGNvbnRhaW5lZCBpbiBwb3J0LmMgIFRoZSBJU1Igcm91dGluZXMsIHdoaWNoIGNhbiBvbmx5IGJlIGNvbXBpbGVkDQorICogdG8gQVJNIG1vZGUsIGFyZSBjb250YWluZWQgaW4gdGhpcyBmaWxlLg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyoNCi0gKiAgQ2hhbmdlcyBmcm9tIFYzLjIuNA0KLSAqDQotICsgVGhlIGFzc2VtYmxlciBzdGF0ZW1lbnRzIGFyZSBub3cgaW5jbHVkZWQgaW4gYSBzaW5nbGUgYXNtIGJsb2NrIHJhdGhlcg0KLSArICAgIHRoYW4gZWFjaCBsaW5lIGhhdmluZyBpdHMgb3duIGFzbSBibG9jay4NCi0gKi8NCisJQ2hhbmdlcyBmcm9tIFYzLjIuNA0KKw0KKwkrIFRoZSBhc3NlbWJsZXIgc3RhdGVtZW50cyBhcmUgbm93IGluY2x1ZGVkIGluIGEgc2luZ2xlIGFzbSBibG9jayByYXRoZXINCisJICB0aGFuIGVhY2ggbGluZSBoYXZpbmcgaXRzIG93biBhc20gYmxvY2suDQorKi8NCiANCiAvKiBTY2hlZHVsZXIgaW5jbHVkZXMuICovDQogI2luY2x1ZGUgIkZyZWVSVE9TLmgiDQpAQCAtNDYsMTcgKzQ2LDE3IEBACiAjaW5jbHVkZSAiQVQ5MVNBTTdYMjU2LmgiDQogDQogLyogQ29uc3RhbnRzIHJlcXVpcmVkIHRvIGhhbmRsZSBpbnRlcnJ1cHRzLiAqLw0KLSNkZWZpbmUgcG9ydFRJTUVSX01BVENIX0lTUl9CSVQgICAgKCAoIHVpbnQ4X3QgKSAweDAxICkNCi0jZGVmaW5lIHBvcnRDTEVBUl9WSUNfSU5URVJSVVBUICAgICggKCB1aW50MzJfdCApIDAgKQ0KKyNkZWZpbmUgcG9ydFRJTUVSX01BVENIX0lTUl9CSVQJCSggKCB1aW50OF90ICkgMHgwMSApDQorI2RlZmluZSBwb3J0Q0xFQVJfVklDX0lOVEVSUlVQVAkJKCAoIHVpbnQzMl90ICkgMCApDQogDQogLyogQ29uc3RhbnRzIHJlcXVpcmVkIHRvIGhhbmRsZSBjcml0aWNhbCBzZWN0aW9ucy4gKi8NCi0jZGVmaW5lIHBvcnROT19DUklUSUNBTF9ORVNUSU5HICAgICggKCB1aW50MzJfdCApIDAgKQ0KKyNkZWZpbmUgcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcJCSggKCB1aW50MzJfdCApIDAgKQ0KIHZvbGF0aWxlIHVpbnQzMl90IHVsQ3JpdGljYWxOZXN0aW5nID0gOTk5OVVMOw0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIElTUiB0byBoYW5kbGUgbWFudWFsIGNvbnRleHQgc3dpdGNoZXMgKGZyb20gYSBjYWxsIHRvIHRhc2tZSUVMRCgpKS4gKi8NCi12b2lkIHZQb3J0WWllbGRQcm9jZXNzb3IoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fKCAoIGludGVycnVwdCggIlNXSSIgKSwgbmFrZWQgKSApOw0KK3ZvaWQgdlBvcnRZaWVsZFByb2Nlc3Nvciggdm9pZCApIF9fYXR0cmlidXRlX18oKGludGVycnVwdCgiU1dJIiksIG5ha2VkKSk7DQogDQogLyoNCiAgKiBUaGUgc2NoZWR1bGVyIGNhbiBvbmx5IGJlIHN0YXJ0ZWQgZnJvbSBBUk0gbW9kZSwgaGVuY2UgdGhlIGluY2x1c2lvbiBvZiB0aGlzDQpAQCAtNjcsOSArNjcsOSBAQAogDQogdm9pZCB2UG9ydElTUlN0YXJ0Rmlyc3RUYXNrKCB2b2lkICkNCiB7DQotICAgIC8qIFNpbXBseSBzdGFydCB0aGUgc2NoZWR1bGVyLiAgVGhpcyBpcyBpbmNsdWRlZCBoZXJlIGFzIGl0IGNhbiBvbmx5IGJlDQotICAgICAqIGNhbGxlZCBmcm9tIEFSTSBtb2RlLiAqLw0KLSAgICBwb3J0UkVTVE9SRV9DT05URVhUKCk7DQorCS8qIFNpbXBseSBzdGFydCB0aGUgc2NoZWR1bGVyLiAgVGhpcyBpcyBpbmNsdWRlZCBoZXJlIGFzIGl0IGNhbiBvbmx5IGJlDQorCWNhbGxlZCBmcm9tIEFSTSBtb2RlLiAqLw0KKwlwb3J0UkVTVE9SRV9DT05URVhUKCk7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KQEAgLTgzLDE5ICs4MywxOSBAQAogICovDQogdm9pZCB2UG9ydFlpZWxkUHJvY2Vzc29yKCB2b2lkICkNCiB7DQotICAgIC8qIFdpdGhpbiBhbiBJUlEgSVNSIHRoZSBsaW5rIHJlZ2lzdGVyIGhhcyBhbiBvZmZzZXQgZnJvbSB0aGUgdHJ1ZSByZXR1cm4NCi0gICAgICogYWRkcmVzcywgYnV0IGFuIFNXSSBJU1IgZG9lcyBub3QuICBBZGQgdGhlIG9mZnNldCBtYW51YWxseSBzbyB0aGUgc2FtZQ0KLSAgICAgKiBJU1IgcmV0dXJuIGNvZGUgY2FuIGJlIHVzZWQgaW4gYm90aCBjYXNlcy4gKi8NCi0gICAgX19hc20gdm9sYXRpbGUgKCAiQURECQlMUiwgTFIsICM0Iik7DQorCS8qIFdpdGhpbiBhbiBJUlEgSVNSIHRoZSBsaW5rIHJlZ2lzdGVyIGhhcyBhbiBvZmZzZXQgZnJvbSB0aGUgdHJ1ZSByZXR1cm4NCisJYWRkcmVzcywgYnV0IGFuIFNXSSBJU1IgZG9lcyBub3QuICBBZGQgdGhlIG9mZnNldCBtYW51YWxseSBzbyB0aGUgc2FtZQ0KKwlJU1IgcmV0dXJuIGNvZGUgY2FuIGJlIHVzZWQgaW4gYm90aCBjYXNlcy4gKi8NCisJX19hc20gdm9sYXRpbGUgKCAiQURECQlMUiwgTFIsICM0IiApOw0KIA0KLSAgICAvKiBQZXJmb3JtIHRoZSBjb250ZXh0IHN3aXRjaC4gIEZpcnN0IHNhdmUgdGhlIGNvbnRleHQgb2YgdGhlIGN1cnJlbnQgdGFzay4gKi8NCi0gICAgcG9ydFNBVkVfQ09OVEVYVCgpOw0KKwkvKiBQZXJmb3JtIHRoZSBjb250ZXh0IHN3aXRjaC4gIEZpcnN0IHNhdmUgdGhlIGNvbnRleHQgb2YgdGhlIGN1cnJlbnQgdGFzay4gKi8NCisJcG9ydFNBVkVfQ09OVEVYVCgpOw0KIA0KLSAgICAvKiBGaW5kIHRoZSBoaWdoZXN0IHByaW9yaXR5IHRhc2sgdGhhdCBpcyByZWFkeSB0byBydW4uICovDQotICAgIHZUYXNrU3dpdGNoQ29udGV4dCgpOw0KKwkvKiBGaW5kIHRoZSBoaWdoZXN0IHByaW9yaXR5IHRhc2sgdGhhdCBpcyByZWFkeSB0byBydW4uICovDQorCXZUYXNrU3dpdGNoQ29udGV4dCgpOw0KIA0KLSAgICAvKiBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBuZXcgdGFzay4gKi8NCi0gICAgcG9ydFJFU1RPUkVfQ09OVEVYVCgpOw0KKwkvKiBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBuZXcgdGFzay4gKi8NCisJcG9ydFJFU1RPUkVfQ09OVEVYVCgpOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCkBAIC0xMDYsNDkgKzEwNiw0OSBAQAogDQogI2lmIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDANCiANCi0vKiBUaGUgY29vcGVyYXRpdmUgc2NoZWR1bGVyIHJlcXVpcmVzIGEgbm9ybWFsIElSUSBzZXJ2aWNlIHJvdXRpbmUgdG8NCi0gKiBzaW1wbHkgaW5jcmVtZW50IHRoZSBzeXN0ZW0gdGljay4gKi8NCi0gICAgdm9pZCB2Tm9uUHJlZW1wdGl2ZVRpY2soIHZvaWQgKSBfX2F0dHJpYnV0ZV9fKCAoIGludGVycnVwdCggIklSUSIgKSApICk7DQotICAgIHZvaWQgdk5vblByZWVtcHRpdmVUaWNrKCB2b2lkICkNCi0gICAgew0KLSAgICAgICAgdWludDMyX3QgdWxEdW1teTsNCisJLyogVGhlIGNvb3BlcmF0aXZlIHNjaGVkdWxlciByZXF1aXJlcyBhIG5vcm1hbCBJUlEgc2VydmljZSByb3V0aW5lIHRvDQorCXNpbXBseSBpbmNyZW1lbnQgdGhlIHN5c3RlbSB0aWNrLiAqLw0KKwl2b2lkIHZOb25QcmVlbXB0aXZlVGljayggdm9pZCApIF9fYXR0cmlidXRlX18gKChpbnRlcnJ1cHQgKCJJUlEiKSkpOw0KKwl2b2lkIHZOb25QcmVlbXB0aXZlVGljayggdm9pZCApDQorCXsNCisJCXVpbnQzMl90IHVsRHVtbXk7DQogDQotICAgICAgICAvKiBJbmNyZW1lbnQgdGhlIHRpY2sgY291bnQgLSB3aGljaCBtYXkgd2FrZSBzb21lIHRhc2tzIGJ1dCBhcyB0aGUNCi0gICAgICAgICAqIHByZWVtcHRpdmUgc2NoZWR1bGVyIGlzIG5vdCBiZWluZyB1c2VkIGFueSB3b2tlbiB0YXNrIGlzIG5vdCBnaXZlbg0KLSAgICAgICAgICogcHJvY2Vzc29yIHRpbWUgbm8gbWF0dGVyIHdoYXQgaXRzIHByaW9yaXR5LiAqLw0KLSAgICAgICAgeFRhc2tJbmNyZW1lbnRUaWNrKCk7DQorCQkvKiBJbmNyZW1lbnQgdGhlIHRpY2sgY291bnQgLSB3aGljaCBtYXkgd2FrZSBzb21lIHRhc2tzIGJ1dCBhcyB0aGUNCisJCXByZWVtcHRpdmUgc2NoZWR1bGVyIGlzIG5vdCBiZWluZyB1c2VkIGFueSB3b2tlbiB0YXNrIGlzIG5vdCBnaXZlbg0KKwkJcHJvY2Vzc29yIHRpbWUgbm8gbWF0dGVyIHdoYXQgaXRzIHByaW9yaXR5LiAqLw0KKwkJeFRhc2tJbmNyZW1lbnRUaWNrKCk7DQogDQotICAgICAgICAvKiBDbGVhciB0aGUgUElUIGludGVycnVwdC4gKi8NCi0gICAgICAgIHVsRHVtbXkgPSBBVDkxQ19CQVNFX1BJVEMtPlBJVENfUElWUjsNCisJCS8qIENsZWFyIHRoZSBQSVQgaW50ZXJydXB0LiAqLw0KKwkJdWxEdW1teSA9IEFUOTFDX0JBU0VfUElUQy0+UElUQ19QSVZSOw0KIA0KLSAgICAgICAgLyogRW5kIHRoZSBpbnRlcnJ1cHQgaW4gdGhlIEFJQy4gKi8NCi0gICAgICAgIEFUOTFDX0JBU0VfQUlDLT5BSUNfRU9JQ1IgPSB1bER1bW15Ow0KLSAgICB9DQorCQkvKiBFbmQgdGhlIGludGVycnVwdCBpbiB0aGUgQUlDLiAqLw0KKwkJQVQ5MUNfQkFTRV9BSUMtPkFJQ19FT0lDUiA9IHVsRHVtbXk7DQorCX0NCiANCi0jZWxzZSAvKiBpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAwICovDQorI2Vsc2UNCiANCi0vKiBUaGUgcHJlZW1wdGl2ZSBzY2hlZHVsZXIgaXMgZGVmaW5lZCBhcyAibmFrZWQiIGFzIHRoZSBmdWxsIGNvbnRleHQgaXMNCi0gKiBzYXZlZCBvbiBlbnRyeSBhcyBwYXJ0IG9mIHRoZSBjb250ZXh0IHN3aXRjaC4gKi8NCi0gICAgdm9pZCB2UHJlZW1wdGl2ZVRpY2soIHZvaWQgKSBfX2F0dHJpYnV0ZV9fKCAoIG5ha2VkICkgKTsNCi0gICAgdm9pZCB2UHJlZW1wdGl2ZVRpY2soIHZvaWQgKQ0KLSAgICB7DQotICAgICAgICAvKiBTYXZlIHRoZSBjb250ZXh0IG9mIHRoZSBjdXJyZW50IHRhc2suICovDQotICAgICAgICBwb3J0U0FWRV9DT05URVhUKCk7DQorCS8qIFRoZSBwcmVlbXB0aXZlIHNjaGVkdWxlciBpcyBkZWZpbmVkIGFzICJuYWtlZCIgYXMgdGhlIGZ1bGwgY29udGV4dCBpcw0KKwlzYXZlZCBvbiBlbnRyeSBhcyBwYXJ0IG9mIHRoZSBjb250ZXh0IHN3aXRjaC4gKi8NCisJdm9pZCB2UHJlZW1wdGl2ZVRpY2soIHZvaWQgKSBfX2F0dHJpYnV0ZV9fKChuYWtlZCkpOw0KKwl2b2lkIHZQcmVlbXB0aXZlVGljayggdm9pZCApDQorCXsNCisJCS8qIFNhdmUgdGhlIGNvbnRleHQgb2YgdGhlIGN1cnJlbnQgdGFzay4gKi8NCisJCXBvcnRTQVZFX0NPTlRFWFQoKTsNCiANCi0gICAgICAgIC8qIEluY3JlbWVudCB0aGUgdGljayBjb3VudCAtIHRoaXMgbWF5IHdha2UgYSB0YXNrLiAqLw0KLSAgICAgICAgaWYoIHhUYXNrSW5jcmVtZW50VGljaygpICE9IHBkRkFMU0UgKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIC8qIEZpbmQgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgdGFzayB0aGF0IGlzIHJlYWR5IHRvIHJ1bi4gKi8NCi0gICAgICAgICAgICB2VGFza1N3aXRjaENvbnRleHQoKTsNCi0gICAgICAgIH0NCisJCS8qIEluY3JlbWVudCB0aGUgdGljayBjb3VudCAtIHRoaXMgbWF5IHdha2UgYSB0YXNrLiAqLw0KKwkJaWYoIHhUYXNrSW5jcmVtZW50VGljaygpICE9IHBkRkFMU0UgKQ0KKwkJew0KKwkJCS8qIEZpbmQgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgdGFzayB0aGF0IGlzIHJlYWR5IHRvIHJ1bi4gKi8NCisJCQl2VGFza1N3aXRjaENvbnRleHQoKTsNCisJCX0NCiANCi0gICAgICAgIC8qIEVuZCB0aGUgaW50ZXJydXB0IGluIHRoZSBBSUMuICovDQotICAgICAgICBBVDkxQ19CQVNFX0FJQy0+QUlDX0VPSUNSID0gQVQ5MUNfQkFTRV9QSVRDLT5QSVRDX1BJVlI7DQorCQkvKiBFbmQgdGhlIGludGVycnVwdCBpbiB0aGUgQUlDLiAqLw0KKwkJQVQ5MUNfQkFTRV9BSUMtPkFJQ19FT0lDUiA9IEFUOTFDX0JBU0VfUElUQy0+UElUQ19QSVZSOw0KIA0KLSAgICAgICAgcG9ydFJFU1RPUkVfQ09OVEVYVCgpOw0KLSAgICB9DQorCQlwb3J0UkVTVE9SRV9DT05URVhUKCk7DQorCX0NCiANCi0jZW5kaWYgLyogaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMCAqLw0KKyNlbmRpZg0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qDQpAQCAtMTU3LDcwICsxNTcsNzEgQEAKICAqIGVuc3VyZSBhIHN3aXRjaCB0byBBUk0gbW9kZS4gIFdoZW4gVEhVTUJfSU5URVJXT1JLIGlzIG5vdCBkZWZpbmVkIHRoZW4NCiAgKiB0aGUgdXRpbGl0aWVzIGFyZSBkZWZpbmVkIGFzIG1hY3JvcyBpbiBwb3J0bWFjcm8uaCAtIGFzIHBlciBvdGhlciBwb3J0cy4NCiAgKi8NCi12b2lkIHZQb3J0RGlzYWJsZUludGVycnVwdHNGcm9tVGh1bWIoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fKCAoIG5ha2VkICkgKTsNCi12b2lkIHZQb3J0RW5hYmxlSW50ZXJydXB0c0Zyb21UaHVtYiggdm9pZCApIF9fYXR0cmlidXRlX18oICggbmFrZWQgKSApOw0KK3ZvaWQgdlBvcnREaXNhYmxlSW50ZXJydXB0c0Zyb21UaHVtYiggdm9pZCApIF9fYXR0cmlidXRlX18gKChuYWtlZCkpOw0KK3ZvaWQgdlBvcnRFbmFibGVJbnRlcnJ1cHRzRnJvbVRodW1iKCB2b2lkICkgX19hdHRyaWJ1dGVfXyAoKG5ha2VkKSk7DQogDQogdm9pZCB2UG9ydERpc2FibGVJbnRlcnJ1cHRzRnJvbVRodW1iKCB2b2lkICkNCiB7DQotICAgIF9fYXNtIHZvbGF0aWxlICgNCi0gICAgICAgICJTVE1EQglTUCEsIHtSMH0JCVxuXHQiLyogUHVzaCBSMC4JCQkJCQkJCQkqLw0KLSAgICAgICAgIk1SUwlSMCwgQ1BTUgkJXG5cdCIvKiBHZXQgQ1BTUi4JCQkJCQkJCSovDQotICAgICAgICAiT1JSCVIwLCBSMCwgIzB4QzAJXG5cdCIvKiBEaXNhYmxlIElSUSwgRklRLgkJCQkJCSovDQotICAgICAgICAiTVNSCUNQU1IsIFIwCQlcblx0Ii8qIFdyaXRlIGJhY2sgbW9kaWZpZWQgdmFsdWUuCQkJCSovDQotICAgICAgICAiTERNSUEJU1AhLCB7UjB9CQlcblx0Ii8qIFBvcCBSMC4JCQkJCQkJCQkqLw0KLSAgICAgICAgIkJYCQlSMTQiKTsgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gYmFjayB0byB0aHVtYi4JCQkJCSovDQorCV9fYXNtIHZvbGF0aWxlICgNCisJCSJTVE1EQglTUCEsIHtSMH0JCVxuXHQiCS8qIFB1c2ggUjAuCQkJCQkJCQkJKi8NCisJCSJNUlMJUjAsIENQU1IJCVxuXHQiCS8qIEdldCBDUFNSLgkJCQkJCQkJKi8NCisJCSJPUlIJUjAsIFIwLCAjMHhDMAlcblx0IgkvKiBEaXNhYmxlIElSUSwgRklRLgkJCQkJCSovDQorCQkiTVNSCUNQU1IsIFIwCQlcblx0IgkvKiBXcml0ZSBiYWNrIG1vZGlmaWVkIHZhbHVlLgkJCQkqLw0KKwkJIkxETUlBCVNQISwge1IwfQkJXG5cdCIJLyogUG9wIFIwLgkJCQkJCQkJCSovDQorCQkiQlgJCVIxNCIgKTsJCQkJCS8qIFJldHVybiBiYWNrIHRvIHRodW1iLgkJCQkJKi8NCiB9DQogDQogdm9pZCB2UG9ydEVuYWJsZUludGVycnVwdHNGcm9tVGh1bWIoIHZvaWQgKQ0KIHsNCi0gICAgX19hc20gdm9sYXRpbGUgKA0KLSAgICAgICAgIlNUTURCCVNQISwge1IwfQkJXG5cdCIvKiBQdXNoIFIwLgkJCQkJCQkJCSovDQotICAgICAgICAiTVJTCVIwLCBDUFNSCQlcblx0Ii8qIEdldCBDUFNSLgkJCQkJCQkJKi8NCi0gICAgICAgICJCSUMJUjAsIFIwLCAjMHhDMAlcblx0Ii8qIEVuYWJsZSBJUlEsIEZJUS4JCQkJCQkJKi8NCi0gICAgICAgICJNU1IJQ1BTUiwgUjAJCVxuXHQiLyogV3JpdGUgYmFjayBtb2RpZmllZCB2YWx1ZS4JCQkJKi8NCi0gICAgICAgICJMRE1JQQlTUCEsIHtSMH0JCVxuXHQiLyogUG9wIFIwLgkJCQkJCQkJCSovDQotICAgICAgICAiQlgJCVIxNCIpOyAgICAgICAgICAgICAgICAgIC8qIFJldHVybiBiYWNrIHRvIHRodW1iLgkJCQkJKi8NCisJX19hc20gdm9sYXRpbGUgKA0KKwkJIlNUTURCCVNQISwge1IwfQkJXG5cdCIJLyogUHVzaCBSMC4JCQkJCQkJCQkqLw0KKwkJIk1SUwlSMCwgQ1BTUgkJXG5cdCIJLyogR2V0IENQU1IuCQkJCQkJCQkqLw0KKwkJIkJJQwlSMCwgUjAsICMweEMwCVxuXHQiCS8qIEVuYWJsZSBJUlEsIEZJUS4JCQkJCQkJKi8NCisJCSJNU1IJQ1BTUiwgUjAJCVxuXHQiCS8qIFdyaXRlIGJhY2sgbW9kaWZpZWQgdmFsdWUuCQkJCSovDQorCQkiTERNSUEJU1AhLCB7UjB9CQlcblx0IgkvKiBQb3AgUjAuCQkJCQkJCQkJKi8NCisJCSJCWAkJUjE0IiApOwkJCQkJLyogUmV0dXJuIGJhY2sgdG8gdGh1bWIuCQkJCQkqLw0KIH0NCiANCiANCiAvKiBUaGUgY29kZSBnZW5lcmF0ZWQgYnkgdGhlIEdDQyBjb21waWxlciB1c2VzIHRoZSBzdGFjayBpbiBkaWZmZXJlbnQgd2F5cyBhdA0KLSAqIGRpZmZlcmVudCBvcHRpbWlzYXRpb24gbGV2ZWxzLiAgVGhlIGludGVycnVwdCBmbGFncyBjYW4gdGhlcmVmb3JlIG5vdCBhbHdheXMNCi0gKiBiZSBzYXZlZCB0byB0aGUgc3RhY2suICBJbnN0ZWFkIHRoZSBjcml0aWNhbCBzZWN0aW9uIG5lc3RpbmcgbGV2ZWwgaXMgc3RvcmVkDQotICogaW4gYSB2YXJpYWJsZSwgd2hpY2ggaXMgdGhlbiBzYXZlZCBhcyBwYXJ0IG9mIHRoZSBzdGFjayBjb250ZXh0LiAqLw0KK2RpZmZlcmVudCBvcHRpbWlzYXRpb24gbGV2ZWxzLiAgVGhlIGludGVycnVwdCBmbGFncyBjYW4gdGhlcmVmb3JlIG5vdCBhbHdheXMNCitiZSBzYXZlZCB0byB0aGUgc3RhY2suICBJbnN0ZWFkIHRoZSBjcml0aWNhbCBzZWN0aW9uIG5lc3RpbmcgbGV2ZWwgaXMgc3RvcmVkDQoraW4gYSB2YXJpYWJsZSwgd2hpY2ggaXMgdGhlbiBzYXZlZCBhcyBwYXJ0IG9mIHRoZSBzdGFjayBjb250ZXh0LiAqLw0KIHZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICkNCiB7DQotICAgIC8qIERpc2FibGUgaW50ZXJydXB0cyBhcyBwZXIgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gICAgX19hc20gdm9sYXRpbGUgKA0KLSAgICAgICAgIlNUTURCCVNQISwge1IwfQkJCVxuXHQiLyogUHVzaCBSMC4JCQkJCQkJCSovDQotICAgICAgICAiTVJTCVIwLCBDUFNSCQkJXG5cdCIvKiBHZXQgQ1BTUi4JCQkJCQkJKi8NCi0gICAgICAgICJPUlIJUjAsIFIwLCAjMHhDMAkJXG5cdCIvKiBEaXNhYmxlIElSUSwgRklRLgkJCQkJKi8NCi0gICAgICAgICJNU1IJQ1BTUiwgUjAJCQlcblx0Ii8qIFdyaXRlIGJhY2sgbW9kaWZpZWQgdmFsdWUuCQkJKi8NCi0gICAgICAgICJMRE1JQQlTUCEsIHtSMH0iKTsgICAgICAvKiBQb3AgUjAuCQkJCQkJCQkqLw0KKwkvKiBEaXNhYmxlIGludGVycnVwdHMgYXMgcGVyIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsgCQkJCQkJCSovDQorCV9fYXNtIHZvbGF0aWxlICgNCisJCSJTVE1EQglTUCEsIHtSMH0JCQlcblx0IgkvKiBQdXNoIFIwLgkJCQkJCQkJKi8NCisJCSJNUlMJUjAsIENQU1IJCQlcblx0IgkvKiBHZXQgQ1BTUi4JCQkJCQkJKi8NCisJCSJPUlIJUjAsIFIwLCAjMHhDMAkJXG5cdCIJLyogRGlzYWJsZSBJUlEsIEZJUS4JCQkJCSovDQorCQkiTVNSCUNQU1IsIFIwCQkJXG5cdCIJLyogV3JpdGUgYmFjayBtb2RpZmllZCB2YWx1ZS4JCQkqLw0KKwkJIkxETUlBCVNQISwge1IwfSIgKTsJCQkJLyogUG9wIFIwLgkJCQkJCQkJKi8NCiANCi0gICAgLyogTm93IGludGVycnVwdHMgYXJlIGRpc2FibGVkIHVsQ3JpdGljYWxOZXN0aW5nIGNhbiBiZSBhY2Nlc3NlZA0KLSAgICAgKiBkaXJlY3RseS4gIEluY3JlbWVudCB1bENyaXRpY2FsTmVzdGluZyB0byBrZWVwIGEgY291bnQgb2YgaG93IG1hbnkgdGltZXMNCi0gICAgICogcG9ydEVOVEVSX0NSSVRJQ0FMKCkgaGFzIGJlZW4gY2FsbGVkLiAqLw0KLSAgICB1bENyaXRpY2FsTmVzdGluZysrOw0KKwkvKiBOb3cgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgdWxDcml0aWNhbE5lc3RpbmcgY2FuIGJlIGFjY2Vzc2VkDQorCWRpcmVjdGx5LiAgSW5jcmVtZW50IHVsQ3JpdGljYWxOZXN0aW5nIHRvIGtlZXAgYSBjb3VudCBvZiBob3cgbWFueSB0aW1lcw0KKwlwb3J0RU5URVJfQ1JJVElDQUwoKSBoYXMgYmVlbiBjYWxsZWQuICovDQorCXVsQ3JpdGljYWxOZXN0aW5nKys7DQogfQ0KIA0KIHZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoIHZvaWQgKQ0KIHsNCi0gICAgaWYoIHVsQ3JpdGljYWxOZXN0aW5nID4gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgKQ0KLSAgICB7DQotICAgICAgICAvKiBEZWNyZW1lbnQgdGhlIG5lc3RpbmcgY291bnQgYXMgd2UgYXJlIGxlYXZpbmcgYSBjcml0aWNhbCBzZWN0aW9uLiAqLw0KLSAgICAgICAgdWxDcml0aWNhbE5lc3RpbmctLTsNCisJaWYoIHVsQ3JpdGljYWxOZXN0aW5nID4gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgKQ0KKwl7DQorCQkvKiBEZWNyZW1lbnQgdGhlIG5lc3RpbmcgY291bnQgYXMgd2UgYXJlIGxlYXZpbmcgYSBjcml0aWNhbCBzZWN0aW9uLiAqLw0KKwkJdWxDcml0aWNhbE5lc3RpbmctLTsNCiANCi0gICAgICAgIC8qIElmIHRoZSBuZXN0aW5nIGxldmVsIGhhcyByZWFjaGVkIHplcm8gdGhlbiBpbnRlcnJ1cHRzIHNob3VsZCBiZQ0KLSAgICAgICAgICogcmUtZW5hYmxlZC4gKi8NCi0gICAgICAgIGlmKCB1bENyaXRpY2FsTmVzdGluZyA9PSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyApDQotICAgICAgICB7DQotICAgICAgICAgICAgLyogRW5hYmxlIGludGVycnVwdHMgYXMgcGVyIHBvcnRFWElUX0NSSVRJQ0FMKCkuCQkJCQkqLw0KLSAgICAgICAgICAgIF9fYXNtIHZvbGF0aWxlICgNCi0gICAgICAgICAgICAgICAgIlNUTURCCVNQISwge1IwfQkJXG5cdCIvKiBQdXNoIFIwLgkJCQkJCSovDQotICAgICAgICAgICAgICAgICJNUlMJUjAsIENQU1IJCVxuXHQiLyogR2V0IENQU1IuCQkJCQkqLw0KLSAgICAgICAgICAgICAgICAiQklDCVIwLCBSMCwgIzB4QzAJXG5cdCIvKiBFbmFibGUgSVJRLCBGSVEuCQkJCSovDQotICAgICAgICAgICAgICAgICJNU1IJQ1BTUiwgUjAJCVxuXHQiLyogV3JpdGUgYmFjayBtb2RpZmllZCB2YWx1ZS4JKi8NCi0gICAgICAgICAgICAgICAgIkxETUlBCVNQISwge1IwfSIpOyAgICAgLyogUG9wIFIwLgkJCQkJCSovDQotICAgICAgICB9DQotICAgIH0NCisJCS8qIElmIHRoZSBuZXN0aW5nIGxldmVsIGhhcyByZWFjaGVkIHplcm8gdGhlbiBpbnRlcnJ1cHRzIHNob3VsZCBiZQ0KKwkJcmUtZW5hYmxlZC4gKi8NCisJCWlmKCB1bENyaXRpY2FsTmVzdGluZyA9PSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyApDQorCQl7DQorCQkJLyogRW5hYmxlIGludGVycnVwdHMgYXMgcGVyIHBvcnRFWElUX0NSSVRJQ0FMKCkuCQkJCQkqLw0KKwkJCV9fYXNtIHZvbGF0aWxlICgNCisJCQkJIlNUTURCCVNQISwge1IwfQkJXG5cdCIJLyogUHVzaCBSMC4JCQkJCQkqLw0KKwkJCQkiTVJTCVIwLCBDUFNSCQlcblx0IgkvKiBHZXQgQ1BTUi4JCQkJCSovDQorCQkJCSJCSUMJUjAsIFIwLCAjMHhDMAlcblx0IgkvKiBFbmFibGUgSVJRLCBGSVEuCQkJCSovDQorCQkJCSJNU1IJQ1BTUiwgUjAJCVxuXHQiCS8qIFdyaXRlIGJhY2sgbW9kaWZpZWQgdmFsdWUuCSovDQorCQkJCSJMRE1JQQlTUCEsIHtSMH0iICk7CQkJLyogUG9wIFIwLgkJCQkJCSovDQorCQl9DQorCX0NCiB9DQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvR0NDL0FSTTdfQVQ5MVNBTTdTL3BvcnRtYWNyby5oIGIvcG9ydGFibGUvR0NDL0FSTTdfQVQ5MVNBTTdTL3BvcnRtYWNyby5oCmluZGV4IDMxYWE0MzEuLjcyZGY2NzAgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0dDQy9BUk03X0FUOTFTQU03Uy9wb3J0bWFjcm8uaAorKysgYi9wb3J0YWJsZS9HQ0MvQVJNN19BVDkxU0FNN1MvcG9ydG1hY3JvLmgKQEAgLTI2LDM0ICsyNiwzNCBAQAogICovDQogDQogLyoNCi0gKiAgQ2hhbmdlcyBmcm9tIFYzLjIuMw0KLSAqDQotICsgTW9kaWZpZWQgcG9ydEVOVEVSX1NXSVRDSElOR19JU1IoKSB0byBhbGxvdyB1c2Ugd2l0aCBHQ0MgVjQuMC4xLg0KLSArDQotICsgIENoYW5nZXMgZnJvbSBWMy4yLjQNCi0gKw0KLSArIFJlbW92ZWQgdGhlIHVzZSBvZiB0aGUgJTAgcGFyYW1ldGVyIHdpdGhpbiB0aGUgYXNzZW1ibGVyIG1hY3JvcyBhbmQNCi0gKyAgICByZXBsYWNlZCB0aGVtIHdpdGggaGFyZCBjb2RlZCByZWdpc3RlcnMuICBUaGlzIHdpbGwgZW5zdXJlIHRoZQ0KLSArICAgIGFzc2VtYmxlciBkb2VzIG5vdCBzZWxlY3QgdGhlIGxpbmsgcmVnaXN0ZXIgYXMgdGhlIHRlbXAgcmVnaXN0ZXIgYXMNCi0gKyAgICB3YXMgb2NjYXNpb25hbGx5IGhhcHBlbmluZyBwcmV2aW91c2x5Lg0KLSArDQotICsgVGhlIGFzc2VtYmxlciBzdGF0ZW1lbnRzIGFyZSBub3cgaW5jbHVkZWQgaW4gYSBzaW5nbGUgYXNtIGJsb2NrIHJhdGhlcg0KLSArICAgIHRoYW4gZWFjaCBsaW5lIGhhdmluZyBpdHMgb3duIGFzbSBibG9jay4NCi0gKw0KLSArICBDaGFuZ2VzIGZyb20gVjQuNS4wDQotICsNCi0gKyBSZW1vdmVkIHRoZSBwb3J0RU5URVJfU1dJVENISU5HX0lTUigpIGFuZCBwb3J0RVhJVF9TV0lUQ0hJTkdfSVNSKCkgbWFjcm9zDQotICsgICAgYW5kIHJlcGxhY2VkIHRoZW0gd2l0aCBwb3J0WUlFTERfRlJPTV9JU1IoKSBtYWNyby4gIEFwcGxpY2F0aW9uIGNvZGUNCi0gKyAgICBzaG91bGQgbm93IG1ha2UgdXNlIG9mIHRoZSBwb3J0U0FWRV9DT05URVhUKCkgYW5kIHBvcnRSRVNUT1JFX0NPTlRFWFQoKQ0KLSArICAgIG1hY3JvcyBhcyBwZXIgdGhlIFY0LjUuMSBkZW1vIGNvZGUuDQotICovDQorCUNoYW5nZXMgZnJvbSBWMy4yLjMNCisNCisJKyBNb2RpZmllZCBwb3J0RU5URVJfU1dJVENISU5HX0lTUigpIHRvIGFsbG93IHVzZSB3aXRoIEdDQyBWNC4wLjEuDQorDQorCUNoYW5nZXMgZnJvbSBWMy4yLjQNCisNCisJKyBSZW1vdmVkIHRoZSB1c2Ugb2YgdGhlICUwIHBhcmFtZXRlciB3aXRoaW4gdGhlIGFzc2VtYmxlciBtYWNyb3MgYW5kDQorCSAgcmVwbGFjZWQgdGhlbSB3aXRoIGhhcmQgY29kZWQgcmVnaXN0ZXJzLiAgVGhpcyB3aWxsIGVuc3VyZSB0aGUNCisJICBhc3NlbWJsZXIgZG9lcyBub3Qgc2VsZWN0IHRoZSBsaW5rIHJlZ2lzdGVyIGFzIHRoZSB0ZW1wIHJlZ2lzdGVyIGFzDQorCSAgd2FzIG9jY2FzaW9uYWxseSBoYXBwZW5pbmcgcHJldmlvdXNseS4NCisNCisJKyBUaGUgYXNzZW1ibGVyIHN0YXRlbWVudHMgYXJlIG5vdyBpbmNsdWRlZCBpbiBhIHNpbmdsZSBhc20gYmxvY2sgcmF0aGVyDQorCSAgdGhhbiBlYWNoIGxpbmUgaGF2aW5nIGl0cyBvd24gYXNtIGJsb2NrLg0KKw0KKwlDaGFuZ2VzIGZyb20gVjQuNS4wDQorDQorCSsgUmVtb3ZlZCB0aGUgcG9ydEVOVEVSX1NXSVRDSElOR19JU1IoKSBhbmQgcG9ydEVYSVRfU1dJVENISU5HX0lTUigpIG1hY3Jvcw0KKwkgIGFuZCByZXBsYWNlZCB0aGVtIHdpdGggcG9ydFlJRUxEX0ZST01fSVNSKCkgbWFjcm8uICBBcHBsaWNhdGlvbiBjb2RlDQorCSAgc2hvdWxkIG5vdyBtYWtlIHVzZSBvZiB0aGUgcG9ydFNBVkVfQ09OVEVYVCgpIGFuZCBwb3J0UkVTVE9SRV9DT05URVhUKCkNCisJICBtYWNyb3MgYXMgcGVyIHRoZSBWNC41LjEgZGVtbyBjb2RlLg0KKyovDQogDQogI2lmbmRlZiBQT1JUTUFDUk9fSA0KLSAgICAjZGVmaW5lIFBPUlRNQUNST19IDQorI2RlZmluZSBQT1JUTUFDUk9fSA0KIA0KLSAgICAjaWZkZWYgX19jcGx1c3BsdXMNCi0gICAgICAgIGV4dGVybiAiQyIgew0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICogUG9ydCBzcGVjaWZpYyBkZWZpbml0aW9ucy4NCkBAIC02NiwzMiArNjYsMzIgQEAKICAqLw0KIA0KIC8qIFR5cGUgZGVmaW5pdGlvbnMuICovDQotICAgICNkZWZpbmUgcG9ydENIQVIgICAgICAgICAgY2hhcg0KLSAgICAjZGVmaW5lIHBvcnRGTE9BVCAgICAgICAgIGZsb2F0DQotICAgICNkZWZpbmUgcG9ydERPVUJMRSAgICAgICAgZG91YmxlDQotICAgICNkZWZpbmUgcG9ydExPTkcgICAgICAgICAgbG9uZw0KLSAgICAjZGVmaW5lIHBvcnRTSE9SVCAgICAgICAgIHNob3J0DQotICAgICNkZWZpbmUgcG9ydFNUQUNLX1RZUEUgICAgdWludDMyX3QNCi0gICAgI2RlZmluZSBwb3J0QkFTRV9UWVBFICAgICBwb3J0TE9ORw0KKyNkZWZpbmUgcG9ydENIQVIJCWNoYXINCisjZGVmaW5lIHBvcnRGTE9BVAkJZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUJCWRvdWJsZQ0KKyNkZWZpbmUgcG9ydExPTkcJCWxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVAkJc2hvcnQNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFCXVpbnQzMl90DQorI2RlZmluZSBwb3J0QkFTRV9UWVBFCXBvcnRMT05HDQogDQotICAgIHR5cGVkZWYgcG9ydFNUQUNLX1RZUEUgICBTdGFja1R5cGVfdDsNCi0gICAgdHlwZWRlZiBsb25nICAgICAgICAgICAgIEJhc2VUeXBlX3Q7DQotICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyAgICBVQmFzZVR5cGVfdDsNCit0eXBlZGVmIHBvcnRTVEFDS19UWVBFIFN0YWNrVHlwZV90Ow0KK3R5cGVkZWYgbG9uZyBCYXNlVHlwZV90Ow0KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBVQmFzZVR5cGVfdDsNCiANCi0gICAgI2lmICggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCi0gICAgICAgIHR5cGVkZWYgdWludDE2X3QgICAgIFRpY2tUeXBlX3Q7DQotICAgICAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQotICAgICNlbHNlDQotICAgICAgICB0eXBlZGVmIHVpbnQzMl90ICAgICBUaWNrVHlwZV90Ow0KLSAgICAgICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTA0KLSAgICAjZW5kaWYNCisjaWYoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQorCXR5cGVkZWYgdWludDE2X3QgVGlja1R5cGVfdDsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggVGlja1R5cGVfdCApIDB4ZmZmZg0KKyNlbHNlDQorCXR5cGVkZWYgdWludDMyX3QgVGlja1R5cGVfdDsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTA0KKyNlbmRpZg0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIEFyY2hpdGVjdHVyZSBzcGVjaWZpY3MuICovDQotICAgICNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSCAgICAgICggLTEgKQ0KLSAgICAjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUyAgICAoICggVGlja1R5cGVfdCApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KLSAgICAjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVCAgICA4DQotICAgICNkZWZpbmUgcG9ydE5PUCgpICAgIF9fYXNtIHZvbGF0aWxlICggIk5PUCIgKTsNCisjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEgJCQkoIC0xICkNCisjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUwkJCSggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQorI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQJCQk4DQorI2RlZmluZSBwb3J0Tk9QKCkJCQkJCV9fYXNtIHZvbGF0aWxlICggIk5PUCIgKTsNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiANCkBAIC0xMDQsOTIgKzEwNCw5MiBAQAogICogVEhVTUIgbW9kZSBjb2RlIHdpbGwgcmVzdWx0IGluIGEgY29tcGlsZSB0aW1lIGVycm9yLg0KICAqLw0KIA0KLSAgICAjZGVmaW5lIHBvcnRSRVNUT1JFX0NPTlRFWFQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgZXh0ZXJuIHZvbGF0aWxlIHZvaWQgKiB2b2xhdGlsZSBweEN1cnJlbnRUQ0I7ICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgZXh0ZXJuIHZvbGF0aWxlIHVpbnQzMl90IHVsQ3JpdGljYWxOZXN0aW5nOyAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgLyogU2V0IHRoZSBMUiB0byB0aGUgdGFzayBzdGFjay4gKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgX19hc20gdm9sYXRpbGUgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICJMRFIJCVIwLCA9cHhDdXJyZW50VENCCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAiTERSCQlSMCwgW1IwXQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAiTERSCQlMUiwgW1IwXQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBUaGUgY3JpdGljYWwgbmVzdGluZyBkZXB0aCBpcyB0aGUgZmlyc3QgaXRlbSBvbiB0aGUgc3RhY2suICovIFwNCi0gICAgICAgICAgICAvKiBMb2FkIGl0IGludG8gdGhlIHVsQ3JpdGljYWxOZXN0aW5nIHZhcmlhYmxlLiAqLyAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAiTERSCQlSMCwgPXVsQ3JpdGljYWxOZXN0aW5nCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICJMRE1GRAlMUiEsIHtSMX0JCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICJTVFIJCVIxLCBbUjBdCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIEdldCB0aGUgU1BTUiBmcm9tIHRoZSBzdGFjay4gKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICJMRE1GRAlMUiEsIHtSMH0JCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICJNU1IJCVNQU1IsIFIwCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIFJlc3RvcmUgYWxsIHN5c3RlbSBtb2RlIHJlZ2lzdGVycyBmb3IgdGhlIHRhc2suICovICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICJMRE1GRAlMUiwge1IwLVIxNH1eCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICJOT1AJCQkJCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIFJlc3RvcmUgdGhlIHJldHVybiBhZGRyZXNzLiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICJMRFIJCUxSLCBbTFIsICMrNjBdCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogQW5kIHJldHVybiAtIGNvcnJlY3RpbmcgdGhlIG9mZnNldCBpbiB0aGUgTFIgdG8gb2J0YWluIHRoZSAqLyBcDQotICAgICAgICAgICAgLyogY29ycmVjdCBhZGRyZXNzLiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgIlNVQlMJUEMsIExSLCAjNAkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAoIHZvaWQgKSB1bENyaXRpY2FsTmVzdGluZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAoIHZvaWQgKSBweEN1cnJlbnRUQ0I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIH0NCisjZGVmaW5lIHBvcnRSRVNUT1JFX0NPTlRFWFQoKQkJCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJCQlcDQorZXh0ZXJuIHZvbGF0aWxlIHZvaWQgKiB2b2xhdGlsZSBweEN1cnJlbnRUQ0I7CQkJCQkJCVwNCitleHRlcm4gdm9sYXRpbGUgdWludDMyX3QgdWxDcml0aWNhbE5lc3Rpbmc7CQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBTZXQgdGhlIExSIHRvIHRoZSB0YXNrIHN0YWNrLiAqLwkJCQkJCQkJCVwNCisJX19hc20gdm9sYXRpbGUgKAkJCQkJCQkJCQkJCQlcDQorCSJMRFIJCVIwLCA9cHhDdXJyZW50VENCCQkJCQkJCQlcblx0IglcDQorCSJMRFIJCVIwLCBbUjBdCQkJCQkJCQkJCVxuXHQiCVwNCisJIkxEUgkJTFIsIFtSMF0JCQkJCQkJCQkJXG5cdCIJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogVGhlIGNyaXRpY2FsIG5lc3RpbmcgZGVwdGggaXMgdGhlIGZpcnN0IGl0ZW0gb24gdGhlIHN0YWNrLiAqLwlcDQorCS8qIExvYWQgaXQgaW50byB0aGUgdWxDcml0aWNhbE5lc3RpbmcgdmFyaWFibGUuICovCQkJCQlcDQorCSJMRFIJCVIwLCA9dWxDcml0aWNhbE5lc3RpbmcJCQkJCQkJXG5cdCIJXA0KKwkiTERNRkQJTFIhLCB7UjF9CQkJCQkJCQkJCQlcblx0IglcDQorCSJTVFIJCVIxLCBbUjBdCQkJCQkJCQkJCVxuXHQiCVwNCisJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIEdldCB0aGUgU1BTUiBmcm9tIHRoZSBzdGFjay4gKi8JCQkJCQkJCQlcDQorCSJMRE1GRAlMUiEsIHtSMH0JCQkJCQkJCQkJCVxuXHQiCVwNCisJIk1TUgkJU1BTUiwgUjAJCQkJCQkJCQkJXG5cdCIJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogUmVzdG9yZSBhbGwgc3lzdGVtIG1vZGUgcmVnaXN0ZXJzIGZvciB0aGUgdGFzay4gKi8JCQkJXA0KKwkiTERNRkQJTFIsIHtSMC1SMTR9XgkJCQkJCQkJCQlcblx0IglcDQorCSJOT1AJCQkJCQkJCQkJCQkJCVxuXHQiCVwNCisJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIFJlc3RvcmUgdGhlIHJldHVybiBhZGRyZXNzLiAqLwkJCQkJCQkJCVwNCisJIkxEUgkJTFIsIFtMUiwgIys2MF0JCQkJCQkJCQlcblx0IglcDQorCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBBbmQgcmV0dXJuIC0gY29ycmVjdGluZyB0aGUgb2Zmc2V0IGluIHRoZSBMUiB0byBvYnRhaW4gdGhlICovCVwNCisJLyogY29ycmVjdCBhZGRyZXNzLiAqLwkJCQkJCQkJCQkJCVwNCisJIlNVQlMJUEMsIExSLCAjNAkJCQkJCQkJCQkJXG5cdCIJXA0KKwkpOwkJCQkJCQkJCQkJCQkJCQkJXA0KKwkoIHZvaWQgKSB1bENyaXRpY2FsTmVzdGluZzsJCQkJCQkJCQkJCVwNCisJKCB2b2lkICkgcHhDdXJyZW50VENCOwkJCQkJCQkJCQkJCVwNCit9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQotICAgICNkZWZpbmUgcG9ydFNBVkVfQ09OVEVYVCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBleHRlcm4gdm9sYXRpbGUgdm9pZCAqIHZvbGF0aWxlIHB4Q3VycmVudFRDQjsgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBleHRlcm4gdm9sYXRpbGUgdWludDMyX3QgdWxDcml0aWNhbE5lc3Rpbmc7ICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAvKiBQdXNoIFIwIGFzIHdlIGFyZSBnb2luZyB0byB1c2UgdGhlIHJlZ2lzdGVyLiAqLyAgICAgICAgICAgICAgICBcDQotICAgICAgICBfX2FzbSB2b2xhdGlsZSAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgIlNUTURCCVNQISwge1IwfQkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogU2V0IFIwIHRvIHBvaW50IHRvIHRoZSB0YXNrIHN0YWNrIHBvaW50ZXIuICovICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgIlNUTURCCVNQLHtTUH1eCQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAiTk9QCQkJCQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAiU1VCCVNQLCBTUCwgIzQJCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICJMRE1JQQlTUCEse1IwfQkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogUHVzaCB0aGUgcmV0dXJuIGFkZHJlc3Mgb250byB0aGUgc3RhY2suICovICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgIlNUTURCCVIwISwge0xSfQkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogTm93IHdlIGhhdmUgc2F2ZWQgTFIgd2UgY2FuIHVzZSBpdCBpbnN0ZWFkIG9mIFIwLiAqLyAgICAgICBcDQotICAgICAgICAgICAgIk1PVglMUiwgUjAJCQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBQb3AgUjAgc28gd2UgY2FuIHNhdmUgaXQgb250byB0aGUgc3lzdGVtIG1vZGUgc3RhY2suICovICAgIFwNCi0gICAgICAgICAgICAiTERNSUEJU1AhLCB7UjB9CQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBQdXNoIGFsbCB0aGUgc3lzdGVtIG1vZGUgcmVnaXN0ZXJzIG9udG8gdGhlIHRhc2sgc3RhY2suICovIFwNCi0gICAgICAgICAgICAiU1RNREIJTFIse1IwLUxSfV4JCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICJOT1AJCQkJCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICJTVUIJTFIsIExSLCAjNjAJCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIFB1c2ggdGhlIFNQU1Igb250byB0aGUgdGFzayBzdGFjay4gKi8gICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICJNUlMJUjAsIFNQU1IJCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICJTVE1EQglMUiEsIHtSMH0JCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICJMRFIJUjAsID11bENyaXRpY2FsTmVzdGluZwkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgIkxEUglSMCwgW1IwXQkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgIlNUTURCCUxSISwge1IwfQkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogU3RvcmUgdGhlIG5ldyB0b3Agb2Ygc3RhY2sgZm9yIHRoZSB0YXNrLiAqLyAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgIkxEUglSMCwgPXB4Q3VycmVudFRDQgkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICJMRFIJUjAsIFtSMF0JCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICJTVFIJTFIsIFtSMF0JCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgKCB2b2lkICkgdWxDcml0aWNhbE5lc3Rpbmc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgKCB2b2lkICkgcHhDdXJyZW50VENCOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB9DQorI2RlZmluZSBwb3J0U0FWRV9DT05URVhUKCkJCQkJCQkJCQkJCQlcDQorewkJCQkJCQkJCQkJCQkJCQkJCVwNCitleHRlcm4gdm9sYXRpbGUgdm9pZCAqIHZvbGF0aWxlIHB4Q3VycmVudFRDQjsJCQkJCQkJXA0KK2V4dGVybiB2b2xhdGlsZSB1aW50MzJfdCB1bENyaXRpY2FsTmVzdGluZzsJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIFB1c2ggUjAgYXMgd2UgYXJlIGdvaW5nIHRvIHVzZSB0aGUgcmVnaXN0ZXIuICovCQkJCQlcDQorCV9fYXNtIHZvbGF0aWxlICgJCQkJCQkJCQkJCQkJXA0KKwkiU1RNREIJU1AhLCB7UjB9CQkJCQkJCQkJCQlcblx0IglcDQorCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBTZXQgUjAgdG8gcG9pbnQgdG8gdGhlIHRhc2sgc3RhY2sgcG9pbnRlci4gKi8JCQkJCVwNCisJIlNUTURCCVNQLHtTUH1eCQkJCQkJCQkJCQlcblx0IglcDQorCSJOT1AJCQkJCQkJCQkJCQkJCVxuXHQiCVwNCisJIlNVQglTUCwgU1AsICM0CQkJCQkJCQkJCQlcblx0IglcDQorCSJMRE1JQQlTUCEse1IwfQkJCQkJCQkJCQkJXG5cdCIJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogUHVzaCB0aGUgcmV0dXJuIGFkZHJlc3Mgb250byB0aGUgc3RhY2suICovCQkJCQkJXA0KKwkiU1RNREIJUjAhLCB7TFJ9CQkJCQkJCQkJCQlcblx0IglcDQorCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBOb3cgd2UgaGF2ZSBzYXZlZCBMUiB3ZSBjYW4gdXNlIGl0IGluc3RlYWQgb2YgUjAuICovCQkJCVwNCisJIk1PVglMUiwgUjAJCQkJCQkJCQkJCQlcblx0IglcDQorCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBQb3AgUjAgc28gd2UgY2FuIHNhdmUgaXQgb250byB0aGUgc3lzdGVtIG1vZGUgc3RhY2suICovCQkJXA0KKwkiTERNSUEJU1AhLCB7UjB9CQkJCQkJCQkJCQlcblx0IglcDQorCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBQdXNoIGFsbCB0aGUgc3lzdGVtIG1vZGUgcmVnaXN0ZXJzIG9udG8gdGhlIHRhc2sgc3RhY2suICovCQlcDQorCSJTVE1EQglMUix7UjAtTFJ9XgkJCQkJCQkJCQkJXG5cdCIJXA0KKwkiTk9QCQkJCQkJCQkJCQkJCQlcblx0IglcDQorCSJTVUIJTFIsIExSLCAjNjAJCQkJCQkJCQkJCVxuXHQiCVwNCisJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIFB1c2ggdGhlIFNQU1Igb250byB0aGUgdGFzayBzdGFjay4gKi8JCQkJCQkJXA0KKwkiTVJTCVIwLCBTUFNSCQkJCQkJCQkJCQlcblx0IglcDQorCSJTVE1EQglMUiEsIHtSMH0JCQkJCQkJCQkJCVxuXHQiCVwNCisJCQkJCQkJCQkJCQkJCQkJCQlcDQorCSJMRFIJUjAsID11bENyaXRpY2FsTmVzdGluZwkJCQkJCQkJXG5cdCIJXA0KKwkiTERSCVIwLCBbUjBdCQkJCQkJCQkJCQlcblx0IglcDQorCSJTVE1EQglMUiEsIHtSMH0JCQkJCQkJCQkJCVxuXHQiCVwNCisJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIFN0b3JlIHRoZSBuZXcgdG9wIG9mIHN0YWNrIGZvciB0aGUgdGFzay4gKi8JCQkJCQlcDQorCSJMRFIJUjAsID1weEN1cnJlbnRUQ0IJCQkJCQkJCQlcblx0IglcDQorCSJMRFIJUjAsIFtSMF0JCQkJCQkJCQkJCVxuXHQiCVwNCisJIlNUUglMUiwgW1IwXQkJCQkJCQkJCQkJXG5cdCIJXA0KKwkpOwkJCQkJCQkJCQkJCQkJCQkJXA0KKwkoIHZvaWQgKSB1bENyaXRpY2FsTmVzdGluZzsJCQkJCQkJCQkJCVwNCisJKCB2b2lkICkgcHhDdXJyZW50VENCOwkJCQkJCQkJCQkJCVwNCit9DQogDQogDQotICAgICNkZWZpbmUgcG9ydFlJRUxEX0ZST01fSVNSKCkgICAgdlRhc2tTd2l0Y2hDb250ZXh0KCkNCi0gICAgI2RlZmluZSBwb3J0WUlFTEQoKSAgICAgICAgICAgICBfX2FzbSB2b2xhdGlsZSAoICJTV0kgMCIgKQ0KKyNkZWZpbmUgcG9ydFlJRUxEX0ZST01fSVNSKCkJCXZUYXNrU3dpdGNoQ29udGV4dCgpDQorI2RlZmluZSBwb3J0WUlFTEQoKQkJCQkJX19hc20gdm9sYXRpbGUgKCAiU1dJIDAiICkNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiANCkBAIC0yMDIsNDcgKzIwMiw0OCBAQAogICogZGVmaW5lZCB0aGVuIHRoZSB1dGlsaXRpZXMgYXJlIGRlZmluZWQgYXMgbWFjcm9zIGhlcmUgLSBhcyBwZXIgb3RoZXIgcG9ydHMuDQogICovDQogDQotICAgICNpZmRlZiBUSFVNQl9JTlRFUldPUksNCisjaWZkZWYgVEhVTUJfSU5URVJXT1JLDQogDQotICAgICAgICBleHRlcm4gdm9pZCB2UG9ydERpc2FibGVJbnRlcnJ1cHRzRnJvbVRodW1iKCB2b2lkICkgX19hdHRyaWJ1dGVfXyggKCBuYWtlZCApICk7DQotICAgICAgICBleHRlcm4gdm9pZCB2UG9ydEVuYWJsZUludGVycnVwdHNGcm9tVGh1bWIoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fKCAoIG5ha2VkICkgKTsNCisJZXh0ZXJuIHZvaWQgdlBvcnREaXNhYmxlSW50ZXJydXB0c0Zyb21UaHVtYiggdm9pZCApIF9fYXR0cmlidXRlX18gKChuYWtlZCkpOw0KKwlleHRlcm4gdm9pZCB2UG9ydEVuYWJsZUludGVycnVwdHNGcm9tVGh1bWIoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fICgobmFrZWQpKTsNCiANCi0gICAgICAgICNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpICAgIHZQb3J0RGlzYWJsZUludGVycnVwdHNGcm9tVGh1bWIoKQ0KLSAgICAgICAgI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKSAgICAgdlBvcnRFbmFibGVJbnRlcnJ1cHRzRnJvbVRodW1iKCkNCisJI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkJdlBvcnREaXNhYmxlSW50ZXJydXB0c0Zyb21UaHVtYigpDQorCSNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkJCXZQb3J0RW5hYmxlSW50ZXJydXB0c0Zyb21UaHVtYigpDQogDQotICAgICNlbHNlDQorI2Vsc2UNCiANCi0gICAgICAgICNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIF9fYXNtIHZvbGF0aWxlICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgIlNUTURCCVNQISwge1IwfQkJXG5cdCIvKiBQdXNoIFIwLgkJCQkJCSovXA0KLSAgICAgICAgIk1SUwlSMCwgQ1BTUgkJXG5cdCIvKiBHZXQgQ1BTUi4JCQkJCSovXA0KLSAgICAgICAgIk9SUglSMCwgUjAsICMweEMwCVxuXHQiLyogRGlzYWJsZSBJUlEsIEZJUS4JCQkqL1wNCi0gICAgICAgICJNU1IJQ1BTUiwgUjAJCVxuXHQiLyogV3JpdGUgYmFjayBtb2RpZmllZCB2YWx1ZS4JKi9cDQotICAgICAgICAiTERNSUEJU1AhLCB7UjB9CQkJIikgICAgICAvKiBQb3AgUjAuCQkJCQkJKi8NCisJI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkJCQkJCQkJCQkJCVwNCisJCV9fYXNtIHZvbGF0aWxlICgJCQkJCQkJCQkJCQkJCVwNCisJCQkiU1RNREIJU1AhLCB7UjB9CQlcblx0IgkvKiBQdXNoIFIwLgkJCQkJCSovCVwNCisJCQkiTVJTCVIwLCBDUFNSCQlcblx0IgkvKiBHZXQgQ1BTUi4JCQkJCSovCVwNCisJCQkiT1JSCVIwLCBSMCwgIzB4QzAJXG5cdCIJLyogRGlzYWJsZSBJUlEsIEZJUS4JCQkqLwlcDQorCQkJIk1TUglDUFNSLCBSMAkJXG5cdCIJLyogV3JpdGUgYmFjayBtb2RpZmllZCB2YWx1ZS4JKi8JXA0KKwkJCSJMRE1JQQlTUCEsIHtSMH0JCQkiICkJLyogUG9wIFIwLgkJCQkJCSovDQogDQotICAgICAgICAjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICBfX2FzbSB2b2xhdGlsZSAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICJTVE1EQglTUCEsIHtSMH0JCVxuXHQiLyogUHVzaCBSMC4JCQkJCQkqL1wNCi0gICAgICAgICJNUlMJUjAsIENQU1IJCVxuXHQiLyogR2V0IENQU1IuCQkJCQkqL1wNCi0gICAgICAgICJCSUMJUjAsIFIwLCAjMHhDMAlcblx0Ii8qIEVuYWJsZSBJUlEsIEZJUS4JCQkJKi9cDQotICAgICAgICAiTVNSCUNQU1IsIFIwCQlcblx0Ii8qIFdyaXRlIGJhY2sgbW9kaWZpZWQgdmFsdWUuCSovXA0KLSAgICAgICAgIkxETUlBCVNQISwge1IwfQkJCSIpICAgICAgLyogUG9wIFIwLgkJCQkJCSovDQorCSNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkJCQkJCQkJCQkJCQlcDQorCQlfX2FzbSB2b2xhdGlsZSAoCQkJCQkJCQkJCQkJCQlcDQorCQkJIlNUTURCCVNQISwge1IwfQkJXG5cdCIJLyogUHVzaCBSMC4JCQkJCQkqLwlcDQorCQkJIk1SUwlSMCwgQ1BTUgkJXG5cdCIJLyogR2V0IENQU1IuCQkJCQkqLwlcDQorCQkJIkJJQwlSMCwgUjAsICMweEMwCVxuXHQiCS8qIEVuYWJsZSBJUlEsIEZJUS4JCQkJKi8JXA0KKwkJCSJNU1IJQ1BTUiwgUjAJCVxuXHQiCS8qIFdyaXRlIGJhY2sgbW9kaWZpZWQgdmFsdWUuCSovCVwNCisJCQkiTERNSUEJU1AhLCB7UjB9CQkJIiApCS8qIFBvcCBSMC4JCQkJCQkqLw0KIA0KLSAgICAjZW5kaWYgLyogVEhVTUJfSU5URVJXT1JLICovDQorI2VuZGlmIC8qIFRIVU1CX0lOVEVSV09SSyAqLw0KIA0KLSAgICBleHRlcm4gdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKTsNCi0gICAgZXh0ZXJuIHZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApOw0KIA0KLSAgICAjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpICAgIHZQb3J0RW50ZXJDcml0aWNhbCgpOw0KLSAgICAjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkgICAgIHZQb3J0RXhpdENyaXRpY2FsKCk7DQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKQkJdlBvcnRFbnRlckNyaXRpY2FsKCk7DQorI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpCQkJdlBvcnRFeGl0Q3JpdGljYWwoKTsNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBUYXNrIGZ1bmN0aW9uIG1hY3JvcyBhcyBkZXNjcmliZWQgb24gdGhlIEZyZWVSVE9TLm9yZyBXRUIgc2l0ZS4gKi8NCi0gICAgI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQotICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgICAgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCiANCi0gICAgI2lmZGVmIF9fY3BsdXNwbHVzDQotICAgICAgICB9DQotICAgICNlbmRpZg0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCiANCiAjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8NCisNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9HQ0MvQVJNN19MUEMyMDAwL3BvcnQuYyBiL3BvcnRhYmxlL0dDQy9BUk03X0xQQzIwMDAvcG9ydC5jCmluZGV4IGMzMGZlYzkuLjI2NjMzM2YgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0dDQy9BUk03X0xQQzIwMDAvcG9ydC5jCisrKyBiL3BvcnRhYmxlL0dDQy9BUk03X0xQQzIwMDAvcG9ydC5jCkBAIC0yNywxMiArMjcsMTIgQEAKIA0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0qIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBBUk03IHBvcnQuDQotKg0KLSogQ29tcG9uZW50cyB0aGF0IGNhbiBiZSBjb21waWxlZCB0byBlaXRoZXIgQVJNIG9yIFRIVU1CIG1vZGUgYXJlDQotKiBjb250YWluZWQgaW4gdGhpcyBmaWxlLiAgVGhlIElTUiByb3V0aW5lcywgd2hpY2ggY2FuIG9ubHkgYmUgY29tcGlsZWQNCi0qIHRvIEFSTSBtb2RlIGFyZSBjb250YWluZWQgaW4gcG9ydElTUi5jLg0KLSotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgQVJNNyBwb3J0Lg0KKyAqDQorICogQ29tcG9uZW50cyB0aGF0IGNhbiBiZSBjb21waWxlZCB0byBlaXRoZXIgQVJNIG9yIFRIVU1CIG1vZGUgYXJlDQorICogY29udGFpbmVkIGluIHRoaXMgZmlsZS4gIFRoZSBJU1Igcm91dGluZXMsIHdoaWNoIGNhbiBvbmx5IGJlIGNvbXBpbGVkDQorICogdG8gQVJNIG1vZGUgYXJlIGNvbnRhaW5lZCBpbiBwb3J0SVNSLmMuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiANCiAvKiBTdGFuZGFyZCBpbmNsdWRlcy4gKi8NCkBAIC00MywxMzYgKzQzLDEzNCBAQAogI2luY2x1ZGUgInRhc2suaCINCiANCiAvKiBDb25zdGFudHMgcmVxdWlyZWQgdG8gc2V0dXAgdGhlIHRhc2sgY29udGV4dC4gKi8NCi0jZGVmaW5lIHBvcnRJTklUSUFMX1NQU1IgICAgICAgICAgICAgICAgICAgKCAoIFN0YWNrVHlwZV90ICkgMHgxZiApIC8qIFN5c3RlbSBtb2RlLCBBUk0gbW9kZSwgaW50ZXJydXB0cyBlbmFibGVkLiAqLw0KLSNkZWZpbmUgcG9ydFRIVU1CX01PREVfQklUICAgICAgICAgICAgICAgICAoICggU3RhY2tUeXBlX3QgKSAweDIwICkNCi0jZGVmaW5lIHBvcnRJTlNUUlVDVElPTl9TSVpFICAgICAgICAgICAgICAgKCAoIFN0YWNrVHlwZV90ICkgNCApDQotI2RlZmluZSBwb3J0Tk9fQ1JJVElDQUxfU0VDVElPTl9ORVNUSU5HICAgICggKCBTdGFja1R5cGVfdCApIDAgKQ0KKyNkZWZpbmUgcG9ydElOSVRJQUxfU1BTUgkJCQkoICggU3RhY2tUeXBlX3QgKSAweDFmICkgLyogU3lzdGVtIG1vZGUsIEFSTSBtb2RlLCBpbnRlcnJ1cHRzIGVuYWJsZWQuICovDQorI2RlZmluZSBwb3J0VEhVTUJfTU9ERV9CSVQJCQkJKCAoIFN0YWNrVHlwZV90ICkgMHgyMCApDQorI2RlZmluZSBwb3J0SU5TVFJVQ1RJT05fU0laRQkJCSggKCBTdGFja1R5cGVfdCApIDQgKQ0KKyNkZWZpbmUgcG9ydE5PX0NSSVRJQ0FMX1NFQ1RJT05fTkVTVElORwkoICggU3RhY2tUeXBlX3QgKSAwICkNCiANCiAvKiBDb25zdGFudHMgcmVxdWlyZWQgdG8gc2V0dXAgdGhlIHRpY2sgSVNSLiAqLw0KLSNkZWZpbmUgcG9ydEVOQUJMRV9USU1FUiAgICAgICAgICAgICAgICAgICAoICggdWludDhfdCApIDB4MDEgKQ0KLSNkZWZpbmUgcG9ydFBSRVNDQUxFX1ZBTFVFICAgICAgICAgICAgICAgICAweDAwDQotI2RlZmluZSBwb3J0SU5URVJSVVBUX09OX01BVENIICAgICAgICAgICAgICggKCB1aW50MzJfdCApIDB4MDEgKQ0KLSNkZWZpbmUgcG9ydFJFU0VUX0NPVU5UX09OX01BVENIICAgICAgICAgICAoICggdWludDMyX3QgKSAweDAyICkNCisjZGVmaW5lIHBvcnRFTkFCTEVfVElNRVIJCQkoICggdWludDhfdCApIDB4MDEgKQ0KKyNkZWZpbmUgcG9ydFBSRVNDQUxFX1ZBTFVFCQkJMHgwMA0KKyNkZWZpbmUgcG9ydElOVEVSUlVQVF9PTl9NQVRDSAkJKCAoIHVpbnQzMl90ICkgMHgwMSApDQorI2RlZmluZSBwb3J0UkVTRVRfQ09VTlRfT05fTUFUQ0gJKCAoIHVpbnQzMl90ICkgMHgwMiApDQogDQogLyogQ29uc3RhbnRzIHJlcXVpcmVkIHRvIHNldHVwIHRoZSBWSUMgZm9yIHRoZSB0aWNrIElTUi4gKi8NCi0jZGVmaW5lIHBvcnRUSU1FUl9WSUNfQ0hBTk5FTCAgICAgICAgICAgICAgKCAoIHVpbnQzMl90ICkgMHgwMDA0ICkNCi0jZGVmaW5lIHBvcnRUSU1FUl9WSUNfQ0hBTk5FTF9CSVQgICAgICAgICAgKCAoIHVpbnQzMl90ICkgMHgwMDEwICkNCi0jZGVmaW5lIHBvcnRUSU1FUl9WSUNfRU5BQkxFICAgICAgICAgICAgICAgKCAoIHVpbnQzMl90ICkgMHgwMDIwICkNCisjZGVmaW5lIHBvcnRUSU1FUl9WSUNfQ0hBTk5FTAkJKCAoIHVpbnQzMl90ICkgMHgwMDA0ICkNCisjZGVmaW5lIHBvcnRUSU1FUl9WSUNfQ0hBTk5FTF9CSVQJKCAoIHVpbnQzMl90ICkgMHgwMDEwICkNCisjZGVmaW5lIHBvcnRUSU1FUl9WSUNfRU5BQkxFCQkoICggdWludDMyX3QgKSAweDAwMjAgKQ0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFNldHVwIHRoZSB0aW1lciB0byBnZW5lcmF0ZSB0aGUgdGljayBpbnRlcnJ1cHRzLiAqLw0KIHN0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKTsNCiANCi0vKg0KLSAqIFRoZSBzY2hlZHVsZXIgY2FuIG9ubHkgYmUgc3RhcnRlZCBmcm9tIEFSTSBtb2RlLCBzbw0KLSAqIHZQb3J0SVNSU3RhcnRGaXJzdFNUYXNrKCkgaXMgZGVmaW5lZCBpbiBwb3J0SVNSLmMuDQorLyogDQorICogVGhlIHNjaGVkdWxlciBjYW4gb25seSBiZSBzdGFydGVkIGZyb20gQVJNIG1vZGUsIHNvIA0KKyAqIHZQb3J0SVNSU3RhcnRGaXJzdFNUYXNrKCkgaXMgZGVmaW5lZCBpbiBwb3J0SVNSLmMuIA0KICAqLw0KIGV4dGVybiB2b2lkIHZQb3J0SVNSU3RhcnRGaXJzdFRhc2soIHZvaWQgKTsNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0vKg0KLSAqIEluaXRpYWxpc2UgdGhlIHN0YWNrIG9mIGEgdGFzayB0byBsb29rIGV4YWN0bHkgYXMgaWYgYSBjYWxsIHRvDQorLyogDQorICogSW5pdGlhbGlzZSB0aGUgc3RhY2sgb2YgYSB0YXNrIHRvIGxvb2sgZXhhY3RseSBhcyBpZiBhIGNhbGwgdG8gDQogICogcG9ydFNBVkVfQ09OVEVYVCBoYWQgYmVlbiBjYWxsZWQuDQogICoNCi0gKiBTZWUgaGVhZGVyIGZpbGUgZm9yIGRlc2NyaXB0aW9uLg0KKyAqIFNlZSBoZWFkZXIgZmlsZSBmb3IgZGVzY3JpcHRpb24uIA0KICAqLw0KLVN0YWNrVHlwZV90ICogcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqIHB4VG9wT2ZTdGFjaywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFza0Z1bmN0aW9uX3QgcHhDb2RlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICogcHZQYXJhbWV0ZXJzICkNCitTdGFja1R5cGVfdCAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqcHhUb3BPZlN0YWNrLCBUYXNrRnVuY3Rpb25fdCBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycyApDQogew0KLSAgICBTdGFja1R5cGVfdCAqIHB4T3JpZ2luYWxUT1M7DQorU3RhY2tUeXBlX3QgKnB4T3JpZ2luYWxUT1M7DQogDQotICAgIHB4T3JpZ2luYWxUT1MgPSBweFRvcE9mU3RhY2s7DQorCXB4T3JpZ2luYWxUT1MgPSBweFRvcE9mU3RhY2s7DQogDQotICAgIC8qIFRvIGVuc3VyZSBhc3NlcnRzIGluIHRhc2tzLmMgZG9uJ3QgZmFpbCwgYWx0aG91Z2ggaW4gdGhpcyBjYXNlIHRoZSBhc3NlcnQNCi0gICAgICogaXMgbm90IHJlYWxseSByZXF1aXJlZC4gKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIFRvIGVuc3VyZSBhc3NlcnRzIGluIHRhc2tzLmMgZG9uJ3QgZmFpbCwgYWx0aG91Z2ggaW4gdGhpcyBjYXNlIHRoZSBhc3NlcnQNCisJaXMgbm90IHJlYWxseSByZXF1aXJlZC4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgIC8qIFNldHVwIHRoZSBpbml0aWFsIHN0YWNrIG9mIHRoZSB0YXNrLiAgVGhlIHN0YWNrIGlzIHNldCBleGFjdGx5IGFzDQotICAgICAqIGV4cGVjdGVkIGJ5IHRoZSBwb3J0UkVTVE9SRV9DT05URVhUKCkgbWFjcm8uICovDQorCS8qIFNldHVwIHRoZSBpbml0aWFsIHN0YWNrIG9mIHRoZSB0YXNrLiAgVGhlIHN0YWNrIGlzIHNldCBleGFjdGx5IGFzIA0KKwlleHBlY3RlZCBieSB0aGUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpIG1hY3JvLiAqLw0KIA0KLSAgICAvKiBGaXJzdCBvbiB0aGUgc3RhY2sgaXMgdGhlIHJldHVybiBhZGRyZXNzIC0gd2hpY2ggaW4gdGhpcyBjYXNlIGlzIHRoZQ0KLSAgICAgKiBzdGFydCBvZiB0aGUgdGFzay4gIFRoZSBvZmZzZXQgaXMgYWRkZWQgdG8gbWFrZSB0aGUgcmV0dXJuIGFkZHJlc3MgYXBwZWFyDQotICAgICAqIGFzIGl0IHdvdWxkIHdpdGhpbiBhbiBJUlEgSVNSLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB4Q29kZSArIHBvcnRJTlNUUlVDVElPTl9TSVpFOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJLyogRmlyc3Qgb24gdGhlIHN0YWNrIGlzIHRoZSByZXR1cm4gYWRkcmVzcyAtIHdoaWNoIGluIHRoaXMgY2FzZSBpcyB0aGUNCisJc3RhcnQgb2YgdGhlIHRhc2suICBUaGUgb2Zmc2V0IGlzIGFkZGVkIHRvIG1ha2UgdGhlIHJldHVybiBhZGRyZXNzIGFwcGVhcg0KKwlhcyBpdCB3b3VsZCB3aXRoaW4gYW4gSVJRIElTUi4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBweENvZGUgKyBwb3J0SU5TVFJVQ1RJT05fU0laRTsJCQ0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweGFhYWFhYWFhOyAgICAvKiBSMTQgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHhPcmlnaW5hbFRPUzsgLyogU3RhY2sgdXNlZCB3aGVuIHRhc2sgc3RhcnRzIGdvZXMgaW4gUjEzLiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDEyMTIxMjEyOyAgICAvKiBSMTIgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMTExMTExMTsgICAgLyogUjExICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTAxMDEwMTA7ICAgIC8qIFIxMCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA5MDkwOTA5OyAgICAvKiBSOSAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA4MDgwODA4OyAgICAvKiBSOCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA3MDcwNzA3OyAgICAvKiBSNyAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA2MDYwNjA2OyAgICAvKiBSNiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA1MDUwNTA1OyAgICAvKiBSNSAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA0MDQwNDA0OyAgICAvKiBSNCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAzMDMwMzAzOyAgICAvKiBSMyAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAyMDIwMjAyOyAgICAvKiBSMiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAxMDEwMTAxOyAgICAvKiBSMSAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweGFhYWFhYWFhOwkvKiBSMTQgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB4T3JpZ2luYWxUT1M7IC8qIFN0YWNrIHVzZWQgd2hlbiB0YXNrIHN0YXJ0cyBnb2VzIGluIFIxMy4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMjEyMTIxMjsJLyogUjEyICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDExMTExMTExOwkvKiBSMTEgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTAxMDEwMTA7CS8qIFIxMCAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwOTA5MDkwOTsJLyogUjkgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDgwODA4MDg7CS8qIFI4ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA3MDcwNzA3OwkvKiBSNyAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNjA2MDYwNjsJLyogUjYgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDUwNTA1MDU7CS8qIFI1ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA0MDQwNDA0OwkvKiBSNCAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMzAzMDMwMzsJLyogUjMgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDIwMjAyMDI7CS8qIFIyICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAxMDEwMTAxOwkvKiBSMSAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQogDQotICAgIC8qIFdoZW4gdGhlIHRhc2sgc3RhcnRzIGlzIHdpbGwgZXhwZWN0IHRvIGZpbmQgdGhlIGZ1bmN0aW9uIHBhcmFtZXRlciBpbg0KLSAgICAgKiBSMC4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwdlBhcmFtZXRlcnM7IC8qIFIwICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkvKiBXaGVuIHRoZSB0YXNrIHN0YXJ0cyBpcyB3aWxsIGV4cGVjdCB0byBmaW5kIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXIgaW4NCisJUjAuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHZQYXJhbWV0ZXJzOyAvKiBSMCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgLyogVGhlIGxhc3QgdGhpbmcgb250byB0aGUgc3RhY2sgaXMgdGhlIHN0YXR1cyByZWdpc3Rlciwgd2hpY2ggaXMgc2V0IGZvcg0KLSAgICAgKiBzeXN0ZW0gbW9kZSwgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQuICovDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcG9ydElOSVRJQUxfU1BTUjsNCisJLyogVGhlIGxhc3QgdGhpbmcgb250byB0aGUgc3RhY2sgaXMgdGhlIHN0YXR1cyByZWdpc3Rlciwgd2hpY2ggaXMgc2V0IGZvcg0KKwlzeXN0ZW0gbW9kZSwgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcG9ydElOSVRJQUxfU1BTUjsNCiANCi0gICAgaWYoICggKCB1aW50MzJfdCApIHB4Q29kZSAmIDB4MDFVTCApICE9IDB4MDAgKQ0KLSAgICB7DQotICAgICAgICAvKiBXZSB3YW50IHRoZSB0YXNrIHRvIHN0YXJ0IGluIHRodW1iIG1vZGUuICovDQotICAgICAgICAqcHhUb3BPZlN0YWNrIHw9IHBvcnRUSFVNQl9NT0RFX0JJVDsNCi0gICAgfQ0KKwlpZiggKCAoIHVpbnQzMl90ICkgcHhDb2RlICYgMHgwMVVMICkgIT0gMHgwMCApDQorCXsNCisJCS8qIFdlIHdhbnQgdGhlIHRhc2sgdG8gc3RhcnQgaW4gdGh1bWIgbW9kZS4gKi8NCisJCSpweFRvcE9mU3RhY2sgfD0gcG9ydFRIVU1CX01PREVfQklUOw0KKwl9DQogDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgLyogU29tZSBvcHRpbWlzYXRpb24gbGV2ZWxzIHVzZSB0aGUgc3RhY2sgZGlmZmVyZW50bHkgdG8gb3RoZXJzLiAgVGhpcw0KLSAgICAgKiBtZWFucyB0aGUgaW50ZXJydXB0IGZsYWdzIGNhbm5vdCBhbHdheXMgYmUgc3RvcmVkIG9uIHRoZSBzdGFjayBhbmQgd2lsbA0KLSAgICAgKiBpbnN0ZWFkIGJlIHN0b3JlZCBpbiBhIHZhcmlhYmxlLCB3aGljaCBpcyB0aGVuIHNhdmVkIGFzIHBhcnQgb2YgdGhlDQotICAgICAqIHRhc2tzIGNvbnRleHQuICovDQotICAgICpweFRvcE9mU3RhY2sgPSBwb3J0Tk9fQ1JJVElDQUxfU0VDVElPTl9ORVNUSU5HOw0KKwkvKiBTb21lIG9wdGltaXNhdGlvbiBsZXZlbHMgdXNlIHRoZSBzdGFjayBkaWZmZXJlbnRseSB0byBvdGhlcnMuICBUaGlzIA0KKwltZWFucyB0aGUgaW50ZXJydXB0IGZsYWdzIGNhbm5vdCBhbHdheXMgYmUgc3RvcmVkIG9uIHRoZSBzdGFjayBhbmQgd2lsbA0KKwlpbnN0ZWFkIGJlIHN0b3JlZCBpbiBhIHZhcmlhYmxlLCB3aGljaCBpcyB0aGVuIHNhdmVkIGFzIHBhcnQgb2YgdGhlDQorCXRhc2tzIGNvbnRleHQuICovDQorCSpweFRvcE9mU3RhY2sgPSBwb3J0Tk9fQ1JJVElDQUxfU0VDVElPTl9ORVNUSU5HOw0KIA0KLSAgICByZXR1cm4gcHhUb3BPZlN0YWNrOw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBCYXNlVHlwZV90IHhQb3J0U3RhcnRTY2hlZHVsZXIoIHZvaWQgKQ0KIHsNCi0gICAgLyogU3RhcnQgdGhlIHRpbWVyIHRoYXQgZ2VuZXJhdGVzIHRoZSB0aWNrIElTUi4gIEludGVycnVwdHMgYXJlIGRpc2FibGVkDQotICAgICAqIGhlcmUgYWxyZWFkeS4gKi8NCi0gICAgcHJ2U2V0dXBUaW1lckludGVycnVwdCgpOw0KKwkvKiBTdGFydCB0aGUgdGltZXIgdGhhdCBnZW5lcmF0ZXMgdGhlIHRpY2sgSVNSLiAgSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQNCisJaGVyZSBhbHJlYWR5LiAqLw0KKwlwcnZTZXR1cFRpbWVySW50ZXJydXB0KCk7DQogDQotICAgIC8qIFN0YXJ0IHRoZSBmaXJzdCB0YXNrLiAqLw0KLSAgICB2UG9ydElTUlN0YXJ0Rmlyc3RUYXNrKCk7DQorCS8qIFN0YXJ0IHRoZSBmaXJzdCB0YXNrLiAqLw0KKwl2UG9ydElTUlN0YXJ0Rmlyc3RUYXNrKCk7CQ0KIA0KLSAgICAvKiBTaG91bGQgbm90IGdldCBoZXJlISAqLw0KLSAgICByZXR1cm4gMDsNCisJLyogU2hvdWxkIG5vdCBnZXQgaGVyZSEgKi8NCisJcmV0dXJuIDA7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQ0KIHsNCi0gICAgLyogSXQgaXMgdW5saWtlbHkgdGhhdCB0aGUgQVJNIHBvcnQgd2lsbCByZXF1aXJlIHRoaXMgZnVuY3Rpb24gYXMgdGhlcmUNCi0gICAgICogaXMgbm90aGluZyB0byByZXR1cm4gdG8uICAqLw0KKwkvKiBJdCBpcyB1bmxpa2VseSB0aGF0IHRoZSBBUk0gcG9ydCB3aWxsIHJlcXVpcmUgdGhpcyBmdW5jdGlvbiBhcyB0aGVyZQ0KKwlpcyBub3RoaW5nIHRvIHJldHVybiB0by4gICovDQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KQEAgLTE4MSw0MSArMTc5LDQzIEBACiAgKi8NCiBzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICkNCiB7DQotICAgIHVpbnQzMl90IHVsQ29tcGFyZU1hdGNoOw0KK3VpbnQzMl90IHVsQ29tcGFyZU1hdGNoOw0KK2V4dGVybiB2b2lkICggdlRpY2tJU1IgKSggdm9pZCApOw0KIA0KLSAgICBleHRlcm4gdm9pZCggdlRpY2tJU1IgKSggdm9pZCApOw0KKwkvKiBBIDFtcyB0aWNrIGRvZXMgbm90IHJlcXVpcmUgdGhlIHVzZSBvZiB0aGUgdGltZXIgcHJlc2NhbGUuICBUaGlzIGlzDQorCWRlZmF1bHRlZCB0byB6ZXJvIGJ1dCBjYW4gYmUgdXNlZCBpZiBuZWNlc3NhcnkuICovDQorCVQwX1BSID0gcG9ydFBSRVNDQUxFX1ZBTFVFOw0KIA0KLSAgICAvKiBBIDFtcyB0aWNrIGRvZXMgbm90IHJlcXVpcmUgdGhlIHVzZSBvZiB0aGUgdGltZXIgcHJlc2NhbGUuICBUaGlzIGlzDQotICAgICAqIGRlZmF1bHRlZCB0byB6ZXJvIGJ1dCBjYW4gYmUgdXNlZCBpZiBuZWNlc3NhcnkuICovDQotICAgIFQwX1BSID0gcG9ydFBSRVNDQUxFX1ZBTFVFOw0KKwkvKiBDYWxjdWxhdGUgdGhlIG1hdGNoIHZhbHVlIHJlcXVpcmVkIGZvciBvdXIgd2FudGVkIHRpY2sgcmF0ZS4gKi8NCisJdWxDb21wYXJlTWF0Y2ggPSBjb25maWdDUFVfQ0xPQ0tfSFogLyBjb25maWdUSUNLX1JBVEVfSFo7DQogDQotICAgIC8qIENhbGN1bGF0ZSB0aGUgbWF0Y2ggdmFsdWUgcmVxdWlyZWQgZm9yIG91ciB3YW50ZWQgdGljayByYXRlLiAqLw0KLSAgICB1bENvbXBhcmVNYXRjaCA9IGNvbmZpZ0NQVV9DTE9DS19IWiAvIGNvbmZpZ1RJQ0tfUkFURV9IWjsNCisJLyogUHJvdGVjdCBhZ2FpbnN0IGRpdmlkZSBieSB6ZXJvLiAgVXNpbmcgYW4gaWYoKSBzdGF0ZW1lbnQgc3RpbGwgcmVzdWx0cw0KKwlpbiBhIHdhcm5pbmcgLSBoZW5jZSB0aGUgI2lmLiAqLw0KKwkjaWYgcG9ydFBSRVNDQUxFX1ZBTFVFICE9IDANCisJew0KKwkJdWxDb21wYXJlTWF0Y2ggLz0gKCBwb3J0UFJFU0NBTEVfVkFMVUUgKyAxICk7DQorCX0NCisJI2VuZGlmDQorCVQwX01SMCA9IHVsQ29tcGFyZU1hdGNoOw0KIA0KLSAgICAvKiBQcm90ZWN0IGFnYWluc3QgZGl2aWRlIGJ5IHplcm8uICBVc2luZyBhbiBpZigpIHN0YXRlbWVudCBzdGlsbCByZXN1bHRzDQotICAgICAqIGluIGEgd2FybmluZyAtIGhlbmNlIHRoZSAjaWYuICovDQotICAgICNpZiBwb3J0UFJFU0NBTEVfVkFMVUUgIT0gMA0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHVsQ29tcGFyZU1hdGNoIC89ICggcG9ydFBSRVNDQUxFX1ZBTFVFICsgMSApOw0KLSAgICAgICAgfQ0KLSAgICAjZW5kaWYNCi0gICAgVDBfTVIwID0gdWxDb21wYXJlTWF0Y2g7DQorCS8qIEdlbmVyYXRlIHRpY2sgd2l0aCB0aW1lciAwIGNvbXBhcmUgbWF0Y2guICovDQorCVQwX01DUiA9IHBvcnRSRVNFVF9DT1VOVF9PTl9NQVRDSCB8IHBvcnRJTlRFUlJVUFRfT05fTUFUQ0g7DQogDQotICAgIC8qIEdlbmVyYXRlIHRpY2sgd2l0aCB0aW1lciAwIGNvbXBhcmUgbWF0Y2guICovDQotICAgIFQwX01DUiA9IHBvcnRSRVNFVF9DT1VOVF9PTl9NQVRDSCB8IHBvcnRJTlRFUlJVUFRfT05fTUFUQ0g7DQorCS8qIFNldHVwIHRoZSBWSUMgZm9yIHRoZSB0aW1lci4gKi8NCisJVklDSW50U2VsZWN0ICY9IH4oIHBvcnRUSU1FUl9WSUNfQ0hBTk5FTF9CSVQgKTsNCisJVklDSW50RW5hYmxlIHw9IHBvcnRUSU1FUl9WSUNfQ0hBTk5FTF9CSVQ7DQorCQ0KKwkvKiBUaGUgSVNSIGluc3RhbGxlZCBkZXBlbmRzIG9uIHdoZXRoZXIgdGhlIHByZWVtcHRpdmUgb3IgY29vcGVyYXRpdmUNCisJc2NoZWR1bGVyIGlzIGJlaW5nIHVzZWQuICovDQogDQotICAgIC8qIFNldHVwIHRoZSBWSUMgZm9yIHRoZSB0aW1lci4gKi8NCi0gICAgVklDSW50U2VsZWN0ICY9IH4oIHBvcnRUSU1FUl9WSUNfQ0hBTk5FTF9CSVQgKTsNCi0gICAgVklDSW50RW5hYmxlIHw9IHBvcnRUSU1FUl9WSUNfQ0hBTk5FTF9CSVQ7DQorCVZJQ1ZlY3RBZGRyMCA9ICggaW50MzJfdCApIHZUaWNrSVNSOw0KKwlWSUNWZWN0Q250bDAgPSBwb3J0VElNRVJfVklDX0NIQU5ORUwgfCBwb3J0VElNRVJfVklDX0VOQUJMRTsNCiANCi0gICAgLyogVGhlIElTUiBpbnN0YWxsZWQgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSBwcmVlbXB0aXZlIG9yIGNvb3BlcmF0aXZlDQotICAgICAqIHNjaGVkdWxlciBpcyBiZWluZyB1c2VkLiAqLw0KLQ0KLSAgICBWSUNWZWN0QWRkcjAgPSAoIGludDMyX3QgKSB2VGlja0lTUjsNCi0gICAgVklDVmVjdENudGwwID0gcG9ydFRJTUVSX1ZJQ19DSEFOTkVMIHwgcG9ydFRJTUVSX1ZJQ19FTkFCTEU7DQotDQotICAgIC8qIFN0YXJ0IHRoZSB0aW1lciAtIGludGVycnVwdHMgYXJlIGRpc2FibGVkIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQNCi0gICAgICogc28gaXQgaXMgb2theSB0byBkbyB0aGlzIGhlcmUuICovDQotICAgIFQwX1RDUiA9IHBvcnRFTkFCTEVfVElNRVI7DQorCS8qIFN0YXJ0IHRoZSB0aW1lciAtIGludGVycnVwdHMgYXJlIGRpc2FibGVkIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQNCisJc28gaXQgaXMgb2theSB0byBkbyB0aGlzIGhlcmUuICovDQorCVQwX1RDUiA9IHBvcnRFTkFCTEVfVElNRVI7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKw0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0dDQy9BUk03X0xQQzIwMDAvcG9ydElTUi5jIGIvcG9ydGFibGUvR0NDL0FSTTdfTFBDMjAwMC9wb3J0SVNSLmMKaW5kZXggOGM1NzIxMy4uMDgwZGMxMyAxMDA2NDQKLS0tIGEvcG9ydGFibGUvR0NDL0FSTTdfTFBDMjAwMC9wb3J0SVNSLmMKKysrIGIvcG9ydGFibGUvR0NDL0FSTTdfTFBDMjAwMC9wb3J0SVNSLmMKQEAgLTI3LDQ1ICsyNyw0NSBAQAogDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLSogQ29tcG9uZW50cyB0aGF0IGNhbiBiZSBjb21waWxlZCB0byBlaXRoZXIgQVJNIG9yIFRIVU1CIG1vZGUgYXJlDQotKiBjb250YWluZWQgaW4gcG9ydC5jICBUaGUgSVNSIHJvdXRpbmVzLCB3aGljaCBjYW4gb25seSBiZSBjb21waWxlZA0KLSogdG8gQVJNIG1vZGUsIGFyZSBjb250YWluZWQgaW4gdGhpcyBmaWxlLg0KLSotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisgKiBDb21wb25lbnRzIHRoYXQgY2FuIGJlIGNvbXBpbGVkIHRvIGVpdGhlciBBUk0gb3IgVEhVTUIgbW9kZSBhcmUNCisgKiBjb250YWluZWQgaW4gcG9ydC5jICBUaGUgSVNSIHJvdXRpbmVzLCB3aGljaCBjYW4gb25seSBiZSBjb21waWxlZA0KKyAqIHRvIEFSTSBtb2RlLCBhcmUgY29udGFpbmVkIGluIHRoaXMgZmlsZS4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qDQotICogIENoYW5nZXMgZnJvbSBWMi41LjINCi0gKg0KLSArIFRoZSBjcml0aWNhbCBzZWN0aW9uIG1hbmFnZW1lbnQgZnVuY3Rpb25zIGhhdmUgYmVlbiBjaGFuZ2VkLiAgVGhlc2Ugbm8NCi0gKyAgICBsb25nZXIgbW9kaWZ5IHRoZSBzdGFjayBhbmQgYXJlIHNhZmUgdG8gdXNlIGF0IGFsbCBvcHRpbWlzYXRpb24gbGV2ZWxzLg0KLSArICAgIFRoZSBmdW5jdGlvbnMgYXJlIG5vdyBhbHNvIHRoZSBzYW1lIGZvciBib3RoIEFSTSBhbmQgVEhVTUIgbW9kZXMuDQotICsNCi0gKyAgQ2hhbmdlcyBmcm9tIFYyLjYuMA0KLSArDQotICsgUmVtb3ZlZCB0aGUgJ3N0YXRpYycgZnJvbSB0aGUgZGVmaW5pdGlvbiBvZiB2Tm9uUHJlZW1wdGl2ZVRpY2soKSB0bw0KLSArICAgIGFsbG93IHRoZSBkZW1vIHRvIGxpbmsgd2hlbiB1c2luZyB0aGUgY29vcGVyYXRpdmUgc2NoZWR1bGVyLg0KLSArDQotICsgIENoYW5nZXMgZnJvbSBWMy4yLjQNCi0gKw0KLSArIFRoZSBhc3NlbWJsZXIgc3RhdGVtZW50cyBhcmUgbm93IGluY2x1ZGVkIGluIGEgc2luZ2xlIGFzbSBibG9jayByYXRoZXINCi0gKyAgICB0aGFuIGVhY2ggbGluZSBoYXZpbmcgaXRzIG93biBhc20gYmxvY2suDQotICovDQorCUNoYW5nZXMgZnJvbSBWMi41LjINCisNCisJKyBUaGUgY3JpdGljYWwgc2VjdGlvbiBtYW5hZ2VtZW50IGZ1bmN0aW9ucyBoYXZlIGJlZW4gY2hhbmdlZC4gIFRoZXNlIG5vDQorCSAgbG9uZ2VyIG1vZGlmeSB0aGUgc3RhY2sgYW5kIGFyZSBzYWZlIHRvIHVzZSBhdCBhbGwgb3B0aW1pc2F0aW9uIGxldmVscy4NCisJICBUaGUgZnVuY3Rpb25zIGFyZSBub3cgYWxzbyB0aGUgc2FtZSBmb3IgYm90aCBBUk0gYW5kIFRIVU1CIG1vZGVzLg0KKw0KKwlDaGFuZ2VzIGZyb20gVjIuNi4wDQorDQorCSsgUmVtb3ZlZCB0aGUgJ3N0YXRpYycgZnJvbSB0aGUgZGVmaW5pdGlvbiBvZiB2Tm9uUHJlZW1wdGl2ZVRpY2soKSB0bw0KKwkgIGFsbG93IHRoZSBkZW1vIHRvIGxpbmsgd2hlbiB1c2luZyB0aGUgY29vcGVyYXRpdmUgc2NoZWR1bGVyLg0KKw0KKwlDaGFuZ2VzIGZyb20gVjMuMi40DQorDQorCSsgVGhlIGFzc2VtYmxlciBzdGF0ZW1lbnRzIGFyZSBub3cgaW5jbHVkZWQgaW4gYSBzaW5nbGUgYXNtIGJsb2NrIHJhdGhlcg0KKwkgIHRoYW4gZWFjaCBsaW5lIGhhdmluZyBpdHMgb3duIGFzbSBibG9jay4NCisqLw0KIA0KIA0KIC8qIFNjaGVkdWxlciBpbmNsdWRlcy4gKi8NCiAjaW5jbHVkZSAiRnJlZVJUT1MuaCINCiANCiAvKiBDb25zdGFudHMgcmVxdWlyZWQgdG8gaGFuZGxlIGludGVycnVwdHMuICovDQotI2RlZmluZSBwb3J0VElNRVJfTUFUQ0hfSVNSX0JJVCAgICAoICggdWludDhfdCApIDB4MDEgKQ0KLSNkZWZpbmUgcG9ydENMRUFSX1ZJQ19JTlRFUlJVUFQgICAgKCAoIHVpbnQzMl90ICkgMCApDQorI2RlZmluZSBwb3J0VElNRVJfTUFUQ0hfSVNSX0JJVAkJKCAoIHVpbnQ4X3QgKSAweDAxICkNCisjZGVmaW5lIHBvcnRDTEVBUl9WSUNfSU5URVJSVVBUCQkoICggdWludDMyX3QgKSAwICkNCiANCiAvKiBDb25zdGFudHMgcmVxdWlyZWQgdG8gaGFuZGxlIGNyaXRpY2FsIHNlY3Rpb25zLiAqLw0KLSNkZWZpbmUgcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgICAgKCAoIHVpbnQzMl90ICkgMCApDQorI2RlZmluZSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORwkJKCAoIHVpbnQzMl90ICkgMCApDQogdm9sYXRpbGUgdWludDMyX3QgdWxDcml0aWNhbE5lc3RpbmcgPSA5OTk5VUw7DQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogSVNSIHRvIGhhbmRsZSBtYW51YWwgY29udGV4dCBzd2l0Y2hlcyAoZnJvbSBhIGNhbGwgdG8gdGFza1lJRUxEKCkpLiAqLw0KLXZvaWQgdlBvcnRZaWVsZFByb2Nlc3Nvciggdm9pZCApIF9fYXR0cmlidXRlX18oICggaW50ZXJydXB0KCAiU1dJIiApLCBuYWtlZCApICk7DQordm9pZCB2UG9ydFlpZWxkUHJvY2Vzc29yKCB2b2lkICkgX19hdHRyaWJ1dGVfXygoaW50ZXJydXB0KCJTV0kiKSwgbmFrZWQpKTsNCiANCiAvKg0KICAqIFRoZSBzY2hlZHVsZXIgY2FuIG9ubHkgYmUgc3RhcnRlZCBmcm9tIEFSTSBtb2RlLCBoZW5jZSB0aGUgaW5jbHVzaW9uIG9mIHRoaXMNCkBAIC03Niw5ICs3Niw5IEBACiANCiB2b2lkIHZQb3J0SVNSU3RhcnRGaXJzdFRhc2soIHZvaWQgKQ0KIHsNCi0gICAgLyogU2ltcGx5IHN0YXJ0IHRoZSBzY2hlZHVsZXIuICBUaGlzIGlzIGluY2x1ZGVkIGhlcmUgYXMgaXQgY2FuIG9ubHkgYmUNCi0gICAgICogY2FsbGVkIGZyb20gQVJNIG1vZGUuICovDQotICAgIHBvcnRSRVNUT1JFX0NPTlRFWFQoKTsNCisJLyogU2ltcGx5IHN0YXJ0IHRoZSBzY2hlZHVsZXIuICBUaGlzIGlzIGluY2x1ZGVkIGhlcmUgYXMgaXQgY2FuIG9ubHkgYmUNCisJY2FsbGVkIGZyb20gQVJNIG1vZGUuICovDQorCXBvcnRSRVNUT1JFX0NPTlRFWFQoKTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQpAQCAtOTIsNDggKzkyLDQ4IEBACiAgKi8NCiB2b2lkIHZQb3J0WWllbGRQcm9jZXNzb3IoIHZvaWQgKQ0KIHsNCi0gICAgLyogV2l0aGluIGFuIElSUSBJU1IgdGhlIGxpbmsgcmVnaXN0ZXIgaGFzIGFuIG9mZnNldCBmcm9tIHRoZSB0cnVlIHJldHVybg0KLSAgICAgKiBhZGRyZXNzLCBidXQgYW4gU1dJIElTUiBkb2VzIG5vdC4gIEFkZCB0aGUgb2Zmc2V0IG1hbnVhbGx5IHNvIHRoZSBzYW1lDQotICAgICAqIElTUiByZXR1cm4gY29kZSBjYW4gYmUgdXNlZCBpbiBib3RoIGNhc2VzLiAqLw0KLSAgICBfX2FzbSB2b2xhdGlsZSAoICJBREQJCUxSLCBMUiwgIzQiKTsNCisJLyogV2l0aGluIGFuIElSUSBJU1IgdGhlIGxpbmsgcmVnaXN0ZXIgaGFzIGFuIG9mZnNldCBmcm9tIHRoZSB0cnVlIHJldHVybg0KKwlhZGRyZXNzLCBidXQgYW4gU1dJIElTUiBkb2VzIG5vdC4gIEFkZCB0aGUgb2Zmc2V0IG1hbnVhbGx5IHNvIHRoZSBzYW1lDQorCUlTUiByZXR1cm4gY29kZSBjYW4gYmUgdXNlZCBpbiBib3RoIGNhc2VzLiAqLw0KKwlfX2FzbSB2b2xhdGlsZSAoICJBREQJCUxSLCBMUiwgIzQiICk7DQogDQotICAgIC8qIFBlcmZvcm0gdGhlIGNvbnRleHQgc3dpdGNoLiAgRmlyc3Qgc2F2ZSB0aGUgY29udGV4dCBvZiB0aGUgY3VycmVudCB0YXNrLiAqLw0KLSAgICBwb3J0U0FWRV9DT05URVhUKCk7DQorCS8qIFBlcmZvcm0gdGhlIGNvbnRleHQgc3dpdGNoLiAgRmlyc3Qgc2F2ZSB0aGUgY29udGV4dCBvZiB0aGUgY3VycmVudCB0YXNrLiAqLw0KKwlwb3J0U0FWRV9DT05URVhUKCk7DQogDQotICAgIC8qIEZpbmQgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgdGFzayB0aGF0IGlzIHJlYWR5IHRvIHJ1bi4gKi8NCi0gICAgX19hc20gdm9sYXRpbGUgKCAiYmwgdlRhc2tTd2l0Y2hDb250ZXh0IiApOw0KKwkvKiBGaW5kIHRoZSBoaWdoZXN0IHByaW9yaXR5IHRhc2sgdGhhdCBpcyByZWFkeSB0byBydW4uICovDQorCV9fYXNtIHZvbGF0aWxlICggImJsIHZUYXNrU3dpdGNoQ29udGV4dCIgKTsNCiANCi0gICAgLyogUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgbmV3IHRhc2suICovDQotICAgIHBvcnRSRVNUT1JFX0NPTlRFWFQoKTsNCisJLyogUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgbmV3IHRhc2suICovDQorCXBvcnRSRVNUT1JFX0NPTlRFWFQoKTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyoNCiAgKiBUaGUgSVNSIHVzZWQgZm9yIHRoZSBzY2hlZHVsZXIgdGljay4NCiAgKi8NCi12b2lkIHZUaWNrSVNSKCB2b2lkICkgX19hdHRyaWJ1dGVfXyggKCBuYWtlZCApICk7DQordm9pZCB2VGlja0lTUiggdm9pZCApIF9fYXR0cmlidXRlX18oKG5ha2VkKSk7DQogdm9pZCB2VGlja0lTUiggdm9pZCApDQogew0KLSAgICAvKiBTYXZlIHRoZSBjb250ZXh0IG9mIHRoZSBpbnRlcnJ1cHRlZCB0YXNrLiAqLw0KLSAgICBwb3J0U0FWRV9DT05URVhUKCk7DQorCS8qIFNhdmUgdGhlIGNvbnRleHQgb2YgdGhlIGludGVycnVwdGVkIHRhc2suICovDQorCXBvcnRTQVZFX0NPTlRFWFQoKTsNCiANCi0gICAgLyogSW5jcmVtZW50IHRoZSBSVE9TIHRpY2sgY291bnQsIHRoZW4gbG9vayBmb3IgdGhlIGhpZ2hlc3QgcHJpb3JpdHkNCi0gICAgICogdGFzayB0aGF0IGlzIHJlYWR5IHRvIHJ1bi4gKi8NCi0gICAgX19hc20gdm9sYXRpbGUNCi0gICAgKA0KLSAgICAgICAgIglibCB4VGFza0luY3JlbWVudFRpY2sJXHRcbiJcDQotICAgICAgICAiCWNtcCByMCwgIzAJCQkJXHRcbiJcDQotICAgICAgICAiCWJlcSBTa2lwQ29udGV4dFN3aXRjaAlcdFxuIlwNCi0gICAgICAgICIJYmwgdlRhc2tTd2l0Y2hDb250ZXh0CVx0XG4iXA0KLSAgICAgICAgIlNraXBDb250ZXh0U3dpdGNoOgkJCVx0XG4iDQotICAgICk7DQorCS8qIEluY3JlbWVudCB0aGUgUlRPUyB0aWNrIGNvdW50LCB0aGVuIGxvb2sgZm9yIHRoZSBoaWdoZXN0IHByaW9yaXR5DQorCXRhc2sgdGhhdCBpcyByZWFkeSB0byBydW4uICovDQorCV9fYXNtIHZvbGF0aWxlDQorCSgNCisJCSIJYmwgeFRhc2tJbmNyZW1lbnRUaWNrCVx0XG4iIFwNCisJCSIJY21wIHIwLCAjMAkJCQlcdFxuIiBcDQorCQkiCWJlcSBTa2lwQ29udGV4dFN3aXRjaAlcdFxuIiBcDQorCQkiCWJsIHZUYXNrU3dpdGNoQ29udGV4dAlcdFxuIiBcDQorCQkiU2tpcENvbnRleHRTd2l0Y2g6CQkJXHRcbiINCisJKTsNCiANCi0gICAgLyogUmVhZHkgZm9yIHRoZSBuZXh0IGludGVycnVwdC4gKi8NCi0gICAgVDBfSVIgPSBwb3J0VElNRVJfTUFUQ0hfSVNSX0JJVDsNCi0gICAgVklDVmVjdEFkZHIgPSBwb3J0Q0xFQVJfVklDX0lOVEVSUlVQVDsNCisJLyogUmVhZHkgZm9yIHRoZSBuZXh0IGludGVycnVwdC4gKi8NCisJVDBfSVIgPSBwb3J0VElNRVJfTUFUQ0hfSVNSX0JJVDsNCisJVklDVmVjdEFkZHIgPSBwb3J0Q0xFQVJfVklDX0lOVEVSUlVQVDsNCiANCi0gICAgLyogUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgbmV3IHRhc2suICovDQotICAgIHBvcnRSRVNUT1JFX0NPTlRFWFQoKTsNCisJLyogUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgbmV3IHRhc2suICovDQorCXBvcnRSRVNUT1JFX0NPTlRFWFQoKTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQpAQCAtMTQ1LDcxICsxNDUsNzEgQEAKICAqLw0KICNpZmRlZiBUSFVNQl9JTlRFUldPUksNCiANCi0gICAgdm9pZCB2UG9ydERpc2FibGVJbnRlcnJ1cHRzRnJvbVRodW1iKCB2b2lkICkgX19hdHRyaWJ1dGVfXyggKCBuYWtlZCApICk7DQotICAgIHZvaWQgdlBvcnRFbmFibGVJbnRlcnJ1cHRzRnJvbVRodW1iKCB2b2lkICkgX19hdHRyaWJ1dGVfXyggKCBuYWtlZCApICk7DQorCXZvaWQgdlBvcnREaXNhYmxlSW50ZXJydXB0c0Zyb21UaHVtYiggdm9pZCApIF9fYXR0cmlidXRlX18gKChuYWtlZCkpOw0KKwl2b2lkIHZQb3J0RW5hYmxlSW50ZXJydXB0c0Zyb21UaHVtYiggdm9pZCApIF9fYXR0cmlidXRlX18gKChuYWtlZCkpOw0KIA0KLSAgICB2b2lkIHZQb3J0RGlzYWJsZUludGVycnVwdHNGcm9tVGh1bWIoIHZvaWQgKQ0KLSAgICB7DQotICAgICAgICBfX2FzbSB2b2xhdGlsZSAoDQotICAgICAgICAgICAgIlNUTURCCVNQISwge1IwfQkJXG5cdCIvKiBQdXNoIFIwLgkJCQkJCQkJCSovDQotICAgICAgICAgICAgIk1SUwlSMCwgQ1BTUgkJXG5cdCIvKiBHZXQgQ1BTUi4JCQkJCQkJCSovDQotICAgICAgICAgICAgIk9SUglSMCwgUjAsICMweEMwCVxuXHQiLyogRGlzYWJsZSBJUlEsIEZJUS4JCQkJCQkqLw0KLSAgICAgICAgICAgICJNU1IJQ1BTUiwgUjAJCVxuXHQiLyogV3JpdGUgYmFjayBtb2RpZmllZCB2YWx1ZS4JCQkJKi8NCi0gICAgICAgICAgICAiTERNSUEJU1AhLCB7UjB9CQlcblx0Ii8qIFBvcCBSMC4JCQkJCQkJCQkqLw0KLSAgICAgICAgICAgICJCWAkJUjE0Iik7ICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIGJhY2sgdG8gdGh1bWIuCQkJCQkqLw0KLSAgICB9DQorCXZvaWQgdlBvcnREaXNhYmxlSW50ZXJydXB0c0Zyb21UaHVtYiggdm9pZCApDQorCXsNCisJCV9fYXNtIHZvbGF0aWxlICgNCisJCQkiU1RNREIJU1AhLCB7UjB9CQlcblx0IgkvKiBQdXNoIFIwLgkJCQkJCQkJCSovDQorCQkJIk1SUwlSMCwgQ1BTUgkJXG5cdCIJLyogR2V0IENQU1IuCQkJCQkJCQkqLw0KKwkJCSJPUlIJUjAsIFIwLCAjMHhDMAlcblx0IgkvKiBEaXNhYmxlIElSUSwgRklRLgkJCQkJCSovDQorCQkJIk1TUglDUFNSLCBSMAkJXG5cdCIJLyogV3JpdGUgYmFjayBtb2RpZmllZCB2YWx1ZS4JCQkJKi8NCisJCQkiTERNSUEJU1AhLCB7UjB9CQlcblx0IgkvKiBQb3AgUjAuCQkJCQkJCQkJKi8NCisJCQkiQlgJCVIxNCIgKTsJCQkJCS8qIFJldHVybiBiYWNrIHRvIHRodW1iLgkJCQkJKi8NCisJfQ0KIA0KLSAgICB2b2lkIHZQb3J0RW5hYmxlSW50ZXJydXB0c0Zyb21UaHVtYiggdm9pZCApDQotICAgIHsNCi0gICAgICAgIF9fYXNtIHZvbGF0aWxlICgNCi0gICAgICAgICAgICAiU1RNREIJU1AhLCB7UjB9CQlcblx0Ii8qIFB1c2ggUjAuCQkJCQkJCQkJKi8NCi0gICAgICAgICAgICAiTVJTCVIwLCBDUFNSCQlcblx0Ii8qIEdldCBDUFNSLgkJCQkJCQkJKi8NCi0gICAgICAgICAgICAiQklDCVIwLCBSMCwgIzB4QzAJXG5cdCIvKiBFbmFibGUgSVJRLCBGSVEuCQkJCQkJCSovDQotICAgICAgICAgICAgIk1TUglDUFNSLCBSMAkJXG5cdCIvKiBXcml0ZSBiYWNrIG1vZGlmaWVkIHZhbHVlLgkJCQkqLw0KLSAgICAgICAgICAgICJMRE1JQQlTUCEsIHtSMH0JCVxuXHQiLyogUG9wIFIwLgkJCQkJCQkJCSovDQotICAgICAgICAgICAgIkJYCQlSMTQiKTsgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gYmFjayB0byB0aHVtYi4JCQkJCSovDQotICAgIH0NCisJdm9pZCB2UG9ydEVuYWJsZUludGVycnVwdHNGcm9tVGh1bWIoIHZvaWQgKQ0KKwl7DQorCQlfX2FzbSB2b2xhdGlsZSAoDQorCQkJIlNUTURCCVNQISwge1IwfQkJXG5cdCIJLyogUHVzaCBSMC4JCQkJCQkJCQkqLw0KKwkJCSJNUlMJUjAsIENQU1IJCVxuXHQiCS8qIEdldCBDUFNSLgkJCQkJCQkJKi8NCisJCQkiQklDCVIwLCBSMCwgIzB4QzAJXG5cdCIJLyogRW5hYmxlIElSUSwgRklRLgkJCQkJCQkqLw0KKwkJCSJNU1IJQ1BTUiwgUjAJCVxuXHQiCS8qIFdyaXRlIGJhY2sgbW9kaWZpZWQgdmFsdWUuCQkJCSovDQorCQkJIkxETUlBCVNQISwge1IwfQkJXG5cdCIJLyogUG9wIFIwLgkJCQkJCQkJCSovDQorCQkJIkJYCQlSMTQiICk7CQkJCQkvKiBSZXR1cm4gYmFjayB0byB0aHVtYi4JCQkJCSovDQorCX0NCiANCiAjZW5kaWYgLyogVEhVTUJfSU5URVJXT1JLICovDQogDQogLyogVGhlIGNvZGUgZ2VuZXJhdGVkIGJ5IHRoZSBHQ0MgY29tcGlsZXIgdXNlcyB0aGUgc3RhY2sgaW4gZGlmZmVyZW50IHdheXMgYXQNCi0gKiBkaWZmZXJlbnQgb3B0aW1pc2F0aW9uIGxldmVscy4gIFRoZSBpbnRlcnJ1cHQgZmxhZ3MgY2FuIHRoZXJlZm9yZSBub3QgYWx3YXlzDQotICogYmUgc2F2ZWQgdG8gdGhlIHN0YWNrLiAgSW5zdGVhZCB0aGUgY3JpdGljYWwgc2VjdGlvbiBuZXN0aW5nIGxldmVsIGlzIHN0b3JlZA0KLSAqIGluIGEgdmFyaWFibGUsIHdoaWNoIGlzIHRoZW4gc2F2ZWQgYXMgcGFydCBvZiB0aGUgc3RhY2sgY29udGV4dC4gKi8NCitkaWZmZXJlbnQgb3B0aW1pc2F0aW9uIGxldmVscy4gIFRoZSBpbnRlcnJ1cHQgZmxhZ3MgY2FuIHRoZXJlZm9yZSBub3QgYWx3YXlzDQorYmUgc2F2ZWQgdG8gdGhlIHN0YWNrLiAgSW5zdGVhZCB0aGUgY3JpdGljYWwgc2VjdGlvbiBuZXN0aW5nIGxldmVsIGlzIHN0b3JlZA0KK2luIGEgdmFyaWFibGUsIHdoaWNoIGlzIHRoZW4gc2F2ZWQgYXMgcGFydCBvZiB0aGUgc3RhY2sgY29udGV4dC4gKi8NCiB2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCggdm9pZCApDQogew0KLSAgICAvKiBEaXNhYmxlIGludGVycnVwdHMgYXMgcGVyIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAgIF9fYXNtIHZvbGF0aWxlICgNCi0gICAgICAgICJTVE1EQglTUCEsIHtSMH0JCQlcblx0Ii8qIFB1c2ggUjAuCQkJCQkJCQkqLw0KLSAgICAgICAgIk1SUwlSMCwgQ1BTUgkJCVxuXHQiLyogR2V0IENQU1IuCQkJCQkJCSovDQotICAgICAgICAiT1JSCVIwLCBSMCwgIzB4QzAJCVxuXHQiLyogRGlzYWJsZSBJUlEsIEZJUS4JCQkJCSovDQotICAgICAgICAiTVNSCUNQU1IsIFIwCQkJXG5cdCIvKiBXcml0ZSBiYWNrIG1vZGlmaWVkIHZhbHVlLgkJCSovDQotICAgICAgICAiTERNSUEJU1AhLCB7UjB9Iik7ICAgICAgLyogUG9wIFIwLgkJCQkJCQkJKi8NCisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIGFzIHBlciBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7IAkJCQkJCQkqLw0KKwlfX2FzbSB2b2xhdGlsZSAoDQorCQkiU1RNREIJU1AhLCB7UjB9CQkJXG5cdCIJLyogUHVzaCBSMC4JCQkJCQkJCSovDQorCQkiTVJTCVIwLCBDUFNSCQkJXG5cdCIJLyogR2V0IENQU1IuCQkJCQkJCSovDQorCQkiT1JSCVIwLCBSMCwgIzB4QzAJCVxuXHQiCS8qIERpc2FibGUgSVJRLCBGSVEuCQkJCQkqLw0KKwkJIk1TUglDUFNSLCBSMAkJCVxuXHQiCS8qIFdyaXRlIGJhY2sgbW9kaWZpZWQgdmFsdWUuCQkJKi8NCisJCSJMRE1JQQlTUCEsIHtSMH0iICk7CQkJCS8qIFBvcCBSMC4JCQkJCQkJCSovDQogDQotICAgIC8qIE5vdyBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB1bENyaXRpY2FsTmVzdGluZyBjYW4gYmUgYWNjZXNzZWQNCi0gICAgICogZGlyZWN0bHkuICBJbmNyZW1lbnQgdWxDcml0aWNhbE5lc3RpbmcgdG8ga2VlcCBhIGNvdW50IG9mIGhvdyBtYW55IHRpbWVzDQotICAgICAqIHBvcnRFTlRFUl9DUklUSUNBTCgpIGhhcyBiZWVuIGNhbGxlZC4gKi8NCi0gICAgdWxDcml0aWNhbE5lc3RpbmcrKzsNCisJLyogTm93IGludGVycnVwdHMgYXJlIGRpc2FibGVkIHVsQ3JpdGljYWxOZXN0aW5nIGNhbiBiZSBhY2Nlc3NlZA0KKwlkaXJlY3RseS4gIEluY3JlbWVudCB1bENyaXRpY2FsTmVzdGluZyB0byBrZWVwIGEgY291bnQgb2YgaG93IG1hbnkgdGltZXMNCisJcG9ydEVOVEVSX0NSSVRJQ0FMKCkgaGFzIGJlZW4gY2FsbGVkLiAqLw0KKwl1bENyaXRpY2FsTmVzdGluZysrOw0KIH0NCiANCiB2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICkNCiB7DQotICAgIGlmKCB1bENyaXRpY2FsTmVzdGluZyA+IHBvcnROT19DUklUSUNBTF9ORVNUSU5HICkNCi0gICAgew0KLSAgICAgICAgLyogRGVjcmVtZW50IHRoZSBuZXN0aW5nIGNvdW50IGFzIHdlIGFyZSBsZWF2aW5nIGEgY3JpdGljYWwgc2VjdGlvbi4gKi8NCi0gICAgICAgIHVsQ3JpdGljYWxOZXN0aW5nLS07DQorCWlmKCB1bENyaXRpY2FsTmVzdGluZyA+IHBvcnROT19DUklUSUNBTF9ORVNUSU5HICkNCisJew0KKwkJLyogRGVjcmVtZW50IHRoZSBuZXN0aW5nIGNvdW50IGFzIHdlIGFyZSBsZWF2aW5nIGEgY3JpdGljYWwgc2VjdGlvbi4gKi8NCisJCXVsQ3JpdGljYWxOZXN0aW5nLS07DQogDQotICAgICAgICAvKiBJZiB0aGUgbmVzdGluZyBsZXZlbCBoYXMgcmVhY2hlZCB6ZXJvIHRoZW4gaW50ZXJydXB0cyBzaG91bGQgYmUNCi0gICAgICAgICAqIHJlLWVuYWJsZWQuICovDQotICAgICAgICBpZiggdWxDcml0aWNhbE5lc3RpbmcgPT0gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIC8qIEVuYWJsZSBpbnRlcnJ1cHRzIGFzIHBlciBwb3J0RVhJVF9DUklUSUNBTCgpLgkJCQkJKi8NCi0gICAgICAgICAgICBfX2FzbSB2b2xhdGlsZSAoDQotICAgICAgICAgICAgICAgICJTVE1EQglTUCEsIHtSMH0JCVxuXHQiLyogUHVzaCBSMC4JCQkJCQkqLw0KLSAgICAgICAgICAgICAgICAiTVJTCVIwLCBDUFNSCQlcblx0Ii8qIEdldCBDUFNSLgkJCQkJKi8NCi0gICAgICAgICAgICAgICAgIkJJQwlSMCwgUjAsICMweEMwCVxuXHQiLyogRW5hYmxlIElSUSwgRklRLgkJCQkqLw0KLSAgICAgICAgICAgICAgICAiTVNSCUNQU1IsIFIwCQlcblx0Ii8qIFdyaXRlIGJhY2sgbW9kaWZpZWQgdmFsdWUuCSovDQotICAgICAgICAgICAgICAgICJMRE1JQQlTUCEsIHtSMH0iKTsgICAgIC8qIFBvcCBSMC4JCQkJCQkqLw0KLSAgICAgICAgfQ0KLSAgICB9DQorCQkvKiBJZiB0aGUgbmVzdGluZyBsZXZlbCBoYXMgcmVhY2hlZCB6ZXJvIHRoZW4gaW50ZXJydXB0cyBzaG91bGQgYmUNCisJCXJlLWVuYWJsZWQuICovDQorCQlpZiggdWxDcml0aWNhbE5lc3RpbmcgPT0gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgKQ0KKwkJew0KKwkJCS8qIEVuYWJsZSBpbnRlcnJ1cHRzIGFzIHBlciBwb3J0RVhJVF9DUklUSUNBTCgpLgkJCQkJKi8NCisJCQlfX2FzbSB2b2xhdGlsZSAoDQorCQkJCSJTVE1EQglTUCEsIHtSMH0JCVxuXHQiCS8qIFB1c2ggUjAuCQkJCQkJKi8NCisJCQkJIk1SUwlSMCwgQ1BTUgkJXG5cdCIJLyogR2V0IENQU1IuCQkJCQkqLw0KKwkJCQkiQklDCVIwLCBSMCwgIzB4QzAJXG5cdCIJLyogRW5hYmxlIElSUSwgRklRLgkJCQkqLw0KKwkJCQkiTVNSCUNQU1IsIFIwCQlcblx0IgkvKiBXcml0ZSBiYWNrIG1vZGlmaWVkIHZhbHVlLgkqLw0KKwkJCQkiTERNSUEJU1AhLCB7UjB9IiApOwkJCS8qIFBvcCBSMC4JCQkJCQkqLw0KKwkJfQ0KKwl9DQogfQ0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0dDQy9BUk03X0xQQzIwMDAvcG9ydG1hY3JvLmggYi9wb3J0YWJsZS9HQ0MvQVJNN19MUEMyMDAwL3BvcnRtYWNyby5oCmluZGV4IDhiMDIwMjEuLjQ4NTkzOTMgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0dDQy9BUk03X0xQQzIwMDAvcG9ydG1hY3JvLmgKKysrIGIvcG9ydGFibGUvR0NDL0FSTTdfTFBDMjAwMC9wb3J0bWFjcm8uaApAQCAtMjYsMTEgKzI2LDExIEBACiAgKi8NCiANCiAjaWZuZGVmIFBPUlRNQUNST19IDQotICAgICNkZWZpbmUgUE9SVE1BQ1JPX0gNCisjZGVmaW5lIFBPUlRNQUNST19IDQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgZXh0ZXJuICJDIiB7DQotICAgICNlbmRpZg0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgKiBQb3J0IHNwZWNpZmljIGRlZmluaXRpb25zLg0KQEAgLTQzLDMyICs0MywzMiBAQAogICovDQogDQogLyogVHlwZSBkZWZpbml0aW9ucy4gKi8NCi0gICAgI2RlZmluZSBwb3J0Q0hBUiAgICAgICAgICBjaGFyDQotICAgICNkZWZpbmUgcG9ydEZMT0FUICAgICAgICAgZmxvYXQNCi0gICAgI2RlZmluZSBwb3J0RE9VQkxFICAgICAgICBkb3VibGUNCi0gICAgI2RlZmluZSBwb3J0TE9ORyAgICAgICAgICBsb25nDQotICAgICNkZWZpbmUgcG9ydFNIT1JUICAgICAgICAgc2hvcnQNCi0gICAgI2RlZmluZSBwb3J0U1RBQ0tfVFlQRSAgICB1aW50MzJfdA0KLSAgICAjZGVmaW5lIHBvcnRCQVNFX1RZUEUgICAgIHBvcnRMT05HDQorI2RlZmluZSBwb3J0Q0hBUgkJY2hhcg0KKyNkZWZpbmUgcG9ydEZMT0FUCQlmbG9hdA0KKyNkZWZpbmUgcG9ydERPVUJMRQkJZG91YmxlDQorI2RlZmluZSBwb3J0TE9ORwkJbG9uZw0KKyNkZWZpbmUgcG9ydFNIT1JUCQlzaG9ydA0KKyNkZWZpbmUgcG9ydFNUQUNLX1RZUEUJdWludDMyX3QNCisjZGVmaW5lIHBvcnRCQVNFX1RZUEUJcG9ydExPTkcNCiANCi0gICAgdHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSAgIFN0YWNrVHlwZV90Ow0KLSAgICB0eXBlZGVmIGxvbmcgICAgICAgICAgICAgQmFzZVR5cGVfdDsNCi0gICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nICAgIFVCYXNlVHlwZV90Ow0KK3R5cGVkZWYgcG9ydFNUQUNLX1RZUEUgU3RhY2tUeXBlX3Q7DQordHlwZWRlZiBsb25nIEJhc2VUeXBlX3Q7DQordHlwZWRlZiB1bnNpZ25lZCBsb25nIFVCYXNlVHlwZV90Ow0KIA0KLSAgICAjaWYgKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KLSAgICAgICAgdHlwZWRlZiB1aW50MTZfdCAgICAgVGlja1R5cGVfdDsNCi0gICAgICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmYNCi0gICAgI2Vsc2UNCi0gICAgICAgIHR5cGVkZWYgdWludDMyX3QgICAgIFRpY2tUeXBlX3Q7DQotICAgICAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQotICAgICNlbmRpZg0KKyNpZiggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCisJdHlwZWRlZiB1aW50MTZfdCBUaWNrVHlwZV90Ow0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQorI2Vsc2UNCisJdHlwZWRlZiB1aW50MzJfdCBUaWNrVHlwZV90Ow0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQorI2VuZGlmDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogQXJjaGl0ZWN0dXJlIHNwZWNpZmljcy4gKi8NCi0gICAgI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RIICAgICAgKCAtMSApDQotICAgICNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TICAgICggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQotICAgICNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UICAgIDgNCi0gICAgI2RlZmluZSBwb3J0Tk9QKCkgICAgX19hc20gdm9sYXRpbGUgKCAiTk9QIiApOw0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJCSggLTEgKQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TCQkJKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCisjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVAkJCTgNCisjZGVmaW5lIHBvcnROT1AoKQkJCQkJX19hc20gdm9sYXRpbGUgKCAiTk9QIiApOw0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIA0KQEAgLTgxLDkyICs4MSw5MiBAQAogICogVEhVTUIgbW9kZSBjb2RlIHdpbGwgcmVzdWx0IGluIGEgY29tcGlsZSB0aW1lIGVycm9yLg0KICAqLw0KIA0KLSAgICAjZGVmaW5lIHBvcnRSRVNUT1JFX0NPTlRFWFQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgZXh0ZXJuIHZvbGF0aWxlIHZvaWQgKiB2b2xhdGlsZSBweEN1cnJlbnRUQ0I7ICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgZXh0ZXJuIHZvbGF0aWxlIHVpbnQzMl90IHVsQ3JpdGljYWxOZXN0aW5nOyAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgLyogU2V0IHRoZSBMUiB0byB0aGUgdGFzayBzdGFjay4gKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgX19hc20gdm9sYXRpbGUgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICJMRFIJCVIwLCA9cHhDdXJyZW50VENCCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAiTERSCQlSMCwgW1IwXQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAiTERSCQlMUiwgW1IwXQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBUaGUgY3JpdGljYWwgbmVzdGluZyBkZXB0aCBpcyB0aGUgZmlyc3QgaXRlbSBvbiB0aGUgc3RhY2suICovIFwNCi0gICAgICAgICAgICAvKiBMb2FkIGl0IGludG8gdGhlIHVsQ3JpdGljYWxOZXN0aW5nIHZhcmlhYmxlLiAqLyAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAiTERSCQlSMCwgPXVsQ3JpdGljYWxOZXN0aW5nCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICJMRE1GRAlMUiEsIHtSMX0JCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICJTVFIJCVIxLCBbUjBdCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIEdldCB0aGUgU1BTUiBmcm9tIHRoZSBzdGFjay4gKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICJMRE1GRAlMUiEsIHtSMH0JCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICJNU1IJCVNQU1IsIFIwCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIFJlc3RvcmUgYWxsIHN5c3RlbSBtb2RlIHJlZ2lzdGVycyBmb3IgdGhlIHRhc2suICovICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICJMRE1GRAlMUiwge1IwLVIxNH1eCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICJOT1AJCQkJCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIFJlc3RvcmUgdGhlIHJldHVybiBhZGRyZXNzLiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICJMRFIJCUxSLCBbTFIsICMrNjBdCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogQW5kIHJldHVybiAtIGNvcnJlY3RpbmcgdGhlIG9mZnNldCBpbiB0aGUgTFIgdG8gb2J0YWluIHRoZSAqLyBcDQotICAgICAgICAgICAgLyogY29ycmVjdCBhZGRyZXNzLiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgIlNVQlMJUEMsIExSLCAjNAkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAoIHZvaWQgKSB1bENyaXRpY2FsTmVzdGluZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAoIHZvaWQgKSBweEN1cnJlbnRUQ0I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIH0NCisjZGVmaW5lIHBvcnRSRVNUT1JFX0NPTlRFWFQoKQkJCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJCQlcDQorZXh0ZXJuIHZvbGF0aWxlIHZvaWQgKiB2b2xhdGlsZSBweEN1cnJlbnRUQ0I7CQkJCQkJCVwNCitleHRlcm4gdm9sYXRpbGUgdWludDMyX3QgdWxDcml0aWNhbE5lc3Rpbmc7CQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBTZXQgdGhlIExSIHRvIHRoZSB0YXNrIHN0YWNrLiAqLwkJCQkJCQkJCVwNCisJX19hc20gdm9sYXRpbGUgKAkJCQkJCQkJCQkJCQlcDQorCSJMRFIJCVIwLCA9cHhDdXJyZW50VENCCQkJCQkJCQlcblx0IglcDQorCSJMRFIJCVIwLCBbUjBdCQkJCQkJCQkJCVxuXHQiCVwNCisJIkxEUgkJTFIsIFtSMF0JCQkJCQkJCQkJXG5cdCIJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogVGhlIGNyaXRpY2FsIG5lc3RpbmcgZGVwdGggaXMgdGhlIGZpcnN0IGl0ZW0gb24gdGhlIHN0YWNrLiAqLwlcDQorCS8qIExvYWQgaXQgaW50byB0aGUgdWxDcml0aWNhbE5lc3RpbmcgdmFyaWFibGUuICovCQkJCQlcDQorCSJMRFIJCVIwLCA9dWxDcml0aWNhbE5lc3RpbmcJCQkJCQkJXG5cdCIJXA0KKwkiTERNRkQJTFIhLCB7UjF9CQkJCQkJCQkJCQlcblx0IglcDQorCSJTVFIJCVIxLCBbUjBdCQkJCQkJCQkJCVxuXHQiCVwNCisJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIEdldCB0aGUgU1BTUiBmcm9tIHRoZSBzdGFjay4gKi8JCQkJCQkJCQlcDQorCSJMRE1GRAlMUiEsIHtSMH0JCQkJCQkJCQkJCVxuXHQiCVwNCisJIk1TUgkJU1BTUiwgUjAJCQkJCQkJCQkJXG5cdCIJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogUmVzdG9yZSBhbGwgc3lzdGVtIG1vZGUgcmVnaXN0ZXJzIGZvciB0aGUgdGFzay4gKi8JCQkJXA0KKwkiTERNRkQJTFIsIHtSMC1SMTR9XgkJCQkJCQkJCQlcblx0IglcDQorCSJOT1AJCQkJCQkJCQkJCQkJCVxuXHQiCVwNCisJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIFJlc3RvcmUgdGhlIHJldHVybiBhZGRyZXNzLiAqLwkJCQkJCQkJCVwNCisJIkxEUgkJTFIsIFtMUiwgIys2MF0JCQkJCQkJCQlcblx0IglcDQorCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBBbmQgcmV0dXJuIC0gY29ycmVjdGluZyB0aGUgb2Zmc2V0IGluIHRoZSBMUiB0byBvYnRhaW4gdGhlICovCVwNCisJLyogY29ycmVjdCBhZGRyZXNzLiAqLwkJCQkJCQkJCQkJCVwNCisJIlNVQlMJUEMsIExSLCAjNAkJCQkJCQkJCQkJXG5cdCIJXA0KKwkpOwkJCQkJCQkJCQkJCQkJCQkJXA0KKwkoIHZvaWQgKSB1bENyaXRpY2FsTmVzdGluZzsJCQkJCQkJCQkJCVwNCisJKCB2b2lkICkgcHhDdXJyZW50VENCOwkJCQkJCQkJCQkJCVwNCit9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQotICAgICNkZWZpbmUgcG9ydFNBVkVfQ09OVEVYVCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBleHRlcm4gdm9sYXRpbGUgdm9pZCAqIHZvbGF0aWxlIHB4Q3VycmVudFRDQjsgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBleHRlcm4gdm9sYXRpbGUgdWludDMyX3QgdWxDcml0aWNhbE5lc3Rpbmc7ICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAvKiBQdXNoIFIwIGFzIHdlIGFyZSBnb2luZyB0byB1c2UgdGhlIHJlZ2lzdGVyLiAqLyAgICAgICAgICAgICAgICBcDQotICAgICAgICBfX2FzbSB2b2xhdGlsZSAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgIlNUTURCCVNQISwge1IwfQkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogU2V0IFIwIHRvIHBvaW50IHRvIHRoZSB0YXNrIHN0YWNrIHBvaW50ZXIuICovICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgIlNUTURCCVNQLHtTUH1eCQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAiTk9QCQkJCQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAiU1VCCVNQLCBTUCwgIzQJCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICJMRE1JQQlTUCEse1IwfQkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogUHVzaCB0aGUgcmV0dXJuIGFkZHJlc3Mgb250byB0aGUgc3RhY2suICovICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgIlNUTURCCVIwISwge0xSfQkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogTm93IHdlIGhhdmUgc2F2ZWQgTFIgd2UgY2FuIHVzZSBpdCBpbnN0ZWFkIG9mIFIwLiAqLyAgICAgICBcDQotICAgICAgICAgICAgIk1PVglMUiwgUjAJCQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBQb3AgUjAgc28gd2UgY2FuIHNhdmUgaXQgb250byB0aGUgc3lzdGVtIG1vZGUgc3RhY2suICovICAgIFwNCi0gICAgICAgICAgICAiTERNSUEJU1AhLCB7UjB9CQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBQdXNoIGFsbCB0aGUgc3lzdGVtIG1vZGUgcmVnaXN0ZXJzIG9udG8gdGhlIHRhc2sgc3RhY2suICovIFwNCi0gICAgICAgICAgICAiU1RNREIJTFIse1IwLUxSfV4JCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICJOT1AJCQkJCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICJTVUIJTFIsIExSLCAjNjAJCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIFB1c2ggdGhlIFNQU1Igb250byB0aGUgdGFzayBzdGFjay4gKi8gICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICJNUlMJUjAsIFNQU1IJCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICJTVE1EQglMUiEsIHtSMH0JCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICJMRFIJUjAsID11bENyaXRpY2FsTmVzdGluZwkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgIkxEUglSMCwgW1IwXQkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgIlNUTURCCUxSISwge1IwfQkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogU3RvcmUgdGhlIG5ldyB0b3Agb2Ygc3RhY2sgZm9yIHRoZSB0YXNrLiAqLyAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgIkxEUglSMCwgPXB4Q3VycmVudFRDQgkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICJMRFIJUjAsIFtSMF0JCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICJTVFIJTFIsIFtSMF0JCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgKCB2b2lkICkgdWxDcml0aWNhbE5lc3Rpbmc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgKCB2b2lkICkgcHhDdXJyZW50VENCOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB9DQorI2RlZmluZSBwb3J0U0FWRV9DT05URVhUKCkJCQkJCQkJCQkJCQlcDQorewkJCQkJCQkJCQkJCQkJCQkJCVwNCitleHRlcm4gdm9sYXRpbGUgdm9pZCAqIHZvbGF0aWxlIHB4Q3VycmVudFRDQjsJCQkJCQkJXA0KK2V4dGVybiB2b2xhdGlsZSB1aW50MzJfdCB1bENyaXRpY2FsTmVzdGluZzsJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIFB1c2ggUjAgYXMgd2UgYXJlIGdvaW5nIHRvIHVzZSB0aGUgcmVnaXN0ZXIuICovCQkJCQlcDQorCV9fYXNtIHZvbGF0aWxlICgJCQkJCQkJCQkJCQkJXA0KKwkiU1RNREIJU1AhLCB7UjB9CQkJCQkJCQkJCQlcblx0IglcDQorCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBTZXQgUjAgdG8gcG9pbnQgdG8gdGhlIHRhc2sgc3RhY2sgcG9pbnRlci4gKi8JCQkJCVwNCisJIlNUTURCCVNQLHtTUH1eCQkJCQkJCQkJCQlcblx0IglcDQorCSJOT1AJCQkJCQkJCQkJCQkJCVxuXHQiCVwNCisJIlNVQglTUCwgU1AsICM0CQkJCQkJCQkJCQlcblx0IglcDQorCSJMRE1JQQlTUCEse1IwfQkJCQkJCQkJCQkJXG5cdCIJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogUHVzaCB0aGUgcmV0dXJuIGFkZHJlc3Mgb250byB0aGUgc3RhY2suICovCQkJCQkJXA0KKwkiU1RNREIJUjAhLCB7TFJ9CQkJCQkJCQkJCQlcblx0IglcDQorCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBOb3cgd2UgaGF2ZSBzYXZlZCBMUiB3ZSBjYW4gdXNlIGl0IGluc3RlYWQgb2YgUjAuICovCQkJCVwNCisJIk1PVglMUiwgUjAJCQkJCQkJCQkJCQlcblx0IglcDQorCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBQb3AgUjAgc28gd2UgY2FuIHNhdmUgaXQgb250byB0aGUgc3lzdGVtIG1vZGUgc3RhY2suICovCQkJXA0KKwkiTERNSUEJU1AhLCB7UjB9CQkJCQkJCQkJCQlcblx0IglcDQorCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBQdXNoIGFsbCB0aGUgc3lzdGVtIG1vZGUgcmVnaXN0ZXJzIG9udG8gdGhlIHRhc2sgc3RhY2suICovCQlcDQorCSJTVE1EQglMUix7UjAtTFJ9XgkJCQkJCQkJCQkJXG5cdCIJXA0KKwkiTk9QCQkJCQkJCQkJCQkJCQlcblx0IglcDQorCSJTVUIJTFIsIExSLCAjNjAJCQkJCQkJCQkJCVxuXHQiCVwNCisJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIFB1c2ggdGhlIFNQU1Igb250byB0aGUgdGFzayBzdGFjay4gKi8JCQkJCQkJXA0KKwkiTVJTCVIwLCBTUFNSCQkJCQkJCQkJCQlcblx0IglcDQorCSJTVE1EQglMUiEsIHtSMH0JCQkJCQkJCQkJCVxuXHQiCVwNCisJCQkJCQkJCQkJCQkJCQkJCQlcDQorCSJMRFIJUjAsID11bENyaXRpY2FsTmVzdGluZwkJCQkJCQkJXG5cdCIJXA0KKwkiTERSCVIwLCBbUjBdCQkJCQkJCQkJCQlcblx0IglcDQorCSJTVE1EQglMUiEsIHtSMH0JCQkJCQkJCQkJCVxuXHQiCVwNCisJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIFN0b3JlIHRoZSBuZXcgdG9wIG9mIHN0YWNrIGZvciB0aGUgdGFzay4gKi8JCQkJCQlcDQorCSJMRFIJUjAsID1weEN1cnJlbnRUQ0IJCQkJCQkJCQlcblx0IglcDQorCSJMRFIJUjAsIFtSMF0JCQkJCQkJCQkJCVxuXHQiCVwNCisJIlNUUglMUiwgW1IwXQkJCQkJCQkJCQkJXG5cdCIJXA0KKwkpOwkJCQkJCQkJCQkJCQkJCQkJXA0KKwkoIHZvaWQgKSB1bENyaXRpY2FsTmVzdGluZzsJCQkJCQkJCQkJCVwNCisJKCB2b2lkICkgcHhDdXJyZW50VENCOwkJCQkJCQkJCQkJCVwNCit9DQogDQotICAgIGV4dGVybiB2b2lkIHZUYXNrU3dpdGNoQ29udGV4dCggdm9pZCApOw0KLSAgICAjZGVmaW5lIHBvcnRZSUVMRF9GUk9NX0lTUigpICAgIHZUYXNrU3dpdGNoQ29udGV4dCgpDQotICAgICNkZWZpbmUgcG9ydFlJRUxEKCkgICAgICAgICAgICAgX19hc20gdm9sYXRpbGUgKCAiU1dJIDAiICkNCitleHRlcm4gdm9pZCB2VGFza1N3aXRjaENvbnRleHQoIHZvaWQgKTsNCisjZGVmaW5lIHBvcnRZSUVMRF9GUk9NX0lTUigpCQl2VGFza1N3aXRjaENvbnRleHQoKQ0KKyNkZWZpbmUgcG9ydFlJRUxEKCkJCQkJCV9fYXNtIHZvbGF0aWxlICggIlNXSSAwIiApDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogDQpAQCAtMTc5LDQ3ICsxNzksNDggQEAKICAqIGRlZmluZWQgdGhlbiB0aGUgdXRpbGl0aWVzIGFyZSBkZWZpbmVkIGFzIG1hY3JvcyBoZXJlIC0gYXMgcGVyIG90aGVyIHBvcnRzLg0KICAqLw0KIA0KLSAgICAjaWZkZWYgVEhVTUJfSU5URVJXT1JLDQorI2lmZGVmIFRIVU1CX0lOVEVSV09SSw0KIA0KLSAgICAgICAgZXh0ZXJuIHZvaWQgdlBvcnREaXNhYmxlSW50ZXJydXB0c0Zyb21UaHVtYiggdm9pZCApIF9fYXR0cmlidXRlX18oICggbmFrZWQgKSApOw0KLSAgICAgICAgZXh0ZXJuIHZvaWQgdlBvcnRFbmFibGVJbnRlcnJ1cHRzRnJvbVRodW1iKCB2b2lkICkgX19hdHRyaWJ1dGVfXyggKCBuYWtlZCApICk7DQorCWV4dGVybiB2b2lkIHZQb3J0RGlzYWJsZUludGVycnVwdHNGcm9tVGh1bWIoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fICgobmFrZWQpKTsNCisJZXh0ZXJuIHZvaWQgdlBvcnRFbmFibGVJbnRlcnJ1cHRzRnJvbVRodW1iKCB2b2lkICkgX19hdHRyaWJ1dGVfXyAoKG5ha2VkKSk7DQogDQotICAgICAgICAjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAgICB2UG9ydERpc2FibGVJbnRlcnJ1cHRzRnJvbVRodW1iKCkNCi0gICAgICAgICNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkgICAgIHZQb3J0RW5hYmxlSW50ZXJydXB0c0Zyb21UaHVtYigpDQorCSNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpCXZQb3J0RGlzYWJsZUludGVycnVwdHNGcm9tVGh1bWIoKQ0KKwkjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpCQl2UG9ydEVuYWJsZUludGVycnVwdHNGcm9tVGh1bWIoKQ0KIA0KLSAgICAjZWxzZQ0KKyNlbHNlDQogDQotICAgICAgICAjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICBfX2FzbSB2b2xhdGlsZSAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICJTVE1EQglTUCEsIHtSMH0JCVxuXHQiLyogUHVzaCBSMC4JCQkJCQkqL1wNCi0gICAgICAgICJNUlMJUjAsIENQU1IJCVxuXHQiLyogR2V0IENQU1IuCQkJCQkqL1wNCi0gICAgICAgICJPUlIJUjAsIFIwLCAjMHhDMAlcblx0Ii8qIERpc2FibGUgSVJRLCBGSVEuCQkJKi9cDQotICAgICAgICAiTVNSCUNQU1IsIFIwCQlcblx0Ii8qIFdyaXRlIGJhY2sgbW9kaWZpZWQgdmFsdWUuCSovXA0KLSAgICAgICAgIkxETUlBCVNQISwge1IwfQkJCSIpICAgICAgLyogUG9wIFIwLgkJCQkJCSovDQorCSNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpCQkJCQkJCQkJCQlcDQorCQlfX2FzbSB2b2xhdGlsZSAoCQkJCQkJCQkJCQkJCQlcDQorCQkJIlNUTURCCVNQISwge1IwfQkJXG5cdCIJLyogUHVzaCBSMC4JCQkJCQkqLwlcDQorCQkJIk1SUwlSMCwgQ1BTUgkJXG5cdCIJLyogR2V0IENQU1IuCQkJCQkqLwlcDQorCQkJIk9SUglSMCwgUjAsICMweEMwCVxuXHQiCS8qIERpc2FibGUgSVJRLCBGSVEuCQkJKi8JXA0KKwkJCSJNU1IJQ1BTUiwgUjAJCVxuXHQiCS8qIFdyaXRlIGJhY2sgbW9kaWZpZWQgdmFsdWUuCSovCVwNCisJCQkiTERNSUEJU1AhLCB7UjB9CQkJIiApCS8qIFBvcCBSMC4JCQkJCQkqLw0KIA0KLSAgICAgICAgI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgX19hc20gdm9sYXRpbGUgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAiU1RNREIJU1AhLCB7UjB9CQlcblx0Ii8qIFB1c2ggUjAuCQkJCQkJKi9cDQotICAgICAgICAiTVJTCVIwLCBDUFNSCQlcblx0Ii8qIEdldCBDUFNSLgkJCQkJKi9cDQotICAgICAgICAiQklDCVIwLCBSMCwgIzB4QzAJXG5cdCIvKiBFbmFibGUgSVJRLCBGSVEuCQkJCSovXA0KLSAgICAgICAgIk1TUglDUFNSLCBSMAkJXG5cdCIvKiBXcml0ZSBiYWNrIG1vZGlmaWVkIHZhbHVlLgkqL1wNCi0gICAgICAgICJMRE1JQQlTUCEsIHtSMH0JCQkiKSAgICAgIC8qIFBvcCBSMC4JCQkJCQkqLw0KKwkjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpCQkJCQkJCQkJCQkJXA0KKwkJX19hc20gdm9sYXRpbGUgKAkJCQkJCQkJCQkJCQkJXA0KKwkJCSJTVE1EQglTUCEsIHtSMH0JCVxuXHQiCS8qIFB1c2ggUjAuCQkJCQkJKi8JXA0KKwkJCSJNUlMJUjAsIENQU1IJCVxuXHQiCS8qIEdldCBDUFNSLgkJCQkJKi8JXA0KKwkJCSJCSUMJUjAsIFIwLCAjMHhDMAlcblx0IgkvKiBFbmFibGUgSVJRLCBGSVEuCQkJCSovCVwNCisJCQkiTVNSCUNQU1IsIFIwCQlcblx0IgkvKiBXcml0ZSBiYWNrIG1vZGlmaWVkIHZhbHVlLgkqLwlcDQorCQkJIkxETUlBCVNQISwge1IwfQkJCSIgKQkvKiBQb3AgUjAuCQkJCQkJKi8NCiANCi0gICAgI2VuZGlmIC8qIFRIVU1CX0lOVEVSV09SSyAqLw0KKyNlbmRpZiAvKiBUSFVNQl9JTlRFUldPUksgKi8NCiANCi0gICAgZXh0ZXJuIHZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICk7DQotICAgIGV4dGVybiB2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCiANCi0gICAgI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKSAgICB2UG9ydEVudGVyQ3JpdGljYWwoKTsNCi0gICAgI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpICAgICB2UG9ydEV4aXRDcml0aWNhbCgpOw0KKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkJCXZQb3J0RW50ZXJDcml0aWNhbCgpOw0KKyNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKQkJCXZQb3J0RXhpdENyaXRpY2FsKCk7DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQotICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KLSAgICAjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgICAgICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgfQ0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQogDQogI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvR0NDL0FSTTdfTFBDMjN4eC9wb3J0LmMgYi9wb3J0YWJsZS9HQ0MvQVJNN19MUEMyM3h4L3BvcnQuYwppbmRleCA1NmQ4ZWQyLi5kMmJmNGY0IDEwMDY0NAotLS0gYS9wb3J0YWJsZS9HQ0MvQVJNN19MUEMyM3h4L3BvcnQuYworKysgYi9wb3J0YWJsZS9HQ0MvQVJNN19MUEMyM3h4L3BvcnQuYwpAQCAtMjcsMTIgKzI3LDEyIEBACiANCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgQVJNNyBwb3J0Lg0KLSoNCi0qIENvbXBvbmVudHMgdGhhdCBjYW4gYmUgY29tcGlsZWQgdG8gZWl0aGVyIEFSTSBvciBUSFVNQiBtb2RlIGFyZQ0KLSogY29udGFpbmVkIGluIHRoaXMgZmlsZS4gIFRoZSBJU1Igcm91dGluZXMsIHdoaWNoIGNhbiBvbmx5IGJlIGNvbXBpbGVkDQotKiB0byBBUk0gbW9kZSBhcmUgY29udGFpbmVkIGluIHBvcnRJU1IuYy4NCi0qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorICogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFibGUuaCBmb3IgdGhlIEFSTTcgcG9ydC4NCisgKg0KKyAqIENvbXBvbmVudHMgdGhhdCBjYW4gYmUgY29tcGlsZWQgdG8gZWl0aGVyIEFSTSBvciBUSFVNQiBtb2RlIGFyZQ0KKyAqIGNvbnRhaW5lZCBpbiB0aGlzIGZpbGUuICBUaGUgSVNSIHJvdXRpbmVzLCB3aGljaCBjYW4gb25seSBiZSBjb21waWxlZA0KKyAqIHRvIEFSTSBtb2RlIGFyZSBjb250YWluZWQgaW4gcG9ydElTUi5jLg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogDQogLyogU3RhbmRhcmQgaW5jbHVkZXMuICovDQpAQCAtNDMsMTM2ICs0MywxMzQgQEAKICNpbmNsdWRlICJ0YXNrLmgiDQogDQogLyogQ29uc3RhbnRzIHJlcXVpcmVkIHRvIHNldHVwIHRoZSB0YXNrIGNvbnRleHQuICovDQotI2RlZmluZSBwb3J0SU5JVElBTF9TUFNSICAgICAgICAgICAgICAgICAgICggKCBTdGFja1R5cGVfdCApIDB4MWYgKSAvKiBTeXN0ZW0gbW9kZSwgQVJNIG1vZGUsIGludGVycnVwdHMgZW5hYmxlZC4gKi8NCi0jZGVmaW5lIHBvcnRUSFVNQl9NT0RFX0JJVCAgICAgICAgICAgICAgICAgKCAoIFN0YWNrVHlwZV90ICkgMHgyMCApDQotI2RlZmluZSBwb3J0SU5TVFJVQ1RJT05fU0laRSAgICAgICAgICAgICAgICggKCBTdGFja1R5cGVfdCApIDQgKQ0KLSNkZWZpbmUgcG9ydE5PX0NSSVRJQ0FMX1NFQ1RJT05fTkVTVElORyAgICAoICggU3RhY2tUeXBlX3QgKSAwICkNCisjZGVmaW5lIHBvcnRJTklUSUFMX1NQU1IJCQkJKCAoIFN0YWNrVHlwZV90ICkgMHgxZiApIC8qIFN5c3RlbSBtb2RlLCBBUk0gbW9kZSwgaW50ZXJydXB0cyBlbmFibGVkLiAqLw0KKyNkZWZpbmUgcG9ydFRIVU1CX01PREVfQklUCQkJCSggKCBTdGFja1R5cGVfdCApIDB4MjAgKQ0KKyNkZWZpbmUgcG9ydElOU1RSVUNUSU9OX1NJWkUJCQkoICggU3RhY2tUeXBlX3QgKSA0ICkNCisjZGVmaW5lIHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkcJKCAoIFN0YWNrVHlwZV90ICkgMCApDQogDQogLyogQ29uc3RhbnRzIHJlcXVpcmVkIHRvIHNldHVwIHRoZSB0aWNrIElTUi4gKi8NCi0jZGVmaW5lIHBvcnRFTkFCTEVfVElNRVIgICAgICAgICAgICAgICAgICAgKCAoIHVpbnQ4X3QgKSAweDAxICkNCi0jZGVmaW5lIHBvcnRQUkVTQ0FMRV9WQUxVRSAgICAgICAgICAgICAgICAgMHgwMA0KLSNkZWZpbmUgcG9ydElOVEVSUlVQVF9PTl9NQVRDSCAgICAgICAgICAgICAoICggdWludDMyX3QgKSAweDAxICkNCi0jZGVmaW5lIHBvcnRSRVNFVF9DT1VOVF9PTl9NQVRDSCAgICAgICAgICAgKCAoIHVpbnQzMl90ICkgMHgwMiApDQorI2RlZmluZSBwb3J0RU5BQkxFX1RJTUVSICAgICAgICAgICAgICAgICggKCB1aW50OF90ICkgMHgwMSApDQorI2RlZmluZSBwb3J0UFJFU0NBTEVfVkFMVUUgICAgICAgICAgICAgIDB4MDANCisjZGVmaW5lIHBvcnRJTlRFUlJVUFRfT05fTUFUQ0ggICAgICAgICAgKCAoIHVpbnQzMl90ICkgMHgwMSApDQorI2RlZmluZSBwb3J0UkVTRVRfQ09VTlRfT05fTUFUQ0ggICAgICAgICggKCB1aW50MzJfdCApIDB4MDIgKQ0KIA0KIC8qIENvbnN0YW50cyByZXF1aXJlZCB0byBzZXR1cCB0aGUgVklDIGZvciB0aGUgdGljayBJU1IuICovDQotI2RlZmluZSBwb3J0VElNRVJfVklDX0NIQU5ORUwgICAgICAgICAgICAgICggKCB1aW50MzJfdCApIDB4MDAwNCApDQotI2RlZmluZSBwb3J0VElNRVJfVklDX0NIQU5ORUxfQklUICAgICAgICAgICggKCB1aW50MzJfdCApIDB4MDAxMCApDQotI2RlZmluZSBwb3J0VElNRVJfVklDX0VOQUJMRSAgICAgICAgICAgICAgICggKCB1aW50MzJfdCApIDB4MDAyMCApDQorI2RlZmluZSBwb3J0VElNRVJfVklDX0NIQU5ORUwgICAgICAgICAgICggKCB1aW50MzJfdCApIDB4MDAwNCApDQorI2RlZmluZSBwb3J0VElNRVJfVklDX0NIQU5ORUxfQklUICAgICAgICggKCB1aW50MzJfdCApIDB4MDAxMCApDQorI2RlZmluZSBwb3J0VElNRVJfVklDX0VOQUJMRSAgICAgICAgICAgICggKCB1aW50MzJfdCApIDB4MDAyMCApDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogU2V0dXAgdGhlIHRpbWVyIHRvIGdlbmVyYXRlIHRoZSB0aWNrIGludGVycnVwdHMuICovDQogc3RhdGljIHZvaWQgcHJ2U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApOw0KIA0KLS8qDQotICogVGhlIHNjaGVkdWxlciBjYW4gb25seSBiZSBzdGFydGVkIGZyb20gQVJNIG1vZGUsIHNvDQotICogdlBvcnRJU1JTdGFydEZpcnN0U1Rhc2soKSBpcyBkZWZpbmVkIGluIHBvcnRJU1IuYy4NCisvKiANCisgKiBUaGUgc2NoZWR1bGVyIGNhbiBvbmx5IGJlIHN0YXJ0ZWQgZnJvbSBBUk0gbW9kZSwgc28gDQorICogdlBvcnRJU1JTdGFydEZpcnN0U1Rhc2soKSBpcyBkZWZpbmVkIGluIHBvcnRJU1IuYy4gDQogICovDQogZXh0ZXJuIHZvaWQgdlBvcnRJU1JTdGFydEZpcnN0VGFzayggdm9pZCApOw0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KLS8qDQotICogSW5pdGlhbGlzZSB0aGUgc3RhY2sgb2YgYSB0YXNrIHRvIGxvb2sgZXhhY3RseSBhcyBpZiBhIGNhbGwgdG8NCisvKiANCisgKiBJbml0aWFsaXNlIHRoZSBzdGFjayBvZiBhIHRhc2sgdG8gbG9vayBleGFjdGx5IGFzIGlmIGEgY2FsbCB0byANCiAgKiBwb3J0U0FWRV9DT05URVhUIGhhZCBiZWVuIGNhbGxlZC4NCiAgKg0KLSAqIFNlZSBoZWFkZXIgZmlsZSBmb3IgZGVzY3JpcHRpb24uDQorICogU2VlIGhlYWRlciBmaWxlIGZvciBkZXNjcmlwdGlvbi4gDQogICovDQotU3RhY2tUeXBlX3QgKiBweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICogcHhUb3BPZlN0YWNrLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYXNrRnVuY3Rpb25fdCBweENvZGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KK1N0YWNrVHlwZV90ICpweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICpweFRvcE9mU3RhY2ssIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzICkNCiB7DQotICAgIFN0YWNrVHlwZV90ICogcHhPcmlnaW5hbFRPUzsNCitTdGFja1R5cGVfdCAqcHhPcmlnaW5hbFRPUzsNCiANCi0gICAgcHhPcmlnaW5hbFRPUyA9IHB4VG9wT2ZTdGFjazsNCisJcHhPcmlnaW5hbFRPUyA9IHB4VG9wT2ZTdGFjazsNCisJDQorCS8qIFRvIGVuc3VyZSBhc3NlcnRzIGluIHRhc2tzLmMgZG9uJ3QgZmFpbCwgYWx0aG91Z2ggaW4gdGhpcyBjYXNlIHRoZSBhc3NlcnQNCisJaXMgbm90IHJlYWxseSByZXF1aXJlZC4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgIC8qIFRvIGVuc3VyZSBhc3NlcnRzIGluIHRhc2tzLmMgZG9uJ3QgZmFpbCwgYWx0aG91Z2ggaW4gdGhpcyBjYXNlIHRoZSBhc3NlcnQNCi0gICAgICogaXMgbm90IHJlYWxseSByZXF1aXJlZC4gKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIFNldHVwIHRoZSBpbml0aWFsIHN0YWNrIG9mIHRoZSB0YXNrLiAgVGhlIHN0YWNrIGlzIHNldCBleGFjdGx5IGFzIA0KKwlleHBlY3RlZCBieSB0aGUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpIG1hY3JvLiAqLw0KIA0KLSAgICAvKiBTZXR1cCB0aGUgaW5pdGlhbCBzdGFjayBvZiB0aGUgdGFzay4gIFRoZSBzdGFjayBpcyBzZXQgZXhhY3RseSBhcw0KLSAgICAgKiBleHBlY3RlZCBieSB0aGUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpIG1hY3JvLiAqLw0KKwkvKiBGaXJzdCBvbiB0aGUgc3RhY2sgaXMgdGhlIHJldHVybiBhZGRyZXNzIC0gd2hpY2ggaW4gdGhpcyBjYXNlIGlzIHRoZQ0KKwlzdGFydCBvZiB0aGUgdGFzay4gIFRoZSBvZmZzZXQgaXMgYWRkZWQgdG8gbWFrZSB0aGUgcmV0dXJuIGFkZHJlc3MgYXBwZWFyDQorCWFzIGl0IHdvdWxkIHdpdGhpbiBhbiBJUlEgSVNSLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB4Q29kZSArIHBvcnRJTlNUUlVDVElPTl9TSVpFOwkJDQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBGaXJzdCBvbiB0aGUgc3RhY2sgaXMgdGhlIHJldHVybiBhZGRyZXNzIC0gd2hpY2ggaW4gdGhpcyBjYXNlIGlzIHRoZQ0KLSAgICAgKiBzdGFydCBvZiB0aGUgdGFzay4gIFRoZSBvZmZzZXQgaXMgYWRkZWQgdG8gbWFrZSB0aGUgcmV0dXJuIGFkZHJlc3MgYXBwZWFyDQotICAgICAqIGFzIGl0IHdvdWxkIHdpdGhpbiBhbiBJUlEgSVNSLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB4Q29kZSArIHBvcnRJTlNUUlVDVElPTl9TSVpFOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAwMDAwMDAwOwkvKiBSMTQgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB4T3JpZ2luYWxUT1M7IC8qIFN0YWNrIHVzZWQgd2hlbiB0YXNrIHN0YXJ0cyBnb2VzIGluIFIxMy4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMjEyMTIxMjsJLyogUjEyICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDExMTExMTExOwkvKiBSMTEgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTAxMDEwMTA7CS8qIFIxMCAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwOTA5MDkwOTsJLyogUjkgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDgwODA4MDg7CS8qIFI4ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA3MDcwNzA3OwkvKiBSNyAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNjA2MDYwNjsJLyogUjYgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDUwNTA1MDU7CS8qIFI1ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA0MDQwNDA0OwkvKiBSNCAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMzAzMDMwMzsJLyogUjMgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDIwMjAyMDI7CS8qIFIyICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAxMDEwMTAxOwkvKiBSMSAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQogDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMDAwMDAwMDsgICAgLyogUjE0ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB4T3JpZ2luYWxUT1M7IC8qIFN0YWNrIHVzZWQgd2hlbiB0YXNrIHN0YXJ0cyBnb2VzIGluIFIxMy4gKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMjEyMTIxMjsgICAgLyogUjEyICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTExMTExMTE7ICAgIC8qIFIxMSAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDEwMTAxMDEwOyAgICAvKiBSMTAgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwOTA5MDkwOTsgICAgLyogUjkgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwODA4MDgwODsgICAgLyogUjggKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNzA3MDcwNzsgICAgLyogUjcgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNjA2MDYwNjsgICAgLyogUjYgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNTA1MDUwNTsgICAgLyogUjUgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNDA0MDQwNDsgICAgLyogUjQgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMzAzMDMwMzsgICAgLyogUjMgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMjAyMDIwMjsgICAgLyogUjIgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMTAxMDEwMTsgICAgLyogUjEgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIFdoZW4gdGhlIHRhc2sgc3RhcnRzIGlzIHdpbGwgZXhwZWN0IHRvIGZpbmQgdGhlIGZ1bmN0aW9uIHBhcmFtZXRlciBpbg0KKwlSMC4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwdlBhcmFtZXRlcnM7IC8qIFIwICovDQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBXaGVuIHRoZSB0YXNrIHN0YXJ0cyBpcyB3aWxsIGV4cGVjdCB0byBmaW5kIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXIgaW4NCi0gICAgICogUjAuICovDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHZQYXJhbWV0ZXJzOyAvKiBSMCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJLyogVGhlIGxhc3QgdGhpbmcgb250byB0aGUgc3RhY2sgaXMgdGhlIHN0YXR1cyByZWdpc3Rlciwgd2hpY2ggaXMgc2V0IGZvcg0KKwlzeXN0ZW0gbW9kZSwgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcG9ydElOSVRJQUxfU1BTUjsNCiANCi0gICAgLyogVGhlIGxhc3QgdGhpbmcgb250byB0aGUgc3RhY2sgaXMgdGhlIHN0YXR1cyByZWdpc3Rlciwgd2hpY2ggaXMgc2V0IGZvcg0KLSAgICAgKiBzeXN0ZW0gbW9kZSwgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQuICovDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcG9ydElOSVRJQUxfU1BTUjsNCisJaWYoICggKCB1aW50MzJfdCApIHB4Q29kZSAmIDB4MDFVTCApICE9IDB4MDAgKQ0KKwl7DQorCQkvKiBXZSB3YW50IHRoZSB0YXNrIHRvIHN0YXJ0IGluIHRodW1iIG1vZGUuICovDQorCQkqcHhUb3BPZlN0YWNrIHw9IHBvcnRUSFVNQl9NT0RFX0JJVDsNCisJfQ0KIA0KLSAgICBpZiggKCAoIHVpbnQzMl90ICkgcHhDb2RlICYgMHgwMVVMICkgIT0gMHgwMCApDQotICAgIHsNCi0gICAgICAgIC8qIFdlIHdhbnQgdGhlIHRhc2sgdG8gc3RhcnQgaW4gdGh1bWIgbW9kZS4gKi8NCi0gICAgICAgICpweFRvcE9mU3RhY2sgfD0gcG9ydFRIVU1CX01PREVfQklUOw0KLSAgICB9DQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJLyogU29tZSBvcHRpbWlzYXRpb24gbGV2ZWxzIHVzZSB0aGUgc3RhY2sgZGlmZmVyZW50bHkgdG8gb3RoZXJzLiAgVGhpcyANCisJbWVhbnMgdGhlIGludGVycnVwdCBmbGFncyBjYW5ub3QgYWx3YXlzIGJlIHN0b3JlZCBvbiB0aGUgc3RhY2sgYW5kIHdpbGwNCisJaW5zdGVhZCBiZSBzdG9yZWQgaW4gYSB2YXJpYWJsZSwgd2hpY2ggaXMgdGhlbiBzYXZlZCBhcyBwYXJ0IG9mIHRoZQ0KKwl0YXNrcyBjb250ZXh0LiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gcG9ydE5PX0NSSVRJQ0FMX1NFQ1RJT05fTkVTVElORzsNCiANCi0gICAgLyogU29tZSBvcHRpbWlzYXRpb24gbGV2ZWxzIHVzZSB0aGUgc3RhY2sgZGlmZmVyZW50bHkgdG8gb3RoZXJzLiAgVGhpcw0KLSAgICAgKiBtZWFucyB0aGUgaW50ZXJydXB0IGZsYWdzIGNhbm5vdCBhbHdheXMgYmUgc3RvcmVkIG9uIHRoZSBzdGFjayBhbmQgd2lsbA0KLSAgICAgKiBpbnN0ZWFkIGJlIHN0b3JlZCBpbiBhIHZhcmlhYmxlLCB3aGljaCBpcyB0aGVuIHNhdmVkIGFzIHBhcnQgb2YgdGhlDQotICAgICAqIHRhc2tzIGNvbnRleHQuICovDQotICAgICpweFRvcE9mU3RhY2sgPSBwb3J0Tk9fQ1JJVElDQUxfU0VDVElPTl9ORVNUSU5HOw0KLQ0KLSAgICByZXR1cm4gcHhUb3BPZlN0YWNrOw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBCYXNlVHlwZV90IHhQb3J0U3RhcnRTY2hlZHVsZXIoIHZvaWQgKQ0KIHsNCi0gICAgLyogU3RhcnQgdGhlIHRpbWVyIHRoYXQgZ2VuZXJhdGVzIHRoZSB0aWNrIElTUi4gIEludGVycnVwdHMgYXJlIGRpc2FibGVkDQotICAgICAqIGhlcmUgYWxyZWFkeS4gKi8NCi0gICAgcHJ2U2V0dXBUaW1lckludGVycnVwdCgpOw0KKwkvKiBTdGFydCB0aGUgdGltZXIgdGhhdCBnZW5lcmF0ZXMgdGhlIHRpY2sgSVNSLiAgSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQNCisJaGVyZSBhbHJlYWR5LiAqLw0KKwlwcnZTZXR1cFRpbWVySW50ZXJydXB0KCk7DQogDQotICAgIC8qIFN0YXJ0IHRoZSBmaXJzdCB0YXNrLiAqLw0KLSAgICB2UG9ydElTUlN0YXJ0Rmlyc3RUYXNrKCk7DQorCS8qIFN0YXJ0IHRoZSBmaXJzdCB0YXNrLiAqLw0KKwl2UG9ydElTUlN0YXJ0Rmlyc3RUYXNrKCk7CQ0KIA0KLSAgICAvKiBTaG91bGQgbm90IGdldCBoZXJlISAqLw0KLSAgICByZXR1cm4gMDsNCisJLyogU2hvdWxkIG5vdCBnZXQgaGVyZSEgKi8NCisJcmV0dXJuIDA7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQ0KIHsNCi0gICAgLyogSXQgaXMgdW5saWtlbHkgdGhhdCB0aGUgQVJNIHBvcnQgd2lsbCByZXF1aXJlIHRoaXMgZnVuY3Rpb24gYXMgdGhlcmUNCi0gICAgICogaXMgbm90aGluZyB0byByZXR1cm4gdG8uICAqLw0KKwkvKiBJdCBpcyB1bmxpa2VseSB0aGF0IHRoZSBBUk0gcG9ydCB3aWxsIHJlcXVpcmUgdGhpcyBmdW5jdGlvbiBhcyB0aGVyZQ0KKwlpcyBub3RoaW5nIHRvIHJldHVybiB0by4gICovDQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KQEAgLTE4MSw1MiArMTc5LDU1IEBACiAgKi8NCiBzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICkNCiB7DQotICAgIHVpbnQzMl90IHVsQ29tcGFyZU1hdGNoOw0KK3VpbnQzMl90IHVsQ29tcGFyZU1hdGNoOw0KIA0KLSAgICBQQ0xLU0VMMCA9ICggUENMS1NFTDAgJiAoIH4oIDB4MyA8PCAyICkgKSApIHwgKCAweDAxIDw8IDIgKTsNCi0gICAgVDBUQ1IgPSAyOyAgLyogU3RvcCBhbmQgcmVzZXQgdGhlIHRpbWVyICovDQotICAgIFQwQ1RDUiA9IDA7IC8qIFRpbWVyIG1vZGUgICAgICAgICAgICAgICAqLw0KKwlQQ0xLU0VMMCA9IChQQ0xLU0VMMCAmICh+KDB4Mzw8MikpKSB8ICgweDAxIDw8IDIpOw0KKwlUMFRDUiAgPSAyOyAgICAgICAgIC8qIFN0b3AgYW5kIHJlc2V0IHRoZSB0aW1lciAqLw0KKwlUMENUQ1IgPSAwOyAgICAgICAgIC8qIFRpbWVyIG1vZGUgICAgICAgICAgICAgICAqLw0KKwkNCisJLyogQSAxbXMgdGljayBkb2VzIG5vdCByZXF1aXJlIHRoZSB1c2Ugb2YgdGhlIHRpbWVyIHByZXNjYWxlLiAgVGhpcyBpcw0KKwlkZWZhdWx0ZWQgdG8gemVybyBidXQgY2FuIGJlIHVzZWQgaWYgbmVjZXNzYXJ5LiAqLw0KKwlUMFBSID0gcG9ydFBSRVNDQUxFX1ZBTFVFOw0KIA0KLSAgICAvKiBBIDFtcyB0aWNrIGRvZXMgbm90IHJlcXVpcmUgdGhlIHVzZSBvZiB0aGUgdGltZXIgcHJlc2NhbGUuICBUaGlzIGlzDQotICAgICAqIGRlZmF1bHRlZCB0byB6ZXJvIGJ1dCBjYW4gYmUgdXNlZCBpZiBuZWNlc3NhcnkuICovDQotICAgIFQwUFIgPSBwb3J0UFJFU0NBTEVfVkFMVUU7DQorCS8qIENhbGN1bGF0ZSB0aGUgbWF0Y2ggdmFsdWUgcmVxdWlyZWQgZm9yIG91ciB3YW50ZWQgdGljayByYXRlLiAqLw0KKwl1bENvbXBhcmVNYXRjaCA9IGNvbmZpZ0NQVV9DTE9DS19IWiAvIGNvbmZpZ1RJQ0tfUkFURV9IWjsNCiANCi0gICAgLyogQ2FsY3VsYXRlIHRoZSBtYXRjaCB2YWx1ZSByZXF1aXJlZCBmb3Igb3VyIHdhbnRlZCB0aWNrIHJhdGUuICovDQotICAgIHVsQ29tcGFyZU1hdGNoID0gY29uZmlnQ1BVX0NMT0NLX0haIC8gY29uZmlnVElDS19SQVRFX0haOw0KKwkvKiBQcm90ZWN0IGFnYWluc3QgZGl2aWRlIGJ5IHplcm8uICBVc2luZyBhbiBpZigpIHN0YXRlbWVudCBzdGlsbCByZXN1bHRzDQorCWluIGEgd2FybmluZyAtIGhlbmNlIHRoZSAjaWYuICovDQorCSNpZiBwb3J0UFJFU0NBTEVfVkFMVUUgIT0gMA0KKwl7DQorCQl1bENvbXBhcmVNYXRjaCAvPSAoIHBvcnRQUkVTQ0FMRV9WQUxVRSArIDEgKTsNCisJfQ0KKwkjZW5kaWYNCisJVDBNUjEgPSB1bENvbXBhcmVNYXRjaDsNCiANCi0gICAgLyogUHJvdGVjdCBhZ2FpbnN0IGRpdmlkZSBieSB6ZXJvLiAgVXNpbmcgYW4gaWYoKSBzdGF0ZW1lbnQgc3RpbGwgcmVzdWx0cw0KLSAgICAgKiBpbiBhIHdhcm5pbmcgLSBoZW5jZSB0aGUgI2lmLiAqLw0KLSAgICAjaWYgcG9ydFBSRVNDQUxFX1ZBTFVFICE9IDANCi0gICAgICAgIHsNCi0gICAgICAgICAgICB1bENvbXBhcmVNYXRjaCAvPSAoIHBvcnRQUkVTQ0FMRV9WQUxVRSArIDEgKTsNCi0gICAgICAgIH0NCi0gICAgI2VuZGlmDQotICAgIFQwTVIxID0gdWxDb21wYXJlTWF0Y2g7DQorCS8qIEdlbmVyYXRlIHRpY2sgd2l0aCB0aW1lciAwIGNvbXBhcmUgbWF0Y2guICovDQorCVQwTUNSICA9ICgzIDw8IDMpOyAgLyogUmVzZXQgdGltZXIgb24gbWF0Y2ggYW5kIGdlbmVyYXRlIGludGVycnVwdCAqLw0KIA0KLSAgICAvKiBHZW5lcmF0ZSB0aWNrIHdpdGggdGltZXIgMCBjb21wYXJlIG1hdGNoLiAqLw0KLSAgICBUME1DUiA9ICggMyA8PCAzICk7IC8qIFJlc2V0IHRpbWVyIG9uIG1hdGNoIGFuZCBnZW5lcmF0ZSBpbnRlcnJ1cHQgKi8NCisJLyogU2V0dXAgdGhlIFZJQyBmb3IgdGhlIHRpbWVyLiAqLw0KKwlWSUNJbnRFbmFibGUgPSAweDAwMDAwMDEwOw0KKwkNCisJLyogVGhlIElTUiBpbnN0YWxsZWQgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSBwcmVlbXB0aXZlIG9yIGNvb3BlcmF0aXZlDQorCXNjaGVkdWxlciBpcyBiZWluZyB1c2VkLiAqLw0KKwkjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMQ0KKwl7DQorCQlleHRlcm4gdm9pZCAoIHZQcmVlbXB0aXZlVGljayApKCB2b2lkICk7DQorCQlWSUNWZWN0QWRkcjQgPSAoIGludDMyX3QgKSB2UHJlZW1wdGl2ZVRpY2s7DQorCX0NCisJI2Vsc2UNCisJew0KKwkJZXh0ZXJuIHZvaWQgKCB2Tm9uUHJlZW1wdGl2ZVRpY2sgKSggdm9pZCApOw0KKwkJVklDVmVjdEFkZHI0ID0gKCBpbnQzMl90ICkgdk5vblByZWVtcHRpdmVUaWNrOw0KKwl9DQorCSNlbmRpZg0KIA0KLSAgICAvKiBTZXR1cCB0aGUgVklDIGZvciB0aGUgdGltZXIuICovDQotICAgIFZJQ0ludEVuYWJsZSA9IDB4MDAwMDAwMTA7DQorCVZJQ1ZlY3RDbnRsNCA9IDE7DQogDQotICAgIC8qIFRoZSBJU1IgaW5zdGFsbGVkIGRlcGVuZHMgb24gd2hldGhlciB0aGUgcHJlZW1wdGl2ZSBvciBjb29wZXJhdGl2ZQ0KLSAgICAgKiBzY2hlZHVsZXIgaXMgYmVpbmcgdXNlZC4gKi8NCi0gICAgI2lmIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDENCi0gICAgICAgIHsNCi0gICAgICAgICAgICBleHRlcm4gdm9pZCggdlByZWVtcHRpdmVUaWNrICkoIHZvaWQgKTsNCi0gICAgICAgICAgICBWSUNWZWN0QWRkcjQgPSAoIGludDMyX3QgKSB2UHJlZW1wdGl2ZVRpY2s7DQotICAgICAgICB9DQotICAgICNlbHNlDQotICAgICAgICB7DQotICAgICAgICAgICAgZXh0ZXJuIHZvaWQoIHZOb25QcmVlbXB0aXZlVGljayApKCB2b2lkICk7DQotICAgICAgICAgICAgVklDVmVjdEFkZHI0ID0gKCBpbnQzMl90ICkgdk5vblByZWVtcHRpdmVUaWNrOw0KLSAgICAgICAgfQ0KLSAgICAjZW5kaWYNCi0NCi0gICAgVklDVmVjdENudGw0ID0gMTsNCi0NCi0gICAgLyogU3RhcnQgdGhlIHRpbWVyIC0gaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZA0KLSAgICAgKiBzbyBpdCBpcyBva2F5IHRvIGRvIHRoaXMgaGVyZS4gKi8NCi0gICAgVDBUQ1IgPSBwb3J0RU5BQkxFX1RJTUVSOw0KKwkvKiBTdGFydCB0aGUgdGltZXIgLSBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkDQorCXNvIGl0IGlzIG9rYXkgdG8gZG8gdGhpcyBoZXJlLiAqLw0KKwlUMFRDUiA9IHBvcnRFTkFCTEVfVElNRVI7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKw0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0dDQy9BUk03X0xQQzIzeHgvcG9ydElTUi5jIGIvcG9ydGFibGUvR0NDL0FSTTdfTFBDMjN4eC9wb3J0SVNSLmMKaW5kZXggYjlmMzhlNC4uNDlmNWUwYiAxMDA2NDQKLS0tIGEvcG9ydGFibGUvR0NDL0FSTTdfTFBDMjN4eC9wb3J0SVNSLmMKKysrIGIvcG9ydGFibGUvR0NDL0FSTTdfTFBDMjN4eC9wb3J0SVNSLmMKQEAgLTI3LDI5ICsyNywyOSBAQAogDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLSogQ29tcG9uZW50cyB0aGF0IGNhbiBiZSBjb21waWxlZCB0byBlaXRoZXIgQVJNIG9yIFRIVU1CIG1vZGUgYXJlDQotKiBjb250YWluZWQgaW4gcG9ydC5jICBUaGUgSVNSIHJvdXRpbmVzLCB3aGljaCBjYW4gb25seSBiZSBjb21waWxlZA0KLSogdG8gQVJNIG1vZGUsIGFyZSBjb250YWluZWQgaW4gdGhpcyBmaWxlLg0KLSotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisgKiBDb21wb25lbnRzIHRoYXQgY2FuIGJlIGNvbXBpbGVkIHRvIGVpdGhlciBBUk0gb3IgVEhVTUIgbW9kZSBhcmUNCisgKiBjb250YWluZWQgaW4gcG9ydC5jICBUaGUgSVNSIHJvdXRpbmVzLCB3aGljaCBjYW4gb25seSBiZSBjb21waWxlZA0KKyAqIHRvIEFSTSBtb2RlLCBhcmUgY29udGFpbmVkIGluIHRoaXMgZmlsZS4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFNjaGVkdWxlciBpbmNsdWRlcy4gKi8NCiAjaW5jbHVkZSAiRnJlZVJUT1MuaCINCiAjaW5jbHVkZSAidGFzay5oIg0KIA0KIC8qIENvbnN0YW50cyByZXF1aXJlZCB0byBoYW5kbGUgaW50ZXJydXB0cy4gKi8NCi0jZGVmaW5lIHBvcnRUSU1FUl9NQVRDSF9JU1JfQklUICAgICggKCB1aW50OF90ICkgMHgwMSApDQotI2RlZmluZSBwb3J0Q0xFQVJfVklDX0lOVEVSUlVQVCAgICAoICggdWludDMyX3QgKSAwICkNCisjZGVmaW5lIHBvcnRUSU1FUl9NQVRDSF9JU1JfQklUCQkoICggdWludDhfdCApIDB4MDEgKQ0KKyNkZWZpbmUgcG9ydENMRUFSX1ZJQ19JTlRFUlJVUFQJCSggKCB1aW50MzJfdCApIDAgKQ0KIA0KIC8qIENvbnN0YW50cyByZXF1aXJlZCB0byBoYW5kbGUgY3JpdGljYWwgc2VjdGlvbnMuICovDQotI2RlZmluZSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyAgICAoICggdWludDMyX3QgKSAwICkNCisjZGVmaW5lIHBvcnROT19DUklUSUNBTF9ORVNUSU5HCQkoICggdWludDMyX3QgKSAwICkNCiB2b2xhdGlsZSB1aW50MzJfdCB1bENyaXRpY2FsTmVzdGluZyA9IDk5OTlVTDsNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBJU1IgdG8gaGFuZGxlIG1hbnVhbCBjb250ZXh0IHN3aXRjaGVzIChmcm9tIGEgY2FsbCB0byB0YXNrWUlFTEQoKSkuICovDQotdm9pZCB2UG9ydFlpZWxkUHJvY2Vzc29yKCB2b2lkICkgX19hdHRyaWJ1dGVfXyggKCBpbnRlcnJ1cHQoICJTV0kiICksIG5ha2VkICkgKTsNCit2b2lkIHZQb3J0WWllbGRQcm9jZXNzb3IoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fKChpbnRlcnJ1cHQoIlNXSSIpLCBuYWtlZCkpOw0KIA0KLS8qDQorLyogDQogICogVGhlIHNjaGVkdWxlciBjYW4gb25seSBiZSBzdGFydGVkIGZyb20gQVJNIG1vZGUsIGhlbmNlIHRoZSBpbmNsdXNpb24gb2YgdGhpcw0KICAqIGZ1bmN0aW9uIGhlcmUuDQogICovDQpAQCAtNTgsMzkgKzU4LDM5IEBACiANCiB2b2lkIHZQb3J0SVNSU3RhcnRGaXJzdFRhc2soIHZvaWQgKQ0KIHsNCi0gICAgLyogU2ltcGx5IHN0YXJ0IHRoZSBzY2hlZHVsZXIuICBUaGlzIGlzIGluY2x1ZGVkIGhlcmUgYXMgaXQgY2FuIG9ubHkgYmUNCi0gICAgICogY2FsbGVkIGZyb20gQVJNIG1vZGUuICovDQotICAgIHBvcnRSRVNUT1JFX0NPTlRFWFQoKTsNCisJLyogU2ltcGx5IHN0YXJ0IHRoZSBzY2hlZHVsZXIuICBUaGlzIGlzIGluY2x1ZGVkIGhlcmUgYXMgaXQgY2FuIG9ubHkgYmUNCisJY2FsbGVkIGZyb20gQVJNIG1vZGUuICovDQorCXBvcnRSRVNUT1JFX0NPTlRFWFQoKTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyoNCiAgKiBDYWxsZWQgYnkgcG9ydFlJRUxEKCkgb3IgdGFza1lJRUxEKCkgdG8gbWFudWFsbHkgZm9yY2UgYSBjb250ZXh0IHN3aXRjaC4NCiAgKg0KLSAqIFdoZW4gYSBjb250ZXh0IHN3aXRjaCBpcyBwZXJmb3JtZWQgZnJvbSB0aGUgdGFzayBsZXZlbCB0aGUgc2F2ZWQgdGFzaw0KKyAqIFdoZW4gYSBjb250ZXh0IHN3aXRjaCBpcyBwZXJmb3JtZWQgZnJvbSB0aGUgdGFzayBsZXZlbCB0aGUgc2F2ZWQgdGFzayANCiAgKiBjb250ZXh0IGlzIG1hZGUgdG8gbG9vayBhcyBpZiBpdCBvY2N1cnJlZCBmcm9tIHdpdGhpbiB0aGUgdGljayBJU1IuICBUaGlzDQogICogd2F5IHRoZSBzYW1lIHJlc3RvcmUgY29udGV4dCBmdW5jdGlvbiBjYW4gYmUgdXNlZCB3aGVuIHJlc3RvcmluZyB0aGUgY29udGV4dA0KICAqIHNhdmVkIGZyb20gdGhlIElTUiBvciB0aGF0IHNhdmVkIGZyb20gYSBjYWxsIHRvIHZQb3J0WWllbGRQcm9jZXNzb3IuDQogICovDQogdm9pZCB2UG9ydFlpZWxkUHJvY2Vzc29yKCB2b2lkICkNCiB7DQotICAgIC8qIFdpdGhpbiBhbiBJUlEgSVNSIHRoZSBsaW5rIHJlZ2lzdGVyIGhhcyBhbiBvZmZzZXQgZnJvbSB0aGUgdHJ1ZSByZXR1cm4NCi0gICAgICogYWRkcmVzcywgYnV0IGFuIFNXSSBJU1IgZG9lcyBub3QuICBBZGQgdGhlIG9mZnNldCBtYW51YWxseSBzbyB0aGUgc2FtZQ0KLSAgICAgKiBJU1IgcmV0dXJuIGNvZGUgY2FuIGJlIHVzZWQgaW4gYm90aCBjYXNlcy4gKi8NCi0gICAgX19hc20gdm9sYXRpbGUgKCAiQURECQlMUiwgTFIsICM0Iik7DQorCS8qIFdpdGhpbiBhbiBJUlEgSVNSIHRoZSBsaW5rIHJlZ2lzdGVyIGhhcyBhbiBvZmZzZXQgZnJvbSB0aGUgdHJ1ZSByZXR1cm4gDQorCWFkZHJlc3MsIGJ1dCBhbiBTV0kgSVNSIGRvZXMgbm90LiAgQWRkIHRoZSBvZmZzZXQgbWFudWFsbHkgc28gdGhlIHNhbWUgDQorCUlTUiByZXR1cm4gY29kZSBjYW4gYmUgdXNlZCBpbiBib3RoIGNhc2VzLiAqLw0KKwlfX2FzbSB2b2xhdGlsZSAoICJBREQJCUxSLCBMUiwgIzQiICk7DQogDQotICAgIC8qIFBlcmZvcm0gdGhlIGNvbnRleHQgc3dpdGNoLiAgRmlyc3Qgc2F2ZSB0aGUgY29udGV4dCBvZiB0aGUgY3VycmVudCB0YXNrLiAqLw0KLSAgICBwb3J0U0FWRV9DT05URVhUKCk7DQorCS8qIFBlcmZvcm0gdGhlIGNvbnRleHQgc3dpdGNoLiAgRmlyc3Qgc2F2ZSB0aGUgY29udGV4dCBvZiB0aGUgY3VycmVudCB0YXNrLiAqLw0KKwlwb3J0U0FWRV9DT05URVhUKCk7DQogDQotICAgIC8qIEZpbmQgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgdGFzayB0aGF0IGlzIHJlYWR5IHRvIHJ1bi4gKi8NCi0gICAgX19hc20gdm9sYXRpbGUgKCAiYmwJCQl2VGFza1N3aXRjaENvbnRleHQiKTsNCisJLyogRmluZCB0aGUgaGlnaGVzdCBwcmlvcml0eSB0YXNrIHRoYXQgaXMgcmVhZHkgdG8gcnVuLiAqLw0KKwlfX2FzbSB2b2xhdGlsZSggImJsCQkJdlRhc2tTd2l0Y2hDb250ZXh0IiApOw0KIA0KLSAgICAvKiBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBuZXcgdGFzay4gKi8NCi0gICAgcG9ydFJFU1RPUkVfQ09OVEVYVCgpOw0KKwkvKiBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBuZXcgdGFzay4gKi8NCisJcG9ydFJFU1RPUkVfQ09OVEVYVCgpOwkNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQotLyoNCisvKiANCiAgKiBUaGUgSVNSIHVzZWQgZm9yIHRoZSBzY2hlZHVsZXIgdGljayBkZXBlbmRzIG9uIHdoZXRoZXIgdGhlIGNvb3BlcmF0aXZlIG9yDQogICogdGhlIHByZWVtcHRpdmUgc2NoZWR1bGVyIGlzIGJlaW5nIHVzZWQuDQogICovDQpAQCAtOTgsNDYgKzk4LDQ2IEBACiANCiAjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMA0KIA0KLS8qIFRoZSBjb29wZXJhdGl2ZSBzY2hlZHVsZXIgcmVxdWlyZXMgYSBub3JtYWwgSVJRIHNlcnZpY2Ugcm91dGluZSB0bw0KLSAqIHNpbXBseSBpbmNyZW1lbnQgdGhlIHN5c3RlbSB0aWNrLiAqLw0KLSAgICB2b2lkIHZOb25QcmVlbXB0aXZlVGljayggdm9pZCApIF9fYXR0cmlidXRlX18oICggaW50ZXJydXB0KCAiSVJRIiApICkgKTsNCi0gICAgdm9pZCB2Tm9uUHJlZW1wdGl2ZVRpY2soIHZvaWQgKQ0KLSAgICB7DQotICAgICAgICB4VGFza0luY3JlbWVudFRpY2soKTsNCi0gICAgICAgIFQwSVIgPSAyOw0KLSAgICAgICAgVklDVmVjdEFkZHIgPSBwb3J0Q0xFQVJfVklDX0lOVEVSUlVQVDsNCi0gICAgfQ0KKwkvKiBUaGUgY29vcGVyYXRpdmUgc2NoZWR1bGVyIHJlcXVpcmVzIGEgbm9ybWFsIElSUSBzZXJ2aWNlIHJvdXRpbmUgdG8gDQorCXNpbXBseSBpbmNyZW1lbnQgdGhlIHN5c3RlbSB0aWNrLiAqLw0KKwl2b2lkIHZOb25QcmVlbXB0aXZlVGljayggdm9pZCApIF9fYXR0cmlidXRlX18gKChpbnRlcnJ1cHQgKCJJUlEiKSkpOw0KKwl2b2lkIHZOb25QcmVlbXB0aXZlVGljayggdm9pZCApDQorCXsJDQorCQl4VGFza0luY3JlbWVudFRpY2soKTsNCisJCVQwSVIgPSAyOw0KKwkJVklDVmVjdEFkZHIgPSBwb3J0Q0xFQVJfVklDX0lOVEVSUlVQVDsNCisJfQ0KIA0KLSNlbHNlIC8qIGlmIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDAgKi8NCisjZWxzZQ0KIA0KLS8qIFRoZSBwcmVlbXB0aXZlIHNjaGVkdWxlciBpcyBkZWZpbmVkIGFzICJuYWtlZCIgYXMgdGhlIGZ1bGwgY29udGV4dCBpcw0KLSAqIHNhdmVkIG9uIGVudHJ5IGFzIHBhcnQgb2YgdGhlIGNvbnRleHQgc3dpdGNoLiAqLw0KLSAgICB2b2lkIHZQcmVlbXB0aXZlVGljayggdm9pZCApIF9fYXR0cmlidXRlX18oICggbmFrZWQgKSApOw0KLSAgICB2b2lkIHZQcmVlbXB0aXZlVGljayggdm9pZCApDQotICAgIHsNCi0gICAgICAgIC8qIFNhdmUgdGhlIGNvbnRleHQgb2YgdGhlIGludGVycnVwdGVkIHRhc2suICovDQotICAgICAgICBwb3J0U0FWRV9DT05URVhUKCk7DQorCS8qIFRoZSBwcmVlbXB0aXZlIHNjaGVkdWxlciBpcyBkZWZpbmVkIGFzICJuYWtlZCIgYXMgdGhlIGZ1bGwgY29udGV4dCBpcw0KKwlzYXZlZCBvbiBlbnRyeSBhcyBwYXJ0IG9mIHRoZSBjb250ZXh0IHN3aXRjaC4gKi8NCisJdm9pZCB2UHJlZW1wdGl2ZVRpY2soIHZvaWQgKSBfX2F0dHJpYnV0ZV9fKChuYWtlZCkpOw0KKwl2b2lkIHZQcmVlbXB0aXZlVGljayggdm9pZCApDQorCXsNCisJCS8qIFNhdmUgdGhlIGNvbnRleHQgb2YgdGhlIGludGVycnVwdGVkIHRhc2suICovDQorCQlwb3J0U0FWRV9DT05URVhUKCk7CQ0KIA0KLSAgICAgICAgLyogSW5jcmVtZW50IHRoZSBSVE9TIHRpY2sgY291bnQsIHRoZW4gbG9vayBmb3IgdGhlIGhpZ2hlc3QgcHJpb3JpdHkNCi0gICAgICAgICAqIHRhc2sgdGhhdCBpcyByZWFkeSB0byBydW4uICovDQotICAgICAgICBfX2FzbSB2b2xhdGlsZQ0KLSAgICAgICAgKA0KLSAgICAgICAgICAgICIJYmwgeFRhc2tJbmNyZW1lbnRUaWNrCVx0XG4iXA0KLSAgICAgICAgICAgICIJY21wIHIwLCAjMAkJCQlcdFxuIlwNCi0gICAgICAgICAgICAiCWJlcSBTa2lwQ29udGV4dFN3aXRjaAlcdFxuIlwNCi0gICAgICAgICAgICAiCWJsIHZUYXNrU3dpdGNoQ29udGV4dAlcdFxuIlwNCi0gICAgICAgICAgICAiU2tpcENvbnRleHRTd2l0Y2g6CQkJXHRcbiINCi0gICAgICAgICk7DQorCQkvKiBJbmNyZW1lbnQgdGhlIFJUT1MgdGljayBjb3VudCwgdGhlbiBsb29rIGZvciB0aGUgaGlnaGVzdCBwcmlvcml0eSANCisJCXRhc2sgdGhhdCBpcyByZWFkeSB0byBydW4uICovDQorCQlfX2FzbSB2b2xhdGlsZQ0KKwkJKA0KKwkJCSIJYmwgeFRhc2tJbmNyZW1lbnRUaWNrCVx0XG4iIFwNCisJCQkiCWNtcCByMCwgIzAJCQkJXHRcbiIgXA0KKwkJCSIJYmVxIFNraXBDb250ZXh0U3dpdGNoCVx0XG4iIFwNCisJCQkiCWJsIHZUYXNrU3dpdGNoQ29udGV4dAlcdFxuIiBcDQorCQkJIlNraXBDb250ZXh0U3dpdGNoOgkJCVx0XG4iDQorCQkpOw0KIA0KLSAgICAgICAgLyogUmVhZHkgZm9yIHRoZSBuZXh0IGludGVycnVwdC4gKi8NCi0gICAgICAgIFQwSVIgPSAyOw0KLSAgICAgICAgVklDVmVjdEFkZHIgPSBwb3J0Q0xFQVJfVklDX0lOVEVSUlVQVDsNCisJCS8qIFJlYWR5IGZvciB0aGUgbmV4dCBpbnRlcnJ1cHQuICovDQorCQlUMElSID0gMjsNCisJCVZJQ1ZlY3RBZGRyID0gcG9ydENMRUFSX1ZJQ19JTlRFUlJVUFQ7DQorCQkNCisJCS8qIFJlc3RvcmUgdGhlIGNvbnRleHQgb2YgdGhlIG5ldyB0YXNrLiAqLw0KKwkJcG9ydFJFU1RPUkVfQ09OVEVYVCgpOw0KKwl9DQogDQotICAgICAgICAvKiBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBuZXcgdGFzay4gKi8NCi0gICAgICAgIHBvcnRSRVNUT1JFX0NPTlRFWFQoKTsNCi0gICAgfQ0KLQ0KLSNlbmRpZiAvKiBpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAwICovDQorI2VuZGlmDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyoNCkBAIC0xNDgsNzEgKzE0OCw3MSBAQAogICovDQogI2lmZGVmIFRIVU1CX0lOVEVSV09SSw0KIA0KLSAgICB2b2lkIHZQb3J0RGlzYWJsZUludGVycnVwdHNGcm9tVGh1bWIoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fKCAoIG5ha2VkICkgKTsNCi0gICAgdm9pZCB2UG9ydEVuYWJsZUludGVycnVwdHNGcm9tVGh1bWIoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fKCAoIG5ha2VkICkgKTsNCisJdm9pZCB2UG9ydERpc2FibGVJbnRlcnJ1cHRzRnJvbVRodW1iKCB2b2lkICkgX19hdHRyaWJ1dGVfXyAoKG5ha2VkKSk7DQorCXZvaWQgdlBvcnRFbmFibGVJbnRlcnJ1cHRzRnJvbVRodW1iKCB2b2lkICkgX19hdHRyaWJ1dGVfXyAoKG5ha2VkKSk7DQogDQotICAgIHZvaWQgdlBvcnREaXNhYmxlSW50ZXJydXB0c0Zyb21UaHVtYiggdm9pZCApDQotICAgIHsNCi0gICAgICAgIF9fYXNtIHZvbGF0aWxlICgNCi0gICAgICAgICAgICAiU1RNREIJU1AhLCB7UjB9CQlcblx0Ii8qIFB1c2ggUjAuCQkJCQkJCQkJKi8NCi0gICAgICAgICAgICAiTVJTCVIwLCBDUFNSCQlcblx0Ii8qIEdldCBDUFNSLgkJCQkJCQkJKi8NCi0gICAgICAgICAgICAiT1JSCVIwLCBSMCwgIzB4QzAJXG5cdCIvKiBEaXNhYmxlIElSUSwgRklRLgkJCQkJCSovDQotICAgICAgICAgICAgIk1TUglDUFNSLCBSMAkJXG5cdCIvKiBXcml0ZSBiYWNrIG1vZGlmaWVkIHZhbHVlLgkJCQkqLw0KLSAgICAgICAgICAgICJMRE1JQQlTUCEsIHtSMH0JCVxuXHQiLyogUG9wIFIwLgkJCQkJCQkJCSovDQotICAgICAgICAgICAgIkJYCQlSMTQiKTsgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gYmFjayB0byB0aHVtYi4JCQkJCSovDQotICAgIH0NCi0NCi0gICAgdm9pZCB2UG9ydEVuYWJsZUludGVycnVwdHNGcm9tVGh1bWIoIHZvaWQgKQ0KLSAgICB7DQotICAgICAgICBfX2FzbSB2b2xhdGlsZSAoDQotICAgICAgICAgICAgIlNUTURCCVNQISwge1IwfQkJXG5cdCIvKiBQdXNoIFIwLgkJCQkJCQkJCSovDQotICAgICAgICAgICAgIk1SUwlSMCwgQ1BTUgkJXG5cdCIvKiBHZXQgQ1BTUi4JCQkJCQkJCSovDQotICAgICAgICAgICAgIkJJQwlSMCwgUjAsICMweEMwCVxuXHQiLyogRW5hYmxlIElSUSwgRklRLgkJCQkJCQkqLw0KLSAgICAgICAgICAgICJNU1IJQ1BTUiwgUjAJCVxuXHQiLyogV3JpdGUgYmFjayBtb2RpZmllZCB2YWx1ZS4JCQkJKi8NCi0gICAgICAgICAgICAiTERNSUEJU1AhLCB7UjB9CQlcblx0Ii8qIFBvcCBSMC4JCQkJCQkJCQkqLw0KLSAgICAgICAgICAgICJCWAkJUjE0Iik7ICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIGJhY2sgdG8gdGh1bWIuCQkJCQkqLw0KLSAgICB9DQorCXZvaWQgdlBvcnREaXNhYmxlSW50ZXJydXB0c0Zyb21UaHVtYiggdm9pZCApDQorCXsNCisJCV9fYXNtIHZvbGF0aWxlICggDQorCQkJIlNUTURCCVNQISwge1IwfQkJXG5cdCIJLyogUHVzaCBSMC4JCQkJCQkJCQkqLw0KKwkJCSJNUlMJUjAsIENQU1IJCVxuXHQiCS8qIEdldCBDUFNSLgkJCQkJCQkJKi8NCisJCQkiT1JSCVIwLCBSMCwgIzB4QzAJXG5cdCIJLyogRGlzYWJsZSBJUlEsIEZJUS4JCQkJCQkqLw0KKwkJCSJNU1IJQ1BTUiwgUjAJCVxuXHQiCS8qIFdyaXRlIGJhY2sgbW9kaWZpZWQgdmFsdWUuCQkJCSovDQorCQkJIkxETUlBCVNQISwge1IwfQkJXG5cdCIJLyogUG9wIFIwLgkJCQkJCQkJCSovDQorCQkJIkJYCQlSMTQiICk7CQkJCQkvKiBSZXR1cm4gYmFjayB0byB0aHVtYi4JCQkJCSovDQorCX0NCisJCQkNCisJdm9pZCB2UG9ydEVuYWJsZUludGVycnVwdHNGcm9tVGh1bWIoIHZvaWQgKQ0KKwl7DQorCQlfX2FzbSB2b2xhdGlsZSAoIA0KKwkJCSJTVE1EQglTUCEsIHtSMH0JCVxuXHQiCS8qIFB1c2ggUjAuCQkJCQkJCQkJKi8JDQorCQkJIk1SUwlSMCwgQ1BTUgkJXG5cdCIJLyogR2V0IENQU1IuCQkJCQkJCQkqLwkNCisJCQkiQklDCVIwLCBSMCwgIzB4QzAJXG5cdCIJLyogRW5hYmxlIElSUSwgRklRLgkJCQkJCQkqLwkNCisJCQkiTVNSCUNQU1IsIFIwCQlcblx0IgkvKiBXcml0ZSBiYWNrIG1vZGlmaWVkIHZhbHVlLgkJCQkqLwkNCisJCQkiTERNSUEJU1AhLCB7UjB9CQlcblx0IgkvKiBQb3AgUjAuCQkJCQkJCQkJKi8NCisJCQkiQlgJCVIxNCIgKTsJCQkJCS8qIFJldHVybiBiYWNrIHRvIHRodW1iLgkJCQkJKi8NCisJfQ0KIA0KICNlbmRpZiAvKiBUSFVNQl9JTlRFUldPUksgKi8NCiANCiAvKiBUaGUgY29kZSBnZW5lcmF0ZWQgYnkgdGhlIEdDQyBjb21waWxlciB1c2VzIHRoZSBzdGFjayBpbiBkaWZmZXJlbnQgd2F5cyBhdA0KLSAqIGRpZmZlcmVudCBvcHRpbWlzYXRpb24gbGV2ZWxzLiAgVGhlIGludGVycnVwdCBmbGFncyBjYW4gdGhlcmVmb3JlIG5vdCBhbHdheXMNCi0gKiBiZSBzYXZlZCB0byB0aGUgc3RhY2suICBJbnN0ZWFkIHRoZSBjcml0aWNhbCBzZWN0aW9uIG5lc3RpbmcgbGV2ZWwgaXMgc3RvcmVkDQotICogaW4gYSB2YXJpYWJsZSwgd2hpY2ggaXMgdGhlbiBzYXZlZCBhcyBwYXJ0IG9mIHRoZSBzdGFjayBjb250ZXh0LiAqLw0KK2RpZmZlcmVudCBvcHRpbWlzYXRpb24gbGV2ZWxzLiAgVGhlIGludGVycnVwdCBmbGFncyBjYW4gdGhlcmVmb3JlIG5vdCBhbHdheXMNCitiZSBzYXZlZCB0byB0aGUgc3RhY2suICBJbnN0ZWFkIHRoZSBjcml0aWNhbCBzZWN0aW9uIG5lc3RpbmcgbGV2ZWwgaXMgc3RvcmVkDQoraW4gYSB2YXJpYWJsZSwgd2hpY2ggaXMgdGhlbiBzYXZlZCBhcyBwYXJ0IG9mIHRoZSBzdGFjayBjb250ZXh0LiAqLw0KIHZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICkNCiB7DQotICAgIC8qIERpc2FibGUgaW50ZXJydXB0cyBhcyBwZXIgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gICAgX19hc20gdm9sYXRpbGUgKA0KLSAgICAgICAgIlNUTURCCVNQISwge1IwfQkJCVxuXHQiLyogUHVzaCBSMC4JCQkJCQkJCSovDQotICAgICAgICAiTVJTCVIwLCBDUFNSCQkJXG5cdCIvKiBHZXQgQ1BTUi4JCQkJCQkJKi8NCi0gICAgICAgICJPUlIJUjAsIFIwLCAjMHhDMAkJXG5cdCIvKiBEaXNhYmxlIElSUSwgRklRLgkJCQkJKi8NCi0gICAgICAgICJNU1IJQ1BTUiwgUjAJCQlcblx0Ii8qIFdyaXRlIGJhY2sgbW9kaWZpZWQgdmFsdWUuCQkJKi8NCi0gICAgICAgICJMRE1JQQlTUCEsIHtSMH0iKTsgICAgICAvKiBQb3AgUjAuCQkJCQkJCQkqLw0KKwkvKiBEaXNhYmxlIGludGVycnVwdHMgYXMgcGVyIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsgCQkJCQkJCSovDQorCV9fYXNtIHZvbGF0aWxlICggDQorCQkiU1RNREIJU1AhLCB7UjB9CQkJXG5cdCIJLyogUHVzaCBSMC4JCQkJCQkJCSovDQorCQkiTVJTCVIwLCBDUFNSCQkJXG5cdCIJLyogR2V0IENQU1IuCQkJCQkJCSovDQorCQkiT1JSCVIwLCBSMCwgIzB4QzAJCVxuXHQiCS8qIERpc2FibGUgSVJRLCBGSVEuCQkJCQkqLw0KKwkJIk1TUglDUFNSLCBSMAkJCVxuXHQiCS8qIFdyaXRlIGJhY2sgbW9kaWZpZWQgdmFsdWUuCQkJKi8NCisJCSJMRE1JQQlTUCEsIHtSMH0iICk7CQkJCS8qIFBvcCBSMC4JCQkJCQkJCSovDQogDQotICAgIC8qIE5vdyBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB1bENyaXRpY2FsTmVzdGluZyBjYW4gYmUgYWNjZXNzZWQNCi0gICAgICogZGlyZWN0bHkuICBJbmNyZW1lbnQgdWxDcml0aWNhbE5lc3RpbmcgdG8ga2VlcCBhIGNvdW50IG9mIGhvdyBtYW55IHRpbWVzDQotICAgICAqIHBvcnRFTlRFUl9DUklUSUNBTCgpIGhhcyBiZWVuIGNhbGxlZC4gKi8NCi0gICAgdWxDcml0aWNhbE5lc3RpbmcrKzsNCisJLyogTm93IGludGVycnVwdHMgYXJlIGRpc2FibGVkIHVsQ3JpdGljYWxOZXN0aW5nIGNhbiBiZSBhY2Nlc3NlZCANCisJZGlyZWN0bHkuICBJbmNyZW1lbnQgdWxDcml0aWNhbE5lc3RpbmcgdG8ga2VlcCBhIGNvdW50IG9mIGhvdyBtYW55IHRpbWVzDQorCXBvcnRFTlRFUl9DUklUSUNBTCgpIGhhcyBiZWVuIGNhbGxlZC4gKi8NCisJdWxDcml0aWNhbE5lc3RpbmcrKzsNCiB9DQogDQogdm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApDQogew0KLSAgICBpZiggdWxDcml0aWNhbE5lc3RpbmcgPiBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyApDQotICAgIHsNCi0gICAgICAgIC8qIERlY3JlbWVudCB0aGUgbmVzdGluZyBjb3VudCBhcyB3ZSBhcmUgbGVhdmluZyBhIGNyaXRpY2FsIHNlY3Rpb24uICovDQotICAgICAgICB1bENyaXRpY2FsTmVzdGluZy0tOw0KKwlpZiggdWxDcml0aWNhbE5lc3RpbmcgPiBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyApDQorCXsNCisJCS8qIERlY3JlbWVudCB0aGUgbmVzdGluZyBjb3VudCBhcyB3ZSBhcmUgbGVhdmluZyBhIGNyaXRpY2FsIHNlY3Rpb24uICovDQorCQl1bENyaXRpY2FsTmVzdGluZy0tOw0KIA0KLSAgICAgICAgLyogSWYgdGhlIG5lc3RpbmcgbGV2ZWwgaGFzIHJlYWNoZWQgemVybyB0aGVuIGludGVycnVwdHMgc2hvdWxkIGJlDQotICAgICAgICAgKiByZS1lbmFibGVkLiAqLw0KLSAgICAgICAgaWYoIHVsQ3JpdGljYWxOZXN0aW5nID09IHBvcnROT19DUklUSUNBTF9ORVNUSU5HICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICAvKiBFbmFibGUgaW50ZXJydXB0cyBhcyBwZXIgcG9ydEVYSVRfQ1JJVElDQUwoKS4JCQkJCSovDQotICAgICAgICAgICAgX19hc20gdm9sYXRpbGUgKA0KLSAgICAgICAgICAgICAgICAiU1RNREIJU1AhLCB7UjB9CQlcblx0Ii8qIFB1c2ggUjAuCQkJCQkJKi8NCi0gICAgICAgICAgICAgICAgIk1SUwlSMCwgQ1BTUgkJXG5cdCIvKiBHZXQgQ1BTUi4JCQkJCSovDQotICAgICAgICAgICAgICAgICJCSUMJUjAsIFIwLCAjMHhDMAlcblx0Ii8qIEVuYWJsZSBJUlEsIEZJUS4JCQkJKi8NCi0gICAgICAgICAgICAgICAgIk1TUglDUFNSLCBSMAkJXG5cdCIvKiBXcml0ZSBiYWNrIG1vZGlmaWVkIHZhbHVlLgkqLw0KLSAgICAgICAgICAgICAgICAiTERNSUEJU1AhLCB7UjB9Iik7ICAgICAvKiBQb3AgUjAuCQkJCQkJKi8NCi0gICAgICAgIH0NCi0gICAgfQ0KKwkJLyogSWYgdGhlIG5lc3RpbmcgbGV2ZWwgaGFzIHJlYWNoZWQgemVybyB0aGVuIGludGVycnVwdHMgc2hvdWxkIGJlDQorCQlyZS1lbmFibGVkLiAqLw0KKwkJaWYoIHVsQ3JpdGljYWxOZXN0aW5nID09IHBvcnROT19DUklUSUNBTF9ORVNUSU5HICkNCisJCXsNCisJCQkvKiBFbmFibGUgaW50ZXJydXB0cyBhcyBwZXIgcG9ydEVYSVRfQ1JJVElDQUwoKS4JCQkJCSovDQorCQkJX19hc20gdm9sYXRpbGUgKCANCisJCQkJIlNUTURCCVNQISwge1IwfQkJXG5cdCIJLyogUHVzaCBSMC4JCQkJCQkqLwkNCisJCQkJIk1SUwlSMCwgQ1BTUgkJXG5cdCIJLyogR2V0IENQU1IuCQkJCQkqLwkNCisJCQkJIkJJQwlSMCwgUjAsICMweEMwCVxuXHQiCS8qIEVuYWJsZSBJUlEsIEZJUS4JCQkJKi8JDQorCQkJCSJNU1IJQ1BTUiwgUjAJCVxuXHQiCS8qIFdyaXRlIGJhY2sgbW9kaWZpZWQgdmFsdWUuCSovCQ0KKwkJCQkiTERNSUEJU1AhLCB7UjB9IiApOwkJCS8qIFBvcCBSMC4JCQkJCQkqLw0KKwkJfQ0KKwl9DQogfQ0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0dDQy9BUk03X0xQQzIzeHgvcG9ydG1hY3JvLmggYi9wb3J0YWJsZS9HQ0MvQVJNN19MUEMyM3h4L3BvcnRtYWNyby5oCmluZGV4IDMxYWE0MzEuLmIxNTE1N2YgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0dDQy9BUk03X0xQQzIzeHgvcG9ydG1hY3JvLmgKKysrIGIvcG9ydGFibGUvR0NDL0FSTTdfTFBDMjN4eC9wb3J0bWFjcm8uaApAQCAtMjYsMzQgKzI2LDM0IEBACiAgKi8NCiANCiAvKg0KLSAqICBDaGFuZ2VzIGZyb20gVjMuMi4zDQotICoNCi0gKyBNb2RpZmllZCBwb3J0RU5URVJfU1dJVENISU5HX0lTUigpIHRvIGFsbG93IHVzZSB3aXRoIEdDQyBWNC4wLjEuDQotICsNCi0gKyAgQ2hhbmdlcyBmcm9tIFYzLjIuNA0KLSArDQotICsgUmVtb3ZlZCB0aGUgdXNlIG9mIHRoZSAlMCBwYXJhbWV0ZXIgd2l0aGluIHRoZSBhc3NlbWJsZXIgbWFjcm9zIGFuZA0KLSArICAgIHJlcGxhY2VkIHRoZW0gd2l0aCBoYXJkIGNvZGVkIHJlZ2lzdGVycy4gIFRoaXMgd2lsbCBlbnN1cmUgdGhlDQotICsgICAgYXNzZW1ibGVyIGRvZXMgbm90IHNlbGVjdCB0aGUgbGluayByZWdpc3RlciBhcyB0aGUgdGVtcCByZWdpc3RlciBhcw0KLSArICAgIHdhcyBvY2Nhc2lvbmFsbHkgaGFwcGVuaW5nIHByZXZpb3VzbHkuDQotICsNCi0gKyBUaGUgYXNzZW1ibGVyIHN0YXRlbWVudHMgYXJlIG5vdyBpbmNsdWRlZCBpbiBhIHNpbmdsZSBhc20gYmxvY2sgcmF0aGVyDQotICsgICAgdGhhbiBlYWNoIGxpbmUgaGF2aW5nIGl0cyBvd24gYXNtIGJsb2NrLg0KLSArDQotICsgIENoYW5nZXMgZnJvbSBWNC41LjANCi0gKw0KLSArIFJlbW92ZWQgdGhlIHBvcnRFTlRFUl9TV0lUQ0hJTkdfSVNSKCkgYW5kIHBvcnRFWElUX1NXSVRDSElOR19JU1IoKSBtYWNyb3MNCi0gKyAgICBhbmQgcmVwbGFjZWQgdGhlbSB3aXRoIHBvcnRZSUVMRF9GUk9NX0lTUigpIG1hY3JvLiAgQXBwbGljYXRpb24gY29kZQ0KLSArICAgIHNob3VsZCBub3cgbWFrZSB1c2Ugb2YgdGhlIHBvcnRTQVZFX0NPTlRFWFQoKSBhbmQgcG9ydFJFU1RPUkVfQ09OVEVYVCgpDQotICsgICAgbWFjcm9zIGFzIHBlciB0aGUgVjQuNS4xIGRlbW8gY29kZS4NCi0gKi8NCisJQ2hhbmdlcyBmcm9tIFYzLjIuMw0KKw0KKwkrIE1vZGlmaWVkIHBvcnRFTlRFUl9TV0lUQ0hJTkdfSVNSKCkgdG8gYWxsb3cgdXNlIHdpdGggR0NDIFY0LjAuMS4NCisNCisJQ2hhbmdlcyBmcm9tIFYzLjIuNA0KKw0KKwkrIFJlbW92ZWQgdGhlIHVzZSBvZiB0aGUgJTAgcGFyYW1ldGVyIHdpdGhpbiB0aGUgYXNzZW1ibGVyIG1hY3JvcyBhbmQNCisJICByZXBsYWNlZCB0aGVtIHdpdGggaGFyZCBjb2RlZCByZWdpc3RlcnMuICBUaGlzIHdpbGwgZW5zdXJlIHRoZQ0KKwkgIGFzc2VtYmxlciBkb2VzIG5vdCBzZWxlY3QgdGhlIGxpbmsgcmVnaXN0ZXIgYXMgdGhlIHRlbXAgcmVnaXN0ZXIgYXMNCisJICB3YXMgb2NjYXNpb25hbGx5IGhhcHBlbmluZyBwcmV2aW91c2x5Lg0KKw0KKwkrIFRoZSBhc3NlbWJsZXIgc3RhdGVtZW50cyBhcmUgbm93IGluY2x1ZGVkIGluIGEgc2luZ2xlIGFzbSBibG9jayByYXRoZXINCisJICB0aGFuIGVhY2ggbGluZSBoYXZpbmcgaXRzIG93biBhc20gYmxvY2suDQorDQorCUNoYW5nZXMgZnJvbSBWNC41LjANCisNCisJKyBSZW1vdmVkIHRoZSBwb3J0RU5URVJfU1dJVENISU5HX0lTUigpIGFuZCBwb3J0RVhJVF9TV0lUQ0hJTkdfSVNSKCkgbWFjcm9zDQorCSAgYW5kIHJlcGxhY2VkIHRoZW0gd2l0aCBwb3J0WUlFTERfRlJPTV9JU1IoKSBtYWNyby4gIEFwcGxpY2F0aW9uIGNvZGUNCisJICBzaG91bGQgbm93IG1ha2UgdXNlIG9mIHRoZSBwb3J0U0FWRV9DT05URVhUKCkgYW5kIHBvcnRSRVNUT1JFX0NPTlRFWFQoKQ0KKwkgIG1hY3JvcyBhcyBwZXIgdGhlIFY0LjUuMSBkZW1vIGNvZGUuDQorKi8NCiANCiAjaWZuZGVmIFBPUlRNQUNST19IDQotICAgICNkZWZpbmUgUE9SVE1BQ1JPX0gNCisjZGVmaW5lIFBPUlRNQUNST19IDQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgZXh0ZXJuICJDIiB7DQotICAgICNlbmRpZg0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgKiBQb3J0IHNwZWNpZmljIGRlZmluaXRpb25zLg0KQEAgLTY2LDMyICs2NiwzMiBAQAogICovDQogDQogLyogVHlwZSBkZWZpbml0aW9ucy4gKi8NCi0gICAgI2RlZmluZSBwb3J0Q0hBUiAgICAgICAgICBjaGFyDQotICAgICNkZWZpbmUgcG9ydEZMT0FUICAgICAgICAgZmxvYXQNCi0gICAgI2RlZmluZSBwb3J0RE9VQkxFICAgICAgICBkb3VibGUNCi0gICAgI2RlZmluZSBwb3J0TE9ORyAgICAgICAgICBsb25nDQotICAgICNkZWZpbmUgcG9ydFNIT1JUICAgICAgICAgc2hvcnQNCi0gICAgI2RlZmluZSBwb3J0U1RBQ0tfVFlQRSAgICB1aW50MzJfdA0KLSAgICAjZGVmaW5lIHBvcnRCQVNFX1RZUEUgICAgIHBvcnRMT05HDQorI2RlZmluZSBwb3J0Q0hBUgkJY2hhcg0KKyNkZWZpbmUgcG9ydEZMT0FUCQlmbG9hdA0KKyNkZWZpbmUgcG9ydERPVUJMRQkJZG91YmxlDQorI2RlZmluZSBwb3J0TE9ORwkJbG9uZw0KKyNkZWZpbmUgcG9ydFNIT1JUCQlzaG9ydA0KKyNkZWZpbmUgcG9ydFNUQUNLX1RZUEUJdWludDMyX3QNCisjZGVmaW5lIHBvcnRCQVNFX1RZUEUJcG9ydExPTkcNCiANCi0gICAgdHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSAgIFN0YWNrVHlwZV90Ow0KLSAgICB0eXBlZGVmIGxvbmcgICAgICAgICAgICAgQmFzZVR5cGVfdDsNCi0gICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nICAgIFVCYXNlVHlwZV90Ow0KK3R5cGVkZWYgcG9ydFNUQUNLX1RZUEUgU3RhY2tUeXBlX3Q7DQordHlwZWRlZiBsb25nIEJhc2VUeXBlX3Q7DQordHlwZWRlZiB1bnNpZ25lZCBsb25nIFVCYXNlVHlwZV90Ow0KIA0KLSAgICAjaWYgKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KLSAgICAgICAgdHlwZWRlZiB1aW50MTZfdCAgICAgVGlja1R5cGVfdDsNCi0gICAgICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmYNCi0gICAgI2Vsc2UNCi0gICAgICAgIHR5cGVkZWYgdWludDMyX3QgICAgIFRpY2tUeXBlX3Q7DQotICAgICAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQotICAgICNlbmRpZg0KKyNpZiggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCisJdHlwZWRlZiB1aW50MTZfdCBUaWNrVHlwZV90Ow0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQorI2Vsc2UNCisJdHlwZWRlZiB1aW50MzJfdCBUaWNrVHlwZV90Ow0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQorI2VuZGlmDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogQXJjaGl0ZWN0dXJlIHNwZWNpZmljcy4gKi8NCi0gICAgI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RIICAgICAgKCAtMSApDQotICAgICNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TICAgICggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQotICAgICNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UICAgIDgNCi0gICAgI2RlZmluZSBwb3J0Tk9QKCkgICAgX19hc20gdm9sYXRpbGUgKCAiTk9QIiApOw0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJCSggLTEgKQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TCQkJKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCisjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVAkJCTgNCisjZGVmaW5lIHBvcnROT1AoKQkJCQkJX19hc20gdm9sYXRpbGUgKCAiTk9QIiApOw0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIA0KQEAgLTEwNCw5MiArMTA0LDkyIEBACiAgKiBUSFVNQiBtb2RlIGNvZGUgd2lsbCByZXN1bHQgaW4gYSBjb21waWxlIHRpbWUgZXJyb3IuDQogICovDQogDQotICAgICNkZWZpbmUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBleHRlcm4gdm9sYXRpbGUgdm9pZCAqIHZvbGF0aWxlIHB4Q3VycmVudFRDQjsgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBleHRlcm4gdm9sYXRpbGUgdWludDMyX3QgdWxDcml0aWNhbE5lc3Rpbmc7ICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAvKiBTZXQgdGhlIExSIHRvIHRoZSB0YXNrIHN0YWNrLiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBfX2FzbSB2b2xhdGlsZSAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgIkxEUgkJUjAsID1weEN1cnJlbnRUQ0IJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICJMRFIJCVIwLCBbUjBdCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICJMRFIJCUxSLCBbUjBdCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIFRoZSBjcml0aWNhbCBuZXN0aW5nIGRlcHRoIGlzIHRoZSBmaXJzdCBpdGVtIG9uIHRoZSBzdGFjay4gKi8gXA0KLSAgICAgICAgICAgIC8qIExvYWQgaXQgaW50byB0aGUgdWxDcml0aWNhbE5lc3RpbmcgdmFyaWFibGUuICovICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICJMRFIJCVIwLCA9dWxDcml0aWNhbE5lc3RpbmcJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgIkxETUZECUxSISwge1IxfQkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgIlNUUgkJUjEsIFtSMF0JCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogR2V0IHRoZSBTUFNSIGZyb20gdGhlIHN0YWNrLiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgIkxETUZECUxSISwge1IwfQkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgIk1TUgkJU1BTUiwgUjAJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogUmVzdG9yZSBhbGwgc3lzdGVtIG1vZGUgcmVnaXN0ZXJzIGZvciB0aGUgdGFzay4gKi8gICAgICAgICAgICBcDQotICAgICAgICAgICAgIkxETUZECUxSLCB7UjAtUjE0fV4JCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgIk5PUAkJCQkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogUmVzdG9yZSB0aGUgcmV0dXJuIGFkZHJlc3MuICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgIkxEUgkJTFIsIFtMUiwgIys2MF0JCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBBbmQgcmV0dXJuIC0gY29ycmVjdGluZyB0aGUgb2Zmc2V0IGluIHRoZSBMUiB0byBvYnRhaW4gdGhlICovIFwNCi0gICAgICAgICAgICAvKiBjb3JyZWN0IGFkZHJlc3MuICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAiU1VCUwlQQywgTFIsICM0CQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICggdm9pZCApIHVsQ3JpdGljYWxOZXN0aW5nOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICggdm9pZCApIHB4Q3VycmVudFRDQjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgfQ0KKyNkZWZpbmUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpCQkJCQkJCQkJCQlcDQorewkJCQkJCQkJCQkJCQkJCQkJCVwNCitleHRlcm4gdm9sYXRpbGUgdm9pZCAqIHZvbGF0aWxlIHB4Q3VycmVudFRDQjsJCQkJCQkJXA0KK2V4dGVybiB2b2xhdGlsZSB1aW50MzJfdCB1bENyaXRpY2FsTmVzdGluZzsJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIFNldCB0aGUgTFIgdG8gdGhlIHRhc2sgc3RhY2suICovCQkJCQkJCQkJXA0KKwlfX2FzbSB2b2xhdGlsZSAoCQkJCQkJCQkJCQkJCVwNCisJIkxEUgkJUjAsID1weEN1cnJlbnRUQ0IJCQkJCQkJCVxuXHQiCVwNCisJIkxEUgkJUjAsIFtSMF0JCQkJCQkJCQkJXG5cdCIJXA0KKwkiTERSCQlMUiwgW1IwXQkJCQkJCQkJCQlcblx0IglcDQorCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBUaGUgY3JpdGljYWwgbmVzdGluZyBkZXB0aCBpcyB0aGUgZmlyc3QgaXRlbSBvbiB0aGUgc3RhY2suICovCVwNCisJLyogTG9hZCBpdCBpbnRvIHRoZSB1bENyaXRpY2FsTmVzdGluZyB2YXJpYWJsZS4gKi8JCQkJCVwNCisJIkxEUgkJUjAsID11bENyaXRpY2FsTmVzdGluZwkJCQkJCQlcblx0IglcDQorCSJMRE1GRAlMUiEsIHtSMX0JCQkJCQkJCQkJCVxuXHQiCVwNCisJIlNUUgkJUjEsIFtSMF0JCQkJCQkJCQkJXG5cdCIJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogR2V0IHRoZSBTUFNSIGZyb20gdGhlIHN0YWNrLiAqLwkJCQkJCQkJCVwNCisJIkxETUZECUxSISwge1IwfQkJCQkJCQkJCQkJXG5cdCIJXA0KKwkiTVNSCQlTUFNSLCBSMAkJCQkJCQkJCQlcblx0IglcDQorCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBSZXN0b3JlIGFsbCBzeXN0ZW0gbW9kZSByZWdpc3RlcnMgZm9yIHRoZSB0YXNrLiAqLwkJCQlcDQorCSJMRE1GRAlMUiwge1IwLVIxNH1eCQkJCQkJCQkJCVxuXHQiCVwNCisJIk5PUAkJCQkJCQkJCQkJCQkJXG5cdCIJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogUmVzdG9yZSB0aGUgcmV0dXJuIGFkZHJlc3MuICovCQkJCQkJCQkJXA0KKwkiTERSCQlMUiwgW0xSLCAjKzYwXQkJCQkJCQkJCVxuXHQiCVwNCisJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIEFuZCByZXR1cm4gLSBjb3JyZWN0aW5nIHRoZSBvZmZzZXQgaW4gdGhlIExSIHRvIG9idGFpbiB0aGUgKi8JXA0KKwkvKiBjb3JyZWN0IGFkZHJlc3MuICovCQkJCQkJCQkJCQkJXA0KKwkiU1VCUwlQQywgTFIsICM0CQkJCQkJCQkJCQlcblx0IglcDQorCSk7CQkJCQkJCQkJCQkJCQkJCQlcDQorCSggdm9pZCApIHVsQ3JpdGljYWxOZXN0aW5nOwkJCQkJCQkJCQkJXA0KKwkoIHZvaWQgKSBweEN1cnJlbnRUQ0I7CQkJCQkJCQkJCQkJXA0KK30NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0gICAgI2RlZmluZSBwb3J0U0FWRV9DT05URVhUKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGV4dGVybiB2b2xhdGlsZSB2b2lkICogdm9sYXRpbGUgcHhDdXJyZW50VENCOyAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGV4dGVybiB2b2xhdGlsZSB1aW50MzJfdCB1bENyaXRpY2FsTmVzdGluZzsgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIFB1c2ggUjAgYXMgd2UgYXJlIGdvaW5nIHRvIHVzZSB0aGUgcmVnaXN0ZXIuICovICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIF9fYXNtIHZvbGF0aWxlICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAiU1RNREIJU1AhLCB7UjB9CQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBTZXQgUjAgdG8gcG9pbnQgdG8gdGhlIHRhc2sgc3RhY2sgcG9pbnRlci4gKi8gICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAiU1RNREIJU1Ase1NQfV4JCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICJOT1AJCQkJCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICJTVUIJU1AsIFNQLCAjNAkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgIkxETUlBCVNQISx7UjB9CQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBQdXNoIHRoZSByZXR1cm4gYWRkcmVzcyBvbnRvIHRoZSBzdGFjay4gKi8gICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAiU1RNREIJUjAhLCB7TFJ9CQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBOb3cgd2UgaGF2ZSBzYXZlZCBMUiB3ZSBjYW4gdXNlIGl0IGluc3RlYWQgb2YgUjAuICovICAgICAgIFwNCi0gICAgICAgICAgICAiTU9WCUxSLCBSMAkJCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIFBvcCBSMCBzbyB3ZSBjYW4gc2F2ZSBpdCBvbnRvIHRoZSBzeXN0ZW0gbW9kZSBzdGFjay4gKi8gICAgXA0KLSAgICAgICAgICAgICJMRE1JQQlTUCEsIHtSMH0JCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIFB1c2ggYWxsIHRoZSBzeXN0ZW0gbW9kZSByZWdpc3RlcnMgb250byB0aGUgdGFzayBzdGFjay4gKi8gXA0KLSAgICAgICAgICAgICJTVE1EQglMUix7UjAtTFJ9XgkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgIk5PUAkJCQkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgIlNVQglMUiwgTFIsICM2MAkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogUHVzaCB0aGUgU1BTUiBvbnRvIHRoZSB0YXNrIHN0YWNrLiAqLyAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgIk1SUwlSMCwgU1BTUgkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgIlNUTURCCUxSISwge1IwfQkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgIkxEUglSMCwgPXVsQ3JpdGljYWxOZXN0aW5nCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAiTERSCVIwLCBbUjBdCQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAiU1RNREIJTFIhLCB7UjB9CQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBTdG9yZSB0aGUgbmV3IHRvcCBvZiBzdGFjayBmb3IgdGhlIHRhc2suICovICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAiTERSCVIwLCA9cHhDdXJyZW50VENCCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgIkxEUglSMCwgW1IwXQkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgIlNUUglMUiwgW1IwXQkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAoIHZvaWQgKSB1bENyaXRpY2FsTmVzdGluZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAoIHZvaWQgKSBweEN1cnJlbnRUQ0I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIH0NCisjZGVmaW5lIHBvcnRTQVZFX0NPTlRFWFQoKQkJCQkJCQkJCQkJCVwNCit7CQkJCQkJCQkJCQkJCQkJCQkJXA0KK2V4dGVybiB2b2xhdGlsZSB2b2lkICogdm9sYXRpbGUgcHhDdXJyZW50VENCOwkJCQkJCQlcDQorZXh0ZXJuIHZvbGF0aWxlIHVpbnQzMl90IHVsQ3JpdGljYWxOZXN0aW5nOwkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogUHVzaCBSMCBhcyB3ZSBhcmUgZ29pbmcgdG8gdXNlIHRoZSByZWdpc3Rlci4gKi8JCQkJCVwNCisJX19hc20gdm9sYXRpbGUgKAkJCQkJCQkJCQkJCQlcDQorCSJTVE1EQglTUCEsIHtSMH0JCQkJCQkJCQkJCVxuXHQiCVwNCisJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIFNldCBSMCB0byBwb2ludCB0byB0aGUgdGFzayBzdGFjayBwb2ludGVyLiAqLwkJCQkJXA0KKwkiU1RNREIJU1Ase1NQfV4JCQkJCQkJCQkJCVxuXHQiCVwNCisJIk5PUAkJCQkJCQkJCQkJCQkJXG5cdCIJXA0KKwkiU1VCCVNQLCBTUCwgIzQJCQkJCQkJCQkJCVxuXHQiCVwNCisJIkxETUlBCVNQISx7UjB9CQkJCQkJCQkJCQlcblx0IglcDQorCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBQdXNoIHRoZSByZXR1cm4gYWRkcmVzcyBvbnRvIHRoZSBzdGFjay4gKi8JCQkJCQlcDQorCSJTVE1EQglSMCEsIHtMUn0JCQkJCQkJCQkJCVxuXHQiCVwNCisJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIE5vdyB3ZSBoYXZlIHNhdmVkIExSIHdlIGNhbiB1c2UgaXQgaW5zdGVhZCBvZiBSMC4gKi8JCQkJXA0KKwkiTU9WCUxSLCBSMAkJCQkJCQkJCQkJCVxuXHQiCVwNCisJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIFBvcCBSMCBzbyB3ZSBjYW4gc2F2ZSBpdCBvbnRvIHRoZSBzeXN0ZW0gbW9kZSBzdGFjay4gKi8JCQlcDQorCSJMRE1JQQlTUCEsIHtSMH0JCQkJCQkJCQkJCVxuXHQiCVwNCisJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIFB1c2ggYWxsIHRoZSBzeXN0ZW0gbW9kZSByZWdpc3RlcnMgb250byB0aGUgdGFzayBzdGFjay4gKi8JCVwNCisJIlNUTURCCUxSLHtSMC1MUn1eCQkJCQkJCQkJCQlcblx0IglcDQorCSJOT1AJCQkJCQkJCQkJCQkJCVxuXHQiCVwNCisJIlNVQglMUiwgTFIsICM2MAkJCQkJCQkJCQkJXG5cdCIJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogUHVzaCB0aGUgU1BTUiBvbnRvIHRoZSB0YXNrIHN0YWNrLiAqLwkJCQkJCQlcDQorCSJNUlMJUjAsIFNQU1IJCQkJCQkJCQkJCVxuXHQiCVwNCisJIlNUTURCCUxSISwge1IwfQkJCQkJCQkJCQkJXG5cdCIJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJIkxEUglSMCwgPXVsQ3JpdGljYWxOZXN0aW5nCQkJCQkJCQlcblx0IglcDQorCSJMRFIJUjAsIFtSMF0JCQkJCQkJCQkJCVxuXHQiCVwNCisJIlNUTURCCUxSISwge1IwfQkJCQkJCQkJCQkJXG5cdCIJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogU3RvcmUgdGhlIG5ldyB0b3Agb2Ygc3RhY2sgZm9yIHRoZSB0YXNrLiAqLwkJCQkJCVwNCisJIkxEUglSMCwgPXB4Q3VycmVudFRDQgkJCQkJCQkJCVxuXHQiCVwNCisJIkxEUglSMCwgW1IwXQkJCQkJCQkJCQkJXG5cdCIJXA0KKwkiU1RSCUxSLCBbUjBdCQkJCQkJCQkJCQlcblx0IglcDQorCSk7CQkJCQkJCQkJCQkJCQkJCQlcDQorCSggdm9pZCApIHVsQ3JpdGljYWxOZXN0aW5nOwkJCQkJCQkJCQkJXA0KKwkoIHZvaWQgKSBweEN1cnJlbnRUQ0I7CQkJCQkJCQkJCQkJXA0KK30NCiANCiANCi0gICAgI2RlZmluZSBwb3J0WUlFTERfRlJPTV9JU1IoKSAgICB2VGFza1N3aXRjaENvbnRleHQoKQ0KLSAgICAjZGVmaW5lIHBvcnRZSUVMRCgpICAgICAgICAgICAgIF9fYXNtIHZvbGF0aWxlICggIlNXSSAwIiApDQorI2RlZmluZSBwb3J0WUlFTERfRlJPTV9JU1IoKQkJdlRhc2tTd2l0Y2hDb250ZXh0KCkNCisjZGVmaW5lIHBvcnRZSUVMRCgpCQkJCQlfX2FzbSB2b2xhdGlsZSAoICJTV0kgMCIgKQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIA0KQEAgLTIwMiw0NyArMjAyLDQ4IEBACiAgKiBkZWZpbmVkIHRoZW4gdGhlIHV0aWxpdGllcyBhcmUgZGVmaW5lZCBhcyBtYWNyb3MgaGVyZSAtIGFzIHBlciBvdGhlciBwb3J0cy4NCiAgKi8NCiANCi0gICAgI2lmZGVmIFRIVU1CX0lOVEVSV09SSw0KKyNpZmRlZiBUSFVNQl9JTlRFUldPUksNCiANCi0gICAgICAgIGV4dGVybiB2b2lkIHZQb3J0RGlzYWJsZUludGVycnVwdHNGcm9tVGh1bWIoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fKCAoIG5ha2VkICkgKTsNCi0gICAgICAgIGV4dGVybiB2b2lkIHZQb3J0RW5hYmxlSW50ZXJydXB0c0Zyb21UaHVtYiggdm9pZCApIF9fYXR0cmlidXRlX18oICggbmFrZWQgKSApOw0KKwlleHRlcm4gdm9pZCB2UG9ydERpc2FibGVJbnRlcnJ1cHRzRnJvbVRodW1iKCB2b2lkICkgX19hdHRyaWJ1dGVfXyAoKG5ha2VkKSk7DQorCWV4dGVybiB2b2lkIHZQb3J0RW5hYmxlSW50ZXJydXB0c0Zyb21UaHVtYiggdm9pZCApIF9fYXR0cmlidXRlX18gKChuYWtlZCkpOw0KIA0KLSAgICAgICAgI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgICAgdlBvcnREaXNhYmxlSW50ZXJydXB0c0Zyb21UaHVtYigpDQotICAgICAgICAjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpICAgICB2UG9ydEVuYWJsZUludGVycnVwdHNGcm9tVGh1bWIoKQ0KKwkjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKQl2UG9ydERpc2FibGVJbnRlcnJ1cHRzRnJvbVRodW1iKCkNCisJI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKQkJdlBvcnRFbmFibGVJbnRlcnJ1cHRzRnJvbVRodW1iKCkNCiANCi0gICAgI2Vsc2UNCisjZWxzZQ0KIA0KLSAgICAgICAgI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgX19hc20gdm9sYXRpbGUgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAiU1RNREIJU1AhLCB7UjB9CQlcblx0Ii8qIFB1c2ggUjAuCQkJCQkJKi9cDQotICAgICAgICAiTVJTCVIwLCBDUFNSCQlcblx0Ii8qIEdldCBDUFNSLgkJCQkJKi9cDQotICAgICAgICAiT1JSCVIwLCBSMCwgIzB4QzAJXG5cdCIvKiBEaXNhYmxlIElSUSwgRklRLgkJCSovXA0KLSAgICAgICAgIk1TUglDUFNSLCBSMAkJXG5cdCIvKiBXcml0ZSBiYWNrIG1vZGlmaWVkIHZhbHVlLgkqL1wNCi0gICAgICAgICJMRE1JQQlTUCEsIHtSMH0JCQkiKSAgICAgIC8qIFBvcCBSMC4JCQkJCQkqLw0KKwkjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKQkJCQkJCQkJCQkJXA0KKwkJX19hc20gdm9sYXRpbGUgKAkJCQkJCQkJCQkJCQkJCVwNCisJCQkiU1RNREIJU1AhLCB7UjB9CQlcblx0IgkvKiBQdXNoIFIwLgkJCQkJCSovCVwNCisJCQkiTVJTCVIwLCBDUFNSCQlcblx0IgkvKiBHZXQgQ1BTUi4JCQkJCSovCVwNCisJCQkiT1JSCVIwLCBSMCwgIzB4QzAJXG5cdCIJLyogRGlzYWJsZSBJUlEsIEZJUS4JCQkqLwlcDQorCQkJIk1TUglDUFNSLCBSMAkJXG5cdCIJLyogV3JpdGUgYmFjayBtb2RpZmllZCB2YWx1ZS4JKi8JXA0KKwkJCSJMRE1JQQlTUCEsIHtSMH0JCQkiICkJLyogUG9wIFIwLgkJCQkJCSovDQogDQotICAgICAgICAjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICBfX2FzbSB2b2xhdGlsZSAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICJTVE1EQglTUCEsIHtSMH0JCVxuXHQiLyogUHVzaCBSMC4JCQkJCQkqL1wNCi0gICAgICAgICJNUlMJUjAsIENQU1IJCVxuXHQiLyogR2V0IENQU1IuCQkJCQkqL1wNCi0gICAgICAgICJCSUMJUjAsIFIwLCAjMHhDMAlcblx0Ii8qIEVuYWJsZSBJUlEsIEZJUS4JCQkJKi9cDQotICAgICAgICAiTVNSCUNQU1IsIFIwCQlcblx0Ii8qIFdyaXRlIGJhY2sgbW9kaWZpZWQgdmFsdWUuCSovXA0KLSAgICAgICAgIkxETUlBCVNQISwge1IwfQkJCSIpICAgICAgLyogUG9wIFIwLgkJCQkJCSovDQorCSNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkJCQkJCQkJCQkJCQlcDQorCQlfX2FzbSB2b2xhdGlsZSAoCQkJCQkJCQkJCQkJCQkJXA0KKwkJCSJTVE1EQglTUCEsIHtSMH0JCVxuXHQiCS8qIFB1c2ggUjAuCQkJCQkJKi8JXA0KKwkJCSJNUlMJUjAsIENQU1IJCVxuXHQiCS8qIEdldCBDUFNSLgkJCQkJKi8JXA0KKwkJCSJCSUMJUjAsIFIwLCAjMHhDMAlcblx0IgkvKiBFbmFibGUgSVJRLCBGSVEuCQkJCSovCVwNCisJCQkiTVNSCUNQU1IsIFIwCQlcblx0IgkvKiBXcml0ZSBiYWNrIG1vZGlmaWVkIHZhbHVlLgkqLwlcDQorCQkJIkxETUlBCVNQISwge1IwfQkJCSIgKQkvKiBQb3AgUjAuCQkJCQkJKi8NCiANCi0gICAgI2VuZGlmIC8qIFRIVU1CX0lOVEVSV09SSyAqLw0KKyNlbmRpZiAvKiBUSFVNQl9JTlRFUldPUksgKi8NCiANCi0gICAgZXh0ZXJuIHZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICk7DQotICAgIGV4dGVybiB2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCiANCi0gICAgI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKSAgICB2UG9ydEVudGVyQ3JpdGljYWwoKTsNCi0gICAgI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpICAgICB2UG9ydEV4aXRDcml0aWNhbCgpOw0KKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkJCXZQb3J0RW50ZXJDcml0aWNhbCgpOw0KKyNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKQkJCXZQb3J0RXhpdENyaXRpY2FsKCk7DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQotICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KLSAgICAjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgICAgICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgfQ0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQogDQogI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvR0NDL0FSTV9DQTUzXzY0X0JJVC9wb3J0LmMgYi9wb3J0YWJsZS9HQ0MvQVJNX0NBNTNfNjRfQklUL3BvcnQuYwppbmRleCBkNTNjY2M3Li4xZDI2ZTg2IDEwMDY0NAotLS0gYS9wb3J0YWJsZS9HQ0MvQVJNX0NBNTNfNjRfQklUL3BvcnQuYworKysgYi9wb3J0YWJsZS9HQ0MvQVJNX0NBNTNfNjRfQklUL3BvcnQuYwpAQCAtMzMsMTA0ICszMywxMDQgQEAKICNpbmNsdWRlICJ0YXNrLmgiDQogDQogI2lmbmRlZiBjb25maWdJTlRFUlJVUFRfQ09OVFJPTExFUl9CQVNFX0FERFJFU1MNCi0gICAgI2Vycm9yIGNvbmZpZ0lOVEVSUlVQVF9DT05UUk9MTEVSX0JBU0VfQUREUkVTUyBtdXN0IGJlIGRlZmluZWQuICBTZWUgaHR0cDogLyp3d3cuZnJlZXJ0b3Mub3JnL1VzaW5nLUZyZWVSVE9TLW9uLUNvcnRleC1BLUVtYmVkZGVkLVByb2Nlc3NvcnMuaHRtbCAqLw0KKwkjZXJyb3IgY29uZmlnSU5URVJSVVBUX0NPTlRST0xMRVJfQkFTRV9BRERSRVNTIG11c3QgYmUgZGVmaW5lZC4gIFNlZSBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9Vc2luZy1GcmVlUlRPUy1vbi1Db3J0ZXgtQS1FbWJlZGRlZC1Qcm9jZXNzb3JzLmh0bWwNCiAjZW5kaWYNCiANCiAjaWZuZGVmIGNvbmZpZ0lOVEVSUlVQVF9DT05UUk9MTEVSX0NQVV9JTlRFUkZBQ0VfT0ZGU0VUDQotICAgICNlcnJvciBjb25maWdJTlRFUlJVUFRfQ09OVFJPTExFUl9DUFVfSU5URVJGQUNFX09GRlNFVCBtdXN0IGJlIGRlZmluZWQuICBTZWUgaHR0cDogLyp3d3cuZnJlZXJ0b3Mub3JnL1VzaW5nLUZyZWVSVE9TLW9uLUNvcnRleC1BLUVtYmVkZGVkLVByb2Nlc3NvcnMuaHRtbCAqLw0KKwkjZXJyb3IgY29uZmlnSU5URVJSVVBUX0NPTlRST0xMRVJfQ1BVX0lOVEVSRkFDRV9PRkZTRVQgbXVzdCBiZSBkZWZpbmVkLiAgU2VlIGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL1VzaW5nLUZyZWVSVE9TLW9uLUNvcnRleC1BLUVtYmVkZGVkLVByb2Nlc3NvcnMuaHRtbA0KICNlbmRpZg0KIA0KICNpZm5kZWYgY29uZmlnVU5JUVVFX0lOVEVSUlVQVF9QUklPUklUSUVTDQotICAgICNlcnJvciBjb25maWdVTklRVUVfSU5URVJSVVBUX1BSSU9SSVRJRVMgbXVzdCBiZSBkZWZpbmVkLiAgU2VlIGh0dHA6IC8qd3d3LmZyZWVydG9zLm9yZy9Vc2luZy1GcmVlUlRPUy1vbi1Db3J0ZXgtQS1FbWJlZGRlZC1Qcm9jZXNzb3JzLmh0bWwgKi8NCisJI2Vycm9yIGNvbmZpZ1VOSVFVRV9JTlRFUlJVUFRfUFJJT1JJVElFUyBtdXN0IGJlIGRlZmluZWQuICBTZWUgaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvVXNpbmctRnJlZVJUT1Mtb24tQ29ydGV4LUEtRW1iZWRkZWQtUHJvY2Vzc29ycy5odG1sDQogI2VuZGlmDQogDQogI2lmbmRlZiBjb25maWdTRVRVUF9USUNLX0lOVEVSUlVQVA0KLSAgICAjZXJyb3IgY29uZmlnU0VUVVBfVElDS19JTlRFUlJVUFQoKSBtdXN0IGJlIGRlZmluZWQuICBTZWUgaHR0cDogLyp3d3cuZnJlZXJ0b3Mub3JnL1VzaW5nLUZyZWVSVE9TLW9uLUNvcnRleC1BLUVtYmVkZGVkLVByb2Nlc3NvcnMuaHRtbCAqLw0KKwkjZXJyb3IgY29uZmlnU0VUVVBfVElDS19JTlRFUlJVUFQoKSBtdXN0IGJlIGRlZmluZWQuICBTZWUgaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvVXNpbmctRnJlZVJUT1Mtb24tQ29ydGV4LUEtRW1iZWRkZWQtUHJvY2Vzc29ycy5odG1sDQogI2VuZGlmIC8qIGNvbmZpZ1NFVFVQX1RJQ0tfSU5URVJSVVBUICovDQogDQogI2lmbmRlZiBjb25maWdNQVhfQVBJX0NBTExfSU5URVJSVVBUX1BSSU9SSVRZDQotICAgICNlcnJvciBjb25maWdNQVhfQVBJX0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIG11c3QgYmUgZGVmaW5lZC4gIFNlZSBodHRwOiAvKnd3dy5mcmVlcnRvcy5vcmcvVXNpbmctRnJlZVJUT1Mtb24tQ29ydGV4LUEtRW1iZWRkZWQtUHJvY2Vzc29ycy5odG1sICovDQorCSNlcnJvciBjb25maWdNQVhfQVBJX0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIG11c3QgYmUgZGVmaW5lZC4gIFNlZSBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9Vc2luZy1GcmVlUlRPUy1vbi1Db3J0ZXgtQS1FbWJlZGRlZC1Qcm9jZXNzb3JzLmh0bWwNCiAjZW5kaWYNCiANCiAjaWYgY29uZmlnTUFYX0FQSV9DQUxMX0lOVEVSUlVQVF9QUklPUklUWSA9PSAwDQotICAgICNlcnJvciBjb25maWdNQVhfQVBJX0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIG11c3Qgbm90IGJlIHNldCB0byAwDQorCSNlcnJvciBjb25maWdNQVhfQVBJX0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIG11c3Qgbm90IGJlIHNldCB0byAwDQogI2VuZGlmDQogDQogI2lmIGNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgPiBjb25maWdVTklRVUVfSU5URVJSVVBUX1BSSU9SSVRJRVMNCi0gICAgI2Vycm9yIGNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gY29uZmlnVU5JUVVFX0lOVEVSUlVQVF9QUklPUklUSUVTIGFzIHRoZSBsb3dlciB0aGUgbnVtZXJpYyBwcmlvcml0eSB2YWx1ZSB0aGUgaGlnaGVyIHRoZSBsb2dpY2FsIGludGVycnVwdCBwcmlvcml0eQ0KKwkjZXJyb3IgY29uZmlnTUFYX0FQSV9DQUxMX0lOVEVSUlVQVF9QUklPUklUWSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBjb25maWdVTklRVUVfSU5URVJSVVBUX1BSSU9SSVRJRVMgYXMgdGhlIGxvd2VyIHRoZSBudW1lcmljIHByaW9yaXR5IHZhbHVlIHRoZSBoaWdoZXIgdGhlIGxvZ2ljYWwgaW50ZXJydXB0IHByaW9yaXR5DQogI2VuZGlmDQogDQogI2lmIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiA9PSAxDQotICAgIC8qIENoZWNrIHRoZSBjb25maWd1cmF0aW9uLiAqLw0KLSAgICAjaWYgKCBjb25maWdNQVhfUFJJT1JJVElFUyA+IDMyICkNCi0gICAgICAgICNlcnJvciBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gY2FuIG9ubHkgYmUgc2V0IHRvIDEgd2hlbiBjb25maWdNQVhfUFJJT1JJVElFUyBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMzIuICBJdCBpcyB2ZXJ5IHJhcmUgdGhhdCBhIHN5c3RlbSByZXF1aXJlcyBtb3JlIHRoYW4gMTAgdG8gMTUgZGlmZmVyZW5jZSBwcmlvcml0aWVzIGFzIHRhc2tzIHRoYXQgc2hhcmUgYSBwcmlvcml0eSB3aWxsIHRpbWUgc2xpY2UuDQotICAgICNlbmRpZg0KKwkvKiBDaGVjayB0aGUgY29uZmlndXJhdGlvbi4gKi8NCisJI2lmKCBjb25maWdNQVhfUFJJT1JJVElFUyA+IDMyICkNCisJCSNlcnJvciBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gY2FuIG9ubHkgYmUgc2V0IHRvIDEgd2hlbiBjb25maWdNQVhfUFJJT1JJVElFUyBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMzIuICBJdCBpcyB2ZXJ5IHJhcmUgdGhhdCBhIHN5c3RlbSByZXF1aXJlcyBtb3JlIHRoYW4gMTAgdG8gMTUgZGlmZmVyZW5jZSBwcmlvcml0aWVzIGFzIHRhc2tzIHRoYXQgc2hhcmUgYSBwcmlvcml0eSB3aWxsIHRpbWUgc2xpY2UuDQorCSNlbmRpZg0KICNlbmRpZiAvKiBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gKi8NCiANCiAvKiBJbiBjYXNlIHNlY3VyaXR5IGV4dGVuc2lvbnMgYXJlIGltcGxlbWVudGVkLiAqLw0KICNpZiBjb25maWdNQVhfQVBJX0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIDw9ICggY29uZmlnVU5JUVVFX0lOVEVSUlVQVF9QUklPUklUSUVTIC8gMiApDQotICAgICNlcnJvciBjb25maWdNQVhfQVBJX0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIG11c3QgYmUgZ3JlYXRlciB0aGFuICggY29uZmlnVU5JUVVFX0lOVEVSUlVQVF9QUklPUklUSUVTIC8gMiApDQorCSNlcnJvciBjb25maWdNQVhfQVBJX0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIG11c3QgYmUgZ3JlYXRlciB0aGFuICggY29uZmlnVU5JUVVFX0lOVEVSUlVQVF9QUklPUklUSUVTIC8gMiApDQogI2VuZGlmDQogDQogLyogU29tZSB2ZW5kb3Igc3BlY2lmaWMgZmlsZXMgZGVmYXVsdCBjb25maWdDTEVBUl9USUNLX0lOVEVSUlVQVCgpIGluDQotICogcG9ydG1hY3JvLmguICovDQorcG9ydG1hY3JvLmguICovDQogI2lmbmRlZiBjb25maWdDTEVBUl9USUNLX0lOVEVSUlVQVA0KLSAgICAjZGVmaW5lIGNvbmZpZ0NMRUFSX1RJQ0tfSU5URVJSVVBUKCkNCisJI2RlZmluZSBjb25maWdDTEVBUl9USUNLX0lOVEVSUlVQVCgpDQogI2VuZGlmDQogDQogLyogQSBjcml0aWNhbCBzZWN0aW9uIGlzIGV4aXRlZCB3aGVuIHRoZSBjcml0aWNhbCBzZWN0aW9uIG5lc3RpbmcgY291bnQgcmVhY2hlcw0KLSAqIHRoaXMgdmFsdWUuICovDQotI2RlZmluZSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyAgICAgICAgICAoICggc2l6ZV90ICkgMCApDQordGhpcyB2YWx1ZS4gKi8NCisjZGVmaW5lIHBvcnROT19DUklUSUNBTF9ORVNUSU5HCQkJKCAoIHNpemVfdCApIDAgKQ0KIA0KIC8qIEluIGFsbCBHSUNzIDI1NSBjYW4gYmUgd3JpdHRlbiB0byB0aGUgcHJpb3JpdHkgbWFzayByZWdpc3RlciB0byB1bm1hc2sgYWxsDQotICogKGJ1dCB0aGUgbG93ZXN0KSBpbnRlcnJ1cHQgcHJpb3JpdHkuICovDQotI2RlZmluZSBwb3J0VU5NQVNLX1ZBTFVFICAgICAgICAgICAgICAgICAoIDB4RkZVTCApDQorKGJ1dCB0aGUgbG93ZXN0KSBpbnRlcnJ1cHQgcHJpb3JpdHkuICovDQorI2RlZmluZSBwb3J0VU5NQVNLX1ZBTFVFCQkJCSggMHhGRlVMICkNCiANCiAvKiBUYXNrcyBhcmUgbm90IGNyZWF0ZWQgd2l0aCBhIGZsb2F0aW5nIHBvaW50IGNvbnRleHQsIGJ1dCBjYW4gYmUgZ2l2ZW4gYQ0KLSAqIGZsb2F0aW5nIHBvaW50IGNvbnRleHQgYWZ0ZXIgdGhleSBoYXZlIGJlZW4gY3JlYXRlZC4gIEEgdmFyaWFibGUgaXMgc3RvcmVkIGFzDQotICogcGFydCBvZiB0aGUgdGFza3MgY29udGV4dCB0aGF0IGhvbGRzIHBvcnROT19GTE9BVElOR19QT0lOVF9DT05URVhUIGlmIHRoZSB0YXNrDQotICogZG9lcyBub3QgaGF2ZSBhbiBGUFUgY29udGV4dCwgb3IgYW55IG90aGVyIHZhbHVlIGlmIHRoZSB0YXNrIGRvZXMgaGF2ZSBhbiBGUFUNCi0gKiBjb250ZXh0LiAqLw0KLSNkZWZpbmUgcG9ydE5PX0ZMT0FUSU5HX1BPSU5UX0NPTlRFWFQgICAgKCAoIFN0YWNrVHlwZV90ICkgMCApDQorZmxvYXRpbmcgcG9pbnQgY29udGV4dCBhZnRlciB0aGV5IGhhdmUgYmVlbiBjcmVhdGVkLiAgQSB2YXJpYWJsZSBpcyBzdG9yZWQgYXMNCitwYXJ0IG9mIHRoZSB0YXNrcyBjb250ZXh0IHRoYXQgaG9sZHMgcG9ydE5PX0ZMT0FUSU5HX1BPSU5UX0NPTlRFWFQgaWYgdGhlIHRhc2sNCitkb2VzIG5vdCBoYXZlIGFuIEZQVSBjb250ZXh0LCBvciBhbnkgb3RoZXIgdmFsdWUgaWYgdGhlIHRhc2sgZG9lcyBoYXZlIGFuIEZQVQ0KK2NvbnRleHQuICovDQorI2RlZmluZSBwb3J0Tk9fRkxPQVRJTkdfUE9JTlRfQ09OVEVYVAkoICggU3RhY2tUeXBlX3QgKSAwICkNCiANCiAvKiBDb25zdGFudHMgcmVxdWlyZWQgdG8gc2V0dXAgdGhlIGluaXRpYWwgdGFzayBjb250ZXh0LiAqLw0KLSNkZWZpbmUgcG9ydFNQX0VMeCAgICAgICAgICAgICAgICAgICAgICAgKCAoIFN0YWNrVHlwZV90ICkgMHgwMSApDQotI2RlZmluZSBwb3J0U1BfRUwwICAgICAgICAgICAgICAgICAgICAgICAoICggU3RhY2tUeXBlX3QgKSAweDAwICkNCisjZGVmaW5lIHBvcnRTUF9FTHgJCQkJCQkoICggU3RhY2tUeXBlX3QgKSAweDAxICkNCisjZGVmaW5lIHBvcnRTUF9FTDAJCQkJCQkoICggU3RhY2tUeXBlX3QgKSAweDAwICkNCiANCiAjaWYgZGVmaW5lZCggR1VFU1QgKQ0KLSAgICAjZGVmaW5lIHBvcnRFTDEgICAgICAgICAgICAgICAgICAgICAgKCAoIFN0YWNrVHlwZV90ICkgMHgwNCApDQotICAgICNkZWZpbmUgcG9ydElOSVRJQUxfUFNUQVRFICAgICAgICAgICAoIHBvcnRFTDEgfCBwb3J0U1BfRUwwICkNCisJI2RlZmluZSBwb3J0RUwxCQkJCQkJKCAoIFN0YWNrVHlwZV90ICkgMHgwNCApDQorCSNkZWZpbmUgcG9ydElOSVRJQUxfUFNUQVRFCQkJCSggcG9ydEVMMSB8IHBvcnRTUF9FTDAgKQ0KICNlbHNlDQotICAgICNkZWZpbmUgcG9ydEVMMyAgICAgICAgICAgICAgICAgICAgICAoICggU3RhY2tUeXBlX3QgKSAweDBjICkNCi0gICAgLyogQXQgdGhlIHRpbWUgb2Ygd3JpdGluZywgdGhlIEJTUCBvbmx5IHN1cHBvcnRzIEVMMy4gKi8NCi0gICAgI2RlZmluZSBwb3J0SU5JVElBTF9QU1RBVEUgICAgICAgICAgICggcG9ydEVMMyB8IHBvcnRTUF9FTDAgKQ0KKwkjZGVmaW5lIHBvcnRFTDMJCQkJCQkoICggU3RhY2tUeXBlX3QgKSAweDBjICkNCisJLyogQXQgdGhlIHRpbWUgb2Ygd3JpdGluZywgdGhlIEJTUCBvbmx5IHN1cHBvcnRzIEVMMy4gKi8NCisJI2RlZmluZSBwb3J0SU5JVElBTF9QU1RBVEUJCQkoIHBvcnRFTDMgfCBwb3J0U1BfRUwwICkNCiAjZW5kaWYNCiANCiANCiAvKiBVc2VkIGJ5IHBvcnRBU1NFUlRfSUZfSU5URVJSVVBUX1BSSU9SSVRZX0lOVkFMSUQoKSB3aGVuIGVuc3VyaW5nIHRoZSBiaW5hcnkNCi0gKiBwb2ludCBpcyB6ZXJvLiAqLw0KLSNkZWZpbmUgcG9ydEJJTkFSWV9QT0lOVF9CSVRTICAgICAgKCAoIHVpbnQ4X3QgKSAweDAzICkNCitwb2ludCBpcyB6ZXJvLiAqLw0KKyNkZWZpbmUgcG9ydEJJTkFSWV9QT0lOVF9CSVRTCQkJKCAoIHVpbnQ4X3QgKSAweDAzICkNCiANCiAvKiBNYXNrcyBhbGwgYml0cyBpbiB0aGUgQVBTUiBvdGhlciB0aGFuIHRoZSBtb2RlIGJpdHMuICovDQotI2RlZmluZSBwb3J0QVBTUl9NT0RFX0JJVFNfTUFTSyAgICAoIDB4MEMgKQ0KKyNkZWZpbmUgcG9ydEFQU1JfTU9ERV9CSVRTX01BU0sJCQkoIDB4MEMgKQ0KIA0KIC8qIFRoZSBJIGJpdCBpbiB0aGUgREFJRiBiaXRzLiAqLw0KLSNkZWZpbmUgcG9ydERBSUZfSSAgICAgICAgICAgICAgICAgKCAweDgwICkNCisjZGVmaW5lIHBvcnREQUlGX0kJCQkJCQkoIDB4ODAgKQ0KIA0KIC8qIE1hY3JvIHRvIHVubWFzayBhbGwgaW50ZXJydXB0IHByaW9yaXRpZXMuICovDQotI2RlZmluZSBwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0soKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBwb3J0SUNDUE1SX1BSSU9SSVRZX01BU0tfUkVHSVNURVIgPSBwb3J0VU5NQVNLX1ZBTFVFOyBcDQotICAgICAgICBfX2FzbSB2b2xhdGlsZSAoICJEU0IgU1kJCVxuIiAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICJJU0IgU1kJCVxuIik7ICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgfQ0KKyNkZWZpbmUgcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLKCkJCQkJCQkJCQlcDQorewkJCQkJCQkJCQkJCQkJCQkJXA0KKwlwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7CQkJCQkJCQkJCVwNCisJcG9ydElDQ1BNUl9QUklPUklUWV9NQVNLX1JFR0lTVEVSID0gcG9ydFVOTUFTS19WQUxVRTsJCQlcDQorCV9fYXNtIHZvbGF0aWxlICgJIkRTQiBTWQkJXG4iCQkJCQkJCQlcDQorCQkJCQkJIklTQiBTWQkJXG4iICk7CQkJCQkJCVwNCisJcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7CQkJCQkJCQkJCVwNCit9DQogDQogLyogSGFyZHdhcmUgc3BlY2lmaWNzIHVzZWQgd2hlbiBzYW5pdHkgY2hlY2tpbmcgdGhlIGNvbmZpZ3VyYXRpb24uICovDQotI2RlZmluZSBwb3J0SU5URVJSVVBUX1BSSU9SSVRZX1JFR0lTVEVSX09GRlNFVCAgICAweDQwMFVMDQotI2RlZmluZSBwb3J0TUFYXzhfQklUX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAoICggdWludDhfdCApIDB4ZmYgKQ0KLSNkZWZpbmUgcG9ydEJJVF8wX1NFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVpbnQ4X3QgKSAweDAxICkNCisjZGVmaW5lIHBvcnRJTlRFUlJVUFRfUFJJT1JJVFlfUkVHSVNURVJfT0ZGU0VUCQkweDQwMFVMDQorI2RlZmluZSBwb3J0TUFYXzhfQklUX1ZBTFVFCQkJCQkJCSggKCB1aW50OF90ICkgMHhmZiApDQorI2RlZmluZSBwb3J0QklUXzBfU0VUCQkJCQkJCQkoICggdWludDhfdCApIDB4MDEgKQ0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KQEAgLTE0MywzODEgKzE0MywzNzYgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIEEgdmFyaWFibGUgaXMgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSBjcml0aWNhbCBzZWN0aW9uIG5lc3RpbmcuICBUaGlzDQotICogdmFyaWFibGUgaGFzIHRvIGJlIHN0b3JlZCBhcyBwYXJ0IG9mIHRoZSB0YXNrIGNvbnRleHQgYW5kIG11c3QgYmUgaW5pdGlhbGlzZWQgdG8NCi0gKiBhIG5vbiB6ZXJvIHZhbHVlIHRvIGVuc3VyZSBpbnRlcnJ1cHRzIGRvbid0IGluYWR2ZXJ0ZW50bHkgYmVjb21lIHVubWFza2VkIGJlZm9yZQ0KLSAqIHRoZSBzY2hlZHVsZXIgc3RhcnRzLiAgQXMgaXQgaXMgc3RvcmVkIGFzIHBhcnQgb2YgdGhlIHRhc2sgY29udGV4dCBpdCB3aWxsDQotICogYXV0b21hdGljYWxseSBiZSBzZXQgdG8gMCB3aGVuIHRoZSBmaXJzdCB0YXNrIGlzIHN0YXJ0ZWQuICovDQordmFyaWFibGUgaGFzIHRvIGJlIHN0b3JlZCBhcyBwYXJ0IG9mIHRoZSB0YXNrIGNvbnRleHQgYW5kIG11c3QgYmUgaW5pdGlhbGlzZWQgdG8NCithIG5vbiB6ZXJvIHZhbHVlIHRvIGVuc3VyZSBpbnRlcnJ1cHRzIGRvbid0IGluYWR2ZXJ0ZW50bHkgYmVjb21lIHVubWFza2VkIGJlZm9yZQ0KK3RoZSBzY2hlZHVsZXIgc3RhcnRzLiAgQXMgaXQgaXMgc3RvcmVkIGFzIHBhcnQgb2YgdGhlIHRhc2sgY29udGV4dCBpdCB3aWxsDQorYXV0b21hdGljYWxseSBiZSBzZXQgdG8gMCB3aGVuIHRoZSBmaXJzdCB0YXNrIGlzIHN0YXJ0ZWQuICovDQogdm9sYXRpbGUgdWludDY0X3QgdWxsQ3JpdGljYWxOZXN0aW5nID0gOTk5OVVMTDsNCiANCiAvKiBTYXZlZCBhcyBwYXJ0IG9mIHRoZSB0YXNrIGNvbnRleHQuICBJZiB1bGxQb3J0VGFza0hhc0ZQVUNvbnRleHQgaXMgbm9uLXplcm8NCi0gKiB0aGVuIGZsb2F0aW5nIHBvaW50IGNvbnRleHQgbXVzdCBiZSBzYXZlZCBhbmQgcmVzdG9yZWQgZm9yIHRoZSB0YXNrLiAqLw0KK3RoZW4gZmxvYXRpbmcgcG9pbnQgY29udGV4dCBtdXN0IGJlIHNhdmVkIGFuZCByZXN0b3JlZCBmb3IgdGhlIHRhc2suICovDQogdWludDY0X3QgdWxsUG9ydFRhc2tIYXNGUFVDb250ZXh0ID0gcGRGQUxTRTsNCiANCiAvKiBTZXQgdG8gMSB0byBwZW5kIGEgY29udGV4dCBzd2l0Y2ggZnJvbSBhbiBJU1IuICovDQogdWludDY0X3QgdWxsUG9ydFlpZWxkUmVxdWlyZWQgPSBwZEZBTFNFOw0KIA0KIC8qIENvdW50cyB0aGUgaW50ZXJydXB0IG5lc3RpbmcgZGVwdGguICBBIGNvbnRleHQgc3dpdGNoIGlzIG9ubHkgcGVyZm9ybWVkIGlmDQotICogaWYgdGhlIG5lc3RpbmcgZGVwdGggaXMgMC4gKi8NCitpZiB0aGUgbmVzdGluZyBkZXB0aCBpcyAwLiAqLw0KIHVpbnQ2NF90IHVsbFBvcnRJbnRlcnJ1cHROZXN0aW5nID0gMDsNCiANCiAvKiBVc2VkIGluIHRoZSBBU00gY29kZS4gKi8NCi1fX2F0dHJpYnV0ZV9fKCAoIHVzZWQgKSApIGNvbnN0IHVpbnQ2NF90IHVsbElDQ0VPSVIgPSBwb3J0SUNDRU9JUl9FTkRfT0ZfSU5URVJSVVBUX1JFR0lTVEVSX0FERFJFU1M7DQotX19hdHRyaWJ1dGVfXyggKCB1c2VkICkgKSBjb25zdCB1aW50NjRfdCB1bGxJQ0NJQVIgPSBwb3J0SUNDSUFSX0lOVEVSUlVQVF9BQ0tOT1dMRURHRV9SRUdJU1RFUl9BRERSRVNTOw0KLV9fYXR0cmlidXRlX18oICggdXNlZCApICkgY29uc3QgdWludDY0X3QgdWxsSUNDUE1SID0gcG9ydElDQ1BNUl9QUklPUklUWV9NQVNLX1JFR0lTVEVSX0FERFJFU1M7DQotX19hdHRyaWJ1dGVfXyggKCB1c2VkICkgKSBjb25zdCB1aW50NjRfdCB1bGxNYXhBUElQcmlvcml0eU1hc2sgPSAoIGNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgPDwgcG9ydFBSSU9SSVRZX1NISUZUICk7DQorX19hdHRyaWJ1dGVfXygoIHVzZWQgKSkgY29uc3QgdWludDY0X3QgdWxsSUNDRU9JUiA9IHBvcnRJQ0NFT0lSX0VORF9PRl9JTlRFUlJVUFRfUkVHSVNURVJfQUREUkVTUzsNCitfX2F0dHJpYnV0ZV9fKCggdXNlZCApKSBjb25zdCB1aW50NjRfdCB1bGxJQ0NJQVIgPSBwb3J0SUNDSUFSX0lOVEVSUlVQVF9BQ0tOT1dMRURHRV9SRUdJU1RFUl9BRERSRVNTOw0KK19fYXR0cmlidXRlX18oKCB1c2VkICkpIGNvbnN0IHVpbnQ2NF90IHVsbElDQ1BNUiA9IHBvcnRJQ0NQTVJfUFJJT1JJVFlfTUFTS19SRUdJU1RFUl9BRERSRVNTOw0KK19fYXR0cmlidXRlX18oKCB1c2VkICkpIGNvbnN0IHVpbnQ2NF90IHVsbE1heEFQSVByaW9yaXR5TWFzayA9ICggY29uZmlnTUFYX0FQSV9DQUxMX0lOVEVSUlVQVF9QUklPUklUWSA8PCBwb3J0UFJJT1JJVFlfU0hJRlQgKTsNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKg0KICAqIFNlZSBoZWFkZXIgZmlsZSBmb3IgZGVzY3JpcHRpb24uDQogICovDQotU3RhY2tUeXBlX3QgKiBweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICogcHhUb3BPZlN0YWNrLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYXNrRnVuY3Rpb25fdCBweENvZGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KK1N0YWNrVHlwZV90ICpweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICpweFRvcE9mU3RhY2ssIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzICkNCiB7DQotICAgIC8qIFNldHVwIHRoZSBpbml0aWFsIHN0YWNrIG9mIHRoZSB0YXNrLiAgVGhlIHN0YWNrIGlzIHNldCBleGFjdGx5IGFzDQotICAgICAqIGV4cGVjdGVkIGJ5IHRoZSBwb3J0UkVTVE9SRV9DT05URVhUKCkgbWFjcm8uICovDQorCS8qIFNldHVwIHRoZSBpbml0aWFsIHN0YWNrIG9mIHRoZSB0YXNrLiAgVGhlIHN0YWNrIGlzIHNldCBleGFjdGx5IGFzDQorCWV4cGVjdGVkIGJ5IHRoZSBwb3J0UkVTVE9SRV9DT05URVhUKCkgbWFjcm8uICovDQogDQotICAgIC8qIEZpcnN0IGFsbCB0aGUgZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycy4gKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAweDAxMDEwMTAxMDEwMTAxMDFVTEw7ICAgICAgICAvKiBSMSAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwdlBhcmFtZXRlcnM7IC8qIFIwICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMHgwMzAzMDMwMzAzMDMwMzAzVUxMOyAgICAgICAgLyogUjMgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAweDAyMDIwMjAyMDIwMjAyMDJVTEw7ICAgICAgICAvKiBSMiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MDUwNTA1MDUwNTA1MDUwNVVMTDsgICAgICAgIC8qIFI1ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMHgwNDA0MDQwNDA0MDQwNDA0VUxMOyAgICAgICAgLyogUjQgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAweDA3MDcwNzA3MDcwNzA3MDdVTEw7ICAgICAgICAvKiBSNyAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MDYwNjA2MDYwNjA2MDYwNlVMTDsgICAgICAgIC8qIFI2ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMHgwOTA5MDkwOTA5MDkwOTA5VUxMOyAgICAgICAgLyogUjkgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAweDA4MDgwODA4MDgwODA4MDhVTEw7ICAgICAgICAvKiBSOCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MTExMTExMTExMTExMTExMVVMTDsgICAgICAgIC8qIFIxMSAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MTAxMDEwMTAxMDEwMTAxMFVMTDsgICAgICAgIC8qIFIxMCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MTMxMzEzMTMxMzEzMTMxM1VMTDsgICAgICAgIC8qIFIxMyAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MTIxMjEyMTIxMjEyMTIxMlVMTDsgICAgICAgIC8qIFIxMiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MTUxNTE1MTUxNTE1MTUxNVVMTDsgICAgICAgIC8qIFIxNSAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MTQxNDE0MTQxNDE0MTQxNFVMTDsgICAgICAgIC8qIFIxNCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MTcxNzE3MTcxNzE3MTcxN1VMTDsgICAgICAgIC8qIFIxNyAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MTYxNjE2MTYxNjE2MTYxNlVMTDsgICAgICAgIC8qIFIxNiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MTkxOTE5MTkxOTE5MTkxOVVMTDsgICAgICAgIC8qIFIxOSAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MTgxODE4MTgxODE4MTgxOFVMTDsgICAgICAgIC8qIFIxOCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MjEyMTIxMjEyMTIxMjEyMVVMTDsgICAgICAgIC8qIFIyMSAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MjAyMDIwMjAyMDIwMjAyMFVMTDsgICAgICAgIC8qIFIyMCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MjMyMzIzMjMyMzIzMjMyM1VMTDsgICAgICAgIC8qIFIyMyAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MjIyMjIyMjIyMjIyMjIyMlVMTDsgICAgICAgIC8qIFIyMiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MjUyNTI1MjUyNTI1MjUyNVVMTDsgICAgICAgIC8qIFIyNSAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MjQyNDI0MjQyNDI0MjQyNFVMTDsgICAgICAgIC8qIFIyNCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MjcyNzI3MjcyNzI3MjcyN1VMTDsgICAgICAgIC8qIFIyNyAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MjYyNjI2MjYyNjI2MjYyNlVMTDsgICAgICAgIC8qIFIyNiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MjkyOTI5MjkyOTI5MjkyOVVMTDsgICAgICAgIC8qIFIyOSAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MjgyODI4MjgyODI4MjgyOFVMTDsgICAgICAgIC8qIFIyOCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAwOyAgICAgICAgIC8qIFhaUiAtIGhhcyBubyBlZmZlY3QsIHVzZWQgc28gdGhlcmUgYXJlIGFuIGV2ZW4gbnVtYmVyIG9mIHJlZ2lzdGVycy4gKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMDsgICAgICAgICAvKiBSMzAgLSBwcm9jZWR1cmUgY2FsbCBsaW5rIHJlZ2lzdGVyLiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJLyogRmlyc3QgYWxsIHRoZSBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MDEwMTAxMDEwMTAxMDEwMVVMTDsJLyogUjEgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHZQYXJhbWV0ZXJzOyAvKiBSMCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MDMwMzAzMDMwMzAzMDMwM1VMTDsJLyogUjMgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDAyMDIwMjAyMDIwMjAyMDJVTEw7CS8qIFIyICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgwNTA1MDUwNTA1MDUwNTA1VUxMOwkvKiBSNSAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MDQwNDA0MDQwNDA0MDQwNFVMTDsJLyogUjQgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDA3MDcwNzA3MDcwNzA3MDdVTEw7CS8qIFI3ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgwNjA2MDYwNjA2MDYwNjA2VUxMOwkvKiBSNiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MDkwOTA5MDkwOTA5MDkwOVVMTDsJLyogUjkgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDA4MDgwODA4MDgwODA4MDhVTEw7CS8qIFI4ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgxMTExMTExMTExMTExMTExVUxMOwkvKiBSMTEgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDEwMTAxMDEwMTAxMDEwMTBVTEw7CS8qIFIxMCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MTMxMzEzMTMxMzEzMTMxM1VMTDsJLyogUjEzICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgxMjEyMTIxMjEyMTIxMjEyVUxMOwkvKiBSMTIgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDE1MTUxNTE1MTUxNTE1MTVVTEw7CS8qIFIxNSAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MTQxNDE0MTQxNDE0MTQxNFVMTDsJLyogUjE0ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgxNzE3MTcxNzE3MTcxNzE3VUxMOwkvKiBSMTcgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDE2MTYxNjE2MTYxNjE2MTZVTEw7CS8qIFIxNiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MTkxOTE5MTkxOTE5MTkxOVVMTDsJLyogUjE5ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgxODE4MTgxODE4MTgxODE4VUxMOwkvKiBSMTggKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDIxMjEyMTIxMjEyMTIxMjFVTEw7CS8qIFIyMSAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MjAyMDIwMjAyMDIwMjAyMFVMTDsJLyogUjIwICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgyMzIzMjMyMzIzMjMyMzIzVUxMOwkvKiBSMjMgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDIyMjIyMjIyMjIyMjIyMjJVTEw7CS8qIFIyMiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MjUyNTI1MjUyNTI1MjUyNVVMTDsJLyogUjI1ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgyNDI0MjQyNDI0MjQyNDI0VUxMOwkvKiBSMjQgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDI3MjcyNzI3MjcyNzI3MjdVTEw7CS8qIFIyNyAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MjYyNjI2MjYyNjI2MjYyNlVMTDsJLyogUjI2ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgyOTI5MjkyOTI5MjkyOTI5VUxMOwkvKiBSMjkgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDI4MjgyODI4MjgyODI4MjhVTEw7CS8qIFIyOCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAwOwkvKiBYWlIgLSBoYXMgbm8gZWZmZWN0LCB1c2VkIHNvIHRoZXJlIGFyZSBhbiBldmVuIG51bWJlciBvZiByZWdpc3RlcnMuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDA7CS8qIFIzMCAtIHByb2NlZHVyZSBjYWxsIGxpbmsgcmVnaXN0ZXIuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAqcHhUb3BPZlN0YWNrID0gcG9ydElOSVRJQUxfUFNUQVRFOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IHBvcnRJTklUSUFMX1BTVEFURTsNCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHhDb2RlOyAvKiBFeGNlcHRpb24gcmV0dXJuIGFkZHJlc3MuICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB4Q29kZTsgLyogRXhjZXB0aW9uIHJldHVybiBhZGRyZXNzLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgLyogVGhlIHRhc2sgd2lsbCBzdGFydCB3aXRoIGEgY3JpdGljYWwgbmVzdGluZyBjb3VudCBvZiAwIGFzIGludGVycnVwdHMgYXJlDQotICAgICAqIGVuYWJsZWQuICovDQotICAgICpweFRvcE9mU3RhY2sgPSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORzsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIFRoZSB0YXNrIHdpbGwgc3RhcnQgd2l0aCBhIGNyaXRpY2FsIG5lc3RpbmcgY291bnQgb2YgMCBhcyBpbnRlcnJ1cHRzIGFyZQ0KKwllbmFibGVkLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkc7DQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBUaGUgdGFzayB3aWxsIHN0YXJ0IHdpdGhvdXQgYSBmbG9hdGluZyBwb2ludCBjb250ZXh0LiAgQSB0YXNrIHRoYXQgdXNlcw0KLSAgICAgKiB0aGUgZmxvYXRpbmcgcG9pbnQgaGFyZHdhcmUgbXVzdCBjYWxsIHZQb3J0VGFza1VzZXNGUFUoKSBiZWZvcmUgZXhlY3V0aW5nDQotICAgICAqIGFueSBmbG9hdGluZyBwb2ludCBpbnN0cnVjdGlvbnMuICovDQotICAgICpweFRvcE9mU3RhY2sgPSBwb3J0Tk9fRkxPQVRJTkdfUE9JTlRfQ09OVEVYVDsNCisJLyogVGhlIHRhc2sgd2lsbCBzdGFydCB3aXRob3V0IGEgZmxvYXRpbmcgcG9pbnQgY29udGV4dC4gIEEgdGFzayB0aGF0IHVzZXMNCisJdGhlIGZsb2F0aW5nIHBvaW50IGhhcmR3YXJlIG11c3QgY2FsbCB2UG9ydFRhc2tVc2VzRlBVKCkgYmVmb3JlIGV4ZWN1dGluZw0KKwlhbnkgZmxvYXRpbmcgcG9pbnQgaW5zdHJ1Y3Rpb25zLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gcG9ydE5PX0ZMT0FUSU5HX1BPSU5UX0NPTlRFWFQ7DQogDQotICAgIHJldHVybiBweFRvcE9mU3RhY2s7DQorCXJldHVybiBweFRvcE9mU3RhY2s7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIEJhc2VUeXBlX3QgeFBvcnRTdGFydFNjaGVkdWxlciggdm9pZCApDQogew0KLSAgICB1aW50MzJfdCB1bEFQU1I7DQordWludDMyX3QgdWxBUFNSOw0KIA0KLSAgICAjaWYgKCBjb25maWdBU1NFUlRfREVGSU5FRCA9PSAxICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICB2b2xhdGlsZSB1aW50MzJfdCB1bE9yaWdpbmFsUHJpb3JpdHk7DQotICAgICAgICAgICAgdm9sYXRpbGUgdWludDhfdCAqIGNvbnN0IHB1Y0ZpcnN0VXNlclByaW9yaXR5UmVnaXN0ZXIgPSAoIHZvbGF0aWxlIHVpbnQ4X3QgKiBjb25zdCApICggY29uZmlnSU5URVJSVVBUX0NPTlRST0xMRVJfQkFTRV9BRERSRVNTICsgcG9ydElOVEVSUlVQVF9QUklPUklUWV9SRUdJU1RFUl9PRkZTRVQgKTsNCi0gICAgICAgICAgICB2b2xhdGlsZSB1aW50OF90IHVjTWF4UHJpb3JpdHlWYWx1ZTsNCisJI2lmKCBjb25maWdBU1NFUlRfREVGSU5FRCA9PSAxICkNCisJew0KKwkJdm9sYXRpbGUgdWludDMyX3QgdWxPcmlnaW5hbFByaW9yaXR5Ow0KKwkJdm9sYXRpbGUgdWludDhfdCAqIGNvbnN0IHB1Y0ZpcnN0VXNlclByaW9yaXR5UmVnaXN0ZXIgPSAoIHZvbGF0aWxlIHVpbnQ4X3QgKiBjb25zdCApICggY29uZmlnSU5URVJSVVBUX0NPTlRST0xMRVJfQkFTRV9BRERSRVNTICsgcG9ydElOVEVSUlVQVF9QUklPUklUWV9SRUdJU1RFUl9PRkZTRVQgKTsNCisJCXZvbGF0aWxlIHVpbnQ4X3QgdWNNYXhQcmlvcml0eVZhbHVlOw0KIA0KLSAgICAgICAgICAgIC8qIERldGVybWluZSBob3cgbWFueSBwcmlvcml0eSBiaXRzIGFyZSBpbXBsZW1lbnRlZCBpbiB0aGUgR0lDLg0KLSAgICAgICAgICAgICAqDQotICAgICAgICAgICAgICogU2F2ZSB0aGUgaW50ZXJydXB0IHByaW9yaXR5IHZhbHVlIHRoYXQgaXMgYWJvdXQgdG8gYmUgY2xvYmJlcmVkLiAqLw0KLSAgICAgICAgICAgIHVsT3JpZ2luYWxQcmlvcml0eSA9ICpwdWNGaXJzdFVzZXJQcmlvcml0eVJlZ2lzdGVyOw0KKwkJLyogRGV0ZXJtaW5lIGhvdyBtYW55IHByaW9yaXR5IGJpdHMgYXJlIGltcGxlbWVudGVkIGluIHRoZSBHSUMuDQogDQotICAgICAgICAgICAgLyogRGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgcHJpb3JpdHkgYml0cyBhdmFpbGFibGUuICBGaXJzdCB3cml0ZSB0bw0KLSAgICAgICAgICAgICAqIGFsbCBwb3NzaWJsZSBiaXRzLiAqLw0KLSAgICAgICAgICAgICpwdWNGaXJzdFVzZXJQcmlvcml0eVJlZ2lzdGVyID0gcG9ydE1BWF84X0JJVF9WQUxVRTsNCisJCVNhdmUgdGhlIGludGVycnVwdCBwcmlvcml0eSB2YWx1ZSB0aGF0IGlzIGFib3V0IHRvIGJlIGNsb2JiZXJlZC4gKi8NCisJCXVsT3JpZ2luYWxQcmlvcml0eSA9ICpwdWNGaXJzdFVzZXJQcmlvcml0eVJlZ2lzdGVyOw0KIA0KLSAgICAgICAgICAgIC8qIFJlYWQgdGhlIHZhbHVlIGJhY2sgdG8gc2VlIGhvdyBtYW55IGJpdHMgc3R1Y2suICovDQotICAgICAgICAgICAgdWNNYXhQcmlvcml0eVZhbHVlID0gKnB1Y0ZpcnN0VXNlclByaW9yaXR5UmVnaXN0ZXI7DQorCQkvKiBEZXRlcm1pbmUgdGhlIG51bWJlciBvZiBwcmlvcml0eSBiaXRzIGF2YWlsYWJsZS4gIEZpcnN0IHdyaXRlIHRvDQorCQlhbGwgcG9zc2libGUgYml0cy4gKi8NCisJCSpwdWNGaXJzdFVzZXJQcmlvcml0eVJlZ2lzdGVyID0gcG9ydE1BWF84X0JJVF9WQUxVRTsNCiANCi0gICAgICAgICAgICAvKiBTaGlmdCB0byB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cy4gKi8NCi0gICAgICAgICAgICB3aGlsZSggKCB1Y01heFByaW9yaXR5VmFsdWUgJiBwb3J0QklUXzBfU0VUICkgIT0gcG9ydEJJVF8wX1NFVCApDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICB1Y01heFByaW9yaXR5VmFsdWUgPj49ICggdWludDhfdCApIDB4MDE7DQotICAgICAgICAgICAgfQ0KKwkJLyogUmVhZCB0aGUgdmFsdWUgYmFjayB0byBzZWUgaG93IG1hbnkgYml0cyBzdHVjay4gKi8NCisJCXVjTWF4UHJpb3JpdHlWYWx1ZSA9ICpwdWNGaXJzdFVzZXJQcmlvcml0eVJlZ2lzdGVyOw0KIA0KLSAgICAgICAgICAgIC8qIFNhbml0eSBjaGVjayBjb25maWdVTklRVUVfSU5URVJSVVBUX1BSSU9SSVRJRVMgbWF0Y2hlcyB0aGUgcmVhZA0KLSAgICAgICAgICAgICAqIHZhbHVlLiAqLw0KKwkJLyogU2hpZnQgdG8gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdHMuICovDQorCQl3aGlsZSggKCB1Y01heFByaW9yaXR5VmFsdWUgJiBwb3J0QklUXzBfU0VUICkgIT0gcG9ydEJJVF8wX1NFVCApDQorCQl7DQorCQkJdWNNYXhQcmlvcml0eVZhbHVlID4+PSAoIHVpbnQ4X3QgKSAweDAxOw0KKwkJfQ0KIA0KLSAgICAgICAgICAgIGNvbmZpZ0FTU0VSVCggdWNNYXhQcmlvcml0eVZhbHVlID49IHBvcnRMT1dFU1RfSU5URVJSVVBUX1BSSU9SSVRZICk7DQorCQkvKiBTYW5pdHkgY2hlY2sgY29uZmlnVU5JUVVFX0lOVEVSUlVQVF9QUklPUklUSUVTIG1hdGNoZXMgdGhlIHJlYWQNCisJCXZhbHVlLiAqLw0KKw0KKwkJY29uZmlnQVNTRVJUKCB1Y01heFByaW9yaXR5VmFsdWUgPj0gcG9ydExPV0VTVF9JTlRFUlJVUFRfUFJJT1JJVFkgKTsNCiANCiANCi0gICAgICAgICAgICAvKiBSZXN0b3JlIHRoZSBjbG9iYmVyZWQgaW50ZXJydXB0IHByaW9yaXR5IHJlZ2lzdGVyIHRvIGl0cyBvcmlnaW5hbA0KLSAgICAgICAgICAgICAqIHZhbHVlLiAqLw0KLSAgICAgICAgICAgICpwdWNGaXJzdFVzZXJQcmlvcml0eVJlZ2lzdGVyID0gdWxPcmlnaW5hbFByaW9yaXR5Ow0KLSAgICAgICAgfQ0KLSAgICAjZW5kaWYgLyogY29uaWZnQVNTRVJUX0RFRklORUQgKi8NCisJCS8qIFJlc3RvcmUgdGhlIGNsb2JiZXJlZCBpbnRlcnJ1cHQgcHJpb3JpdHkgcmVnaXN0ZXIgdG8gaXRzIG9yaWdpbmFsDQorCQl2YWx1ZS4gKi8NCisJCSpwdWNGaXJzdFVzZXJQcmlvcml0eVJlZ2lzdGVyID0gdWxPcmlnaW5hbFByaW9yaXR5Ow0KKwl9DQorCSNlbmRpZiAvKiBjb25pZmdBU1NFUlRfREVGSU5FRCAqLw0KIA0KIA0KLSAgICAvKiBBdCB0aGUgdGltZSBvZiB3cml0aW5nLCB0aGUgQlNQIG9ubHkgc3VwcG9ydHMgRUwzLiAqLw0KLSAgICBfX2FzbSB2b2xhdGlsZSAoICJNUlMgJTAsIEN1cnJlbnRFTCIgOiAiPXIiICggdWxBUFNSICkgKTsNCi0gICAgdWxBUFNSICY9IHBvcnRBUFNSX01PREVfQklUU19NQVNLOw0KKwkvKiBBdCB0aGUgdGltZSBvZiB3cml0aW5nLCB0aGUgQlNQIG9ubHkgc3VwcG9ydHMgRUwzLiAqLw0KKwlfX2FzbSB2b2xhdGlsZSAoICJNUlMgJTAsIEN1cnJlbnRFTCIgOiAiPXIiICggdWxBUFNSICkgKTsNCisJdWxBUFNSICY9IHBvcnRBUFNSX01PREVfQklUU19NQVNLOw0KIA0KLSAgICAjaWYgZGVmaW5lZCggR1VFU1QgKQ0KLSAgICAjd2FybmluZyBCdWlsZGluZyBmb3IgZXhlY3V0aW9uIGFzIGEgZ3Vlc3QgdW5kZXIgWEVOLiBUSElTIElTIE5PVCBBIEZVTExZIFRFU1RFRCBQQVRILg0KLSAgICAgICAgY29uZmlnQVNTRVJUKCB1bEFQU1IgPT0gcG9ydEVMMSApOw0KKyNpZiBkZWZpbmVkKCBHVUVTVCApDQorCSN3YXJuaW5nIEJ1aWxkaW5nIGZvciBleGVjdXRpb24gYXMgYSBndWVzdCB1bmRlciBYRU4uIFRISVMgSVMgTk9UIEEgRlVMTFkgVEVTVEVEIFBBVEguDQorCWNvbmZpZ0FTU0VSVCggdWxBUFNSID09IHBvcnRFTDEgKTsNCisJaWYoIHVsQVBTUiA9PSBwb3J0RUwxICkNCisjZWxzZQ0KKwljb25maWdBU1NFUlQoIHVsQVBTUiA9PSBwb3J0RUwzICk7DQorCWlmKCB1bEFQU1IgPT0gcG9ydEVMMyApDQorI2VuZGlmDQorCXsNCisJCS8qIE9ubHkgY29udGludWUgaWYgdGhlIGJpbmFyeSBwb2ludCB2YWx1ZSBpcyBzZXQgdG8gaXRzIGxvd2VzdCBwb3NzaWJsZQ0KKwkJc2V0dGluZy4gIFNlZSB0aGUgY29tbWVudHMgaW4gdlBvcnRWYWxpZGF0ZUludGVycnVwdFByaW9yaXR5KCkgYmVsb3cgZm9yDQorCQltb3JlIGluZm9ybWF0aW9uLiAqLw0KKwkJY29uZmlnQVNTRVJUKCAoIHBvcnRJQ0NCUFJfQklOQVJZX1BPSU5UX1JFR0lTVEVSICYgcG9ydEJJTkFSWV9QT0lOVF9CSVRTICkgPD0gcG9ydE1BWF9CSU5BUllfUE9JTlRfVkFMVUUgKTsNCiANCi0gICAgICAgIGlmKCB1bEFQU1IgPT0gcG9ydEVMMSApDQotICAgICNlbHNlDQotICAgICAgICBjb25maWdBU1NFUlQoIHVsQVBTUiA9PSBwb3J0RUwzICk7DQorCQlpZiggKCBwb3J0SUNDQlBSX0JJTkFSWV9QT0lOVF9SRUdJU1RFUiAmIHBvcnRCSU5BUllfUE9JTlRfQklUUyApIDw9IHBvcnRNQVhfQklOQVJZX1BPSU5UX1ZBTFVFICkNCisJCXsNCisJCQkvKiBJbnRlcnJ1cHRzIGFyZSB0dXJuZWQgb2ZmIGluIHRoZSBDUFUgaXRzZWxmIHRvIGVuc3VyZSBhIHRpY2sgZG9lcw0KKwkJCW5vdCBleGVjdXRlCXdoaWxlIHRoZSBzY2hlZHVsZXIgaXMgYmVpbmcgc3RhcnRlZC4gIEludGVycnVwdHMgYXJlDQorCQkJYXV0b21hdGljYWxseSB0dXJuZWQgYmFjayBvbiBpbiB0aGUgQ1BVIHdoZW4gdGhlIGZpcnN0IHRhc2sgc3RhcnRzDQorCQkJZXhlY3V0aW5nLiAqLw0KKwkJCXBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsNCiANCi0gICAgICAgIGlmKCB1bEFQU1IgPT0gcG9ydEVMMyApDQotICAgICNlbmRpZg0KLSAgICB7DQotICAgICAgICAvKiBPbmx5IGNvbnRpbnVlIGlmIHRoZSBiaW5hcnkgcG9pbnQgdmFsdWUgaXMgc2V0IHRvIGl0cyBsb3dlc3QgcG9zc2libGUNCi0gICAgICAgICAqIHNldHRpbmcuICBTZWUgdGhlIGNvbW1lbnRzIGluIHZQb3J0VmFsaWRhdGVJbnRlcnJ1cHRQcmlvcml0eSgpIGJlbG93IGZvcg0KLSAgICAgICAgICogbW9yZSBpbmZvcm1hdGlvbi4gKi8NCi0gICAgICAgIGNvbmZpZ0FTU0VSVCggKCBwb3J0SUNDQlBSX0JJTkFSWV9QT0lOVF9SRUdJU1RFUiAmIHBvcnRCSU5BUllfUE9JTlRfQklUUyApIDw9IHBvcnRNQVhfQklOQVJZX1BPSU5UX1ZBTFVFICk7DQorCQkJLyogU3RhcnQgdGhlIHRpbWVyIHRoYXQgZ2VuZXJhdGVzIHRoZSB0aWNrIElTUi4gKi8NCisJCQljb25maWdTRVRVUF9USUNLX0lOVEVSUlVQVCgpOw0KIA0KLSAgICAgICAgaWYoICggcG9ydElDQ0JQUl9CSU5BUllfUE9JTlRfUkVHSVNURVIgJiBwb3J0QklOQVJZX1BPSU5UX0JJVFMgKSA8PSBwb3J0TUFYX0JJTkFSWV9QT0lOVF9WQUxVRSApDQotICAgICAgICB7DQotICAgICAgICAgICAgLyogSW50ZXJydXB0cyBhcmUgdHVybmVkIG9mZiBpbiB0aGUgQ1BVIGl0c2VsZiB0byBlbnN1cmUgYSB0aWNrIGRvZXMNCi0gICAgICAgICAgICAgKiBub3QgZXhlY3V0ZQl3aGlsZSB0aGUgc2NoZWR1bGVyIGlzIGJlaW5nIHN0YXJ0ZWQuICBJbnRlcnJ1cHRzIGFyZQ0KLSAgICAgICAgICAgICAqIGF1dG9tYXRpY2FsbHkgdHVybmVkIGJhY2sgb24gaW4gdGhlIENQVSB3aGVuIHRoZSBmaXJzdCB0YXNrIHN0YXJ0cw0KLSAgICAgICAgICAgICAqIGV4ZWN1dGluZy4gKi8NCi0gICAgICAgICAgICBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7DQorCQkJLyogU3RhcnQgdGhlIGZpcnN0IHRhc2sgZXhlY3V0aW5nLiAqLw0KKwkJCXZQb3J0UmVzdG9yZVRhc2tDb250ZXh0KCk7DQorCQl9DQorCX0NCiANCi0gICAgICAgICAgICAvKiBTdGFydCB0aGUgdGltZXIgdGhhdCBnZW5lcmF0ZXMgdGhlIHRpY2sgSVNSLiAqLw0KLSAgICAgICAgICAgIGNvbmZpZ1NFVFVQX1RJQ0tfSU5URVJSVVBUKCk7DQotDQotICAgICAgICAgICAgLyogU3RhcnQgdGhlIGZpcnN0IHRhc2sgZXhlY3V0aW5nLiAqLw0KLSAgICAgICAgICAgIHZQb3J0UmVzdG9yZVRhc2tDb250ZXh0KCk7DQotICAgICAgICB9DQotICAgIH0NCi0NCi0gICAgcmV0dXJuIDA7DQorCXJldHVybiAwOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0RW5kU2NoZWR1bGVyKCB2b2lkICkNCiB7DQotICAgIC8qIE5vdCBpbXBsZW1lbnRlZCBpbiBwb3J0cyB3aGVyZSB0aGVyZSBpcyBub3RoaW5nIHRvIHJldHVybiB0by4NCi0gICAgICogQXJ0aWZpY2lhbGx5IGZvcmNlIGFuIGFzc2VydC4gKi8NCi0gICAgY29uZmlnQVNTRVJUKCB1bGxDcml0aWNhbE5lc3RpbmcgPT0gMTAwMFVMTCApOw0KKwkvKiBOb3QgaW1wbGVtZW50ZWQgaW4gcG9ydHMgd2hlcmUgdGhlcmUgaXMgbm90aGluZyB0byByZXR1cm4gdG8uDQorCUFydGlmaWNpYWxseSBmb3JjZSBhbiBhc3NlcnQuICovDQorCWNvbmZpZ0FTU0VSVCggdWxsQ3JpdGljYWxOZXN0aW5nID09IDEwMDBVTEwgKTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKQ0KIHsNCi0gICAgLyogTWFzayBpbnRlcnJ1cHRzIHVwIHRvIHRoZSBtYXggc3lzY2FsbCBpbnRlcnJ1cHQgcHJpb3JpdHkuICovDQotICAgIHV4UG9ydFNldEludGVycnVwdE1hc2soKTsNCisJLyogTWFzayBpbnRlcnJ1cHRzIHVwIHRvIHRoZSBtYXggc3lzY2FsbCBpbnRlcnJ1cHQgcHJpb3JpdHkuICovDQorCXV4UG9ydFNldEludGVycnVwdE1hc2soKTsNCiANCi0gICAgLyogTm93IGludGVycnVwdHMgYXJlIGRpc2FibGVkIHVsbENyaXRpY2FsTmVzdGluZyBjYW4gYmUgYWNjZXNzZWQNCi0gICAgICogZGlyZWN0bHkuICBJbmNyZW1lbnQgdWxsQ3JpdGljYWxOZXN0aW5nIHRvIGtlZXAgYSBjb3VudCBvZiBob3cgbWFueSB0aW1lcw0KLSAgICAgKiBwb3J0RU5URVJfQ1JJVElDQUwoKSBoYXMgYmVlbiBjYWxsZWQuICovDQotICAgIHVsbENyaXRpY2FsTmVzdGluZysrOw0KKwkvKiBOb3cgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgdWxsQ3JpdGljYWxOZXN0aW5nIGNhbiBiZSBhY2Nlc3NlZA0KKwlkaXJlY3RseS4gIEluY3JlbWVudCB1bGxDcml0aWNhbE5lc3RpbmcgdG8ga2VlcCBhIGNvdW50IG9mIGhvdyBtYW55IHRpbWVzDQorCXBvcnRFTlRFUl9DUklUSUNBTCgpIGhhcyBiZWVuIGNhbGxlZC4gKi8NCisJdWxsQ3JpdGljYWxOZXN0aW5nKys7DQogDQotICAgIC8qIFRoaXMgaXMgbm90IHRoZSBpbnRlcnJ1cHQgc2FmZSB2ZXJzaW9uIG9mIHRoZSBlbnRlciBjcml0aWNhbCBmdW5jdGlvbiBzbw0KLSAgICAgKiBhc3NlcnQoKSBpZiBpdCBpcyBiZWluZyBjYWxsZWQgZnJvbSBhbiBpbnRlcnJ1cHQgY29udGV4dC4gIE9ubHkgQVBJDQotICAgICAqIGZ1bmN0aW9ucyB0aGF0IGVuZCBpbiAiRnJvbUlTUiIgY2FuIGJlIHVzZWQgaW4gYW4gaW50ZXJydXB0LiAgT25seSBhc3NlcnQgaWYNCi0gICAgICogdGhlIGNyaXRpY2FsIG5lc3RpbmcgY291bnQgaXMgMSB0byBwcm90ZWN0IGFnYWluc3QgcmVjdXJzaXZlIGNhbGxzIGlmIHRoZQ0KLSAgICAgKiBhc3NlcnQgZnVuY3Rpb24gYWxzbyB1c2VzIGEgY3JpdGljYWwgc2VjdGlvbi4gKi8NCi0gICAgaWYoIHVsbENyaXRpY2FsTmVzdGluZyA9PSAxVUxMICkNCi0gICAgew0KLSAgICAgICAgY29uZmlnQVNTRVJUKCB1bGxQb3J0SW50ZXJydXB0TmVzdGluZyA9PSAwICk7DQotICAgIH0NCisJLyogVGhpcyBpcyBub3QgdGhlIGludGVycnVwdCBzYWZlIHZlcnNpb24gb2YgdGhlIGVudGVyIGNyaXRpY2FsIGZ1bmN0aW9uIHNvDQorCWFzc2VydCgpIGlmIGl0IGlzIGJlaW5nIGNhbGxlZCBmcm9tIGFuIGludGVycnVwdCBjb250ZXh0LiAgT25seSBBUEkNCisJZnVuY3Rpb25zIHRoYXQgZW5kIGluICJGcm9tSVNSIiBjYW4gYmUgdXNlZCBpbiBhbiBpbnRlcnJ1cHQuICBPbmx5IGFzc2VydCBpZg0KKwl0aGUgY3JpdGljYWwgbmVzdGluZyBjb3VudCBpcyAxIHRvIHByb3RlY3QgYWdhaW5zdCByZWN1cnNpdmUgY2FsbHMgaWYgdGhlDQorCWFzc2VydCBmdW5jdGlvbiBhbHNvIHVzZXMgYSBjcml0aWNhbCBzZWN0aW9uLiAqLw0KKwlpZiggdWxsQ3JpdGljYWxOZXN0aW5nID09IDFVTEwgKQ0KKwl7DQorCQljb25maWdBU1NFUlQoIHVsbFBvcnRJbnRlcnJ1cHROZXN0aW5nID09IDAgKTsNCisJfQ0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICkNCiB7DQotICAgIGlmKCB1bGxDcml0aWNhbE5lc3RpbmcgPiBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyApDQotICAgIHsNCi0gICAgICAgIC8qIERlY3JlbWVudCB0aGUgbmVzdGluZyBjb3VudCBhcyB0aGUgY3JpdGljYWwgc2VjdGlvbiBpcyBiZWluZw0KLSAgICAgICAgICogZXhpdGVkLiAqLw0KLSAgICAgICAgdWxsQ3JpdGljYWxOZXN0aW5nLS07DQorCWlmKCB1bGxDcml0aWNhbE5lc3RpbmcgPiBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyApDQorCXsNCisJCS8qIERlY3JlbWVudCB0aGUgbmVzdGluZyBjb3VudCBhcyB0aGUgY3JpdGljYWwgc2VjdGlvbiBpcyBiZWluZw0KKwkJZXhpdGVkLiAqLw0KKwkJdWxsQ3JpdGljYWxOZXN0aW5nLS07DQogDQotICAgICAgICAvKiBJZiB0aGUgbmVzdGluZyBsZXZlbCBoYXMgcmVhY2hlZCB6ZXJvIHRoZW4gYWxsIGludGVycnVwdA0KLSAgICAgICAgICogcHJpb3JpdGllcyBtdXN0IGJlIHJlLWVuYWJsZWQuICovDQotICAgICAgICBpZiggdWxsQ3JpdGljYWxOZXN0aW5nID09IHBvcnROT19DUklUSUNBTF9ORVNUSU5HICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICAvKiBDcml0aWNhbCBuZXN0aW5nIGhhcyByZWFjaGVkIHplcm8gc28gYWxsIGludGVycnVwdCBwcmlvcml0aWVzDQotICAgICAgICAgICAgICogc2hvdWxkIGJlIHVubWFza2VkLiAqLw0KLSAgICAgICAgICAgIHBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTSygpOw0KLSAgICAgICAgfQ0KLSAgICB9DQorCQkvKiBJZiB0aGUgbmVzdGluZyBsZXZlbCBoYXMgcmVhY2hlZCB6ZXJvIHRoZW4gYWxsIGludGVycnVwdA0KKwkJcHJpb3JpdGllcyBtdXN0IGJlIHJlLWVuYWJsZWQuICovDQorCQlpZiggdWxsQ3JpdGljYWxOZXN0aW5nID09IHBvcnROT19DUklUSUNBTF9ORVNUSU5HICkNCisJCXsNCisJCQkvKiBDcml0aWNhbCBuZXN0aW5nIGhhcyByZWFjaGVkIHplcm8gc28gYWxsIGludGVycnVwdCBwcmlvcml0aWVzDQorCQkJc2hvdWxkIGJlIHVubWFza2VkLiAqLw0KKwkJCXBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTSygpOw0KKwkJfQ0KKwl9DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgRnJlZVJUT1NfVGlja19IYW5kbGVyKCB2b2lkICkNCiB7DQotICAgIC8qIE11c3QgYmUgdGhlIGxvd2VzdCBwb3NzaWJsZSBwcmlvcml0eS4gKi8NCi0gICAgI2lmICFkZWZpbmVkKCBRRU1VICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBjb25maWdBU1NFUlQoIHBvcnRJQ0NSUFJfUlVOTklOR19QUklPUklUWV9SRUdJU1RFUiA9PSAoIHVpbnQzMl90ICkgKCBwb3J0TE9XRVNUX1VTQUJMRV9JTlRFUlJVUFRfUFJJT1JJVFkgPDwgcG9ydFBSSU9SSVRZX1NISUZUICkgKTsNCi0gICAgICAgIH0NCi0gICAgI2VuZGlmDQorCS8qIE11c3QgYmUgdGhlIGxvd2VzdCBwb3NzaWJsZSBwcmlvcml0eS4gKi8NCisJI2lmICFkZWZpbmVkKCBRRU1VICkNCisJew0KKwkJY29uZmlnQVNTRVJUKCBwb3J0SUNDUlBSX1JVTk5JTkdfUFJJT1JJVFlfUkVHSVNURVIgPT0gKCB1aW50MzJfdCApICggcG9ydExPV0VTVF9VU0FCTEVfSU5URVJSVVBUX1BSSU9SSVRZIDw8IHBvcnRQUklPUklUWV9TSElGVCApICk7DQorCX0NCisJI2VuZGlmDQogDQotICAgIC8qIEludGVycnVwdHMgc2hvdWxkIG5vdCBiZSBlbmFibGVkIGJlZm9yZSB0aGlzIHBvaW50LiAqLw0KLSAgICAjaWYgKCBjb25maWdBU1NFUlRfREVGSU5FRCA9PSAxICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICB1aW50MzJfdCB1bE1hc2tCaXRzOw0KKwkvKiBJbnRlcnJ1cHRzIHNob3VsZCBub3QgYmUgZW5hYmxlZCBiZWZvcmUgdGhpcyBwb2ludC4gKi8NCisJI2lmKCBjb25maWdBU1NFUlRfREVGSU5FRCA9PSAxICkNCisJew0KKwkJdWludDMyX3QgdWxNYXNrQml0czsNCiANCi0gICAgICAgICAgICBfX2FzbSB2b2xhdGlsZSAoICJtcnMgJTAsIGRhaWYiIDogIj1yIiAoIHVsTWFza0JpdHMgKTo6Im1lbW9yeSIgKTsNCi0gICAgICAgICAgICBjb25maWdBU1NFUlQoICggdWxNYXNrQml0cyAmIHBvcnREQUlGX0kgKSAhPSAwICk7DQotICAgICAgICB9DQotICAgICNlbmRpZiAvKiBjb25maWdBU1NFUlRfREVGSU5FRCAqLw0KKwkJX19hc20gdm9sYXRpbGUoICJtcnMgJTAsIGRhaWYiIDogIj1yIiggdWxNYXNrQml0cyApIDo6ICJtZW1vcnkiICk7DQorCQljb25maWdBU1NFUlQoICggdWxNYXNrQml0cyAmIHBvcnREQUlGX0kgKSAhPSAwICk7DQorCX0NCisJI2VuZGlmIC8qIGNvbmZpZ0FTU0VSVF9ERUZJTkVEICovDQogDQotICAgIC8qIFNldCBpbnRlcnJ1cHQgbWFzayBiZWZvcmUgYWx0ZXJpbmcgc2NoZWR1bGVyIHN0cnVjdHVyZXMuICAgVGhlIHRpY2sNCi0gICAgICogaGFuZGxlciBydW5zIGF0IHRoZSBsb3dlc3QgcHJpb3JpdHksIHNvIGludGVycnVwdHMgY2Fubm90IGFscmVhZHkgYmUgbWFza2VkLA0KLSAgICAgKiBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIHNhdmUgYW5kIHJlc3RvcmUgdGhlIGN1cnJlbnQgbWFzayB2YWx1ZS4gIEl0IGlzDQotICAgICAqIG5lY2Vzc2FyeSB0byB0dXJuIG9mZiBpbnRlcnJ1cHRzIGluIHRoZSBDUFUgaXRzZWxmIHdoaWxlIHRoZSBJQ0NQTVIgaXMgYmVpbmcNCi0gICAgICogdXBkYXRlZC4gKi8NCi0gICAgcG9ydElDQ1BNUl9QUklPUklUWV9NQVNLX1JFR0lTVEVSID0gKCB1aW50MzJfdCApICggY29uZmlnTUFYX0FQSV9DQUxMX0lOVEVSUlVQVF9QUklPUklUWSA8PCBwb3J0UFJJT1JJVFlfU0hJRlQgKTsNCi0gICAgX19hc20gdm9sYXRpbGUgKCAiZHNiIHN5CQlcbiINCi0gICAgICAgICAgICAgICAgICAgICAiaXNiIHN5CQlcbiI6OjogIm1lbW9yeSIgKTsNCisJLyogU2V0IGludGVycnVwdCBtYXNrIGJlZm9yZSBhbHRlcmluZyBzY2hlZHVsZXIgc3RydWN0dXJlcy4gICBUaGUgdGljaw0KKwloYW5kbGVyIHJ1bnMgYXQgdGhlIGxvd2VzdCBwcmlvcml0eSwgc28gaW50ZXJydXB0cyBjYW5ub3QgYWxyZWFkeSBiZSBtYXNrZWQsDQorCXNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gc2F2ZSBhbmQgcmVzdG9yZSB0aGUgY3VycmVudCBtYXNrIHZhbHVlLiAgSXQgaXMNCisJbmVjZXNzYXJ5IHRvIHR1cm4gb2ZmIGludGVycnVwdHMgaW4gdGhlIENQVSBpdHNlbGYgd2hpbGUgdGhlIElDQ1BNUiBpcyBiZWluZw0KKwl1cGRhdGVkLiAqLw0KKwlwb3J0SUNDUE1SX1BSSU9SSVRZX01BU0tfUkVHSVNURVIgPSAoIHVpbnQzMl90ICkgKCBjb25maWdNQVhfQVBJX0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIDw8IHBvcnRQUklPUklUWV9TSElGVCApOw0KKwlfX2FzbSB2b2xhdGlsZSAoCSJkc2Igc3kJCVxuIg0KKwkJCQkJCSJpc2Igc3kJCVxuIiA6OjogIm1lbW9yeSIgKTsNCiANCi0gICAgLyogT2sgdG8gZW5hYmxlIGludGVycnVwdHMgYWZ0ZXIgdGhlIGludGVycnVwdCBzb3VyY2UgaGFzIGJlZW4gY2xlYXJlZC4gKi8NCi0gICAgY29uZmlnQ0xFQVJfVElDS19JTlRFUlJVUFQoKTsNCi0gICAgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7DQorCS8qIE9rIHRvIGVuYWJsZSBpbnRlcnJ1cHRzIGFmdGVyIHRoZSBpbnRlcnJ1cHQgc291cmNlIGhhcyBiZWVuIGNsZWFyZWQuICovDQorCWNvbmZpZ0NMRUFSX1RJQ0tfSU5URVJSVVBUKCk7DQorCXBvcnRFTkFCTEVfSU5URVJSVVBUUygpOw0KIA0KLSAgICAvKiBJbmNyZW1lbnQgdGhlIFJUT1MgdGljay4gKi8NCi0gICAgaWYoIHhUYXNrSW5jcmVtZW50VGljaygpICE9IHBkRkFMU0UgKQ0KLSAgICB7DQotICAgICAgICB1bGxQb3J0WWllbGRSZXF1aXJlZCA9IHBkVFJVRTsNCi0gICAgfQ0KKwkvKiBJbmNyZW1lbnQgdGhlIFJUT1MgdGljay4gKi8NCisJaWYoIHhUYXNrSW5jcmVtZW50VGljaygpICE9IHBkRkFMU0UgKQ0KKwl7DQorCQl1bGxQb3J0WWllbGRSZXF1aXJlZCA9IHBkVFJVRTsNCisJfQ0KIA0KLSAgICAvKiBFbnN1cmUgYWxsIGludGVycnVwdCBwcmlvcml0aWVzIGFyZSBhY3RpdmUgYWdhaW4uICovDQotICAgIHBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTSygpOw0KKwkvKiBFbnN1cmUgYWxsIGludGVycnVwdCBwcmlvcml0aWVzIGFyZSBhY3RpdmUgYWdhaW4uICovDQorCXBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTSygpOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0VGFza1VzZXNGUFUoIHZvaWQgKQ0KIHsNCi0gICAgLyogQSB0YXNrIGlzIHJlZ2lzdGVyaW5nIHRoZSBmYWN0IHRoYXQgaXQgbmVlZHMgYW4gRlBVIGNvbnRleHQuICBTZXQgdGhlDQotICAgICAqIEZQVSBmbGFnICh3aGljaCBpcyBzYXZlZCBhcyBwYXJ0IG9mIHRoZSB0YXNrIGNvbnRleHQpLiAqLw0KLSAgICB1bGxQb3J0VGFza0hhc0ZQVUNvbnRleHQgPSBwZFRSVUU7DQorCS8qIEEgdGFzayBpcyByZWdpc3RlcmluZyB0aGUgZmFjdCB0aGF0IGl0IG5lZWRzIGFuIEZQVSBjb250ZXh0LiAgU2V0IHRoZQ0KKwlGUFUgZmxhZyAod2hpY2ggaXMgc2F2ZWQgYXMgcGFydCBvZiB0aGUgdGFzayBjb250ZXh0KS4gKi8NCisJdWxsUG9ydFRhc2tIYXNGUFVDb250ZXh0ID0gcGRUUlVFOw0KIA0KLSAgICAvKiBDb25zaWRlciBpbml0aWFsaXNpbmcgdGhlIEZQU1IgaGVyZSAtIGJ1dCBwcm9iYWJseSBub3QgbmVjZXNzYXJ5IGluDQotICAgICAqIEFBcmNoNjQuICovDQorCS8qIENvbnNpZGVyIGluaXRpYWxpc2luZyB0aGUgRlBTUiBoZXJlIC0gYnV0IHByb2JhYmx5IG5vdCBuZWNlc3NhcnkgaW4NCisJQUFyY2g2NC4gKi8NCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogdm9pZCB2UG9ydENsZWFySW50ZXJydXB0TWFzayggVUJhc2VUeXBlX3QgdXhOZXdNYXNrVmFsdWUgKQ0KIHsNCi0gICAgaWYoIHV4TmV3TWFza1ZhbHVlID09IHBkRkFMU0UgKQ0KLSAgICB7DQotICAgICAgICBwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0soKTsNCi0gICAgfQ0KKwlpZiggdXhOZXdNYXNrVmFsdWUgPT0gcGRGQUxTRSApDQorCXsNCisJCXBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTSygpOw0KKwl9DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIFVCYXNlVHlwZV90IHV4UG9ydFNldEludGVycnVwdE1hc2soIHZvaWQgKQ0KIHsNCi0gICAgdWludDMyX3QgdWxSZXR1cm47DQordWludDMyX3QgdWxSZXR1cm47DQogDQotICAgIC8qIEludGVycnVwdCBpbiB0aGUgQ1BVIG11c3QgYmUgdHVybmVkIG9mZiB3aGlsZSB0aGUgSUNDUE1SIGlzIGJlaW5nDQotICAgICAqIHVwZGF0ZWQuICovDQotICAgIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsNCisJLyogSW50ZXJydXB0IGluIHRoZSBDUFUgbXVzdCBiZSB0dXJuZWQgb2ZmIHdoaWxlIHRoZSBJQ0NQTVIgaXMgYmVpbmcNCisJdXBkYXRlZC4gKi8NCisJcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOw0KKwlpZiggcG9ydElDQ1BNUl9QUklPUklUWV9NQVNLX1JFR0lTVEVSID09ICggdWludDMyX3QgKSAoIGNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgPDwgcG9ydFBSSU9SSVRZX1NISUZUICkgKQ0KKwl7DQorCQkvKiBJbnRlcnJ1cHRzIHdlcmUgYWxyZWFkeSBtYXNrZWQuICovDQorCQl1bFJldHVybiA9IHBkVFJVRTsNCisJfQ0KKwllbHNlDQorCXsNCisJCXVsUmV0dXJuID0gcGRGQUxTRTsNCisJCXBvcnRJQ0NQTVJfUFJJT1JJVFlfTUFTS19SRUdJU1RFUiA9ICggdWludDMyX3QgKSAoIGNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgPDwgcG9ydFBSSU9SSVRZX1NISUZUICk7DQorCQlfX2FzbSB2b2xhdGlsZSAoCSJkc2Igc3kJCVxuIg0KKwkJCQkJCQkiaXNiIHN5CQlcbiIgOjo6ICJtZW1vcnkiICk7DQorCX0NCisJcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7DQogDQotICAgIGlmKCBwb3J0SUNDUE1SX1BSSU9SSVRZX01BU0tfUkVHSVNURVIgPT0gKCB1aW50MzJfdCApICggY29uZmlnTUFYX0FQSV9DQUxMX0lOVEVSUlVQVF9QUklPUklUWSA8PCBwb3J0UFJJT1JJVFlfU0hJRlQgKSApDQotICAgIHsNCi0gICAgICAgIC8qIEludGVycnVwdHMgd2VyZSBhbHJlYWR5IG1hc2tlZC4gKi8NCi0gICAgICAgIHVsUmV0dXJuID0gcGRUUlVFOw0KLSAgICB9DQotICAgIGVsc2UNCi0gICAgew0KLSAgICAgICAgdWxSZXR1cm4gPSBwZEZBTFNFOw0KLSAgICAgICAgcG9ydElDQ1BNUl9QUklPUklUWV9NQVNLX1JFR0lTVEVSID0gKCB1aW50MzJfdCApICggY29uZmlnTUFYX0FQSV9DQUxMX0lOVEVSUlVQVF9QUklPUklUWSA8PCBwb3J0UFJJT1JJVFlfU0hJRlQgKTsNCi0gICAgICAgIF9fYXNtIHZvbGF0aWxlICggImRzYiBzeQkJXG4iDQotICAgICAgICAgICAgICAgICAgICAgICAgICJpc2Igc3kJCVxuIjo6OiAibWVtb3J5IiApOw0KLSAgICB9DQotDQotICAgIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpOw0KLQ0KLSAgICByZXR1cm4gdWxSZXR1cm47DQorCXJldHVybiB1bFJldHVybjsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQotI2lmICggY29uZmlnQVNTRVJUX0RFRklORUQgPT0gMSApDQorI2lmKCBjb25maWdBU1NFUlRfREVGSU5FRCA9PSAxICkNCiANCi0gICAgdm9pZCB2UG9ydFZhbGlkYXRlSW50ZXJydXB0UHJpb3JpdHkoIHZvaWQgKQ0KLSAgICB7DQotICAgICAgICAvKiBUaGUgZm9sbG93aW5nIGFzc2VydGlvbiB3aWxsIGZhaWwgaWYgYSBzZXJ2aWNlIHJvdXRpbmUgKElTUikgZm9yDQotICAgICAgICAgKiBhbiBpbnRlcnJ1cHQgdGhhdCBoYXMgYmVlbiBhc3NpZ25lZCBhIHByaW9yaXR5IGFib3ZlDQotICAgICAgICAgKiBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgY2FsbHMgYW4gSVNSIHNhZmUgRnJlZVJUT1MgQVBJDQotICAgICAgICAgKiBmdW5jdGlvbi4gIElTUiBzYWZlIEZyZWVSVE9TIEFQSSBmdW5jdGlvbnMgbXVzdCAqb25seSogYmUgY2FsbGVkDQotICAgICAgICAgKiBmcm9tIGludGVycnVwdHMgdGhhdCBoYXZlIGJlZW4gYXNzaWduZWQgYSBwcmlvcml0eSBhdCBvciBiZWxvdw0KLSAgICAgICAgICogY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZLg0KLSAgICAgICAgICoNCi0gICAgICAgICAqIE51bWVyaWNhbGx5IGxvdyBpbnRlcnJ1cHQgcHJpb3JpdHkgbnVtYmVycyByZXByZXNlbnQgbG9naWNhbGx5IGhpZ2gNCi0gICAgICAgICAqIGludGVycnVwdCBwcmlvcml0aWVzLCB0aGVyZWZvcmUgdGhlIHByaW9yaXR5IG9mIHRoZSBpbnRlcnJ1cHQgbXVzdA0KLSAgICAgICAgICogYmUgc2V0IHRvIGEgdmFsdWUgZXF1YWwgdG8gb3IgbnVtZXJpY2FsbHkgKmhpZ2hlciogdGhhbg0KLSAgICAgICAgICogY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZLg0KLSAgICAgICAgICoNCi0gICAgICAgICAqIEZyZWVSVE9TIG1haW50YWlucyBzZXBhcmF0ZSB0aHJlYWQgYW5kIElTUiBBUEkgZnVuY3Rpb25zIHRvIGVuc3VyZQ0KLSAgICAgICAgICogaW50ZXJydXB0IGVudHJ5IGlzIGFzIGZhc3QgYW5kIHNpbXBsZSBhcyBwb3NzaWJsZS4gKi8NCi0gICAgICAgIGNvbmZpZ0FTU0VSVCggcG9ydElDQ1JQUl9SVU5OSU5HX1BSSU9SSVRZX1JFR0lTVEVSID49ICggdWludDMyX3QgKSAoIGNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgPDwgcG9ydFBSSU9SSVRZX1NISUZUICkgKTsNCisJdm9pZCB2UG9ydFZhbGlkYXRlSW50ZXJydXB0UHJpb3JpdHkoIHZvaWQgKQ0KKwl7DQorCQkvKiBUaGUgZm9sbG93aW5nIGFzc2VydGlvbiB3aWxsIGZhaWwgaWYgYSBzZXJ2aWNlIHJvdXRpbmUgKElTUikgZm9yDQorCQlhbiBpbnRlcnJ1cHQgdGhhdCBoYXMgYmVlbiBhc3NpZ25lZCBhIHByaW9yaXR5IGFib3ZlDQorCQljb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgY2FsbHMgYW4gSVNSIHNhZmUgRnJlZVJUT1MgQVBJDQorCQlmdW5jdGlvbi4gIElTUiBzYWZlIEZyZWVSVE9TIEFQSSBmdW5jdGlvbnMgbXVzdCAqb25seSogYmUgY2FsbGVkDQorCQlmcm9tIGludGVycnVwdHMgdGhhdCBoYXZlIGJlZW4gYXNzaWduZWQgYSBwcmlvcml0eSBhdCBvciBiZWxvdw0KKwkJY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZLg0KIA0KLSAgICAgICAgLyogUHJpb3JpdHkgZ3JvdXBpbmc6ICBUaGUgaW50ZXJydXB0IGNvbnRyb2xsZXIgKEdJQykgYWxsb3dzIHRoZSBiaXRzDQotICAgICAgICAgKiB0aGF0IGRlZmluZSBlYWNoIGludGVycnVwdCdzIHByaW9yaXR5IHRvIGJlIHNwbGl0IGJldHdlZW4gYml0cyB0aGF0DQotICAgICAgICAgKiBkZWZpbmUgdGhlIGludGVycnVwdCdzIHByZS1lbXB0aW9uIHByaW9yaXR5IGJpdHMgYW5kIGJpdHMgdGhhdCBkZWZpbmUNCi0gICAgICAgICAqIHRoZSBpbnRlcnJ1cHQncyBzdWItcHJpb3JpdHkuICBGb3Igc2ltcGxpY2l0eSBhbGwgYml0cyBtdXN0IGJlIGRlZmluZWQNCi0gICAgICAgICAqIHRvIGJlIHByZS1lbXB0aW9uIHByaW9yaXR5IGJpdHMuICBUaGUgZm9sbG93aW5nIGFzc2VydGlvbiB3aWxsIGZhaWwgaWYNCi0gICAgICAgICAqIHRoaXMgaXMgbm90IHRoZSBjYXNlIChpZiBzb21lIGJpdHMgcmVwcmVzZW50IGEgc3ViLXByaW9yaXR5KS4NCi0gICAgICAgICAqDQotICAgICAgICAgKiBUaGUgcHJpb3JpdHkgZ3JvdXBpbmcgaXMgY29uZmlndXJlZCBieSB0aGUgR0lDJ3MgYmluYXJ5IHBvaW50IHJlZ2lzdGVyDQotICAgICAgICAgKiAoSUNDQlBSKS4gIFdyaXR0aW5nIDAgdG8gSUNDQlBSIHdpbGwgZW5zdXJlIGl0IGlzIHNldCB0byBpdHMgbG93ZXN0DQotICAgICAgICAgKiBwb3NzaWJsZSB2YWx1ZSAod2hpY2ggbWF5IGJlIGFib3ZlIDApLiAqLw0KLSAgICAgICAgY29uZmlnQVNTRVJUKCAoIHBvcnRJQ0NCUFJfQklOQVJZX1BPSU5UX1JFR0lTVEVSICYgcG9ydEJJTkFSWV9QT0lOVF9CSVRTICkgPD0gcG9ydE1BWF9CSU5BUllfUE9JTlRfVkFMVUUgKTsNCi0gICAgfQ0KKwkJTnVtZXJpY2FsbHkgbG93IGludGVycnVwdCBwcmlvcml0eSBudW1iZXJzIHJlcHJlc2VudCBsb2dpY2FsbHkgaGlnaA0KKwkJaW50ZXJydXB0IHByaW9yaXRpZXMsIHRoZXJlZm9yZSB0aGUgcHJpb3JpdHkgb2YgdGhlIGludGVycnVwdCBtdXN0DQorCQliZSBzZXQgdG8gYSB2YWx1ZSBlcXVhbCB0byBvciBudW1lcmljYWxseSAqaGlnaGVyKiB0aGFuDQorCQljb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkuDQorDQorCQlGcmVlUlRPUyBtYWludGFpbnMgc2VwYXJhdGUgdGhyZWFkIGFuZCBJU1IgQVBJIGZ1bmN0aW9ucyB0byBlbnN1cmUNCisJCWludGVycnVwdCBlbnRyeSBpcyBhcyBmYXN0IGFuZCBzaW1wbGUgYXMgcG9zc2libGUuICovDQorCQljb25maWdBU1NFUlQoIHBvcnRJQ0NSUFJfUlVOTklOR19QUklPUklUWV9SRUdJU1RFUiA+PSAoIHVpbnQzMl90ICkgKCBjb25maWdNQVhfQVBJX0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIDw8IHBvcnRQUklPUklUWV9TSElGVCApICk7DQorDQorCQkvKiBQcmlvcml0eSBncm91cGluZzogIFRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciAoR0lDKSBhbGxvd3MgdGhlIGJpdHMNCisJCXRoYXQgZGVmaW5lIGVhY2ggaW50ZXJydXB0J3MgcHJpb3JpdHkgdG8gYmUgc3BsaXQgYmV0d2VlbiBiaXRzIHRoYXQNCisJCWRlZmluZSB0aGUgaW50ZXJydXB0J3MgcHJlLWVtcHRpb24gcHJpb3JpdHkgYml0cyBhbmQgYml0cyB0aGF0IGRlZmluZQ0KKwkJdGhlIGludGVycnVwdCdzIHN1Yi1wcmlvcml0eS4gIEZvciBzaW1wbGljaXR5IGFsbCBiaXRzIG11c3QgYmUgZGVmaW5lZA0KKwkJdG8gYmUgcHJlLWVtcHRpb24gcHJpb3JpdHkgYml0cy4gIFRoZSBmb2xsb3dpbmcgYXNzZXJ0aW9uIHdpbGwgZmFpbCBpZg0KKwkJdGhpcyBpcyBub3QgdGhlIGNhc2UgKGlmIHNvbWUgYml0cyByZXByZXNlbnQgYSBzdWItcHJpb3JpdHkpLg0KKw0KKwkJVGhlIHByaW9yaXR5IGdyb3VwaW5nIGlzIGNvbmZpZ3VyZWQgYnkgdGhlIEdJQydzIGJpbmFyeSBwb2ludCByZWdpc3Rlcg0KKwkJKElDQ0JQUikuICBXcml0dGluZyAwIHRvIElDQ0JQUiB3aWxsIGVuc3VyZSBpdCBpcyBzZXQgdG8gaXRzIGxvd2VzdA0KKwkJcG9zc2libGUgdmFsdWUgKHdoaWNoIG1heSBiZSBhYm92ZSAwKS4gKi8NCisJCWNvbmZpZ0FTU0VSVCggKCBwb3J0SUNDQlBSX0JJTkFSWV9QT0lOVF9SRUdJU1RFUiAmIHBvcnRCSU5BUllfUE9JTlRfQklUUyApIDw9IHBvcnRNQVhfQklOQVJZX1BPSU5UX1ZBTFVFICk7DQorCX0NCiANCiAjZW5kaWYgLyogY29uZmlnQVNTRVJUX0RFRklORUQgKi8NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9HQ0MvQVJNX0NBNTNfNjRfQklUL3BvcnRtYWNyby5oIGIvcG9ydGFibGUvR0NDL0FSTV9DQTUzXzY0X0JJVC9wb3J0bWFjcm8uaAppbmRleCA1ZGE1ZjIyLi40N2M5MjQ4IDEwMDY0NAotLS0gYS9wb3J0YWJsZS9HQ0MvQVJNX0NBNTNfNjRfQklUL3BvcnRtYWNyby5oCisrKyBiL3BvcnRhYmxlL0dDQy9BUk1fQ0E1M182NF9CSVQvcG9ydG1hY3JvLmgKQEAgLTI2LDExICsyNiwxMSBAQAogICovDQogDQogI2lmbmRlZiBQT1JUTUFDUk9fSA0KLSAgICAjZGVmaW5lIFBPUlRNQUNST19IDQorI2RlZmluZSBQT1JUTUFDUk9fSA0KIA0KLSAgICAjaWZkZWYgX19jcGx1c3BsdXMNCi0gICAgICAgIGV4dGVybiAiQyIgew0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCisJZXh0ZXJuICJDIiB7DQorI2VuZGlmDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAqIFBvcnQgc3BlY2lmaWMgZGVmaW5pdGlvbnMuDQpAQCAtNDMsMTY5ICs0MywxNjkgQEAKICAqLw0KIA0KIC8qIFR5cGUgZGVmaW5pdGlvbnMuICovDQotICAgICNkZWZpbmUgcG9ydENIQVIgICAgICAgICAgY2hhcg0KLSAgICAjZGVmaW5lIHBvcnRGTE9BVCAgICAgICAgIGZsb2F0DQotICAgICNkZWZpbmUgcG9ydERPVUJMRSAgICAgICAgZG91YmxlDQotICAgICNkZWZpbmUgcG9ydExPTkcgICAgICAgICAgbG9uZw0KLSAgICAjZGVmaW5lIHBvcnRTSE9SVCAgICAgICAgIHNob3J0DQotICAgICNkZWZpbmUgcG9ydFNUQUNLX1RZUEUgICAgc2l6ZV90DQotICAgICNkZWZpbmUgcG9ydEJBU0VfVFlQRSAgICAgbG9uZw0KKyNkZWZpbmUgcG9ydENIQVIJCWNoYXINCisjZGVmaW5lIHBvcnRGTE9BVAkJZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUJCWRvdWJsZQ0KKyNkZWZpbmUgcG9ydExPTkcJCWxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVAkJc2hvcnQNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFCXNpemVfdA0KKyNkZWZpbmUgcG9ydEJBU0VfVFlQRQlsb25nDQogDQotICAgIHR5cGVkZWYgcG9ydFNUQUNLX1RZUEUgICBTdGFja1R5cGVfdDsNCi0gICAgdHlwZWRlZiBwb3J0QkFTRV9UWVBFICAgIEJhc2VUeXBlX3Q7DQotICAgIHR5cGVkZWYgdWludDY0X3QgICAgICAgICBVQmFzZVR5cGVfdDsNCit0eXBlZGVmIHBvcnRTVEFDS19UWVBFIFN0YWNrVHlwZV90Ow0KK3R5cGVkZWYgcG9ydEJBU0VfVFlQRSBCYXNlVHlwZV90Ow0KK3R5cGVkZWYgdWludDY0X3QgVUJhc2VUeXBlX3Q7DQogDQotICAgIHR5cGVkZWYgdWludDY0X3QgICAgICAgICBUaWNrVHlwZV90Ow0KLSAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgICAgICAgICAgICggKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZmZmZmZmZmZmICkNCit0eXBlZGVmIHVpbnQ2NF90IFRpY2tUeXBlX3Q7DQorI2RlZmluZSBwb3J0TUFYX0RFTEFZICggKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZmZmZmZmZmZmICkNCiANCiAvKiAzMi1iaXQgdGljayB0eXBlIG9uIGEgMzItYml0IGFyY2hpdGVjdHVyZSwgc28gcmVhZHMgb2YgdGhlIHRpY2sgY291bnQgZG8NCi0gKiBub3QgbmVlZCB0byBiZSBndWFyZGVkIHdpdGggYSBjcml0aWNhbCBzZWN0aW9uLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRUSUNLX1RZUEVfSVNfQVRPTUlDICAgIDENCitub3QgbmVlZCB0byBiZSBndWFyZGVkIHdpdGggYSBjcml0aWNhbCBzZWN0aW9uLiAqLw0KKyNkZWZpbmUgcG9ydFRJQ0tfVFlQRV9JU19BVE9NSUMgMQ0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIEhhcmR3YXJlIHNwZWNpZmljcy4gKi8NCi0gICAgI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RIICAgICAgICAgKCAtMSApDQotICAgICNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TICAgICAgICggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQotICAgICNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UICAgICAgIDE2DQotICAgICNkZWZpbmUgcG9ydFBPSU5URVJfU0laRV9UWVBFICAgIHVpbnQ2NF90DQorI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RICQkJKCAtMSApDQorI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMJCQkoICggVGlja1R5cGVfdCApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UCQkJMTYNCisjZGVmaW5lIHBvcnRQT0lOVEVSX1NJWkVfVFlQRSAJCXVpbnQ2NF90DQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGFzayB1dGlsaXRpZXMuICovDQogDQogLyogQ2FsbGVkIGF0IHRoZSBlbmQgb2YgYW4gSVNSIHRoYXQgY2FuIGNhdXNlIGEgY29udGV4dCBzd2l0Y2guICovDQotICAgICNkZWZpbmUgcG9ydEVORF9TV0lUQ0hJTkdfSVNSKCB4U3dpdGNoUmVxdWlyZWQgKSBcDQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBleHRlcm4gdWludDY0X3QgdWxsUG9ydFlpZWxkUmVxdWlyZWQ7ICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBpZiggeFN3aXRjaFJlcXVpcmVkICE9IHBkRkFMU0UgKSAgICAgICAgICAgICBcDQotICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgdWxsUG9ydFlpZWxkUmVxdWlyZWQgPSBwZFRSVUU7ICAgICAgICAgICBcDQotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIH0NCisjZGVmaW5lIHBvcnRFTkRfU1dJVENISU5HX0lTUiggeFN3aXRjaFJlcXVpcmVkIClcDQorewkJCQkJCQkJCQkJCVwNCitleHRlcm4gdWludDY0X3QgdWxsUG9ydFlpZWxkUmVxdWlyZWQ7CQkJXA0KKwkJCQkJCQkJCQkJCVwNCisJaWYoIHhTd2l0Y2hSZXF1aXJlZCAhPSBwZEZBTFNFICkJCQlcDQorCXsJCQkJCQkJCQkJCVwNCisJCXVsbFBvcnRZaWVsZFJlcXVpcmVkID0gcGRUUlVFOwkJCVwNCisJfQkJCQkJCQkJCQkJXA0KK30NCiANCi0gICAgI2RlZmluZSBwb3J0WUlFTERfRlJPTV9JU1IoIHggKSAgICBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHggKQ0KLSAgICAjaWYgZGVmaW5lZCggR1VFU1QgKQ0KLSAgICAgICAgI2RlZmluZSBwb3J0WUlFTEQoKSAgICAgICAgICAgIF9fYXNtIHZvbGF0aWxlICggIlNWQyAwIiA6OjogIm1lbW9yeSIgKQ0KLSAgICAjZWxzZQ0KLSAgICAgICAgI2RlZmluZSBwb3J0WUlFTEQoKSAgICAgICAgICAgIF9fYXNtIHZvbGF0aWxlICggIlNNQyAwIiA6OjogIm1lbW9yeSIgKQ0KLSAgICAjZW5kaWYNCi0NCisjZGVmaW5lIHBvcnRZSUVMRF9GUk9NX0lTUiggeCApIHBvcnRFTkRfU1dJVENISU5HX0lTUiggeCApDQorI2lmIGRlZmluZWQoIEdVRVNUICkNCisJI2RlZmluZSBwb3J0WUlFTEQoKSBfX2FzbSB2b2xhdGlsZSAoICJTVkMgMCIgOjo6ICJtZW1vcnkiICkNCisjZWxzZQ0KKwkjZGVmaW5lIHBvcnRZSUVMRCgpIF9fYXNtIHZvbGF0aWxlICggIlNNQyAwIiA6OjogIm1lbW9yeSIgKQ0KKyNlbmRpZg0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0qIENyaXRpY2FsIHNlY3Rpb24gY29udHJvbA0KLSotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisgKiBDcml0aWNhbCBzZWN0aW9uIGNvbnRyb2wNCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KLSAgICBleHRlcm4gdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKTsNCi0gICAgZXh0ZXJuIHZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCi0gICAgZXh0ZXJuIFVCYXNlVHlwZV90IHV4UG9ydFNldEludGVycnVwdE1hc2soIHZvaWQgKTsNCi0gICAgZXh0ZXJuIHZvaWQgdlBvcnRDbGVhckludGVycnVwdE1hc2soIFVCYXNlVHlwZV90IHV4TmV3TWFza1ZhbHVlICk7DQotICAgIGV4dGVybiB2b2lkIHZQb3J0SW5zdGFsbEZyZWVSVE9TVmVjdG9yVGFibGUoIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApOw0KK2V4dGVybiBVQmFzZVR5cGVfdCB1eFBvcnRTZXRJbnRlcnJ1cHRNYXNrKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdlBvcnRDbGVhckludGVycnVwdE1hc2soIFVCYXNlVHlwZV90IHV4TmV3TWFza1ZhbHVlICk7DQorZXh0ZXJuIHZvaWQgdlBvcnRJbnN0YWxsRnJlZVJUT1NWZWN0b3JUYWJsZSggdm9pZCApOw0KIA0KLSAgICAjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAgICAgICAgICAgICAgICAgICBcDQotICAgIF9fYXNtIHZvbGF0aWxlICggIk1TUiBEQUlGU0VULCAjMiIgOjo6ICJtZW1vcnkiICk7IFwNCi0gICAgX19hc20gdm9sYXRpbGUgKCAiRFNCIFNZIiApOyAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICBfX2FzbSB2b2xhdGlsZSAoICJJU0IgU1kiICk7DQorI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkJCQkJCQkJCQlcDQorCV9fYXNtIHZvbGF0aWxlICggIk1TUiBEQUlGU0VULCAjMiIgOjo6ICJtZW1vcnkiICk7CQkJCVwNCisJX19hc20gdm9sYXRpbGUgKCAiRFNCIFNZIiApOwkJCQkJCQkJCVwNCisJX19hc20gdm9sYXRpbGUgKCAiSVNCIFNZIiApOw0KIA0KLSAgICAjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpICAgICAgICAgICAgICAgICAgICBcDQotICAgIF9fYXNtIHZvbGF0aWxlICggIk1TUiBEQUlGQ0xSLCAjMiIgOjo6ICJtZW1vcnkiICk7IFwNCi0gICAgX19hc20gdm9sYXRpbGUgKCAiRFNCIFNZIiApOyAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICBfX2FzbSB2b2xhdGlsZSAoICJJU0IgU1kiICk7DQorI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKQkJCQkJCQkJCQlcDQorCV9fYXNtIHZvbGF0aWxlICggIk1TUiBEQUlGQ0xSLCAjMiIgOjo6ICJtZW1vcnkiICk7CQkJCVwNCisJX19hc20gdm9sYXRpbGUgKCAiRFNCIFNZIiApOwkJCQkJCQkJCVwNCisJX19hc20gdm9sYXRpbGUgKCAiSVNCIFNZIiApOw0KIA0KIA0KIC8qIFRoZXNlIG1hY3JvcyBkbyBub3QgZ2xvYmFsbHkgZGlzYWJsZS9lbmFibGUgaW50ZXJydXB0cy4gIFRoZXkgZG8gbWFzayBvZmYNCi0gKiBpbnRlcnJ1cHRzIHRoYXQgaGF2ZSBhIHByaW9yaXR5IGJlbG93IGNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkuICovDQotICAgICNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgICAgICAgICAgICAgICAgICAgICAgdlBvcnRFbnRlckNyaXRpY2FsKCk7DQotICAgICNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKSAgICAgICAgICAgICAgICAgICAgICAgdlBvcnRFeGl0Q3JpdGljYWwoKTsNCi0gICAgI2RlZmluZSBwb3J0U0VUX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCkgICAgICAgICB1eFBvcnRTZXRJbnRlcnJ1cHRNYXNrKCkNCi0gICAgI2RlZmluZSBwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoIHggKSAgICB2UG9ydENsZWFySW50ZXJydXB0TWFzayggeCApDQoraW50ZXJydXB0cyB0aGF0IGhhdmUgYSBwcmlvcml0eSBiZWxvdyBjb25maWdNQVhfQVBJX0NBTExfSU5URVJSVVBUX1BSSU9SSVRZLiAqLw0KKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkJCXZQb3J0RW50ZXJDcml0aWNhbCgpOw0KKyNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKQkJCXZQb3J0RXhpdENyaXRpY2FsKCk7DQorI2RlZmluZSBwb3J0U0VUX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCkJCXV4UG9ydFNldEludGVycnVwdE1hc2soKQ0KKyNkZWZpbmUgcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKHgpCXZQb3J0Q2xlYXJJbnRlcnJ1cHRNYXNrKHgpDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICBUaGVzZSBhcmUNCi0gKiBub3QgcmVxdWlyZWQgZm9yIHRoaXMgcG9ydCBidXQgaW5jbHVkZWQgaW4gY2FzZSBjb21tb24gZGVtbyBjb2RlIHRoYXQgdXNlcyB0aGVzZQ0KLSAqIG1hY3JvcyBpcyB1c2VkLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCi0gICAgI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICAgICAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQorbm90IHJlcXVpcmVkIGZvciB0aGlzIHBvcnQgYnV0IGluY2x1ZGVkIGluIGNhc2UgY29tbW9uIGRlbW8gY29kZSB0aGF0IHVzZXMgdGhlc2UNCittYWNyb3MgaXMgdXNlZC4gKi8NCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApCXZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkJdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQogDQogLyogUHJvdG90eXBlIG9mIHRoZSBGcmVlUlRPUyB0aWNrIGhhbmRsZXIuICBUaGlzIG11c3QgYmUgaW5zdGFsbGVkIGFzIHRoZQ0KLSAqIGhhbmRsZXIgZm9yIHdoaWNoZXZlciBwZXJpcGhlcmFsIGlzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIFJUT1MgdGljay4gKi8NCi0gICAgdm9pZCBGcmVlUlRPU19UaWNrX0hhbmRsZXIoIHZvaWQgKTsNCitoYW5kbGVyIGZvciB3aGljaGV2ZXIgcGVyaXBoZXJhbCBpcyB1c2VkIHRvIGdlbmVyYXRlIHRoZSBSVE9TIHRpY2suICovDQordm9pZCBGcmVlUlRPU19UaWNrX0hhbmRsZXIoIHZvaWQgKTsNCiANCiAvKiBBbnkgdGFzayB0aGF0IHVzZXMgdGhlIGZsb2F0aW5nIHBvaW50IHVuaXQgTVVTVCBjYWxsIHZQb3J0VGFza1VzZXNGUFUoKQ0KLSAqIGJlZm9yZSBhbnkgZmxvYXRpbmcgcG9pbnQgaW5zdHJ1Y3Rpb25zIGFyZSBleGVjdXRlZC4gKi8NCi0gICAgdm9pZCB2UG9ydFRhc2tVc2VzRlBVKCB2b2lkICk7DQotICAgICNkZWZpbmUgcG9ydFRBU0tfVVNFU19GTE9BVElOR19QT0lOVCgpICAgIHZQb3J0VGFza1VzZXNGUFUoKQ0KK2JlZm9yZSBhbnkgZmxvYXRpbmcgcG9pbnQgaW5zdHJ1Y3Rpb25zIGFyZSBleGVjdXRlZC4gKi8NCit2b2lkIHZQb3J0VGFza1VzZXNGUFUoIHZvaWQgKTsNCisjZGVmaW5lIHBvcnRUQVNLX1VTRVNfRkxPQVRJTkdfUE9JTlQoKSB2UG9ydFRhc2tVc2VzRlBVKCkNCiANCi0gICAgI2RlZmluZSBwb3J0TE9XRVNUX0lOVEVSUlVQVF9QUklPUklUWSAgICAgICAgICAgKCAoICggdWludDMyX3QgKSBjb25maWdVTklRVUVfSU5URVJSVVBUX1BSSU9SSVRJRVMgKSAtIDFVTCApDQotICAgICNkZWZpbmUgcG9ydExPV0VTVF9VU0FCTEVfSU5URVJSVVBUX1BSSU9SSVRZICAgICggcG9ydExPV0VTVF9JTlRFUlJVUFRfUFJJT1JJVFkgLSAxVUwgKQ0KKyNkZWZpbmUgcG9ydExPV0VTVF9JTlRFUlJVUFRfUFJJT1JJVFkgKCAoICggdWludDMyX3QgKSBjb25maWdVTklRVUVfSU5URVJSVVBUX1BSSU9SSVRJRVMgKSAtIDFVTCApDQorI2RlZmluZSBwb3J0TE9XRVNUX1VTQUJMRV9JTlRFUlJVUFRfUFJJT1JJVFkgKCBwb3J0TE9XRVNUX0lOVEVSUlVQVF9QUklPUklUWSAtIDFVTCApDQogDQogLyogQXJjaGl0ZWN0dXJlIHNwZWNpZmljIG9wdGltaXNhdGlvbnMuICovDQotICAgICNpZm5kZWYgY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9ODQotICAgICAgICAjZGVmaW5lIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiAgICAxDQotICAgICNlbmRpZg0KKyNpZm5kZWYgY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9ODQorCSNkZWZpbmUgY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OIDENCisjZW5kaWYNCiANCi0gICAgI2lmIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiA9PSAxDQorI2lmIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiA9PSAxDQogDQotLyogU3RvcmUvY2xlYXIgdGhlIHJlYWR5IHByaW9yaXRpZXMgaW4gYSBiaXQgbWFwLiAqLw0KLSAgICAgICAgI2RlZmluZSBwb3J0UkVDT1JEX1JFQURZX1BSSU9SSVRZKCB1eFByaW9yaXR5LCB1eFJlYWR5UHJpb3JpdGllcyApICAgICggdXhSZWFkeVByaW9yaXRpZXMgKSB8PSAoIDFVTCA8PCAoIHV4UHJpb3JpdHkgKSApDQotICAgICAgICAjZGVmaW5lIHBvcnRSRVNFVF9SRUFEWV9QUklPUklUWSggdXhQcmlvcml0eSwgdXhSZWFkeVByaW9yaXRpZXMgKSAgICAgKCB1eFJlYWR5UHJpb3JpdGllcyApICY9IH4oIDFVTCA8PCAoIHV4UHJpb3JpdHkgKSApDQorCS8qIFN0b3JlL2NsZWFyIHRoZSByZWFkeSBwcmlvcml0aWVzIGluIGEgYml0IG1hcC4gKi8NCisJI2RlZmluZSBwb3J0UkVDT1JEX1JFQURZX1BSSU9SSVRZKCB1eFByaW9yaXR5LCB1eFJlYWR5UHJpb3JpdGllcyApICggdXhSZWFkeVByaW9yaXRpZXMgKSB8PSAoIDFVTCA8PCAoIHV4UHJpb3JpdHkgKSApDQorCSNkZWZpbmUgcG9ydFJFU0VUX1JFQURZX1BSSU9SSVRZKCB1eFByaW9yaXR5LCB1eFJlYWR5UHJpb3JpdGllcyApICggdXhSZWFkeVByaW9yaXRpZXMgKSAmPSB+KCAxVUwgPDwgKCB1eFByaW9yaXR5ICkgKQ0KIA0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0gICAgICAgICNkZWZpbmUgcG9ydEdFVF9ISUdIRVNUX1BSSU9SSVRZKCB1eFRvcFByaW9yaXR5LCB1eFJlYWR5UHJpb3JpdGllcyApICAgIHV4VG9wUHJpb3JpdHkgPSAoIDMxIC0gX19idWlsdGluX2NseiggdXhSZWFkeVByaW9yaXRpZXMgKSApDQorCSNkZWZpbmUgcG9ydEdFVF9ISUdIRVNUX1BSSU9SSVRZKCB1eFRvcFByaW9yaXR5LCB1eFJlYWR5UHJpb3JpdGllcyApIHV4VG9wUHJpb3JpdHkgPSAoIDMxIC0gX19idWlsdGluX2NseiggdXhSZWFkeVByaW9yaXRpZXMgKSApDQogDQotICAgICNlbmRpZiAvKiBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gKi8NCisjZW5kaWYgLyogY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OICovDQogDQotICAgICNpZmRlZiBjb25maWdBU1NFUlQNCi0gICAgICAgIHZvaWQgdlBvcnRWYWxpZGF0ZUludGVycnVwdFByaW9yaXR5KCB2b2lkICk7DQotICAgICAgICAjZGVmaW5lIHBvcnRBU1NFUlRfSUZfSU5URVJSVVBUX1BSSU9SSVRZX0lOVkFMSUQoKSAgICB2UG9ydFZhbGlkYXRlSW50ZXJydXB0UHJpb3JpdHkoKQ0KLSAgICAjZW5kaWYgLyogY29uZmlnQVNTRVJUICovDQorI2lmZGVmIGNvbmZpZ0FTU0VSVA0KKwl2b2lkIHZQb3J0VmFsaWRhdGVJbnRlcnJ1cHRQcmlvcml0eSggdm9pZCApOw0KKwkjZGVmaW5lIHBvcnRBU1NFUlRfSUZfSU5URVJSVVBUX1BSSU9SSVRZX0lOVkFMSUQoKSAJdlBvcnRWYWxpZGF0ZUludGVycnVwdFByaW9yaXR5KCkNCisjZW5kaWYgLyogY29uZmlnQVNTRVJUICovDQogDQotICAgICNkZWZpbmUgcG9ydE5PUCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2FzbSB2b2xhdGlsZSAoICJOT1AiICkNCi0gICAgI2RlZmluZSBwb3J0SU5MSU5FICAgIF9faW5saW5lDQorI2RlZmluZSBwb3J0Tk9QKCkgX19hc20gdm9sYXRpbGUoICJOT1AiICkNCisjZGVmaW5lIHBvcnRJTkxJTkUgX19pbmxpbmUNCiANCi0gICAgI2lmZGVmIF9fY3BsdXNwbHVzDQotICAgICAgICB9IC8qIGV4dGVybiBDICovDQotICAgICNlbmRpZg0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KKwl9IC8qIGV4dGVybiBDICovDQorI2VuZGlmDQogDQogDQogLyogVGhlIG51bWJlciBvZiBiaXRzIHRvIHNoaWZ0IGZvciBhbiBpbnRlcnJ1cHQgcHJpb3JpdHkgaXMgZGVwZW5kZW50IG9uIHRoZQ0KLSAqIG51bWJlciBvZiBiaXRzIGltcGxlbWVudGVkIGJ5IHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlci4gKi8NCi0gICAgI2lmIGNvbmZpZ1VOSVFVRV9JTlRFUlJVUFRfUFJJT1JJVElFUyA9PSAxNg0KLSAgICAgICAgI2RlZmluZSBwb3J0UFJJT1JJVFlfU0hJRlQgICAgICAgICAgICA0DQotICAgICAgICAjZGVmaW5lIHBvcnRNQVhfQklOQVJZX1BPSU5UX1ZBTFVFICAgIDMNCi0gICAgI2VsaWYgY29uZmlnVU5JUVVFX0lOVEVSUlVQVF9QUklPUklUSUVTID09IDMyDQotICAgICAgICAjZGVmaW5lIHBvcnRQUklPUklUWV9TSElGVCAgICAgICAgICAgIDMNCi0gICAgICAgICNkZWZpbmUgcG9ydE1BWF9CSU5BUllfUE9JTlRfVkFMVUUgICAgMg0KLSAgICAjZWxpZiBjb25maWdVTklRVUVfSU5URVJSVVBUX1BSSU9SSVRJRVMgPT0gNjQNCi0gICAgICAgICNkZWZpbmUgcG9ydFBSSU9SSVRZX1NISUZUICAgICAgICAgICAgMg0KLSAgICAgICAgI2RlZmluZSBwb3J0TUFYX0JJTkFSWV9QT0lOVF9WQUxVRSAgICAxDQotICAgICNlbGlmIGNvbmZpZ1VOSVFVRV9JTlRFUlJVUFRfUFJJT1JJVElFUyA9PSAxMjgNCi0gICAgICAgICNkZWZpbmUgcG9ydFBSSU9SSVRZX1NISUZUICAgICAgICAgICAgMQ0KLSAgICAgICAgI2RlZmluZSBwb3J0TUFYX0JJTkFSWV9QT0lOVF9WQUxVRSAgICAwDQotICAgICNlbGlmIGNvbmZpZ1VOSVFVRV9JTlRFUlJVUFRfUFJJT1JJVElFUyA9PSAyNTYNCi0gICAgICAgICNkZWZpbmUgcG9ydFBSSU9SSVRZX1NISUZUICAgICAgICAgICAgMA0KLSAgICAgICAgI2RlZmluZSBwb3J0TUFYX0JJTkFSWV9QT0lOVF9WQUxVRSAgICAwDQotICAgICNlbHNlIC8qIGlmIGNvbmZpZ1VOSVFVRV9JTlRFUlJVUFRfUFJJT1JJVElFUyA9PSAxNiAqLw0KLSAgICAgICAgI2Vycm9yIEludmFsaWQgY29uZmlnVU5JUVVFX0lOVEVSUlVQVF9QUklPUklUSUVTIHNldHRpbmcuICBjb25maWdVTklRVUVfSU5URVJSVVBUX1BSSU9SSVRJRVMgbXVzdCBiZSBzZXQgdG8gdGhlIG51bWJlciBvZiB1bmlxdWUgcHJpb3JpdGllcyBpbXBsZW1lbnRlZCBieSB0aGUgdGFyZ2V0IGhhcmR3YXJlDQotICAgICNlbmRpZiAvKiBpZiBjb25maWdVTklRVUVfSU5URVJSVVBUX1BSSU9SSVRJRVMgPT0gMTYgKi8NCitudW1iZXIgb2YgYml0cyBpbXBsZW1lbnRlZCBieSB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIuICovDQorI2lmIGNvbmZpZ1VOSVFVRV9JTlRFUlJVUFRfUFJJT1JJVElFUyA9PSAxNg0KKwkjZGVmaW5lIHBvcnRQUklPUklUWV9TSElGVCA0DQorCSNkZWZpbmUgcG9ydE1BWF9CSU5BUllfUE9JTlRfVkFMVUUJMw0KKyNlbGlmIGNvbmZpZ1VOSVFVRV9JTlRFUlJVUFRfUFJJT1JJVElFUyA9PSAzMg0KKwkjZGVmaW5lIHBvcnRQUklPUklUWV9TSElGVCAzDQorCSNkZWZpbmUgcG9ydE1BWF9CSU5BUllfUE9JTlRfVkFMVUUJMg0KKyNlbGlmIGNvbmZpZ1VOSVFVRV9JTlRFUlJVUFRfUFJJT1JJVElFUyA9PSA2NA0KKwkjZGVmaW5lIHBvcnRQUklPUklUWV9TSElGVCAyDQorCSNkZWZpbmUgcG9ydE1BWF9CSU5BUllfUE9JTlRfVkFMVUUJMQ0KKyNlbGlmIGNvbmZpZ1VOSVFVRV9JTlRFUlJVUFRfUFJJT1JJVElFUyA9PSAxMjgNCisJI2RlZmluZSBwb3J0UFJJT1JJVFlfU0hJRlQgMQ0KKwkjZGVmaW5lIHBvcnRNQVhfQklOQVJZX1BPSU5UX1ZBTFVFCTANCisjZWxpZiBjb25maWdVTklRVUVfSU5URVJSVVBUX1BSSU9SSVRJRVMgPT0gMjU2DQorCSNkZWZpbmUgcG9ydFBSSU9SSVRZX1NISUZUIDANCisJI2RlZmluZSBwb3J0TUFYX0JJTkFSWV9QT0lOVF9WQUxVRQkwDQorI2Vsc2UNCisJI2Vycm9yIEludmFsaWQgY29uZmlnVU5JUVVFX0lOVEVSUlVQVF9QUklPUklUSUVTIHNldHRpbmcuICBjb25maWdVTklRVUVfSU5URVJSVVBUX1BSSU9SSVRJRVMgbXVzdCBiZSBzZXQgdG8gdGhlIG51bWJlciBvZiB1bmlxdWUgcHJpb3JpdGllcyBpbXBsZW1lbnRlZCBieSB0aGUgdGFyZ2V0IGhhcmR3YXJlDQorI2VuZGlmDQogDQogLyogSW50ZXJydXB0IGNvbnRyb2xsZXIgYWNjZXNzIGFkZHJlc3Nlcy4gKi8NCi0gICAgI2RlZmluZSBwb3J0SUNDUE1SX1BSSU9SSVRZX01BU0tfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICggMHgwNCApDQotICAgICNkZWZpbmUgcG9ydElDQ0lBUl9JTlRFUlJVUFRfQUNLTk9XTEVER0VfT0ZGU0VUICAgICAgICAgICAgICAoIDB4MEMgKQ0KLSAgICAjZGVmaW5lIHBvcnRJQ0NFT0lSX0VORF9PRl9JTlRFUlJVUFRfT0ZGU0VUICAgICAgICAgICAgICAgICAgKCAweDEwICkNCi0gICAgI2RlZmluZSBwb3J0SUNDQlBSX0JJTkFSWV9QT0lOVF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICggMHgwOCApDQotICAgICNkZWZpbmUgcG9ydElDQ1JQUl9SVU5OSU5HX1BSSU9SSVRZX09GRlNFVCAgICAgICAgICAgICAgICAgICAoIDB4MTQgKQ0KKyNkZWZpbmUgcG9ydElDQ1BNUl9QUklPUklUWV9NQVNLX09GRlNFVCAgCQkJCQkJKCAweDA0ICkNCisjZGVmaW5lIHBvcnRJQ0NJQVJfSU5URVJSVVBUX0FDS05PV0xFREdFX09GRlNFVCAJCQkJKCAweDBDICkNCisjZGVmaW5lIHBvcnRJQ0NFT0lSX0VORF9PRl9JTlRFUlJVUFRfT0ZGU0VUIAkJCQkJKCAweDEwICkNCisjZGVmaW5lIHBvcnRJQ0NCUFJfQklOQVJZX1BPSU5UX09GRlNFVAkJCQkJCQkoIDB4MDggKQ0KKyNkZWZpbmUgcG9ydElDQ1JQUl9SVU5OSU5HX1BSSU9SSVRZX09GRlNFVAkJCQkJCSggMHgxNCApDQogDQotICAgICNkZWZpbmUgcG9ydElOVEVSUlVQVF9DT05UUk9MTEVSX0NQVV9JTlRFUkZBQ0VfQUREUkVTUyAgICAgICAoIGNvbmZpZ0lOVEVSUlVQVF9DT05UUk9MTEVSX0JBU0VfQUREUkVTUyArIGNvbmZpZ0lOVEVSUlVQVF9DT05UUk9MTEVSX0NQVV9JTlRFUkZBQ0VfT0ZGU0VUICkNCi0gICAgI2RlZmluZSBwb3J0SUNDUE1SX1BSSU9SSVRZX01BU0tfUkVHSVNURVIgICAgICAgICAgICAgICAgICAgICggKiggKCB2b2xhdGlsZSB1aW50MzJfdCAqICkgKCBwb3J0SU5URVJSVVBUX0NPTlRST0xMRVJfQ1BVX0lOVEVSRkFDRV9BRERSRVNTICsgcG9ydElDQ1BNUl9QUklPUklUWV9NQVNLX09GRlNFVCApICkgKQ0KLSAgICAjZGVmaW5lIHBvcnRJQ0NJQVJfSU5URVJSVVBUX0FDS05PV0xFREdFX1JFR0lTVEVSX0FERFJFU1MgICAgKCBwb3J0SU5URVJSVVBUX0NPTlRST0xMRVJfQ1BVX0lOVEVSRkFDRV9BRERSRVNTICsgcG9ydElDQ0lBUl9JTlRFUlJVUFRfQUNLTk9XTEVER0VfT0ZGU0VUICkNCi0gICAgI2RlZmluZSBwb3J0SUNDRU9JUl9FTkRfT0ZfSU5URVJSVVBUX1JFR0lTVEVSX0FERFJFU1MgICAgICAgICggcG9ydElOVEVSUlVQVF9DT05UUk9MTEVSX0NQVV9JTlRFUkZBQ0VfQUREUkVTUyArIHBvcnRJQ0NFT0lSX0VORF9PRl9JTlRFUlJVUFRfT0ZGU0VUICkNCi0gICAgI2RlZmluZSBwb3J0SUNDUE1SX1BSSU9SSVRZX01BU0tfUkVHSVNURVJfQUREUkVTUyAgICAgICAgICAgICggcG9ydElOVEVSUlVQVF9DT05UUk9MTEVSX0NQVV9JTlRFUkZBQ0VfQUREUkVTUyArIHBvcnRJQ0NQTVJfUFJJT1JJVFlfTUFTS19PRkZTRVQgKQ0KLSAgICAjZGVmaW5lIHBvcnRJQ0NCUFJfQklOQVJZX1BPSU5UX1JFR0lTVEVSICAgICAgICAgICAgICAgICAgICAgKCAqKCAoIGNvbnN0IHZvbGF0aWxlIHVpbnQzMl90ICogKSAoIHBvcnRJTlRFUlJVUFRfQ09OVFJPTExFUl9DUFVfSU5URVJGQUNFX0FERFJFU1MgKyBwb3J0SUNDQlBSX0JJTkFSWV9QT0lOVF9PRkZTRVQgKSApICkNCi0gICAgI2RlZmluZSBwb3J0SUNDUlBSX1JVTk5JTkdfUFJJT1JJVFlfUkVHSVNURVIgICAgICAgICAgICAgICAgICggKiggKCBjb25zdCB2b2xhdGlsZSB1aW50MzJfdCAqICkgKCBwb3J0SU5URVJSVVBUX0NPTlRST0xMRVJfQ1BVX0lOVEVSRkFDRV9BRERSRVNTICsgcG9ydElDQ1JQUl9SVU5OSU5HX1BSSU9SSVRZX09GRlNFVCApICkgKQ0KKyNkZWZpbmUgcG9ydElOVEVSUlVQVF9DT05UUk9MTEVSX0NQVV9JTlRFUkZBQ0VfQUREUkVTUyAJCSggY29uZmlnSU5URVJSVVBUX0NPTlRST0xMRVJfQkFTRV9BRERSRVNTICsgY29uZmlnSU5URVJSVVBUX0NPTlRST0xMRVJfQ1BVX0lOVEVSRkFDRV9PRkZTRVQgKQ0KKyNkZWZpbmUgcG9ydElDQ1BNUl9QUklPUklUWV9NQVNLX1JFR0lTVEVSIAkJCQkJKCAqKCAoIHZvbGF0aWxlIHVpbnQzMl90ICogKSAoIHBvcnRJTlRFUlJVUFRfQ09OVFJPTExFUl9DUFVfSU5URVJGQUNFX0FERFJFU1MgKyBwb3J0SUNDUE1SX1BSSU9SSVRZX01BU0tfT0ZGU0VUICkgKSApDQorI2RlZmluZSBwb3J0SUNDSUFSX0lOVEVSUlVQVF9BQ0tOT1dMRURHRV9SRUdJU1RFUl9BRERSRVNTIAkoIHBvcnRJTlRFUlJVUFRfQ09OVFJPTExFUl9DUFVfSU5URVJGQUNFX0FERFJFU1MgKyBwb3J0SUNDSUFSX0lOVEVSUlVQVF9BQ0tOT1dMRURHRV9PRkZTRVQgKQ0KKyNkZWZpbmUgcG9ydElDQ0VPSVJfRU5EX09GX0lOVEVSUlVQVF9SRUdJU1RFUl9BRERSRVNTIAkJKCBwb3J0SU5URVJSVVBUX0NPTlRST0xMRVJfQ1BVX0lOVEVSRkFDRV9BRERSRVNTICsgcG9ydElDQ0VPSVJfRU5EX09GX0lOVEVSUlVQVF9PRkZTRVQgKQ0KKyNkZWZpbmUgcG9ydElDQ1BNUl9QUklPUklUWV9NQVNLX1JFR0lTVEVSX0FERFJFU1MgCQkJKCBwb3J0SU5URVJSVVBUX0NPTlRST0xMRVJfQ1BVX0lOVEVSRkFDRV9BRERSRVNTICsgcG9ydElDQ1BNUl9QUklPUklUWV9NQVNLX09GRlNFVCApDQorI2RlZmluZSBwb3J0SUNDQlBSX0JJTkFSWV9QT0lOVF9SRUdJU1RFUiAJCQkJCSggKiggKCBjb25zdCB2b2xhdGlsZSB1aW50MzJfdCAqICkgKCBwb3J0SU5URVJSVVBUX0NPTlRST0xMRVJfQ1BVX0lOVEVSRkFDRV9BRERSRVNTICsgcG9ydElDQ0JQUl9CSU5BUllfUE9JTlRfT0ZGU0VUICkgKSApDQorI2RlZmluZSBwb3J0SUNDUlBSX1JVTk5JTkdfUFJJT1JJVFlfUkVHSVNURVIgCQkJCSggKiggKCBjb25zdCB2b2xhdGlsZSB1aW50MzJfdCAqICkgKCBwb3J0SU5URVJSVVBUX0NPTlRST0xMRVJfQ1BVX0lOVEVSRkFDRV9BRERSRVNTICsgcG9ydElDQ1JQUl9SVU5OSU5HX1BSSU9SSVRZX09GRlNFVCApICkgKQ0KIA0KLSAgICAjZGVmaW5lIHBvcnRNRU1PUllfQkFSUklFUigpICAgIF9fYXNtIHZvbGF0aWxlICggIiIgOjo6ICJtZW1vcnkiICkNCisjZGVmaW5lIHBvcnRNRU1PUllfQkFSUklFUigpIF9fYXNtIHZvbGF0aWxlKCAiIiA6OjogIm1lbW9yeSIgKQ0KIA0KICNlbmRpZiAvKiBQT1JUTUFDUk9fSCAqLw0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0dDQy9BUk1fQ0E5L3BvcnQuYyBiL3BvcnRhYmxlL0dDQy9BUk1fQ0E5L3BvcnQuYwppbmRleCBlODI2YjlmLi5hOTY4YzFlIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9HQ0MvQVJNX0NBOS9wb3J0LmMKKysrIGIvcG9ydGFibGUvR0NDL0FSTV9DQTkvcG9ydC5jCkBAIC0zMywxMjMgKzMzLDEyMyBAQAogI2luY2x1ZGUgInRhc2suaCINCiANCiAjaWZuZGVmIGNvbmZpZ0lOVEVSUlVQVF9DT05UUk9MTEVSX0JBU0VfQUREUkVTUw0KLSAgICAjZXJyb3IgY29uZmlnSU5URVJSVVBUX0NPTlRST0xMRVJfQkFTRV9BRERSRVNTIG11c3QgYmUgZGVmaW5lZC4gIFNlZSBodHRwOiAvKnd3dy5mcmVlcnRvcy5vcmcvVXNpbmctRnJlZVJUT1Mtb24tQ29ydGV4LUEtRW1iZWRkZWQtUHJvY2Vzc29ycy5odG1sICovDQorCSNlcnJvciBjb25maWdJTlRFUlJVUFRfQ09OVFJPTExFUl9CQVNFX0FERFJFU1MgbXVzdCBiZSBkZWZpbmVkLiAgU2VlIGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL1VzaW5nLUZyZWVSVE9TLW9uLUNvcnRleC1BLUVtYmVkZGVkLVByb2Nlc3NvcnMuaHRtbA0KICNlbmRpZg0KIA0KICNpZm5kZWYgY29uZmlnSU5URVJSVVBUX0NPTlRST0xMRVJfQ1BVX0lOVEVSRkFDRV9PRkZTRVQNCi0gICAgI2Vycm9yIGNvbmZpZ0lOVEVSUlVQVF9DT05UUk9MTEVSX0NQVV9JTlRFUkZBQ0VfT0ZGU0VUIG11c3QgYmUgZGVmaW5lZC4gIFNlZSBodHRwOiAvKnd3dy5mcmVlcnRvcy5vcmcvVXNpbmctRnJlZVJUT1Mtb24tQ29ydGV4LUEtRW1iZWRkZWQtUHJvY2Vzc29ycy5odG1sICovDQorCSNlcnJvciBjb25maWdJTlRFUlJVUFRfQ09OVFJPTExFUl9DUFVfSU5URVJGQUNFX09GRlNFVCBtdXN0IGJlIGRlZmluZWQuICBTZWUgaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvVXNpbmctRnJlZVJUT1Mtb24tQ29ydGV4LUEtRW1iZWRkZWQtUHJvY2Vzc29ycy5odG1sDQogI2VuZGlmDQogDQogI2lmbmRlZiBjb25maWdVTklRVUVfSU5URVJSVVBUX1BSSU9SSVRJRVMNCi0gICAgI2Vycm9yIGNvbmZpZ1VOSVFVRV9JTlRFUlJVUFRfUFJJT1JJVElFUyBtdXN0IGJlIGRlZmluZWQuICBTZWUgaHR0cDogLyp3d3cuZnJlZXJ0b3Mub3JnL1VzaW5nLUZyZWVSVE9TLW9uLUNvcnRleC1BLUVtYmVkZGVkLVByb2Nlc3NvcnMuaHRtbCAqLw0KKwkjZXJyb3IgY29uZmlnVU5JUVVFX0lOVEVSUlVQVF9QUklPUklUSUVTIG11c3QgYmUgZGVmaW5lZC4gIFNlZSBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9Vc2luZy1GcmVlUlRPUy1vbi1Db3J0ZXgtQS1FbWJlZGRlZC1Qcm9jZXNzb3JzLmh0bWwNCiAjZW5kaWYNCiANCiAjaWZuZGVmIGNvbmZpZ1NFVFVQX1RJQ0tfSU5URVJSVVBUDQotICAgICNlcnJvciBjb25maWdTRVRVUF9USUNLX0lOVEVSUlVQVCgpIG11c3QgYmUgZGVmaW5lZC4gIFNlZSBodHRwOiAvKnd3dy5mcmVlcnRvcy5vcmcvVXNpbmctRnJlZVJUT1Mtb24tQ29ydGV4LUEtRW1iZWRkZWQtUHJvY2Vzc29ycy5odG1sICovDQorCSNlcnJvciBjb25maWdTRVRVUF9USUNLX0lOVEVSUlVQVCgpIG11c3QgYmUgZGVmaW5lZC4gIFNlZSBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9Vc2luZy1GcmVlUlRPUy1vbi1Db3J0ZXgtQS1FbWJlZGRlZC1Qcm9jZXNzb3JzLmh0bWwNCiAjZW5kaWYgLyogY29uZmlnU0VUVVBfVElDS19JTlRFUlJVUFQgKi8NCiANCiAjaWZuZGVmIGNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkNCi0gICAgI2Vycm9yIGNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgbXVzdCBiZSBkZWZpbmVkLiAgU2VlIGh0dHA6IC8qd3d3LmZyZWVydG9zLm9yZy9Vc2luZy1GcmVlUlRPUy1vbi1Db3J0ZXgtQS1FbWJlZGRlZC1Qcm9jZXNzb3JzLmh0bWwgKi8NCisJI2Vycm9yIGNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgbXVzdCBiZSBkZWZpbmVkLiAgU2VlIGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL1VzaW5nLUZyZWVSVE9TLW9uLUNvcnRleC1BLUVtYmVkZGVkLVByb2Nlc3NvcnMuaHRtbA0KICNlbmRpZg0KIA0KICNpZiBjb25maWdNQVhfQVBJX0NBTExfSU5URVJSVVBUX1BSSU9SSVRZID09IDANCi0gICAgI2Vycm9yIGNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgbXVzdCBub3QgYmUgc2V0IHRvIDANCisJI2Vycm9yIGNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgbXVzdCBub3QgYmUgc2V0IHRvIDANCiAjZW5kaWYNCiANCiAjaWYgY29uZmlnTUFYX0FQSV9DQUxMX0lOVEVSUlVQVF9QUklPUklUWSA+IGNvbmZpZ1VOSVFVRV9JTlRFUlJVUFRfUFJJT1JJVElFUw0KLSAgICAjZXJyb3IgY29uZmlnTUFYX0FQSV9DQUxMX0lOVEVSUlVQVF9QUklPUklUWSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBjb25maWdVTklRVUVfSU5URVJSVVBUX1BSSU9SSVRJRVMgYXMgdGhlIGxvd2VyIHRoZSBudW1lcmljIHByaW9yaXR5IHZhbHVlIHRoZSBoaWdoZXIgdGhlIGxvZ2ljYWwgaW50ZXJydXB0IHByaW9yaXR5DQorCSNlcnJvciBjb25maWdNQVhfQVBJX0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGNvbmZpZ1VOSVFVRV9JTlRFUlJVUFRfUFJJT1JJVElFUyBhcyB0aGUgbG93ZXIgdGhlIG51bWVyaWMgcHJpb3JpdHkgdmFsdWUgdGhlIGhpZ2hlciB0aGUgbG9naWNhbCBpbnRlcnJ1cHQgcHJpb3JpdHkNCiAjZW5kaWYNCiANCiAjaWYgY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OID09IDENCi0gICAgLyogQ2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24uICovDQotICAgICNpZiAoIGNvbmZpZ01BWF9QUklPUklUSUVTID4gMzIgKQ0KLSAgICAgICAgI2Vycm9yIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiBjYW4gb25seSBiZSBzZXQgdG8gMSB3aGVuIGNvbmZpZ01BWF9QUklPUklUSUVTIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAzMi4gIEl0IGlzIHZlcnkgcmFyZSB0aGF0IGEgc3lzdGVtIHJlcXVpcmVzIG1vcmUgdGhhbiAxMCB0byAxNSBkaWZmZXJlbmNlIHByaW9yaXRpZXMgYXMgdGFza3MgdGhhdCBzaGFyZSBhIHByaW9yaXR5IHdpbGwgdGltZSBzbGljZS4NCi0gICAgI2VuZGlmDQorCS8qIENoZWNrIHRoZSBjb25maWd1cmF0aW9uLiAqLw0KKwkjaWYoIGNvbmZpZ01BWF9QUklPUklUSUVTID4gMzIgKQ0KKwkJI2Vycm9yIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiBjYW4gb25seSBiZSBzZXQgdG8gMSB3aGVuIGNvbmZpZ01BWF9QUklPUklUSUVTIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAzMi4gIEl0IGlzIHZlcnkgcmFyZSB0aGF0IGEgc3lzdGVtIHJlcXVpcmVzIG1vcmUgdGhhbiAxMCB0byAxNSBkaWZmZXJlbmNlIHByaW9yaXRpZXMgYXMgdGFza3MgdGhhdCBzaGFyZSBhIHByaW9yaXR5IHdpbGwgdGltZSBzbGljZS4NCisJI2VuZGlmDQogI2VuZGlmIC8qIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiAqLw0KIA0KIC8qIEluIGNhc2Ugc2VjdXJpdHkgZXh0ZW5zaW9ucyBhcmUgaW1wbGVtZW50ZWQuICovDQogI2lmIGNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgPD0gKCBjb25maWdVTklRVUVfSU5URVJSVVBUX1BSSU9SSVRJRVMgLyAyICkNCi0gICAgI2Vycm9yIGNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgbXVzdCBiZSBncmVhdGVyIHRoYW4gKCBjb25maWdVTklRVUVfSU5URVJSVVBUX1BSSU9SSVRJRVMgLyAyICkNCisJI2Vycm9yIGNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgbXVzdCBiZSBncmVhdGVyIHRoYW4gKCBjb25maWdVTklRVUVfSU5URVJSVVBUX1BSSU9SSVRJRVMgLyAyICkNCiAjZW5kaWYNCiANCiAvKiBTb21lIHZlbmRvciBzcGVjaWZpYyBmaWxlcyBkZWZhdWx0IGNvbmZpZ0NMRUFSX1RJQ0tfSU5URVJSVVBUKCkgaW4NCi0gKiBwb3J0bWFjcm8uaC4gKi8NCitwb3J0bWFjcm8uaC4gKi8NCiAjaWZuZGVmIGNvbmZpZ0NMRUFSX1RJQ0tfSU5URVJSVVBUDQotICAgICNkZWZpbmUgY29uZmlnQ0xFQVJfVElDS19JTlRFUlJVUFQoKQ0KKwkjZGVmaW5lIGNvbmZpZ0NMRUFSX1RJQ0tfSU5URVJSVVBUKCkNCiAjZW5kaWYNCiANCiAvKiBBIGNyaXRpY2FsIHNlY3Rpb24gaXMgZXhpdGVkIHdoZW4gdGhlIGNyaXRpY2FsIHNlY3Rpb24gbmVzdGluZyBjb3VudCByZWFjaGVzDQotICogdGhpcyB2YWx1ZS4gKi8NCi0jZGVmaW5lIHBvcnROT19DUklUSUNBTF9ORVNUSU5HICAgICAgICAgICggKCB1aW50MzJfdCApIDAgKQ0KK3RoaXMgdmFsdWUuICovDQorI2RlZmluZSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORwkJCSggKCB1aW50MzJfdCApIDAgKQ0KIA0KIC8qIEluIGFsbCBHSUNzIDI1NSBjYW4gYmUgd3JpdHRlbiB0byB0aGUgcHJpb3JpdHkgbWFzayByZWdpc3RlciB0byB1bm1hc2sgYWxsDQotICogKGJ1dCB0aGUgbG93ZXN0KSBpbnRlcnJ1cHQgcHJpb3JpdHkuICovDQotI2RlZmluZSBwb3J0VU5NQVNLX1ZBTFVFICAgICAgICAgICAgICAgICAoIDB4RkZVTCApDQorKGJ1dCB0aGUgbG93ZXN0KSBpbnRlcnJ1cHQgcHJpb3JpdHkuICovDQorI2RlZmluZSBwb3J0VU5NQVNLX1ZBTFVFCQkJCSggMHhGRlVMICkNCiANCiAvKiBUYXNrcyBhcmUgbm90IGNyZWF0ZWQgd2l0aCBhIGZsb2F0aW5nIHBvaW50IGNvbnRleHQsIGJ1dCBjYW4gYmUgZ2l2ZW4gYQ0KLSAqIGZsb2F0aW5nIHBvaW50IGNvbnRleHQgYWZ0ZXIgdGhleSBoYXZlIGJlZW4gY3JlYXRlZC4gIEEgdmFyaWFibGUgaXMgc3RvcmVkIGFzDQotICogcGFydCBvZiB0aGUgdGFza3MgY29udGV4dCB0aGF0IGhvbGRzIHBvcnROT19GTE9BVElOR19QT0lOVF9DT05URVhUIGlmIHRoZSB0YXNrDQotICogZG9lcyBub3QgaGF2ZSBhbiBGUFUgY29udGV4dCwgb3IgYW55IG90aGVyIHZhbHVlIGlmIHRoZSB0YXNrIGRvZXMgaGF2ZSBhbiBGUFUNCi0gKiBjb250ZXh0LiAqLw0KLSNkZWZpbmUgcG9ydE5PX0ZMT0FUSU5HX1BPSU5UX0NPTlRFWFQgICAgKCAoIFN0YWNrVHlwZV90ICkgMCApDQorZmxvYXRpbmcgcG9pbnQgY29udGV4dCBhZnRlciB0aGV5IGhhdmUgYmVlbiBjcmVhdGVkLiAgQSB2YXJpYWJsZSBpcyBzdG9yZWQgYXMNCitwYXJ0IG9mIHRoZSB0YXNrcyBjb250ZXh0IHRoYXQgaG9sZHMgcG9ydE5PX0ZMT0FUSU5HX1BPSU5UX0NPTlRFWFQgaWYgdGhlIHRhc2sNCitkb2VzIG5vdCBoYXZlIGFuIEZQVSBjb250ZXh0LCBvciBhbnkgb3RoZXIgdmFsdWUgaWYgdGhlIHRhc2sgZG9lcyBoYXZlIGFuIEZQVQ0KK2NvbnRleHQuICovDQorI2RlZmluZSBwb3J0Tk9fRkxPQVRJTkdfUE9JTlRfQ09OVEVYVAkoICggU3RhY2tUeXBlX3QgKSAwICkNCiANCiAvKiBDb25zdGFudHMgcmVxdWlyZWQgdG8gc2V0dXAgdGhlIGluaXRpYWwgdGFzayBjb250ZXh0LiAqLw0KLSNkZWZpbmUgcG9ydElOSVRJQUxfU1BTUiAgICAgICAgICAgICAgICAgKCAoIFN0YWNrVHlwZV90ICkgMHgxZiApIC8qIFN5c3RlbSBtb2RlLCBBUk0gbW9kZSwgSVJRIGVuYWJsZWQgRklRIGVuYWJsZWQuICovDQotI2RlZmluZSBwb3J0VEhVTUJfTU9ERV9CSVQgICAgICAgICAgICAgICAoICggU3RhY2tUeXBlX3QgKSAweDIwICkNCi0jZGVmaW5lIHBvcnRJTlRFUlJVUFRfRU5BQkxFX0JJVCAgICAgICAgICggMHg4MFVMICkNCi0jZGVmaW5lIHBvcnRUSFVNQl9NT0RFX0FERFJFU1MgICAgICAgICAgICggMHgwMVVMICkNCisjZGVmaW5lIHBvcnRJTklUSUFMX1NQU1IJCQkJKCAoIFN0YWNrVHlwZV90ICkgMHgxZiApIC8qIFN5c3RlbSBtb2RlLCBBUk0gbW9kZSwgSVJRIGVuYWJsZWQgRklRIGVuYWJsZWQuICovDQorI2RlZmluZSBwb3J0VEhVTUJfTU9ERV9CSVQJCQkJKCAoIFN0YWNrVHlwZV90ICkgMHgyMCApDQorI2RlZmluZSBwb3J0SU5URVJSVVBUX0VOQUJMRV9CSVQJCSggMHg4MFVMICkNCisjZGVmaW5lIHBvcnRUSFVNQl9NT0RFX0FERFJFU1MJCQkoIDB4MDFVTCApDQogDQogLyogVXNlZCBieSBwb3J0QVNTRVJUX0lGX0lOVEVSUlVQVF9QUklPUklUWV9JTlZBTElEKCkgd2hlbiBlbnN1cmluZyB0aGUgYmluYXJ5DQotICogcG9pbnQgaXMgemVyby4gKi8NCi0jZGVmaW5lIHBvcnRCSU5BUllfUE9JTlRfQklUUyAgICAgICAgICAgICggKCB1aW50OF90ICkgMHgwMyApDQorcG9pbnQgaXMgemVyby4gKi8NCisjZGVmaW5lIHBvcnRCSU5BUllfUE9JTlRfQklUUwkJCSggKCB1aW50OF90ICkgMHgwMyApDQogDQogLyogTWFza3MgYWxsIGJpdHMgaW4gdGhlIEFQU1Igb3RoZXIgdGhhbiB0aGUgbW9kZSBiaXRzLiAqLw0KLSNkZWZpbmUgcG9ydEFQU1JfTU9ERV9CSVRTX01BU0sgICAgICAgICAgKCAweDFGICkNCisjZGVmaW5lIHBvcnRBUFNSX01PREVfQklUU19NQVNLCQkJKCAweDFGICkNCiANCiAvKiBUaGUgdmFsdWUgb2YgdGhlIG1vZGUgYml0cyBpbiB0aGUgQVBTUiB3aGVuIHRoZSBDUFUgaXMgZXhlY3V0aW5nIGluIHVzZXINCi0gKiBtb2RlLiAqLw0KLSNkZWZpbmUgcG9ydEFQU1JfVVNFUl9NT0RFICAgICAgICAgICAgICAgKCAweDEwICkNCittb2RlLiAqLw0KKyNkZWZpbmUgcG9ydEFQU1JfVVNFUl9NT0RFCQkJCSggMHgxMCApDQogDQogLyogVGhlIGNyaXRpY2FsIHNlY3Rpb24gbWFjcm9zIG9ubHkgbWFzayBpbnRlcnJ1cHRzIHVwIHRvIGFuIGFwcGxpY2F0aW9uDQotICogZGV0ZXJtaW5lZCBwcmlvcml0eSBsZXZlbC4gIFNvbWV0aW1lcyBpdCBpcyBuZWNlc3NhcnkgdG8gdHVybiBpbnRlcnJ1cHQgb2ZmIGluDQotICogdGhlIENQVSBpdHNlbGYgYmVmb3JlIG1vZGlmeWluZyBjZXJ0YWluIGhhcmR3YXJlIHJlZ2lzdGVycy4gKi8NCi0jZGVmaW5lIHBvcnRDUFVfSVJRX0RJU0FCTEUoKSAgICAgICAgICAgICAgICAgIFwNCi0gICAgX19hc20gdm9sYXRpbGUgKCAiQ1BTSUQgaSIgOjo6ICJtZW1vcnkiICk7IFwNCi0gICAgX19hc20gdm9sYXRpbGUgKCAiRFNCIiApOyAgICAgICAgICAgICAgICAgIFwNCi0gICAgX19hc20gdm9sYXRpbGUgKCAiSVNCIiApOw0KK2RldGVybWluZWQgcHJpb3JpdHkgbGV2ZWwuICBTb21ldGltZXMgaXQgaXMgbmVjZXNzYXJ5IHRvIHR1cm4gaW50ZXJydXB0IG9mZiBpbg0KK3RoZSBDUFUgaXRzZWxmIGJlZm9yZSBtb2RpZnlpbmcgY2VydGFpbiBoYXJkd2FyZSByZWdpc3RlcnMuICovDQorI2RlZmluZSBwb3J0Q1BVX0lSUV9ESVNBQkxFKCkJCQkJCQkJCQkJXA0KKwlfX2FzbSB2b2xhdGlsZSAoICJDUFNJRCBpIiA6OjogIm1lbW9yeSIgKTsJCQkJCQlcDQorCV9fYXNtIHZvbGF0aWxlICggIkRTQiIgKTsJCQkJCQkJCQkJXA0KKwlfX2FzbSB2b2xhdGlsZSAoICJJU0IiICk7DQogDQotI2RlZmluZSBwb3J0Q1BVX0lSUV9FTkFCTEUoKSAgICAgICAgICAgICAgICAgICBcDQotICAgIF9fYXNtIHZvbGF0aWxlICggIkNQU0lFIGkiIDo6OiAibWVtb3J5IiApOyBcDQotICAgIF9fYXNtIHZvbGF0aWxlICggIkRTQiIgKTsgICAgICAgICAgICAgICAgICBcDQotICAgIF9fYXNtIHZvbGF0aWxlICggIklTQiIgKTsNCisjZGVmaW5lIHBvcnRDUFVfSVJRX0VOQUJMRSgpCQkJCQkJCQkJCVwNCisJX19hc20gdm9sYXRpbGUgKCAiQ1BTSUUgaSIgOjo6ICJtZW1vcnkiICk7CQkJCQkJXA0KKwlfX2FzbSB2b2xhdGlsZSAoICJEU0IiICk7CQkJCQkJCQkJCVwNCisJX19hc20gdm9sYXRpbGUgKCAiSVNCIiApOw0KIA0KIA0KIC8qIE1hY3JvIHRvIHVubWFzayBhbGwgaW50ZXJydXB0IHByaW9yaXRpZXMuICovDQotI2RlZmluZSBwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0soKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBwb3J0Q1BVX0lSUV9ESVNBQkxFKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBwb3J0SUNDUE1SX1BSSU9SSVRZX01BU0tfUkVHSVNURVIgPSBwb3J0VU5NQVNLX1ZBTFVFOyBcDQotICAgICAgICBfX2FzbSB2b2xhdGlsZSAoICJEU0IJCVxuIiAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAiSVNCCQlcbiIpOyAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBwb3J0Q1BVX0lSUV9FTkFCTEUoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIH0NCisjZGVmaW5lIHBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTSygpCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJCVwNCisJcG9ydENQVV9JUlFfRElTQUJMRSgpOwkJCQkJCQkJCQkJXA0KKwlwb3J0SUNDUE1SX1BSSU9SSVRZX01BU0tfUkVHSVNURVIgPSBwb3J0VU5NQVNLX1ZBTFVFOwkJCVwNCisJX19hc20gdm9sYXRpbGUgKAkiRFNCCQlcbiIJCQkJCQkJCVwNCisJCQkJCQkiSVNCCQlcbiIgKTsJCQkJCQkJXA0KKwlwb3J0Q1BVX0lSUV9FTkFCTEUoKTsJCQkJCQkJCQkJCVwNCit9DQogDQotI2RlZmluZSBwb3J0SU5URVJSVVBUX1BSSU9SSVRZX1JFR0lTVEVSX09GRlNFVCAgICAweDQwMFVMDQotI2RlZmluZSBwb3J0TUFYXzhfQklUX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAoICggdWludDhfdCApIDB4ZmYgKQ0KLSNkZWZpbmUgcG9ydEJJVF8wX1NFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVpbnQ4X3QgKSAweDAxICkNCisjZGVmaW5lIHBvcnRJTlRFUlJVUFRfUFJJT1JJVFlfUkVHSVNURVJfT0ZGU0VUCQkweDQwMFVMDQorI2RlZmluZSBwb3J0TUFYXzhfQklUX1ZBTFVFCQkJCQkJCSggKCB1aW50OF90ICkgMHhmZiApDQorI2RlZmluZSBwb3J0QklUXzBfU0VUCQkJCQkJCQkoICggdWludDhfdCApIDB4MDEgKQ0KIA0KIC8qIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgcHJlLWxvYWRpbmcgb2YgdGhlIGluaXRpYWwgTFIgd2l0aCB0aGUgYWRkcmVzcyBvZg0KLSAqIHBydlRhc2tFeGl0RXJyb3IoKSBpbiBjYXNlIGl0IG1lc3NlcyB1cCB1bndpbmRpbmcgb2YgdGhlIHN0YWNrIGluIHRoZQ0KLSAqIGRlYnVnZ2VyLiAqLw0KK3BydlRhc2tFeGl0RXJyb3IoKSBpbiBjYXNlIGl0IG1lc3NlcyB1cCB1bndpbmRpbmcgb2YgdGhlIHN0YWNrIGluIHRoZQ0KK2RlYnVnZ2VyLiAqLw0KICNpZmRlZiBjb25maWdUQVNLX1JFVFVSTl9BRERSRVNTDQotICAgICNkZWZpbmUgcG9ydFRBU0tfUkVUVVJOX0FERFJFU1MgICAgY29uZmlnVEFTS19SRVRVUk5fQUREUkVTUw0KKwkjZGVmaW5lIHBvcnRUQVNLX1JFVFVSTl9BRERSRVNTCWNvbmZpZ1RBU0tfUkVUVVJOX0FERFJFU1MNCiAjZWxzZQ0KLSAgICAjZGVmaW5lIHBvcnRUQVNLX1JFVFVSTl9BRERSRVNTICAgIHBydlRhc2tFeGl0RXJyb3INCisJI2RlZmluZSBwb3J0VEFTS19SRVRVUk5fQUREUkVTUwlwcnZUYXNrRXhpdEVycm9yDQogI2VuZGlmDQogDQogLyogVGhlIHNwYWNlIG9uIHRoZSBzdGFjayByZXF1aXJlZCB0byBob2xkIHRoZSBGUFUgcmVnaXN0ZXJzLiAgVGhpcyBpcyAzMiA2NC1iaXQNCi0gKiByZWdpc3RlcnMsIHBsdXMgYSAzMi1iaXQgc3RhdHVzIHJlZ2lzdGVyLiAqLw0KLSNkZWZpbmUgcG9ydEZQVV9SRUdJU1RFUl9XT1JEUyAgICAoICggMzIgKiAyICkgKyAxICkNCityZWdpc3RlcnMsIHBsdXMgYSAzMi1iaXQgc3RhdHVzIHJlZ2lzdGVyLiAqLw0KKyNkZWZpbmUgcG9ydEZQVV9SRUdJU1RFUl9XT1JEUwkoICggMzIgKiAyICkgKyAxICkNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCkBAIC0xODMsMzkzICsxODMsMzg2IEBACiAgKiBGUFUgcmVnaXN0ZXJzIHRvIGJlIHNhdmVkIG9uIGludGVycnVwdCBlbnRyeSB0aGVpciBJUlEgaGFuZGxlciBtdXN0IGJlDQogICogY2FsbGVkIHZBcHBsaWNhdGlvbklSUUhhbmRsZXIoKS4NCiAgKi8NCi12b2lkIHZBcHBsaWNhdGlvbkZQVVNhZmVJUlFIYW5kbGVyKCB1aW50MzJfdCB1bElDQ0lBUiApIF9fYXR0cmlidXRlX18oICggd2VhayApICk7DQordm9pZCB2QXBwbGljYXRpb25GUFVTYWZlSVJRSGFuZGxlciggdWludDMyX3QgdWxJQ0NJQVIgKSBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSApOw0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIEEgdmFyaWFibGUgaXMgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSBjcml0aWNhbCBzZWN0aW9uIG5lc3RpbmcuICBUaGlzDQotICogdmFyaWFibGUgaGFzIHRvIGJlIHN0b3JlZCBhcyBwYXJ0IG9mIHRoZSB0YXNrIGNvbnRleHQgYW5kIG11c3QgYmUgaW5pdGlhbGlzZWQgdG8NCi0gKiBhIG5vbiB6ZXJvIHZhbHVlIHRvIGVuc3VyZSBpbnRlcnJ1cHRzIGRvbid0IGluYWR2ZXJ0ZW50bHkgYmVjb21lIHVubWFza2VkIGJlZm9yZQ0KLSAqIHRoZSBzY2hlZHVsZXIgc3RhcnRzLiAgQXMgaXQgaXMgc3RvcmVkIGFzIHBhcnQgb2YgdGhlIHRhc2sgY29udGV4dCBpdCB3aWxsDQotICogYXV0b21hdGljYWxseSBiZSBzZXQgdG8gMCB3aGVuIHRoZSBmaXJzdCB0YXNrIGlzIHN0YXJ0ZWQuICovDQordmFyaWFibGUgaGFzIHRvIGJlIHN0b3JlZCBhcyBwYXJ0IG9mIHRoZSB0YXNrIGNvbnRleHQgYW5kIG11c3QgYmUgaW5pdGlhbGlzZWQgdG8NCithIG5vbiB6ZXJvIHZhbHVlIHRvIGVuc3VyZSBpbnRlcnJ1cHRzIGRvbid0IGluYWR2ZXJ0ZW50bHkgYmVjb21lIHVubWFza2VkIGJlZm9yZQ0KK3RoZSBzY2hlZHVsZXIgc3RhcnRzLiAgQXMgaXQgaXMgc3RvcmVkIGFzIHBhcnQgb2YgdGhlIHRhc2sgY29udGV4dCBpdCB3aWxsDQorYXV0b21hdGljYWxseSBiZSBzZXQgdG8gMCB3aGVuIHRoZSBmaXJzdCB0YXNrIGlzIHN0YXJ0ZWQuICovDQogdm9sYXRpbGUgdWludDMyX3QgdWxDcml0aWNhbE5lc3RpbmcgPSA5OTk5VUw7DQogDQogLyogU2F2ZWQgYXMgcGFydCBvZiB0aGUgdGFzayBjb250ZXh0LiAgSWYgdWxQb3J0VGFza0hhc0ZQVUNvbnRleHQgaXMgbm9uLXplcm8gdGhlbg0KLSAqIGEgZmxvYXRpbmcgcG9pbnQgY29udGV4dCBtdXN0IGJlIHNhdmVkIGFuZCByZXN0b3JlZCBmb3IgdGhlIHRhc2suICovDQorYSBmbG9hdGluZyBwb2ludCBjb250ZXh0IG11c3QgYmUgc2F2ZWQgYW5kIHJlc3RvcmVkIGZvciB0aGUgdGFzay4gKi8NCiB2b2xhdGlsZSB1aW50MzJfdCB1bFBvcnRUYXNrSGFzRlBVQ29udGV4dCA9IHBkRkFMU0U7DQogDQogLyogU2V0IHRvIDEgdG8gcGVuZCBhIGNvbnRleHQgc3dpdGNoIGZyb20gYW4gSVNSLiAqLw0KIHZvbGF0aWxlIHVpbnQzMl90IHVsUG9ydFlpZWxkUmVxdWlyZWQgPSBwZEZBTFNFOw0KIA0KIC8qIENvdW50cyB0aGUgaW50ZXJydXB0IG5lc3RpbmcgZGVwdGguICBBIGNvbnRleHQgc3dpdGNoIGlzIG9ubHkgcGVyZm9ybWVkIGlmDQotICogaWYgdGhlIG5lc3RpbmcgZGVwdGggaXMgMC4gKi8NCitpZiB0aGUgbmVzdGluZyBkZXB0aCBpcyAwLiAqLw0KIHZvbGF0aWxlIHVpbnQzMl90IHVsUG9ydEludGVycnVwdE5lc3RpbmcgPSAwVUw7DQogDQogLyogVXNlZCBpbiB0aGUgYXNtIGZpbGUuICovDQotX19hdHRyaWJ1dGVfXyggKCB1c2VkICkgKSBjb25zdCB1aW50MzJfdCB1bElDQ0lBUiA9IHBvcnRJQ0NJQVJfSU5URVJSVVBUX0FDS05PV0xFREdFX1JFR0lTVEVSX0FERFJFU1M7DQotX19hdHRyaWJ1dGVfXyggKCB1c2VkICkgKSBjb25zdCB1aW50MzJfdCB1bElDQ0VPSVIgPSBwb3J0SUNDRU9JUl9FTkRfT0ZfSU5URVJSVVBUX1JFR0lTVEVSX0FERFJFU1M7DQotX19hdHRyaWJ1dGVfXyggKCB1c2VkICkgKSBjb25zdCB1aW50MzJfdCB1bElDQ1BNUiA9IHBvcnRJQ0NQTVJfUFJJT1JJVFlfTUFTS19SRUdJU1RFUl9BRERSRVNTOw0KLV9fYXR0cmlidXRlX18oICggdXNlZCApICkgY29uc3QgdWludDMyX3QgdWxNYXhBUElQcmlvcml0eU1hc2sgPSAoIGNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgPDwgcG9ydFBSSU9SSVRZX1NISUZUICk7DQorX19hdHRyaWJ1dGVfXygoIHVzZWQgKSkgY29uc3QgdWludDMyX3QgdWxJQ0NJQVIgPSBwb3J0SUNDSUFSX0lOVEVSUlVQVF9BQ0tOT1dMRURHRV9SRUdJU1RFUl9BRERSRVNTOw0KK19fYXR0cmlidXRlX18oKCB1c2VkICkpIGNvbnN0IHVpbnQzMl90IHVsSUNDRU9JUiA9IHBvcnRJQ0NFT0lSX0VORF9PRl9JTlRFUlJVUFRfUkVHSVNURVJfQUREUkVTUzsNCitfX2F0dHJpYnV0ZV9fKCggdXNlZCApKSBjb25zdCB1aW50MzJfdCB1bElDQ1BNUgk9IHBvcnRJQ0NQTVJfUFJJT1JJVFlfTUFTS19SRUdJU1RFUl9BRERSRVNTOw0KK19fYXR0cmlidXRlX18oKCB1c2VkICkpIGNvbnN0IHVpbnQzMl90IHVsTWF4QVBJUHJpb3JpdHlNYXNrID0gKCBjb25maWdNQVhfQVBJX0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIDw8IHBvcnRQUklPUklUWV9TSElGVCApOw0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qDQogICogU2VlIGhlYWRlciBmaWxlIGZvciBkZXNjcmlwdGlvbi4NCiAgKi8NCi1TdGFja1R5cGVfdCAqIHB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKiBweFRvcE9mU3RhY2ssDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqIHB2UGFyYW1ldGVycyApDQorU3RhY2tUeXBlX3QgKnB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKnB4VG9wT2ZTdGFjaywgVGFza0Z1bmN0aW9uX3QgcHhDb2RlLCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KIHsNCi0gICAgLyogU2V0dXAgdGhlIGluaXRpYWwgc3RhY2sgb2YgdGhlIHRhc2suICBUaGUgc3RhY2sgaXMgc2V0IGV4YWN0bHkgYXMNCi0gICAgICogZXhwZWN0ZWQgYnkgdGhlIHBvcnRSRVNUT1JFX0NPTlRFWFQoKSBtYWNyby4NCi0gICAgICoNCi0gICAgICogVGhlIGZpc3QgcmVhbCB2YWx1ZSBvbiB0aGUgc3RhY2sgaXMgdGhlIHN0YXR1cyByZWdpc3Rlciwgd2hpY2ggaXMgc2V0IGZvcg0KLSAgICAgKiBzeXN0ZW0gbW9kZSwgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQuICBBIGZldyBOVUxMcyBhcmUgYWRkZWQgZmlyc3QgdG8gZW5zdXJlDQotICAgICAqIEdEQiBkb2VzIG5vdCB0cnkgZGVjb2RpbmcgYSBub24tZXhpc3RlbnQgcmV0dXJuIGFkZHJlc3MuICovDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgTlVMTDsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgTlVMTDsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgTlVMTDsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcG9ydElOSVRJQUxfU1BTUjsNCisJLyogU2V0dXAgdGhlIGluaXRpYWwgc3RhY2sgb2YgdGhlIHRhc2suICBUaGUgc3RhY2sgaXMgc2V0IGV4YWN0bHkgYXMNCisJZXhwZWN0ZWQgYnkgdGhlIHBvcnRSRVNUT1JFX0NPTlRFWFQoKSBtYWNyby4NCiANCi0gICAgaWYoICggKCB1aW50MzJfdCApIHB4Q29kZSAmIHBvcnRUSFVNQl9NT0RFX0FERFJFU1MgKSAhPSAweDAwVUwgKQ0KLSAgICB7DQotICAgICAgICAvKiBUaGUgdGFzayB3aWxsIHN0YXJ0IGluIFRIVU1CIG1vZGUuICovDQotICAgICAgICAqcHhUb3BPZlN0YWNrIHw9IHBvcnRUSFVNQl9NT0RFX0JJVDsNCi0gICAgfQ0KKwlUaGUgZmlzdCByZWFsIHZhbHVlIG9uIHRoZSBzdGFjayBpcyB0aGUgc3RhdHVzIHJlZ2lzdGVyLCB3aGljaCBpcyBzZXQgZm9yDQorCXN5c3RlbSBtb2RlLCB3aXRoIGludGVycnVwdHMgZW5hYmxlZC4gIEEgZmV3IE5VTExzIGFyZSBhZGRlZCBmaXJzdCB0byBlbnN1cmUNCisJR0RCIGRvZXMgbm90IHRyeSBkZWNvZGluZyBhIG5vbi1leGlzdGVudCByZXR1cm4gYWRkcmVzcy4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBOVUxMOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBOVUxMOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBOVUxMOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwb3J0SU5JVElBTF9TUFNSOw0KIA0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJaWYoICggKCB1aW50MzJfdCApIHB4Q29kZSAmIHBvcnRUSFVNQl9NT0RFX0FERFJFU1MgKSAhPSAweDAwVUwgKQ0KKwl7DQorCQkvKiBUaGUgdGFzayB3aWxsIHN0YXJ0IGluIFRIVU1CIG1vZGUuICovDQorCQkqcHhUb3BPZlN0YWNrIHw9IHBvcnRUSFVNQl9NT0RFX0JJVDsNCisJfQ0KIA0KLSAgICAvKiBOZXh0IHRoZSByZXR1cm4gYWRkcmVzcywgd2hpY2ggaW4gdGhpcyBjYXNlIGlzIHRoZSBzdGFydCBvZiB0aGUgdGFzay4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBweENvZGU7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgLyogTmV4dCBhbGwgdGhlIHJlZ2lzdGVycyBvdGhlciB0aGFuIHRoZSBzdGFjayBwb2ludGVyLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHBvcnRUQVNLX1JFVFVSTl9BRERSRVNTOyAvKiBSMTQgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMjEyMTIxMjsgICAgICAgICAgICAgIC8qIFIxMiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDExMTExMTExOyAgICAgICAgICAgICAgLyogUjExICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTAxMDEwMTA7ICAgICAgICAgICAgICAvKiBSMTAgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwOTA5MDkwOTsgICAgICAgICAgICAgIC8qIFI5ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDgwODA4MDg7ICAgICAgICAgICAgICAvKiBSOCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA3MDcwNzA3OyAgICAgICAgICAgICAgLyogUjcgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNjA2MDYwNjsgICAgICAgICAgICAgIC8qIFI2ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDUwNTA1MDU7ICAgICAgICAgICAgICAvKiBSNSAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA0MDQwNDA0OyAgICAgICAgICAgICAgLyogUjQgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMzAzMDMwMzsgICAgICAgICAgICAgIC8qIFIzICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDIwMjAyMDI7ICAgICAgICAgICAgICAvKiBSMiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAxMDEwMTAxOyAgICAgICAgICAgICAgLyogUjEgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHZQYXJhbWV0ZXJzOyAgICAgICAgICAgIC8qIFIwICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkvKiBOZXh0IHRoZSByZXR1cm4gYWRkcmVzcywgd2hpY2ggaW4gdGhpcyBjYXNlIGlzIHRoZSBzdGFydCBvZiB0aGUgdGFzay4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBweENvZGU7DQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBUaGUgdGFzayB3aWxsIHN0YXJ0IHdpdGggYSBjcml0aWNhbCBuZXN0aW5nIGNvdW50IG9mIDAgYXMgaW50ZXJydXB0cyBhcmUNCi0gICAgICogZW5hYmxlZC4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9IHBvcnROT19DUklUSUNBTF9ORVNUSU5HOw0KKwkvKiBOZXh0IGFsbCB0aGUgcmVnaXN0ZXJzIG90aGVyIHRoYW4gdGhlIHN0YWNrIHBvaW50ZXIuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcG9ydFRBU0tfUkVUVVJOX0FERFJFU1M7CS8qIFIxNCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDEyMTIxMjEyOwkvKiBSMTIgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMTExMTExMTsJLyogUjExICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTAxMDEwMTA7CS8qIFIxMCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA5MDkwOTA5OwkvKiBSOSAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA4MDgwODA4OwkvKiBSOCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA3MDcwNzA3OwkvKiBSNyAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA2MDYwNjA2OwkvKiBSNiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA1MDUwNTA1OwkvKiBSNSAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA0MDQwNDA0OwkvKiBSNCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAzMDMwMzAzOwkvKiBSMyAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAyMDIwMjAyOwkvKiBSMiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAxMDEwMTAxOwkvKiBSMSAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwdlBhcmFtZXRlcnM7IC8qIFIwICovDQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAjaWYgKCBjb25maWdVU0VfVEFTS19GUFVfU1VQUE9SVCA9PSAxICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICAvKiBUaGUgdGFzayB3aWxsIHN0YXJ0IHdpdGhvdXQgYSBmbG9hdGluZyBwb2ludCBjb250ZXh0LiAgQSB0YXNrIHRoYXQNCi0gICAgICAgICAgICAgKiB1c2VzIHRoZSBmbG9hdGluZyBwb2ludCBoYXJkd2FyZSBtdXN0IGNhbGwgdlBvcnRUYXNrVXNlc0ZQVSgpIGJlZm9yZQ0KLSAgICAgICAgICAgICAqIGV4ZWN1dGluZyBhbnkgZmxvYXRpbmcgcG9pbnQgaW5zdHJ1Y3Rpb25zLiAqLw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSBwb3J0Tk9fRkxPQVRJTkdfUE9JTlRfQ09OVEVYVDsNCi0gICAgICAgIH0NCi0gICAgI2VsaWYgKCBjb25maWdVU0VfVEFTS19GUFVfU1VQUE9SVCA9PSAyICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICAvKiBUaGUgdGFzayB3aWxsIHN0YXJ0IHdpdGggYSBmbG9hdGluZyBwb2ludCBjb250ZXh0LiAgTGVhdmUgZW5vdWdoDQotICAgICAgICAgICAgICogc3BhY2UgZm9yIHRoZSByZWdpc3RlcnMgLSBhbmQgZW5zdXJlIHRoZXkgYXJlIGluaXRpYWxpc2VkIHRvIDAuICovDQotICAgICAgICAgICAgcHhUb3BPZlN0YWNrIC09IHBvcnRGUFVfUkVHSVNURVJfV09SRFM7DQotICAgICAgICAgICAgbWVtc2V0KCBweFRvcE9mU3RhY2ssIDB4MDAsIHBvcnRGUFVfUkVHSVNURVJfV09SRFMgKiBzaXplb2YoIFN0YWNrVHlwZV90ICkgKTsNCisJLyogVGhlIHRhc2sgd2lsbCBzdGFydCB3aXRoIGEgY3JpdGljYWwgbmVzdGluZyBjb3VudCBvZiAwIGFzIGludGVycnVwdHMgYXJlDQorCWVuYWJsZWQuICovDQorCSpweFRvcE9mU3RhY2sgPSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORzsNCiANCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gcGRUUlVFOw0KLSAgICAgICAgICAgIHVsUG9ydFRhc2tIYXNGUFVDb250ZXh0ID0gcGRUUlVFOw0KLSAgICAgICAgfQ0KLSAgICAjZWxzZSAvKiBpZiAoIGNvbmZpZ1VTRV9UQVNLX0ZQVV9TVVBQT1JUID09IDEgKSAqLw0KLSAgICAgICAgew0KLSAgICAgICAgICAgICNlcnJvciBJbnZhbGlkIGNvbmZpZ1VTRV9UQVNLX0ZQVV9TVVBQT1JUIHNldHRpbmcgLSBjb25maWdVU0VfVEFTS19GUFVfU1VQUE9SVCBtdXN0IGJlIHNldCB0byAxLCAyLCBvciBsZWZ0IHVuZGVmaW5lZC4NCi0gICAgICAgIH0NCi0gICAgI2VuZGlmIC8qIGlmICggY29uZmlnVVNFX1RBU0tfRlBVX1NVUFBPUlQgPT0gMSApICovDQorCSNpZiggY29uZmlnVVNFX1RBU0tfRlBVX1NVUFBPUlQgPT0gMSApDQorCXsNCisJCS8qIFRoZSB0YXNrIHdpbGwgc3RhcnQgd2l0aG91dCBhIGZsb2F0aW5nIHBvaW50IGNvbnRleHQuICBBIHRhc2sgdGhhdA0KKwkJdXNlcyB0aGUgZmxvYXRpbmcgcG9pbnQgaGFyZHdhcmUgbXVzdCBjYWxsIHZQb3J0VGFza1VzZXNGUFUoKSBiZWZvcmUNCisJCWV4ZWN1dGluZyBhbnkgZmxvYXRpbmcgcG9pbnQgaW5zdHJ1Y3Rpb25zLiAqLw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gcG9ydE5PX0ZMT0FUSU5HX1BPSU5UX0NPTlRFWFQ7DQorCX0NCisJI2VsaWYoIGNvbmZpZ1VTRV9UQVNLX0ZQVV9TVVBQT1JUID09IDIgKQ0KKwl7DQorCQkvKiBUaGUgdGFzayB3aWxsIHN0YXJ0IHdpdGggYSBmbG9hdGluZyBwb2ludCBjb250ZXh0LiAgTGVhdmUgZW5vdWdoDQorCQlzcGFjZSBmb3IgdGhlIHJlZ2lzdGVycyAtIGFuZCBlbnN1cmUgdGhleSBhcmUgaW5pdGlhbGlzZWQgdG8gMC4gKi8NCisJCXB4VG9wT2ZTdGFjayAtPSBwb3J0RlBVX1JFR0lTVEVSX1dPUkRTOw0KKwkJbWVtc2V0KCBweFRvcE9mU3RhY2ssIDB4MDAsIHBvcnRGUFVfUkVHSVNURVJfV09SRFMgKiBzaXplb2YoIFN0YWNrVHlwZV90ICkgKTsNCiANCi0gICAgcmV0dXJuIHB4VG9wT2ZTdGFjazsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IHBkVFJVRTsNCisJCXVsUG9ydFRhc2tIYXNGUFVDb250ZXh0ID0gcGRUUlVFOw0KKwl9DQorCSNlbHNlDQorCXsNCisJCSNlcnJvciBJbnZhbGlkIGNvbmZpZ1VTRV9UQVNLX0ZQVV9TVVBQT1JUIHNldHRpbmcgLSBjb25maWdVU0VfVEFTS19GUFVfU1VQUE9SVCBtdXN0IGJlIHNldCB0byAxLCAyLCBvciBsZWZ0IHVuZGVmaW5lZC4NCisJfQ0KKwkjZW5kaWYNCisNCisJcmV0dXJuIHB4VG9wT2ZTdGFjazsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogc3RhdGljIHZvaWQgcHJ2VGFza0V4aXRFcnJvciggdm9pZCApDQogew0KLSAgICAvKiBBIGZ1bmN0aW9uIHRoYXQgaW1wbGVtZW50cyBhIHRhc2sgbXVzdCBub3QgZXhpdCBvciBhdHRlbXB0IHRvIHJldHVybiB0bw0KLSAgICAgKiBpdHMgY2FsbGVyIGFzIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmV0dXJuIHRvLiAgSWYgYSB0YXNrIHdhbnRzIHRvIGV4aXQgaXQNCi0gICAgICogc2hvdWxkIGluc3RlYWQgY2FsbCB2VGFza0RlbGV0ZSggTlVMTCApLg0KLSAgICAgKg0KLSAgICAgKiBBcnRpZmljaWFsbHkgZm9yY2UgYW4gYXNzZXJ0KCkgdG8gYmUgdHJpZ2dlcmVkIGlmIGNvbmZpZ0FTU0VSVCgpIGlzDQotICAgICAqIGRlZmluZWQsIHRoZW4gc3RvcCBoZXJlIHNvIGFwcGxpY2F0aW9uIHdyaXRlcnMgY2FuIGNhdGNoIHRoZSBlcnJvci4gKi8NCi0gICAgY29uZmlnQVNTRVJUKCB1bFBvcnRJbnRlcnJ1cHROZXN0aW5nID09IH4wVUwgKTsNCi0gICAgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOw0KKwkvKiBBIGZ1bmN0aW9uIHRoYXQgaW1wbGVtZW50cyBhIHRhc2sgbXVzdCBub3QgZXhpdCBvciBhdHRlbXB0IHRvIHJldHVybiB0bw0KKwlpdHMgY2FsbGVyIGFzIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmV0dXJuIHRvLiAgSWYgYSB0YXNrIHdhbnRzIHRvIGV4aXQgaXQNCisJc2hvdWxkIGluc3RlYWQgY2FsbCB2VGFza0RlbGV0ZSggTlVMTCApLg0KIA0KLSAgICBmb3IoIDsgOyApDQotICAgIHsNCi0gICAgfQ0KKwlBcnRpZmljaWFsbHkgZm9yY2UgYW4gYXNzZXJ0KCkgdG8gYmUgdHJpZ2dlcmVkIGlmIGNvbmZpZ0FTU0VSVCgpIGlzDQorCWRlZmluZWQsIHRoZW4gc3RvcCBoZXJlIHNvIGFwcGxpY2F0aW9uIHdyaXRlcnMgY2FuIGNhdGNoIHRoZSBlcnJvci4gKi8NCisJY29uZmlnQVNTRVJUKCB1bFBvcnRJbnRlcnJ1cHROZXN0aW5nID09IH4wVUwgKTsNCisJcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOw0KKwlmb3IoIDs7ICk7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIEJhc2VUeXBlX3QgeFBvcnRTdGFydFNjaGVkdWxlciggdm9pZCApDQogew0KLSAgICB1aW50MzJfdCB1bEFQU1I7DQordWludDMyX3QgdWxBUFNSOw0KIA0KLSAgICAjaWYgKCBjb25maWdBU1NFUlRfREVGSU5FRCA9PSAxICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICB2b2xhdGlsZSB1aW50MzJfdCB1bE9yaWdpbmFsUHJpb3JpdHk7DQotICAgICAgICAgICAgdm9sYXRpbGUgdWludDhfdCAqIGNvbnN0IHB1Y0ZpcnN0VXNlclByaW9yaXR5UmVnaXN0ZXIgPSAoIHZvbGF0aWxlIHVpbnQ4X3QgKiBjb25zdCApICggY29uZmlnSU5URVJSVVBUX0NPTlRST0xMRVJfQkFTRV9BRERSRVNTICsgcG9ydElOVEVSUlVQVF9QUklPUklUWV9SRUdJU1RFUl9PRkZTRVQgKTsNCi0gICAgICAgICAgICB2b2xhdGlsZSB1aW50OF90IHVjTWF4UHJpb3JpdHlWYWx1ZTsNCisJI2lmKCBjb25maWdBU1NFUlRfREVGSU5FRCA9PSAxICkNCisJew0KKwkJdm9sYXRpbGUgdWludDMyX3QgdWxPcmlnaW5hbFByaW9yaXR5Ow0KKwkJdm9sYXRpbGUgdWludDhfdCAqIGNvbnN0IHB1Y0ZpcnN0VXNlclByaW9yaXR5UmVnaXN0ZXIgPSAoIHZvbGF0aWxlIHVpbnQ4X3QgKiBjb25zdCApICggY29uZmlnSU5URVJSVVBUX0NPTlRST0xMRVJfQkFTRV9BRERSRVNTICsgcG9ydElOVEVSUlVQVF9QUklPUklUWV9SRUdJU1RFUl9PRkZTRVQgKTsNCisJCXZvbGF0aWxlIHVpbnQ4X3QgdWNNYXhQcmlvcml0eVZhbHVlOw0KIA0KLSAgICAgICAgICAgIC8qIERldGVybWluZSBob3cgbWFueSBwcmlvcml0eSBiaXRzIGFyZSBpbXBsZW1lbnRlZCBpbiB0aGUgR0lDLg0KLSAgICAgICAgICAgICAqDQotICAgICAgICAgICAgICogU2F2ZSB0aGUgaW50ZXJydXB0IHByaW9yaXR5IHZhbHVlIHRoYXQgaXMgYWJvdXQgdG8gYmUgY2xvYmJlcmVkLiAqLw0KLSAgICAgICAgICAgIHVsT3JpZ2luYWxQcmlvcml0eSA9ICpwdWNGaXJzdFVzZXJQcmlvcml0eVJlZ2lzdGVyOw0KKwkJLyogRGV0ZXJtaW5lIGhvdyBtYW55IHByaW9yaXR5IGJpdHMgYXJlIGltcGxlbWVudGVkIGluIHRoZSBHSUMuDQogDQotICAgICAgICAgICAgLyogRGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgcHJpb3JpdHkgYml0cyBhdmFpbGFibGUuICBGaXJzdCB3cml0ZSB0bw0KLSAgICAgICAgICAgICAqIGFsbCBwb3NzaWJsZSBiaXRzLiAqLw0KLSAgICAgICAgICAgICpwdWNGaXJzdFVzZXJQcmlvcml0eVJlZ2lzdGVyID0gcG9ydE1BWF84X0JJVF9WQUxVRTsNCisJCVNhdmUgdGhlIGludGVycnVwdCBwcmlvcml0eSB2YWx1ZSB0aGF0IGlzIGFib3V0IHRvIGJlIGNsb2JiZXJlZC4gKi8NCisJCXVsT3JpZ2luYWxQcmlvcml0eSA9ICpwdWNGaXJzdFVzZXJQcmlvcml0eVJlZ2lzdGVyOw0KIA0KLSAgICAgICAgICAgIC8qIFJlYWQgdGhlIHZhbHVlIGJhY2sgdG8gc2VlIGhvdyBtYW55IGJpdHMgc3R1Y2suICovDQotICAgICAgICAgICAgdWNNYXhQcmlvcml0eVZhbHVlID0gKnB1Y0ZpcnN0VXNlclByaW9yaXR5UmVnaXN0ZXI7DQorCQkvKiBEZXRlcm1pbmUgdGhlIG51bWJlciBvZiBwcmlvcml0eSBiaXRzIGF2YWlsYWJsZS4gIEZpcnN0IHdyaXRlIHRvDQorCQlhbGwgcG9zc2libGUgYml0cy4gKi8NCisJCSpwdWNGaXJzdFVzZXJQcmlvcml0eVJlZ2lzdGVyID0gcG9ydE1BWF84X0JJVF9WQUxVRTsNCiANCi0gICAgICAgICAgICAvKiBTaGlmdCB0byB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cy4gKi8NCi0gICAgICAgICAgICB3aGlsZSggKCB1Y01heFByaW9yaXR5VmFsdWUgJiBwb3J0QklUXzBfU0VUICkgIT0gcG9ydEJJVF8wX1NFVCApDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICB1Y01heFByaW9yaXR5VmFsdWUgPj49ICggdWludDhfdCApIDB4MDE7DQotICAgICAgICAgICAgfQ0KKwkJLyogUmVhZCB0aGUgdmFsdWUgYmFjayB0byBzZWUgaG93IG1hbnkgYml0cyBzdHVjay4gKi8NCisJCXVjTWF4UHJpb3JpdHlWYWx1ZSA9ICpwdWNGaXJzdFVzZXJQcmlvcml0eVJlZ2lzdGVyOw0KIA0KLSAgICAgICAgICAgIC8qIFNhbml0eSBjaGVjayBjb25maWdVTklRVUVfSU5URVJSVVBUX1BSSU9SSVRJRVMgbWF0Y2hlcyB0aGUgcmVhZA0KLSAgICAgICAgICAgICAqIHZhbHVlLiAqLw0KLSAgICAgICAgICAgIGNvbmZpZ0FTU0VSVCggdWNNYXhQcmlvcml0eVZhbHVlID09IHBvcnRMT1dFU1RfSU5URVJSVVBUX1BSSU9SSVRZICk7DQorCQkvKiBTaGlmdCB0byB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cy4gKi8NCisJCXdoaWxlKCAoIHVjTWF4UHJpb3JpdHlWYWx1ZSAmIHBvcnRCSVRfMF9TRVQgKSAhPSBwb3J0QklUXzBfU0VUICkNCisJCXsNCisJCQl1Y01heFByaW9yaXR5VmFsdWUgPj49ICggdWludDhfdCApIDB4MDE7DQorCQl9DQogDQotICAgICAgICAgICAgLyogUmVzdG9yZSB0aGUgY2xvYmJlcmVkIGludGVycnVwdCBwcmlvcml0eSByZWdpc3RlciB0byBpdHMgb3JpZ2luYWwNCi0gICAgICAgICAgICAgKiB2YWx1ZS4gKi8NCi0gICAgICAgICAgICAqcHVjRmlyc3RVc2VyUHJpb3JpdHlSZWdpc3RlciA9IHVsT3JpZ2luYWxQcmlvcml0eTsNCi0gICAgICAgIH0NCi0gICAgI2VuZGlmIC8qIGNvbmlmZ0FTU0VSVF9ERUZJTkVEICovDQorCQkvKiBTYW5pdHkgY2hlY2sgY29uZmlnVU5JUVVFX0lOVEVSUlVQVF9QUklPUklUSUVTIG1hdGNoZXMgdGhlIHJlYWQNCisJCXZhbHVlLiAqLw0KKwkJY29uZmlnQVNTRVJUKCB1Y01heFByaW9yaXR5VmFsdWUgPT0gcG9ydExPV0VTVF9JTlRFUlJVUFRfUFJJT1JJVFkgKTsNCisNCisJCS8qIFJlc3RvcmUgdGhlIGNsb2JiZXJlZCBpbnRlcnJ1cHQgcHJpb3JpdHkgcmVnaXN0ZXIgdG8gaXRzIG9yaWdpbmFsDQorCQl2YWx1ZS4gKi8NCisJCSpwdWNGaXJzdFVzZXJQcmlvcml0eVJlZ2lzdGVyID0gdWxPcmlnaW5hbFByaW9yaXR5Ow0KKwl9DQorCSNlbmRpZiAvKiBjb25pZmdBU1NFUlRfREVGSU5FRCAqLw0KIA0KIA0KLSAgICAvKiBPbmx5IGNvbnRpbnVlIGlmIHRoZSBDUFUgaXMgbm90IGluIFVzZXIgbW9kZS4gIFRoZSBDUFUgbXVzdCBiZSBpbiBhDQotICAgICAqIFByaXZpbGVnZWQgbW9kZSBmb3IgdGhlIHNjaGVkdWxlciB0byBzdGFydC4gKi8NCi0gICAgX19hc20gdm9sYXRpbGUgKCAiTVJTICUwLCBBUFNSIiA6ICI9ciIgKCB1bEFQU1IgKTo6Im1lbW9yeSIgKTsNCi0gICAgdWxBUFNSICY9IHBvcnRBUFNSX01PREVfQklUU19NQVNLOw0KLSAgICBjb25maWdBU1NFUlQoIHVsQVBTUiAhPSBwb3J0QVBTUl9VU0VSX01PREUgKTsNCisJLyogT25seSBjb250aW51ZSBpZiB0aGUgQ1BVIGlzIG5vdCBpbiBVc2VyIG1vZGUuICBUaGUgQ1BVIG11c3QgYmUgaW4gYQ0KKwlQcml2aWxlZ2VkIG1vZGUgZm9yIHRoZSBzY2hlZHVsZXIgdG8gc3RhcnQuICovDQorCV9fYXNtIHZvbGF0aWxlICggIk1SUyAlMCwgQVBTUiIgOiAiPXIiICggdWxBUFNSICkgOjogIm1lbW9yeSIgKTsNCisJdWxBUFNSICY9IHBvcnRBUFNSX01PREVfQklUU19NQVNLOw0KKwljb25maWdBU1NFUlQoIHVsQVBTUiAhPSBwb3J0QVBTUl9VU0VSX01PREUgKTsNCiANCi0gICAgaWYoIHVsQVBTUiAhPSBwb3J0QVBTUl9VU0VSX01PREUgKQ0KLSAgICB7DQotICAgICAgICAvKiBPbmx5IGNvbnRpbnVlIGlmIHRoZSBiaW5hcnkgcG9pbnQgdmFsdWUgaXMgc2V0IHRvIGl0cyBsb3dlc3QgcG9zc2libGUNCi0gICAgICAgICAqIHNldHRpbmcuICBTZWUgdGhlIGNvbW1lbnRzIGluIHZQb3J0VmFsaWRhdGVJbnRlcnJ1cHRQcmlvcml0eSgpIGJlbG93IGZvcg0KLSAgICAgICAgICogbW9yZSBpbmZvcm1hdGlvbi4gKi8NCi0gICAgICAgIGNvbmZpZ0FTU0VSVCggKCBwb3J0SUNDQlBSX0JJTkFSWV9QT0lOVF9SRUdJU1RFUiAmIHBvcnRCSU5BUllfUE9JTlRfQklUUyApIDw9IHBvcnRNQVhfQklOQVJZX1BPSU5UX1ZBTFVFICk7DQorCWlmKCB1bEFQU1IgIT0gcG9ydEFQU1JfVVNFUl9NT0RFICkNCisJew0KKwkJLyogT25seSBjb250aW51ZSBpZiB0aGUgYmluYXJ5IHBvaW50IHZhbHVlIGlzIHNldCB0byBpdHMgbG93ZXN0IHBvc3NpYmxlDQorCQlzZXR0aW5nLiAgU2VlIHRoZSBjb21tZW50cyBpbiB2UG9ydFZhbGlkYXRlSW50ZXJydXB0UHJpb3JpdHkoKSBiZWxvdyBmb3INCisJCW1vcmUgaW5mb3JtYXRpb24uICovDQorCQljb25maWdBU1NFUlQoICggcG9ydElDQ0JQUl9CSU5BUllfUE9JTlRfUkVHSVNURVIgJiBwb3J0QklOQVJZX1BPSU5UX0JJVFMgKSA8PSBwb3J0TUFYX0JJTkFSWV9QT0lOVF9WQUxVRSApOw0KIA0KLSAgICAgICAgaWYoICggcG9ydElDQ0JQUl9CSU5BUllfUE9JTlRfUkVHSVNURVIgJiBwb3J0QklOQVJZX1BPSU5UX0JJVFMgKSA8PSBwb3J0TUFYX0JJTkFSWV9QT0lOVF9WQUxVRSApDQotICAgICAgICB7DQotICAgICAgICAgICAgLyogSW50ZXJydXB0cyBhcmUgdHVybmVkIG9mZiBpbiB0aGUgQ1BVIGl0c2VsZiB0byBlbnN1cmUgdGljayBkb2VzDQotICAgICAgICAgICAgICogbm90IGV4ZWN1dGUJd2hpbGUgdGhlIHNjaGVkdWxlciBpcyBiZWluZyBzdGFydGVkLiAgSW50ZXJydXB0cyBhcmUNCi0gICAgICAgICAgICAgKiBhdXRvbWF0aWNhbGx5IHR1cm5lZCBiYWNrIG9uIGluIHRoZSBDUFUgd2hlbiB0aGUgZmlyc3QgdGFzayBzdGFydHMNCi0gICAgICAgICAgICAgKiBleGVjdXRpbmcuICovDQotICAgICAgICAgICAgcG9ydENQVV9JUlFfRElTQUJMRSgpOw0KKwkJaWYoICggcG9ydElDQ0JQUl9CSU5BUllfUE9JTlRfUkVHSVNURVIgJiBwb3J0QklOQVJZX1BPSU5UX0JJVFMgKSA8PSBwb3J0TUFYX0JJTkFSWV9QT0lOVF9WQUxVRSApDQorCQl7DQorCQkJLyogSW50ZXJydXB0cyBhcmUgdHVybmVkIG9mZiBpbiB0aGUgQ1BVIGl0c2VsZiB0byBlbnN1cmUgdGljayBkb2VzDQorCQkJbm90IGV4ZWN1dGUJd2hpbGUgdGhlIHNjaGVkdWxlciBpcyBiZWluZyBzdGFydGVkLiAgSW50ZXJydXB0cyBhcmUNCisJCQlhdXRvbWF0aWNhbGx5IHR1cm5lZCBiYWNrIG9uIGluIHRoZSBDUFUgd2hlbiB0aGUgZmlyc3QgdGFzayBzdGFydHMNCisJCQlleGVjdXRpbmcuICovDQorCQkJcG9ydENQVV9JUlFfRElTQUJMRSgpOw0KIA0KLSAgICAgICAgICAgIC8qIFN0YXJ0IHRoZSB0aW1lciB0aGF0IGdlbmVyYXRlcyB0aGUgdGljayBJU1IuICovDQotICAgICAgICAgICAgY29uZmlnU0VUVVBfVElDS19JTlRFUlJVUFQoKTsNCisJCQkvKiBTdGFydCB0aGUgdGltZXIgdGhhdCBnZW5lcmF0ZXMgdGhlIHRpY2sgSVNSLiAqLw0KKwkJCWNvbmZpZ1NFVFVQX1RJQ0tfSU5URVJSVVBUKCk7DQogDQotICAgICAgICAgICAgLyogU3RhcnQgdGhlIGZpcnN0IHRhc2sgZXhlY3V0aW5nLiAqLw0KLSAgICAgICAgICAgIHZQb3J0UmVzdG9yZVRhc2tDb250ZXh0KCk7DQotICAgICAgICB9DQotICAgIH0NCisJCQkvKiBTdGFydCB0aGUgZmlyc3QgdGFzayBleGVjdXRpbmcuICovDQorCQkJdlBvcnRSZXN0b3JlVGFza0NvbnRleHQoKTsNCisJCX0NCisJfQ0KIA0KLSAgICAvKiBXaWxsIG9ubHkgZ2V0IGhlcmUgaWYgdlRhc2tTdGFydFNjaGVkdWxlcigpIHdhcyBjYWxsZWQgd2l0aCB0aGUgQ1BVIGluDQotICAgICAqIGEgbm9uLXByaXZpbGVnZWQgbW9kZSBvciB0aGUgYmluYXJ5IHBvaW50IHJlZ2lzdGVyIHdhcyBub3Qgc2V0IHRvIGl0cyBsb3dlc3QNCi0gICAgICogcG9zc2libGUgdmFsdWUuICBwcnZUYXNrRXhpdEVycm9yKCkgaXMgcmVmZXJlbmNlZCB0byBwcmV2ZW50IGEgY29tcGlsZXINCi0gICAgICogd2FybmluZyBhYm91dCBpdCBiZWluZyBkZWZpbmVkIGJ1dCBub3QgcmVmZXJlbmNlZCBpbiB0aGUgY2FzZSB0aGF0IHRoZSB1c2VyDQotICAgICAqIGRlZmluZXMgdGhlaXIgb3duIGV4aXQgYWRkcmVzcy4gKi8NCi0gICAgKCB2b2lkICkgcHJ2VGFza0V4aXRFcnJvcjsNCi0gICAgcmV0dXJuIDA7DQorCS8qIFdpbGwgb25seSBnZXQgaGVyZSBpZiB2VGFza1N0YXJ0U2NoZWR1bGVyKCkgd2FzIGNhbGxlZCB3aXRoIHRoZSBDUFUgaW4NCisJYSBub24tcHJpdmlsZWdlZCBtb2RlIG9yIHRoZSBiaW5hcnkgcG9pbnQgcmVnaXN0ZXIgd2FzIG5vdCBzZXQgdG8gaXRzIGxvd2VzdA0KKwlwb3NzaWJsZSB2YWx1ZS4gIHBydlRhc2tFeGl0RXJyb3IoKSBpcyByZWZlcmVuY2VkIHRvIHByZXZlbnQgYSBjb21waWxlcg0KKwl3YXJuaW5nIGFib3V0IGl0IGJlaW5nIGRlZmluZWQgYnV0IG5vdCByZWZlcmVuY2VkIGluIHRoZSBjYXNlIHRoYXQgdGhlIHVzZXINCisJZGVmaW5lcyB0aGVpciBvd24gZXhpdCBhZGRyZXNzLiAqLw0KKwkoIHZvaWQgKSBwcnZUYXNrRXhpdEVycm9yOw0KKwlyZXR1cm4gMDsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogdm9pZCB2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApDQogew0KLSAgICAvKiBOb3QgaW1wbGVtZW50ZWQgaW4gcG9ydHMgd2hlcmUgdGhlcmUgaXMgbm90aGluZyB0byByZXR1cm4gdG8uDQotICAgICAqIEFydGlmaWNpYWxseSBmb3JjZSBhbiBhc3NlcnQuICovDQotICAgIGNvbmZpZ0FTU0VSVCggdWxDcml0aWNhbE5lc3RpbmcgPT0gMTAwMFVMICk7DQorCS8qIE5vdCBpbXBsZW1lbnRlZCBpbiBwb3J0cyB3aGVyZSB0aGVyZSBpcyBub3RoaW5nIHRvIHJldHVybiB0by4NCisJQXJ0aWZpY2lhbGx5IGZvcmNlIGFuIGFzc2VydC4gKi8NCisJY29uZmlnQVNTRVJUKCB1bENyaXRpY2FsTmVzdGluZyA9PSAxMDAwVUwgKTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKQ0KIHsNCi0gICAgLyogTWFzayBpbnRlcnJ1cHRzIHVwIHRvIHRoZSBtYXggc3lzY2FsbCBpbnRlcnJ1cHQgcHJpb3JpdHkuICovDQotICAgIHVsUG9ydFNldEludGVycnVwdE1hc2soKTsNCisJLyogTWFzayBpbnRlcnJ1cHRzIHVwIHRvIHRoZSBtYXggc3lzY2FsbCBpbnRlcnJ1cHQgcHJpb3JpdHkuICovDQorCXVsUG9ydFNldEludGVycnVwdE1hc2soKTsNCiANCi0gICAgLyogTm93IGludGVycnVwdHMgYXJlIGRpc2FibGVkIHVsQ3JpdGljYWxOZXN0aW5nIGNhbiBiZSBhY2Nlc3NlZA0KLSAgICAgKiBkaXJlY3RseS4gIEluY3JlbWVudCB1bENyaXRpY2FsTmVzdGluZyB0byBrZWVwIGEgY291bnQgb2YgaG93IG1hbnkgdGltZXMNCi0gICAgICogcG9ydEVOVEVSX0NSSVRJQ0FMKCkgaGFzIGJlZW4gY2FsbGVkLiAqLw0KLSAgICB1bENyaXRpY2FsTmVzdGluZysrOw0KKwkvKiBOb3cgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgdWxDcml0aWNhbE5lc3RpbmcgY2FuIGJlIGFjY2Vzc2VkDQorCWRpcmVjdGx5LiAgSW5jcmVtZW50IHVsQ3JpdGljYWxOZXN0aW5nIHRvIGtlZXAgYSBjb3VudCBvZiBob3cgbWFueSB0aW1lcw0KKwlwb3J0RU5URVJfQ1JJVElDQUwoKSBoYXMgYmVlbiBjYWxsZWQuICovDQorCXVsQ3JpdGljYWxOZXN0aW5nKys7DQogDQotICAgIC8qIFRoaXMgaXMgbm90IHRoZSBpbnRlcnJ1cHQgc2FmZSB2ZXJzaW9uIG9mIHRoZSBlbnRlciBjcml0aWNhbCBmdW5jdGlvbiBzbw0KLSAgICAgKiBhc3NlcnQoKSBpZiBpdCBpcyBiZWluZyBjYWxsZWQgZnJvbSBhbiBpbnRlcnJ1cHQgY29udGV4dC4gIE9ubHkgQVBJDQotICAgICAqIGZ1bmN0aW9ucyB0aGF0IGVuZCBpbiAiRnJvbUlTUiIgY2FuIGJlIHVzZWQgaW4gYW4gaW50ZXJydXB0LiAgT25seSBhc3NlcnQgaWYNCi0gICAgICogdGhlIGNyaXRpY2FsIG5lc3RpbmcgY291bnQgaXMgMSB0byBwcm90ZWN0IGFnYWluc3QgcmVjdXJzaXZlIGNhbGxzIGlmIHRoZQ0KLSAgICAgKiBhc3NlcnQgZnVuY3Rpb24gYWxzbyB1c2VzIGEgY3JpdGljYWwgc2VjdGlvbi4gKi8NCi0gICAgaWYoIHVsQ3JpdGljYWxOZXN0aW5nID09IDEgKQ0KLSAgICB7DQotICAgICAgICBjb25maWdBU1NFUlQoIHVsUG9ydEludGVycnVwdE5lc3RpbmcgPT0gMCApOw0KLSAgICB9DQorCS8qIFRoaXMgaXMgbm90IHRoZSBpbnRlcnJ1cHQgc2FmZSB2ZXJzaW9uIG9mIHRoZSBlbnRlciBjcml0aWNhbCBmdW5jdGlvbiBzbw0KKwlhc3NlcnQoKSBpZiBpdCBpcyBiZWluZyBjYWxsZWQgZnJvbSBhbiBpbnRlcnJ1cHQgY29udGV4dC4gIE9ubHkgQVBJDQorCWZ1bmN0aW9ucyB0aGF0IGVuZCBpbiAiRnJvbUlTUiIgY2FuIGJlIHVzZWQgaW4gYW4gaW50ZXJydXB0LiAgT25seSBhc3NlcnQgaWYNCisJdGhlIGNyaXRpY2FsIG5lc3RpbmcgY291bnQgaXMgMSB0byBwcm90ZWN0IGFnYWluc3QgcmVjdXJzaXZlIGNhbGxzIGlmIHRoZQ0KKwlhc3NlcnQgZnVuY3Rpb24gYWxzbyB1c2VzIGEgY3JpdGljYWwgc2VjdGlvbi4gKi8NCisJaWYoIHVsQ3JpdGljYWxOZXN0aW5nID09IDEgKQ0KKwl7DQorCQljb25maWdBU1NFUlQoIHVsUG9ydEludGVycnVwdE5lc3RpbmcgPT0gMCApOw0KKwl9DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoIHZvaWQgKQ0KIHsNCi0gICAgaWYoIHVsQ3JpdGljYWxOZXN0aW5nID4gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgKQ0KLSAgICB7DQotICAgICAgICAvKiBEZWNyZW1lbnQgdGhlIG5lc3RpbmcgY291bnQgYXMgdGhlIGNyaXRpY2FsIHNlY3Rpb24gaXMgYmVpbmcNCi0gICAgICAgICAqIGV4aXRlZC4gKi8NCi0gICAgICAgIHVsQ3JpdGljYWxOZXN0aW5nLS07DQorCWlmKCB1bENyaXRpY2FsTmVzdGluZyA+IHBvcnROT19DUklUSUNBTF9ORVNUSU5HICkNCisJew0KKwkJLyogRGVjcmVtZW50IHRoZSBuZXN0aW5nIGNvdW50IGFzIHRoZSBjcml0aWNhbCBzZWN0aW9uIGlzIGJlaW5nDQorCQlleGl0ZWQuICovDQorCQl1bENyaXRpY2FsTmVzdGluZy0tOw0KIA0KLSAgICAgICAgLyogSWYgdGhlIG5lc3RpbmcgbGV2ZWwgaGFzIHJlYWNoZWQgemVybyB0aGVuIGFsbCBpbnRlcnJ1cHQNCi0gICAgICAgICAqIHByaW9yaXRpZXMgbXVzdCBiZSByZS1lbmFibGVkLiAqLw0KLSAgICAgICAgaWYoIHVsQ3JpdGljYWxOZXN0aW5nID09IHBvcnROT19DUklUSUNBTF9ORVNUSU5HICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICAvKiBDcml0aWNhbCBuZXN0aW5nIGhhcyByZWFjaGVkIHplcm8gc28gYWxsIGludGVycnVwdCBwcmlvcml0aWVzDQotICAgICAgICAgICAgICogc2hvdWxkIGJlIHVubWFza2VkLiAqLw0KLSAgICAgICAgICAgIHBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTSygpOw0KLSAgICAgICAgfQ0KLSAgICB9DQorCQkvKiBJZiB0aGUgbmVzdGluZyBsZXZlbCBoYXMgcmVhY2hlZCB6ZXJvIHRoZW4gYWxsIGludGVycnVwdA0KKwkJcHJpb3JpdGllcyBtdXN0IGJlIHJlLWVuYWJsZWQuICovDQorCQlpZiggdWxDcml0aWNhbE5lc3RpbmcgPT0gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgKQ0KKwkJew0KKwkJCS8qIENyaXRpY2FsIG5lc3RpbmcgaGFzIHJlYWNoZWQgemVybyBzbyBhbGwgaW50ZXJydXB0IHByaW9yaXRpZXMNCisJCQlzaG91bGQgYmUgdW5tYXNrZWQuICovDQorCQkJcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLKCk7DQorCQl9DQorCX0NCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogdm9pZCBGcmVlUlRPU19UaWNrX0hhbmRsZXIoIHZvaWQgKQ0KIHsNCi0gICAgLyogU2V0IGludGVycnVwdCBtYXNrIGJlZm9yZSBhbHRlcmluZyBzY2hlZHVsZXIgc3RydWN0dXJlcy4gICBUaGUgdGljaw0KLSAgICAgKiBoYW5kbGVyIHJ1bnMgYXQgdGhlIGxvd2VzdCBwcmlvcml0eSwgc28gaW50ZXJydXB0cyBjYW5ub3QgYWxyZWFkeSBiZSBtYXNrZWQsDQotICAgICAqIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gc2F2ZSBhbmQgcmVzdG9yZSB0aGUgY3VycmVudCBtYXNrIHZhbHVlLiAgSXQgaXMNCi0gICAgICogbmVjZXNzYXJ5IHRvIHR1cm4gb2ZmIGludGVycnVwdHMgaW4gdGhlIENQVSBpdHNlbGYgd2hpbGUgdGhlIElDQ1BNUiBpcyBiZWluZw0KLSAgICAgKiB1cGRhdGVkLiAqLw0KLSAgICBwb3J0Q1BVX0lSUV9ESVNBQkxFKCk7DQotICAgIHBvcnRJQ0NQTVJfUFJJT1JJVFlfTUFTS19SRUdJU1RFUiA9ICggdWludDMyX3QgKSAoIGNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgPDwgcG9ydFBSSU9SSVRZX1NISUZUICk7DQotICAgIF9fYXNtIHZvbGF0aWxlICggImRzYgkJXG4iDQotICAgICAgICAgICAgICAgICAgICAgImlzYgkJXG4iOjo6ICJtZW1vcnkiICk7DQotICAgIHBvcnRDUFVfSVJRX0VOQUJMRSgpOw0KKwkvKiBTZXQgaW50ZXJydXB0IG1hc2sgYmVmb3JlIGFsdGVyaW5nIHNjaGVkdWxlciBzdHJ1Y3R1cmVzLiAgIFRoZSB0aWNrDQorCWhhbmRsZXIgcnVucyBhdCB0aGUgbG93ZXN0IHByaW9yaXR5LCBzbyBpbnRlcnJ1cHRzIGNhbm5vdCBhbHJlYWR5IGJlIG1hc2tlZCwNCisJc28gdGhlcmUgaXMgbm8gbmVlZCB0byBzYXZlIGFuZCByZXN0b3JlIHRoZSBjdXJyZW50IG1hc2sgdmFsdWUuICBJdCBpcw0KKwluZWNlc3NhcnkgdG8gdHVybiBvZmYgaW50ZXJydXB0cyBpbiB0aGUgQ1BVIGl0c2VsZiB3aGlsZSB0aGUgSUNDUE1SIGlzIGJlaW5nDQorCXVwZGF0ZWQuICovDQorCXBvcnRDUFVfSVJRX0RJU0FCTEUoKTsNCisJcG9ydElDQ1BNUl9QUklPUklUWV9NQVNLX1JFR0lTVEVSID0gKCB1aW50MzJfdCApICggY29uZmlnTUFYX0FQSV9DQUxMX0lOVEVSUlVQVF9QUklPUklUWSA8PCBwb3J0UFJJT1JJVFlfU0hJRlQgKTsNCisJX19hc20gdm9sYXRpbGUgKAkiZHNiCQlcbiINCisJCQkJCQkiaXNiCQlcbiIgOjo6ICJtZW1vcnkiICk7DQorCXBvcnRDUFVfSVJRX0VOQUJMRSgpOw0KIA0KLSAgICAvKiBJbmNyZW1lbnQgdGhlIFJUT1MgdGljay4gKi8NCi0gICAgaWYoIHhUYXNrSW5jcmVtZW50VGljaygpICE9IHBkRkFMU0UgKQ0KLSAgICB7DQotICAgICAgICB1bFBvcnRZaWVsZFJlcXVpcmVkID0gcGRUUlVFOw0KLSAgICB9DQorCS8qIEluY3JlbWVudCB0aGUgUlRPUyB0aWNrLiAqLw0KKwlpZiggeFRhc2tJbmNyZW1lbnRUaWNrKCkgIT0gcGRGQUxTRSApDQorCXsNCisJCXVsUG9ydFlpZWxkUmVxdWlyZWQgPSBwZFRSVUU7DQorCX0NCiANCi0gICAgLyogRW5zdXJlIGFsbCBpbnRlcnJ1cHQgcHJpb3JpdGllcyBhcmUgYWN0aXZlIGFnYWluLiAqLw0KLSAgICBwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0soKTsNCi0gICAgY29uZmlnQ0xFQVJfVElDS19JTlRFUlJVUFQoKTsNCisJLyogRW5zdXJlIGFsbCBpbnRlcnJ1cHQgcHJpb3JpdGllcyBhcmUgYWN0aXZlIGFnYWluLiAqLw0KKwlwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0soKTsNCisJY29uZmlnQ0xFQVJfVElDS19JTlRFUlJVUFQoKTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQotI2lmICggY29uZmlnVVNFX1RBU0tfRlBVX1NVUFBPUlQgIT0gMiApDQorI2lmKCBjb25maWdVU0VfVEFTS19GUFVfU1VQUE9SVCAhPSAyICkNCiANCi0gICAgdm9pZCB2UG9ydFRhc2tVc2VzRlBVKCB2b2lkICkNCi0gICAgew0KLSAgICAgICAgdWludDMyX3QgdWxJbml0aWFsRlBTQ1IgPSAwOw0KKwl2b2lkIHZQb3J0VGFza1VzZXNGUFUoIHZvaWQgKQ0KKwl7DQorCXVpbnQzMl90IHVsSW5pdGlhbEZQU0NSID0gMDsNCiANCi0gICAgICAgIC8qIEEgdGFzayBpcyByZWdpc3RlcmluZyB0aGUgZmFjdCB0aGF0IGl0IG5lZWRzIGFuIEZQVSBjb250ZXh0LiAgU2V0IHRoZQ0KLSAgICAgICAgICogRlBVIGZsYWcgKHdoaWNoIGlzIHNhdmVkIGFzIHBhcnQgb2YgdGhlIHRhc2sgY29udGV4dCkuICovDQotICAgICAgICB1bFBvcnRUYXNrSGFzRlBVQ29udGV4dCA9IHBkVFJVRTsNCisJCS8qIEEgdGFzayBpcyByZWdpc3RlcmluZyB0aGUgZmFjdCB0aGF0IGl0IG5lZWRzIGFuIEZQVSBjb250ZXh0LiAgU2V0IHRoZQ0KKwkJRlBVIGZsYWcgKHdoaWNoIGlzIHNhdmVkIGFzIHBhcnQgb2YgdGhlIHRhc2sgY29udGV4dCkuICovDQorCQl1bFBvcnRUYXNrSGFzRlBVQ29udGV4dCA9IHBkVFJVRTsNCiANCi0gICAgICAgIC8qIEluaXRpYWxpc2UgdGhlIGZsb2F0aW5nIHBvaW50IHN0YXR1cyByZWdpc3Rlci4gKi8NCi0gICAgICAgIF9fYXNtIHZvbGF0aWxlICggIkZNWFIgCUZQU0NSLCAlMCIgOjoiciIgKCB1bEluaXRpYWxGUFNDUiApIDogIm1lbW9yeSIgKTsNCi0gICAgfQ0KKwkJLyogSW5pdGlhbGlzZSB0aGUgZmxvYXRpbmcgcG9pbnQgc3RhdHVzIHJlZ2lzdGVyLiAqLw0KKwkJX19hc20gdm9sYXRpbGUgKCAiRk1YUiAJRlBTQ1IsICUwIiA6OiAiciIgKHVsSW5pdGlhbEZQU0NSKSA6ICJtZW1vcnkiICk7DQorCX0NCiANCiAjZW5kaWYgLyogY29uZmlnVVNFX1RBU0tfRlBVX1NVUFBPUlQgKi8NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0Q2xlYXJJbnRlcnJ1cHRNYXNrKCB1aW50MzJfdCB1bE5ld01hc2tWYWx1ZSApDQogew0KLSAgICBpZiggdWxOZXdNYXNrVmFsdWUgPT0gcGRGQUxTRSApDQotICAgIHsNCi0gICAgICAgIHBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTSygpOw0KLSAgICB9DQorCWlmKCB1bE5ld01hc2tWYWx1ZSA9PSBwZEZBTFNFICkNCisJew0KKwkJcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLKCk7DQorCX0NCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogdWludDMyX3QgdWxQb3J0U2V0SW50ZXJydXB0TWFzayggdm9pZCApDQogew0KLSAgICB1aW50MzJfdCB1bFJldHVybjsNCit1aW50MzJfdCB1bFJldHVybjsNCiANCi0gICAgLyogSW50ZXJydXB0IGluIHRoZSBDUFUgbXVzdCBiZSB0dXJuZWQgb2ZmIHdoaWxlIHRoZSBJQ0NQTVIgaXMgYmVpbmcNCi0gICAgICogdXBkYXRlZC4gKi8NCi0gICAgcG9ydENQVV9JUlFfRElTQUJMRSgpOw0KKwkvKiBJbnRlcnJ1cHQgaW4gdGhlIENQVSBtdXN0IGJlIHR1cm5lZCBvZmYgd2hpbGUgdGhlIElDQ1BNUiBpcyBiZWluZw0KKwl1cGRhdGVkLiAqLw0KKwlwb3J0Q1BVX0lSUV9ESVNBQkxFKCk7DQorCWlmKCBwb3J0SUNDUE1SX1BSSU9SSVRZX01BU0tfUkVHSVNURVIgPT0gKCB1aW50MzJfdCApICggY29uZmlnTUFYX0FQSV9DQUxMX0lOVEVSUlVQVF9QUklPUklUWSA8PCBwb3J0UFJJT1JJVFlfU0hJRlQgKSApDQorCXsNCisJCS8qIEludGVycnVwdHMgd2VyZSBhbHJlYWR5IG1hc2tlZC4gKi8NCisJCXVsUmV0dXJuID0gcGRUUlVFOw0KKwl9DQorCWVsc2UNCisJew0KKwkJdWxSZXR1cm4gPSBwZEZBTFNFOw0KKwkJcG9ydElDQ1BNUl9QUklPUklUWV9NQVNLX1JFR0lTVEVSID0gKCB1aW50MzJfdCApICggY29uZmlnTUFYX0FQSV9DQUxMX0lOVEVSUlVQVF9QUklPUklUWSA8PCBwb3J0UFJJT1JJVFlfU0hJRlQgKTsNCisJCV9fYXNtIHZvbGF0aWxlICgJImRzYgkJXG4iDQorCQkJCQkJCSJpc2IJCVxuIiA6OjogIm1lbW9yeSIgKTsNCisJfQ0KKwlwb3J0Q1BVX0lSUV9FTkFCTEUoKTsNCiANCi0gICAgaWYoIHBvcnRJQ0NQTVJfUFJJT1JJVFlfTUFTS19SRUdJU1RFUiA9PSAoIHVpbnQzMl90ICkgKCBjb25maWdNQVhfQVBJX0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIDw8IHBvcnRQUklPUklUWV9TSElGVCApICkNCi0gICAgew0KLSAgICAgICAgLyogSW50ZXJydXB0cyB3ZXJlIGFscmVhZHkgbWFza2VkLiAqLw0KLSAgICAgICAgdWxSZXR1cm4gPSBwZFRSVUU7DQotICAgIH0NCi0gICAgZWxzZQ0KLSAgICB7DQotICAgICAgICB1bFJldHVybiA9IHBkRkFMU0U7DQotICAgICAgICBwb3J0SUNDUE1SX1BSSU9SSVRZX01BU0tfUkVHSVNURVIgPSAoIHVpbnQzMl90ICkgKCBjb25maWdNQVhfQVBJX0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIDw8IHBvcnRQUklPUklUWV9TSElGVCApOw0KLSAgICAgICAgX19hc20gdm9sYXRpbGUgKCAiZHNiCQlcbiINCi0gICAgICAgICAgICAgICAgICAgICAgICAgImlzYgkJXG4iOjo6ICJtZW1vcnkiICk7DQotICAgIH0NCi0NCi0gICAgcG9ydENQVV9JUlFfRU5BQkxFKCk7DQotDQotICAgIHJldHVybiB1bFJldHVybjsNCisJcmV0dXJuIHVsUmV0dXJuOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0jaWYgKCBjb25maWdBU1NFUlRfREVGSU5FRCA9PSAxICkNCisjaWYoIGNvbmZpZ0FTU0VSVF9ERUZJTkVEID09IDEgKQ0KIA0KLSAgICB2b2lkIHZQb3J0VmFsaWRhdGVJbnRlcnJ1cHRQcmlvcml0eSggdm9pZCApDQotICAgIHsNCi0gICAgICAgIC8qIFRoZSBmb2xsb3dpbmcgYXNzZXJ0aW9uIHdpbGwgZmFpbCBpZiBhIHNlcnZpY2Ugcm91dGluZSAoSVNSKSBmb3INCi0gICAgICAgICAqIGFuIGludGVycnVwdCB0aGF0IGhhcyBiZWVuIGFzc2lnbmVkIGEgcHJpb3JpdHkgYWJvdmUNCi0gICAgICAgICAqIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSBjYWxscyBhbiBJU1Igc2FmZSBGcmVlUlRPUyBBUEkNCi0gICAgICAgICAqIGZ1bmN0aW9uLiAgSVNSIHNhZmUgRnJlZVJUT1MgQVBJIGZ1bmN0aW9ucyBtdXN0ICpvbmx5KiBiZSBjYWxsZWQNCi0gICAgICAgICAqIGZyb20gaW50ZXJydXB0cyB0aGF0IGhhdmUgYmVlbiBhc3NpZ25lZCBhIHByaW9yaXR5IGF0IG9yIGJlbG93DQotICAgICAgICAgKiBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkuDQotICAgICAgICAgKg0KLSAgICAgICAgICogTnVtZXJpY2FsbHkgbG93IGludGVycnVwdCBwcmlvcml0eSBudW1iZXJzIHJlcHJlc2VudCBsb2dpY2FsbHkgaGlnaA0KLSAgICAgICAgICogaW50ZXJydXB0IHByaW9yaXRpZXMsIHRoZXJlZm9yZSB0aGUgcHJpb3JpdHkgb2YgdGhlIGludGVycnVwdCBtdXN0DQotICAgICAgICAgKiBiZSBzZXQgdG8gYSB2YWx1ZSBlcXVhbCB0byBvciBudW1lcmljYWxseSAqaGlnaGVyKiB0aGFuDQotICAgICAgICAgKiBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkuDQotICAgICAgICAgKg0KLSAgICAgICAgICogRnJlZVJUT1MgbWFpbnRhaW5zIHNlcGFyYXRlIHRocmVhZCBhbmQgSVNSIEFQSSBmdW5jdGlvbnMgdG8gZW5zdXJlDQotICAgICAgICAgKiBpbnRlcnJ1cHQgZW50cnkgaXMgYXMgZmFzdCBhbmQgc2ltcGxlIGFzIHBvc3NpYmxlLiAqLw0KLSAgICAgICAgY29uZmlnQVNTRVJUKCBwb3J0SUNDUlBSX1JVTk5JTkdfUFJJT1JJVFlfUkVHSVNURVIgPj0gKCB1aW50MzJfdCApICggY29uZmlnTUFYX0FQSV9DQUxMX0lOVEVSUlVQVF9QUklPUklUWSA8PCBwb3J0UFJJT1JJVFlfU0hJRlQgKSApOw0KKwl2b2lkIHZQb3J0VmFsaWRhdGVJbnRlcnJ1cHRQcmlvcml0eSggdm9pZCApDQorCXsNCisJCS8qIFRoZSBmb2xsb3dpbmcgYXNzZXJ0aW9uIHdpbGwgZmFpbCBpZiBhIHNlcnZpY2Ugcm91dGluZSAoSVNSKSBmb3INCisJCWFuIGludGVycnVwdCB0aGF0IGhhcyBiZWVuIGFzc2lnbmVkIGEgcHJpb3JpdHkgYWJvdmUNCisJCWNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSBjYWxscyBhbiBJU1Igc2FmZSBGcmVlUlRPUyBBUEkNCisJCWZ1bmN0aW9uLiAgSVNSIHNhZmUgRnJlZVJUT1MgQVBJIGZ1bmN0aW9ucyBtdXN0ICpvbmx5KiBiZSBjYWxsZWQNCisJCWZyb20gaW50ZXJydXB0cyB0aGF0IGhhdmUgYmVlbiBhc3NpZ25lZCBhIHByaW9yaXR5IGF0IG9yIGJlbG93DQorCQljb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkuDQogDQotICAgICAgICAvKiBQcmlvcml0eSBncm91cGluZzogIFRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciAoR0lDKSBhbGxvd3MgdGhlIGJpdHMNCi0gICAgICAgICAqIHRoYXQgZGVmaW5lIGVhY2ggaW50ZXJydXB0J3MgcHJpb3JpdHkgdG8gYmUgc3BsaXQgYmV0d2VlbiBiaXRzIHRoYXQNCi0gICAgICAgICAqIGRlZmluZSB0aGUgaW50ZXJydXB0J3MgcHJlLWVtcHRpb24gcHJpb3JpdHkgYml0cyBhbmQgYml0cyB0aGF0IGRlZmluZQ0KLSAgICAgICAgICogdGhlIGludGVycnVwdCdzIHN1Yi1wcmlvcml0eS4gIEZvciBzaW1wbGljaXR5IGFsbCBiaXRzIG11c3QgYmUgZGVmaW5lZA0KLSAgICAgICAgICogdG8gYmUgcHJlLWVtcHRpb24gcHJpb3JpdHkgYml0cy4gIFRoZSBmb2xsb3dpbmcgYXNzZXJ0aW9uIHdpbGwgZmFpbCBpZg0KLSAgICAgICAgICogdGhpcyBpcyBub3QgdGhlIGNhc2UgKGlmIHNvbWUgYml0cyByZXByZXNlbnQgYSBzdWItcHJpb3JpdHkpLg0KLSAgICAgICAgICoNCi0gICAgICAgICAqIFRoZSBwcmlvcml0eSBncm91cGluZyBpcyBjb25maWd1cmVkIGJ5IHRoZSBHSUMncyBiaW5hcnkgcG9pbnQgcmVnaXN0ZXINCi0gICAgICAgICAqIChJQ0NCUFIpLiAgV3JpdHRpbmcgMCB0byBJQ0NCUFIgd2lsbCBlbnN1cmUgaXQgaXMgc2V0IHRvIGl0cyBsb3dlc3QNCi0gICAgICAgICAqIHBvc3NpYmxlIHZhbHVlICh3aGljaCBtYXkgYmUgYWJvdmUgMCkuICovDQotICAgICAgICBjb25maWdBU1NFUlQoICggcG9ydElDQ0JQUl9CSU5BUllfUE9JTlRfUkVHSVNURVIgJiBwb3J0QklOQVJZX1BPSU5UX0JJVFMgKSA8PSBwb3J0TUFYX0JJTkFSWV9QT0lOVF9WQUxVRSApOw0KLSAgICB9DQorCQlOdW1lcmljYWxseSBsb3cgaW50ZXJydXB0IHByaW9yaXR5IG51bWJlcnMgcmVwcmVzZW50IGxvZ2ljYWxseSBoaWdoDQorCQlpbnRlcnJ1cHQgcHJpb3JpdGllcywgdGhlcmVmb3JlIHRoZSBwcmlvcml0eSBvZiB0aGUgaW50ZXJydXB0IG11c3QNCisJCWJlIHNldCB0byBhIHZhbHVlIGVxdWFsIHRvIG9yIG51bWVyaWNhbGx5ICpoaWdoZXIqIHRoYW4NCisJCWNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWS4NCisNCisJCUZyZWVSVE9TIG1haW50YWlucyBzZXBhcmF0ZSB0aHJlYWQgYW5kIElTUiBBUEkgZnVuY3Rpb25zIHRvIGVuc3VyZQ0KKwkJaW50ZXJydXB0IGVudHJ5IGlzIGFzIGZhc3QgYW5kIHNpbXBsZSBhcyBwb3NzaWJsZS4gKi8NCisJCWNvbmZpZ0FTU0VSVCggcG9ydElDQ1JQUl9SVU5OSU5HX1BSSU9SSVRZX1JFR0lTVEVSID49ICggdWludDMyX3QgKSAoIGNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgPDwgcG9ydFBSSU9SSVRZX1NISUZUICkgKTsNCisNCisJCS8qIFByaW9yaXR5IGdyb3VwaW5nOiAgVGhlIGludGVycnVwdCBjb250cm9sbGVyIChHSUMpIGFsbG93cyB0aGUgYml0cw0KKwkJdGhhdCBkZWZpbmUgZWFjaCBpbnRlcnJ1cHQncyBwcmlvcml0eSB0byBiZSBzcGxpdCBiZXR3ZWVuIGJpdHMgdGhhdA0KKwkJZGVmaW5lIHRoZSBpbnRlcnJ1cHQncyBwcmUtZW1wdGlvbiBwcmlvcml0eSBiaXRzIGFuZCBiaXRzIHRoYXQgZGVmaW5lDQorCQl0aGUgaW50ZXJydXB0J3Mgc3ViLXByaW9yaXR5LiAgRm9yIHNpbXBsaWNpdHkgYWxsIGJpdHMgbXVzdCBiZSBkZWZpbmVkDQorCQl0byBiZSBwcmUtZW1wdGlvbiBwcmlvcml0eSBiaXRzLiAgVGhlIGZvbGxvd2luZyBhc3NlcnRpb24gd2lsbCBmYWlsIGlmDQorCQl0aGlzIGlzIG5vdCB0aGUgY2FzZSAoaWYgc29tZSBiaXRzIHJlcHJlc2VudCBhIHN1Yi1wcmlvcml0eSkuDQorDQorCQlUaGUgcHJpb3JpdHkgZ3JvdXBpbmcgaXMgY29uZmlndXJlZCBieSB0aGUgR0lDJ3MgYmluYXJ5IHBvaW50IHJlZ2lzdGVyDQorCQkoSUNDQlBSKS4gIFdyaXR0aW5nIDAgdG8gSUNDQlBSIHdpbGwgZW5zdXJlIGl0IGlzIHNldCB0byBpdHMgbG93ZXN0DQorCQlwb3NzaWJsZSB2YWx1ZSAod2hpY2ggbWF5IGJlIGFib3ZlIDApLiAqLw0KKwkJY29uZmlnQVNTRVJUKCAoIHBvcnRJQ0NCUFJfQklOQVJZX1BPSU5UX1JFR0lTVEVSICYgcG9ydEJJTkFSWV9QT0lOVF9CSVRTICkgPD0gcG9ydE1BWF9CSU5BUllfUE9JTlRfVkFMVUUgKTsNCisJfQ0KIA0KICNlbmRpZiAvKiBjb25maWdBU1NFUlRfREVGSU5FRCAqLw0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdkFwcGxpY2F0aW9uRlBVU2FmZUlSUUhhbmRsZXIoIHVpbnQzMl90IHVsSUNDSUFSICkNCiB7DQotICAgICggdm9pZCApIHVsSUNDSUFSOw0KLSAgICBjb25maWdBU1NFUlQoICggdm9sYXRpbGUgdm9pZCAqICkgTlVMTCApOw0KKwkoIHZvaWQgKSB1bElDQ0lBUjsNCisJY29uZmlnQVNTRVJUKCAoIHZvbGF0aWxlIHZvaWQgKiApIE5VTEwgKTsNCiB9DQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvR0NDL0FSTV9DQTkvcG9ydG1hY3JvLmggYi9wb3J0YWJsZS9HQ0MvQVJNX0NBOS9wb3J0bWFjcm8uaAppbmRleCA5YzY0OThhLi5jNmQzNWQ4IDEwMDY0NAotLS0gYS9wb3J0YWJsZS9HQ0MvQVJNX0NBOS9wb3J0bWFjcm8uaAorKysgYi9wb3J0YWJsZS9HQ0MvQVJNX0NBOS9wb3J0bWFjcm8uaApAQCAtMjYsMTEgKzI2LDExIEBACiAgKi8NCiANCiAjaWZuZGVmIFBPUlRNQUNST19IDQotICAgICNkZWZpbmUgUE9SVE1BQ1JPX0gNCisjZGVmaW5lIFBPUlRNQUNST19IDQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgZXh0ZXJuICJDIiB7DQotICAgICNlbmRpZg0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KKwlleHRlcm4gIkMiIHsNCisjZW5kaWYNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICogUG9ydCBzcGVjaWZpYyBkZWZpbml0aW9ucy4NCkBAIC00MywxNjYgKzQzLDE2NiBAQAogICovDQogDQogLyogVHlwZSBkZWZpbml0aW9ucy4gKi8NCi0gICAgI2RlZmluZSBwb3J0Q0hBUiAgICAgICAgICBjaGFyDQotICAgICNkZWZpbmUgcG9ydEZMT0FUICAgICAgICAgZmxvYXQNCi0gICAgI2RlZmluZSBwb3J0RE9VQkxFICAgICAgICBkb3VibGUNCi0gICAgI2RlZmluZSBwb3J0TE9ORyAgICAgICAgICBsb25nDQotICAgICNkZWZpbmUgcG9ydFNIT1JUICAgICAgICAgc2hvcnQNCi0gICAgI2RlZmluZSBwb3J0U1RBQ0tfVFlQRSAgICB1aW50MzJfdA0KLSAgICAjZGVmaW5lIHBvcnRCQVNFX1RZUEUgICAgIGxvbmcNCisjZGVmaW5lIHBvcnRDSEFSCQljaGFyDQorI2RlZmluZSBwb3J0RkxPQVQJCWZsb2F0DQorI2RlZmluZSBwb3J0RE9VQkxFCQlkb3VibGUNCisjZGVmaW5lIHBvcnRMT05HCQlsb25nDQorI2RlZmluZSBwb3J0U0hPUlQJCXNob3J0DQorI2RlZmluZSBwb3J0U1RBQ0tfVFlQRQl1aW50MzJfdA0KKyNkZWZpbmUgcG9ydEJBU0VfVFlQRQlsb25nDQogDQotICAgIHR5cGVkZWYgcG9ydFNUQUNLX1RZUEUgICBTdGFja1R5cGVfdDsNCi0gICAgdHlwZWRlZiBsb25nICAgICAgICAgICAgIEJhc2VUeXBlX3Q7DQotICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyAgICBVQmFzZVR5cGVfdDsNCit0eXBlZGVmIHBvcnRTVEFDS19UWVBFIFN0YWNrVHlwZV90Ow0KK3R5cGVkZWYgbG9uZyBCYXNlVHlwZV90Ow0KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBVQmFzZVR5cGVfdDsNCiANCi0gICAgdHlwZWRlZiB1aW50MzJfdCAgICAgICAgIFRpY2tUeXBlX3Q7DQotICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAgICAgICAgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQordHlwZWRlZiB1aW50MzJfdCBUaWNrVHlwZV90Ow0KKyNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwNCiANCiAvKiAzMi1iaXQgdGljayB0eXBlIG9uIGEgMzItYml0IGFyY2hpdGVjdHVyZSwgc28gcmVhZHMgb2YgdGhlIHRpY2sgY291bnQgZG8NCi0gKiBub3QgbmVlZCB0byBiZSBndWFyZGVkIHdpdGggYSBjcml0aWNhbCBzZWN0aW9uLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRUSUNLX1RZUEVfSVNfQVRPTUlDICAgIDENCitub3QgbmVlZCB0byBiZSBndWFyZGVkIHdpdGggYSBjcml0aWNhbCBzZWN0aW9uLiAqLw0KKyNkZWZpbmUgcG9ydFRJQ0tfVFlQRV9JU19BVE9NSUMgMQ0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIEhhcmR3YXJlIHNwZWNpZmljcy4gKi8NCi0gICAgI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RIICAgICAgKCAtMSApDQotICAgICNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TICAgICggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQotICAgICNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UICAgIDgNCisjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEgJCQkoIC0xICkNCisjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUwkJCSggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQorI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQJCQk4DQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGFzayB1dGlsaXRpZXMuICovDQogDQogLyogQ2FsbGVkIGF0IHRoZSBlbmQgb2YgYW4gSVNSIHRoYXQgY2FuIGNhdXNlIGEgY29udGV4dCBzd2l0Y2guICovDQotICAgICNkZWZpbmUgcG9ydEVORF9TV0lUQ0hJTkdfSVNSKCB4U3dpdGNoUmVxdWlyZWQgKSBcDQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBleHRlcm4gdWludDMyX3QgdWxQb3J0WWllbGRSZXF1aXJlZDsgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBpZiggeFN3aXRjaFJlcXVpcmVkICE9IHBkRkFMU0UgKSAgICAgICAgICAgICBcDQotICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgdWxQb3J0WWllbGRSZXF1aXJlZCA9IHBkVFJVRTsgICAgICAgICAgICBcDQotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIH0NCisjZGVmaW5lIHBvcnRFTkRfU1dJVENISU5HX0lTUiggeFN3aXRjaFJlcXVpcmVkIClcDQorewkJCQkJCQkJCQkJCVwNCitleHRlcm4gdWludDMyX3QgdWxQb3J0WWllbGRSZXF1aXJlZDsJCQlcDQorCQkJCQkJCQkJCQkJXA0KKwlpZiggeFN3aXRjaFJlcXVpcmVkICE9IHBkRkFMU0UgKQkJCVwNCisJewkJCQkJCQkJCQkJXA0KKwkJdWxQb3J0WWllbGRSZXF1aXJlZCA9IHBkVFJVRTsJCQlcDQorCX0JCQkJCQkJCQkJCVwNCit9DQogDQotICAgICNkZWZpbmUgcG9ydFlJRUxEX0ZST01fSVNSKCB4ICkgICAgcG9ydEVORF9TV0lUQ0hJTkdfSVNSKCB4ICkNCi0gICAgI2RlZmluZSBwb3J0WUlFTEQoKSAgICAgICAgICAgICAgICBfX2FzbSB2b2xhdGlsZSAoICJTV0kgMCIgOjo6ICJtZW1vcnkiICk7DQorI2RlZmluZSBwb3J0WUlFTERfRlJPTV9JU1IoIHggKSBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHggKQ0KKyNkZWZpbmUgcG9ydFlJRUxEKCkgX19hc20gdm9sYXRpbGUgKCAiU1dJIDAiIDo6OiAibWVtb3J5IiApOw0KIA0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0qIENyaXRpY2FsIHNlY3Rpb24gY29udHJvbA0KLSotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisgKiBDcml0aWNhbCBzZWN0aW9uIGNvbnRyb2wNCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KLSAgICBleHRlcm4gdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKTsNCi0gICAgZXh0ZXJuIHZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCi0gICAgZXh0ZXJuIHVpbnQzMl90IHVsUG9ydFNldEludGVycnVwdE1hc2soIHZvaWQgKTsNCi0gICAgZXh0ZXJuIHZvaWQgdlBvcnRDbGVhckludGVycnVwdE1hc2soIHVpbnQzMl90IHVsTmV3TWFza1ZhbHVlICk7DQotICAgIGV4dGVybiB2b2lkIHZQb3J0SW5zdGFsbEZyZWVSVE9TVmVjdG9yVGFibGUoIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApOw0KK2V4dGVybiB1aW50MzJfdCB1bFBvcnRTZXRJbnRlcnJ1cHRNYXNrKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdlBvcnRDbGVhckludGVycnVwdE1hc2soIHVpbnQzMl90IHVsTmV3TWFza1ZhbHVlICk7DQorZXh0ZXJuIHZvaWQgdlBvcnRJbnN0YWxsRnJlZVJUT1NWZWN0b3JUYWJsZSggdm9pZCApOw0KIA0KIC8qIFRoZXNlIG1hY3JvcyBkbyBub3QgZ2xvYmFsbHkgZGlzYWJsZS9lbmFibGUgaW50ZXJydXB0cy4gIFRoZXkgZG8gbWFzayBvZmYNCi0gKiBpbnRlcnJ1cHRzIHRoYXQgaGF2ZSBhIHByaW9yaXR5IGJlbG93IGNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkuICovDQotICAgICNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgICAgICAgICAgICAgICAgICAgICAgdlBvcnRFbnRlckNyaXRpY2FsKCk7DQotICAgICNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKSAgICAgICAgICAgICAgICAgICAgICAgdlBvcnRFeGl0Q3JpdGljYWwoKTsNCi0gICAgI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgICAgICAgICAgICAgICAgICB1bFBvcnRTZXRJbnRlcnJ1cHRNYXNrKCkNCi0gICAgI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKSAgICAgICAgICAgICAgICAgICB2UG9ydENsZWFySW50ZXJydXB0TWFzayggMCApDQotICAgICNkZWZpbmUgcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpICAgICAgICAgdWxQb3J0U2V0SW50ZXJydXB0TWFzaygpDQotICAgICNkZWZpbmUgcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCB4ICkgICAgdlBvcnRDbGVhckludGVycnVwdE1hc2soIHggKQ0KK2ludGVycnVwdHMgdGhhdCBoYXZlIGEgcHJpb3JpdHkgYmVsb3cgY29uZmlnTUFYX0FQSV9DQUxMX0lOVEVSUlVQVF9QUklPUklUWS4gKi8NCisjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpCQl2UG9ydEVudGVyQ3JpdGljYWwoKTsNCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkJCQl2UG9ydEV4aXRDcml0aWNhbCgpOw0KKyNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpCXVsUG9ydFNldEludGVycnVwdE1hc2soKQ0KKyNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkJCXZQb3J0Q2xlYXJJbnRlcnJ1cHRNYXNrKCAwICkNCisjZGVmaW5lIHBvcnRTRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKQkJdWxQb3J0U2V0SW50ZXJydXB0TWFzaygpDQorI2RlZmluZSBwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoeCkJdlBvcnRDbGVhckludGVycnVwdE1hc2soeCkNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBUYXNrIGZ1bmN0aW9uIG1hY3JvcyBhcyBkZXNjcmliZWQgb24gdGhlIEZyZWVSVE9TLm9yZyBXRUIgc2l0ZS4gIFRoZXNlIGFyZQ0KLSAqIG5vdCByZXF1aXJlZCBmb3IgdGhpcyBwb3J0IGJ1dCBpbmNsdWRlZCBpbiBjYXNlIGNvbW1vbiBkZW1vIGNvZGUgdGhhdCB1c2VzIHRoZXNlDQotICogbWFjcm9zIGlzIHVzZWQuICovDQotICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KLSAgICAjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgICAgICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCitub3QgcmVxdWlyZWQgZm9yIHRoaXMgcG9ydCBidXQgaW5jbHVkZWQgaW4gY2FzZSBjb21tb24gZGVtbyBjb2RlIHRoYXQgdXNlcyB0aGVzZQ0KK21hY3JvcyBpcyB1c2VkLiAqLw0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkJdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKQl2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCiANCiAvKiBQcm90b3R5cGUgb2YgdGhlIEZyZWVSVE9TIHRpY2sgaGFuZGxlci4gIFRoaXMgbXVzdCBiZSBpbnN0YWxsZWQgYXMgdGhlDQotICogaGFuZGxlciBmb3Igd2hpY2hldmVyIHBlcmlwaGVyYWwgaXMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgUlRPUyB0aWNrLiAqLw0KLSAgICB2b2lkIEZyZWVSVE9TX1RpY2tfSGFuZGxlciggdm9pZCApOw0KK2hhbmRsZXIgZm9yIHdoaWNoZXZlciBwZXJpcGhlcmFsIGlzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIFJUT1MgdGljay4gKi8NCit2b2lkIEZyZWVSVE9TX1RpY2tfSGFuZGxlciggdm9pZCApOw0KIA0KIC8qIElmIGNvbmZpZ1VTRV9UQVNLX0ZQVV9TVVBQT1JUIGlzIHNldCB0byAxIChvciBsZWZ0IHVuZGVmaW5lZCkgdGhlbiB0YXNrcyBhcmUNCi0gKiBjcmVhdGVkIHdpdGhvdXQgYW4gRlBVIGNvbnRleHQgYW5kIG11c3QgY2FsbCB2UG9ydFRhc2tVc2VzRlBVKCkgdG8gZ2l2ZQ0KLSAqIHRoZW1zZWx2ZXMgYW4gRlBVIGNvbnRleHQgYmVmb3JlIHVzaW5nIGFueSBGUFUgaW5zdHJ1Y3Rpb25zLiAgSWYNCi0gKiBjb25maWdVU0VfVEFTS19GUFVfU1VQUE9SVCBpcyBzZXQgdG8gMiB0aGVuIGFsbCB0YXNrcyB3aWxsIGhhdmUgYW4gRlBVIGNvbnRleHQNCi0gKiBieSBkZWZhdWx0LiAqLw0KLSAgICAjaWYgKCBjb25maWdVU0VfVEFTS19GUFVfU1VQUE9SVCAhPSAyICkNCi0gICAgICAgIHZvaWQgdlBvcnRUYXNrVXNlc0ZQVSggdm9pZCApOw0KLSAgICAjZWxzZQ0KK2NyZWF0ZWQgd2l0aG91dCBhbiBGUFUgY29udGV4dCBhbmQgbXVzdCBjYWxsIHZQb3J0VGFza1VzZXNGUFUoKSB0byBnaXZlDQordGhlbXNlbHZlcyBhbiBGUFUgY29udGV4dCBiZWZvcmUgdXNpbmcgYW55IEZQVSBpbnN0cnVjdGlvbnMuICBJZg0KK2NvbmZpZ1VTRV9UQVNLX0ZQVV9TVVBQT1JUIGlzIHNldCB0byAyIHRoZW4gYWxsIHRhc2tzIHdpbGwgaGF2ZSBhbiBGUFUgY29udGV4dA0KK2J5IGRlZmF1bHQuICovDQorI2lmKCBjb25maWdVU0VfVEFTS19GUFVfU1VQUE9SVCAhPSAyICkNCisJdm9pZCB2UG9ydFRhc2tVc2VzRlBVKCB2b2lkICk7DQorI2Vsc2UNCisJLyogRWFjaCB0YXNrIGhhcyBhbiBGUFUgY29udGV4dCBhbHJlYWR5LCBzbyBkZWZpbmUgdGhpcyBmdW5jdGlvbiBhd2F5IHRvDQorCW5vdGhpbmcgdG8gcHJldmVudCBpdCBiZWluZyBjYWxsZWQgYWNjaWRlbnRhbGx5LiAqLw0KKwkjZGVmaW5lIHZQb3J0VGFza1VzZXNGUFUoKQ0KKyNlbmRpZg0KKyNkZWZpbmUgcG9ydFRBU0tfVVNFU19GTE9BVElOR19QT0lOVCgpIHZQb3J0VGFza1VzZXNGUFUoKQ0KIA0KLS8qIEVhY2ggdGFzayBoYXMgYW4gRlBVIGNvbnRleHQgYWxyZWFkeSwgc28gZGVmaW5lIHRoaXMgZnVuY3Rpb24gYXdheSB0bw0KLSAqIG5vdGhpbmcgdG8gcHJldmVudCBpdCBiZWluZyBjYWxsZWQgYWNjaWRlbnRhbGx5LiAqLw0KLSAgICAgICAgI2RlZmluZSB2UG9ydFRhc2tVc2VzRlBVKCkNCi0gICAgI2VuZGlmDQotICAgICNkZWZpbmUgcG9ydFRBU0tfVVNFU19GTE9BVElOR19QT0lOVCgpICAgIHZQb3J0VGFza1VzZXNGUFUoKQ0KLQ0KLSAgICAjZGVmaW5lIHBvcnRMT1dFU1RfSU5URVJSVVBUX1BSSU9SSVRZICAgICAgICAgICAoICggKCB1aW50MzJfdCApIGNvbmZpZ1VOSVFVRV9JTlRFUlJVUFRfUFJJT1JJVElFUyApIC0gMVVMICkNCi0gICAgI2RlZmluZSBwb3J0TE9XRVNUX1VTQUJMRV9JTlRFUlJVUFRfUFJJT1JJVFkgICAgKCBwb3J0TE9XRVNUX0lOVEVSUlVQVF9QUklPUklUWSAtIDFVTCApDQorI2RlZmluZSBwb3J0TE9XRVNUX0lOVEVSUlVQVF9QUklPUklUWSAoICggKCB1aW50MzJfdCApIGNvbmZpZ1VOSVFVRV9JTlRFUlJVUFRfUFJJT1JJVElFUyApIC0gMVVMICkNCisjZGVmaW5lIHBvcnRMT1dFU1RfVVNBQkxFX0lOVEVSUlVQVF9QUklPUklUWSAoIHBvcnRMT1dFU1RfSU5URVJSVVBUX1BSSU9SSVRZIC0gMVVMICkNCiANCiAvKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWMgb3B0aW1pc2F0aW9ucy4gKi8NCi0gICAgI2lmbmRlZiBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04NCi0gICAgICAgICNkZWZpbmUgY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OICAgIDENCi0gICAgI2VuZGlmDQorI2lmbmRlZiBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04NCisJI2RlZmluZSBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gMQ0KKyNlbmRpZg0KIA0KLSAgICAjaWYgY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OID09IDENCisjaWYgY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OID09IDENCiANCi0vKiBTdG9yZS9jbGVhciB0aGUgcmVhZHkgcHJpb3JpdGllcyBpbiBhIGJpdCBtYXAuICovDQotICAgICAgICAjZGVmaW5lIHBvcnRSRUNPUkRfUkVBRFlfUFJJT1JJVFkoIHV4UHJpb3JpdHksIHV4UmVhZHlQcmlvcml0aWVzICkgICAgKCB1eFJlYWR5UHJpb3JpdGllcyApIHw9ICggMVVMIDw8ICggdXhQcmlvcml0eSApICkNCi0gICAgICAgICNkZWZpbmUgcG9ydFJFU0VUX1JFQURZX1BSSU9SSVRZKCB1eFByaW9yaXR5LCB1eFJlYWR5UHJpb3JpdGllcyApICAgICAoIHV4UmVhZHlQcmlvcml0aWVzICkgJj0gfiggMVVMIDw8ICggdXhQcmlvcml0eSApICkNCisJLyogU3RvcmUvY2xlYXIgdGhlIHJlYWR5IHByaW9yaXRpZXMgaW4gYSBiaXQgbWFwLiAqLw0KKwkjZGVmaW5lIHBvcnRSRUNPUkRfUkVBRFlfUFJJT1JJVFkoIHV4UHJpb3JpdHksIHV4UmVhZHlQcmlvcml0aWVzICkgKCB1eFJlYWR5UHJpb3JpdGllcyApIHw9ICggMVVMIDw8ICggdXhQcmlvcml0eSApICkNCisJI2RlZmluZSBwb3J0UkVTRVRfUkVBRFlfUFJJT1JJVFkoIHV4UHJpb3JpdHksIHV4UmVhZHlQcmlvcml0aWVzICkgKCB1eFJlYWR5UHJpb3JpdGllcyApICY9IH4oIDFVTCA8PCAoIHV4UHJpb3JpdHkgKSApDQogDQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KLSAgICAgICAgI2RlZmluZSBwb3J0R0VUX0hJR0hFU1RfUFJJT1JJVFkoIHV4VG9wUHJpb3JpdHksIHV4UmVhZHlQcmlvcml0aWVzICkgICAgdXhUb3BQcmlvcml0eSA9ICggMzFVTCAtICggdWludDMyX3QgKSBfX2J1aWx0aW5fY2x6KCB1eFJlYWR5UHJpb3JpdGllcyApICkNCisJI2RlZmluZSBwb3J0R0VUX0hJR0hFU1RfUFJJT1JJVFkoIHV4VG9wUHJpb3JpdHksIHV4UmVhZHlQcmlvcml0aWVzICkgdXhUb3BQcmlvcml0eSA9ICggMzFVTCAtICggdWludDMyX3QgKSBfX2J1aWx0aW5fY2x6KCB1eFJlYWR5UHJpb3JpdGllcyApICkNCiANCi0gICAgI2VuZGlmIC8qIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiAqLw0KKyNlbmRpZiAvKiBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gKi8NCiANCi0gICAgI2lmZGVmIGNvbmZpZ0FTU0VSVA0KLSAgICAgICAgdm9pZCB2UG9ydFZhbGlkYXRlSW50ZXJydXB0UHJpb3JpdHkoIHZvaWQgKTsNCi0gICAgICAgICNkZWZpbmUgcG9ydEFTU0VSVF9JRl9JTlRFUlJVUFRfUFJJT1JJVFlfSU5WQUxJRCgpICAgIHZQb3J0VmFsaWRhdGVJbnRlcnJ1cHRQcmlvcml0eSgpDQotICAgICNlbmRpZiAvKiBjb25maWdBU1NFUlQgKi8NCisjaWZkZWYgY29uZmlnQVNTRVJUDQorCXZvaWQgdlBvcnRWYWxpZGF0ZUludGVycnVwdFByaW9yaXR5KCB2b2lkICk7DQorCSNkZWZpbmUgcG9ydEFTU0VSVF9JRl9JTlRFUlJVUFRfUFJJT1JJVFlfSU5WQUxJRCgpIAl2UG9ydFZhbGlkYXRlSW50ZXJydXB0UHJpb3JpdHkoKQ0KKyNlbmRpZiAvKiBjb25maWdBU1NFUlQgKi8NCiANCi0gICAgI2RlZmluZSBwb3J0Tk9QKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXNtIHZvbGF0aWxlICggIk5PUCIgKQ0KLSAgICAjZGVmaW5lIHBvcnRJTkxJTkUgICAgX19pbmxpbmUNCisjZGVmaW5lIHBvcnROT1AoKSBfX2FzbSB2b2xhdGlsZSggIk5PUCIgKQ0KKyNkZWZpbmUgcG9ydElOTElORSBfX2lubGluZQ0KIA0KLSAgICAjaWZkZWYgX19jcGx1c3BsdXMNCi0gICAgICAgIH0gLyogZXh0ZXJuIEMgKi8NCi0gICAgI2VuZGlmDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorCX0gLyogZXh0ZXJuIEMgKi8NCisjZW5kaWYNCiANCiANCiAvKiBUaGUgbnVtYmVyIG9mIGJpdHMgdG8gc2hpZnQgZm9yIGFuIGludGVycnVwdCBwcmlvcml0eSBpcyBkZXBlbmRlbnQgb24gdGhlDQotICogbnVtYmVyIG9mIGJpdHMgaW1wbGVtZW50ZWQgYnkgdGhlIGludGVycnVwdCBjb250cm9sbGVyLiAqLw0KLSAgICAjaWYgY29uZmlnVU5JUVVFX0lOVEVSUlVQVF9QUklPUklUSUVTID09IDE2DQotICAgICAgICAjZGVmaW5lIHBvcnRQUklPUklUWV9TSElGVCAgICAgICAgICAgIDQNCi0gICAgICAgICNkZWZpbmUgcG9ydE1BWF9CSU5BUllfUE9JTlRfVkFMVUUgICAgMw0KLSAgICAjZWxpZiBjb25maWdVTklRVUVfSU5URVJSVVBUX1BSSU9SSVRJRVMgPT0gMzINCi0gICAgICAgICNkZWZpbmUgcG9ydFBSSU9SSVRZX1NISUZUICAgICAgICAgICAgMw0KLSAgICAgICAgI2RlZmluZSBwb3J0TUFYX0JJTkFSWV9QT0lOVF9WQUxVRSAgICAyDQotICAgICNlbGlmIGNvbmZpZ1VOSVFVRV9JTlRFUlJVUFRfUFJJT1JJVElFUyA9PSA2NA0KLSAgICAgICAgI2RlZmluZSBwb3J0UFJJT1JJVFlfU0hJRlQgICAgICAgICAgICAyDQotICAgICAgICAjZGVmaW5lIHBvcnRNQVhfQklOQVJZX1BPSU5UX1ZBTFVFICAgIDENCi0gICAgI2VsaWYgY29uZmlnVU5JUVVFX0lOVEVSUlVQVF9QUklPUklUSUVTID09IDEyOA0KLSAgICAgICAgI2RlZmluZSBwb3J0UFJJT1JJVFlfU0hJRlQgICAgICAgICAgICAxDQotICAgICAgICAjZGVmaW5lIHBvcnRNQVhfQklOQVJZX1BPSU5UX1ZBTFVFICAgIDANCi0gICAgI2VsaWYgY29uZmlnVU5JUVVFX0lOVEVSUlVQVF9QUklPUklUSUVTID09IDI1Ng0KLSAgICAgICAgI2RlZmluZSBwb3J0UFJJT1JJVFlfU0hJRlQgICAgICAgICAgICAwDQotICAgICAgICAjZGVmaW5lIHBvcnRNQVhfQklOQVJZX1BPSU5UX1ZBTFVFICAgIDANCi0gICAgI2Vsc2UgLyogaWYgY29uZmlnVU5JUVVFX0lOVEVSUlVQVF9QUklPUklUSUVTID09IDE2ICovDQotICAgICAgICAjZXJyb3IgSW52YWxpZCBjb25maWdVTklRVUVfSU5URVJSVVBUX1BSSU9SSVRJRVMgc2V0dGluZy4gIGNvbmZpZ1VOSVFVRV9JTlRFUlJVUFRfUFJJT1JJVElFUyBtdXN0IGJlIHNldCB0byB0aGUgbnVtYmVyIG9mIHVuaXF1ZSBwcmlvcml0aWVzIGltcGxlbWVudGVkIGJ5IHRoZSB0YXJnZXQgaGFyZHdhcmUNCi0gICAgI2VuZGlmIC8qIGlmIGNvbmZpZ1VOSVFVRV9JTlRFUlJVUFRfUFJJT1JJVElFUyA9PSAxNiAqLw0KK251bWJlciBvZiBiaXRzIGltcGxlbWVudGVkIGJ5IHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlci4gKi8NCisjaWYgY29uZmlnVU5JUVVFX0lOVEVSUlVQVF9QUklPUklUSUVTID09IDE2DQorCSNkZWZpbmUgcG9ydFBSSU9SSVRZX1NISUZUIDQNCisJI2RlZmluZSBwb3J0TUFYX0JJTkFSWV9QT0lOVF9WQUxVRQkzDQorI2VsaWYgY29uZmlnVU5JUVVFX0lOVEVSUlVQVF9QUklPUklUSUVTID09IDMyDQorCSNkZWZpbmUgcG9ydFBSSU9SSVRZX1NISUZUIDMNCisJI2RlZmluZSBwb3J0TUFYX0JJTkFSWV9QT0lOVF9WQUxVRQkyDQorI2VsaWYgY29uZmlnVU5JUVVFX0lOVEVSUlVQVF9QUklPUklUSUVTID09IDY0DQorCSNkZWZpbmUgcG9ydFBSSU9SSVRZX1NISUZUIDINCisJI2RlZmluZSBwb3J0TUFYX0JJTkFSWV9QT0lOVF9WQUxVRQkxDQorI2VsaWYgY29uZmlnVU5JUVVFX0lOVEVSUlVQVF9QUklPUklUSUVTID09IDEyOA0KKwkjZGVmaW5lIHBvcnRQUklPUklUWV9TSElGVCAxDQorCSNkZWZpbmUgcG9ydE1BWF9CSU5BUllfUE9JTlRfVkFMVUUJMA0KKyNlbGlmIGNvbmZpZ1VOSVFVRV9JTlRFUlJVUFRfUFJJT1JJVElFUyA9PSAyNTYNCisJI2RlZmluZSBwb3J0UFJJT1JJVFlfU0hJRlQgMA0KKwkjZGVmaW5lIHBvcnRNQVhfQklOQVJZX1BPSU5UX1ZBTFVFCTANCisjZWxzZQ0KKwkjZXJyb3IgSW52YWxpZCBjb25maWdVTklRVUVfSU5URVJSVVBUX1BSSU9SSVRJRVMgc2V0dGluZy4gIGNvbmZpZ1VOSVFVRV9JTlRFUlJVUFRfUFJJT1JJVElFUyBtdXN0IGJlIHNldCB0byB0aGUgbnVtYmVyIG9mIHVuaXF1ZSBwcmlvcml0aWVzIGltcGxlbWVudGVkIGJ5IHRoZSB0YXJnZXQgaGFyZHdhcmUNCisjZW5kaWYNCiANCiAvKiBJbnRlcnJ1cHQgY29udHJvbGxlciBhY2Nlc3MgYWRkcmVzc2VzLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRJQ0NQTVJfUFJJT1JJVFlfTUFTS19PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgKCAweDA0ICkNCi0gICAgI2RlZmluZSBwb3J0SUNDSUFSX0lOVEVSUlVQVF9BQ0tOT1dMRURHRV9PRkZTRVQgICAgICAgICAgICAgICggMHgwQyApDQotICAgICNkZWZpbmUgcG9ydElDQ0VPSVJfRU5EX09GX0lOVEVSUlVQVF9PRkZTRVQgICAgICAgICAgICAgICAgICAoIDB4MTAgKQ0KLSAgICAjZGVmaW5lIHBvcnRJQ0NCUFJfQklOQVJZX1BPSU5UX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgKCAweDA4ICkNCi0gICAgI2RlZmluZSBwb3J0SUNDUlBSX1JVTk5JTkdfUFJJT1JJVFlfT0ZGU0VUICAgICAgICAgICAgICAgICAgICggMHgxNCApDQorI2RlZmluZSBwb3J0SUNDUE1SX1BSSU9SSVRZX01BU0tfT0ZGU0VUICAJCQkJCQkoIDB4MDQgKQ0KKyNkZWZpbmUgcG9ydElDQ0lBUl9JTlRFUlJVUFRfQUNLTk9XTEVER0VfT0ZGU0VUIAkJCQkoIDB4MEMgKQ0KKyNkZWZpbmUgcG9ydElDQ0VPSVJfRU5EX09GX0lOVEVSUlVQVF9PRkZTRVQgCQkJCQkoIDB4MTAgKQ0KKyNkZWZpbmUgcG9ydElDQ0JQUl9CSU5BUllfUE9JTlRfT0ZGU0VUCQkJCQkJCSggMHgwOCApDQorI2RlZmluZSBwb3J0SUNDUlBSX1JVTk5JTkdfUFJJT1JJVFlfT0ZGU0VUCQkJCQkJKCAweDE0ICkNCiANCi0gICAgI2RlZmluZSBwb3J0SU5URVJSVVBUX0NPTlRST0xMRVJfQ1BVX0lOVEVSRkFDRV9BRERSRVNTICAgICAgICggY29uZmlnSU5URVJSVVBUX0NPTlRST0xMRVJfQkFTRV9BRERSRVNTICsgY29uZmlnSU5URVJSVVBUX0NPTlRST0xMRVJfQ1BVX0lOVEVSRkFDRV9PRkZTRVQgKQ0KLSAgICAjZGVmaW5lIHBvcnRJQ0NQTVJfUFJJT1JJVFlfTUFTS19SRUdJU1RFUiAgICAgICAgICAgICAgICAgICAgKCAqKCAoIHZvbGF0aWxlIHVpbnQzMl90ICogKSAoIHBvcnRJTlRFUlJVUFRfQ09OVFJPTExFUl9DUFVfSU5URVJGQUNFX0FERFJFU1MgKyBwb3J0SUNDUE1SX1BSSU9SSVRZX01BU0tfT0ZGU0VUICkgKSApDQotICAgICNkZWZpbmUgcG9ydElDQ0lBUl9JTlRFUlJVUFRfQUNLTk9XTEVER0VfUkVHSVNURVJfQUREUkVTUyAgICAoIHBvcnRJTlRFUlJVUFRfQ09OVFJPTExFUl9DUFVfSU5URVJGQUNFX0FERFJFU1MgKyBwb3J0SUNDSUFSX0lOVEVSUlVQVF9BQ0tOT1dMRURHRV9PRkZTRVQgKQ0KLSAgICAjZGVmaW5lIHBvcnRJQ0NFT0lSX0VORF9PRl9JTlRFUlJVUFRfUkVHSVNURVJfQUREUkVTUyAgICAgICAgKCBwb3J0SU5URVJSVVBUX0NPTlRST0xMRVJfQ1BVX0lOVEVSRkFDRV9BRERSRVNTICsgcG9ydElDQ0VPSVJfRU5EX09GX0lOVEVSUlVQVF9PRkZTRVQgKQ0KLSAgICAjZGVmaW5lIHBvcnRJQ0NQTVJfUFJJT1JJVFlfTUFTS19SRUdJU1RFUl9BRERSRVNTICAgICAgICAgICAgKCBwb3J0SU5URVJSVVBUX0NPTlRST0xMRVJfQ1BVX0lOVEVSRkFDRV9BRERSRVNTICsgcG9ydElDQ1BNUl9QUklPUklUWV9NQVNLX09GRlNFVCApDQotICAgICNkZWZpbmUgcG9ydElDQ0JQUl9CSU5BUllfUE9JTlRfUkVHSVNURVIgICAgICAgICAgICAgICAgICAgICAoICooICggY29uc3Qgdm9sYXRpbGUgdWludDMyX3QgKiApICggcG9ydElOVEVSUlVQVF9DT05UUk9MTEVSX0NQVV9JTlRFUkZBQ0VfQUREUkVTUyArIHBvcnRJQ0NCUFJfQklOQVJZX1BPSU5UX09GRlNFVCApICkgKQ0KLSAgICAjZGVmaW5lIHBvcnRJQ0NSUFJfUlVOTklOR19QUklPUklUWV9SRUdJU1RFUiAgICAgICAgICAgICAgICAgKCAqKCAoIGNvbnN0IHZvbGF0aWxlIHVpbnQzMl90ICogKSAoIHBvcnRJTlRFUlJVUFRfQ09OVFJPTExFUl9DUFVfSU5URVJGQUNFX0FERFJFU1MgKyBwb3J0SUNDUlBSX1JVTk5JTkdfUFJJT1JJVFlfT0ZGU0VUICkgKSApDQorI2RlZmluZSBwb3J0SU5URVJSVVBUX0NPTlRST0xMRVJfQ1BVX0lOVEVSRkFDRV9BRERSRVNTIAkJKCBjb25maWdJTlRFUlJVUFRfQ09OVFJPTExFUl9CQVNFX0FERFJFU1MgKyBjb25maWdJTlRFUlJVUFRfQ09OVFJPTExFUl9DUFVfSU5URVJGQUNFX09GRlNFVCApDQorI2RlZmluZSBwb3J0SUNDUE1SX1BSSU9SSVRZX01BU0tfUkVHSVNURVIgCQkJCQkoICooICggdm9sYXRpbGUgdWludDMyX3QgKiApICggcG9ydElOVEVSUlVQVF9DT05UUk9MTEVSX0NQVV9JTlRFUkZBQ0VfQUREUkVTUyArIHBvcnRJQ0NQTVJfUFJJT1JJVFlfTUFTS19PRkZTRVQgKSApICkNCisjZGVmaW5lIHBvcnRJQ0NJQVJfSU5URVJSVVBUX0FDS05PV0xFREdFX1JFR0lTVEVSX0FERFJFU1MgCSggcG9ydElOVEVSUlVQVF9DT05UUk9MTEVSX0NQVV9JTlRFUkZBQ0VfQUREUkVTUyArIHBvcnRJQ0NJQVJfSU5URVJSVVBUX0FDS05PV0xFREdFX09GRlNFVCApDQorI2RlZmluZSBwb3J0SUNDRU9JUl9FTkRfT0ZfSU5URVJSVVBUX1JFR0lTVEVSX0FERFJFU1MgCQkoIHBvcnRJTlRFUlJVUFRfQ09OVFJPTExFUl9DUFVfSU5URVJGQUNFX0FERFJFU1MgKyBwb3J0SUNDRU9JUl9FTkRfT0ZfSU5URVJSVVBUX09GRlNFVCApDQorI2RlZmluZSBwb3J0SUNDUE1SX1BSSU9SSVRZX01BU0tfUkVHSVNURVJfQUREUkVTUyAJCQkoIHBvcnRJTlRFUlJVUFRfQ09OVFJPTExFUl9DUFVfSU5URVJGQUNFX0FERFJFU1MgKyBwb3J0SUNDUE1SX1BSSU9SSVRZX01BU0tfT0ZGU0VUICkNCisjZGVmaW5lIHBvcnRJQ0NCUFJfQklOQVJZX1BPSU5UX1JFR0lTVEVSIAkJCQkJKCAqKCAoIGNvbnN0IHZvbGF0aWxlIHVpbnQzMl90ICogKSAoIHBvcnRJTlRFUlJVUFRfQ09OVFJPTExFUl9DUFVfSU5URVJGQUNFX0FERFJFU1MgKyBwb3J0SUNDQlBSX0JJTkFSWV9QT0lOVF9PRkZTRVQgKSApICkNCisjZGVmaW5lIHBvcnRJQ0NSUFJfUlVOTklOR19QUklPUklUWV9SRUdJU1RFUiAJCQkJKCAqKCAoIGNvbnN0IHZvbGF0aWxlIHVpbnQzMl90ICogKSAoIHBvcnRJTlRFUlJVUFRfQ09OVFJPTExFUl9DUFVfSU5URVJGQUNFX0FERFJFU1MgKyBwb3J0SUNDUlBSX1JVTk5JTkdfUFJJT1JJVFlfT0ZGU0VUICkgKSApDQogDQotICAgICNkZWZpbmUgcG9ydE1FTU9SWV9CQVJSSUVSKCkgICAgX19hc20gdm9sYXRpbGUgKCAiIiA6OjogIm1lbW9yeSIgKQ0KKyNkZWZpbmUgcG9ydE1FTU9SWV9CQVJSSUVSKCkgX19hc20gdm9sYXRpbGUoICIiIDo6OiAibWVtb3J5IiApDQogDQogI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvR0NDL0FSTV9DTTIzL25vbl9zZWN1cmUvcG9ydC5jIGIvcG9ydGFibGUvR0NDL0FSTV9DTTIzL25vbl9zZWN1cmUvcG9ydC5jCmluZGV4IDNmMzliYzMuLjllZTI4Y2QgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0dDQy9BUk1fQ00yMy9ub25fc2VjdXJlL3BvcnQuYworKysgYi9wb3J0YWJsZS9HQ0MvQVJNX0NNMjMvbm9uX3NlY3VyZS9wb3J0LmMKQEAgLTYxMiw3ICs2MTIsNyBAQAogICAgICAgICAgICAgZXh0ZXJuIHVpbnQzMl90ICogX191bnByaXZpbGVnZWRfZmxhc2hfZW5kX187DQogICAgICAgICAgICAgZXh0ZXJuIHVpbnQzMl90ICogX19wcml2aWxlZ2VkX3NyYW1fc3RhcnRfXzsNCiAgICAgICAgICAgICBleHRlcm4gdWludDMyX3QgKiBfX3ByaXZpbGVnZWRfc3JhbV9lbmRfXzsNCi0gICAgICAgICNlbHNlICAvKiBpZiBkZWZpbmVkKCBfX0FSTUNDX1ZFUlNJT04gKSAqLw0KKyAgICAgICAgI2Vsc2UgLyogaWYgZGVmaW5lZCggX19BUk1DQ19WRVJTSU9OICkgKi8NCiAgICAgICAgICAgICAvKiBEZWNsYXJhdGlvbiB3aGVuIHRoZXNlIHZhcmlhYmxlIGFyZSBleHBvcnRlZCBmcm9tIGxpbmtlciBzY3JpcHRzLiAqLw0KICAgICAgICAgICAgIGV4dGVybiB1aW50MzJfdCBfX3ByaXZpbGVnZWRfZnVuY3Rpb25zX3N0YXJ0X19bXTsNCiAgICAgICAgICAgICBleHRlcm4gdWludDMyX3QgX19wcml2aWxlZ2VkX2Z1bmN0aW9uc19lbmRfX1tdOw0KQEAgLTgwMiwyMiArODAyLDIyIEBACiAgICAgICAgICAgICAgICAgdWxSMCA9IHB1bENhbGxlclN0YWNrQWRkcmVzc1sgMCBdOw0KIA0KICAgICAgICAgICAgICAgICAjaWYgKCBjb25maWdFTkFCTEVfTVBVID09IDEgKQ0KLSAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAvKiBSZWFkIHRoZSBDT05UUk9MIHJlZ2lzdGVyIHZhbHVlLiAqLw0KLSAgICAgICAgICAgICAgICAgICAgX19hc20gdm9sYXRpbGUgKCAibXJzICUwLCBjb250cm9sIiAgOiAiPXIiICggdWxDb250cm9sICkgKTsNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZWFkIHRoZSBDT05UUk9MIHJlZ2lzdGVyIHZhbHVlLiAqLw0KKyAgICAgICAgICAgICAgICAgICAgICAgIF9fYXNtIHZvbGF0aWxlICggIm1ycyAlMCwgY29udHJvbCIgIDogIj1yIiAoIHVsQ29udHJvbCApICk7DQogDQotICAgICAgICAgICAgICAgICAgICAvKiBUaGUgdGFzayB0aGF0IHJhaXNlZCB0aGUgU1ZDIGlzIHByaXZpbGVnZWQgaWYgQml0WzBdDQotICAgICAgICAgICAgICAgICAgICAgKiBpbiB0aGUgQ09OVFJPTCByZWdpc3RlciBpcyAwLiAqLw0KLSAgICAgICAgICAgICAgICAgICAgdWxJc1Rhc2tQcml2aWxlZ2VkID0gKCAoIHVsQ29udHJvbCAmIHBvcnRDT05UUk9MX1BSSVZJTEVHRURfTUFTSyApID09IDAgKTsNCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGUgdGFzayB0aGF0IHJhaXNlZCB0aGUgU1ZDIGlzIHByaXZpbGVnZWQgaWYgQml0WzBdDQorICAgICAgICAgICAgICAgICAgICAgICAgICogaW4gdGhlIENPTlRST0wgcmVnaXN0ZXIgaXMgMC4gKi8NCisgICAgICAgICAgICAgICAgICAgICAgICB1bElzVGFza1ByaXZpbGVnZWQgPSAoICggdWxDb250cm9sICYgcG9ydENPTlRST0xfUFJJVklMRUdFRF9NQVNLICkgPT0gMCApOw0KIA0KLSAgICAgICAgICAgICAgICAgICAgLyogQWxsb2NhdGUgYW5kIGxvYWQgYSBjb250ZXh0IGZvciB0aGUgc2VjdXJlIHRhc2suICovDQotICAgICAgICAgICAgICAgICAgICB4U2VjdXJlQ29udGV4dCA9IFNlY3VyZUNvbnRleHRfQWxsb2NhdGVDb250ZXh0KCB1bFIwLCB1bElzVGFza1ByaXZpbGVnZWQgKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAjZWxzZSAgLyogaWYgKCBjb25maWdFTkFCTEVfTVBVID09IDEgKSAqLw0KLSAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAvKiBBbGxvY2F0ZSBhbmQgbG9hZCBhIGNvbnRleHQgZm9yIHRoZSBzZWN1cmUgdGFzay4gKi8NCi0gICAgICAgICAgICAgICAgICAgIHhTZWN1cmVDb250ZXh0ID0gU2VjdXJlQ29udGV4dF9BbGxvY2F0ZUNvbnRleHQoIHVsUjAgKTsNCi0gICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFsbG9jYXRlIGFuZCBsb2FkIGEgY29udGV4dCBmb3IgdGhlIHNlY3VyZSB0YXNrLiAqLw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHhTZWN1cmVDb250ZXh0ID0gU2VjdXJlQ29udGV4dF9BbGxvY2F0ZUNvbnRleHQoIHVsUjAsIHVsSXNUYXNrUHJpdmlsZWdlZCApOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAjZWxzZSAvKiBpZiAoIGNvbmZpZ0VOQUJMRV9NUFUgPT0gMSApICovDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgLyogQWxsb2NhdGUgYW5kIGxvYWQgYSBjb250ZXh0IGZvciB0aGUgc2VjdXJlIHRhc2suICovDQorICAgICAgICAgICAgICAgICAgICAgICAgeFNlY3VyZUNvbnRleHQgPSBTZWN1cmVDb250ZXh0X0FsbG9jYXRlQ29udGV4dCggdWxSMCApOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAjZW5kaWYgLyogY29uZmlnRU5BQkxFX01QVSAqLw0KIA0KICAgICAgICAgICAgICAgICBjb25maWdBU1NFUlQoIHhTZWN1cmVDb250ZXh0ICE9IE5VTEwgKTsNCkBAIC04MzUsMjEgKzgzNSwyMSBAQAogDQogICAgICAgICBjYXNlIHBvcnRTVkNfU1RBUlRfU0NIRURVTEVSOg0KICAgICAgICAgICAgICNpZiAoIGNvbmZpZ0VOQUJMRV9UUlVTVFpPTkUgPT0gMSApDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAvKiBEZS1wcmlvcml0aXplIHRoZSBub24tc2VjdXJlIGV4Y2VwdGlvbnMgc28gdGhhdCB0aGUNCi0gICAgICAgICAgICAgICAgICogbm9uLXNlY3VyZSBwZW5kU1YgcnVucyBhdCB0aGUgbG93ZXN0IHByaW9yaXR5LiAqLw0KLSAgICAgICAgICAgICAgICBTZWN1cmVJbml0X0RlUHJpb3JpdGl6ZU5TRXhjZXB0aW9ucygpOw0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAvKiBEZS1wcmlvcml0aXplIHRoZSBub24tc2VjdXJlIGV4Y2VwdGlvbnMgc28gdGhhdCB0aGUNCisgICAgICAgICAgICAgICAgICAgICAqIG5vbi1zZWN1cmUgcGVuZFNWIHJ1bnMgYXQgdGhlIGxvd2VzdCBwcmlvcml0eS4gKi8NCisgICAgICAgICAgICAgICAgICAgIFNlY3VyZUluaXRfRGVQcmlvcml0aXplTlNFeGNlcHRpb25zKCk7DQogDQotICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgdGhlIHNlY3VyZSBjb250ZXh0IG1hbmFnZW1lbnQgc3lzdGVtLiAqLw0KLSAgICAgICAgICAgICAgICBTZWN1cmVDb250ZXh0X0luaXQoKTsNCi0gICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIHRoZSBzZWN1cmUgY29udGV4dCBtYW5hZ2VtZW50IHN5c3RlbS4gKi8NCisgICAgICAgICAgICAgICAgICAgIFNlY3VyZUNvbnRleHRfSW5pdCgpOw0KKyAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgI2VuZGlmIC8qIGNvbmZpZ0VOQUJMRV9UUlVTVFpPTkUgKi8NCiANCiAgICAgICAgICAgICAjaWYgKCBjb25maWdFTkFCTEVfRlBVID09IDEgKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgLyogU2V0dXAgdGhlIEZsb2F0aW5nIFBvaW50IFVuaXQgKEZQVSkuICovDQotICAgICAgICAgICAgICAgIHBydlNldHVwRlBVKCk7DQotICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAvKiBTZXR1cCB0aGUgRmxvYXRpbmcgUG9pbnQgVW5pdCAoRlBVKS4gKi8NCisgICAgICAgICAgICAgICAgICAgIHBydlNldHVwRlBVKCk7DQorICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAjZW5kaWYgLyogY29uZmlnRU5BQkxFX0ZQVSAqLw0KIA0KICAgICAgICAgICAgIC8qIFNldHVwIHRoZSBjb250ZXh0IG9mIHRoZSBmaXJzdCB0YXNrIHNvIHRoYXQgdGhlIGZpcnN0IHRhc2sgc3RhcnRzDQpAQCAtODgyLDEyICs4ODIsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tUeXBlX3QgKiBweEVuZE9mU3RhY2ssDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYXNrRnVuY3Rpb25fdCBweENvZGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICogcHZQYXJhbWV0ZXJzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFzZVR5cGVfdCB4UnVuUHJpdmlsZWdlZCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBSSVZJTEVHRURfRlVOQ1RJT04gKi8NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhc2VUeXBlX3QgeFJ1blByaXZpbGVnZWQgKSAvKiBQUklWSUxFR0VEX0ZVTkNUSU9OICovDQogI2Vsc2UNCiAgICAgU3RhY2tUeXBlX3QgKiBweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICogcHhUb3BPZlN0YWNrLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tUeXBlX3QgKiBweEVuZE9mU3RhY2ssDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYXNrRnVuY3Rpb25fdCBweENvZGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICogcHZQYXJhbWV0ZXJzICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUFJJVklMRUdFRF9GVU5DVElPTiAqLw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqIHB2UGFyYW1ldGVycyApIC8qIFBSSVZJTEVHRURfRlVOQ1RJT04gKi8NCiAjZW5kaWYgLyogY29uZmlnRU5BQkxFX01QVSAqLw0KIHsNCiAgICAgLyogU2ltdWxhdGUgdGhlIHN0YWNrIGZyYW1lIGFzIGl0IHdvdWxkIGJlIGNyZWF0ZWQgYnkgYSBjb250ZXh0IHN3aXRjaA0KQEAgLTEwNTEsNyArMTA1MSw5IEBACiAgICAgew0KICAgICAgICAgdWludDMyX3QgdWxSZWdpb25TdGFydEFkZHJlc3MsIHVsUmVnaW9uRW5kQWRkcmVzcywgdWxSZWdpb25OdW1iZXI7DQogICAgICAgICBpbnQzMl90IGxJbmRleCA9IDA7DQorDQogICAgICAgICAjaWYgZGVmaW5lZCggX19BUk1DQ19WRVJTSU9OICkNCisNCiAgICAgICAgICAgICAvKiBEZWNsYXJhdGlvbiB3aGVuIHRoZXNlIHZhcmlhYmxlIGFyZSBkZWZpbmVkIGluIGNvZGUgaW5zdGVhZCBvZiBiZWluZw0KICAgICAgICAgICAgICAqIGV4cG9ydGVkIGZyb20gbGlua2VyIHNjcmlwdHMuICovDQogICAgICAgICAgICAgZXh0ZXJuIHVpbnQzMl90ICogX19wcml2aWxlZ2VkX3NyYW1fc3RhcnRfXzsNCkBAIC0xMDc5LDggKzEwODEsOCBAQAogICAgICAgICAgICAgICogdXNpbmcgYSBzZXBhcmF0ZSBNUFUgcmVnaW9uLiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHByaXZpbGVnZWQNCiAgICAgICAgICAgICAgKiBTUkFNIGlzIGFscmVhZHkgcHJvdGVjdGVkIHVzaW5nIGFuIE1QVSByZWdpb24gYW5kIEFSTXY4LU0gZG9lcw0KICAgICAgICAgICAgICAqIG5vdCBhbGxvdyBvdmVybGFwcGluZyBNUFUgcmVnaW9ucy4gKi8NCi0gICAgICAgICAgICBpZiggdWxSZWdpb25TdGFydEFkZHJlc3MgPj0gKCB1aW50MzJfdCApIF9fcHJpdmlsZWdlZF9zcmFtX3N0YXJ0X18gJiYNCi0gICAgICAgICAgICAgICAgdWxSZWdpb25FbmRBZGRyZXNzIDw9ICggdWludDMyX3QgKSBfX3ByaXZpbGVnZWRfc3JhbV9lbmRfXyApDQorICAgICAgICAgICAgaWYoICggdWxSZWdpb25TdGFydEFkZHJlc3MgPj0gKCB1aW50MzJfdCApIF9fcHJpdmlsZWdlZF9zcmFtX3N0YXJ0X18gKSAmJg0KKyAgICAgICAgICAgICAgICAoIHVsUmVnaW9uRW5kQWRkcmVzcyA8PSAoIHVpbnQzMl90ICkgX19wcml2aWxlZ2VkX3NyYW1fZW5kX18gKSApDQogICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICB4TVBVU2V0dGluZ3MtPnhSZWdpb25zU2V0dGluZ3NbIDAgXS51bFJCQVIgPSAwOw0KICAgICAgICAgICAgICAgICB4TVBVU2V0dGluZ3MtPnhSZWdpb25zU2V0dGluZ3NbIDAgXS51bFJMQVIgPSAwOw0KQEAgLTEwODksNyArMTA5MSw3IEBACiAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgIC8qIERlZmluZSB0aGUgcmVnaW9uIHRoYXQgYWxsb3dzIGFjY2VzcyB0byB0aGUgc3RhY2suICovDQogICAgICAgICAgICAgICAgIHVsUmVnaW9uU3RhcnRBZGRyZXNzICY9IHBvcnRNUFVfUkJBUl9BRERSRVNTX01BU0s7DQotICAgICAgICAgICAgICAgIHVsUmVnaW9uRW5kQWRkcmVzcyAgJj0gcG9ydE1QVV9STEFSX0FERFJFU1NfTUFTSzsNCisgICAgICAgICAgICAgICAgdWxSZWdpb25FbmRBZGRyZXNzICY9IHBvcnRNUFVfUkxBUl9BRERSRVNTX01BU0s7DQogDQogICAgICAgICAgICAgICAgIHhNUFVTZXR0aW5ncy0+eFJlZ2lvbnNTZXR0aW5nc1sgMCBdLnVsUkJBUiA9ICggdWxSZWdpb25TdGFydEFkZHJlc3MgKSB8DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggcG9ydE1QVV9SRUdJT05fTk9OX1NIQVJFQUJMRSApIHwNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9HQ0MvQVJNX0NNMjNfTlRaL25vbl9zZWN1cmUvcG9ydC5jIGIvcG9ydGFibGUvR0NDL0FSTV9DTTIzX05UWi9ub25fc2VjdXJlL3BvcnQuYwppbmRleCAzZjM5YmMzLi40ZDQ4M2Q0IDEwMDY0NAotLS0gYS9wb3J0YWJsZS9HQ0MvQVJNX0NNMjNfTlRaL25vbl9zZWN1cmUvcG9ydC5jCisrKyBiL3BvcnRhYmxlL0dDQy9BUk1fQ00yM19OVFovbm9uX3NlY3VyZS9wb3J0LmMKQEAgLTU1LDEzICs1NSwxMyBAQAogICogb24gdGhlIHNlY3VyZSBzaWRlLiBUaGUgZm9sbG93aW5nIGFyZSB0aGUgdmFsaWQgY29uZmlndXJhdGlvbiBzZWV0aW5nczoNCiAgKg0KICAqIDEuIFJ1biBGcmVlUlRPUyBvbiB0aGUgU2VjdXJlIFNpZGU6DQotICoJCWNvbmZpZ1JVTl9GUkVFUlRPU19TRUNVUkVfT05MWSA9IDEgYW5kIGNvbmZpZ0VOQUJMRV9UUlVTVFpPTkUgPSAwDQorICogICAgICBjb25maWdSVU5fRlJFRVJUT1NfU0VDVVJFX09OTFkgPSAxIGFuZCBjb25maWdFTkFCTEVfVFJVU1RaT05FID0gMA0KICAqDQogICogMi4gUnVuIEZyZWVSVE9TIG9uIHRoZSBOb24tU2VjdXJlIFNpZGUgd2l0aCBTZWN1cmUgU2lkZSBmdW5jdGlvbiBjYWxsIHN1cHBvcnQ6DQotICoJCWNvbmZpZ1JVTl9GUkVFUlRPU19TRUNVUkVfT05MWSA9IDAgYW5kIGNvbmZpZ0VOQUJMRV9UUlVTVFpPTkUgPSAxDQorICogICAgICBjb25maWdSVU5fRlJFRVJUT1NfU0VDVVJFX09OTFkgPSAwIGFuZCBjb25maWdFTkFCTEVfVFJVU1RaT05FID0gMQ0KICAqDQogICogMy4gUnVuIEZyZWVSVE9TIG9uIHRoZSBOb24tU2VjdXJlIFNpZGUgb25seSBpLmUuIG5vIFNlY3VyZSBTaWRlIGZ1bmN0aW9uIGNhbGwgc3VwcG9ydDoNCi0gKgkJY29uZmlnUlVOX0ZSRUVSVE9TX1NFQ1VSRV9PTkxZID0gMCBhbmQgY29uZmlnRU5BQkxFX1RSVVNUWk9ORSA9IDANCisgKiAgICAgIGNvbmZpZ1JVTl9GUkVFUlRPU19TRUNVUkVfT05MWSA9IDAgYW5kIGNvbmZpZ0VOQUJMRV9UUlVTVFpPTkUgPSAwDQogICovDQogI2lmICggKCBjb25maWdSVU5fRlJFRVJUT1NfU0VDVVJFX09OTFkgPT0gMSApICYmICggY29uZmlnRU5BQkxFX1RSVVNUWk9ORSA9PSAxICkgKQ0KICAgICAjZXJyb3IgVHJ1c3Rab25lIG5lZWRzIHRvIGJlIGRpc2FibGVkIGluIG9yZGVyIHRvIHJ1biBGcmVlUlRPUyBvbiB0aGUgU2VjdXJlIFNpZGUuDQpAQCAtNjEyLDcgKzYxMiw3IEBACiAgICAgICAgICAgICBleHRlcm4gdWludDMyX3QgKiBfX3VucHJpdmlsZWdlZF9mbGFzaF9lbmRfXzsNCiAgICAgICAgICAgICBleHRlcm4gdWludDMyX3QgKiBfX3ByaXZpbGVnZWRfc3JhbV9zdGFydF9fOw0KICAgICAgICAgICAgIGV4dGVybiB1aW50MzJfdCAqIF9fcHJpdmlsZWdlZF9zcmFtX2VuZF9fOw0KLSAgICAgICAgI2Vsc2UgIC8qIGlmIGRlZmluZWQoIF9fQVJNQ0NfVkVSU0lPTiApICovDQorICAgICAgICAjZWxzZSAvKiBpZiBkZWZpbmVkKCBfX0FSTUNDX1ZFUlNJT04gKSAqLw0KICAgICAgICAgICAgIC8qIERlY2xhcmF0aW9uIHdoZW4gdGhlc2UgdmFyaWFibGUgYXJlIGV4cG9ydGVkIGZyb20gbGlua2VyIHNjcmlwdHMuICovDQogICAgICAgICAgICAgZXh0ZXJuIHVpbnQzMl90IF9fcHJpdmlsZWdlZF9mdW5jdGlvbnNfc3RhcnRfX1tdOw0KICAgICAgICAgICAgIGV4dGVybiB1aW50MzJfdCBfX3ByaXZpbGVnZWRfZnVuY3Rpb25zX2VuZF9fW107DQpAQCAtODAyLDIyICs4MDIsMjIgQEAKICAgICAgICAgICAgICAgICB1bFIwID0gcHVsQ2FsbGVyU3RhY2tBZGRyZXNzWyAwIF07DQogDQogICAgICAgICAgICAgICAgICNpZiAoIGNvbmZpZ0VOQUJMRV9NUFUgPT0gMSApDQotICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgIC8qIFJlYWQgdGhlIENPTlRST0wgcmVnaXN0ZXIgdmFsdWUuICovDQotICAgICAgICAgICAgICAgICAgICBfX2FzbSB2b2xhdGlsZSAoICJtcnMgJTAsIGNvbnRyb2wiICA6ICI9ciIgKCB1bENvbnRyb2wgKSApOw0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlYWQgdGhlIENPTlRST0wgcmVnaXN0ZXIgdmFsdWUuICovDQorICAgICAgICAgICAgICAgICAgICAgICAgX19hc20gdm9sYXRpbGUgKCAibXJzICUwLCBjb250cm9sIiAgOiAiPXIiICggdWxDb250cm9sICkgKTsNCiANCi0gICAgICAgICAgICAgICAgICAgIC8qIFRoZSB0YXNrIHRoYXQgcmFpc2VkIHRoZSBTVkMgaXMgcHJpdmlsZWdlZCBpZiBCaXRbMF0NCi0gICAgICAgICAgICAgICAgICAgICAqIGluIHRoZSBDT05UUk9MIHJlZ2lzdGVyIGlzIDAuICovDQotICAgICAgICAgICAgICAgICAgICB1bElzVGFza1ByaXZpbGVnZWQgPSAoICggdWxDb250cm9sICYgcG9ydENPTlRST0xfUFJJVklMRUdFRF9NQVNLICkgPT0gMCApOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZSB0YXNrIHRoYXQgcmFpc2VkIHRoZSBTVkMgaXMgcHJpdmlsZWdlZCBpZiBCaXRbMF0NCisgICAgICAgICAgICAgICAgICAgICAgICAgKiBpbiB0aGUgQ09OVFJPTCByZWdpc3RlciBpcyAwLiAqLw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHVsSXNUYXNrUHJpdmlsZWdlZCA9ICggKCB1bENvbnRyb2wgJiBwb3J0Q09OVFJPTF9QUklWSUxFR0VEX01BU0sgKSA9PSAwICk7DQogDQotICAgICAgICAgICAgICAgICAgICAvKiBBbGxvY2F0ZSBhbmQgbG9hZCBhIGNvbnRleHQgZm9yIHRoZSBzZWN1cmUgdGFzay4gKi8NCi0gICAgICAgICAgICAgICAgICAgIHhTZWN1cmVDb250ZXh0ID0gU2VjdXJlQ29udGV4dF9BbGxvY2F0ZUNvbnRleHQoIHVsUjAsIHVsSXNUYXNrUHJpdmlsZWdlZCApOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICNlbHNlICAvKiBpZiAoIGNvbmZpZ0VOQUJMRV9NUFUgPT0gMSApICovDQotICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgIC8qIEFsbG9jYXRlIGFuZCBsb2FkIGEgY29udGV4dCBmb3IgdGhlIHNlY3VyZSB0YXNrLiAqLw0KLSAgICAgICAgICAgICAgICAgICAgeFNlY3VyZUNvbnRleHQgPSBTZWN1cmVDb250ZXh0X0FsbG9jYXRlQ29udGV4dCggdWxSMCApOw0KLSAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICAgICAgLyogQWxsb2NhdGUgYW5kIGxvYWQgYSBjb250ZXh0IGZvciB0aGUgc2VjdXJlIHRhc2suICovDQorICAgICAgICAgICAgICAgICAgICAgICAgeFNlY3VyZUNvbnRleHQgPSBTZWN1cmVDb250ZXh0X0FsbG9jYXRlQ29udGV4dCggdWxSMCwgdWxJc1Rhc2tQcml2aWxlZ2VkICk7DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICNlbHNlIC8qIGlmICggY29uZmlnRU5BQkxFX01QVSA9PSAxICkgKi8NCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBBbGxvY2F0ZSBhbmQgbG9hZCBhIGNvbnRleHQgZm9yIHRoZSBzZWN1cmUgdGFzay4gKi8NCisgICAgICAgICAgICAgICAgICAgICAgICB4U2VjdXJlQ29udGV4dCA9IFNlY3VyZUNvbnRleHRfQWxsb2NhdGVDb250ZXh0KCB1bFIwICk7DQorICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICNlbmRpZiAvKiBjb25maWdFTkFCTEVfTVBVICovDQogDQogICAgICAgICAgICAgICAgIGNvbmZpZ0FTU0VSVCggeFNlY3VyZUNvbnRleHQgIT0gTlVMTCApOw0KQEAgLTgzNSwyMSArODM1LDIxIEBACiANCiAgICAgICAgIGNhc2UgcG9ydFNWQ19TVEFSVF9TQ0hFRFVMRVI6DQogICAgICAgICAgICAgI2lmICggY29uZmlnRU5BQkxFX1RSVVNUWk9ORSA9PSAxICkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIC8qIERlLXByaW9yaXRpemUgdGhlIG5vbi1zZWN1cmUgZXhjZXB0aW9ucyBzbyB0aGF0IHRoZQ0KLSAgICAgICAgICAgICAgICAgKiBub24tc2VjdXJlIHBlbmRTViBydW5zIGF0IHRoZSBsb3dlc3QgcHJpb3JpdHkuICovDQotICAgICAgICAgICAgICAgIFNlY3VyZUluaXRfRGVQcmlvcml0aXplTlNFeGNlcHRpb25zKCk7DQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIC8qIERlLXByaW9yaXRpemUgdGhlIG5vbi1zZWN1cmUgZXhjZXB0aW9ucyBzbyB0aGF0IHRoZQ0KKyAgICAgICAgICAgICAgICAgICAgICogbm9uLXNlY3VyZSBwZW5kU1YgcnVucyBhdCB0aGUgbG93ZXN0IHByaW9yaXR5LiAqLw0KKyAgICAgICAgICAgICAgICAgICAgU2VjdXJlSW5pdF9EZVByaW9yaXRpemVOU0V4Y2VwdGlvbnMoKTsNCiANCi0gICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSB0aGUgc2VjdXJlIGNvbnRleHQgbWFuYWdlbWVudCBzeXN0ZW0uICovDQotICAgICAgICAgICAgICAgIFNlY3VyZUNvbnRleHRfSW5pdCgpOw0KLSAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgdGhlIHNlY3VyZSBjb250ZXh0IG1hbmFnZW1lbnQgc3lzdGVtLiAqLw0KKyAgICAgICAgICAgICAgICAgICAgU2VjdXJlQ29udGV4dF9Jbml0KCk7DQorICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAjZW5kaWYgLyogY29uZmlnRU5BQkxFX1RSVVNUWk9ORSAqLw0KIA0KICAgICAgICAgICAgICNpZiAoIGNvbmZpZ0VOQUJMRV9GUFUgPT0gMSApDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAvKiBTZXR1cCB0aGUgRmxvYXRpbmcgUG9pbnQgVW5pdCAoRlBVKS4gKi8NCi0gICAgICAgICAgICAgICAgcHJ2U2V0dXBGUFUoKTsNCi0gICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIC8qIFNldHVwIHRoZSBGbG9hdGluZyBQb2ludCBVbml0IChGUFUpLiAqLw0KKyAgICAgICAgICAgICAgICAgICAgcHJ2U2V0dXBGUFUoKTsNCisgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICNlbmRpZiAvKiBjb25maWdFTkFCTEVfRlBVICovDQogDQogICAgICAgICAgICAgLyogU2V0dXAgdGhlIGNvbnRleHQgb2YgdGhlIGZpcnN0IHRhc2sgc28gdGhhdCB0aGUgZmlyc3QgdGFzayBzdGFydHMNCkBAIC04NzcsMTggKzg3NywyMCBAQAogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KKy8qICpJTkRFTlQtT0ZGKiAqLw0KICNpZiAoIGNvbmZpZ0VOQUJMRV9NUFUgPT0gMSApDQogICAgIFN0YWNrVHlwZV90ICogcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqIHB4VG9wT2ZTdGFjaywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrVHlwZV90ICogcHhFbmRPZlN0YWNrLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFza0Z1bmN0aW9uX3QgcHhDb2RlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqIHB2UGFyYW1ldGVycywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhc2VUeXBlX3QgeFJ1blByaXZpbGVnZWQgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQUklWSUxFR0VEX0ZVTkNUSU9OICovDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYXNlVHlwZV90IHhSdW5Qcml2aWxlZ2VkICkgLyogUFJJVklMRUdFRF9GVU5DVElPTiAqLw0KICNlbHNlDQogICAgIFN0YWNrVHlwZV90ICogcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqIHB4VG9wT2ZTdGFjaywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrVHlwZV90ICogcHhFbmRPZlN0YWNrLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFza0Z1bmN0aW9uX3QgcHhDb2RlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqIHB2UGFyYW1ldGVycyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBSSVZJTEVHRURfRlVOQ1RJT04gKi8NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiBwdlBhcmFtZXRlcnMgKSAvKiBQUklWSUxFR0VEX0ZVTkNUSU9OICovDQogI2VuZGlmIC8qIGNvbmZpZ0VOQUJMRV9NUFUgKi8NCisvKiAqSU5ERU5ULU9OKiAqLw0KIHsNCiAgICAgLyogU2ltdWxhdGUgdGhlIHN0YWNrIGZyYW1lIGFzIGl0IHdvdWxkIGJlIGNyZWF0ZWQgYnkgYSBjb250ZXh0IHN3aXRjaA0KICAgICAgKiBpbnRlcnJ1cHQuICovDQpAQCAtMTA1MSw3ICsxMDUzLDkgQEAKICAgICB7DQogICAgICAgICB1aW50MzJfdCB1bFJlZ2lvblN0YXJ0QWRkcmVzcywgdWxSZWdpb25FbmRBZGRyZXNzLCB1bFJlZ2lvbk51bWJlcjsNCiAgICAgICAgIGludDMyX3QgbEluZGV4ID0gMDsNCisNCiAgICAgICAgICNpZiBkZWZpbmVkKCBfX0FSTUNDX1ZFUlNJT04gKQ0KKw0KICAgICAgICAgICAgIC8qIERlY2xhcmF0aW9uIHdoZW4gdGhlc2UgdmFyaWFibGUgYXJlIGRlZmluZWQgaW4gY29kZSBpbnN0ZWFkIG9mIGJlaW5nDQogICAgICAgICAgICAgICogZXhwb3J0ZWQgZnJvbSBsaW5rZXIgc2NyaXB0cy4gKi8NCiAgICAgICAgICAgICBleHRlcm4gdWludDMyX3QgKiBfX3ByaXZpbGVnZWRfc3JhbV9zdGFydF9fOw0KQEAgLTEwNzksOCArMTA4Myw4IEBACiAgICAgICAgICAgICAgKiB1c2luZyBhIHNlcGFyYXRlIE1QVSByZWdpb24uIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2UgcHJpdmlsZWdlZA0KICAgICAgICAgICAgICAqIFNSQU0gaXMgYWxyZWFkeSBwcm90ZWN0ZWQgdXNpbmcgYW4gTVBVIHJlZ2lvbiBhbmQgQVJNdjgtTSBkb2VzDQogICAgICAgICAgICAgICogbm90IGFsbG93IG92ZXJsYXBwaW5nIE1QVSByZWdpb25zLiAqLw0KLSAgICAgICAgICAgIGlmKCB1bFJlZ2lvblN0YXJ0QWRkcmVzcyA+PSAoIHVpbnQzMl90ICkgX19wcml2aWxlZ2VkX3NyYW1fc3RhcnRfXyAmJg0KLSAgICAgICAgICAgICAgICB1bFJlZ2lvbkVuZEFkZHJlc3MgPD0gKCB1aW50MzJfdCApIF9fcHJpdmlsZWdlZF9zcmFtX2VuZF9fICkNCisgICAgICAgICAgICBpZiggKCB1bFJlZ2lvblN0YXJ0QWRkcmVzcyA+PSAoIHVpbnQzMl90ICkgX19wcml2aWxlZ2VkX3NyYW1fc3RhcnRfXyApICYmDQorICAgICAgICAgICAgICAgICggdWxSZWdpb25FbmRBZGRyZXNzIDw9ICggdWludDMyX3QgKSBfX3ByaXZpbGVnZWRfc3JhbV9lbmRfXyApICkNCiAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgIHhNUFVTZXR0aW5ncy0+eFJlZ2lvbnNTZXR0aW5nc1sgMCBdLnVsUkJBUiA9IDA7DQogICAgICAgICAgICAgICAgIHhNUFVTZXR0aW5ncy0+eFJlZ2lvbnNTZXR0aW5nc1sgMCBdLnVsUkxBUiA9IDA7DQpAQCAtMTA4OSw3ICsxMDkzLDcgQEAKICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgLyogRGVmaW5lIHRoZSByZWdpb24gdGhhdCBhbGxvd3MgYWNjZXNzIHRvIHRoZSBzdGFjay4gKi8NCiAgICAgICAgICAgICAgICAgdWxSZWdpb25TdGFydEFkZHJlc3MgJj0gcG9ydE1QVV9SQkFSX0FERFJFU1NfTUFTSzsNCi0gICAgICAgICAgICAgICAgdWxSZWdpb25FbmRBZGRyZXNzICAmPSBwb3J0TVBVX1JMQVJfQUREUkVTU19NQVNLOw0KKyAgICAgICAgICAgICAgICB1bFJlZ2lvbkVuZEFkZHJlc3MgJj0gcG9ydE1QVV9STEFSX0FERFJFU1NfTUFTSzsNCiANCiAgICAgICAgICAgICAgICAgeE1QVVNldHRpbmdzLT54UmVnaW9uc1NldHRpbmdzWyAwIF0udWxSQkFSID0gKCB1bFJlZ2lvblN0YXJ0QWRkcmVzcyApIHwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBwb3J0TVBVX1JFR0lPTl9OT05fU0hBUkVBQkxFICkgfA0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0dDQy9BUk1fQ00zMy9ub25fc2VjdXJlL3BvcnQuYyBiL3BvcnRhYmxlL0dDQy9BUk1fQ00zMy9ub25fc2VjdXJlL3BvcnQuYwppbmRleCAzZjM5YmMzLi5lMGEwYzdlIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9HQ0MvQVJNX0NNMzMvbm9uX3NlY3VyZS9wb3J0LmMKKysrIGIvcG9ydGFibGUvR0NDL0FSTV9DTTMzL25vbl9zZWN1cmUvcG9ydC5jCkBAIC02MTIsNyArNjEyLDcgQEAKICAgICAgICAgICAgIGV4dGVybiB1aW50MzJfdCAqIF9fdW5wcml2aWxlZ2VkX2ZsYXNoX2VuZF9fOw0KICAgICAgICAgICAgIGV4dGVybiB1aW50MzJfdCAqIF9fcHJpdmlsZWdlZF9zcmFtX3N0YXJ0X187DQogICAgICAgICAgICAgZXh0ZXJuIHVpbnQzMl90ICogX19wcml2aWxlZ2VkX3NyYW1fZW5kX187DQotICAgICAgICAjZWxzZSAgLyogaWYgZGVmaW5lZCggX19BUk1DQ19WRVJTSU9OICkgKi8NCisgICAgICAgICNlbHNlIC8qIGlmIGRlZmluZWQoIF9fQVJNQ0NfVkVSU0lPTiApICovDQogICAgICAgICAgICAgLyogRGVjbGFyYXRpb24gd2hlbiB0aGVzZSB2YXJpYWJsZSBhcmUgZXhwb3J0ZWQgZnJvbSBsaW5rZXIgc2NyaXB0cy4gKi8NCiAgICAgICAgICAgICBleHRlcm4gdWludDMyX3QgX19wcml2aWxlZ2VkX2Z1bmN0aW9uc19zdGFydF9fW107DQogICAgICAgICAgICAgZXh0ZXJuIHVpbnQzMl90IF9fcHJpdmlsZWdlZF9mdW5jdGlvbnNfZW5kX19bXTsNCkBAIC04MDIsMjIgKzgwMiwyMiBAQAogICAgICAgICAgICAgICAgIHVsUjAgPSBwdWxDYWxsZXJTdGFja0FkZHJlc3NbIDAgXTsNCiANCiAgICAgICAgICAgICAgICAgI2lmICggY29uZmlnRU5BQkxFX01QVSA9PSAxICkNCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgLyogUmVhZCB0aGUgQ09OVFJPTCByZWdpc3RlciB2YWx1ZS4gKi8NCi0gICAgICAgICAgICAgICAgICAgIF9fYXNtIHZvbGF0aWxlICggIm1ycyAlMCwgY29udHJvbCIgIDogIj1yIiAoIHVsQ29udHJvbCApICk7DQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVhZCB0aGUgQ09OVFJPTCByZWdpc3RlciB2YWx1ZS4gKi8NCisgICAgICAgICAgICAgICAgICAgICAgICBfX2FzbSB2b2xhdGlsZSAoICJtcnMgJTAsIGNvbnRyb2wiICA6ICI9ciIgKCB1bENvbnRyb2wgKSApOw0KIA0KLSAgICAgICAgICAgICAgICAgICAgLyogVGhlIHRhc2sgdGhhdCByYWlzZWQgdGhlIFNWQyBpcyBwcml2aWxlZ2VkIGlmIEJpdFswXQ0KLSAgICAgICAgICAgICAgICAgICAgICogaW4gdGhlIENPTlRST0wgcmVnaXN0ZXIgaXMgMC4gKi8NCi0gICAgICAgICAgICAgICAgICAgIHVsSXNUYXNrUHJpdmlsZWdlZCA9ICggKCB1bENvbnRyb2wgJiBwb3J0Q09OVFJPTF9QUklWSUxFR0VEX01BU0sgKSA9PSAwICk7DQorICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhlIHRhc2sgdGhhdCByYWlzZWQgdGhlIFNWQyBpcyBwcml2aWxlZ2VkIGlmIEJpdFswXQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAqIGluIHRoZSBDT05UUk9MIHJlZ2lzdGVyIGlzIDAuICovDQorICAgICAgICAgICAgICAgICAgICAgICAgdWxJc1Rhc2tQcml2aWxlZ2VkID0gKCAoIHVsQ29udHJvbCAmIHBvcnRDT05UUk9MX1BSSVZJTEVHRURfTUFTSyApID09IDAgKTsNCiANCi0gICAgICAgICAgICAgICAgICAgIC8qIEFsbG9jYXRlIGFuZCBsb2FkIGEgY29udGV4dCBmb3IgdGhlIHNlY3VyZSB0YXNrLiAqLw0KLSAgICAgICAgICAgICAgICAgICAgeFNlY3VyZUNvbnRleHQgPSBTZWN1cmVDb250ZXh0X0FsbG9jYXRlQ29udGV4dCggdWxSMCwgdWxJc1Rhc2tQcml2aWxlZ2VkICk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgI2Vsc2UgIC8qIGlmICggY29uZmlnRU5BQkxFX01QVSA9PSAxICkgKi8NCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgLyogQWxsb2NhdGUgYW5kIGxvYWQgYSBjb250ZXh0IGZvciB0aGUgc2VjdXJlIHRhc2suICovDQotICAgICAgICAgICAgICAgICAgICB4U2VjdXJlQ29udGV4dCA9IFNlY3VyZUNvbnRleHRfQWxsb2NhdGVDb250ZXh0KCB1bFIwICk7DQotICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBBbGxvY2F0ZSBhbmQgbG9hZCBhIGNvbnRleHQgZm9yIHRoZSBzZWN1cmUgdGFzay4gKi8NCisgICAgICAgICAgICAgICAgICAgICAgICB4U2VjdXJlQ29udGV4dCA9IFNlY3VyZUNvbnRleHRfQWxsb2NhdGVDb250ZXh0KCB1bFIwLCB1bElzVGFza1ByaXZpbGVnZWQgKTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgI2Vsc2UgLyogaWYgKCBjb25maWdFTkFCTEVfTVBVID09IDEgKSAqLw0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFsbG9jYXRlIGFuZCBsb2FkIGEgY29udGV4dCBmb3IgdGhlIHNlY3VyZSB0YXNrLiAqLw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHhTZWN1cmVDb250ZXh0ID0gU2VjdXJlQ29udGV4dF9BbGxvY2F0ZUNvbnRleHQoIHVsUjAgKTsNCisgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgI2VuZGlmIC8qIGNvbmZpZ0VOQUJMRV9NUFUgKi8NCiANCiAgICAgICAgICAgICAgICAgY29uZmlnQVNTRVJUKCB4U2VjdXJlQ29udGV4dCAhPSBOVUxMICk7DQpAQCAtODM1LDIxICs4MzUsMjEgQEAKIA0KICAgICAgICAgY2FzZSBwb3J0U1ZDX1NUQVJUX1NDSEVEVUxFUjoNCiAgICAgICAgICAgICAjaWYgKCBjb25maWdFTkFCTEVfVFJVU1RaT05FID09IDEgKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgLyogRGUtcHJpb3JpdGl6ZSB0aGUgbm9uLXNlY3VyZSBleGNlcHRpb25zIHNvIHRoYXQgdGhlDQotICAgICAgICAgICAgICAgICAqIG5vbi1zZWN1cmUgcGVuZFNWIHJ1bnMgYXQgdGhlIGxvd2VzdCBwcmlvcml0eS4gKi8NCi0gICAgICAgICAgICAgICAgU2VjdXJlSW5pdF9EZVByaW9yaXRpemVOU0V4Y2VwdGlvbnMoKTsNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgLyogRGUtcHJpb3JpdGl6ZSB0aGUgbm9uLXNlY3VyZSBleGNlcHRpb25zIHNvIHRoYXQgdGhlDQorICAgICAgICAgICAgICAgICAgICAgKiBub24tc2VjdXJlIHBlbmRTViBydW5zIGF0IHRoZSBsb3dlc3QgcHJpb3JpdHkuICovDQorICAgICAgICAgICAgICAgICAgICBTZWN1cmVJbml0X0RlUHJpb3JpdGl6ZU5TRXhjZXB0aW9ucygpOw0KIA0KLSAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIHRoZSBzZWN1cmUgY29udGV4dCBtYW5hZ2VtZW50IHN5c3RlbS4gKi8NCi0gICAgICAgICAgICAgICAgU2VjdXJlQ29udGV4dF9Jbml0KCk7DQotICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSB0aGUgc2VjdXJlIGNvbnRleHQgbWFuYWdlbWVudCBzeXN0ZW0uICovDQorICAgICAgICAgICAgICAgICAgICBTZWN1cmVDb250ZXh0X0luaXQoKTsNCisgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICNlbmRpZiAvKiBjb25maWdFTkFCTEVfVFJVU1RaT05FICovDQogDQogICAgICAgICAgICAgI2lmICggY29uZmlnRU5BQkxFX0ZQVSA9PSAxICkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIC8qIFNldHVwIHRoZSBGbG9hdGluZyBQb2ludCBVbml0IChGUFUpLiAqLw0KLSAgICAgICAgICAgICAgICBwcnZTZXR1cEZQVSgpOw0KLSAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgLyogU2V0dXAgdGhlIEZsb2F0aW5nIFBvaW50IFVuaXQgKEZQVSkuICovDQorICAgICAgICAgICAgICAgICAgICBwcnZTZXR1cEZQVSgpOw0KKyAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgI2VuZGlmIC8qIGNvbmZpZ0VOQUJMRV9GUFUgKi8NCiANCiAgICAgICAgICAgICAvKiBTZXR1cCB0aGUgY29udGV4dCBvZiB0aGUgZmlyc3QgdGFzayBzbyB0aGF0IHRoZSBmaXJzdCB0YXNrIHN0YXJ0cw0KQEAgLTg3NywxOCArODc3LDIwIEBACiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQorLyogKklOREVOVC1PRkYqICovDQogI2lmICggY29uZmlnRU5BQkxFX01QVSA9PSAxICkNCiAgICAgU3RhY2tUeXBlX3QgKiBweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICogcHhUb3BPZlN0YWNrLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tUeXBlX3QgKiBweEVuZE9mU3RhY2ssDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYXNrRnVuY3Rpb25fdCBweENvZGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICogcHZQYXJhbWV0ZXJzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFzZVR5cGVfdCB4UnVuUHJpdmlsZWdlZCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBSSVZJTEVHRURfRlVOQ1RJT04gKi8NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhc2VUeXBlX3QgeFJ1blByaXZpbGVnZWQgKSAvKiBQUklWSUxFR0VEX0ZVTkNUSU9OICovDQogI2Vsc2UNCiAgICAgU3RhY2tUeXBlX3QgKiBweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICogcHhUb3BPZlN0YWNrLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tUeXBlX3QgKiBweEVuZE9mU3RhY2ssDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYXNrRnVuY3Rpb25fdCBweENvZGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICogcHZQYXJhbWV0ZXJzICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUFJJVklMRUdFRF9GVU5DVElPTiAqLw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqIHB2UGFyYW1ldGVycyApIC8qIFBSSVZJTEVHRURfRlVOQ1RJT04gKi8NCiAjZW5kaWYgLyogY29uZmlnRU5BQkxFX01QVSAqLw0KKy8qICpJTkRFTlQtT04qICovDQogew0KICAgICAvKiBTaW11bGF0ZSB0aGUgc3RhY2sgZnJhbWUgYXMgaXQgd291bGQgYmUgY3JlYXRlZCBieSBhIGNvbnRleHQgc3dpdGNoDQogICAgICAqIGludGVycnVwdC4gKi8NCkBAIC0xMDUxLDcgKzEwNTMsOSBAQAogICAgIHsNCiAgICAgICAgIHVpbnQzMl90IHVsUmVnaW9uU3RhcnRBZGRyZXNzLCB1bFJlZ2lvbkVuZEFkZHJlc3MsIHVsUmVnaW9uTnVtYmVyOw0KICAgICAgICAgaW50MzJfdCBsSW5kZXggPSAwOw0KKw0KICAgICAgICAgI2lmIGRlZmluZWQoIF9fQVJNQ0NfVkVSU0lPTiApDQorDQogICAgICAgICAgICAgLyogRGVjbGFyYXRpb24gd2hlbiB0aGVzZSB2YXJpYWJsZSBhcmUgZGVmaW5lZCBpbiBjb2RlIGluc3RlYWQgb2YgYmVpbmcNCiAgICAgICAgICAgICAgKiBleHBvcnRlZCBmcm9tIGxpbmtlciBzY3JpcHRzLiAqLw0KICAgICAgICAgICAgIGV4dGVybiB1aW50MzJfdCAqIF9fcHJpdmlsZWdlZF9zcmFtX3N0YXJ0X187DQpAQCAtMTA3OSw4ICsxMDgzLDggQEAKICAgICAgICAgICAgICAqIHVzaW5nIGEgc2VwYXJhdGUgTVBVIHJlZ2lvbi4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBwcml2aWxlZ2VkDQogICAgICAgICAgICAgICogU1JBTSBpcyBhbHJlYWR5IHByb3RlY3RlZCB1c2luZyBhbiBNUFUgcmVnaW9uIGFuZCBBUk12OC1NIGRvZXMNCiAgICAgICAgICAgICAgKiBub3QgYWxsb3cgb3ZlcmxhcHBpbmcgTVBVIHJlZ2lvbnMuICovDQotICAgICAgICAgICAgaWYoIHVsUmVnaW9uU3RhcnRBZGRyZXNzID49ICggdWludDMyX3QgKSBfX3ByaXZpbGVnZWRfc3JhbV9zdGFydF9fICYmDQotICAgICAgICAgICAgICAgIHVsUmVnaW9uRW5kQWRkcmVzcyA8PSAoIHVpbnQzMl90ICkgX19wcml2aWxlZ2VkX3NyYW1fZW5kX18gKQ0KKyAgICAgICAgICAgIGlmKCAoIHVsUmVnaW9uU3RhcnRBZGRyZXNzID49ICggdWludDMyX3QgKSBfX3ByaXZpbGVnZWRfc3JhbV9zdGFydF9fICkgJiYNCisgICAgICAgICAgICAgICAgKCB1bFJlZ2lvbkVuZEFkZHJlc3MgPD0gKCB1aW50MzJfdCApIF9fcHJpdmlsZWdlZF9zcmFtX2VuZF9fICkgKQ0KICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgeE1QVVNldHRpbmdzLT54UmVnaW9uc1NldHRpbmdzWyAwIF0udWxSQkFSID0gMDsNCiAgICAgICAgICAgICAgICAgeE1QVVNldHRpbmdzLT54UmVnaW9uc1NldHRpbmdzWyAwIF0udWxSTEFSID0gMDsNCkBAIC0xMDg5LDcgKzEwOTMsNyBAQAogICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAvKiBEZWZpbmUgdGhlIHJlZ2lvbiB0aGF0IGFsbG93cyBhY2Nlc3MgdG8gdGhlIHN0YWNrLiAqLw0KICAgICAgICAgICAgICAgICB1bFJlZ2lvblN0YXJ0QWRkcmVzcyAmPSBwb3J0TVBVX1JCQVJfQUREUkVTU19NQVNLOw0KLSAgICAgICAgICAgICAgICB1bFJlZ2lvbkVuZEFkZHJlc3MgICY9IHBvcnRNUFVfUkxBUl9BRERSRVNTX01BU0s7DQorICAgICAgICAgICAgICAgIHVsUmVnaW9uRW5kQWRkcmVzcyAmPSBwb3J0TVBVX1JMQVJfQUREUkVTU19NQVNLOw0KIA0KICAgICAgICAgICAgICAgICB4TVBVU2V0dGluZ3MtPnhSZWdpb25zU2V0dGluZ3NbIDAgXS51bFJCQVIgPSAoIHVsUmVnaW9uU3RhcnRBZGRyZXNzICkgfA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIHBvcnRNUFVfUkVHSU9OX05PTl9TSEFSRUFCTEUgKSB8DQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvR0NDL0FSTV9DTTMzX05UWi9ub25fc2VjdXJlL3BvcnQuYyBiL3BvcnRhYmxlL0dDQy9BUk1fQ00zM19OVFovbm9uX3NlY3VyZS9wb3J0LmMKaW5kZXggM2YzOWJjMy4uMTUxZWE4YiAxMDA2NDQKLS0tIGEvcG9ydGFibGUvR0NDL0FSTV9DTTMzX05UWi9ub25fc2VjdXJlL3BvcnQuYworKysgYi9wb3J0YWJsZS9HQ0MvQVJNX0NNMzNfTlRaL25vbl9zZWN1cmUvcG9ydC5jCkBAIC02MTIsNyArNjEyLDcgQEAKICAgICAgICAgICAgIGV4dGVybiB1aW50MzJfdCAqIF9fdW5wcml2aWxlZ2VkX2ZsYXNoX2VuZF9fOw0KICAgICAgICAgICAgIGV4dGVybiB1aW50MzJfdCAqIF9fcHJpdmlsZWdlZF9zcmFtX3N0YXJ0X187DQogICAgICAgICAgICAgZXh0ZXJuIHVpbnQzMl90ICogX19wcml2aWxlZ2VkX3NyYW1fZW5kX187DQotICAgICAgICAjZWxzZSAgLyogaWYgZGVmaW5lZCggX19BUk1DQ19WRVJTSU9OICkgKi8NCisgICAgICAgICNlbHNlIC8qIGlmIGRlZmluZWQoIF9fQVJNQ0NfVkVSU0lPTiApICovDQogICAgICAgICAgICAgLyogRGVjbGFyYXRpb24gd2hlbiB0aGVzZSB2YXJpYWJsZSBhcmUgZXhwb3J0ZWQgZnJvbSBsaW5rZXIgc2NyaXB0cy4gKi8NCiAgICAgICAgICAgICBleHRlcm4gdWludDMyX3QgX19wcml2aWxlZ2VkX2Z1bmN0aW9uc19zdGFydF9fW107DQogICAgICAgICAgICAgZXh0ZXJuIHVpbnQzMl90IF9fcHJpdmlsZWdlZF9mdW5jdGlvbnNfZW5kX19bXTsNCkBAIC04MDIsMjIgKzgwMiwyMiBAQAogICAgICAgICAgICAgICAgIHVsUjAgPSBwdWxDYWxsZXJTdGFja0FkZHJlc3NbIDAgXTsNCiANCiAgICAgICAgICAgICAgICAgI2lmICggY29uZmlnRU5BQkxFX01QVSA9PSAxICkNCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgLyogUmVhZCB0aGUgQ09OVFJPTCByZWdpc3RlciB2YWx1ZS4gKi8NCi0gICAgICAgICAgICAgICAgICAgIF9fYXNtIHZvbGF0aWxlICggIm1ycyAlMCwgY29udHJvbCIgIDogIj1yIiAoIHVsQ29udHJvbCApICk7DQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVhZCB0aGUgQ09OVFJPTCByZWdpc3RlciB2YWx1ZS4gKi8NCisgICAgICAgICAgICAgICAgICAgICAgICBfX2FzbSB2b2xhdGlsZSAoICJtcnMgJTAsIGNvbnRyb2wiICA6ICI9ciIgKCB1bENvbnRyb2wgKSApOw0KIA0KLSAgICAgICAgICAgICAgICAgICAgLyogVGhlIHRhc2sgdGhhdCByYWlzZWQgdGhlIFNWQyBpcyBwcml2aWxlZ2VkIGlmIEJpdFswXQ0KLSAgICAgICAgICAgICAgICAgICAgICogaW4gdGhlIENPTlRST0wgcmVnaXN0ZXIgaXMgMC4gKi8NCi0gICAgICAgICAgICAgICAgICAgIHVsSXNUYXNrUHJpdmlsZWdlZCA9ICggKCB1bENvbnRyb2wgJiBwb3J0Q09OVFJPTF9QUklWSUxFR0VEX01BU0sgKSA9PSAwICk7DQorICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhlIHRhc2sgdGhhdCByYWlzZWQgdGhlIFNWQyBpcyBwcml2aWxlZ2VkIGlmIEJpdFswXQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAqIGluIHRoZSBDT05UUk9MIHJlZ2lzdGVyIGlzIDAuICovDQorICAgICAgICAgICAgICAgICAgICAgICAgdWxJc1Rhc2tQcml2aWxlZ2VkID0gKCAoIHVsQ29udHJvbCAmIHBvcnRDT05UUk9MX1BSSVZJTEVHRURfTUFTSyApID09IDAgKTsNCiANCi0gICAgICAgICAgICAgICAgICAgIC8qIEFsbG9jYXRlIGFuZCBsb2FkIGEgY29udGV4dCBmb3IgdGhlIHNlY3VyZSB0YXNrLiAqLw0KLSAgICAgICAgICAgICAgICAgICAgeFNlY3VyZUNvbnRleHQgPSBTZWN1cmVDb250ZXh0X0FsbG9jYXRlQ29udGV4dCggdWxSMCwgdWxJc1Rhc2tQcml2aWxlZ2VkICk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgI2Vsc2UgIC8qIGlmICggY29uZmlnRU5BQkxFX01QVSA9PSAxICkgKi8NCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgLyogQWxsb2NhdGUgYW5kIGxvYWQgYSBjb250ZXh0IGZvciB0aGUgc2VjdXJlIHRhc2suICovDQotICAgICAgICAgICAgICAgICAgICB4U2VjdXJlQ29udGV4dCA9IFNlY3VyZUNvbnRleHRfQWxsb2NhdGVDb250ZXh0KCB1bFIwICk7DQotICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBBbGxvY2F0ZSBhbmQgbG9hZCBhIGNvbnRleHQgZm9yIHRoZSBzZWN1cmUgdGFzay4gKi8NCisgICAgICAgICAgICAgICAgICAgICAgICB4U2VjdXJlQ29udGV4dCA9IFNlY3VyZUNvbnRleHRfQWxsb2NhdGVDb250ZXh0KCB1bFIwLCB1bElzVGFza1ByaXZpbGVnZWQgKTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgI2Vsc2UgLyogaWYgKCBjb25maWdFTkFCTEVfTVBVID09IDEgKSAqLw0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFsbG9jYXRlIGFuZCBsb2FkIGEgY29udGV4dCBmb3IgdGhlIHNlY3VyZSB0YXNrLiAqLw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHhTZWN1cmVDb250ZXh0ID0gU2VjdXJlQ29udGV4dF9BbGxvY2F0ZUNvbnRleHQoIHVsUjAgKTsNCisgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgI2VuZGlmIC8qIGNvbmZpZ0VOQUJMRV9NUFUgKi8NCiANCiAgICAgICAgICAgICAgICAgY29uZmlnQVNTRVJUKCB4U2VjdXJlQ29udGV4dCAhPSBOVUxMICk7DQpAQCAtODM1LDIxICs4MzUsMjEgQEAKIA0KICAgICAgICAgY2FzZSBwb3J0U1ZDX1NUQVJUX1NDSEVEVUxFUjoNCiAgICAgICAgICAgICAjaWYgKCBjb25maWdFTkFCTEVfVFJVU1RaT05FID09IDEgKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgLyogRGUtcHJpb3JpdGl6ZSB0aGUgbm9uLXNlY3VyZSBleGNlcHRpb25zIHNvIHRoYXQgdGhlDQotICAgICAgICAgICAgICAgICAqIG5vbi1zZWN1cmUgcGVuZFNWIHJ1bnMgYXQgdGhlIGxvd2VzdCBwcmlvcml0eS4gKi8NCi0gICAgICAgICAgICAgICAgU2VjdXJlSW5pdF9EZVByaW9yaXRpemVOU0V4Y2VwdGlvbnMoKTsNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgLyogRGUtcHJpb3JpdGl6ZSB0aGUgbm9uLXNlY3VyZSBleGNlcHRpb25zIHNvIHRoYXQgdGhlDQorICAgICAgICAgICAgICAgICAgICAgKiBub24tc2VjdXJlIHBlbmRTViBydW5zIGF0IHRoZSBsb3dlc3QgcHJpb3JpdHkuICovDQorICAgICAgICAgICAgICAgICAgICBTZWN1cmVJbml0X0RlUHJpb3JpdGl6ZU5TRXhjZXB0aW9ucygpOw0KIA0KLSAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIHRoZSBzZWN1cmUgY29udGV4dCBtYW5hZ2VtZW50IHN5c3RlbS4gKi8NCi0gICAgICAgICAgICAgICAgU2VjdXJlQ29udGV4dF9Jbml0KCk7DQotICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSB0aGUgc2VjdXJlIGNvbnRleHQgbWFuYWdlbWVudCBzeXN0ZW0uICovDQorICAgICAgICAgICAgICAgICAgICBTZWN1cmVDb250ZXh0X0luaXQoKTsNCisgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICNlbmRpZiAvKiBjb25maWdFTkFCTEVfVFJVU1RaT05FICovDQogDQogICAgICAgICAgICAgI2lmICggY29uZmlnRU5BQkxFX0ZQVSA9PSAxICkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIC8qIFNldHVwIHRoZSBGbG9hdGluZyBQb2ludCBVbml0IChGUFUpLiAqLw0KLSAgICAgICAgICAgICAgICBwcnZTZXR1cEZQVSgpOw0KLSAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgLyogU2V0dXAgdGhlIEZsb2F0aW5nIFBvaW50IFVuaXQgKEZQVSkuICovDQorICAgICAgICAgICAgICAgICAgICBwcnZTZXR1cEZQVSgpOw0KKyAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgI2VuZGlmIC8qIGNvbmZpZ0VOQUJMRV9GUFUgKi8NCiANCiAgICAgICAgICAgICAvKiBTZXR1cCB0aGUgY29udGV4dCBvZiB0aGUgZmlyc3QgdGFzayBzbyB0aGF0IHRoZSBmaXJzdCB0YXNrIHN0YXJ0cw0KQEAgLTg3NywxOCArODc3LDIwIEBACiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQorLyogKklOREVOVC1PRkYqICovDQogI2lmICggY29uZmlnRU5BQkxFX01QVSA9PSAxICkNCiAgICAgU3RhY2tUeXBlX3QgKiBweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICogcHhUb3BPZlN0YWNrLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tUeXBlX3QgKiBweEVuZE9mU3RhY2ssDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYXNrRnVuY3Rpb25fdCBweENvZGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICogcHZQYXJhbWV0ZXJzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFzZVR5cGVfdCB4UnVuUHJpdmlsZWdlZCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBSSVZJTEVHRURfRlVOQ1RJT04gKi8NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhc2VUeXBlX3QgeFJ1blByaXZpbGVnZWQgKSAvKiBQUklWSUxFR0VEX0ZVTkNUSU9OICovDQogI2Vsc2UNCiAgICAgU3RhY2tUeXBlX3QgKiBweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICogcHhUb3BPZlN0YWNrLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tUeXBlX3QgKiBweEVuZE9mU3RhY2ssDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYXNrRnVuY3Rpb25fdCBweENvZGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICogcHZQYXJhbWV0ZXJzICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUFJJVklMRUdFRF9GVU5DVElPTiAqLw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqIHB2UGFyYW1ldGVycyApICAgICAgIC8qIFBSSVZJTEVHRURfRlVOQ1RJT04gKi8NCiAjZW5kaWYgLyogY29uZmlnRU5BQkxFX01QVSAqLw0KKy8qICpJTkRFTlQtT04qICovDQogew0KICAgICAvKiBTaW11bGF0ZSB0aGUgc3RhY2sgZnJhbWUgYXMgaXQgd291bGQgYmUgY3JlYXRlZCBieSBhIGNvbnRleHQgc3dpdGNoDQogICAgICAqIGludGVycnVwdC4gKi8NCkBAIC0xMDUxLDcgKzEwNTMsOSBAQAogICAgIHsNCiAgICAgICAgIHVpbnQzMl90IHVsUmVnaW9uU3RhcnRBZGRyZXNzLCB1bFJlZ2lvbkVuZEFkZHJlc3MsIHVsUmVnaW9uTnVtYmVyOw0KICAgICAgICAgaW50MzJfdCBsSW5kZXggPSAwOw0KKw0KICAgICAgICAgI2lmIGRlZmluZWQoIF9fQVJNQ0NfVkVSU0lPTiApDQorDQogICAgICAgICAgICAgLyogRGVjbGFyYXRpb24gd2hlbiB0aGVzZSB2YXJpYWJsZSBhcmUgZGVmaW5lZCBpbiBjb2RlIGluc3RlYWQgb2YgYmVpbmcNCiAgICAgICAgICAgICAgKiBleHBvcnRlZCBmcm9tIGxpbmtlciBzY3JpcHRzLiAqLw0KICAgICAgICAgICAgIGV4dGVybiB1aW50MzJfdCAqIF9fcHJpdmlsZWdlZF9zcmFtX3N0YXJ0X187DQpAQCAtMTA3OSw4ICsxMDgzLDggQEAKICAgICAgICAgICAgICAqIHVzaW5nIGEgc2VwYXJhdGUgTVBVIHJlZ2lvbi4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBwcml2aWxlZ2VkDQogICAgICAgICAgICAgICogU1JBTSBpcyBhbHJlYWR5IHByb3RlY3RlZCB1c2luZyBhbiBNUFUgcmVnaW9uIGFuZCBBUk12OC1NIGRvZXMNCiAgICAgICAgICAgICAgKiBub3QgYWxsb3cgb3ZlcmxhcHBpbmcgTVBVIHJlZ2lvbnMuICovDQotICAgICAgICAgICAgaWYoIHVsUmVnaW9uU3RhcnRBZGRyZXNzID49ICggdWludDMyX3QgKSBfX3ByaXZpbGVnZWRfc3JhbV9zdGFydF9fICYmDQotICAgICAgICAgICAgICAgIHVsUmVnaW9uRW5kQWRkcmVzcyA8PSAoIHVpbnQzMl90ICkgX19wcml2aWxlZ2VkX3NyYW1fZW5kX18gKQ0KKyAgICAgICAgICAgIGlmKCAoIHVsUmVnaW9uU3RhcnRBZGRyZXNzID49ICggdWludDMyX3QgKSBfX3ByaXZpbGVnZWRfc3JhbV9zdGFydF9fICkgJiYNCisgICAgICAgICAgICAgICAgKCB1bFJlZ2lvbkVuZEFkZHJlc3MgPD0gKCB1aW50MzJfdCApIF9fcHJpdmlsZWdlZF9zcmFtX2VuZF9fICkgKQ0KICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgeE1QVVNldHRpbmdzLT54UmVnaW9uc1NldHRpbmdzWyAwIF0udWxSQkFSID0gMDsNCiAgICAgICAgICAgICAgICAgeE1QVVNldHRpbmdzLT54UmVnaW9uc1NldHRpbmdzWyAwIF0udWxSTEFSID0gMDsNCkBAIC0xMDg5LDcgKzEwOTMsNyBAQAogICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAvKiBEZWZpbmUgdGhlIHJlZ2lvbiB0aGF0IGFsbG93cyBhY2Nlc3MgdG8gdGhlIHN0YWNrLiAqLw0KICAgICAgICAgICAgICAgICB1bFJlZ2lvblN0YXJ0QWRkcmVzcyAmPSBwb3J0TVBVX1JCQVJfQUREUkVTU19NQVNLOw0KLSAgICAgICAgICAgICAgICB1bFJlZ2lvbkVuZEFkZHJlc3MgICY9IHBvcnRNUFVfUkxBUl9BRERSRVNTX01BU0s7DQorICAgICAgICAgICAgICAgIHVsUmVnaW9uRW5kQWRkcmVzcyAmPSBwb3J0TVBVX1JMQVJfQUREUkVTU19NQVNLOw0KIA0KICAgICAgICAgICAgICAgICB4TVBVU2V0dGluZ3MtPnhSZWdpb25zU2V0dGluZ3NbIDAgXS51bFJCQVIgPSAoIHVsUmVnaW9uU3RhcnRBZGRyZXNzICkgfA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIHBvcnRNUFVfUkVHSU9OX05PTl9TSEFSRUFCTEUgKSB8DQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvR0NDL0FSTV9DTTRfTVBVL3BvcnQuYyBiL3BvcnRhYmxlL0dDQy9BUk1fQ000X01QVS9wb3J0LmMKaW5kZXggYWY5YjUzZS4uMzRjZTk0ZSAxMDA2NDQKLS0tIGEvcG9ydGFibGUvR0NDL0FSTV9DTTRfTVBVL3BvcnQuYworKysgYi9wb3J0YWJsZS9HQ0MvQVJNX0NNNF9NUFUvcG9ydC5jCkBAIC0zNjAsMTQgKzM2MCwxNCBAQAogICAgICAgICAiCXN0ciByMywgW3IyXQkJCQkJXG4iLyogRGlzYWJsZSBNUFUuICovDQogICAgICAgICAiCQkJCQkJCQkJXG4iDQogICAgICAgICAiCWxkciByMiwgPTB4ZTAwMGVkOWMJCQkJXG4iLyogUmVnaW9uIEJhc2UgQWRkcmVzcyByZWdpc3Rlci4gKi8NCi0gICAgICAgICIJbGRtaWEgcjEhLCB7cjQtcjExfQkJCQlcbiIgLyogUmVhZCA0IHNldHMgb2YgTVBVIHJlZ2lzdGVycyBbTVBVIFJlZ2lvbiAjIDQgLSA3XS4gKi8NCi0gICAgICAgICIJc3RtaWEgcjIsIHtyNC1yMTF9CQkJCVxuIiAvKiBXcml0ZSA0IHNldHMgb2YgTVBVIHJlZ2lzdGVycyBbTVBVIFJlZ2lvbiAjIDQgLSA3XS4gKi8NCisgICAgICAgICIJbGRtaWEgcjEhLCB7cjQtcjExfQkJCQlcbiIvKiBSZWFkIDQgc2V0cyBvZiBNUFUgcmVnaXN0ZXJzIFtNUFUgUmVnaW9uICMgNCAtIDddLiAqLw0KKyAgICAgICAgIglzdG1pYSByMiwge3I0LXIxMX0JCQkJXG4iLyogV3JpdGUgNCBzZXRzIG9mIE1QVSByZWdpc3RlcnMgW01QVSBSZWdpb24gIyA0IC0gN10uICovDQogICAgICAgICAiCQkJCQkJCQkJXG4iDQogICAgICAgICAjaWYgKCBwb3J0VE9UQUxfTlVNX1JFR0lPTlMgPT0gMTYgKQ0KLSAgICAgICAgIglsZG1pYSByMSEsIHtyNC1yMTF9CQkJCVxuIiAvKiBSZWFkIDQgc2V0cyBvZiBNUFUgcmVnaXN0ZXJzIFtNUFUgUmVnaW9uICMgOCAtIDExXS4gKi8NCi0gICAgICAgICIJc3RtaWEgcjIsIHtyNC1yMTF9CQkJCVxuIiAvKiBXcml0ZSA0IHNldHMgb2YgTVBVIHJlZ2lzdGVycy4gW01QVSBSZWdpb24gIyA4IC0gMTFdLiAqLw0KLSAgICAgICAgIglsZG1pYSByMSEsIHtyNC1yMTF9CQkJCVxuIiAvKiBSZWFkIDQgc2V0cyBvZiBNUFUgcmVnaXN0ZXJzIFtNUFUgUmVnaW9uICMgMTIgLSAxNV0uICovDQotICAgICAgICAiCXN0bWlhIHIyLCB7cjQtcjExfQkJCQlcbiIgLyogV3JpdGUgNCBzZXRzIG9mIE1QVSByZWdpc3RlcnMuIFtNUFUgUmVnaW9uICMgMTIgLSAxNV0uICovDQorICAgICAgICAgICAgIglsZG1pYSByMSEsIHtyNC1yMTF9CQkJCVxuIi8qIFJlYWQgNCBzZXRzIG9mIE1QVSByZWdpc3RlcnMgW01QVSBSZWdpb24gIyA4IC0gMTFdLiAqLw0KKyAgICAgICAgICAgICIJc3RtaWEgcjIsIHtyNC1yMTF9CQkJCVxuIi8qIFdyaXRlIDQgc2V0cyBvZiBNUFUgcmVnaXN0ZXJzLiBbTVBVIFJlZ2lvbiAjIDggLSAxMV0uICovDQorICAgICAgICAgICAgIglsZG1pYSByMSEsIHtyNC1yMTF9CQkJCVxuIi8qIFJlYWQgNCBzZXRzIG9mIE1QVSByZWdpc3RlcnMgW01QVSBSZWdpb24gIyAxMiAtIDE1XS4gKi8NCisgICAgICAgICAgICAiCXN0bWlhIHIyLCB7cjQtcjExfQkJCQlcbiIvKiBXcml0ZSA0IHNldHMgb2YgTVBVIHJlZ2lzdGVycy4gW01QVSBSZWdpb24gIyAxMiAtIDE1XS4gKi8NCiAgICAgICAgICNlbmRpZiAvKiBwb3J0VE9UQUxfTlVNX1JFR0lPTlMgPT0gMTYuICovDQogICAgICAgICAiCQkJCQkJCQkJXG4iDQogICAgICAgICAiCWxkciByMiwgPTB4ZTAwMGVkOTQJCQkJXG4iLyogTVBVX0NUUkwgcmVnaXN0ZXIuICovDQpAQCAtNTg0LDE0ICs1ODQsMTQgQEAKICAgICAgICAgIglzdHIgcjMsIFtyMl0JCQkJCQlcbiIvKiBEaXNhYmxlIE1QVS4gKi8NCiAgICAgICAgICIJCQkJCQkJCQkJXG4iDQogICAgICAgICAiCWxkciByMiwgPTB4ZTAwMGVkOWMJCQkJCVxuIi8qIFJlZ2lvbiBCYXNlIEFkZHJlc3MgcmVnaXN0ZXIuICovDQotICAgICAgICAiCWxkbWlhIHIxISwge3I0LXIxMX0JCQkJCVxuIiAvKiBSZWFkIDQgc2V0cyBvZiBNUFUgcmVnaXN0ZXJzIFtNUFUgUmVnaW9uICMgNCAtIDddLiAqLw0KLSAgICAgICAgIglzdG1pYSByMiwge3I0LXIxMX0JCQkJCVxuIiAvKiBXcml0ZSA0IHNldHMgb2YgTVBVIHJlZ2lzdGVycyBbTVBVIFJlZ2lvbiAjIDQgLSA3XS4gKi8NCisgICAgICAgICIJbGRtaWEgcjEhLCB7cjQtcjExfQkJCQkJXG4iLyogUmVhZCA0IHNldHMgb2YgTVBVIHJlZ2lzdGVycyBbTVBVIFJlZ2lvbiAjIDQgLSA3XS4gKi8NCisgICAgICAgICIJc3RtaWEgcjIsIHtyNC1yMTF9CQkJCQlcbiIvKiBXcml0ZSA0IHNldHMgb2YgTVBVIHJlZ2lzdGVycyBbTVBVIFJlZ2lvbiAjIDQgLSA3XS4gKi8NCiAgICAgICAgICIJCQkJCQkJCQkJXG4iDQogICAgICAgICAjaWYgKCBwb3J0VE9UQUxfTlVNX1JFR0lPTlMgPT0gMTYgKQ0KLSAgICAgICAgIglsZG1pYSByMSEsIHtyNC1yMTF9CQkJCQlcbiIgLyogUmVhZCA0IHNldHMgb2YgTVBVIHJlZ2lzdGVycyBbTVBVIFJlZ2lvbiAjIDggLSAxMV0uICovDQotICAgICAgICAiCXN0bWlhIHIyLCB7cjQtcjExfQkJCQkJXG4iIC8qIFdyaXRlIDQgc2V0cyBvZiBNUFUgcmVnaXN0ZXJzLiBbTVBVIFJlZ2lvbiAjIDggLSAxMV0uICovDQotICAgICAgICAiCWxkbWlhIHIxISwge3I0LXIxMX0JCQkJCVxuIiAvKiBSZWFkIDQgc2V0cyBvZiBNUFUgcmVnaXN0ZXJzIFtNUFUgUmVnaW9uICMgMTIgLSAxNV0uICovDQotICAgICAgICAiCXN0bWlhIHIyLCB7cjQtcjExfQkJCQkJXG4iIC8qIFdyaXRlIDQgc2V0cyBvZiBNUFUgcmVnaXN0ZXJzLiBbTVBVIFJlZ2lvbiAjIDEyIC0gMTVdLiAqLw0KKyAgICAgICAgICAgICIJbGRtaWEgcjEhLCB7cjQtcjExfQkJCQkJXG4iLyogUmVhZCA0IHNldHMgb2YgTVBVIHJlZ2lzdGVycyBbTVBVIFJlZ2lvbiAjIDggLSAxMV0uICovDQorICAgICAgICAgICAgIglzdG1pYSByMiwge3I0LXIxMX0JCQkJCVxuIi8qIFdyaXRlIDQgc2V0cyBvZiBNUFUgcmVnaXN0ZXJzLiBbTVBVIFJlZ2lvbiAjIDggLSAxMV0uICovDQorICAgICAgICAgICAgIglsZG1pYSByMSEsIHtyNC1yMTF9CQkJCQlcbiIvKiBSZWFkIDQgc2V0cyBvZiBNUFUgcmVnaXN0ZXJzIFtNUFUgUmVnaW9uICMgMTIgLSAxNV0uICovDQorICAgICAgICAgICAgIglzdG1pYSByMiwge3I0LXIxMX0JCQkJCVxuIi8qIFdyaXRlIDQgc2V0cyBvZiBNUFUgcmVnaXN0ZXJzLiBbTVBVIFJlZ2lvbiAjIDEyIC0gMTVdLiAqLw0KICAgICAgICAgI2VuZGlmIC8qIHBvcnRUT1RBTF9OVU1fUkVHSU9OUyA9PSAxNi4gKi8NCiAgICAgICAgICIJCQkJCQkJCQkJXG4iDQogICAgICAgICAiCWxkciByMiwgPTB4ZTAwMGVkOTQJCQkJCVxuIi8qIE1QVV9DVFJMIHJlZ2lzdGVyLiAqLw0KQEAgLTk0MSwxMCArOTQxLDEwIEBACiAgICAgICAgICAgICAgKiBiZSBzZXQgdG8gYSB2YWx1ZSBlcXVhbCB0byBvciBudW1lcmljYWxseSAqaGlnaGVyKiB0aGFuDQogICAgICAgICAgICAgICogY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZLg0KICAgICAgICAgICAgICAqDQotICAgICAgICAgICAgICogSW50ZXJydXB0cyB0aGF0CXVzZSB0aGUgRnJlZVJUT1MgQVBJIG11c3Qgbm90IGJlIGxlZnQgYXQgdGhlaXINCi0gICAgICAgICAgICAgKiBkZWZhdWx0IHByaW9yaXR5IG9mCXplcm8gYXMgdGhhdCBpcyB0aGUgaGlnaGVzdCBwb3NzaWJsZSBwcmlvcml0eSwNCisgICAgICAgICAgICAgKiBJbnRlcnJ1cHRzIHRoYXQgdXNlIHRoZSBGcmVlUlRPUyBBUEkgbXVzdCBub3QgYmUgbGVmdCBhdCB0aGVpcg0KKyAgICAgICAgICAgICAqIGRlZmF1bHQgcHJpb3JpdHkgb2YgemVybyBhcyB0aGF0IGlzIHRoZSBoaWdoZXN0IHBvc3NpYmxlIHByaW9yaXR5LA0KICAgICAgICAgICAgICAqIHdoaWNoIGlzIGd1YXJhbnRlZWQgdG8gYmUgYWJvdmUgY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZLA0KLSAgICAgICAgICAgICAqIGFuZAl0aGVyZWZvcmUgYWxzbyBndWFyYW50ZWVkIHRvIGJlIGludmFsaWQuDQorICAgICAgICAgICAgICogYW5kIHRoZXJlZm9yZSBhbHNvIGd1YXJhbnRlZWQgdG8gYmUgaW52YWxpZC4NCiAgICAgICAgICAgICAgKg0KICAgICAgICAgICAgICAqIEZyZWVSVE9TIG1haW50YWlucyBzZXBhcmF0ZSB0aHJlYWQgYW5kIElTUiBBUEkgZnVuY3Rpb25zIHRvIGVuc3VyZQ0KICAgICAgICAgICAgICAqIGludGVycnVwdCBlbnRyeSBpcyBhcyBmYXN0IGFuZCBzaW1wbGUgYXMgcG9zc2libGUuDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvR0NDL0FSTV9DTTRfTVBVL3BvcnRtYWNyby5oIGIvcG9ydGFibGUvR0NDL0FSTV9DTTRfTVBVL3BvcnRtYWNyby5oCmluZGV4IDQ1ODhkZDIuLjdmMjQ3YTIgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0dDQy9BUk1fQ000X01QVS9wb3J0bWFjcm8uaAorKysgYi9wb3J0YWJsZS9HQ0MvQVJNX0NNNF9NUFUvcG9ydG1hY3JvLmgKQEAgLTI3LDExICsyNywxNCBAQAogDQogDQogI2lmbmRlZiBQT1JUTUFDUk9fSA0KLSAgICAjZGVmaW5lIFBPUlRNQUNST19IDQorI2RlZmluZSBQT1JUTUFDUk9fSA0KIA0KLSAgICAjaWZkZWYgX19jcGx1c3BsdXMNCi0gICAgICAgIGV4dGVybiAiQyIgew0KLSAgICAjZW5kaWYNCisNCisvKiAqSU5ERU5ULU9GRiogKi8NCisjaWZkZWYgX19jcGx1c3BsdXMNCisgICAgZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorLyogKklOREVOVC1PTiogKi8NCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICogUG9ydCBzcGVjaWZpYyBkZWZpbml0aW9ucy4NCkBAIC00NCwxNjkgKzQ3LDE3MCBAQAogICovDQogDQogLyogVHlwZSBkZWZpbml0aW9ucy4gKi8NCi0gICAgI2RlZmluZSBwb3J0Q0hBUiAgICAgICAgICBjaGFyDQotICAgICNkZWZpbmUgcG9ydEZMT0FUICAgICAgICAgZmxvYXQNCi0gICAgI2RlZmluZSBwb3J0RE9VQkxFICAgICAgICBkb3VibGUNCi0gICAgI2RlZmluZSBwb3J0TE9ORyAgICAgICAgICBsb25nDQotICAgICNkZWZpbmUgcG9ydFNIT1JUICAgICAgICAgc2hvcnQNCi0gICAgI2RlZmluZSBwb3J0U1RBQ0tfVFlQRSAgICB1aW50MzJfdA0KLSAgICAjZGVmaW5lIHBvcnRCQVNFX1RZUEUgICAgIGxvbmcNCisjZGVmaW5lIHBvcnRDSEFSICAgICAgICAgIGNoYXINCisjZGVmaW5lIHBvcnRGTE9BVCAgICAgICAgIGZsb2F0DQorI2RlZmluZSBwb3J0RE9VQkxFICAgICAgICBkb3VibGUNCisjZGVmaW5lIHBvcnRMT05HICAgICAgICAgIGxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVCAgICAgICAgIHNob3J0DQorI2RlZmluZSBwb3J0U1RBQ0tfVFlQRSAgICB1aW50MzJfdA0KKyNkZWZpbmUgcG9ydEJBU0VfVFlQRSAgICAgbG9uZw0KIA0KLSAgICB0eXBlZGVmIHBvcnRTVEFDS19UWVBFICAgU3RhY2tUeXBlX3Q7DQotICAgIHR5cGVkZWYgbG9uZyAgICAgICAgICAgICBCYXNlVHlwZV90Ow0KLSAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgICAgVUJhc2VUeXBlX3Q7DQordHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSAgIFN0YWNrVHlwZV90Ow0KK3R5cGVkZWYgbG9uZyAgICAgICAgICAgICBCYXNlVHlwZV90Ow0KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyAgICBVQmFzZVR5cGVfdDsNCiANCi0gICAgI2lmICggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCi0gICAgICAgIHR5cGVkZWYgdWludDE2X3QgICAgIFRpY2tUeXBlX3Q7DQotICAgICAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgICAgICAgICAgICggVGlja1R5cGVfdCApIDB4ZmZmZg0KLSAgICAjZWxzZQ0KLSAgICAgICAgdHlwZWRlZiB1aW50MzJfdCAgICAgVGlja1R5cGVfdDsNCi0gICAgICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAgICAgICAgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQorI2lmICggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCisgICAgdHlwZWRlZiB1aW50MTZfdCAgICAgVGlja1R5cGVfdDsNCisgICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICAgICAgICAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmYNCisjZWxzZQ0KKyAgICB0eXBlZGVmIHVpbnQzMl90ICAgICBUaWNrVHlwZV90Ow0KKyAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgICAgICAgICAgICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTA0KIA0KIC8qIDMyLWJpdCB0aWNrIHR5cGUgb24gYSAzMi1iaXQgYXJjaGl0ZWN0dXJlLCBzbyByZWFkcyBvZiB0aGUgdGljayBjb3VudCBkbw0KICAqIG5vdCBuZWVkIHRvIGJlIGd1YXJkZWQgd2l0aCBhIGNyaXRpY2FsIHNlY3Rpb24uICovDQotICAgICAgICAjZGVmaW5lIHBvcnRUSUNLX1RZUEVfSVNfQVRPTUlDICAgIDENCi0gICAgI2VuZGlmDQorICAgICNkZWZpbmUgcG9ydFRJQ0tfVFlQRV9JU19BVE9NSUMgICAgMQ0KKyNlbmRpZg0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIE1QVSBzcGVjaWZpYyBjb25zdGFudHMuICovDQotICAgICNkZWZpbmUgcG9ydFVTSU5HX01QVV9XUkFQUEVSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQ0KLSAgICAjZGVmaW5lIHBvcnRQUklWSUxFR0VfQklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMHg4MDAwMDAwMFVMICkNCisjZGVmaW5lIHBvcnRVU0lOR19NUFVfV1JBUFBFUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDENCisjZGVmaW5lIHBvcnRQUklWSUxFR0VfQklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMHg4MDAwMDAwMFVMICkNCiANCi0gICAgI2RlZmluZSBwb3J0TVBVX1JFR0lPTl9SRUFEX1dSSVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDB4MDNVTCA8PCAyNFVMICkNCi0gICAgI2RlZmluZSBwb3J0TVBVX1JFR0lPTl9QUklWSUxFR0VEX1JFQURfT05MWSAgICAgICAgICAgICAgICAgICAgICAoIDB4MDVVTCA8PCAyNFVMICkNCi0gICAgI2RlZmluZSBwb3J0TVBVX1JFR0lPTl9SRUFEX09OTFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDB4MDZVTCA8PCAyNFVMICkNCi0gICAgI2RlZmluZSBwb3J0TVBVX1JFR0lPTl9QUklWSUxFR0VEX1JFQURfV1JJVEUgICAgICAgICAgICAgICAgICAgICAoIDB4MDFVTCA8PCAyNFVMICkNCi0gICAgI2RlZmluZSBwb3J0TVBVX1JFR0lPTl9QUklWSUxFR0VEX1JFQURfV1JJVEVfVU5QUklWX1JFQURfT05MWSAgICAoIDB4MDJVTCA8PCAyNFVMICkNCi0gICAgI2RlZmluZSBwb3J0TVBVX1JFR0lPTl9DQUNIRUFCTEVfQlVGRkVSQUJMRSAgICAgICAgICAgICAgICAgICAgICAoIDB4MDdVTCA8PCAxNlVMICkNCi0gICAgI2RlZmluZSBwb3J0TVBVX1JFR0lPTl9FWEVDVVRFX05FVkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDB4MDFVTCA8PCAyOFVMICkNCi0gICAgLyogTG9jYXRpb24gb2YgdGhlIFRFWCxTLEMsQiBiaXRzIGluIHRoZSBNUFUgUmVnaW9uIEF0dHJpYnV0ZSBhbmQgU2l6ZQ0KLSAgICAgKiBSZWdpc3RlciAoUkFTUikuICovDQotICAgICNkZWZpbmUgcG9ydE1QVV9SQVNSX1RFWF9TX0NfQl9MT0NBVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgKCAxNlVMICkNCi0gICAgI2RlZmluZSBwb3J0TVBVX1JBU1JfVEVYX1NfQ19CX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDB4M0ZVTCApDQorI2RlZmluZSBwb3J0TVBVX1JFR0lPTl9SRUFEX1dSSVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDB4MDNVTCA8PCAyNFVMICkNCisjZGVmaW5lIHBvcnRNUFVfUkVHSU9OX1BSSVZJTEVHRURfUkVBRF9PTkxZICAgICAgICAgICAgICAgICAgICAgICggMHgwNVVMIDw8IDI0VUwgKQ0KKyNkZWZpbmUgcG9ydE1QVV9SRUdJT05fUkVBRF9PTkxZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAweDA2VUwgPDwgMjRVTCApDQorI2RlZmluZSBwb3J0TVBVX1JFR0lPTl9QUklWSUxFR0VEX1JFQURfV1JJVEUgICAgICAgICAgICAgICAgICAgICAoIDB4MDFVTCA8PCAyNFVMICkNCisjZGVmaW5lIHBvcnRNUFVfUkVHSU9OX1BSSVZJTEVHRURfUkVBRF9XUklURV9VTlBSSVZfUkVBRF9PTkxZICAgICggMHgwMlVMIDw8IDI0VUwgKQ0KKyNkZWZpbmUgcG9ydE1QVV9SRUdJT05fQ0FDSEVBQkxFX0JVRkZFUkFCTEUgICAgICAgICAgICAgICAgICAgICAgKCAweDA3VUwgPDwgMTZVTCApDQorI2RlZmluZSBwb3J0TVBVX1JFR0lPTl9FWEVDVVRFX05FVkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDB4MDFVTCA8PCAyOFVMICkNCiANCi0gICAgLyogTVBVIHNldHRpbmdzIHRoYXQgY2FuIGJlIG92ZXJyaWRlbiBpbiBGcmVlUlRPU0NvbmZpZy5oLiAqLw0KLSAgICAjaWZuZGVmIGNvbmZpZ1RPVEFMX01QVV9SRUdJT05TDQotICAgICAgICAvKiBEZWZpbmUgdG8gOCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gKi8NCi0gICAgICAgICNkZWZpbmUgY29uZmlnVE9UQUxfTVBVX1JFR0lPTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDhVTCApDQotICAgICNlbmRpZg0KKy8qIExvY2F0aW9uIG9mIHRoZSBURVgsUyxDLEIgYml0cyBpbiB0aGUgTVBVIFJlZ2lvbiBBdHRyaWJ1dGUgYW5kIFNpemUNCisgKiBSZWdpc3RlciAoUkFTUikuICovDQorI2RlZmluZSBwb3J0TVBVX1JBU1JfVEVYX1NfQ19CX0xPQ0FUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAoIDE2VUwgKQ0KKyNkZWZpbmUgcG9ydE1QVV9SQVNSX1RFWF9TX0NfQl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAweDNGVUwgKQ0KIA0KLSAgICAvKg0KLSAgICAgKiBUaGUgVEVYLCBTaGFyZWFibGUgKFMpLCBDYWNoZWFibGUgKEMpIGFuZCBCdWZmZXJhYmxlIChCKSBiaXRzIGRlZmluZSB0aGUNCi0gICAgICogbWVtb3J5IHR5cGUsIGFuZCB3aGVyZSBuZWNlc3NhcnkgdGhlIGNhY2hlYWJsZSBhbmQgc2hhcmVhYmxlIHByb3BlcnRpZXMNCi0gICAgICogb2YgdGhlIG1lbW9yeSByZWdpb24uDQotICAgICAqDQotICAgICAqIFRoZSBURVgsIEMsIGFuZCBCIGJpdHMgdG9nZXRoZXIgaW5kaWNhdGUgdGhlIG1lbW9yeSB0eXBlIG9mIHRoZSByZWdpb24sDQotICAgICAqIGFuZDoNCi0gICAgICogLSBGb3IgTm9ybWFsIG1lbW9yeSwgdGhlIGNhY2hlYWJsZSBwcm9wZXJ0aWVzIG9mIHRoZSByZWdpb24uDQotICAgICAqIC0gRm9yIERldmljZSBtZW1vcnksIHdoZXRoZXIgdGhlIHJlZ2lvbiBpcyBzaGFyZWFibGUuDQotICAgICAqDQotICAgICAqIEZvciBOb3JtYWwgbWVtb3J5IHJlZ2lvbnMsIHRoZSBTIGJpdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgcmVnaW9uIGlzDQotICAgICAqIHNoYXJlYWJsZS4gRm9yIFN0cm9uZ2x5LW9yZGVyZWQgYW5kIERldmljZSBtZW1vcnksIHRoZSBTIGJpdCBpcyBpZ25vcmVkLg0KLSAgICAgKg0KLSAgICAgKiBTZWUgdGhlIGZvbGxvd2luZyB0d28gdGFibGVzIGZvciBzZXR0aW5nIFRFWCwgUywgQyBhbmQgQiBiaXRzIGZvcg0KLSAgICAgKiB1bnByaXZpbGVnZWQgZmxhc2gsIHByaXZpbGVnZWQgZmxhc2ggYW5kIHByaXZpbGVnZWQgUkFNIHJlZ2lvbnMuDQotICAgICAqDQotICAgICstLS0tLSstLS0rLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KLSAgICB8IFRFWCB8IEMgfCBCIHwgTWVtb3J5IHR5cGUgICAgICAgICAgICB8ICBEZXNjcmlwdGlvbiBvciBOb3JtYWwgcmVnaW9uIGNhY2hlYWJpbGl0eSAgICAgICAgICAgICB8ICBTaGFyZWFibGU/ICAgICAgICAgICAgIHwNCi0gICAgKy0tLS0tKy0tLSstLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQotICAgIHwgMDAwIHwgMCB8IDAgfCBTdHJvbmdseS1vcmRlcmVkICAgICAgIHwgIFN0cm9uZ2x5IG9yZGVyZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFNoYXJlYWJsZSAgICAgICAgICAgICAgfA0KLSAgICArLS0tLS0rLS0tKy0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCi0gICAgfCAwMDAgfCAwIHwgMSB8IERldmljZSAgICAgICAgICAgICAgICAgfCAgU2hhcmVkIGRldmljZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgU2hhcmVhYmxlICAgICAgICAgICAgICB8DQotICAgICstLS0tLSstLS0rLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KLSAgICB8IDAwMCB8IDEgfCAwIHwgTm9ybWFsICAgICAgICAgICAgICAgICB8ICBPdXRlciBhbmQgaW5uZXIgICB3cml0ZS10aHJvdWdoOyBubyB3cml0ZSBhbGxvY2F0ZSAgICB8ICBTIGJpdCAgICAgICAgICAgICAgICAgIHwNCi0gICAgKy0tLS0tKy0tLSstLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQotICAgIHwgMDAwIHwgMSB8IDEgfCBOb3JtYWwgICAgICAgICAgICAgICAgIHwgIE91dGVyIGFuZCBpbm5lciAgIHdyaXRlLWJhY2s7IG5vIHdyaXRlIGFsbG9jYXRlICAgICAgIHwgIFMgYml0ICAgICAgICAgICAgICAgICAgfA0KLSAgICArLS0tLS0rLS0tKy0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCi0gICAgfCAwMDEgfCAwIHwgMCB8IE5vcm1hbCAgICAgICAgICAgICAgICAgfCAgT3V0ZXIgYW5kIGlubmVyICAgTm9uLWNhY2hlYWJsZSAgICAgICAgICAgICAgICAgICAgICAgfCAgUyBiaXQgICAgICAgICAgICAgICAgICB8DQotICAgICstLS0tLSstLS0rLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KLSAgICB8IDAwMSB8IDAgfCAxIHwgUmVzZXJ2ZWQgICAgICAgICAgICAgICB8ICBSZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBSZXNlcnZlZCAgICAgICAgICAgICAgIHwNCi0gICAgKy0tLS0tKy0tLSstLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQotICAgIHwgMDAxIHwgMSB8IDAgfCBJTVBMRU1FTlRBVElPTiBERUZJTkVEIHwgIElNUExFTUVOVEFUSU9OIERFRklORUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIElNUExFTUVOVEFUSU9OIERFRklORUQgfA0KLSAgICArLS0tLS0rLS0tKy0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCi0gICAgfCAwMDEgfCAxIHwgMSB8IE5vcm1hbCAgICAgICAgICAgICAgICAgfCAgT3V0ZXIgYW5kIGlubmVyICAgd3JpdGUtYmFjazsgd3JpdGUgYW5kIHJlYWQgYWxsb2NhdGUgfCAgUyBiaXQgICAgICAgICAgICAgICAgICB8DQotICAgICstLS0tLSstLS0rLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KLSAgICB8IDAxMCB8IDAgfCAwIHwgRGV2aWNlICAgICAgICAgICAgICAgICB8ICBOb24tc2hhcmVkIGRldmljZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBOb3Qgc2hhcmVhYmxlICAgICAgICAgIHwNCi0gICAgKy0tLS0tKy0tLSstLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQotICAgIHwgMDEwIHwgMCB8IDEgfCBSZXNlcnZlZCAgICAgICAgICAgICAgIHwgIFJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFJlc2VydmVkICAgICAgICAgICAgICAgfA0KLSAgICArLS0tLS0rLS0tKy0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCi0gICAgfCAwMTAgfCAxIHwgWCB8IFJlc2VydmVkICAgICAgICAgICAgICAgfCAgUmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgUmVzZXJ2ZWQgICAgICAgICAgICAgICB8DQotICAgICstLS0tLSstLS0rLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KLSAgICB8IDAxMSB8IFggfCBYIHwgUmVzZXJ2ZWQgICAgICAgICAgICAgICB8ICBSZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBSZXNlcnZlZCAgICAgICAgICAgICAgIHwNCi0gICAgKy0tLS0tKy0tLSstLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQotICAgIHwgMUJCIHwgQSB8IEEgfCBOb3JtYWwgICAgICAgICAgICAgICAgIHwgQ2FjaGVkIG1lbW9yeSwgd2l0aCBBQSBhbmQgQkIgaW5kaWNhdGluZyB0aGUgaW5uZXIgYW5kIHwgIFJlc2VydmVkICAgICAgICAgICAgICAgfA0KLSAgICB8ICAgICB8ICAgfCAgIHwgICAgICAgICAgICAgICAgICAgICAgICB8IG91dGVyIGNhY2hlYWJpbGl0eSBydWxlcyB0aGF0IG11c3QgYmUgZXhwb3J0ZWQgb24gdGhlICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwNCi0gICAgfCAgICAgfCAgIHwgICB8ICAgICAgICAgICAgICAgICAgICAgICAgfCBidXMuIFNlZSB0aGUgdGFibGUgYmVsb3cgZm9yIHRoZSBjYWNoZWFiaWxpdHkgcG9saWN5ICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8DQotICAgIHwgICAgIHwgICB8ICAgfCAgICAgICAgICAgICAgICAgICAgICAgIHwgZW5jb2RpbmcuIG1lbW9yeSwgQkI9T3V0ZXIgcG9saWN5LCBBQT1Jbm5lciBwb2xpY3kuICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfA0KLSAgICArLS0tLS0rLS0tKy0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCisvKiBNUFUgc2V0dGluZ3MgdGhhdCBjYW4gYmUgb3ZlcnJpZGVuIGluIEZyZWVSVE9TQ29uZmlnLmguICovDQorI2lmbmRlZiBjb25maWdUT1RBTF9NUFVfUkVHSU9OUw0KKyAgICAvKiBEZWZpbmUgdG8gOCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gKi8NCisgICAgI2RlZmluZSBjb25maWdUT1RBTF9NUFVfUkVHSU9OUyAgICAoIDhVTCApDQorI2VuZGlmDQogDQotICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KLSAgICB8IEFBIG9yIEJCIHN1YmZpZWxkIG9mIHtURVgsQyxCfSBlbmNvZGluZyB8ICBDYWNoZWFiaWxpdHkgcG9saWN5ICAgICAgICAgICAgICAgICAgIHwNCi0gICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQotICAgIHwgMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIE5vbi1jYWNoZWFibGUgICAgICAgICAgICAgICAgICAgICAgICAgfA0KLSAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCi0gICAgfCAwMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgV3JpdGUtYmFjaywgd3JpdGUgYW5kICAgcmVhZCBhbGxvY2F0ZSB8DQotICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KLSAgICB8IDEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBXcml0ZS10aHJvdWdoLCBubyB3cml0ZSAgIGFsbG9jYXRlICAgIHwNCi0gICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQotICAgIHwgMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFdyaXRlLWJhY2ssIG5vIHdyaXRlICAgYWxsb2NhdGUgICAgICAgfA0KLSAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCi0gICAgKi8NCisvKg0KKyAqIFRoZSBURVgsIFNoYXJlYWJsZSAoUyksIENhY2hlYWJsZSAoQykgYW5kIEJ1ZmZlcmFibGUgKEIpIGJpdHMgZGVmaW5lIHRoZQ0KKyAqIG1lbW9yeSB0eXBlLCBhbmQgd2hlcmUgbmVjZXNzYXJ5IHRoZSBjYWNoZWFibGUgYW5kIHNoYXJlYWJsZSBwcm9wZXJ0aWVzDQorICogb2YgdGhlIG1lbW9yeSByZWdpb24uDQorICoNCisgKiBUaGUgVEVYLCBDLCBhbmQgQiBiaXRzIHRvZ2V0aGVyIGluZGljYXRlIHRoZSBtZW1vcnkgdHlwZSBvZiB0aGUgcmVnaW9uLA0KKyAqIGFuZDoNCisgKiAtIEZvciBOb3JtYWwgbWVtb3J5LCB0aGUgY2FjaGVhYmxlIHByb3BlcnRpZXMgb2YgdGhlIHJlZ2lvbi4NCisgKiAtIEZvciBEZXZpY2UgbWVtb3J5LCB3aGV0aGVyIHRoZSByZWdpb24gaXMgc2hhcmVhYmxlLg0KKyAqDQorICogRm9yIE5vcm1hbCBtZW1vcnkgcmVnaW9ucywgdGhlIFMgYml0IGluZGljYXRlcyB3aGV0aGVyIHRoZSByZWdpb24gaXMNCisgKiBzaGFyZWFibGUuIEZvciBTdHJvbmdseS1vcmRlcmVkIGFuZCBEZXZpY2UgbWVtb3J5LCB0aGUgUyBiaXQgaXMgaWdub3JlZC4NCisgKg0KKyAqIFNlZSB0aGUgZm9sbG93aW5nIHR3byB0YWJsZXMgZm9yIHNldHRpbmcgVEVYLCBTLCBDIGFuZCBCIGJpdHMgZm9yDQorICogdW5wcml2aWxlZ2VkIGZsYXNoLCBwcml2aWxlZ2VkIGZsYXNoIGFuZCBwcml2aWxlZ2VkIFJBTSByZWdpb25zLg0KKyAqDQorICstLS0tLSstLS0rLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KKyB8IFRFWCB8IEMgfCBCIHwgTWVtb3J5IHR5cGUgICAgICAgICAgICB8ICBEZXNjcmlwdGlvbiBvciBOb3JtYWwgcmVnaW9uIGNhY2hlYWJpbGl0eSAgICAgICAgICAgICB8ICBTaGFyZWFibGU/ICAgICAgICAgICAgIHwNCisgKy0tLS0tKy0tLSstLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQorIHwgMDAwIHwgMCB8IDAgfCBTdHJvbmdseS1vcmRlcmVkICAgICAgIHwgIFN0cm9uZ2x5IG9yZGVyZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFNoYXJlYWJsZSAgICAgICAgICAgICAgfA0KKyArLS0tLS0rLS0tKy0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCisgfCAwMDAgfCAwIHwgMSB8IERldmljZSAgICAgICAgICAgICAgICAgfCAgU2hhcmVkIGRldmljZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgU2hhcmVhYmxlICAgICAgICAgICAgICB8DQorICstLS0tLSstLS0rLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KKyB8IDAwMCB8IDEgfCAwIHwgTm9ybWFsICAgICAgICAgICAgICAgICB8ICBPdXRlciBhbmQgaW5uZXIgICB3cml0ZS10aHJvdWdoOyBubyB3cml0ZSBhbGxvY2F0ZSAgICB8ICBTIGJpdCAgICAgICAgICAgICAgICAgIHwNCisgKy0tLS0tKy0tLSstLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQorIHwgMDAwIHwgMSB8IDEgfCBOb3JtYWwgICAgICAgICAgICAgICAgIHwgIE91dGVyIGFuZCBpbm5lciAgIHdyaXRlLWJhY2s7IG5vIHdyaXRlIGFsbG9jYXRlICAgICAgIHwgIFMgYml0ICAgICAgICAgICAgICAgICAgfA0KKyArLS0tLS0rLS0tKy0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCisgfCAwMDEgfCAwIHwgMCB8IE5vcm1hbCAgICAgICAgICAgICAgICAgfCAgT3V0ZXIgYW5kIGlubmVyICAgTm9uLWNhY2hlYWJsZSAgICAgICAgICAgICAgICAgICAgICAgfCAgUyBiaXQgICAgICAgICAgICAgICAgICB8DQorICstLS0tLSstLS0rLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KKyB8IDAwMSB8IDAgfCAxIHwgUmVzZXJ2ZWQgICAgICAgICAgICAgICB8ICBSZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBSZXNlcnZlZCAgICAgICAgICAgICAgIHwNCisgKy0tLS0tKy0tLSstLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQorIHwgMDAxIHwgMSB8IDAgfCBJTVBMRU1FTlRBVElPTiBERUZJTkVEIHwgIElNUExFTUVOVEFUSU9OIERFRklORUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIElNUExFTUVOVEFUSU9OIERFRklORUQgfA0KKyArLS0tLS0rLS0tKy0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCisgfCAwMDEgfCAxIHwgMSB8IE5vcm1hbCAgICAgICAgICAgICAgICAgfCAgT3V0ZXIgYW5kIGlubmVyICAgd3JpdGUtYmFjazsgd3JpdGUgYW5kIHJlYWQgYWxsb2NhdGUgfCAgUyBiaXQgICAgICAgICAgICAgICAgICB8DQorICstLS0tLSstLS0rLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KKyB8IDAxMCB8IDAgfCAwIHwgRGV2aWNlICAgICAgICAgICAgICAgICB8ICBOb24tc2hhcmVkIGRldmljZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBOb3Qgc2hhcmVhYmxlICAgICAgICAgIHwNCisgKy0tLS0tKy0tLSstLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQorIHwgMDEwIHwgMCB8IDEgfCBSZXNlcnZlZCAgICAgICAgICAgICAgIHwgIFJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFJlc2VydmVkICAgICAgICAgICAgICAgfA0KKyArLS0tLS0rLS0tKy0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCisgfCAwMTAgfCAxIHwgWCB8IFJlc2VydmVkICAgICAgICAgICAgICAgfCAgUmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgUmVzZXJ2ZWQgICAgICAgICAgICAgICB8DQorICstLS0tLSstLS0rLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KKyB8IDAxMSB8IFggfCBYIHwgUmVzZXJ2ZWQgICAgICAgICAgICAgICB8ICBSZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBSZXNlcnZlZCAgICAgICAgICAgICAgIHwNCisgKy0tLS0tKy0tLSstLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQorIHwgMUJCIHwgQSB8IEEgfCBOb3JtYWwgICAgICAgICAgICAgICAgIHwgQ2FjaGVkIG1lbW9yeSwgd2l0aCBBQSBhbmQgQkIgaW5kaWNhdGluZyB0aGUgaW5uZXIgYW5kIHwgIFJlc2VydmVkICAgICAgICAgICAgICAgfA0KKyB8ICAgICB8ICAgfCAgIHwgICAgICAgICAgICAgICAgICAgICAgICB8IG91dGVyIGNhY2hlYWJpbGl0eSBydWxlcyB0aGF0IG11c3QgYmUgZXhwb3J0ZWQgb24gdGhlICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgfCAgICAgfCAgIHwgICB8ICAgICAgICAgICAgICAgICAgICAgICAgfCBidXMuIFNlZSB0aGUgdGFibGUgYmVsb3cgZm9yIHRoZSBjYWNoZWFiaWxpdHkgcG9saWN5ICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8DQorIHwgICAgIHwgICB8ICAgfCAgICAgICAgICAgICAgICAgICAgICAgIHwgZW5jb2RpbmcuIG1lbW9yeSwgQkI9T3V0ZXIgcG9saWN5LCBBQT1Jbm5lciBwb2xpY3kuICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyArLS0tLS0rLS0tKy0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCisgfA0KKyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCisgfCBBQSBvciBCQiBzdWJmaWVsZCBvZiB7VEVYLEMsQn0gZW5jb2RpbmcgfCAgQ2FjaGVhYmlsaXR5IHBvbGljeSAgICAgICAgICAgICAgICAgICB8DQorICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KKyB8IDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBOb24tY2FjaGVhYmxlICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQorIHwgMDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFdyaXRlLWJhY2ssIHdyaXRlIGFuZCAgIHJlYWQgYWxsb2NhdGUgfA0KKyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCisgfCAxMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgV3JpdGUtdGhyb3VnaCwgbm8gd3JpdGUgICBhbGxvY2F0ZSAgICB8DQorICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KKyB8IDExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBXcml0ZS1iYWNrLCBubyB3cml0ZSAgIGFsbG9jYXRlICAgICAgIHwNCisgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQorICovDQogDQotICAgIC8qIFRFWCwgU2hhcmVhYmxlIChTKSwgQ2FjaGVhYmxlIChDKSBhbmQgQnVmZmVyYWJsZSAoQikgYml0cyBmb3IgZmxhc2gNCi0gICAgICogcmVnaW9uLiAqLw0KLSAgICAjaWZuZGVmIGNvbmZpZ1RFWF9TX0NfQl9GTEFTSA0KLSAgICAgICAgLyogRGVmYXVsdCB0byBURVg9MDAwLCBTPTEsIEM9MSwgQj0xIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAqLw0KLSAgICAgICAgI2RlZmluZSBjb25maWdURVhfU19DX0JfRkxBU0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMHgwN1VMICkNCi0gICAgI2VuZGlmDQorLyogVEVYLCBTaGFyZWFibGUgKFMpLCBDYWNoZWFibGUgKEMpIGFuZCBCdWZmZXJhYmxlIChCKSBiaXRzIGZvciBmbGFzaA0KKyAqIHJlZ2lvbi4gKi8NCisjaWZuZGVmIGNvbmZpZ1RFWF9TX0NfQl9GTEFTSA0KKyAgICAvKiBEZWZhdWx0IHRvIFRFWD0wMDAsIFM9MSwgQz0xLCBCPTEgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuICovDQorICAgICNkZWZpbmUgY29uZmlnVEVYX1NfQ19CX0ZMQVNIICAgICggMHgwN1VMICkNCisjZW5kaWYNCiANCi0gICAgLyogVEVYLCBTaGFyZWFibGUgKFMpLCBDYWNoZWFibGUgKEMpIGFuZCBCdWZmZXJhYmxlIChCKSBiaXRzIGZvciBSQU0NCi0gICAgICogcmVnaW9uLiAqLw0KLSAgICAjaWZuZGVmIGNvbmZpZ1RFWF9TX0NfQl9TUkFNDQotICAgICAgICAvKiBEZWZhdWx0IHRvIFRFWD0wMDAsIFM9MSwgQz0xLCBCPTEgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuICovDQotICAgICAgICAjZGVmaW5lIGNvbmZpZ1RFWF9TX0NfQl9TUkFNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAweDA3VUwgKQ0KLSAgICAjZW5kaWYNCisvKiBURVgsIFNoYXJlYWJsZSAoUyksIENhY2hlYWJsZSAoQykgYW5kIEJ1ZmZlcmFibGUgKEIpIGJpdHMgZm9yIFJBTQ0KKyAqIHJlZ2lvbi4gKi8NCisjaWZuZGVmIGNvbmZpZ1RFWF9TX0NfQl9TUkFNDQorICAgIC8qIERlZmF1bHQgdG8gVEVYPTAwMCwgUz0xLCBDPTEsIEI9MSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gKi8NCisgICAgI2RlZmluZSBjb25maWdURVhfU19DX0JfU1JBTSAgICAgICAgICAoIDB4MDdVTCApDQorI2VuZGlmDQogDQotICAgICNkZWZpbmUgcG9ydFVOUFJJVklMRUdFRF9GTEFTSF9SRUdJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAwVUwgKQ0KLSAgICAjZGVmaW5lIHBvcnRQUklWSUxFR0VEX0ZMQVNIX1JFR0lPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMVVMICkNCi0gICAgI2RlZmluZSBwb3J0UFJJVklMRUdFRF9SQU1fUkVHSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDJVTCApDQotICAgICNkZWZpbmUgcG9ydEdFTkVSQUxfUEVSSVBIRVJBTFNfUkVHSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAzVUwgKQ0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19SRUdJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggNFVMICkNCi0gICAgI2RlZmluZSBwb3J0RklSU1RfQ09ORklHVVJBQkxFX1JFR0lPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDVVTCApDQotICAgICNkZWZpbmUgcG9ydFRPVEFMX05VTV9SRUdJT05TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBjb25maWdUT1RBTF9NUFVfUkVHSU9OUyApDQotICAgICNkZWZpbmUgcG9ydE5VTV9DT05GSUdVUkFCTEVfUkVHSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBwb3J0VE9UQUxfTlVNX1JFR0lPTlMgLSBwb3J0RklSU1RfQ09ORklHVVJBQkxFX1JFR0lPTiApDQotICAgICNkZWZpbmUgcG9ydExBU1RfQ09ORklHVVJBQkxFX1JFR0lPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBwb3J0VE9UQUxfTlVNX1JFR0lPTlMgLSAxICkNCisjZGVmaW5lIHBvcnRVTlBSSVZJTEVHRURfRkxBU0hfUkVHSU9OICAgICAoIDBVTCApDQorI2RlZmluZSBwb3J0UFJJVklMRUdFRF9GTEFTSF9SRUdJT04gICAgICAgKCAxVUwgKQ0KKyNkZWZpbmUgcG9ydFBSSVZJTEVHRURfUkFNX1JFR0lPTiAgICAgICAgICggMlVMICkNCisjZGVmaW5lIHBvcnRHRU5FUkFMX1BFUklQSEVSQUxTX1JFR0lPTiAgICAoIDNVTCApDQorI2RlZmluZSBwb3J0U1RBQ0tfUkVHSU9OICAgICAgICAgICAgICAgICAgKCA0VUwgKQ0KKyNkZWZpbmUgcG9ydEZJUlNUX0NPTkZJR1VSQUJMRV9SRUdJT04gICAgICggNVVMICkNCisjZGVmaW5lIHBvcnRUT1RBTF9OVU1fUkVHSU9OUyAgICAgICAgICAgICAoIGNvbmZpZ1RPVEFMX01QVV9SRUdJT05TICkNCisjZGVmaW5lIHBvcnROVU1fQ09ORklHVVJBQkxFX1JFR0lPTlMgICAgICAoIHBvcnRUT1RBTF9OVU1fUkVHSU9OUyAtIHBvcnRGSVJTVF9DT05GSUdVUkFCTEVfUkVHSU9OICkNCisjZGVmaW5lIHBvcnRMQVNUX0NPTkZJR1VSQUJMRV9SRUdJT04gICAgICAoIHBvcnRUT1RBTF9OVU1fUkVHSU9OUyAtIDEgKQ0KIA0KLSAgICAjZGVmaW5lIHBvcnRTV0lUQ0hfVE9fVVNFUl9NT0RFKCkgICAgX19hc20gdm9sYXRpbGUgKCAiIG1ycyByMCwgY29udHJvbCBcbiBvcnIgcjAsICMxIFxuIG1zciBjb250cm9sLCByMCAiIDo6OiAicjAiLCAibWVtb3J5IiApDQorI2RlZmluZSBwb3J0U1dJVENIX1RPX1VTRVJfTU9ERSgpICAgIF9fYXNtIHZvbGF0aWxlICggIiBtcnMgcjAsIGNvbnRyb2wgXG4gb3JyIHIwLCAjMSBcbiBtc3IgY29udHJvbCwgcjAgIiA6OjogInIwIiwgIm1lbW9yeSIgKQ0KIA0KLSAgICB0eXBlZGVmIHN0cnVjdCBNUFVfUkVHSU9OX1JFR0lTVEVSUw0KLSAgICB7DQotICAgICAgICB1aW50MzJfdCB1bFJlZ2lvbkJhc2VBZGRyZXNzOw0KLSAgICAgICAgdWludDMyX3QgdWxSZWdpb25BdHRyaWJ1dGU7DQotICAgIH0geE1QVV9SRUdJT05fUkVHSVNURVJTOw0KK3R5cGVkZWYgc3RydWN0IE1QVV9SRUdJT05fUkVHSVNURVJTDQorew0KKyAgICB1aW50MzJfdCB1bFJlZ2lvbkJhc2VBZGRyZXNzOw0KKyAgICB1aW50MzJfdCB1bFJlZ2lvbkF0dHJpYnV0ZTsNCit9IHhNUFVfUkVHSU9OX1JFR0lTVEVSUzsNCiANCiAvKiBQbHVzIDEgdG8gY3JlYXRlIHNwYWNlIGZvciB0aGUgc3RhY2sgcmVnaW9uLiAqLw0KLSAgICB0eXBlZGVmIHN0cnVjdCBNUFVfU0VUVElOR1MNCi0gICAgew0KLSAgICAgICAgeE1QVV9SRUdJT05fUkVHSVNURVJTIHhSZWdpb25bIHBvcnRUT1RBTF9OVU1fUkVHSU9OUyBdOw0KLSAgICB9IHhNUFVfU0VUVElOR1M7DQordHlwZWRlZiBzdHJ1Y3QgTVBVX1NFVFRJTkdTDQorew0KKyAgICB4TVBVX1JFR0lPTl9SRUdJU1RFUlMgeFJlZ2lvblsgcG9ydFRPVEFMX05VTV9SRUdJT05TIF07DQorfSB4TVBVX1NFVFRJTkdTOw0KIA0KIC8qIEFyY2hpdGVjdHVyZSBzcGVjaWZpY3MuICovDQotICAgICNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSCAgICAgICggLTEgKQ0KLSAgICAjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUyAgICAoICggVGlja1R5cGVfdCApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KLSAgICAjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVCAgICA4DQotICAgICNkZWZpbmUgcG9ydERPTlRfRElTQ0FSRCAgICAgIF9fYXR0cmlidXRlX18oICggdXNlZCApICkNCisjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEggICAgICAoIC0xICkNCisjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUyAgICAoICggVGlja1R5cGVfdCApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UICAgIDgNCisjZGVmaW5lIHBvcnRET05UX0RJU0NBUkQgICAgICBfX2F0dHJpYnV0ZV9fKCAoIHVzZWQgKSApDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogU1ZDIG51bWJlcnMgZm9yIHZhcmlvdXMgc2VydmljZXMuICovDQotICAgICNkZWZpbmUgcG9ydFNWQ19TVEFSVF9TQ0hFRFVMRVIgICAgMA0KLSAgICAjZGVmaW5lIHBvcnRTVkNfWUlFTEQgICAgICAgICAgICAgIDENCi0gICAgI2RlZmluZSBwb3J0U1ZDX1JBSVNFX1BSSVZJTEVHRSAgICAyDQorI2RlZmluZSBwb3J0U1ZDX1NUQVJUX1NDSEVEVUxFUiAgICAwDQorI2RlZmluZSBwb3J0U1ZDX1lJRUxEICAgICAgICAgICAgICAxDQorI2RlZmluZSBwb3J0U1ZDX1JBSVNFX1BSSVZJTEVHRSAgICAyDQogDQogLyogU2NoZWR1bGVyIHV0aWxpdGllcy4gKi8NCiANCi0gICAgI2RlZmluZSBwb3J0WUlFTEQoKSAgICBfX2FzbSB2b2xhdGlsZSAoICIJU1ZDCSUwCVxuIjo6ImkiICggcG9ydFNWQ19ZSUVMRCApIDogIm1lbW9yeSIgKQ0KLSAgICAjZGVmaW5lIHBvcnRZSUVMRF9XSVRISU5fQVBJKCkgICAgICAgICAgICAgICAgICAgICAgXA0KKyNkZWZpbmUgcG9ydFlJRUxEKCkgICAgX19hc20gdm9sYXRpbGUgKCAiCVNWQwklMAlcbiI6OiJpIiAoIHBvcnRTVkNfWUlFTEQgKSA6ICJtZW1vcnkiICkNCisjZGVmaW5lIHBvcnRZSUVMRF9XSVRISU5fQVBJKCkgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCiAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCiAgICAgICAgIC8qIFNldCBhIFBlbmRTViB0byByZXF1ZXN0IGEgY29udGV4dCBzd2l0Y2guICovIFwNCiAgICAgICAgIHBvcnROVklDX0lOVF9DVFJMX1JFRyA9IHBvcnROVklDX1BFTkRTVlNFVF9CSVQ7IFwNCkBAIC0yMTcsMTc4ICsyMjEsMTgxIEBACiAgICAgICAgIF9fYXNtIHZvbGF0aWxlICggImlzYiIgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KICAgICB9DQogDQotICAgICNkZWZpbmUgcG9ydE5WSUNfSU5UX0NUUkxfUkVHICAgICAoICooICggdm9sYXRpbGUgdWludDMyX3QgKiApIDB4ZTAwMGVkMDQgKSApDQotICAgICNkZWZpbmUgcG9ydE5WSUNfUEVORFNWU0VUX0JJVCAgICAoIDFVTCA8PCAyOFVMICkNCi0gICAgI2RlZmluZSBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHhTd2l0Y2hSZXF1aXJlZCApICAgIGlmKCB4U3dpdGNoUmVxdWlyZWQgKSBwb3J0TlZJQ19JTlRfQ1RSTF9SRUcgPSBwb3J0TlZJQ19QRU5EU1ZTRVRfQklUDQotICAgICNkZWZpbmUgcG9ydFlJRUxEX0ZST01fSVNSKCB4ICkgICAgICAgICAgICAgICAgICAgICBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHggKQ0KKyNkZWZpbmUgcG9ydE5WSUNfSU5UX0NUUkxfUkVHICAgICAoICooICggdm9sYXRpbGUgdWludDMyX3QgKiApIDB4ZTAwMGVkMDQgKSApDQorI2RlZmluZSBwb3J0TlZJQ19QRU5EU1ZTRVRfQklUICAgICggMVVMIDw8IDI4VUwgKQ0KKyNkZWZpbmUgcG9ydEVORF9TV0lUQ0hJTkdfSVNSKCB4U3dpdGNoUmVxdWlyZWQgKSAgICBpZiggeFN3aXRjaFJlcXVpcmVkICkgcG9ydE5WSUNfSU5UX0NUUkxfUkVHID0gcG9ydE5WSUNfUEVORFNWU0VUX0JJVA0KKyNkZWZpbmUgcG9ydFlJRUxEX0ZST01fSVNSKCB4ICkgICAgICAgICAgICAgICAgICAgICBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHggKQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIENyaXRpY2FsIHNlY3Rpb24gbWFuYWdlbWVudC4gKi8NCi0gICAgZXh0ZXJuIHZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICk7DQotICAgIGV4dGVybiB2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICk7DQotICAgICNkZWZpbmUgcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpICAgICAgICAgdWxQb3J0UmFpc2VCQVNFUFJJKCkNCi0gICAgI2RlZmluZSBwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoIHggKSAgICB2UG9ydFNldEJBU0VQUkkoIHggKQ0KLSAgICAjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAgICAgICAgICAgICAgICAgIHZQb3J0UmFpc2VCQVNFUFJJKCkNCi0gICAgI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKSAgICAgICAgICAgICAgICAgICB2UG9ydFNldEJBU0VQUkkoIDAgKQ0KLSAgICAjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpICAgICAgICAgICAgICAgICAgICAgIHZQb3J0RW50ZXJDcml0aWNhbCgpDQotICAgICNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKSAgICAgICAgICAgICAgICAgICAgICAgdlBvcnRFeGl0Q3JpdGljYWwoKQ0KK2V4dGVybiB2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCggdm9pZCApOw0KK2V4dGVybiB2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICk7DQorI2RlZmluZSBwb3J0U0VUX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCkgICAgICAgICB1bFBvcnRSYWlzZUJBU0VQUkkoKQ0KKyNkZWZpbmUgcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCB4ICkgICAgdlBvcnRTZXRCQVNFUFJJKCB4ICkNCisjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAgICAgICAgICAgICAgICAgIHZQb3J0UmFpc2VCQVNFUFJJKCkNCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpICAgICAgICAgICAgICAgICAgIHZQb3J0U2V0QkFTRVBSSSggMCApDQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKSAgICAgICAgICAgICAgICAgICAgICB2UG9ydEVudGVyQ3JpdGljYWwoKQ0KKyNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKSAgICAgICAgICAgICAgICAgICAgICAgdlBvcnRFeGl0Q3JpdGljYWwoKQ0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAgVGhlc2UgYXJlDQogICogbm90IG5lY2Vzc2FyeSBmb3IgdG8gdXNlIHRoaXMgcG9ydC4gIFRoZXkgYXJlIGRlZmluZWQgc28gdGhlIGNvbW1vbiBkZW1vIGZpbGVzDQogICogKHdoaWNoIGJ1aWxkIHdpdGggYWxsIHRoZSBwb3J0cykgd2lsbCBidWlsZC4gKi8NCi0gICAgI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQotICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgICAgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgICAgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIEFyY2hpdGVjdHVyZSBzcGVjaWZpYyBvcHRpbWlzYXRpb25zLiAqLw0KLSAgICAjaWZuZGVmIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTg0KLSAgICAgICAgI2RlZmluZSBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gICAgMQ0KLSAgICAjZW5kaWYNCisjaWZuZGVmIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTg0KKyAgICAjZGVmaW5lIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiAgICAxDQorI2VuZGlmDQogDQotICAgICNpZiBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gPT0gMQ0KKyNpZiBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gPT0gMQ0KIA0KIC8qIEdlbmVyaWMgaGVscGVyIGZ1bmN0aW9uLiAqLw0KLSAgICAgICAgX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBzdGF0aWMgaW5saW5lIHVpbnQ4X3QgdWNQb3J0Q291bnRMZWFkaW5nWmVyb3MoIHVpbnQzMl90IHVsQml0bWFwICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICB1aW50OF90IHVjUmV0dXJuOw0KKyAgICBfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIHN0YXRpYyBpbmxpbmUgdWludDhfdCB1Y1BvcnRDb3VudExlYWRpbmdaZXJvcyggdWludDMyX3QgdWxCaXRtYXAgKQ0KKyAgICB7DQorICAgICAgICB1aW50OF90IHVjUmV0dXJuOw0KIA0KLSAgICAgICAgICAgIF9fYXNtIHZvbGF0aWxlICggImNseiAlMCwgJTEiIDogIj1yIiAoIHVjUmV0dXJuICkgOiAiciIgKCB1bEJpdG1hcCApIDogIm1lbW9yeSIgKTsNCisgICAgICAgIF9fYXNtIHZvbGF0aWxlICggImNseiAlMCwgJTEiIDogIj1yIiAoIHVjUmV0dXJuICkgOiAiciIgKCB1bEJpdG1hcCApIDogIm1lbW9yeSIgKTsNCiANCi0gICAgICAgICAgICByZXR1cm4gdWNSZXR1cm47DQotICAgICAgICB9DQorICAgICAgICByZXR1cm4gdWNSZXR1cm47DQorICAgIH0NCiANCiAvKiBDaGVjayB0aGUgY29uZmlndXJhdGlvbi4gKi8NCi0gICAgICAgICNpZiAoIGNvbmZpZ01BWF9QUklPUklUSUVTID4gMzIgKQ0KLSAgICAgICAgICAgICNlcnJvciBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gY2FuIG9ubHkgYmUgc2V0IHRvIDEgd2hlbiBjb25maWdNQVhfUFJJT1JJVElFUyBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMzIuICBJdCBpcyB2ZXJ5IHJhcmUgdGhhdCBhIHN5c3RlbSByZXF1aXJlcyBtb3JlIHRoYW4gMTAgdG8gMTUgZGlmZmVyZW5jZSBwcmlvcml0aWVzIGFzIHRhc2tzIHRoYXQgc2hhcmUgYSBwcmlvcml0eSB3aWxsIHRpbWUgc2xpY2UuDQotICAgICAgICAjZW5kaWYNCisgICAgI2lmICggY29uZmlnTUFYX1BSSU9SSVRJRVMgPiAzMiApDQorICAgICAgICAjZXJyb3IgY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OIGNhbiBvbmx5IGJlIHNldCB0byAxIHdoZW4gY29uZmlnTUFYX1BSSU9SSVRJRVMgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDMyLiAgSXQgaXMgdmVyeSByYXJlIHRoYXQgYSBzeXN0ZW0gcmVxdWlyZXMgbW9yZSB0aGFuIDEwIHRvIDE1IGRpZmZlcmVuY2UgcHJpb3JpdGllcyBhcyB0YXNrcyB0aGF0IHNoYXJlIGEgcHJpb3JpdHkgd2lsbCB0aW1lIHNsaWNlLg0KKyAgICAjZW5kaWYNCiANCiAvKiBTdG9yZS9jbGVhciB0aGUgcmVhZHkgcHJpb3JpdGllcyBpbiBhIGJpdCBtYXAuICovDQotICAgICAgICAjZGVmaW5lIHBvcnRSRUNPUkRfUkVBRFlfUFJJT1JJVFkoIHV4UHJpb3JpdHksIHV4UmVhZHlQcmlvcml0aWVzICkgICAgKCB1eFJlYWR5UHJpb3JpdGllcyApIHw9ICggMVVMIDw8ICggdXhQcmlvcml0eSApICkNCi0gICAgICAgICNkZWZpbmUgcG9ydFJFU0VUX1JFQURZX1BSSU9SSVRZKCB1eFByaW9yaXR5LCB1eFJlYWR5UHJpb3JpdGllcyApICAgICAoIHV4UmVhZHlQcmlvcml0aWVzICkgJj0gfiggMVVMIDw8ICggdXhQcmlvcml0eSApICkNCisgICAgI2RlZmluZSBwb3J0UkVDT1JEX1JFQURZX1BSSU9SSVRZKCB1eFByaW9yaXR5LCB1eFJlYWR5UHJpb3JpdGllcyApICAgICggdXhSZWFkeVByaW9yaXRpZXMgKSB8PSAoIDFVTCA8PCAoIHV4UHJpb3JpdHkgKSApDQorICAgICNkZWZpbmUgcG9ydFJFU0VUX1JFQURZX1BSSU9SSVRZKCB1eFByaW9yaXR5LCB1eFJlYWR5UHJpb3JpdGllcyApICAgICAoIHV4UmVhZHlQcmlvcml0aWVzICkgJj0gfiggMVVMIDw8ICggdXhQcmlvcml0eSApICkNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0gICAgICAgICNkZWZpbmUgcG9ydEdFVF9ISUdIRVNUX1BSSU9SSVRZKCB1eFRvcFByaW9yaXR5LCB1eFJlYWR5UHJpb3JpdGllcyApICAgIHV4VG9wUHJpb3JpdHkgPSAoIDMxVUwgLSAoIHVpbnQzMl90ICkgdWNQb3J0Q291bnRMZWFkaW5nWmVyb3MoICggdXhSZWFkeVByaW9yaXRpZXMgKSApICkNCisgICAgI2RlZmluZSBwb3J0R0VUX0hJR0hFU1RfUFJJT1JJVFkoIHV4VG9wUHJpb3JpdHksIHV4UmVhZHlQcmlvcml0aWVzICkgICAgdXhUb3BQcmlvcml0eSA9ICggMzFVTCAtICggdWludDMyX3QgKSB1Y1BvcnRDb3VudExlYWRpbmdaZXJvcyggKCB1eFJlYWR5UHJpb3JpdGllcyApICkgKQ0KIA0KLSAgICAjZW5kaWYgLyogY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OICovDQorI2VuZGlmIC8qIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiAqLw0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KLSAgICAjaWZkZWYgY29uZmlnQVNTRVJUDQotICAgICAgICB2b2lkIHZQb3J0VmFsaWRhdGVJbnRlcnJ1cHRQcmlvcml0eSggdm9pZCApOw0KLSAgICAgICAgI2RlZmluZSBwb3J0QVNTRVJUX0lGX0lOVEVSUlVQVF9QUklPUklUWV9JTlZBTElEKCkgICAgdlBvcnRWYWxpZGF0ZUludGVycnVwdFByaW9yaXR5KCkNCi0gICAgI2VuZGlmDQorI2lmZGVmIGNvbmZpZ0FTU0VSVA0KKyAgICB2b2lkIHZQb3J0VmFsaWRhdGVJbnRlcnJ1cHRQcmlvcml0eSggdm9pZCApOw0KKyAgICAjZGVmaW5lIHBvcnRBU1NFUlRfSUZfSU5URVJSVVBUX1BSSU9SSVRZX0lOVkFMSUQoKSAgICB2UG9ydFZhbGlkYXRlSW50ZXJydXB0UHJpb3JpdHkoKQ0KKyNlbmRpZg0KIA0KIC8qIHBvcnROT1AoKSBpcyBub3QgcmVxdWlyZWQgYnkgdGhpcyBwb3J0LiAqLw0KLSAgICAjZGVmaW5lIHBvcnROT1AoKQ0KKyNkZWZpbmUgcG9ydE5PUCgpDQogDQotICAgICNkZWZpbmUgcG9ydElOTElORSAgICAgICAgICAgICAgX19pbmxpbmUNCisjZGVmaW5lIHBvcnRJTkxJTkUgICAgICAgICAgICAgIF9faW5saW5lDQogDQotICAgICNpZm5kZWYgcG9ydEZPUkNFX0lOTElORQ0KLSAgICAgICAgI2RlZmluZSBwb3J0Rk9SQ0VfSU5MSU5FICAgIGlubGluZSBfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApDQotICAgICNlbmRpZg0KKyNpZm5kZWYgcG9ydEZPUkNFX0lOTElORQ0KKyAgICAjZGVmaW5lIHBvcnRGT1JDRV9JTkxJTkUgICAgaW5saW5lIF9fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkNCisjZW5kaWYNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0gICAgZXh0ZXJuIEJhc2VUeXBlX3QgeElzUHJpdmlsZWdlZCggdm9pZCApOw0KLSAgICBleHRlcm4gdm9pZCB2UmVzZXRQcml2aWxlZ2UoIHZvaWQgKTsNCitleHRlcm4gQmFzZVR5cGVfdCB4SXNQcml2aWxlZ2VkKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdlJlc2V0UHJpdmlsZWdlKCB2b2lkICk7DQogDQogLyoqDQogICogQGJyaWVmIENoZWNrcyB3aGV0aGVyIG9yIG5vdCB0aGUgcHJvY2Vzc29yIGlzIHByaXZpbGVnZWQuDQogICoNCiAgKiBAcmV0dXJuIDEgaWYgdGhlIHByb2Nlc3NvciBpcyBhbHJlYWR5IHByaXZpbGVnZWQsIDAgb3RoZXJ3aXNlLg0KICAqLw0KLSAgICAjZGVmaW5lIHBvcnRJU19QUklWSUxFR0VEKCkgICAgICB4SXNQcml2aWxlZ2VkKCkNCisjZGVmaW5lIHBvcnRJU19QUklWSUxFR0VEKCkgICAgICB4SXNQcml2aWxlZ2VkKCkNCiANCiAvKioNCiAgKiBAYnJpZWYgUmFpc2UgYW4gU1ZDIHJlcXVlc3QgdG8gcmFpc2UgcHJpdmlsZWdlLg0KICAqLw0KLSAgICAjZGVmaW5lIHBvcnRSQUlTRV9QUklWSUxFR0UoKSAgICBfX2FzbSB2b2xhdGlsZSAoICJzdmMgJTAgXG4iIDo6ImkiICggcG9ydFNWQ19SQUlTRV9QUklWSUxFR0UgKSA6ICJtZW1vcnkiICk7DQorI2RlZmluZSBwb3J0UkFJU0VfUFJJVklMRUdFKCkgICAgX19hc20gdm9sYXRpbGUgKCAic3ZjICUwIFxuIiA6OiJpIiAoIHBvcnRTVkNfUkFJU0VfUFJJVklMRUdFICkgOiAibWVtb3J5IiApOw0KIA0KIC8qKg0KICAqIEBicmllZiBMb3dlcnMgdGhlIHByaXZpbGVnZSBsZXZlbCBieSBzZXR0aW5nIHRoZSBiaXQgMCBvZiB0aGUgQ09OVFJPTA0KICAqIHJlZ2lzdGVyLg0KICAqLw0KLSAgICAjZGVmaW5lIHBvcnRSRVNFVF9QUklWSUxFR0UoKSAgICB2UmVzZXRQcml2aWxlZ2UoKQ0KKyNkZWZpbmUgcG9ydFJFU0VUX1BSSVZJTEVHRSgpICAgIHZSZXNldFByaXZpbGVnZSgpDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQotICAgIHBvcnRGT1JDRV9JTkxJTkUgc3RhdGljIEJhc2VUeXBlX3QgeFBvcnRJc0luc2lkZUludGVycnVwdCggdm9pZCApDQorcG9ydEZPUkNFX0lOTElORSBzdGF0aWMgQmFzZVR5cGVfdCB4UG9ydElzSW5zaWRlSW50ZXJydXB0KCB2b2lkICkNCit7DQorICAgIHVpbnQzMl90IHVsQ3VycmVudEludGVycnVwdDsNCisgICAgQmFzZVR5cGVfdCB4UmV0dXJuOw0KKw0KKyAgICAvKiBPYnRhaW4gdGhlIG51bWJlciBvZiB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBpbnRlcnJ1cHQuICovDQorICAgIF9fYXNtIHZvbGF0aWxlICggIm1ycyAlMCwgaXBzciIgOiAiPXIiICggdWxDdXJyZW50SW50ZXJydXB0ICk6OiJtZW1vcnkiICk7DQorDQorICAgIGlmKCB1bEN1cnJlbnRJbnRlcnJ1cHQgPT0gMCApDQogICAgIHsNCi0gICAgICAgIHVpbnQzMl90IHVsQ3VycmVudEludGVycnVwdDsNCi0gICAgICAgIEJhc2VUeXBlX3QgeFJldHVybjsNCi0NCi0gICAgICAgIC8qIE9idGFpbiB0aGUgbnVtYmVyIG9mIHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nIGludGVycnVwdC4gKi8NCi0gICAgICAgIF9fYXNtIHZvbGF0aWxlICggIm1ycyAlMCwgaXBzciIgOiAiPXIiICggdWxDdXJyZW50SW50ZXJydXB0ICk6OiJtZW1vcnkiICk7DQotDQotICAgICAgICBpZiggdWxDdXJyZW50SW50ZXJydXB0ID09IDAgKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHhSZXR1cm4gPSBwZEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZWxzZQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHhSZXR1cm4gPSBwZFRSVUU7DQotICAgICAgICB9DQotDQotICAgICAgICByZXR1cm4geFJldHVybjsNCisgICAgICAgIHhSZXR1cm4gPSBwZEZBTFNFOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgeFJldHVybiA9IHBkVFJVRTsNCiAgICAgfQ0KIA0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KLQ0KLSAgICBwb3J0Rk9SQ0VfSU5MSU5FIHN0YXRpYyB2b2lkIHZQb3J0UmFpc2VCQVNFUFJJKCB2b2lkICkNCi0gICAgew0KLSAgICAgICAgdWludDMyX3QgdWxOZXdCQVNFUFJJOw0KLQ0KLSAgICAgICAgX19hc20gdm9sYXRpbGUNCi0gICAgICAgICgNCi0gICAgICAgICAgICAiCW1vdiAlMCwgJTEJCQkJCQkJCQkJCQlcbiJcDQotICAgICAgICAgICAgIgltc3IgYmFzZXByaSwgJTAJCQkJCQkJCQkJCVxuIlwNCi0gICAgICAgICAgICAiCWlzYgkJCQkJCQkJCQkJCQkJXG4iXA0KLSAgICAgICAgICAgICIJZHNiCQkJCQkJCQkJCQkJCQlcbiJcDQotICAgICAgICAgICAgOiAiPXIiICggdWxOZXdCQVNFUFJJICkgOiAiaSIgKCBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgKSA6ICJtZW1vcnkiDQotICAgICAgICApOw0KLSAgICB9DQorICAgIHJldHVybiB4UmV0dXJuOw0KK30NCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0gICAgcG9ydEZPUkNFX0lOTElORSBzdGF0aWMgdWludDMyX3QgdWxQb3J0UmFpc2VCQVNFUFJJKCB2b2lkICkNCi0gICAgew0KLSAgICAgICAgdWludDMyX3QgdWxPcmlnaW5hbEJBU0VQUkksIHVsTmV3QkFTRVBSSTsNCitwb3J0Rk9SQ0VfSU5MSU5FIHN0YXRpYyB2b2lkIHZQb3J0UmFpc2VCQVNFUFJJKCB2b2lkICkNCit7DQorICAgIHVpbnQzMl90IHVsTmV3QkFTRVBSSTsNCiANCi0gICAgICAgIF9fYXNtIHZvbGF0aWxlDQotICAgICAgICAoDQotICAgICAgICAgICAgIgltcnMgJTAsIGJhc2VwcmkJCQkJCQkJCQkJCVxuIlwNCi0gICAgICAgICAgICAiCW1vdiAlMSwgJTIJCQkJCQkJCQkJCQlcbiJcDQotICAgICAgICAgICAgIgltc3IgYmFzZXByaSwgJTEJCQkJCQkJCQkJCVxuIlwNCi0gICAgICAgICAgICAiCWlzYgkJCQkJCQkJCQkJCQkJXG4iXA0KLSAgICAgICAgICAgICIJZHNiCQkJCQkJCQkJCQkJCQlcbiJcDQotICAgICAgICAgICAgOiAiPXIiICggdWxPcmlnaW5hbEJBU0VQUkkgKSwgIj1yIiAoIHVsTmV3QkFTRVBSSSApIDogImkiICggY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkgOiAibWVtb3J5Ig0KLSAgICAgICAgKTsNCisgICAgX19hc20gdm9sYXRpbGUNCisgICAgKA0KKyAgICAgICAgIgltb3YgJTAsICUxCQkJCQkJCQkJCQkJXG4iXA0KKyAgICAgICAgIgltc3IgYmFzZXByaSwgJTAJCQkJCQkJCQkJCVxuIlwNCisgICAgICAgICIJaXNiCQkJCQkJCQkJCQkJCQlcbiJcDQorICAgICAgICAiCWRzYgkJCQkJCQkJCQkJCQkJXG4iXA0KKyAgICAgICAgOiAiPXIiICggdWxOZXdCQVNFUFJJICkgOiAiaSIgKCBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgKSA6ICJtZW1vcnkiDQorICAgICk7DQorfQ0KIA0KLSAgICAgICAgLyogVGhpcyByZXR1cm4gd2lsbCBub3QgYmUgcmVhY2hlZCBidXQgaXMgbmVjZXNzYXJ5IHRvIHByZXZlbnQgY29tcGlsZXINCi0gICAgICAgICAqIHdhcm5pbmdzLiAqLw0KLSAgICAgICAgcmV0dXJuIHVsT3JpZ2luYWxCQVNFUFJJOw0KLSAgICB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQotICAgIHBvcnRGT1JDRV9JTkxJTkUgc3RhdGljIHZvaWQgdlBvcnRTZXRCQVNFUFJJKCB1aW50MzJfdCB1bE5ld01hc2tWYWx1ZSApDQotICAgIHsNCi0gICAgICAgIF9fYXNtIHZvbGF0aWxlDQotICAgICAgICAoDQotICAgICAgICAgICAgIgltc3IgYmFzZXByaSwgJTAJIjo6InIiICggdWxOZXdNYXNrVmFsdWUgKSA6ICJtZW1vcnkiDQotICAgICAgICApOw0KLSAgICB9DQorcG9ydEZPUkNFX0lOTElORSBzdGF0aWMgdWludDMyX3QgdWxQb3J0UmFpc2VCQVNFUFJJKCB2b2lkICkNCit7DQorICAgIHVpbnQzMl90IHVsT3JpZ2luYWxCQVNFUFJJLCB1bE5ld0JBU0VQUkk7DQorDQorICAgIF9fYXNtIHZvbGF0aWxlDQorICAgICgNCisgICAgICAgICIJbXJzICUwLCBiYXNlcHJpCQkJCQkJCQkJCQlcbiJcDQorICAgICAgICAiCW1vdiAlMSwgJTIJCQkJCQkJCQkJCQlcbiJcDQorICAgICAgICAiCW1zciBiYXNlcHJpLCAlMQkJCQkJCQkJCQkJXG4iXA0KKyAgICAgICAgIglpc2IJCQkJCQkJCQkJCQkJCVxuIlwNCisgICAgICAgICIJZHNiCQkJCQkJCQkJCQkJCQlcbiJcDQorICAgICAgICA6ICI9ciIgKCB1bE9yaWdpbmFsQkFTRVBSSSApLCAiPXIiICggdWxOZXdCQVNFUFJJICkgOiAiaSIgKCBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgKSA6ICJtZW1vcnkiDQorICAgICk7DQorDQorICAgIC8qIFRoaXMgcmV0dXJuIHdpbGwgbm90IGJlIHJlYWNoZWQgYnV0IGlzIG5lY2Vzc2FyeSB0byBwcmV2ZW50IGNvbXBpbGVyDQorICAgICAqIHdhcm5pbmdzLiAqLw0KKyAgICByZXR1cm4gdWxPcmlnaW5hbEJBU0VQUkk7DQorfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KLSAgICAjZGVmaW5lIHBvcnRNRU1PUllfQkFSUklFUigpICAgIF9fYXNtIHZvbGF0aWxlICggIiIgOjo6ICJtZW1vcnkiICkNCi0NCi0gICAgI2lmbmRlZiBjb25maWdFTkZPUkNFX1NZU1RFTV9DQUxMU19GUk9NX0tFUk5FTF9PTkxZDQotICAgICAgICAjd2FybmluZyAiY29uZmlnRU5GT1JDRV9TWVNURU1fQ0FMTFNfRlJPTV9LRVJORUxfT05MWSBpcyBub3QgZGVmaW5lZC4gV2UgcmVjb21tZW5kIGRlZmluaW5nIGl0IHRvIDEgaW4gRnJlZVJUT1NDb25maWcuaCBmb3IgYmV0dGVyIHNlY3VyaXR5LiBodHRwczogLyp3d3cuZnJlZXJ0b3Mub3JnL0ZyZWVSVE9TLVYxMC4zLnguaHRtbCIgKi8NCi0gICAgICAgICNkZWZpbmUgY29uZmlnRU5GT1JDRV9TWVNURU1fQ0FMTFNfRlJPTV9LRVJORUxfT05MWSAgICAwDQotICAgICNlbmRpZg0KK3BvcnRGT1JDRV9JTkxJTkUgc3RhdGljIHZvaWQgdlBvcnRTZXRCQVNFUFJJKCB1aW50MzJfdCB1bE5ld01hc2tWYWx1ZSApDQorew0KKyAgICBfX2FzbSB2b2xhdGlsZQ0KKyAgICAoDQorICAgICAgICAiCW1zciBiYXNlcHJpLCAlMAkiOjoiciIgKCB1bE5ld01hc2tWYWx1ZSApIDogIm1lbW9yeSINCisgICAgKTsNCit9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2RlZmluZSBwb3J0TUVNT1JZX0JBUlJJRVIoKSAgICBfX2FzbSB2b2xhdGlsZSAoICIiIDo6OiAibWVtb3J5IiApDQorDQorI2lmbmRlZiBjb25maWdFTkZPUkNFX1NZU1RFTV9DQUxMU19GUk9NX0tFUk5FTF9PTkxZDQorICAgICN3YXJuaW5nICJjb25maWdFTkZPUkNFX1NZU1RFTV9DQUxMU19GUk9NX0tFUk5FTF9PTkxZIGlzIG5vdCBkZWZpbmVkLiBXZSByZWNvbW1lbmQgZGVmaW5pbmcgaXQgdG8gMSBpbiBGcmVlUlRPU0NvbmZpZy5oIGZvciBiZXR0ZXIgc2VjdXJpdHkuIGh0dHBzOiAvKnd3dy5mcmVlcnRvcy5vcmcvRnJlZVJUT1MtVjEwLjMueC5odG1sIiAqLw0KKyAgICAjZGVmaW5lIGNvbmZpZ0VORk9SQ0VfU1lTVEVNX0NBTExTX0ZST01fS0VSTkVMX09OTFkgICAgMA0KKyNlbmRpZg0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qICpJTkRFTlQtT0ZGKiAqLw0KICAgICAjaWZkZWYgX19jcGx1c3BsdXMNCiAgICAgICAgIH0NCiAgICAgI2VuZGlmDQorLyogKklOREVOVC1PTiogKi8NCiANCiAjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8NCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9HQ0MvQVJNX0NSNS9wb3J0LmMgYi9wb3J0YWJsZS9HQ0MvQVJNX0NSNS9wb3J0LmMKaW5kZXggMDY1ODIxOC4uMGU2MjEzMSAxMDA2NDQKLS0tIGEvcG9ydGFibGUvR0NDL0FSTV9DUjUvcG9ydC5jCisrKyBiL3BvcnRhYmxlL0dDQy9BUk1fQ1I1L3BvcnQuYwpAQCAtMTQ5LDE3ICsxNDksMTggQEAKIA0KIA0KIC8qIEFkZGluZyB0aGUgbmVjZXNzYXJ5IHN0dWZmIGluIG9yZGVyIHRvIGJlIGFibGUgdG8gZGV0ZXJtaW5lIGZyb20gQyBjb2RlIHdoZXRlciBvciBub3QgdGhlIElSUXMgYXJlIGVuYWJsZWQgYXQgdGhlIHByb2Nlc3NvciBsZXZlbCAobm90IGludGVycnVwdCBjb250cm9sbGVyIGxldmVsKSAqLw0KLSNkZWZpbmUgR0VUX0NQU1IoKQkoe3UzMiBydmFsID0gMFU7IFwNCi0JCQkgIF9fYXNtX18gX192b2xhdGlsZV9fKFwNCi0JCQkgICAgIm1ycwklMCwgY3BzclxuIlwNCi0JCQkgICAgOiAiPXIiIChydmFsKVwNCi0JCQkgICk7XA0KLQkJCSAgcnZhbDtcDQotCQkJIH0pDQorI2RlZmluZSBHRVRfQ1BTUigpICAgICAgICAgICAgIFwNCisgICAgKCB7IHUzMiBydmFsID0gMFU7ICAgICAgICAgXA0KKyAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCBcDQorICAgICAgICAgICAgIm1ycwklMCwgY3BzclxuIlwNCisgICAgICAgICAgICA6ICI9ciIgKCBydmFsICkgICAgXA0KKyAgICAgICAgICAgICk7ICAgICAgICAgICAgICAgICBcDQorICAgICAgICBydmFsOyAgICAgICAgICAgICAgICAgIFwNCisgICAgICB9ICkNCiANCi0jZGVmaW5lIENQU1JfSVJRX0VOQUJMRV9NQVNLIDB4ODBVDQorI2RlZmluZSBDUFNSX0lSUV9FTkFCTEVfTUFTSyAgICAweDgwVQ0KIA0KLSNkZWZpbmUgSVNfSVJRX0RJU0FCTEVEKCkgKHt1bnNpZ25lZCBpbnQgdmFsID0gMDsgdmFsID0gKEdFVF9DUFNSKCkgJiBDUFNSX0lSUV9FTkFCTEVfTUFTSykgPyAxIDogMDsgdmFsO30pDQorI2RlZmluZSBJU19JUlFfRElTQUJMRUQoKSAgICAoIHsgdW5zaWduZWQgaW50IHZhbCA9IDA7IHZhbCA9ICggR0VUX0NQU1IoKSAmIENQU1JfSVJRX0VOQUJMRV9NQVNLICkgPyAxIDogMDsgdmFsOyB9ICkNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKg0KQEAgLTQ4MiwxMiArNDgzLDEyIEBACiB7DQogICAgIHVpbnQzMl90IHVsUmV0dXJuOw0KICAgICB1aW50MzJfdCB3YXNJUlFEaXNhYmxlZDsNCi0gICAgDQorDQogICAgIC8qIFdlIGtlZXAgdHJhY2sgb2YgaWYgdGhlIElSUSBhcmUgZW5hYmxlZCBpbiB0aGUgQ1BVIChhcyBvcHBvc2VkIHRvIGludGVycnVwdHMgbWFza2VkIGluIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciwgbGlrZSB0aGUgaW50ZW5kIG9mIHRoaXMgZnVuY3Rpb24pLg0KICAgICAgKiBUaGlzIGlzIHZlcnkgaW1wb3J0YW50IGJlY2F1c2Ugd2hlbiB0aGUgQ1BVIGlzIGludGVycnVwdGVkLCBhbW9uZyBvdGhlciB0aGluZ3MsIHRoZSBoYXJkd2FyZSBjbGVhcnMgdGhlIElSUSBFbmFibGUgYml0IGluIHRoZSBDUFNSIG9mIHRoZSBJUlEgQ1BVIE1vZGUgaW4gd2hpY2gNCiAgICAgICogd2UgZW50ZXIuICovDQogICAgIHdhc0lSUURpc2FibGVkID0gSVNfSVJRX0RJU0FCTEVEKCk7DQotICAgIA0KKw0KICAgICAvKiBJbnRlcnJ1cHQgaW4gdGhlIENQVSBtdXN0IGJlIHR1cm5lZCBvZmYgd2hpbGUgdGhlIElDQ1BNUiBpcyBiZWluZw0KICAgICAgKiB1cGRhdGVkLiAqLw0KICAgICBwb3J0Q1BVX0lSUV9ESVNBQkxFKCk7DQpAQCAtNTA1LDE4ICs1MDYsMjAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAiaXNiCQlcbiI6OjogIm1lbW9yeSIgKTsNCiAgICAgfQ0KIA0KLSAgICAvKiBKdXN0IGxpa2UgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgdmFsdWUgb2Ygd2V0aGVyIG9yIG5vdCB0aGUgaW50ZXJydXB0cyB3aGVyZSBtYXNrZWQgaW4gdGhlIGludGVycnVwdCBjb250cm9sbGVyIGluIG9yZGVyIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9uIHdoZW4gDQorICAgIC8qIEp1c3QgbGlrZSB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSBvZiB3ZXRoZXIgb3Igbm90IHRoZSBpbnRlcnJ1cHRzIHdoZXJlIG1hc2tlZCBpbiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIgaW4gb3JkZXIgdG8gYXZvaWQgcmFjZSBjb25kaXRpb24gd2hlbg0KICAgICAgKiBjYWxsaW5nIGl0cyBtYXRjaGluZyB2UG9ydENsZWFySW50ZXJydXB0TWFzayBmdW5jdGlvbiwgd2UgbmVlZGVkIGEgJ3dhc0lSUURpc2FibGVkJyB2YXJpYWJsZSBob2xkaW5nIHRoZSBzdGF0ZSBvZiB0aGUgSVJRIEVuYWJsZSBiaXQgaW4gdGhlIENQU1IgaW4gb3JkZXINCi0gICAgICogdG8gbGVhdmUgdGhhdCBiaXQgaW4gaXQncyBvcmlnaW5hbCBzdGF0ZS4gTGlrZSBtZW50aW9uZWQgYWJvdmUsIGhhcmR3YXJlIGF1dG9tYXRpY2FsbHkgY2xlYXIgdGhlIElSUUVuYWJsZSBiaXQgdXBvbiB0cmFwcGluZyBpbnRvIElSUSBNb2RlLCBzbyB0aGUgcHJvZ3JhbW1lciANCisgICAgICogdG8gbGVhdmUgdGhhdCBiaXQgaW4gaXQncyBvcmlnaW5hbCBzdGF0ZS4gTGlrZSBtZW50aW9uZWQgYWJvdmUsIGhhcmR3YXJlIGF1dG9tYXRpY2FsbHkgY2xlYXIgdGhlIElSUUVuYWJsZSBiaXQgdXBvbiB0cmFwcGluZyBpbnRvIElSUSBNb2RlLCBzbyB0aGUgcHJvZ3JhbW1lcg0KICAgICAgKiBjYW5ub3QgbWFrZSBhc3N1bXB0aW9uIGFib3V0IGl0J3Mgc3RhdGUuIFZlcnkgcmFyZSwgYnV0IHZlcnkgaW1wb3J0YW50IHJhY2UgY29uZGl0aW9uIGlzIGF2b2lkZWQgd2l0aCB0aGlzIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgaW4gYW4gSVNSLiBUaGUgcmFjZQ0KICAgICAgKiBjb25kaXRpb24gaW4gcXVlc3Rpb24gd2FzIGRpc2NvdmVyZWQgd2hlbiBpbnRlZ3JhdGluZyB0cmFjZWFseXplciBjb2RlLiBJbnNpZGUgdGhlIGZ1bmN0aW9uICd2b2lkIHZUYXNrU3dpdGNoQ29udGV4dCggdm9pZCApJyBpbiB0YXNrcy5jLCB0aGVyZSBpcyBhIG1hY3JvICd0cmFjZVRBU0tfU1dJVENIRURfSU4oKTsnDQotICAgICAqIHdoaWNoIGdldHMgcmVwbGFjZWQgYnkgc29tZXRoaW5nIHdoZW4gdXNpbmcgdGhlIHRyYWNpbmcgY2FwYWJpbGl0aWVzLiBUaGF0IG1hY3JvIHByb3RlY3RzIHNvbWUgY3JpdGljYWwgc2VjdGlvbiB3aXRoIG1hdGNoaW5nIGNhbGxzIHRvICd1bFBvcnRTZXRJbnRlcnJ1cHRNYXNrJyANCisgICAgICogd2hpY2ggZ2V0cyByZXBsYWNlZCBieSBzb21ldGhpbmcgd2hlbiB1c2luZyB0aGUgdHJhY2luZyBjYXBhYmlsaXRpZXMuIFRoYXQgbWFjcm8gcHJvdGVjdHMgc29tZSBjcml0aWNhbCBzZWN0aW9uIHdpdGggbWF0Y2hpbmcgY2FsbHMgdG8gJ3VsUG9ydFNldEludGVycnVwdE1hc2snDQogICAgICAqIGFuZCAndlBvcnRDbGVhckludGVycnVwdE1hc2snLiBBdCB0aGUgdGltZSBvZiBjYWxsaW5nIHRob3NlIGZ1bmN0aW9ucywgdGhlIGludGVycnVwdCBtYXNrIGlzIG5vdCBzZXQgaW4gdGhlIGludGVycnVwdCBjb250cm9sbGVyLCB0aHVzIHRoZSBvbmx5IHByb3RlY3RpbmcgYmFycmllcg0KLSAgICAgKiBhZ2FpbnN0IHRoZSBDUFUgdHJhcGluZyBpbnRvIHJlY3Vyc2l2ZSBpbnRlcnJ1cHQgd2FzIHRoZSBJUlEgRW5hYmxlIGJpdCBpbiB0aGUgQ1BTUi4gQnkgbm90IHRha2luZyBpdCBpbnRvIGFjb3VudCwgdGhlIHZlcnkgY29kZSB0aGF0IHByb3RlY3RzIHRoZSBDUFUgYWdhaW5zdCANCi0gICAgICogY3JpdGljYWwgc2VjdGlvbiB2aW9sYXRpb24ganVzdCBlbmFibGVkIGl0IHRvIGhhcHBlbiA6IEEgU3lzVGljayB3YXMgd2FpdGluZyB0byBoYXBwZW4sIGFuZCBjYWxsaW5nICdwb3J0Q1BVX0lSUV9FTkFCTEUnIHdvdWxkIGVuYWJsZSBpdCB0byBvY2N1ci4uLiBUaHVzIHRyaWdnZXJpbmcgYSANCisgICAgICogYWdhaW5zdCB0aGUgQ1BVIHRyYXBpbmcgaW50byByZWN1cnNpdmUgaW50ZXJydXB0IHdhcyB0aGUgSVJRIEVuYWJsZSBiaXQgaW4gdGhlIENQU1IuIEJ5IG5vdCB0YWtpbmcgaXQgaW50byBhY291bnQsIHRoZSB2ZXJ5IGNvZGUgdGhhdCBwcm90ZWN0cyB0aGUgQ1BVIGFnYWluc3QNCisgICAgICogY3JpdGljYWwgc2VjdGlvbiB2aW9sYXRpb24ganVzdCBlbmFibGVkIGl0IHRvIGhhcHBlbiA6IEEgU3lzVGljayB3YXMgd2FpdGluZyB0byBoYXBwZW4sIGFuZCBjYWxsaW5nICdwb3J0Q1BVX0lSUV9FTkFCTEUnIHdvdWxkIGVuYWJsZSBpdCB0byBvY2N1ci4uLiBUaHVzIHRyaWdnZXJpbmcgYQ0KICAgICAgKiBzd2l0Y2ggb2YgY29udGV4dCB3aGlsZSBhbHJlYWR5IHBlcmZvcm1pbmcgYSBzd2l0Y2ggY29udGV4dC4gKi8NCi0JaWYoIXdhc0lSUURpc2FibGVkKQ0KLQkJcG9ydENQVV9JUlFfRU5BQkxFKCk7DQorICAgIGlmKCAhd2FzSVJRRGlzYWJsZWQgKQ0KKyAgICB7DQorICAgICAgICBwb3J0Q1BVX0lSUV9FTkFCTEUoKTsNCisgICAgfQ0KIA0KICAgICByZXR1cm4gdWxSZXR1cm47DQogfQ0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0dDQy9BUk1fQ1J4X05vX0dJQy9wb3J0LmMgYi9wb3J0YWJsZS9HQ0MvQVJNX0NSeF9Ob19HSUMvcG9ydC5jCmluZGV4IGEwNmZjNzUuLjNlNzkxYzUgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0dDQy9BUk1fQ1J4X05vX0dJQy9wb3J0LmMKKysrIGIvcG9ydGFibGUvR0NDL0FSTV9DUnhfTm9fR0lDL3BvcnQuYwpAQCAtMzMsNTAgKzMzLDUwIEBACiAjaW5jbHVkZSAidGFzay5oIg0KIA0KICNpZiBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gPT0gMQ0KLSAgICAvKiBDaGVjayB0aGUgY29uZmlndXJhdGlvbi4gKi8NCi0gICAgI2lmICggY29uZmlnTUFYX1BSSU9SSVRJRVMgPiAzMiApDQotICAgICAgICAjZXJyb3IgY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OIGNhbiBvbmx5IGJlIHNldCB0byAxIHdoZW4gY29uZmlnTUFYX1BSSU9SSVRJRVMgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDMyLiAgSXQgaXMgdmVyeSByYXJlIHRoYXQgYSBzeXN0ZW0gcmVxdWlyZXMgbW9yZSB0aGFuIDEwIHRvIDE1IGRpZmZlcmVuY2UgcHJpb3JpdGllcyBhcyB0YXNrcyB0aGF0IHNoYXJlIGEgcHJpb3JpdHkgd2lsbCB0aW1lIHNsaWNlLg0KLSAgICAjZW5kaWYNCisJLyogQ2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24uICovDQorCSNpZiggY29uZmlnTUFYX1BSSU9SSVRJRVMgPiAzMiApDQorCQkjZXJyb3IgY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OIGNhbiBvbmx5IGJlIHNldCB0byAxIHdoZW4gY29uZmlnTUFYX1BSSU9SSVRJRVMgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDMyLiAgSXQgaXMgdmVyeSByYXJlIHRoYXQgYSBzeXN0ZW0gcmVxdWlyZXMgbW9yZSB0aGFuIDEwIHRvIDE1IGRpZmZlcmVuY2UgcHJpb3JpdGllcyBhcyB0YXNrcyB0aGF0IHNoYXJlIGEgcHJpb3JpdHkgd2lsbCB0aW1lIHNsaWNlLg0KKwkjZW5kaWYNCiAjZW5kaWYgLyogY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OICovDQogDQogI2lmbmRlZiBjb25maWdTRVRVUF9USUNLX0lOVEVSUlVQVA0KLSAgICAjZXJyb3IgY29uZmlnU0VUVVBfVElDS19JTlRFUlJVUFQoKSBtdXN0IGJlIGRlZmluZWQgaW4gRnJlZVJUT1NDb25maWcuaCB0byBjYWxsIHRoZSBmdW5jdGlvbiB0aGF0IHNldHMgdXAgdGhlIHRpY2sgaW50ZXJydXB0Lg0KKwkjZXJyb3IgY29uZmlnU0VUVVBfVElDS19JTlRFUlJVUFQoKSBtdXN0IGJlIGRlZmluZWQgaW4gRnJlZVJUT1NDb25maWcuaCB0byBjYWxsIHRoZSBmdW5jdGlvbiB0aGF0IHNldHMgdXAgdGhlIHRpY2sgaW50ZXJydXB0Lg0KICNlbmRpZg0KIA0KICNpZm5kZWYgY29uZmlnQ0xFQVJfVElDS19JTlRFUlJVUFQNCi0gICAgI2Vycm9yIGNvbmZpZ0NMRUFSX1RJQ0tfSU5URVJSVVBUIG11c3QgYmUgZGVmaW5lZCBpbiBGcmVlUlRPU0NvbmZpZy5oIHRvIGNsZWFyIHdoaWNoIGV2ZXIgaW50ZXJydXB0IHdhcyB1c2VkIHRvIGdlbmVyYXRlIHRoZSB0aWNrIGludGVycnVwdC4NCisJI2Vycm9yIGNvbmZpZ0NMRUFSX1RJQ0tfSU5URVJSVVBUIG11c3QgYmUgZGVmaW5lZCBpbiBGcmVlUlRPU0NvbmZpZy5oIHRvIGNsZWFyIHdoaWNoIGV2ZXIgaW50ZXJydXB0IHdhcyB1c2VkIHRvIGdlbmVyYXRlIHRoZSB0aWNrIGludGVycnVwdC4NCiAjZW5kaWYNCiANCiAvKiBBIGNyaXRpY2FsIHNlY3Rpb24gaXMgZXhpdGVkIHdoZW4gdGhlIGNyaXRpY2FsIHNlY3Rpb24gbmVzdGluZyBjb3VudCByZWFjaGVzDQotICogdGhpcyB2YWx1ZS4gKi8NCi0jZGVmaW5lIHBvcnROT19DUklUSUNBTF9ORVNUSU5HICAgICAgICAgICggKCB1aW50MzJfdCApIDAgKQ0KK3RoaXMgdmFsdWUuICovDQorI2RlZmluZSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORwkJCSggKCB1aW50MzJfdCApIDAgKQ0KIA0KIC8qIFRhc2tzIGFyZSBub3QgY3JlYXRlZCB3aXRoIGEgZmxvYXRpbmcgcG9pbnQgY29udGV4dCwgYnV0IGNhbiBiZSBnaXZlbiBhDQotICogZmxvYXRpbmcgcG9pbnQgY29udGV4dCBhZnRlciB0aGV5IGhhdmUgYmVlbiBjcmVhdGVkLiAgQSB2YXJpYWJsZSBpcyBzdG9yZWQgYXMNCi0gKiBwYXJ0IG9mIHRoZSB0YXNrcyBjb250ZXh0IHRoYXQgaG9sZHMgcG9ydE5PX0ZMT0FUSU5HX1BPSU5UX0NPTlRFWFQgaWYgdGhlIHRhc2sNCi0gKiBkb2VzIG5vdCBoYXZlIGFuIEZQVSBjb250ZXh0LCBvciBhbnkgb3RoZXIgdmFsdWUgaWYgdGhlIHRhc2sgZG9lcyBoYXZlIGFuIEZQVQ0KLSAqIGNvbnRleHQuICovDQotI2RlZmluZSBwb3J0Tk9fRkxPQVRJTkdfUE9JTlRfQ09OVEVYVCAgICAoICggU3RhY2tUeXBlX3QgKSAwICkNCitmbG9hdGluZyBwb2ludCBjb250ZXh0IGFmdGVyIHRoZXkgaGF2ZSBiZWVuIGNyZWF0ZWQuICBBIHZhcmlhYmxlIGlzIHN0b3JlZCBhcw0KK3BhcnQgb2YgdGhlIHRhc2tzIGNvbnRleHQgdGhhdCBob2xkcyBwb3J0Tk9fRkxPQVRJTkdfUE9JTlRfQ09OVEVYVCBpZiB0aGUgdGFzaw0KK2RvZXMgbm90IGhhdmUgYW4gRlBVIGNvbnRleHQsIG9yIGFueSBvdGhlciB2YWx1ZSBpZiB0aGUgdGFzayBkb2VzIGhhdmUgYW4gRlBVDQorY29udGV4dC4gKi8NCisjZGVmaW5lIHBvcnROT19GTE9BVElOR19QT0lOVF9DT05URVhUCSggKCBTdGFja1R5cGVfdCApIDAgKQ0KIA0KIC8qIENvbnN0YW50cyByZXF1aXJlZCB0byBzZXR1cCB0aGUgaW5pdGlhbCB0YXNrIGNvbnRleHQuICovDQotI2RlZmluZSBwb3J0SU5JVElBTF9TUFNSICAgICAgICAgICAgICAgICAoICggU3RhY2tUeXBlX3QgKSAweDFmICkgLyogU3lzdGVtIG1vZGUsIEFSTSBtb2RlLCBJUlEgZW5hYmxlZCBGSVEgZW5hYmxlZC4gKi8NCi0jZGVmaW5lIHBvcnRUSFVNQl9NT0RFX0JJVCAgICAgICAgICAgICAgICggKCBTdGFja1R5cGVfdCApIDB4MjAgKQ0KLSNkZWZpbmUgcG9ydFRIVU1CX01PREVfQUREUkVTUyAgICAgICAgICAgKCAweDAxVUwgKQ0KKyNkZWZpbmUgcG9ydElOSVRJQUxfU1BTUgkJCQkoICggU3RhY2tUeXBlX3QgKSAweDFmICkgLyogU3lzdGVtIG1vZGUsIEFSTSBtb2RlLCBJUlEgZW5hYmxlZCBGSVEgZW5hYmxlZC4gKi8NCisjZGVmaW5lIHBvcnRUSFVNQl9NT0RFX0JJVAkJCQkoICggU3RhY2tUeXBlX3QgKSAweDIwICkNCisjZGVmaW5lIHBvcnRUSFVNQl9NT0RFX0FERFJFU1MJCQkoIDB4MDFVTCApDQogDQogLyogTWFza3MgYWxsIGJpdHMgaW4gdGhlIEFQU1Igb3RoZXIgdGhhbiB0aGUgbW9kZSBiaXRzLiAqLw0KLSNkZWZpbmUgcG9ydEFQU1JfTU9ERV9CSVRTX01BU0sgICAgICAgICAgKCAweDFGICkNCisjZGVmaW5lIHBvcnRBUFNSX01PREVfQklUU19NQVNLCQkJKCAweDFGICkNCiANCiAvKiBUaGUgdmFsdWUgb2YgdGhlIG1vZGUgYml0cyBpbiB0aGUgQVBTUiB3aGVuIHRoZSBDUFUgaXMgZXhlY3V0aW5nIGluIHVzZXINCi0gKiBtb2RlLiAqLw0KLSNkZWZpbmUgcG9ydEFQU1JfVVNFUl9NT0RFICAgICAgICAgICAgICAgKCAweDEwICkNCittb2RlLiAqLw0KKyNkZWZpbmUgcG9ydEFQU1JfVVNFUl9NT0RFCQkJCSggMHgxMCApDQogDQogLyogTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSBwcmUtbG9hZGluZyBvZiB0aGUgaW5pdGlhbCBMUiB3aXRoIHRoZSBhZGRyZXNzIG9mDQotICogcHJ2VGFza0V4aXRFcnJvcigpIGluIGNhc2UgaXQgbWVzc2VzIHVwIHVud2luZGluZyBvZiB0aGUgc3RhY2sgaW4gdGhlDQotICogZGVidWdnZXIuICovDQorcHJ2VGFza0V4aXRFcnJvcigpIGluIGNhc2UgaXQgbWVzc2VzIHVwIHVud2luZGluZyBvZiB0aGUgc3RhY2sgaW4gdGhlDQorZGVidWdnZXIuICovDQogI2lmZGVmIGNvbmZpZ1RBU0tfUkVUVVJOX0FERFJFU1MNCi0gICAgI2RlZmluZSBwb3J0VEFTS19SRVRVUk5fQUREUkVTUyAgICBjb25maWdUQVNLX1JFVFVSTl9BRERSRVNTDQorCSNkZWZpbmUgcG9ydFRBU0tfUkVUVVJOX0FERFJFU1MJY29uZmlnVEFTS19SRVRVUk5fQUREUkVTUw0KICNlbHNlDQotICAgICNkZWZpbmUgcG9ydFRBU0tfUkVUVVJOX0FERFJFU1MgICAgcHJ2VGFza0V4aXRFcnJvcg0KKwkjZGVmaW5lIHBvcnRUQVNLX1JFVFVSTl9BRERSRVNTCXBydlRhc2tFeGl0RXJyb3INCiAjZW5kaWYNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCkBAIC05NSwyMjkgKzk1LDIyNSBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogQSB2YXJpYWJsZSBpcyB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGNyaXRpY2FsIHNlY3Rpb24gbmVzdGluZy4gIFRoaXMNCi0gKiB2YXJpYWJsZSBoYXMgdG8gYmUgc3RvcmVkIGFzIHBhcnQgb2YgdGhlIHRhc2sgY29udGV4dCBhbmQgbXVzdCBiZSBpbml0aWFsaXNlZCB0bw0KLSAqIGEgbm9uIHplcm8gdmFsdWUgdG8gZW5zdXJlIGludGVycnVwdHMgZG9uJ3QgaW5hZHZlcnRlbnRseSBiZWNvbWUgdW5tYXNrZWQgYmVmb3JlDQotICogdGhlIHNjaGVkdWxlciBzdGFydHMuICBBcyBpdCBpcyBzdG9yZWQgYXMgcGFydCBvZiB0aGUgdGFzayBjb250ZXh0IGl0IHdpbGwNCi0gKiBhdXRvbWF0aWNhbGx5IGJlIHNldCB0byAwIHdoZW4gdGhlIGZpcnN0IHRhc2sgaXMgc3RhcnRlZC4gKi8NCit2YXJpYWJsZSBoYXMgdG8gYmUgc3RvcmVkIGFzIHBhcnQgb2YgdGhlIHRhc2sgY29udGV4dCBhbmQgbXVzdCBiZSBpbml0aWFsaXNlZCB0bw0KK2Egbm9uIHplcm8gdmFsdWUgdG8gZW5zdXJlIGludGVycnVwdHMgZG9uJ3QgaW5hZHZlcnRlbnRseSBiZWNvbWUgdW5tYXNrZWQgYmVmb3JlDQordGhlIHNjaGVkdWxlciBzdGFydHMuICBBcyBpdCBpcyBzdG9yZWQgYXMgcGFydCBvZiB0aGUgdGFzayBjb250ZXh0IGl0IHdpbGwNCithdXRvbWF0aWNhbGx5IGJlIHNldCB0byAwIHdoZW4gdGhlIGZpcnN0IHRhc2sgaXMgc3RhcnRlZC4gKi8NCiB2b2xhdGlsZSB1aW50MzJfdCB1bENyaXRpY2FsTmVzdGluZyA9IDk5OTlVTDsNCiANCiAvKiBTYXZlZCBhcyBwYXJ0IG9mIHRoZSB0YXNrIGNvbnRleHQuICBJZiB1bFBvcnRUYXNrSGFzRlBVQ29udGV4dCBpcyBub24temVybyB0aGVuDQotICogYSBmbG9hdGluZyBwb2ludCBjb250ZXh0IG11c3QgYmUgc2F2ZWQgYW5kIHJlc3RvcmVkIGZvciB0aGUgdGFzay4gKi8NCithIGZsb2F0aW5nIHBvaW50IGNvbnRleHQgbXVzdCBiZSBzYXZlZCBhbmQgcmVzdG9yZWQgZm9yIHRoZSB0YXNrLiAqLw0KIHZvbGF0aWxlIHVpbnQzMl90IHVsUG9ydFRhc2tIYXNGUFVDb250ZXh0ID0gcGRGQUxTRTsNCiANCiAvKiBTZXQgdG8gMSB0byBwZW5kIGEgY29udGV4dCBzd2l0Y2ggZnJvbSBhbiBJU1IuICovDQogdm9sYXRpbGUgdWludDMyX3QgdWxQb3J0WWllbGRSZXF1aXJlZCA9IHBkRkFMU0U7DQogDQogLyogQ291bnRzIHRoZSBpbnRlcnJ1cHQgbmVzdGluZyBkZXB0aC4gIEEgY29udGV4dCBzd2l0Y2ggaXMgb25seSBwZXJmb3JtZWQgaWYNCi0gKiBpZiB0aGUgbmVzdGluZyBkZXB0aCBpcyAwLiAqLw0KK2lmIHRoZSBuZXN0aW5nIGRlcHRoIGlzIDAuICovDQogdm9sYXRpbGUgdWludDMyX3QgdWxQb3J0SW50ZXJydXB0TmVzdGluZyA9IDBVTDsNCiANCiAvKiBVc2VkIGluIHRoZSBhc20gZmlsZSB0byBjbGVhciBhbiBpbnRlcnJ1cHQuICovDQotX19hdHRyaWJ1dGVfXyggKCB1c2VkICkgKSBjb25zdCB1aW50MzJfdCB1bElDQ0VPSVIgPSBjb25maWdFT0lfQUREUkVTUzsNCitfX2F0dHJpYnV0ZV9fKCggdXNlZCApKSBjb25zdCB1aW50MzJfdCB1bElDQ0VPSVIgPSBjb25maWdFT0lfQUREUkVTUzsNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKg0KICAqIFNlZSBoZWFkZXIgZmlsZSBmb3IgZGVzY3JpcHRpb24uDQogICovDQotU3RhY2tUeXBlX3QgKiBweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICogcHhUb3BPZlN0YWNrLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYXNrRnVuY3Rpb25fdCBweENvZGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KK1N0YWNrVHlwZV90ICpweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICpweFRvcE9mU3RhY2ssIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzICkNCiB7DQotICAgIC8qIFNldHVwIHRoZSBpbml0aWFsIHN0YWNrIG9mIHRoZSB0YXNrLiAgVGhlIHN0YWNrIGlzIHNldCBleGFjdGx5IGFzDQotICAgICAqIGV4cGVjdGVkIGJ5IHRoZSBwb3J0UkVTVE9SRV9DT05URVhUKCkgbWFjcm8uDQotICAgICAqDQotICAgICAqIFRoZSBmaXN0IHJlYWwgdmFsdWUgb24gdGhlIHN0YWNrIGlzIHRoZSBzdGF0dXMgcmVnaXN0ZXIsIHdoaWNoIGlzIHNldCBmb3INCi0gICAgICogc3lzdGVtIG1vZGUsIHdpdGggaW50ZXJydXB0cyBlbmFibGVkLiAgQSBmZXcgTlVMTHMgYXJlIGFkZGVkIGZpcnN0IHRvIGVuc3VyZQ0KLSAgICAgKiBHREIgZG9lcyBub3QgdHJ5IGRlY29kaW5nIGEgbm9uLWV4aXN0ZW50IHJldHVybiBhZGRyZXNzLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIE5VTEw7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIE5VTEw7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIE5VTEw7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHBvcnRJTklUSUFMX1NQU1I7DQorCS8qIFNldHVwIHRoZSBpbml0aWFsIHN0YWNrIG9mIHRoZSB0YXNrLiAgVGhlIHN0YWNrIGlzIHNldCBleGFjdGx5IGFzDQorCWV4cGVjdGVkIGJ5IHRoZSBwb3J0UkVTVE9SRV9DT05URVhUKCkgbWFjcm8uDQogDQotICAgIGlmKCAoICggdWludDMyX3QgKSBweENvZGUgJiBwb3J0VEhVTUJfTU9ERV9BRERSRVNTICkgIT0gMHgwMFVMICkNCi0gICAgew0KLSAgICAgICAgLyogVGhlIHRhc2sgd2lsbCBzdGFydCBpbiBUSFVNQiBtb2RlLiAqLw0KLSAgICAgICAgKnB4VG9wT2ZTdGFjayB8PSBwb3J0VEhVTUJfTU9ERV9CSVQ7DQotICAgIH0NCisJVGhlIGZpc3QgcmVhbCB2YWx1ZSBvbiB0aGUgc3RhY2sgaXMgdGhlIHN0YXR1cyByZWdpc3Rlciwgd2hpY2ggaXMgc2V0IGZvcg0KKwlzeXN0ZW0gbW9kZSwgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQuICBBIGZldyBOVUxMcyBhcmUgYWRkZWQgZmlyc3QgdG8gZW5zdXJlDQorCUdEQiBkb2VzIG5vdCB0cnkgZGVjb2RpbmcgYSBub24tZXhpc3RlbnQgcmV0dXJuIGFkZHJlc3MuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgTlVMTDsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgTlVMTDsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgTlVMTDsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcG9ydElOSVRJQUxfU1BTUjsNCiANCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCWlmKCAoICggdWludDMyX3QgKSBweENvZGUgJiBwb3J0VEhVTUJfTU9ERV9BRERSRVNTICkgIT0gMHgwMFVMICkNCisJew0KKwkJLyogVGhlIHRhc2sgd2lsbCBzdGFydCBpbiBUSFVNQiBtb2RlLiAqLw0KKwkJKnB4VG9wT2ZTdGFjayB8PSBwb3J0VEhVTUJfTU9ERV9CSVQ7DQorCX0NCiANCi0gICAgLyogTmV4dCB0aGUgcmV0dXJuIGFkZHJlc3MsIHdoaWNoIGluIHRoaXMgY2FzZSBpcyB0aGUgc3RhcnQgb2YgdGhlIHRhc2suICovDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHhDb2RlOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgIC8qIE5leHQgYWxsIHRoZSByZWdpc3RlcnMgb3RoZXIgdGhhbiB0aGUgc3RhY2sgcG9pbnRlci4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwb3J0VEFTS19SRVRVUk5fQUREUkVTUzsgLyogUjE0ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTIxMjEyMTI7ICAgICAgICAgICAgICAvKiBSMTIgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMTExMTExMTsgICAgICAgICAgICAgIC8qIFIxMSAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDEwMTAxMDEwOyAgICAgICAgICAgICAgLyogUjEwICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDkwOTA5MDk7ICAgICAgICAgICAgICAvKiBSOSAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA4MDgwODA4OyAgICAgICAgICAgICAgLyogUjggKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNzA3MDcwNzsgICAgICAgICAgICAgIC8qIFI3ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDYwNjA2MDY7ICAgICAgICAgICAgICAvKiBSNiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA1MDUwNTA1OyAgICAgICAgICAgICAgLyogUjUgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNDA0MDQwNDsgICAgICAgICAgICAgIC8qIFI0ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDMwMzAzMDM7ICAgICAgICAgICAgICAvKiBSMyAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAyMDIwMjAyOyAgICAgICAgICAgICAgLyogUjIgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMTAxMDEwMTsgICAgICAgICAgICAgIC8qIFIxICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB2UGFyYW1ldGVyczsgICAgICAgICAgICAvKiBSMCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJLyogTmV4dCB0aGUgcmV0dXJuIGFkZHJlc3MsIHdoaWNoIGluIHRoaXMgY2FzZSBpcyB0aGUgc3RhcnQgb2YgdGhlIHRhc2suICovDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHhDb2RlOw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgLyogVGhlIHRhc2sgd2lsbCBzdGFydCB3aXRoIGEgY3JpdGljYWwgbmVzdGluZyBjb3VudCBvZiAwIGFzIGludGVycnVwdHMgYXJlDQotICAgICAqIGVuYWJsZWQuICovDQotICAgICpweFRvcE9mU3RhY2sgPSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORzsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIE5leHQgYWxsIHRoZSByZWdpc3RlcnMgb3RoZXIgdGhhbiB0aGUgc3RhY2sgcG9pbnRlci4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwb3J0VEFTS19SRVRVUk5fQUREUkVTUzsJLyogUjE0ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTIxMjEyMTI7CS8qIFIxMiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDExMTExMTExOwkvKiBSMTEgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMDEwMTAxMDsJLyogUjEwICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDkwOTA5MDk7CS8qIFI5ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDgwODA4MDg7CS8qIFI4ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDcwNzA3MDc7CS8qIFI3ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDYwNjA2MDY7CS8qIFI2ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDUwNTA1MDU7CS8qIFI1ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDQwNDA0MDQ7CS8qIFI0ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDMwMzAzMDM7CS8qIFIzICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDIwMjAyMDI7CS8qIFIyICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDEwMTAxMDE7CS8qIFIxICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB2UGFyYW1ldGVyczsgLyogUjAgKi8NCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgIC8qIFRoZSB0YXNrIHdpbGwgc3RhcnQgd2l0aG91dCBhIGZsb2F0aW5nIHBvaW50IGNvbnRleHQuICBBIHRhc2sgdGhhdCB1c2VzDQotICAgICAqIHRoZSBmbG9hdGluZyBwb2ludCBoYXJkd2FyZSBtdXN0IGNhbGwgdlBvcnRUYXNrVXNlc0ZQVSgpIGJlZm9yZSBleGVjdXRpbmcNCi0gICAgICogYW55IGZsb2F0aW5nIHBvaW50IGluc3RydWN0aW9ucy4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9IHBvcnROT19GTE9BVElOR19QT0lOVF9DT05URVhUOw0KKwkvKiBUaGUgdGFzayB3aWxsIHN0YXJ0IHdpdGggYSBjcml0aWNhbCBuZXN0aW5nIGNvdW50IG9mIDAgYXMgaW50ZXJydXB0cyBhcmUNCisJZW5hYmxlZC4gKi8NCisJKnB4VG9wT2ZTdGFjayA9IHBvcnROT19DUklUSUNBTF9ORVNUSU5HOw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgcmV0dXJuIHB4VG9wT2ZTdGFjazsNCisJLyogVGhlIHRhc2sgd2lsbCBzdGFydCB3aXRob3V0IGEgZmxvYXRpbmcgcG9pbnQgY29udGV4dC4gIEEgdGFzayB0aGF0IHVzZXMNCisJdGhlIGZsb2F0aW5nIHBvaW50IGhhcmR3YXJlIG11c3QgY2FsbCB2UG9ydFRhc2tVc2VzRlBVKCkgYmVmb3JlIGV4ZWN1dGluZw0KKwlhbnkgZmxvYXRpbmcgcG9pbnQgaW5zdHJ1Y3Rpb25zLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gcG9ydE5PX0ZMT0FUSU5HX1BPSU5UX0NPTlRFWFQ7DQorDQorCXJldHVybiBweFRvcE9mU3RhY2s7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHN0YXRpYyB2b2lkIHBydlRhc2tFeGl0RXJyb3IoIHZvaWQgKQ0KIHsNCi0gICAgLyogQSBmdW5jdGlvbiB0aGF0IGltcGxlbWVudHMgYSB0YXNrIG11c3Qgbm90IGV4aXQgb3IgYXR0ZW1wdCB0byByZXR1cm4gdG8NCi0gICAgICogaXRzIGNhbGxlciBhcyB0aGVyZSBpcyBub3RoaW5nIHRvIHJldHVybiB0by4gIElmIGEgdGFzayB3YW50cyB0byBleGl0IGl0DQotICAgICAqIHNob3VsZCBpbnN0ZWFkIGNhbGwgdlRhc2tEZWxldGUoIE5VTEwgKS4NCi0gICAgICoNCi0gICAgICogQXJ0aWZpY2lhbGx5IGZvcmNlIGFuIGFzc2VydCgpIHRvIGJlIHRyaWdnZXJlZCBpZiBjb25maWdBU1NFUlQoKSBpcw0KLSAgICAgKiBkZWZpbmVkLCB0aGVuIHN0b3AgaGVyZSBzbyBhcHBsaWNhdGlvbiB3cml0ZXJzIGNhbiBjYXRjaCB0aGUgZXJyb3IuICovDQotICAgIGNvbmZpZ0FTU0VSVCggdWxQb3J0SW50ZXJydXB0TmVzdGluZyA9PSB+MFVMICk7DQotICAgIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsNCisJLyogQSBmdW5jdGlvbiB0aGF0IGltcGxlbWVudHMgYSB0YXNrIG11c3Qgbm90IGV4aXQgb3IgYXR0ZW1wdCB0byByZXR1cm4gdG8NCisJaXRzIGNhbGxlciBhcyB0aGVyZSBpcyBub3RoaW5nIHRvIHJldHVybiB0by4gIElmIGEgdGFzayB3YW50cyB0byBleGl0IGl0DQorCXNob3VsZCBpbnN0ZWFkIGNhbGwgdlRhc2tEZWxldGUoIE5VTEwgKS4NCiANCi0gICAgZm9yKCA7IDsgKQ0KLSAgICB7DQotICAgIH0NCisJQXJ0aWZpY2lhbGx5IGZvcmNlIGFuIGFzc2VydCgpIHRvIGJlIHRyaWdnZXJlZCBpZiBjb25maWdBU1NFUlQoKSBpcw0KKwlkZWZpbmVkLCB0aGVuIHN0b3AgaGVyZSBzbyBhcHBsaWNhdGlvbiB3cml0ZXJzIGNhbiBjYXRjaCB0aGUgZXJyb3IuICovDQorCWNvbmZpZ0FTU0VSVCggdWxQb3J0SW50ZXJydXB0TmVzdGluZyA9PSB+MFVMICk7DQorCXBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsNCisJZm9yKCA7OyApOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBCYXNlVHlwZV90IHhQb3J0U3RhcnRTY2hlZHVsZXIoIHZvaWQgKQ0KIHsNCi0gICAgdWludDMyX3QgdWxBUFNSOw0KK3VpbnQzMl90IHVsQVBTUjsNCiANCi0gICAgLyogT25seSBjb250aW51ZSBpZiB0aGUgQ1BVIGlzIG5vdCBpbiBVc2VyIG1vZGUuICBUaGUgQ1BVIG11c3QgYmUgaW4gYQ0KLSAgICAgKiBQcml2aWxlZ2VkIG1vZGUgZm9yIHRoZSBzY2hlZHVsZXIgdG8gc3RhcnQuICovDQotICAgIF9fYXNtIHZvbGF0aWxlICggIk1SUyAlMCwgQVBTUiIgOiAiPXIiICggdWxBUFNSICk6OiJtZW1vcnkiICk7DQorCS8qIE9ubHkgY29udGludWUgaWYgdGhlIENQVSBpcyBub3QgaW4gVXNlciBtb2RlLiAgVGhlIENQVSBtdXN0IGJlIGluIGENCisJUHJpdmlsZWdlZCBtb2RlIGZvciB0aGUgc2NoZWR1bGVyIHRvIHN0YXJ0LiAqLw0KKwlfX2FzbSB2b2xhdGlsZSAoICJNUlMgJTAsIEFQU1IiIDogIj1yIiAoIHVsQVBTUiApIDo6ICJtZW1vcnkiICk7DQorCXVsQVBTUiAmPSBwb3J0QVBTUl9NT0RFX0JJVFNfTUFTSzsNCisJY29uZmlnQVNTRVJUKCB1bEFQU1IgIT0gcG9ydEFQU1JfVVNFUl9NT0RFICk7DQogDQotICAgIHVsQVBTUiAmPSBwb3J0QVBTUl9NT0RFX0JJVFNfTUFTSzsNCi0gICAgY29uZmlnQVNTRVJUKCB1bEFQU1IgIT0gcG9ydEFQU1JfVVNFUl9NT0RFICk7DQorCWlmKCB1bEFQU1IgIT0gcG9ydEFQU1JfVVNFUl9NT0RFICkNCisJew0KKwkJLyogU3RhcnQgdGhlIHRpbWVyIHRoYXQgZ2VuZXJhdGVzIHRoZSB0aWNrIElTUi4gKi8NCisJCXBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsNCisJCWNvbmZpZ1NFVFVQX1RJQ0tfSU5URVJSVVBUKCk7DQogDQotICAgIGlmKCB1bEFQU1IgIT0gcG9ydEFQU1JfVVNFUl9NT0RFICkNCi0gICAgew0KLSAgICAgICAgLyogU3RhcnQgdGhlIHRpbWVyIHRoYXQgZ2VuZXJhdGVzIHRoZSB0aWNrIElTUi4gKi8NCi0gICAgICAgIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsNCi0gICAgICAgIGNvbmZpZ1NFVFVQX1RJQ0tfSU5URVJSVVBUKCk7DQorCQkvKiBTdGFydCB0aGUgZmlyc3QgdGFzayBleGVjdXRpbmcuICovDQorCQl2UG9ydFJlc3RvcmVUYXNrQ29udGV4dCgpOw0KKwl9DQogDQotICAgICAgICAvKiBTdGFydCB0aGUgZmlyc3QgdGFzayBleGVjdXRpbmcuICovDQotICAgICAgICB2UG9ydFJlc3RvcmVUYXNrQ29udGV4dCgpOw0KLSAgICB9DQotDQotICAgIC8qIFdpbGwgb25seSBnZXQgaGVyZSBpZiB2VGFza1N0YXJ0U2NoZWR1bGVyKCkgd2FzIGNhbGxlZCB3aXRoIHRoZSBDUFUgaW4NCi0gICAgICogYSBub24tcHJpdmlsZWdlZCBtb2RlIG9yIHRoZSBiaW5hcnkgcG9pbnQgcmVnaXN0ZXIgd2FzIG5vdCBzZXQgdG8gaXRzIGxvd2VzdA0KLSAgICAgKiBwb3NzaWJsZSB2YWx1ZS4gIHBydlRhc2tFeGl0RXJyb3IoKSBpcyByZWZlcmVuY2VkIHRvIHByZXZlbnQgYSBjb21waWxlcg0KLSAgICAgKiB3YXJuaW5nIGFib3V0IGl0IGJlaW5nIGRlZmluZWQgYnV0IG5vdCByZWZlcmVuY2VkIGluIHRoZSBjYXNlIHRoYXQgdGhlIHVzZXINCi0gICAgICogZGVmaW5lcyB0aGVpciBvd24gZXhpdCBhZGRyZXNzLiAqLw0KLSAgICAoIHZvaWQgKSBwcnZUYXNrRXhpdEVycm9yOw0KLSAgICByZXR1cm4gMDsNCisJLyogV2lsbCBvbmx5IGdldCBoZXJlIGlmIHZUYXNrU3RhcnRTY2hlZHVsZXIoKSB3YXMgY2FsbGVkIHdpdGggdGhlIENQVSBpbg0KKwlhIG5vbi1wcml2aWxlZ2VkIG1vZGUgb3IgdGhlIGJpbmFyeSBwb2ludCByZWdpc3RlciB3YXMgbm90IHNldCB0byBpdHMgbG93ZXN0DQorCXBvc3NpYmxlIHZhbHVlLiAgcHJ2VGFza0V4aXRFcnJvcigpIGlzIHJlZmVyZW5jZWQgdG8gcHJldmVudCBhIGNvbXBpbGVyDQorCXdhcm5pbmcgYWJvdXQgaXQgYmVpbmcgZGVmaW5lZCBidXQgbm90IHJlZmVyZW5jZWQgaW4gdGhlIGNhc2UgdGhhdCB0aGUgdXNlcg0KKwlkZWZpbmVzIHRoZWlyIG93biBleGl0IGFkZHJlc3MuICovDQorCSggdm9pZCApIHBydlRhc2tFeGl0RXJyb3I7DQorCXJldHVybiAwOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0RW5kU2NoZWR1bGVyKCB2b2lkICkNCiB7DQotICAgIC8qIE5vdCBpbXBsZW1lbnRlZCBpbiBwb3J0cyB3aGVyZSB0aGVyZSBpcyBub3RoaW5nIHRvIHJldHVybiB0by4NCi0gICAgICogQXJ0aWZpY2lhbGx5IGZvcmNlIGFuIGFzc2VydC4gKi8NCi0gICAgY29uZmlnQVNTRVJUKCB1bENyaXRpY2FsTmVzdGluZyA9PSAxMDAwVUwgKTsNCisJLyogTm90IGltcGxlbWVudGVkIGluIHBvcnRzIHdoZXJlIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmV0dXJuIHRvLg0KKwlBcnRpZmljaWFsbHkgZm9yY2UgYW4gYXNzZXJ0LiAqLw0KKwljb25maWdBU1NFUlQoIHVsQ3JpdGljYWxOZXN0aW5nID09IDEwMDBVTCApOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCggdm9pZCApDQogew0KLSAgICBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7DQorCXBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsNCiANCi0gICAgLyogTm93IGludGVycnVwdHMgYXJlIGRpc2FibGVkIHVsQ3JpdGljYWxOZXN0aW5nIGNhbiBiZSBhY2Nlc3NlZA0KLSAgICAgKiBkaXJlY3RseS4gIEluY3JlbWVudCB1bENyaXRpY2FsTmVzdGluZyB0byBrZWVwIGEgY291bnQgb2YgaG93IG1hbnkgdGltZXMNCi0gICAgICogcG9ydEVOVEVSX0NSSVRJQ0FMKCkgaGFzIGJlZW4gY2FsbGVkLiAqLw0KLSAgICB1bENyaXRpY2FsTmVzdGluZysrOw0KKwkvKiBOb3cgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgdWxDcml0aWNhbE5lc3RpbmcgY2FuIGJlIGFjY2Vzc2VkDQorCWRpcmVjdGx5LiAgSW5jcmVtZW50IHVsQ3JpdGljYWxOZXN0aW5nIHRvIGtlZXAgYSBjb3VudCBvZiBob3cgbWFueSB0aW1lcw0KKwlwb3J0RU5URVJfQ1JJVElDQUwoKSBoYXMgYmVlbiBjYWxsZWQuICovDQorCXVsQ3JpdGljYWxOZXN0aW5nKys7DQogDQotICAgIC8qIFRoaXMgaXMgbm90IHRoZSBpbnRlcnJ1cHQgc2FmZSB2ZXJzaW9uIG9mIHRoZSBlbnRlciBjcml0aWNhbCBmdW5jdGlvbiBzbw0KLSAgICAgKiBhc3NlcnQoKSBpZiBpdCBpcyBiZWluZyBjYWxsZWQgZnJvbSBhbiBpbnRlcnJ1cHQgY29udGV4dC4gIE9ubHkgQVBJDQotICAgICAqIGZ1bmN0aW9ucyB0aGF0IGVuZCBpbiAiRnJvbUlTUiIgY2FuIGJlIHVzZWQgaW4gYW4gaW50ZXJydXB0LiAgT25seSBhc3NlcnQgaWYNCi0gICAgICogdGhlIGNyaXRpY2FsIG5lc3RpbmcgY291bnQgaXMgMSB0byBwcm90ZWN0IGFnYWluc3QgcmVjdXJzaXZlIGNhbGxzIGlmIHRoZQ0KLSAgICAgKiBhc3NlcnQgZnVuY3Rpb24gYWxzbyB1c2VzIGEgY3JpdGljYWwgc2VjdGlvbi4gKi8NCi0gICAgaWYoIHVsQ3JpdGljYWxOZXN0aW5nID09IDEgKQ0KLSAgICB7DQotICAgICAgICBjb25maWdBU1NFUlQoIHVsUG9ydEludGVycnVwdE5lc3RpbmcgPT0gMCApOw0KLSAgICB9DQorCS8qIFRoaXMgaXMgbm90IHRoZSBpbnRlcnJ1cHQgc2FmZSB2ZXJzaW9uIG9mIHRoZSBlbnRlciBjcml0aWNhbCBmdW5jdGlvbiBzbw0KKwlhc3NlcnQoKSBpZiBpdCBpcyBiZWluZyBjYWxsZWQgZnJvbSBhbiBpbnRlcnJ1cHQgY29udGV4dC4gIE9ubHkgQVBJDQorCWZ1bmN0aW9ucyB0aGF0IGVuZCBpbiAiRnJvbUlTUiIgY2FuIGJlIHVzZWQgaW4gYW4gaW50ZXJydXB0LiAgT25seSBhc3NlcnQgaWYNCisJdGhlIGNyaXRpY2FsIG5lc3RpbmcgY291bnQgaXMgMSB0byBwcm90ZWN0IGFnYWluc3QgcmVjdXJzaXZlIGNhbGxzIGlmIHRoZQ0KKwlhc3NlcnQgZnVuY3Rpb24gYWxzbyB1c2VzIGEgY3JpdGljYWwgc2VjdGlvbi4gKi8NCisJaWYoIHVsQ3JpdGljYWxOZXN0aW5nID09IDEgKQ0KKwl7DQorCQljb25maWdBU1NFUlQoIHVsUG9ydEludGVycnVwdE5lc3RpbmcgPT0gMCApOw0KKwl9DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoIHZvaWQgKQ0KIHsNCi0gICAgaWYoIHVsQ3JpdGljYWxOZXN0aW5nID4gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgKQ0KLSAgICB7DQotICAgICAgICAvKiBEZWNyZW1lbnQgdGhlIG5lc3RpbmcgY291bnQgYXMgdGhlIGNyaXRpY2FsIHNlY3Rpb24gaXMgYmVpbmcNCi0gICAgICAgICAqIGV4aXRlZC4gKi8NCi0gICAgICAgIHVsQ3JpdGljYWxOZXN0aW5nLS07DQorCWlmKCB1bENyaXRpY2FsTmVzdGluZyA+IHBvcnROT19DUklUSUNBTF9ORVNUSU5HICkNCisJew0KKwkJLyogRGVjcmVtZW50IHRoZSBuZXN0aW5nIGNvdW50IGFzIHRoZSBjcml0aWNhbCBzZWN0aW9uIGlzIGJlaW5nDQorCQlleGl0ZWQuICovDQorCQl1bENyaXRpY2FsTmVzdGluZy0tOw0KIA0KLSAgICAgICAgLyogSWYgdGhlIG5lc3RpbmcgbGV2ZWwgaGFzIHJlYWNoZWQgemVybyB0aGVuIGFsbCBpbnRlcnJ1cHQNCi0gICAgICAgICAqIHByaW9yaXRpZXMgbXVzdCBiZSByZS1lbmFibGVkLiAqLw0KLSAgICAgICAgaWYoIHVsQ3JpdGljYWxOZXN0aW5nID09IHBvcnROT19DUklUSUNBTF9ORVNUSU5HICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICAvKiBDcml0aWNhbCBuZXN0aW5nIGhhcyByZWFjaGVkIHplcm8gc28gYWxsIGludGVycnVwdCBwcmlvcml0aWVzDQotICAgICAgICAgICAgICogc2hvdWxkIGJlIHVubWFza2VkLiAqLw0KLSAgICAgICAgICAgIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpOw0KLSAgICAgICAgfQ0KLSAgICB9DQorCQkvKiBJZiB0aGUgbmVzdGluZyBsZXZlbCBoYXMgcmVhY2hlZCB6ZXJvIHRoZW4gYWxsIGludGVycnVwdA0KKwkJcHJpb3JpdGllcyBtdXN0IGJlIHJlLWVuYWJsZWQuICovDQorCQlpZiggdWxDcml0aWNhbE5lc3RpbmcgPT0gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgKQ0KKwkJew0KKwkJCS8qIENyaXRpY2FsIG5lc3RpbmcgaGFzIHJlYWNoZWQgemVybyBzbyBhbGwgaW50ZXJydXB0IHByaW9yaXRpZXMNCisJCQlzaG91bGQgYmUgdW5tYXNrZWQuICovDQorCQkJcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7DQorCQl9DQorCX0NCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogdm9pZCBGcmVlUlRPU19UaWNrX0hhbmRsZXIoIHZvaWQgKQ0KIHsNCi0gICAgdWludDMyX3QgdWxJbnRlcnJ1cHRTdGF0dXM7DQordWludDMyX3QgdWxJbnRlcnJ1cHRTdGF0dXM7DQogDQotICAgIHVsSW50ZXJydXB0U3RhdHVzID0gcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpOw0KKwl1bEludGVycnVwdFN0YXR1cyA9IHBvcnRTRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKTsNCiANCi0gICAgLyogSW5jcmVtZW50IHRoZSBSVE9TIHRpY2suICovDQotICAgIGlmKCB4VGFza0luY3JlbWVudFRpY2soKSAhPSBwZEZBTFNFICkNCi0gICAgew0KLSAgICAgICAgdWxQb3J0WWllbGRSZXF1aXJlZCA9IHBkVFJVRTsNCi0gICAgfQ0KKwkvKiBJbmNyZW1lbnQgdGhlIFJUT1MgdGljay4gKi8NCisJaWYoIHhUYXNrSW5jcmVtZW50VGljaygpICE9IHBkRkFMU0UgKQ0KKwl7DQorCQl1bFBvcnRZaWVsZFJlcXVpcmVkID0gcGRUUlVFOw0KKwl9DQogDQotICAgIHBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUiggdWxJbnRlcnJ1cHRTdGF0dXMgKTsNCisJcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCB1bEludGVycnVwdFN0YXR1cyApOw0KIA0KLSAgICBjb25maWdDTEVBUl9USUNLX0lOVEVSUlVQVCgpOw0KKwljb25maWdDTEVBUl9USUNLX0lOVEVSUlVQVCgpOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0VGFza1VzZXNGUFUoIHZvaWQgKQ0KIHsNCi0gICAgdWludDMyX3QgdWxJbml0aWFsRlBTQ1IgPSAwOw0KK3VpbnQzMl90IHVsSW5pdGlhbEZQU0NSID0gMDsNCiANCi0gICAgLyogQSB0YXNrIGlzIHJlZ2lzdGVyaW5nIHRoZSBmYWN0IHRoYXQgaXQgbmVlZHMgYW4gRlBVIGNvbnRleHQuICBTZXQgdGhlDQotICAgICAqIEZQVSBmbGFnICh3aGljaCBpcyBzYXZlZCBhcyBwYXJ0IG9mIHRoZSB0YXNrIGNvbnRleHQpLiAqLw0KLSAgICB1bFBvcnRUYXNrSGFzRlBVQ29udGV4dCA9IHBkVFJVRTsNCisJLyogQSB0YXNrIGlzIHJlZ2lzdGVyaW5nIHRoZSBmYWN0IHRoYXQgaXQgbmVlZHMgYW4gRlBVIGNvbnRleHQuICBTZXQgdGhlDQorCUZQVSBmbGFnICh3aGljaCBpcyBzYXZlZCBhcyBwYXJ0IG9mIHRoZSB0YXNrIGNvbnRleHQpLiAqLw0KKwl1bFBvcnRUYXNrSGFzRlBVQ29udGV4dCA9IHBkVFJVRTsNCiANCi0gICAgLyogSW5pdGlhbGlzZSB0aGUgZmxvYXRpbmcgcG9pbnQgc3RhdHVzIHJlZ2lzdGVyLiAqLw0KLSAgICBfX2FzbSB2b2xhdGlsZSAoICJGTVhSIAlGUFNDUiwgJTAiIDo6InIiICggdWxJbml0aWFsRlBTQ1IgKSA6ICJtZW1vcnkiICk7DQorCS8qIEluaXRpYWxpc2UgdGhlIGZsb2F0aW5nIHBvaW50IHN0YXR1cyByZWdpc3Rlci4gKi8NCisJX19hc20gdm9sYXRpbGUgKCAiRk1YUiAJRlBTQ1IsICUwIiA6OiAiciIgKHVsSW5pdGlhbEZQU0NSKSA6ICJtZW1vcnkiICk7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0dDQy9BUk1fQ1J4X05vX0dJQy9wb3J0bWFjcm8uaCBiL3BvcnRhYmxlL0dDQy9BUk1fQ1J4X05vX0dJQy9wb3J0bWFjcm8uaAppbmRleCBmOGI0MWRjLi5lMDJjNzRmIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9HQ0MvQVJNX0NSeF9Ob19HSUMvcG9ydG1hY3JvLmgKKysrIGIvcG9ydGFibGUvR0NDL0FSTV9DUnhfTm9fR0lDL3BvcnRtYWNyby5oCkBAIC0yNiwxMSArMjYsMTEgQEAKICAqLw0KIA0KICNpZm5kZWYgUE9SVE1BQ1JPX0gNCi0gICAgI2RlZmluZSBQT1JUTUFDUk9fSA0KKyNkZWZpbmUgUE9SVE1BQ1JPX0gNCiANCi0gICAgI2lmZGVmIF9fY3BsdXNwbHVzDQotICAgICAgICBleHRlcm4gIkMiIHsNCi0gICAgI2VuZGlmDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorCWV4dGVybiAiQyIgew0KKyNlbmRpZg0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgKiBQb3J0IHNwZWNpZmljIGRlZmluaXRpb25zLg0KQEAgLTQzLDE0MSArNDMsMTM5IEBACiAgKi8NCiANCiAvKiBUeXBlIGRlZmluaXRpb25zLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRDSEFSICAgICAgICAgIGNoYXINCi0gICAgI2RlZmluZSBwb3J0RkxPQVQgICAgICAgICBmbG9hdA0KLSAgICAjZGVmaW5lIHBvcnRET1VCTEUgICAgICAgIGRvdWJsZQ0KLSAgICAjZGVmaW5lIHBvcnRMT05HICAgICAgICAgIGxvbmcNCi0gICAgI2RlZmluZSBwb3J0U0hPUlQgICAgICAgICBzaG9ydA0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19UWVBFICAgIHVpbnQzMl90DQotICAgICNkZWZpbmUgcG9ydEJBU0VfVFlQRSAgICAgbG9uZw0KKyNkZWZpbmUgcG9ydENIQVIJCWNoYXINCisjZGVmaW5lIHBvcnRGTE9BVAkJZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUJCWRvdWJsZQ0KKyNkZWZpbmUgcG9ydExPTkcJCWxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVAkJc2hvcnQNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFCXVpbnQzMl90DQorI2RlZmluZSBwb3J0QkFTRV9UWVBFCWxvbmcNCiANCi0gICAgdHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSAgIFN0YWNrVHlwZV90Ow0KLSAgICB0eXBlZGVmIGxvbmcgICAgICAgICAgICAgQmFzZVR5cGVfdDsNCi0gICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nICAgIFVCYXNlVHlwZV90Ow0KK3R5cGVkZWYgcG9ydFNUQUNLX1RZUEUgU3RhY2tUeXBlX3Q7DQordHlwZWRlZiBsb25nIEJhc2VUeXBlX3Q7DQordHlwZWRlZiB1bnNpZ25lZCBsb25nIFVCYXNlVHlwZV90Ow0KIA0KLSAgICB0eXBlZGVmIHVpbnQzMl90ICAgICAgICAgVGlja1R5cGVfdDsNCi0gICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICAgICAgICAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwNCit0eXBlZGVmIHVpbnQzMl90IFRpY2tUeXBlX3Q7DQorI2RlZmluZSBwb3J0TUFYX0RFTEFZICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTA0KIA0KIC8qIDMyLWJpdCB0aWNrIHR5cGUgb24gYSAzMi1iaXQgYXJjaGl0ZWN0dXJlLCBzbyByZWFkcyBvZiB0aGUgdGljayBjb3VudCBkbw0KLSAqIG5vdCBuZWVkIHRvIGJlIGd1YXJkZWQgd2l0aCBhIGNyaXRpY2FsIHNlY3Rpb24uICovDQotICAgICNkZWZpbmUgcG9ydFRJQ0tfVFlQRV9JU19BVE9NSUMgICAgMQ0KK25vdCBuZWVkIHRvIGJlIGd1YXJkZWQgd2l0aCBhIGNyaXRpY2FsIHNlY3Rpb24uICovDQorI2RlZmluZSBwb3J0VElDS19UWVBFX0lTX0FUT01JQyAxDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogSGFyZHdhcmUgc3BlY2lmaWNzLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEggICAgICAoIC0xICkNCi0gICAgI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMgICAgKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCi0gICAgI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQgICAgOA0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJCSggLTEgKQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TCQkJKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCisjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVAkJCTgNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBUYXNrIHV0aWxpdGllcy4gKi8NCiANCiAvKiBDYWxsZWQgYXQgdGhlIGVuZCBvZiBhbiBJU1IgdGhhdCBjYW4gY2F1c2UgYSBjb250ZXh0IHN3aXRjaC4gKi8NCi0gICAgI2RlZmluZSBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHhTd2l0Y2hSZXF1aXJlZCApICBcDQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgZXh0ZXJuIHZvbGF0aWxlIHVpbnQzMl90IHVsUG9ydFlpZWxkUmVxdWlyZWQ7IFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBpZiggeFN3aXRjaFJlcXVpcmVkICE9IHBkRkFMU0UgKSAgICAgICAgICAgICAgXA0KLSAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICB1bFBvcnRZaWVsZFJlcXVpcmVkID0gcGRUUlVFOyAgICAgICAgICAgICBcDQotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB9DQorI2RlZmluZSBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHhTd2l0Y2hSZXF1aXJlZCApXA0KK3sJCQkJCQkJCQkJCQlcDQorZXh0ZXJuIHZvbGF0aWxlIHVpbnQzMl90IHVsUG9ydFlpZWxkUmVxdWlyZWQ7CVwNCisJCQkJCQkJCQkJCQlcDQorCWlmKCB4U3dpdGNoUmVxdWlyZWQgIT0gcGRGQUxTRSApCQkJXA0KKwl7CQkJCQkJCQkJCQlcDQorCQl1bFBvcnRZaWVsZFJlcXVpcmVkID0gcGRUUlVFOwkJCVwNCisJfQkJCQkJCQkJCQkJXA0KK30NCiANCi0gICAgI2RlZmluZSBwb3J0WUlFTERfRlJPTV9JU1IoIHggKSAgICBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHggKQ0KLSAgICAjZGVmaW5lIHBvcnRZSUVMRCgpICAgICAgICAgIFwNCi0gICAgX19hc20gdm9sYXRpbGUgKCAiU1dJIDAJCVxuIlwNCi0gICAgICAgICAgICAgICAgICAgICAiSVNCCQkgICI6OjogIm1lbW9yeSIgKTsNCisjZGVmaW5lIHBvcnRZSUVMRF9GUk9NX0lTUiggeCApIHBvcnRFTkRfU1dJVENISU5HX0lTUiggeCApDQorI2RlZmluZSBwb3J0WUlFTEQoKSBfX2FzbSB2b2xhdGlsZSAoICJTV0kgMAkJXG4iCQkJCVwNCisJCQkJCQkJCQkgIklTQgkJICAiIDo6OiAibWVtb3J5IiApOw0KIA0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0qIENyaXRpY2FsIHNlY3Rpb24gY29udHJvbA0KLSotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisgKiBDcml0aWNhbCBzZWN0aW9uIGNvbnRyb2wNCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KLSAgICBleHRlcm4gdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKTsNCi0gICAgZXh0ZXJuIHZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCi0gICAgZXh0ZXJuIHVpbnQzMl90IHVsUG9ydFNldEludGVycnVwdE1hc2soIHZvaWQgKTsNCi0gICAgZXh0ZXJuIHZvaWQgdlBvcnRDbGVhckludGVycnVwdE1hc2soIHVpbnQzMl90IHVsTmV3TWFza1ZhbHVlICk7DQotICAgIGV4dGVybiB2b2lkIHZQb3J0SW5zdGFsbEZyZWVSVE9TVmVjdG9yVGFibGUoIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApOw0KK2V4dGVybiB1aW50MzJfdCB1bFBvcnRTZXRJbnRlcnJ1cHRNYXNrKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdlBvcnRDbGVhckludGVycnVwdE1hc2soIHVpbnQzMl90IHVsTmV3TWFza1ZhbHVlICk7DQorZXh0ZXJuIHZvaWQgdlBvcnRJbnN0YWxsRnJlZVJUT1NWZWN0b3JUYWJsZSggdm9pZCApOw0KIA0KIC8qIFRoZSBJIGJpdCB3aXRoaW4gdGhlIENQU1IuICovDQotICAgICNkZWZpbmUgcG9ydElOVEVSUlVQVF9FTkFCTEVfQklUICAgICggMSA8PCA3ICkNCisjZGVmaW5lIHBvcnRJTlRFUlJVUFRfRU5BQkxFX0JJVAkoIDEgPDwgNyApDQogDQogLyogSW4gdGhlIGFic2VuY2Ugb2YgYSBwcmlvcml0eSBtYXNrIHJlZ2lzdGVyLCB0aGVzZSBmdW5jdGlvbnMgYW5kIG1hY3Jvcw0KLSAqIGdsb2JhbGx5IGVuYWJsZSBhbmQgZGlzYWJsZSBpbnRlcnJ1cHRzLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpICAgICAgIHZQb3J0RW50ZXJDcml0aWNhbCgpOw0KLSAgICAjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkgICAgICAgIHZQb3J0RXhpdENyaXRpY2FsKCk7DQotICAgICNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkgICAgX19hc20gdm9sYXRpbGUgKCAiQ1BTSUUgaSAJXG4iOjo6ICJtZW1vcnkiICk7DQotICAgICNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpIFwNCi0gICAgX19hc20gdm9sYXRpbGUgKCAiQ1BTSUQgaSAJXG4iICBcDQotICAgICAgICAgICAgICAgICAgICAgIkRTQgkJXG4iICBcDQotICAgICAgICAgICAgICAgICAgICAgIklTQgkJICAiOjo6ICJtZW1vcnkiICk7DQorZ2xvYmFsbHkgZW5hYmxlIGFuZCBkaXNhYmxlIGludGVycnVwdHMuICovDQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKQkJdlBvcnRFbnRlckNyaXRpY2FsKCk7DQorI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpCQkJdlBvcnRFeGl0Q3JpdGljYWwoKTsNCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpCQlfX2FzbSB2b2xhdGlsZSAoICJDUFNJRSBpIAlcbiIJOjo6ICJtZW1vcnkiICk7DQorI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkJX19hc20gdm9sYXRpbGUgKCAiQ1BTSUQgaSAJXG4iCQlcDQorCQkJCQkJCQkJCQkJCSAiRFNCCQlcbiIJCVwNCisJCQkJCQkJCQkJCQkJICJJU0IJCSAgIiA6OjogIm1lbW9yeSIgKTsNCiANCi0gICAgX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBzdGF0aWMgX19pbmxpbmUgdWludDMyX3QgcG9ydElOTElORV9TRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoIHZvaWQgKQ0KLSAgICB7DQotICAgICAgICB2b2xhdGlsZSB1aW50MzJfdCB1bENQU1I7DQorX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBzdGF0aWMgX19pbmxpbmUgdWludDMyX3QgcG9ydElOTElORV9TRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoIHZvaWQgKQ0KK3sNCit2b2xhdGlsZSB1aW50MzJfdCB1bENQU1I7DQogDQotICAgICAgICBfX2FzbSB2b2xhdGlsZSAoICJNUlMgJTAsIENQU1IiIDogIj1yIiAoIHVsQ1BTUiApOjoibWVtb3J5IiApOw0KKwlfX2FzbSB2b2xhdGlsZSAoICJNUlMgJTAsIENQU1IiIDogIj1yIiAodWxDUFNSKSA6OiAibWVtb3J5IiApOw0KKwl1bENQU1IgJj0gcG9ydElOVEVSUlVQVF9FTkFCTEVfQklUOw0KKwlwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7DQorCXJldHVybiB1bENQU1I7DQorfQ0KIA0KLSAgICAgICAgdWxDUFNSICY9IHBvcnRJTlRFUlJVUFRfRU5BQkxFX0JJVDsNCi0gICAgICAgIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsNCi0gICAgICAgIHJldHVybiB1bENQU1I7DQotICAgIH0NCi0NCi0gICAgI2RlZmluZSBwb3J0U0VUX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCkgICAgICAgICBwb3J0SU5MSU5FX1NFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpDQotICAgICNkZWZpbmUgcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCB4ICkgICAgaWYoIHggPT0gMCApIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpDQorI2RlZmluZSBwb3J0U0VUX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCkgcG9ydElOTElORV9TRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKQ0KKyNkZWZpbmUgcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKHgpCWlmKCB4ID09IDAgKSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKQ0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAgVGhlc2UgYXJlDQotICogbm90IHJlcXVpcmVkIGZvciB0aGlzIHBvcnQgYnV0IGluY2x1ZGVkIGluIGNhc2UgY29tbW9uIGRlbW8gY29kZSB0aGF0IHVzZXMgdGhlc2UNCi0gKiBtYWNyb3MgaXMgdXNlZC4gKi8NCi0gICAgI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQotICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgICAgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KK25vdCByZXF1aXJlZCBmb3IgdGhpcyBwb3J0IGJ1dCBpbmNsdWRlZCBpbiBjYXNlIGNvbW1vbiBkZW1vIGNvZGUgdGhhdCB1c2VzIHRoZXNlDQorbWFjcm9zIGlzIHVzZWQuICovDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKQl2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApCXZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KIA0KIC8qIFRpY2tsZXNzIGlkbGUvbG93IHBvd2VyIGZ1bmN0aW9uYWxpdHkuICovDQotICAgICNpZm5kZWYgcG9ydFNVUFBSRVNTX1RJQ0tTX0FORF9TTEVFUA0KLSAgICAgICAgZXh0ZXJuIHZvaWQgdlBvcnRTdXBwcmVzc1RpY2tzQW5kU2xlZXAoIFRpY2tUeXBlX3QgeEV4cGVjdGVkSWRsZVRpbWUgKTsNCi0gICAgICAgICNkZWZpbmUgcG9ydFNVUFBSRVNTX1RJQ0tTX0FORF9TTEVFUCggeEV4cGVjdGVkSWRsZVRpbWUgKSAgICB2UG9ydFN1cHByZXNzVGlja3NBbmRTbGVlcCggeEV4cGVjdGVkSWRsZVRpbWUgKQ0KLSAgICAjZW5kaWYNCisjaWZuZGVmIHBvcnRTVVBQUkVTU19USUNLU19BTkRfU0xFRVANCisJZXh0ZXJuIHZvaWQgdlBvcnRTdXBwcmVzc1RpY2tzQW5kU2xlZXAoIFRpY2tUeXBlX3QgeEV4cGVjdGVkSWRsZVRpbWUgKTsNCisJI2RlZmluZSBwb3J0U1VQUFJFU1NfVElDS1NfQU5EX1NMRUVQKCB4RXhwZWN0ZWRJZGxlVGltZSApIHZQb3J0U3VwcHJlc3NUaWNrc0FuZFNsZWVwKCB4RXhwZWN0ZWRJZGxlVGltZSApDQorI2VuZGlmDQogDQogLyogUHJvdG90eXBlIG9mIHRoZSBGcmVlUlRPUyB0aWNrIGhhbmRsZXIuICBUaGlzIG11c3QgYmUgaW5zdGFsbGVkIGFzIHRoZQ0KLSAqIGhhbmRsZXIgZm9yIHdoaWNoZXZlciBwZXJpcGhlcmFsIGlzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIFJUT1MgdGljay4gKi8NCi0gICAgdm9pZCBGcmVlUlRPU19UaWNrX0hhbmRsZXIoIHZvaWQgKTsNCitoYW5kbGVyIGZvciB3aGljaGV2ZXIgcGVyaXBoZXJhbCBpcyB1c2VkIHRvIGdlbmVyYXRlIHRoZSBSVE9TIHRpY2suICovDQordm9pZCBGcmVlUlRPU19UaWNrX0hhbmRsZXIoIHZvaWQgKTsNCiANCiAvKiBBbnkgdGFzayB0aGF0IHVzZXMgdGhlIGZsb2F0aW5nIHBvaW50IHVuaXQgTVVTVCBjYWxsIHZQb3J0VGFza1VzZXNGUFUoKQ0KLSAqIGJlZm9yZSBhbnkgZmxvYXRpbmcgcG9pbnQgaW5zdHJ1Y3Rpb25zIGFyZSBleGVjdXRlZC4gKi8NCi0gICAgdm9pZCB2UG9ydFRhc2tVc2VzRlBVKCB2b2lkICk7DQotICAgICNkZWZpbmUgcG9ydFRBU0tfVVNFU19GTE9BVElOR19QT0lOVCgpICAgIHZQb3J0VGFza1VzZXNGUFUoKQ0KK2JlZm9yZSBhbnkgZmxvYXRpbmcgcG9pbnQgaW5zdHJ1Y3Rpb25zIGFyZSBleGVjdXRlZC4gKi8NCit2b2lkIHZQb3J0VGFza1VzZXNGUFUoIHZvaWQgKTsNCisjZGVmaW5lIHBvcnRUQVNLX1VTRVNfRkxPQVRJTkdfUE9JTlQoKSB2UG9ydFRhc2tVc2VzRlBVKCkNCiANCi0gICAgI2RlZmluZSBwb3J0TE9XRVNUX0lOVEVSUlVQVF9QUklPUklUWSAgICAgICAgICAgKCAoICggdWludDMyX3QgKSBjb25maWdVTklRVUVfSU5URVJSVVBUX1BSSU9SSVRJRVMgKSAtIDFVTCApDQotICAgICNkZWZpbmUgcG9ydExPV0VTVF9VU0FCTEVfSU5URVJSVVBUX1BSSU9SSVRZICAgICggcG9ydExPV0VTVF9JTlRFUlJVUFRfUFJJT1JJVFkgLSAxVUwgKQ0KKyNkZWZpbmUgcG9ydExPV0VTVF9JTlRFUlJVUFRfUFJJT1JJVFkgKCAoICggdWludDMyX3QgKSBjb25maWdVTklRVUVfSU5URVJSVVBUX1BSSU9SSVRJRVMgKSAtIDFVTCApDQorI2RlZmluZSBwb3J0TE9XRVNUX1VTQUJMRV9JTlRFUlJVUFRfUFJJT1JJVFkgKCBwb3J0TE9XRVNUX0lOVEVSUlVQVF9QUklPUklUWSAtIDFVTCApDQogDQogLyogQXJjaGl0ZWN0dXJlIHNwZWNpZmljIG9wdGltaXNhdGlvbnMuICovDQotICAgICNpZm5kZWYgY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9ODQotICAgICAgICAjZGVmaW5lIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiAgICAxDQotICAgICNlbmRpZg0KKyNpZm5kZWYgY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9ODQorCSNkZWZpbmUgY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OIDENCisjZW5kaWYNCiANCi0gICAgI2lmIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiA9PSAxDQorI2lmIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiA9PSAxDQogDQotLyogU3RvcmUvY2xlYXIgdGhlIHJlYWR5IHByaW9yaXRpZXMgaW4gYSBiaXQgbWFwLiAqLw0KLSAgICAgICAgI2RlZmluZSBwb3J0UkVDT1JEX1JFQURZX1BSSU9SSVRZKCB1eFByaW9yaXR5LCB1eFJlYWR5UHJpb3JpdGllcyApICAgICggdXhSZWFkeVByaW9yaXRpZXMgKSB8PSAoIDFVTCA8PCAoIHV4UHJpb3JpdHkgKSApDQotICAgICAgICAjZGVmaW5lIHBvcnRSRVNFVF9SRUFEWV9QUklPUklUWSggdXhQcmlvcml0eSwgdXhSZWFkeVByaW9yaXRpZXMgKSAgICAgKCB1eFJlYWR5UHJpb3JpdGllcyApICY9IH4oIDFVTCA8PCAoIHV4UHJpb3JpdHkgKSApDQorCS8qIFN0b3JlL2NsZWFyIHRoZSByZWFkeSBwcmlvcml0aWVzIGluIGEgYml0IG1hcC4gKi8NCisJI2RlZmluZSBwb3J0UkVDT1JEX1JFQURZX1BSSU9SSVRZKCB1eFByaW9yaXR5LCB1eFJlYWR5UHJpb3JpdGllcyApICggdXhSZWFkeVByaW9yaXRpZXMgKSB8PSAoIDFVTCA8PCAoIHV4UHJpb3JpdHkgKSApDQorCSNkZWZpbmUgcG9ydFJFU0VUX1JFQURZX1BSSU9SSVRZKCB1eFByaW9yaXR5LCB1eFJlYWR5UHJpb3JpdGllcyApICggdXhSZWFkeVByaW9yaXRpZXMgKSAmPSB+KCAxVUwgPDwgKCB1eFByaW9yaXR5ICkgKQ0KIA0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0gICAgICAgICNkZWZpbmUgcG9ydEdFVF9ISUdIRVNUX1BSSU9SSVRZKCB1eFRvcFByaW9yaXR5LCB1eFJlYWR5UHJpb3JpdGllcyApICAgIHV4VG9wUHJpb3JpdHkgPSAoIDMxVUwgLSAoIHVpbnQzMl90ICkgX19idWlsdGluX2NseiggdXhSZWFkeVByaW9yaXRpZXMgKSApDQorCSNkZWZpbmUgcG9ydEdFVF9ISUdIRVNUX1BSSU9SSVRZKCB1eFRvcFByaW9yaXR5LCB1eFJlYWR5UHJpb3JpdGllcyApIHV4VG9wUHJpb3JpdHkgPSAoIDMxVUwgLSAoIHVpbnQzMl90ICkgX19idWlsdGluX2NseiggdXhSZWFkeVByaW9yaXRpZXMgKSApDQogDQotICAgICNlbmRpZiAvKiBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gKi8NCisjZW5kaWYgLyogY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OICovDQogDQotICAgICNkZWZpbmUgcG9ydE5PUCgpICAgICAgICAgICAgICAgX19hc20gdm9sYXRpbGUgKCAiTk9QIiApDQotICAgICNkZWZpbmUgcG9ydElOTElORSAgICBfX2lubGluZQ0KKyNkZWZpbmUgcG9ydE5PUCgpIF9fYXNtIHZvbGF0aWxlKCAiTk9QIiApDQorI2RlZmluZSBwb3J0SU5MSU5FIF9faW5saW5lDQogDQotICAgICNkZWZpbmUgcG9ydE1FTU9SWV9CQVJSSUVSKCkgICAgX19hc20gdm9sYXRpbGUgKCAiIiA6OjogIm1lbW9yeSIgKQ0KKyNkZWZpbmUgcG9ydE1FTU9SWV9CQVJSSUVSKCkgX19hc20gdm9sYXRpbGUoICIiIDo6OiAibWVtb3J5IiApDQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgfSAvKiBleHRlcm4gQyAqLw0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCisJfSAvKiBleHRlcm4gQyAqLw0KKyNlbmRpZg0KIA0KIA0KICNlbmRpZiAvKiBQT1JUTUFDUk9fSCAqLw0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0dDQy9BVE1lZ2EzMjMvcG9ydC5jIGIvcG9ydGFibGUvR0NDL0FUTWVnYTMyMy9wb3J0LmMKaW5kZXggNWJiZjAxMi4uMzFlMjhiNiAxMDA2NDQKLS0tIGEvcG9ydGFibGUvR0NDL0FUTWVnYTMyMy9wb3J0LmMKKysrIGIvcG9ydGFibGUvR0NDL0FUTWVnYTMyMy9wb3J0LmMKQEAgLTI1LDE0ICsyNSwxNCBAQAogICogMSB0YWIgPT0gNCBzcGFjZXMhDQogICovDQogDQotLyoNCi0gKg0KLSAqIENoYW5nZXMgZnJvbSBWMi42LjANCi0gKg0KLSArIEFWUiBwb3J0IC0gUmVwbGFjZWQgdGhlIGluYigpIGFuZCBvdXRiKCkgZnVuY3Rpb25zIHdpdGggZGlyZWN0IG1lbW9yeQ0KLSArICAgIGFjY2Vzcy4gIFRoaXMgYWxsb3dzIHRoZSBwb3J0IHRvIGJlIGJ1aWx0IHdpdGggdGhlIDIwMDUwNDE0IGJ1aWxkIG9mDQotICsgICAgV2luQVZSLg0KLSAqLw0KKy8qIA0KKw0KK0NoYW5nZXMgZnJvbSBWMi42LjANCisNCisJKyBBVlIgcG9ydCAtIFJlcGxhY2VkIHRoZSBpbmIoKSBhbmQgb3V0YigpIGZ1bmN0aW9ucyB3aXRoIGRpcmVjdCBtZW1vcnkNCisJICBhY2Nlc3MuICBUaGlzIGFsbG93cyB0aGUgcG9ydCB0byBiZSBidWlsdCB3aXRoIHRoZSAyMDA1MDQxNCBidWlsZCBvZg0KKwkgIFdpbkFWUi4NCisqLw0KIA0KICNpbmNsdWRlIDxzdGRsaWIuaD4NCiAjaW5jbHVkZSA8YXZyL2ludGVycnVwdC5oPg0KQEAgLTQxLDEzNSArNDEsMTM1IEBACiAjaW5jbHVkZSAidGFzay5oIg0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0qIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBBVlIgcG9ydC4NCi0qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorICogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFibGUuaCBmb3IgdGhlIEFWUiBwb3J0Lg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogU3RhcnQgdGFza3Mgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZXMuICovDQotI2RlZmluZSBwb3J0RkxBR1NfSU5UX0VOQUJMRUQgICAgICAgICAgICAgICAgICAgKCAoIFN0YWNrVHlwZV90ICkgMHg4MCApDQorI2RlZmluZSBwb3J0RkxBR1NfSU5UX0VOQUJMRUQJCQkJCSggKCBTdGFja1R5cGVfdCApIDB4ODAgKQ0KIA0KIC8qIEhhcmR3YXJlIGNvbnN0YW50cyBmb3IgdGltZXIgMS4gKi8NCi0jZGVmaW5lIHBvcnRDTEVBUl9DT1VOVEVSX09OX01BVENIICAgICAgICAgICAgICAoICggdWludDhfdCApIDB4MDggKQ0KLSNkZWZpbmUgcG9ydFBSRVNDQUxFXzY0ICAgICAgICAgICAgICAgICAgICAgICAgICggKCB1aW50OF90ICkgMHgwMyApDQotI2RlZmluZSBwb3J0Q0xPQ0tfUFJFU0NBTEVSICAgICAgICAgICAgICAgICAgICAgKCAoIHVpbnQzMl90ICkgNjQgKQ0KLSNkZWZpbmUgcG9ydENPTVBBUkVfTUFUQ0hfQV9JTlRFUlJVUFRfRU5BQkxFICAgICggKCB1aW50OF90ICkgMHgxMCApDQorI2RlZmluZSBwb3J0Q0xFQVJfQ09VTlRFUl9PTl9NQVRDSAkJCQkoICggdWludDhfdCApIDB4MDggKQ0KKyNkZWZpbmUgcG9ydFBSRVNDQUxFXzY0CQkJCQkJCSggKCB1aW50OF90ICkgMHgwMyApDQorI2RlZmluZSBwb3J0Q0xPQ0tfUFJFU0NBTEVSCQkJCQkJKCAoIHVpbnQzMl90ICkgNjQgKQ0KKyNkZWZpbmUgcG9ydENPTVBBUkVfTUFUQ0hfQV9JTlRFUlJVUFRfRU5BQkxFCSggKCB1aW50OF90ICkgMHgxMCApDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogV2UgcmVxdWlyZSB0aGUgYWRkcmVzcyBvZiB0aGUgcHhDdXJyZW50VENCIHZhcmlhYmxlLCBidXQgZG9uJ3Qgd2FudCB0byBrbm93DQotICogYW55IGRldGFpbHMgb2YgaXRzIHR5cGUuICovDQorYW55IGRldGFpbHMgb2YgaXRzIHR5cGUuICovDQogdHlwZWRlZiB2b2lkIFRDQl90Ow0KIGV4dGVybiB2b2xhdGlsZSBUQ0JfdCAqIHZvbGF0aWxlIHB4Q3VycmVudFRDQjsNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0vKg0KKy8qIA0KICAqIE1hY3JvIHRvIHNhdmUgYWxsIHRoZSBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzLCB0aGUgc2F2ZSB0aGUgc3RhY2sgcG9pbnRlcg0KLSAqIGludG8gdGhlIFRDQi4NCi0gKg0KLSAqIFRoZSBmaXJzdCB0aGluZyB3ZSBkbyBpcyBzYXZlIHRoZSBmbGFncyB0aGVuIGRpc2FibGUgaW50ZXJydXB0cy4gIFRoaXMgaXMgdG8NCi0gKiBndWFyZCBvdXIgc3RhY2sgYWdhaW5zdCBoYXZpbmcgYSBjb250ZXh0IHN3aXRjaCBpbnRlcnJ1cHQgYWZ0ZXIgd2UgaGF2ZSBhbHJlYWR5DQotICogcHVzaGVkIHRoZSByZWdpc3RlcnMgb250byB0aGUgc3RhY2sgLSBjYXVzaW5nIHRoZSAzMiByZWdpc3RlcnMgdG8gYmUgb24gdGhlDQotICogc3RhY2sgdHdpY2UuDQotICoNCisgKiBpbnRvIHRoZSBUQ0IuICANCisgKiANCisgKiBUaGUgZmlyc3QgdGhpbmcgd2UgZG8gaXMgc2F2ZSB0aGUgZmxhZ3MgdGhlbiBkaXNhYmxlIGludGVycnVwdHMuICBUaGlzIGlzIHRvIA0KKyAqIGd1YXJkIG91ciBzdGFjayBhZ2FpbnN0IGhhdmluZyBhIGNvbnRleHQgc3dpdGNoIGludGVycnVwdCBhZnRlciB3ZSBoYXZlIGFscmVhZHkgDQorICogcHVzaGVkIHRoZSByZWdpc3RlcnMgb250byB0aGUgc3RhY2sgLSBjYXVzaW5nIHRoZSAzMiByZWdpc3RlcnMgdG8gYmUgb24gdGhlIA0KKyAqIHN0YWNrIHR3aWNlLiANCisgKiANCiAgKiByMSBpcyBzZXQgdG8gemVybyBhcyB0aGUgY29tcGlsZXIgZXhwZWN0cyBpdCB0byBiZSB0aHVzLCBob3dldmVyIHNvbWUNCi0gKiBvZiB0aGUgbWF0aCByb3V0aW5lcyBtYWtlIHVzZSBvZiBSMS4NCi0gKg0KKyAqIG9mIHRoZSBtYXRoIHJvdXRpbmVzIG1ha2UgdXNlIG9mIFIxLiANCisgKiANCiAgKiBUaGUgaW50ZXJydXB0cyB3aWxsIGhhdmUgYmVlbiBkaXNhYmxlZCBkdXJpbmcgdGhlIGNhbGwgdG8gcG9ydFNBVkVfQ09OVEVYVCgpDQotICogc28gd2UgbmVlZCBub3Qgd29ycnkgYWJvdXQgcmVhZGluZy93cml0aW5nIHRvIHRoZSBzdGFjayBwb2ludGVyLg0KKyAqIHNvIHdlIG5lZWQgbm90IHdvcnJ5IGFib3V0IHJlYWRpbmcvd3JpdGluZyB0byB0aGUgc3RhY2sgcG9pbnRlci4gDQogICovDQogDQotI2RlZmluZSBwb3J0U0FWRV9DT05URVhUKCkgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgYXNtIHZvbGF0aWxlICggInB1c2gJcjAJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgImluCQlyMCwgX19TUkVHX18JCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgImNsaQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgInB1c2gJcjAJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgInB1c2gJcjEJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgImNscglyMQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAicHVzaAlyMgkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAicHVzaAlyMwkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAicHVzaAlyNAkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAicHVzaAlyNQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAicHVzaAlyNgkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAicHVzaAlyNwkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAicHVzaAlyOAkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAicHVzaAlyOQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAicHVzaAlyMTAJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgInB1c2gJcjExCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICJwdXNoCXIxMgkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAicHVzaAlyMTMJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgInB1c2gJcjE0CQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICJwdXNoCXIxNQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAicHVzaAlyMTYJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgInB1c2gJcjE3CQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICJwdXNoCXIxOAkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAicHVzaAlyMTkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgInB1c2gJcjIwCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICJwdXNoCXIyMQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAicHVzaAlyMjIJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgInB1c2gJcjIzCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICJwdXNoCXIyNAkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAicHVzaAlyMjUJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgInB1c2gJcjI2CQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICJwdXNoCXIyNwkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAicHVzaAlyMjgJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgInB1c2gJcjI5CQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICJwdXNoCXIzMAkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAicHVzaAlyMzEJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgImxkcwlyMjYsIHB4Q3VycmVudFRDQgkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICJsZHMJcjI3LCBweEN1cnJlbnRUQ0IgKyAxCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAiaW4JCXIwLCAweDNkCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAic3QJCXgrLCByMAkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICJpbgkJcjAsIDB4M2UJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICJzdAkJeCssIHIwCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgKTsNCisjZGVmaW5lIHBvcnRTQVZFX0NPTlRFWFQoKQkJCQkJCQkJCVwNCisJYXNtIHZvbGF0aWxlICgJInB1c2gJcjAJCQkJCQlcblx0IglcDQorCQkJCQkiaW4JCXIwLCBfX1NSRUdfXwkJCVxuXHQiCVwNCisJCQkJCSJjbGkJCQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjAJCQkJCQlcblx0IglcDQorCQkJCQkicHVzaAlyMQkJCQkJCVxuXHQiCVwNCisJCQkJCSJjbHIJcjEJCQkJCQlcblx0IglcDQorCQkJCQkicHVzaAlyMgkJCQkJCVxuXHQiCVwNCisJCQkJCSJwdXNoCXIzCQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjQJCQkJCQlcblx0IglcDQorCQkJCQkicHVzaAlyNQkJCQkJCVxuXHQiCVwNCisJCQkJCSJwdXNoCXI2CQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjcJCQkJCQlcblx0IglcDQorCQkJCQkicHVzaAlyOAkJCQkJCVxuXHQiCVwNCisJCQkJCSJwdXNoCXI5CQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjEwCQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjExCQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjEyCQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjEzCQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjE0CQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjE1CQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjE2CQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjE3CQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjE4CQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjE5CQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjIwCQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjIxCQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjIyCQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjIzCQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjI0CQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjI1CQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjI2CQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjI3CQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjI4CQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjI5CQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjMwCQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjMxCQkJCQkJXG5cdCIJXA0KKwkJCQkJImxkcwlyMjYsIHB4Q3VycmVudFRDQgkJXG5cdCIJXA0KKwkJCQkJImxkcwlyMjcsIHB4Q3VycmVudFRDQiArIDEJXG5cdCIJXA0KKwkJCQkJImluCQlyMCwgMHgzZAkJCQlcblx0IglcDQorCQkJCQkic3QJCXgrLCByMAkJCQkJXG5cdCIJXA0KKwkJCQkJImluCQlyMCwgMHgzZQkJCQlcblx0IglcDQorCQkJCQkic3QJCXgrLCByMAkJCQkJXG5cdCIJXA0KKwkJCQkpOw0KIA0KLS8qDQorLyogDQogICogT3Bwb3NpdGUgdG8gcG9ydFNBVkVfQ09OVEVYVCgpLiAgSW50ZXJydXB0cyB3aWxsIGhhdmUgYmVlbiBkaXNhYmxlZCBkdXJpbmcNCi0gKiB0aGUgY29udGV4dCBzYXZlIHNvIHdlIGNhbiB3cml0ZSB0byB0aGUgc3RhY2sgcG9pbnRlci4NCisgKiB0aGUgY29udGV4dCBzYXZlIHNvIHdlIGNhbiB3cml0ZSB0byB0aGUgc3RhY2sgcG9pbnRlci4gDQogICovDQogDQotI2RlZmluZSBwb3J0UkVTVE9SRV9DT05URVhUKCkgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgYXNtIHZvbGF0aWxlICggImxkcwlyMjYsIHB4Q3VycmVudFRDQgkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICJsZHMJcjI3LCBweEN1cnJlbnRUQ0IgKyAxCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAibGQJCXIyOCwgeCsJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAib3V0CV9fU1BfTF9fLCByMjgJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgImxkCQlyMjksIHgrCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgIm91dAlfX1NQX0hfXywgcjI5CQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICJwb3AJcjMxCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICJwb3AJcjMwCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICJwb3AJcjI5CQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICJwb3AJcjI4CQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICJwb3AJcjI3CQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICJwb3AJcjI2CQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICJwb3AJcjI1CQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICJwb3AJcjI0CQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICJwb3AJcjIzCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICJwb3AJcjIyCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICJwb3AJcjIxCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICJwb3AJcjIwCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICJwb3AJcjE5CQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICJwb3AJcjE4CQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICJwb3AJcjE3CQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICJwb3AJcjE2CQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICJwb3AJcjE1CQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICJwb3AJcjE0CQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICJwb3AJcjEzCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICJwb3AJcjEyCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICJwb3AJcjExCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICJwb3AJcjEwCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICJwb3AJcjkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgInBvcAlyOAkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAicG9wCXI3CQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICJwb3AJcjYJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgInBvcAlyNQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAicG9wCXI0CQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICJwb3AJcjMJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgInBvcAlyMgkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAicG9wCXIxCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICJwb3AJcjAJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgIm91dAlfX1NSRUdfXywgcjAJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgInBvcAlyMAkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICApOw0KKyNkZWZpbmUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpCQkJCQkJCQlcDQorCWFzbSB2b2xhdGlsZSAoCSJsZHMJcjI2LCBweEN1cnJlbnRUQ0IJCVxuXHQiCVwNCisJCQkJCSJsZHMJcjI3LCBweEN1cnJlbnRUQ0IgKyAxCVxuXHQiCVwNCisJCQkJCSJsZAkJcjI4LCB4KwkJCQkJXG5cdCIJXA0KKwkJCQkJIm91dAlfX1NQX0xfXywgcjI4CQkJXG5cdCIJXA0KKwkJCQkJImxkCQlyMjksIHgrCQkJCQlcblx0IglcDQorCQkJCQkib3V0CV9fU1BfSF9fLCByMjkJCQlcblx0IglcDQorCQkJCQkicG9wCXIzMQkJCQkJCVxuXHQiCVwNCisJCQkJCSJwb3AJcjMwCQkJCQkJXG5cdCIJXA0KKwkJCQkJInBvcAlyMjkJCQkJCQlcblx0IglcDQorCQkJCQkicG9wCXIyOAkJCQkJCVxuXHQiCVwNCisJCQkJCSJwb3AJcjI3CQkJCQkJXG5cdCIJXA0KKwkJCQkJInBvcAlyMjYJCQkJCQlcblx0IglcDQorCQkJCQkicG9wCXIyNQkJCQkJCVxuXHQiCVwNCisJCQkJCSJwb3AJcjI0CQkJCQkJXG5cdCIJXA0KKwkJCQkJInBvcAlyMjMJCQkJCQlcblx0IglcDQorCQkJCQkicG9wCXIyMgkJCQkJCVxuXHQiCVwNCisJCQkJCSJwb3AJcjIxCQkJCQkJXG5cdCIJXA0KKwkJCQkJInBvcAlyMjAJCQkJCQlcblx0IglcDQorCQkJCQkicG9wCXIxOQkJCQkJCVxuXHQiCVwNCisJCQkJCSJwb3AJcjE4CQkJCQkJXG5cdCIJXA0KKwkJCQkJInBvcAlyMTcJCQkJCQlcblx0IglcDQorCQkJCQkicG9wCXIxNgkJCQkJCVxuXHQiCVwNCisJCQkJCSJwb3AJcjE1CQkJCQkJXG5cdCIJXA0KKwkJCQkJInBvcAlyMTQJCQkJCQlcblx0IglcDQorCQkJCQkicG9wCXIxMwkJCQkJCVxuXHQiCVwNCisJCQkJCSJwb3AJcjEyCQkJCQkJXG5cdCIJXA0KKwkJCQkJInBvcAlyMTEJCQkJCQlcblx0IglcDQorCQkJCQkicG9wCXIxMAkJCQkJCVxuXHQiCVwNCisJCQkJCSJwb3AJcjkJCQkJCQlcblx0IglcDQorCQkJCQkicG9wCXI4CQkJCQkJXG5cdCIJXA0KKwkJCQkJInBvcAlyNwkJCQkJCVxuXHQiCVwNCisJCQkJCSJwb3AJcjYJCQkJCQlcblx0IglcDQorCQkJCQkicG9wCXI1CQkJCQkJXG5cdCIJXA0KKwkJCQkJInBvcAlyNAkJCQkJCVxuXHQiCVwNCisJCQkJCSJwb3AJcjMJCQkJCQlcblx0IglcDQorCQkJCQkicG9wCXIyCQkJCQkJXG5cdCIJXA0KKwkJCQkJInBvcAlyMQkJCQkJCVxuXHQiCVwNCisJCQkJCSJwb3AJcjAJCQkJCQlcblx0IglcDQorCQkJCQkib3V0CV9fU1JFR19fLCByMAkJCVxuXHQiCVwNCisJCQkJCSJwb3AJcjAJCQkJCQlcblx0IglcDQorCQkJCSk7DQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQpAQCAtMTc5LDE0NyArMTc5LDE0NSBAQAogc3RhdGljIHZvaWQgcHJ2U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApOw0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KLS8qDQotICogU2VlIGhlYWRlciBmaWxlIGZvciBkZXNjcmlwdGlvbi4NCisvKiANCisgKiBTZWUgaGVhZGVyIGZpbGUgZm9yIGRlc2NyaXB0aW9uLiANCiAgKi8NCi1TdGFja1R5cGVfdCAqIHB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKiBweFRvcE9mU3RhY2ssDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqIHB2UGFyYW1ldGVycyApDQorU3RhY2tUeXBlX3QgKnB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKnB4VG9wT2ZTdGFjaywgVGFza0Z1bmN0aW9uX3QgcHhDb2RlLCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KIHsNCi0gICAgdWludDE2X3QgdXNBZGRyZXNzOw0KK3VpbnQxNl90IHVzQWRkcmVzczsNCiANCi0gICAgLyogUGxhY2UgYSBmZXcgYnl0ZXMgb2Yga25vd24gdmFsdWVzIG9uIHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLg0KLSAgICAgKiBUaGlzIGlzIGp1c3QgdXNlZnVsIGZvciBkZWJ1Z2dpbmcuICovDQorCS8qIFBsYWNlIGEgZmV3IGJ5dGVzIG9mIGtub3duIHZhbHVlcyBvbiB0aGUgYm90dG9tIG9mIHRoZSBzdGFjay4gDQorCVRoaXMgaXMganVzdCB1c2VmdWwgZm9yIGRlYnVnZ2luZy4gKi8NCiANCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MTE7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMHgyMjsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAweDMzOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MTE7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgyMjsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDMzOw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgLyogU2ltdWxhdGUgaG93IHRoZSBzdGFjayB3b3VsZCBsb29rIGFmdGVyIGEgY2FsbCB0byB2UG9ydFlpZWxkKCkgZ2VuZXJhdGVkIGJ5DQotICAgICAqIHRoZSBjb21waWxlci4gKi8NCisJLyogU2ltdWxhdGUgaG93IHRoZSBzdGFjayB3b3VsZCBsb29rIGFmdGVyIGEgY2FsbCB0byB2UG9ydFlpZWxkKCkgZ2VuZXJhdGVkIGJ5IA0KKwl0aGUgY29tcGlsZXIuICovDQogDQotICAgIC8qbGludCAtZTk1MCAtZTYxMSAtZTkyMyBMaW50IGRvZXNuJ3QgbGlrZSB0aGlzIG11Y2ggLSBidXQgbm90aGluZyBJIGNhbiBkbyBhYm91dCBpdC4gKi8NCisJLypsaW50IC1lOTUwIC1lNjExIC1lOTIzIExpbnQgZG9lc24ndCBsaWtlIHRoaXMgbXVjaCAtIGJ1dCBub3RoaW5nIEkgY2FuIGRvIGFib3V0IGl0LiAqLw0KIA0KLSAgICAvKiBUaGUgc3RhcnQgb2YgdGhlIHRhc2sgY29kZSB3aWxsIGJlIHBvcHBlZCBvZmYgdGhlIHN0YWNrIGxhc3QsIHNvIHBsYWNlDQotICAgICAqIGl0IG9uIGZpcnN0LiAqLw0KLSAgICB1c0FkZHJlc3MgPSAoIHVpbnQxNl90ICkgcHhDb2RlOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApICggdXNBZGRyZXNzICYgKCB1aW50MTZfdCApIDB4MDBmZiApOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJLyogVGhlIHN0YXJ0IG9mIHRoZSB0YXNrIGNvZGUgd2lsbCBiZSBwb3BwZWQgb2ZmIHRoZSBzdGFjayBsYXN0LCBzbyBwbGFjZQ0KKwlpdCBvbiBmaXJzdC4gKi8NCisJdXNBZGRyZXNzID0gKCB1aW50MTZfdCApIHB4Q29kZTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAoIHVzQWRkcmVzcyAmICggdWludDE2X3QgKSAweDAwZmYgKTsNCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgIHVzQWRkcmVzcyA+Pj0gODsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAoIHVzQWRkcmVzcyAmICggdWludDE2X3QgKSAweDAwZmYgKTsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCXVzQWRkcmVzcyA+Pj0gODsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAoIHVzQWRkcmVzcyAmICggdWludDE2X3QgKSAweDAwZmYgKTsNCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgIC8qIE5leHQgc2ltdWxhdGUgdGhlIHN0YWNrIGFzIGlmIGFmdGVyIGEgY2FsbCB0byBwb3J0U0FWRV9DT05URVhUKCkuDQotICAgICAqICBwb3J0U0FWRV9DT05URVhUIHBsYWNlcyB0aGUgZmxhZ3Mgb24gdGhlIHN0YWNrIGltbWVkaWF0ZWx5IGFmdGVyIHIwDQotICAgICAqICB0byBlbnN1cmUgdGhlIGludGVycnVwdHMgZ2V0IGRpc2FibGVkIGFzIHNvb24gYXMgcG9zc2libGUsIGFuZCBzbyBlbnN1cmluZw0KLSAgICAgKiAgdGhlIHN0YWNrIHVzZSBpcyBtaW5pbWFsIHNob3VsZCBhIGNvbnRleHQgc3dpdGNoIGludGVycnVwdCBvY2N1ci4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAwOyAvKiBSMCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IHBvcnRGTEFHU19JTlRfRU5BQkxFRDsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIE5leHQgc2ltdWxhdGUgdGhlIHN0YWNrIGFzIGlmIGFmdGVyIGEgY2FsbCB0byBwb3J0U0FWRV9DT05URVhUKCkuICANCisJcG9ydFNBVkVfQ09OVEVYVCBwbGFjZXMgdGhlIGZsYWdzIG9uIHRoZSBzdGFjayBpbW1lZGlhdGVseSBhZnRlciByMA0KKwl0byBlbnN1cmUgdGhlIGludGVycnVwdHMgZ2V0IGRpc2FibGVkIGFzIHNvb24gYXMgcG9zc2libGUsIGFuZCBzbyBlbnN1cmluZw0KKwl0aGUgc3RhY2sgdXNlIGlzIG1pbmltYWwgc2hvdWxkIGEgY29udGV4dCBzd2l0Y2ggaW50ZXJydXB0IG9jY3VyLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDA7CS8qIFIwICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gcG9ydEZMQUdTX0lOVF9FTkFCTEVEOw0KKwlweFRvcE9mU3RhY2stLTsNCiANCiANCi0gICAgLyogTm93IHRoZSByZW1haW5pbmcgcmVnaXN0ZXJzLiAgIFRoZSBjb21waWxlciBleHBlY3RzIFIxIHRvIGJlIDAuICovDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMDsgLyogUjEgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMjsgLyogUjIgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMzsgLyogUjMgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNDsgLyogUjQgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNTsgLyogUjUgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNjsgLyogUjYgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNzsgLyogUjcgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwODsgLyogUjggKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwOTsgLyogUjkgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMDsgLyogUjEwICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTE7IC8qIFIxMSAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDEyOyAvKiBSMTIgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMzsgLyogUjEzICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTQ7IC8qIFIxNCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDE1OyAvKiBSMTUgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxNjsgLyogUjE2ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTc7IC8qIFIxNyAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDE4OyAvKiBSMTggKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxOTsgLyogUjE5ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MjA7IC8qIFIyMCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDIxOyAvKiBSMjEgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgyMjsgLyogUjIyICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MjM7IC8qIFIyMyAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJLyogTm93IHRoZSByZW1haW5pbmcgcmVnaXN0ZXJzLiAgIFRoZSBjb21waWxlciBleHBlY3RzIFIxIHRvIGJlIDAuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMDsJLyogUjEgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMjsJLyogUjIgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMzsJLyogUjMgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNDsJLyogUjQgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNTsJLyogUjUgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNjsJLyogUjYgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNzsJLyogUjcgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwODsJLyogUjggKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwOTsJLyogUjkgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMDsJLyogUjEwICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTE7CS8qIFIxMSAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDEyOwkvKiBSMTIgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMzsJLyogUjEzICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTQ7CS8qIFIxNCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDE1OwkvKiBSMTUgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxNjsJLyogUjE2ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTc7CS8qIFIxNyAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDE4OwkvKiBSMTggKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxOTsJLyogUjE5ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MjA7CS8qIFIyMCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDIxOwkvKiBSMjEgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgyMjsJLyogUjIyICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MjM7CS8qIFIyMyAqLw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgLyogUGxhY2UgdGhlIHBhcmFtZXRlciBvbiB0aGUgc3RhY2sgaW4gdGhlIGV4cGVjdGVkIGxvY2F0aW9uLiAqLw0KLSAgICB1c0FkZHJlc3MgPSAoIHVpbnQxNl90ICkgcHZQYXJhbWV0ZXJzOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApICggdXNBZGRyZXNzICYgKCB1aW50MTZfdCApIDB4MDBmZiApOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJLyogUGxhY2UgdGhlIHBhcmFtZXRlciBvbiB0aGUgc3RhY2sgaW4gdGhlIGV4cGVjdGVkIGxvY2F0aW9uLiAqLw0KKwl1c0FkZHJlc3MgPSAoIHVpbnQxNl90ICkgcHZQYXJhbWV0ZXJzOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApICggdXNBZGRyZXNzICYgKCB1aW50MTZfdCApIDB4MDBmZiApOw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgdXNBZGRyZXNzID4+PSA4Ow0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApICggdXNBZGRyZXNzICYgKCB1aW50MTZfdCApIDB4MDBmZiApOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJdXNBZGRyZXNzID4+PSA4Ow0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApICggdXNBZGRyZXNzICYgKCB1aW50MTZfdCApIDB4MDBmZiApOw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDI2OyAgLyogUjI2IFggKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgyNzsgIC8qIFIyNyAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDI4OyAgLyogUjI4IFkgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgyOTsgIC8qIFIyOSAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDMwOyAgLyogUjMwIFogKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMzE7IC8qIFIzMSAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDI2OwkvKiBSMjYgWCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDI3OwkvKiBSMjcgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgyODsJLyogUjI4IFkgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgyOTsJLyogUjI5ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MzA7CS8qIFIzMCBaICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDMxOwkvKiBSMzEgKi8NCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgIC8qbGludCArZTk1MCArZTYxMSArZTkyMyAqLw0KKwkvKmxpbnQgK2U5NTAgK2U2MTEgK2U5MjMgKi8NCiANCi0gICAgcmV0dXJuIHB4VG9wT2ZTdGFjazsNCisJcmV0dXJuIHB4VG9wT2ZTdGFjazsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogQmFzZVR5cGVfdCB4UG9ydFN0YXJ0U2NoZWR1bGVyKCB2b2lkICkNCiB7DQotICAgIC8qIFNldHVwIHRoZSBoYXJkd2FyZSB0byBnZW5lcmF0ZSB0aGUgdGljay4gKi8NCi0gICAgcHJ2U2V0dXBUaW1lckludGVycnVwdCgpOw0KKwkvKiBTZXR1cCB0aGUgaGFyZHdhcmUgdG8gZ2VuZXJhdGUgdGhlIHRpY2suICovDQorCXBydlNldHVwVGltZXJJbnRlcnJ1cHQoKTsNCiANCi0gICAgLyogUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgZmlyc3QgdGFzayB0aGF0IGlzIGdvaW5nIHRvIHJ1bi4gKi8NCi0gICAgcG9ydFJFU1RPUkVfQ09OVEVYVCgpOw0KKwkvKiBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBmaXJzdCB0YXNrIHRoYXQgaXMgZ29pbmcgdG8gcnVuLiAqLw0KKwlwb3J0UkVTVE9SRV9DT05URVhUKCk7DQogDQotICAgIC8qIFNpbXVsYXRlIGEgZnVuY3Rpb24gY2FsbCBlbmQgYXMgZ2VuZXJhdGVkIGJ5IHRoZSBjb21waWxlci4gIFdlIHdpbGwgbm93DQotICAgICAqIGp1bXAgdG8gdGhlIHN0YXJ0IG9mIHRoZSB0YXNrIHRoZSBjb250ZXh0IG9mIHdoaWNoIHdlIGhhdmUganVzdCByZXN0b3JlZC4gKi8NCi0gICAgYXNtIHZvbGF0aWxlICggInJldCIgKTsNCisJLyogU2ltdWxhdGUgYSBmdW5jdGlvbiBjYWxsIGVuZCBhcyBnZW5lcmF0ZWQgYnkgdGhlIGNvbXBpbGVyLiAgV2Ugd2lsbCBub3cNCisJanVtcCB0byB0aGUgc3RhcnQgb2YgdGhlIHRhc2sgdGhlIGNvbnRleHQgb2Ygd2hpY2ggd2UgaGF2ZSBqdXN0IHJlc3RvcmVkLiAqLw0KKwlhc20gdm9sYXRpbGUgKCAicmV0IiApOw0KIA0KLSAgICAvKiBTaG91bGQgbm90IGdldCBoZXJlLiAqLw0KLSAgICByZXR1cm4gcGRUUlVFOw0KKwkvKiBTaG91bGQgbm90IGdldCBoZXJlLiAqLw0KKwlyZXR1cm4gcGRUUlVFOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0RW5kU2NoZWR1bGVyKCB2b2lkICkNCiB7DQotICAgIC8qIEl0IGlzIHVubGlrZWx5IHRoYXQgdGhlIEFWUiBwb3J0IHdpbGwgZ2V0IHN0b3BwZWQuICBJZiByZXF1aXJlZCBzaW1wbHkNCi0gICAgICogZGlzYWJsZSB0aGUgdGljayBpbnRlcnJ1cHQgaGVyZS4gKi8NCisJLyogSXQgaXMgdW5saWtlbHkgdGhhdCB0aGUgQVZSIHBvcnQgd2lsbCBnZXQgc3RvcHBlZC4gIElmIHJlcXVpcmVkIHNpbXBseQ0KKwlkaXNhYmxlIHRoZSB0aWNrIGludGVycnVwdCBoZXJlLiAqLw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCkBAIC0zMjcsMzYgKzMyNSwzNCBAQAogICogTWFudWFsIGNvbnRleHQgc3dpdGNoLiAgVGhlIGZpcnN0IHRoaW5nIHdlIGRvIGlzIHNhdmUgdGhlIHJlZ2lzdGVycyBzbyB3ZQ0KICAqIGNhbiB1c2UgYSBuYWtlZCBhdHRyaWJ1dGUuDQogICovDQotdm9pZCB2UG9ydFlpZWxkKCB2b2lkICkgX19hdHRyaWJ1dGVfXyggKCBuYWtlZCApICk7DQordm9pZCB2UG9ydFlpZWxkKCB2b2lkICkgX19hdHRyaWJ1dGVfXyAoICggbmFrZWQgKSApOw0KIHZvaWQgdlBvcnRZaWVsZCggdm9pZCApDQogew0KLSAgICBwb3J0U0FWRV9DT05URVhUKCk7DQotICAgIHZUYXNrU3dpdGNoQ29udGV4dCgpOw0KLSAgICBwb3J0UkVTVE9SRV9DT05URVhUKCk7DQorCXBvcnRTQVZFX0NPTlRFWFQoKTsNCisJdlRhc2tTd2l0Y2hDb250ZXh0KCk7DQorCXBvcnRSRVNUT1JFX0NPTlRFWFQoKTsNCiANCi0gICAgYXNtIHZvbGF0aWxlICggInJldCIgKTsNCisJYXNtIHZvbGF0aWxlICggInJldCIgKTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyoNCi0gKiBDb250ZXh0IHN3aXRjaCBmdW5jdGlvbiB1c2VkIGJ5IHRoZSB0aWNrLiAgVGhpcyBtdXN0IGJlIGlkZW50aWNhbCB0bw0KKyAqIENvbnRleHQgc3dpdGNoIGZ1bmN0aW9uIHVzZWQgYnkgdGhlIHRpY2suICBUaGlzIG11c3QgYmUgaWRlbnRpY2FsIHRvIA0KICAqIHZQb3J0WWllbGQoKSBmcm9tIHRoZSBjYWxsIHRvIHZUYXNrU3dpdGNoQ29udGV4dCgpIG9ud2FyZHMuICBUaGUgb25seQ0KICAqIGRpZmZlcmVuY2UgZnJvbSB2UG9ydFlpZWxkKCkgaXMgdGhlIHRpY2sgY291bnQgaXMgaW5jcmVtZW50ZWQgYXMgdGhlDQogICogY2FsbCBjb21lcyBmcm9tIHRoZSB0aWNrIElTUi4NCiAgKi8NCi12b2lkIHZQb3J0WWllbGRGcm9tVGljayggdm9pZCApIF9fYXR0cmlidXRlX18oICggbmFrZWQgKSApOw0KK3ZvaWQgdlBvcnRZaWVsZEZyb21UaWNrKCB2b2lkICkgX19hdHRyaWJ1dGVfXyAoICggbmFrZWQgKSApOw0KIHZvaWQgdlBvcnRZaWVsZEZyb21UaWNrKCB2b2lkICkNCiB7DQotICAgIHBvcnRTQVZFX0NPTlRFWFQoKTsNCisJcG9ydFNBVkVfQ09OVEVYVCgpOw0KKwlpZiggeFRhc2tJbmNyZW1lbnRUaWNrKCkgIT0gcGRGQUxTRSApDQorCXsNCisJCXZUYXNrU3dpdGNoQ29udGV4dCgpOw0KKwl9DQorCXBvcnRSRVNUT1JFX0NPTlRFWFQoKTsNCiANCi0gICAgaWYoIHhUYXNrSW5jcmVtZW50VGljaygpICE9IHBkRkFMU0UgKQ0KLSAgICB7DQotICAgICAgICB2VGFza1N3aXRjaENvbnRleHQoKTsNCi0gICAgfQ0KLQ0KLSAgICBwb3J0UkVTVE9SRV9DT05URVhUKCk7DQotDQotICAgIGFzbSB2b2xhdGlsZSAoICJyZXQiICk7DQorCWFzbSB2b2xhdGlsZSAoICJyZXQiICk7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KQEAgLTM2NSw2MyArMzYxLDY2IEBACiAgKi8NCiBzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICkNCiB7DQotICAgIHVpbnQzMl90IHVsQ29tcGFyZU1hdGNoOw0KLSAgICB1aW50OF90IHVjSGlnaEJ5dGUsIHVjTG93Qnl0ZTsNCit1aW50MzJfdCB1bENvbXBhcmVNYXRjaDsNCit1aW50OF90IHVjSGlnaEJ5dGUsIHVjTG93Qnl0ZTsNCiANCi0gICAgLyogVXNpbmcgMTZiaXQgdGltZXIgMSB0byBnZW5lcmF0ZSB0aGUgdGljay4gIENvcnJlY3QgZnVzZXMgbXVzdCBiZQ0KLSAgICAgKiBzZWxlY3RlZCBmb3IgdGhlIGNvbmZpZ0NQVV9DTE9DS19IWiBjbG9jay4gKi8NCisJLyogVXNpbmcgMTZiaXQgdGltZXIgMSB0byBnZW5lcmF0ZSB0aGUgdGljay4gIENvcnJlY3QgZnVzZXMgbXVzdCBiZQ0KKwlzZWxlY3RlZCBmb3IgdGhlIGNvbmZpZ0NQVV9DTE9DS19IWiBjbG9jay4gKi8NCiANCi0gICAgdWxDb21wYXJlTWF0Y2ggPSBjb25maWdDUFVfQ0xPQ0tfSFogLyBjb25maWdUSUNLX1JBVEVfSFo7DQorCXVsQ29tcGFyZU1hdGNoID0gY29uZmlnQ1BVX0NMT0NLX0haIC8gY29uZmlnVElDS19SQVRFX0haOw0KIA0KLSAgICAvKiBXZSBvbmx5IGhhdmUgMTYgYml0cyBzbyBoYXZlIHRvIHNjYWxlIHRvIGdldCBvdXIgcmVxdWlyZWQgdGljayByYXRlLiAqLw0KLSAgICB1bENvbXBhcmVNYXRjaCAvPSBwb3J0Q0xPQ0tfUFJFU0NBTEVSOw0KKwkvKiBXZSBvbmx5IGhhdmUgMTYgYml0cyBzbyBoYXZlIHRvIHNjYWxlIHRvIGdldCBvdXIgcmVxdWlyZWQgdGljayByYXRlLiAqLw0KKwl1bENvbXBhcmVNYXRjaCAvPSBwb3J0Q0xPQ0tfUFJFU0NBTEVSOw0KIA0KLSAgICAvKiBBZGp1c3QgZm9yIGNvcnJlY3QgdmFsdWUuICovDQotICAgIHVsQ29tcGFyZU1hdGNoIC09ICggdWludDMyX3QgKSAxOw0KKwkvKiBBZGp1c3QgZm9yIGNvcnJlY3QgdmFsdWUuICovDQorCXVsQ29tcGFyZU1hdGNoIC09ICggdWludDMyX3QgKSAxOw0KIA0KLSAgICAvKiBTZXR1cCBjb21wYXJlIG1hdGNoIHZhbHVlIGZvciBjb21wYXJlIG1hdGNoIEEuICBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZA0KLSAgICAgKiBiZWZvcmUgdGhpcyBpcyBjYWxsZWQgc28gd2UgbmVlZCBub3Qgd29ycnkgaGVyZS4gKi8NCi0gICAgdWNMb3dCeXRlID0gKCB1aW50OF90ICkgKCB1bENvbXBhcmVNYXRjaCAmICggdWludDMyX3QgKSAweGZmICk7DQotICAgIHVsQ29tcGFyZU1hdGNoID4+PSA4Ow0KLSAgICB1Y0hpZ2hCeXRlID0gKCB1aW50OF90ICkgKCB1bENvbXBhcmVNYXRjaCAmICggdWludDMyX3QgKSAweGZmICk7DQotICAgIE9DUjFBSCA9IHVjSGlnaEJ5dGU7DQotICAgIE9DUjFBTCA9IHVjTG93Qnl0ZTsNCisJLyogU2V0dXAgY29tcGFyZSBtYXRjaCB2YWx1ZSBmb3IgY29tcGFyZSBtYXRjaCBBLiAgSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgDQorCWJlZm9yZSB0aGlzIGlzIGNhbGxlZCBzbyB3ZSBuZWVkIG5vdCB3b3JyeSBoZXJlLiAqLw0KKwl1Y0xvd0J5dGUgPSAoIHVpbnQ4X3QgKSAoIHVsQ29tcGFyZU1hdGNoICYgKCB1aW50MzJfdCApIDB4ZmYgKTsNCisJdWxDb21wYXJlTWF0Y2ggPj49IDg7DQorCXVjSGlnaEJ5dGUgPSAoIHVpbnQ4X3QgKSAoIHVsQ29tcGFyZU1hdGNoICYgKCB1aW50MzJfdCApIDB4ZmYgKTsNCisJT0NSMUFIID0gdWNIaWdoQnl0ZTsNCisJT0NSMUFMID0gdWNMb3dCeXRlOw0KIA0KLSAgICAvKiBTZXR1cCBjbG9jayBzb3VyY2UgYW5kIGNvbXBhcmUgbWF0Y2ggYmVoYXZpb3VyLiAqLw0KLSAgICB1Y0xvd0J5dGUgPSBwb3J0Q0xFQVJfQ09VTlRFUl9PTl9NQVRDSCB8IHBvcnRQUkVTQ0FMRV82NDsNCi0gICAgVENDUjFCID0gdWNMb3dCeXRlOw0KKwkvKiBTZXR1cCBjbG9jayBzb3VyY2UgYW5kIGNvbXBhcmUgbWF0Y2ggYmVoYXZpb3VyLiAqLw0KKwl1Y0xvd0J5dGUgPSBwb3J0Q0xFQVJfQ09VTlRFUl9PTl9NQVRDSCB8IHBvcnRQUkVTQ0FMRV82NDsNCisJVENDUjFCID0gdWNMb3dCeXRlOw0KIA0KLSAgICAvKiBFbmFibGUgdGhlIGludGVycnVwdCAtIHRoaXMgaXMgb2theSBhcyBpbnRlcnJ1cHQgYXJlIGN1cnJlbnRseSBnbG9iYWxseQ0KLSAgICAgKiBkaXNhYmxlZC4gKi8NCi0gICAgdWNMb3dCeXRlID0gVElNU0s7DQotICAgIHVjTG93Qnl0ZSB8PSBwb3J0Q09NUEFSRV9NQVRDSF9BX0lOVEVSUlVQVF9FTkFCTEU7DQotICAgIFRJTVNLID0gdWNMb3dCeXRlOw0KKwkvKiBFbmFibGUgdGhlIGludGVycnVwdCAtIHRoaXMgaXMgb2theSBhcyBpbnRlcnJ1cHQgYXJlIGN1cnJlbnRseSBnbG9iYWxseQ0KKwlkaXNhYmxlZC4gKi8NCisJdWNMb3dCeXRlID0gVElNU0s7DQorCXVjTG93Qnl0ZSB8PSBwb3J0Q09NUEFSRV9NQVRDSF9BX0lOVEVSUlVQVF9FTkFCTEU7DQorCVRJTVNLID0gdWNMb3dCeXRlOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMQ0KIA0KLS8qDQotICogVGljayBJU1IgZm9yIHByZWVtcHRpdmUgc2NoZWR1bGVyLiAgV2UgY2FuIHVzZSBhIG5ha2VkIGF0dHJpYnV0ZSBhcw0KLSAqIHRoZSBjb250ZXh0IGlzIHNhdmVkIGF0IHRoZSBzdGFydCBvZiB2UG9ydFlpZWxkRnJvbVRpY2soKS4gIFRoZSB0aWNrDQotICogY291bnQgaXMgaW5jcmVtZW50ZWQgYWZ0ZXIgdGhlIGNvbnRleHQgaXMgc2F2ZWQuDQotICovDQotICAgIHZvaWQgU0lHX09VVFBVVF9DT01QQVJFMUEoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fKCAoIHNpZ25hbCwgbmFrZWQgKSApOw0KLSAgICB2b2lkIFNJR19PVVRQVVRfQ09NUEFSRTFBKCB2b2lkICkNCi0gICAgew0KLSAgICAgICAgdlBvcnRZaWVsZEZyb21UaWNrKCk7DQotICAgICAgICBhc20gdm9sYXRpbGUgKCAicmV0aSIgKTsNCi0gICAgfQ0KKwkvKg0KKwkgKiBUaWNrIElTUiBmb3IgcHJlZW1wdGl2ZSBzY2hlZHVsZXIuICBXZSBjYW4gdXNlIGEgbmFrZWQgYXR0cmlidXRlIGFzDQorCSAqIHRoZSBjb250ZXh0IGlzIHNhdmVkIGF0IHRoZSBzdGFydCBvZiB2UG9ydFlpZWxkRnJvbVRpY2soKS4gIFRoZSB0aWNrDQorCSAqIGNvdW50IGlzIGluY3JlbWVudGVkIGFmdGVyIHRoZSBjb250ZXh0IGlzIHNhdmVkLg0KKwkgKi8NCisJdm9pZCBTSUdfT1VUUFVUX0NPTVBBUkUxQSggdm9pZCApIF9fYXR0cmlidXRlX18gKCAoIHNpZ25hbCwgbmFrZWQgKSApOw0KKwl2b2lkIFNJR19PVVRQVVRfQ09NUEFSRTFBKCB2b2lkICkNCisJew0KKwkJdlBvcnRZaWVsZEZyb21UaWNrKCk7DQorCQlhc20gdm9sYXRpbGUgKCAicmV0aSIgKTsNCisJfQ0KICNlbHNlDQogDQotLyoNCi0gKiBUaWNrIElTUiBmb3IgdGhlIGNvb3BlcmF0aXZlIHNjaGVkdWxlci4gIEFsbCB0aGlzIGRvZXMgaXMgaW5jcmVtZW50IHRoZQ0KLSAqIHRpY2sgY291bnQuICBXZSBkb24ndCBuZWVkIHRvIHN3aXRjaCBjb250ZXh0LCB0aGlzIGNhbiBvbmx5IGJlIGRvbmUgYnkNCi0gKiBtYW51YWwgY2FsbHMgdG8gdGFza1lJRUxEKCk7DQotICovDQotICAgIHZvaWQgU0lHX09VVFBVVF9DT01QQVJFMUEoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fKCAoIHNpZ25hbCApICk7DQotICAgIHZvaWQgU0lHX09VVFBVVF9DT01QQVJFMUEoIHZvaWQgKQ0KLSAgICB7DQotICAgICAgICB4VGFza0luY3JlbWVudFRpY2soKTsNCi0gICAgfQ0KLSNlbmRpZiAvKiBpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAxICovDQorCS8qDQorCSAqIFRpY2sgSVNSIGZvciB0aGUgY29vcGVyYXRpdmUgc2NoZWR1bGVyLiAgQWxsIHRoaXMgZG9lcyBpcyBpbmNyZW1lbnQgdGhlDQorCSAqIHRpY2sgY291bnQuICBXZSBkb24ndCBuZWVkIHRvIHN3aXRjaCBjb250ZXh0LCB0aGlzIGNhbiBvbmx5IGJlIGRvbmUgYnkNCisJICogbWFudWFsIGNhbGxzIHRvIHRhc2tZSUVMRCgpOw0KKwkgKi8NCisJdm9pZCBTSUdfT1VUUFVUX0NPTVBBUkUxQSggdm9pZCApIF9fYXR0cmlidXRlX18gKCAoIHNpZ25hbCApICk7DQorCXZvaWQgU0lHX09VVFBVVF9DT01QQVJFMUEoIHZvaWQgKQ0KKwl7DQorCQl4VGFza0luY3JlbWVudFRpY2soKTsNCisJfQ0KKyNlbmRpZg0KKw0KKw0KKwkNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9HQ0MvQVRNZWdhMzIzL3BvcnRtYWNyby5oIGIvcG9ydGFibGUvR0NDL0FUTWVnYTMyMy9wb3J0bWFjcm8uaAppbmRleCA5MGIzNGM3Li5mNDNlNzhlIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9HQ0MvQVRNZWdhMzIzL3BvcnRtYWNyby5oCisrKyBiL3BvcnRhYmxlL0dDQy9BVE1lZ2EzMjMvcG9ydG1hY3JvLmgKQEAgLTI2LDE4ICsyNiwxOCBAQAogICovDQogDQogLyoNCi0gKiBDaGFuZ2VzIGZyb20gVjEuMi4zDQotICoNCi0gKyBwb3J0Q1BVX0NMT1NLX0haIGRlZmluaXRpb24gY2hhbmdlZCB0byA4TUh6IGJhc2UgMTAsIHByZXZpb3VzbHkgaXQNCi0gKyAgICBiYXNlIDE2Lg0KLSAqLw0KK0NoYW5nZXMgZnJvbSBWMS4yLjMNCisNCisJKyBwb3J0Q1BVX0NMT1NLX0haIGRlZmluaXRpb24gY2hhbmdlZCB0byA4TUh6IGJhc2UgMTAsIHByZXZpb3VzbHkgaXQNCisJICBiYXNlIDE2Lg0KKyovDQogDQogI2lmbmRlZiBQT1JUTUFDUk9fSA0KLSAgICAjZGVmaW5lIFBPUlRNQUNST19IDQorI2RlZmluZSBQT1JUTUFDUk9fSA0KIA0KLSAgICAjaWZkZWYgX19jcGx1c3BsdXMNCi0gICAgICAgIGV4dGVybiAiQyIgew0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICogUG9ydCBzcGVjaWZpYyBkZWZpbml0aW9ucy4NCkBAIC01MCw1OSArNTAsNTggQEAKICAqLw0KIA0KIC8qIFR5cGUgZGVmaW5pdGlvbnMuICovDQotICAgICNkZWZpbmUgcG9ydENIQVIgICAgICAgICAgY2hhcg0KLSAgICAjZGVmaW5lIHBvcnRGTE9BVCAgICAgICAgIGZsb2F0DQotICAgICNkZWZpbmUgcG9ydERPVUJMRSAgICAgICAgZG91YmxlDQotICAgICNkZWZpbmUgcG9ydExPTkcgICAgICAgICAgbG9uZw0KLSAgICAjZGVmaW5lIHBvcnRTSE9SVCAgICAgICAgIGludA0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19UWVBFICAgIHVpbnQ4X3QNCi0gICAgI2RlZmluZSBwb3J0QkFTRV9UWVBFICAgICBjaGFyDQorI2RlZmluZSBwb3J0Q0hBUgkJY2hhcg0KKyNkZWZpbmUgcG9ydEZMT0FUCQlmbG9hdA0KKyNkZWZpbmUgcG9ydERPVUJMRQkJZG91YmxlDQorI2RlZmluZSBwb3J0TE9ORwkJbG9uZw0KKyNkZWZpbmUgcG9ydFNIT1JUCQlpbnQNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFCXVpbnQ4X3QNCisjZGVmaW5lIHBvcnRCQVNFX1RZUEUJY2hhcg0KIA0KLSAgICB0eXBlZGVmIHBvcnRTVEFDS19UWVBFICAgU3RhY2tUeXBlX3Q7DQotICAgIHR5cGVkZWYgc2lnbmVkIGNoYXIgICAgICBCYXNlVHlwZV90Ow0KLSAgICB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgICAgVUJhc2VUeXBlX3Q7DQordHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSBTdGFja1R5cGVfdDsNCit0eXBlZGVmIHNpZ25lZCBjaGFyIEJhc2VUeXBlX3Q7DQordHlwZWRlZiB1bnNpZ25lZCBjaGFyIFVCYXNlVHlwZV90Ow0KIA0KLSAgICAjaWYgKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KLSAgICAgICAgdHlwZWRlZiB1aW50MTZfdCAgICAgVGlja1R5cGVfdDsNCi0gICAgICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmYNCi0gICAgI2Vsc2UNCi0gICAgICAgIHR5cGVkZWYgdWludDMyX3QgICAgIFRpY2tUeXBlX3Q7DQotICAgICAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQotICAgICNlbmRpZg0KKyNpZiggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCisJdHlwZWRlZiB1aW50MTZfdCBUaWNrVHlwZV90Ow0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQorI2Vsc2UNCisJdHlwZWRlZiB1aW50MzJfdCBUaWNrVHlwZV90Ow0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQorI2VuZGlmDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogQ3JpdGljYWwgc2VjdGlvbiBtYW5hZ2VtZW50LiAqLw0KLSAgICAjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpICAgICAgICAgICAgICAgICAgICBcDQotICAgIGFzbSB2b2xhdGlsZSAoICJpbgkJX190bXBfcmVnX18sIF9fU1JFR19fIjo6KTsgXA0KLSAgICBhc20gdm9sYXRpbGUgKCAiY2xpIiA6Oik7ICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIGFzbSB2b2xhdGlsZSAoICJwdXNoCV9fdG1wX3JlZ19fIjo6KQ0KKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkJCWFzbSB2b2xhdGlsZSAoICJpbgkJX190bXBfcmVnX18sIF9fU1JFR19fIiA6OiApOwlcDQorCQkJCQkJCQkJYXNtIHZvbGF0aWxlICggImNsaSIgOjogKTsJCQkJCQkJCVwNCisJCQkJCQkJCQlhc20gdm9sYXRpbGUgKCAicHVzaAlfX3RtcF9yZWdfXyIgOjogKQ0KIA0KLSAgICAjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkgICAgICAgICAgICBcDQotICAgIGFzbSB2b2xhdGlsZSAoICJwb3AJCV9fdG1wX3JlZ19fIjo6KTsgXA0KLSAgICBhc20gdm9sYXRpbGUgKCAib3V0CQlfX1NSRUdfXywgX190bXBfcmVnX18iOjopDQorI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpCQkJYXNtIHZvbGF0aWxlICggInBvcAkJX190bXBfcmVnX18iIDo6ICk7CQkJCVwNCisJCQkJCQkJCQlhc20gdm9sYXRpbGUgKCAib3V0CQlfX1NSRUdfXywgX190bXBfcmVnX18iIDo6ICkNCiANCi0gICAgI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgICAgYXNtIHZvbGF0aWxlICggImNsaSIgOjopOw0KLSAgICAjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpICAgICBhc20gdm9sYXRpbGUgKCAic2VpIiA6Oik7DQorI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkJYXNtIHZvbGF0aWxlICggImNsaSIgOjogKTsNCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpCQlhc20gdm9sYXRpbGUgKCAic2VpIiA6OiApOw0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIEFyY2hpdGVjdHVyZSBzcGVjaWZpY3MuICovDQotICAgICNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSCAgICAgICggLTEgKQ0KLSAgICAjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUyAgICAoICggVGlja1R5cGVfdCApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KLSAgICAjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVCAgICAxDQotICAgICNkZWZpbmUgcG9ydE5PUCgpICAgIGFzbSB2b2xhdGlsZSAoICJub3AiICk7DQorI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RICQkJKCAtMSApDQorI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMJCQkoICggVGlja1R5cGVfdCApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UCQkJMQ0KKyNkZWZpbmUgcG9ydE5PUCgpCQkJCQlhc20gdm9sYXRpbGUgKCAibm9wIiApOw0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIEtlcm5lbCB1dGlsaXRpZXMuICovDQotICAgIGV4dGVybiB2b2lkIHZQb3J0WWllbGQoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fKCAoIG5ha2VkICkgKTsNCi0gICAgI2RlZmluZSBwb3J0WUlFTEQoKSAgICB2UG9ydFlpZWxkKCkNCitleHRlcm4gdm9pZCB2UG9ydFlpZWxkKCB2b2lkICkgX19hdHRyaWJ1dGVfXyAoICggbmFrZWQgKSApOw0KKyNkZWZpbmUgcG9ydFlJRUxEKCkJCQkJCXZQb3J0WWllbGQoKQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCi0gICAgI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICAgICAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KIA0KLSAgICAjaWZkZWYgX19jcGx1c3BsdXMNCi0gICAgICAgIH0NCi0gICAgI2VuZGlmDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KIA0KICNlbmRpZiAvKiBQT1JUTUFDUk9fSCAqLw0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0dDQy9BVlIzMl9VQzMvcG9ydC5jIGIvcG9ydGFibGUvR0NDL0FWUjMyX1VDMy9wb3J0LmMKaW5kZXggZmJiMzNmMy4uMmY1NTkyYSAxMDA2NDQKLS0tIGEvcG9ydGFibGUvR0NDL0FWUjMyX1VDMy9wb3J0LmMKKysrIGIvcG9ydGFibGUvR0NDL0FWUjMyX1VDMy9wb3J0LmMKQEAgLTEsNSArMSw0IEBACiAvKlRoaXMgZmlsZSBoYXMgYmVlbiBwcmVwYXJlZCBmb3IgRG94eWdlbiBhdXRvbWF0aWMgZG9jdW1lbnRhdGlvbiBnZW5lcmF0aW9uLiovDQotDQogLyohIFxmaWxlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAqDQogICogXGJyaWVmIEZyZWVSVE9TIHBvcnQgc291cmNlIGZvciBBVlIzMiBVQzMuDQpAQCAtNTMsMjMgKzUyLDIzIEBACiAvKiBBVlIzMiBVQzMgaW5jbHVkZXMuICovDQogI2luY2x1ZGUgPGF2cjMyL2lvLmg+DQogI2luY2x1ZGUgImdwaW8uaCINCi0jaWYgKCBjb25maWdUSUNLX1VTRV9UQyA9PSAxICkNCi0gICAgI2luY2x1ZGUgInRjLmgiDQorI2lmKCBjb25maWdUSUNLX1VTRV9UQz09MSApDQorCSNpbmNsdWRlICJ0Yy5oIg0KICNlbmRpZg0KIA0KIA0KIC8qIENvbnN0YW50cyByZXF1aXJlZCB0byBzZXR1cCB0aGUgdGFzayBjb250ZXh0LiAqLw0KLSNkZWZpbmUgcG9ydElOSVRJQUxfU1IgICAgICAgICAgICAgKCAoIFN0YWNrVHlwZV90ICkgMHgwMDQwMDAwMCApIC8qIEFWUjMyIDogW00yOk0wXT0wMDEgSTFNPTAgSTBNPTAsIEdNPTAgKi8NCi0jZGVmaW5lIHBvcnRJTlNUUlVDVElPTl9TSVpFICAgICAgICggKCBTdGFja1R5cGVfdCApIDAgKQ0KKyNkZWZpbmUgcG9ydElOSVRJQUxfU1IgICAgICAgICAgICAoICggU3RhY2tUeXBlX3QgKSAweDAwNDAwMDAwICkgLyogQVZSMzIgOiBbTTI6TTBdPTAwMSBJMU09MCBJME09MCwgR009MCAqLw0KKyNkZWZpbmUgcG9ydElOU1RSVUNUSU9OX1NJWkUgICAgICAoICggU3RhY2tUeXBlX3QgKSAwICkNCiANCiAvKiBFYWNoIHRhc2sgbWFpbnRhaW5zIGl0cyBvd24gY3JpdGljYWwgbmVzdGluZyB2YXJpYWJsZS4gKi8NCi0jZGVmaW5lIHBvcnROT19DUklUSUNBTF9ORVNUSU5HICAgICggKCB1aW50MzJfdCApIDAgKQ0KKyNkZWZpbmUgcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgICAoICggdWludDMyX3QgKSAwICkNCiB2b2xhdGlsZSB1aW50MzJfdCB1bENyaXRpY2FsTmVzdGluZyA9IDk5OTlVTDsNCiANCi0jaWYgKCBjb25maWdUSUNLX1VTRV9UQyA9PSAwICkNCi0gICAgc3RhdGljIHZvaWQgcHJ2U2NoZWR1bGVOZXh0VGljayggdm9pZCApOw0KKyNpZiggY29uZmlnVElDS19VU0VfVEM9PTAgKQ0KKwlzdGF0aWMgdm9pZCBwcnZTY2hlZHVsZU5leHRUaWNrKCB2b2lkICk7DQogI2Vsc2UNCi0gICAgc3RhdGljIHZvaWQgcHJ2Q2xlYXJUY0ludCggdm9pZCApOw0KKwlzdGF0aWMgdm9pZCBwcnZDbGVhclRjSW50KCB2b2lkICk7DQogI2VuZGlmDQogDQogLyogU2V0dXAgdGhlIHRpbWVyIHRvIGdlbmVyYXRlIHRoZSB0aWNrIGludGVycnVwdHMuICovDQpAQCAtODUsNTMgKzg0LDU1IEBACiAgKiB2ZWN0b3JzIGFyZSBub3QgY29tcGF0aWJsZSB3aXRoIHRoZSBTQ0FMTCBtYW5hZ2VtZW50IGluIHRoZSBjdXJyZW50IEZyZWVSVE9TDQogICogcG9ydC4gTW9yZSBsb3ctbGV2ZWwgaW5pdGlhbGl6YXRpb25zIGFyZSBiZXNpZGVzIGFkZGVkIGhlcmUuDQogICovDQotdm9pZCBfaW5pdF9zdGFydHVwKCB2b2lkICkNCit2b2lkIF9pbml0X3N0YXJ0dXAodm9pZCkNCiB7DQotICAgIC8qIEltcG9ydCB0aGUgRXhjZXB0aW9uIFZlY3RvciBCYXNlIEFkZHJlc3MuICovDQotICAgIGV4dGVybiB2b2lkIF9ldmJhOw0KKwkvKiBJbXBvcnQgdGhlIEV4Y2VwdGlvbiBWZWN0b3IgQmFzZSBBZGRyZXNzLiAqLw0KKwlleHRlcm4gdm9pZCBfZXZiYTsNCiANCi0gICAgI2lmIGNvbmZpZ0hFQVBfSU5JVA0KLSAgICAgICAgZXh0ZXJuIHZvaWQgX19oZWFwX3N0YXJ0X187DQotICAgICAgICBleHRlcm4gdm9pZCBfX2hlYXBfZW5kX187DQotICAgICAgICBCYXNlVHlwZV90ICogcHhNZW07DQotICAgICNlbmRpZg0KKwkjaWYgY29uZmlnSEVBUF9JTklUDQorCQlleHRlcm4gdm9pZCBfX2hlYXBfc3RhcnRfXzsNCisJCWV4dGVybiB2b2lkIF9faGVhcF9lbmRfXzsNCisJCUJhc2VUeXBlX3QgKnB4TWVtOw0KKwkjZW5kaWYNCiANCi0gICAgLyogTG9hZCB0aGUgRXhjZXB0aW9uIFZlY3RvciBCYXNlIEFkZHJlc3MgaW4gdGhlIGNvcnJlc3BvbmRpbmcgc3lzdGVtIHJlZ2lzdGVyLiAqLw0KLSAgICBTZXRfc3lzdGVtX3JlZ2lzdGVyKCBBVlIzMl9FVkJBLCAoIGludCApICZfZXZiYSApOw0KKwkvKiBMb2FkIHRoZSBFeGNlcHRpb24gVmVjdG9yIEJhc2UgQWRkcmVzcyBpbiB0aGUgY29ycmVzcG9uZGluZyBzeXN0ZW0gcmVnaXN0ZXIuICovDQorCVNldF9zeXN0ZW1fcmVnaXN0ZXIoIEFWUjMyX0VWQkEsICggaW50ICkgJl9ldmJhICk7DQogDQotICAgIC8qIEVuYWJsZSBleGNlcHRpb25zLiAqLw0KLSAgICBFTkFCTEVfQUxMX0VYQ0VQVElPTlMoKTsNCisJLyogRW5hYmxlIGV4Y2VwdGlvbnMuICovDQorCUVOQUJMRV9BTExfRVhDRVBUSU9OUygpOw0KIA0KLSAgICAvKiBJbml0aWFsaXplIGludGVycnVwdCBoYW5kbGluZy4gKi8NCi0gICAgSU5UQ19pbml0X2ludGVycnVwdHMoKTsNCisJLyogSW5pdGlhbGl6ZSBpbnRlcnJ1cHQgaGFuZGxpbmcuICovDQorCUlOVENfaW5pdF9pbnRlcnJ1cHRzKCk7DQogDQotICAgICNpZiBjb25maWdIRUFQX0lOSVQNCi0gICAgICAgIC8qIEluaXRpYWxpemUgdGhlIGhlYXAgdXNlZCBieSBtYWxsb2MuICovDQotICAgICAgICBmb3IoIHB4TWVtID0gJl9faGVhcF9zdGFydF9fOyBweE1lbSA8ICggQmFzZVR5cGVfdCAqICkgJl9faGVhcF9lbmRfXzsgKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgICpweE1lbSsrID0gMHhBNUE1QTVBNTsNCi0gICAgICAgIH0NCi0gICAgI2VuZGlmDQorCSNpZiBjb25maWdIRUFQX0lOSVQNCiANCi0gICAgLyogR2l2ZSB0aGUgdXNlZCBDUFUgY2xvY2sgZnJlcXVlbmN5IHRvIE5ld2xpYiwgc28gaXQgY2FuIHdvcmsgcHJvcGVybHkuICovDQotICAgIHNldF9jcHVfaHooIGNvbmZpZ0NQVV9DTE9DS19IWiApOw0KKwkJLyogSW5pdGlhbGl6ZSB0aGUgaGVhcCB1c2VkIGJ5IG1hbGxvYy4gKi8NCisJCWZvciggcHhNZW0gPSAmX19oZWFwX3N0YXJ0X187IHB4TWVtIDwgKCBCYXNlVHlwZV90ICogKSZfX2hlYXBfZW5kX187ICkNCisJCXsNCisJCQkqcHhNZW0rKyA9IDB4QTVBNUE1QTU7DQorCQl9DQogDQotICAgIC8qIENvZGUgc2VjdGlvbiBwcmVzZW50IGlmIGFuZCBvbmx5IGlmIHRoZSBkZWJ1ZyB0cmFjZSBpcyBhY3RpdmF0ZWQuICovDQotICAgICNpZiBjb25maWdEQkcNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBzdGF0aWMgY29uc3QgZ3Bpb19tYXBfdCBEQkdfVVNBUlRfR1BJT19NQVAgPQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgeyBjb25maWdEQkdfVVNBUlRfUlhfUElOLCBjb25maWdEQkdfVVNBUlRfUlhfRlVOQ1RJT04gfSwNCi0gICAgICAgICAgICAgICAgeyBjb25maWdEQkdfVVNBUlRfVFhfUElOLCBjb25maWdEQkdfVVNBUlRfVFhfRlVOQ1RJT04gfQ0KLSAgICAgICAgICAgIH07DQorCSNlbmRpZg0KIA0KLSAgICAgICAgICAgIC8qIEluaXRpYWxpemUgdGhlIFVTQVJUIHVzZWQgZm9yIHRoZSBkZWJ1ZyB0cmFjZSB3aXRoIHRoZSBjb25maWd1cmVkIHBhcmFtZXRlcnMuICovDQotICAgICAgICAgICAgc2V0X3VzYXJ0X2Jhc2UoICggdm9pZCAqICkgY29uZmlnREJHX1VTQVJUICk7DQotICAgICAgICAgICAgZ3Bpb19lbmFibGVfbW9kdWxlKCBEQkdfVVNBUlRfR1BJT19NQVAsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoIERCR19VU0FSVF9HUElPX01BUCApIC8gc2l6ZW9mKCBEQkdfVVNBUlRfR1BJT19NQVBbIDAgXSApICk7DQotICAgICAgICAgICAgdXNhcnRfaW5pdCggY29uZmlnREJHX1VTQVJUX0JBVURSQVRFICk7DQotICAgICAgICB9DQotICAgICNlbmRpZiAvKiBpZiBjb25maWdEQkcgKi8NCisJLyogR2l2ZSB0aGUgdXNlZCBDUFUgY2xvY2sgZnJlcXVlbmN5IHRvIE5ld2xpYiwgc28gaXQgY2FuIHdvcmsgcHJvcGVybHkuICovDQorCXNldF9jcHVfaHooIGNvbmZpZ0NQVV9DTE9DS19IWiApOw0KKw0KKwkvKiBDb2RlIHNlY3Rpb24gcHJlc2VudCBpZiBhbmQgb25seSBpZiB0aGUgZGVidWcgdHJhY2UgaXMgYWN0aXZhdGVkLiAqLw0KKwkjaWYgY29uZmlnREJHDQorCXsNCisJCXN0YXRpYyBjb25zdCBncGlvX21hcF90IERCR19VU0FSVF9HUElPX01BUCA9DQorCQl7DQorCQkJeyBjb25maWdEQkdfVVNBUlRfUlhfUElOLCBjb25maWdEQkdfVVNBUlRfUlhfRlVOQ1RJT04gfSwNCisJCQl7IGNvbmZpZ0RCR19VU0FSVF9UWF9QSU4sIGNvbmZpZ0RCR19VU0FSVF9UWF9GVU5DVElPTiB9DQorCQl9Ow0KKw0KKwkJLyogSW5pdGlhbGl6ZSB0aGUgVVNBUlQgdXNlZCBmb3IgdGhlIGRlYnVnIHRyYWNlIHdpdGggdGhlIGNvbmZpZ3VyZWQgcGFyYW1ldGVycy4gKi8NCisJCXNldF91c2FydF9iYXNlKCAoIHZvaWQgKiApIGNvbmZpZ0RCR19VU0FSVCApOw0KKwkJZ3Bpb19lbmFibGVfbW9kdWxlKCBEQkdfVVNBUlRfR1BJT19NQVAsDQorCQkgICAgICAgICAgICAgICAgICAgIHNpemVvZiggREJHX1VTQVJUX0dQSU9fTUFQICkgLyBzaXplb2YoIERCR19VU0FSVF9HUElPX01BUFswXSApICk7DQorCQl1c2FydF9pbml0KCBjb25maWdEQkdfVVNBUlRfQkFVRFJBVEUgKTsNCisJfQ0KKwkjZW5kaWYNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQpAQCAtMTU0LDkgKzE1NSw5IEBACiAgKiBzYWZlIHNlY3Rpb24gYXMgbWVtb3J5IGFsbG9jYXRpb24gbWFuYWdlbWVudCB1c2VzIGdsb2JhbCBkYXRhLg0KICAqIFNlZSB0aGUgYWZvcmVtZW50aW9uZWQgZGV0YWlscy4NCiAgKi8NCi12b2lkIF9fbWFsbG9jX2xvY2soIHN0cnVjdCBfcmVlbnQgKiBwdHIgKQ0KK3ZvaWQgX19tYWxsb2NfbG9jayhzdHJ1Y3QgX3JlZW50ICpwdHIpDQogew0KLSAgICB2VGFza1N1c3BlbmRBbGwoKTsNCisJdlRhc2tTdXNwZW5kQWxsKCk7DQogfQ0KIA0KIC8qDQpAQCAtMTY0LDk2ICsxNjUsOTIgQEAKICAqIGEgc2FmZSBzZWN0aW9uIGFzIG1lbW9yeSBhbGxvY2F0aW9uIG1hbmFnZW1lbnQgdXNlcyBnbG9iYWwgZGF0YS4NCiAgKiBTZWUgdGhlIGFmb3JlbWVudGlvbmVkIGRldGFpbHMuDQogICovDQotdm9pZCBfX21hbGxvY191bmxvY2soIHN0cnVjdCBfcmVlbnQgKiBwdHIgKQ0KK3ZvaWQgX19tYWxsb2NfdW5sb2NrKHN0cnVjdCBfcmVlbnQgKnB0cikNCiB7DQotICAgIHhUYXNrUmVzdW1lQWxsKCk7DQorCXhUYXNrUmVzdW1lQWxsKCk7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIEFkZGVkIGFzIHRoZXJlIGlzIG5vIHN1Y2ggZnVuY3Rpb24gaW4gRnJlZVJUT1MuICovDQotdm9pZCAqIHB2UG9ydFJlYWxsb2MoIHZvaWQgKiBwdiwNCi0gICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHhXYW50ZWRTaXplICkNCit2b2lkICpwdlBvcnRSZWFsbG9jKCB2b2lkICpwdiwgc2l6ZV90IHhXYW50ZWRTaXplICkNCiB7DQotICAgIHZvaWQgKiBwdlJldHVybjsNCit2b2lkICpwdlJldHVybjsNCiANCi0gICAgdlRhc2tTdXNwZW5kQWxsKCk7DQotICAgIHsNCi0gICAgICAgIHB2UmV0dXJuID0gcmVhbGxvYyggcHYsIHhXYW50ZWRTaXplICk7DQotICAgIH0NCi0gICAgeFRhc2tSZXN1bWVBbGwoKTsNCisJdlRhc2tTdXNwZW5kQWxsKCk7DQorCXsNCisJCXB2UmV0dXJuID0gcmVhbGxvYyggcHYsIHhXYW50ZWRTaXplICk7DQorCX0NCisJeFRhc2tSZXN1bWVBbGwoKTsNCiANCi0gICAgcmV0dXJuIHB2UmV0dXJuOw0KKwlyZXR1cm4gcHZSZXR1cm47DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFRoZSBjb29wZXJhdGl2ZSBzY2hlZHVsZXIgcmVxdWlyZXMgYSBub3JtYWwgSVJRIHNlcnZpY2Ugcm91dGluZSB0bw0KLSAqIHNpbXBseSBpbmNyZW1lbnQgdGhlIHN5c3RlbSB0aWNrLiAqLw0KLQ0KK3NpbXBseSBpbmNyZW1lbnQgdGhlIHN5c3RlbSB0aWNrLiAqLw0KIC8qIFRoZSBwcmVlbXB0aXZlIHNjaGVkdWxlciBpcyBkZWZpbmVkIGFzICJuYWtlZCIgYXMgdGhlIGZ1bGwgY29udGV4dCBpcyBzYXZlZA0KLSAqIG9uIGVudHJ5IGFzIHBhcnQgb2YgdGhlIGNvbnRleHQgc3dpdGNoLiAqLw0KLV9fYXR0cmlidXRlX18oICggX19uYWtlZF9fICkgKSBzdGF0aWMgdm9pZCB2VGljayggdm9pZCApDQorb24gZW50cnkgYXMgcGFydCBvZiB0aGUgY29udGV4dCBzd2l0Y2guICovDQorX19hdHRyaWJ1dGVfXygoX19uYWtlZF9fKSkgc3RhdGljIHZvaWQgdlRpY2soIHZvaWQgKQ0KIHsNCi0gICAgLyogU2F2ZSB0aGUgY29udGV4dCBvZiB0aGUgaW50ZXJydXB0ZWQgdGFzay4gKi8NCi0gICAgcG9ydFNBVkVfQ09OVEVYVF9PU19JTlQoKTsNCisJLyogU2F2ZSB0aGUgY29udGV4dCBvZiB0aGUgaW50ZXJydXB0ZWQgdGFzay4gKi8NCisJcG9ydFNBVkVfQ09OVEVYVF9PU19JTlQoKTsNCiANCi0gICAgI2lmICggY29uZmlnVElDS19VU0VfVEMgPT0gMSApDQotICAgICAgICAvKiBDbGVhciB0aGUgaW50ZXJydXB0IGZsYWcuICovDQotICAgICAgICBwcnZDbGVhclRjSW50KCk7DQotICAgICNlbHNlDQorCSNpZiggY29uZmlnVElDS19VU0VfVEM9PTEgKQ0KKwkJLyogQ2xlYXIgdGhlIGludGVycnVwdCBmbGFnLiAqLw0KKwkJcHJ2Q2xlYXJUY0ludCgpOw0KKwkjZWxzZQ0KKwkJLyogU2NoZWR1bGUgdGhlIENPVU5UJkNPTVBBUkUgbWF0Y2ggaW50ZXJydXB0IGluIChjb25maWdDUFVfQ0xPQ0tfSFovY29uZmlnVElDS19SQVRFX0haKQ0KKwkJY2xvY2sgY3ljbGVzIGZyb20gbm93LiAqLw0KKwkJcHJ2U2NoZWR1bGVOZXh0VGljaygpOw0KKwkjZW5kaWYNCiANCi0gICAgICAgIC8qIFNjaGVkdWxlIHRoZSBDT1VOVCZDT01QQVJFIG1hdGNoIGludGVycnVwdCBpbiAoY29uZmlnQ1BVX0NMT0NLX0haL2NvbmZpZ1RJQ0tfUkFURV9IWikNCi0gICAgICAgICAqIGNsb2NrIGN5Y2xlcyBmcm9tIG5vdy4gKi8NCi0gICAgICAgIHBydlNjaGVkdWxlTmV4dFRpY2soKTsNCi0gICAgI2VuZGlmDQorCS8qIEJlY2F1c2UgRnJlZVJUT1MgaXMgbm90IHN1cHBvc2VkIHRvIHJ1biB3aXRoIG5lc3RlZCBpbnRlcnJ1cHRzLCBwdXQgYWxsIE9TDQorCWNhbGxzIGluIGEgY3JpdGljYWwgc2VjdGlvbiAuICovDQorCXBvcnRFTlRFUl9DUklUSUNBTCgpOw0KKwkJeFRhc2tJbmNyZW1lbnRUaWNrKCk7DQorCXBvcnRFWElUX0NSSVRJQ0FMKCk7DQogDQotICAgIC8qIEJlY2F1c2UgRnJlZVJUT1MgaXMgbm90IHN1cHBvc2VkIHRvIHJ1biB3aXRoIG5lc3RlZCBpbnRlcnJ1cHRzLCBwdXQgYWxsIE9TDQotICAgICAqIGNhbGxzIGluIGEgY3JpdGljYWwgc2VjdGlvbiAuICovDQotICAgIHBvcnRFTlRFUl9DUklUSUNBTCgpOw0KLSAgICB4VGFza0luY3JlbWVudFRpY2soKTsNCi0gICAgcG9ydEVYSVRfQ1JJVElDQUwoKTsNCi0NCi0gICAgLyogUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgImVsZWN0ZWQgdGFzayIuICovDQotICAgIHBvcnRSRVNUT1JFX0NPTlRFWFRfT1NfSU5UKCk7DQorCS8qIFJlc3RvcmUgdGhlIGNvbnRleHQgb2YgdGhlICJlbGVjdGVkIHRhc2siLiAqLw0KKwlwb3J0UkVTVE9SRV9DT05URVhUX09TX0lOVCgpOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi1fX2F0dHJpYnV0ZV9fKCAoIF9fbmFrZWRfXyApICkgdm9pZCBTQ0FMTFlpZWxkKCB2b2lkICkNCitfX2F0dHJpYnV0ZV9fKChfX25ha2VkX18pKSB2b2lkIFNDQUxMWWllbGQoIHZvaWQgKQ0KIHsNCi0gICAgLyogU2F2ZSB0aGUgY29udGV4dCBvZiB0aGUgaW50ZXJydXB0ZWQgdGFzay4gKi8NCi0gICAgcG9ydFNBVkVfQ09OVEVYVF9TQ0FMTCgpOw0KLSAgICB2VGFza1N3aXRjaENvbnRleHQoKTsNCi0gICAgcG9ydFJFU1RPUkVfQ09OVEVYVF9TQ0FMTCgpOw0KKwkvKiBTYXZlIHRoZSBjb250ZXh0IG9mIHRoZSBpbnRlcnJ1cHRlZCB0YXNrLiAqLw0KKwlwb3J0U0FWRV9DT05URVhUX1NDQUxMKCk7DQorCXZUYXNrU3dpdGNoQ29udGV4dCgpOw0KKwlwb3J0UkVTVE9SRV9DT05URVhUX1NDQUxMKCk7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFRoZSBjb2RlIGdlbmVyYXRlZCBieSB0aGUgR0NDIGNvbXBpbGVyIHVzZXMgdGhlIHN0YWNrIGluIGRpZmZlcmVudCB3YXlzIGF0DQotICogZGlmZmVyZW50IG9wdGltaXNhdGlvbiBsZXZlbHMuICBUaGUgaW50ZXJydXB0IGZsYWdzIGNhbiB0aGVyZWZvcmUgbm90IGFsd2F5cw0KLSAqIGJlIHNhdmVkIHRvIHRoZSBzdGFjay4gIEluc3RlYWQgdGhlIGNyaXRpY2FsIHNlY3Rpb24gbmVzdGluZyBsZXZlbCBpcyBzdG9yZWQNCi0gKiBpbiBhIHZhcmlhYmxlLCB3aGljaCBpcyB0aGVuIHNhdmVkIGFzIHBhcnQgb2YgdGhlIHN0YWNrIGNvbnRleHQuICovDQotX19hdHRyaWJ1dGVfXyggKCBfX25vaW5saW5lX18gKSApIHZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICkNCitkaWZmZXJlbnQgb3B0aW1pc2F0aW9uIGxldmVscy4gIFRoZSBpbnRlcnJ1cHQgZmxhZ3MgY2FuIHRoZXJlZm9yZSBub3QgYWx3YXlzDQorYmUgc2F2ZWQgdG8gdGhlIHN0YWNrLiAgSW5zdGVhZCB0aGUgY3JpdGljYWwgc2VjdGlvbiBuZXN0aW5nIGxldmVsIGlzIHN0b3JlZA0KK2luIGEgdmFyaWFibGUsIHdoaWNoIGlzIHRoZW4gc2F2ZWQgYXMgcGFydCBvZiB0aGUgc3RhY2sgY29udGV4dC4gKi8NCitfX2F0dHJpYnV0ZV9fKChfX25vaW5saW5lX18pKSB2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCggdm9pZCApDQogew0KLSAgICAvKiBEaXNhYmxlIGludGVycnVwdHMgKi8NCi0gICAgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOw0KKwkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8NCisJcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOw0KIA0KLSAgICAvKiBOb3cgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgdWxDcml0aWNhbE5lc3RpbmcgY2FuIGJlIGFjY2Vzc2VkDQotICAgICAqIGRpcmVjdGx5LiAgSW5jcmVtZW50IHVsQ3JpdGljYWxOZXN0aW5nIHRvIGtlZXAgYSBjb3VudCBvZiBob3cgbWFueSB0aW1lcw0KLSAgICAgKiBwb3J0RU5URVJfQ1JJVElDQUwoKSBoYXMgYmVlbiBjYWxsZWQuICovDQotICAgIHVsQ3JpdGljYWxOZXN0aW5nKys7DQorCS8qIE5vdyBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB1bENyaXRpY2FsTmVzdGluZyBjYW4gYmUgYWNjZXNzZWQNCisJIGRpcmVjdGx5LiAgSW5jcmVtZW50IHVsQ3JpdGljYWxOZXN0aW5nIHRvIGtlZXAgYSBjb3VudCBvZiBob3cgbWFueSB0aW1lcw0KKwkgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgaGFzIGJlZW4gY2FsbGVkLiAqLw0KKwl1bENyaXRpY2FsTmVzdGluZysrOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi1fX2F0dHJpYnV0ZV9fKCAoIF9fbm9pbmxpbmVfXyApICkgdm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApDQorX19hdHRyaWJ1dGVfXygoX19ub2lubGluZV9fKSkgdm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApDQogew0KLSAgICBpZiggdWxDcml0aWNhbE5lc3RpbmcgPiBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyApDQotICAgIHsNCi0gICAgICAgIHVsQ3JpdGljYWxOZXN0aW5nLS07DQotDQotICAgICAgICBpZiggdWxDcml0aWNhbE5lc3RpbmcgPT0gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIC8qIEVuYWJsZSBhbGwgaW50ZXJydXB0L2V4Y2VwdGlvbi4gKi8NCi0gICAgICAgICAgICBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KKwlpZih1bENyaXRpY2FsTmVzdGluZyA+IHBvcnROT19DUklUSUNBTF9ORVNUSU5HKQ0KKwl7DQorCQl1bENyaXRpY2FsTmVzdGluZy0tOw0KKwkJaWYoIHVsQ3JpdGljYWxOZXN0aW5nID09IHBvcnROT19DUklUSUNBTF9ORVNUSU5HICkNCisJCXsNCisJCQkvKiBFbmFibGUgYWxsIGludGVycnVwdC9leGNlcHRpb24uICovDQorCQkJcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7DQorCQl9DQorCX0NCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQpAQCAtMjYzLDE4MiArMjYwLDE3NiBAQAogICoNCiAgKiBTZWUgaGVhZGVyIGZpbGUgZm9yIGRlc2NyaXB0aW9uLg0KICAqLw0KLVN0YWNrVHlwZV90ICogcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqIHB4VG9wT2ZTdGFjaywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFza0Z1bmN0aW9uX3QgcHhDb2RlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICogcHZQYXJhbWV0ZXJzICkNCitTdGFja1R5cGVfdCAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqcHhUb3BPZlN0YWNrLCBUYXNrRnVuY3Rpb25fdCBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycyApDQogew0KLSAgICAvKiBTZXR1cCB0aGUgaW5pdGlhbCBzdGFjayBvZiB0aGUgdGFzay4gIFRoZSBzdGFjayBpcyBzZXQgZXhhY3RseSBhcw0KLSAgICAgKiBleHBlY3RlZCBieSB0aGUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpIG1hY3JvLiAqLw0KKwkvKiBTZXR1cCB0aGUgaW5pdGlhbCBzdGFjayBvZiB0aGUgdGFzay4gIFRoZSBzdGFjayBpcyBzZXQgZXhhY3RseSBhcw0KKwlleHBlY3RlZCBieSB0aGUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpIG1hY3JvLiAqLw0KIA0KLSAgICAvKiBXaGVuIHRoZSB0YXNrIHN0YXJ0cywgaXQgd2lsbCBleHBlY3QgdG8gZmluZCB0aGUgZnVuY3Rpb24gcGFyYW1ldGVyIGluIFIxMi4gKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2stLSA9ICggU3RhY2tUeXBlX3QgKSAweDA4MDgwODA4OyAgICAgICAgICAgICAgICAgICAgLyogUjggKi8NCi0gICAgKnB4VG9wT2ZTdGFjay0tID0gKCBTdGFja1R5cGVfdCApIDB4MDkwOTA5MDk7ICAgICAgICAgICAgICAgICAgICAvKiBSOSAqLw0KLSAgICAqcHhUb3BPZlN0YWNrLS0gPSAoIFN0YWNrVHlwZV90ICkgMHgwQTBBMEEwQTsgICAgICAgICAgICAgICAgICAgIC8qIFIxMCAqLw0KLSAgICAqcHhUb3BPZlN0YWNrLS0gPSAoIFN0YWNrVHlwZV90ICkgMHgwQjBCMEIwQjsgICAgICAgICAgICAgICAgICAgIC8qIFIxMSAqLw0KLSAgICAqcHhUb3BPZlN0YWNrLS0gPSAoIFN0YWNrVHlwZV90ICkgcHZQYXJhbWV0ZXJzOyAgICAgICAgICAgICAgICAgIC8qIFIxMiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrLS0gPSAoIFN0YWNrVHlwZV90ICkgMHhERUFEQkVFRjsgICAgICAgICAgICAgICAgICAgIC8qIFIxNC9MUiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrLS0gPSAoIFN0YWNrVHlwZV90ICkgcHhDb2RlICsgcG9ydElOU1RSVUNUSU9OX1NJWkU7IC8qIFIxNS9QQyAqLw0KLSAgICAqcHhUb3BPZlN0YWNrLS0gPSAoIFN0YWNrVHlwZV90ICkgcG9ydElOSVRJQUxfU1I7ICAgICAgICAgICAgICAgIC8qIFNSICovDQotICAgICpweFRvcE9mU3RhY2stLSA9ICggU3RhY2tUeXBlX3QgKSAweEZGMDAwMEZGOyAgICAgICAgICAgICAgICAgICAgLyogUjAgKi8NCi0gICAgKnB4VG9wT2ZTdGFjay0tID0gKCBTdGFja1R5cGVfdCApIDB4MDEwMTAxMDE7ICAgICAgICAgICAgICAgICAgICAvKiBSMSAqLw0KLSAgICAqcHhUb3BPZlN0YWNrLS0gPSAoIFN0YWNrVHlwZV90ICkgMHgwMjAyMDIwMjsgICAgICAgICAgICAgICAgICAgIC8qIFIyICovDQotICAgICpweFRvcE9mU3RhY2stLSA9ICggU3RhY2tUeXBlX3QgKSAweDAzMDMwMzAzOyAgICAgICAgICAgICAgICAgICAgLyogUjMgKi8NCi0gICAgKnB4VG9wT2ZTdGFjay0tID0gKCBTdGFja1R5cGVfdCApIDB4MDQwNDA0MDQ7ICAgICAgICAgICAgICAgICAgICAvKiBSNCAqLw0KLSAgICAqcHhUb3BPZlN0YWNrLS0gPSAoIFN0YWNrVHlwZV90ICkgMHgwNTA1MDUwNTsgICAgICAgICAgICAgICAgICAgIC8qIFI1ICovDQotICAgICpweFRvcE9mU3RhY2stLSA9ICggU3RhY2tUeXBlX3QgKSAweDA2MDYwNjA2OyAgICAgICAgICAgICAgICAgICAgLyogUjYgKi8NCi0gICAgKnB4VG9wT2ZTdGFjay0tID0gKCBTdGFja1R5cGVfdCApIDB4MDcwNzA3MDc7ICAgICAgICAgICAgICAgICAgICAvKiBSNyAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHBvcnROT19DUklUSUNBTF9ORVNUSU5HOyAgICAgICAgIC8qIHVsQ3JpdGljYWxOZXN0aW5nICovDQorCS8qIFdoZW4gdGhlIHRhc2sgc3RhcnRzLCBpdCB3aWxsIGV4cGVjdCB0byBmaW5kIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXIgaW4gUjEyLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjay0tID0gKCBTdGFja1R5cGVfdCApIDB4MDgwODA4MDg7CQkJCQkvKiBSOCAqLw0KKwkqcHhUb3BPZlN0YWNrLS0gPSAoIFN0YWNrVHlwZV90ICkgMHgwOTA5MDkwOTsJCQkJCS8qIFI5ICovDQorCSpweFRvcE9mU3RhY2stLSA9ICggU3RhY2tUeXBlX3QgKSAweDBBMEEwQTBBOwkJCQkJLyogUjEwICovDQorCSpweFRvcE9mU3RhY2stLSA9ICggU3RhY2tUeXBlX3QgKSAweDBCMEIwQjBCOwkJCQkJLyogUjExICovDQorCSpweFRvcE9mU3RhY2stLSA9ICggU3RhY2tUeXBlX3QgKSBwdlBhcmFtZXRlcnM7CQkJCQkvKiBSMTIgKi8NCisJKnB4VG9wT2ZTdGFjay0tID0gKCBTdGFja1R5cGVfdCApIDB4REVBREJFRUY7CQkJCQkvKiBSMTQvTFIgKi8NCisJKnB4VG9wT2ZTdGFjay0tID0gKCBTdGFja1R5cGVfdCApIHB4Q29kZSArIHBvcnRJTlNUUlVDVElPTl9TSVpFOyAvKiBSMTUvUEMgKi8NCisJKnB4VG9wT2ZTdGFjay0tID0gKCBTdGFja1R5cGVfdCApIHBvcnRJTklUSUFMX1NSOwkJCQkvKiBTUiAqLw0KKwkqcHhUb3BPZlN0YWNrLS0gPSAoIFN0YWNrVHlwZV90ICkgMHhGRjAwMDBGRjsJCQkJCS8qIFIwICovDQorCSpweFRvcE9mU3RhY2stLSA9ICggU3RhY2tUeXBlX3QgKSAweDAxMDEwMTAxOwkJCQkJLyogUjEgKi8NCisJKnB4VG9wT2ZTdGFjay0tID0gKCBTdGFja1R5cGVfdCApIDB4MDIwMjAyMDI7CQkJCQkvKiBSMiAqLw0KKwkqcHhUb3BPZlN0YWNrLS0gPSAoIFN0YWNrVHlwZV90ICkgMHgwMzAzMDMwMzsJCQkJCS8qIFIzICovDQorCSpweFRvcE9mU3RhY2stLSA9ICggU3RhY2tUeXBlX3QgKSAweDA0MDQwNDA0OwkJCQkJLyogUjQgKi8NCisJKnB4VG9wT2ZTdGFjay0tID0gKCBTdGFja1R5cGVfdCApIDB4MDUwNTA1MDU7CQkJCQkvKiBSNSAqLw0KKwkqcHhUb3BPZlN0YWNrLS0gPSAoIFN0YWNrVHlwZV90ICkgMHgwNjA2MDYwNjsJCQkJCS8qIFI2ICovDQorCSpweFRvcE9mU3RhY2stLSA9ICggU3RhY2tUeXBlX3QgKSAweDA3MDcwNzA3OwkJCQkJLyogUjcgKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORzsJCQkvKiB1bENyaXRpY2FsTmVzdGluZyAqLw0KIA0KLSAgICByZXR1cm4gcHhUb3BPZlN0YWNrOw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBCYXNlVHlwZV90IHhQb3J0U3RhcnRTY2hlZHVsZXIoIHZvaWQgKQ0KIHsNCi0gICAgLyogU3RhcnQgdGhlIHRpbWVyIHRoYXQgZ2VuZXJhdGVzIHRoZSB0aWNrIElTUi4gIEludGVycnVwdHMgYXJlIGRpc2FibGVkDQotICAgICAqIGhlcmUgYWxyZWFkeS4gKi8NCi0gICAgcHJ2U2V0dXBUaW1lckludGVycnVwdCgpOw0KKwkvKiBTdGFydCB0aGUgdGltZXIgdGhhdCBnZW5lcmF0ZXMgdGhlIHRpY2sgSVNSLiAgSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQNCisJaGVyZSBhbHJlYWR5LiAqLw0KKwlwcnZTZXR1cFRpbWVySW50ZXJydXB0KCk7DQogDQotICAgIC8qIFN0YXJ0IHRoZSBmaXJzdCB0YXNrLiAqLw0KLSAgICBwb3J0UkVTVE9SRV9DT05URVhUKCk7DQorCS8qIFN0YXJ0IHRoZSBmaXJzdCB0YXNrLiAqLw0KKwlwb3J0UkVTVE9SRV9DT05URVhUKCk7DQogDQotICAgIC8qIFNob3VsZCBub3QgZ2V0IGhlcmUhICovDQotICAgIHJldHVybiAwOw0KKwkvKiBTaG91bGQgbm90IGdldCBoZXJlISAqLw0KKwlyZXR1cm4gMDsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogdm9pZCB2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApDQogew0KLSAgICAvKiBJdCBpcyB1bmxpa2VseSB0aGF0IHRoZSBBVlIzMiBwb3J0IHdpbGwgcmVxdWlyZSB0aGlzIGZ1bmN0aW9uIGFzIHRoZXJlDQotICAgICAqIGlzIG5vdGhpbmcgdG8gcmV0dXJuIHRvLiAgKi8NCisJLyogSXQgaXMgdW5saWtlbHkgdGhhdCB0aGUgQVZSMzIgcG9ydCB3aWxsIHJlcXVpcmUgdGhpcyBmdW5jdGlvbiBhcyB0aGVyZQ0KKwlpcyBub3RoaW5nIHRvIHJldHVybiB0by4gICovDQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFNjaGVkdWxlIHRoZSBDT1VOVCZDT01QQVJFIG1hdGNoIGludGVycnVwdCBpbiAoY29uZmlnQ1BVX0NMT0NLX0haL2NvbmZpZ1RJQ0tfUkFURV9IWikNCi0gKiBjbG9jayBjeWNsZXMgZnJvbSBub3cuICovDQotI2lmICggY29uZmlnVElDS19VU0VfVEMgPT0gMCApDQotICAgIHN0YXRpYyB2b2lkIHBydlNjaGVkdWxlRmlyc3RUaWNrKCB2b2lkICkNCi0gICAgew0KLSAgICAgICAgdWludDMyX3QgbEN5Y2xlczsNCitjbG9jayBjeWNsZXMgZnJvbSBub3cuICovDQorI2lmKCBjb25maWdUSUNLX1VTRV9UQz09MCApDQorCXN0YXRpYyB2b2lkIHBydlNjaGVkdWxlRmlyc3RUaWNrKHZvaWQpDQorCXsNCisJCXVpbnQzMl90IGxDeWNsZXM7DQogDQotICAgICAgICBsQ3ljbGVzID0gR2V0X3N5c3RlbV9yZWdpc3RlciggQVZSMzJfQ09VTlQgKTsNCi0gICAgICAgIGxDeWNsZXMgKz0gKCBjb25maWdDUFVfQ0xPQ0tfSFogLyBjb25maWdUSUNLX1JBVEVfSFogKTsNCisJCWxDeWNsZXMgPSBHZXRfc3lzdGVtX3JlZ2lzdGVyKEFWUjMyX0NPVU5UKTsNCisJCWxDeWNsZXMgKz0gKGNvbmZpZ0NQVV9DTE9DS19IWi9jb25maWdUSUNLX1JBVEVfSFopOw0KKwkJLy8gSWYgbEN5Y2xlcyBlbmRzIHVwIHRvIGJlIDAsIG1ha2UgaXQgMSBzbyB0aGF0IHRoZSBDT01QQVJFIGFuZCBleGNlcHRpb24NCisJCS8vIGdlbmVyYXRpb24gZmVhdHVyZSBkb2VzIG5vdCBnZXQgZGlzYWJsZWQuDQorCQlpZigwID09IGxDeWNsZXMpDQorCQl7DQorCQkJbEN5Y2xlcysrOw0KKwkJfQ0KKwkJU2V0X3N5c3RlbV9yZWdpc3RlcihBVlIzMl9DT01QQVJFLCBsQ3ljbGVzKTsNCisJfQ0KKwkNCisJX19hdHRyaWJ1dGVfXygoX19ub2lubGluZV9fKSkgc3RhdGljIHZvaWQgcHJ2U2NoZWR1bGVOZXh0VGljayh2b2lkKQ0KKwl7DQorCQl1aW50MzJfdCBsQ3ljbGVzLCBsQ291bnQ7DQogDQotICAgICAgICAvKiBJZiBsQ3ljbGVzIGVuZHMgdXAgdG8gYmUgMCwgbWFrZSBpdCAxIHNvIHRoYXQgdGhlIENPTVBBUkUgYW5kIGV4Y2VwdGlvbiAqLw0KLSAgICAgICAgLyogZ2VuZXJhdGlvbiBmZWF0dXJlIGRvZXMgbm90IGdldCBkaXNhYmxlZC4gKi8NCi0gICAgICAgIGlmKCAwID09IGxDeWNsZXMgKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGxDeWNsZXMrKzsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIFNldF9zeXN0ZW1fcmVnaXN0ZXIoIEFWUjMyX0NPTVBBUkUsIGxDeWNsZXMgKTsNCi0gICAgfQ0KLQ0KLSAgICBfX2F0dHJpYnV0ZV9fKCAoIF9fbm9pbmxpbmVfXyApICkgc3RhdGljIHZvaWQgcHJ2U2NoZWR1bGVOZXh0VGljayggdm9pZCApDQotICAgIHsNCi0gICAgICAgIHVpbnQzMl90IGxDeWNsZXMsIGxDb3VudDsNCi0NCi0gICAgICAgIGxDeWNsZXMgPSBHZXRfc3lzdGVtX3JlZ2lzdGVyKCBBVlIzMl9DT01QQVJFICk7DQotICAgICAgICBsQ3ljbGVzICs9ICggY29uZmlnQ1BVX0NMT0NLX0haIC8gY29uZmlnVElDS19SQVRFX0haICk7DQotDQotICAgICAgICAvKiBJZiBsQ3ljbGVzIGVuZHMgdXAgdG8gYmUgMCwgbWFrZSBpdCAxIHNvIHRoYXQgdGhlIENPTVBBUkUgYW5kIGV4Y2VwdGlvbiAqLw0KLSAgICAgICAgLyogZ2VuZXJhdGlvbiBmZWF0dXJlIGRvZXMgbm90IGdldCBkaXNhYmxlZC4gKi8NCi0gICAgICAgIGlmKCAwID09IGxDeWNsZXMgKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGxDeWNsZXMrKzsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIGxDb3VudCA9IEdldF9zeXN0ZW1fcmVnaXN0ZXIoIEFWUjMyX0NPVU5UICk7DQotDQotICAgICAgICBpZiggbEN5Y2xlcyA8IGxDb3VudCApDQotICAgICAgICB7IC8qIFdlIG1pc3NlZCBhIHRpY2ssIHJlY292ZXIgZm9yIHRoZSBuZXh0LiAqLw0KLSAgICAgICAgICAgIGxDeWNsZXMgKz0gKCBjb25maWdDUFVfQ0xPQ0tfSFogLyBjb25maWdUSUNLX1JBVEVfSFogKTsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIFNldF9zeXN0ZW1fcmVnaXN0ZXIoIEFWUjMyX0NPTVBBUkUsIGxDeWNsZXMgKTsNCi0gICAgfQ0KLSNlbHNlIC8qIGlmICggY29uZmlnVElDS19VU0VfVEMgPT0gMCApICovDQotICAgIF9fYXR0cmlidXRlX18oICggX19ub2lubGluZV9fICkgKSBzdGF0aWMgdm9pZCBwcnZDbGVhclRjSW50KCB2b2lkICkNCi0gICAgew0KLSAgICAgICAgQVZSMzJfVEMuY2hhbm5lbFsgY29uZmlnVElDS19UQ19DSEFOTkVMIF0uc3I7DQotICAgIH0NCi0jZW5kaWYgLyogaWYgKCBjb25maWdUSUNLX1VTRV9UQyA9PSAwICkgKi8NCisJCWxDeWNsZXMgPSBHZXRfc3lzdGVtX3JlZ2lzdGVyKEFWUjMyX0NPTVBBUkUpOw0KKwkJbEN5Y2xlcyArPSAoY29uZmlnQ1BVX0NMT0NLX0haL2NvbmZpZ1RJQ0tfUkFURV9IWik7DQorCQkvLyBJZiBsQ3ljbGVzIGVuZHMgdXAgdG8gYmUgMCwgbWFrZSBpdCAxIHNvIHRoYXQgdGhlIENPTVBBUkUgYW5kIGV4Y2VwdGlvbg0KKwkJLy8gZ2VuZXJhdGlvbiBmZWF0dXJlIGRvZXMgbm90IGdldCBkaXNhYmxlZC4NCisJCWlmKDAgPT0gbEN5Y2xlcykNCisJCXsNCisJCQlsQ3ljbGVzKys7DQorCQl9DQorCQlsQ291bnQgPSBHZXRfc3lzdGVtX3JlZ2lzdGVyKEFWUjMyX0NPVU5UKTsNCisJCWlmKCBsQ3ljbGVzIDwgbENvdW50ICkNCisJCXsJCS8vIFdlIG1pc3NlZCBhIHRpY2ssIHJlY292ZXIgZm9yIHRoZSBuZXh0Lg0KKwkJCWxDeWNsZXMgKz0gKGNvbmZpZ0NQVV9DTE9DS19IWi9jb25maWdUSUNLX1JBVEVfSFopOw0KKwkJfQ0KKwkJU2V0X3N5c3RlbV9yZWdpc3RlcihBVlIzMl9DT01QQVJFLCBsQ3ljbGVzKTsNCisJfQ0KKyNlbHNlDQorCV9fYXR0cmlidXRlX18oKF9fbm9pbmxpbmVfXykpIHN0YXRpYyB2b2lkIHBydkNsZWFyVGNJbnQodm9pZCkNCisJew0KKwkJQVZSMzJfVEMuY2hhbm5lbFtjb25maWdUSUNLX1RDX0NIQU5ORUxdLnNyOw0KKwl9DQorI2VuZGlmDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogU2V0dXAgdGhlIHRpbWVyIHRvIGdlbmVyYXRlIHRoZSB0aWNrIGludGVycnVwdHMuICovDQotc3RhdGljIHZvaWQgcHJ2U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApDQorc3RhdGljIHZvaWQgcHJ2U2V0dXBUaW1lckludGVycnVwdCh2b2lkKQ0KIHsNCi0gICAgI2lmICggY29uZmlnVElDS19VU0VfVEMgPT0gMSApDQotICAgICAgICB2b2xhdGlsZSBhdnIzMl90Y190ICogdGMgPSAmQVZSMzJfVEM7DQorI2lmKCBjb25maWdUSUNLX1VTRV9UQz09MSApDQogDQotICAgICAgICAvKiBPcHRpb25zIGZvciB3YXZlZm9ybSBnZW5yYXRpb24uICovDQotICAgICAgICB0Y193YXZlZm9ybV9vcHRfdCB3YXZlZm9ybV9vcHQgPQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIC5jaGFubmVsID0gY29uZmlnVElDS19UQ19DSEFOTkVMLCAgICAgICAgICAgICAgLyogQ2hhbm5lbCBzZWxlY3Rpb24uICovDQorCXZvbGF0aWxlIGF2cjMyX3RjX3QgKnRjID0gJkFWUjMyX1RDOw0KIA0KLSAgICAgICAgICAgIC5ic3d0cmcgID0gVENfRVZUX0VGRkVDVF9OT09QLCAgICAgICAgICAgICAgICAgLyogU29mdHdhcmUgdHJpZ2dlciBlZmZlY3Qgb24gVElPQi4gKi8NCi0gICAgICAgICAgICAuYmVldnQgICA9IFRDX0VWVF9FRkZFQ1RfTk9PUCwgICAgICAgICAgICAgICAgIC8qIEV4dGVybmFsIGV2ZW50IGVmZmVjdCBvbiBUSU9CLiAqLw0KLSAgICAgICAgICAgIC5iY3BjICAgID0gVENfRVZUX0VGRkVDVF9OT09QLCAgICAgICAgICAgICAgICAgLyogUkMgY29tcGFyZSBlZmZlY3Qgb24gVElPQi4gKi8NCi0gICAgICAgICAgICAuYmNwYiAgICA9IFRDX0VWVF9FRkZFQ1RfTk9PUCwgICAgICAgICAgICAgICAgIC8qIFJCIGNvbXBhcmUgZWZmZWN0IG9uIFRJT0IuICovDQorCS8vIE9wdGlvbnMgZm9yIHdhdmVmb3JtIGdlbnJhdGlvbi4NCisJdGNfd2F2ZWZvcm1fb3B0X3Qgd2F2ZWZvcm1fb3B0ID0NCisJew0KKwkuY2hhbm5lbCAgPSBjb25maWdUSUNLX1RDX0NIQU5ORUwsICAgICAgICAgICAgIC8qIENoYW5uZWwgc2VsZWN0aW9uLiAqLw0KIA0KLSAgICAgICAgICAgIC5hc3d0cmcgID0gVENfRVZUX0VGRkVDVF9OT09QLCAgICAgICAgICAgICAgICAgLyogU29mdHdhcmUgdHJpZ2dlciBlZmZlY3Qgb24gVElPQS4gKi8NCi0gICAgICAgICAgICAuYWVldnQgICA9IFRDX0VWVF9FRkZFQ1RfTk9PUCwgICAgICAgICAgICAgICAgIC8qIEV4dGVybmFsIGV2ZW50IGVmZmVjdCBvbiBUSU9BLiAqLw0KLSAgICAgICAgICAgIC5hY3BjICAgID0gVENfRVZUX0VGRkVDVF9OT09QLCAgICAgICAgICAgICAgICAgLyogUkMgY29tcGFyZSBlZmZlY3Qgb24gVElPQTogdG9nZ2xlLiAqLw0KLSAgICAgICAgICAgIC5hY3BhICAgID0gVENfRVZUX0VGRkVDVF9OT09QLCAgICAgICAgICAgICAgICAgLyogUkEgY29tcGFyZSBlZmZlY3Qgb24gVElPQTogdG9nZ2xlIChvdGhlciBwb3NzaWJpbGl0aWVzIGFyZSBub25lLCBzZXQgYW5kIGNsZWFyKS4gKi8NCisJLmJzd3RyZyAgID0gVENfRVZUX0VGRkVDVF9OT09QLCAgICAgICAgICAgICAgICAvKiBTb2Z0d2FyZSB0cmlnZ2VyIGVmZmVjdCBvbiBUSU9CLiAqLw0KKwkuYmVldnQgICAgPSBUQ19FVlRfRUZGRUNUX05PT1AsICAgICAgICAgICAgICAgIC8qIEV4dGVybmFsIGV2ZW50IGVmZmVjdCBvbiBUSU9CLiAqLw0KKwkuYmNwYyAgICAgPSBUQ19FVlRfRUZGRUNUX05PT1AsICAgICAgICAgICAgICAgIC8qIFJDIGNvbXBhcmUgZWZmZWN0IG9uIFRJT0IuICovDQorCS5iY3BiICAgICA9IFRDX0VWVF9FRkZFQ1RfTk9PUCwgICAgICAgICAgICAgICAgLyogUkIgY29tcGFyZSBlZmZlY3Qgb24gVElPQi4gKi8NCiANCi0gICAgICAgICAgICAud2F2c2VsICA9IFRDX1dBVkVGT1JNX1NFTF9VUF9NT0RFX1JDX1RSSUdHRVIsIC8qIFdhdmVmb3JtIHNlbGVjdGlvbjogVXAgbW9kZSB3aXRob3V0IGF1dG9tYXRpYyB0cmlnZ2VyIG9uIFJDIGNvbXBhcmUuICovDQotICAgICAgICAgICAgLmVuZXRyZyAgPSBGQUxTRSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFeHRlcm5hbCBldmVudCB0cmlnZ2VyIGVuYWJsZS4gKi8NCi0gICAgICAgICAgICAuZWV2dCAgICA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEV4dGVybmFsIGV2ZW50IHNlbGVjdGlvbi4gKi8NCi0gICAgICAgICAgICAuZWV2dGVkZyA9IFRDX1NFTF9OT19FREdFLCAgICAgICAgICAgICAgICAgICAgIC8qIEV4dGVybmFsIGV2ZW50IGVkZ2Ugc2VsZWN0aW9uLiAqLw0KLSAgICAgICAgICAgIC5jcGNkaXMgID0gRkFMU0UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ291bnRlciBkaXNhYmxlIHdoZW4gUkMgY29tcGFyZS4gKi8NCi0gICAgICAgICAgICAuY3Bjc3RvcCA9IEZBTFNFLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvdW50ZXIgY2xvY2sgc3RvcHBlZCB3aXRoIFJDIGNvbXBhcmUuICovDQorCS5hc3d0cmcgICA9IFRDX0VWVF9FRkZFQ1RfTk9PUCwgICAgICAgICAgICAgICAgLyogU29mdHdhcmUgdHJpZ2dlciBlZmZlY3Qgb24gVElPQS4gKi8NCisJLmFlZXZ0ICAgID0gVENfRVZUX0VGRkVDVF9OT09QLCAgICAgICAgICAgICAgICAvKiBFeHRlcm5hbCBldmVudCBlZmZlY3Qgb24gVElPQS4gKi8NCisJLmFjcGMgICAgID0gVENfRVZUX0VGRkVDVF9OT09QLCAgICAgICAgICAgICAgICAvKiBSQyBjb21wYXJlIGVmZmVjdCBvbiBUSU9BOiB0b2dnbGUuICovDQorCS5hY3BhICAgICA9IFRDX0VWVF9FRkZFQ1RfTk9PUCwgICAgICAgICAgICAgICAgLyogUkEgY29tcGFyZSBlZmZlY3Qgb24gVElPQTogdG9nZ2xlIChvdGhlciBwb3NzaWJpbGl0aWVzIGFyZSBub25lLCBzZXQgYW5kIGNsZWFyKS4gKi8NCiANCi0gICAgICAgICAgICAuYnVyc3QgICA9IEZBTFNFLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJ1cnN0IHNpZ25hbCBzZWxlY3Rpb24uICovDQotICAgICAgICAgICAgLmNsa2kgICAgPSBGQUxTRSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbG9jayBpbnZlcnNpb24uICovDQotICAgICAgICAgICAgLnRjY2xrcyAgPSBUQ19DTE9DS19TT1VSQ0VfVEMyICAgICAgICAgICAgICAgICAvKiBJbnRlcm5hbCBzb3VyY2UgY2xvY2sgMi4gKi8NCi0gICAgICAgIH07DQorCS53YXZzZWwgICA9IFRDX1dBVkVGT1JNX1NFTF9VUF9NT0RFX1JDX1RSSUdHRVIsLyogV2F2ZWZvcm0gc2VsZWN0aW9uOiBVcCBtb2RlIHdpdGhvdXQgYXV0b21hdGljIHRyaWdnZXIgb24gUkMgY29tcGFyZS4gKi8NCisJLmVuZXRyZyAgID0gRkFMU0UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFeHRlcm5hbCBldmVudCB0cmlnZ2VyIGVuYWJsZS4gKi8NCisJLmVldnQgICAgID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFeHRlcm5hbCBldmVudCBzZWxlY3Rpb24uICovDQorCS5lZXZ0ZWRnICA9IFRDX1NFTF9OT19FREdFLCAgICAgICAgICAgICAgICAgICAgLyogRXh0ZXJuYWwgZXZlbnQgZWRnZSBzZWxlY3Rpb24uICovDQorCS5jcGNkaXMgICA9IEZBTFNFLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ291bnRlciBkaXNhYmxlIHdoZW4gUkMgY29tcGFyZS4gKi8NCisJLmNwY3N0b3AgID0gRkFMU0UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb3VudGVyIGNsb2NrIHN0b3BwZWQgd2l0aCBSQyBjb21wYXJlLiAqLw0KIA0KLSAgICAgICAgdGNfaW50ZXJydXB0X3QgdGNfaW50ZXJydXB0ID0NCi0gICAgICAgIHsNCi0gICAgICAgICAgICAuZXRyZ3MgPSAwLA0KLSAgICAgICAgICAgIC5sZHJicyA9IDAsDQotICAgICAgICAgICAgLmxkcmFzID0gMCwNCi0gICAgICAgICAgICAuY3BjcyAgPSAxLA0KLSAgICAgICAgICAgIC5jcGJzICA9IDAsDQotICAgICAgICAgICAgLmNwYXMgID0gMCwNCi0gICAgICAgICAgICAubG92cnMgPSAwLA0KLSAgICAgICAgICAgIC5jb3ZmcyA9IDAsDQotICAgICAgICB9Ow0KLSAgICAjZW5kaWYgLyogaWYgKCBjb25maWdUSUNLX1VTRV9UQyA9PSAxICkgKi8NCisJLmJ1cnN0ICAgID0gRkFMU0UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBCdXJzdCBzaWduYWwgc2VsZWN0aW9uLiAqLw0KKwkuY2xraSAgICAgPSBGQUxTRSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsb2NrIGludmVyc2lvbi4gKi8NCisJLnRjY2xrcyAgID0gVENfQ0xPQ0tfU09VUkNFX1RDMiAgICAgICAgICAgICAgICAvKiBJbnRlcm5hbCBzb3VyY2UgY2xvY2sgMi4gKi8NCisJfTsNCiANCi0gICAgLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0L2V4Y2VwdGlvbi4gKi8NCi0gICAgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOw0KKwl0Y19pbnRlcnJ1cHRfdCB0Y19pbnRlcnJ1cHQgPQ0KKwl7DQorCQkuZXRyZ3M9MCwNCisJCS5sZHJicz0wLA0KKwkJLmxkcmFzPTAsDQorCQkuY3BjcyA9MSwNCisJCS5jcGJzID0wLA0KKwkJLmNwYXMgPTAsDQorCQkubG92cnM9MCwNCisJCS5jb3Zmcz0wLA0KKwl9Ow0KIA0KLSAgICAvKiBSZWdpc3RlciB0aGUgY29tcGFyZSBpbnRlcnJ1cHQgaGFuZGxlciB0byB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIgYW5kDQotICAgICAqIGVuYWJsZSB0aGUgY29tcGFyZSBpbnRlcnJ1cHQuICovDQorI2VuZGlmDQogDQotICAgICNpZiAoIGNvbmZpZ1RJQ0tfVVNFX1RDID09IDEgKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIElOVENfcmVnaXN0ZXJfaW50ZXJydXB0KCAmdlRpY2ssIGNvbmZpZ1RJQ0tfVENfSVJRLCBJTlQwICk7DQorCS8qIERpc2FibGUgYWxsIGludGVycnVwdC9leGNlcHRpb24uICovDQorCXBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsNCiANCi0gICAgICAgICAgICAvKiBJbml0aWFsaXplIHRoZSB0aW1lci9jb3VudGVyLiAqLw0KLSAgICAgICAgICAgIHRjX2luaXRfd2F2ZWZvcm0oIHRjLCAmd2F2ZWZvcm1fb3B0ICk7DQorCS8qIFJlZ2lzdGVyIHRoZSBjb21wYXJlIGludGVycnVwdCBoYW5kbGVyIHRvIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciBhbmQNCisJZW5hYmxlIHRoZSBjb21wYXJlIGludGVycnVwdC4gKi8NCiANCi0gICAgICAgICAgICAvKiBTZXQgdGhlIGNvbXBhcmUgdHJpZ2dlcnMuDQotICAgICAgICAgICAgICogUmVtZW1iZXIgVEMgY291bnRlciBpcyAxNi1iaXRzLCBzbyBjb3VudGluZyBzZWNvbmQgaXMgbm90IHBvc3NpYmxlIQ0KLSAgICAgICAgICAgICAqIFRoYXQncyB3aHkgd2UgY29uZmlndXJlIGl0IHRvIGNvdW50IG1zLiAqLw0KLSAgICAgICAgICAgIHRjX3dyaXRlX3JjKCB0YywgY29uZmlnVElDS19UQ19DSEFOTkVMLCAoIGNvbmZpZ1BCQV9DTE9DS19IWiAvIDQgKSAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApOw0KKwkjaWYoIGNvbmZpZ1RJQ0tfVVNFX1RDPT0xICkNCisJew0KKwkJSU5UQ19yZWdpc3Rlcl9pbnRlcnJ1cHQoJnZUaWNrLCBjb25maWdUSUNLX1RDX0lSUSwgSU5UMCk7DQogDQotICAgICAgICAgICAgdGNfY29uZmlndXJlX2ludGVycnVwdHMoIHRjLCBjb25maWdUSUNLX1RDX0NIQU5ORUwsICZ0Y19pbnRlcnJ1cHQgKTsNCisJCS8qIEluaXRpYWxpemUgdGhlIHRpbWVyL2NvdW50ZXIuICovDQorCQl0Y19pbml0X3dhdmVmb3JtKHRjLCAmd2F2ZWZvcm1fb3B0KTsNCiANCi0gICAgICAgICAgICAvKiBTdGFydCB0aGUgdGltZXIvY291bnRlci4gKi8NCi0gICAgICAgICAgICB0Y19zdGFydCggdGMsIGNvbmZpZ1RJQ0tfVENfQ0hBTk5FTCApOw0KLSAgICAgICAgfQ0KLSAgICAjZWxzZSAvKiBpZiAoIGNvbmZpZ1RJQ0tfVVNFX1RDID09IDEgKSAqLw0KLSAgICAgICAgew0KLSAgICAgICAgICAgIElOVENfcmVnaXN0ZXJfaW50ZXJydXB0KCAmdlRpY2ssIEFWUjMyX0NPUkVfQ09NUEFSRV9JUlEsIElOVDAgKTsNCi0gICAgICAgICAgICBwcnZTY2hlZHVsZUZpcnN0VGljaygpOw0KLSAgICAgICAgfQ0KLSAgICAjZW5kaWYgLyogaWYgKCBjb25maWdUSUNLX1VTRV9UQyA9PSAxICkgKi8NCisJCS8qIFNldCB0aGUgY29tcGFyZSB0cmlnZ2Vycy4NCisJCVJlbWVtYmVyIFRDIGNvdW50ZXIgaXMgMTYtYml0cywgc28gY291bnRpbmcgc2Vjb25kIGlzIG5vdCBwb3NzaWJsZSENCisJCVRoYXQncyB3aHkgd2UgY29uZmlndXJlIGl0IHRvIGNvdW50IG1zLiAqLw0KKwkJdGNfd3JpdGVfcmMoIHRjLCBjb25maWdUSUNLX1RDX0NIQU5ORUwsICggY29uZmlnUEJBX0NMT0NLX0haIC8gNCkgLyBjb25maWdUSUNLX1JBVEVfSFogKTsNCisNCisJCXRjX2NvbmZpZ3VyZV9pbnRlcnJ1cHRzKCB0YywgY29uZmlnVElDS19UQ19DSEFOTkVMLCAmdGNfaW50ZXJydXB0ICk7DQorDQorCQkvKiBTdGFydCB0aGUgdGltZXIvY291bnRlci4gKi8NCisJCXRjX3N0YXJ0KHRjLCBjb25maWdUSUNLX1RDX0NIQU5ORUwpOw0KKwl9DQorCSNlbHNlDQorCXsNCisJCUlOVENfcmVnaXN0ZXJfaW50ZXJydXB0KCZ2VGljaywgQVZSMzJfQ09SRV9DT01QQVJFX0lSUSwgSU5UMCk7DQorCQlwcnZTY2hlZHVsZUZpcnN0VGljaygpOw0KKwl9DQorCSNlbmRpZg0KIH0NCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9HQ0MvQVZSMzJfVUMzL3BvcnRtYWNyby5oIGIvcG9ydGFibGUvR0NDL0FWUjMyX1VDMy9wb3J0bWFjcm8uaAppbmRleCBmNjcyMDA0Li5jNGRlMzJiIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9HQ0MvQVZSMzJfVUMzL3BvcnRtYWNyby5oCisrKyBiL3BvcnRhYmxlL0dDQy9BVlIzMl9VQzMvcG9ydG1hY3JvLmgKQEAgLTEsNSArMSw0IEBACiAvKlRoaXMgZmlsZSBoYXMgYmVlbiBwcmVwYXJlZCBmb3IgRG94eWdlbiBhdXRvbWF0aWMgZG9jdW1lbnRhdGlvbiBnZW5lcmF0aW9uLiovDQotDQogLyohIFxmaWxlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAqDQogICogXGJyaWVmIEZyZWVSVE9TIHBvcnQgc291cmNlIGZvciBBVlIzMiBVQzMuDQpAQCAtNDIsNyArNDEsNyBAQAogDQogDQogI2lmbmRlZiBQT1JUTUFDUk9fSA0KLSAgICAjZGVmaW5lIFBPUlRNQUNST19IDQorI2RlZmluZSBQT1JUTUFDUk9fSA0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgKiBQb3J0IHNwZWNpZmljIGRlZmluaXRpb25zLg0KQEAgLTUzLDYyICs1Miw2MiBAQAogICogVGhlc2Ugc2V0dGluZ3Mgc2hvdWxkIG5vdCBiZSBhbHRlcmVkLg0KICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgKi8NCi0gICAgI2luY2x1ZGUgPGF2cjMyL2lvLmg+DQotICAgICNpbmNsdWRlICJpbnRjLmgiDQotICAgICNpbmNsdWRlICJjb21waWxlci5oIg0KKyNpbmNsdWRlIDxhdnIzMi9pby5oPg0KKyNpbmNsdWRlICJpbnRjLmgiDQorI2luY2x1ZGUgImNvbXBpbGVyLmgiDQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgZXh0ZXJuICJDIiB7DQotICAgICNlbmRpZg0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KIA0KIA0KIC8qIFR5cGUgZGVmaW5pdGlvbnMuICovDQotICAgICNkZWZpbmUgcG9ydENIQVIgICAgICAgICAgY2hhcg0KLSAgICAjZGVmaW5lIHBvcnRGTE9BVCAgICAgICAgIGZsb2F0DQotICAgICNkZWZpbmUgcG9ydERPVUJMRSAgICAgICAgZG91YmxlDQotICAgICNkZWZpbmUgcG9ydExPTkcgICAgICAgICAgbG9uZw0KLSAgICAjZGVmaW5lIHBvcnRTSE9SVCAgICAgICAgIHNob3J0DQotICAgICNkZWZpbmUgcG9ydFNUQUNLX1RZUEUgICAgdWludDMyX3QNCi0gICAgI2RlZmluZSBwb3J0QkFTRV9UWVBFICAgICBsb25nDQorI2RlZmluZSBwb3J0Q0hBUiAgICAgICAgY2hhcg0KKyNkZWZpbmUgcG9ydEZMT0FUICAgICAgIGZsb2F0DQorI2RlZmluZSBwb3J0RE9VQkxFICAgICAgZG91YmxlDQorI2RlZmluZSBwb3J0TE9ORyAgICAgICAgbG9uZw0KKyNkZWZpbmUgcG9ydFNIT1JUICAgICAgIHNob3J0DQorI2RlZmluZSBwb3J0U1RBQ0tfVFlQRSAgdWludDMyX3QNCisjZGVmaW5lIHBvcnRCQVNFX1RZUEUgICBsb25nDQogDQotICAgIHR5cGVkZWYgcG9ydFNUQUNLX1RZUEUgICBTdGFja1R5cGVfdDsNCi0gICAgdHlwZWRlZiBsb25nICAgICAgICAgICAgIEJhc2VUeXBlX3Q7DQotICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyAgICBVQmFzZVR5cGVfdDsNCit0eXBlZGVmIHBvcnRTVEFDS19UWVBFIFN0YWNrVHlwZV90Ow0KK3R5cGVkZWYgbG9uZyBCYXNlVHlwZV90Ow0KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBVQmFzZVR5cGVfdDsNCiANCi0gICAgI2RlZmluZSBUQVNLX0RFTEFZX01TKCB4ICkgICAgICggKCB4ICkgLyBwb3J0VElDS19QRVJJT0RfTVMgKQ0KLSAgICAjZGVmaW5lIFRBU0tfREVMQVlfUyggeCApICAgICAgKCAoIHggKSAqIDEwMDAgLyBwb3J0VElDS19QRVJJT0RfTVMgKQ0KLSAgICAjZGVmaW5lIFRBU0tfREVMQVlfTUlOKCB4ICkgICAgKCAoIHggKSAqIDYwICogMTAwMCAvIHBvcnRUSUNLX1BFUklPRF9NUyApDQorI2RlZmluZSBUQVNLX0RFTEFZX01TKHgpICAgKCAoeCkgICAgICAgIC9wb3J0VElDS19QRVJJT0RfTVMgKQ0KKyNkZWZpbmUgVEFTS19ERUxBWV9TKHgpICAgICggKHgpKjEwMDAgICAvcG9ydFRJQ0tfUEVSSU9EX01TICkNCisjZGVmaW5lIFRBU0tfREVMQVlfTUlOKHgpICAoICh4KSo2MCoxMDAwL3BvcnRUSUNLX1BFUklPRF9NUyApDQogDQotICAgICNkZWZpbmUgY29uZmlnVElDS19UQ19JUlEgICAgQVRQQVNURTIoIEFWUjMyX1RDX0lSUSwgY29uZmlnVElDS19UQ19DSEFOTkVMICkNCisjZGVmaW5lIGNvbmZpZ1RJQ0tfVENfSVJRICAgICAgICAgICAgIEFUUEFTVEUyKEFWUjMyX1RDX0lSUSwgY29uZmlnVElDS19UQ19DSEFOTkVMKQ0KIA0KLSAgICAjaWYgKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KLSAgICAgICAgdHlwZWRlZiB1aW50MTZfdCAgIFRpY2tUeXBlX3Q7DQotICAgICAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQotICAgICNlbHNlDQotICAgICAgICB0eXBlZGVmIHVpbnQzMl90ICAgVGlja1R5cGVfdDsNCi0gICAgICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwNCi0gICAgI2VuZGlmDQorI2lmKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KKwl0eXBlZGVmIHVpbnQxNl90IFRpY2tUeXBlX3Q7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIFRpY2tUeXBlX3QgKSAweGZmZmYNCisjZWxzZQ0KKwl0eXBlZGVmIHVpbnQzMl90IFRpY2tUeXBlX3Q7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwNCisjZW5kaWYNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWNzLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEggICAgICAoIC0xICkNCi0gICAgI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMgICAgKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCi0gICAgI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQgICAgNA0KLSAgICAjZGVmaW5lIHBvcnROT1AoKSAgICB7IF9fYXNtX18gX192b2xhdGlsZV9fICggIm5vcCIgKTsgfQ0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSCAgICAgICggLTEgKQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TICAgICAgKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCisjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVCAgICA0DQorI2RlZmluZSBwb3J0Tk9QKCkgICAgICAgICAgICAge19fYXNtX18gX192b2xhdGlsZV9fICgibm9wIik7fQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIElOVEMtc3BlY2lmaWMuICovDQotICAgICNkZWZpbmUgRElTQUJMRV9BTExfRVhDRVBUSU9OUygpICAgICAgICBEaXNhYmxlX2dsb2JhbF9leGNlcHRpb24oKQ0KLSAgICAjZGVmaW5lIEVOQUJMRV9BTExfRVhDRVBUSU9OUygpICAgICAgICAgRW5hYmxlX2dsb2JhbF9leGNlcHRpb24oKQ0KKyNkZWZpbmUgRElTQUJMRV9BTExfRVhDRVBUSU9OUygpICAgIERpc2FibGVfZ2xvYmFsX2V4Y2VwdGlvbigpDQorI2RlZmluZSBFTkFCTEVfQUxMX0VYQ0VQVElPTlMoKSAgICAgRW5hYmxlX2dsb2JhbF9leGNlcHRpb24oKQ0KIA0KLSAgICAjZGVmaW5lIERJU0FCTEVfQUxMX0lOVEVSUlVQVFMoKSAgICAgICAgRGlzYWJsZV9nbG9iYWxfaW50ZXJydXB0KCkNCi0gICAgI2RlZmluZSBFTkFCTEVfQUxMX0lOVEVSUlVQVFMoKSAgICAgICAgIEVuYWJsZV9nbG9iYWxfaW50ZXJydXB0KCkNCisjZGVmaW5lIERJU0FCTEVfQUxMX0lOVEVSUlVQVFMoKSAgICBEaXNhYmxlX2dsb2JhbF9pbnRlcnJ1cHQoKQ0KKyNkZWZpbmUgRU5BQkxFX0FMTF9JTlRFUlJVUFRTKCkgICAgIEVuYWJsZV9nbG9iYWxfaW50ZXJydXB0KCkNCiANCi0gICAgI2RlZmluZSBESVNBQkxFX0lOVF9MRVZFTCggaW50X2xldiApICAgIERpc2FibGVfaW50ZXJydXB0X2xldmVsKCBpbnRfbGV2ICkNCi0gICAgI2RlZmluZSBFTkFCTEVfSU5UX0xFVkVMKCBpbnRfbGV2ICkgICAgIEVuYWJsZV9pbnRlcnJ1cHRfbGV2ZWwoIGludF9sZXYgKQ0KKyNkZWZpbmUgRElTQUJMRV9JTlRfTEVWRUwoaW50X2xldikgIERpc2FibGVfaW50ZXJydXB0X2xldmVsKGludF9sZXYpDQorI2RlZmluZSBFTkFCTEVfSU5UX0xFVkVMKGludF9sZXYpICAgRW5hYmxlX2ludGVycnVwdF9sZXZlbChpbnRfbGV2KQ0KIA0KIA0KIC8qDQpAQCAtMTI0LDMzICsxMjMsMzIgQEAKICAqIFNIQUxMIE5PVCBCRSBDQUxMRUQgRlJPTSBXSVRISU4gQU4gSU5URVJSVVBUIGFzIGZwdXRzIGFuZCBwcmludGYgdXNlIG1hbGxvYywNCiAgKiB3aGljaCBpcyBpbnRlcnJ1cHQtdW5zYWZlIHdpdGggdGhlIGN1cnJlbnQgX19tYWxsb2NfbG9jayBhbmQgX19tYWxsb2NfdW5sb2NrLg0KICAqLw0KLSAgICAjaWYgY29uZmlnREJHDQotICAgICAgICAjZGVmaW5lIHBvcnREQkdfVFJBQ0UoIC4uLiApICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBmcHV0cyggX19GSUxFX18gIjoiIEFTVFJJTkdaKCBfX0xJTkVfXyApICI6ICIsIHN0ZG91dCApOyBcDQotICAgICAgICBwcmludGYoIF9fVkFfQVJHU19fICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBmcHV0cyggIlxyXG4iLCBzdGRvdXQgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIH0NCi0gICAgI2Vsc2UNCi0gICAgICAgICNkZWZpbmUgcG9ydERCR19UUkFDRSggLi4uICkNCi0gICAgI2VuZGlmDQorI2lmIGNvbmZpZ0RCRw0KKyNkZWZpbmUgcG9ydERCR19UUkFDRSguLi4pIFwNCit7XA0KKyAgZnB1dHMoX19GSUxFX18gIjoiIEFTVFJJTkdaKF9fTElORV9fKSAiOiAiLCBzdGRvdXQpO1wNCisgIHByaW50ZihfX1ZBX0FSR1NfXyk7XA0KKyAgZnB1dHMoIlxyXG4iLCBzdGRvdXQpO1wNCit9DQorI2Vsc2UNCisjZGVmaW5lIHBvcnREQkdfVFJBQ0UoLi4uKQ0KKyNlbmRpZg0KIA0KIA0KIC8qIENyaXRpY2FsIHNlY3Rpb24gbWFuYWdlbWVudC4gKi8NCi0gICAgI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgICAgRElTQUJMRV9BTExfSU5URVJSVVBUUygpDQotICAgICNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkgICAgIEVOQUJMRV9BTExfSU5URVJSVVBUUygpDQorI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgIERJU0FCTEVfQUxMX0lOVEVSUlVQVFMoKQ0KKyNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkgICBFTkFCTEVfQUxMX0lOVEVSUlVQVFMoKQ0KIA0KIA0KLSAgICBleHRlcm4gdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKTsNCi0gICAgZXh0ZXJuIHZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApOw0KIA0KLSAgICAjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpICAgIHZQb3J0RW50ZXJDcml0aWNhbCgpOw0KLSAgICAjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkgICAgIHZQb3J0RXhpdENyaXRpY2FsKCk7DQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKSAgICAgIHZQb3J0RW50ZXJDcml0aWNhbCgpOw0KKyNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKSAgICAgICB2UG9ydEV4aXRDcml0aWNhbCgpOw0KIA0KIA0KIC8qIEFkZGVkIGFzIHRoZXJlIGlzIG5vIHN1Y2ggZnVuY3Rpb24gaW4gRnJlZVJUT1MuICovDQotICAgIGV4dGVybiB2b2lkICogcHZQb3J0UmVhbGxvYyggdm9pZCAqIHB2LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB4U2l6ZSApOw0KK2V4dGVybiB2b2lkICpwdlBvcnRSZWFsbG9jKCB2b2lkICpwdiwgc2l6ZV90IHhTaXplICk7DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogDQpAQCAtMTU5LDQ0ICsxNTcsNDQgQEAKIC8qDQogICogUmVzdG9yZSBDb250ZXh0IGZvciBjYXNlcyBvdGhlciB0aGFuIElOVGkuDQogICovDQotICAgICNkZWZpbmUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGV4dGVybiB2b2xhdGlsZSB1aW50MzJfdCB1bENyaXRpY2FsTmVzdGluZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBleHRlcm4gdm9sYXRpbGUgdm9pZCAqIHZvbGF0aWxlIHB4Q3VycmVudFRDQjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogU2V0IFNQIHRvIHBvaW50IHRvIG5ldyBzdGFjayAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICJtb3YgICAgIHI4LCBMTyglW3B4Q3VycmVudFRDQl0pCQkJCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICJvcmggICAgIHI4LCBISSglW3B4Q3VycmVudFRDQl0pCQkJCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICJsZC53ICAgIHIwLCByOFswXQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgImxkLncgICAgc3AsIHIwWzBdCQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogUmVzdG9yZSB1bENyaXRpY2FsTmVzdGluZyB2YXJpYWJsZSAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICJsZC53ICAgIHIwLCBzcCsrCQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAibW92ICAgICByOCwgTE8oJVt1bENyaXRpY2FsTmVzdGluZ10pCQkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgIm9yaCAgICAgcjgsIEhJKCVbdWxDcml0aWNhbE5lc3RpbmddKQkJCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICJzdC53ICAgIHI4WzBdLCByMAkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIFJlc3RvcmUgUjAuLlI3ICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAibGRtICAgICBzcCsrLCByMC1yNwkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAvKiBSMC1SNyBzaG91bGQgbm90IGJlIHVzZWQgYmVsb3cgdGhpcyBsaW5lICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogU2tpcCBQQyBhbmQgU1IgKHdpbGwgZG8gaXQgYXQgdGhlIGVuZCkgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICJzdWIgICAgIHNwLCAtMio0CQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAvKiBSZXN0b3JlIFI4Li5SMTIgYW5kIExSICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgImxkbSAgICAgc3ArKywgcjgtcjEyLCBscgkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgIC8qIFJlc3RvcmUgU1IgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAibGQudyAgICByMCwgc3BbLTgqNF1cblx0IiAvKiBSMCBpcyBtb2RpZmllZCwgaXMgcmVzdG9yZWQgbGF0ZXIuICovICAgICAgICAgICBcDQotICAgICAgICAgICAgIm10c3IgICAgJVtTUl0sIHIwCQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAvKiBSZXN0b3JlIHIwICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgImxkLncgICAgcjAsIHNwWy05KjRdCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgIC8qIFJlc3RvcmUgUEMgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAibGQudyAgICBwYywgc3BbLTcqNF0iIC8qIEdldCBQQyBmcm9tIHN0YWNrIC0gUEMgaXMgdGhlIDd0aCByZWdpc3RlciBzYXZlZCAqLyBcDQotICAgICAgICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIDpbIHVsQ3JpdGljYWxOZXN0aW5nIF0gImkiICggJnVsQ3JpdGljYWxOZXN0aW5nICksICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICBbIHB4Q3VycmVudFRDQiBdICJpIiAoICZweEN1cnJlbnRUQ0IgKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgWyBTUiBdICJpIiAoIEFWUjMyX1NSICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgfQ0KKyNkZWZpbmUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpCQkJCQkJCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgZXh0ZXJuIHZvbGF0aWxlIHVpbnQzMl90IHVsQ3JpdGljYWxOZXN0aW5nOwkJCQkJCQkJCVwNCisgIGV4dGVybiB2b2xhdGlsZSB2b2lkICp2b2xhdGlsZSBweEN1cnJlbnRUQ0I7CQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBTZXQgU1AgdG8gcG9pbnQgdG8gbmV3IHN0YWNrICovCQkJCQkJCQkJCQkJCVwNCisgICAgIm1vdiAgICAgcjgsIExPKCVbcHhDdXJyZW50VENCXSkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJvcmggICAgIHI4LCBISSglW3B4Q3VycmVudFRDQl0pCQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAibGQudyAgICByMCwgcjhbMF0JCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAibGQudyAgICBzcCwgcjBbMF0JCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIFJlc3RvcmUgdWxDcml0aWNhbE5lc3RpbmcgdmFyaWFibGUgKi8JCQkJCQkJCQkJCVwNCisgICAgImxkLncgICAgcjAsIHNwKysJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAibW92ICAgICByOCwgTE8oJVt1bENyaXRpY2FsTmVzdGluZ10pCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJvcmggICAgIHI4LCBISSglW3VsQ3JpdGljYWxOZXN0aW5nXSkJCQkJCQkJCQkJCQlcblx0IlwNCisgICAgInN0LncgICAgcjhbMF0sIHIwCQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBSZXN0b3JlIFIwLi5SNyAqLwkJCQkJCQkJCQkJCQkJCQlcDQorICAgICJsZG0gICAgIHNwKyssIHIwLXI3CQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAvKiBSMC1SNyBzaG91bGQgbm90IGJlIHVzZWQgYmVsb3cgdGhpcyBsaW5lICovCQkJCQkJCQkJCVwNCisgICAgLyogU2tpcCBQQyBhbmQgU1IgKHdpbGwgZG8gaXQgYXQgdGhlIGVuZCkgKi8JCQkJCQkJCQkJXA0KKyAgICAic3ViICAgICBzcCwgLTIqNAkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgIC8qIFJlc3RvcmUgUjguLlIxMiBhbmQgTFIgKi8JCQkJCQkJCQkJCQkJCVwNCisgICAgImxkbSAgICAgc3ArKywgcjgtcjEyLCBscgkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAvKiBSZXN0b3JlIFNSICovCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgICJsZC53ICAgIHIwLCBzcFstOCo0XVxuXHQiIC8qIFIwIGlzIG1vZGlmaWVkLCBpcyByZXN0b3JlZCBsYXRlci4gKi8JCQkJCVwNCisgICAgIm10c3IgICAgJVtTUl0sIHIwCQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCisgICAgLyogUmVzdG9yZSByMCAqLwkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAibGQudyAgICByMCwgc3BbLTkqNF0JCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgIC8qIFJlc3RvcmUgUEMgKi8JCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgImxkLncgICAgcGMsIHNwWy03KjRdIiAvKiBHZXQgUEMgZnJvbSBzdGFjayAtIFBDIGlzIHRoZSA3dGggcmVnaXN0ZXIgc2F2ZWQgKi8JCVwNCisgICAgOgkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgOiBbdWxDcml0aWNhbE5lc3RpbmddICJpIiAoJnVsQ3JpdGljYWxOZXN0aW5nKSwJCQkJCQkJCQkJXA0KKyAgICAgIFtweEN1cnJlbnRUQ0JdICJpIiAoJnB4Q3VycmVudFRDQiksCQkJCQkJCQkJCQkJXA0KKyAgICAgIFtTUl0gImkiIChBVlIzMl9TUikJCQkJCQkJCQkJCQkJCQkJXA0KKyAgKTsJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorfQ0KIA0KIA0KIC8qDQpAQCAtMjA3LDE3NCArMjA1LDE3NCBAQAogICogYXJlIG5vdCB0aGUgc2FtZSBiZXR3ZWVuIElOVDAuLjMgZXhjZXB0aW9ucyBhbmQgdGhlIHNjYWxsIGV4Y2VwdGlvbi4NCiAgKi8NCiANCi0vKiBUYXNrIGNvbnRleHQgc3RhY2sgbGF5b3V0OiAqLw0KLS8qIFI4ICAoKikgKi8NCi0vKiBSOSAgKCopICovDQotLyogUjEwICgqKSAqLw0KLS8qIFIxMSAoKikgKi8NCi0vKiBSMTIgKCopICovDQotLyogUjE0L0xSICgqKSAqLw0KLS8qIFIxNS9QQyAoKikgKi8NCi0vKiBTUiAoKikgKi8NCi0vKiBSMCAqLw0KLS8qIFIxICovDQotLyogUjIgKi8NCi0vKiBSMyAqLw0KLS8qIFI0ICovDQotLyogUjUgKi8NCi0vKiBSNiAqLw0KLS8qIFI3ICovDQotLyogdWxDcml0aWNhbE5lc3RpbmcgKi8NCi0vKiAoKikgYXV0b21hdGljYWxseSBkb25lIGZvciBJTlQwLi5JTlQzLCBidXQgbm90IGZvciBTQ0FMTCAqLw0KKy8vIFRhc2sgY29udGV4dCBzdGFjayBsYXlvdXQ6DQorICAvLyBSOCAgKCopDQorICAvLyBSOSAgKCopDQorICAvLyBSMTAgKCopDQorICAvLyBSMTEgKCopDQorICAvLyBSMTIgKCopDQorICAvLyBSMTQvTFIgKCopDQorICAvLyBSMTUvUEMgKCopDQorICAvLyBTUiAoKikNCisgIC8vIFIwDQorICAvLyBSMQ0KKyAgLy8gUjINCisgIC8vIFIzDQorICAvLyBSNA0KKyAgLy8gUjUNCisgIC8vIFI2DQorICAvLyBSNw0KKyAgLy8gdWxDcml0aWNhbE5lc3RpbmcNCisvLyAoKikgYXV0b21hdGljYWxseSBkb25lIGZvciBJTlQwLi5JTlQzLCBidXQgbm90IGZvciBTQ0FMTA0KIA0KIC8qDQogICogVGhlIElTUiB1c2VkIGZvciB0aGUgc2NoZWR1bGVyIHRpY2sgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSBjb29wZXJhdGl2ZSBvcg0KICAqIHRoZSBwcmVlbXB0aXZlIHNjaGVkdWxlciBpcyBiZWluZyB1c2VkLg0KICAqLw0KLSAgICAjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMA0KKyNpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAwDQogDQogLyoNCiAgKiBwb3J0U0FWRV9DT05URVhUX09TX0lOVCgpIGZvciBPUyBUaWNrIGV4Y2VwdGlvbi4NCiAgKi8NCi0gICAgICAgICNkZWZpbmUgcG9ydFNBVkVfQ09OVEVYVF9PU19JTlQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgLyogU2F2ZSBSMC4uUjcgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICggInN0bSAgICAgLS1zcCwgcjAtcjciICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgLyogV2l0aCB0aGUgY29vcGVyYXRpdmUgc2NoZWR1bGVyLCBhcyB0aGVyZSBpcyBubyBjb250ZXh0IHN3aXRjaCBieSBpbnRlcnJ1cHQsICovIFwNCi0gICAgICAgIC8qIHRoZXJlIGlzIGFsc28gbm8gY29udGV4dCBzYXZlLiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIH0NCisjZGVmaW5lIHBvcnRTQVZFX0NPTlRFWFRfT1NfSU5UKCkJCQkJCQkJCQkJCQkJCVwNCit7CQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIC8qIFNhdmUgUjAuLlI3ICovCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzdG0gICAgIC0tc3AsIHIwLXI3Iik7CQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIC8qIFdpdGggdGhlIGNvb3BlcmF0aXZlIHNjaGVkdWxlciwgYXMgdGhlcmUgaXMgbm8gY29udGV4dCBzd2l0Y2ggYnkgaW50ZXJydXB0LCAqLwkJXA0KKyAgLyogdGhlcmUgaXMgYWxzbyBubyBjb250ZXh0IHNhdmUuICovCQkJCQkJCQkJCQkJCVwNCit9DQogDQogLyoNCiAgKiBwb3J0UkVTVE9SRV9DT05URVhUX09TX0lOVCgpIGZvciBUaWNrIGV4Y2VwdGlvbi4NCiAgKi8NCi0gICAgICAgICNkZWZpbmUgcG9ydFJFU1RPUkVfQ09OVEVYVF9PU19JTlQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBSZXN0b3JlIFIwLi5SNyAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICJsZG0gICAgIHNwKyssIHIwLXI3XG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBXaXRoIHRoZSBjb29wZXJhdGl2ZSBzY2hlZHVsZXIsIGFzIHRoZXJlIGlzIG5vIGNvbnRleHQgc3dpdGNoIGJ5IGludGVycnVwdCwgKi8gXA0KLSAgICAgICAgICAgIC8qIHRoZXJlIGlzIGFsc28gbm8gY29udGV4dCByZXN0b3JlLiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgInJldGUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB9DQorI2RlZmluZSBwb3J0UkVTVE9SRV9DT05URVhUX09TX0lOVCgpCQkJCQkJCQkJCQkJCVwNCit7CQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBSZXN0b3JlIFIwLi5SNyAqLwkJCQkJCQkJCQkJCQkJCQlcDQorICAgICJsZG0gICAgIHNwKyssIHIwLXI3XG5cdCIJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgLyogV2l0aCB0aGUgY29vcGVyYXRpdmUgc2NoZWR1bGVyLCBhcyB0aGVyZSBpcyBubyBjb250ZXh0IHN3aXRjaCBieSBpbnRlcnJ1cHQsICovCVwNCisgICAgLyogdGhlcmUgaXMgYWxzbyBubyBjb250ZXh0IHJlc3RvcmUuICovCQkJCQkJCQkJCQkJXA0KKyAgICAicmV0ZSIJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICk7CQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KK30NCiANCi0gICAgI2Vsc2UgLyogaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMCAqLw0KKyNlbHNlDQogDQogLyoNCiAgKiBwb3J0U0FWRV9DT05URVhUX09TX0lOVCgpIGZvciBPUyBUaWNrIGV4Y2VwdGlvbi4NCiAgKi8NCi0gICAgICAgICNkZWZpbmUgcG9ydFNBVkVfQ09OVEVYVF9PU19JTlQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgZXh0ZXJuIHZvbGF0aWxlIHVpbnQzMl90IHVsQ3JpdGljYWxOZXN0aW5nOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGV4dGVybiB2b2xhdGlsZSB2b2lkICogdm9sYXRpbGUgcHhDdXJyZW50VENCOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgLyogV2hlbiB3ZSBjb21lIGhlcmUgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIFJlZ2lzdGVycyBSOC4uUjEyLCBMUiwgUEMgYW5kIFNSIGhhZCBhbHJlYWR5IGJlZW4gcHVzaGVkIHRvIHN5c3RlbSBzdGFjayAqLyAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBTYXZlIFIwLi5SNyAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgInN0bSAgICAgLS1zcCwgcjAtcjcJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIFNhdmUgdWxDcml0aWNhbE5lc3RpbmcgdmFyaWFibGUgIC0gUjAgaXMgb3ZlcndyaXR0ZW4gKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAibW92ICAgICByOCwgTE8oJVt1bENyaXRpY2FsTmVzdGluZ10pXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgIm9yaCAgICAgcjgsIEhJKCVbdWxDcml0aWNhbE5lc3RpbmddKVxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICJsZC53ICAgIHIwLCByOFswXQkJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgInN0LncgICAgLS1zcCwgcjAJCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBDaGVjayBpZiBJTlQwIG9yIGhpZ2hlciB3ZXJlIGJlaW5nIGhhbmRsZWQgKGNhc2Ugd2hlcmUgdGhlIE9TIHRpY2sgaW50ZXJydXB0ZWQgYW5vdGhlciAqLyAgICBcDQotICAgICAgICAgICAgLyogaW50ZXJydXB0IGhhbmRsZXIgKHdoaWNoIHdhcyBvZiBhIGhpZ2hlciBwcmlvcml0eSBsZXZlbCBidXQgZGVjaWRlZCB0byBsb3dlciBpdHMgcHJpb3JpdHkgKi8gXA0KLSAgICAgICAgICAgIC8qIGxldmVsIGFuZCBhbGxvdyBvdGhlciBsb3dlciBpbnRlcnJ1cHQgbGV2ZWwgdG8gb2NjdXIpLiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBJbiB0aGlzIGNhc2Ugd2UgZG9uJ3Qgd2FudCB0byBkbyBhIHRhc2sgc3dpdGNoIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdyB3aGF0IHRoZSBzdGFjayAqLyAgICAgICBcDQotICAgICAgICAgICAgLyogY3VycmVudGx5IGxvb2tzIGxpa2UgKHdlIGRvbid0IGtub3cgd2hhdCB0aGUgaW50ZXJydXB0ZWQgaW50ZXJydXB0IGhhbmRsZXIgd2FzIGRvaW5nKS4gKi8gICAgXA0KLSAgICAgICAgICAgIC8qIFNhdmluZyBTUCBpbiBweEN1cnJlbnRUQ0IgYW5kIHRoZW4gbGF0ZXIgcmVzdG9yaW5nIGl0ICh0aGlua2luZyByZXN0b3JpbmcgdGhlIHRhc2spICovICAgICAgIFwNCi0gICAgICAgICAgICAvKiB3aWxsIGp1c3QgYmUgcmVzdG9yaW5nIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciwgbm8gd2F5ISEhICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogU28sIHNpbmNlIHdlIHdvbid0IGRvIGEgdlRhc2tTd2l0Y2hDb250ZXh0KCksIGl0J3Mgb2Ygbm8gdXNlIHRvIHNhdmUgU1AuICovICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICJsZC53ICAgIHIwLCBzcFs5KjRdXG5cdCIgICAvKiBSZWFkIFNSIGluIHN0YWNrICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAiYmZleHR1ICByMCwgcjAsIDIyLCAzXG5cdCIgLyogRXh0cmFjdCB0aGUgbW9kZSBiaXRzIHRvIFIwLiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgImNwLncgICAgcjAsIDFcblx0IiAgICAgICAgIC8qIENvbXBhcmUgdGhlIG1vZGUgYml0cyB3aXRoIHN1cGVydmlzb3IgbW9kZShiJzAwMSkgKi8gICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICJicmhpICAgIExBQkVMX0lOVF9TS0lQX1NBVkVfQ09OVEVYVF8lW0xJTkVdCQkJCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBTdG9yZSBTUCBpbiB0aGUgZmlyc3QgbWVtYmVyIG9mIHRoZSBzdHJ1Y3R1cmUgcG9pbnRlZCB0byBieSBweEN1cnJlbnRUQ0IgKi8gICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogTk9URTogd2UgZG9uJ3QgZW50ZXIgYSBjcml0aWNhbCBzZWN0aW9uIGhlcmUgYmVjYXVzZSBhbGwgaW50ZXJydXB0IGhhbmRsZXJzICovICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIE1VU1QgcGVyZm9ybSBhIFNBVkVfQ09OVEVYVC9SRVNUT1JFX0NPTlRFWFQgaW4gdGhlIHNhbWUgd2F5IGFzICovICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBwb3J0U0FWRV9DT05URVhUX09TX0lOVC9wb3J0X1JFU1RPUkVfQ09OVEVYVF9PU19JTlQgaWYgdGhleSBjYWxsIE9TIGZ1bmN0aW9ucy4gKi8gICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogPT4gYWxsIGludGVycnVwdCBoYW5kbGVycyBtdXN0IHVzZSBwb3J0RU5URVJfU1dJVENISU5HX0lTUi9wb3J0RVhJVF9TV0lUQ0hJTkdfSVNSLiAqLyAgICAgICAgXA0KLSAgICAgICAgICAgICJtb3YgICAgIHI4LCBMTyglW3B4Q3VycmVudFRDQl0pXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAib3JoICAgICByOCwgSEkoJVtweEN1cnJlbnRUQ0JdKVxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgImxkLncgICAgcjAsIHI4WzBdXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICJzdC53ICAgIHIwWzBdLCBzcFxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgIkxBQkVMX0lOVF9TS0lQX1NBVkVfQ09OVEVYVF8lW0xJTkVdOiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICA6WyB1bENyaXRpY2FsTmVzdGluZyBdICJpIiAoICZ1bENyaXRpY2FsTmVzdGluZyApLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgWyBweEN1cnJlbnRUQ0IgXSAiaSIgKCAmcHhDdXJyZW50VENCICksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIFsgTElORSBdICJpIiAoIF9fTElORV9fICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIH0NCisjZGVmaW5lIHBvcnRTQVZFX0NPTlRFWFRfT1NfSU5UKCkJCQkJCQkJCQkJCQkJCQkJCVwNCit7CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIGV4dGVybiB2b2xhdGlsZSB1aW50MzJfdCB1bENyaXRpY2FsTmVzdGluZzsJCQkJCQkJCQkJCQlcDQorICBleHRlcm4gdm9sYXRpbGUgdm9pZCAqdm9sYXRpbGUgcHhDdXJyZW50VENCOwkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAvKiBXaGVuIHdlIGNvbWUgaGVyZSAqLwkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAvKiBSZWdpc3RlcnMgUjguLlIxMiwgTFIsIFBDIGFuZCBTUiBoYWQgYWxyZWFkeSBiZWVuIHB1c2hlZCB0byBzeXN0ZW0gc3RhY2sgKi8JCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIFNhdmUgUjAuLlI3ICovCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgICJzdG0gICAgIC0tc3AsIHIwLXI3CQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIFNhdmUgdWxDcml0aWNhbE5lc3RpbmcgdmFyaWFibGUgIC0gUjAgaXMgb3ZlcndyaXR0ZW4gKi8JCQkJCQkJCQkJXA0KKyAgICAibW92ICAgICByOCwgTE8oJVt1bENyaXRpY2FsTmVzdGluZ10pXG5cdCIJCQkJCQkJCQkJCQkJCVwNCisgICAgIm9yaCAgICAgcjgsIEhJKCVbdWxDcml0aWNhbE5lc3RpbmddKVxuXHQiCQkJCQkJCQkJCQkJCQlcDQorICAgICJsZC53ICAgIHIwLCByOFswXQkJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJzdC53ICAgIC0tc3AsIHIwCQkJCQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBDaGVjayBpZiBJTlQwIG9yIGhpZ2hlciB3ZXJlIGJlaW5nIGhhbmRsZWQgKGNhc2Ugd2hlcmUgdGhlIE9TIHRpY2sgaW50ZXJydXB0ZWQgYW5vdGhlciAqLwlcDQorICAgIC8qIGludGVycnVwdCBoYW5kbGVyICh3aGljaCB3YXMgb2YgYSBoaWdoZXIgcHJpb3JpdHkgbGV2ZWwgYnV0IGRlY2lkZWQgdG8gbG93ZXIgaXRzIHByaW9yaXR5ICovCVwNCisgICAgLyogbGV2ZWwgYW5kIGFsbG93IG90aGVyIGxvd2VyIGludGVycnVwdCBsZXZlbCB0byBvY2N1cikuICovCQkJCQkJCQkJXA0KKyAgICAvKiBJbiB0aGlzIGNhc2Ugd2UgZG9uJ3Qgd2FudCB0byBkbyBhIHRhc2sgc3dpdGNoIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdyB3aGF0IHRoZSBzdGFjayAqLwkJXA0KKyAgICAvKiBjdXJyZW50bHkgbG9va3MgbGlrZSAod2UgZG9uJ3Qga25vdyB3aGF0IHRoZSBpbnRlcnJ1cHRlZCBpbnRlcnJ1cHQgaGFuZGxlciB3YXMgZG9pbmcpLiAqLwlcDQorICAgIC8qIFNhdmluZyBTUCBpbiBweEN1cnJlbnRUQ0IgYW5kIHRoZW4gbGF0ZXIgcmVzdG9yaW5nIGl0ICh0aGlua2luZyByZXN0b3JpbmcgdGhlIHRhc2spICovCQlcDQorICAgIC8qIHdpbGwganVzdCBiZSByZXN0b3JpbmcgdGhlIGludGVycnVwdCBoYW5kbGVyLCBubyB3YXkhISEgKi8JCQkJCQkJCQlcDQorICAgIC8qIFNvLCBzaW5jZSB3ZSB3b24ndCBkbyBhIHZUYXNrU3dpdGNoQ29udGV4dCgpLCBpdCdzIG9mIG5vIHVzZSB0byBzYXZlIFNQLiAqLwkJCQkJXA0KKyAgICAibGQudyAgICByMCwgc3BbOSo0XVxuXHQiIC8qIFJlYWQgU1IgaW4gc3RhY2sgKi8JCQkJCQkJCQkJCQlcDQorICAgICJiZmV4dHUgIHIwLCByMCwgMjIsIDNcblx0IiAvKiBFeHRyYWN0IHRoZSBtb2RlIGJpdHMgdG8gUjAuICovCQkJCQkJCQkJXA0KKyAgICAiY3AudyAgICByMCwgMVxuXHQiIC8qIENvbXBhcmUgdGhlIG1vZGUgYml0cyB3aXRoIHN1cGVydmlzb3IgbW9kZShiJzAwMSkgKi8JCQkJCQlcDQorICAgICJicmhpICAgIExBQkVMX0lOVF9TS0lQX1NBVkVfQ09OVEVYVF8lW0xJTkVdCQkJCQkJCQkJCQkJCVxuXHQiXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIFN0b3JlIFNQIGluIHRoZSBmaXJzdCBtZW1iZXIgb2YgdGhlIHN0cnVjdHVyZSBwb2ludGVkIHRvIGJ5IHB4Q3VycmVudFRDQiAqLwkJCQkJXA0KKyAgICAvKiBOT1RFOiB3ZSBkb24ndCBlbnRlciBhIGNyaXRpY2FsIHNlY3Rpb24gaGVyZSBiZWNhdXNlIGFsbCBpbnRlcnJ1cHQgaGFuZGxlcnMgKi8JCQkJXA0KKyAgICAvKiBNVVNUIHBlcmZvcm0gYSBTQVZFX0NPTlRFWFQvUkVTVE9SRV9DT05URVhUIGluIHRoZSBzYW1lIHdheSBhcyAqLwkJCQkJCQlcDQorICAgIC8qIHBvcnRTQVZFX0NPTlRFWFRfT1NfSU5UL3BvcnRfUkVTVE9SRV9DT05URVhUX09TX0lOVCBpZiB0aGV5IGNhbGwgT1MgZnVuY3Rpb25zLiAqLwkJCVwNCisgICAgLyogPT4gYWxsIGludGVycnVwdCBoYW5kbGVycyBtdXN0IHVzZSBwb3J0RU5URVJfU1dJVENISU5HX0lTUi9wb3J0RVhJVF9TV0lUQ0hJTkdfSVNSLiAqLwkJXA0KKyAgICAibW92ICAgICByOCwgTE8oJVtweEN1cnJlbnRUQ0JdKVxuXHQiCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAib3JoICAgICByOCwgSEkoJVtweEN1cnJlbnRUQ0JdKVxuXHQiCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAibGQudyAgICByMCwgcjhbMF1cblx0IgkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgICJzdC53ICAgIHIwWzBdLCBzcFxuIgkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgIkxBQkVMX0lOVF9TS0lQX1NBVkVfQ09OVEVYVF8lW0xJTkVdOiIJCQkJCQkJCQkJCQkJCQlcDQorICAgIDoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIDogW3VsQ3JpdGljYWxOZXN0aW5nXSAiaSIgKCZ1bENyaXRpY2FsTmVzdGluZyksCQkJCQkJCQkJCQkJCVwNCisgICAgICBbcHhDdXJyZW50VENCXSAiaSIgKCZweEN1cnJlbnRUQ0IpLAkJCQkJCQkJCQkJCQkJCVwNCisgICAgICBbTElORV0gImkiIChfX0xJTkVfXykJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgKTsJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorfQ0KIA0KIC8qDQogICogcG9ydFJFU1RPUkVfQ09OVEVYVF9PU19JTlQoKSBmb3IgVGljayBleGNlcHRpb24uDQogICovDQotICAgICAgICAjZGVmaW5lIHBvcnRSRVNUT1JFX0NPTlRFWFRfT1NfSU5UKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGV4dGVybiB2b2xhdGlsZSB1aW50MzJfdCB1bENyaXRpY2FsTmVzdGluZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBleHRlcm4gdm9sYXRpbGUgdm9pZCAqIHZvbGF0aWxlIHB4Q3VycmVudFRDQjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIENoZWNrIGlmIElOVDAgb3IgaGlnaGVyIHdlcmUgYmVpbmcgaGFuZGxlZCAoY2FzZSB3aGVyZSB0aGUgT1MgdGljayBpbnRlcnJ1cHRlZCBhbm90aGVyICovICAgICAgICAgICBcDQotICAgICAgICAvKiBpbnRlcnJ1cHQgaGFuZGxlciAod2hpY2ggd2FzIG9mIGEgaGlnaGVyIHByaW9yaXR5IGxldmVsIGJ1dCBkZWNpZGVkIHRvIGxvd2VyIGl0cyBwcmlvcml0eSAqLyAgICAgICAgXA0KLSAgICAgICAgLyogbGV2ZWwgYW5kIGFsbG93IG90aGVyIGxvd2VyIGludGVycnVwdCBsZXZlbCB0byBvY2N1cikuICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIEluIHRoaXMgY2FzZSB3ZSBkb24ndCB3YW50IHRvIGRvIGEgdGFzayBzd2l0Y2ggYmVjYXVzZSB3ZSBkb24ndCBrbm93IHdoYXQgdGhlIHN0YWNrICovICAgICAgICAgICAgICBcDQotICAgICAgICAvKiBjdXJyZW50bHkgbG9va3MgbGlrZSAod2UgZG9uJ3Qga25vdyB3aGF0IHRoZSBpbnRlcnJ1cHRlZCBpbnRlcnJ1cHQgaGFuZGxlciB3YXMgZG9pbmcpLiAqLyAgICAgICAgICAgXA0KLSAgICAgICAgLyogU2F2aW5nIFNQIGluIHB4Q3VycmVudFRDQiBhbmQgdGhlbiBsYXRlciByZXN0b3JpbmcgaXQgKHRoaW5raW5nIHJlc3RvcmluZyB0aGUgdGFzaykgKi8gICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIHdpbGwganVzdCBiZSByZXN0b3JpbmcgdGhlIGludGVycnVwdCBoYW5kbGVyLCBubyB3YXkhISEgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICJsZC53ICAgIHIwLCBzcFs5KjRdXG5cdCIgICAvKiBSZWFkIFNSIGluIHN0YWNrICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAiYmZleHR1ICByMCwgcjAsIDIyLCAzXG5cdCIgLyogRXh0cmFjdCB0aGUgbW9kZSBiaXRzIHRvIFIwLiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgImNwLncgICAgcjAsIDFcblx0IiAgICAgICAgIC8qIENvbXBhcmUgdGhlIG1vZGUgYml0cyB3aXRoIHN1cGVydmlzb3IgbW9kZShiJzAwMSkgKi8gICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICJicmhpICAgIExBQkVMX0lOVF9TS0lQX1JFU1RPUkVfQ09OVEVYVF8lW0xJTkVdIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgOlsgTElORSBdICJpIiAoIF9fTElORV9fICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAvKiBFbHNlICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgLyogYmVjYXVzZSBpdCBpcyBoZXJlIHNhZmUsIGFsd2F5cyBjYWxsIHZUYXNrU3dpdGNoQ29udGV4dCgpIHNpbmNlIGFuIE9TIHRpY2sgb2NjdXJyZWQuICovICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIEEgY3JpdGljYWwgc2VjdGlvbiBoYXMgdG8gYmUgdXNlZCBoZXJlIGJlY2F1c2UgdlRhc2tTd2l0Y2hDb250ZXh0IGhhbmRsZXMgRnJlZVJUT1MgbGlua2VkIGxpc3RzLiAqLyBcDQotICAgICAgICBwb3J0RU5URVJfQ1JJVElDQUwoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgdlRhc2tTd2l0Y2hDb250ZXh0KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHBvcnRFWElUX0NSSVRJQ0FMKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgLyogUmVzdG9yZSBhbGwgcmVnaXN0ZXJzICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIFNldCBTUCB0byBwb2ludCB0byBuZXcgc3RhY2sgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAibW92ICAgICByOCwgTE8oJVtweEN1cnJlbnRUQ0JdKQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAib3JoICAgICByOCwgSEkoJVtweEN1cnJlbnRUQ0JdKQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAibGQudyAgICByMCwgcjhbMF0JCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICJsZC53ICAgIHNwLCByMFswXQkJCQkJCQkJCQkJCQkJCQkJCQkJXG4iXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAiTEFCRUxfSU5UX1NLSVBfUkVTVE9SRV9DT05URVhUXyVbTElORV06CQkJCQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogUmVzdG9yZSB1bENyaXRpY2FsTmVzdGluZyB2YXJpYWJsZSAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICJsZC53ICAgIHIwLCBzcCsrCQkJCQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAibW92ICAgICByOCwgTE8oJVt1bENyaXRpY2FsTmVzdGluZ10pCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgIm9yaCAgICAgcjgsIEhJKCVbdWxDcml0aWNhbE5lc3RpbmddKQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICJzdC53ICAgIHI4WzBdLCByMAkJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIFJlc3RvcmUgUjAuLlI3ICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAibGRtICAgICBzcCsrLCByMC1yNwkJCQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogTm93LCB0aGUgc3RhY2sgc2hvdWxkIGJlIFI4Li5SMTIsIExSLCBQQyBhbmQgU1IgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICJyZXRlIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgOlsgdWxDcml0aWNhbE5lc3RpbmcgXSAiaSIgKCAmdWxDcml0aWNhbE5lc3RpbmcgKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIFsgcHhDdXJyZW50VENCIF0gImkiICggJnB4Q3VycmVudFRDQiApLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICBbIExJTkUgXSAiaSIgKCBfX0xJTkVfXyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB9DQorI2RlZmluZSBwb3J0UkVTVE9SRV9DT05URVhUX09TX0lOVCgpCQkJCQkJCQkJCQkJCQkJCVwNCit7CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIGV4dGVybiB2b2xhdGlsZSB1aW50MzJfdCB1bENyaXRpY2FsTmVzdGluZzsJCQkJCQkJCQkJCQlcDQorICBleHRlcm4gdm9sYXRpbGUgdm9pZCAqdm9sYXRpbGUgcHhDdXJyZW50VENCOwkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAvKiBDaGVjayBpZiBJTlQwIG9yIGhpZ2hlciB3ZXJlIGJlaW5nIGhhbmRsZWQgKGNhc2Ugd2hlcmUgdGhlIE9TIHRpY2sgaW50ZXJydXB0ZWQgYW5vdGhlciAqLwkJXA0KKyAgLyogaW50ZXJydXB0IGhhbmRsZXIgKHdoaWNoIHdhcyBvZiBhIGhpZ2hlciBwcmlvcml0eSBsZXZlbCBidXQgZGVjaWRlZCB0byBsb3dlciBpdHMgcHJpb3JpdHkgKi8JXA0KKyAgLyogbGV2ZWwgYW5kIGFsbG93IG90aGVyIGxvd2VyIGludGVycnVwdCBsZXZlbCB0byBvY2N1cikuICovCQkJCQkJCQkJCVwNCisgIC8qIEluIHRoaXMgY2FzZSB3ZSBkb24ndCB3YW50IHRvIGRvIGEgdGFzayBzd2l0Y2ggYmVjYXVzZSB3ZSBkb24ndCBrbm93IHdoYXQgdGhlIHN0YWNrICovCQkJXA0KKyAgLyogY3VycmVudGx5IGxvb2tzIGxpa2UgKHdlIGRvbid0IGtub3cgd2hhdCB0aGUgaW50ZXJydXB0ZWQgaW50ZXJydXB0IGhhbmRsZXIgd2FzIGRvaW5nKS4gKi8JCVwNCisgIC8qIFNhdmluZyBTUCBpbiBweEN1cnJlbnRUQ0IgYW5kIHRoZW4gbGF0ZXIgcmVzdG9yaW5nIGl0ICh0aGlua2luZyByZXN0b3JpbmcgdGhlIHRhc2spICovCQkJXA0KKyAgLyogd2lsbCBqdXN0IGJlIHJlc3RvcmluZyB0aGUgaW50ZXJydXB0IGhhbmRsZXIsIG5vIHdheSEhISAqLwkJCQkJCQkJCQlcDQorICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgImxkLncgICAgcjAsIHNwWzkqNF1cblx0IiAvKiBSZWFkIFNSIGluIHN0YWNrICovCQkJCQkJCQkJCQkJXA0KKyAgICAiYmZleHR1ICByMCwgcjAsIDIyLCAzXG5cdCIgLyogRXh0cmFjdCB0aGUgbW9kZSBiaXRzIHRvIFIwLiAqLwkJCQkJCQkJCVwNCisgICAgImNwLncgICAgcjAsIDFcblx0IiAvKiBDb21wYXJlIHRoZSBtb2RlIGJpdHMgd2l0aCBzdXBlcnZpc29yIG1vZGUoYicwMDEpICovCQkJCQkJXA0KKyAgICAiYnJoaSAgICBMQUJFTF9JTlRfU0tJUF9SRVNUT1JFX0NPTlRFWFRfJVtMSU5FXSIJCQkJCQkJCQkJCQlcDQorICAgIDoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIDogW0xJTkVdICJpIiAoX19MSU5FX18pCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICk7CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAvKiBFbHNlICovCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIC8qIGJlY2F1c2UgaXQgaXMgaGVyZSBzYWZlLCBhbHdheXMgY2FsbCB2VGFza1N3aXRjaENvbnRleHQoKSBzaW5jZSBhbiBPUyB0aWNrIG9jY3VycmVkLiAqLwkJXA0KKyAgLyogQSBjcml0aWNhbCBzZWN0aW9uIGhhcyB0byBiZSB1c2VkIGhlcmUgYmVjYXVzZSB2VGFza1N3aXRjaENvbnRleHQgaGFuZGxlcyBGcmVlUlRPUyBsaW5rZWQgbGlzdHMuICovXA0KKyAgcG9ydEVOVEVSX0NSSVRJQ0FMKCk7CQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICB2VGFza1N3aXRjaENvbnRleHQoKTsJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIHBvcnRFWElUX0NSSVRJQ0FMKCk7CQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIC8qIFJlc3RvcmUgYWxsIHJlZ2lzdGVycyAqLwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIFNldCBTUCB0byBwb2ludCB0byBuZXcgc3RhY2sgKi8JCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAibW92ICAgICByOCwgTE8oJVtweEN1cnJlbnRUQ0JdKQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCisgICAgIm9yaCAgICAgcjgsIEhJKCVbcHhDdXJyZW50VENCXSkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJsZC53ICAgIHIwLCByOFswXQkJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJsZC53ICAgIHNwLCByMFswXQkJCQkJCQkJCQkJCQkJCQkJCQkJXG4iXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgICJMQUJFTF9JTlRfU0tJUF9SRVNUT1JFX0NPTlRFWFRfJVtMSU5FXToJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIFJlc3RvcmUgdWxDcml0aWNhbE5lc3RpbmcgdmFyaWFibGUgKi8JCQkJCQkJCQkJCQkJCVwNCisgICAgImxkLncgICAgcjAsIHNwKysJCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgIm1vdiAgICAgcjgsIExPKCVbdWxDcml0aWNhbE5lc3RpbmddKQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAib3JoICAgICByOCwgSEkoJVt1bENyaXRpY2FsTmVzdGluZ10pCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJzdC53ICAgIHI4WzBdLCByMAkJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgLyogUmVzdG9yZSBSMC4uUjcgKi8JCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAibGRtICAgICBzcCsrLCByMC1yNwkJCQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBOb3csIHRoZSBzdGFjayBzaG91bGQgYmUgUjguLlIxMiwgTFIsIFBDIGFuZCBTUiAqLwkJCQkJCQkJCQkJXA0KKyAgICAicmV0ZSIJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgOgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgOiBbdWxDcml0aWNhbE5lc3RpbmddICJpIiAoJnVsQ3JpdGljYWxOZXN0aW5nKSwJCQkJCQkJCQkJCQkJXA0KKyAgICAgIFtweEN1cnJlbnRUQ0JdICJpIiAoJnB4Q3VycmVudFRDQiksCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAgIFtMSU5FXSAiaSIgKF9fTElORV9fKQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICApOwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCit9DQogDQotICAgICNlbmRpZiAvKiBpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAwICovDQorI2VuZGlmDQogDQogDQogLyoNCkBAIC0zODMsMjg3ICszODEsMjg3IEBACiAgKiBOT1RFOiB0YXNrWUlFTEQoKSg9PSBTQ0FMTCkgTVVTVCBOT1QgYmUgY2FsbGVkIGluIGEgbW9kZSA+IHN1cGVydmlzb3IgbW9kZS4NCiAgKg0KICAqLw0KLSAgICAjZGVmaW5lIHBvcnRTQVZFX0NPTlRFWFRfU0NBTEwoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGV4dGVybiB2b2xhdGlsZSB1aW50MzJfdCB1bENyaXRpY2FsTmVzdGluZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgZXh0ZXJuIHZvbGF0aWxlIHZvaWQgKiB2b2xhdGlsZSBweEN1cnJlbnRUQ0I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIFdhcm5pbmc6IHRoZSBzdGFjayBsYXlvdXQgYWZ0ZXIgU0NBTEwgZG9lc24ndCBtYXRjaCB0aGUgb25lIGFmdGVyIGFuIGludGVycnVwdC4gKi8gXA0KLSAgICAgICAgLyogSWYgU1JbTTI6TTBdID09IDAwMSAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAvKiAgICBQQyBhbmQgU1IgYXJlIG9uIHRoZSBzdGFjay4gICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIEVsc2UgKG90aGVyIG1vZGVzKSAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgLyogICAgTm90aGluZyBvbiB0aGUgc3RhY2suICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIFdBUk5JTkcgTk9URTogdGhlIGVsc2UgY2FzZSBjYW5ub3QgaGFwcGVuIGFzIGl0IGlzIHN0cmljdGx5IGZvcmJpZGRlbiB0byBjYWxsICovICAgXA0KLSAgICAgICAgLyogdlRhc2tEZWxheSgpIGFuZCB2VGFza0RlbGF5VW50aWwoKSBPUyBmdW5jdGlvbnMgKHRoYXQgcmVzdWx0IGluIGEgdGFza1lpZWxkKCkpICovICBcDQotICAgICAgICAvKiBpbiBhbiBpbnRlcnJ1cHR8ZXhjZXB0aW9uIGhhbmRsZXIuICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogaW4gb3JkZXIgdG8gc2F2ZSBSMC1SNyAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAic3ViICAgICBzcCwgNio0CQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgLyogU2F2ZSBSMC4uUjcgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAic3RtICAgICAtLXNwLCByMC1yNwkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBpbiBvcmRlciB0byBzYXZlIFI4LVIxMiBhbmQgTFIgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIGRvIG5vdCB1c2UgU1AgaWYgaW50ZXJydXB0cyBvY2N1cnMsIFNQIG11c3QgYmUgbGVmdCBhdCBib3R0b20gb2Ygc3RhY2sgKi8gICAgICBcDQotICAgICAgICAgICAgInN1YiAgICAgcjcsIHNwLC0xNio0CQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAvKiBDb3B5IFBDIGFuZCBTUiBpbiBvdGhlciBwbGFjZXMgaW4gdGhlIHN0YWNrLiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICJsZC53ICAgIHIwLCByN1stMio0XQkJCQkJCQkJCQkJCQkJCQkJXG5cdCIvKiBSZWFkIFNSICovXA0KLSAgICAgICAgICAgICJzdC53ICAgIHI3Wy04KjRdLCByMAkJCQkJCQkJCQkJCQkJCQkJXG5cdCIvKiBDb3B5IFNSICovXA0KLSAgICAgICAgICAgICJsZC53ICAgIHIwLCByN1stMSo0XQkJCQkJCQkJCQkJCQkJCQkJXG5cdCIvKiBSZWFkIFBDICovXA0KLSAgICAgICAgICAgICJzdC53ICAgIHI3Wy03KjRdLCByMAkJCQkJCQkJCQkJCQkJCQkJXG5cdCIvKiBDb3B5IFBDICovXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogU2F2ZSBSOC4uUjEyIGFuZCBMUiBvbiB0aGUgc3RhY2suICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAic3RtICAgICAtLXI3LCByOC1yMTIsIGxyCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogQXJyaXZpbmcgaGVyZSB3ZSBoYXZlIHRoZSBmb2xsb3dpbmcgc3RhY2sgb3JnYW5pemF0aW9uczogKi8gICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBSOC4uUjEyLCBMUiwgUEMsIFNSLCBSMC4uUjcuICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogTm93IHdlIGNhbiBmaW5hbGl6ZSB0aGUgc2F2ZS4gKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIFNhdmUgdWxDcml0aWNhbE5lc3RpbmcgdmFyaWFibGUgIC0gUjAgaXMgb3ZlcndyaXR0ZW4gKi8gICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgIm1vdiAgICAgcjgsIExPKCVbdWxDcml0aWNhbE5lc3RpbmddKQkJCQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAib3JoICAgICByOCwgSEkoJVt1bENyaXRpY2FsTmVzdGluZ10pCQkJCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICJsZC53ICAgIHIwLCByOFswXQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICJzdC53ICAgIC0tc3AsIHIwIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICA6WyB1bENyaXRpY2FsTmVzdGluZyBdICJpIiAoICZ1bENyaXRpY2FsTmVzdGluZyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIERpc2FibGUgdGhlIGl0cyB3aGljaCBtYXkgY2F1c2UgYSBjb250ZXh0IHN3aXRjaCAoaS5lLiBjYXVzZSBhIGNoYW5nZSBvZiAqLyAgICAgICAgXA0KLSAgICAgICAgLyogcHhDdXJyZW50VENCKS4gKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAvKiBCYXNpY2FsbHksIGFsbCBhY2Nlc3NlcyB0byB0aGUgcHhDdXJyZW50VENCIHN0cnVjdHVyZSBzaG91bGQgYmUgcHV0IGluIGEgKi8gICAgICAgIFwNCi0gICAgICAgIC8qIGNyaXRpY2FsIHNlY3Rpb24gYmVjYXVzZSBpdCBpcyBhIGdsb2JhbCBzdHJ1Y3R1cmUuICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgcG9ydEVOVEVSX0NSSVRJQ0FMKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIFN0b3JlIFNQIGluIHRoZSBmaXJzdCBtZW1iZXIgb2YgdGhlIHN0cnVjdHVyZSBwb2ludGVkIHRvIGJ5IHB4Q3VycmVudFRDQiAqLyAgICAgICAgXA0KLSAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgIm1vdiAgICAgcjgsIExPKCVbcHhDdXJyZW50VENCXSkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICJvcmggICAgIHI4LCBISSglW3B4Q3VycmVudFRDQl0pCQkJCQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAibGQudyAgICByMCwgcjhbMF0JCQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAic3QudyAgICByMFswXSwgc3AiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgOlsgcHhDdXJyZW50VENCIF0gImkiICggJnB4Q3VycmVudFRDQiApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB9DQorI2RlZmluZSBwb3J0U0FWRV9DT05URVhUX1NDQUxMKCkJCQkJCQkJCQkJCQkJCQlcDQorewkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgZXh0ZXJuIHZvbGF0aWxlIHVpbnQzMl90IHVsQ3JpdGljYWxOZXN0aW5nOwkJCQkJCQkJCQlcDQorICBleHRlcm4gdm9sYXRpbGUgdm9pZCAqdm9sYXRpbGUgcHhDdXJyZW50VENCOwkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIC8qIFdhcm5pbmc6IHRoZSBzdGFjayBsYXlvdXQgYWZ0ZXIgU0NBTEwgZG9lc24ndCBtYXRjaCB0aGUgb25lIGFmdGVyIGFuIGludGVycnVwdC4gKi8JCVwNCisgIC8qIElmIFNSW00yOk0wXSA9PSAwMDEgKi8JCQkJCQkJCQkJCQkJCQkJCVwNCisgIC8qICAgIFBDIGFuZCBTUiBhcmUgb24gdGhlIHN0YWNrLiAgKi8JCQkJCQkJCQkJCQkJCVwNCisgIC8qIEVsc2UgKG90aGVyIG1vZGVzKSAqLwkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgLyogICAgTm90aGluZyBvbiB0aGUgc3RhY2suICovCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgLyogV0FSTklORyBOT1RFOiB0aGUgZWxzZSBjYXNlIGNhbm5vdCBoYXBwZW4gYXMgaXQgaXMgc3RyaWN0bHkgZm9yYmlkZGVuIHRvIGNhbGwgKi8JCVwNCisgIC8qIHZUYXNrRGVsYXkoKSBhbmQgdlRhc2tEZWxheVVudGlsKCkgT1MgZnVuY3Rpb25zICh0aGF0IHJlc3VsdCBpbiBhIHRhc2tZaWVsZCgpKSAqLwkJXA0KKyAgLyogaW4gYW4gaW50ZXJydXB0fGV4Y2VwdGlvbiBoYW5kbGVyLiAqLwkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIGluIG9yZGVyIHRvIHNhdmUgUjAtUjcgKi8JCQkJCQkJCQkJCQkJCQlcDQorICAgICJzdWIgICAgIHNwLCA2KjQJCQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCisgICAgLyogU2F2ZSBSMC4uUjcgKi8JCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgICJzdG0gICAgIC0tc3AsIHIwLXI3CQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgLyogaW4gb3JkZXIgdG8gc2F2ZSBSOC1SMTIgYW5kIExSICovCQkJCQkJCQkJCQkJCVwNCisgICAgLyogZG8gbm90IHVzZSBTUCBpZiBpbnRlcnJ1cHRzIG9jY3VycywgU1AgbXVzdCBiZSBsZWZ0IGF0IGJvdHRvbSBvZiBzdGFjayAqLwkJCVwNCisgICAgInN1YiAgICAgcjcsIHNwLC0xNio0CQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCisgICAgLyogQ29weSBQQyBhbmQgU1IgaW4gb3RoZXIgcGxhY2VzIGluIHRoZSBzdGFjay4gKi8JCQkJCQkJCQkJXA0KKyAgICAibGQudyAgICByMCwgcjdbLTIqNF0JCQkJCQkJCQkJCQkJCQkJCVxuXHQiIC8qIFJlYWQgU1IgKi9cDQorICAgICJzdC53ICAgIHI3Wy04KjRdLCByMAkJCQkJCQkJCQkJCQkJCQkJXG5cdCIgLyogQ29weSBTUiAqL1wNCisgICAgImxkLncgICAgcjAsIHI3Wy0xKjRdCQkJCQkJCQkJCQkJCQkJCQlcblx0IiAvKiBSZWFkIFBDICovXA0KKyAgICAic3QudyAgICByN1stNyo0XSwgcjAJCQkJCQkJCQkJCQkJCQkJCVxuXHQiIC8qIENvcHkgUEMgKi9cDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIFNhdmUgUjguLlIxMiBhbmQgTFIgb24gdGhlIHN0YWNrLiAqLwkJCQkJCQkJCQkJCQlcDQorICAgICJzdG0gICAgIC0tcjcsIHI4LXIxMiwgbHIJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIEFycml2aW5nIGhlcmUgd2UgaGF2ZSB0aGUgZm9sbG93aW5nIHN0YWNrIG9yZ2FuaXphdGlvbnM6ICovCQkJCQkJCVwNCisgICAgLyogUjguLlIxMiwgTFIsIFBDLCBTUiwgUjAuLlI3LiAqLwkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBOb3cgd2UgY2FuIGZpbmFsaXplIHRoZSBzYXZlLiAqLwkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBTYXZlIHVsQ3JpdGljYWxOZXN0aW5nIHZhcmlhYmxlICAtIFIwIGlzIG92ZXJ3cml0dGVuICovCQkJCQkJCQlcDQorICAgICJtb3YgICAgIHI4LCBMTyglW3VsQ3JpdGljYWxOZXN0aW5nXSkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJvcmggICAgIHI4LCBISSglW3VsQ3JpdGljYWxOZXN0aW5nXSkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJsZC53ICAgIHIwLCByOFswXQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAic3QudyAgICAtLXNwLCByMCIJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIDoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICA6IFt1bENyaXRpY2FsTmVzdGluZ10gImkiICgmdWxDcml0aWNhbE5lc3RpbmcpCQkJCQkJCQkJCQlcDQorICApOwkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAvKiBEaXNhYmxlIHRoZSBpdHMgd2hpY2ggbWF5IGNhdXNlIGEgY29udGV4dCBzd2l0Y2ggKGkuZS4gY2F1c2UgYSBjaGFuZ2Ugb2YgKi8JCQlcDQorICAvKiBweEN1cnJlbnRUQ0IpLiAqLwkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIC8qIEJhc2ljYWxseSwgYWxsIGFjY2Vzc2VzIHRvIHRoZSBweEN1cnJlbnRUQ0Igc3RydWN0dXJlIHNob3VsZCBiZSBwdXQgaW4gYSAqLwkJCVwNCisgIC8qIGNyaXRpY2FsIHNlY3Rpb24gYmVjYXVzZSBpdCBpcyBhIGdsb2JhbCBzdHJ1Y3R1cmUuICovCQkJCQkJCQkJXA0KKyAgcG9ydEVOVEVSX0NSSVRJQ0FMKCk7CQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgLyogU3RvcmUgU1AgaW4gdGhlIGZpcnN0IG1lbWJlciBvZiB0aGUgc3RydWN0dXJlIHBvaW50ZWQgdG8gYnkgcHhDdXJyZW50VENCICovCQkJXA0KKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAibW92ICAgICByOCwgTE8oJVtweEN1cnJlbnRUQ0JdKQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJvcmggICAgIHI4LCBISSglW3B4Q3VycmVudFRDQl0pCQkJCQkJCQkJCQkJCQlcblx0IlwNCisgICAgImxkLncgICAgcjAsIHI4WzBdCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJzdC53ICAgIHIwWzBdLCBzcCIJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIDoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICA6IFtweEN1cnJlbnRUQ0JdICJpIiAoJnB4Q3VycmVudFRDQikJCQkJCQkJCQkJCQkJXA0KKyAgKTsJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KK30NCiANCiAvKg0KICAqIHBvcnRSRVNUT1JFX0NPTlRFWFQoKSBmb3IgU3VwZXJ2aXNvckNBTEwgZXhjZXB0aW9uLg0KICAqLw0KLSAgICAjZGVmaW5lIHBvcnRSRVNUT1JFX0NPTlRFWFRfU0NBTEwoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgZXh0ZXJuIHZvbGF0aWxlIHVpbnQzMl90IHVsQ3JpdGljYWxOZXN0aW5nOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgZXh0ZXJuIHZvbGF0aWxlIHZvaWQgKiB2b2xhdGlsZSBweEN1cnJlbnRUQ0I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgLyogUmVzdG9yZSBhbGwgcmVnaXN0ZXJzICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgLyogU2V0IFNQIHRvIHBvaW50IHRvIG5ldyBzdGFjayAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICJtb3YgICAgIHI4LCBMTyglW3B4Q3VycmVudFRDQl0pCQkJCQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAib3JoICAgICByOCwgSEkoJVtweEN1cnJlbnRUQ0JdKQkJCQkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgImxkLncgICAgcjAsIHI4WzBdCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgImxkLncgICAgc3AsIHIwWzBdIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgOlsgcHhDdXJyZW50VENCIF0gImkiICggJnB4Q3VycmVudFRDQiApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAvKiBMZWF2ZSBweEN1cnJlbnRUQ0IgdmFyaWFibGUgYWNjZXNzIGNyaXRpY2FsIHNlY3Rpb24gKi8gICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBwb3J0RVhJVF9DUklUSUNBTCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogUmVzdG9yZSB1bENyaXRpY2FsTmVzdGluZyB2YXJpYWJsZSAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgImxkLncgICAgcjAsIHNwKysJCQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAibW92ICAgICByOCwgTE8oJVt1bENyaXRpY2FsTmVzdGluZ10pCQkJCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICJvcmggICAgIHI4LCBISSglW3VsQ3JpdGljYWxOZXN0aW5nXSkJCQkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgInN0LncgICAgcjhbMF0sIHIwCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogc2tpcCBQQyBhbmQgU1IgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogZG8gbm90IHVzZSBTUCBpZiBpbnRlcnJ1cHRzIG9jY3VycywgU1AgbXVzdCBiZSBsZWZ0IGF0IGJvdHRvbSBvZiBzdGFjayAqLyBcDQotICAgICAgICAgICAgInN1YiAgICAgcjcsIHNwLCAtMTAqNAkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgLyogUmVzdG9yZSByOC1yMTIgYW5kIExSICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgImxkbSAgICAgcjcrKywgcjgtcjEyLCBscgkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBSRVRTIHdpbGwgdGFrZSBjYXJlIG9mIHRoZSBleHRyYSBQQyBhbmQgU1IgcmVzdG9yZS4gKi8gICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBTbywgd2UgaGF2ZSB0byBwcmVwYXJlIHRoZSBzdGFjayBmb3IgdGhpcy4gKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAibGQudyAgICByMCwgcjdbLTgqNF0JCQkJCQkJCQkJCQkJCQkJCVxuXHQiLyogUmVhZCBTUiAqL1wNCi0gICAgICAgICAgICAic3QudyAgICByN1stMio0XSwgcjAJCQkJCQkJCQkJCQkJCQkJCVxuXHQiLyogQ29weSBTUiAqL1wNCi0gICAgICAgICAgICAibGQudyAgICByMCwgcjdbLTcqNF0JCQkJCQkJCQkJCQkJCQkJCVxuXHQiLyogUmVhZCBQQyAqL1wNCi0gICAgICAgICAgICAic3QudyAgICByN1stMSo0XSwgcjAJCQkJCQkJCQkJCQkJCQkJCVxuXHQiLyogQ29weSBQQyAqL1wNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBSZXN0b3JlIFIwLi5SNyAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAibGRtICAgICBzcCsrLCByMC1yNwkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgInN1YiAgICAgc3AsIC02KjQJCQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAicmV0cyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICA6WyB1bENyaXRpY2FsTmVzdGluZyBdICJpIiAoICZ1bENyaXRpY2FsTmVzdGluZyApICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgfQ0KKyNkZWZpbmUgcG9ydFJFU1RPUkVfQ09OVEVYVF9TQ0FMTCgpCQkJCQkJCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIGV4dGVybiB2b2xhdGlsZSB1aW50MzJfdCB1bENyaXRpY2FsTmVzdGluZzsJCQkJCQkJCQkJXA0KKyAgZXh0ZXJuIHZvbGF0aWxlIHZvaWQgKnZvbGF0aWxlIHB4Q3VycmVudFRDQjsJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAvKiBSZXN0b3JlIGFsbCByZWdpc3RlcnMgKi8JCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgLyogU2V0IFNQIHRvIHBvaW50IHRvIG5ldyBzdGFjayAqLwkJCQkJCQkJCQkJCQkJXA0KKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAibW92ICAgICByOCwgTE8oJVtweEN1cnJlbnRUQ0JdKQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJvcmggICAgIHI4LCBISSglW3B4Q3VycmVudFRDQl0pCQkJCQkJCQkJCQkJCQlcblx0IlwNCisgICAgImxkLncgICAgcjAsIHI4WzBdCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJsZC53ICAgIHNwLCByMFswXSIJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIDoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICA6IFtweEN1cnJlbnRUQ0JdICJpIiAoJnB4Q3VycmVudFRDQikJCQkJCQkJCQkJCQkJXA0KKyAgKTsJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgLyogTGVhdmUgcHhDdXJyZW50VENCIHZhcmlhYmxlIGFjY2VzcyBjcml0aWNhbCBzZWN0aW9uICovCQkJCQkJCQkJXA0KKyAgcG9ydEVYSVRfQ1JJVElDQUwoKTsJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIFJlc3RvcmUgdWxDcml0aWNhbE5lc3RpbmcgdmFyaWFibGUgKi8JCQkJCQkJCQkJCQlcDQorICAgICJsZC53ICAgIHIwLCBzcCsrCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJtb3YgICAgIHI4LCBMTyglW3VsQ3JpdGljYWxOZXN0aW5nXSkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJvcmggICAgIHI4LCBISSglW3VsQ3JpdGljYWxOZXN0aW5nXSkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJzdC53ICAgIHI4WzBdLCByMAkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBza2lwIFBDIGFuZCBTUiAqLwkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBkbyBub3QgdXNlIFNQIGlmIGludGVycnVwdHMgb2NjdXJzLCBTUCBtdXN0IGJlIGxlZnQgYXQgYm90dG9tIG9mIHN0YWNrICovCQkJXA0KKyAgICAic3ViICAgICByNywgc3AsIC0xMCo0CQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCisgICAgLyogUmVzdG9yZSByOC1yMTIgYW5kIExSICovCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgImxkbSAgICAgcjcrKywgcjgtcjEyLCBscgkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgLyogUkVUUyB3aWxsIHRha2UgY2FyZSBvZiB0aGUgZXh0cmEgUEMgYW5kIFNSIHJlc3RvcmUuICovCQkJCQkJCQlcDQorICAgIC8qIFNvLCB3ZSBoYXZlIHRvIHByZXBhcmUgdGhlIHN0YWNrIGZvciB0aGlzLiAqLwkJCQkJCQkJCQlcDQorICAgICJsZC53ICAgIHIwLCByN1stOCo0XQkJCQkJCQkJCQkJCQkJCQkJXG5cdCIgLyogUmVhZCBTUiAqL1wNCisgICAgInN0LncgICAgcjdbLTIqNF0sIHIwCQkJCQkJCQkJCQkJCQkJCQlcblx0IiAvKiBDb3B5IFNSICovXA0KKyAgICAibGQudyAgICByMCwgcjdbLTcqNF0JCQkJCQkJCQkJCQkJCQkJCVxuXHQiIC8qIFJlYWQgUEMgKi9cDQorICAgICJzdC53ICAgIHI3Wy0xKjRdLCByMAkJCQkJCQkJCQkJCQkJCQkJXG5cdCIgLyogQ29weSBQQyAqL1wNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgLyogUmVzdG9yZSBSMC4uUjcgKi8JCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgImxkbSAgICAgc3ArKywgcjAtcjcJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAic3ViICAgICBzcCwgLTYqNAkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAicmV0cyIJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIDoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICA6IFt1bENyaXRpY2FsTmVzdGluZ10gImkiICgmdWxDcml0aWNhbE5lc3RpbmcpCQkJCQkJCQkJCQlcDQorICApOwkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorfQ0KIA0KIA0KIC8qDQogICogVGhlIElTUiB1c2VkIGRlcGVuZHMgb24gd2hldGhlciB0aGUgY29vcGVyYXRpdmUgb3INCiAgKiB0aGUgcHJlZW1wdGl2ZSBzY2hlZHVsZXIgaXMgYmVpbmcgdXNlZC4NCiAgKi8NCi0gICAgI2lmIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDANCisjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMA0KIA0KIC8qDQogICogSVNSIGVudHJ5IGFuZCBleGl0IG1hY3Jvcy4gIFRoZXNlIGFyZSBvbmx5IHJlcXVpcmVkIGlmIGEgdGFzayBzd2l0Y2gNCiAgKiBpcyByZXF1aXJlZCBmcm9tIHRoZSBJU1IuDQogICovDQotICAgICAgICAjZGVmaW5lIHBvcnRFTlRFUl9TV0lUQ0hJTkdfSVNSKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIFNhdmUgUjAuLlI3ICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICJzdG0gICAgIC0tc3AsIHIwLXI3IiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIFdpdGggdGhlIGNvb3BlcmF0aXZlIHNjaGVkdWxlciwgYXMgdGhlcmUgaXMgbm8gY29udGV4dCBzd2l0Y2ggYnkgaW50ZXJydXB0LCAqLyBcDQotICAgICAgICAvKiB0aGVyZSBpcyBhbHNvIG5vIGNvbnRleHQgc2F2ZS4gKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB9DQorI2RlZmluZSBwb3J0RU5URVJfU1dJVENISU5HX0lTUigpCQkJCQkJCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIC8qIFNhdmUgUjAuLlI3ICovCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgic3RtICAgICAtLXNwLCByMC1yNyIpOwkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIC8qIFdpdGggdGhlIGNvb3BlcmF0aXZlIHNjaGVkdWxlciwgYXMgdGhlcmUgaXMgbm8gY29udGV4dCBzd2l0Y2ggYnkgaW50ZXJydXB0LCAqLwkJCVwNCisgIC8qIHRoZXJlIGlzIGFsc28gbm8gY29udGV4dCBzYXZlLiAqLwkJCQkJCQkJCQkJCQkJXA0KK30NCiANCiAvKg0KICAqIElucHV0IHBhcmFtZXRlcjogaW4gUjEyLCBib29sZWFuLiBQZXJmb3JtIGEgdlRhc2tTd2l0Y2hDb250ZXh0KCkgaWYgMQ0KICAqLw0KLSAgICAgICAgI2RlZmluZSBwb3J0RVhJVF9TV0lUQ0hJTkdfSVNSKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIFJlc3RvcmUgUjAuLlI3ICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgImxkbSAgICAgc3ArKywgcjAtcjcJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogV2l0aCB0aGUgY29vcGVyYXRpdmUgc2NoZWR1bGVyLCBhcyB0aGVyZSBpcyBubyBjb250ZXh0IHN3aXRjaCBieSBpbnRlcnJ1cHQsICovIFwNCi0gICAgICAgICAgICAvKiB0aGVyZSBpcyBhbHNvIG5vIGNvbnRleHQgcmVzdG9yZS4gKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICJyZXRlIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgfQ0KKyNkZWZpbmUgcG9ydEVYSVRfU1dJVENISU5HX0lTUigpCQkJCQkJCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgLyogUmVzdG9yZSBSMC4uUjcgKi8JCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgImxkbSAgICAgc3ArKywgcjAtcjcJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBXaXRoIHRoZSBjb29wZXJhdGl2ZSBzY2hlZHVsZXIsIGFzIHRoZXJlIGlzIG5vIGNvbnRleHQgc3dpdGNoIGJ5IGludGVycnVwdCwgKi8JCVwNCisgICAgLyogdGhlcmUgaXMgYWxzbyBubyBjb250ZXh0IHJlc3RvcmUuICovCQkJCQkJCQkJCQkJCVwNCisgICAgInJldGUiCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgKTsJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KK30NCiANCi0gICAgI2Vsc2UgLyogaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMCAqLw0KKyNlbHNlDQogDQogLyoNCiAgKiBJU1IgZW50cnkgYW5kIGV4aXQgbWFjcm9zLiAgVGhlc2UgYXJlIG9ubHkgcmVxdWlyZWQgaWYgYSB0YXNrIHN3aXRjaA0KICAqIGlzIHJlcXVpcmVkIGZyb20gdGhlIElTUi4NCiAgKi8NCi0gICAgICAgICNkZWZpbmUgcG9ydEVOVEVSX1NXSVRDSElOR19JU1IoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGV4dGVybiB2b2xhdGlsZSB1aW50MzJfdCB1bENyaXRpY2FsTmVzdGluZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGV4dGVybiB2b2xhdGlsZSB2b2lkICogdm9sYXRpbGUgcHhDdXJyZW50VENCOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIFdoZW4gd2UgY29tZSBoZXJlICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIFJlZ2lzdGVycyBSOC4uUjEyLCBMUiwgUEMgYW5kIFNSIGhhZCBhbHJlYWR5IGJlZW4gcHVzaGVkIHRvIHN5c3RlbSBzdGFjayAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBTYXZlIFIwLi5SNyAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAic3RtICAgICAtLXNwLCByMC1yNwkJCQkJCQkJCQkJCQkJCQkJXG5cdCIgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBTYXZlIHVsQ3JpdGljYWxOZXN0aW5nIHZhcmlhYmxlICAtIFIwIGlzIG92ZXJ3cml0dGVuICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAibW92ICAgICByOCwgTE8oJVt1bENyaXRpY2FsTmVzdGluZ10pCQkJCQkJCQkJCQkJCVxuXHQiICAgICAgICBcDQotICAgICAgICAgICAgIm9yaCAgICAgcjgsIEhJKCVbdWxDcml0aWNhbE5lc3RpbmddKQkJCQkJCQkJCQkJCQlcblx0IiAgICAgICAgXA0KLSAgICAgICAgICAgICJsZC53ICAgIHIwLCByOFswXQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiICAgICAgICBcDQotICAgICAgICAgICAgInN0LncgICAgLS1zcCwgcjAJCQkJCQkJCQkJCQkJCQkJCQlcblx0IiAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIENoZWNrIGlmIElOVDAgb3IgaGlnaGVyIHdlcmUgYmVpbmcgaGFuZGxlZCAoY2FzZSB3aGVyZSB0aGUgT1MgdGljayBpbnRlcnJ1cHRlZCBhbm90aGVyICovICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIGludGVycnVwdCBoYW5kbGVyICh3aGljaCB3YXMgb2YgYSBoaWdoZXIgcHJpb3JpdHkgbGV2ZWwgYnV0IGRlY2lkZWQgdG8gbG93ZXIgaXRzIHByaW9yaXR5ICovICAgICAgXA0KLSAgICAgICAgICAgIC8qIGxldmVsIGFuZCBhbGxvdyBvdGhlciBsb3dlciBpbnRlcnJ1cHQgbGV2ZWwgdG8gb2NjdXIpLiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIEluIHRoaXMgY2FzZSB3ZSBkb24ndCB3YW50IHRvIGRvIGEgdGFzayBzd2l0Y2ggYmVjYXVzZSB3ZSBkb24ndCBrbm93IHdoYXQgdGhlIHN0YWNrICovICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIGN1cnJlbnRseSBsb29rcyBsaWtlICh3ZSBkb24ndCBrbm93IHdoYXQgdGhlIGludGVycnVwdGVkIGludGVycnVwdCBoYW5kbGVyIHdhcyBkb2luZykuICovICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIFNhdmluZyBTUCBpbiBweEN1cnJlbnRUQ0IgYW5kIHRoZW4gbGF0ZXIgcmVzdG9yaW5nIGl0ICh0aGlua2luZyByZXN0b3JpbmcgdGhlIHRhc2spICovICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIHdpbGwganVzdCBiZSByZXN0b3JpbmcgdGhlIGludGVycnVwdCBoYW5kbGVyLCBubyB3YXkhISEgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIFNvLCBzaW5jZSB3ZSB3b24ndCBkbyBhIHZUYXNrU3dpdGNoQ29udGV4dCgpLCBpdCdzIG9mIG5vIHVzZSB0byBzYXZlIFNQLiAqLyAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICJsZC53ICAgIHIwLCBzcFs5KjRdCQkJCQkJCQkJCQkJCQkJCQlcblx0Ii8qIFJlYWQgU1IgaW4gc3RhY2sgKi9cDQotICAgICAgICAgICAgImJmZXh0dSAgcjAsIHIwLCAyMiwgMwkJCQkJCQkJCQkJCQkJCQkJXG5cdCIvKiBFeHRyYWN0IHRoZSBtb2RlIGJpdHMgdG8gUjAuICovXA0KLSAgICAgICAgICAgICJjcC53ICAgIHIwLCAxCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiLyogQ29tcGFyZSB0aGUgbW9kZSBiaXRzIHdpdGggc3VwZXJ2aXNvciBtb2RlKGInMDAxKSAqL1wNCi0gICAgICAgICAgICAiYnJoaSAgICBMQUJFTF9JU1JfU0tJUF9TQVZFX0NPTlRFWFRfJVtMSU5FXQkJCQkJCQkJCQkJXG5cdCIgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBTdG9yZSBTUCBpbiB0aGUgZmlyc3QgbWVtYmVyIG9mIHRoZSBzdHJ1Y3R1cmUgcG9pbnRlZCB0byBieSBweEN1cnJlbnRUQ0IgKi8gICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAibW92ICAgICByOCwgTE8oJVtweEN1cnJlbnRUQ0JdKQkJCQkJCQkJCQkJCQkJXG5cdCIgICAgICAgIFwNCi0gICAgICAgICAgICAib3JoICAgICByOCwgSEkoJVtweEN1cnJlbnRUQ0JdKQkJCQkJCQkJCQkJCQkJXG5cdCIgICAgICAgIFwNCi0gICAgICAgICAgICAibGQudyAgICByMCwgcjhbMF0JCQkJCQkJCQkJCQkJCQkJCQlcblx0IiAgICAgICAgXA0KLSAgICAgICAgICAgICJzdC53ICAgIHIwWzBdLCBzcAkJCQkJCQkJCQkJCQkJCQkJCVxuIiAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgIkxBQkVMX0lTUl9TS0lQX1NBVkVfQ09OVEVYVF8lW0xJTkVdOiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgOlsgdWxDcml0aWNhbE5lc3RpbmcgXSAiaSIgKCAmdWxDcml0aWNhbE5lc3RpbmcgKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgWyBweEN1cnJlbnRUQ0IgXSAiaSIgKCAmcHhDdXJyZW50VENCICksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgWyBMSU5FIF0gImkiICggX19MSU5FX18gKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIH0NCisjZGVmaW5lIHBvcnRFTlRFUl9TV0lUQ0hJTkdfSVNSKCkJCQkJCQkJCQkJCQkJCQlcDQorewkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgZXh0ZXJuIHZvbGF0aWxlIHVpbnQzMl90IHVsQ3JpdGljYWxOZXN0aW5nOwkJCQkJCQkJCQlcDQorICBleHRlcm4gdm9sYXRpbGUgdm9pZCAqdm9sYXRpbGUgcHhDdXJyZW50VENCOwkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIC8qIFdoZW4gd2UgY29tZSBoZXJlICovCQkJCQkJCQkJCQkJCQkJCQlcDQorICAvKiBSZWdpc3RlcnMgUjguLlIxMiwgTFIsIFBDIGFuZCBTUiBoYWQgYWxyZWFkeSBiZWVuIHB1c2hlZCB0byBzeXN0ZW0gc3RhY2sgKi8JCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIFNhdmUgUjAuLlI3ICovCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAic3RtICAgICAtLXNwLCByMC1yNwkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIFNhdmUgdWxDcml0aWNhbE5lc3RpbmcgdmFyaWFibGUgIC0gUjAgaXMgb3ZlcndyaXR0ZW4gKi8JCQkJCQkJCVwNCisgICAgIm1vdiAgICAgcjgsIExPKCVbdWxDcml0aWNhbE5lc3RpbmddKQkJCQkJCQkJCQkJCQlcblx0IlwNCisgICAgIm9yaCAgICAgcjgsIEhJKCVbdWxDcml0aWNhbE5lc3RpbmddKQkJCQkJCQkJCQkJCQlcblx0IlwNCisgICAgImxkLncgICAgcjAsIHI4WzBdCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJzdC53ICAgIC0tc3AsIHIwCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgLyogQ2hlY2sgaWYgSU5UMCBvciBoaWdoZXIgd2VyZSBiZWluZyBoYW5kbGVkIChjYXNlIHdoZXJlIHRoZSBPUyB0aWNrIGludGVycnVwdGVkIGFub3RoZXIgKi8JXA0KKyAgICAvKiBpbnRlcnJ1cHQgaGFuZGxlciAod2hpY2ggd2FzIG9mIGEgaGlnaGVyIHByaW9yaXR5IGxldmVsIGJ1dCBkZWNpZGVkIHRvIGxvd2VyIGl0cyBwcmlvcml0eSAqLwlcDQorICAgIC8qIGxldmVsIGFuZCBhbGxvdyBvdGhlciBsb3dlciBpbnRlcnJ1cHQgbGV2ZWwgdG8gb2NjdXIpLiAqLwkJCQkJCQkJCVwNCisgICAgLyogSW4gdGhpcyBjYXNlIHdlIGRvbid0IHdhbnQgdG8gZG8gYSB0YXNrIHN3aXRjaCBiZWNhdXNlIHdlIGRvbid0IGtub3cgd2hhdCB0aGUgc3RhY2sgKi8JCVwNCisgICAgLyogY3VycmVudGx5IGxvb2tzIGxpa2UgKHdlIGRvbid0IGtub3cgd2hhdCB0aGUgaW50ZXJydXB0ZWQgaW50ZXJydXB0IGhhbmRsZXIgd2FzIGRvaW5nKS4gKi8JXA0KKyAgICAvKiBTYXZpbmcgU1AgaW4gcHhDdXJyZW50VENCIGFuZCB0aGVuIGxhdGVyIHJlc3RvcmluZyBpdCAodGhpbmtpbmcgcmVzdG9yaW5nIHRoZSB0YXNrKSAqLwkJXA0KKyAgICAvKiB3aWxsIGp1c3QgYmUgcmVzdG9yaW5nIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciwgbm8gd2F5ISEhICovCQkJCQkJCQkJXA0KKyAgICAvKiBTbywgc2luY2Ugd2Ugd29uJ3QgZG8gYSB2VGFza1N3aXRjaENvbnRleHQoKSwgaXQncyBvZiBubyB1c2UgdG8gc2F2ZSBTUC4gKi8JCQkJCVwNCisgICAgImxkLncgICAgcjAsIHNwWzkqNF0JCQkJCQkJCQkJCQkJCQkJCVxuXHQiIC8qIFJlYWQgU1IgaW4gc3RhY2sgKi9cDQorICAgICJiZmV4dHUgIHIwLCByMCwgMjIsIDMJCQkJCQkJCQkJCQkJCQkJCVxuXHQiIC8qIEV4dHJhY3QgdGhlIG1vZGUgYml0cyB0byBSMC4gKi9cDQorICAgICJjcC53ICAgIHIwLCAxCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiIC8qIENvbXBhcmUgdGhlIG1vZGUgYml0cyB3aXRoIHN1cGVydmlzb3IgbW9kZShiJzAwMSkgKi9cDQorICAgICJicmhpICAgIExBQkVMX0lTUl9TS0lQX1NBVkVfQ09OVEVYVF8lW0xJTkVdCQkJCQkJCQkJCQlcblx0IlwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgLyogU3RvcmUgU1AgaW4gdGhlIGZpcnN0IG1lbWJlciBvZiB0aGUgc3RydWN0dXJlIHBvaW50ZWQgdG8gYnkgcHhDdXJyZW50VENCICovCQkJXA0KKyAgICAibW92ICAgICByOCwgTE8oJVtweEN1cnJlbnRUQ0JdKQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJvcmggICAgIHI4LCBISSglW3B4Q3VycmVudFRDQl0pCQkJCQkJCQkJCQkJCQlcblx0IlwNCisgICAgImxkLncgICAgcjAsIHI4WzBdCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJzdC53ICAgIHIwWzBdLCBzcAkJCQkJCQkJCQkJCQkJCQkJCVxuIlwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgIkxBQkVMX0lTUl9TS0lQX1NBVkVfQ09OVEVYVF8lW0xJTkVdOiIJCQkJCQkJCQkJCQkJXA0KKyAgICA6CQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgOiBbdWxDcml0aWNhbE5lc3RpbmddICJpIiAoJnVsQ3JpdGljYWxOZXN0aW5nKSwJCQkJCQkJCQkJCVwNCisgICAgICBbcHhDdXJyZW50VENCXSAiaSIgKCZweEN1cnJlbnRUQ0IpLAkJCQkJCQkJCQkJCQlcDQorICAgICAgW0xJTkVdICJpIiAoX19MSU5FX18pCQkJCQkJCQkJCQkJCQkJCQlcDQorICApOwkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorfQ0KIA0KIC8qDQogICogSW5wdXQgcGFyYW1ldGVyOiBpbiBSMTIsIGJvb2xlYW4uIFBlcmZvcm0gYSB2VGFza1N3aXRjaENvbnRleHQoKSBpZiAxDQogICovDQotICAgICAgICAjZGVmaW5lIHBvcnRFWElUX1NXSVRDSElOR19JU1IoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBleHRlcm4gdm9sYXRpbGUgdWludDMyX3QgdWxDcml0aWNhbE5lc3Rpbmc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBleHRlcm4gdm9sYXRpbGUgdm9pZCAqIHZvbGF0aWxlIHB4Q3VycmVudFRDQjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogQ2hlY2sgaWYgSU5UMCBvciBoaWdoZXIgd2VyZSBiZWluZyBoYW5kbGVkIChjYXNlIHdoZXJlIHRoZSBPUyB0aWNrIGludGVycnVwdGVkIGFub3RoZXIgKi8gICAgICAgICBcDQotICAgICAgICAgICAgLyogaW50ZXJydXB0IGhhbmRsZXIgKHdoaWNoIHdhcyBvZiBhIGhpZ2hlciBwcmlvcml0eSBsZXZlbCBidXQgZGVjaWRlZCB0byBsb3dlciBpdHMgcHJpb3JpdHkgKi8gICAgICBcDQotICAgICAgICAgICAgLyogbGV2ZWwgYW5kIGFsbG93IG90aGVyIGxvd2VyIGludGVycnVwdCBsZXZlbCB0byBvY2N1cikuICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogSW4gdGhpcyBjYXNlIGl0J3Mgb2Ygbm8gdXNlIHRvIHN3aXRjaCBjb250ZXh0IGFuZCByZXN0b3JlIGEgbmV3IFNQIGJlY2F1c2Ugd2UgcHVycG9zZWRseSAqLyAgICAgICBcDQotICAgICAgICAgICAgLyogZGlkIG5vdCBwcmV2aW91c2x5IHNhdmUgU1AgaW4gaXRzIFRDQi4gKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgImxkLncgICAgcjAsIHNwWzkqNF0JCQkJCQkJCQkJCQkJCQkJCVxuXHQiLyogUmVhZCBTUiBpbiBzdGFjayAqL1wNCi0gICAgICAgICAgICAiYmZleHR1ICByMCwgcjAsIDIyLCAzCQkJCQkJCQkJCQkJCQkJCQlcblx0Ii8qIEV4dHJhY3QgdGhlIG1vZGUgYml0cyB0byBSMC4gKi9cDQotICAgICAgICAgICAgImNwLncgICAgcjAsIDEJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCIvKiBDb21wYXJlIHRoZSBtb2RlIGJpdHMgd2l0aCBzdXBlcnZpc29yIG1vZGUoYicwMDEpICovXA0KLSAgICAgICAgICAgICJicmhpICAgIExBQkVMX0lTUl9TS0lQX1JFU1RPUkVfQ09OVEVYVF8lW0xJTkVdCQkJCQkJCQkJCQlcblx0IiAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIElmIGEgc3dpdGNoIGlzIHJlcXVpcmVkIHRoZW4gd2UganVzdCBuZWVkIHRvIGNhbGwgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIHZUYXNrU3dpdGNoQ29udGV4dCgpIGFzIHRoZSBjb250ZXh0IGhhcyBhbHJlYWR5IGJlZW4gKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIHNhdmVkLiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICJjcC53ICAgIHIxMiwgMQkJCQkJCQkJCQkJCQkJCQkJCQlcblx0Ii8qIENoZWNrIGlmIFN3aXRjaCBjb250ZXh0IGlzIHJlcXVpcmVkLiAqL1wNCi0gICAgICAgICAgICAiYnJuZSAgICBMQUJFTF9JU1JfUkVTVE9SRV9DT05URVhUXyVbTElORV0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICA6WyBMSU5FIF0gImkiICggX19MSU5FX18gKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIEEgY3JpdGljYWwgc2VjdGlvbiBoYXMgdG8gYmUgdXNlZCBoZXJlIGJlY2F1c2UgdlRhc2tTd2l0Y2hDb250ZXh0IGhhbmRsZXMgRnJlZVJUT1MgbGlua2VkIGxpc3RzLiAqLyAgIFwNCi0gICAgICAgIHBvcnRFTlRFUl9DUklUSUNBTCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHZUYXNrU3dpdGNoQ29udGV4dCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHBvcnRFWElUX0NSSVRJQ0FMKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAiTEFCRUxfSVNSX1JFU1RPUkVfQ09OVEVYVF8lW0xJTkVdOgkJCQkJCQkJCQkJCQkJXG5cdCIgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHdoaWNoIGV2ZXIgdGFzayBpcyBub3cgdGhlIGhpZ2hlc3QgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBwcmlvcml0eSB0aGF0IGlzIHJlYWR5IHRvIHJ1bi4gKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBSZXN0b3JlIGFsbCByZWdpc3RlcnMgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBTZXQgU1AgdG8gcG9pbnQgdG8gbmV3IHN0YWNrICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAibW92ICAgICByOCwgTE8oJVtweEN1cnJlbnRUQ0JdKQkJCQkJCQkJCQkJCQkJXG5cdCIgICAgICAgIFwNCi0gICAgICAgICAgICAib3JoICAgICByOCwgSEkoJVtweEN1cnJlbnRUQ0JdKQkJCQkJCQkJCQkJCQkJXG5cdCIgICAgICAgIFwNCi0gICAgICAgICAgICAibGQudyAgICByMCwgcjhbMF0JCQkJCQkJCQkJCQkJCQkJCQlcblx0IiAgICAgICAgXA0KLSAgICAgICAgICAgICJsZC53ICAgIHNwLCByMFswXQkJCQkJCQkJCQkJCQkJCQkJCVxuIiAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgIkxBQkVMX0lTUl9TS0lQX1JFU1RPUkVfQ09OVEVYVF8lW0xJTkVdOgkJCQkJCQkJCQkJCVxuXHQiICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogUmVzdG9yZSB1bENyaXRpY2FsTmVzdGluZyB2YXJpYWJsZSAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgImxkLncgICAgcjAsIHNwKysJCQkJCQkJCQkJCQkJCQkJCQlcblx0IiAgICAgICAgXA0KLSAgICAgICAgICAgICJtb3YgICAgIHI4LCBMTyglW3VsQ3JpdGljYWxOZXN0aW5nXSkJCQkJCQkJCQkJCQkJXG5cdCIgICAgICAgIFwNCi0gICAgICAgICAgICAib3JoICAgICByOCwgSEkoJVt1bENyaXRpY2FsTmVzdGluZ10pCQkJCQkJCQkJCQkJCVxuXHQiICAgICAgICBcDQotICAgICAgICAgICAgInN0LncgICAgcjhbMF0sIHIwCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCIgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBSZXN0b3JlIFIwLi5SNyAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAibGRtICAgICBzcCsrLCByMC1yNwkJCQkJCQkJCQkJCQkJCQkJXG5cdCIgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBOb3csIHRoZSBzdGFjayBzaG91bGQgYmUgUjguLlIxMiwgTFIsIFBDIGFuZCBTUiAgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAicmV0ZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICA6WyB1bENyaXRpY2FsTmVzdGluZyBdICJpIiAoICZ1bENyaXRpY2FsTmVzdGluZyApLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICBbIHB4Q3VycmVudFRDQiBdICJpIiAoICZweEN1cnJlbnRUQ0IgKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICBbIExJTkUgXSAiaSIgKCBfX0xJTkVfXyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgfQ0KKyNkZWZpbmUgcG9ydEVYSVRfU1dJVENISU5HX0lTUigpCQkJCQkJCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIGV4dGVybiB2b2xhdGlsZSB1aW50MzJfdCB1bENyaXRpY2FsTmVzdGluZzsJCQkJCQkJCQkJXA0KKyAgZXh0ZXJuIHZvbGF0aWxlIHZvaWQgKnZvbGF0aWxlIHB4Q3VycmVudFRDQjsJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIENoZWNrIGlmIElOVDAgb3IgaGlnaGVyIHdlcmUgYmVpbmcgaGFuZGxlZCAoY2FzZSB3aGVyZSB0aGUgT1MgdGljayBpbnRlcnJ1cHRlZCBhbm90aGVyICovCQlcDQorICAgIC8qIGludGVycnVwdCBoYW5kbGVyICh3aGljaCB3YXMgb2YgYSBoaWdoZXIgcHJpb3JpdHkgbGV2ZWwgYnV0IGRlY2lkZWQgdG8gbG93ZXIgaXRzIHByaW9yaXR5ICovCQlcDQorICAgIC8qIGxldmVsIGFuZCBhbGxvdyBvdGhlciBsb3dlciBpbnRlcnJ1cHQgbGV2ZWwgdG8gb2NjdXIpLiAqLwkJCQkJCQkJCQlcDQorICAgIC8qIEluIHRoaXMgY2FzZSBpdCdzIG9mIG5vIHVzZSB0byBzd2l0Y2ggY29udGV4dCBhbmQgcmVzdG9yZSBhIG5ldyBTUCBiZWNhdXNlIHdlIHB1cnBvc2VkbHkgKi8JCVwNCisgICAgLyogZGlkIG5vdCBwcmV2aW91c2x5IHNhdmUgU1AgaW4gaXRzIFRDQi4gKi8JCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgImxkLncgICAgcjAsIHNwWzkqNF0JCQkJCQkJCQkJCQkJCQkJCVxuXHQiIC8qIFJlYWQgU1IgaW4gc3RhY2sgKi9cDQorICAgICJiZmV4dHUgIHIwLCByMCwgMjIsIDMJCQkJCQkJCQkJCQkJCQkJCVxuXHQiIC8qIEV4dHJhY3QgdGhlIG1vZGUgYml0cyB0byBSMC4gKi9cDQorICAgICJjcC53ICAgIHIwLCAxCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiIC8qIENvbXBhcmUgdGhlIG1vZGUgYml0cyB3aXRoIHN1cGVydmlzb3IgbW9kZShiJzAwMSkgKi9cDQorICAgICJicmhpICAgIExBQkVMX0lTUl9TS0lQX1JFU1RPUkVfQ09OVEVYVF8lW0xJTkVdCQkJCQkJCQkJCQlcblx0IlwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgLyogSWYgYSBzd2l0Y2ggaXMgcmVxdWlyZWQgdGhlbiB3ZSBqdXN0IG5lZWQgdG8gY2FsbCAqLwkJCQkJCQkJCVwNCisgICAgLyogdlRhc2tTd2l0Y2hDb250ZXh0KCkgYXMgdGhlIGNvbnRleHQgaGFzIGFscmVhZHkgYmVlbiAqLwkJCQkJCQkJXA0KKyAgICAvKiBzYXZlZC4gKi8JCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAiY3AudyAgICByMTIsIDEJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCIgLyogQ2hlY2sgaWYgU3dpdGNoIGNvbnRleHQgaXMgcmVxdWlyZWQuICovXA0KKyAgICAiYnJuZSAgICBMQUJFTF9JU1JfUkVTVE9SRV9DT05URVhUXyVbTElORV0iCQkJCQkJCQkJCQkJXA0KKyAgICA6CQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgOiBbTElORV0gImkiIChfX0xJTkVfXykJCQkJCQkJCQkJCQkJCQkJCVwNCisgICk7CQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIC8qIEEgY3JpdGljYWwgc2VjdGlvbiBoYXMgdG8gYmUgdXNlZCBoZXJlIGJlY2F1c2UgdlRhc2tTd2l0Y2hDb250ZXh0IGhhbmRsZXMgRnJlZVJUT1MgbGlua2VkIGxpc3RzLiAqLwlcDQorICBwb3J0RU5URVJfQ1JJVElDQUwoKTsJCQkJCQkJCQkJCQkJCQkJCQlcDQorICB2VGFza1N3aXRjaENvbnRleHQoKTsJCQkJCQkJCQkJCQkJCQkJCQlcDQorICBwb3J0RVhJVF9DUklUSUNBTCgpOwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgIkxBQkVMX0lTUl9SRVNUT1JFX0NPTlRFWFRfJVtMSU5FXToJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAvKiBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHdoaWNoIGV2ZXIgdGFzayBpcyBub3cgdGhlIGhpZ2hlc3QgKi8JCQkJCQkJXA0KKyAgICAvKiBwcmlvcml0eSB0aGF0IGlzIHJlYWR5IHRvIHJ1bi4gKi8JCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBSZXN0b3JlIGFsbCByZWdpc3RlcnMgKi8JCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBTZXQgU1AgdG8gcG9pbnQgdG8gbmV3IHN0YWNrICovCQkJCQkJCQkJCQkJCQlcDQorICAgICJtb3YgICAgIHI4LCBMTyglW3B4Q3VycmVudFRDQl0pCQkJCQkJCQkJCQkJCQlcblx0IlwNCisgICAgIm9yaCAgICAgcjgsIEhJKCVbcHhDdXJyZW50VENCXSkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAibGQudyAgICByMCwgcjhbMF0JCQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCisgICAgImxkLncgICAgc3AsIHIwWzBdCQkJCQkJCQkJCQkJCQkJCQkJXG4iXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAiTEFCRUxfSVNSX1NLSVBfUkVTVE9SRV9DT05URVhUXyVbTElORV06CQkJCQkJCQkJCQkJXG5cdCJcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIFJlc3RvcmUgdWxDcml0aWNhbE5lc3RpbmcgdmFyaWFibGUgKi8JCQkJCQkJCQkJCQlcDQorICAgICJsZC53ICAgIHIwLCBzcCsrCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJtb3YgICAgIHI4LCBMTyglW3VsQ3JpdGljYWxOZXN0aW5nXSkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJvcmggICAgIHI4LCBISSglW3VsQ3JpdGljYWxOZXN0aW5nXSkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJzdC53ICAgIHI4WzBdLCByMAkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBSZXN0b3JlIFIwLi5SNyAqLwkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAibGRtICAgICBzcCsrLCByMC1yNwkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIE5vdywgdGhlIHN0YWNrIHNob3VsZCBiZSBSOC4uUjEyLCBMUiwgUEMgYW5kIFNSICAqLwkJCQkJCQkJCVwNCisgICAgInJldGUiCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICA6CQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgOiBbdWxDcml0aWNhbE5lc3RpbmddICJpIiAoJnVsQ3JpdGljYWxOZXN0aW5nKSwJCQkJCQkJCQkJCVwNCisgICAgICBbcHhDdXJyZW50VENCXSAiaSIgKCZweEN1cnJlbnRUQ0IpLAkJCQkJCQkJCQkJCQlcDQorICAgICAgW0xJTkVdICJpIiAoX19MSU5FX18pCQkJCQkJCQkJCQkJCQkJCQlcDQorICApOwkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorfQ0KIA0KLSAgICAjZW5kaWYgLyogaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMCAqLw0KKyNlbmRpZg0KIA0KIA0KLSAgICAjZGVmaW5lIHBvcnRZSUVMRCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCAic2NhbGwiICk7IH0NCisjZGVmaW5lIHBvcnRZSUVMRCgpICAgICAgICAgICAgICAgICB7X19hc21fXyBfX3ZvbGF0aWxlX18gKCJzY2FsbCIpO30NCiANCiAvKiBUYXNrIGZ1bmN0aW9uIG1hY3JvcyBhcyBkZXNjcmliZWQgb24gdGhlIEZyZWVSVE9TLm9yZyBXRUIgc2l0ZS4gKi8NCi0gICAgI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQotICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgICAgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCiANCi0gICAgI2lmZGVmIF9fY3BsdXNwbHVzDQotICAgICAgICB9DQotICAgICNlbmRpZg0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCiANCiAjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8NCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9HQ0MvQVZSX0FWUkR4L3BvcnQuYyBiL3BvcnRhYmxlL0dDQy9BVlJfQVZSRHgvcG9ydC5jCmluZGV4IDlkNWNiOTYuLjBhOTk1ZDggMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0dDQy9BVlJfQVZSRHgvcG9ydC5jCisrKyBiL3BvcnRhYmxlL0dDQy9BVlJfQVZSRHgvcG9ydC5jCkBAIC0zNCwxOCArMzQsMTggQEAKICNpbmNsdWRlICJ0YXNrLmgiCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBBVlIgcG9ydC4KLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisqIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBBVlIgcG9ydC4KKyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyogU3RhcnQgdGFza3Mgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZXMuICovCi0jZGVmaW5lIHBvcnRGTEFHU19JTlRfRU5BQkxFRCAgICAgICAgICAgICAgICgoU3RhY2tUeXBlX3QpIDB4ODApCisjZGVmaW5lIHBvcnRGTEFHU19JTlRfRU5BQkxFRCAgICAoICggU3RhY2tUeXBlX3QgKSAweDgwICkKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qIFdlIHJlcXVpcmUgdGhlIGFkZHJlc3Mgb2YgdGhlIHB4Q3VycmVudFRDQiB2YXJpYWJsZSwgYnV0IGRvbid0IHdhbnQgdG8ga25vdwotYW55IGRldGFpbHMgb2YgaXRzIHR5cGUuICovCisgKiBhbnkgZGV0YWlscyBvZiBpdHMgdHlwZS4gKi8KIHR5cGVkZWYgdm9pZCBSVE9TX1RDQl90OwotZXh0ZXJuIHZvbGF0aWxlIFJUT1NfVENCX3QgKnZvbGF0aWxlIHB4Q3VycmVudFRDQjsKK2V4dGVybiB2b2xhdGlsZSBSVE9TX1RDQl90ICogdm9sYXRpbGUgcHhDdXJyZW50VENCOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtNjUsMTYxICs2NSwxNjMgQEAKICAqIHNvIHdlIG5lZWQgbm90IHdvcnJ5IGFib3V0IHJlYWRpbmcvd3JpdGluZyB0byB0aGUgc3RhY2sgcG9pbnRlci4KICAqLwogCi0jZGVmaW5lIHBvcnRTQVZFX0NPTlRFWFQoKSBcCi0gICAgYXNtIHZvbGF0aWxlKCJwdXNoICByMCAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJpbiAgICByMCwgX19TUkVHX18gICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJjbGkgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwdXNoICByMCAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJpbiAgICByMCwgX19SQU1QWl9fICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwdXNoICByMCAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwdXNoICByMSAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJjbHIgICByMSAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwdXNoICByMiAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwdXNoICByMyAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwdXNoICByNCAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwdXNoICByNSAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwdXNoICByNiAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwdXNoICByNyAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwdXNoICByOCAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwdXNoICByOSAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwdXNoICByMTAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwdXNoICByMTEgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwdXNoICByMTIgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwdXNoICByMTMgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwdXNoICByMTQgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwdXNoICByMTUgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwdXNoICByMTYgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwdXNoICByMTcgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwdXNoICByMTggICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwdXNoICByMTkgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwdXNoICByMjAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwdXNoICByMjEgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwdXNoICByMjIgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwdXNoICByMjMgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwdXNoICByMjQgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwdXNoICByMjUgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwdXNoICByMjYgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwdXNoICByMjcgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwdXNoICByMjggICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwdXNoICByMjkgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwdXNoICByMzAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwdXNoICByMzEgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJsZHMgICByMjYsIHB4Q3VycmVudFRDQiAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJsZHMgICByMjcsIHB4Q3VycmVudFRDQiArIDEgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJpbiAgICByMCwgX19TUF9MX18gICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJzdCAgICB4KywgcjAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJpbiAgICByMCwgX19TUF9IX18gICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJzdCAgICB4KywgcjAgICAgICAgICAgICAgICAgICBcblx0Iik7CisjZGVmaW5lIHBvcnRTQVZFX0NPTlRFWFQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBhc20gdm9sYXRpbGUgKCAicHVzaCAgcjAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJpbiAgICByMCwgX19TUkVHX18gICAgICAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgImNsaSAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAicHVzaCAgcjAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJpbiAgICByMCwgX19SQU1QWl9fICAgICAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgInB1c2ggIHIwICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAicHVzaCAgcjEgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJjbHIgICByMSAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgInB1c2ggIHIyICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAicHVzaCAgcjMgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJwdXNoICByNCAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgInB1c2ggIHI1ICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAicHVzaCAgcjYgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJwdXNoICByNyAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgInB1c2ggIHI4ICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAicHVzaCAgcjkgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJwdXNoICByMTAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgInB1c2ggIHIxMSAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAicHVzaCAgcjEyICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJwdXNoICByMTMgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgInB1c2ggIHIxNCAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAicHVzaCAgcjE1ICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJwdXNoICByMTYgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgInB1c2ggIHIxNyAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAicHVzaCAgcjE4ICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJwdXNoICByMTkgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgInB1c2ggIHIyMCAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAicHVzaCAgcjIxICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJwdXNoICByMjIgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgInB1c2ggIHIyMyAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAicHVzaCAgcjI0ICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJwdXNoICByMjUgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgInB1c2ggIHIyNiAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAicHVzaCAgcjI3ICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJwdXNoICByMjggICAgICAgICAgICAgICAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgInB1c2ggIHIyOSAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAicHVzaCAgcjMwICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJwdXNoICByMzEgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgImxkcyAgIHIyNiwgcHhDdXJyZW50VENCICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAibGRzICAgcjI3LCBweEN1cnJlbnRUQ0IgKyAxICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJpbiAgICByMCwgX19TUF9MX18gICAgICAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgInN0ICAgIHgrLCByMCAgICAgICAgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAiaW4gICAgcjAsIF9fU1BfSF9fICAgICAgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJzdCAgICB4KywgcjAgICAgICAgICAgICAgICAgICBcblx0IiApOwogCiAvKgogICogT3Bwb3NpdGUgdG8gcG9ydFNBVkVfQ09OVEVYVCgpLiAgSW50ZXJydXB0cyB3aWxsIGhhdmUgYmVlbiBkaXNhYmxlZCBkdXJpbmcKICAqIHRoZSBjb250ZXh0IHNhdmUgc28gd2UgY2FuIHdyaXRlIHRvIHRoZSBzdGFjayBwb2ludGVyLgogICovCiAKLSNkZWZpbmUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpIFwKLSAgICBhc20gdm9sYXRpbGUoImxkcyAgIHIyNiwgcHhDdXJyZW50VENCICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgImxkcyAgIHIyNywgcHhDdXJyZW50VENCICsgMSAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgImxkICAgIHIyOCwgeCsgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgIm91dCAgIF9fU1BfTF9fLCByMjggICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgImxkICAgIHIyOSwgeCsgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgIm91dCAgIF9fU1BfSF9fLCByMjkgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInBvcCAgIHIzMSAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInBvcCAgIHIzMCAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInBvcCAgIHIyOSAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInBvcCAgIHIyOCAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInBvcCAgIHIyNyAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInBvcCAgIHIyNiAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInBvcCAgIHIyNSAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInBvcCAgIHIyNCAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInBvcCAgIHIyMyAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInBvcCAgIHIyMiAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInBvcCAgIHIyMSAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInBvcCAgIHIyMCAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInBvcCAgIHIxOSAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInBvcCAgIHIxOCAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInBvcCAgIHIxNyAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInBvcCAgIHIxNiAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInBvcCAgIHIxNSAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInBvcCAgIHIxNCAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInBvcCAgIHIxMyAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInBvcCAgIHIxMiAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInBvcCAgIHIxMSAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInBvcCAgIHIxMCAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInBvcCAgIHI5ICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInBvcCAgIHI4ICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInBvcCAgIHI3ICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInBvcCAgIHI2ICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInBvcCAgIHI1ICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInBvcCAgIHI0ICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInBvcCAgIHIzICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInBvcCAgIHIyICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInBvcCAgIHIxICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInBvcCAgIHIwICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgIm91dCAgIF9fUkFNUFpfXywgcjAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInBvcCAgIHIwICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgIm91dCAgIF9fU1JFR19fLCByMCAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInBvcCAgIHIwICAgICAgICAgICAgICAgICAgICAgIFxuXHQiKTsKKyNkZWZpbmUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGFzbSB2b2xhdGlsZSAoICJsZHMgICByMjYsIHB4Q3VycmVudFRDQiAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgImxkcyAgIHIyNywgcHhDdXJyZW50VENCICsgMSAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAibGQgICAgcjI4LCB4KyAgICAgICAgICAgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJvdXQgICBfX1NQX0xfXywgcjI4ICAgICAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgImxkICAgIHIyOSwgeCsgICAgICAgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAib3V0ICAgX19TUF9IX18sIHIyOSAgICAgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJwb3AgICByMzEgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgInBvcCAgIHIzMCAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAicG9wICAgcjI5ICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJwb3AgICByMjggICAgICAgICAgICAgICAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgInBvcCAgIHIyNyAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAicG9wICAgcjI2ICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJwb3AgICByMjUgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgInBvcCAgIHIyNCAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAicG9wICAgcjIzICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJwb3AgICByMjIgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgInBvcCAgIHIyMSAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAicG9wICAgcjIwICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJwb3AgICByMTkgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgInBvcCAgIHIxOCAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAicG9wICAgcjE3ICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJwb3AgICByMTYgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgInBvcCAgIHIxNSAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAicG9wICAgcjE0ICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJwb3AgICByMTMgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgInBvcCAgIHIxMiAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAicG9wICAgcjExICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJwb3AgICByMTAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgInBvcCAgIHI5ICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAicG9wICAgcjggICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJwb3AgICByNyAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgInBvcCAgIHI2ICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAicG9wICAgcjUgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJwb3AgICByNCAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgInBvcCAgIHIzICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAicG9wICAgcjIgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJwb3AgICByMSAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgInBvcCAgIHIwICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAib3V0ICAgX19SQU1QWl9fLCByMCAgICAgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJwb3AgICByMCAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgIm91dCAgIF9fU1JFR19fLCByMCAgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAicG9wICAgcjAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgKTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qCiAgKiBQZXJmb3JtIGhhcmR3YXJlIHNldHVwIHRvIGVuYWJsZSB0aWNrcyBmcm9tIHRpbWVyLgogICovCi1zdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KHZvaWQpOworc3RhdGljIHZvaWQgcHJ2U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApOwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qCiAgKiBTZWUgaGVhZGVyIGZpbGUgZm9yIGRlc2NyaXB0aW9uLgogICovCi1TdGFja1R5cGVfdCAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKFN0YWNrVHlwZV90ICpweFRvcE9mU3RhY2ssIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzKQorU3RhY2tUeXBlX3QgKiBweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICogcHhUb3BPZlN0YWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICogcHZQYXJhbWV0ZXJzICkKIHsKICAgICB1aW50MTZfdCB1c0FkZHJlc3M7CiAKICAgICAvKmxpbnQgLWU5NTAgLWU2MTEgLWU5MjMgTGludCBkb2Vzbid0IGxpa2UgdGhpcyBtdWNoIC0gYnV0IG5vdGhpbmcgSSBjYW4gZG8gYWJvdXQgaXQuICovCiAKICAgICAvKiBQbGFjZSBhIGZldyBieXRlcyBvZiBrbm93biB2YWx1ZXMgb24gdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suCi0gICAgVGhpcyBpcyBqdXN0IHVzZWZ1bCBmb3IgZGVidWdnaW5nLiBVbmNvbW1lbnQgaWYgbmVlZGVkLiAqLwotICAgIC8vICpweFRvcE9mU3RhY2sgPSAweDExOwotICAgIC8vIHB4VG9wT2ZTdGFjay0tOwotICAgIC8vICpweFRvcE9mU3RhY2sgPSAweDIyOwotICAgIC8vIHB4VG9wT2ZTdGFjay0tOwotICAgIC8vICpweFRvcE9mU3RhY2sgPSAweDMzOyAKLSAgICAvLyBweFRvcE9mU3RhY2stLTsKKyAgICAgKiBUaGlzIGlzIGp1c3QgdXNlZnVsIGZvciBkZWJ1Z2dpbmcuIFVuY29tbWVudCBpZiBuZWVkZWQuICovCisgICAgLyogKnB4VG9wT2ZTdGFjayA9IDB4MTE7ICovCisgICAgLyogcHhUb3BPZlN0YWNrLS07ICovCisgICAgLyogKnB4VG9wT2ZTdGFjayA9IDB4MjI7ICovCisgICAgLyogcHhUb3BPZlN0YWNrLS07ICovCisgICAgLyogKnB4VG9wT2ZTdGFjayA9IDB4MzM7ICovCisgICAgLyogcHhUb3BPZlN0YWNrLS07ICovCiAKICAgICAvKiBUaGUgc3RhcnQgb2YgdGhlIHRhc2sgY29kZSB3aWxsIGJlIHBvcHBlZCBvZmYgdGhlIHN0YWNrIGxhc3QsIHNvIHBsYWNlCi0gICAgaXQgb24gZmlyc3QuICovCi0gICAgdXNBZGRyZXNzICAgICA9ICh1aW50MTZfdClweENvZGU7Ci0gICAgKnB4VG9wT2ZTdGFjayA9IChTdGFja1R5cGVfdCkodXNBZGRyZXNzICYgKHVpbnQxNl90KTB4MDBmZik7CisgICAgICogaXQgb24gZmlyc3QuICovCisgICAgdXNBZGRyZXNzID0gKCB1aW50MTZfdCApIHB4Q29kZTsKKyAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApICggdXNBZGRyZXNzICYgKCB1aW50MTZfdCApIDB4MDBmZiApOwogICAgIHB4VG9wT2ZTdGFjay0tOwogCiAgICAgdXNBZGRyZXNzID4+PSA4OwotICAgICpweFRvcE9mU3RhY2sgPSAoU3RhY2tUeXBlX3QpKHVzQWRkcmVzcyAmICh1aW50MTZfdCkweDAwZmYpOworICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgKCB1c0FkZHJlc3MgJiAoIHVpbnQxNl90ICkgMHgwMGZmICk7CiAgICAgcHhUb3BPZlN0YWNrLS07CiAKICAgICAvKiBOZXh0IHNpbXVsYXRlIHRoZSBzdGFjayBhcyBpZiBhZnRlciBhIGNhbGwgdG8gcG9ydFNBVkVfQ09OVEVYVCgpLgotICAgIHBvcnRTQVZFX0NPTlRFWFQgcGxhY2VzIHRoZSBmbGFncyBvbiB0aGUgc3RhY2sgaW1tZWRpYXRlbHkgYWZ0ZXIgcjAKLSAgICB0byBlbnN1cmUgdGhlIGludGVycnVwdHMgZ2V0IGRpc2FibGVkIGFzIHNvb24gYXMgcG9zc2libGUsIGFuZCBzbyBlbnN1cmluZwotICAgIHRoZSBzdGFjayB1c2UgaXMgbWluaW1hbCBzaG91bGQgYSBjb250ZXh0IHN3aXRjaCBpbnRlcnJ1cHQgb2NjdXIuICovCi0gICAgKnB4VG9wT2ZTdGFjayA9IChTdGFja1R5cGVfdCkweDAwOyAvKiBSMCAqLworICAgICogIHBvcnRTQVZFX0NPTlRFWFQgcGxhY2VzIHRoZSBmbGFncyBvbiB0aGUgc3RhY2sgaW1tZWRpYXRlbHkgYWZ0ZXIgcjAKKyAgICAqICB0byBlbnN1cmUgdGhlIGludGVycnVwdHMgZ2V0IGRpc2FibGVkIGFzIHNvb24gYXMgcG9zc2libGUsIGFuZCBzbyBlbnN1cmluZworICAgICogIHRoZSBzdGFjayB1c2UgaXMgbWluaW1hbCBzaG91bGQgYSBjb250ZXh0IHN3aXRjaCBpbnRlcnJ1cHQgb2NjdXIuICovCisgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAwOyAvKiBSMCAqLwogICAgIHB4VG9wT2ZTdGFjay0tOwogICAgICpweFRvcE9mU3RhY2sgPSBwb3J0RkxBR1NfSU5UX0VOQUJMRUQ7CiAgICAgcHhUb3BPZlN0YWNrLS07Ci0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAwOwkvKiBSQU1QWiAqLworICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMDsgLyogUkFNUFogKi8KICAgICBweFRvcE9mU3RhY2stLTsKLSAgICAKKwogICAgIC8qIE5vdyB0aGUgcmVtYWluaW5nIHJlZ2lzdGVycy4gICBUaGUgY29tcGlsZXIgZXhwZWN0cyBSMSB0byBiZSAwLiAqLwotICAgICpweFRvcE9mU3RhY2sgPSAoU3RhY2tUeXBlX3QpMHgwMDsgLyogUjEgKi8KKyAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDA7IC8qIFIxICovCiAKICAgICAvKiBMZWF2ZSBSMiAtIFIyMyB1bnRvdWNoZWQgKi8KICAgICBweFRvcE9mU3RhY2sgLT0gMjM7CiAKICAgICAvKiBQbGFjZSB0aGUgcGFyYW1ldGVyIG9uIHRoZSBzdGFjayBpbiB0aGUgZXhwZWN0ZWQgbG9jYXRpb24uICovCi0gICAgdXNBZGRyZXNzICAgICA9ICh1aW50MTZfdClwdlBhcmFtZXRlcnM7Ci0gICAgKnB4VG9wT2ZTdGFjayA9IChTdGFja1R5cGVfdCkodXNBZGRyZXNzICYgKHVpbnQxNl90KTB4MDBmZik7CisgICAgdXNBZGRyZXNzID0gKCB1aW50MTZfdCApIHB2UGFyYW1ldGVyczsKKyAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApICggdXNBZGRyZXNzICYgKCB1aW50MTZfdCApIDB4MDBmZiApOwogICAgIHB4VG9wT2ZTdGFjay0tOwogCiAgICAgdXNBZGRyZXNzID4+PSA4OwotICAgICpweFRvcE9mU3RhY2sgPSAoU3RhY2tUeXBlX3QpKHVzQWRkcmVzcyAmICh1aW50MTZfdCkweDAwZmYpOworICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgKCB1c0FkZHJlc3MgJiAoIHVpbnQxNl90ICkgMHgwMGZmICk7CiAKICAgICAvKiBMZWF2ZSByZWdpc3RlciBSMjYgLSBSMzEgdW50b3VjaGVkICovCiAgICAgcHhUb3BPZlN0YWNrIC09IDc7CkBAIC0yMzAsNyArMjMyLDcgQEAKIH0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1CYXNlVHlwZV90IHhQb3J0U3RhcnRTY2hlZHVsZXIodm9pZCkKK0Jhc2VUeXBlX3QgeFBvcnRTdGFydFNjaGVkdWxlciggdm9pZCApCiB7CiAgICAgLyogU2V0dXAgdGhlIGhhcmR3YXJlIHRvIGdlbmVyYXRlIHRoZSB0aWNrLiAqLwogICAgIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoKTsKQEAgLTIzOSwxNSArMjQxLDE1IEBACiAgICAgcG9ydFJFU1RPUkVfQ09OVEVYVCgpOwogCiAgICAgLyogU2ltdWxhdGUgYSBmdW5jdGlvbiBjYWxsIGVuZCBhcyBnZW5lcmF0ZWQgYnkgdGhlIGNvbXBpbGVyLiAgV2Ugd2lsbCBub3cKLSAgICBqdW1wIHRvIHRoZSBzdGFydCBvZiB0aGUgdGFzayB0aGUgY29udGV4dCBvZiB3aGljaCB3ZSBoYXZlIGp1c3QgcmVzdG9yZWQuICovCi0gICAgYXNtIHZvbGF0aWxlKCJyZXQiKTsKKyAgICAgKiBqdW1wIHRvIHRoZSBzdGFydCBvZiB0aGUgdGFzayB0aGUgY29udGV4dCBvZiB3aGljaCB3ZSBoYXZlIGp1c3QgcmVzdG9yZWQuICovCisgICAgYXNtIHZvbGF0aWxlICggInJldCIgKTsKIAogICAgIC8qIFNob3VsZCBub3QgZ2V0IGhlcmUuICovCiAgICAgcmV0dXJuIHBkVFJVRTsKIH0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi12b2lkIHZQb3J0RW5kU2NoZWR1bGVyKHZvaWQpCit2b2lkIHZQb3J0RW5kU2NoZWR1bGVyKCB2b2lkICkKIHsKICAgICAvKiB2UG9ydEVuZFNjaGVkdWxlciBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBwb3J0LiAqLwogfQpAQCAtMjU3LDEzICsyNTksMTMgQEAKICAqIE1hbnVhbCBjb250ZXh0IHN3aXRjaC4gIFRoZSBmaXJzdCB0aGluZyB3ZSBkbyBpcyBzYXZlIHRoZSByZWdpc3RlcnMgc28gd2UKICAqIGNhbiB1c2UgYSBuYWtlZCBhdHRyaWJ1dGUuCiAgKi8KLXZvaWQgdlBvcnRZaWVsZCh2b2lkKSBfX2F0dHJpYnV0ZV9fKChuYWtlZCkpOwotdm9pZCB2UG9ydFlpZWxkKHZvaWQpCit2b2lkIHZQb3J0WWllbGQoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fKCAoIG5ha2VkICkgKTsKK3ZvaWQgdlBvcnRZaWVsZCggdm9pZCApCiB7CiAgICAgcG9ydFNBVkVfQ09OVEVYVCgpOwogICAgIHZUYXNrU3dpdGNoQ29udGV4dCgpOwogICAgIHBvcnRSRVNUT1JFX0NPTlRFWFQoKTsKLSAgICBhc20gdm9sYXRpbGUoInJldCIpOworICAgIGFzbSB2b2xhdGlsZSAoICJyZXQiICk7CiB9CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtMjcxLDEzICsyNzMsMTMgQEAKICAqIE1hbnVhbCBjb250ZXh0IHN3aXRjaCBjYWxsYWJsZSBmcm9tIElTUnMuIFRoZSBmaXJzdCB0aGluZwogICogd2UgZG8gaXMgc2F2ZSB0aGUgcmVnaXN0ZXJzIHNvIHdlIGNhbiB1c2UgYSBuYWtlZCBhdHRyaWJ1dGUuCiAgKi8KLXZvaWQgdlBvcnRZaWVsZEZyb21JU1Iodm9pZCkgX19hdHRyaWJ1dGVfXygobmFrZWQpKTsKLXZvaWQgdlBvcnRZaWVsZEZyb21JU1Iodm9pZCkKK3ZvaWQgdlBvcnRZaWVsZEZyb21JU1IoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fKCAoIG5ha2VkICkgKTsKK3ZvaWQgdlBvcnRZaWVsZEZyb21JU1IoIHZvaWQgKQogewogICAgIHBvcnRTQVZFX0NPTlRFWFQoKTsKICAgICB2VGFza1N3aXRjaENvbnRleHQoKTsKICAgICBwb3J0UkVTVE9SRV9DT05URVhUKCk7Ci0gICAgYXNtIHZvbGF0aWxlKCJyZXRpIik7CisgICAgYXNtIHZvbGF0aWxlICggInJldGkiICk7CiB9CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtMjg3LDI0ICsyODksMjYgQEAKICAqIGRpZmZlcmVuY2UgZnJvbSB2UG9ydFlpZWxkKCkgaXMgdGhlIHRpY2sgY291bnQgaXMgaW5jcmVtZW50ZWQgYXMgdGhlCiAgKiBjYWxsIGNvbWVzIGZyb20gdGhlIHRpY2sgSVNSLgogICovCi12b2lkIHZQb3J0WWllbGRGcm9tVGljayh2b2lkKSBfX2F0dHJpYnV0ZV9fKChuYWtlZCkpOwotdm9pZCB2UG9ydFlpZWxkRnJvbVRpY2sodm9pZCkKK3ZvaWQgdlBvcnRZaWVsZEZyb21UaWNrKCB2b2lkICkgX19hdHRyaWJ1dGVfXyggKCBuYWtlZCApICk7Cit2b2lkIHZQb3J0WWllbGRGcm9tVGljayggdm9pZCApCiB7CiAgICAgcG9ydFNBVkVfQ09OVEVYVCgpOwotICAgIGlmICh4VGFza0luY3JlbWVudFRpY2soKSAhPSBwZEZBTFNFKSB7CisKKyAgICBpZiggeFRhc2tJbmNyZW1lbnRUaWNrKCkgIT0gcGRGQUxTRSApCisgICAgewogICAgICAgICB2VGFza1N3aXRjaENvbnRleHQoKTsKICAgICB9CiAKICAgICBwb3J0UkVTVE9SRV9DT05URVhUKCk7CiAKLSAgICBhc20gdm9sYXRpbGUoInJldGkiKTsKKyAgICBhc20gdm9sYXRpbGUgKCAicmV0aSIgKTsKIH0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKgogICogU2V0dXAgdGltZXIgdG8gZ2VuZXJhdGUgYSB0aWNrIGludGVycnVwdC4KICAqLwotc3RhdGljIHZvaWQgcHJ2U2V0dXBUaW1lckludGVycnVwdCh2b2lkKQorc3RhdGljIHZvaWQgcHJ2U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApCiB7CiAgICAgVElDS19pbml0KCk7CiB9CkBAIC0zMTcsMjYgKzMyMSwyNiBAQAogICogdGhlIGNvbnRleHQgaXMgc2F2ZWQgYXQgdGhlIHN0YXJ0IG9mIHZQb3J0WWllbGRGcm9tVGljaygpLiAgVGhlIHRpY2sKICAqIGNvdW50IGlzIGluY3JlbWVudGVkIGFmdGVyIHRoZSBjb250ZXh0IGlzIHNhdmVkLgogICovCi1JU1IoVElDS19JTlRfdmVjdCwgSVNSX05BS0VEKQotewotICAgIC8qIENsZWFyIHRpY2sgaW50ZXJydXB0IGZsYWcuICovCi0gICAgQ0xSX0lOVChJTlRfRkxBR1MsIElOVF9NQVNLKTsKKyAgICBJU1IoIFRJQ0tfSU5UX3ZlY3QsIElTUl9OQUtFRCApCisgICAgeworICAgICAgICAvKiBDbGVhciB0aWNrIGludGVycnVwdCBmbGFnLiAqLworICAgICAgICBDTFJfSU5UKCBJTlRfRkxBR1MsIElOVF9NQVNLICk7CiAKLSAgICB2UG9ydFlpZWxkRnJvbVRpY2soKTsKKyAgICAgICAgdlBvcnRZaWVsZEZyb21UaWNrKCk7CiAKLSAgICBhc20gdm9sYXRpbGUoInJldGkiKTsKLX0KLSNlbHNlCisgICAgICAgIGFzbSB2b2xhdGlsZSAoICJyZXRpIiApOworICAgIH0KKyNlbHNlICAvKiBpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAxICovCiAKIC8qCiAgKiBUaWNrIElTUiBmb3IgdGhlIGNvb3BlcmF0aXZlIHNjaGVkdWxlci4gIEFsbCB0aGlzIGRvZXMgaXMgaW5jcmVtZW50IHRoZQogICogdGljayBjb3VudC4gIFdlIGRvbid0IG5lZWQgdG8gc3dpdGNoIGNvbnRleHQsIHRoaXMgY2FuIG9ubHkgYmUgZG9uZSBieQogICogbWFudWFsIGNhbGxzIHRvIHRhc2tZSUVMRCgpOwogICovCi1JU1IoVElDS19JTlRfdmVjdCkKLXsKLSAgICAvKiBDbGVhciB0aWNrIGludGVycnVwdCBmbGFnLiAqLwotICAgIElOVF9GTEFHUyA9IElOVF9NQVNLOwotICAgIHhUYXNrSW5jcmVtZW50VGljaygpOwotfQotI2VuZGlmCisgICAgSVNSKCBUSUNLX0lOVF92ZWN0ICkKKyAgICB7CisgICAgICAgIC8qIENsZWFyIHRpY2sgaW50ZXJydXB0IGZsYWcuICovCisgICAgICAgIElOVF9GTEFHUyA9IElOVF9NQVNLOworICAgICAgICB4VGFza0luY3JlbWVudFRpY2soKTsKKyAgICB9CisjZW5kaWYgLyogaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMSAqLwpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvR0NDL0FWUl9BVlJEeC9wb3J0aGFyZHdhcmUuaCBiL3BvcnRhYmxlL0dDQy9BVlJfQVZSRHgvcG9ydGhhcmR3YXJlLmgKaW5kZXggY2YyMzc3OC4uN2U2NzBkOSAxMDA2NDQKLS0tIGEvcG9ydGFibGUvR0NDL0FWUl9BVlJEeC9wb3J0aGFyZHdhcmUuaAorKysgYi9wb3J0YWJsZS9HQ0MvQVZSX0FWUkR4L3BvcnRoYXJkd2FyZS5oCkBAIC01LDk4ICs1LDEwNCBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotI2RlZmluZSBDTFJfSU5UKEZMQUdfUkVHLCBGTEFHX01BU0spIFwKLSAgICAgICAgYXNtIHZvbGF0aWxlKCBcCi0gICAgICAgICAgICAicHVzaCByMTZcblx0IiBcCi0gICAgICAgICAgICAibGRpIHIxNiwgJTFcblx0IiBcCi0gICAgICAgICAgICAic3RzICUwLCByMTZcblx0IiBcCi0gICAgICAgICAgICAicG9wIHIxNlxuXHQiIFwKLSAgICAgICAgICAgIDogXAotICAgICAgICAgICAgOiAiaSIoX1NGUl9NRU1fQUREUihGTEFHX1JFRykpLCJpIigodWludDhfdCkoRkxBR19NQVNLKSkgXAorI2RlZmluZSBDTFJfSU5UKCBGTEFHX1JFRywgRkxBR19NQVNLICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBhc20gdm9sYXRpbGUgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICJwdXNoIHIxNlxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAibGRpIHIxNiwgJTFcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgInN0cyAlMCwgcjE2XG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICJwb3AgcjE2XG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgOiAiaSIgKCBfU0ZSX01FTV9BRERSKCBGTEFHX1JFRyApICksICJpIiAoICggdWludDhfdCApICggRkxBR19NQVNLICkgKSBcCiAgICAgICAgICk7CiAKICNpZiAoIGNvbmZpZ1VTRV9USU1FUl9JTlNUQU5DRSA9PSAwICkKIAotICAgICNkZWZpbmUgVElDS19JTlRfdmVjdCAgICAgICBUQ0IwX0lOVF92ZWN0Ci0gICAgI2RlZmluZSBJTlRfRkxBR1MgICAgICAgICAgIFRDQjBfSU5URkxBR1MKLSAgICAjZGVmaW5lIElOVF9NQVNLICAgICAgICAgICAgVENCX0NBUFRfYm0KKyAgICAjZGVmaW5lIFRJQ0tfSU5UX3ZlY3QgICAgVENCMF9JTlRfdmVjdAorICAgICNkZWZpbmUgSU5UX0ZMQUdTICAgICAgICBUQ0IwX0lOVEZMQUdTCisgICAgI2RlZmluZSBJTlRfTUFTSyAgICAgICAgIFRDQl9DQVBUX2JtCiAKLSAgICAjZGVmaW5lIFRJQ0tfaW5pdCgpICAgICAgICAgeyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRDQjAuQ0NNUCAgICA9IGNvbmZpZ0NQVV9DTE9DS19IWiAvIGNvbmZpZ1RJQ0tfUkFURV9IWjsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQ0IwLklOVENUUkwgPSBUQ0JfQ0FQVF9ibTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQ0IwLkNUUkxBICAgPSBUQ0JfRU5BQkxFX2JtOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAjZGVmaW5lIFRJQ0tfaW5pdCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBUQ0IwLkNDTVAgPSBjb25maWdDUFVfQ0xPQ0tfSFogLyBjb25maWdUSUNLX1JBVEVfSFo7IFwKKyAgICAgICAgVENCMC5JTlRDVFJMID0gVENCX0NBUFRfYm07ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFRDQjAuQ1RSTEEgPSBUQ0JfRU5BQkxFX2JtOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KIAogI2VsaWYgKCBjb25maWdVU0VfVElNRVJfSU5TVEFOQ0UgPT0gMSApCiAKLSAgICAjZGVmaW5lIFRJQ0tfSU5UX3ZlY3QgICAgICAgVENCMV9JTlRfdmVjdAotICAgICNkZWZpbmUgSU5UX0ZMQUdTICAgICAgICAgICBUQ0IxX0lOVEZMQUdTCi0gICAgI2RlZmluZSBJTlRfTUFTSyAgICAgICAgICAgIFRDQl9DQVBUX2JtCisgICAgI2RlZmluZSBUSUNLX0lOVF92ZWN0ICAgIFRDQjFfSU5UX3ZlY3QKKyAgICAjZGVmaW5lIElOVF9GTEFHUyAgICAgICAgVENCMV9JTlRGTEFHUworICAgICNkZWZpbmUgSU5UX01BU0sgICAgICAgICBUQ0JfQ0FQVF9ibQogCi0gICAgI2RlZmluZSBUSUNLX2luaXQoKSAgICAgICAgIHsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQ0IxLkNDTVAgICAgPSBjb25maWdDUFVfQ0xPQ0tfSFogLyBjb25maWdUSUNLX1JBVEVfSFo7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVENCMS5JTlRDVFJMID0gVENCX0NBUFRfYm07IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVENCMS5DVFJMQSAgID0gVENCX0VOQUJMRV9ibTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgIAorICAgICNkZWZpbmUgVElDS19pbml0KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFRDQjEuQ0NNUCA9IGNvbmZpZ0NQVV9DTE9DS19IWiAvIGNvbmZpZ1RJQ0tfUkFURV9IWjsgXAorICAgICAgICBUQ0IxLklOVENUUkwgPSBUQ0JfQ0FQVF9ibTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgVENCMS5DVFJMQSA9IFRDQl9FTkFCTEVfYm07ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQorCiAjZWxpZiAoIGNvbmZpZ1VTRV9USU1FUl9JTlNUQU5DRSA9PSAyICkKIAotICAgICNkZWZpbmUgVElDS19JTlRfdmVjdCAgICAgICBUQ0IyX0lOVF92ZWN0Ci0gICAgI2RlZmluZSBJTlRfRkxBR1MgICAgICAgICAgIFRDQjJfSU5URkxBR1MKLSAgICAjZGVmaW5lIElOVF9NQVNLICAgICAgICAgICAgVENCX0NBUFRfYm0KKyAgICAjZGVmaW5lIFRJQ0tfSU5UX3ZlY3QgICAgVENCMl9JTlRfdmVjdAorICAgICNkZWZpbmUgSU5UX0ZMQUdTICAgICAgICBUQ0IyX0lOVEZMQUdTCisgICAgI2RlZmluZSBJTlRfTUFTSyAgICAgICAgIFRDQl9DQVBUX2JtCiAKLSAgICAjZGVmaW5lIFRJQ0tfaW5pdCgpICAgICAgICAgeyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRDQjIuQ0NNUCAgICA9IGNvbmZpZ0NQVV9DTE9DS19IWiAvIGNvbmZpZ1RJQ0tfUkFURV9IWjsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQ0IyLklOVENUUkwgPSBUQ0JfQ0FQVF9ibTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQ0IyLkNUUkxBICAgPSBUQ0JfRU5BQkxFX2JtOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgCisgICAgI2RlZmluZSBUSUNLX2luaXQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgVENCMi5DQ01QID0gY29uZmlnQ1BVX0NMT0NLX0haIC8gY29uZmlnVElDS19SQVRFX0haOyBcCisgICAgICAgIFRDQjIuSU5UQ1RSTCA9IFRDQl9DQVBUX2JtOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBUQ0IyLkNUUkxBID0gVENCX0VOQUJMRV9ibTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CisKICNlbGlmICggY29uZmlnVVNFX1RJTUVSX0lOU1RBTkNFID09IDMgKQogCi0gICAgI2RlZmluZSBUSUNLX0lOVF92ZWN0ICAgICAgIFRDQjNfSU5UX3ZlY3QKLSAgICAjZGVmaW5lIElOVF9GTEFHUyAgICAgICAgICAgVENCM19JTlRGTEFHUwotICAgICNkZWZpbmUgSU5UX01BU0sgICAgICAgICAgICBUQ0JfQ0FQVF9ibQorICAgICNkZWZpbmUgVElDS19JTlRfdmVjdCAgICBUQ0IzX0lOVF92ZWN0CisgICAgI2RlZmluZSBJTlRfRkxBR1MgICAgICAgIFRDQjNfSU5URkxBR1MKKyAgICAjZGVmaW5lIElOVF9NQVNLICAgICAgICAgVENCX0NBUFRfYm0KIAotICAgICNkZWZpbmUgVElDS19pbml0KCkgICAgICAgICB7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVENCMy5DQ01QICAgID0gY29uZmlnQ1BVX0NMT0NLX0haIC8gY29uZmlnVElDS19SQVRFX0haOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRDQjMuSU5UQ1RSTCA9IFRDQl9DQVBUX2JtOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRDQjMuQ1RSTEEgICA9IFRDQl9FTkFCTEVfYm07IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgIAorICAgICNkZWZpbmUgVElDS19pbml0KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFRDQjMuQ0NNUCA9IGNvbmZpZ0NQVV9DTE9DS19IWiAvIGNvbmZpZ1RJQ0tfUkFURV9IWjsgXAorICAgICAgICBUQ0IzLklOVENUUkwgPSBUQ0JfQ0FQVF9ibTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgVENCMy5DVFJMQSA9IFRDQl9FTkFCTEVfYm07ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQorCiAjZWxpZiAoIGNvbmZpZ1VTRV9USU1FUl9JTlNUQU5DRSA9PSA0ICkKIAotICAgICNkZWZpbmUgVElDS19JTlRfdmVjdCAgICAgICBUQ0I0X0lOVF92ZWN0Ci0gICAgI2RlZmluZSBJTlRfRkxBR1MgICAgICAgICAgIFRDQjRfSU5URkxBR1MKLSAgICAjZGVmaW5lIElOVF9NQVNLICAgICAgICAgICAgVENCX0NBUFRfYm0KKyAgICAjZGVmaW5lIFRJQ0tfSU5UX3ZlY3QgICAgVENCNF9JTlRfdmVjdAorICAgICNkZWZpbmUgSU5UX0ZMQUdTICAgICAgICBUQ0I0X0lOVEZMQUdTCisgICAgI2RlZmluZSBJTlRfTUFTSyAgICAgICAgIFRDQl9DQVBUX2JtCiAKLSAgICAjZGVmaW5lIFRJQ0tfaW5pdCgpICAgICAgICAgeyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRDQjQuQ0NNUCAgICA9IGNvbmZpZ0NQVV9DTE9DS19IWiAvIGNvbmZpZ1RJQ0tfUkFURV9IWjsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQ0I0LklOVENUUkwgPSBUQ0JfQ0FQVF9ibTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQ0I0LkNUUkxBICAgPSBUQ0JfRU5BQkxFX2JtOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAjZGVmaW5lIFRJQ0tfaW5pdCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBUQ0I0LkNDTVAgPSBjb25maWdDUFVfQ0xPQ0tfSFogLyBjb25maWdUSUNLX1JBVEVfSFo7IFwKKyAgICAgICAgVENCNC5JTlRDVFJMID0gVENCX0NBUFRfYm07ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFRDQjQuQ1RSTEEgPSBUQ0JfRU5BQkxFX2JtOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KIAogI2VsaWYgKCBjb25maWdVU0VfVElNRVJfSU5TVEFOQ0UgPT0gNSApCiAKLSAgICAjZGVmaW5lIFRJQ0tfSU5UX3ZlY3QgICAgICAgUlRDX0NOVF92ZWN0Ci0gICAgI2RlZmluZSBJTlRfRkxBR1MgICAgICAgICAgIFJUQ19JTlRGTEFHUwotICAgICNkZWZpbmUgSU5UX01BU0sgICAgICAgICAgICBSVENfT1ZGX2JtCisgICAgI2RlZmluZSBUSUNLX0lOVF92ZWN0ICAgIFJUQ19DTlRfdmVjdAorICAgICNkZWZpbmUgSU5UX0ZMQUdTICAgICAgICBSVENfSU5URkxBR1MKKyAgICAjZGVmaW5lIElOVF9NQVNLICAgICAgICAgUlRDX09WRl9ibQogCi0gICAgLyogSGVydHogdG8gcGVyaW9kIGZvciBSVEMgc2V0dXAgKi8KLSAgICAjZGVmaW5lIFJUQ19QRVJJT0RfSFooeCkgICAgKCAzMjc2OCAqICggKCAxLjAgLyB4ICkgKSApCi0gICAgI2RlZmluZSBUSUNLX2luaXQoKSAgICAgICAgIHsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoUlRDLlNUQVRVUyA+IDApOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUQy5DVFJMQSAgICA9IFJUQ19QUkVTQ0FMRVJfRElWMV9nYyB8IDEgPDwgUlRDX1JUQ0VOX2JwOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUQy5QRVIgICAgICA9IFJUQ19QRVJJT0RfSFooY29uZmlnVElDS19SQVRFX0haKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVEMuSU5UQ1RSTCAgfD0gMSA8PCBSVENfT1ZGX2JwOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKy8qIEhlcnR6IHRvIHBlcmlvZCBmb3IgUlRDIHNldHVwICovCisgICAgI2RlZmluZSBSVENfUEVSSU9EX0haKCB4ICkgICAgKCAzMjc2OCAqICggKCAxLjAgLyB4ICkgKSApCisgICAgI2RlZmluZSBUSUNLX2luaXQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHdoaWxlKCBSVEMuU1RBVFVTID4gMCApIHs7IH0gICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFJUQy5DVFJMQSA9IFJUQ19QUkVTQ0FMRVJfRElWMV9nYyB8IDEgPDwgUlRDX1JUQ0VOX2JwOyBcCisgICAgICAgIFJUQy5QRVIgPSBSVENfUEVSSU9EX0haKCBjb25maWdUSUNLX1JBVEVfSFogKTsgICAgICAgICBcCisgICAgICAgIFJUQy5JTlRDVFJMIHw9IDEgPDwgUlRDX09WRl9icDsgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQogCi0jZWxzZQorI2Vsc2UgLyogaWYgKCBjb25maWdVU0VfVElNRVJfSU5TVEFOQ0UgPT0gMCApICovCiAgICAgI3VuZGVmIFRJQ0tfSU5UX3ZlY3QKICAgICAjdW5kZWYgSU5UX0ZMQUdTCiAgICAgI3VuZGVmIElOVF9NQVNLCiAgICAgI3VuZGVmIFRJQ0tfaW5pdCgpCiAgICAgI2Vycm9yIEludmFsaWQgdGltZXIgc2V0dGluZy4KLSNlbmRpZgorI2VuZGlmIC8qIGlmICggY29uZmlnVVNFX1RJTUVSX0lOU1RBTkNFID09IDAgKSAqLwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApkaWZmIC0tZ2l0IGEvcG9ydGFibGUvR0NDL0FWUl9BVlJEeC9wb3J0bWFjcm8uaCBiL3BvcnRhYmxlL0dDQy9BVlJfQVZSRHgvcG9ydG1hY3JvLmgKaW5kZXggMDg1YTI3Zi4uOTlmZDRiMyAxMDA2NDQKLS0tIGEvcG9ydGFibGUvR0NDL0FWUl9BVlJEeC9wb3J0bWFjcm8uaAorKysgYi9wb3J0YWJsZS9HQ0MvQVZSX0FWUkR4L3BvcnRtYWNyby5oCkBAIC0yMywxNCArMjMsMTYgQEAKICAqIGh0dHA6Ly9hd3MuYW1hem9uLmNvbS9mcmVlcnRvcwogICoKICAqIDEgdGFiID09IDQgc3BhY2VzIQotKi8KKyAqLwogCiAjaWZuZGVmIFBPUlRNQUNST19ICiAjZGVmaW5lIFBPUlRNQUNST19ICiAKLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKKy8qICpJTkRFTlQtT0ZGKiAqLworICAgICNpZmRlZiBfX2NwbHVzcGx1cworICAgICAgICBleHRlcm4gIkMiIHsKKyAgICAjZW5kaWYKKy8qICpJTkRFTlQtT04qICovCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIFBvcnQgc3BlY2lmaWMgZGVmaW5pdGlvbnMuCkBAIC00Myw2NCArNDUsNjYgQEAKICAqLwogCiAvKiBUeXBlIGRlZmluaXRpb25zLiAqLwotI2RlZmluZSBwb3J0Q0hBUiBjaGFyCi0jZGVmaW5lIHBvcnRGTE9BVCBmbG9hdAotI2RlZmluZSBwb3J0RE9VQkxFIGRvdWJsZQotI2RlZmluZSBwb3J0TE9ORyBsb25nCi0jZGVmaW5lIHBvcnRTSE9SVCBpbnQKLSNkZWZpbmUgcG9ydFNUQUNLX1RZUEUgdWludDhfdAotI2RlZmluZSBwb3J0QkFTRV9UWVBFIGNoYXIKKyNkZWZpbmUgcG9ydENIQVIgICAgICAgICAgICAgICAgIGNoYXIKKyNkZWZpbmUgcG9ydEZMT0FUICAgICAgICAgICAgICAgIGZsb2F0CisjZGVmaW5lIHBvcnRET1VCTEUgICAgICAgICAgICAgICBkb3VibGUKKyNkZWZpbmUgcG9ydExPTkcgICAgICAgICAgICAgICAgIGxvbmcKKyNkZWZpbmUgcG9ydFNIT1JUICAgICAgICAgICAgICAgIGludAorI2RlZmluZSBwb3J0U1RBQ0tfVFlQRSAgICAgICAgICAgdWludDhfdAorI2RlZmluZSBwb3J0QkFTRV9UWVBFICAgICAgICAgICAgY2hhcgogCi0jZGVmaW5lIHBvcnRQT0lOVEVSX1NJWkVfVFlQRSB1aW50MTZfdAorI2RlZmluZSBwb3J0UE9JTlRFUl9TSVpFX1RZUEUgICAgdWludDE2X3QKIAotdHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSBTdGFja1R5cGVfdDsKLXR5cGVkZWYgc2lnbmVkIGNoYXIgICAgQmFzZVR5cGVfdDsKLXR5cGVkZWYgdW5zaWduZWQgY2hhciAgVUJhc2VUeXBlX3Q7Cit0eXBlZGVmIHBvcnRTVEFDS19UWVBFICAgU3RhY2tUeXBlX3Q7Cit0eXBlZGVmIHNpZ25lZCBjaGFyICAgICAgQmFzZVR5cGVfdDsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciAgICBVQmFzZVR5cGVfdDsKIAotI2lmIChjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEpCi10eXBlZGVmIHVpbnQxNl90IFRpY2tUeXBlX3Q7Ci0jZGVmaW5lIHBvcnRNQVhfREVMQVkgKFRpY2tUeXBlX3QpMHhmZmZmCisjaWYgKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQorICAgIHR5cGVkZWYgdWludDE2X3QgICAgIFRpY2tUeXBlX3Q7CisgICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICggVGlja1R5cGVfdCApIDB4ZmZmZgogI2Vsc2UKLXR5cGVkZWYgdWludDMyX3QgVGlja1R5cGVfdDsKLSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoVGlja1R5cGVfdCkweGZmZmZmZmZmVUwKKyAgICB0eXBlZGVmIHVpbnQzMl90ICAgICBUaWNrVHlwZV90OworICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwKICNlbmRpZgogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qIENyaXRpY2FsIHNlY3Rpb24gbWFuYWdlbWVudC4gKi8KLSNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGFzbSB2b2xhdGlsZSgiaW4gX190bXBfcmVnX18sIF9fU1JFR19fIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgYXNtIHZvbGF0aWxlKCJjbGkiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBhc20gdm9sYXRpbGUoInB1c2ggX190bXBfcmVnX18iKQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBhc20gdm9sYXRpbGUgKCAiaW4gX190bXBfcmVnX18sIF9fU1JFR19fIiApOyBcCisgICAgYXNtIHZvbGF0aWxlICggImNsaSIgKTsgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGFzbSB2b2xhdGlsZSAoICJwdXNoIF9fdG1wX3JlZ19fIiApCiAKLSNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGFzbSB2b2xhdGlsZSgicG9wIF9fdG1wX3JlZ19fIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgYXNtIHZvbGF0aWxlKCJvdXQgX19TUkVHX18sIF9fdG1wX3JlZ19fIikKKyNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKSAgICAgICAgICAgICBcCisgICAgYXNtIHZvbGF0aWxlICggInBvcCBfX3RtcF9yZWdfXyIgKTsgXAorICAgIGFzbSB2b2xhdGlsZSAoICJvdXQgX19TUkVHX18sIF9fdG1wX3JlZ19fIiApCiAKLSNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpIGFzbSB2b2xhdGlsZSgiY2xpIiA6Oik7Ci0jZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpIGFzbSB2b2xhdGlsZSgic2VpIiA6Oik7CisjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAgICBhc20gdm9sYXRpbGUgKCAiY2xpIiA6Oik7CisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpICAgICBhc20gdm9sYXRpbGUgKCAic2VpIiA6Oik7CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyogQXJjaGl0ZWN0dXJlIHNwZWNpZmljcy4gKi8KLSNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSCAoLTEpCi0jZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUyAoKFRpY2tUeXBlX3QpMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWikKLSNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UIDEKLSNkZWZpbmUgcG9ydE5PUCgpIGFzbSB2b2xhdGlsZSgibm9wIik7CisjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEggICAgICAoIC0xICkKKyNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TICAgICggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApCisjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVCAgICAxCisjZGVmaW5lIHBvcnROT1AoKSAgICBhc20gdm9sYXRpbGUgKCAibm9wIiApOwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qIEtlcm5lbCB1dGlsaXRpZXMuICovCi1leHRlcm4gdm9pZCB2UG9ydFlpZWxkKHZvaWQpIF9fYXR0cmlidXRlX18oKG5ha2VkKSk7Ci0jZGVmaW5lIHBvcnRZSUVMRCgpIHZQb3J0WWllbGQoKQorZXh0ZXJuIHZvaWQgdlBvcnRZaWVsZCggdm9pZCApIF9fYXR0cmlidXRlX18oICggbmFrZWQgKSApOworI2RlZmluZSBwb3J0WUlFTEQoKSAgICAgICAgICAgICB2UG9ydFlpZWxkKCkKIAotZXh0ZXJuIHZvaWQgdlBvcnRZaWVsZEZyb21JU1Iodm9pZCkgX19hdHRyaWJ1dGVfXygobmFrZWQpKTsKLSNkZWZpbmUgcG9ydFlJRUxEX0ZST01fSVNSKCkgdlBvcnRZaWVsZEZyb21JU1IoKQorZXh0ZXJuIHZvaWQgdlBvcnRZaWVsZEZyb21JU1IoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fKCAoIG5ha2VkICkgKTsKKyNkZWZpbmUgcG9ydFlJRUxEX0ZST01fSVNSKCkgICAgdlBvcnRZaWVsZEZyb21JU1IoKQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAqLwotI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyh2RnVuY3Rpb24sIHB2UGFyYW1ldGVycykgdm9pZCB2RnVuY3Rpb24odm9pZCAqcHZQYXJhbWV0ZXJzKQotI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTih2RnVuY3Rpb24sIHB2UGFyYW1ldGVycykgdm9pZCB2RnVuY3Rpb24odm9pZCAqcHZQYXJhbWV0ZXJzKQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgICAgICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkKIAotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKKy8qICpJTkRFTlQtT0ZGKiAqLworICAgICNpZmRlZiBfX2NwbHVzcGx1cworICAgICAgICB9CisgICAgI2VuZGlmCisvKiAqSU5ERU5ULU9OKiAqLwogCiAjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0dDQy9BVlJfTWVnYTAvcG9ydC5jIGIvcG9ydGFibGUvR0NDL0FWUl9NZWdhMC9wb3J0LmMKaW5kZXggOGM0Njg0Mi4uYzI3YjdjYyAxMDA2NDQKLS0tIGEvcG9ydGFibGUvR0NDL0FWUl9NZWdhMC9wb3J0LmMKKysrIGIvcG9ydGFibGUvR0NDL0FWUl9NZWdhMC9wb3J0LmMKQEAgLTM0LDE4ICszNCwxOCBAQAogI2luY2x1ZGUgInRhc2suaCIKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFibGUuaCBmb3IgdGhlIEFWUiBwb3J0LgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFibGUuaCBmb3IgdGhlIEFWUiBwb3J0LgorKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKiBTdGFydCB0YXNrcyB3aXRoIGludGVycnVwdHMgZW5hYmxlcy4gKi8KLSNkZWZpbmUgcG9ydEZMQUdTX0lOVF9FTkFCTEVEICAgICAgICAgICAgICAgKChTdGFja1R5cGVfdCkgMHg4MCkKKyNkZWZpbmUgcG9ydEZMQUdTX0lOVF9FTkFCTEVEICAgICggKCBTdGFja1R5cGVfdCApIDB4ODAgKQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyogV2UgcmVxdWlyZSB0aGUgYWRkcmVzcyBvZiB0aGUgcHhDdXJyZW50VENCIHZhcmlhYmxlLCBidXQgZG9uJ3Qgd2FudCB0byBrbm93Ci1hbnkgZGV0YWlscyBvZiBpdHMgdHlwZS4gKi8KKyAqIGFueSBkZXRhaWxzIG9mIGl0cyB0eXBlLiAqLwogdHlwZWRlZiB2b2lkIFJUT1NfVENCX3Q7Ci1leHRlcm4gdm9sYXRpbGUgUlRPU19UQ0JfdCAqdm9sYXRpbGUgcHhDdXJyZW50VENCOworZXh0ZXJuIHZvbGF0aWxlIFJUT1NfVENCX3QgKiB2b2xhdGlsZSBweEN1cnJlbnRUQ0I7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC02NSwxNTUgKzY1LDE1NyBAQAogICogc28gd2UgbmVlZCBub3Qgd29ycnkgYWJvdXQgcmVhZGluZy93cml0aW5nIHRvIHRoZSBzdGFjayBwb2ludGVyLgogICovCiAKLSNkZWZpbmUgcG9ydFNBVkVfQ09OVEVYVCgpIFwKLSAgICBhc20gdm9sYXRpbGUoInB1c2ggIHIwICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgImluICAgIHIwLCBfX1NSRUdfXyAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgImNsaSAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInB1c2ggIHIwICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInB1c2ggIHIxICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgImNsciAgIHIxICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInB1c2ggIHIyICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInB1c2ggIHIzICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInB1c2ggIHI0ICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInB1c2ggIHI1ICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInB1c2ggIHI2ICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInB1c2ggIHI3ICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInB1c2ggIHI4ICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInB1c2ggIHI5ICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInB1c2ggIHIxMCAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInB1c2ggIHIxMSAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInB1c2ggIHIxMiAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInB1c2ggIHIxMyAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInB1c2ggIHIxNCAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInB1c2ggIHIxNSAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInB1c2ggIHIxNiAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInB1c2ggIHIxNyAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInB1c2ggIHIxOCAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInB1c2ggIHIxOSAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInB1c2ggIHIyMCAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInB1c2ggIHIyMSAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInB1c2ggIHIyMiAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInB1c2ggIHIyMyAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInB1c2ggIHIyNCAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInB1c2ggIHIyNSAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInB1c2ggIHIyNiAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInB1c2ggIHIyNyAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInB1c2ggIHIyOCAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInB1c2ggIHIyOSAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInB1c2ggIHIzMCAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInB1c2ggIHIzMSAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgImxkcyAgIHIyNiwgcHhDdXJyZW50VENCICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgImxkcyAgIHIyNywgcHhDdXJyZW50VENCICsgMSAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgImluICAgIHIwLCBfX1NQX0xfXyAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInN0ICAgIHgrLCByMCAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgImluICAgIHIwLCBfX1NQX0hfXyAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgInN0ICAgIHgrLCByMCAgICAgICAgICAgICAgICAgIFxuXHQiKTsKKyNkZWZpbmUgcG9ydFNBVkVfQ09OVEVYVCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGFzbSB2b2xhdGlsZSAoICJwdXNoICByMCAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgImluICAgIHIwLCBfX1NSRUdfXyAgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAiY2xpICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJwdXNoICByMCAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgInB1c2ggIHIxICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAiY2xyICAgcjEgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJwdXNoICByMiAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgInB1c2ggIHIzICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAicHVzaCAgcjQgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJwdXNoICByNSAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgInB1c2ggIHI2ICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAicHVzaCAgcjcgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJwdXNoICByOCAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgInB1c2ggIHI5ICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAicHVzaCAgcjEwICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJwdXNoICByMTEgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgInB1c2ggIHIxMiAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAicHVzaCAgcjEzICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJwdXNoICByMTQgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgInB1c2ggIHIxNSAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAicHVzaCAgcjE2ICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJwdXNoICByMTcgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgInB1c2ggIHIxOCAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAicHVzaCAgcjE5ICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJwdXNoICByMjAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgInB1c2ggIHIyMSAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAicHVzaCAgcjIyICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJwdXNoICByMjMgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgInB1c2ggIHIyNCAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAicHVzaCAgcjI1ICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJwdXNoICByMjYgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgInB1c2ggIHIyNyAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAicHVzaCAgcjI4ICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJwdXNoICByMjkgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgInB1c2ggIHIzMCAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAicHVzaCAgcjMxICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJsZHMgICByMjYsIHB4Q3VycmVudFRDQiAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgImxkcyAgIHIyNywgcHhDdXJyZW50VENCICsgMSAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAiaW4gICAgcjAsIF9fU1BfTF9fICAgICAgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJzdCAgICB4KywgcjAgICAgICAgICAgICAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgImluICAgIHIwLCBfX1NQX0hfXyAgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAic3QgICAgeCssIHIwICAgICAgICAgICAgICAgICAgXG5cdCIgKTsKIAogLyoKICAqIE9wcG9zaXRlIHRvIHBvcnRTQVZFX0NPTlRFWFQoKS4gIEludGVycnVwdHMgd2lsbCBoYXZlIGJlZW4gZGlzYWJsZWQgZHVyaW5nCiAgKiB0aGUgY29udGV4dCBzYXZlIHNvIHdlIGNhbiB3cml0ZSB0byB0aGUgc3RhY2sgcG9pbnRlci4KICAqLwogCi0jZGVmaW5lIHBvcnRSRVNUT1JFX0NPTlRFWFQoKSBcCi0gICAgYXNtIHZvbGF0aWxlKCJsZHMgICByMjYsIHB4Q3VycmVudFRDQiAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJsZHMgICByMjcsIHB4Q3VycmVudFRDQiArIDEgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJsZCAgICByMjgsIHgrICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJvdXQgICBfX1NQX0xfXywgcjI4ICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJsZCAgICByMjksIHgrICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJvdXQgICBfX1NQX0hfXywgcjI5ICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwb3AgICByMzEgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwb3AgICByMzAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwb3AgICByMjkgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwb3AgICByMjggICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwb3AgICByMjcgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwb3AgICByMjYgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwb3AgICByMjUgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwb3AgICByMjQgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwb3AgICByMjMgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwb3AgICByMjIgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwb3AgICByMjEgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwb3AgICByMjAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwb3AgICByMTkgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwb3AgICByMTggICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwb3AgICByMTcgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwb3AgICByMTYgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwb3AgICByMTUgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwb3AgICByMTQgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwb3AgICByMTMgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwb3AgICByMTIgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwb3AgICByMTEgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwb3AgICByMTAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwb3AgICByOSAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwb3AgICByOCAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwb3AgICByNyAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwb3AgICByNiAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwb3AgICByNSAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwb3AgICByNCAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwb3AgICByMyAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwb3AgICByMiAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwb3AgICByMSAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwb3AgICByMCAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJvdXQgICBfX1NSRUdfXywgcjAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICJwb3AgICByMCAgICAgICAgICAgICAgICAgICAgICBcblx0Iik7CisjZGVmaW5lIHBvcnRSRVNUT1JFX0NPTlRFWFQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBhc20gdm9sYXRpbGUgKCAibGRzICAgcjI2LCBweEN1cnJlbnRUQ0IgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJsZHMgICByMjcsIHB4Q3VycmVudFRDQiArIDEgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgImxkICAgIHIyOCwgeCsgICAgICAgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAib3V0ICAgX19TUF9MX18sIHIyOCAgICAgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJsZCAgICByMjksIHgrICAgICAgICAgICAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgIm91dCAgIF9fU1BfSF9fLCByMjkgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAicG9wICAgcjMxICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJwb3AgICByMzAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgInBvcCAgIHIyOSAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAicG9wICAgcjI4ICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJwb3AgICByMjcgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgInBvcCAgIHIyNiAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAicG9wICAgcjI1ICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJwb3AgICByMjQgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgInBvcCAgIHIyMyAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAicG9wICAgcjIyICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJwb3AgICByMjEgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgInBvcCAgIHIyMCAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAicG9wICAgcjE5ICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJwb3AgICByMTggICAgICAgICAgICAgICAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgInBvcCAgIHIxNyAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAicG9wICAgcjE2ICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJwb3AgICByMTUgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgInBvcCAgIHIxNCAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAicG9wICAgcjEzICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJwb3AgICByMTIgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgInBvcCAgIHIxMSAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAicG9wICAgcjEwICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJwb3AgICByOSAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgInBvcCAgIHI4ICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAicG9wICAgcjcgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJwb3AgICByNiAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgInBvcCAgIHI1ICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAicG9wICAgcjQgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJwb3AgICByMyAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgInBvcCAgIHIyICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAicG9wICAgcjEgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAorICAgICAgICAgICAgICAgICAgICJwb3AgICByMCAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCisgICAgICAgICAgICAgICAgICAgIm91dCAgIF9fU1JFR19fLCByMCAgICAgICAgICAgIFxuXHQiIFwKKyAgICAgICAgICAgICAgICAgICAicG9wICAgcjAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgKTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qCiAgKiBQZXJmb3JtIGhhcmR3YXJlIHNldHVwIHRvIGVuYWJsZSB0aWNrcyBmcm9tIHRpbWVyLgogICovCi1zdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KHZvaWQpOworc3RhdGljIHZvaWQgcHJ2U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApOwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qCiAgKiBTZWUgaGVhZGVyIGZpbGUgZm9yIGRlc2NyaXB0aW9uLgogICovCi1TdGFja1R5cGVfdCAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKFN0YWNrVHlwZV90ICpweFRvcE9mU3RhY2ssIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzKQorU3RhY2tUeXBlX3QgKiBweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICogcHhUb3BPZlN0YWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICogcHZQYXJhbWV0ZXJzICkKIHsKICAgICB1aW50MTZfdCB1c0FkZHJlc3M7CiAKICAgICAvKmxpbnQgLWU5NTAgLWU2MTEgLWU5MjMgTGludCBkb2Vzbid0IGxpa2UgdGhpcyBtdWNoIC0gYnV0IG5vdGhpbmcgSSBjYW4gZG8gYWJvdXQgaXQuICovCi0gICAgCisKICAgICAvKiBQbGFjZSBhIGZldyBieXRlcyBvZiBrbm93biB2YWx1ZXMgb24gdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suCi0gICAgVGhpcyBpcyBqdXN0IHVzZWZ1bCBmb3IgZGVidWdnaW5nLiBVbmNvbW1lbnQgaWYgbmVlZGVkLiAqLwotICAgIC8vICpweFRvcE9mU3RhY2sgPSAweDExOwotICAgIC8vIHB4VG9wT2ZTdGFjay0tOwotICAgIC8vICpweFRvcE9mU3RhY2sgPSAweDIyOwotICAgIC8vIHB4VG9wT2ZTdGFjay0tOwotICAgIC8vICpweFRvcE9mU3RhY2sgPSAweDMzOyAKLSAgICAvLyBweFRvcE9mU3RhY2stLTsKKyAgICAgKiBUaGlzIGlzIGp1c3QgdXNlZnVsIGZvciBkZWJ1Z2dpbmcuIFVuY29tbWVudCBpZiBuZWVkZWQuICovCisgICAgLyogKnB4VG9wT2ZTdGFjayA9IDB4MTE7ICovCisgICAgLyogcHhUb3BPZlN0YWNrLS07ICovCisgICAgLyogKnB4VG9wT2ZTdGFjayA9IDB4MjI7ICovCisgICAgLyogcHhUb3BPZlN0YWNrLS07ICovCisgICAgLyogKnB4VG9wT2ZTdGFjayA9IDB4MzM7ICovCisgICAgLyogcHhUb3BPZlN0YWNrLS07ICovCiAKICAgICAvKiBUaGUgc3RhcnQgb2YgdGhlIHRhc2sgY29kZSB3aWxsIGJlIHBvcHBlZCBvZmYgdGhlIHN0YWNrIGxhc3QsIHNvIHBsYWNlCi0gICAgaXQgb24gZmlyc3QuICovCi0gICAgdXNBZGRyZXNzICAgICA9ICh1aW50MTZfdClweENvZGU7Ci0gICAgKnB4VG9wT2ZTdGFjayA9IChTdGFja1R5cGVfdCkodXNBZGRyZXNzICYgKHVpbnQxNl90KTB4MDBmZik7CisgICAgICogaXQgb24gZmlyc3QuICovCisgICAgdXNBZGRyZXNzID0gKCB1aW50MTZfdCApIHB4Q29kZTsKKyAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApICggdXNBZGRyZXNzICYgKCB1aW50MTZfdCApIDB4MDBmZiApOwogICAgIHB4VG9wT2ZTdGFjay0tOwogCiAgICAgdXNBZGRyZXNzID4+PSA4OwotICAgICpweFRvcE9mU3RhY2sgPSAoU3RhY2tUeXBlX3QpKHVzQWRkcmVzcyAmICh1aW50MTZfdCkweDAwZmYpOworICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgKCB1c0FkZHJlc3MgJiAoIHVpbnQxNl90ICkgMHgwMGZmICk7CiAgICAgcHhUb3BPZlN0YWNrLS07CiAKICAgICAvKiBOZXh0IHNpbXVsYXRlIHRoZSBzdGFjayBhcyBpZiBhZnRlciBhIGNhbGwgdG8gcG9ydFNBVkVfQ09OVEVYVCgpLgotICAgIHBvcnRTQVZFX0NPTlRFWFQgcGxhY2VzIHRoZSBmbGFncyBvbiB0aGUgc3RhY2sgaW1tZWRpYXRlbHkgYWZ0ZXIgcjAKLSAgICB0byBlbnN1cmUgdGhlIGludGVycnVwdHMgZ2V0IGRpc2FibGVkIGFzIHNvb24gYXMgcG9zc2libGUsIGFuZCBzbyBlbnN1cmluZwotICAgIHRoZSBzdGFjayB1c2UgaXMgbWluaW1hbCBzaG91bGQgYSBjb250ZXh0IHN3aXRjaCBpbnRlcnJ1cHQgb2NjdXIuICovCi0gICAgKnB4VG9wT2ZTdGFjayA9IChTdGFja1R5cGVfdCkweDAwOyAvKiBSMCAqLworICAgICogIHBvcnRTQVZFX0NPTlRFWFQgcGxhY2VzIHRoZSBmbGFncyBvbiB0aGUgc3RhY2sgaW1tZWRpYXRlbHkgYWZ0ZXIgcjAKKyAgICAqICB0byBlbnN1cmUgdGhlIGludGVycnVwdHMgZ2V0IGRpc2FibGVkIGFzIHNvb24gYXMgcG9zc2libGUsIGFuZCBzbyBlbnN1cmluZworICAgICogIHRoZSBzdGFjayB1c2UgaXMgbWluaW1hbCBzaG91bGQgYSBjb250ZXh0IHN3aXRjaCBpbnRlcnJ1cHQgb2NjdXIuICovCisgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAwOyAvKiBSMCAqLwogICAgIHB4VG9wT2ZTdGFjay0tOwogICAgICpweFRvcE9mU3RhY2sgPSBwb3J0RkxBR1NfSU5UX0VOQUJMRUQ7CiAgICAgcHhUb3BPZlN0YWNrLS07CiAKICAgICAvKiBOb3cgdGhlIHJlbWFpbmluZyByZWdpc3RlcnMuICAgVGhlIGNvbXBpbGVyIGV4cGVjdHMgUjEgdG8gYmUgMC4gKi8KLSAgICAqcHhUb3BPZlN0YWNrID0gKFN0YWNrVHlwZV90KTB4MDA7IC8qIFIxICovCisgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAwOyAvKiBSMSAqLwogCiAgICAgLyogTGVhdmUgUjIgLSBSMjMgdW50b3VjaGVkICovCiAgICAgcHhUb3BPZlN0YWNrIC09IDIzOwogCiAgICAgLyogUGxhY2UgdGhlIHBhcmFtZXRlciBvbiB0aGUgc3RhY2sgaW4gdGhlIGV4cGVjdGVkIGxvY2F0aW9uLiAqLwotICAgIHVzQWRkcmVzcyAgICAgPSAodWludDE2X3QpcHZQYXJhbWV0ZXJzOwotICAgICpweFRvcE9mU3RhY2sgPSAoU3RhY2tUeXBlX3QpKHVzQWRkcmVzcyAmICh1aW50MTZfdCkweDAwZmYpOworICAgIHVzQWRkcmVzcyA9ICggdWludDE2X3QgKSBwdlBhcmFtZXRlcnM7CisgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAoIHVzQWRkcmVzcyAmICggdWludDE2X3QgKSAweDAwZmYgKTsKICAgICBweFRvcE9mU3RhY2stLTsKIAogICAgIHVzQWRkcmVzcyA+Pj0gODsKLSAgICAqcHhUb3BPZlN0YWNrID0gKFN0YWNrVHlwZV90KSh1c0FkZHJlc3MgJiAodWludDE2X3QpMHgwMGZmKTsKKyAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApICggdXNBZGRyZXNzICYgKCB1aW50MTZfdCApIDB4MDBmZiApOwogCiAgICAgLyogTGVhdmUgcmVnaXN0ZXIgUjI2IC0gUjMxIHVudG91Y2hlZCAqLwogICAgIHB4VG9wT2ZTdGFjayAtPSA3OwpAQCAtMjI0LDcgKzIyNiw3IEBACiB9CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotQmFzZVR5cGVfdCB4UG9ydFN0YXJ0U2NoZWR1bGVyKHZvaWQpCitCYXNlVHlwZV90IHhQb3J0U3RhcnRTY2hlZHVsZXIoIHZvaWQgKQogewogICAgIC8qIFNldHVwIHRoZSBoYXJkd2FyZSB0byBnZW5lcmF0ZSB0aGUgdGljay4gKi8KICAgICBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCk7CkBAIC0yMzMsMTUgKzIzNSwxNSBAQAogICAgIHBvcnRSRVNUT1JFX0NPTlRFWFQoKTsKIAogICAgIC8qIFNpbXVsYXRlIGEgZnVuY3Rpb24gY2FsbCBlbmQgYXMgZ2VuZXJhdGVkIGJ5IHRoZSBjb21waWxlci4gIFdlIHdpbGwgbm93Ci0gICAganVtcCB0byB0aGUgc3RhcnQgb2YgdGhlIHRhc2sgdGhlIGNvbnRleHQgb2Ygd2hpY2ggd2UgaGF2ZSBqdXN0IHJlc3RvcmVkLiAqLwotICAgIGFzbSB2b2xhdGlsZSgicmV0Iik7CisgICAgICoganVtcCB0byB0aGUgc3RhcnQgb2YgdGhlIHRhc2sgdGhlIGNvbnRleHQgb2Ygd2hpY2ggd2UgaGF2ZSBqdXN0IHJlc3RvcmVkLiAqLworICAgIGFzbSB2b2xhdGlsZSAoICJyZXQiICk7CiAKICAgICAvKiBTaG91bGQgbm90IGdldCBoZXJlLiAqLwogICAgIHJldHVybiBwZFRSVUU7CiB9CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotdm9pZCB2UG9ydEVuZFNjaGVkdWxlcih2b2lkKQordm9pZCB2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApCiB7CiAgICAgLyogdlBvcnRFbmRTY2hlZHVsZXIgaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgcG9ydC4gKi8KIH0KQEAgLTI1MSwxMyArMjUzLDEzIEBACiAgKiBNYW51YWwgY29udGV4dCBzd2l0Y2guICBUaGUgZmlyc3QgdGhpbmcgd2UgZG8gaXMgc2F2ZSB0aGUgcmVnaXN0ZXJzIHNvIHdlCiAgKiBjYW4gdXNlIGEgbmFrZWQgYXR0cmlidXRlLgogICovCi12b2lkIHZQb3J0WWllbGQodm9pZCkgX19hdHRyaWJ1dGVfXygobmFrZWQpKTsKLXZvaWQgdlBvcnRZaWVsZCh2b2lkKQordm9pZCB2UG9ydFlpZWxkKCB2b2lkICkgX19hdHRyaWJ1dGVfXyggKCBuYWtlZCApICk7Cit2b2lkIHZQb3J0WWllbGQoIHZvaWQgKQogewogICAgIHBvcnRTQVZFX0NPTlRFWFQoKTsKICAgICB2VGFza1N3aXRjaENvbnRleHQoKTsKICAgICBwb3J0UkVTVE9SRV9DT05URVhUKCk7Ci0gICAgYXNtIHZvbGF0aWxlKCJyZXQiKTsKKyAgICBhc20gdm9sYXRpbGUgKCAicmV0IiApOwogfQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTI2NSwxMyArMjY3LDEzIEBACiAgKiBNYW51YWwgY29udGV4dCBzd2l0Y2ggY2FsbGFibGUgZnJvbSBJU1JzLiBUaGUgZmlyc3QgdGhpbmcKICAqIHdlIGRvIGlzIHNhdmUgdGhlIHJlZ2lzdGVycyBzbyB3ZSBjYW4gdXNlIGEgbmFrZWQgYXR0cmlidXRlLgogICovCi12b2lkIHZQb3J0WWllbGRGcm9tSVNSKHZvaWQpIF9fYXR0cmlidXRlX18oKG5ha2VkKSk7Ci12b2lkIHZQb3J0WWllbGRGcm9tSVNSKHZvaWQpCit2b2lkIHZQb3J0WWllbGRGcm9tSVNSKCB2b2lkICkgX19hdHRyaWJ1dGVfXyggKCBuYWtlZCApICk7Cit2b2lkIHZQb3J0WWllbGRGcm9tSVNSKCB2b2lkICkKIHsKICAgICBwb3J0U0FWRV9DT05URVhUKCk7CiAgICAgdlRhc2tTd2l0Y2hDb250ZXh0KCk7CiAgICAgcG9ydFJFU1RPUkVfQ09OVEVYVCgpOwotICAgIGFzbSB2b2xhdGlsZSgicmV0aSIpOworICAgIGFzbSB2b2xhdGlsZSAoICJyZXRpIiApOwogfQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTI4MSwyNCArMjgzLDI2IEBACiAgKiBkaWZmZXJlbmNlIGZyb20gdlBvcnRZaWVsZCgpIGlzIHRoZSB0aWNrIGNvdW50IGlzIGluY3JlbWVudGVkIGFzIHRoZQogICogY2FsbCBjb21lcyBmcm9tIHRoZSB0aWNrIElTUi4KICAqLwotdm9pZCB2UG9ydFlpZWxkRnJvbVRpY2sodm9pZCkgX19hdHRyaWJ1dGVfXygobmFrZWQpKTsKLXZvaWQgdlBvcnRZaWVsZEZyb21UaWNrKHZvaWQpCit2b2lkIHZQb3J0WWllbGRGcm9tVGljayggdm9pZCApIF9fYXR0cmlidXRlX18oICggbmFrZWQgKSApOwordm9pZCB2UG9ydFlpZWxkRnJvbVRpY2soIHZvaWQgKQogewogICAgIHBvcnRTQVZFX0NPTlRFWFQoKTsKLSAgICBpZiAoeFRhc2tJbmNyZW1lbnRUaWNrKCkgIT0gcGRGQUxTRSkgeworCisgICAgaWYoIHhUYXNrSW5jcmVtZW50VGljaygpICE9IHBkRkFMU0UgKQorICAgIHsKICAgICAgICAgdlRhc2tTd2l0Y2hDb250ZXh0KCk7CiAgICAgfQogCiAgICAgcG9ydFJFU1RPUkVfQ09OVEVYVCgpOwogCi0gICAgYXNtIHZvbGF0aWxlKCJyZXRpIik7CisgICAgYXNtIHZvbGF0aWxlICggInJldGkiICk7CiB9CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyoKICAqIFNldHVwIHRpbWVyIHRvIGdlbmVyYXRlIGEgdGljayBpbnRlcnJ1cHQuCiAgKi8KLXN0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQodm9pZCkKK3N0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKQogewogICAgIFRJQ0tfaW5pdCgpOwogfQpAQCAtMzExLDI2ICszMTUsMjYgQEAKICAqIHRoZSBjb250ZXh0IGlzIHNhdmVkIGF0IHRoZSBzdGFydCBvZiB2UG9ydFlpZWxkRnJvbVRpY2soKS4gIFRoZSB0aWNrCiAgKiBjb3VudCBpcyBpbmNyZW1lbnRlZCBhZnRlciB0aGUgY29udGV4dCBpcyBzYXZlZC4KICAqLwotSVNSKFRJQ0tfSU5UX3ZlY3QsIElTUl9OQUtFRCkKLXsKLSAgICAvKiBDbGVhciB0aWNrIGludGVycnVwdCBmbGFnLiAqLwotICAgIENMUl9JTlQoSU5UX0ZMQUdTLCBJTlRfTUFTSyk7CisgICAgSVNSKCBUSUNLX0lOVF92ZWN0LCBJU1JfTkFLRUQgKQorICAgIHsKKyAgICAgICAgLyogQ2xlYXIgdGljayBpbnRlcnJ1cHQgZmxhZy4gKi8KKyAgICAgICAgQ0xSX0lOVCggSU5UX0ZMQUdTLCBJTlRfTUFTSyApOwogCi0gICAgdlBvcnRZaWVsZEZyb21UaWNrKCk7CisgICAgICAgIHZQb3J0WWllbGRGcm9tVGljaygpOwogCi0gICAgYXNtIHZvbGF0aWxlKCJyZXRpIik7Ci19Ci0jZWxzZQorICAgICAgICBhc20gdm9sYXRpbGUgKCAicmV0aSIgKTsKKyAgICB9CisjZWxzZSAgLyogaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMSAqLwogCiAvKgogICogVGljayBJU1IgZm9yIHRoZSBjb29wZXJhdGl2ZSBzY2hlZHVsZXIuICBBbGwgdGhpcyBkb2VzIGlzIGluY3JlbWVudCB0aGUKICAqIHRpY2sgY291bnQuICBXZSBkb24ndCBuZWVkIHRvIHN3aXRjaCBjb250ZXh0LCB0aGlzIGNhbiBvbmx5IGJlIGRvbmUgYnkKICAqIG1hbnVhbCBjYWxscyB0byB0YXNrWUlFTEQoKTsKICAqLwotSVNSKFRJQ0tfSU5UX3ZlY3QpCi17Ci0gICAgLyogQ2xlYXIgdGljayBpbnRlcnJ1cHQgZmxhZy4gKi8KLSAgICBJTlRfRkxBR1MgPSBJTlRfTUFTSzsKLSAgICB4VGFza0luY3JlbWVudFRpY2soKTsKLX0KLSNlbmRpZgorICAgIElTUiggVElDS19JTlRfdmVjdCApCisgICAgeworICAgICAgICAvKiBDbGVhciB0aWNrIGludGVycnVwdCBmbGFnLiAqLworICAgICAgICBJTlRfRkxBR1MgPSBJTlRfTUFTSzsKKyAgICAgICAgeFRhc2tJbmNyZW1lbnRUaWNrKCk7CisgICAgfQorI2VuZGlmIC8qIGlmIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDEgKi8KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0dDQy9BVlJfTWVnYTAvcG9ydGhhcmR3YXJlLmggYi9wb3J0YWJsZS9HQ0MvQVZSX01lZ2EwL3BvcnRoYXJkd2FyZS5oCmluZGV4IGFlZWNjZjUuLjhkNGYxYmMgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0dDQy9BVlJfTWVnYTAvcG9ydGhhcmR3YXJlLmgKKysrIGIvcG9ydGFibGUvR0NDL0FWUl9NZWdhMC9wb3J0aGFyZHdhcmUuaApAQCAtNSw4NiArNSw5MSBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotI2RlZmluZSBDTFJfSU5UKEZMQUdfUkVHLCBGTEFHX01BU0spIFwKLSAgICAgICAgYXNtIHZvbGF0aWxlKCBcCi0gICAgICAgICAgICAicHVzaCByMTZcblx0IiBcCi0gICAgICAgICAgICAibGRpIHIxNiwgJTFcblx0IiBcCi0gICAgICAgICAgICAic3RzICUwLCByMTZcblx0IiBcCi0gICAgICAgICAgICAicG9wIHIxNlxuXHQiIFwKLSAgICAgICAgICAgIDogXAotICAgICAgICAgICAgOiAiaSIoX1NGUl9NRU1fQUREUihGTEFHX1JFRykpLCJpIigodWludDhfdCkoRkxBR19NQVNLKSkgXAorI2RlZmluZSBDTFJfSU5UKCBGTEFHX1JFRywgRkxBR19NQVNLICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBhc20gdm9sYXRpbGUgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICJwdXNoIHIxNlxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAibGRpIHIxNiwgJTFcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgInN0cyAlMCwgcjE2XG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICJwb3AgcjE2XG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgOiAiaSIgKCBfU0ZSX01FTV9BRERSKCBGTEFHX1JFRyApICksICJpIiAoICggdWludDhfdCApICggRkxBR19NQVNLICkgKSBcCiAgICAgICAgICk7CiAKICNpZiAoIGNvbmZpZ1VTRV9USU1FUl9JTlNUQU5DRSA9PSAwICkKIAotICAgICNkZWZpbmUgVElDS19JTlRfdmVjdCAgICAgICBUQ0IwX0lOVF92ZWN0Ci0gICAgI2RlZmluZSBJTlRfRkxBR1MgICAgICAgICAgIFRDQjBfSU5URkxBR1MKLSAgICAjZGVmaW5lIElOVF9NQVNLICAgICAgICAgICAgVENCX0NBUFRfYm0KKyAgICAjZGVmaW5lIFRJQ0tfSU5UX3ZlY3QgICAgVENCMF9JTlRfdmVjdAorICAgICNkZWZpbmUgSU5UX0ZMQUdTICAgICAgICBUQ0IwX0lOVEZMQUdTCisgICAgI2RlZmluZSBJTlRfTUFTSyAgICAgICAgIFRDQl9DQVBUX2JtCiAKLSAgICAjZGVmaW5lIFRJQ0tfaW5pdCgpICAgICAgICAgeyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRDQjAuQ0NNUCAgICA9IGNvbmZpZ0NQVV9DTE9DS19IWiAvIGNvbmZpZ1RJQ0tfUkFURV9IWjsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQ0IwLklOVENUUkwgPSBUQ0JfQ0FQVF9ibTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQ0IwLkNUUkxBICAgPSBUQ0JfRU5BQkxFX2JtOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAjZGVmaW5lIFRJQ0tfaW5pdCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBUQ0IwLkNDTVAgPSBjb25maWdDUFVfQ0xPQ0tfSFogLyBjb25maWdUSUNLX1JBVEVfSFo7IFwKKyAgICAgICAgVENCMC5JTlRDVFJMID0gVENCX0NBUFRfYm07ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFRDQjAuQ1RSTEEgPSBUQ0JfRU5BQkxFX2JtOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KIAogI2VsaWYgKCBjb25maWdVU0VfVElNRVJfSU5TVEFOQ0UgPT0gMSApCiAKLSAgICAjZGVmaW5lIFRJQ0tfSU5UX3ZlY3QgICAgICAgVENCMV9JTlRfdmVjdAotICAgICNkZWZpbmUgSU5UX0ZMQUdTICAgICAgICAgICBUQ0IxX0lOVEZMQUdTCi0gICAgI2RlZmluZSBJTlRfTUFTSyAgICAgICAgICAgIFRDQl9DQVBUX2JtCisgICAgI2RlZmluZSBUSUNLX0lOVF92ZWN0ICAgIFRDQjFfSU5UX3ZlY3QKKyAgICAjZGVmaW5lIElOVF9GTEFHUyAgICAgICAgVENCMV9JTlRGTEFHUworICAgICNkZWZpbmUgSU5UX01BU0sgICAgICAgICBUQ0JfQ0FQVF9ibQogCi0gICAgI2RlZmluZSBUSUNLX2luaXQoKSAgICAgICAgIHsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQ0IxLkNDTVAgICAgPSBjb25maWdDUFVfQ0xPQ0tfSFogLyBjb25maWdUSUNLX1JBVEVfSFo7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVENCMS5JTlRDVFJMID0gVENCX0NBUFRfYm07IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVENCMS5DVFJMQSAgID0gVENCX0VOQUJMRV9ibTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgI2RlZmluZSBUSUNLX2luaXQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgVENCMS5DQ01QID0gY29uZmlnQ1BVX0NMT0NLX0haIC8gY29uZmlnVElDS19SQVRFX0haOyBcCisgICAgICAgIFRDQjEuSU5UQ1RSTCA9IFRDQl9DQVBUX2JtOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBUQ0IxLkNUUkxBID0gVENCX0VOQUJMRV9ibTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CiAKICNlbGlmICggY29uZmlnVVNFX1RJTUVSX0lOU1RBTkNFID09IDIgKQogCi0gICAgI2RlZmluZSBUSUNLX0lOVF92ZWN0ICAgICAgIFRDQjJfSU5UX3ZlY3QKLSAgICAjZGVmaW5lIElOVF9GTEFHUyAgICAgICAgICAgVENCMl9JTlRGTEFHUwotICAgICNkZWZpbmUgSU5UX01BU0sgICAgICAgICAgICBUQ0JfQ0FQVF9ibQorICAgICNkZWZpbmUgVElDS19JTlRfdmVjdCAgICBUQ0IyX0lOVF92ZWN0CisgICAgI2RlZmluZSBJTlRfRkxBR1MgICAgICAgIFRDQjJfSU5URkxBR1MKKyAgICAjZGVmaW5lIElOVF9NQVNLICAgICAgICAgVENCX0NBUFRfYm0KIAotICAgICNkZWZpbmUgVElDS19pbml0KCkgICAgICAgICB7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVENCMi5DQ01QICAgID0gY29uZmlnQ1BVX0NMT0NLX0haIC8gY29uZmlnVElDS19SQVRFX0haOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRDQjIuSU5UQ1RSTCA9IFRDQl9DQVBUX2JtOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRDQjIuQ1RSTEEgICA9IFRDQl9FTkFCTEVfYm07IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICNkZWZpbmUgVElDS19pbml0KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFRDQjIuQ0NNUCA9IGNvbmZpZ0NQVV9DTE9DS19IWiAvIGNvbmZpZ1RJQ0tfUkFURV9IWjsgXAorICAgICAgICBUQ0IyLklOVENUUkwgPSBUQ0JfQ0FQVF9ibTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgVENCMi5DVFJMQSA9IFRDQl9FTkFCTEVfYm07ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQogCiAjZWxpZiAoIGNvbmZpZ1VTRV9USU1FUl9JTlNUQU5DRSA9PSAzICkKIAotICAgICNkZWZpbmUgVElDS19JTlRfdmVjdCAgICAgICBUQ0IzX0lOVF92ZWN0Ci0gICAgI2RlZmluZSBJTlRfRkxBR1MgICAgICAgICAgIFRDQjNfSU5URkxBR1MKLSAgICAjZGVmaW5lIElOVF9NQVNLICAgICAgICAgICAgVENCX0NBUFRfYm0KKyAgICAjZGVmaW5lIFRJQ0tfSU5UX3ZlY3QgICAgVENCM19JTlRfdmVjdAorICAgICNkZWZpbmUgSU5UX0ZMQUdTICAgICAgICBUQ0IzX0lOVEZMQUdTCisgICAgI2RlZmluZSBJTlRfTUFTSyAgICAgICAgIFRDQl9DQVBUX2JtCiAKLSAgICAjZGVmaW5lIFRJQ0tfaW5pdCgpICAgICAgICAgeyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRDQjMuQ0NNUCAgICA9IGNvbmZpZ0NQVV9DTE9DS19IWiAvIGNvbmZpZ1RJQ0tfUkFURV9IWjsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQ0IzLklOVENUUkwgPSBUQ0JfQ0FQVF9ibTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQ0IzLkNUUkxBICAgPSBUQ0JfRU5BQkxFX2JtOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAjZGVmaW5lIFRJQ0tfaW5pdCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBUQ0IzLkNDTVAgPSBjb25maWdDUFVfQ0xPQ0tfSFogLyBjb25maWdUSUNLX1JBVEVfSFo7IFwKKyAgICAgICAgVENCMy5JTlRDVFJMID0gVENCX0NBUFRfYm07ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFRDQjMuQ1RSTEEgPSBUQ0JfRU5BQkxFX2JtOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KIAogI2VsaWYgKCBjb25maWdVU0VfVElNRVJfSU5TVEFOQ0UgPT0gNCApCiAKLSAgICAjZGVmaW5lIFRJQ0tfSU5UX3ZlY3QgICAgICAgUlRDX0NOVF92ZWN0Ci0gICAgI2RlZmluZSBJTlRfRkxBR1MgICAgICAgICAgIFJUQ19JTlRGTEFHUwotICAgICNkZWZpbmUgSU5UX01BU0sgICAgICAgICAgICBSVENfT1ZGX2JtCisgICAgI2RlZmluZSBUSUNLX0lOVF92ZWN0ICAgIFJUQ19DTlRfdmVjdAorICAgICNkZWZpbmUgSU5UX0ZMQUdTICAgICAgICBSVENfSU5URkxBR1MKKyAgICAjZGVmaW5lIElOVF9NQVNLICAgICAgICAgUlRDX09WRl9ibQogCi0gICAgLyogSGVydHogdG8gcGVyaW9kIGZvciBSVEMgc2V0dXAgKi8KLSAgICAjZGVmaW5lIFJUQ19QRVJJT0RfSFooeCkgICAgKCAzMjc2OCAqICggKCAxLjAgLyB4ICkgKSApCi0gICAgI2RlZmluZSBUSUNLX2luaXQoKSAgICAgICAgIHsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoUlRDLlNUQVRVUyA+IDApOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUQy5DVFJMQSAgICA9IFJUQ19QUkVTQ0FMRVJfRElWMV9nYyB8IDEgPDwgUlRDX1JUQ0VOX2JwOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUQy5QRVIgICAgICA9IFJUQ19QRVJJT0RfSFooY29uZmlnVElDS19SQVRFX0haKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVEMuSU5UQ1RSTCAgfD0gMSA8PCBSVENfT1ZGX2JwOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKy8qIEhlcnR6IHRvIHBlcmlvZCBmb3IgUlRDIHNldHVwICovCisgICAgI2RlZmluZSBSVENfUEVSSU9EX0haKCB4ICkgICAgKCAzMjc2OCAqICggKCAxLjAgLyB4ICkgKSApCisgICAgI2RlZmluZSBUSUNLX2luaXQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHdoaWxlKCBSVEMuU1RBVFVTID4gMCApIHs7IH0gICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFJUQy5DVFJMQSA9IFJUQ19QUkVTQ0FMRVJfRElWMV9nYyB8IDEgPDwgUlRDX1JUQ0VOX2JwOyBcCisgICAgICAgIFJUQy5QRVIgPSBSVENfUEVSSU9EX0haKCBjb25maWdUSUNLX1JBVEVfSFogKTsgICAgICAgICBcCisgICAgICAgIFJUQy5JTlRDVFJMIHw9IDEgPDwgUlRDX09WRl9icDsgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQogCi0jZWxzZQorI2Vsc2UgLyogaWYgKCBjb25maWdVU0VfVElNRVJfSU5TVEFOQ0UgPT0gMCApICovCiAgICAgI3VuZGVmIFRJQ0tfSU5UX3ZlY3QKICAgICAjdW5kZWYgSU5UX0ZMQUdTCiAgICAgI3VuZGVmIElOVF9NQVNLCiAgICAgI3VuZGVmIFRJQ0tfaW5pdCgpCiAgICAgI2Vycm9yIEludmFsaWQgdGltZXIgc2V0dGluZy4KLSNlbmRpZgorI2VuZGlmIC8qIGlmICggY29uZmlnVVNFX1RJTUVSX0lOU1RBTkNFID09IDAgKSAqLwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApkaWZmIC0tZ2l0IGEvcG9ydGFibGUvR0NDL0FWUl9NZWdhMC9wb3J0bWFjcm8uaCBiL3BvcnRhYmxlL0dDQy9BVlJfTWVnYTAvcG9ydG1hY3JvLmgKaW5kZXggMDg1YTI3Zi4uYTQ2NDIxNSAxMDA2NDQKLS0tIGEvcG9ydGFibGUvR0NDL0FWUl9NZWdhMC9wb3J0bWFjcm8uaAorKysgYi9wb3J0YWJsZS9HQ0MvQVZSX01lZ2EwL3BvcnRtYWNyby5oCkBAIC0yMywxNCArMjMsMTYgQEAKICAqIGh0dHA6Ly9hd3MuYW1hem9uLmNvbS9mcmVlcnRvcwogICoKICAqIDEgdGFiID09IDQgc3BhY2VzIQotKi8KKyAqLwogCiAjaWZuZGVmIFBPUlRNQUNST19ICiAjZGVmaW5lIFBPUlRNQUNST19ICiAKKy8qICpJTkRFTlQtT0ZGKiAqLwogI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKKyAgICBleHRlcm4gIkMiIHsKICNlbmRpZgorLyogKklOREVOVC1PTiogKi8KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogUG9ydCBzcGVjaWZpYyBkZWZpbml0aW9ucy4KQEAgLTQzLDY0ICs0NSw2NiBAQAogICovCiAKIC8qIFR5cGUgZGVmaW5pdGlvbnMuICovCi0jZGVmaW5lIHBvcnRDSEFSIGNoYXIKLSNkZWZpbmUgcG9ydEZMT0FUIGZsb2F0Ci0jZGVmaW5lIHBvcnRET1VCTEUgZG91YmxlCi0jZGVmaW5lIHBvcnRMT05HIGxvbmcKLSNkZWZpbmUgcG9ydFNIT1JUIGludAotI2RlZmluZSBwb3J0U1RBQ0tfVFlQRSB1aW50OF90Ci0jZGVmaW5lIHBvcnRCQVNFX1RZUEUgY2hhcgorI2RlZmluZSBwb3J0Q0hBUiAgICAgICAgICAgICAgICAgY2hhcgorI2RlZmluZSBwb3J0RkxPQVQgICAgICAgICAgICAgICAgZmxvYXQKKyNkZWZpbmUgcG9ydERPVUJMRSAgICAgICAgICAgICAgIGRvdWJsZQorI2RlZmluZSBwb3J0TE9ORyAgICAgICAgICAgICAgICAgbG9uZworI2RlZmluZSBwb3J0U0hPUlQgICAgICAgICAgICAgICAgaW50CisjZGVmaW5lIHBvcnRTVEFDS19UWVBFICAgICAgICAgICB1aW50OF90CisjZGVmaW5lIHBvcnRCQVNFX1RZUEUgICAgICAgICAgICBjaGFyCiAKLSNkZWZpbmUgcG9ydFBPSU5URVJfU0laRV9UWVBFIHVpbnQxNl90CisjZGVmaW5lIHBvcnRQT0lOVEVSX1NJWkVfVFlQRSAgICB1aW50MTZfdAogCi10eXBlZGVmIHBvcnRTVEFDS19UWVBFIFN0YWNrVHlwZV90OwotdHlwZWRlZiBzaWduZWQgY2hhciAgICBCYXNlVHlwZV90OwotdHlwZWRlZiB1bnNpZ25lZCBjaGFyICBVQmFzZVR5cGVfdDsKK3R5cGVkZWYgcG9ydFNUQUNLX1RZUEUgICBTdGFja1R5cGVfdDsKK3R5cGVkZWYgc2lnbmVkIGNoYXIgICAgICBCYXNlVHlwZV90OwordHlwZWRlZiB1bnNpZ25lZCBjaGFyICAgIFVCYXNlVHlwZV90OwogCi0jaWYgKGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSkKLXR5cGVkZWYgdWludDE2X3QgVGlja1R5cGVfdDsKLSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoVGlja1R5cGVfdCkweGZmZmYKKyNpZiAoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApCisgICAgdHlwZWRlZiB1aW50MTZfdCAgICAgVGlja1R5cGVfdDsKKyAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmCiAjZWxzZQotdHlwZWRlZiB1aW50MzJfdCBUaWNrVHlwZV90OwotI2RlZmluZSBwb3J0TUFYX0RFTEFZIChUaWNrVHlwZV90KTB4ZmZmZmZmZmZVTAorICAgIHR5cGVkZWYgdWludDMyX3QgICAgIFRpY2tUeXBlX3Q7CisgICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTAogI2VuZGlmCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyogQ3JpdGljYWwgc2VjdGlvbiBtYW5hZ2VtZW50LiAqLwotI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgYXNtIHZvbGF0aWxlKCJpbiBfX3RtcF9yZWdfXywgX19TUkVHX18iKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBhc20gdm9sYXRpbGUoImNsaSIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGFzbSB2b2xhdGlsZSgicHVzaCBfX3RtcF9yZWdfXyIpCisjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpICAgICAgICAgICAgICAgICAgICAgXAorICAgIGFzbSB2b2xhdGlsZSAoICJpbiBfX3RtcF9yZWdfXywgX19TUkVHX18iICk7IFwKKyAgICBhc20gdm9sYXRpbGUgKCAiY2xpIiApOyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgYXNtIHZvbGF0aWxlICggInB1c2ggX190bXBfcmVnX18iICkKIAotI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgYXNtIHZvbGF0aWxlKCJwb3AgX190bXBfcmVnX18iKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBhc20gdm9sYXRpbGUoIm91dCBfX1NSRUdfXywgX190bXBfcmVnX18iKQorI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpICAgICAgICAgICAgIFwKKyAgICBhc20gdm9sYXRpbGUgKCAicG9wIF9fdG1wX3JlZ19fIiApOyBcCisgICAgYXNtIHZvbGF0aWxlICggIm91dCBfX1NSRUdfXywgX190bXBfcmVnX18iICkKIAotI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgYXNtIHZvbGF0aWxlKCJjbGkiIDo6KTsKLSNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkgYXNtIHZvbGF0aWxlKCJzZWkiIDo6KTsKKyNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpICAgIGFzbSB2b2xhdGlsZSAoICJjbGkiIDo6KTsKKyNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkgICAgIGFzbSB2b2xhdGlsZSAoICJzZWkiIDo6KTsKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWNzLiAqLwotI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RIICgtMSkKLSNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TICgoVGlja1R5cGVfdCkxMDAwIC8gY29uZmlnVElDS19SQVRFX0haKQotI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQgMQotI2RlZmluZSBwb3J0Tk9QKCkgYXNtIHZvbGF0aWxlKCJub3AiKTsKKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSCAgICAgICggLTEgKQorI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMgICAgKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkKKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UICAgIDEKKyNkZWZpbmUgcG9ydE5PUCgpICAgIGFzbSB2b2xhdGlsZSAoICJub3AiICk7CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyogS2VybmVsIHV0aWxpdGllcy4gKi8KLWV4dGVybiB2b2lkIHZQb3J0WWllbGQodm9pZCkgX19hdHRyaWJ1dGVfXygobmFrZWQpKTsKLSNkZWZpbmUgcG9ydFlJRUxEKCkgdlBvcnRZaWVsZCgpCitleHRlcm4gdm9pZCB2UG9ydFlpZWxkKCB2b2lkICkgX19hdHRyaWJ1dGVfXyggKCBuYWtlZCApICk7CisjZGVmaW5lIHBvcnRZSUVMRCgpICAgICAgICAgICAgIHZQb3J0WWllbGQoKQogCi1leHRlcm4gdm9pZCB2UG9ydFlpZWxkRnJvbUlTUih2b2lkKSBfX2F0dHJpYnV0ZV9fKChuYWtlZCkpOwotI2RlZmluZSBwb3J0WUlFTERfRlJPTV9JU1IoKSB2UG9ydFlpZWxkRnJvbUlTUigpCitleHRlcm4gdm9pZCB2UG9ydFlpZWxkRnJvbUlTUiggdm9pZCApIF9fYXR0cmlidXRlX18oICggbmFrZWQgKSApOworI2RlZmluZSBwb3J0WUlFTERfRlJPTV9JU1IoKSAgICB2UG9ydFlpZWxkRnJvbUlTUigpCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovCi0jZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzKSB2b2lkIHZGdW5jdGlvbih2b2lkICpwdlBhcmFtZXRlcnMpCi0jZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzKSB2b2lkIHZGdW5jdGlvbih2b2lkICpwdlBhcmFtZXRlcnMpCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkKKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgICAgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQogCisvKiAqSU5ERU5ULU9GRiogKi8KICNpZmRlZiBfX2NwbHVzcGx1cwotfQorICAgIH0KICNlbmRpZgorLyogKklOREVOVC1PTiogKi8KIAogI2VuZGlmIC8qIFBPUlRNQUNST19IICovCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9HQ0MvQ09SVFVTX0FQUzMvcG9ydC5jIGIvcG9ydGFibGUvR0NDL0NPUlRVU19BUFMzL3BvcnQuYwppbmRleCBlMTRmN2YwLi5iNmM1NWEzIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9HQ0MvQ09SVFVTX0FQUzMvcG9ydC5jCisrKyBiL3BvcnRhYmxlL0dDQy9DT1JUVVNfQVBTMy9wb3J0LmMKQEAgLTM4LDcgKzM4LDcgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFRoZSBpbml0aWFsIFBTUiBoYXMgdGhlIFByZXZpb3VzIEludGVycnVwdCBFbmFibGVkIChQSUVOKSBmbGFnIHNldC4gKi8NCi0jZGVmaW5lIHBvcnRJTklUSUFMX1BTUiAgICAoIDB4MDAwMjAwMDAgKQ0KKyNkZWZpbmUgcG9ydElOSVRJQUxfUFNSCQkJKCAweDAwMDIwMDAwICkNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCkBAIC00OCwxMDAgKzQ4LDk4IEBACiBzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICk7DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQotU3RhY2tUeXBlX3QgKiBweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICogcHhUb3BPZlN0YWNrLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYXNrRnVuY3Rpb25fdCBweENvZGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KK1N0YWNrVHlwZV90ICpweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICogcHhUb3BPZlN0YWNrLCBUYXNrRnVuY3Rpb25fdCBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycyApDQogew0KLSAgICAvKiBNYWtlIHNwYWNlIG9uIHRoZSBzdGFjayBmb3IgdGhlIGNvbnRleHQgLSB0aGlzIGxlYXZlcyBhIGNvdXBsZSBvZiBzcGFjZXMNCi0gICAgICogZW1wdHkuICAqLw0KLSAgICBweFRvcE9mU3RhY2sgLT0gMjA7DQorCS8qIE1ha2Ugc3BhY2Ugb24gdGhlIHN0YWNrIGZvciB0aGUgY29udGV4dCAtIHRoaXMgbGVhdmVzIGEgY291cGxlIG9mIHNwYWNlcw0KKwllbXB0eS4gICovDQorCXB4VG9wT2ZTdGFjayAtPSAyMDsNCiANCi0gICAgLyogRmlsbCB0aGUgcmVnaXN0ZXJzIHdpdGgga25vd24gdmFsdWVzIHRvIGFzc2lzdCBkZWJ1Z2dpbmcuICovDQotICAgIHB4VG9wT2ZTdGFja1sgMTYgXSA9IDA7DQotICAgIHB4VG9wT2ZTdGFja1sgMTUgXSA9IHBvcnRJTklUSUFMX1BTUjsNCi0gICAgcHhUb3BPZlN0YWNrWyAxNCBdID0gKCB1aW50MzJfdCApIHB4Q29kZTsNCi0gICAgcHhUb3BPZlN0YWNrWyAxMyBdID0gMHgwMDAwMDAwMFVMOyAvKiBSMTUuICovDQotICAgIHB4VG9wT2ZTdGFja1sgMTIgXSA9IDB4MDAwMDAwMDBVTDsgLyogUjE0LiAqLw0KLSAgICBweFRvcE9mU3RhY2tbIDExIF0gPSAweDBkMGQwZDBkVUw7DQotICAgIHB4VG9wT2ZTdGFja1sgMTAgXSA9IDB4MGMwYzBjMGNVTDsNCi0gICAgcHhUb3BPZlN0YWNrWyA5IF0gPSAweDBiMGIwYjBiVUw7DQotICAgIHB4VG9wT2ZTdGFja1sgOCBdID0gMHgwYTBhMGEwYVVMOw0KLSAgICBweFRvcE9mU3RhY2tbIDcgXSA9IDB4MDkwOTA5MDlVTDsNCi0gICAgcHhUb3BPZlN0YWNrWyA2IF0gPSAweDA4MDgwODA4VUw7DQotICAgIHB4VG9wT2ZTdGFja1sgNSBdID0gMHgwNzA3MDcwN1VMOw0KLSAgICBweFRvcE9mU3RhY2tbIDQgXSA9IDB4MDYwNjA2MDZVTDsNCi0gICAgcHhUb3BPZlN0YWNrWyAzIF0gPSAweDA1MDUwNTA1VUw7DQotICAgIHB4VG9wT2ZTdGFja1sgMiBdID0gMHgwNDA0MDQwNFVMOw0KLSAgICBweFRvcE9mU3RhY2tbIDEgXSA9IDB4MDMwMzAzMDNVTDsNCi0gICAgcHhUb3BPZlN0YWNrWyAwIF0gPSAoIHVpbnQzMl90ICkgcHZQYXJhbWV0ZXJzOw0KKwkvKiBGaWxsIHRoZSByZWdpc3RlcnMgd2l0aCBrbm93biB2YWx1ZXMgdG8gYXNzaXN0IGRlYnVnZ2luZy4gKi8NCisJcHhUb3BPZlN0YWNrWyAxNiBdID0gMDsNCisJcHhUb3BPZlN0YWNrWyAxNSBdID0gcG9ydElOSVRJQUxfUFNSOw0KKwlweFRvcE9mU3RhY2tbIDE0IF0gPSAoIHVpbnQzMl90ICkgcHhDb2RlOw0KKwlweFRvcE9mU3RhY2tbIDEzIF0gPSAweDAwMDAwMDAwVUw7IC8qIFIxNS4gKi8NCisJcHhUb3BPZlN0YWNrWyAxMiBdID0gMHgwMDAwMDAwMFVMOyAvKiBSMTQuICovDQorCXB4VG9wT2ZTdGFja1sgMTEgXSA9IDB4MGQwZDBkMGRVTDsNCisJcHhUb3BPZlN0YWNrWyAxMCBdID0gMHgwYzBjMGMwY1VMOw0KKwlweFRvcE9mU3RhY2tbIDkgXSA9IDB4MGIwYjBiMGJVTDsNCisJcHhUb3BPZlN0YWNrWyA4IF0gPSAweDBhMGEwYTBhVUw7DQorCXB4VG9wT2ZTdGFja1sgNyBdID0gMHgwOTA5MDkwOVVMOw0KKwlweFRvcE9mU3RhY2tbIDYgXSA9IDB4MDgwODA4MDhVTDsNCisJcHhUb3BPZlN0YWNrWyA1IF0gPSAweDA3MDcwNzA3VUw7DQorCXB4VG9wT2ZTdGFja1sgNCBdID0gMHgwNjA2MDYwNlVMOw0KKwlweFRvcE9mU3RhY2tbIDMgXSA9IDB4MDUwNTA1MDVVTDsNCisJcHhUb3BPZlN0YWNrWyAyIF0gPSAweDA0MDQwNDA0VUw7DQorCXB4VG9wT2ZTdGFja1sgMSBdID0gMHgwMzAzMDMwM1VMOw0KKwlweFRvcE9mU3RhY2tbIDAgXSA9ICggdWludDMyX3QgKSBwdlBhcmFtZXRlcnM7DQogDQotICAgIHJldHVybiBweFRvcE9mU3RhY2s7DQorCXJldHVybiBweFRvcE9mU3RhY2s7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIEJhc2VUeXBlX3QgeFBvcnRTdGFydFNjaGVkdWxlciggdm9pZCApDQogew0KLSAgICAvKiBTZXQtdXAgdGhlIHRpbWVyIGludGVycnVwdC4gKi8NCi0gICAgcHJ2U2V0dXBUaW1lckludGVycnVwdCgpOw0KKwkvKiBTZXQtdXAgdGhlIHRpbWVyIGludGVycnVwdC4gKi8NCisJcHJ2U2V0dXBUaW1lckludGVycnVwdCgpOw0KIA0KLSAgICAvKiBJbnRlZ3JhdGVkIEludGVycnVwdCBDb250cm9sbGVyOiBFbmFibGUgYWxsIGludGVycnVwdHMuICovDQotICAgIGljLT5pZW4gPSAxOw0KKwkvKiBJbnRlZ3JhdGVkIEludGVycnVwdCBDb250cm9sbGVyOiBFbmFibGUgYWxsIGludGVycnVwdHMuICovDQorCWljLT5pZW4gPSAxOw0KIA0KLSAgICAvKiBSZXN0b3JlIGNhbGxlZSBzYXZlZCByZWdpc3RlcnMuICovDQotICAgIHBvcnRSRVNUT1JFX0NPTlRFWFQoKTsNCisJLyogUmVzdG9yZSBjYWxsZWUgc2F2ZWQgcmVnaXN0ZXJzLiAqLw0KKwlwb3J0UkVTVE9SRV9DT05URVhUKCk7DQogDQotICAgIC8qIFNob3VsZCBub3QgZ2V0IGhlcmUuICovDQotICAgIHJldHVybiAwOw0KKwkvKiBTaG91bGQgbm90IGdldCBoZXJlLiAqLw0KKwlyZXR1cm4gMDsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogc3RhdGljIHZvaWQgcHJ2U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApDQogew0KLSAgICAvKiBFbmFibGUgdGltZXIgaW50ZXJydXB0cyAqLw0KLSAgICBjb3VudGVyMS0+cmVsb2FkID0gKCBjb25maWdDUFVfQ0xPQ0tfSFogLyBjb25maWdUSUNLX1JBVEVfSFogKSAtIDE7DQotICAgIGNvdW50ZXIxLT52YWx1ZSA9IGNvdW50ZXIxLT5yZWxvYWQ7DQotICAgIGNvdW50ZXIxLT5tYXNrID0gMTsNCisJLyogRW5hYmxlIHRpbWVyIGludGVycnVwdHMgKi8NCisJY291bnRlcjEtPnJlbG9hZCA9ICggY29uZmlnQ1BVX0NMT0NLX0haIC8gY29uZmlnVElDS19SQVRFX0haICkgLSAxOw0KKwljb3VudGVyMS0+dmFsdWUgPSBjb3VudGVyMS0+cmVsb2FkOw0KKwljb3VudGVyMS0+bWFzayA9IDE7DQogDQotICAgIC8qIFNldCB0aGUgSVJRIEhhbmRsZXIgcHJpb3JpdHkgYW5kIGVuYWJsZSBpdC4gKi8NCi0gICAgaXJxWyBJUlFfQ09VTlRFUjEgXS5pZW4gPSAxOw0KKwkvKiBTZXQgdGhlIElSUSBIYW5kbGVyIHByaW9yaXR5IGFuZCBlbmFibGUgaXQuICovDQorCWlycVsgSVJRX0NPVU5URVIxIF0uaWVuID0gMTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVHJhcCAzMSBoYW5kbGVyLiAqLw0KLXZvaWQgaW50ZXJydXB0MzFfaGFuZGxlciggdm9pZCApIF9fYXR0cmlidXRlX18oICggbmFrZWQgKSApOw0KK3ZvaWQgaW50ZXJydXB0MzFfaGFuZGxlciggdm9pZCApIF9fYXR0cmlidXRlX18oKG5ha2VkKSk7DQogdm9pZCBpbnRlcnJ1cHQzMV9oYW5kbGVyKCB2b2lkICkNCiB7DQotICAgIHBvcnRTQVZFX0NPTlRFWFQoKTsNCi0gICAgX19hc20gdm9sYXRpbGUgKCAiY2FsbCB2VGFza1N3aXRjaENvbnRleHQiICk7DQotICAgIHBvcnRSRVNUT1JFX0NPTlRFWFQoKTsNCisJcG9ydFNBVkVfQ09OVEVYVCgpOw0KKwlfX2FzbSB2b2xhdGlsZSAoICJjYWxsIHZUYXNrU3dpdGNoQ29udGV4dCIgKTsNCisJcG9ydFJFU1RPUkVfQ09OVEVYVCgpOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi1zdGF0aWMgdm9pZCBwcnZQcm9jZXNzVGljayggdm9pZCApIF9fYXR0cmlidXRlX18oICggbm9pbmxpbmUgKSApOw0KK3N0YXRpYyB2b2lkIHBydlByb2Nlc3NUaWNrKCB2b2lkICkgX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKTsNCiBzdGF0aWMgdm9pZCBwcnZQcm9jZXNzVGljayggdm9pZCApDQogew0KLSAgICBpZiggeFRhc2tJbmNyZW1lbnRUaWNrKCkgIT0gcGRGQUxTRSApDQotICAgIHsNCi0gICAgICAgIHZUYXNrU3dpdGNoQ29udGV4dCgpOw0KLSAgICB9DQotDQotICAgIC8qIENsZWFyIHRoZSBUaWNrIEludGVycnVwdC4gKi8NCi0gICAgY291bnRlcjEtPmV4cGlyZWQgPSAwOw0KKwlpZiggeFRhc2tJbmNyZW1lbnRUaWNrKCkgIT0gcGRGQUxTRSApDQorCXsNCisJCXZUYXNrU3dpdGNoQ29udGV4dCgpOw0KKwl9DQorCQkNCisJLyogQ2xlYXIgdGhlIFRpY2sgSW50ZXJydXB0LiAqLw0KKwljb3VudGVyMS0+ZXhwaXJlZCA9IDA7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFRpbWVyIDEgaW50ZXJydXB0IGhhbmRsZXIsIHVzZWQgZm9yIHRpY2sgaW50ZXJydXB0LiAqLw0KLXZvaWQgaW50ZXJydXB0N19oYW5kbGVyKCB2b2lkICkgX19hdHRyaWJ1dGVfXyggKCBuYWtlZCApICk7DQordm9pZCBpbnRlcnJ1cHQ3X2hhbmRsZXIoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fKChuYWtlZCkpOw0KIHZvaWQgaW50ZXJydXB0N19oYW5kbGVyKCB2b2lkICkNCiB7DQotICAgIHBvcnRTQVZFX0NPTlRFWFQoKTsNCi0gICAgcHJ2UHJvY2Vzc1RpY2soKTsNCi0gICAgcG9ydFJFU1RPUkVfQ09OVEVYVCgpOw0KKwlwb3J0U0FWRV9DT05URVhUKCk7DQorCXBydlByb2Nlc3NUaWNrKCk7DQorCXBvcnRSRVNUT1JFX0NPTlRFWFQoKTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogdm9pZCB2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApDQogew0KLSAgICAvKiBOb3RoaW5nIHRvIGRvLiBVbmxpa2VseSB0byB3YW50IHRvIGVuZC4gKi8NCisJLyogTm90aGluZyB0byBkby4gVW5saWtlbHkgdG8gd2FudCB0byBlbmQuICovDQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0dDQy9DT1JUVVNfQVBTMy9wb3J0bWFjcm8uaCBiL3BvcnRhYmxlL0dDQy9DT1JUVVNfQVBTMy9wb3J0bWFjcm8uaAppbmRleCAxNzg4ZWJiLi5kYmJlM2E2IDEwMDY0NAotLS0gYS9wb3J0YWJsZS9HQ0MvQ09SVFVTX0FQUzMvcG9ydG1hY3JvLmgKKysrIGIvcG9ydGFibGUvR0NDL0NPUlRVU19BUFMzL3BvcnRtYWNyby5oCkBAIC0yNiwxMyArMjYsMTMgQEAKICAqLw0KIA0KICNpZm5kZWYgUE9SVE1BQ1JPX0gNCi0gICAgI2RlZmluZSBQT1JUTUFDUk9fSA0KKyNkZWZpbmUgUE9SVE1BQ1JPX0gNCiANCi0gICAgI2lmZGVmIF9fY3BsdXNwbHVzDQotICAgICAgICBleHRlcm4gIkMiIHsNCi0gICAgI2VuZGlmDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQogDQotICAgICNpbmNsdWRlIDxtYWNoaW5lL2NwdS5oPg0KKyNpbmNsdWRlIDxtYWNoaW5lL2NwdS5oPg0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgKiBQb3J0IHNwZWNpZmljIGRlZmluaXRpb25zLg0KQEAgLTQ1LDEwOCArNDUsMTA4IEBACiAgKi8NCiANCiAvKiBUeXBlIGRlZmluaXRpb25zLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRDSEFSICAgICAgICAgIGNoYXINCi0gICAgI2RlZmluZSBwb3J0RkxPQVQgICAgICAgICBmbG9hdA0KLSAgICAjZGVmaW5lIHBvcnRET1VCTEUgICAgICAgIGRvdWJsZQ0KLSAgICAjZGVmaW5lIHBvcnRMT05HICAgICAgICAgIGxvbmcNCi0gICAgI2RlZmluZSBwb3J0U0hPUlQgICAgICAgICBzaG9ydA0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19UWVBFICAgIHVpbnQzMl90DQotICAgICNkZWZpbmUgcG9ydEJBU0VfVFlQRSAgICAgbG9uZw0KKyNkZWZpbmUgcG9ydENIQVIJCWNoYXINCisjZGVmaW5lIHBvcnRGTE9BVAkJZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUJCWRvdWJsZQ0KKyNkZWZpbmUgcG9ydExPTkcJCWxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVAkJc2hvcnQNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFCXVpbnQzMl90DQorI2RlZmluZSBwb3J0QkFTRV9UWVBFCWxvbmcNCiANCi0gICAgdHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSAgIFN0YWNrVHlwZV90Ow0KLSAgICB0eXBlZGVmIGxvbmcgICAgICAgICAgICAgQmFzZVR5cGVfdDsNCi0gICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nICAgIFVCYXNlVHlwZV90Ow0KK3R5cGVkZWYgcG9ydFNUQUNLX1RZUEUgU3RhY2tUeXBlX3Q7DQordHlwZWRlZiBsb25nIEJhc2VUeXBlX3Q7DQordHlwZWRlZiB1bnNpZ25lZCBsb25nIFVCYXNlVHlwZV90Ow0KIA0KLSAgICAjaWYgKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KLSAgICAgICAgdHlwZWRlZiB1aW50MTZfdCAgICAgVGlja1R5cGVfdDsNCi0gICAgICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmYNCi0gICAgI2Vsc2UNCi0gICAgICAgIHR5cGVkZWYgdWludDMyX3QgICAgIFRpY2tUeXBlX3Q7DQotICAgICAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQotICAgICNlbmRpZg0KKyNpZiggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCisJdHlwZWRlZiB1aW50MTZfdCBUaWNrVHlwZV90Ow0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQorI2Vsc2UNCisJdHlwZWRlZiB1aW50MzJfdCBUaWNrVHlwZV90Ow0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQorI2VuZGlmDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogQXJjaGl0ZWN0dXJlIHNwZWNpZmljcy4gKi8NCi0gICAgI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RIICAgICAgICAgICAgICAgKCAtMSApDQotICAgICNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TICAgICAgICAgICAgICggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQotICAgICNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UICAgICAgICAgICAgIDQNCi0gICAgI2RlZmluZSBwb3J0Tk9QKCkgICAgX19hc21fXyB2b2xhdGlsZSAoICJtb3YgcjAsIHIwIiApDQotICAgICNkZWZpbmUgcG9ydENSSVRJQ0FMX05FU1RJTkdfSU5fVENCICAgIDENCi0gICAgI2RlZmluZSBwb3J0SVJRX1RSQVBfWUlFTEQgICAgICAgICAgICAgMzENCisjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEgJCQkJCQkJKCAtMSApDQorI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMJCQkJCQkJKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCisjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVAkJCQkJCQk0DQorI2RlZmluZSBwb3J0Tk9QKCkJCQkJCQkJCQlfX2FzbV9fIHZvbGF0aWxlICggIm1vdiByMCwgcjAiICkNCisjZGVmaW5lIHBvcnRDUklUSUNBTF9ORVNUSU5HX0lOX1RDQgkJCQkJMQ0KKyNkZWZpbmUgcG9ydElSUV9UUkFQX1lJRUxECQkJCQkJCTMxDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGFzayB1dGlsaXRpZXMuICovDQogDQotICAgIGV4dGVybiB2b2lkIHZQb3J0WWllbGQoIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2UG9ydFlpZWxkKCB2b2lkICk7DQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KLSAgICAjZGVmaW5lIHBvcnRZSUVMRCgpICAgIGFzbSBfX3ZvbGF0aWxlX18gKCAiIHRyYXAgIyUwICIgOiA6ICJpIiAoIHBvcnRJUlFfVFJBUF9ZSUVMRCApIDogIm1lbW9yeSIgKQ0KKyNkZWZpbmUgcG9ydFlJRUxEKCkJCWFzbSBfX3ZvbGF0aWxlX18oICIgdHJhcCAjJTAgIjo6ImkiKHBvcnRJUlFfVFJBUF9ZSUVMRCk6Im1lbW9yeSIpDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KLSAgICBleHRlcm4gdm9pZCB2VGFza0VudGVyQ3JpdGljYWwoIHZvaWQgKTsNCi0gICAgZXh0ZXJuIHZvaWQgdlRhc2tFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCi0gICAgI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKSAgICB2VGFza0VudGVyQ3JpdGljYWwoKQ0KLSAgICAjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkgICAgIHZUYXNrRXhpdENyaXRpY2FsKCkNCitleHRlcm4gdm9pZCB2VGFza0VudGVyQ3JpdGljYWwoIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2VGFza0V4aXRDcml0aWNhbCggdm9pZCApOw0KKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkJCXZUYXNrRW50ZXJDcml0aWNhbCgpDQorI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpCQkJdlRhc2tFeGl0Q3JpdGljYWwoKQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBDcml0aWNhbCBzZWN0aW9uIG1hbmFnZW1lbnQuICovDQotICAgICNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpICAgIGNwdV9pbnRfZGlzYWJsZSgpDQotICAgICNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkgICAgIGNwdV9pbnRfZW5hYmxlKCkNCisjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAJY3B1X2ludF9kaXNhYmxlKCkNCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpIAljcHVfaW50X2VuYWJsZSgpDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KLSAgICAjZGVmaW5lIHBvcnRZSUVMRF9GUk9NX0lTUiggeEhpZ2hlclByaW9yaXR5VGFza1dva2VuICkgICAgaWYoIHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiAhPSBwZEZBTFNFICkgdlRhc2tTd2l0Y2hDb250ZXh0KCkNCisjZGVmaW5lIHBvcnRZSUVMRF9GUk9NX0lTUiggeEhpZ2hlclByaW9yaXR5VGFza1dva2VuICkgaWYoIHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiAhPSBwZEZBTFNFICkgdlRhc2tTd2l0Y2hDb250ZXh0KCkNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQotICAgICNkZWZpbmUgcG9ydFNBVkVfQ09OVEVYVCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgYXNtIF9fdm9sYXRpbGVfXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAic3ViCXIxLCAjNjgJCQkJCVxuIi8qIE1ha2Ugc3BhY2Ugb24gdGhlIHN0YWNrIGZvciB0aGUgY29udGV4dC4gKi8gICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICJzdGQJcjIsIFtyMV0gKyAJMAkJCVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICJzdHEJcjQsIFtyMV0gKwk4CQkJXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgInN0cQlyOCwgW3IxXSArCTI0CQkJXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgInN0cQlyMTIsIFtyMV0gKwk0MAkJCVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICJtb3YJcjYsIHJ0dAkJCQkJXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgIm1vdglyNywgcHNyCQkJCQlcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAic3RkCXI2LCBbcjFdICsJNTYJCQlcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAibW92aGkJcjIsICMxNjM4NAkJCQlcbiIgICAvKiBTZXQgdGhlIHBvaW50ZXIgdG8gdGhlIElDLiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAibGR1YglyMywgW3IyXSArIDIJCQlcbiIgICAvKiBMb2FkIHRoZSBjdXJyZW50IGludGVycnVwdCBtYXNrLiAqLyAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAic3QJCXIzLCBbcjFdKyA2NAkJCVxuIiAgIC8qIFN0b3JlIHRoZSBpbnRlcnJ1cHQgbWFzayBvbiB0aGUgc3RhY2suICovICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICJsZAkJcjIsIFtyMF0rc2hvcnQocHhDdXJyZW50VENCKQlcbiIvKiBMb2FkIHRoZSBwb2ludGVyIHRvIHRoZSBUQ0IuICovICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgInN0CQlyMSwgW3IyXQkJCQlcbiIgICAvKiBTYXZlIHRoZSBzdGFjayBwb2ludGVyIGludG8gdGhlIFRDQi4gKi8gICAgICAgICAgICAgICAgICBcDQotICAgICAgICAibW92CXIxNCwgcjEJCQkJCVxuIiAgIC8qIENvbXBpbGVyIGV4cGVjdHMgcjE0IHRvIGJlIHNldCB0byB0aGUgZnVuY3Rpb24gc3RhY2suICovIFwNCi0gICAgKTsNCisjZGVmaW5lIHBvcnRTQVZFX0NPTlRFWFQoKQkJCQlcDQorCWFzbSBfX3ZvbGF0aWxlX18JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCSgJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJInN1YglyMSwgIzY4CQkJCQlcbiIgLyogTWFrZSBzcGFjZSBvbiB0aGUgc3RhY2sgZm9yIHRoZSBjb250ZXh0LiAqLwkJCQkJCQlcDQorCQkic3RkCXIyLCBbcjFdICsgCTAJCQlcbiIJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJInN0cQlyNCwgW3IxXSArCTgJCQlcbiIJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJInN0cQlyOCwgW3IxXSArCTI0CQkJXG4iCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCSJzdHEJcjEyLCBbcjFdICsJNDAJCQlcbiIJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJIm1vdglyNiwgcnR0CQkJCQlcbiIJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJIm1vdglyNywgcHNyCQkJCQlcbiIJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJInN0ZAlyNiwgW3IxXSArCTU2CQkJXG4iCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCSJtb3ZoaQlyMiwgIzE2Mzg0CQkJCVxuIgkvKiBTZXQgdGhlIHBvaW50ZXIgdG8gdGhlIElDLiAqLwkJCQkJCQkJCQlcDQorCQkibGR1YglyMywgW3IyXSArIDIJCQlcbiIJLyogTG9hZCB0aGUgY3VycmVudCBpbnRlcnJ1cHQgbWFzay4gKi8JCQkJCQkJCQlcDQorCQkic3QJCXIzLCBbcjFdKyA2NAkJCVxuIgkvKiBTdG9yZSB0aGUgaW50ZXJydXB0IG1hc2sgb24gdGhlIHN0YWNrLiAqLyAJCQkJCQkJXA0KKwkJImxkCQlyMiwgW3IwXStzaG9ydChweEN1cnJlbnRUQ0IpCVxuIgkvKiBMb2FkIHRoZSBwb2ludGVyIHRvIHRoZSBUQ0IuICovCQkJCQkJCQlcDQorCQkic3QJCXIxLCBbcjJdCQkJCVxuIgkvKiBTYXZlIHRoZSBzdGFjayBwb2ludGVyIGludG8gdGhlIFRDQi4gKi8JCQkJCQkJCVwNCisJCSJtb3YJcjE0LCByMQkJCQkJXG4iCS8qIENvbXBpbGVyIGV4cGVjdHMgcjE0IHRvIGJlIHNldCB0byB0aGUgZnVuY3Rpb24gc3RhY2suICovCQkJCVwNCisJKTsNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQotICAgICNkZWZpbmUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIGFzbSBfX3ZvbGF0aWxlX18gKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAibGQJCXIyLCBbcjBdK3Nob3J0KHB4Q3VycmVudFRDQikJXG4iLyogTG9hZCB0aGUgVENCIHRvIGZpbmQgdGhlIHN0YWNrIHBvaW50ZXIgYW5kIGNvbnRleHQuICovXA0KLSAgICAgICAgImxkCQlyMSwgW3IyXQkJCQlcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgIm1vdmhpCXIyLCAjMTYzODQJCQkJXG4iICAgLyogU2V0IHRoZSBwb2ludGVyIHRvIHRoZSBJQy4gKi8gICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICJsZAkJcjMsIFtyMV0gKyA2NAkJCVxuIiAgIC8qIExvYWQgdGhlIHByZXZpb3VzIGludGVycnVwdCBtYXNrLiAqLyAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAic3RiCXIzLCBbcjJdICsgMiAgCQkJXG4iICAgLyogU2V0IHRoZSBjdXJyZW50IGludGVycnVwdCBtYXNrIHRvIGJlIHRoZSBwcmV2aW91cy4gKi8gIFwNCi0gICAgICAgICJsZGQJcjYsIFtyMV0gKyA1NgkJCVxuIiAgIC8qIFJlc3RvcmUgY29udGV4dC4gKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAibW92CXJ0dCwgcjYJCQkJCVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAibW92CXBzciwgcjcJCQkJCVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAibGRkCXIyLCBbcjFdICsgMAkJCVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAibGRxCXI0LCBbcjFdICsJOAkJCVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAibGRxCXI4LCBbcjFdICsJMjQJCQlcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgImxkcQlyMTIsIFtyMV0gKwk0MAkJCVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAiYWRkCXIxLCAjNjgJCQkJCVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAicnRpCQkJCQkJCVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICApOw0KKyNkZWZpbmUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJYXNtIF9fdm9sYXRpbGVfXygJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkibGQJCXIyLCBbcjBdK3Nob3J0KHB4Q3VycmVudFRDQikJXG4iCS8qIExvYWQgdGhlIFRDQiB0byBmaW5kIHRoZSBzdGFjayBwb2ludGVyIGFuZCBjb250ZXh0LiAqLwkJXA0KKwkJImxkCQlyMSwgW3IyXQkJCQlcbiIJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJIm1vdmhpCXIyLCAjMTYzODQJCQkJXG4iCS8qIFNldCB0aGUgcG9pbnRlciB0byB0aGUgSUMuICovCQkJCQkJCQkJCVwNCisJCSJsZAkJcjMsIFtyMV0gKyA2NAkJCVxuIgkvKiBMb2FkIHRoZSBwcmV2aW91cyBpbnRlcnJ1cHQgbWFzay4gKi8JCQkJCQkJCQlcDQorCQkic3RiCXIzLCBbcjJdICsgMiAgCQkJXG4iCS8qIFNldCB0aGUgY3VycmVudCBpbnRlcnJ1cHQgbWFzayB0byBiZSB0aGUgcHJldmlvdXMuICovCQkJCVwNCisJCSJsZGQJcjYsIFtyMV0gKyA1NgkJCVxuIgkvKiBSZXN0b3JlIGNvbnRleHQuICovCQkJCQkJCQkJCQkJCVwNCisJCSJtb3YJcnR0LCByNgkJCQkJXG4iCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCSJtb3YJcHNyLCByNwkJCQkJXG4iCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCSJsZGQJcjIsIFtyMV0gKyAwCQkJXG4iCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCSJsZHEJcjQsIFtyMV0gKwk4CQkJXG4iCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCSJsZHEJcjgsIFtyMV0gKwkyNAkJCVxuIgkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkibGRxCXIxMiwgW3IxXSArCTQwCQkJXG4iCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCSJhZGQJcjEsICM2OAkJCQkJXG4iCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCSJydGkJCQkJCQkJXG4iCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJICk7DQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCi0gICAgI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICAgICAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0gICAgI2lmZGVmIF9fY3BsdXNwbHVzDQotICAgICAgICB9DQotICAgICNlbmRpZg0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCiANCiAjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8NCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9HQ0MvQ29sZEZpcmVfVjIvcG9ydC5jIGIvcG9ydGFibGUvR0NDL0NvbGRGaXJlX1YyL3BvcnQuYwppbmRleCA0ZTFmNTFiLi4zZDdlNTI5IDEwMDY0NAotLS0gYS9wb3J0YWJsZS9HQ0MvQ29sZEZpcmVfVjIvcG9ydC5jCisrKyBiL3BvcnRhYmxlL0dDQy9Db2xkRmlyZV9WMi9wb3J0LmMKQEAgLTI5LDM2ICsyOSwzNCBAQAogI2luY2x1ZGUgIkZyZWVSVE9TLmgiDQogI2luY2x1ZGUgInRhc2suaCINCiANCi0jZGVmaW5lIHBvcnRJTklUSUFMX0ZPUk1BVF9WRUNUT1IgICAgICAoICggU3RhY2tUeXBlX3QgKSAweDQwMDAgKQ0KKyNkZWZpbmUgcG9ydElOSVRJQUxfRk9STUFUX1ZFQ1RPUgkJKCAoIFN0YWNrVHlwZV90ICkgMHg0MDAwICkNCiANCiAvKiBTdXBlcnZpc29yIG1vZGUgc2V0LiAqLw0KLSNkZWZpbmUgcG9ydElOSVRJQUxfU1RBVFVTX1JFR0lTVEVSICAgICggKCBTdGFja1R5cGVfdCApIDB4MjAwMCApDQorI2RlZmluZSBwb3J0SU5JVElBTF9TVEFUVVNfUkVHSVNURVIJCSggKCBTdGFja1R5cGVfdCApIDB4MjAwMCkNCiANCiAvKiBVc2VkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIG51bWJlciBvZiBuZXN0ZWQgY2FsbHMgdG8gdGFza0VOVEVSX0NSSVRJQ0FMKCkuICBUaGlzDQotICogd2lsbCBiZSBzZXQgdG8gMCBwcmlvciB0byB0aGUgZmlyc3QgdGFzayBiZWluZyBzdGFydGVkLiAqLw0KK3dpbGwgYmUgc2V0IHRvIDAgcHJpb3IgdG8gdGhlIGZpcnN0IHRhc2sgYmVpbmcgc3RhcnRlZC4gKi8NCiBzdGF0aWMgdWludDMyX3QgdWxDcml0aWNhbE5lc3RpbmcgPSAweDk5OTlVTDsNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi1TdGFja1R5cGVfdCAqIHB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKiBweFRvcE9mU3RhY2ssDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqIHB2UGFyYW1ldGVycyApDQorU3RhY2tUeXBlX3QgKnB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKiBweFRvcE9mU3RhY2ssIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzICkNCiB7DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHZQYXJhbWV0ZXJzOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwdlBhcmFtZXRlcnM7DQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4REVBREJFRUY7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKFN0YWNrVHlwZV90KSAweERFQURCRUVGOw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgLyogRXhjZXB0aW9uIHN0YWNrIGZyYW1lIHN0YXJ0cyB3aXRoIHRoZSByZXR1cm4gYWRkcmVzcy4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBweENvZGU7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkvKiBFeGNlcHRpb24gc3RhY2sgZnJhbWUgc3RhcnRzIHdpdGggdGhlIHJldHVybiBhZGRyZXNzLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB4Q29kZTsNCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgICpweFRvcE9mU3RhY2sgPSAoIHBvcnRJTklUSUFMX0ZPUk1BVF9WRUNUT1IgPDwgMTZVTCApIHwgKCBwb3J0SU5JVElBTF9TVEFUVVNfUkVHSVNURVIgKTsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIHBvcnRJTklUSUFMX0ZPUk1BVF9WRUNUT1IgPDwgMTZVTCApIHwgKCBwb3J0SU5JVElBTF9TVEFUVVNfUkVHSVNURVIgKTsNCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwOyAvKkZQKi8NCi0gICAgcHhUb3BPZlN0YWNrIC09IDE0OyAgICAgICAgICAgICAgICAgIC8qIEE1IHRvIEQwLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDsgLypGUCovDQorCXB4VG9wT2ZTdGFjayAtPSAxNDsgLyogQTUgdG8gRDAuICovDQogDQogICAgIHJldHVybiBweFRvcE9mU3RhY2s7DQogfQ0KQEAgLTY2LDY3ICs2NCw3MSBAQAogDQogQmFzZVR5cGVfdCB4UG9ydFN0YXJ0U2NoZWR1bGVyKCB2b2lkICkNCiB7DQotICAgIGV4dGVybiB2b2lkIHZQb3J0U3RhcnRGaXJzdFRhc2soIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2UG9ydFN0YXJ0Rmlyc3RUYXNrKCB2b2lkICk7DQogDQotICAgIHVsQ3JpdGljYWxOZXN0aW5nID0gMFVMOw0KKwl1bENyaXRpY2FsTmVzdGluZyA9IDBVTDsNCiANCi0gICAgLyogQ29uZmlndXJlIHRoZSBpbnRlcnJ1cHRzIHVzZWQgYnkgdGhpcyBwb3J0LiAqLw0KLSAgICB2QXBwbGljYXRpb25TZXR1cEludGVycnVwdHMoKTsNCisJLyogQ29uZmlndXJlIHRoZSBpbnRlcnJ1cHRzIHVzZWQgYnkgdGhpcyBwb3J0LiAqLw0KKwl2QXBwbGljYXRpb25TZXR1cEludGVycnVwdHMoKTsNCiANCi0gICAgLyogU3RhcnQgdGhlIGZpcnN0IHRhc2sgZXhlY3V0aW5nLiAqLw0KLSAgICB2UG9ydFN0YXJ0Rmlyc3RUYXNrKCk7DQorCS8qIFN0YXJ0IHRoZSBmaXJzdCB0YXNrIGV4ZWN1dGluZy4gKi8NCisJdlBvcnRTdGFydEZpcnN0VGFzaygpOw0KIA0KLSAgICByZXR1cm4gcGRGQUxTRTsNCisJcmV0dXJuIHBkRkFMU0U7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQ0KIHsNCi0gICAgLyogTm90IGltcGxlbWVudGVkIGFzIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmV0dXJuIHRvLiAqLw0KKwkvKiBOb3QgaW1wbGVtZW50ZWQgYXMgdGhlcmUgaXMgbm90aGluZyB0byByZXR1cm4gdG8uICovDQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICkNCiB7DQotICAgIGlmKCB1bENyaXRpY2FsTmVzdGluZyA9PSAwVUwgKQ0KLSAgICB7DQotICAgICAgICAvKiBHdWFyZCBhZ2FpbnN0IGNvbnRleHQgc3dpdGNoZXMgYmVpbmcgcGVuZGVkIHNpbXVsdGFuZW91c2x5IHdpdGggYQ0KLSAgICAgICAgICogY3JpdGljYWwgc2VjdGlvbiBiZWluZyBlbnRlcmVkLiAqLw0KLSAgICAgICAgZG8NCi0gICAgICAgIHsNCi0gICAgICAgICAgICBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7DQorCWlmKCB1bENyaXRpY2FsTmVzdGluZyA9PSAwVUwgKQ0KKwl7DQorCQkvKiBHdWFyZCBhZ2FpbnN0IGNvbnRleHQgc3dpdGNoZXMgYmVpbmcgcGVuZGVkIHNpbXVsdGFuZW91c2x5IHdpdGggYQ0KKwkJY3JpdGljYWwgc2VjdGlvbiBiZWluZyBlbnRlcmVkLiAqLw0KKwkJZG8NCisJCXsNCisJCQlwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7DQorCQkJaWYoIE1DRl9JTlRDMF9JTlRGUkNMID09IDBVTCApDQorCQkJew0KKwkJCQlicmVhazsNCisJCQl9DQogDQotICAgICAgICAgICAgaWYoIE1DRl9JTlRDMF9JTlRGUkNMID09IDBVTCApDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9DQorCQkJcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7DQogDQotICAgICAgICAgICAgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7DQotICAgICAgICB9IHdoaWxlKCAxICk7DQotICAgIH0NCi0NCi0gICAgdWxDcml0aWNhbE5lc3RpbmcrKzsNCisJCX0gd2hpbGUoIDEgKTsNCisJfQ0KKwl1bENyaXRpY2FsTmVzdGluZysrOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICkNCiB7DQotICAgIHVsQ3JpdGljYWxOZXN0aW5nLS07DQotDQotICAgIGlmKCB1bENyaXRpY2FsTmVzdGluZyA9PSAwICkNCi0gICAgew0KLSAgICAgICAgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7DQotICAgIH0NCisJdWxDcml0aWNhbE5lc3RpbmctLTsNCisJaWYoIHVsQ3JpdGljYWxOZXN0aW5nID09IDAgKQ0KKwl7DQorCQlwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKTsNCisJfQ0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0WWllbGRIYW5kbGVyKCB2b2lkICkNCiB7DQotICAgIHVpbnQzMl90IHVsU2F2ZWRJbnRlcnJ1cHRNYXNrOw0KK3VpbnQzMl90IHVsU2F2ZWRJbnRlcnJ1cHRNYXNrOw0KIA0KLSAgICB1bFNhdmVkSW50ZXJydXB0TWFzayA9IHBvcnRTRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKTsNCi0gICAgLyogTm90ZSB0aGlzIHdpbGwgY2xlYXIgYWxsIGZvcmNlZCBpbnRlcnJ1cHRzIC0gdGhpcyBpcyBkb25lIGZvciBzcGVlZC4gKi8NCi0gICAgTUNGX0lOVEMwX0lOVEZSQ0wgPSAwOw0KLSAgICB2VGFza1N3aXRjaENvbnRleHQoKTsNCi0gICAgcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCB1bFNhdmVkSW50ZXJydXB0TWFzayApOw0KKwl1bFNhdmVkSW50ZXJydXB0TWFzayA9IHBvcnRTRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKTsNCisJCS8qIE5vdGUgdGhpcyB3aWxsIGNsZWFyIGFsbCBmb3JjZWQgaW50ZXJydXB0cyAtIHRoaXMgaXMgZG9uZSBmb3Igc3BlZWQuICovDQorCQlNQ0ZfSU5UQzBfSU5URlJDTCA9IDA7DQorCQl2VGFza1N3aXRjaENvbnRleHQoKTsNCisJcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCB1bFNhdmVkSW50ZXJydXB0TWFzayApOw0KIH0NCisNCisNCisNCisNCisNCisNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9HQ0MvQ29sZEZpcmVfVjIvcG9ydG1hY3JvLmggYi9wb3J0YWJsZS9HQ0MvQ29sZEZpcmVfVjIvcG9ydG1hY3JvLmgKaW5kZXggOTliNGQ0MC4uYWQ0NmE2MSAxMDA2NDQKLS0tIGEvcG9ydGFibGUvR0NDL0NvbGRGaXJlX1YyL3BvcnRtYWNyby5oCisrKyBiL3BvcnRhYmxlL0dDQy9Db2xkRmlyZV9WMi9wb3J0bWFjcm8uaApAQCAtMjYsMTEgKzI2LDExIEBACiAgKi8NCiANCiAjaWZuZGVmIFBPUlRNQUNST19IDQotICAgICNkZWZpbmUgUE9SVE1BQ1JPX0gNCisjZGVmaW5lIFBPUlRNQUNST19IDQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgZXh0ZXJuICJDIiB7DQotICAgICNlbmRpZg0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgKiBQb3J0IHNwZWNpZmljIGRlZmluaXRpb25zLg0KQEAgLTQzLDcyICs0Myw3MiBAQAogICovDQogDQogLyogVHlwZSBkZWZpbml0aW9ucy4gKi8NCi0gICAgI2RlZmluZSBwb3J0Q0hBUiAgICAgICAgICBjaGFyDQotICAgICNkZWZpbmUgcG9ydEZMT0FUICAgICAgICAgZmxvYXQNCi0gICAgI2RlZmluZSBwb3J0RE9VQkxFICAgICAgICBkb3VibGUNCi0gICAgI2RlZmluZSBwb3J0TE9ORyAgICAgICAgICBsb25nDQotICAgICNkZWZpbmUgcG9ydFNIT1JUICAgICAgICAgc2hvcnQNCi0gICAgI2RlZmluZSBwb3J0U1RBQ0tfVFlQRSAgICB1aW50MzJfdA0KLSAgICAjZGVmaW5lIHBvcnRCQVNFX1RZUEUgICAgIGxvbmcNCisjZGVmaW5lIHBvcnRDSEFSCQljaGFyDQorI2RlZmluZSBwb3J0RkxPQVQJCWZsb2F0DQorI2RlZmluZSBwb3J0RE9VQkxFCQlkb3VibGUNCisjZGVmaW5lIHBvcnRMT05HCQlsb25nDQorI2RlZmluZSBwb3J0U0hPUlQJCXNob3J0DQorI2RlZmluZSBwb3J0U1RBQ0tfVFlQRQl1aW50MzJfdA0KKyNkZWZpbmUgcG9ydEJBU0VfVFlQRQlsb25nDQogDQotICAgIHR5cGVkZWYgcG9ydFNUQUNLX1RZUEUgICBTdGFja1R5cGVfdDsNCi0gICAgdHlwZWRlZiBsb25nICAgICAgICAgICAgIEJhc2VUeXBlX3Q7DQotICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyAgICBVQmFzZVR5cGVfdDsNCit0eXBlZGVmIHBvcnRTVEFDS19UWVBFIFN0YWNrVHlwZV90Ow0KK3R5cGVkZWYgbG9uZyBCYXNlVHlwZV90Ow0KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBVQmFzZVR5cGVfdDsNCiANCi0gICAgI2lmICggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCi0gICAgICAgIHR5cGVkZWYgdWludDE2X3QgICAgIFRpY2tUeXBlX3Q7DQotICAgICAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQotICAgICNlbHNlDQotICAgICAgICB0eXBlZGVmIHVpbnQzMl90ICAgICBUaWNrVHlwZV90Ow0KLSAgICAgICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTA0KLSAgICAjZW5kaWYNCisjaWYoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQorCXR5cGVkZWYgdWludDE2X3QgVGlja1R5cGVfdDsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggVGlja1R5cGVfdCApIDB4ZmZmZg0KKyNlbHNlDQorCXR5cGVkZWYgdWludDMyX3QgVGlja1R5cGVfdDsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTA0KKyNlbmRpZg0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIEhhcmR3YXJlIHNwZWNpZmljcy4gKi8NCi0gICAgI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQgICAgNA0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEggICAgICAtMQ0KLSAgICAjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUyAgICAoICggVGlja1R5cGVfdCApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UCQkJNA0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJCS0xDQorI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMJCQkoICggVGlja1R5cGVfdCApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KLSAgICB1aW50MzJfdCB1bFBvcnRTZXRJUEwoIHVpbnQzMl90ICk7DQotICAgICNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpICAgIHVsUG9ydFNldElQTCggY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkNCi0gICAgI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKSAgICAgdWxQb3J0U2V0SVBMKCAwICkNCit1aW50MzJfdCB1bFBvcnRTZXRJUEwoIHVpbnQzMl90ICk7DQorI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkJdWxQb3J0U2V0SVBMKCBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgKQ0KKyNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkJCXVsUG9ydFNldElQTCggMCApDQogDQogDQotICAgIGV4dGVybiB2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCggdm9pZCApOw0KLSAgICBleHRlcm4gdm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApOw0KLSAgICAjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpICAgIHZQb3J0RW50ZXJDcml0aWNhbCgpDQotICAgICNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKSAgICAgdlBvcnRFeGl0Q3JpdGljYWwoKQ0KK2V4dGVybiB2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCggdm9pZCApOw0KK2V4dGVybiB2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICk7DQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKQkJdlBvcnRFbnRlckNyaXRpY2FsKCkNCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkJCQl2UG9ydEV4aXRDcml0aWNhbCgpDQogDQotICAgIGV4dGVybiBVQmFzZVR5cGVfdCB1eFBvcnRTZXRJbnRlcnJ1cHRNYXNrRnJvbUlTUiggdm9pZCApOw0KLSAgICBleHRlcm4gdm9pZCB2UG9ydENsZWFySW50ZXJydXB0TWFza0Zyb21JU1IoIFVCYXNlVHlwZV90ICk7DQotICAgICNkZWZpbmUgcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bFBvcnRTZXRJUEwoIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSApDQotICAgICNkZWZpbmUgcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCB1eFNhdmVkU3RhdHVzUmVnaXN0ZXIgKSAgICB1bFBvcnRTZXRJUEwoIHV4U2F2ZWRTdGF0dXNSZWdpc3RlciApDQorZXh0ZXJuIFVCYXNlVHlwZV90IHV4UG9ydFNldEludGVycnVwdE1hc2tGcm9tSVNSKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdlBvcnRDbGVhckludGVycnVwdE1hc2tGcm9tSVNSKCBVQmFzZVR5cGVfdCApOw0KKyNkZWZpbmUgcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpCXVsUG9ydFNldElQTCggY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkNCisjZGVmaW5lIHBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUiggdXhTYXZlZFN0YXR1c1JlZ2lzdGVyICkgdWxQb3J0U2V0SVBMKCB1eFNhdmVkU3RhdHVzUmVnaXN0ZXIgKQ0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFRhc2sgdXRpbGl0aWVzLiAqLw0KIA0KLSAgICAjZGVmaW5lIHBvcnROT1AoKSAgICAgIGFzbSB2b2xhdGlsZSAoICJub3AiICkNCisjZGVmaW5lIHBvcnROT1AoKQlhc20gdm9sYXRpbGUgKCAJIm5vcCIgKQ0KIA0KIC8qIE5vdGUgdGhpcyB3aWxsIG92ZXJ3cml0ZSBhbGwgb3RoZXIgYml0cyBpbiB0aGUgZm9yY2UgcmVnaXN0ZXIsIGl0IGlzIGRvbmUgdGhpcyB3YXkgZm9yIHNwZWVkLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRZSUVMRCgpICAgIE1DRl9JTlRDMF9JTlRGUkNMID0gKCAxVUwgPDwgY29uZmlnWUlFTERfSU5URVJSVVBUX1ZFQ1RPUiApOyBwb3J0Tk9QKCk7IHBvcnROT1AoKQ0KKyNkZWZpbmUgcG9ydFlJRUxEKCkJCQlNQ0ZfSU5UQzBfSU5URlJDTCA9ICggMVVMIDw8IGNvbmZpZ1lJRUxEX0lOVEVSUlVQVF9WRUNUT1IgKTsgcG9ydE5PUCgpOyBwb3J0Tk9QKCkNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBUYXNrIGZ1bmN0aW9uIG1hY3JvcyBhcyBkZXNjcmliZWQgb24gdGhlIEZyZWVSVE9TLm9yZyBXRUIgc2l0ZS4gKi8NCi0gICAgI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApIF9fYXR0cmlidXRlX18oICggbm9yZXR1cm4gKSApDQotICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgICAgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KLSAgICAjZGVmaW5lIHBvcnRFTkRfU1dJVENISU5HX0lTUiggeFN3aXRjaFJlcXVpcmVkICkgXA0KLSAgICBpZiggeFN3aXRjaFJlcXVpcmVkICE9IHBkRkFMU0UgKSAgICAgICAgICAgICAgICAgXA0KLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgcG9ydFlJRUxEKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB9DQorI2RlZmluZSBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHhTd2l0Y2hSZXF1aXJlZCApCWlmKCB4U3dpdGNoUmVxdWlyZWQgIT0gcGRGQUxTRSApCVwNCisJCQkJCQkJCQkJCQkJewkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCXBvcnRZSUVMRCgpOwkJCQkJXA0KKwkJCQkJCQkJCQkJCQl9DQogDQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgfQ0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQogDQogI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvR0NDL0g4UzIzMjkvcG9ydC5jIGIvcG9ydGFibGUvR0NDL0g4UzIzMjkvcG9ydC5jCmluZGV4IDRjZjQ1NzAuLjZmNDliMTQgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0dDQy9IOFMyMzI5L3BvcnQuYworKysgYi9wb3J0YWJsZS9HQ0MvSDhTMjMyOS9wb3J0LmMKQEAgLTMxLDIyICszMSwyMiBAQAogDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLSogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFibGUuaCBmb3IgdGhlIEg4UyBwb3J0Lg0KLSotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgSDhTIHBvcnQuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBXaGVuIHRoZSB0YXNrIHN0YXJ0cyBpbnRlcnJ1cHRzIHNob3VsZCBiZSBlbmFibGVkLiAqLw0KLSNkZWZpbmUgcG9ydElOSVRJQUxfQ0NSICAgICAgICAgICAgICAgICAgICAoICggU3RhY2tUeXBlX3QgKSAweDAwICkNCisjZGVmaW5lIHBvcnRJTklUSUFMX0NDUgkJCSggKCBTdGFja1R5cGVfdCApIDB4MDAgKQ0KIA0KIC8qIEhhcmR3YXJlIHNwZWNpZmljIGNvbnN0YW50cyB1c2VkIHRvIGdlbmVyYXRlIHRoZSBSVE9TIHRpY2sgZnJvbSB0aGUgVFBVLiAqLw0KLSNkZWZpbmUgcG9ydENMRUFSX09OX1RHUkFfQ09NUEFSRV9NQVRDSCAgICAoICggdWludDhfdCApIDB4MjAgKQ0KLSNkZWZpbmUgcG9ydENMT0NLX0RJVl82NCAgICAgICAgICAgICAgICAgICAoICggdWludDhfdCApIDB4MDMgKQ0KLSNkZWZpbmUgcG9ydENMT0NLX0RJViAgICAgICAgICAgICAgICAgICAgICAoICggdWludDMyX3QgKSA2NCApDQotI2RlZmluZSBwb3J0VEdSQV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICggKCB1aW50OF90ICkgMHgwMSApDQotI2RlZmluZSBwb3J0VElNRVJfQ0hBTk5FTCAgICAgICAgICAgICAgICAgICggKCB1aW50OF90ICkgMHgwMiApDQotI2RlZmluZSBwb3J0TVNUUDEzICAgICAgICAgICAgICAgICAgICAgICAgICggKCB1aW50MTZfdCApIDB4MjAwMCApDQorI2RlZmluZSBwb3J0Q0xFQVJfT05fVEdSQV9DT01QQVJFX01BVENIICggKCB1aW50OF90ICkgMHgyMCApDQorI2RlZmluZSBwb3J0Q0xPQ0tfRElWXzY0CQkJCSggKCB1aW50OF90ICkgMHgwMyApDQorI2RlZmluZSBwb3J0Q0xPQ0tfRElWCQkJCQkoICggdWludDMyX3QgKSA2NCApDQorI2RlZmluZSBwb3J0VEdSQV9JTlRFUlJVUFRfRU5BQkxFCQkoICggdWludDhfdCApIDB4MDEgKQ0KKyNkZWZpbmUgcG9ydFRJTUVSX0NIQU5ORUwJCQkJKCAoIHVpbnQ4X3QgKSAweDAyICkNCisjZGVmaW5lIHBvcnRNU1RQMTMJCQkJCQkoICggdWludDE2X3QgKSAweDIwMDAgKQ0KIA0KIC8qDQogICogU2V0dXAgVFBVIGNoYW5uZWwgb25lIGZvciB0aGUgUlRPUyB0aWNrIGF0IHRoZSByZXF1ZXN0ZWQgZnJlcXVlbmN5Lg0KQEAgLTU2LDE2NyArNTYsMTY0IEBACiAvKg0KICAqIFRoZSBJU1IgdXNlZCBieSBwb3J0WUlFTEQoKS4gVGhpcyBpcyBpbnN0YWxsZWQgYXMgYSB0cmFwIGhhbmRsZXIuDQogICovDQotdm9pZCB2UG9ydFlpZWxkKCB2b2lkICkgX19hdHRyaWJ1dGVfXyggKCBzYXZlYWxsLCBpbnRlcnJ1cHRfaGFuZGxlciApICk7DQordm9pZCB2UG9ydFlpZWxkKCB2b2lkICkgX19hdHRyaWJ1dGVfXyAoICggc2F2ZWFsbCwgaW50ZXJydXB0X2hhbmRsZXIgKSApOw0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KLS8qDQotICogU2VlIGhlYWRlciBmaWxlIGZvciBkZXNjcmlwdGlvbi4NCisvKiANCisgKiBTZWUgaGVhZGVyIGZpbGUgZm9yIGRlc2NyaXB0aW9uLiANCiAgKi8NCi1TdGFja1R5cGVfdCAqIHB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKiBweFRvcE9mU3RhY2ssDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqIHB2UGFyYW1ldGVycyApDQorU3RhY2tUeXBlX3QgKnB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKnB4VG9wT2ZTdGFjaywgVGFza0Z1bmN0aW9uX3QgcHhDb2RlLCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KIHsNCi0gICAgdWludDMyX3QgdWxWYWx1ZTsNCit1aW50MzJfdCB1bFZhbHVlOw0KIA0KLSAgICAvKiBUaGlzIHJlcXVpcmVzIGFuIGV2ZW4gYWRkcmVzcy4gKi8NCi0gICAgdWxWYWx1ZSA9ICggdWludDMyX3QgKSBweFRvcE9mU3RhY2s7DQorCS8qIFRoaXMgcmVxdWlyZXMgYW4gZXZlbiBhZGRyZXNzLiAqLw0KKwl1bFZhbHVlID0gKCB1aW50MzJfdCApIHB4VG9wT2ZTdGFjazsNCisJaWYoIHVsVmFsdWUgJiAxVUwgKQ0KKwl7DQorCQlweFRvcE9mU3RhY2sgPSBweFRvcE9mU3RhY2sgLSAxOw0KKwl9DQogDQotICAgIGlmKCB1bFZhbHVlICYgMVVMICkNCi0gICAgew0KLSAgICAgICAgcHhUb3BPZlN0YWNrID0gcHhUb3BPZlN0YWNrIC0gMTsNCi0gICAgfQ0KKwkvKiBQbGFjZSBhIGZldyBieXRlcyBvZiBrbm93biB2YWx1ZXMgb24gdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suIA0KKwlUaGlzIGlzIGp1c3QgdXNlZnVsIGZvciBkZWJ1Z2dpbmcuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHhhYTsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweGJiOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4Y2M7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHhkZDsNCiANCi0gICAgLyogUGxhY2UgYSBmZXcgYnl0ZXMgb2Yga25vd24gdmFsdWVzIG9uIHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLg0KLSAgICAgKiBUaGlzIGlzIGp1c3QgdXNlZnVsIGZvciBkZWJ1Z2dpbmcuICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMHhhYTsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAweGJiOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4Y2M7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMHhkZDsNCisJLyogVGhlIGluaXRpYWwgc3RhY2sgbWltaWNzIGFuIGludGVycnVwdCBzdGFjay4gIEZpcnN0IHRoZXJlIGlzIHRoZSBwcm9ncmFtDQorCWNvdW50ZXIgKDI0IGJpdHMpLiAqLw0KKwl1bFZhbHVlID0gKCB1aW50MzJfdCApIHB4Q29kZTsNCiANCi0gICAgLyogVGhlIGluaXRpYWwgc3RhY2sgbWltaWNzIGFuIGludGVycnVwdCBzdGFjay4gIEZpcnN0IHRoZXJlIGlzIHRoZSBwcm9ncmFtDQotICAgICAqIGNvdW50ZXIgKDI0IGJpdHMpLiAqLw0KLSAgICB1bFZhbHVlID0gKCB1aW50MzJfdCApIHB4Q29kZTsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgKCB1bFZhbHVlICYgMHhmZiApOw0KKwlweFRvcE9mU3RhY2stLTsNCisJdWxWYWx1ZSA+Pj0gOFVMOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApICggdWxWYWx1ZSAmIDB4ZmYgKTsNCisJcHhUb3BPZlN0YWNrLS07DQorCXVsVmFsdWUgPj49IDhVTDsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAoIHVsVmFsdWUgJiAweGZmICk7DQogDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApICggdWxWYWx1ZSAmIDB4ZmYgKTsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgIHVsVmFsdWUgPj49IDhVTDsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAoIHVsVmFsdWUgJiAweGZmICk7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICB1bFZhbHVlID4+PSA4VUw7DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgKCB1bFZhbHVlICYgMHhmZiApOw0KKwkvKiBGb2xsb3dlZCBieSB0aGUgQ0NSLiAqLwkNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSBwb3J0SU5JVElBTF9DQ1I7DQogDQotICAgIC8qIEZvbGxvd2VkIGJ5IHRoZSBDQ1IuICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gcG9ydElOSVRJQUxfQ0NSOw0KKwkvKiBOZXh0IGFsbCB0aGUgZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycyAtIHdpdGggdGhlIHBhcmFtZXRlcnMgYmVpbmcgcGFzc2VkDQorCWluIEVSMC4gIFRoZSBwYXJhbWV0ZXIgb3JkZXIgbXVzdCBtYXRjaCB0aGF0IHVzZWQgYnkgdGhlIGNvbXBpbGVyIHdoZW4gdGhlDQorCSJzYXZlYWxsIiBmdW5jdGlvbiBhdHRyaWJ1dGUgaXMgdXNlZC4gKi8NCiANCi0gICAgLyogTmV4dCBhbGwgdGhlIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMgLSB3aXRoIHRoZSBwYXJhbWV0ZXJzIGJlaW5nIHBhc3NlZA0KLSAgICAgKiBpbiBFUjAuICBUaGUgcGFyYW1ldGVyIG9yZGVyIG11c3QgbWF0Y2ggdGhhdCB1c2VkIGJ5IHRoZSBjb21waWxlciB3aGVuIHRoZQ0KLSAgICAgKiAic2F2ZWFsbCIgZnVuY3Rpb24gYXR0cmlidXRlIGlzIHVzZWQuICovDQorCS8qIEVSNiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4NjY7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHg2NjsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDY2Ow0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4NjY7DQorCQ0KKwkvKiBFUjAgKi8NCisJdWxWYWx1ZSA9ICggdWludDMyX3QgKSBwdlBhcmFtZXRlcnM7DQogDQotICAgIC8qIEVSNiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4NjY7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMHg2NjsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAweDY2Ow0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4NjY7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApICggdWxWYWx1ZSAmIDB4ZmYgKTsNCisJcHhUb3BPZlN0YWNrLS07DQorCXVsVmFsdWUgPj49IDhVTDsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAoIHVsVmFsdWUgJiAweGZmICk7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwl1bFZhbHVlID4+PSA4VUw7DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgKCB1bFZhbHVlICYgMHhmZiApOw0KKwlweFRvcE9mU3RhY2stLTsNCisJdWxWYWx1ZSA+Pj0gOFVMOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApICggdWxWYWx1ZSAmIDB4ZmYgKTsNCisJDQorCS8qIEVSMSAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MTE7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgxMTsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDExOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MTE7DQogDQotICAgIC8qIEVSMCAqLw0KLSAgICB1bFZhbHVlID0gKCB1aW50MzJfdCApIHB2UGFyYW1ldGVyczsNCisJLyogRVIyICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgyMjsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDIyOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MjI7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgyMjsNCiANCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgKCB1bFZhbHVlICYgMHhmZiApOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgdWxWYWx1ZSA+Pj0gOFVMOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApICggdWxWYWx1ZSAmIDB4ZmYgKTsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgIHVsVmFsdWUgPj49IDhVTDsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAoIHVsVmFsdWUgJiAweGZmICk7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICB1bFZhbHVlID4+PSA4VUw7DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgKCB1bFZhbHVlICYgMHhmZiApOw0KKwkvKiBFUjMgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDMzOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MzM7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgzMzsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDMzOw0KIA0KLSAgICAvKiBFUjEgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAweDExOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MTE7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMHgxMTsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAweDExOw0KKwkvKiBFUjQgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDQ0Ow0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4NDQ7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHg0NDsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDQ0Ow0KIA0KLSAgICAvKiBFUjIgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAweDIyOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MjI7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMHgyMjsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAweDIyOw0KKwkvKiBFUjUgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDU1Ow0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4NTU7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHg1NTsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDU1Ow0KIA0KLSAgICAvKiBFUjMgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAweDMzOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MzM7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMHgzMzsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAweDMzOw0KLQ0KLSAgICAvKiBFUjQgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAweDQ0Ow0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4NDQ7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMHg0NDsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAweDQ0Ow0KLQ0KLSAgICAvKiBFUjUgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAweDU1Ow0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4NTU7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMHg1NTsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAweDU1Ow0KLQ0KLSAgICByZXR1cm4gcHhUb3BPZlN0YWNrOw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBCYXNlVHlwZV90IHhQb3J0U3RhcnRTY2hlZHVsZXIoIHZvaWQgKQ0KIHsNCi0gICAgZXh0ZXJuIHZvaWQgKiBweEN1cnJlbnRUQ0I7DQorZXh0ZXJuIHZvaWQgKiBweEN1cnJlbnRUQ0I7DQogDQotICAgIC8qIFNldHVwIHRoZSBoYXJkd2FyZSB0byBnZW5lcmF0ZSB0aGUgdGljay4gKi8NCi0gICAgcHJ2U2V0dXBUaW1lckludGVycnVwdCgpOw0KKwkvKiBTZXR1cCB0aGUgaGFyZHdhcmUgdG8gZ2VuZXJhdGUgdGhlIHRpY2suICovDQorCXBydlNldHVwVGltZXJJbnRlcnJ1cHQoKTsNCiANCi0gICAgLyogUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgZmlyc3QgdGFzayB0aGF0IGlzIGdvaW5nIHRvIHJ1bi4gIFRoaXMNCi0gICAgICogbWlycm9ycyB0aGUgZnVuY3Rpb24gZXBpbG9ndWUgY29kZSBnZW5lcmF0ZWQgYnkgdGhlIGNvbXBpbGVyIHdoZW4gdGhlDQotICAgICAqICJzYXZlYWxsIiBmdW5jdGlvbiBhdHRyaWJ1dGUgaXMgdXNlZC4gKi8NCi0gICAgYXNtIHZvbGF0aWxlICgNCi0gICAgICAgICJNT1YuTAkJQF9weEN1cnJlbnRUQ0IsIEVSNgkJCVxuXHQiDQotICAgICAgICAiTU9WLkwJCUBFUjYsIEVSNwkJCQkJXG5cdCINCi0gICAgICAgICJMRE0uTCAgICAgCUBTUCssIChFUjQtRVI1KQkJCQlcblx0Ig0KLSAgICAgICAgIkxETS5MICAgICAJQFNQKywgKEVSMC1FUjMpCQkJCVxuXHQiDQotICAgICAgICAiTU9WLkwgICAgIAlARVI3KywgRVI2CQkJCQlcblx0Ig0KLSAgICAgICAgIlJURQkJCQkJCQkJCVxuXHQiDQotICAgICAgICApOw0KKwkvKiBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBmaXJzdCB0YXNrIHRoYXQgaXMgZ29pbmcgdG8gcnVuLiAgVGhpcw0KKwltaXJyb3JzIHRoZSBmdW5jdGlvbiBlcGlsb2d1ZSBjb2RlIGdlbmVyYXRlZCBieSB0aGUgY29tcGlsZXIgd2hlbiB0aGUNCisJInNhdmVhbGwiIGZ1bmN0aW9uIGF0dHJpYnV0ZSBpcyB1c2VkLiAqLw0KKwlhc20gdm9sYXRpbGUgKCANCisJCQkJCSJNT1YuTAkJQF9weEN1cnJlbnRUQ0IsIEVSNgkJCVxuXHQiDQorCQkJCQkiTU9WLkwJCUBFUjYsIEVSNwkJCQkJXG5cdCINCisJCQkJCSJMRE0uTCAgICAgCUBTUCssIChFUjQtRVI1KQkJCQlcblx0Ig0KKwkJCQkJIkxETS5MICAgICAJQFNQKywgKEVSMC1FUjMpCQkJCVxuXHQiDQorCQkJCQkiTU9WLkwgICAgIAlARVI3KywgRVI2CQkJCQlcblx0Ig0KKwkJCQkJIlJURQkJCQkJCQkJCVxuXHQiDQorCQkJCSk7DQogDQotICAgICggdm9pZCApIHB4Q3VycmVudFRDQjsNCisJKCB2b2lkICkgcHhDdXJyZW50VENCOw0KIA0KLSAgICAvKiBTaG91bGQgbm90IGdldCBoZXJlLiAqLw0KLSAgICByZXR1cm4gcGRUUlVFOw0KKwkvKiBTaG91bGQgbm90IGdldCBoZXJlLiAqLw0KKwlyZXR1cm4gcGRUUlVFOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0RW5kU2NoZWR1bGVyKCB2b2lkICkNCiB7DQotICAgIC8qIEl0IGlzIHVubGlrZWx5IHRoYXQgdGhlIGg4IHBvcnQgd2lsbCBnZXQgc3RvcHBlZC4gKi8NCisJLyogSXQgaXMgdW5saWtlbHkgdGhhdCB0aGUgaDggcG9ydCB3aWxsIGdldCBzdG9wcGVkLiAqLw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCkBAIC0yMjcsNTYgKzIyNCw1NiBAQAogICovDQogdm9pZCB2UG9ydFlpZWxkKCB2b2lkICkNCiB7DQotICAgIHBvcnRTQVZFX1NUQUNLX1BPSU5URVIoKTsNCi0gICAgdlRhc2tTd2l0Y2hDb250ZXh0KCk7DQotICAgIHBvcnRSRVNUT1JFX1NUQUNLX1BPSU5URVIoKTsNCisJcG9ydFNBVkVfU1RBQ0tfUE9JTlRFUigpOw0KKwkJdlRhc2tTd2l0Y2hDb250ZXh0KCk7DQorCXBvcnRSRVNUT1JFX1NUQUNLX1BPSU5URVIoKTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQotLyoNCi0gKiBUaGUgaW50ZXJydXB0IGhhbmRsZXIgaW5zdGFsbGVkIGZvciB0aGUgUlRPUyB0aWNrIGRlcGVuZHMgb24gd2hldGhlciB0aGUNCi0gKiBwcmVlbXB0aXZlIG9yIGNvb3BlcmF0aXZlIHNjaGVkdWxlciBpcyBiZWluZyB1c2VkLg0KKy8qIA0KKyAqIFRoZSBpbnRlcnJ1cHQgaGFuZGxlciBpbnN0YWxsZWQgZm9yIHRoZSBSVE9TIHRpY2sgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSANCisgKiBwcmVlbXB0aXZlIG9yIGNvb3BlcmF0aXZlIHNjaGVkdWxlciBpcyBiZWluZyB1c2VkLiANCiAgKi8NCi0jaWYgKCBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAxICkNCisjaWYoIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDEgKQ0KIA0KLS8qDQotICogVGhlIHByZWVtcHRpdmUgc2NoZWR1bGVyIGlzIHVzZWQgc28gdGhlIElTUiBjYWxscyB2VGFza1N3aXRjaENvbnRleHQoKS4NCi0gKiBUaGUgZnVuY3Rpb24gcHJvbG9ndWUgc2F2ZXMgdGhlIGNvbnRleHQgc28gYWxsIHdlIGhhdmUgdG8gZG8gaXMgc2F2ZQ0KLSAqIHRoZSBzdGFjayBwb2ludGVyLg0KLSAqLw0KLSAgICB2b2lkIHZUaWNrSVNSKCB2b2lkICkgX19hdHRyaWJ1dGVfXyggKCBzYXZlYWxsLCBpbnRlcnJ1cHRfaGFuZGxlciApICk7DQotICAgIHZvaWQgdlRpY2tJU1IoIHZvaWQgKQ0KLSAgICB7DQotICAgICAgICBwb3J0U0FWRV9TVEFDS19QT0lOVEVSKCk7DQorCS8qIA0KKwkgKiBUaGUgcHJlZW1wdGl2ZSBzY2hlZHVsZXIgaXMgdXNlZCBzbyB0aGUgSVNSIGNhbGxzIHZUYXNrU3dpdGNoQ29udGV4dCgpLg0KKwkgKiBUaGUgZnVuY3Rpb24gcHJvbG9ndWUgc2F2ZXMgdGhlIGNvbnRleHQgc28gYWxsIHdlIGhhdmUgdG8gZG8gaXMgc2F2ZQ0KKwkgKiB0aGUgc3RhY2sgcG9pbnRlci4NCisJICovDQorCXZvaWQgdlRpY2tJU1IoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fICggKCBzYXZlYWxsLCBpbnRlcnJ1cHRfaGFuZGxlciApICk7DQorCXZvaWQgdlRpY2tJU1IoIHZvaWQgKQ0KKwl7DQorCQlwb3J0U0FWRV9TVEFDS19QT0lOVEVSKCk7DQorCQkNCisJCWlmKCB4VGFza0luY3JlbWVudFRpY2soKSAhPSBwZEZBTFNFICkNCisJCXsNCisJCQl2VGFza1N3aXRjaENvbnRleHQoKTsNCisJCX0NCiANCi0gICAgICAgIGlmKCB4VGFza0luY3JlbWVudFRpY2soKSAhPSBwZEZBTFNFICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICB2VGFza1N3aXRjaENvbnRleHQoKTsNCi0gICAgICAgIH0NCisJCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHQuICovDQorCQlUU1IxICY9IH4weDAxOw0KIA0KLSAgICAgICAgLyogQ2xlYXIgdGhlIGludGVycnVwdC4gKi8NCi0gICAgICAgIFRTUjEgJj0gfjB4MDE7DQorCQlwb3J0UkVTVE9SRV9TVEFDS19QT0lOVEVSKCk7DQorCX0NCiANCi0gICAgICAgIHBvcnRSRVNUT1JFX1NUQUNLX1BPSU5URVIoKTsNCi0gICAgfQ0KKyNlbHNlDQogDQotI2Vsc2UgLyogaWYgKCBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAxICkgKi8NCisJLyoNCisJICogVGhlIGNvb3BlcmF0aXZlIHNjaGVkdWxlciBpcyBiZWluZyB1c2VkIHNvIGFsbCB3ZSBoYXZlIHRvIGRvIGlzIA0KKwkgKiBwZXJpb2RpY2FsbHkgaW5jcmVtZW50IHRoZSB0aWNrLiAgVGhpcyBjYW4ganVzdCBiZSBhIG5vcm1hbCBJU1IgYW5kDQorCSAqIHRoZSAic2F2ZWFsbCIgYXR0cmlidXRlIGlzIG5vdCByZXF1aXJlZC4NCisJICovDQorCXZvaWQgdlRpY2tJU1IoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fICggKCBpbnRlcnJ1cHRfaGFuZGxlciApICk7DQorCXZvaWQgdlRpY2tJU1IoIHZvaWQgKQ0KKwl7DQorCQl4VGFza0luY3JlbWVudFRpY2soKTsNCiANCi0vKg0KLSAqIFRoZSBjb29wZXJhdGl2ZSBzY2hlZHVsZXIgaXMgYmVpbmcgdXNlZCBzbyBhbGwgd2UgaGF2ZSB0byBkbyBpcw0KLSAqIHBlcmlvZGljYWxseSBpbmNyZW1lbnQgdGhlIHRpY2suICBUaGlzIGNhbiBqdXN0IGJlIGEgbm9ybWFsIElTUiBhbmQNCi0gKiB0aGUgInNhdmVhbGwiIGF0dHJpYnV0ZSBpcyBub3QgcmVxdWlyZWQuDQotICovDQotICAgIHZvaWQgdlRpY2tJU1IoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fKCAoIGludGVycnVwdF9oYW5kbGVyICkgKTsNCi0gICAgdm9pZCB2VGlja0lTUiggdm9pZCApDQotICAgIHsNCi0gICAgICAgIHhUYXNrSW5jcmVtZW50VGljaygpOw0KKwkJLyogQ2xlYXIgdGhlIGludGVycnVwdC4gKi8NCisJCVRTUjEgJj0gfjB4MDE7DQorCX0NCiANCi0gICAgICAgIC8qIENsZWFyIHRoZSBpbnRlcnJ1cHQuICovDQotICAgICAgICBUU1IxICY9IH4weDAxOw0KLSAgICB9DQotDQotI2VuZGlmIC8qIGlmICggY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMSApICovDQorI2VuZGlmDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyoNCkBAIC0yODQsMjAgKzI4MSwyMyBAQAogICovDQogc3RhdGljIHZvaWQgcHJ2U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApDQogew0KLSAgICBjb25zdCB1aW50MzJfdCB1bENvbXBhcmVNYXRjaCA9ICggY29uZmlnQ1BVX0NMT0NLX0haIC8gY29uZmlnVElDS19SQVRFX0haICkgLyBwb3J0Q0xPQ0tfRElWOw0KK2NvbnN0IHVpbnQzMl90IHVsQ29tcGFyZU1hdGNoID0gKCBjb25maWdDUFVfQ0xPQ0tfSFogLyBjb25maWdUSUNLX1JBVEVfSFogKSAvIHBvcnRDTE9DS19ESVY7DQogDQotICAgIC8qIFR1cm4gdGhlIG1vZHVsZSBvbi4gKi8NCi0gICAgTVNUUENSICY9IH5wb3J0TVNUUDEzOw0KKwkvKiBUdXJuIHRoZSBtb2R1bGUgb24uICovDQorCU1TVFBDUiAmPSB+cG9ydE1TVFAxMzsNCiANCi0gICAgLyogQ29uZmlndXJlIHRpbWVyIDEuICovDQotICAgIFRDUjEgPSBwb3J0Q0xFQVJfT05fVEdSQV9DT01QQVJFX01BVENIIHwgcG9ydENMT0NLX0RJVl82NDsNCisJLyogQ29uZmlndXJlIHRpbWVyIDEuICovDQorCVRDUjEgPSBwb3J0Q0xFQVJfT05fVEdSQV9DT01QQVJFX01BVENIIHwgcG9ydENMT0NLX0RJVl82NDsNCiANCi0gICAgLyogQ29uZmlndXJlIHRoZSBjb21wYXJlIG1hdGNoIHZhbHVlIGZvciBhIHRpY2sgb2YgY29uZmlnVElDS19SQVRFX0haLiAqLw0KLSAgICBUR1IxQSA9IHVsQ29tcGFyZU1hdGNoOw0KKwkvKiBDb25maWd1cmUgdGhlIGNvbXBhcmUgbWF0Y2ggdmFsdWUgZm9yIGEgdGljayBvZiBjb25maWdUSUNLX1JBVEVfSFouICovDQorCVRHUjFBID0gdWxDb21wYXJlTWF0Y2g7DQogDQotICAgIC8qIFN0YXJ0IHRoZSB0aW1lciBhbmQgZW5hYmxlIHRoZSBpbnRlcnJ1cHQgLSB3ZSBjYW4gZG8gdGhpcyBoZXJlIGFzDQotICAgICAqIGludGVycnVwdHMgYXJlIGdsb2JhbGx5IGRpc2FibGVkIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuICovDQotICAgIFRJRVIxIHw9IHBvcnRUR1JBX0lOVEVSUlVQVF9FTkFCTEU7DQotICAgIFRTVFIgfD0gcG9ydFRJTUVSX0NIQU5ORUw7DQorCS8qIFN0YXJ0IHRoZSB0aW1lciBhbmQgZW5hYmxlIHRoZSBpbnRlcnJ1cHQgLSB3ZSBjYW4gZG8gdGhpcyBoZXJlIGFzIA0KKwlpbnRlcnJ1cHRzIGFyZSBnbG9iYWxseSBkaXNhYmxlZCB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLiAqLw0KKwlUSUVSMSB8PSBwb3J0VEdSQV9JTlRFUlJVUFRfRU5BQkxFOw0KKwlUU1RSIHw9IHBvcnRUSU1FUl9DSEFOTkVMOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisNCisNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9HQ0MvSDhTMjMyOS9wb3J0bWFjcm8uaCBiL3BvcnRhYmxlL0dDQy9IOFMyMzI5L3BvcnRtYWNyby5oCmluZGV4IDZkN2ZiYzcuLjQ4ZmRjMmMgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0dDQy9IOFMyMzI5L3BvcnRtYWNyby5oCisrKyBiL3BvcnRhYmxlL0dDQy9IOFMyMzI5L3BvcnRtYWNyby5oCkBAIC0yNywxMSArMjcsMTEgQEAKIA0KIA0KICNpZm5kZWYgUE9SVE1BQ1JPX0gNCi0gICAgI2RlZmluZSBQT1JUTUFDUk9fSA0KKyNkZWZpbmUgUE9SVE1BQ1JPX0gNCiANCi0gICAgI2lmZGVmIF9fY3BsdXNwbHVzDQotICAgICAgICBleHRlcm4gIkMiIHsNCi0gICAgI2VuZGlmDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAqIFBvcnQgc3BlY2lmaWMgZGVmaW5pdGlvbnMuDQpAQCAtNDQsOTUgKzQ0LDk1IEBACiAgKi8NCiANCiAvKiBUeXBlIGRlZmluaXRpb25zLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRDSEFSICAgICAgICAgIGNoYXINCi0gICAgI2RlZmluZSBwb3J0RkxPQVQgICAgICAgICBmbG9hdA0KLSAgICAjZGVmaW5lIHBvcnRET1VCTEUgICAgICAgIGRvdWJsZQ0KLSAgICAjZGVmaW5lIHBvcnRMT05HICAgICAgICAgIGxvbmcNCi0gICAgI2RlZmluZSBwb3J0U0hPUlQgICAgICAgICBzaG9ydA0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19UWVBFICAgIHVpbnQ4X3QNCi0gICAgI2RlZmluZSBwb3J0QkFTRV9UWVBFICAgICBjaGFyDQorI2RlZmluZSBwb3J0Q0hBUgkJY2hhcg0KKyNkZWZpbmUgcG9ydEZMT0FUCQlmbG9hdA0KKyNkZWZpbmUgcG9ydERPVUJMRQkJZG91YmxlDQorI2RlZmluZSBwb3J0TE9ORwkJbG9uZw0KKyNkZWZpbmUgcG9ydFNIT1JUCQlzaG9ydA0KKyNkZWZpbmUgcG9ydFNUQUNLX1RZUEUJdWludDhfdA0KKyNkZWZpbmUgcG9ydEJBU0VfVFlQRQljaGFyDQogDQotICAgIHR5cGVkZWYgcG9ydFNUQUNLX1RZUEUgICBTdGFja1R5cGVfdDsNCi0gICAgdHlwZWRlZiBzaWduZWQgY2hhciAgICAgIEJhc2VUeXBlX3Q7DQotICAgIHR5cGVkZWYgdW5zaWduZWQgY2hhciAgICBVQmFzZVR5cGVfdDsNCit0eXBlZGVmIHBvcnRTVEFDS19UWVBFIFN0YWNrVHlwZV90Ow0KK3R5cGVkZWYgc2lnbmVkIGNoYXIgQmFzZVR5cGVfdDsNCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgVUJhc2VUeXBlX3Q7DQogDQotICAgICNpZiAoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQotICAgICAgICB0eXBlZGVmIHVpbnQxNl90ICAgICBUaWNrVHlwZV90Ow0KLSAgICAgICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICggVGlja1R5cGVfdCApIDB4ZmZmZg0KLSAgICAjZWxzZQ0KLSAgICAgICAgdHlwZWRlZiB1aW50MzJfdCAgICAgVGlja1R5cGVfdDsNCi0gICAgICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwNCi0gICAgI2VuZGlmDQorI2lmKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KKwl0eXBlZGVmIHVpbnQxNl90IFRpY2tUeXBlX3Q7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIFRpY2tUeXBlX3QgKSAweGZmZmYNCisjZWxzZQ0KKwl0eXBlZGVmIHVpbnQzMl90IFRpY2tUeXBlX3Q7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwNCisjZW5kaWYNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBIYXJkd2FyZSBzcGVjaWZpY3MuICovDQotICAgICNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UICAgIDINCi0gICAgI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RIICAgICAgKCAtMSApDQotICAgICNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TICAgICggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQotICAgICNkZWZpbmUgcG9ydFlJRUxEKCkgICAgYXNtIHZvbGF0aWxlICggIlRSQVBBICMwIiApDQotICAgICNkZWZpbmUgcG9ydE5PUCgpICAgICAgYXNtIHZvbGF0aWxlICggIk5PUCIgKQ0KKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UCQkJMg0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJCSggLTEgKQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TCQkJKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCisjZGVmaW5lIHBvcnRZSUVMRCgpCQkJCQlhc20gdm9sYXRpbGUoICJUUkFQQSAjMCIgKQ0KKyNkZWZpbmUgcG9ydE5PUCgpCQkJCQlhc20gdm9sYXRpbGUoICJOT1AiICkNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBDcml0aWNhbCBzZWN0aW9uIGhhbmRsaW5nLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpICAgICBhc20gdm9sYXRpbGUgKCAiQU5EQwkjMHg3RiwgQ0NSIik7DQotICAgICNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpICAgIGFzbSB2b2xhdGlsZSAoICJPUkMgICMweDgwLCBDQ1IiICk7DQorI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKQkJYXNtIHZvbGF0aWxlKCAiQU5EQwkjMHg3RiwgQ0NSIiApOw0KKyNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpCWFzbSB2b2xhdGlsZSggIk9SQyAgIzB4ODAsIENDUiIgKTsNCiANCiAvKiBQdXNoIHRoZSBDQ1IgdGhlbiBkaXNhYmxlIGludGVycnVwdHMuICovDQotICAgICNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgICAgICAgXA0KLSAgICBhc20gdm9sYXRpbGUgKCAiU1RDCUNDUiwgQC1FUjciICk7IFwNCi0gICAgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOw0KKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgIAkJYXNtIHZvbGF0aWxlKCAiU1RDCUNDUiwgQC1FUjciICk7IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQlwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7DQogDQogLyogUG9wIHRoZSBDQ1IgdG8gc2V0IHRoZSBpbnRlcnJ1cHQgbWFza2luZyBiYWNrIHRvIGl0cyBwcmV2aW91cyBzdGF0ZS4gKi8NCi0gICAgI2RlZmluZSAgcG9ydEVYSVRfQ1JJVElDQUwoKSAgICBhc20gdm9sYXRpbGUgKCAiTERDICBARVI3KywgQ0NSIiApOw0KKyNkZWZpbmUgIHBvcnRFWElUX0NSSVRJQ0FMKCkgICAgCWFzbSB2b2xhdGlsZSggIkxEQyAgQEVSNyssIENDUiIgKTsNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBUYXNrIHV0aWxpdGllcy4gKi8NCiANCiAvKiBDb250ZXh0IHN3aXRjaCBtYWNyb3MuICBUaGVzZSBtYWNyb3MgYXJlIHZlcnkgc2ltcGxlIGFzIHRoZSBjb250ZXh0DQotICogaXMgc2F2ZWQgc2ltcGx5IGJ5IHNlbGVjdGluZyB0aGUgc2F2ZWFsbCBhdHRyaWJ1dGUgb2YgdGhlIGNvbnRleHQgc3dpdGNoDQotICogaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZXMuICBUaGVzZSBtYWNyb3Mgc2F2ZSBhbmQgcmVzdG9yZSB0aGUgc3RhY2sNCi0gKiBwb2ludGVyIHRvIHRoZSBUQ0IuICovDQoraXMgc2F2ZWQgc2ltcGx5IGJ5IHNlbGVjdGluZyB0aGUgc2F2ZWFsbCBhdHRyaWJ1dGUgb2YgdGhlIGNvbnRleHQgc3dpdGNoDQoraW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZXMuICBUaGVzZSBtYWNyb3Mgc2F2ZSBhbmQgcmVzdG9yZSB0aGUgc3RhY2sNCitwb2ludGVyIHRvIHRoZSBUQ0IuICovDQogDQotICAgICNkZWZpbmUgcG9ydFNBVkVfU1RBQ0tfUE9JTlRFUigpICAgICAgIFwNCi0gICAgZXh0ZXJuIHZvaWQgKiBweEN1cnJlbnRUQ0I7ICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIGFzbSB2b2xhdGlsZSAoICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICJNT1YuTAlAX3B4Q3VycmVudFRDQiwgRVI1CQkJXG5cdCJcDQotICAgICAgICAiTU9WLkwJRVI3LCBARVI1CQkJCQlcblx0IlwNCi0gICAgICAgICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAoIHZvaWQgKSBweEN1cnJlbnRUQ0I7DQorI2RlZmluZSBwb3J0U0FWRV9TVEFDS19QT0lOVEVSKCkJCQkJCQkJCVwNCitleHRlcm4gdm9pZCogcHhDdXJyZW50VENCOwkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCVwNCisJYXNtIHZvbGF0aWxlKAkJCQkJCQkJCQkJCVwNCisJCQkJCSJNT1YuTAlAX3B4Q3VycmVudFRDQiwgRVI1CQkJXG5cdCIgCVwNCisJCQkJCSJNT1YuTAlFUjcsIEBFUjUJCQkJCVxuXHQiCVwNCisJCQkJKTsJCQkJCQkJCQkJCQlcDQorCSggdm9pZCApIHB4Q3VycmVudFRDQjsNCiANCiANCi0gICAgI2RlZmluZSBwb3J0UkVTVE9SRV9TVEFDS19QT0lOVEVSKCkgICAgXA0KLSAgICBleHRlcm4gdm9pZCAqIHB4Q3VycmVudFRDQjsgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgYXNtIHZvbGF0aWxlICggICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgIk1PVi5MCUBfcHhDdXJyZW50VENCLCBFUjUJCQlcblx0IlwNCi0gICAgICAgICJNT1YuTAlARVI1LCBFUjcJCQkJCVxuXHQiXA0KLSAgICAgICAgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICggdm9pZCApIHB4Q3VycmVudFRDQjsNCisjZGVmaW5lCXBvcnRSRVNUT1JFX1NUQUNLX1BPSU5URVIoKQkJCQkJCQkJXA0KK2V4dGVybiB2b2lkKiBweEN1cnJlbnRUQ0I7CQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJXA0KKwlhc20gdm9sYXRpbGUoCQkJCQkJCQkJCQkJXA0KKwkJCQkJIk1PVi5MCUBfcHhDdXJyZW50VENCLCBFUjUJCQlcblx0IglcDQorCQkJCQkiTU9WLkwJQEVSNSwgRVI3CQkJCQlcblx0IglcDQorCQkJCSk7CQkJCQkJCQkJCQkJXA0KKwkoIHZvaWQgKSBweEN1cnJlbnRUQ0I7DQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogTWFjcm9zIHRvIGFsbG93IGEgY29udGV4dCBzd2l0Y2ggZnJvbSB3aXRoaW4gYW4gYXBwbGljYXRpb24gSVNSLiAqLw0KIA0KLSAgICAjZGVmaW5lIHBvcnRFTlRFUl9TV0lUQ0hJTkdfSVNSKCkgICAgcG9ydFNBVkVfU1RBQ0tfUE9JTlRFUigpOyB7DQotICAgICNkZWZpbmUgcG9ydEVYSVRfU1dJVENISU5HX0lTUiggeCApICAgICAgICAgXA0KLSAgICBpZiggeCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBleHRlcm4gdm9pZCB2VGFza1N3aXRjaENvbnRleHQoIHZvaWQgKTsgXA0KLSAgICAgICAgdlRhc2tTd2l0Y2hDb250ZXh0KCk7ICAgICAgICAgICAgICAgICAgIFwNCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICBwb3J0UkVTVE9SRV9TVEFDS19QT0lOVEVSKCk7DQorI2RlZmluZSBwb3J0RU5URVJfU1dJVENISU5HX0lTUigpIHBvcnRTQVZFX1NUQUNLX1BPSU5URVIoKTsgew0KKw0KKyNkZWZpbmUgcG9ydEVYSVRfU1dJVENISU5HX0lTUiggeCApCQkJCQkJCVwNCisJaWYoIHggKQkJCQkJCQkJCQkJCQlcDQorCXsJCQkJCQkJCQkJCQkJCVwNCisJCWV4dGVybiB2b2lkIHZUYXNrU3dpdGNoQ29udGV4dCggdm9pZCApOwkJCQlcDQorCQl2VGFza1N3aXRjaENvbnRleHQoKTsJCQkJCQkJCVwNCisJfQkJCQkJCQkJCQkJCQkJXA0KKwl9IHBvcnRSRVNUT1JFX1NUQUNLX1BPSU5URVIoKTsNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBUYXNrIGZ1bmN0aW9uIG1hY3JvcyBhcyBkZXNjcmliZWQgb24gdGhlIEZyZWVSVE9TLm9yZyBXRUIgc2l0ZS4gKi8NCi0gICAgI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQotICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgICAgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCiANCi0gICAgI2lmZGVmIF9fY3BsdXNwbHVzDQotICAgICAgICB9DQotICAgICNlbmRpZg0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCiANCiAjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8NCisNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9HQ0MvSENTMTIvcG9ydC5jIGIvcG9ydGFibGUvR0NDL0hDUzEyL3BvcnQuYwppbmRleCAwODYwNzRmLi41NWQ5NDAyIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9HQ0MvSENTMTIvcG9ydC5jCisrKyBiL3BvcnRhYmxlL0dDQy9IQ1MxMi9wb3J0LmMKQEAgLTM1LDE0NCArMzUsMTQzIEBACiAjaW5jbHVkZSA8c3lzL3BvcnRzX2RlZi5oPg0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0qIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBIQ1MxMiBwb3J0Lg0KLSotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgSENTMTIgcG9ydC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIA0KIC8qDQotICogQ29uZmlndXJlIGEgdGltZXIgdG8gZ2VuZXJhdGUgdGhlIFJUT1MgdGljayBhdCB0aGUgZnJlcXVlbmN5IHNwZWNpZmllZA0KKyAqIENvbmZpZ3VyZSBhIHRpbWVyIHRvIGdlbmVyYXRlIHRoZSBSVE9TIHRpY2sgYXQgdGhlIGZyZXF1ZW5jeSBzcGVjaWZpZWQgDQogICogd2l0aGluIEZyZWVSVE9TQ29uZmlnLmguDQogICovDQogc3RhdGljIHZvaWQgcHJ2U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApOw0KIA0KIC8qIE5PVEU6IEludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmVzIG11c3QgYmUgaW4gbm9uLWJhbmtlZCBtZW1vcnkgLSBhcyBkb2VzIHRoZQ0KLSAqIHNjaGVkdWxlciBzdGFydHVwIGZ1bmN0aW9uLiAqLw0KLSNkZWZpbmUgQVRUUl9ORUFSICAgIF9fYXR0cmlidXRlX18oICggbmVhciApICkNCitzY2hlZHVsZXIgc3RhcnR1cCBmdW5jdGlvbi4gKi8NCisjZGVmaW5lIEFUVFJfTkVBUglfX2F0dHJpYnV0ZV9fKChuZWFyKSkNCiANCiAvKiBNYW51YWwgY29udGV4dCBzd2l0Y2ggZnVuY3Rpb24uICBUaGlzIGlzIHRoZSBTV0kgSVNSLiAqLw0KLS8qIF9fYXR0cmlidXRlX18oKGludGVycnVwdCkpICovDQorLy8gX19hdHRyaWJ1dGVfXygoaW50ZXJydXB0KSkNCiB2b2lkIEFUVFJfTkVBUiB2UG9ydFlpZWxkKCB2b2lkICk7DQogDQogLyogVGljayBjb250ZXh0IHN3aXRjaCBmdW5jdGlvbi4gIFRoaXMgaXMgdGhlIHRpbWVyIElTUi4gKi8NCi0vKiBfX2F0dHJpYnV0ZV9fKChpbnRlcnJ1cHQpKSAqLw0KKy8vIF9fYXR0cmlidXRlX18oKGludGVycnVwdCkpDQogdm9pZCBBVFRSX05FQVIgdlBvcnRUaWNrSW50ZXJydXB0KCB2b2lkICk7DQogDQogLyogRnVuY3Rpb24gaW4gbm9uLWJhbmtlZCBtZW1vcnkgd2hpY2ggYWN0dWFsbHkgc3dpdGNoZXMgdG8gZmlyc3QgdGFzay4gKi8NCiBCYXNlVHlwZV90IEFUVFJfTkVBUiB4U3RhcnRTY2hlZHVsZXJOZWFyKCB2b2lkICk7DQogDQotLyogQ2FsbHMgdG8gcG9ydEVOVEVSX0NSSVRJQ0FMKCkgY2FuIGJlIG5lc3RlZC4gIFdoZW4gdGhleSBhcmUgbmVzdGVkIHRoZQ0KLSAqIGNyaXRpY2FsIHNlY3Rpb24gc2hvdWxkIG5vdCBiZSBsZWZ0IChpLmUuIGludGVycnVwdHMgc2hvdWxkIG5vdCBiZSByZS1lbmFibGVkKQ0KLSAqIHVudGlsIHRoZSBuZXN0aW5nIGRlcHRoIHJlYWNoZXMgMC4gIFRoaXMgdmFyaWFibGUgc2ltcGx5IHRyYWNrcyB0aGUgbmVzdGluZw0KLSAqIGRlcHRoLiAgRWFjaCB0YXNrIG1haW50YWlucyBpdCdzIG93biBjcml0aWNhbCBuZXN0aW5nIGRlcHRoIHZhcmlhYmxlIHNvDQotICogdXhDcml0aWNhbE5lc3RpbmcgaXMgc2F2ZWQgYW5kIHJlc3RvcmVkIGZyb20gdGhlIHRhc2sgc3RhY2sgZHVyaW5nIGEgY29udGV4dA0KLSAqIHN3aXRjaC4gKi8NCi12b2xhdGlsZSBVQmFzZVR5cGVfdCB1eENyaXRpY2FsTmVzdGluZyA9IDB4ODA7IC8qIHVuLWluaXRpYWxpemVkICovDQorLyogQ2FsbHMgdG8gcG9ydEVOVEVSX0NSSVRJQ0FMKCkgY2FuIGJlIG5lc3RlZC4gIFdoZW4gdGhleSBhcmUgbmVzdGVkIHRoZSANCitjcml0aWNhbCBzZWN0aW9uIHNob3VsZCBub3QgYmUgbGVmdCAoaS5lLiBpbnRlcnJ1cHRzIHNob3VsZCBub3QgYmUgcmUtZW5hYmxlZCkNCit1bnRpbCB0aGUgbmVzdGluZyBkZXB0aCByZWFjaGVzIDAuICBUaGlzIHZhcmlhYmxlIHNpbXBseSB0cmFja3MgdGhlIG5lc3RpbmcgDQorZGVwdGguICBFYWNoIHRhc2sgbWFpbnRhaW5zIGl0J3Mgb3duIGNyaXRpY2FsIG5lc3RpbmcgZGVwdGggdmFyaWFibGUgc28gDQordXhDcml0aWNhbE5lc3RpbmcgaXMgc2F2ZWQgYW5kIHJlc3RvcmVkIGZyb20gdGhlIHRhc2sgc3RhY2sgZHVyaW5nIGEgY29udGV4dA0KK3N3aXRjaC4gKi8NCit2b2xhdGlsZSBVQmFzZVR5cGVfdCB1eENyaXRpY2FsTmVzdGluZyA9IDB4ODA7ICAvLyB1bi1pbml0aWFsaXplZA0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KLS8qDQotICogU2VlIGhlYWRlciBmaWxlIGZvciBkZXNjcmlwdGlvbi4NCisvKiANCisgKiBTZWUgaGVhZGVyIGZpbGUgZm9yIGRlc2NyaXB0aW9uLiANCiAgKi8NCi1TdGFja1R5cGVfdCAqIHB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKiBweFRvcE9mU3RhY2ssDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqIHB2UGFyYW1ldGVycyApDQorU3RhY2tUeXBlX3QgKnB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKnB4VG9wT2ZTdGFjaywgVGFza0Z1bmN0aW9uX3QgcHhDb2RlLCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KIHsNCi0gICAgLyogU2V0dXAgdGhlIGluaXRpYWwgc3RhY2sgb2YgdGhlIHRhc2suICBUaGUgc3RhY2sgaXMgc2V0IGV4YWN0bHkgYXMNCi0gICAgICogZXhwZWN0ZWQgYnkgdGhlIHBvcnRSRVNUT1JFX0NPTlRFWFQoKSBtYWNyby4gIEluIHRoaXMgY2FzZSB0aGUgc3RhY2sgYXMNCi0gICAgICogZXhwZWN0ZWQgYnkgdGhlIEhDUzEyIFJUSSBpbnN0cnVjdGlvbi4gKi8NCiANCiANCi0gICAgLyogVGhlIGFkZHJlc3Mgb2YgdGhlIHRhc2sgZnVuY3Rpb24gaXMgcGxhY2VkIGluIHRoZSBzdGFjayBieXRlIGF0IGEgdGltZS4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAqKCAoICggU3RhY2tUeXBlX3QgKiApICggJnB4Q29kZSApICkgKyAxICk7DQotICAgICotLXB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAqKCAoICggU3RhY2tUeXBlX3QgKiApICggJnB4Q29kZSApICkgKyAwICk7DQorCS8qIFNldHVwIHRoZSBpbml0aWFsIHN0YWNrIG9mIHRoZSB0YXNrLiAgVGhlIHN0YWNrIGlzIHNldCBleGFjdGx5IGFzIA0KKwlleHBlY3RlZCBieSB0aGUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpIG1hY3JvLiAgSW4gdGhpcyBjYXNlIHRoZSBzdGFjayBhcw0KKwlleHBlY3RlZCBieSB0aGUgSENTMTIgUlRJIGluc3RydWN0aW9uLiAqLw0KIA0KLSAgICAvKiBOZXh0IGFyZSBhbGwgdGhlIHJlZ2lzdGVycyB0aGF0IGZvcm0gcGFydCBvZiB0aGUgdGFzayBjb250ZXh0LiAqLw0KIA0KLSAgICAvKiBZIHJlZ2lzdGVyICovDQotICAgICotLXB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweGZmOw0KLSAgICAqLS1weFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhlZTsNCisJLyogVGhlIGFkZHJlc3Mgb2YgdGhlIHRhc2sgZnVuY3Rpb24gaXMgcGxhY2VkIGluIHRoZSBzdGFjayBieXRlIGF0IGEgdGltZS4gKi8NCisJKnB4VG9wT2ZTdGFjayAgID0gKCBTdGFja1R5cGVfdCApICooICgoU3RhY2tUeXBlX3QgKikgKCZweENvZGUpICkgKyAxICk7DQorCSotLXB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAqKCAoKFN0YWNrVHlwZV90ICopICgmcHhDb2RlKSApICsgMCApOw0KIA0KLSAgICAvKiBYIHJlZ2lzdGVyICovDQotICAgICotLXB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweGRkOw0KLSAgICAqLS1weFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhjYzsNCisJLyogTmV4dCBhcmUgYWxsIHRoZSByZWdpc3RlcnMgdGhhdCBmb3JtIHBhcnQgb2YgdGhlIHRhc2sgY29udGV4dC4gKi8NCiANCi0gICAgLyogQSByZWdpc3RlciBjb250YWlucyBwYXJhbWV0ZXIgaGlnaCBieXRlLiAqLw0KLSAgICAqLS1weFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgKiggKCAoIFN0YWNrVHlwZV90ICogKSAoICZwdlBhcmFtZXRlcnMgKSApICsgMCApOw0KKwkvKiBZIHJlZ2lzdGVyICovDQorCSotLXB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweGZmOw0KKwkqLS1weFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhlZTsNCiANCi0gICAgLyogQiByZWdpc3RlciBjb250YWlucyBwYXJhbWV0ZXIgbG93IGJ5dGUuICovDQotICAgICotLXB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAqKCAoICggU3RhY2tUeXBlX3QgKiApICggJnB2UGFyYW1ldGVycyApICkgKyAxICk7DQorCS8qIFggcmVnaXN0ZXIgKi8NCisJKi0tcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4ZGQ7DQorCSotLXB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweGNjOw0KKyANCisJLyogQSByZWdpc3RlciBjb250YWlucyBwYXJhbWV0ZXIgaGlnaCBieXRlLiAqLw0KKwkqLS1weFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgKiggKChTdGFja1R5cGVfdCAqKSAoJnB2UGFyYW1ldGVycykgKSArIDAgKTsNCiANCi0gICAgLyogQ0NSOiBOb3RlIHRoYXQgd2hlbiB0aGUgdGFzayBzdGFydHMgaW50ZXJydXB0cyB3aWxsIGJlIGVuYWJsZWQgc2luY2UNCi0gICAgICogIkkiIGJpdCBvZiBDQ1IgaXMgY2xlYXJlZCAqLw0KLSAgICAqLS1weFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHg4MDsgLyoga2VlcHMgU3RvcCBkaXNhYmxlZCAoTUNVIGRlZmF1bHQpICovDQorCS8qIEIgcmVnaXN0ZXIgY29udGFpbnMgcGFyYW1ldGVyIGxvdyBieXRlLiAqLw0KKwkqLS1weFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgKiggKChTdGFja1R5cGVfdCAqKSAoJnB2UGFyYW1ldGVycykgKSArIDEgKTsNCiANCi0gICAgLyogdG1wIHNvZnRyZWdzIHVzZWQgYnkgR0NDLiBWYWx1ZXMgcmlnaHQgbm93IGRvbid0CW1hdHRlci4gKi8NCi0gICAgX19hc20oICJcblwNCisJLyogQ0NSOiBOb3RlIHRoYXQgd2hlbiB0aGUgdGFzayBzdGFydHMgaW50ZXJydXB0cyB3aWxsIGJlIGVuYWJsZWQgc2luY2UNCisJIkkiIGJpdCBvZiBDQ1IgaXMgY2xlYXJlZCAqLw0KKwkqLS1weFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHg4MDsJCS8vIGtlZXBzIFN0b3AgZGlzYWJsZWQgKE1DVSBkZWZhdWx0KQ0KKwkNCisJLyogdG1wIHNvZnRyZWdzIHVzZWQgYnkgR0NDLiBWYWx1ZXMgcmlnaHQgbm93IGRvbid0CW1hdHRlci4gKi8NCisJX19hc20oIlxuXA0KIAkJbW92dyBfLmZyYW1lLCAyLC0lMAkJCQkJCQlcblwNCiAJCW1vdncgXy50bXAsIDIsLSUwCQkJCQkJCVxuXA0KIAkJbW92dyBfLnosIDIsLSUwCQkJCQkJCQlcblwNCiAJCW1vdncgXy54eSwgMiwtJTAJCQkJCQkJXG5cDQogCQk7bW92dyBfLmQyLCAyLC0lMAkJCQkJCQlcblwNCiAJCTttb3Z3IF8uZDEsIDIsLSUwCQkJCQkJCVxuXA0KLQkiIDogIj1BIiAoIHB4VG9wT2ZTdGFjayApIDogIjAiICggcHhUb3BPZlN0YWNrICkgKTsNCisJIjogIj1BIihweFRvcE9mU3RhY2spIDogIjAiKHB4VG9wT2ZTdGFjaykgKTsNCiANCi0gICAgI2lmZGVmIEJBTktFRF9NT0RFTA0KLSAgICAgICAgLyogVGhlIHBhZ2Ugb2YgdGhlIHRhc2suICovDQotICAgICAgICAqLS1weFRvcE9mU3RhY2sgPSAweDMwOyAvKiBjYW4gb25seSBkaXJlY3RseSBzdGFydCBpbiBQUEFHRSAweDMwICovDQotICAgICNlbmRpZg0KLQ0KLSAgICAvKiBUaGUgY3JpdGljYWwgbmVzdGluZyBkZXB0aCBpcyBpbml0aWFsaXNlZCB3aXRoIDAgKG1lYW5pbmcgbm90IGluDQotICAgICAqIGEgY3JpdGljYWwgc2VjdGlvbikuICovDQotICAgICotLXB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAwOw0KKwkjaWZkZWYgQkFOS0VEX01PREVMDQorCQkvKiBUaGUgcGFnZSBvZiB0aGUgdGFzay4gKi8NCisJCSotLXB4VG9wT2ZTdGFjayA9IDB4MzA7ICAgICAgLy8gY2FuIG9ubHkgZGlyZWN0bHkgc3RhcnQgaW4gUFBBR0UgMHgzMA0KKwkjZW5kaWYNCisJDQorCS8qIFRoZSBjcml0aWNhbCBuZXN0aW5nIGRlcHRoIGlzIGluaXRpYWxpc2VkIHdpdGggMCAobWVhbmluZyBub3QgaW4NCisJYSBjcml0aWNhbCBzZWN0aW9uKS4gKi8NCisJKi0tcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDA7DQogDQogDQotICAgIHJldHVybiBweFRvcE9mU3RhY2s7DQorCXJldHVybiBweFRvcE9mU3RhY2s7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQ0KIHsNCi0gICAgLyogSXQgaXMgdW5saWtlbHkgdGhhdCB0aGUgSENTMTIgcG9ydCB3aWxsIGdldCBzdG9wcGVkLiAqLw0KKwkvKiBJdCBpcyB1bmxpa2VseSB0aGF0IHRoZSBIQ1MxMiBwb3J0IHdpbGwgZ2V0IHN0b3BwZWQuICovDQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHN0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKQ0KIHsNCi0gICAgLyogRW5hYmxlIGhhcmR3YXJlIFJUSSB0aW1lciAqLw0KLSAgICAvKiBJZ25vcmVzIGNvbmZpZ1RJQ0tfUkFURV9IWiAqLw0KLSAgICBSVElDVEwgPSAweDUwOyAgLyogMTYgTUh6IHh0YWw6IDk3Ni41NiBIeiwgMTAyNG1TICovDQotICAgIENSR0lOVCB8PSAweDgwOyAvKiBSVElFICovDQorCS8qIEVuYWJsZSBoYXJkd2FyZSBSVEkgdGltZXIgKi8NCisJLyogSWdub3JlcyBjb25maWdUSUNLX1JBVEVfSFogKi8NCisJUlRJQ1RMID0gMHg1MDsJCQkvLyAxNiBNSHogeHRhbDogOTc2LjU2IEh6LCAxMDI0bVMgDQorCUNSR0lOVCB8PSAweDgwOwkJCS8vIFJUSUUNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogQmFzZVR5cGVfdCB4UG9ydFN0YXJ0U2NoZWR1bGVyKCB2b2lkICkNCiB7DQotICAgIC8qIHhQb3J0U3RhcnRTY2hlZHVsZXIoKSBkb2VzIG5vdCBzdGFydCB0aGUgc2NoZWR1bGVyIGRpcmVjdGx5IGJlY2F1c2UNCi0gICAgICogdGhlIGhlYWRlciBmaWxlIGNvbnRhaW5pbmcgdGhlIHhQb3J0U3RhcnRTY2hlZHVsZXIoKSBwcm90b3R5cGUgaXMgcGFydA0KLSAgICAgKiBvZiB0aGUgY29tbW9uIGtlcm5lbCBjb2RlLCBhbmQgdGhlcmVmb3JlIGNhbm5vdCB1c2UgdGhlIENPREVfU0VHIHByYWdtYS4NCi0gICAgICogSW5zdGVhZCBpdCBzaW1wbHkgY2FsbHMgdGhlIGxvY2FsbHkgZGVmaW5lZCB4TmVhclN0YXJ0U2NoZWR1bGVyKCkgLQ0KLSAgICAgKiB3aGljaCBkb2VzIHVzZSB0aGUgQ09ERV9TRUcgcHJhZ21hLiAqLw0KKwkvKiB4UG9ydFN0YXJ0U2NoZWR1bGVyKCkgZG9lcyBub3Qgc3RhcnQgdGhlIHNjaGVkdWxlciBkaXJlY3RseSBiZWNhdXNlIA0KKwl0aGUgaGVhZGVyIGZpbGUgY29udGFpbmluZyB0aGUgeFBvcnRTdGFydFNjaGVkdWxlcigpIHByb3RvdHlwZSBpcyBwYXJ0IA0KKwlvZiB0aGUgY29tbW9uIGtlcm5lbCBjb2RlLCBhbmQgdGhlcmVmb3JlIGNhbm5vdCB1c2UgdGhlIENPREVfU0VHIHByYWdtYS4gDQorCUluc3RlYWQgaXQgc2ltcGx5IGNhbGxzIHRoZSBsb2NhbGx5IGRlZmluZWQgeE5lYXJTdGFydFNjaGVkdWxlcigpIC0gDQorCXdoaWNoIGRvZXMgdXNlIHRoZSBDT0RFX1NFRyBwcmFnbWEuICovDQogDQotICAgIGludDE2X3QgcmVnaXN0ZXIgZDsNCi0NCi0gICAgX19hc20oICJqbXAgIHhTdGFydFNjaGVkdWxlck5lYXIJCTsgd2lsbCBuZXZlciByZXR1cm4iOiAiPWQiICggZCApICk7DQotICAgIHJldHVybiBkOw0KKwlpbnQxNl90IHJlZ2lzdGVyIGQ7DQorCV9fYXNtICgiam1wICB4U3RhcnRTY2hlZHVsZXJOZWFyCQk7IHdpbGwgbmV2ZXIgcmV0dXJuIjogIj1kIihkKSk7DQorCXJldHVybiBkOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBCYXNlVHlwZV90IHhTdGFydFNjaGVkdWxlck5lYXIoIHZvaWQgKQ0KIHsNCi0gICAgLyogQ29uZmlndXJlIHRoZSB0aW1lciB0aGF0IHdpbGwgZ2VuZXJhdGUgdGhlIFJUT1MgdGljay4gIEludGVycnVwdHMgYXJlDQotICAgICAqIGRpc2FibGVkIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuICovDQotICAgIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoKTsNCisJLyogQ29uZmlndXJlIHRoZSB0aW1lciB0aGF0IHdpbGwgZ2VuZXJhdGUgdGhlIFJUT1MgdGljay4gIEludGVycnVwdHMgYXJlDQorCWRpc2FibGVkIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuICovDQorCXBydlNldHVwVGltZXJJbnRlcnJ1cHQoKTsNCiANCi0gICAgLyogUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgZmlyc3QgdGFzay4gKi8NCi0gICAgcG9ydFJFU1RPUkVfQ09OVEVYVCgpOw0KKwkvKiBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBmaXJzdCB0YXNrLiAqLw0KKwlwb3J0UkVTVE9SRV9DT05URVhUKCk7DQogDQotICAgIHBvcnRJU1JfVEFJTCgpOw0KKwlwb3J0SVNSX1RBSUwoKTsNCiANCi0gICAgLyogU2hvdWxkIG5vdCBnZXQgaGVyZSEgKi8NCi0gICAgcmV0dXJuIHBkRkFMU0U7DQorCS8qIFNob3VsZCBub3QgZ2V0IGhlcmUhICovDQorCXJldHVybiBwZEZBTFNFOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCkBAIC0xODYsNTMgKzE4NSw1MyBAQAogICovDQogdm9pZCB2UG9ydFlpZWxkKCB2b2lkICkNCiB7DQotICAgIHBvcnRJU1JfSEVBRCgpOw0KKwlwb3J0SVNSX0hFQUQoKTsNCisJLyogTk9URTogVGhpcyBpcyB0aGUgdHJhcCByb3V0aW5lIChzd2kpIGFsdGhvdWdoIG5vdCBkZWZpbmVkIGFzIGEgdHJhcC4NCisJICAgSXQgd2lsbCBmaWxsIHRoZSBzdGFjayB0aGUgc2FtZSB3YXkgYXMgYW4gSVNSIGluIG9yZGVyIHRvIG1peCBwcmVlbXRpb24NCisJICAgYW5kIGNvb3BlcmF0aXZlIHlpZWxkLiAqLw0KIA0KLSAgICAvKiBOT1RFOiBUaGlzIGlzIHRoZSB0cmFwIHJvdXRpbmUgKHN3aSkgYWx0aG91Z2ggbm90IGRlZmluZWQgYXMgYSB0cmFwLg0KLSAgICAgKiBJdCB3aWxsIGZpbGwgdGhlIHN0YWNrIHRoZSBzYW1lIHdheSBhcyBhbiBJU1IgaW4gb3JkZXIgdG8gbWl4IHByZWVtdGlvbg0KLSAgICAgKiBhbmQgY29vcGVyYXRpdmUgeWllbGQuICovDQorCXBvcnRTQVZFX0NPTlRFWFQoKTsNCisJdlRhc2tTd2l0Y2hDb250ZXh0KCk7DQorCXBvcnRSRVNUT1JFX0NPTlRFWFQoKTsNCiANCi0gICAgcG9ydFNBVkVfQ09OVEVYVCgpOw0KLSAgICB2VGFza1N3aXRjaENvbnRleHQoKTsNCi0gICAgcG9ydFJFU1RPUkVfQ09OVEVYVCgpOw0KLQ0KLSAgICBwb3J0SVNSX1RBSUwoKTsNCisJcG9ydElTUl9UQUlMKCk7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qDQotICogUlRPUyB0aWNrIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUuICBJZiB0aGUgY29vcGVyYXRpdmUgc2NoZWR1bGVyIGlzDQotICogYmVpbmcgdXNlZCB0aGVuIHRoaXMgc2ltcGx5IGluY3JlbWVudHMgdGhlIHRpY2sgY291bnQuICBJZiB0aGUNCisgKiBSVE9TIHRpY2sgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZS4gIElmIHRoZSBjb29wZXJhdGl2ZSBzY2hlZHVsZXIgaXMgDQorICogYmVpbmcgdXNlZCB0aGVuIHRoaXMgc2ltcGx5IGluY3JlbWVudHMgdGhlIHRpY2sgY291bnQuICBJZiB0aGUgDQogICogcHJlZW1wdGl2ZSBzY2hlZHVsZXIgaXMgYmVpbmcgdXNlZCBhIGNvbnRleHQgc3dpdGNoIGNhbiBvY2N1ci4NCiAgKi8NCiB2b2lkIHZQb3J0VGlja0ludGVycnVwdCggdm9pZCApDQogew0KLSAgICBwb3J0SVNSX0hFQUQoKTsNCisJcG9ydElTUl9IRUFEKCk7DQogDQotICAgIC8qIENsZWFyIHRpY2sgdGltZXIgZmxhZyAqLw0KLSAgICBDUkdGTEcgPSAweDgwOw0KKwkvKiBDbGVhciB0aWNrIHRpbWVyIGZsYWcgKi8NCisJQ1JHRkxHID0gMHg4MDsNCiANCi0gICAgI2lmIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDENCi0gICAgICAgIHsNCi0gICAgICAgICAgICAvKiBBIGNvbnRleHQgc3dpdGNoIG1pZ2h0IGhhcHBlbiBzbyBzYXZlIHRoZSBjb250ZXh0LiAqLw0KLSAgICAgICAgICAgIHBvcnRTQVZFX0NPTlRFWFQoKTsNCisJI2lmIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDENCisJew0KKwkJLyogQSBjb250ZXh0IHN3aXRjaCBtaWdodCBoYXBwZW4gc28gc2F2ZSB0aGUgY29udGV4dC4gKi8NCisJCXBvcnRTQVZFX0NPTlRFWFQoKTsNCiANCi0gICAgICAgICAgICAvKiBJbmNyZW1lbnQgdGhlIHRpY2sgLi4uICovDQotICAgICAgICAgICAgaWYoIHhUYXNrSW5jcmVtZW50VGljaygpICE9IHBkRkFMU0UgKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgLyogQSBjb250ZXh0IHN3aXRjaCBpcyBuZWNlc3NhcnkuICovDQotICAgICAgICAgICAgICAgIHZUYXNrU3dpdGNoQ29udGV4dCgpOw0KLSAgICAgICAgICAgIH0NCisJCS8qIEluY3JlbWVudCB0aGUgdGljayAuLi4gKi8NCisJCWlmKCB4VGFza0luY3JlbWVudFRpY2soKSAhPSBwZEZBTFNFICkNCisJCXsNCisJCQkvKiBBIGNvbnRleHQgc3dpdGNoIGlzIG5lY2Vzc2FyeS4gKi8NCisJCQl2VGFza1N3aXRjaENvbnRleHQoKTsNCisJCX0NCiANCi0gICAgICAgICAgICAvKiBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIGEgdGFzayAtIHdoaWNoIG1heSBiZSBhIGRpZmZlcmVudCB0YXNrDQotICAgICAgICAgICAgICogdG8gdGhhdCBpbnRlcnJ1cHRlZC4gKi8NCi0gICAgICAgICAgICBwb3J0UkVTVE9SRV9DT05URVhUKCk7DQotICAgICAgICB9DQotICAgICNlbHNlIC8qIGlmIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDEgKi8NCi0gICAgICAgIHsNCi0gICAgICAgICAgICB4VGFza0luY3JlbWVudFRpY2soKTsNCi0gICAgICAgIH0NCi0gICAgI2VuZGlmIC8qIGlmIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDEgKi8NCisJCS8qIFJlc3RvcmUgdGhlIGNvbnRleHQgb2YgYSB0YXNrIC0gd2hpY2ggbWF5IGJlIGEgZGlmZmVyZW50IHRhc2sNCisJCXRvIHRoYXQgaW50ZXJydXB0ZWQuICovDQorCQlwb3J0UkVTVE9SRV9DT05URVhUKCk7DQorCX0NCisJI2Vsc2UNCisJew0KKwkJeFRhc2tJbmNyZW1lbnRUaWNrKCk7DQorCX0NCisJI2VuZGlmDQogDQotICAgIHBvcnRJU1JfVEFJTCgpOw0KKwlwb3J0SVNSX1RBSUwoKTsNCiB9DQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvR0NDL0hDUzEyL3BvcnRtYWNyby5oIGIvcG9ydGFibGUvR0NDL0hDUzEyL3BvcnRtYWNyby5oCmluZGV4IDY2ODliM2UuLmQ3Y2NiODkgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0dDQy9IQ1MxMi9wb3J0bWFjcm8uaAorKysgYi9wb3J0YWJsZS9HQ0MvSENTMTIvcG9ydG1hY3JvLmgKQEAgLTI3LDExICsyNywxMSBAQAogDQogDQogI2lmbmRlZiBQT1JUTUFDUk9fSA0KLSAgICAjZGVmaW5lIFBPUlRNQUNST19IDQorI2RlZmluZSBQT1JUTUFDUk9fSA0KIA0KLSAgICAjaWZkZWYgX19jcGx1c3BsdXMNCi0gICAgICAgIGV4dGVybiAiQyIgew0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICogUG9ydCBzcGVjaWZpYyBkZWZpbml0aW9ucy4NCkBAIC00NCwzOCArNDQsMzggQEAKICAqLw0KIA0KIC8qIFR5cGUgZGVmaW5pdGlvbnMuICovDQotICAgICNkZWZpbmUgcG9ydENIQVIgICAgICAgICAgY2hhcg0KLSAgICAjZGVmaW5lIHBvcnRGTE9BVCAgICAgICAgIGZsb2F0DQotICAgICNkZWZpbmUgcG9ydERPVUJMRSAgICAgICAgZG91YmxlDQotICAgICNkZWZpbmUgcG9ydExPTkcgICAgICAgICAgbG9uZw0KLSAgICAjZGVmaW5lIHBvcnRTSE9SVCAgICAgICAgIHNob3J0DQotICAgICNkZWZpbmUgcG9ydFNUQUNLX1RZUEUgICAgdWludDhfdA0KLSAgICAjZGVmaW5lIHBvcnRCQVNFX1RZUEUgICAgIGNoYXINCisjZGVmaW5lIHBvcnRDSEFSCQljaGFyDQorI2RlZmluZSBwb3J0RkxPQVQJCWZsb2F0DQorI2RlZmluZSBwb3J0RE9VQkxFCQlkb3VibGUNCisjZGVmaW5lIHBvcnRMT05HCQlsb25nDQorI2RlZmluZSBwb3J0U0hPUlQJCXNob3J0DQorI2RlZmluZSBwb3J0U1RBQ0tfVFlQRQl1aW50OF90DQorI2RlZmluZSBwb3J0QkFTRV9UWVBFCWNoYXINCiANCi0gICAgdHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSAgIFN0YWNrVHlwZV90Ow0KLSAgICB0eXBlZGVmIHNpZ25lZCBjaGFyICAgICAgQmFzZVR5cGVfdDsNCi0gICAgdHlwZWRlZiB1bnNpZ25lZCBjaGFyICAgIFVCYXNlVHlwZV90Ow0KK3R5cGVkZWYgcG9ydFNUQUNLX1RZUEUgU3RhY2tUeXBlX3Q7DQordHlwZWRlZiBzaWduZWQgY2hhciBCYXNlVHlwZV90Ow0KK3R5cGVkZWYgdW5zaWduZWQgY2hhciBVQmFzZVR5cGVfdDsNCiANCiANCi0gICAgI2lmICggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCi0gICAgICAgIHR5cGVkZWYgdWludDE2X3QgICAgIFRpY2tUeXBlX3Q7DQotICAgICAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQotICAgICNlbHNlDQotICAgICAgICB0eXBlZGVmIHVpbnQzMl90ICAgICBUaWNrVHlwZV90Ow0KLSAgICAgICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTA0KLSAgICAjZW5kaWYNCisjaWYoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQorCXR5cGVkZWYgdWludDE2X3QgVGlja1R5cGVfdDsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggVGlja1R5cGVfdCApIDB4ZmZmZg0KKyNlbHNlDQorCXR5cGVkZWYgdWludDMyX3QgVGlja1R5cGVfdDsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTA0KKyNlbmRpZg0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIEhhcmR3YXJlIHNwZWNpZmljcy4gKi8NCi0gICAgI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQgICAgMQ0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEggICAgICAoIC0xICkNCi0gICAgI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMgICAgKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCi0gICAgI2RlZmluZSBwb3J0WUlFTEQoKSAgICBfX2FzbSggInN3aSIgKTsNCisjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVAkJCTENCisjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEgJCQkoIC0xICkNCisjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUwkJCSggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQorI2RlZmluZSBwb3J0WUlFTEQoKQkJCQkJX19hc20oICJzd2kiICk7DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogQ3JpdGljYWwgc2VjdGlvbiBoYW5kbGluZy4gKi8NCi0gICAgI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKSAgICAgX19hc20oICJjbGkiICkNCi0gICAgI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgICAgX19hc20oICJzZWkiICkNCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpCQkJCV9fYXNtKCAiY2xpIiApDQorI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkJCQlfX2FzbSggInNlaSIgKQ0KIA0KIC8qDQogICogRGlzYWJsZSBpbnRlcnJ1cHRzIGJlZm9yZSBpbmNyZW1lbnRpbmcgdGhlIGNvdW50IG9mIGNyaXRpY2FsIHNlY3Rpb24gbmVzdGluZy4NCkBAIC04MywyOSArODMsMjkgQEAKICAqIHJlLWVuYWJsZWQuICBPbmNlIGludGVycnVwdHMgYXJlIGRpc2FibGVkIHRoZSBuZXN0aW5nIGNvdW50IGNhbiBiZSBhY2Nlc3NlZA0KICAqIGRpcmVjdGx5LiAgRWFjaCB0YXNrIG1haW50YWlucyBpdHMgb3duIG5lc3RpbmcgY291bnQuDQogICovDQotICAgICNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgZXh0ZXJuIHZvbGF0aWxlIFVCYXNlVHlwZV90IHV4Q3JpdGljYWxOZXN0aW5nOyBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgdXhDcml0aWNhbE5lc3RpbmcrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIH0NCisjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpICAJCQkJCQkJCQlcDQorewkJCQkJCQkJCQkJCQkJCQlcDQorCWV4dGVybiB2b2xhdGlsZSBVQmFzZVR5cGVfdCB1eENyaXRpY2FsTmVzdGluZzsJXA0KKwkJCQkJCQkJCQkJCQkJCQlcDQorCXBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsJCQkJCQkJCQlcDQorCXV4Q3JpdGljYWxOZXN0aW5nKys7CQkJCQkJCQkJCVwNCit9DQogDQogLyoNCiAgKiBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCBzbyB3ZSBjYW4gYWNjZXNzIHRoZSBuZXN0aW5nIGNvdW50IGRpcmVjdGx5LiAgSWYgdGhlDQogICogbmVzdGluZyBpcyBmb3VuZCB0byBiZSAwIChubyBuZXN0aW5nKSB0aGVuIHdlIGFyZSBsZWF2aW5nIHRoZSBjcml0aWNhbA0KICAqIHNlY3Rpb24gYW5kIGludGVycnVwdHMgY2FuIGJlIHJlLWVuYWJsZWQuDQogICovDQotICAgICNkZWZpbmUgIHBvcnRFWElUX0NSSVRJQ0FMKCkgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgZXh0ZXJuIHZvbGF0aWxlIFVCYXNlVHlwZV90IHV4Q3JpdGljYWxOZXN0aW5nOyBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHV4Q3JpdGljYWxOZXN0aW5nLS07ICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgaWYoIHV4Q3JpdGljYWxOZXN0aW5nID09IDAgKSAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKTsgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIH0NCisjZGVmaW5lICBwb3J0RVhJVF9DUklUSUNBTCgpCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJXA0KKwlleHRlcm4gdm9sYXRpbGUgVUJhc2VUeXBlX3QgdXhDcml0aWNhbE5lc3Rpbmc7CVwNCisJCQkJCQkJCQkJCQkJCQkJXA0KKwl1eENyaXRpY2FsTmVzdGluZy0tOwkJCQkJCQkJCQlcDQorCWlmKCB1eENyaXRpY2FsTmVzdGluZyA9PSAwICkJCQkJCQkJCVwNCisJewkJCQkJCQkJCQkJCQkJCVwNCisJCXBvcnRFTkFCTEVfSU5URVJSVVBUUygpOwkJCQkJCQkJXA0KKwl9CQkJCQkJCQkJCQkJCQkJXA0KK30NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBUYXNrIHV0aWxpdGllcy4gKi8NCkBAIC0xMjAsMTYgKzEyMCwxNSBAQAogICogcmVnaXN0ZXIgaXMgYWxzbyBzdG9yZWQgYXMgcGFydCBvZiB0aGUgdGFza3MgY29udGV4dC4NCiAgKi8NCiANCi0gICAgI2lmZGVmIEJBTktFRF9NT0RFTA0KLQ0KLS8qDQotICogTG9hZCB0aGUgc3RhY2sgcG9pbnRlciBmb3IgdGhlIHRhc2ssIHRoZW4gcHVsbCB0aGUgY3JpdGljYWwgbmVzdGluZw0KLSAqIGNvdW50IGFuZCBQUEFHRSByZWdpc3RlciBmcm9tIHRoZSBzdGFjay4gIFRoZSByZW1haW5zIG9mIHRoZQ0KLSAqIGNvbnRleHQgYXJlIHJlc3RvcmVkIGJ5IHRoZSBSVEkgaW5zdHJ1Y3Rpb24uDQotICovDQotICAgICAgICAjZGVmaW5lIHBvcnRSRVNUT1JFX0NPTlRFWFQoKSBcDQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBfX2FzbSggIgkJCQkJCQkJXG5cDQorI2lmZGVmIEJBTktFRF9NT0RFTA0KKwkvKg0KKwkgKiBMb2FkIHRoZSBzdGFjayBwb2ludGVyIGZvciB0aGUgdGFzaywgdGhlbiBwdWxsIHRoZSBjcml0aWNhbCBuZXN0aW5nDQorCSAqIGNvdW50IGFuZCBQUEFHRSByZWdpc3RlciBmcm9tIHRoZSBzdGFjay4gIFRoZSByZW1haW5zIG9mIHRoZQ0KKwkgKiBjb250ZXh0IGFyZSByZXN0b3JlZCBieSB0aGUgUlRJIGluc3RydWN0aW9uLg0KKwkgKi8NCisJI2RlZmluZSBwb3J0UkVTVE9SRV9DT05URVhUKCkJCQkJCQkJXA0KKwl7CQkJCQkJCQkJCVwNCisJCV9fYXNtKCAiCQkJCQkJCQlcblwNCiAJCS5nbG9ibCBweEN1cnJlbnRUQ0IJCQk7IHZvaWQgKgkJCVxuXA0KIAkJLmdsb2JsIHV4Q3JpdGljYWxOZXN0aW5nCQk7IGNoYXIJCQkJXG5cDQogCQkJCQkJCQkJCQlcblwNCkBAIC0xMzgsMTcgKzEzNywxNyBAQAogCQkJCQkJCQkJCQlcblwNCiAJCW1vdmIgMSxzcCssdXhDcml0aWNhbE5lc3RpbmcJCQkJCQlcblwNCiAJCW1vdmIgMSxzcCssMHgzMAkJCQk7IFBQQUdFCQkJCVxuXA0KLQkJIiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB9DQorCQkiICk7CQkJCQkJCQkJXA0KKwl9DQogDQotLyoNCi0gKiBCeSB0aGUgdGltZSB0aGlzIG1hY3JvIGlzIGNhbGxlZCB0aGUgcHJvY2Vzc29yIGhhcyBhbHJlYWR5IHN0YWNrZWQgdGhlDQotICogcmVnaXN0ZXJzLiAgU2ltcGx5IHN0YWNrIHRoZSBuZXN0aW5nIGNvdW50IGFuZCBQUEFHRSB2YWx1ZSwgdGhlbiBzYXZlDQotICogdGhlIHRhc2sgc3RhY2sgcG9pbnRlci4NCi0gKi8NCi0gICAgICAgICNkZWZpbmUgcG9ydFNBVkVfQ09OVEVYVCgpIFwNCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIF9fYXNtKCAiCQkJCQkJCQlcblwNCisJLyoNCisJICogQnkgdGhlIHRpbWUgdGhpcyBtYWNybyBpcyBjYWxsZWQgdGhlIHByb2Nlc3NvciBoYXMgYWxyZWFkeSBzdGFja2VkIHRoZQ0KKwkgKiByZWdpc3RlcnMuICBTaW1wbHkgc3RhY2sgdGhlIG5lc3RpbmcgY291bnQgYW5kIFBQQUdFIHZhbHVlLCB0aGVuIHNhdmUNCisJICogdGhlIHRhc2sgc3RhY2sgcG9pbnRlci4NCisJICovDQorCSNkZWZpbmUgcG9ydFNBVkVfQ09OVEVYVCgpCQkJCQkJCVwNCisJewkJCQkJCQkJCQlcDQorCQlfX2FzbSggIgkJCQkJCQkJXG5cDQogCQkuZ2xvYmwgcHhDdXJyZW50VENCCQkJOyB2b2lkICoJCQlcblwNCiAJCS5nbG9ibCB1eENyaXRpY2FsTmVzdGluZwkJOyBjaGFyCQkJCVxuXA0KIAkJCQkJCQkJCQkJXG5cDQpAQCAtMTU3LDE4ICsxNTYsMTggQEAKIAkJCQkJCQkJCQkJXG5cDQogCQlsZHggIHB4Q3VycmVudFRDQgkJCQkJCQlcblwNCiAJCXN0cyAgMCx4CQkJCTsgU3RhY2sJCQkJXG5cDQotCQkiICk7ICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIH0NCi0gICAgI2Vsc2UgLyogaWZkZWYgQkFOS0VEX01PREVMICovDQorCQkiICk7CQkJCQkJCQkJXA0KKwl9DQorI2Vsc2UNCiANCi0vKg0KLSAqIFRoZXNlIG1hY3JvcyBhcmUgYXMgcGVyIHRoZSBCQU5LRUQgdmVyc2lvbnMgYWJvdmUsIGJ1dCB3aXRob3V0IHNhdmluZw0KLSAqIGFuZCByZXN0b3JpbmcgdGhlIFBQQUdFIHJlZ2lzdGVyLg0KLSAqLw0KKwkvKg0KKwkgKiBUaGVzZSBtYWNyb3MgYXJlIGFzIHBlciB0aGUgQkFOS0VEIHZlcnNpb25zIGFib3ZlLCBidXQgd2l0aG91dCBzYXZpbmcNCisJICogYW5kIHJlc3RvcmluZyB0aGUgUFBBR0UgcmVnaXN0ZXIuDQorCSAqLw0KIA0KLSAgICAgICAgI2RlZmluZSBwb3J0UkVTVE9SRV9DT05URVhUKCkgXA0KLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgX19hc20oICIJCQkJCQkJCVxuXA0KKwkjZGVmaW5lIHBvcnRSRVNUT1JFX0NPTlRFWFQoKQkJCQkJCQlcDQorCXsJCQkJCQkJCQkJXA0KKwkJX19hc20oICIJCQkJCQkJCVxuXA0KIAkJLmdsb2JsIHB4Q3VycmVudFRDQgkJCTsgdm9pZCAqCQkJXG5cDQogCQkuZ2xvYmwgdXhDcml0aWNhbE5lc3RpbmcJCTsgY2hhcgkJCQlcblwNCiAJCQkJCQkJCQkJCVxuXA0KQEAgLTE3NiwxMiArMTc1LDEyIEBACiAJCWxkcyAgMCx4CQkJCTsgU3RhY2sJCQkJXG5cDQogCQkJCQkJCQkJCQlcblwNCiAJCW1vdmIgMSxzcCssdXhDcml0aWNhbE5lc3RpbmcJCQkJCQlcblwNCi0JCSIgKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgfQ0KKwkJIiApOwkJCQkJCQkJCVwNCisJfQ0KIA0KLSAgICAgICAgI2RlZmluZSBwb3J0U0FWRV9DT05URVhUKCkgXA0KLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgX19hc20oICIJCQkJCQkJCVxuXA0KKwkjZGVmaW5lIHBvcnRTQVZFX0NPTlRFWFQoKQkJCQkJCQlcDQorCXsJCQkJCQkJCQkJXA0KKwkJX19hc20oICIJCQkJCQkJCVxuXA0KIAkJLmdsb2JsIHB4Q3VycmVudFRDQgkJCTsgdm9pZCAqCQkJXG5cDQogCQkuZ2xvYmwgdXhDcml0aWNhbE5lc3RpbmcJCTsgY2hhcgkJCQlcblwNCiAJCQkJCQkJCQkJCVxuXA0KQEAgLTE4OSwyOSArMTg4LDI5IEBACiAJCQkJCQkJCQkJCVxuXA0KIAkJbGR4ICBweEN1cnJlbnRUQ0IJCQkJCQkJXG5cDQogCQlzdHMgIDAseAkJCQk7IFN0YWNrCQkJCVxuXA0KLQkJIiApOyAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB9DQotICAgICNlbmRpZiAvKiBpZmRlZiBCQU5LRURfTU9ERUwgKi8NCisJCSIgKTsJCQkJCQkJCQlcDQorCX0NCisjZW5kaWYNCiANCiAvKg0KICAqIFV0aWxpdHkgbWFjcm9zIHRvIHNhdmUvcmVzdG9yZSBjb3JyZWN0IHNvZnR3YXJlIHJlZ2lzdGVycyBmb3IgR0NDLiBUaGlzIGlzDQogICogdXNlZnVsIHdoZW4gR0NDIGRvZXMgbm90IGdlbmVyYXRlIGFwcHJvcHJpYXRlIElTUiBoZWFkL3RhaWwgY29kZS4NCiAgKi8NCi0gICAgI2RlZmluZSBwb3J0SVNSX0hFQUQoKSBcDQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgX19hc20oICIJCQkJCQkJCQlcblwNCisjZGVmaW5lIHBvcnRJU1JfSEVBRCgpCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCVwNCisJCV9fYXNtKCIJCQkJCQkJCQlcblwNCiAJCW1vdncgXy5mcmFtZSwgMiwtc3AJCQkJCQkJXG5cDQogCQltb3Z3IF8udG1wLCAyLC1zcAkJCQkJCQlcblwNCiAJCW1vdncgXy56LCAyLC1zcAkJCQkJCQkJXG5cDQogCQltb3Z3IF8ueHksIDIsLXNwCQkJCQkJCVxuXA0KIAkJO21vdncgXy5kMiwgMiwtc3AJCQkJCQkJXG5cDQogCQk7bW92dyBfLmQxLCAyLC1zcAkJCQkJCQlcblwNCi0JCSIgKTsgICAgICAgICAgICAgICBcDQotICAgIH0NCisJCSIpOwkJCQkJCQkJCVwNCit9DQogDQotICAgICNkZWZpbmUgcG9ydElTUl9UQUlMKCkgXA0KLSAgICB7ICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIF9fYXNtKCAiCQkJCQkJCQkJXG5cDQorI2RlZmluZSBwb3J0SVNSX1RBSUwoKQkJCQkJCQkJCVwNCit7CQkJCQkJCQkJCQlcDQorCQlfX2FzbSgiCQkJCQkJCQkJXG5cDQogCQltb3Z3IDIsc3ArLCBfLnh5CQkJCQkJCVxuXA0KIAkJbW92dyAyLHNwKywgXy56CQkJCQkJCQlcblwNCiAJCW1vdncgMixzcCssIF8udG1wCQkJCQkJCVxuXA0KQEAgLTIxOSw4ICsyMTgsOCBAQAogCQk7bW92dyAyLHNwKywgXy5kMQkJCQkJCQlcblwNCiAJCTttb3Z3IDIsc3ArLCBfLmQyCQkJCQkJCVxuXA0KIAkJcnRpCQkJCQkJCQkJXG5cDQotCQkiICk7ICAgICAgICAgICAgICAgXA0KLSAgICB9DQorCQkiKTsJCQkJCQkJCQlcDQorfQ0KIA0KIC8qDQogICogVXRpbGl0eSBtYWNybyB0byBjYWxsIG1hY3JvcyBhYm92ZSBpbiBjb3JyZWN0IG9yZGVyIGluIG9yZGVyIHRvIHBlcmZvcm0gYQ0KQEAgLTIyOSwxOCArMjI4LDE5IEBACiAgKiB2YXJpYWJsZXMgcG9ydFlJRUxEKCkgc2hvdWxkIGJlIHVzZWQgaW4gaXQncyBwbGFjZS4NCiAgKi8NCiANCi0gICAgI2RlZmluZSBwb3J0VEFTS19TV0lUQ0hfRlJPTV9JU1IoKSBcDQotICAgIHBvcnRTQVZFX0NPTlRFWFQoKTsgICAgICAgICAgICAgICAgXA0KLSAgICB2VGFza1N3aXRjaENvbnRleHQoKTsgICAgICAgICAgICAgIFwNCi0gICAgcG9ydFJFU1RPUkVfQ09OVEVYVCgpOw0KKyNkZWZpbmUgcG9ydFRBU0tfU1dJVENIX0ZST01fSVNSKCkJCQkJCQkJCVwNCisJcG9ydFNBVkVfQ09OVEVYVCgpOwkJCQkJCQkJCQkJXA0KKwl2VGFza1N3aXRjaENvbnRleHQoKTsJCQkJCQkJCQkJXA0KKwlwb3J0UkVTVE9SRV9DT05URVhUKCk7DQogDQogDQogLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQotICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KLSAgICAjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgICAgICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgfQ0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQogDQogI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvR0NDL0lBMzJfZmxhdC9JU1JfU3VwcG9ydC5oIGIvcG9ydGFibGUvR0NDL0lBMzJfZmxhdC9JU1JfU3VwcG9ydC5oCmluZGV4IDgyNzY1ZGQuLjAyMjJmNDkgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0dDQy9JQTMyX2ZsYXQvSVNSX1N1cHBvcnQuaAorKysgYi9wb3J0YWJsZS9HQ0MvSUEzMl9mbGF0L0lTUl9TdXBwb3J0LmgKQEAgLTI1LDEwMiArMjUsMTAzIEBACiAgKiAxIHRhYiA9PSA0IHNwYWNlcyENCiAgKi8NCiANCi0uZXh0ZXJuIHVsVG9wT2ZTeXN0ZW1TdGFjaw0KLSAgIC5leHRlcm4gdWxJbnRlcnJ1cHROZXN0aW5nDQorCS5leHRlcm4gdWxUb3BPZlN5c3RlbVN0YWNrDQorCS5leHRlcm4gdWxJbnRlcnJ1cHROZXN0aW5nDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQotICAgLm1hY3JvIHBvcnRGUkVFUlRPU19JTlRFUlJVUFRfRU5UUlkNCisubWFjcm8gcG9ydEZSRUVSVE9TX0lOVEVSUlVQVF9FTlRSWQ0KIA0KLS8qIFNhdmUgZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycy4gKi8NCi1wdXNoYQ0KKwkvKiBTYXZlIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMuICovDQorCXB1c2hhDQogDQotLyogSWYgdWxJbnRlcnJ1cHROZXN0aW5nIGlzIHplcm8gdGhlIHJlc3Qgb2YgdGhlIHRhc2sgY29udGV4dCB3aWxsIG5lZWQNCi0gKiBzYXZpbmcgYW5kIGEgc3RhY2sgc3dpdGNoIG1pZ2h0IGJlIHJlcXVpcmVkLiAqLw0KLW1vdmwgdWxJbnRlcnJ1cHROZXN0aW5nLCAlIGVheA0KLXRlc3QgJSBlYXgsICUgZWF4DQotam5lICAgICAyZg0KKwkvKiBJZiB1bEludGVycnVwdE5lc3RpbmcgaXMgemVybyB0aGUgcmVzdCBvZiB0aGUgdGFzayBjb250ZXh0IHdpbGwgbmVlZA0KKwlzYXZpbmcgYW5kIGEgc3RhY2sgc3dpdGNoIG1pZ2h0IGJlIHJlcXVpcmVkLiAqLw0KKwltb3ZsCXVsSW50ZXJydXB0TmVzdGluZywgJWVheA0KKwl0ZXN0CSVlYXgsICVlYXgNCisJam5lCQkyZg0KIA0KLS8qIEludGVycnVwdHMgYXJlIG5vdCBuZXN0ZWQsIHNvIHNhdmUgdGhlIHJlc3Qgb2YgdGhlIHRhc2sgY29udGV4dC4gKi8NCi0gICAuaWYgY29uZmlnU1VQUE9SVF9GUFUgPT0gMQ0KKwkvKiBJbnRlcnJ1cHRzIGFyZSBub3QgbmVzdGVkLCBzbyBzYXZlIHRoZSByZXN0IG9mIHRoZSB0YXNrIGNvbnRleHQuICovDQorCS5pZiBjb25maWdTVVBQT1JUX0ZQVSA9PSAxDQogDQotLyogSWYgdGhlIHRhc2sgaGFzIGEgYnVmZmVyIGFsbG9jYXRlZCB0byBzYXZlIHRoZSBGUFUgY29udGV4dCB0aGVuDQotICogc2F2ZSB0aGUgRlBVIGNvbnRleHQgbm93LiAqLw0KLW1vdmwgcHVjUG9ydFRhc2tGUFVDb250ZXh0QnVmZmVyLCAlIGVheA0KLXRlc3QgJSBlYXgsICUgZWF4DQotamUgICAgICAxZg0KLWZuc2F2ZSggJSBlYXggKSAvKiBTYXZlIEZMT1AgY29udGV4dCBpbnRvIHVjVGVtcEZQVUJ1ZmZlciBhcnJheS4gKi8NCi1md2FpdA0KKwkJLyogSWYgdGhlIHRhc2sgaGFzIGEgYnVmZmVyIGFsbG9jYXRlZCB0byBzYXZlIHRoZSBGUFUgY29udGV4dCB0aGVuDQorCQlzYXZlIHRoZSBGUFUgY29udGV4dCBub3cuICovDQorCQltb3ZsCXB1Y1BvcnRUYXNrRlBVQ29udGV4dEJ1ZmZlciwgJWVheA0KKwkJdGVzdAklZWF4LCAlZWF4DQorCQlqZQkJMWYNCisJCWZuc2F2ZQkoICVlYXggKSAvKiBTYXZlIEZMT1AgY29udGV4dCBpbnRvIHVjVGVtcEZQVUJ1ZmZlciBhcnJheS4gKi8NCisJCWZ3YWl0DQogDQotMSA6DQotLyogU2F2ZSB0aGUgYWRkcmVzcyBvZiB0aGUgRlBVIGNvbnRleHQsIGlmIGFueS4gKi8NCi1wdXNoIHB1Y1BvcnRUYXNrRlBVQ29udGV4dEJ1ZmZlcg0KKwkJMToNCisJCS8qIFNhdmUgdGhlIGFkZHJlc3Mgb2YgdGhlIEZQVSBjb250ZXh0LCBpZiBhbnkuICovDQorCQlwdXNoCXB1Y1BvcnRUYXNrRlBVQ29udGV4dEJ1ZmZlcg0KIA0KLSAgIC5lbmRpZiAvKiBjb25maWdTVVBQT1JUX0ZQVSAqLw0KKwkuZW5kaWYgLyogY29uZmlnU1VQUE9SVF9GUFUgKi8NCiANCi0vKiBGaW5kIHRoZSBUQ0IuICovDQotbW92bCBweEN1cnJlbnRUQ0IsICUgZWF4DQorCS8qIEZpbmQgdGhlIFRDQi4gKi8NCisJbW92bCAJcHhDdXJyZW50VENCLCAlZWF4DQogDQotLyogU3RhY2sgbG9jYXRpb24gaXMgZmlyc3QgaXRlbSBpbiB0aGUgVENCLiAqLw0KLSAgICAgbW92bCAlIGVzcCwgKCAlIGVheCApDQorCS8qIFN0YWNrIGxvY2F0aW9uIGlzIGZpcnN0IGl0ZW0gaW4gdGhlIFRDQi4gKi8NCisJbW92bAklZXNwLCAoJWVheCkNCiANCi0vKiBTd2l0Y2ggc3RhY2tzLiAqLw0KLW1vdmwgdWxUb3BPZlN5c3RlbVN0YWNrLCAlIGVzcA0KLW1vdmwgJSBlc3AsICUgZWJwDQorCS8qIFN3aXRjaCBzdGFja3MuICovDQorCW1vdmwgCXVsVG9wT2ZTeXN0ZW1TdGFjaywgJWVzcA0KKwltb3ZsCSVlc3AsICVlYnANCiANCi0yIDoNCi0vKiBJbmNyZW1lbnQgbmVzdGluZyBjb3VudC4gKi8NCi1hZGQgJDEsIHVsSW50ZXJydXB0TmVzdGluZw0KKwkyOg0KKwkvKiBJbmNyZW1lbnQgbmVzdGluZyBjb3VudC4gKi8NCisJYWRkIAkkMSwgdWxJbnRlcnJ1cHROZXN0aW5nDQogDQotICAgLmVuZG0NCisuZW5kbQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KLSAgIC5tYWNybyBwb3J0SU5URVJSVVBUX0VQSUxPR1VFDQorLm1hY3JvIHBvcnRJTlRFUlJVUFRfRVBJTE9HVUUNCiANCi1jbGkNCi1zdWIgJDEsIHVsSW50ZXJydXB0TmVzdGluZw0KKwljbGkNCisJc3ViCQkkMSwgdWxJbnRlcnJ1cHROZXN0aW5nDQogDQotLyogSWYgdGhlIG5lc3RpbmcgaGFzIHVud291bmQgdG8gemVyby4gKi8NCi1tb3ZsIHVsSW50ZXJydXB0TmVzdGluZywgJSBlYXgNCi0gICAgIHRlc3QgJSBlYXgsICUgZWF4DQotICAgICBqbmUgICAgIDJmDQorCS8qIElmIHRoZSBuZXN0aW5nIGhhcyB1bndvdW5kIHRvIHplcm8uICovDQorCW1vdmwJdWxJbnRlcnJ1cHROZXN0aW5nLCAlZWF4DQorCXRlc3QJJWVheCwgJWVheA0KKwlqbmUJCTJmDQogDQotLyogSWYgYSB5aWVsZCB3YXMgcmVxdWVzdGVkIHRoZW4gc2VsZWN0IGEgbmV3IFRDQiBub3cuICovDQotbW92bCB1bFBvcnRZaWVsZFBlbmRpbmcsICUgZWF4DQotICAgICB0ZXN0ICUgZWF4LCAlIGVheA0KLSAgICAgamUgICAgICAxZg0KLW1vdmwgJDAsIHVsUG9ydFlpZWxkUGVuZGluZw0KLWNhbGwgdlRhc2tTd2l0Y2hDb250ZXh0DQorCS8qIElmIGEgeWllbGQgd2FzIHJlcXVlc3RlZCB0aGVuIHNlbGVjdCBhIG5ldyBUQ0Igbm93LiAqLw0KKwltb3ZsCXVsUG9ydFlpZWxkUGVuZGluZywgJWVheA0KKwl0ZXN0CSVlYXgsICVlYXgNCisJamUJCTFmDQorCW1vdmwJJDAsIHVsUG9ydFlpZWxkUGVuZGluZw0KKwljYWxsCXZUYXNrU3dpdGNoQ29udGV4dA0KIA0KLTEgOg0KLS8qIFN0YWNrIGxvY2F0aW9uIGlzIGZpcnN0IGl0ZW0gaW4gdGhlIFRDQi4gKi8NCi1tb3ZsIHB4Q3VycmVudFRDQiwgJSBlYXggbW92bCggJSBlYXggKSwgJSBlc3ANCisJMToNCisJLyogU3RhY2sgbG9jYXRpb24gaXMgZmlyc3QgaXRlbSBpbiB0aGUgVENCLiAqLw0KKwltb3ZsIAlweEN1cnJlbnRUQ0IsICVlYXgNCisJbW92bAkoJWVheCksICVlc3ANCiANCi0gICAuaWYgY29uZmlnU1VQUE9SVF9GUFUgPT0gMQ0KKwkuaWYgY29uZmlnU1VQUE9SVF9GUFUgPT0gMQ0KIA0KLS8qIFJlc3RvcmUgYWRkcmVzcyBvZiB0YXNrJ3MgRlBVIGNvbnRleHQgYnVmZmVyLiAqLw0KLXBvcCBwdWNQb3J0VGFza0ZQVUNvbnRleHRCdWZmZXINCisJCS8qIFJlc3RvcmUgYWRkcmVzcyBvZiB0YXNrJ3MgRlBVIGNvbnRleHQgYnVmZmVyLiAqLw0KKwkJcG9wIAlwdWNQb3J0VGFza0ZQVUNvbnRleHRCdWZmZXINCiANCi0vKiBJZiB0aGUgdGFzayBoYXMgYSBidWZmZXIgYWxsb2NhdGVkIGluIHdoaWNoIGl0cyBGUFUgY29udGV4dCBpcyBzYXZlZCwNCi0gKiB0aGVuIHJlc3RvcmUgaXQgbm93LiAqLw0KLW1vdmwgcHVjUG9ydFRhc2tGUFVDb250ZXh0QnVmZmVyLCAlIGVheA0KLXRlc3QgJSBlYXgsICUgZWF4DQotamUgICAgICAxZg0KLWZyc3RvciggJSBlYXggKQ0KLTEgOg0KLS5lbmRpZg0KKwkJLyogSWYgdGhlIHRhc2sgaGFzIGEgYnVmZmVyIGFsbG9jYXRlZCBpbiB3aGljaCBpdHMgRlBVIGNvbnRleHQgaXMgc2F2ZWQsDQorCQl0aGVuIHJlc3RvcmUgaXQgbm93LiAqLw0KKwkJbW92bAlwdWNQb3J0VGFza0ZQVUNvbnRleHRCdWZmZXIsICVlYXgNCisJCXRlc3QJJWVheCwgJWVheA0KKwkJamUJCTFmDQorCQlmcnN0b3IJKCAlZWF4ICkNCisJCTE6DQorCS5lbmRpZg0KIA0KLTIgOg0KLXBvcGENCisJMjoNCisJcG9wYQ0KIA0KLSAgIC5lbmRtDQorLmVuZG0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0gICAubWFjcm8gcG9ydEZSRUVSVE9TX0lOVEVSUlVQVF9FWElUDQorLm1hY3JvIHBvcnRGUkVFUlRPU19JTlRFUlJVUFRfRVhJVA0KIA0KLXBvcnRJTlRFUlJVUFRfRVBJTE9HVUUNCi0vKiBFT0kuICovDQotbW92bCAkMHgwMCwgKCAweEZFRTAwMEIwICkNCi1pcmV0DQorCXBvcnRJTlRFUlJVUFRfRVBJTE9HVUUNCisJLyogRU9JLiAqLw0KKwltb3ZsCSQweDAwLCAoMHhGRUUwMDBCMCkNCisJaXJldA0KIA0KLSAgIC5lbmRtDQorLmVuZG0NCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9HQ0MvSUEzMl9mbGF0L3BvcnQuYyBiL3BvcnRhYmxlL0dDQy9JQTMyX2ZsYXQvcG9ydC5jCmluZGV4IDQxYjUyMjAuLjFhMjBjOGUgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0dDQy9JQTMyX2ZsYXQvcG9ydC5jCisrKyBiL3BvcnRhYmxlL0dDQy9JQTMyX2ZsYXQvcG9ydC5jCkBAIC0zMyw2MSArMzMsNjEgQEAKICNpbmNsdWRlICJ0YXNrLmgiDQogDQogI2lmICggY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OID09IDEgKQ0KLSAgICAvKiBDaGVjayB0aGUgY29uZmlndXJhdGlvbi4gKi8NCi0gICAgI2lmICggY29uZmlnTUFYX1BSSU9SSVRJRVMgPiAzMiApDQotICAgICAgICAjZXJyb3IgY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OIGNhbiBvbmx5IGJlIHNldCB0byAxIHdoZW4gY29uZmlnTUFYX1BSSU9SSVRJRVMgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDMyLiAgSXQgaXMgdmVyeSByYXJlIHRoYXQgYSBzeXN0ZW0gcmVxdWlyZXMgbW9yZSB0aGFuIDEwIHRvIDE1IGRpZmZlcmVuY2UgcHJpb3JpdGllcyBhcyB0YXNrcyB0aGF0IHNoYXJlIGEgcHJpb3JpdHkgd2lsbCB0aW1lIHNsaWNlLg0KLSAgICAjZW5kaWYNCisJLyogQ2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24uICovDQorCSNpZiggY29uZmlnTUFYX1BSSU9SSVRJRVMgPiAzMiApDQorCQkjZXJyb3IgY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OIGNhbiBvbmx5IGJlIHNldCB0byAxIHdoZW4gY29uZmlnTUFYX1BSSU9SSVRJRVMgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDMyLiAgSXQgaXMgdmVyeSByYXJlIHRoYXQgYSBzeXN0ZW0gcmVxdWlyZXMgbW9yZSB0aGFuIDEwIHRvIDE1IGRpZmZlcmVuY2UgcHJpb3JpdGllcyBhcyB0YXNrcyB0aGF0IHNoYXJlIGEgcHJpb3JpdHkgd2lsbCB0aW1lIHNsaWNlLg0KKwkjZW5kaWYNCiAjZW5kaWYgLyogY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OICovDQogDQotI2lmICggY29uZmlnSVNSX1NUQUNLX1NJWkUgPCAoIGNvbmZpZ01JTklNQUxfU1RBQ0tfU0laRSAqIDIgKSApDQotICAgICN3YXJuaW5nIGNvbmZpZ0lTUl9TVEFDS19TSVpFIGlzIHByb2JhYmx5IHRvbyBzbWFsbCENCisjaWYoIGNvbmZpZ0lTUl9TVEFDS19TSVpFIDwgKCBjb25maWdNSU5JTUFMX1NUQUNLX1NJWkUgKiAyICkgKQ0KKwkjd2FybmluZyBjb25maWdJU1JfU1RBQ0tfU0laRSBpcyBwcm9iYWJseSB0b28gc21hbGwhDQogI2VuZGlmIC8qICggY29uZmlnSVNSX1NUQUNLX1NJWkUgPCBjb25maWdNSU5JTUFMX1NUQUNLX1NJWkUgKiAyICkgKi8NCiANCi0jaWYgKCAoIGNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgPiBwb3J0TUFYX1BSSU9SSVRZICkgfHwgKCBjb25maWdNQVhfQVBJX0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIDwgMiApICkNCi0gICAgI2Vycm9yIGNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgbXVzdCBiZSBiZXR3ZWVuIDIgYW5kIDE1DQorI2lmKCAoIGNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgPiBwb3J0TUFYX1BSSU9SSVRZICkgfHwgKCBjb25maWdNQVhfQVBJX0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIDwgMiApICkNCisJI2Vycm9yIGNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgbXVzdCBiZSBiZXR3ZWVuIDIgYW5kIDE1DQogI2VuZGlmDQogDQotI2lmICggKCBjb25maWdTVVBQT1JUX0ZQVSA9PSAxICkgJiYgKCBjb25maWdTVVBQT1JUX0RZTkFNSUNfQUxMT0NBVElPTiA9PSAwICkgKQ0KLSAgICAjZXJyb3IgY29uZmlnU1VQUE9SVF9EWU5BTUlDX0FMTE9DQVRJT04gbXVzdCBiZSBzZXQgdG8gMSB0byB1c2UgdGhpcyBwb3J0IHdpdGggYW4gRlBVDQorI2lmKCAoIGNvbmZpZ1NVUFBPUlRfRlBVID09IDEgKSAmJiAoIGNvbmZpZ1NVUFBPUlRfRFlOQU1JQ19BTExPQ0FUSU9OID09IDAgKSApDQorCSNlcnJvciBjb25maWdTVVBQT1JUX0RZTkFNSUNfQUxMT0NBVElPTiBtdXN0IGJlIHNldCB0byAxIHRvIHVzZSB0aGlzIHBvcnQgd2l0aCBhbiBGUFUNCiAjZW5kaWYNCiANCiAvKiBBIGNyaXRpY2FsIHNlY3Rpb24gaXMgZXhpdGVkIHdoZW4gdGhlIGNyaXRpY2FsIHNlY3Rpb24gbmVzdGluZyBjb3VudCByZWFjaGVzDQotICogdGhpcyB2YWx1ZS4gKi8NCi0jZGVmaW5lIHBvcnROT19DUklUSUNBTF9ORVNUSU5HICAgICAgICAgICggKCB1aW50MzJfdCApIDAgKQ0KK3RoaXMgdmFsdWUuICovDQorI2RlZmluZSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORwkJCSggKCB1aW50MzJfdCApIDAgKQ0KIA0KIC8qIFRhc2tzIGFyZSBub3QgY3JlYXRlZCB3aXRoIGEgZmxvYXRpbmcgcG9pbnQgY29udGV4dCwgYnV0IGNhbiBiZSBnaXZlbiBhDQotICogZmxvYXRpbmcgcG9pbnQgY29udGV4dCBhZnRlciB0aGV5IGhhdmUgYmVlbiBjcmVhdGVkLiAgQSB2YXJpYWJsZSBpcyBzdG9yZWQgYXMNCi0gKiBwYXJ0IG9mIHRoZSB0YXNrcyBjb250ZXh0IHRoYXQgaG9sZHMgcG9ydE5PX0ZMT0FUSU5HX1BPSU5UX0NPTlRFWFQgaWYgdGhlIHRhc2sNCi0gKiBkb2VzIG5vdCBoYXZlIGFuIEZQVSBjb250ZXh0LCBvciBhbnkgb3RoZXIgdmFsdWUgaWYgdGhlIHRhc2sgZG9lcyBoYXZlIGFuIEZQVQ0KLSAqIGNvbnRleHQuICovDQotI2RlZmluZSBwb3J0Tk9fRkxPQVRJTkdfUE9JTlRfQ09OVEVYVCAgICAoICggU3RhY2tUeXBlX3QgKSAwICkNCitmbG9hdGluZyBwb2ludCBjb250ZXh0IGFmdGVyIHRoZXkgaGF2ZSBiZWVuIGNyZWF0ZWQuICBBIHZhcmlhYmxlIGlzIHN0b3JlZCBhcw0KK3BhcnQgb2YgdGhlIHRhc2tzIGNvbnRleHQgdGhhdCBob2xkcyBwb3J0Tk9fRkxPQVRJTkdfUE9JTlRfQ09OVEVYVCBpZiB0aGUgdGFzaw0KK2RvZXMgbm90IGhhdmUgYW4gRlBVIGNvbnRleHQsIG9yIGFueSBvdGhlciB2YWx1ZSBpZiB0aGUgdGFzayBkb2VzIGhhdmUgYW4gRlBVDQorY29udGV4dC4gKi8NCisjZGVmaW5lIHBvcnROT19GTE9BVElOR19QT0lOVF9DT05URVhUCSggKCBTdGFja1R5cGVfdCApIDAgKQ0KIA0KIC8qIE9ubHkgdGhlIElGIGJpdCBpcyBzZXQgc28gdGFza3Mgc3RhcnQgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQuICovDQotI2RlZmluZSBwb3J0SU5JVElBTF9FRkxBR1MgICAgICAgICAgICAgICAoIDB4MjAwVUwgKQ0KKyNkZWZpbmUgcG9ydElOSVRJQUxfRUZMQUdTCQkJCSggMHgyMDBVTCApDQogDQogLyogRXJyb3IgaW50ZXJydXB0cyBhcmUgYXQgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgdmVjdG9ycy4gKi8NCi0jZGVmaW5lIHBvcnRBUElDX0xWVF9FUlJPUl9WRUNUT1IgICAgICAgICggMHhmZSApDQotI2RlZmluZSBwb3J0QVBJQ19TUFVSSU9VU19JTlRfVkVDVE9SICAgICAoIDB4ZmYgKQ0KKyNkZWZpbmUgcG9ydEFQSUNfTFZUX0VSUk9SX1ZFQ1RPUiAJCSggMHhmZSApDQorI2RlZmluZSBwb3J0QVBJQ19TUFVSSU9VU19JTlRfVkVDVE9SIAkoIDB4ZmYgKQ0KIA0KIC8qIEVGTEFHUyBiaXRzLiAqLw0KLSNkZWZpbmUgcG9ydEVGTEFHU19JRiAgICAgICAgICAgICAgICAgICAgKCAweDIwMFVMICkNCisjZGVmaW5lIHBvcnRFRkxBR1NfSUYJCQkJCSggMHgyMDBVTCApDQogDQogLyogRlBVIGNvbnRleHQgc2l6ZSBpZiBGU0FWRSBpcyB1c2VkLiAqLw0KLSNkZWZpbmUgcG9ydEZQVV9DT05URVhUX1NJWkVfQllURVMgICAgICAgMTA4DQorI2RlZmluZSBwb3J0RlBVX0NPTlRFWFRfU0laRV9CWVRFUyAJCTEwOA0KIA0KIC8qIFRoZSBleHBlY3RlZCBzaXplIG9mIGVhY2ggZW50cnkgaW4gdGhlIElEVC4gIFVzZWQgdG8gY2hlY2sgc3RydWN0dXJlIHBhY2tpbmcNCi0gKiBpcyBzZXQgY29ycmVjdGx5LiAqLw0KLSNkZWZpbmUgcG9ydEVYUEVDVEVEX0lEVF9FTlRSWV9TSVpFICAgICAgOA0KKyBpcyBzZXQgY29ycmVjdGx5LiAqLw0KKyNkZWZpbmUgcG9ydEVYUEVDVEVEX0lEVF9FTlRSWV9TSVpFCQk4DQogDQogLyogRGVmYXVsdCBmbGFncyBzZXR0aW5nIGZvciBlbnRyaWVzIGluIHRoZSBJRFQuICovDQotI2RlZmluZSBwb3J0SURUX0ZMQUdTICAgICAgICAgICAgICAgICAgICAoIDB4OEUgKQ0KKyNkZWZpbmUgcG9ydElEVF9GTEFHUwkJCQkJKCAweDhFICkNCiANCiAvKiBUaGlzIGlzIHRoZSBsb3dlc3QgcG9zc2libGUgSVNSIHZlY3RvciBhdmFpbGFibGUgdG8gYXBwbGljYXRpb24gY29kZS4gKi8NCi0jZGVmaW5lIHBvcnRBUElDX01JTl9BTExPV0FCTEVfVkVDVE9SICAgICggMHgyMCApDQorI2RlZmluZSBwb3J0QVBJQ19NSU5fQUxMT1dBQkxFX1ZFQ1RPUgkoIDB4MjAgKQ0KIA0KIC8qIElmIGNvbmZpZ0FTU0VSVCgpIGlzIGRlZmluZWQgdGhlbiB0aGUgc3lzdGVtIHN0YWNrIGlzIGZpbGxlZCB3aXRoIHRoaXMgdmFsdWUNCi0gKiB0byBhbGxvdyBmb3IgYSBjcnVkZSBzdGFjayBvdmVyZmxvdyBjaGVjay4gKi8NCi0jZGVmaW5lIHBvcnRTVEFDS19XT1JEICAgICAgICAgICAgICAgICAgICggMHhlY2VjZWNlYyApDQordG8gYWxsb3cgZm9yIGEgY3J1ZGUgc3RhY2sgb3ZlcmZsb3cgY2hlY2suICovDQorI2RlZmluZSBwb3J0U1RBQ0tfV09SRAkJCQkJKCAweGVjZWNlY2VjICkNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKg0KQEAgLTEwMyw5ICsxMDMsNyBAQAogLyoNCiAgKiBDb21wbGV0ZSBvbmUgZGVzY3JpcHRvciBpbiB0aGUgSURULg0KICAqLw0KLXN0YXRpYyB2b2lkIHBydlNldEludGVycnVwdEdhdGUoIHVpbnQ4X3QgdWNOdW1iZXIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVNSX0hhbmRsZXJfdCBweEhhbmRsZXJGdW5jdGlvbiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IHVjRmxhZ3MgKTsNCitzdGF0aWMgdm9pZCBwcnZTZXRJbnRlcnJ1cHRHYXRlKCB1aW50OF90IHVjTnVtYmVyLCBJU1JfSGFuZGxlcl90IHB4SGFuZGxlckZ1bmN0aW9uLCB1aW50OF90IHVjRmxhZ3MgKTsNCiANCiAvKg0KICAqIFRoZSBkZWZhdWx0IGhhbmRsZXIgaW5zdGFsbGVkIGluIGVhY2ggSURUIHBvc2l0aW9uLg0KQEAgLTEzNiw0MTcgKzEzNCw0MDggQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIEEgdmFyaWFibGUgaXMgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSBjcml0aWNhbCBzZWN0aW9uIG5lc3RpbmcuICBUaGlzDQotICogdmFyaWFibGUgbXVzdCBiZSBpbml0aWFsaXNlZCB0byBhIG5vbiB6ZXJvIHZhbHVlIHRvIGVuc3VyZSBpbnRlcnJ1cHRzIGRvbid0DQotICogaW5hZHZlcnRlbnRseSBiZWNvbWUgdW5tYXNrZWQgYmVmb3JlIHRoZSBzY2hlZHVsZXIgc3RhcnRzLiBJdCBpcyBzZXQgdG8gemVybw0KLSAqIGJlZm9yZSB0aGUgZmlyc3QgdGFzayBzdGFydHMgZXhlY3V0aW5nLiAqLw0KK3ZhcmlhYmxlIG11c3QgYmUgaW5pdGlhbGlzZWQgdG8gYSBub24gemVybyB2YWx1ZSB0byBlbnN1cmUgaW50ZXJydXB0cyBkb24ndA0KK2luYWR2ZXJ0ZW50bHkgYmVjb21lIHVubWFza2VkIGJlZm9yZSB0aGUgc2NoZWR1bGVyIHN0YXJ0cy4gSXQgaXMgc2V0IHRvIHplcm8NCitiZWZvcmUgdGhlIGZpcnN0IHRhc2sgc3RhcnRzIGV4ZWN1dGluZy4gKi8NCiB2b2xhdGlsZSB1aW50MzJfdCB1bENyaXRpY2FsTmVzdGluZyA9IDk5OTlVTDsNCiANCiAvKiBBIHN0cnVjdHVyZSB1c2VkIHRvIG1hcCB0aGUgdmFyaW91cyBmaWVsZHMgb2YgYW4gSURUIGVudHJ5IGludG8gc2VwYXJhdGUNCi0gKiBzdHJ1Y3R1cmUgbWVtYmVycy4gKi8NCitzdHJ1Y3R1cmUgbWVtYmVycy4gKi8NCiBzdHJ1Y3QgSURURW50cnkNCiB7DQotICAgIHVpbnQxNl90IHVzSVNSTG93OyAgICAgICAgICAvKiBMb3cgMTYgYml0cyBvZiBoYW5kbGVyIGFkZHJlc3MuICovDQotICAgIHVpbnQxNl90IHVzU2VnbWVudFNlbGVjdG9yOyAvKiBGbGF0IG1vZGVsIG1lYW5zIHRoaXMgaXMgbm90IGNoYW5nZWQuICovDQotICAgIHVpbnQ4X3QgdWNaZXJvOyAgICAgICAgICAgICAvKiBNdXN0IGJlIHNldCB0byB6ZXJvLiAqLw0KLSAgICB1aW50OF90IHVjRmxhZ3M7ICAgICAgICAgICAgLyogRmxhZ3MgZm9yIHRoaXMgZW50cnkuICovDQotICAgIHVpbnQxNl90IHVzSVNSSGlnaDsgICAgICAgICAvKiBIaWdoIDE2IGJpdHMgb2YgaGFuZGxlciBhZGRyZXNzLiAqLw0KLX0NCi1fX2F0dHJpYnV0ZV9fKCAoIHBhY2tlZCApICk7DQorCXVpbnQxNl90IHVzSVNSTG93OwkJCQkvKiBMb3cgMTYgYml0cyBvZiBoYW5kbGVyIGFkZHJlc3MuICovDQorCXVpbnQxNl90IHVzU2VnbWVudFNlbGVjdG9yOwkJLyogRmxhdCBtb2RlbCBtZWFucyB0aGlzIGlzIG5vdCBjaGFuZ2VkLiAqLw0KKwl1aW50OF90IHVjWmVybzsJCQkJCS8qIE11c3QgYmUgc2V0IHRvIHplcm8uICovDQorCXVpbnQ4X3QgdWNGbGFnczsJCQkJLyogRmxhZ3MgZm9yIHRoaXMgZW50cnkuICovDQorCXVpbnQxNl90IHVzSVNSSGlnaDsJCQkJLyogSGlnaCAxNiBiaXRzIG9mIGhhbmRsZXIgYWRkcmVzcy4gKi8NCit9IF9fYXR0cmlidXRlX18oICggcGFja2VkICkgKTsNCiB0eXBlZGVmIHN0cnVjdCBJRFRFbnRyeSBJRFRFbnRyeV90Ow0KIA0KIA0KIC8qIFVzZSB0byBwYXNzIHRoZSBsb2NhdGlvbiBvZiB0aGUgSURUIHRvIHRoZSBDUFUuICovDQogc3RydWN0IElEVFBvaW50ZXINCiB7DQotICAgIHVpbnQxNl90IHVzVGFibGVMaW1pdDsNCi0gICAgdWludDMyX3QgdWxUYWJsZUJhc2U7IC8qIFRoZSBhZGRyZXNzIG9mIHRoZSBmaXJzdCBlbnRyeSBpbiB4SW50ZXJydXB0RGVzY3JpcHRvclRhYmxlLiAqLw0KLX0NCi1fX2F0dHJpYnV0ZV9fKCAoIF9fcGFja2VkX18gKSApOw0KKyAgIHVpbnQxNl90IHVzVGFibGVMaW1pdDsNCisgICB1aW50MzJfdCB1bFRhYmxlQmFzZTsgICAgICAgICAgICAgICAgLyogVGhlIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IGVudHJ5IGluIHhJbnRlcnJ1cHREZXNjcmlwdG9yVGFibGUuICovDQorfSBfX2F0dHJpYnV0ZV9fKCAoIF9fcGFja2VkX18gKSApOw0KIHR5cGVkZWYgc3RydWN0IElEVFBvaW50ZXIgSURUUG9pbnRlcl90Ow0KIA0KIC8qIFRoZSBJRFQgaXRzZWxmLiAqLw0KLXN0YXRpYyBfX2F0dHJpYnV0ZV9fKCAoIGFsaWduZWQoIDMyICkgKSApIElEVEVudHJ5X3QgeEludGVycnVwdERlc2NyaXB0b3JUYWJsZVsgcG9ydE5VTV9WRUNUT1JTIF07DQorc3RhdGljIF9fYXR0cmlidXRlX18gKCAoIGFsaWduZWQoIDMyICkgKSApIElEVEVudHJ5X3QgeEludGVycnVwdERlc2NyaXB0b3JUYWJsZVsgcG9ydE5VTV9WRUNUT1JTIF07DQogDQogI2lmICggY29uZmlnVVNFX0NPTU1PTl9JTlRFUlJVUFRfRU5UUllfUE9JTlQgPT0gMSApDQogDQotLyogQSB0YWJsZSBpbiB3aGljaCBhcHBsaWNhdGlvbiBkZWZpbmVkIGludGVycnVwdCBoYW5kbGVycyBhcmUgc3RvcmVkLiAgVGhlc2UNCi0gKiBhcmUgY2FsbGVkIGJ5IHRoZSBjZW50cmFsIGludGVycnVwdCBoYW5kbGVyIGlmIGEgY29tbW9uIGludGVycnVwdCBlbnRyeQ0KLSAqIHBvaW50IGl0IHVzZWQuICovDQotICAgIHN0YXRpYyBJU1JfSGFuZGxlcl90IHhJbnRlcnJ1cHRIYW5kbGVyVGFibGVbIHBvcnROVU1fVkVDVE9SUyBdID0geyBOVUxMIH07DQorCS8qIEEgdGFibGUgaW4gd2hpY2ggYXBwbGljYXRpb24gZGVmaW5lZCBpbnRlcnJ1cHQgaGFuZGxlcnMgYXJlIHN0b3JlZC4gIFRoZXNlDQorCWFyZSBjYWxsZWQgYnkgdGhlIGNlbnRyYWwgaW50ZXJydXB0IGhhbmRsZXIgaWYgYSBjb21tb24gaW50ZXJydXB0IGVudHJ5DQorCXBvaW50IGl0IHVzZWQuICovDQorCXN0YXRpYyBJU1JfSGFuZGxlcl90IHhJbnRlcnJ1cHRIYW5kbGVyVGFibGVbIHBvcnROVU1fVkVDVE9SUyBdID0geyBOVUxMIH07DQogDQogI2VuZGlmIC8qIGNvbmZpZ1VTRV9DT01NT05fSU5URVJSVVBUX0VOVFJZX1BPSU5UICovDQogDQogI2lmICggY29uZmlnU1VQUE9SVF9GUFUgPT0gMSApDQogDQotLyogU2F2ZWQgYXMgcGFydCBvZiB0aGUgdGFzayBjb250ZXh0LiAgSWYgcHVjUG9ydFRhc2tGUFVDb250ZXh0QnVmZmVyIGlzIE5VTEwNCi0gKiB0aGVuIHRoZSB0YXNrIGRvZXMgbm90IGhhdmUgYW4gRlBVIGNvbnRleHQuICBJZiBwdWNQb3J0VGFza0ZQVUNvbnRleHRCdWZmZXIgaXMNCi0gKiBub3QgTlVMTCB0aGVuIGl0IHBvaW50cyB0byBhIGJ1ZmZlciBpbnRvIHdoaWNoIHRoZSBGUFUgY29udGV4dCBjYW4gYmUgc2F2ZWQuICovDQotICAgIHVpbnQ4X3QgKiBwdWNQb3J0VGFza0ZQVUNvbnRleHRCdWZmZXIgX19hdHRyaWJ1dGVfXyggKCB1c2VkICkgKSA9IHBkRkFMU0U7DQorCS8qIFNhdmVkIGFzIHBhcnQgb2YgdGhlIHRhc2sgY29udGV4dC4gIElmIHB1Y1BvcnRUYXNrRlBVQ29udGV4dEJ1ZmZlciBpcyBOVUxMDQorCXRoZW4gdGhlIHRhc2sgZG9lcyBub3QgaGF2ZSBhbiBGUFUgY29udGV4dC4gIElmIHB1Y1BvcnRUYXNrRlBVQ29udGV4dEJ1ZmZlciBpcw0KKwlub3QgTlVMTCB0aGVuIGl0IHBvaW50cyB0byBhIGJ1ZmZlciBpbnRvIHdoaWNoIHRoZSBGUFUgY29udGV4dCBjYW4gYmUgc2F2ZWQuICovDQorCXVpbnQ4X3QgKnB1Y1BvcnRUYXNrRlBVQ29udGV4dEJ1ZmZlciBfX2F0dHJpYnV0ZV9fKCh1c2VkKSkgPSBwZEZBTFNFOw0KIA0KICNlbmRpZiAvKiBjb25maWdTVVBQT1JUX0ZQVSAqLw0KIA0KIC8qIFRoZSBzdGFjayB1c2VkIGJ5IGludGVycnVwdCBoYW5kbGVycy4gKi8NCi1zdGF0aWMgdWludDMyX3QgdWxTeXN0ZW1TdGFja1sgY29uZmlnSVNSX1NUQUNLX1NJWkUgXSBfX2F0dHJpYnV0ZV9fKCAoIHVzZWQgKSApID0geyAwIH07DQorc3RhdGljIHVpbnQzMl90IHVsU3lzdGVtU3RhY2tbIGNvbmZpZ0lTUl9TVEFDS19TSVpFIF0gX19hdHRyaWJ1dGVfXygodXNlZCkpICA9IHsgMCB9Ow0KIA0KIC8qIERvbid0IHVzZSB0aGUgdmVyeSB0b3Agb2YgdGhlIHN5c3RlbSBzdGFjayBzbyB0aGUgcmV0dXJuIGFkZHJlc3MNCi0gKiBhcHBlYXJzIGFzIDAgaWYgdGhlIGRlYnVnZ2VyIHRyaWVzIHRvIHVud2luZCB0aGUgc3RhY2suICovDQotdm9sYXRpbGUgdWludDMyX3QgdWxUb3BPZlN5c3RlbVN0YWNrIF9fYXR0cmlidXRlX18oICggdXNlZCApICkgPSAoIHVpbnQzMl90ICkgJiggdWxTeXN0ZW1TdGFja1sgY29uZmlnSVNSX1NUQUNLX1NJWkUgLSA1IF0gKTsNCithcHBlYXJzIGFzIDAgaWYgdGhlIGRlYnVnZ2VyIHRyaWVzIHRvIHVud2luZCB0aGUgc3RhY2suICovDQordm9sYXRpbGUgdWludDMyX3QgdWxUb3BPZlN5c3RlbVN0YWNrIF9fYXR0cmlidXRlX18oKHVzZWQpKSA9ICggdWludDMyX3QgKSAmKCB1bFN5c3RlbVN0YWNrWyBjb25maWdJU1JfU1RBQ0tfU0laRSAtIDUgXSApOw0KIA0KIC8qIElmIGEgeWllbGQgaXMgcmVxdWVzdGVkIGZyb20gYW4gaW50ZXJydXB0IG9yIGZyb20gYSBjcml0aWNhbCBzZWN0aW9uIHRoZW4NCi0gKiB0aGUgeWllbGQgaXMgbm90IHBlcmZvcm1lZCBpbW1lZGlhdGVseSwgYW5kIHVsUG9ydFlpZWxkUGVuZGluZyBpcyBzZXQgdG8gcGRUUlVFDQotICogaW5zdGVhZCB0byBpbmRpY2F0ZSB0aGUgeWllbGQgc2hvdWxkIGJlIHBlcmZvcm1lZCBhdCB0aGUgZW5kIG9mIHRoZSBpbnRlcnJ1cHQNCi0gKiB3aGVuIHRoZSBjcml0aWNhbCBzZWN0aW9uIGlzIGV4aXRlZC4gKi8NCi12b2xhdGlsZSB1aW50MzJfdCB1bFBvcnRZaWVsZFBlbmRpbmcgX19hdHRyaWJ1dGVfXyggKCB1c2VkICkgKSA9IHBkRkFMU0U7DQordGhlIHlpZWxkIGlzIG5vdCBwZXJmb3JtZWQgaW1tZWRpYXRlbHksIGFuZCB1bFBvcnRZaWVsZFBlbmRpbmcgaXMgc2V0IHRvIHBkVFJVRQ0KK2luc3RlYWQgdG8gaW5kaWNhdGUgdGhlIHlpZWxkIHNob3VsZCBiZSBwZXJmb3JtZWQgYXQgdGhlIGVuZCBvZiB0aGUgaW50ZXJydXB0DQord2hlbiB0aGUgY3JpdGljYWwgc2VjdGlvbiBpcyBleGl0ZWQuICovDQordm9sYXRpbGUgdWludDMyX3QgdWxQb3J0WWllbGRQZW5kaW5nIF9fYXR0cmlidXRlX18oKHVzZWQpKSA9IHBkRkFMU0U7DQogDQogLyogQ291bnRzIHRoZSBpbnRlcnJ1cHQgbmVzdGluZyBkZXB0aC4gIFVzZWQgdG8ga25vdyB3aGVuIHRvIHN3aXRjaCB0byB0aGUNCi0gKiBpbnRlcnJ1cHQvc3lzdGVtIHN0YWNrIGFuZCB3aGVuIHRvIHNhdmUvcmVzdG9yZSBhIGNvbXBsZXRlIGNvbnRleHQuICovDQotdm9sYXRpbGUgdWludDMyX3QgdWxJbnRlcnJ1cHROZXN0aW5nIF9fYXR0cmlidXRlX18oICggdXNlZCApICkgPSAwOw0KK2ludGVycnVwdC9zeXN0ZW0gc3RhY2sgYW5kIHdoZW4gdG8gc2F2ZS9yZXN0b3JlIGEgY29tcGxldGUgY29udGV4dC4gKi8NCit2b2xhdGlsZSB1aW50MzJfdCB1bEludGVycnVwdE5lc3RpbmcgX19hdHRyaWJ1dGVfXygodXNlZCkpID0gMDsNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKg0KICAqIFNlZSBoZWFkZXIgZmlsZSBmb3IgZGVzY3JpcHRpb24uDQogICovDQotU3RhY2tUeXBlX3QgKiBweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICogcHhUb3BPZlN0YWNrLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYXNrRnVuY3Rpb25fdCBweENvZGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KK1N0YWNrVHlwZV90ICpweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICpweFRvcE9mU3RhY2ssIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzICkNCiB7DQotICAgIHVpbnQzMl90IHVsQ29kZVNlZ21lbnQ7DQordWludDMyX3QgdWxDb2RlU2VnbWVudDsNCiANCi0gICAgLyogU2V0dXAgdGhlIGluaXRpYWwgc3RhY2sgYXMgZXhwZWN0ZWQgYnkgdGhlIHBvcnRGUkVFUlRPU19JTlRFUlJVUFRfRVhJVCBtYWNyby4gKi8NCisJLyogU2V0dXAgdGhlIGluaXRpYWwgc3RhY2sgYXMgZXhwZWN0ZWQgYnkgdGhlIHBvcnRGUkVFUlRPU19JTlRFUlJVUFRfRVhJVCBtYWNyby4gKi8NCiANCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MDA7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMHgwMDsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDAwOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MDA7DQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBQYXJhbWV0ZXJzIGZpcnN0LiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB2UGFyYW1ldGVyczsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIFBhcmFtZXRlcnMgZmlyc3QuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHZQYXJhbWV0ZXJzOw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgLyogVGhlcmUgaXMgbm90aGluZyB0byByZXR1cm4gdG8gc28gYXNzZXJ0IGlmIGF0dGVtcHRpbmcgdG8gdXNlIHRoZSByZXR1cm4NCi0gICAgICogYWRkcmVzcy4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwcnZUYXNrRXhpdEVycm9yOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJLyogVGhlcmUgaXMgbm90aGluZyB0byByZXR1cm4gdG8gc28gYXNzZXJ0IGlmIGF0dGVtcHRpbmcgdG8gdXNlIHRoZSByZXR1cm4NCisJYWRkcmVzcy4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwcnZUYXNrRXhpdEVycm9yOw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgLyogaXJldCB1c2VkIHRvIHN0YXJ0IHRoZSB0YXNrIHBvcHMgdXAgdG8gaGVyZS4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9IHBvcnRJTklUSUFMX0VGTEFHUzsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIGlyZXQgdXNlZCB0byBzdGFydCB0aGUgdGFzayBwb3BzIHVwIHRvIGhlcmUuICovDQorCSpweFRvcE9mU3RhY2sgPSBwb3J0SU5JVElBTF9FRkxBR1M7DQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBDUyAqLw0KLSAgICBfX2FzbSB2b2xhdGlsZSAoICJtb3ZsICUlY3MsICUwIiA6ICI9ciIgKCB1bENvZGVTZWdtZW50ICkgKTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IHVsQ29kZVNlZ21lbnQ7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkvKiBDUyAqLw0KKwlfX2FzbSB2b2xhdGlsZSggIm1vdmwgJSVjcywgJTAiIDogIj1yIiAoIHVsQ29kZVNlZ21lbnQgKSApOw0KKwkqcHhUb3BPZlN0YWNrID0gdWxDb2RlU2VnbWVudDsNCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgIC8qIEZpcnN0IGluc3RydWN0aW9uIGluIHRoZSB0YXNrLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB4Q29kZTsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIEZpcnN0IGluc3RydWN0aW9uIGluIHRoZSB0YXNrLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB4Q29kZTsNCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgIC8qIEdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMgYXMgZXhwZWN0ZWQgYnkgYSBQT1BBIGluc3RydWN0aW9uLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMHhFQTsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIEdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMgYXMgZXhwZWN0ZWQgYnkgYSBQT1BBIGluc3RydWN0aW9uLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gMHhFQTsNCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgICpweFRvcE9mU3RhY2sgPSAweEVDOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4RUM7DQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAqcHhUb3BPZlN0YWNrID0gMHhFRDE7IC8qIEVEWCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4RUQxOyAvKiBFRFggKi8NCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgICpweFRvcE9mU3RhY2sgPSAweEVCMTsgLyogRUJYICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHhFQjE7IC8qIEVCWCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgLyogSG9sZSBmb3IgRVNQLiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJLyogSG9sZSBmb3IgRVNQLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MDA7IC8qIEVCUCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MDA7IC8qIEVCUCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4RTU7IC8qIEVTSSAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4RTU7IC8qIEVTSSAqLw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4ZWVlZWVlZWU7IC8qIEVESSAqLw0KKwkqcHhUb3BPZlN0YWNrID0gMHhlZWVlZWVlZTsgLyogRURJICovDQogDQotICAgICNpZiAoIGNvbmZpZ1NVUFBPUlRfRlBVID09IDEgKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkjaWYgKCBjb25maWdTVVBQT1JUX0ZQVSA9PSAxICkNCisJew0KKwkJcHhUb3BPZlN0YWNrLS07DQogDQotICAgICAgICAgICAgLyogQnVmZmVyIGZvciBGUFUgY29udGV4dCwgd2hpY2ggaXMgaW5pdGlhbGlzZWQgdG8gTlVMTCBhcyB0YXNrcyBhcmUgbm90DQotICAgICAgICAgICAgICogY3JlYXRlZCB3aXRoIGFuIEZQVSBjb250ZXh0LiAqLw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSBwb3J0Tk9fRkxPQVRJTkdfUE9JTlRfQ09OVEVYVDsNCi0gICAgICAgIH0NCi0gICAgI2VuZGlmIC8qIGNvbmZpZ1NVUFBPUlRfRlBVICovDQorCQkvKiBCdWZmZXIgZm9yIEZQVSBjb250ZXh0LCB3aGljaCBpcyBpbml0aWFsaXNlZCB0byBOVUxMIGFzIHRhc2tzIGFyZSBub3QNCisJCWNyZWF0ZWQgd2l0aCBhbiBGUFUgY29udGV4dC4gKi8NCisJCSpweFRvcE9mU3RhY2sgPSBwb3J0Tk9fRkxPQVRJTkdfUE9JTlRfQ09OVEVYVDsNCisJfQ0KKwkjZW5kaWYgLyogY29uZmlnU1VQUE9SVF9GUFUgKi8NCiANCi0gICAgcmV0dXJuIHB4VG9wT2ZTdGFjazsNCisJcmV0dXJuIHB4VG9wT2ZTdGFjazsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQotc3RhdGljIHZvaWQgcHJ2U2V0SW50ZXJydXB0R2F0ZSggdWludDhfdCB1Y051bWJlciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJU1JfSGFuZGxlcl90IHB4SGFuZGxlckZ1bmN0aW9uLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgdWNGbGFncyApDQorc3RhdGljIHZvaWQgcHJ2U2V0SW50ZXJydXB0R2F0ZSggdWludDhfdCB1Y051bWJlciwgSVNSX0hhbmRsZXJfdCBweEhhbmRsZXJGdW5jdGlvbiwgdWludDhfdCB1Y0ZsYWdzICkNCiB7DQotICAgIHVpbnQxNl90IHVzQ29kZVNlZ21lbnQ7DQotICAgIHVpbnQzMl90IHVsQmFzZSA9ICggdWludDMyX3QgKSBweEhhbmRsZXJGdW5jdGlvbjsNCit1aW50MTZfdCB1c0NvZGVTZWdtZW50Ow0KK3VpbnQzMl90IHVsQmFzZSA9ICggdWludDMyX3QgKSBweEhhbmRsZXJGdW5jdGlvbjsNCiANCi0gICAgeEludGVycnVwdERlc2NyaXB0b3JUYWJsZVsgdWNOdW1iZXIgXS51c0lTUkxvdyA9ICggdWludDE2X3QgKSAoIHVsQmFzZSAmIFVTSFJUX01BWCApOw0KLSAgICB4SW50ZXJydXB0RGVzY3JpcHRvclRhYmxlWyB1Y051bWJlciBdLnVzSVNSSGlnaCA9ICggdWludDE2X3QgKSAoICggdWxCYXNlID4+IDE2VUwgKSAmIFVTSFJUX01BWCApOw0KKwl4SW50ZXJydXB0RGVzY3JpcHRvclRhYmxlWyB1Y051bWJlciBdLnVzSVNSTG93ID0gKCB1aW50MTZfdCApICggdWxCYXNlICYgVVNIUlRfTUFYICk7DQorCXhJbnRlcnJ1cHREZXNjcmlwdG9yVGFibGVbIHVjTnVtYmVyIF0udXNJU1JIaWdoID0gKCB1aW50MTZfdCApICggKCB1bEJhc2UgPj4gMTZVTCApICYgVVNIUlRfTUFYICk7DQogDQotICAgIC8qIFdoZW4gdGhlIGZsYXQgbW9kZWwgaXMgdXNlZCB0aGUgQ1Mgd2lsbCBuZXZlciBjaGFuZ2UuICovDQotICAgIF9fYXNtIHZvbGF0aWxlICggIm1vdiAlJWNzLCAlMCIgOiAiPXIiICggdXNDb2RlU2VnbWVudCApICk7DQotICAgIHhJbnRlcnJ1cHREZXNjcmlwdG9yVGFibGVbIHVjTnVtYmVyIF0udXNTZWdtZW50U2VsZWN0b3IgPSB1c0NvZGVTZWdtZW50Ow0KLSAgICB4SW50ZXJydXB0RGVzY3JpcHRvclRhYmxlWyB1Y051bWJlciBdLnVjWmVybyA9IDA7DQotICAgIHhJbnRlcnJ1cHREZXNjcmlwdG9yVGFibGVbIHVjTnVtYmVyIF0udWNGbGFncyA9IHVjRmxhZ3M7DQorCS8qIFdoZW4gdGhlIGZsYXQgbW9kZWwgaXMgdXNlZCB0aGUgQ1Mgd2lsbCBuZXZlciBjaGFuZ2UuICovDQorCV9fYXNtIHZvbGF0aWxlKCAibW92ICUlY3MsICUwIiA6ICI9ciIgKCB1c0NvZGVTZWdtZW50ICkgKTsNCisJeEludGVycnVwdERlc2NyaXB0b3JUYWJsZVsgdWNOdW1iZXIgXS51c1NlZ21lbnRTZWxlY3RvciA9IHVzQ29kZVNlZ21lbnQ7DQorCXhJbnRlcnJ1cHREZXNjcmlwdG9yVGFibGVbIHVjTnVtYmVyIF0udWNaZXJvID0gMDsNCisJeEludGVycnVwdERlc2NyaXB0b3JUYWJsZVsgdWNOdW1iZXIgXS51Y0ZsYWdzID0gdWNGbGFnczsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogdm9pZCB2UG9ydFNldHVwSURUKCB2b2lkICkNCiB7DQotICAgIHVpbnQzMl90IHVsTnVtOw0KLSAgICBJRFRQb2ludGVyX3QgeElEVDsNCit1aW50MzJfdCB1bE51bTsNCitJRFRQb2ludGVyX3QgeElEVDsNCiANCi0gICAgI2lmICggY29uZmlnVVNFX0NPTU1PTl9JTlRFUlJVUFRfRU5UUllfUE9JTlQgPT0gMSApDQotICAgICAgICB7DQotICAgICAgICAgICAgZm9yKCB1bE51bSA9IDA7IHVsTnVtIDwgcG9ydE5VTV9WRUNUT1JTOyB1bE51bSsrICkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIC8qIElmIGEgaGFuZGxlciBoYXMgbm90IGFscmVhZHkgYmVlbiBpbnN0YWxsZWQgb24gdGhpcyB2ZWN0b3IuICovDQotICAgICAgICAgICAgICAgIGlmKCAoIHhJbnRlcnJ1cHREZXNjcmlwdG9yVGFibGVbIHVsTnVtIF0udXNJU1JMb3cgPT0gMHgwMCApICYmICggeEludGVycnVwdERlc2NyaXB0b3JUYWJsZVsgdWxOdW0gXS51c0lTUkhpZ2ggPT0gMHgwMCApICkNCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgcHJ2U2V0SW50ZXJydXB0R2F0ZSggKCB1aW50OF90ICkgdWxOdW0sIHZQb3J0Q2VudHJhbEludGVycnVwdFdyYXBwZXIsIHBvcnRJRFRfRkxBR1MgKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgI2VuZGlmIC8qIGNvbmZpZ1VTRV9DT01NT05fSU5URVJSVVBUX0VOVFJZX1BPSU5UICovDQorCSNpZiAoIGNvbmZpZ1VTRV9DT01NT05fSU5URVJSVVBUX0VOVFJZX1BPSU5UID09IDEgKQ0KKwl7DQorCQlmb3IoIHVsTnVtID0gMDsgdWxOdW0gPCBwb3J0TlVNX1ZFQ1RPUlM7IHVsTnVtKysgKQ0KKwkJew0KKwkJCS8qIElmIGEgaGFuZGxlciBoYXMgbm90IGFscmVhZHkgYmVlbiBpbnN0YWxsZWQgb24gdGhpcyB2ZWN0b3IuICovDQorCQkJaWYoICggeEludGVycnVwdERlc2NyaXB0b3JUYWJsZVsgdWxOdW0gXS51c0lTUkxvdyA9PSAweDAwICkgJiYgKCB4SW50ZXJydXB0RGVzY3JpcHRvclRhYmxlWyB1bE51bSBdLnVzSVNSSGlnaCA9PSAweDAwICkgKQ0KKwkJCXsNCisJCQkJcHJ2U2V0SW50ZXJydXB0R2F0ZSggKCB1aW50OF90ICkgdWxOdW0sIHZQb3J0Q2VudHJhbEludGVycnVwdFdyYXBwZXIsIHBvcnRJRFRfRkxBR1MgKTsNCisJCQl9DQorCQl9DQorCX0NCisJI2VuZGlmIC8qIGNvbmZpZ1VTRV9DT01NT05fSU5URVJSVVBUX0VOVFJZX1BPSU5UICovDQogDQotICAgIC8qIFNldCBJRFQgYWRkcmVzcy4gKi8NCi0gICAgeElEVC51bFRhYmxlQmFzZSA9ICggdWludDMyX3QgKSB4SW50ZXJydXB0RGVzY3JpcHRvclRhYmxlOw0KLSAgICB4SURULnVzVGFibGVMaW1pdCA9IHNpemVvZiggeEludGVycnVwdERlc2NyaXB0b3JUYWJsZSApIC0gMTsNCisJLyogU2V0IElEVCBhZGRyZXNzLiAqLw0KKwl4SURULnVsVGFibGVCYXNlID0gKCB1aW50MzJfdCApIHhJbnRlcnJ1cHREZXNjcmlwdG9yVGFibGU7DQorCXhJRFQudXNUYWJsZUxpbWl0ID0gc2l6ZW9mKCB4SW50ZXJydXB0RGVzY3JpcHRvclRhYmxlICkgLSAxOw0KIA0KLSAgICAvKiBTZXQgSURUIGluIENQVS4gKi8NCi0gICAgX19hc20gdm9sYXRpbGUgKCAibGlkdCAlMCIgOjoibSIgKCB4SURUICkgKTsNCisJLyogU2V0IElEVCBpbiBDUFUuICovDQorCV9fYXNtIHZvbGF0aWxlKCAibGlkdCAlMCIgOjogIm0iICh4SURUKSApOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBzdGF0aWMgdm9pZCBwcnZUYXNrRXhpdEVycm9yKCB2b2lkICkNCiB7DQotICAgIC8qIEEgZnVuY3Rpb24gdGhhdCBpbXBsZW1lbnRzIGEgdGFzayBtdXN0IG5vdCBleGl0IG9yIGF0dGVtcHQgdG8gcmV0dXJuIHRvDQotICAgICAqIGl0cyBjYWxsZXIgYXMgdGhlcmUgaXMgbm90aGluZyB0byByZXR1cm4gdG8uICBJZiBhIHRhc2sgd2FudHMgdG8gZXhpdCBpdA0KLSAgICAgKiBzaG91bGQgaW5zdGVhZCBjYWxsIHZUYXNrRGVsZXRlKCBOVUxMICkuDQotICAgICAqDQotICAgICAqIEFydGlmaWNpYWxseSBmb3JjZSBhbiBhc3NlcnQoKSB0byBiZSB0cmlnZ2VyZWQgaWYgY29uZmlnQVNTRVJUKCkgaXMNCi0gICAgICogZGVmaW5lZCwgdGhlbiBzdG9wIGhlcmUgc28gYXBwbGljYXRpb24gd3JpdGVycyBjYW4gY2F0Y2ggdGhlIGVycm9yLiAqLw0KLSAgICBjb25maWdBU1NFUlQoIHVsQ3JpdGljYWxOZXN0aW5nID09IH4wVUwgKTsNCi0gICAgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOw0KKwkvKiBBIGZ1bmN0aW9uIHRoYXQgaW1wbGVtZW50cyBhIHRhc2sgbXVzdCBub3QgZXhpdCBvciBhdHRlbXB0IHRvIHJldHVybiB0bw0KKwlpdHMgY2FsbGVyIGFzIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmV0dXJuIHRvLiAgSWYgYSB0YXNrIHdhbnRzIHRvIGV4aXQgaXQNCisJc2hvdWxkIGluc3RlYWQgY2FsbCB2VGFza0RlbGV0ZSggTlVMTCApLg0KIA0KLSAgICBmb3IoIDsgOyApDQotICAgIHsNCi0gICAgfQ0KKwlBcnRpZmljaWFsbHkgZm9yY2UgYW4gYXNzZXJ0KCkgdG8gYmUgdHJpZ2dlcmVkIGlmIGNvbmZpZ0FTU0VSVCgpIGlzDQorCWRlZmluZWQsIHRoZW4gc3RvcCBoZXJlIHNvIGFwcGxpY2F0aW9uIHdyaXRlcnMgY2FuIGNhdGNoIHRoZSBlcnJvci4gKi8NCisJY29uZmlnQVNTRVJUKCB1bENyaXRpY2FsTmVzdGluZyA9PSB+MFVMICk7DQorCXBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsNCisJZm9yKCA7OyApOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICkNCiB7DQotICAgIGV4dGVybiB2b2lkIHZQb3J0QVBJQ0Vycm9ySGFuZGxlcldyYXBwZXIoIHZvaWQgKTsNCi0gICAgZXh0ZXJuIHZvaWQgdlBvcnRBUElDU3B1cmlvdXNIYW5kbGVyKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdlBvcnRBUElDRXJyb3JIYW5kbGVyV3JhcHBlciggdm9pZCApOw0KK2V4dGVybiB2b2lkIHZQb3J0QVBJQ1NwdXJpb3VzSGFuZGxlciggdm9pZCApOw0KIA0KLSAgICAvKiBJbml0aWFsaXNlIExBUElDIHRvIGEgd2VsbCBrbm93biBzdGF0ZS4gKi8NCi0gICAgcG9ydEFQSUNfTERSID0gMHhGRkZGRkZGRjsNCi0gICAgcG9ydEFQSUNfTERSID0gKCAoIHBvcnRBUElDX0xEUiAmIDB4MDBGRkZGRkYgKSB8IDB4MDAwMDAwMDEgKTsNCi0gICAgcG9ydEFQSUNfTFZUX1RJTUVSID0gcG9ydEFQSUNfRElTQUJMRTsNCi0gICAgcG9ydEFQSUNfTFZUX1BFUkYgPSBwb3J0QVBJQ19OTUk7DQotICAgIHBvcnRBUElDX0xWVF9MSU5UMCA9IHBvcnRBUElDX0RJU0FCTEU7DQotICAgIHBvcnRBUElDX0xWVF9MSU5UMSA9IHBvcnRBUElDX0RJU0FCTEU7DQotICAgIHBvcnRBUElDX1RBU0tfUFJJT1JJVFkgPSAwOw0KKwkvKiBJbml0aWFsaXNlIExBUElDIHRvIGEgd2VsbCBrbm93biBzdGF0ZS4gKi8NCisJcG9ydEFQSUNfTERSID0gMHhGRkZGRkZGRjsNCisJcG9ydEFQSUNfTERSID0gKCAoIHBvcnRBUElDX0xEUiAmIDB4MDBGRkZGRkYgKSB8IDB4MDAwMDAwMDEgKTsNCisJcG9ydEFQSUNfTFZUX1RJTUVSID0gcG9ydEFQSUNfRElTQUJMRTsNCisJcG9ydEFQSUNfTFZUX1BFUkYgPSBwb3J0QVBJQ19OTUk7DQorCXBvcnRBUElDX0xWVF9MSU5UMCA9IHBvcnRBUElDX0RJU0FCTEU7DQorCXBvcnRBUElDX0xWVF9MSU5UMSA9IHBvcnRBUElDX0RJU0FCTEU7DQorCXBvcnRBUElDX1RBU0tfUFJJT1JJVFkgPSAwOw0KIA0KLSAgICAvKiBJbnN0YWxsIEFQSUMgdGltZXIgSVNSIHZlY3Rvci4gKi8NCi0gICAgcHJ2U2V0SW50ZXJydXB0R2F0ZSggKCB1aW50OF90ICkgcG9ydEFQSUNfVElNRVJfSU5UX1ZFQ1RPUiwgdlBvcnRUaW1lckhhbmRsZXIsIHBvcnRJRFRfRkxBR1MgKTsNCisJLyogSW5zdGFsbCBBUElDIHRpbWVyIElTUiB2ZWN0b3IuICovDQorCXBydlNldEludGVycnVwdEdhdGUoICggdWludDhfdCApIHBvcnRBUElDX1RJTUVSX0lOVF9WRUNUT1IsIHZQb3J0VGltZXJIYW5kbGVyLCBwb3J0SURUX0ZMQUdTICk7DQogDQotICAgIC8qIEluc3RhbGwgQVBJIGVycm9yIGhhbmRsZXIuICovDQotICAgIHBydlNldEludGVycnVwdEdhdGUoICggdWludDhfdCApIHBvcnRBUElDX0xWVF9FUlJPUl9WRUNUT1IsIHZQb3J0QVBJQ0Vycm9ySGFuZGxlcldyYXBwZXIsIHBvcnRJRFRfRkxBR1MgKTsNCisJLyogSW5zdGFsbCBBUEkgZXJyb3IgaGFuZGxlci4gKi8NCisJcHJ2U2V0SW50ZXJydXB0R2F0ZSggKCB1aW50OF90ICkgcG9ydEFQSUNfTFZUX0VSUk9SX1ZFQ1RPUiwgdlBvcnRBUElDRXJyb3JIYW5kbGVyV3JhcHBlciwgcG9ydElEVF9GTEFHUyApOw0KIA0KLSAgICAvKiBJbnN0YWxsIFlpZWxkIGhhbmRsZXIuICovDQotICAgIHBydlNldEludGVycnVwdEdhdGUoICggdWludDhfdCApIHBvcnRBUElDX1lJRUxEX0lOVF9WRUNUT1IsIHZQb3J0WWllbGRDYWxsLCBwb3J0SURUX0ZMQUdTICk7DQorCS8qIEluc3RhbGwgWWllbGQgaGFuZGxlci4gKi8NCisJcHJ2U2V0SW50ZXJydXB0R2F0ZSggKCB1aW50OF90ICkgcG9ydEFQSUNfWUlFTERfSU5UX1ZFQ1RPUiwgdlBvcnRZaWVsZENhbGwsIHBvcnRJRFRfRkxBR1MgKTsNCiANCi0gICAgLyogSW5zdGFsbCBzcHVyaW91cyBpbnRlcnJ1cHQgdmVjdG9yLiAqLw0KLSAgICBwcnZTZXRJbnRlcnJ1cHRHYXRlKCAoIHVpbnQ4X3QgKSBwb3J0QVBJQ19TUFVSSU9VU19JTlRfVkVDVE9SLCB2UG9ydEFQSUNTcHVyaW91c0hhbmRsZXIsIHBvcnRJRFRfRkxBR1MgKTsNCisJLyogSW5zdGFsbCBzcHVyaW91cyBpbnRlcnJ1cHQgdmVjdG9yLiAqLw0KKwlwcnZTZXRJbnRlcnJ1cHRHYXRlKCAoIHVpbnQ4X3QgKSBwb3J0QVBJQ19TUFVSSU9VU19JTlRfVkVDVE9SLCB2UG9ydEFQSUNTcHVyaW91c0hhbmRsZXIsIHBvcnRJRFRfRkxBR1MgKTsNCiANCi0gICAgLyogRW5hYmxlIHRoZSBBUElDLCBtYXBwaW5nIHRoZSBzcHVyaW91cyBpbnRlcnJ1cHQgYXQgdGhlIHNhbWUgdGltZS4gKi8NCi0gICAgcG9ydEFQSUNfU1BVUklPVVNfSU5UID0gcG9ydEFQSUNfU1BVUklPVVNfSU5UX1ZFQ1RPUiB8IHBvcnRBUElDX0VOQUJMRV9CSVQ7DQorCS8qIEVuYWJsZSB0aGUgQVBJQywgbWFwcGluZyB0aGUgc3B1cmlvdXMgaW50ZXJydXB0IGF0IHRoZSBzYW1lIHRpbWUuICovDQorCXBvcnRBUElDX1NQVVJJT1VTX0lOVCA9IHBvcnRBUElDX1NQVVJJT1VTX0lOVF9WRUNUT1IgfCBwb3J0QVBJQ19FTkFCTEVfQklUOw0KIA0KLSAgICAvKiBTZXQgdGltZXIgZXJyb3IgdmVjdG9yLiAqLw0KLSAgICBwb3J0QVBJQ19MVlRfRVJST1IgPSBwb3J0QVBJQ19MVlRfRVJST1JfVkVDVE9SOw0KKwkvKiBTZXQgdGltZXIgZXJyb3IgdmVjdG9yLiAqLw0KKwlwb3J0QVBJQ19MVlRfRVJST1IgPSBwb3J0QVBJQ19MVlRfRVJST1JfVkVDVE9SOw0KIA0KLSAgICAvKiBTZXQgdGhlIGludGVycnVwdCBmcmVxdWVuY3kuICovDQotICAgIHBvcnRBUElDX1RNUkRJViA9IHBvcnRBUElDX0RJVl8xNjsNCi0gICAgcG9ydEFQSUNfVElNRVJfSU5JVElBTF9DT1VOVCA9ICggKCBjb25maWdDUFVfQ0xPQ0tfSFogPj4gNFVMICkgLyBjb25maWdUSUNLX1JBVEVfSFogKSAtIDFVTDsNCisJLyogU2V0IHRoZSBpbnRlcnJ1cHQgZnJlcXVlbmN5LiAqLw0KKwlwb3J0QVBJQ19UTVJESVYgPSBwb3J0QVBJQ19ESVZfMTY7DQorCXBvcnRBUElDX1RJTUVSX0lOSVRJQUxfQ09VTlQgPSAoICggY29uZmlnQ1BVX0NMT0NLX0haID4+IDRVTCApIC8gY29uZmlnVElDS19SQVRFX0haICkgLSAxVUw7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIEJhc2VUeXBlX3QgeFBvcnRTdGFydFNjaGVkdWxlciggdm9pZCApDQogew0KLSAgICBCYXNlVHlwZV90IHhXb3JkOw0KK0Jhc2VUeXBlX3QgeFdvcmQ7DQogDQotICAgIC8qIFNvbWUgdmVyc2lvbnMgb2YgR0NDIHJlcXVpcmUgdGhlIC1tbm8tbXMtYml0ZmllbGRzIGNvbW1hbmQgbGluZSBvcHRpb24NCi0gICAgICogZm9yIHBhY2tpbmcgdG8gd29yay4gKi8NCi0gICAgY29uZmlnQVNTRVJUKCBzaXplb2YoIHN0cnVjdCBJRFRFbnRyeSApID09IHBvcnRFWFBFQ1RFRF9JRFRfRU5UUllfU0laRSApOw0KKwkvKiBTb21lIHZlcnNpb25zIG9mIEdDQyByZXF1aXJlIHRoZSAtbW5vLW1zLWJpdGZpZWxkcyBjb21tYW5kIGxpbmUgb3B0aW9uDQorCWZvciBwYWNraW5nIHRvIHdvcmsuICovDQorCWNvbmZpZ0FTU0VSVCggc2l6ZW9mKCBzdHJ1Y3QgSURURW50cnkgKSA9PSBwb3J0RVhQRUNURURfSURUX0VOVFJZX1NJWkUgKTsNCiANCi0gICAgLyogRmlsbCBwYXJ0IG9mIHRoZSBzeXN0ZW0gc3RhY2sgd2l0aCBhIGtub3duIHZhbHVlIHRvIGhlbHAgZGV0ZWN0IHN0YWNrDQotICAgICAqIG92ZXJmbG93LiAgQSBmZXcgemVyb3MgYXJlIGxlZnQgc28gR0RCIGRvZXNuJ3QgZ2V0IGNvbmZ1c2VkIHVud2luZGluZw0KLSAgICAgKiB0aGUgc3RhY2suICovDQotICAgIGZvciggeFdvcmQgPSAwOyB4V29yZCA8IGNvbmZpZ0lTUl9TVEFDS19TSVpFIC0gMjA7IHhXb3JkKysgKQ0KLSAgICB7DQotICAgICAgICB1bFN5c3RlbVN0YWNrWyB4V29yZCBdID0gcG9ydFNUQUNLX1dPUkQ7DQotICAgIH0NCisJLyogRmlsbCBwYXJ0IG9mIHRoZSBzeXN0ZW0gc3RhY2sgd2l0aCBhIGtub3duIHZhbHVlIHRvIGhlbHAgZGV0ZWN0IHN0YWNrDQorCW92ZXJmbG93LiAgQSBmZXcgemVyb3MgYXJlIGxlZnQgc28gR0RCIGRvZXNuJ3QgZ2V0IGNvbmZ1c2VkIHVud2luZGluZw0KKwl0aGUgc3RhY2suICovDQorCWZvciggeFdvcmQgPSAwOyB4V29yZCA8IGNvbmZpZ0lTUl9TVEFDS19TSVpFIC0gMjA7IHhXb3JkKysgKQ0KKwl7DQorCQl1bFN5c3RlbVN0YWNrWyB4V29yZCBdID0gcG9ydFNUQUNLX1dPUkQ7DQorCX0NCiANCi0gICAgLyogSW5pdGlhbGlzZSBJbnRlcnJ1cHQgRGVzY3JpcHRvciBUYWJsZSAoSURUKS4gKi8NCi0gICAgdlBvcnRTZXR1cElEVCgpOw0KKwkvKiBJbml0aWFsaXNlIEludGVycnVwdCBEZXNjcmlwdG9yIFRhYmxlIChJRFQpLiAqLw0KKwl2UG9ydFNldHVwSURUKCk7DQogDQotICAgIC8qIEluaXRpYWxpc2UgTEFQSUMgYW5kIGluc3RhbGwgc3lzdGVtIGhhbmRsZXJzLiAqLw0KLSAgICBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCk7DQorCS8qIEluaXRpYWxpc2UgTEFQSUMgYW5kIGluc3RhbGwgc3lzdGVtIGhhbmRsZXJzLiAqLw0KKwlwcnZTZXR1cFRpbWVySW50ZXJydXB0KCk7DQogDQotICAgIC8qIE1ha2Ugc3VyZSB0aGUgc3RhY2sgdXNlZCBieSBpbnRlcnJ1cHRzIGlzIGFsaWduZWQuICovDQotICAgIHVsVG9wT2ZTeXN0ZW1TdGFjayAmPSB+cG9ydEJZVEVfQUxJR05NRU5UX01BU0s7DQorCS8qIE1ha2Ugc3VyZSB0aGUgc3RhY2sgdXNlZCBieSBpbnRlcnJ1cHRzIGlzIGFsaWduZWQuICovDQorCXVsVG9wT2ZTeXN0ZW1TdGFjayAmPSB+cG9ydEJZVEVfQUxJR05NRU5UX01BU0s7DQogDQotICAgIHVsQ3JpdGljYWxOZXN0aW5nID0gMDsNCisJdWxDcml0aWNhbE5lc3RpbmcgPSAwOw0KIA0KLSAgICAvKiBFbmFibGUgTEFQSUMgQ291bnRlci4qLw0KLSAgICBwb3J0QVBJQ19MVlRfVElNRVIgPSBwb3J0QVBJQ19USU1FUl9QRVJJT0RJQyB8IHBvcnRBUElDX1RJTUVSX0lOVF9WRUNUT1I7DQorCS8qIEVuYWJsZSBMQVBJQyBDb3VudGVyLiovDQorCXBvcnRBUElDX0xWVF9USU1FUiA9IHBvcnRBUElDX1RJTUVSX1BFUklPRElDIHwgcG9ydEFQSUNfVElNRVJfSU5UX1ZFQ1RPUjsNCiANCi0gICAgLyogU29tZXRpbWVzIG5lZWRlZC4gKi8NCi0gICAgcG9ydEFQSUNfVE1SRElWID0gcG9ydEFQSUNfRElWXzE2Ow0KKwkvKiBTb21ldGltZXMgbmVlZGVkLiAqLw0KKwlwb3J0QVBJQ19UTVJESVYgPSBwb3J0QVBJQ19ESVZfMTY7DQogDQotICAgIC8qIFNob3VsZCBub3QgcmV0dXJuIGZyb20gdGhlIGZvbGxvd2luZyBmdW5jdGlvbiBhcyB0aGUgc2NoZWR1bGVyIHdpbGwgdGhlbg0KLSAgICAgKiBiZSBleGVjdXRpbmcgdGhlIHRhc2tzLiAqLw0KLSAgICB2UG9ydFN0YXJ0Rmlyc3RUYXNrKCk7DQorCS8qIFNob3VsZCBub3QgcmV0dXJuIGZyb20gdGhlIGZvbGxvd2luZyBmdW5jdGlvbiBhcyB0aGUgc2NoZWR1bGVyIHdpbGwgdGhlbg0KKwliZSBleGVjdXRpbmcgdGhlIHRhc2tzLiAqLw0KKwl2UG9ydFN0YXJ0Rmlyc3RUYXNrKCk7DQogDQotICAgIHJldHVybiAwOw0KKwlyZXR1cm4gMDsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogdm9pZCB2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApDQogew0KLSAgICAvKiBOb3QgaW1wbGVtZW50ZWQgaW4gcG9ydHMgd2hlcmUgdGhlcmUgaXMgbm90aGluZyB0byByZXR1cm4gdG8uDQotICAgICAqIEFydGlmaWNpYWxseSBmb3JjZSBhbiBhc3NlcnQuICovDQotICAgIGNvbmZpZ0FTU0VSVCggdWxDcml0aWNhbE5lc3RpbmcgPT0gMTAwMFVMICk7DQorCS8qIE5vdCBpbXBsZW1lbnRlZCBpbiBwb3J0cyB3aGVyZSB0aGVyZSBpcyBub3RoaW5nIHRvIHJldHVybiB0by4NCisJQXJ0aWZpY2lhbGx5IGZvcmNlIGFuIGFzc2VydC4gKi8NCisJY29uZmlnQVNTRVJUKCB1bENyaXRpY2FsTmVzdGluZyA9PSAxMDAwVUwgKTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKQ0KIHsNCi0gICAgaWYoIHVsQ3JpdGljYWxOZXN0aW5nID09IDAgKQ0KLSAgICB7DQotICAgICAgICAjaWYgKCBjb25maWdNQVhfQVBJX0NBTExfSU5URVJSVVBUX1BSSU9SSVRZID09IHBvcnRNQVhfUFJJT1JJVFkgKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgX19hc20gdm9sYXRpbGUgKCAiY2xpIiApOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICNlbHNlDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBwb3J0QVBJQ19UQVNLX1BSSU9SSVRZID0gcG9ydE1BWF9BUElfQ0FMTF9QUklPUklUWTsNCi0gICAgICAgICAgICAgICAgY29uZmlnQVNTRVJUKCBwb3J0QVBJQ19UQVNLX1BSSU9SSVRZID09IHBvcnRNQVhfQVBJX0NBTExfUFJJT1JJVFkgKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAjZW5kaWYNCi0gICAgfQ0KKwlpZiggdWxDcml0aWNhbE5lc3RpbmcgPT0gMCApDQorCXsNCisJCSNpZiggY29uZmlnTUFYX0FQSV9DQUxMX0lOVEVSUlVQVF9QUklPUklUWSA9PSBwb3J0TUFYX1BSSU9SSVRZICkNCisJCXsNCisJCQlfX2FzbSB2b2xhdGlsZSggImNsaSIgKTsNCisJCX0NCisJCSNlbHNlDQorCQl7DQorCQkJcG9ydEFQSUNfVEFTS19QUklPUklUWSA9IHBvcnRNQVhfQVBJX0NBTExfUFJJT1JJVFk7DQorCQkJY29uZmlnQVNTRVJUKCBwb3J0QVBJQ19UQVNLX1BSSU9SSVRZID09IHBvcnRNQVhfQVBJX0NBTExfUFJJT1JJVFkgKTsNCisJCX0NCisJCSNlbmRpZg0KKwl9DQogDQotICAgIC8qIE5vdyBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB1bENyaXRpY2FsTmVzdGluZyBjYW4gYmUgYWNjZXNzZWQNCi0gICAgICogZGlyZWN0bHkuICBJbmNyZW1lbnQgdWxDcml0aWNhbE5lc3RpbmcgdG8ga2VlcCBhIGNvdW50IG9mIGhvdyBtYW55IHRpbWVzDQotICAgICAqIHBvcnRFTlRFUl9DUklUSUNBTCgpIGhhcyBiZWVuIGNhbGxlZC4gKi8NCi0gICAgdWxDcml0aWNhbE5lc3RpbmcrKzsNCisJLyogTm93IGludGVycnVwdHMgYXJlIGRpc2FibGVkIHVsQ3JpdGljYWxOZXN0aW5nIGNhbiBiZSBhY2Nlc3NlZA0KKwlkaXJlY3RseS4gIEluY3JlbWVudCB1bENyaXRpY2FsTmVzdGluZyB0byBrZWVwIGEgY291bnQgb2YgaG93IG1hbnkgdGltZXMNCisJcG9ydEVOVEVSX0NSSVRJQ0FMKCkgaGFzIGJlZW4gY2FsbGVkLiAqLw0KKwl1bENyaXRpY2FsTmVzdGluZysrOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICkNCiB7DQotICAgIGlmKCB1bENyaXRpY2FsTmVzdGluZyA+IHBvcnROT19DUklUSUNBTF9ORVNUSU5HICkNCi0gICAgew0KLSAgICAgICAgLyogRGVjcmVtZW50IHRoZSBuZXN0aW5nIGNvdW50IGFzIHRoZSBjcml0aWNhbCBzZWN0aW9uIGlzIGJlaW5nDQotICAgICAgICAgKiBleGl0ZWQuICovDQotICAgICAgICB1bENyaXRpY2FsTmVzdGluZy0tOw0KKwlpZiggdWxDcml0aWNhbE5lc3RpbmcgPiBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyApDQorCXsNCisJCS8qIERlY3JlbWVudCB0aGUgbmVzdGluZyBjb3VudCBhcyB0aGUgY3JpdGljYWwgc2VjdGlvbiBpcyBiZWluZw0KKwkJZXhpdGVkLiAqLw0KKwkJdWxDcml0aWNhbE5lc3RpbmctLTsNCiANCi0gICAgICAgIC8qIElmIHRoZSBuZXN0aW5nIGxldmVsIGhhcyByZWFjaGVkIHplcm8gdGhlbiBhbGwgaW50ZXJydXB0DQotICAgICAgICAgKiBwcmlvcml0aWVzIG11c3QgYmUgcmUtZW5hYmxlZC4gKi8NCi0gICAgICAgIGlmKCB1bENyaXRpY2FsTmVzdGluZyA9PSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyApDQotICAgICAgICB7DQotICAgICAgICAgICAgLyogQ3JpdGljYWwgbmVzdGluZyBoYXMgcmVhY2hlZCB6ZXJvIHNvIGFsbCBpbnRlcnJ1cHQgcHJpb3JpdGllcw0KLSAgICAgICAgICAgICAqIHNob3VsZCBiZSB1bm1hc2tlZC4gKi8NCi0gICAgICAgICAgICAjaWYgKCBjb25maWdNQVhfQVBJX0NBTExfSU5URVJSVVBUX1BSSU9SSVRZID09IHBvcnRNQVhfUFJJT1JJVFkgKQ0KLSAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICBfX2FzbSB2b2xhdGlsZSAoICJzdGkiICk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAjZWxzZQ0KLSAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICBwb3J0QVBJQ19UQVNLX1BSSU9SSVRZID0gMDsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICNlbmRpZg0KKwkJLyogSWYgdGhlIG5lc3RpbmcgbGV2ZWwgaGFzIHJlYWNoZWQgemVybyB0aGVuIGFsbCBpbnRlcnJ1cHQNCisJCXByaW9yaXRpZXMgbXVzdCBiZSByZS1lbmFibGVkLiAqLw0KKwkJaWYoIHVsQ3JpdGljYWxOZXN0aW5nID09IHBvcnROT19DUklUSUNBTF9ORVNUSU5HICkNCisJCXsNCisJCQkvKiBDcml0aWNhbCBuZXN0aW5nIGhhcyByZWFjaGVkIHplcm8gc28gYWxsIGludGVycnVwdCBwcmlvcml0aWVzDQorCQkJc2hvdWxkIGJlIHVubWFza2VkLiAqLw0KKwkJCSNpZiggY29uZmlnTUFYX0FQSV9DQUxMX0lOVEVSUlVQVF9QUklPUklUWSA9PSBwb3J0TUFYX1BSSU9SSVRZICkNCisJCQl7DQorCQkJCV9fYXNtIHZvbGF0aWxlKCAic3RpIiApOw0KKwkJCX0NCisJCQkjZWxzZQ0KKwkJCXsNCisJCQkJcG9ydEFQSUNfVEFTS19QUklPUklUWSA9IDA7DQorCQkJfQ0KKwkJCSNlbmRpZg0KIA0KLSAgICAgICAgICAgIC8qIElmIGEgeWllbGQgd2FzIHBlbmRlZCBmcm9tIHdpdGhpbiB0aGUgY3JpdGljYWwgc2VjdGlvbiB0aGVuDQotICAgICAgICAgICAgICogcGVyZm9ybSB0aGUgeWllbGQgbm93LiAqLw0KLSAgICAgICAgICAgIGlmKCB1bFBvcnRZaWVsZFBlbmRpbmcgIT0gcGRGQUxTRSApDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICB1bFBvcnRZaWVsZFBlbmRpbmcgPSBwZEZBTFNFOw0KLSAgICAgICAgICAgICAgICBfX2FzbSB2b2xhdGlsZSAoIHBvcnRZSUVMRF9JTlRFUlJVUFQgKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCisJCQkvKiBJZiBhIHlpZWxkIHdhcyBwZW5kZWQgZnJvbSB3aXRoaW4gdGhlIGNyaXRpY2FsIHNlY3Rpb24gdGhlbg0KKwkJCXBlcmZvcm0gdGhlIHlpZWxkIG5vdy4gKi8NCisJCQlpZiggdWxQb3J0WWllbGRQZW5kaW5nICE9IHBkRkFMU0UgKQ0KKwkJCXsNCisJCQkJdWxQb3J0WWllbGRQZW5kaW5nID0gcGRGQUxTRTsNCisJCQkJX19hc20gdm9sYXRpbGUoIHBvcnRZSUVMRF9JTlRFUlJVUFQgKTsNCisJCQl9DQorCQl9DQorCX0NCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogdWludDMyX3QgdWxQb3J0U2V0SW50ZXJydXB0TWFzayggdm9pZCApDQogew0KLSAgICB2b2xhdGlsZSB1aW50MzJfdCB1bE9yaWdpbmFsTWFzazsNCit2b2xhdGlsZSB1aW50MzJfdCB1bE9yaWdpbmFsTWFzazsNCiANCi0gICAgLyogU2V0IG1hc2sgdG8gbWF4IHN5c2NhbGwgcHJpb3JpdHkuICovDQotICAgICNpZiAoIGNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgPT0gcG9ydE1BWF9QUklPUklUWSApDQotICAgICAgICB7DQotICAgICAgICAgICAgLyogUmV0dXJuIHdoZXRoZXIgaW50ZXJydXB0cyB3ZXJlIGFscmVhZHkgZW5hYmxlZCBvciBub3QuICBQb3AgYWRqdXN0cw0KLSAgICAgICAgICAgICAqIHRoZSBzdGFjayBmaXJzdC4gKi8NCi0gICAgICAgICAgICBfX2FzbSB2b2xhdGlsZSAoICJwdXNoZgkJXHRcbiINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgJTAJCVx0XG4iDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2xpCQkJIg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiPXJtIiAoIHVsT3JpZ2luYWxNYXNrICk6OiJtZW1vcnkiICk7DQorCS8qIFNldCBtYXNrIHRvIG1heCBzeXNjYWxsIHByaW9yaXR5LiAqLw0KKwkjaWYoIGNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgPT0gcG9ydE1BWF9QUklPUklUWSApDQorCXsNCisJCS8qIFJldHVybiB3aGV0aGVyIGludGVycnVwdHMgd2VyZSBhbHJlYWR5IGVuYWJsZWQgb3Igbm90LiAgUG9wIGFkanVzdHMNCisJCXRoZSBzdGFjayBmaXJzdC4gKi8NCisJCV9fYXNtIHZvbGF0aWxlKCAicHVzaGYJCVx0XG4iDQorCQkJCQkJInBvcCAlMAkJXHRcbiINCisJCQkJCQkiY2xpCQkJIg0KKwkJCQkJCTogIj1ybSIgKHVsT3JpZ2luYWxNYXNrKSA6OiAibWVtb3J5IiApOw0KIA0KLSAgICAgICAgICAgIHVsT3JpZ2luYWxNYXNrICY9IHBvcnRFRkxBR1NfSUY7DQotICAgICAgICB9DQotICAgICNlbHNlDQotICAgICAgICB7DQotICAgICAgICAgICAgLyogUmV0dXJuIG9yaWdpbmFsIG1hc2suICovDQotICAgICAgICAgICAgdWxPcmlnaW5hbE1hc2sgPSBwb3J0QVBJQ19UQVNLX1BSSU9SSVRZOw0KLSAgICAgICAgICAgIHBvcnRBUElDX1RBU0tfUFJJT1JJVFkgPSBwb3J0TUFYX0FQSV9DQUxMX1BSSU9SSVRZOw0KLSAgICAgICAgICAgIGNvbmZpZ0FTU0VSVCggcG9ydEFQSUNfVEFTS19QUklPUklUWSA9PSBwb3J0TUFYX0FQSV9DQUxMX1BSSU9SSVRZICk7DQotICAgICAgICB9DQotICAgICNlbmRpZiAvKiBpZiAoIGNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgPT0gcG9ydE1BWF9QUklPUklUWSApICovDQorCQl1bE9yaWdpbmFsTWFzayAmPSBwb3J0RUZMQUdTX0lGOw0KKwl9DQorCSNlbHNlDQorCXsNCisJCS8qIFJldHVybiBvcmlnaW5hbCBtYXNrLiAqLw0KKwkJdWxPcmlnaW5hbE1hc2sgPSBwb3J0QVBJQ19UQVNLX1BSSU9SSVRZOw0KKwkJcG9ydEFQSUNfVEFTS19QUklPUklUWSA9IHBvcnRNQVhfQVBJX0NBTExfUFJJT1JJVFk7DQorCQljb25maWdBU1NFUlQoIHBvcnRBUElDX1RBU0tfUFJJT1JJVFkgPT0gcG9ydE1BWF9BUElfQ0FMTF9QUklPUklUWSApOw0KKwl9DQorCSNlbmRpZg0KIA0KLSAgICByZXR1cm4gdWxPcmlnaW5hbE1hc2s7DQorCXJldHVybiB1bE9yaWdpbmFsTWFzazsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogdm9pZCB2UG9ydENsZWFySW50ZXJydXB0TWFzayggdWludDMyX3QgdWxOZXdNYXNrVmFsdWUgKQ0KIHsNCi0gICAgI2lmICggY29uZmlnTUFYX0FQSV9DQUxMX0lOVEVSUlVQVF9QUklPUklUWSA9PSBwb3J0TUFYX1BSSU9SSVRZICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBpZiggdWxOZXdNYXNrVmFsdWUgIT0gcGRGQUxTRSApDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBfX2FzbSB2b2xhdGlsZSAoICJzdGkiICk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAjZWxzZQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHBvcnRBUElDX1RBU0tfUFJJT1JJVFkgPSB1bE5ld01hc2tWYWx1ZTsNCi0gICAgICAgICAgICBjb25maWdBU1NFUlQoIHBvcnRBUElDX1RBU0tfUFJJT1JJVFkgPT0gdWxOZXdNYXNrVmFsdWUgKTsNCi0gICAgICAgIH0NCi0gICAgI2VuZGlmIC8qIGlmICggY29uZmlnTUFYX0FQSV9DQUxMX0lOVEVSUlVQVF9QUklPUklUWSA9PSBwb3J0TUFYX1BSSU9SSVRZICkgKi8NCisJI2lmKCBjb25maWdNQVhfQVBJX0NBTExfSU5URVJSVVBUX1BSSU9SSVRZID09IHBvcnRNQVhfUFJJT1JJVFkgKQ0KKwl7DQorCQlpZiggdWxOZXdNYXNrVmFsdWUgIT0gcGRGQUxTRSApDQorCQl7DQorCQkJX19hc20gdm9sYXRpbGUoICJzdGkiICk7DQorCQl9DQorCX0NCisJI2Vsc2UNCisJew0KKwkJcG9ydEFQSUNfVEFTS19QUklPUklUWSA9IHVsTmV3TWFza1ZhbHVlOw0KKwkJY29uZmlnQVNTRVJUKCBwb3J0QVBJQ19UQVNLX1BSSU9SSVRZID09IHVsTmV3TWFza1ZhbHVlICk7DQorCX0NCisJI2VuZGlmDQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KICNpZiAoIGNvbmZpZ1NVUFBPUlRfRlBVID09IDEgKQ0KIA0KLSAgICB2b2lkIHZQb3J0VGFza1VzZXNGUFUoIHZvaWQgKQ0KLSAgICB7DQotICAgICAgICAvKiBBIHRhc2sgaXMgcmVnaXN0ZXJpbmcgdGhlIGZhY3QgdGhhdCBpdCBuZWVkcyBhbiBGUFUgY29udGV4dC4gIEFsbG9jYXRlIGENCi0gICAgICAgICAqIGJ1ZmZlciBpbnRvIHdoaWNoIHRoZSBjb250ZXh0IGNhbiBiZSBzYXZlZC4gKi8NCi0gICAgICAgIHB1Y1BvcnRUYXNrRlBVQ29udGV4dEJ1ZmZlciA9ICggdWludDhfdCAqICkgcHZQb3J0TWFsbG9jKCBwb3J0RlBVX0NPTlRFWFRfU0laRV9CWVRFUyApOw0KLSAgICAgICAgY29uZmlnQVNTRVJUKCBwdWNQb3J0VGFza0ZQVUNvbnRleHRCdWZmZXIgKTsNCisJdm9pZCB2UG9ydFRhc2tVc2VzRlBVKCB2b2lkICkNCisJew0KKwkJLyogQSB0YXNrIGlzIHJlZ2lzdGVyaW5nIHRoZSBmYWN0IHRoYXQgaXQgbmVlZHMgYW4gRlBVIGNvbnRleHQuICBBbGxvY2F0ZSBhDQorCQlidWZmZXIgaW50byB3aGljaCB0aGUgY29udGV4dCBjYW4gYmUgc2F2ZWQuICovDQorCQlwdWNQb3J0VGFza0ZQVUNvbnRleHRCdWZmZXIgPSAoIHVpbnQ4X3QgKiApIHB2UG9ydE1hbGxvYyggcG9ydEZQVV9DT05URVhUX1NJWkVfQllURVMgKTsNCisJCWNvbmZpZ0FTU0VSVCggcHVjUG9ydFRhc2tGUFVDb250ZXh0QnVmZmVyICk7DQogDQotICAgICAgICAvKiBJbml0aWFsaXNlIHRoZSBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMuICovDQotICAgICAgICBfX2FzbSB2b2xhdGlsZSAoICJmbmluaXQiICk7DQotICAgIH0NCisJCS8qIEluaXRpYWxpc2UgdGhlIGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycy4gKi8NCisJCV9fYXNtIHZvbGF0aWxlKAkiZm5pbml0IiApOw0KKwl9DQogDQogI2VuZGlmIC8qIGNvbmZpZ1NVUFBPUlRfRlBVICovDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQpAQCAtNTU0LDEzMiArNTQzLDE0NCBAQAogdm9pZCB2UG9ydEFQSUNFcnJvckhhbmRsZXIoIHZvaWQgKQ0KIHsNCiAvKiBWYXJpYWJsZSB0byBob2xkIHRoZSBBUElDIGVycm9yIHN0YXR1cyBmb3Igdmlld2luZyBpbiB0aGUgZGVidWdnZXIuICovDQotICAgIHZvbGF0aWxlIHVpbnQzMl90IHVsRXJyb3JTdGF0dXMgPSAwOw0KK3ZvbGF0aWxlIHVpbnQzMl90IHVsRXJyb3JTdGF0dXMgPSAwOw0KIA0KLSAgICBwb3J0QVBJQ19FUlJPUl9TVEFUVVMgPSAwOw0KLSAgICB1bEVycm9yU3RhdHVzID0gcG9ydEFQSUNfRVJST1JfU1RBVFVTOw0KLSAgICAoIHZvaWQgKSB1bEVycm9yU3RhdHVzOw0KKwlwb3J0QVBJQ19FUlJPUl9TVEFUVVMgPSAwOw0KKwl1bEVycm9yU3RhdHVzID0gcG9ydEFQSUNfRVJST1JfU1RBVFVTOw0KKwkoIHZvaWQgKSB1bEVycm9yU3RhdHVzOw0KIA0KLSAgICAvKiBGb3JjZSBhbiBhc3NlcnQuICovDQotICAgIGNvbmZpZ0FTU0VSVCggdWxDcml0aWNhbE5lc3RpbmcgPT0gfjBVTCApOw0KKwkvKiBGb3JjZSBhbiBhc3NlcnQuICovDQorCWNvbmZpZ0FTU0VSVCggdWxDcml0aWNhbE5lc3RpbmcgPT0gfjBVTCApOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0jaWYgKCBjb25maWdVU0VfQ09NTU9OX0lOVEVSUlVQVF9FTlRSWV9QT0lOVCA9PSAxICkNCisjaWYoIGNvbmZpZ1VTRV9DT01NT05fSU5URVJSVVBUX0VOVFJZX1BPSU5UID09IDEgKQ0KIA0KLSAgICB2b2lkIHZQb3J0Q2VudHJhbEludGVycnVwdEhhbmRsZXIoIHVpbnQzMl90IHVsVmVjdG9yICkNCi0gICAgew0KLSAgICAgICAgaWYoIHVsVmVjdG9yIDwgcG9ydE5VTV9WRUNUT1JTICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBpZiggeEludGVycnVwdEhhbmRsZXJUYWJsZVsgdWxWZWN0b3IgXSAhPSBOVUxMICkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICggeEludGVycnVwdEhhbmRsZXJUYWJsZVsgdWxWZWN0b3IgXSApKCk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KKwl2b2lkIHZQb3J0Q2VudHJhbEludGVycnVwdEhhbmRsZXIoIHVpbnQzMl90IHVsVmVjdG9yICkNCisJew0KKwkJaWYoIHVsVmVjdG9yIDwgcG9ydE5VTV9WRUNUT1JTICkNCisJCXsNCisJCQlpZiggeEludGVycnVwdEhhbmRsZXJUYWJsZVsgdWxWZWN0b3IgXSAhPSBOVUxMICkNCisJCQl7DQorCQkJCSggeEludGVycnVwdEhhbmRsZXJUYWJsZVsgdWxWZWN0b3IgXSApKCk7DQorCQkJfQ0KKwkJfQ0KIA0KLSAgICAgICAgLyogQ2hlY2sgZm9yIGEgc3lzdGVtIHN0YWNrIG92ZXJmbG93LiAqLw0KLSAgICAgICAgY29uZmlnQVNTRVJUKCB1bFN5c3RlbVN0YWNrWyAxMCBdID09IHBvcnRTVEFDS19XT1JEICk7DQotICAgICAgICBjb25maWdBU1NFUlQoIHVsU3lzdGVtU3RhY2tbIDEyIF0gPT0gcG9ydFNUQUNLX1dPUkQgKTsNCi0gICAgICAgIGNvbmZpZ0FTU0VSVCggdWxTeXN0ZW1TdGFja1sgMTQgXSA9PSBwb3J0U1RBQ0tfV09SRCApOw0KLSAgICB9DQorCQkvKiBDaGVjayBmb3IgYSBzeXN0ZW0gc3RhY2sgb3ZlcmZsb3cuICovDQorCQljb25maWdBU1NFUlQoIHVsU3lzdGVtU3RhY2tbIDEwIF0gPT0gcG9ydFNUQUNLX1dPUkQgKTsNCisJCWNvbmZpZ0FTU0VSVCggdWxTeXN0ZW1TdGFja1sgMTIgXSA9PSBwb3J0U1RBQ0tfV09SRCApOw0KKwkJY29uZmlnQVNTRVJUKCB1bFN5c3RlbVN0YWNrWyAxNCBdID09IHBvcnRTVEFDS19XT1JEICk7DQorCX0NCiANCiAjZW5kaWYgLyogY29uZmlnVVNFX0NPTU1PTl9JTlRFUlJVUFRfRU5UUllfUE9JTlQgKi8NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAjaWYgKCBjb25maWdVU0VfQ09NTU9OX0lOVEVSUlVQVF9FTlRSWV9QT0lOVCA9PSAxICkNCiANCi0gICAgQmFzZVR5cGVfdCB4UG9ydFJlZ2lzdGVyQ0ludGVycnVwdEhhbmRsZXIoIElTUl9IYW5kbGVyX3QgcHhIYW5kbGVyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWxWZWN0b3JOdW1iZXIgKQ0KLSAgICB7DQotICAgICAgICBCYXNlVHlwZV90IHhSZXR1cm47DQorCUJhc2VUeXBlX3QgeFBvcnRSZWdpc3RlckNJbnRlcnJ1cHRIYW5kbGVyKCBJU1JfSGFuZGxlcl90IHB4SGFuZGxlciwgdWludDMyX3QgdWxWZWN0b3JOdW1iZXIgKQ0KKwl7DQorCUJhc2VUeXBlX3QgeFJldHVybjsNCiANCi0gICAgICAgIHhSZXR1cm4gPSBwcnZDaGVja1ZhbGlkaXR5T2ZWZWN0b3JOdW1iZXIoIHVsVmVjdG9yTnVtYmVyICk7DQorCQl4UmV0dXJuID0gcHJ2Q2hlY2tWYWxpZGl0eU9mVmVjdG9yTnVtYmVyKCB1bFZlY3Rvck51bWJlciApOw0KIA0KLSAgICAgICAgaWYoIHhSZXR1cm4gIT0gcGRGQUlMICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICAvKiBTYXZlIHRoZSBoYW5kbGVyIHBhc3NlZCBpbiBieSB0aGUgYXBwbGljYXRpb24gaW4gdGhlIHZlY3RvciBudW1iZXINCi0gICAgICAgICAgICAgKiBwYXNzZWQgaW4uICBUaGUgYWRkcmVzc2VzIGFyZSB0aGVuIGNhbGxlZCBmcm9tIHRoZSBjZW50cmFsIGludGVycnVwdA0KLSAgICAgICAgICAgICAqIGhhbmRsZXIuICovDQotICAgICAgICAgICAgeEludGVycnVwdEhhbmRsZXJUYWJsZVsgdWxWZWN0b3JOdW1iZXIgXSA9IHB4SGFuZGxlcjsNCi0gICAgICAgIH0NCisJCWlmKCB4UmV0dXJuICE9IHBkRkFJTCApDQorCQl7DQorCQkJLyogU2F2ZSB0aGUgaGFuZGxlciBwYXNzZWQgaW4gYnkgdGhlIGFwcGxpY2F0aW9uIGluIHRoZSB2ZWN0b3IgbnVtYmVyDQorCQkJcGFzc2VkIGluLiAgVGhlIGFkZHJlc3NlcyBhcmUgdGhlbiBjYWxsZWQgZnJvbSB0aGUgY2VudHJhbCBpbnRlcnJ1cHQNCisJCQloYW5kbGVyLiAqLw0KKwkJCXhJbnRlcnJ1cHRIYW5kbGVyVGFibGVbIHVsVmVjdG9yTnVtYmVyIF0gPSBweEhhbmRsZXI7DQorCQl9DQogDQotICAgICAgICByZXR1cm4geFJldHVybjsNCi0gICAgfQ0KKwkJcmV0dXJuIHhSZXR1cm47DQorCX0NCiANCiAjZW5kaWYgLyogY29uZmlnVVNFX0NPTU1PTl9JTlRFUlJVUFRfRU5UUllfUE9JTlQgKi8NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi1CYXNlVHlwZV90IHhQb3J0SW5zdGFsbEludGVycnVwdEhhbmRsZXIoIElTUl9IYW5kbGVyX3QgcHhIYW5kbGVyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWxWZWN0b3JOdW1iZXIgKQ0KK0Jhc2VUeXBlX3QgeFBvcnRJbnN0YWxsSW50ZXJydXB0SGFuZGxlciggSVNSX0hhbmRsZXJfdCBweEhhbmRsZXIsIHVpbnQzMl90IHVsVmVjdG9yTnVtYmVyICkNCiB7DQotICAgIEJhc2VUeXBlX3QgeFJldHVybjsNCitCYXNlVHlwZV90IHhSZXR1cm47DQogDQotICAgIHhSZXR1cm4gPSBwcnZDaGVja1ZhbGlkaXR5T2ZWZWN0b3JOdW1iZXIoIHVsVmVjdG9yTnVtYmVyICk7DQorCXhSZXR1cm4gPSBwcnZDaGVja1ZhbGlkaXR5T2ZWZWN0b3JOdW1iZXIoIHVsVmVjdG9yTnVtYmVyICk7DQogDQotICAgIGlmKCB4UmV0dXJuICE9IHBkRkFJTCApDQotICAgIHsNCi0gICAgICAgIHRhc2tFTlRFUl9DUklUSUNBTCgpOw0KLSAgICAgICAgew0KLSAgICAgICAgICAgIC8qIFVwZGF0ZSB0aGUgSURUIHRvIGluY2x1ZGUgdGhlIGFwcGxpY2F0aW9uIGRlZmluZWQgaGFuZGxlci4gKi8NCi0gICAgICAgICAgICBwcnZTZXRJbnRlcnJ1cHRHYXRlKCAoIHVpbnQ4X3QgKSB1bFZlY3Rvck51bWJlciwgKCBJU1JfSGFuZGxlcl90ICkgcHhIYW5kbGVyLCBwb3J0SURUX0ZMQUdTICk7DQotICAgICAgICB9DQotICAgICAgICB0YXNrRVhJVF9DUklUSUNBTCgpOw0KLSAgICB9DQorCWlmKCB4UmV0dXJuICE9IHBkRkFJTCApDQorCXsNCisJCXRhc2tFTlRFUl9DUklUSUNBTCgpOw0KKwkJew0KKwkJCS8qIFVwZGF0ZSB0aGUgSURUIHRvIGluY2x1ZGUgdGhlIGFwcGxpY2F0aW9uIGRlZmluZWQgaGFuZGxlci4gKi8NCisJCQlwcnZTZXRJbnRlcnJ1cHRHYXRlKCAoIHVpbnQ4X3QgKSB1bFZlY3Rvck51bWJlciwgKCBJU1JfSGFuZGxlcl90ICkgcHhIYW5kbGVyLCBwb3J0SURUX0ZMQUdTICk7DQorCQl9DQorCQl0YXNrRVhJVF9DUklUSUNBTCgpOw0KKwl9DQogDQotICAgIHJldHVybiB4UmV0dXJuOw0KKwlyZXR1cm4geFJldHVybjsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogc3RhdGljIEJhc2VUeXBlX3QgcHJ2Q2hlY2tWYWxpZGl0eU9mVmVjdG9yTnVtYmVyKCB1aW50MzJfdCB1bFZlY3Rvck51bWJlciApDQogew0KLSAgICBCYXNlVHlwZV90IHhSZXR1cm47DQorQmFzZVR5cGVfdCB4UmV0dXJuOw0KIA0KLSAgICAvKiBDaGVjayB2YWxpZGl0eSBvZiB2ZWN0b3IgbnVtYmVyLiAqLw0KLSAgICBpZiggdWxWZWN0b3JOdW1iZXIgPj0gcG9ydE5VTV9WRUNUT1JTICkNCi0gICAgew0KLSAgICAgICAgLyogVG9vIGhpZ2guICovDQotICAgICAgICB4UmV0dXJuID0gcGRGQUlMOw0KLSAgICB9DQotICAgIGVsc2UgaWYoIHVsVmVjdG9yTnVtYmVyIDwgcG9ydEFQSUNfTUlOX0FMTE9XQUJMRV9WRUNUT1IgKQ0KLSAgICB7DQotICAgICAgICAvKiBUb28gbG93LiAqLw0KLSAgICAgICAgeFJldHVybiA9IHBkRkFJTDsNCi0gICAgfQ0KLSAgICBlbHNlIGlmKCB1bFZlY3Rvck51bWJlciA9PSBwb3J0QVBJQ19USU1FUl9JTlRfVkVDVE9SICkNCi0gICAgew0KLSAgICAgICAgLyogSW4gdXNlIGJ5IEZyZWVSVE9TLiAqLw0KLSAgICAgICAgeFJldHVybiA9IHBkRkFJTDsNCi0gICAgfQ0KLSAgICBlbHNlIGlmKCB1bFZlY3Rvck51bWJlciA9PSBwb3J0QVBJQ19ZSUVMRF9JTlRfVkVDVE9SICkNCi0gICAgew0KLSAgICAgICAgLyogSW4gdXNlIGJ5IEZyZWVSVE9TLiAqLw0KLSAgICAgICAgeFJldHVybiA9IHBkRkFJTDsNCi0gICAgfQ0KLSAgICBlbHNlIGlmKCB1bFZlY3Rvck51bWJlciA9PSBwb3J0QVBJQ19MVlRfRVJST1JfVkVDVE9SICkNCi0gICAgew0KLSAgICAgICAgLyogSW4gdXNlIGJ5IEZyZWVSVE9TLiAqLw0KLSAgICAgICAgeFJldHVybiA9IHBkRkFJTDsNCi0gICAgfQ0KLSAgICBlbHNlIGlmKCB1bFZlY3Rvck51bWJlciA9PSBwb3J0QVBJQ19TUFVSSU9VU19JTlRfVkVDVE9SICkNCi0gICAgew0KLSAgICAgICAgLyogSW4gdXNlIGJ5IEZyZWVSVE9TLiAqLw0KLSAgICAgICAgeFJldHVybiA9IHBkRkFJTDsNCi0gICAgfQ0KLSAgICBlbHNlIGlmKCB4SW50ZXJydXB0SGFuZGxlclRhYmxlWyB1bFZlY3Rvck51bWJlciBdICE9IE5VTEwgKQ0KLSAgICB7DQotICAgICAgICAvKiBBbHJlYWR5IGluIHVzZSBieSB0aGUgYXBwbGljYXRpb24uICovDQotICAgICAgICB4UmV0dXJuID0gcGRGQUlMOw0KLSAgICB9DQotICAgIGVsc2UNCi0gICAgew0KLSAgICAgICAgeFJldHVybiA9IHBkUEFTUzsNCi0gICAgfQ0KKwkvKiBDaGVjayB2YWxpZGl0eSBvZiB2ZWN0b3IgbnVtYmVyLiAqLw0KKwlpZiggdWxWZWN0b3JOdW1iZXIgPj0gcG9ydE5VTV9WRUNUT1JTICkNCisJew0KKwkJLyogVG9vIGhpZ2guICovDQorCQl4UmV0dXJuID0gcGRGQUlMOw0KKwl9DQorCWVsc2UgaWYoIHVsVmVjdG9yTnVtYmVyIDwgcG9ydEFQSUNfTUlOX0FMTE9XQUJMRV9WRUNUT1IgKQ0KKwl7DQorCQkvKiBUb28gbG93LiAqLw0KKwkJeFJldHVybiA9IHBkRkFJTDsNCisJfQ0KKwllbHNlIGlmKCB1bFZlY3Rvck51bWJlciA9PSBwb3J0QVBJQ19USU1FUl9JTlRfVkVDVE9SICkNCisJew0KKwkJLyogSW4gdXNlIGJ5IEZyZWVSVE9TLiAqLw0KKwkJeFJldHVybiA9IHBkRkFJTDsNCisJfQ0KKwllbHNlIGlmKCB1bFZlY3Rvck51bWJlciA9PSBwb3J0QVBJQ19ZSUVMRF9JTlRfVkVDVE9SICkNCisJew0KKwkJLyogSW4gdXNlIGJ5IEZyZWVSVE9TLiAqLw0KKwkJeFJldHVybiA9IHBkRkFJTDsNCisJfQ0KKwllbHNlIGlmKCB1bFZlY3Rvck51bWJlciA9PSBwb3J0QVBJQ19MVlRfRVJST1JfVkVDVE9SICkNCisJew0KKwkJLyogSW4gdXNlIGJ5IEZyZWVSVE9TLiAqLw0KKwkJeFJldHVybiA9IHBkRkFJTDsNCisJfQ0KKwllbHNlIGlmKCB1bFZlY3Rvck51bWJlciA9PSBwb3J0QVBJQ19TUFVSSU9VU19JTlRfVkVDVE9SICkNCisJew0KKwkJLyogSW4gdXNlIGJ5IEZyZWVSVE9TLiAqLw0KKwkJeFJldHVybiA9IHBkRkFJTDsNCisJfQ0KKwllbHNlIGlmKCB4SW50ZXJydXB0SGFuZGxlclRhYmxlWyB1bFZlY3Rvck51bWJlciBdICE9IE5VTEwgKQ0KKwl7DQorCQkvKiBBbHJlYWR5IGluIHVzZSBieSB0aGUgYXBwbGljYXRpb24uICovDQorCQl4UmV0dXJuID0gcGRGQUlMOw0KKwl9DQorCWVsc2UNCisJew0KKwkJeFJldHVybiA9IHBkUEFTUzsNCisJfQ0KIA0KLSAgICByZXR1cm4geFJldHVybjsNCisJcmV0dXJuIHhSZXR1cm47DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdkdlbmVyYXRlWWllbGRJbnRlcnJ1cHQoIHZvaWQgKQ0KIHsNCi0gICAgX19hc20gdm9sYXRpbGUgKCBwb3J0WUlFTERfSU5URVJSVVBUICk7DQorCV9fYXNtIHZvbGF0aWxlKCBwb3J0WUlFTERfSU5URVJSVVBUICk7DQogfQ0KKw0KKw0KKw0KKw0KKw0KKw0KKw0KKw0KKw0KKw0KKw0KKw0KKw0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0dDQy9JQTMyX2ZsYXQvcG9ydG1hY3JvLmggYi9wb3J0YWJsZS9HQ0MvSUEzMl9mbGF0L3BvcnRtYWNyby5oCmluZGV4IDQwNDE4NTguLjAxMjIwN2YgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0dDQy9JQTMyX2ZsYXQvcG9ydG1hY3JvLmgKKysrIGIvcG9ydGFibGUvR0NDL0lBMzJfZmxhdC9wb3J0bWFjcm8uaApAQCAtMjYsMTEgKzI2LDExIEBACiAgKi8NCiANCiAjaWZuZGVmIFBPUlRNQUNST19IDQotICAgICNkZWZpbmUgUE9SVE1BQ1JPX0gNCisjZGVmaW5lIFBPUlRNQUNST19IDQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgZXh0ZXJuICJDIiB7DQotICAgICNlbmRpZg0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KKwlleHRlcm4gIkMiIHsNCisjZW5kaWYNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICogUG9ydCBzcGVjaWZpYyBkZWZpbml0aW9ucy4NCkBAIC00MywyNTUgKzQzLDI0OSBAQAogICovDQogDQogLyogVHlwZSBkZWZpbml0aW9ucy4gKi8NCi0gICAgI2RlZmluZSBwb3J0Q0hBUiAgICAgICAgICBjaGFyDQotICAgICNkZWZpbmUgcG9ydEZMT0FUICAgICAgICAgZmxvYXQNCi0gICAgI2RlZmluZSBwb3J0RE9VQkxFICAgICAgICBkb3VibGUNCi0gICAgI2RlZmluZSBwb3J0TE9ORyAgICAgICAgICBsb25nDQotICAgICNkZWZpbmUgcG9ydFNIT1JUICAgICAgICAgc2hvcnQNCi0gICAgI2RlZmluZSBwb3J0U1RBQ0tfVFlQRSAgICB1aW50MzJfdA0KLSAgICAjZGVmaW5lIHBvcnRCQVNFX1RZUEUgICAgIGxvbmcNCisjZGVmaW5lIHBvcnRDSEFSCQljaGFyDQorI2RlZmluZSBwb3J0RkxPQVQJCWZsb2F0DQorI2RlZmluZSBwb3J0RE9VQkxFCQlkb3VibGUNCisjZGVmaW5lIHBvcnRMT05HCQlsb25nDQorI2RlZmluZSBwb3J0U0hPUlQJCXNob3J0DQorI2RlZmluZSBwb3J0U1RBQ0tfVFlQRQl1aW50MzJfdA0KKyNkZWZpbmUgcG9ydEJBU0VfVFlQRQlsb25nDQogDQotICAgIHR5cGVkZWYgcG9ydFNUQUNLX1RZUEUgICBTdGFja1R5cGVfdDsNCi0gICAgdHlwZWRlZiBsb25nICAgICAgICAgICAgIEJhc2VUeXBlX3Q7DQotICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyAgICBVQmFzZVR5cGVfdDsNCit0eXBlZGVmIHBvcnRTVEFDS19UWVBFIFN0YWNrVHlwZV90Ow0KK3R5cGVkZWYgbG9uZyBCYXNlVHlwZV90Ow0KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBVQmFzZVR5cGVfdDsNCiANCi0gICAgdHlwZWRlZiB1aW50MzJfdCAgICAgICAgIFRpY2tUeXBlX3Q7DQotICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAoICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTCApDQordHlwZWRlZiB1aW50MzJfdCBUaWNrVHlwZV90Ow0KKyNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTCApDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogSGFyZHdhcmUgc3BlY2lmaWNzLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEggICAgICAoIC0xICkNCi0gICAgI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMgICAgKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCi0gICAgI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQgICAgMzINCisjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEgJCQkoIC0xICkNCisjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUwkJCSggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQorI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQJCQkzMg0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFRhc2sgdXRpbGl0aWVzLiAqLw0KIA0KIC8qIFRoZSBpbnRlcnJ1cHQgcHJpb3JpdHkgKGZvciB2ZWN0b3JzIDE2IHRvIDI1NSkgaXMgZGV0ZXJtaW5lZCB1c2luZyB2ZWN0b3IvMTYuDQotICogVGhlIHF1b3RpZW50IGlzIHJvdW5kZWQgdG8gdGhlIG5lYXJlc3QgaW50ZWdlciB3aXRoIDEgYmVpbmcgdGhlIGxvd2VzdCBwcmlvcml0eQ0KLSAqIGFuZCAxNSBpcyB0aGUgaGlnaGVzdC4gIFRoZXJlZm9yZSB0aGUgZm9sbG93aW5nIHR3byBpbnRlcnJ1cHRzIGFyZSBhdCB0aGUgbG93ZXN0DQotICogcHJpb3JpdHkuICAqTk9URSAxKiBJZiB0aGUgeWllbGQgdmVjdG9yIGlzIGNoYW5nZWQgdGhlbiBpdCBtdXN0IGFsc28gYmUgY2hhbmdlZA0KLSAqIGluIHRoZSBwb3J0WUlFTERfSU5URVJSVVBUIGRlZmluaXRpb24gaW1tZWRpYXRlbHkgYmVsb3cuICovDQotICAgICNkZWZpbmUgcG9ydEFQSUNfVElNRVJfSU5UX1ZFQ1RPUiAgICAgICAoIDB4MjEgKQ0KLSAgICAjZGVmaW5lIHBvcnRBUElDX1lJRUxEX0lOVF9WRUNUT1IgICAgICAgKCAweDIwICkNCitUaGUgcXVvdGllbnQgaXMgcm91bmRlZCB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyIHdpdGggMSBiZWluZyB0aGUgbG93ZXN0IHByaW9yaXR5DQorYW5kIDE1IGlzIHRoZSBoaWdoZXN0LiAgVGhlcmVmb3JlIHRoZSBmb2xsb3dpbmcgdHdvIGludGVycnVwdHMgYXJlIGF0IHRoZSBsb3dlc3QNCitwcmlvcml0eS4gICpOT1RFIDEqIElmIHRoZSB5aWVsZCB2ZWN0b3IgaXMgY2hhbmdlZCB0aGVuIGl0IG11c3QgYWxzbyBiZSBjaGFuZ2VkDQoraW4gdGhlIHBvcnRZSUVMRF9JTlRFUlJVUFQgZGVmaW5pdGlvbiBpbW1lZGlhdGVseSBiZWxvdy4gKi8NCisjZGVmaW5lIHBvcnRBUElDX1RJTUVSX0lOVF9WRUNUT1IgCQkoIDB4MjEgKQ0KKyNkZWZpbmUgcG9ydEFQSUNfWUlFTERfSU5UX1ZFQ1RPUiAJCSggMHgyMCApDQogDQogLyogQnVpbGQgeWllbGQgaW50ZXJydXB0IGluc3RydWN0aW9uLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRZSUVMRF9JTlRFUlJVUFQgICAgICAgICAgICAgImludCAkMHgyMCINCisjZGVmaW5lIHBvcnRZSUVMRF9JTlRFUlJVUFQgImludCAkMHgyMCINCiANCiAvKiBBUElDIHJlZ2lzdGVyIGFkZHJlc3Nlcy4gKi8NCi0gICAgI2RlZmluZSBwb3J0QVBJQ19FT0kgICAgICAgICAgICAgICAgICAgICggKiggKCB2b2xhdGlsZSB1aW50MzJfdCAqICkgMHhGRUUwMDBCMFVMICkgKQ0KKyNkZWZpbmUgcG9ydEFQSUNfRU9JCQkJCQkoICooICggdm9sYXRpbGUgdWludDMyX3QgKiApIDB4RkVFMDAwQjBVTCApICkNCiANCiAvKiBBUElDIGJpdCBkZWZpbml0aW9ucy4gKi8NCi0gICAgI2RlZmluZSBwb3J0QVBJQ19FTkFCTEVfQklUICAgICAgICAgICAgICggMVVMIDw8IDhVTCApDQotICAgICNkZWZpbmUgcG9ydEFQSUNfVElNRVJfUEVSSU9ESUMgICAgICAgICAoIDFVTCA8PCAxN1VMICkNCi0gICAgI2RlZmluZSBwb3J0QVBJQ19ESVNBQkxFICAgICAgICAgICAgICAgICggMVVMIDw8IDE2VUwgKQ0KLSAgICAjZGVmaW5lIHBvcnRBUElDX05NSSAgICAgICAgICAgICAgICAgICAgKCA0IDw8IDggKQ0KLSAgICAjZGVmaW5lIHBvcnRBUElDX0RJVl8xNiAgICAgICAgICAgICAgICAgKCAweDAzICkNCisjZGVmaW5lIHBvcnRBUElDX0VOQUJMRV9CSVQJCQkJKCAxVUwgPDwgOFVMICkNCisjZGVmaW5lIHBvcnRBUElDX1RJTUVSX1BFUklPRElDIAkJKCAxVUwgPDwgMTdVTCApDQorI2RlZmluZSBwb3J0QVBJQ19ESVNBQkxFIAkJCQkoIDFVTCA8PCAxNlVMICkNCisjZGVmaW5lIHBvcnRBUElDX05NSSAJCQkJCSggNCA8PCA4KQ0KKyNkZWZpbmUgcG9ydEFQSUNfRElWXzE2IAkJCQkoIDB4MDMgKQ0KIA0KIC8qIERlZmluZSBsb2NhbCBBUEkgcmVnaXN0ZXIgYWRkcmVzc2VzLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRBUElDX0lEX1JFR0lTVEVSICAgICAgICAgICAgKCAqKCAoIHZvbGF0aWxlIHVpbnQzMl90ICogKSAoIGNvbmZpZ0FQSUNfQkFTRSArIDB4MjBVTCApICkgKQ0KLSAgICAjZGVmaW5lIHBvcnRBUElDX1NQVVJJT1VTX0lOVCAgICAgICAgICAgKCAqKCAoIHZvbGF0aWxlIHVpbnQzMl90ICogKSAoIGNvbmZpZ0FQSUNfQkFTRSArIDB4RjBVTCApICkgKQ0KLSAgICAjZGVmaW5lIHBvcnRBUElDX0xWVF9USU1FUiAgICAgICAgICAgICAgKCAqKCAoIHZvbGF0aWxlIHVpbnQzMl90ICogKSAoIGNvbmZpZ0FQSUNfQkFTRSArIDB4MzIwVUwgKSApICkNCi0gICAgI2RlZmluZSBwb3J0QVBJQ19USU1FUl9JTklUSUFMX0NPVU5UICAgICggKiggKCB2b2xhdGlsZSB1aW50MzJfdCAqICkgKCBjb25maWdBUElDX0JBU0UgKyAweDM4MFVMICkgKSApDQotICAgICNkZWZpbmUgcG9ydEFQSUNfVElNRVJfQ1VSUkVOVF9DT1VOVCAgICAoICooICggdm9sYXRpbGUgdWludDMyX3QgKiApICggY29uZmlnQVBJQ19CQVNFICsgMHgzOTBVTCApICkgKQ0KLSAgICAjZGVmaW5lIHBvcnRBUElDX1RBU0tfUFJJT1JJVFkgICAgICAgICAgKCAqKCAoIHZvbGF0aWxlIHVpbnQzMl90ICogKSAoIGNvbmZpZ0FQSUNfQkFTRSArIDB4ODBVTCApICkgKQ0KLSAgICAjZGVmaW5lIHBvcnRBUElDX0xWVF9FUlJPUiAgICAgICAgICAgICAgKCAqKCAoIHZvbGF0aWxlIHVpbnQzMl90ICogKSAoIGNvbmZpZ0FQSUNfQkFTRSArIDB4MzcwVUwgKSApICkNCi0gICAgI2RlZmluZSBwb3J0QVBJQ19FUlJPUl9TVEFUVVMgICAgICAgICAgICggKiggKCB2b2xhdGlsZSB1aW50MzJfdCAqICkgKCBjb25maWdBUElDX0JBU0UgKyAweDI4MFVMICkgKSApDQotICAgICNkZWZpbmUgcG9ydEFQSUNfTERSICAgICAgICAgICAgICAgICAgICAoICooICggdm9sYXRpbGUgdWludDMyX3QgKiApICggY29uZmlnQVBJQ19CQVNFICsgMHhEMFVMICkgKSApDQotICAgICNkZWZpbmUgcG9ydEFQSUNfVE1SRElWICAgICAgICAgICAgICAgICAoICooICggdm9sYXRpbGUgdWludDMyX3QgKiApICggY29uZmlnQVBJQ19CQVNFICsgMHgzRTBVTCApICkgKQ0KLSAgICAjZGVmaW5lIHBvcnRBUElDX0xWVF9QRVJGICAgICAgICAgICAgICAgKCAqKCAoIHZvbGF0aWxlIHVpbnQzMl90ICogKSAoIGNvbmZpZ0FQSUNfQkFTRSArIDB4MzQwVUwgKSApICkNCi0gICAgI2RlZmluZSBwb3J0QVBJQ19MVlRfTElOVDAgICAgICAgICAgICAgICggKiggKCB2b2xhdGlsZSB1aW50MzJfdCAqICkgKCBjb25maWdBUElDX0JBU0UgKyAweDM1MFVMICkgKSApDQotICAgICNkZWZpbmUgcG9ydEFQSUNfTFZUX0xJTlQxICAgICAgICAgICAgICAoICooICggdm9sYXRpbGUgdWludDMyX3QgKiApICggY29uZmlnQVBJQ19CQVNFICsgMHgzNjBVTCApICkgKQ0KKyNkZWZpbmUgcG9ydEFQSUNfSURfUkVHSVNURVIJCQkoICooICggdm9sYXRpbGUgdWludDMyX3QgKiApICggY29uZmlnQVBJQ19CQVNFICsgMHgyMFVMICApICkgKQ0KKyNkZWZpbmUgcG9ydEFQSUNfU1BVUklPVVNfSU5UCQkJKCAqKCAoIHZvbGF0aWxlIHVpbnQzMl90ICogKSAoIGNvbmZpZ0FQSUNfQkFTRSArIDB4RjBVTCAgKSApICkNCisjZGVmaW5lIHBvcnRBUElDX0xWVF9USU1FUgkJCQkoICooICggdm9sYXRpbGUgdWludDMyX3QgKiApICggY29uZmlnQVBJQ19CQVNFICsgMHgzMjBVTCApICkgKQ0KKyNkZWZpbmUgcG9ydEFQSUNfVElNRVJfSU5JVElBTF9DT1VOVAkoICooICggdm9sYXRpbGUgdWludDMyX3QgKiApICggY29uZmlnQVBJQ19CQVNFICsgMHgzODBVTCApICkgKQ0KKyNkZWZpbmUgcG9ydEFQSUNfVElNRVJfQ1VSUkVOVF9DT1VOVAkoICooICggdm9sYXRpbGUgdWludDMyX3QgKiApICggY29uZmlnQVBJQ19CQVNFICsgMHgzOTBVTCApICkgKQ0KKyNkZWZpbmUgcG9ydEFQSUNfVEFTS19QUklPUklUWQkJCSggKiggKCB2b2xhdGlsZSB1aW50MzJfdCAqICkgKCBjb25maWdBUElDX0JBU0UgKyAweDgwVUwgICkgKSApDQorI2RlZmluZSBwb3J0QVBJQ19MVlRfRVJST1IJCQkJKCAqKCAoIHZvbGF0aWxlIHVpbnQzMl90ICogKSAoIGNvbmZpZ0FQSUNfQkFTRSArIDB4MzcwVUwgKSApICkNCisjZGVmaW5lIHBvcnRBUElDX0VSUk9SX1NUQVRVUwkJCSggKiggKCB2b2xhdGlsZSB1aW50MzJfdCAqICkgKCBjb25maWdBUElDX0JBU0UgKyAweDI4MFVMICkgKSApDQorI2RlZmluZSBwb3J0QVBJQ19MRFIJIAkJCQkoICooICggdm9sYXRpbGUgdWludDMyX3QgKiApICggY29uZmlnQVBJQ19CQVNFICsgMHhEMFVMICApICkgKQ0KKyNkZWZpbmUgcG9ydEFQSUNfVE1SRElWIAkJCQkoICooICggdm9sYXRpbGUgdWludDMyX3QgKiApICggY29uZmlnQVBJQ19CQVNFICsgMHgzRTBVTCApICkgKQ0KKyNkZWZpbmUgcG9ydEFQSUNfTFZUX1BFUkYgCQkJCSggKiggKCB2b2xhdGlsZSB1aW50MzJfdCAqICkgKCBjb25maWdBUElDX0JBU0UgKyAweDM0MFVMICkgKSApDQorI2RlZmluZSBwb3J0QVBJQ19MVlRfTElOVDAgCQkJCSggKiggKCB2b2xhdGlsZSB1aW50MzJfdCAqICkgKCBjb25maWdBUElDX0JBU0UgKyAweDM1MFVMICkgKSApDQorI2RlZmluZSBwb3J0QVBJQ19MVlRfTElOVDEgCQkJCSggKiggKCB2b2xhdGlsZSB1aW50MzJfdCAqICkgKCBjb25maWdBUElDX0JBU0UgKyAweDM2MFVMICkgKSApDQogDQogLyogRG9uJ3QgeWllbGQgaWYgaW5zaWRlIGEgY3JpdGljYWwgc2VjdGlvbiAtIGluc3RlYWQgaG9sZCB0aGUgeWllbGQgcGVuZGluZw0KLSAqIHNvIGl0IGlzIHBlcmZvcm1lZCB3aGVuIHRoZSBjcml0aWNhbCBzZWN0aW9uIGlzIGV4aXRlZC4gKi8NCi0gICAgI2RlZmluZSBwb3J0WUlFTEQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGV4dGVybiB2b2xhdGlsZSB1aW50MzJfdCB1bENyaXRpY2FsTmVzdGluZzsgIFwNCi0gICAgICAgIGV4dGVybiB2b2xhdGlsZSB1aW50MzJfdCB1bFBvcnRZaWVsZFBlbmRpbmc7IFwNCi0gICAgICAgIGlmKCB1bENyaXRpY2FsTmVzdGluZyAhPSAwICkgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICB1bFBvcnRZaWVsZFBlbmRpbmcgPSBwZFRSVUU7ICAgICAgICAgICAgIFwNCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICBfX2FzbSB2b2xhdGlsZSAoIHBvcnRZSUVMRF9JTlRFUlJVUFQgKTsgIFwNCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgfQ0KK3NvIGl0IGlzIHBlcmZvcm1lZCB3aGVuIHRoZSBjcml0aWNhbCBzZWN0aW9uIGlzIGV4aXRlZC4gKi8NCisjZGVmaW5lIHBvcnRZSUVMRCgpIAkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJXA0KK2V4dGVybiB2b2xhdGlsZSB1aW50MzJfdCB1bENyaXRpY2FsTmVzdGluZzsJCQlcDQorZXh0ZXJuIHZvbGF0aWxlIHVpbnQzMl90IHVsUG9ydFlpZWxkUGVuZGluZzsJCVwNCisJaWYoIHVsQ3JpdGljYWxOZXN0aW5nICE9IDAgKQkJCQkJXA0KKwl7CQkJCQkJCQkJCQkJXA0KKwkJdWxQb3J0WWllbGRQZW5kaW5nID0gcGRUUlVFOwkJCQlcDQorCX0JCQkJCQkJCQkJCQlcDQorCWVsc2UJCQkJCQkJCQkJCVwNCisJewkJCQkJCQkJCQkJCVwNCisJCV9fYXNtIHZvbGF0aWxlKCBwb3J0WUlFTERfSU5URVJSVVBUICk7CQlcDQorCX0JCQkJCQkJCQkJCQlcDQorfQ0KIA0KIC8qIENhbGxlZCBhdCB0aGUgZW5kIG9mIGFuIElTUiB0aGF0IGNhbiBjYXVzZSBhIGNvbnRleHQgc3dpdGNoIC0gcGVuZCBhIHlpZWxkIGlmDQotICogeFN3aXRoY1JlcXVpcmVkIGlzIG5vdCBmYWxzZS4gKi8NCi0gICAgI2RlZmluZSBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHhTd2l0Y2hSZXF1aXJlZCApIFwNCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGV4dGVybiB2b2xhdGlsZSB1aW50MzJfdCB1bFBvcnRZaWVsZFBlbmRpbmc7IFwNCi0gICAgICAgIGlmKCB4U3dpdGNoUmVxdWlyZWQgIT0gcGRGQUxTRSApICAgICAgICAgICAgIFwNCi0gICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICB1bFBvcnRZaWVsZFBlbmRpbmcgPSAxOyAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgfQ0KK3hTd2l0aGNSZXF1aXJlZCBpcyBub3QgZmFsc2UuICovDQorI2RlZmluZSBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHhTd2l0Y2hSZXF1aXJlZCApCVwNCit7CQkJCQkJCQkJCQkJCVwNCitleHRlcm4gdm9sYXRpbGUgdWludDMyX3QgdWxQb3J0WWllbGRQZW5kaW5nOwkJXA0KKwlpZiggeFN3aXRjaFJlcXVpcmVkICE9IHBkRkFMU0UgKQkJCQlcDQorCXsJCQkJCQkJCQkJCQlcDQorCQl1bFBvcnRZaWVsZFBlbmRpbmcgPSAxOyAJCQkJIAlcDQorCX0JCQkJCQkJCQkJCQlcDQorfQ0KIA0KIC8qIFNhbWUgYXMgcG9ydEVORF9TV0lUQ0hJTkdfSVNSKCkgLSB0YWtlIHlvdXIgcGljayB3aGljaCBuYW1lIHRvIHVzZS4gKi8NCi0gICAgI2RlZmluZSBwb3J0WUlFTERfRlJPTV9JU1IoIHggKSAgICBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHggKQ0KKyNkZWZpbmUgcG9ydFlJRUxEX0ZST01fSVNSKCB4ICkgcG9ydEVORF9TV0lUQ0hJTkdfSVNSKCB4ICkNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotKiBDcml0aWNhbCBzZWN0aW9uIGNvbnRyb2wNCi0qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorICogQ3JpdGljYWwgc2VjdGlvbiBjb250cm9sDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBDcml0aWNhbCBzZWN0aW9ucyBmb3IgdXNlIGluIGludGVycnVwdHMuICovDQotICAgICNkZWZpbmUgcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpICAgICAgICAgdWxQb3J0U2V0SW50ZXJydXB0TWFzaygpDQotICAgICNkZWZpbmUgcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCB4ICkgICAgdlBvcnRDbGVhckludGVycnVwdE1hc2soIHggKQ0KKyNkZWZpbmUgcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpCQl1bFBvcnRTZXRJbnRlcnJ1cHRNYXNrKCkNCisjZGVmaW5lIHBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUih4KQl2UG9ydENsZWFySW50ZXJydXB0TWFzayggeCApDQogDQotICAgIGV4dGVybiB2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCggdm9pZCApOw0KLSAgICBleHRlcm4gdm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApOw0KLSAgICBleHRlcm4gdWludDMyX3QgdWxQb3J0U2V0SW50ZXJydXB0TWFzayggdm9pZCApOw0KLSAgICBleHRlcm4gdm9pZCB2UG9ydENsZWFySW50ZXJydXB0TWFzayggdWludDMyX3QgdWxOZXdNYXNrVmFsdWUgKTsNCitleHRlcm4gdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApOw0KK2V4dGVybiB1aW50MzJfdCB1bFBvcnRTZXRJbnRlcnJ1cHRNYXNrKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdlBvcnRDbGVhckludGVycnVwdE1hc2soIHVpbnQzMl90IHVsTmV3TWFza1ZhbHVlICk7DQogDQogLyogVGhlc2UgbWFjcm9zIGRvIG5vdCBnbG9iYWxseSBkaXNhYmxlL2VuYWJsZSBpbnRlcnJ1cHRzLiAgVGhleSBkbyBtYXNrIG9mZg0KLSAqIGludGVycnVwdHMgdGhhdCBoYXZlIGEgcHJpb3JpdHkgYmVsb3cgY29uZmlnTUFYX0FQSV9DQUxMX0lOVEVSUlVQVF9QUklPUklUWS4gKi8NCi0gICAgI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKSAgICAgICAgdlBvcnRFbnRlckNyaXRpY2FsKCkNCi0gICAgI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpICAgICAgICAgdlBvcnRFeGl0Q3JpdGljYWwoKQ0KLSAgICAjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAgICBfX2FzbSB2b2xhdGlsZSAoICJjbGkiICkNCi0gICAgI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKSAgICAgX19hc20gdm9sYXRpbGUgKCAic3RpIiApDQoraW50ZXJydXB0cyB0aGF0IGhhdmUgYSBwcmlvcml0eSBiZWxvdyBjb25maWdNQVhfQVBJX0NBTExfSU5URVJSVVBUX1BSSU9SSVRZLiAqLw0KKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkJCXZQb3J0RW50ZXJDcml0aWNhbCgpDQorI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpCQkJdlBvcnRFeGl0Q3JpdGljYWwoKQ0KKyNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpCV9fYXNtIHZvbGF0aWxlKCAiY2xpIiApDQorI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKQkJX19hc20gdm9sYXRpbGUoICJzdGkiICkNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBUYXNrIGZ1bmN0aW9uIG1hY3JvcyBhcyBkZXNjcmliZWQgb24gdGhlIEZyZWVSVE9TLm9yZyBXRUIgc2l0ZS4gIFRoZXNlIGFyZQ0KLSAqIG5vdCByZXF1aXJlZCBmb3IgdGhpcyBwb3J0IGJ1dCBpbmNsdWRlZCBpbiBjYXNlIGNvbW1vbiBkZW1vIGNvZGUgdGhhdCB1c2VzIHRoZXNlDQotICogbWFjcm9zIGlzIHVzZWQuICovDQotICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KLSAgICAjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgICAgICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCitub3QgcmVxdWlyZWQgZm9yIHRoaXMgcG9ydCBidXQgaW5jbHVkZWQgaW4gY2FzZSBjb21tb24gZGVtbyBjb2RlIHRoYXQgdXNlcyB0aGVzZQ0KK21hY3JvcyBpcyB1c2VkLiAqLw0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkJdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKQl2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCiANCiAvKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWMgb3B0aW1pc2F0aW9ucy4gKi8NCi0gICAgI2lmIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiA9PSAxDQorI2lmIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiA9PSAxDQogDQotLyogU3RvcmUvY2xlYXIgdGhlIHJlYWR5IHByaW9yaXRpZXMgaW4gYSBiaXQgbWFwLiAqLw0KLSAgICAgICAgI2RlZmluZSBwb3J0R0VUX0hJR0hFU1RfUFJJT1JJVFkoIHV4VG9wUHJpb3JpdHksIHV4UmVhZHlQcmlvcml0aWVzICkgXA0KLSAgICBfX2FzbSB2b2xhdGlsZSAoICJic3IgJTEsICUwXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgIDogIj1yIiAoIHV4VG9wUHJpb3JpdHkgKSA6ICJybSIgKCB1eFJlYWR5UHJpb3JpdGllcyApIDogImNjIiApDQorCS8qIFN0b3JlL2NsZWFyIHRoZSByZWFkeSBwcmlvcml0aWVzIGluIGEgYml0IG1hcC4gKi8NCisJI2RlZmluZSBwb3J0R0VUX0hJR0hFU1RfUFJJT1JJVFkoIHV4VG9wUHJpb3JpdHksIHV4UmVhZHlQcmlvcml0aWVzICkJXA0KKwkJX19hc20gdm9sYXRpbGUoCSJic3IgJTEsICUwXG5cdCIgCQkJCQkJCQkJXA0KKwkJCQkJCToiPXIiKHV4VG9wUHJpb3JpdHkpIDogInJtIih1eFJlYWR5UHJpb3JpdGllcykgOiAiY2MiICkNCiANCi0gICAgICAgICNkZWZpbmUgcG9ydFJFQ09SRF9SRUFEWV9QUklPUklUWSggdXhQcmlvcml0eSwgdXhSZWFkeVByaW9yaXRpZXMgKSAgICAoIHV4UmVhZHlQcmlvcml0aWVzICkgfD0gKCAxVUwgPDwgKCB1eFByaW9yaXR5ICkgKQ0KLSAgICAgICAgI2RlZmluZSBwb3J0UkVTRVRfUkVBRFlfUFJJT1JJVFkoIHV4UHJpb3JpdHksIHV4UmVhZHlQcmlvcml0aWVzICkgICAgICggdXhSZWFkeVByaW9yaXRpZXMgKSAmPSB+KCAxVUwgPDwgKCB1eFByaW9yaXR5ICkgKQ0KKwkjZGVmaW5lIHBvcnRSRUNPUkRfUkVBRFlfUFJJT1JJVFkoIHV4UHJpb3JpdHksIHV4UmVhZHlQcmlvcml0aWVzICkgKCB1eFJlYWR5UHJpb3JpdGllcyApIHw9ICggMVVMIDw8ICggdXhQcmlvcml0eSApICkNCisJI2RlZmluZSBwb3J0UkVTRVRfUkVBRFlfUFJJT1JJVFkoIHV4UHJpb3JpdHksIHV4UmVhZHlQcmlvcml0aWVzICkgKCB1eFJlYWR5UHJpb3JpdGllcyApICY9IH4oIDFVTCA8PCAoIHV4UHJpb3JpdHkgKSApDQogDQotICAgICNlbmRpZiAvKiBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gKi8NCisjZW5kaWYgLyogY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OICovDQogDQotICAgICNkZWZpbmUgcG9ydE5PUCgpICAgIF9fYXNtIHZvbGF0aWxlICggIk5PUCIgKQ0KKyNkZWZpbmUgcG9ydE5PUCgpIF9fYXNtIHZvbGF0aWxlKCAiTk9QIiApDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLSogTWlzYw0KLSotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisgKiBNaXNjDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0gICAgI2RlZmluZSBwb3J0TlVNX1ZFQ1RPUlMgICAgIDI1Ng0KLSAgICAjZGVmaW5lIHBvcnRNQVhfUFJJT1JJVFkgICAgMTUNCi0gICAgdHlwZWRlZiB2b2lkICggKiBJU1JfSGFuZGxlcl90ICkgKCB2b2lkICk7DQorI2RlZmluZSBwb3J0TlVNX1ZFQ1RPUlMJCTI1Ng0KKyNkZWZpbmUgcG9ydE1BWF9QUklPUklUWQkxNQ0KK3R5cGVkZWYgdm9pZCAoICpJU1JfSGFuZGxlcl90ICkgKCB2b2lkICk7DQogDQogLyogQW55IHRhc2sgdGhhdCB1c2VzIHRoZSBmbG9hdGluZyBwb2ludCB1bml0IE1VU1QgY2FsbCB2UG9ydFRhc2tVc2VzRlBVKCkNCi0gKiBiZWZvcmUgYW55IGZsb2F0aW5nIHBvaW50IGluc3RydWN0aW9ucyBhcmUgZXhlY3V0ZWQuICovDQotICAgICNpZm5kZWYgY29uZmlnU1VQUE9SVF9GUFUNCi0gICAgICAgICNkZWZpbmUgY29uZmlnU1VQUE9SVF9GUFUgICAgMA0KLSAgICAjZW5kaWYNCitiZWZvcmUgYW55IGZsb2F0aW5nIHBvaW50IGluc3RydWN0aW9ucyBhcmUgZXhlY3V0ZWQuICovDQorI2lmbmRlZiBjb25maWdTVVBQT1JUX0ZQVQ0KKwkjZGVmaW5lIGNvbmZpZ1NVUFBPUlRfRlBVIDANCisjZW5kaWYNCiANCi0gICAgI2lmIGNvbmZpZ1NVUFBPUlRfRlBVID09IDENCi0gICAgICAgIHZvaWQgdlBvcnRUYXNrVXNlc0ZQVSggdm9pZCApOw0KLSAgICAgICAgI2RlZmluZSBwb3J0VEFTS19VU0VTX0ZMT0FUSU5HX1BPSU5UKCkgICAgdlBvcnRUYXNrVXNlc0ZQVSgpDQotICAgICNlbmRpZg0KKyNpZiBjb25maWdTVVBQT1JUX0ZQVSA9PSAxDQorCXZvaWQgdlBvcnRUYXNrVXNlc0ZQVSggdm9pZCApOw0KKwkjZGVmaW5lIHBvcnRUQVNLX1VTRVNfRkxPQVRJTkdfUE9JTlQoKSB2UG9ydFRhc2tVc2VzRlBVKCkNCisjZW5kaWYNCiANCiAvKiBTZWUgdGhlIGNvbW1lbnRzIHVuZGVyIHRoZSBjb25maWdVU0VfQ09NTU9OX0lOVEVSUlVQVF9FTlRSWV9QT0lOVCBkZWZpbml0aW9uDQotICogYmVsb3cuICovDQotICAgIEJhc2VUeXBlX3QgeFBvcnRSZWdpc3RlckNJbnRlcnJ1cHRIYW5kbGVyKCBJU1JfSGFuZGxlcl90IHB4SGFuZGxlciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVsVmVjdG9yTnVtYmVyICk7DQotICAgIEJhc2VUeXBlX3QgeFBvcnRJbnN0YWxsSW50ZXJydXB0SGFuZGxlciggSVNSX0hhbmRsZXJfdCBweEhhbmRsZXIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWxWZWN0b3JOdW1iZXIgKTsNCitiZWxvdy4gKi8NCitCYXNlVHlwZV90IHhQb3J0UmVnaXN0ZXJDSW50ZXJydXB0SGFuZGxlciggSVNSX0hhbmRsZXJfdCBweEhhbmRsZXIsIHVpbnQzMl90IHVsVmVjdG9yTnVtYmVyICk7DQorQmFzZVR5cGVfdCB4UG9ydEluc3RhbGxJbnRlcnJ1cHRIYW5kbGVyKCBJU1JfSGFuZGxlcl90IHB4SGFuZGxlciwgdWludDMyX3QgdWxWZWN0b3JOdW1iZXIgKTsNCiANCi0gICAgI2lmbmRlZiBjb25maWdBUElDX0JBU0UNCisjaWZuZGVmIGNvbmZpZ0FQSUNfQkFTRQ0KKwkvKiBjb25maWdBUElDX0JBU0VfQUREUkVTUyBzZXRzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIGxvY2FsIEFQSUMuICBJdCBjYW4NCisJYmUgb3ZlcnJpZGRlbiBpbiBGcmVlUlRPU0NvbmZpZy5oIHNob3VsZCBpdCBub3QgYmUgY29uc3RhbnQuICovDQorCSNkZWZpbmUgY29uZmlnQVBJQ19CQVNFCTB4RkVFMDAwMDBVTA0KKyNlbmRpZg0KIA0KLS8qIGNvbmZpZ0FQSUNfQkFTRV9BRERSRVNTIHNldHMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgbG9jYWwgQVBJQy4gIEl0IGNhbg0KLSAqIGJlIG92ZXJyaWRkZW4gaW4gRnJlZVJUT1NDb25maWcuaCBzaG91bGQgaXQgbm90IGJlIGNvbnN0YW50LiAqLw0KLSAgICAgICAgI2RlZmluZSBjb25maWdBUElDX0JBU0UgICAgMHhGRUUwMDAwMFVMDQotICAgICNlbmRpZg0KKyNpZm5kZWYgY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9ODQorCS8qIFRoZSBGcmVlUlRPUyBzY2hlZHVsaW5nIGFsZ29yaXRobSBzZWxlY3RzIHRoZSB0YXNrIHRoYXQgd2lsbCBlbnRlciB0aGUNCisJUnVubmluZyBzdGF0ZS4gIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiBpcyB1c2VkIHRvIHNldCBob3cNCisJdGhhdCBpcyBkb25lLg0KIA0KLSAgICAjaWZuZGVmIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTg0KKwlJZiBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gaXMgc2V0IHRvIDAgdGhlbiB0aGUgdGFzayB0bw0KKwllbnRlciB0aGUgUnVubmluZyBzdGF0ZSBpcyBzZWxlY3RlZCB1c2luZyBhIHBvcnRhYmxlIGFsZ29yaXRobSB3cml0dGVuIGluDQorCUMuICBUaGlzIGlzIHRoZSBzbG93ZXN0IG1ldGhvZCwgYnV0IHRoZSBhbGdvcml0aG0gZG9lcyBub3QgcmVzdHJpY3QgdGhlDQorCW1heGltdW0gbnVtYmVyIG9mIHVuaXF1ZSBSVE9TIHRhc2sgcHJpb3JpdGllcyB0aGF0IGFyZSBhdmFpbGFibGUuDQogDQotLyogVGhlIEZyZWVSVE9TIHNjaGVkdWxpbmcgYWxnb3JpdGhtIHNlbGVjdHMgdGhlIHRhc2sgdGhhdCB3aWxsIGVudGVyIHRoZQ0KLSAqIFJ1bm5pbmcgc3RhdGUuICBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gaXMgdXNlZCB0byBzZXQgaG93DQotICogdGhhdCBpcyBkb25lLg0KLSAqDQotICogSWYgY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OIGlzIHNldCB0byAwIHRoZW4gdGhlIHRhc2sgdG8NCi0gKiBlbnRlciB0aGUgUnVubmluZyBzdGF0ZSBpcyBzZWxlY3RlZCB1c2luZyBhIHBvcnRhYmxlIGFsZ29yaXRobSB3cml0dGVuIGluDQotICogQy4gIFRoaXMgaXMgdGhlIHNsb3dlc3QgbWV0aG9kLCBidXQgdGhlIGFsZ29yaXRobSBkb2VzIG5vdCByZXN0cmljdCB0aGUNCi0gKiBtYXhpbXVtIG51bWJlciBvZiB1bmlxdWUgUlRPUyB0YXNrIHByaW9yaXRpZXMgdGhhdCBhcmUgYXZhaWxhYmxlLg0KLSAqDQotICogSWYgY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OIGlzIHNldCB0byAxIHRoZW4gdGhlIHRhc2sgdG8NCi0gKiBlbnRlciB0aGUgUnVubmluZyBzdGF0ZSBpcyBzZWxlY3RlZCB1c2luZyBhIHNpbmdsZSBhc3NlbWJseSBpbnN0cnVjdGlvbi4NCi0gKiBUaGlzIGlzIHRoZSBmYXN0ZXN0IG1ldGhvZCwgYnV0IHJlc3RyaWN0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgdW5pcXVlIFJUT1MNCi0gKiB0YXNrIHByaW9yaXRpZXMgdG8gMzIgKHRoZSBzYW1lIHRhc2sgcHJpb3JpdHkgY2FuIGJlIGFzc2lnbmVkIHRvIGFueSBudW1iZXINCi0gKiBvZiBSVE9TCXRhc2tzKS4gKi8NCi0gICAgICAgICN3YXJuaW5nIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiB3YXMgbm90IGRlZmluZWQgaW4gRnJlZVJUT1NDb25maWcuaCBhbmQgaGFzIGJlZW4gZGVmYXVsdGVkIHRvIDENCi0gICAgICAgICNkZWZpbmUgY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OICAgIDENCi0gICAgI2VuZGlmDQorCUlmIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiBpcyBzZXQgdG8gMSB0aGVuIHRoZSB0YXNrIHRvDQorCWVudGVyIHRoZSBSdW5uaW5nIHN0YXRlIGlzIHNlbGVjdGVkIHVzaW5nIGEgc2luZ2xlIGFzc2VtYmx5IGluc3RydWN0aW9uLg0KKwlUaGlzIGlzIHRoZSBmYXN0ZXN0IG1ldGhvZCwgYnV0IHJlc3RyaWN0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgdW5pcXVlIFJUT1MNCisJdGFzayBwcmlvcml0aWVzIHRvIDMyICh0aGUgc2FtZSB0YXNrIHByaW9yaXR5IGNhbiBiZSBhc3NpZ25lZCB0byBhbnkgbnVtYmVyDQorCW9mIFJUT1MJdGFza3MpLiAqLw0KKwkjd2FybmluZyBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gd2FzIG5vdCBkZWZpbmVkIGluIEZyZWVSVE9TQ29uZmlnLmggYW5kIGhhcyBiZWVuIGRlZmF1bHRlZCB0byAxDQorCSNkZWZpbmUgY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OIDENCisjZW5kaWYNCiANCi0gICAgI2lmbmRlZiBjb25maWdVU0VfQ09NTU9OX0lOVEVSUlVQVF9FTlRSWV9QT0lOVA0KKyNpZm5kZWYgY29uZmlnVVNFX0NPTU1PTl9JTlRFUlJVUFRfRU5UUllfUE9JTlQNCisJLyogVGhlcmUgYXJlIHR3byB3YXlzIG9mIGltcGxlbWVudGluZyBpbnRlcnJ1cHQgaGFuZGxlcnM6DQogDQotLyogVGhlcmUgYXJlIHR3byB3YXlzIG9mIGltcGxlbWVudGluZyBpbnRlcnJ1cHQgaGFuZGxlcnM6DQotICoNCi0gKiAgMSkgQXMgc3RhbmRhcmQgQyBmdW5jdGlvbnMgLQ0KLSAqDQotICogIFRoaXMgbWV0aG9kIGNhbiBvbmx5IGJlIHVzZWQgaWYgY29uZmlnVVNFX0NPTU1PTl9JTlRFUlJVUFRfRU5UUllfUE9JTlQNCi0gKiAgaXMgc2V0IHRvIDEuICBUaGUgQyBmdW5jdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcNCi0gKiAgeFBvcnRSZWdpc3RlckNJbnRlcnJ1cHRIYW5kbGVyKCkuDQotICoNCi0gKiAgVGhpcyBpcyB0aGUgc2ltcGxlc3Qgb2YgdGhlIHR3byBtZXRob2RzIGJ1dCBpbmN1cnMgYSBzbGlnaHRseSBsb25nZXINCi0gKiAgaW50ZXJydXB0IGVudHJ5IHRpbWUuDQotICoNCi0gKiAgMikgQnkgdXNpbmcgYW4gYXNzZW1ibHkgc3R1YiB0aGF0IHdyYXBzIHRoZSBoYW5kbGVyIGluIHRoZSBGcmVlUlRPUw0KLSAqICAgICBwb3J0RlJFRVJUT1NfSU5URVJSVVBUX0VOVFJZIGFuZCBwb3J0RlJFRVJUT1NfSU5URVJSVVBUX0VYSVQgbWFjcm9zLg0KLSAqDQotICogIFRoaXMgbWV0aG9kIGNhbiBhbHdheXMgYmUgdXNlZC4gIEl0IGlzIHNsaWdodGx5IG1vcmUgY29tcGxleCB0aGFuDQotICogIG1ldGhvZCAxIGJ1dCBiZW5lZml0cyBmcm9tIGEgZmFzdGVyIGludGVycnVwdCBlbnRyeSB0aW1lLiAqLw0KLSAgICAgICAgI3dhcm5pbmcgY29uZmlnVVNFX0NPTU1PTl9JTlRFUlJVUFRfRU5UUllfUE9JTlQgd2FzIG5vdCBkZWZpbmVkIGluIEZyZWVSVE9TQ29uZmlnLmggYW5kIGhhcyBiZWVuIGRlZmF1bHRlZCB0byAxLg0KLSAgICAgICAgI2RlZmluZSBjb25maWdVU0VfQ09NTU9OX0lOVEVSUlVQVF9FTlRSWV9QT0lOVCAgICAxDQotICAgICNlbmRpZg0KKwkJMSkgQXMgc3RhbmRhcmQgQyBmdW5jdGlvbnMgLQ0KIA0KLSAgICAjaWZuZGVmIGNvbmZpZ0lTUl9TVEFDS19TSVpFDQorCQlUaGlzIG1ldGhvZCBjYW4gb25seSBiZSB1c2VkIGlmIGNvbmZpZ1VTRV9DT01NT05fSU5URVJSVVBUX0VOVFJZX1BPSU5UDQorCQlpcyBzZXQgdG8gMS4gIFRoZSBDIGZ1bmN0aW9uIGlzIGluc3RhbGxlZCB1c2luZw0KKwkJeFBvcnRSZWdpc3RlckNJbnRlcnJ1cHRIYW5kbGVyKCkuDQogDQotLyogSW50ZXJydXB0IGVudHJ5IGNvZGUgd2lsbCBzd2l0Y2ggdGhlIHN0YWNrIGluIHVzZSB0byBhIGRlZGljYXRlZCBzeXN0ZW0NCi0gKiBzdGFjay4NCi0gKg0KLSAqIGNvbmZpZ0lTUl9TVEFDS19TSVpFIGRlZmluZXMgdGhlIG51bWJlciBvZiAzMi1iaXQgdmFsdWVzIHRoYXQgY2FuIGJlIHN0b3JlZA0KLSAqIG9uIHRoZSBzeXN0ZW0gc3RhY2ssIGFuZCBtdXN0IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIGEgcG90ZW50aWFsbHkgbmVzdGVkDQotICogaW50ZXJydXB0IHN0YWNrIGZyYW1lLiAqLw0KKwkJVGhpcyBpcyB0aGUgc2ltcGxlc3Qgb2YgdGhlIHR3byBtZXRob2RzIGJ1dCBpbmN1cnMgYSBzbGlnaHRseSBsb25nZXINCisJCWludGVycnVwdCBlbnRyeSB0aW1lLg0KIA0KLSAgICAgICAgI2Vycm9yIGNvbmZpZ0lTUl9TVEFDS19TSVpFIHdhcyBub3QgZGVmaW5lZCBpbiBGcmVlUlRPU0NvbmZpZy5oLg0KLSAgICAjZW5kaWYNCisJCTIpIEJ5IHVzaW5nIGFuIGFzc2VtYmx5IHN0dWIgdGhhdCB3cmFwcyB0aGUgaGFuZGxlciBpbiB0aGUgRnJlZVJUT1MNCisJCSAgIHBvcnRGUkVFUlRPU19JTlRFUlJVUFRfRU5UUlkgYW5kIHBvcnRGUkVFUlRPU19JTlRFUlJVUFRfRVhJVCBtYWNyb3MuDQogDQotICAgICNpZm5kZWYgY29uZmlnTUFYX0FQSV9DQUxMX0lOVEVSUlVQVF9QUklPUklUWQ0KKwkJVGhpcyBtZXRob2QgY2FuIGFsd2F5cyBiZSB1c2VkLiAgSXQgaXMgc2xpZ2h0bHkgbW9yZSBjb21wbGV4IHRoYW4NCisJCW1ldGhvZCAxIGJ1dCBiZW5lZml0cyBmcm9tIGEgZmFzdGVyIGludGVycnVwdCBlbnRyeSB0aW1lLiAqLw0KKwkjd2FybmluZyBjb25maWdVU0VfQ09NTU9OX0lOVEVSUlVQVF9FTlRSWV9QT0lOVCB3YXMgbm90IGRlZmluZWQgaW4gRnJlZVJUT1NDb25maWcuaCBhbmQgaGFzIGJlZW4gZGVmYXVsdGVkIHRvIDEuDQorCSNkZWZpbmUgY29uZmlnVVNFX0NPTU1PTl9JTlRFUlJVUFRfRU5UUllfUE9JTlQJMQ0KKyNlbmRpZg0KIA0KLS8qIEludGVycnVwdCBzYWZlIEZyZWVSVE9TIGZ1bmN0aW9ucyAodGhvc2UgdGhhdCBlbmQgaW4gIkZyb21JU1IiIG11c3Qgbm90DQotICogYmUgY2FsbGVkIGZyb20gYW4gaW50ZXJydXB0IHRoYXQgaGFzIGEgcHJpb3JpdHkgYWJvdmUgdGhhdCBzZXQgYnkNCi0gKiBjb25maWdNQVhfQVBJX0NBTExfSU5URVJSVVBUX1BSSU9SSVRZLiAgKi8NCi0gICAgICAgICN3YXJuaW5nIGNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgd2FzIG5vdCBkZWZpbmVkIGluIEZyZWVSVE9TQ29uZmlnLmggYW5kIGhhcyBiZWVuIGRlZmF1bHRlZCB0byAxMA0KLSAgICAgICAgI2RlZmluZSBjb25maWdNQVhfQVBJX0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICAgIDEwDQotICAgICNlbmRpZg0KKyNpZm5kZWYgY29uZmlnSVNSX1NUQUNLX1NJWkUNCisJLyogSW50ZXJydXB0IGVudHJ5IGNvZGUgd2lsbCBzd2l0Y2ggdGhlIHN0YWNrIGluIHVzZSB0byBhIGRlZGljYXRlZCBzeXN0ZW0NCisJc3RhY2suDQogDQotICAgICNpZm5kZWYgY29uZmlnU1VQUE9SVF9GUFUNCi0gICAgICAgICN3YXJuaW5nIGNvbmZpZ1NVUFBPUlRfRlBVIHdhcyBub3QgZGVmaW5lZCBpbiBGcmVlUlRPU0NvbmZpZy5oIGFuZCBoYXMgYmVlbiBkZWZhdWx0ZWQgdG8gMA0KLSAgICAgICAgI2RlZmluZSBjb25maWdTVVBQT1JUX0ZQVSAgICAwDQotICAgICNlbmRpZg0KKwljb25maWdJU1JfU1RBQ0tfU0laRSBkZWZpbmVzIHRoZSBudW1iZXIgb2YgMzItYml0IHZhbHVlcyB0aGF0IGNhbiBiZSBzdG9yZWQNCisJb24gdGhlIHN5c3RlbSBzdGFjaywgYW5kIG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYSBwb3RlbnRpYWxseSBuZXN0ZWQNCisJaW50ZXJydXB0IHN0YWNrIGZyYW1lLiAqLw0KKw0KKwkjZXJyb3IgY29uZmlnSVNSX1NUQUNLX1NJWkUgd2FzIG5vdCBkZWZpbmVkIGluIEZyZWVSVE9TQ29uZmlnLmguDQorI2VuZGlmDQorDQorI2lmbmRlZiBjb25maWdNQVhfQVBJX0NBTExfSU5URVJSVVBUX1BSSU9SSVRZDQorCS8qIEludGVycnVwdCBzYWZlIEZyZWVSVE9TIGZ1bmN0aW9ucyAodGhvc2UgdGhhdCBlbmQgaW4gIkZyb21JU1IiIG11c3Qgbm90DQorCWJlIGNhbGxlZCBmcm9tIGFuIGludGVycnVwdCB0aGF0IGhhcyBhIHByaW9yaXR5IGFib3ZlIHRoYXQgc2V0IGJ5DQorCWNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkuICAqLw0KKwkjd2FybmluZyBjb25maWdNQVhfQVBJX0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIHdhcyBub3QgZGVmaW5lZCBpbiBGcmVlUlRPU0NvbmZpZy5oIGFuZCBoYXMgYmVlbiBkZWZhdWx0ZWQgdG8gMTANCisJI2RlZmluZSBjb25maWdNQVhfQVBJX0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIDEwDQorI2VuZGlmDQorDQorI2lmbmRlZiBjb25maWdTVVBQT1JUX0ZQVQ0KKwkjd2FybmluZyBjb25maWdTVVBQT1JUX0ZQVSB3YXMgbm90IGRlZmluZWQgaW4gRnJlZVJUT1NDb25maWcuaCBhbmQgaGFzIGJlZW4gZGVmYXVsdGVkIHRvIDANCisJI2RlZmluZSBjb25maWdTVVBQT1JUX0ZQVSAwDQorI2VuZGlmDQogDQogLyogVGhlIHZhbHVlIHdyaXR0ZW4gdG8gdGhlIHRhc2sgcHJpb3JpdHkgcmVnaXN0ZXIgdG8gcmFpc2UgdGhlIGludGVycnVwdCBtYXNrDQotICogdG8gdGhlIG1heGltdW0gZnJvbSB3aGljaCBGcmVlUlRPUyBBUEkgY2FsbHMgY2FuIGJlIG1hZGUuICovDQotICAgICNkZWZpbmUgcG9ydEFQSUNfUFJJT1JJVFlfU0hJRlQgICAgICAgICggNFVMICkNCi0gICAgI2RlZmluZSBwb3J0QVBJQ19NQVhfU1VCX1BSSU9SSVRZICAgICAgKCAweDBmVUwgKQ0KLSAgICAjZGVmaW5lIHBvcnRNQVhfQVBJX0NBTExfUFJJT1JJVFkgICAgICAoICggY29uZmlnTUFYX0FQSV9DQUxMX0lOVEVSUlVQVF9QUklPUklUWSA8PCBwb3J0QVBJQ19QUklPUklUWV9TSElGVCApIHwgcG9ydEFQSUNfTUFYX1NVQl9QUklPUklUWSApDQordG8gdGhlIG1heGltdW0gZnJvbSB3aGljaCBGcmVlUlRPUyBBUEkgY2FsbHMgY2FuIGJlIG1hZGUuICovDQorI2RlZmluZSBwb3J0QVBJQ19QUklPUklUWV9TSElGVAkJKCA0VUwgKQ0KKyNkZWZpbmUgcG9ydEFQSUNfTUFYX1NVQl9QUklPUklUWQkoIDB4MGZVTCApDQorI2RlZmluZSBwb3J0TUFYX0FQSV9DQUxMX1BSSU9SSVRZCQkoICggY29uZmlnTUFYX0FQSV9DQUxMX0lOVEVSUlVQVF9QUklPUklUWSA8PCBwb3J0QVBJQ19QUklPUklUWV9TSElGVCApIHwgcG9ydEFQSUNfTUFYX1NVQl9QUklPUklUWSApDQogDQogLyogQXNzZXJ0cyBpZiBpbnRlcnJ1cHQgc2FmZSBGcmVlUlRPUyBmdW5jdGlvbnMgYXJlIGNhbGxlZCBmcm9tIGEgcHJpb3JpdHkNCi0gKiBhYm92ZSB0aGUgbWF4IHN5c3RlbSBjYWxsIGludGVycnVwdCBwcmlvcml0eS4gKi8NCi0gICAgI2RlZmluZSBwb3J0QVBJQ19QUk9DRVNTT1JfUFJJT1JJVFkgICAgKCAqKCAoIHZvbGF0aWxlIHVpbnQzMl90ICogKSAoIGNvbmZpZ0FQSUNfQkFTRSArIDB4QTBVTCApICkgKQ0KLSAgICAjZGVmaW5lIHBvcnRBU1NFUlRfSUZfSU5URVJSVVBUX1BSSU9SSVRZX0lOVkFMSUQoKSAgICBjb25maWdBU1NFUlQoICggcG9ydEFQSUNfUFJPQ0VTU09SX1BSSU9SSVRZICkgPD0gKCBwb3J0TUFYX0FQSV9DQUxMX1BSSU9SSVRZICkgKQ0KK2Fib3ZlIHRoZSBtYXggc3lzdGVtIGNhbGwgaW50ZXJydXB0IHByaW9yaXR5LiAqLw0KKyNkZWZpbmUgcG9ydEFQSUNfUFJPQ0VTU09SX1BSSU9SSVRZCSggKiggKCB2b2xhdGlsZSB1aW50MzJfdCAqICkgKCBjb25maWdBUElDX0JBU0UgKyAweEEwVUwgICkgKSApDQorI2RlZmluZSBwb3J0QVNTRVJUX0lGX0lOVEVSUlVQVF9QUklPUklUWV9JTlZBTElEKCkgY29uZmlnQVNTRVJUKCAoIHBvcnRBUElDX1BST0NFU1NPUl9QUklPUklUWSApIDw9ICggcG9ydE1BWF9BUElfQ0FMTF9QUklPUklUWSApICkNCiANCi0gICAgI2lmZGVmIF9fY3BsdXNwbHVzDQotICAgICAgICB9IC8qIGV4dGVybiBDICovDQotICAgICNlbmRpZg0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KKwl9IC8qIGV4dGVybiBDICovDQorI2VuZGlmDQogDQogI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvR0NDL01DRjUyMzUvcG9ydC5jIGIvcG9ydGFibGUvR0NDL01DRjUyMzUvcG9ydC5jCmluZGV4IDU4YjI1NjkuLjA5MmVhNTEgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0dDQy9NQ0Y1MjM1L3BvcnQuYworKysgYi9wb3J0YWJsZS9HQ0MvTUNGNTIzNS9wb3J0LmMKQEAgLTEsNTUgKzEsNTUgQEAKIC8qDQotICogIEZyZWVSVE9TIFY0LjEuMSAtIENvcHlyaWdodCAoQykgMjAwMy0yMDA2IFJpY2hhcmQgQmFycnkuDQotICogIE1DRjUyMzUgUG9ydCAtIENvcHlyaWdodCAoQykgMjAwNiBDaHJpc3RpYW4gV2FsdGVyLg0KLSAqDQotICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQotICoNCi0gKiAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQ0KLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlKiogYXMgcHVibGlzaGVkIGJ5DQotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yDQotICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQotICoNCi0gKiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KLSAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KLSAqDQotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQotICogIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQ0KLSAqDQotICogIEEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCBjYW4gYmUgYXBwbGllZCBzaG91bGQgeW91IHdpc2ggdG8gZGlzdHJpYnV0ZQ0KLSAqICBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUywgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvIHByb3ZpZGUNCi0gKiAgdGhlIHNvdXJjZSBjb2RlIGZvciBhbnkgcHJvcHJpZXRhcnkgY29tcG9uZW50cy4gIFNlZSB0aGUgbGljZW5zaW5nIHNlY3Rpb24NCi0gKiAgb2YgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgZm9yIGZ1bGwgZGV0YWlscyBvZiBob3cgYW5kIHdoZW4gdGhlIGV4Y2VwdGlvbg0KLSAqICBjYW4gYmUgYXBwbGllZC4NCi0gKg0KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KLSAqIEdldCB0aGUgRnJlZVJUT1MgZUJvb2shICBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiAgICAgICoNCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQotICogVGhpcyBpcyBhIGNvbmNpc2UsIHN0ZXAgYnkgc3RlcCwgJ2hhbmRzIG9uJyBndWlkZSB0aGF0IGRlc2NyaWJlcyBib3RoICAgKg0KLSAqIGdlbmVyYWwgbXVsdGl0YXNraW5nIGNvbmNlcHRzIGFuZCBGcmVlUlRPUyBzcGVjaWZpY3MuIEl0IHByZXNlbnRzIGFuZCAgICoNCi0gKiBleHBsYWlucyBudW1lcm91cyBleGFtcGxlcyB0aGF0IGFyZSB3cml0dGVuIHVzaW5nIHRoZSBGcmVlUlRPUyBBUEkuICAgICAqDQotICogRnVsbCBzb3VyY2UgY29kZSBmb3IgYWxsIHRoZSBleGFtcGxlcyBpcyBwcm92aWRlZCBpbiBhbiBhY2NvbXBhbnlpbmcgICAgKg0KLSAqIC56aXAgZmlsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKg0KLSAqICBQbGVhc2UgZW5zdXJlIHRvIHJlYWQgdGhlIGNvbmZpZ3VyYXRpb24gYW5kIHJlbGV2YW50IHBvcnQgc2VjdGlvbnMgb2YgdGhlDQotICogIG9ubGluZSBkb2N1bWVudGF0aW9uLg0KLSAqDQotICogIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgbGF0ZXN0IGluZm9ybWF0aW9uLCBsaWNlbnNlIGFuZA0KLSAqICBjb250YWN0IGRldGFpbHMuDQotICoNCi0gKiAgaHR0cDovL3d3dy5TYWZlUlRPUy5jb20gLSBBIHZlcnNpb24gdGhhdCBpcyBjZXJ0aWZpZWQgZm9yIHVzZSBpbiBzYWZldHkNCi0gKiAgY3JpdGljYWwgc3lzdGVtcy4NCi0gKg0KLSAqICBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbSAtIENvbW1lcmNpYWwgc3VwcG9ydCwgZGV2ZWxvcG1lbnQsIHBvcnRpbmcsDQotICogIGxpY2Vuc2luZyBhbmQgdHJhaW5pbmcgc2VydmljZXMuDQotICovDQorICAgIEZyZWVSVE9TIFY0LjEuMSAtIENvcHlyaWdodCAoQykgMjAwMy0yMDA2IFJpY2hhcmQgQmFycnkuDQorICAgIE1DRjUyMzUgUG9ydCAtIENvcHlyaWdodCAoQykgMjAwNiBDaHJpc3RpYW4gV2FsdGVyLg0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UqKiBhcyBwdWJsaXNoZWQgYnkNCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3INCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KKw0KKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KKyAgICBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQorICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0ENCisNCisgICAgQSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMIGNhbiBiZSBhcHBsaWVkIHNob3VsZCB5b3Ugd2lzaCB0byBkaXN0cmlidXRlDQorICAgIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TLCB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8gcHJvdmlkZQ0KKyAgICB0aGUgc291cmNlIGNvZGUgZm9yIGFueSBwcm9wcmlldGFyeSBjb21wb25lbnRzLiAgU2VlIHRoZSBsaWNlbnNpbmcgc2VjdGlvbg0KKyAgICBvZiBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyBmb3IgZnVsbCBkZXRhaWxzIG9mIGhvdyBhbmQgd2hlbiB0aGUgZXhjZXB0aW9uDQorICAgIGNhbiBiZSBhcHBsaWVkLg0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqIEdldCB0aGUgRnJlZVJUT1MgZUJvb2shICBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiAgICAgICoNCisJKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorCSogVGhpcyBpcyBhIGNvbmNpc2UsIHN0ZXAgYnkgc3RlcCwgJ2hhbmRzIG9uJyBndWlkZSB0aGF0IGRlc2NyaWJlcyBib3RoICAgKg0KKwkqIGdlbmVyYWwgbXVsdGl0YXNraW5nIGNvbmNlcHRzIGFuZCBGcmVlUlRPUyBzcGVjaWZpY3MuIEl0IHByZXNlbnRzIGFuZCAgICoNCisJKiBleHBsYWlucyBudW1lcm91cyBleGFtcGxlcyB0aGF0IGFyZSB3cml0dGVuIHVzaW5nIHRoZSBGcmVlUlRPUyBBUEkuICAgICAqDQorCSogRnVsbCBzb3VyY2UgY29kZSBmb3IgYWxsIHRoZSBleGFtcGxlcyBpcyBwcm92aWRlZCBpbiBhbiBhY2NvbXBhbnlpbmcgICAgKg0KKwkqIC56aXAgZmlsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisJUGxlYXNlIGVuc3VyZSB0byByZWFkIHRoZSBjb25maWd1cmF0aW9uIGFuZCByZWxldmFudCBwb3J0IHNlY3Rpb25zIG9mIHRoZQ0KKwlvbmxpbmUgZG9jdW1lbnRhdGlvbi4NCisNCisJaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCBsYXRlc3QgaW5mb3JtYXRpb24sIGxpY2Vuc2UgYW5kIA0KKwljb250YWN0IGRldGFpbHMuDQorDQorCWh0dHA6Ly93d3cuU2FmZVJUT1MuY29tIC0gQSB2ZXJzaW9uIHRoYXQgaXMgY2VydGlmaWVkIGZvciB1c2UgaW4gc2FmZXR5IA0KKwljcml0aWNhbCBzeXN0ZW1zLg0KKw0KKwlodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbSAtIENvbW1lcmNpYWwgc3VwcG9ydCwgZGV2ZWxvcG1lbnQsIHBvcnRpbmcsIA0KKwlsaWNlbnNpbmcgYW5kIHRyYWluaW5nIHNlcnZpY2VzLg0KKyovDQogDQogI2luY2x1ZGUgPHN0ZGxpYi5oPg0KIA0KQEAgLTU4LDUyICs1OCw1MiBAQAogI2luY2x1ZGUgInRhc2suaCINCiANCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi10eXBlZGVmIHZvbGF0aWxlIHVpbnQzMl90ICAgdnVpbnQzMjsNCi10eXBlZGVmIHZvbGF0aWxlIHVpbnQxNl90ICAgdnVpbnQxNjsNCi10eXBlZGVmIHZvbGF0aWxlIHVpbnQ4X3QgICAgdnVpbnQ4Ow0KK3R5cGVkZWYgdm9sYXRpbGUgdWludDMyX3QgdnVpbnQzMjsNCit0eXBlZGVmIHZvbGF0aWxlIHVpbnQxNl90IHZ1aW50MTY7DQordHlwZWRlZiB2b2xhdGlsZSB1aW50OF90IHZ1aW50ODsNCiANCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGVmaW5lcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0jZGVmaW5lIHBvcnRWRUNUT1JfVEFCTEUgICAgICAgICAgICAgX19SQU1WRUMNCi0jZGVmaW5lIHBvcnRWRUNUT1JfU1lTQ0FMTCAgICAgICAgICAgKCAzMiArIHBvcnRUUkFQX1lJRUxEICkNCi0jZGVmaW5lIHBvcnRWRUNUT1JfVElNRVIgICAgICAgICAgICAgKCA2NCArIDM2ICkNCisjZGVmaW5lIHBvcnRWRUNUT1JfVEFCTEUgICAgICAgICAgICAgICAgX19SQU1WRUMNCisjZGVmaW5lIHBvcnRWRUNUT1JfU1lTQ0FMTCAgICAgICAgICAgICAgKCAzMiArIHBvcnRUUkFQX1lJRUxEICkNCisjZGVmaW5lIHBvcnRWRUNUT1JfVElNRVIgICAgICAgICAgICAgICAgKCA2NCArIDM2ICkNCiANCi0jZGVmaW5lIE1DRl9QSVRfUFJFU0NBTEVSICAgICAgICAgICAgNTEyVUwNCi0jZGVmaW5lIE1DRl9QSVRfVElNRVJfVElDS1MgICAgICAgICAgKCBGU1lTXzIgLyBNQ0ZfUElUX1BSRVNDQUxFUiApDQotI2RlZmluZSBNQ0ZfUElUX01PRFVMVVNfUkVHSVNURVIoIGZyZXEgKSAgICAoIE1DRl9QSVRfVElNRVJfVElDS1MgLyAoIGZyZXEgKSAtIDFVTCApDQorI2RlZmluZSBNQ0ZfUElUX1BSRVNDQUxFUiAgICAgICAgICAgICAgIDUxMlVMDQorI2RlZmluZSBNQ0ZfUElUX1RJTUVSX1RJQ0tTICAgICAgICAgICAgICggRlNZU18yIC8gTUNGX1BJVF9QUkVTQ0FMRVIgKQ0KKyNkZWZpbmUgTUNGX1BJVF9NT0RVTFVTX1JFR0lTVEVSKGZyZXEpICAoIE1DRl9QSVRfVElNRVJfVElDS1MgLyAoIGZyZXEgKSAtIDFVTCkNCiANCi0jZGVmaW5lIE1DRl9QSVRfUE1SMCAgICAgICAgICAgICAgICAgKCAqKCB2dWludDE2ICogKSAoIHZvaWQgKiApICggJl9fSVBTQkFSWyAweDE1MDAwMiBdICkgKQ0KLSNkZWZpbmUgTUNGX1BJVF9QQ1NSMCAgICAgICAgICAgICAgICAoICooIHZ1aW50MTYgKiApICggdm9pZCAqICkgKCAmX19JUFNCQVJbIDB4MTUwMDAwIF0gKSApDQotI2RlZmluZSBNQ0ZfUElUX1BDU1JfUFJFKCB4ICkgICAgKCAoICggeCApICYgMHgwMDBGICkgPDwgOCApDQotI2RlZmluZSBNQ0ZfUElUX1BDU1JfRU4gICAgICAgICAgICAgICggMHgwMDAxICkNCi0jZGVmaW5lIE1DRl9QSVRfUENTUl9STEQgICAgICAgICAgICAgKCAweDAwMDIgKQ0KLSNkZWZpbmUgTUNGX1BJVF9QQ1NSX1BJRiAgICAgICAgICAgICAoIDB4MDAwNCApDQotI2RlZmluZSBNQ0ZfUElUX1BDU1JfUElFICAgICAgICAgICAgICggMHgwMDA4ICkNCi0jZGVmaW5lIE1DRl9QSVRfUENTUl9PVlcgICAgICAgICAgICAgKCAweDAwMTAgKQ0KLSNkZWZpbmUgTUNGX0lOVEMwX0lDUjM2ICAgICAgICAgICAgICAoICooIHZ1aW50OCAqICkgKCB2b2lkICogKSAoICZfX0lQU0JBUlsgMHgwMDBDNjQgXSApICkNCi0jZGVmaW5lIE1DRl9JTlRDMF9JTVJIICAgICAgICAgICAgICAgKCAqKCB2dWludDMyICogKSAoIHZvaWQgKiApICggJl9fSVBTQkFSWyAweDAwMEMwOCBdICkgKQ0KLSNkZWZpbmUgTUNGX0lOVEMwX0lNUkhfSU5UX01BU0szNiAgICAoIDB4MDAwMDAwMTAgKQ0KLSNkZWZpbmUgTUNGX0lOVEMwX0lNUkhfTUFTS0FMTCAgICAgICAoIDB4MDAwMDAwMDEgKQ0KLSNkZWZpbmUgTUNGX0lOVEMwX0lDUm5fSVAoIHggKSAgICAoICggKCB4ICkgJiAweDA3ICkgPDwgMCApDQotI2RlZmluZSBNQ0ZfSU5UQzBfSUNSbl9JTCggeCApICAgICggKCAoIHggKSAmIDB4MDcgKSA8PCAzICkNCisjZGVmaW5lIE1DRl9QSVRfUE1SMCAgICAgICAgICAgICAgICAgICAgKCAqKCB2dWludDE2ICogKSggdm9pZCAqICkoICZfX0lQU0JBUlsgMHgxNTAwMDIgXSApICkNCisjZGVmaW5lIE1DRl9QSVRfUENTUjAgICAgICAgICAgICAgICAgICAgKCAqKCB2dWludDE2ICogKSggdm9pZCAqICkoICZfX0lQU0JBUlsgMHgxNTAwMDAgXSApICkNCisjZGVmaW5lIE1DRl9QSVRfUENTUl9QUkUoeCkgICAgICAgICAgICAgKCAoICggeCApICYgMHgwMDBGICkgPDwgOCApDQorI2RlZmluZSBNQ0ZfUElUX1BDU1JfRU4gICAgICAgICAgICAgICAgICggMHgwMDAxICkNCisjZGVmaW5lIE1DRl9QSVRfUENTUl9STEQgICAgICAgICAgICAgICAgKCAweDAwMDIgKQ0KKyNkZWZpbmUgTUNGX1BJVF9QQ1NSX1BJRiAgICAgICAgICAgICAgICAoIDB4MDAwNCApDQorI2RlZmluZSBNQ0ZfUElUX1BDU1JfUElFICAgICAgICAgICAgICAgICggMHgwMDA4ICkNCisjZGVmaW5lIE1DRl9QSVRfUENTUl9PVlcgICAgICAgICAgICAgICAgKCAweDAwMTAgKQ0KKyNkZWZpbmUgTUNGX0lOVEMwX0lDUjM2ICAgICAgICAgICAgICAgICAoICooIHZ1aW50OCAqICkoIHZvaWQgKiApKCAmX19JUFNCQVJbIDB4MDAwQzY0IF0gKSApDQorI2RlZmluZSBNQ0ZfSU5UQzBfSU1SSCAgICAgICAgICAgICAgICAgICggKiggdnVpbnQzMiAqICkoIHZvaWQgKiApKCAmX19JUFNCQVJbIDB4MDAwQzA4IF0gKSApDQorI2RlZmluZSBNQ0ZfSU5UQzBfSU1SSF9JTlRfTUFTSzM2ICAgICAgICggMHgwMDAwMDAxMCApDQorI2RlZmluZSBNQ0ZfSU5UQzBfSU1SSF9NQVNLQUxMICAgICAgICAgICggMHgwMDAwMDAwMSApDQorI2RlZmluZSBNQ0ZfSU5UQzBfSUNSbl9JUCh4KSAgICAgICAgICAgICggKCAoIHggKSAmIDB4MDcgKSA8PCAwICkNCisjZGVmaW5lIE1DRl9JTlRDMF9JQ1JuX0lMKHgpICAgICAgICAgICAgKCAoICggeCApICYgMHgwNyApIDw8IDMgKQ0KIA0KICNkZWZpbmUgcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgICAgICAgICAoICggdWludDMyX3QgKSAwICkNCiAjZGVmaW5lIHBvcnRJTklUSUFMX0NSSVRJQ0FMX05FU1RJTkcgICAgKCAoIHVpbnQzMl90ICkgMTAgKQ0KIA0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTdGF0aWMgdmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLXZvbGF0aWxlIHVpbnQzMl90IHVsQ3JpdGljYWxOZXN0aW5nID0gcG9ydElOSVRJQUxfQ1JJVElDQUxfTkVTVElORzsNCit2b2xhdGlsZSB1aW50MzJfdCAgICAgICAgICAgICAgdWxDcml0aWNhbE5lc3RpbmcgPSBwb3J0SU5JVElBTF9DUklUSUNBTF9ORVNUSU5HOw0KIA0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTdGF0aWMgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KICNpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAwDQotICAgIHN0YXRpYyB2b2lkIHBydlBvcnRQcmVlbXB0aXZlVGljayggdm9pZCApIF9fYXR0cmlidXRlX18oICggaW50ZXJydXB0X2hhbmRsZXIgKSApOw0KK3N0YXRpYyB2b2lkIHBydlBvcnRQcmVlbXB0aXZlVGljayAoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fICgoaW50ZXJydXB0X2hhbmRsZXIpKTsNCiAjZWxzZQ0KLSAgICBzdGF0aWMgdm9pZCBwcnZQb3J0UHJlZW1wdGl2ZVRpY2soIHZvaWQgKTsNCitzdGF0aWMgdm9pZCBwcnZQb3J0UHJlZW1wdGl2ZVRpY2sgKCB2b2lkICk7DQogI2VuZGlmDQogDQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFN0YXJ0IGltcGxlbWVudGF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQogDQotU3RhY2tUeXBlX3QgKiBweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICogcHhUb3BPZlN0YWNrLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYXNrRnVuY3Rpb25fdCBweENvZGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KK1N0YWNrVHlwZV90ICoNCitweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICogcHhUb3BPZlN0YWNrLCBUYXNrRnVuY3Rpb25fdCBweENvZGUsDQorICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KIHsNCiAgICAgLyogUGxhY2UgdGhlIHBhcmFtZXRlciBvbiB0aGUgc3RhY2sgaW4gdGhlIGV4cGVjdGVkIGxvY2F0aW9uLiAqLw0KICAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB2UGFyYW1ldGVyczsNCkBAIC0xMjksMzUgKzEyOSwzNSBAQAogICAgICpweFRvcE9mU3RhY2sgPSAwOw0KICAgICAqcHhUb3BPZlN0YWNrLS07DQogDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhBNjsgLyogQTYgLyBGUCAqLw0KKyAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4QTY7ICAgIC8qIEE2IC8gRlAgKi8NCiAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhBNTsgLyogQTUgKi8NCisgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweEE1OyAgICAvKiBBNSAqLw0KICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweEE0OyAvKiBBNCAqLw0KKyAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4QTQ7ICAgIC8qIEE0ICovDQogICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4QTM7IC8qIEEzICovDQorICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhBMzsgICAgLyogQTMgKi8NCiAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhBMjsgLyogQTIgKi8NCisgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweEEyOyAgICAvKiBBMiAqLw0KICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweEExOyAvKiBBMSAqLw0KKyAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4QTE7ICAgIC8qIEExICovDQogICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4QTA7IC8qIEEwICovDQorICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhBMDsgICAgLyogQTAgKi8NCiAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhENzsgLyogRDcgKi8NCisgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweEQ3OyAgICAvKiBENyAqLw0KICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweEQ2OyAvKiBENiAqLw0KKyAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4RDY7ICAgIC8qIEQ2ICovDQogICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4RDU7IC8qIEQ1ICovDQorICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhENTsgICAgLyogRDUgKi8NCiAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhENDsgLyogRDQgKi8NCisgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweEQ0OyAgICAvKiBENCAqLw0KICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweEQzOyAvKiBEMyAqLw0KKyAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4RDM7ICAgIC8qIEQzICovDQogICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4RDI7IC8qIEQyICovDQorICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhEMjsgICAgLyogRDIgKi8NCiAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhEMTsgLyogRDEgKi8NCisgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweEQxOyAgICAvKiBEMSAqLw0KICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweEQwOyAvKiBEMCAqLw0KKyAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4RDA7ICAgIC8qIEQwICovDQogDQogICAgIHJldHVybiBweFRvcE9mU3RhY2s7DQogfQ0KQEAgLTE2NSw2NCArMTY1LDY1IEBACiAvKg0KICAqIENhbGxlZCBieSBwb3J0WUlFTEQoKSBvciB0YXNrWUlFTEQoKSB0byBtYW51YWxseSBmb3JjZSBhIGNvbnRleHQgc3dpdGNoLg0KICAqLw0KLXN0YXRpYyB2b2lkIHBydlBvcnRZaWVsZCggdm9pZCApDQorc3RhdGljIHZvaWQNCitwcnZQb3J0WWllbGQoIHZvaWQgKQ0KIHsNCiAgICAgYXNtIHZvbGF0aWxlICggIm1vdmUudyAgIzB4MjcwMCwgJXNyXG5cdCIgKTsNCi0gICAgI2lmIF9HQ0NfVVNFU19GUCA9PSAxDQotICAgICAgICBhc20gdm9sYXRpbGUgKCAidW5sayAlZnBcblx0IiApOw0KLSAgICAjZW5kaWYNCi0gICAgLyogUGVyZm9ybSB0aGUgY29udGV4dCBzd2l0Y2guICBGaXJzdCBzYXZlIHRoZSBjb250ZXh0IG9mIHRoZSBjdXJyZW50IHRhc2suICovDQotICAgIHBvcnRTQVZFX0NPTlRFWFQoKTsNCisjaWYgX0dDQ19VU0VTX0ZQID09IDENCisgICAgYXNtIHZvbGF0aWxlICggInVubGsgJWZwXG5cdCIgKTsNCisjZW5kaWYNCisgICAgIC8qIFBlcmZvcm0gdGhlIGNvbnRleHQgc3dpdGNoLiAgRmlyc3Qgc2F2ZSB0aGUgY29udGV4dCBvZiB0aGUgY3VycmVudCB0YXNrLiAqLw0KKyAgICBwb3J0U0FWRV9DT05URVhUKCAgKTsNCiANCiAgICAgLyogRmluZCB0aGUgaGlnaGVzdCBwcmlvcml0eSB0YXNrIHRoYXQgaXMgcmVhZHkgdG8gcnVuLiAqLw0KLSAgICB2VGFza1N3aXRjaENvbnRleHQoKTsNCisgICAgdlRhc2tTd2l0Y2hDb250ZXh0KCAgKTsNCiANCiAgICAgLyogUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgbmV3IHRhc2suICovDQotICAgIHBvcnRSRVNUT1JFX0NPTlRFWFQoKTsNCisgICAgcG9ydFJFU1RPUkVfQ09OVEVYVCggICk7DQogfQ0KIA0KICNpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAwDQotDQogLyoNCiAgKiBUaGUgSVNSIHVzZWQgZm9yIHRoZSBzY2hlZHVsZXIgdGljayBkZXBlbmRzIG9uIHdoZXRoZXIgdGhlIGNvb3BlcmF0aXZlIG9yDQogICogdGhlIHByZWVtcHRpdmUgc2NoZWR1bGVyIGlzIGJlaW5nIHVzZWQuDQogICovDQotICAgIHN0YXRpYyB2b2lkIHBydlBvcnRQcmVlbXB0aXZlVGljayggdm9pZCApDQotICAgIHsNCi0gICAgICAgIC8qIFRoZSBjb29wZXJhdGl2ZSBzY2hlZHVsZXIgcmVxdWlyZXMgYSBub3JtYWwgSVJRIHNlcnZpY2Ugcm91dGluZSB0bw0KLSAgICAgICAgICogc2ltcGx5IGluY3JlbWVudCB0aGUgc3lzdGVtIHRpY2suDQotICAgICAgICAgKi8NCitzdGF0aWMgdm9pZA0KK3BydlBvcnRQcmVlbXB0aXZlVGljayAoIHZvaWQgKQ0KK3sNCisgICAgLyogVGhlIGNvb3BlcmF0aXZlIHNjaGVkdWxlciByZXF1aXJlcyBhIG5vcm1hbCBJUlEgc2VydmljZSByb3V0aW5lIHRvDQorICAgICAqIHNpbXBseSBpbmNyZW1lbnQgdGhlIHN5c3RlbSB0aWNrLg0KKyAgICAgKi8NCiANCi0gICAgICAgIHhUYXNrSW5jcmVtZW50VGljaygpOw0KLSAgICAgICAgTUNGX1BJVF9QQ1NSMCB8PSBNQ0ZfUElUX1BDU1JfUElGOw0KLSAgICB9DQorICAgIHhUYXNrSW5jcmVtZW50VGljaygpOw0KKyAgICBNQ0ZfUElUX1BDU1IwIHw9IE1DRl9QSVRfUENTUl9QSUY7DQorfQ0KIA0KLSNlbHNlIC8qIGlmIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDAgKi8NCisjZWxzZQ0KIA0KLSAgICBzdGF0aWMgdm9pZCBwcnZQb3J0UHJlZW1wdGl2ZVRpY2soIHZvaWQgKQ0KLSAgICB7DQotICAgICAgICBhc20gdm9sYXRpbGUgKCAibW92ZS53ICAjMHgyNzAwLCAlc3Jcblx0IiApOw0KLSAgICAgICAgI2lmIF9HQ0NfVVNFU19GUCA9PSAxDQotICAgICAgICAgICAgYXNtIHZvbGF0aWxlICggInVubGsgJWZwXG5cdCIgKTsNCi0gICAgICAgICNlbmRpZg0KLSAgICAgICAgcG9ydFNBVkVfQ09OVEVYVCgpOw0KLSAgICAgICAgTUNGX1BJVF9QQ1NSMCB8PSBNQ0ZfUElUX1BDU1JfUElGOw0KK3N0YXRpYyB2b2lkDQorcHJ2UG9ydFByZWVtcHRpdmVUaWNrKCB2b2lkICkNCit7DQorICAgIGFzbSB2b2xhdGlsZSAoICJtb3ZlLncgICMweDI3MDAsICVzclxuXHQiICk7DQorI2lmIF9HQ0NfVVNFU19GUCA9PSAxDQorICAgIGFzbSB2b2xhdGlsZSAoICJ1bmxrICVmcFxuXHQiICk7DQorI2VuZGlmDQorICAgIHBvcnRTQVZFX0NPTlRFWFQoICApOw0KKyAgICBNQ0ZfUElUX1BDU1IwIHw9IE1DRl9QSVRfUENTUl9QSUY7DQorICAgIGlmKCB4VGFza0luY3JlbWVudFRpY2soKSAhPSBwZEZBTFNFICkNCisJew0KKwkJdlRhc2tTd2l0Y2hDb250ZXh0KCAgKTsNCisJfQ0KKyAgICBwb3J0UkVTVE9SRV9DT05URVhUKCAgKTsNCit9DQorI2VuZGlmDQogDQotICAgICAgICBpZiggeFRhc2tJbmNyZW1lbnRUaWNrKCkgIT0gcGRGQUxTRSApDQotICAgICAgICB7DQotICAgICAgICAgICAgdlRhc2tTd2l0Y2hDb250ZXh0KCk7DQotICAgICAgICB9DQotDQotICAgICAgICBwb3J0UkVTVE9SRV9DT05URVhUKCk7DQotICAgIH0NCi0jZW5kaWYgLyogaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMCAqLw0KLQ0KLXZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCkNCit2b2lkDQordlBvcnRFbnRlckNyaXRpY2FsKCkNCiB7DQogICAgIC8qIEZJWE1FOiBXZSBzaG91bGQgc3RvcmUgdGhlIG9sZCBJUEwgaGVyZSAtIEhvdyBhcmUgd2Ugc3VwcG9zZWQgdG8gZG8NCiAgICAgICogdGhpcy4NCiAgICAgICovDQotICAgICggdm9pZCApIHBvcnRTRVRfSVBMKCBwb3J0SVBMX01BWCApOw0KKyAgICAoIHZvaWQgKXBvcnRTRVRfSVBMKCBwb3J0SVBMX01BWCApOw0KIA0KICAgICAvKiBOb3cgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgdWxDcml0aWNhbE5lc3RpbmcgY2FuIGJlIGFjY2Vzc2VkDQogICAgICAqIGRpcmVjdGx5LiAgSW5jcmVtZW50IHVsQ3JpdGljYWxOZXN0aW5nIHRvIGtlZXAgYSBjb3VudCBvZiBob3cgbWFueSB0aW1lcw0KQEAgLTIzMCw3ICsyMzEsOCBAQAogICAgIHVsQ3JpdGljYWxOZXN0aW5nKys7DQogfQ0KIA0KLXZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoKQ0KK3ZvaWQNCit2UG9ydEV4aXRDcml0aWNhbCgpDQogew0KICAgICBpZiggdWxDcml0aWNhbE5lc3RpbmcgPiBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyApDQogICAgIHsNCkBAIC0yMzgsMTcgKzI0MCwxOCBAQAogICAgICAgICB1bENyaXRpY2FsTmVzdGluZy0tOw0KIA0KICAgICAgICAgLyogSWYgdGhlIG5lc3RpbmcgbGV2ZWwgaGFzIHJlYWNoZWQgemVybyB0aGVuIGludGVycnVwdHMgc2hvdWxkIGJlDQotICAgICAgICAgKiByZS1lbmFibGVkLiAqLw0KKyAgICAgICAgcmUtZW5hYmxlZC4gKi8NCiAgICAgICAgIGlmKCB1bENyaXRpY2FsTmVzdGluZyA9PSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyApDQogICAgICAgICB7DQotICAgICAgICAgICAgKCB2b2lkICkgcG9ydFNFVF9JUEwoIDAgKTsNCisgICAgICAgICAgICAoIHZvaWQgKXBvcnRTRVRfSVBMKCAwICk7DQogICAgICAgICB9DQogICAgIH0NCiB9DQogDQotQmFzZVR5cGVfdCB4UG9ydFN0YXJ0U2NoZWR1bGVyKCB2b2lkICkNCitCYXNlVHlwZV90DQoreFBvcnRTdGFydFNjaGVkdWxlciggdm9pZCApDQogew0KLSAgICBleHRlcm4gdm9pZCAoICogcG9ydFZFQ1RPUl9UQUJMRVtdICkgKCk7DQorICAgIGV4dGVybiB2b2lkICAgICAoICpwb3J0VkVDVE9SX1RBQkxFWyAgXSApICggICk7DQogDQogICAgIC8qIEFkZCBlbnRyeSBpbiB2ZWN0b3IgdGFibGUgZm9yIHlpZWxkIHN5c3RlbSBjYWxsLiAqLw0KICAgICBwb3J0VkVDVE9SX1RBQkxFWyBwb3J0VkVDVE9SX1NZU0NBTEwgXSA9IHBydlBvcnRZaWVsZDsNCkBAIC0yNTYsNyArMjU5LDcgQEAKICAgICBwb3J0VkVDVE9SX1RBQkxFWyBwb3J0VkVDVE9SX1RJTUVSIF0gPSBwcnZQb3J0UHJlZW1wdGl2ZVRpY2s7DQogDQogICAgIC8qIENvbmZpZ3VyZSB0aGUgdGltZXIgZm9yIHRoZSBzeXN0ZW0gY2xvY2suICovDQotICAgIGlmKCBjb25maWdUSUNLX1JBVEVfSFogPiAwICkNCisgICAgaWYgKCBjb25maWdUSUNLX1JBVEVfSFogPiAwKQ0KICAgICB7DQogICAgICAgICAvKiBDb25maWd1cmUgcHJlc2NhbGVyICovDQogICAgICAgICBNQ0ZfUElUX1BDU1IwID0gTUNGX1BJVF9QQ1NSX1BSRSggMHg5ICkgfCBNQ0ZfUElUX1BDU1JfUkxEIHwgTUNGX1BJVF9QQ1NSX09WVzsNCkBAIC0yNzAsMTIgKzI3MywxMyBAQAogICAgIH0NCiANCiAgICAgLyogUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgZmlyc3QgdGFzayB0aGF0IGlzIGdvaW5nIHRvIHJ1bi4gKi8NCi0gICAgcG9ydFJFU1RPUkVfQ09OVEVYVCgpOw0KKyAgICBwb3J0UkVTVE9SRV9DT05URVhUKCAgKTsNCiANCiAgICAgLyogU2hvdWxkIG5vdCBnZXQgaGVyZS4gKi8NCiAgICAgcmV0dXJuIHBkVFJVRTsNCiB9DQogDQotdm9pZCB2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApDQordm9pZA0KK3ZQb3J0RW5kU2NoZWR1bGVyKCB2b2lkICkNCiB7DQogfQ0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0dDQy9NQ0Y1MjM1L3BvcnRtYWNyby5oIGIvcG9ydGFibGUvR0NDL01DRjUyMzUvcG9ydG1hY3JvLmgKaW5kZXggM2RhZTdkNy4uZWEyNTk4YiAxMDA2NDQKLS0tIGEvcG9ydGFibGUvR0NDL01DRjUyMzUvcG9ydG1hY3JvLmgKKysrIGIvcG9ydGFibGUvR0NDL01DRjUyMzUvcG9ydG1hY3JvLmgKQEAgLTEsOTEgKzEsOTEgQEAKIC8qDQotICogIEZyZWVSVE9TIFY0LjEuMSAtIENvcHlyaWdodCAoQykgMjAwMy0yMDA2IFJpY2hhcmQgQmFycnkuDQotICogIE1DRjUyMzUgUG9ydCAtIENvcHlyaWdodCAoQykgMjAwNiBDaHJpc3RpYW4gV2FsdGVyLg0KLSAqDQotICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQotICoNCi0gKiAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQ0KLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlKiogYXMgcHVibGlzaGVkIGJ5DQotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yDQotICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQotICoNCi0gKiAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KLSAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KLSAqDQotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQotICogIGFsb25nIHdpdGggRnJlZVJUT1M7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQ0KLSAqDQotICogIEEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCBjYW4gYmUgYXBwbGllZCBzaG91bGQgeW91IHdpc2ggdG8gZGlzdHJpYnV0ZQ0KLSAqICBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUywgd2l0aG91dCBiZWluZyBvYmxpZ2VkIHRvIHByb3ZpZGUNCi0gKiAgdGhlIHNvdXJjZSBjb2RlIGZvciBhbnkgcHJvcHJpZXRhcnkgY29tcG9uZW50cy4gIFNlZSB0aGUgbGljZW5zaW5nIHNlY3Rpb24NCi0gKiAgb2YgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgZm9yIGZ1bGwgZGV0YWlscyBvZiBob3cgYW5kIHdoZW4gdGhlIGV4Y2VwdGlvbg0KLSAqICBjYW4gYmUgYXBwbGllZC4NCi0gKg0KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KLSAqIEdldCB0aGUgRnJlZVJUT1MgZUJvb2shICBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiAgICAgICoNCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQotICogVGhpcyBpcyBhIGNvbmNpc2UsIHN0ZXAgYnkgc3RlcCwgJ2hhbmRzIG9uJyBndWlkZSB0aGF0IGRlc2NyaWJlcyBib3RoICAgKg0KLSAqIGdlbmVyYWwgbXVsdGl0YXNraW5nIGNvbmNlcHRzIGFuZCBGcmVlUlRPUyBzcGVjaWZpY3MuIEl0IHByZXNlbnRzIGFuZCAgICoNCi0gKiBleHBsYWlucyBudW1lcm91cyBleGFtcGxlcyB0aGF0IGFyZSB3cml0dGVuIHVzaW5nIHRoZSBGcmVlUlRPUyBBUEkuICAgICAqDQotICogRnVsbCBzb3VyY2UgY29kZSBmb3IgYWxsIHRoZSBleGFtcGxlcyBpcyBwcm92aWRlZCBpbiBhbiBhY2NvbXBhbnlpbmcgICAgKg0KLSAqIC56aXAgZmlsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKg0KLSAqICBQbGVhc2UgZW5zdXJlIHRvIHJlYWQgdGhlIGNvbmZpZ3VyYXRpb24gYW5kIHJlbGV2YW50IHBvcnQgc2VjdGlvbnMgb2YgdGhlDQotICogIG9ubGluZSBkb2N1bWVudGF0aW9uLg0KLSAqDQotICogIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIC0gRG9jdW1lbnRhdGlvbiwgbGF0ZXN0IGluZm9ybWF0aW9uLCBsaWNlbnNlIGFuZA0KLSAqICBjb250YWN0IGRldGFpbHMuDQotICoNCi0gKiAgaHR0cDovL3d3dy5TYWZlUlRPUy5jb20gLSBBIHZlcnNpb24gdGhhdCBpcyBjZXJ0aWZpZWQgZm9yIHVzZSBpbiBzYWZldHkNCi0gKiAgY3JpdGljYWwgc3lzdGVtcy4NCi0gKg0KLSAqICBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbSAtIENvbW1lcmNpYWwgc3VwcG9ydCwgZGV2ZWxvcG1lbnQsIHBvcnRpbmcsDQotICogIGxpY2Vuc2luZyBhbmQgdHJhaW5pbmcgc2VydmljZXMuDQotICovDQorICAgIEZyZWVSVE9TIFY0LjEuMSAtIENvcHlyaWdodCAoQykgMjAwMy0yMDA2IFJpY2hhcmQgQmFycnkuDQorICAgIE1DRjUyMzUgUG9ydCAtIENvcHlyaWdodCAoQykgMjAwNiBDaHJpc3RpYW4gV2FsdGVyLg0KKw0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UqKiBhcyBwdWJsaXNoZWQgYnkNCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3INCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCisNCisgICAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KKw0KKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KKyAgICBhbG9uZyB3aXRoIEZyZWVSVE9TOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQorICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0ENCisNCisgICAgQSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMIGNhbiBiZSBhcHBsaWVkIHNob3VsZCB5b3Ugd2lzaCB0byBkaXN0cmlidXRlDQorICAgIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TLCB3aXRob3V0IGJlaW5nIG9ibGlnZWQgdG8gcHJvdmlkZQ0KKyAgICB0aGUgc291cmNlIGNvZGUgZm9yIGFueSBwcm9wcmlldGFyeSBjb21wb25lbnRzLiAgU2VlIHRoZSBsaWNlbnNpbmcgc2VjdGlvbg0KKyAgICBvZiBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyBmb3IgZnVsbCBkZXRhaWxzIG9mIGhvdyBhbmQgd2hlbiB0aGUgZXhjZXB0aW9uDQorICAgIGNhbiBiZSBhcHBsaWVkLg0KKw0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAqIEdldCB0aGUgRnJlZVJUT1MgZUJvb2shICBTZWUgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiAgICAgICoNCisJKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorCSogVGhpcyBpcyBhIGNvbmNpc2UsIHN0ZXAgYnkgc3RlcCwgJ2hhbmRzIG9uJyBndWlkZSB0aGF0IGRlc2NyaWJlcyBib3RoICAgKg0KKwkqIGdlbmVyYWwgbXVsdGl0YXNraW5nIGNvbmNlcHRzIGFuZCBGcmVlUlRPUyBzcGVjaWZpY3MuIEl0IHByZXNlbnRzIGFuZCAgICoNCisJKiBleHBsYWlucyBudW1lcm91cyBleGFtcGxlcyB0aGF0IGFyZSB3cml0dGVuIHVzaW5nIHRoZSBGcmVlUlRPUyBBUEkuICAgICAqDQorCSogRnVsbCBzb3VyY2UgY29kZSBmb3IgYWxsIHRoZSBleGFtcGxlcyBpcyBwcm92aWRlZCBpbiBhbiBhY2NvbXBhbnlpbmcgICAgKg0KKwkqIC56aXAgZmlsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisJUGxlYXNlIGVuc3VyZSB0byByZWFkIHRoZSBjb25maWd1cmF0aW9uIGFuZCByZWxldmFudCBwb3J0IHNlY3Rpb25zIG9mIHRoZQ0KKwlvbmxpbmUgZG9jdW1lbnRhdGlvbi4NCisNCisJaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgLSBEb2N1bWVudGF0aW9uLCBsYXRlc3QgaW5mb3JtYXRpb24sIGxpY2Vuc2UgYW5kDQorCWNvbnRhY3QgZGV0YWlscy4NCisNCisJaHR0cDovL3d3dy5TYWZlUlRPUy5jb20gLSBBIHZlcnNpb24gdGhhdCBpcyBjZXJ0aWZpZWQgZm9yIHVzZSBpbiBzYWZldHkNCisJY3JpdGljYWwgc3lzdGVtcy4NCisNCisJaHR0cDovL3d3dy5PcGVuUlRPUy5jb20gLSBDb21tZXJjaWFsIHN1cHBvcnQsIGRldmVsb3BtZW50LCBwb3J0aW5nLA0KKwlsaWNlbnNpbmcgYW5kIHRyYWluaW5nIHNlcnZpY2VzLg0KKyovDQogDQogI2lmbmRlZiBQT1JUTUFDUk9fSA0KLSAgICAjZGVmaW5lIFBPUlRNQUNST19IDQorI2RlZmluZSBQT1JUTUFDUk9fSA0KIA0KLSAgICAjaWZkZWYgX19jcGx1c3BsdXMNCi0gICAgICAgIGV4dGVybiAiQyIgew0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCiANCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGF0YSB0eXBlcyBmb3IgQ29sZGZpcmUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0gICAgI2RlZmluZSBwb3J0Q0hBUiAgICAgICAgICBjaGFyDQotICAgICNkZWZpbmUgcG9ydEZMT0FUICAgICAgICAgZmxvYXQNCi0gICAgI2RlZmluZSBwb3J0RE9VQkxFICAgICAgICBkb3VibGUNCi0gICAgI2RlZmluZSBwb3J0TE9ORyAgICAgICAgICBsb25nDQotICAgICNkZWZpbmUgcG9ydFNIT1JUICAgICAgICAgc2hvcnQNCi0gICAgI2RlZmluZSBwb3J0U1RBQ0tfVFlQRSAgICB1bnNpZ25lZCBpbnQNCi0gICAgI2RlZmluZSBwb3J0QkFTRV9UWVBFICAgICBpbnQNCisjZGVmaW5lIHBvcnRDSEFSICAgICAgICBjaGFyDQorI2RlZmluZSBwb3J0RkxPQVQgICAgICAgZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUgICAgICBkb3VibGUNCisjZGVmaW5lIHBvcnRMT05HICAgICAgICBsb25nDQorI2RlZmluZSBwb3J0U0hPUlQgICAgICAgc2hvcnQNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFICB1bnNpZ25lZCBpbnQNCisjZGVmaW5lIHBvcnRCQVNFX1RZUEUgICBpbnQNCiANCi0gICAgdHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSAgIFN0YWNrVHlwZV90Ow0KLSAgICB0eXBlZGVmIGxvbmcgICAgICAgICAgICAgQmFzZVR5cGVfdDsNCi0gICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nICAgIFVCYXNlVHlwZV90Ow0KK3R5cGVkZWYgcG9ydFNUQUNLX1RZUEUgU3RhY2tUeXBlX3Q7DQordHlwZWRlZiBsb25nIEJhc2VUeXBlX3Q7DQordHlwZWRlZiB1bnNpZ25lZCBsb25nIFVCYXNlVHlwZV90Ow0KIA0KLSAgICAjaWYgKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KLSAgICAgICAgdHlwZWRlZiB1aW50MTZfdCAgICAgVGlja1R5cGVfdDsNCi0gICAgICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmYNCi0gICAgI2Vsc2UNCi0gICAgICAgIHR5cGVkZWYgdWludDMyX3QgICAgIFRpY2tUeXBlX3Q7DQotICAgICAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQotICAgICNlbmRpZg0KKyNpZiggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCisgICAgdHlwZWRlZiB1aW50MTZfdCBUaWNrVHlwZV90Ow0KKyAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQorI2Vsc2UNCisgICAgdHlwZWRlZiB1aW50MzJfdCBUaWNrVHlwZV90Ow0KKyAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQorI2VuZGlmDQogDQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEFyY2hpdGVjdHVyZSBzcGVjaWZpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotICAgICNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSCAgICAgICggLTEgKQ0KLSAgICAjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUyAgICAoICggVGlja1R5cGVfdCApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KLSAgICAjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVCAgICA0DQorI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RIICAgICAgICAgICAgICAgICggLTEgKQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TICAgICAgICAgICAgICAgICggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQorI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQgICAgICAgICAgICAgIDQNCiANCi0gICAgI2RlZmluZSBwb3J0VFJBUF9ZSUVMRCAgICAgICAgMCAgICAgICAgIC8qIFRyYXAgMCAqLw0KLSAgICAjZGVmaW5lIHBvcnRJUExfTUFYICAgICAgICAgICA3ICAgICAgICAgLyogT25seSBOTUkgaW50ZXJydXB0IDcgYWxsb3dlZC4gKi8NCisjZGVmaW5lIHBvcnRUUkFQX1lJRUxEICAgICAgICAgICAgICAgICAgMCAgIC8qIFRyYXAgMCAqLw0KKyNkZWZpbmUgcG9ydElQTF9NQVggICAgICAgICAgICAgICAgICAgICA3ICAgLyogT25seSBOTUkgaW50ZXJydXB0IDcgYWxsb3dlZC4gKi8NCiANCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnJlZVJUT1MgbWFjcm9zIGZvciBwb3J0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCiANCkBAIC05NywxNyArOTcsMTcgQEAKICAqIHRoZSBzdGFjayBmb3IgdGhlIENQVSByZWdpc3RlcnMgYW5kIG90aGVyIHRhc2sgZGVwZW5kZW50IHZhbHVlcyAoZS5nDQogICogdWxDcml0aWNhbE5lc3RpbmcpIGFuZCB1cGRhdGVzIHRoZSB0b3Agb2YgdGhlIHN0YWNrIGluIHRoZSBUQ0IuDQogICovDQotICAgICNkZWZpbmUgcG9ydFNBVkVfQ09OVEVYVCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIGFzbSB2b2xhdGlsZSAoIC8qIHJlc2VydmUgc3BhY2UgZm9yIHRhc2sgc3RhdGUuICovICAgICBcDQotICAgICAgICAibGVhLmwgICAoLTY0LCAlc3ApLCAlc3Bcblx0IiAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAvKiBwdXNoIGRhdGEgcmVnaXN0ZXIgJWQwLSVkNy8lYTAtJWE2IG9uIHN0YWNrLiAqLyBcDQotICAgICAgICAibW92ZW0ubCAlZDAtJWQ3LyVhMC0lYTYsICglc3ApXG5cdCIgICAgICAgICAgICAgICBcDQotICAgICAgICAvKiBwdXNoIHVsQ3JpdGljYWxOZXN0aW5nIGNvdW50ZXIgb24gc3RhY2suICovICAgICBcDQotICAgICAgICAibGVhLmwgICg2MCwgJXNwKSwgJWEwXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAibW92ZS5sICB1bENyaXRpY2FsTmVzdGluZywgKCVhMClcblx0IiAgICAgICAgICAgICBcDQotICAgICAgICAvKiBzZXQgdGhlIG5ldyB0b3Agb2YgdGhlIHN0YWNrIGluIHRoZSBUQ0IuICovICAgICBcDQotICAgICAgICAibW92ZS5sICBweEN1cnJlbnRUQ0IsICVhMFxuXHQiICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAibW92ZS5sICAlc3AsICglYTApIiApOw0KKyNkZWZpbmUgcG9ydFNBVkVfQ09OVEVYVCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICBhc20gdm9sYXRpbGUgKCAvKiByZXNlcnZlIHNwYWNlIGZvciB0YXNrIHN0YXRlLiAqLyAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAibGVhLmwgICAoLTY0LCAlc3ApLCAlc3Bcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAvKiBwdXNoIGRhdGEgcmVnaXN0ZXIgJWQwLSVkNy8lYTAtJWE2IG9uIHN0YWNrLiAqLyAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAibW92ZW0ubCAlZDAtJWQ3LyVhMC0lYTYsICglc3ApXG5cdCIgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAvKiBwdXNoIHVsQ3JpdGljYWxOZXN0aW5nIGNvdW50ZXIgb24gc3RhY2suICovICAgICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAibGVhLmwgICg2MCwgJXNwKSwgJWEwXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAibW92ZS5sICB1bENyaXRpY2FsTmVzdGluZywgKCVhMClcblx0IiAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAvKiBzZXQgdGhlIG5ldyB0b3Agb2YgdGhlIHN0YWNrIGluIHRoZSBUQ0IuICovICAgICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAibW92ZS5sICBweEN1cnJlbnRUQ0IsICVhMFxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAibW92ZS5sICAlc3AsICglYTApIik7DQogDQogLyouDQogICogVGhpcyBmdW5jdGlvbiByZXN0b3JlcyB0aGUgY3VycmVudCBhY3RpdmUgYW5kIGNvbnRpbnVlcyBpdHMgZXhlY3V0aW9uLg0KQEAgLTExNSw2NiArMTE1LDY4IEBACiAgKiB0YXNrIGRlcGVuZGVudCB2YWx1ZXMgKGUuZyB1bENyaXRpY2FsTmVzdGluZykuIEZpbmFsbHkgZXhlY3V0aW9uDQogICogaXMgY29udGludWVkIGJ5IGV4ZWN1dGluZyBhbiBydGUgaW5zdHJ1Y3Rpb24uDQogICovDQotICAgICNkZWZpbmUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIGFzbSB2b2xhdGlsZSAoICJtb3ZlLmwgIHB4Q3VycmVudFRDQiwgJXNwXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICJtb3ZlLmwgICglc3ApLCAlc3Bcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgIC8qIHN0YWNrIHBvaW50ZXIgbm93IHBvaW50cyB0byB0aGUgc2F2ZWQgcmVnaXN0ZXJzLiAqLyBcDQotICAgICAgICAgICAgICAgICAgICJtb3ZlbS5sICglc3ApLCAlZDAtJWQ3LyVhMC0lYTZcblx0IiAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgIC8qIHJlc3RvcmUgdWxDcml0aWNhbE5lc3RpbmcgY291bnRlciBmcm9tIHN0YWNrLiAqLyAgICBcDQotICAgICAgICAgICAgICAgICAgICJsZWEubCAgICglc3AsIDYwKSwgJXNwXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICJtb3ZlLmwgICglc3ApKywgdWxDcml0aWNhbE5lc3Rpbmdcblx0IiAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgIC8qIHN0YWNrIHBvaW50ZXIgbm93IHBvaW50cyB0byBleGNlcHRpb24gZnJhbWUuICovICAgICBcDQorI2RlZmluZSBwb3J0UkVTVE9SRV9DT05URVhUKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgIGFzbSB2b2xhdGlsZSAoICJtb3ZlLmwgIHB4Q3VycmVudFRDQiwgJXNwXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgICAgICAgICAgICAgICJtb3ZlLmwgICglc3ApLCAlc3Bcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgICAgICAgICAgICAgIC8qIHN0YWNrIHBvaW50ZXIgbm93IHBvaW50cyB0byB0aGUgc2F2ZWQgcmVnaXN0ZXJzLiAqLyAgICBcDQorICAgICAgICAgICAgICAgICAgICJtb3ZlbS5sICglc3ApLCAlZDAtJWQ3LyVhMC0lYTZcblx0IiAgICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgICAgICAgICAgICAgIC8qIHJlc3RvcmUgdWxDcml0aWNhbE5lc3RpbmcgY291bnRlciBmcm9tIHN0YWNrLiAqLyAgICAgICBcDQorICAgICAgICAgICAgICAgICAgICJsZWEubCAgICglc3AsIDYwKSwgJXNwXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgICAgICAgICAgICAgICJtb3ZlLmwgICglc3ApKywgdWxDcml0aWNhbE5lc3Rpbmdcblx0IiAgICAgICAgICAgICAgICAgICBcDQorICAgICAgICAgICAgICAgICAgIC8qIHN0YWNrIHBvaW50ZXIgbm93IHBvaW50cyB0byBleGNlcHRpb24gZnJhbWUuICovICAgICAgICBcDQogICAgICAgICAgICAgICAgICAgICJydGVcblx0IiApOw0KIA0KLSAgICAjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpIFwNCisjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCiAgICAgdlBvcnRFbnRlckNyaXRpY2FsKCk7DQogDQotICAgICNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKSBcDQorI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQogICAgIHZQb3J0RXhpdENyaXRpY2FsKCk7DQogDQotICAgICNkZWZpbmUgcG9ydFNFVF9JUEwoIHhJUEwgKSBcDQorI2RlZmluZSBwb3J0U0VUX0lQTCggeElQTCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQogICAgIGFzbV9zZXRfaXBsKCB4SVBMICkNCiANCi0gICAgI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgXA0KLSAgICBkbyB7ICggdm9pZCApIHBvcnRTRVRfSVBMKCBwb3J0SVBMX01BWCApOyB9IHdoaWxlKCAwICkNCi0gICAgI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKSBcDQotICAgIGRvIHsgKCB2b2lkICkgcG9ydFNFVF9JUEwoIDAgKTsgfSB3aGlsZSggMCApDQorI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgXA0KKyAgICBkbyB7ICggdm9pZCApcG9ydFNFVF9JUEwoIHBvcnRJUExfTUFYICk7IH0gd2hpbGUoIDAgKQ0KKyNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkgXA0KKyAgICBkbyB7ICggdm9pZCApcG9ydFNFVF9JUEwoIDAgKTsgfSB3aGlsZSggMCApDQogDQotICAgICNkZWZpbmUgcG9ydFlJRUxEKCkgXA0KLSAgICBhc20gdm9sYXRpbGUgKCAiIHRyYXAgICAlMFxuXHQiIDogOiAiaSIgKCBwb3J0VFJBUF9ZSUVMRCApICkNCisjZGVmaW5lIHBvcnRZSUVMRCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgYXNtIHZvbGF0aWxlICggIiB0cmFwICAgJTBcblx0IiA6IDogImkiKHBvcnRUUkFQX1lJRUxEKSApDQogDQotICAgICNkZWZpbmUgcG9ydE5PUCgpIFwNCisjZGVmaW5lIHBvcnROT1AoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCiAgICAgYXNtIHZvbGF0aWxlICggIm5vcFxuXHQiICkNCiANCi0gICAgI2RlZmluZSBwb3J0RU5URVJfU1dJVENISU5HX0lTUigpICAgICAgICAgICAgICAgXA0KLSAgICBhc20gdm9sYXRpbGUgKCAibW92ZS53ICAjMHgyNzAwLCAlc3IiICk7ICAgICAgICBcDQotICAgIC8qIFNhdmUgdGhlIGNvbnRleHQgb2YgdGhlIGludGVycnVwdGVkIHRhc2suICovIFwNCi0gICAgcG9ydFNBVkVfQ09OVEVYVCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyNkZWZpbmUgcG9ydEVOVEVSX1NXSVRDSElOR19JU1IoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICBhc20gdm9sYXRpbGUgKCAibW92ZS53ICAjMHgyNzAwLCAlc3IiICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAvKiBTYXZlIHRoZSBjb250ZXh0IG9mIHRoZSBpbnRlcnJ1cHRlZCB0YXNrLiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICBwb3J0U0FWRV9DT05URVhUKCAgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KICAgICB7DQotICAgICNkZWZpbmUgcG9ydEVYSVRfU1dJVENISU5HX0lTUiggU3dpdGNoUmVxdWlyZWQgKSAgICAgICAgICAgIFwNCi0gICAgLyogSWYgYSBzd2l0Y2ggaXMgcmVxdWlyZWQgd2UgY2FsbCB2VGFza1N3aXRjaENvbnRleHQoKS4gKi8gXA0KLSAgICBpZiggU3dpdGNoUmVxdWlyZWQgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHZUYXNrU3dpdGNoQ29udGV4dCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgcG9ydFJFU1RPUkVfQ09OVEVYVCgpOw0KKw0KKyNkZWZpbmUgcG9ydEVYSVRfU1dJVENISU5HX0lTUiggU3dpdGNoUmVxdWlyZWQgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgLyogSWYgYSBzd2l0Y2ggaXMgcmVxdWlyZWQgd2UgY2FsbCB2VGFza1N3aXRjaENvbnRleHQoKS4gKi8gICAgICAgICAgXA0KKyAgICAgICAgaWYoIFN3aXRjaFJlcXVpcmVkICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgICAgIHZUYXNrU3dpdGNoQ29udGV4dCggICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICBwb3J0UkVTVE9SRV9DT05URVhUKCAgKTsNCiANCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb24gcHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0gICAgdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKTsNCi0gICAgdm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApOw0KLSAgICBpbnQgYXNtX3NldF9pcGwoIHVpbnQzMl90IGludCB1aU5ld0lQTCApOw0KK3ZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICk7DQordm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApOw0KK2ludCBhc21fc2V0X2lwbCggdWludDMyX3QgaW50IHVpTmV3SVBMICk7DQogDQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENvbXBpbGVyIHNwZWNpZmljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgXA0KLSAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICAgICAgICAgICAgICAgICBcDQorICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KIA0KLSAgICAjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIFwNCi0gICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCiANCi0gICAgI2lmZGVmIF9fY3BsdXNwbHVzDQotICAgICAgICB9DQotICAgICNlbmRpZg0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCiANCiANCiAjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8NCisNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9HQ0MvTVNQNDMwRjQ0OS9wb3J0LmMgYi9wb3J0YWJsZS9HQ0MvTVNQNDMwRjQ0OS9wb3J0LmMKaW5kZXggMDQ5MjdlNy4uNTliOGZiNiAxMDA2NDQKLS0tIGEvcG9ydGFibGUvR0NDL01TUDQzMEY0NDkvcG9ydC5jCisrKyBiL3BvcnRhYmxlL0dDQy9NU1A0MzBGNDQ5L3BvcnQuYwpAQCAtMjYsMTAgKzI2LDEwIEBACiAgKi8NCiANCiAvKg0KLSAqICBDaGFuZ2VzIGZyb20gVjIuNS4yDQotICoNCi0gKyB1c0NyaXRpY2FsTmVzdGluZyBub3cgaGFzIGEgdm9sYXRpbGUgcXVhbGlmaWVyLg0KLSAqLw0KKwlDaGFuZ2VzIGZyb20gVjIuNS4yDQorCQkNCisJKyB1c0NyaXRpY2FsTmVzdGluZyBub3cgaGFzIGEgdm9sYXRpbGUgcXVhbGlmaWVyLg0KKyovDQogDQogLyogU3RhbmRhcmQgaW5jbHVkZXMuICovDQogI2luY2x1ZGUgPHN0ZGxpYi5oPg0KQEAgLTQwLDYyICs0MCw2MiBAQAogI2luY2x1ZGUgInRhc2suaCINCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgTVNQNDMwIHBvcnQuDQotKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyAqIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBNU1A0MzAgcG9ydC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KLS8qIENvbnN0YW50cyByZXF1aXJlZCBmb3IgaGFyZHdhcmUgc2V0dXAuICBUaGUgdGljayBJU1IgcnVucyBvZmYgdGhlIEFDTEssDQotICogbm90IHRoZSBNQ0xLLiAqLw0KLSNkZWZpbmUgcG9ydEFDTEtfRlJFUVVFTkNZX0haICAgICAgICAgICAoICggVGlja1R5cGVfdCApIDMyNzY4ICkNCi0jZGVmaW5lIHBvcnRJTklUSUFMX0NSSVRJQ0FMX05FU1RJTkcgICAgKCAoIHVpbnQxNl90ICkgMTAgKQ0KLSNkZWZpbmUgcG9ydEZMQUdTX0lOVF9FTkFCTEVEICAgICAgICAgICAoICggU3RhY2tUeXBlX3QgKSAweDA4ICkNCisvKiBDb25zdGFudHMgcmVxdWlyZWQgZm9yIGhhcmR3YXJlIHNldHVwLiAgVGhlIHRpY2sgSVNSIHJ1bnMgb2ZmIHRoZSBBQ0xLLCANCitub3QgdGhlIE1DTEsuICovDQorI2RlZmluZSBwb3J0QUNMS19GUkVRVUVOQ1lfSFoJCQkoICggVGlja1R5cGVfdCApIDMyNzY4ICkNCisjZGVmaW5lIHBvcnRJTklUSUFMX0NSSVRJQ0FMX05FU1RJTkcJKCAoIHVpbnQxNl90ICkgMTAgKQ0KKyNkZWZpbmUgcG9ydEZMQUdTX0lOVF9FTkFCTEVECSggKCBTdGFja1R5cGVfdCApIDB4MDggKQ0KIA0KIC8qIFdlIHJlcXVpcmUgdGhlIGFkZHJlc3Mgb2YgdGhlIHB4Q3VycmVudFRDQiB2YXJpYWJsZSwgYnV0IGRvbid0IHdhbnQgdG8ga25vdw0KLSAqIGFueSBkZXRhaWxzIG9mIGl0cyB0eXBlLiAqLw0KK2FueSBkZXRhaWxzIG9mIGl0cyB0eXBlLiAqLw0KIHR5cGVkZWYgdm9pZCBUQ0JfdDsNCiBleHRlcm4gdm9sYXRpbGUgVENCX3QgKiB2b2xhdGlsZSBweEN1cnJlbnRUQ0I7DQogDQogLyogTW9zdCBwb3J0cyBpbXBsZW1lbnQgY3JpdGljYWwgc2VjdGlvbnMgYnkgcGxhY2luZyB0aGUgaW50ZXJydXB0IGZsYWdzIG9uDQotICogdGhlIHN0YWNrIGJlZm9yZSBkaXNhYmxpbmcgaW50ZXJydXB0cy4gIEV4aXRpbmcgdGhlIGNyaXRpY2FsIHNlY3Rpb24gaXMgdGhlbg0KLSAqIHNpbXBseSBhIGNhc2Ugb2YgcG9wcGluZyB0aGUgZmxhZ3MgZnJvbSB0aGUgc3RhY2suICBBcyBtc3BnY2MgZG9lcyBub3QgdXNlDQotICogYSBmcmFtZSBwb2ludGVyIHRoaXMgY2Fubm90IGJlIGRvbmUgYXMgbW9kaWZ5aW5nIHRoZSBzdGFjayB3aWxsIGNsb2JiZXIgYWxsDQotICogdGhlIHN0YWNrIHZhcmlhYmxlcy4gIEluc3RlYWQgZWFjaCB0YXNrIG1haW50YWlucyBhIGNvdW50IG9mIHRoZSBjcml0aWNhbA0KLSAqIHNlY3Rpb24gbmVzdGluZyBkZXB0aC4gIEVhY2ggdGltZSBhIGNyaXRpY2FsIHNlY3Rpb24gaXMgZW50ZXJlZCB0aGUgY291bnQgaXMNCi0gKiBpbmNyZW1lbnRlZC4gIEVhY2ggdGltZSBhIGNyaXRpY2FsIHNlY3Rpb24gaXMgbGVmdCB0aGUgY291bnQgaXMgZGVjcmVtZW50ZWQgLQ0KLSAqIHdpdGggaW50ZXJydXB0cyBvbmx5IGJlaW5nIHJlLWVuYWJsZWQgaWYgdGhlIGNvdW50IGlzIHplcm8uDQotICoNCi0gKiB1c0NyaXRpY2FsTmVzdGluZyB3aWxsIGdldCBzZXQgdG8gemVybyB3aGVuIHRoZSBzY2hlZHVsZXIgc3RhcnRzLCBidXQgbXVzdA0KLSAqIG5vdCBiZSBpbml0aWFsaXNlZCB0byB6ZXJvIGFzIHRoaXMgd2lsbCBjYXVzZSBwcm9ibGVtcyBkdXJpbmcgdGhlIHN0YXJ0dXANCi0gKiBzZXF1ZW5jZS4gKi8NCit0aGUgc3RhY2sgYmVmb3JlIGRpc2FibGluZyBpbnRlcnJ1cHRzLiAgRXhpdGluZyB0aGUgY3JpdGljYWwgc2VjdGlvbiBpcyB0aGVuDQorc2ltcGx5IGEgY2FzZSBvZiBwb3BwaW5nIHRoZSBmbGFncyBmcm9tIHRoZSBzdGFjay4gIEFzIG1zcGdjYyBkb2VzIG5vdCB1c2UNCithIGZyYW1lIHBvaW50ZXIgdGhpcyBjYW5ub3QgYmUgZG9uZSBhcyBtb2RpZnlpbmcgdGhlIHN0YWNrIHdpbGwgY2xvYmJlciBhbGwNCit0aGUgc3RhY2sgdmFyaWFibGVzLiAgSW5zdGVhZCBlYWNoIHRhc2sgbWFpbnRhaW5zIGEgY291bnQgb2YgdGhlIGNyaXRpY2FsDQorc2VjdGlvbiBuZXN0aW5nIGRlcHRoLiAgRWFjaCB0aW1lIGEgY3JpdGljYWwgc2VjdGlvbiBpcyBlbnRlcmVkIHRoZSBjb3VudCBpcw0KK2luY3JlbWVudGVkLiAgRWFjaCB0aW1lIGEgY3JpdGljYWwgc2VjdGlvbiBpcyBsZWZ0IHRoZSBjb3VudCBpcyBkZWNyZW1lbnRlZCAtDQord2l0aCBpbnRlcnJ1cHRzIG9ubHkgYmVpbmcgcmUtZW5hYmxlZCBpZiB0aGUgY291bnQgaXMgemVyby4NCisNCit1c0NyaXRpY2FsTmVzdGluZyB3aWxsIGdldCBzZXQgdG8gemVybyB3aGVuIHRoZSBzY2hlZHVsZXIgc3RhcnRzLCBidXQgbXVzdA0KK25vdCBiZSBpbml0aWFsaXNlZCB0byB6ZXJvIGFzIHRoaXMgd2lsbCBjYXVzZSBwcm9ibGVtcyBkdXJpbmcgdGhlIHN0YXJ0dXANCitzZXF1ZW5jZS4gKi8NCiB2b2xhdGlsZSB1aW50MTZfdCB1c0NyaXRpY2FsTmVzdGluZyA9IHBvcnRJTklUSUFMX0NSSVRJQ0FMX05FU1RJTkc7DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQotLyoNCi0gKiBNYWNybyB0byBzYXZlIGEgdGFzayBjb250ZXh0IHRvIHRoZSB0YXNrIHN0YWNrLiAgVGhpcyBzaW1wbHkgcHVzaGVzIGFsbCB0aGUNCi0gKiBnZW5lcmFsIHB1cnBvc2UgbXNwNDMwIHJlZ2lzdGVycyBvbnRvIHRoZSBzdGFjaywgZm9sbG93ZWQgYnkgdGhlDQotICogdXNDcml0aWNhbE5lc3RpbmcgdmFsdWUgdXNlZCBieSB0aGUgdGFzay4gIEZpbmFsbHkgdGhlIHJlc3VsdGFudCBzdGFjaw0KLSAqIHBvaW50ZXIgdmFsdWUgaXMgc2F2ZWQgaW50byB0aGUgdGFzayBjb250cm9sIGJsb2NrIHNvIGl0IGNhbiBiZSByZXRyaWV2ZWQNCisvKiANCisgKiBNYWNybyB0byBzYXZlIGEgdGFzayBjb250ZXh0IHRvIHRoZSB0YXNrIHN0YWNrLiAgVGhpcyBzaW1wbHkgcHVzaGVzIGFsbCB0aGUgDQorICogZ2VuZXJhbCBwdXJwb3NlIG1zcDQzMCByZWdpc3RlcnMgb250byB0aGUgc3RhY2ssIGZvbGxvd2VkIGJ5IHRoZSANCisgKiB1c0NyaXRpY2FsTmVzdGluZyB2YWx1ZSB1c2VkIGJ5IHRoZSB0YXNrLiAgRmluYWxseSB0aGUgcmVzdWx0YW50IHN0YWNrIA0KKyAqIHBvaW50ZXIgdmFsdWUgaXMgc2F2ZWQgaW50byB0aGUgdGFzayBjb250cm9sIGJsb2NrIHNvIGl0IGNhbiBiZSByZXRyaWV2ZWQgDQogICogdGhlIG5leHQgdGltZSB0aGUgdGFzayBleGVjdXRlcy4NCiAgKi8NCi0jZGVmaW5lIHBvcnRTQVZFX0NPTlRFWFQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICBhc20gdm9sYXRpbGUgKCAicHVzaAlyNAkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAicHVzaAlyNQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAicHVzaAlyNgkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAicHVzaAlyNwkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAicHVzaAlyOAkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAicHVzaAlyOQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAicHVzaAlyMTAJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgInB1c2gJcjExCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICJwdXNoCXIxMgkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAicHVzaAlyMTMJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgInB1c2gJcjE0CQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICJwdXNoCXIxNQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAibW92LncJdXNDcml0aWNhbE5lc3RpbmcsIHIxNAlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgInB1c2gJcjE0CQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICJtb3YudwlweEN1cnJlbnRUQ0IsIHIxMgkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICJtb3YudwlyMSwgQHIxMgkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgKTsNCisjZGVmaW5lIHBvcnRTQVZFX0NPTlRFWFQoKQkJCQkJCQkJCVwNCisJYXNtIHZvbGF0aWxlICgJInB1c2gJcjQJCQkJCQlcblx0IglcDQorCQkJCQkicHVzaAlyNQkJCQkJCVxuXHQiCVwNCisJCQkJCSJwdXNoCXI2CQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjcJCQkJCQlcblx0IglcDQorCQkJCQkicHVzaAlyOAkJCQkJCVxuXHQiCVwNCisJCQkJCSJwdXNoCXI5CQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjEwCQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjExCQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjEyCQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjEzCQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjE0CQkJCQkJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjE1CQkJCQkJXG5cdCIJXA0KKwkJCQkJIm1vdi53CXVzQ3JpdGljYWxOZXN0aW5nLCByMTQJXG5cdCIJXA0KKwkJCQkJInB1c2gJcjE0CQkJCQkJXG5cdCIJXA0KKwkJCQkJIm1vdi53CXB4Q3VycmVudFRDQiwgcjEyCQlcblx0IglcDQorCQkJCQkibW92LncJcjEsIEByMTIJCQkJXG5cdCIJXA0KKwkJCQkpOw0KIA0KLS8qDQorLyogDQogICogTWFjcm8gdG8gcmVzdG9yZSBhIHRhc2sgY29udGV4dCBmcm9tIHRoZSB0YXNrIHN0YWNrLiAgVGhpcyBpcyBlZmZlY3RpdmVseQ0KICAqIHRoZSByZXZlcnNlIG9mIHBvcnRTQVZFX0NPTlRFWFQoKS4gIEZpcnN0IHRoZSBzdGFjayBwb2ludGVyIHZhbHVlIGlzDQogICogbG9hZGVkIGZyb20gdGhlIHRhc2sgY29udHJvbCBibG9jay4gIE5leHQgdGhlIHZhbHVlIGZvciB1c0NyaXRpY2FsTmVzdGluZw0KQEAgLTEwNSwyNiArMTA1LDI2IEBACiAgKiBUaGUgYmljIGluc3RydWN0aW9uIGVuc3VyZXMgdGhlcmUgYXJlIG5vIGxvdyBwb3dlciBiaXRzIHNldCBpbiB0aGUgc3RhdHVzDQogICogcmVnaXN0ZXIgdGhhdCBpcyBhYm91dCB0byBiZSBwb3BwZWQgZnJvbSB0aGUgc3RhY2suDQogICovDQotI2RlZmluZSBwb3J0UkVTVE9SRV9DT05URVhUKCkgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgYXNtIHZvbGF0aWxlICggIm1vdi53CXB4Q3VycmVudFRDQiwgcjEyCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgIm1vdi53CUByMTIsIHIxCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAicG9wCXIxNQkJCQkJCVxuXHQiICBcDQotICAgICAgICAgICAgICAgICAgICJtb3YudwlyMTUsIHVzQ3JpdGljYWxOZXN0aW5nCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAicG9wCXIxNQkJCQkJCVxuXHQiICBcDQotICAgICAgICAgICAgICAgICAgICJwb3AJcjE0CQkJCQkJXG5cdCIgIFwNCi0gICAgICAgICAgICAgICAgICAgInBvcAlyMTMJCQkJCQlcblx0IiAgXA0KLSAgICAgICAgICAgICAgICAgICAicG9wCXIxMgkJCQkJCVxuXHQiICBcDQotICAgICAgICAgICAgICAgICAgICJwb3AJcjExCQkJCQkJXG5cdCIgIFwNCi0gICAgICAgICAgICAgICAgICAgInBvcAlyMTAJCQkJCQlcblx0IiAgXA0KLSAgICAgICAgICAgICAgICAgICAicG9wCXI5CQkJCQkJXG5cdCIgIFwNCi0gICAgICAgICAgICAgICAgICAgInBvcAlyOAkJCQkJCVxuXHQiICBcDQotICAgICAgICAgICAgICAgICAgICJwb3AJcjcJCQkJCQlcblx0IiAgXA0KLSAgICAgICAgICAgICAgICAgICAicG9wCXI2CQkJCQkJXG5cdCIgIFwNCi0gICAgICAgICAgICAgICAgICAgInBvcAlyNQkJCQkJCVxuXHQiICBcDQotICAgICAgICAgICAgICAgICAgICJwb3AJcjQJCQkJCQlcblx0IiAgXA0KLSAgICAgICAgICAgICAgICAgICAiYmljCSMoMHhmMCksMChyMSkJCQlcblx0IiAgXA0KLSAgICAgICAgICAgICAgICAgICAicmV0aQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgKTsNCisjZGVmaW5lIHBvcnRSRVNUT1JFX0NPTlRFWFQoKQkJCQkJCQkJXA0KKwlhc20gdm9sYXRpbGUgKAkibW92LncJcHhDdXJyZW50VENCLCByMTIJCVxuXHQiCVwNCisJCQkJCSJtb3YudwlAcjEyLCByMQkJCQlcblx0IglcDQorCQkJCQkicG9wCXIxNQkJCQkJCVxuXHQiCVwNCisJCQkJCSJtb3YudwlyMTUsIHVzQ3JpdGljYWxOZXN0aW5nCVxuXHQiCVwNCisJCQkJCSJwb3AJcjE1CQkJCQkJXG5cdCIJXA0KKwkJCQkJInBvcAlyMTQJCQkJCQlcblx0IglcDQorCQkJCQkicG9wCXIxMwkJCQkJCVxuXHQiCVwNCisJCQkJCSJwb3AJcjEyCQkJCQkJXG5cdCIJXA0KKwkJCQkJInBvcAlyMTEJCQkJCQlcblx0IglcDQorCQkJCQkicG9wCXIxMAkJCQkJCVxuXHQiCVwNCisJCQkJCSJwb3AJcjkJCQkJCQlcblx0IglcDQorCQkJCQkicG9wCXI4CQkJCQkJXG5cdCIJXA0KKwkJCQkJInBvcAlyNwkJCQkJCVxuXHQiCVwNCisJCQkJCSJwb3AJcjYJCQkJCQlcblx0IglcDQorCQkJCQkicG9wCXI1CQkJCQkJXG5cdCIJXA0KKwkJCQkJInBvcAlyNAkJCQkJCVxuXHQiCVwNCisJCQkJCSJiaWMJIygweGYwKSwwKHIxKQkJCVxuXHQiCVwNCisJCQkJCSJyZXRpCQkJCQkJCVxuXHQiCVwNCisJCQkJKTsNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKg0KQEAgLTEzNCwxOTQgKzEzNCwxOTUgQEAKIHN0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKTsNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0vKg0KLSAqIEluaXRpYWxpc2UgdGhlIHN0YWNrIG9mIGEgdGFzayB0byBsb29rIGV4YWN0bHkgYXMgaWYgYSBjYWxsIHRvDQorLyogDQorICogSW5pdGlhbGlzZSB0aGUgc3RhY2sgb2YgYSB0YXNrIHRvIGxvb2sgZXhhY3RseSBhcyBpZiBhIGNhbGwgdG8gDQogICogcG9ydFNBVkVfQ09OVEVYVCBoYWQgYmVlbiBjYWxsZWQuDQotICoNCisgKiANCiAgKiBTZWUgdGhlIGhlYWRlciBmaWxlIHBvcnRhYmxlLmguDQogICovDQotU3RhY2tUeXBlX3QgKiBweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICogcHhUb3BPZlN0YWNrLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYXNrRnVuY3Rpb25fdCBweENvZGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KK1N0YWNrVHlwZV90ICpweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICpweFRvcE9mU3RhY2ssIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzICkNCiB7DQotICAgIC8qDQotICAgICAqICBQbGFjZSBhIGZldyBieXRlcyBvZiBrbm93biB2YWx1ZXMgb24gdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suDQotICAgICAqICBUaGlzIGlzIGp1c3QgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgYW5kIGNhbiBiZSBpbmNsdWRlZCBpZiByZXF1aXJlZC4NCi0gICAgICoNCi0gICAgICogcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTExMTsNCi0gICAgICogIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgKiBweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgyMjIyOw0KLSAgICAgKiAgcHhUb3BPZlN0YWNrLS07DQotICAgICAqIHB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDMzMzM7DQotICAgICAqICBweFRvcE9mU3RhY2stLTsNCi0gICAgICovDQorCS8qIA0KKwkJUGxhY2UgYSBmZXcgYnl0ZXMgb2Yga25vd24gdmFsdWVzIG9uIHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLiANCisJCVRoaXMgaXMganVzdCB1c2VmdWwgZm9yIGRlYnVnZ2luZyBhbmQgY2FuIGJlIGluY2x1ZGVkIGlmIHJlcXVpcmVkLg0KIA0KLSAgICAvKiBUaGUgbXNwNDMwIGF1dG9tYXRpY2FsbHkgcHVzaGVzIHRoZSBQQyB0aGVuIFNSIG9udG8gdGhlIHN0YWNrIGJlZm9yZQ0KLSAgICAgKiBleGVjdXRpbmcgYW4gSVNSLiAgV2Ugd2FudCB0aGUgc3RhY2sgdG8gbG9vayBqdXN0IGFzIGlmIHRoaXMgaGFzIGhhcHBlbmVkDQotICAgICAqIHNvIHBsYWNlIGEgcG9pbnRlciB0byB0aGUgc3RhcnQgb2YgdGhlIHRhc2sgb24gdGhlIHN0YWNrIGZpcnN0IC0gZm9sbG93ZWQNCi0gICAgICogYnkgdGhlIGZsYWdzIHdlIHdhbnQgdGhlIHRhc2sgdG8gdXNlIHdoZW4gaXQgc3RhcnRzIHVwLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB4Q29kZTsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSBwb3J0RkxBR1NfSU5UX0VOQUJMRUQ7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDExMTE7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgyMjIyOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MzMzMzsNCisJCXB4VG9wT2ZTdGFjay0tOyANCisJKi8NCiANCi0gICAgLyogTmV4dCB0aGUgZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycy4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDQ0NDQ7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4NTU1NTsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHg2NjY2Ow0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDc3Nzc7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4ODg4ODsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHg5OTk5Ow0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweGFhYWE7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4YmJiYjsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhjY2NjOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweGRkZGQ7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4ZWVlZTsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIFRoZSBtc3A0MzAgYXV0b21hdGljYWxseSBwdXNoZXMgdGhlIFBDIHRoZW4gU1Igb250byB0aGUgc3RhY2sgYmVmb3JlIA0KKwlleGVjdXRpbmcgYW4gSVNSLiAgV2Ugd2FudCB0aGUgc3RhY2sgdG8gbG9vayBqdXN0IGFzIGlmIHRoaXMgaGFzIGhhcHBlbmVkDQorCXNvIHBsYWNlIGEgcG9pbnRlciB0byB0aGUgc3RhcnQgb2YgdGhlIHRhc2sgb24gdGhlIHN0YWNrIGZpcnN0IC0gZm9sbG93ZWQNCisJYnkgdGhlIGZsYWdzIHdlIHdhbnQgdGhlIHRhc2sgdG8gdXNlIHdoZW4gaXQgc3RhcnRzIHVwLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB4Q29kZTsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSBwb3J0RkxBR1NfSU5UX0VOQUJMRUQ7DQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBXaGVuIHRoZSB0YXNrIHN0YXJ0cyBpcyB3aWxsIGV4cGVjdCB0byBmaW5kIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXIgaW4NCi0gICAgICogUjE1LiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB2UGFyYW1ldGVyczsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIE5leHQgdGhlIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHg0NDQ0Ow0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDU1NTU7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4NjY2NjsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHg3Nzc3Ow0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDg4ODg7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4OTk5OTsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhhYWFhOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweGJiYmI7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4Y2NjYzsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhkZGRkOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweGVlZWU7DQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBUaGUgY29kZSBnZW5lcmF0ZWQgYnkgdGhlIG1zcGdjYyBjb21waWxlciBkb2VzIG5vdCBtYWludGFpbiBzZXBhcmF0ZQ0KLSAgICAgKiBzdGFjayBhbmQgZnJhbWUgcG9pbnRlcnMuIFRoZSBwb3J0RU5URVJfQ1JJVElDQUwgbWFjcm8gY2Fubm90IHRoZXJlZm9yZQ0KLSAgICAgKiB1c2UgdGhlIHN0YWNrIGFzIHBlciBvdGhlciBwb3J0cy4gIEluc3RlYWQgYSB2YXJpYWJsZSBpcyB1c2VkIHRvIGtlZXANCi0gICAgICogdHJhY2sgb2YgdGhlIGNyaXRpY2FsIHNlY3Rpb24gbmVzdGluZy4gIFRoaXMgdmFyaWFibGUgaGFzIHRvIGJlIHN0b3JlZA0KLSAgICAgKiBhcyBwYXJ0IG9mIHRoZSB0YXNrIGNvbnRleHQgYW5kIGlzIGluaXRpYWxseSBzZXQgdG8gemVyby4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwb3J0Tk9fQ1JJVElDQUxfU0VDVElPTl9ORVNUSU5HOw0KKwkvKiBXaGVuIHRoZSB0YXNrIHN0YXJ0cyBpcyB3aWxsIGV4cGVjdCB0byBmaW5kIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXIgaW4NCisJUjE1LiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB2UGFyYW1ldGVyczsNCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgIC8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHRvcCBvZiB0aGUgc3RhY2sgd2UgaGF2ZSBnZW5lcmF0ZWQgc28gdGhpcyBjYW4NCi0gICAgICogYmUgc3RvcmVkIGluIHRoZSB0YXNrIGNvbnRyb2wgYmxvY2sgZm9yIHRoZSB0YXNrLiAqLw0KLSAgICByZXR1cm4gcHhUb3BPZlN0YWNrOw0KKwkvKiBUaGUgY29kZSBnZW5lcmF0ZWQgYnkgdGhlIG1zcGdjYyBjb21waWxlciBkb2VzIG5vdCBtYWludGFpbiBzZXBhcmF0ZQ0KKwlzdGFjayBhbmQgZnJhbWUgcG9pbnRlcnMuIFRoZSBwb3J0RU5URVJfQ1JJVElDQUwgbWFjcm8gY2Fubm90IHRoZXJlZm9yZQ0KKwl1c2UgdGhlIHN0YWNrIGFzIHBlciBvdGhlciBwb3J0cy4gIEluc3RlYWQgYSB2YXJpYWJsZSBpcyB1c2VkIHRvIGtlZXANCisJdHJhY2sgb2YgdGhlIGNyaXRpY2FsIHNlY3Rpb24gbmVzdGluZy4gIFRoaXMgdmFyaWFibGUgaGFzIHRvIGJlIHN0b3JlZA0KKwlhcyBwYXJ0IG9mIHRoZSB0YXNrIGNvbnRleHQgYW5kIGlzIGluaXRpYWxseSBzZXQgdG8gemVyby4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwb3J0Tk9fQ1JJVElDQUxfU0VDVElPTl9ORVNUSU5HOwkNCisNCisJLyogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgdG9wIG9mIHRoZSBzdGFjayB3ZSBoYXZlIGdlbmVyYXRlZCBzbyB0aGlzIGNhbg0KKwliZSBzdG9yZWQgaW4gdGhlIHRhc2sgY29udHJvbCBibG9jayBmb3IgdGhlIHRhc2suICovDQorCXJldHVybiBweFRvcE9mU3RhY2s7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIEJhc2VUeXBlX3QgeFBvcnRTdGFydFNjaGVkdWxlciggdm9pZCApDQogew0KLSAgICAvKiBTZXR1cCB0aGUgaGFyZHdhcmUgdG8gZ2VuZXJhdGUgdGhlIHRpY2suICBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB3aGVuDQotICAgICAqIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLiAqLw0KLSAgICBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCk7DQorCS8qIFNldHVwIHRoZSBoYXJkd2FyZSB0byBnZW5lcmF0ZSB0aGUgdGljay4gIEludGVycnVwdHMgYXJlIGRpc2FibGVkIHdoZW4NCisJdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuICovDQorCXBydlNldHVwVGltZXJJbnRlcnJ1cHQoKTsNCiANCi0gICAgLyogUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgZmlyc3QgdGFzayB0aGF0IGlzIGdvaW5nIHRvIHJ1bi4gKi8NCi0gICAgcG9ydFJFU1RPUkVfQ09OVEVYVCgpOw0KKwkvKiBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBmaXJzdCB0YXNrIHRoYXQgaXMgZ29pbmcgdG8gcnVuLiAqLw0KKwlwb3J0UkVTVE9SRV9DT05URVhUKCk7DQogDQotICAgIC8qIFNob3VsZCBub3QgZ2V0IGhlcmUgYXMgdGhlIHRhc2tzIGFyZSBub3cgcnVubmluZyEgKi8NCi0gICAgcmV0dXJuIHBkVFJVRTsNCisJLyogU2hvdWxkIG5vdCBnZXQgaGVyZSBhcyB0aGUgdGFza3MgYXJlIG5vdyBydW5uaW5nISAqLw0KKwlyZXR1cm4gcGRUUlVFOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0RW5kU2NoZWR1bGVyKCB2b2lkICkNCiB7DQotICAgIC8qIEl0IGlzIHVubGlrZWx5IHRoYXQgdGhlIE1TUDQzMCBwb3J0IHdpbGwgZ2V0IHN0b3BwZWQuICBJZiByZXF1aXJlZCBzaW1wbHkNCi0gICAgICogZGlzYWJsZSB0aGUgdGljayBpbnRlcnJ1cHQgaGVyZS4gKi8NCisJLyogSXQgaXMgdW5saWtlbHkgdGhhdCB0aGUgTVNQNDMwIHBvcnQgd2lsbCBnZXQgc3RvcHBlZC4gIElmIHJlcXVpcmVkIHNpbXBseQ0KKwlkaXNhYmxlIHRoZSB0aWNrIGludGVycnVwdCBoZXJlLiAqLw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKg0KLSAqIE1hbnVhbCBjb250ZXh0IHN3aXRjaCBjYWxsZWQgYnkgcG9ydFlJRUxEIG9yIHRhc2tZSUVMRC4NCisgKiBNYW51YWwgY29udGV4dCBzd2l0Y2ggY2FsbGVkIGJ5IHBvcnRZSUVMRCBvciB0YXNrWUlFTEQuICANCiAgKg0KICAqIFRoZSBmaXJzdCB0aGluZyB3ZSBkbyBpcyBzYXZlIHRoZSByZWdpc3RlcnMgc28gd2UgY2FuIHVzZSBhIG5ha2VkIGF0dHJpYnV0ZS4NCiAgKi8NCi12b2lkIHZQb3J0WWllbGQoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fKCAoIG5ha2VkICkgKTsNCit2b2lkIHZQb3J0WWllbGQoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fICggKCBuYWtlZCApICk7DQogdm9pZCB2UG9ydFlpZWxkKCB2b2lkICkNCiB7DQotICAgIC8qIFdlIHdhbnQgdGhlIHN0YWNrIG9mIHRoZSB0YXNrIGJlaW5nIHNhdmVkIHRvIGxvb2sgZXhhY3RseSBhcyBpZiB0aGUgdGFzaw0KLSAgICAgKiB3YXMgc2F2ZWQgZHVyaW5nIGEgcHJlLWVtcHRpdmUgUlRPUyB0aWNrIElTUi4gIEJlZm9yZSBjYWxsaW5nIGFuIElTUiB0aGUNCi0gICAgICogbXNwNDMwIHBsYWNlcyB0aGUgc3RhdHVzIHJlZ2lzdGVyIG9udG8gdGhlIHN0YWNrLiAgQXMgdGhpcyBpcyBhIGZ1bmN0aW9uDQotICAgICAqIGNhbGwgYW5kIG5vdCBhbiBJU1Igd2UgaGF2ZSB0byBkbyB0aGlzIG1hbnVhbGx5LiAqLw0KLSAgICBhc20gdm9sYXRpbGUgKCAicHVzaAlyMiIpOw0KLSAgICBfRElOVCgpOw0KKwkvKiBXZSB3YW50IHRoZSBzdGFjayBvZiB0aGUgdGFzayBiZWluZyBzYXZlZCB0byBsb29rIGV4YWN0bHkgYXMgaWYgdGhlIHRhc2sNCisJd2FzIHNhdmVkIGR1cmluZyBhIHByZS1lbXB0aXZlIFJUT1MgdGljayBJU1IuICBCZWZvcmUgY2FsbGluZyBhbiBJU1IgdGhlIA0KKwltc3A0MzAgcGxhY2VzIHRoZSBzdGF0dXMgcmVnaXN0ZXIgb250byB0aGUgc3RhY2suICBBcyB0aGlzIGlzIGEgZnVuY3Rpb24gDQorCWNhbGwgYW5kIG5vdCBhbiBJU1Igd2UgaGF2ZSB0byBkbyB0aGlzIG1hbnVhbGx5LiAqLw0KKwlhc20gdm9sYXRpbGUgKCAicHVzaAlyMiIgKTsNCisJX0RJTlQoKTsNCiANCi0gICAgLyogU2F2ZSB0aGUgY29udGV4dCBvZiB0aGUgY3VycmVudCB0YXNrLiAqLw0KLSAgICBwb3J0U0FWRV9DT05URVhUKCk7DQorCS8qIFNhdmUgdGhlIGNvbnRleHQgb2YgdGhlIGN1cnJlbnQgdGFzay4gKi8NCisJcG9ydFNBVkVfQ09OVEVYVCgpOw0KIA0KLSAgICAvKiBTd2l0Y2ggdG8gdGhlIGhpZ2hlc3QgcHJpb3JpdHkgdGFzayB0aGF0IGlzIHJlYWR5IHRvIHJ1bi4gKi8NCi0gICAgdlRhc2tTd2l0Y2hDb250ZXh0KCk7DQorCS8qIFN3aXRjaCB0byB0aGUgaGlnaGVzdCBwcmlvcml0eSB0YXNrIHRoYXQgaXMgcmVhZHkgdG8gcnVuLiAqLw0KKwl2VGFza1N3aXRjaENvbnRleHQoKTsNCiANCi0gICAgLyogUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgbmV3IHRhc2suICovDQotICAgIHBvcnRSRVNUT1JFX0NPTlRFWFQoKTsNCisJLyogUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgbmV3IHRhc2suICovDQorCXBvcnRSRVNUT1JFX0NPTlRFWFQoKTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyoNCiAgKiBIYXJkd2FyZSBpbml0aWFsaXNhdGlvbiB0byBnZW5lcmF0ZSB0aGUgUlRPUyB0aWNrLiAgVGhpcyB1c2VzIHRpbWVyIDANCi0gKiBidXQgY291bGQgYWx0ZXJuYXRpdmVseSB1c2UgdGhlIHdhdGNoZG9nIHRpbWVyIG9yIHRpbWVyIDEuDQorICogYnV0IGNvdWxkIGFsdGVybmF0aXZlbHkgdXNlIHRoZSB3YXRjaGRvZyB0aW1lciBvciB0aW1lciAxLiANCiAgKi8NCiBzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICkNCiB7DQotICAgIC8qIEVuc3VyZSB0aGUgdGltZXIgaXMgc3RvcHBlZC4gKi8NCi0gICAgVEFDVEwgPSAwOw0KKwkvKiBFbnN1cmUgdGhlIHRpbWVyIGlzIHN0b3BwZWQuICovDQorCVRBQ1RMID0gMDsNCiANCi0gICAgLyogUnVuIHRoZSB0aW1lciBvZiB0aGUgQUNMSy4gKi8NCi0gICAgVEFDVEwgPSBUQVNTRUxfMTsNCisJLyogUnVuIHRoZSB0aW1lciBvZiB0aGUgQUNMSy4gKi8NCisJVEFDVEwgPSBUQVNTRUxfMTsNCiANCi0gICAgLyogQ2xlYXIgZXZlcnl0aGluZyB0byBzdGFydCB3aXRoLiAqLw0KLSAgICBUQUNUTCB8PSBUQUNMUjsNCisJLyogQ2xlYXIgZXZlcnl0aGluZyB0byBzdGFydCB3aXRoLiAqLw0KKwlUQUNUTCB8PSBUQUNMUjsNCiANCi0gICAgLyogU2V0IHRoZSBjb21wYXJlIG1hdGNoIHZhbHVlIGFjY29yZGluZyB0byB0aGUgdGljayByYXRlIHdlIHdhbnQuICovDQotICAgIFRBQ0NSMCA9IHBvcnRBQ0xLX0ZSRVFVRU5DWV9IWiAvIGNvbmZpZ1RJQ0tfUkFURV9IWjsNCisJLyogU2V0IHRoZSBjb21wYXJlIG1hdGNoIHZhbHVlIGFjY29yZGluZyB0byB0aGUgdGljayByYXRlIHdlIHdhbnQuICovDQorCVRBQ0NSMCA9IHBvcnRBQ0xLX0ZSRVFVRU5DWV9IWiAvIGNvbmZpZ1RJQ0tfUkFURV9IWjsNCiANCi0gICAgLyogRW5hYmxlIHRoZSBpbnRlcnJ1cHRzLiAqLw0KLSAgICBUQUNDVEwwID0gQ0NJRTsNCisJLyogRW5hYmxlIHRoZSBpbnRlcnJ1cHRzLiAqLw0KKwlUQUNDVEwwID0gQ0NJRTsNCiANCi0gICAgLyogU3RhcnQgdXAgY2xlYW4uICovDQotICAgIFRBQ1RMIHw9IFRBQ0xSOw0KKwkvKiBTdGFydCB1cCBjbGVhbi4gKi8NCisJVEFDVEwgfD0gVEFDTFI7DQogDQotICAgIC8qIFVwIG1vZGUuICovDQotICAgIFRBQ1RMIHw9IE1DXzE7DQorCS8qIFVwIG1vZGUuICovDQorCVRBQ1RMIHw9IE1DXzE7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KLS8qDQorLyogDQogICogVGhlIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgdXNlZCBkZXBlbmRzIG9uIHdoZXRoZXIgdGhlIHByZS1lbXB0aXZlDQogICogc2NoZWR1bGVyIGlzIGJlaW5nIHVzZWQgb3Igbm90Lg0KICAqLw0KIA0KICNpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAxDQogDQotLyoNCi0gKiBUaWNrIElTUiBmb3IgcHJlZW1wdGl2ZSBzY2hlZHVsZXIuICBXZSBjYW4gdXNlIGEgbmFrZWQgYXR0cmlidXRlIGFzDQotICogdGhlIGNvbnRleHQgaXMgc2F2ZWQgYXQgdGhlIHN0YXJ0IG9mIHZQb3J0WWllbGRGcm9tVGljaygpLiAgVGhlIHRpY2sNCi0gKiBjb3VudCBpcyBpbmNyZW1lbnRlZCBhZnRlciB0aGUgY29udGV4dCBpcyBzYXZlZC4NCi0gKi8NCi0gICAgaW50ZXJydXB0KCBUSU1FUkEwX1ZFQ1RPUiApIHBydlRpY2tJU1IoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fKCAoIG5ha2VkICkgKTsNCi0gICAgaW50ZXJydXB0KCBUSU1FUkEwX1ZFQ1RPUiApIHBydlRpY2tJU1IoIHZvaWQgKQ0KLSAgICB7DQotICAgICAgICAvKiBTYXZlIHRoZSBjb250ZXh0IG9mIHRoZSBpbnRlcnJ1cHRlZCB0YXNrLiAqLw0KLSAgICAgICAgcG9ydFNBVkVfQ09OVEVYVCgpOw0KKwkvKg0KKwkgKiBUaWNrIElTUiBmb3IgcHJlZW1wdGl2ZSBzY2hlZHVsZXIuICBXZSBjYW4gdXNlIGEgbmFrZWQgYXR0cmlidXRlIGFzDQorCSAqIHRoZSBjb250ZXh0IGlzIHNhdmVkIGF0IHRoZSBzdGFydCBvZiB2UG9ydFlpZWxkRnJvbVRpY2soKS4gIFRoZSB0aWNrDQorCSAqIGNvdW50IGlzIGluY3JlbWVudGVkIGFmdGVyIHRoZSBjb250ZXh0IGlzIHNhdmVkLg0KKwkgKi8NCisJaW50ZXJydXB0IChUSU1FUkEwX1ZFQ1RPUikgcHJ2VGlja0lTUiggdm9pZCApIF9fYXR0cmlidXRlX18gKCAoIG5ha2VkICkgKTsNCisJaW50ZXJydXB0IChUSU1FUkEwX1ZFQ1RPUikgcHJ2VGlja0lTUiggdm9pZCApDQorCXsNCisJCS8qIFNhdmUgdGhlIGNvbnRleHQgb2YgdGhlIGludGVycnVwdGVkIHRhc2suICovDQorCQlwb3J0U0FWRV9DT05URVhUKCk7DQogDQotICAgICAgICAvKiBJbmNyZW1lbnQgdGhlIHRpY2sgY291bnQgdGhlbiBzd2l0Y2ggdG8gdGhlIGhpZ2hlc3QgcHJpb3JpdHkgdGFzaw0KLSAgICAgICAgICogdGhhdCBpcyByZWFkeSB0byBydW4uICovDQotICAgICAgICBpZiggeFRhc2tJbmNyZW1lbnRUaWNrKCkgIT0gcGRGQUxTRSApDQotICAgICAgICB7DQotICAgICAgICAgICAgdlRhc2tTd2l0Y2hDb250ZXh0KCk7DQotICAgICAgICB9DQorCQkvKiBJbmNyZW1lbnQgdGhlIHRpY2sgY291bnQgdGhlbiBzd2l0Y2ggdG8gdGhlIGhpZ2hlc3QgcHJpb3JpdHkgdGFzaw0KKwkJdGhhdCBpcyByZWFkeSB0byBydW4uICovDQorCQlpZiggeFRhc2tJbmNyZW1lbnRUaWNrKCkgIT0gcGRGQUxTRSApDQorCQl7DQorCQkJdlRhc2tTd2l0Y2hDb250ZXh0KCk7DQorCQl9DQogDQotICAgICAgICAvKiBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBuZXcgdGFzay4gKi8NCi0gICAgICAgIHBvcnRSRVNUT1JFX0NPTlRFWFQoKTsNCi0gICAgfQ0KKwkJLyogUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgbmV3IHRhc2suICovDQorCQlwb3J0UkVTVE9SRV9DT05URVhUKCk7DQorCX0NCiANCi0jZWxzZSAvKiBpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAxICovDQorI2Vsc2UNCiANCi0vKg0KLSAqIFRpY2sgSVNSIGZvciB0aGUgY29vcGVyYXRpdmUgc2NoZWR1bGVyLiAgQWxsIHRoaXMgZG9lcyBpcyBpbmNyZW1lbnQgdGhlDQotICogdGljayBjb3VudC4gIFdlIGRvbid0IG5lZWQgdG8gc3dpdGNoIGNvbnRleHQsIHRoaXMgY2FuIG9ubHkgYmUgZG9uZSBieQ0KLSAqIG1hbnVhbCBjYWxscyB0byB0YXNrWUlFTEQoKTsNCi0gKi8NCi0gICAgaW50ZXJydXB0KCBUSU1FUkEwX1ZFQ1RPUiApIHBydlRpY2tJU1IoIHZvaWQgKTsNCi0gICAgaW50ZXJydXB0KCBUSU1FUkEwX1ZFQ1RPUiApIHBydlRpY2tJU1IoIHZvaWQgKQ0KLSAgICB7DQotICAgICAgICB4VGFza0luY3JlbWVudFRpY2soKTsNCi0gICAgfQ0KLSNlbmRpZiAvKiBpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAxICovDQorCS8qDQorCSAqIFRpY2sgSVNSIGZvciB0aGUgY29vcGVyYXRpdmUgc2NoZWR1bGVyLiAgQWxsIHRoaXMgZG9lcyBpcyBpbmNyZW1lbnQgdGhlDQorCSAqIHRpY2sgY291bnQuICBXZSBkb24ndCBuZWVkIHRvIHN3aXRjaCBjb250ZXh0LCB0aGlzIGNhbiBvbmx5IGJlIGRvbmUgYnkNCisJICogbWFudWFsIGNhbGxzIHRvIHRhc2tZSUVMRCgpOw0KKwkgKi8NCisJaW50ZXJydXB0IChUSU1FUkEwX1ZFQ1RPUikgcHJ2VGlja0lTUiggdm9pZCApOw0KKwlpbnRlcnJ1cHQgKFRJTUVSQTBfVkVDVE9SKSBwcnZUaWNrSVNSKCB2b2lkICkNCisJew0KKwkJeFRhc2tJbmNyZW1lbnRUaWNrKCk7DQorCX0NCisjZW5kaWYNCisNCisNCisJDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvR0NDL01TUDQzMEY0NDkvcG9ydG1hY3JvLmggYi9wb3J0YWJsZS9HQ0MvTVNQNDMwRjQ0OS9wb3J0bWFjcm8uaAppbmRleCA2NmQ0ZjFjLi44ZGRhODQ0IDEwMDY0NAotLS0gYS9wb3J0YWJsZS9HQ0MvTVNQNDMwRjQ0OS9wb3J0bWFjcm8uaAorKysgYi9wb3J0YWJsZS9HQ0MvTVNQNDMwRjQ0OS9wb3J0bWFjcm8uaApAQCAtMjYsMTEgKzI2LDExIEBACiAgKi8NCiANCiAjaWZuZGVmIFBPUlRNQUNST19IDQotICAgICNkZWZpbmUgUE9SVE1BQ1JPX0gNCisjZGVmaW5lIFBPUlRNQUNST19IDQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgZXh0ZXJuICJDIiB7DQotICAgICNlbmRpZg0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgKiBQb3J0IHNwZWNpZmljIGRlZmluaXRpb25zLg0KQEAgLTQzLDg0ICs0Myw4NSBAQAogICovDQogDQogLyogVHlwZSBkZWZpbml0aW9ucy4gKi8NCi0gICAgI2RlZmluZSBwb3J0Q0hBUiAgICAgICAgICBjaGFyDQotICAgICNkZWZpbmUgcG9ydEZMT0FUICAgICAgICAgZmxvYXQNCi0gICAgI2RlZmluZSBwb3J0RE9VQkxFICAgICAgICBkb3VibGUNCi0gICAgI2RlZmluZSBwb3J0TE9ORyAgICAgICAgICBsb25nDQotICAgICNkZWZpbmUgcG9ydFNIT1JUICAgICAgICAgaW50DQotICAgICNkZWZpbmUgcG9ydFNUQUNLX1RZUEUgICAgdWludDE2X3QNCi0gICAgI2RlZmluZSBwb3J0QkFTRV9UWVBFICAgICBzaG9ydA0KKyNkZWZpbmUgcG9ydENIQVIJCWNoYXINCisjZGVmaW5lIHBvcnRGTE9BVAkJZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUJCWRvdWJsZQ0KKyNkZWZpbmUgcG9ydExPTkcJCWxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVAkJaW50DQorI2RlZmluZSBwb3J0U1RBQ0tfVFlQRQl1aW50MTZfdA0KKyNkZWZpbmUgcG9ydEJBU0VfVFlQRQlzaG9ydA0KIA0KLSAgICB0eXBlZGVmIHBvcnRTVEFDS19UWVBFICAgU3RhY2tUeXBlX3Q7DQotICAgIHR5cGVkZWYgc2hvcnQgICAgICAgICAgICBCYXNlVHlwZV90Ow0KLSAgICB0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICAgVUJhc2VUeXBlX3Q7DQordHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSBTdGFja1R5cGVfdDsNCit0eXBlZGVmIHNob3J0IEJhc2VUeXBlX3Q7DQordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBVQmFzZVR5cGVfdDsNCiANCi0gICAgI2lmICggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCi0gICAgICAgIHR5cGVkZWYgdWludDE2X3QgICAgIFRpY2tUeXBlX3Q7DQotICAgICAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQotICAgICNlbHNlDQotICAgICAgICB0eXBlZGVmIHVpbnQzMl90ICAgICBUaWNrVHlwZV90Ow0KLSAgICAgICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTA0KLSAgICAjZW5kaWYNCisjaWYoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQorCXR5cGVkZWYgdWludDE2X3QgVGlja1R5cGVfdDsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggVGlja1R5cGVfdCApIDB4ZmZmZg0KKyNlbHNlDQorCXR5cGVkZWYgdWludDMyX3QgVGlja1R5cGVfdDsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTA0KKyNlbmRpZg0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIEludGVycnVwdCBjb250cm9sIG1hY3Jvcy4gKi8NCi0gICAgI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgICAgYXNtIHZvbGF0aWxlICggIkRJTlQiICk7IGFzbSB2b2xhdGlsZSAoICJOT1AiICkNCi0gICAgI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKSAgICAgYXNtIHZvbGF0aWxlICggIkVJTlQiICk7IGFzbSB2b2xhdGlsZSAoICJOT1AiICkNCisjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKQlhc20gdm9sYXRpbGUgKCAiRElOVCIgKTsgYXNtIHZvbGF0aWxlICggIk5PUCIgKQ0KKyNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkJCWFzbSB2b2xhdGlsZSAoICJFSU5UIiApOyBhc20gdm9sYXRpbGUgKCAiTk9QIiApDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogQ3JpdGljYWwgc2VjdGlvbiBjb250cm9sIG1hY3Jvcy4gKi8NCi0gICAgI2RlZmluZSBwb3J0Tk9fQ1JJVElDQUxfU0VDVElPTl9ORVNUSU5HICAgICggKCB1aW50MTZfdCApIDAgKQ0KKyNkZWZpbmUgcG9ydE5PX0NSSVRJQ0FMX1NFQ1RJT05fTkVTVElORwkJKCAoIHVpbnQxNl90ICkgMCApDQogDQotICAgICNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGV4dGVybiB2b2xhdGlsZSB1aW50MTZfdCB1c0NyaXRpY2FsTmVzdGluZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAvKiBOb3cgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgdWxDcml0aWNhbE5lc3RpbmcgY2FuIGJlIGFjY2Vzc2VkICovICAgICAgXA0KLSAgICAgICAgLyogZGlyZWN0bHkuICBJbmNyZW1lbnQgdWxDcml0aWNhbE5lc3RpbmcgdG8ga2VlcCBhIGNvdW50IG9mIGhvdyBtYW55ICovIFwNCi0gICAgICAgIC8qIHRpbWVzIHBvcnRFTlRFUl9DUklUSUNBTCgpIGhhcyBiZWVuIGNhbGxlZC4gKi8gICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICB1c0NyaXRpY2FsTmVzdGluZysrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB9DQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKQkJCQkJCQkJCQkJCQlcDQorewkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KK2V4dGVybiB2b2xhdGlsZSB1aW50MTZfdCB1c0NyaXRpY2FsTmVzdGluZzsJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwlwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7CQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogTm93IGludGVycnVwdHMgYXJlIGRpc2FibGVkIHVsQ3JpdGljYWxOZXN0aW5nIGNhbiBiZSBhY2Nlc3NlZCAqLwkJCVwNCisJLyogZGlyZWN0bHkuICBJbmNyZW1lbnQgdWxDcml0aWNhbE5lc3RpbmcgdG8ga2VlcCBhIGNvdW50IG9mIGhvdyBtYW55ICovCVwNCisJLyogdGltZXMgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgaGFzIGJlZW4gY2FsbGVkLiAqLwkJCQkJCQlcDQorCXVzQ3JpdGljYWxOZXN0aW5nKys7CQkJCQkJCQkJCQkJCQlcDQorfQ0KIA0KLSAgICAjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBleHRlcm4gdm9sYXRpbGUgdWludDE2X3QgdXNDcml0aWNhbE5lc3Rpbmc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGlmKCB1c0NyaXRpY2FsTmVzdGluZyA+IHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkcgKSAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIERlY3JlbWVudCB0aGUgbmVzdGluZyBjb3VudCBhcyB3ZSBhcmUgbGVhdmluZyBhIGNyaXRpY2FsIHNlY3Rpb24uICovIFwNCi0gICAgICAgICAgICB1c0NyaXRpY2FsTmVzdGluZy0tOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIElmIHRoZSBuZXN0aW5nIGxldmVsIGhhcyByZWFjaGVkIHplcm8gdGhlbiBpbnRlcnJ1cHRzIHNob3VsZCBiZSAqLyAgIFwNCi0gICAgICAgICAgICAvKiByZS1lbmFibGVkLiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgaWYoIHVzQ3JpdGljYWxOZXN0aW5nID09IHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkcgKSAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgfQ0KKyNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKQkJCQkJCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCitleHRlcm4gdm9sYXRpbGUgdWludDE2X3QgdXNDcml0aWNhbE5lc3Rpbmc7CQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJaWYoIHVzQ3JpdGljYWxOZXN0aW5nID4gcG9ydE5PX0NSSVRJQ0FMX1NFQ1RJT05fTkVTVElORyApCQkJCQlcDQorCXsJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJLyogRGVjcmVtZW50IHRoZSBuZXN0aW5nIGNvdW50IGFzIHdlIGFyZSBsZWF2aW5nIGEgY3JpdGljYWwgc2VjdGlvbi4gKi8JXA0KKwkJdXNDcml0aWNhbE5lc3RpbmctLTsJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJLyogSWYgdGhlIG5lc3RpbmcgbGV2ZWwgaGFzIHJlYWNoZWQgemVybyB0aGVuIGludGVycnVwdHMgc2hvdWxkIGJlICovCVwNCisJCS8qIHJlLWVuYWJsZWQuICovCQkJCQkJCQkJCQkJCQlcDQorCQlpZiggdXNDcml0aWNhbE5lc3RpbmcgPT0gcG9ydE5PX0NSSVRJQ0FMX1NFQ1RJT05fTkVTVElORyApCQkJCVwNCisJCXsJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkJcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7CQkJCQkJCQkJCQlcDQorCQl9CQkJCQkJCQkJCQkJCQkJCQkJXA0KKwl9CQkJCQkJCQkJCQkJCQkJCQkJCVwNCit9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGFzayB1dGlsaXRpZXMuICovDQotICAgIGV4dGVybiB2b2lkIHZQb3J0WWllbGQoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fKCAoIG5ha2VkICkgKTsNCi0gICAgI2RlZmluZSBwb3J0WUlFTEQoKSAgICB2UG9ydFlpZWxkKCkNCi0gICAgI2RlZmluZSBwb3J0Tk9QKCkgICAgICBhc20gdm9sYXRpbGUgKCAiTk9QIiApDQorZXh0ZXJuIHZvaWQgdlBvcnRZaWVsZCggdm9pZCApIF9fYXR0cmlidXRlX18gKCAoIG5ha2VkICkgKTsNCisjZGVmaW5lIHBvcnRZSUVMRCgpCQkJdlBvcnRZaWVsZCgpDQorI2RlZmluZSBwb3J0Tk9QKCkJCQlhc20gdm9sYXRpbGUgKCAiTk9QIiApDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogSGFyZHd3YXJlIHNwZWNpZmljcy4gKi8NCi0gICAgI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQgICAgMg0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEggICAgICAoIC0xICkNCi0gICAgI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMgICAgKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCisjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVAkJCTINCisjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEgJCQkoIC0xICkNCisjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUwkJCSggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQotICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KLSAgICAjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgICAgICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgfQ0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQogDQogI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvR0NDL01pY3JvQmxhemUvcG9ydC5jIGIvcG9ydGFibGUvR0NDL01pY3JvQmxhemUvcG9ydC5jCmluZGV4IDNjNzAyNTcuLmEwMTkyYjMgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0dDQy9NaWNyb0JsYXplL3BvcnQuYworKysgYi9wb3J0YWJsZS9HQ0MvTWljcm9CbGF6ZS9wb3J0LmMKQEAgLTI2LDggKzI2LDggQEAKICAqLw0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0qIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBNaWNyb0JsYXplIHBvcnQuDQotKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyAqIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBNaWNyb0JsYXplIHBvcnQuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiANCiAvKiBTY2hlZHVsZXIgaW5jbHVkZXMuICovDQpAQCAtNDIsMzMgKzQyLDMzIEBACiAjaW5jbHVkZSA8eGludGNfaS5oPg0KICNpbmNsdWRlIDx4dG1yY3RyLmg+DQogDQotI2lmICggY29uZmlnU1VQUE9SVF9EWU5BTUlDX0FMTE9DQVRJT04gPT0gMCApDQotICAgICNlcnJvciBjb25maWdTVVBQT1JUX0RZTkFNSUNfQUxMT0NBVElPTiBtdXN0IGJlIHNldCB0byAxIHRvIHVzZSB0aGlzIHBvcnQuDQorI2lmKCBjb25maWdTVVBQT1JUX0RZTkFNSUNfQUxMT0NBVElPTiA9PSAwICkNCisJI2Vycm9yIGNvbmZpZ1NVUFBPUlRfRFlOQU1JQ19BTExPQ0FUSU9OIG11c3QgYmUgc2V0IHRvIDEgdG8gdXNlIHRoaXMgcG9ydC4NCiAjZW5kaWYNCiANCiAvKiBUYXNrcyBhcmUgc3RhcnRlZCB3aXRoIGludGVycnVwdHMgZW5hYmxlZC4gKi8NCi0jZGVmaW5lIHBvcnRJTklUSUFMX01TUl9TVEFURSAgICAgICAgKCAoIFN0YWNrVHlwZV90ICkgMHgwMiApDQorI2RlZmluZSBwb3J0SU5JVElBTF9NU1JfU1RBVEUJCSggKCBTdGFja1R5cGVfdCApIDB4MDIgKQ0KIA0KIC8qIFRhc2tzIGFyZSBzdGFydGVkIHdpdGggYSBjcml0aWNhbCBzZWN0aW9uIG5lc3Rpbmcgb2YgMCAtIGhvd2V2ZXIgcHJpb3INCi0gKiB0byB0aGUgc2NoZWR1bGVyIGJlaW5nIGNvbW1lbmNlZCB3ZSBkb24ndCB3YW50IHRoZSBjcml0aWNhbCBuZXN0aW5nIGxldmVsDQotICogdG8gcmVhY2ggemVybywgc28gaXQgaXMgaW5pdGlhbGlzZWQgdG8gYSBoaWdoIHZhbHVlLiAqLw0KLSNkZWZpbmUgcG9ydElOSVRJQUxfTkVTVElOR19WQUxVRSAgICAoIDB4ZmYgKQ0KK3RvIHRoZSBzY2hlZHVsZXIgYmVpbmcgY29tbWVuY2VkIHdlIGRvbid0IHdhbnQgdGhlIGNyaXRpY2FsIG5lc3RpbmcgbGV2ZWwNCit0byByZWFjaCB6ZXJvLCBzbyBpdCBpcyBpbml0aWFsaXNlZCB0byBhIGhpZ2ggdmFsdWUuICovDQorI2RlZmluZSBwb3J0SU5JVElBTF9ORVNUSU5HX1ZBTFVFCSggMHhmZiApDQogDQogLyogT3VyIGhhcmR3YXJlIHNldHVwIG9ubHkgdXNlcyBvbmUgY291bnRlci4gKi8NCi0jZGVmaW5lIHBvcnRDT1VOVEVSXzAgICAgICAgICAgICAgICAgMA0KKyNkZWZpbmUgcG9ydENPVU5URVJfMCAJCQkJMA0KIA0KIC8qIFRoZSBzdGFjayB1c2VkIGJ5IHRoZSBJU1IgaXMgZmlsbGVkIHdpdGggYSBrbm93biB2YWx1ZSB0byBhc3Npc3QgaW4NCi0gKiBkZWJ1Z2dpbmcuICovDQotI2RlZmluZSBwb3J0SVNSX1NUQUNLX0ZJTExfVkFMVUUgICAgIDB4NTU1NTU1NTUNCitkZWJ1Z2dpbmcuICovDQorI2RlZmluZSBwb3J0SVNSX1NUQUNLX0ZJTExfVkFMVUUJMHg1NTU1NTU1NQ0KIA0KIC8qIENvdW50cyB0aGUgbmVzdGluZyBkZXB0aCBvZiBjYWxscyB0byBwb3J0RU5URVJfQ1JJVElDQUwoKS4gIEVhY2ggdGFzaw0KLSAqIG1haW50YWlucyBpdCdzIG93biBjb3VudCwgc28gdGhpcyB2YXJpYWJsZSBpcyBzYXZlZCBhcyBwYXJ0IG9mIHRoZSB0YXNrDQotICogY29udGV4dC4gKi8NCittYWludGFpbnMgaXQncyBvd24gY291bnQsIHNvIHRoaXMgdmFyaWFibGUgaXMgc2F2ZWQgYXMgcGFydCBvZiB0aGUgdGFzaw0KK2NvbnRleHQuICovDQogdm9sYXRpbGUgVUJhc2VUeXBlX3QgdXhDcml0aWNhbE5lc3RpbmcgPSBwb3J0SU5JVElBTF9ORVNUSU5HX1ZBTFVFOw0KIA0KIC8qIFRvIGxpbWl0IHRoZSBhbW91bnQgb2Ygc3RhY2sgcmVxdWlyZWQgYnkgZWFjaCB0YXNrLCB0aGlzIHBvcnQgdXNlcyBhDQotICogc2VwYXJhdGUgc3RhY2sgZm9yIGludGVycnVwdHMuICovDQotdWludDMyX3QgKiBwdWxJU1JTdGFjazsNCitzZXBhcmF0ZSBzdGFjayBmb3IgaW50ZXJydXB0cy4gKi8NCit1aW50MzJfdCAqcHVsSVNSU3RhY2s7DQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQpAQCAtODUsMTQyICs4NSwxNDAgQEAKICAqDQogICogU2VlIHRoZSBoZWFkZXIgZmlsZSBwb3J0YWJsZS5oLg0KICAqLw0KLVN0YWNrVHlwZV90ICogcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqIHB4VG9wT2ZTdGFjaywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFza0Z1bmN0aW9uX3QgcHhDb2RlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICogcHZQYXJhbWV0ZXJzICkNCitTdGFja1R5cGVfdCAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqcHhUb3BPZlN0YWNrLCBUYXNrRnVuY3Rpb25fdCBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycyApDQogew0KLSAgICBleHRlcm4gdm9pZCAqIF9TREEyX0JBU0VfLCAqIF9TREFfQkFTRV87DQotICAgIGNvbnN0IHVpbnQzMl90IHVsUjIgPSAoIHVpbnQzMl90ICkgJl9TREEyX0JBU0VfOw0KLSAgICBjb25zdCB1aW50MzJfdCB1bFIxMyA9ICggdWludDMyX3QgKSAmX1NEQV9CQVNFXzsNCitleHRlcm4gdm9pZCAqX1NEQTJfQkFTRV8sICpfU0RBX0JBU0VfOw0KK2NvbnN0IHVpbnQzMl90IHVsUjIgPSAoIHVpbnQzMl90ICkgJl9TREEyX0JBU0VfOw0KK2NvbnN0IHVpbnQzMl90IHVsUjEzID0gKCB1aW50MzJfdCApICZfU0RBX0JBU0VfOw0KIA0KLSAgICAvKiBQbGFjZSBhIGZldyBieXRlcyBvZiBrbm93biB2YWx1ZXMgb24gdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suDQotICAgICAqIFRoaXMgaXMgZXNzZW50aWFsIGZvciB0aGUgTWljcm9ibGF6ZSBwb3J0IGFuZCB0aGVzZSBsaW5lcyBtdXN0DQotICAgICAqIG5vdCBiZSBvbWl0dGVkLiAgVGhlIHBhcmFtZXRlciB2YWx1ZSB3aWxsIG92ZXJ3cml0ZSB0aGUNCi0gICAgICogMHgyMjIyMjIyMiB2YWx1ZSBkdXJpbmcgdGhlIGZ1bmN0aW9uIHByb2xvZ3VlLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTExMTExMTE7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MjIyMjIyMjI7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MzMzMzMzMzM7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkvKiBQbGFjZSBhIGZldyBieXRlcyBvZiBrbm93biB2YWx1ZXMgb24gdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suDQorCVRoaXMgaXMgZXNzZW50aWFsIGZvciB0aGUgTWljcm9ibGF6ZSBwb3J0IGFuZCB0aGVzZSBsaW5lcyBtdXN0DQorCW5vdCBiZSBvbWl0dGVkLiAgVGhlIHBhcmFtZXRlciB2YWx1ZSB3aWxsIG92ZXJ3cml0ZSB0aGUNCisJMHgyMjIyMjIyMiB2YWx1ZSBkdXJpbmcgdGhlIGZ1bmN0aW9uIHByb2xvZ3VlLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTExMTExMTE7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MjIyMjIyMjI7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MzMzMzMzMzM7DQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBGaXJzdCBzdGFjayBhbiBpbml0aWFsIHZhbHVlIGZvciB0aGUgY3JpdGljYWwgc2VjdGlvbiBuZXN0aW5nLiAgVGhpcw0KLSAgICAgKiAgaXMgaW5pdGlhbGlzZWQgdG8gemVybyBhcyB0YXNrcyBhcmUgc3RhcnRlZCB3aXRoIGludGVycnVwdHMgZW5hYmxlZC4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAwOyAvKiBSMC4gKi8NCisJLyogRmlyc3Qgc3RhY2sgYW4gaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIGNyaXRpY2FsIHNlY3Rpb24gbmVzdGluZy4gIFRoaXMNCisJaXMgaW5pdGlhbGlzZWQgdG8gemVybyBhcyB0YXNrcyBhcmUgc3RhcnRlZCB3aXRoIGludGVycnVwdHMgZW5hYmxlZC4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAwOwkvKiBSMC4gKi8NCiANCi0gICAgLyogUGxhY2UgYW4gaW5pdGlhbCB2YWx1ZSBmb3IgYWxsIHRoZSBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzLiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSB1bFIyOyAgICAgICAgIC8qIFIyIC0gc21hbGwgZGF0YSBhcmVhLiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAzOyAgICAgICAgIC8qIFIzLiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA0OyAgICAgICAgIC8qIFI0LiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwdlBhcmFtZXRlcnM7IC8qIFI1IGNvbnRhaW5zIHRoZSBmdW5jdGlvbiBjYWxsIHBhcmFtZXRlcnMuICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDY7ICAgICAgICAgLyogUjYuICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDc7ICAgICAgICAgLyogUjcuICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDg7ICAgICAgICAgLyogUjguICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDk7ICAgICAgICAgLyogUjkuICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MGE7ICAgICAgICAgLyogUjEwLiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDBiOyAgICAgICAgIC8qIFIxMS4gKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwYzsgICAgICAgICAvKiBSMTIuICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHVsUjEzOyAgICAgICAgLyogUjEzIC0gc21hbGwgZGF0YSByZWFkIHdyaXRlIGFyZWEuICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB4Q29kZTsgICAgICAgLyogUjE0LiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDBmOyAgICAgICAgIC8qIFIxNS4gKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMDsgICAgICAgICAvKiBSMTYuICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTE7ICAgICAgICAgLyogUjE3LiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDEyOyAgICAgICAgIC8qIFIxOC4gKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMzsgICAgICAgICAvKiBSMTkuICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTQ7ICAgICAgICAgLyogUjIwLiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDE1OyAgICAgICAgIC8qIFIyMS4gKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxNjsgICAgICAgICAvKiBSMjIuICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTc7ICAgICAgICAgLyogUjIzLiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDE4OyAgICAgICAgIC8qIFIyNC4gKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxOTsgICAgICAgICAvKiBSMjUuICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MWE7ICAgICAgICAgLyogUjI2LiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDFiOyAgICAgICAgIC8qIFIyNy4gKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxYzsgICAgICAgICAvKiBSMjguICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MWQ7ICAgICAgICAgLyogUjI5LiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDFlOyAgICAgICAgIC8qIFIzMC4gKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIFBsYWNlIGFuIGluaXRpYWwgdmFsdWUgZm9yIGFsbCB0aGUgZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycy4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgdWxSMjsJLyogUjIgLSBzbWFsbCBkYXRhIGFyZWEuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDM7CS8qIFIzLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA0OwkvKiBSNC4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHZQYXJhbWV0ZXJzOy8qIFI1IGNvbnRhaW5zIHRoZSBmdW5jdGlvbiBjYWxsIHBhcmFtZXRlcnMuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDY7CS8qIFI2LiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA3OwkvKiBSNy4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwODsJLyogUjguICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDk7CS8qIFI5LiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDBhOwkvKiBSMTAuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MGI7CS8qIFIxMS4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwYzsJLyogUjEyLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSB1bFIxMzsJLyogUjEzIC0gc21hbGwgZGF0YSByZWFkIHdyaXRlIGFyZWEuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB4Q29kZTsJLyogUjE0LiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDBmOwkvKiBSMTUuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTA7CS8qIFIxNi4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMTsJLyogUjE3LiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDEyOwkvKiBSMTguICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTM7CS8qIFIxOS4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxNDsJLyogUjIwLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDE1OwkvKiBSMjEuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTY7CS8qIFIyMi4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxNzsJLyogUjIzLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDE4OwkvKiBSMjQuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTk7CS8qIFIyNS4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxYTsJLyogUjI2LiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDFiOwkvKiBSMjcuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MWM7CS8qIFIyOC4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxZDsJLyogUjI5LiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDFlOwkvKiBSMzAuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBUaGUgTVNSIGlzIHN0YWNrZWQgYmV0d2VlbiBSMzAgYW5kIFIzMS4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9IHBvcnRJTklUSUFMX01TUl9TVEFURTsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIFRoZSBNU1IgaXMgc3RhY2tlZCBiZXR3ZWVuIFIzMCBhbmQgUjMxLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gcG9ydElOSVRJQUxfTVNSX1NUQVRFOw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDFmOyAvKiBSMzEuICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MWY7CS8qIFIzMS4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgIC8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHRvcCBvZiB0aGUgc3RhY2sgd2UgaGF2ZSBnZW5lcmF0ZWQgc28gdGhpcyBjYW4NCi0gICAgICogYmUgc3RvcmVkIGluIHRoZSB0YXNrIGNvbnRyb2wgYmxvY2sgZm9yIHRoZSB0YXNrLiAqLw0KLSAgICByZXR1cm4gcHhUb3BPZlN0YWNrOw0KKwkvKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSB0b3Agb2YgdGhlIHN0YWNrIHdlIGhhdmUgZ2VuZXJhdGVkIHNvIHRoaXMgY2FuDQorCWJlIHN0b3JlZCBpbiB0aGUgdGFzayBjb250cm9sIGJsb2NrIGZvciB0aGUgdGFzay4gKi8NCisJcmV0dXJuIHB4VG9wT2ZTdGFjazsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogQmFzZVR5cGVfdCB4UG9ydFN0YXJ0U2NoZWR1bGVyKCB2b2lkICkNCiB7DQotICAgIGV4dGVybiB2b2lkKCBfX0ZyZWVSVE9TX2ludGVycnVwdF9IYW5kbGVyICkoIHZvaWQgKTsNCi0gICAgZXh0ZXJuIHZvaWQoIHZTdGFydEZpcnN0VGFzayApKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgKCBfX0ZyZWVSVE9TX2ludGVycnVwdF9IYW5kbGVyICkoIHZvaWQgKTsNCitleHRlcm4gdm9pZCAoIHZTdGFydEZpcnN0VGFzayApKCB2b2lkICk7DQogDQogDQotICAgIC8qIFNldHVwIHRoZSBGcmVlUlRPUyBpbnRlcnJ1cHQgaGFuZGxlci4gIENvZGUgY29waWVkIGZyb20gY3J0MC5zLiAqLw0KLSAgICBhc20gdm9sYXRpbGUgKCAibGEJcjYsIHIwLCBfX0ZyZWVSVE9TX2ludGVycnVwdF9oYW5kbGVyCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgInN3CXI2LCByMSwgcjAJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgImxodSByNywgcjEsIHIwCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICJzaGkgcjcsIHIwLCAweDEyCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgInNoaSByNiwgcjAsIDB4MTYgIiApOw0KKwkvKiBTZXR1cCB0aGUgRnJlZVJUT1MgaW50ZXJydXB0IGhhbmRsZXIuICBDb2RlIGNvcGllZCBmcm9tIGNydDAucy4gKi8NCisJYXNtIHZvbGF0aWxlICggCSJsYQlyNiwgcjAsIF9fRnJlZVJUT1NfaW50ZXJydXB0X2hhbmRsZXIJCVxuXHQiIFwNCisJCQkJCSJzdwlyNiwgcjEsIHIwCQkJCQkJCQkJXG5cdCIgXA0KKwkJCQkJImxodSByNywgcjEsIHIwCQkJCQkJCQkJXG5cdCIgXA0KKwkJCQkJInNoaSByNywgcjAsIDB4MTIJCQkJCQkJCVxuXHQiIFwNCisJCQkJCSJzaGkgcjYsIHIwLCAweDE2ICIgKTsNCiANCi0gICAgLyogU2V0dXAgdGhlIGhhcmR3YXJlIHRvIGdlbmVyYXRlIHRoZSB0aWNrLiAgSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgd2hlbg0KLSAgICAgKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4gKi8NCi0gICAgcHJ2U2V0dXBUaW1lckludGVycnVwdCgpOw0KKwkvKiBTZXR1cCB0aGUgaGFyZHdhcmUgdG8gZ2VuZXJhdGUgdGhlIHRpY2suICBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB3aGVuDQorCXRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLiAqLw0KKwlwcnZTZXR1cFRpbWVySW50ZXJydXB0KCk7DQogDQotICAgIC8qIEFsbG9jYXRlIHRoZSBzdGFjayB0byBiZSB1c2VkIGJ5IHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4gKi8NCi0gICAgcHVsSVNSU3RhY2sgPSAoIHVpbnQzMl90ICogKSBwdlBvcnRNYWxsb2MoIGNvbmZpZ01JTklNQUxfU1RBQ0tfU0laRSAqIHNpemVvZiggU3RhY2tUeXBlX3QgKSApOw0KKwkvKiBBbGxvY2F0ZSB0aGUgc3RhY2sgdG8gYmUgdXNlZCBieSB0aGUgaW50ZXJydXB0IGhhbmRsZXIuICovDQorCXB1bElTUlN0YWNrID0gKCB1aW50MzJfdCAqICkgcHZQb3J0TWFsbG9jKCBjb25maWdNSU5JTUFMX1NUQUNLX1NJWkUgKiBzaXplb2YoIFN0YWNrVHlwZV90ICkgKTsNCiANCi0gICAgLyogUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgZmlyc3QgdGFzayB0aGF0IGlzIGdvaW5nIHRvIHJ1bi4gKi8NCi0gICAgaWYoIHB1bElTUlN0YWNrICE9IE5VTEwgKQ0KLSAgICB7DQotICAgICAgICAvKiBGaWxsIHRoZSBJU1Igc3RhY2sgd2l0aCBhIGtub3duIHZhbHVlIHRvIGZhY2lsaXRhdGUgZGVidWdnaW5nLiAqLw0KLSAgICAgICAgbWVtc2V0KCBwdWxJU1JTdGFjaywgcG9ydElTUl9TVEFDS19GSUxMX1ZBTFVFLCBjb25maWdNSU5JTUFMX1NUQUNLX1NJWkUgKiBzaXplb2YoIFN0YWNrVHlwZV90ICkgKTsNCi0gICAgICAgIHB1bElTUlN0YWNrICs9ICggY29uZmlnTUlOSU1BTF9TVEFDS19TSVpFIC0gMSApOw0KKwkvKiBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBmaXJzdCB0YXNrIHRoYXQgaXMgZ29pbmcgdG8gcnVuLiAqLw0KKwlpZiggcHVsSVNSU3RhY2sgIT0gTlVMTCApDQorCXsNCisJCS8qIEZpbGwgdGhlIElTUiBzdGFjayB3aXRoIGEga25vd24gdmFsdWUgdG8gZmFjaWxpdGF0ZSBkZWJ1Z2dpbmcuICovDQorCQltZW1zZXQoIHB1bElTUlN0YWNrLCBwb3J0SVNSX1NUQUNLX0ZJTExfVkFMVUUsIGNvbmZpZ01JTklNQUxfU1RBQ0tfU0laRSAqIHNpemVvZiggU3RhY2tUeXBlX3QgKSApOw0KKwkJcHVsSVNSU3RhY2sgKz0gKCBjb25maWdNSU5JTUFMX1NUQUNLX1NJWkUgLSAxICk7DQogDQotICAgICAgICAvKiBLaWNrIG9mZiB0aGUgZmlyc3QgdGFzay4gKi8NCi0gICAgICAgIHZTdGFydEZpcnN0VGFzaygpOw0KLSAgICB9DQorCQkvKiBLaWNrIG9mZiB0aGUgZmlyc3QgdGFzay4gKi8NCisJCXZTdGFydEZpcnN0VGFzaygpOw0KKwl9DQogDQotICAgIC8qIFNob3VsZCBub3QgZ2V0IGhlcmUgYXMgdGhlIHRhc2tzIGFyZSBub3cgcnVubmluZyEgKi8NCi0gICAgcmV0dXJuIHBkRkFMU0U7DQorCS8qIFNob3VsZCBub3QgZ2V0IGhlcmUgYXMgdGhlIHRhc2tzIGFyZSBub3cgcnVubmluZyEgKi8NCisJcmV0dXJuIHBkRkFMU0U7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQ0KIHsNCi0gICAgLyogTm90IGltcGxlbWVudGVkLiAqLw0KKwkvKiBOb3QgaW1wbGVtZW50ZWQuICovDQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KQEAgLTIyOSwxOCArMjI3LDE3IEBACiAgKi8NCiB2b2lkIHZQb3J0WWllbGQoIHZvaWQgKQ0KIHsNCi0gICAgZXh0ZXJuIHZvaWQgVlBvcnRZaWVsZEFTTSggdm9pZCApOw0KK2V4dGVybiB2b2lkIFZQb3J0WWllbGRBU00oIHZvaWQgKTsNCiANCi0gICAgLyogUGVyZm9ybSB0aGUgY29udGV4dCBzd2l0Y2ggaW4gYSBjcml0aWNhbCBzZWN0aW9uIHRvIGFzc3VyZSBpdCBpcw0KLSAgICAgKiBub3QgaW50ZXJydXB0ZWQgYnkgdGhlIHRpY2sgSVNSLiAgSXQgaXMgbm90IGEgcHJvYmxlbSB0byBkbyB0aGlzIGFzDQotICAgICAqIGVhY2ggdGFzayBtYWludGFpbnMgaXQncyBvd24gaW50ZXJydXB0IHN0YXR1cy4gKi8NCi0gICAgcG9ydEVOVEVSX0NSSVRJQ0FMKCk7DQotDQotICAgIC8qIEp1bXAgZGlyZWN0bHkgdG8gdGhlIHlpZWxkIGZ1bmN0aW9uIHRvIGVuc3VyZSB0aGVyZSBpcyBubw0KLSAgICAgKiBjb21waWxlciBnZW5lcmF0ZWQgcHJvbG9ndWUgY29kZS4gKi8NCi0gICAgYXNtIHZvbGF0aWxlICggImJyYWxpZCByMTQsIFZQb3J0WWllbGRBU00JCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAib3IgcjAsIHIwLCByMAkJCQkJXG5cdCIpOw0KLSAgICBwb3J0RVhJVF9DUklUSUNBTCgpOw0KKwkvKiBQZXJmb3JtIHRoZSBjb250ZXh0IHN3aXRjaCBpbiBhIGNyaXRpY2FsIHNlY3Rpb24gdG8gYXNzdXJlIGl0IGlzDQorCW5vdCBpbnRlcnJ1cHRlZCBieSB0aGUgdGljayBJU1IuICBJdCBpcyBub3QgYSBwcm9ibGVtIHRvIGRvIHRoaXMgYXMNCisJZWFjaCB0YXNrIG1haW50YWlucyBpdCdzIG93biBpbnRlcnJ1cHQgc3RhdHVzLiAqLw0KKwlwb3J0RU5URVJfQ1JJVElDQUwoKTsNCisJCS8qIEp1bXAgZGlyZWN0bHkgdG8gdGhlIHlpZWxkIGZ1bmN0aW9uIHRvIGVuc3VyZSB0aGVyZSBpcyBubw0KKwkJY29tcGlsZXIgZ2VuZXJhdGVkIHByb2xvZ3VlIGNvZGUuICovDQorCQlhc20gdm9sYXRpbGUgKAkiYnJhbGlkIHIxNCwgVlBvcnRZaWVsZEFTTQkJXG5cdCIgXA0KKwkJCQkJCSJvciByMCwgcjAsIHIwCQkJCQlcblx0IiApOw0KKwlwb3J0RVhJVF9DUklUSUNBTCgpOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCkBAIC0yNDksMjYgKzI0NiwyNiBAQAogICovDQogc3RhdGljIHZvaWQgcHJ2U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApDQogew0KLSAgICBYVG1yQ3RyIHhUaW1lcjsNCi0gICAgY29uc3QgdWludDMyX3QgdWxDb3VudGVyVmFsdWUgPSBjb25maWdDUFVfQ0xPQ0tfSFogLyBjb25maWdUSUNLX1JBVEVfSFo7DQotICAgIFVCYXNlVHlwZV90IHV4TWFzazsNCitYVG1yQ3RyIHhUaW1lcjsNCitjb25zdCB1aW50MzJfdCB1bENvdW50ZXJWYWx1ZSA9IGNvbmZpZ0NQVV9DTE9DS19IWiAvIGNvbmZpZ1RJQ0tfUkFURV9IWjsNCitVQmFzZVR5cGVfdCB1eE1hc2s7DQogDQotICAgIC8qIFRoZSBPUEIgdGltZXIxIGlzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRpY2suICBVc2UgdGhlIHByb3ZpZGVkIGxpYnJhcnkNCi0gICAgICogZnVuY3Rpb25zIHRvIGVuYWJsZSB0aGUgdGltZXIgYW5kIHNldCB0aGUgdGljayBmcmVxdWVuY3kuICovDQotICAgIFhUbXJDdHJfbURpc2FibGUoIFhQQVJfT1BCX1RJTUVSXzFfQkFTRUFERFIsIFhQQVJfT1BCX1RJTUVSXzFfREVWSUNFX0lEICk7DQotICAgIFhUbXJDdHJfSW5pdGlhbGl6ZSggJnhUaW1lciwgWFBBUl9PUEJfVElNRVJfMV9ERVZJQ0VfSUQgKTsNCi0gICAgWFRtckN0cl9tU2V0TG9hZFJlZyggWFBBUl9PUEJfVElNRVJfMV9CQVNFQUREUiwgcG9ydENPVU5URVJfMCwgdWxDb3VudGVyVmFsdWUgKTsNCi0gICAgWFRtckN0cl9tU2V0Q29udHJvbFN0YXR1c1JlZyggWFBBUl9PUEJfVElNRVJfMV9CQVNFQUREUiwgcG9ydENPVU5URVJfMCwgWFRDX0NTUl9MT0FEX01BU0sgfCBYVENfQ1NSX0lOVF9PQ0NVUkVEX01BU0sgKTsNCisJLyogVGhlIE9QQiB0aW1lcjEgaXMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgdGljay4gIFVzZSB0aGUgcHJvdmlkZWQgbGlicmFyeQ0KKwlmdW5jdGlvbnMgdG8gZW5hYmxlIHRoZSB0aW1lciBhbmQgc2V0IHRoZSB0aWNrIGZyZXF1ZW5jeS4gKi8NCisJWFRtckN0cl9tRGlzYWJsZSggWFBBUl9PUEJfVElNRVJfMV9CQVNFQUREUiwgWFBBUl9PUEJfVElNRVJfMV9ERVZJQ0VfSUQgKTsNCisJWFRtckN0cl9Jbml0aWFsaXplKCAmeFRpbWVyLCBYUEFSX09QQl9USU1FUl8xX0RFVklDRV9JRCApOw0KKyAgIAlYVG1yQ3RyX21TZXRMb2FkUmVnKCBYUEFSX09QQl9USU1FUl8xX0JBU0VBRERSLCBwb3J0Q09VTlRFUl8wLCB1bENvdW50ZXJWYWx1ZSApOw0KKwlYVG1yQ3RyX21TZXRDb250cm9sU3RhdHVzUmVnKCBYUEFSX09QQl9USU1FUl8xX0JBU0VBRERSLCBwb3J0Q09VTlRFUl8wLCBYVENfQ1NSX0xPQURfTUFTSyB8IFhUQ19DU1JfSU5UX09DQ1VSRURfTUFTSyApOw0KIA0KLSAgICAvKiBTZXQgdGhlIHRpbWVyIGludGVycnVwdCBlbmFibGUgYml0IHdoaWxlIG1haW50YWluaW5nIHRoZSBvdGhlciBiaXQNCi0gICAgICogc3RhdGVzLiAqLw0KLSAgICB1eE1hc2sgPSBYSW50Y19JbjMyKCAoIFhQQVJfT1BCX0lOVENfMF9CQVNFQUREUiArIFhJTl9JRVJfT0ZGU0VUICkgKTsNCi0gICAgdXhNYXNrIHw9IFhQQVJfT1BCX1RJTUVSXzFfSU5URVJSVVBUX01BU0s7DQotICAgIFhJbnRjX091dDMyKCAoIFhQQVJfT1BCX0lOVENfMF9CQVNFQUREUiArIFhJTl9JRVJfT0ZGU0VUICksICggdXhNYXNrICkgKTsNCisJLyogU2V0IHRoZSB0aW1lciBpbnRlcnJ1cHQgZW5hYmxlIGJpdCB3aGlsZSBtYWludGFpbmluZyB0aGUgb3RoZXIgYml0DQorCXN0YXRlcy4gKi8NCisJdXhNYXNrID0gWEludGNfSW4zMiggKCBYUEFSX09QQl9JTlRDXzBfQkFTRUFERFIgKyBYSU5fSUVSX09GRlNFVCApICk7DQorCXV4TWFzayB8PSBYUEFSX09QQl9USU1FUl8xX0lOVEVSUlVQVF9NQVNLOw0KKwlYSW50Y19PdXQzMiggKCBYUEFSX09QQl9JTlRDXzBfQkFTRUFERFIgKyBYSU5fSUVSX09GRlNFVCApLCAoIHV4TWFzayApICk7DQogDQotICAgIFhUbXJDdHJfU3RhcnQoICZ4VGltZXIsIFhQQVJfT1BCX1RJTUVSXzFfREVWSUNFX0lEICk7DQotICAgIFhUbXJDdHJfbVNldENvbnRyb2xTdGF0dXNSZWcoIFhQQVJfT1BCX1RJTUVSXzFfQkFTRUFERFIsIHBvcnRDT1VOVEVSXzAsIFhUQ19DU1JfRU5BQkxFX1RNUl9NQVNLIHwgWFRDX0NTUl9FTkFCTEVfSU5UX01BU0sgfCBYVENfQ1NSX0FVVE9fUkVMT0FEX01BU0sgfCBYVENfQ1NSX0RPV05fQ09VTlRfTUFTSyB8IFhUQ19DU1JfSU5UX09DQ1VSRURfTUFTSyApOw0KLSAgICBYSW50Y19tQWNrSW50ciggWFBBUl9JTlRDX1NJTkdMRV9CQVNFQUREUiwgMSApOw0KKwlYVG1yQ3RyX1N0YXJ0KCAmeFRpbWVyLCBYUEFSX09QQl9USU1FUl8xX0RFVklDRV9JRCApOw0KKwlYVG1yQ3RyX21TZXRDb250cm9sU3RhdHVzUmVnKFhQQVJfT1BCX1RJTUVSXzFfQkFTRUFERFIsIHBvcnRDT1VOVEVSXzAsIFhUQ19DU1JfRU5BQkxFX1RNUl9NQVNLIHwgWFRDX0NTUl9FTkFCTEVfSU5UX01BU0sgfCBYVENfQ1NSX0FVVE9fUkVMT0FEX01BU0sgfCBYVENfQ1NSX0RPV05fQ09VTlRfTUFTSyB8IFhUQ19DU1JfSU5UX09DQ1VSRURfTUFTSyApOw0KKwlYSW50Y19tQWNrSW50ciggWFBBUl9JTlRDX1NJTkdMRV9CQVNFQUREUiwgMSApOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCkBAIC0yODAsNTMgKzI3Nyw1NyBAQAogICovDQogdm9pZCB2VGFza0lTUkhhbmRsZXIoIHZvaWQgKQ0KIHsNCi0gICAgc3RhdGljIHVpbnQzMl90IHVsUGVuZGluZzsNCitzdGF0aWMgdWludDMyX3QgdWxQZW5kaW5nOw0KIA0KLSAgICAvKiBXaGljaCBpbnRlcnJ1cHRzIGFyZSBwZW5kaW5nPyAqLw0KLSAgICB1bFBlbmRpbmcgPSBYSW50Y19JbjMyKCAoIFhQQVJfSU5UQ19TSU5HTEVfQkFTRUFERFIgKyBYSU5fSVZSX09GRlNFVCApICk7DQorCS8qIFdoaWNoIGludGVycnVwdHMgYXJlIHBlbmRpbmc/ICovDQorCXVsUGVuZGluZyA9IFhJbnRjX0luMzIoICggWFBBUl9JTlRDX1NJTkdMRV9CQVNFQUREUiArIFhJTl9JVlJfT0ZGU0VUICkgKTsNCiANCi0gICAgaWYoIHVsUGVuZGluZyA8IFhQQVJfSU5UQ19NQVhfTlVNX0lOVFJfSU5QVVRTICkNCi0gICAgew0KLSAgICAgICAgc3RhdGljIFhJbnRjX1ZlY3RvclRhYmxlRW50cnkgKiBweFRhYmxlUHRyOw0KLSAgICAgICAgc3RhdGljIFhJbnRjX0NvbmZpZyAqIHB4Q29uZmlnOw0KLSAgICAgICAgc3RhdGljIHVpbnQzMl90IHVsSW50ZXJydXB0TWFzazsNCisJaWYoIHVsUGVuZGluZyA8IFhQQVJfSU5UQ19NQVhfTlVNX0lOVFJfSU5QVVRTICkNCisJew0KKwkJc3RhdGljIFhJbnRjX1ZlY3RvclRhYmxlRW50cnkgKnB4VGFibGVQdHI7DQorCQlzdGF0aWMgWEludGNfQ29uZmlnICpweENvbmZpZzsNCisJCXN0YXRpYyB1aW50MzJfdCB1bEludGVycnVwdE1hc2s7DQogDQotICAgICAgICB1bEludGVycnVwdE1hc2sgPSAoIHVpbnQzMl90ICkgMSA8PCB1bFBlbmRpbmc7DQorCQl1bEludGVycnVwdE1hc2sgPSAoIHVpbnQzMl90ICkgMSA8PCB1bFBlbmRpbmc7DQogDQotICAgICAgICAvKiBHZXQgdGhlIGNvbmZpZ3VyYXRpb24gZGF0YSB1c2luZyB0aGUgZGV2aWNlIElEICovDQotICAgICAgICBweENvbmZpZyA9ICZYSW50Y19Db25maWdUYWJsZVsgKCB1aW50MzJfdCApIFhQQVJfSU5UQ19TSU5HTEVfREVWSUNFX0lEIF07DQorCQkvKiBHZXQgdGhlIGNvbmZpZ3VyYXRpb24gZGF0YSB1c2luZyB0aGUgZGV2aWNlIElEICovDQorCQlweENvbmZpZyA9ICZYSW50Y19Db25maWdUYWJsZVsgKCB1aW50MzJfdCApIFhQQVJfSU5UQ19TSU5HTEVfREVWSUNFX0lEIF07DQogDQotICAgICAgICBweFRhYmxlUHRyID0gJiggcHhDb25maWctPkhhbmRsZXJUYWJsZVsgdWxQZW5kaW5nIF0gKTsNCi0NCi0gICAgICAgIGlmKCBweENvbmZpZy0+QWNrQmVmb3JlU2VydmljZSAmICggdWxJbnRlcnJ1cHRNYXNrICkgKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIFhJbnRjX21BY2tJbnRyKCBweENvbmZpZy0+QmFzZUFkZHJlc3MsIHVsSW50ZXJydXB0TWFzayApOw0KLSAgICAgICAgICAgIHB4VGFibGVQdHItPkhhbmRsZXIoIHB4VGFibGVQdHItPkNhbGxCYWNrUmVmICk7DQotICAgICAgICB9DQotICAgICAgICBlbHNlDQotICAgICAgICB7DQotICAgICAgICAgICAgcHhUYWJsZVB0ci0+SGFuZGxlciggcHhUYWJsZVB0ci0+Q2FsbEJhY2tSZWYgKTsNCi0gICAgICAgICAgICBYSW50Y19tQWNrSW50ciggcHhDb25maWctPkJhc2VBZGRyZXNzLCB1bEludGVycnVwdE1hc2sgKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KKwkJcHhUYWJsZVB0ciA9ICYoIHB4Q29uZmlnLT5IYW5kbGVyVGFibGVbIHVsUGVuZGluZyBdICk7DQorCQlpZiggcHhDb25maWctPkFja0JlZm9yZVNlcnZpY2UgJiAoIHVsSW50ZXJydXB0TWFzayAgKSApDQorCQl7DQorCQkJWEludGNfbUFja0ludHIoIHB4Q29uZmlnLT5CYXNlQWRkcmVzcywgdWxJbnRlcnJ1cHRNYXNrICk7DQorCQkJcHhUYWJsZVB0ci0+SGFuZGxlciggcHhUYWJsZVB0ci0+Q2FsbEJhY2tSZWYgKTsNCisJCX0NCisJCWVsc2UNCisJCXsNCisJCQlweFRhYmxlUHRyLT5IYW5kbGVyKCBweFRhYmxlUHRyLT5DYWxsQmFja1JlZiApOw0KKwkJCVhJbnRjX21BY2tJbnRyKCBweENvbmZpZy0+QmFzZUFkZHJlc3MsIHVsSW50ZXJydXB0TWFzayApOw0KKwkJfQ0KKwl9DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qDQogICogSGFuZGxlciBmb3IgdGhlIHRpbWVyIGludGVycnVwdC4NCiAgKi8NCi12b2lkIHZUaWNrSVNSKCB2b2lkICogcHZCYXNlQWRkcmVzcyApDQordm9pZCB2VGlja0lTUiggdm9pZCAqcHZCYXNlQWRkcmVzcyApDQogew0KLSAgICB1aW50MzJfdCB1bENTUjsNCit1aW50MzJfdCB1bENTUjsNCiANCi0gICAgLyogSW5jcmVtZW50IHRoZSBSVE9TIHRpY2sgLSB0aGlzIG1pZ2h0IGNhdXNlIGEgdGFzayB0byB1bmJsb2NrLiAqLw0KLSAgICBpZiggeFRhc2tJbmNyZW1lbnRUaWNrKCkgIT0gcGRGQUxTRSApDQotICAgIHsNCi0gICAgICAgIHZUYXNrU3dpdGNoQ29udGV4dCgpOw0KLSAgICB9DQorCS8qIEluY3JlbWVudCB0aGUgUlRPUyB0aWNrIC0gdGhpcyBtaWdodCBjYXVzZSBhIHRhc2sgdG8gdW5ibG9jay4gKi8NCisJaWYoIHhUYXNrSW5jcmVtZW50VGljaygpICE9IHBkRkFMU0UgKQ0KKwl7DQorCQl2VGFza1N3aXRjaENvbnRleHQoKTsNCisJfQ0KIA0KLSAgICAvKiBDbGVhciB0aGUgdGltZXIgaW50ZXJydXB0ICovDQotICAgIHVsQ1NSID0gWFRtckN0cl9tR2V0Q29udHJvbFN0YXR1c1JlZyggWFBBUl9PUEJfVElNRVJfMV9CQVNFQUREUiwgMCApOw0KLSAgICBYVG1yQ3RyX21TZXRDb250cm9sU3RhdHVzUmVnKCBYUEFSX09QQl9USU1FUl8xX0JBU0VBRERSLCBwb3J0Q09VTlRFUl8wLCB1bENTUiApOw0KKwkvKiBDbGVhciB0aGUgdGltZXIgaW50ZXJydXB0ICovDQorCXVsQ1NSID0gWFRtckN0cl9tR2V0Q29udHJvbFN0YXR1c1JlZyhYUEFSX09QQl9USU1FUl8xX0JBU0VBRERSLCAwKTsNCisJWFRtckN0cl9tU2V0Q29udHJvbFN0YXR1c1JlZyggWFBBUl9PUEJfVElNRVJfMV9CQVNFQUREUiwgcG9ydENPVU5URVJfMCwgdWxDU1IgKTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorDQorDQorDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvR0NDL01pY3JvQmxhemUvcG9ydG1hY3JvLmggYi9wb3J0YWJsZS9HQ0MvTWljcm9CbGF6ZS9wb3J0bWFjcm8uaAppbmRleCA0ODZkNjFmLi45NDg5MDIwIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9HQ0MvTWljcm9CbGF6ZS9wb3J0bWFjcm8uaAorKysgYi9wb3J0YWJsZS9HQ0MvTWljcm9CbGF6ZS9wb3J0bWFjcm8uaApAQCAtMjYsMTEgKzI2LDExIEBACiAgKi8NCiANCiAjaWZuZGVmIFBPUlRNQUNST19IDQotICAgICNkZWZpbmUgUE9SVE1BQ1JPX0gNCisjZGVmaW5lIFBPUlRNQUNST19IDQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgZXh0ZXJuICJDIiB7DQotICAgICNlbmRpZg0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgKiBQb3J0IHNwZWNpZmljIGRlZmluaXRpb25zLg0KQEAgLTQzLDg1ICs0Myw4NCBAQAogICovDQogDQogLyogVHlwZSBkZWZpbml0aW9ucy4gKi8NCi0gICAgI2RlZmluZSBwb3J0Q0hBUiAgICAgICAgICBjaGFyDQotICAgICNkZWZpbmUgcG9ydEZMT0FUICAgICAgICAgZmxvYXQNCi0gICAgI2RlZmluZSBwb3J0RE9VQkxFICAgICAgICBkb3VibGUNCi0gICAgI2RlZmluZSBwb3J0TE9ORyAgICAgICAgICBsb25nDQotICAgICNkZWZpbmUgcG9ydFNIT1JUICAgICAgICAgc2hvcnQNCi0gICAgI2RlZmluZSBwb3J0U1RBQ0tfVFlQRSAgICB1aW50MzJfdA0KLSAgICAjZGVmaW5lIHBvcnRCQVNFX1RZUEUgICAgIGxvbmcNCisjZGVmaW5lIHBvcnRDSEFSCQljaGFyDQorI2RlZmluZSBwb3J0RkxPQVQJCWZsb2F0DQorI2RlZmluZSBwb3J0RE9VQkxFCQlkb3VibGUNCisjZGVmaW5lIHBvcnRMT05HCQlsb25nDQorI2RlZmluZSBwb3J0U0hPUlQJCXNob3J0DQorI2RlZmluZSBwb3J0U1RBQ0tfVFlQRQl1aW50MzJfdA0KKyNkZWZpbmUgcG9ydEJBU0VfVFlQRQlsb25nDQogDQotICAgIHR5cGVkZWYgcG9ydFNUQUNLX1RZUEUgICBTdGFja1R5cGVfdDsNCi0gICAgdHlwZWRlZiBsb25nICAgICAgICAgICAgIEJhc2VUeXBlX3Q7DQotICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyAgICBVQmFzZVR5cGVfdDsNCit0eXBlZGVmIHBvcnRTVEFDS19UWVBFIFN0YWNrVHlwZV90Ow0KK3R5cGVkZWYgbG9uZyBCYXNlVHlwZV90Ow0KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBVQmFzZVR5cGVfdDsNCiANCi0gICAgI2lmICggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCi0gICAgICAgIHR5cGVkZWYgdWludDE2X3QgICAgIFRpY2tUeXBlX3Q7DQotICAgICAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgICAgICAgICAgICggVGlja1R5cGVfdCApIDB4ZmZmZg0KLSAgICAjZWxzZQ0KLSAgICAgICAgdHlwZWRlZiB1aW50MzJfdCAgICAgVGlja1R5cGVfdDsNCi0gICAgICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAgICAgICAgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQorI2lmKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KKwl0eXBlZGVmIHVpbnQxNl90IFRpY2tUeXBlX3Q7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIFRpY2tUeXBlX3QgKSAweGZmZmYNCisjZWxzZQ0KKwl0eXBlZGVmIHVpbnQzMl90IFRpY2tUeXBlX3Q7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwNCiANCi0vKiAzMi1iaXQgdGljayB0eXBlIG9uIGEgMzItYml0IGFyY2hpdGVjdHVyZSwgc28gcmVhZHMgb2YgdGhlIHRpY2sgY291bnQgZG8NCi0gKiBub3QgbmVlZCB0byBiZSBndWFyZGVkIHdpdGggYSBjcml0aWNhbCBzZWN0aW9uLiAqLw0KLSAgICAgICAgI2RlZmluZSBwb3J0VElDS19UWVBFX0lTX0FUT01JQyAgICAxDQotICAgICNlbmRpZg0KKwkvKiAzMi1iaXQgdGljayB0eXBlIG9uIGEgMzItYml0IGFyY2hpdGVjdHVyZSwgc28gcmVhZHMgb2YgdGhlIHRpY2sgY291bnQgZG8NCisJbm90IG5lZWQgdG8gYmUgZ3VhcmRlZCB3aXRoIGEgY3JpdGljYWwgc2VjdGlvbi4gKi8NCisJI2RlZmluZSBwb3J0VElDS19UWVBFX0lTX0FUT01JQyAxDQorI2VuZGlmDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogSW50ZXJydXB0IGNvbnRyb2wgbWFjcm9zLiAqLw0KLSAgICB2b2lkIG1pY3JvYmxhemVfZGlzYWJsZV9pbnRlcnJ1cHRzKCB2b2lkICk7DQotICAgIHZvaWQgbWljcm9ibGF6ZV9lbmFibGVfaW50ZXJydXB0cyggdm9pZCApOw0KLSAgICAjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAgICBtaWNyb2JsYXplX2Rpc2FibGVfaW50ZXJydXB0cygpDQotICAgICNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkgICAgIG1pY3JvYmxhemVfZW5hYmxlX2ludGVycnVwdHMoKQ0KK3ZvaWQgbWljcm9ibGF6ZV9kaXNhYmxlX2ludGVycnVwdHMoIHZvaWQgKTsNCit2b2lkIG1pY3JvYmxhemVfZW5hYmxlX2ludGVycnVwdHMoIHZvaWQgKTsNCisjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKQltaWNyb2JsYXplX2Rpc2FibGVfaW50ZXJydXB0cygpDQorI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKQkJbWljcm9ibGF6ZV9lbmFibGVfaW50ZXJydXB0cygpDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogQ3JpdGljYWwgc2VjdGlvbiBtYWNyb3MuICovDQotICAgIHZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICk7DQotICAgIHZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCi0gICAgI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKSAgICAgICAgICAgICAgXA0KLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBleHRlcm4gVUJhc2VUeXBlX3QgdXhDcml0aWNhbE5lc3Rpbmc7IFwNCi0gICAgICAgIG1pY3JvYmxhemVfZGlzYWJsZV9pbnRlcnJ1cHRzKCk7ICAgICAgXA0KLSAgICAgICAgdXhDcml0aWNhbE5lc3RpbmcrKzsgICAgICAgICAgICAgICAgICBcDQotICAgIH0NCit2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCggdm9pZCApOw0KK3ZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCisjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpCQl7CQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCWV4dGVybiBVQmFzZVR5cGVfdCB1eENyaXRpY2FsTmVzdGluZzsJXA0KKwkJCQkJCQkJCQltaWNyb2JsYXplX2Rpc2FibGVfaW50ZXJydXB0cygpOwkJCQkJXA0KKwkJCQkJCQkJCQl1eENyaXRpY2FsTmVzdGluZysrOwkJCQkJCQkJXA0KKwkJCQkJCQkJCX0NCiANCi0gICAgI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpICAgICAgICAgICAgICAgICAgXA0KLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBleHRlcm4gVUJhc2VUeXBlX3QgdXhDcml0aWNhbE5lc3Rpbmc7ICAgIFwNCi0gICAgICAgIC8qIEludGVycnVwdHMgYXJlIGRpc2FibGVkLCBzbyB3ZSBjYW4gKi8gXA0KLSAgICAgICAgLyogYWNjZXNzIHRoZSB2YXJpYWJsZSBkaXJlY3RseS4gKi8gICAgICBcDQotICAgICAgICB1eENyaXRpY2FsTmVzdGluZy0tOyAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGlmKCB1eENyaXRpY2FsTmVzdGluZyA9PSAwICkgICAgICAgICAgICAgXA0KLSAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogVGhlIG5lc3RpbmcgaGFzIHVud291bmQgYW5kIHdlIFwNCi0gICAgICAgICAgICAgKiBjYW4gZW5hYmxlIGludGVycnVwdHMgYWdhaW4uICovIFwNCi0gICAgICAgICAgICBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKTsgICAgICAgICAgIFwNCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgfQ0KKyNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKQkJCXsJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJZXh0ZXJuIFVCYXNlVHlwZV90IHV4Q3JpdGljYWxOZXN0aW5nOwlcDQorCQkJCQkJCQkJCS8qIEludGVycnVwdHMgYXJlIGRpc2FibGVkLCBzbyB3ZSBjYW4gKi8JCQlcDQorCQkJCQkJCQkJCS8qIGFjY2VzcyB0aGUgdmFyaWFibGUgZGlyZWN0bHkuICovCQkJCQlcDQorCQkJCQkJCQkJCXV4Q3JpdGljYWxOZXN0aW5nLS07CQkJCQkJCQlcDQorCQkJCQkJCQkJCWlmKCB1eENyaXRpY2FsTmVzdGluZyA9PSAwICkJCQlcDQorCQkJCQkJCQkJCXsJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJLyogVGhlIG5lc3RpbmcgaGFzIHVud291bmQgYW5kIHdlIAkJCQlcDQorCQkJCQkJCQkJCQljYW4gZW5hYmxlIGludGVycnVwdHMgYWdhaW4uICovCQkJCQlcDQorCQkJCQkJCQkJCQlwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKTsJCQkJCQlcDQorCQkJCQkJCQkJCX0JCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCX0NCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBUYXNrIHV0aWxpdGllcy4gKi8NCi0gICAgdm9pZCB2UG9ydFlpZWxkKCB2b2lkICk7DQotICAgICNkZWZpbmUgcG9ydFlJRUxEKCkgICAgICAgICAgICAgdlBvcnRZaWVsZCgpDQordm9pZCB2UG9ydFlpZWxkKCB2b2lkICk7DQorI2RlZmluZSBwb3J0WUlFTEQoKSB2UG9ydFlpZWxkKCkNCiANCi0gICAgdm9pZCB2VGFza1N3aXRjaENvbnRleHQoKTsNCi0gICAgI2RlZmluZSBwb3J0WUlFTERfRlJPTV9JU1IoKSAgICB2VGFza1N3aXRjaENvbnRleHQoKQ0KK3ZvaWQgdlRhc2tTd2l0Y2hDb250ZXh0KCk7DQorI2RlZmluZSBwb3J0WUlFTERfRlJPTV9JU1IoKSB2VGFza1N3aXRjaENvbnRleHQoKQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIEhhcmR3YXJlIHNwZWNpZmljcy4gKi8NCi0gICAgI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQgICAgNA0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEggICAgICAoIC0xICkNCi0gICAgI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMgICAgKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCi0gICAgI2RlZmluZSBwb3J0Tk9QKCkgICAgYXNtIHZvbGF0aWxlICggIk5PUCIgKQ0KKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UCQkJNA0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJCSggLTEgKQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TCQkJKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCisjZGVmaW5lIHBvcnROT1AoKQkJCQkJYXNtIHZvbGF0aWxlICggIk5PUCIgKQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCi0gICAgI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICAgICAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KIA0KLSAgICAjaWZkZWYgX19jcGx1c3BsdXMNCi0gICAgICAgIH0NCi0gICAgI2VuZGlmDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KIA0KICNlbmRpZiAvKiBQT1JUTUFDUk9fSCAqLw0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0dDQy9NaWNyb0JsYXplVjgvcG9ydC5jIGIvcG9ydGFibGUvR0NDL01pY3JvQmxhemVWOC9wb3J0LmMKaW5kZXggZWRkNTE4Ni4uYmQ3MGYyYSAxMDA2NDQKLS0tIGEvcG9ydGFibGUvR0NDL01pY3JvQmxhemVWOC9wb3J0LmMKKysrIGIvcG9ydGFibGUvR0NDL01pY3JvQmxhemVWOC9wb3J0LmMKQEAgLTI2LDggKzI2LDggQEAKICAqLw0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0qIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBNaWNyb0JsYXplIHBvcnQuDQotKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyAqIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBNaWNyb0JsYXplIHBvcnQuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiANCiAvKiBTY2hlZHVsZXIgaW5jbHVkZXMuICovDQpAQCAtNDMsMjAgKzQzLDIwIEBACiAjaW5jbHVkZSA8bWljcm9ibGF6ZV9leGNlcHRpb25zX2cuaD4NCiANCiAvKiBUYXNrcyBhcmUgc3RhcnRlZCB3aXRoIGEgY3JpdGljYWwgc2VjdGlvbiBuZXN0aW5nIG9mIDAgLSBob3dldmVyLCBwcmlvciB0bw0KLSAqIHRoZSBzY2hlZHVsZXIgYmVpbmcgY29tbWVuY2VkIGludGVycnVwdHMgc2hvdWxkIG5vdCBiZSBlbmFibGVkLCBzbyB0aGUgY3JpdGljYWwNCi0gKiBuZXN0aW5nIHZhcmlhYmxlIGlzIGluaXRpYWxpc2VkIHRvIGEgbm9uLXplcm8gdmFsdWUuICovDQotI2RlZmluZSBwb3J0SU5JVElBTF9ORVNUSU5HX1ZBTFVFICAgICggMHhmZiApDQordGhlIHNjaGVkdWxlciBiZWluZyBjb21tZW5jZWQgaW50ZXJydXB0cyBzaG91bGQgbm90IGJlIGVuYWJsZWQsIHNvIHRoZSBjcml0aWNhbA0KK25lc3RpbmcgdmFyaWFibGUgaXMgaW5pdGlhbGlzZWQgdG8gYSBub24temVybyB2YWx1ZS4gKi8NCisjZGVmaW5lIHBvcnRJTklUSUFMX05FU1RJTkdfVkFMVUUJKCAweGZmICkNCiANCi0vKiBUaGUgYml0IHdpdGhpbiB0aGUgTVNSIHJlZ2lzdGVyIHRoYXQgZW5hYmxlZC9kaXNhYmxlcyBpbnRlcnJ1cHRzIGFuZA0KLSAqIGV4Y2VwdGlvbnMgcmVzcGVjdGl2ZWx5LiAqLw0KLSNkZWZpbmUgcG9ydE1TUl9JRSAgICAgICAgICAgICAgICAgICAoIDB4MDJVICkNCi0jZGVmaW5lIHBvcnRNU1JfRUUgICAgICAgICAgICAgICAgICAgKCAweDEwMFUgKQ0KKy8qIFRoZSBiaXQgd2l0aGluIHRoZSBNU1IgcmVnaXN0ZXIgdGhhdCBlbmFibGVkL2Rpc2FibGVzIGludGVycnVwdHMgYW5kIA0KK2V4Y2VwdGlvbnMgcmVzcGVjdGl2ZWx5LiAqLw0KKyNkZWZpbmUgcG9ydE1TUl9JRQkJCQkJKCAweDAyVSApDQorI2RlZmluZSBwb3J0TVNSX0VFCQkJCQkoIDB4MTAwVSApDQogDQogLyogSWYgdGhlIGZsb2F0aW5nIHBvaW50IHVuaXQgaXMgaW5jbHVkZWQgaW4gdGhlIE1pY3JvQmxhemUgYnVpbGQsIHRoZW4gdGhlDQotICogRlNSIHJlZ2lzdGVyIGlzIHNhdmVkIGFzIHBhcnQgb2YgdGhlIHRhc2sgY29udGV4dC4gIHBvcnRJTklUSUFMX0ZTUiBpcyB0aGUgdmFsdWUNCi0gKiBnaXZlbiB0byB0aGUgRlNSIHJlZ2lzdGVyIHdoZW4gdGhlIGluaXRpYWwgY29udGV4dCBpcyBzZXQgdXAgZm9yIGEgdGFzayBiZWluZw0KLSAqIGNyZWF0ZWQuICovDQotI2RlZmluZSBwb3J0SU5JVElBTF9GU1IgICAgICAgICAgICAgICggMFUgKQ0KK0ZTUiByZWdpc3RlciBpcyBzYXZlZCBhcyBwYXJ0IG9mIHRoZSB0YXNrIGNvbnRleHQuICBwb3J0SU5JVElBTF9GU1IgaXMgdGhlIHZhbHVlDQorZ2l2ZW4gdG8gdGhlIEZTUiByZWdpc3RlciB3aGVuIHRoZSBpbml0aWFsIGNvbnRleHQgaXMgc2V0IHVwIGZvciBhIHRhc2sgYmVpbmcNCitjcmVhdGVkLiAqLw0KKyNkZWZpbmUgcG9ydElOSVRJQUxfRlNSCQkJCSggMFUgKQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qDQpAQCAtNzIsMjcgKzcyLDI3IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBDb3VudHMgdGhlIG5lc3RpbmcgZGVwdGggb2YgY2FsbHMgdG8gcG9ydEVOVEVSX0NSSVRJQ0FMKCkuICBFYWNoIHRhc2sNCi0gKiBtYWludGFpbnMgaXRzIG93biBjb3VudCwgc28gdGhpcyB2YXJpYWJsZSBpcyBzYXZlZCBhcyBwYXJ0IG9mIHRoZSB0YXNrDQotICogY29udGV4dC4gKi8NCittYWludGFpbnMgaXRzIG93biBjb3VudCwgc28gdGhpcyB2YXJpYWJsZSBpcyBzYXZlZCBhcyBwYXJ0IG9mIHRoZSB0YXNrDQorY29udGV4dC4gKi8NCiB2b2xhdGlsZSBVQmFzZVR5cGVfdCB1eENyaXRpY2FsTmVzdGluZyA9IHBvcnRJTklUSUFMX05FU1RJTkdfVkFMVUU7DQogDQogLyogVGhpcyBwb3J0IHVzZXMgYSBzZXBhcmF0ZSBzdGFjayBmb3IgaW50ZXJydXB0cy4gIFRoaXMgcHJldmVudHMgdGhlIHN0YWNrIG9mDQotICogZXZlcnkgdGFzayBuZWVkaW5nIHRvIGJlIGxhcmdlIGVub3VnaCB0byBob2xkIGFuIGVudGlyZSBpbnRlcnJ1cHQgc3RhY2sgb24gdG9wDQotICogb2YgdGhlIHRhc2sgc3RhY2suICovDQotdWludDMyX3QgKiBwdWxJU1JTdGFjazsNCitldmVyeSB0YXNrIG5lZWRpbmcgdG8gYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYW4gZW50aXJlIGludGVycnVwdCBzdGFjayBvbiB0b3ANCitvZiB0aGUgdGFzayBzdGFjay4gKi8NCit1aW50MzJfdCAqcHVsSVNSU3RhY2s7DQogDQogLyogSWYgYW4gaW50ZXJydXB0IHJlcXVlc3RzIGEgY29udGV4dCBzd2l0Y2gsIHRoZW4gdWxUYXNrU3dpdGNoUmVxdWVzdGVkIHdpbGwNCi0gKiBnZXQgc2V0IHRvIDEuICB1bFRhc2tTd2l0Y2hSZXF1ZXN0ZWQgaXMgaW5zcGVjdGVkIGp1c3QgYmVmb3JlIHRoZSBtYWluIGludGVycnVwdA0KLSAqIGhhbmRsZXIgZXhpdHMuICBJZiwgYXQgdGhhdCB0aW1lLCB1bFRhc2tTd2l0Y2hSZXF1ZXN0ZWQgaXMgc2V0IHRvIDEsIHRoZSBrZXJuZWwNCi0gKiB3aWxsIGNhbGwgdlRhc2tTd2l0Y2hDb250ZXh0KCkgdG8gZW5zdXJlIHRoZSB0YXNrIHRoYXQgcnVucyBpbW1lZGlhdGVseSBhZnRlcg0KLSAqIHRoZSBpbnRlcnJ1cHQgZXhpc3RzIGlzIHRoZSBoaWdoZXN0IHByaW9yaXR5IHRhc2sgdGhhdCBpcyBhYmxlIHRvIHJ1bi4gIFRoaXMgaXMNCi0gKiBhbiB1bnVzdWFsIG1lY2hhbmlzbSwgYnV0IGlzIHVzZWQgZm9yIHRoaXMgcG9ydCBiZWNhdXNlIGEgc2luZ2xlIGludGVycnVwdCBjYW4NCi0gKiBjYXVzZSB0aGUgc2VydmljaW5nIG9mIG11bHRpcGxlIHBlcmlwaGVyYWxzIC0gYW5kIGl0IGlzIGluZWZmaWNpZW50IHRvIGNhbGwNCi0gKiB2VGFza1N3aXRjaENvbnRleHQoKSBtdWx0aXBsZSB0aW1lcyBhcyBlYWNoIHBlcmlwaGVyYWwgaXMgc2VydmljZWQuICovDQorZ2V0IHNldCB0byAxLiAgdWxUYXNrU3dpdGNoUmVxdWVzdGVkIGlzIGluc3BlY3RlZCBqdXN0IGJlZm9yZSB0aGUgbWFpbiBpbnRlcnJ1cHQNCitoYW5kbGVyIGV4aXRzLiAgSWYsIGF0IHRoYXQgdGltZSwgdWxUYXNrU3dpdGNoUmVxdWVzdGVkIGlzIHNldCB0byAxLCB0aGUga2VybmVsDQord2lsbCBjYWxsIHZUYXNrU3dpdGNoQ29udGV4dCgpIHRvIGVuc3VyZSB0aGUgdGFzayB0aGF0IHJ1bnMgaW1tZWRpYXRlbHkgYWZ0ZXINCit0aGUgaW50ZXJydXB0IGV4aXN0cyBpcyB0aGUgaGlnaGVzdCBwcmlvcml0eSB0YXNrIHRoYXQgaXMgYWJsZSB0byBydW4uICBUaGlzIGlzDQorYW4gdW51c3VhbCBtZWNoYW5pc20sIGJ1dCBpcyB1c2VkIGZvciB0aGlzIHBvcnQgYmVjYXVzZSBhIHNpbmdsZSBpbnRlcnJ1cHQgY2FuDQorY2F1c2UgdGhlIHNlcnZpY2luZyBvZiBtdWx0aXBsZSBwZXJpcGhlcmFscyAtIGFuZCBpdCBpcyBpbmVmZmljaWVudCB0byBjYWxsDQordlRhc2tTd2l0Y2hDb250ZXh0KCkgbXVsdGlwbGUgdGltZXMgYXMgZWFjaCBwZXJpcGhlcmFsIGlzIHNlcnZpY2VkLiAqLw0KIHZvbGF0aWxlIHVpbnQzMl90IHVsVGFza1N3aXRjaFJlcXVlc3RlZCA9IDBVTDsNCiANCiAvKiBUaGUgaW5zdGFuY2Ugb2YgdGhlIGludGVycnVwdCBjb250cm9sbGVyIHVzZWQgYnkgdGhpcyBwb3J0LiAgVGhpcyBpcyByZXF1aXJlZA0KLSAqIGJ5IHRoZSBYaWxpbnggbGlicmFyeSBBUEkgZnVuY3Rpb25zLiAqLw0KK2J5IHRoZSBYaWxpbnggbGlicmFyeSBBUEkgZnVuY3Rpb25zLiAqLw0KIHN0YXRpYyBYSW50YyB4SW50ZXJydXB0Q29udHJvbGxlckluc3RhbmNlOw0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KQEAgLTEwMywxNzQgKzEwMywxNzIgQEAKICAqDQogICogU2VlIHRoZSBwb3J0YWJsZS5oIGhlYWRlciBmaWxlLg0KICAqLw0KLVN0YWNrVHlwZV90ICogcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqIHB4VG9wT2ZTdGFjaywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFza0Z1bmN0aW9uX3QgcHhDb2RlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICogcHZQYXJhbWV0ZXJzICkNCitTdGFja1R5cGVfdCAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqcHhUb3BPZlN0YWNrLCBUYXNrRnVuY3Rpb25fdCBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycyApDQogew0KLSAgICBleHRlcm4gdm9pZCAqIF9TREEyX0JBU0VfLCAqIF9TREFfQkFTRV87DQotICAgIGNvbnN0IHVpbnQzMl90IHVsUjIgPSAoIHVpbnQzMl90ICkgJl9TREEyX0JBU0VfOw0KLSAgICBjb25zdCB1aW50MzJfdCB1bFIxMyA9ICggdWludDMyX3QgKSAmX1NEQV9CQVNFXzsNCitleHRlcm4gdm9pZCAqX1NEQTJfQkFTRV8sICpfU0RBX0JBU0VfOw0KK2NvbnN0IHVpbnQzMl90IHVsUjIgPSAoIHVpbnQzMl90ICkgJl9TREEyX0JBU0VfOw0KK2NvbnN0IHVpbnQzMl90IHVsUjEzID0gKCB1aW50MzJfdCApICZfU0RBX0JBU0VfOw0KIA0KLSAgICAvKiBQbGFjZSBhIGZldyBieXRlcyBvZiBrbm93biB2YWx1ZXMgb24gdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suDQotICAgICAqIFRoaXMgaXMgZXNzZW50aWFsIGZvciB0aGUgTWljcm9ibGF6ZSBwb3J0IGFuZCB0aGVzZSBsaW5lcyBtdXN0DQotICAgICAqIG5vdCBiZSBvbWl0dGVkLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDAwMDAwMDA7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDAwMDAwMDA7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDAwMDAwMDA7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkvKiBQbGFjZSBhIGZldyBieXRlcyBvZiBrbm93biB2YWx1ZXMgb24gdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suDQorCVRoaXMgaXMgZXNzZW50aWFsIGZvciB0aGUgTWljcm9ibGF6ZSBwb3J0IGFuZCB0aGVzZSBsaW5lcyBtdXN0DQorCW5vdCBiZSBvbWl0dGVkLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDAwMDAwMDA7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDAwMDAwMDA7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDAwMDAwMDA7DQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAjaWYgKCBYUEFSX01JQ1JPQkxBWkVfVVNFX0ZQVSAhPSAwICkNCi0gICAgICAgIC8qIFRoZSBGU1IgdmFsdWUgcGxhY2VkIGluIHRoZSBpbml0aWFsIHRhc2sgY29udGV4dCBpcyBqdXN0IDAuICovDQotICAgICAgICAqcHhUb3BPZlN0YWNrID0gcG9ydElOSVRJQUxfRlNSOw0KLSAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICNlbmRpZg0KKwkjaWYoIFhQQVJfTUlDUk9CTEFaRV9VU0VfRlBVICE9IDAgKQ0KKwkJLyogVGhlIEZTUiB2YWx1ZSBwbGFjZWQgaW4gdGhlIGluaXRpYWwgdGFzayBjb250ZXh0IGlzIGp1c3QgMC4gKi8NCisJCSpweFRvcE9mU3RhY2sgPSBwb3J0SU5JVElBTF9GU1I7DQorCQlweFRvcE9mU3RhY2stLTsNCisJI2VuZGlmDQogDQotICAgIC8qIFRoZSBNU1IgdmFsdWUgcGxhY2VkIGluIHRoZSBpbml0aWFsIHRhc2sgY29udGV4dCBzaG91bGQgaGF2ZSBpbnRlcnJ1cHRzDQotICAgICAqIGRpc2FibGVkLiAgRWFjaCB0YXNrIHdpbGwgZW5hYmxlIGludGVycnVwdHMgYXV0b21hdGljYWxseSB3aGVuIGl0IGVudGVycw0KLSAgICAgKiB0aGUgcnVubmluZyBzdGF0ZSBmb3IgdGhlIGZpcnN0IHRpbWUuICovDQotICAgICpweFRvcE9mU3RhY2sgPSBtZm1zcigpICYgfnBvcnRNU1JfSUU7DQorCS8qIFRoZSBNU1IgdmFsdWUgcGxhY2VkIGluIHRoZSBpbml0aWFsIHRhc2sgY29udGV4dCBzaG91bGQgaGF2ZSBpbnRlcnJ1cHRzDQorCWRpc2FibGVkLiAgRWFjaCB0YXNrIHdpbGwgZW5hYmxlIGludGVycnVwdHMgYXV0b21hdGljYWxseSB3aGVuIGl0IGVudGVycw0KKwl0aGUgcnVubmluZyBzdGF0ZSBmb3IgdGhlIGZpcnN0IHRpbWUuICovDQorCSpweFRvcE9mU3RhY2sgPSBtZm1zcigpICYgfnBvcnRNU1JfSUU7DQorCQ0KKwkjaWYoIE1JQ1JPQkxBWkVfRVhDRVBUSU9OU19FTkFCTEVEID09IDEgKQ0KKwl7DQorCQkvKiBFbnN1cmUgZXhjZXB0aW9ucyBhcmUgZW5hYmxlZCBmb3IgdGhlIHRhc2suICovDQorCQkqcHhUb3BPZlN0YWNrIHw9IHBvcnRNU1JfRUU7DQorCX0NCisJI2VuZGlmDQogDQotICAgICNpZiAoIE1JQ1JPQkxBWkVfRVhDRVBUSU9OU19FTkFCTEVEID09IDEgKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIC8qIEVuc3VyZSBleGNlcHRpb25zIGFyZSBlbmFibGVkIGZvciB0aGUgdGFzay4gKi8NCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrIHw9IHBvcnRNU1JfRUU7DQotICAgICAgICB9DQotICAgICNlbmRpZg0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIEZpcnN0IHN0YWNrIGFuIGluaXRpYWwgdmFsdWUgZm9yIHRoZSBjcml0aWNhbCBzZWN0aW9uIG5lc3RpbmcuICBUaGlzDQorCWlzIGluaXRpYWxpc2VkIHRvIHplcm8uICovDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMDsNCiANCi0gICAgLyogRmlyc3Qgc3RhY2sgYW4gaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIGNyaXRpY2FsIHNlY3Rpb24gbmVzdGluZy4gIFRoaXMNCi0gICAgICogaXMgaW5pdGlhbGlzZWQgdG8gemVyby4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAwOw0KKwkvKiBSMCBpcyBhbHdheXMgemVyby4gKi8NCisJLyogUjEgaXMgdGhlIFNQLiAqLw0KIA0KLSAgICAvKiBSMCBpcyBhbHdheXMgemVyby4gKi8NCi0gICAgLyogUjEgaXMgdGhlIFNQLiAqLw0KKwkvKiBQbGFjZSBhbiBpbml0aWFsIHZhbHVlIGZvciBhbGwgdGhlIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHVsUjI7CS8qIFIyIC0gcmVhZCBvbmx5IHNtYWxsIGRhdGEgYXJlYS4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMzsJLyogUjMgLSByZXR1cm4gdmFsdWVzIGFuZCB0ZW1wb3Jhcmllcy4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNDsJLyogUjQgLSByZXR1cm4gdmFsdWVzIGFuZCB0ZW1wb3Jhcmllcy4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHZQYXJhbWV0ZXJzOy8qIFI1IGNvbnRhaW5zIHRoZSBmdW5jdGlvbiBjYWxsIHBhcmFtZXRlcnMuICovDQogDQotICAgIC8qIFBsYWNlIGFuIGluaXRpYWwgdmFsdWUgZm9yIGFsbCB0aGUgZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycy4gKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgdWxSMjsgICAgICAgICAvKiBSMiAtIHJlYWQgb25seSBzbWFsbCBkYXRhIGFyZWEuICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDM7ICAgICAgICAgLyogUjMgLSByZXR1cm4gdmFsdWVzIGFuZCB0ZW1wb3Jhcmllcy4gKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNDsgICAgICAgICAvKiBSNCAtIHJldHVybiB2YWx1ZXMgYW5kIHRlbXBvcmFyaWVzLiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwdlBhcmFtZXRlcnM7IC8qIFI1IGNvbnRhaW5zIHRoZSBmdW5jdGlvbiBjYWxsIHBhcmFtZXRlcnMuICovDQorCSNpZmRlZiBwb3J0UFJFX0xPQURfU1RBQ0tfRk9SX0RFQlVHR0lORw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDY7CS8qIFI2IC0gb3RoZXIgcGFyYW1ldGVycyBhbmQgdGVtcG9yYXJpZXMuICBVc2VkIGFzIHRoZSByZXR1cm4gYWRkcmVzcyBmcm9tIHZQb3J0VGFza0VudHJ5UG9pbnQuICovDQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNzsJLyogUjcgLSBvdGhlciBwYXJhbWV0ZXJzIGFuZCB0ZW1wb3Jhcmllcy4gKi8NCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA4OwkvKiBSOCAtIG90aGVyIHBhcmFtZXRlcnMgYW5kIHRlbXBvcmFyaWVzLiAqLw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDk7CS8qIFI5IC0gb3RoZXIgcGFyYW1ldGVycyBhbmQgdGVtcG9yYXJpZXMuICovDQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwYTsJLyogUjEwIC0gb3RoZXIgcGFyYW1ldGVycyBhbmQgdGVtcG9yYXJpZXMuICovDQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwYjsJLyogUjExIC0gdGVtcG9yYXJpZXMuICovDQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwYzsJLyogUjEyIC0gdGVtcG9yYXJpZXMuICovDQorCQlweFRvcE9mU3RhY2stLTsNCisJI2Vsc2UNCisJCXB4VG9wT2ZTdGFjay09IDg7DQorCSNlbmRpZg0KIA0KLSAgICAjaWZkZWYgcG9ydFBSRV9MT0FEX1NUQUNLX0ZPUl9ERUJVR0dJTkcNCi0gICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA2OyAvKiBSNiAtIG90aGVyIHBhcmFtZXRlcnMgYW5kIHRlbXBvcmFyaWVzLiAgVXNlZCBhcyB0aGUgcmV0dXJuIGFkZHJlc3MgZnJvbSB2UG9ydFRhc2tFbnRyeVBvaW50LiAqLw0KLSAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDc7IC8qIFI3IC0gb3RoZXIgcGFyYW1ldGVycyBhbmQgdGVtcG9yYXJpZXMuICovDQotICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwODsgLyogUjggLSBvdGhlciBwYXJhbWV0ZXJzIGFuZCB0ZW1wb3Jhcmllcy4gKi8NCi0gICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA5OyAvKiBSOSAtIG90aGVyIHBhcmFtZXRlcnMgYW5kIHRlbXBvcmFyaWVzLiAqLw0KLSAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MGE7IC8qIFIxMCAtIG90aGVyIHBhcmFtZXRlcnMgYW5kIHRlbXBvcmFyaWVzLiAqLw0KLSAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MGI7IC8qIFIxMSAtIHRlbXBvcmFyaWVzLiAqLw0KLSAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MGM7IC8qIFIxMiAtIHRlbXBvcmFyaWVzLiAqLw0KLSAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICNlbHNlIC8qIGlmZGVmIHBvcnRQUkVfTE9BRF9TVEFDS19GT1JfREVCVUdHSU5HICovDQotICAgICAgICBweFRvcE9mU3RhY2sgLT0gODsNCi0gICAgI2VuZGlmIC8qIGlmZGVmIHBvcnRQUkVfTE9BRF9TVEFDS19GT1JfREVCVUdHSU5HICovDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgdWxSMTM7CS8qIFIxMyAtIHJlYWQvd3JpdGUgc21hbGwgZGF0YSBhcmVhLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBweENvZGU7CS8qIFIxNCAtIHJldHVybiBhZGRyZXNzIGZvciBpbnRlcnJ1cHQuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIE5VTEw7CS8qIFIxNSAtIHJldHVybiBhZGRyZXNzIGZvciBzdWJyb3V0aW5lLiAqLw0KIA0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHVsUjEzOyAgLyogUjEzIC0gcmVhZC93cml0ZSBzbWFsbCBkYXRhIGFyZWEuICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB4Q29kZTsgLyogUjE0IC0gcmV0dXJuIGFkZHJlc3MgZm9yIGludGVycnVwdC4gKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgTlVMTDsgICAvKiBSMTUgLSByZXR1cm4gYWRkcmVzcyBmb3Igc3Vicm91dGluZS4gKi8NCisJI2lmZGVmIHBvcnRQUkVfTE9BRF9TVEFDS19GT1JfREVCVUdHSU5HDQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMDsJLyogUjE2IC0gcmV0dXJuIGFkZHJlc3MgZm9yIHRyYXAgKGRlYnVnZ2VyKS4gKi8NCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDExOwkvKiBSMTcgLSByZXR1cm4gYWRkcmVzcyBmb3IgZXhjZXB0aW9ucywgaWYgY29uZmlndXJlZC4gKi8NCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDEyOwkvKiBSMTggLSByZXNlcnZlZCBmb3IgYXNzZW1ibGVyIGFuZCBjb21waWxlciB0ZW1wb3Jhcmllcy4gKi8NCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkjZWxzZQ0KKwkJcHhUb3BPZlN0YWNrIC09IDQ7DQorCSNlbmRpZg0KIA0KLSAgICAjaWZkZWYgcG9ydFBSRV9MT0FEX1NUQUNLX0ZPUl9ERUJVR0dJTkcNCi0gICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDEwOyAvKiBSMTYgLSByZXR1cm4gYWRkcmVzcyBmb3IgdHJhcCAoZGVidWdnZXIpLiAqLw0KLSAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTE7IC8qIFIxNyAtIHJldHVybiBhZGRyZXNzIGZvciBleGNlcHRpb25zLCBpZiBjb25maWd1cmVkLiAqLw0KLSAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTI7IC8qIFIxOCAtIHJlc2VydmVkIGZvciBhc3NlbWJsZXIgYW5kIGNvbXBpbGVyIHRlbXBvcmFyaWVzLiAqLw0KLSAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICNlbHNlDQotICAgICAgICBweFRvcE9mU3RhY2sgLT0gNDsNCi0gICAgI2VuZGlmDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMDsJLyogUjE5IC0gbXVzdCBiZSBzYXZlZCBhY3Jvc3MgZnVuY3Rpb24gY2FsbHMuIENhbGxlZS1zYXZlLiAgU2VlbXMgdG8gYmUgaW50ZXJwcmV0ZWQgYXMgdGhlIGZyYW1lIHBvaW50ZXIuICovDQogDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMDsgLyogUjE5IC0gbXVzdCBiZSBzYXZlZCBhY3Jvc3MgZnVuY3Rpb24gY2FsbHMuIENhbGxlZS1zYXZlLiAgU2VlbXMgdG8gYmUgaW50ZXJwcmV0ZWQgYXMgdGhlIGZyYW1lIHBvaW50ZXIuICovDQorCSNpZmRlZiBwb3J0UFJFX0xPQURfU1RBQ0tfRk9SX0RFQlVHR0lORw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTQ7CS8qIFIyMCAtIHJlc2VydmVkIGZvciBzdG9yaW5nIGEgcG9pbnRlciB0byB0aGUgR2xvYmFsIE9mZnNldCBUYWJsZSAoR09UKSBpbiBQb3NpdGlvbiBJbmRlcGVuZGVudCBDb2RlIChQSUMpLiBOb24tdm9sYXRpbGUgaW4gbm9uLVBJQyBjb2RlLiBNdXN0IGJlIHNhdmVkIGFjcm9zcyBmdW5jdGlvbiBjYWxscy4gQ2FsbGVlLXNhdmUuICBOb3QgdXNlZCBieSBGcmVlUlRPUy4gKi8NCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDE1OwkvKiBSMjEgLSBtdXN0IGJlIHNhdmVkIGFjcm9zcyBmdW5jdGlvbiBjYWxscy4gQ2FsbGVlLXNhdmUuICovDQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxNjsJLyogUjIyIC0gbXVzdCBiZSBzYXZlZCBhY3Jvc3MgZnVuY3Rpb24gY2FsbHMuIENhbGxlZS1zYXZlLiAqLw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTc7CS8qIFIyMyAtIG11c3QgYmUgc2F2ZWQgYWNyb3NzIGZ1bmN0aW9uIGNhbGxzLiBDYWxsZWUtc2F2ZS4gKi8NCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDE4OwkvKiBSMjQgLSBtdXN0IGJlIHNhdmVkIGFjcm9zcyBmdW5jdGlvbiBjYWxscy4gQ2FsbGVlLXNhdmUuICovDQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxOTsJLyogUjI1IC0gbXVzdCBiZSBzYXZlZCBhY3Jvc3MgZnVuY3Rpb24gY2FsbHMuIENhbGxlZS1zYXZlLiAqLw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MWE7CS8qIFIyNiAtIG11c3QgYmUgc2F2ZWQgYWNyb3NzIGZ1bmN0aW9uIGNhbGxzLiBDYWxsZWUtc2F2ZS4gKi8NCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDFiOwkvKiBSMjcgLSBtdXN0IGJlIHNhdmVkIGFjcm9zcyBmdW5jdGlvbiBjYWxscy4gQ2FsbGVlLXNhdmUuICovDQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxYzsJLyogUjI4IC0gbXVzdCBiZSBzYXZlZCBhY3Jvc3MgZnVuY3Rpb24gY2FsbHMuIENhbGxlZS1zYXZlLiAqLw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MWQ7CS8qIFIyOSAtIG11c3QgYmUgc2F2ZWQgYWNyb3NzIGZ1bmN0aW9uIGNhbGxzLiBDYWxsZWUtc2F2ZS4gKi8NCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDFlOwkvKiBSMzAgLSBtdXN0IGJlIHNhdmVkIGFjcm9zcyBmdW5jdGlvbiBjYWxscy4gQ2FsbGVlLXNhdmUuICovDQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxZjsJLyogUjMxIC0gbXVzdCBiZSBzYXZlZCBhY3Jvc3MgZnVuY3Rpb24gY2FsbHMuIENhbGxlZS1zYXZlLiAqLw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCSNlbHNlDQorCQlweFRvcE9mU3RhY2sgLT0gMTM7DQorCSNlbmRpZg0KIA0KLSAgICAjaWZkZWYgcG9ydFBSRV9MT0FEX1NUQUNLX0ZPUl9ERUJVR0dJTkcNCi0gICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDE0OyAvKiBSMjAgLSByZXNlcnZlZCBmb3Igc3RvcmluZyBhIHBvaW50ZXIgdG8gdGhlIEdsb2JhbCBPZmZzZXQgVGFibGUgKEdPVCkgaW4gUG9zaXRpb24gSW5kZXBlbmRlbnQgQ29kZSAoUElDKS4gTm9uLXZvbGF0aWxlIGluIG5vbi1QSUMgY29kZS4gTXVzdCBiZSBzYXZlZCBhY3Jvc3MgZnVuY3Rpb24gY2FsbHMuIENhbGxlZS1zYXZlLiAgTm90IHVzZWQgYnkgRnJlZVJUT1MuICovDQotICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxNTsgLyogUjIxIC0gbXVzdCBiZSBzYXZlZCBhY3Jvc3MgZnVuY3Rpb24gY2FsbHMuIENhbGxlZS1zYXZlLiAqLw0KLSAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTY7IC8qIFIyMiAtIG11c3QgYmUgc2F2ZWQgYWNyb3NzIGZ1bmN0aW9uIGNhbGxzLiBDYWxsZWUtc2F2ZS4gKi8NCi0gICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDE3OyAvKiBSMjMgLSBtdXN0IGJlIHNhdmVkIGFjcm9zcyBmdW5jdGlvbiBjYWxscy4gQ2FsbGVlLXNhdmUuICovDQotICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxODsgLyogUjI0IC0gbXVzdCBiZSBzYXZlZCBhY3Jvc3MgZnVuY3Rpb24gY2FsbHMuIENhbGxlZS1zYXZlLiAqLw0KLSAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTk7IC8qIFIyNSAtIG11c3QgYmUgc2F2ZWQgYWNyb3NzIGZ1bmN0aW9uIGNhbGxzLiBDYWxsZWUtc2F2ZS4gKi8NCi0gICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDFhOyAvKiBSMjYgLSBtdXN0IGJlIHNhdmVkIGFjcm9zcyBmdW5jdGlvbiBjYWxscy4gQ2FsbGVlLXNhdmUuICovDQotICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxYjsgLyogUjI3IC0gbXVzdCBiZSBzYXZlZCBhY3Jvc3MgZnVuY3Rpb24gY2FsbHMuIENhbGxlZS1zYXZlLiAqLw0KLSAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MWM7IC8qIFIyOCAtIG11c3QgYmUgc2F2ZWQgYWNyb3NzIGZ1bmN0aW9uIGNhbGxzLiBDYWxsZWUtc2F2ZS4gKi8NCi0gICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDFkOyAvKiBSMjkgLSBtdXN0IGJlIHNhdmVkIGFjcm9zcyBmdW5jdGlvbiBjYWxscy4gQ2FsbGVlLXNhdmUuICovDQotICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxZTsgLyogUjMwIC0gbXVzdCBiZSBzYXZlZCBhY3Jvc3MgZnVuY3Rpb24gY2FsbHMuIENhbGxlZS1zYXZlLiAqLw0KLSAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MWY7IC8qIFIzMSAtIG11c3QgYmUgc2F2ZWQgYWNyb3NzIGZ1bmN0aW9uIGNhbGxzLiBDYWxsZWUtc2F2ZS4gKi8NCi0gICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAjZWxzZSAvKiBpZmRlZiBwb3J0UFJFX0xPQURfU1RBQ0tfRk9SX0RFQlVHR0lORyAqLw0KLSAgICAgICAgcHhUb3BPZlN0YWNrIC09IDEzOw0KLSAgICAjZW5kaWYgLyogaWZkZWYgcG9ydFBSRV9MT0FEX1NUQUNLX0ZPUl9ERUJVR0dJTkcgKi8NCi0NCi0gICAgLyogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgdG9wIG9mIHRoZSBzdGFjayB0aGF0IGhhcyBiZWVuIGdlbmVyYXRlZCBzbyB0aGlzDQotICAgICAqIGNhbgliZSBzdG9yZWQgaW4gdGhlIHRhc2sgY29udHJvbCBibG9jayBmb3IgdGhlIHRhc2suICovDQotICAgIHJldHVybiBweFRvcE9mU3RhY2s7DQorCS8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHRvcCBvZiB0aGUgc3RhY2sgdGhhdCBoYXMgYmVlbiBnZW5lcmF0ZWQgc28gdGhpcw0KKwljYW4JYmUgc3RvcmVkIGluIHRoZSB0YXNrIGNvbnRyb2wgYmxvY2sgZm9yIHRoZSB0YXNrLiAqLw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBCYXNlVHlwZV90IHhQb3J0U3RhcnRTY2hlZHVsZXIoIHZvaWQgKQ0KIHsNCi0gICAgZXh0ZXJuIHZvaWQoIHZQb3J0U3RhcnRGaXJzdFRhc2sgKSggdm9pZCApOw0KLSAgICBleHRlcm4gdWludDMyX3QgX3N0YWNrW107DQorZXh0ZXJuIHZvaWQgKCB2UG9ydFN0YXJ0Rmlyc3RUYXNrICkoIHZvaWQgKTsNCitleHRlcm4gdWludDMyX3QgX3N0YWNrW107DQogDQotICAgIC8qIFNldHVwIHRoZSBoYXJkd2FyZSB0byBnZW5lcmF0ZSB0aGUgdGljay4gIEludGVycnVwdHMgYXJlIGRpc2FibGVkIHdoZW4NCi0gICAgICogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuDQotICAgICAqDQotICAgICAqIFRoaXMgcG9ydCB1c2VzIGFuIGFwcGxpY2F0aW9uIGRlZmluZWQgY2FsbGJhY2sgZnVuY3Rpb24gdG8gaW5zdGFsbCB0aGUgdGljaw0KLSAgICAgKiBpbnRlcnJ1cHQgaGFuZGxlciBiZWNhdXNlIHRoZSBrZXJuZWwgd2lsbCBydW4gb24gbG90cyBvZiBkaWZmZXJlbnQNCi0gICAgICogTWljcm9CbGF6ZSBhbmQgRlBHQSBjb25maWd1cmF0aW9ucyAtIG5vdCBhbGwgb2YJd2hpY2ggd2lsbCBoYXZlIHRoZSBzYW1lDQotICAgICAqIHRpbWVyIHBlcmlwaGVyYWxzIGRlZmluZWQgb3IgYXZhaWxhYmxlLiAgQW4gZXhhbXBsZSBkZWZpbml0aW9uIG9mDQotICAgICAqIHZBcHBsaWNhdGlvblNldHVwVGltZXJJbnRlcnJ1cHQoKSBpcyBwcm92aWRlZCBpbiB0aGUgb2ZmaWNpYWwgZGVtbw0KLSAgICAgKiBhcHBsaWNhdGlvbiB0aGF0IGFjY29tcGFuaWVzIHRoaXMgcG9ydC4gKi8NCi0gICAgdkFwcGxpY2F0aW9uU2V0dXBUaW1lckludGVycnVwdCgpOw0KKwkvKiBTZXR1cCB0aGUgaGFyZHdhcmUgdG8gZ2VuZXJhdGUgdGhlIHRpY2suICBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB3aGVuDQorCXRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLg0KIA0KLSAgICAvKiBSZXVzZSB0aGUgc3RhY2sgZnJvbSBtYWluKCkgYXMgdGhlIHN0YWNrIGZvciB0aGUgaW50ZXJydXB0cy9leGNlcHRpb25zLiAqLw0KLSAgICBwdWxJU1JTdGFjayA9ICggdWludDMyX3QgKiApIF9zdGFjazsNCisJVGhpcyBwb3J0IHVzZXMgYW4gYXBwbGljYXRpb24gZGVmaW5lZCBjYWxsYmFjayBmdW5jdGlvbiB0byBpbnN0YWxsIHRoZSB0aWNrDQorCWludGVycnVwdCBoYW5kbGVyIGJlY2F1c2UgdGhlIGtlcm5lbCB3aWxsIHJ1biBvbiBsb3RzIG9mIGRpZmZlcmVudA0KKwlNaWNyb0JsYXplIGFuZCBGUEdBIGNvbmZpZ3VyYXRpb25zIC0gbm90IGFsbCBvZgl3aGljaCB3aWxsIGhhdmUgdGhlIHNhbWUNCisJdGltZXIgcGVyaXBoZXJhbHMgZGVmaW5lZCBvciBhdmFpbGFibGUuICBBbiBleGFtcGxlIGRlZmluaXRpb24gb2YNCisJdkFwcGxpY2F0aW9uU2V0dXBUaW1lckludGVycnVwdCgpIGlzIHByb3ZpZGVkIGluIHRoZSBvZmZpY2lhbCBkZW1vDQorCWFwcGxpY2F0aW9uIHRoYXQgYWNjb21wYW5pZXMgdGhpcyBwb3J0LiAqLw0KKwl2QXBwbGljYXRpb25TZXR1cFRpbWVySW50ZXJydXB0KCk7DQogDQotICAgIC8qIEVuc3VyZSB0aGVyZSBpcyBlbm91Z2ggc3BhY2UgZm9yIHRoZSBmdW5jdGlvbnMgY2FsbGVkIGZyb20gdGhlIGludGVycnVwdA0KLSAgICAgKiBzZXJ2aWNlIHJvdXRpbmVzIHRvIHdyaXRlIGJhY2sgaW50byB0aGUgc3RhY2sgZnJhbWUgb2YgdGhlIGNhbGxlci4gKi8NCi0gICAgcHVsSVNSU3RhY2sgLT0gMjsNCisJLyogUmV1c2UgdGhlIHN0YWNrIGZyb20gbWFpbigpIGFzIHRoZSBzdGFjayBmb3IgdGhlIGludGVycnVwdHMvZXhjZXB0aW9ucy4gKi8NCisJcHVsSVNSU3RhY2sgPSAoIHVpbnQzMl90ICogKSBfc3RhY2s7DQogDQotICAgIC8qIFJlc3RvcmUgdGhlIGNvbnRleHQgb2YgdGhlIGZpcnN0IHRhc2sgdGhhdCBpcyBnb2luZyB0byBydW4uICBGcm9tIGhlcmUNCi0gICAgICogb24sIHRoZSBjcmVhdGVkIHRhc2tzIHdpbGwgYmUgZXhlY3V0aW5nLiAqLw0KLSAgICB2UG9ydFN0YXJ0Rmlyc3RUYXNrKCk7DQorCS8qIEVuc3VyZSB0aGVyZSBpcyBlbm91Z2ggc3BhY2UgZm9yIHRoZSBmdW5jdGlvbnMgY2FsbGVkIGZyb20gdGhlIGludGVycnVwdA0KKwlzZXJ2aWNlIHJvdXRpbmVzIHRvIHdyaXRlIGJhY2sgaW50byB0aGUgc3RhY2sgZnJhbWUgb2YgdGhlIGNhbGxlci4gKi8NCisJcHVsSVNSU3RhY2sgLT0gMjsNCiANCi0gICAgLyogU2hvdWxkIG5vdCBnZXQgaGVyZSBhcyB0aGUgdGFza3MgYXJlIG5vdyBydW5uaW5nISAqLw0KLSAgICByZXR1cm4gcGRGQUxTRTsNCisJLyogUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgZmlyc3QgdGFzayB0aGF0IGlzIGdvaW5nIHRvIHJ1bi4gIEZyb20gaGVyZQ0KKwlvbiwgdGhlIGNyZWF0ZWQgdGFza3Mgd2lsbCBiZSBleGVjdXRpbmcuICovDQorCXZQb3J0U3RhcnRGaXJzdFRhc2soKTsNCisNCisJLyogU2hvdWxkIG5vdCBnZXQgaGVyZSBhcyB0aGUgdGFza3MgYXJlIG5vdyBydW5uaW5nISAqLw0KKwlyZXR1cm4gcGRGQUxTRTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogdm9pZCB2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApDQogew0KLSAgICAvKiBOb3QgaW1wbGVtZW50ZWQgaW4gcG9ydHMgd2hlcmUgdGhlcmUgaXMgbm90aGluZyB0byByZXR1cm4gdG8uDQotICAgICAqIEFydGlmaWNpYWxseSBmb3JjZSBhbiBhc3NlcnQuICovDQotICAgIGNvbmZpZ0FTU0VSVCggdXhDcml0aWNhbE5lc3RpbmcgPT0gMTAwMFVMICk7DQorCS8qIE5vdCBpbXBsZW1lbnRlZCBpbiBwb3J0cyB3aGVyZSB0aGVyZSBpcyBub3RoaW5nIHRvIHJldHVybiB0by4NCisJQXJ0aWZpY2lhbGx5IGZvcmNlIGFuIGFzc2VydC4gKi8NCisJY29uZmlnQVNTRVJUKCB1eENyaXRpY2FsTmVzdGluZyA9PSAxMDAwVUwgKTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQpAQCAtMjc5LDEwNyArMjc3LDEwNCBAQAogICovDQogdm9pZCB2UG9ydFlpZWxkKCB2b2lkICkNCiB7DQotICAgIGV4dGVybiB2b2lkIFZQb3J0WWllbGRBU00oIHZvaWQgKTsNCitleHRlcm4gdm9pZCBWUG9ydFlpZWxkQVNNKCB2b2lkICk7DQogDQotICAgIC8qIFBlcmZvcm0gdGhlIGNvbnRleHQgc3dpdGNoIGluIGEgY3JpdGljYWwgc2VjdGlvbiB0byBhc3N1cmUgaXQgaXMNCi0gICAgICogbm90IGludGVycnVwdGVkIGJ5IHRoZSB0aWNrIElTUi4gIEl0IGlzIG5vdCBhIHByb2JsZW0gdG8gZG8gdGhpcyBhcw0KLSAgICAgKiBlYWNoIHRhc2sgbWFpbnRhaW5zIGl0cyBvd24gaW50ZXJydXB0IHN0YXR1cy4gKi8NCi0gICAgcG9ydEVOVEVSX0NSSVRJQ0FMKCk7DQotICAgIHsNCi0gICAgICAgIC8qIEp1bXAgZGlyZWN0bHkgdG8gdGhlIHlpZWxkIGZ1bmN0aW9uIHRvIGVuc3VyZSB0aGVyZSBpcyBubw0KLSAgICAgICAgICogY29tcGlsZXIgZ2VuZXJhdGVkIHByb2xvZ3VlIGNvZGUuICovDQotICAgICAgICBhc20gdm9sYXRpbGUgKCAiYnJhbGlkIHIxNCwgVlBvcnRZaWVsZEFTTQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICAgICAib3IgcjAsIHIwLCByMAkJCQkJXG5cdCIpOw0KLSAgICB9DQotICAgIHBvcnRFWElUX0NSSVRJQ0FMKCk7DQorCS8qIFBlcmZvcm0gdGhlIGNvbnRleHQgc3dpdGNoIGluIGEgY3JpdGljYWwgc2VjdGlvbiB0byBhc3N1cmUgaXQgaXMNCisJbm90IGludGVycnVwdGVkIGJ5IHRoZSB0aWNrIElTUi4gIEl0IGlzIG5vdCBhIHByb2JsZW0gdG8gZG8gdGhpcyBhcw0KKwllYWNoIHRhc2sgbWFpbnRhaW5zIGl0cyBvd24gaW50ZXJydXB0IHN0YXR1cy4gKi8NCisJcG9ydEVOVEVSX0NSSVRJQ0FMKCk7DQorCXsNCisJCS8qIEp1bXAgZGlyZWN0bHkgdG8gdGhlIHlpZWxkIGZ1bmN0aW9uIHRvIGVuc3VyZSB0aGVyZSBpcyBubw0KKwkJY29tcGlsZXIgZ2VuZXJhdGVkIHByb2xvZ3VlIGNvZGUuICovDQorCQlhc20gdm9sYXRpbGUgKAkiYnJhbGlkIHIxNCwgVlBvcnRZaWVsZEFTTQkJXG5cdCIgXA0KKwkJCQkJCSJvciByMCwgcjAsIHIwCQkJCQlcblx0IiApOw0KKwl9DQorCXBvcnRFWElUX0NSSVRJQ0FMKCk7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlBvcnRFbmFibGVJbnRlcnJ1cHQoIHVpbnQ4X3QgdWNJbnRlcnJ1cHRJRCApDQogew0KLSAgICBpbnQzMl90IGxSZXR1cm47DQoraW50MzJfdCBsUmV0dXJuOw0KIA0KLSAgICAvKiBBbiBBUEkgZnVuY3Rpb24gaXMgcHJvdmlkZWQgdG8gZW5hYmxlIGFuIGludGVycnVwdCBpbiB0aGUgaW50ZXJydXB0DQotICAgICAqIGNvbnRyb2xsZXIgYmVjYXVzZSB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIgaW5zdGFuY2UgdmFyaWFibGUgaXMgcHJpdmF0ZQ0KLSAgICAgKiB0byB0aGlzIGZpbGUuICovDQotICAgIGxSZXR1cm4gPSBwcnZFbnN1cmVJbnRlcnJ1cHRDb250cm9sbGVySXNJbml0aWFsaXNlZCgpOw0KKwkvKiBBbiBBUEkgZnVuY3Rpb24gaXMgcHJvdmlkZWQgdG8gZW5hYmxlIGFuIGludGVycnVwdCBpbiB0aGUgaW50ZXJydXB0DQorCWNvbnRyb2xsZXIgYmVjYXVzZSB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIgaW5zdGFuY2UgdmFyaWFibGUgaXMgcHJpdmF0ZQ0KKwl0byB0aGlzIGZpbGUuICovDQorCWxSZXR1cm4gPSBwcnZFbnN1cmVJbnRlcnJ1cHRDb250cm9sbGVySXNJbml0aWFsaXNlZCgpOw0KKwlpZiggbFJldHVybiA9PSBwZFBBU1MgKQ0KKwl7DQorCQlYSW50Y19FbmFibGUoICZ4SW50ZXJydXB0Q29udHJvbGxlckluc3RhbmNlLCB1Y0ludGVycnVwdElEICk7DQorCX0NCiANCi0gICAgaWYoIGxSZXR1cm4gPT0gcGRQQVNTICkNCi0gICAgew0KLSAgICAgICAgWEludGNfRW5hYmxlKCAmeEludGVycnVwdENvbnRyb2xsZXJJbnN0YW5jZSwgdWNJbnRlcnJ1cHRJRCApOw0KLSAgICB9DQotDQotICAgIGNvbmZpZ0FTU0VSVCggbFJldHVybiApOw0KKwljb25maWdBU1NFUlQoIGxSZXR1cm4gKTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogdm9pZCB2UG9ydERpc2FibGVJbnRlcnJ1cHQoIHVpbnQ4X3QgdWNJbnRlcnJ1cHRJRCApDQogew0KLSAgICBpbnQzMl90IGxSZXR1cm47DQoraW50MzJfdCBsUmV0dXJuOw0KIA0KLSAgICAvKiBBbiBBUEkgZnVuY3Rpb24gaXMgcHJvdmlkZWQgdG8gZGlzYWJsZSBhbiBpbnRlcnJ1cHQgaW4gdGhlIGludGVycnVwdA0KLSAgICAgKiBjb250cm9sbGVyIGJlY2F1c2UgdGhlIGludGVycnVwdCBjb250cm9sbGVyIGluc3RhbmNlIHZhcmlhYmxlIGlzIHByaXZhdGUNCi0gICAgICogdG8gdGhpcyBmaWxlLiAqLw0KLSAgICBsUmV0dXJuID0gcHJ2RW5zdXJlSW50ZXJydXB0Q29udHJvbGxlcklzSW5pdGlhbGlzZWQoKTsNCisJLyogQW4gQVBJIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIHRvIGRpc2FibGUgYW4gaW50ZXJydXB0IGluIHRoZSBpbnRlcnJ1cHQNCisJY29udHJvbGxlciBiZWNhdXNlIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciBpbnN0YW5jZSB2YXJpYWJsZSBpcyBwcml2YXRlDQorCXRvIHRoaXMgZmlsZS4gKi8NCisJbFJldHVybiA9IHBydkVuc3VyZUludGVycnVwdENvbnRyb2xsZXJJc0luaXRpYWxpc2VkKCk7DQogDQotICAgIGlmKCBsUmV0dXJuID09IHBkUEFTUyApDQotICAgIHsNCi0gICAgICAgIFhJbnRjX0Rpc2FibGUoICZ4SW50ZXJydXB0Q29udHJvbGxlckluc3RhbmNlLCB1Y0ludGVycnVwdElEICk7DQotICAgIH0NCisJaWYoIGxSZXR1cm4gPT0gcGRQQVNTICkNCisJew0KKwkJWEludGNfRGlzYWJsZSggJnhJbnRlcnJ1cHRDb250cm9sbGVySW5zdGFuY2UsIHVjSW50ZXJydXB0SUQgKTsNCisJfQ0KIA0KLSAgICBjb25maWdBU1NFUlQoIGxSZXR1cm4gKTsNCisJY29uZmlnQVNTRVJUKCBsUmV0dXJuICk7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KLUJhc2VUeXBlX3QgeFBvcnRJbnN0YWxsSW50ZXJydXB0SGFuZGxlciggdWludDhfdCB1Y0ludGVycnVwdElELA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEludGVycnVwdEhhbmRsZXIgcHhIYW5kbGVyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqIHB2Q2FsbEJhY2tSZWYgKQ0KK0Jhc2VUeXBlX3QgeFBvcnRJbnN0YWxsSW50ZXJydXB0SGFuZGxlciggdWludDhfdCB1Y0ludGVycnVwdElELCBYSW50ZXJydXB0SGFuZGxlciBweEhhbmRsZXIsIHZvaWQgKnB2Q2FsbEJhY2tSZWYgKQ0KIHsNCi0gICAgaW50MzJfdCBsUmV0dXJuOw0KK2ludDMyX3QgbFJldHVybjsNCiANCi0gICAgLyogQW4gQVBJIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIHRvIGluc3RhbGwgYW4gaW50ZXJydXB0IGhhbmRsZXIgYmVjYXVzZSB0aGUNCi0gICAgICogaW50ZXJydXB0IGNvbnRyb2xsZXIgaW5zdGFuY2UgdmFyaWFibGUgaXMgcHJpdmF0ZSB0byB0aGlzIGZpbGUuICovDQorCS8qIEFuIEFQSSBmdW5jdGlvbiBpcyBwcm92aWRlZCB0byBpbnN0YWxsIGFuIGludGVycnVwdCBoYW5kbGVyIGJlY2F1c2UgdGhlDQorCWludGVycnVwdCBjb250cm9sbGVyIGluc3RhbmNlIHZhcmlhYmxlIGlzIHByaXZhdGUgdG8gdGhpcyBmaWxlLiAqLw0KIA0KLSAgICBsUmV0dXJuID0gcHJ2RW5zdXJlSW50ZXJydXB0Q29udHJvbGxlcklzSW5pdGlhbGlzZWQoKTsNCisJbFJldHVybiA9IHBydkVuc3VyZUludGVycnVwdENvbnRyb2xsZXJJc0luaXRpYWxpc2VkKCk7DQogDQotICAgIGlmKCBsUmV0dXJuID09IHBkUEFTUyApDQotICAgIHsNCi0gICAgICAgIGxSZXR1cm4gPSBYSW50Y19Db25uZWN0KCAmeEludGVycnVwdENvbnRyb2xsZXJJbnN0YW5jZSwgdWNJbnRlcnJ1cHRJRCwgcHhIYW5kbGVyLCBwdkNhbGxCYWNrUmVmICk7DQotICAgIH0NCisJaWYoIGxSZXR1cm4gPT0gcGRQQVNTICkNCisJew0KKwkJbFJldHVybiA9IFhJbnRjX0Nvbm5lY3QoICZ4SW50ZXJydXB0Q29udHJvbGxlckluc3RhbmNlLCB1Y0ludGVycnVwdElELCBweEhhbmRsZXIsIHB2Q2FsbEJhY2tSZWYgKTsNCisJfQ0KIA0KLSAgICBpZiggbFJldHVybiA9PSBYU1RfU1VDQ0VTUyApDQotICAgIHsNCi0gICAgICAgIGxSZXR1cm4gPSBwZFBBU1M7DQotICAgIH0NCisJaWYoIGxSZXR1cm4gPT0gWFNUX1NVQ0NFU1MgKQ0KKwl7DQorCQlsUmV0dXJuID0gcGRQQVNTOw0KKwl9DQogDQotICAgIGNvbmZpZ0FTU0VSVCggbFJldHVybiA9PSBwZFBBU1MgKTsNCisJY29uZmlnQVNTRVJUKCBsUmV0dXJuID09IHBkUEFTUyApOw0KIA0KLSAgICByZXR1cm4gbFJldHVybjsNCisJcmV0dXJuIGxSZXR1cm47DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHN0YXRpYyBpbnQzMl90IHBydkVuc3VyZUludGVycnVwdENvbnRyb2xsZXJJc0luaXRpYWxpc2VkKCB2b2lkICkNCiB7DQotICAgIHN0YXRpYyBpbnQzMl90IGxJbnRlcnJ1cHRDb250cm9sbGVySW5pdGlhbGlzZWQgPSBwZEZBTFNFOw0KLSAgICBpbnQzMl90IGxSZXR1cm47DQorc3RhdGljIGludDMyX3QgbEludGVycnVwdENvbnRyb2xsZXJJbml0aWFsaXNlZCA9IHBkRkFMU0U7DQoraW50MzJfdCBsUmV0dXJuOw0KIA0KLSAgICAvKiBFbnN1cmUgdGhlIGludGVycnVwdCBjb250cm9sbGVyIGluc3RhbmNlIHZhcmlhYmxlIGlzIGluaXRpYWxpc2VkIGJlZm9yZQ0KLSAgICAgKiBpdCBpcyB1c2VkLCBhbmQgdGhhdCB0aGUgaW5pdGlhbGlzYXRpb24gb25seSBoYXBwZW5zIG9uY2UuICovDQotICAgIGlmKCBsSW50ZXJydXB0Q29udHJvbGxlckluaXRpYWxpc2VkICE9IHBkVFJVRSApDQotICAgIHsNCi0gICAgICAgIGxSZXR1cm4gPSBwcnZJbml0aWFsaXNlSW50ZXJydXB0Q29udHJvbGxlcigpOw0KKwkvKiBFbnN1cmUgdGhlIGludGVycnVwdCBjb250cm9sbGVyIGluc3RhbmNlIHZhcmlhYmxlIGlzIGluaXRpYWxpc2VkIGJlZm9yZQ0KKwlpdCBpcyB1c2VkLCBhbmQgdGhhdCB0aGUgaW5pdGlhbGlzYXRpb24gb25seSBoYXBwZW5zIG9uY2UuICovDQorCWlmKCBsSW50ZXJydXB0Q29udHJvbGxlckluaXRpYWxpc2VkICE9IHBkVFJVRSApDQorCXsNCisJCWxSZXR1cm4gPSBwcnZJbml0aWFsaXNlSW50ZXJydXB0Q29udHJvbGxlcigpOw0KIA0KLSAgICAgICAgaWYoIGxSZXR1cm4gPT0gcGRQQVNTICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBsSW50ZXJydXB0Q29udHJvbGxlckluaXRpYWxpc2VkID0gcGRUUlVFOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGVsc2UNCi0gICAgew0KLSAgICAgICAgbFJldHVybiA9IHBkUEFTUzsNCi0gICAgfQ0KKwkJaWYoIGxSZXR1cm4gPT0gcGRQQVNTICkNCisJCXsNCisJCQlsSW50ZXJydXB0Q29udHJvbGxlckluaXRpYWxpc2VkID0gcGRUUlVFOw0KKwkJfQ0KKwl9DQorCWVsc2UNCisJew0KKwkJbFJldHVybiA9IHBkUEFTUzsNCisJfQ0KIA0KLSAgICByZXR1cm4gbFJldHVybjsNCisJcmV0dXJuIGxSZXR1cm47DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KQEAgLTM4Nyw2OSArMzgyLDcxIEBACiAgKiBIYW5kbGVyIGZvciB0aGUgdGltZXIgaW50ZXJydXB0LiAgVGhpcyBpcyB0aGUgaGFuZGxlciB0aGF0IHRoZSBhcHBsaWNhdGlvbg0KICAqIGRlZmluZWQgY2FsbGJhY2sgZnVuY3Rpb24gdkFwcGxpY2F0aW9uU2V0dXBUaW1lckludGVycnVwdCgpIHNob3VsZCBpbnN0YWxsLg0KICAqLw0KLXZvaWQgdlBvcnRUaWNrSVNSKCB2b2lkICogcHZVbnVzZWQgKQ0KK3ZvaWQgdlBvcnRUaWNrSVNSKCB2b2lkICpwdlVudXNlZCApDQogew0KLSAgICBleHRlcm4gdm9pZCB2QXBwbGljYXRpb25DbGVhclRpbWVySW50ZXJydXB0KCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdkFwcGxpY2F0aW9uQ2xlYXJUaW1lckludGVycnVwdCggdm9pZCApOw0KIA0KLSAgICAvKiBFbnN1cmUgdGhlIHVudXNlZCBwYXJhbWV0ZXIgZG9lcyBub3QgZ2VuZXJhdGUgYSBjb21waWxlciB3YXJuaW5nLiAqLw0KLSAgICAoIHZvaWQgKSBwdlVudXNlZDsNCisJLyogRW5zdXJlIHRoZSB1bnVzZWQgcGFyYW1ldGVyIGRvZXMgbm90IGdlbmVyYXRlIGEgY29tcGlsZXIgd2FybmluZy4gKi8NCisJKCB2b2lkICkgcHZVbnVzZWQ7DQogDQotICAgIC8qIFRoaXMgcG9ydCB1c2VzIGFuIGFwcGxpY2F0aW9uIGRlZmluZWQgY2FsbGJhY2sgZnVuY3Rpb24gdG8gY2xlYXIgdGhlIHRpY2sNCi0gICAgICogaW50ZXJydXB0IGJlY2F1c2UgdGhlIGtlcm5lbCB3aWxsIHJ1biBvbiBsb3RzIG9mIGRpZmZlcmVudCBNaWNyb0JsYXplIGFuZA0KLSAgICAgKiBGUEdBIGNvbmZpZ3VyYXRpb25zIC0gbm90IGFsbCBvZiB3aGljaCB3aWxsIGhhdmUgdGhlIHNhbWUgdGltZXIgcGVyaXBoZXJhbHMNCi0gICAgICogZGVmaW5lZCBvciBhdmFpbGFibGUuICBBbiBleGFtcGxlIGRlZmluaXRpb24gb2YNCi0gICAgICogdkFwcGxpY2F0aW9uQ2xlYXJUaW1lckludGVycnVwdCgpIGlzIHByb3ZpZGVkIGluIHRoZSBvZmZpY2lhbCBkZW1vDQotICAgICAqIGFwcGxpY2F0aW9uIHRoYXQgYWNjb21wYW5pZXMgdGhpcyBwb3J0LiAqLw0KLSAgICB2QXBwbGljYXRpb25DbGVhclRpbWVySW50ZXJydXB0KCk7DQorCS8qIFRoaXMgcG9ydCB1c2VzIGFuIGFwcGxpY2F0aW9uIGRlZmluZWQgY2FsbGJhY2sgZnVuY3Rpb24gdG8gY2xlYXIgdGhlIHRpY2sNCisJaW50ZXJydXB0IGJlY2F1c2UgdGhlIGtlcm5lbCB3aWxsIHJ1biBvbiBsb3RzIG9mIGRpZmZlcmVudCBNaWNyb0JsYXplIGFuZA0KKwlGUEdBIGNvbmZpZ3VyYXRpb25zIC0gbm90IGFsbCBvZiB3aGljaCB3aWxsIGhhdmUgdGhlIHNhbWUgdGltZXIgcGVyaXBoZXJhbHMNCisJZGVmaW5lZCBvciBhdmFpbGFibGUuICBBbiBleGFtcGxlIGRlZmluaXRpb24gb2YNCisJdkFwcGxpY2F0aW9uQ2xlYXJUaW1lckludGVycnVwdCgpIGlzIHByb3ZpZGVkIGluIHRoZSBvZmZpY2lhbCBkZW1vDQorCWFwcGxpY2F0aW9uIHRoYXQgYWNjb21wYW5pZXMgdGhpcyBwb3J0LiAqLw0KKwl2QXBwbGljYXRpb25DbGVhclRpbWVySW50ZXJydXB0KCk7DQogDQotICAgIC8qIEluY3JlbWVudCB0aGUgUlRPUyB0aWNrIC0gdGhpcyBtaWdodCBjYXVzZSBhIHRhc2sgdG8gdW5ibG9jay4gKi8NCi0gICAgaWYoIHhUYXNrSW5jcmVtZW50VGljaygpICE9IHBkRkFMU0UgKQ0KLSAgICB7DQotICAgICAgICAvKiBGb3JjZSB2VGFza1N3aXRjaENvbnRleHQoKSB0byBiZSBjYWxsZWQgYXMgdGhlIGludGVycnVwdCBleGl0cy4gKi8NCi0gICAgICAgIHVsVGFza1N3aXRjaFJlcXVlc3RlZCA9IDE7DQotICAgIH0NCisJLyogSW5jcmVtZW50IHRoZSBSVE9TIHRpY2sgLSB0aGlzIG1pZ2h0IGNhdXNlIGEgdGFzayB0byB1bmJsb2NrLiAqLw0KKwlpZiggeFRhc2tJbmNyZW1lbnRUaWNrKCkgIT0gcGRGQUxTRSApDQorCXsNCisJCS8qIEZvcmNlIHZUYXNrU3dpdGNoQ29udGV4dCgpIHRvIGJlIGNhbGxlZCBhcyB0aGUgaW50ZXJydXB0IGV4aXRzLiAqLw0KKwkJdWxUYXNrU3dpdGNoUmVxdWVzdGVkID0gMTsNCisJfQ0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBzdGF0aWMgaW50MzJfdCBwcnZJbml0aWFsaXNlSW50ZXJydXB0Q29udHJvbGxlciggdm9pZCApDQogew0KLSAgICBpbnQzMl90IGxTdGF0dXM7DQoraW50MzJfdCBsU3RhdHVzOw0KIA0KLSAgICBsU3RhdHVzID0gWEludGNfSW5pdGlhbGl6ZSggJnhJbnRlcnJ1cHRDb250cm9sbGVySW5zdGFuY2UsIGNvbmZpZ0lOVEVSUlVQVF9DT05UUk9MTEVSX1RPX1VTRSApOw0KKwlsU3RhdHVzID0gWEludGNfSW5pdGlhbGl6ZSggJnhJbnRlcnJ1cHRDb250cm9sbGVySW5zdGFuY2UsIGNvbmZpZ0lOVEVSUlVQVF9DT05UUk9MTEVSX1RPX1VTRSApOw0KIA0KLSAgICBpZiggbFN0YXR1cyA9PSBYU1RfU1VDQ0VTUyApDQotICAgIHsNCi0gICAgICAgIC8qIEluaXRpYWxpc2UgdGhlIGV4Y2VwdGlvbiB0YWJsZS4gKi8NCi0gICAgICAgIFhpbF9FeGNlcHRpb25Jbml0KCk7DQorCWlmKCBsU3RhdHVzID09IFhTVF9TVUNDRVNTICkNCisJew0KKwkJLyogSW5pdGlhbGlzZSB0aGUgZXhjZXB0aW9uIHRhYmxlLiAqLw0KKwkJWGlsX0V4Y2VwdGlvbkluaXQoKTsNCiANCi0gICAgICAgIC8qIFNlcnZpY2UgYWxsIHBlbmRpbmcgaW50ZXJydXB0cyBlYWNoIHRpbWUgdGhlIGhhbmRsZXIgaXMgZW50ZXJlZC4gKi8NCi0gICAgICAgIFhJbnRjX1NldEludHJTdmNPcHRpb24oIHhJbnRlcnJ1cHRDb250cm9sbGVySW5zdGFuY2UuQmFzZUFkZHJlc3MsIFhJTl9TVkNfQUxMX0lTUlNfT1BUSU9OICk7DQorCSAgICAvKiBTZXJ2aWNlIGFsbCBwZW5kaW5nIGludGVycnVwdHMgZWFjaCB0aW1lIHRoZSBoYW5kbGVyIGlzIGVudGVyZWQuICovDQorCSAgICBYSW50Y19TZXRJbnRyU3ZjT3B0aW9uKCB4SW50ZXJydXB0Q29udHJvbGxlckluc3RhbmNlLkJhc2VBZGRyZXNzLCBYSU5fU1ZDX0FMTF9JU1JTX09QVElPTiApOw0KIA0KLSAgICAgICAgLyogSW5zdGFsbCBleGNlcHRpb24gaGFuZGxlcnMgaWYgdGhlIE1pY3JvQmxhemUgaXMgY29uZmlndXJlZCB0byBoYW5kbGUNCi0gICAgICAgICAqIGV4Y2VwdGlvbnMsIGFuZCB0aGUgYXBwbGljYXRpb24gZGVmaW5lZCBjb25zdGFudA0KLSAgICAgICAgICogY29uZmlnSU5TVEFMTF9FWENFUFRJT05fSEFORExFUlMgaXMgc2V0IHRvIDEuICovDQotICAgICAgICAjaWYgKCBNSUNST0JMQVpFX0VYQ0VQVElPTlNfRU5BQkxFRCA9PSAxICkgJiYgKCBjb25maWdJTlNUQUxMX0VYQ0VQVElPTl9IQU5ETEVSUyA9PSAxICkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIHZQb3J0RXhjZXB0aW9uc0luc3RhbGxIYW5kbGVycygpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICNlbmRpZiAvKiBNSUNST0JMQVpFX0VYQ0VQVElPTlNfRU5BQkxFRCAqLw0KKwkgICAgLyogSW5zdGFsbCBleGNlcHRpb24gaGFuZGxlcnMgaWYgdGhlIE1pY3JvQmxhemUgaXMgY29uZmlndXJlZCB0byBoYW5kbGUNCisJICAgIGV4Y2VwdGlvbnMsIGFuZCB0aGUgYXBwbGljYXRpb24gZGVmaW5lZCBjb25zdGFudA0KKwkgICAgY29uZmlnSU5TVEFMTF9FWENFUFRJT05fSEFORExFUlMgaXMgc2V0IHRvIDEuICovDQorCQkjaWYgKCBNSUNST0JMQVpFX0VYQ0VQVElPTlNfRU5BQkxFRCA9PSAxICkgJiYgKCBjb25maWdJTlNUQUxMX0VYQ0VQVElPTl9IQU5ETEVSUyA9PSAxICkNCisJICAgIHsNCisJICAgIAl2UG9ydEV4Y2VwdGlvbnNJbnN0YWxsSGFuZGxlcnMoKTsNCisJICAgIH0NCisJCSNlbmRpZiAvKiBNSUNST0JMQVpFX0VYQ0VQVElPTlNfRU5BQkxFRCAqLw0KIA0KLSAgICAgICAgLyogU3RhcnQgdGhlIGludGVycnVwdCBjb250cm9sbGVyLiAgSW50ZXJydXB0cyBhcmUgZW5hYmxlZCB3aGVuIHRoZQ0KLSAgICAgICAgICogc2NoZWR1bGVyIHN0YXJ0cy4gKi8NCi0gICAgICAgIGxTdGF0dXMgPSBYSW50Y19TdGFydCggJnhJbnRlcnJ1cHRDb250cm9sbGVySW5zdGFuY2UsIFhJTl9SRUFMX01PREUgKTsNCisJCS8qIFN0YXJ0IHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlci4gIEludGVycnVwdHMgYXJlIGVuYWJsZWQgd2hlbiB0aGUNCisJCXNjaGVkdWxlciBzdGFydHMuICovDQorCQlsU3RhdHVzID0gWEludGNfU3RhcnQoICZ4SW50ZXJydXB0Q29udHJvbGxlckluc3RhbmNlLCBYSU5fUkVBTF9NT0RFICk7DQogDQotICAgICAgICBpZiggbFN0YXR1cyA9PSBYU1RfU1VDQ0VTUyApDQotICAgICAgICB7DQotICAgICAgICAgICAgbFN0YXR1cyA9IHBkUEFTUzsNCi0gICAgICAgIH0NCi0gICAgICAgIGVsc2UNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBsU3RhdHVzID0gcGRGQUlMOw0KLSAgICAgICAgfQ0KLSAgICB9DQorCQlpZiggbFN0YXR1cyA9PSBYU1RfU1VDQ0VTUyApDQorCQl7DQorCQkJbFN0YXR1cyA9IHBkUEFTUzsNCisJCX0NCisJCWVsc2UNCisJCXsNCisJCQlsU3RhdHVzID0gcGRGQUlMOw0KKwkJfQ0KKwl9DQogDQotICAgIGNvbmZpZ0FTU0VSVCggbFN0YXR1cyA9PSBwZFBBU1MgKTsNCisJY29uZmlnQVNTRVJUKCBsU3RhdHVzID09IHBkUEFTUyApOw0KIA0KLSAgICByZXR1cm4gbFN0YXR1czsNCisJcmV0dXJuIGxTdGF0dXM7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0dDQy9NaWNyb0JsYXplVjgvcG9ydF9leGNlcHRpb25zLmMgYi9wb3J0YWJsZS9HQ0MvTWljcm9CbGF6ZVY4L3BvcnRfZXhjZXB0aW9ucy5jCmluZGV4IDZkNzk4Y2MuLmNhMmExYWMgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0dDQy9NaWNyb0JsYXplVjgvcG9ydF9leGNlcHRpb25zLmMKKysrIGIvcG9ydGFibGUvR0NDL01pY3JvQmxhemVWOC9wb3J0X2V4Y2VwdGlvbnMuYwpAQCAtMzQsMjQ0ICszNCwyNDkgQEAKICNpbmNsdWRlIDxtaWNyb2JsYXplX2V4Y2VwdGlvbnNfZy5oPg0KIA0KIC8qIFRoZSBYaWxpbnggbGlicmFyeSBkZWZpbmVkIGV4Y2VwdGlvbiBlbnRyeSBwb2ludCBzdGFja3MgYSBudW1iZXIgb2YNCi0gKiByZWdpc3RlcnMuICBUaGVzZSBkZWZpbml0aW9ucyBhcmUgb2Zmc2V0cyBmcm9tIHRoZSBzdGFjayBwb2ludGVyIHRvIHRoZSB2YXJpb3VzDQotICogc3RhY2tlZCByZWdpc3RlciB2YWx1ZXMuICovDQotI2RlZmluZSBwb3J0ZXhSM19TVEFDS19PRkZTRVQgICAgICAgICAgICAgICAgIDQNCi0jZGVmaW5lIHBvcnRleFI0X1NUQUNLX09GRlNFVCAgICAgICAgICAgICAgICAgNQ0KLSNkZWZpbmUgcG9ydGV4UjVfU1RBQ0tfT0ZGU0VUICAgICAgICAgICAgICAgICA2DQotI2RlZmluZSBwb3J0ZXhSNl9TVEFDS19PRkZTRVQgICAgICAgICAgICAgICAgIDcNCi0jZGVmaW5lIHBvcnRleFI3X1NUQUNLX09GRlNFVCAgICAgICAgICAgICAgICAgOA0KLSNkZWZpbmUgcG9ydGV4UjhfU1RBQ0tfT0ZGU0VUICAgICAgICAgICAgICAgICA5DQotI2RlZmluZSBwb3J0ZXhSOV9TVEFDS19PRkZTRVQgICAgICAgICAgICAgICAgIDEwDQotI2RlZmluZSBwb3J0ZXhSMTBfU1RBQ0tfT0ZGU0VUICAgICAgICAgICAgICAgIDExDQotI2RlZmluZSBwb3J0ZXhSMTFfU1RBQ0tfT0ZGU0VUICAgICAgICAgICAgICAgIDEyDQotI2RlZmluZSBwb3J0ZXhSMTJfU1RBQ0tfT0ZGU0VUICAgICAgICAgICAgICAgIDEzDQotI2RlZmluZSBwb3J0ZXhSMTVfU1RBQ0tfT0ZGU0VUICAgICAgICAgICAgICAgIDE2DQotI2RlZmluZSBwb3J0ZXhSMThfU1RBQ0tfT0ZGU0VUICAgICAgICAgICAgICAgIDE5DQotI2RlZmluZSBwb3J0ZXhNU1JfU1RBQ0tfT0ZGU0VUICAgICAgICAgICAgICAgIDIwDQotI2RlZmluZSBwb3J0ZXhSMTlfU1RBQ0tfT0ZGU0VUICAgICAgICAgICAgICAgIC0xDQorcmVnaXN0ZXJzLiAgVGhlc2UgZGVmaW5pdGlvbnMgYXJlIG9mZnNldHMgZnJvbSB0aGUgc3RhY2sgcG9pbnRlciB0byB0aGUgdmFyaW91cw0KK3N0YWNrZWQgcmVnaXN0ZXIgdmFsdWVzLiAqLw0KKyNkZWZpbmUgcG9ydGV4UjNfU1RBQ0tfT0ZGU0VUCTQNCisjZGVmaW5lIHBvcnRleFI0X1NUQUNLX09GRlNFVAk1DQorI2RlZmluZSBwb3J0ZXhSNV9TVEFDS19PRkZTRVQJNg0KKyNkZWZpbmUgcG9ydGV4UjZfU1RBQ0tfT0ZGU0VUCTcNCisjZGVmaW5lIHBvcnRleFI3X1NUQUNLX09GRlNFVAk4DQorI2RlZmluZSBwb3J0ZXhSOF9TVEFDS19PRkZTRVQJOQ0KKyNkZWZpbmUgcG9ydGV4UjlfU1RBQ0tfT0ZGU0VUCTEwDQorI2RlZmluZSBwb3J0ZXhSMTBfU1RBQ0tfT0ZGU0VUCTExDQorI2RlZmluZSBwb3J0ZXhSMTFfU1RBQ0tfT0ZGU0VUCTEyDQorI2RlZmluZSBwb3J0ZXhSMTJfU1RBQ0tfT0ZGU0VUCTEzDQorI2RlZmluZSBwb3J0ZXhSMTVfU1RBQ0tfT0ZGU0VUCTE2DQorI2RlZmluZSBwb3J0ZXhSMThfU1RBQ0tfT0ZGU0VUICAxOQ0KKyNkZWZpbmUgcG9ydGV4TVNSX1NUQUNLX09GRlNFVAkyMA0KKyNkZWZpbmUgcG9ydGV4UjE5X1NUQUNLX09GRlNFVCAgLTENCiANCiAvKiBUaGlzIGlzIGRlZmluZWQgdG8gZXF1YWwgdGhlIHNpemUsIGluIGJ5dGVzLCBvZiB0aGUgc3RhY2sgZnJhbWUgZ2VuZXJhdGVkIGJ5DQotICogdGhlIFhpbGlueCBzdGFuZGFyZCBsaWJyYXJ5IGV4Y2VwdGlvbiBlbnRyeSBwb2ludC4gIEl0IGlzIHJlcXVpcmVkIHRvIGRldGVybWluZQ0KLSAqIHRoZSBzdGFjayBwb2ludGVyIHZhbHVlIHByaW9yIHRvIHRoZSBleGNlcHRpb24gYmVpbmcgZW50ZXJlZC4gKi8NCi0jZGVmaW5lIHBvcnRleEFTTV9IQU5ETEVSX1NUQUNLX0ZSQU1FX1NJWkUgICAgODRVTA0KK3RoZSBYaWxpbnggc3RhbmRhcmQgbGlicmFyeSBleGNlcHRpb24gZW50cnkgcG9pbnQuICBJdCBpcyByZXF1aXJlZCB0byBkZXRlcm1pbmUNCit0aGUgc3RhY2sgcG9pbnRlciB2YWx1ZSBwcmlvciB0byB0aGUgZXhjZXB0aW9uIGJlaW5nIGVudGVyZWQuICovDQorI2RlZmluZSBwb3J0ZXhBU01fSEFORExFUl9TVEFDS19GUkFNRV9TSVpFIDg0VUwNCiANCiAvKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGEgTWljcm9CbGF6ZSBpbnN0cnVjdGlvbiBjb25zdW1lcy4gKi8NCi0jZGVmaW5lIHBvcnRleElOU1RSVUNUSU9OX1NJWkUgICAgICAgICAgICAgICAgNA0KKyNkZWZpbmUgcG9ydGV4SU5TVFJVQ1RJT05fU0laRQk0DQogDQogLyogRXhjbHVkZSB0aGlzIGVudGlyZSBmaWxlIGlmIHRoZSBNaWNyb0JsYXplIGlzIG5vdCBjb25maWd1cmVkIHRvIGhhbmRsZQ0KLSAqIGV4Y2VwdGlvbnMsIG9yIHRoZSBhcHBsaWNhdGlvbiBkZWZpbmVkIGNvbmZpZ3VyYXRpb24gY29uc3RhbnQNCi0gKiBjb25maWdJTlNUQUxMX0VYQ0VQVElPTl9IQU5ETEVSUyBpcyBub3Qgc2V0IHRvIDEuICovDQorZXhjZXB0aW9ucywgb3IgdGhlIGFwcGxpY2F0aW9uIGRlZmluZWQgY29uZmlndXJhdGlvbiBjb25zdGFudA0KK2NvbmZpZ0lOU1RBTExfRVhDRVBUSU9OX0hBTkRMRVJTIGlzIG5vdCBzZXQgdG8gMS4gKi8NCiAjaWYgKCBNSUNST0JMQVpFX0VYQ0VQVElPTlNfRU5BQkxFRCA9PSAxICkgJiYgKCBjb25maWdJTlNUQUxMX0VYQ0VQVElPTl9IQU5ETEVSUyA9PSAxICkNCiANCiAvKiBUaGlzIHZhcmlhYmxlIGlzIHNldCBpbiB0aGUgZXhjZXB0aW9uIGVudHJ5IGNvZGUsIGJlZm9yZQ0KLSAqIHZQb3J0RXhjZXB0aW9uSGFuZGxlciBpcyBjYWxsZWQuICovDQotICAgIHVpbnQzMl90ICogcHVsU3RhY2tQb2ludGVyT25GdW5jdGlvbkVudHJ5ID0gTlVMTDsNCit2UG9ydEV4Y2VwdGlvbkhhbmRsZXIgaXMgY2FsbGVkLiAqLw0KK3VpbnQzMl90ICpwdWxTdGFja1BvaW50ZXJPbkZ1bmN0aW9uRW50cnkgPSBOVUxMOw0KIA0KIC8qIFRoaXMgaXMgdGhlIHN0cnVjdHVyZSB0aGF0IGlzIGZpbGxlZCB3aXRoIHRoZSBNaWNyb0JsYXplIGNvbnRleHQgYXMgaXQNCi0gKiBleGlzdGVkIGltbWVkaWF0ZWx5IHByaW9yIHRvIHRoZSBleGNlcHRpb24gb2NjdXJyZW5jZS4gIEEgcG9pbnRlciB0byB0aGlzDQotICogc3RydWN0dXJlIGlzIHBhc3NlZCBpbnRvIHRoZSB2QXBwbGljYXRpb25FeGNlcHRpb25SZWdpc3RlckR1bXAoKSBjYWxsYmFjaw0KLSAqIGZ1bmN0aW9uLCBpZiBvbmUgaXMgZGVmaW5lZC4gKi8NCi0gICAgc3RhdGljIHhQb3J0UmVnaXN0ZXJEdW1wIHhSZWdpc3RlckR1bXA7DQorZXhpc3RlZCBpbW1lZGlhdGVseSBwcmlvciB0byB0aGUgZXhjZXB0aW9uIG9jY3VycmVuY2UuICBBIHBvaW50ZXIgdG8gdGhpcw0KK3N0cnVjdHVyZSBpcyBwYXNzZWQgaW50byB0aGUgdkFwcGxpY2F0aW9uRXhjZXB0aW9uUmVnaXN0ZXJEdW1wKCkgY2FsbGJhY2sNCitmdW5jdGlvbiwgaWYgb25lIGlzIGRlZmluZWQuICovDQorc3RhdGljIHhQb3J0UmVnaXN0ZXJEdW1wIHhSZWdpc3RlckR1bXA7DQogDQogLyogVGhpcyBpcyB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uIGhhbmRsZXIgdGhhdCBpcyBpbnN0YWxsZWQgZm9yIGFsbCBleGNlcHRpb24NCi0gKiB0eXBlcy4gIEl0IGlzIGNhbGxlZCBmcm9tIHZQb3J0RXhjZXB0aW9uSGFubGRlckVudHJ5KCkgLSB3aGljaCBpcyBpdHNlbGYgZGVmaW5lZA0KLSAqIGluIHBvcnRhc20uUy4gKi8NCi0gICAgdm9pZCB2UG9ydEV4Y2VwdGlvbkhhbmRsZXIoIHZvaWQgKiBwdkV4Y2VwdGlvbklEICk7DQotICAgIGV4dGVybiB2b2lkIHZQb3J0RXhjZXB0aW9uSGFuZGxlckVudHJ5KCB2b2lkICogcHZFeGNlcHRpb25JRCApOw0KK3R5cGVzLiAgSXQgaXMgY2FsbGVkIGZyb20gdlBvcnRFeGNlcHRpb25IYW5sZGVyRW50cnkoKSAtIHdoaWNoIGlzIGl0c2VsZiBkZWZpbmVkDQoraW4gcG9ydGFzbS5TLiAqLw0KK3ZvaWQgdlBvcnRFeGNlcHRpb25IYW5kbGVyKCB2b2lkICpwdkV4Y2VwdGlvbklEICk7DQorZXh0ZXJuIHZvaWQgdlBvcnRFeGNlcHRpb25IYW5kbGVyRW50cnkoIHZvaWQgKnB2RXhjZXB0aW9uSUQgKTsNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiB2QXBwbGljYXRpb25FeGNlcHRpb25SZWdpc3RlckR1bXAoKSBpcyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgdGhlDQotICogYXBwbGljYXRpb24gY2FuIG9wdGlvbmFsbHkgZGVmaW5lIHRvIHJlY2VpdmUgYSBwb3B1bGF0ZWQgeFBvcnRSZWdpc3RlckR1bXANCi0gKiBzdHJ1Y3R1cmUuICBJZiB0aGUgYXBwbGljYXRpb24gY2hvb3NlcyBub3QgdG8gZGVmaW5lIGEgdmVyc2lvbiBvZg0KLSAqIHZBcHBsaWNhdGlvbkV4Y2VwdGlvblJlZ2lzdGVyRHVtcCgpIHRoZW4gdGhpcyB3ZWVrbHkgZGVmaW5lZCBkZWZhdWx0DQotICogaW1wbGVtZW50YXRpb24gd2lsbCBiZSBjYWxsZWQgaW5zdGVhZC4gKi8NCi0gICAgZXh0ZXJuIHZvaWQgdkFwcGxpY2F0aW9uRXhjZXB0aW9uUmVnaXN0ZXJEdW1wKCB4UG9ydFJlZ2lzdGVyRHVtcCAqIHhSZWdpc3RlckR1bXAgKSBfX2F0dHJpYnV0ZV9fKCAoIHdlYWsgKSApOw0KLSAgICB2b2lkIHZBcHBsaWNhdGlvbkV4Y2VwdGlvblJlZ2lzdGVyRHVtcCggeFBvcnRSZWdpc3RlckR1bXAgKiB4UmVnaXN0ZXJEdW1wICkNCi0gICAgew0KLSAgICAgICAgKCB2b2lkICkgeFJlZ2lzdGVyRHVtcDsNCithcHBsaWNhdGlvbiBjYW4gb3B0aW9uYWxseSBkZWZpbmUgdG8gcmVjZWl2ZSBhIHBvcHVsYXRlZCB4UG9ydFJlZ2lzdGVyRHVtcA0KK3N0cnVjdHVyZS4gIElmIHRoZSBhcHBsaWNhdGlvbiBjaG9vc2VzIG5vdCB0byBkZWZpbmUgYSB2ZXJzaW9uIG9mDQordkFwcGxpY2F0aW9uRXhjZXB0aW9uUmVnaXN0ZXJEdW1wKCkgdGhlbiB0aGlzIHdlZWtseSBkZWZpbmVkIGRlZmF1bHQNCitpbXBsZW1lbnRhdGlvbiB3aWxsIGJlIGNhbGxlZCBpbnN0ZWFkLiAqLw0KK2V4dGVybiB2b2lkIHZBcHBsaWNhdGlvbkV4Y2VwdGlvblJlZ2lzdGVyRHVtcCggeFBvcnRSZWdpc3RlckR1bXAgKnhSZWdpc3RlckR1bXAgKSBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSk7DQordm9pZCB2QXBwbGljYXRpb25FeGNlcHRpb25SZWdpc3RlckR1bXAoIHhQb3J0UmVnaXN0ZXJEdW1wICp4UmVnaXN0ZXJEdW1wICkNCit7DQorCSggdm9pZCApIHhSZWdpc3RlckR1bXA7DQogDQotICAgICAgICBmb3IoIDsgOyApDQotICAgICAgICB7DQotICAgICAgICAgICAgcG9ydE5PUCgpOw0KLSAgICAgICAgfQ0KLSAgICB9DQorCWZvciggOzsgKQ0KKwl7DQorCQlwb3J0Tk9QKCk7DQorCX0NCit9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQotICAgIHZvaWQgdlBvcnRFeGNlcHRpb25IYW5kbGVyKCB2b2lkICogcHZFeGNlcHRpb25JRCApDQotICAgIHsNCi0gICAgICAgIGV4dGVybiB2b2lkICogcHhDdXJyZW50VENCOw0KK3ZvaWQgdlBvcnRFeGNlcHRpb25IYW5kbGVyKCB2b2lkICpwdkV4Y2VwdGlvbklEICkNCit7DQorZXh0ZXJuIHZvaWQgKnB4Q3VycmVudFRDQjsNCiANCi0gICAgICAgIC8qIEZpbGwgYW4geFBvcnRSZWdpc3RlckR1bXAgc3RydWN0dXJlIHdpdGggdGhlIE1pY3JvQmxhemUgY29udGV4dCBhcyBpdA0KLSAgICAgICAgICogd2FzIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgZXhjZXB0aW9uIG9jY3VycmVuY2UuICovDQorCS8qIEZpbGwgYW4geFBvcnRSZWdpc3RlckR1bXAgc3RydWN0dXJlIHdpdGggdGhlIE1pY3JvQmxhemUgY29udGV4dCBhcyBpdA0KKwl3YXMgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBleGNlcHRpb24gb2NjdXJyZW5jZS4gKi8NCiANCi0gICAgICAgIC8qIEZpcnN0IGZpbGwgaW4gdGhlIG5hbWUgYW5kIGhhbmRsZSBvZiB0aGUgdGFzayB0aGF0IHdhcyBpbiB0aGUgUnVubmluZw0KLSAgICAgICAgICogc3RhdGUgd2hlbiB0aGUgZXhjZXB0aW9uIG9jY3VycmVkLiAqLw0KLSAgICAgICAgeFJlZ2lzdGVyRHVtcC54Q3VycmVudFRhc2tIYW5kbGUgPSBweEN1cnJlbnRUQ0I7DQotICAgICAgICB4UmVnaXN0ZXJEdW1wLnBjQ3VycmVudFRhc2tOYW1lID0gcGNUYXNrR2V0TmFtZSggTlVMTCApOw0KKwkvKiBGaXJzdCBmaWxsIGluIHRoZSBuYW1lIGFuZCBoYW5kbGUgb2YgdGhlIHRhc2sgdGhhdCB3YXMgaW4gdGhlIFJ1bm5pbmcNCisJc3RhdGUgd2hlbiB0aGUgZXhjZXB0aW9uIG9jY3VycmVkLiAqLw0KKwl4UmVnaXN0ZXJEdW1wLnhDdXJyZW50VGFza0hhbmRsZSA9IHB4Q3VycmVudFRDQjsNCisJeFJlZ2lzdGVyRHVtcC5wY0N1cnJlbnRUYXNrTmFtZSA9IHBjVGFza0dldE5hbWUoIE5VTEwgKTsNCiANCi0gICAgICAgIGNvbmZpZ0FTU0VSVCggcHVsU3RhY2tQb2ludGVyT25GdW5jdGlvbkVudHJ5ICk7DQorCWNvbmZpZ0FTU0VSVCggcHVsU3RhY2tQb2ludGVyT25GdW5jdGlvbkVudHJ5ICk7DQogDQotICAgICAgICAvKiBPYnRhaW4gdGhlIHZhbHVlcyBvZiByZWdpc3RlcnMgdGhhdCB3ZXJlIHN0YWNrZWQgcHJpb3IgdG8gdGhpcyBmdW5jdGlvbg0KLSAgICAgICAgICogYmVpbmcgY2FsbGVkLCBhbmQgbWF5IGhhdmUgY2hhbmdlZCBzaW5jZSB0aGV5IHdlcmUgc3RhY2tlZC4gKi8NCi0gICAgICAgIHhSZWdpc3RlckR1bXAudWxSMyA9IHB1bFN0YWNrUG9pbnRlck9uRnVuY3Rpb25FbnRyeVsgcG9ydGV4UjNfU1RBQ0tfT0ZGU0VUIF07DQotICAgICAgICB4UmVnaXN0ZXJEdW1wLnVsUjQgPSBwdWxTdGFja1BvaW50ZXJPbkZ1bmN0aW9uRW50cnlbIHBvcnRleFI0X1NUQUNLX09GRlNFVCBdOw0KLSAgICAgICAgeFJlZ2lzdGVyRHVtcC51bFI1ID0gcHVsU3RhY2tQb2ludGVyT25GdW5jdGlvbkVudHJ5WyBwb3J0ZXhSNV9TVEFDS19PRkZTRVQgXTsNCi0gICAgICAgIHhSZWdpc3RlckR1bXAudWxSNiA9IHB1bFN0YWNrUG9pbnRlck9uRnVuY3Rpb25FbnRyeVsgcG9ydGV4UjZfU1RBQ0tfT0ZGU0VUIF07DQotICAgICAgICB4UmVnaXN0ZXJEdW1wLnVsUjcgPSBwdWxTdGFja1BvaW50ZXJPbkZ1bmN0aW9uRW50cnlbIHBvcnRleFI3X1NUQUNLX09GRlNFVCBdOw0KLSAgICAgICAgeFJlZ2lzdGVyRHVtcC51bFI4ID0gcHVsU3RhY2tQb2ludGVyT25GdW5jdGlvbkVudHJ5WyBwb3J0ZXhSOF9TVEFDS19PRkZTRVQgXTsNCi0gICAgICAgIHhSZWdpc3RlckR1bXAudWxSOSA9IHB1bFN0YWNrUG9pbnRlck9uRnVuY3Rpb25FbnRyeVsgcG9ydGV4UjlfU1RBQ0tfT0ZGU0VUIF07DQotICAgICAgICB4UmVnaXN0ZXJEdW1wLnVsUjEwID0gcHVsU3RhY2tQb2ludGVyT25GdW5jdGlvbkVudHJ5WyBwb3J0ZXhSMTBfU1RBQ0tfT0ZGU0VUIF07DQotICAgICAgICB4UmVnaXN0ZXJEdW1wLnVsUjExID0gcHVsU3RhY2tQb2ludGVyT25GdW5jdGlvbkVudHJ5WyBwb3J0ZXhSMTFfU1RBQ0tfT0ZGU0VUIF07DQotICAgICAgICB4UmVnaXN0ZXJEdW1wLnVsUjEyID0gcHVsU3RhY2tQb2ludGVyT25GdW5jdGlvbkVudHJ5WyBwb3J0ZXhSMTJfU1RBQ0tfT0ZGU0VUIF07DQotICAgICAgICB4UmVnaXN0ZXJEdW1wLnVsUjE1X3JldHVybl9hZGRyZXNzX2Zyb21fc3Vicm91dGluZSA9IHB1bFN0YWNrUG9pbnRlck9uRnVuY3Rpb25FbnRyeVsgcG9ydGV4UjE1X1NUQUNLX09GRlNFVCBdOw0KLSAgICAgICAgeFJlZ2lzdGVyRHVtcC51bFIxOCA9IHB1bFN0YWNrUG9pbnRlck9uRnVuY3Rpb25FbnRyeVsgcG9ydGV4UjE4X1NUQUNLX09GRlNFVCBdOw0KLSAgICAgICAgeFJlZ2lzdGVyRHVtcC51bFIxOSA9IHB1bFN0YWNrUG9pbnRlck9uRnVuY3Rpb25FbnRyeVsgcG9ydGV4UjE5X1NUQUNLX09GRlNFVCBdOw0KLSAgICAgICAgeFJlZ2lzdGVyRHVtcC51bE1TUiA9IHB1bFN0YWNrUG9pbnRlck9uRnVuY3Rpb25FbnRyeVsgcG9ydGV4TVNSX1NUQUNLX09GRlNFVCBdOw0KKwkvKiBPYnRhaW4gdGhlIHZhbHVlcyBvZiByZWdpc3RlcnMgdGhhdCB3ZXJlIHN0YWNrZWQgcHJpb3IgdG8gdGhpcyBmdW5jdGlvbg0KKwliZWluZyBjYWxsZWQsIGFuZCBtYXkgaGF2ZSBjaGFuZ2VkIHNpbmNlIHRoZXkgd2VyZSBzdGFja2VkLiAqLw0KKwl4UmVnaXN0ZXJEdW1wLnVsUjMgPSBwdWxTdGFja1BvaW50ZXJPbkZ1bmN0aW9uRW50cnlbIHBvcnRleFIzX1NUQUNLX09GRlNFVCBdOw0KKwl4UmVnaXN0ZXJEdW1wLnVsUjQgPSBwdWxTdGFja1BvaW50ZXJPbkZ1bmN0aW9uRW50cnlbIHBvcnRleFI0X1NUQUNLX09GRlNFVCBdOw0KKwl4UmVnaXN0ZXJEdW1wLnVsUjUgPSBwdWxTdGFja1BvaW50ZXJPbkZ1bmN0aW9uRW50cnlbIHBvcnRleFI1X1NUQUNLX09GRlNFVCBdOw0KKwl4UmVnaXN0ZXJEdW1wLnVsUjYgPSBwdWxTdGFja1BvaW50ZXJPbkZ1bmN0aW9uRW50cnlbIHBvcnRleFI2X1NUQUNLX09GRlNFVCBdOw0KKwl4UmVnaXN0ZXJEdW1wLnVsUjcgPSBwdWxTdGFja1BvaW50ZXJPbkZ1bmN0aW9uRW50cnlbIHBvcnRleFI3X1NUQUNLX09GRlNFVCBdOw0KKwl4UmVnaXN0ZXJEdW1wLnVsUjggPSBwdWxTdGFja1BvaW50ZXJPbkZ1bmN0aW9uRW50cnlbIHBvcnRleFI4X1NUQUNLX09GRlNFVCBdOw0KKwl4UmVnaXN0ZXJEdW1wLnVsUjkgPSBwdWxTdGFja1BvaW50ZXJPbkZ1bmN0aW9uRW50cnlbIHBvcnRleFI5X1NUQUNLX09GRlNFVCBdOw0KKwl4UmVnaXN0ZXJEdW1wLnVsUjEwID0gcHVsU3RhY2tQb2ludGVyT25GdW5jdGlvbkVudHJ5WyBwb3J0ZXhSMTBfU1RBQ0tfT0ZGU0VUIF07DQorCXhSZWdpc3RlckR1bXAudWxSMTEgPSBwdWxTdGFja1BvaW50ZXJPbkZ1bmN0aW9uRW50cnlbIHBvcnRleFIxMV9TVEFDS19PRkZTRVQgXTsNCisJeFJlZ2lzdGVyRHVtcC51bFIxMiA9IHB1bFN0YWNrUG9pbnRlck9uRnVuY3Rpb25FbnRyeVsgcG9ydGV4UjEyX1NUQUNLX09GRlNFVCBdOw0KKwl4UmVnaXN0ZXJEdW1wLnVsUjE1X3JldHVybl9hZGRyZXNzX2Zyb21fc3Vicm91dGluZSA9IHB1bFN0YWNrUG9pbnRlck9uRnVuY3Rpb25FbnRyeVsgcG9ydGV4UjE1X1NUQUNLX09GRlNFVCBdOw0KKwl4UmVnaXN0ZXJEdW1wLnVsUjE4ID0gcHVsU3RhY2tQb2ludGVyT25GdW5jdGlvbkVudHJ5WyBwb3J0ZXhSMThfU1RBQ0tfT0ZGU0VUIF07DQorCXhSZWdpc3RlckR1bXAudWxSMTkgPSBwdWxTdGFja1BvaW50ZXJPbkZ1bmN0aW9uRW50cnlbIHBvcnRleFIxOV9TVEFDS19PRkZTRVQgXTsNCisJeFJlZ2lzdGVyRHVtcC51bE1TUiA9IHB1bFN0YWNrUG9pbnRlck9uRnVuY3Rpb25FbnRyeVsgcG9ydGV4TVNSX1NUQUNLX09GRlNFVCBdOw0KIA0KLSAgICAgICAgLyogT2J0YWluIHRoZSB2YWx1ZSBvZiBhbGwgb3RoZXIgcmVnaXN0ZXJzLiAqLw0KLSAgICAgICAgeFJlZ2lzdGVyRHVtcC51bFIyX3NtYWxsX2RhdGFfYXJlYSA9IG1mZ3ByKCBSMiApOw0KLSAgICAgICAgeFJlZ2lzdGVyRHVtcC51bFIxM19yZWFkX3dyaXRlX3NtYWxsX2RhdGFfYXJlYSA9IG1mZ3ByKCBSMTMgKTsNCi0gICAgICAgIHhSZWdpc3RlckR1bXAudWxSMTRfcmV0dXJuX2FkZHJlc3NfZnJvbV9pbnRlcnJ1cHQgPSBtZmdwciggUjE0ICk7DQotICAgICAgICB4UmVnaXN0ZXJEdW1wLnVsUjE2X3JldHVybl9hZGRyZXNzX2Zyb21fdHJhcCA9IG1mZ3ByKCBSMTYgKTsNCi0gICAgICAgIHhSZWdpc3RlckR1bXAudWxSMTdfcmV0dXJuX2FkZHJlc3NfZnJvbV9leGNlcHRpb25zID0gbWZncHIoIFIxNyApOw0KLSAgICAgICAgeFJlZ2lzdGVyRHVtcC51bFIyMCA9IG1mZ3ByKCBSMjAgKTsNCi0gICAgICAgIHhSZWdpc3RlckR1bXAudWxSMjEgPSBtZmdwciggUjIxICk7DQotICAgICAgICB4UmVnaXN0ZXJEdW1wLnVsUjIyID0gbWZncHIoIFIyMiApOw0KLSAgICAgICAgeFJlZ2lzdGVyRHVtcC51bFIyMyA9IG1mZ3ByKCBSMjMgKTsNCi0gICAgICAgIHhSZWdpc3RlckR1bXAudWxSMjQgPSBtZmdwciggUjI0ICk7DQotICAgICAgICB4UmVnaXN0ZXJEdW1wLnVsUjI1ID0gbWZncHIoIFIyNSApOw0KLSAgICAgICAgeFJlZ2lzdGVyRHVtcC51bFIyNiA9IG1mZ3ByKCBSMjYgKTsNCi0gICAgICAgIHhSZWdpc3RlckR1bXAudWxSMjcgPSBtZmdwciggUjI3ICk7DQotICAgICAgICB4UmVnaXN0ZXJEdW1wLnVsUjI4ID0gbWZncHIoIFIyOCApOw0KLSAgICAgICAgeFJlZ2lzdGVyRHVtcC51bFIyOSA9IG1mZ3ByKCBSMjkgKTsNCi0gICAgICAgIHhSZWdpc3RlckR1bXAudWxSMzAgPSBtZmdwciggUjMwICk7DQotICAgICAgICB4UmVnaXN0ZXJEdW1wLnVsUjMxID0gbWZncHIoIFIzMSApOw0KLSAgICAgICAgeFJlZ2lzdGVyRHVtcC51bFIxX1NQID0gKCAoIHVpbnQzMl90ICkgcHVsU3RhY2tQb2ludGVyT25GdW5jdGlvbkVudHJ5ICkgKyBwb3J0ZXhBU01fSEFORExFUl9TVEFDS19GUkFNRV9TSVpFOw0KLSAgICAgICAgeFJlZ2lzdGVyRHVtcC51bEVBUiA9IG1mZWFyKCk7DQotICAgICAgICB4UmVnaXN0ZXJEdW1wLnVsRVNSID0gbWZlc3IoKTsNCi0gICAgICAgIHhSZWdpc3RlckR1bXAudWxFRFIgPSBtZmVkcigpOw0KKwkvKiBPYnRhaW4gdGhlIHZhbHVlIG9mIGFsbCBvdGhlciByZWdpc3RlcnMuICovDQorCXhSZWdpc3RlckR1bXAudWxSMl9zbWFsbF9kYXRhX2FyZWEgPSBtZmdwciggUjIgKTsNCisJeFJlZ2lzdGVyRHVtcC51bFIxM19yZWFkX3dyaXRlX3NtYWxsX2RhdGFfYXJlYSA9IG1mZ3ByKCBSMTMgKTsNCisJeFJlZ2lzdGVyRHVtcC51bFIxNF9yZXR1cm5fYWRkcmVzc19mcm9tX2ludGVycnVwdCA9IG1mZ3ByKCBSMTQgKTsNCisJeFJlZ2lzdGVyRHVtcC51bFIxNl9yZXR1cm5fYWRkcmVzc19mcm9tX3RyYXAgPSBtZmdwciggUjE2ICk7DQorCXhSZWdpc3RlckR1bXAudWxSMTdfcmV0dXJuX2FkZHJlc3NfZnJvbV9leGNlcHRpb25zID0gbWZncHIoIFIxNyApOw0KKwl4UmVnaXN0ZXJEdW1wLnVsUjIwID0gbWZncHIoIFIyMCApOw0KKwl4UmVnaXN0ZXJEdW1wLnVsUjIxID0gbWZncHIoIFIyMSApOw0KKwl4UmVnaXN0ZXJEdW1wLnVsUjIyID0gbWZncHIoIFIyMiApOw0KKwl4UmVnaXN0ZXJEdW1wLnVsUjIzID0gbWZncHIoIFIyMyApOw0KKwl4UmVnaXN0ZXJEdW1wLnVsUjI0ID0gbWZncHIoIFIyNCApOw0KKwl4UmVnaXN0ZXJEdW1wLnVsUjI1ID0gbWZncHIoIFIyNSApOw0KKwl4UmVnaXN0ZXJEdW1wLnVsUjI2ID0gbWZncHIoIFIyNiApOw0KKwl4UmVnaXN0ZXJEdW1wLnVsUjI3ID0gbWZncHIoIFIyNyApOw0KKwl4UmVnaXN0ZXJEdW1wLnVsUjI4ID0gbWZncHIoIFIyOCApOw0KKwl4UmVnaXN0ZXJEdW1wLnVsUjI5ID0gbWZncHIoIFIyOSApOw0KKwl4UmVnaXN0ZXJEdW1wLnVsUjMwID0gbWZncHIoIFIzMCApOw0KKwl4UmVnaXN0ZXJEdW1wLnVsUjMxID0gbWZncHIoIFIzMSApOw0KKwl4UmVnaXN0ZXJEdW1wLnVsUjFfU1AgPSAoICggdWludDMyX3QgKSBwdWxTdGFja1BvaW50ZXJPbkZ1bmN0aW9uRW50cnkgKSArIHBvcnRleEFTTV9IQU5ETEVSX1NUQUNLX0ZSQU1FX1NJWkU7DQorCXhSZWdpc3RlckR1bXAudWxFQVIgPSBtZmVhcigpOw0KKwl4UmVnaXN0ZXJEdW1wLnVsRVNSID0gbWZlc3IoKTsNCisJeFJlZ2lzdGVyRHVtcC51bEVEUiA9IG1mZWRyKCk7DQogDQotICAgICAgICAvKiBNb3ZlIHRoZSBzYXZlZCBwcm9ncmFtIGNvdW50ZXIgYmFjayB0byB0aGUgaW5zdHJ1Y3Rpb24gdGhhdCB3YXMgZXhlY3V0ZWQNCi0gICAgICAgICAqIHdoZW4gdGhlIGV4Y2VwdGlvbiBvY2N1cnJlZC4gIFRoaXMgaXMgb25seSB2YWxpZCBmb3IgY2VydGFpbiB0eXBlcyBvZg0KLSAgICAgICAgICogZXhjZXB0aW9uLiAqLw0KLSAgICAgICAgeFJlZ2lzdGVyRHVtcC51bFBDID0geFJlZ2lzdGVyRHVtcC51bFIxN19yZXR1cm5fYWRkcmVzc19mcm9tX2V4Y2VwdGlvbnMgLSBwb3J0ZXhJTlNUUlVDVElPTl9TSVpFOw0KKwkvKiBNb3ZlIHRoZSBzYXZlZCBwcm9ncmFtIGNvdW50ZXIgYmFjayB0byB0aGUgaW5zdHJ1Y3Rpb24gdGhhdCB3YXMgZXhlY3V0ZWQNCisJd2hlbiB0aGUgZXhjZXB0aW9uIG9jY3VycmVkLiAgVGhpcyBpcyBvbmx5IHZhbGlkIGZvciBjZXJ0YWluIHR5cGVzIG9mDQorCWV4Y2VwdGlvbi4gKi8NCisJeFJlZ2lzdGVyRHVtcC51bFBDID0geFJlZ2lzdGVyRHVtcC51bFIxN19yZXR1cm5fYWRkcmVzc19mcm9tX2V4Y2VwdGlvbnMgLSBwb3J0ZXhJTlNUUlVDVElPTl9TSVpFOw0KIA0KLSAgICAgICAgI2lmICggWFBBUl9NSUNST0JMQVpFX1VTRV9GUFUgIT0gMCApDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICB4UmVnaXN0ZXJEdW1wLnVsRlNSID0gbWZmc3IoKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAjZWxzZQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgeFJlZ2lzdGVyRHVtcC51bEZTUiA9IDBVTDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAjZW5kaWYNCisJI2lmKCBYUEFSX01JQ1JPQkxBWkVfVVNFX0ZQVSAhPSAwICkNCisJew0KKwkJeFJlZ2lzdGVyRHVtcC51bEZTUiA9IG1mZnNyKCk7DQorCX0NCisJI2Vsc2UNCisJew0KKwkJeFJlZ2lzdGVyRHVtcC51bEZTUiA9IDBVTDsNCisJfQ0KKwkjZW5kaWYNCiANCi0gICAgICAgIC8qIEFsc28gZmlsbCBpbiBhIHN0cmluZyB0aGF0IGRlc2NyaWJlcyB3aGF0IHR5cGUgb2YgZXhjZXB0aW9uIHRoaXMgaXMuDQotICAgICAgICAgKiBUaGUgc3RyaW5nIHVzZXMgdGhlIHNhbWUgSUQgbmFtZXMgYXMgZGVmaW5lZCBpbiB0aGUgTWljcm9CbGF6ZSBzdGFuZGFyZA0KLSAgICAgICAgICogbGlicmFyeSBleGNlcHRpb24gaGVhZGVyIGZpbGVzLiAqLw0KLSAgICAgICAgc3dpdGNoKCAoIHVpbnQzMl90ICkgcHZFeGNlcHRpb25JRCApDQotICAgICAgICB7DQotICAgICAgICAgICAgY2FzZSBYRVhDX0lEX0ZTTDoNCi0gICAgICAgICAgICAgICAgeFJlZ2lzdGVyRHVtcC5wY0V4Y2VwdGlvbkNhdXNlID0gKCBpbnQ4X3QgKiBjb25zdCApICJYRVhDX0lEX0ZTTCI7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KKwkvKiBBbHNvIGZpbGwgaW4gYSBzdHJpbmcgdGhhdCBkZXNjcmliZXMgd2hhdCB0eXBlIG9mIGV4Y2VwdGlvbiB0aGlzIGlzLg0KKwlUaGUgc3RyaW5nIHVzZXMgdGhlIHNhbWUgSUQgbmFtZXMgYXMgZGVmaW5lZCBpbiB0aGUgTWljcm9CbGF6ZSBzdGFuZGFyZA0KKwlsaWJyYXJ5IGV4Y2VwdGlvbiBoZWFkZXIgZmlsZXMuICovDQorCXN3aXRjaCggKCB1aW50MzJfdCApIHB2RXhjZXB0aW9uSUQgKQ0KKwl7DQorCQljYXNlIFhFWENfSURfRlNMIDoNCisJCQkJeFJlZ2lzdGVyRHVtcC5wY0V4Y2VwdGlvbkNhdXNlID0gKCBpbnQ4X3QgKiBjb25zdCApICJYRVhDX0lEX0ZTTCI7DQorCQkJCWJyZWFrOw0KIA0KLSAgICAgICAgICAgIGNhc2UgWEVYQ19JRF9VTkFMSUdORURfQUNDRVNTOg0KLSAgICAgICAgICAgICAgICB4UmVnaXN0ZXJEdW1wLnBjRXhjZXB0aW9uQ2F1c2UgPSAoIGludDhfdCAqIGNvbnN0ICkgIlhFWENfSURfVU5BTElHTkVEX0FDQ0VTUyI7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KKwkJY2FzZSBYRVhDX0lEX1VOQUxJR05FRF9BQ0NFU1MgOg0KKwkJCQl4UmVnaXN0ZXJEdW1wLnBjRXhjZXB0aW9uQ2F1c2UgPSAoIGludDhfdCAqIGNvbnN0ICkgIlhFWENfSURfVU5BTElHTkVEX0FDQ0VTUyI7DQorCQkJCWJyZWFrOw0KIA0KLSAgICAgICAgICAgIGNhc2UgWEVYQ19JRF9JTExFR0FMX09QQ09ERToNCi0gICAgICAgICAgICAgICAgeFJlZ2lzdGVyRHVtcC5wY0V4Y2VwdGlvbkNhdXNlID0gKCBpbnQ4X3QgKiBjb25zdCApICJYRVhDX0lEX0lMTEVHQUxfT1BDT0RFIjsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQorCQljYXNlIFhFWENfSURfSUxMRUdBTF9PUENPREUgOg0KKwkJCQl4UmVnaXN0ZXJEdW1wLnBjRXhjZXB0aW9uQ2F1c2UgPSAoIGludDhfdCAqIGNvbnN0ICkgIlhFWENfSURfSUxMRUdBTF9PUENPREUiOw0KKwkJCQlicmVhazsNCiANCi0gICAgICAgICAgICBjYXNlIFhFWENfSURfTV9BWElfSV9FWENFUFRJT046DQotICAgICAgICAgICAgICAgIHhSZWdpc3RlckR1bXAucGNFeGNlcHRpb25DYXVzZSA9ICggaW50OF90ICogY29uc3QgKSAiWEVYQ19JRF9NX0FYSV9JX0VYQ0VQVElPTiBvciBYRVhDX0lEX0lQTEJfRVhDRVBUSU9OIjsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQorCQljYXNlIFhFWENfSURfTV9BWElfSV9FWENFUFRJT04gOg0KKwkJCQl4UmVnaXN0ZXJEdW1wLnBjRXhjZXB0aW9uQ2F1c2UgPSAoIGludDhfdCAqIGNvbnN0ICkgIlhFWENfSURfTV9BWElfSV9FWENFUFRJT04gb3IgWEVYQ19JRF9JUExCX0VYQ0VQVElPTiI7DQorCQkJCWJyZWFrOw0KIA0KLSAgICAgICAgICAgIGNhc2UgWEVYQ19JRF9NX0FYSV9EX0VYQ0VQVElPTjoNCi0gICAgICAgICAgICAgICAgeFJlZ2lzdGVyRHVtcC5wY0V4Y2VwdGlvbkNhdXNlID0gKCBpbnQ4X3QgKiBjb25zdCApICJYRVhDX0lEX01fQVhJX0RfRVhDRVBUSU9OIG9yIFhFWENfSURfRFBMQl9FWENFUFRJT04iOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCisJCWNhc2UgWEVYQ19JRF9NX0FYSV9EX0VYQ0VQVElPTiA6DQorCQkJCXhSZWdpc3RlckR1bXAucGNFeGNlcHRpb25DYXVzZSA9ICggaW50OF90ICogY29uc3QgKSAiWEVYQ19JRF9NX0FYSV9EX0VYQ0VQVElPTiBvciBYRVhDX0lEX0RQTEJfRVhDRVBUSU9OIjsNCisJCQkJYnJlYWs7DQogDQotICAgICAgICAgICAgY2FzZSBYRVhDX0lEX0RJVl9CWV9aRVJPOg0KLSAgICAgICAgICAgICAgICB4UmVnaXN0ZXJEdW1wLnBjRXhjZXB0aW9uQ2F1c2UgPSAoIGludDhfdCAqIGNvbnN0ICkgIlhFWENfSURfRElWX0JZX1pFUk8iOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCisJCWNhc2UgWEVYQ19JRF9ESVZfQllfWkVSTyA6DQorCQkJCXhSZWdpc3RlckR1bXAucGNFeGNlcHRpb25DYXVzZSA9ICggaW50OF90ICogY29uc3QgKSAiWEVYQ19JRF9ESVZfQllfWkVSTyI7DQorCQkJCWJyZWFrOw0KIA0KLSAgICAgICAgICAgIGNhc2UgWEVYQ19JRF9TVEFDS19WSU9MQVRJT046DQotICAgICAgICAgICAgICAgIHhSZWdpc3RlckR1bXAucGNFeGNlcHRpb25DYXVzZSA9ICggaW50OF90ICogY29uc3QgKSAiWEVYQ19JRF9TVEFDS19WSU9MQVRJT04gb3IgWEVYQ19JRF9NTVUiOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCisJCWNhc2UgWEVYQ19JRF9TVEFDS19WSU9MQVRJT04gOg0KKwkJCQl4UmVnaXN0ZXJEdW1wLnBjRXhjZXB0aW9uQ2F1c2UgPSAoIGludDhfdCAqIGNvbnN0ICkgIlhFWENfSURfU1RBQ0tfVklPTEFUSU9OIG9yIFhFWENfSURfTU1VIjsNCisJCQkJYnJlYWs7DQogDQotICAgICAgICAgICAgICAgICNpZiAoIFhQQVJfTUlDUk9CTEFaRV9VU0VfRlBVICE9IDAgKQ0KLSAgICAgICAgICAgICAgICAgICAgY2FzZSBYRVhDX0lEX0ZQVToNCi0gICAgICAgICAgICAgICAgICAgICAgICB4UmVnaXN0ZXJEdW1wLnBjRXhjZXB0aW9uQ2F1c2UgPSAoIGludDhfdCAqIGNvbnN0ICkgIlhFWENfSURfRlBVIHNlZSB1bEZTUiB2YWx1ZSI7DQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICNlbmRpZiAvKiBYUEFSX01JQ1JPQkxBWkVfVVNFX0ZQVSAqLw0KLSAgICAgICAgfQ0KKwkJI2lmKCBYUEFSX01JQ1JPQkxBWkVfVVNFX0ZQVSAhPSAwICkNCiANCi0gICAgICAgIC8qIHZBcHBsaWNhdGlvbkV4Y2VwdGlvblJlZ2lzdGVyRHVtcCgpIGlzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCB0aGUNCi0gICAgICAgICAqIGFwcGxpY2F0aW9uIGNhbiBvcHRpb25hbGx5IGRlZmluZSB0byByZWNlaXZlIHRoZSBwb3B1bGF0ZWQgeFBvcnRSZWdpc3RlckR1bXANCi0gICAgICAgICAqIHN0cnVjdHVyZS4gIElmIHRoZSBhcHBsaWNhdGlvbiBjaG9vc2VzIG5vdCB0byBkZWZpbmUgYSB2ZXJzaW9uIG9mDQotICAgICAgICAgKiB2QXBwbGljYXRpb25FeGNlcHRpb25SZWdpc3RlckR1bXAoKSB0aGVuIHRoZSB3ZWVrbHkgZGVmaW5lZCBkZWZhdWx0DQotICAgICAgICAgKiBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhpcyBmaWxlIHdpbGwgYmUgY2FsbGVkIGluc3RlYWQuICovDQotICAgICAgICB2QXBwbGljYXRpb25FeGNlcHRpb25SZWdpc3RlckR1bXAoICZ4UmVnaXN0ZXJEdW1wICk7DQorCQkJY2FzZSBYRVhDX0lEX0ZQVSA6DQorCQkJCQkJeFJlZ2lzdGVyRHVtcC5wY0V4Y2VwdGlvbkNhdXNlID0gKCBpbnQ4X3QgKiBjb25zdCApICJYRVhDX0lEX0ZQVSBzZWUgdWxGU1IgdmFsdWUiOw0KKwkJCQkJCWJyZWFrOw0KIA0KLSAgICAgICAgLyogTXVzdCBub3QgYXR0ZW1wdCB0byBsZWF2ZSB0aGlzIGZ1bmN0aW9uISAqLw0KLSAgICAgICAgZm9yKCA7IDsgKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHBvcnROT1AoKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KKwkJI2VuZGlmIC8qIFhQQVJfTUlDUk9CTEFaRV9VU0VfRlBVICovDQorCX0NCisNCisJLyogdkFwcGxpY2F0aW9uRXhjZXB0aW9uUmVnaXN0ZXJEdW1wKCkgaXMgYSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHRoZQ0KKwlhcHBsaWNhdGlvbiBjYW4gb3B0aW9uYWxseSBkZWZpbmUgdG8gcmVjZWl2ZSB0aGUgcG9wdWxhdGVkIHhQb3J0UmVnaXN0ZXJEdW1wDQorCXN0cnVjdHVyZS4gIElmIHRoZSBhcHBsaWNhdGlvbiBjaG9vc2VzIG5vdCB0byBkZWZpbmUgYSB2ZXJzaW9uIG9mDQorCXZBcHBsaWNhdGlvbkV4Y2VwdGlvblJlZ2lzdGVyRHVtcCgpIHRoZW4gdGhlIHdlZWtseSBkZWZpbmVkIGRlZmF1bHQNCisJaW1wbGVtZW50YXRpb24gd2l0aGluIHRoaXMgZmlsZSB3aWxsIGJlIGNhbGxlZCBpbnN0ZWFkLiAqLw0KKwl2QXBwbGljYXRpb25FeGNlcHRpb25SZWdpc3RlckR1bXAoICZ4UmVnaXN0ZXJEdW1wICk7DQorDQorCS8qIE11c3Qgbm90IGF0dGVtcHQgdG8gbGVhdmUgdGhpcyBmdW5jdGlvbiEgKi8NCisJZm9yKCA7OyApDQorCXsNCisJCXBvcnROT1AoKTsNCisJfQ0KK30NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0gICAgdm9pZCB2UG9ydEV4Y2VwdGlvbnNJbnN0YWxsSGFuZGxlcnMoIHZvaWQgKQ0KLSAgICB7DQotICAgICAgICBzdGF0aWMgdWludDMyX3QgdWxIYW5kbGVyc0FscmVhZHlJbnN0YWxsZWQgPSBwZEZBTFNFOw0KK3ZvaWQgdlBvcnRFeGNlcHRpb25zSW5zdGFsbEhhbmRsZXJzKCB2b2lkICkNCit7DQorc3RhdGljIHVpbnQzMl90IHVsSGFuZGxlcnNBbHJlYWR5SW5zdGFsbGVkID0gcGRGQUxTRTsNCiANCi0gICAgICAgIGlmKCB1bEhhbmRsZXJzQWxyZWFkeUluc3RhbGxlZCA9PSBwZEZBTFNFICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICB1bEhhbmRsZXJzQWxyZWFkeUluc3RhbGxlZCA9IHBkVFJVRTsNCisJaWYoIHVsSGFuZGxlcnNBbHJlYWR5SW5zdGFsbGVkID09IHBkRkFMU0UgKQ0KKwl7DQorCQl1bEhhbmRsZXJzQWxyZWFkeUluc3RhbGxlZCA9IHBkVFJVRTsNCiANCi0gICAgICAgICAgICAjaWYgWFBBUl9NSUNST0JMQVpFX1VOQUxJR05FRF9FWENFUFRJT05TID09IDENCi0gICAgICAgICAgICAgICAgbWljcm9ibGF6ZV9yZWdpc3Rlcl9leGNlcHRpb25faGFuZGxlciggWEVYQ19JRF9VTkFMSUdORURfQUNDRVNTLCB2UG9ydEV4Y2VwdGlvbkhhbmRsZXJFbnRyeSwgKCB2b2lkICogKSBYRVhDX0lEX1VOQUxJR05FRF9BQ0NFU1MgKTsNCi0gICAgICAgICAgICAjZW5kaWYgLyogWFBBUl9NSUNST0JMQVpFX1VOQUxJR05FRF9FWENFUFRJT05TKi8NCisJCSNpZiBYUEFSX01JQ1JPQkxBWkVfVU5BTElHTkVEX0VYQ0VQVElPTlMgPT0gMQ0KKwkJCW1pY3JvYmxhemVfcmVnaXN0ZXJfZXhjZXB0aW9uX2hhbmRsZXIoIFhFWENfSURfVU5BTElHTkVEX0FDQ0VTUywgdlBvcnRFeGNlcHRpb25IYW5kbGVyRW50cnksICggdm9pZCAqICkgWEVYQ19JRF9VTkFMSUdORURfQUNDRVNTICk7DQorCQkjZW5kaWYgLyogWFBBUl9NSUNST0JMQVpFX1VOQUxJR05FRF9FWENFUFRJT05TKi8NCiANCi0gICAgICAgICAgICAjaWYgWFBBUl9NSUNST0JMQVpFX0lMTF9PUENPREVfRVhDRVBUSU9OID09IDENCi0gICAgICAgICAgICAgICAgbWljcm9ibGF6ZV9yZWdpc3Rlcl9leGNlcHRpb25faGFuZGxlciggWEVYQ19JRF9JTExFR0FMX09QQ09ERSwgdlBvcnRFeGNlcHRpb25IYW5kbGVyRW50cnksICggdm9pZCAqICkgWEVYQ19JRF9JTExFR0FMX09QQ09ERSApOw0KLSAgICAgICAgICAgICNlbmRpZiAvKiBYUEFSX01JQ1JPQkxBWkVfSUxMX09QQ09ERV9FWENFUFRJT04gKi8NCisJCSNpZiBYUEFSX01JQ1JPQkxBWkVfSUxMX09QQ09ERV9FWENFUFRJT04gPT0gMQ0KKwkJCW1pY3JvYmxhemVfcmVnaXN0ZXJfZXhjZXB0aW9uX2hhbmRsZXIoIFhFWENfSURfSUxMRUdBTF9PUENPREUsIHZQb3J0RXhjZXB0aW9uSGFuZGxlckVudHJ5LCAoIHZvaWQgKiApIFhFWENfSURfSUxMRUdBTF9PUENPREUgKTsNCisJCSNlbmRpZiAvKiBYUEFSX01JQ1JPQkxBWkVfSUxMX09QQ09ERV9FWENFUFRJT04gKi8NCiANCi0gICAgICAgICAgICAjaWYgWFBBUl9NSUNST0JMQVpFX01fQVhJX0lfQlVTX0VYQ0VQVElPTiA9PSAxDQotICAgICAgICAgICAgICAgIG1pY3JvYmxhemVfcmVnaXN0ZXJfZXhjZXB0aW9uX2hhbmRsZXIoIFhFWENfSURfTV9BWElfSV9FWENFUFRJT04sIHZQb3J0RXhjZXB0aW9uSGFuZGxlckVudHJ5LCAoIHZvaWQgKiApIFhFWENfSURfTV9BWElfSV9FWENFUFRJT04gKTsNCi0gICAgICAgICAgICAjZW5kaWYgLyogWFBBUl9NSUNST0JMQVpFX01fQVhJX0lfQlVTX0VYQ0VQVElPTiAqLw0KKwkJI2lmIFhQQVJfTUlDUk9CTEFaRV9NX0FYSV9JX0JVU19FWENFUFRJT04gPT0gMQ0KKwkJCW1pY3JvYmxhemVfcmVnaXN0ZXJfZXhjZXB0aW9uX2hhbmRsZXIoIFhFWENfSURfTV9BWElfSV9FWENFUFRJT04sIHZQb3J0RXhjZXB0aW9uSGFuZGxlckVudHJ5LCAoIHZvaWQgKiApIFhFWENfSURfTV9BWElfSV9FWENFUFRJT04gKTsNCisJCSNlbmRpZiAvKiBYUEFSX01JQ1JPQkxBWkVfTV9BWElfSV9CVVNfRVhDRVBUSU9OICovDQogDQotICAgICAgICAgICAgI2lmIFhQQVJfTUlDUk9CTEFaRV9NX0FYSV9EX0JVU19FWENFUFRJT04gPT0gMQ0KLSAgICAgICAgICAgICAgICBtaWNyb2JsYXplX3JlZ2lzdGVyX2V4Y2VwdGlvbl9oYW5kbGVyKCBYRVhDX0lEX01fQVhJX0RfRVhDRVBUSU9OLCB2UG9ydEV4Y2VwdGlvbkhhbmRsZXJFbnRyeSwgKCB2b2lkICogKSBYRVhDX0lEX01fQVhJX0RfRVhDRVBUSU9OICk7DQotICAgICAgICAgICAgI2VuZGlmIC8qIFhQQVJfTUlDUk9CTEFaRV9NX0FYSV9EX0JVU19FWENFUFRJT04gKi8NCisJCSNpZiBYUEFSX01JQ1JPQkxBWkVfTV9BWElfRF9CVVNfRVhDRVBUSU9OID09IDENCisJCQltaWNyb2JsYXplX3JlZ2lzdGVyX2V4Y2VwdGlvbl9oYW5kbGVyKCBYRVhDX0lEX01fQVhJX0RfRVhDRVBUSU9OLCB2UG9ydEV4Y2VwdGlvbkhhbmRsZXJFbnRyeSwgKCB2b2lkICogKSBYRVhDX0lEX01fQVhJX0RfRVhDRVBUSU9OICk7DQorCQkjZW5kaWYgLyogWFBBUl9NSUNST0JMQVpFX01fQVhJX0RfQlVTX0VYQ0VQVElPTiAqLw0KIA0KLSAgICAgICAgICAgICNpZiBYUEFSX01JQ1JPQkxBWkVfSVBMQl9CVVNfRVhDRVBUSU9OID09IDENCi0gICAgICAgICAgICAgICAgbWljcm9ibGF6ZV9yZWdpc3Rlcl9leGNlcHRpb25faGFuZGxlciggWEVYQ19JRF9JUExCX0VYQ0VQVElPTiwgdlBvcnRFeGNlcHRpb25IYW5kbGVyRW50cnksICggdm9pZCAqICkgWEVYQ19JRF9JUExCX0VYQ0VQVElPTiApOw0KLSAgICAgICAgICAgICNlbmRpZiAvKiBYUEFSX01JQ1JPQkxBWkVfSVBMQl9CVVNfRVhDRVBUSU9OICovDQorCQkjaWYgWFBBUl9NSUNST0JMQVpFX0lQTEJfQlVTX0VYQ0VQVElPTiA9PSAxDQorCQkJbWljcm9ibGF6ZV9yZWdpc3Rlcl9leGNlcHRpb25faGFuZGxlciggWEVYQ19JRF9JUExCX0VYQ0VQVElPTiwgdlBvcnRFeGNlcHRpb25IYW5kbGVyRW50cnksICggdm9pZCAqICkgWEVYQ19JRF9JUExCX0VYQ0VQVElPTiApOw0KKwkJI2VuZGlmIC8qIFhQQVJfTUlDUk9CTEFaRV9JUExCX0JVU19FWENFUFRJT04gKi8NCiANCi0gICAgICAgICAgICAjaWYgWFBBUl9NSUNST0JMQVpFX0RQTEJfQlVTX0VYQ0VQVElPTiA9PSAxDQotICAgICAgICAgICAgICAgIG1pY3JvYmxhemVfcmVnaXN0ZXJfZXhjZXB0aW9uX2hhbmRsZXIoIFhFWENfSURfRFBMQl9FWENFUFRJT04sIHZQb3J0RXhjZXB0aW9uSGFuZGxlckVudHJ5LCAoIHZvaWQgKiApIFhFWENfSURfRFBMQl9FWENFUFRJT04gKTsNCi0gICAgICAgICAgICAjZW5kaWYgLyogWFBBUl9NSUNST0JMQVpFX0RQTEJfQlVTX0VYQ0VQVElPTiAqLw0KKwkJI2lmIFhQQVJfTUlDUk9CTEFaRV9EUExCX0JVU19FWENFUFRJT04gPT0gMQ0KKwkJCW1pY3JvYmxhemVfcmVnaXN0ZXJfZXhjZXB0aW9uX2hhbmRsZXIoIFhFWENfSURfRFBMQl9FWENFUFRJT04sIHZQb3J0RXhjZXB0aW9uSGFuZGxlckVudHJ5LCAoIHZvaWQgKiApIFhFWENfSURfRFBMQl9FWENFUFRJT04gKTsNCisJCSNlbmRpZiAvKiBYUEFSX01JQ1JPQkxBWkVfRFBMQl9CVVNfRVhDRVBUSU9OICovDQogDQotICAgICAgICAgICAgI2lmIFhQQVJfTUlDUk9CTEFaRV9ESVZfWkVST19FWENFUFRJT04gPT0gMQ0KLSAgICAgICAgICAgICAgICBtaWNyb2JsYXplX3JlZ2lzdGVyX2V4Y2VwdGlvbl9oYW5kbGVyKCBYRVhDX0lEX0RJVl9CWV9aRVJPLCB2UG9ydEV4Y2VwdGlvbkhhbmRsZXJFbnRyeSwgKCB2b2lkICogKSBYRVhDX0lEX0RJVl9CWV9aRVJPICk7DQotICAgICAgICAgICAgI2VuZGlmIC8qIFhQQVJfTUlDUk9CTEFaRV9ESVZfWkVST19FWENFUFRJT04gKi8NCisJCSNpZiBYUEFSX01JQ1JPQkxBWkVfRElWX1pFUk9fRVhDRVBUSU9OID09IDENCisJCQltaWNyb2JsYXplX3JlZ2lzdGVyX2V4Y2VwdGlvbl9oYW5kbGVyKCBYRVhDX0lEX0RJVl9CWV9aRVJPLCB2UG9ydEV4Y2VwdGlvbkhhbmRsZXJFbnRyeSwgKCB2b2lkICogKSBYRVhDX0lEX0RJVl9CWV9aRVJPICk7DQorCQkjZW5kaWYgLyogWFBBUl9NSUNST0JMQVpFX0RJVl9aRVJPX0VYQ0VQVElPTiAqLw0KIA0KLSAgICAgICAgICAgICNpZiBYUEFSX01JQ1JPQkxBWkVfRlBVX0VYQ0VQVElPTiA9PSAxDQotICAgICAgICAgICAgICAgIG1pY3JvYmxhemVfcmVnaXN0ZXJfZXhjZXB0aW9uX2hhbmRsZXIoIFhFWENfSURfRlBVLCB2UG9ydEV4Y2VwdGlvbkhhbmRsZXJFbnRyeSwgKCB2b2lkICogKSBYRVhDX0lEX0ZQVSApOw0KLSAgICAgICAgICAgICNlbmRpZiAvKiBYUEFSX01JQ1JPQkxBWkVfRlBVX0VYQ0VQVElPTiAqLw0KKwkJI2lmIFhQQVJfTUlDUk9CTEFaRV9GUFVfRVhDRVBUSU9OID09IDENCisJCQltaWNyb2JsYXplX3JlZ2lzdGVyX2V4Y2VwdGlvbl9oYW5kbGVyKCBYRVhDX0lEX0ZQVSwgdlBvcnRFeGNlcHRpb25IYW5kbGVyRW50cnksICggdm9pZCAqICkgWEVYQ19JRF9GUFUgKTsNCisJCSNlbmRpZiAvKiBYUEFSX01JQ1JPQkxBWkVfRlBVX0VYQ0VQVElPTiAqLw0KIA0KLSAgICAgICAgICAgICNpZiBYUEFSX01JQ1JPQkxBWkVfRlNMX0VYQ0VQVElPTiA9PSAxDQotICAgICAgICAgICAgICAgIG1pY3JvYmxhemVfcmVnaXN0ZXJfZXhjZXB0aW9uX2hhbmRsZXIoIFhFWENfSURfRlNMLCB2UG9ydEV4Y2VwdGlvbkhhbmRsZXJFbnRyeSwgKCB2b2lkICogKSBYRVhDX0lEX0ZTTCApOw0KLSAgICAgICAgICAgICNlbmRpZiAvKiBYUEFSX01JQ1JPQkxBWkVfRlNMX0VYQ0VQVElPTiAqLw0KKwkJI2lmIFhQQVJfTUlDUk9CTEFaRV9GU0xfRVhDRVBUSU9OID09IDENCisJCQltaWNyb2JsYXplX3JlZ2lzdGVyX2V4Y2VwdGlvbl9oYW5kbGVyKCBYRVhDX0lEX0ZTTCwgdlBvcnRFeGNlcHRpb25IYW5kbGVyRW50cnksICggdm9pZCAqICkgWEVYQ19JRF9GU0wgKTsNCisJCSNlbmRpZiAvKiBYUEFSX01JQ1JPQkxBWkVfRlNMX0VYQ0VQVElPTiAqLw0KIA0KLSAgICAgICAgICAgIG1pY3JvYmxhemVfZW5hYmxlX2V4Y2VwdGlvbnMoKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KKwkJbWljcm9ibGF6ZV9lbmFibGVfZXhjZXB0aW9ucygpOw0KKwl9DQorfQ0KIA0KIC8qIEV4Y2x1ZGUgdGhlIGVudGlyZSBmaWxlIGlmIHRoZSBNaWNyb0JsYXplIGlzIG5vdCBjb25maWd1cmVkIHRvIGhhbmRsZQ0KLSAqIGV4Y2VwdGlvbnMsIG9yIHRoZSBhcHBsaWNhdGlvbiBkZWZpbmVkIGNvbmZpZ3VyYXRpb24gaXRlbQ0KLSAqIGNvbmZpZ0lOU1RBTExfRVhDRVBUSU9OX0hBTkRMRVJTIGlzIG5vdCBzZXQgdG8gMS4gKi8NCitleGNlcHRpb25zLCBvciB0aGUgYXBwbGljYXRpb24gZGVmaW5lZCBjb25maWd1cmF0aW9uIGl0ZW0NCitjb25maWdJTlNUQUxMX0VYQ0VQVElPTl9IQU5ETEVSUyBpcyBub3Qgc2V0IHRvIDEuICovDQogI2VuZGlmIC8qICggTUlDUk9CTEFaRV9FWENFUFRJT05TX0VOQUJMRUQgPT0gMSApICYmICggY29uZmlnSU5TVEFMTF9FWENFUFRJT05fSEFORExFUlMgPT0gMSApICovDQorDQorDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvR0NDL01pY3JvQmxhemVWOC9wb3J0bWFjcm8uaCBiL3BvcnRhYmxlL0dDQy9NaWNyb0JsYXplVjgvcG9ydG1hY3JvLmgKaW5kZXggNWI1ODQwZS4uMTliNTI4OCAxMDA2NDQKLS0tIGEvcG9ydGFibGUvR0NDL01pY3JvQmxhemVWOC9wb3J0bWFjcm8uaAorKysgYi9wb3J0YWJsZS9HQ0MvTWljcm9CbGF6ZVY4L3BvcnRtYWNyby5oCkBAIC0yNiwxNSArMjYsMTUgQEAKICAqLw0KIA0KICNpZm5kZWYgUE9SVE1BQ1JPX0gNCi0gICAgI2RlZmluZSBQT1JUTUFDUk9fSA0KKyNkZWZpbmUgUE9SVE1BQ1JPX0gNCiANCi0gICAgI2lmZGVmIF9fY3BsdXNwbHVzDQotICAgICAgICBleHRlcm4gIkMiIHsNCi0gICAgI2VuZGlmDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQogDQogLyogQlNQIGluY2x1ZGVzLiAqLw0KLSAgICAjaW5jbHVkZSA8bWJfaW50ZXJmYWNlLmg+DQotICAgICNpbmNsdWRlIDx4cGFyYW1ldGVycy5oPg0KKyNpbmNsdWRlIDxtYl9pbnRlcmZhY2UuaD4NCisjaW5jbHVkZSA8eHBhcmFtZXRlcnMuaD4NCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICogUG9ydCBzcGVjaWZpYyBkZWZpbml0aW9ucy4NCkBAIC00NywxNzcgKzQ3LDE3NSBAQAogICovDQogDQogLyogVHlwZSBkZWZpbml0aW9ucy4gKi8NCi0gICAgI2RlZmluZSBwb3J0Q0hBUiAgICAgICAgICBjaGFyDQotICAgICNkZWZpbmUgcG9ydEZMT0FUICAgICAgICAgZmxvYXQNCi0gICAgI2RlZmluZSBwb3J0RE9VQkxFICAgICAgICBkb3VibGUNCi0gICAgI2RlZmluZSBwb3J0TE9ORyAgICAgICAgICBsb25nDQotICAgICNkZWZpbmUgcG9ydFNIT1JUICAgICAgICAgc2hvcnQNCi0gICAgI2RlZmluZSBwb3J0U1RBQ0tfVFlQRSAgICB1aW50MzJfdA0KLSAgICAjZGVmaW5lIHBvcnRCQVNFX1RZUEUgICAgIGxvbmcNCisjZGVmaW5lIHBvcnRDSEFSCQljaGFyDQorI2RlZmluZSBwb3J0RkxPQVQJCWZsb2F0DQorI2RlZmluZSBwb3J0RE9VQkxFCQlkb3VibGUNCisjZGVmaW5lIHBvcnRMT05HCQlsb25nDQorI2RlZmluZSBwb3J0U0hPUlQJCXNob3J0DQorI2RlZmluZSBwb3J0U1RBQ0tfVFlQRQl1aW50MzJfdA0KKyNkZWZpbmUgcG9ydEJBU0VfVFlQRQlsb25nDQogDQotICAgIHR5cGVkZWYgcG9ydFNUQUNLX1RZUEUgICBTdGFja1R5cGVfdDsNCi0gICAgdHlwZWRlZiBsb25nICAgICAgICAgICAgIEJhc2VUeXBlX3Q7DQotICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyAgICBVQmFzZVR5cGVfdDsNCit0eXBlZGVmIHBvcnRTVEFDS19UWVBFIFN0YWNrVHlwZV90Ow0KK3R5cGVkZWYgbG9uZyBCYXNlVHlwZV90Ow0KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBVQmFzZVR5cGVfdDsNCiANCi0gICAgI2lmICggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCi0gICAgICAgIHR5cGVkZWYgdWludDE2X3QgICAgIFRpY2tUeXBlX3Q7DQotICAgICAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgICAgICAgICAgICggVGlja1R5cGVfdCApIDB4ZmZmZg0KLSAgICAjZWxzZQ0KLSAgICAgICAgdHlwZWRlZiB1aW50MzJfdCAgICAgVGlja1R5cGVfdDsNCi0gICAgICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAgICAgICAgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQorI2lmKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KKwl0eXBlZGVmIHVpbnQxNl90IFRpY2tUeXBlX3Q7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIFRpY2tUeXBlX3QgKSAweGZmZmYNCisjZWxzZQ0KKwl0eXBlZGVmIHVpbnQzMl90IFRpY2tUeXBlX3Q7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwNCiANCi0vKiAzMi1iaXQgdGljayB0eXBlIG9uIGEgMzItYml0IGFyY2hpdGVjdHVyZSwgc28gcmVhZHMgb2YgdGhlIHRpY2sgY291bnQgZG8NCi0gKiBub3QgbmVlZCB0byBiZSBndWFyZGVkIHdpdGggYSBjcml0aWNhbCBzZWN0aW9uLiAqLw0KLSAgICAgICAgI2RlZmluZSBwb3J0VElDS19UWVBFX0lTX0FUT01JQyAgICAxDQotICAgICNlbmRpZg0KKwkvKiAzMi1iaXQgdGljayB0eXBlIG9uIGEgMzItYml0IGFyY2hpdGVjdHVyZSwgc28gcmVhZHMgb2YgdGhlIHRpY2sgY291bnQgZG8NCisJbm90IG5lZWQgdG8gYmUgZ3VhcmRlZCB3aXRoIGEgY3JpdGljYWwgc2VjdGlvbi4gKi8NCisJI2RlZmluZSBwb3J0VElDS19UWVBFX0lTX0FUT01JQyAxDQorI2VuZGlmDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogSW50ZXJydXB0IGNvbnRyb2wgbWFjcm9zIGFuZCBmdW5jdGlvbnMuICovDQotICAgIHZvaWQgbWljcm9ibGF6ZV9kaXNhYmxlX2ludGVycnVwdHMoIHZvaWQgKTsNCi0gICAgdm9pZCBtaWNyb2JsYXplX2VuYWJsZV9pbnRlcnJ1cHRzKCB2b2lkICk7DQotICAgICNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpICAgIG1pY3JvYmxhemVfZGlzYWJsZV9pbnRlcnJ1cHRzKCkNCi0gICAgI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKSAgICAgbWljcm9ibGF6ZV9lbmFibGVfaW50ZXJydXB0cygpDQordm9pZCBtaWNyb2JsYXplX2Rpc2FibGVfaW50ZXJydXB0cyggdm9pZCApOw0KK3ZvaWQgbWljcm9ibGF6ZV9lbmFibGVfaW50ZXJydXB0cyggdm9pZCApOw0KKyNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpCW1pY3JvYmxhemVfZGlzYWJsZV9pbnRlcnJ1cHRzKCkNCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpCQltaWNyb2JsYXplX2VuYWJsZV9pbnRlcnJ1cHRzKCkNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBDcml0aWNhbCBzZWN0aW9uIG1hY3Jvcy4gKi8NCi0gICAgdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKTsNCi0gICAgdm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApOw0KLSAgICAjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGV4dGVybiB2b2xhdGlsZSBVQmFzZVR5cGVfdCB1eENyaXRpY2FsTmVzdGluZzsgXA0KLSAgICAgICAgbWljcm9ibGF6ZV9kaXNhYmxlX2ludGVycnVwdHMoKTsgICAgICAgICAgICAgICBcDQotICAgICAgICB1eENyaXRpY2FsTmVzdGluZysrOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgfQ0KK3ZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICk7DQordm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApOw0KKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkJCXsJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQlleHRlcm4gdm9sYXRpbGUgVUJhc2VUeXBlX3QgdXhDcml0aWNhbE5lc3Rpbmc7CQkJCVwNCisJCQkJCQkJCQkJbWljcm9ibGF6ZV9kaXNhYmxlX2ludGVycnVwdHMoKTsJCQkJCQkJXA0KKwkJCQkJCQkJCQl1eENyaXRpY2FsTmVzdGluZysrOwkJCQkJCQkJCQlcDQorCQkJCQkJCQkJfQ0KIA0KLSAgICAjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGV4dGVybiB2b2xhdGlsZSBVQmFzZVR5cGVfdCB1eENyaXRpY2FsTmVzdGluZzsgXA0KLSAgICAgICAgLyogSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQsIHNvIHdlIGNhbiAqLyAgICAgICBcDQotICAgICAgICAvKiBhY2Nlc3MgdGhlIHZhcmlhYmxlIGRpcmVjdGx5LiAqLyAgICAgICAgICAgIFwNCi0gICAgICAgIHV4Q3JpdGljYWxOZXN0aW5nLS07ICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgaWYoIHV4Q3JpdGljYWxOZXN0aW5nID09IDAgKSAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBUaGUgbmVzdGluZyBoYXMgdW53b3VuZCBhbmQgd2UgXA0KLSAgICAgICAgICAgICAqIGNhbiBlbmFibGUgaW50ZXJydXB0cyBhZ2Fpbi4gKi8gXA0KLSAgICAgICAgICAgIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpOyAgICAgICAgICAgXA0KLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB9DQorI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpCQkJewkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCWV4dGVybiB2b2xhdGlsZSBVQmFzZVR5cGVfdCB1eENyaXRpY2FsTmVzdGluZzsJCQkJXA0KKwkJCQkJCQkJCQkvKiBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCwgc28gd2UgY2FuICovCQkJCQlcDQorCQkJCQkJCQkJCS8qIGFjY2VzcyB0aGUgdmFyaWFibGUgZGlyZWN0bHkuICovCQkJCQkJCVwNCisJCQkJCQkJCQkJdXhDcml0aWNhbE5lc3RpbmctLTsJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQlpZiggdXhDcml0aWNhbE5lc3RpbmcgPT0gMCApCQkJCQkJCQlcDQorCQkJCQkJCQkJCXsJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkvKiBUaGUgbmVzdGluZyBoYXMgdW53b3VuZCBhbmQgd2UgCQkJCQkJXA0KKwkJCQkJCQkJCQkJY2FuIGVuYWJsZSBpbnRlcnJ1cHRzIGFnYWluLiAqLwkJCQkJCQlcDQorCQkJCQkJCQkJCQlwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKTsJCQkJCQkJCVwNCisJCQkJCQkJCQkJfQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQl9DQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGhlIHlpZWxkIG1hY3JvIG1hcHMgZGlyZWN0bHkgdG8gdGhlIHZQb3J0WWllbGQoKSBmdW5jdGlvbi4gKi8NCi0gICAgdm9pZCB2UG9ydFlpZWxkKCB2b2lkICk7DQotICAgICNkZWZpbmUgcG9ydFlJRUxEKCkgICAgdlBvcnRZaWVsZCgpDQordm9pZCB2UG9ydFlpZWxkKCB2b2lkICk7DQorI2RlZmluZSBwb3J0WUlFTEQoKSB2UG9ydFlpZWxkKCkNCiANCiAvKiBwb3J0WUlFTERfRlJPTV9JU1IoKSBkb2VzIG5vdCBkaXJlY3RseSBjYWxsIHZUYXNrU3dpdGNoQ29udGV4dCgpLCBidXQgaW5zdGVhZA0KLSAqIHNldHMgYSBmbGFnIHRvIHNheSB0aGF0IGEgeWllbGQgaGFzIGJlZW4gcmVxdWVzdGVkLiAgVGhlIGludGVycnVwdCBleGl0IGNvZGUNCi0gKiB0aGVuIGNoZWNrcyB0aGlzIGZsYWcsIGFuZCBjYWxscyB2VGFza1N3aXRjaENvbnRleHQoKSBiZWZvcmUgcmVzdG9yaW5nIGEgdGFzaw0KLSAqIGNvbnRleHQsIGlmIHRoZSBmbGFnIGlzIG5vdCBmYWxzZS4gIFRoaXMgaXMgZG9uZSB0byBwcmV2ZW50IG11bHRpcGxlIGNhbGxzIHRvDQotICogdlRhc2tTd2l0Y2hDb250ZXh0KCkgYmVpbmcgbWFkZSBmcm9tIGEgc2luZ2xlIGludGVycnVwdCwgYXMgYSBzaW5nbGUgaW50ZXJydXB0DQotICogY2FuIHJlc3VsdCBpbiBtdWx0aXBsZSBwZXJpcGhlcmFscyBiZWluZyBzZXJ2aWNlZC4gKi8NCi0gICAgZXh0ZXJuIHZvbGF0aWxlIHVpbnQzMl90IHVsVGFza1N3aXRjaFJlcXVlc3RlZDsNCi0gICAgI2RlZmluZSBwb3J0WUlFTERfRlJPTV9JU1IoIHggKSAgICBpZiggKCB4ICkgIT0gcGRGQUxTRSApIHVsVGFza1N3aXRjaFJlcXVlc3RlZCA9IDENCitzZXRzIGEgZmxhZyB0byBzYXkgdGhhdCBhIHlpZWxkIGhhcyBiZWVuIHJlcXVlc3RlZC4gIFRoZSBpbnRlcnJ1cHQgZXhpdCBjb2RlDQordGhlbiBjaGVja3MgdGhpcyBmbGFnLCBhbmQgY2FsbHMgdlRhc2tTd2l0Y2hDb250ZXh0KCkgYmVmb3JlIHJlc3RvcmluZyBhIHRhc2sNCitjb250ZXh0LCBpZiB0aGUgZmxhZyBpcyBub3QgZmFsc2UuICBUaGlzIGlzIGRvbmUgdG8gcHJldmVudCBtdWx0aXBsZSBjYWxscyB0bw0KK3ZUYXNrU3dpdGNoQ29udGV4dCgpIGJlaW5nIG1hZGUgZnJvbSBhIHNpbmdsZSBpbnRlcnJ1cHQsIGFzIGEgc2luZ2xlIGludGVycnVwdA0KK2NhbiByZXN1bHQgaW4gbXVsdGlwbGUgcGVyaXBoZXJhbHMgYmVpbmcgc2VydmljZWQuICovDQorZXh0ZXJuIHZvbGF0aWxlIHVpbnQzMl90IHVsVGFza1N3aXRjaFJlcXVlc3RlZDsNCisjZGVmaW5lIHBvcnRZSUVMRF9GUk9NX0lTUiggeCApIGlmKCAoIHggKSAhPSBwZEZBTFNFICkgdWxUYXNrU3dpdGNoUmVxdWVzdGVkID0gMQ0KIA0KLSAgICAjaWYgKCBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gPT0gMSApDQorI2lmKCBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gPT0gMSApDQogDQotLyogR2VuZXJpYyBoZWxwZXIgZnVuY3Rpb24uICovDQotICAgICAgICBfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIHN0YXRpYyBpbmxpbmUgdWludDhfdCB1Y1BvcnRDb3VudExlYWRpbmdaZXJvcyggdWludDMyX3QgdWxCaXRtYXAgKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHVpbnQ4X3QgdWNSZXR1cm47DQorCS8qIEdlbmVyaWMgaGVscGVyIGZ1bmN0aW9uLiAqLw0KKwlfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIHN0YXRpYyBpbmxpbmUgdWludDhfdCB1Y1BvcnRDb3VudExlYWRpbmdaZXJvcyggdWludDMyX3QgdWxCaXRtYXAgKQ0KKwl7DQorCXVpbnQ4X3QgdWNSZXR1cm47DQogDQotICAgICAgICAgICAgX19hc20gdm9sYXRpbGUgKCAiY2x6ICUwLCAlMSIgOiAiPXIiICggdWNSZXR1cm4gKSA6ICJyIiAoIHVsQml0bWFwICkgKTsNCisJCV9fYXNtIHZvbGF0aWxlICggImNseiAlMCwgJTEiIDogIj1yIiAoIHVjUmV0dXJuICkgOiAiciIgKCB1bEJpdG1hcCApICk7DQorCQlyZXR1cm4gdWNSZXR1cm47DQorCX0NCiANCi0gICAgICAgICAgICByZXR1cm4gdWNSZXR1cm47DQotICAgICAgICB9DQorCS8qIENoZWNrIHRoZSBjb25maWd1cmF0aW9uLiAqLw0KKwkjaWYoIGNvbmZpZ01BWF9QUklPUklUSUVTID4gMzIgKQ0KKwkJI2Vycm9yIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiBjYW4gb25seSBiZSBzZXQgdG8gMSB3aGVuIGNvbmZpZ01BWF9QUklPUklUSUVTIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAzMi4gIEl0IGlzIHZlcnkgcmFyZSB0aGF0IGEgc3lzdGVtIHJlcXVpcmVzIG1vcmUgdGhhbiAxMCB0byAxNSBkaWZmZXJlbmNlIHByaW9yaXRpZXMgYXMgdGFza3MgdGhhdCBzaGFyZSBhIHByaW9yaXR5IHdpbGwgdGltZSBzbGljZS4NCisJI2VuZGlmDQogDQotLyogQ2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24uICovDQotICAgICAgICAjaWYgKCBjb25maWdNQVhfUFJJT1JJVElFUyA+IDMyICkNCi0gICAgICAgICAgICAjZXJyb3IgY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OIGNhbiBvbmx5IGJlIHNldCB0byAxIHdoZW4gY29uZmlnTUFYX1BSSU9SSVRJRVMgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDMyLiAgSXQgaXMgdmVyeSByYXJlIHRoYXQgYSBzeXN0ZW0gcmVxdWlyZXMgbW9yZSB0aGFuIDEwIHRvIDE1IGRpZmZlcmVuY2UgcHJpb3JpdGllcyBhcyB0YXNrcyB0aGF0IHNoYXJlIGEgcHJpb3JpdHkgd2lsbCB0aW1lIHNsaWNlLg0KLSAgICAgICAgI2VuZGlmDQorCS8qIFN0b3JlL2NsZWFyIHRoZSByZWFkeSBwcmlvcml0aWVzIGluIGEgYml0IG1hcC4gKi8NCisJI2RlZmluZSBwb3J0UkVDT1JEX1JFQURZX1BSSU9SSVRZKCB1eFByaW9yaXR5LCB1eFJlYWR5UHJpb3JpdGllcyApICggdXhSZWFkeVByaW9yaXRpZXMgKSB8PSAoIDFVTCA8PCAoIHV4UHJpb3JpdHkgKSApDQorCSNkZWZpbmUgcG9ydFJFU0VUX1JFQURZX1BSSU9SSVRZKCB1eFByaW9yaXR5LCB1eFJlYWR5UHJpb3JpdGllcyApICggdXhSZWFkeVByaW9yaXRpZXMgKSAmPSB+KCAxVUwgPDwgKCB1eFByaW9yaXR5ICkgKQ0KIA0KLS8qIFN0b3JlL2NsZWFyIHRoZSByZWFkeSBwcmlvcml0aWVzIGluIGEgYml0IG1hcC4gKi8NCi0gICAgICAgICNkZWZpbmUgcG9ydFJFQ09SRF9SRUFEWV9QUklPUklUWSggdXhQcmlvcml0eSwgdXhSZWFkeVByaW9yaXRpZXMgKSAgICAoIHV4UmVhZHlQcmlvcml0aWVzICkgfD0gKCAxVUwgPDwgKCB1eFByaW9yaXR5ICkgKQ0KLSAgICAgICAgI2RlZmluZSBwb3J0UkVTRVRfUkVBRFlfUFJJT1JJVFkoIHV4UHJpb3JpdHksIHV4UmVhZHlQcmlvcml0aWVzICkgICAgICggdXhSZWFkeVByaW9yaXRpZXMgKSAmPSB+KCAxVUwgPDwgKCB1eFByaW9yaXR5ICkgKQ0KKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisJI2RlZmluZSBwb3J0R0VUX0hJR0hFU1RfUFJJT1JJVFkoIHV4VG9wUHJpb3JpdHksIHV4UmVhZHlQcmlvcml0aWVzICkgdXhUb3BQcmlvcml0eSA9ICggMzFVTCAtICggdWludDMyX3QgKSB1Y1BvcnRDb3VudExlYWRpbmdaZXJvcyggKCB1eFJlYWR5UHJpb3JpdGllcyApICkgKQ0KIA0KLSAgICAgICAgI2RlZmluZSBwb3J0R0VUX0hJR0hFU1RfUFJJT1JJVFkoIHV4VG9wUHJpb3JpdHksIHV4UmVhZHlQcmlvcml0aWVzICkgICAgdXhUb3BQcmlvcml0eSA9ICggMzFVTCAtICggdWludDMyX3QgKSB1Y1BvcnRDb3VudExlYWRpbmdaZXJvcyggKCB1eFJlYWR5UHJpb3JpdGllcyApICkgKQ0KLQ0KLSAgICAjZW5kaWYgLyogY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OICovDQorI2VuZGlmIC8qIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiAqLw0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIEhhcmR3YXJlIHNwZWNpZmljcy4gKi8NCi0gICAgI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQgICAgNA0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEggICAgICAoIC0xICkNCi0gICAgI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMgICAgKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCi0gICAgI2RlZmluZSBwb3J0Tk9QKCkgICAgYXNtIHZvbGF0aWxlICggIk5PUCIgKQ0KKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UCQkJNA0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJCSggLTEgKQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TCQkJKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCisjZGVmaW5lIHBvcnROT1AoKQkJCQkJYXNtIHZvbGF0aWxlICggIk5PUCIgKQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCi0gICAgI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICAgICAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIGlzIHVzZWQgYnkgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbiBoYW5kbGVyLiAgSXQgaXMNCi0gKiBmaWxsZWQgd2l0aCB0aGUgTWljcm9CbGF6ZSBjb250ZXh0IGFzIGl0IHdhcyBhdCB0aGUgdGltZSB0aGUgZXhjZXB0aW9uIG9jY3VycmVkLg0KLSAqIFRoaXMgaXMgZG9uZSBhcyBhbiBhaWQgdG8gZGVidWdnaW5nIGV4Y2VwdGlvbiBvY2N1cnJlbmNlcy4gKi8NCi0gICAgdHlwZWRlZiBzdHJ1Y3QgUE9SVF9SRUdJU1RFUl9EVU1QDQotICAgIHsNCi0gICAgICAgIC8qIFRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIG1lbWJlcnMgaG9sZCB0aGUgdmFsdWVzIG9mIHRoZSBNaWNyb0JsYXplDQotICAgICAgICAgKiByZWdpc3RlcnMgYXQgdGhlIHRpbWUgdGhlIGV4Y2VwdGlvbiB3YXMgcmFpc2VkLiAqLw0KLSAgICAgICAgdWludDMyX3QgdWxSMV9TUDsNCi0gICAgICAgIHVpbnQzMl90IHVsUjJfc21hbGxfZGF0YV9hcmVhOw0KLSAgICAgICAgdWludDMyX3QgdWxSMzsNCi0gICAgICAgIHVpbnQzMl90IHVsUjQ7DQotICAgICAgICB1aW50MzJfdCB1bFI1Ow0KLSAgICAgICAgdWludDMyX3QgdWxSNjsNCi0gICAgICAgIHVpbnQzMl90IHVsUjc7DQotICAgICAgICB1aW50MzJfdCB1bFI4Ow0KLSAgICAgICAgdWludDMyX3QgdWxSOTsNCi0gICAgICAgIHVpbnQzMl90IHVsUjEwOw0KLSAgICAgICAgdWludDMyX3QgdWxSMTE7DQotICAgICAgICB1aW50MzJfdCB1bFIxMjsNCi0gICAgICAgIHVpbnQzMl90IHVsUjEzX3JlYWRfd3JpdGVfc21hbGxfZGF0YV9hcmVhOw0KLSAgICAgICAgdWludDMyX3QgdWxSMTRfcmV0dXJuX2FkZHJlc3NfZnJvbV9pbnRlcnJ1cHQ7DQotICAgICAgICB1aW50MzJfdCB1bFIxNV9yZXR1cm5fYWRkcmVzc19mcm9tX3N1YnJvdXRpbmU7DQotICAgICAgICB1aW50MzJfdCB1bFIxNl9yZXR1cm5fYWRkcmVzc19mcm9tX3RyYXA7DQotICAgICAgICB1aW50MzJfdCB1bFIxN19yZXR1cm5fYWRkcmVzc19mcm9tX2V4Y2VwdGlvbnM7IC8qIFRoZSBleGNlcHRpb24gZW50cnkgY29kZSB3aWxsIGNvcHkgdGhlIEJUUiBpbnRvIFIxNyBpZiB0aGUgZXhjZXB0aW9uIG9jY3VycmVkIGluIHRoZSBkZWxheSBzbG90IG9mIGEgYnJhbmNoIGluc3RydWN0aW9uLiAqLw0KLSAgICAgICAgdWludDMyX3QgdWxSMTg7DQotICAgICAgICB1aW50MzJfdCB1bFIxOTsNCi0gICAgICAgIHVpbnQzMl90IHVsUjIwOw0KLSAgICAgICAgdWludDMyX3QgdWxSMjE7DQotICAgICAgICB1aW50MzJfdCB1bFIyMjsNCi0gICAgICAgIHVpbnQzMl90IHVsUjIzOw0KLSAgICAgICAgdWludDMyX3QgdWxSMjQ7DQotICAgICAgICB1aW50MzJfdCB1bFIyNTsNCi0gICAgICAgIHVpbnQzMl90IHVsUjI2Ow0KLSAgICAgICAgdWludDMyX3QgdWxSMjc7DQotICAgICAgICB1aW50MzJfdCB1bFIyODsNCi0gICAgICAgIHVpbnQzMl90IHVsUjI5Ow0KLSAgICAgICAgdWludDMyX3QgdWxSMzA7DQotICAgICAgICB1aW50MzJfdCB1bFIzMTsNCi0gICAgICAgIHVpbnQzMl90IHVsUEM7DQotICAgICAgICB1aW50MzJfdCB1bEVTUjsNCi0gICAgICAgIHVpbnQzMl90IHVsTVNSOw0KLSAgICAgICAgdWludDMyX3QgdWxFQVI7DQotICAgICAgICB1aW50MzJfdCB1bEZTUjsNCi0gICAgICAgIHVpbnQzMl90IHVsRURSOw0KK2ZpbGxlZCB3aXRoIHRoZSBNaWNyb0JsYXplIGNvbnRleHQgYXMgaXQgd2FzIGF0IHRoZSB0aW1lIHRoZSBleGNlcHRpb24gb2NjdXJyZWQuDQorVGhpcyBpcyBkb25lIGFzIGFuIGFpZCB0byBkZWJ1Z2dpbmcgZXhjZXB0aW9uIG9jY3VycmVuY2VzLiAqLw0KK3R5cGVkZWYgc3RydWN0IFBPUlRfUkVHSVNURVJfRFVNUA0KK3sNCisJLyogVGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgbWVtYmVycyBob2xkIHRoZSB2YWx1ZXMgb2YgdGhlIE1pY3JvQmxhemUNCisJcmVnaXN0ZXJzIGF0IHRoZSB0aW1lIHRoZSBleGNlcHRpb24gd2FzIHJhaXNlZC4gKi8NCisJdWludDMyX3QgdWxSMV9TUDsNCisJdWludDMyX3QgdWxSMl9zbWFsbF9kYXRhX2FyZWE7DQorCXVpbnQzMl90IHVsUjM7DQorCXVpbnQzMl90IHVsUjQ7DQorCXVpbnQzMl90IHVsUjU7DQorCXVpbnQzMl90IHVsUjY7DQorCXVpbnQzMl90IHVsUjc7DQorCXVpbnQzMl90IHVsUjg7DQorCXVpbnQzMl90IHVsUjk7DQorCXVpbnQzMl90IHVsUjEwOw0KKwl1aW50MzJfdCB1bFIxMTsNCisJdWludDMyX3QgdWxSMTI7DQorCXVpbnQzMl90IHVsUjEzX3JlYWRfd3JpdGVfc21hbGxfZGF0YV9hcmVhOw0KKwl1aW50MzJfdCB1bFIxNF9yZXR1cm5fYWRkcmVzc19mcm9tX2ludGVycnVwdDsNCisJdWludDMyX3QgdWxSMTVfcmV0dXJuX2FkZHJlc3NfZnJvbV9zdWJyb3V0aW5lOw0KKwl1aW50MzJfdCB1bFIxNl9yZXR1cm5fYWRkcmVzc19mcm9tX3RyYXA7DQorCXVpbnQzMl90IHVsUjE3X3JldHVybl9hZGRyZXNzX2Zyb21fZXhjZXB0aW9uczsgLyogVGhlIGV4Y2VwdGlvbiBlbnRyeSBjb2RlIHdpbGwgY29weSB0aGUgQlRSIGludG8gUjE3IGlmIHRoZSBleGNlcHRpb24gb2NjdXJyZWQgaW4gdGhlIGRlbGF5IHNsb3Qgb2YgYSBicmFuY2ggaW5zdHJ1Y3Rpb24uICovDQorCXVpbnQzMl90IHVsUjE4Ow0KKwl1aW50MzJfdCB1bFIxOTsNCisJdWludDMyX3QgdWxSMjA7DQorCXVpbnQzMl90IHVsUjIxOw0KKwl1aW50MzJfdCB1bFIyMjsNCisJdWludDMyX3QgdWxSMjM7DQorCXVpbnQzMl90IHVsUjI0Ow0KKwl1aW50MzJfdCB1bFIyNTsNCisJdWludDMyX3QgdWxSMjY7DQorCXVpbnQzMl90IHVsUjI3Ow0KKwl1aW50MzJfdCB1bFIyODsNCisJdWludDMyX3QgdWxSMjk7DQorCXVpbnQzMl90IHVsUjMwOw0KKwl1aW50MzJfdCB1bFIzMTsNCisJdWludDMyX3QgdWxQQzsNCisJdWludDMyX3QgdWxFU1I7DQorCXVpbnQzMl90IHVsTVNSOw0KKwl1aW50MzJfdCB1bEVBUjsNCisJdWludDMyX3QgdWxGU1I7DQorCXVpbnQzMl90IHVsRURSOw0KIA0KLSAgICAgICAgLyogQSBodW1hbiByZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB0aGUgZXhjZXB0aW9uIGNhdXNlLiAgVGhlIHN0cmluZ3MgdXNlZA0KLSAgICAgICAgICogYXJlIHRoZSBzYW1lIGFzIHRoZSAjZGVmaW5lIGNvbnN0YW50IG5hbWVzIGZvdW5kIGluIHRoZQ0KLSAgICAgICAgICogbWljcm9ibGF6ZV9leGNlcHRpb25zX2kuaCBoZWFkZXIgZmlsZSAqLw0KLSAgICAgICAgaW50OF90ICogcGNFeGNlcHRpb25DYXVzZTsNCisJLyogQSBodW1hbiByZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB0aGUgZXhjZXB0aW9uIGNhdXNlLiAgVGhlIHN0cmluZ3MgdXNlZA0KKwlhcmUgdGhlIHNhbWUgYXMgdGhlICNkZWZpbmUgY29uc3RhbnQgbmFtZXMgZm91bmQgaW4gdGhlDQorCW1pY3JvYmxhemVfZXhjZXB0aW9uc19pLmggaGVhZGVyIGZpbGUgKi8NCisJaW50OF90ICpwY0V4Y2VwdGlvbkNhdXNlOw0KIA0KLSAgICAgICAgLyogVGhlIGh1bWFuIHJlYWRhYmxlIG5hbWUgb2YgdGhlIHRhc2sgdGhhdCB3YXMgcnVubmluZyBhdCB0aGUgdGltZSB0aGUNCi0gICAgICAgICAqIGV4Y2VwdGlvbiBvY2N1cnJlZC4gIFRoaXMgaXMgdGhlIG5hbWUgdGhhdCB3YXMgZ2l2ZW4gdG8gdGhlIHRhc2sgd2hlbiB0aGUNCi0gICAgICAgICAqIHRhc2sgd2FzIGNyZWF0ZWQgdXNpbmcgdGhlIEZyZWVSVE9TIHhUYXNrQ3JlYXRlKCkgQVBJIGZ1bmN0aW9uLiAqLw0KLSAgICAgICAgY2hhciAqIHBjQ3VycmVudFRhc2tOYW1lOw0KKwkvKiBUaGUgaHVtYW4gcmVhZGFibGUgbmFtZSBvZiB0aGUgdGFzayB0aGF0IHdhcyBydW5uaW5nIGF0IHRoZSB0aW1lIHRoZQ0KKwlleGNlcHRpb24gb2NjdXJyZWQuICBUaGlzIGlzIHRoZSBuYW1lIHRoYXQgd2FzIGdpdmVuIHRvIHRoZSB0YXNrIHdoZW4gdGhlDQorCXRhc2sgd2FzIGNyZWF0ZWQgdXNpbmcgdGhlIEZyZWVSVE9TIHhUYXNrQ3JlYXRlKCkgQVBJIGZ1bmN0aW9uLiAqLw0KKwljaGFyICpwY0N1cnJlbnRUYXNrTmFtZTsNCiANCi0gICAgICAgIC8qIFRoZSBoYW5kbGUgb2YgdGhlIHRhc2sgdGhhdCB3YXMgcnVubmluZyBhIHRoZSB0aW1lIHRoZSBleGNlcHRpb24NCi0gICAgICAgICAqIG9jY3VycmVkLiAqLw0KLSAgICAgICAgdm9pZCAqIHhDdXJyZW50VGFza0hhbmRsZTsNCi0gICAgfSB4UG9ydFJlZ2lzdGVyRHVtcDsNCisJLyogVGhlIGhhbmRsZSBvZiB0aGUgdGFzayB0aGF0IHdhcyBydW5uaW5nIGEgdGhlIHRpbWUgdGhlIGV4Y2VwdGlvbg0KKwlvY2N1cnJlZC4gKi8NCisJdm9pZCAqIHhDdXJyZW50VGFza0hhbmRsZTsNCisNCit9IHhQb3J0UmVnaXN0ZXJEdW1wOw0KIA0KIA0KIC8qDQpAQCAtMjU1LDkgKzI1Myw3IEBACiAgKiBwZFBBU1MgaXMgcmV0dXJuZWQgaWYgdGhlIGZ1bmN0aW9uIGV4ZWN1dGVzIHN1Y2Nlc3NmdWxseS4gIEFueSBvdGhlciB2YWx1ZQ0KICAqIGJlaW5nIHJldHVybmVkIGluZGljYXRlcyB0aGF0IHRoZSBmdW5jdGlvbiBkaWQgbm90IGV4ZWN1dGUgY29ycmVjdGx5Lg0KICAqLw0KLSAgICBCYXNlVHlwZV90IHhQb3J0SW5zdGFsbEludGVycnVwdEhhbmRsZXIoIHVpbnQ4X3QgdWNJbnRlcnJ1cHRJRCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYSW50ZXJydXB0SGFuZGxlciBweEhhbmRsZXIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqIHB2Q2FsbEJhY2tSZWYgKTsNCitCYXNlVHlwZV90IHhQb3J0SW5zdGFsbEludGVycnVwdEhhbmRsZXIoIHVpbnQ4X3QgdWNJbnRlcnJ1cHRJRCwgWEludGVycnVwdEhhbmRsZXIgcHhIYW5kbGVyLCB2b2lkICpwdkNhbGxCYWNrUmVmICk7DQogDQogDQogLyoNCkBAIC0yNzgsNyArMjc0LDcgQEAKICAqIFhQQVJfSU5UQ18wX0dQSU9fMV9WRUNfSUQgICAgICAtICBmb3IgdGhlIGJ1dHRvbiBpbnB1dHMuDQogICoNCiAgKi8NCi0gICAgdm9pZCB2UG9ydEVuYWJsZUludGVycnVwdCggdWludDhfdCB1Y0ludGVycnVwdElEICk7DQordm9pZCB2UG9ydEVuYWJsZUludGVycnVwdCggdWludDhfdCB1Y0ludGVycnVwdElEICk7DQogDQogLyoNCiAgKiBEaXNhYmxlcyB0aGUgaW50ZXJydXB0LCB3aXRoaW4gdGhlIGludGVycnVwdCBjb250cm9sbGVyLCBmb3IgdGhlIHBlcmlwaGVyYWwNCkBAIC0yOTgsNyArMjk0LDcgQEAKICAqIFhQQVJfSU5UQ18wX0dQSU9fMV9WRUNfSUQgICAgICAtICBmb3IgdGhlIGJ1dHRvbiBpbnB1dHMuDQogICoNCiAgKi8NCi0gICAgdm9pZCB2UG9ydERpc2FibGVJbnRlcnJ1cHQoIHVpbnQ4X3QgdWNJbnRlcnJ1cHRJRCApOw0KK3ZvaWQgdlBvcnREaXNhYmxlSW50ZXJydXB0KCB1aW50OF90IHVjSW50ZXJydXB0SUQgKTsNCiANCiAvKg0KICAqIFRoaXMgaXMgYW4gYXBwbGljYXRpb24gZGVmaW5lZCBjYWxsYmFjayBmdW5jdGlvbiB1c2VkIHRvIGluc3RhbGwgdGhlIHRpY2sNCkBAIC0zMTAsNyArMzA2LDcgQEAKICAqIFRoZSBuYW1lIG9mIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciB0aGF0IHNob3VsZCBiZSBpbnN0YWxsZWQgaXMgdlBvcnRUaWNrSVNSKCksDQogICogd2hpY2ggdGhlIGZ1bmN0aW9uIGJlbG93IGRlY2xhcmVzIGFzIGFuIGV4dGVybi4NCiAgKi8NCi0gICAgdm9pZCB2QXBwbGljYXRpb25TZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICk7DQordm9pZCB2QXBwbGljYXRpb25TZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICk7DQogDQogLyoNCiAgKiBUaGlzIGlzIGFuIGFwcGxpY2F0aW9uIGRlZmluZWQgY2FsbGJhY2sgZnVuY3Rpb24gdXNlZCB0byBjbGVhciB3aGljaGV2ZXINCkBAIC0zMjMsNyArMzE5LDcgQEAKICAqIGltcGxlbWVudGF0aW9uIHNob3VsZCBub3QgcmVxdWlyZSBtb2RpZmljYXRpb24gcHJvdmlkZWQgdGhlIGV4YW1wbGUgZGVmaW5pdGlvbg0KICAqIG9mIHZBcHBsaWNhdGlvblNldHVwVGltZXJJbnRlcnJ1cHQoKSBpcyBhbHNvIG5vdCBtb2RpZmllZC4NCiAgKi8NCi0gICAgdm9pZCB2QXBwbGljYXRpb25DbGVhclRpbWVySW50ZXJydXB0KCB2b2lkICk7DQordm9pZCB2QXBwbGljYXRpb25DbGVhclRpbWVySW50ZXJydXB0KCB2b2lkICk7DQogDQogLyoNCiAgKiB2UG9ydEV4Y2VwdGlvbnNJbnN0YWxsSGFuZGxlcnMoKSBpcyBvbmx5IGF2YWlsYWJsZSB3aGVuIHRoZSBNaWNyb0JsYXplDQpAQCAtMzQ2LDcgKzM0Miw3IEBACiAgKiBTZWUgdGhlIGRlc2NyaXB0aW9uIG9mIHZBcHBsaWNhdGlvbkV4Y2VwdGlvblJlZ2lzdGVyRHVtcCgpIGZvciBpbmZvcm1hdGlvbg0KICAqIG9uIHRoZSBwcm9jZXNzaW5nIHBlcmZvcm1lZCBieSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uIGhhbmRsZXIuDQogICovDQotICAgIHZvaWQgdlBvcnRFeGNlcHRpb25zSW5zdGFsbEhhbmRsZXJzKCB2b2lkICk7DQordm9pZCB2UG9ydEV4Y2VwdGlvbnNJbnN0YWxsSGFuZGxlcnMoIHZvaWQgKTsNCiANCiAvKg0KICAqIFRoZSBGcmVlUlRPUyBleGNlcHRpb24gaGFuZGxlciBmaWxscyBhbiB4UG9ydFJlZ2lzdGVyRHVtcCBzdHJ1Y3R1cmUgKGRlZmluZWQNCkBAIC0zNjIsMTEgKzM1OCwxMiBAQAogICogcmVnaXN0ZXIgZHVtcCBpbmZvcm1hdGlvbi4gIEZvciBleGFtcGxlLCBhbiBpbXBsZW1lbnRhdGlvbiBjb3VsZCBiZSBwcm92aWRlZA0KICAqIHRoYXQgd3JvdGUgdGhlIHJlZ2lzdGVyIGR1bXAgZGF0YSB0byBhIGRpc3BsYXksIG9yIGEgVUFSVCBwb3J0Lg0KICAqLw0KLSAgICB2b2lkIHZBcHBsaWNhdGlvbkV4Y2VwdGlvblJlZ2lzdGVyRHVtcCggeFBvcnRSZWdpc3RlckR1bXAgKiB4UmVnaXN0ZXJEdW1wICk7DQordm9pZCB2QXBwbGljYXRpb25FeGNlcHRpb25SZWdpc3RlckR1bXAoIHhQb3J0UmVnaXN0ZXJEdW1wICp4UmVnaXN0ZXJEdW1wICk7DQogDQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgfQ0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQogDQogI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvR0NDL01pY3JvQmxhemVWOS9wb3J0LmMgYi9wb3J0YWJsZS9HQ0MvTWljcm9CbGF6ZVY5L3BvcnQuYwppbmRleCA5OTY3Mjg3Li45NDM2MTVkIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9HQ0MvTWljcm9CbGF6ZVY5L3BvcnQuYworKysgYi9wb3J0YWJsZS9HQ0MvTWljcm9CbGF6ZVY5L3BvcnQuYwpAQCAtMjYsOCArMjYsOCBAQAogICovDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLSogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFibGUuaCBmb3IgdGhlIE1pY3JvQmxhemUgcG9ydC4NCi0qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorICogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFibGUuaCBmb3IgdGhlIE1pY3JvQmxhemUgcG9ydC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIA0KIC8qIFNjaGVkdWxlciBpbmNsdWRlcy4gKi8NCkBAIC00MywyMCArNDMsMjAgQEAKICNpbmNsdWRlIDxtaWNyb2JsYXplX2V4Y2VwdGlvbnNfZy5oPg0KIA0KIC8qIFRhc2tzIGFyZSBzdGFydGVkIHdpdGggYSBjcml0aWNhbCBzZWN0aW9uIG5lc3Rpbmcgb2YgMCAtIGhvd2V2ZXIsIHByaW9yIHRvDQotICogdGhlIHNjaGVkdWxlciBiZWluZyBjb21tZW5jZWQgaW50ZXJydXB0cyBzaG91bGQgbm90IGJlIGVuYWJsZWQsIHNvIHRoZSBjcml0aWNhbA0KLSAqIG5lc3RpbmcgdmFyaWFibGUgaXMgaW5pdGlhbGlzZWQgdG8gYSBub24temVybyB2YWx1ZS4gKi8NCi0jZGVmaW5lIHBvcnRJTklUSUFMX05FU1RJTkdfVkFMVUUgICAgKCAweGZmICkNCit0aGUgc2NoZWR1bGVyIGJlaW5nIGNvbW1lbmNlZCBpbnRlcnJ1cHRzIHNob3VsZCBub3QgYmUgZW5hYmxlZCwgc28gdGhlIGNyaXRpY2FsDQorbmVzdGluZyB2YXJpYWJsZSBpcyBpbml0aWFsaXNlZCB0byBhIG5vbi16ZXJvIHZhbHVlLiAqLw0KKyNkZWZpbmUgcG9ydElOSVRJQUxfTkVTVElOR19WQUxVRQkoIDB4ZmYgKQ0KIA0KIC8qIFRoZSBiaXQgd2l0aGluIHRoZSBNU1IgcmVnaXN0ZXIgdGhhdCBlbmFibGVkL2Rpc2FibGVzIGludGVycnVwdHMgYW5kDQotICogZXhjZXB0aW9ucyByZXNwZWN0aXZlbHkuICovDQotI2RlZmluZSBwb3J0TVNSX0lFICAgICAgICAgICAgICAgICAgICggMHgwMlUgKQ0KLSNkZWZpbmUgcG9ydE1TUl9FRSAgICAgICAgICAgICAgICAgICAoIDB4MTAwVSApDQorZXhjZXB0aW9ucyByZXNwZWN0aXZlbHkuICovDQorI2RlZmluZSBwb3J0TVNSX0lFCQkJCQkoIDB4MDJVICkNCisjZGVmaW5lIHBvcnRNU1JfRUUJCQkJCSggMHgxMDBVICkNCiANCiAvKiBJZiB0aGUgZmxvYXRpbmcgcG9pbnQgdW5pdCBpcyBpbmNsdWRlZCBpbiB0aGUgTWljcm9CbGF6ZSBidWlsZCwgdGhlbiB0aGUNCi0gKiBGU1IgcmVnaXN0ZXIgaXMgc2F2ZWQgYXMgcGFydCBvZiB0aGUgdGFzayBjb250ZXh0LiAgcG9ydElOSVRJQUxfRlNSIGlzIHRoZSB2YWx1ZQ0KLSAqIGdpdmVuIHRvIHRoZSBGU1IgcmVnaXN0ZXIgd2hlbiB0aGUgaW5pdGlhbCBjb250ZXh0IGlzIHNldCB1cCBmb3IgYSB0YXNrIGJlaW5nDQotICogY3JlYXRlZC4gKi8NCi0jZGVmaW5lIHBvcnRJTklUSUFMX0ZTUiAgICAgICAgICAgICAgKCAwVSApDQorRlNSIHJlZ2lzdGVyIGlzIHNhdmVkIGFzIHBhcnQgb2YgdGhlIHRhc2sgY29udGV4dC4gIHBvcnRJTklUSUFMX0ZTUiBpcyB0aGUgdmFsdWUNCitnaXZlbiB0byB0aGUgRlNSIHJlZ2lzdGVyIHdoZW4gdGhlIGluaXRpYWwgY29udGV4dCBpcyBzZXQgdXAgZm9yIGEgdGFzayBiZWluZw0KK2NyZWF0ZWQuICovDQorI2RlZmluZSBwb3J0SU5JVElBTF9GU1IJCQkJKCAwVSApDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQpAQCAtNzMsMjcgKzczLDI3IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBDb3VudHMgdGhlIG5lc3RpbmcgZGVwdGggb2YgY2FsbHMgdG8gcG9ydEVOVEVSX0NSSVRJQ0FMKCkuICBFYWNoIHRhc2sNCi0gKiBtYWludGFpbnMgaXRzIG93biBjb3VudCwgc28gdGhpcyB2YXJpYWJsZSBpcyBzYXZlZCBhcyBwYXJ0IG9mIHRoZSB0YXNrDQotICogY29udGV4dC4gKi8NCittYWludGFpbnMgaXRzIG93biBjb3VudCwgc28gdGhpcyB2YXJpYWJsZSBpcyBzYXZlZCBhcyBwYXJ0IG9mIHRoZSB0YXNrDQorY29udGV4dC4gKi8NCiB2b2xhdGlsZSBVQmFzZVR5cGVfdCB1eENyaXRpY2FsTmVzdGluZyA9IHBvcnRJTklUSUFMX05FU1RJTkdfVkFMVUU7DQogDQogLyogVGhpcyBwb3J0IHVzZXMgYSBzZXBhcmF0ZSBzdGFjayBmb3IgaW50ZXJydXB0cy4gIFRoaXMgcHJldmVudHMgdGhlIHN0YWNrIG9mDQotICogZXZlcnkgdGFzayBuZWVkaW5nIHRvIGJlIGxhcmdlIGVub3VnaCB0byBob2xkIGFuIGVudGlyZSBpbnRlcnJ1cHQgc3RhY2sgb24gdG9wDQotICogb2YgdGhlIHRhc2sgc3RhY2suICovDQotdWludDMyX3QgKiBwdWxJU1JTdGFjazsNCitldmVyeSB0YXNrIG5lZWRpbmcgdG8gYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYW4gZW50aXJlIGludGVycnVwdCBzdGFjayBvbiB0b3ANCitvZiB0aGUgdGFzayBzdGFjay4gKi8NCit1aW50MzJfdCAqcHVsSVNSU3RhY2s7DQogDQogLyogSWYgYW4gaW50ZXJydXB0IHJlcXVlc3RzIGEgY29udGV4dCBzd2l0Y2gsIHRoZW4gdWxUYXNrU3dpdGNoUmVxdWVzdGVkIHdpbGwNCi0gKiBnZXQgc2V0IHRvIDEuICB1bFRhc2tTd2l0Y2hSZXF1ZXN0ZWQgaXMgaW5zcGVjdGVkIGp1c3QgYmVmb3JlIHRoZSBtYWluIGludGVycnVwdA0KLSAqIGhhbmRsZXIgZXhpdHMuICBJZiwgYXQgdGhhdCB0aW1lLCB1bFRhc2tTd2l0Y2hSZXF1ZXN0ZWQgaXMgc2V0IHRvIDEsIHRoZSBrZXJuZWwNCi0gKiB3aWxsIGNhbGwgdlRhc2tTd2l0Y2hDb250ZXh0KCkgdG8gZW5zdXJlIHRoZSB0YXNrIHRoYXQgcnVucyBpbW1lZGlhdGVseSBhZnRlcg0KLSAqIHRoZSBpbnRlcnJ1cHQgZXhpc3RzIGlzIHRoZSBoaWdoZXN0IHByaW9yaXR5IHRhc2sgdGhhdCBpcyBhYmxlIHRvIHJ1bi4gIFRoaXMgaXMNCi0gKiBhbiB1bnVzdWFsIG1lY2hhbmlzbSwgYnV0IGlzIHVzZWQgZm9yIHRoaXMgcG9ydCBiZWNhdXNlIGEgc2luZ2xlIGludGVycnVwdCBjYW4NCi0gKiBjYXVzZSB0aGUgc2VydmljaW5nIG9mIG11bHRpcGxlIHBlcmlwaGVyYWxzIC0gYW5kIGl0IGlzIGluZWZmaWNpZW50IHRvIGNhbGwNCi0gKiB2VGFza1N3aXRjaENvbnRleHQoKSBtdWx0aXBsZSB0aW1lcyBhcyBlYWNoIHBlcmlwaGVyYWwgaXMgc2VydmljZWQuICovDQorZ2V0IHNldCB0byAxLiAgdWxUYXNrU3dpdGNoUmVxdWVzdGVkIGlzIGluc3BlY3RlZCBqdXN0IGJlZm9yZSB0aGUgbWFpbiBpbnRlcnJ1cHQNCitoYW5kbGVyIGV4aXRzLiAgSWYsIGF0IHRoYXQgdGltZSwgdWxUYXNrU3dpdGNoUmVxdWVzdGVkIGlzIHNldCB0byAxLCB0aGUga2VybmVsDQord2lsbCBjYWxsIHZUYXNrU3dpdGNoQ29udGV4dCgpIHRvIGVuc3VyZSB0aGUgdGFzayB0aGF0IHJ1bnMgaW1tZWRpYXRlbHkgYWZ0ZXINCit0aGUgaW50ZXJydXB0IGV4aXN0cyBpcyB0aGUgaGlnaGVzdCBwcmlvcml0eSB0YXNrIHRoYXQgaXMgYWJsZSB0byBydW4uICBUaGlzIGlzDQorYW4gdW51c3VhbCBtZWNoYW5pc20sIGJ1dCBpcyB1c2VkIGZvciB0aGlzIHBvcnQgYmVjYXVzZSBhIHNpbmdsZSBpbnRlcnJ1cHQgY2FuDQorY2F1c2UgdGhlIHNlcnZpY2luZyBvZiBtdWx0aXBsZSBwZXJpcGhlcmFscyAtIGFuZCBpdCBpcyBpbmVmZmljaWVudCB0byBjYWxsDQordlRhc2tTd2l0Y2hDb250ZXh0KCkgbXVsdGlwbGUgdGltZXMgYXMgZWFjaCBwZXJpcGhlcmFsIGlzIHNlcnZpY2VkLiAqLw0KIHZvbGF0aWxlIHVpbnQzMl90IHVsVGFza1N3aXRjaFJlcXVlc3RlZCA9IDBVTDsNCiANCiAvKiBUaGUgaW5zdGFuY2Ugb2YgdGhlIGludGVycnVwdCBjb250cm9sbGVyIHVzZWQgYnkgdGhpcyBwb3J0LiAgVGhpcyBpcyByZXF1aXJlZA0KLSAqIGJ5IHRoZSBYaWxpbnggbGlicmFyeSBBUEkgZnVuY3Rpb25zLiAqLw0KK2J5IHRoZSBYaWxpbnggbGlicmFyeSBBUEkgZnVuY3Rpb25zLiAqLw0KIHN0YXRpYyBYSW50YyB4SW50ZXJydXB0Q29udHJvbGxlckluc3RhbmNlOw0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KQEAgLTEwNCwxNzUgKzEwNCwxNzMgQEAKICAqDQogICogU2VlIHRoZSBwb3J0YWJsZS5oIGhlYWRlciBmaWxlLg0KICAqLw0KLVN0YWNrVHlwZV90ICogcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqIHB4VG9wT2ZTdGFjaywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFza0Z1bmN0aW9uX3QgcHhDb2RlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICogcHZQYXJhbWV0ZXJzICkNCitTdGFja1R5cGVfdCAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqcHhUb3BPZlN0YWNrLCBUYXNrRnVuY3Rpb25fdCBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycyApDQogew0KLSAgICBleHRlcm4gdm9pZCAqIF9TREEyX0JBU0VfLCAqIF9TREFfQkFTRV87DQotICAgIGNvbnN0IHVpbnQzMl90IHVsUjIgPSAoIHVpbnQzMl90ICkgJl9TREEyX0JBU0VfOw0KLSAgICBjb25zdCB1aW50MzJfdCB1bFIxMyA9ICggdWludDMyX3QgKSAmX1NEQV9CQVNFXzsNCi0gICAgZXh0ZXJuIHZvaWQgX3N0YXJ0MSggdm9pZCApOw0KK2V4dGVybiB2b2lkICpfU0RBMl9CQVNFXywgKl9TREFfQkFTRV87DQorY29uc3QgdWludDMyX3QgdWxSMiA9ICggdWludDMyX3QgKSAmX1NEQTJfQkFTRV87DQorY29uc3QgdWludDMyX3QgdWxSMTMgPSAoIHVpbnQzMl90ICkgJl9TREFfQkFTRV87DQorZXh0ZXJuIHZvaWQgX3N0YXJ0MSggdm9pZCApOw0KIA0KLSAgICAvKiBQbGFjZSBhIGZldyBieXRlcyBvZiBrbm93biB2YWx1ZXMgb24gdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suDQotICAgICAqIFRoaXMgaXMgZXNzZW50aWFsIGZvciB0aGUgTWljcm9ibGF6ZSBwb3J0IGFuZCB0aGVzZSBsaW5lcyBtdXN0DQotICAgICAqIG5vdCBiZSBvbWl0dGVkLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDAwMDAwMDA7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDAwMDAwMDA7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDAwMDAwMDA7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkvKiBQbGFjZSBhIGZldyBieXRlcyBvZiBrbm93biB2YWx1ZXMgb24gdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suDQorCVRoaXMgaXMgZXNzZW50aWFsIGZvciB0aGUgTWljcm9ibGF6ZSBwb3J0IGFuZCB0aGVzZSBsaW5lcyBtdXN0DQorCW5vdCBiZSBvbWl0dGVkLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDAwMDAwMDA7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDAwMDAwMDA7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDAwMDAwMDA7DQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAjaWYgKCBYUEFSX01JQ1JPQkxBWkVfVVNFX0ZQVSAhPSAwICkNCi0gICAgICAgIC8qIFRoZSBGU1IgdmFsdWUgcGxhY2VkIGluIHRoZSBpbml0aWFsIHRhc2sgY29udGV4dCBpcyBqdXN0IDAuICovDQotICAgICAgICAqcHhUb3BPZlN0YWNrID0gcG9ydElOSVRJQUxfRlNSOw0KLSAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICNlbmRpZg0KKwkjaWYoIFhQQVJfTUlDUk9CTEFaRV9VU0VfRlBVICE9IDAgKQ0KKwkJLyogVGhlIEZTUiB2YWx1ZSBwbGFjZWQgaW4gdGhlIGluaXRpYWwgdGFzayBjb250ZXh0IGlzIGp1c3QgMC4gKi8NCisJCSpweFRvcE9mU3RhY2sgPSBwb3J0SU5JVElBTF9GU1I7DQorCQlweFRvcE9mU3RhY2stLTsNCisJI2VuZGlmDQogDQotICAgIC8qIFRoZSBNU1IgdmFsdWUgcGxhY2VkIGluIHRoZSBpbml0aWFsIHRhc2sgY29udGV4dCBzaG91bGQgaGF2ZSBpbnRlcnJ1cHRzDQotICAgICAqIGRpc2FibGVkLiAgRWFjaCB0YXNrIHdpbGwgZW5hYmxlIGludGVycnVwdHMgYXV0b21hdGljYWxseSB3aGVuIGl0IGVudGVycw0KLSAgICAgKiB0aGUgcnVubmluZyBzdGF0ZSBmb3IgdGhlIGZpcnN0IHRpbWUuICovDQotICAgICpweFRvcE9mU3RhY2sgPSBtZm1zcigpICYgfnBvcnRNU1JfSUU7DQorCS8qIFRoZSBNU1IgdmFsdWUgcGxhY2VkIGluIHRoZSBpbml0aWFsIHRhc2sgY29udGV4dCBzaG91bGQgaGF2ZSBpbnRlcnJ1cHRzDQorCWRpc2FibGVkLiAgRWFjaCB0YXNrIHdpbGwgZW5hYmxlIGludGVycnVwdHMgYXV0b21hdGljYWxseSB3aGVuIGl0IGVudGVycw0KKwl0aGUgcnVubmluZyBzdGF0ZSBmb3IgdGhlIGZpcnN0IHRpbWUuICovDQorCSpweFRvcE9mU3RhY2sgPSBtZm1zcigpICYgfnBvcnRNU1JfSUU7DQogDQotICAgICNpZiAoIE1JQ1JPQkxBWkVfRVhDRVBUSU9OU19FTkFCTEVEID09IDEgKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIC8qIEVuc3VyZSBleGNlcHRpb25zIGFyZSBlbmFibGVkIGZvciB0aGUgdGFzay4gKi8NCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrIHw9IHBvcnRNU1JfRUU7DQotICAgICAgICB9DQotICAgICNlbmRpZg0KKwkjaWYoIE1JQ1JPQkxBWkVfRVhDRVBUSU9OU19FTkFCTEVEID09IDEgKQ0KKwl7DQorCQkvKiBFbnN1cmUgZXhjZXB0aW9ucyBhcmUgZW5hYmxlZCBmb3IgdGhlIHRhc2suICovDQorCQkqcHhUb3BPZlN0YWNrIHw9IHBvcnRNU1JfRUU7DQorCX0NCisJI2VuZGlmDQogDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgLyogRmlyc3Qgc3RhY2sgYW4gaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIGNyaXRpY2FsIHNlY3Rpb24gbmVzdGluZy4gIFRoaXMNCi0gICAgICogaXMgaW5pdGlhbGlzZWQgdG8gemVyby4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAwOw0KKwkvKiBGaXJzdCBzdGFjayBhbiBpbml0aWFsIHZhbHVlIGZvciB0aGUgY3JpdGljYWwgc2VjdGlvbiBuZXN0aW5nLiAgVGhpcw0KKwlpcyBpbml0aWFsaXNlZCB0byB6ZXJvLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDA7DQogDQotICAgIC8qIFIwIGlzIGFsd2F5cyB6ZXJvLiAqLw0KLSAgICAvKiBSMSBpcyB0aGUgU1AuICovDQorCS8qIFIwIGlzIGFsd2F5cyB6ZXJvLiAqLw0KKwkvKiBSMSBpcyB0aGUgU1AuICovDQogDQotICAgIC8qIFBsYWNlIGFuIGluaXRpYWwgdmFsdWUgZm9yIGFsbCB0aGUgZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycy4gKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgdWxSMjsgICAgICAgICAvKiBSMiAtIHJlYWQgb25seSBzbWFsbCBkYXRhIGFyZWEuICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDM7ICAgICAgICAgLyogUjMgLSByZXR1cm4gdmFsdWVzIGFuZCB0ZW1wb3Jhcmllcy4gKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNDsgICAgICAgICAvKiBSNCAtIHJldHVybiB2YWx1ZXMgYW5kIHRlbXBvcmFyaWVzLiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwdlBhcmFtZXRlcnM7IC8qIFI1IGNvbnRhaW5zIHRoZSBmdW5jdGlvbiBjYWxsIHBhcmFtZXRlcnMuICovDQorCS8qIFBsYWNlIGFuIGluaXRpYWwgdmFsdWUgZm9yIGFsbCB0aGUgZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycy4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgdWxSMjsJLyogUjIgLSByZWFkIG9ubHkgc21hbGwgZGF0YSBhcmVhLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAzOwkvKiBSMyAtIHJldHVybiB2YWx1ZXMgYW5kIHRlbXBvcmFyaWVzLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA0OwkvKiBSNCAtIHJldHVybiB2YWx1ZXMgYW5kIHRlbXBvcmFyaWVzLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwdlBhcmFtZXRlcnM7LyogUjUgY29udGFpbnMgdGhlIGZ1bmN0aW9uIGNhbGwgcGFyYW1ldGVycy4gKi8NCiANCi0gICAgI2lmZGVmIHBvcnRQUkVfTE9BRF9TVEFDS19GT1JfREVCVUdHSU5HDQotICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNjsgLyogUjYgLSBvdGhlciBwYXJhbWV0ZXJzIGFuZCB0ZW1wb3Jhcmllcy4gKi8NCi0gICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA3OyAvKiBSNyAtIG90aGVyIHBhcmFtZXRlcnMgYW5kIHRlbXBvcmFyaWVzLiAqLw0KLSAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIE5VTEw7IC8qIFI4IC0gb3RoZXIgcGFyYW1ldGVycyBhbmQgdGVtcG9yYXJpZXMuICovDQotICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwOTsgLyogUjkgLSBvdGhlciBwYXJhbWV0ZXJzIGFuZCB0ZW1wb3Jhcmllcy4gKi8NCi0gICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDBhOyAvKiBSMTAgLSBvdGhlciBwYXJhbWV0ZXJzIGFuZCB0ZW1wb3Jhcmllcy4gKi8NCi0gICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDBiOyAvKiBSMTEgLSB0ZW1wb3Jhcmllcy4gKi8NCi0gICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDBjOyAvKiBSMTIgLSB0ZW1wb3Jhcmllcy4gKi8NCi0gICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAjZWxzZSAvKiBpZmRlZiBwb3J0UFJFX0xPQURfU1RBQ0tfRk9SX0RFQlVHR0lORyAqLw0KLSAgICAgICAgcHhUb3BPZlN0YWNrIC09IDg7DQotICAgICNlbmRpZiAvKiBpZmRlZiBwb3J0UFJFX0xPQURfU1RBQ0tfRk9SX0RFQlVHR0lORyAqLw0KKwkjaWZkZWYgcG9ydFBSRV9MT0FEX1NUQUNLX0ZPUl9ERUJVR0dJTkcNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA2OwkvKiBSNiAtIG90aGVyIHBhcmFtZXRlcnMgYW5kIHRlbXBvcmFyaWVzLiAqLw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDc7CS8qIFI3IC0gb3RoZXIgcGFyYW1ldGVycyBhbmQgdGVtcG9yYXJpZXMuICovDQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgTlVMTDsJLyogUjggLSBvdGhlciBwYXJhbWV0ZXJzIGFuZCB0ZW1wb3Jhcmllcy4gKi8NCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA5OwkvKiBSOSAtIG90aGVyIHBhcmFtZXRlcnMgYW5kIHRlbXBvcmFyaWVzLiAqLw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MGE7CS8qIFIxMCAtIG90aGVyIHBhcmFtZXRlcnMgYW5kIHRlbXBvcmFyaWVzLiAqLw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MGI7CS8qIFIxMSAtIHRlbXBvcmFyaWVzLiAqLw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MGM7CS8qIFIxMiAtIHRlbXBvcmFyaWVzLiAqLw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCSNlbHNlDQorCQlweFRvcE9mU3RhY2stPSA4Ow0KKwkjZW5kaWYNCiANCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSB1bFIxMzsgICAvKiBSMTMgLSByZWFkL3dyaXRlIHNtYWxsIGRhdGEgYXJlYS4gKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHhDb2RlOyAgLyogUjE0IC0gcmV0dXJuIGFkZHJlc3MgZm9yIGludGVycnVwdC4gKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgX3N0YXJ0MTsgLyogUjE1IC0gcmV0dXJuIGFkZHJlc3MgZm9yIHN1YnJvdXRpbmUuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgdWxSMTM7CS8qIFIxMyAtIHJlYWQvd3JpdGUgc21hbGwgZGF0YSBhcmVhLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBweENvZGU7CS8qIFIxNCAtIHJldHVybiBhZGRyZXNzIGZvciBpbnRlcnJ1cHQuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIF9zdGFydDE7CS8qIFIxNSAtIHJldHVybiBhZGRyZXNzIGZvciBzdWJyb3V0aW5lLiAqLw0KIA0KLSAgICAjaWZkZWYgcG9ydFBSRV9MT0FEX1NUQUNLX0ZPUl9ERUJVR0dJTkcNCi0gICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDEwOyAvKiBSMTYgLSByZXR1cm4gYWRkcmVzcyBmb3IgdHJhcCAoZGVidWdnZXIpLiAqLw0KLSAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTE7IC8qIFIxNyAtIHJldHVybiBhZGRyZXNzIGZvciBleGNlcHRpb25zLCBpZiBjb25maWd1cmVkLiAqLw0KLSAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTI7IC8qIFIxOCAtIHJlc2VydmVkIGZvciBhc3NlbWJsZXIgYW5kIGNvbXBpbGVyIHRlbXBvcmFyaWVzLiAqLw0KLSAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICNlbHNlDQotICAgICAgICBweFRvcE9mU3RhY2sgLT0gNDsNCi0gICAgI2VuZGlmDQorCSNpZmRlZiBwb3J0UFJFX0xPQURfU1RBQ0tfRk9SX0RFQlVHR0lORw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTA7CS8qIFIxNiAtIHJldHVybiBhZGRyZXNzIGZvciB0cmFwIChkZWJ1Z2dlcikuICovDQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMTsJLyogUjE3IC0gcmV0dXJuIGFkZHJlc3MgZm9yIGV4Y2VwdGlvbnMsIGlmIGNvbmZpZ3VyZWQuICovDQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMjsJLyogUjE4IC0gcmVzZXJ2ZWQgZm9yIGFzc2VtYmxlciBhbmQgY29tcGlsZXIgdGVtcG9yYXJpZXMuICovDQorCQlweFRvcE9mU3RhY2stLTsNCisJI2Vsc2UNCisJCXB4VG9wT2ZTdGFjayAtPSA0Ow0KKwkjZW5kaWYNCiANCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAwOyAvKiBSMTkgLSBtdXN0IGJlIHNhdmVkIGFjcm9zcyBmdW5jdGlvbiBjYWxscy4gQ2FsbGVlLXNhdmUuICBTZWVtcyB0byBiZSBpbnRlcnByZXRlZCBhcyB0aGUgZnJhbWUgcG9pbnRlci4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAwOwkvKiBSMTkgLSBtdXN0IGJlIHNhdmVkIGFjcm9zcyBmdW5jdGlvbiBjYWxscy4gQ2FsbGVlLXNhdmUuICBTZWVtcyB0byBiZSBpbnRlcnByZXRlZCBhcyB0aGUgZnJhbWUgcG9pbnRlci4gKi8NCiANCi0gICAgI2lmZGVmIHBvcnRQUkVfTE9BRF9TVEFDS19GT1JfREVCVUdHSU5HDQotICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxNDsgLyogUjIwIC0gcmVzZXJ2ZWQgZm9yIHN0b3JpbmcgYSBwb2ludGVyIHRvIHRoZSBHbG9iYWwgT2Zmc2V0IFRhYmxlIChHT1QpIGluIFBvc2l0aW9uIEluZGVwZW5kZW50IENvZGUgKFBJQykuIE5vbi12b2xhdGlsZSBpbiBub24tUElDIGNvZGUuIE11c3QgYmUgc2F2ZWQgYWNyb3NzIGZ1bmN0aW9uIGNhbGxzLiBDYWxsZWUtc2F2ZS4gIE5vdCB1c2VkIGJ5IEZyZWVSVE9TLiAqLw0KLSAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTU7IC8qIFIyMSAtIG11c3QgYmUgc2F2ZWQgYWNyb3NzIGZ1bmN0aW9uIGNhbGxzLiBDYWxsZWUtc2F2ZS4gKi8NCi0gICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDE2OyAvKiBSMjIgLSBtdXN0IGJlIHNhdmVkIGFjcm9zcyBmdW5jdGlvbiBjYWxscy4gQ2FsbGVlLXNhdmUuICovDQotICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxNzsgLyogUjIzIC0gbXVzdCBiZSBzYXZlZCBhY3Jvc3MgZnVuY3Rpb24gY2FsbHMuIENhbGxlZS1zYXZlLiAqLw0KLSAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTg7IC8qIFIyNCAtIG11c3QgYmUgc2F2ZWQgYWNyb3NzIGZ1bmN0aW9uIGNhbGxzLiBDYWxsZWUtc2F2ZS4gKi8NCi0gICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDE5OyAvKiBSMjUgLSBtdXN0IGJlIHNhdmVkIGFjcm9zcyBmdW5jdGlvbiBjYWxscy4gQ2FsbGVlLXNhdmUuICovDQotICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxYTsgLyogUjI2IC0gbXVzdCBiZSBzYXZlZCBhY3Jvc3MgZnVuY3Rpb24gY2FsbHMuIENhbGxlZS1zYXZlLiAqLw0KLSAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MWI7IC8qIFIyNyAtIG11c3QgYmUgc2F2ZWQgYWNyb3NzIGZ1bmN0aW9uIGNhbGxzLiBDYWxsZWUtc2F2ZS4gKi8NCi0gICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDFjOyAvKiBSMjggLSBtdXN0IGJlIHNhdmVkIGFjcm9zcyBmdW5jdGlvbiBjYWxscy4gQ2FsbGVlLXNhdmUuICovDQotICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxZDsgLyogUjI5IC0gbXVzdCBiZSBzYXZlZCBhY3Jvc3MgZnVuY3Rpb24gY2FsbHMuIENhbGxlZS1zYXZlLiAqLw0KLSAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MWU7IC8qIFIzMCAtIG11c3QgYmUgc2F2ZWQgYWNyb3NzIGZ1bmN0aW9uIGNhbGxzLiBDYWxsZWUtc2F2ZS4gKi8NCi0gICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDFmOyAvKiBSMzEgLSBtdXN0IGJlIHNhdmVkIGFjcm9zcyBmdW5jdGlvbiBjYWxscy4gQ2FsbGVlLXNhdmUuICovDQotICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgI2Vsc2UgLyogaWZkZWYgcG9ydFBSRV9MT0FEX1NUQUNLX0ZPUl9ERUJVR0dJTkcgKi8NCi0gICAgICAgIHB4VG9wT2ZTdGFjayAtPSAxMzsNCi0gICAgI2VuZGlmIC8qIGlmZGVmIHBvcnRQUkVfTE9BRF9TVEFDS19GT1JfREVCVUdHSU5HICovDQorCSNpZmRlZiBwb3J0UFJFX0xPQURfU1RBQ0tfRk9SX0RFQlVHR0lORw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTQ7CS8qIFIyMCAtIHJlc2VydmVkIGZvciBzdG9yaW5nIGEgcG9pbnRlciB0byB0aGUgR2xvYmFsIE9mZnNldCBUYWJsZSAoR09UKSBpbiBQb3NpdGlvbiBJbmRlcGVuZGVudCBDb2RlIChQSUMpLiBOb24tdm9sYXRpbGUgaW4gbm9uLVBJQyBjb2RlLiBNdXN0IGJlIHNhdmVkIGFjcm9zcyBmdW5jdGlvbiBjYWxscy4gQ2FsbGVlLXNhdmUuICBOb3QgdXNlZCBieSBGcmVlUlRPUy4gKi8NCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDE1OwkvKiBSMjEgLSBtdXN0IGJlIHNhdmVkIGFjcm9zcyBmdW5jdGlvbiBjYWxscy4gQ2FsbGVlLXNhdmUuICovDQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxNjsJLyogUjIyIC0gbXVzdCBiZSBzYXZlZCBhY3Jvc3MgZnVuY3Rpb24gY2FsbHMuIENhbGxlZS1zYXZlLiAqLw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTc7CS8qIFIyMyAtIG11c3QgYmUgc2F2ZWQgYWNyb3NzIGZ1bmN0aW9uIGNhbGxzLiBDYWxsZWUtc2F2ZS4gKi8NCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDE4OwkvKiBSMjQgLSBtdXN0IGJlIHNhdmVkIGFjcm9zcyBmdW5jdGlvbiBjYWxscy4gQ2FsbGVlLXNhdmUuICovDQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxOTsJLyogUjI1IC0gbXVzdCBiZSBzYXZlZCBhY3Jvc3MgZnVuY3Rpb24gY2FsbHMuIENhbGxlZS1zYXZlLiAqLw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MWE7CS8qIFIyNiAtIG11c3QgYmUgc2F2ZWQgYWNyb3NzIGZ1bmN0aW9uIGNhbGxzLiBDYWxsZWUtc2F2ZS4gKi8NCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDFiOwkvKiBSMjcgLSBtdXN0IGJlIHNhdmVkIGFjcm9zcyBmdW5jdGlvbiBjYWxscy4gQ2FsbGVlLXNhdmUuICovDQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxYzsJLyogUjI4IC0gbXVzdCBiZSBzYXZlZCBhY3Jvc3MgZnVuY3Rpb24gY2FsbHMuIENhbGxlZS1zYXZlLiAqLw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MWQ7CS8qIFIyOSAtIG11c3QgYmUgc2F2ZWQgYWNyb3NzIGZ1bmN0aW9uIGNhbGxzLiBDYWxsZWUtc2F2ZS4gKi8NCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDFlOwkvKiBSMzAgLSBtdXN0IGJlIHNhdmVkIGFjcm9zcyBmdW5jdGlvbiBjYWxscy4gQ2FsbGVlLXNhdmUuICovDQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxZjsJLyogUjMxIC0gbXVzdCBiZSBzYXZlZCBhY3Jvc3MgZnVuY3Rpb24gY2FsbHMuIENhbGxlZS1zYXZlLiAqLw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCSNlbHNlDQorCQlweFRvcE9mU3RhY2sgLT0gMTM7DQorCSNlbmRpZg0KIA0KLSAgICAvKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSB0b3Agb2YgdGhlIHN0YWNrIHRoYXQgaGFzIGJlZW4gZ2VuZXJhdGVkIHNvIHRoaXMNCi0gICAgICogY2FuCWJlIHN0b3JlZCBpbiB0aGUgdGFzayBjb250cm9sIGJsb2NrIGZvciB0aGUgdGFzay4gKi8NCi0gICAgcmV0dXJuIHB4VG9wT2ZTdGFjazsNCisJLyogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgdG9wIG9mIHRoZSBzdGFjayB0aGF0IGhhcyBiZWVuIGdlbmVyYXRlZCBzbyB0aGlzDQorCWNhbgliZSBzdG9yZWQgaW4gdGhlIHRhc2sgY29udHJvbCBibG9jayBmb3IgdGhlIHRhc2suICovDQorCXJldHVybiBweFRvcE9mU3RhY2s7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIEJhc2VUeXBlX3QgeFBvcnRTdGFydFNjaGVkdWxlciggdm9pZCApDQogew0KLSAgICBleHRlcm4gdm9pZCggdlBvcnRTdGFydEZpcnN0VGFzayApKCB2b2lkICk7DQotICAgIGV4dGVybiB1aW50MzJfdCBfc3RhY2tbXTsNCitleHRlcm4gdm9pZCAoIHZQb3J0U3RhcnRGaXJzdFRhc2sgKSggdm9pZCApOw0KK2V4dGVybiB1aW50MzJfdCBfc3RhY2tbXTsNCiANCi0gICAgLyogU2V0dXAgdGhlIGhhcmR3YXJlIHRvIGdlbmVyYXRlIHRoZSB0aWNrLiAgSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgd2hlbg0KLSAgICAgKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4NCi0gICAgICoNCi0gICAgICogVGhpcyBwb3J0IHVzZXMgYW4gYXBwbGljYXRpb24gZGVmaW5lZCBjYWxsYmFjayBmdW5jdGlvbiB0byBpbnN0YWxsIHRoZSB0aWNrDQotICAgICAqIGludGVycnVwdCBoYW5kbGVyIGJlY2F1c2UgdGhlIGtlcm5lbCB3aWxsIHJ1biBvbiBsb3RzIG9mIGRpZmZlcmVudA0KLSAgICAgKiBNaWNyb0JsYXplIGFuZCBGUEdBIGNvbmZpZ3VyYXRpb25zIC0gbm90IGFsbCBvZgl3aGljaCB3aWxsIGhhdmUgdGhlIHNhbWUNCi0gICAgICogdGltZXIgcGVyaXBoZXJhbHMgZGVmaW5lZCBvciBhdmFpbGFibGUuICBBbiBleGFtcGxlIGRlZmluaXRpb24gb2YNCi0gICAgICogdkFwcGxpY2F0aW9uU2V0dXBUaW1lckludGVycnVwdCgpIGlzIHByb3ZpZGVkIGluIHRoZSBvZmZpY2lhbCBkZW1vDQotICAgICAqIGFwcGxpY2F0aW9uIHRoYXQgYWNjb21wYW5pZXMgdGhpcyBwb3J0LiAqLw0KLSAgICB2QXBwbGljYXRpb25TZXR1cFRpbWVySW50ZXJydXB0KCk7DQorCS8qIFNldHVwIHRoZSBoYXJkd2FyZSB0byBnZW5lcmF0ZSB0aGUgdGljay4gIEludGVycnVwdHMgYXJlIGRpc2FibGVkIHdoZW4NCisJdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuDQogDQotICAgIC8qIFJldXNlIHRoZSBzdGFjayBmcm9tIG1haW4oKSBhcyB0aGUgc3RhY2sgZm9yIHRoZSBpbnRlcnJ1cHRzL2V4Y2VwdGlvbnMuICovDQotICAgIHB1bElTUlN0YWNrID0gKCB1aW50MzJfdCAqICkgX3N0YWNrOw0KKwlUaGlzIHBvcnQgdXNlcyBhbiBhcHBsaWNhdGlvbiBkZWZpbmVkIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGluc3RhbGwgdGhlIHRpY2sNCisJaW50ZXJydXB0IGhhbmRsZXIgYmVjYXVzZSB0aGUga2VybmVsIHdpbGwgcnVuIG9uIGxvdHMgb2YgZGlmZmVyZW50DQorCU1pY3JvQmxhemUgYW5kIEZQR0EgY29uZmlndXJhdGlvbnMgLSBub3QgYWxsIG9mCXdoaWNoIHdpbGwgaGF2ZSB0aGUgc2FtZQ0KKwl0aW1lciBwZXJpcGhlcmFscyBkZWZpbmVkIG9yIGF2YWlsYWJsZS4gIEFuIGV4YW1wbGUgZGVmaW5pdGlvbiBvZg0KKwl2QXBwbGljYXRpb25TZXR1cFRpbWVySW50ZXJydXB0KCkgaXMgcHJvdmlkZWQgaW4gdGhlIG9mZmljaWFsIGRlbW8NCisJYXBwbGljYXRpb24gdGhhdCBhY2NvbXBhbmllcyB0aGlzIHBvcnQuICovDQorCXZBcHBsaWNhdGlvblNldHVwVGltZXJJbnRlcnJ1cHQoKTsNCiANCi0gICAgLyogRW5zdXJlIHRoZXJlIGlzIGVub3VnaCBzcGFjZSBmb3IgdGhlIGZ1bmN0aW9ucyBjYWxsZWQgZnJvbSB0aGUgaW50ZXJydXB0DQotICAgICAqIHNlcnZpY2Ugcm91dGluZXMgdG8gd3JpdGUgYmFjayBpbnRvIHRoZSBzdGFjayBmcmFtZSBvZiB0aGUgY2FsbGVyLiAqLw0KLSAgICBwdWxJU1JTdGFjayAtPSAyOw0KKwkvKiBSZXVzZSB0aGUgc3RhY2sgZnJvbSBtYWluKCkgYXMgdGhlIHN0YWNrIGZvciB0aGUgaW50ZXJydXB0cy9leGNlcHRpb25zLiAqLw0KKwlwdWxJU1JTdGFjayA9ICggdWludDMyX3QgKiApIF9zdGFjazsNCiANCi0gICAgLyogUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgZmlyc3QgdGFzayB0aGF0IGlzIGdvaW5nIHRvIHJ1bi4gIEZyb20gaGVyZQ0KLSAgICAgKiBvbiwgdGhlIGNyZWF0ZWQgdGFza3Mgd2lsbCBiZSBleGVjdXRpbmcuICovDQotICAgIHZQb3J0U3RhcnRGaXJzdFRhc2soKTsNCisJLyogRW5zdXJlIHRoZXJlIGlzIGVub3VnaCBzcGFjZSBmb3IgdGhlIGZ1bmN0aW9ucyBjYWxsZWQgZnJvbSB0aGUgaW50ZXJydXB0DQorCXNlcnZpY2Ugcm91dGluZXMgdG8gd3JpdGUgYmFjayBpbnRvIHRoZSBzdGFjayBmcmFtZSBvZiB0aGUgY2FsbGVyLiAqLw0KKwlwdWxJU1JTdGFjayAtPSAyOw0KIA0KLSAgICAvKiBTaG91bGQgbm90IGdldCBoZXJlIGFzIHRoZSB0YXNrcyBhcmUgbm93IHJ1bm5pbmchICovDQotICAgIHJldHVybiBwZEZBTFNFOw0KKwkvKiBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBmaXJzdCB0YXNrIHRoYXQgaXMgZ29pbmcgdG8gcnVuLiAgRnJvbSBoZXJlDQorCW9uLCB0aGUgY3JlYXRlZCB0YXNrcyB3aWxsIGJlIGV4ZWN1dGluZy4gKi8NCisJdlBvcnRTdGFydEZpcnN0VGFzaygpOw0KKw0KKwkvKiBTaG91bGQgbm90IGdldCBoZXJlIGFzIHRoZSB0YXNrcyBhcmUgbm93IHJ1bm5pbmchICovDQorCXJldHVybiBwZEZBTFNFOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0RW5kU2NoZWR1bGVyKCB2b2lkICkNCiB7DQotICAgIC8qIE5vdCBpbXBsZW1lbnRlZCBpbiBwb3J0cyB3aGVyZSB0aGVyZSBpcyBub3RoaW5nIHRvIHJldHVybiB0by4NCi0gICAgICogQXJ0aWZpY2lhbGx5IGZvcmNlIGFuIGFzc2VydC4gKi8NCi0gICAgY29uZmlnQVNTRVJUKCB1eENyaXRpY2FsTmVzdGluZyA9PSAxMDAwVUwgKTsNCisJLyogTm90IGltcGxlbWVudGVkIGluIHBvcnRzIHdoZXJlIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmV0dXJuIHRvLg0KKwlBcnRpZmljaWFsbHkgZm9yY2UgYW4gYXNzZXJ0LiAqLw0KKwljb25maWdBU1NFUlQoIHV4Q3JpdGljYWxOZXN0aW5nID09IDEwMDBVTCApOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCkBAIC0yODEsMTEzICsyNzksMTEwIEBACiAgKi8NCiB2b2lkIHZQb3J0WWllbGQoIHZvaWQgKQ0KIHsNCi0gICAgZXh0ZXJuIHZvaWQgVlBvcnRZaWVsZEFTTSggdm9pZCApOw0KK2V4dGVybiB2b2lkIFZQb3J0WWllbGRBU00oIHZvaWQgKTsNCiANCi0gICAgLyogUGVyZm9ybSB0aGUgY29udGV4dCBzd2l0Y2ggaW4gYSBjcml0aWNhbCBzZWN0aW9uIHRvIGFzc3VyZSBpdCBpcw0KLSAgICAgKiBub3QgaW50ZXJydXB0ZWQgYnkgdGhlIHRpY2sgSVNSLiAgSXQgaXMgbm90IGEgcHJvYmxlbSB0byBkbyB0aGlzIGFzDQotICAgICAqIGVhY2ggdGFzayBtYWludGFpbnMgaXRzIG93biBpbnRlcnJ1cHQgc3RhdHVzLiAqLw0KLSAgICBwb3J0RU5URVJfQ1JJVElDQUwoKTsNCi0gICAgew0KLSAgICAgICAgLyogSnVtcCBkaXJlY3RseSB0byB0aGUgeWllbGQgZnVuY3Rpb24gdG8gZW5zdXJlIHRoZXJlIGlzIG5vDQotICAgICAgICAgKiBjb21waWxlciBnZW5lcmF0ZWQgcHJvbG9ndWUgY29kZS4gKi8NCi0gICAgICAgIGFzbSB2b2xhdGlsZSAoICJicmFsaWQgcjE0LCBWUG9ydFlpZWxkQVNNCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgICAgICJvciByMCwgcjAsIHIwCQkJCQlcblx0Iik7DQotICAgIH0NCi0gICAgcG9ydEVYSVRfQ1JJVElDQUwoKTsNCisJLyogUGVyZm9ybSB0aGUgY29udGV4dCBzd2l0Y2ggaW4gYSBjcml0aWNhbCBzZWN0aW9uIHRvIGFzc3VyZSBpdCBpcw0KKwlub3QgaW50ZXJydXB0ZWQgYnkgdGhlIHRpY2sgSVNSLiAgSXQgaXMgbm90IGEgcHJvYmxlbSB0byBkbyB0aGlzIGFzDQorCWVhY2ggdGFzayBtYWludGFpbnMgaXRzIG93biBpbnRlcnJ1cHQgc3RhdHVzLiAqLw0KKwlwb3J0RU5URVJfQ1JJVElDQUwoKTsNCisJew0KKwkJLyogSnVtcCBkaXJlY3RseSB0byB0aGUgeWllbGQgZnVuY3Rpb24gdG8gZW5zdXJlIHRoZXJlIGlzIG5vDQorCQljb21waWxlciBnZW5lcmF0ZWQgcHJvbG9ndWUgY29kZS4gKi8NCisJCWFzbSB2b2xhdGlsZSAoCSJicmFsaWQgcjE0LCBWUG9ydFlpZWxkQVNNCQlcblx0IiBcDQorCQkJCQkJIm9yIHIwLCByMCwgcjAJCQkJCVxuXHQiICk7DQorCX0NCisJcG9ydEVYSVRfQ1JJVElDQUwoKTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogdm9pZCB2UG9ydEVuYWJsZUludGVycnVwdCggdWludDhfdCB1Y0ludGVycnVwdElEICkNCiB7DQotICAgIGludDMyX3QgbFJldHVybjsNCitpbnQzMl90IGxSZXR1cm47DQogDQotICAgIC8qIEFuIEFQSSBmdW5jdGlvbiBpcyBwcm92aWRlZCB0byBlbmFibGUgYW4gaW50ZXJydXB0IGluIHRoZSBpbnRlcnJ1cHQNCi0gICAgICogY29udHJvbGxlciBiZWNhdXNlIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciBpbnN0YW5jZSB2YXJpYWJsZSBpcyBwcml2YXRlDQotICAgICAqIHRvIHRoaXMgZmlsZS4gKi8NCi0gICAgbFJldHVybiA9IHBydkVuc3VyZUludGVycnVwdENvbnRyb2xsZXJJc0luaXRpYWxpc2VkKCk7DQorCS8qIEFuIEFQSSBmdW5jdGlvbiBpcyBwcm92aWRlZCB0byBlbmFibGUgYW4gaW50ZXJydXB0IGluIHRoZSBpbnRlcnJ1cHQNCisJY29udHJvbGxlciBiZWNhdXNlIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciBpbnN0YW5jZSB2YXJpYWJsZSBpcyBwcml2YXRlDQorCXRvIHRoaXMgZmlsZS4gKi8NCisJbFJldHVybiA9IHBydkVuc3VyZUludGVycnVwdENvbnRyb2xsZXJJc0luaXRpYWxpc2VkKCk7DQorCWlmKCBsUmV0dXJuID09IHBkUEFTUyApDQorCXsNCisJCS8qIENyaXRpY2FsIHNlY3Rpb24gcHJvdGVjdHMgcmVhZC9tb2RpZnkvd3JpdGVyIG9wZXJhdGlvbiBpbnNpZGUNCisJCVhJbnRjX0VuYWJsZSgpLiAqLw0KKwkJcG9ydEVOVEVSX0NSSVRJQ0FMKCk7DQorCQl7DQorCQkJWEludGNfRW5hYmxlKCAmeEludGVycnVwdENvbnRyb2xsZXJJbnN0YW5jZSwgdWNJbnRlcnJ1cHRJRCApOw0KKwkJfQ0KKwkJcG9ydEVYSVRfQ1JJVElDQUwoKTsNCisJfQ0KIA0KLSAgICBpZiggbFJldHVybiA9PSBwZFBBU1MgKQ0KLSAgICB7DQotICAgICAgICAvKiBDcml0aWNhbCBzZWN0aW9uIHByb3RlY3RzIHJlYWQvbW9kaWZ5L3dyaXRlciBvcGVyYXRpb24gaW5zaWRlDQotICAgICAgICAgKiBYSW50Y19FbmFibGUoKS4gKi8NCi0gICAgICAgIHBvcnRFTlRFUl9DUklUSUNBTCgpOw0KLSAgICAgICAgew0KLSAgICAgICAgICAgIFhJbnRjX0VuYWJsZSggJnhJbnRlcnJ1cHRDb250cm9sbGVySW5zdGFuY2UsIHVjSW50ZXJydXB0SUQgKTsNCi0gICAgICAgIH0NCi0gICAgICAgIHBvcnRFWElUX0NSSVRJQ0FMKCk7DQotICAgIH0NCi0NCi0gICAgY29uZmlnQVNTRVJUKCBsUmV0dXJuICk7DQorCWNvbmZpZ0FTU0VSVCggbFJldHVybiApOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0RGlzYWJsZUludGVycnVwdCggdWludDhfdCB1Y0ludGVycnVwdElEICkNCiB7DQotICAgIGludDMyX3QgbFJldHVybjsNCitpbnQzMl90IGxSZXR1cm47DQogDQotICAgIC8qIEFuIEFQSSBmdW5jdGlvbiBpcyBwcm92aWRlZCB0byBkaXNhYmxlIGFuIGludGVycnVwdCBpbiB0aGUgaW50ZXJydXB0DQotICAgICAqIGNvbnRyb2xsZXIgYmVjYXVzZSB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIgaW5zdGFuY2UgdmFyaWFibGUgaXMgcHJpdmF0ZQ0KLSAgICAgKiB0byB0aGlzIGZpbGUuICovDQotICAgIGxSZXR1cm4gPSBwcnZFbnN1cmVJbnRlcnJ1cHRDb250cm9sbGVySXNJbml0aWFsaXNlZCgpOw0KKwkvKiBBbiBBUEkgZnVuY3Rpb24gaXMgcHJvdmlkZWQgdG8gZGlzYWJsZSBhbiBpbnRlcnJ1cHQgaW4gdGhlIGludGVycnVwdA0KKwljb250cm9sbGVyIGJlY2F1c2UgdGhlIGludGVycnVwdCBjb250cm9sbGVyIGluc3RhbmNlIHZhcmlhYmxlIGlzIHByaXZhdGUNCisJdG8gdGhpcyBmaWxlLiAqLw0KKwlsUmV0dXJuID0gcHJ2RW5zdXJlSW50ZXJydXB0Q29udHJvbGxlcklzSW5pdGlhbGlzZWQoKTsNCiANCi0gICAgaWYoIGxSZXR1cm4gPT0gcGRQQVNTICkNCi0gICAgew0KLSAgICAgICAgWEludGNfRGlzYWJsZSggJnhJbnRlcnJ1cHRDb250cm9sbGVySW5zdGFuY2UsIHVjSW50ZXJydXB0SUQgKTsNCi0gICAgfQ0KKwlpZiggbFJldHVybiA9PSBwZFBBU1MgKQ0KKwl7DQorCQlYSW50Y19EaXNhYmxlKCAmeEludGVycnVwdENvbnRyb2xsZXJJbnN0YW5jZSwgdWNJbnRlcnJ1cHRJRCApOw0KKwl9DQogDQotICAgIGNvbmZpZ0FTU0VSVCggbFJldHVybiApOw0KKwljb25maWdBU1NFUlQoIGxSZXR1cm4gKTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQotQmFzZVR5cGVfdCB4UG9ydEluc3RhbGxJbnRlcnJ1cHRIYW5kbGVyKCB1aW50OF90IHVjSW50ZXJydXB0SUQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYSW50ZXJydXB0SGFuZGxlciBweEhhbmRsZXIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICogcHZDYWxsQmFja1JlZiApDQorQmFzZVR5cGVfdCB4UG9ydEluc3RhbGxJbnRlcnJ1cHRIYW5kbGVyKCB1aW50OF90IHVjSW50ZXJydXB0SUQsIFhJbnRlcnJ1cHRIYW5kbGVyIHB4SGFuZGxlciwgdm9pZCAqcHZDYWxsQmFja1JlZiApDQogew0KLSAgICBpbnQzMl90IGxSZXR1cm47DQoraW50MzJfdCBsUmV0dXJuOw0KIA0KLSAgICAvKiBBbiBBUEkgZnVuY3Rpb24gaXMgcHJvdmlkZWQgdG8gaW5zdGFsbCBhbiBpbnRlcnJ1cHQgaGFuZGxlciBiZWNhdXNlIHRoZQ0KLSAgICAgKiBpbnRlcnJ1cHQgY29udHJvbGxlciBpbnN0YW5jZSB2YXJpYWJsZSBpcyBwcml2YXRlIHRvIHRoaXMgZmlsZS4gKi8NCisJLyogQW4gQVBJIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIHRvIGluc3RhbGwgYW4gaW50ZXJydXB0IGhhbmRsZXIgYmVjYXVzZSB0aGUNCisJaW50ZXJydXB0IGNvbnRyb2xsZXIgaW5zdGFuY2UgdmFyaWFibGUgaXMgcHJpdmF0ZSB0byB0aGlzIGZpbGUuICovDQogDQotICAgIGxSZXR1cm4gPSBwcnZFbnN1cmVJbnRlcnJ1cHRDb250cm9sbGVySXNJbml0aWFsaXNlZCgpOw0KKwlsUmV0dXJuID0gcHJ2RW5zdXJlSW50ZXJydXB0Q29udHJvbGxlcklzSW5pdGlhbGlzZWQoKTsNCiANCi0gICAgaWYoIGxSZXR1cm4gPT0gcGRQQVNTICkNCi0gICAgew0KLSAgICAgICAgbFJldHVybiA9IFhJbnRjX0Nvbm5lY3QoICZ4SW50ZXJydXB0Q29udHJvbGxlckluc3RhbmNlLCB1Y0ludGVycnVwdElELCBweEhhbmRsZXIsIHB2Q2FsbEJhY2tSZWYgKTsNCi0gICAgfQ0KKwlpZiggbFJldHVybiA9PSBwZFBBU1MgKQ0KKwl7DQorCQlsUmV0dXJuID0gWEludGNfQ29ubmVjdCggJnhJbnRlcnJ1cHRDb250cm9sbGVySW5zdGFuY2UsIHVjSW50ZXJydXB0SUQsIHB4SGFuZGxlciwgcHZDYWxsQmFja1JlZiApOw0KKwl9DQogDQotICAgIGlmKCBsUmV0dXJuID09IFhTVF9TVUNDRVNTICkNCi0gICAgew0KLSAgICAgICAgbFJldHVybiA9IHBkUEFTUzsNCi0gICAgfQ0KKwlpZiggbFJldHVybiA9PSBYU1RfU1VDQ0VTUyApDQorCXsNCisJCWxSZXR1cm4gPSBwZFBBU1M7DQorCX0NCiANCi0gICAgY29uZmlnQVNTRVJUKCBsUmV0dXJuID09IHBkUEFTUyApOw0KKwljb25maWdBU1NFUlQoIGxSZXR1cm4gPT0gcGRQQVNTICk7DQogDQotICAgIHJldHVybiBsUmV0dXJuOw0KKwlyZXR1cm4gbFJldHVybjsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogc3RhdGljIGludDMyX3QgcHJ2RW5zdXJlSW50ZXJydXB0Q29udHJvbGxlcklzSW5pdGlhbGlzZWQoIHZvaWQgKQ0KIHsNCi0gICAgc3RhdGljIGludDMyX3QgbEludGVycnVwdENvbnRyb2xsZXJJbml0aWFsaXNlZCA9IHBkRkFMU0U7DQotICAgIGludDMyX3QgbFJldHVybjsNCitzdGF0aWMgaW50MzJfdCBsSW50ZXJydXB0Q29udHJvbGxlckluaXRpYWxpc2VkID0gcGRGQUxTRTsNCitpbnQzMl90IGxSZXR1cm47DQogDQotICAgIC8qIEVuc3VyZSB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIgaW5zdGFuY2UgdmFyaWFibGUgaXMgaW5pdGlhbGlzZWQgYmVmb3JlDQotICAgICAqIGl0IGlzIHVzZWQsIGFuZCB0aGF0IHRoZSBpbml0aWFsaXNhdGlvbiBvbmx5IGhhcHBlbnMgb25jZS4gKi8NCi0gICAgaWYoIGxJbnRlcnJ1cHRDb250cm9sbGVySW5pdGlhbGlzZWQgIT0gcGRUUlVFICkNCi0gICAgew0KLSAgICAgICAgbFJldHVybiA9IHBydkluaXRpYWxpc2VJbnRlcnJ1cHRDb250cm9sbGVyKCk7DQorCS8qIEVuc3VyZSB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIgaW5zdGFuY2UgdmFyaWFibGUgaXMgaW5pdGlhbGlzZWQgYmVmb3JlDQorCWl0IGlzIHVzZWQsIGFuZCB0aGF0IHRoZSBpbml0aWFsaXNhdGlvbiBvbmx5IGhhcHBlbnMgb25jZS4gKi8NCisJaWYoIGxJbnRlcnJ1cHRDb250cm9sbGVySW5pdGlhbGlzZWQgIT0gcGRUUlVFICkNCisJew0KKwkJbFJldHVybiA9IHBydkluaXRpYWxpc2VJbnRlcnJ1cHRDb250cm9sbGVyKCk7DQogDQotICAgICAgICBpZiggbFJldHVybiA9PSBwZFBBU1MgKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGxJbnRlcnJ1cHRDb250cm9sbGVySW5pdGlhbGlzZWQgPSBwZFRSVUU7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgZWxzZQ0KLSAgICB7DQotICAgICAgICBsUmV0dXJuID0gcGRQQVNTOw0KLSAgICB9DQorCQlpZiggbFJldHVybiA9PSBwZFBBU1MgKQ0KKwkJew0KKwkJCWxJbnRlcnJ1cHRDb250cm9sbGVySW5pdGlhbGlzZWQgPSBwZFRSVUU7DQorCQl9DQorCX0NCisJZWxzZQ0KKwl7DQorCQlsUmV0dXJuID0gcGRQQVNTOw0KKwl9DQogDQotICAgIHJldHVybiBsUmV0dXJuOw0KKwlyZXR1cm4gbFJldHVybjsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQpAQCAtMzk1LDY5ICszOTAsNzEgQEAKICAqIEhhbmRsZXIgZm9yIHRoZSB0aW1lciBpbnRlcnJ1cHQuICBUaGlzIGlzIHRoZSBoYW5kbGVyIHRoYXQgdGhlIGFwcGxpY2F0aW9uDQogICogZGVmaW5lZCBjYWxsYmFjayBmdW5jdGlvbiB2QXBwbGljYXRpb25TZXR1cFRpbWVySW50ZXJydXB0KCkgc2hvdWxkIGluc3RhbGwuDQogICovDQotdm9pZCB2UG9ydFRpY2tJU1IoIHZvaWQgKiBwdlVudXNlZCApDQordm9pZCB2UG9ydFRpY2tJU1IoIHZvaWQgKnB2VW51c2VkICkNCiB7DQotICAgIGV4dGVybiB2b2lkIHZBcHBsaWNhdGlvbkNsZWFyVGltZXJJbnRlcnJ1cHQoIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2QXBwbGljYXRpb25DbGVhclRpbWVySW50ZXJydXB0KCB2b2lkICk7DQogDQotICAgIC8qIEVuc3VyZSB0aGUgdW51c2VkIHBhcmFtZXRlciBkb2VzIG5vdCBnZW5lcmF0ZSBhIGNvbXBpbGVyIHdhcm5pbmcuICovDQotICAgICggdm9pZCApIHB2VW51c2VkOw0KKwkvKiBFbnN1cmUgdGhlIHVudXNlZCBwYXJhbWV0ZXIgZG9lcyBub3QgZ2VuZXJhdGUgYSBjb21waWxlciB3YXJuaW5nLiAqLw0KKwkoIHZvaWQgKSBwdlVudXNlZDsNCiANCi0gICAgLyogVGhpcyBwb3J0IHVzZXMgYW4gYXBwbGljYXRpb24gZGVmaW5lZCBjYWxsYmFjayBmdW5jdGlvbiB0byBjbGVhciB0aGUgdGljaw0KLSAgICAgKiBpbnRlcnJ1cHQgYmVjYXVzZSB0aGUga2VybmVsIHdpbGwgcnVuIG9uIGxvdHMgb2YgZGlmZmVyZW50IE1pY3JvQmxhemUgYW5kDQotICAgICAqIEZQR0EgY29uZmlndXJhdGlvbnMgLSBub3QgYWxsIG9mIHdoaWNoIHdpbGwgaGF2ZSB0aGUgc2FtZSB0aW1lciBwZXJpcGhlcmFscw0KLSAgICAgKiBkZWZpbmVkIG9yIGF2YWlsYWJsZS4gIEFuIGV4YW1wbGUgZGVmaW5pdGlvbiBvZg0KLSAgICAgKiB2QXBwbGljYXRpb25DbGVhclRpbWVySW50ZXJydXB0KCkgaXMgcHJvdmlkZWQgaW4gdGhlIG9mZmljaWFsIGRlbW8NCi0gICAgICogYXBwbGljYXRpb24gdGhhdCBhY2NvbXBhbmllcyB0aGlzIHBvcnQuICovDQotICAgIHZBcHBsaWNhdGlvbkNsZWFyVGltZXJJbnRlcnJ1cHQoKTsNCisJLyogVGhpcyBwb3J0IHVzZXMgYW4gYXBwbGljYXRpb24gZGVmaW5lZCBjYWxsYmFjayBmdW5jdGlvbiB0byBjbGVhciB0aGUgdGljaw0KKwlpbnRlcnJ1cHQgYmVjYXVzZSB0aGUga2VybmVsIHdpbGwgcnVuIG9uIGxvdHMgb2YgZGlmZmVyZW50IE1pY3JvQmxhemUgYW5kDQorCUZQR0EgY29uZmlndXJhdGlvbnMgLSBub3QgYWxsIG9mIHdoaWNoIHdpbGwgaGF2ZSB0aGUgc2FtZSB0aW1lciBwZXJpcGhlcmFscw0KKwlkZWZpbmVkIG9yIGF2YWlsYWJsZS4gIEFuIGV4YW1wbGUgZGVmaW5pdGlvbiBvZg0KKwl2QXBwbGljYXRpb25DbGVhclRpbWVySW50ZXJydXB0KCkgaXMgcHJvdmlkZWQgaW4gdGhlIG9mZmljaWFsIGRlbW8NCisJYXBwbGljYXRpb24gdGhhdCBhY2NvbXBhbmllcyB0aGlzIHBvcnQuICovDQorCXZBcHBsaWNhdGlvbkNsZWFyVGltZXJJbnRlcnJ1cHQoKTsNCiANCi0gICAgLyogSW5jcmVtZW50IHRoZSBSVE9TIHRpY2sgLSB0aGlzIG1pZ2h0IGNhdXNlIGEgdGFzayB0byB1bmJsb2NrLiAqLw0KLSAgICBpZiggeFRhc2tJbmNyZW1lbnRUaWNrKCkgIT0gcGRGQUxTRSApDQotICAgIHsNCi0gICAgICAgIC8qIEZvcmNlIHZUYXNrU3dpdGNoQ29udGV4dCgpIHRvIGJlIGNhbGxlZCBhcyB0aGUgaW50ZXJydXB0IGV4aXRzLiAqLw0KLSAgICAgICAgdWxUYXNrU3dpdGNoUmVxdWVzdGVkID0gMTsNCi0gICAgfQ0KKwkvKiBJbmNyZW1lbnQgdGhlIFJUT1MgdGljayAtIHRoaXMgbWlnaHQgY2F1c2UgYSB0YXNrIHRvIHVuYmxvY2suICovDQorCWlmKCB4VGFza0luY3JlbWVudFRpY2soKSAhPSBwZEZBTFNFICkNCisJew0KKwkJLyogRm9yY2UgdlRhc2tTd2l0Y2hDb250ZXh0KCkgdG8gYmUgY2FsbGVkIGFzIHRoZSBpbnRlcnJ1cHQgZXhpdHMuICovDQorCQl1bFRhc2tTd2l0Y2hSZXF1ZXN0ZWQgPSAxOw0KKwl9DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHN0YXRpYyBpbnQzMl90IHBydkluaXRpYWxpc2VJbnRlcnJ1cHRDb250cm9sbGVyKCB2b2lkICkNCiB7DQotICAgIGludDMyX3QgbFN0YXR1czsNCitpbnQzMl90IGxTdGF0dXM7DQogDQotICAgIGxTdGF0dXMgPSBYSW50Y19Jbml0aWFsaXplKCAmeEludGVycnVwdENvbnRyb2xsZXJJbnN0YW5jZSwgY29uZmlnSU5URVJSVVBUX0NPTlRST0xMRVJfVE9fVVNFICk7DQorCWxTdGF0dXMgPSBYSW50Y19Jbml0aWFsaXplKCAmeEludGVycnVwdENvbnRyb2xsZXJJbnN0YW5jZSwgY29uZmlnSU5URVJSVVBUX0NPTlRST0xMRVJfVE9fVVNFICk7DQogDQotICAgIGlmKCBsU3RhdHVzID09IFhTVF9TVUNDRVNTICkNCi0gICAgew0KLSAgICAgICAgLyogSW5pdGlhbGlzZSB0aGUgZXhjZXB0aW9uIHRhYmxlLiAqLw0KLSAgICAgICAgWGlsX0V4Y2VwdGlvbkluaXQoKTsNCisJaWYoIGxTdGF0dXMgPT0gWFNUX1NVQ0NFU1MgKQ0KKwl7DQorCQkvKiBJbml0aWFsaXNlIHRoZSBleGNlcHRpb24gdGFibGUuICovDQorCQlYaWxfRXhjZXB0aW9uSW5pdCgpOw0KIA0KLSAgICAgICAgLyogU2VydmljZSBhbGwgcGVuZGluZyBpbnRlcnJ1cHRzIGVhY2ggdGltZSB0aGUgaGFuZGxlciBpcyBlbnRlcmVkLiAqLw0KLSAgICAgICAgWEludGNfU2V0SW50clN2Y09wdGlvbiggeEludGVycnVwdENvbnRyb2xsZXJJbnN0YW5jZS5CYXNlQWRkcmVzcywgWElOX1NWQ19BTExfSVNSU19PUFRJT04gKTsNCisJICAgIC8qIFNlcnZpY2UgYWxsIHBlbmRpbmcgaW50ZXJydXB0cyBlYWNoIHRpbWUgdGhlIGhhbmRsZXIgaXMgZW50ZXJlZC4gKi8NCisJICAgIFhJbnRjX1NldEludHJTdmNPcHRpb24oIHhJbnRlcnJ1cHRDb250cm9sbGVySW5zdGFuY2UuQmFzZUFkZHJlc3MsIFhJTl9TVkNfQUxMX0lTUlNfT1BUSU9OICk7DQogDQotICAgICAgICAvKiBJbnN0YWxsIGV4Y2VwdGlvbiBoYW5kbGVycyBpZiB0aGUgTWljcm9CbGF6ZSBpcyBjb25maWd1cmVkIHRvIGhhbmRsZQ0KLSAgICAgICAgICogZXhjZXB0aW9ucywgYW5kIHRoZSBhcHBsaWNhdGlvbiBkZWZpbmVkIGNvbnN0YW50DQotICAgICAgICAgKiBjb25maWdJTlNUQUxMX0VYQ0VQVElPTl9IQU5ETEVSUyBpcyBzZXQgdG8gMS4gKi8NCi0gICAgICAgICNpZiAoIE1JQ1JPQkxBWkVfRVhDRVBUSU9OU19FTkFCTEVEID09IDEgKSAmJiAoIGNvbmZpZ0lOU1RBTExfRVhDRVBUSU9OX0hBTkRMRVJTID09IDEgKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgdlBvcnRFeGNlcHRpb25zSW5zdGFsbEhhbmRsZXJzKCk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgI2VuZGlmIC8qIE1JQ1JPQkxBWkVfRVhDRVBUSU9OU19FTkFCTEVEICovDQorCSAgICAvKiBJbnN0YWxsIGV4Y2VwdGlvbiBoYW5kbGVycyBpZiB0aGUgTWljcm9CbGF6ZSBpcyBjb25maWd1cmVkIHRvIGhhbmRsZQ0KKwkgICAgZXhjZXB0aW9ucywgYW5kIHRoZSBhcHBsaWNhdGlvbiBkZWZpbmVkIGNvbnN0YW50DQorCSAgICBjb25maWdJTlNUQUxMX0VYQ0VQVElPTl9IQU5ETEVSUyBpcyBzZXQgdG8gMS4gKi8NCisJCSNpZiAoIE1JQ1JPQkxBWkVfRVhDRVBUSU9OU19FTkFCTEVEID09IDEgKSAmJiAoIGNvbmZpZ0lOU1RBTExfRVhDRVBUSU9OX0hBTkRMRVJTID09IDEgKQ0KKwkgICAgew0KKwkgICAgCXZQb3J0RXhjZXB0aW9uc0luc3RhbGxIYW5kbGVycygpOw0KKwkgICAgfQ0KKwkJI2VuZGlmIC8qIE1JQ1JPQkxBWkVfRVhDRVBUSU9OU19FTkFCTEVEICovDQogDQotICAgICAgICAvKiBTdGFydCB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIuICBJbnRlcnJ1cHRzIGFyZSBlbmFibGVkIHdoZW4gdGhlDQotICAgICAgICAgKiBzY2hlZHVsZXIgc3RhcnRzLiAqLw0KLSAgICAgICAgbFN0YXR1cyA9IFhJbnRjX1N0YXJ0KCAmeEludGVycnVwdENvbnRyb2xsZXJJbnN0YW5jZSwgWElOX1JFQUxfTU9ERSApOw0KKwkJLyogU3RhcnQgdGhlIGludGVycnVwdCBjb250cm9sbGVyLiAgSW50ZXJydXB0cyBhcmUgZW5hYmxlZCB3aGVuIHRoZQ0KKwkJc2NoZWR1bGVyIHN0YXJ0cy4gKi8NCisJCWxTdGF0dXMgPSBYSW50Y19TdGFydCggJnhJbnRlcnJ1cHRDb250cm9sbGVySW5zdGFuY2UsIFhJTl9SRUFMX01PREUgKTsNCiANCi0gICAgICAgIGlmKCBsU3RhdHVzID09IFhTVF9TVUNDRVNTICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBsU3RhdHVzID0gcGRQQVNTOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZWxzZQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGxTdGF0dXMgPSBwZEZBSUw7DQotICAgICAgICB9DQotICAgIH0NCisJCWlmKCBsU3RhdHVzID09IFhTVF9TVUNDRVNTICkNCisJCXsNCisJCQlsU3RhdHVzID0gcGRQQVNTOw0KKwkJfQ0KKwkJZWxzZQ0KKwkJew0KKwkJCWxTdGF0dXMgPSBwZEZBSUw7DQorCQl9DQorCX0NCiANCi0gICAgY29uZmlnQVNTRVJUKCBsU3RhdHVzID09IHBkUEFTUyApOw0KKwljb25maWdBU1NFUlQoIGxTdGF0dXMgPT0gcGRQQVNTICk7DQogDQotICAgIHJldHVybiBsU3RhdHVzOw0KKwlyZXR1cm4gbFN0YXR1czsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvR0NDL01pY3JvQmxhemVWOS9wb3J0X2V4Y2VwdGlvbnMuYyBiL3BvcnRhYmxlL0dDQy9NaWNyb0JsYXplVjkvcG9ydF9leGNlcHRpb25zLmMKaW5kZXggNmQ3OThjYy4uY2EyYTFhYyAxMDA2NDQKLS0tIGEvcG9ydGFibGUvR0NDL01pY3JvQmxhemVWOS9wb3J0X2V4Y2VwdGlvbnMuYworKysgYi9wb3J0YWJsZS9HQ0MvTWljcm9CbGF6ZVY5L3BvcnRfZXhjZXB0aW9ucy5jCkBAIC0zNCwyNDQgKzM0LDI0OSBAQAogI2luY2x1ZGUgPG1pY3JvYmxhemVfZXhjZXB0aW9uc19nLmg+DQogDQogLyogVGhlIFhpbGlueCBsaWJyYXJ5IGRlZmluZWQgZXhjZXB0aW9uIGVudHJ5IHBvaW50IHN0YWNrcyBhIG51bWJlciBvZg0KLSAqIHJlZ2lzdGVycy4gIFRoZXNlIGRlZmluaXRpb25zIGFyZSBvZmZzZXRzIGZyb20gdGhlIHN0YWNrIHBvaW50ZXIgdG8gdGhlIHZhcmlvdXMNCi0gKiBzdGFja2VkIHJlZ2lzdGVyIHZhbHVlcy4gKi8NCi0jZGVmaW5lIHBvcnRleFIzX1NUQUNLX09GRlNFVCAgICAgICAgICAgICAgICAgNA0KLSNkZWZpbmUgcG9ydGV4UjRfU1RBQ0tfT0ZGU0VUICAgICAgICAgICAgICAgICA1DQotI2RlZmluZSBwb3J0ZXhSNV9TVEFDS19PRkZTRVQgICAgICAgICAgICAgICAgIDYNCi0jZGVmaW5lIHBvcnRleFI2X1NUQUNLX09GRlNFVCAgICAgICAgICAgICAgICAgNw0KLSNkZWZpbmUgcG9ydGV4UjdfU1RBQ0tfT0ZGU0VUICAgICAgICAgICAgICAgICA4DQotI2RlZmluZSBwb3J0ZXhSOF9TVEFDS19PRkZTRVQgICAgICAgICAgICAgICAgIDkNCi0jZGVmaW5lIHBvcnRleFI5X1NUQUNLX09GRlNFVCAgICAgICAgICAgICAgICAgMTANCi0jZGVmaW5lIHBvcnRleFIxMF9TVEFDS19PRkZTRVQgICAgICAgICAgICAgICAgMTENCi0jZGVmaW5lIHBvcnRleFIxMV9TVEFDS19PRkZTRVQgICAgICAgICAgICAgICAgMTINCi0jZGVmaW5lIHBvcnRleFIxMl9TVEFDS19PRkZTRVQgICAgICAgICAgICAgICAgMTMNCi0jZGVmaW5lIHBvcnRleFIxNV9TVEFDS19PRkZTRVQgICAgICAgICAgICAgICAgMTYNCi0jZGVmaW5lIHBvcnRleFIxOF9TVEFDS19PRkZTRVQgICAgICAgICAgICAgICAgMTkNCi0jZGVmaW5lIHBvcnRleE1TUl9TVEFDS19PRkZTRVQgICAgICAgICAgICAgICAgMjANCi0jZGVmaW5lIHBvcnRleFIxOV9TVEFDS19PRkZTRVQgICAgICAgICAgICAgICAgLTENCityZWdpc3RlcnMuICBUaGVzZSBkZWZpbml0aW9ucyBhcmUgb2Zmc2V0cyBmcm9tIHRoZSBzdGFjayBwb2ludGVyIHRvIHRoZSB2YXJpb3VzDQorc3RhY2tlZCByZWdpc3RlciB2YWx1ZXMuICovDQorI2RlZmluZSBwb3J0ZXhSM19TVEFDS19PRkZTRVQJNA0KKyNkZWZpbmUgcG9ydGV4UjRfU1RBQ0tfT0ZGU0VUCTUNCisjZGVmaW5lIHBvcnRleFI1X1NUQUNLX09GRlNFVAk2DQorI2RlZmluZSBwb3J0ZXhSNl9TVEFDS19PRkZTRVQJNw0KKyNkZWZpbmUgcG9ydGV4UjdfU1RBQ0tfT0ZGU0VUCTgNCisjZGVmaW5lIHBvcnRleFI4X1NUQUNLX09GRlNFVAk5DQorI2RlZmluZSBwb3J0ZXhSOV9TVEFDS19PRkZTRVQJMTANCisjZGVmaW5lIHBvcnRleFIxMF9TVEFDS19PRkZTRVQJMTENCisjZGVmaW5lIHBvcnRleFIxMV9TVEFDS19PRkZTRVQJMTINCisjZGVmaW5lIHBvcnRleFIxMl9TVEFDS19PRkZTRVQJMTMNCisjZGVmaW5lIHBvcnRleFIxNV9TVEFDS19PRkZTRVQJMTYNCisjZGVmaW5lIHBvcnRleFIxOF9TVEFDS19PRkZTRVQgIDE5DQorI2RlZmluZSBwb3J0ZXhNU1JfU1RBQ0tfT0ZGU0VUCTIwDQorI2RlZmluZSBwb3J0ZXhSMTlfU1RBQ0tfT0ZGU0VUICAtMQ0KIA0KIC8qIFRoaXMgaXMgZGVmaW5lZCB0byBlcXVhbCB0aGUgc2l6ZSwgaW4gYnl0ZXMsIG9mIHRoZSBzdGFjayBmcmFtZSBnZW5lcmF0ZWQgYnkNCi0gKiB0aGUgWGlsaW54IHN0YW5kYXJkIGxpYnJhcnkgZXhjZXB0aW9uIGVudHJ5IHBvaW50LiAgSXQgaXMgcmVxdWlyZWQgdG8gZGV0ZXJtaW5lDQotICogdGhlIHN0YWNrIHBvaW50ZXIgdmFsdWUgcHJpb3IgdG8gdGhlIGV4Y2VwdGlvbiBiZWluZyBlbnRlcmVkLiAqLw0KLSNkZWZpbmUgcG9ydGV4QVNNX0hBTkRMRVJfU1RBQ0tfRlJBTUVfU0laRSAgICA4NFVMDQordGhlIFhpbGlueCBzdGFuZGFyZCBsaWJyYXJ5IGV4Y2VwdGlvbiBlbnRyeSBwb2ludC4gIEl0IGlzIHJlcXVpcmVkIHRvIGRldGVybWluZQ0KK3RoZSBzdGFjayBwb2ludGVyIHZhbHVlIHByaW9yIHRvIHRoZSBleGNlcHRpb24gYmVpbmcgZW50ZXJlZC4gKi8NCisjZGVmaW5lIHBvcnRleEFTTV9IQU5ETEVSX1NUQUNLX0ZSQU1FX1NJWkUgODRVTA0KIA0KIC8qIFRoZSBudW1iZXIgb2YgYnl0ZXMgYSBNaWNyb0JsYXplIGluc3RydWN0aW9uIGNvbnN1bWVzLiAqLw0KLSNkZWZpbmUgcG9ydGV4SU5TVFJVQ1RJT05fU0laRSAgICAgICAgICAgICAgICA0DQorI2RlZmluZSBwb3J0ZXhJTlNUUlVDVElPTl9TSVpFCTQNCiANCiAvKiBFeGNsdWRlIHRoaXMgZW50aXJlIGZpbGUgaWYgdGhlIE1pY3JvQmxhemUgaXMgbm90IGNvbmZpZ3VyZWQgdG8gaGFuZGxlDQotICogZXhjZXB0aW9ucywgb3IgdGhlIGFwcGxpY2F0aW9uIGRlZmluZWQgY29uZmlndXJhdGlvbiBjb25zdGFudA0KLSAqIGNvbmZpZ0lOU1RBTExfRVhDRVBUSU9OX0hBTkRMRVJTIGlzIG5vdCBzZXQgdG8gMS4gKi8NCitleGNlcHRpb25zLCBvciB0aGUgYXBwbGljYXRpb24gZGVmaW5lZCBjb25maWd1cmF0aW9uIGNvbnN0YW50DQorY29uZmlnSU5TVEFMTF9FWENFUFRJT05fSEFORExFUlMgaXMgbm90IHNldCB0byAxLiAqLw0KICNpZiAoIE1JQ1JPQkxBWkVfRVhDRVBUSU9OU19FTkFCTEVEID09IDEgKSAmJiAoIGNvbmZpZ0lOU1RBTExfRVhDRVBUSU9OX0hBTkRMRVJTID09IDEgKQ0KIA0KIC8qIFRoaXMgdmFyaWFibGUgaXMgc2V0IGluIHRoZSBleGNlcHRpb24gZW50cnkgY29kZSwgYmVmb3JlDQotICogdlBvcnRFeGNlcHRpb25IYW5kbGVyIGlzIGNhbGxlZC4gKi8NCi0gICAgdWludDMyX3QgKiBwdWxTdGFja1BvaW50ZXJPbkZ1bmN0aW9uRW50cnkgPSBOVUxMOw0KK3ZQb3J0RXhjZXB0aW9uSGFuZGxlciBpcyBjYWxsZWQuICovDQordWludDMyX3QgKnB1bFN0YWNrUG9pbnRlck9uRnVuY3Rpb25FbnRyeSA9IE5VTEw7DQogDQogLyogVGhpcyBpcyB0aGUgc3RydWN0dXJlIHRoYXQgaXMgZmlsbGVkIHdpdGggdGhlIE1pY3JvQmxhemUgY29udGV4dCBhcyBpdA0KLSAqIGV4aXN0ZWQgaW1tZWRpYXRlbHkgcHJpb3IgdG8gdGhlIGV4Y2VwdGlvbiBvY2N1cnJlbmNlLiAgQSBwb2ludGVyIHRvIHRoaXMNCi0gKiBzdHJ1Y3R1cmUgaXMgcGFzc2VkIGludG8gdGhlIHZBcHBsaWNhdGlvbkV4Y2VwdGlvblJlZ2lzdGVyRHVtcCgpIGNhbGxiYWNrDQotICogZnVuY3Rpb24sIGlmIG9uZSBpcyBkZWZpbmVkLiAqLw0KLSAgICBzdGF0aWMgeFBvcnRSZWdpc3RlckR1bXAgeFJlZ2lzdGVyRHVtcDsNCitleGlzdGVkIGltbWVkaWF0ZWx5IHByaW9yIHRvIHRoZSBleGNlcHRpb24gb2NjdXJyZW5jZS4gIEEgcG9pbnRlciB0byB0aGlzDQorc3RydWN0dXJlIGlzIHBhc3NlZCBpbnRvIHRoZSB2QXBwbGljYXRpb25FeGNlcHRpb25SZWdpc3RlckR1bXAoKSBjYWxsYmFjaw0KK2Z1bmN0aW9uLCBpZiBvbmUgaXMgZGVmaW5lZC4gKi8NCitzdGF0aWMgeFBvcnRSZWdpc3RlckR1bXAgeFJlZ2lzdGVyRHVtcDsNCiANCiAvKiBUaGlzIGlzIHRoZSBGcmVlUlRPUyBleGNlcHRpb24gaGFuZGxlciB0aGF0IGlzIGluc3RhbGxlZCBmb3IgYWxsIGV4Y2VwdGlvbg0KLSAqIHR5cGVzLiAgSXQgaXMgY2FsbGVkIGZyb20gdlBvcnRFeGNlcHRpb25IYW5sZGVyRW50cnkoKSAtIHdoaWNoIGlzIGl0c2VsZiBkZWZpbmVkDQotICogaW4gcG9ydGFzbS5TLiAqLw0KLSAgICB2b2lkIHZQb3J0RXhjZXB0aW9uSGFuZGxlciggdm9pZCAqIHB2RXhjZXB0aW9uSUQgKTsNCi0gICAgZXh0ZXJuIHZvaWQgdlBvcnRFeGNlcHRpb25IYW5kbGVyRW50cnkoIHZvaWQgKiBwdkV4Y2VwdGlvbklEICk7DQordHlwZXMuICBJdCBpcyBjYWxsZWQgZnJvbSB2UG9ydEV4Y2VwdGlvbkhhbmxkZXJFbnRyeSgpIC0gd2hpY2ggaXMgaXRzZWxmIGRlZmluZWQNCitpbiBwb3J0YXNtLlMuICovDQordm9pZCB2UG9ydEV4Y2VwdGlvbkhhbmRsZXIoIHZvaWQgKnB2RXhjZXB0aW9uSUQgKTsNCitleHRlcm4gdm9pZCB2UG9ydEV4Y2VwdGlvbkhhbmRsZXJFbnRyeSggdm9pZCAqcHZFeGNlcHRpb25JRCApOw0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIHZBcHBsaWNhdGlvbkV4Y2VwdGlvblJlZ2lzdGVyRHVtcCgpIGlzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCB0aGUNCi0gKiBhcHBsaWNhdGlvbiBjYW4gb3B0aW9uYWxseSBkZWZpbmUgdG8gcmVjZWl2ZSBhIHBvcHVsYXRlZCB4UG9ydFJlZ2lzdGVyRHVtcA0KLSAqIHN0cnVjdHVyZS4gIElmIHRoZSBhcHBsaWNhdGlvbiBjaG9vc2VzIG5vdCB0byBkZWZpbmUgYSB2ZXJzaW9uIG9mDQotICogdkFwcGxpY2F0aW9uRXhjZXB0aW9uUmVnaXN0ZXJEdW1wKCkgdGhlbiB0aGlzIHdlZWtseSBkZWZpbmVkIGRlZmF1bHQNCi0gKiBpbXBsZW1lbnRhdGlvbiB3aWxsIGJlIGNhbGxlZCBpbnN0ZWFkLiAqLw0KLSAgICBleHRlcm4gdm9pZCB2QXBwbGljYXRpb25FeGNlcHRpb25SZWdpc3RlckR1bXAoIHhQb3J0UmVnaXN0ZXJEdW1wICogeFJlZ2lzdGVyRHVtcCApIF9fYXR0cmlidXRlX18oICggd2VhayApICk7DQotICAgIHZvaWQgdkFwcGxpY2F0aW9uRXhjZXB0aW9uUmVnaXN0ZXJEdW1wKCB4UG9ydFJlZ2lzdGVyRHVtcCAqIHhSZWdpc3RlckR1bXAgKQ0KLSAgICB7DQotICAgICAgICAoIHZvaWQgKSB4UmVnaXN0ZXJEdW1wOw0KK2FwcGxpY2F0aW9uIGNhbiBvcHRpb25hbGx5IGRlZmluZSB0byByZWNlaXZlIGEgcG9wdWxhdGVkIHhQb3J0UmVnaXN0ZXJEdW1wDQorc3RydWN0dXJlLiAgSWYgdGhlIGFwcGxpY2F0aW9uIGNob29zZXMgbm90IHRvIGRlZmluZSBhIHZlcnNpb24gb2YNCit2QXBwbGljYXRpb25FeGNlcHRpb25SZWdpc3RlckR1bXAoKSB0aGVuIHRoaXMgd2Vla2x5IGRlZmluZWQgZGVmYXVsdA0KK2ltcGxlbWVudGF0aW9uIHdpbGwgYmUgY2FsbGVkIGluc3RlYWQuICovDQorZXh0ZXJuIHZvaWQgdkFwcGxpY2F0aW9uRXhjZXB0aW9uUmVnaXN0ZXJEdW1wKCB4UG9ydFJlZ2lzdGVyRHVtcCAqeFJlZ2lzdGVyRHVtcCApIF9fYXR0cmlidXRlX18oKHdlYWspKTsNCit2b2lkIHZBcHBsaWNhdGlvbkV4Y2VwdGlvblJlZ2lzdGVyRHVtcCggeFBvcnRSZWdpc3RlckR1bXAgKnhSZWdpc3RlckR1bXAgKQ0KK3sNCisJKCB2b2lkICkgeFJlZ2lzdGVyRHVtcDsNCiANCi0gICAgICAgIGZvciggOyA7ICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBwb3J0Tk9QKCk7DQotICAgICAgICB9DQotICAgIH0NCisJZm9yKCA7OyApDQorCXsNCisJCXBvcnROT1AoKTsNCisJfQ0KK30NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0gICAgdm9pZCB2UG9ydEV4Y2VwdGlvbkhhbmRsZXIoIHZvaWQgKiBwdkV4Y2VwdGlvbklEICkNCi0gICAgew0KLSAgICAgICAgZXh0ZXJuIHZvaWQgKiBweEN1cnJlbnRUQ0I7DQordm9pZCB2UG9ydEV4Y2VwdGlvbkhhbmRsZXIoIHZvaWQgKnB2RXhjZXB0aW9uSUQgKQ0KK3sNCitleHRlcm4gdm9pZCAqcHhDdXJyZW50VENCOw0KIA0KLSAgICAgICAgLyogRmlsbCBhbiB4UG9ydFJlZ2lzdGVyRHVtcCBzdHJ1Y3R1cmUgd2l0aCB0aGUgTWljcm9CbGF6ZSBjb250ZXh0IGFzIGl0DQotICAgICAgICAgKiB3YXMgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBleGNlcHRpb24gb2NjdXJyZW5jZS4gKi8NCisJLyogRmlsbCBhbiB4UG9ydFJlZ2lzdGVyRHVtcCBzdHJ1Y3R1cmUgd2l0aCB0aGUgTWljcm9CbGF6ZSBjb250ZXh0IGFzIGl0DQorCXdhcyBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGV4Y2VwdGlvbiBvY2N1cnJlbmNlLiAqLw0KIA0KLSAgICAgICAgLyogRmlyc3QgZmlsbCBpbiB0aGUgbmFtZSBhbmQgaGFuZGxlIG9mIHRoZSB0YXNrIHRoYXQgd2FzIGluIHRoZSBSdW5uaW5nDQotICAgICAgICAgKiBzdGF0ZSB3aGVuIHRoZSBleGNlcHRpb24gb2NjdXJyZWQuICovDQotICAgICAgICB4UmVnaXN0ZXJEdW1wLnhDdXJyZW50VGFza0hhbmRsZSA9IHB4Q3VycmVudFRDQjsNCi0gICAgICAgIHhSZWdpc3RlckR1bXAucGNDdXJyZW50VGFza05hbWUgPSBwY1Rhc2tHZXROYW1lKCBOVUxMICk7DQorCS8qIEZpcnN0IGZpbGwgaW4gdGhlIG5hbWUgYW5kIGhhbmRsZSBvZiB0aGUgdGFzayB0aGF0IHdhcyBpbiB0aGUgUnVubmluZw0KKwlzdGF0ZSB3aGVuIHRoZSBleGNlcHRpb24gb2NjdXJyZWQuICovDQorCXhSZWdpc3RlckR1bXAueEN1cnJlbnRUYXNrSGFuZGxlID0gcHhDdXJyZW50VENCOw0KKwl4UmVnaXN0ZXJEdW1wLnBjQ3VycmVudFRhc2tOYW1lID0gcGNUYXNrR2V0TmFtZSggTlVMTCApOw0KIA0KLSAgICAgICAgY29uZmlnQVNTRVJUKCBwdWxTdGFja1BvaW50ZXJPbkZ1bmN0aW9uRW50cnkgKTsNCisJY29uZmlnQVNTRVJUKCBwdWxTdGFja1BvaW50ZXJPbkZ1bmN0aW9uRW50cnkgKTsNCiANCi0gICAgICAgIC8qIE9idGFpbiB0aGUgdmFsdWVzIG9mIHJlZ2lzdGVycyB0aGF0IHdlcmUgc3RhY2tlZCBwcmlvciB0byB0aGlzIGZ1bmN0aW9uDQotICAgICAgICAgKiBiZWluZyBjYWxsZWQsIGFuZCBtYXkgaGF2ZSBjaGFuZ2VkIHNpbmNlIHRoZXkgd2VyZSBzdGFja2VkLiAqLw0KLSAgICAgICAgeFJlZ2lzdGVyRHVtcC51bFIzID0gcHVsU3RhY2tQb2ludGVyT25GdW5jdGlvbkVudHJ5WyBwb3J0ZXhSM19TVEFDS19PRkZTRVQgXTsNCi0gICAgICAgIHhSZWdpc3RlckR1bXAudWxSNCA9IHB1bFN0YWNrUG9pbnRlck9uRnVuY3Rpb25FbnRyeVsgcG9ydGV4UjRfU1RBQ0tfT0ZGU0VUIF07DQotICAgICAgICB4UmVnaXN0ZXJEdW1wLnVsUjUgPSBwdWxTdGFja1BvaW50ZXJPbkZ1bmN0aW9uRW50cnlbIHBvcnRleFI1X1NUQUNLX09GRlNFVCBdOw0KLSAgICAgICAgeFJlZ2lzdGVyRHVtcC51bFI2ID0gcHVsU3RhY2tQb2ludGVyT25GdW5jdGlvbkVudHJ5WyBwb3J0ZXhSNl9TVEFDS19PRkZTRVQgXTsNCi0gICAgICAgIHhSZWdpc3RlckR1bXAudWxSNyA9IHB1bFN0YWNrUG9pbnRlck9uRnVuY3Rpb25FbnRyeVsgcG9ydGV4UjdfU1RBQ0tfT0ZGU0VUIF07DQotICAgICAgICB4UmVnaXN0ZXJEdW1wLnVsUjggPSBwdWxTdGFja1BvaW50ZXJPbkZ1bmN0aW9uRW50cnlbIHBvcnRleFI4X1NUQUNLX09GRlNFVCBdOw0KLSAgICAgICAgeFJlZ2lzdGVyRHVtcC51bFI5ID0gcHVsU3RhY2tQb2ludGVyT25GdW5jdGlvbkVudHJ5WyBwb3J0ZXhSOV9TVEFDS19PRkZTRVQgXTsNCi0gICAgICAgIHhSZWdpc3RlckR1bXAudWxSMTAgPSBwdWxTdGFja1BvaW50ZXJPbkZ1bmN0aW9uRW50cnlbIHBvcnRleFIxMF9TVEFDS19PRkZTRVQgXTsNCi0gICAgICAgIHhSZWdpc3RlckR1bXAudWxSMTEgPSBwdWxTdGFja1BvaW50ZXJPbkZ1bmN0aW9uRW50cnlbIHBvcnRleFIxMV9TVEFDS19PRkZTRVQgXTsNCi0gICAgICAgIHhSZWdpc3RlckR1bXAudWxSMTIgPSBwdWxTdGFja1BvaW50ZXJPbkZ1bmN0aW9uRW50cnlbIHBvcnRleFIxMl9TVEFDS19PRkZTRVQgXTsNCi0gICAgICAgIHhSZWdpc3RlckR1bXAudWxSMTVfcmV0dXJuX2FkZHJlc3NfZnJvbV9zdWJyb3V0aW5lID0gcHVsU3RhY2tQb2ludGVyT25GdW5jdGlvbkVudHJ5WyBwb3J0ZXhSMTVfU1RBQ0tfT0ZGU0VUIF07DQotICAgICAgICB4UmVnaXN0ZXJEdW1wLnVsUjE4ID0gcHVsU3RhY2tQb2ludGVyT25GdW5jdGlvbkVudHJ5WyBwb3J0ZXhSMThfU1RBQ0tfT0ZGU0VUIF07DQotICAgICAgICB4UmVnaXN0ZXJEdW1wLnVsUjE5ID0gcHVsU3RhY2tQb2ludGVyT25GdW5jdGlvbkVudHJ5WyBwb3J0ZXhSMTlfU1RBQ0tfT0ZGU0VUIF07DQotICAgICAgICB4UmVnaXN0ZXJEdW1wLnVsTVNSID0gcHVsU3RhY2tQb2ludGVyT25GdW5jdGlvbkVudHJ5WyBwb3J0ZXhNU1JfU1RBQ0tfT0ZGU0VUIF07DQorCS8qIE9idGFpbiB0aGUgdmFsdWVzIG9mIHJlZ2lzdGVycyB0aGF0IHdlcmUgc3RhY2tlZCBwcmlvciB0byB0aGlzIGZ1bmN0aW9uDQorCWJlaW5nIGNhbGxlZCwgYW5kIG1heSBoYXZlIGNoYW5nZWQgc2luY2UgdGhleSB3ZXJlIHN0YWNrZWQuICovDQorCXhSZWdpc3RlckR1bXAudWxSMyA9IHB1bFN0YWNrUG9pbnRlck9uRnVuY3Rpb25FbnRyeVsgcG9ydGV4UjNfU1RBQ0tfT0ZGU0VUIF07DQorCXhSZWdpc3RlckR1bXAudWxSNCA9IHB1bFN0YWNrUG9pbnRlck9uRnVuY3Rpb25FbnRyeVsgcG9ydGV4UjRfU1RBQ0tfT0ZGU0VUIF07DQorCXhSZWdpc3RlckR1bXAudWxSNSA9IHB1bFN0YWNrUG9pbnRlck9uRnVuY3Rpb25FbnRyeVsgcG9ydGV4UjVfU1RBQ0tfT0ZGU0VUIF07DQorCXhSZWdpc3RlckR1bXAudWxSNiA9IHB1bFN0YWNrUG9pbnRlck9uRnVuY3Rpb25FbnRyeVsgcG9ydGV4UjZfU1RBQ0tfT0ZGU0VUIF07DQorCXhSZWdpc3RlckR1bXAudWxSNyA9IHB1bFN0YWNrUG9pbnRlck9uRnVuY3Rpb25FbnRyeVsgcG9ydGV4UjdfU1RBQ0tfT0ZGU0VUIF07DQorCXhSZWdpc3RlckR1bXAudWxSOCA9IHB1bFN0YWNrUG9pbnRlck9uRnVuY3Rpb25FbnRyeVsgcG9ydGV4UjhfU1RBQ0tfT0ZGU0VUIF07DQorCXhSZWdpc3RlckR1bXAudWxSOSA9IHB1bFN0YWNrUG9pbnRlck9uRnVuY3Rpb25FbnRyeVsgcG9ydGV4UjlfU1RBQ0tfT0ZGU0VUIF07DQorCXhSZWdpc3RlckR1bXAudWxSMTAgPSBwdWxTdGFja1BvaW50ZXJPbkZ1bmN0aW9uRW50cnlbIHBvcnRleFIxMF9TVEFDS19PRkZTRVQgXTsNCisJeFJlZ2lzdGVyRHVtcC51bFIxMSA9IHB1bFN0YWNrUG9pbnRlck9uRnVuY3Rpb25FbnRyeVsgcG9ydGV4UjExX1NUQUNLX09GRlNFVCBdOw0KKwl4UmVnaXN0ZXJEdW1wLnVsUjEyID0gcHVsU3RhY2tQb2ludGVyT25GdW5jdGlvbkVudHJ5WyBwb3J0ZXhSMTJfU1RBQ0tfT0ZGU0VUIF07DQorCXhSZWdpc3RlckR1bXAudWxSMTVfcmV0dXJuX2FkZHJlc3NfZnJvbV9zdWJyb3V0aW5lID0gcHVsU3RhY2tQb2ludGVyT25GdW5jdGlvbkVudHJ5WyBwb3J0ZXhSMTVfU1RBQ0tfT0ZGU0VUIF07DQorCXhSZWdpc3RlckR1bXAudWxSMTggPSBwdWxTdGFja1BvaW50ZXJPbkZ1bmN0aW9uRW50cnlbIHBvcnRleFIxOF9TVEFDS19PRkZTRVQgXTsNCisJeFJlZ2lzdGVyRHVtcC51bFIxOSA9IHB1bFN0YWNrUG9pbnRlck9uRnVuY3Rpb25FbnRyeVsgcG9ydGV4UjE5X1NUQUNLX09GRlNFVCBdOw0KKwl4UmVnaXN0ZXJEdW1wLnVsTVNSID0gcHVsU3RhY2tQb2ludGVyT25GdW5jdGlvbkVudHJ5WyBwb3J0ZXhNU1JfU1RBQ0tfT0ZGU0VUIF07DQogDQotICAgICAgICAvKiBPYnRhaW4gdGhlIHZhbHVlIG9mIGFsbCBvdGhlciByZWdpc3RlcnMuICovDQotICAgICAgICB4UmVnaXN0ZXJEdW1wLnVsUjJfc21hbGxfZGF0YV9hcmVhID0gbWZncHIoIFIyICk7DQotICAgICAgICB4UmVnaXN0ZXJEdW1wLnVsUjEzX3JlYWRfd3JpdGVfc21hbGxfZGF0YV9hcmVhID0gbWZncHIoIFIxMyApOw0KLSAgICAgICAgeFJlZ2lzdGVyRHVtcC51bFIxNF9yZXR1cm5fYWRkcmVzc19mcm9tX2ludGVycnVwdCA9IG1mZ3ByKCBSMTQgKTsNCi0gICAgICAgIHhSZWdpc3RlckR1bXAudWxSMTZfcmV0dXJuX2FkZHJlc3NfZnJvbV90cmFwID0gbWZncHIoIFIxNiApOw0KLSAgICAgICAgeFJlZ2lzdGVyRHVtcC51bFIxN19yZXR1cm5fYWRkcmVzc19mcm9tX2V4Y2VwdGlvbnMgPSBtZmdwciggUjE3ICk7DQotICAgICAgICB4UmVnaXN0ZXJEdW1wLnVsUjIwID0gbWZncHIoIFIyMCApOw0KLSAgICAgICAgeFJlZ2lzdGVyRHVtcC51bFIyMSA9IG1mZ3ByKCBSMjEgKTsNCi0gICAgICAgIHhSZWdpc3RlckR1bXAudWxSMjIgPSBtZmdwciggUjIyICk7DQotICAgICAgICB4UmVnaXN0ZXJEdW1wLnVsUjIzID0gbWZncHIoIFIyMyApOw0KLSAgICAgICAgeFJlZ2lzdGVyRHVtcC51bFIyNCA9IG1mZ3ByKCBSMjQgKTsNCi0gICAgICAgIHhSZWdpc3RlckR1bXAudWxSMjUgPSBtZmdwciggUjI1ICk7DQotICAgICAgICB4UmVnaXN0ZXJEdW1wLnVsUjI2ID0gbWZncHIoIFIyNiApOw0KLSAgICAgICAgeFJlZ2lzdGVyRHVtcC51bFIyNyA9IG1mZ3ByKCBSMjcgKTsNCi0gICAgICAgIHhSZWdpc3RlckR1bXAudWxSMjggPSBtZmdwciggUjI4ICk7DQotICAgICAgICB4UmVnaXN0ZXJEdW1wLnVsUjI5ID0gbWZncHIoIFIyOSApOw0KLSAgICAgICAgeFJlZ2lzdGVyRHVtcC51bFIzMCA9IG1mZ3ByKCBSMzAgKTsNCi0gICAgICAgIHhSZWdpc3RlckR1bXAudWxSMzEgPSBtZmdwciggUjMxICk7DQotICAgICAgICB4UmVnaXN0ZXJEdW1wLnVsUjFfU1AgPSAoICggdWludDMyX3QgKSBwdWxTdGFja1BvaW50ZXJPbkZ1bmN0aW9uRW50cnkgKSArIHBvcnRleEFTTV9IQU5ETEVSX1NUQUNLX0ZSQU1FX1NJWkU7DQotICAgICAgICB4UmVnaXN0ZXJEdW1wLnVsRUFSID0gbWZlYXIoKTsNCi0gICAgICAgIHhSZWdpc3RlckR1bXAudWxFU1IgPSBtZmVzcigpOw0KLSAgICAgICAgeFJlZ2lzdGVyRHVtcC51bEVEUiA9IG1mZWRyKCk7DQorCS8qIE9idGFpbiB0aGUgdmFsdWUgb2YgYWxsIG90aGVyIHJlZ2lzdGVycy4gKi8NCisJeFJlZ2lzdGVyRHVtcC51bFIyX3NtYWxsX2RhdGFfYXJlYSA9IG1mZ3ByKCBSMiApOw0KKwl4UmVnaXN0ZXJEdW1wLnVsUjEzX3JlYWRfd3JpdGVfc21hbGxfZGF0YV9hcmVhID0gbWZncHIoIFIxMyApOw0KKwl4UmVnaXN0ZXJEdW1wLnVsUjE0X3JldHVybl9hZGRyZXNzX2Zyb21faW50ZXJydXB0ID0gbWZncHIoIFIxNCApOw0KKwl4UmVnaXN0ZXJEdW1wLnVsUjE2X3JldHVybl9hZGRyZXNzX2Zyb21fdHJhcCA9IG1mZ3ByKCBSMTYgKTsNCisJeFJlZ2lzdGVyRHVtcC51bFIxN19yZXR1cm5fYWRkcmVzc19mcm9tX2V4Y2VwdGlvbnMgPSBtZmdwciggUjE3ICk7DQorCXhSZWdpc3RlckR1bXAudWxSMjAgPSBtZmdwciggUjIwICk7DQorCXhSZWdpc3RlckR1bXAudWxSMjEgPSBtZmdwciggUjIxICk7DQorCXhSZWdpc3RlckR1bXAudWxSMjIgPSBtZmdwciggUjIyICk7DQorCXhSZWdpc3RlckR1bXAudWxSMjMgPSBtZmdwciggUjIzICk7DQorCXhSZWdpc3RlckR1bXAudWxSMjQgPSBtZmdwciggUjI0ICk7DQorCXhSZWdpc3RlckR1bXAudWxSMjUgPSBtZmdwciggUjI1ICk7DQorCXhSZWdpc3RlckR1bXAudWxSMjYgPSBtZmdwciggUjI2ICk7DQorCXhSZWdpc3RlckR1bXAudWxSMjcgPSBtZmdwciggUjI3ICk7DQorCXhSZWdpc3RlckR1bXAudWxSMjggPSBtZmdwciggUjI4ICk7DQorCXhSZWdpc3RlckR1bXAudWxSMjkgPSBtZmdwciggUjI5ICk7DQorCXhSZWdpc3RlckR1bXAudWxSMzAgPSBtZmdwciggUjMwICk7DQorCXhSZWdpc3RlckR1bXAudWxSMzEgPSBtZmdwciggUjMxICk7DQorCXhSZWdpc3RlckR1bXAudWxSMV9TUCA9ICggKCB1aW50MzJfdCApIHB1bFN0YWNrUG9pbnRlck9uRnVuY3Rpb25FbnRyeSApICsgcG9ydGV4QVNNX0hBTkRMRVJfU1RBQ0tfRlJBTUVfU0laRTsNCisJeFJlZ2lzdGVyRHVtcC51bEVBUiA9IG1mZWFyKCk7DQorCXhSZWdpc3RlckR1bXAudWxFU1IgPSBtZmVzcigpOw0KKwl4UmVnaXN0ZXJEdW1wLnVsRURSID0gbWZlZHIoKTsNCiANCi0gICAgICAgIC8qIE1vdmUgdGhlIHNhdmVkIHByb2dyYW0gY291bnRlciBiYWNrIHRvIHRoZSBpbnN0cnVjdGlvbiB0aGF0IHdhcyBleGVjdXRlZA0KLSAgICAgICAgICogd2hlbiB0aGUgZXhjZXB0aW9uIG9jY3VycmVkLiAgVGhpcyBpcyBvbmx5IHZhbGlkIGZvciBjZXJ0YWluIHR5cGVzIG9mDQotICAgICAgICAgKiBleGNlcHRpb24uICovDQotICAgICAgICB4UmVnaXN0ZXJEdW1wLnVsUEMgPSB4UmVnaXN0ZXJEdW1wLnVsUjE3X3JldHVybl9hZGRyZXNzX2Zyb21fZXhjZXB0aW9ucyAtIHBvcnRleElOU1RSVUNUSU9OX1NJWkU7DQorCS8qIE1vdmUgdGhlIHNhdmVkIHByb2dyYW0gY291bnRlciBiYWNrIHRvIHRoZSBpbnN0cnVjdGlvbiB0aGF0IHdhcyBleGVjdXRlZA0KKwl3aGVuIHRoZSBleGNlcHRpb24gb2NjdXJyZWQuICBUaGlzIGlzIG9ubHkgdmFsaWQgZm9yIGNlcnRhaW4gdHlwZXMgb2YNCisJZXhjZXB0aW9uLiAqLw0KKwl4UmVnaXN0ZXJEdW1wLnVsUEMgPSB4UmVnaXN0ZXJEdW1wLnVsUjE3X3JldHVybl9hZGRyZXNzX2Zyb21fZXhjZXB0aW9ucyAtIHBvcnRleElOU1RSVUNUSU9OX1NJWkU7DQogDQotICAgICAgICAjaWYgKCBYUEFSX01JQ1JPQkxBWkVfVVNFX0ZQVSAhPSAwICkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIHhSZWdpc3RlckR1bXAudWxGU1IgPSBtZmZzcigpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICNlbHNlDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICB4UmVnaXN0ZXJEdW1wLnVsRlNSID0gMFVMOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICNlbmRpZg0KKwkjaWYoIFhQQVJfTUlDUk9CTEFaRV9VU0VfRlBVICE9IDAgKQ0KKwl7DQorCQl4UmVnaXN0ZXJEdW1wLnVsRlNSID0gbWZmc3IoKTsNCisJfQ0KKwkjZWxzZQ0KKwl7DQorCQl4UmVnaXN0ZXJEdW1wLnVsRlNSID0gMFVMOw0KKwl9DQorCSNlbmRpZg0KIA0KLSAgICAgICAgLyogQWxzbyBmaWxsIGluIGEgc3RyaW5nIHRoYXQgZGVzY3JpYmVzIHdoYXQgdHlwZSBvZiBleGNlcHRpb24gdGhpcyBpcy4NCi0gICAgICAgICAqIFRoZSBzdHJpbmcgdXNlcyB0aGUgc2FtZSBJRCBuYW1lcyBhcyBkZWZpbmVkIGluIHRoZSBNaWNyb0JsYXplIHN0YW5kYXJkDQotICAgICAgICAgKiBsaWJyYXJ5IGV4Y2VwdGlvbiBoZWFkZXIgZmlsZXMuICovDQotICAgICAgICBzd2l0Y2goICggdWludDMyX3QgKSBwdkV4Y2VwdGlvbklEICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBjYXNlIFhFWENfSURfRlNMOg0KLSAgICAgICAgICAgICAgICB4UmVnaXN0ZXJEdW1wLnBjRXhjZXB0aW9uQ2F1c2UgPSAoIGludDhfdCAqIGNvbnN0ICkgIlhFWENfSURfRlNMIjsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQorCS8qIEFsc28gZmlsbCBpbiBhIHN0cmluZyB0aGF0IGRlc2NyaWJlcyB3aGF0IHR5cGUgb2YgZXhjZXB0aW9uIHRoaXMgaXMuDQorCVRoZSBzdHJpbmcgdXNlcyB0aGUgc2FtZSBJRCBuYW1lcyBhcyBkZWZpbmVkIGluIHRoZSBNaWNyb0JsYXplIHN0YW5kYXJkDQorCWxpYnJhcnkgZXhjZXB0aW9uIGhlYWRlciBmaWxlcy4gKi8NCisJc3dpdGNoKCAoIHVpbnQzMl90ICkgcHZFeGNlcHRpb25JRCApDQorCXsNCisJCWNhc2UgWEVYQ19JRF9GU0wgOg0KKwkJCQl4UmVnaXN0ZXJEdW1wLnBjRXhjZXB0aW9uQ2F1c2UgPSAoIGludDhfdCAqIGNvbnN0ICkgIlhFWENfSURfRlNMIjsNCisJCQkJYnJlYWs7DQogDQotICAgICAgICAgICAgY2FzZSBYRVhDX0lEX1VOQUxJR05FRF9BQ0NFU1M6DQotICAgICAgICAgICAgICAgIHhSZWdpc3RlckR1bXAucGNFeGNlcHRpb25DYXVzZSA9ICggaW50OF90ICogY29uc3QgKSAiWEVYQ19JRF9VTkFMSUdORURfQUNDRVNTIjsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQorCQljYXNlIFhFWENfSURfVU5BTElHTkVEX0FDQ0VTUyA6DQorCQkJCXhSZWdpc3RlckR1bXAucGNFeGNlcHRpb25DYXVzZSA9ICggaW50OF90ICogY29uc3QgKSAiWEVYQ19JRF9VTkFMSUdORURfQUNDRVNTIjsNCisJCQkJYnJlYWs7DQogDQotICAgICAgICAgICAgY2FzZSBYRVhDX0lEX0lMTEVHQUxfT1BDT0RFOg0KLSAgICAgICAgICAgICAgICB4UmVnaXN0ZXJEdW1wLnBjRXhjZXB0aW9uQ2F1c2UgPSAoIGludDhfdCAqIGNvbnN0ICkgIlhFWENfSURfSUxMRUdBTF9PUENPREUiOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCisJCWNhc2UgWEVYQ19JRF9JTExFR0FMX09QQ09ERSA6DQorCQkJCXhSZWdpc3RlckR1bXAucGNFeGNlcHRpb25DYXVzZSA9ICggaW50OF90ICogY29uc3QgKSAiWEVYQ19JRF9JTExFR0FMX09QQ09ERSI7DQorCQkJCWJyZWFrOw0KIA0KLSAgICAgICAgICAgIGNhc2UgWEVYQ19JRF9NX0FYSV9JX0VYQ0VQVElPTjoNCi0gICAgICAgICAgICAgICAgeFJlZ2lzdGVyRHVtcC5wY0V4Y2VwdGlvbkNhdXNlID0gKCBpbnQ4X3QgKiBjb25zdCApICJYRVhDX0lEX01fQVhJX0lfRVhDRVBUSU9OIG9yIFhFWENfSURfSVBMQl9FWENFUFRJT04iOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCisJCWNhc2UgWEVYQ19JRF9NX0FYSV9JX0VYQ0VQVElPTiA6DQorCQkJCXhSZWdpc3RlckR1bXAucGNFeGNlcHRpb25DYXVzZSA9ICggaW50OF90ICogY29uc3QgKSAiWEVYQ19JRF9NX0FYSV9JX0VYQ0VQVElPTiBvciBYRVhDX0lEX0lQTEJfRVhDRVBUSU9OIjsNCisJCQkJYnJlYWs7DQogDQotICAgICAgICAgICAgY2FzZSBYRVhDX0lEX01fQVhJX0RfRVhDRVBUSU9OOg0KLSAgICAgICAgICAgICAgICB4UmVnaXN0ZXJEdW1wLnBjRXhjZXB0aW9uQ2F1c2UgPSAoIGludDhfdCAqIGNvbnN0ICkgIlhFWENfSURfTV9BWElfRF9FWENFUFRJT04gb3IgWEVYQ19JRF9EUExCX0VYQ0VQVElPTiI7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KKwkJY2FzZSBYRVhDX0lEX01fQVhJX0RfRVhDRVBUSU9OIDoNCisJCQkJeFJlZ2lzdGVyRHVtcC5wY0V4Y2VwdGlvbkNhdXNlID0gKCBpbnQ4X3QgKiBjb25zdCApICJYRVhDX0lEX01fQVhJX0RfRVhDRVBUSU9OIG9yIFhFWENfSURfRFBMQl9FWENFUFRJT04iOw0KKwkJCQlicmVhazsNCiANCi0gICAgICAgICAgICBjYXNlIFhFWENfSURfRElWX0JZX1pFUk86DQotICAgICAgICAgICAgICAgIHhSZWdpc3RlckR1bXAucGNFeGNlcHRpb25DYXVzZSA9ICggaW50OF90ICogY29uc3QgKSAiWEVYQ19JRF9ESVZfQllfWkVSTyI7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KKwkJY2FzZSBYRVhDX0lEX0RJVl9CWV9aRVJPIDoNCisJCQkJeFJlZ2lzdGVyRHVtcC5wY0V4Y2VwdGlvbkNhdXNlID0gKCBpbnQ4X3QgKiBjb25zdCApICJYRVhDX0lEX0RJVl9CWV9aRVJPIjsNCisJCQkJYnJlYWs7DQogDQotICAgICAgICAgICAgY2FzZSBYRVhDX0lEX1NUQUNLX1ZJT0xBVElPTjoNCi0gICAgICAgICAgICAgICAgeFJlZ2lzdGVyRHVtcC5wY0V4Y2VwdGlvbkNhdXNlID0gKCBpbnQ4X3QgKiBjb25zdCApICJYRVhDX0lEX1NUQUNLX1ZJT0xBVElPTiBvciBYRVhDX0lEX01NVSI7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KKwkJY2FzZSBYRVhDX0lEX1NUQUNLX1ZJT0xBVElPTiA6DQorCQkJCXhSZWdpc3RlckR1bXAucGNFeGNlcHRpb25DYXVzZSA9ICggaW50OF90ICogY29uc3QgKSAiWEVYQ19JRF9TVEFDS19WSU9MQVRJT04gb3IgWEVYQ19JRF9NTVUiOw0KKwkJCQlicmVhazsNCiANCi0gICAgICAgICAgICAgICAgI2lmICggWFBBUl9NSUNST0JMQVpFX1VTRV9GUFUgIT0gMCApDQotICAgICAgICAgICAgICAgICAgICBjYXNlIFhFWENfSURfRlBVOg0KLSAgICAgICAgICAgICAgICAgICAgICAgIHhSZWdpc3RlckR1bXAucGNFeGNlcHRpb25DYXVzZSA9ICggaW50OF90ICogY29uc3QgKSAiWEVYQ19JRF9GUFUgc2VlIHVsRlNSIHZhbHVlIjsNCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgI2VuZGlmIC8qIFhQQVJfTUlDUk9CTEFaRV9VU0VfRlBVICovDQotICAgICAgICB9DQorCQkjaWYoIFhQQVJfTUlDUk9CTEFaRV9VU0VfRlBVICE9IDAgKQ0KIA0KLSAgICAgICAgLyogdkFwcGxpY2F0aW9uRXhjZXB0aW9uUmVnaXN0ZXJEdW1wKCkgaXMgYSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHRoZQ0KLSAgICAgICAgICogYXBwbGljYXRpb24gY2FuIG9wdGlvbmFsbHkgZGVmaW5lIHRvIHJlY2VpdmUgdGhlIHBvcHVsYXRlZCB4UG9ydFJlZ2lzdGVyRHVtcA0KLSAgICAgICAgICogc3RydWN0dXJlLiAgSWYgdGhlIGFwcGxpY2F0aW9uIGNob29zZXMgbm90IHRvIGRlZmluZSBhIHZlcnNpb24gb2YNCi0gICAgICAgICAqIHZBcHBsaWNhdGlvbkV4Y2VwdGlvblJlZ2lzdGVyRHVtcCgpIHRoZW4gdGhlIHdlZWtseSBkZWZpbmVkIGRlZmF1bHQNCi0gICAgICAgICAqIGltcGxlbWVudGF0aW9uIHdpdGhpbiB0aGlzIGZpbGUgd2lsbCBiZSBjYWxsZWQgaW5zdGVhZC4gKi8NCi0gICAgICAgIHZBcHBsaWNhdGlvbkV4Y2VwdGlvblJlZ2lzdGVyRHVtcCggJnhSZWdpc3RlckR1bXAgKTsNCisJCQljYXNlIFhFWENfSURfRlBVIDoNCisJCQkJCQl4UmVnaXN0ZXJEdW1wLnBjRXhjZXB0aW9uQ2F1c2UgPSAoIGludDhfdCAqIGNvbnN0ICkgIlhFWENfSURfRlBVIHNlZSB1bEZTUiB2YWx1ZSI7DQorCQkJCQkJYnJlYWs7DQogDQotICAgICAgICAvKiBNdXN0IG5vdCBhdHRlbXB0IHRvIGxlYXZlIHRoaXMgZnVuY3Rpb24hICovDQotICAgICAgICBmb3IoIDsgOyApDQotICAgICAgICB7DQotICAgICAgICAgICAgcG9ydE5PUCgpOw0KLSAgICAgICAgfQ0KLSAgICB9DQorCQkjZW5kaWYgLyogWFBBUl9NSUNST0JMQVpFX1VTRV9GUFUgKi8NCisJfQ0KKw0KKwkvKiB2QXBwbGljYXRpb25FeGNlcHRpb25SZWdpc3RlckR1bXAoKSBpcyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgdGhlDQorCWFwcGxpY2F0aW9uIGNhbiBvcHRpb25hbGx5IGRlZmluZSB0byByZWNlaXZlIHRoZSBwb3B1bGF0ZWQgeFBvcnRSZWdpc3RlckR1bXANCisJc3RydWN0dXJlLiAgSWYgdGhlIGFwcGxpY2F0aW9uIGNob29zZXMgbm90IHRvIGRlZmluZSBhIHZlcnNpb24gb2YNCisJdkFwcGxpY2F0aW9uRXhjZXB0aW9uUmVnaXN0ZXJEdW1wKCkgdGhlbiB0aGUgd2Vla2x5IGRlZmluZWQgZGVmYXVsdA0KKwlpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhpcyBmaWxlIHdpbGwgYmUgY2FsbGVkIGluc3RlYWQuICovDQorCXZBcHBsaWNhdGlvbkV4Y2VwdGlvblJlZ2lzdGVyRHVtcCggJnhSZWdpc3RlckR1bXAgKTsNCisNCisJLyogTXVzdCBub3QgYXR0ZW1wdCB0byBsZWF2ZSB0aGlzIGZ1bmN0aW9uISAqLw0KKwlmb3IoIDs7ICkNCisJew0KKwkJcG9ydE5PUCgpOw0KKwl9DQorfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KLSAgICB2b2lkIHZQb3J0RXhjZXB0aW9uc0luc3RhbGxIYW5kbGVycyggdm9pZCApDQotICAgIHsNCi0gICAgICAgIHN0YXRpYyB1aW50MzJfdCB1bEhhbmRsZXJzQWxyZWFkeUluc3RhbGxlZCA9IHBkRkFMU0U7DQordm9pZCB2UG9ydEV4Y2VwdGlvbnNJbnN0YWxsSGFuZGxlcnMoIHZvaWQgKQ0KK3sNCitzdGF0aWMgdWludDMyX3QgdWxIYW5kbGVyc0FscmVhZHlJbnN0YWxsZWQgPSBwZEZBTFNFOw0KIA0KLSAgICAgICAgaWYoIHVsSGFuZGxlcnNBbHJlYWR5SW5zdGFsbGVkID09IHBkRkFMU0UgKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHVsSGFuZGxlcnNBbHJlYWR5SW5zdGFsbGVkID0gcGRUUlVFOw0KKwlpZiggdWxIYW5kbGVyc0FscmVhZHlJbnN0YWxsZWQgPT0gcGRGQUxTRSApDQorCXsNCisJCXVsSGFuZGxlcnNBbHJlYWR5SW5zdGFsbGVkID0gcGRUUlVFOw0KIA0KLSAgICAgICAgICAgICNpZiBYUEFSX01JQ1JPQkxBWkVfVU5BTElHTkVEX0VYQ0VQVElPTlMgPT0gMQ0KLSAgICAgICAgICAgICAgICBtaWNyb2JsYXplX3JlZ2lzdGVyX2V4Y2VwdGlvbl9oYW5kbGVyKCBYRVhDX0lEX1VOQUxJR05FRF9BQ0NFU1MsIHZQb3J0RXhjZXB0aW9uSGFuZGxlckVudHJ5LCAoIHZvaWQgKiApIFhFWENfSURfVU5BTElHTkVEX0FDQ0VTUyApOw0KLSAgICAgICAgICAgICNlbmRpZiAvKiBYUEFSX01JQ1JPQkxBWkVfVU5BTElHTkVEX0VYQ0VQVElPTlMqLw0KKwkJI2lmIFhQQVJfTUlDUk9CTEFaRV9VTkFMSUdORURfRVhDRVBUSU9OUyA9PSAxDQorCQkJbWljcm9ibGF6ZV9yZWdpc3Rlcl9leGNlcHRpb25faGFuZGxlciggWEVYQ19JRF9VTkFMSUdORURfQUNDRVNTLCB2UG9ydEV4Y2VwdGlvbkhhbmRsZXJFbnRyeSwgKCB2b2lkICogKSBYRVhDX0lEX1VOQUxJR05FRF9BQ0NFU1MgKTsNCisJCSNlbmRpZiAvKiBYUEFSX01JQ1JPQkxBWkVfVU5BTElHTkVEX0VYQ0VQVElPTlMqLw0KIA0KLSAgICAgICAgICAgICNpZiBYUEFSX01JQ1JPQkxBWkVfSUxMX09QQ09ERV9FWENFUFRJT04gPT0gMQ0KLSAgICAgICAgICAgICAgICBtaWNyb2JsYXplX3JlZ2lzdGVyX2V4Y2VwdGlvbl9oYW5kbGVyKCBYRVhDX0lEX0lMTEVHQUxfT1BDT0RFLCB2UG9ydEV4Y2VwdGlvbkhhbmRsZXJFbnRyeSwgKCB2b2lkICogKSBYRVhDX0lEX0lMTEVHQUxfT1BDT0RFICk7DQotICAgICAgICAgICAgI2VuZGlmIC8qIFhQQVJfTUlDUk9CTEFaRV9JTExfT1BDT0RFX0VYQ0VQVElPTiAqLw0KKwkJI2lmIFhQQVJfTUlDUk9CTEFaRV9JTExfT1BDT0RFX0VYQ0VQVElPTiA9PSAxDQorCQkJbWljcm9ibGF6ZV9yZWdpc3Rlcl9leGNlcHRpb25faGFuZGxlciggWEVYQ19JRF9JTExFR0FMX09QQ09ERSwgdlBvcnRFeGNlcHRpb25IYW5kbGVyRW50cnksICggdm9pZCAqICkgWEVYQ19JRF9JTExFR0FMX09QQ09ERSApOw0KKwkJI2VuZGlmIC8qIFhQQVJfTUlDUk9CTEFaRV9JTExfT1BDT0RFX0VYQ0VQVElPTiAqLw0KIA0KLSAgICAgICAgICAgICNpZiBYUEFSX01JQ1JPQkxBWkVfTV9BWElfSV9CVVNfRVhDRVBUSU9OID09IDENCi0gICAgICAgICAgICAgICAgbWljcm9ibGF6ZV9yZWdpc3Rlcl9leGNlcHRpb25faGFuZGxlciggWEVYQ19JRF9NX0FYSV9JX0VYQ0VQVElPTiwgdlBvcnRFeGNlcHRpb25IYW5kbGVyRW50cnksICggdm9pZCAqICkgWEVYQ19JRF9NX0FYSV9JX0VYQ0VQVElPTiApOw0KLSAgICAgICAgICAgICNlbmRpZiAvKiBYUEFSX01JQ1JPQkxBWkVfTV9BWElfSV9CVVNfRVhDRVBUSU9OICovDQorCQkjaWYgWFBBUl9NSUNST0JMQVpFX01fQVhJX0lfQlVTX0VYQ0VQVElPTiA9PSAxDQorCQkJbWljcm9ibGF6ZV9yZWdpc3Rlcl9leGNlcHRpb25faGFuZGxlciggWEVYQ19JRF9NX0FYSV9JX0VYQ0VQVElPTiwgdlBvcnRFeGNlcHRpb25IYW5kbGVyRW50cnksICggdm9pZCAqICkgWEVYQ19JRF9NX0FYSV9JX0VYQ0VQVElPTiApOw0KKwkJI2VuZGlmIC8qIFhQQVJfTUlDUk9CTEFaRV9NX0FYSV9JX0JVU19FWENFUFRJT04gKi8NCiANCi0gICAgICAgICAgICAjaWYgWFBBUl9NSUNST0JMQVpFX01fQVhJX0RfQlVTX0VYQ0VQVElPTiA9PSAxDQotICAgICAgICAgICAgICAgIG1pY3JvYmxhemVfcmVnaXN0ZXJfZXhjZXB0aW9uX2hhbmRsZXIoIFhFWENfSURfTV9BWElfRF9FWENFUFRJT04sIHZQb3J0RXhjZXB0aW9uSGFuZGxlckVudHJ5LCAoIHZvaWQgKiApIFhFWENfSURfTV9BWElfRF9FWENFUFRJT04gKTsNCi0gICAgICAgICAgICAjZW5kaWYgLyogWFBBUl9NSUNST0JMQVpFX01fQVhJX0RfQlVTX0VYQ0VQVElPTiAqLw0KKwkJI2lmIFhQQVJfTUlDUk9CTEFaRV9NX0FYSV9EX0JVU19FWENFUFRJT04gPT0gMQ0KKwkJCW1pY3JvYmxhemVfcmVnaXN0ZXJfZXhjZXB0aW9uX2hhbmRsZXIoIFhFWENfSURfTV9BWElfRF9FWENFUFRJT04sIHZQb3J0RXhjZXB0aW9uSGFuZGxlckVudHJ5LCAoIHZvaWQgKiApIFhFWENfSURfTV9BWElfRF9FWENFUFRJT04gKTsNCisJCSNlbmRpZiAvKiBYUEFSX01JQ1JPQkxBWkVfTV9BWElfRF9CVVNfRVhDRVBUSU9OICovDQogDQotICAgICAgICAgICAgI2lmIFhQQVJfTUlDUk9CTEFaRV9JUExCX0JVU19FWENFUFRJT04gPT0gMQ0KLSAgICAgICAgICAgICAgICBtaWNyb2JsYXplX3JlZ2lzdGVyX2V4Y2VwdGlvbl9oYW5kbGVyKCBYRVhDX0lEX0lQTEJfRVhDRVBUSU9OLCB2UG9ydEV4Y2VwdGlvbkhhbmRsZXJFbnRyeSwgKCB2b2lkICogKSBYRVhDX0lEX0lQTEJfRVhDRVBUSU9OICk7DQotICAgICAgICAgICAgI2VuZGlmIC8qIFhQQVJfTUlDUk9CTEFaRV9JUExCX0JVU19FWENFUFRJT04gKi8NCisJCSNpZiBYUEFSX01JQ1JPQkxBWkVfSVBMQl9CVVNfRVhDRVBUSU9OID09IDENCisJCQltaWNyb2JsYXplX3JlZ2lzdGVyX2V4Y2VwdGlvbl9oYW5kbGVyKCBYRVhDX0lEX0lQTEJfRVhDRVBUSU9OLCB2UG9ydEV4Y2VwdGlvbkhhbmRsZXJFbnRyeSwgKCB2b2lkICogKSBYRVhDX0lEX0lQTEJfRVhDRVBUSU9OICk7DQorCQkjZW5kaWYgLyogWFBBUl9NSUNST0JMQVpFX0lQTEJfQlVTX0VYQ0VQVElPTiAqLw0KIA0KLSAgICAgICAgICAgICNpZiBYUEFSX01JQ1JPQkxBWkVfRFBMQl9CVVNfRVhDRVBUSU9OID09IDENCi0gICAgICAgICAgICAgICAgbWljcm9ibGF6ZV9yZWdpc3Rlcl9leGNlcHRpb25faGFuZGxlciggWEVYQ19JRF9EUExCX0VYQ0VQVElPTiwgdlBvcnRFeGNlcHRpb25IYW5kbGVyRW50cnksICggdm9pZCAqICkgWEVYQ19JRF9EUExCX0VYQ0VQVElPTiApOw0KLSAgICAgICAgICAgICNlbmRpZiAvKiBYUEFSX01JQ1JPQkxBWkVfRFBMQl9CVVNfRVhDRVBUSU9OICovDQorCQkjaWYgWFBBUl9NSUNST0JMQVpFX0RQTEJfQlVTX0VYQ0VQVElPTiA9PSAxDQorCQkJbWljcm9ibGF6ZV9yZWdpc3Rlcl9leGNlcHRpb25faGFuZGxlciggWEVYQ19JRF9EUExCX0VYQ0VQVElPTiwgdlBvcnRFeGNlcHRpb25IYW5kbGVyRW50cnksICggdm9pZCAqICkgWEVYQ19JRF9EUExCX0VYQ0VQVElPTiApOw0KKwkJI2VuZGlmIC8qIFhQQVJfTUlDUk9CTEFaRV9EUExCX0JVU19FWENFUFRJT04gKi8NCiANCi0gICAgICAgICAgICAjaWYgWFBBUl9NSUNST0JMQVpFX0RJVl9aRVJPX0VYQ0VQVElPTiA9PSAxDQotICAgICAgICAgICAgICAgIG1pY3JvYmxhemVfcmVnaXN0ZXJfZXhjZXB0aW9uX2hhbmRsZXIoIFhFWENfSURfRElWX0JZX1pFUk8sIHZQb3J0RXhjZXB0aW9uSGFuZGxlckVudHJ5LCAoIHZvaWQgKiApIFhFWENfSURfRElWX0JZX1pFUk8gKTsNCi0gICAgICAgICAgICAjZW5kaWYgLyogWFBBUl9NSUNST0JMQVpFX0RJVl9aRVJPX0VYQ0VQVElPTiAqLw0KKwkJI2lmIFhQQVJfTUlDUk9CTEFaRV9ESVZfWkVST19FWENFUFRJT04gPT0gMQ0KKwkJCW1pY3JvYmxhemVfcmVnaXN0ZXJfZXhjZXB0aW9uX2hhbmRsZXIoIFhFWENfSURfRElWX0JZX1pFUk8sIHZQb3J0RXhjZXB0aW9uSGFuZGxlckVudHJ5LCAoIHZvaWQgKiApIFhFWENfSURfRElWX0JZX1pFUk8gKTsNCisJCSNlbmRpZiAvKiBYUEFSX01JQ1JPQkxBWkVfRElWX1pFUk9fRVhDRVBUSU9OICovDQogDQotICAgICAgICAgICAgI2lmIFhQQVJfTUlDUk9CTEFaRV9GUFVfRVhDRVBUSU9OID09IDENCi0gICAgICAgICAgICAgICAgbWljcm9ibGF6ZV9yZWdpc3Rlcl9leGNlcHRpb25faGFuZGxlciggWEVYQ19JRF9GUFUsIHZQb3J0RXhjZXB0aW9uSGFuZGxlckVudHJ5LCAoIHZvaWQgKiApIFhFWENfSURfRlBVICk7DQotICAgICAgICAgICAgI2VuZGlmIC8qIFhQQVJfTUlDUk9CTEFaRV9GUFVfRVhDRVBUSU9OICovDQorCQkjaWYgWFBBUl9NSUNST0JMQVpFX0ZQVV9FWENFUFRJT04gPT0gMQ0KKwkJCW1pY3JvYmxhemVfcmVnaXN0ZXJfZXhjZXB0aW9uX2hhbmRsZXIoIFhFWENfSURfRlBVLCB2UG9ydEV4Y2VwdGlvbkhhbmRsZXJFbnRyeSwgKCB2b2lkICogKSBYRVhDX0lEX0ZQVSApOw0KKwkJI2VuZGlmIC8qIFhQQVJfTUlDUk9CTEFaRV9GUFVfRVhDRVBUSU9OICovDQogDQotICAgICAgICAgICAgI2lmIFhQQVJfTUlDUk9CTEFaRV9GU0xfRVhDRVBUSU9OID09IDENCi0gICAgICAgICAgICAgICAgbWljcm9ibGF6ZV9yZWdpc3Rlcl9leGNlcHRpb25faGFuZGxlciggWEVYQ19JRF9GU0wsIHZQb3J0RXhjZXB0aW9uSGFuZGxlckVudHJ5LCAoIHZvaWQgKiApIFhFWENfSURfRlNMICk7DQotICAgICAgICAgICAgI2VuZGlmIC8qIFhQQVJfTUlDUk9CTEFaRV9GU0xfRVhDRVBUSU9OICovDQorCQkjaWYgWFBBUl9NSUNST0JMQVpFX0ZTTF9FWENFUFRJT04gPT0gMQ0KKwkJCW1pY3JvYmxhemVfcmVnaXN0ZXJfZXhjZXB0aW9uX2hhbmRsZXIoIFhFWENfSURfRlNMLCB2UG9ydEV4Y2VwdGlvbkhhbmRsZXJFbnRyeSwgKCB2b2lkICogKSBYRVhDX0lEX0ZTTCApOw0KKwkJI2VuZGlmIC8qIFhQQVJfTUlDUk9CTEFaRV9GU0xfRVhDRVBUSU9OICovDQogDQotICAgICAgICAgICAgbWljcm9ibGF6ZV9lbmFibGVfZXhjZXB0aW9ucygpOw0KLSAgICAgICAgfQ0KLSAgICB9DQorCQltaWNyb2JsYXplX2VuYWJsZV9leGNlcHRpb25zKCk7DQorCX0NCit9DQogDQogLyogRXhjbHVkZSB0aGUgZW50aXJlIGZpbGUgaWYgdGhlIE1pY3JvQmxhemUgaXMgbm90IGNvbmZpZ3VyZWQgdG8gaGFuZGxlDQotICogZXhjZXB0aW9ucywgb3IgdGhlIGFwcGxpY2F0aW9uIGRlZmluZWQgY29uZmlndXJhdGlvbiBpdGVtDQotICogY29uZmlnSU5TVEFMTF9FWENFUFRJT05fSEFORExFUlMgaXMgbm90IHNldCB0byAxLiAqLw0KK2V4Y2VwdGlvbnMsIG9yIHRoZSBhcHBsaWNhdGlvbiBkZWZpbmVkIGNvbmZpZ3VyYXRpb24gaXRlbQ0KK2NvbmZpZ0lOU1RBTExfRVhDRVBUSU9OX0hBTkRMRVJTIGlzIG5vdCBzZXQgdG8gMS4gKi8NCiAjZW5kaWYgLyogKCBNSUNST0JMQVpFX0VYQ0VQVElPTlNfRU5BQkxFRCA9PSAxICkgJiYgKCBjb25maWdJTlNUQUxMX0VYQ0VQVElPTl9IQU5ETEVSUyA9PSAxICkgKi8NCisNCisNCisNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9HQ0MvTWljcm9CbGF6ZVY5L3BvcnRtYWNyby5oIGIvcG9ydGFibGUvR0NDL01pY3JvQmxhemVWOS9wb3J0bWFjcm8uaAppbmRleCA1YjU4NDBlLi4xOWI1Mjg4IDEwMDY0NAotLS0gYS9wb3J0YWJsZS9HQ0MvTWljcm9CbGF6ZVY5L3BvcnRtYWNyby5oCisrKyBiL3BvcnRhYmxlL0dDQy9NaWNyb0JsYXplVjkvcG9ydG1hY3JvLmgKQEAgLTI2LDE1ICsyNiwxNSBAQAogICovDQogDQogI2lmbmRlZiBQT1JUTUFDUk9fSA0KLSAgICAjZGVmaW5lIFBPUlRNQUNST19IDQorI2RlZmluZSBQT1JUTUFDUk9fSA0KIA0KLSAgICAjaWZkZWYgX19jcGx1c3BsdXMNCi0gICAgICAgIGV4dGVybiAiQyIgew0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCiANCiAvKiBCU1AgaW5jbHVkZXMuICovDQotICAgICNpbmNsdWRlIDxtYl9pbnRlcmZhY2UuaD4NCi0gICAgI2luY2x1ZGUgPHhwYXJhbWV0ZXJzLmg+DQorI2luY2x1ZGUgPG1iX2ludGVyZmFjZS5oPg0KKyNpbmNsdWRlIDx4cGFyYW1ldGVycy5oPg0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgKiBQb3J0IHNwZWNpZmljIGRlZmluaXRpb25zLg0KQEAgLTQ3LDE3NyArNDcsMTc1IEBACiAgKi8NCiANCiAvKiBUeXBlIGRlZmluaXRpb25zLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRDSEFSICAgICAgICAgIGNoYXINCi0gICAgI2RlZmluZSBwb3J0RkxPQVQgICAgICAgICBmbG9hdA0KLSAgICAjZGVmaW5lIHBvcnRET1VCTEUgICAgICAgIGRvdWJsZQ0KLSAgICAjZGVmaW5lIHBvcnRMT05HICAgICAgICAgIGxvbmcNCi0gICAgI2RlZmluZSBwb3J0U0hPUlQgICAgICAgICBzaG9ydA0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19UWVBFICAgIHVpbnQzMl90DQotICAgICNkZWZpbmUgcG9ydEJBU0VfVFlQRSAgICAgbG9uZw0KKyNkZWZpbmUgcG9ydENIQVIJCWNoYXINCisjZGVmaW5lIHBvcnRGTE9BVAkJZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUJCWRvdWJsZQ0KKyNkZWZpbmUgcG9ydExPTkcJCWxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVAkJc2hvcnQNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFCXVpbnQzMl90DQorI2RlZmluZSBwb3J0QkFTRV9UWVBFCWxvbmcNCiANCi0gICAgdHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSAgIFN0YWNrVHlwZV90Ow0KLSAgICB0eXBlZGVmIGxvbmcgICAgICAgICAgICAgQmFzZVR5cGVfdDsNCi0gICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nICAgIFVCYXNlVHlwZV90Ow0KK3R5cGVkZWYgcG9ydFNUQUNLX1RZUEUgU3RhY2tUeXBlX3Q7DQordHlwZWRlZiBsb25nIEJhc2VUeXBlX3Q7DQordHlwZWRlZiB1bnNpZ25lZCBsb25nIFVCYXNlVHlwZV90Ow0KIA0KLSAgICAjaWYgKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KLSAgICAgICAgdHlwZWRlZiB1aW50MTZfdCAgICAgVGlja1R5cGVfdDsNCi0gICAgICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAgICAgICAgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQotICAgICNlbHNlDQotICAgICAgICB0eXBlZGVmIHVpbnQzMl90ICAgICBUaWNrVHlwZV90Ow0KLSAgICAgICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICAgICAgICAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwNCisjaWYoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQorCXR5cGVkZWYgdWludDE2X3QgVGlja1R5cGVfdDsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggVGlja1R5cGVfdCApIDB4ZmZmZg0KKyNlbHNlDQorCXR5cGVkZWYgdWludDMyX3QgVGlja1R5cGVfdDsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTA0KIA0KLS8qIDMyLWJpdCB0aWNrIHR5cGUgb24gYSAzMi1iaXQgYXJjaGl0ZWN0dXJlLCBzbyByZWFkcyBvZiB0aGUgdGljayBjb3VudCBkbw0KLSAqIG5vdCBuZWVkIHRvIGJlIGd1YXJkZWQgd2l0aCBhIGNyaXRpY2FsIHNlY3Rpb24uICovDQotICAgICAgICAjZGVmaW5lIHBvcnRUSUNLX1RZUEVfSVNfQVRPTUlDICAgIDENCi0gICAgI2VuZGlmDQorCS8qIDMyLWJpdCB0aWNrIHR5cGUgb24gYSAzMi1iaXQgYXJjaGl0ZWN0dXJlLCBzbyByZWFkcyBvZiB0aGUgdGljayBjb3VudCBkbw0KKwlub3QgbmVlZCB0byBiZSBndWFyZGVkIHdpdGggYSBjcml0aWNhbCBzZWN0aW9uLiAqLw0KKwkjZGVmaW5lIHBvcnRUSUNLX1RZUEVfSVNfQVRPTUlDIDENCisjZW5kaWYNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBJbnRlcnJ1cHQgY29udHJvbCBtYWNyb3MgYW5kIGZ1bmN0aW9ucy4gKi8NCi0gICAgdm9pZCBtaWNyb2JsYXplX2Rpc2FibGVfaW50ZXJydXB0cyggdm9pZCApOw0KLSAgICB2b2lkIG1pY3JvYmxhemVfZW5hYmxlX2ludGVycnVwdHMoIHZvaWQgKTsNCi0gICAgI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgICAgbWljcm9ibGF6ZV9kaXNhYmxlX2ludGVycnVwdHMoKQ0KLSAgICAjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpICAgICBtaWNyb2JsYXplX2VuYWJsZV9pbnRlcnJ1cHRzKCkNCit2b2lkIG1pY3JvYmxhemVfZGlzYWJsZV9pbnRlcnJ1cHRzKCB2b2lkICk7DQordm9pZCBtaWNyb2JsYXplX2VuYWJsZV9pbnRlcnJ1cHRzKCB2b2lkICk7DQorI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkJbWljcm9ibGF6ZV9kaXNhYmxlX2ludGVycnVwdHMoKQ0KKyNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkJCW1pY3JvYmxhemVfZW5hYmxlX2ludGVycnVwdHMoKQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIENyaXRpY2FsIHNlY3Rpb24gbWFjcm9zLiAqLw0KLSAgICB2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCggdm9pZCApOw0KLSAgICB2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICk7DQotICAgICNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgZXh0ZXJuIHZvbGF0aWxlIFVCYXNlVHlwZV90IHV4Q3JpdGljYWxOZXN0aW5nOyBcDQotICAgICAgICBtaWNyb2JsYXplX2Rpc2FibGVfaW50ZXJydXB0cygpOyAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHV4Q3JpdGljYWxOZXN0aW5nKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB9DQordm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKTsNCit2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICk7DQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKQkJewkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCWV4dGVybiB2b2xhdGlsZSBVQmFzZVR5cGVfdCB1eENyaXRpY2FsTmVzdGluZzsJCQkJXA0KKwkJCQkJCQkJCQltaWNyb2JsYXplX2Rpc2FibGVfaW50ZXJydXB0cygpOwkJCQkJCQlcDQorCQkJCQkJCQkJCXV4Q3JpdGljYWxOZXN0aW5nKys7CQkJCQkJCQkJCVwNCisJCQkJCQkJCQl9DQogDQotICAgICNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKSAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgZXh0ZXJuIHZvbGF0aWxlIFVCYXNlVHlwZV90IHV4Q3JpdGljYWxOZXN0aW5nOyBcDQotICAgICAgICAvKiBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCwgc28gd2UgY2FuICovICAgICAgIFwNCi0gICAgICAgIC8qIGFjY2VzcyB0aGUgdmFyaWFibGUgZGlyZWN0bHkuICovICAgICAgICAgICAgXA0KLSAgICAgICAgdXhDcml0aWNhbE5lc3RpbmctLTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBpZiggdXhDcml0aWNhbE5lc3RpbmcgPT0gMCApICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIFRoZSBuZXN0aW5nIGhhcyB1bndvdW5kIGFuZCB3ZSBcDQotICAgICAgICAgICAgICogY2FuIGVuYWJsZSBpbnRlcnJ1cHRzIGFnYWluLiAqLyBcDQotICAgICAgICAgICAgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7ICAgICAgICAgICBcDQotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIH0NCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkJCQl7CQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJZXh0ZXJuIHZvbGF0aWxlIFVCYXNlVHlwZV90IHV4Q3JpdGljYWxOZXN0aW5nOwkJCQlcDQorCQkJCQkJCQkJCS8qIEludGVycnVwdHMgYXJlIGRpc2FibGVkLCBzbyB3ZSBjYW4gKi8JCQkJCVwNCisJCQkJCQkJCQkJLyogYWNjZXNzIHRoZSB2YXJpYWJsZSBkaXJlY3RseS4gKi8JCQkJCQkJXA0KKwkJCQkJCQkJCQl1eENyaXRpY2FsTmVzdGluZy0tOwkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCWlmKCB1eENyaXRpY2FsTmVzdGluZyA9PSAwICkJCQkJCQkJCVwNCisJCQkJCQkJCQkJewkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCS8qIFRoZSBuZXN0aW5nIGhhcyB1bndvdW5kIGFuZCB3ZSAJCQkJCQlcDQorCQkJCQkJCQkJCQljYW4gZW5hYmxlIGludGVycnVwdHMgYWdhaW4uICovCQkJCQkJCVwNCisJCQkJCQkJCQkJCXBvcnRFTkFCTEVfSU5URVJSVVBUUygpOwkJCQkJCQkJXA0KKwkJCQkJCQkJCQl9CQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCX0NCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBUaGUgeWllbGQgbWFjcm8gbWFwcyBkaXJlY3RseSB0byB0aGUgdlBvcnRZaWVsZCgpIGZ1bmN0aW9uLiAqLw0KLSAgICB2b2lkIHZQb3J0WWllbGQoIHZvaWQgKTsNCi0gICAgI2RlZmluZSBwb3J0WUlFTEQoKSAgICB2UG9ydFlpZWxkKCkNCit2b2lkIHZQb3J0WWllbGQoIHZvaWQgKTsNCisjZGVmaW5lIHBvcnRZSUVMRCgpIHZQb3J0WWllbGQoKQ0KIA0KIC8qIHBvcnRZSUVMRF9GUk9NX0lTUigpIGRvZXMgbm90IGRpcmVjdGx5IGNhbGwgdlRhc2tTd2l0Y2hDb250ZXh0KCksIGJ1dCBpbnN0ZWFkDQotICogc2V0cyBhIGZsYWcgdG8gc2F5IHRoYXQgYSB5aWVsZCBoYXMgYmVlbiByZXF1ZXN0ZWQuICBUaGUgaW50ZXJydXB0IGV4aXQgY29kZQ0KLSAqIHRoZW4gY2hlY2tzIHRoaXMgZmxhZywgYW5kIGNhbGxzIHZUYXNrU3dpdGNoQ29udGV4dCgpIGJlZm9yZSByZXN0b3JpbmcgYSB0YXNrDQotICogY29udGV4dCwgaWYgdGhlIGZsYWcgaXMgbm90IGZhbHNlLiAgVGhpcyBpcyBkb25lIHRvIHByZXZlbnQgbXVsdGlwbGUgY2FsbHMgdG8NCi0gKiB2VGFza1N3aXRjaENvbnRleHQoKSBiZWluZyBtYWRlIGZyb20gYSBzaW5nbGUgaW50ZXJydXB0LCBhcyBhIHNpbmdsZSBpbnRlcnJ1cHQNCi0gKiBjYW4gcmVzdWx0IGluIG11bHRpcGxlIHBlcmlwaGVyYWxzIGJlaW5nIHNlcnZpY2VkLiAqLw0KLSAgICBleHRlcm4gdm9sYXRpbGUgdWludDMyX3QgdWxUYXNrU3dpdGNoUmVxdWVzdGVkOw0KLSAgICAjZGVmaW5lIHBvcnRZSUVMRF9GUk9NX0lTUiggeCApICAgIGlmKCAoIHggKSAhPSBwZEZBTFNFICkgdWxUYXNrU3dpdGNoUmVxdWVzdGVkID0gMQ0KK3NldHMgYSBmbGFnIHRvIHNheSB0aGF0IGEgeWllbGQgaGFzIGJlZW4gcmVxdWVzdGVkLiAgVGhlIGludGVycnVwdCBleGl0IGNvZGUNCit0aGVuIGNoZWNrcyB0aGlzIGZsYWcsIGFuZCBjYWxscyB2VGFza1N3aXRjaENvbnRleHQoKSBiZWZvcmUgcmVzdG9yaW5nIGEgdGFzaw0KK2NvbnRleHQsIGlmIHRoZSBmbGFnIGlzIG5vdCBmYWxzZS4gIFRoaXMgaXMgZG9uZSB0byBwcmV2ZW50IG11bHRpcGxlIGNhbGxzIHRvDQordlRhc2tTd2l0Y2hDb250ZXh0KCkgYmVpbmcgbWFkZSBmcm9tIGEgc2luZ2xlIGludGVycnVwdCwgYXMgYSBzaW5nbGUgaW50ZXJydXB0DQorY2FuIHJlc3VsdCBpbiBtdWx0aXBsZSBwZXJpcGhlcmFscyBiZWluZyBzZXJ2aWNlZC4gKi8NCitleHRlcm4gdm9sYXRpbGUgdWludDMyX3QgdWxUYXNrU3dpdGNoUmVxdWVzdGVkOw0KKyNkZWZpbmUgcG9ydFlJRUxEX0ZST01fSVNSKCB4ICkgaWYoICggeCApICE9IHBkRkFMU0UgKSB1bFRhc2tTd2l0Y2hSZXF1ZXN0ZWQgPSAxDQogDQotICAgICNpZiAoIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiA9PSAxICkNCisjaWYoIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiA9PSAxICkNCiANCi0vKiBHZW5lcmljIGhlbHBlciBmdW5jdGlvbi4gKi8NCi0gICAgICAgIF9fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgc3RhdGljIGlubGluZSB1aW50OF90IHVjUG9ydENvdW50TGVhZGluZ1plcm9zKCB1aW50MzJfdCB1bEJpdG1hcCApDQotICAgICAgICB7DQotICAgICAgICAgICAgdWludDhfdCB1Y1JldHVybjsNCisJLyogR2VuZXJpYyBoZWxwZXIgZnVuY3Rpb24uICovDQorCV9fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgc3RhdGljIGlubGluZSB1aW50OF90IHVjUG9ydENvdW50TGVhZGluZ1plcm9zKCB1aW50MzJfdCB1bEJpdG1hcCApDQorCXsNCisJdWludDhfdCB1Y1JldHVybjsNCiANCi0gICAgICAgICAgICBfX2FzbSB2b2xhdGlsZSAoICJjbHogJTAsICUxIiA6ICI9ciIgKCB1Y1JldHVybiApIDogInIiICggdWxCaXRtYXAgKSApOw0KKwkJX19hc20gdm9sYXRpbGUgKCAiY2x6ICUwLCAlMSIgOiAiPXIiICggdWNSZXR1cm4gKSA6ICJyIiAoIHVsQml0bWFwICkgKTsNCisJCXJldHVybiB1Y1JldHVybjsNCisJfQ0KIA0KLSAgICAgICAgICAgIHJldHVybiB1Y1JldHVybjsNCi0gICAgICAgIH0NCisJLyogQ2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24uICovDQorCSNpZiggY29uZmlnTUFYX1BSSU9SSVRJRVMgPiAzMiApDQorCQkjZXJyb3IgY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OIGNhbiBvbmx5IGJlIHNldCB0byAxIHdoZW4gY29uZmlnTUFYX1BSSU9SSVRJRVMgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDMyLiAgSXQgaXMgdmVyeSByYXJlIHRoYXQgYSBzeXN0ZW0gcmVxdWlyZXMgbW9yZSB0aGFuIDEwIHRvIDE1IGRpZmZlcmVuY2UgcHJpb3JpdGllcyBhcyB0YXNrcyB0aGF0IHNoYXJlIGEgcHJpb3JpdHkgd2lsbCB0aW1lIHNsaWNlLg0KKwkjZW5kaWYNCiANCi0vKiBDaGVjayB0aGUgY29uZmlndXJhdGlvbi4gKi8NCi0gICAgICAgICNpZiAoIGNvbmZpZ01BWF9QUklPUklUSUVTID4gMzIgKQ0KLSAgICAgICAgICAgICNlcnJvciBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gY2FuIG9ubHkgYmUgc2V0IHRvIDEgd2hlbiBjb25maWdNQVhfUFJJT1JJVElFUyBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMzIuICBJdCBpcyB2ZXJ5IHJhcmUgdGhhdCBhIHN5c3RlbSByZXF1aXJlcyBtb3JlIHRoYW4gMTAgdG8gMTUgZGlmZmVyZW5jZSBwcmlvcml0aWVzIGFzIHRhc2tzIHRoYXQgc2hhcmUgYSBwcmlvcml0eSB3aWxsIHRpbWUgc2xpY2UuDQotICAgICAgICAjZW5kaWYNCisJLyogU3RvcmUvY2xlYXIgdGhlIHJlYWR5IHByaW9yaXRpZXMgaW4gYSBiaXQgbWFwLiAqLw0KKwkjZGVmaW5lIHBvcnRSRUNPUkRfUkVBRFlfUFJJT1JJVFkoIHV4UHJpb3JpdHksIHV4UmVhZHlQcmlvcml0aWVzICkgKCB1eFJlYWR5UHJpb3JpdGllcyApIHw9ICggMVVMIDw8ICggdXhQcmlvcml0eSApICkNCisJI2RlZmluZSBwb3J0UkVTRVRfUkVBRFlfUFJJT1JJVFkoIHV4UHJpb3JpdHksIHV4UmVhZHlQcmlvcml0aWVzICkgKCB1eFJlYWR5UHJpb3JpdGllcyApICY9IH4oIDFVTCA8PCAoIHV4UHJpb3JpdHkgKSApDQogDQotLyogU3RvcmUvY2xlYXIgdGhlIHJlYWR5IHByaW9yaXRpZXMgaW4gYSBiaXQgbWFwLiAqLw0KLSAgICAgICAgI2RlZmluZSBwb3J0UkVDT1JEX1JFQURZX1BSSU9SSVRZKCB1eFByaW9yaXR5LCB1eFJlYWR5UHJpb3JpdGllcyApICAgICggdXhSZWFkeVByaW9yaXRpZXMgKSB8PSAoIDFVTCA8PCAoIHV4UHJpb3JpdHkgKSApDQotICAgICAgICAjZGVmaW5lIHBvcnRSRVNFVF9SRUFEWV9QUklPUklUWSggdXhQcmlvcml0eSwgdXhSZWFkeVByaW9yaXRpZXMgKSAgICAgKCB1eFJlYWR5UHJpb3JpdGllcyApICY9IH4oIDFVTCA8PCAoIHV4UHJpb3JpdHkgKSApDQorCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKwkjZGVmaW5lIHBvcnRHRVRfSElHSEVTVF9QUklPUklUWSggdXhUb3BQcmlvcml0eSwgdXhSZWFkeVByaW9yaXRpZXMgKSB1eFRvcFByaW9yaXR5ID0gKCAzMVVMIC0gKCB1aW50MzJfdCApIHVjUG9ydENvdW50TGVhZGluZ1plcm9zKCAoIHV4UmVhZHlQcmlvcml0aWVzICkgKSApDQogDQotICAgICAgICAjZGVmaW5lIHBvcnRHRVRfSElHSEVTVF9QUklPUklUWSggdXhUb3BQcmlvcml0eSwgdXhSZWFkeVByaW9yaXRpZXMgKSAgICB1eFRvcFByaW9yaXR5ID0gKCAzMVVMIC0gKCB1aW50MzJfdCApIHVjUG9ydENvdW50TGVhZGluZ1plcm9zKCAoIHV4UmVhZHlQcmlvcml0aWVzICkgKSApDQotDQotICAgICNlbmRpZiAvKiBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gKi8NCisjZW5kaWYgLyogY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OICovDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogSGFyZHdhcmUgc3BlY2lmaWNzLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVCAgICA0DQotICAgICNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSCAgICAgICggLTEgKQ0KLSAgICAjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUyAgICAoICggVGlja1R5cGVfdCApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KLSAgICAjZGVmaW5lIHBvcnROT1AoKSAgICBhc20gdm9sYXRpbGUgKCAiTk9QIiApDQorI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQJCQk0DQorI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RICQkJKCAtMSApDQorI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMJCQkoICggVGlja1R5cGVfdCApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KKyNkZWZpbmUgcG9ydE5PUCgpCQkJCQlhc20gdm9sYXRpbGUgKCAiTk9QIiApDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQotICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KLSAgICAjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgICAgICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgaXMgdXNlZCBieSB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uIGhhbmRsZXIuICBJdCBpcw0KLSAqIGZpbGxlZCB3aXRoIHRoZSBNaWNyb0JsYXplIGNvbnRleHQgYXMgaXQgd2FzIGF0IHRoZSB0aW1lIHRoZSBleGNlcHRpb24gb2NjdXJyZWQuDQotICogVGhpcyBpcyBkb25lIGFzIGFuIGFpZCB0byBkZWJ1Z2dpbmcgZXhjZXB0aW9uIG9jY3VycmVuY2VzLiAqLw0KLSAgICB0eXBlZGVmIHN0cnVjdCBQT1JUX1JFR0lTVEVSX0RVTVANCi0gICAgew0KLSAgICAgICAgLyogVGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgbWVtYmVycyBob2xkIHRoZSB2YWx1ZXMgb2YgdGhlIE1pY3JvQmxhemUNCi0gICAgICAgICAqIHJlZ2lzdGVycyBhdCB0aGUgdGltZSB0aGUgZXhjZXB0aW9uIHdhcyByYWlzZWQuICovDQotICAgICAgICB1aW50MzJfdCB1bFIxX1NQOw0KLSAgICAgICAgdWludDMyX3QgdWxSMl9zbWFsbF9kYXRhX2FyZWE7DQotICAgICAgICB1aW50MzJfdCB1bFIzOw0KLSAgICAgICAgdWludDMyX3QgdWxSNDsNCi0gICAgICAgIHVpbnQzMl90IHVsUjU7DQotICAgICAgICB1aW50MzJfdCB1bFI2Ow0KLSAgICAgICAgdWludDMyX3QgdWxSNzsNCi0gICAgICAgIHVpbnQzMl90IHVsUjg7DQotICAgICAgICB1aW50MzJfdCB1bFI5Ow0KLSAgICAgICAgdWludDMyX3QgdWxSMTA7DQotICAgICAgICB1aW50MzJfdCB1bFIxMTsNCi0gICAgICAgIHVpbnQzMl90IHVsUjEyOw0KLSAgICAgICAgdWludDMyX3QgdWxSMTNfcmVhZF93cml0ZV9zbWFsbF9kYXRhX2FyZWE7DQotICAgICAgICB1aW50MzJfdCB1bFIxNF9yZXR1cm5fYWRkcmVzc19mcm9tX2ludGVycnVwdDsNCi0gICAgICAgIHVpbnQzMl90IHVsUjE1X3JldHVybl9hZGRyZXNzX2Zyb21fc3Vicm91dGluZTsNCi0gICAgICAgIHVpbnQzMl90IHVsUjE2X3JldHVybl9hZGRyZXNzX2Zyb21fdHJhcDsNCi0gICAgICAgIHVpbnQzMl90IHVsUjE3X3JldHVybl9hZGRyZXNzX2Zyb21fZXhjZXB0aW9uczsgLyogVGhlIGV4Y2VwdGlvbiBlbnRyeSBjb2RlIHdpbGwgY29weSB0aGUgQlRSIGludG8gUjE3IGlmIHRoZSBleGNlcHRpb24gb2NjdXJyZWQgaW4gdGhlIGRlbGF5IHNsb3Qgb2YgYSBicmFuY2ggaW5zdHJ1Y3Rpb24uICovDQotICAgICAgICB1aW50MzJfdCB1bFIxODsNCi0gICAgICAgIHVpbnQzMl90IHVsUjE5Ow0KLSAgICAgICAgdWludDMyX3QgdWxSMjA7DQotICAgICAgICB1aW50MzJfdCB1bFIyMTsNCi0gICAgICAgIHVpbnQzMl90IHVsUjIyOw0KLSAgICAgICAgdWludDMyX3QgdWxSMjM7DQotICAgICAgICB1aW50MzJfdCB1bFIyNDsNCi0gICAgICAgIHVpbnQzMl90IHVsUjI1Ow0KLSAgICAgICAgdWludDMyX3QgdWxSMjY7DQotICAgICAgICB1aW50MzJfdCB1bFIyNzsNCi0gICAgICAgIHVpbnQzMl90IHVsUjI4Ow0KLSAgICAgICAgdWludDMyX3QgdWxSMjk7DQotICAgICAgICB1aW50MzJfdCB1bFIzMDsNCi0gICAgICAgIHVpbnQzMl90IHVsUjMxOw0KLSAgICAgICAgdWludDMyX3QgdWxQQzsNCi0gICAgICAgIHVpbnQzMl90IHVsRVNSOw0KLSAgICAgICAgdWludDMyX3QgdWxNU1I7DQotICAgICAgICB1aW50MzJfdCB1bEVBUjsNCi0gICAgICAgIHVpbnQzMl90IHVsRlNSOw0KLSAgICAgICAgdWludDMyX3QgdWxFRFI7DQorZmlsbGVkIHdpdGggdGhlIE1pY3JvQmxhemUgY29udGV4dCBhcyBpdCB3YXMgYXQgdGhlIHRpbWUgdGhlIGV4Y2VwdGlvbiBvY2N1cnJlZC4NCitUaGlzIGlzIGRvbmUgYXMgYW4gYWlkIHRvIGRlYnVnZ2luZyBleGNlcHRpb24gb2NjdXJyZW5jZXMuICovDQordHlwZWRlZiBzdHJ1Y3QgUE9SVF9SRUdJU1RFUl9EVU1QDQorew0KKwkvKiBUaGUgZm9sbG93aW5nIHN0cnVjdHVyZSBtZW1iZXJzIGhvbGQgdGhlIHZhbHVlcyBvZiB0aGUgTWljcm9CbGF6ZQ0KKwlyZWdpc3RlcnMgYXQgdGhlIHRpbWUgdGhlIGV4Y2VwdGlvbiB3YXMgcmFpc2VkLiAqLw0KKwl1aW50MzJfdCB1bFIxX1NQOw0KKwl1aW50MzJfdCB1bFIyX3NtYWxsX2RhdGFfYXJlYTsNCisJdWludDMyX3QgdWxSMzsNCisJdWludDMyX3QgdWxSNDsNCisJdWludDMyX3QgdWxSNTsNCisJdWludDMyX3QgdWxSNjsNCisJdWludDMyX3QgdWxSNzsNCisJdWludDMyX3QgdWxSODsNCisJdWludDMyX3QgdWxSOTsNCisJdWludDMyX3QgdWxSMTA7DQorCXVpbnQzMl90IHVsUjExOw0KKwl1aW50MzJfdCB1bFIxMjsNCisJdWludDMyX3QgdWxSMTNfcmVhZF93cml0ZV9zbWFsbF9kYXRhX2FyZWE7DQorCXVpbnQzMl90IHVsUjE0X3JldHVybl9hZGRyZXNzX2Zyb21faW50ZXJydXB0Ow0KKwl1aW50MzJfdCB1bFIxNV9yZXR1cm5fYWRkcmVzc19mcm9tX3N1YnJvdXRpbmU7DQorCXVpbnQzMl90IHVsUjE2X3JldHVybl9hZGRyZXNzX2Zyb21fdHJhcDsNCisJdWludDMyX3QgdWxSMTdfcmV0dXJuX2FkZHJlc3NfZnJvbV9leGNlcHRpb25zOyAvKiBUaGUgZXhjZXB0aW9uIGVudHJ5IGNvZGUgd2lsbCBjb3B5IHRoZSBCVFIgaW50byBSMTcgaWYgdGhlIGV4Y2VwdGlvbiBvY2N1cnJlZCBpbiB0aGUgZGVsYXkgc2xvdCBvZiBhIGJyYW5jaCBpbnN0cnVjdGlvbi4gKi8NCisJdWludDMyX3QgdWxSMTg7DQorCXVpbnQzMl90IHVsUjE5Ow0KKwl1aW50MzJfdCB1bFIyMDsNCisJdWludDMyX3QgdWxSMjE7DQorCXVpbnQzMl90IHVsUjIyOw0KKwl1aW50MzJfdCB1bFIyMzsNCisJdWludDMyX3QgdWxSMjQ7DQorCXVpbnQzMl90IHVsUjI1Ow0KKwl1aW50MzJfdCB1bFIyNjsNCisJdWludDMyX3QgdWxSMjc7DQorCXVpbnQzMl90IHVsUjI4Ow0KKwl1aW50MzJfdCB1bFIyOTsNCisJdWludDMyX3QgdWxSMzA7DQorCXVpbnQzMl90IHVsUjMxOw0KKwl1aW50MzJfdCB1bFBDOw0KKwl1aW50MzJfdCB1bEVTUjsNCisJdWludDMyX3QgdWxNU1I7DQorCXVpbnQzMl90IHVsRUFSOw0KKwl1aW50MzJfdCB1bEZTUjsNCisJdWludDMyX3QgdWxFRFI7DQogDQotICAgICAgICAvKiBBIGh1bWFuIHJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHRoZSBleGNlcHRpb24gY2F1c2UuICBUaGUgc3RyaW5ncyB1c2VkDQotICAgICAgICAgKiBhcmUgdGhlIHNhbWUgYXMgdGhlICNkZWZpbmUgY29uc3RhbnQgbmFtZXMgZm91bmQgaW4gdGhlDQotICAgICAgICAgKiBtaWNyb2JsYXplX2V4Y2VwdGlvbnNfaS5oIGhlYWRlciBmaWxlICovDQotICAgICAgICBpbnQ4X3QgKiBwY0V4Y2VwdGlvbkNhdXNlOw0KKwkvKiBBIGh1bWFuIHJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHRoZSBleGNlcHRpb24gY2F1c2UuICBUaGUgc3RyaW5ncyB1c2VkDQorCWFyZSB0aGUgc2FtZSBhcyB0aGUgI2RlZmluZSBjb25zdGFudCBuYW1lcyBmb3VuZCBpbiB0aGUNCisJbWljcm9ibGF6ZV9leGNlcHRpb25zX2kuaCBoZWFkZXIgZmlsZSAqLw0KKwlpbnQ4X3QgKnBjRXhjZXB0aW9uQ2F1c2U7DQogDQotICAgICAgICAvKiBUaGUgaHVtYW4gcmVhZGFibGUgbmFtZSBvZiB0aGUgdGFzayB0aGF0IHdhcyBydW5uaW5nIGF0IHRoZSB0aW1lIHRoZQ0KLSAgICAgICAgICogZXhjZXB0aW9uIG9jY3VycmVkLiAgVGhpcyBpcyB0aGUgbmFtZSB0aGF0IHdhcyBnaXZlbiB0byB0aGUgdGFzayB3aGVuIHRoZQ0KLSAgICAgICAgICogdGFzayB3YXMgY3JlYXRlZCB1c2luZyB0aGUgRnJlZVJUT1MgeFRhc2tDcmVhdGUoKSBBUEkgZnVuY3Rpb24uICovDQotICAgICAgICBjaGFyICogcGNDdXJyZW50VGFza05hbWU7DQorCS8qIFRoZSBodW1hbiByZWFkYWJsZSBuYW1lIG9mIHRoZSB0YXNrIHRoYXQgd2FzIHJ1bm5pbmcgYXQgdGhlIHRpbWUgdGhlDQorCWV4Y2VwdGlvbiBvY2N1cnJlZC4gIFRoaXMgaXMgdGhlIG5hbWUgdGhhdCB3YXMgZ2l2ZW4gdG8gdGhlIHRhc2sgd2hlbiB0aGUNCisJdGFzayB3YXMgY3JlYXRlZCB1c2luZyB0aGUgRnJlZVJUT1MgeFRhc2tDcmVhdGUoKSBBUEkgZnVuY3Rpb24uICovDQorCWNoYXIgKnBjQ3VycmVudFRhc2tOYW1lOw0KIA0KLSAgICAgICAgLyogVGhlIGhhbmRsZSBvZiB0aGUgdGFzayB0aGF0IHdhcyBydW5uaW5nIGEgdGhlIHRpbWUgdGhlIGV4Y2VwdGlvbg0KLSAgICAgICAgICogb2NjdXJyZWQuICovDQotICAgICAgICB2b2lkICogeEN1cnJlbnRUYXNrSGFuZGxlOw0KLSAgICB9IHhQb3J0UmVnaXN0ZXJEdW1wOw0KKwkvKiBUaGUgaGFuZGxlIG9mIHRoZSB0YXNrIHRoYXQgd2FzIHJ1bm5pbmcgYSB0aGUgdGltZSB0aGUgZXhjZXB0aW9uDQorCW9jY3VycmVkLiAqLw0KKwl2b2lkICogeEN1cnJlbnRUYXNrSGFuZGxlOw0KKw0KK30geFBvcnRSZWdpc3RlckR1bXA7DQogDQogDQogLyoNCkBAIC0yNTUsOSArMjUzLDcgQEAKICAqIHBkUEFTUyBpcyByZXR1cm5lZCBpZiB0aGUgZnVuY3Rpb24gZXhlY3V0ZXMgc3VjY2Vzc2Z1bGx5LiAgQW55IG90aGVyIHZhbHVlDQogICogYmVpbmcgcmV0dXJuZWQgaW5kaWNhdGVzIHRoYXQgdGhlIGZ1bmN0aW9uIGRpZCBub3QgZXhlY3V0ZSBjb3JyZWN0bHkuDQogICovDQotICAgIEJhc2VUeXBlX3QgeFBvcnRJbnN0YWxsSW50ZXJydXB0SGFuZGxlciggdWludDhfdCB1Y0ludGVycnVwdElELA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhJbnRlcnJ1cHRIYW5kbGVyIHB4SGFuZGxlciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICogcHZDYWxsQmFja1JlZiApOw0KK0Jhc2VUeXBlX3QgeFBvcnRJbnN0YWxsSW50ZXJydXB0SGFuZGxlciggdWludDhfdCB1Y0ludGVycnVwdElELCBYSW50ZXJydXB0SGFuZGxlciBweEhhbmRsZXIsIHZvaWQgKnB2Q2FsbEJhY2tSZWYgKTsNCiANCiANCiAvKg0KQEAgLTI3OCw3ICsyNzQsNyBAQAogICogWFBBUl9JTlRDXzBfR1BJT18xX1ZFQ19JRCAgICAgIC0gIGZvciB0aGUgYnV0dG9uIGlucHV0cy4NCiAgKg0KICAqLw0KLSAgICB2b2lkIHZQb3J0RW5hYmxlSW50ZXJydXB0KCB1aW50OF90IHVjSW50ZXJydXB0SUQgKTsNCit2b2lkIHZQb3J0RW5hYmxlSW50ZXJydXB0KCB1aW50OF90IHVjSW50ZXJydXB0SUQgKTsNCiANCiAvKg0KICAqIERpc2FibGVzIHRoZSBpbnRlcnJ1cHQsIHdpdGhpbiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIsIGZvciB0aGUgcGVyaXBoZXJhbA0KQEAgLTI5OCw3ICsyOTQsNyBAQAogICogWFBBUl9JTlRDXzBfR1BJT18xX1ZFQ19JRCAgICAgIC0gIGZvciB0aGUgYnV0dG9uIGlucHV0cy4NCiAgKg0KICAqLw0KLSAgICB2b2lkIHZQb3J0RGlzYWJsZUludGVycnVwdCggdWludDhfdCB1Y0ludGVycnVwdElEICk7DQordm9pZCB2UG9ydERpc2FibGVJbnRlcnJ1cHQoIHVpbnQ4X3QgdWNJbnRlcnJ1cHRJRCApOw0KIA0KIC8qDQogICogVGhpcyBpcyBhbiBhcHBsaWNhdGlvbiBkZWZpbmVkIGNhbGxiYWNrIGZ1bmN0aW9uIHVzZWQgdG8gaW5zdGFsbCB0aGUgdGljaw0KQEAgLTMxMCw3ICszMDYsNyBAQAogICogVGhlIG5hbWUgb2YgdGhlIGludGVycnVwdCBoYW5kbGVyIHRoYXQgc2hvdWxkIGJlIGluc3RhbGxlZCBpcyB2UG9ydFRpY2tJU1IoKSwNCiAgKiB3aGljaCB0aGUgZnVuY3Rpb24gYmVsb3cgZGVjbGFyZXMgYXMgYW4gZXh0ZXJuLg0KICAqLw0KLSAgICB2b2lkIHZBcHBsaWNhdGlvblNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKTsNCit2b2lkIHZBcHBsaWNhdGlvblNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKTsNCiANCiAvKg0KICAqIFRoaXMgaXMgYW4gYXBwbGljYXRpb24gZGVmaW5lZCBjYWxsYmFjayBmdW5jdGlvbiB1c2VkIHRvIGNsZWFyIHdoaWNoZXZlcg0KQEAgLTMyMyw3ICszMTksNyBAQAogICogaW1wbGVtZW50YXRpb24gc2hvdWxkIG5vdCByZXF1aXJlIG1vZGlmaWNhdGlvbiBwcm92aWRlZCB0aGUgZXhhbXBsZSBkZWZpbml0aW9uDQogICogb2YgdkFwcGxpY2F0aW9uU2V0dXBUaW1lckludGVycnVwdCgpIGlzIGFsc28gbm90IG1vZGlmaWVkLg0KICAqLw0KLSAgICB2b2lkIHZBcHBsaWNhdGlvbkNsZWFyVGltZXJJbnRlcnJ1cHQoIHZvaWQgKTsNCit2b2lkIHZBcHBsaWNhdGlvbkNsZWFyVGltZXJJbnRlcnJ1cHQoIHZvaWQgKTsNCiANCiAvKg0KICAqIHZQb3J0RXhjZXB0aW9uc0luc3RhbGxIYW5kbGVycygpIGlzIG9ubHkgYXZhaWxhYmxlIHdoZW4gdGhlIE1pY3JvQmxhemUNCkBAIC0zNDYsNyArMzQyLDcgQEAKICAqIFNlZSB0aGUgZGVzY3JpcHRpb24gb2YgdkFwcGxpY2F0aW9uRXhjZXB0aW9uUmVnaXN0ZXJEdW1wKCkgZm9yIGluZm9ybWF0aW9uDQogICogb24gdGhlIHByb2Nlc3NpbmcgcGVyZm9ybWVkIGJ5IHRoZSBGcmVlUlRPUyBleGNlcHRpb24gaGFuZGxlci4NCiAgKi8NCi0gICAgdm9pZCB2UG9ydEV4Y2VwdGlvbnNJbnN0YWxsSGFuZGxlcnMoIHZvaWQgKTsNCit2b2lkIHZQb3J0RXhjZXB0aW9uc0luc3RhbGxIYW5kbGVycyggdm9pZCApOw0KIA0KIC8qDQogICogVGhlIEZyZWVSVE9TIGV4Y2VwdGlvbiBoYW5kbGVyIGZpbGxzIGFuIHhQb3J0UmVnaXN0ZXJEdW1wIHN0cnVjdHVyZSAoZGVmaW5lZA0KQEAgLTM2MiwxMSArMzU4LDEyIEBACiAgKiByZWdpc3RlciBkdW1wIGluZm9ybWF0aW9uLiAgRm9yIGV4YW1wbGUsIGFuIGltcGxlbWVudGF0aW9uIGNvdWxkIGJlIHByb3ZpZGVkDQogICogdGhhdCB3cm90ZSB0aGUgcmVnaXN0ZXIgZHVtcCBkYXRhIHRvIGEgZGlzcGxheSwgb3IgYSBVQVJUIHBvcnQuDQogICovDQotICAgIHZvaWQgdkFwcGxpY2F0aW9uRXhjZXB0aW9uUmVnaXN0ZXJEdW1wKCB4UG9ydFJlZ2lzdGVyRHVtcCAqIHhSZWdpc3RlckR1bXAgKTsNCit2b2lkIHZBcHBsaWNhdGlvbkV4Y2VwdGlvblJlZ2lzdGVyRHVtcCggeFBvcnRSZWdpc3RlckR1bXAgKnhSZWdpc3RlckR1bXAgKTsNCiANCiANCi0gICAgI2lmZGVmIF9fY3BsdXNwbHVzDQotICAgICAgICB9DQotICAgICNlbmRpZg0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCiANCiAjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8NCisNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9HQ0MvTmlvc0lJL3BvcnQuYyBiL3BvcnRhYmxlL0dDQy9OaW9zSUkvcG9ydC5jCmluZGV4IDg0NWQ1MGMuLjU3YjUzMzcgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0dDQy9OaW9zSUkvcG9ydC5jCisrKyBiL3BvcnRhYmxlL0dDQy9OaW9zSUkvcG9ydC5jCkBAIC0yNiw4ICsyNiw4IEBACiAgKi8NCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgTklPUzIgcG9ydC4NCi0qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorICogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFibGUuaCBmb3IgdGhlIE5JT1MyIHBvcnQuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBTdGFuZGFyZCBJbmNsdWRlcy4gKi8NCiAjaW5jbHVkZSA8c3RyaW5nLmg+DQpAQCAtNDMsMTEgKzQzLDExIEBACiAjaW5jbHVkZSAidGFzay5oIg0KIA0KIC8qIEludGVycnVwdHMgYXJlIGVuYWJsZWQuICovDQotI2RlZmluZSBwb3J0SU5JVElBTF9FU1RBVFVTICAgICggU3RhY2tUeXBlX3QgKSAweDAxDQorI2RlZmluZSBwb3J0SU5JVElBTF9FU1RBVFVTICAgICAoIFN0YWNrVHlwZV90ICkgMHgwMSANCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0vKg0KKy8qIA0KICAqIFNldHVwIHRoZSB0aW1lciB0byBnZW5lcmF0ZSB0aGUgdGljayBpbnRlcnJ1cHRzLg0KICAqLw0KIHN0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKTsNCkBAIC01NSw4MCArNTUsNzcgQEAKIC8qDQogICogQ2FsbCBiYWNrIGZvciB0aGUgYWxhcm0gZnVuY3Rpb24uDQogICovDQotdm9pZCB2UG9ydFN5c1RpY2tIYW5kbGVyKCB2b2lkICogY29udGV4dCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGFsdF91MzIgaWQgKTsNCit2b2lkIHZQb3J0U3lzVGlja0hhbmRsZXIoIHZvaWQgKiBjb250ZXh0LCBhbHRfdTMyIGlkICk7DQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQotc3RhdGljIHZvaWQgcHJ2UmVhZEdwKCB1aW50MzJfdCAqIHVsVmFsdWUgKQ0KK3N0YXRpYyB2b2lkIHBydlJlYWRHcCggdWludDMyX3QgKnVsVmFsdWUgKQ0KIHsNCi0gICAgYXNtICggInN0dyBncCwgKCUwKSIgOjoiciIgKCB1bFZhbHVlICkgKTsNCisJYXNtKCAic3R3IGdwLCAoJTApIiA6OiAiciIodWxWYWx1ZSkgKTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQotLyoNCi0gKiBTZWUgaGVhZGVyIGZpbGUgZm9yIGRlc2NyaXB0aW9uLg0KKy8qIA0KKyAqIFNlZSBoZWFkZXIgZmlsZSBmb3IgZGVzY3JpcHRpb24uIA0KICAqLw0KLVN0YWNrVHlwZV90ICogcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqIHB4VG9wT2ZTdGFjaywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFza0Z1bmN0aW9uX3QgcHhDb2RlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICogcHZQYXJhbWV0ZXJzICkNCi17DQotICAgIFN0YWNrVHlwZV90ICogcHhGcmFtZVBvaW50ZXIgPSBweFRvcE9mU3RhY2sgLSAxOw0KLSAgICBTdGFja1R5cGVfdCB4R2xvYmFsUG9pbnRlcjsNCitTdGFja1R5cGVfdCAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqcHhUb3BPZlN0YWNrLCBUYXNrRnVuY3Rpb25fdCBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycyApDQoreyAgICANCitTdGFja1R5cGVfdCAqcHhGcmFtZVBvaW50ZXIgPSBweFRvcE9mU3RhY2sgLSAxOw0KK1N0YWNrVHlwZV90IHhHbG9iYWxQb2ludGVyOw0KIA0KLSAgICBwcnZSZWFkR3AoICZ4R2xvYmFsUG9pbnRlciApOw0KKyAgICBwcnZSZWFkR3AoICZ4R2xvYmFsUG9pbnRlciApOyANCiANCiAgICAgLyogRW5kIG9mIHN0YWNrIG1hcmtlci4gKi8NCiAgICAgKnB4VG9wT2ZTdGFjayA9IDB4ZGVhZGJlZWY7DQogICAgIHB4VG9wT2ZTdGFjay0tOw0KLQ0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB4RnJhbWVQb2ludGVyOw0KKyAgICANCisgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBweEZyYW1lUG9pbnRlcjsgDQogICAgIHB4VG9wT2ZTdGFjay0tOw0KLQ0KLSAgICAqcHhUb3BPZlN0YWNrID0geEdsb2JhbFBvaW50ZXI7DQotDQorICAgIA0KKyAgICAqcHhUb3BPZlN0YWNrID0geEdsb2JhbFBvaW50ZXI7IA0KKyAgICANCiAgICAgLyogU3BhY2UgZm9yIFIyMyB0byBSMTYuICovDQogICAgIHB4VG9wT2ZTdGFjayAtPSA5Ow0KIA0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB4Q29kZTsNCisgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBweENvZGU7IA0KICAgICBweFRvcE9mU3RhY2stLTsNCiANCi0gICAgKnB4VG9wT2ZTdGFjayA9IHBvcnRJTklUSUFMX0VTVEFUVVM7DQorICAgICpweFRvcE9mU3RhY2sgPSBwb3J0SU5JVElBTF9FU1RBVFVTOyANCiANCi0gICAgLyogU3BhY2UgZm9yIFIxNSB0byBSNS4gKi8NCisgICAgLyogU3BhY2UgZm9yIFIxNSB0byBSNS4gKi8gICAgDQogICAgIHB4VG9wT2ZTdGFjayAtPSAxMjsNCi0NCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwdlBhcmFtZXRlcnM7DQorICAgIA0KKyAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB2UGFyYW1ldGVyczsgDQogDQogICAgIC8qIFNwYWNlIGZvciBSMyB0byBSMSwgbXVsZGl2IGFuZCBSQS4gKi8NCiAgICAgcHhUb3BPZlN0YWNrIC09IDU7DQotDQorICAgIA0KICAgICByZXR1cm4gcHhUb3BPZlN0YWNrOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0vKg0KLSAqIFNlZSBoZWFkZXIgZmlsZSBmb3IgZGVzY3JpcHRpb24uDQorLyogDQorICogU2VlIGhlYWRlciBmaWxlIGZvciBkZXNjcmlwdGlvbi4gDQogICovDQogQmFzZVR5cGVfdCB4UG9ydFN0YXJ0U2NoZWR1bGVyKCB2b2lkICkNCiB7DQotICAgIC8qIFN0YXJ0IHRoZSB0aW1lciB0aGF0IGdlbmVyYXRlcyB0aGUgdGljayBJU1IuICBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZA0KLSAgICAgKiBoZXJlIGFscmVhZHkuICovDQotICAgIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoKTsNCisJLyogU3RhcnQgdGhlIHRpbWVyIHRoYXQgZ2VuZXJhdGVzIHRoZSB0aWNrIElTUi4gIEludGVycnVwdHMgYXJlIGRpc2FibGVkDQorCWhlcmUgYWxyZWFkeS4gKi8NCisJcHJ2U2V0dXBUaW1lckludGVycnVwdCgpOw0KKwkNCisJLyogU3RhcnQgdGhlIGZpcnN0IHRhc2suICovDQorICAgIGFzbSB2b2xhdGlsZSAoICAiIG1vdmlhIHIyLCByZXN0b3JlX3NwX2Zyb21fcHhDdXJyZW50VENCICAgICAgICBcbiINCisgICAgICAgICAgICAgICAgICAgICIgam1wIHIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiApOw0KIA0KLSAgICAvKiBTdGFydCB0aGUgZmlyc3QgdGFzay4gKi8NCi0gICAgYXNtIHZvbGF0aWxlICggIiBtb3ZpYSByMiwgcmVzdG9yZV9zcF9mcm9tX3B4Q3VycmVudFRDQiAgICAgICAgXG4iDQotICAgICAgICAgICAgICAgICAgICIgam1wIHIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiApOw0KLQ0KLSAgICAvKiBTaG91bGQgbm90IGdldCBoZXJlISAqLw0KLSAgICByZXR1cm4gMDsNCisJLyogU2hvdWxkIG5vdCBnZXQgaGVyZSEgKi8NCisJcmV0dXJuIDA7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQ0KIHsNCi0gICAgLyogSXQgaXMgdW5saWtlbHkgdGhhdCB0aGUgTklPUzIgcG9ydCB3aWxsIHJlcXVpcmUgdGhpcyBmdW5jdGlvbiBhcyB0aGVyZQ0KLSAgICAgKiBpcyBub3RoaW5nIHRvIHJldHVybiB0by4gICovDQorCS8qIEl0IGlzIHVubGlrZWx5IHRoYXQgdGhlIE5JT1MyIHBvcnQgd2lsbCByZXF1aXJlIHRoaXMgZnVuY3Rpb24gYXMgdGhlcmUNCisJaXMgbm90aGluZyB0byByZXR1cm4gdG8uICAqLw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCkBAIC0xMzgsNzEgKzEzNSw2OSBAQAogICovDQogdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICkNCiB7DQotICAgIC8qIFRyeSB0byByZWdpc3RlciB0aGUgaW50ZXJydXB0IGhhbmRsZXIuICovDQotICAgIGlmKCAtRUlOVkFMID09IGFsdF9pcnFfcmVnaXN0ZXIoIFNZU19DTEtfSVJRLCAweDAsIHZQb3J0U3lzVGlja0hhbmRsZXIgKSApDQotICAgIHsNCi0gICAgICAgIC8qIEZhaWxlZCB0byBpbnN0YWxsIHRoZSBJbnRlcnJ1cHQgSGFuZGxlci4gKi8NCi0gICAgICAgIGFzbSAoICJicmVhayIgKTsNCi0gICAgfQ0KLSAgICBlbHNlDQotICAgIHsNCi0gICAgICAgIC8qIENvbmZpZ3VyZSBTeXNUaWNrIHRvIGludGVycnVwdCBhdCB0aGUgcmVxdWVzdGVkIHJhdGUuICovDQotICAgICAgICBJT1dSX0FMVEVSQV9BVkFMT05fVElNRVJfQ09OVFJPTCggU1lTX0NMS19CQVNFLCBBTFRFUkFfQVZBTE9OX1RJTUVSX0NPTlRST0xfU1RPUF9NU0sgKTsNCi0gICAgICAgIElPV1JfQUxURVJBX0FWQUxPTl9USU1FUl9QRVJJT0RMKCBTWVNfQ0xLX0JBU0UsICggY29uZmlnQ1BVX0NMT0NLX0haIC8gY29uZmlnVElDS19SQVRFX0haICkgJiAweEZGRkYgKTsNCi0gICAgICAgIElPV1JfQUxURVJBX0FWQUxPTl9USU1FUl9QRVJJT0RIKCBTWVNfQ0xLX0JBU0UsICggY29uZmlnQ1BVX0NMT0NLX0haIC8gY29uZmlnVElDS19SQVRFX0haICkgPj4gMTYgKTsNCi0gICAgICAgIElPV1JfQUxURVJBX0FWQUxPTl9USU1FUl9DT05UUk9MKCBTWVNfQ0xLX0JBU0UsIEFMVEVSQV9BVkFMT05fVElNRVJfQ09OVFJPTF9DT05UX01TSyB8IEFMVEVSQV9BVkFMT05fVElNRVJfQ09OVFJPTF9TVEFSVF9NU0sgfCBBTFRFUkFfQVZBTE9OX1RJTUVSX0NPTlRST0xfSVRPX01TSyApOw0KLSAgICB9DQorCS8qIFRyeSB0byByZWdpc3RlciB0aGUgaW50ZXJydXB0IGhhbmRsZXIuICovDQorCWlmICggLUVJTlZBTCA9PSBhbHRfaXJxX3JlZ2lzdGVyKCBTWVNfQ0xLX0lSUSwgMHgwLCB2UG9ydFN5c1RpY2tIYW5kbGVyICkgKQ0KKwl7IA0KKwkJLyogRmFpbGVkIHRvIGluc3RhbGwgdGhlIEludGVycnVwdCBIYW5kbGVyLiAqLw0KKwkJYXNtKCAiYnJlYWsiICk7DQorCX0NCisJZWxzZQ0KKwl7DQorCQkvKiBDb25maWd1cmUgU3lzVGljayB0byBpbnRlcnJ1cHQgYXQgdGhlIHJlcXVlc3RlZCByYXRlLiAqLw0KKwkJSU9XUl9BTFRFUkFfQVZBTE9OX1RJTUVSX0NPTlRST0woIFNZU19DTEtfQkFTRSwgQUxURVJBX0FWQUxPTl9USU1FUl9DT05UUk9MX1NUT1BfTVNLICk7DQorCQlJT1dSX0FMVEVSQV9BVkFMT05fVElNRVJfUEVSSU9ETCggU1lTX0NMS19CQVNFLCAoIGNvbmZpZ0NQVV9DTE9DS19IWiAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApICYgMHhGRkZGICk7DQorCQlJT1dSX0FMVEVSQV9BVkFMT05fVElNRVJfUEVSSU9ESCggU1lTX0NMS19CQVNFLCAoIGNvbmZpZ0NQVV9DTE9DS19IWiAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApID4+IDE2ICk7DQorCQlJT1dSX0FMVEVSQV9BVkFMT05fVElNRVJfQ09OVFJPTCggU1lTX0NMS19CQVNFLCBBTFRFUkFfQVZBTE9OX1RJTUVSX0NPTlRST0xfQ09OVF9NU0sgfCBBTFRFUkFfQVZBTE9OX1RJTUVSX0NPTlRST0xfU1RBUlRfTVNLIHwgQUxURVJBX0FWQUxPTl9USU1FUl9DT05UUk9MX0lUT19NU0sgKTsJDQorCX0gDQogDQotICAgIC8qIENsZWFyIGFueSBhbHJlYWR5IHBlbmRpbmcgaW50ZXJydXB0cyBnZW5lcmF0ZWQgYnkgdGhlIFRpbWVyLiAqLw0KLSAgICBJT1dSX0FMVEVSQV9BVkFMT05fVElNRVJfU1RBVFVTKCBTWVNfQ0xLX0JBU0UsIH5BTFRFUkFfQVZBTE9OX1RJTUVSX1NUQVRVU19UT19NU0sgKTsNCisJLyogQ2xlYXIgYW55IGFscmVhZHkgcGVuZGluZyBpbnRlcnJ1cHRzIGdlbmVyYXRlZCBieSB0aGUgVGltZXIuICovDQorCUlPV1JfQUxURVJBX0FWQUxPTl9USU1FUl9TVEFUVVMoIFNZU19DTEtfQkFTRSwgfkFMVEVSQV9BVkFMT05fVElNRVJfU1RBVFVTX1RPX01TSyApOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi12b2lkIHZQb3J0U3lzVGlja0hhbmRsZXIoIHZvaWQgKiBjb250ZXh0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0X3UzMiBpZCApDQordm9pZCB2UG9ydFN5c1RpY2tIYW5kbGVyKCB2b2lkICogY29udGV4dCwgYWx0X3UzMiBpZCApDQogew0KLSAgICAvKiBJbmNyZW1lbnQgdGhlIGtlcm5lbCB0aWNrLiAqLw0KLSAgICBpZiggeFRhc2tJbmNyZW1lbnRUaWNrKCkgIT0gcGRGQUxTRSApDQotICAgIHsNCisJLyogSW5jcmVtZW50IHRoZSBrZXJuZWwgdGljay4gKi8NCisJaWYoIHhUYXNrSW5jcmVtZW50VGljaygpICE9IHBkRkFMU0UgKQ0KKwl7DQogICAgICAgICB2VGFza1N3aXRjaENvbnRleHQoKTsNCi0gICAgfQ0KLQ0KLSAgICAvKiBDbGVhciB0aGUgaW50ZXJydXB0LiAqLw0KLSAgICBJT1dSX0FMVEVSQV9BVkFMT05fVElNRVJfU1RBVFVTKCBTWVNfQ0xLX0JBU0UsIH5BTFRFUkFfQVZBTE9OX1RJTUVSX1NUQVRVU19UT19NU0sgKTsNCisJfQ0KKwkJDQorCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHQuICovDQorCUlPV1JfQUxURVJBX0FWQUxPTl9USU1FUl9TVEFUVVMoIFNZU19DTEtfQkFTRSwgfkFMVEVSQV9BVkFMT05fVElNRVJfU1RBVFVTX1RPX01TSyApOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiogVGhpcyBmdW5jdGlvbiBpcyBhIHJlLWltcGxlbWVudGF0aW9uIG9mIHRoZSBBbHRlcmEgcHJvdmlkZWQgZnVuY3Rpb24uDQogICogVGhlIGZ1bmN0aW9uIGlzIHJlLWltcGxlbWVudGVkIHRvIHByZXZlbnQgaXQgZnJvbSBlbmFibGluZyBhbiBpbnRlcnJ1cHQNCiAgKiB3aGVuIGl0IGlzIHJlZ2lzdGVyZWQuIEludGVycnVwdHMgc2hvdWxkIG9ubHkgYmUgZW5hYmxlZCBhZnRlciB0aGUgRnJlZVJUT1Mub3JnDQotICoga2VybmVsIGhhcyBpdHMgc2NoZWR1bGVyIHN0YXJ0ZWQgc28gdGhhdCBjb250ZXh0cyBhcmUgc2F2ZWQgYW5kIHN3aXRjaGVkDQorICoga2VybmVsIGhhcyBpdHMgc2NoZWR1bGVyIHN0YXJ0ZWQgc28gdGhhdCBjb250ZXh0cyBhcmUgc2F2ZWQgYW5kIHN3aXRjaGVkIA0KICAqIGNvcnJlY3RseS4NCiAgKi8NCi1pbnQgYWx0X2lycV9yZWdpc3RlciggYWx0X3UzMiBpZCwNCi0gICAgICAgICAgICAgICAgICAgICAgdm9pZCAqIGNvbnRleHQsDQotICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCAqIGhhbmRsZXIgKSggdm9pZCAqLCBhbHRfdTMyICkgKQ0KK2ludCBhbHRfaXJxX3JlZ2lzdGVyKCBhbHRfdTMyIGlkLCB2b2lkKiBjb250ZXh0LCB2b2lkICgqaGFuZGxlcikodm9pZCosIGFsdF91MzIpICkNCiB7DQotICAgIGludCByYyA9IC1FSU5WQUw7DQotICAgIGFsdF9pcnFfY29udGV4dCBzdGF0dXM7DQorCWludCByYyA9IC1FSU5WQUw7ICANCisJYWx0X2lycV9jb250ZXh0IHN0YXR1czsNCiANCi0gICAgaWYoIGlkIDwgQUxUX05JUlEgKQ0KLSAgICB7DQotICAgICAgICAvKg0KLSAgICAgICAgICogaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgd2hpbGUgdGhlIGhhbmRsZXIgdGFibGVzIGFyZSB1cGRhdGVkIHRvIGVuc3VyZQ0KLSAgICAgICAgICogdGhhdCBhbiBpbnRlcnJ1cHQgZG9lc24ndCBvY2N1ciB3aGlsZSB0aGUgdGFibGVzIGFyZSBpbiBhbiBpbmNvbnNpc3RlbnQNCi0gICAgICAgICAqIHN0YXRlLg0KLSAgICAgICAgICovDQotDQotICAgICAgICBzdGF0dXMgPSBhbHRfaXJxX2Rpc2FibGVfYWxsKCk7DQotDQotICAgICAgICBhbHRfaXJxWyBpZCBdLmhhbmRsZXIgPSBoYW5kbGVyOw0KLSAgICAgICAgYWx0X2lycVsgaWQgXS5jb250ZXh0ID0gY29udGV4dDsNCi0NCi0gICAgICAgIHJjID0gKCBoYW5kbGVyICkgPyBhbHRfaXJxX2VuYWJsZSggaWQgKSA6IGFsdF9pcnFfZGlzYWJsZSggaWQgKTsNCi0NCi0gICAgICAgIC8qIGFsdF9pcnFfZW5hYmxlX2FsbChzdGF0dXMpOyBUaGlzIGxpbmUgaXMgcmVtb3ZlZCB0byBwcmV2ZW50IHRoZSBpbnRlcnJ1cHQgZnJvbSBiZWluZyBpbW1lZGlhdGVseSBlbmFibGVkLiAqLw0KLSAgICB9DQotDQotICAgIHJldHVybiByYzsNCisJaWYgKGlkIDwgQUxUX05JUlEpDQorCXsNCisJCS8qIA0KKwkJICogaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgd2hpbGUgdGhlIGhhbmRsZXIgdGFibGVzIGFyZSB1cGRhdGVkIHRvIGVuc3VyZQ0KKwkJICogdGhhdCBhbiBpbnRlcnJ1cHQgZG9lc24ndCBvY2N1ciB3aGlsZSB0aGUgdGFibGVzIGFyZSBpbiBhbiBpbmNvbnNpc3RlbnQNCisJCSAqIHN0YXRlLg0KKwkJICovDQorCQ0KKwkJc3RhdHVzID0gYWx0X2lycV9kaXNhYmxlX2FsbCAoKTsNCisJDQorCQlhbHRfaXJxW2lkXS5oYW5kbGVyID0gaGFuZGxlcjsNCisJCWFsdF9pcnFbaWRdLmNvbnRleHQgPSBjb250ZXh0Ow0KKwkNCisJCXJjID0gKGhhbmRsZXIpID8gYWx0X2lycV9lbmFibGUgKGlkKTogYWx0X2lycV9kaXNhYmxlIChpZCk7DQorCQ0KKwkJLyogYWx0X2lycV9lbmFibGVfYWxsKHN0YXR1cyk7IFRoaXMgbGluZSBpcyByZW1vdmVkIHRvIHByZXZlbnQgdGhlIGludGVycnVwdCBmcm9tIGJlaW5nIGltbWVkaWF0ZWx5IGVuYWJsZWQuICovDQorCX0NCisgICAgDQorCXJldHVybiByYzsgDQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0dDQy9OaW9zSUkvcG9ydG1hY3JvLmggYi9wb3J0YWJsZS9HQ0MvTmlvc0lJL3BvcnRtYWNyby5oCmluZGV4IDcyNjNlMTkuLjM2OTVmZWYgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0dDQy9OaW9zSUkvcG9ydG1hY3JvLmgKKysrIGIvcG9ydGFibGUvR0NDL05pb3NJSS9wb3J0bWFjcm8uaApAQCAtMjYsMTMgKzI2LDEzIEBACiAgKi8NCiANCiAjaWZuZGVmIFBPUlRNQUNST19IDQotICAgICNkZWZpbmUgUE9SVE1BQ1JPX0gNCisjZGVmaW5lIFBPUlRNQUNST19IDQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgZXh0ZXJuICJDIiB7DQotICAgICNlbmRpZg0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KIA0KLSAgICAjaW5jbHVkZSAic3lzL2FsdF9pcnEuaCINCisjaW5jbHVkZSAic3lzL2FsdF9pcnEuaCINCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICogUG9ydCBzcGVjaWZpYyBkZWZpbml0aW9ucy4NCkBAIC00NSw2NCArNDUsNjUgQEAKICAqLw0KIA0KIC8qIFR5cGUgZGVmaW5pdGlvbnMuICovDQotICAgICNkZWZpbmUgcG9ydENIQVIgICAgICAgICAgY2hhcg0KLSAgICAjZGVmaW5lIHBvcnRGTE9BVCAgICAgICAgIGZsb2F0DQotICAgICNkZWZpbmUgcG9ydERPVUJMRSAgICAgICAgZG91YmxlDQotICAgICNkZWZpbmUgcG9ydExPTkcgICAgICAgICAgbG9uZw0KLSAgICAjZGVmaW5lIHBvcnRTSE9SVCAgICAgICAgIHNob3J0DQotICAgICNkZWZpbmUgcG9ydFNUQUNLX1RZUEUgICAgdWludDMyX3QNCi0gICAgI2RlZmluZSBwb3J0QkFTRV9UWVBFICAgICBsb25nDQorI2RlZmluZSBwb3J0Q0hBUgkJY2hhcg0KKyNkZWZpbmUgcG9ydEZMT0FUCQlmbG9hdA0KKyNkZWZpbmUgcG9ydERPVUJMRQkJZG91YmxlDQorI2RlZmluZSBwb3J0TE9ORwkJbG9uZw0KKyNkZWZpbmUgcG9ydFNIT1JUCQlzaG9ydA0KKyNkZWZpbmUgcG9ydFNUQUNLX1RZUEUJdWludDMyX3QNCisjZGVmaW5lIHBvcnRCQVNFX1RZUEUJbG9uZw0KIA0KLSAgICB0eXBlZGVmIHBvcnRTVEFDS19UWVBFICAgU3RhY2tUeXBlX3Q7DQotICAgIHR5cGVkZWYgbG9uZyAgICAgICAgICAgICBCYXNlVHlwZV90Ow0KLSAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgICAgVUJhc2VUeXBlX3Q7DQordHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSBTdGFja1R5cGVfdDsNCit0eXBlZGVmIGxvbmcgQmFzZVR5cGVfdDsNCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgVUJhc2VUeXBlX3Q7DQogDQotICAgICNpZiAoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQotICAgICAgICB0eXBlZGVmIHVpbnQxNl90ICAgICBUaWNrVHlwZV90Ow0KLSAgICAgICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICAgICAgICAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmYNCi0gICAgI2Vsc2UNCi0gICAgICAgIHR5cGVkZWYgdWludDMyX3QgICAgIFRpY2tUeXBlX3Q7DQotICAgICAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgICAgICAgICAgICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTA0KKyNpZiggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCisJdHlwZWRlZiB1aW50MTZfdCBUaWNrVHlwZV90Ow0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQorI2Vsc2UNCisJdHlwZWRlZiB1aW50MzJfdCBUaWNrVHlwZV90Ow0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQogDQotLyogMzItYml0IHRpY2sgdHlwZSBvbiBhIDMyLWJpdCBhcmNoaXRlY3R1cmUsIHNvIHJlYWRzIG9mIHRoZSB0aWNrIGNvdW50IGRvDQotICogbm90IG5lZWQgdG8gYmUgZ3VhcmRlZCB3aXRoIGEgY3JpdGljYWwgc2VjdGlvbi4gKi8NCi0gICAgICAgICNkZWZpbmUgcG9ydFRJQ0tfVFlQRV9JU19BVE9NSUMgICAgMQ0KLSAgICAjZW5kaWYNCisJLyogMzItYml0IHRpY2sgdHlwZSBvbiBhIDMyLWJpdCBhcmNoaXRlY3R1cmUsIHNvIHJlYWRzIG9mIHRoZSB0aWNrIGNvdW50IGRvDQorCW5vdCBuZWVkIHRvIGJlIGd1YXJkZWQgd2l0aCBhIGNyaXRpY2FsIHNlY3Rpb24uICovDQorCSNkZWZpbmUgcG9ydFRJQ0tfVFlQRV9JU19BVE9NSUMgMQ0KKyNlbmRpZg0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIEFyY2hpdGVjdHVyZSBzcGVjaWZpY3MuICovDQotICAgICNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSCAgICAgICAgICAgICAgICggLTEgKQ0KLSAgICAjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUyAgICAgICAgICAgICAoICggVGlja1R5cGVfdCApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KLSAgICAjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVCAgICAgICAgICAgICA0DQotICAgICNkZWZpbmUgcG9ydE5PUCgpICAgIGFzbSB2b2xhdGlsZSAoICJOT1AiICkNCi0gICAgI2RlZmluZSBwb3J0Q1JJVElDQUxfTkVTVElOR19JTl9UQ0IgICAgMQ0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJCQkoIC0xICkNCisjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUwkJCQkoICggVGlja1R5cGVfdCApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UCQkJCTQNCisjZGVmaW5lIHBvcnROT1AoKSAgICAgICAgICAgICAgICAgICAJYXNtIHZvbGF0aWxlICggIk5PUCIgKQ0KKyNkZWZpbmUgcG9ydENSSVRJQ0FMX05FU1RJTkdfSU5fVENCCQkxDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQotICAgIGV4dGVybiB2b2lkIHZUYXNrU3dpdGNoQ29udGV4dCggdm9pZCApOw0KLSAgICAjZGVmaW5lIHBvcnRZSUVMRCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNtIHZvbGF0aWxlICggInRyYXAiICk7DQotICAgICNkZWZpbmUgcG9ydEVORF9TV0lUQ0hJTkdfSVNSKCB4U3dpdGNoUmVxdWlyZWQgKSAgICBpZiggeFN3aXRjaFJlcXVpcmVkICkgdlRhc2tTd2l0Y2hDb250ZXh0KCkNCitleHRlcm4gdm9pZCB2VGFza1N3aXRjaENvbnRleHQoIHZvaWQgKTsNCisjZGVmaW5lIHBvcnRZSUVMRCgpCQkJCQkJCQkJYXNtIHZvbGF0aWxlICggInRyYXAiICk7DQorI2RlZmluZSBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHhTd2l0Y2hSZXF1aXJlZCApIAlpZiggeFN3aXRjaFJlcXVpcmVkICkgCXZUYXNrU3dpdGNoQ29udGV4dCgpDQogDQogDQogLyogSW5jbHVkZSB0aGUgcG9ydF9hc20uUyBmaWxlIHdoZXJlIHRoZSBDb250ZXh0IHNhdmluZy9yZXN0b3JpbmcgaXMgZGVmaW5lZC4gKi8NCi0gICAgX19hc21fXyAoICJcblx0Lmdsb2JsCXNhdmVfY29udGV4dCIpOw0KK19fYXNtX18oICJcblx0Lmdsb2JsCXNhdmVfY29udGV4dCIgKTsNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0gICAgZXh0ZXJuIHZvaWQgdlRhc2tFbnRlckNyaXRpY2FsKCB2b2lkICk7DQotICAgIGV4dGVybiB2b2lkIHZUYXNrRXhpdENyaXRpY2FsKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdlRhc2tFbnRlckNyaXRpY2FsKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdlRhc2tFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCiANCi0gICAgI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgICAgYWx0X2lycV9kaXNhYmxlX2FsbCgpDQotICAgICNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkgICAgIGFsdF9pcnFfZW5hYmxlX2FsbCggMHgwMSApOw0KLSAgICAjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpICAgICAgICB2VGFza0VudGVyQ3JpdGljYWwoKQ0KLSAgICAjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkgICAgICAgICB2VGFza0V4aXRDcml0aWNhbCgpDQorI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkJYWx0X2lycV9kaXNhYmxlX2FsbCgpDQorI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKQkJYWx0X2lycV9lbmFibGVfYWxsKCAweDAxICk7DQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKSAgICAgICAgdlRhc2tFbnRlckNyaXRpY2FsKCkNCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkgICAgICAgICB2VGFza0V4aXRDcml0aWNhbCgpDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQotICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KLSAgICAjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgICAgICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgfQ0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQogDQogI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvR0NDL1BQQzQwNV9YaWxpbngvRlBVX01hY3Jvcy5oIGIvcG9ydGFibGUvR0NDL1BQQzQwNV9YaWxpbngvRlBVX01hY3Jvcy5oCmluZGV4IDg5MWNkN2IuLmRkOGRkZWUgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0dDQy9QUEM0MDVfWGlsaW54L0ZQVV9NYWNyb3MuaAorKysgYi9wb3J0YWJsZS9HQ0MvUFBDNDA1X1hpbGlueC9GUFVfTWFjcm9zLmgKQEAgLTI2LDE5ICsyNiwyMCBAQAogICovDQogDQogLyogV2hlbiBzd2l0Y2hpbmcgb3V0IGEgdGFzaywgaWYgdGhlIHRhc2sgdGFnIGNvbnRhaW5zIGEgYnVmZmVyIGFkZHJlc3MgdGhlbg0KLSAqIHNhdmUgdGhlIGZsb3AgY29udGV4dCBpbnRvIHRoZSBidWZmZXIuICovDQotI2RlZmluZSB0cmFjZVRBU0tfU1dJVENIRURfT1VUKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgaWYoIHB4Q3VycmVudFRDQi0+cHhUYXNrVGFnICE9IE5VTEwgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBleHRlcm4gdm9pZCB2UG9ydFNhdmVGUFVSZWdpc3RlcnMoIHZvaWQgKiApOyAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHZQb3J0U2F2ZUZQVVJlZ2lzdGVycyggKCB2b2lkICogKSAoIHB4Q3VycmVudFRDQi0+cHhUYXNrVGFnICkgKTsgXA0KLSAgICB9DQorc2F2ZSB0aGUgZmxvcCBjb250ZXh0IGludG8gdGhlIGJ1ZmZlci4gKi8NCisjZGVmaW5lIHRyYWNlVEFTS19TV0lUQ0hFRF9PVVQoKQkJCQkJCQkJCQkJXA0KKwlpZiggcHhDdXJyZW50VENCLT5weFRhc2tUYWcgIT0gTlVMTCApCQkJCQkJCQkJXA0KKwl7CQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJZXh0ZXJuIHZvaWQgdlBvcnRTYXZlRlBVUmVnaXN0ZXJzKCB2b2lkICogKTsJCQkJCQlcDQorCQl2UG9ydFNhdmVGUFVSZWdpc3RlcnMoICggdm9pZCAqICkgKCBweEN1cnJlbnRUQ0ItPnB4VGFza1RhZyApICk7CVwNCisJfQ0KIA0KIC8qIFdoZW4gc3dpdGNoaW5nIGluIGEgdGFzaywgaWYgdGhlIHRhc2sgdGFnIGNvbnRhaW5zIGEgYnVmZmVyIGFkZHJlc3MgdGhlbg0KLSAqIGxvYWQgdGhlIGZsb3AgY29udGV4dCBmcm9tIHRoZSBidWZmZXIuICovDQotI2RlZmluZSB0cmFjZVRBU0tfU1dJVENIRURfSU4oKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgaWYoIHB4Q3VycmVudFRDQi0+cHhUYXNrVGFnICE9IE5VTEwgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBleHRlcm4gdm9pZCB2UG9ydFJlc3RvcmVGUFVSZWdpc3RlcnMoIHZvaWQgKiApOyAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHZQb3J0UmVzdG9yZUZQVVJlZ2lzdGVycyggKCB2b2lkICogKSAoIHB4Q3VycmVudFRDQi0+cHhUYXNrVGFnICkgKTsgXA0KLSAgICB9DQorbG9hZCB0aGUgZmxvcCBjb250ZXh0IGZyb20gdGhlIGJ1ZmZlci4gKi8NCisjZGVmaW5lIHRyYWNlVEFTS19TV0lUQ0hFRF9JTigpCQkJCQkJCQkJCQkJXA0KKwlpZiggcHhDdXJyZW50VENCLT5weFRhc2tUYWcgIT0gTlVMTCApCQkJCQkJCQkJXA0KKwl7CQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJZXh0ZXJuIHZvaWQgdlBvcnRSZXN0b3JlRlBVUmVnaXN0ZXJzKCB2b2lkICogKTsJCQkJCQlcDQorCQl2UG9ydFJlc3RvcmVGUFVSZWdpc3RlcnMoICggdm9pZCAqICkgKCBweEN1cnJlbnRUQ0ItPnB4VGFza1RhZyApICk7CVwNCisJfQ0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0dDQy9QUEM0MDVfWGlsaW54L3BvcnQuYyBiL3BvcnRhYmxlL0dDQy9QUEM0MDVfWGlsaW54L3BvcnQuYwppbmRleCA1ODkxZWNmLi4yODZlOTM3IDEwMDY0NAotLS0gYS9wb3J0YWJsZS9HQ0MvUFBDNDA1X1hpbGlueC9wb3J0LmMKKysrIGIvcG9ydGFibGUvR0NDL1BQQzQwNV9YaWxpbngvcG9ydC5jCkBAIC0yNiw4ICsyNiw4IEBACiAgKi8NCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgUFBDNDA1IHBvcnQuDQotKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyAqIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBQUEM0MDUgcG9ydC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIA0KIC8qIFNjaGVkdWxlciBpbmNsdWRlcy4gKi8NCkBAIC00MiwxOSArNDIsMTkgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIERlZmluaXRpb25zIHRvIHNldCB0aGUgaW5pdGlhbCBNU1Igb2YgZWFjaCB0YXNrLiAqLw0KLSNkZWZpbmUgcG9ydENSSVRJQ0FMX0lOVEVSUlVQVF9FTkFCTEUgICAgKCAxVUwgPDwgMTdVTCApDQotI2RlZmluZSBwb3J0RVhURVJOQUxfSU5URVJSVVBUX0VOQUJMRSAgICAoIDFVTCA8PCAxNVVMICkNCi0jZGVmaW5lIHBvcnRNQUNISU5FX0NIRUNLX0VOQUJMRSAgICAgICAgICggMVVMIDw8IDEyVUwgKQ0KKyNkZWZpbmUgcG9ydENSSVRJQ0FMX0lOVEVSUlVQVF9FTkFCTEUJKCAxVUwgPDwgMTdVTCApDQorI2RlZmluZSBwb3J0RVhURVJOQUxfSU5URVJSVVBUX0VOQUJMRQkoIDFVTCA8PCAxNVVMICkNCisjZGVmaW5lIHBvcnRNQUNISU5FX0NIRUNLX0VOQUJMRQkJKCAxVUwgPDwgMTJVTCApDQogDQogI2lmIGNvbmZpZ1VTRV9GUFUgPT0gMQ0KLSAgICAjZGVmaW5lIHBvcnRBUFVfUFJFU0VOVCAgICAgICAgICAgICAgKCAxVUwgPDwgMjVVTCApDQotICAgICNkZWZpbmUgcG9ydEZDTV9GUFVfUFJFU0VOVCAgICAgICAgICAoIDFVTCA8PCAxM1VMICkNCisJI2RlZmluZSBwb3J0QVBVX1BSRVNFTlQJCQkJKCAxVUwgPDwgMjVVTCApDQorCSNkZWZpbmUgcG9ydEZDTV9GUFVfUFJFU0VOVAkJCSggMVVMIDw8IDEzVUwgKQ0KICNlbHNlDQotICAgICNkZWZpbmUgcG9ydEFQVV9QUkVTRU5UICAgICAgICAgICAgICAoIDBVTCApDQotICAgICNkZWZpbmUgcG9ydEZDTV9GUFVfUFJFU0VOVCAgICAgICAgICAoIDBVTCApDQorCSNkZWZpbmUgcG9ydEFQVV9QUkVTRU5UCQkJCSggMFVMICkNCisJI2RlZmluZSBwb3J0RkNNX0ZQVV9QUkVTRU5UCQkJKCAwVUwgKQ0KICNlbmRpZg0KIA0KLSNkZWZpbmUgcG9ydElOSVRJQUxfTVNSICAgICAgICAgICAgICAgICAgKCBwb3J0Q1JJVElDQUxfSU5URVJSVVBUX0VOQUJMRSB8IHBvcnRFWFRFUk5BTF9JTlRFUlJVUFRfRU5BQkxFIHwgcG9ydE1BQ0hJTkVfQ0hFQ0tfRU5BQkxFIHwgcG9ydEFQVV9QUkVTRU5UIHwgcG9ydEZDTV9GUFVfUFJFU0VOVCApDQorI2RlZmluZSBwb3J0SU5JVElBTF9NU1IJCSggcG9ydENSSVRJQ0FMX0lOVEVSUlVQVF9FTkFCTEUgfCBwb3J0RVhURVJOQUxfSU5URVJSVVBUX0VOQUJMRSB8IHBvcnRNQUNISU5FX0NIRUNLX0VOQUJMRSB8IHBvcnRBUFVfUFJFU0VOVCB8IHBvcnRGQ01fRlBVX1BSRVNFTlQgKQ0KIA0KIA0KIGV4dGVybiBjb25zdCB1bnNpZ25lZCBfU0RBX0JBU0VfOw0KQEAgLTkwLDE3NyArOTAsMTcxIEBACiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0vKg0KKy8qIA0KICAqIEluaXRpYWxpc2UgdGhlIHN0YWNrIG9mIGEgdGFzayB0byBsb29rIGV4YWN0bHkgYXMgaWYgdGhlIHRhc2sgaGFkIGJlZW4NCiAgKiBpbnRlcnJ1cHRlZC4NCi0gKg0KKyAqIA0KICAqIFNlZSB0aGUgaGVhZGVyIGZpbGUgcG9ydGFibGUuaC4NCiAgKi8NCi1TdGFja1R5cGVfdCAqIHB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKiBweFRvcE9mU3RhY2ssDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqIHB2UGFyYW1ldGVycyApDQorU3RhY2tUeXBlX3QgKnB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKnB4VG9wT2ZTdGFjaywgVGFza0Z1bmN0aW9uX3QgcHhDb2RlLCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KIHsNCi0gICAgLyogUGxhY2UgYSBrbm93biB2YWx1ZSBhdCB0aGUgYm90dG9tIG9mIHRoZSBzdGFjayBmb3IgZGVidWdnaW5nLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMHhERUFEQkVFRjsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIFBsYWNlIGEga25vd24gdmFsdWUgYXQgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2sgZm9yIGRlYnVnZ2luZy4gKi8NCisJKnB4VG9wT2ZTdGFjayA9IDB4REVBREJFRUY7DQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBFQUJJIHN0YWNrIGZyYW1lLiAqLw0KLSAgICBweFRvcE9mU3RhY2sgLT0gMjA7IC8qIFByZXZpb3VzIGJhY2tjaGFpbiBhbmQgTFIsIFIzMSB0byBSNCBpbmNsdXNpdmUuICovDQorCS8qIEVBQkkgc3RhY2sgZnJhbWUuICovDQorCXB4VG9wT2ZTdGFjayAtPSAyMDsJLyogUHJldmlvdXMgYmFja2NoYWluIGFuZCBMUiwgUjMxIHRvIFI0IGluY2x1c2l2ZS4gKi8NCiANCi0gICAgLyogUGFyYW1ldGVycyBpbiBSMTMuICovDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgJl9TREFfQkFTRV87IC8qIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IHNtYWxsIGRhdGEgYXJlYSAqLw0KLSAgICBweFRvcE9mU3RhY2sgLT0gMTA7DQorCS8qIFBhcmFtZXRlcnMgaW4gUjEzLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApICZfU0RBX0JBU0VfOyAvKiBhZGRyZXNzIG9mIHRoZSBmaXJzdCBzbWFsbCBkYXRhIGFyZWEgKi8NCisJcHhUb3BPZlN0YWNrIC09IDEwOw0KIA0KLSAgICAvKiBQYXJhbWV0ZXJzIGluIFIzLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB2UGFyYW1ldGVyczsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIFBhcmFtZXRlcnMgaW4gUjMuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHZQYXJhbWV0ZXJzOw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgLyogUGFyYW1ldGVycyBpbiBSMi4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAmX1NEQTJfQkFTRV87IC8qIGFkZHJlc3Mgb2YgdGhlIHNlY29uZCBzbWFsbCBkYXRhIGFyZWEgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIFBhcmFtZXRlcnMgaW4gUjIuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgJl9TREEyX0JBU0VfOwkvKiBhZGRyZXNzIG9mIHRoZSBzZWNvbmQgc21hbGwgZGF0YSBhcmVhICovDQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBSMSBpcyB0aGUgc3RhY2sgcG9pbnRlciBzbyBpcyBvbWl0dGVkLiAqLw0KKwkvKiBSMSBpcyB0aGUgc3RhY2sgcG9pbnRlciBzbyBpcyBvbWl0dGVkLiAqLw0KIA0KLSAgICAqcHhUb3BPZlN0YWNrID0gMHgxMDAwMDAwMVVMOyAgICAgICAgICAgICAgICAgICAgICAvKiBSMC4gKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAweDAwMDAwMDAwVUw7ICAgICAgICAgICAgICAgICAgICAgIC8qIFVTUFJHMC4gKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAweDAwMDAwMDAwVUw7ICAgICAgICAgICAgICAgICAgICAgIC8qIENSLiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MDAwMDAwMDBVTDsgICAgICAgICAgICAgICAgICAgICAgLyogWEVSLiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MDAwMDAwMDBVTDsgICAgICAgICAgICAgICAgICAgICAgLyogQ1RSLiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSB2UG9ydEVuZFNjaGVkdWxlcjsgLyogTFIuICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB4Q29kZTsgICAgICAgICAgICAvKiBTUlIwLiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IHBvcnRJTklUSUFMX01TUjsgICAgICAgICAgICAgICAgICAgLyogU1JSMS4gKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgdlBvcnRFbmRTY2hlZHVsZXI7IC8qIE5leHQgTFIuICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMHgwMDAwMDAwMFVMOyAgICAgICAgICAgICAgICAgICAgICAvKiBCYWNrY2hhaW4uICovDQorCSpweFRvcE9mU3RhY2sgPSAweDEwMDAwMDAxVUw7OwkvKiBSMC4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDAwMDAwMDAwVUw7CS8qIFVTUFJHMC4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDAwMDAwMDAwVUw7CS8qIENSLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MDAwMDAwMDBVTDsJLyogWEVSLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MDAwMDAwMDBVTDsJLyogQ1RSLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSB2UG9ydEVuZFNjaGVkdWxlcjsJLyogTFIuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB4Q29kZTsgLyogU1JSMC4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSBwb3J0SU5JVElBTF9NU1I7LyogU1JSMS4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgdlBvcnRFbmRTY2hlZHVsZXI7LyogTmV4dCBMUi4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDAwMDAwMDAwVUw7LyogQmFja2NoYWluLiAqLw0KIA0KLSAgICByZXR1cm4gcHhUb3BPZlN0YWNrOw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBCYXNlVHlwZV90IHhQb3J0U3RhcnRTY2hlZHVsZXIoIHZvaWQgKQ0KIHsNCi0gICAgcHJ2U2V0dXBUaW1lckludGVycnVwdCgpOw0KLSAgICBYRXhjX1JlZ2lzdGVySGFuZGxlciggWEVYQ19JRF9TWVNURU1fQ0FMTCwgKCBYRXhjZXB0aW9uSGFuZGxlciApIHZQb3J0WWllbGQsICggdm9pZCAqICkgMCApOw0KLSAgICB2UG9ydFN0YXJ0Rmlyc3RUYXNrKCk7DQorCXBydlNldHVwVGltZXJJbnRlcnJ1cHQoKTsNCisJWEV4Y19SZWdpc3RlckhhbmRsZXIoIFhFWENfSURfU1lTVEVNX0NBTEwsICggWEV4Y2VwdGlvbkhhbmRsZXIgKSB2UG9ydFlpZWxkLCAoIHZvaWQgKiApIDAgKTsNCisJdlBvcnRTdGFydEZpcnN0VGFzaygpOw0KIA0KLSAgICAvKiBTaG91bGQgbm90IGdldCBoZXJlIGFzIHRoZSB0YXNrcyBhcmUgbm93IHJ1bm5pbmchICovDQotICAgIHJldHVybiBwZEZBTFNFOw0KKwkvKiBTaG91bGQgbm90IGdldCBoZXJlIGFzIHRoZSB0YXNrcyBhcmUgbm93IHJ1bm5pbmchICovDQorCXJldHVybiBwZEZBTFNFOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0RW5kU2NoZWR1bGVyKCB2b2lkICkNCiB7DQotICAgIC8qIE5vdCBpbXBsZW1lbnRlZC4gKi8NCi0gICAgZm9yKCA7IDsgKQ0KLSAgICB7DQotICAgIH0NCisJLyogTm90IGltcGxlbWVudGVkLiAqLw0KKwlmb3IoIDs7ICk7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qDQotICogSGFyZHdhcmUgaW5pdGlhbGlzYXRpb24gdG8gZ2VuZXJhdGUgdGhlIFJUT1MgdGljay4NCisgKiBIYXJkd2FyZSBpbml0aWFsaXNhdGlvbiB0byBnZW5lcmF0ZSB0aGUgUlRPUyB0aWNrLiAgIA0KICAqLw0KIHN0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKQ0KIHsNCi0gICAgY29uc3QgdWludDMyX3QgdWxJbnRlcnZhbCA9ICggKCBjb25maWdDUFVfQ0xPQ0tfSFogLyBjb25maWdUSUNLX1JBVEVfSFogKSAtIDFVTCApOw0KK2NvbnN0IHVpbnQzMl90IHVsSW50ZXJ2YWwgPSAoICggY29uZmlnQ1BVX0NMT0NLX0haIC8gY29uZmlnVElDS19SQVRFX0haICkgLSAxVUwgKTsNCiANCi0gICAgWFRpbWVfUElUQ2xlYXJJbnRlcnJ1cHQoKTsNCi0gICAgWFRpbWVfRklUQ2xlYXJJbnRlcnJ1cHQoKTsNCi0gICAgWFRpbWVfV0RUQ2xlYXJJbnRlcnJ1cHQoKTsNCi0gICAgWFRpbWVfV0RURGlzYWJsZUludGVycnVwdCgpOw0KLSAgICBYVGltZV9GSVREaXNhYmxlSW50ZXJydXB0KCk7DQorCVhUaW1lX1BJVENsZWFySW50ZXJydXB0KCk7DQorCVhUaW1lX0ZJVENsZWFySW50ZXJydXB0KCk7DQorCVhUaW1lX1dEVENsZWFySW50ZXJydXB0KCk7DQorCVhUaW1lX1dEVERpc2FibGVJbnRlcnJ1cHQoKTsNCisJWFRpbWVfRklURGlzYWJsZUludGVycnVwdCgpOw0KIA0KLSAgICBYRXhjX1JlZ2lzdGVySGFuZGxlciggWEVYQ19JRF9QSVRfSU5ULCAoIFhFeGNlcHRpb25IYW5kbGVyICkgdlBvcnRUaWNrSVNSLCAoIHZvaWQgKiApIDAgKTsNCisJWEV4Y19SZWdpc3RlckhhbmRsZXIoIFhFWENfSURfUElUX0lOVCwgKCBYRXhjZXB0aW9uSGFuZGxlciApIHZQb3J0VGlja0lTUiwgKCB2b2lkICogKSAwICk7DQogDQotICAgIFhUaW1lX1BJVEVuYWJsZUF1dG9SZWxvYWQoKTsNCi0gICAgWFRpbWVfUElUU2V0SW50ZXJ2YWwoIHVsSW50ZXJ2YWwgKTsNCi0gICAgWFRpbWVfUElURW5hYmxlSW50ZXJydXB0KCk7DQorCVhUaW1lX1BJVEVuYWJsZUF1dG9SZWxvYWQoKTsNCisJWFRpbWVfUElUU2V0SW50ZXJ2YWwoIHVsSW50ZXJ2YWwgKTsNCisJWFRpbWVfUElURW5hYmxlSW50ZXJydXB0KCk7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KLXZvaWQgdlBvcnRJU1JIYW5kbGVyKCB2b2lkICogcHZOdWxsRG9Ob3RVc2UgKQ0KK3ZvaWQgdlBvcnRJU1JIYW5kbGVyKCB2b2lkICpwdk51bGxEb05vdFVzZSApDQogew0KLSAgICB1aW50MzJfdCB1bEludGVycnVwdFN0YXR1cywgdWxJbnRlcnJ1cHRNYXNrID0gMVVMOw0KLSAgICBCYXNlVHlwZV90IHhJbnRlcnJ1cHROdW1iZXI7DQotICAgIFhJbnRjX0NvbmZpZyAqIHB4SW50ZXJydXB0Q29udHJvbGxlcjsNCi0gICAgWEludGNfVmVjdG9yVGFibGVFbnRyeSAqIHB4VGFibGU7DQordWludDMyX3QgdWxJbnRlcnJ1cHRTdGF0dXMsIHVsSW50ZXJydXB0TWFzayA9IDFVTDsNCitCYXNlVHlwZV90IHhJbnRlcnJ1cHROdW1iZXI7DQorWEludGNfQ29uZmlnICpweEludGVycnVwdENvbnRyb2xsZXI7DQorWEludGNfVmVjdG9yVGFibGVFbnRyeSAqcHhUYWJsZTsNCiANCi0gICAgLyogSnVzdCB0byByZW1vdmUgY29tcGlsZXIgd2FybmluZy4gKi8NCi0gICAgKCB2b2lkICkgcHZOdWxsRG9Ob3RVc2U7DQorCS8qIEp1c3QgdG8gcmVtb3ZlIGNvbXBpbGVyIHdhcm5pbmcuICovDQorCSggdm9pZCApIHB2TnVsbERvTm90VXNlOwkNCiANCi0gICAgLyogR2V0IHRoZSBjb25maWd1cmF0aW9uIGJ5IHVzaW5nIHRoZSBkZXZpY2UgSUQgLSBpbiB0aGlzIGNhc2UgaXQgaXMNCi0gICAgICogYXNzdW1lZCB0aGF0IG9ubHkgb25lIGludGVycnVwdCBjb250cm9sbGVyIGlzIGJlaW5nIHVzZWQuICovDQotICAgIHB4SW50ZXJydXB0Q29udHJvbGxlciA9ICZYSW50Y19Db25maWdUYWJsZVsgWFBBUl9YUFNfSU5UQ18wX0RFVklDRV9JRCBdOw0KKwkvKiBHZXQgdGhlIGNvbmZpZ3VyYXRpb24gYnkgdXNpbmcgdGhlIGRldmljZSBJRCAtIGluIHRoaXMgY2FzZSBpdCBpcw0KKwlhc3N1bWVkIHRoYXQgb25seSBvbmUgaW50ZXJydXB0IGNvbnRyb2xsZXIgaXMgYmVpbmcgdXNlZC4gKi8NCisJcHhJbnRlcnJ1cHRDb250cm9sbGVyID0gJlhJbnRjX0NvbmZpZ1RhYmxlWyBYUEFSX1hQU19JTlRDXzBfREVWSUNFX0lEIF07DQorICANCisJLyogV2hpY2ggaW50ZXJydXB0cyBhcmUgcGVuZGluZz8gKi8NCisJdWxJbnRlcnJ1cHRTdGF0dXMgPSBYSW50Y19tR2V0SW50clN0YXR1cyggcHhJbnRlcnJ1cHRDb250cm9sbGVyLT5CYXNlQWRkcmVzcyApOw0KKyAgDQorCWZvciggeEludGVycnVwdE51bWJlciA9IDA7IHhJbnRlcnJ1cHROdW1iZXIgPCBYUEFSX0lOVENfTUFYX05VTV9JTlRSX0lOUFVUUzsgeEludGVycnVwdE51bWJlcisrICkNCisJew0KKwkJaWYoIHVsSW50ZXJydXB0U3RhdHVzICYgMHgwMVVMICkNCisJCXsNCisJCQkvKiBDbGVhciB0aGUgcGVuZGluZyBpbnRlcnJ1cHQuICovDQorCQkJWEludGNfbUFja0ludHIoIHB4SW50ZXJydXB0Q29udHJvbGxlci0+QmFzZUFkZHJlc3MsIHVsSW50ZXJydXB0TWFzayApOw0KIA0KLSAgICAvKiBXaGljaCBpbnRlcnJ1cHRzIGFyZSBwZW5kaW5nPyAqLw0KLSAgICB1bEludGVycnVwdFN0YXR1cyA9IFhJbnRjX21HZXRJbnRyU3RhdHVzKCBweEludGVycnVwdENvbnRyb2xsZXItPkJhc2VBZGRyZXNzICk7DQorCQkJLyogQ2FsbCB0aGUgcmVnaXN0ZXJlZCBoYW5kbGVyLiAqLw0KKwkJCXB4VGFibGUgPSAmKCBweEludGVycnVwdENvbnRyb2xsZXItPkhhbmRsZXJUYWJsZVsgeEludGVycnVwdE51bWJlciBdICk7DQorCQkJcHhUYWJsZS0+SGFuZGxlciggcHhUYWJsZS0+Q2FsbEJhY2tSZWYgKTsNCisJCX0NCisgICAgICAgIA0KKwkJLyogQ2hlY2sgdGhlIG5leHQgaW50ZXJydXB0LiAqLw0KKwkJdWxJbnRlcnJ1cHRNYXNrIDw8PSAweDAxVUw7DQorCQl1bEludGVycnVwdFN0YXR1cyA+Pj0gMHgwMVVMOw0KIA0KLSAgICBmb3IoIHhJbnRlcnJ1cHROdW1iZXIgPSAwOyB4SW50ZXJydXB0TnVtYmVyIDwgWFBBUl9JTlRDX01BWF9OVU1fSU5UUl9JTlBVVFM7IHhJbnRlcnJ1cHROdW1iZXIrKyApDQotICAgIHsNCi0gICAgICAgIGlmKCB1bEludGVycnVwdFN0YXR1cyAmIDB4MDFVTCApDQotICAgICAgICB7DQotICAgICAgICAgICAgLyogQ2xlYXIgdGhlIHBlbmRpbmcgaW50ZXJydXB0LiAqLw0KLSAgICAgICAgICAgIFhJbnRjX21BY2tJbnRyKCBweEludGVycnVwdENvbnRyb2xsZXItPkJhc2VBZGRyZXNzLCB1bEludGVycnVwdE1hc2sgKTsNCi0NCi0gICAgICAgICAgICAvKiBDYWxsIHRoZSByZWdpc3RlcmVkIGhhbmRsZXIuICovDQotICAgICAgICAgICAgcHhUYWJsZSA9ICYoIHB4SW50ZXJydXB0Q29udHJvbGxlci0+SGFuZGxlclRhYmxlWyB4SW50ZXJydXB0TnVtYmVyIF0gKTsNCi0gICAgICAgICAgICBweFRhYmxlLT5IYW5kbGVyKCBweFRhYmxlLT5DYWxsQmFja1JlZiApOw0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgLyogQ2hlY2sgdGhlIG5leHQgaW50ZXJydXB0LiAqLw0KLSAgICAgICAgdWxJbnRlcnJ1cHRNYXNrIDw8PSAweDAxVUw7DQotICAgICAgICB1bEludGVycnVwdFN0YXR1cyA+Pj0gMHgwMVVMOw0KLQ0KLSAgICAgICAgLyogSGF2ZSB3ZSBzZXJ2aWNlZCBhbGwgaW50ZXJydXB0cz8gKi8NCi0gICAgICAgIGlmKCB1bEludGVycnVwdFN0YXR1cyA9PSAwVUwgKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICB9DQorCQkvKiBIYXZlIHdlIHNlcnZpY2VkIGFsbCBpbnRlcnJ1cHRzPyAqLw0KKwkJaWYoIHVsSW50ZXJydXB0U3RhdHVzID09IDBVTCApDQorCQl7DQorCQkJYnJlYWs7DQorCQl9DQorCX0NCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogdm9pZCB2UG9ydFNldHVwSW50ZXJydXB0Q29udHJvbGxlciggdm9pZCApDQogew0KLSAgICBleHRlcm4gdm9pZCB2UG9ydElTUldyYXBwZXIoIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2UG9ydElTUldyYXBwZXIoIHZvaWQgKTsNCiANCi0gICAgLyogUGVyZm9ybSBhbGwgbGlicmFyeSBjYWxscyBuZWNlc3NhcnkgdG8gaW5pdGlhbGlzZSB0aGUgZXhjZXB0aW9uIHRhYmxlDQotICAgICAqIGFuZCBpbnRlcnJ1cHQgY29udHJvbGxlci4gIFRoaXMgYXNzdW1lcyBvbmx5IG9uZSBpbnRlcnJ1cHQgY29udHJvbGxlciBpcyBpbg0KLSAgICAgKiB1c2UuICovDQotICAgIFhFeGNfbURpc2FibGVFeGNlcHRpb25zKCBYRVhDX05PTl9DUklUSUNBTCApOw0KLSAgICBYRXhjX0luaXQoKTsNCisJLyogUGVyZm9ybSBhbGwgbGlicmFyeSBjYWxscyBuZWNlc3NhcnkgdG8gaW5pdGlhbGlzZSB0aGUgZXhjZXB0aW9uIHRhYmxlDQorCWFuZCBpbnRlcnJ1cHQgY29udHJvbGxlci4gIFRoaXMgYXNzdW1lcyBvbmx5IG9uZSBpbnRlcnJ1cHQgY29udHJvbGxlciBpcyBpbg0KKwl1c2UuICovDQorCVhFeGNfbURpc2FibGVFeGNlcHRpb25zKCBYRVhDX05PTl9DUklUSUNBTCApOw0KKwlYRXhjX0luaXQoKTsNCiANCi0gICAgLyogVGhlIGxpYnJhcnkgZnVuY3Rpb25zIHNhdmUgdGhlIGNvbnRleHQgLSB3ZSB0aGVuIGp1bXAgdG8gYSB3cmFwcGVyIHRvDQotICAgICAqIHNhdmUgdGhlIHN0YWNrIGludG8gdGhlIFRDQi4gIFRoZSB3cmFwcGVyIHRoZW4gY2FsbHMgdGhlIGhhbmRsZXIgZGVmaW5lZA0KLSAgICAgKiBhYm92ZS4gKi8NCi0gICAgWEV4Y19SZWdpc3RlckhhbmRsZXIoIFhFWENfSURfTk9OX0NSSVRJQ0FMX0lOVCwgKCBYRXhjZXB0aW9uSGFuZGxlciApIHZQb3J0SVNSV3JhcHBlciwgTlVMTCApOw0KLSAgICBYSW50Y19Jbml0aWFsaXplKCAmeEludGVycnVwdENvbnRyb2xsZXIsIFhQQVJfWFBTX0lOVENfMF9ERVZJQ0VfSUQgKTsNCi0gICAgWEludGNfU3RhcnQoICZ4SW50ZXJydXB0Q29udHJvbGxlciwgWElOX1JFQUxfTU9ERSApOw0KKwkvKiBUaGUgbGlicmFyeSBmdW5jdGlvbnMgc2F2ZSB0aGUgY29udGV4dCAtIHdlIHRoZW4ganVtcCB0byBhIHdyYXBwZXIgdG8NCisJc2F2ZSB0aGUgc3RhY2sgaW50byB0aGUgVENCLiAgVGhlIHdyYXBwZXIgdGhlbiBjYWxscyB0aGUgaGFuZGxlciBkZWZpbmVkDQorCWFib3ZlLiAqLw0KKwlYRXhjX1JlZ2lzdGVySGFuZGxlciggWEVYQ19JRF9OT05fQ1JJVElDQUxfSU5ULCAoIFhFeGNlcHRpb25IYW5kbGVyICkgdlBvcnRJU1JXcmFwcGVyLCBOVUxMICk7DQorCVhJbnRjX0luaXRpYWxpemUoICZ4SW50ZXJydXB0Q29udHJvbGxlciwgWFBBUl9YUFNfSU5UQ18wX0RFVklDRV9JRCApOw0KKwlYSW50Y19TdGFydCggJnhJbnRlcnJ1cHRDb250cm9sbGVyLCBYSU5fUkVBTF9NT0RFICk7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KLUJhc2VUeXBlX3QgeFBvcnRJbnN0YWxsSW50ZXJydXB0SGFuZGxlciggdWludDhfdCB1Y0ludGVycnVwdElELA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEludGVycnVwdEhhbmRsZXIgcHhIYW5kbGVyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqIHB2Q2FsbEJhY2tSZWYgKQ0KK0Jhc2VUeXBlX3QgeFBvcnRJbnN0YWxsSW50ZXJydXB0SGFuZGxlciggdWludDhfdCB1Y0ludGVycnVwdElELCBYSW50ZXJydXB0SGFuZGxlciBweEhhbmRsZXIsIHZvaWQgKnB2Q2FsbEJhY2tSZWYgKQ0KIHsNCi0gICAgQmFzZVR5cGVfdCB4UmV0dXJuID0gcGRGQUlMOw0KK0Jhc2VUeXBlX3QgeFJldHVybiA9IHBkRkFJTDsNCiANCi0gICAgLyogVGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkIGhlcmUgc28gdGhlIHNjb3BlIG9mIHhJbnRlcnJ1cHRDb250cm9sbGVyIGNhbg0KLSAgICAgKiByZW1haW4gd2l0aGluIHRoaXMgZmlsZS4gKi8NCisJLyogVGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkIGhlcmUgc28gdGhlIHNjb3BlIG9mIHhJbnRlcnJ1cHRDb250cm9sbGVyIGNhbg0KKwlyZW1haW4gd2l0aGluIHRoaXMgZmlsZS4gKi8NCiANCi0gICAgaWYoIFhTVF9TVUNDRVNTID09IFhJbnRjX0Nvbm5lY3QoICZ4SW50ZXJydXB0Q29udHJvbGxlciwgdWNJbnRlcnJ1cHRJRCwgcHhIYW5kbGVyLCBwdkNhbGxCYWNrUmVmICkgKQ0KLSAgICB7DQotICAgICAgICBYSW50Y19FbmFibGUoICZ4SW50ZXJydXB0Q29udHJvbGxlciwgdWNJbnRlcnJ1cHRJRCApOw0KLSAgICAgICAgeFJldHVybiA9IHBkUEFTUzsNCi0gICAgfQ0KKwlpZiggWFNUX1NVQ0NFU1MgPT0gWEludGNfQ29ubmVjdCggJnhJbnRlcnJ1cHRDb250cm9sbGVyLCB1Y0ludGVycnVwdElELCBweEhhbmRsZXIsIHB2Q2FsbEJhY2tSZWYgKSApDQorCXsNCisJCVhJbnRjX0VuYWJsZSggJnhJbnRlcnJ1cHRDb250cm9sbGVyLCB1Y0ludGVycnVwdElEICk7DQorCQl4UmV0dXJuID0gcGRQQVNTOw0KKwl9DQogDQotICAgIHJldHVybiB4UmV0dXJuOw0KKwlyZXR1cm4geFJldHVybjsJCQ0KIH0NCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9HQ0MvUFBDNDA1X1hpbGlueC9wb3J0bWFjcm8uaCBiL3BvcnRhYmxlL0dDQy9QUEM0MDVfWGlsaW54L3BvcnRtYWNyby5oCmluZGV4IDI5ODUwMGUuLjBhNTNlNzEgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0dDQy9QUEM0MDVfWGlsaW54L3BvcnRtYWNyby5oCisrKyBiL3BvcnRhYmxlL0dDQy9QUEM0MDVfWGlsaW54L3BvcnRtYWNyby5oCkBAIC0yNiwxMyArMjYsMTMgQEAKICAqLw0KIA0KICNpZm5kZWYgUE9SVE1BQ1JPX0gNCi0gICAgI2RlZmluZSBQT1JUTUFDUk9fSA0KKyNkZWZpbmUgUE9SVE1BQ1JPX0gNCiANCi0gICAgI2luY2x1ZGUgInhleGNlcHRpb25fbC5oIg0KKyNpbmNsdWRlICJ4ZXhjZXB0aW9uX2wuaCINCiANCi0gICAgI2lmZGVmIF9fY3BsdXNwbHVzDQotICAgICAgICBleHRlcm4gIkMiIHsNCi0gICAgI2VuZGlmDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAqIFBvcnQgc3BlY2lmaWMgZGVmaW5pdGlvbnMuDQpAQCAtNDUsNzUgKzQ1LDc0IEBACiAgKi8NCiANCiAvKiBUeXBlIGRlZmluaXRpb25zLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRDSEFSICAgICAgICAgIGNoYXINCi0gICAgI2RlZmluZSBwb3J0RkxPQVQgICAgICAgICBmbG9hdA0KLSAgICAjZGVmaW5lIHBvcnRET1VCTEUgICAgICAgIGRvdWJsZQ0KLSAgICAjZGVmaW5lIHBvcnRMT05HICAgICAgICAgIGxvbmcNCi0gICAgI2RlZmluZSBwb3J0U0hPUlQgICAgICAgICBzaG9ydA0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19UWVBFICAgIHVpbnQzMl90DQotICAgICNkZWZpbmUgcG9ydEJBU0VfVFlQRSAgICAgbG9uZw0KKyNkZWZpbmUgcG9ydENIQVIJCWNoYXINCisjZGVmaW5lIHBvcnRGTE9BVAkJZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUJCWRvdWJsZQ0KKyNkZWZpbmUgcG9ydExPTkcJCWxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVAkJc2hvcnQNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFCXVpbnQzMl90DQorI2RlZmluZSBwb3J0QkFTRV9UWVBFCWxvbmcNCiANCi0gICAgdHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSAgIFN0YWNrVHlwZV90Ow0KLSAgICB0eXBlZGVmIGxvbmcgICAgICAgICAgICAgQmFzZVR5cGVfdDsNCi0gICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nICAgIFVCYXNlVHlwZV90Ow0KK3R5cGVkZWYgcG9ydFNUQUNLX1RZUEUgU3RhY2tUeXBlX3Q7DQordHlwZWRlZiBsb25nIEJhc2VUeXBlX3Q7DQordHlwZWRlZiB1bnNpZ25lZCBsb25nIFVCYXNlVHlwZV90Ow0KIA0KLSAgICAjaWYgKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KLSAgICAgICAgdHlwZWRlZiB1aW50MTZfdCAgICAgVGlja1R5cGVfdDsNCi0gICAgICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmYNCi0gICAgI2Vsc2UNCi0gICAgICAgIHR5cGVkZWYgdWludDMyX3QgICAgIFRpY2tUeXBlX3Q7DQotICAgICAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQotICAgICNlbmRpZg0KKyNpZiggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCisJdHlwZWRlZiB1aW50MTZfdCBUaWNrVHlwZV90Ow0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQorI2Vsc2UNCisJdHlwZWRlZiB1aW50MzJfdCBUaWNrVHlwZV90Ow0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQorI2VuZGlmDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGhpcyBwb3J0IHVzZXMgdGhlIGNyaXRpY2FsIG5lc3RpbmcgY291bnQgZnJvbSB0aGUgVENCIHJhdGhlciB0aGFuDQotICogbWFpbnRhaW5pbmcgYSBzZXBhcmF0ZSB2YWx1ZSBhbmQgdGhlbiBzYXZpbmcgdGhpcyB2YWx1ZSBpbiB0aGUgdGFzayBzdGFjay4gKi8NCi0gICAgI2RlZmluZSBwb3J0Q1JJVElDQUxfTkVTVElOR19JTl9UQ0IgICAgMQ0KK21haW50YWluaW5nIGEgc2VwYXJhdGUgdmFsdWUgYW5kIHRoZW4gc2F2aW5nIHRoaXMgdmFsdWUgaW4gdGhlIHRhc2sgc3RhY2suICovDQorI2RlZmluZSBwb3J0Q1JJVElDQUxfTkVTVElOR19JTl9UQ0IJCTENCiANCiAvKiBJbnRlcnJ1cHQgY29udHJvbCBtYWNyb3MuICovDQotICAgICNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpICAgIFhFeGNfbURpc2FibGVFeGNlcHRpb25zKCBYRVhDX05PTl9DUklUSUNBTCApOw0KLSAgICAjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpICAgICBYRXhjX21FbmFibGVFeGNlcHRpb25zKCBYRVhDX05PTl9DUklUSUNBTCApOw0KKyNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpCQlYRXhjX21EaXNhYmxlRXhjZXB0aW9ucyggWEVYQ19OT05fQ1JJVElDQUwgKTsNCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpCQkJWEV4Y19tRW5hYmxlRXhjZXB0aW9ucyggWEVYQ19OT05fQ1JJVElDQUwgKTsNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBDcml0aWNhbCBzZWN0aW9uIG1hY3Jvcy4gKi8NCi0gICAgdm9pZCB2VGFza0VudGVyQ3JpdGljYWwoIHZvaWQgKTsNCi0gICAgdm9pZCB2VGFza0V4aXRDcml0aWNhbCggdm9pZCApOw0KLSAgICAjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpICAgIHZUYXNrRW50ZXJDcml0aWNhbCgpDQotICAgICNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKSAgICAgdlRhc2tFeGl0Q3JpdGljYWwoKQ0KK3ZvaWQgdlRhc2tFbnRlckNyaXRpY2FsKCB2b2lkICk7DQordm9pZCB2VGFza0V4aXRDcml0aWNhbCggdm9pZCApOw0KKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkJCQl2VGFza0VudGVyQ3JpdGljYWwoKQ0KKyNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKQkJCQl2VGFza0V4aXRDcml0aWNhbCgpDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGFzayB1dGlsaXRpZXMuICovDQotICAgIHZvaWQgdlBvcnRZaWVsZCggdm9pZCApOw0KLSAgICAjZGVmaW5lIHBvcnRZSUVMRCgpICAgICAgICAgICAgIGFzbSB2b2xhdGlsZSAoICJTQyBcblx0IE5PUCIgKQ0KLSAgICAjZGVmaW5lIHBvcnRZSUVMRF9GUk9NX0lTUigpICAgIHZUYXNrU3dpdGNoQ29udGV4dCgpDQordm9pZCB2UG9ydFlpZWxkKCB2b2lkICk7DQorI2RlZmluZSBwb3J0WUlFTEQoKSBhc20gdm9sYXRpbGUgKCAiU0MgXG5cdCBOT1AiICkNCisjZGVmaW5lIHBvcnRZSUVMRF9GUk9NX0lTUigpIHZUYXNrU3dpdGNoQ29udGV4dCgpDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogSGFyZHdhcmUgc3BlY2lmaWNzLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVCAgICA4DQotICAgICNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSCAgICAgICggLTEgKQ0KLSAgICAjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUyAgICAoICggVGlja1R5cGVfdCApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KLSAgICAjZGVmaW5lIHBvcnROT1AoKSAgICBhc20gdm9sYXRpbGUgKCAiTk9QIiApDQorI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQJCQk4DQorI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RICQkJKCAtMSApDQorI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMJCQkoICggVGlja1R5cGVfdCApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KKyNkZWZpbmUgcG9ydE5PUCgpCQkJCQlhc20gdm9sYXRpbGUgKCAiTk9QIiApDQogDQogLyogVGhlcmUgYXJlIDMyICogMzJiaXQgZmxvYXRpbmcgcG9pbnQgcmVnaWV0ZXJzLCBwbHVzIHRoZSBGUFNDUiB0byBzYXZlLiAqLw0KLSAgICAjZGVmaW5lIHBvcnROT19GTE9QX1JFR0lTVEVSU19UT19TQVZFICAgICggMzIgKyAxICkNCisjZGVmaW5lIHBvcnROT19GTE9QX1JFR0lTVEVSU19UT19TQVZFICAoIDMyICsgMSApDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQotICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KLSAgICAjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgICAgICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQogDQogLyogUG9ydCBzcGVjaWZpYyBpbnRlcnJ1cHQgaGFuZGxpbmcgZnVuY3Rpb25zLiAqLw0KLSAgICB2b2lkIHZQb3J0U2V0dXBJbnRlcnJ1cHRDb250cm9sbGVyKCB2b2lkICk7DQotICAgIEJhc2VUeXBlX3QgeFBvcnRJbnN0YWxsSW50ZXJydXB0SGFuZGxlciggdWludDhfdCB1Y0ludGVycnVwdElELA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhJbnRlcnJ1cHRIYW5kbGVyIHB4SGFuZGxlciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICogcHZDYWxsQmFja1JlZiApOw0KK3ZvaWQgdlBvcnRTZXR1cEludGVycnVwdENvbnRyb2xsZXIoIHZvaWQgKTsNCitCYXNlVHlwZV90IHhQb3J0SW5zdGFsbEludGVycnVwdEhhbmRsZXIoIHVpbnQ4X3QgdWNJbnRlcnJ1cHRJRCwgWEludGVycnVwdEhhbmRsZXIgcHhIYW5kbGVyLCB2b2lkICpwdkNhbGxCYWNrUmVmICk7DQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgfQ0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQogDQogI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvR0NDL1BQQzQ0MF9YaWxpbngvRlBVX01hY3Jvcy5oIGIvcG9ydGFibGUvR0NDL1BQQzQ0MF9YaWxpbngvRlBVX01hY3Jvcy5oCmluZGV4IDg5MWNkN2IuLmRkOGRkZWUgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0dDQy9QUEM0NDBfWGlsaW54L0ZQVV9NYWNyb3MuaAorKysgYi9wb3J0YWJsZS9HQ0MvUFBDNDQwX1hpbGlueC9GUFVfTWFjcm9zLmgKQEAgLTI2LDE5ICsyNiwyMCBAQAogICovDQogDQogLyogV2hlbiBzd2l0Y2hpbmcgb3V0IGEgdGFzaywgaWYgdGhlIHRhc2sgdGFnIGNvbnRhaW5zIGEgYnVmZmVyIGFkZHJlc3MgdGhlbg0KLSAqIHNhdmUgdGhlIGZsb3AgY29udGV4dCBpbnRvIHRoZSBidWZmZXIuICovDQotI2RlZmluZSB0cmFjZVRBU0tfU1dJVENIRURfT1VUKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgaWYoIHB4Q3VycmVudFRDQi0+cHhUYXNrVGFnICE9IE5VTEwgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBleHRlcm4gdm9pZCB2UG9ydFNhdmVGUFVSZWdpc3RlcnMoIHZvaWQgKiApOyAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHZQb3J0U2F2ZUZQVVJlZ2lzdGVycyggKCB2b2lkICogKSAoIHB4Q3VycmVudFRDQi0+cHhUYXNrVGFnICkgKTsgXA0KLSAgICB9DQorc2F2ZSB0aGUgZmxvcCBjb250ZXh0IGludG8gdGhlIGJ1ZmZlci4gKi8NCisjZGVmaW5lIHRyYWNlVEFTS19TV0lUQ0hFRF9PVVQoKQkJCQkJCQkJCQkJXA0KKwlpZiggcHhDdXJyZW50VENCLT5weFRhc2tUYWcgIT0gTlVMTCApCQkJCQkJCQkJXA0KKwl7CQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJZXh0ZXJuIHZvaWQgdlBvcnRTYXZlRlBVUmVnaXN0ZXJzKCB2b2lkICogKTsJCQkJCQlcDQorCQl2UG9ydFNhdmVGUFVSZWdpc3RlcnMoICggdm9pZCAqICkgKCBweEN1cnJlbnRUQ0ItPnB4VGFza1RhZyApICk7CVwNCisJfQ0KIA0KIC8qIFdoZW4gc3dpdGNoaW5nIGluIGEgdGFzaywgaWYgdGhlIHRhc2sgdGFnIGNvbnRhaW5zIGEgYnVmZmVyIGFkZHJlc3MgdGhlbg0KLSAqIGxvYWQgdGhlIGZsb3AgY29udGV4dCBmcm9tIHRoZSBidWZmZXIuICovDQotI2RlZmluZSB0cmFjZVRBU0tfU1dJVENIRURfSU4oKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgaWYoIHB4Q3VycmVudFRDQi0+cHhUYXNrVGFnICE9IE5VTEwgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBleHRlcm4gdm9pZCB2UG9ydFJlc3RvcmVGUFVSZWdpc3RlcnMoIHZvaWQgKiApOyAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHZQb3J0UmVzdG9yZUZQVVJlZ2lzdGVycyggKCB2b2lkICogKSAoIHB4Q3VycmVudFRDQi0+cHhUYXNrVGFnICkgKTsgXA0KLSAgICB9DQorbG9hZCB0aGUgZmxvcCBjb250ZXh0IGZyb20gdGhlIGJ1ZmZlci4gKi8NCisjZGVmaW5lIHRyYWNlVEFTS19TV0lUQ0hFRF9JTigpCQkJCQkJCQkJCQkJXA0KKwlpZiggcHhDdXJyZW50VENCLT5weFRhc2tUYWcgIT0gTlVMTCApCQkJCQkJCQkJXA0KKwl7CQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJZXh0ZXJuIHZvaWQgdlBvcnRSZXN0b3JlRlBVUmVnaXN0ZXJzKCB2b2lkICogKTsJCQkJCQlcDQorCQl2UG9ydFJlc3RvcmVGUFVSZWdpc3RlcnMoICggdm9pZCAqICkgKCBweEN1cnJlbnRUQ0ItPnB4VGFza1RhZyApICk7CVwNCisJfQ0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0dDQy9QUEM0NDBfWGlsaW54L3BvcnQuYyBiL3BvcnRhYmxlL0dDQy9QUEM0NDBfWGlsaW54L3BvcnQuYwppbmRleCA0NjY2MGUwLi4yYjEwNGE1IDEwMDY0NAotLS0gYS9wb3J0YWJsZS9HQ0MvUFBDNDQwX1hpbGlueC9wb3J0LmMKKysrIGIvcG9ydGFibGUvR0NDL1BQQzQ0MF9YaWxpbngvcG9ydC5jCkBAIC0yNiw4ICsyNiw4IEBACiAgKi8NCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgUFBDNDQwIHBvcnQuDQotKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyAqIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBQUEM0NDAgcG9ydC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIA0KIC8qIFNjaGVkdWxlciBpbmNsdWRlcy4gKi8NCkBAIC00MiwxOSArNDIsMTkgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIERlZmluaXRpb25zIHRvIHNldCB0aGUgaW5pdGlhbCBNU1Igb2YgZWFjaCB0YXNrLiAqLw0KLSNkZWZpbmUgcG9ydENSSVRJQ0FMX0lOVEVSUlVQVF9FTkFCTEUgICAgKCAxVUwgPDwgMTdVTCApDQotI2RlZmluZSBwb3J0RVhURVJOQUxfSU5URVJSVVBUX0VOQUJMRSAgICAoIDFVTCA8PCAxNVVMICkNCi0jZGVmaW5lIHBvcnRNQUNISU5FX0NIRUNLX0VOQUJMRSAgICAgICAgICggMVVMIDw8IDEyVUwgKQ0KKyNkZWZpbmUgcG9ydENSSVRJQ0FMX0lOVEVSUlVQVF9FTkFCTEUJKCAxVUwgPDwgMTdVTCApDQorI2RlZmluZSBwb3J0RVhURVJOQUxfSU5URVJSVVBUX0VOQUJMRQkoIDFVTCA8PCAxNVVMICkNCisjZGVmaW5lIHBvcnRNQUNISU5FX0NIRUNLX0VOQUJMRQkJKCAxVUwgPDwgMTJVTCApDQogDQogI2lmIGNvbmZpZ1VTRV9GUFUgPT0gMQ0KLSAgICAjZGVmaW5lIHBvcnRBUFVfUFJFU0VOVCAgICAgICAgICAgICAgKCAxVUwgPDwgMjVVTCApDQotICAgICNkZWZpbmUgcG9ydEZDTV9GUFVfUFJFU0VOVCAgICAgICAgICAoIDFVTCA8PCAxM1VMICkNCisJI2RlZmluZSBwb3J0QVBVX1BSRVNFTlQJCQkJKCAxVUwgPDwgMjVVTCApDQorCSNkZWZpbmUgcG9ydEZDTV9GUFVfUFJFU0VOVAkJCSggMVVMIDw8IDEzVUwgKQ0KICNlbHNlDQotICAgICNkZWZpbmUgcG9ydEFQVV9QUkVTRU5UICAgICAgICAgICAgICAoIDBVTCApDQotICAgICNkZWZpbmUgcG9ydEZDTV9GUFVfUFJFU0VOVCAgICAgICAgICAoIDBVTCApDQorCSNkZWZpbmUgcG9ydEFQVV9QUkVTRU5UCQkJCSggMFVMICkNCisJI2RlZmluZSBwb3J0RkNNX0ZQVV9QUkVTRU5UCQkJKCAwVUwgKQ0KICNlbmRpZg0KIA0KLSNkZWZpbmUgcG9ydElOSVRJQUxfTVNSICAgICAgICAgICAgICAgICAgKCBwb3J0Q1JJVElDQUxfSU5URVJSVVBUX0VOQUJMRSB8IHBvcnRFWFRFUk5BTF9JTlRFUlJVUFRfRU5BQkxFIHwgcG9ydE1BQ0hJTkVfQ0hFQ0tfRU5BQkxFIHwgcG9ydEFQVV9QUkVTRU5UIHwgcG9ydEZDTV9GUFVfUFJFU0VOVCApDQorI2RlZmluZSBwb3J0SU5JVElBTF9NU1IJCSggcG9ydENSSVRJQ0FMX0lOVEVSUlVQVF9FTkFCTEUgfCBwb3J0RVhURVJOQUxfSU5URVJSVVBUX0VOQUJMRSB8IHBvcnRNQUNISU5FX0NIRUNLX0VOQUJMRSB8IHBvcnRBUFVfUFJFU0VOVCB8IHBvcnRGQ01fRlBVX1BSRVNFTlQgKQ0KIA0KIA0KIGV4dGVybiBjb25zdCB1bnNpZ25lZCBfU0RBX0JBU0VfOw0KQEAgLTk2LDcyICs5Niw2OCBAQAogICoNCiAgKiBTZWUgdGhlIGhlYWRlciBmaWxlIHBvcnRhYmxlLmguDQogICovDQotU3RhY2tUeXBlX3QgKiBweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICogcHhUb3BPZlN0YWNrLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYXNrRnVuY3Rpb25fdCBweENvZGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KK1N0YWNrVHlwZV90ICpweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICpweFRvcE9mU3RhY2ssIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzICkNCiB7DQotICAgIC8qIFBsYWNlIGEga25vd24gdmFsdWUgYXQgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2sgZm9yIGRlYnVnZ2luZy4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4REVBREJFRUY7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkvKiBQbGFjZSBhIGtub3duIHZhbHVlIGF0IHRoZSBib3R0b20gb2YgdGhlIHN0YWNrIGZvciBkZWJ1Z2dpbmcuICovDQorCSpweFRvcE9mU3RhY2sgPSAweERFQURCRUVGOw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgLyogRUFCSSBzdGFjayBmcmFtZS4gKi8NCi0gICAgcHhUb3BPZlN0YWNrIC09IDIwOyAvKiBQcmV2aW91cyBiYWNrY2hhaW4gYW5kIExSLCBSMzEgdG8gUjQgaW5jbHVzaXZlLiAqLw0KKwkvKiBFQUJJIHN0YWNrIGZyYW1lLiAqLw0KKwlweFRvcE9mU3RhY2sgLT0gMjA7CS8qIFByZXZpb3VzIGJhY2tjaGFpbiBhbmQgTFIsIFIzMSB0byBSNCBpbmNsdXNpdmUuICovDQogDQotICAgIC8qIFBhcmFtZXRlcnMgaW4gUjEzLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApICZfU0RBX0JBU0VfOyAvKiBhZGRyZXNzIG9mIHRoZSBmaXJzdCBzbWFsbCBkYXRhIGFyZWEgKi8NCi0gICAgcHhUb3BPZlN0YWNrIC09IDEwOw0KKwkvKiBQYXJhbWV0ZXJzIGluIFIxMy4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAmX1NEQV9CQVNFXzsgLyogYWRkcmVzcyBvZiB0aGUgZmlyc3Qgc21hbGwgZGF0YSBhcmVhICovDQorCXB4VG9wT2ZTdGFjayAtPSAxMDsNCiANCi0gICAgLyogUGFyYW1ldGVycyBpbiBSMy4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwdlBhcmFtZXRlcnM7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkvKiBQYXJhbWV0ZXJzIGluIFIzLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB2UGFyYW1ldGVyczsNCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgIC8qIFBhcmFtZXRlcnMgaW4gUjIuICovDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgJl9TREEyX0JBU0VfOyAvKiBhZGRyZXNzIG9mIHRoZSBzZWNvbmQgc21hbGwgZGF0YSBhcmVhICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkvKiBQYXJhbWV0ZXJzIGluIFIyLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApICZfU0RBMl9CQVNFXzsJLyogYWRkcmVzcyBvZiB0aGUgc2Vjb25kIHNtYWxsIGRhdGEgYXJlYSAqLw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgLyogUjEgaXMgdGhlIHN0YWNrIHBvaW50ZXIgc28gaXMgb21pdHRlZC4gKi8NCisJLyogUjEgaXMgdGhlIHN0YWNrIHBvaW50ZXIgc28gaXMgb21pdHRlZC4gKi8NCiANCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MTAwMDAwMDFVTDsgICAgICAgICAgICAgICAgICAgICAgLyogUjAuICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMHgwMDAwMDAwMFVMOyAgICAgICAgICAgICAgICAgICAgICAvKiBVU1BSRzAuICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMHgwMDAwMDAwMFVMOyAgICAgICAgICAgICAgICAgICAgICAvKiBDUi4gKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAweDAwMDAwMDAwVUw7ICAgICAgICAgICAgICAgICAgICAgIC8qIFhFUi4gKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAweDAwMDAwMDAwVUw7ICAgICAgICAgICAgICAgICAgICAgIC8qIENUUi4gKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgdlBvcnRFbmRTY2hlZHVsZXI7IC8qIExSLiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBweENvZGU7ICAgICAgICAgICAgLyogU1JSMC4gKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSBwb3J0SU5JVElBTF9NU1I7ICAgICAgICAgICAgICAgICAgIC8qIFNSUjEuICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHZQb3J0RW5kU2NoZWR1bGVyOyAvKiBOZXh0IExSLiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MDAwMDAwMDBVTDsgICAgICAgICAgICAgICAgICAgICAgLyogQmFja2NoYWluLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gMHgxMDAwMDAwMVVMOzsJLyogUjAuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgwMDAwMDAwMFVMOwkvKiBVU1BSRzAuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgwMDAwMDAwMFVMOwkvKiBDUi4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDAwMDAwMDAwVUw7CS8qIFhFUi4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDAwMDAwMDAwVUw7CS8qIENUUi4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgdlBvcnRFbmRTY2hlZHVsZXI7CS8qIExSLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBweENvZGU7IC8qIFNSUjAuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gcG9ydElOSVRJQUxfTVNSOy8qIFNSUjEuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHZQb3J0RW5kU2NoZWR1bGVyOy8qIE5leHQgTFIuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgwMDAwMDAwMFVMOy8qIEJhY2tjaGFpbi4gKi8NCiANCi0gICAgcmV0dXJuIHB4VG9wT2ZTdGFjazsNCisJcmV0dXJuIHB4VG9wT2ZTdGFjazsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogQmFzZVR5cGVfdCB4UG9ydFN0YXJ0U2NoZWR1bGVyKCB2b2lkICkNCiB7DQotICAgIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoKTsNCi0gICAgWEV4Y19SZWdpc3RlckhhbmRsZXIoIFhFWENfSURfU1lTVEVNX0NBTEwsICggWEV4Y2VwdGlvbkhhbmRsZXIgKSB2UG9ydFlpZWxkLCAoIHZvaWQgKiApIDAgKTsNCi0gICAgdlBvcnRTdGFydEZpcnN0VGFzaygpOw0KKwlwcnZTZXR1cFRpbWVySW50ZXJydXB0KCk7DQorCVhFeGNfUmVnaXN0ZXJIYW5kbGVyKCBYRVhDX0lEX1NZU1RFTV9DQUxMLCAoIFhFeGNlcHRpb25IYW5kbGVyICkgdlBvcnRZaWVsZCwgKCB2b2lkICogKSAwICk7DQorCXZQb3J0U3RhcnRGaXJzdFRhc2soKTsNCiANCi0gICAgLyogU2hvdWxkIG5vdCBnZXQgaGVyZSBhcyB0aGUgdGFza3MgYXJlIG5vdyBydW5uaW5nISAqLw0KLSAgICByZXR1cm4gcGRGQUxTRTsNCisJLyogU2hvdWxkIG5vdCBnZXQgaGVyZSBhcyB0aGUgdGFza3MgYXJlIG5vdyBydW5uaW5nISAqLw0KKwlyZXR1cm4gcGRGQUxTRTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogdm9pZCB2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApDQogew0KLSAgICAvKiBOb3QgaW1wbGVtZW50ZWQuICovDQotICAgIGZvciggOyA7ICkNCi0gICAgew0KLSAgICB9DQorCS8qIE5vdCBpbXBsZW1lbnRlZC4gKi8NCisJZm9yKCA7OyApOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCkBAIC0xNzAsOTcgKzE2Niw5NSBAQAogICovDQogc3RhdGljIHZvaWQgcHJ2U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApDQogew0KLSAgICBjb25zdCB1aW50MzJfdCB1bEludGVydmFsID0gKCAoIGNvbmZpZ0NQVV9DTE9DS19IWiAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApIC0gMVVMICk7DQorY29uc3QgdWludDMyX3QgdWxJbnRlcnZhbCA9ICggKCBjb25maWdDUFVfQ0xPQ0tfSFogLyBjb25maWdUSUNLX1JBVEVfSFogKSAtIDFVTCApOw0KIA0KLSAgICBYVGltZV9ERUNDbGVhckludGVycnVwdCgpOw0KLSAgICBYVGltZV9GSVRDbGVhckludGVycnVwdCgpOw0KLSAgICBYVGltZV9XRFRDbGVhckludGVycnVwdCgpOw0KLSAgICBYVGltZV9XRFREaXNhYmxlSW50ZXJydXB0KCk7DQotICAgIFhUaW1lX0ZJVERpc2FibGVJbnRlcnJ1cHQoKTsNCisJWFRpbWVfREVDQ2xlYXJJbnRlcnJ1cHQoKTsNCisJWFRpbWVfRklUQ2xlYXJJbnRlcnJ1cHQoKTsNCisJWFRpbWVfV0RUQ2xlYXJJbnRlcnJ1cHQoKTsNCisJWFRpbWVfV0RURGlzYWJsZUludGVycnVwdCgpOw0KKwlYVGltZV9GSVREaXNhYmxlSW50ZXJydXB0KCk7DQogDQotICAgIFhFeGNfUmVnaXN0ZXJIYW5kbGVyKCBYRVhDX0lEX0RFQ19JTlQsICggWEV4Y2VwdGlvbkhhbmRsZXIgKSB2UG9ydFRpY2tJU1IsICggdm9pZCAqICkgMCApOw0KKwlYRXhjX1JlZ2lzdGVySGFuZGxlciggWEVYQ19JRF9ERUNfSU5ULCAoIFhFeGNlcHRpb25IYW5kbGVyICkgdlBvcnRUaWNrSVNSLCAoIHZvaWQgKiApIDAgKTsNCiANCi0gICAgWFRpbWVfREVDRW5hYmxlQXV0b1JlbG9hZCgpOw0KLSAgICBYVGltZV9ERUNTZXRJbnRlcnZhbCggdWxJbnRlcnZhbCApOw0KLSAgICBYVGltZV9ERUNFbmFibGVJbnRlcnJ1cHQoKTsNCisJWFRpbWVfREVDRW5hYmxlQXV0b1JlbG9hZCgpOw0KKwlYVGltZV9ERUNTZXRJbnRlcnZhbCggdWxJbnRlcnZhbCApOw0KKwlYVGltZV9ERUNFbmFibGVJbnRlcnJ1cHQoKTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQotdm9pZCB2UG9ydElTUkhhbmRsZXIoIHZvaWQgKiBwdk51bGxEb05vdFVzZSApDQordm9pZCB2UG9ydElTUkhhbmRsZXIoIHZvaWQgKnB2TnVsbERvTm90VXNlICkNCiB7DQotICAgIHVpbnQzMl90IHVsSW50ZXJydXB0U3RhdHVzLCB1bEludGVycnVwdE1hc2sgPSAxVUw7DQotICAgIEJhc2VUeXBlX3QgeEludGVycnVwdE51bWJlcjsNCi0gICAgWEludGNfQ29uZmlnICogcHhJbnRlcnJ1cHRDb250cm9sbGVyOw0KLSAgICBYSW50Y19WZWN0b3JUYWJsZUVudHJ5ICogcHhUYWJsZTsNCit1aW50MzJfdCB1bEludGVycnVwdFN0YXR1cywgdWxJbnRlcnJ1cHRNYXNrID0gMVVMOw0KK0Jhc2VUeXBlX3QgeEludGVycnVwdE51bWJlcjsNCitYSW50Y19Db25maWcgKnB4SW50ZXJydXB0Q29udHJvbGxlcjsNCitYSW50Y19WZWN0b3JUYWJsZUVudHJ5ICpweFRhYmxlOw0KIA0KLSAgICAvKiBKdXN0IHRvIHJlbW92ZSBjb21waWxlciB3YXJuaW5nLiAqLw0KLSAgICAoIHZvaWQgKSBwdk51bGxEb05vdFVzZTsNCisJLyogSnVzdCB0byByZW1vdmUgY29tcGlsZXIgd2FybmluZy4gKi8NCisJKCB2b2lkICkgcHZOdWxsRG9Ob3RVc2U7DQogDQotICAgIC8qIEdldCB0aGUgY29uZmlndXJhdGlvbiBieSB1c2luZyB0aGUgZGV2aWNlIElEIC0gaW4gdGhpcyBjYXNlIGl0IGlzDQotICAgICAqIGFzc3VtZWQgdGhhdCBvbmx5IG9uZSBpbnRlcnJ1cHQgY29udHJvbGxlciBpcyBiZWluZyB1c2VkLiAqLw0KLSAgICBweEludGVycnVwdENvbnRyb2xsZXIgPSAmWEludGNfQ29uZmlnVGFibGVbIFhQQVJfWFBTX0lOVENfMF9ERVZJQ0VfSUQgXTsNCisJLyogR2V0IHRoZSBjb25maWd1cmF0aW9uIGJ5IHVzaW5nIHRoZSBkZXZpY2UgSUQgLSBpbiB0aGlzIGNhc2UgaXQgaXMNCisJYXNzdW1lZCB0aGF0IG9ubHkgb25lIGludGVycnVwdCBjb250cm9sbGVyIGlzIGJlaW5nIHVzZWQuICovDQorCXB4SW50ZXJydXB0Q29udHJvbGxlciA9ICZYSW50Y19Db25maWdUYWJsZVsgWFBBUl9YUFNfSU5UQ18wX0RFVklDRV9JRCBdOw0KIA0KLSAgICAvKiBXaGljaCBpbnRlcnJ1cHRzIGFyZSBwZW5kaW5nPyAqLw0KLSAgICB1bEludGVycnVwdFN0YXR1cyA9IFhJbnRjX21HZXRJbnRyU3RhdHVzKCBweEludGVycnVwdENvbnRyb2xsZXItPkJhc2VBZGRyZXNzICk7DQorCS8qIFdoaWNoIGludGVycnVwdHMgYXJlIHBlbmRpbmc/ICovDQorCXVsSW50ZXJydXB0U3RhdHVzID0gWEludGNfbUdldEludHJTdGF0dXMoIHB4SW50ZXJydXB0Q29udHJvbGxlci0+QmFzZUFkZHJlc3MgKTsNCiANCi0gICAgZm9yKCB4SW50ZXJydXB0TnVtYmVyID0gMDsgeEludGVycnVwdE51bWJlciA8IFhQQVJfSU5UQ19NQVhfTlVNX0lOVFJfSU5QVVRTOyB4SW50ZXJydXB0TnVtYmVyKysgKQ0KLSAgICB7DQotICAgICAgICBpZiggdWxJbnRlcnJ1cHRTdGF0dXMgJiAweDAxVUwgKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIC8qIENsZWFyIHRoZSBwZW5kaW5nIGludGVycnVwdC4gKi8NCi0gICAgICAgICAgICBYSW50Y19tQWNrSW50ciggcHhJbnRlcnJ1cHRDb250cm9sbGVyLT5CYXNlQWRkcmVzcywgdWxJbnRlcnJ1cHRNYXNrICk7DQorCWZvciggeEludGVycnVwdE51bWJlciA9IDA7IHhJbnRlcnJ1cHROdW1iZXIgPCBYUEFSX0lOVENfTUFYX05VTV9JTlRSX0lOUFVUUzsgeEludGVycnVwdE51bWJlcisrICkNCisJew0KKwkJaWYoIHVsSW50ZXJydXB0U3RhdHVzICYgMHgwMVVMICkNCisJCXsNCisJCQkvKiBDbGVhciB0aGUgcGVuZGluZyBpbnRlcnJ1cHQuICovDQorCQkJWEludGNfbUFja0ludHIoIHB4SW50ZXJydXB0Q29udHJvbGxlci0+QmFzZUFkZHJlc3MsIHVsSW50ZXJydXB0TWFzayApOw0KIA0KLSAgICAgICAgICAgIC8qIENhbGwgdGhlIHJlZ2lzdGVyZWQgaGFuZGxlci4gKi8NCi0gICAgICAgICAgICBweFRhYmxlID0gJiggcHhJbnRlcnJ1cHRDb250cm9sbGVyLT5IYW5kbGVyVGFibGVbIHhJbnRlcnJ1cHROdW1iZXIgXSApOw0KLSAgICAgICAgICAgIHB4VGFibGUtPkhhbmRsZXIoIHB4VGFibGUtPkNhbGxCYWNrUmVmICk7DQotICAgICAgICB9DQorCQkJLyogQ2FsbCB0aGUgcmVnaXN0ZXJlZCBoYW5kbGVyLiAqLw0KKwkJCXB4VGFibGUgPSAmKCBweEludGVycnVwdENvbnRyb2xsZXItPkhhbmRsZXJUYWJsZVsgeEludGVycnVwdE51bWJlciBdICk7DQorCQkJcHhUYWJsZS0+SGFuZGxlciggcHhUYWJsZS0+Q2FsbEJhY2tSZWYgKTsNCisJCX0NCiANCi0gICAgICAgIC8qIENoZWNrIHRoZSBuZXh0IGludGVycnVwdC4gKi8NCi0gICAgICAgIHVsSW50ZXJydXB0TWFzayA8PD0gMHgwMVVMOw0KLSAgICAgICAgdWxJbnRlcnJ1cHRTdGF0dXMgPj49IDB4MDFVTDsNCisJCS8qIENoZWNrIHRoZSBuZXh0IGludGVycnVwdC4gKi8NCisJCXVsSW50ZXJydXB0TWFzayA8PD0gMHgwMVVMOw0KKwkJdWxJbnRlcnJ1cHRTdGF0dXMgPj49IDB4MDFVTDsNCiANCi0gICAgICAgIC8qIEhhdmUgd2Ugc2VydmljZWQgYWxsIGludGVycnVwdHM/ICovDQotICAgICAgICBpZiggdWxJbnRlcnJ1cHRTdGF0dXMgPT0gMFVMICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0NCi0gICAgfQ0KKwkJLyogSGF2ZSB3ZSBzZXJ2aWNlZCBhbGwgaW50ZXJydXB0cz8gKi8NCisJCWlmKCB1bEludGVycnVwdFN0YXR1cyA9PSAwVUwgKQ0KKwkJew0KKwkJCWJyZWFrOw0KKwkJfQ0KKwl9DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlBvcnRTZXR1cEludGVycnVwdENvbnRyb2xsZXIoIHZvaWQgKQ0KIHsNCi0gICAgZXh0ZXJuIHZvaWQgdlBvcnRJU1JXcmFwcGVyKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdlBvcnRJU1JXcmFwcGVyKCB2b2lkICk7DQogDQotICAgIC8qIFBlcmZvcm0gYWxsIGxpYnJhcnkgY2FsbHMgbmVjZXNzYXJ5IHRvIGluaXRpYWxpc2UgdGhlIGV4Y2VwdGlvbiB0YWJsZQ0KLSAgICAgKiBhbmQgaW50ZXJydXB0IGNvbnRyb2xsZXIuICBUaGlzIGFzc3VtZXMgb25seSBvbmUgaW50ZXJydXB0IGNvbnRyb2xsZXIgaXMgaW4NCi0gICAgICogdXNlLiAqLw0KLSAgICBYRXhjX21EaXNhYmxlRXhjZXB0aW9ucyggWEVYQ19OT05fQ1JJVElDQUwgKTsNCi0gICAgWEV4Y19Jbml0KCk7DQorCS8qIFBlcmZvcm0gYWxsIGxpYnJhcnkgY2FsbHMgbmVjZXNzYXJ5IHRvIGluaXRpYWxpc2UgdGhlIGV4Y2VwdGlvbiB0YWJsZQ0KKwlhbmQgaW50ZXJydXB0IGNvbnRyb2xsZXIuICBUaGlzIGFzc3VtZXMgb25seSBvbmUgaW50ZXJydXB0IGNvbnRyb2xsZXIgaXMgaW4NCisJdXNlLiAqLw0KKwlYRXhjX21EaXNhYmxlRXhjZXB0aW9ucyggWEVYQ19OT05fQ1JJVElDQUwgKTsNCisJWEV4Y19Jbml0KCk7DQogDQotICAgIC8qIFRoZSBsaWJyYXJ5IGZ1bmN0aW9ucyBzYXZlIHRoZSBjb250ZXh0IC0gd2UgdGhlbiBqdW1wIHRvIGEgd3JhcHBlciB0bw0KLSAgICAgKiBzYXZlIHRoZSBzdGFjayBpbnRvIHRoZSBUQ0IuICBUaGUgd3JhcHBlciB0aGVuIGNhbGxzIHRoZSBoYW5kbGVyIGRlZmluZWQNCi0gICAgICogYWJvdmUuICovDQotICAgIFhFeGNfUmVnaXN0ZXJIYW5kbGVyKCBYRVhDX0lEX05PTl9DUklUSUNBTF9JTlQsICggWEV4Y2VwdGlvbkhhbmRsZXIgKSB2UG9ydElTUldyYXBwZXIsIE5VTEwgKTsNCi0gICAgWEludGNfSW5pdGlhbGl6ZSggJnhJbnRlcnJ1cHRDb250cm9sbGVyLCBYUEFSX1hQU19JTlRDXzBfREVWSUNFX0lEICk7DQotICAgIFhJbnRjX1N0YXJ0KCAmeEludGVycnVwdENvbnRyb2xsZXIsIFhJTl9SRUFMX01PREUgKTsNCisJLyogVGhlIGxpYnJhcnkgZnVuY3Rpb25zIHNhdmUgdGhlIGNvbnRleHQgLSB3ZSB0aGVuIGp1bXAgdG8gYSB3cmFwcGVyIHRvDQorCXNhdmUgdGhlIHN0YWNrIGludG8gdGhlIFRDQi4gIFRoZSB3cmFwcGVyIHRoZW4gY2FsbHMgdGhlIGhhbmRsZXIgZGVmaW5lZA0KKwlhYm92ZS4gKi8NCisJWEV4Y19SZWdpc3RlckhhbmRsZXIoIFhFWENfSURfTk9OX0NSSVRJQ0FMX0lOVCwgKCBYRXhjZXB0aW9uSGFuZGxlciApIHZQb3J0SVNSV3JhcHBlciwgTlVMTCApOw0KKwlYSW50Y19Jbml0aWFsaXplKCAmeEludGVycnVwdENvbnRyb2xsZXIsIFhQQVJfWFBTX0lOVENfMF9ERVZJQ0VfSUQgKTsNCisJWEludGNfU3RhcnQoICZ4SW50ZXJydXB0Q29udHJvbGxlciwgWElOX1JFQUxfTU9ERSApOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi1CYXNlVHlwZV90IHhQb3J0SW5zdGFsbEludGVycnVwdEhhbmRsZXIoIHVpbnQ4X3QgdWNJbnRlcnJ1cHRJRCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhJbnRlcnJ1cHRIYW5kbGVyIHB4SGFuZGxlciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiBwdkNhbGxCYWNrUmVmICkNCitCYXNlVHlwZV90IHhQb3J0SW5zdGFsbEludGVycnVwdEhhbmRsZXIoIHVpbnQ4X3QgdWNJbnRlcnJ1cHRJRCwgWEludGVycnVwdEhhbmRsZXIgcHhIYW5kbGVyLCB2b2lkICpwdkNhbGxCYWNrUmVmICkNCiB7DQotICAgIEJhc2VUeXBlX3QgeFJldHVybiA9IHBkRkFJTDsNCitCYXNlVHlwZV90IHhSZXR1cm4gPSBwZEZBSUw7DQogDQotICAgIC8qIFRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCBoZXJlIHNvIHRoZSBzY29wZSBvZiB4SW50ZXJydXB0Q29udHJvbGxlciBjYW4NCi0gICAgICogcmVtYWluIHdpdGhpbiB0aGlzIGZpbGUuICovDQorCS8qIFRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCBoZXJlIHNvIHRoZSBzY29wZSBvZiB4SW50ZXJydXB0Q29udHJvbGxlciBjYW4NCisJcmVtYWluIHdpdGhpbiB0aGlzIGZpbGUuICovDQogDQotICAgIGlmKCBYU1RfU1VDQ0VTUyA9PSBYSW50Y19Db25uZWN0KCAmeEludGVycnVwdENvbnRyb2xsZXIsIHVjSW50ZXJydXB0SUQsIHB4SGFuZGxlciwgcHZDYWxsQmFja1JlZiApICkNCi0gICAgew0KLSAgICAgICAgWEludGNfRW5hYmxlKCAmeEludGVycnVwdENvbnRyb2xsZXIsIHVjSW50ZXJydXB0SUQgKTsNCi0gICAgICAgIHhSZXR1cm4gPSBwZFBBU1M7DQotICAgIH0NCisJaWYoIFhTVF9TVUNDRVNTID09IFhJbnRjX0Nvbm5lY3QoICZ4SW50ZXJydXB0Q29udHJvbGxlciwgdWNJbnRlcnJ1cHRJRCwgcHhIYW5kbGVyLCBwdkNhbGxCYWNrUmVmICkgKQ0KKwl7DQorCQlYSW50Y19FbmFibGUoICZ4SW50ZXJydXB0Q29udHJvbGxlciwgdWNJbnRlcnJ1cHRJRCApOw0KKwkJeFJldHVybiA9IHBkUEFTUzsNCisJfQ0KIA0KLSAgICByZXR1cm4geFJldHVybjsNCisJcmV0dXJuIHhSZXR1cm47DQogfQ0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0dDQy9QUEM0NDBfWGlsaW54L3BvcnRtYWNyby5oIGIvcG9ydGFibGUvR0NDL1BQQzQ0MF9YaWxpbngvcG9ydG1hY3JvLmgKaW5kZXggMjk4NTAwZS4uMGE1M2U3MSAxMDA2NDQKLS0tIGEvcG9ydGFibGUvR0NDL1BQQzQ0MF9YaWxpbngvcG9ydG1hY3JvLmgKKysrIGIvcG9ydGFibGUvR0NDL1BQQzQ0MF9YaWxpbngvcG9ydG1hY3JvLmgKQEAgLTI2LDEzICsyNiwxMyBAQAogICovDQogDQogI2lmbmRlZiBQT1JUTUFDUk9fSA0KLSAgICAjZGVmaW5lIFBPUlRNQUNST19IDQorI2RlZmluZSBQT1JUTUFDUk9fSA0KIA0KLSAgICAjaW5jbHVkZSAieGV4Y2VwdGlvbl9sLmgiDQorI2luY2x1ZGUgInhleGNlcHRpb25fbC5oIg0KIA0KLSAgICAjaWZkZWYgX19jcGx1c3BsdXMNCi0gICAgICAgIGV4dGVybiAiQyIgew0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICogUG9ydCBzcGVjaWZpYyBkZWZpbml0aW9ucy4NCkBAIC00NSw3NSArNDUsNzQgQEAKICAqLw0KIA0KIC8qIFR5cGUgZGVmaW5pdGlvbnMuICovDQotICAgICNkZWZpbmUgcG9ydENIQVIgICAgICAgICAgY2hhcg0KLSAgICAjZGVmaW5lIHBvcnRGTE9BVCAgICAgICAgIGZsb2F0DQotICAgICNkZWZpbmUgcG9ydERPVUJMRSAgICAgICAgZG91YmxlDQotICAgICNkZWZpbmUgcG9ydExPTkcgICAgICAgICAgbG9uZw0KLSAgICAjZGVmaW5lIHBvcnRTSE9SVCAgICAgICAgIHNob3J0DQotICAgICNkZWZpbmUgcG9ydFNUQUNLX1RZUEUgICAgdWludDMyX3QNCi0gICAgI2RlZmluZSBwb3J0QkFTRV9UWVBFICAgICBsb25nDQorI2RlZmluZSBwb3J0Q0hBUgkJY2hhcg0KKyNkZWZpbmUgcG9ydEZMT0FUCQlmbG9hdA0KKyNkZWZpbmUgcG9ydERPVUJMRQkJZG91YmxlDQorI2RlZmluZSBwb3J0TE9ORwkJbG9uZw0KKyNkZWZpbmUgcG9ydFNIT1JUCQlzaG9ydA0KKyNkZWZpbmUgcG9ydFNUQUNLX1RZUEUJdWludDMyX3QNCisjZGVmaW5lIHBvcnRCQVNFX1RZUEUJbG9uZw0KIA0KLSAgICB0eXBlZGVmIHBvcnRTVEFDS19UWVBFICAgU3RhY2tUeXBlX3Q7DQotICAgIHR5cGVkZWYgbG9uZyAgICAgICAgICAgICBCYXNlVHlwZV90Ow0KLSAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgICAgVUJhc2VUeXBlX3Q7DQordHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSBTdGFja1R5cGVfdDsNCit0eXBlZGVmIGxvbmcgQmFzZVR5cGVfdDsNCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgVUJhc2VUeXBlX3Q7DQogDQotICAgICNpZiAoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQotICAgICAgICB0eXBlZGVmIHVpbnQxNl90ICAgICBUaWNrVHlwZV90Ow0KLSAgICAgICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICggVGlja1R5cGVfdCApIDB4ZmZmZg0KLSAgICAjZWxzZQ0KLSAgICAgICAgdHlwZWRlZiB1aW50MzJfdCAgICAgVGlja1R5cGVfdDsNCi0gICAgICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwNCi0gICAgI2VuZGlmDQorI2lmKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KKwl0eXBlZGVmIHVpbnQxNl90IFRpY2tUeXBlX3Q7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIFRpY2tUeXBlX3QgKSAweGZmZmYNCisjZWxzZQ0KKwl0eXBlZGVmIHVpbnQzMl90IFRpY2tUeXBlX3Q7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwNCisjZW5kaWYNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBUaGlzIHBvcnQgdXNlcyB0aGUgY3JpdGljYWwgbmVzdGluZyBjb3VudCBmcm9tIHRoZSBUQ0IgcmF0aGVyIHRoYW4NCi0gKiBtYWludGFpbmluZyBhIHNlcGFyYXRlIHZhbHVlIGFuZCB0aGVuIHNhdmluZyB0aGlzIHZhbHVlIGluIHRoZSB0YXNrIHN0YWNrLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRDUklUSUNBTF9ORVNUSU5HX0lOX1RDQiAgICAxDQorbWFpbnRhaW5pbmcgYSBzZXBhcmF0ZSB2YWx1ZSBhbmQgdGhlbiBzYXZpbmcgdGhpcyB2YWx1ZSBpbiB0aGUgdGFzayBzdGFjay4gKi8NCisjZGVmaW5lIHBvcnRDUklUSUNBTF9ORVNUSU5HX0lOX1RDQgkJMQ0KIA0KIC8qIEludGVycnVwdCBjb250cm9sIG1hY3Jvcy4gKi8NCi0gICAgI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgICAgWEV4Y19tRGlzYWJsZUV4Y2VwdGlvbnMoIFhFWENfTk9OX0NSSVRJQ0FMICk7DQotICAgICNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkgICAgIFhFeGNfbUVuYWJsZUV4Y2VwdGlvbnMoIFhFWENfTk9OX0NSSVRJQ0FMICk7DQorI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkJCVhFeGNfbURpc2FibGVFeGNlcHRpb25zKCBYRVhDX05PTl9DUklUSUNBTCApOw0KKyNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkJCQlYRXhjX21FbmFibGVFeGNlcHRpb25zKCBYRVhDX05PTl9DUklUSUNBTCApOw0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIENyaXRpY2FsIHNlY3Rpb24gbWFjcm9zLiAqLw0KLSAgICB2b2lkIHZUYXNrRW50ZXJDcml0aWNhbCggdm9pZCApOw0KLSAgICB2b2lkIHZUYXNrRXhpdENyaXRpY2FsKCB2b2lkICk7DQotICAgICNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgICAgdlRhc2tFbnRlckNyaXRpY2FsKCkNCi0gICAgI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpICAgICB2VGFza0V4aXRDcml0aWNhbCgpDQordm9pZCB2VGFza0VudGVyQ3JpdGljYWwoIHZvaWQgKTsNCit2b2lkIHZUYXNrRXhpdENyaXRpY2FsKCB2b2lkICk7DQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKQkJCXZUYXNrRW50ZXJDcml0aWNhbCgpDQorI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpCQkJCXZUYXNrRXhpdENyaXRpY2FsKCkNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBUYXNrIHV0aWxpdGllcy4gKi8NCi0gICAgdm9pZCB2UG9ydFlpZWxkKCB2b2lkICk7DQotICAgICNkZWZpbmUgcG9ydFlJRUxEKCkgICAgICAgICAgICAgYXNtIHZvbGF0aWxlICggIlNDIFxuXHQgTk9QIiApDQotICAgICNkZWZpbmUgcG9ydFlJRUxEX0ZST01fSVNSKCkgICAgdlRhc2tTd2l0Y2hDb250ZXh0KCkNCit2b2lkIHZQb3J0WWllbGQoIHZvaWQgKTsNCisjZGVmaW5lIHBvcnRZSUVMRCgpIGFzbSB2b2xhdGlsZSAoICJTQyBcblx0IE5PUCIgKQ0KKyNkZWZpbmUgcG9ydFlJRUxEX0ZST01fSVNSKCkgdlRhc2tTd2l0Y2hDb250ZXh0KCkNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBIYXJkd2FyZSBzcGVjaWZpY3MuICovDQotICAgICNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UICAgIDgNCi0gICAgI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RIICAgICAgKCAtMSApDQotICAgICNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TICAgICggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQotICAgICNkZWZpbmUgcG9ydE5PUCgpICAgIGFzbSB2b2xhdGlsZSAoICJOT1AiICkNCisjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVAkJCTgNCisjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEgJCQkoIC0xICkNCisjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUwkJCSggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQorI2RlZmluZSBwb3J0Tk9QKCkJCQkJCWFzbSB2b2xhdGlsZSAoICJOT1AiICkNCiANCiAvKiBUaGVyZSBhcmUgMzIgKiAzMmJpdCBmbG9hdGluZyBwb2ludCByZWdpZXRlcnMsIHBsdXMgdGhlIEZQU0NSIHRvIHNhdmUuICovDQotICAgICNkZWZpbmUgcG9ydE5PX0ZMT1BfUkVHSVNURVJTX1RPX1NBVkUgICAgKCAzMiArIDEgKQ0KKyNkZWZpbmUgcG9ydE5PX0ZMT1BfUkVHSVNURVJTX1RPX1NBVkUgICggMzIgKyAxICkNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBUYXNrIGZ1bmN0aW9uIG1hY3JvcyBhcyBkZXNjcmliZWQgb24gdGhlIEZyZWVSVE9TLm9yZyBXRUIgc2l0ZS4gKi8NCi0gICAgI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQotICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgICAgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCiANCiAvKiBQb3J0IHNwZWNpZmljIGludGVycnVwdCBoYW5kbGluZyBmdW5jdGlvbnMuICovDQotICAgIHZvaWQgdlBvcnRTZXR1cEludGVycnVwdENvbnRyb2xsZXIoIHZvaWQgKTsNCi0gICAgQmFzZVR5cGVfdCB4UG9ydEluc3RhbGxJbnRlcnJ1cHRIYW5kbGVyKCB1aW50OF90IHVjSW50ZXJydXB0SUQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEludGVycnVwdEhhbmRsZXIgcHhIYW5kbGVyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiBwdkNhbGxCYWNrUmVmICk7DQordm9pZCB2UG9ydFNldHVwSW50ZXJydXB0Q29udHJvbGxlciggdm9pZCApOw0KK0Jhc2VUeXBlX3QgeFBvcnRJbnN0YWxsSW50ZXJydXB0SGFuZGxlciggdWludDhfdCB1Y0ludGVycnVwdElELCBYSW50ZXJydXB0SGFuZGxlciBweEhhbmRsZXIsIHZvaWQgKnB2Q2FsbEJhY2tSZWYgKTsNCiANCi0gICAgI2lmZGVmIF9fY3BsdXNwbHVzDQotICAgICAgICB9DQotICAgICNlbmRpZg0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCiANCiAjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8NCisNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9HQ0MvUklTQy1WL2NoaXBfc3BlY2lmaWNfZXh0ZW5zaW9ucy9QdWxwaW5vX1ZlZ2FfUlYzMk0xUk0vZnJlZXJ0b3NfcmlzY192X2NoaXBfc3BlY2lmaWNfZXh0ZW5zaW9ucy5oIGIvcG9ydGFibGUvR0NDL1JJU0MtVi9jaGlwX3NwZWNpZmljX2V4dGVuc2lvbnMvUHVscGlub19WZWdhX1JWMzJNMVJNL2ZyZWVydG9zX3Jpc2Nfdl9jaGlwX3NwZWNpZmljX2V4dGVuc2lvbnMuaAppbmRleCBkODgyZDYwLi44Y2Q2Y2RiIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9HQ0MvUklTQy1WL2NoaXBfc3BlY2lmaWNfZXh0ZW5zaW9ucy9QdWxwaW5vX1ZlZ2FfUlYzMk0xUk0vZnJlZXJ0b3NfcmlzY192X2NoaXBfc3BlY2lmaWNfZXh0ZW5zaW9ucy5oCisrKyBiL3BvcnRhYmxlL0dDQy9SSVNDLVYvY2hpcF9zcGVjaWZpY19leHRlbnNpb25zL1B1bHBpbm9fVmVnYV9SVjMyTTFSTS9mcmVlcnRvc19yaXNjX3ZfY2hpcF9zcGVjaWZpY19leHRlbnNpb25zLmgKQEAgLTcsOCArNyw4IEBACiAgKiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvDQogICogdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YNCiAgKiB0aGUgU29mdHdhcmUsIGFuZCB0DQotICoNCi0gKiBvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywNCisNCisgbyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sDQogICogc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6DQogICoNCiAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwNCkBAIC01OSw1MSArNTksNTEgQEAKICNpZm5kZWYgX19GUkVFUlRPU19SSVNDX1ZfRVhURU5TSU9OU19IX18NCiAjZGVmaW5lIF9fRlJFRVJUT1NfUklTQ19WX0VYVEVOU0lPTlNfSF9fDQogDQotI2RlZmluZSBwb3J0YXNtSEFTX01USU1FICAgICAgICAgICAgICAgICAgMA0KKyNkZWZpbmUgcG9ydGFzbUhBU19NVElNRSAwDQogDQogLyogQ29uc3RhbnRzIHRvIGRlZmluZSB0aGUgYWRkaXRpb25hbCByZWdpc3RlcnMgZm91bmQgb24gdGhlIFB1bHBpbm8gUkk1S1kuICovDQotI2RlZmluZSBscHN0YXJ0MCAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3YjANCi0jZGVmaW5lIGxwZW5kMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDdiMQ0KLSNkZWZpbmUgbHBjb3VudDAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N2IyDQotI2RlZmluZSBscHN0YXJ0MSAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3YjQNCi0jZGVmaW5lIGxwZW5kMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDdiNQ0KLSNkZWZpbmUgbHBjb3VudDEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N2I2DQorI2RlZmluZSBscHN0YXJ0MCAJMHg3YjANCisjZGVmaW5lIGxwZW5kMCAJCTB4N2IxDQorI2RlZmluZSBscGNvdW50MCAJMHg3YjINCisjZGVmaW5lIGxwc3RhcnQxIAkweDdiNA0KKyNkZWZpbmUgbHBlbmQxIAkJMHg3YjUNCisjZGVmaW5lIGxwY291bnQxIAkweDdiNg0KIA0KIC8qIFNpeCBhZGRpdGlvbmFsIHJlZ2lzdGVycyB0byBzYXZlIGFuZCByZXN0b3JlLCBhcyBwZXIgdGhlICNkZWZpbmVzIGFib3ZlLiAqLw0KLSNkZWZpbmUgcG9ydGFzbUFERElUSU9OQUxfQ09OVEVYVF9TSVpFICAgIDYgLyogTXVzdCBiZSBldmVuIG51bWJlciBvbiAzMi1iaXQgY29yZXMuICovDQorI2RlZmluZSBwb3J0YXNtQURESVRJT05BTF9DT05URVhUX1NJWkUgNiAvKiBNdXN0IGJlIGV2ZW4gbnVtYmVyIG9uIDMyLWJpdCBjb3Jlcy4gKi8NCiANCiAvKiBTYXZlIGFkZGl0aW9uYWwgcmVnaXN0ZXJzIGZvdW5kIG9uIHRoZSBQdWxwaW5vLiAqLw0KIC5tYWNybyBwb3J0YXNtU0FWRV9BRERJVElPTkFMX1JFR0lTVEVSUw0KLWFkZGkgc3AsIHNwLCAtKCBwb3J0YXNtQURESVRJT05BTF9DT05URVhUX1NJWkUgKiBwb3J0V09SRF9TSVpFICkgLyogTWFrZSByb29tIGZvciB0aGUgYWRkaXRpb25hbCByZWdpc3RlcnMuICovDQotY3NyciB0MCwgbHBzdGFydDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMb2FkIGFkZGl0aW9uYWwgcmVnaXN0ZXJzIGludG8gYWNjZXNzaWJsZSB0ZW1wb3JhcnkgcmVnaXN0ZXJzLiAqLw0KLWNzcnIgdDEsIGxwZW5kMA0KLWNzcnIgdDIsIGxwY291bnQwDQotY3NyciB0MywgbHBzdGFydDENCi1jc3JyIHQ0LCBscGVuZDENCi1jc3JyIHQ1LCBscGNvdW50MQ0KLXN3IHQwLCAxICogcG9ydFdPUkRfU0laRSggc3AgKQ0KLXN3IHQxLCAyICogcG9ydFdPUkRfU0laRSggc3AgKQ0KLXN3IHQyLCAzICogcG9ydFdPUkRfU0laRSggc3AgKQ0KLXN3IHQzLCA0ICogcG9ydFdPUkRfU0laRSggc3AgKQ0KLXN3IHQ0LCA1ICogcG9ydFdPUkRfU0laRSggc3AgKQ0KLXN3IHQ1LCA2ICogcG9ydFdPUkRfU0laRSggc3AgKQ0KLSAgIC5lbmRtDQorCWFkZGkgc3AsIHNwLCAtKHBvcnRhc21BRERJVElPTkFMX0NPTlRFWFRfU0laRSAqIHBvcnRXT1JEX1NJWkUpIC8qIE1ha2Ugcm9vbSBmb3IgdGhlIGFkZGl0aW9uYWwgcmVnaXN0ZXJzLiAqLw0KKwljc3JyIHQwLCBscHN0YXJ0MAkJCQkJCQkgLyogTG9hZCBhZGRpdGlvbmFsIHJlZ2lzdGVycyBpbnRvIGFjY2Vzc2libGUgdGVtcG9yYXJ5IHJlZ2lzdGVycy4gKi8NCisJY3NyciB0MSwgbHBlbmQwDQorCWNzcnIgdDIsIGxwY291bnQwDQorCWNzcnIgdDMsIGxwc3RhcnQxDQorCWNzcnIgdDQsIGxwZW5kMQ0KKwljc3JyIHQ1LCBscGNvdW50MQ0KKwlzdyB0MCwgMSAqIHBvcnRXT1JEX1NJWkUoIHNwICkNCisJc3cgdDEsIDIgKiBwb3J0V09SRF9TSVpFKCBzcCApDQorCXN3IHQyLCAzICogcG9ydFdPUkRfU0laRSggc3AgKQ0KKwlzdyB0MywgNCAqIHBvcnRXT1JEX1NJWkUoIHNwICkNCisJc3cgdDQsIDUgKiBwb3J0V09SRF9TSVpFKCBzcCApDQorCXN3IHQ1LCA2ICogcG9ydFdPUkRfU0laRSggc3AgKQ0KKwkuZW5kbQ0KIA0KIC8qIFJlc3RvcmUgdGhlIGFkZGl0aW9uYWwgcmVnaXN0ZXJzIGZvdW5kIG9uIHRoZSBQdWxwaW5vLiAqLw0KLSAgIC5tYWNybyBwb3J0YXNtUkVTVE9SRV9BRERJVElPTkFMX1JFR0lTVEVSUw0KLWx3IHQwLCAxICogcG9ydFdPUkRfU0laRSggc3AgKSAvKiBMb2FkIGFkZGl0aW9uYWwgcmVnaXN0ZXJzIGludG8gYWNjZXNzaWJsZSB0ZW1wb3JhcnkgcmVnaXN0ZXJzLiAqLw0KLWx3IHQxLCAyICogcG9ydFdPUkRfU0laRSggc3AgKQ0KLWx3IHQyLCAzICogcG9ydFdPUkRfU0laRSggc3AgKQ0KLWx3IHQzLCA0ICogcG9ydFdPUkRfU0laRSggc3AgKQ0KLWx3IHQ0LCA1ICogcG9ydFdPUkRfU0laRSggc3AgKQ0KLWx3IHQ1LCA2ICogcG9ydFdPUkRfU0laRSggc3AgKQ0KLWNzcncgbHBzdGFydDAsIHQwDQotY3NydyBscGVuZDAsIHQxDQotY3NydyBscGNvdW50MCwgdDINCi1jc3J3IGxwc3RhcnQxLCB0Mw0KLWNzcncgbHBlbmQxLCB0NA0KLWNzcncgbHBjb3VudDEsIHQ1DQotYWRkaSBzcCwgc3AsICggcG9ydGFzbUFERElUSU9OQUxfQ09OVEVYVF9TSVpFICogcG9ydFdPUkRfU0laRSApIC8qIFJlbW92ZSBzcGFjZSBhZGRlZCBmb3IgYWRkaXRpb25hbCByZWdpc3RlcnMuICovDQotICAgLmVuZG0NCisubWFjcm8gcG9ydGFzbVJFU1RPUkVfQURESVRJT05BTF9SRUdJU1RFUlMNCisJbHcgdDAsIDEgKiBwb3J0V09SRF9TSVpFKCBzcCApCQkJLyogTG9hZCBhZGRpdGlvbmFsIHJlZ2lzdGVycyBpbnRvIGFjY2Vzc2libGUgdGVtcG9yYXJ5IHJlZ2lzdGVycy4gKi8NCisJbHcgdDEsIDIgKiBwb3J0V09SRF9TSVpFKCBzcCApDQorCWx3IHQyLCAzICogcG9ydFdPUkRfU0laRSggc3AgKQ0KKwlsdyB0MywgNCAqIHBvcnRXT1JEX1NJWkUoIHNwICkNCisJbHcgdDQsIDUgKiBwb3J0V09SRF9TSVpFKCBzcCApDQorCWx3IHQ1LCA2ICogcG9ydFdPUkRfU0laRSggc3AgKQ0KKwljc3J3IGxwc3RhcnQwLCB0MA0KKwljc3J3IGxwZW5kMCwgdDENCisJY3NydyBscGNvdW50MCwgdDINCisJY3NydyBscHN0YXJ0MSwgdDMNCisJY3NydyBscGVuZDEsIHQ0DQorCWNzcncgbHBjb3VudDEsIHQ1DQorCWFkZGkgc3AsIHNwLCAocG9ydGFzbUFERElUSU9OQUxfQ09OVEVYVF9TSVpFICogcG9ydFdPUkRfU0laRSApLyogUmVtb3ZlIHNwYWNlIGFkZGVkIGZvciBhZGRpdGlvbmFsIHJlZ2lzdGVycy4gKi8NCisJLmVuZG0NCiANCiAjZW5kaWYgLyogX19GUkVFUlRPU19SSVNDX1ZfRVhURU5TSU9OU19IX18gKi8NCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9HQ0MvUklTQy1WL2NoaXBfc3BlY2lmaWNfZXh0ZW5zaW9ucy9SVjMySV9DTElOVF9ub19leHRlbnNpb25zL2ZyZWVydG9zX3Jpc2Nfdl9jaGlwX3NwZWNpZmljX2V4dGVuc2lvbnMuaCBiL3BvcnRhYmxlL0dDQy9SSVNDLVYvY2hpcF9zcGVjaWZpY19leHRlbnNpb25zL1JWMzJJX0NMSU5UX25vX2V4dGVuc2lvbnMvZnJlZXJ0b3NfcmlzY192X2NoaXBfc3BlY2lmaWNfZXh0ZW5zaW9ucy5oCmluZGV4IGJhYmZmNmEuLmJlMTkwOGEgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0dDQy9SSVNDLVYvY2hpcF9zcGVjaWZpY19leHRlbnNpb25zL1JWMzJJX0NMSU5UX25vX2V4dGVuc2lvbnMvZnJlZXJ0b3NfcmlzY192X2NoaXBfc3BlY2lmaWNfZXh0ZW5zaW9ucy5oCisrKyBiL3BvcnRhYmxlL0dDQy9SSVNDLVYvY2hpcF9zcGVjaWZpY19leHRlbnNpb25zL1JWMzJJX0NMSU5UX25vX2V4dGVuc2lvbnMvZnJlZXJ0b3NfcmlzY192X2NoaXBfc3BlY2lmaWNfZXh0ZW5zaW9ucy5oCkBAIC01MywxNiArNTMsMTYgQEAKICNpZm5kZWYgX19GUkVFUlRPU19SSVNDX1ZfRVhURU5TSU9OU19IX18NCiAjZGVmaW5lIF9fRlJFRVJUT1NfUklTQ19WX0VYVEVOU0lPTlNfSF9fDQogDQotI2RlZmluZSBwb3J0YXNtSEFTX1NJRklWRV9DTElOVCAgICAgICAgICAgMQ0KLSNkZWZpbmUgcG9ydGFzbUhBU19NVElNRSAgICAgICAgICAgICAgICAgIDENCi0jZGVmaW5lIHBvcnRhc21BRERJVElPTkFMX0NPTlRFWFRfU0laRSAgICAwIC8qIE11c3QgYmUgZXZlbiBudW1iZXIgb24gMzItYml0IGNvcmVzLiAqLw0KKyNkZWZpbmUgcG9ydGFzbUhBU19TSUZJVkVfQ0xJTlQgMQ0KKyNkZWZpbmUgcG9ydGFzbUhBU19NVElNRSAxDQorI2RlZmluZSBwb3J0YXNtQURESVRJT05BTF9DT05URVhUX1NJWkUgMCAvKiBNdXN0IGJlIGV2ZW4gbnVtYmVyIG9uIDMyLWJpdCBjb3Jlcy4gKi8NCiANCiAubWFjcm8gcG9ydGFzbVNBVkVfQURESVRJT05BTF9SRUdJU1RFUlMNCi0vKiBObyBhZGRpdGlvbmFsIHJlZ2lzdGVycyB0byBzYXZlLCBzbyB0aGlzIG1hY3JvIGRvZXMgbm90aGluZy4gKi8NCi0gICAuZW5kbQ0KKwkvKiBObyBhZGRpdGlvbmFsIHJlZ2lzdGVycyB0byBzYXZlLCBzbyB0aGlzIG1hY3JvIGRvZXMgbm90aGluZy4gKi8NCisJLmVuZG0NCiANCi0gICAubWFjcm8gcG9ydGFzbVJFU1RPUkVfQURESVRJT05BTF9SRUdJU1RFUlMNCi0vKiBObyBhZGRpdGlvbmFsIHJlZ2lzdGVycyB0byByZXN0b3JlLCBzbyB0aGlzIG1hY3JvIGRvZXMgbm90aGluZy4gKi8NCi0gICAuZW5kbQ0KKy5tYWNybyBwb3J0YXNtUkVTVE9SRV9BRERJVElPTkFMX1JFR0lTVEVSUw0KKwkvKiBObyBhZGRpdGlvbmFsIHJlZ2lzdGVycyB0byByZXN0b3JlLCBzbyB0aGlzIG1hY3JvIGRvZXMgbm90aGluZy4gKi8NCisJLmVuZG0NCiANCiAjZW5kaWYgLyogX19GUkVFUlRPU19SSVNDX1ZfRVhURU5TSU9OU19IX18gKi8NCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9HQ0MvUklTQy1WL3BvcnQuYyBiL3BvcnRhYmxlL0dDQy9SSVNDLVYvcG9ydC5jCmluZGV4IDc5OWFkMWQuLjk1MjVmZjYgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0dDQy9SSVNDLVYvcG9ydC5jCisrKyBiL3BvcnRhYmxlL0dDQy9SSVNDLVYvcG9ydC5jCkBAIC0yNiw4ICsyNiw4IEBACiAgKi8NCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgUklTQy1WIFJWMzIgcG9ydC4NCi0qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorICogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFibGUuaCBmb3IgdGhlIFJJU0MtViBSVjMyIHBvcnQuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBTY2hlZHVsZXIgaW5jbHVkZXMuICovDQogI2luY2x1ZGUgIkZyZWVSVE9TLmgiDQpAQCAtMzgsNDQgKzM4LDQ0IEBACiAjaW5jbHVkZSAic3RyaW5nLmgiDQogDQogI2lmZGVmIGNvbmZpZ0NMSU5UX0JBU0VfQUREUkVTUw0KLSAgICAjd2FybmluZyBUaGUgY29uZmlnQ0xJTlRfQkFTRV9BRERSRVNTIGNvbnN0YW50IGhhcyBiZWVuIGRlcHJlY2F0ZWQuICBjb25maWdNVElNRV9CQVNFX0FERFJFU1MgYW5kIGNvbmZpZ01USU1FQ01QX0JBU0VfQUREUkVTUyBhcmUgY3VycmVudGx5IGJlaW5nIGRlcml2ZWQgZnJvbSB0aGUgKHBvc3NpYmx5IDApIGNvbmZpZ0NMSU5UX0JBU0VfQUREUkVTUyBzZXR0aW5nLiAgUGxlYXNlIHVwZGF0ZSB0byBkZWZpbmUgY29uZmlnTVRJTUVfQkFTRV9BRERSRVNTIGFuZCBjb25maWdNVElNRUNNUF9CQVNFX0FERFJFU1MgZGlyY3RseSBpbiBwbGFjZSBvZiBjb25maWdDTElOVF9CQVNFX0FERFJFU1MuICBTZWUgaHR0cHM6IC8qd3d3LmZyZWVydG9zLm9yZy9Vc2luZy1GcmVlUlRPUy1vbi1SSVNDLVYuaHRtbCAqLw0KKwkjd2FybmluZyBUaGUgY29uZmlnQ0xJTlRfQkFTRV9BRERSRVNTIGNvbnN0YW50IGhhcyBiZWVuIGRlcHJlY2F0ZWQuICBjb25maWdNVElNRV9CQVNFX0FERFJFU1MgYW5kIGNvbmZpZ01USU1FQ01QX0JBU0VfQUREUkVTUyBhcmUgY3VycmVudGx5IGJlaW5nIGRlcml2ZWQgZnJvbSB0aGUgKHBvc3NpYmx5IDApIGNvbmZpZ0NMSU5UX0JBU0VfQUREUkVTUyBzZXR0aW5nLiAgUGxlYXNlIHVwZGF0ZSB0byBkZWZpbmUgY29uZmlnTVRJTUVfQkFTRV9BRERSRVNTIGFuZCBjb25maWdNVElNRUNNUF9CQVNFX0FERFJFU1MgZGlyY3RseSBpbiBwbGFjZSBvZiBjb25maWdDTElOVF9CQVNFX0FERFJFU1MuICBTZWUgaHR0cHM6Ly93d3cuZnJlZXJ0b3Mub3JnL1VzaW5nLUZyZWVSVE9TLW9uLVJJU0MtVi5odG1sDQogI2VuZGlmDQogDQogI2lmbmRlZiBjb25maWdNVElNRV9CQVNFX0FERFJFU1MNCi0gICAgI3dhcm5pbmcgY29uZmlnTVRJTUVfQkFTRV9BRERSRVNTIG11c3QgYmUgZGVmaW5lZCBpbiBGcmVlUlRPU0NvbmZpZy5oLiAgSWYgdGhlIHRhcmdldCBjaGlwIGluY2x1ZGVzIGEgbWVtb3J5LW1hcHBlZCBtdGltZSByZWdpc3RlciB0aGVuIHNldCBjb25maWdNVElNRV9CQVNFX0FERFJFU1MgdG8gdGhlIG1hcHBlZCBhZGRyZXNzLiAgT3RoZXJ3aXNlIHNldCBjb25maWdNVElNRV9CQVNFX0FERFJFU1MgdG8gMC4gIFNlZSBodHRwczogLyp3d3cuZnJlZXJ0b3Mub3JnL1VzaW5nLUZyZWVSVE9TLW9uLVJJU0MtVi5odG1sICovDQorCSN3YXJuaW5nIGNvbmZpZ01USU1FX0JBU0VfQUREUkVTUyBtdXN0IGJlIGRlZmluZWQgaW4gRnJlZVJUT1NDb25maWcuaC4gIElmIHRoZSB0YXJnZXQgY2hpcCBpbmNsdWRlcyBhIG1lbW9yeS1tYXBwZWQgbXRpbWUgcmVnaXN0ZXIgdGhlbiBzZXQgY29uZmlnTVRJTUVfQkFTRV9BRERSRVNTIHRvIHRoZSBtYXBwZWQgYWRkcmVzcy4gIE90aGVyd2lzZSBzZXQgY29uZmlnTVRJTUVfQkFTRV9BRERSRVNTIHRvIDAuICBTZWUgaHR0cHM6Ly93d3cuZnJlZXJ0b3Mub3JnL1VzaW5nLUZyZWVSVE9TLW9uLVJJU0MtVi5odG1sDQogI2VuZGlmDQogDQogI2lmbmRlZiBjb25maWdNVElNRUNNUF9CQVNFX0FERFJFU1MNCi0gICAgI3dhcm5pbmcgY29uZmlnTVRJTUVDTVBfQkFTRV9BRERSRVNTIG11c3QgYmUgZGVmaW5lZCBpbiBGcmVlUlRPU0NvbmZpZy5oLiAgSWYgdGhlIHRhcmdldCBjaGlwIGluY2x1ZGVzIGEgbWVtb3J5LW1hcHBlZCBtdGltZWNtcCByZWdpc3RlciB0aGVuIHNldCBjb25maWdNVElNRUNNUF9CQVNFX0FERFJFU1MgdG8gdGhlIG1hcHBlZCBhZGRyZXNzLiAgT3RoZXJ3aXNlIHNldCBjb25maWdNVElNRUNNUF9CQVNFX0FERFJFU1MgdG8gMC4gIFNlZSBodHRwczogLyp3d3cuZnJlZXJ0b3Mub3JnL1VzaW5nLUZyZWVSVE9TLW9uLVJJU0MtVi5odG1sICovDQorCSN3YXJuaW5nIGNvbmZpZ01USU1FQ01QX0JBU0VfQUREUkVTUyBtdXN0IGJlIGRlZmluZWQgaW4gRnJlZVJUT1NDb25maWcuaC4gIElmIHRoZSB0YXJnZXQgY2hpcCBpbmNsdWRlcyBhIG1lbW9yeS1tYXBwZWQgbXRpbWVjbXAgcmVnaXN0ZXIgdGhlbiBzZXQgY29uZmlnTVRJTUVDTVBfQkFTRV9BRERSRVNTIHRvIHRoZSBtYXBwZWQgYWRkcmVzcy4gIE90aGVyd2lzZSBzZXQgY29uZmlnTVRJTUVDTVBfQkFTRV9BRERSRVNTIHRvIDAuICBTZWUgaHR0cHM6Ly93d3cuZnJlZXJ0b3Mub3JnL1VzaW5nLUZyZWVSVE9TLW9uLVJJU0MtVi5odG1sDQogI2VuZGlmDQogDQogLyogTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSBwcmUtbG9hZGluZyBvZiB0aGUgaW5pdGlhbCBMUiB3aXRoIHRoZSBhZGRyZXNzIG9mDQotICogcHJ2VGFza0V4aXRFcnJvcigpIGluIGNhc2UgaXQgbWVzc2VzIHVwIHVud2luZGluZyBvZiB0aGUgc3RhY2sgaW4gdGhlDQotICogZGVidWdnZXIuICovDQorcHJ2VGFza0V4aXRFcnJvcigpIGluIGNhc2UgaXQgbWVzc2VzIHVwIHVud2luZGluZyBvZiB0aGUgc3RhY2sgaW4gdGhlDQorZGVidWdnZXIuICovDQogI2lmZGVmIGNvbmZpZ1RBU0tfUkVUVVJOX0FERFJFU1MNCi0gICAgI2RlZmluZSBwb3J0VEFTS19SRVRVUk5fQUREUkVTUyAgICBjb25maWdUQVNLX1JFVFVSTl9BRERSRVNTDQorCSNkZWZpbmUgcG9ydFRBU0tfUkVUVVJOX0FERFJFU1MJY29uZmlnVEFTS19SRVRVUk5fQUREUkVTUw0KICNlbHNlDQotICAgICNkZWZpbmUgcG9ydFRBU0tfUkVUVVJOX0FERFJFU1MgICAgcHJ2VGFza0V4aXRFcnJvcg0KKwkjZGVmaW5lIHBvcnRUQVNLX1JFVFVSTl9BRERSRVNTCXBydlRhc2tFeGl0RXJyb3INCiAjZW5kaWYNCiANCiAvKiBUaGUgc3RhY2sgdXNlZCBieSBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lcy4gIFNldCBjb25maWdJU1JfU1RBQ0tfU0laRV9XT1JEUw0KLSAqIHRvIHVzZSBhIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGFycmF5IGFzIHRoZSBpbnRlcnJ1cHQgc3RhY2suICBBbHRlcm5hdGl2ZSBsZWF2ZQ0KLSAqIGNvbmZpZ0lTUl9TVEFDS19TSVpFX1dPUkRTIHVuZGVmaW5lZCBhbmQgdXBkYXRlIHRoZSBsaW5rZXIgc2NyaXB0IHNvIHRoYXQgYQ0KLSAqIGxpbmtlciB2YXJpYWJsZSBuYW1lcyBfX2ZyZWVydG9zX2lycV9zdGFja190b3AgaGFzIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSB0b3ANCi0gKiBvZiB0aGUgc3RhY2sgdXNlZCBieSBtYWluLiAgVXNpbmcgdGhlIGxpbmtlciBzY3JpcHQgbWV0aG9kIHdpbGwgcmVwdXJwb3NlIHRoZQ0KLSAqIHN0YWNrIHRoYXQgd2FzIHVzZWQgYnkgbWFpbiBiZWZvcmUgdGhlIHNjaGVkdWxlciB3YXMgc3RhcnRlZCBmb3IgdXNlIGFzIHRoZQ0KLSAqIGludGVycnVwdCBzdGFjayBhZnRlciB0aGUgc2NoZWR1bGVyIGhhcyBzdGFydGVkLiAqLw0KK3RvIHVzZSBhIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGFycmF5IGFzIHRoZSBpbnRlcnJ1cHQgc3RhY2suICBBbHRlcm5hdGl2ZSBsZWF2ZQ0KK2NvbmZpZ0lTUl9TVEFDS19TSVpFX1dPUkRTIHVuZGVmaW5lZCBhbmQgdXBkYXRlIHRoZSBsaW5rZXIgc2NyaXB0IHNvIHRoYXQgYQ0KK2xpbmtlciB2YXJpYWJsZSBuYW1lcyBfX2ZyZWVydG9zX2lycV9zdGFja190b3AgaGFzIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSB0b3ANCitvZiB0aGUgc3RhY2sgdXNlZCBieSBtYWluLiAgVXNpbmcgdGhlIGxpbmtlciBzY3JpcHQgbWV0aG9kIHdpbGwgcmVwdXJwb3NlIHRoZQ0KK3N0YWNrIHRoYXQgd2FzIHVzZWQgYnkgbWFpbiBiZWZvcmUgdGhlIHNjaGVkdWxlciB3YXMgc3RhcnRlZCBmb3IgdXNlIGFzIHRoZQ0KK2ludGVycnVwdCBzdGFjayBhZnRlciB0aGUgc2NoZWR1bGVyIGhhcyBzdGFydGVkLiAqLw0KICNpZmRlZiBjb25maWdJU1JfU1RBQ0tfU0laRV9XT1JEUw0KLSAgICBzdGF0aWMgX19hdHRyaWJ1dGVfXyggKCBhbGlnbmVkKCAxNiApICkgKSBTdGFja1R5cGVfdCB4SVNSU3RhY2tbIGNvbmZpZ0lTUl9TVEFDS19TSVpFX1dPUkRTIF0gPSB7IDAgfTsNCi0gICAgY29uc3QgU3RhY2tUeXBlX3QgeElTUlN0YWNrVG9wID0gKCBTdGFja1R5cGVfdCApICYoIHhJU1JTdGFja1sgY29uZmlnSVNSX1NUQUNLX1NJWkVfV09SRFMgJiB+cG9ydEJZVEVfQUxJR05NRU5UX01BU0sgXSApOw0KKwlzdGF0aWMgX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoMTYpKSkgU3RhY2tUeXBlX3QgeElTUlN0YWNrWyBjb25maWdJU1JfU1RBQ0tfU0laRV9XT1JEUyBdID0geyAwIH07DQorCWNvbnN0IFN0YWNrVHlwZV90IHhJU1JTdGFja1RvcCA9ICggU3RhY2tUeXBlX3QgKSAmKCB4SVNSU3RhY2tbIGNvbmZpZ0lTUl9TVEFDS19TSVpFX1dPUkRTICYgfnBvcnRCWVRFX0FMSUdOTUVOVF9NQVNLIF0gKTsNCiANCi0vKiBEb24ndCB1c2UgMHhhNSBhcyB0aGUgc3RhY2sgZmlsbCBieXRlcyBhcyB0aGF0IGlzIHVzZWQgYnkgdGhlIGtlcm5lcmwgZm9yDQotICogdGhlIHRhc2sgc3RhY2tzLCBhbmQgc28gd2lsbCBsZWdpdGltYXRlbHkgYXBwZWFyIGluIG1hbnkgcG9zaXRpb25zIHdpdGhpbg0KLSAqIHRoZSBJU1Igc3RhY2suICovDQotICAgICNkZWZpbmUgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUgICAgMHhlZQ0KKwkvKiBEb24ndCB1c2UgMHhhNSBhcyB0aGUgc3RhY2sgZmlsbCBieXRlcyBhcyB0aGF0IGlzIHVzZWQgYnkgdGhlIGtlcm5lcmwgZm9yDQorCXRoZSB0YXNrIHN0YWNrcywgYW5kIHNvIHdpbGwgbGVnaXRpbWF0ZWx5IGFwcGVhciBpbiBtYW55IHBvc2l0aW9ucyB3aXRoaW4NCisJdGhlIElTUiBzdGFjay4gKi8NCisJI2RlZmluZSBwb3J0SVNSX1NUQUNLX0ZJTExfQllURQkweGVlDQogI2Vsc2UNCi0gICAgZXh0ZXJuIGNvbnN0IHVpbnQzMl90IF9fZnJlZXJ0b3NfaXJxX3N0YWNrX3RvcFtdOw0KLSAgICBjb25zdCBTdGFja1R5cGVfdCB4SVNSU3RhY2tUb3AgPSAoIFN0YWNrVHlwZV90ICkgX19mcmVlcnRvc19pcnFfc3RhY2tfdG9wOw0KKwlleHRlcm4gY29uc3QgdWludDMyX3QgX19mcmVlcnRvc19pcnFfc3RhY2tfdG9wW107DQorCWNvbnN0IFN0YWNrVHlwZV90IHhJU1JTdGFja1RvcCA9ICggU3RhY2tUeXBlX3QgKSBfX2ZyZWVydG9zX2lycV9zdGFja190b3A7DQogI2VuZGlmDQogDQogLyoNCkBAIC04MywxMzAgKzgzLDEzMCBAQAogICogZmlsZSBpcyB3ZWFrIHRvIGFsbG93IGFwcGxpY2F0aW9uIHdyaXRlcnMgdG8gY2hhbmdlIHRoZSB0aW1lciB1c2VkIHRvDQogICogZ2VuZXJhdGUgdGhlIHRpY2sgaW50ZXJydXB0Lg0KICAqLw0KLXZvaWQgdlBvcnRTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICkgX19hdHRyaWJ1dGVfXyggKCB3ZWFrICkgKTsNCit2b2lkIHZQb3J0U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApIF9fYXR0cmlidXRlX18oKCB3ZWFrICkpOw0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFVzZWQgdG8gcHJvZ3JhbSB0aGUgbWFjaGluZSB0aW1lciBjb21wYXJlIHJlZ2lzdGVyLiAqLw0KIHVpbnQ2NF90IHVsbE5leHRUaW1lID0gMFVMTDsNCi1jb25zdCB1aW50NjRfdCAqIHB1bGxOZXh0VGltZSA9ICZ1bGxOZXh0VGltZTsNCitjb25zdCB1aW50NjRfdCAqcHVsbE5leHRUaW1lID0gJnVsbE5leHRUaW1lOw0KIGNvbnN0IHNpemVfdCB1eFRpbWVySW5jcmVtZW50c0Zvck9uZVRpY2sgPSAoIHNpemVfdCApICggKCBjb25maWdDUFVfQ0xPQ0tfSFogKSAvICggY29uZmlnVElDS19SQVRFX0haICkgKTsgLyogQXNzdW1lcyBpbmNyZW1lbnQgd29uJ3QgZ28gb3ZlciAzMi1iaXRzLiAqLw0KIHVpbnQzMl90IGNvbnN0IHVsbE1hY2hpbmVUaW1lckNvbXBhcmVSZWdpc3RlckJhc2UgPSBjb25maWdNVElNRUNNUF9CQVNFX0FERFJFU1M7DQogdm9sYXRpbGUgdWludDY0X3QgKiBwdWxsTWFjaGluZVRpbWVyQ29tcGFyZVJlZ2lzdGVyID0gTlVMTDsNCiANCiAvKiBTZXQgY29uZmlnQ0hFQ0tfRk9SX1NUQUNLX09WRVJGTE9XIHRvIDMgdG8gYWRkIElTUiBzdGFjayBjaGVja2luZyB0byB0YXNrDQotICogc3RhY2sgY2hlY2tpbmcuICBBIHByb2JsZW0gaW4gdGhlIElTUiBzdGFjayB3aWxsIHRyaWdnZXIgYW4gYXNzZXJ0LCBub3QgY2FsbCB0aGUNCi0gKiBzdGFjayBvdmVyZmxvdyBob29rIGZ1bmN0aW9uIChiZWNhdXNlIHRoZSBzdGFjayBvdmVyZmxvdyBob29rIGlzIHNwZWNpZmljIHRvIGENCi0gKiB0YXNrIHN0YWNrLCBub3QgdGhlIElTUiBzdGFjaykuICovDQorc3RhY2sgY2hlY2tpbmcuICBBIHByb2JsZW0gaW4gdGhlIElTUiBzdGFjayB3aWxsIHRyaWdnZXIgYW4gYXNzZXJ0LCBub3QgY2FsbCB0aGUNCitzdGFjayBvdmVyZmxvdyBob29rIGZ1bmN0aW9uIChiZWNhdXNlIHRoZSBzdGFjayBvdmVyZmxvdyBob29rIGlzIHNwZWNpZmljIHRvIGENCit0YXNrIHN0YWNrLCBub3QgdGhlIElTUiBzdGFjaykuICovDQogI2lmIGRlZmluZWQoIGNvbmZpZ0lTUl9TVEFDS19TSVpFX1dPUkRTICkgJiYgKCBjb25maWdDSEVDS19GT1JfU1RBQ0tfT1ZFUkZMT1cgPiAyICkNCi0gICAgI3dhcm5pbmcgVGhpcyBwYXRoIG5vdCB0ZXN0ZWQsIG9yIGV2ZW4gY29tcGlsZWQgeWV0Lg0KKwkjd2FybmluZyBUaGlzIHBhdGggbm90IHRlc3RlZCwgb3IgZXZlbiBjb21waWxlZCB5ZXQuDQogDQotICAgIHN0YXRpYyBjb25zdCB1aW50OF90IHVjRXhwZWN0ZWRTdGFja0J5dGVzW10gPQ0KLSAgICB7DQotICAgICAgICBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgXA0KLSAgICAgICAgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIFwNCi0gICAgICAgIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBcDQotICAgICAgICBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgXA0KLSAgICAgICAgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUNCi0gICAgfTsgXA0KKwlzdGF0aWMgY29uc3QgdWludDhfdCB1Y0V4cGVjdGVkU3RhY2tCeXRlc1tdID0gew0KKwkJCQkJCQkJCXBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLAkJXA0KKwkJCQkJCQkJCXBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLAkJXA0KKwkJCQkJCQkJCXBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLAkJXA0KKwkJCQkJCQkJCXBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLAkJXA0KKwkJCQkJCQkJCXBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFIH07CVwNCiANCi0gICAgI2RlZmluZSBwb3J0Q0hFQ0tfSVNSX1NUQUNLKCkgICAgY29uZmlnQVNTRVJUKCAoIG1lbWNtcCggKCB2b2lkICogKSB4SVNSU3RhY2ssICggdm9pZCAqICkgdWNFeHBlY3RlZFN0YWNrQnl0ZXMsIHNpemVvZiggdWNFeHBlY3RlZFN0YWNrQnl0ZXMgKSApID09IDAgKSApDQotI2Vsc2UgLyogaWYgZGVmaW5lZCggY29uZmlnSVNSX1NUQUNLX1NJWkVfV09SRFMgKSAmJiAoIGNvbmZpZ0NIRUNLX0ZPUl9TVEFDS19PVkVSRkxPVyA+IDIgKSAqLw0KLSAgICAvKiBEZWZpbmUgdGhlIGZ1bmN0aW9uIGF3YXkuICovDQotICAgICNkZWZpbmUgcG9ydENIRUNLX0lTUl9TVEFDSygpDQorCSNkZWZpbmUgcG9ydENIRUNLX0lTUl9TVEFDSygpIGNvbmZpZ0FTU0VSVCggKCBtZW1jbXAoICggdm9pZCAqICkgeElTUlN0YWNrLCAoIHZvaWQgKiApIHVjRXhwZWN0ZWRTdGFja0J5dGVzLCBzaXplb2YoIHVjRXhwZWN0ZWRTdGFja0J5dGVzICkgKSA9PSAwICkgKQ0KKyNlbHNlDQorCS8qIERlZmluZSB0aGUgZnVuY3Rpb24gYXdheS4gKi8NCisJI2RlZmluZSBwb3J0Q0hFQ0tfSVNSX1NUQUNLKCkNCiAjZW5kaWYgLyogY29uZmlnQ0hFQ0tfRk9SX1NUQUNLX09WRVJGTE9XID4gMiAqLw0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KLSNpZiAoIGNvbmZpZ01USU1FX0JBU0VfQUREUkVTUyAhPSAwICkgJiYgKCBjb25maWdNVElNRUNNUF9CQVNFX0FERFJFU1MgIT0gMCApDQorI2lmKCBjb25maWdNVElNRV9CQVNFX0FERFJFU1MgIT0gMCApICYmICggY29uZmlnTVRJTUVDTVBfQkFTRV9BRERSRVNTICE9IDAgKQ0KIA0KLSAgICB2b2lkIHZQb3J0U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApDQotICAgIHsNCi0gICAgICAgIHVpbnQzMl90IHVsQ3VycmVudFRpbWVIaWdoLCB1bEN1cnJlbnRUaW1lTG93Ow0KLSAgICAgICAgdm9sYXRpbGUgdWludDMyX3QgKiBjb25zdCBwdWxUaW1lSGlnaCA9ICggdm9sYXRpbGUgdWludDMyX3QgKiBjb25zdCApICggKCBjb25maWdNVElNRV9CQVNFX0FERFJFU1MgKSArIDRVTCApOyAvKiA4LWJ5dGUgdHlwZXIgc28gaGlnaCAzMi1iaXQgd29yZCBpcyA0IGJ5dGVzIHVwLiAqLw0KLSAgICAgICAgdm9sYXRpbGUgdWludDMyX3QgKiBjb25zdCBwdWxUaW1lTG93ID0gKCB2b2xhdGlsZSB1aW50MzJfdCAqIGNvbnN0ICkgKCBjb25maWdNVElNRV9CQVNFX0FERFJFU1MgKTsNCi0gICAgICAgIHZvbGF0aWxlIHVpbnQzMl90IHVsSGFydElkOw0KKwl2b2lkIHZQb3J0U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApDQorCXsNCisJdWludDMyX3QgdWxDdXJyZW50VGltZUhpZ2gsIHVsQ3VycmVudFRpbWVMb3c7DQorCXZvbGF0aWxlIHVpbnQzMl90ICogY29uc3QgcHVsVGltZUhpZ2ggPSAoIHZvbGF0aWxlIHVpbnQzMl90ICogY29uc3QgKSAoICggY29uZmlnTVRJTUVfQkFTRV9BRERSRVNTICkgKyA0VUwgKTsgLyogOC1ieXRlIHR5cGVyIHNvIGhpZ2ggMzItYml0IHdvcmQgaXMgNCBieXRlcyB1cC4gKi8NCisJdm9sYXRpbGUgdWludDMyX3QgKiBjb25zdCBwdWxUaW1lTG93ID0gKCB2b2xhdGlsZSB1aW50MzJfdCAqIGNvbnN0ICkgKCBjb25maWdNVElNRV9CQVNFX0FERFJFU1MgKTsNCisJdm9sYXRpbGUgdWludDMyX3QgdWxIYXJ0SWQ7DQogDQotICAgICAgICBfX2FzbSB2b2xhdGlsZSAoICJjc3JyICUwLCBtaGFydGlkIiA6ICI9ciIgKCB1bEhhcnRJZCApICk7DQorCQlfX2FzbSB2b2xhdGlsZSggImNzcnIgJTAsIG1oYXJ0aWQiIDogIj1yIiggdWxIYXJ0SWQgKSApOw0KKwkJcHVsbE1hY2hpbmVUaW1lckNvbXBhcmVSZWdpc3RlciAgPSAoIHZvbGF0aWxlIHVpbnQ2NF90ICogKSAoIHVsbE1hY2hpbmVUaW1lckNvbXBhcmVSZWdpc3RlckJhc2UgKyAoIHVsSGFydElkICogc2l6ZW9mKCB1aW50NjRfdCApICkgKTsNCiANCi0gICAgICAgIHB1bGxNYWNoaW5lVGltZXJDb21wYXJlUmVnaXN0ZXIgPSAoIHZvbGF0aWxlIHVpbnQ2NF90ICogKSAoIHVsbE1hY2hpbmVUaW1lckNvbXBhcmVSZWdpc3RlckJhc2UgKyAoIHVsSGFydElkICogc2l6ZW9mKCB1aW50NjRfdCApICkgKTsNCisJCWRvDQorCQl7DQorCQkJdWxDdXJyZW50VGltZUhpZ2ggPSAqcHVsVGltZUhpZ2g7DQorCQkJdWxDdXJyZW50VGltZUxvdyA9ICpwdWxUaW1lTG93Ow0KKwkJfSB3aGlsZSggdWxDdXJyZW50VGltZUhpZ2ggIT0gKnB1bFRpbWVIaWdoICk7DQogDQotICAgICAgICBkbw0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHVsQ3VycmVudFRpbWVIaWdoID0gKnB1bFRpbWVIaWdoOw0KLSAgICAgICAgICAgIHVsQ3VycmVudFRpbWVMb3cgPSAqcHVsVGltZUxvdzsNCi0gICAgICAgIH0gd2hpbGUoIHVsQ3VycmVudFRpbWVIaWdoICE9ICpwdWxUaW1lSGlnaCApOw0KKwkJdWxsTmV4dFRpbWUgPSAoIHVpbnQ2NF90ICkgdWxDdXJyZW50VGltZUhpZ2g7DQorCQl1bGxOZXh0VGltZSA8PD0gMzJVTEw7IC8qIEhpZ2ggNC1ieXRlIHdvcmQgaXMgMzItYml0cyB1cC4gKi8NCisJCXVsbE5leHRUaW1lIHw9ICggdWludDY0X3QgKSB1bEN1cnJlbnRUaW1lTG93Ow0KKwkJdWxsTmV4dFRpbWUgKz0gKCB1aW50NjRfdCApIHV4VGltZXJJbmNyZW1lbnRzRm9yT25lVGljazsNCisJCSpwdWxsTWFjaGluZVRpbWVyQ29tcGFyZVJlZ2lzdGVyID0gdWxsTmV4dFRpbWU7DQogDQotICAgICAgICB1bGxOZXh0VGltZSA9ICggdWludDY0X3QgKSB1bEN1cnJlbnRUaW1lSGlnaDsNCi0gICAgICAgIHVsbE5leHRUaW1lIDw8PSAzMlVMTDsgLyogSGlnaCA0LWJ5dGUgd29yZCBpcyAzMi1iaXRzIHVwLiAqLw0KLSAgICAgICAgdWxsTmV4dFRpbWUgfD0gKCB1aW50NjRfdCApIHVsQ3VycmVudFRpbWVMb3c7DQotICAgICAgICB1bGxOZXh0VGltZSArPSAoIHVpbnQ2NF90ICkgdXhUaW1lckluY3JlbWVudHNGb3JPbmVUaWNrOw0KLSAgICAgICAgKnB1bGxNYWNoaW5lVGltZXJDb21wYXJlUmVnaXN0ZXIgPSB1bGxOZXh0VGltZTsNCi0NCi0gICAgICAgIC8qIFByZXBhcmUgdGhlIHRpbWUgdG8gdXNlIGFmdGVyIHRoZSBuZXh0IHRpY2sgaW50ZXJydXB0LiAqLw0KLSAgICAgICAgdWxsTmV4dFRpbWUgKz0gKCB1aW50NjRfdCApIHV4VGltZXJJbmNyZW1lbnRzRm9yT25lVGljazsNCi0gICAgfQ0KKwkJLyogUHJlcGFyZSB0aGUgdGltZSB0byB1c2UgYWZ0ZXIgdGhlIG5leHQgdGljayBpbnRlcnJ1cHQuICovDQorCQl1bGxOZXh0VGltZSArPSAoIHVpbnQ2NF90ICkgdXhUaW1lckluY3JlbWVudHNGb3JPbmVUaWNrOw0KKwl9DQogDQogI2VuZGlmIC8qICggY29uZmlnTVRJTUVfQkFTRV9BRERSRVNTICE9IDAgKSAmJiAoIGNvbmZpZ01USU1FX0JBU0VfQUREUkVTUyAhPSAwICkgKi8NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBCYXNlVHlwZV90IHhQb3J0U3RhcnRTY2hlZHVsZXIoIHZvaWQgKQ0KIHsNCi0gICAgZXh0ZXJuIHZvaWQgeFBvcnRTdGFydEZpcnN0VGFzayggdm9pZCApOw0KK2V4dGVybiB2b2lkIHhQb3J0U3RhcnRGaXJzdFRhc2soIHZvaWQgKTsNCiANCi0gICAgI2lmICggY29uZmlnQVNTRVJUX0RFRklORUQgPT0gMSApDQotICAgICAgICB7DQotICAgICAgICAgICAgdm9sYXRpbGUgdWludDMyX3QgbXR2ZWMgPSAwOw0KKwkjaWYoIGNvbmZpZ0FTU0VSVF9ERUZJTkVEID09IDEgKQ0KKwl7DQorCQl2b2xhdGlsZSB1aW50MzJfdCBtdHZlYyA9IDA7DQogDQotICAgICAgICAgICAgLyogQ2hlY2sgdGhlIGxlYXN0IHNpZ25pZmljYW50IHR3byBiaXRzIG9mIG10dmVjIGFyZSAwMCAtIGluZGljYXRpbmcNCi0gICAgICAgICAgICAgKiBzaW5nbGUgdmVjdG9yIG1vZGUuICovDQotICAgICAgICAgICAgX19hc20gdm9sYXRpbGUgKCAiY3NyciAlMCwgbXR2ZWMiIDogIj1yIiAoIG10dmVjICkgKTsNCi0gICAgICAgICAgICBjb25maWdBU1NFUlQoICggbXR2ZWMgJiAweDAzVUwgKSA9PSAwICk7DQorCQkvKiBDaGVjayB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgdHdvIGJpdHMgb2YgbXR2ZWMgYXJlIDAwIC0gaW5kaWNhdGluZw0KKwkJc2luZ2xlIHZlY3RvciBtb2RlLiAqLw0KKwkJX19hc20gdm9sYXRpbGUoICJjc3JyICUwLCBtdHZlYyIgOiAiPXIiKCBtdHZlYyApICk7DQorCQljb25maWdBU1NFUlQoICggbXR2ZWMgJiAweDAzVUwgKSA9PSAwICk7DQogDQotICAgICAgICAgICAgLyogQ2hlY2sgYWxpZ25tZW50IG9mIHRoZSBpbnRlcnJ1cHQgc3RhY2sgLSB3aGljaCBpcyB0aGUgc2FtZSBhcyB0aGUNCi0gICAgICAgICAgICAgKiBzdGFjayB0aGF0IHdhcyBiZWluZyB1c2VkIGJ5IG1haW4oKSBwcmlvciB0byB0aGUgc2NoZWR1bGVyIGJlaW5nDQotICAgICAgICAgICAgICogc3RhcnRlZC4gKi8NCi0gICAgICAgICAgICBjb25maWdBU1NFUlQoICggeElTUlN0YWNrVG9wICYgcG9ydEJZVEVfQUxJR05NRU5UX01BU0sgKSA9PSAwICk7DQorCQkvKiBDaGVjayBhbGlnbm1lbnQgb2YgdGhlIGludGVycnVwdCBzdGFjayAtIHdoaWNoIGlzIHRoZSBzYW1lIGFzIHRoZQ0KKwkJc3RhY2sgdGhhdCB3YXMgYmVpbmcgdXNlZCBieSBtYWluKCkgcHJpb3IgdG8gdGhlIHNjaGVkdWxlciBiZWluZw0KKwkJc3RhcnRlZC4gKi8NCisJCWNvbmZpZ0FTU0VSVCggKCB4SVNSU3RhY2tUb3AgJiBwb3J0QllURV9BTElHTk1FTlRfTUFTSyApID09IDAgKTsNCiANCi0gICAgICAgICAgICAjaWZkZWYgY29uZmlnSVNSX1NUQUNLX1NJWkVfV09SRFMNCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgbWVtc2V0KCAoIHZvaWQgKiApIHhJU1JTdGFjaywgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHNpemVvZiggeElTUlN0YWNrICkgKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICNlbmRpZiAvKiBjb25maWdJU1JfU1RBQ0tfU0laRV9XT1JEUyAqLw0KLSAgICAgICAgfQ0KLSAgICAjZW5kaWYgLyogY29uZmlnQVNTRVJUX0RFRklORUQgKi8NCisJCSNpZmRlZiBjb25maWdJU1JfU1RBQ0tfU0laRV9XT1JEUw0KKwkJew0KKwkJCW1lbXNldCggKCB2b2lkICogKSB4SVNSU3RhY2ssIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBzaXplb2YoIHhJU1JTdGFjayApICk7DQorCQl9DQorCQkjZW5kaWYJIC8qIGNvbmZpZ0lTUl9TVEFDS19TSVpFX1dPUkRTICovDQorCX0NCisJI2VuZGlmIC8qIGNvbmZpZ0FTU0VSVF9ERUZJTkVEICovDQogDQotICAgIC8qIElmIHRoZXJlIGlzIGEgQ0xJTlQgdGhlbiBpdCBpcyBvayB0byB1c2UgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24NCi0gICAgICogaW4gdGhpcyBmaWxlLCBvdGhlcndpc2UgdlBvcnRTZXR1cFRpbWVySW50ZXJydXB0KCkgbXVzdCBiZSBpbXBsZW1lbnRlZCB0bw0KLSAgICAgKiBjb25maWd1cmUgd2hpY2hldmVyIGNsb2NrIGlzIHRvIGJlIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRpY2sgaW50ZXJydXB0LiAqLw0KLSAgICB2UG9ydFNldHVwVGltZXJJbnRlcnJ1cHQoKTsNCisJLyogSWYgdGhlcmUgaXMgYSBDTElOVCB0aGVuIGl0IGlzIG9rIHRvIHVzZSB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbg0KKwlpbiB0aGlzIGZpbGUsIG90aGVyd2lzZSB2UG9ydFNldHVwVGltZXJJbnRlcnJ1cHQoKSBtdXN0IGJlIGltcGxlbWVudGVkIHRvDQorCWNvbmZpZ3VyZSB3aGljaGV2ZXIgY2xvY2sgaXMgdG8gYmUgdXNlZCB0byBnZW5lcmF0ZSB0aGUgdGljayBpbnRlcnJ1cHQuICovDQorCXZQb3J0U2V0dXBUaW1lckludGVycnVwdCgpOw0KIA0KLSAgICAjaWYgKCAoIGNvbmZpZ01USU1FX0JBU0VfQUREUkVTUyAhPSAwICkgJiYgKCBjb25maWdNVElNRUNNUF9CQVNFX0FERFJFU1MgIT0gMCApICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICAvKiBFbmFibGUgbXRpbWUgYW5kIGV4dGVybmFsIGludGVycnVwdHMuICAxPDw3IGZvciB0aW1lciBpbnRlcnJ1cHQsIDE8PDExDQotICAgICAgICAgICAgICogZm9yIGV4dGVybmFsIGludGVycnVwdC4gIF9SQl8gV2hhdCBoYXBwZW5zIGhlcmUgd2hlbiBtdGltZSBpcyBub3QgcHJlc2VudCBhcw0KLSAgICAgICAgICAgICAqIHdpdGggcHVscGlubz8gKi8NCi0gICAgICAgICAgICBfX2FzbSB2b2xhdGlsZSAoICJjc3JzIG1pZSwgJTAiIDo6InIiICggMHg4ODAgKSApOw0KLSAgICAgICAgfQ0KLSAgICAjZWxzZQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIC8qIEVuYWJsZSBleHRlcm5hbCBpbnRlcnJ1cHRzLiAqLw0KLSAgICAgICAgICAgIF9fYXNtIHZvbGF0aWxlICggImNzcnMgbWllLCAlMCIgOjoiciIgKCAweDgwMCApICk7DQotICAgICAgICB9DQotICAgICNlbmRpZiAvKiAoIGNvbmZpZ01USU1FX0JBU0VfQUREUkVTUyAhPSAwICkgJiYgKCBjb25maWdNVElNRUNNUF9CQVNFX0FERFJFU1MgIT0gMCApICovDQorCSNpZiggKCBjb25maWdNVElNRV9CQVNFX0FERFJFU1MgIT0gMCApICYmICggY29uZmlnTVRJTUVDTVBfQkFTRV9BRERSRVNTICE9IDAgKSApDQorCXsNCisJCS8qIEVuYWJsZSBtdGltZSBhbmQgZXh0ZXJuYWwgaW50ZXJydXB0cy4gIDE8PDcgZm9yIHRpbWVyIGludGVycnVwdCwgMTw8MTENCisJCWZvciBleHRlcm5hbCBpbnRlcnJ1cHQuICBfUkJfIFdoYXQgaGFwcGVucyBoZXJlIHdoZW4gbXRpbWUgaXMgbm90IHByZXNlbnQgYXMNCisJCXdpdGggcHVscGlubz8gKi8NCisJCV9fYXNtIHZvbGF0aWxlKCAiY3NycyBtaWUsICUwIiA6OiAiciIoMHg4ODApICk7DQorCX0NCisJI2Vsc2UNCisJew0KKwkJLyogRW5hYmxlIGV4dGVybmFsIGludGVycnVwdHMuICovDQorCQlfX2FzbSB2b2xhdGlsZSggImNzcnMgbWllLCAlMCIgOjogInIiKDB4ODAwKSApOw0KKwl9DQorCSNlbmRpZiAvKiAoIGNvbmZpZ01USU1FX0JBU0VfQUREUkVTUyAhPSAwICkgJiYgKCBjb25maWdNVElNRUNNUF9CQVNFX0FERFJFU1MgIT0gMCApICovDQogDQotICAgIHhQb3J0U3RhcnRGaXJzdFRhc2soKTsNCisJeFBvcnRTdGFydEZpcnN0VGFzaygpOw0KIA0KLSAgICAvKiBTaG91bGQgbm90IGdldCBoZXJlIGFzIGFmdGVyIGNhbGxpbmcgeFBvcnRTdGFydEZpcnN0VGFzaygpIG9ubHkgdGFza3MNCi0gICAgICogc2hvdWxkIGJlIGV4ZWN1dGluZy4gKi8NCi0gICAgcmV0dXJuIHBkRkFJTDsNCisJLyogU2hvdWxkIG5vdCBnZXQgaGVyZSBhcyBhZnRlciBjYWxsaW5nIHhQb3J0U3RhcnRGaXJzdFRhc2soKSBvbmx5IHRhc2tzDQorCXNob3VsZCBiZSBleGVjdXRpbmcuICovDQorCXJldHVybiBwZEZBSUw7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQ0KIHsNCi0gICAgLyogTm90IGltcGxlbWVudGVkLiAqLw0KLSAgICBmb3IoIDsgOyApDQotICAgIHsNCi0gICAgfQ0KKwkvKiBOb3QgaW1wbGVtZW50ZWQuICovDQorCWZvciggOzsgKTsNCiB9DQorDQorDQorDQorDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvR0NDL1JJU0MtVi9wb3J0bWFjcm8uaCBiL3BvcnRhYmxlL0dDQy9SSVNDLVYvcG9ydG1hY3JvLmgKaW5kZXggOTY4YmM0Mi4uMGVjODQ5NiAxMDA2NDQKLS0tIGEvcG9ydGFibGUvR0NDL1JJU0MtVi9wb3J0bWFjcm8uaAorKysgYi9wb3J0YWJsZS9HQ0MvUklTQy1WL3BvcnRtYWNyby5oCkBAIC0yNywxMSArMjcsMTEgQEAKIA0KIA0KICNpZm5kZWYgUE9SVE1BQ1JPX0gNCi0gICAgI2RlZmluZSBQT1JUTUFDUk9fSA0KKyNkZWZpbmUgUE9SVE1BQ1JPX0gNCiANCi0gICAgI2lmZGVmIF9fY3BsdXNwbHVzDQotICAgICAgICBleHRlcm4gIkMiIHsNCi0gICAgI2VuZGlmDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAqIFBvcnQgc3BlY2lmaWMgZGVmaW5pdGlvbnMuDQpAQCAtNDQsMTQ0ICs0NCwxNDMgQEAKICAqLw0KIA0KIC8qIFR5cGUgZGVmaW5pdGlvbnMuICovDQotICAgICNpZiBfX3Jpc2N2X3hsZW4gPT0gNjQNCi0gICAgICAgICNkZWZpbmUgcG9ydFNUQUNLX1RZUEUgICAgICAgICAgIHVpbnQ2NF90DQotICAgICAgICAjZGVmaW5lIHBvcnRCQVNFX1RZUEUgICAgICAgICAgICBpbnQ2NF90DQotICAgICAgICAjZGVmaW5lIHBvcnRVQkFTRV9UWVBFICAgICAgICAgICB1aW50NjRfdA0KLSAgICAgICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICAgICAgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZmZmZmZmZmZmVUwNCi0gICAgICAgICNkZWZpbmUgcG9ydFBPSU5URVJfU0laRV9UWVBFICAgIHVpbnQ2NF90DQotICAgICNlbGlmIF9fcmlzY3ZfeGxlbiA9PSAzMg0KLSAgICAgICAgI2RlZmluZSBwb3J0U1RBQ0tfVFlQRSAgICAgICAgICAgdWludDMyX3QNCi0gICAgICAgICNkZWZpbmUgcG9ydEJBU0VfVFlQRSAgICAgICAgICAgIGludDMyX3QNCi0gICAgICAgICNkZWZpbmUgcG9ydFVCQVNFX1RZUEUgICAgICAgICAgIHVpbnQzMl90DQotICAgICAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgICAgICAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwNCi0gICAgI2Vsc2UgLyogaWYgX19yaXNjdl94bGVuID09IDY0ICovDQotICAgICAgICAjZXJyb3IgQXNzZW1ibGVyIGRpZCBub3QgZGVmaW5lIF9fcmlzY3ZfeGxlbg0KLSAgICAjZW5kaWYgLyogaWYgX19yaXNjdl94bGVuID09IDY0ICovDQorI2lmIF9fcmlzY3ZfeGxlbiA9PSA2NA0KKwkjZGVmaW5lIHBvcnRTVEFDS19UWVBFCQkJdWludDY0X3QNCisJI2RlZmluZSBwb3J0QkFTRV9UWVBFCQkJaW50NjRfdA0KKwkjZGVmaW5lIHBvcnRVQkFTRV9UWVBFCQkJdWludDY0X3QNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZIAkJCSggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZmZmZmZmZmZlVMDQorCSNkZWZpbmUgcG9ydFBPSU5URVJfU0laRV9UWVBFIAl1aW50NjRfdA0KKyNlbGlmIF9fcmlzY3ZfeGxlbiA9PSAzMg0KKwkjZGVmaW5lIHBvcnRTVEFDS19UWVBFCXVpbnQzMl90DQorCSNkZWZpbmUgcG9ydEJBU0VfVFlQRQlpbnQzMl90DQorCSNkZWZpbmUgcG9ydFVCQVNFX1RZUEUJdWludDMyX3QNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTA0KKyNlbHNlDQorCSNlcnJvciBBc3NlbWJsZXIgZGlkIG5vdCBkZWZpbmUgX19yaXNjdl94bGVuDQorI2VuZGlmDQogDQogDQotICAgIHR5cGVkZWYgcG9ydFNUQUNLX1RZUEUgICBTdGFja1R5cGVfdDsNCi0gICAgdHlwZWRlZiBwb3J0QkFTRV9UWVBFICAgIEJhc2VUeXBlX3Q7DQotICAgIHR5cGVkZWYgcG9ydFVCQVNFX1RZUEUgICBVQmFzZVR5cGVfdDsNCi0gICAgdHlwZWRlZiBwb3J0VUJBU0VfVFlQRSAgIFRpY2tUeXBlX3Q7DQordHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSBTdGFja1R5cGVfdDsNCit0eXBlZGVmIHBvcnRCQVNFX1RZUEUgQmFzZVR5cGVfdDsNCit0eXBlZGVmIHBvcnRVQkFTRV9UWVBFIFVCYXNlVHlwZV90Ow0KK3R5cGVkZWYgcG9ydFVCQVNFX1RZUEUgVGlja1R5cGVfdDsNCiANCiAvKiBMZWdhY3kgdHlwZSBkZWZpbml0aW9ucy4gKi8NCi0gICAgI2RlZmluZSBwb3J0Q0hBUiAgICAgICAgICAgICAgICAgICBjaGFyDQotICAgICNkZWZpbmUgcG9ydEZMT0FUICAgICAgICAgICAgICAgICAgZmxvYXQNCi0gICAgI2RlZmluZSBwb3J0RE9VQkxFICAgICAgICAgICAgICAgICBkb3VibGUNCi0gICAgI2RlZmluZSBwb3J0TE9ORyAgICAgICAgICAgICAgICAgICBsb25nDQotICAgICNkZWZpbmUgcG9ydFNIT1JUICAgICAgICAgICAgICAgICAgc2hvcnQNCisjZGVmaW5lIHBvcnRDSEFSCQljaGFyDQorI2RlZmluZSBwb3J0RkxPQVQJCWZsb2F0DQorI2RlZmluZSBwb3J0RE9VQkxFCQlkb3VibGUNCisjZGVmaW5lIHBvcnRMT05HCQlsb25nDQorI2RlZmluZSBwb3J0U0hPUlQJCXNob3J0DQogDQogLyogMzItYml0IHRpY2sgdHlwZSBvbiBhIDMyLWJpdCBhcmNoaXRlY3R1cmUsIHNvIHJlYWRzIG9mIHRoZSB0aWNrIGNvdW50IGRvDQotICogbm90IG5lZWQgdG8gYmUgZ3VhcmRlZCB3aXRoIGEgY3JpdGljYWwgc2VjdGlvbi4gKi8NCi0gICAgI2RlZmluZSBwb3J0VElDS19UWVBFX0lTX0FUT01JQyAgICAxDQorbm90IG5lZWQgdG8gYmUgZ3VhcmRlZCB3aXRoIGEgY3JpdGljYWwgc2VjdGlvbi4gKi8NCisjZGVmaW5lIHBvcnRUSUNLX1RZUEVfSVNfQVRPTUlDIDENCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWNzLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEggICAgICAgICAgKCAtMSApDQotICAgICNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TICAgICAgICAoICggVGlja1R5cGVfdCApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KLSAgICAjaWZkZWYgX19yaXNjdjY0DQotICAgICAgICAjZXJyb3IgVGhpcyBpcyB0aGUgUlYzMiBwb3J0IHRoYXQgaGFzIG5vdCB5ZXQgYmVlbiBhZGFwdGVkIGZvciA2NC4NCi0gICAgICAgICNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UICAgIDE2DQotICAgICNlbHNlDQotICAgICAgICAjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVCAgICAxNg0KLSAgICAjZW5kaWYNCisjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEgJCQkoIC0xICkNCisjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUwkJCSggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQorI2lmZGVmIF9fcmlzY3Y2NA0KKwkjZXJyb3IgVGhpcyBpcyB0aGUgUlYzMiBwb3J0IHRoYXQgaGFzIG5vdCB5ZXQgYmVlbiBhZGFwdGVkIGZvciA2NC4NCisJI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQJCQkxNg0KKyNlbHNlDQorCSNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UCQkJMTYNCisjZW5kaWYNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiANCiAvKiBTY2hlZHVsZXIgdXRpbGl0aWVzLiAqLw0KLSAgICBleHRlcm4gdm9pZCB2VGFza1N3aXRjaENvbnRleHQoIHZvaWQgKTsNCi0gICAgI2RlZmluZSBwb3J0WUlFTEQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXNtIHZvbGF0aWxlICggImVjYWxsIiApOw0KLSAgICAjZGVmaW5lIHBvcnRFTkRfU1dJVENISU5HX0lTUiggeFN3aXRjaFJlcXVpcmVkICkgICAgaWYoIHhTd2l0Y2hSZXF1aXJlZCApIHZUYXNrU3dpdGNoQ29udGV4dCgpDQotICAgICNkZWZpbmUgcG9ydFlJRUxEX0ZST01fSVNSKCB4ICkgICAgICAgICAgICAgICAgICAgICBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHggKQ0KK2V4dGVybiB2b2lkIHZUYXNrU3dpdGNoQ29udGV4dCggdm9pZCApOw0KKyNkZWZpbmUgcG9ydFlJRUxEKCkgX19hc20gdm9sYXRpbGUoICJlY2FsbCIgKTsNCisjZGVmaW5lIHBvcnRFTkRfU1dJVENISU5HX0lTUiggeFN3aXRjaFJlcXVpcmVkICkgaWYoIHhTd2l0Y2hSZXF1aXJlZCApIHZUYXNrU3dpdGNoQ29udGV4dCgpDQorI2RlZmluZSBwb3J0WUlFTERfRlJPTV9JU1IoIHggKSBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHggKQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIA0KIC8qIENyaXRpY2FsIHNlY3Rpb24gbWFuYWdlbWVudC4gKi8NCi0gICAgI2RlZmluZSBwb3J0Q1JJVElDQUxfTkVTVElOR19JTl9UQ0IgICAgMQ0KLSAgICBleHRlcm4gdm9pZCB2VGFza0VudGVyQ3JpdGljYWwoIHZvaWQgKTsNCi0gICAgZXh0ZXJuIHZvaWQgdlRhc2tFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCisjZGVmaW5lIHBvcnRDUklUSUNBTF9ORVNUSU5HX0lOX1RDQgkJCQkJMQ0KK2V4dGVybiB2b2lkIHZUYXNrRW50ZXJDcml0aWNhbCggdm9pZCApOw0KK2V4dGVybiB2b2lkIHZUYXNrRXhpdENyaXRpY2FsKCB2b2lkICk7DQogDQotICAgICNkZWZpbmUgcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpICAgICAgICAgICAgICAgICAgICAgICAgICAwDQotICAgICNkZWZpbmUgcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCB1eFNhdmVkU3RhdHVzVmFsdWUgKSAgICAoIHZvaWQgKSB1eFNhdmVkU3RhdHVzVmFsdWUNCi0gICAgI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXNtIHZvbGF0aWxlICggImNzcmMgbXN0YXR1cywgOCIgKQ0KLSAgICAjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hc20gdm9sYXRpbGUgKCAiY3NycyBtc3RhdHVzLCA4IiApDQotICAgICNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2VGFza0VudGVyQ3JpdGljYWwoKQ0KLSAgICAjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdlRhc2tFeGl0Q3JpdGljYWwoKQ0KKyNkZWZpbmUgcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpIDANCisjZGVmaW5lIHBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUiggdXhTYXZlZFN0YXR1c1ZhbHVlICkgKCB2b2lkICkgdXhTYXZlZFN0YXR1c1ZhbHVlDQorI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkJX19hc20gdm9sYXRpbGUoICJjc3JjIG1zdGF0dXMsIDgiICkNCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpCQlfX2FzbSB2b2xhdGlsZSggImNzcnMgbXN0YXR1cywgOCIgKQ0KKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkJdlRhc2tFbnRlckNyaXRpY2FsKCkNCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkJCXZUYXNrRXhpdENyaXRpY2FsKCkNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWMgb3B0aW1pc2F0aW9ucy4gKi8NCi0gICAgI2lmbmRlZiBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04NCi0gICAgICAgICNkZWZpbmUgY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OICAgIDENCi0gICAgI2VuZGlmDQorI2lmbmRlZiBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04NCisJI2RlZmluZSBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gMQ0KKyNlbmRpZg0KIA0KLSAgICAjaWYgKCBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gPT0gMSApDQorI2lmKCBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gPT0gMSApDQogDQotLyogQ2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24uICovDQotICAgICAgICAjaWYgKCBjb25maWdNQVhfUFJJT1JJVElFUyA+IDMyICkNCi0gICAgICAgICAgICAjZXJyb3IgY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OIGNhbiBvbmx5IGJlIHNldCB0byAxIHdoZW4gY29uZmlnTUFYX1BSSU9SSVRJRVMgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDMyLiAgSXQgaXMgdmVyeSByYXJlIHRoYXQgYSBzeXN0ZW0gcmVxdWlyZXMgbW9yZSB0aGFuIDEwIHRvIDE1IGRpZmZlcmVuY2UgcHJpb3JpdGllcyBhcyB0YXNrcyB0aGF0IHNoYXJlIGEgcHJpb3JpdHkgd2lsbCB0aW1lIHNsaWNlLg0KLSAgICAgICAgI2VuZGlmDQorCS8qIENoZWNrIHRoZSBjb25maWd1cmF0aW9uLiAqLw0KKwkjaWYoIGNvbmZpZ01BWF9QUklPUklUSUVTID4gMzIgKQ0KKwkJI2Vycm9yIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiBjYW4gb25seSBiZSBzZXQgdG8gMSB3aGVuIGNvbmZpZ01BWF9QUklPUklUSUVTIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAzMi4gIEl0IGlzIHZlcnkgcmFyZSB0aGF0IGEgc3lzdGVtIHJlcXVpcmVzIG1vcmUgdGhhbiAxMCB0byAxNSBkaWZmZXJlbmNlIHByaW9yaXRpZXMgYXMgdGFza3MgdGhhdCBzaGFyZSBhIHByaW9yaXR5IHdpbGwgdGltZSBzbGljZS4NCisJI2VuZGlmDQogDQotLyogU3RvcmUvY2xlYXIgdGhlIHJlYWR5IHByaW9yaXRpZXMgaW4gYSBiaXQgbWFwLiAqLw0KLSAgICAgICAgI2RlZmluZSBwb3J0UkVDT1JEX1JFQURZX1BSSU9SSVRZKCB1eFByaW9yaXR5LCB1eFJlYWR5UHJpb3JpdGllcyApICAgICggdXhSZWFkeVByaW9yaXRpZXMgKSB8PSAoIDFVTCA8PCAoIHV4UHJpb3JpdHkgKSApDQotICAgICAgICAjZGVmaW5lIHBvcnRSRVNFVF9SRUFEWV9QUklPUklUWSggdXhQcmlvcml0eSwgdXhSZWFkeVByaW9yaXRpZXMgKSAgICAgKCB1eFJlYWR5UHJpb3JpdGllcyApICY9IH4oIDFVTCA8PCAoIHV4UHJpb3JpdHkgKSApDQorCS8qIFN0b3JlL2NsZWFyIHRoZSByZWFkeSBwcmlvcml0aWVzIGluIGEgYml0IG1hcC4gKi8NCisJI2RlZmluZSBwb3J0UkVDT1JEX1JFQURZX1BSSU9SSVRZKCB1eFByaW9yaXR5LCB1eFJlYWR5UHJpb3JpdGllcyApICggdXhSZWFkeVByaW9yaXRpZXMgKSB8PSAoIDFVTCA8PCAoIHV4UHJpb3JpdHkgKSApDQorCSNkZWZpbmUgcG9ydFJFU0VUX1JFQURZX1BSSU9SSVRZKCB1eFByaW9yaXR5LCB1eFJlYWR5UHJpb3JpdGllcyApICggdXhSZWFkeVByaW9yaXRpZXMgKSAmPSB+KCAxVUwgPDwgKCB1eFByaW9yaXR5ICkgKQ0KIA0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0gICAgICAgICNkZWZpbmUgcG9ydEdFVF9ISUdIRVNUX1BSSU9SSVRZKCB1eFRvcFByaW9yaXR5LCB1eFJlYWR5UHJpb3JpdGllcyApICAgIHV4VG9wUHJpb3JpdHkgPSAoIDMxVUwgLSBfX2J1aWx0aW5fY2x6KCB1eFJlYWR5UHJpb3JpdGllcyApICkNCisJI2RlZmluZSBwb3J0R0VUX0hJR0hFU1RfUFJJT1JJVFkoIHV4VG9wUHJpb3JpdHksIHV4UmVhZHlQcmlvcml0aWVzICkgdXhUb3BQcmlvcml0eSA9ICggMzFVTCAtIF9fYnVpbHRpbl9jbHooIHV4UmVhZHlQcmlvcml0aWVzICkgKQ0KIA0KLSAgICAjZW5kaWYgLyogY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OICovDQorI2VuZGlmIC8qIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiAqLw0KIA0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAgVGhlc2UgYXJlDQotICogbm90IG5lY2Vzc2FyeSBmb3IgdG8gdXNlIHRoaXMgcG9ydC4gIFRoZXkgYXJlIGRlZmluZWQgc28gdGhlIGNvbW1vbiBkZW1vIGZpbGVzDQotICogKHdoaWNoIGJ1aWxkIHdpdGggYWxsIHRoZSBwb3J0cykgd2lsbCBidWlsZC4gKi8NCi0gICAgI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQotICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgICAgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KK25vdCBuZWNlc3NhcnkgZm9yIHRvIHVzZSB0aGlzIHBvcnQuICBUaGV5IGFyZSBkZWZpbmVkIHNvIHRoZSBjb21tb24gZGVtbyBmaWxlcw0KKyh3aGljaCBidWlsZCB3aXRoIGFsbCB0aGUgcG9ydHMpIHdpbGwgYnVpbGQuICovDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KLSAgICAjZGVmaW5lIHBvcnROT1AoKSAgICBfX2FzbSB2b2xhdGlsZSAoICIgbm9wICIgKQ0KKyNkZWZpbmUgcG9ydE5PUCgpIF9fYXNtIHZvbGF0aWxlIAkoICIgbm9wICIgKQ0KIA0KLSAgICAjZGVmaW5lIHBvcnRJTkxJTkUgICAgICAgICAgICAgIF9faW5saW5lDQorI2RlZmluZSBwb3J0SU5MSU5FCV9faW5saW5lDQogDQotICAgICNpZm5kZWYgcG9ydEZPUkNFX0lOTElORQ0KLSAgICAgICAgI2RlZmluZSBwb3J0Rk9SQ0VfSU5MSU5FICAgIGlubGluZSBfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApDQotICAgICNlbmRpZg0KKyNpZm5kZWYgcG9ydEZPUkNFX0lOTElORQ0KKwkjZGVmaW5lIHBvcnRGT1JDRV9JTkxJTkUgaW5saW5lIF9fYXR0cmlidXRlX18oKCBhbHdheXNfaW5saW5lKSkNCisjZW5kaWYNCiANCi0gICAgI2RlZmluZSBwb3J0TUVNT1JZX0JBUlJJRVIoKSAgICBfX2FzbSB2b2xhdGlsZSAoICIiIDo6OiAibWVtb3J5IiApDQorI2RlZmluZSBwb3J0TUVNT1JZX0JBUlJJRVIoKSBfX2FzbSB2b2xhdGlsZSggIiIgOjo6ICJtZW1vcnkiICkNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiANCiAvKiBjb25maWdDTElOVF9CQVNFX0FERFJFU1MgaXMgYSBsZWdhY3kgZGVmaW5pdGlvbiB0aGF0IHdhcyByZXBsYWNlZCBieSB0aGUNCi0gKiBjb25maWdNVElNRV9CQVNFX0FERFJFU1MgYW5kIGNvbmZpZ01USU1FQ01QX0JBU0VfQUREUkVTUyBkZWZpbml0aW9ucy4gIEZvcg0KLSAqIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgZGVyaXZlIHRoZSBuZXdlciBkZWZpbml0aW9ucyBmcm9tIHRoZSBvbGQgaWYgdGhlIG9sZA0KLSAqIGRlZmluaXRpb24gaXMgZm91bmQuICovDQotICAgICNpZiBkZWZpbmVkKCBjb25maWdDTElOVF9CQVNFX0FERFJFU1MgKSAmJiAhZGVmaW5lZCggY29uZmlnTVRJTUVfQkFTRV9BRERSRVNTICkgJiYgKCBjb25maWdDTElOVF9CQVNFX0FERFJFU1MgPT0gMCApDQotDQotLyogTGVnYWN5IGNhc2Ugd2hlcmUgY29uZmlnQ0xJTlRfQkFTRV9BRERSRVNTIHdhcyBkZWZpbmVkIGFzIDAgdG8gaW5kaWNhdGUNCi0gKiB0aGVyZSB3YXMgbm8gQ0xJTlQuICBFcXVpdmFsZW50IG5vdyBpcyB0byBzZXQgdGhlIE1USU1FIGFuZCBNVElNRUNNUA0KLSAqIGFkZHJlc3NlcyB0byAwLiAqLw0KLSAgICAgICAgI2RlZmluZSBjb25maWdNVElNRV9CQVNFX0FERFJFU1MgICAgICAgKCAwICkNCi0gICAgICAgICNkZWZpbmUgY29uZmlnTVRJTUVDTVBfQkFTRV9BRERSRVNTICAgICggMCApDQotICAgICNlbGlmIGRlZmluZWQoIGNvbmZpZ0NMSU5UX0JBU0VfQUREUkVTUyApICYmICFkZWZpbmVkKCBjb25maWdNVElNRV9CQVNFX0FERFJFU1MgKQ0KLQ0KLS8qIExlZ2FjeSBjYXNlIHdoZXJlIGNvbmZpZ0NMSU5UX0JBU0VfQUREUkVTUyB3YXMgc2V0IHRvIHRoZSBiYXNlIGFkZHJlc3Mgb2YNCi0gKiB0aGUgQ0xJTlQuICBFcXVpdmFsZW50IG5vdyBpcyB0byBkZXJpdmUgdGhlIE1USU1FIGFuZCBNVElNRUNNUCBhZGRyZXNzZXMNCi0gKiBmcm9tIHRoZSBDTElOVCBhZGRyZXNzLiAqLw0KLSAgICAgICAgI2RlZmluZSBjb25maWdNVElNRV9CQVNFX0FERFJFU1MgICAgICAgKCAoIGNvbmZpZ0NMSU5UX0JBU0VfQUREUkVTUyApICsgMHhCRkY4VUwgKQ0KLSAgICAgICAgI2RlZmluZSBjb25maWdNVElNRUNNUF9CQVNFX0FERFJFU1MgICAgKCAoIGNvbmZpZ0NMSU5UX0JBU0VfQUREUkVTUyApICsgMHg0MDAwVUwgKQ0KLSAgICAjZWxpZiAhZGVmaW5lZCggY29uZmlnTVRJTUVfQkFTRV9BRERSRVNTICkgfHwgIWRlZmluZWQoIGNvbmZpZ01USU1FQ01QX0JBU0VfQUREUkVTUyApDQotICAgICAgICAjZXJyb3IgY29uZmlnTVRJTUVfQkFTRV9BRERSRVNTIGFuZCBjb25maWdNVElNRUNNUF9CQVNFX0FERFJFU1MgbXVzdCBiZSBkZWZpbmVkIGluIEZyZWVSVE9TQ29uZmlnLmguICBTZXQgdGhlbSB0byB6ZXJvIGlmIHRoZXJlIGlzIG5vIE1USU1FIChtYWNoaW5lIHRpbWUpIGNsb2NrLiAgU2VlIGh0dHBzOiAvKnd3dy5mcmVlcnRvcy5vcmcvVXNpbmctRnJlZVJUT1Mtb24tUklTQy1WLmh0bWwgKi8NCi0gICAgI2VuZGlmIC8qIGlmIGRlZmluZWQoIGNvbmZpZ0NMSU5UX0JBU0VfQUREUkVTUyApICYmICFkZWZpbmVkKCBjb25maWdNVElNRV9CQVNFX0FERFJFU1MgKSAmJiAoIGNvbmZpZ0NMSU5UX0JBU0VfQUREUkVTUyA9PSAwICkgKi8NCitjb25maWdNVElNRV9CQVNFX0FERFJFU1MgYW5kIGNvbmZpZ01USU1FQ01QX0JBU0VfQUREUkVTUyBkZWZpbml0aW9ucy4gIEZvcg0KK2JhY2t3YXJkIGNvbXBhdGliaWxpdHkgZGVyaXZlIHRoZSBuZXdlciBkZWZpbml0aW9ucyBmcm9tIHRoZSBvbGQgaWYgdGhlIG9sZA0KK2RlZmluaXRpb24gaXMgZm91bmQuICovDQorI2lmIGRlZmluZWQoIGNvbmZpZ0NMSU5UX0JBU0VfQUREUkVTUyApICYmICFkZWZpbmVkKCBjb25maWdNVElNRV9CQVNFX0FERFJFU1MgKSAmJiAoIGNvbmZpZ0NMSU5UX0JBU0VfQUREUkVTUyA9PSAwICkNCisJLyogTGVnYWN5IGNhc2Ugd2hlcmUgY29uZmlnQ0xJTlRfQkFTRV9BRERSRVNTIHdhcyBkZWZpbmVkIGFzIDAgdG8gaW5kaWNhdGUNCisJdGhlcmUgd2FzIG5vIENMSU5ULiAgRXF1aXZhbGVudCBub3cgaXMgdG8gc2V0IHRoZSBNVElNRSBhbmQgTVRJTUVDTVANCisJYWRkcmVzc2VzIHRvIDAuICovDQorCSNkZWZpbmUgY29uZmlnTVRJTUVfQkFTRV9BRERSRVNTIAkoIDAgKQ0KKwkjZGVmaW5lIGNvbmZpZ01USU1FQ01QX0JBU0VfQUREUkVTUyAoIDAgKQ0KKyNlbGlmIGRlZmluZWQoIGNvbmZpZ0NMSU5UX0JBU0VfQUREUkVTUyApICYmICFkZWZpbmVkKCBjb25maWdNVElNRV9CQVNFX0FERFJFU1MgKQ0KKwkvKiBMZWdhY3kgY2FzZSB3aGVyZSBjb25maWdDTElOVF9CQVNFX0FERFJFU1Mgd2FzIHNldCB0byB0aGUgYmFzZSBhZGRyZXNzIG9mDQorCXRoZSBDTElOVC4gIEVxdWl2YWxlbnQgbm93IGlzIHRvIGRlcml2ZSB0aGUgTVRJTUUgYW5kIE1USU1FQ01QIGFkZHJlc3Nlcw0KKwlmcm9tIHRoZSBDTElOVCBhZGRyZXNzLiAqLw0KKwkjZGVmaW5lIGNvbmZpZ01USU1FX0JBU0VfQUREUkVTUyAJKCAoIGNvbmZpZ0NMSU5UX0JBU0VfQUREUkVTUyApICsgMHhCRkY4VUwgKQ0KKwkjZGVmaW5lIGNvbmZpZ01USU1FQ01QX0JBU0VfQUREUkVTUyAoICggY29uZmlnQ0xJTlRfQkFTRV9BRERSRVNTICkgKyAweDQwMDBVTCApDQorI2VsaWYgIWRlZmluZWQoIGNvbmZpZ01USU1FX0JBU0VfQUREUkVTUyApIHx8ICFkZWZpbmVkKCBjb25maWdNVElNRUNNUF9CQVNFX0FERFJFU1MgKQ0KKwkjZXJyb3IgY29uZmlnTVRJTUVfQkFTRV9BRERSRVNTIGFuZCBjb25maWdNVElNRUNNUF9CQVNFX0FERFJFU1MgbXVzdCBiZSBkZWZpbmVkIGluIEZyZWVSVE9TQ29uZmlnLmguICBTZXQgdGhlbSB0byB6ZXJvIGlmIHRoZXJlIGlzIG5vIE1USU1FIChtYWNoaW5lIHRpbWUpIGNsb2NrLiAgU2VlIGh0dHBzOi8vd3d3LmZyZWVydG9zLm9yZy9Vc2luZy1GcmVlUlRPUy1vbi1SSVNDLVYuaHRtbA0KKyNlbmRpZg0KIA0KIA0KIA0KLSAgICAjaWZkZWYgX19jcGx1c3BsdXMNCi0gICAgICAgIH0NCi0gICAgI2VuZGlmDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KIA0KICNlbmRpZiAvKiBQT1JUTUFDUk9fSCAqLw0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0dDQy9STDc4L2lzcl9zdXBwb3J0LmggYi9wb3J0YWJsZS9HQ0MvUkw3OC9pc3Jfc3VwcG9ydC5oCmluZGV4IGU4MDRjM2YuLjM2ODdmZGMgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0dDQy9STDc4L2lzcl9zdXBwb3J0LmgKKysrIGIvcG9ydGFibGUvR0NDL1JMNzgvaXNyX3N1cHBvcnQuaApAQCAtMjYsOCArMjYsOCBAQAogICovDQogDQogLyogVmFyaWFibGVzIHVzZWQgYnkgc2NoZWR1bGVyICovDQotLmV4dGVybiBfcHhDdXJyZW50VENCDQotICAgLmV4dGVybiBfdXNDcml0aWNhbE5lc3RpbmcNCisJLmV4dGVybiAgICBfcHhDdXJyZW50VENCDQorCS5leHRlcm4gICAgX3VzQ3JpdGljYWxOZXN0aW5nDQogDQogLyoNCiAgKiBwb3J0U0FWRV9DT05URVhUIE1BQ1JPDQpAQCAtMzUsNDcgKzM1LDQ3IEBACiAgKiBtZW1vcnkgbW9kZSkgcmVnaXN0ZXJzIHRoZSB1c0NyaXRpY2FsTmVzdGluZyBWYWx1ZSBhbmQgdGhlIFN0YWNrIFBvaW50ZXINCiAgKiBvZiB0aGUgYWN0aXZlIFRhc2sgb250byB0aGUgdGFzayBzdGFjaw0KICAqLw0KLSAgIC5tYWNybyBwb3J0U0FWRV9DT05URVhUDQorCS5tYWNybyBwb3J0U0FWRV9DT05URVhUDQogDQotU0VMIFJCMA0KKwlTRUwgCVJCMA0KIA0KLS8qIFNhdmUgQVggUmVnaXN0ZXIgdG8gc3RhY2suICovDQotUFVTSCBBWA0KLVBVU0ggSEwNCi0vKiBTYXZlIENTIHJlZ2lzdGVyLiAqLw0KLU1PViBBLCBDUw0KLVhDSCBBLCBYDQotLyogU2F2ZSBFUyByZWdpc3Rlci4gKi8NCi1NT1YgQSwgRVMNCi1QVVNIIEFYDQotLyogU2F2ZSB0aGUgcmVtYWluaW5nIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMgZnJvbSBiYW5rIDAuICovDQotUFVTSCBERQ0KLVBVU0ggQkMNCi0vKiBTYXZlIHRoZSBvdGhlciByZWdpc3RlciBiYW5rcyAtIG9ubHkgbmVjZXNzYXJ5IGluIHRoZSBHQ0MgcG9ydC4gKi8NCi1TRUwgUkIxDQotUFVTSCBBWA0KLVBVU0ggQkMNCi1QVVNIIERFDQotUFVTSCBITA0KLVNFTCBSQjINCi1QVVNIIEFYDQotUFVTSCBCQw0KLVBVU0ggREUNCi1QVVNIIEhMDQotLyogUmVnaXN0ZXJzIGluIGJhbmsgMyBhcmUgZm9yIElTUiB1c2Ugb25seSBzbyBkb24ndCBuZWVkIHNhdmluZy4gKi8NCi1TRUwgUkIwDQotLyogU2F2ZSB0aGUgdXNDcml0aWNhbE5lc3RpbmcgdmFsdWUuICovDQotTU9WVyBBWCwgIV91c0NyaXRpY2FsTmVzdGluZw0KLVBVU0ggQVgNCi0vKiBTYXZlIHRoZSBTdGFjayBwb2ludGVyLiAqLw0KLU1PVlcgQVgsICFfcHhDdXJyZW50VENCDQotTU9WVyBITCwgQVgNCi1NT1ZXIEFYLCBTUA0KLU1PVldbIEhMIF0sIEFYDQotLyogU3dpdGNoIHN0YWNrIHBvaW50ZXJzLiAqLw0KLW1vdncgc3AsICMgX3N0YWNrIC8qIFNldCBzdGFjayBwb2ludGVyICovDQorCS8qIFNhdmUgQVggUmVnaXN0ZXIgdG8gc3RhY2suICovDQorCVBVU0gJQVgNCisJUFVTSAlITA0KKwkvKiBTYXZlIENTIHJlZ2lzdGVyLiAqLw0KKwlNT1YgCUEsIENTDQorCVhDSAkJQSwgWA0KKwkvKiBTYXZlIEVTIHJlZ2lzdGVyLiAqLw0KKwlNT1YJCUEsIEVTDQorCVBVU0gJQVgNCisJLyogU2F2ZSB0aGUgcmVtYWluaW5nIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMgZnJvbSBiYW5rIDAuICovDQorCVBVU0gJREUNCisJUFVTSAlCQw0KKwkvKiBTYXZlIHRoZSBvdGhlciByZWdpc3RlciBiYW5rcyAtIG9ubHkgbmVjZXNzYXJ5IGluIHRoZSBHQ0MgcG9ydC4gKi8NCisJU0VMCQlSQjENCisJUFVTSAlBWA0KKwlQVVNICUJDDQorCVBVU0gJREUNCisJUFVTSAlITA0KKwlTRUwJCVJCMg0KKwlQVVNICUFYDQorCVBVU0gJQkMNCisJUFVTSAlERQ0KKwlQVVNICUhMDQorCS8qIFJlZ2lzdGVycyBpbiBiYW5rIDMgYXJlIGZvciBJU1IgdXNlIG9ubHkgc28gZG9uJ3QgbmVlZCBzYXZpbmcuICovDQorCVNFTAkJUkIwDQorCS8qIFNhdmUgdGhlIHVzQ3JpdGljYWxOZXN0aW5nIHZhbHVlLiAqLw0KKwlNT1ZXCUFYLCAhX3VzQ3JpdGljYWxOZXN0aW5nDQorCVBVU0gJQVgNCisJLyogU2F2ZSB0aGUgU3RhY2sgcG9pbnRlci4gKi8NCisJTU9WVwlBWCwgIV9weEN1cnJlbnRUQ0INCisJTU9WVwlITCwgQVgNCisJTU9WVwlBWCwgU1ANCisJTU9WVwlbSExdLCBBWA0KKwkvKiBTd2l0Y2ggc3RhY2sgcG9pbnRlcnMuICovDQorCW1vdncgc3AsI19zdGFjayAvKiBTZXQgc3RhY2sgcG9pbnRlciAqLw0KIA0KLSAgIC5lbmRtDQorCS5lbmRtDQogDQogDQogLyoNCkBAIC04NCw0MyArODQsNDMgQEAKICAqIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMgYW5kIHRoZSBDUyBhbmQgRVMgKG9ubHkgaW4gZmFyIG1lbW9yeSBtb2RlKQ0KICAqIG9mIHRoZSBzZWxlY3RlZCB0YXNrIGZyb20gdGhlIHRhc2sgc3RhY2sNCiAgKi8NCi0gICAubWFjcm8gcG9ydFJFU1RPUkVfQ09OVEVYVCBNQUNSTw0KLVNFTCBSQjANCi0vKiBSZXN0b3JlIHRoZSBTdGFjayBwb2ludGVyLiAqLw0KLU1PVlcgQVgsICFfcHhDdXJyZW50VENCDQotTU9WVyBITCwgQVgNCi1NT1ZXIEFYLCBbIEhMIF0NCi1NT1ZXIFNQLCBBWA0KLS8qIFJlc3RvcmUgdXNDcml0aWNhbE5lc3RpbmcgdmFsdWUuICovDQotUE9QIEFYDQotTU9WVyAgICAhX3VzQ3JpdGljYWxOZXN0aW5nLCBBWA0KKy5tYWNybyBwb3J0UkVTVE9SRV9DT05URVhUIE1BQ1JPDQorCVNFTAkJUkIwDQorCS8qIFJlc3RvcmUgdGhlIFN0YWNrIHBvaW50ZXIuICovDQorCU1PVlcJQVgsICFfcHhDdXJyZW50VENCDQorCU1PVlcJSEwsIEFYDQorCU1PVlcJQVgsIFtITF0NCisJTU9WVwlTUCwgQVgNCisJLyogUmVzdG9yZSB1c0NyaXRpY2FsTmVzdGluZyB2YWx1ZS4gKi8NCisJUE9QCQlBWA0KKwlNT1ZXCSFfdXNDcml0aWNhbE5lc3RpbmcsIEFYDQorCS8qIFJlc3RvcmUgdGhlIGFsdGVybmF0aXZlIHJlZ2lzdGVyIGJhbmtzIC0gb25seSBuZWNlc3NhcnkgaW4gdGhlIEdDQw0KKwlwb3J0LiAgUmVnaXN0ZXIgYmFuayAzIGlzIGRlZGljYXRlZCBmb3IgaW50ZXJydXB0cyB1c2Ugc28gaXMgbm90IHNhdmVkIG9yDQorCXJlc3RvcmVkLiAqLw0KKwlTRUwJCVJCMg0KKwlQT1AJCUhMDQorCVBPUAkJREUNCisJUE9QCQlCQw0KKwlQT1AJCUFYDQorCVNFTAkJUkIxDQorCVBPUAkJSEwNCisJUE9QCQlERQ0KKwlQT1AJCUJDDQorCVBPUAkJQVgNCisJU0VMCQlSQjANCisJLyogUmVzdG9yZSB0aGUgbmVjZXNzYXJ5IGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMuICovDQorCVBPUAkJQkMNCisJUE9QCQlERQ0KKwkvKiBSZXN0b3JlIHRoZSBFUyByZWdpc3Rlci4gKi8NCisJUE9QCQlBWA0KKwlNT1YJCUVTLCBBDQorCS8qIFJlc3RvcmUgdGhlIENTIHJlZ2lzdGVyLiAqLw0KKwlYQ0gJCUEsIFgNCisJTU9WCQlDUywgQQ0KKwkvKiBSZXN0b3JlIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlciBITC4gKi8NCisJUE9QCQlITA0KKwkvKiBSZXN0b3JlIEFYLiAqLw0KKwlQT1AJCUFYDQogDQotLyogUmVzdG9yZSB0aGUgYWx0ZXJuYXRpdmUgcmVnaXN0ZXIgYmFua3MgLSBvbmx5IG5lY2Vzc2FyeSBpbiB0aGUgR0NDDQotICogcG9ydC4gIFJlZ2lzdGVyIGJhbmsgMyBpcyBkZWRpY2F0ZWQgZm9yIGludGVycnVwdHMgdXNlIHNvIGlzIG5vdCBzYXZlZCBvcg0KLSAqIHJlc3RvcmVkLiAqLw0KLVNFTCBSQjINCi1QT1AgSEwNCi1QT1AgREUNCi1QT1AgQkMNCi1QT1AgQVgNCi1TRUwgUkIxDQotUE9QIEhMDQotUE9QIERFDQotUE9QIEJDDQotUE9QIEFYDQotU0VMIFJCMA0KLS8qIFJlc3RvcmUgdGhlIG5lY2Vzc2FyeSBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzLiAqLw0KLVBPUCBCQw0KLVBPUCBERQ0KLS8qIFJlc3RvcmUgdGhlIEVTIHJlZ2lzdGVyLiAqLw0KLVBPUCBBWA0KLU1PViBFUywgQQ0KLS8qIFJlc3RvcmUgdGhlIENTIHJlZ2lzdGVyLiAqLw0KLVhDSCBBLCBYDQotTU9WIENTLCBBDQotLyogUmVzdG9yZSBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXIgSEwuICovDQotUE9QIEhMDQotLyogUmVzdG9yZSBBWC4gKi8NCi1QT1AgQVgNCisJLmVuZG0NCiANCi0gICAuZW5kbQ0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0dDQy9STDc4L3BvcnQuYyBiL3BvcnRhYmxlL0dDQy9STDc4L3BvcnQuYwppbmRleCA4MmI1MWJlLi5kYzFmYzU2IDEwMDY0NAotLS0gYS9wb3J0YWJsZS9HQ0MvUkw3OC9wb3J0LmMKKysrIGIvcG9ydGFibGUvR0NDL1JMNzgvcG9ydC5jCkBAIC0zMCw4ICszMCw4IEBACiAjaW5jbHVkZSAidGFzay5oIg0KIA0KIC8qIFRoZSBjcml0aWNhbCBuZXN0aW5nIHZhbHVlIGlzIGluaXRpYWxpc2VkIHRvIGEgbm9uIHplcm8gdmFsdWUgdG8gZW5zdXJlDQotICogaW50ZXJydXB0cyBkb24ndCBhY2NpZGVudGFsbHkgYmVjb21lIGVuYWJsZWQgYmVmb3JlIHRoZSBzY2hlZHVsZXIgaXMgc3RhcnRlZC4gKi8NCi0jZGVmaW5lIHBvcnRJTklUSUFMX0NSSVRJQ0FMX05FU1RJTkcgICAgKCAoIHVpbnQxNl90ICkgMTAgKQ0KK2ludGVycnVwdHMgZG9uJ3QgYWNjaWRlbnRhbGx5IGJlY29tZSBlbmFibGVkIGJlZm9yZSB0aGUgc2NoZWR1bGVyIGlzIHN0YXJ0ZWQuICovDQorI2RlZmluZSBwb3J0SU5JVElBTF9DUklUSUNBTF9ORVNUSU5HICAoICggdWludDE2X3QgKSAxMCApDQogDQogLyogSW5pdGlhbCBQU1cgdmFsdWUgYWxsb2NhdGVkIHRvIGEgbmV3bHkgY3JlYXRlZCB0YXNrLg0KICAqICAgMTEwMDAxMTANCkBAIC00NCwxNiArNDQsMTYgQEAKICAqICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLSBaZXJvIEZsYWcgc2V0DQogICogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEdsb2JhbCBJbnRlcnJ1cHQgRmxhZyBzZXQgKGVuYWJsZWQpDQogICovDQotI2RlZmluZSBwb3J0UFNXICAgICAgICAgICAgICAgICAgICAgICAgICggMHhjNlVMICkNCisjZGVmaW5lIHBvcnRQU1cJCSAgKCAweGM2VUwgKQ0KIA0KIC8qIEVhY2ggdGFzayBtYWludGFpbnMgYSBjb3VudCBvZiB0aGUgY3JpdGljYWwgc2VjdGlvbiBuZXN0aW5nIGRlcHRoLiAgRWFjaCB0aW1lDQotICogYSBjcml0aWNhbCBzZWN0aW9uIGlzIGVudGVyZWQgdGhlIGNvdW50IGlzIGluY3JlbWVudGVkLiAgRWFjaCB0aW1lIGEgY3JpdGljYWwNCi0gKiBzZWN0aW9uIGlzIGV4aXRlZCB0aGUgY291bnQgaXMgZGVjcmVtZW50ZWQgLSB3aXRoIGludGVycnVwdHMgb25seSBiZWluZw0KLSAqIHJlLWVuYWJsZWQgaWYgdGhlIGNvdW50IGlzIHplcm8uDQotICoNCi0gKiB1c0NyaXRpY2FsTmVzdGluZyB3aWxsIGdldCBzZXQgdG8gemVybyB3aGVuIHRoZSBzY2hlZHVsZXIgc3RhcnRzLCBidXQgbXVzdA0KLSAqIG5vdCBiZSBpbml0aWFsaXNlZCB0byB6ZXJvIGFzIHRoYXQgY291bGQgY2F1c2UgcHJvYmxlbXMgZHVyaW5nIHRoZSBzdGFydHVwDQotICogc2VxdWVuY2UuICovDQorYSBjcml0aWNhbCBzZWN0aW9uIGlzIGVudGVyZWQgdGhlIGNvdW50IGlzIGluY3JlbWVudGVkLiAgRWFjaCB0aW1lIGEgY3JpdGljYWwNCitzZWN0aW9uIGlzIGV4aXRlZCB0aGUgY291bnQgaXMgZGVjcmVtZW50ZWQgLSB3aXRoIGludGVycnVwdHMgb25seSBiZWluZw0KK3JlLWVuYWJsZWQgaWYgdGhlIGNvdW50IGlzIHplcm8uDQorDQordXNDcml0aWNhbE5lc3Rpbmcgd2lsbCBnZXQgc2V0IHRvIHplcm8gd2hlbiB0aGUgc2NoZWR1bGVyIHN0YXJ0cywgYnV0IG11c3QNCitub3QgYmUgaW5pdGlhbGlzZWQgdG8gemVybyBhcyB0aGF0IGNvdWxkIGNhdXNlIHByb2JsZW1zIGR1cmluZyB0aGUgc3RhcnR1cA0KK3NlcXVlbmNlLiAqLw0KIHZvbGF0aWxlIHVpbnQxNl90IHVzQ3JpdGljYWxOZXN0aW5nID0gcG9ydElOSVRJQUxfQ1JJVElDQUxfTkVTVElORzsNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCkBAIC02MSw3ICs2MSw3IEBACiAvKg0KICAqIFNldHMgdXAgdGhlIHBlcmlvZGljIElTUiB1c2VkIGZvciB0aGUgUlRPUyB0aWNrLg0KICAqLw0KLV9fYXR0cmlidXRlX18oICggd2VhayApICkgdm9pZCB2QXBwbGljYXRpb25TZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICk7DQorX19hdHRyaWJ1dGVfXygod2VhaykpIHZvaWQgdkFwcGxpY2F0aW9uU2V0dXBUaW1lckludGVycnVwdCggdm9pZCApOw0KIA0KIC8qDQogICogU3RhcnRzIHRoZSBzY2hlZHVsZXIgYnkgbG9hZGluZyB0aGUgY29udGV4dCBvZiB0aGUgZmlyc3QgdGFzayB0byBydW4uDQpAQCAtNzcsMTM2ICs3NywxMzUgQEAKICAqDQogICogU2VlIHRoZSBoZWFkZXIgZmlsZSBwb3J0YWJsZS5oLg0KICAqLw0KLVN0YWNrVHlwZV90ICogcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqIHB4VG9wT2ZTdGFjaywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFza0Z1bmN0aW9uX3QgcHhDb2RlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICogcHZQYXJhbWV0ZXJzICkNCitTdGFja1R5cGVfdCAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqcHhUb3BPZlN0YWNrLCBUYXNrRnVuY3Rpb25fdCBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycyApDQogew0KLSAgICB1aW50MzJfdCAqIHB1bExvY2FsOw0KK3VpbnQzMl90ICpwdWxMb2NhbDsNCiANCi0gICAgLyogU3RhY2sgdHlwZSBhbmQgcG9pbnRlcnMgdG8gdGhlIHN0YWNrIHR5cGUgYXJlIGJvdGggMiBieXRlcy4gKi8NCisJLyogU3RhY2sgdHlwZSBhbmQgcG9pbnRlcnMgdG8gdGhlIHN0YWNrIHR5cGUgYXJlIGJvdGggMiBieXRlcy4gKi8NCiANCi0gICAgLyogUGFyYW1ldGVycyBhcmUgcGFzc2VkIGluIG9uIHRoZSBzdGFjaywgYW5kIHdyaXR0ZW4gdXNpbmcgYSAzMmJpdCB2YWx1ZQ0KLSAgICAgKiBoZW5jZSBhIHNwYWNlIGlzIGxlZnQgZm9yIHRoZSBzZWNvbmQgdHdvIGJ5dGVzLiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJLyogUGFyYW1ldGVycyBhcmUgcGFzc2VkIGluIG9uIHRoZSBzdGFjaywgYW5kIHdyaXR0ZW4gdXNpbmcgYSAzMmJpdCB2YWx1ZQ0KKwloZW5jZSBhIHNwYWNlIGlzIGxlZnQgZm9yIHRoZSBzZWNvbmQgdHdvIGJ5dGVzLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgLyogV3JpdGUgaW4gdGhlIHBhcmFtZXRlciB2YWx1ZS4gKi8NCi0gICAgcHVsTG9jYWwgPSAoIHVpbnQzMl90ICogKSBweFRvcE9mU3RhY2s7DQotICAgICpwdWxMb2NhbCA9ICggU3RhY2tUeXBlX3QgKSBwdlBhcmFtZXRlcnM7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkvKiBXcml0ZSBpbiB0aGUgcGFyYW1ldGVyIHZhbHVlLiAqLw0KKwlwdWxMb2NhbCA9ICAoIHVpbnQzMl90ICogKSBweFRvcE9mU3RhY2s7DQorCSpwdWxMb2NhbCA9ICggU3RhY2tUeXBlX3QgKSBwdlBhcmFtZXRlcnM7DQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBUaGUgcmV0dXJuIGFkZHJlc3MsIGxlYXZpbmcgc3BhY2UgZm9yIHRoZSBmaXJzdCB0d28gYnl0ZXMgb2YJdGhlDQotICAgICAqIDMyLWJpdCB2YWx1ZS4gKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgIHB1bExvY2FsID0gKCB1aW50MzJfdCAqICkgcHhUb3BPZlN0YWNrOw0KLSAgICAqcHVsTG9jYWwgPSAoIHVpbnQzMl90ICkgMDsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIFRoZSByZXR1cm4gYWRkcmVzcywgbGVhdmluZyBzcGFjZSBmb3IgdGhlIGZpcnN0IHR3byBieXRlcyBvZgl0aGUNCisJMzItYml0IHZhbHVlLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJcHVsTG9jYWwgPSAoIHVpbnQzMl90ICogKSBweFRvcE9mU3RhY2s7DQorCSpwdWxMb2NhbCA9ICggdWludDMyX3QgKSAwOw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgLyogVGhlIHN0YXJ0IGFkZHJlc3MgLyBQU1cgdmFsdWUgaXMgYWxzbyB3cml0dGVuIGluIGFzIGEgMzJiaXQgdmFsdWUsDQotICAgICAqIHNvIGxlYXZlIGEgc3BhY2UgZm9yIHRoZSBzZWNvbmQgdHdvIGJ5dGVzLiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJLyogVGhlIHN0YXJ0IGFkZHJlc3MgLyBQU1cgdmFsdWUgaXMgYWxzbyB3cml0dGVuIGluIGFzIGEgMzJiaXQgdmFsdWUsDQorCXNvIGxlYXZlIGEgc3BhY2UgZm9yIHRoZSBzZWNvbmQgdHdvIGJ5dGVzLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgLyogVGFzayBmdW5jdGlvbiBzdGFydCBhZGRyZXNzIGNvbWJpbmVkIHdpdGggdGhlIFBTVy4gKi8NCi0gICAgcHVsTG9jYWwgPSAoIHVpbnQzMl90ICogKSBweFRvcE9mU3RhY2s7DQotICAgICpwdWxMb2NhbCA9ICggKCAoIHVpbnQzMl90ICkgcHhDb2RlICkgfCAoIHBvcnRQU1cgPDwgMjRVTCApICk7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkvKiBUYXNrIGZ1bmN0aW9uIHN0YXJ0IGFkZHJlc3MgY29tYmluZWQgd2l0aCB0aGUgUFNXLiAqLw0KKwlwdWxMb2NhbCA9ICggdWludDMyX3QgKiApIHB4VG9wT2ZTdGFjazsNCisJKnB1bExvY2FsID0gKCAoICggdWludDMyX3QgKSBweENvZGUgKSB8ICggcG9ydFBTVyA8PCAyNFVMICkgKTsNCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgIC8qIEFuIGluaXRpYWwgdmFsdWUgZm9yIHRoZSBBWCByZWdpc3Rlci4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDExMTE7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkvKiBBbiBpbml0aWFsIHZhbHVlIGZvciB0aGUgQVggcmVnaXN0ZXIuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMTExOw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgLyogQW4gaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIEhMIHJlZ2lzdGVyLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MjIyMjsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIEFuIGluaXRpYWwgdmFsdWUgZm9yIHRoZSBITCByZWdpc3Rlci4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDIyMjI7DQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBDUyBhbmQgRVMgcmVnaXN0ZXJzLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MEYwMDsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIENTIGFuZCBFUyByZWdpc3RlcnMuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwRjAwOw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgLyogVGhlIHJlbWFpbmluZyBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzIGJhbmsgMCAoREUgYW5kIEJDKSBhbmQgdGhlIG90aGVyDQotICAgICAqIHR3byByZWdpc3RlciBiYW5rcy4uLnJlZ2lzdGVyIGJhbmsgMyBpcyBkZWRpY2F0ZWQgZm9yIHVzZSBieSBpbnRlcnJ1cHRzIHNvDQotICAgICAqIGlzIG5vdCBzYXZlZCBhcyBwYXJ0IG9mIHRoZSB0YXNrIGNvbnRleHQuICovDQotICAgIHB4VG9wT2ZTdGFjayAtPSAxMDsNCisJLyogVGhlIHJlbWFpbmluZyBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzIGJhbmsgMCAoREUgYW5kIEJDKSBhbmQgdGhlIG90aGVyDQorCXR3byByZWdpc3RlciBiYW5rcy4uLnJlZ2lzdGVyIGJhbmsgMyBpcyBkZWRpY2F0ZWQgZm9yIHVzZSBieSBpbnRlcnJ1cHRzIHNvDQorCWlzIG5vdCBzYXZlZCBhcyBwYXJ0IG9mIHRoZSB0YXNrIGNvbnRleHQuICovDQorCXB4VG9wT2ZTdGFjayAtPSAxMDsNCiANCi0gICAgLyogRmluYWxseSB0aGUgY3JpdGljYWwgc2VjdGlvbiBuZXN0aW5nIGNvdW50IGlzIHNldCB0byB6ZXJvIHdoZW4gdGhlIHRhc2sNCi0gICAgICogZmlyc3Qgc3RhcnRzLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkc7DQorCS8qIEZpbmFsbHkgdGhlIGNyaXRpY2FsIHNlY3Rpb24gbmVzdGluZyBjb3VudCBpcyBzZXQgdG8gemVybyB3aGVuIHRoZSB0YXNrDQorCWZpcnN0IHN0YXJ0cy4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwb3J0Tk9fQ1JJVElDQUxfU0VDVElPTl9ORVNUSU5HOw0KIA0KLSAgICAvKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSB0b3Agb2YgdGhlIHN0YWNrIHRoYXQgaGFzIGJlZW5lIGdlbmVyYXRlZCBzbyBpdA0KLSAgICAgKiBjYW4JYmUgc3RvcmVkIGluIHRoZSB0YXNrIGNvbnRyb2wgYmxvY2sgZm9yIHRoZSB0YXNrLiAqLw0KLSAgICByZXR1cm4gcHhUb3BPZlN0YWNrOw0KKwkvKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSB0b3Agb2YgdGhlIHN0YWNrIHRoYXQgaGFzIGJlZW5lIGdlbmVyYXRlZCBzbyBpdA0KKwljYW4JYmUgc3RvcmVkIGluIHRoZSB0YXNrIGNvbnRyb2wgYmxvY2sgZm9yIHRoZSB0YXNrLiAqLw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBwb3J0QkFTRV9UWVBFIHhQb3J0U3RhcnRTY2hlZHVsZXIoIHZvaWQgKQ0KIHsNCi0gICAgLyogU2V0dXAgdGhlIGhhcmR3YXJlIHRvIGdlbmVyYXRlIHRoZSB0aWNrLiAgSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgd2hlbg0KLSAgICAgKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4gKi8NCi0gICAgdkFwcGxpY2F0aW9uU2V0dXBUaW1lckludGVycnVwdCgpOw0KKwkvKiBTZXR1cCB0aGUgaGFyZHdhcmUgdG8gZ2VuZXJhdGUgdGhlIHRpY2suICBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB3aGVuDQorCXRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLiAqLw0KKwl2QXBwbGljYXRpb25TZXR1cFRpbWVySW50ZXJydXB0KCk7DQogDQotICAgIC8qIFJlc3RvcmUgdGhlIGNvbnRleHQgb2YgdGhlIGZpcnN0IHRhc2sgdGhhdCBpcyBnb2luZyB0byBydW4uICovDQotICAgIHZQb3J0U3RhcnRGaXJzdFRhc2soKTsNCisJLyogUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgZmlyc3QgdGFzayB0aGF0IGlzIGdvaW5nIHRvIHJ1bi4gKi8NCisJdlBvcnRTdGFydEZpcnN0VGFzaygpOw0KIA0KLSAgICAvKiBFeGVjdXRpb24gc2hvdWxkIG5vdCByZWFjaCBoZXJlIGFzIHRoZSB0YXNrcyBhcmUgbm93IHJ1bm5pbmchICovDQotICAgIHJldHVybiBwZFRSVUU7DQorCS8qIEV4ZWN1dGlvbiBzaG91bGQgbm90IHJlYWNoIGhlcmUgYXMgdGhlIHRhc2tzIGFyZSBub3cgcnVubmluZyEgKi8NCisJcmV0dXJuIHBkVFJVRTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogdm9pZCB2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApDQogew0KLSAgICAvKiBJdCBpcyB1bmxpa2VseSB0aGF0IHRoZSBSTDc4IHBvcnQgd2lsbCBnZXQgc3RvcHBlZC4gKi8NCisJLyogSXQgaXMgdW5saWtlbHkgdGhhdCB0aGUgUkw3OCBwb3J0IHdpbGwgZ2V0IHN0b3BwZWQuICovDQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KLV9fYXR0cmlidXRlX18oICggd2VhayApICkgdm9pZCB2QXBwbGljYXRpb25TZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICkNCitfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkgdm9pZCB2QXBwbGljYXRpb25TZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICkNCiB7DQotICAgIGNvbnN0IHVpbnQxNl90IHVzQ2xvY2tIeiA9IDE1MDAwVUw7IC8qIEludGVybmFsIGNsb2NrLiAqLw0KLSAgICBjb25zdCB1aW50MTZfdCB1c0NvbXBhcmVNYXRjaCA9ICggdXNDbG9ja0h6IC8gY29uZmlnVElDS19SQVRFX0haICkgKyAxVUw7DQorY29uc3QgdWludDE2X3QgdXNDbG9ja0h6ID0gMTUwMDBVTDsgLyogSW50ZXJuYWwgY2xvY2suICovDQorY29uc3QgdWludDE2X3QgdXNDb21wYXJlTWF0Y2ggPSAoIHVzQ2xvY2tIeiAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApICsgMVVMOw0KIA0KLSAgICAvKiBVc2UgdGhlIGludGVybmFsIDE1SyBjbG9jay4gKi8NCi0gICAgT1NNQyA9ICggdW5zaWduZWQgY2hhciApIDB4MTY7DQorCS8qIFVzZSB0aGUgaW50ZXJuYWwgMTVLIGNsb2NrLiAqLw0KKwlPU01DID0gKCB1bnNpZ25lZCBjaGFyICkgMHgxNjsNCiANCi0gICAgI2lmZGVmIFJUQ0VODQotICAgICAgICB7DQotICAgICAgICAgICAgLyogU3VwcGx5IHRoZSBpbnRlcnZhbCB0aW1lciBjbG9jay4gKi8NCi0gICAgICAgICAgICBSVENFTiA9ICggdW5zaWduZWQgY2hhciApIDFVOw0KKwkjaWZkZWYgUlRDRU4NCisJew0KKwkJLyogU3VwcGx5IHRoZSBpbnRlcnZhbCB0aW1lciBjbG9jay4gKi8NCisJCVJUQ0VOID0gKCB1bnNpZ25lZCBjaGFyICkgMVU7DQogDQotICAgICAgICAgICAgLyogRGlzYWJsZSBJTlRJVCBpbnRlcnJ1cHQuICovDQotICAgICAgICAgICAgSVRNSyA9ICggdW5zaWduZWQgY2hhciApIDE7DQorCQkvKiBEaXNhYmxlIElOVElUIGludGVycnVwdC4gKi8NCisJCUlUTUsgPSAoIHVuc2lnbmVkIGNoYXIgKSAxOw0KIA0KLSAgICAgICAgICAgIC8qIERpc2FibGUgSVRNQyBvcGVyYXRpb24uICovDQotICAgICAgICAgICAgSVRNQyA9ICggdW5zaWduZWQgY2hhciApIDB4MDAwMDsNCisJCS8qIERpc2FibGUgSVRNQyBvcGVyYXRpb24uICovDQorCQlJVE1DID0gKCB1bnNpZ25lZCBjaGFyICkgMHgwMDAwOw0KIA0KLSAgICAgICAgICAgIC8qIENsZWFyIElOSVQgaW50ZXJydXB0LiAqLw0KLSAgICAgICAgICAgIElUSUYgPSAoIHVuc2lnbmVkIGNoYXIgKSAwOw0KKwkJLyogQ2xlYXIgSU5JVCBpbnRlcnJ1cHQuICovDQorCQlJVElGID0gKCB1bnNpZ25lZCBjaGFyICkgMDsNCiANCi0gICAgICAgICAgICAvKiBTZXQgaW50ZXJ2YWwgYW5kIGVuYWJsZSBpbnRlcnJ1cHQgb3BlcmF0aW9uLiAqLw0KLSAgICAgICAgICAgIElUTUMgPSB1c0NvbXBhcmVNYXRjaCB8IDB4ODAwMFU7DQorCQkvKiBTZXQgaW50ZXJ2YWwgYW5kIGVuYWJsZSBpbnRlcnJ1cHQgb3BlcmF0aW9uLiAqLw0KKwkJSVRNQyA9IHVzQ29tcGFyZU1hdGNoIHwgMHg4MDAwVTsNCiANCi0gICAgICAgICAgICAvKiBFbmFibGUgSU5USVQgaW50ZXJydXB0LiAqLw0KLSAgICAgICAgICAgIElUTUsgPSAoIHVuc2lnbmVkIGNoYXIgKSAwOw0KLSAgICAgICAgfQ0KLSAgICAjZW5kaWYgLyogaWZkZWYgUlRDRU4gKi8NCisJCS8qIEVuYWJsZSBJTlRJVCBpbnRlcnJ1cHQuICovDQorCQlJVE1LID0gKCB1bnNpZ25lZCBjaGFyICkgMDsNCisJfQ0KKwkjZW5kaWYNCiANCi0gICAgI2lmZGVmIFRNS0FFTg0KLSAgICAgICAgew0KLSAgICAgICAgICAgIC8qIFN1cHBseSB0aGUgaW50ZXJ2YWwgdGltZXIgY2xvY2suICovDQotICAgICAgICAgICAgVE1LQUVOID0gKCB1bnNpZ25lZCBjaGFyICkgMVU7DQorCSNpZmRlZiBUTUtBRU4NCisJew0KKwkJLyogU3VwcGx5IHRoZSBpbnRlcnZhbCB0aW1lciBjbG9jay4gKi8NCisJCVRNS0FFTiA9ICggdW5zaWduZWQgY2hhciApIDFVOw0KIA0KLSAgICAgICAgICAgIC8qIERpc2FibGUgSU5USVQgaW50ZXJydXB0LiAqLw0KLSAgICAgICAgICAgIFRNS0FNSyA9ICggdW5zaWduZWQgY2hhciApIDE7DQorCQkvKiBEaXNhYmxlIElOVElUIGludGVycnVwdC4gKi8NCisJCVRNS0FNSyA9ICggdW5zaWduZWQgY2hhciApIDE7DQogDQotICAgICAgICAgICAgLyogRGlzYWJsZSBJVE1DIG9wZXJhdGlvbi4gKi8NCi0gICAgICAgICAgICBJVE1DID0gKCB1bnNpZ25lZCBjaGFyICkgMHgwMDAwOw0KKwkJLyogRGlzYWJsZSBJVE1DIG9wZXJhdGlvbi4gKi8NCisJCUlUTUMgPSAoIHVuc2lnbmVkIGNoYXIgKSAweDAwMDA7DQogDQotICAgICAgICAgICAgLyogQ2xlYXIgSU5JVCBpbnRlcnJ1cHQuICovDQotICAgICAgICAgICAgVE1LQUlGID0gKCB1bnNpZ25lZCBjaGFyICkgMDsNCisJCS8qIENsZWFyIElOSVQgaW50ZXJydXB0LiAqLw0KKwkJVE1LQUlGID0gKCB1bnNpZ25lZCBjaGFyICkgMDsNCiANCi0gICAgICAgICAgICAvKiBTZXQgaW50ZXJ2YWwgYW5kIGVuYWJsZSBpbnRlcnJ1cHQgb3BlcmF0aW9uLiAqLw0KLSAgICAgICAgICAgIElUTUMgPSB1c0NvbXBhcmVNYXRjaCB8IDB4ODAwMFU7DQorCQkvKiBTZXQgaW50ZXJ2YWwgYW5kIGVuYWJsZSBpbnRlcnJ1cHQgb3BlcmF0aW9uLiAqLw0KKwkJSVRNQyA9IHVzQ29tcGFyZU1hdGNoIHwgMHg4MDAwVTsNCiANCi0gICAgICAgICAgICAvKiBFbmFibGUgSU5USVQgaW50ZXJydXB0LiAqLw0KLSAgICAgICAgICAgIFRNS0FNSyA9ICggdW5zaWduZWQgY2hhciApIDA7DQotICAgICAgICB9DQotICAgICNlbmRpZiAvKiBpZmRlZiBUTUtBRU4gKi8NCisJCS8qIEVuYWJsZSBJTlRJVCBpbnRlcnJ1cHQuICovDQorCQlUTUtBTUsgPSAoIHVuc2lnbmVkIGNoYXIgKSAwOw0KKwl9DQorCSNlbmRpZg0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9HQ0MvUkw3OC9wb3J0bWFjcm8uaCBiL3BvcnRhYmxlL0dDQy9STDc4L3BvcnRtYWNyby5oCmluZGV4IDRjNTk1ODguLmRhMmNlNTMgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0dDQy9STDc4L3BvcnRtYWNyby5oCisrKyBiL3BvcnRhYmxlL0dDQy9STDc4L3BvcnRtYWNyby5oCkBAIC00MCw4MSArNDAsODIgQEAKIA0KIC8qIFR5cGUgZGVmaW5pdGlvbnMuICovDQogDQotI2RlZmluZSBwb3J0Q0hBUiAgICAgICAgICAgICAgICAgY2hhcg0KLSNkZWZpbmUgcG9ydEZMT0FUICAgICAgICAgICAgICAgIGZsb2F0DQotI2RlZmluZSBwb3J0RE9VQkxFICAgICAgICAgICAgICAgZG91YmxlDQotI2RlZmluZSBwb3J0TE9ORyAgICAgICAgICAgICAgICAgbG9uZw0KLSNkZWZpbmUgcG9ydFNIT1JUICAgICAgICAgICAgICAgIHNob3J0DQotI2RlZmluZSBwb3J0U1RBQ0tfVFlQRSAgICAgICAgICAgdWludDE2X3QNCi0jZGVmaW5lIHBvcnRCQVNFX1RZUEUgICAgICAgICAgICBzaG9ydA0KLSNkZWZpbmUgcG9ydFBPSU5URVJfU0laRV9UWVBFICAgIHVpbnQxNl90DQorI2RlZmluZSBwb3J0Q0hBUiAgICAgICAgY2hhcg0KKyNkZWZpbmUgcG9ydEZMT0FUICAgICAgIGZsb2F0DQorI2RlZmluZSBwb3J0RE9VQkxFICAgICAgZG91YmxlDQorI2RlZmluZSBwb3J0TE9ORyAgICAgICAgbG9uZw0KKyNkZWZpbmUgcG9ydFNIT1JUICAgICAgIHNob3J0DQorI2RlZmluZSBwb3J0U1RBQ0tfVFlQRQl1aW50MTZfdA0KKyNkZWZpbmUgcG9ydEJBU0VfVFlQRSAgIHNob3J0DQorI2RlZmluZSBwb3J0UE9JTlRFUl9TSVpFX1RZUEUgdWludDE2X3QNCiANCi10eXBlZGVmIHBvcnRTVEFDS19UWVBFICAgU3RhY2tUeXBlX3Q7DQotdHlwZWRlZiBzaG9ydCAgICAgICAgICAgIEJhc2VUeXBlX3Q7DQotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgIFVCYXNlVHlwZV90Ow0KK3R5cGVkZWYgcG9ydFNUQUNLX1RZUEUgU3RhY2tUeXBlX3Q7DQordHlwZWRlZiBzaG9ydCBCYXNlVHlwZV90Ow0KK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgVUJhc2VUeXBlX3Q7DQogDQotI2lmICggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCi0gICAgdHlwZWRlZiB1aW50MTZfdCAgICAgVGlja1R5cGVfdDsNCi0gICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICggVGlja1R5cGVfdCApIDB4ZmZmZg0KKyNpZiggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCisJdHlwZWRlZiB1aW50MTZfdCBUaWNrVHlwZV90Ow0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQogI2Vsc2UNCi0gICAgdHlwZWRlZiB1aW50MzJfdCAgICAgVGlja1R5cGVfdDsNCi0gICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTA0KKwl0eXBlZGVmIHVpbnQzMl90IFRpY2tUeXBlX3Q7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwNCiAjZW5kaWYNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBJbnRlcnJ1cHQgY29udHJvbCBtYWNyb3MuICovDQotI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgICAgX19hc20gdm9sYXRpbGUgKCAiREkiICkNCi0jZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpICAgICBfX2FzbSB2b2xhdGlsZSAoICJFSSIgKQ0KKyNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpIF9fYXNtIHZvbGF0aWxlICggIkRJIiApDQorI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKQkgX19hc20gdm9sYXRpbGUgKCAiRUkiICkNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBDcml0aWNhbCBzZWN0aW9uIGNvbnRyb2wgbWFjcm9zLiAqLw0KLSNkZWZpbmUgcG9ydE5PX0NSSVRJQ0FMX1NFQ1RJT05fTkVTVElORyAgICAoICggdW5zaWduZWQgc2hvcnQgKSAwICkNCisjZGVmaW5lIHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkcJCSggKCB1bnNpZ25lZCBzaG9ydCApIDAgKQ0KIA0KLSNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBleHRlcm4gdm9sYXRpbGUgdWludDE2X3QgdXNDcml0aWNhbE5lc3Rpbmc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgLyogTm93IGludGVycnVwdHMgYXJlIGRpc2FibGVkIHVsQ3JpdGljYWxOZXN0aW5nIGNhbiBiZSBhY2Nlc3NlZCAqLyAgICAgIFwNCi0gICAgICAgIC8qIGRpcmVjdGx5LiAgSW5jcmVtZW50IHVsQ3JpdGljYWxOZXN0aW5nIHRvIGtlZXAgYSBjb3VudCBvZiBob3cgbWFueSAqLyBcDQotICAgICAgICAvKiB0aW1lcyBwb3J0RU5URVJfQ1JJVElDQUwoKSBoYXMgYmVlbiBjYWxsZWQuICovICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgdXNDcml0aWNhbE5lc3RpbmcrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgfQ0KKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkJCQkJCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCitleHRlcm4gdm9sYXRpbGUgdWludDE2X3QgdXNDcml0aWNhbE5lc3Rpbmc7CQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOwkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIE5vdyBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB1bENyaXRpY2FsTmVzdGluZyBjYW4gYmUgYWNjZXNzZWQgKi8JCQlcDQorCS8qIGRpcmVjdGx5LiAgSW5jcmVtZW50IHVsQ3JpdGljYWxOZXN0aW5nIHRvIGtlZXAgYSBjb3VudCBvZiBob3cgbWFueSAqLwlcDQorCS8qIHRpbWVzIHBvcnRFTlRFUl9DUklUSUNBTCgpIGhhcyBiZWVuIGNhbGxlZC4gKi8JCQkJCQkJXA0KKwl1c0NyaXRpY2FsTmVzdGluZysrOwkJCQkJCQkJCQkJCQkJXA0KK30NCiANCi0jZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgZXh0ZXJuIHZvbGF0aWxlIHVpbnQxNl90IHVzQ3JpdGljYWxOZXN0aW5nOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBpZiggdXNDcml0aWNhbE5lc3RpbmcgPiBwb3J0Tk9fQ1JJVElDQUxfU0VDVElPTl9ORVNUSU5HICkgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBEZWNyZW1lbnQgdGhlIG5lc3RpbmcgY291bnQgYXMgd2UgYXJlIGxlYXZpbmcgYSBjcml0aWNhbCBzZWN0aW9uLiAqLyBcDQotICAgICAgICAgICAgdXNDcml0aWNhbE5lc3RpbmctLTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBJZiB0aGUgbmVzdGluZyBsZXZlbCBoYXMgcmVhY2hlZCB6ZXJvIHRoZW4gaW50ZXJydXB0cyBzaG91bGQgYmUgKi8gICBcDQotICAgICAgICAgICAgLyogcmUtZW5hYmxlZC4gKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIGlmKCB1c0NyaXRpY2FsTmVzdGluZyA9PSBwb3J0Tk9fQ1JJVElDQUxfU0VDVElPTl9ORVNUSU5HICkgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIH0NCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkJCQkJCQkJCQkJCQkJCVwNCit7CQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorZXh0ZXJuIHZvbGF0aWxlIHVpbnQxNl90IHVzQ3JpdGljYWxOZXN0aW5nOwkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCWlmKCB1c0NyaXRpY2FsTmVzdGluZyA+IHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkcgKQkJCQkJXA0KKwl7CQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCS8qIERlY3JlbWVudCB0aGUgbmVzdGluZyBjb3VudCBhcyB3ZSBhcmUgbGVhdmluZyBhIGNyaXRpY2FsIHNlY3Rpb24uICovCVwNCisJCXVzQ3JpdGljYWxOZXN0aW5nLS07CQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCS8qIElmIHRoZSBuZXN0aW5nIGxldmVsIGhhcyByZWFjaGVkIHplcm8gdGhlbiBpbnRlcnJ1cHRzIHNob3VsZCBiZSAqLwlcDQorCQkvKiByZS1lbmFibGVkLiAqLwkJCQkJCQkJCQkJCQkJXA0KKwkJaWYoIHVzQ3JpdGljYWxOZXN0aW5nID09IHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkcgKQkJCQlcDQorCQl7CQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCXBvcnRFTkFCTEVfSU5URVJSVVBUUygpOwkJCQkJCQkJCQkJXA0KKwkJfQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJfQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFRhc2sgdXRpbGl0aWVzLiAqLw0KLSNkZWZpbmUgcG9ydFlJRUxEKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2FzbSB2b2xhdGlsZSAoICJCUksiICkNCi0jZGVmaW5lIHBvcnRZSUVMRF9GUk9NX0lTUiggeEhpZ2hlclByaW9yaXR5VGFza1dva2VuICkgICAgaWYoIHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiApIHZUYXNrU3dpdGNoQ29udGV4dCgpDQotI2RlZmluZSBwb3J0Tk9QKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXNtIHZvbGF0aWxlICggIk5PUCIgKQ0KKyNkZWZpbmUgcG9ydFlJRUxEKCkgCV9fYXNtIHZvbGF0aWxlICggIkJSSyIgKQ0KKyNkZWZpbmUgcG9ydFlJRUxEX0ZST01fSVNSKCB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4gKSBpZiggeEhpZ2hlclByaW9yaXR5VGFza1dva2VuICkgdlRhc2tTd2l0Y2hDb250ZXh0KCkNCisjZGVmaW5lIHBvcnROT1AoKQlfX2FzbSB2b2xhdGlsZSAoICJOT1AiICkNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBIYXJkd3dhcmUgc3BlY2lmaWNzLiAqLw0KLSNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UICAgIDINCi0jZGVmaW5lIHBvcnRTVEFDS19HUk9XVEggICAgICAoIC0xICkNCi0jZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUyAgICAoICggVGlja1R5cGVfdCApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UCTINCisjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEgJKCAtMSApDQorI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMJKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBUYXNrIGZ1bmN0aW9uIG1hY3JvcyBhcyBkZXNjcmliZWQgb24gdGhlIEZyZWVSVE9TLm9yZyBXRUIgc2l0ZS4gKi8NCi0jZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCi0jZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgICAgICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQogDQogI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvR0NDL1JYMTAwL3BvcnQuYyBiL3BvcnRhYmxlL0dDQy9SWDEwMC9wb3J0LmMKaW5kZXggMWM2ZDE2Yy4uYTc3ZWZiYyAxMDA2NDQKLS0tIGEvcG9ydGFibGUvR0NDL1JYMTAwL3BvcnQuYworKysgYi9wb3J0YWJsZS9HQ0MvUlgxMDAvcG9ydC5jCkBAIC0yNiw4ICsyNiw4IEBACiAgKi8NCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgU0gyQSBwb3J0Lg0KLSotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgU0gyQSBwb3J0Lg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogU3RhbmRhcmQgQyBpbmNsdWRlcy4gKi8NCiAjaW5jbHVkZSAibGltaXRzLmgiDQpAQCAtNDUsMzYgKzQ1LDM2IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBUYXNrcyBzaG91bGQgc3RhcnQgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQgYW5kIGluIFN1cGVydmlzb3IgbW9kZSwgdGhlcmVmb3JlDQotICogUFNXIGlzIHNldCB3aXRoIFUgYW5kIEkgc2V0LCBhbmQgUE0gYW5kIElQTCBjbGVhci4gKi8NCi0jZGVmaW5lIHBvcnRJTklUSUFMX1BTVyAgICAoICggU3RhY2tUeXBlX3QgKSAweDAwMDMwMDAwICkNCitQU1cgaXMgc2V0IHdpdGggVSBhbmQgSSBzZXQsIGFuZCBQTSBhbmQgSVBMIGNsZWFyLiAqLw0KKyNkZWZpbmUgcG9ydElOSVRJQUxfUFNXCSAoICggU3RhY2tUeXBlX3QgKSAweDAwMDMwMDAwICkNCiANCiAvKiBUaGUgcGVyaXBoZXJhbCBjbG9jayBpcyBkaXZpZGVkIGJ5IHRoaXMgdmFsdWUgYmVmb3JlIGJlaW5nIHN1cHBseWluZyB0aGUNCi0gKiBDTVQuICovDQorQ01ULiAqLw0KICNpZiAoIGNvbmZpZ1VTRV9USUNLTEVTU19JRExFID09IDAgKQ0KLSAgICAvKiBJZiB0aWNrbGVzcyBpZGxlIGlzIG5vdCB1c2VkIHRoZW4gdGhlIGRpdmlzb3IgY2FuIGJlIGZpeGVkLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRDTE9DS19ESVZJU09SICAgIDhVTA0KKwkvKiBJZiB0aWNrbGVzcyBpZGxlIGlzIG5vdCB1c2VkIHRoZW4gdGhlIGRpdmlzb3IgY2FuIGJlIGZpeGVkLiAqLw0KKwkjZGVmaW5lIHBvcnRDTE9DS19ESVZJU09SCThVTA0KICNlbGlmICggY29uZmlnUEVSSVBIRVJBTF9DTE9DS19IWiA+PSAxMjAwMDAwMCApDQotICAgICNkZWZpbmUgcG9ydENMT0NLX0RJVklTT1IgICAgNTEyVUwNCisJI2RlZmluZSBwb3J0Q0xPQ0tfRElWSVNPUgk1MTJVTA0KICNlbGlmICggY29uZmlnUEVSSVBIRVJBTF9DTE9DS19IWiA+PSA2MDAwMDAwICkNCi0gICAgI2RlZmluZSBwb3J0Q0xPQ0tfRElWSVNPUiAgICAxMjhVTA0KKwkjZGVmaW5lIHBvcnRDTE9DS19ESVZJU09SCTEyOFVMDQogI2VsaWYgKCBjb25maWdQRVJJUEhFUkFMX0NMT0NLX0haID49IDEwMDAwMDAgKQ0KLSAgICAjZGVmaW5lIHBvcnRDTE9DS19ESVZJU09SICAgIDMyVUwNCisJI2RlZmluZSBwb3J0Q0xPQ0tfRElWSVNPUgkzMlVMDQogI2Vsc2UNCi0gICAgI2RlZmluZSBwb3J0Q0xPQ0tfRElWSVNPUiAgICA4VUwNCisJI2RlZmluZSBwb3J0Q0xPQ0tfRElWSVNPUgk4VUwNCiAjZW5kaWYNCiANCiAvKiBUaGVzZSBtYWNyb3MgYWxsb3cgYSBjcml0aWNhbCBzZWN0aW9uIHRvIGJlIGFkZGVkIGFyb3VuZCB0aGUgY2FsbCB0bw0KLSAqIHhUYXNrSW5jcmVtZW50VGljaygpLCB3aGljaCBpcyBvbmx5IGV2ZXIgY2FsbGVkIGZyb20gaW50ZXJydXB0cyBhdCB0aGUga2VybmVsDQotICogcHJpb3JpdHkgLSBpZSBhIGtub3duIHByaW9yaXR5LiAgVGhlcmVmb3JlIHRoZXNlIGxvY2FsIG1hY3JvcyBhcmUgYSBzbGlnaHQNCi0gKiBvcHRpbWlzYXRpb24gY29tcGFyZWQgdG8gY2FsbGluZyB0aGUgZ2xvYmFsIFNFVC9DTEVBUl9JTlRFUlJVUFRfTUFTSyBtYWNyb3MsDQotICogd2hpY2ggd291bGQgcmVxdWlyZSB0aGUgb2xkIElQTCB0byBiZSByZWFkIGZpcnN0IGFuZCBzdG9yZWQgaW4gYSBsb2NhbCB2YXJpYWJsZS4gKi8NCi0jZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFNfRlJPTV9LRVJORUxfSVNSKCkgICAgX19hc20gdm9sYXRpbGUgKCAiTVZUSVBMCSUwIjo6ImkiICggY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkgKQ0KLSNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTX0ZST01fS0VSTkVMX0lTUigpICAgICBfX2FzbSB2b2xhdGlsZSAoICJNVlRJUEwJJTAiOjoiaSIgKCBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZICkgKQ0KK3hUYXNrSW5jcmVtZW50VGljaygpLCB3aGljaCBpcyBvbmx5IGV2ZXIgY2FsbGVkIGZyb20gaW50ZXJydXB0cyBhdCB0aGUga2VybmVsDQorcHJpb3JpdHkgLSBpZSBhIGtub3duIHByaW9yaXR5LiAgVGhlcmVmb3JlIHRoZXNlIGxvY2FsIG1hY3JvcyBhcmUgYSBzbGlnaHQNCitvcHRpbWlzYXRpb24gY29tcGFyZWQgdG8gY2FsbGluZyB0aGUgZ2xvYmFsIFNFVC9DTEVBUl9JTlRFUlJVUFRfTUFTSyBtYWNyb3MsDQord2hpY2ggd291bGQgcmVxdWlyZSB0aGUgb2xkIElQTCB0byBiZSByZWFkIGZpcnN0IGFuZCBzdG9yZWQgaW4gYSBsb2NhbCB2YXJpYWJsZS4gKi8NCisjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFNfRlJPTV9LRVJORUxfSVNSKCkgCV9fYXNtIHZvbGF0aWxlICggIk1WVElQTAklMCIgOjoiaSIoY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZKSApDQorI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFNfRlJPTV9LRVJORUxfSVNSKCkgCV9fYXNtIHZvbGF0aWxlICggIk1WVElQTAklMCIgOjoiaSIoY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWSkgKQ0KIA0KIC8qIEtleXMgcmVxdWlyZWQgdG8gbG9jayBhbmQgdW5sb2NrIGFjY2VzcyB0byBjZXJ0YWluIHN5c3RlbSByZWdpc3RlcnMNCi0gKiByZXNwZWN0aXZlbHkuICovDQotI2RlZmluZSBwb3J0VU5MT0NLX0tFWSAgICAweEE1MEINCi0jZGVmaW5lIHBvcnRMT0NLX0tFWSAgICAgIDB4QTUwMA0KK3Jlc3BlY3RpdmVseS4gKi8NCisjZGVmaW5lIHBvcnRVTkxPQ0tfS0VZCQkweEE1MEINCisjZGVmaW5lIHBvcnRMT0NLX0tFWQkJMHhBNTAwDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQpAQCAtODIsMTkgKzgyLDE5IEBACiAgKiBGdW5jdGlvbiB0byBzdGFydCB0aGUgZmlyc3QgdGFzayBleGVjdXRpbmcgLSB3cml0dGVuIGluIGFzbSBjb2RlIGFzIGRpcmVjdA0KICAqIGFjY2VzcyB0byByZWdpc3RlcnMgaXMgcmVxdWlyZWQuDQogICovDQotc3RhdGljIHZvaWQgcHJ2U3RhcnRGaXJzdFRhc2soIHZvaWQgKSBfX2F0dHJpYnV0ZV9fKCAoIG5ha2VkICkgKTsNCitzdGF0aWMgdm9pZCBwcnZTdGFydEZpcnN0VGFzayggdm9pZCApIF9fYXR0cmlidXRlX18oKG5ha2VkKSk7DQogDQogLyoNCiAgKiBTb2Z0d2FyZSBpbnRlcnJ1cHQgaGFuZGxlci4gIFBlcmZvcm1zIHRoZSBhY3R1YWwgY29udGV4dCBzd2l0Y2ggKHNhdmluZyBhbmQNCiAgKiByZXN0b3Jpbmcgb2YgcmVnaXN0ZXJzKS4gIFdyaXR0ZW4gaW4gYXNtIGNvZGUgYXMgZGlyZWN0IHJlZ2lzdGVyIGFjY2VzcyBpcw0KICAqIHJlcXVpcmVkLg0KICAqLw0KLXZvaWQgdlBvcnRTb2Z0d2FyZUludGVycnVwdElTUiggdm9pZCApIF9fYXR0cmlidXRlX18oICggbmFrZWQgKSApOw0KK3ZvaWQgdlBvcnRTb2Z0d2FyZUludGVycnVwdElTUiggdm9pZCApIF9fYXR0cmlidXRlX18oKG5ha2VkKSk7DQogDQogLyoNCiAgKiBUaGUgdGljayBpbnRlcnJ1cHQgaGFuZGxlci4NCiAgKi8NCi12b2lkIHZQb3J0VGlja0lTUiggdm9pZCApIF9fYXR0cmlidXRlX18oICggaW50ZXJydXB0ICkgKTsNCit2b2lkIHZQb3J0VGlja0lTUiggdm9pZCApIF9fYXR0cmlidXRlX18oKGludGVycnVwdCkpOw0KIA0KIC8qDQogICogU2V0cyB1cCB0aGUgcGVyaW9kaWMgSVNSIHVzZWQgZm9yIHRoZSBSVE9TIHRpY2sgdXNpbmcgdGhlIENNVC4NCkBAIC0xMDQsMTAgKzEwNCw5IEBACiAgKi8NCiBzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICk7DQogI2lmbmRlZiBjb25maWdTRVRVUF9USUNLX0lOVEVSUlVQVA0KLQ0KLS8qIFRoZSB1c2VyIGhhcyBub3QgcHJvdmlkZWQgdGhlaXIgb3duIHRpY2sgaW50ZXJydXB0IGNvbmZpZ3VyYXRpb24gc28gdXNlDQotICogdGhlIGRlZmluaXRpb24gaW4gdGhpcyBmaWxlICh3aGljaCB1c2VzIHRoZSBpbnRlcnZhbCB0aW1lcikuICovDQotICAgICNkZWZpbmUgY29uZmlnU0VUVVBfVElDS19JTlRFUlJVUFQoKSAgICBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCkNCisJLyogVGhlIHVzZXIgaGFzIG5vdCBwcm92aWRlZCB0aGVpciBvd24gdGljayBpbnRlcnJ1cHQgY29uZmlndXJhdGlvbiBzbyB1c2UNCisJdGhlIGRlZmluaXRpb24gaW4gdGhpcyBmaWxlICh3aGljaCB1c2VzIHRoZSBpbnRlcnZhbCB0aW1lcikuICovDQorCSNkZWZpbmUgY29uZmlnU0VUVVBfVElDS19JTlRFUlJVUFQoKSBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCkNCiAjZW5kaWYgLyogY29uZmlnU0VUVVBfVElDS19JTlRFUlJVUFQgKi8NCiANCiAvKg0KQEAgLTExNiw1NzIgKzExNSw1NjAgQEAKICAqIGluc3RydWN0aW9uLg0KICAqLw0KICNpZiBjb25maWdVU0VfVElDS0xFU1NfSURMRSA9PSAxDQotICAgIHN0YXRpYyB2b2lkIHBydlNsZWVwKCBUaWNrVHlwZV90IHhFeHBlY3RlZElkbGVUaW1lICk7DQorCXN0YXRpYyB2b2lkIHBydlNsZWVwKCBUaWNrVHlwZV90IHhFeHBlY3RlZElkbGVUaW1lICk7DQogI2VuZGlmIC8qIGNvbmZpZ1VTRV9USUNLTEVTU19JRExFICovDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVXNlZCBpbiB0aGUgY29udGV4dCBzYXZlIGFuZCByZXN0b3JlIGNvZGUuICovDQotZXh0ZXJuIHZvaWQgKiBweEN1cnJlbnRUQ0I7DQorZXh0ZXJuIHZvaWQgKnB4Q3VycmVudFRDQjsNCiANCiAvKiBDYWxjdWxhdGUgaG93IG1hbnkgY2xvY2sgaW5jcmVtZW50cyBtYWtlIHVwIGEgc2luZ2xlIHRpY2sgcGVyaW9kLiAqLw0KIHN0YXRpYyBjb25zdCB1aW50MzJfdCB1bE1hdGNoVmFsdWVGb3JPbmVUaWNrID0gKCAoIGNvbmZpZ1BFUklQSEVSQUxfQ0xPQ0tfSFogLyBwb3J0Q0xPQ0tfRElWSVNPUiApIC8gY29uZmlnVElDS19SQVRFX0haICk7DQogDQogI2lmIGNvbmZpZ1VTRV9USUNLTEVTU19JRExFID09IDENCiANCi0vKiBIb2xkcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgdGlja3MgdGhhdCBjYW4gYmUgc3VwcHJlc3NlZCAtIHdoaWNoIGlzDQotICogYmFzaWNhbGx5IGhvdyBmYXIgaW50byB0aGUgZnV0dXJlIGFuIGludGVycnVwdCBjYW4gYmUgZ2VuZXJhdGVkLiBTZXQNCi0gKiBkdXJpbmcgaW5pdGlhbGlzYXRpb24uICBUaGlzIGlzIHRoZSBtYXhpbXVtIHBvc3NpYmxlIHZhbHVlIHRoYXQgdGhlDQotICogY29tcGFyZSBtYXRjaCByZWdpc3RlciBjYW4gaG9sZCBkaXZpZGVkIGJ5IHVsTWF0Y2hWYWx1ZUZvck9uZVRpY2suICovDQotICAgIHN0YXRpYyBjb25zdCBUaWNrVHlwZV90IHhNYXhpbXVtUG9zc2libGVTdXBwcmVzc2VkVGlja3MgPSBVU0hSVF9NQVggLyAoICggY29uZmlnUEVSSVBIRVJBTF9DTE9DS19IWiAvIHBvcnRDTE9DS19ESVZJU09SICkgLyBjb25maWdUSUNLX1JBVEVfSFogKTsNCisJLyogSG9sZHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHRpY2tzIHRoYXQgY2FuIGJlIHN1cHByZXNzZWQgLSB3aGljaCBpcw0KKwliYXNpY2FsbHkgaG93IGZhciBpbnRvIHRoZSBmdXR1cmUgYW4gaW50ZXJydXB0IGNhbiBiZSBnZW5lcmF0ZWQuIFNldA0KKwlkdXJpbmcgaW5pdGlhbGlzYXRpb24uICBUaGlzIGlzIHRoZSBtYXhpbXVtIHBvc3NpYmxlIHZhbHVlIHRoYXQgdGhlDQorCWNvbXBhcmUgbWF0Y2ggcmVnaXN0ZXIgY2FuIGhvbGQgZGl2aWRlZCBieSB1bE1hdGNoVmFsdWVGb3JPbmVUaWNrLiAqLw0KKwlzdGF0aWMgY29uc3QgVGlja1R5cGVfdCB4TWF4aW11bVBvc3NpYmxlU3VwcHJlc3NlZFRpY2tzID0gVVNIUlRfTUFYIC8gKCAoIGNvbmZpZ1BFUklQSEVSQUxfQ0xPQ0tfSFogLyBwb3J0Q0xPQ0tfRElWSVNPUiApIC8gY29uZmlnVElDS19SQVRFX0haICk7DQogDQotLyogRmxhZyBzZXQgZnJvbSB0aGUgdGljayBpbnRlcnJ1cHQgdG8gYWxsb3cgdGhlIHNsZWVwIHByb2Nlc3NpbmcgdG8ga25vdyBpZg0KLSAqIHNsZWVwIG1vZGUgd2FzIGV4aXRlZCBiZWNhdXNlIG9mIGEgdGljayBpbnRlcnJ1cHQsIG9yIGFuIGludGVycnVwdA0KLSAqIGdlbmVyYXRlZCBieSBzb21ldGhpbmcgZWxzZS4gKi8NCi0gICAgc3RhdGljIHZvbGF0aWxlIHVpbnQzMl90IHVsVGlja0ZsYWcgPSBwZEZBTFNFOw0KKwkvKiBGbGFnIHNldCBmcm9tIHRoZSB0aWNrIGludGVycnVwdCB0byBhbGxvdyB0aGUgc2xlZXAgcHJvY2Vzc2luZyB0byBrbm93IGlmDQorCXNsZWVwIG1vZGUgd2FzIGV4aXRlZCBiZWNhdXNlIG9mIGEgdGljayBpbnRlcnJ1cHQsIG9yIGFuIGludGVycnVwdA0KKwlnZW5lcmF0ZWQgYnkgc29tZXRoaW5nIGVsc2UuICovDQorCXN0YXRpYyB2b2xhdGlsZSB1aW50MzJfdCB1bFRpY2tGbGFnID0gcGRGQUxTRTsNCiANCi0vKiBUaGUgQ01UIGNvdW50ZXIgaXMgc3RvcHBlZCB0ZW1wb3JhcmlseSBlYWNoIHRpbWUgaXQgaXMgcmUtcHJvZ3JhbW1lZC4NCi0gKiBUaGUgZm9sbG93aW5nIGNvbnN0YW50IG9mZnNldHMgdGhlIENNVCBjb3VudGVyIG1hdGNoIHZhbHVlIGJ5IHRoZSBudW1iZXIgb2YNCi0gKiBDTVQJY291bnRzIHRoYXQgd291bGQgdHlwaWNhbGx5IGJlIG1pc3NlZCB3aGlsZSB0aGUgY291bnRlciB3YXMgc3RvcHBlZCB0bw0KLSAqIGNvbXBlbnNhdGUgZm9yIHRoZSBsb3N0IHRpbWUuICBUaGUgbGFyZ2UgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBkaXZpZGVkIENNVA0KLSAqIGNsb2NrIGFuZCB0aGUgQ1BVIGNsb2NrIG1lYW5zIGl0IGlzIGxpa2VseSB1bFN0b3BwZWRUaW1lckNvbXBlbnNhdGlvbiB3aWxsDQotICogZXF1YWwgemVybyAtIGFuZCBiZSBvcHRpbWlzZWQgYXdheS4gKi8NCi0gICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IHVsU3RvcHBlZFRpbWVyQ29tcGVuc2F0aW9uID0gMTAwVUwgLyAoIGNvbmZpZ0NQVV9DTE9DS19IWiAvICggY29uZmlnUEVSSVBIRVJBTF9DTE9DS19IWiAvIHBvcnRDTE9DS19ESVZJU09SICkgKTsNCisJLyogVGhlIENNVCBjb3VudGVyIGlzIHN0b3BwZWQgdGVtcG9yYXJpbHkgZWFjaCB0aW1lIGl0IGlzIHJlLXByb2dyYW1tZWQuDQorCVRoZSBmb2xsb3dpbmcgY29uc3RhbnQgb2Zmc2V0cyB0aGUgQ01UIGNvdW50ZXIgbWF0Y2ggdmFsdWUgYnkgdGhlIG51bWJlciBvZg0KKwlDTVQJY291bnRzIHRoYXQgd291bGQgdHlwaWNhbGx5IGJlIG1pc3NlZCB3aGlsZSB0aGUgY291bnRlciB3YXMgc3RvcHBlZCB0bw0KKwljb21wZW5zYXRlIGZvciB0aGUgbG9zdCB0aW1lLiAgVGhlIGxhcmdlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgZGl2aWRlZCBDTVQNCisJY2xvY2sgYW5kIHRoZSBDUFUgY2xvY2sgbWVhbnMgaXQgaXMgbGlrZWx5IHVsU3RvcHBlZFRpbWVyQ29tcGVuc2F0aW9uIHdpbGwNCisJZXF1YWwgemVybyAtIGFuZCBiZSBvcHRpbWlzZWQgYXdheS4gKi8NCisJc3RhdGljIGNvbnN0IHVpbnQzMl90IHVsU3RvcHBlZFRpbWVyQ29tcGVuc2F0aW9uID0gMTAwVUwgLyAoIGNvbmZpZ0NQVV9DTE9DS19IWiAvICggY29uZmlnUEVSSVBIRVJBTF9DTE9DS19IWiAvIHBvcnRDTE9DS19ESVZJU09SICkgKTsNCiANCi0jZW5kaWYgLyogaWYgY29uZmlnVVNFX1RJQ0tMRVNTX0lETEUgPT0gMSAqLw0KKyNlbmRpZg0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qDQogICogU2VlIGhlYWRlciBmaWxlIGZvciBkZXNjcmlwdGlvbi4NCiAgKi8NCi1TdGFja1R5cGVfdCAqIHB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKiBweFRvcE9mU3RhY2ssDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqIHB2UGFyYW1ldGVycyApDQorU3RhY2tUeXBlX3QgKnB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKnB4VG9wT2ZTdGFjaywgVGFza0Z1bmN0aW9uX3QgcHhDb2RlLCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KIHsNCi0gICAgLyogT2Zmc2V0IHRvIGVuZCB1cCBvbiA4IGJ5dGUgYm91bmRhcnkuICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkvKiBPZmZzZXQgdG8gZW5kIHVwIG9uIDggYnl0ZSBib3VuZGFyeS4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgIC8qIFIwIGlzIG5vdCBpbmNsdWRlZCBhcyBpdCBpcyB0aGUgc3RhY2sgcG9pbnRlci4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MDA7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMHgwMDsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSBwb3J0SU5JVElBTF9QU1c7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB4Q29kZTsNCisJLyogUjAgaXMgbm90IGluY2x1ZGVkIGFzIGl0IGlzIHRoZSBzdGFjayBwb2ludGVyLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gMHgwMDsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDAwOw0KKwlweFRvcE9mU3RhY2stLTsNCisgCSpweFRvcE9mU3RhY2sgPSBwb3J0SU5JVElBTF9QU1c7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB4Q29kZTsNCiANCi0gICAgLyogV2hlbiBkZWJ1Z2dpbmcgaXQgY2FuIGJlIHVzZWZ1bCBpZiBldmVyeSByZWdpc3RlciBpcyBzZXQgdG8gYSBrbm93bg0KLSAgICAgKiB2YWx1ZS4gIE90aGVyd2lzZSBjb2RlIHNwYWNlIGNhbiBiZSBzYXZlZCBieSBqdXN0IHNldHRpbmcgdGhlIHJlZ2lzdGVycw0KLSAgICAgKiB0aGF0IG5lZWQgdG8gYmUgc2V0LiAqLw0KLSAgICAjaWZkZWYgVVNFX0ZVTExfUkVHSVNURVJfSU5JVElBTElTQVRJT04NCi0gICAgICAgIHsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHgxMjM0NTY3ODsgLyogcjE1LiAqLw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweGFhYWFiYmJiOw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweGRkZGRkZGRkOw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweGNjY2NjY2NjOw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweGJiYmJiYmJiOw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweGFhYWFhYWFhOw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweDk5OTk5OTk5Ow0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweDg4ODg4ODg4Ow0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweDc3Nzc3Nzc3Ow0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweDY2NjY2NjY2Ow0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweDU1NTU1NTU1Ow0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweDQ0NDQ0NDQ0Ow0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweDMzMzMzMzMzOw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweDIyMjIyMjIyOw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgfQ0KLSAgICAjZWxzZSAvKiBpZmRlZiBVU0VfRlVMTF9SRUdJU1RFUl9JTklUSUFMSVNBVElPTiAqLw0KLSAgICAgICAgew0KLSAgICAgICAgICAgIC8qIExlYXZlIHNwYWNlIGZvciB0aGUgcmVnaXN0ZXJzIHRoYXQgd2lsbCBnZXQgcG9wcGVkIGZyb20gdGhlIHN0YWNrDQotICAgICAgICAgICAgICogd2hlbiB0aGUgdGFzayBmaXJzdCBzdGFydHMgZXhlY3V0aW5nLiAqLw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjayAtPSAxNTsNCi0gICAgICAgIH0NCi0gICAgI2VuZGlmIC8qIGlmZGVmIFVTRV9GVUxMX1JFR0lTVEVSX0lOSVRJQUxJU0FUSU9OICovDQorCS8qIFdoZW4gZGVidWdnaW5nIGl0IGNhbiBiZSB1c2VmdWwgaWYgZXZlcnkgcmVnaXN0ZXIgaXMgc2V0IHRvIGEga25vd24NCisJdmFsdWUuICBPdGhlcndpc2UgY29kZSBzcGFjZSBjYW4gYmUgc2F2ZWQgYnkganVzdCBzZXR0aW5nIHRoZSByZWdpc3RlcnMNCisJdGhhdCBuZWVkIHRvIGJlIHNldC4gKi8NCisJI2lmZGVmIFVTRV9GVUxMX1JFR0lTVEVSX0lOSVRJQUxJU0FUSU9ODQorCXsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4MTIzNDU2Nzg7CS8qIHIxNS4gKi8NCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4YWFhYWJiYmI7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweGRkZGRkZGRkOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHhjY2NjY2NjYzsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4YmJiYmJiYmI7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweGFhYWFhYWFhOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHg5OTk5OTk5OTsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4ODg4ODg4ODg7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweDc3Nzc3Nzc3Ow0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHg2NjY2NjY2NjsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4NTU1NTU1NTU7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweDQ0NDQ0NDQ0Ow0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHgzMzMzMzMzMzsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4MjIyMjIyMjI7DQorCQlweFRvcE9mU3RhY2stLTsNCisJfQ0KKwkjZWxzZQ0KKwl7DQorCQkvKiBMZWF2ZSBzcGFjZSBmb3IgdGhlIHJlZ2lzdGVycyB0aGF0IHdpbGwgZ2V0IHBvcHBlZCBmcm9tIHRoZSBzdGFjaw0KKwkJd2hlbiB0aGUgdGFzayBmaXJzdCBzdGFydHMgZXhlY3V0aW5nLiAqLw0KKwkJcHhUb3BPZlN0YWNrIC09IDE1Ow0KKwl9DQorCSNlbmRpZg0KIA0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB2UGFyYW1ldGVyczsgLyogUjEgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAweDEyMzQ1Njc4OyAgICAgICAgICAgICAgICAgICAvKiBBY2N1bXVsYXRvci4gKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAweDg3NjU0MzIxOyAgICAgICAgICAgICAgICAgICAvKiBBY2N1bXVsYXRvci4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwdlBhcmFtZXRlcnM7IC8qIFIxICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgxMjM0NTY3ODsgLyogQWNjdW11bGF0b3IuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHg4NzY1NDMyMTsgLyogQWNjdW11bGF0b3IuICovDQogDQotICAgIHJldHVybiBweFRvcE9mU3RhY2s7DQorCXJldHVybiBweFRvcE9mU3RhY2s7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIEJhc2VUeXBlX3QgeFBvcnRTdGFydFNjaGVkdWxlciggdm9pZCApDQogew0KLSAgICAvKiBVc2UgcHhDdXJyZW50VENCIGp1c3Qgc28gaXQgZG9lcyBub3QgZ2V0IG9wdGltaXNlZCBhd2F5LiAqLw0KLSAgICBpZiggcHhDdXJyZW50VENCICE9IE5VTEwgKQ0KLSAgICB7DQotICAgICAgICAvKiBDYWxsIGFuIGFwcGxpY2F0aW9uIGZ1bmN0aW9uIHRvIHNldCB1cCB0aGUgdGltZXIgdGhhdCB3aWxsIGdlbmVyYXRlDQotICAgICAgICAgKiB0aGUgdGljayBpbnRlcnJ1cHQuICBUaGlzIHdheSB0aGUgYXBwbGljYXRpb24gY2FuIGRlY2lkZSB3aGljaA0KLSAgICAgICAgICogcGVyaXBoZXJhbCB0byB1c2UuICBJZiB0aWNrbGVzcyBtb2RlIGlzIHVzZWQgdGhlbiB0aGUgZGVmYXVsdA0KLSAgICAgICAgICogaW1wbGVtZW50YXRpb24gZGVmaW5lZCBpbiB0aGlzIGZpbGUgKHdoaWNoIHVzZXMgQ01UMCkgc2hvdWxkIG5vdCBiZQ0KLSAgICAgICAgICogb3ZlcnJpZGRlbi4gKi8NCi0gICAgICAgIGNvbmZpZ1NFVFVQX1RJQ0tfSU5URVJSVVBUKCk7DQorCS8qIFVzZSBweEN1cnJlbnRUQ0IganVzdCBzbyBpdCBkb2VzIG5vdCBnZXQgb3B0aW1pc2VkIGF3YXkuICovDQorCWlmKCBweEN1cnJlbnRUQ0IgIT0gTlVMTCApDQorCXsNCisJCS8qIENhbGwgYW4gYXBwbGljYXRpb24gZnVuY3Rpb24gdG8gc2V0IHVwIHRoZSB0aW1lciB0aGF0IHdpbGwgZ2VuZXJhdGUNCisJCXRoZSB0aWNrIGludGVycnVwdC4gIFRoaXMgd2F5IHRoZSBhcHBsaWNhdGlvbiBjYW4gZGVjaWRlIHdoaWNoDQorCQlwZXJpcGhlcmFsIHRvIHVzZS4gIElmIHRpY2tsZXNzIG1vZGUgaXMgdXNlZCB0aGVuIHRoZSBkZWZhdWx0DQorCQlpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIGluIHRoaXMgZmlsZSAod2hpY2ggdXNlcyBDTVQwKSBzaG91bGQgbm90IGJlDQorCQlvdmVycmlkZGVuLiAqLw0KKwkJY29uZmlnU0VUVVBfVElDS19JTlRFUlJVUFQoKTsNCiANCi0gICAgICAgIC8qIEVuYWJsZSB0aGUgc29mdHdhcmUgaW50ZXJydXB0LiAqLw0KLSAgICAgICAgX0lFTiggX0lDVV9TV0lOVCApID0gMTsNCisJCS8qIEVuYWJsZSB0aGUgc29mdHdhcmUgaW50ZXJydXB0LiAqLw0KKwkJX0lFTiggX0lDVV9TV0lOVCApID0gMTsNCiANCi0gICAgICAgIC8qIEVuc3VyZSB0aGUgc29mdHdhcmUgaW50ZXJydXB0IGlzIGNsZWFyLiAqLw0KLSAgICAgICAgX0lSKCBfSUNVX1NXSU5UICkgPSAwOw0KKwkJLyogRW5zdXJlIHRoZSBzb2Z0d2FyZSBpbnRlcnJ1cHQgaXMgY2xlYXIuICovDQorCQlfSVIoIF9JQ1VfU1dJTlQgKSA9IDA7DQogDQotICAgICAgICAvKiBFbnN1cmUgdGhlIHNvZnR3YXJlIGludGVycnVwdCBpcyBzZXQgdG8gdGhlIGtlcm5lbCBwcmlvcml0eS4gKi8NCi0gICAgICAgIF9JUFIoIF9JQ1VfU1dJTlQgKSA9IGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFk7DQorCQkvKiBFbnN1cmUgdGhlIHNvZnR3YXJlIGludGVycnVwdCBpcyBzZXQgdG8gdGhlIGtlcm5lbCBwcmlvcml0eS4gKi8NCisJCV9JUFIoIF9JQ1VfU1dJTlQgKSA9IGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFk7DQogDQotICAgICAgICAvKiBTdGFydCB0aGUgZmlyc3QgdGFzay4gKi8NCi0gICAgICAgIHBydlN0YXJ0Rmlyc3RUYXNrKCk7DQotICAgIH0NCisJCS8qIFN0YXJ0IHRoZSBmaXJzdCB0YXNrLiAqLw0KKwkJcHJ2U3RhcnRGaXJzdFRhc2soKTsNCisJfQ0KIA0KLSAgICAvKiBFeGVjdXRpb24gc2hvdWxkIG5vdCByZWFjaCBoZXJlIGFzIHRoZSB0YXNrcyBhcmUgbm93IHJ1bm5pbmchDQotICAgICAqIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoKSBpcyBjYWxsZWQgaGVyZSB0byBwcmV2ZW50IHRoZSBjb21waWxlciBvdXRwdXR0aW5nDQotICAgICAqIGEgd2FybmluZyBhYm91dCBhIHN0YXRpY2FsbHkgZGVjbGFyZWQgZnVuY3Rpb24gbm90IGJlaW5nIHJlZmVyZW5jZWQgaW4gdGhlDQotICAgICAqIGNhc2UgdGhhdCB0aGUgYXBwbGljYXRpb24gd3JpdGVyIGhhcyBwcm92aWRlZCB0aGVpciBvd24gdGljayBpbnRlcnJ1cHQNCi0gICAgICogY29uZmlndXJhdGlvbiByb3V0aW5lIChhbmQgZGVmaW5lZCBjb25maWdTRVRVUF9USUNLX0lOVEVSUlVQVCgpIHN1Y2ggdGhhdA0KLSAgICAgKiB0aGVpciBvd24gcm91dGluZSB3aWxsIGJlIGNhbGxlZCBpbiBwbGFjZSBvZiBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCkpLiAqLw0KLSAgICBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCk7DQorCS8qIEV4ZWN1dGlvbiBzaG91bGQgbm90IHJlYWNoIGhlcmUgYXMgdGhlIHRhc2tzIGFyZSBub3cgcnVubmluZyENCisJcHJ2U2V0dXBUaW1lckludGVycnVwdCgpIGlzIGNhbGxlZCBoZXJlIHRvIHByZXZlbnQgdGhlIGNvbXBpbGVyIG91dHB1dHRpbmcNCisJYSB3YXJuaW5nIGFib3V0IGEgc3RhdGljYWxseSBkZWNsYXJlZCBmdW5jdGlvbiBub3QgYmVpbmcgcmVmZXJlbmNlZCBpbiB0aGUNCisJY2FzZSB0aGF0IHRoZSBhcHBsaWNhdGlvbiB3cml0ZXIgaGFzIHByb3ZpZGVkIHRoZWlyIG93biB0aWNrIGludGVycnVwdA0KKwljb25maWd1cmF0aW9uIHJvdXRpbmUgKGFuZCBkZWZpbmVkIGNvbmZpZ1NFVFVQX1RJQ0tfSU5URVJSVVBUKCkgc3VjaCB0aGF0DQorCXRoZWlyIG93biByb3V0aW5lIHdpbGwgYmUgY2FsbGVkIGluIHBsYWNlIG9mIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoKSkuICovDQorCXBydlNldHVwVGltZXJJbnRlcnJ1cHQoKTsNCiANCi0gICAgLyogU2hvdWxkIG5vdCBnZXQgaGVyZS4gKi8NCi0gICAgcmV0dXJuIHBkRkFJTDsNCisJLyogU2hvdWxkIG5vdCBnZXQgaGVyZS4gKi8NCisJcmV0dXJuIHBkRkFJTDsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogdm9pZCB2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApDQogew0KLSAgICAvKiBOb3QgaW1wbGVtZW50ZWQgaW4gcG9ydHMgd2hlcmUgdGhlcmUgaXMgbm90aGluZyB0byByZXR1cm4gdG8uDQotICAgICAqIEFydGlmaWNpYWxseSBmb3JjZSBhbiBhc3NlcnQuICovDQotICAgIGNvbmZpZ0FTU0VSVCggcHhDdXJyZW50VENCID09IE5VTEwgKTsNCisJLyogTm90IGltcGxlbWVudGVkIGluIHBvcnRzIHdoZXJlIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmV0dXJuIHRvLg0KKwlBcnRpZmljaWFsbHkgZm9yY2UgYW4gYXNzZXJ0LiAqLw0KKwljb25maWdBU1NFUlQoIHB4Q3VycmVudFRDQiA9PSBOVUxMICk7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHN0YXRpYyB2b2lkIHBydlN0YXJ0Rmlyc3RUYXNrKCB2b2lkICkNCiB7DQotICAgIF9fYXNtIHZvbGF0aWxlDQotICAgICgNCisJX19hc20gdm9sYXRpbGUNCisJKA0KKwkJLyogV2hlbiBzdGFydGluZyB0aGUgc2NoZWR1bGVyIHRoZXJlIGlzIG5vdGhpbmcgdGhhdCBuZWVkcyBtb3ZpbmcgdG8gdGhlDQorCQlpbnRlcnJ1cHQgc3RhY2sgYmVjYXVzZSB0aGUgZnVuY3Rpb24gaXMgbm90IGNhbGxlZCBmcm9tIGFuIGludGVycnVwdC4NCisJCUp1c3QgZW5zdXJlIHRoZSBjdXJyZW50IHN0YWNrIGlzIHRoZSB1c2VyIHN0YWNrLiAqLw0KKwkJIlNFVFBTVwkJVQkJCQkJCVxuIiBcDQogDQotICAgICAgICAvKiBXaGVuIHN0YXJ0aW5nIHRoZSBzY2hlZHVsZXIgdGhlcmUgaXMgbm90aGluZyB0aGF0IG5lZWRzIG1vdmluZyB0byB0aGUNCi0gICAgICAgICAqIGludGVycnVwdCBzdGFjayBiZWNhdXNlIHRoZSBmdW5jdGlvbiBpcyBub3QgY2FsbGVkIGZyb20gYW4gaW50ZXJydXB0Lg0KLSAgICAgICAgICogSnVzdCBlbnN1cmUgdGhlIGN1cnJlbnQgc3RhY2sgaXMgdGhlIHVzZXIgc3RhY2suICovDQotICAgICAgICAiU0VUUFNXCQlVCQkJCQkJXG4iXA0KKwkJLyogT2J0YWluIHRoZSBsb2NhdGlvbiBvZiB0aGUgc3RhY2sgYXNzb2NpYXRlZCB3aXRoIHdoaWNoIGV2ZXIgdGFzaw0KKwkJcHhDdXJyZW50VENCIGlzIGN1cnJlbnRseSBwb2ludGluZyB0by4gKi8NCisJCSJNT1YuTAkJI19weEN1cnJlbnRUQ0IsIFIxNQkJXG4iIFwNCisJCSJNT1YuTAkJW1IxNV0sIFIxNQkJCQlcbiIgXA0KKwkJIk1PVi5MCQlbUjE1XSwgUjAJCQkJXG4iIFwNCiANCisJCS8qIFJlc3RvcmUgdGhlIHJlZ2lzdGVycyBmcm9tIHRoZSBzdGFjayBvZiB0aGUgdGFzayBwb2ludGVkIHRvIGJ5DQorCQlweEN1cnJlbnRUQ0IuICovDQorCQkiUE9QCQlSMTUJCQkJCQlcbiIgXA0KIA0KLSAgICAgICAgLyogT2J0YWluIHRoZSBsb2NhdGlvbiBvZiB0aGUgc3RhY2sgYXNzb2NpYXRlZCB3aXRoIHdoaWNoIGV2ZXIgdGFzaw0KLSAgICAgICAgICogcHhDdXJyZW50VENCIGlzIGN1cnJlbnRseSBwb2ludGluZyB0by4gKi8NCi0gICAgICAgICJNT1YuTAkJI19weEN1cnJlbnRUQ0IsIFIxNQkJXG4iXA0KLSAgICAgICAgIk1PVi5MCQlbUjE1XSwgUjE1CQkJCVxuIlwNCi0gICAgICAgICJNT1YuTAkJW1IxNV0sIFIwCQkJCVxuIlwNCisJCS8qIEFjY3VtdWxhdG9yIGxvdyAzMiBiaXRzLiAqLw0KKwkJIk1WVEFDTE8JUjE1IAkJCQkJXG4iIFwNCisJCSJQT1AJCVIxNQkJCQkJCVxuIiBcDQogDQorCQkvKiBBY2N1bXVsYXRvciBoaWdoIDMyIGJpdHMuICovDQorCQkiTVZUQUNISQlSMTUgCQkJCQlcbiIgXA0KIA0KLSAgICAgICAgLyogUmVzdG9yZSB0aGUgcmVnaXN0ZXJzIGZyb20gdGhlIHN0YWNrIG9mIHRoZSB0YXNrIHBvaW50ZWQgdG8gYnkNCi0gICAgICAgICAqIHB4Q3VycmVudFRDQi4gKi8NCi0gICAgICAgICJQT1AJCVIxNQkJCQkJCVxuIlwNCisJCS8qIFIxIHRvIFIxNSAtIFIwIGlzIG5vdCBpbmNsdWRlZCBhcyBpdCBpcyB0aGUgU1AuICovDQorCQkiUE9QTQkJUjEtUjE1IAkJCQkJXG4iIFwNCiANCi0gICAgICAgIC8qIEFjY3VtdWxhdG9yIGxvdyAzMiBiaXRzLiAqLw0KLSAgICAgICAgIk1WVEFDTE8JUjE1IAkJCQkJXG4iXA0KLSAgICAgICAgIlBPUAkJUjE1CQkJCQkJXG4iXA0KLQ0KLSAgICAgICAgLyogQWNjdW11bGF0b3IgaGlnaCAzMiBiaXRzLiAqLw0KLSAgICAgICAgIk1WVEFDSEkJUjE1IAkJCQkJXG4iXA0KLQ0KLSAgICAgICAgLyogUjEgdG8gUjE1IC0gUjAgaXMgbm90IGluY2x1ZGVkIGFzIGl0IGlzIHRoZSBTUC4gKi8NCi0gICAgICAgICJQT1BNCQlSMS1SMTUgCQkJCQlcbiJcDQotDQotICAgICAgICAvKiBUaGlzIHBvcHMgdGhlIHJlbWFpbmluZyByZWdpc3RlcnMuICovDQotICAgICAgICAiUlRFCQkJCQkJCQlcbiJcDQotICAgICAgICAiTk9QCQkJCQkJCQlcbiJcDQotICAgICAgICAiTk9QCQkJCQkJCQlcbiINCi0gICAgKTsNCisJCS8qIFRoaXMgcG9wcyB0aGUgcmVtYWluaW5nIHJlZ2lzdGVycy4gKi8NCisJCSJSVEUJCQkJCQkJCVxuIiBcDQorCQkiTk9QCQkJCQkJCQlcbiIgXA0KKwkJIk5PUAkJCQkJCQkJXG4iDQorCSk7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlBvcnRTb2Z0d2FyZUludGVycnVwdElTUiggdm9pZCApDQogew0KLSAgICBfX2FzbSB2b2xhdGlsZQ0KLSAgICAoDQotICAgICAgICAvKiBSZS1lbmFibGUgaW50ZXJydXB0cy4gKi8NCi0gICAgICAgICJTRVRQU1cJCUkJCQkJCQkJXG4iXA0KKwlfX2FzbSB2b2xhdGlsZQ0KKwkoDQorCQkvKiBSZS1lbmFibGUgaW50ZXJydXB0cy4gKi8NCisJCSJTRVRQU1cJCUkJCQkJCQkJXG4iIFwNCiANCisJCS8qIE1vdmUgdGhlIGRhdGEgdGhhdCB3YXMgYXV0b21hdGljYWxseSBwdXNoZWQgb250byB0aGUgaW50ZXJydXB0IHN0YWNrIHdoZW4NCisJCXRoZSBpbnRlcnJ1cHQgb2NjdXJyZWQgZnJvbSB0aGUgaW50ZXJydXB0IHN0YWNrIHRvIHRoZSB1c2VyIHN0YWNrLg0KIA0KLSAgICAgICAgLyogTW92ZSB0aGUgZGF0YSB0aGF0IHdhcyBhdXRvbWF0aWNhbGx5IHB1c2hlZCBvbnRvIHRoZSBpbnRlcnJ1cHQgc3RhY2sgd2hlbg0KLSAgICAgICAgICogdGhlIGludGVycnVwdCBvY2N1cnJlZCBmcm9tIHRoZSBpbnRlcnJ1cHQgc3RhY2sgdG8gdGhlIHVzZXIgc3RhY2suDQotICAgICAgICAgKg0KLSAgICAgICAgICogUjE1IGlzIHNhdmVkIGJlZm9yZSBpdCBpcyBjbG9iYmVyZWQuICovDQotICAgICAgICAiUFVTSC5MCQlSMTUJCQkJCQkJXG4iXA0KKwkJUjE1IGlzIHNhdmVkIGJlZm9yZSBpdCBpcyBjbG9iYmVyZWQuICovDQorCQkiUFVTSC5MCQlSMTUJCQkJCQkJXG4iIFwNCiANCi0gICAgICAgIC8qIFJlYWQgdGhlIHVzZXIgc3RhY2sgcG9pbnRlci4gKi8NCi0gICAgICAgICJNVkZDCQlVU1AsIFIxNQkJCQkJXG4iXA0KKwkJLyogUmVhZCB0aGUgdXNlciBzdGFjayBwb2ludGVyLiAqLw0KKwkJIk1WRkMJCVVTUCwgUjE1CQkJCQlcbiIgXA0KIA0KLSAgICAgICAgLyogTW92ZSB0aGUgYWRkcmVzcyBkb3duIHRvIHRoZSBkYXRhIGJlaW5nIG1vdmVkLiAqLw0KLSAgICAgICAgIlNVQgkJIzEyLCBSMTUJCQkJCVxuIlwNCi0gICAgICAgICJNVlRDCQlSMTUsIFVTUAkJCQkJXG4iXA0KKwkJLyogTW92ZSB0aGUgYWRkcmVzcyBkb3duIHRvIHRoZSBkYXRhIGJlaW5nIG1vdmVkLiAqLw0KKwkJIlNVQgkJIzEyLCBSMTUJCQkJCVxuIiBcDQorCQkiTVZUQwkJUjE1LCBVU1AJCQkJCVxuIiBcDQogDQotICAgICAgICAvKiBDb3B5IHRoZSBkYXRhIGFjcm9zcywgUjE1LCB0aGVuIFBDLCB0aGVuIFBTVy4gKi8NCi0gICAgICAgICJNT1YuTAkJWyBSMCBdLCBbIFIxNSBdCQkJCVxuIlwNCi0gICAgICAgICJNT1YuTCAJCTRbIFIwIF0sIDRbIFIxNSBdCQkJXG4iXA0KLSAgICAgICAgIk1PVi5MCQk4WyBSMCBdLCA4WyBSMTUgXQkJCVxuIlwNCisJCS8qIENvcHkgdGhlIGRhdGEgYWNyb3NzLCBSMTUsIHRoZW4gUEMsIHRoZW4gUFNXLiAqLw0KKwkJIk1PVi5MCQlbIFIwIF0sIFsgUjE1IF0JCQkJXG4iIFwNCisJCSJNT1YuTCAJCTRbIFIwIF0sIDRbIFIxNSBdCQkJXG4iIFwNCisJCSJNT1YuTAkJOFsgUjAgXSwgOFsgUjE1IF0JCQlcbiIgXA0KIA0KLSAgICAgICAgLyogTW92ZSB0aGUgaW50ZXJydXB0IHN0YWNrIHBvaW50ZXIgdG8gaXRzIG5ldyBjb3JyZWN0IHBvc2l0aW9uLiAqLw0KLSAgICAgICAgIkFERAkJIzEyLCBSMAkJCQkJCVxuIlwNCisJCS8qIE1vdmUgdGhlIGludGVycnVwdCBzdGFjayBwb2ludGVyIHRvIGl0cyBuZXcgY29ycmVjdCBwb3NpdGlvbi4gKi8NCisJCSJBREQJCSMxMiwgUjAJCQkJCQlcbiIgXA0KIA0KLSAgICAgICAgLyogQWxsIHRoZSByZXN0IG9mIHRoZSByZWdpc3RlcnMgYXJlIHNhdmVkIGRpcmVjdGx5IHRvIHRoZSB1c2VyIHN0YWNrLiAqLw0KLSAgICAgICAgIlNFVFBTVwkJVQkJCQkJCQlcbiJcDQorCQkvKiBBbGwgdGhlIHJlc3Qgb2YgdGhlIHJlZ2lzdGVycyBhcmUgc2F2ZWQgZGlyZWN0bHkgdG8gdGhlIHVzZXIgc3RhY2suICovDQorCQkiU0VUUFNXCQlVCQkJCQkJCVxuIiBcDQogDQotICAgICAgICAvKiBTYXZlIHRoZSByZXN0IG9mIHRoZSBnZW5lcmFsIHJlZ2lzdGVycyAoUjE1IGhhcyBiZWVuIHNhdmVkIGFscmVhZHkpLiAqLw0KLSAgICAgICAgIlBVU0hNCQlSMS1SMTQJCQkJCQlcbiJcDQorCQkvKiBTYXZlIHRoZSByZXN0IG9mIHRoZSBnZW5lcmFsIHJlZ2lzdGVycyAoUjE1IGhhcyBiZWVuIHNhdmVkIGFscmVhZHkpLiAqLw0KKwkJIlBVU0hNCQlSMS1SMTQJCQkJCQlcbiIgXA0KIA0KLSAgICAgICAgLyogU2F2ZSB0aGUgYWNjdW11bGF0b3IuICovDQotICAgICAgICAiTVZGQUNISSAJUjE1CQkJCQkJCVxuIlwNCi0gICAgICAgICJQVVNILkwJCVIxNQkJCQkJCQlcbiJcDQorCQkvKiBTYXZlIHRoZSBhY2N1bXVsYXRvci4gKi8NCisJCSJNVkZBQ0hJIAlSMTUJCQkJCQkJXG4iIFwNCisJCSJQVVNILkwJCVIxNQkJCQkJCQlcbiIgXA0KIA0KLSAgICAgICAgLyogTWlkZGxlIHdvcmQuICovDQotICAgICAgICAiTVZGQUNNSQlSMTUJCQkJCQkJXG4iXA0KKwkJLyogTWlkZGxlIHdvcmQuICovDQorCQkiTVZGQUNNSQlSMTUJCQkJCQkJXG4iIFwNCiANCi0gICAgICAgIC8qIFNoaWZ0ZWQgbGVmdCBhcyBpdCBpcyByZXN0b3JlZCB0byB0aGUgbG93IG9yZGVyIHdvcmQuICovDQotICAgICAgICAiU0hMTAkJIzE2LCBSMTUJCQkJCVxuIlwNCi0gICAgICAgICJQVVNILkwJCVIxNQkJCQkJCQlcbiJcDQorCQkvKiBTaGlmdGVkIGxlZnQgYXMgaXQgaXMgcmVzdG9yZWQgdG8gdGhlIGxvdyBvcmRlciB3b3JkLiAqLw0KKwkJIlNITEwJCSMxNiwgUjE1CQkJCQlcbiIgXA0KKwkJIlBVU0guTAkJUjE1CQkJCQkJCVxuIiBcDQogDQotICAgICAgICAvKiBTYXZlIHRoZSBzdGFjayBwb2ludGVyIHRvIHRoZSBUQ0IuICovDQotICAgICAgICAiTU9WLkwJCSNfcHhDdXJyZW50VENCLCBSMTUJCQlcbiJcDQotICAgICAgICAiTU9WLkwJCVsgUjE1IF0sIFIxNQkJCQlcbiJcDQotICAgICAgICAiTU9WLkwJCVIwLCBbIFIxNSBdCQkJCQlcbiJcDQorCQkvKiBTYXZlIHRoZSBzdGFjayBwb2ludGVyIHRvIHRoZSBUQ0IuICovDQorCQkiTU9WLkwJCSNfcHhDdXJyZW50VENCLCBSMTUJCQlcbiIgXA0KKwkJIk1PVi5MCQlbIFIxNSBdLCBSMTUJCQkJXG4iIFwNCisJCSJNT1YuTAkJUjAsIFsgUjE1IF0JCQkJCVxuIiBcDQogDQorCQkvKiBFbnN1cmUgdGhlIGludGVycnVwdCBtYXNrIGlzIHNldCB0byB0aGUgc3lzY2FsbCBwcmlvcml0eSB3aGlsZSB0aGUga2VybmVsDQorCQlzdHJ1Y3R1cmVzIGFyZSBiZWluZyBhY2Nlc3NlZC4gKi8NCisJCSJNVlRJUEwJCSUwIAkJCQkJCQlcbiIgXA0KIA0KLSAgICAgICAgLyogRW5zdXJlIHRoZSBpbnRlcnJ1cHQgbWFzayBpcyBzZXQgdG8gdGhlIHN5c2NhbGwgcHJpb3JpdHkgd2hpbGUgdGhlIGtlcm5lbA0KLSAgICAgICAgICogc3RydWN0dXJlcyBhcmUgYmVpbmcgYWNjZXNzZWQuICovDQotICAgICAgICAiTVZUSVBMCQklMCAJCQkJCQkJXG4iXA0KKwkJLyogU2VsZWN0IHRoZSBuZXh0IHRhc2sgdG8gcnVuLiAqLw0KKwkJIkJTUi5BCQlfdlRhc2tTd2l0Y2hDb250ZXh0CQkJXG4iIFwNCiANCi0gICAgICAgIC8qIFNlbGVjdCB0aGUgbmV4dCB0YXNrIHRvIHJ1bi4gKi8NCi0gICAgICAgICJCU1IuQQkJX3ZUYXNrU3dpdGNoQ29udGV4dAkJCVxuIlwNCisJCS8qIFJlc2V0IHRoZSBpbnRlcnJ1cHQgbWFzayBhcyBubyBtb3JlIGRhdGEgc3RydWN0dXJlIGFjY2VzcyBpcyByZXF1aXJlZC4gKi8NCisJCSJNVlRJUEwJCSUxCQkJCQkJCVxuIiBcDQogDQotICAgICAgICAvKiBSZXNldCB0aGUgaW50ZXJydXB0IG1hc2sgYXMgbm8gbW9yZSBkYXRhIHN0cnVjdHVyZSBhY2Nlc3MgaXMgcmVxdWlyZWQuICovDQotICAgICAgICAiTVZUSVBMCQklMQkJCQkJCQlcbiJcDQorCQkvKiBMb2FkIHRoZSBzdGFjayBwb2ludGVyIG9mIHRoZSB0YXNrIHRoYXQgaXMgbm93IHNlbGVjdGVkIGFzIHRoZSBSdW5uaW5nDQorCQlzdGF0ZSB0YXNrIGZyb20gaXRzIFRDQi4gKi8NCisJCSJNT1YuTAkJI19weEN1cnJlbnRUQ0IsUjE1CQkJXG4iIFwNCisJCSJNT1YuTAkJWyBSMTUgXSwgUjE1CQkJCVxuIiBcDQorCQkiTU9WLkwJCVsgUjE1IF0sIFIwCQkJCQlcbiIgXA0KIA0KLQ0KLSAgICAgICAgLyogTG9hZCB0aGUgc3RhY2sgcG9pbnRlciBvZiB0aGUgdGFzayB0aGF0IGlzIG5vdyBzZWxlY3RlZCBhcyB0aGUgUnVubmluZw0KLSAgICAgICAgICogc3RhdGUgdGFzayBmcm9tIGl0cyBUQ0IuICovDQotICAgICAgICAiTU9WLkwJCSNfcHhDdXJyZW50VENCLFIxNQkJCVxuIlwNCi0gICAgICAgICJNT1YuTAkJWyBSMTUgXSwgUjE1CQkJCVxuIlwNCi0gICAgICAgICJNT1YuTAkJWyBSMTUgXSwgUjAJCQkJCVxuIlwNCi0NCi0NCi0gICAgICAgIC8qIFJlc3RvcmUgdGhlIGNvbnRleHQgb2YgdGhlIG5ldyB0YXNrLiAgVGhlIFBTVyAoUHJvZ3JhbSBTdGF0dXMgV29yZCkgYW5kDQotICAgICAgICAgKiBQQyB3aWxsIGJlIHBvcHBlZCBieSB0aGUgUlRFIGluc3RydWN0aW9uLiAqLw0KLSAgICAgICAgIlBPUAkJUjE1CQkJCQkJCVxuIlwNCi0gICAgICAgICJNVlRBQ0xPIAlSMTUJCQkJCQkJXG4iXA0KLSAgICAgICAgIlBPUAkJUjE1CQkJCQkJCVxuIlwNCi0gICAgICAgICJNVlRBQ0hJIAlSMTUJCQkJCQkJXG4iXA0KLSAgICAgICAgIlBPUE0JCVIxLVIxNQkJCQkJCVxuIlwNCi0gICAgICAgICJSVEUJCQkJCQkJCQlcbiJcDQotICAgICAgICAiTk9QCQkJCQkJCQkJXG4iXA0KLSAgICAgICAgIk5PUAkJCQkJCQkJCSAgIg0KLSAgICAgICAgOjoiaSIgKCBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgKSwgImkiICggY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWSApDQotICAgICk7DQorCQkvKiBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBuZXcgdGFzay4gIFRoZSBQU1cgKFByb2dyYW0gU3RhdHVzIFdvcmQpIGFuZA0KKwkJUEMgd2lsbCBiZSBwb3BwZWQgYnkgdGhlIFJURSBpbnN0cnVjdGlvbi4gKi8NCisJCSJQT1AJCVIxNQkJCQkJCQlcbiIgXA0KKwkJIk1WVEFDTE8gCVIxNQkJCQkJCQlcbiIgXA0KKwkJIlBPUAkJUjE1CQkJCQkJCVxuIiBcDQorCQkiTVZUQUNISSAJUjE1CQkJCQkJCVxuIiBcDQorCQkiUE9QTQkJUjEtUjE1CQkJCQkJXG4iIFwNCisJCSJSVEUJCQkJCQkJCQlcbiIgXA0KKwkJIk5PUAkJCQkJCQkJCVxuIiBcDQorCQkiTk9QCQkJCQkJCQkJICAiDQorCQk6OiAiaSIoY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZKSwgImkiKGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkpDQorCSk7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlBvcnRUaWNrSVNSKCB2b2lkICkNCiB7DQotICAgIC8qIFJlLWVuYWJsZWQgaW50ZXJydXB0cy4gKi8NCi0gICAgX19hc20gdm9sYXRpbGUgKCAiU0VUUFNXCUkiKTsNCisJLyogUmUtZW5hYmxlZCBpbnRlcnJ1cHRzLiAqLw0KKwlfX2FzbSB2b2xhdGlsZSggIlNFVFBTVwlJIiApOw0KIA0KLSAgICAvKiBJbmNyZW1lbnQgdGhlIHRpY2ssIGFuZCBwZXJmb3JtIGFueSBwcm9jZXNzaW5nIHRoZSBuZXcgdGljayB2YWx1ZQ0KLSAgICAgKiBuZWNlc3NpdGF0ZXMuICBFbnN1cmUgSVBMIGlzIGF0IHRoZSBtYXggc3lzY2FsbCB2YWx1ZSBmaXJzdC4gKi8NCi0gICAgcG9ydERJU0FCTEVfSU5URVJSVVBUU19GUk9NX0tFUk5FTF9JU1IoKTsNCi0gICAgew0KLSAgICAgICAgaWYoIHhUYXNrSW5jcmVtZW50VGljaygpICE9IHBkRkFMU0UgKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHRhc2tZSUVMRCgpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHBvcnRFTkFCTEVfSU5URVJSVVBUU19GUk9NX0tFUk5FTF9JU1IoKTsNCisJLyogSW5jcmVtZW50IHRoZSB0aWNrLCBhbmQgcGVyZm9ybSBhbnkgcHJvY2Vzc2luZyB0aGUgbmV3IHRpY2sgdmFsdWUNCisJbmVjZXNzaXRhdGVzLiAgRW5zdXJlIElQTCBpcyBhdCB0aGUgbWF4IHN5c2NhbGwgdmFsdWUgZmlyc3QuICovDQorCXBvcnRESVNBQkxFX0lOVEVSUlVQVFNfRlJPTV9LRVJORUxfSVNSKCk7DQorCXsNCisJCWlmKCB4VGFza0luY3JlbWVudFRpY2soKSAhPSBwZEZBTFNFICkNCisJCXsNCisJCQl0YXNrWUlFTEQoKTsNCisJCX0NCisJfQ0KKwlwb3J0RU5BQkxFX0lOVEVSUlVQVFNfRlJPTV9LRVJORUxfSVNSKCk7DQogDQotICAgICNpZiBjb25maWdVU0VfVElDS0xFU1NfSURMRSA9PSAxDQotICAgICAgICB7DQotICAgICAgICAgICAgLyogVGhlIENQVSB3b2tlIGJlY2F1c2Ugb2YgYSB0aWNrLiAqLw0KLSAgICAgICAgICAgIHVsVGlja0ZsYWcgPSBwZFRSVUU7DQorCSNpZiBjb25maWdVU0VfVElDS0xFU1NfSURMRSA9PSAxDQorCXsNCisJCS8qIFRoZSBDUFUgd29rZSBiZWNhdXNlIG9mIGEgdGljay4gKi8NCisJCXVsVGlja0ZsYWcgPSBwZFRSVUU7DQogDQotICAgICAgICAgICAgLyogSWYgdGhpcyBpcyB0aGUgZmlyc3QgdGljayBzaW5jZSBleGl0aW5nIHRpY2tsZXNzIG1vZGUgdGhlbiB0aGUgQ01UDQotICAgICAgICAgICAgICogY29tcGFyZSBtYXRjaCB2YWx1ZSBuZWVkcyByZXNldHRpbmcuICovDQotICAgICAgICAgICAgQ01UMC5DTUNPUiA9ICggdWludDE2X3QgKSB1bE1hdGNoVmFsdWVGb3JPbmVUaWNrOw0KLSAgICAgICAgfQ0KLSAgICAjZW5kaWYNCisJCS8qIElmIHRoaXMgaXMgdGhlIGZpcnN0IHRpY2sgc2luY2UgZXhpdGluZyB0aWNrbGVzcyBtb2RlIHRoZW4gdGhlIENNVA0KKwkJY29tcGFyZSBtYXRjaCB2YWx1ZSBuZWVkcyByZXNldHRpbmcuICovDQorCQlDTVQwLkNNQ09SID0gKCB1aW50MTZfdCApIHVsTWF0Y2hWYWx1ZUZvck9uZVRpY2s7DQorCX0NCisJI2VuZGlmDQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHVpbnQzMl90IHVsUG9ydEdldElQTCggdm9pZCApDQogew0KLSAgICBfX2FzbSB2b2xhdGlsZQ0KLSAgICAoDQotICAgICAgICAiTVZGQwlQU1csIFIxCQkJXG4iXA0KLSAgICAgICAgIlNITFIJIzI0LCBSMQkJCVxuIlwNCi0gICAgICAgICJSVFMJCQkJCSAgIg0KLSAgICApOw0KKwlfX2FzbSB2b2xhdGlsZQ0KKwkoDQorCQkiTVZGQwlQU1csIFIxCQkJXG4iCVwNCisJCSJTSExSCSMyNCwgUjEJCQlcbiIJXA0KKwkJIlJUUwkJCQkJICAiDQorCSk7DQogDQotICAgIC8qIFRoaXMgd2lsbCBuZXZlciBnZXQgZXhlY3V0ZWQsIGJ1dCBrZWVwcyB0aGUgY29tcGlsZXIgZnJvbSBjb21wbGFpbmluZy4gKi8NCi0gICAgcmV0dXJuIDA7DQorCS8qIFRoaXMgd2lsbCBuZXZlciBnZXQgZXhlY3V0ZWQsIGJ1dCBrZWVwcyB0aGUgY29tcGlsZXIgZnJvbSBjb21wbGFpbmluZy4gKi8NCisJcmV0dXJuIDA7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlBvcnRTZXRJUEwoIHVpbnQzMl90IHVsTmV3SVBMICkNCiB7DQotICAgIF9fYXNtIHZvbGF0aWxlDQotICAgICgNCi0gICAgICAgICJQVVNICVI1CQkJCVxuIlwNCi0gICAgICAgICJNVkZDCVBTVywgUjUJCQlcbiJcDQotICAgICAgICAiU0hMTAkjMjQsIFIxCQkJXG4iXA0KLSAgICAgICAgIkFORAkjLTBGMDAwMDAxSCwgUjUgXG4iXA0KLSAgICAgICAgIk9SCQlSMSwgUjUJCQlcbiJcDQotICAgICAgICAiTVZUQwlSNSwgUFNXCQkJXG4iXA0KLSAgICAgICAgIlBPUAlSNQkJCQlcbiJcDQotICAgICAgICAiUlRTCQkJCQkgICINCi0gICAgKTsNCisJX19hc20gdm9sYXRpbGUNCisJKA0KKwkJIlBVU0gJUjUJCQkJXG4iIFwNCisJCSJNVkZDCVBTVywgUjUJCQlcbiIJXA0KKwkJIlNITEwJIzI0LCBSMQkJCVxuIiBcDQorCQkiQU5ECSMtMEYwMDAwMDFILCBSNSBcbiIgXA0KKwkJIk9SCQlSMSwgUjUJCQlcbiIgXA0KKwkJIk1WVEMJUjUsIFBTVwkJCVxuIiBcDQorCQkiUE9QCVI1CQkJCVxuIiBcDQorCQkiUlRTCQkJCQkgICINCisJICk7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHN0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKQ0KIHsNCi0gICAgLyogVW5sb2NrLiAqLw0KLSAgICBTWVNURU0uUFJDUi5XT1JEID0gcG9ydFVOTE9DS19LRVk7DQorCS8qIFVubG9jay4gKi8NCisJU1lTVEVNLlBSQ1IuV09SRCA9IHBvcnRVTkxPQ0tfS0VZOw0KIA0KLSAgICAvKiBFbmFibGUgQ01UMC4gKi8NCi0gICAgTVNUUCggQ01UMCApID0gMDsNCisJLyogRW5hYmxlIENNVDAuICovDQorCU1TVFAoIENNVDAgKSA9IDA7DQogDQotICAgIC8qIExvY2sgYWdhaW4uICovDQotICAgIFNZU1RFTS5QUkNSLldPUkQgPSBwb3J0TE9DS19LRVk7DQorCS8qIExvY2sgYWdhaW4uICovDQorCVNZU1RFTS5QUkNSLldPUkQgPSBwb3J0TE9DS19LRVk7DQogDQotICAgIC8qIEludGVycnVwdCBvbiBjb21wYXJlIG1hdGNoLiAqLw0KLSAgICBDTVQwLkNNQ1IuQklULkNNSUUgPSAxOw0KKwkvKiBJbnRlcnJ1cHQgb24gY29tcGFyZSBtYXRjaC4gKi8NCisJQ01UMC5DTUNSLkJJVC5DTUlFID0gMTsNCiANCi0gICAgLyogU2V0IHRoZSBjb21wYXJlIG1hdGNoIHZhbHVlLiAqLw0KLSAgICBDTVQwLkNNQ09SID0gKCB1aW50MTZfdCApIHVsTWF0Y2hWYWx1ZUZvck9uZVRpY2s7DQorCS8qIFNldCB0aGUgY29tcGFyZSBtYXRjaCB2YWx1ZS4gKi8NCisJQ01UMC5DTUNPUiA9ICggdWludDE2X3QgKSB1bE1hdGNoVmFsdWVGb3JPbmVUaWNrOw0KIA0KLSAgICAvKiBEaXZpZGUgdGhlIFBDTEsuICovDQotICAgICNpZiBwb3J0Q0xPQ0tfRElWSVNPUiA9PSA1MTINCi0gICAgICAgIHsNCi0gICAgICAgICAgICBDTVQwLkNNQ1IuQklULkNLUyA9IDM7DQotICAgICAgICB9DQotICAgICNlbGlmIHBvcnRDTE9DS19ESVZJU09SID09IDEyOA0KLSAgICAgICAgew0KLSAgICAgICAgICAgIENNVDAuQ01DUi5CSVQuQ0tTID0gMjsNCi0gICAgICAgIH0NCi0gICAgI2VsaWYgcG9ydENMT0NLX0RJVklTT1IgPT0gMzINCi0gICAgICAgIHsNCi0gICAgICAgICAgICBDTVQwLkNNQ1IuQklULkNLUyA9IDE7DQotICAgICAgICB9DQotICAgICNlbGlmIHBvcnRDTE9DS19ESVZJU09SID09IDgNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBDTVQwLkNNQ1IuQklULkNLUyA9IDA7DQotICAgICAgICB9DQotICAgICNlbHNlIC8qIGlmIHBvcnRDTE9DS19ESVZJU09SID09IDUxMiAqLw0KLSAgICAgICAgew0KLSAgICAgICAgICAgICNlcnJvciBJbnZhbGlkIHBvcnRDTE9DS19ESVZJU09SIHNldHRpbmcNCi0gICAgICAgIH0NCi0gICAgI2VuZGlmIC8qIGlmIHBvcnRDTE9DS19ESVZJU09SID09IDUxMiAqLw0KKwkvKiBEaXZpZGUgdGhlIFBDTEsuICovDQorCSNpZiBwb3J0Q0xPQ0tfRElWSVNPUiA9PSA1MTINCisJew0KKwkJQ01UMC5DTUNSLkJJVC5DS1MgPSAzOw0KKwl9DQorCSNlbGlmIHBvcnRDTE9DS19ESVZJU09SID09IDEyOA0KKwl7DQorCQlDTVQwLkNNQ1IuQklULkNLUyA9IDI7DQorCX0NCisJI2VsaWYgcG9ydENMT0NLX0RJVklTT1IgPT0gMzINCisJew0KKwkJQ01UMC5DTUNSLkJJVC5DS1MgPSAxOw0KKwl9DQorCSNlbGlmIHBvcnRDTE9DS19ESVZJU09SID09IDgNCisJew0KKwkJQ01UMC5DTUNSLkJJVC5DS1MgPSAwOw0KKwl9DQorCSNlbHNlDQorCXsNCisJCSNlcnJvciBJbnZhbGlkIHBvcnRDTE9DS19ESVZJU09SIHNldHRpbmcNCisJfQ0KKwkjZW5kaWYNCiANCi0gICAgLyogRW5hYmxlIHRoZSBpbnRlcnJ1cHQuLi4gKi8NCi0gICAgX0lFTiggX0NNVDBfQ01JMCApID0gMTsNCisJLyogRW5hYmxlIHRoZSBpbnRlcnJ1cHQuLi4gKi8NCisJX0lFTiggX0NNVDBfQ01JMCApID0gMTsNCiANCi0gICAgLyogLi4uYW5kIHNldCBpdHMgcHJpb3JpdHkgdG8gdGhlIGFwcGxpY2F0aW9uIGRlZmluZWQga2VybmVsIHByaW9yaXR5LiAqLw0KLSAgICBfSVBSKCBfQ01UMF9DTUkwICkgPSBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZOw0KKwkvKiAuLi5hbmQgc2V0IGl0cyBwcmlvcml0eSB0byB0aGUgYXBwbGljYXRpb24gZGVmaW5lZCBrZXJuZWwgcHJpb3JpdHkuICovDQorCV9JUFIoIF9DTVQwX0NNSTAgKSA9IGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFk7DQogDQotICAgIC8qIFN0YXJ0IHRoZSB0aW1lci4gKi8NCi0gICAgQ01ULkNNU1RSMC5CSVQuU1RSMCA9IDE7DQorCS8qIFN0YXJ0IHRoZSB0aW1lci4gKi8NCisJQ01ULkNNU1RSMC5CSVQuU1RSMCA9IDE7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KICNpZiBjb25maWdVU0VfVElDS0xFU1NfSURMRSA9PSAxDQogDQotICAgIHN0YXRpYyB2b2lkIHBydlNsZWVwKCBUaWNrVHlwZV90IHhFeHBlY3RlZElkbGVUaW1lICkNCi0gICAgew0KLSAgICAgICAgLyogQWxsb3cgdGhlIGFwcGxpY2F0aW9uIHRvIGRlZmluZSBzb21lIHByZS1zbGVlcCBwcm9jZXNzaW5nLiAqLw0KLSAgICAgICAgY29uZmlnUFJFX1NMRUVQX1BST0NFU1NJTkcoIHhFeHBlY3RlZElkbGVUaW1lICk7DQorCXN0YXRpYyB2b2lkIHBydlNsZWVwKCBUaWNrVHlwZV90IHhFeHBlY3RlZElkbGVUaW1lICkNCisJew0KKwkJLyogQWxsb3cgdGhlIGFwcGxpY2F0aW9uIHRvIGRlZmluZSBzb21lIHByZS1zbGVlcCBwcm9jZXNzaW5nLiAqLw0KKwkJY29uZmlnUFJFX1NMRUVQX1BST0NFU1NJTkcoIHhFeHBlY3RlZElkbGVUaW1lICk7DQogDQotICAgICAgICAvKiB4RXhwZWN0ZWRJZGxlVGltZSBiZWluZyBzZXQgdG8gMCBieSBjb25maWdQUkVfU0xFRVBfUFJPQ0VTU0lORygpDQotICAgICAgICAgKiBtZWFucyB0aGUgYXBwbGljYXRpb24gZGVmaW5lZCBjb2RlIGhhcyBhbHJlYWR5IGV4ZWN1dGVkIHRoZSBXQUlUDQotICAgICAgICAgKiBpbnN0cnVjdGlvbi4gKi8NCi0gICAgICAgIGlmKCB4RXhwZWN0ZWRJZGxlVGltZSA+IDAgKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIF9fYXNtIHZvbGF0aWxlICggIldBSVQiICk7DQotICAgICAgICB9DQorCQkvKiB4RXhwZWN0ZWRJZGxlVGltZSBiZWluZyBzZXQgdG8gMCBieSBjb25maWdQUkVfU0xFRVBfUFJPQ0VTU0lORygpDQorCQltZWFucyB0aGUgYXBwbGljYXRpb24gZGVmaW5lZCBjb2RlIGhhcyBhbHJlYWR5IGV4ZWN1dGVkIHRoZSBXQUlUDQorCQlpbnN0cnVjdGlvbi4gKi8NCisJCWlmKCB4RXhwZWN0ZWRJZGxlVGltZSA+IDAgKQ0KKwkJew0KKwkJCV9fYXNtIHZvbGF0aWxlKCAiV0FJVCIgKTsNCisJCX0NCiANCi0gICAgICAgIC8qIEFsbG93IHRoZSBhcHBsaWNhdGlvbiB0byBkZWZpbmUgc29tZSBwb3N0IHNsZWVwIHByb2Nlc3NpbmcuICovDQotICAgICAgICBjb25maWdQT1NUX1NMRUVQX1BST0NFU1NJTkcoIHhFeHBlY3RlZElkbGVUaW1lICk7DQotICAgIH0NCisJCS8qIEFsbG93IHRoZSBhcHBsaWNhdGlvbiB0byBkZWZpbmUgc29tZSBwb3N0IHNsZWVwIHByb2Nlc3NpbmcuICovDQorCQljb25maWdQT1NUX1NMRUVQX1BST0NFU1NJTkcoIHhFeHBlY3RlZElkbGVUaW1lICk7DQorCX0NCiANCiAjZW5kaWYgLyogY29uZmlnVVNFX1RJQ0tMRVNTX0lETEUgKi8NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAjaWYgY29uZmlnVVNFX1RJQ0tMRVNTX0lETEUgPT0gMQ0KIA0KLSAgICB2b2lkIHZQb3J0U3VwcHJlc3NUaWNrc0FuZFNsZWVwKCBUaWNrVHlwZV90IHhFeHBlY3RlZElkbGVUaW1lICkNCi0gICAgew0KLSAgICAgICAgdWludDMyX3QgdWxNYXRjaFZhbHVlLCB1bENvbXBsZXRlVGlja1BlcmlvZHMsIHVsQ3VycmVudENvdW50Ow0KLSAgICAgICAgZVNsZWVwTW9kZVN0YXR1cyBlU2xlZXBBY3Rpb247DQorCXZvaWQgdlBvcnRTdXBwcmVzc1RpY2tzQW5kU2xlZXAoIFRpY2tUeXBlX3QgeEV4cGVjdGVkSWRsZVRpbWUgKQ0KKwl7DQorCXVpbnQzMl90IHVsTWF0Y2hWYWx1ZSwgdWxDb21wbGV0ZVRpY2tQZXJpb2RzLCB1bEN1cnJlbnRDb3VudDsNCisJZVNsZWVwTW9kZVN0YXR1cyBlU2xlZXBBY3Rpb247DQogDQotICAgICAgICAvKiBUSElTIEZVTkNUSU9OIElTIENBTExFRCBXSVRIIFRIRSBTQ0hFRFVMRVIgU1VTUEVOREVELiAqLw0KKwkJLyogVEhJUyBGVU5DVElPTiBJUyBDQUxMRUQgV0lUSCBUSEUgU0NIRURVTEVSIFNVU1BFTkRFRC4gKi8NCiANCi0gICAgICAgIC8qIE1ha2Ugc3VyZSB0aGUgQ01UIHJlbG9hZCB2YWx1ZSBkb2VzIG5vdCBvdmVyZmxvdyB0aGUgY291bnRlci4gKi8NCi0gICAgICAgIGlmKCB4RXhwZWN0ZWRJZGxlVGltZSA+IHhNYXhpbXVtUG9zc2libGVTdXBwcmVzc2VkVGlja3MgKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHhFeHBlY3RlZElkbGVUaW1lID0geE1heGltdW1Qb3NzaWJsZVN1cHByZXNzZWRUaWNrczsNCi0gICAgICAgIH0NCisJCS8qIE1ha2Ugc3VyZSB0aGUgQ01UIHJlbG9hZCB2YWx1ZSBkb2VzIG5vdCBvdmVyZmxvdyB0aGUgY291bnRlci4gKi8NCisJCWlmKCB4RXhwZWN0ZWRJZGxlVGltZSA+IHhNYXhpbXVtUG9zc2libGVTdXBwcmVzc2VkVGlja3MgKQ0KKwkJew0KKwkJCXhFeHBlY3RlZElkbGVUaW1lID0geE1heGltdW1Qb3NzaWJsZVN1cHByZXNzZWRUaWNrczsNCisJCX0NCiANCi0gICAgICAgIC8qIENhbGN1bGF0ZSB0aGUgcmVsb2FkIHZhbHVlIHJlcXVpcmVkIHRvIHdhaXQgeEV4cGVjdGVkSWRsZVRpbWUgdGljaw0KLSAgICAgICAgICogcGVyaW9kcy4gKi8NCi0gICAgICAgIHVsTWF0Y2hWYWx1ZSA9IHVsTWF0Y2hWYWx1ZUZvck9uZVRpY2sgKiB4RXhwZWN0ZWRJZGxlVGltZTsNCisJCS8qIENhbGN1bGF0ZSB0aGUgcmVsb2FkIHZhbHVlIHJlcXVpcmVkIHRvIHdhaXQgeEV4cGVjdGVkSWRsZVRpbWUgdGljaw0KKwkJcGVyaW9kcy4gKi8NCisJCXVsTWF0Y2hWYWx1ZSA9IHVsTWF0Y2hWYWx1ZUZvck9uZVRpY2sgKiB4RXhwZWN0ZWRJZGxlVGltZTsNCisJCWlmKCB1bE1hdGNoVmFsdWUgPiB1bFN0b3BwZWRUaW1lckNvbXBlbnNhdGlvbiApDQorCQl7DQorCQkJLyogQ29tcGVuc2F0ZSBmb3IgdGhlIGZhY3QgdGhhdCB0aGUgQ01UIGlzIGdvaW5nIHRvIGJlIHN0b3BwZWQNCisJCQltb21lbnRhcmlseS4gKi8NCisJCQl1bE1hdGNoVmFsdWUgLT0gdWxTdG9wcGVkVGltZXJDb21wZW5zYXRpb247DQorCQl9DQogDQotICAgICAgICBpZiggdWxNYXRjaFZhbHVlID4gdWxTdG9wcGVkVGltZXJDb21wZW5zYXRpb24gKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIC8qIENvbXBlbnNhdGUgZm9yIHRoZSBmYWN0IHRoYXQgdGhlIENNVCBpcyBnb2luZyB0byBiZSBzdG9wcGVkDQotICAgICAgICAgICAgICogbW9tZW50YXJpbHkuICovDQotICAgICAgICAgICAgdWxNYXRjaFZhbHVlIC09IHVsU3RvcHBlZFRpbWVyQ29tcGVuc2F0aW9uOw0KLSAgICAgICAgfQ0KKwkJLyogU3RvcCB0aGUgQ01UIG1vbWVudGFyaWx5LiAgVGhlIHRpbWUgdGhlIENNVCBpcyBzdG9wcGVkIGZvciBpcw0KKwkJYWNjb3VudGVkIGZvciBhcyBiZXN0IGl0IGNhbiBiZSwgYnV0IHVzaW5nIHRoZSB0aWNrbGVzcyBtb2RlIHdpbGwNCisJCWluZXZpdGFibHkgcmVzdWx0IGluIHNvbWUgdGlueSBkcmlmdCBvZiB0aGUgdGltZSBtYWludGFpbmVkIGJ5IHRoZQ0KKwkJa2VybmVsIHdpdGggcmVzcGVjdCB0byBjYWxlbmRhciB0aW1lLiAqLw0KKwkJQ01ULkNNU1RSMC5CSVQuU1RSMCA9IDA7DQorCQl3aGlsZSggQ01ULkNNU1RSMC5CSVQuU1RSMCA9PSAxICkNCisJCXsNCisJCQkvKiBOb3RoaW5nIHRvIGRvIGhlcmUuICovDQorCQl9DQogDQotICAgICAgICAvKiBTdG9wIHRoZSBDTVQgbW9tZW50YXJpbHkuICBUaGUgdGltZSB0aGUgQ01UIGlzIHN0b3BwZWQgZm9yIGlzDQotICAgICAgICAgKiBhY2NvdW50ZWQgZm9yIGFzIGJlc3QgaXQgY2FuIGJlLCBidXQgdXNpbmcgdGhlIHRpY2tsZXNzIG1vZGUgd2lsbA0KLSAgICAgICAgICogaW5ldml0YWJseSByZXN1bHQgaW4gc29tZSB0aW55IGRyaWZ0IG9mIHRoZSB0aW1lIG1haW50YWluZWQgYnkgdGhlDQotICAgICAgICAgKiBrZXJuZWwgd2l0aCByZXNwZWN0IHRvIGNhbGVuZGFyIHRpbWUuICovDQotICAgICAgICBDTVQuQ01TVFIwLkJJVC5TVFIwID0gMDsNCisJCS8qIENyaXRpY2FsIHNlY3Rpb24gdXNpbmcgdGhlIGdsb2JhbCBpbnRlcnJ1cHQgYml0IGFzIHRoZSBpIGJpdCBpcw0KKwkJYXV0b21hdGljYWxseSByZXNldCBieSB0aGUgV0FJVCBpbnN0cnVjdGlvbi4gKi8NCisJCV9fYXNtIHZvbGF0aWxlKCAiQ0xSUFNXIGkiICk7DQogDQotICAgICAgICB3aGlsZSggQ01ULkNNU1RSMC5CSVQuU1RSMCA9PSAxICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICAvKiBOb3RoaW5nIHRvIGRvIGhlcmUuICovDQotICAgICAgICB9DQorCQkvKiBUaGUgdGljayBmbGFnIGlzIHNldCB0byBmYWxzZSBiZWZvcmUgc2xlZXBpbmcuICBJZiBpdCBpcyB0cnVlIHdoZW4NCisJCXNsZWVwIG1vZGUgaXMgZXhpdGVkIHRoZW4gc2xlZXAgbW9kZSB3YXMgcHJvYmFibHkgZXhpdGVkIGJlY2F1c2UgdGhlDQorCQl0aWNrIHdhcyBzdXBwcmVzc2VkIGZvciB0aGUgZW50aXJlIHhFeHBlY3RlZElkbGVUaW1lIHBlcmlvZC4gKi8NCisJCXVsVGlja0ZsYWcgPSBwZEZBTFNFOw0KIA0KLSAgICAgICAgLyogQ3JpdGljYWwgc2VjdGlvbiB1c2luZyB0aGUgZ2xvYmFsIGludGVycnVwdCBiaXQgYXMgdGhlIGkgYml0IGlzDQotICAgICAgICAgKiBhdXRvbWF0aWNhbGx5IHJlc2V0IGJ5IHRoZSBXQUlUIGluc3RydWN0aW9uLiAqLw0KLSAgICAgICAgX19hc20gdm9sYXRpbGUgKCAiQ0xSUFNXIGkiICk7DQorCQkvKiBJZiBhIGNvbnRleHQgc3dpdGNoIGlzIHBlbmRpbmcgdGhlbiBhYmFuZG9uIHRoZSBsb3cgcG93ZXIgZW50cnkgYXMNCisJCXRoZSBjb250ZXh0IHN3aXRjaCBtaWdodCBoYXZlIGJlZW4gcGVuZGVkIGJ5IGFuIGV4dGVybmFsIGludGVycnVwdCB0aGF0DQorCQlyZXF1aXJlcyBwcm9jZXNzaW5nLiAqLw0KKwkJZVNsZWVwQWN0aW9uID0gZVRhc2tDb25maXJtU2xlZXBNb2RlU3RhdHVzKCk7DQorCQlpZiggZVNsZWVwQWN0aW9uID09IGVBYm9ydFNsZWVwICkNCisJCXsNCisJCQkvKiBSZXN0YXJ0IHRpY2suICovDQorCQkJQ01ULkNNU1RSMC5CSVQuU1RSMCA9IDE7DQorCQkJX19hc20gdm9sYXRpbGUoICJTRVRQU1cgaSIgKTsNCisJCX0NCisJCWVsc2UgaWYoIGVTbGVlcEFjdGlvbiA9PSBlTm9UYXNrc1dhaXRpbmdUaW1lb3V0ICkNCisJCXsNCisJCQkvKiBQcm90ZWN0aW9uIG9mZi4gKi8NCisJCQlTWVNURU0uUFJDUi5XT1JEID0gcG9ydFVOTE9DS19LRVk7DQogDQotICAgICAgICAvKiBUaGUgdGljayBmbGFnIGlzIHNldCB0byBmYWxzZSBiZWZvcmUgc2xlZXBpbmcuICBJZiBpdCBpcyB0cnVlIHdoZW4NCi0gICAgICAgICAqIHNsZWVwIG1vZGUgaXMgZXhpdGVkIHRoZW4gc2xlZXAgbW9kZSB3YXMgcHJvYmFibHkgZXhpdGVkIGJlY2F1c2UgdGhlDQotICAgICAgICAgKiB0aWNrIHdhcyBzdXBwcmVzc2VkIGZvciB0aGUgZW50aXJlIHhFeHBlY3RlZElkbGVUaW1lIHBlcmlvZC4gKi8NCi0gICAgICAgIHVsVGlja0ZsYWcgPSBwZEZBTFNFOw0KKwkJCS8qIFJlYWR5IGZvciBzb2Z0d2FyZSBzdGFuZGJ5IHdpdGggYWxsIGNsb2NrcyBzdG9wcGVkLiAqLw0KKwkJCVNZU1RFTS5TQllDUi5CSVQuU1NCWSA9IDE7DQogDQotICAgICAgICAvKiBJZiBhIGNvbnRleHQgc3dpdGNoIGlzIHBlbmRpbmcgdGhlbiBhYmFuZG9uIHRoZSBsb3cgcG93ZXIgZW50cnkgYXMNCi0gICAgICAgICAqIHRoZSBjb250ZXh0IHN3aXRjaCBtaWdodCBoYXZlIGJlZW4gcGVuZGVkIGJ5IGFuIGV4dGVybmFsIGludGVycnVwdCB0aGF0DQotICAgICAgICAgKiByZXF1aXJlcyBwcm9jZXNzaW5nLiAqLw0KLSAgICAgICAgZVNsZWVwQWN0aW9uID0gZVRhc2tDb25maXJtU2xlZXBNb2RlU3RhdHVzKCk7DQorCQkJLyogUHJvdGVjdGlvbiBvbi4gKi8NCisJCQlTWVNURU0uUFJDUi5XT1JEID0gcG9ydExPQ0tfS0VZOw0KIA0KLSAgICAgICAgaWYoIGVTbGVlcEFjdGlvbiA9PSBlQWJvcnRTbGVlcCApDQotICAgICAgICB7DQotICAgICAgICAgICAgLyogUmVzdGFydCB0aWNrLiAqLw0KLSAgICAgICAgICAgIENNVC5DTVNUUjAuQklULlNUUjAgPSAxOw0KLSAgICAgICAgICAgIF9fYXNtIHZvbGF0aWxlICggIlNFVFBTVyBpIiApOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZWxzZSBpZiggZVNsZWVwQWN0aW9uID09IGVOb1Rhc2tzV2FpdGluZ1RpbWVvdXQgKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIC8qIFByb3RlY3Rpb24gb2ZmLiAqLw0KLSAgICAgICAgICAgIFNZU1RFTS5QUkNSLldPUkQgPSBwb3J0VU5MT0NLX0tFWTsNCisJCQkvKiBTbGVlcCB1bnRpbCBzb21ldGhpbmcgaGFwcGVucy4gIENhbGxpbmcgcHJ2U2xlZXAoKSB3aWxsDQorCQkJYXV0b21hdGljYWxseSByZXNldCB0aGUgaSBiaXQgaW4gdGhlIFBTVy4gKi8NCisJCQlwcnZTbGVlcCggeEV4cGVjdGVkSWRsZVRpbWUgKTsNCiANCi0gICAgICAgICAgICAvKiBSZWFkeSBmb3Igc29mdHdhcmUgc3RhbmRieSB3aXRoIGFsbCBjbG9ja3Mgc3RvcHBlZC4gKi8NCi0gICAgICAgICAgICBTWVNURU0uU0JZQ1IuQklULlNTQlkgPSAxOw0KKwkJCS8qIFJlc3RhcnQgdGhlIENNVC4gKi8NCisJCQlDTVQuQ01TVFIwLkJJVC5TVFIwID0gMTsNCisJCX0NCisJCWVsc2UNCisJCXsNCisJCQkvKiBQcm90ZWN0aW9uIG9mZi4gKi8NCisJCQlTWVNURU0uUFJDUi5XT1JEID0gcG9ydFVOTE9DS19LRVk7DQogDQotICAgICAgICAgICAgLyogUHJvdGVjdGlvbiBvbi4gKi8NCi0gICAgICAgICAgICBTWVNURU0uUFJDUi5XT1JEID0gcG9ydExPQ0tfS0VZOw0KKwkJCS8qIFJlYWR5IGZvciBkZWVwIHNsZWVwIG1vZGUuICovDQorCQkJU1lTVEVNLk1TVFBDUkMuQklULkRTTFBFID0gMTsNCisJCQlTWVNURU0uTVNUUENSQS5CSVQuTVNUUEEyOCA9IDE7DQorCQkJU1lTVEVNLlNCWUNSLkJJVC5TU0JZID0gMDsNCiANCi0gICAgICAgICAgICAvKiBTbGVlcCB1bnRpbCBzb21ldGhpbmcgaGFwcGVucy4gIENhbGxpbmcgcHJ2U2xlZXAoKSB3aWxsDQotICAgICAgICAgICAgICogYXV0b21hdGljYWxseSByZXNldCB0aGUgaSBiaXQgaW4gdGhlIFBTVy4gKi8NCi0gICAgICAgICAgICBwcnZTbGVlcCggeEV4cGVjdGVkSWRsZVRpbWUgKTsNCisJCQkvKiBQcm90ZWN0aW9uIG9uLiAqLw0KKwkJCVNZU1RFTS5QUkNSLldPUkQgPSBwb3J0TE9DS19LRVk7DQogDQotICAgICAgICAgICAgLyogUmVzdGFydCB0aGUgQ01ULiAqLw0KLSAgICAgICAgICAgIENNVC5DTVNUUjAuQklULlNUUjAgPSAxOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZWxzZQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIC8qIFByb3RlY3Rpb24gb2ZmLiAqLw0KLSAgICAgICAgICAgIFNZU1RFTS5QUkNSLldPUkQgPSBwb3J0VU5MT0NLX0tFWTsNCisJCQkvKiBBZGp1c3QgdGhlIG1hdGNoIHZhbHVlIHRvIHRha2UgaW50byBhY2NvdW50IHRoYXQgdGhlIGN1cnJlbnQNCisJCQl0aW1lIHNsaWNlIGlzIGFscmVhZHkgcGFydGlhbGx5IGNvbXBsZXRlLiAqLw0KKwkJCXVsTWF0Y2hWYWx1ZSAtPSAoIHVpbnQzMl90ICkgQ01UMC5DTUNOVDsNCisJCQlDTVQwLkNNQ09SID0gKCB1aW50MTZfdCApIHVsTWF0Y2hWYWx1ZTsNCiANCi0gICAgICAgICAgICAvKiBSZWFkeSBmb3IgZGVlcCBzbGVlcCBtb2RlLiAqLw0KLSAgICAgICAgICAgIFNZU1RFTS5NU1RQQ1JDLkJJVC5EU0xQRSA9IDE7DQotICAgICAgICAgICAgU1lTVEVNLk1TVFBDUkEuQklULk1TVFBBMjggPSAxOw0KLSAgICAgICAgICAgIFNZU1RFTS5TQllDUi5CSVQuU1NCWSA9IDA7DQorCQkJLyogUmVzdGFydCB0aGUgQ01UIHRvIGNvdW50IHVwIHRvIHRoZSBuZXcgbWF0Y2ggdmFsdWUuICovDQorCQkJQ01UMC5DTUNOVCA9IDA7DQorCQkJQ01ULkNNU1RSMC5CSVQuU1RSMCA9IDE7DQogDQotICAgICAgICAgICAgLyogUHJvdGVjdGlvbiBvbi4gKi8NCi0gICAgICAgICAgICBTWVNURU0uUFJDUi5XT1JEID0gcG9ydExPQ0tfS0VZOw0KKwkJCS8qIFNsZWVwIHVudGlsIHNvbWV0aGluZyBoYXBwZW5zLiAgQ2FsbGluZyBwcnZTbGVlcCgpIHdpbGwNCisJCQlhdXRvbWF0aWNhbGx5IHJlc2V0IHRoZSBpIGJpdCBpbiB0aGUgUFNXLiAqLw0KKwkJCXBydlNsZWVwKCB4RXhwZWN0ZWRJZGxlVGltZSApOw0KIA0KLSAgICAgICAgICAgIC8qIEFkanVzdCB0aGUgbWF0Y2ggdmFsdWUgdG8gdGFrZSBpbnRvIGFjY291bnQgdGhhdCB0aGUgY3VycmVudA0KLSAgICAgICAgICAgICAqIHRpbWUgc2xpY2UgaXMgYWxyZWFkeSBwYXJ0aWFsbHkgY29tcGxldGUuICovDQotICAgICAgICAgICAgdWxNYXRjaFZhbHVlIC09ICggdWludDMyX3QgKSBDTVQwLkNNQ05UOw0KLSAgICAgICAgICAgIENNVDAuQ01DT1IgPSAoIHVpbnQxNl90ICkgdWxNYXRjaFZhbHVlOw0KKwkJCS8qIFN0b3AgQ01ULiAgQWdhaW4sIHRoZSB0aW1lIHRoZSBTeXNUaWNrIGlzIHN0b3BwZWQgZm9yIGlzDQorCQkJYWNjb3VudGVkIGZvciBhcyBiZXN0IGl0IGNhbiBiZSwgYnV0IHVzaW5nIHRoZSB0aWNrbGVzcyBtb2RlIHdpbGwNCisJCQlpbmV2aXRhYmx5IHJlc3VsdCBpbiBzb21lIHRpbnkgZHJpZnQgb2YgdGhlIHRpbWUgbWFpbnRhaW5lZCBieSB0aGUNCisJCQlrZXJuZWwgd2l0aAlyZXNwZWN0IHRvIGNhbGVuZGFyIHRpbWUuICovDQorCQkJQ01ULkNNU1RSMC5CSVQuU1RSMCA9IDA7DQorCQkJd2hpbGUoIENNVC5DTVNUUjAuQklULlNUUjAgPT0gMSApDQorCQkJew0KKwkJCQkvKiBOb3RoaW5nIHRvIGRvIGhlcmUuICovDQorCQkJfQ0KIA0KLSAgICAgICAgICAgIC8qIFJlc3RhcnQgdGhlIENNVCB0byBjb3VudCB1cCB0byB0aGUgbmV3IG1hdGNoIHZhbHVlLiAqLw0KLSAgICAgICAgICAgIENNVDAuQ01DTlQgPSAwOw0KLSAgICAgICAgICAgIENNVC5DTVNUUjAuQklULlNUUjAgPSAxOw0KKwkJCXVsQ3VycmVudENvdW50ID0gKCB1aW50MzJfdCApIENNVDAuQ01DTlQ7DQogDQotICAgICAgICAgICAgLyogU2xlZXAgdW50aWwgc29tZXRoaW5nIGhhcHBlbnMuICBDYWxsaW5nIHBydlNsZWVwKCkgd2lsbA0KLSAgICAgICAgICAgICAqIGF1dG9tYXRpY2FsbHkgcmVzZXQgdGhlIGkgYml0IGluIHRoZSBQU1cuICovDQotICAgICAgICAgICAgcHJ2U2xlZXAoIHhFeHBlY3RlZElkbGVUaW1lICk7DQorCQkJaWYoIHVsVGlja0ZsYWcgIT0gcGRGQUxTRSApDQorCQkJew0KKwkJCQkvKiBUaGUgdGljayBpbnRlcnJ1cHQgaGFzIGFscmVhZHkgZXhlY3V0ZWQsIGFsdGhvdWdoIGJlY2F1c2UNCisJCQkJdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB0aGUgc2NoZWR1bGVyIHN1c3BlbmRlZCB0aGUgYWN0dWFsDQorCQkJCXRpY2sgcHJvY2Vzc2luZyB3aWxsIG5vdCBvY2N1ciB1bnRpbCBhZnRlciB0aGlzIGZ1bmN0aW9uIGhhcw0KKwkJCQlleGl0ZWQuICBSZXNldCB0aGUgbWF0Y2ggdmFsdWUgd2l0aCB3aGF0ZXZlciByZW1haW5zIG9mIHRoaXMNCisJCQkJdGljayBwZXJpb2QuICovDQorCQkJCXVsTWF0Y2hWYWx1ZSA9IHVsTWF0Y2hWYWx1ZUZvck9uZVRpY2sgLSB1bEN1cnJlbnRDb3VudDsNCisJCQkJQ01UMC5DTUNPUiA9ICggdWludDE2X3QgKSB1bE1hdGNoVmFsdWU7DQogDQotICAgICAgICAgICAgLyogU3RvcCBDTVQuICBBZ2FpbiwgdGhlIHRpbWUgdGhlIFN5c1RpY2sgaXMgc3RvcHBlZCBmb3IgaXMNCi0gICAgICAgICAgICAgKiBhY2NvdW50ZWQgZm9yIGFzIGJlc3QgaXQgY2FuIGJlLCBidXQgdXNpbmcgdGhlIHRpY2tsZXNzIG1vZGUgd2lsbA0KLSAgICAgICAgICAgICAqIGluZXZpdGFibHkgcmVzdWx0IGluIHNvbWUgdGlueSBkcmlmdCBvZiB0aGUgdGltZSBtYWludGFpbmVkIGJ5IHRoZQ0KLSAgICAgICAgICAgICAqIGtlcm5lbCB3aXRoCXJlc3BlY3QgdG8gY2FsZW5kYXIgdGltZS4gKi8NCi0gICAgICAgICAgICBDTVQuQ01TVFIwLkJJVC5TVFIwID0gMDsNCisJCQkJLyogVGhlIHRpY2sgaW50ZXJydXB0IGhhbmRsZXIgd2lsbCBhbHJlYWR5IGhhdmUgcGVuZGVkIHRoZSB0aWNrDQorCQkJCXByb2Nlc3NpbmcgaW4gdGhlIGtlcm5lbC4gIEFzIHRoZSBwZW5kaW5nIHRpY2sgd2lsbCBiZQ0KKwkJCQlwcm9jZXNzZWQgYXMgc29vbiBhcyB0aGlzIGZ1bmN0aW9uIGV4aXRzLCB0aGUgdGljayB2YWx1ZQ0KKwkJCQltYWludGFpbmVkIGJ5IHRoZSB0aWNrIGlzIHN0ZXBwZWQgZm9yd2FyZCBieSBvbmUgbGVzcyB0aGFuIHRoZQ0KKwkJCQl0aW1lIHNwZW50IHNsZWVwaW5nLiAgVGhlIGFjdHVhbCBzdGVwcGluZyBvZiB0aGUgdGljayBhcHBlYXJzDQorCQkJCWxhdGVyIGluIHRoaXMgZnVuY3Rpb24uICovDQorCQkJCXVsQ29tcGxldGVUaWNrUGVyaW9kcyA9IHhFeHBlY3RlZElkbGVUaW1lIC0gMVVMOw0KKwkJCX0NCisJCQllbHNlDQorCQkJew0KKwkJCQkvKiBTb21ldGhpbmcgb3RoZXIgdGhhbiB0aGUgdGljayBpbnRlcnJ1cHQgZW5kZWQgdGhlIHNsZWVwLg0KKwkJCQlIb3cJbWFueSBjb21wbGV0ZSB0aWNrIHBlcmlvZHMgcGFzc2VkIHdoaWxlIHRoZSBwcm9jZXNzb3Igd2FzDQorCQkJCXNsZWVwaW5nPyAqLw0KKwkJCQl1bENvbXBsZXRlVGlja1BlcmlvZHMgPSB1bEN1cnJlbnRDb3VudCAvIHVsTWF0Y2hWYWx1ZUZvck9uZVRpY2s7DQogDQotICAgICAgICAgICAgd2hpbGUoIENNVC5DTVNUUjAuQklULlNUUjAgPT0gMSApDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAvKiBOb3RoaW5nIHRvIGRvIGhlcmUuICovDQotICAgICAgICAgICAgfQ0KKwkJCQkvKiBUaGUgbWF0Y2ggdmFsdWUgaXMgc2V0IHRvIHdoYXRldmVyIGZyYWN0aW9uIG9mIGEgc2luZ2xlIHRpY2sNCisJCQkJcGVyaW9kIHJlbWFpbnMuICovDQorCQkJCXVsTWF0Y2hWYWx1ZSA9IHVsQ3VycmVudENvdW50IC0gKCB1bENvbXBsZXRlVGlja1BlcmlvZHMgKiB1bE1hdGNoVmFsdWVGb3JPbmVUaWNrICk7DQorCQkJCUNNVDAuQ01DT1IgPSAoIHVpbnQxNl90ICkgdWxNYXRjaFZhbHVlOw0KKwkJCX0NCiANCi0gICAgICAgICAgICB1bEN1cnJlbnRDb3VudCA9ICggdWludDMyX3QgKSBDTVQwLkNNQ05UOw0KKwkJCS8qIFJlc3RhcnQgdGhlIENNVCBzbyBpdCBydW5zIHVwIHRvIHRoZSBtYXRjaCB2YWx1ZS4gIFRoZSBtYXRjaCB2YWx1ZQ0KKwkJCXdpbGwgZ2V0IHNldCB0byB0aGUgdmFsdWUgcmVxdWlyZWQgdG8gZ2VuZXJhdGUgZXhhY3RseSBvbmUgdGljayBwZXJpb2QNCisJCQl0aGUgbmV4dCB0aW1lIHRoZSBDTVQgaW50ZXJydXB0IGV4ZWN1dGVzLiAqLw0KKwkJCUNNVDAuQ01DTlQgPSAwOw0KKwkJCUNNVC5DTVNUUjAuQklULlNUUjAgPSAxOw0KIA0KLSAgICAgICAgICAgIGlmKCB1bFRpY2tGbGFnICE9IHBkRkFMU0UgKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgLyogVGhlIHRpY2sgaW50ZXJydXB0IGhhcyBhbHJlYWR5IGV4ZWN1dGVkLCBhbHRob3VnaCBiZWNhdXNlDQotICAgICAgICAgICAgICAgICAqIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdGhlIHNjaGVkdWxlciBzdXNwZW5kZWQgdGhlIGFjdHVhbA0KLSAgICAgICAgICAgICAgICAgKiB0aWNrIHByb2Nlc3Npbmcgd2lsbCBub3Qgb2NjdXIgdW50aWwgYWZ0ZXIgdGhpcyBmdW5jdGlvbiBoYXMNCi0gICAgICAgICAgICAgICAgICogZXhpdGVkLiAgUmVzZXQgdGhlIG1hdGNoIHZhbHVlIHdpdGggd2hhdGV2ZXIgcmVtYWlucyBvZiB0aGlzDQotICAgICAgICAgICAgICAgICAqIHRpY2sgcGVyaW9kLiAqLw0KLSAgICAgICAgICAgICAgICB1bE1hdGNoVmFsdWUgPSB1bE1hdGNoVmFsdWVGb3JPbmVUaWNrIC0gdWxDdXJyZW50Q291bnQ7DQotICAgICAgICAgICAgICAgIENNVDAuQ01DT1IgPSAoIHVpbnQxNl90ICkgdWxNYXRjaFZhbHVlOw0KLQ0KLSAgICAgICAgICAgICAgICAvKiBUaGUgdGljayBpbnRlcnJ1cHQgaGFuZGxlciB3aWxsIGFscmVhZHkgaGF2ZSBwZW5kZWQgdGhlIHRpY2sNCi0gICAgICAgICAgICAgICAgICogcHJvY2Vzc2luZyBpbiB0aGUga2VybmVsLiAgQXMgdGhlIHBlbmRpbmcgdGljayB3aWxsIGJlDQotICAgICAgICAgICAgICAgICAqIHByb2Nlc3NlZCBhcyBzb29uIGFzIHRoaXMgZnVuY3Rpb24gZXhpdHMsIHRoZSB0aWNrIHZhbHVlDQotICAgICAgICAgICAgICAgICAqIG1haW50YWluZWQgYnkgdGhlIHRpY2sgaXMgc3RlcHBlZCBmb3J3YXJkIGJ5IG9uZSBsZXNzIHRoYW4gdGhlDQotICAgICAgICAgICAgICAgICAqIHRpbWUgc3BlbnQgc2xlZXBpbmcuICBUaGUgYWN0dWFsIHN0ZXBwaW5nIG9mIHRoZSB0aWNrIGFwcGVhcnMNCi0gICAgICAgICAgICAgICAgICogbGF0ZXIgaW4gdGhpcyBmdW5jdGlvbi4gKi8NCi0gICAgICAgICAgICAgICAgdWxDb21wbGV0ZVRpY2tQZXJpb2RzID0geEV4cGVjdGVkSWRsZVRpbWUgLSAxVUw7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGVsc2UNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIC8qIFNvbWV0aGluZyBvdGhlciB0aGFuIHRoZSB0aWNrIGludGVycnVwdCBlbmRlZCB0aGUgc2xlZXAuDQotICAgICAgICAgICAgICAgICAqIEhvdwltYW55IGNvbXBsZXRlIHRpY2sgcGVyaW9kcyBwYXNzZWQgd2hpbGUgdGhlIHByb2Nlc3NvciB3YXMNCi0gICAgICAgICAgICAgICAgICogc2xlZXBpbmc/ICovDQotICAgICAgICAgICAgICAgIHVsQ29tcGxldGVUaWNrUGVyaW9kcyA9IHVsQ3VycmVudENvdW50IC8gdWxNYXRjaFZhbHVlRm9yT25lVGljazsNCi0NCi0gICAgICAgICAgICAgICAgLyogVGhlIG1hdGNoIHZhbHVlIGlzIHNldCB0byB3aGF0ZXZlciBmcmFjdGlvbiBvZiBhIHNpbmdsZSB0aWNrDQotICAgICAgICAgICAgICAgICAqIHBlcmlvZCByZW1haW5zLiAqLw0KLSAgICAgICAgICAgICAgICB1bE1hdGNoVmFsdWUgPSB1bEN1cnJlbnRDb3VudCAtICggdWxDb21wbGV0ZVRpY2tQZXJpb2RzICogdWxNYXRjaFZhbHVlRm9yT25lVGljayApOw0KLSAgICAgICAgICAgICAgICBDTVQwLkNNQ09SID0gKCB1aW50MTZfdCApIHVsTWF0Y2hWYWx1ZTsNCi0gICAgICAgICAgICB9DQotDQotICAgICAgICAgICAgLyogUmVzdGFydCB0aGUgQ01UIHNvIGl0IHJ1bnMgdXAgdG8gdGhlIG1hdGNoIHZhbHVlLiAgVGhlIG1hdGNoIHZhbHVlDQotICAgICAgICAgICAgICogd2lsbCBnZXQgc2V0IHRvIHRoZSB2YWx1ZSByZXF1aXJlZCB0byBnZW5lcmF0ZSBleGFjdGx5IG9uZSB0aWNrIHBlcmlvZA0KLSAgICAgICAgICAgICAqIHRoZSBuZXh0IHRpbWUgdGhlIENNVCBpbnRlcnJ1cHQgZXhlY3V0ZXMuICovDQotICAgICAgICAgICAgQ01UMC5DTUNOVCA9IDA7DQotICAgICAgICAgICAgQ01ULkNNU1RSMC5CSVQuU1RSMCA9IDE7DQotDQotICAgICAgICAgICAgLyogV2luZCB0aGUgdGljayBmb3J3YXJkIGJ5IHRoZSBudW1iZXIgb2YgdGljayBwZXJpb2RzIHRoYXQgdGhlIENQVQ0KLSAgICAgICAgICAgICAqIHJlbWFpbmVkIGluIGEgbG93IHBvd2VyIHN0YXRlLiAqLw0KLSAgICAgICAgICAgIHZUYXNrU3RlcFRpY2soIHVsQ29tcGxldGVUaWNrUGVyaW9kcyApOw0KLSAgICAgICAgfQ0KLSAgICB9DQorCQkJLyogV2luZCB0aGUgdGljayBmb3J3YXJkIGJ5IHRoZSBudW1iZXIgb2YgdGljayBwZXJpb2RzIHRoYXQgdGhlIENQVQ0KKwkJCXJlbWFpbmVkIGluIGEgbG93IHBvd2VyIHN0YXRlLiAqLw0KKwkJCXZUYXNrU3RlcFRpY2soIHVsQ29tcGxldGVUaWNrUGVyaW9kcyApOw0KKwkJfQ0KKwl9DQogDQogI2VuZGlmIC8qIGNvbmZpZ1VTRV9USUNLTEVTU19JRExFICovDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvR0NDL1JYMTAwL3BvcnRtYWNyby5oIGIvcG9ydGFibGUvR0NDL1JYMTAwL3BvcnRtYWNyby5oCmluZGV4IGZiMzU2ZTguLjc3ZTkxYTEgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0dDQy9SWDEwMC9wb3J0bWFjcm8uaAorKysgYi9wb3J0YWJsZS9HQ0MvUlgxMDAvcG9ydG1hY3JvLmgKQEAgLTI3LDExICsyNywxMSBAQAogDQogDQogI2lmbmRlZiBQT1JUTUFDUk9fSA0KLSAgICAjZGVmaW5lIFBPUlRNQUNST19IDQorI2RlZmluZSBQT1JUTUFDUk9fSA0KIA0KLSAgICAjaWZkZWYgX19jcGx1c3BsdXMNCi0gICAgICAgIGV4dGVybiAiQyIgew0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICogUG9ydCBzcGVjaWZpYyBkZWZpbml0aW9ucy4NCkBAIC00NCwxMDAgKzQ0LDEwMSBAQAogICovDQogDQogLyogVHlwZSBkZWZpbml0aW9ucyAtIHRoZXNlIGFyZSBhIGJpdCBsZWdhY3kgYW5kIG5vdCByZWFsbHkgdXNlZCBub3csIG90aGVyIHRoYW4NCi0gKiBwb3J0U1RBQ0tfVFlQRSBhbmQgcG9ydEJBU0VfVFlQRS4gKi8NCi0gICAgI2RlZmluZSBwb3J0Q0hBUiAgICAgICAgICBjaGFyDQotICAgICNkZWZpbmUgcG9ydEZMT0FUICAgICAgICAgZmxvYXQNCi0gICAgI2RlZmluZSBwb3J0RE9VQkxFICAgICAgICBkb3VibGUNCi0gICAgI2RlZmluZSBwb3J0TE9ORyAgICAgICAgICBsb25nDQotICAgICNkZWZpbmUgcG9ydFNIT1JUICAgICAgICAgc2hvcnQNCi0gICAgI2RlZmluZSBwb3J0U1RBQ0tfVFlQRSAgICB1aW50MzJfdA0KLSAgICAjZGVmaW5lIHBvcnRCQVNFX1RZUEUgICAgIGxvbmcNCitwb3J0U1RBQ0tfVFlQRSBhbmQgcG9ydEJBU0VfVFlQRS4gKi8NCisjZGVmaW5lIHBvcnRDSEFSCQljaGFyDQorI2RlZmluZSBwb3J0RkxPQVQJCWZsb2F0DQorI2RlZmluZSBwb3J0RE9VQkxFCQlkb3VibGUNCisjZGVmaW5lIHBvcnRMT05HCQlsb25nDQorI2RlZmluZSBwb3J0U0hPUlQJCXNob3J0DQorI2RlZmluZSBwb3J0U1RBQ0tfVFlQRQl1aW50MzJfdA0KKyNkZWZpbmUgcG9ydEJBU0VfVFlQRQlsb25nDQogDQotICAgIHR5cGVkZWYgcG9ydFNUQUNLX1RZUEUgICBTdGFja1R5cGVfdDsNCi0gICAgdHlwZWRlZiBsb25nICAgICAgICAgICAgIEJhc2VUeXBlX3Q7DQotICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyAgICBVQmFzZVR5cGVfdDsNCit0eXBlZGVmIHBvcnRTVEFDS19UWVBFIFN0YWNrVHlwZV90Ow0KK3R5cGVkZWYgbG9uZyBCYXNlVHlwZV90Ow0KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBVQmFzZVR5cGVfdDsNCiANCi0gICAgI2lmICggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCi0gICAgICAgIHR5cGVkZWYgdWludDE2X3QgICAgIFRpY2tUeXBlX3Q7DQotICAgICAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgICAgICAgICAgICggVGlja1R5cGVfdCApIDB4ZmZmZg0KLSAgICAjZWxzZQ0KLSAgICAgICAgdHlwZWRlZiB1aW50MzJfdCAgICAgVGlja1R5cGVfdDsNCi0gICAgICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAgICAgICAgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQorI2lmKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KKwl0eXBlZGVmIHVpbnQxNl90IFRpY2tUeXBlX3Q7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIFRpY2tUeXBlX3QgKSAweGZmZmYNCisjZWxzZQ0KKwl0eXBlZGVmIHVpbnQzMl90IFRpY2tUeXBlX3Q7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwNCiANCi0vKiAzMi1iaXQgdGljayB0eXBlIG9uIGEgMzItYml0IGFyY2hpdGVjdHVyZSwgc28gcmVhZHMgb2YgdGhlIHRpY2sgY291bnQgZG8NCi0gKiBub3QgbmVlZCB0byBiZSBndWFyZGVkIHdpdGggYSBjcml0aWNhbCBzZWN0aW9uLiAqLw0KLSAgICAgICAgI2RlZmluZSBwb3J0VElDS19UWVBFX0lTX0FUT01JQyAgICAxDQotICAgICNlbmRpZg0KKwkvKiAzMi1iaXQgdGljayB0eXBlIG9uIGEgMzItYml0IGFyY2hpdGVjdHVyZSwgc28gcmVhZHMgb2YgdGhlIHRpY2sgY291bnQgZG8NCisJbm90IG5lZWQgdG8gYmUgZ3VhcmRlZCB3aXRoIGEgY3JpdGljYWwgc2VjdGlvbi4gKi8NCisJI2RlZmluZSBwb3J0VElDS19UWVBFX0lTX0FUT01JQyAxDQorI2VuZGlmDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogSGFyZHdhcmUgc3BlY2lmaWNzLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVCAgICA4ICAgICAvKiBDb3VsZCBtYWtlIGZvdXIsIGFjY29yZGluZyB0byBtYW51YWwuICovDQotICAgICNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSCAgICAgIC0xDQotICAgICNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TICAgICggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQotICAgICNkZWZpbmUgcG9ydE5PUCgpICAgIF9fYXNtIHZvbGF0aWxlICggIk5PUCIgKQ0KKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UCQkJOAkvKiBDb3VsZCBtYWtlIGZvdXIsIGFjY29yZGluZyB0byBtYW51YWwuICovDQorI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RICQkJLTENCisjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUwkJCSggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQorI2RlZmluZSBwb3J0Tk9QKCkJCQkJCV9fYXNtIHZvbGF0aWxlKCAiTk9QIiApDQogDQogLyogU2F2ZSBjbG9iYmVyZWQgcmVnaXN0ZXIsIHNldCBJVFUgU1dJTlIgKGF0IGFkZHJlc3MgMHg4NzJFMCksIHJlYWQgdGhlIHZhbHVlDQotICogYmFjayB0byBlbnN1cmUgaXQgaXMgc2V0IGJlZm9yZSBjb250aW51aW5nLCB0aGVuIHJlc3RvcmUgdGhlIGNsb2JiZXJlZA0KLSAqIHJlZ2lzdGVyLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRZSUVMRCgpICAgICAgICAgICAgIFwNCi0gICAgX19hc20gdm9sYXRpbGUgICAgICAgICAgICAgICAgICBcDQotICAgICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgIk1PVi5MICMweDg3MkUwLCByNQkJCVxuXHQiXA0KLSAgICAgICAgIk1PVi5CICMxLCBbcjVdCQkJCVxuXHQiXA0KLSAgICAgICAgIk1PVi5MIFtyNV0sIHI1CQkJCVxuXHQiXA0KLSAgICAgICAgOjo6ICJyNSIgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgKQ0KK2JhY2sgdG8gZW5zdXJlIGl0IGlzIHNldCBiZWZvcmUgY29udGludWluZywgdGhlbiByZXN0b3JlIHRoZSBjbG9iYmVyZWQNCityZWdpc3Rlci4gKi8NCisjZGVmaW5lIHBvcnRZSUVMRCgpCQkJCQkJCVwNCisJX19hc20gdm9sYXRpbGUJCQkJCQkJXA0KKwkoCQkJCQkJCQkJCVwNCisJCSJNT1YuTCAjMHg4NzJFMCwgcjUJCQlcblx0IglcDQorCQkiTU9WLkIgIzEsIFtyNV0JCQkJXG5cdCIJXA0KKwkJIk1PVi5MIFtyNV0sIHI1CQkJCVxuXHQiCVwNCisJCTo6OiAicjUiCQkJCQkJCVwNCisJKQ0KIA0KLSAgICAjZGVmaW5lIHBvcnRZSUVMRF9GUk9NX0lTUiggeCApICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIHggIT0gcGRGQUxTRSApIHsgcG9ydFlJRUxEKCk7IH0NCisjZGVmaW5lIHBvcnRZSUVMRF9GUk9NX0lTUiggeCApCWlmKCB4ICE9IHBkRkFMU0UgKSB7IHBvcnRZSUVMRCgpOyB9DQogDQogLyogVGhlc2UgbWFjcm9zIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LCBidXQgdGhyb3VnaCB0aGUNCi0gKiB0YXNrRU5URVJfQ1JJVElDQUwoKSBhbmQgdGFza0VYSVRfQ1JJVElDQUwoKSBtYWNyb3MuICBBbiBleHRyYSBjaGVjayBpcw0KLSAqIHBlcmZvcm1lZCBpZiBjb25maWdBU1NFUlQoKSBpcyBkZWZpbmVkIHRvIGVuc3VyZSBhbiBhc3NlcnRpb24gaGFuZGxlciBkb2VzIG5vdA0KLSAqIGluYWR2ZXJ0ZW50bHkgYXR0ZW1wdCB0byBsb3dlciB0aGUgSVBMIHdoZW4gdGhlIGNhbGwgdG8gYXNzZXJ0IHdhcyB0cmlnZ2VyZWQNCi0gKiBiZWNhdXNlIHRoZSBJUEwgdmFsdWUgd2FzIGZvdW5kIHRvIGJlIGFib3ZlCWNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWQ0KLSAqIHdoZW4gYW4gSVNSIHNhZmUgRnJlZVJUT1MgQVBJIGZ1bmN0aW9uIHdhcyBleGVjdXRlZC4gIElTUiBzYWZlIEZyZWVSVE9TIEFQSQ0KLSAqIGZ1bmN0aW9ucyBhcmUgdGhvc2UgdGhhdCBlbmQgaW4gRnJvbUlTUi4gIEZyZWVSVE9TIG1haW50YWlucyBhIHNlcGFyYXRlDQotICogaW50ZXJydXB0IEFQSSB0byBlbnN1cmUgQVBJIGZ1bmN0aW9uIGFuZCBpbnRlcnJ1cHQgZW50cnkgaXMgYXMgZmFzdCBhbmQgYXMNCi0gKiBzaW1wbGUgYXMgcG9zc2libGUuICovDQotICAgICNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2FzbSB2b2xhdGlsZSAoICJNVlRJUEwJIzAiKQ0KLSAgICAjaWZkZWYgY29uZmlnQVNTRVJUDQotICAgICAgICAjZGVmaW5lIHBvcnRBU1NFUlRfSUZfSU5URVJSVVBUX1BSSU9SSVRZX0lOVkFMSUQoKSAgICBjb25maWdBU1NFUlQoICggdWxQb3J0R2V0SVBMKCkgPD0gY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkgKQ0KLSAgICAgICAgI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgICAgICAgICAgICAgICAgICAgICAgaWYoIHVsUG9ydEdldElQTCgpIDwgY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkgX19hc20gdm9sYXRpbGUgKCAiTVZUSVBMCSUwIjo6ImkiICggY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkgKQ0KLSAgICAjZWxzZQ0KLSAgICAgICAgI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgICAgICAgICAgICAgICAgICAgICAgX19hc20gdm9sYXRpbGUgKCAiTVZUSVBMCSUwIjo6ImkiICggY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkgKQ0KLSAgICAjZW5kaWYNCit0YXNrRU5URVJfQ1JJVElDQUwoKSBhbmQgdGFza0VYSVRfQ1JJVElDQUwoKSBtYWNyb3MuICBBbiBleHRyYSBjaGVjayBpcw0KK3BlcmZvcm1lZCBpZiBjb25maWdBU1NFUlQoKSBpcyBkZWZpbmVkIHRvIGVuc3VyZSBhbiBhc3NlcnRpb24gaGFuZGxlciBkb2VzIG5vdA0KK2luYWR2ZXJ0ZW50bHkgYXR0ZW1wdCB0byBsb3dlciB0aGUgSVBMIHdoZW4gdGhlIGNhbGwgdG8gYXNzZXJ0IHdhcyB0cmlnZ2VyZWQNCitiZWNhdXNlIHRoZSBJUEwgdmFsdWUgd2FzIGZvdW5kIHRvIGJlIGFib3ZlCWNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWQ0KK3doZW4gYW4gSVNSIHNhZmUgRnJlZVJUT1MgQVBJIGZ1bmN0aW9uIHdhcyBleGVjdXRlZC4gIElTUiBzYWZlIEZyZWVSVE9TIEFQSQ0KK2Z1bmN0aW9ucyBhcmUgdGhvc2UgdGhhdCBlbmQgaW4gRnJvbUlTUi4gIEZyZWVSVE9TIG1haW50YWlucyBhIHNlcGFyYXRlDQoraW50ZXJydXB0IEFQSSB0byBlbnN1cmUgQVBJIGZ1bmN0aW9uIGFuZCBpbnRlcnJ1cHQgZW50cnkgaXMgYXMgZmFzdCBhbmQgYXMNCitzaW1wbGUgYXMgcG9zc2libGUuICovDQorI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKSAJX19hc20gdm9sYXRpbGUgKCAiTVZUSVBMCSMwIiApDQorI2lmZGVmIGNvbmZpZ0FTU0VSVA0KKwkjZGVmaW5lIHBvcnRBU1NFUlRfSUZfSU5URVJSVVBUX1BSSU9SSVRZX0lOVkFMSUQoKSBjb25maWdBU1NFUlQoICggdWxQb3J0R2V0SVBMKCkgPD0gY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkgKQ0KKwkjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAJaWYoIHVsUG9ydEdldElQTCgpIDwgY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkgX19hc20gdm9sYXRpbGUgKCAiTVZUSVBMCSUwIiA6OiJpIihjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkpICkNCisjZWxzZQ0KKwkjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAJX19hc20gdm9sYXRpbGUgKCAiTVZUSVBMCSUwIiA6OiJpIihjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkpICkNCisjZW5kaWYNCiANCiAvKiBDcml0aWNhbCBuZXN0aW5nIGNvdW50cyBhcmUgc3RvcmVkIGluIHRoZSBUQ0IuICovDQotICAgICNkZWZpbmUgcG9ydENSSVRJQ0FMX05FU1RJTkdfSU5fVENCICAgICggMSApDQorI2RlZmluZSBwb3J0Q1JJVElDQUxfTkVTVElOR19JTl9UQ0IgKCAxICkNCiANCiAvKiBUaGUgY3JpdGljYWwgbmVzdGluZyBmdW5jdGlvbnMgZGVmaW5lZCB3aXRoaW4gdGFza3MuYy4gKi8NCi0gICAgZXh0ZXJuIHZvaWQgdlRhc2tFbnRlckNyaXRpY2FsKCB2b2lkICk7DQotICAgIGV4dGVybiB2b2lkIHZUYXNrRXhpdENyaXRpY2FsKCB2b2lkICk7DQotICAgICNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgICAgdlRhc2tFbnRlckNyaXRpY2FsKCkNCi0gICAgI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpICAgICB2VGFza0V4aXRDcml0aWNhbCgpDQorZXh0ZXJuIHZvaWQgdlRhc2tFbnRlckNyaXRpY2FsKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdlRhc2tFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCisjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpCXZUYXNrRW50ZXJDcml0aWNhbCgpDQorI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpCQl2VGFza0V4aXRDcml0aWNhbCgpDQogDQogLyogQXMgdGhpcyBwb3J0IGFsbG93cyBpbnRlcnJ1cHQgbmVzdGluZy4uLiAqLw0KLSAgICB1aW50MzJfdCB1bFBvcnRHZXRJUEwoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fKCAoIG5ha2VkICkgKTsNCi0gICAgdm9pZCB2UG9ydFNldElQTCggdWludDMyX3QgdWxOZXdJUEwgKSBfX2F0dHJpYnV0ZV9fKCAoIG5ha2VkICkgKTsNCi0gICAgI2RlZmluZSBwb3J0U0VUX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bFBvcnRHZXRJUEwoKTsgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpDQotICAgICNkZWZpbmUgcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCB1eFNhdmVkSW50ZXJydXB0U3RhdHVzICkgICAgdlBvcnRTZXRJUEwoIHV4U2F2ZWRJbnRlcnJ1cHRTdGF0dXMgKQ0KK3VpbnQzMl90IHVsUG9ydEdldElQTCggdm9pZCApIF9fYXR0cmlidXRlX18oKG5ha2VkKSk7DQordm9pZCB2UG9ydFNldElQTCggdWludDMyX3QgdWxOZXdJUEwgKSBfX2F0dHJpYnV0ZV9fKChuYWtlZCkpOw0KKyNkZWZpbmUgcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpIHVsUG9ydEdldElQTCgpOyBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkNCisjZGVmaW5lIHBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUiggdXhTYXZlZEludGVycnVwdFN0YXR1cyApIHZQb3J0U2V0SVBMKCB1eFNhdmVkSW50ZXJydXB0U3RhdHVzICkNCiANCiAvKiBUaWNrbGVzcyBpZGxlL2xvdyBwb3dlciBmdW5jdGlvbmFsaXR5LiAqLw0KLSAgICAjaWYgY29uZmlnVVNFX1RJQ0tMRVNTX0lETEUgPT0gMQ0KLSAgICAgICAgI2lmbmRlZiBwb3J0U1VQUFJFU1NfVElDS1NfQU5EX1NMRUVQDQotICAgICAgICAgICAgZXh0ZXJuIHZvaWQgdlBvcnRTdXBwcmVzc1RpY2tzQW5kU2xlZXAoIFRpY2tUeXBlX3QgeEV4cGVjdGVkSWRsZVRpbWUgKTsNCi0gICAgICAgICAgICAjZGVmaW5lIHBvcnRTVVBQUkVTU19USUNLU19BTkRfU0xFRVAoIHhFeHBlY3RlZElkbGVUaW1lICkgICAgdlBvcnRTdXBwcmVzc1RpY2tzQW5kU2xlZXAoIHhFeHBlY3RlZElkbGVUaW1lICkNCi0gICAgICAgICNlbmRpZg0KLSAgICAjZW5kaWYNCisjaWYgY29uZmlnVVNFX1RJQ0tMRVNTX0lETEUgPT0gMQ0KKwkjaWZuZGVmIHBvcnRTVVBQUkVTU19USUNLU19BTkRfU0xFRVANCisJCWV4dGVybiB2b2lkIHZQb3J0U3VwcHJlc3NUaWNrc0FuZFNsZWVwKCBUaWNrVHlwZV90IHhFeHBlY3RlZElkbGVUaW1lICk7DQorCQkjZGVmaW5lIHBvcnRTVVBQUkVTU19USUNLU19BTkRfU0xFRVAoIHhFeHBlY3RlZElkbGVUaW1lICkgdlBvcnRTdXBwcmVzc1RpY2tzQW5kU2xlZXAoIHhFeHBlY3RlZElkbGVUaW1lICkNCisJI2VuZGlmDQorI2VuZGlmDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQotICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KLSAgICAjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgICAgICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgfQ0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQogDQogI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvR0NDL1JYNjAwL3BvcnQuYyBiL3BvcnRhYmxlL0dDQy9SWDYwMC9wb3J0LmMKaW5kZXggMTVmMmE2Yy4uNDIyYjZjNyAxMDA2NDQKLS0tIGEvcG9ydGFibGUvR0NDL1JYNjAwL3BvcnQuYworKysgYi9wb3J0YWJsZS9HQ0MvUlg2MDAvcG9ydC5jCkBAIC0yNiw4ICsyNiw4IEBACiAgKi8NCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgU0gyQSBwb3J0Lg0KLSotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgU0gyQSBwb3J0Lg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogU2NoZWR1bGVyIGluY2x1ZGVzLiAqLw0KICNpbmNsdWRlICJGcmVlUlRPUy5oIg0KQEAgLTQyLDE3ICs0MiwxNyBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGFza3Mgc2hvdWxkIHN0YXJ0IHdpdGggaW50ZXJydXB0cyBlbmFibGVkIGFuZCBpbiBTdXBlcnZpc29yIG1vZGUsIHRoZXJlZm9yZQ0KLSAqIFBTVyBpcyBzZXQgd2l0aCBVIGFuZCBJIHNldCwgYW5kIFBNIGFuZCBJUEwgY2xlYXIuICovDQorUFNXIGlzIHNldCB3aXRoIFUgYW5kIEkgc2V0LCBhbmQgUE0gYW5kIElQTCBjbGVhci4gKi8NCiAjZGVmaW5lIHBvcnRJTklUSUFMX1BTVyAgICAgKCAoIFN0YWNrVHlwZV90ICkgMHgwMDAzMDAwMCApDQogI2RlZmluZSBwb3J0SU5JVElBTF9GUFNXICAgICggKCBTdGFja1R5cGVfdCApIDB4MDAwMDAxMDAgKQ0KIA0KIC8qIFRoZXNlIG1hY3JvcyBhbGxvdyBhIGNyaXRpY2FsIHNlY3Rpb24gdG8gYmUgYWRkZWQgYXJvdW5kIHRoZSBjYWxsIHRvDQotICogeFRhc2tJbmNyZW1lbnRUaWNrKCksIHdoaWNoIGlzIG9ubHkgZXZlciBjYWxsZWQgZnJvbSBpbnRlcnJ1cHRzIGF0IHRoZSBrZXJuZWwNCi0gKiBwcmlvcml0eSAtIGllIGEga25vd24gcHJpb3JpdHkuICBUaGVyZWZvcmUgdGhlc2UgbG9jYWwgbWFjcm9zIGFyZSBhIHNsaWdodA0KLSAqIG9wdGltaXNhdGlvbiBjb21wYXJlZCB0byBjYWxsaW5nIHRoZSBnbG9iYWwgU0VUL0NMRUFSX0lOVEVSUlVQVF9NQVNLIG1hY3JvcywNCi0gKiB3aGljaCB3b3VsZCByZXF1aXJlIHRoZSBvbGQgSVBMIHRvIGJlIHJlYWQgZmlyc3QgYW5kIHN0b3JlZCBpbiBhIGxvY2FsIHZhcmlhYmxlLiAqLw0KLSNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUU19GUk9NX0tFUk5FTF9JU1IoKSAgICBfX2FzbSB2b2xhdGlsZSAoICJNVlRJUEwJJTAiOjoiaSIgKCBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgKSApDQotI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFNfRlJPTV9LRVJORUxfSVNSKCkgICAgIF9fYXNtIHZvbGF0aWxlICggIk1WVElQTAklMCI6OiJpIiAoIGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkgKSApDQoreFRhc2tJbmNyZW1lbnRUaWNrKCksIHdoaWNoIGlzIG9ubHkgZXZlciBjYWxsZWQgZnJvbSBpbnRlcnJ1cHRzIGF0IHRoZSBrZXJuZWwNCitwcmlvcml0eSAtIGllIGEga25vd24gcHJpb3JpdHkuICBUaGVyZWZvcmUgdGhlc2UgbG9jYWwgbWFjcm9zIGFyZSBhIHNsaWdodA0KK29wdGltaXNhdGlvbiBjb21wYXJlZCB0byBjYWxsaW5nIHRoZSBnbG9iYWwgU0VUL0NMRUFSX0lOVEVSUlVQVF9NQVNLIG1hY3JvcywNCit3aGljaCB3b3VsZCByZXF1aXJlIHRoZSBvbGQgSVBMIHRvIGJlIHJlYWQgZmlyc3QgYW5kIHN0b3JlZCBpbiBhIGxvY2FsIHZhcmlhYmxlLiAqLw0KKyNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUU19GUk9NX0tFUk5FTF9JU1IoKSAJX19hc20gdm9sYXRpbGUgKCAiTVZUSVBMCSUwIiA6OiJpIihjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkpICkNCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUU19GUk9NX0tFUk5FTF9JU1IoKSAJX19hc20gdm9sYXRpbGUgKCAiTVZUSVBMCSUwIiA6OiJpIihjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZKSApDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQpAQCAtNjAsMzA4ICs2MCwyOTkgQEAKICAqIEZ1bmN0aW9uIHRvIHN0YXJ0IHRoZSBmaXJzdCB0YXNrIGV4ZWN1dGluZyAtIHdyaXR0ZW4gaW4gYXNtIGNvZGUgYXMgZGlyZWN0DQogICogYWNjZXNzIHRvIHJlZ2lzdGVycyBpcyByZXF1aXJlZC4NCiAgKi8NCi1zdGF0aWMgdm9pZCBwcnZTdGFydEZpcnN0VGFzayggdm9pZCApIF9fYXR0cmlidXRlX18oICggbmFrZWQgKSApOw0KK3N0YXRpYyB2b2lkIHBydlN0YXJ0Rmlyc3RUYXNrKCB2b2lkICkgX19hdHRyaWJ1dGVfXygobmFrZWQpKTsNCiANCiAvKg0KICAqIFNvZnR3YXJlIGludGVycnVwdCBoYW5kbGVyLiAgUGVyZm9ybXMgdGhlIGFjdHVhbCBjb250ZXh0IHN3aXRjaCAoc2F2aW5nIGFuZA0KICAqIHJlc3RvcmluZyBvZiByZWdpc3RlcnMpLiAgV3JpdHRlbiBpbiBhc20gY29kZSBhcyBkaXJlY3QgcmVnaXN0ZXIgYWNjZXNzIGlzDQogICogcmVxdWlyZWQuDQogICovDQotdm9pZCB2U29mdHdhcmVJbnRlcnJ1cHRJU1IoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fKCAoIG5ha2VkICkgKTsNCit2b2lkIHZTb2Z0d2FyZUludGVycnVwdElTUiggdm9pZCApIF9fYXR0cmlidXRlX18oKG5ha2VkKSk7DQogDQogLyoNCiAgKiBUaGUgdGljayBpbnRlcnJ1cHQgaGFuZGxlci4NCiAgKi8NCi12b2lkIHZUaWNrSVNSKCB2b2lkICkgX19hdHRyaWJ1dGVfXyggKCBpbnRlcnJ1cHQgKSApOw0KK3ZvaWQgdlRpY2tJU1IoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fKChpbnRlcnJ1cHQpKTsNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi1leHRlcm4gdm9pZCAqIHB4Q3VycmVudFRDQjsNCitleHRlcm4gdm9pZCAqcHhDdXJyZW50VENCOw0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qDQogICogU2VlIGhlYWRlciBmaWxlIGZvciBkZXNjcmlwdGlvbi4NCiAgKi8NCi1TdGFja1R5cGVfdCAqIHB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKiBweFRvcE9mU3RhY2ssDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqIHB2UGFyYW1ldGVycyApDQorU3RhY2tUeXBlX3QgKnB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKnB4VG9wT2ZTdGFjaywgVGFza0Z1bmN0aW9uX3QgcHhDb2RlLCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KIHsNCi0gICAgLyogUjAgaXMgbm90IGluY2x1ZGVkIGFzIGl0IGlzIHRoZSBzdGFjayBwb2ludGVyLiAqLw0KKwkvKiBSMCBpcyBub3QgaW5jbHVkZWQgYXMgaXQgaXMgdGhlIHN0YWNrIHBvaW50ZXIuICovDQogDQotICAgICpweFRvcE9mU3RhY2sgPSAweDAwOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IHBvcnRJTklUSUFMX1BTVzsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHhDb2RlOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgwMDsNCisJcHhUb3BPZlN0YWNrLS07DQorIAkqcHhUb3BPZlN0YWNrID0gcG9ydElOSVRJQUxfUFNXOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBweENvZGU7DQogDQotICAgIC8qIFdoZW4gZGVidWdnaW5nIGl0IGNhbiBiZSB1c2VmdWwgaWYgZXZlcnkgcmVnaXN0ZXIgaXMgc2V0IHRvIGEga25vd24NCi0gICAgICogdmFsdWUuICBPdGhlcndpc2UgY29kZSBzcGFjZSBjYW4gYmUgc2F2ZWQgYnkganVzdCBzZXR0aW5nIHRoZSByZWdpc3RlcnMNCi0gICAgICogdGhhdCBuZWVkIHRvIGJlIHNldC4gKi8NCi0gICAgI2lmZGVmIFVTRV9GVUxMX1JFR0lTVEVSX0lOSVRJQUxJU0FUSU9ODQotICAgICAgICB7DQotICAgICAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICAgICAgICAgKnB4VG9wT2ZTdGFjayA9IDB4ZmZmZmZmZmY7IC8qIHIxNS4gKi8NCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHhlZWVlZWVlZTsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHhkZGRkZGRkZDsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHhjY2NjY2NjYzsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHhiYmJiYmJiYjsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHhhYWFhYWFhYTsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHg5OTk5OTk5OTsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHg4ODg4ODg4ODsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHg3Nzc3Nzc3NzsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHg2NjY2NjY2NjsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHg1NTU1NTU1NTsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHg0NDQ0NDQ0NDsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHgzMzMzMzMzMzsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHgyMjIyMjIyMjsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgIH0NCi0gICAgI2Vsc2UgLyogaWZkZWYgVVNFX0ZVTExfUkVHSVNURVJfSU5JVElBTElTQVRJT04gKi8NCi0gICAgICAgIHsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2sgLT0gMTU7DQotICAgICAgICB9DQotICAgICNlbmRpZiAvKiBpZmRlZiBVU0VfRlVMTF9SRUdJU1RFUl9JTklUSUFMSVNBVElPTiAqLw0KKwkvKiBXaGVuIGRlYnVnZ2luZyBpdCBjYW4gYmUgdXNlZnVsIGlmIGV2ZXJ5IHJlZ2lzdGVyIGlzIHNldCB0byBhIGtub3duDQorCXZhbHVlLiAgT3RoZXJ3aXNlIGNvZGUgc3BhY2UgY2FuIGJlIHNhdmVkIGJ5IGp1c3Qgc2V0dGluZyB0aGUgcmVnaXN0ZXJzDQorCXRoYXQgbmVlZCB0byBiZSBzZXQuICovDQorCSNpZmRlZiBVU0VfRlVMTF9SRUdJU1RFUl9JTklUSUFMSVNBVElPTg0KKwl7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweGZmZmZmZmZmOwkvKiByMTUuICovDQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweGVlZWVlZWVlOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHhkZGRkZGRkZDsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4Y2NjY2NjY2M7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweGJiYmJiYmJiOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHhhYWFhYWFhYTsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4OTk5OTk5OTk7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweDg4ODg4ODg4Ow0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHg3Nzc3Nzc3NzsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4NjY2NjY2NjY7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweDU1NTU1NTU1Ow0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHg0NDQ0NDQ0NDsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4MzMzMzMzMzM7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweDIyMjIyMjIyOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCX0NCisJI2Vsc2UNCisJew0KKwkJcHhUb3BPZlN0YWNrIC09IDE1Ow0KKwl9DQorCSNlbmRpZg0KIA0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB2UGFyYW1ldGVyczsgLyogUjEgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSBwb3J0SU5JVElBTF9GUFNXOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MTIzNDU2Nzg7IC8qIEFjY3VtdWxhdG9yLiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4ODc2NTQzMjE7IC8qIEFjY3VtdWxhdG9yLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB2UGFyYW1ldGVyczsgLyogUjEgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSBwb3J0SU5JVElBTF9GUFNXOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MTIzNDU2Nzg7IC8qIEFjY3VtdWxhdG9yLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4ODc2NTQzMjE7IC8qIEFjY3VtdWxhdG9yLiAqLw0KIA0KLSAgICByZXR1cm4gcHhUb3BPZlN0YWNrOw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBCYXNlVHlwZV90IHhQb3J0U3RhcnRTY2hlZHVsZXIoIHZvaWQgKQ0KIHsNCi0gICAgZXh0ZXJuIHZvaWQgdkFwcGxpY2F0aW9uU2V0dXBUaW1lckludGVycnVwdCggdm9pZCApOw0KK2V4dGVybiB2b2lkIHZBcHBsaWNhdGlvblNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKTsNCiANCi0gICAgLyogVXNlIHB4Q3VycmVudFRDQiBqdXN0IHNvIGl0IGRvZXMgbm90IGdldCBvcHRpbWlzZWQgYXdheS4gKi8NCi0gICAgaWYoIHB4Q3VycmVudFRDQiAhPSBOVUxMICkNCi0gICAgew0KLSAgICAgICAgLyogQ2FsbCBhbiBhcHBsaWNhdGlvbiBmdW5jdGlvbiB0byBzZXQgdXAgdGhlIHRpbWVyIHRoYXQgd2lsbCBnZW5lcmF0ZSB0aGUNCi0gICAgICAgICAqIHRpY2sgaW50ZXJydXB0LiAgVGhpcyB3YXkgdGhlIGFwcGxpY2F0aW9uIGNhbiBkZWNpZGUgd2hpY2ggcGVyaXBoZXJhbCB0bw0KLSAgICAgICAgICogdXNlLiAgQSBkZW1vIGFwcGxpY2F0aW9uIGlzIHByb3ZpZGVkIHRvIHNob3cgYSBzdWl0YWJsZSBleGFtcGxlLiAqLw0KLSAgICAgICAgdkFwcGxpY2F0aW9uU2V0dXBUaW1lckludGVycnVwdCgpOw0KKwkvKiBVc2UgcHhDdXJyZW50VENCIGp1c3Qgc28gaXQgZG9lcyBub3QgZ2V0IG9wdGltaXNlZCBhd2F5LiAqLw0KKwlpZiggcHhDdXJyZW50VENCICE9IE5VTEwgKQ0KKwl7DQorCQkvKiBDYWxsIGFuIGFwcGxpY2F0aW9uIGZ1bmN0aW9uIHRvIHNldCB1cCB0aGUgdGltZXIgdGhhdCB3aWxsIGdlbmVyYXRlIHRoZQ0KKwkJdGljayBpbnRlcnJ1cHQuICBUaGlzIHdheSB0aGUgYXBwbGljYXRpb24gY2FuIGRlY2lkZSB3aGljaCBwZXJpcGhlcmFsIHRvDQorCQl1c2UuICBBIGRlbW8gYXBwbGljYXRpb24gaXMgcHJvdmlkZWQgdG8gc2hvdyBhIHN1aXRhYmxlIGV4YW1wbGUuICovDQorCQl2QXBwbGljYXRpb25TZXR1cFRpbWVySW50ZXJydXB0KCk7DQogDQotICAgICAgICAvKiBFbmFibGUgdGhlIHNvZnR3YXJlIGludGVycnVwdC4gKi8NCi0gICAgICAgIF9JRU4oIF9JQ1VfU1dJTlQgKSA9IDE7DQorCQkvKiBFbmFibGUgdGhlIHNvZnR3YXJlIGludGVycnVwdC4gKi8NCisJCV9JRU4oIF9JQ1VfU1dJTlQgKSA9IDE7DQogDQotICAgICAgICAvKiBFbnN1cmUgdGhlIHNvZnR3YXJlIGludGVycnVwdCBpcyBjbGVhci4gKi8NCi0gICAgICAgIF9JUiggX0lDVV9TV0lOVCApID0gMDsNCisJCS8qIEVuc3VyZSB0aGUgc29mdHdhcmUgaW50ZXJydXB0IGlzIGNsZWFyLiAqLw0KKwkJX0lSKCBfSUNVX1NXSU5UICkgPSAwOw0KIA0KLSAgICAgICAgLyogRW5zdXJlIHRoZSBzb2Z0d2FyZSBpbnRlcnJ1cHQgaXMgc2V0IHRvIHRoZSBrZXJuZWwgcHJpb3JpdHkuICovDQotICAgICAgICBfSVBSKCBfSUNVX1NXSU5UICkgPSBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZOw0KKwkJLyogRW5zdXJlIHRoZSBzb2Z0d2FyZSBpbnRlcnJ1cHQgaXMgc2V0IHRvIHRoZSBrZXJuZWwgcHJpb3JpdHkuICovDQorCQlfSVBSKCBfSUNVX1NXSU5UICkgPSBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZOw0KIA0KLSAgICAgICAgLyogU3RhcnQgdGhlIGZpcnN0IHRhc2suICovDQotICAgICAgICBwcnZTdGFydEZpcnN0VGFzaygpOw0KLSAgICB9DQorCQkvKiBTdGFydCB0aGUgZmlyc3QgdGFzay4gKi8NCisJCXBydlN0YXJ0Rmlyc3RUYXNrKCk7DQorCX0NCiANCi0gICAgLyogU2hvdWxkIG5vdCBnZXQgaGVyZS4gKi8NCi0gICAgcmV0dXJuIHBkRkFJTDsNCisJLyogU2hvdWxkIG5vdCBnZXQgaGVyZS4gKi8NCisJcmV0dXJuIHBkRkFJTDsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogdm9pZCB2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApDQogew0KLSAgICAvKiBOb3QgaW1wbGVtZW50ZWQgaW4gcG9ydHMgd2hlcmUgdGhlcmUgaXMgbm90aGluZyB0byByZXR1cm4gdG8uDQotICAgICAqIEFydGlmaWNpYWxseSBmb3JjZSBhbiBhc3NlcnQuICovDQotICAgIGNvbmZpZ0FTU0VSVCggcHhDdXJyZW50VENCID09IE5VTEwgKTsNCisJLyogTm90IGltcGxlbWVudGVkIGluIHBvcnRzIHdoZXJlIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmV0dXJuIHRvLg0KKwlBcnRpZmljaWFsbHkgZm9yY2UgYW4gYXNzZXJ0LiAqLw0KKwljb25maWdBU1NFUlQoIHB4Q3VycmVudFRDQiA9PSBOVUxMICk7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHN0YXRpYyB2b2lkIHBydlN0YXJ0Rmlyc3RUYXNrKCB2b2lkICkNCiB7DQotICAgIF9fYXNtIHZvbGF0aWxlDQotICAgICgNCisJX19hc20gdm9sYXRpbGUNCisJKA0KKwkJLyogV2hlbiBzdGFydGluZyB0aGUgc2NoZWR1bGVyIHRoZXJlIGlzIG5vdGhpbmcgdGhhdCBuZWVkcyBtb3ZpbmcgdG8gdGhlDQorCQlpbnRlcnJ1cHQgc3RhY2sgYmVjYXVzZSB0aGUgZnVuY3Rpb24gaXMgbm90IGNhbGxlZCBmcm9tIGFuIGludGVycnVwdC4NCisJCUp1c3QgZW5zdXJlIHRoZSBjdXJyZW50IHN0YWNrIGlzIHRoZSB1c2VyIHN0YWNrLiAqLw0KKwkJIlNFVFBTVwkJVQkJCQkJCVxuIiBcDQogDQotICAgICAgICAvKiBXaGVuIHN0YXJ0aW5nIHRoZSBzY2hlZHVsZXIgdGhlcmUgaXMgbm90aGluZyB0aGF0IG5lZWRzIG1vdmluZyB0byB0aGUNCi0gICAgICAgICAqIGludGVycnVwdCBzdGFjayBiZWNhdXNlIHRoZSBmdW5jdGlvbiBpcyBub3QgY2FsbGVkIGZyb20gYW4gaW50ZXJydXB0Lg0KLSAgICAgICAgICogSnVzdCBlbnN1cmUgdGhlIGN1cnJlbnQgc3RhY2sgaXMgdGhlIHVzZXIgc3RhY2suICovDQotICAgICAgICAiU0VUUFNXCQlVCQkJCQkJXG4iXA0KKwkJLyogT2J0YWluIHRoZSBsb2NhdGlvbiBvZiB0aGUgc3RhY2sgYXNzb2NpYXRlZCB3aXRoIHdoaWNoIGV2ZXIgdGFzaw0KKwkJcHhDdXJyZW50VENCIGlzIGN1cnJlbnRseSBwb2ludGluZyB0by4gKi8NCisJCSJNT1YuTAkJI19weEN1cnJlbnRUQ0IsIFIxNQkJXG4iIFwNCisJCSJNT1YuTAkJW1IxNV0sIFIxNQkJCQlcbiIgXA0KKwkJIk1PVi5MCQlbUjE1XSwgUjAJCQkJXG4iIFwNCiANCisJCS8qIFJlc3RvcmUgdGhlIHJlZ2lzdGVycyBmcm9tIHRoZSBzdGFjayBvZiB0aGUgdGFzayBwb2ludGVkIHRvIGJ5DQorCQlweEN1cnJlbnRUQ0IuICovDQorCSAgICAiUE9QCQlSMTUJCQkJCQlcbiIgXA0KIA0KLSAgICAgICAgLyogT2J0YWluIHRoZSBsb2NhdGlvbiBvZiB0aGUgc3RhY2sgYXNzb2NpYXRlZCB3aXRoIHdoaWNoIGV2ZXIgdGFzaw0KLSAgICAgICAgICogcHhDdXJyZW50VENCIGlzIGN1cnJlbnRseSBwb2ludGluZyB0by4gKi8NCi0gICAgICAgICJNT1YuTAkJI19weEN1cnJlbnRUQ0IsIFIxNQkJXG4iXA0KLSAgICAgICAgIk1PVi5MCQlbUjE1XSwgUjE1CQkJCVxuIlwNCi0gICAgICAgICJNT1YuTAkJW1IxNV0sIFIwCQkJCVxuIlwNCisJCS8qIEFjY3VtdWxhdG9yIGxvdyAzMiBiaXRzLiAqLw0KKwkgICAgIk1WVEFDTE8JUjE1IAkJCQkJXG4iIFwNCisJICAgICJQT1AJCVIxNQkJCQkJCVxuIiBcDQogDQorCQkvKiBBY2N1bXVsYXRvciBoaWdoIDMyIGJpdHMuICovDQorCSAgICAiTVZUQUNISQlSMTUgCQkJCQlcbiIgXA0KKwkgICAgIlBPUAkJUjE1CQkJCQkJXG4iIFwNCiANCi0gICAgICAgIC8qIFJlc3RvcmUgdGhlIHJlZ2lzdGVycyBmcm9tIHRoZSBzdGFjayBvZiB0aGUgdGFzayBwb2ludGVkIHRvIGJ5DQotICAgICAgICAgKiBweEN1cnJlbnRUQ0IuICovDQotICAgICAgICAiUE9QCQlSMTUJCQkJCQlcbiJcDQorCQkvKiBGbG9hdGluZyBwb2ludCBzdGF0dXMgd29yZC4gKi8NCisJICAgICJNVlRDCQlSMTUsIEZQU1cgCQkJCVxuIiBcDQogDQotICAgICAgICAvKiBBY2N1bXVsYXRvciBsb3cgMzIgYml0cy4gKi8NCi0gICAgICAgICJNVlRBQ0xPCVIxNSAJCQkJCVxuIlwNCi0gICAgICAgICJQT1AJCVIxNQkJCQkJCVxuIlwNCisJCS8qIFIxIHRvIFIxNSAtIFIwIGlzIG5vdCBpbmNsdWRlZCBhcyBpdCBpcyB0aGUgU1AuICovDQorCSAgICAiUE9QTQkJUjEtUjE1IAkJCQkJXG4iIFwNCiANCi0gICAgICAgIC8qIEFjY3VtdWxhdG9yIGhpZ2ggMzIgYml0cy4gKi8NCi0gICAgICAgICJNVlRBQ0hJCVIxNSAJCQkJCVxuIlwNCi0gICAgICAgICJQT1AJCVIxNQkJCQkJCVxuIlwNCi0NCi0gICAgICAgIC8qIEZsb2F0aW5nIHBvaW50IHN0YXR1cyB3b3JkLiAqLw0KLSAgICAgICAgIk1WVEMJCVIxNSwgRlBTVyAJCQkJXG4iXA0KLQ0KLSAgICAgICAgLyogUjEgdG8gUjE1IC0gUjAgaXMgbm90IGluY2x1ZGVkIGFzIGl0IGlzIHRoZSBTUC4gKi8NCi0gICAgICAgICJQT1BNCQlSMS1SMTUgCQkJCQlcbiJcDQotDQotICAgICAgICAvKiBUaGlzIHBvcHMgdGhlIHJlbWFpbmluZyByZWdpc3RlcnMuICovDQotICAgICAgICAiUlRFCQkJCQkJCQlcbiJcDQotICAgICAgICAiTk9QCQkJCQkJCQlcbiJcDQotICAgICAgICAiTk9QCQkJCQkJCQlcbiINCi0gICAgKTsNCisJCS8qIFRoaXMgcG9wcyB0aGUgcmVtYWluaW5nIHJlZ2lzdGVycy4gKi8NCisJICAgICJSVEUJCQkJCQkJCVxuIiBcDQorCSAgICAiTk9QCQkJCQkJCQlcbiIgXA0KKwkgICAgIk5PUAkJCQkJCQkJXG4iDQorCSk7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlNvZnR3YXJlSW50ZXJydXB0SVNSKCB2b2lkICkNCiB7DQotICAgIF9fYXNtIHZvbGF0aWxlDQotICAgICgNCi0gICAgICAgIC8qIFJlLWVuYWJsZSBpbnRlcnJ1cHRzLiAqLw0KLSAgICAgICAgIlNFVFBTVwkJSQkJCQkJCQlcbiJcDQorCV9fYXNtIHZvbGF0aWxlDQorCSgNCisJCS8qIFJlLWVuYWJsZSBpbnRlcnJ1cHRzLiAqLw0KKwkJIlNFVFBTVwkJSQkJCQkJCQlcbiIgXA0KIA0KKwkJLyogTW92ZSB0aGUgZGF0YSB0aGF0IHdhcyBhdXRvbWF0aWNhbGx5IHB1c2hlZCBvbnRvIHRoZSBpbnRlcnJ1cHQgc3RhY2sgd2hlbg0KKwkJdGhlIGludGVycnVwdCBvY2N1cnJlZCBmcm9tIHRoZSBpbnRlcnJ1cHQgc3RhY2sgdG8gdGhlIHVzZXIgc3RhY2suDQogDQotICAgICAgICAvKiBNb3ZlIHRoZSBkYXRhIHRoYXQgd2FzIGF1dG9tYXRpY2FsbHkgcHVzaGVkIG9udG8gdGhlIGludGVycnVwdCBzdGFjayB3aGVuDQotICAgICAgICAgKiB0aGUgaW50ZXJydXB0IG9jY3VycmVkIGZyb20gdGhlIGludGVycnVwdCBzdGFjayB0byB0aGUgdXNlciBzdGFjay4NCi0gICAgICAgICAqDQotICAgICAgICAgKiBSMTUgaXMgc2F2ZWQgYmVmb3JlIGl0IGlzIGNsb2JiZXJlZC4gKi8NCi0gICAgICAgICJQVVNILkwJCVIxNQkJCQkJCQlcbiJcDQorCQlSMTUgaXMgc2F2ZWQgYmVmb3JlIGl0IGlzIGNsb2JiZXJlZC4gKi8NCisJCSJQVVNILkwJCVIxNQkJCQkJCQlcbiIgXA0KIA0KLSAgICAgICAgLyogUmVhZCB0aGUgdXNlciBzdGFjayBwb2ludGVyLiAqLw0KLSAgICAgICAgIk1WRkMJCVVTUCwgUjE1CQkJCQlcbiJcDQorCQkvKiBSZWFkIHRoZSB1c2VyIHN0YWNrIHBvaW50ZXIuICovDQorCQkiTVZGQwkJVVNQLCBSMTUJCQkJCVxuIiBcDQogDQotICAgICAgICAvKiBNb3ZlIHRoZSBhZGRyZXNzIGRvd24gdG8gdGhlIGRhdGEgYmVpbmcgbW92ZWQuICovDQotICAgICAgICAiU1VCCQkjMTIsIFIxNQkJCQkJXG4iXA0KLSAgICAgICAgIk1WVEMJCVIxNSwgVVNQCQkJCQlcbiJcDQorCQkvKiBNb3ZlIHRoZSBhZGRyZXNzIGRvd24gdG8gdGhlIGRhdGEgYmVpbmcgbW92ZWQuICovDQorCQkiU1VCCQkjMTIsIFIxNQkJCQkJXG4iIFwNCisJCSJNVlRDCQlSMTUsIFVTUAkJCQkJXG4iIFwNCiANCi0gICAgICAgIC8qIENvcHkgdGhlIGRhdGEgYWNyb3NzLCBSMTUsIHRoZW4gUEMsIHRoZW4gUFNXLiAqLw0KLSAgICAgICAgIk1PVi5MCQlbIFIwIF0sIFsgUjE1IF0JCQkJXG4iXA0KLSAgICAgICAgIk1PVi5MIAkJNFsgUjAgXSwgNFsgUjE1IF0JCQlcbiJcDQotICAgICAgICAiTU9WLkwJCThbIFIwIF0sIDhbIFIxNSBdCQkJXG4iXA0KKwkJLyogQ29weSB0aGUgZGF0YSBhY3Jvc3MsIFIxNSwgdGhlbiBQQywgdGhlbiBQU1cuICovDQorCQkiTU9WLkwJCVsgUjAgXSwgWyBSMTUgXQkJCQlcbiIgXA0KKwkJIk1PVi5MIAkJNFsgUjAgXSwgNFsgUjE1IF0JCQlcbiIgXA0KKwkJIk1PVi5MCQk4WyBSMCBdLCA4WyBSMTUgXQkJCVxuIiBcDQogDQotICAgICAgICAvKiBNb3ZlIHRoZSBpbnRlcnJ1cHQgc3RhY2sgcG9pbnRlciB0byBpdHMgbmV3IGNvcnJlY3QgcG9zaXRpb24uICovDQotICAgICAgICAiQURECQkjMTIsIFIwCQkJCQkJXG4iXA0KKwkJLyogTW92ZSB0aGUgaW50ZXJydXB0IHN0YWNrIHBvaW50ZXIgdG8gaXRzIG5ldyBjb3JyZWN0IHBvc2l0aW9uLiAqLw0KKwkJIkFERAkJIzEyLCBSMAkJCQkJCVxuIiBcDQogDQotICAgICAgICAvKiBBbGwgdGhlIHJlc3Qgb2YgdGhlIHJlZ2lzdGVycyBhcmUgc2F2ZWQgZGlyZWN0bHkgdG8gdGhlIHVzZXIgc3RhY2suICovDQotICAgICAgICAiU0VUUFNXCQlVCQkJCQkJCVxuIlwNCisJCS8qIEFsbCB0aGUgcmVzdCBvZiB0aGUgcmVnaXN0ZXJzIGFyZSBzYXZlZCBkaXJlY3RseSB0byB0aGUgdXNlciBzdGFjay4gKi8NCisJCSJTRVRQU1cJCVUJCQkJCQkJXG4iIFwNCiANCi0gICAgICAgIC8qIFNhdmUgdGhlIHJlc3Qgb2YgdGhlIGdlbmVyYWwgcmVnaXN0ZXJzIChSMTUgaGFzIGJlZW4gc2F2ZWQgYWxyZWFkeSkuICovDQotICAgICAgICAiUFVTSE0JCVIxLVIxNAkJCQkJCVxuIlwNCisJCS8qIFNhdmUgdGhlIHJlc3Qgb2YgdGhlIGdlbmVyYWwgcmVnaXN0ZXJzIChSMTUgaGFzIGJlZW4gc2F2ZWQgYWxyZWFkeSkuICovDQorCQkiUFVTSE0JCVIxLVIxNAkJCQkJCVxuIiBcDQogDQotICAgICAgICAvKiBTYXZlIHRoZSBGUFNXIGFuZCBhY2N1bXVsYXRvci4gKi8NCi0gICAgICAgICJNVkZDCQlGUFNXLCBSMTUJCQkJCVxuIlwNCi0gICAgICAgICJQVVNILkwJCVIxNQkJCQkJCQlcbiJcDQotICAgICAgICAiTVZGQUNISSAJUjE1CQkJCQkJCVxuIlwNCi0gICAgICAgICJQVVNILkwJCVIxNQkJCQkJCQlcbiJcDQorCQkvKiBTYXZlIHRoZSBGUFNXIGFuZCBhY2N1bXVsYXRvci4gKi8NCisJCSJNVkZDCQlGUFNXLCBSMTUJCQkJCVxuIiBcDQorCQkiUFVTSC5MCQlSMTUJCQkJCQkJXG4iIFwNCisJCSJNVkZBQ0hJIAlSMTUJCQkJCQkJXG4iIFwNCisJCSJQVVNILkwJCVIxNQkJCQkJCQlcbiIgXA0KIA0KLSAgICAgICAgLyogTWlkZGxlIHdvcmQuICovDQotICAgICAgICAiTVZGQUNNSQlSMTUJCQkJCQkJXG4iXA0KKwkJLyogTWlkZGxlIHdvcmQuICovDQorCQkiTVZGQUNNSQlSMTUJCQkJCQkJXG4iIFwNCiANCi0gICAgICAgIC8qIFNoaWZ0ZWQgbGVmdCBhcyBpdCBpcyByZXN0b3JlZCB0byB0aGUgbG93IG9yZGVyIHdvcmQuICovDQotICAgICAgICAiU0hMTAkJIzE2LCBSMTUJCQkJCVxuIlwNCi0gICAgICAgICJQVVNILkwJCVIxNQkJCQkJCQlcbiJcDQorCQkvKiBTaGlmdGVkIGxlZnQgYXMgaXQgaXMgcmVzdG9yZWQgdG8gdGhlIGxvdyBvcmRlciB3b3JkLiAqLw0KKwkJIlNITEwJCSMxNiwgUjE1CQkJCQlcbiIgXA0KKwkJIlBVU0guTAkJUjE1CQkJCQkJCVxuIiBcDQogDQotICAgICAgICAvKiBTYXZlIHRoZSBzdGFjayBwb2ludGVyIHRvIHRoZSBUQ0IuICovDQotICAgICAgICAiTU9WLkwJCSNfcHhDdXJyZW50VENCLCBSMTUJCQlcbiJcDQotICAgICAgICAiTU9WLkwJCVsgUjE1IF0sIFIxNQkJCQlcbiJcDQotICAgICAgICAiTU9WLkwJCVIwLCBbIFIxNSBdCQkJCQlcbiJcDQorCQkvKiBTYXZlIHRoZSBzdGFjayBwb2ludGVyIHRvIHRoZSBUQ0IuICovDQorCQkiTU9WLkwJCSNfcHhDdXJyZW50VENCLCBSMTUJCQlcbiIgXA0KKwkJIk1PVi5MCQlbIFIxNSBdLCBSMTUJCQkJXG4iIFwNCisJCSJNT1YuTAkJUjAsIFsgUjE1IF0JCQkJCVxuIiBcDQogDQorCQkvKiBFbnN1cmUgdGhlIGludGVycnVwdCBtYXNrIGlzIHNldCB0byB0aGUgc3lzY2FsbCBwcmlvcml0eSB3aGlsZSB0aGUga2VybmVsDQorCQlzdHJ1Y3R1cmVzIGFyZSBiZWluZyBhY2Nlc3NlZC4gKi8NCisJCSJNVlRJUEwJCSUwIAkJCQkJCQlcbiIgXA0KIA0KLSAgICAgICAgLyogRW5zdXJlIHRoZSBpbnRlcnJ1cHQgbWFzayBpcyBzZXQgdG8gdGhlIHN5c2NhbGwgcHJpb3JpdHkgd2hpbGUgdGhlIGtlcm5lbA0KLSAgICAgICAgICogc3RydWN0dXJlcyBhcmUgYmVpbmcgYWNjZXNzZWQuICovDQotICAgICAgICAiTVZUSVBMCQklMCAJCQkJCQkJXG4iXA0KKwkJLyogU2VsZWN0IHRoZSBuZXh0IHRhc2sgdG8gcnVuLiAqLw0KKwkJIkJTUi5BCQlfdlRhc2tTd2l0Y2hDb250ZXh0CQkJXG4iIFwNCiANCi0gICAgICAgIC8qIFNlbGVjdCB0aGUgbmV4dCB0YXNrIHRvIHJ1bi4gKi8NCi0gICAgICAgICJCU1IuQQkJX3ZUYXNrU3dpdGNoQ29udGV4dAkJCVxuIlwNCisJCS8qIFJlc2V0IHRoZSBpbnRlcnJ1cHQgbWFzayBhcyBubyBtb3JlIGRhdGEgc3RydWN0dXJlIGFjY2VzcyBpcyByZXF1aXJlZC4gKi8NCisJCSJNVlRJUEwJCSUxCQkJCQkJCVxuIiBcDQogDQotICAgICAgICAvKiBSZXNldCB0aGUgaW50ZXJydXB0IG1hc2sgYXMgbm8gbW9yZSBkYXRhIHN0cnVjdHVyZSBhY2Nlc3MgaXMgcmVxdWlyZWQuICovDQotICAgICAgICAiTVZUSVBMCQklMQkJCQkJCQlcbiJcDQorCQkvKiBMb2FkIHRoZSBzdGFjayBwb2ludGVyIG9mIHRoZSB0YXNrIHRoYXQgaXMgbm93IHNlbGVjdGVkIGFzIHRoZSBSdW5uaW5nDQorCQlzdGF0ZSB0YXNrIGZyb20gaXRzIFRDQi4gKi8NCisJCSJNT1YuTAkJI19weEN1cnJlbnRUQ0IsUjE1CQkJXG4iIFwNCisJCSJNT1YuTAkJWyBSMTUgXSwgUjE1CQkJCVxuIiBcDQorCQkiTU9WLkwJCVsgUjE1IF0sIFIwCQkJCQlcbiIgXA0KIA0KLQ0KLSAgICAgICAgLyogTG9hZCB0aGUgc3RhY2sgcG9pbnRlciBvZiB0aGUgdGFzayB0aGF0IGlzIG5vdyBzZWxlY3RlZCBhcyB0aGUgUnVubmluZw0KLSAgICAgICAgICogc3RhdGUgdGFzayBmcm9tIGl0cyBUQ0IuICovDQotICAgICAgICAiTU9WLkwJCSNfcHhDdXJyZW50VENCLFIxNQkJCVxuIlwNCi0gICAgICAgICJNT1YuTAkJWyBSMTUgXSwgUjE1CQkJCVxuIlwNCi0gICAgICAgICJNT1YuTAkJWyBSMTUgXSwgUjAJCQkJCVxuIlwNCi0NCi0NCi0gICAgICAgIC8qIFJlc3RvcmUgdGhlIGNvbnRleHQgb2YgdGhlIG5ldyB0YXNrLiAgVGhlIFBTVyAoUHJvZ3JhbSBTdGF0dXMgV29yZCkgYW5kDQotICAgICAgICAgKiBQQyB3aWxsIGJlIHBvcHBlZCBieSB0aGUgUlRFIGluc3RydWN0aW9uLiAqLw0KLSAgICAgICAgIlBPUAkJUjE1CQkJCQkJCVxuIlwNCi0gICAgICAgICJNVlRBQ0xPIAlSMTUJCQkJCQkJXG4iXA0KLSAgICAgICAgIlBPUAkJUjE1CQkJCQkJCVxuIlwNCi0gICAgICAgICJNVlRBQ0hJIAlSMTUJCQkJCQkJXG4iXA0KLSAgICAgICAgIlBPUAkJUjE1CQkJCQkJCVxuIlwNCi0gICAgICAgICJNVlRDCQlSMTUsIEZQU1cJCQkJCVxuIlwNCi0gICAgICAgICJQT1BNCQlSMS1SMTUJCQkJCQlcbiJcDQotICAgICAgICAiUlRFCQkJCQkJCQkJXG4iXA0KLSAgICAgICAgIk5PUAkJCQkJCQkJCVxuIlwNCi0gICAgICAgICJOT1AJCQkJCQkJCQkgICINCi0gICAgICAgIDo6ImkiICggY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICksICJpIiAoIGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkgKQ0KLSAgICApOw0KKwkJLyogUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgbmV3IHRhc2suICBUaGUgUFNXIChQcm9ncmFtIFN0YXR1cyBXb3JkKSBhbmQNCisJCVBDIHdpbGwgYmUgcG9wcGVkIGJ5IHRoZSBSVEUgaW5zdHJ1Y3Rpb24uICovDQorCQkiUE9QCQlSMTUJCQkJCQkJXG4iIFwNCisJCSJNVlRBQ0xPIAlSMTUJCQkJCQkJXG4iIFwNCisJCSJQT1AJCVIxNQkJCQkJCQlcbiIgXA0KKwkJIk1WVEFDSEkgCVIxNQkJCQkJCQlcbiIgXA0KKwkJIlBPUAkJUjE1CQkJCQkJCVxuIiBcDQorCQkiTVZUQwkJUjE1LCBGUFNXCQkJCQlcbiIgXA0KKwkJIlBPUE0JCVIxLVIxNQkJCQkJCVxuIiBcDQorCQkiUlRFCQkJCQkJCQkJXG4iIFwNCisJCSJOT1AJCQkJCQkJCQlcbiIgXA0KKwkJIk5PUAkJCQkJCQkJCSAgIg0KKwkJOjogImkiKGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSksICJpIihjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZKQ0KKwkpOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZUaWNrSVNSKCB2b2lkICkNCiB7DQotICAgIC8qIFJlLWVuYWJsZWQgaW50ZXJydXB0cy4gKi8NCi0gICAgX19hc20gdm9sYXRpbGUgKCAiU0VUUFNXCUkiKTsNCisJLyogUmUtZW5hYmxlZCBpbnRlcnJ1cHRzLiAqLw0KKwlfX2FzbSB2b2xhdGlsZSggIlNFVFBTVwlJIiApOw0KIA0KLSAgICAvKiBJbmNyZW1lbnQgdGhlIHRpY2ssIGFuZCBwZXJmb3JtIGFueSBwcm9jZXNzaW5nIHRoZSBuZXcgdGljayB2YWx1ZQ0KLSAgICAgKiBuZWNlc3NpdGF0ZXMuICBFbnN1cmUgSVBMIGlzIGF0IHRoZSBtYXggc3lzY2FsbCB2YWx1ZSBmaXJzdC4gKi8NCi0gICAgcG9ydERJU0FCTEVfSU5URVJSVVBUU19GUk9NX0tFUk5FTF9JU1IoKTsNCi0gICAgew0KLSAgICAgICAgaWYoIHhUYXNrSW5jcmVtZW50VGljaygpICE9IHBkRkFMU0UgKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHRhc2tZSUVMRCgpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHBvcnRFTkFCTEVfSU5URVJSVVBUU19GUk9NX0tFUk5FTF9JU1IoKTsNCisJLyogSW5jcmVtZW50IHRoZSB0aWNrLCBhbmQgcGVyZm9ybSBhbnkgcHJvY2Vzc2luZyB0aGUgbmV3IHRpY2sgdmFsdWUNCisJbmVjZXNzaXRhdGVzLiAgRW5zdXJlIElQTCBpcyBhdCB0aGUgbWF4IHN5c2NhbGwgdmFsdWUgZmlyc3QuICovDQorCXBvcnRESVNBQkxFX0lOVEVSUlVQVFNfRlJPTV9LRVJORUxfSVNSKCk7DQorCXsNCisJCWlmKCB4VGFza0luY3JlbWVudFRpY2soKSAhPSBwZEZBTFNFICkNCisJCXsNCisJCQl0YXNrWUlFTEQoKTsNCisJCX0NCisJfQ0KKwlwb3J0RU5BQkxFX0lOVEVSUlVQVFNfRlJPTV9LRVJORUxfSVNSKCk7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHVpbnQzMl90IHVsUG9ydEdldElQTCggdm9pZCApDQogew0KLSAgICBfX2FzbSB2b2xhdGlsZQ0KLSAgICAoDQotICAgICAgICAiTVZGQwlQU1csIFIxCQkJXG4iXA0KLSAgICAgICAgIlNITFIJIzI0LCBSMQkJCVxuIlwNCi0gICAgICAgICJSVFMJCQkJCSAgIg0KLSAgICApOw0KKwlfX2FzbSB2b2xhdGlsZQ0KKwkoDQorCQkiTVZGQwlQU1csIFIxCQkJXG4iCVwNCisJCSJTSExSCSMyNCwgUjEJCQlcbiIJXA0KKwkJIlJUUwkJCQkJICAiDQorCSk7DQogDQotICAgIC8qIFRoaXMgd2lsbCBuZXZlciBnZXQgZXhlY3V0ZWQsIGJ1dCBrZWVwcyB0aGUgY29tcGlsZXIgZnJvbSBjb21wbGFpbmluZy4gKi8NCi0gICAgcmV0dXJuIDA7DQorCS8qIFRoaXMgd2lsbCBuZXZlciBnZXQgZXhlY3V0ZWQsIGJ1dCBrZWVwcyB0aGUgY29tcGlsZXIgZnJvbSBjb21wbGFpbmluZy4gKi8NCisJcmV0dXJuIDA7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlBvcnRTZXRJUEwoIHVpbnQzMl90IHVsTmV3SVBMICkNCiB7DQotICAgIF9fYXNtIHZvbGF0aWxlDQotICAgICgNCi0gICAgICAgICJQVVNICVI1CQkJCVxuIlwNCi0gICAgICAgICJNVkZDCVBTVywgUjUJCQlcbiJcDQotICAgICAgICAiU0hMTAkjMjQsIFIxCQkJXG4iXA0KLSAgICAgICAgIkFORAkjLTBGMDAwMDAxSCwgUjUgXG4iXA0KLSAgICAgICAgIk9SCQlSMSwgUjUJCQlcbiJcDQotICAgICAgICAiTVZUQwlSNSwgUFNXCQkJXG4iXA0KLSAgICAgICAgIlBPUAlSNQkJCQlcbiJcDQotICAgICAgICAiUlRTCQkJCQkgICINCi0gICAgKTsNCisJX19hc20gdm9sYXRpbGUNCisJKA0KKwkJIlBVU0gJUjUJCQkJXG4iIFwNCisJCSJNVkZDCVBTVywgUjUJCQlcbiIJXA0KKwkJIlNITEwJIzI0LCBSMQkJCVxuIiBcDQorCQkiQU5ECSMtMEYwMDAwMDFILCBSNSBcbiIgXA0KKwkJIk9SCQlSMSwgUjUJCQlcbiIgXA0KKwkJIk1WVEMJUjUsIFBTVwkJCVxuIiBcDQorCQkiUE9QCVI1CQkJCVxuIiBcDQorCQkiUlRTCQkJCQkgICINCisJICk7DQogfQ0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0dDQy9SWDYwMC9wb3J0bWFjcm8uaCBiL3BvcnRhYmxlL0dDQy9SWDYwMC9wb3J0bWFjcm8uaAppbmRleCA0NmI4OGFmLi5jNmNiODQxIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9HQ0MvUlg2MDAvcG9ydG1hY3JvLmgKKysrIGIvcG9ydGFibGUvR0NDL1JYNjAwL3BvcnRtYWNyby5oCkBAIC0yNywxMSArMjcsMTEgQEAKIA0KIA0KICNpZm5kZWYgUE9SVE1BQ1JPX0gNCi0gICAgI2RlZmluZSBQT1JUTUFDUk9fSA0KKyNkZWZpbmUgUE9SVE1BQ1JPX0gNCiANCi0gICAgI2lmZGVmIF9fY3BsdXNwbHVzDQotICAgICAgICBleHRlcm4gIkMiIHsNCi0gICAgI2VuZGlmDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAqIFBvcnQgc3BlY2lmaWMgZGVmaW5pdGlvbnMuDQpAQCAtNDQsOTQgKzQ0LDk1IEBACiAgKi8NCiANCiAvKiBUeXBlIGRlZmluaXRpb25zIC0gdGhlc2UgYXJlIGEgYml0IGxlZ2FjeSBhbmQgbm90IHJlYWxseSB1c2VkIG5vdywgb3RoZXIgdGhhbg0KLSAqIHBvcnRTVEFDS19UWVBFIGFuZCBwb3J0QkFTRV9UWVBFLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRDSEFSICAgICAgICAgIGNoYXINCi0gICAgI2RlZmluZSBwb3J0RkxPQVQgICAgICAgICBmbG9hdA0KLSAgICAjZGVmaW5lIHBvcnRET1VCTEUgICAgICAgIGRvdWJsZQ0KLSAgICAjZGVmaW5lIHBvcnRMT05HICAgICAgICAgIGxvbmcNCi0gICAgI2RlZmluZSBwb3J0U0hPUlQgICAgICAgICBzaG9ydA0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19UWVBFICAgIHVpbnQzMl90DQotICAgICNkZWZpbmUgcG9ydEJBU0VfVFlQRSAgICAgbG9uZw0KK3BvcnRTVEFDS19UWVBFIGFuZCBwb3J0QkFTRV9UWVBFLiAqLw0KKyNkZWZpbmUgcG9ydENIQVIJCWNoYXINCisjZGVmaW5lIHBvcnRGTE9BVAkJZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUJCWRvdWJsZQ0KKyNkZWZpbmUgcG9ydExPTkcJCWxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVAkJc2hvcnQNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFCXVpbnQzMl90DQorI2RlZmluZSBwb3J0QkFTRV9UWVBFCWxvbmcNCiANCi0gICAgdHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSAgIFN0YWNrVHlwZV90Ow0KLSAgICB0eXBlZGVmIGxvbmcgICAgICAgICAgICAgQmFzZVR5cGVfdDsNCi0gICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nICAgIFVCYXNlVHlwZV90Ow0KK3R5cGVkZWYgcG9ydFNUQUNLX1RZUEUgU3RhY2tUeXBlX3Q7DQordHlwZWRlZiBsb25nIEJhc2VUeXBlX3Q7DQordHlwZWRlZiB1bnNpZ25lZCBsb25nIFVCYXNlVHlwZV90Ow0KIA0KLSAgICAjaWYgKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KLSAgICAgICAgdHlwZWRlZiB1aW50MTZfdCAgICAgVGlja1R5cGVfdDsNCi0gICAgICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAgICAgICAgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQotICAgICNlbHNlDQotICAgICAgICB0eXBlZGVmIHVpbnQzMl90ICAgICBUaWNrVHlwZV90Ow0KLSAgICAgICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICAgICAgICAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwNCisjaWYoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQorCXR5cGVkZWYgdWludDE2X3QgVGlja1R5cGVfdDsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggVGlja1R5cGVfdCApIDB4ZmZmZg0KKyNlbHNlDQorCXR5cGVkZWYgdWludDMyX3QgVGlja1R5cGVfdDsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTA0KIA0KLS8qIDMyLWJpdCB0aWNrIHR5cGUgb24gYSAzMi1iaXQgYXJjaGl0ZWN0dXJlLCBzbyByZWFkcyBvZiB0aGUgdGljayBjb3VudCBkbw0KLSAqIG5vdCBuZWVkIHRvIGJlIGd1YXJkZWQgd2l0aCBhIGNyaXRpY2FsIHNlY3Rpb24uICovDQotICAgICAgICAjZGVmaW5lIHBvcnRUSUNLX1RZUEVfSVNfQVRPTUlDICAgIDENCi0gICAgI2VuZGlmDQorCS8qIDMyLWJpdCB0aWNrIHR5cGUgb24gYSAzMi1iaXQgYXJjaGl0ZWN0dXJlLCBzbyByZWFkcyBvZiB0aGUgdGljayBjb3VudCBkbw0KKwlub3QgbmVlZCB0byBiZSBndWFyZGVkIHdpdGggYSBjcml0aWNhbCBzZWN0aW9uLiAqLw0KKwkjZGVmaW5lIHBvcnRUSUNLX1RZUEVfSVNfQVRPTUlDIDENCisjZW5kaWYNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBIYXJkd2FyZSBzcGVjaWZpY3MuICovDQotICAgICNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UICAgIDggICAgIC8qIENvdWxkIG1ha2UgZm91ciwgYWNjb3JkaW5nIHRvIG1hbnVhbC4gKi8NCi0gICAgI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RIICAgICAgLTENCi0gICAgI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMgICAgKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCi0gICAgI2RlZmluZSBwb3J0Tk9QKCkgICAgX19hc20gdm9sYXRpbGUgKCAiTk9QIiApDQorI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQJCQk4CS8qIENvdWxkIG1ha2UgZm91ciwgYWNjb3JkaW5nIHRvIG1hbnVhbC4gKi8NCisjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEgJCQktMQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TCQkJKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCisjZGVmaW5lIHBvcnROT1AoKQkJCQkJX19hc20gdm9sYXRpbGUoICJOT1AiICkNCiANCiAvKiBZaWVsZCBlcXVpdmFsZW50IHRvICIqcG9ydElUVV9TV0lOVFIgPSAweDAxOyAoIHZvaWQgKSAqcG9ydElUVV9TV0lOVFI7Ig0KLSAqIHdoZXJlIHBvcnRJVFVfU1dJTlRSIGlzIHRoZSBsb2NhdGlvbiBvZiB0aGUgc29mdHdhcmUgaW50ZXJydXB0IHJlZ2lzdGVyDQotICogKDB4MDAwODcyRTApLiAgRG9uJ3QgcmVseSBvbiB0aGUgYXNzZW1ibGVyIHRvIHNlbGVjdCBhIHJlZ2lzdGVyLCBzbyBpbnN0ZWFkDQotICogc2F2ZSBhbmQgcmVzdG9yZSBjbG9iYmVyZWQgcmVnaXN0ZXJzIG1hbnVhbGx5LiAqLw0KLSAgICAjZGVmaW5lIHBvcnRZSUVMRCgpICAgICAgICAgICBcDQotICAgIF9fYXNtIHZvbGF0aWxlICAgICAgICAgICAgICAgIFwNCi0gICAgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgIlBVU0guTAlSMTAJCQkJCVxuIlwNCi0gICAgICAgICJNT1YuTAkjMHg4NzJFMCwgUjEwCQlcbiJcDQotICAgICAgICAiTU9WLkIJIzB4MSwgW1IxMF0JCQlcbiJcDQotICAgICAgICAiTU9WLkwJW1IxMF0sIFIxMAkJCVxuIlwNCi0gICAgICAgICJQT1AJUjEwCQkJCQlcbiJcDQotICAgICkNCit3aGVyZSBwb3J0SVRVX1NXSU5UUiBpcyB0aGUgbG9jYXRpb24gb2YgdGhlIHNvZnR3YXJlIGludGVycnVwdCByZWdpc3Rlcg0KKygweDAwMDg3MkUwKS4gIERvbid0IHJlbHkgb24gdGhlIGFzc2VtYmxlciB0byBzZWxlY3QgYSByZWdpc3Rlciwgc28gaW5zdGVhZA0KK3NhdmUgYW5kIHJlc3RvcmUgY2xvYmJlcmVkIHJlZ2lzdGVycyBtYW51YWxseS4gKi8NCisjZGVmaW5lIHBvcnRZSUVMRCgpCQkJCQkJCVwNCisJX19hc20gdm9sYXRpbGUgCQkJCQkJCVwNCisJKAkJCQkJCQkJCQlcDQorCQkiUFVTSC5MCVIxMAkJCQkJXG4iCQlcDQorCQkiTU9WLkwJIzB4ODcyRTAsIFIxMAkJXG4iCQlcDQorCQkiTU9WLkIJIzB4MSwgW1IxMF0JCQlcbiIJCVwNCisJCSJNT1YuTAlbUjEwXSwgUjEwCQkJXG4iCQlcDQorCQkiUE9QCVIxMAkJCQkJXG4iCQlcDQorCSkNCiANCi0gICAgI2RlZmluZSBwb3J0WUlFTERfRlJPTV9JU1IoIHggKSAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCB4ICE9IHBkRkFMU0UgKSBwb3J0WUlFTEQoKQ0KKyNkZWZpbmUgcG9ydFlJRUxEX0ZST01fSVNSKCB4ICkJaWYoIHggIT0gcGRGQUxTRSApIHBvcnRZSUVMRCgpDQogDQogLyogVGhlc2UgbWFjcm9zIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LCBidXQgdGhyb3VnaCB0aGUNCi0gKiB0YXNrRU5URVJfQ1JJVElDQUwoKSBhbmQgdGFza0VYSVRfQ1JJVElDQUwoKSBtYWNyb3MuICBBbiBleHRyYSBjaGVjayBpcw0KLSAqIHBlcmZvcm1lZCBpZiBjb25maWdBU1NFUlQoKSBpcyBkZWZpbmVkIHRvIGVuc3VyZSBhbiBhc3NlcnRpb24gaGFuZGxlciBkb2VzIG5vdA0KLSAqIGluYWR2ZXJ0ZW50bHkgYXR0ZW1wdCB0byBsb3dlciB0aGUgSVBMIHdoZW4gdGhlIGNhbGwgdG8gYXNzZXJ0IHdhcyB0cmlnZ2VyZWQNCi0gKiBiZWNhdXNlIHRoZSBJUEwgdmFsdWUgd2FzIGZvdW5kIHRvIGJlIGFib3ZlCWNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWQ0KLSAqIHdoZW4gYW4gSVNSIHNhZmUgRnJlZVJUT1MgQVBJIGZ1bmN0aW9uIHdhcyBleGVjdXRlZC4gIElTUiBzYWZlIEZyZWVSVE9TIEFQSQ0KLSAqIGZ1bmN0aW9ucyBhcmUgdGhvc2UgdGhhdCBlbmQgaW4gRnJvbUlTUi4gIEZyZWVSVE9TIG1haW50YWlucyBhIHNlcGFyYXRlDQotICogaW50ZXJydXB0IEFQSSB0byBlbnN1cmUgQVBJIGZ1bmN0aW9uIGFuZCBpbnRlcnJ1cHQgZW50cnkgaXMgYXMgZmFzdCBhbmQgYXMNCi0gKiBzaW1wbGUgYXMgcG9zc2libGUuICovDQotICAgICNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2FzbSB2b2xhdGlsZSAoICJNVlRJUEwJIzAiKQ0KLSAgICAjaWZkZWYgY29uZmlnQVNTRVJUDQotICAgICAgICAjZGVmaW5lIHBvcnRBU1NFUlRfSUZfSU5URVJSVVBUX1BSSU9SSVRZX0lOVkFMSUQoKSAgICBjb25maWdBU1NFUlQoICggdWxQb3J0R2V0SVBMKCkgPD0gY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkgKQ0KLSAgICAgICAgI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgICAgICAgICAgICAgICAgICAgICAgaWYoIHVsUG9ydEdldElQTCgpIDwgY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkgX19hc20gdm9sYXRpbGUgKCAiTVZUSVBMCSUwIjo6ImkiICggY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkgKQ0KLSAgICAjZWxzZQ0KLSAgICAgICAgI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgICAgICAgICAgICAgICAgICAgICAgX19hc20gdm9sYXRpbGUgKCAiTVZUSVBMCSUwIjo6ImkiICggY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkgKQ0KLSAgICAjZW5kaWYNCit0YXNrRU5URVJfQ1JJVElDQUwoKSBhbmQgdGFza0VYSVRfQ1JJVElDQUwoKSBtYWNyb3MuICBBbiBleHRyYSBjaGVjayBpcw0KK3BlcmZvcm1lZCBpZiBjb25maWdBU1NFUlQoKSBpcyBkZWZpbmVkIHRvIGVuc3VyZSBhbiBhc3NlcnRpb24gaGFuZGxlciBkb2VzIG5vdA0KK2luYWR2ZXJ0ZW50bHkgYXR0ZW1wdCB0byBsb3dlciB0aGUgSVBMIHdoZW4gdGhlIGNhbGwgdG8gYXNzZXJ0IHdhcyB0cmlnZ2VyZWQNCitiZWNhdXNlIHRoZSBJUEwgdmFsdWUgd2FzIGZvdW5kIHRvIGJlIGFib3ZlCWNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWQ0KK3doZW4gYW4gSVNSIHNhZmUgRnJlZVJUT1MgQVBJIGZ1bmN0aW9uIHdhcyBleGVjdXRlZC4gIElTUiBzYWZlIEZyZWVSVE9TIEFQSQ0KK2Z1bmN0aW9ucyBhcmUgdGhvc2UgdGhhdCBlbmQgaW4gRnJvbUlTUi4gIEZyZWVSVE9TIG1haW50YWlucyBhIHNlcGFyYXRlDQoraW50ZXJydXB0IEFQSSB0byBlbnN1cmUgQVBJIGZ1bmN0aW9uIGFuZCBpbnRlcnJ1cHQgZW50cnkgaXMgYXMgZmFzdCBhbmQgYXMNCitzaW1wbGUgYXMgcG9zc2libGUuICovDQorI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKSAJX19hc20gdm9sYXRpbGUgKCAiTVZUSVBMCSMwIiApDQorI2lmZGVmIGNvbmZpZ0FTU0VSVA0KKwkjZGVmaW5lIHBvcnRBU1NFUlRfSUZfSU5URVJSVVBUX1BSSU9SSVRZX0lOVkFMSUQoKSBjb25maWdBU1NFUlQoICggdWxQb3J0R2V0SVBMKCkgPD0gY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkgKQ0KKwkjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAJaWYoIHVsUG9ydEdldElQTCgpIDwgY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkgX19hc20gdm9sYXRpbGUgKCAiTVZUSVBMCSUwIiA6OiJpIihjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkpICkNCisjZWxzZQ0KKwkjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAJX19hc20gdm9sYXRpbGUgKCAiTVZUSVBMCSUwIiA6OiJpIihjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkpICkNCisjZW5kaWYNCiANCiAvKiBDcml0aWNhbCBuZXN0aW5nIGNvdW50cyBhcmUgc3RvcmVkIGluIHRoZSBUQ0IuICovDQotICAgICNkZWZpbmUgcG9ydENSSVRJQ0FMX05FU1RJTkdfSU5fVENCICAgICggMSApDQorI2RlZmluZSBwb3J0Q1JJVElDQUxfTkVTVElOR19JTl9UQ0IgKCAxICkNCiANCiAvKiBUaGUgY3JpdGljYWwgbmVzdGluZyBmdW5jdGlvbnMgZGVmaW5lZCB3aXRoaW4gdGFza3MuYy4gKi8NCi0gICAgZXh0ZXJuIHZvaWQgdlRhc2tFbnRlckNyaXRpY2FsKCB2b2lkICk7DQotICAgIGV4dGVybiB2b2lkIHZUYXNrRXhpdENyaXRpY2FsKCB2b2lkICk7DQotICAgICNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgICAgdlRhc2tFbnRlckNyaXRpY2FsKCkNCi0gICAgI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpICAgICB2VGFza0V4aXRDcml0aWNhbCgpDQorZXh0ZXJuIHZvaWQgdlRhc2tFbnRlckNyaXRpY2FsKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdlRhc2tFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCisjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpCXZUYXNrRW50ZXJDcml0aWNhbCgpDQorI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpCQl2VGFza0V4aXRDcml0aWNhbCgpDQogDQogLyogQXMgdGhpcyBwb3J0IGFsbG93cyBpbnRlcnJ1cHQgbmVzdGluZy4uLiAqLw0KLSAgICB1aW50MzJfdCB1bFBvcnRHZXRJUEwoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fKCAoIG5ha2VkICkgKTsNCi0gICAgdm9pZCB2UG9ydFNldElQTCggdWludDMyX3QgdWxOZXdJUEwgKSBfX2F0dHJpYnV0ZV9fKCAoIG5ha2VkICkgKTsNCi0gICAgI2RlZmluZSBwb3J0U0VUX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bFBvcnRHZXRJUEwoKTsgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpDQotICAgICNkZWZpbmUgcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCB1eFNhdmVkSW50ZXJydXB0U3RhdHVzICkgICAgdlBvcnRTZXRJUEwoIHV4U2F2ZWRJbnRlcnJ1cHRTdGF0dXMgKQ0KK3VpbnQzMl90IHVsUG9ydEdldElQTCggdm9pZCApIF9fYXR0cmlidXRlX18oKG5ha2VkKSk7DQordm9pZCB2UG9ydFNldElQTCggdWludDMyX3QgdWxOZXdJUEwgKSBfX2F0dHJpYnV0ZV9fKChuYWtlZCkpOw0KKyNkZWZpbmUgcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpIHVsUG9ydEdldElQTCgpOyBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkNCisjZGVmaW5lIHBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUiggdXhTYXZlZEludGVycnVwdFN0YXR1cyApIHZQb3J0U2V0SVBMKCB1eFNhdmVkSW50ZXJydXB0U3RhdHVzICkNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBUYXNrIGZ1bmN0aW9uIG1hY3JvcyBhcyBkZXNjcmliZWQgb24gdGhlIEZyZWVSVE9TLm9yZyBXRUIgc2l0ZS4gKi8NCi0gICAgI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQotICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgICAgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCiANCi0gICAgI2lmZGVmIF9fY3BsdXNwbHVzDQotICAgICAgICB9DQotICAgICNlbmRpZg0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCiANCiAjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8NCisNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9HQ0MvUlg2MDB2Mi9wb3J0LmMgYi9wb3J0YWJsZS9HQ0MvUlg2MDB2Mi9wb3J0LmMKaW5kZXggNTIwYmM3YS4uMzQ4MGMxOCAxMDA2NDQKLS0tIGEvcG9ydGFibGUvR0NDL1JYNjAwdjIvcG9ydC5jCisrKyBiL3BvcnRhYmxlL0dDQy9SWDYwMHYyL3BvcnQuYwpAQCAtMjYsOCArMjYsOCBAQAogICovDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLSogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFibGUuaCBmb3IgdGhlIFNIMkEgcG9ydC4NCi0qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorICogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFibGUuaCBmb3IgdGhlIFNIMkEgcG9ydC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFNjaGVkdWxlciBpbmNsdWRlcy4gKi8NCiAjaW5jbHVkZSAiRnJlZVJUT1MuaCINCkBAIC00MiwxNyArNDIsMTcgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFRhc2tzIHNob3VsZCBzdGFydCB3aXRoIGludGVycnVwdHMgZW5hYmxlZCBhbmQgaW4gU3VwZXJ2aXNvciBtb2RlLCB0aGVyZWZvcmUNCi0gKiBQU1cgaXMgc2V0IHdpdGggVSBhbmQgSSBzZXQsIGFuZCBQTSBhbmQgSVBMIGNsZWFyLiAqLw0KK1BTVyBpcyBzZXQgd2l0aCBVIGFuZCBJIHNldCwgYW5kIFBNIGFuZCBJUEwgY2xlYXIuICovDQogI2RlZmluZSBwb3J0SU5JVElBTF9QU1cgICAgICggKCBTdGFja1R5cGVfdCApIDB4MDAwMzAwMDAgKQ0KICNkZWZpbmUgcG9ydElOSVRJQUxfRlBTVyAgICAoICggU3RhY2tUeXBlX3QgKSAweDAwMDAwMTAwICkNCiANCiAvKiBUaGVzZSBtYWNyb3MgYWxsb3cgYSBjcml0aWNhbCBzZWN0aW9uIHRvIGJlIGFkZGVkIGFyb3VuZCB0aGUgY2FsbCB0bw0KLSAqIHhUYXNrSW5jcmVtZW50VGljaygpLCB3aGljaCBpcyBvbmx5IGV2ZXIgY2FsbGVkIGZyb20gaW50ZXJydXB0cyBhdCB0aGUga2VybmVsDQotICogcHJpb3JpdHkgLSBpZSBhIGtub3duIHByaW9yaXR5LiAgVGhlcmVmb3JlIHRoZXNlIGxvY2FsIG1hY3JvcyBhcmUgYSBzbGlnaHQNCi0gKiBvcHRpbWlzYXRpb24gY29tcGFyZWQgdG8gY2FsbGluZyB0aGUgZ2xvYmFsIFNFVC9DTEVBUl9JTlRFUlJVUFRfTUFTSyBtYWNyb3MsDQotICogd2hpY2ggd291bGQgcmVxdWlyZSB0aGUgb2xkIElQTCB0byBiZSByZWFkIGZpcnN0IGFuZCBzdG9yZWQgaW4gYSBsb2NhbCB2YXJpYWJsZS4gKi8NCi0jZGVmaW5lIHBvcnRNQVNLX0lOVEVSUlVQVFNfRlJPTV9LRVJORUxfSVNSKCkgICAgICBfX2FzbSB2b2xhdGlsZSAoICJNVlRJUEwJJTAiIDo6ImkiICggY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkgKQ0KLSNkZWZpbmUgcG9ydFVOTUFTS19JTlRFUlJVUFRTX0ZST01fS0VSTkVMX0lTUigpICAgIF9fYXNtIHZvbGF0aWxlICggIk1WVElQTAklMCIgOjoiaSIgKCBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZICkgKQ0KK3hUYXNrSW5jcmVtZW50VGljaygpLCB3aGljaCBpcyBvbmx5IGV2ZXIgY2FsbGVkIGZyb20gaW50ZXJydXB0cyBhdCB0aGUga2VybmVsDQorcHJpb3JpdHkgLSBpZSBhIGtub3duIHByaW9yaXR5LiAgVGhlcmVmb3JlIHRoZXNlIGxvY2FsIG1hY3JvcyBhcmUgYSBzbGlnaHQNCitvcHRpbWlzYXRpb24gY29tcGFyZWQgdG8gY2FsbGluZyB0aGUgZ2xvYmFsIFNFVC9DTEVBUl9JTlRFUlJVUFRfTUFTSyBtYWNyb3MsDQord2hpY2ggd291bGQgcmVxdWlyZSB0aGUgb2xkIElQTCB0byBiZSByZWFkIGZpcnN0IGFuZCBzdG9yZWQgaW4gYSBsb2NhbCB2YXJpYWJsZS4gKi8NCisjZGVmaW5lIHBvcnRNQVNLX0lOVEVSUlVQVFNfRlJPTV9LRVJORUxfSVNSKCkgCV9fYXNtIHZvbGF0aWxlICggIk1WVElQTAklMCIgOjoiaSIoY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZKSApDQorI2RlZmluZSBwb3J0VU5NQVNLX0lOVEVSUlVQVFNfRlJPTV9LRVJORUxfSVNSKCkgCV9fYXNtIHZvbGF0aWxlICggIk1WVElQTAklMCIgOjoiaSIoY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWSkgKQ0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KQEAgLTYwLDM1NyArNjAsMzQ4IEBACiAgKiBGdW5jdGlvbiB0byBzdGFydCB0aGUgZmlyc3QgdGFzayBleGVjdXRpbmcgLSB3cml0dGVuIGluIGFzbSBjb2RlIGFzIGRpcmVjdA0KICAqIGFjY2VzcyB0byByZWdpc3RlcnMgaXMgcmVxdWlyZWQuDQogICovDQotc3RhdGljIHZvaWQgcHJ2U3RhcnRGaXJzdFRhc2soIHZvaWQgKSBfX2F0dHJpYnV0ZV9fKCAoIG5ha2VkICkgKTsNCitzdGF0aWMgdm9pZCBwcnZTdGFydEZpcnN0VGFzayggdm9pZCApIF9fYXR0cmlidXRlX18oKG5ha2VkKSk7DQogDQogLyoNCiAgKiBTb2Z0d2FyZSBpbnRlcnJ1cHQgaGFuZGxlci4gIFBlcmZvcm1zIHRoZSBhY3R1YWwgY29udGV4dCBzd2l0Y2ggKHNhdmluZyBhbmQNCiAgKiByZXN0b3Jpbmcgb2YgcmVnaXN0ZXJzKS4gIFdyaXR0ZW4gaW4gYXNtIGNvZGUgYXMgZGlyZWN0IHJlZ2lzdGVyIGFjY2VzcyBpcw0KICAqIHJlcXVpcmVkLg0KICAqLw0KLXZvaWQgdlNvZnR3YXJlSW50ZXJydXB0SVNSKCB2b2lkICkgX19hdHRyaWJ1dGVfXyggKCBuYWtlZCApICk7DQordm9pZCB2U29mdHdhcmVJbnRlcnJ1cHRJU1IoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fKChuYWtlZCkpOw0KIA0KIC8qDQogICogVGhlIHRpY2sgaW50ZXJydXB0IGhhbmRsZXIuDQogICovDQotdm9pZCB2VGlja0lTUiggdm9pZCApIF9fYXR0cmlidXRlX18oICggaW50ZXJydXB0ICkgKTsNCit2b2lkIHZUaWNrSVNSKCB2b2lkICkgX19hdHRyaWJ1dGVfXygoaW50ZXJydXB0KSk7DQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQotZXh0ZXJuIHZvaWQgKiBweEN1cnJlbnRUQ0I7DQorZXh0ZXJuIHZvaWQgKnB4Q3VycmVudFRDQjsNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKg0KICAqIFNlZSBoZWFkZXIgZmlsZSBmb3IgZGVzY3JpcHRpb24uDQogICovDQotU3RhY2tUeXBlX3QgKiBweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICogcHhUb3BPZlN0YWNrLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYXNrRnVuY3Rpb25fdCBweENvZGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KK1N0YWNrVHlwZV90ICpweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICpweFRvcE9mU3RhY2ssIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzICkNCiB7DQotICAgIC8qIFIwIGlzIG5vdCBpbmNsdWRlZCBhcyBpdCBpcyB0aGUgc3RhY2sgcG9pbnRlci4gKi8NCisJLyogUjAgaXMgbm90IGluY2x1ZGVkIGFzIGl0IGlzIHRoZSBzdGFjayBwb2ludGVyLiAqLw0KIA0KLSAgICAqcHhUb3BPZlN0YWNrID0gMHgwMDsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSBwb3J0SU5JVElBTF9QU1c7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB4Q29kZTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MDA7DQorCXB4VG9wT2ZTdGFjay0tOw0KKyAJKnB4VG9wT2ZTdGFjayA9IHBvcnRJTklUSUFMX1BTVzsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHhDb2RlOw0KIA0KLSAgICAvKiBXaGVuIGRlYnVnZ2luZyBpdCBjYW4gYmUgdXNlZnVsIGlmIGV2ZXJ5IHJlZ2lzdGVyIGlzIHNldCB0byBhIGtub3duDQotICAgICAqIHZhbHVlLiAgT3RoZXJ3aXNlIGNvZGUgc3BhY2UgY2FuIGJlIHNhdmVkIGJ5IGp1c3Qgc2V0dGluZyB0aGUgcmVnaXN0ZXJzDQotICAgICAqIHRoYXQgbmVlZCB0byBiZSBzZXQuICovDQotICAgICNpZmRlZiBVU0VfRlVMTF9SRUdJU1RFUl9JTklUSUFMSVNBVElPTg0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweGZmZmZmZmZmOyAvKiByMTUuICovDQotICAgICAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICAgICAgICAgKnB4VG9wT2ZTdGFjayA9IDB4ZWVlZWVlZWU7DQotICAgICAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICAgICAgICAgKnB4VG9wT2ZTdGFjayA9IDB4ZGRkZGRkZGQ7DQotICAgICAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICAgICAgICAgKnB4VG9wT2ZTdGFjayA9IDB4Y2NjY2NjY2M7DQotICAgICAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICAgICAgICAgKnB4VG9wT2ZTdGFjayA9IDB4YmJiYmJiYmI7DQotICAgICAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICAgICAgICAgKnB4VG9wT2ZTdGFjayA9IDB4YWFhYWFhYWE7DQotICAgICAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICAgICAgICAgKnB4VG9wT2ZTdGFjayA9IDB4OTk5OTk5OTk7DQotICAgICAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICAgICAgICAgKnB4VG9wT2ZTdGFjayA9IDB4ODg4ODg4ODg7DQotICAgICAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICAgICAgICAgKnB4VG9wT2ZTdGFjayA9IDB4Nzc3Nzc3Nzc7DQotICAgICAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICAgICAgICAgKnB4VG9wT2ZTdGFjayA9IDB4NjY2NjY2NjY7DQotICAgICAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICAgICAgICAgKnB4VG9wT2ZTdGFjayA9IDB4NTU1NTU1NTU7DQotICAgICAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICAgICAgICAgKnB4VG9wT2ZTdGFjayA9IDB4NDQ0NDQ0NDQ7DQotICAgICAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICAgICAgICAgKnB4VG9wT2ZTdGFjayA9IDB4MzMzMzMzMzM7DQotICAgICAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICAgICAgICAgKnB4VG9wT2ZTdGFjayA9IDB4MjIyMjIyMjI7DQotICAgICAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICAgICB9DQotICAgICNlbHNlIC8qIGlmZGVmIFVTRV9GVUxMX1JFR0lTVEVSX0lOSVRJQUxJU0FUSU9OICovDQotICAgICAgICB7DQotICAgICAgICAgICAgcHhUb3BPZlN0YWNrIC09IDE1Ow0KLSAgICAgICAgfQ0KLSAgICAjZW5kaWYgLyogaWZkZWYgVVNFX0ZVTExfUkVHSVNURVJfSU5JVElBTElTQVRJT04gKi8NCisJLyogV2hlbiBkZWJ1Z2dpbmcgaXQgY2FuIGJlIHVzZWZ1bCBpZiBldmVyeSByZWdpc3RlciBpcyBzZXQgdG8gYSBrbm93bg0KKwl2YWx1ZS4gIE90aGVyd2lzZSBjb2RlIHNwYWNlIGNhbiBiZSBzYXZlZCBieSBqdXN0IHNldHRpbmcgdGhlIHJlZ2lzdGVycw0KKwl0aGF0IG5lZWQgdG8gYmUgc2V0LiAqLw0KKwkjaWZkZWYgVVNFX0ZVTExfUkVHSVNURVJfSU5JVElBTElTQVRJT04NCisJew0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHhmZmZmZmZmZjsJLyogcjE1LiAqLw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHhlZWVlZWVlZTsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4ZGRkZGRkZGQ7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweGNjY2NjY2NjOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHhiYmJiYmJiYjsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4YWFhYWFhYWE7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweDk5OTk5OTk5Ow0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHg4ODg4ODg4ODsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4Nzc3Nzc3Nzc7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweDY2NjY2NjY2Ow0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHg1NTU1NTU1NTsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4NDQ0NDQ0NDQ7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweDMzMzMzMzMzOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHgyMjIyMjIyMjsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwl9DQorCSNlbHNlDQorCXsNCisJCXB4VG9wT2ZTdGFjayAtPSAxNTsNCisJfQ0KKwkjZW5kaWYNCiANCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwdlBhcmFtZXRlcnM7IC8qIFIxICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gcG9ydElOSVRJQUxfRlBTVzsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAweDExMTExMTExOyAvKiBBY2N1bXVsYXRvciAwLiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MjIyMjIyMjI7IC8qIEFjY3VtdWxhdG9yIDAuICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMHgzMzMzMzMzMzsgLyogQWNjdW11bGF0b3IgMC4gKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAweDQ0NDQ0NDQ0OyAvKiBBY2N1bXVsYXRvciAxLiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4NTU1NTU1NTU7IC8qIEFjY3VtdWxhdG9yIDEuICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMHg2NjY2NjY2NjsgLyogQWNjdW11bGF0b3IgMS4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwdlBhcmFtZXRlcnM7IC8qIFIxICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gcG9ydElOSVRJQUxfRlBTVzsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDExMTExMTExOyAvKiBBY2N1bXVsYXRvciAwLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MjIyMjIyMjI7IC8qIEFjY3VtdWxhdG9yIDAuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgzMzMzMzMzMzsgLyogQWNjdW11bGF0b3IgMC4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDQ0NDQ0NDQ0OyAvKiBBY2N1bXVsYXRvciAxLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4NTU1NTU1NTU7IC8qIEFjY3VtdWxhdG9yIDEuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHg2NjY2NjY2NjsgLyogQWNjdW11bGF0b3IgMS4gKi8NCiANCi0gICAgcmV0dXJuIHB4VG9wT2ZTdGFjazsNCisJcmV0dXJuIHB4VG9wT2ZTdGFjazsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogQmFzZVR5cGVfdCB4UG9ydFN0YXJ0U2NoZWR1bGVyKCB2b2lkICkNCiB7DQotICAgIGV4dGVybiB2b2lkIHZBcHBsaWNhdGlvblNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2QXBwbGljYXRpb25TZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICk7DQogDQotICAgIC8qIFVzZSBweEN1cnJlbnRUQ0IganVzdCBzbyBpdCBkb2VzIG5vdCBnZXQgb3B0aW1pc2VkIGF3YXkuICovDQotICAgIGlmKCBweEN1cnJlbnRUQ0IgIT0gTlVMTCApDQotICAgIHsNCi0gICAgICAgIC8qIENhbGwgYW4gYXBwbGljYXRpb24gZnVuY3Rpb24gdG8gc2V0IHVwIHRoZSB0aW1lciB0aGF0IHdpbGwgZ2VuZXJhdGUgdGhlDQotICAgICAgICAgKiB0aWNrIGludGVycnVwdC4gIFRoaXMgd2F5IHRoZSBhcHBsaWNhdGlvbiBjYW4gZGVjaWRlIHdoaWNoIHBlcmlwaGVyYWwgdG8NCi0gICAgICAgICAqIHVzZS4gIEEgZGVtbyBhcHBsaWNhdGlvbiBpcyBwcm92aWRlZCB0byBzaG93IGEgc3VpdGFibGUgZXhhbXBsZS4gKi8NCi0gICAgICAgIHZBcHBsaWNhdGlvblNldHVwVGltZXJJbnRlcnJ1cHQoKTsNCisJLyogVXNlIHB4Q3VycmVudFRDQiBqdXN0IHNvIGl0IGRvZXMgbm90IGdldCBvcHRpbWlzZWQgYXdheS4gKi8NCisJaWYoIHB4Q3VycmVudFRDQiAhPSBOVUxMICkNCisJew0KKwkJLyogQ2FsbCBhbiBhcHBsaWNhdGlvbiBmdW5jdGlvbiB0byBzZXQgdXAgdGhlIHRpbWVyIHRoYXQgd2lsbCBnZW5lcmF0ZSB0aGUNCisJCXRpY2sgaW50ZXJydXB0LiAgVGhpcyB3YXkgdGhlIGFwcGxpY2F0aW9uIGNhbiBkZWNpZGUgd2hpY2ggcGVyaXBoZXJhbCB0bw0KKwkJdXNlLiAgQSBkZW1vIGFwcGxpY2F0aW9uIGlzIHByb3ZpZGVkIHRvIHNob3cgYSBzdWl0YWJsZSBleGFtcGxlLiAqLw0KKwkJdkFwcGxpY2F0aW9uU2V0dXBUaW1lckludGVycnVwdCgpOw0KIA0KLSAgICAgICAgLyogRW5hYmxlIHRoZSBzb2Z0d2FyZSBpbnRlcnJ1cHQuICovDQotICAgICAgICBfSUVOKCBfSUNVX1NXSU5UICkgPSAxOw0KKwkJLyogRW5hYmxlIHRoZSBzb2Z0d2FyZSBpbnRlcnJ1cHQuICovDQorCQlfSUVOKCBfSUNVX1NXSU5UICkgPSAxOw0KIA0KLSAgICAgICAgLyogRW5zdXJlIHRoZSBzb2Z0d2FyZSBpbnRlcnJ1cHQgaXMgY2xlYXIuICovDQotICAgICAgICBfSVIoIF9JQ1VfU1dJTlQgKSA9IDA7DQorCQkvKiBFbnN1cmUgdGhlIHNvZnR3YXJlIGludGVycnVwdCBpcyBjbGVhci4gKi8NCisJCV9JUiggX0lDVV9TV0lOVCApID0gMDsNCiANCi0gICAgICAgIC8qIEVuc3VyZSB0aGUgc29mdHdhcmUgaW50ZXJydXB0IGlzIHNldCB0byB0aGUga2VybmVsIHByaW9yaXR5LiAqLw0KLSAgICAgICAgX0lQUiggX0lDVV9TV0lOVCApID0gY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWTsNCisJCS8qIEVuc3VyZSB0aGUgc29mdHdhcmUgaW50ZXJydXB0IGlzIHNldCB0byB0aGUga2VybmVsIHByaW9yaXR5LiAqLw0KKwkJX0lQUiggX0lDVV9TV0lOVCApID0gY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWTsNCiANCi0gICAgICAgIC8qIFN0YXJ0IHRoZSBmaXJzdCB0YXNrLiAqLw0KLSAgICAgICAgcHJ2U3RhcnRGaXJzdFRhc2soKTsNCi0gICAgfQ0KKwkJLyogU3RhcnQgdGhlIGZpcnN0IHRhc2suICovDQorCQlwcnZTdGFydEZpcnN0VGFzaygpOw0KKwl9DQogDQotICAgIC8qIFNob3VsZCBub3QgZ2V0IGhlcmUuICovDQotICAgIHJldHVybiBwZEZBSUw7DQorCS8qIFNob3VsZCBub3QgZ2V0IGhlcmUuICovDQorCXJldHVybiBwZEZBSUw7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQ0KIHsNCi0gICAgLyogTm90IGltcGxlbWVudGVkIGluIHBvcnRzIHdoZXJlIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmV0dXJuIHRvLg0KLSAgICAgKiBBcnRpZmljaWFsbHkgZm9yY2UgYW4gYXNzZXJ0LiAqLw0KLSAgICBjb25maWdBU1NFUlQoIHB4Q3VycmVudFRDQiA9PSBOVUxMICk7DQorCS8qIE5vdCBpbXBsZW1lbnRlZCBpbiBwb3J0cyB3aGVyZSB0aGVyZSBpcyBub3RoaW5nIHRvIHJldHVybiB0by4NCisJQXJ0aWZpY2lhbGx5IGZvcmNlIGFuIGFzc2VydC4gKi8NCisJY29uZmlnQVNTRVJUKCBweEN1cnJlbnRUQ0IgPT0gTlVMTCApOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBzdGF0aWMgdm9pZCBwcnZTdGFydEZpcnN0VGFzayggdm9pZCApDQogew0KLSAgICBfX2FzbSB2b2xhdGlsZQ0KLSAgICAoDQorCV9fYXNtIHZvbGF0aWxlDQorCSgNCisJCS8qIFdoZW4gc3RhcnRpbmcgdGhlIHNjaGVkdWxlciB0aGVyZSBpcyBub3RoaW5nIHRoYXQgbmVlZHMgbW92aW5nIHRvIHRoZQ0KKwkJaW50ZXJydXB0IHN0YWNrIGJlY2F1c2UgdGhlIGZ1bmN0aW9uIGlzIG5vdCBjYWxsZWQgZnJvbSBhbiBpbnRlcnJ1cHQuDQorCQlKdXN0IGVuc3VyZSB0aGUgY3VycmVudCBzdGFjayBpcyB0aGUgdXNlciBzdGFjay4gKi8NCisJCSJTRVRQU1cJCVUJCQkJCQlcbiIgXA0KIA0KLSAgICAgICAgLyogV2hlbiBzdGFydGluZyB0aGUgc2NoZWR1bGVyIHRoZXJlIGlzIG5vdGhpbmcgdGhhdCBuZWVkcyBtb3ZpbmcgdG8gdGhlDQotICAgICAgICAgKiBpbnRlcnJ1cHQgc3RhY2sgYmVjYXVzZSB0aGUgZnVuY3Rpb24gaXMgbm90IGNhbGxlZCBmcm9tIGFuIGludGVycnVwdC4NCi0gICAgICAgICAqIEp1c3QgZW5zdXJlIHRoZSBjdXJyZW50IHN0YWNrIGlzIHRoZSB1c2VyIHN0YWNrLiAqLw0KLSAgICAgICAgIlNFVFBTVwkJVQkJCQkJCVxuIlwNCisJCS8qIE9idGFpbiB0aGUgbG9jYXRpb24gb2YgdGhlIHN0YWNrIGFzc29jaWF0ZWQgd2l0aCB3aGljaCBldmVyIHRhc2sNCisJCXB4Q3VycmVudFRDQiBpcyBjdXJyZW50bHkgcG9pbnRpbmcgdG8uICovDQorCQkiTU9WLkwJCSNfcHhDdXJyZW50VENCLCBSMTUJCVxuIiBcDQorCQkiTU9WLkwJCVtSMTVdLCBSMTUJCQkJXG4iIFwNCisJCSJNT1YuTAkJW1IxNV0sIFIwCQkJCVxuIiBcDQogDQorCQkvKiBSZXN0b3JlIHRoZSByZWdpc3RlcnMgZnJvbSB0aGUgc3RhY2sgb2YgdGhlIHRhc2sgcG9pbnRlZCB0byBieQ0KKwkJcHhDdXJyZW50VENCLiAqLw0KKwkgICAgIlBPUAkJUjE1CQkJCQkJXG4iIFwNCiANCi0gICAgICAgIC8qIE9idGFpbiB0aGUgbG9jYXRpb24gb2YgdGhlIHN0YWNrIGFzc29jaWF0ZWQgd2l0aCB3aGljaCBldmVyIHRhc2sNCi0gICAgICAgICAqIHB4Q3VycmVudFRDQiBpcyBjdXJyZW50bHkgcG9pbnRpbmcgdG8uICovDQotICAgICAgICAiTU9WLkwJCSNfcHhDdXJyZW50VENCLCBSMTUJCVxuIlwNCi0gICAgICAgICJNT1YuTAkJW1IxNV0sIFIxNQkJCQlcbiJcDQotICAgICAgICAiTU9WLkwJCVtSMTVdLCBSMAkJCQlcbiJcDQorCQkvKiBBY2N1bXVsYXRvciBsb3cgMzIgYml0cy4gKi8NCisJICAgICJNVlRBQ0xPCVIxNSwgQTAJCQkJCVxuIiBcDQorCSAgICAiUE9QCQlSMTUJCQkJCQlcbiIgXA0KIA0KKwkgICAgLyogQWNjdW11bGF0b3IgaGlnaCAzMiBiaXRzLiAqLw0KKwkgICAgIk1WVEFDSEkJUjE1LCBBMAkJCQkJXG4iIFwNCisJICAgICJQT1AJCVIxNQkJCQkJCVxuIiBcDQogDQotICAgICAgICAvKiBSZXN0b3JlIHRoZSByZWdpc3RlcnMgZnJvbSB0aGUgc3RhY2sgb2YgdGhlIHRhc2sgcG9pbnRlZCB0byBieQ0KLSAgICAgICAgICogcHhDdXJyZW50VENCLiAqLw0KLSAgICAgICAgIlBPUAkJUjE1CQkJCQkJXG4iXA0KKwkgICAgLyogQWNjdW11bGF0b3IgZ3VhcmQuICovDQorCSAgICAiTVZUQUNHVQlSMTUsIEEwCQkJCQlcbiIgXA0KKwkgICAgIlBPUAkJUjE1CQkJCQkJXG4iIFwNCiANCi0gICAgICAgIC8qIEFjY3VtdWxhdG9yIGxvdyAzMiBiaXRzLiAqLw0KLSAgICAgICAgIk1WVEFDTE8JUjE1LCBBMAkJCQkJXG4iXA0KLSAgICAgICAgIlBPUAkJUjE1CQkJCQkJXG4iXA0KKwkgICAgLyogQWNjdW11bGF0b3IgbG93IDMyIGJpdHMuICovDQorCSAgICAiTVZUQUNMTwlSMTUsIEExCQkJCQlcbiIgXA0KKwkgICAgIlBPUAkJUjE1CQkJCQkJXG4iIFwNCiANCi0gICAgICAgIC8qIEFjY3VtdWxhdG9yIGhpZ2ggMzIgYml0cy4gKi8NCi0gICAgICAgICJNVlRBQ0hJCVIxNSwgQTAJCQkJCVxuIlwNCi0gICAgICAgICJQT1AJCVIxNQkJCQkJCVxuIlwNCisJICAgIC8qIEFjY3VtdWxhdG9yIGhpZ2ggMzIgYml0cy4gKi8NCisJICAgICJNVlRBQ0hJCVIxNSwgQTEJCQkJCVxuIiBcDQorCSAgICAiUE9QCQlSMTUJCQkJCQlcbiIgXA0KIA0KLSAgICAgICAgLyogQWNjdW11bGF0b3IgZ3VhcmQuICovDQotICAgICAgICAiTVZUQUNHVQlSMTUsIEEwCQkJCQlcbiJcDQotICAgICAgICAiUE9QCQlSMTUJCQkJCQlcbiJcDQorCSAgICAvKiBBY2N1bXVsYXRvciBndWFyZC4gKi8NCisJICAgICJNVlRBQ0dVCVIxNSwgQTEJCQkJCVxuIiBcDQorCSAgICAiUE9QCQlSMTUJCQkJCQlcbiIgXA0KIA0KLSAgICAgICAgLyogQWNjdW11bGF0b3IgbG93IDMyIGJpdHMuICovDQotICAgICAgICAiTVZUQUNMTwlSMTUsIEExCQkJCQlcbiJcDQotICAgICAgICAiUE9QCQlSMTUJCQkJCQlcbiJcDQorCQkvKiBGbG9hdGluZyBwb2ludCBzdGF0dXMgd29yZC4gKi8NCisJICAgICJNVlRDCQlSMTUsIEZQU1cgCQkJCVxuIiBcDQogDQotICAgICAgICAvKiBBY2N1bXVsYXRvciBoaWdoIDMyIGJpdHMuICovDQotICAgICAgICAiTVZUQUNISQlSMTUsIEExCQkJCQlcbiJcDQotICAgICAgICAiUE9QCQlSMTUJCQkJCQlcbiJcDQorCQkvKiBSMSB0byBSMTUgLSBSMCBpcyBub3QgaW5jbHVkZWQgYXMgaXQgaXMgdGhlIFNQLiAqLw0KKwkgICAgIlBPUE0JCVIxLVIxNSAJCQkJCVxuIiBcDQogDQotICAgICAgICAvKiBBY2N1bXVsYXRvciBndWFyZC4gKi8NCi0gICAgICAgICJNVlRBQ0dVCVIxNSwgQTEJCQkJCVxuIlwNCi0gICAgICAgICJQT1AJCVIxNQkJCQkJCVxuIlwNCi0NCi0gICAgICAgIC8qIEZsb2F0aW5nIHBvaW50IHN0YXR1cyB3b3JkLiAqLw0KLSAgICAgICAgIk1WVEMJCVIxNSwgRlBTVyAJCQkJXG4iXA0KLQ0KLSAgICAgICAgLyogUjEgdG8gUjE1IC0gUjAgaXMgbm90IGluY2x1ZGVkIGFzIGl0IGlzIHRoZSBTUC4gKi8NCi0gICAgICAgICJQT1BNCQlSMS1SMTUgCQkJCQlcbiJcDQotDQotICAgICAgICAvKiBUaGlzIHBvcHMgdGhlIHJlbWFpbmluZyByZWdpc3RlcnMuICovDQotICAgICAgICAiUlRFCQkJCQkJCQlcbiJcDQotICAgICAgICAiTk9QCQkJCQkJCQlcbiJcDQotICAgICAgICAiTk9QCQkJCQkJCQlcbiINCi0gICAgKTsNCisJCS8qIFRoaXMgcG9wcyB0aGUgcmVtYWluaW5nIHJlZ2lzdGVycy4gKi8NCisJICAgICJSVEUJCQkJCQkJCVxuIiBcDQorCSAgICAiTk9QCQkJCQkJCQlcbiIgXA0KKwkgICAgIk5PUAkJCQkJCQkJXG4iDQorCSk7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlNvZnR3YXJlSW50ZXJydXB0SVNSKCB2b2lkICkNCiB7DQotICAgIF9fYXNtIHZvbGF0aWxlDQotICAgICgNCi0gICAgICAgIC8qIFJlLWVuYWJsZSBpbnRlcnJ1cHRzLiAqLw0KLSAgICAgICAgIlNFVFBTVwkJSQkJCQkJCQlcbiJcDQorCV9fYXNtIHZvbGF0aWxlDQorCSgNCisJCS8qIFJlLWVuYWJsZSBpbnRlcnJ1cHRzLiAqLw0KKwkJIlNFVFBTVwkJSQkJCQkJCQlcbiIgXA0KIA0KKwkJLyogTW92ZSB0aGUgZGF0YSB0aGF0IHdhcyBhdXRvbWF0aWNhbGx5IHB1c2hlZCBvbnRvIHRoZSBpbnRlcnJ1cHQgc3RhY2sgd2hlbg0KKwkJdGhlIGludGVycnVwdCBvY2N1cnJlZCBmcm9tIHRoZSBpbnRlcnJ1cHQgc3RhY2sgdG8gdGhlIHVzZXIgc3RhY2suDQogDQotICAgICAgICAvKiBNb3ZlIHRoZSBkYXRhIHRoYXQgd2FzIGF1dG9tYXRpY2FsbHkgcHVzaGVkIG9udG8gdGhlIGludGVycnVwdCBzdGFjayB3aGVuDQotICAgICAgICAgKiB0aGUgaW50ZXJydXB0IG9jY3VycmVkIGZyb20gdGhlIGludGVycnVwdCBzdGFjayB0byB0aGUgdXNlciBzdGFjay4NCi0gICAgICAgICAqDQotICAgICAgICAgKiBSMTUgaXMgc2F2ZWQgYmVmb3JlIGl0IGlzIGNsb2JiZXJlZC4gKi8NCi0gICAgICAgICJQVVNILkwJCVIxNQkJCQkJCQlcbiJcDQorCQlSMTUgaXMgc2F2ZWQgYmVmb3JlIGl0IGlzIGNsb2JiZXJlZC4gKi8NCisJCSJQVVNILkwJCVIxNQkJCQkJCQlcbiIgXA0KIA0KLSAgICAgICAgLyogUmVhZCB0aGUgdXNlciBzdGFjayBwb2ludGVyLiAqLw0KLSAgICAgICAgIk1WRkMJCVVTUCwgUjE1CQkJCQlcbiJcDQorCQkvKiBSZWFkIHRoZSB1c2VyIHN0YWNrIHBvaW50ZXIuICovDQorCQkiTVZGQwkJVVNQLCBSMTUJCQkJCVxuIiBcDQogDQotICAgICAgICAvKiBNb3ZlIHRoZSBhZGRyZXNzIGRvd24gdG8gdGhlIGRhdGEgYmVpbmcgbW92ZWQuICovDQotICAgICAgICAiU1VCCQkjMTIsIFIxNQkJCQkJXG4iXA0KLSAgICAgICAgIk1WVEMJCVIxNSwgVVNQCQkJCQlcbiJcDQorCQkvKiBNb3ZlIHRoZSBhZGRyZXNzIGRvd24gdG8gdGhlIGRhdGEgYmVpbmcgbW92ZWQuICovDQorCQkiU1VCCQkjMTIsIFIxNQkJCQkJXG4iIFwNCisJCSJNVlRDCQlSMTUsIFVTUAkJCQkJXG4iIFwNCiANCi0gICAgICAgIC8qIENvcHkgdGhlIGRhdGEgYWNyb3NzLCBSMTUsIHRoZW4gUEMsIHRoZW4gUFNXLiAqLw0KLSAgICAgICAgIk1PVi5MCQlbIFIwIF0sIFsgUjE1IF0JCQkJXG4iXA0KLSAgICAgICAgIk1PVi5MIAkJNFsgUjAgXSwgNFsgUjE1IF0JCQlcbiJcDQotICAgICAgICAiTU9WLkwJCThbIFIwIF0sIDhbIFIxNSBdCQkJXG4iXA0KKwkJLyogQ29weSB0aGUgZGF0YSBhY3Jvc3MsIFIxNSwgdGhlbiBQQywgdGhlbiBQU1cuICovDQorCQkiTU9WLkwJCVsgUjAgXSwgWyBSMTUgXQkJCQlcbiIgXA0KKwkJIk1PVi5MIAkJNFsgUjAgXSwgNFsgUjE1IF0JCQlcbiIgXA0KKwkJIk1PVi5MCQk4WyBSMCBdLCA4WyBSMTUgXQkJCVxuIiBcDQogDQotICAgICAgICAvKiBNb3ZlIHRoZSBpbnRlcnJ1cHQgc3RhY2sgcG9pbnRlciB0byBpdHMgbmV3IGNvcnJlY3QgcG9zaXRpb24uICovDQotICAgICAgICAiQURECQkjMTIsIFIwCQkJCQkJXG4iXA0KKwkJLyogTW92ZSB0aGUgaW50ZXJydXB0IHN0YWNrIHBvaW50ZXIgdG8gaXRzIG5ldyBjb3JyZWN0IHBvc2l0aW9uLiAqLw0KKwkJIkFERAkJIzEyLCBSMAkJCQkJCVxuIiBcDQogDQotICAgICAgICAvKiBBbGwgdGhlIHJlc3Qgb2YgdGhlIHJlZ2lzdGVycyBhcmUgc2F2ZWQgZGlyZWN0bHkgdG8gdGhlIHVzZXIgc3RhY2suICovDQotICAgICAgICAiU0VUUFNXCQlVCQkJCQkJCVxuIlwNCisJCS8qIEFsbCB0aGUgcmVzdCBvZiB0aGUgcmVnaXN0ZXJzIGFyZSBzYXZlZCBkaXJlY3RseSB0byB0aGUgdXNlciBzdGFjay4gKi8NCisJCSJTRVRQU1cJCVUJCQkJCQkJXG4iIFwNCiANCi0gICAgICAgIC8qIFNhdmUgdGhlIHJlc3Qgb2YgdGhlIGdlbmVyYWwgcmVnaXN0ZXJzIChSMTUgaGFzIGJlZW4gc2F2ZWQgYWxyZWFkeSkuICovDQotICAgICAgICAiUFVTSE0JCVIxLVIxNAkJCQkJCVxuIlwNCisJCS8qIFNhdmUgdGhlIHJlc3Qgb2YgdGhlIGdlbmVyYWwgcmVnaXN0ZXJzIChSMTUgaGFzIGJlZW4gc2F2ZWQgYWxyZWFkeSkuICovDQorCQkiUFVTSE0JCVIxLVIxNAkJCQkJCVxuIiBcDQogDQotICAgICAgICAvKiBTYXZlIHRoZSBGUFNXIGFuZCBhY2N1bXVsYXRvci4gKi8NCi0gICAgICAgICJNVkZDCQlGUFNXLCBSMTUJCQkJCVxuIlwNCi0gICAgICAgICJQVVNILkwJCVIxNQkJCQkJCQlcbiJcDQotICAgICAgICAiTVZGQUNHVQkjMCwgQTEsIFIxNQkJCQkJXG4iXA0KLSAgICAgICAgIlBVU0guTAkJUjE1CQkJCQkJCVxuIlwNCi0gICAgICAgICJNVkZBQ0hJCSMwLCBBMSwgUjE1CQkJCQlcbiJcDQotICAgICAgICAiUFVTSC5MCQlSMTUJCQkJCQkJXG4iXA0KLSAgICAgICAgLyogTG93IG9yZGVyIHdvcmQuICovDQotICAgICAgICAiTVZGQUNMTwkjMCwgQTEsIFIxNQkJCQkJXG4iXA0KLSAgICAgICAgIlBVU0guTAkJUjE1CQkJCQkJCVxuIlwNCi0gICAgICAgICJNVkZBQ0dVCSMwLCBBMCwgUjE1CQkJCQlcbiJcDQotICAgICAgICAiUFVTSC5MCQlSMTUJCQkJCQkJXG4iXA0KLSAgICAgICAgIk1WRkFDSEkJIzAsIEEwLCBSMTUJCQkJCVxuIlwNCi0gICAgICAgICJQVVNILkwJCVIxNQkJCQkJCQlcbiJcDQotICAgICAgICAvKiBMb3cgb3JkZXIgd29yZC4gKi8NCi0gICAgICAgICJNVkZBQ0xPCSMwLCBBMCwgUjE1CQkJCQlcbiJcDQotICAgICAgICAiUFVTSC5MCQlSMTUJCQkJCQkJXG4iXA0KKwkJLyogU2F2ZSB0aGUgRlBTVyBhbmQgYWNjdW11bGF0b3IuICovDQorCQkiTVZGQwkJRlBTVywgUjE1CQkJCQlcbiIgXA0KKwkJIlBVU0guTAkJUjE1CQkJCQkJCVxuIiBcDQorCQkiTVZGQUNHVQkjMCwgQTEsIFIxNQkJCQkJXG4iIFwNCisJCSJQVVNILkwJCVIxNQkJCQkJCQlcbiIgXA0KKwkJIk1WRkFDSEkJIzAsIEExLCBSMTUJCQkJCVxuIiBcDQorCQkiUFVTSC5MCQlSMTUJCQkJCQkJXG4iIFwNCisJCS8qIExvdyBvcmRlciB3b3JkLiAqLw0KKwkJIk1WRkFDTE8JIzAsIEExLCBSMTUJCQkJCVxuIiBcDQorCQkiUFVTSC5MCQlSMTUJCQkJCQkJXG4iIFwNCisJCSJNVkZBQ0dVCSMwLCBBMCwgUjE1CQkJCQlcbiIgXA0KKwkJIlBVU0guTAkJUjE1CQkJCQkJCVxuIiBcDQorCQkiTVZGQUNISQkjMCwgQTAsIFIxNQkJCQkJXG4iIFwNCisJCSJQVVNILkwJCVIxNQkJCQkJCQlcbiIgXA0KKwkJLyogTG93IG9yZGVyIHdvcmQuICovDQorCQkiTVZGQUNMTwkjMCwgQTAsIFIxNQkJCQkJXG4iIFwNCisJCSJQVVNILkwJCVIxNQkJCQkJCQlcbiIgXA0KIA0KLSAgICAgICAgLyogU2F2ZSB0aGUgc3RhY2sgcG9pbnRlciB0byB0aGUgVENCLiAqLw0KLSAgICAgICAgIk1PVi5MCQkjX3B4Q3VycmVudFRDQiwgUjE1CQkJXG4iXA0KLSAgICAgICAgIk1PVi5MCQlbIFIxNSBdLCBSMTUJCQkJXG4iXA0KLSAgICAgICAgIk1PVi5MCQlSMCwgWyBSMTUgXQkJCQkJXG4iXA0KKwkJLyogU2F2ZSB0aGUgc3RhY2sgcG9pbnRlciB0byB0aGUgVENCLiAqLw0KKwkJIk1PVi5MCQkjX3B4Q3VycmVudFRDQiwgUjE1CQkJXG4iIFwNCisJCSJNT1YuTAkJWyBSMTUgXSwgUjE1CQkJCVxuIiBcDQorCQkiTU9WLkwJCVIwLCBbIFIxNSBdCQkJCQlcbiIgXA0KIA0KKwkJLyogRW5zdXJlIHRoZSBpbnRlcnJ1cHQgbWFzayBpcyBzZXQgdG8gdGhlIHN5c2NhbGwgcHJpb3JpdHkgd2hpbGUgdGhlIGtlcm5lbA0KKwkJc3RydWN0dXJlcyBhcmUgYmVpbmcgYWNjZXNzZWQuICovDQorCQkiTVZUSVBMCQklMCAJCQkJCQkJXG4iIFwNCiANCi0gICAgICAgIC8qIEVuc3VyZSB0aGUgaW50ZXJydXB0IG1hc2sgaXMgc2V0IHRvIHRoZSBzeXNjYWxsIHByaW9yaXR5IHdoaWxlIHRoZSBrZXJuZWwNCi0gICAgICAgICAqIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGFjY2Vzc2VkLiAqLw0KLSAgICAgICAgIk1WVElQTAkJJTAgCQkJCQkJCVxuIlwNCisJCS8qIFNlbGVjdCB0aGUgbmV4dCB0YXNrIHRvIHJ1bi4gKi8NCisJCSJCU1IuQQkJX3ZUYXNrU3dpdGNoQ29udGV4dAkJCVxuIiBcDQogDQotICAgICAgICAvKiBTZWxlY3QgdGhlIG5leHQgdGFzayB0byBydW4uICovDQotICAgICAgICAiQlNSLkEJCV92VGFza1N3aXRjaENvbnRleHQJCQlcbiJcDQorCQkvKiBSZXNldCB0aGUgaW50ZXJydXB0IG1hc2sgYXMgbm8gbW9yZSBkYXRhIHN0cnVjdHVyZSBhY2Nlc3MgaXMgcmVxdWlyZWQuICovDQorCQkiTVZUSVBMCQklMQkJCQkJCQlcbiIgXA0KIA0KLSAgICAgICAgLyogUmVzZXQgdGhlIGludGVycnVwdCBtYXNrIGFzIG5vIG1vcmUgZGF0YSBzdHJ1Y3R1cmUgYWNjZXNzIGlzIHJlcXVpcmVkLiAqLw0KLSAgICAgICAgIk1WVElQTAkJJTEJCQkJCQkJXG4iXA0KKwkJLyogTG9hZCB0aGUgc3RhY2sgcG9pbnRlciBvZiB0aGUgdGFzayB0aGF0IGlzIG5vdyBzZWxlY3RlZCBhcyB0aGUgUnVubmluZw0KKwkJc3RhdGUgdGFzayBmcm9tIGl0cyBUQ0IuICovDQorCQkiTU9WLkwJCSNfcHhDdXJyZW50VENCLFIxNQkJCVxuIiBcDQorCQkiTU9WLkwJCVsgUjE1IF0sIFIxNQkJCQlcbiIgXA0KKwkJIk1PVi5MCQlbIFIxNSBdLCBSMAkJCQkJXG4iIFwNCiANCisJCS8qIFJlc3RvcmUgdGhlIGNvbnRleHQgb2YgdGhlIG5ldyB0YXNrLiAgVGhlIFBTVyAoUHJvZ3JhbSBTdGF0dXMgV29yZCkgYW5kDQorCQlQQyB3aWxsIGJlIHBvcHBlZCBieSB0aGUgUlRFIGluc3RydWN0aW9uLiAqLw0KKwkgICAgIlBPUAkJUjE1CQkJCQkJCVxuIiBcDQogDQotICAgICAgICAvKiBMb2FkIHRoZSBzdGFjayBwb2ludGVyIG9mIHRoZSB0YXNrIHRoYXQgaXMgbm93IHNlbGVjdGVkIGFzIHRoZSBSdW5uaW5nDQotICAgICAgICAgKiBzdGF0ZSB0YXNrIGZyb20gaXRzIFRDQi4gKi8NCi0gICAgICAgICJNT1YuTAkJI19weEN1cnJlbnRUQ0IsUjE1CQkJXG4iXA0KLSAgICAgICAgIk1PVi5MCQlbIFIxNSBdLCBSMTUJCQkJXG4iXA0KLSAgICAgICAgIk1PVi5MCQlbIFIxNSBdLCBSMAkJCQkJXG4iXA0KKwkgICAgLyogQWNjdW11bGF0b3IgbG93IDMyIGJpdHMuICovDQorCSAgICAiTVZUQUNMTwlSMTUsIEEwCQkJCQkJXG4iIFwNCisJICAgICJQT1AJCVIxNQkJCQkJCQlcbiIgXA0KIA0KKwkgICAgLyogQWNjdW11bGF0b3IgaGlnaCAzMiBiaXRzLiAqLw0KKwkgICAgIk1WVEFDSEkJUjE1LCBBMAkJCQkJCVxuIiBcDQorCSAgICAiUE9QCQlSMTUJCQkJCQkJXG4iIFwNCiANCi0gICAgICAgIC8qIFJlc3RvcmUgdGhlIGNvbnRleHQgb2YgdGhlIG5ldyB0YXNrLiAgVGhlIFBTVyAoUHJvZ3JhbSBTdGF0dXMgV29yZCkgYW5kDQotICAgICAgICAgKiBQQyB3aWxsIGJlIHBvcHBlZCBieSB0aGUgUlRFIGluc3RydWN0aW9uLiAqLw0KLSAgICAgICAgIlBPUAkJUjE1CQkJCQkJCVxuIlwNCisJICAgIC8qIEFjY3VtdWxhdG9yIGd1YXJkLiAqLw0KKwkgICAgIk1WVEFDR1UJUjE1LCBBMAkJCQkJCVxuIiBcDQorCSAgICAiUE9QCQlSMTUJCQkJCQkJXG4iIFwNCiANCi0gICAgICAgIC8qIEFjY3VtdWxhdG9yIGxvdyAzMiBiaXRzLiAqLw0KLSAgICAgICAgIk1WVEFDTE8JUjE1LCBBMAkJCQkJCVxuIlwNCi0gICAgICAgICJQT1AJCVIxNQkJCQkJCQlcbiJcDQorCSAgICAvKiBBY2N1bXVsYXRvciBsb3cgMzIgYml0cy4gKi8NCisJICAgICJNVlRBQ0xPCVIxNSwgQTEJCQkJCQlcbiIgXA0KKwkgICAgIlBPUAkJUjE1CQkJCQkJCVxuIiBcDQogDQotICAgICAgICAvKiBBY2N1bXVsYXRvciBoaWdoIDMyIGJpdHMuICovDQotICAgICAgICAiTVZUQUNISQlSMTUsIEEwCQkJCQkJXG4iXA0KLSAgICAgICAgIlBPUAkJUjE1CQkJCQkJCVxuIlwNCisJICAgIC8qIEFjY3VtdWxhdG9yIGhpZ2ggMzIgYml0cy4gKi8NCisJICAgICJNVlRBQ0hJCVIxNSwgQTEJCQkJCQlcbiIgXA0KKwkgICAgIlBPUAkJUjE1CQkJCQkJCVxuIiBcDQogDQotICAgICAgICAvKiBBY2N1bXVsYXRvciBndWFyZC4gKi8NCi0gICAgICAgICJNVlRBQ0dVCVIxNSwgQTAJCQkJCQlcbiJcDQotICAgICAgICAiUE9QCQlSMTUJCQkJCQkJXG4iXA0KLQ0KLSAgICAgICAgLyogQWNjdW11bGF0b3IgbG93IDMyIGJpdHMuICovDQotICAgICAgICAiTVZUQUNMTwlSMTUsIEExCQkJCQkJXG4iXA0KLSAgICAgICAgIlBPUAkJUjE1CQkJCQkJCVxuIlwNCi0NCi0gICAgICAgIC8qIEFjY3VtdWxhdG9yIGhpZ2ggMzIgYml0cy4gKi8NCi0gICAgICAgICJNVlRBQ0hJCVIxNSwgQTEJCQkJCQlcbiJcDQotICAgICAgICAiUE9QCQlSMTUJCQkJCQkJXG4iXA0KLQ0KLSAgICAgICAgLyogQWNjdW11bGF0b3IgZ3VhcmQuICovDQotICAgICAgICAiTVZUQUNHVQlSMTUsIEExCQkJCQkJXG4iXA0KLSAgICAgICAgIlBPUAkJUjE1CQkJCQkJCVxuIlwNCi0gICAgICAgICJNVlRDCQlSMTUsIEZQU1cJCQkJCVxuIlwNCi0gICAgICAgICJQT1BNCQlSMS1SMTUJCQkJCQlcbiJcDQotICAgICAgICAiUlRFCQkJCQkJCQkJXG4iXA0KLSAgICAgICAgIk5PUAkJCQkJCQkJCVxuIlwNCi0gICAgICAgICJOT1AJCQkJCQkJCQkgICINCi0gICAgICAgIDo6ImkiICggY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICksICJpIiAoIGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkgKQ0KLSAgICApOw0KKwkgICAgLyogQWNjdW11bGF0b3IgZ3VhcmQuICovDQorCSAgICAiTVZUQUNHVQlSMTUsIEExCQkJCQkJXG4iIFwNCisJCSJQT1AJCVIxNQkJCQkJCQlcbiIgXA0KKwkJIk1WVEMJCVIxNSwgRlBTVwkJCQkJXG4iIFwNCisJCSJQT1BNCQlSMS1SMTUJCQkJCQlcbiIgXA0KKwkJIlJURQkJCQkJCQkJCVxuIiBcDQorCQkiTk9QCQkJCQkJCQkJXG4iIFwNCisJCSJOT1AJCQkJCQkJCQkgICINCisJCTo6ICJpIihjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkpLCAiaSIoY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWSkNCisJKTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogdm9pZCB2VGlja0lTUiggdm9pZCApDQogew0KLSAgICAvKiBSZS1lbmFibGVkIGludGVycnVwdHMuICovDQotICAgIF9fYXNtIHZvbGF0aWxlICggIlNFVFBTVwlJIik7DQorCS8qIFJlLWVuYWJsZWQgaW50ZXJydXB0cy4gKi8NCisJX19hc20gdm9sYXRpbGUoICJTRVRQU1cJSSIgKTsNCiANCi0gICAgLyogSW5jcmVtZW50IHRoZSB0aWNrLCBhbmQgcGVyZm9ybSBhbnkgcHJvY2Vzc2luZyB0aGUgbmV3IHRpY2sgdmFsdWUNCi0gICAgICogbmVjZXNzaXRhdGVzLiAgRW5zdXJlIElQTCBpcyBhdCB0aGUgbWF4IHN5c2NhbGwgdmFsdWUgZmlyc3QuICovDQotICAgIHBvcnRNQVNLX0lOVEVSUlVQVFNfRlJPTV9LRVJORUxfSVNSKCk7DQotICAgIHsNCi0gICAgICAgIGlmKCB4VGFza0luY3JlbWVudFRpY2soKSAhPSBwZEZBTFNFICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICB0YXNrWUlFTEQoKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBwb3J0VU5NQVNLX0lOVEVSUlVQVFNfRlJPTV9LRVJORUxfSVNSKCk7DQorCS8qIEluY3JlbWVudCB0aGUgdGljaywgYW5kIHBlcmZvcm0gYW55IHByb2Nlc3NpbmcgdGhlIG5ldyB0aWNrIHZhbHVlDQorCW5lY2Vzc2l0YXRlcy4gIEVuc3VyZSBJUEwgaXMgYXQgdGhlIG1heCBzeXNjYWxsIHZhbHVlIGZpcnN0LiAqLw0KKwlwb3J0TUFTS19JTlRFUlJVUFRTX0ZST01fS0VSTkVMX0lTUigpOw0KKwl7DQorCQlpZiggeFRhc2tJbmNyZW1lbnRUaWNrKCkgIT0gcGRGQUxTRSApDQorCQl7DQorCQkJdGFza1lJRUxEKCk7DQorCQl9DQorCX0NCisJcG9ydFVOTUFTS19JTlRFUlJVUFRTX0ZST01fS0VSTkVMX0lTUigpOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB1aW50MzJfdCB1bFBvcnRHZXRJUEwoIHZvaWQgKQ0KIHsNCi0gICAgX19hc20gdm9sYXRpbGUNCi0gICAgKA0KLSAgICAgICAgIk1WRkMJUFNXLCBSMQkJCVxuIlwNCi0gICAgICAgICJTSExSCSMyNCwgUjEJCQlcbiJcDQotICAgICAgICAiUlRTCQkJCQkgICINCi0gICAgKTsNCisJX19hc20gdm9sYXRpbGUNCisJKA0KKwkJIk1WRkMJUFNXLCBSMQkJCVxuIglcDQorCQkiU0hMUgkjMjQsIFIxCQkJXG4iCVwNCisJCSJSVFMJCQkJCSAgIg0KKwkpOw0KIA0KLSAgICAvKiBUaGlzIHdpbGwgbmV2ZXIgZ2V0IGV4ZWN1dGVkLCBidXQga2VlcHMgdGhlIGNvbXBpbGVyIGZyb20gY29tcGxhaW5pbmcuICovDQotICAgIHJldHVybiAwOw0KKwkvKiBUaGlzIHdpbGwgbmV2ZXIgZ2V0IGV4ZWN1dGVkLCBidXQga2VlcHMgdGhlIGNvbXBpbGVyIGZyb20gY29tcGxhaW5pbmcuICovDQorCXJldHVybiAwOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0U2V0SVBMKCB1aW50MzJfdCB1bE5ld0lQTCApDQogew0KLSAgICBfX2FzbSB2b2xhdGlsZQ0KLSAgICAoDQotICAgICAgICAiUFVTSAlSNQkJCQlcbiJcDQotICAgICAgICAiTVZGQwlQU1csIFI1CQkJXG4iXA0KLSAgICAgICAgIlNITEwJIzI0LCBSMQkJCVxuIlwNCi0gICAgICAgICJBTkQJIy0wRjAwMDAwMUgsIFI1IFxuIlwNCi0gICAgICAgICJPUgkJUjEsIFI1CQkJXG4iXA0KLSAgICAgICAgIk1WVEMJUjUsIFBTVwkJCVxuIlwNCi0gICAgICAgICJQT1AJUjUJCQkJXG4iXA0KLSAgICAgICAgIlJUUwkJCQkJICAiDQotICAgICk7DQorCV9fYXNtIHZvbGF0aWxlDQorCSgNCisJCSJQVVNICVI1CQkJCVxuIiBcDQorCQkiTVZGQwlQU1csIFI1CQkJXG4iCVwNCisJCSJTSExMCSMyNCwgUjEJCQlcbiIgXA0KKwkJIkFORAkjLTBGMDAwMDAxSCwgUjUgXG4iIFwNCisJCSJPUgkJUjEsIFI1CQkJXG4iIFwNCisJCSJNVlRDCVI1LCBQU1cJCQlcbiIgXA0KKwkJIlBPUAlSNQkJCQlcbiIgXA0KKwkJIlJUUwkJCQkJICAiDQorCSApOw0KIH0NCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9HQ0MvUlg2MDB2Mi9wb3J0bWFjcm8uaCBiL3BvcnRhYmxlL0dDQy9SWDYwMHYyL3BvcnRtYWNyby5oCmluZGV4IDQ2Yjg4YWYuLmM2Y2I4NDEgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0dDQy9SWDYwMHYyL3BvcnRtYWNyby5oCisrKyBiL3BvcnRhYmxlL0dDQy9SWDYwMHYyL3BvcnRtYWNyby5oCkBAIC0yNywxMSArMjcsMTEgQEAKIA0KIA0KICNpZm5kZWYgUE9SVE1BQ1JPX0gNCi0gICAgI2RlZmluZSBQT1JUTUFDUk9fSA0KKyNkZWZpbmUgUE9SVE1BQ1JPX0gNCiANCi0gICAgI2lmZGVmIF9fY3BsdXNwbHVzDQotICAgICAgICBleHRlcm4gIkMiIHsNCi0gICAgI2VuZGlmDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAqIFBvcnQgc3BlY2lmaWMgZGVmaW5pdGlvbnMuDQpAQCAtNDQsOTQgKzQ0LDk1IEBACiAgKi8NCiANCiAvKiBUeXBlIGRlZmluaXRpb25zIC0gdGhlc2UgYXJlIGEgYml0IGxlZ2FjeSBhbmQgbm90IHJlYWxseSB1c2VkIG5vdywgb3RoZXIgdGhhbg0KLSAqIHBvcnRTVEFDS19UWVBFIGFuZCBwb3J0QkFTRV9UWVBFLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRDSEFSICAgICAgICAgIGNoYXINCi0gICAgI2RlZmluZSBwb3J0RkxPQVQgICAgICAgICBmbG9hdA0KLSAgICAjZGVmaW5lIHBvcnRET1VCTEUgICAgICAgIGRvdWJsZQ0KLSAgICAjZGVmaW5lIHBvcnRMT05HICAgICAgICAgIGxvbmcNCi0gICAgI2RlZmluZSBwb3J0U0hPUlQgICAgICAgICBzaG9ydA0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19UWVBFICAgIHVpbnQzMl90DQotICAgICNkZWZpbmUgcG9ydEJBU0VfVFlQRSAgICAgbG9uZw0KK3BvcnRTVEFDS19UWVBFIGFuZCBwb3J0QkFTRV9UWVBFLiAqLw0KKyNkZWZpbmUgcG9ydENIQVIJCWNoYXINCisjZGVmaW5lIHBvcnRGTE9BVAkJZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUJCWRvdWJsZQ0KKyNkZWZpbmUgcG9ydExPTkcJCWxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVAkJc2hvcnQNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFCXVpbnQzMl90DQorI2RlZmluZSBwb3J0QkFTRV9UWVBFCWxvbmcNCiANCi0gICAgdHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSAgIFN0YWNrVHlwZV90Ow0KLSAgICB0eXBlZGVmIGxvbmcgICAgICAgICAgICAgQmFzZVR5cGVfdDsNCi0gICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nICAgIFVCYXNlVHlwZV90Ow0KK3R5cGVkZWYgcG9ydFNUQUNLX1RZUEUgU3RhY2tUeXBlX3Q7DQordHlwZWRlZiBsb25nIEJhc2VUeXBlX3Q7DQordHlwZWRlZiB1bnNpZ25lZCBsb25nIFVCYXNlVHlwZV90Ow0KIA0KLSAgICAjaWYgKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KLSAgICAgICAgdHlwZWRlZiB1aW50MTZfdCAgICAgVGlja1R5cGVfdDsNCi0gICAgICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAgICAgICAgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQotICAgICNlbHNlDQotICAgICAgICB0eXBlZGVmIHVpbnQzMl90ICAgICBUaWNrVHlwZV90Ow0KLSAgICAgICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICAgICAgICAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwNCisjaWYoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQorCXR5cGVkZWYgdWludDE2X3QgVGlja1R5cGVfdDsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggVGlja1R5cGVfdCApIDB4ZmZmZg0KKyNlbHNlDQorCXR5cGVkZWYgdWludDMyX3QgVGlja1R5cGVfdDsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTA0KIA0KLS8qIDMyLWJpdCB0aWNrIHR5cGUgb24gYSAzMi1iaXQgYXJjaGl0ZWN0dXJlLCBzbyByZWFkcyBvZiB0aGUgdGljayBjb3VudCBkbw0KLSAqIG5vdCBuZWVkIHRvIGJlIGd1YXJkZWQgd2l0aCBhIGNyaXRpY2FsIHNlY3Rpb24uICovDQotICAgICAgICAjZGVmaW5lIHBvcnRUSUNLX1RZUEVfSVNfQVRPTUlDICAgIDENCi0gICAgI2VuZGlmDQorCS8qIDMyLWJpdCB0aWNrIHR5cGUgb24gYSAzMi1iaXQgYXJjaGl0ZWN0dXJlLCBzbyByZWFkcyBvZiB0aGUgdGljayBjb3VudCBkbw0KKwlub3QgbmVlZCB0byBiZSBndWFyZGVkIHdpdGggYSBjcml0aWNhbCBzZWN0aW9uLiAqLw0KKwkjZGVmaW5lIHBvcnRUSUNLX1RZUEVfSVNfQVRPTUlDIDENCisjZW5kaWYNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBIYXJkd2FyZSBzcGVjaWZpY3MuICovDQotICAgICNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UICAgIDggICAgIC8qIENvdWxkIG1ha2UgZm91ciwgYWNjb3JkaW5nIHRvIG1hbnVhbC4gKi8NCi0gICAgI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RIICAgICAgLTENCi0gICAgI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMgICAgKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCi0gICAgI2RlZmluZSBwb3J0Tk9QKCkgICAgX19hc20gdm9sYXRpbGUgKCAiTk9QIiApDQorI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQJCQk4CS8qIENvdWxkIG1ha2UgZm91ciwgYWNjb3JkaW5nIHRvIG1hbnVhbC4gKi8NCisjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEgJCQktMQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TCQkJKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCisjZGVmaW5lIHBvcnROT1AoKQkJCQkJX19hc20gdm9sYXRpbGUoICJOT1AiICkNCiANCiAvKiBZaWVsZCBlcXVpdmFsZW50IHRvICIqcG9ydElUVV9TV0lOVFIgPSAweDAxOyAoIHZvaWQgKSAqcG9ydElUVV9TV0lOVFI7Ig0KLSAqIHdoZXJlIHBvcnRJVFVfU1dJTlRSIGlzIHRoZSBsb2NhdGlvbiBvZiB0aGUgc29mdHdhcmUgaW50ZXJydXB0IHJlZ2lzdGVyDQotICogKDB4MDAwODcyRTApLiAgRG9uJ3QgcmVseSBvbiB0aGUgYXNzZW1ibGVyIHRvIHNlbGVjdCBhIHJlZ2lzdGVyLCBzbyBpbnN0ZWFkDQotICogc2F2ZSBhbmQgcmVzdG9yZSBjbG9iYmVyZWQgcmVnaXN0ZXJzIG1hbnVhbGx5LiAqLw0KLSAgICAjZGVmaW5lIHBvcnRZSUVMRCgpICAgICAgICAgICBcDQotICAgIF9fYXNtIHZvbGF0aWxlICAgICAgICAgICAgICAgIFwNCi0gICAgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgIlBVU0guTAlSMTAJCQkJCVxuIlwNCi0gICAgICAgICJNT1YuTAkjMHg4NzJFMCwgUjEwCQlcbiJcDQotICAgICAgICAiTU9WLkIJIzB4MSwgW1IxMF0JCQlcbiJcDQotICAgICAgICAiTU9WLkwJW1IxMF0sIFIxMAkJCVxuIlwNCi0gICAgICAgICJQT1AJUjEwCQkJCQlcbiJcDQotICAgICkNCit3aGVyZSBwb3J0SVRVX1NXSU5UUiBpcyB0aGUgbG9jYXRpb24gb2YgdGhlIHNvZnR3YXJlIGludGVycnVwdCByZWdpc3Rlcg0KKygweDAwMDg3MkUwKS4gIERvbid0IHJlbHkgb24gdGhlIGFzc2VtYmxlciB0byBzZWxlY3QgYSByZWdpc3Rlciwgc28gaW5zdGVhZA0KK3NhdmUgYW5kIHJlc3RvcmUgY2xvYmJlcmVkIHJlZ2lzdGVycyBtYW51YWxseS4gKi8NCisjZGVmaW5lIHBvcnRZSUVMRCgpCQkJCQkJCVwNCisJX19hc20gdm9sYXRpbGUgCQkJCQkJCVwNCisJKAkJCQkJCQkJCQlcDQorCQkiUFVTSC5MCVIxMAkJCQkJXG4iCQlcDQorCQkiTU9WLkwJIzB4ODcyRTAsIFIxMAkJXG4iCQlcDQorCQkiTU9WLkIJIzB4MSwgW1IxMF0JCQlcbiIJCVwNCisJCSJNT1YuTAlbUjEwXSwgUjEwCQkJXG4iCQlcDQorCQkiUE9QCVIxMAkJCQkJXG4iCQlcDQorCSkNCiANCi0gICAgI2RlZmluZSBwb3J0WUlFTERfRlJPTV9JU1IoIHggKSAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCB4ICE9IHBkRkFMU0UgKSBwb3J0WUlFTEQoKQ0KKyNkZWZpbmUgcG9ydFlJRUxEX0ZST01fSVNSKCB4ICkJaWYoIHggIT0gcGRGQUxTRSApIHBvcnRZSUVMRCgpDQogDQogLyogVGhlc2UgbWFjcm9zIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LCBidXQgdGhyb3VnaCB0aGUNCi0gKiB0YXNrRU5URVJfQ1JJVElDQUwoKSBhbmQgdGFza0VYSVRfQ1JJVElDQUwoKSBtYWNyb3MuICBBbiBleHRyYSBjaGVjayBpcw0KLSAqIHBlcmZvcm1lZCBpZiBjb25maWdBU1NFUlQoKSBpcyBkZWZpbmVkIHRvIGVuc3VyZSBhbiBhc3NlcnRpb24gaGFuZGxlciBkb2VzIG5vdA0KLSAqIGluYWR2ZXJ0ZW50bHkgYXR0ZW1wdCB0byBsb3dlciB0aGUgSVBMIHdoZW4gdGhlIGNhbGwgdG8gYXNzZXJ0IHdhcyB0cmlnZ2VyZWQNCi0gKiBiZWNhdXNlIHRoZSBJUEwgdmFsdWUgd2FzIGZvdW5kIHRvIGJlIGFib3ZlCWNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWQ0KLSAqIHdoZW4gYW4gSVNSIHNhZmUgRnJlZVJUT1MgQVBJIGZ1bmN0aW9uIHdhcyBleGVjdXRlZC4gIElTUiBzYWZlIEZyZWVSVE9TIEFQSQ0KLSAqIGZ1bmN0aW9ucyBhcmUgdGhvc2UgdGhhdCBlbmQgaW4gRnJvbUlTUi4gIEZyZWVSVE9TIG1haW50YWlucyBhIHNlcGFyYXRlDQotICogaW50ZXJydXB0IEFQSSB0byBlbnN1cmUgQVBJIGZ1bmN0aW9uIGFuZCBpbnRlcnJ1cHQgZW50cnkgaXMgYXMgZmFzdCBhbmQgYXMNCi0gKiBzaW1wbGUgYXMgcG9zc2libGUuICovDQotICAgICNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2FzbSB2b2xhdGlsZSAoICJNVlRJUEwJIzAiKQ0KLSAgICAjaWZkZWYgY29uZmlnQVNTRVJUDQotICAgICAgICAjZGVmaW5lIHBvcnRBU1NFUlRfSUZfSU5URVJSVVBUX1BSSU9SSVRZX0lOVkFMSUQoKSAgICBjb25maWdBU1NFUlQoICggdWxQb3J0R2V0SVBMKCkgPD0gY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkgKQ0KLSAgICAgICAgI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgICAgICAgICAgICAgICAgICAgICAgaWYoIHVsUG9ydEdldElQTCgpIDwgY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkgX19hc20gdm9sYXRpbGUgKCAiTVZUSVBMCSUwIjo6ImkiICggY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkgKQ0KLSAgICAjZWxzZQ0KLSAgICAgICAgI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgICAgICAgICAgICAgICAgICAgICAgX19hc20gdm9sYXRpbGUgKCAiTVZUSVBMCSUwIjo6ImkiICggY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkgKQ0KLSAgICAjZW5kaWYNCit0YXNrRU5URVJfQ1JJVElDQUwoKSBhbmQgdGFza0VYSVRfQ1JJVElDQUwoKSBtYWNyb3MuICBBbiBleHRyYSBjaGVjayBpcw0KK3BlcmZvcm1lZCBpZiBjb25maWdBU1NFUlQoKSBpcyBkZWZpbmVkIHRvIGVuc3VyZSBhbiBhc3NlcnRpb24gaGFuZGxlciBkb2VzIG5vdA0KK2luYWR2ZXJ0ZW50bHkgYXR0ZW1wdCB0byBsb3dlciB0aGUgSVBMIHdoZW4gdGhlIGNhbGwgdG8gYXNzZXJ0IHdhcyB0cmlnZ2VyZWQNCitiZWNhdXNlIHRoZSBJUEwgdmFsdWUgd2FzIGZvdW5kIHRvIGJlIGFib3ZlCWNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWQ0KK3doZW4gYW4gSVNSIHNhZmUgRnJlZVJUT1MgQVBJIGZ1bmN0aW9uIHdhcyBleGVjdXRlZC4gIElTUiBzYWZlIEZyZWVSVE9TIEFQSQ0KK2Z1bmN0aW9ucyBhcmUgdGhvc2UgdGhhdCBlbmQgaW4gRnJvbUlTUi4gIEZyZWVSVE9TIG1haW50YWlucyBhIHNlcGFyYXRlDQoraW50ZXJydXB0IEFQSSB0byBlbnN1cmUgQVBJIGZ1bmN0aW9uIGFuZCBpbnRlcnJ1cHQgZW50cnkgaXMgYXMgZmFzdCBhbmQgYXMNCitzaW1wbGUgYXMgcG9zc2libGUuICovDQorI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKSAJX19hc20gdm9sYXRpbGUgKCAiTVZUSVBMCSMwIiApDQorI2lmZGVmIGNvbmZpZ0FTU0VSVA0KKwkjZGVmaW5lIHBvcnRBU1NFUlRfSUZfSU5URVJSVVBUX1BSSU9SSVRZX0lOVkFMSUQoKSBjb25maWdBU1NFUlQoICggdWxQb3J0R2V0SVBMKCkgPD0gY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkgKQ0KKwkjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAJaWYoIHVsUG9ydEdldElQTCgpIDwgY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkgX19hc20gdm9sYXRpbGUgKCAiTVZUSVBMCSUwIiA6OiJpIihjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkpICkNCisjZWxzZQ0KKwkjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAJX19hc20gdm9sYXRpbGUgKCAiTVZUSVBMCSUwIiA6OiJpIihjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkpICkNCisjZW5kaWYNCiANCiAvKiBDcml0aWNhbCBuZXN0aW5nIGNvdW50cyBhcmUgc3RvcmVkIGluIHRoZSBUQ0IuICovDQotICAgICNkZWZpbmUgcG9ydENSSVRJQ0FMX05FU1RJTkdfSU5fVENCICAgICggMSApDQorI2RlZmluZSBwb3J0Q1JJVElDQUxfTkVTVElOR19JTl9UQ0IgKCAxICkNCiANCiAvKiBUaGUgY3JpdGljYWwgbmVzdGluZyBmdW5jdGlvbnMgZGVmaW5lZCB3aXRoaW4gdGFza3MuYy4gKi8NCi0gICAgZXh0ZXJuIHZvaWQgdlRhc2tFbnRlckNyaXRpY2FsKCB2b2lkICk7DQotICAgIGV4dGVybiB2b2lkIHZUYXNrRXhpdENyaXRpY2FsKCB2b2lkICk7DQotICAgICNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgICAgdlRhc2tFbnRlckNyaXRpY2FsKCkNCi0gICAgI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpICAgICB2VGFza0V4aXRDcml0aWNhbCgpDQorZXh0ZXJuIHZvaWQgdlRhc2tFbnRlckNyaXRpY2FsKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdlRhc2tFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCisjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpCXZUYXNrRW50ZXJDcml0aWNhbCgpDQorI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpCQl2VGFza0V4aXRDcml0aWNhbCgpDQogDQogLyogQXMgdGhpcyBwb3J0IGFsbG93cyBpbnRlcnJ1cHQgbmVzdGluZy4uLiAqLw0KLSAgICB1aW50MzJfdCB1bFBvcnRHZXRJUEwoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fKCAoIG5ha2VkICkgKTsNCi0gICAgdm9pZCB2UG9ydFNldElQTCggdWludDMyX3QgdWxOZXdJUEwgKSBfX2F0dHJpYnV0ZV9fKCAoIG5ha2VkICkgKTsNCi0gICAgI2RlZmluZSBwb3J0U0VUX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bFBvcnRHZXRJUEwoKTsgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpDQotICAgICNkZWZpbmUgcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCB1eFNhdmVkSW50ZXJydXB0U3RhdHVzICkgICAgdlBvcnRTZXRJUEwoIHV4U2F2ZWRJbnRlcnJ1cHRTdGF0dXMgKQ0KK3VpbnQzMl90IHVsUG9ydEdldElQTCggdm9pZCApIF9fYXR0cmlidXRlX18oKG5ha2VkKSk7DQordm9pZCB2UG9ydFNldElQTCggdWludDMyX3QgdWxOZXdJUEwgKSBfX2F0dHJpYnV0ZV9fKChuYWtlZCkpOw0KKyNkZWZpbmUgcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpIHVsUG9ydEdldElQTCgpOyBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkNCisjZGVmaW5lIHBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUiggdXhTYXZlZEludGVycnVwdFN0YXR1cyApIHZQb3J0U2V0SVBMKCB1eFNhdmVkSW50ZXJydXB0U3RhdHVzICkNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBUYXNrIGZ1bmN0aW9uIG1hY3JvcyBhcyBkZXNjcmliZWQgb24gdGhlIEZyZWVSVE9TLm9yZyBXRUIgc2l0ZS4gKi8NCi0gICAgI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQotICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgICAgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCiANCi0gICAgI2lmZGVmIF9fY3BsdXNwbHVzDQotICAgICAgICB9DQotICAgICNlbmRpZg0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCiANCiAjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8NCisNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9HQ0MvU1RSNzV4L3BvcnQuYyBiL3BvcnRhYmxlL0dDQy9TVFI3NXgvcG9ydC5jCmluZGV4IGUyMTk2NjkuLmRjMjdhMTQgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0dDQy9TVFI3NXgvcG9ydC5jCisrKyBiL3BvcnRhYmxlL0dDQy9TVFI3NXgvcG9ydC5jCkBAIC0yNiw5ICsyNiw5IEBACiAgKi8NCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgU1QgU1RSNzV4IEFSTTcNCi0qIHBvcnQuDQotKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyAqIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBTVCBTVFI3NXggQVJNNw0KKyAqIHBvcnQuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBMaWJyYXJ5IGluY2x1ZGVzLiAqLw0KICNpbmNsdWRlICI3NXhfdGIuaCINCkBAIC0zOSwxNSArMzksMTUgQEAKICNpbmNsdWRlICJ0YXNrLmgiDQogDQogLyogQ29uc3RhbnRzIHJlcXVpcmVkIHRvIHNldHVwIHRoZSBpbml0aWFsIHN0YWNrLiAqLw0KLSNkZWZpbmUgcG9ydElOSVRJQUxfU1BTUiAgICAgICAgICAgKCAoIFN0YWNrVHlwZV90ICkgMHgxZiApICAgICAgLyogU3lzdGVtIG1vZGUsIEFSTSBtb2RlLCBpbnRlcnJ1cHRzIGVuYWJsZWQuICovDQotI2RlZmluZSBwb3J0VEhVTUJfTU9ERV9CSVQgICAgICAgICAoICggU3RhY2tUeXBlX3QgKSAweDIwICkNCi0jZGVmaW5lIHBvcnRJTlNUUlVDVElPTl9TSVpFICAgICAgICggKCBTdGFja1R5cGVfdCApIDQgKQ0KKyNkZWZpbmUgcG9ydElOSVRJQUxfU1BTUgkJCQkoICggU3RhY2tUeXBlX3QgKSAweDFmICkgLyogU3lzdGVtIG1vZGUsIEFSTSBtb2RlLCBpbnRlcnJ1cHRzIGVuYWJsZWQuICovDQorI2RlZmluZSBwb3J0VEhVTUJfTU9ERV9CSVQJCQkJKCAoIFN0YWNrVHlwZV90ICkgMHgyMCApDQorI2RlZmluZSBwb3J0SU5TVFJVQ1RJT05fU0laRQkJCSggKCBTdGFja1R5cGVfdCApIDQgKQ0KIA0KIC8qIENvbnN0YW50cyByZXF1aXJlZCB0byBoYW5kbGUgY3JpdGljYWwgc2VjdGlvbnMuICovDQotI2RlZmluZSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyAgICAoICggdWludDMyX3QgKSAwICkNCisjZGVmaW5lIHBvcnROT19DUklUSUNBTF9ORVNUSU5HIAkJKCAoIHVpbnQzMl90ICkgMCApDQogDQogLyogUHJlc2NhbGUgdXNlZCBvbiB0aGUgdGltZXIgY2xvY2sgd2hlbiBjYWxjdWxhdGluZyB0aGUgdGljayBwZXJpb2QuICovDQotI2RlZmluZSBwb3J0UFJFU0NBTEUgICAgICAgICAgICAgICAyMA0KKyNkZWZpbmUgcG9ydFBSRVNDQUxFIDIwDQogDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQpAQCAtNjMsMTMwICs2MywxMzUgQEAKICAqDQogICogU2VlIGhlYWRlciBmaWxlIGZvciBkZXNjcmlwdGlvbi4NCiAgKi8NCi1TdGFja1R5cGVfdCAqIHB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKiBweFRvcE9mU3RhY2ssDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqIHB2UGFyYW1ldGVycyApDQorU3RhY2tUeXBlX3QgKnB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKnB4VG9wT2ZTdGFjaywgVGFza0Z1bmN0aW9uX3QgcHhDb2RlLCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KIHsNCi0gICAgU3RhY2tUeXBlX3QgKiBweE9yaWdpbmFsVE9TOw0KK1N0YWNrVHlwZV90ICpweE9yaWdpbmFsVE9TOw0KIA0KLSAgICBweE9yaWdpbmFsVE9TID0gcHhUb3BPZlN0YWNrOw0KKwlweE9yaWdpbmFsVE9TID0gcHhUb3BPZlN0YWNrOw0KIA0KLSAgICAvKiBUbyBlbnN1cmUgYXNzZXJ0cyBpbiB0YXNrcy5jIGRvbid0IGZhaWwsIGFsdGhvdWdoIGluIHRoaXMgY2FzZSB0aGUgYXNzZXJ0DQotICAgICAqIGlzIG5vdCByZWFsbHkgcmVxdWlyZWQuICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkvKiBUbyBlbnN1cmUgYXNzZXJ0cyBpbiB0YXNrcy5jIGRvbid0IGZhaWwsIGFsdGhvdWdoIGluIHRoaXMgY2FzZSB0aGUgYXNzZXJ0DQorCWlzIG5vdCByZWFsbHkgcmVxdWlyZWQuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBTZXR1cCB0aGUgaW5pdGlhbCBzdGFjayBvZiB0aGUgdGFzay4gIFRoZSBzdGFjayBpcyBzZXQgZXhhY3RseSBhcw0KLSAgICAgKiBleHBlY3RlZCBieSB0aGUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpIG1hY3JvLiAqLw0KKwkvKiBTZXR1cCB0aGUgaW5pdGlhbCBzdGFjayBvZiB0aGUgdGFzay4gIFRoZSBzdGFjayBpcyBzZXQgZXhhY3RseSBhcw0KKwlleHBlY3RlZCBieSB0aGUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpIG1hY3JvLiAqLw0KIA0KLSAgICAvKiBGaXJzdCBvbiB0aGUgc3RhY2sgaXMgdGhlIHJldHVybiBhZGRyZXNzIC0gd2hpY2ggaW4gdGhpcyBjYXNlIGlzIHRoZQ0KLSAgICAgKiBzdGFydCBvZiB0aGUgdGFzay4gIFRoZSBvZmZzZXQgaXMgYWRkZWQgdG8gbWFrZSB0aGUgcmV0dXJuIGFkZHJlc3MgYXBwZWFyDQotICAgICAqIGFzIGl0IHdvdWxkIHdpdGhpbiBhbiBJUlEgSVNSLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB4Q29kZSArIHBvcnRJTlNUUlVDVElPTl9TSVpFOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJLyogRmlyc3Qgb24gdGhlIHN0YWNrIGlzIHRoZSByZXR1cm4gYWRkcmVzcyAtIHdoaWNoIGluIHRoaXMgY2FzZSBpcyB0aGUNCisJc3RhcnQgb2YgdGhlIHRhc2suICBUaGUgb2Zmc2V0IGlzIGFkZGVkIHRvIG1ha2UgdGhlIHJldHVybiBhZGRyZXNzIGFwcGVhcg0KKwlhcyBpdCB3b3VsZCB3aXRoaW4gYW4gSVJRIElTUi4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBweENvZGUgKyBwb3J0SU5TVFJVQ1RJT05fU0laRTsJCQ0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweGFhYWFhYWFhOyAgICAvKiBSMTQgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHhPcmlnaW5hbFRPUzsgLyogU3RhY2sgdXNlZCB3aGVuIHRhc2sgc3RhcnRzIGdvZXMgaW4gUjEzLiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDEyMTIxMjEyOyAgICAvKiBSMTIgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMTExMTExMTsgICAgLyogUjExICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTAxMDEwMTA7ICAgIC8qIFIxMCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA5MDkwOTA5OyAgICAvKiBSOSAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA4MDgwODA4OyAgICAvKiBSOCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA3MDcwNzA3OyAgICAvKiBSNyAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA2MDYwNjA2OyAgICAvKiBSNiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA1MDUwNTA1OyAgICAvKiBSNSAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA0MDQwNDA0OyAgICAvKiBSNCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAzMDMwMzAzOyAgICAvKiBSMyAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAyMDIwMjAyOyAgICAvKiBSMiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAxMDEwMTAxOyAgICAvKiBSMSAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweGFhYWFhYWFhOwkvKiBSMTQgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB4T3JpZ2luYWxUT1M7IC8qIFN0YWNrIHVzZWQgd2hlbiB0YXNrIHN0YXJ0cyBnb2VzIGluIFIxMy4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMjEyMTIxMjsJLyogUjEyICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDExMTExMTExOwkvKiBSMTEgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTAxMDEwMTA7CS8qIFIxMCAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwOTA5MDkwOTsJLyogUjkgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDgwODA4MDg7CS8qIFI4ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA3MDcwNzA3OwkvKiBSNyAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNjA2MDYwNjsJLyogUjYgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDUwNTA1MDU7CS8qIFI1ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA0MDQwNDA0OwkvKiBSNCAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMzAzMDMwMzsJLyogUjMgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDIwMjAyMDI7CS8qIFIyICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAxMDEwMTAxOwkvKiBSMSAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQogDQotICAgIC8qIFdoZW4gdGhlIHRhc2sgc3RhcnRzIGlzIHdpbGwgZXhwZWN0IHRvIGZpbmQgdGhlIGZ1bmN0aW9uIHBhcmFtZXRlciBpbg0KLSAgICAgKiBSMC4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwdlBhcmFtZXRlcnM7IC8qIFIwICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkvKiBXaGVuIHRoZSB0YXNrIHN0YXJ0cyBpcyB3aWxsIGV4cGVjdCB0byBmaW5kIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXIgaW4NCisJUjAuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHZQYXJhbWV0ZXJzOyAvKiBSMCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgLyogVGhlIHN0YXR1cyByZWdpc3RlciBpcyBzZXQgZm9yIHN5c3RlbSBtb2RlLCB3aXRoIGludGVycnVwdHMgZW5hYmxlZC4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwb3J0SU5JVElBTF9TUFNSOw0KKwkvKiBUaGUgc3RhdHVzIHJlZ2lzdGVyIGlzIHNldCBmb3Igc3lzdGVtIG1vZGUsIHdpdGggaW50ZXJydXB0cyBlbmFibGVkLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHBvcnRJTklUSUFMX1NQU1I7DQogDQotICAgICNpZmRlZiBUSFVNQl9JTlRFUldPUksNCi0gICAgICAgIHsNCi0gICAgICAgICAgICAvKiBXZSB3YW50IHRoZSB0YXNrIHRvIHN0YXJ0IGluIHRodW1iIG1vZGUuICovDQotICAgICAgICAgICAgKnB4VG9wT2ZTdGFjayB8PSBwb3J0VEhVTUJfTU9ERV9CSVQ7DQotICAgICAgICB9DQotICAgICNlbmRpZg0KKwkjaWZkZWYgVEhVTUJfSU5URVJXT1JLDQorCXsNCisJCS8qIFdlIHdhbnQgdGhlIHRhc2sgdG8gc3RhcnQgaW4gdGh1bWIgbW9kZS4gKi8NCisJCSpweFRvcE9mU3RhY2sgfD0gcG9ydFRIVU1CX01PREVfQklUOw0KKwl9DQorCSNlbmRpZg0KIA0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgIC8qIEludGVycnVwdCBmbGFncyBjYW5ub3QgYWx3YXlzIGJlIHN0b3JlZCBvbiB0aGUgc3RhY2sgYW5kIHdpbGwNCi0gICAgICogaW5zdGVhZCBiZSBzdG9yZWQgaW4gYSB2YXJpYWJsZSwgd2hpY2ggaXMgdGhlbiBzYXZlZCBhcyBwYXJ0IG9mIHRoZQ0KLSAgICAgKiB0YXNrcyBjb250ZXh0LiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkc7DQorCS8qIEludGVycnVwdCBmbGFncyBjYW5ub3QgYWx3YXlzIGJlIHN0b3JlZCBvbiB0aGUgc3RhY2sgYW5kIHdpbGwNCisJaW5zdGVhZCBiZSBzdG9yZWQgaW4gYSB2YXJpYWJsZSwgd2hpY2ggaXMgdGhlbiBzYXZlZCBhcyBwYXJ0IG9mIHRoZQ0KKwl0YXNrcyBjb250ZXh0LiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkc7DQogDQotICAgIHJldHVybiBweFRvcE9mU3RhY2s7DQorCXJldHVybiBweFRvcE9mU3RhY2s7CQ0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBCYXNlVHlwZV90IHhQb3J0U3RhcnRTY2hlZHVsZXIoIHZvaWQgKQ0KIHsNCi0gICAgZXh0ZXJuIHZvaWQgdlBvcnRJU1JTdGFydEZpcnN0VGFzayggdm9pZCApOw0KK2V4dGVybiB2b2lkIHZQb3J0SVNSU3RhcnRGaXJzdFRhc2soIHZvaWQgKTsNCiANCi0gICAgLyogU3RhcnQgdGhlIHRpbWVyIHRoYXQgZ2VuZXJhdGVzIHRoZSB0aWNrIElTUi4gIEludGVycnVwdHMgYXJlIGRpc2FibGVkDQotICAgICAqIGhlcmUgYWxyZWFkeS4gKi8NCi0gICAgcHJ2U2V0dXBUaW1lckludGVycnVwdCgpOw0KKwkvKiBTdGFydCB0aGUgdGltZXIgdGhhdCBnZW5lcmF0ZXMgdGhlIHRpY2sgSVNSLiAgSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQNCisJaGVyZSBhbHJlYWR5LiAqLw0KKwlwcnZTZXR1cFRpbWVySW50ZXJydXB0KCk7DQogDQotICAgIC8qIFN0YXJ0IHRoZSBmaXJzdCB0YXNrLiAqLw0KLSAgICB2UG9ydElTUlN0YXJ0Rmlyc3RUYXNrKCk7DQorCS8qIFN0YXJ0IHRoZSBmaXJzdCB0YXNrLiAqLw0KKwl2UG9ydElTUlN0YXJ0Rmlyc3RUYXNrKCk7CQ0KIA0KLSAgICAvKiBTaG91bGQgbm90IGdldCBoZXJlISAqLw0KLSAgICByZXR1cm4gMDsNCisJLyogU2hvdWxkIG5vdCBnZXQgaGVyZSEgKi8NCisJcmV0dXJuIDA7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQ0KIHsNCi0gICAgLyogSXQgaXMgdW5saWtlbHkgdGhhdCB0aGUgQVJNIHBvcnQgd2lsbCByZXF1aXJlIHRoaXMgZnVuY3Rpb24gYXMgdGhlcmUNCi0gICAgICogaXMgbm90aGluZyB0byByZXR1cm4gdG8uICAqLw0KKwkvKiBJdCBpcyB1bmxpa2VseSB0aGF0IHRoZSBBUk0gcG9ydCB3aWxsIHJlcXVpcmUgdGhpcyBmdW5jdGlvbiBhcyB0aGVyZQ0KKwlpcyBub3RoaW5nIHRvIHJldHVybiB0by4gICovDQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHN0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKQ0KIHsNCi0gICAgRUlDX0lSUUluaXRUeXBlRGVmIEVJQ19JUlFJbml0U3RydWN0dXJlOw0KLSAgICBUQl9Jbml0VHlwZURlZiBUQl9Jbml0U3RydWN0dXJlOw0KK0VJQ19JUlFJbml0VHlwZURlZiAgRUlDX0lSUUluaXRTdHJ1Y3R1cmU7CQ0KK1RCX0luaXRUeXBlRGVmICAgICAgVEJfSW5pdFN0cnVjdHVyZTsNCiANCi0gICAgLyogU2V0dXAgdGhlIEVJQyBmb3IgdGhlIFRCLiAqLw0KLSAgICBFSUNfSVJRSW5pdFN0cnVjdHVyZS5FSUNfSVJRQ2hhbm5lbENtZCA9IEVOQUJMRTsNCi0gICAgRUlDX0lSUUluaXRTdHJ1Y3R1cmUuRUlDX0lSUUNoYW5uZWwgPSBUQl9JUlFDaGFubmVsOw0KLSAgICBFSUNfSVJRSW5pdFN0cnVjdHVyZS5FSUNfSVJRQ2hhbm5lbFByaW9yaXR5ID0gMTsNCi0gICAgRUlDX0lSUUluaXQoICZFSUNfSVJRSW5pdFN0cnVjdHVyZSApOw0KKwkvKiBTZXR1cCB0aGUgRUlDIGZvciB0aGUgVEIuICovDQorCUVJQ19JUlFJbml0U3RydWN0dXJlLkVJQ19JUlFDaGFubmVsQ21kID0gRU5BQkxFOw0KKwlFSUNfSVJRSW5pdFN0cnVjdHVyZS5FSUNfSVJRQ2hhbm5lbCA9IFRCX0lSUUNoYW5uZWw7DQorCUVJQ19JUlFJbml0U3RydWN0dXJlLkVJQ19JUlFDaGFubmVsUHJpb3JpdHkgPSAxOw0KKwlFSUNfSVJRSW5pdCgmRUlDX0lSUUluaXRTdHJ1Y3R1cmUpOw0KKwkNCisJLyogU2V0dXAgdGhlIFRCIGZvciB0aGUgZ2VuZXJhdGlvbiBvZiB0aGUgdGljayBpbnRlcnJ1cHQuICovDQorCVRCX0luaXRTdHJ1Y3R1cmUuVEJfTW9kZSA9IFRCX01vZGVfVGltaW5nOw0KKwlUQl9Jbml0U3RydWN0dXJlLlRCX0NvdW50ZXJNb2RlID0gVEJfQ291bnRlck1vZGVfRG93bjsNCisJVEJfSW5pdFN0cnVjdHVyZS5UQl9QcmVzY2FsZXIgPSBwb3J0UFJFU0NBTEUgLSAxOw0KKwlUQl9Jbml0U3RydWN0dXJlLlRCX0F1dG9SZWxvYWQgPSAoICggY29uZmlnQ1BVX0NMT0NLX0haIC8gcG9ydFBSRVNDQUxFICkgLyBjb25maWdUSUNLX1JBVEVfSFogKTsNCisJVEJfSW5pdCgmVEJfSW5pdFN0cnVjdHVyZSk7DQorCQ0KKwkvKiBFbmFibGUgVEIgVXBkYXRlIGludGVycnVwdCAqLw0KKwlUQl9JVENvbmZpZyhUQl9JVF9VcGRhdGUsIEVOQUJMRSk7DQogDQotICAgIC8qIFNldHVwIHRoZSBUQiBmb3IgdGhlIGdlbmVyYXRpb24gb2YgdGhlIHRpY2sgaW50ZXJydXB0LiAqLw0KLSAgICBUQl9Jbml0U3RydWN0dXJlLlRCX01vZGUgPSBUQl9Nb2RlX1RpbWluZzsNCi0gICAgVEJfSW5pdFN0cnVjdHVyZS5UQl9Db3VudGVyTW9kZSA9IFRCX0NvdW50ZXJNb2RlX0Rvd247DQotICAgIFRCX0luaXRTdHJ1Y3R1cmUuVEJfUHJlc2NhbGVyID0gcG9ydFBSRVNDQUxFIC0gMTsNCi0gICAgVEJfSW5pdFN0cnVjdHVyZS5UQl9BdXRvUmVsb2FkID0gKCAoIGNvbmZpZ0NQVV9DTE9DS19IWiAvIHBvcnRQUkVTQ0FMRSApIC8gY29uZmlnVElDS19SQVRFX0haICk7DQotICAgIFRCX0luaXQoICZUQl9Jbml0U3RydWN0dXJlICk7DQorCS8qIENsZWFyIFRCIFVwZGF0ZSBpbnRlcnJ1cHQgcGVuZGluZyBiaXQgKi8NCisJVEJfQ2xlYXJJVFBlbmRpbmdCaXQoVEJfSVRfVXBkYXRlKTsNCiANCi0gICAgLyogRW5hYmxlIFRCIFVwZGF0ZSBpbnRlcnJ1cHQgKi8NCi0gICAgVEJfSVRDb25maWcoIFRCX0lUX1VwZGF0ZSwgRU5BQkxFICk7DQotDQotICAgIC8qIENsZWFyIFRCIFVwZGF0ZSBpbnRlcnJ1cHQgcGVuZGluZyBiaXQgKi8NCi0gICAgVEJfQ2xlYXJJVFBlbmRpbmdCaXQoIFRCX0lUX1VwZGF0ZSApOw0KLQ0KLSAgICAvKiBFbmFibGUgVEIgKi8NCi0gICAgVEJfQ21kKCBFTkFCTEUgKTsNCisJLyogRW5hYmxlIFRCICovDQorCVRCX0NtZChFTkFCTEUpOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisNCisNCisNCisNCisNCisNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9HQ0MvU1RSNzV4L3BvcnRJU1IuYyBiL3BvcnRhYmxlL0dDQy9TVFI3NXgvcG9ydElTUi5jCmluZGV4IDI4ZTU3MzguLjVkMjlkZjggMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0dDQy9TVFI3NXgvcG9ydElTUi5jCisrKyBiL3BvcnRhYmxlL0dDQy9TVFI3NXgvcG9ydElTUi5jCkBAIC0yNywyNiArMjcsMjYgQEAKIA0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0qIENvbXBvbmVudHMgdGhhdCBjYW4gYmUgY29tcGlsZWQgdG8gZWl0aGVyIEFSTSBvciBUSFVNQiBtb2RlIGFyZQ0KLSogY29udGFpbmVkIGluIHBvcnQuYyAgVGhlIElTUiByb3V0aW5lcywgd2hpY2ggY2FuIG9ubHkgYmUgY29tcGlsZWQNCi0qIHRvIEFSTSBtb2RlLCBhcmUgY29udGFpbmVkIGluIHRoaXMgZmlsZS4NCi0qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorICogQ29tcG9uZW50cyB0aGF0IGNhbiBiZSBjb21waWxlZCB0byBlaXRoZXIgQVJNIG9yIFRIVU1CIG1vZGUgYXJlDQorICogY29udGFpbmVkIGluIHBvcnQuYyAgVGhlIElTUiByb3V0aW5lcywgd2hpY2ggY2FuIG9ubHkgYmUgY29tcGlsZWQNCisgKiB0byBBUk0gbW9kZSwgYXJlIGNvbnRhaW5lZCBpbiB0aGlzIGZpbGUuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKg0KLSAqLw0KKyovDQogDQogLyogU2NoZWR1bGVyIGluY2x1ZGVzLiAqLw0KICNpbmNsdWRlICJGcmVlUlRPUy5oIg0KICNpbmNsdWRlICJ0YXNrLmgiDQogDQogLyogQ29uc3RhbnRzIHJlcXVpcmVkIHRvIGhhbmRsZSBjcml0aWNhbCBzZWN0aW9ucy4gKi8NCi0jZGVmaW5lIHBvcnROT19DUklUSUNBTF9ORVNUSU5HICAgICggKCB1aW50MzJfdCApIDAgKQ0KKyNkZWZpbmUgcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcJCSggKCB1aW50MzJfdCApIDAgKQ0KIA0KIHZvbGF0aWxlIHVpbnQzMl90IHVsQ3JpdGljYWxOZXN0aW5nID0gOTk5OVVMOw0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KLS8qDQorLyogDQogICogVGhlIHNjaGVkdWxlciBjYW4gb25seSBiZSBzdGFydGVkIGZyb20gQVJNIG1vZGUsIGhlbmNlIHRoZSBpbmNsdXNpb24gb2YgdGhpcw0KICAqIGZ1bmN0aW9uIGhlcmUuDQogICovDQpAQCAtNTUsNDggKzU1LDQ4IEBACiANCiB2b2lkIHZQb3J0SVNSU3RhcnRGaXJzdFRhc2soIHZvaWQgKQ0KIHsNCi0gICAgLyogU2ltcGx5IHN0YXJ0IHRoZSBzY2hlZHVsZXIuICBUaGlzIGlzIGluY2x1ZGVkIGhlcmUgYXMgaXQgY2FuIG9ubHkgYmUNCi0gICAgICogY2FsbGVkIGZyb20gQVJNIG1vZGUuICovDQotICAgIGFzbSB2b2xhdGlsZSAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICJMRFIJCVIwLCA9cHhDdXJyZW50VENCCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICJMRFIJCVIwLCBbUjBdCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgIkxEUgkJTFIsIFtSMF0JCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIFRoZSBjcml0aWNhbCBuZXN0aW5nIGRlcHRoIGlzIHRoZSBmaXJzdCBpdGVtIG9uIHRoZSBzdGFjay4gKi8gXA0KLSAgICAgICAgLyogTG9hZCBpdCBpbnRvIHRoZSB1bENyaXRpY2FsTmVzdGluZyB2YXJpYWJsZS4gKi8gICAgICAgICAgICAgICBcDQotICAgICAgICAiTERSCQlSMCwgPXVsQ3JpdGljYWxOZXN0aW5nCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgIkxETUZECUxSISwge1IxfQkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAiU1RSCQlSMSwgW1IwXQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgLyogR2V0IHRoZSBTUFNSIGZyb20gdGhlIHN0YWNrLiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAiTERNRkQJTFIhLCB7UjB9CQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICJNU1IJCVNQU1IsIFIwCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAvKiBSZXN0b3JlIGFsbCBzeXN0ZW0gbW9kZSByZWdpc3RlcnMgZm9yIHRoZSB0YXNrLiAqLyAgICAgICAgICAgIFwNCi0gICAgICAgICJMRE1GRAlMUiwge1IwLVIxNH1eCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgIk5PUAkJCQkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIFJlc3RvcmUgdGhlIHJldHVybiBhZGRyZXNzLiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgIkxEUgkJTFIsIFtMUiwgIys2MF0JCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgLyogQW5kIHJldHVybiAtIGNvcnJlY3RpbmcgdGhlIG9mZnNldCBpbiB0aGUgTFIgdG8gb2J0YWluIHRoZSAqLyBcDQotICAgICAgICAvKiBjb3JyZWN0IGFkZHJlc3MuICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICJTVUJTIFBDLCBMUiwgIzQJCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgKTsNCisJLyogU2ltcGx5IHN0YXJ0IHRoZSBzY2hlZHVsZXIuICBUaGlzIGlzIGluY2x1ZGVkIGhlcmUgYXMgaXQgY2FuIG9ubHkgYmUNCisJY2FsbGVkIGZyb20gQVJNIG1vZGUuICovDQorCWFzbSB2b2xhdGlsZSAoCQkJCQkJCQkJCQkJCQlcDQorCSJMRFIJCVIwLCA9cHhDdXJyZW50VENCCQkJCQkJCQlcblx0IglcDQorCSJMRFIJCVIwLCBbUjBdCQkJCQkJCQkJCVxuXHQiCVwNCisJIkxEUgkJTFIsIFtSMF0JCQkJCQkJCQkJXG5cdCIJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogVGhlIGNyaXRpY2FsIG5lc3RpbmcgZGVwdGggaXMgdGhlIGZpcnN0IGl0ZW0gb24gdGhlIHN0YWNrLiAqLwlcDQorCS8qIExvYWQgaXQgaW50byB0aGUgdWxDcml0aWNhbE5lc3RpbmcgdmFyaWFibGUuICovCQkJCQlcDQorCSJMRFIJCVIwLCA9dWxDcml0aWNhbE5lc3RpbmcJCQkJCQkJXG5cdCIJXA0KKwkiTERNRkQJTFIhLCB7UjF9CQkJCQkJCQkJCQlcblx0IglcDQorCSJTVFIJCVIxLCBbUjBdCQkJCQkJCQkJCVxuXHQiCVwNCisJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIEdldCB0aGUgU1BTUiBmcm9tIHRoZSBzdGFjay4gKi8JCQkJCQkJCQlcDQorCSJMRE1GRAlMUiEsIHtSMH0JCQkJCQkJCQkJCVxuXHQiCVwNCisJIk1TUgkJU1BTUiwgUjAJCQkJCQkJCQkJXG5cdCIJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogUmVzdG9yZSBhbGwgc3lzdGVtIG1vZGUgcmVnaXN0ZXJzIGZvciB0aGUgdGFzay4gKi8JCQkJXA0KKwkiTERNRkQJTFIsIHtSMC1SMTR9XgkJCQkJCQkJCQlcblx0IglcDQorCSJOT1AJCQkJCQkJCQkJCQkJCVxuXHQiCVwNCisJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIFJlc3RvcmUgdGhlIHJldHVybiBhZGRyZXNzLiAqLwkJCQkJCQkJCVwNCisJIkxEUgkJTFIsIFtMUiwgIys2MF0JCQkJCQkJCQlcblx0IglcDQorCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBBbmQgcmV0dXJuIC0gY29ycmVjdGluZyB0aGUgb2Zmc2V0IGluIHRoZSBMUiB0byBvYnRhaW4gdGhlICovCVwNCisJLyogY29ycmVjdCBhZGRyZXNzLiAqLwkJCQkJCQkJCQkJCVwNCisJIlNVQlMgUEMsIExSLCAjNAkJCQkJCQkJCQkJXG5cdCIJXA0KKwkpOwkJCQkJCQkJCQkJCQkJCQkJDQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlBvcnRUaWNrSVNSKCB2b2lkICkNCiB7DQotICAgIC8qIEluY3JlbWVudCB0aGUgUlRPUyB0aWNrIGNvdW50LCB0aGVuIGxvb2sgZm9yIHRoZSBoaWdoZXN0IHByaW9yaXR5DQotICAgICAqIHRhc2sgdGhhdCBpcyByZWFkeSB0byBydW4uICovDQotICAgIGlmKCB4VGFza0luY3JlbWVudFRpY2soKSAhPSBwZEZBTFNFICkNCi0gICAgew0KLSAgICAgICAgdlRhc2tTd2l0Y2hDb250ZXh0KCk7DQotICAgIH0NCi0NCi0gICAgLyogUmVhZHkgZm9yIHRoZSBuZXh0IGludGVycnVwdC4gKi8NCi0gICAgVEJfQ2xlYXJJVFBlbmRpbmdCaXQoIFRCX0lUX1VwZGF0ZSApOw0KKwkvKiBJbmNyZW1lbnQgdGhlIFJUT1MgdGljayBjb3VudCwgdGhlbiBsb29rIGZvciB0aGUgaGlnaGVzdCBwcmlvcml0eSANCisJdGFzayB0aGF0IGlzIHJlYWR5IHRvIHJ1bi4gKi8NCisJaWYoIHhUYXNrSW5jcmVtZW50VGljaygpICE9IHBkRkFMU0UgKQ0KKwl7CQ0KKwkJdlRhc2tTd2l0Y2hDb250ZXh0KCk7DQorCX0NCisJCQkNCisJLyogUmVhZHkgZm9yIHRoZSBuZXh0IGludGVycnVwdC4gKi8NCisJVEJfQ2xlYXJJVFBlbmRpbmdCaXQoIFRCX0lUX1VwZGF0ZSApOwkNCiB9DQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQpAQCAtMTA5LDY5ICsxMDksNzQgQEAKICAqLw0KICNpZmRlZiBUSFVNQl9JTlRFUldPUksNCiANCi0gICAgdm9pZCB2UG9ydERpc2FibGVJbnRlcnJ1cHRzRnJvbVRodW1iKCB2b2lkICkgX19hdHRyaWJ1dGVfXyggKCBuYWtlZCApICk7DQotICAgIHZvaWQgdlBvcnRFbmFibGVJbnRlcnJ1cHRzRnJvbVRodW1iKCB2b2lkICkgX19hdHRyaWJ1dGVfXyggKCBuYWtlZCApICk7DQorCXZvaWQgdlBvcnREaXNhYmxlSW50ZXJydXB0c0Zyb21UaHVtYiggdm9pZCApIF9fYXR0cmlidXRlX18gKChuYWtlZCkpOw0KKwl2b2lkIHZQb3J0RW5hYmxlSW50ZXJydXB0c0Zyb21UaHVtYiggdm9pZCApIF9fYXR0cmlidXRlX18gKChuYWtlZCkpOw0KIA0KLSAgICB2b2lkIHZQb3J0RGlzYWJsZUludGVycnVwdHNGcm9tVGh1bWIoIHZvaWQgKQ0KLSAgICB7DQotICAgICAgICBhc20gdm9sYXRpbGUgKA0KLSAgICAgICAgICAgICJTVE1EQglTUCEsIHtSMH0JCVxuXHQiLyogUHVzaCBSMC4JCQkJCQkJCQkqLw0KLSAgICAgICAgICAgICJNUlMJUjAsIENQU1IJCVxuXHQiLyogR2V0IENQU1IuCQkJCQkJCQkqLw0KLSAgICAgICAgICAgICJPUlIJUjAsIFIwLCAjMHhDMAlcblx0Ii8qIERpc2FibGUgSVJRLCBGSVEuCQkJCQkJKi8NCi0gICAgICAgICAgICAiTVNSCUNQU1IsIFIwCQlcblx0Ii8qIFdyaXRlIGJhY2sgbW9kaWZpZWQgdmFsdWUuCQkJCSovDQotICAgICAgICAgICAgIkxETUlBCVNQISwge1IwfQkJXG5cdCIvKiBQb3AgUjAuCQkJCQkJCQkJKi8NCi0gICAgICAgICAgICAiQlgJCVIxNCIpOyAgICAgICAgICAgICAgICAgIC8qIFJldHVybiBiYWNrIHRvIHRodW1iLgkJCQkJKi8NCi0gICAgfQ0KLQ0KLSAgICB2b2lkIHZQb3J0RW5hYmxlSW50ZXJydXB0c0Zyb21UaHVtYiggdm9pZCApDQotICAgIHsNCi0gICAgICAgIGFzbSB2b2xhdGlsZSAoDQotICAgICAgICAgICAgIlNUTURCCVNQISwge1IwfQkJXG5cdCIvKiBQdXNoIFIwLgkJCQkJCQkJCSovDQotICAgICAgICAgICAgIk1SUwlSMCwgQ1BTUgkJXG5cdCIvKiBHZXQgQ1BTUi4JCQkJCQkJCSovDQotICAgICAgICAgICAgIkJJQwlSMCwgUjAsICMweEMwCVxuXHQiLyogRW5hYmxlIElSUSwgRklRLgkJCQkJCQkqLw0KLSAgICAgICAgICAgICJNU1IJQ1BTUiwgUjAJCVxuXHQiLyogV3JpdGUgYmFjayBtb2RpZmllZCB2YWx1ZS4JCQkJKi8NCi0gICAgICAgICAgICAiTERNSUEJU1AhLCB7UjB9CQlcblx0Ii8qIFBvcCBSMC4JCQkJCQkJCQkqLw0KLSAgICAgICAgICAgICJCWAkJUjE0Iik7ICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIGJhY2sgdG8gdGh1bWIuCQkJCQkqLw0KLSAgICB9DQorCXZvaWQgdlBvcnREaXNhYmxlSW50ZXJydXB0c0Zyb21UaHVtYiggdm9pZCApDQorCXsNCisJCWFzbSB2b2xhdGlsZSAoIA0KKwkJCSJTVE1EQglTUCEsIHtSMH0JCVxuXHQiCS8qIFB1c2ggUjAuCQkJCQkJCQkJKi8NCisJCQkiTVJTCVIwLCBDUFNSCQlcblx0IgkvKiBHZXQgQ1BTUi4JCQkJCQkJCSovDQorCQkJIk9SUglSMCwgUjAsICMweEMwCVxuXHQiCS8qIERpc2FibGUgSVJRLCBGSVEuCQkJCQkJKi8NCisJCQkiTVNSCUNQU1IsIFIwCQlcblx0IgkvKiBXcml0ZSBiYWNrIG1vZGlmaWVkIHZhbHVlLgkJCQkqLw0KKwkJCSJMRE1JQQlTUCEsIHtSMH0JCVxuXHQiCS8qIFBvcCBSMC4JCQkJCQkJCQkqLw0KKwkJCSJCWAkJUjE0IiApOwkJCQkJLyogUmV0dXJuIGJhY2sgdG8gdGh1bWIuCQkJCQkqLw0KKwl9DQorCQkJDQorCXZvaWQgdlBvcnRFbmFibGVJbnRlcnJ1cHRzRnJvbVRodW1iKCB2b2lkICkNCisJew0KKwkJYXNtIHZvbGF0aWxlICggDQorCQkJIlNUTURCCVNQISwge1IwfQkJXG5cdCIJLyogUHVzaCBSMC4JCQkJCQkJCQkqLwkNCisJCQkiTVJTCVIwLCBDUFNSCQlcblx0IgkvKiBHZXQgQ1BTUi4JCQkJCQkJCSovCQ0KKwkJCSJCSUMJUjAsIFIwLCAjMHhDMAlcblx0IgkvKiBFbmFibGUgSVJRLCBGSVEuCQkJCQkJCSovCQ0KKwkJCSJNU1IJQ1BTUiwgUjAJCVxuXHQiCS8qIFdyaXRlIGJhY2sgbW9kaWZpZWQgdmFsdWUuCQkJCSovCQ0KKwkJCSJMRE1JQQlTUCEsIHtSMH0JCVxuXHQiCS8qIFBvcCBSMC4JCQkJCQkJCQkqLw0KKwkJCSJCWAkJUjE0IiApOwkJCQkJLyogUmV0dXJuIGJhY2sgdG8gdGh1bWIuCQkJCQkqLw0KKwl9DQogDQogI2VuZGlmIC8qIFRIVU1CX0lOVEVSV09SSyAqLw0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICkNCiB7DQotICAgIC8qIERpc2FibGUgaW50ZXJydXB0cyBhcyBwZXIgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gICAgYXNtIHZvbGF0aWxlICgNCi0gICAgICAgICJTVE1EQglTUCEsIHtSMH0JCQlcblx0Ii8qIFB1c2ggUjAuCQkJCQkJCQkqLw0KLSAgICAgICAgIk1SUwlSMCwgQ1BTUgkJCVxuXHQiLyogR2V0IENQU1IuCQkJCQkJCSovDQotICAgICAgICAiT1JSCVIwLCBSMCwgIzB4QzAJCVxuXHQiLyogRGlzYWJsZSBJUlEsIEZJUS4JCQkJCSovDQotICAgICAgICAiTVNSCUNQU1IsIFIwCQkJXG5cdCIvKiBXcml0ZSBiYWNrIG1vZGlmaWVkIHZhbHVlLgkJCSovDQotICAgICAgICAiTERNSUEJU1AhLCB7UjB9Iik7ICAgICAgLyogUG9wIFIwLgkJCQkJCQkJKi8NCisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIGFzIHBlciBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7IAkJCQkJCQkqLw0KKwlhc20gdm9sYXRpbGUgKCANCisJCSJTVE1EQglTUCEsIHtSMH0JCQlcblx0IgkvKiBQdXNoIFIwLgkJCQkJCQkJKi8NCisJCSJNUlMJUjAsIENQU1IJCQlcblx0IgkvKiBHZXQgQ1BTUi4JCQkJCQkJKi8NCisJCSJPUlIJUjAsIFIwLCAjMHhDMAkJXG5cdCIJLyogRGlzYWJsZSBJUlEsIEZJUS4JCQkJCSovDQorCQkiTVNSCUNQU1IsIFIwCQkJXG5cdCIJLyogV3JpdGUgYmFjayBtb2RpZmllZCB2YWx1ZS4JCQkqLw0KKwkJIkxETUlBCVNQISwge1IwfSIgKTsJCQkJLyogUG9wIFIwLgkJCQkJCQkJKi8NCiANCi0gICAgLyogTm93IGludGVycnVwdHMgYXJlIGRpc2FibGVkIHVsQ3JpdGljYWxOZXN0aW5nIGNhbiBiZSBhY2Nlc3NlZA0KLSAgICAgKiBkaXJlY3RseS4gIEluY3JlbWVudCB1bENyaXRpY2FsTmVzdGluZyB0byBrZWVwIGEgY291bnQgb2YgaG93IG1hbnkgdGltZXMNCi0gICAgICogcG9ydEVOVEVSX0NSSVRJQ0FMKCkgaGFzIGJlZW4gY2FsbGVkLiAqLw0KLSAgICB1bENyaXRpY2FsTmVzdGluZysrOw0KKwkvKiBOb3cgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgdWxDcml0aWNhbE5lc3RpbmcgY2FuIGJlIGFjY2Vzc2VkIA0KKwlkaXJlY3RseS4gIEluY3JlbWVudCB1bENyaXRpY2FsTmVzdGluZyB0byBrZWVwIGEgY291bnQgb2YgaG93IG1hbnkgdGltZXMNCisJcG9ydEVOVEVSX0NSSVRJQ0FMKCkgaGFzIGJlZW4gY2FsbGVkLiAqLw0KKwl1bENyaXRpY2FsTmVzdGluZysrOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICkNCiB7DQotICAgIGlmKCB1bENyaXRpY2FsTmVzdGluZyA+IHBvcnROT19DUklUSUNBTF9ORVNUSU5HICkNCi0gICAgew0KLSAgICAgICAgLyogRGVjcmVtZW50IHRoZSBuZXN0aW5nIGNvdW50IGFzIHdlIGFyZSBsZWF2aW5nIGEgY3JpdGljYWwgc2VjdGlvbi4gKi8NCi0gICAgICAgIHVsQ3JpdGljYWxOZXN0aW5nLS07DQorCWlmKCB1bENyaXRpY2FsTmVzdGluZyA+IHBvcnROT19DUklUSUNBTF9ORVNUSU5HICkNCisJew0KKwkJLyogRGVjcmVtZW50IHRoZSBuZXN0aW5nIGNvdW50IGFzIHdlIGFyZSBsZWF2aW5nIGEgY3JpdGljYWwgc2VjdGlvbi4gKi8NCisJCXVsQ3JpdGljYWxOZXN0aW5nLS07DQogDQotICAgICAgICAvKiBJZiB0aGUgbmVzdGluZyBsZXZlbCBoYXMgcmVhY2hlZCB6ZXJvIHRoZW4gaW50ZXJydXB0cyBzaG91bGQgYmUNCi0gICAgICAgICAqIHJlLWVuYWJsZWQuICovDQotICAgICAgICBpZiggdWxDcml0aWNhbE5lc3RpbmcgPT0gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIC8qIEVuYWJsZSBpbnRlcnJ1cHRzIGFzIHBlciBwb3J0RVhJVF9DUklUSUNBTCgpLgkJCQkJKi8NCi0gICAgICAgICAgICBhc20gdm9sYXRpbGUgKA0KLSAgICAgICAgICAgICAgICAiU1RNREIJU1AhLCB7UjB9CQlcblx0Ii8qIFB1c2ggUjAuCQkJCQkJKi8NCi0gICAgICAgICAgICAgICAgIk1SUwlSMCwgQ1BTUgkJXG5cdCIvKiBHZXQgQ1BTUi4JCQkJCSovDQotICAgICAgICAgICAgICAgICJCSUMJUjAsIFIwLCAjMHhDMAlcblx0Ii8qIEVuYWJsZSBJUlEsIEZJUS4JCQkJKi8NCi0gICAgICAgICAgICAgICAgIk1TUglDUFNSLCBSMAkJXG5cdCIvKiBXcml0ZSBiYWNrIG1vZGlmaWVkIHZhbHVlLgkqLw0KLSAgICAgICAgICAgICAgICAiTERNSUEJU1AhLCB7UjB9Iik7ICAgICAvKiBQb3AgUjAuCQkJCQkJKi8NCi0gICAgICAgIH0NCi0gICAgfQ0KKwkJLyogSWYgdGhlIG5lc3RpbmcgbGV2ZWwgaGFzIHJlYWNoZWQgemVybyB0aGVuIGludGVycnVwdHMgc2hvdWxkIGJlDQorCQlyZS1lbmFibGVkLiAqLw0KKwkJaWYoIHVsQ3JpdGljYWxOZXN0aW5nID09IHBvcnROT19DUklUSUNBTF9ORVNUSU5HICkNCisJCXsNCisJCQkvKiBFbmFibGUgaW50ZXJydXB0cyBhcyBwZXIgcG9ydEVYSVRfQ1JJVElDQUwoKS4JCQkJCSovDQorCQkJYXNtIHZvbGF0aWxlICggDQorCQkJCSJTVE1EQglTUCEsIHtSMH0JCVxuXHQiCS8qIFB1c2ggUjAuCQkJCQkJKi8JDQorCQkJCSJNUlMJUjAsIENQU1IJCVxuXHQiCS8qIEdldCBDUFNSLgkJCQkJKi8JDQorCQkJCSJCSUMJUjAsIFIwLCAjMHhDMAlcblx0IgkvKiBFbmFibGUgSVJRLCBGSVEuCQkJCSovCQ0KKwkJCQkiTVNSCUNQU1IsIFIwCQlcblx0IgkvKiBXcml0ZSBiYWNrIG1vZGlmaWVkIHZhbHVlLgkqLwkNCisJCQkJIkxETUlBCVNQISwge1IwfSIgKTsJCQkvKiBQb3AgUjAuCQkJCQkJKi8NCisJCX0NCisJfQ0KIH0NCisNCisNCisNCisNCisNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9HQ0MvU1RSNzV4L3BvcnRtYWNyby5oIGIvcG9ydGFibGUvR0NDL1NUUjc1eC9wb3J0bWFjcm8uaAppbmRleCBhZGFiODhjLi4yYmQ2ZDQzIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9HQ0MvU1RSNzV4L3BvcnRtYWNyby5oCisrKyBiL3BvcnRhYmxlL0dDQy9TVFI3NXgvcG9ydG1hY3JvLmgKQEAgLTI3LDExICsyNywxMSBAQAogDQogDQogI2lmbmRlZiBQT1JUTUFDUk9fSA0KLSAgICAjZGVmaW5lIFBPUlRNQUNST19IDQorI2RlZmluZSBQT1JUTUFDUk9fSA0KIA0KLSAgICAjaWZkZWYgX19jcGx1c3BsdXMNCi0gICAgICAgIGV4dGVybiAiQyIgew0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICogUG9ydCBzcGVjaWZpYyBkZWZpbml0aW9ucy4NCkBAIC00NCwzNyArNDQsMzYgQEAKICAqLw0KIA0KIC8qIFR5cGUgZGVmaW5pdGlvbnMuICovDQotICAgICNkZWZpbmUgcG9ydENIQVIgICAgICAgICAgY2hhcg0KLSAgICAjZGVmaW5lIHBvcnRGTE9BVCAgICAgICAgIGZsb2F0DQotICAgICNkZWZpbmUgcG9ydERPVUJMRSAgICAgICAgZG91YmxlDQotICAgICNkZWZpbmUgcG9ydExPTkcgICAgICAgICAgbG9uZw0KLSAgICAjZGVmaW5lIHBvcnRTSE9SVCAgICAgICAgIHNob3J0DQotICAgICNkZWZpbmUgcG9ydFNUQUNLX1RZUEUgICAgdWludDMyX3QNCi0gICAgI2RlZmluZSBwb3J0QkFTRV9UWVBFICAgICBsb25nDQorI2RlZmluZSBwb3J0Q0hBUgkJY2hhcg0KKyNkZWZpbmUgcG9ydEZMT0FUCQlmbG9hdA0KKyNkZWZpbmUgcG9ydERPVUJMRQkJZG91YmxlDQorI2RlZmluZSBwb3J0TE9ORwkJbG9uZw0KKyNkZWZpbmUgcG9ydFNIT1JUCQlzaG9ydA0KKyNkZWZpbmUgcG9ydFNUQUNLX1RZUEUJdWludDMyX3QNCisjZGVmaW5lIHBvcnRCQVNFX1RZUEUJbG9uZw0KIA0KLSAgICB0eXBlZGVmIHBvcnRTVEFDS19UWVBFICAgU3RhY2tUeXBlX3Q7DQotICAgIHR5cGVkZWYgbG9uZyAgICAgICAgICAgICBCYXNlVHlwZV90Ow0KLSAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgICAgVUJhc2VUeXBlX3Q7DQordHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSBTdGFja1R5cGVfdDsNCit0eXBlZGVmIGxvbmcgQmFzZVR5cGVfdDsNCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgVUJhc2VUeXBlX3Q7DQogDQotICAgICNpZiAoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQotICAgICAgICB0eXBlZGVmIHVpbnQxNl90ICAgICBUaWNrVHlwZV90Ow0KLSAgICAgICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICggVGlja1R5cGVfdCApIDB4ZmZmZg0KLSAgICAjZWxzZQ0KLSAgICAgICAgdHlwZWRlZiB1aW50MzJfdCAgICAgVGlja1R5cGVfdDsNCi0gICAgICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwNCi0gICAgI2VuZGlmDQorI2lmKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KKwl0eXBlZGVmIHVpbnQxNl90IFRpY2tUeXBlX3Q7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIFRpY2tUeXBlX3QgKSAweGZmZmYNCisjZWxzZQ0KKwl0eXBlZGVmIHVpbnQzMl90IFRpY2tUeXBlX3Q7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwNCisjZW5kaWYNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBIYXJkd2FyZSBzcGVjaWZpY3MuICovDQotICAgICNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSCAgICAgICggLTEgKQ0KLSAgICAjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUyAgICAoICggVGlja1R5cGVfdCApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KLSAgICAjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVCAgICA4DQotICAgICNkZWZpbmUgcG9ydFlJRUxEKCkgICAgYXNtIHZvbGF0aWxlICggIlNXSSAwIiApDQotICAgICNkZWZpbmUgcG9ydE5PUCgpICAgICAgYXNtIHZvbGF0aWxlICggIk5PUCIgKQ0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJCSggLTEgKQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TCQkJKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCisjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVAkJCTgNCisjZGVmaW5lIHBvcnRZSUVMRCgpCQkJCQlhc20gdm9sYXRpbGUgKCAiU1dJIDAiICkNCisjZGVmaW5lIHBvcnROT1AoKQkJCQkJYXNtIHZvbGF0aWxlICggIk5PUCIgKQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIENyaXRpY2FsIHNlY3Rpb24gaGFuZGxpbmcuICovDQotDQogLyoNCiAgKiBUaGUgaW50ZXJydXB0IG1hbmFnZW1lbnQgdXRpbGl0aWVzIGNhbiBvbmx5IGJlIGNhbGxlZCBmcm9tIEFSTSBtb2RlLiAgV2hlbg0KICAqIFRIVU1CX0lOVEVSV09SSyBpcyBkZWZpbmVkIHRoZSB1dGlsaXRpZXMgYXJlIGRlZmluZWQgYXMgZnVuY3Rpb25zIGluDQpAQCAtODIsNTkgKzgxLDYxIEBACiAgKiBkZWZpbmVkIHRoZW4gdGhlIHV0aWxpdGllcyBhcmUgZGVmaW5lZCBhcyBtYWNyb3MgaGVyZSAtIGFzIHBlciBvdGhlciBwb3J0cy4NCiAgKi8NCiANCi0gICAgI2lmZGVmIFRIVU1CX0lOVEVSV09SSw0KKyNpZmRlZiBUSFVNQl9JTlRFUldPUksNCiANCi0gICAgICAgIGV4dGVybiB2b2lkIHZQb3J0RGlzYWJsZUludGVycnVwdHNGcm9tVGh1bWIoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fKCAoIG5ha2VkICkgKTsNCi0gICAgICAgIGV4dGVybiB2b2lkIHZQb3J0RW5hYmxlSW50ZXJydXB0c0Zyb21UaHVtYiggdm9pZCApIF9fYXR0cmlidXRlX18oICggbmFrZWQgKSApOw0KKwlleHRlcm4gdm9pZCB2UG9ydERpc2FibGVJbnRlcnJ1cHRzRnJvbVRodW1iKCB2b2lkICkgX19hdHRyaWJ1dGVfXyAoKG5ha2VkKSk7DQorCWV4dGVybiB2b2lkIHZQb3J0RW5hYmxlSW50ZXJydXB0c0Zyb21UaHVtYiggdm9pZCApIF9fYXR0cmlidXRlX18gKChuYWtlZCkpOw0KIA0KLSAgICAgICAgI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgICAgdlBvcnREaXNhYmxlSW50ZXJydXB0c0Zyb21UaHVtYigpDQotICAgICAgICAjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpICAgICB2UG9ydEVuYWJsZUludGVycnVwdHNGcm9tVGh1bWIoKQ0KKwkjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKQl2UG9ydERpc2FibGVJbnRlcnJ1cHRzRnJvbVRodW1iKCkNCisJI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKQkJdlBvcnRFbmFibGVJbnRlcnJ1cHRzRnJvbVRodW1iKCkNCiANCi0gICAgI2Vsc2UNCisjZWxzZQ0KIA0KLSAgICAgICAgI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgYXNtIHZvbGF0aWxlICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAiU1RNREIJU1AhLCB7UjB9CQlcblx0Ii8qIFB1c2ggUjAuCQkJCQkJKi9cDQotICAgICAgICAiTVJTCVIwLCBDUFNSCQlcblx0Ii8qIEdldCBDUFNSLgkJCQkJKi9cDQotICAgICAgICAiT1JSCVIwLCBSMCwgIzB4QzAJXG5cdCIvKiBEaXNhYmxlIElSUSwgRklRLgkJCSovXA0KLSAgICAgICAgIk1TUglDUFNSLCBSMAkJXG5cdCIvKiBXcml0ZSBiYWNrIG1vZGlmaWVkIHZhbHVlLgkqL1wNCi0gICAgICAgICJMRE1JQQlTUCEsIHtSMH0JCQkiKSAgICAgIC8qIFBvcCBSMC4JCQkJCQkqLw0KKwkjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKQkJCQkJCQkJCQkJXA0KKwkJYXNtIHZvbGF0aWxlICgJCQkJCQkJCQkJCQkJCQlcDQorCQkJIlNUTURCCVNQISwge1IwfQkJXG5cdCIJLyogUHVzaCBSMC4JCQkJCQkqLwlcDQorCQkJIk1SUwlSMCwgQ1BTUgkJXG5cdCIJLyogR2V0IENQU1IuCQkJCQkqLwlcDQorCQkJIk9SUglSMCwgUjAsICMweEMwCVxuXHQiCS8qIERpc2FibGUgSVJRLCBGSVEuCQkJKi8JXA0KKwkJCSJNU1IJQ1BTUiwgUjAJCVxuXHQiCS8qIFdyaXRlIGJhY2sgbW9kaWZpZWQgdmFsdWUuCSovCVwNCisJCQkiTERNSUEJU1AhLCB7UjB9CQkJIiApCS8qIFBvcCBSMC4JCQkJCQkqLw0KIA0KLSAgICAgICAgI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgYXNtIHZvbGF0aWxlICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAiU1RNREIJU1AhLCB7UjB9CQlcblx0Ii8qIFB1c2ggUjAuCQkJCQkJKi9cDQotICAgICAgICAiTVJTCVIwLCBDUFNSCQlcblx0Ii8qIEdldCBDUFNSLgkJCQkJKi9cDQotICAgICAgICAiQklDCVIwLCBSMCwgIzB4QzAJXG5cdCIvKiBFbmFibGUgSVJRLCBGSVEuCQkJCSovXA0KLSAgICAgICAgIk1TUglDUFNSLCBSMAkJXG5cdCIvKiBXcml0ZSBiYWNrIG1vZGlmaWVkIHZhbHVlLgkqL1wNCi0gICAgICAgICJMRE1JQQlTUCEsIHtSMH0JCQkiKSAgICAgIC8qIFBvcCBSMC4JCQkJCQkqLw0KKwkjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpCQkJCQkJCQkJCQkJXA0KKwkJYXNtIHZvbGF0aWxlICgJCQkJCQkJCQkJCQkJCQlcDQorCQkJIlNUTURCCVNQISwge1IwfQkJXG5cdCIJLyogUHVzaCBSMC4JCQkJCQkqLwlcDQorCQkJIk1SUwlSMCwgQ1BTUgkJXG5cdCIJLyogR2V0IENQU1IuCQkJCQkqLwlcDQorCQkJIkJJQwlSMCwgUjAsICMweEMwCVxuXHQiCS8qIEVuYWJsZSBJUlEsIEZJUS4JCQkJKi8JXA0KKwkJCSJNU1IJQ1BTUiwgUjAJCVxuXHQiCS8qIFdyaXRlIGJhY2sgbW9kaWZpZWQgdmFsdWUuCSovCVwNCisJCQkiTERNSUEJU1AhLCB7UjB9CQkJIiApCS8qIFBvcCBSMC4JCQkJCQkqLw0KIA0KLSAgICAjZW5kaWYgLyogVEhVTUJfSU5URVJXT1JLICovDQorI2VuZGlmIC8qIFRIVU1CX0lOVEVSV09SSyAqLw0KIA0KLSAgICBleHRlcm4gdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKTsNCi0gICAgZXh0ZXJuIHZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApOw0KIA0KLSAgICAjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpICAgIHZQb3J0RW50ZXJDcml0aWNhbCgpOw0KLSAgICAjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkgICAgIHZQb3J0RXhpdENyaXRpY2FsKCk7DQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKQkJdlBvcnRFbnRlckNyaXRpY2FsKCk7DQorI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpCQkJdlBvcnRFeGl0Q3JpdGljYWwoKTsNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBUYXNrIHV0aWxpdGllcy4gKi8NCi0gICAgI2RlZmluZSBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHhTd2l0Y2hSZXF1aXJlZCApIFwNCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGV4dGVybiB2b2lkIHZUYXNrU3dpdGNoQ29udGV4dCggdm9pZCApOyAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGlmKCB4U3dpdGNoUmVxdWlyZWQgKSAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICB2VGFza1N3aXRjaENvbnRleHQoKTsgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgfQ0KKyNkZWZpbmUgcG9ydEVORF9TV0lUQ0hJTkdfSVNSKCB4U3dpdGNoUmVxdWlyZWQgKSAJXA0KK3sJCQkJCQkJCQkJCQkJXA0KK2V4dGVybiB2b2lkIHZUYXNrU3dpdGNoQ29udGV4dCggdm9pZCApOwkJCQlcDQorCQkJCQkJCQkJCQkJCVwNCisJaWYoIHhTd2l0Y2hSZXF1aXJlZCApIAkJCQkJCQlcDQorCXsJCQkJCQkJCQkJCQlcDQorCQl2VGFza1N3aXRjaENvbnRleHQoKTsJCQkJCQlcDQorCX0JCQkJCQkJCQkJCQlcDQorfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCi0gICAgI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICAgICAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgfQ0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQogDQogI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQorDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvR0NDL1RyaUNvcmVfMTc4Mi9wb3J0LmMgYi9wb3J0YWJsZS9HQ0MvVHJpQ29yZV8xNzgyL3BvcnQuYwppbmRleCBmZGMzZWM5Li5jNDNjZmE0IDEwMDY0NAotLS0gYS9wb3J0YWJsZS9HQ0MvVHJpQ29yZV8xNzgyL3BvcnQuYworKysgYi9wb3J0YWJsZS9HQ0MvVHJpQ29yZV8xNzgyL3BvcnQuYwpAQCAtNDEsMzggKzQxLDM4IEBACiAjaW5jbHVkZSAibGlzdC5oIg0KIA0KICNpZiBjb25maWdDSEVDS19GT1JfU1RBQ0tfT1ZFUkZMT1cgPiAwDQotICAgICNlcnJvciAiU3RhY2sgY2hlY2tpbmcgY2Fubm90IGJlIHVzZWQgd2l0aCB0aGlzIHBvcnQsIGFzLCB1bmxpa2UgbW9zdCBwb3J0cywgdGhlIHB4VG9wT2ZTdGFjayBtZW1iZXIgb2YgdGhlIFRDQiBpcyBjb25zdW1lZCBDU0EuICBDU0Egc3RhcnZhdGlvbiwgbG9vc2VseSBlcXVpdmFsZW50IHRvIHN0YWNrIG92ZXJmbG93LCB3aWxsIHJlc3VsdCBpbiBhIHRyYXAgZXhjZXB0aW9uLiINCi0gICAgLyogVGhlIHN0YWNrIHBvaW50ZXIgaXMgYWNjZXNzaWJsZSB1c2luZyBwb3J0Q1NBX1RPX0FERFJFU1MoIHBvcnRDU0FfVE9fQUREUkVTUyggcHhDdXJyZW50VENCLT5weFRvcE9mU3RhY2sgKVsgMCBdIClbIDIgXTsgKi8NCisJI2Vycm9yICJTdGFjayBjaGVja2luZyBjYW5ub3QgYmUgdXNlZCB3aXRoIHRoaXMgcG9ydCwgYXMsIHVubGlrZSBtb3N0IHBvcnRzLCB0aGUgcHhUb3BPZlN0YWNrIG1lbWJlciBvZiB0aGUgVENCIGlzIGNvbnN1bWVkIENTQS4gIENTQSBzdGFydmF0aW9uLCBsb29zZWx5IGVxdWl2YWxlbnQgdG8gc3RhY2sgb3ZlcmZsb3csIHdpbGwgcmVzdWx0IGluIGEgdHJhcCBleGNlcHRpb24uIg0KKwkvKiBUaGUgc3RhY2sgcG9pbnRlciBpcyBhY2Nlc3NpYmxlIHVzaW5nIHBvcnRDU0FfVE9fQUREUkVTUyggcG9ydENTQV9UT19BRERSRVNTKCBweEN1cnJlbnRUQ0ItPnB4VG9wT2ZTdGFjayApWyAwIF0gKVsgMiBdOyAqLw0KICNlbmRpZiAvKiBjb25maWdDSEVDS19GT1JfU1RBQ0tfT1ZFUkZMT1cgKi8NCiANCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBTeXN0ZW0gcmVnaXN0ZXIgRGVmaW5pdGlvbnMuICovDQotI2RlZmluZSBwb3J0U1lTVEVNX1BST0dSQU1fU1RBVFVTX1dPUkQgICAgICAgICAgICAgICAgICAoIDB4MDAwMDA4RkZVTCApIC8qIFN1cGVydmlzb3IgTW9kZSwgTVBVIFJlZ2lzdGVyIFNldCAwIGFuZCBDYWxsIERlcHRoIENvdW50aW5nIGRpc2FibGVkLiAqLw0KLSNkZWZpbmUgcG9ydElOSVRJQUxfUFJJVklMRUdFRF9QUk9HUkFNX1NUQVRVU19XT1JEICAgICAgKCAweDAwMDAxNEZGVUwgKSAvKiBJTyBMZXZlbCAxLCBNUFUgUmVnaXN0ZXIgU2V0IDEgYW5kIENhbGwgRGVwdGggQ291bnRpbmcgZGlzYWJsZWQuICovDQotI2RlZmluZSBwb3J0SU5JVElBTF9VTlBSSVZJTEVHRURfUFJPR1JBTV9TVEFUVVNfV09SRCAgICAoIDB4MDAwMDEwRkZVTCApIC8qIElPIExldmVsIDAsIE1QVSBSZWdpc3RlciBTZXQgMSBhbmQgQ2FsbCBEZXB0aCBDb3VudGluZyBkaXNhYmxlZC4gKi8NCi0jZGVmaW5lIHBvcnRJTklUSUFMX1BDWElfVVBQRVJfQ09OVEVYVF9XT1JEICAgICAgICAgICAgICggMHgwMEMwMDAwMFVMICkgLyogVGhlIGxvd2VyIDIwIGJpdHMgaWRlbnRpZnkgdGhlIENTQSBhZGRyZXNzLiAqLw0KLSNkZWZpbmUgcG9ydElOSVRJQUxfU1lTQ09OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAweDAwMDAwMDAwVUwgKSAvKiBNUFUgRGlzYWJsZS4gKi8NCisjZGVmaW5lIHBvcnRTWVNURU1fUFJPR1JBTV9TVEFUVVNfV09SRAkJCQkJKCAweDAwMDAwOEZGVUwgKSAvKiBTdXBlcnZpc29yIE1vZGUsIE1QVSBSZWdpc3RlciBTZXQgMCBhbmQgQ2FsbCBEZXB0aCBDb3VudGluZyBkaXNhYmxlZC4gKi8NCisjZGVmaW5lIHBvcnRJTklUSUFMX1BSSVZJTEVHRURfUFJPR1JBTV9TVEFUVVNfV09SRAkJKCAweDAwMDAxNEZGVUwgKSAvKiBJTyBMZXZlbCAxLCBNUFUgUmVnaXN0ZXIgU2V0IDEgYW5kIENhbGwgRGVwdGggQ291bnRpbmcgZGlzYWJsZWQuICovDQorI2RlZmluZSBwb3J0SU5JVElBTF9VTlBSSVZJTEVHRURfUFJPR1JBTV9TVEFUVVNfV09SRAkoIDB4MDAwMDEwRkZVTCApIC8qIElPIExldmVsIDAsIE1QVSBSZWdpc3RlciBTZXQgMSBhbmQgQ2FsbCBEZXB0aCBDb3VudGluZyBkaXNhYmxlZC4gKi8NCisjZGVmaW5lIHBvcnRJTklUSUFMX1BDWElfVVBQRVJfQ09OVEVYVF9XT1JECQkJCSggMHgwMEMwMDAwMFVMICkgLyogVGhlIGxvd2VyIDIwIGJpdHMgaWRlbnRpZnkgdGhlIENTQSBhZGRyZXNzLiAqLw0KKyNkZWZpbmUgcG9ydElOSVRJQUxfU1lTQ09OCQkJCQkJCQkoIDB4MDAwMDAwMDBVTCApIC8qIE1QVSBEaXNhYmxlLiAqLw0KIA0KIC8qIENTQSBtYW5pcHVsYXRpb24gbWFjcm9zLiAqLw0KLSNkZWZpbmUgcG9ydENTQV9GQ1hfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAweDAwMEZGRkZGVUwgKQ0KKyNkZWZpbmUgcG9ydENTQV9GQ1hfTUFTSwkJCQkJKCAweDAwMEZGRkZGVUwgKQ0KIA0KIC8qIE9TIEludGVycnVwdCBhbmQgVHJhcCBtZWNoYW5pc21zLiAqLw0KLSNkZWZpbmUgcG9ydFJFU1RPUkVfUFNXX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCB+KCAweDAwMDAwMEZGVUwgKSApDQotI2RlZmluZSBwb3J0U1lTQ0FMTF9UUkFQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDYgKQ0KKyNkZWZpbmUgcG9ydFJFU1RPUkVfUFNXX01BU0sJCQkJKCB+KCAweDAwMDAwMEZGVUwgKSApDQorI2RlZmluZSBwb3J0U1lTQ0FMTF9UUkFQCQkJCQkoIDYgKQ0KIA0KIC8qIEVhY2ggQ1NBIGNvbnRhaW5zIDE2IHdvcmRzIG9mIGRhdGEuICovDQotI2RlZmluZSBwb3J0TlVNX1dPUkRTX0lOX0NTQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDE2ICkNCisjZGVmaW5lIHBvcnROVU1fV09SRFNfSU5fQ1NBCQkJCSggMTYgKQ0KIA0KIC8qIFRoZSBpbnRlcnJ1cHQgZW5hYmxlIGJpdCBpbiB0aGUgUENQX1NSQyByZWdpc3Rlci4gKi8NCi0jZGVmaW5lIHBvcnRFTkFCTEVfQ1BVX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICggMVUgPDwgMTJVICkNCisjZGVmaW5lIHBvcnRFTkFCTEVfQ1BVX0lOVEVSUlVQVCAJCQkoIDFVIDw8IDEyVSApDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyoNCiAgKiBQZXJmb3JtIGFueSBoYXJkd2FyZSBjb25maWd1cmF0aW9uIG5lY2Vzc2FyeSB0byBnZW5lcmF0ZSB0aGUgdGljayBpbnRlcnJ1cHQuDQogICovDQotc3RhdGljIHZvaWQgcHJ2U3lzdGVtVGlja0hhbmRsZXIoIGludCApIF9fYXR0cmlidXRlX18oICggbG9uZ2NhbGwgKSApOw0KK3N0YXRpYyB2b2lkIHBydlN5c3RlbVRpY2tIYW5kbGVyKCBpbnQgKSBfX2F0dHJpYnV0ZV9fKChsb25nY2FsbCkpOw0KIHN0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKTsNCiANCiAvKg0KQEAgLTg4LDI3OCArODgsMjcyIEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBUaGlzIHJlZmVyZW5jZSBpcyByZXF1aXJlZCBieSB0aGUgc2F2ZS9yZXN0b3JlIGNvbnRleHQgbWFjcm9zLiAqLw0KLWV4dGVybiB2b2xhdGlsZSB1aW50MzJfdCAqIHB4Q3VycmVudFRDQjsNCitleHRlcm4gdm9sYXRpbGUgdWludDMyX3QgKnB4Q3VycmVudFRDQjsNCiANCiAvKiBQcmVjYWxjdWxhdGUgdGhlIGNvbXBhcmUgbWF0Y2ggdmFsdWUgYXQgY29tcGlsZSB0aW1lLiAqLw0KIHN0YXRpYyBjb25zdCB1aW50MzJfdCB1bENvbXBhcmVNYXRjaFZhbHVlID0gKCBjb25maWdQRVJJUEhFUkFMX0NMT0NLX0haIC8gY29uZmlnVElDS19SQVRFX0haICk7DQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQotU3RhY2tUeXBlX3QgKiBweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICogcHhUb3BPZlN0YWNrLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYXNrRnVuY3Rpb25fdCBweENvZGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KK1N0YWNrVHlwZV90ICpweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICogcHhUb3BPZlN0YWNrLCBUYXNrRnVuY3Rpb25fdCBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycyApDQogew0KLSAgICB1aW50MzJfdCAqIHB1bFVwcGVyQ1NBID0gTlVMTDsNCi0gICAgdWludDMyX3QgKiBwdWxMb3dlckNTQSA9IE5VTEw7DQordWludDMyX3QgKnB1bFVwcGVyQ1NBID0gTlVMTDsNCit1aW50MzJfdCAqcHVsTG93ZXJDU0EgPSBOVUxMOw0KIA0KLSAgICAvKiAxNiBBZGRyZXNzIFJlZ2lzdGVycyAoNCBBZGRyZXNzIHJlZ2lzdGVycyBhcmUgZ2xvYmFsKSwgMTYgRGF0YQ0KLSAgICAgKiBSZWdpc3RlcnMsIGFuZCAzIFN5c3RlbSBSZWdpc3RlcnMuDQotICAgICAqDQotICAgICAqIFRoZXJlIGFyZSAzIHJlZ2lzdGVycyB0aGF0IHRyYWNrIHRoZSBDU0FzLg0KLSAgICAgKiAgRkNYIHBvaW50cyB0byB0aGUgaGVhZCBvZiBnbG9iYWxseSBmcmVlIHNldCBvZiBDU0FzLg0KLSAgICAgKiAgUENYIGZvciB0aGUgdGFzayBuZWVkcyB0byBwb2ludCB0byBMb3dlci0+VXBwZXItPk5VTEwgYXJyYW5nZW1lbnQuDQotICAgICAqICBMQ1ggcG9pbnRzIHRvIHRoZSBsYXN0IGZyZWUgQ1NBIHNvIHRoYXQgY29ycmVjdGl2ZSBhY3Rpb24gY2FuIGJlIHRha2VuLg0KLSAgICAgKg0KLSAgICAgKiBOZWVkIHR3byBDU0FzIHRvIHN0b3JlIHRoZSBjb250ZXh0IG9mIGEgdGFzay4NCi0gICAgICogIFRoZSB1cHBlciBjb250ZXh0IGNvbnRhaW5zIEQ4LUQxNSwgQTEwLUExNSwgUFNXIGFuZCBQQ1hJLT5OVUxMLg0KLSAgICAgKiAgVGhlIGxvd2VyIGNvbnRleHQgY29udGFpbnMgRDAtRDcsIEEyLUE3LCBBMTEgYW5kIFBDWEktPlVwcGVyQ29udGV4dC4NCi0gICAgICogIFRoZSBweEN1cnJlbnRUQ0ItPnB4VG9wT2ZTdGFjayBwb2ludHMgdG8gdGhlIExvd2VyIENvbnRleHQgUlNMQ1ggbWF0Y2hpbmcgdGhlIGluaXRpYWwgQklTUi4NCi0gICAgICogIFRoZSBMb3dlciBDb250ZXh0IHBvaW50cyB0byB0aGUgVXBwZXIgQ29udGV4dCByZWFkeSBmb3IgdGhlIHJldHVybiBmcm9tIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4NCi0gICAgICoNCi0gICAgICogVGhlIFJlYWwgc3RhY2sgcG9pbnRlciBmb3IgdGhlIHRhc2sgaXMgc3RvcmVkIGluIHRoZSBBMTAgd2hpY2ggaXMgcmVzdG9yZWQNCi0gICAgICogd2l0aCB0aGUgdXBwZXIgY29udGV4dC4gKi8NCisJLyogMTYgQWRkcmVzcyBSZWdpc3RlcnMgKDQgQWRkcmVzcyByZWdpc3RlcnMgYXJlIGdsb2JhbCksIDE2IERhdGENCisJUmVnaXN0ZXJzLCBhbmQgMyBTeXN0ZW0gUmVnaXN0ZXJzLg0KIA0KLSAgICAvKiBIYXZlIHRvIGRpc2FibGUgaW50ZXJydXB0cyBoZXJlIGJlY2F1c2UgdGhlIENTQXMgYXJlIGdvaW5nIHRvIGJlDQotICAgICAqIG1hbmlwdWxhdGVkLiAqLw0KLSAgICBwb3J0RU5URVJfQ1JJVElDQUwoKTsNCi0gICAgew0KLSAgICAgICAgLyogRFN5bmMgdG8gZW5zdXJlIHRoYXQgYnVmZmVyaW5nIGlzIG5vdCBhIHByb2JsZW0uICovDQotICAgICAgICBfZHN5bmMoKTsNCisJVGhlcmUgYXJlIDMgcmVnaXN0ZXJzIHRoYXQgdHJhY2sgdGhlIENTQXMuDQorCQlGQ1ggcG9pbnRzIHRvIHRoZSBoZWFkIG9mIGdsb2JhbGx5IGZyZWUgc2V0IG9mIENTQXMuDQorCQlQQ1ggZm9yIHRoZSB0YXNrIG5lZWRzIHRvIHBvaW50IHRvIExvd2VyLT5VcHBlci0+TlVMTCBhcnJhbmdlbWVudC4NCisJCUxDWCBwb2ludHMgdG8gdGhlIGxhc3QgZnJlZSBDU0Egc28gdGhhdCBjb3JyZWN0aXZlIGFjdGlvbiBjYW4gYmUgdGFrZW4uDQogDQotICAgICAgICAvKiBDb25zdW1lIHR3byBmcmVlIENTQXMuICovDQotICAgICAgICBwdWxMb3dlckNTQSA9IHBvcnRDU0FfVE9fQUREUkVTUyggX19NRkNSKCAkRkNYICkgKTsNCisJTmVlZCB0d28gQ1NBcyB0byBzdG9yZSB0aGUgY29udGV4dCBvZiBhIHRhc2suDQorCQlUaGUgdXBwZXIgY29udGV4dCBjb250YWlucyBEOC1EMTUsIEExMC1BMTUsIFBTVyBhbmQgUENYSS0+TlVMTC4NCisJCVRoZSBsb3dlciBjb250ZXh0IGNvbnRhaW5zIEQwLUQ3LCBBMi1BNywgQTExIGFuZCBQQ1hJLT5VcHBlckNvbnRleHQuDQorCQlUaGUgcHhDdXJyZW50VENCLT5weFRvcE9mU3RhY2sgcG9pbnRzIHRvIHRoZSBMb3dlciBDb250ZXh0IFJTTENYIG1hdGNoaW5nIHRoZSBpbml0aWFsIEJJU1IuDQorCQlUaGUgTG93ZXIgQ29udGV4dCBwb2ludHMgdG8gdGhlIFVwcGVyIENvbnRleHQgcmVhZHkgZm9yIHRoZSByZXR1cm4gZnJvbSB0aGUgaW50ZXJydXB0IGhhbmRsZXIuDQogDQotICAgICAgICBpZiggTlVMTCAhPSBwdWxMb3dlckNTQSApDQotICAgICAgICB7DQotICAgICAgICAgICAgLyogVGhlIExvd2VyIExpbmtzIHRvIHRoZSBVcHBlci4gKi8NCi0gICAgICAgICAgICBwdWxVcHBlckNTQSA9IHBvcnRDU0FfVE9fQUREUkVTUyggcHVsTG93ZXJDU0FbIDAgXSApOw0KLSAgICAgICAgfQ0KKwkgVGhlIFJlYWwgc3RhY2sgcG9pbnRlciBmb3IgdGhlIHRhc2sgaXMgc3RvcmVkIGluIHRoZSBBMTAgd2hpY2ggaXMgcmVzdG9yZWQNCisJIHdpdGggdGhlIHVwcGVyIGNvbnRleHQuICovDQogDQotICAgICAgICAvKiBDaGVjayB0aGF0IHdlIGhhdmUgc3VjY2Vzc2Z1bGx5IHJlc2VydmVkIHR3byBDU0FzLiAqLw0KLSAgICAgICAgaWYoICggTlVMTCAhPSBwdWxMb3dlckNTQSApICYmICggTlVMTCAhPSBwdWxVcHBlckNTQSApICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICAvKiBSZW1vdmUgdGhlIHR3byBjb25zdW1lZCBDU0FzIGZyb20gdGhlIGZyZWUgQ1NBIGxpc3QuICovDQotICAgICAgICAgICAgX2Rpc2FibGUoKTsNCi0gICAgICAgICAgICBfZHN5bmMoKTsNCi0gICAgICAgICAgICBfbXRjciggJEZDWCwgcHVsVXBwZXJDU0FbIDAgXSApOw0KLSAgICAgICAgICAgIF9pc3luYygpOw0KLSAgICAgICAgICAgIF9lbmFibGUoKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGVsc2UNCi0gICAgICAgIHsNCi0gICAgICAgICAgICAvKiBTaW1wbHkgdHJpZ2dlciBhIGNvbnRleHQgbGlzdCBkZXBsZXRpb24gdHJhcC4gKi8NCi0gICAgICAgICAgICBfc3ZsY3goKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBwb3J0RVhJVF9DUklUSUNBTCgpOw0KKwkvKiBIYXZlIHRvIGRpc2FibGUgaW50ZXJydXB0cyBoZXJlIGJlY2F1c2UgdGhlIENTQXMgYXJlIGdvaW5nIHRvIGJlDQorCW1hbmlwdWxhdGVkLiAqLw0KKwlwb3J0RU5URVJfQ1JJVElDQUwoKTsNCisJew0KKwkJLyogRFN5bmMgdG8gZW5zdXJlIHRoYXQgYnVmZmVyaW5nIGlzIG5vdCBhIHByb2JsZW0uICovDQorCQlfZHN5bmMoKTsNCiANCi0gICAgLyogQ2xlYXIgdGhlIHVwcGVyIENTQS4gKi8NCi0gICAgbWVtc2V0KCBwdWxVcHBlckNTQSwgMCwgcG9ydE5VTV9XT1JEU19JTl9DU0EgKiBzaXplb2YoIHVpbnQzMl90ICkgKTsNCisJCS8qIENvbnN1bWUgdHdvIGZyZWUgQ1NBcy4gKi8NCisJCXB1bExvd2VyQ1NBID0gcG9ydENTQV9UT19BRERSRVNTKCBfX01GQ1IoICRGQ1ggKSApOw0KKwkJaWYoIE5VTEwgIT0gcHVsTG93ZXJDU0EgKQ0KKwkJew0KKwkJCS8qIFRoZSBMb3dlciBMaW5rcyB0byB0aGUgVXBwZXIuICovDQorCQkJcHVsVXBwZXJDU0EgPSBwb3J0Q1NBX1RPX0FERFJFU1MoIHB1bExvd2VyQ1NBWyAwIF0gKTsNCisJCX0NCiANCi0gICAgLyogVXBwZXIgQ29udGV4dC4gKi8NCi0gICAgcHVsVXBwZXJDU0FbIDIgXSA9ICggdWludDMyX3QgKSBweFRvcE9mU3RhY2s7ICAgICAgLyogQTEwOwlTdGFjayBSZXR1cm4gYWthIFN0YWNrIFBvaW50ZXIgKi8NCi0gICAgcHVsVXBwZXJDU0FbIDEgXSA9IHBvcnRTWVNURU1fUFJPR1JBTV9TVEFUVVNfV09SRDsgLyogUFNXCSovDQorCQkvKiBDaGVjayB0aGF0IHdlIGhhdmUgc3VjY2Vzc2Z1bGx5IHJlc2VydmVkIHR3byBDU0FzLiAqLw0KKwkJaWYoICggTlVMTCAhPSBwdWxMb3dlckNTQSApICYmICggTlVMTCAhPSBwdWxVcHBlckNTQSApICkNCisJCXsNCisJCQkvKiBSZW1vdmUgdGhlIHR3byBjb25zdW1lZCBDU0FzIGZyb20gdGhlIGZyZWUgQ1NBIGxpc3QuICovDQorCQkJX2Rpc2FibGUoKTsNCisJCQlfZHN5bmMoKTsNCisJCQlfbXRjciggJEZDWCwgcHVsVXBwZXJDU0FbIDAgXSApOw0KKwkJCV9pc3luYygpOw0KKwkJCV9lbmFibGUoKTsNCisJCX0NCisJCWVsc2UNCisJCXsNCisJCQkvKiBTaW1wbHkgdHJpZ2dlciBhIGNvbnRleHQgbGlzdCBkZXBsZXRpb24gdHJhcC4gKi8NCisJCQlfc3ZsY3goKTsNCisJCX0NCisJfQ0KKwlwb3J0RVhJVF9DUklUSUNBTCgpOw0KIA0KLSAgICAvKiBDbGVhciB0aGUgbG93ZXIgQ1NBLiAqLw0KLSAgICBtZW1zZXQoIHB1bExvd2VyQ1NBLCAwLCBwb3J0TlVNX1dPUkRTX0lOX0NTQSAqIHNpemVvZiggdWludDMyX3QgKSApOw0KKwkvKiBDbGVhciB0aGUgdXBwZXIgQ1NBLiAqLw0KKwltZW1zZXQoIHB1bFVwcGVyQ1NBLCAwLCBwb3J0TlVNX1dPUkRTX0lOX0NTQSAqIHNpemVvZiggdWludDMyX3QgKSApOw0KIA0KLSAgICAvKiBMb3dlciBDb250ZXh0LiAqLw0KLSAgICBwdWxMb3dlckNTQVsgOCBdID0gKCB1aW50MzJfdCApIHB2UGFyYW1ldGVyczsgLyogQTQ7CUFkZHJlc3MgVHlwZSBQYXJhbWV0ZXIgUmVnaXN0ZXIJKi8NCi0gICAgcHVsTG93ZXJDU0FbIDEgXSA9ICggdWludDMyX3QgKSBweENvZGU7ICAgICAgIC8qIEExMTsJUmV0dXJuIEFkZHJlc3MgYWthIFJBICovDQorCS8qIFVwcGVyIENvbnRleHQuICovDQorCXB1bFVwcGVyQ1NBWyAyIF0gPSAoIHVpbnQzMl90IClweFRvcE9mU3RhY2s7CQkvKiBBMTA7CVN0YWNrIFJldHVybiBha2EgU3RhY2sgUG9pbnRlciAqLw0KKwlwdWxVcHBlckNTQVsgMSBdID0gcG9ydFNZU1RFTV9QUk9HUkFNX1NUQVRVU19XT1JEOwkJLyogUFNXCSovDQogDQotICAgIC8qIFBDWEkgcG9pbnRpbmcgdG8gdGhlIFVwcGVyIGNvbnRleHQuICovDQotICAgIHB1bExvd2VyQ1NBWyAwIF0gPSAoIHBvcnRJTklUSUFMX1BDWElfVVBQRVJfQ09OVEVYVF9XT1JEIHwgKCB1aW50MzJfdCApIHBvcnRBRERSRVNTX1RPX0NTQSggcHVsVXBwZXJDU0EgKSApOw0KKwkvKiBDbGVhciB0aGUgbG93ZXIgQ1NBLiAqLw0KKwltZW1zZXQoIHB1bExvd2VyQ1NBLCAwLCBwb3J0TlVNX1dPUkRTX0lOX0NTQSAqIHNpemVvZiggdWludDMyX3QgKSApOw0KIA0KLSAgICAvKiBTYXZlIHRoZSBsaW5rIHRvIHRoZSBDU0EgaW4gdGhlIHRvcCBvZiBzdGFjay4gKi8NCi0gICAgcHhUb3BPZlN0YWNrID0gKCB1aW50MzJfdCAqICkgcG9ydEFERFJFU1NfVE9fQ1NBKCBwdWxMb3dlckNTQSApOw0KKwkvKiBMb3dlciBDb250ZXh0LiAqLw0KKwlwdWxMb3dlckNTQVsgOCBdID0gKCB1aW50MzJfdCApIHB2UGFyYW1ldGVyczsJCS8qIEE0OwlBZGRyZXNzIFR5cGUgUGFyYW1ldGVyIFJlZ2lzdGVyCSovDQorCXB1bExvd2VyQ1NBWyAxIF0gPSAoIHVpbnQzMl90ICkgcHhDb2RlOwkJCS8qIEExMTsJUmV0dXJuIEFkZHJlc3MgYWthIFJBICovDQogDQotICAgIC8qIERTeW5jIHRvIGVuc3VyZSB0aGF0IGJ1ZmZlcmluZyBpcyBub3QgYSBwcm9ibGVtLiAqLw0KLSAgICBfZHN5bmMoKTsNCisJLyogUENYSSBwb2ludGluZyB0byB0aGUgVXBwZXIgY29udGV4dC4gKi8NCisJcHVsTG93ZXJDU0FbIDAgXSA9ICggcG9ydElOSVRJQUxfUENYSV9VUFBFUl9DT05URVhUX1dPUkQgfCAoIHVpbnQzMl90ICkgcG9ydEFERFJFU1NfVE9fQ1NBKCBwdWxVcHBlckNTQSApICk7DQogDQotICAgIHJldHVybiBweFRvcE9mU3RhY2s7DQorCS8qIFNhdmUgdGhlIGxpbmsgdG8gdGhlIENTQSBpbiB0aGUgdG9wIG9mIHN0YWNrLiAqLw0KKwlweFRvcE9mU3RhY2sgPSAodWludDMyX3QgKiApIHBvcnRBRERSRVNTX1RPX0NTQSggcHVsTG93ZXJDU0EgKTsNCisNCisJLyogRFN5bmMgdG8gZW5zdXJlIHRoYXQgYnVmZmVyaW5nIGlzIG5vdCBhIHByb2JsZW0uICovDQorCV9kc3luYygpOw0KKw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBpbnQzMl90IHhQb3J0U3RhcnRTY2hlZHVsZXIoIHZvaWQgKQ0KIHsNCi0gICAgZXh0ZXJuIHZvaWQgdlRyYXBJbnN0YWxsSGFuZGxlcnMoIHZvaWQgKTsNCi0gICAgdWludDMyX3QgdWxNRkNSID0gMFVMOw0KLSAgICB1aW50MzJfdCAqIHB1bFVwcGVyQ1NBID0gTlVMTDsNCi0gICAgdWludDMyX3QgKiBwdWxMb3dlckNTQSA9IE5VTEw7DQorZXh0ZXJuIHZvaWQgdlRyYXBJbnN0YWxsSGFuZGxlcnMoIHZvaWQgKTsNCit1aW50MzJfdCB1bE1GQ1IgPSAwVUw7DQordWludDMyX3QgKnB1bFVwcGVyQ1NBID0gTlVMTDsNCit1aW50MzJfdCAqcHVsTG93ZXJDU0EgPSBOVUxMOw0KIA0KLSAgICAvKiBJbnRlcnJ1cHRzIGF0IG9yIGJlbG93IGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSBhcmUgZGlzYWJsZQ0KLSAgICAgKiB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLiAqLw0KKwkvKiBJbnRlcnJ1cHRzIGF0IG9yIGJlbG93IGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSBhcmUgZGlzYWJsZQ0KKwl3aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLiAqLw0KIA0KLSAgICAvKiBTZXQtdXAgdGhlIHRpbWVyIGludGVycnVwdC4gKi8NCi0gICAgcHJ2U2V0dXBUaW1lckludGVycnVwdCgpOw0KKwkvKiBTZXQtdXAgdGhlIHRpbWVyIGludGVycnVwdC4gKi8NCisJcHJ2U2V0dXBUaW1lckludGVycnVwdCgpOw0KIA0KLSAgICAvKiBJbnN0YWxsIHRoZSBUcmFwIEhhbmRsZXJzLiAqLw0KLSAgICB2VHJhcEluc3RhbGxIYW5kbGVycygpOw0KKwkvKiBJbnN0YWxsIHRoZSBUcmFwIEhhbmRsZXJzLiAqLw0KKwl2VHJhcEluc3RhbGxIYW5kbGVycygpOw0KIA0KLSAgICAvKiBJbnN0YWxsIHRoZSBTeXNjYWxsIEhhbmRsZXIgZm9yIHlpZWxkIGNhbGxzLiAqLw0KLSAgICBpZiggMCA9PSBfaW5zdGFsbF90cmFwX2hhbmRsZXIoIHBvcnRTWVNDQUxMX1RSQVAsIHBydlRyYXBZaWVsZCApICkNCi0gICAgew0KLSAgICAgICAgLyogRmFpbGVkIHRvIGluc3RhbGwgdGhlIHlpZWxkIGhhbmRsZXIsIGZvcmNlIGFuIGFzc2VydC4gKi8NCi0gICAgICAgIGNvbmZpZ0FTU0VSVCggKCAoIHZvbGF0aWxlIHZvaWQgKiApIE5VTEwgKSApOw0KLSAgICB9DQorCS8qIEluc3RhbGwgdGhlIFN5c2NhbGwgSGFuZGxlciBmb3IgeWllbGQgY2FsbHMuICovDQorCWlmKCAwID09IF9pbnN0YWxsX3RyYXBfaGFuZGxlciggcG9ydFNZU0NBTExfVFJBUCwgcHJ2VHJhcFlpZWxkICkgKQ0KKwl7DQorCQkvKiBGYWlsZWQgdG8gaW5zdGFsbCB0aGUgeWllbGQgaGFuZGxlciwgZm9yY2UgYW4gYXNzZXJ0LiAqLw0KKwkJY29uZmlnQVNTRVJUKCAoICggdm9sYXRpbGUgdm9pZCAqICkgTlVMTCApICk7DQorCX0NCiANCi0gICAgLyogRW5hYmxlIHRoZW4gaW5zdGFsbCB0aGUgcHJpb3JpdHkgMSBpbnRlcnJ1cHQgZm9yIHBlbmRpbmcgY29udGV4dA0KLSAgICAgKiBzd2l0Y2hlcyBmcm9tIGFuIElTUi4gIFNlZSBtb2RfU1JDIGluIHRoZSBUcmlDb3JlIG1hbnVhbC4gKi8NCi0gICAgQ1BVX1NSQzAucmVnID0gKCBwb3J0RU5BQkxFX0NQVV9JTlRFUlJVUFQgKSB8ICggY29uZmlnS0VSTkVMX1lJRUxEX1BSSU9SSVRZICk7DQorCS8qIEVuYWJsZSB0aGVuIGluc3RhbGwgdGhlIHByaW9yaXR5IDEgaW50ZXJydXB0IGZvciBwZW5kaW5nIGNvbnRleHQNCisJc3dpdGNoZXMgZnJvbSBhbiBJU1IuICBTZWUgbW9kX1NSQyBpbiB0aGUgVHJpQ29yZSBtYW51YWwuICovDQorCUNQVV9TUkMwLnJlZyA9IAkoIHBvcnRFTkFCTEVfQ1BVX0lOVEVSUlVQVCApIHwgKCBjb25maWdLRVJORUxfWUlFTERfUFJJT1JJVFkgKTsNCisJaWYoIDAgPT0gX2luc3RhbGxfaW50X2hhbmRsZXIoIGNvbmZpZ0tFUk5FTF9ZSUVMRF9QUklPUklUWSwgcHJ2SW50ZXJydXB0WWllbGQsIDAgKSApDQorCXsNCisJCS8qIEZhaWxlZCB0byBpbnN0YWxsIHRoZSB5aWVsZCBoYW5kbGVyLCBmb3JjZSBhbiBhc3NlcnQuICovDQorCQljb25maWdBU1NFUlQoICggKCB2b2xhdGlsZSB2b2lkICogKSBOVUxMICkgKTsNCisJfQ0KIA0KLSAgICBpZiggMCA9PSBfaW5zdGFsbF9pbnRfaGFuZGxlciggY29uZmlnS0VSTkVMX1lJRUxEX1BSSU9SSVRZLCBwcnZJbnRlcnJ1cHRZaWVsZCwgMCApICkNCi0gICAgew0KLSAgICAgICAgLyogRmFpbGVkIHRvIGluc3RhbGwgdGhlIHlpZWxkIGhhbmRsZXIsIGZvcmNlIGFuIGFzc2VydC4gKi8NCi0gICAgICAgIGNvbmZpZ0FTU0VSVCggKCAoIHZvbGF0aWxlIHZvaWQgKiApIE5VTEwgKSApOw0KLSAgICB9DQorCV9kaXNhYmxlKCk7DQogDQotICAgIF9kaXNhYmxlKCk7DQorCS8qIExvYWQgdGhlIGluaXRpYWwgU1lTQ09OLiAqLw0KKwlfbXRjciggJFNZU0NPTiwgcG9ydElOSVRJQUxfU1lTQ09OICk7DQorCV9pc3luYygpOw0KIA0KLSAgICAvKiBMb2FkIHRoZSBpbml0aWFsIFNZU0NPTi4gKi8NCi0gICAgX210Y3IoICRTWVNDT04sIHBvcnRJTklUSUFMX1NZU0NPTiApOw0KLSAgICBfaXN5bmMoKTsNCisJLyogRU5ESU5JVCBoYXMgYWxyZWFkeSBiZWVuIGFwcGxpZWQgaW4gdGhlICdjc3RhcnQuYycgY29kZS4gKi8NCiANCi0gICAgLyogRU5ESU5JVCBoYXMgYWxyZWFkeSBiZWVuIGFwcGxpZWQgaW4gdGhlICdjc3RhcnQuYycgY29kZS4gKi8NCisJLyogQ2xlYXIgdGhlIFBTVy5DREMgdG8gZW5hYmxlIHRoZSB1c2Ugb2YgYW4gUkZFIHdpdGhvdXQgaXQgZ2VuZXJhdGluZyBhbg0KKwlleGNlcHRpb24gYmVjYXVzZSB0aGlzIGNvZGUgaXMgbm90IGdlbnVpbmVseSBpbiBhbiBleGNlcHRpb24uICovDQorCXVsTUZDUiA9IF9fTUZDUiggJFBTVyApOw0KKwl1bE1GQ1IgJj0gcG9ydFJFU1RPUkVfUFNXX01BU0s7DQorCV9kc3luYygpOw0KKwlfbXRjciggJFBTVywgdWxNRkNSICk7DQorCV9pc3luYygpOw0KIA0KLSAgICAvKiBDbGVhciB0aGUgUFNXLkNEQyB0byBlbmFibGUgdGhlIHVzZSBvZiBhbiBSRkUgd2l0aG91dCBpdCBnZW5lcmF0aW5nIGFuDQotICAgICAqIGV4Y2VwdGlvbiBiZWNhdXNlIHRoaXMgY29kZSBpcyBub3QgZ2VudWluZWx5IGluIGFuIGV4Y2VwdGlvbi4gKi8NCi0gICAgdWxNRkNSID0gX19NRkNSKCAkUFNXICk7DQotICAgIHVsTUZDUiAmPSBwb3J0UkVTVE9SRV9QU1dfTUFTSzsNCi0gICAgX2RzeW5jKCk7DQotICAgIF9tdGNyKCAkUFNXLCB1bE1GQ1IgKTsNCi0gICAgX2lzeW5jKCk7DQorCS8qIEZpbmFsbHksIHBlcmZvcm0gdGhlIGVxdWl2YWxlbnQgb2YgYSBwb3J0UkVTVE9SRV9DT05URVhUKCkgKi8NCisJcHVsTG93ZXJDU0EgPSBwb3J0Q1NBX1RPX0FERFJFU1MoICggKnB4Q3VycmVudFRDQiApICk7DQorCXB1bFVwcGVyQ1NBID0gcG9ydENTQV9UT19BRERSRVNTKCBwdWxMb3dlckNTQVswXSApOw0KKwlfZHN5bmMoKTsNCisJX210Y3IoICRQQ1hJLCAqcHhDdXJyZW50VENCICk7DQorCV9pc3luYygpOw0KKwlfbm9wKCk7DQorCV9yc2xjeCgpOw0KKwlfbm9wKCk7DQogDQotICAgIC8qIEZpbmFsbHksIHBlcmZvcm0gdGhlIGVxdWl2YWxlbnQgb2YgYSBwb3J0UkVTVE9SRV9DT05URVhUKCkgKi8NCi0gICAgcHVsTG93ZXJDU0EgPSBwb3J0Q1NBX1RPX0FERFJFU1MoICggKnB4Q3VycmVudFRDQiApICk7DQotICAgIHB1bFVwcGVyQ1NBID0gcG9ydENTQV9UT19BRERSRVNTKCBwdWxMb3dlckNTQVsgMCBdICk7DQotICAgIF9kc3luYygpOw0KLSAgICBfbXRjciggJFBDWEksICpweEN1cnJlbnRUQ0IgKTsNCi0gICAgX2lzeW5jKCk7DQotICAgIF9ub3AoKTsNCi0gICAgX3JzbGN4KCk7DQotICAgIF9ub3AoKTsNCisJLyogUmV0dXJuIHRvIHRoZSBmaXJzdCB0YXNrIHNlbGVjdGVkIHRvIGV4ZWN1dGUuICovDQorCV9fYXNtIHZvbGF0aWxlKCAicmZlIiApOw0KIA0KLSAgICAvKiBSZXR1cm4gdG8gdGhlIGZpcnN0IHRhc2sgc2VsZWN0ZWQgdG8gZXhlY3V0ZS4gKi8NCi0gICAgX19hc20gdm9sYXRpbGUgKCAicmZlIiApOw0KLQ0KLSAgICAvKiBXaWxsIG5vdCBnZXQgaGVyZS4gKi8NCi0gICAgcmV0dXJuIDA7DQorCS8qIFdpbGwgbm90IGdldCBoZXJlLiAqLw0KKwlyZXR1cm4gMDsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogc3RhdGljIHZvaWQgcHJ2U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApDQogew0KLSAgICAvKiBTZXQtdXAgdGhlIGNsb2NrIGRpdmlkZXIuICovDQotICAgIHVubG9ja193ZHRjb24oKTsNCi0gICAgew0KLSAgICAgICAgLyogV2FpdCB1bnRpbCBhY2Nlc3MgdG8gRW5kaW50IHByb3RlY3RlZCByZWdpc3RlciBpcyBlbmFibGVkLiAqLw0KLSAgICAgICAgd2hpbGUoIDAgIT0gKCBXRFRfQ09OMC5yZWcgJiAweDFVTCApICkNCi0gICAgICAgIHsNCi0gICAgICAgIH0NCisJLyogU2V0LXVwIHRoZSBjbG9jayBkaXZpZGVyLiAqLw0KKwl1bmxvY2tfd2R0Y29uKCk7DQorCXsNCisJCS8qIFdhaXQgdW50aWwgYWNjZXNzIHRvIEVuZGludCBwcm90ZWN0ZWQgcmVnaXN0ZXIgaXMgZW5hYmxlZC4gKi8NCisJCXdoaWxlKCAwICE9ICggV0RUX0NPTjAucmVnICYgMHgxVUwgKSApOw0KIA0KLSAgICAgICAgLyogUk1DID09IDEgc28gU1RNIENsb2NrID09IEZQSSAqLw0KLSAgICAgICAgU1RNX0NMQy5yZWcgPSAoIDFVTCA8PCA4ICk7DQotICAgIH0NCi0gICAgbG9ja193ZHRjb24oKTsNCisJCS8qIFJNQyA9PSAxIHNvIFNUTSBDbG9jayA9PSBGUEkgKi8NCisJCVNUTV9DTEMucmVnID0gKCAxVUwgPDwgOCApOw0KKwl9DQorCWxvY2tfd2R0Y29uKCk7DQogDQogICAgIC8qIERldGVybWluZSBob3cgbWFueSBiaXRzIGFyZSB1c2VkIHdpdGhvdXQgY2hhbmdpbmcgb3RoZXIgYml0cyBpbiB0aGUgQ01DT04gcmVnaXN0ZXIuICovDQotICAgIFNUTV9DTUNPTi5yZWcgJj0gfiggMHgxZlVMICk7DQotICAgIFNUTV9DTUNPTi5yZWcgfD0gKCAweDFmVUwgLSBfX0NMWiggY29uZmlnUEVSSVBIRVJBTF9DTE9DS19IWiAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApICk7DQorCVNUTV9DTUNPTi5yZWcgJj0gfiggMHgxZlVMICk7DQorCVNUTV9DTUNPTi5yZWcgfD0gKCAweDFmVUwgLSBfX0NMWiggY29uZmlnUEVSSVBIRVJBTF9DTE9DS19IWiAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApICk7DQogDQotICAgIC8qIFRha2UgaW50byBhY2NvdW50IHRoZSBjdXJyZW50IHRpbWUgc28gYSB0aWNrIGRvZXNuJ3QgaGFwcGVuIGltbWVkaWF0ZWx5LiAqLw0KLSAgICBTVE1fQ01QMC5yZWcgPSB1bENvbXBhcmVNYXRjaFZhbHVlICsgU1RNX1RJTTAucmVnOw0KKwkvKiBUYWtlIGludG8gYWNjb3VudCB0aGUgY3VycmVudCB0aW1lIHNvIGEgdGljayBkb2Vzbid0IGhhcHBlbiBpbW1lZGlhdGVseS4gKi8NCisJU1RNX0NNUDAucmVnID0gdWxDb21wYXJlTWF0Y2hWYWx1ZSArIFNUTV9USU0wLnJlZzsNCiANCi0gICAgaWYoIDAgIT0gX2luc3RhbGxfaW50X2hhbmRsZXIoIGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFksIHBydlN5c3RlbVRpY2tIYW5kbGVyLCAwICkgKQ0KLSAgICB7DQotICAgICAgICAvKiBTZXQtdXAgdGhlIGludGVycnVwdC4gKi8NCi0gICAgICAgIFNUTV9TUkMwLnJlZyA9ICggY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWSB8IDB4MDAwMDUwMDBVTCApOw0KKwlpZiggMCAhPSBfaW5zdGFsbF9pbnRfaGFuZGxlciggY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWSwgcHJ2U3lzdGVtVGlja0hhbmRsZXIsIDAgKSApDQorCXsNCisJCS8qIFNldC11cCB0aGUgaW50ZXJydXB0LiAqLw0KKwkJU1RNX1NSQzAucmVnID0gKCBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZIHwgMHgwMDAwNTAwMFVMICk7DQogDQotICAgICAgICAvKiBFbmFibGUgdGhlIEludGVycnVwdC4gKi8NCi0gICAgICAgIFNUTV9JU1JSLnJlZyAmPSB+KCAweDAzVUwgKTsNCi0gICAgICAgIFNUTV9JU1JSLnJlZyB8PSAweDFVTDsNCi0gICAgICAgIFNUTV9JU1JSLnJlZyAmPSB+KCAweDA3VUwgKTsNCi0gICAgICAgIFNUTV9JQ1IucmVnIHw9IDB4MVVMOw0KLSAgICB9DQotICAgIGVsc2UNCi0gICAgew0KLSAgICAgICAgLyogRmFpbGVkIHRvIGluc3RhbGwgdGhlIFRpY2sgSW50ZXJydXB0LiAqLw0KLSAgICAgICAgY29uZmlnQVNTRVJUKCAoICggdm9sYXRpbGUgdm9pZCAqICkgTlVMTCApICk7DQotICAgIH0NCisJCS8qIEVuYWJsZSB0aGUgSW50ZXJydXB0LiAqLw0KKwkJU1RNX0lTUlIucmVnICY9IH4oIDB4MDNVTCApOw0KKwkJU1RNX0lTUlIucmVnIHw9IDB4MVVMOw0KKwkJU1RNX0lTUlIucmVnICY9IH4oIDB4MDdVTCApOw0KKwkJU1RNX0lDUi5yZWcgfD0gMHgxVUw7DQorCX0NCisJZWxzZQ0KKwl7DQorCQkvKiBGYWlsZWQgdG8gaW5zdGFsbCB0aGUgVGljayBJbnRlcnJ1cHQuICovDQorCQljb25maWdBU1NFUlQoICggKCB2b2xhdGlsZSB2b2lkICogKSBOVUxMICkgKTsNCisJfQ0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBzdGF0aWMgdm9pZCBwcnZTeXN0ZW1UaWNrSGFuZGxlciggaW50IGlBcmcgKQ0KIHsNCi0gICAgdWludDMyX3QgdWxTYXZlZEludGVycnVwdE1hc2s7DQotICAgIHVpbnQzMl90ICogcHhVcHBlckNTQSA9IE5VTEw7DQotICAgIHVpbnQzMl90IHhVcHBlckNTQSA9IDBVTDsNCi0gICAgZXh0ZXJuIHZvbGF0aWxlIHVpbnQzMl90ICogcHhDdXJyZW50VENCOw0KLSAgICBpbnQzMl90IGxZaWVsZFJlcXVpcmVkOw0KK3VpbnQzMl90IHVsU2F2ZWRJbnRlcnJ1cHRNYXNrOw0KK3VpbnQzMl90ICpweFVwcGVyQ1NBID0gTlVMTDsNCit1aW50MzJfdCB4VXBwZXJDU0EgPSAwVUw7DQorZXh0ZXJuIHZvbGF0aWxlIHVpbnQzMl90ICpweEN1cnJlbnRUQ0I7DQoraW50MzJfdCBsWWllbGRSZXF1aXJlZDsNCiANCi0gICAgLyogSnVzdCB0byBhdm9pZCBjb21waWxlciB3YXJuaW5ncyBhYm91dCB1bnVzZWQgcGFyYW1ldGVycy4gKi8NCi0gICAgKCB2b2lkICkgaUFyZzsNCisJLyogSnVzdCB0byBhdm9pZCBjb21waWxlciB3YXJuaW5ncyBhYm91dCB1bnVzZWQgcGFyYW1ldGVycy4gKi8NCisJKCB2b2lkICkgaUFyZzsNCiANCi0gICAgLyogQ2xlYXIgdGhlIGludGVycnVwdCBzb3VyY2UuICovDQotICAgIFNUTV9JU1JSLnJlZyA9IDFVTDsNCisJLyogQ2xlYXIgdGhlIGludGVycnVwdCBzb3VyY2UuICovDQorCVNUTV9JU1JSLnJlZyA9IDFVTDsNCiANCi0gICAgLyogUmVsb2FkIHRoZSBDb21wYXJlIE1hdGNoIHJlZ2lzdGVyIGZvciBYIHRpY2tzIGludG8gdGhlIGZ1dHVyZS4NCi0gICAgICoNCi0gICAgICogSWYgY3JpdGljYWwgc2VjdGlvbiBvciBpbnRlcnJ1cHQgbmVzdGluZyBidWRnZXRzIGFyZSBleGNlZWRlZCwgdGhlbg0KLSAgICAgKiBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBjYWxjdWxhdGVkIG5leHQgY29tcGFyZSBtYXRjaCB2YWx1ZSBpcyBpbiB0aGUNCi0gICAgICogcGFzdC4gIElmIHRoaXMgb2NjdXJzICh1bmxpa2VseSksIGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIHJlc3VsdGluZw0KLSAgICAgKiB0aW1lIHNsaXBwYWdlIHdpbGwgZXhjZWVkIGEgc2luZ2xlIHRpY2sgcGVyaW9kLiAgQW55IGFkdmVyc2UgZWZmZWN0IG9mDQotICAgICAqIHRoaXMgaXMgdGltZSBib3VuZGVkIGJ5IHRoZSBmYWN0IHRoYXQgb25seSB0aGUgZmlyc3QgbiBiaXRzIG9mIHRoZSA1NiBiaXQNCi0gICAgICogU1RNIHRpbWVyIGFyZSBiZWluZyB1c2VkIGZvciBhIGNvbXBhcmUgbWF0Y2gsIHNvIGFub3RoZXIgY29tcGFyZSBtYXRjaA0KLSAgICAgKiB3aWxsIG9jY3VyIGFmdGVyIGFuIG92ZXJmbG93IGluIGp1c3QgdGhvc2UgbiBiaXRzIChub3QgdGhlIGVudGlyZSA1NiBiaXRzKS4NCi0gICAgICogQXMgYW4gZXhhbXBsZSwgaWYgdGhlIHBlcmlwaGVyYWwgY2xvY2sgaXMgNzVNSHosIGFuZCB0aGUgdGljayByYXRlIGlzIDFLSHosDQotICAgICAqIGEgbWlzc2VkIHRpY2sgY291bGQgcmVzdWx0IGluIHRoZSBuZXh0IHRpY2sgaW50ZXJydXB0IG9jY3VycmluZyB3aXRoaW4gYQ0KLSAgICAgKiB0aW1lIHRoYXQgaXMgMS43IHRpbWVzIHRoZSBkZXNpcmVkIHBlcmlvZC4gIFRoZSBmYWN0IHRoYXQgdGhpcyBpcyBncmVhdGVyDQotICAgICAqIHRoYW4gYSBzaW5nbGUgdGljayBwZXJpb2QgaXMgYW4gZWZmZWN0IG9mIHVzaW5nIGEgdGltZXIgdGhhdCBjYW5ub3QgYmUNCi0gICAgICogYXV0b21hdGljYWxseSByZXNldCwgaW4gaGFyZHdhcmUsIGJ5IHRoZSBvY2N1cnJlbmNlIG9mIGEgdGljayBpbnRlcnJ1cHQuDQotICAgICAqIENoYW5naW5nIHRoZSB0aWNrIHNvdXJjZSB0byBhIHRpbWVyIHRoYXQgaGFzIGFuIGF1dG9tYXRpYyByZXNldCBvbiBjb21wYXJlDQotICAgICAqIG1hdGNoIChzdWNoIGFzIGEgR1BUQSB0aW1lcikgd2lsbCByZWR1Y2UgdGhlIG1heGltdW0gcG9zc2libGUgYWRkaXRpb25hbA0KLSAgICAgKiBwZXJpb2QgdG8gZXhhY3RseSAxIHRpbWVzIHRoZSBkZXNpcmVkIHBlcmlvZC4gKi8NCi0gICAgU1RNX0NNUDAucmVnICs9IHVsQ29tcGFyZU1hdGNoVmFsdWU7DQorCS8qIFJlbG9hZCB0aGUgQ29tcGFyZSBNYXRjaCByZWdpc3RlciBmb3IgWCB0aWNrcyBpbnRvIHRoZSBmdXR1cmUuDQogDQotICAgIC8qIEtlcm5lbCBBUEkgY2FsbHMgcmVxdWlyZSBDcml0aWNhbCBTZWN0aW9ucy4gKi8NCi0gICAgdWxTYXZlZEludGVycnVwdE1hc2sgPSBwb3J0U0VUX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCk7DQotICAgIHsNCi0gICAgICAgIC8qIEluY3JlbWVudCB0aGUgVGljay4gKi8NCi0gICAgICAgIGxZaWVsZFJlcXVpcmVkID0geFRhc2tJbmNyZW1lbnRUaWNrKCk7DQotICAgIH0NCi0gICAgcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCB1bFNhdmVkSW50ZXJydXB0TWFzayApOw0KKwlJZiBjcml0aWNhbCBzZWN0aW9uIG9yIGludGVycnVwdCBuZXN0aW5nIGJ1ZGdldHMgYXJlIGV4Y2VlZGVkLCB0aGVuDQorCWl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIGNhbGN1bGF0ZWQgbmV4dCBjb21wYXJlIG1hdGNoIHZhbHVlIGlzIGluIHRoZQ0KKwlwYXN0LiAgSWYgdGhpcyBvY2N1cnMgKHVubGlrZWx5KSwgaXQgaXMgcG9zc2libGUgdGhhdCB0aGUgcmVzdWx0aW5nDQorCXRpbWUgc2xpcHBhZ2Ugd2lsbCBleGNlZWQgYSBzaW5nbGUgdGljayBwZXJpb2QuICBBbnkgYWR2ZXJzZSBlZmZlY3Qgb2YNCisJdGhpcyBpcyB0aW1lIGJvdW5kZWQgYnkgdGhlIGZhY3QgdGhhdCBvbmx5IHRoZSBmaXJzdCBuIGJpdHMgb2YgdGhlIDU2IGJpdA0KKwlTVE0gdGltZXIgYXJlIGJlaW5nIHVzZWQgZm9yIGEgY29tcGFyZSBtYXRjaCwgc28gYW5vdGhlciBjb21wYXJlIG1hdGNoDQorCXdpbGwgb2NjdXIgYWZ0ZXIgYW4gb3ZlcmZsb3cgaW4ganVzdCB0aG9zZSBuIGJpdHMgKG5vdCB0aGUgZW50aXJlIDU2IGJpdHMpLg0KKwlBcyBhbiBleGFtcGxlLCBpZiB0aGUgcGVyaXBoZXJhbCBjbG9jayBpcyA3NU1IeiwgYW5kIHRoZSB0aWNrIHJhdGUgaXMgMUtIeiwNCisJYSBtaXNzZWQgdGljayBjb3VsZCByZXN1bHQgaW4gdGhlIG5leHQgdGljayBpbnRlcnJ1cHQgb2NjdXJyaW5nIHdpdGhpbiBhDQorCXRpbWUgdGhhdCBpcyAxLjcgdGltZXMgdGhlIGRlc2lyZWQgcGVyaW9kLiAgVGhlIGZhY3QgdGhhdCB0aGlzIGlzIGdyZWF0ZXINCisJdGhhbiBhIHNpbmdsZSB0aWNrIHBlcmlvZCBpcyBhbiBlZmZlY3Qgb2YgdXNpbmcgYSB0aW1lciB0aGF0IGNhbm5vdCBiZQ0KKwlhdXRvbWF0aWNhbGx5IHJlc2V0LCBpbiBoYXJkd2FyZSwgYnkgdGhlIG9jY3VycmVuY2Ugb2YgYSB0aWNrIGludGVycnVwdC4NCisJQ2hhbmdpbmcgdGhlIHRpY2sgc291cmNlIHRvIGEgdGltZXIgdGhhdCBoYXMgYW4gYXV0b21hdGljIHJlc2V0IG9uIGNvbXBhcmUNCisJbWF0Y2ggKHN1Y2ggYXMgYSBHUFRBIHRpbWVyKSB3aWxsIHJlZHVjZSB0aGUgbWF4aW11bSBwb3NzaWJsZSBhZGRpdGlvbmFsDQorCXBlcmlvZCB0byBleGFjdGx5IDEgdGltZXMgdGhlIGRlc2lyZWQgcGVyaW9kLiAqLw0KKwlTVE1fQ01QMC5yZWcgKz0gdWxDb21wYXJlTWF0Y2hWYWx1ZTsNCiANCi0gICAgaWYoIGxZaWVsZFJlcXVpcmVkICE9IHBkRkFMU0UgKQ0KLSAgICB7DQotICAgICAgICAvKiBTYXZlIHRoZSBjb250ZXh0IG9mIGEgdGFzay4NCi0gICAgICAgICAqIFRoZSB1cHBlciBjb250ZXh0IGlzIGF1dG9tYXRpY2FsbHkgc2F2ZWQgd2hlbiBlbnRlcmluZyBhIHRyYXAgb3IgaW50ZXJydXB0Lg0KLSAgICAgICAgICogTmVlZCB0byBzYXZlIHRoZSBsb3dlciBjb250ZXh0IGFzIHdlbGwgYW5kIGNvcHkgdGhlIFBDWEkgQ1NBIElEIGludG8NCi0gICAgICAgICAqIHB4Q3VycmVudFRDQi0+cHhUb3BPZlN0YWNrLiBPbmx5IExvd2VyIENvbnRleHQgQ1NBIElEcyBtYXkgYmUgc2F2ZWQgdG8gdGhlDQotICAgICAgICAgKiBUQ0Igb2YgYSB0YXNrLg0KLSAgICAgICAgICoNCi0gICAgICAgICAqIENhbGwgdlRhc2tTd2l0Y2hDb250ZXh0IHRvIHNlbGVjdCB0aGUgbmV4dCB0YXNrLCBub3RlIHRoYXQgdGhpcyBjaGFuZ2VzIHRoZQ0KLSAgICAgICAgICogdmFsdWUgb2YgcHhDdXJyZW50VENCIHNvIHRoYXQgaXQgbmVlZHMgdG8gYmUgcmVsb2FkZWQuDQotICAgICAgICAgKg0KLSAgICAgICAgICogQ2FsbCB2UG9ydFNldE1QVVJlZ2lzdGVyU2V0T25lIHRvIGNoYW5nZSB0aGUgTVBVIG1hcHBpbmcgZm9yIHRoZSB0YXNrDQotICAgICAgICAgKiB0aGF0IGhhcyBqdXN0IGJlZW4gc3dpdGNoZWQgaW4uDQotICAgICAgICAgKg0KLSAgICAgICAgICogTG9hZCB0aGUgY29udGV4dCBvZiB0aGUgdGFzay4NCi0gICAgICAgICAqIE5lZWQgdG8gcmVzdG9yZSB0aGUgbG93ZXIgY29udGV4dCBieSBsb2FkaW5nIHRoZSBDU0EgZnJvbQ0KLSAgICAgICAgICogcHhDdXJyZW50VENCLT5weFRvcE9mU3RhY2sgaW50byBQQ1hJIChlZmZlY3RpdmVseSBjaGFuZ2luZyB0aGUgY2FsbCBzdGFjaykuDQotICAgICAgICAgKiBJbiB0aGUgSW50ZXJydXB0IGhhbmRsZXIgcG9zdC1hbWJsZSwgUlNMQ1ggd2lsbCByZXN0b3JlIHRoZSBsb3dlciBjb250ZXh0DQotICAgICAgICAgKiBvZiB0aGUgdGFzay4gUkZFIHdpbGwgcmVzdG9yZSB0aGUgdXBwZXIgY29udGV4dCBvZiB0aGUgdGFzaywganVtcCB0byB0aGUNCi0gICAgICAgICAqIHJldHVybiBhZGRyZXNzIGFuZCByZXN0b3JlIHRoZSBwcmV2aW91cyBzdGF0ZSBvZiBpbnRlcnJ1cHRzIGJlaW5nDQotICAgICAgICAgKiBlbmFibGVkL2Rpc2FibGVkLiAqLw0KLSAgICAgICAgX2Rpc2FibGUoKTsNCi0gICAgICAgIF9kc3luYygpOw0KLSAgICAgICAgeFVwcGVyQ1NBID0gX19NRkNSKCAkUENYSSApOw0KLSAgICAgICAgcHhVcHBlckNTQSA9IHBvcnRDU0FfVE9fQUREUkVTUyggeFVwcGVyQ1NBICk7DQotICAgICAgICAqcHhDdXJyZW50VENCID0gcHhVcHBlckNTQVsgMCBdOw0KLSAgICAgICAgdlRhc2tTd2l0Y2hDb250ZXh0KCk7DQotICAgICAgICBweFVwcGVyQ1NBWyAwIF0gPSAqcHhDdXJyZW50VENCOw0KLSAgICAgICAgQ1BVX1NSQzAuYml0cy5TRVRSID0gMDsNCi0gICAgICAgIF9pc3luYygpOw0KLSAgICB9DQorCS8qIEtlcm5lbCBBUEkgY2FsbHMgcmVxdWlyZSBDcml0aWNhbCBTZWN0aW9ucy4gKi8NCisJdWxTYXZlZEludGVycnVwdE1hc2sgPSBwb3J0U0VUX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCk7DQorCXsNCisJCS8qIEluY3JlbWVudCB0aGUgVGljay4gKi8NCisJCWxZaWVsZFJlcXVpcmVkID0geFRhc2tJbmNyZW1lbnRUaWNrKCk7DQorCX0NCisJcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCB1bFNhdmVkSW50ZXJydXB0TWFzayApOw0KKw0KKwlpZiggbFlpZWxkUmVxdWlyZWQgIT0gcGRGQUxTRSApDQorCXsNCisJCS8qIFNhdmUgdGhlIGNvbnRleHQgb2YgYSB0YXNrLg0KKwkJVGhlIHVwcGVyIGNvbnRleHQgaXMgYXV0b21hdGljYWxseSBzYXZlZCB3aGVuIGVudGVyaW5nIGEgdHJhcCBvciBpbnRlcnJ1cHQuDQorCQlOZWVkIHRvIHNhdmUgdGhlIGxvd2VyIGNvbnRleHQgYXMgd2VsbCBhbmQgY29weSB0aGUgUENYSSBDU0EgSUQgaW50bw0KKwkJcHhDdXJyZW50VENCLT5weFRvcE9mU3RhY2suIE9ubHkgTG93ZXIgQ29udGV4dCBDU0EgSURzIG1heSBiZSBzYXZlZCB0byB0aGUNCisJCVRDQiBvZiBhIHRhc2suDQorDQorCQlDYWxsIHZUYXNrU3dpdGNoQ29udGV4dCB0byBzZWxlY3QgdGhlIG5leHQgdGFzaywgbm90ZSB0aGF0IHRoaXMgY2hhbmdlcyB0aGUNCisJCXZhbHVlIG9mIHB4Q3VycmVudFRDQiBzbyB0aGF0IGl0IG5lZWRzIHRvIGJlIHJlbG9hZGVkLg0KKw0KKwkJQ2FsbCB2UG9ydFNldE1QVVJlZ2lzdGVyU2V0T25lIHRvIGNoYW5nZSB0aGUgTVBVIG1hcHBpbmcgZm9yIHRoZSB0YXNrDQorCQl0aGF0IGhhcyBqdXN0IGJlZW4gc3dpdGNoZWQgaW4uDQorDQorCQlMb2FkIHRoZSBjb250ZXh0IG9mIHRoZSB0YXNrLg0KKwkJTmVlZCB0byByZXN0b3JlIHRoZSBsb3dlciBjb250ZXh0IGJ5IGxvYWRpbmcgdGhlIENTQSBmcm9tDQorCQlweEN1cnJlbnRUQ0ItPnB4VG9wT2ZTdGFjayBpbnRvIFBDWEkgKGVmZmVjdGl2ZWx5IGNoYW5naW5nIHRoZSBjYWxsIHN0YWNrKS4NCisJCUluIHRoZSBJbnRlcnJ1cHQgaGFuZGxlciBwb3N0LWFtYmxlLCBSU0xDWCB3aWxsIHJlc3RvcmUgdGhlIGxvd2VyIGNvbnRleHQNCisJCW9mIHRoZSB0YXNrLiBSRkUgd2lsbCByZXN0b3JlIHRoZSB1cHBlciBjb250ZXh0IG9mIHRoZSB0YXNrLCBqdW1wIHRvIHRoZQ0KKwkJcmV0dXJuIGFkZHJlc3MgYW5kIHJlc3RvcmUgdGhlIHByZXZpb3VzIHN0YXRlIG9mIGludGVycnVwdHMgYmVpbmcNCisJCWVuYWJsZWQvZGlzYWJsZWQuICovDQorCQlfZGlzYWJsZSgpOw0KKwkJX2RzeW5jKCk7DQorCQl4VXBwZXJDU0EgPSBfX01GQ1IoICRQQ1hJICk7DQorCQlweFVwcGVyQ1NBID0gcG9ydENTQV9UT19BRERSRVNTKCB4VXBwZXJDU0EgKTsNCisJCSpweEN1cnJlbnRUQ0IgPSBweFVwcGVyQ1NBWyAwIF07DQorCQl2VGFza1N3aXRjaENvbnRleHQoKTsNCisJCXB4VXBwZXJDU0FbIDAgXSA9ICpweEN1cnJlbnRUQ0I7DQorCQlDUFVfU1JDMC5iaXRzLlNFVFIgPSAwOw0KKwkJX2lzeW5jKCk7DQorCX0NCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQpAQCAtMzgxLDE2NiArMzc1LDE2NyBAQAogICogdGhhbiB0aGV5IGNhbiBiZSBmcmVlZCBhc3N1bWluZyB0aGF0IHRhc2tzIGFyZSBiZWluZyBzcGF3bmVkIGFuZA0KICAqIGRlbGV0ZWQgZnJlcXVlbnRseS4NCiAgKi8NCi12b2lkIHZQb3J0UmVjbGFpbUNTQSggdWludDMyX3QgKiBweFRDQiApDQordm9pZCB2UG9ydFJlY2xhaW1DU0EoIHVpbnQzMl90ICpweFRDQiApDQogew0KLSAgICB1aW50MzJfdCBweEhlYWRDU0EsIHB4VGFpbENTQSwgcHhGcmVlQ1NBOw0KLSAgICB1aW50MzJfdCAqIHB1bE5leHRDU0E7DQordWludDMyX3QgcHhIZWFkQ1NBLCBweFRhaWxDU0EsIHB4RnJlZUNTQTsNCit1aW50MzJfdCAqcHVsTmV4dENTQTsNCiANCi0gICAgLyogQSBwb2ludGVyIHRvIHRoZSBmaXJzdCBDU0EgaW4gdGhlIGxpc3Qgb2YgQ1NBcyBjb25zdW1lZCBieSB0aGUgdGFzayBpcw0KLSAgICAgKiBzdG9yZWQgaW4gdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIHRhc2tzIFRDQiBzdHJ1Y3R1cmUgKHdoZXJlIHRoZSBzdGFjaw0KLSAgICAgKiBwb2ludGVyIHdvdWxkIGJlIG9uIGEgdHJhZGl0aW9uYWwgc3RhY2sgYmFzZWQgYXJjaGl0ZWN0dXJlKS4gKi8NCi0gICAgcHhIZWFkQ1NBID0gKCAqcHhUQ0IgKSAmIHBvcnRDU0FfRkNYX01BU0s7DQorCS8qIEEgcG9pbnRlciB0byB0aGUgZmlyc3QgQ1NBIGluIHRoZSBsaXN0IG9mIENTQXMgY29uc3VtZWQgYnkgdGhlIHRhc2sgaXMNCisJc3RvcmVkIGluIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSB0YXNrcyBUQ0Igc3RydWN0dXJlICh3aGVyZSB0aGUgc3RhY2sNCisJcG9pbnRlciB3b3VsZCBiZSBvbiBhIHRyYWRpdGlvbmFsIHN0YWNrIGJhc2VkIGFyY2hpdGVjdHVyZSkuICovDQorCXB4SGVhZENTQSA9ICggKnB4VENCICkgJiBwb3J0Q1NBX0ZDWF9NQVNLOw0KIA0KLSAgICAvKiBNYXNrIG9mZiBldmVyeXRoaW5nIGluIHRoZSBDU0EgbGluayBmaWVsZCBvdGhlciB0aGFuIHRoZSBhZGRyZXNzLiAgSWYNCi0gICAgICogdGhlCWFkZHJlc3MgaXMgTlVMTCwgdGhlbiB0aGUgQ1NBIGlzIG5vdCBsaW5raW5nIGFueXdoZXJlIGFuZCB0aGVyZSBpcw0KLSAgICAgKiBub3RoaW5nCXRvIGRvLiAqLw0KLSAgICBweFRhaWxDU0EgPSBweEhlYWRDU0E7DQorCS8qIE1hc2sgb2ZmIGV2ZXJ5dGhpbmcgaW4gdGhlIENTQSBsaW5rIGZpZWxkIG90aGVyIHRoYW4gdGhlIGFkZHJlc3MuICBJZg0KKwl0aGUJYWRkcmVzcyBpcyBOVUxMLCB0aGVuIHRoZSBDU0EgaXMgbm90IGxpbmtpbmcgYW55d2hlcmUgYW5kIHRoZXJlIGlzDQorCW5vdGhpbmcJdG8gZG8uICovDQorCXB4VGFpbENTQSA9IHB4SGVhZENTQTsNCiANCi0gICAgLyogQ29udmVydCB0aGUgbGluayB2YWx1ZSB0byBjb250YWluIGp1c3QgYSByYXcgYWRkcmVzcyBhbmQgc3RvcmUgdGhpcw0KLSAgICAgKiBpbiBhIGxvY2FsIHZhcmlhYmxlLiAqLw0KLSAgICBwdWxOZXh0Q1NBID0gcG9ydENTQV9UT19BRERSRVNTKCBweFRhaWxDU0EgKTsNCisJLyogQ29udmVydCB0aGUgbGluayB2YWx1ZSB0byBjb250YWluIGp1c3QgYSByYXcgYWRkcmVzcyBhbmQgc3RvcmUgdGhpcw0KKwlpbiBhIGxvY2FsIHZhcmlhYmxlLiAqLw0KKwlwdWxOZXh0Q1NBID0gcG9ydENTQV9UT19BRERSRVNTKCBweFRhaWxDU0EgKTsNCiANCi0gICAgLyogSXRlcmF0ZSBvdmVyIHRoZSBDU0FzIHRoYXQgd2VyZSBjb25zdW1lZCBhcyBwYXJ0IG9mIHRoZSB0YXNrLiAgVGhlDQotICAgICAqIGZpcnN0IGZpZWxkIGluIHRoZSBDU0EgaXMgdGhlIHBvaW50ZXIgdG8gdGhlbiBuZXh0IENTQS4gIE1hc2sgb2ZmDQotICAgICAqIGV2ZXJ5dGhpbmcgaW4gdGhlIHBvaW50ZXIgdG8gdGhlIG5leHQgQ1NBLCBvdGhlciB0aGFuIHRoZSBsaW5rIGFkZHJlc3MuDQotICAgICAqIElmIHRoaXMgaXMgTlVMTCwgdGhlbiB0aGUgQ1NBIGN1cnJlbnRseSBiZWluZyBwb2ludGVkIHRvIGlzIHRoZSBsYXN0IGluDQotICAgICAqIHRoZSBjaGFpbi4gKi8NCi0gICAgd2hpbGUoIDBVTCAhPSAoIHB1bE5leHRDU0FbIDAgXSAmIHBvcnRDU0FfRkNYX01BU0sgKSApDQotICAgIHsNCi0gICAgICAgIC8qIENsZWFyIGFsbCBiaXRzIG9mIHRoZSBwb2ludGVyIHRvIHRoZSBuZXh0IGluIHRoZSBjaGFpbiwgb3RoZXINCi0gICAgICAgICAqIHRoYW4gdGhlIGFkZHJlc3MgYml0cyB0aGVtc2VsdmVzLiAqLw0KLSAgICAgICAgcHVsTmV4dENTQVsgMCBdID0gcHVsTmV4dENTQVsgMCBdICYgcG9ydENTQV9GQ1hfTUFTSzsNCisJLyogSXRlcmF0ZSBvdmVyIHRoZSBDU0FzIHRoYXQgd2VyZSBjb25zdW1lZCBhcyBwYXJ0IG9mIHRoZSB0YXNrLiAgVGhlDQorCWZpcnN0IGZpZWxkIGluIHRoZSBDU0EgaXMgdGhlIHBvaW50ZXIgdG8gdGhlbiBuZXh0IENTQS4gIE1hc2sgb2ZmDQorCWV2ZXJ5dGhpbmcgaW4gdGhlIHBvaW50ZXIgdG8gdGhlIG5leHQgQ1NBLCBvdGhlciB0aGFuIHRoZSBsaW5rIGFkZHJlc3MuDQorCUlmIHRoaXMgaXMgTlVMTCwgdGhlbiB0aGUgQ1NBIGN1cnJlbnRseSBiZWluZyBwb2ludGVkIHRvIGlzIHRoZSBsYXN0IGluDQorCXRoZSBjaGFpbi4gKi8NCisJd2hpbGUoIDBVTCAhPSAoIHB1bE5leHRDU0FbIDAgXSAmIHBvcnRDU0FfRkNYX01BU0sgKSApDQorCXsNCisJCS8qIENsZWFyIGFsbCBiaXRzIG9mIHRoZSBwb2ludGVyIHRvIHRoZSBuZXh0IGluIHRoZSBjaGFpbiwgb3RoZXINCisJCXRoYW4gdGhlIGFkZHJlc3MgYml0cyB0aGVtc2VsdmVzLiAqLw0KKwkJcHVsTmV4dENTQVsgMCBdID0gcHVsTmV4dENTQVsgMCBdICYgcG9ydENTQV9GQ1hfTUFTSzsNCiANCi0gICAgICAgIC8qIE1vdmUgdGhlIHBvaW50ZXIgdG8gcG9pbnQgdG8gdGhlIG5leHQgQ1NBIGluIHRoZSBsaXN0LiAqLw0KLSAgICAgICAgcHhUYWlsQ1NBID0gcHVsTmV4dENTQVsgMCBdOw0KKwkJLyogTW92ZSB0aGUgcG9pbnRlciB0byBwb2ludCB0byB0aGUgbmV4dCBDU0EgaW4gdGhlIGxpc3QuICovDQorCQlweFRhaWxDU0EgPSBwdWxOZXh0Q1NBWyAwIF07DQogDQotICAgICAgICAvKiBVcGRhdGUgdGhlIGxvY2FsIHBvaW50ZXIgdG8gdGhlIENTQS4gKi8NCi0gICAgICAgIHB1bE5leHRDU0EgPSBwb3J0Q1NBX1RPX0FERFJFU1MoIHB4VGFpbENTQSApOw0KLSAgICB9DQorCQkvKiBVcGRhdGUgdGhlIGxvY2FsIHBvaW50ZXIgdG8gdGhlIENTQS4gKi8NCisJCXB1bE5leHRDU0EgPSBwb3J0Q1NBX1RPX0FERFJFU1MoIHB4VGFpbENTQSApOw0KKwl9DQogDQotICAgIF9kaXNhYmxlKCk7DQotICAgIHsNCi0gICAgICAgIC8qIExvb2sgdXAgdGhlIGN1cnJlbnQgZnJlZSBDU0EgaGVhZC4gKi8NCi0gICAgICAgIF9kc3luYygpOw0KLSAgICAgICAgcHhGcmVlQ1NBID0gX19NRkNSKCAkRkNYICk7DQorCV9kaXNhYmxlKCk7DQorCXsNCisJCS8qIExvb2sgdXAgdGhlIGN1cnJlbnQgZnJlZSBDU0EgaGVhZC4gKi8NCisJCV9kc3luYygpOw0KKwkJcHhGcmVlQ1NBID0gX19NRkNSKCAkRkNYICk7DQogDQotICAgICAgICAvKiBKb2luIHRoZSBjdXJyZW50IEZyZWUgb250byB0aGUgVGFpbCBvZiB3aGF0IGlzIGJlaW5nIHJlY2xhaW1lZC4gKi8NCi0gICAgICAgIHBvcnRDU0FfVE9fQUREUkVTUyggcHhUYWlsQ1NBIClbIDAgXSA9IHB4RnJlZUNTQTsNCisJCS8qIEpvaW4gdGhlIGN1cnJlbnQgRnJlZSBvbnRvIHRoZSBUYWlsIG9mIHdoYXQgaXMgYmVpbmcgcmVjbGFpbWVkLiAqLw0KKwkJcG9ydENTQV9UT19BRERSRVNTKCBweFRhaWxDU0EgKVsgMCBdID0gcHhGcmVlQ1NBOw0KIA0KLSAgICAgICAgLyogTW92ZSB0aGUgaGVhZCBvZiB0aGUgcmVjbGFpbWVkIGludG8gdGhlIEZyZWUuICovDQotICAgICAgICBfZHN5bmMoKTsNCi0gICAgICAgIF9tdGNyKCAkRkNYLCBweEhlYWRDU0EgKTsNCi0gICAgICAgIF9pc3luYygpOw0KLSAgICB9DQotICAgIF9lbmFibGUoKTsNCisJCS8qIE1vdmUgdGhlIGhlYWQgb2YgdGhlIHJlY2xhaW1lZCBpbnRvIHRoZSBGcmVlLiAqLw0KKwkJX2RzeW5jKCk7DQorCQlfbXRjciggJEZDWCwgcHhIZWFkQ1NBICk7DQorCQlfaXN5bmMoKTsNCisJfQ0KKwlfZW5hYmxlKCk7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQ0KIHsNCi0gICAgLyogTm90aGluZyB0byBkby4gVW5saWtlbHkgdG8gd2FudCB0byBlbmQuICovDQorCS8qIE5vdGhpbmcgdG8gZG8uIFVubGlrZWx5IHRvIHdhbnQgdG8gZW5kLiAqLw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBzdGF0aWMgdm9pZCBwcnZUcmFwWWllbGQoIGludCBpVHJhcElkZW50aWZpY2F0aW9uICkNCiB7DQotICAgIHVpbnQzMl90ICogcHhVcHBlckNTQSA9IE5VTEw7DQotICAgIHVpbnQzMl90IHhVcHBlckNTQSA9IDBVTDsNCi0gICAgZXh0ZXJuIHZvbGF0aWxlIHVpbnQzMl90ICogcHhDdXJyZW50VENCOw0KK3VpbnQzMl90ICpweFVwcGVyQ1NBID0gTlVMTDsNCit1aW50MzJfdCB4VXBwZXJDU0EgPSAwVUw7DQorZXh0ZXJuIHZvbGF0aWxlIHVpbnQzMl90ICpweEN1cnJlbnRUQ0I7DQogDQotICAgIHN3aXRjaCggaVRyYXBJZGVudGlmaWNhdGlvbiApDQotICAgIHsNCi0gICAgICAgIGNhc2UgcG9ydFNZU0NBTExfVEFTS19ZSUVMRDoNCisJc3dpdGNoKCBpVHJhcElkZW50aWZpY2F0aW9uICkNCisJew0KKwkJY2FzZSBwb3J0U1lTQ0FMTF9UQVNLX1lJRUxEOg0KKwkJCS8qIFNhdmUgdGhlIGNvbnRleHQgb2YgYSB0YXNrLg0KKwkJCVRoZSB1cHBlciBjb250ZXh0IGlzIGF1dG9tYXRpY2FsbHkgc2F2ZWQgd2hlbiBlbnRlcmluZyBhIHRyYXAgb3IgaW50ZXJydXB0Lg0KKwkJCU5lZWQgdG8gc2F2ZSB0aGUgbG93ZXIgY29udGV4dCBhcyB3ZWxsIGFuZCBjb3B5IHRoZSBQQ1hJIENTQSBJRCBpbnRvDQorCQkJcHhDdXJyZW50VENCLT5weFRvcE9mU3RhY2suIE9ubHkgTG93ZXIgQ29udGV4dCBDU0EgSURzIG1heSBiZSBzYXZlZCB0byB0aGUNCisJCQlUQ0Igb2YgYSB0YXNrLg0KIA0KLSAgICAgICAgICAgIC8qIFNhdmUgdGhlIGNvbnRleHQgb2YgYSB0YXNrLg0KLSAgICAgICAgICAgICAqIFRoZSB1cHBlciBjb250ZXh0IGlzIGF1dG9tYXRpY2FsbHkgc2F2ZWQgd2hlbiBlbnRlcmluZyBhIHRyYXAgb3IgaW50ZXJydXB0Lg0KLSAgICAgICAgICAgICAqIE5lZWQgdG8gc2F2ZSB0aGUgbG93ZXIgY29udGV4dCBhcyB3ZWxsIGFuZCBjb3B5IHRoZSBQQ1hJIENTQSBJRCBpbnRvDQotICAgICAgICAgICAgICogcHhDdXJyZW50VENCLT5weFRvcE9mU3RhY2suIE9ubHkgTG93ZXIgQ29udGV4dCBDU0EgSURzIG1heSBiZSBzYXZlZCB0byB0aGUNCi0gICAgICAgICAgICAgKiBUQ0Igb2YgYSB0YXNrLg0KLSAgICAgICAgICAgICAqDQotICAgICAgICAgICAgICogQ2FsbCB2VGFza1N3aXRjaENvbnRleHQgdG8gc2VsZWN0IHRoZSBuZXh0IHRhc2ssIG5vdGUgdGhhdCB0aGlzIGNoYW5nZXMgdGhlDQotICAgICAgICAgICAgICogdmFsdWUgb2YgcHhDdXJyZW50VENCIHNvIHRoYXQgaXQgbmVlZHMgdG8gYmUgcmVsb2FkZWQuDQotICAgICAgICAgICAgICoNCi0gICAgICAgICAgICAgKiBDYWxsIHZQb3J0U2V0TVBVUmVnaXN0ZXJTZXRPbmUgdG8gY2hhbmdlIHRoZSBNUFUgbWFwcGluZyBmb3IgdGhlIHRhc2sNCi0gICAgICAgICAgICAgKiB0aGF0IGhhcyBqdXN0IGJlZW4gc3dpdGNoZWQgaW4uDQotICAgICAgICAgICAgICoNCi0gICAgICAgICAgICAgKiBMb2FkIHRoZSBjb250ZXh0IG9mIHRoZSB0YXNrLg0KLSAgICAgICAgICAgICAqIE5lZWQgdG8gcmVzdG9yZSB0aGUgbG93ZXIgY29udGV4dCBieSBsb2FkaW5nIHRoZSBDU0EgZnJvbQ0KLSAgICAgICAgICAgICAqIHB4Q3VycmVudFRDQi0+cHhUb3BPZlN0YWNrIGludG8gUENYSSAoZWZmZWN0aXZlbHkgY2hhbmdpbmcgdGhlIGNhbGwgc3RhY2spLg0KLSAgICAgICAgICAgICAqIEluIHRoZSBJbnRlcnJ1cHQgaGFuZGxlciBwb3N0LWFtYmxlLCBSU0xDWCB3aWxsIHJlc3RvcmUgdGhlIGxvd2VyIGNvbnRleHQNCi0gICAgICAgICAgICAgKiBvZiB0aGUgdGFzay4gUkZFIHdpbGwgcmVzdG9yZSB0aGUgdXBwZXIgY29udGV4dCBvZiB0aGUgdGFzaywganVtcCB0byB0aGUNCi0gICAgICAgICAgICAgKiByZXR1cm4gYWRkcmVzcyBhbmQgcmVzdG9yZSB0aGUgcHJldmlvdXMgc3RhdGUgb2YgaW50ZXJydXB0cyBiZWluZw0KLSAgICAgICAgICAgICAqIGVuYWJsZWQvZGlzYWJsZWQuICovDQotICAgICAgICAgICAgX2Rpc2FibGUoKTsNCi0gICAgICAgICAgICBfZHN5bmMoKTsNCi0gICAgICAgICAgICB4VXBwZXJDU0EgPSBfX01GQ1IoICRQQ1hJICk7DQotICAgICAgICAgICAgcHhVcHBlckNTQSA9IHBvcnRDU0FfVE9fQUREUkVTUyggeFVwcGVyQ1NBICk7DQotICAgICAgICAgICAgKnB4Q3VycmVudFRDQiA9IHB4VXBwZXJDU0FbIDAgXTsNCi0gICAgICAgICAgICB2VGFza1N3aXRjaENvbnRleHQoKTsNCi0gICAgICAgICAgICBweFVwcGVyQ1NBWyAwIF0gPSAqcHhDdXJyZW50VENCOw0KLSAgICAgICAgICAgIENQVV9TUkMwLmJpdHMuU0VUUiA9IDA7DQotICAgICAgICAgICAgX2lzeW5jKCk7DQotICAgICAgICAgICAgYnJlYWs7DQorCQkJQ2FsbCB2VGFza1N3aXRjaENvbnRleHQgdG8gc2VsZWN0IHRoZSBuZXh0IHRhc2ssIG5vdGUgdGhhdCB0aGlzIGNoYW5nZXMgdGhlDQorCQkJdmFsdWUgb2YgcHhDdXJyZW50VENCIHNvIHRoYXQgaXQgbmVlZHMgdG8gYmUgcmVsb2FkZWQuDQogDQotICAgICAgICBkZWZhdWx0Og0KLSAgICAgICAgICAgIC8qIFVuaW1wbGVtZW50ZWQgdHJhcCBjYWxsZWQuICovDQotICAgICAgICAgICAgY29uZmlnQVNTRVJUKCAoICggdm9sYXRpbGUgdm9pZCAqICkgTlVMTCApICk7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgIH0NCisJCQlDYWxsIHZQb3J0U2V0TVBVUmVnaXN0ZXJTZXRPbmUgdG8gY2hhbmdlIHRoZSBNUFUgbWFwcGluZyBmb3IgdGhlIHRhc2sNCisJCQl0aGF0IGhhcyBqdXN0IGJlZW4gc3dpdGNoZWQgaW4uDQorDQorCQkJTG9hZCB0aGUgY29udGV4dCBvZiB0aGUgdGFzay4NCisJCQlOZWVkIHRvIHJlc3RvcmUgdGhlIGxvd2VyIGNvbnRleHQgYnkgbG9hZGluZyB0aGUgQ1NBIGZyb20NCisJCQlweEN1cnJlbnRUQ0ItPnB4VG9wT2ZTdGFjayBpbnRvIFBDWEkgKGVmZmVjdGl2ZWx5IGNoYW5naW5nIHRoZSBjYWxsIHN0YWNrKS4NCisJCQlJbiB0aGUgSW50ZXJydXB0IGhhbmRsZXIgcG9zdC1hbWJsZSwgUlNMQ1ggd2lsbCByZXN0b3JlIHRoZSBsb3dlciBjb250ZXh0DQorCQkJb2YgdGhlIHRhc2suIFJGRSB3aWxsIHJlc3RvcmUgdGhlIHVwcGVyIGNvbnRleHQgb2YgdGhlIHRhc2ssIGp1bXAgdG8gdGhlDQorCQkJcmV0dXJuIGFkZHJlc3MgYW5kIHJlc3RvcmUgdGhlIHByZXZpb3VzIHN0YXRlIG9mIGludGVycnVwdHMgYmVpbmcNCisJCQllbmFibGVkL2Rpc2FibGVkLiAqLw0KKwkJCV9kaXNhYmxlKCk7DQorCQkJX2RzeW5jKCk7DQorCQkJeFVwcGVyQ1NBID0gX19NRkNSKCAkUENYSSApOw0KKwkJCXB4VXBwZXJDU0EgPSBwb3J0Q1NBX1RPX0FERFJFU1MoIHhVcHBlckNTQSApOw0KKwkJCSpweEN1cnJlbnRUQ0IgPSBweFVwcGVyQ1NBWyAwIF07DQorCQkJdlRhc2tTd2l0Y2hDb250ZXh0KCk7DQorCQkJcHhVcHBlckNTQVsgMCBdID0gKnB4Q3VycmVudFRDQjsNCisJCQlDUFVfU1JDMC5iaXRzLlNFVFIgPSAwOw0KKwkJCV9pc3luYygpOw0KKwkJCWJyZWFrOw0KKw0KKwkJZGVmYXVsdDoNCisJCQkvKiBVbmltcGxlbWVudGVkIHRyYXAgY2FsbGVkLiAqLw0KKwkJCWNvbmZpZ0FTU0VSVCggKCAoIHZvbGF0aWxlIHZvaWQgKiApIE5VTEwgKSApOw0KKwkJCWJyZWFrOw0KKwl9DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHN0YXRpYyB2b2lkIHBydkludGVycnVwdFlpZWxkKCBpbnQgaUlkICkNCiB7DQotICAgIHVpbnQzMl90ICogcHhVcHBlckNTQSA9IE5VTEw7DQotICAgIHVpbnQzMl90IHhVcHBlckNTQSA9IDBVTDsNCi0gICAgZXh0ZXJuIHZvbGF0aWxlIHVpbnQzMl90ICogcHhDdXJyZW50VENCOw0KK3VpbnQzMl90ICpweFVwcGVyQ1NBID0gTlVMTDsNCit1aW50MzJfdCB4VXBwZXJDU0EgPSAwVUw7DQorZXh0ZXJuIHZvbGF0aWxlIHVpbnQzMl90ICpweEN1cnJlbnRUQ0I7DQogDQotICAgIC8qIEp1c3QgdG8gcmVtb3ZlIGNvbXBpbGVyIHdhcm5pbmdzLiAqLw0KLSAgICAoIHZvaWQgKSBpSWQ7DQorCS8qIEp1c3QgdG8gcmVtb3ZlIGNvbXBpbGVyIHdhcm5pbmdzLiAqLw0KKwkoIHZvaWQgKSBpSWQ7DQogDQotICAgIC8qIFNhdmUgdGhlIGNvbnRleHQgb2YgYSB0YXNrLg0KLSAgICAgKiBUaGUgdXBwZXIgY29udGV4dCBpcyBhdXRvbWF0aWNhbGx5IHNhdmVkIHdoZW4gZW50ZXJpbmcgYSB0cmFwIG9yIGludGVycnVwdC4NCi0gICAgICogTmVlZCB0byBzYXZlIHRoZSBsb3dlciBjb250ZXh0IGFzIHdlbGwgYW5kIGNvcHkgdGhlIFBDWEkgQ1NBIElEIGludG8NCi0gICAgICogcHhDdXJyZW50VENCLT5weFRvcE9mU3RhY2suIE9ubHkgTG93ZXIgQ29udGV4dCBDU0EgSURzIG1heSBiZSBzYXZlZCB0byB0aGUNCi0gICAgICogVENCIG9mIGEgdGFzay4NCi0gICAgICoNCi0gICAgICogQ2FsbCB2VGFza1N3aXRjaENvbnRleHQgdG8gc2VsZWN0IHRoZSBuZXh0IHRhc2ssIG5vdGUgdGhhdCB0aGlzIGNoYW5nZXMgdGhlDQotICAgICAqIHZhbHVlIG9mIHB4Q3VycmVudFRDQiBzbyB0aGF0IGl0IG5lZWRzIHRvIGJlIHJlbG9hZGVkLg0KLSAgICAgKg0KLSAgICAgKiBDYWxsIHZQb3J0U2V0TVBVUmVnaXN0ZXJTZXRPbmUgdG8gY2hhbmdlIHRoZSBNUFUgbWFwcGluZyBmb3IgdGhlIHRhc2sNCi0gICAgICogdGhhdCBoYXMganVzdCBiZWVuIHN3aXRjaGVkIGluLg0KLSAgICAgKg0KLSAgICAgKiBMb2FkIHRoZSBjb250ZXh0IG9mIHRoZSB0YXNrLg0KLSAgICAgKiBOZWVkIHRvIHJlc3RvcmUgdGhlIGxvd2VyIGNvbnRleHQgYnkgbG9hZGluZyB0aGUgQ1NBIGZyb20NCi0gICAgICogcHhDdXJyZW50VENCLT5weFRvcE9mU3RhY2sgaW50byBQQ1hJIChlZmZlY3RpdmVseSBjaGFuZ2luZyB0aGUgY2FsbCBzdGFjaykuDQotICAgICAqIEluIHRoZSBJbnRlcnJ1cHQgaGFuZGxlciBwb3N0LWFtYmxlLCBSU0xDWCB3aWxsIHJlc3RvcmUgdGhlIGxvd2VyIGNvbnRleHQNCi0gICAgICogb2YgdGhlIHRhc2suIFJGRSB3aWxsIHJlc3RvcmUgdGhlIHVwcGVyIGNvbnRleHQgb2YgdGhlIHRhc2ssIGp1bXAgdG8gdGhlDQotICAgICAqIHJldHVybiBhZGRyZXNzIGFuZCByZXN0b3JlIHRoZSBwcmV2aW91cyBzdGF0ZSBvZiBpbnRlcnJ1cHRzIGJlaW5nDQotICAgICAqIGVuYWJsZWQvZGlzYWJsZWQuICovDQotICAgIF9kaXNhYmxlKCk7DQotICAgIF9kc3luYygpOw0KLSAgICB4VXBwZXJDU0EgPSBfX01GQ1IoICRQQ1hJICk7DQotICAgIHB4VXBwZXJDU0EgPSBwb3J0Q1NBX1RPX0FERFJFU1MoIHhVcHBlckNTQSApOw0KLSAgICAqcHhDdXJyZW50VENCID0gcHhVcHBlckNTQVsgMCBdOw0KLSAgICB2VGFza1N3aXRjaENvbnRleHQoKTsNCi0gICAgcHhVcHBlckNTQVsgMCBdID0gKnB4Q3VycmVudFRDQjsNCi0gICAgQ1BVX1NSQzAuYml0cy5TRVRSID0gMDsNCi0gICAgX2lzeW5jKCk7DQorCS8qIFNhdmUgdGhlIGNvbnRleHQgb2YgYSB0YXNrLg0KKwlUaGUgdXBwZXIgY29udGV4dCBpcyBhdXRvbWF0aWNhbGx5IHNhdmVkIHdoZW4gZW50ZXJpbmcgYSB0cmFwIG9yIGludGVycnVwdC4NCisJTmVlZCB0byBzYXZlIHRoZSBsb3dlciBjb250ZXh0IGFzIHdlbGwgYW5kIGNvcHkgdGhlIFBDWEkgQ1NBIElEIGludG8NCisJcHhDdXJyZW50VENCLT5weFRvcE9mU3RhY2suIE9ubHkgTG93ZXIgQ29udGV4dCBDU0EgSURzIG1heSBiZSBzYXZlZCB0byB0aGUNCisJVENCIG9mIGEgdGFzay4NCisNCisJQ2FsbCB2VGFza1N3aXRjaENvbnRleHQgdG8gc2VsZWN0IHRoZSBuZXh0IHRhc2ssIG5vdGUgdGhhdCB0aGlzIGNoYW5nZXMgdGhlDQorCXZhbHVlIG9mIHB4Q3VycmVudFRDQiBzbyB0aGF0IGl0IG5lZWRzIHRvIGJlIHJlbG9hZGVkLg0KKw0KKwlDYWxsIHZQb3J0U2V0TVBVUmVnaXN0ZXJTZXRPbmUgdG8gY2hhbmdlIHRoZSBNUFUgbWFwcGluZyBmb3IgdGhlIHRhc2sNCisJdGhhdCBoYXMganVzdCBiZWVuIHN3aXRjaGVkIGluLg0KKw0KKwlMb2FkIHRoZSBjb250ZXh0IG9mIHRoZSB0YXNrLg0KKwlOZWVkIHRvIHJlc3RvcmUgdGhlIGxvd2VyIGNvbnRleHQgYnkgbG9hZGluZyB0aGUgQ1NBIGZyb20NCisJcHhDdXJyZW50VENCLT5weFRvcE9mU3RhY2sgaW50byBQQ1hJIChlZmZlY3RpdmVseSBjaGFuZ2luZyB0aGUgY2FsbCBzdGFjaykuDQorCUluIHRoZSBJbnRlcnJ1cHQgaGFuZGxlciBwb3N0LWFtYmxlLCBSU0xDWCB3aWxsIHJlc3RvcmUgdGhlIGxvd2VyIGNvbnRleHQNCisJb2YgdGhlIHRhc2suIFJGRSB3aWxsIHJlc3RvcmUgdGhlIHVwcGVyIGNvbnRleHQgb2YgdGhlIHRhc2ssIGp1bXAgdG8gdGhlDQorCXJldHVybiBhZGRyZXNzIGFuZCByZXN0b3JlIHRoZSBwcmV2aW91cyBzdGF0ZSBvZiBpbnRlcnJ1cHRzIGJlaW5nDQorCWVuYWJsZWQvZGlzYWJsZWQuICovDQorCV9kaXNhYmxlKCk7DQorCV9kc3luYygpOw0KKwl4VXBwZXJDU0EgPSBfX01GQ1IoICRQQ1hJICk7DQorCXB4VXBwZXJDU0EgPSBwb3J0Q1NBX1RPX0FERFJFU1MoIHhVcHBlckNTQSApOw0KKwkqcHhDdXJyZW50VENCID0gcHhVcHBlckNTQVsgMCBdOw0KKwl2VGFza1N3aXRjaENvbnRleHQoKTsNCisJcHhVcHBlckNTQVsgMCBdID0gKnB4Q3VycmVudFRDQjsNCisJQ1BVX1NSQzAuYml0cy5TRVRSID0gMDsNCisJX2lzeW5jKCk7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHVpbnQzMl90IHV4UG9ydFNldEludGVycnVwdE1hc2tGcm9tSVNSKCB2b2lkICkNCiB7DQotICAgIHVpbnQzMl90IHV4UmV0dXJuID0gMFVMOw0KK3VpbnQzMl90IHV4UmV0dXJuID0gMFVMOw0KIA0KLSAgICBfZGlzYWJsZSgpOw0KLSAgICB1eFJldHVybiA9IF9fTUZDUiggJElDUiApOw0KLSAgICBfbXRjciggJElDUiwgKCAoIHV4UmV0dXJuICYgfnBvcnRDQ1BOX01BU0sgKSB8IGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSApICk7DQotICAgIF9pc3luYygpOw0KLSAgICBfZW5hYmxlKCk7DQorCV9kaXNhYmxlKCk7DQorCXV4UmV0dXJuID0gX19NRkNSKCAkSUNSICk7DQorCV9tdGNyKCAkSUNSLCAoICggdXhSZXR1cm4gJiB+cG9ydENDUE5fTUFTSyApIHwgY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkgKTsNCisJX2lzeW5jKCk7DQorCV9lbmFibGUoKTsNCiANCi0gICAgLyogUmV0dXJuIGp1c3QgdGhlIGludGVycnVwdCBtYXNrIGJpdHMuICovDQotICAgIHJldHVybiggdXhSZXR1cm4gJiBwb3J0Q0NQTl9NQVNLICk7DQorCS8qIFJldHVybiBqdXN0IHRoZSBpbnRlcnJ1cHQgbWFzayBiaXRzLiAqLw0KKwlyZXR1cm4gKCB1eFJldHVybiAmIHBvcnRDQ1BOX01BU0sgKTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvR0NDL1RyaUNvcmVfMTc4Mi9wb3J0bWFjcm8uaCBiL3BvcnRhYmxlL0dDQy9UcmlDb3JlXzE3ODIvcG9ydG1hY3JvLmgKaW5kZXggNGZlZWE3MC4uMmUyYTQ4MyAxMDA2NDQKLS0tIGEvcG9ydGFibGUvR0NDL1RyaUNvcmVfMTc4Mi9wb3J0bWFjcm8uaAorKysgYi9wb3J0YWJsZS9HQ0MvVHJpQ29yZV8xNzgyL3BvcnRtYWNyby5oCkBAIC0yNiwxNSArMjYsMTUgQEAKICAqLw0KIA0KICNpZm5kZWYgUE9SVE1BQ1JPX0gNCi0gICAgI2RlZmluZSBQT1JUTUFDUk9fSA0KKyNkZWZpbmUgUE9SVE1BQ1JPX0gNCiANCi0gICAgI2lmZGVmIF9fY3BsdXNwbHVzDQotICAgICAgICBleHRlcm4gIkMiIHsNCi0gICAgI2VuZGlmDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQogDQogLyogU3lzdGVtIEluY2x1ZGVzLiAqLw0KLSAgICAjaW5jbHVkZSA8dGMxNzgyLmg+DQotICAgICNpbmNsdWRlIDxtYWNoaW5lL2ludHJpbnNpY3MuaD4NCisjaW5jbHVkZSA8dGMxNzgyLmg+DQorI2luY2x1ZGUgPG1hY2hpbmUvaW50cmluc2ljcy5oPg0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgKiBQb3J0IHNwZWNpZmljIGRlZmluaXRpb25zLg0KQEAgLTQ3LDEzMCArNDcsMTI3IEBACiAgKi8NCiANCiAvKiBUeXBlIGRlZmluaXRpb25zLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRDSEFSICAgICAgICAgIGNoYXINCi0gICAgI2RlZmluZSBwb3J0RkxPQVQgICAgICAgICBmbG9hdA0KLSAgICAjZGVmaW5lIHBvcnRET1VCTEUgICAgICAgIGRvdWJsZQ0KLSAgICAjZGVmaW5lIHBvcnRMT05HICAgICAgICAgIGxvbmcNCi0gICAgI2RlZmluZSBwb3J0U0hPUlQgICAgICAgICBzaG9ydA0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19UWVBFICAgIHVpbnQzMl90DQotICAgICNkZWZpbmUgcG9ydEJBU0VfVFlQRSAgICAgbG9uZw0KKyNkZWZpbmUgcG9ydENIQVIJCWNoYXINCisjZGVmaW5lIHBvcnRGTE9BVAkJZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUJCWRvdWJsZQ0KKyNkZWZpbmUgcG9ydExPTkcJCWxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVAkJc2hvcnQNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFCXVpbnQzMl90DQorI2RlZmluZSBwb3J0QkFTRV9UWVBFCWxvbmcNCiANCi0gICAgdHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSAgIFN0YWNrVHlwZV90Ow0KLSAgICB0eXBlZGVmIGxvbmcgICAgICAgICAgICAgQmFzZVR5cGVfdDsNCi0gICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nICAgIFVCYXNlVHlwZV90Ow0KK3R5cGVkZWYgcG9ydFNUQUNLX1RZUEUgU3RhY2tUeXBlX3Q7DQordHlwZWRlZiBsb25nIEJhc2VUeXBlX3Q7DQordHlwZWRlZiB1bnNpZ25lZCBsb25nIFVCYXNlVHlwZV90Ow0KIA0KLSAgICAjaWYgKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KLSAgICAgICAgdHlwZWRlZiB1aW50MTZfdCAgICAgVGlja1R5cGVfdDsNCi0gICAgICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAgICAgICAgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQotICAgICNlbHNlDQotICAgICAgICB0eXBlZGVmIHVpbnQzMl90ICAgICBUaWNrVHlwZV90Ow0KLSAgICAgICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICAgICAgICAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwNCisjaWYoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQorCXR5cGVkZWYgdWludDE2X3QgVGlja1R5cGVfdDsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggVGlja1R5cGVfdCApIDB4ZmZmZg0KKyNlbHNlDQorCXR5cGVkZWYgdWludDMyX3QgVGlja1R5cGVfdDsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTA0KIA0KLS8qIDMyLWJpdCB0aWNrIHR5cGUgb24gYSAzMi1iaXQgYXJjaGl0ZWN0dXJlLCBzbyByZWFkcyBvZiB0aGUgdGljayBjb3VudCBkbw0KLSAqIG5vdCBuZWVkIHRvIGJlIGd1YXJkZWQgd2l0aCBhIGNyaXRpY2FsIHNlY3Rpb24uICovDQotICAgICAgICAjZGVmaW5lIHBvcnRUSUNLX1RZUEVfSVNfQVRPTUlDICAgIDENCi0gICAgI2VuZGlmDQorCS8qIDMyLWJpdCB0aWNrIHR5cGUgb24gYSAzMi1iaXQgYXJjaGl0ZWN0dXJlLCBzbyByZWFkcyBvZiB0aGUgdGljayBjb3VudCBkbw0KKwlub3QgbmVlZCB0byBiZSBndWFyZGVkIHdpdGggYSBjcml0aWNhbCBzZWN0aW9uLiAqLw0KKwkjZGVmaW5lIHBvcnRUSUNLX1RZUEVfSVNfQVRPTUlDIDENCisjZW5kaWYNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogQXJjaGl0ZWN0dXJlIHNwZWNpZmljcy4gKi8NCi0gICAgI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RIICAgICAgICAgICAgICAgICAgICAgICAgICggLTEgKQ0KLSAgICAjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUyAgICAgICAgICAgICAgICAgICAgICAgKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCi0gICAgI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQgICAgICAgICAgICAgICAgICAgICAgIDQNCi0gICAgI2RlZmluZSBwb3J0Tk9QKCkgICAgX19hc20gdm9sYXRpbGUgKCAiIG5vcCAiICkNCi0gICAgI2RlZmluZSBwb3J0Q1JJVElDQUxfTkVTVElOR19JTl9UQ0IgICAgICAgICAgICAgIDENCi0gICAgI2RlZmluZSBwb3J0UkVTVE9SRV9GSVJTVF9UQVNLX1BSSU9SSVRZX0xFVkVMICAgIDENCisjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEgJCQkJCQkJKCAtMSApDQorI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMJCQkJCQkJKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCisjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVAkJCQkJCQk0DQorI2RlZmluZSBwb3J0Tk9QKCkJCQkJCQkJCQlfX2FzbSB2b2xhdGlsZSggIiBub3AgIiApDQorI2RlZmluZSBwb3J0Q1JJVElDQUxfTkVTVElOR19JTl9UQ0IJCQkJCTENCisjZGVmaW5lIHBvcnRSRVNUT1JFX0ZJUlNUX1RBU0tfUFJJT1JJVFlfTEVWRUwJCTENCiANCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQotICAgIHR5cGVkZWYgc3RydWN0IE1QVV9TRVRUSU5HUyB7IHVpbnQzMl90IHVsTm90VXNlZDsgfSB4TVBVX1NFVFRJTkdTOw0KK3R5cGVkZWYgc3RydWN0IE1QVV9TRVRUSU5HUyB7IHVpbnQzMl90IHVsTm90VXNlZDsgfSB4TVBVX1NFVFRJTkdTOw0KIA0KIC8qIERlZmluZSBhd2F5IHRoZSBpbnN0cnVjdGlvbiBmcm9tIHRoZSBSZXN0b3JlIENvbnRleHQgTWFjcm8uICovDQotICAgICNkZWZpbmUgcG9ydFBSSVZJTEVHRV9CSVQgICAgMHgwVUwNCisjZGVmaW5lIHBvcnRQUklWSUxFR0VfQklUCQkJCQkJCTB4MFVMDQogDQotICAgICNkZWZpbmUgcG9ydENDUE5fTUFTSyAgICAgICAgKCAweDAwMDAwMEZGVUwgKQ0KKyNkZWZpbmUgcG9ydENDUE5fTUFTSwkJCQkJCSggMHgwMDAwMDBGRlVMICkNCiANCi0gICAgZXh0ZXJuIHZvaWQgdlRhc2tFbnRlckNyaXRpY2FsKCB2b2lkICk7DQotICAgIGV4dGVybiB2b2lkIHZUYXNrRXhpdENyaXRpY2FsKCB2b2lkICk7DQotICAgICNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgICAgdlRhc2tFbnRlckNyaXRpY2FsKCkNCi0gICAgI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpICAgICB2VGFza0V4aXRDcml0aWNhbCgpDQorZXh0ZXJuIHZvaWQgdlRhc2tFbnRlckNyaXRpY2FsKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdlRhc2tFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCisjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpCQkJdlRhc2tFbnRlckNyaXRpY2FsKCkNCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkJCQkJdlRhc2tFeGl0Q3JpdGljYWwoKQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBDU0EgTWFuaXB1bGF0aW9uLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRDU0FfVE9fQUREUkVTUyggcENTQSApICAgICAgICAoICggdWludDMyX3QgKiApICggKCAoICggcENTQSApICYgMHgwMDBGMDAwMCApIDw8IDEyICkgfCAoICggKCBwQ1NBICkgJiAweDAwMDBGRkZGICkgPDwgNiApICkgKQ0KLSAgICAjZGVmaW5lIHBvcnRBRERSRVNTX1RPX0NTQSggcEFkZHJlc3MgKSAgICAoICggdWludDMyX3QgKSAoICggKCAoICggdWludDMyX3QgKSAoIHBBZGRyZXNzICkgKSAmIDB4RjAwMDAwMDAgKSA+PiAxMiApIHwgKCAoICggdWludDMyX3QgKSAoIHBBZGRyZXNzICkgJiAweDAwM0ZGRkMwICkgPj4gNiApICkgKQ0KKyNkZWZpbmUgcG9ydENTQV9UT19BRERSRVNTKCBwQ1NBICkJCQkoICggdWludDMyX3QgKiApKCAoICggKCBwQ1NBICkgJiAweDAwMEYwMDAwICkgPDwgMTIgKSB8ICggKCAoIHBDU0EgKSAmIDB4MDAwMEZGRkYgKSA8PCA2ICkgKSApDQorI2RlZmluZSBwb3J0QUREUkVTU19UT19DU0EoIHBBZGRyZXNzICkJCSggKCB1aW50MzJfdCApKCAoICggKCAodWludDMyX3QpKCBwQWRkcmVzcyApICkgJiAweEYwMDAwMDAwICkgPj4gMTIgKSB8ICggKCAoIHVpbnQzMl90ICkoIHBBZGRyZXNzICkgJiAweDAwM0ZGRkMwICkgPj4gNiApICkgKQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0gICAgI2RlZmluZSBwb3J0WUlFTEQoKSAgICAgICAgICAgICAgICAgICAgICAgX3N5c2NhbGwoIDAgKQ0KKyNkZWZpbmUgcG9ydFlJRUxEKCkJCQkJCQkJCV9zeXNjYWxsKCAwICkNCiAvKiBQb3J0IFJlc3RvcmUgaXMgaW1wbGljaXQgaW4gdGhlIHBsYXRmb3JtIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIHJldHVybmVkIGZyb20gdGhlIG9yaWdpbmFsIFBTVyBpcyBhdXRvbWF0aWNhbGx5IHJlcGxhY2VkLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRTWVNDQUxMX1RBU0tfWUlFTEQgICAgICAgIDANCi0gICAgI2RlZmluZSBwb3J0U1lTQ0FMTF9SQUlTRV9QUklPUklUWSAgICAxDQorI2RlZmluZSBwb3J0U1lTQ0FMTF9UQVNLX1lJRUxECQkJCQkwDQorI2RlZmluZSBwb3J0U1lTQ0FMTF9SQUlTRV9QUklPUklUWQkJCQkxDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIENyaXRpY2FsIHNlY3Rpb24gbWFuYWdlbWVudC4gKi8NCiANCiAvKiBTZXQgSUNSLkNDUE4gdG8gY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICB1aW50MzJfdCB1bElDUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgX2Rpc2FibGUoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHVsSUNSID0gX19NRkNSKCAkSUNSICk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogR2V0IGN1cnJlbnQgSUNSIHZhbHVlLiAqLyAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICB1bElDUiAmPSB+cG9ydENDUE5fTUFTSzsgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIGRvd24gbWFzayBiaXRzLiAqLyAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgdWxJQ1IgfD0gY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZOyAvKiBTZXQgbWFzayBiaXRzIHRvIHJlcXVpcmVkIHByaW9yaXR5IG1hc2suICovIFwNCi0gICAgICAgIF9tdGNyKCAkSUNSLCB1bElDUiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV3JpdGUgYmFjayB1cGRhdGVkIElDUi4gKi8gICAgICAgICAgICAgICAgICBcDQotICAgICAgICBfaXN5bmMoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgX2VuYWJsZSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgfQ0KKyNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpCXsJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQl1aW50MzJfdCB1bElDUjsJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQlfZGlzYWJsZSgpOwkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCXVsSUNSID0gX19NRkNSKCAkSUNSICk7IAkJLyogR2V0IGN1cnJlbnQgSUNSIHZhbHVlLiAqLwkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCXVsSUNSICY9IH5wb3J0Q0NQTl9NQVNLOwkvKiBDbGVhciBkb3duIG1hc2sgYml0cy4gKi8JCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJdWxJQ1IgfD0gY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZOyAvKiBTZXQgbWFzayBiaXRzIHRvIHJlcXVpcmVkIHByaW9yaXR5IG1hc2suICovCVwNCisJCQkJCQkJCQkJX210Y3IoICRJQ1IsIHVsSUNSICk7CQkvKiBXcml0ZSBiYWNrIHVwZGF0ZWQgSUNSLiAqLwkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCV9pc3luYygpOwkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCV9lbmFibGUoKTsJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCX0NCiANCiAvKiBDbGVhciBJQ1IuQ0NQTiB0byBhbGxvdyBhbGwgaW50ZXJydXB0IHByaW9yaXRpZXMuICovDQotICAgICNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHVpbnQzMl90IHVsSUNSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBfZGlzYWJsZSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgdWxJQ1IgPSBfX01GQ1IoICRJQ1IgKTsgIC8qIEdldCBjdXJyZW50IElDUiB2YWx1ZS4gKi8gIFwNCi0gICAgICAgIHVsSUNSICY9IH5wb3J0Q0NQTl9NQVNLOyAvKiBDbGVhciBkb3duIG1hc2sgYml0cy4gKi8gICBcDQotICAgICAgICBfbXRjciggJElDUiwgdWxJQ1IgKTsgICAgLyogV3JpdGUgYmFjayB1cGRhdGVkIElDUi4gKi8gXA0KLSAgICAgICAgX2lzeW5jKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIF9lbmFibGUoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIH0NCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpCQl7CQkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCXVpbnQzMl90IHVsSUNSOwkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQlfZGlzYWJsZSgpOwkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQl1bElDUiA9IF9fTUZDUiggJElDUiApOwkJLyogR2V0IGN1cnJlbnQgSUNSIHZhbHVlLiAqLwkJXA0KKwkJCQkJCQkJCQl1bElDUiAmPSB+cG9ydENDUE5fTUFTSzsJLyogQ2xlYXIgZG93biBtYXNrIGJpdHMuICovCQkJXA0KKwkJCQkJCQkJCQlfbXRjciggJElDUiwgdWxJQ1IgKTsJCS8qIFdyaXRlIGJhY2sgdXBkYXRlZCBJQ1IuICovCQlcDQorCQkJCQkJCQkJCV9pc3luYygpOwkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQlfZW5hYmxlKCk7CQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJfQ0KIA0KIC8qIFNldCBJQ1IuQ0NQTiB0byB1eFNhdmVkTWFza1ZhbHVlLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUiggdXhTYXZlZE1hc2tWYWx1ZSApICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICB1aW50MzJfdCB1bElDUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgX2Rpc2FibGUoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHVsSUNSID0gX19NRkNSKCAkSUNSICk7ICAgIC8qIEdldCBjdXJyZW50IElDUiB2YWx1ZS4gKi8gICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICB1bElDUiAmPSB+cG9ydENDUE5fTUFTSzsgICAvKiBDbGVhciBkb3duIG1hc2sgYml0cy4gKi8gICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgdWxJQ1IgfD0gdXhTYXZlZE1hc2tWYWx1ZTsgLyogU2V0IG1hc2sgYml0cyB0byBwcmV2aW91c2x5IHNhdmVkIG1hc2sgdmFsdWUuICovIFwNCi0gICAgICAgIF9tdGNyKCAkSUNSLCB1bElDUiApOyAgICAgIC8qIFdyaXRlIGJhY2sgdXBkYXRlZCBJQ1IuICovICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBfaXN5bmMoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgX2VuYWJsZSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgfQ0KKyNkZWZpbmUgcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCB1eFNhdmVkTWFza1ZhbHVlICkgCXsJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJdWludDMyX3QgdWxJQ1I7CQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCV9kaXNhYmxlKCk7CQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCXVsSUNSID0gX19NRkNSKCAkSUNSICk7CQkvKiBHZXQgY3VycmVudCBJQ1IgdmFsdWUuICovCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCXVsSUNSICY9IH5wb3J0Q0NQTl9NQVNLOwkvKiBDbGVhciBkb3duIG1hc2sgYml0cy4gKi8JCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCXVsSUNSIHw9IHV4U2F2ZWRNYXNrVmFsdWU7CS8qIFNldCBtYXNrIGJpdHMgdG8gcHJldmlvdXNseSBzYXZlZCBtYXNrIHZhbHVlLiAqLwkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJX210Y3IoICRJQ1IsIHVsSUNSICk7CQkvKiBXcml0ZSBiYWNrIHVwZGF0ZWQgSUNSLiAqLwkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQlfaXN5bmMoKTsJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJX2VuYWJsZSgpOwkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCX0NCiANCiANCiAvKiBTZXQgSUNSLkNDUE4gdG8gY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICovDQotICAgIGV4dGVybiB1aW50MzJfdCB1eFBvcnRTZXRJbnRlcnJ1cHRNYXNrRnJvbUlTUiggdm9pZCApOw0KLSAgICAjZGVmaW5lIHBvcnRTRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKSAgICAgICAgICAgICAgICAgdXhQb3J0U2V0SW50ZXJydXB0TWFza0Zyb21JU1IoKQ0KK2V4dGVybiB1aW50MzJfdCB1eFBvcnRTZXRJbnRlcnJ1cHRNYXNrRnJvbUlTUiggdm9pZCApOw0KKyNkZWZpbmUgcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpIAl1eFBvcnRTZXRJbnRlcnJ1cHRNYXNrRnJvbUlTUigpDQogDQogLyogUGVuZCBhIHByaW9yaXR5IDEgaW50ZXJydXB0LCB3aGljaCB3aWxsIHRha2UgY2FyZSBvZiB0aGUgY29udGV4dCBzd2l0Y2guICovDQotICAgICNkZWZpbmUgcG9ydFlJRUxEX0ZST01fSVNSKCB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4gKSAgICBpZiggeEhpZ2hlclByaW9yaXR5VGFza1dva2VuICE9IHBkRkFMU0UgKSB7IENQVV9TUkMwLmJpdHMuU0VUUiA9IDE7IF9pc3luYygpOyB9DQorI2RlZmluZSBwb3J0WUlFTERfRlJPTV9JU1IoIHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiApIAkJaWYoIHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiAhPSBwZEZBTFNFICkgewlDUFVfU1JDMC5iaXRzLlNFVFIgPSAxOyBfaXN5bmMoKTsgfQ0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBUYXNrIGZ1bmN0aW9uIG1hY3JvcyBhcyBkZXNjcmliZWQgb24gdGhlIEZyZWVSVE9TLm9yZyBXRUIgc2l0ZS4gKi8NCi0gICAgI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQotICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgICAgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyoNCiAgKiBQb3J0IHNwZWNpZmljIGNsZWFuIHVwIG1hY3JvIHJlcXVpcmVkIHRvIGZyZWUgdGhlIENTQXMgdGhhdCB3ZXJlIGNvbnN1bWVkIGJ5DQogICogYSB0YXNrIHRoYXQgaGFzIHNpbmNlIGJlZW4gZGVsZXRlZC4NCiAgKi8NCi0gICAgdm9pZCB2UG9ydFJlY2xhaW1DU0EoIHVpbnQzMl90ICogcHhUQ0IgKTsNCi0gICAgI2RlZmluZSBwb3J0Q0xFQU5fVVBfVENCKCBweFRDQiApICAgIHZQb3J0UmVjbGFpbUNTQSggKCB1aW50MzJfdCAqICkgKCBweFRDQiApICkNCit2b2lkIHZQb3J0UmVjbGFpbUNTQSggdWludDMyX3QgKnB4VENCICk7DQorI2RlZmluZSBwb3J0Q0xFQU5fVVBfVENCKCBweFRDQiApCQl2UG9ydFJlY2xhaW1DU0EoICggdWludDMyX3QgKiApICggcHhUQ0IgKSApDQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgfQ0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQogDQogI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvR0NDL1RyaUNvcmVfMTc4Mi9wb3J0dHJhcC5jIGIvcG9ydGFibGUvR0NDL1RyaUNvcmVfMTc4Mi9wb3J0dHJhcC5jCmluZGV4IDk0ZTVlYWUuLjAzOTMyMWIgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0dDQy9UcmlDb3JlXzE3ODIvcG9ydHRyYXAuYworKysgYi9wb3J0YWJsZS9HQ0MvVHJpQ29yZV8xNzgyL3BvcnR0cmFwLmMKQEAgLTM3LDcgKzM3LDcgQEAKIC8qDQogICogVGhpcyByZWZlcmVuY2UgaXMgcmVxdWlyZWQgYnkgdGhlIFNhdmUvUmVzdG9yZSBDb250ZXh0IE1hY3Jvcy4NCiAgKi8NCi1leHRlcm4gdm9sYXRpbGUgdWludDMyX3QgKiBweEN1cnJlbnRUQ0I7DQorZXh0ZXJuIHZvbGF0aWxlIHVpbnQzMl90ICpweEN1cnJlbnRUQ0I7DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyoNCkBAIC01MCw1NyArNTAsNTcgQEAKICAqLw0KIA0KIC8qIFRoZSBUcmFwIENsYXNzZXMuICovDQotI2RlZmluZSBwb3J0TU1VX1RSQVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwDQotI2RlZmluZSBwb3J0SVBUX1RSQVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxDQotI2RlZmluZSBwb3J0SUVfVFJBUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyDQotI2RlZmluZSBwb3J0Q01fVFJBUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzDQotI2RlZmluZSBwb3J0U0JQX1RSQVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0DQotI2RlZmluZSBwb3J0QVNTRVJUX1RSQVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1DQotI2RlZmluZSBwb3J0Tk1JX1RSQVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3DQorI2RlZmluZSBwb3J0TU1VX1RSQVAJCQkJCQkJCQkJMA0KKyNkZWZpbmUgcG9ydElQVF9UUkFQCQkJCQkJCQkJCTENCisjZGVmaW5lIHBvcnRJRV9UUkFQCQkJCQkJCQkJCQkyDQorI2RlZmluZSBwb3J0Q01fVFJBUAkJCQkJCQkJCQkJMw0KKyNkZWZpbmUgcG9ydFNCUF9UUkFQCQkJCQkJCQkJCTQNCisjZGVmaW5lIHBvcnRBU1NFUlRfVFJBUAkJCQkJCQkJCQk1DQorI2RlZmluZSBwb3J0Tk1JX1RSQVAJCQkJCQkJCQkJNw0KIA0KIC8qIE1NVSBUcmFwIElkZW50aWZpY2F0aW9ucy4gKi8NCi0jZGVmaW5lIHBvcnRUSU5fTU1VX1ZJUlRVQUxfQUREUkVTU19GSUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDANCi0jZGVmaW5lIHBvcnRUSU5fTU1VX1ZJUlRVQUxfQUREUkVTU19QUk9URUNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgIDENCisjZGVmaW5lIHBvcnRUSU5fTU1VX1ZJUlRVQUxfQUREUkVTU19GSUxMCQkJCQkwDQorI2RlZmluZSBwb3J0VElOX01NVV9WSVJUVUFMX0FERFJFU1NfUFJPVEVDVElPTgkJCQkxDQogDQogLyogSW50ZXJuYWwgUHJvdGVjdGlvbiBUcmFwIElkZW50aWZpY2F0aW9ucy4gKi8NCi0jZGVmaW5lIHBvcnRUSU5fSVBUX1BSSVZJTElHRURfSU5TVFJVQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDENCi0jZGVmaW5lIHBvcnRUSU5fSVBUX01FTU9SWV9QUk9URUNUSU9OX1JFQUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDINCi0jZGVmaW5lIHBvcnRUSU5fSVBUX01FTU9SWV9QUk9URUNUSU9OX1dSSVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMNCi0jZGVmaW5lIHBvcnRUSU5fSVBUX01FTU9SWV9QUk9URUNUSU9OX0VYRUNVVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDQNCi0jZGVmaW5lIHBvcnRUSU5fSVBUX01FTU9SWV9QUk9URUNUSU9OX1BFUklQSEVSQUxfQUNDRVNTICAgICAgICAgICAgICAgICAgIDUNCi0jZGVmaW5lIHBvcnRUSU5fSVBUX01FTU9SWV9QUk9URUNUSU9OX05VTExfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgIDYNCi0jZGVmaW5lIHBvcnRUSU5fSVBUX01FTU9SWV9QUk9URUNUSU9OX0dMT0JBTF9SRUdJU1RFUl9XUklURV9QUk9URUNUSU9OICAgIDcNCisjZGVmaW5lIHBvcnRUSU5fSVBUX1BSSVZJTElHRURfSU5TVFJVQ1RJT04JCQkJCTENCisjZGVmaW5lIHBvcnRUSU5fSVBUX01FTU9SWV9QUk9URUNUSU9OX1JFQUQJCQkJCTINCisjZGVmaW5lIHBvcnRUSU5fSVBUX01FTU9SWV9QUk9URUNUSU9OX1dSSVRFCQkJCQkzDQorI2RlZmluZSBwb3J0VElOX0lQVF9NRU1PUllfUFJPVEVDVElPTl9FWEVDVVRJT04JCQkJNA0KKyNkZWZpbmUgcG9ydFRJTl9JUFRfTUVNT1JZX1BST1RFQ1RJT05fUEVSSVBIRVJBTF9BQ0NFU1MJCTUNCisjZGVmaW5lIHBvcnRUSU5fSVBUX01FTU9SWV9QUk9URUNUSU9OX05VTExfQUREUkVTUwkJCTYNCisjZGVmaW5lIHBvcnRUSU5fSVBUX01FTU9SWV9QUk9URUNUSU9OX0dMT0JBTF9SRUdJU1RFUl9XUklURV9QUk9URUNUSU9OCTcNCiANCiAvKiBJbnN0cnVjdGlvbiBFcnJvciBUcmFwIElkZW50aWZpY2F0aW9ucy4gKi8NCi0jZGVmaW5lIHBvcnRUSU5fSUVfSUxMRUdBTF9PUENPREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDENCi0jZGVmaW5lIHBvcnRUSU5fSUVfVU5JTVBMRU1FTlRFRF9PUENPREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDINCi0jZGVmaW5lIHBvcnRUSU5fSUVfSU5WQUxJRF9PUEVSQU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMNCi0jZGVmaW5lIHBvcnRUSU5fSUVfREFUQV9BRERSRVNTX0FMSUdOTUVOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQNCi0jZGVmaW5lIHBvcnRUSU5fSUVfSU5WQUxJRF9MT0NBTF9NRU1PUllfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgIDUNCisjZGVmaW5lIHBvcnRUSU5fSUVfSUxMRUdBTF9PUENPREUJCQkJCQkJMQ0KKyNkZWZpbmUgcG9ydFRJTl9JRV9VTklNUExFTUVOVEVEX09QQ09ERQkJCQkJCTINCisjZGVmaW5lIHBvcnRUSU5fSUVfSU5WQUxJRF9PUEVSQU5ECQkJCQkJCTMNCisjZGVmaW5lIHBvcnRUSU5fSUVfREFUQV9BRERSRVNTX0FMSUdOTUVOVAkJCQkJNA0KKyNkZWZpbmUgcG9ydFRJTl9JRV9JTlZBTElEX0xPQ0FMX01FTU9SWV9BRERSRVNTCQkJCTUNCiANCiAvKiBDb250ZXh0IE1hbmFnZW1lbnQgVHJhcCBJZGVudGlmaWNhdGlvbnMuICovDQotI2RlZmluZSBwb3J0VElOX0NNX0ZSRUVfQ09OVEVYVF9MSVNUX0RFUExFVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxDQotI2RlZmluZSBwb3J0VElOX0NNX0NBTExfREVQVEhfT1ZFUkZMT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyDQotI2RlZmluZSBwb3J0VElOX0NNX0NBTExfREVQVEhfVU5ERUZMT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzDQotI2RlZmluZSBwb3J0VElOX0NNX0ZSRUVfQ09OVEVYVF9MSVNUX1VOREVSRkxPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICA0DQotI2RlZmluZSBwb3J0VElOX0NNX0NBTExfU1RBQ0tfVU5ERVJGTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1DQotI2RlZmluZSBwb3J0VElOX0NNX0NPTlRFWFRfVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2DQotI2RlZmluZSBwb3J0VElOX0NNX05FU1RJTkdfRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3DQorI2RlZmluZSBwb3J0VElOX0NNX0ZSRUVfQ09OVEVYVF9MSVNUX0RFUExFVElPTgkJCQkxDQorI2RlZmluZSBwb3J0VElOX0NNX0NBTExfREVQVEhfT1ZFUkZMT1cJCQkJCQkyDQorI2RlZmluZSBwb3J0VElOX0NNX0NBTExfREVQVEhfVU5ERUZMT1cJCQkJCQkzDQorI2RlZmluZSBwb3J0VElOX0NNX0ZSRUVfQ09OVEVYVF9MSVNUX1VOREVSRkxPVwkJCQk0DQorI2RlZmluZSBwb3J0VElOX0NNX0NBTExfU1RBQ0tfVU5ERVJGTE9XCQkJCQkJNQ0KKyNkZWZpbmUgcG9ydFRJTl9DTV9DT05URVhUX1RZUEUJCQkJCQkJCTYNCisjZGVmaW5lIHBvcnRUSU5fQ01fTkVTVElOR19FUlJPUgkJCQkJCQk3DQogDQogLyogU3lzdGVtIEJ1cyBhbmQgUGVyaXBoZXJhbHMgVHJhcCBJZGVudGlmaWNhdGlvbnMuICovDQotI2RlZmluZSBwb3J0VElOX1NCUF9QUk9HUkFNX0ZFVENIX1NZTkNIUk9OT1VTX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAxDQotI2RlZmluZSBwb3J0VElOX1NCUF9EQVRBX0FDQ0VTU19TWU5DSFJPTk9VU19FUlJPUiAgICAgICAgICAgICAgICAgICAgICAgICAyDQotI2RlZmluZSBwb3J0VElOX1NCUF9EQVRBX0FDQ0VTU19BU1lOQ0hST05PVVNfRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAzDQotI2RlZmluZSBwb3J0VElOX1NCUF9DT1BST0NFU1NPUl9UUkFQX0FTWU5DSFJPTk9VU19FUlJPUiAgICAgICAgICAgICAgICAgICA0DQotI2RlZmluZSBwb3J0VElOX1NCUF9QUk9HUkFNX01FTU9SWV9JTlRFR1JJVFlfRVJST1IgICAgICAgICAgICAgICAgICAgICAgICA1DQotI2RlZmluZSBwb3J0VElOX1NCUF9EQVRBX01FTU9SWV9JTlRFR1JJVFlfRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAgICA2DQorI2RlZmluZSBwb3J0VElOX1NCUF9QUk9HUkFNX0ZFVENIX1NZTkNIUk9OT1VTX0VSUk9SCQkJMQ0KKyNkZWZpbmUgcG9ydFRJTl9TQlBfREFUQV9BQ0NFU1NfU1lOQ0hST05PVVNfRVJST1IJCQkyDQorI2RlZmluZSBwb3J0VElOX1NCUF9EQVRBX0FDQ0VTU19BU1lOQ0hST05PVVNfRVJST1IJCQkzDQorI2RlZmluZSBwb3J0VElOX1NCUF9DT1BST0NFU1NPUl9UUkFQX0FTWU5DSFJPTk9VU19FUlJPUgkJNA0KKyNkZWZpbmUgcG9ydFRJTl9TQlBfUFJPR1JBTV9NRU1PUllfSU5URUdSSVRZX0VSUk9SCQkJNQ0KKyNkZWZpbmUgcG9ydFRJTl9TQlBfREFUQV9NRU1PUllfSU5URUdSSVRZX0VSUk9SCQkJCTYNCiANCiAvKiBBc3NlcnRpb24gVHJhcCBJZGVudGlmaWNhdGlvbnMuICovDQotI2RlZmluZSBwb3J0VElOX0FTU0VSVF9BUklUSE1FVElDX09WRVJGTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxDQotI2RlZmluZSBwb3J0VElOX0FTU0VSVF9TVElDS1lfQVJJVEhNRVRJQ19PVkVSRkxPVyAgICAgICAgICAgICAgICAgICAgICAgICAyDQorI2RlZmluZSBwb3J0VElOX0FTU0VSVF9BUklUSE1FVElDX09WRVJGTE9XCQkJCQkxDQorI2RlZmluZSBwb3J0VElOX0FTU0VSVF9TVElDS1lfQVJJVEhNRVRJQ19PVkVSRkxPVwkJCTINCiANCiAvKiBOb24tbWFza2FibGUgSW50ZXJydXB0IFRyYXAgSWRlbnRpZmljYXRpb25zLiAqLw0KLSNkZWZpbmUgcG9ydFRJTl9OTUlfTk9OX01BU0tBQkxFX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMA0KKyNkZWZpbmUgcG9ydFRJTl9OTUlfTk9OX01BU0tBQkxFX0lOVEVSUlVQVAkJCQkJMA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZNTVVUcmFwKCBpbnQgaVRyYXBJZGVudGlmaWNhdGlvbiApIF9fYXR0cmlidXRlX18oICggbG9uZ2NhbGwsIHdlYWsgKSApOw0KQEAgLTExNCwxNjggKzExNCwxNjggQEAKIA0KIHZvaWQgdlRyYXBJbnN0YWxsSGFuZGxlcnMoIHZvaWQgKQ0KIHsNCi0gICAgaWYoIDAgPT0gX2luc3RhbGxfdHJhcF9oYW5kbGVyKCBwb3J0TU1VX1RSQVAsIHZNTVVUcmFwICkgKQ0KLSAgICB7DQotICAgICAgICBfZGVidWcoKTsNCi0gICAgfQ0KKwlpZiggMCA9PSBfaW5zdGFsbF90cmFwX2hhbmRsZXIgKCBwb3J0TU1VX1RSQVAsIHZNTVVUcmFwICkgKQ0KKwl7DQorCQlfZGVidWcoKTsNCisJfQ0KIA0KLSAgICBpZiggMCA9PSBfaW5zdGFsbF90cmFwX2hhbmRsZXIoIHBvcnRJUFRfVFJBUCwgdkludGVybmFsUHJvdGVjdGlvblRyYXAgKSApDQotICAgIHsNCi0gICAgICAgIF9kZWJ1ZygpOw0KLSAgICB9DQorCWlmKCAwID09IF9pbnN0YWxsX3RyYXBfaGFuZGxlciAoIHBvcnRJUFRfVFJBUCwgdkludGVybmFsUHJvdGVjdGlvblRyYXAgKSApDQorCXsNCisJCV9kZWJ1ZygpOw0KKwl9DQogDQotICAgIGlmKCAwID09IF9pbnN0YWxsX3RyYXBfaGFuZGxlciggcG9ydElFX1RSQVAsIHZJbnN0cnVjdGlvbkVycm9yVHJhcCApICkNCi0gICAgew0KLSAgICAgICAgX2RlYnVnKCk7DQotICAgIH0NCisJaWYoIDAgPT0gX2luc3RhbGxfdHJhcF9oYW5kbGVyICggcG9ydElFX1RSQVAsIHZJbnN0cnVjdGlvbkVycm9yVHJhcCApICkNCisJew0KKwkJX2RlYnVnKCk7DQorCX0NCiANCi0gICAgaWYoIDAgPT0gX2luc3RhbGxfdHJhcF9oYW5kbGVyKCBwb3J0Q01fVFJBUCwgdkNvbnRleHRNYW5hZ2VtZW50VHJhcCApICkNCi0gICAgew0KLSAgICAgICAgX2RlYnVnKCk7DQotICAgIH0NCisJaWYoIDAgPT0gX2luc3RhbGxfdHJhcF9oYW5kbGVyICggcG9ydENNX1RSQVAsIHZDb250ZXh0TWFuYWdlbWVudFRyYXAgKSApDQorCXsNCisJCV9kZWJ1ZygpOw0KKwl9DQogDQotICAgIGlmKCAwID09IF9pbnN0YWxsX3RyYXBfaGFuZGxlciggcG9ydFNCUF9UUkFQLCB2U3lzdGVtQnVzQW5kUGVyaXBoZXJhbHNUcmFwICkgKQ0KLSAgICB7DQotICAgICAgICBfZGVidWcoKTsNCi0gICAgfQ0KKwlpZiggMCA9PSBfaW5zdGFsbF90cmFwX2hhbmRsZXIgKCBwb3J0U0JQX1RSQVAsIHZTeXN0ZW1CdXNBbmRQZXJpcGhlcmFsc1RyYXAgKSApDQorCXsNCisJCV9kZWJ1ZygpOw0KKwl9DQogDQotICAgIGlmKCAwID09IF9pbnN0YWxsX3RyYXBfaGFuZGxlciggcG9ydEFTU0VSVF9UUkFQLCB2QXNzZXJ0aW9uVHJhcCApICkNCi0gICAgew0KLSAgICAgICAgX2RlYnVnKCk7DQotICAgIH0NCisJaWYoIDAgPT0gX2luc3RhbGxfdHJhcF9oYW5kbGVyICggcG9ydEFTU0VSVF9UUkFQLCB2QXNzZXJ0aW9uVHJhcCApICkNCisJew0KKwkJX2RlYnVnKCk7DQorCX0NCiANCi0gICAgaWYoIDAgPT0gX2luc3RhbGxfdHJhcF9oYW5kbGVyKCBwb3J0Tk1JX1RSQVAsIHZOb25NYXNrYWJsZUludGVycnVwdFRyYXAgKSApDQotICAgIHsNCi0gICAgICAgIF9kZWJ1ZygpOw0KLSAgICB9DQorCWlmKCAwID09IF9pbnN0YWxsX3RyYXBfaGFuZGxlciAoIHBvcnROTUlfVFJBUCwgdk5vbk1hc2thYmxlSW50ZXJydXB0VHJhcCApICkNCisJew0KKwkJX2RlYnVnKCk7DQorCX0NCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogdm9pZCB2TU1VVHJhcCggaW50IGlUcmFwSWRlbnRpZmljYXRpb24gKQ0KIHsNCi0gICAgc3dpdGNoKCBpVHJhcElkZW50aWZpY2F0aW9uICkNCi0gICAgew0KLSAgICAgICAgY2FzZSBwb3J0VElOX01NVV9WSVJUVUFMX0FERFJFU1NfRklMTDoNCi0gICAgICAgIGNhc2UgcG9ydFRJTl9NTVVfVklSVFVBTF9BRERSRVNTX1BST1RFQ1RJT046DQotICAgICAgICBkZWZhdWx0Og0KLSAgICAgICAgICAgIF9kZWJ1ZygpOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICB9DQorCXN3aXRjaCggaVRyYXBJZGVudGlmaWNhdGlvbiApDQorCXsNCisJY2FzZSBwb3J0VElOX01NVV9WSVJUVUFMX0FERFJFU1NfRklMTDoNCisJY2FzZSBwb3J0VElOX01NVV9WSVJUVUFMX0FERFJFU1NfUFJPVEVDVElPTjoNCisJZGVmYXVsdDoNCisJCV9kZWJ1ZygpOw0KKwkJYnJlYWs7DQorCX0NCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdkludGVybmFsUHJvdGVjdGlvblRyYXAoIGludCBpVHJhcElkZW50aWZpY2F0aW9uICkNCiB7DQotICAgIC8qIERlbGliZXJhdGUgZmFsbCB0aHJvdWdoIHRvIGRlZmF1bHQuICovDQotICAgIHN3aXRjaCggaVRyYXBJZGVudGlmaWNhdGlvbiApDQotICAgIHsNCi0gICAgICAgIGNhc2UgcG9ydFRJTl9JUFRfUFJJVklMSUdFRF9JTlNUUlVDVElPTjoNCi0gICAgICAgIC8qIEluc3RydWN0aW9uIGlzIG5vdCBhbGxvd2VkIGF0IGN1cnJlbnQgZXhlY3V0aW9uIGxldmVsLCBlZyBESVNBQkxFIGF0IFVzZXItMC4gKi8NCisJLyogRGVsaWJlcmF0ZSBmYWxsIHRocm91Z2ggdG8gZGVmYXVsdC4gKi8NCisJc3dpdGNoKCBpVHJhcElkZW50aWZpY2F0aW9uICkNCisJew0KKwkJY2FzZSBwb3J0VElOX0lQVF9QUklWSUxJR0VEX0lOU1RSVUNUSU9OOg0KKwkJCS8qIEluc3RydWN0aW9uIGlzIG5vdCBhbGxvd2VkIGF0IGN1cnJlbnQgZXhlY3V0aW9uIGxldmVsLCBlZyBESVNBQkxFIGF0IFVzZXItMC4gKi8NCiANCi0gICAgICAgIGNhc2UgcG9ydFRJTl9JUFRfTUVNT1JZX1BST1RFQ1RJT05fUkVBRDoNCi0gICAgICAgIC8qIExvYWQgd29yZCB1c2luZyBpbnZhbGlkIGFkZHJlc3MuICovDQotDQotICAgICAgICBjYXNlIHBvcnRUSU5fSVBUX01FTU9SWV9QUk9URUNUSU9OX1dSSVRFOg0KLSAgICAgICAgLyogU3RvcmUgV29yZCB1c2luZyBpbnZhbGlkIGFkZHJlc3MuICovDQotDQotICAgICAgICBjYXNlIHBvcnRUSU5fSVBUX01FTU9SWV9QUk9URUNUSU9OX0VYRUNVVElPTjoNCi0gICAgICAgIC8qIFBDIGp1bXBlZCB0byBhbiBhZGRyZXNzIG91dHNpZGUgb2YgdGhlIHZhbGlkIHJhbmdlLiAqLw0KLQ0KLSAgICAgICAgY2FzZSBwb3J0VElOX0lQVF9NRU1PUllfUFJPVEVDVElPTl9QRVJJUEhFUkFMX0FDQ0VTUzoNCi0gICAgICAgIC8qIEFjY2VzcyB0byBhIHBlcmlwaGVyYWwgZGVuaWVkIGF0IGN1cnJlbnQgZXhlY3V0aW9uIGxldmVsLiAqLw0KLQ0KLSAgICAgICAgY2FzZSBwb3J0VElOX0lQVF9NRU1PUllfUFJPVEVDVElPTl9OVUxMX0FERFJFU1M6DQotICAgICAgICAvKiBOVUxMIFBvaW50ZXIuICovDQotDQotICAgICAgICBjYXNlIHBvcnRUSU5fSVBUX01FTU9SWV9QUk9URUNUSU9OX0dMT0JBTF9SRUdJU1RFUl9XUklURV9QUk9URUNUSU9OOg0KLSAgICAgICAgLyogVHJpZWQgdG8gbW9kaWZ5IGEgZ2xvYmFsIGFkZHJlc3MgcG9pbnRlciByZWdpc3Rlci4gKi8NCi0NCi0gICAgICAgIGRlZmF1bHQ6DQotDQotICAgICAgICAgICAgcHhDdXJyZW50VENCWyAwIF0gPSBfX01GQ1IoICRQQ1hJICk7DQotICAgICAgICAgICAgX2RlYnVnKCk7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgIH0NCisJCWNhc2UgcG9ydFRJTl9JUFRfTUVNT1JZX1BST1RFQ1RJT05fUkVBRDoNCisJCQkvKiBMb2FkIHdvcmQgdXNpbmcgaW52YWxpZCBhZGRyZXNzLiAqLw0KKwkJCQ0KKwkJY2FzZSBwb3J0VElOX0lQVF9NRU1PUllfUFJPVEVDVElPTl9XUklURToNCisJCQkvKiBTdG9yZSBXb3JkIHVzaW5nIGludmFsaWQgYWRkcmVzcy4gKi8NCisJCQkNCisJCWNhc2UgcG9ydFRJTl9JUFRfTUVNT1JZX1BST1RFQ1RJT05fRVhFQ1VUSU9OOg0KKwkJCS8qIFBDIGp1bXBlZCB0byBhbiBhZGRyZXNzIG91dHNpZGUgb2YgdGhlIHZhbGlkIHJhbmdlLiAqLw0KKwkJCQ0KKwkJY2FzZSBwb3J0VElOX0lQVF9NRU1PUllfUFJPVEVDVElPTl9QRVJJUEhFUkFMX0FDQ0VTUzoNCisJCQkvKiBBY2Nlc3MgdG8gYSBwZXJpcGhlcmFsIGRlbmllZCBhdCBjdXJyZW50IGV4ZWN1dGlvbiBsZXZlbC4gKi8NCisJCQkNCisJCWNhc2UgcG9ydFRJTl9JUFRfTUVNT1JZX1BST1RFQ1RJT05fTlVMTF9BRERSRVNTOg0KKwkJCS8qIE5VTEwgUG9pbnRlci4gKi8NCisJCQkNCisJCWNhc2UgcG9ydFRJTl9JUFRfTUVNT1JZX1BST1RFQ1RJT05fR0xPQkFMX1JFR0lTVEVSX1dSSVRFX1BST1RFQ1RJT046DQorCQkJLyogVHJpZWQgdG8gbW9kaWZ5IGEgZ2xvYmFsIGFkZHJlc3MgcG9pbnRlciByZWdpc3Rlci4gKi8NCisJCQkNCisJCWRlZmF1bHQ6DQorCQkNCisJCQlweEN1cnJlbnRUQ0JbIDAgXSA9IF9fTUZDUiggJFBDWEkgKTsNCisJCQlfZGVidWcoKTsNCisJCQlicmVhazsNCisJfQ0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogdm9pZCB2SW5zdHJ1Y3Rpb25FcnJvclRyYXAoIGludCBpVHJhcElkZW50aWZpY2F0aW9uICkNCiB7DQotICAgIC8qIERlbGliZXJhdGUgZmFsbCB0aHJvdWdoIHRvIGRlZmF1bHQuICovDQotICAgIHN3aXRjaCggaVRyYXBJZGVudGlmaWNhdGlvbiApDQotICAgIHsNCi0gICAgICAgIGNhc2UgcG9ydFRJTl9JRV9JTExFR0FMX09QQ09ERToNCi0gICAgICAgIGNhc2UgcG9ydFRJTl9JRV9VTklNUExFTUVOVEVEX09QQ09ERToNCi0gICAgICAgIGNhc2UgcG9ydFRJTl9JRV9JTlZBTElEX09QRVJBTkQ6DQotICAgICAgICBjYXNlIHBvcnRUSU5fSUVfREFUQV9BRERSRVNTX0FMSUdOTUVOVDoNCi0gICAgICAgIGNhc2UgcG9ydFRJTl9JRV9JTlZBTElEX0xPQ0FMX01FTU9SWV9BRERSRVNTOg0KLSAgICAgICAgZGVmYXVsdDoNCi0gICAgICAgICAgICBfZGVidWcoKTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgfQ0KKwkvKiBEZWxpYmVyYXRlIGZhbGwgdGhyb3VnaCB0byBkZWZhdWx0LiAqLw0KKwlzd2l0Y2goIGlUcmFwSWRlbnRpZmljYXRpb24gKQ0KKwl7DQorCQljYXNlIHBvcnRUSU5fSUVfSUxMRUdBTF9PUENPREU6DQorCQljYXNlIHBvcnRUSU5fSUVfVU5JTVBMRU1FTlRFRF9PUENPREU6DQorCQljYXNlIHBvcnRUSU5fSUVfSU5WQUxJRF9PUEVSQU5EOg0KKwkJY2FzZSBwb3J0VElOX0lFX0RBVEFfQUREUkVTU19BTElHTk1FTlQ6DQorCQljYXNlIHBvcnRUSU5fSUVfSU5WQUxJRF9MT0NBTF9NRU1PUllfQUREUkVTUzoNCisJCWRlZmF1bHQ6DQorCQkJX2RlYnVnKCk7DQorCQkJYnJlYWs7DQorCX0NCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdkNvbnRleHRNYW5hZ2VtZW50VHJhcCggaW50IGlUcmFwSWRlbnRpZmljYXRpb24gKQ0KIHsNCi0gICAgLyogRGVsaWJlcmF0ZSBmYWxsIHRocm91Z2ggdG8gZGVmYXVsdC4gKi8NCi0gICAgc3dpdGNoKCBpVHJhcElkZW50aWZpY2F0aW9uICkNCi0gICAgew0KLSAgICAgICAgY2FzZSBwb3J0VElOX0NNX0ZSRUVfQ09OVEVYVF9MSVNUX0RFUExFVElPTjoNCi0gICAgICAgIGNhc2UgcG9ydFRJTl9DTV9DQUxMX0RFUFRIX09WRVJGTE9XOg0KLSAgICAgICAgY2FzZSBwb3J0VElOX0NNX0NBTExfREVQVEhfVU5ERUZMT1c6DQotICAgICAgICBjYXNlIHBvcnRUSU5fQ01fRlJFRV9DT05URVhUX0xJU1RfVU5ERVJGTE9XOg0KLSAgICAgICAgY2FzZSBwb3J0VElOX0NNX0NBTExfU1RBQ0tfVU5ERVJGTE9XOg0KLSAgICAgICAgY2FzZSBwb3J0VElOX0NNX0NPTlRFWFRfVFlQRToNCi0gICAgICAgIGNhc2UgcG9ydFRJTl9DTV9ORVNUSU5HX0VSUk9SOg0KLSAgICAgICAgZGVmYXVsdDoNCi0gICAgICAgICAgICBfZGVidWcoKTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgfQ0KKwkvKiBEZWxpYmVyYXRlIGZhbGwgdGhyb3VnaCB0byBkZWZhdWx0LiAqLw0KKwlzd2l0Y2goIGlUcmFwSWRlbnRpZmljYXRpb24gKQ0KKwl7DQorCQljYXNlIHBvcnRUSU5fQ01fRlJFRV9DT05URVhUX0xJU1RfREVQTEVUSU9OOg0KKwkJY2FzZSBwb3J0VElOX0NNX0NBTExfREVQVEhfT1ZFUkZMT1c6DQorCQljYXNlIHBvcnRUSU5fQ01fQ0FMTF9ERVBUSF9VTkRFRkxPVzoNCisJCWNhc2UgcG9ydFRJTl9DTV9GUkVFX0NPTlRFWFRfTElTVF9VTkRFUkZMT1c6DQorCQljYXNlIHBvcnRUSU5fQ01fQ0FMTF9TVEFDS19VTkRFUkZMT1c6DQorCQljYXNlIHBvcnRUSU5fQ01fQ09OVEVYVF9UWVBFOg0KKwkJY2FzZSBwb3J0VElOX0NNX05FU1RJTkdfRVJST1I6DQorCQlkZWZhdWx0Og0KKwkJCV9kZWJ1ZygpOw0KKwkJCWJyZWFrOw0KKwl9DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZTeXN0ZW1CdXNBbmRQZXJpcGhlcmFsc1RyYXAoIGludCBpVHJhcElkZW50aWZpY2F0aW9uICkNCiB7DQotICAgIC8qIERlbGliZXJhdGUgZmFsbCB0aHJvdWdoIHRvIGRlZmF1bHQuICovDQotICAgIHN3aXRjaCggaVRyYXBJZGVudGlmaWNhdGlvbiApDQotICAgIHsNCi0gICAgICAgIGNhc2UgcG9ydFRJTl9TQlBfUFJPR1JBTV9GRVRDSF9TWU5DSFJPTk9VU19FUlJPUjoNCi0gICAgICAgIGNhc2UgcG9ydFRJTl9TQlBfREFUQV9BQ0NFU1NfU1lOQ0hST05PVVNfRVJST1I6DQotICAgICAgICBjYXNlIHBvcnRUSU5fU0JQX0RBVEFfQUNDRVNTX0FTWU5DSFJPTk9VU19FUlJPUjoNCi0gICAgICAgIGNhc2UgcG9ydFRJTl9TQlBfQ09QUk9DRVNTT1JfVFJBUF9BU1lOQ0hST05PVVNfRVJST1I6DQotICAgICAgICBjYXNlIHBvcnRUSU5fU0JQX1BST0dSQU1fTUVNT1JZX0lOVEVHUklUWV9FUlJPUjoNCi0gICAgICAgIGNhc2UgcG9ydFRJTl9TQlBfREFUQV9NRU1PUllfSU5URUdSSVRZX0VSUk9SOg0KLSAgICAgICAgZGVmYXVsdDoNCi0gICAgICAgICAgICBfZGVidWcoKTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgfQ0KKwkvKiBEZWxpYmVyYXRlIGZhbGwgdGhyb3VnaCB0byBkZWZhdWx0LiAqLw0KKwlzd2l0Y2goIGlUcmFwSWRlbnRpZmljYXRpb24gKQ0KKwl7DQorCQljYXNlIHBvcnRUSU5fU0JQX1BST0dSQU1fRkVUQ0hfU1lOQ0hST05PVVNfRVJST1I6DQorCQljYXNlIHBvcnRUSU5fU0JQX0RBVEFfQUNDRVNTX1NZTkNIUk9OT1VTX0VSUk9SOg0KKwkJY2FzZSBwb3J0VElOX1NCUF9EQVRBX0FDQ0VTU19BU1lOQ0hST05PVVNfRVJST1I6DQorCQljYXNlIHBvcnRUSU5fU0JQX0NPUFJPQ0VTU09SX1RSQVBfQVNZTkNIUk9OT1VTX0VSUk9SOg0KKwkJY2FzZSBwb3J0VElOX1NCUF9QUk9HUkFNX01FTU9SWV9JTlRFR1JJVFlfRVJST1I6DQorCQljYXNlIHBvcnRUSU5fU0JQX0RBVEFfTUVNT1JZX0lOVEVHUklUWV9FUlJPUjoNCisJCWRlZmF1bHQ6DQorCQkJX2RlYnVnKCk7DQorCQkJYnJlYWs7DQorCX0NCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdkFzc2VydGlvblRyYXAoIGludCBpVHJhcElkZW50aWZpY2F0aW9uICkNCiB7DQotICAgIC8qIERlbGliZXJhdGUgZmFsbCB0aHJvdWdoIHRvIGRlZmF1bHQuICovDQotICAgIHN3aXRjaCggaVRyYXBJZGVudGlmaWNhdGlvbiApDQotICAgIHsNCi0gICAgICAgIGNhc2UgcG9ydFRJTl9BU1NFUlRfQVJJVEhNRVRJQ19PVkVSRkxPVzoNCi0gICAgICAgIGNhc2UgcG9ydFRJTl9BU1NFUlRfU1RJQ0tZX0FSSVRITUVUSUNfT1ZFUkZMT1c6DQotICAgICAgICBkZWZhdWx0Og0KLSAgICAgICAgICAgIF9kZWJ1ZygpOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICB9DQorCS8qIERlbGliZXJhdGUgZmFsbCB0aHJvdWdoIHRvIGRlZmF1bHQuICovDQorCXN3aXRjaCggaVRyYXBJZGVudGlmaWNhdGlvbiApDQorCXsNCisJCWNhc2UgcG9ydFRJTl9BU1NFUlRfQVJJVEhNRVRJQ19PVkVSRkxPVzoNCisJCWNhc2UgcG9ydFRJTl9BU1NFUlRfU1RJQ0tZX0FSSVRITUVUSUNfT1ZFUkZMT1c6DQorCQlkZWZhdWx0Og0KKwkJCV9kZWJ1ZygpOw0KKwkJCWJyZWFrOw0KKwl9DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZOb25NYXNrYWJsZUludGVycnVwdFRyYXAoIGludCBpVHJhcElkZW50aWZpY2F0aW9uICkNCiB7DQotICAgIC8qIERlbGliZXJhdGUgZmFsbCB0aHJvdWdoIHRvIGRlZmF1bHQuICovDQotICAgIHN3aXRjaCggaVRyYXBJZGVudGlmaWNhdGlvbiApDQotICAgIHsNCi0gICAgICAgIGNhc2UgcG9ydFRJTl9OTUlfTk9OX01BU0tBQkxFX0lOVEVSUlVQVDoNCi0gICAgICAgIGRlZmF1bHQ6DQotICAgICAgICAgICAgX2RlYnVnKCk7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgIH0NCisJLyogRGVsaWJlcmF0ZSBmYWxsIHRocm91Z2ggdG8gZGVmYXVsdC4gKi8NCisJc3dpdGNoKCBpVHJhcElkZW50aWZpY2F0aW9uICkNCisJew0KKwkJY2FzZSBwb3J0VElOX05NSV9OT05fTUFTS0FCTEVfSU5URVJSVVBUOg0KKwkJZGVmYXVsdDoNCisJCQlfZGVidWcoKTsNCisJCQlicmVhazsNCisJfQ0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvSUFSLzc4SzBSL0lTUl9TdXBwb3J0LmggYi9wb3J0YWJsZS9JQVIvNzhLMFIvSVNSX1N1cHBvcnQuaAppbmRleCAzOGY0NWQ2Li40ZTM5ODQxIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9JQVIvNzhLMFIvSVNSX1N1cHBvcnQuaAorKysgYi9wb3J0YWJsZS9JQVIvNzhLMFIvSVNSX1N1cHBvcnQuaApAQCAtMSwxMTEgKzEsODIgQEAKLTsgLyoNCi0gICAqIDsgKiBGcmVlUlRPUyBLZXJuZWwgVjEwLjMuMQ0KLSAgICogOyAqIENvcHlyaWdodCAoQykgMjAyMCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAqIDsgKg0KLSAgICogOyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YNCi0gICAqIDsgKiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbg0KLSAgICogOyAqIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8NCi0gICAqIDsgKiB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZg0KLSAgICogOyAqIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywNCi0gICAqIDsgKiBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoNCi0gICAqIDsgKg0KLSAgICogOyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbA0KLSAgICogOyAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuDQotICAgKiA7ICoNCi0gICAqIDsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUg0KLSAgICogOyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTDQotICAgKiA7ICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SDQotICAgKiA7ICogQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSDQotICAgKiA7ICogSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4NCi0gICAqIDsgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLg0KLSAgICogOyAqDQotICAgKiA7ICogaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcNCi0gICAqIDsgKiBodHRwOi8vYXdzLmFtYXpvbi5jb20vZnJlZXJ0b3MNCi0gICAqIDsgKg0KLSAgICogOyAqIDEgdGFiID09IDQgc3BhY2VzIQ0KLSAgICogOyAqLw0KKzsvKg0KKzsgKiBGcmVlUlRPUyBLZXJuZWwgVjEwLjMuMQ0KKzsgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQorOyAqDQorOyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YNCis7ICogdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4NCis7ICogdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bw0KKzsgKiB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZg0KKzsgKiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sDQorOyAqIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOg0KKzsgKg0KKzsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwNCis7ICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4NCis7ICoNCis7ICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1INCis7ICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MNCis7ICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SDQorOyAqIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUg0KKzsgKiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTg0KKzsgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLg0KKzsgKg0KKzsgKiBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZw0KKzsgKiBodHRwOi8vYXdzLmFtYXpvbi5jb20vZnJlZXJ0b3MNCis7ICoNCis7ICogMSB0YWIgPT0gNCBzcGFjZXMhDQorOyAqLw0KIA0KICNpbmNsdWRlICJGcmVlUlRPU0NvbmZpZy5oIg0KIA0KLTsNCi1WYXJpYWJsZXMgdXNlZCBieSBzY2hlZHVsZXINCi07DQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotRVhURVJOIHB4Q3VycmVudFRDQg0KLUVYVEVSTiB1c0NyaXRpY2FsTmVzdGluZw0KKzsgVmFyaWFibGVzIHVzZWQgYnkgc2NoZWR1bGVyDQorOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKwlFWFRFUk4gICAgcHhDdXJyZW50VENCDQorCUVYVEVSTiAgICB1c0NyaXRpY2FsTmVzdGluZw0KIA0KLTsNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi07DQotcG9ydFNBVkVfQ09OVEVYVCBNQUNSTw0KLTsNCi1TYXZlcyB0aGUgY29udGV4dCBvZiB0aGUgZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycywgQ1MgYW5kIEVTKCBvbmx5IGluIGZhcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnkgbW9kZSApIHJlZ2lzdGVycyB0aGUgdXNDcml0aWNhbE5lc3RpbmcgVmFsdWUgYW5kIHRoZSBTdGFjayBQb2ludGVyDQotOw0KLW9mIHRoZSBhY3RpdmUgVGFzayBvbnRvIHRoZSB0YXNrIHN0YWNrDQotOw0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCis7ICAgcG9ydFNBVkVfQ09OVEVYVCBNQUNSTw0KKzsgICBTYXZlcyB0aGUgY29udGV4dCBvZiB0aGUgZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycywgQ1MgYW5kIEVTIChvbmx5IGluIGZhcg0KKzsJbWVtb3J5IG1vZGUpIHJlZ2lzdGVycyB0aGUgdXNDcml0aWNhbE5lc3RpbmcgVmFsdWUgYW5kIHRoZSBTdGFjayBQb2ludGVyDQorOyAgIG9mIHRoZSBhY3RpdmUgVGFzayBvbnRvIHRoZSB0YXNrIHN0YWNrDQorOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIHBvcnRTQVZFX0NPTlRFWFQgTUFDUk8NCiANCi1QVVNIIEFYOw0KLVNhdmUgQVggUmVnaXN0ZXIgdG8gc3RhY2suDQotICAgUFVTSCBITA0KLU1PViBBLCBDUzsNCi1TYXZlIENTIHJlZ2lzdGVyLg0KLSAgIFhDSCBBLCBYDQotTU9WIEEsIEVTOw0KLVNhdmUgRVMgcmVnaXN0ZXIuDQotICAgUFVTSCBBWA0KLVBVU0ggREU7DQotU2F2ZSB0aGUgcmVtYWluaW5nIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMuDQotICAgUFVTSCBCQw0KLU1PVlcgQVgsIHVzQ3JpdGljYWxOZXN0aW5nOw0KLVNhdmUgdGhlIHVzQ3JpdGljYWxOZXN0aW5nIHZhbHVlLg0KLSAgIFBVU0ggQVgNCi1NT1ZXIEFYLCBweEN1cnJlbnRUQ0I7DQotU2F2ZSB0aGUgU3RhY2sgcG9pbnRlci4NCi0gICBNT1ZXIEhMLCBBWA0KLU1PVlcgQVgsIFNQDQotICAgICAgICBNT1ZXWyBITCBdLCBBWA0KLSAgICAgICAgRU5ETQ0KLTsNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisJUFVTSCAgICAgIEFYICAgICAgICAgICAgICAgICAgICA7IFNhdmUgQVggUmVnaXN0ZXIgdG8gc3RhY2suDQorCVBVU0ggICAgICBITA0KKwlNT1YgICAgICAgQSwgQ1MgICAgICAgICAgICAgICAgIDsgU2F2ZSBDUyByZWdpc3Rlci4NCisJWENIICAgICAgIEEsIFgNCisJTU9WICAgICAgIEEsIEVTICAgICAgICAgICAgICAgICA7IFNhdmUgRVMgcmVnaXN0ZXIuDQorCVBVU0ggICAgICBBWA0KKwlQVVNIICAgICAgREUgICAgICAgICAgICAgICAgICAgIDsgU2F2ZSB0aGUgcmVtYWluaW5nIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMuDQorCVBVU0ggICAgICBCQw0KKwlNT1ZXICAgICAgQVgsIHVzQ3JpdGljYWxOZXN0aW5nIDsgU2F2ZSB0aGUgdXNDcml0aWNhbE5lc3RpbmcgdmFsdWUuDQorCVBVU0ggICAgICBBWA0KKwlNT1ZXICAgICAgQVgsIHB4Q3VycmVudFRDQiAJICAgIDsgU2F2ZSB0aGUgU3RhY2sgcG9pbnRlci4NCisJTU9WVyAgICAgIEhMLCBBWA0KKwlNT1ZXICAgICAgQVgsIFNQDQorCU1PVlcgICAgICBbSExdLCBBWA0KKwlFTkRNDQorOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIA0KLTsNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi07DQorOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKzsgICBwb3J0UkVTVE9SRV9DT05URVhUIE1BQ1JPDQorOyAgIFJlc3RvcmVzIHRoZSB0YXNrIFN0YWNrIFBvaW50ZXIgdGhlbiB1c2UgdGhpcyB0byByZXN0b3JlIHVzQ3JpdGljYWxOZXN0aW5nLA0KKzsgICBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzIGFuZCB0aGUgQ1MgYW5kIEVTIChvbmx5IGluIGZhciBtZW1vcnkgbW9kZSkNCis7ICAgb2YgdGhlIHNlbGVjdGVkIHRhc2sgZnJvbSB0aGUgdGFzayBzdGFjaw0KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiBwb3J0UkVTVE9SRV9DT05URVhUIE1BQ1JPDQotOw0KLVJlc3RvcmVzIHRoZSB0YXNrIFN0YWNrIFBvaW50ZXIgdGhlbiB1c2UgdGhpcyB0byByZXN0b3JlIHVzQ3JpdGljYWxOZXN0aW5nLA0KLTsNCi1nZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzIGFuZCB0aGUgQ1MgYW5kIEVTKCBvbmx5IGluIGZhciBtZW1vcnkgbW9kZSApDQotOw0KLW9mIHRoZSBzZWxlY3RlZCB0YXNrIGZyb20gdGhlIHRhc2sgc3RhY2sNCi07DQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotcG9ydFJFU1RPUkVfQ09OVEVYVCBNQUNSTw0KLU1PVlcgQVgsIHB4Q3VycmVudFRDQjsNCi1SZXN0b3JlIHRoZSBTdGFjayBwb2ludGVyLg0KLSAgIE1PVlcgSEwsIEFYDQotTU9WVyBBWCwgWyBITCBdDQotTU9WVyBTUCwgQVgNCi1QT1AgQVg7DQotUmVzdG9yZSB1c0NyaXRpY2FsTmVzdGluZyB2YWx1ZS4NCi0gICBNT1ZXIHVzQ3JpdGljYWxOZXN0aW5nLCBBWA0KLVBPUCBCQzsNCi1SZXN0b3JlIHRoZSBuZWNlc3NhcnkgZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycy4NCi0gICBQT1AgREUNCi1QT1AgQVg7DQotUmVzdG9yZSB0aGUgRVMgcmVnaXN0ZXIuDQotICAgTU9WIEVTLCBBDQotWENIIEEsIFg7DQotUmVzdG9yZSB0aGUgQ1MgcmVnaXN0ZXIuDQotICAgTU9WIENTLCBBDQotUE9QIEhMOw0KLVJlc3RvcmUgZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVyIEhMLg0KLSAgIFBPUCBBWDsNCi1SZXN0b3JlIEFYLg0KLSAgIEVORE0NCi07DQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorCU1PVlcgICAgICBBWCwgcHhDdXJyZW50VENCCSAgICA7IFJlc3RvcmUgdGhlIFN0YWNrIHBvaW50ZXIuDQorCU1PVlcgICAgICBITCwgQVgNCisJTU9WVyAgICAgIEFYLCBbSExdDQorCU1PVlcgICAgICBTUCwgQVgNCisJUE9QCSAgICAgIEFYCSAgICAgICAgICAgICAgICA7IFJlc3RvcmUgdXNDcml0aWNhbE5lc3RpbmcgdmFsdWUuDQorCU1PVlcgICAgICB1c0NyaXRpY2FsTmVzdGluZywgQVgNCisJUE9QCSAgICAgIEJDICAgICAgICAgICAgICAgICAgICA7IFJlc3RvcmUgdGhlIG5lY2Vzc2FyeSBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzLg0KKwlQT1AJICAgICAgREUNCisJUE9QICAgICAgIEFYICAgICAgICAgICAgICAgICAgICA7IFJlc3RvcmUgdGhlIEVTIHJlZ2lzdGVyLg0KKwlNT1YgICAgICAgRVMsIEENCisJWENIICAgICAgIEEsIFggICAgICAgICAgICAgICAgICA7IFJlc3RvcmUgdGhlIENTIHJlZ2lzdGVyLg0KKwlNT1YgICAgICAgQ1MsIEENCisJUE9QICAgICAgIEhMICAgICAgICAgICAgICAgICAgICA7IFJlc3RvcmUgZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVyIEhMLg0KKwlQT1AgICAgICAgQVggICAgICAgICAgICAgICAgICAgIDsgUmVzdG9yZSBBWC4NCisJRU5ETQ0KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9JQVIvNzhLMFIvcG9ydC5jIGIvcG9ydGFibGUvSUFSLzc4SzBSL3BvcnQuYwppbmRleCA1MGQ0NTRkLi40ZmIyMDQ3IDEwMDY0NAotLS0gYS9wb3J0YWJsZS9JQVIvNzhLMFIvcG9ydC5jCisrKyBiL3BvcnRhYmxlL0lBUi83OEswUi9wb3J0LmMKQEAgLTMzLDggKzMzLDggQEAKICNpbmNsdWRlICJ0YXNrLmgiDQogDQogLyogVGhlIGNyaXRpY2FsIG5lc3RpbmcgdmFsdWUgaXMgaW5pdGlhbGlzZWQgdG8gYSBub24gemVybyB2YWx1ZSB0byBlbnN1cmUNCi0gKiBpbnRlcnJ1cHRzIGRvbid0IGFjY2lkZW50YWxseSBiZWNvbWUgZW5hYmxlZCBiZWZvcmUgdGhlIHNjaGVkdWxlciBpcyBzdGFydGVkLiAqLw0KLSNkZWZpbmUgcG9ydElOSVRJQUxfQ1JJVElDQUxfTkVTVElORyAgICAoICggdWludDE2X3QgKSAxMCApDQoraW50ZXJydXB0cyBkb24ndCBhY2NpZGVudGFsbHkgYmVjb21lIGVuYWJsZWQgYmVmb3JlIHRoZSBzY2hlZHVsZXIgaXMgc3RhcnRlZC4gKi8NCisjZGVmaW5lIHBvcnRJTklUSUFMX0NSSVRJQ0FMX05FU1RJTkcgICgoIHVpbnQxNl90ICkgMTApDQogDQogLyogSW5pdGlhbCBQU1cgdmFsdWUgYWxsb2NhdGVkIHRvIGEgbmV3bHkgY3JlYXRlZCB0YXNrLg0KICAqICAgMTEwMDAxMTAwMDAwMDAwMA0KQEAgLTQ3LDI1ICs0NywyNSBAQAogICogICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tIFplcm8gRmxhZyBzZXQNCiAgKiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gR2xvYmFsIEludGVycnVwdCBGbGFnIHNldCAoZW5hYmxlZCkNCiAgKi8NCi0jZGVmaW5lIHBvcnRQU1cgICAgICAgICAgICAgICAgICAgICAgICAgKCAweGM2VUwgKQ0KKyNkZWZpbmUgcG9ydFBTVwkJICAoMHhjNlVMKQ0KIA0KIC8qIFdlIHJlcXVpcmUgdGhlIGFkZHJlc3Mgb2YgdGhlIHB4Q3VycmVudFRDQiB2YXJpYWJsZSwgYnV0IGRvbid0IHdhbnQgdG8ga25vdw0KLSAqIGFueSBkZXRhaWxzIG9mIGl0cyB0eXBlLiAqLw0KK2FueSBkZXRhaWxzIG9mIGl0cyB0eXBlLiAqLw0KIHR5cGVkZWYgdm9pZCBUQ0JfdDsNCiBleHRlcm4gdm9sYXRpbGUgVENCX3QgKiB2b2xhdGlsZSBweEN1cnJlbnRUQ0I7DQogDQogLyogTW9zdCBwb3J0cyBpbXBsZW1lbnQgY3JpdGljYWwgc2VjdGlvbnMgYnkgcGxhY2luZyB0aGUgaW50ZXJydXB0IGZsYWdzIG9uDQotICogdGhlIHN0YWNrIGJlZm9yZSBkaXNhYmxpbmcgaW50ZXJydXB0cy4gIEV4aXRpbmcgdGhlIGNyaXRpY2FsIHNlY3Rpb24gaXMgdGhlbg0KLSAqIHNpbXBseSBhIGNhc2Ugb2YgcG9wcGluZyB0aGUgZmxhZ3MgZnJvbSB0aGUgc3RhY2suICBBcyA3OEswIElBUiBkb2VzIG5vdCB1c2UNCi0gKiBhIGZyYW1lIHBvaW50ZXIgdGhpcyBjYW5ub3QgYmUgZG9uZSBhcyBtb2RpZnlpbmcgdGhlIHN0YWNrIHdpbGwgY2xvYmJlciBhbGwNCi0gKiB0aGUgc3RhY2sgdmFyaWFibGVzLiAgSW5zdGVhZCBlYWNoIHRhc2sgbWFpbnRhaW5zIGEgY291bnQgb2YgdGhlIGNyaXRpY2FsDQotICogc2VjdGlvbiBuZXN0aW5nIGRlcHRoLiAgRWFjaCB0aW1lIGEgY3JpdGljYWwgc2VjdGlvbiBpcyBlbnRlcmVkIHRoZSBjb3VudCBpcw0KLSAqIGluY3JlbWVudGVkLiAgRWFjaCB0aW1lIGEgY3JpdGljYWwgc2VjdGlvbiBpcyBsZWZ0IHRoZSBjb3VudCBpcyBkZWNyZW1lbnRlZCAtDQotICogd2l0aCBpbnRlcnJ1cHRzIG9ubHkgYmVpbmcgcmUtZW5hYmxlZCBpZiB0aGUgY291bnQgaXMgemVyby4NCi0gKg0KLSAqIHVzQ3JpdGljYWxOZXN0aW5nIHdpbGwgZ2V0IHNldCB0byB6ZXJvIHdoZW4gdGhlIHNjaGVkdWxlciBzdGFydHMsIGJ1dCBtdXN0DQotICogbm90IGJlIGluaXRpYWxpc2VkIHRvIHplcm8gYXMgdGhpcyB3aWxsIGNhdXNlIHByb2JsZW1zIGR1cmluZyB0aGUgc3RhcnR1cA0KLSAqIHNlcXVlbmNlLiAqLw0KK3RoZSBzdGFjayBiZWZvcmUgZGlzYWJsaW5nIGludGVycnVwdHMuICBFeGl0aW5nIHRoZSBjcml0aWNhbCBzZWN0aW9uIGlzIHRoZW4NCitzaW1wbHkgYSBjYXNlIG9mIHBvcHBpbmcgdGhlIGZsYWdzIGZyb20gdGhlIHN0YWNrLiAgQXMgNzhLMCBJQVIgZG9lcyBub3QgdXNlDQorYSBmcmFtZSBwb2ludGVyIHRoaXMgY2Fubm90IGJlIGRvbmUgYXMgbW9kaWZ5aW5nIHRoZSBzdGFjayB3aWxsIGNsb2JiZXIgYWxsDQordGhlIHN0YWNrIHZhcmlhYmxlcy4gIEluc3RlYWQgZWFjaCB0YXNrIG1haW50YWlucyBhIGNvdW50IG9mIHRoZSBjcml0aWNhbA0KK3NlY3Rpb24gbmVzdGluZyBkZXB0aC4gIEVhY2ggdGltZSBhIGNyaXRpY2FsIHNlY3Rpb24gaXMgZW50ZXJlZCB0aGUgY291bnQgaXMNCitpbmNyZW1lbnRlZC4gIEVhY2ggdGltZSBhIGNyaXRpY2FsIHNlY3Rpb24gaXMgbGVmdCB0aGUgY291bnQgaXMgZGVjcmVtZW50ZWQgLQ0KK3dpdGggaW50ZXJydXB0cyBvbmx5IGJlaW5nIHJlLWVuYWJsZWQgaWYgdGhlIGNvdW50IGlzIHplcm8uDQorDQordXNDcml0aWNhbE5lc3Rpbmcgd2lsbCBnZXQgc2V0IHRvIHplcm8gd2hlbiB0aGUgc2NoZWR1bGVyIHN0YXJ0cywgYnV0IG11c3QNCitub3QgYmUgaW5pdGlhbGlzZWQgdG8gemVybyBhcyB0aGlzIHdpbGwgY2F1c2UgcHJvYmxlbXMgZHVyaW5nIHRoZSBzdGFydHVwDQorc2VxdWVuY2UuICovDQogdm9sYXRpbGUgdWludDE2X3QgdXNDcml0aWNhbE5lc3RpbmcgPSBwb3J0SU5JVElBTF9DUklUSUNBTF9ORVNUSU5HOw0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KQEAgLTgxLDE0NiArODEsMTQ1IEBACiAgKg0KICAqIFNlZSB0aGUgaGVhZGVyIGZpbGUgcG9ydGFibGUuaC4NCiAgKi8NCi1TdGFja1R5cGVfdCAqIHB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKiBweFRvcE9mU3RhY2ssDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqIHB2UGFyYW1ldGVycyApDQorU3RhY2tUeXBlX3QgKnB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKnB4VG9wT2ZTdGFjaywgVGFza0Z1bmN0aW9uX3QgcHhDb2RlLCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KIHsNCi0gICAgdWludDMyX3QgKiBwdWxMb2NhbDsNCit1aW50MzJfdCAqcHVsTG9jYWw7DQogDQotICAgICNpZiBjb25maWdNRU1PUllfTU9ERSA9PSAxDQotICAgICAgICB7DQotICAgICAgICAgICAgLyogUGFyYW1ldGVycyBhcmUgcGFzc2VkIGluIG9uIHRoZSBzdGFjaywgYW5kIHdyaXR0ZW4gdXNpbmcgYSAzMmJpdCB2YWx1ZQ0KLSAgICAgICAgICAgICAqIGhlbmNlIGEgc3BhY2UgaXMgbGVmdCBmb3IgdGhlIHNlY29uZCB0d28gYnl0ZXMuICovDQotICAgICAgICAgICAgcHhUb3BPZlN0YWNrLS07DQorCSNpZiBjb25maWdNRU1PUllfTU9ERSA9PSAxDQorCXsNCisJCS8qIFBhcmFtZXRlcnMgYXJlIHBhc3NlZCBpbiBvbiB0aGUgc3RhY2ssIGFuZCB3cml0dGVuIHVzaW5nIGEgMzJiaXQgdmFsdWUNCisJCWhlbmNlIGEgc3BhY2UgaXMgbGVmdCBmb3IgdGhlIHNlY29uZCB0d28gYnl0ZXMuICovDQorCQlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgICAgICAgICAvKiBXcml0ZSBpbiB0aGUgcGFyYW1ldGVyIHZhbHVlLiAqLw0KLSAgICAgICAgICAgIHB1bExvY2FsID0gKCB1aW50MzJfdCAqICkgcHhUb3BPZlN0YWNrOw0KLSAgICAgICAgICAgICpwdWxMb2NhbCA9ICggdWludDMyX3QgKSBwdlBhcmFtZXRlcnM7DQotICAgICAgICAgICAgcHhUb3BPZlN0YWNrLS07DQorCQkvKiBXcml0ZSBpbiB0aGUgcGFyYW1ldGVyIHZhbHVlLiAqLw0KKwkJcHVsTG9jYWwgPSAgKCB1aW50MzJfdCAqICkgcHhUb3BPZlN0YWNrOw0KKwkJKnB1bExvY2FsID0gKCB1aW50MzJfdCApIHB2UGFyYW1ldGVyczsNCisJCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAgICAgICAgIC8qIFRoZXNlIHZhbHVlcyBhcmUganVzdCBzcGFjZXJzLiAgVGhlIHJldHVybiBhZGRyZXNzIG9mIHRoZSBmdW5jdGlvbg0KLSAgICAgICAgICAgICAqIHdvdWxkIG5vcm1hbGx5IGJlIHdyaXR0ZW4gaGVyZS4gKi8NCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4Y2RjZDsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4Y2RjZDsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCisJCS8qIFRoZXNlIHZhbHVlcyBhcmUganVzdCBzcGFjZXJzLiAgVGhlIHJldHVybiBhZGRyZXNzIG9mIHRoZSBmdW5jdGlvbg0KKwkJd291bGQgbm9ybWFsbHkgYmUgd3JpdHRlbiBoZXJlLiAqLw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweGNkY2Q7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhjZGNkOw0KKwkJcHhUb3BPZlN0YWNrLS07DQogDQotICAgICAgICAgICAgLyogVGhlIHN0YXJ0IGFkZHJlc3MgLyBQU1cgdmFsdWUgaXMgYWxzbyB3cml0dGVuIGluIGFzIGEgMzJiaXQgdmFsdWUsDQotICAgICAgICAgICAgICogc28gbGVhdmUgYSBzcGFjZSBmb3IgdGhlIHNlY29uZCB0d28gYnl0ZXMuICovDQotICAgICAgICAgICAgcHhUb3BPZlN0YWNrLS07DQorCQkvKiBUaGUgc3RhcnQgYWRkcmVzcyAvIFBTVyB2YWx1ZSBpcyBhbHNvIHdyaXR0ZW4gaW4gYXMgYSAzMmJpdCB2YWx1ZSwNCisJCXNvIGxlYXZlIGEgc3BhY2UgZm9yIHRoZSBzZWNvbmQgdHdvIGJ5dGVzLiAqLw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQ0KKwkJLyogVGFzayBmdW5jdGlvbiBzdGFydCBhZGRyZXNzIGNvbWJpbmVkIHdpdGggdGhlIFBTVy4gKi8NCisJCXB1bExvY2FsID0gKCB1aW50MzJfdCAqICkgcHhUb3BPZlN0YWNrOw0KKwkJKnB1bExvY2FsID0gKCAoICggdWludDMyX3QgKSBweENvZGUgKSB8ICggcG9ydFBTVyA8PCAyNFVMICkgKTsNCisJCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAgICAgICAgIC8qIFRhc2sgZnVuY3Rpb24gc3RhcnQgYWRkcmVzcyBjb21iaW5lZCB3aXRoIHRoZSBQU1cuICovDQotICAgICAgICAgICAgcHVsTG9jYWwgPSAoIHVpbnQzMl90ICogKSBweFRvcE9mU3RhY2s7DQotICAgICAgICAgICAgKnB1bExvY2FsID0gKCAoICggdWludDMyX3QgKSBweENvZGUgKSB8ICggcG9ydFBTVyA8PCAyNFVMICkgKTsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCisJCS8qIEFuIGluaXRpYWwgdmFsdWUgZm9yIHRoZSBBWCByZWdpc3Rlci4gKi8NCisJCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMTExOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCX0NCisJI2Vsc2UNCisJew0KKwkJLyogVGFzayBmdW5jdGlvbiBhZGRyZXNzIGlzIHdyaXR0ZW4gdG8gdGhlIHN0YWNrIGZpcnN0LiAgQXMgaXQgaXMNCisJCXdyaXR0ZW4gYXMgYSAzMmJpdCB2YWx1ZSBhIHNwYWNlIGlzIGxlZnQgb24gdGhlIHN0YWNrIGZvciB0aGUgc2Vjb25kDQorCQl0d28gYnl0ZXMuICovDQorCQlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgICAgICAgICAvKiBBbiBpbml0aWFsIHZhbHVlIGZvciB0aGUgQVggcmVnaXN0ZXIuICovDQotICAgICAgICAgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDExMTE7DQotICAgICAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICAgICB9DQotICAgICNlbHNlIC8qIGlmIGNvbmZpZ01FTU9SWV9NT0RFID09IDEgKi8NCi0gICAgICAgIHsNCi0gICAgICAgICAgICAvKiBUYXNrIGZ1bmN0aW9uIGFkZHJlc3MgaXMgd3JpdHRlbiB0byB0aGUgc3RhY2sgZmlyc3QuICBBcyBpdCBpcw0KLSAgICAgICAgICAgICAqIHdyaXR0ZW4gYXMgYSAzMmJpdCB2YWx1ZSBhIHNwYWNlIGlzIGxlZnQgb24gdGhlIHN0YWNrIGZvciB0aGUgc2Vjb25kDQotICAgICAgICAgICAgICogdHdvIGJ5dGVzLiAqLw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkJLyogVGFzayBmdW5jdGlvbiBzdGFydCBhZGRyZXNzIGNvbWJpbmVkIHdpdGggdGhlIFBTVy4gKi8NCisJCXB1bExvY2FsID0gKCB1aW50MzJfdCAqICkgcHhUb3BPZlN0YWNrOw0KKwkJKnB1bExvY2FsID0gKCAoICggdWludDMyX3QgKSBweENvZGUgKSB8ICggcG9ydFBTVyA8PCAyNFVMICkgKTsNCisJCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAgICAgICAgIC8qIFRhc2sgZnVuY3Rpb24gc3RhcnQgYWRkcmVzcyBjb21iaW5lZCB3aXRoIHRoZSBQU1cuICovDQotICAgICAgICAgICAgcHVsTG9jYWwgPSAoIHVpbnQzMl90ICogKSBweFRvcE9mU3RhY2s7DQotICAgICAgICAgICAgKnB1bExvY2FsID0gKCAoICggdWludDMyX3QgKSBweENvZGUgKSB8ICggcG9ydFBTVyA8PCAyNFVMICkgKTsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCisJCS8qIFRoZSBwYXJhbWV0ZXIgaXMgcGFzc2VkIGluIEFYLiAqLw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwdlBhcmFtZXRlcnM7DQorCQlweFRvcE9mU3RhY2stLTsNCisJfQ0KKwkjZW5kaWYNCiANCi0gICAgICAgICAgICAvKiBUaGUgcGFyYW1ldGVyIGlzIHBhc3NlZCBpbiBBWC4gKi8NCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB2UGFyYW1ldGVyczsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgIH0NCi0gICAgI2VuZGlmIC8qIGlmIGNvbmZpZ01FTU9SWV9NT0RFID09IDEgKi8NCisJLyogQW4gaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIEhMIHJlZ2lzdGVyLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MjIyMjsNCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgIC8qIEFuIGluaXRpYWwgdmFsdWUgZm9yIHRoZSBITCByZWdpc3Rlci4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDIyMjI7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkvKiBDUyBhbmQgRVMgcmVnaXN0ZXJzLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MEYwMDsNCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgIC8qIENTIGFuZCBFUyByZWdpc3RlcnMuICovDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwRjAwOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJLyogRmluYWxseSB0aGUgcmVtYWluaW5nIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMgREUgYW5kIEJDICovDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhERURFOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweEJDQkM7DQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBGaW5hbGx5IHRoZSByZW1haW5pbmcgZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycyBERSBhbmQgQkMgKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweERFREU7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4QkNCQzsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIEZpbmFsbHkgdGhlIGNyaXRpY2FsIHNlY3Rpb24gbmVzdGluZyBjb3VudCBpcyBzZXQgdG8gemVybyB3aGVuIHRoZSB0YXNrDQorCWZpcnN0IHN0YXJ0cy4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwb3J0Tk9fQ1JJVElDQUxfU0VDVElPTl9ORVNUSU5HOwkNCiANCi0gICAgLyogRmluYWxseSB0aGUgY3JpdGljYWwgc2VjdGlvbiBuZXN0aW5nIGNvdW50IGlzIHNldCB0byB6ZXJvIHdoZW4gdGhlIHRhc2sNCi0gICAgICogZmlyc3Qgc3RhcnRzLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkc7DQotDQotICAgIC8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHRvcCBvZiB0aGUgc3RhY2sgd2UgaGF2ZSBnZW5lcmF0ZWQgc28gdGhpcyBjYW4NCi0gICAgICogYmUgc3RvcmVkIGluIHRoZSB0YXNrIGNvbnRyb2wgYmxvY2sgZm9yIHRoZSB0YXNrLiAqLw0KLSAgICByZXR1cm4gcHhUb3BPZlN0YWNrOw0KKwkvKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSB0b3Agb2YgdGhlIHN0YWNrIHdlIGhhdmUgZ2VuZXJhdGVkIHNvIHRoaXMgY2FuDQorCWJlIHN0b3JlZCBpbiB0aGUgdGFzayBjb250cm9sIGJsb2NrIGZvciB0aGUgdGFzay4gKi8NCisJcmV0dXJuIHB4VG9wT2ZTdGFjazsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogQmFzZVR5cGVfdCB4UG9ydFN0YXJ0U2NoZWR1bGVyKCB2b2lkICkNCiB7DQotICAgIC8qIFNldHVwIHRoZSBoYXJkd2FyZSB0byBnZW5lcmF0ZSB0aGUgdGljay4gIEludGVycnVwdHMgYXJlIGRpc2FibGVkIHdoZW4NCi0gICAgICogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuICovDQotICAgIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoKTsNCisJLyogU2V0dXAgdGhlIGhhcmR3YXJlIHRvIGdlbmVyYXRlIHRoZSB0aWNrLiAgSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgd2hlbg0KKwl0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4gKi8NCisJcHJ2U2V0dXBUaW1lckludGVycnVwdCgpOw0KIA0KLSAgICAvKiBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBmaXJzdCB0YXNrIHRoYXQgaXMgZ29pbmcgdG8gcnVuLiAqLw0KLSAgICB2UG9ydFN0YXJ0KCk7DQorCS8qIFJlc3RvcmUgdGhlIGNvbnRleHQgb2YgdGhlIGZpcnN0IHRhc2sgdGhhdCBpcyBnb2luZyB0byBydW4uICovDQorCXZQb3J0U3RhcnQoKTsNCiANCi0gICAgLyogU2hvdWxkIG5vdCBnZXQgaGVyZSBhcyB0aGUgdGFza3MgYXJlIG5vdyBydW5uaW5nISAqLw0KLSAgICByZXR1cm4gcGRUUlVFOw0KKwkvKiBTaG91bGQgbm90IGdldCBoZXJlIGFzIHRoZSB0YXNrcyBhcmUgbm93IHJ1bm5pbmchICovDQorCXJldHVybiBwZFRSVUU7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQ0KIHsNCi0gICAgLyogSXQgaXMgdW5saWtlbHkgdGhhdCB0aGUgNzhLMFIgcG9ydCB3aWxsIGdldCBzdG9wcGVkLiAgSWYgcmVxdWlyZWQgc2ltcGx5DQotICAgICAqIGRpc2FibGUgdGhlIHRpY2sgaW50ZXJydXB0IGhlcmUuICovDQorCS8qIEl0IGlzIHVubGlrZWx5IHRoYXQgdGhlIDc4SzBSIHBvcnQgd2lsbCBnZXQgc3RvcHBlZC4gIElmIHJlcXVpcmVkIHNpbXBseQ0KKwlkaXNhYmxlIHRoZSB0aWNrIGludGVycnVwdCBoZXJlLiAqLw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICkNCiB7DQotICAgIC8qIFNldHVwIGNoYW5uZWwgNSBvZiB0aGUgVEFVIHRvIGdlbmVyYXRlIHRoZSB0aWNrIGludGVycnVwdC4gKi8NCisJLyogU2V0dXAgY2hhbm5lbCA1IG9mIHRoZSBUQVUgdG8gZ2VuZXJhdGUgdGhlIHRpY2sgaW50ZXJydXB0LiAqLw0KIA0KLSAgICAvKiBGaXJzdCB0aGUgVGltZXIgQXJyYXkgVW5pdCBoYXMgdG8gYmUgZW5hYmxlZC4gKi8NCi0gICAgVEFVMEVOID0gMTsNCisJLyogRmlyc3QgdGhlIFRpbWVyIEFycmF5IFVuaXQgaGFzIHRvIGJlIGVuYWJsZWQuICovDQorCVRBVTBFTiA9IDE7DQogDQotICAgIC8qIFRvIGNvbmZpZ3VyZSB0aGUgVGltZXIgQXJyYXkgVW5pdCBhbGwgQ2hhbm5lbHMgaGF2ZSB0byBmaXJzdCBiZSBzdG9wcGVkLiAqLw0KLSAgICBUVDAgPSAweGZmOw0KKwkvKiBUbyBjb25maWd1cmUgdGhlIFRpbWVyIEFycmF5IFVuaXQgYWxsIENoYW5uZWxzIGhhdmUgdG8gZmlyc3QgYmUgc3RvcHBlZC4gKi8NCisJVFQwID0gMHhmZjsNCiANCi0gICAgLyogSW50ZXJydXB0IG9mIFRpbWVyIEFycmF5IFVuaXQgQ2hhbm5lbCA1IGlzIGRpc2FibGVkIHRvIHNldCB0aGUgaW50ZXJydXB0DQotICAgICAqIHByaW9yaXR5LiAqLw0KLSAgICBUTU1LMDUgPSAxOw0KKwkvKiBJbnRlcnJ1cHQgb2YgVGltZXIgQXJyYXkgVW5pdCBDaGFubmVsIDUgaXMgZGlzYWJsZWQgdG8gc2V0IHRoZSBpbnRlcnJ1cHQNCisJcHJpb3JpdHkuICovDQorCVRNTUswNSA9IDE7DQogDQotICAgIC8qIENsZWFyIFRpbWVyIEFycmF5IFVuaXQgQ2hhbm5lbCA1IGludGVycnVwdCBmbGFnLiAqLw0KLSAgICBUTUlGMDUgPSAwOw0KKwkvKiBDbGVhciBUaW1lciBBcnJheSBVbml0IENoYW5uZWwgNSBpbnRlcnJ1cHQgZmxhZy4gKi8JDQorCVRNSUYwNSA9IDA7DQogDQotICAgIC8qIFNldCBUaW1lciBBcnJheSBVbml0IENoYW5uZWwgNSBpbnRlcnJ1cHQgcHJpb3JpdHkgKi8NCi0gICAgVE1QUjAwNSA9IDA7DQotICAgIFRNUFIxMDUgPSAwOw0KKwkvKiBTZXQgVGltZXIgQXJyYXkgVW5pdCBDaGFubmVsIDUgaW50ZXJydXB0IHByaW9yaXR5ICovDQorCVRNUFIwMDUgPSAwOw0KKwlUTVBSMTA1ID0gMDsNCiANCi0gICAgLyogU2V0IFRpbWVyIEFycmF5IFVuaXQgQ2hhbm5lbCA1IE1vZGUgYXMgaW50ZXJ2YWwgdGltZXIuICovDQotICAgIFRNUjA1ID0gMHgwMDAwOw0KKwkvKiBTZXQgVGltZXIgQXJyYXkgVW5pdCBDaGFubmVsIDUgTW9kZSBhcyBpbnRlcnZhbCB0aW1lci4gKi8NCisJVE1SMDUgPSAweDAwMDA7DQogDQotICAgIC8qIFNldCB0aGUgY29tcGFyZSBtYXRjaCB2YWx1ZSBhY2NvcmRpbmcgdG8gdGhlIHRpY2sgcmF0ZSB3ZSB3YW50LiAqLw0KLSAgICBURFIwNSA9ICggVGlja1R5cGVfdCApICggY29uZmlnQ1BVX0NMT0NLX0haIC8gY29uZmlnVElDS19SQVRFX0haICk7DQorCS8qIFNldCB0aGUgY29tcGFyZSBtYXRjaCB2YWx1ZSBhY2NvcmRpbmcgdG8gdGhlIHRpY2sgcmF0ZSB3ZSB3YW50LiAqLw0KKwlURFIwNSA9ICggVGlja1R5cGVfdCApICggY29uZmlnQ1BVX0NMT0NLX0haIC8gY29uZmlnVElDS19SQVRFX0haICk7DQogDQotICAgIC8qIFNldCBUaW1lciBBcnJheSBVbml0IENoYW5uZWwgNSBvdXRwdXQgbW9kZSAqLw0KLSAgICBUT00wICY9IH4weDAwMjA7DQorCS8qIFNldCBUaW1lciBBcnJheSBVbml0IENoYW5uZWwgNSBvdXRwdXQgbW9kZSAqLw0KKwlUT00wICY9IH4weDAwMjA7DQogDQotICAgIC8qIFNldCBUaW1lciBBcnJheSBVbml0IENoYW5uZWwgNSBvdXRwdXQgbGV2ZWwgKi8NCi0gICAgVE9MMCAmPSB+MHgwMDIwOw0KKwkvKiBTZXQgVGltZXIgQXJyYXkgVW5pdCBDaGFubmVsIDUgb3V0cHV0IGxldmVsICovCQ0KKwlUT0wwICY9IH4weDAwMjA7DQogDQotICAgIC8qIFNldCBUaW1lciBBcnJheSBVbml0IENoYW5uZWwgNSBvdXRwdXQgZW5hYmxlICovDQotICAgIFRPRTAgJj0gfjB4MDAyMDsNCisJLyogU2V0IFRpbWVyIEFycmF5IFVuaXQgQ2hhbm5lbCA1IG91dHB1dCBlbmFibGUgKi8JDQorCVRPRTAgJj0gfjB4MDAyMDsNCiANCi0gICAgLyogSW50ZXJydXB0IG9mIFRpbWVyIEFycmF5IFVuaXQgQ2hhbm5lbCA1IGVuYWJsZWQgKi8NCi0gICAgVE1NSzA1ID0gMDsNCisJLyogSW50ZXJydXB0IG9mIFRpbWVyIEFycmF5IFVuaXQgQ2hhbm5lbCA1IGVuYWJsZWQgKi8NCisJVE1NSzA1ID0gMDsNCiANCi0gICAgLyogU3RhcnQgVGltZXIgQXJyYXkgVW5pdCBDaGFubmVsIDUuKi8NCi0gICAgVFMwIHw9IDB4MDAyMDsNCisJLyogU3RhcnQgVGltZXIgQXJyYXkgVW5pdCBDaGFubmVsIDUuKi8NCisJVFMwIHw9IDB4MDAyMDsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvSUFSLzc4SzBSL3BvcnRtYWNyby5oIGIvcG9ydGFibGUvSUFSLzc4SzBSL3BvcnRtYWNyby5oCmluZGV4IGEzMDMyM2IuLjc5ZWZlZWQgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0lBUi83OEswUi9wb3J0bWFjcm8uaAorKysgYi9wb3J0YWJsZS9JQVIvNzhLMFIvcG9ydG1hY3JvLmgKQEAgLTI2LDExICsyNiwxMSBAQAogICovDQogDQogI2lmbmRlZiBQT1JUTUFDUk9fSA0KLSAgICAjZGVmaW5lIFBPUlRNQUNST19IDQorI2RlZmluZSBQT1JUTUFDUk9fSA0KIA0KLSAgICAjaWZkZWYgX19jcGx1c3BsdXMNCi0gICAgICAgIGV4dGVybiAiQyIgew0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICogUG9ydCBzcGVjaWZpYyBkZWZpbml0aW9ucy4NCkBAIC00NCwxMDEgKzQ0LDEwMiBAQAogDQogLyogVHlwZSBkZWZpbml0aW9ucy4gKi8NCiANCi0gICAgI2RlZmluZSBwb3J0Q0hBUiAgICAgICAgICBjaGFyDQotICAgICNkZWZpbmUgcG9ydEZMT0FUICAgICAgICAgZmxvYXQNCi0gICAgI2RlZmluZSBwb3J0RE9VQkxFICAgICAgICBkb3VibGUNCi0gICAgI2RlZmluZSBwb3J0TE9ORyAgICAgICAgICBsb25nDQotICAgICNkZWZpbmUgcG9ydFNIT1JUICAgICAgICAgc2hvcnQNCi0gICAgI2RlZmluZSBwb3J0U1RBQ0tfVFlQRSAgICB1aW50MTZfdA0KLSAgICAjZGVmaW5lIHBvcnRCQVNFX1RZUEUgICAgIHNob3J0DQorI2RlZmluZSBwb3J0Q0hBUiAgICAgICAgY2hhcg0KKyNkZWZpbmUgcG9ydEZMT0FUICAgICAgIGZsb2F0DQorI2RlZmluZSBwb3J0RE9VQkxFICAgICAgZG91YmxlDQorI2RlZmluZSBwb3J0TE9ORyAgICAgICAgbG9uZw0KKyNkZWZpbmUgcG9ydFNIT1JUICAgICAgIHNob3J0DQorI2RlZmluZSBwb3J0U1RBQ0tfVFlQRSAgdWludDE2X3QNCisjZGVmaW5lIHBvcnRCQVNFX1RZUEUgICBzaG9ydA0KIA0KLSAgICB0eXBlZGVmIHBvcnRTVEFDS19UWVBFICAgICBTdGFja1R5cGVfdDsNCi0gICAgdHlwZWRlZiBzaG9ydCAgICAgICAgICAgICAgQmFzZVR5cGVfdDsNCi0gICAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgICAgVUJhc2VUeXBlX3Q7DQordHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSBTdGFja1R5cGVfdDsNCit0eXBlZGVmIHNob3J0IEJhc2VUeXBlX3Q7DQordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBVQmFzZVR5cGVfdDsNCiANCi0gICAgI2lmICggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCi0gICAgICAgIHR5cGVkZWYgdW5zaWduZWQgaW50ICAgVGlja1R5cGVfdDsNCi0gICAgICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmYNCi0gICAgI2Vsc2UNCi0gICAgICAgIHR5cGVkZWYgdWludDMyX3QgICAgICAgVGlja1R5cGVfdDsNCi0gICAgICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwNCi0gICAgI2VuZGlmDQorI2lmIChjb25maWdVU0VfMTZfQklUX1RJQ0tTPT0xKQ0KKwl0eXBlZGVmIHVuc2lnbmVkIGludCBUaWNrVHlwZV90Ow0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQorI2Vsc2UNCisJdHlwZWRlZiB1aW50MzJfdCBUaWNrVHlwZV90Ow0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQorI2VuZGlmDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogSW50ZXJydXB0IGNvbnRyb2wgbWFjcm9zLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAgICBfX2FzbSggIkRJIiApDQotICAgICNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkgICAgIF9fYXNtKCAiRUkiICkNCisjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSBfX2FzbSAoICJESSIgKQ0KKyNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkJIF9fYXNtICggIkVJIiApDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogQ3JpdGljYWwgc2VjdGlvbiBjb250cm9sIG1hY3Jvcy4gKi8NCi0gICAgI2RlZmluZSBwb3J0Tk9fQ1JJVElDQUxfU0VDVElPTl9ORVNUSU5HICAgICggKCB1aW50MTZfdCApIDAgKQ0KKyNkZWZpbmUgcG9ydE5PX0NSSVRJQ0FMX1NFQ1RJT05fTkVTVElORwkJKCAoIHVpbnQxNl90ICkgMCApDQogDQotICAgICNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGV4dGVybiB2b2xhdGlsZSB1aW50MTZfdCB1c0NyaXRpY2FsTmVzdGluZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAvKiBOb3cgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgdWxDcml0aWNhbE5lc3RpbmcgY2FuIGJlIGFjY2Vzc2VkICovICAgICAgXA0KLSAgICAgICAgLyogZGlyZWN0bHkuICBJbmNyZW1lbnQgdWxDcml0aWNhbE5lc3RpbmcgdG8ga2VlcCBhIGNvdW50IG9mIGhvdyBtYW55ICovIFwNCi0gICAgICAgIC8qIHRpbWVzIHBvcnRFTlRFUl9DUklUSUNBTCgpIGhhcyBiZWVuIGNhbGxlZC4gKi8gICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICB1c0NyaXRpY2FsTmVzdGluZysrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB9DQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKQkJCQkJCQkJCQkJCQlcDQorewkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KK2V4dGVybiB2b2xhdGlsZSB1aW50MTZfdCB1c0NyaXRpY2FsTmVzdGluZzsJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwlwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7CQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogTm93IGludGVycnVwdHMgYXJlIGRpc2FibGVkIHVsQ3JpdGljYWxOZXN0aW5nIGNhbiBiZSBhY2Nlc3NlZCAqLwkJCVwNCisJLyogZGlyZWN0bHkuICBJbmNyZW1lbnQgdWxDcml0aWNhbE5lc3RpbmcgdG8ga2VlcCBhIGNvdW50IG9mIGhvdyBtYW55ICovCVwNCisJLyogdGltZXMgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgaGFzIGJlZW4gY2FsbGVkLiAqLwkJCQkJCQlcDQorCXVzQ3JpdGljYWxOZXN0aW5nKys7CQkJCQkJCQkJCQkJCQlcDQorfQ0KIA0KLSAgICAjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBleHRlcm4gdm9sYXRpbGUgdWludDE2X3QgdXNDcml0aWNhbE5lc3Rpbmc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGlmKCB1c0NyaXRpY2FsTmVzdGluZyA+IHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkcgKSAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIERlY3JlbWVudCB0aGUgbmVzdGluZyBjb3VudCBhcyB3ZSBhcmUgbGVhdmluZyBhIGNyaXRpY2FsIHNlY3Rpb24uICovIFwNCi0gICAgICAgICAgICB1c0NyaXRpY2FsTmVzdGluZy0tOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIElmIHRoZSBuZXN0aW5nIGxldmVsIGhhcyByZWFjaGVkIHplcm8gdGhlbiBpbnRlcnJ1cHRzIHNob3VsZCBiZSAqLyAgIFwNCi0gICAgICAgICAgICAvKiByZS1lbmFibGVkLiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgaWYoIHVzQ3JpdGljYWxOZXN0aW5nID09IHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkcgKSAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgfQ0KKyNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKQkJCQkJCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCitleHRlcm4gdm9sYXRpbGUgdWludDE2X3QgdXNDcml0aWNhbE5lc3Rpbmc7CQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJaWYoIHVzQ3JpdGljYWxOZXN0aW5nID4gcG9ydE5PX0NSSVRJQ0FMX1NFQ1RJT05fTkVTVElORyApCQkJCQlcDQorCXsJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJLyogRGVjcmVtZW50IHRoZSBuZXN0aW5nIGNvdW50IGFzIHdlIGFyZSBsZWF2aW5nIGEgY3JpdGljYWwgc2VjdGlvbi4gKi8JXA0KKwkJdXNDcml0aWNhbE5lc3RpbmctLTsJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJLyogSWYgdGhlIG5lc3RpbmcgbGV2ZWwgaGFzIHJlYWNoZWQgemVybyB0aGVuIGludGVycnVwdHMgc2hvdWxkIGJlICovCVwNCisJCS8qIHJlLWVuYWJsZWQuICovCQkJCQkJCQkJCQkJCQlcDQorCQlpZiggdXNDcml0aWNhbE5lc3RpbmcgPT0gcG9ydE5PX0NSSVRJQ0FMX1NFQ1RJT05fTkVTVElORyApCQkJCVwNCisJCXsJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkJcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7CQkJCQkJCQkJCQlcDQorCQl9CQkJCQkJCQkJCQkJCQkJCQkJXA0KKwl9CQkJCQkJCQkJCQkJCQkJCQkJCVwNCit9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGFzayB1dGlsaXRpZXMuICovDQotICAgIGV4dGVybiB2b2lkIHZQb3J0U3RhcnQoIHZvaWQgKTsNCi0gICAgI2RlZmluZSBwb3J0WUlFTEQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXNtKCAiQlJLIiApDQotICAgICNkZWZpbmUgcG9ydFlJRUxEX0ZST01fSVNSKCB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4gKSAgICBpZiggeEhpZ2hlclByaW9yaXR5VGFza1dva2VuICkgdlRhc2tTd2l0Y2hDb250ZXh0KCkNCi0gICAgI2RlZmluZSBwb3J0Tk9QKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXNtKCAiTk9QIiApDQorZXh0ZXJuIHZvaWQgdlBvcnRTdGFydCggdm9pZCApOw0KKyNkZWZpbmUgcG9ydFlJRUxEKCkJX19hc20oICJCUksiICkNCisjZGVmaW5lIHBvcnRZSUVMRF9GUk9NX0lTUiggeEhpZ2hlclByaW9yaXR5VGFza1dva2VuICkgaWYoIHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiApIHZUYXNrU3dpdGNoQ29udGV4dCgpDQorI2RlZmluZSBwb3J0Tk9QKCkJX19hc20oICJOT1AiICkNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBIYXJkd3dhcmUgc3BlY2lmaWNzLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVCAgICAyDQotICAgICNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSCAgICAgICggLTEgKQ0KLSAgICAjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUyAgICAoICggVGlja1R5cGVfdCApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UCTINCisjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEgJKCAtMSApDQorI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMJKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBUYXNrIGZ1bmN0aW9uIG1hY3JvcyBhcyBkZXNjcmliZWQgb24gdGhlIEZyZWVSVE9TLm9yZyBXRUIgc2l0ZS4gKi8NCi0gICAgI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQotICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgICAgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCiANCiANCi0gICAgc3RhdGljIF9faW50ZXJydXB0IHZvaWQgUDBfaXNyKCB2b2lkICk7DQorc3RhdGljIF9faW50ZXJydXB0IHZvaWQgUDBfaXNyICAgKHZvaWQpOw0KIA0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiAvKiBPcHRpb24tYnl0ZXMgYW5kIHNlY3VyaXR5IElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KLSAgICAjZGVmaW5lIE9QVF9CWVRFU19TSVpFICAgICAgIDQNCi0gICAgI2RlZmluZSBTRUNVX0lEX1NJWkUgICAgICAgICAxMA0KLSAgICAjZGVmaW5lIFdBVENIRE9HX0RJU0FCTEVEICAgIDB4MDANCi0gICAgI2RlZmluZSBMVklfRU5BQkxFRCAgICAgICAgICAweEZFDQotICAgICNkZWZpbmUgTFZJX0RJU0FCTEVEICAgICAgICAgMHhGRg0KLSAgICAjZGVmaW5lIFJFU0VSVkVEX0ZGICAgICAgICAgIDB4RkYNCi0gICAgI2RlZmluZSBPQ0RfRElTQUJMRUQgICAgICAgICAweDA0DQotICAgICNkZWZpbmUgT0NEX0VOQUJMRUQgICAgICAgICAgMHg4MQ0KLSAgICAjZGVmaW5lIE9DRF9FTkFCTEVEX0VSQVNFICAgIDB4ODANCisjZGVmaW5lIE9QVF9CWVRFU19TSVpFICAgICA0DQorI2RlZmluZSBTRUNVX0lEX1NJWkUgICAgICAgMTANCisjZGVmaW5lIFdBVENIRE9HX0RJU0FCTEVEICAweDAwDQorI2RlZmluZSBMVklfRU5BQkxFRCAgICAgICAgMHhGRQ0KKyNkZWZpbmUgTFZJX0RJU0FCTEVEICAgICAgIDB4RkYNCisjZGVmaW5lIFJFU0VSVkVEX0ZGICAgICAgICAweEZGDQorI2RlZmluZSBPQ0RfRElTQUJMRUQgICAgICAgMHgwNA0KKyNkZWZpbmUgT0NEX0VOQUJMRUQgICAgICAgIDB4ODENCisjZGVmaW5lIE9DRF9FTkFCTEVEX0VSQVNFICAweDgwDQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgfQ0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQogDQogI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvSUFSL0FSTV9DQTVfTm9fR0lDL3BvcnQuYyBiL3BvcnRhYmxlL0lBUi9BUk1fQ0E1X05vX0dJQy9wb3J0LmMKaW5kZXggMzhmN2JiMy4uMjViNWZiNSAxMDA2NDQKLS0tIGEvcG9ydGFibGUvSUFSL0FSTV9DQTVfTm9fR0lDL3BvcnQuYworKysgYi9wb3J0YWJsZS9JQVIvQVJNX0NBNV9Ob19HSUMvcG9ydC5jCkBAIC0zMyw0MiArMzMsNDIgQEAKICNpbmNsdWRlICJ0YXNrLmgiDQogDQogI2lmIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiA9PSAxDQotICAgIC8qIENoZWNrIHRoZSBjb25maWd1cmF0aW9uLiAqLw0KLSAgICAjaWYgKCBjb25maWdNQVhfUFJJT1JJVElFUyA+IDMyICkNCi0gICAgICAgICNlcnJvciBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gY2FuIG9ubHkgYmUgc2V0IHRvIDEgd2hlbiBjb25maWdNQVhfUFJJT1JJVElFUyBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMzIuICBJdCBpcyB2ZXJ5IHJhcmUgdGhhdCBhIHN5c3RlbSByZXF1aXJlcyBtb3JlIHRoYW4gMTAgdG8gMTUgZGlmZmVyZW5jZSBwcmlvcml0aWVzIGFzIHRhc2tzIHRoYXQgc2hhcmUgYSBwcmlvcml0eSB3aWxsIHRpbWUgc2xpY2UuDQotICAgICNlbmRpZg0KKwkvKiBDaGVjayB0aGUgY29uZmlndXJhdGlvbi4gKi8NCisJI2lmKCBjb25maWdNQVhfUFJJT1JJVElFUyA+IDMyICkNCisJCSNlcnJvciBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gY2FuIG9ubHkgYmUgc2V0IHRvIDEgd2hlbiBjb25maWdNQVhfUFJJT1JJVElFUyBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMzIuICBJdCBpcyB2ZXJ5IHJhcmUgdGhhdCBhIHN5c3RlbSByZXF1aXJlcyBtb3JlIHRoYW4gMTAgdG8gMTUgZGlmZmVyZW5jZSBwcmlvcml0aWVzIGFzIHRhc2tzIHRoYXQgc2hhcmUgYSBwcmlvcml0eSB3aWxsIHRpbWUgc2xpY2UuDQorCSNlbmRpZg0KICNlbmRpZiAvKiBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gKi8NCiANCiAjaWZuZGVmIGNvbmZpZ1NFVFVQX1RJQ0tfSU5URVJSVVBUDQotICAgICNlcnJvciBjb25maWdTRVRVUF9USUNLX0lOVEVSUlVQVCgpIG11c3QgYmUgZGVmaW5lZCBpbiBGcmVlUlRPU0NvbmZpZy5oIHRvIGNhbGwgdGhlIGZ1bmN0aW9uIHRoYXQgc2V0cyB1cCB0aGUgdGljayBpbnRlcnJ1cHQuICBBIGRlZmF1bHQgdGhhdCB1c2VzIHRoZSBQSVQgaXMgcHJvdmlkZWQgaW4gdGhlIG9mZmljaWFsIGRlbW8gYXBwbGljYXRpb24uDQorCSNlcnJvciBjb25maWdTRVRVUF9USUNLX0lOVEVSUlVQVCgpIG11c3QgYmUgZGVmaW5lZCBpbiBGcmVlUlRPU0NvbmZpZy5oIHRvIGNhbGwgdGhlIGZ1bmN0aW9uIHRoYXQgc2V0cyB1cCB0aGUgdGljayBpbnRlcnJ1cHQuICBBIGRlZmF1bHQgdGhhdCB1c2VzIHRoZSBQSVQgaXMgcHJvdmlkZWQgaW4gdGhlIG9mZmljaWFsIGRlbW8gYXBwbGljYXRpb24uDQogI2VuZGlmDQogDQogI2lmbmRlZiBjb25maWdDTEVBUl9USUNLX0lOVEVSUlVQVA0KLSAgICAjZXJyb3IgY29uZmlnQ0xFQVJfVElDS19JTlRFUlJVUFQgbXVzdCBiZSBkZWZpbmVkIGluIEZyZWVSVE9TQ29uZmlnLmggdG8gY2xlYXIgd2hpY2ggZXZlciBpbnRlcnJ1cHQgd2FzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRpY2sgaW50ZXJydXB0LiAgQSBkZWZhdWx0IHRoYXQgdXNlcyB0aGUgUElUIGlzIHByb3ZpZGVkIGluIHRoZSBvZmZpY2lhbCBkZW1vIGFwcGxpY2F0aW9uLg0KKwkjZXJyb3IgY29uZmlnQ0xFQVJfVElDS19JTlRFUlJVUFQgbXVzdCBiZSBkZWZpbmVkIGluIEZyZWVSVE9TQ29uZmlnLmggdG8gY2xlYXIgd2hpY2ggZXZlciBpbnRlcnJ1cHQgd2FzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRpY2sgaW50ZXJydXB0LiAgQSBkZWZhdWx0IHRoYXQgdXNlcyB0aGUgUElUIGlzIHByb3ZpZGVkIGluIHRoZSBvZmZpY2lhbCBkZW1vIGFwcGxpY2F0aW9uLg0KICNlbmRpZg0KIA0KIC8qIEEgY3JpdGljYWwgc2VjdGlvbiBpcyBleGl0ZWQgd2hlbiB0aGUgY3JpdGljYWwgc2VjdGlvbiBuZXN0aW5nIGNvdW50IHJlYWNoZXMNCi0gKiB0aGlzIHZhbHVlLiAqLw0KLSNkZWZpbmUgcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgICAgICAgICAgKCAoIHVpbnQzMl90ICkgMCApDQordGhpcyB2YWx1ZS4gKi8NCisjZGVmaW5lIHBvcnROT19DUklUSUNBTF9ORVNUSU5HCQkJKCAoIHVpbnQzMl90ICkgMCApDQogDQogLyogVGFza3MgYXJlIG5vdCBjcmVhdGVkIHdpdGggYSBmbG9hdGluZyBwb2ludCBjb250ZXh0LCBidXQgY2FuIGJlIGdpdmVuIGENCi0gKiBmbG9hdGluZyBwb2ludCBjb250ZXh0IGFmdGVyIHRoZXkgaGF2ZSBiZWVuIGNyZWF0ZWQuICBBIHZhcmlhYmxlIGlzIHN0b3JlZCBhcw0KLSAqIHBhcnQgb2YgdGhlIHRhc2tzIGNvbnRleHQgdGhhdCBob2xkcyBwb3J0Tk9fRkxPQVRJTkdfUE9JTlRfQ09OVEVYVCBpZiB0aGUgdGFzaw0KLSAqIGRvZXMgbm90IGhhdmUgYW4gRlBVIGNvbnRleHQsIG9yIGFueSBvdGhlciB2YWx1ZSBpZiB0aGUgdGFzayBkb2VzIGhhdmUgYW4gRlBVDQotICogY29udGV4dC4gKi8NCi0jZGVmaW5lIHBvcnROT19GTE9BVElOR19QT0lOVF9DT05URVhUICAgICggKCBTdGFja1R5cGVfdCApIDAgKQ0KK2Zsb2F0aW5nIHBvaW50IGNvbnRleHQgYWZ0ZXIgdGhleSBoYXZlIGJlZW4gY3JlYXRlZC4gIEEgdmFyaWFibGUgaXMgc3RvcmVkIGFzDQorcGFydCBvZiB0aGUgdGFza3MgY29udGV4dCB0aGF0IGhvbGRzIHBvcnROT19GTE9BVElOR19QT0lOVF9DT05URVhUIGlmIHRoZSB0YXNrDQorZG9lcyBub3QgaGF2ZSBhbiBGUFUgY29udGV4dCwgb3IgYW55IG90aGVyIHZhbHVlIGlmIHRoZSB0YXNrIGRvZXMgaGF2ZSBhbiBGUFUNCitjb250ZXh0LiAqLw0KKyNkZWZpbmUgcG9ydE5PX0ZMT0FUSU5HX1BPSU5UX0NPTlRFWFQJKCAoIFN0YWNrVHlwZV90ICkgMCApDQogDQogLyogQ29uc3RhbnRzIHJlcXVpcmVkIHRvIHNldHVwIHRoZSBpbml0aWFsIHRhc2sgY29udGV4dC4gKi8NCi0jZGVmaW5lIHBvcnRJTklUSUFMX1NQU1IgICAgICAgICAgICAgICAgICggKCBTdGFja1R5cGVfdCApIDB4MWYgKSAvKiBTeXN0ZW0gbW9kZSwgQVJNIG1vZGUsIGludGVycnVwdHMgZW5hYmxlZC4gKi8NCi0jZGVmaW5lIHBvcnRUSFVNQl9NT0RFX0JJVCAgICAgICAgICAgICAgICggKCBTdGFja1R5cGVfdCApIDB4MjAgKQ0KLSNkZWZpbmUgcG9ydFRIVU1CX01PREVfQUREUkVTUyAgICAgICAgICAgKCAweDAxVUwgKQ0KKyNkZWZpbmUgcG9ydElOSVRJQUxfU1BTUgkJCQkoICggU3RhY2tUeXBlX3QgKSAweDFmICkgLyogU3lzdGVtIG1vZGUsIEFSTSBtb2RlLCBpbnRlcnJ1cHRzIGVuYWJsZWQuICovDQorI2RlZmluZSBwb3J0VEhVTUJfTU9ERV9CSVQJCQkJKCAoIFN0YWNrVHlwZV90ICkgMHgyMCApDQorI2RlZmluZSBwb3J0VEhVTUJfTU9ERV9BRERSRVNTCQkJKCAweDAxVUwgKQ0KIA0KIC8qIE1hc2tzIGFsbCBiaXRzIGluIHRoZSBBUFNSIG90aGVyIHRoYW4gdGhlIG1vZGUgYml0cy4gKi8NCi0jZGVmaW5lIHBvcnRBUFNSX01PREVfQklUU19NQVNLICAgICAgICAgICggMHgxRiApDQorI2RlZmluZSBwb3J0QVBTUl9NT0RFX0JJVFNfTUFTSwkJCSggMHgxRiApDQogDQogLyogVGhlIHZhbHVlIG9mIHRoZSBtb2RlIGJpdHMgaW4gdGhlIEFQU1Igd2hlbiB0aGUgQ1BVIGlzIGV4ZWN1dGluZyBpbiB1c2VyDQotICogbW9kZS4gKi8NCi0jZGVmaW5lIHBvcnRBUFNSX1VTRVJfTU9ERSAgICAgICAgICAgICAgICggMHgxMCApDQorbW9kZS4gKi8NCisjZGVmaW5lIHBvcnRBUFNSX1VTRVJfTU9ERQkJCQkoIDB4MTAgKQ0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KQEAgLTg2LDIxICs4NiwyMSBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogQSB2YXJpYWJsZSBpcyB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGNyaXRpY2FsIHNlY3Rpb24gbmVzdGluZy4gIFRoaXMNCi0gKiB2YXJpYWJsZSBoYXMgdG8gYmUgc3RvcmVkIGFzIHBhcnQgb2YgdGhlIHRhc2sgY29udGV4dCBhbmQgbXVzdCBiZSBpbml0aWFsaXNlZCB0bw0KLSAqIGEgbm9uIHplcm8gdmFsdWUgdG8gZW5zdXJlIGludGVycnVwdHMgZG9uJ3QgaW5hZHZlcnRlbnRseSBiZWNvbWUgdW5tYXNrZWQgYmVmb3JlDQotICogdGhlIHNjaGVkdWxlciBzdGFydHMuICBBcyBpdCBpcyBzdG9yZWQgYXMgcGFydCBvZiB0aGUgdGFzayBjb250ZXh0IGl0IHdpbGwNCi0gKiBhdXRvbWF0aWNhbGx5IGJlIHNldCB0byAwIHdoZW4gdGhlIGZpcnN0IHRhc2sgaXMgc3RhcnRlZC4gKi8NCit2YXJpYWJsZSBoYXMgdG8gYmUgc3RvcmVkIGFzIHBhcnQgb2YgdGhlIHRhc2sgY29udGV4dCBhbmQgbXVzdCBiZSBpbml0aWFsaXNlZCB0bw0KK2Egbm9uIHplcm8gdmFsdWUgdG8gZW5zdXJlIGludGVycnVwdHMgZG9uJ3QgaW5hZHZlcnRlbnRseSBiZWNvbWUgdW5tYXNrZWQgYmVmb3JlDQordGhlIHNjaGVkdWxlciBzdGFydHMuICBBcyBpdCBpcyBzdG9yZWQgYXMgcGFydCBvZiB0aGUgdGFzayBjb250ZXh0IGl0IHdpbGwNCithdXRvbWF0aWNhbGx5IGJlIHNldCB0byAwIHdoZW4gdGhlIGZpcnN0IHRhc2sgaXMgc3RhcnRlZC4gKi8NCiB2b2xhdGlsZSB1aW50MzJfdCB1bENyaXRpY2FsTmVzdGluZyA9IDk5OTlVTDsNCiANCiAvKiBTYXZlZCBhcyBwYXJ0IG9mIHRoZSB0YXNrIGNvbnRleHQuICBJZiB1bFBvcnRUYXNrSGFzRlBVQ29udGV4dCBpcyBub24temVybw0KLSAqIHRoZW4gYSBmbG9hdGluZyBwb2ludCBjb250ZXh0IG11c3QgYmUgc2F2ZWQgYW5kIHJlc3RvcmVkIGZvciB0aGUgdGFzay4gKi8NCit0aGVuIGEgZmxvYXRpbmcgcG9pbnQgY29udGV4dCBtdXN0IGJlIHNhdmVkIGFuZCByZXN0b3JlZCBmb3IgdGhlIHRhc2suICovDQogdWludDMyX3QgdWxQb3J0VGFza0hhc0ZQVUNvbnRleHQgPSBwZEZBTFNFOw0KIA0KIC8qIFNldCB0byAxIHRvIHBlbmQgYSBjb250ZXh0IHN3aXRjaCBmcm9tIGFuIElTUi4gKi8NCiB1aW50MzJfdCB1bFBvcnRZaWVsZFJlcXVpcmVkID0gcGRGQUxTRTsNCiANCiAvKiBDb3VudHMgdGhlIGludGVycnVwdCBuZXN0aW5nIGRlcHRoLiAgQSBjb250ZXh0IHN3aXRjaCBpcyBvbmx5IHBlcmZvcm1lZCBpZg0KLSAqIGlmIHRoZSBuZXN0aW5nIGRlcHRoIGlzIDAuICovDQoraWYgdGhlIG5lc3RpbmcgZGVwdGggaXMgMC4gKi8NCiB1aW50MzJfdCB1bFBvcnRJbnRlcnJ1cHROZXN0aW5nID0gMFVMOw0KIA0KIA0KQEAgLTEwOSwxOTUgKzEwOSwxOTIgQEAKIC8qDQogICogU2VlIGhlYWRlciBmaWxlIGZvciBkZXNjcmlwdGlvbi4NCiAgKi8NCi1TdGFja1R5cGVfdCAqIHB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKiBweFRvcE9mU3RhY2ssDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqIHB2UGFyYW1ldGVycyApDQorU3RhY2tUeXBlX3QgKnB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKnB4VG9wT2ZTdGFjaywgVGFza0Z1bmN0aW9uX3QgcHhDb2RlLCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KIHsNCi0gICAgLyogU2V0dXAgdGhlIGluaXRpYWwgc3RhY2sgb2YgdGhlIHRhc2suICBUaGUgc3RhY2sgaXMgc2V0IGV4YWN0bHkgYXMNCi0gICAgICogZXhwZWN0ZWQgYnkgdGhlIHBvcnRSRVNUT1JFX0NPTlRFWFQoKSBtYWNyby4NCi0gICAgICoNCi0gICAgICogVGhlIGZpc3QgcmVhbCB2YWx1ZSBvbiB0aGUgc3RhY2sgaXMgdGhlIHN0YXR1cyByZWdpc3Rlciwgd2hpY2ggaXMgc2V0IGZvcg0KLSAgICAgKiBzeXN0ZW0gbW9kZSwgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQuICBBIGZldyBOVUxMcyBhcmUgYWRkZWQgZmlyc3QgdG8gZW5zdXJlDQotICAgICAqIEdEQiBkb2VzIG5vdCB0cnkgZGVjb2RpbmcgYSBub24tZXhpc3RlbnQgcmV0dXJuIGFkZHJlc3MuICovDQotICAgICpweFRvcE9mU3RhY2sgPSBOVUxMOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IE5VTEw7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gTlVMTDsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcG9ydElOSVRJQUxfU1BTUjsNCisJLyogU2V0dXAgdGhlIGluaXRpYWwgc3RhY2sgb2YgdGhlIHRhc2suICBUaGUgc3RhY2sgaXMgc2V0IGV4YWN0bHkgYXMNCisJZXhwZWN0ZWQgYnkgdGhlIHBvcnRSRVNUT1JFX0NPTlRFWFQoKSBtYWNyby4NCiANCi0gICAgaWYoICggKCB1aW50MzJfdCApIHB4Q29kZSAmIHBvcnRUSFVNQl9NT0RFX0FERFJFU1MgKSAhPSAweDAwVUwgKQ0KLSAgICB7DQotICAgICAgICAvKiBUaGUgdGFzayB3aWxsIHN0YXJ0IGluIFRIVU1CIG1vZGUuICovDQotICAgICAgICAqcHhUb3BPZlN0YWNrIHw9IHBvcnRUSFVNQl9NT0RFX0JJVDsNCi0gICAgfQ0KKwlUaGUgZmlzdCByZWFsIHZhbHVlIG9uIHRoZSBzdGFjayBpcyB0aGUgc3RhdHVzIHJlZ2lzdGVyLCB3aGljaCBpcyBzZXQgZm9yDQorCXN5c3RlbSBtb2RlLCB3aXRoIGludGVycnVwdHMgZW5hYmxlZC4gIEEgZmV3IE5VTExzIGFyZSBhZGRlZCBmaXJzdCB0byBlbnN1cmUNCisJR0RCIGRvZXMgbm90IHRyeSBkZWNvZGluZyBhIG5vbi1leGlzdGVudCByZXR1cm4gYWRkcmVzcy4gKi8NCisJKnB4VG9wT2ZTdGFjayA9IE5VTEw7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gTlVMTDsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSBOVUxMOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwb3J0SU5JVElBTF9TUFNSOw0KIA0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJaWYoICggKCB1aW50MzJfdCApIHB4Q29kZSAmIHBvcnRUSFVNQl9NT0RFX0FERFJFU1MgKSAhPSAweDAwVUwgKQ0KKwl7DQorCQkvKiBUaGUgdGFzayB3aWxsIHN0YXJ0IGluIFRIVU1CIG1vZGUuICovDQorCQkqcHhUb3BPZlN0YWNrIHw9IHBvcnRUSFVNQl9NT0RFX0JJVDsNCisJfQ0KIA0KLSAgICAvKiBOZXh0IHRoZSByZXR1cm4gYWRkcmVzcywgd2hpY2ggaW4gdGhpcyBjYXNlIGlzIHRoZSBzdGFydCBvZiB0aGUgdGFzay4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBweENvZGU7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgLyogTmV4dCBhbGwgdGhlIHJlZ2lzdGVycyBvdGhlciB0aGFuIHRoZSBzdGFjayBwb2ludGVyLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHBydlRhc2tFeGl0RXJyb3I7IC8qIFIxNCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDEyMTIxMjEyOyAgICAgICAvKiBSMTIgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMTExMTExMTsgICAgICAgLyogUjExICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTAxMDEwMTA7ICAgICAgIC8qIFIxMCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA5MDkwOTA5OyAgICAgICAvKiBSOSAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA4MDgwODA4OyAgICAgICAvKiBSOCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA3MDcwNzA3OyAgICAgICAvKiBSNyAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA2MDYwNjA2OyAgICAgICAvKiBSNiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA1MDUwNTA1OyAgICAgICAvKiBSNSAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA0MDQwNDA0OyAgICAgICAvKiBSNCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAzMDMwMzAzOyAgICAgICAvKiBSMyAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAyMDIwMjAyOyAgICAgICAvKiBSMiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAxMDEwMTAxOyAgICAgICAvKiBSMSAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwdlBhcmFtZXRlcnM7ICAgICAvKiBSMCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJLyogTmV4dCB0aGUgcmV0dXJuIGFkZHJlc3MsIHdoaWNoIGluIHRoaXMgY2FzZSBpcyB0aGUgc3RhcnQgb2YgdGhlIHRhc2suICovDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHhDb2RlOw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgLyogVGhlIHRhc2sgd2lsbCBzdGFydCB3aXRoIGEgY3JpdGljYWwgbmVzdGluZyBjb3VudCBvZiAwIGFzIGludGVycnVwdHMgYXJlDQotICAgICAqIGVuYWJsZWQuICovDQotICAgICpweFRvcE9mU3RhY2sgPSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORzsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIE5leHQgYWxsIHRoZSByZWdpc3RlcnMgb3RoZXIgdGhhbiB0aGUgc3RhY2sgcG9pbnRlci4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwcnZUYXNrRXhpdEVycm9yOwkvKiBSMTQgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMjEyMTIxMjsJLyogUjEyICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTExMTExMTE7CS8qIFIxMSAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDEwMTAxMDEwOwkvKiBSMTAgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwOTA5MDkwOTsJLyogUjkgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwODA4MDgwODsJLyogUjggKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNzA3MDcwNzsJLyogUjcgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNjA2MDYwNjsJLyogUjYgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNTA1MDUwNTsJLyogUjUgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNDA0MDQwNDsJLyogUjQgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMzAzMDMwMzsJLyogUjMgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMjAyMDIwMjsJLyogUjIgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMTAxMDEwMTsJLyogUjEgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHZQYXJhbWV0ZXJzOyAvKiBSMCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgLyogVGhlIHRhc2sgd2lsbCBzdGFydCB3aXRob3V0IGEgZmxvYXRpbmcgcG9pbnQgY29udGV4dC4gIEEgdGFzayB0aGF0IHVzZXMNCi0gICAgICogdGhlIGZsb2F0aW5nIHBvaW50IGhhcmR3YXJlIG11c3QgY2FsbCB2UG9ydFRhc2tVc2VzRlBVKCkgYmVmb3JlIGV4ZWN1dGluZw0KLSAgICAgKiBhbnkgZmxvYXRpbmcgcG9pbnQgaW5zdHJ1Y3Rpb25zLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gcG9ydE5PX0ZMT0FUSU5HX1BPSU5UX0NPTlRFWFQ7DQorCS8qIFRoZSB0YXNrIHdpbGwgc3RhcnQgd2l0aCBhIGNyaXRpY2FsIG5lc3RpbmcgY291bnQgb2YgMCBhcyBpbnRlcnJ1cHRzIGFyZQ0KKwllbmFibGVkLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkc7DQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICByZXR1cm4gcHhUb3BPZlN0YWNrOw0KKwkvKiBUaGUgdGFzayB3aWxsIHN0YXJ0IHdpdGhvdXQgYSBmbG9hdGluZyBwb2ludCBjb250ZXh0LiAgQSB0YXNrIHRoYXQgdXNlcw0KKwl0aGUgZmxvYXRpbmcgcG9pbnQgaGFyZHdhcmUgbXVzdCBjYWxsIHZQb3J0VGFza1VzZXNGUFUoKSBiZWZvcmUgZXhlY3V0aW5nDQorCWFueSBmbG9hdGluZyBwb2ludCBpbnN0cnVjdGlvbnMuICovDQorCSpweFRvcE9mU3RhY2sgPSBwb3J0Tk9fRkxPQVRJTkdfUE9JTlRfQ09OVEVYVDsNCisNCisJcmV0dXJuIHB4VG9wT2ZTdGFjazsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogc3RhdGljIHZvaWQgcHJ2VGFza0V4aXRFcnJvciggdm9pZCApDQogew0KLSAgICAvKiBBIGZ1bmN0aW9uIHRoYXQgaW1wbGVtZW50cyBhIHRhc2sgbXVzdCBub3QgZXhpdCBvciBhdHRlbXB0IHRvIHJldHVybiB0bw0KLSAgICAgKiBpdHMgY2FsbGVyIGFzIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmV0dXJuIHRvLiAgSWYgYSB0YXNrIHdhbnRzIHRvIGV4aXQgaXQNCi0gICAgICogc2hvdWxkIGluc3RlYWQgY2FsbCB2VGFza0RlbGV0ZSggTlVMTCApLg0KLSAgICAgKg0KLSAgICAgKiBBcnRpZmljaWFsbHkgZm9yY2UgYW4gYXNzZXJ0KCkgdG8gYmUgdHJpZ2dlcmVkIGlmIGNvbmZpZ0FTU0VSVCgpIGlzDQotICAgICAqIGRlZmluZWQsIHRoZW4gc3RvcCBoZXJlIHNvIGFwcGxpY2F0aW9uIHdyaXRlcnMgY2FuIGNhdGNoIHRoZSBlcnJvci4gKi8NCi0gICAgY29uZmlnQVNTRVJUKCB1bFBvcnRJbnRlcnJ1cHROZXN0aW5nID09IH4wVUwgKTsNCi0gICAgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOw0KKwkvKiBBIGZ1bmN0aW9uIHRoYXQgaW1wbGVtZW50cyBhIHRhc2sgbXVzdCBub3QgZXhpdCBvciBhdHRlbXB0IHRvIHJldHVybiB0bw0KKwlpdHMgY2FsbGVyIGFzIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmV0dXJuIHRvLiAgSWYgYSB0YXNrIHdhbnRzIHRvIGV4aXQgaXQNCisJc2hvdWxkIGluc3RlYWQgY2FsbCB2VGFza0RlbGV0ZSggTlVMTCApLg0KIA0KLSAgICBmb3IoIDsgOyApDQotICAgIHsNCi0gICAgfQ0KKwlBcnRpZmljaWFsbHkgZm9yY2UgYW4gYXNzZXJ0KCkgdG8gYmUgdHJpZ2dlcmVkIGlmIGNvbmZpZ0FTU0VSVCgpIGlzDQorCWRlZmluZWQsIHRoZW4gc3RvcCBoZXJlIHNvIGFwcGxpY2F0aW9uIHdyaXRlcnMgY2FuIGNhdGNoIHRoZSBlcnJvci4gKi8NCisJY29uZmlnQVNTRVJUKCB1bFBvcnRJbnRlcnJ1cHROZXN0aW5nID09IH4wVUwgKTsNCisJcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOw0KKwlmb3IoIDs7ICk7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIEJhc2VUeXBlX3QgeFBvcnRTdGFydFNjaGVkdWxlciggdm9pZCApDQogew0KLSAgICB1aW50MzJfdCB1bEFQU1I7DQordWludDMyX3QgdWxBUFNSOw0KIA0KLSAgICAvKiBPbmx5IGNvbnRpbnVlIGlmIHRoZSBDUFUgaXMgbm90IGluIFVzZXIgbW9kZS4gIFRoZSBDUFUgbXVzdCBiZSBpbiBhDQotICAgICAqIFByaXZpbGVnZWQgbW9kZSBmb3IgdGhlIHNjaGVkdWxlciB0byBzdGFydC4gKi8NCi0gICAgX19hc20gdm9sYXRpbGUgKCAiTVJTICUwLCBBUFNSIiA6ICI9ciIgKCB1bEFQU1IgKSApOw0KKwkvKiBPbmx5IGNvbnRpbnVlIGlmIHRoZSBDUFUgaXMgbm90IGluIFVzZXIgbW9kZS4gIFRoZSBDUFUgbXVzdCBiZSBpbiBhDQorCVByaXZpbGVnZWQgbW9kZSBmb3IgdGhlIHNjaGVkdWxlciB0byBzdGFydC4gKi8NCisJX19hc20gdm9sYXRpbGUgKCAiTVJTICUwLCBBUFNSIiA6ICI9ciIgKCB1bEFQU1IgKSApOw0KKwl1bEFQU1IgJj0gcG9ydEFQU1JfTU9ERV9CSVRTX01BU0s7DQorCWNvbmZpZ0FTU0VSVCggdWxBUFNSICE9IHBvcnRBUFNSX1VTRVJfTU9ERSApOw0KIA0KLSAgICB1bEFQU1IgJj0gcG9ydEFQU1JfTU9ERV9CSVRTX01BU0s7DQotICAgIGNvbmZpZ0FTU0VSVCggdWxBUFNSICE9IHBvcnRBUFNSX1VTRVJfTU9ERSApOw0KKwlpZiggdWxBUFNSICE9IHBvcnRBUFNSX1VTRVJfTU9ERSApDQorCXsNCisJCS8qIFN0YXJ0IHRoZSB0aW1lciB0aGF0IGdlbmVyYXRlcyB0aGUgdGljayBJU1IuICovDQorCQljb25maWdTRVRVUF9USUNLX0lOVEVSUlVQVCgpOw0KKwkJdlBvcnRSZXN0b3JlVGFza0NvbnRleHQoKTsNCisJfQ0KIA0KLSAgICBpZiggdWxBUFNSICE9IHBvcnRBUFNSX1VTRVJfTU9ERSApDQotICAgIHsNCi0gICAgICAgIC8qIFN0YXJ0IHRoZSB0aW1lciB0aGF0IGdlbmVyYXRlcyB0aGUgdGljayBJU1IuICovDQotICAgICAgICBjb25maWdTRVRVUF9USUNLX0lOVEVSUlVQVCgpOw0KLSAgICAgICAgdlBvcnRSZXN0b3JlVGFza0NvbnRleHQoKTsNCi0gICAgfQ0KLQ0KLSAgICAvKiBXaWxsIG9ubHkgZ2V0IGhlcmUgaWYgdlRhc2tTdGFydFNjaGVkdWxlcigpIHdhcyBjYWxsZWQgd2l0aCB0aGUgQ1BVIGluDQotICAgICAqIGEgbm9uLXByaXZpbGVnZWQgbW9kZSBvciB0aGUgYmluYXJ5IHBvaW50IHJlZ2lzdGVyIHdhcyBub3Qgc2V0IHRvIGl0cyBsb3dlc3QNCi0gICAgICogcG9zc2libGUgdmFsdWUuICovDQotICAgIHJldHVybiAwOw0KKwkvKiBXaWxsIG9ubHkgZ2V0IGhlcmUgaWYgdlRhc2tTdGFydFNjaGVkdWxlcigpIHdhcyBjYWxsZWQgd2l0aCB0aGUgQ1BVIGluDQorCWEgbm9uLXByaXZpbGVnZWQgbW9kZSBvciB0aGUgYmluYXJ5IHBvaW50IHJlZ2lzdGVyIHdhcyBub3Qgc2V0IHRvIGl0cyBsb3dlc3QNCisJcG9zc2libGUgdmFsdWUuICovDQorCXJldHVybiAwOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0RW5kU2NoZWR1bGVyKCB2b2lkICkNCiB7DQotICAgIC8qIE5vdCBpbXBsZW1lbnRlZCBpbiBwb3J0cyB3aGVyZSB0aGVyZSBpcyBub3RoaW5nIHRvIHJldHVybiB0by4NCi0gICAgICogQXJ0aWZpY2lhbGx5IGZvcmNlIGFuIGFzc2VydC4gKi8NCi0gICAgY29uZmlnQVNTRVJUKCB1bENyaXRpY2FsTmVzdGluZyA9PSAxMDAwVUwgKTsNCisJLyogTm90IGltcGxlbWVudGVkIGluIHBvcnRzIHdoZXJlIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmV0dXJuIHRvLg0KKwlBcnRpZmljaWFsbHkgZm9yY2UgYW4gYXNzZXJ0LiAqLw0KKwljb25maWdBU1NFUlQoIHVsQ3JpdGljYWxOZXN0aW5nID09IDEwMDBVTCApOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCggdm9pZCApDQogew0KLSAgICBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7DQorCXBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsNCiANCi0gICAgLyogTm93IGludGVycnVwdHMgYXJlIGRpc2FibGVkIHVsQ3JpdGljYWxOZXN0aW5nIGNhbiBiZSBhY2Nlc3NlZA0KLSAgICAgKiBkaXJlY3RseS4gIEluY3JlbWVudCB1bENyaXRpY2FsTmVzdGluZyB0byBrZWVwIGEgY291bnQgb2YgaG93IG1hbnkgdGltZXMNCi0gICAgICogcG9ydEVOVEVSX0NSSVRJQ0FMKCkgaGFzIGJlZW4gY2FsbGVkLiAqLw0KLSAgICB1bENyaXRpY2FsTmVzdGluZysrOw0KKwkvKiBOb3cgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgdWxDcml0aWNhbE5lc3RpbmcgY2FuIGJlIGFjY2Vzc2VkDQorCWRpcmVjdGx5LiAgSW5jcmVtZW50IHVsQ3JpdGljYWxOZXN0aW5nIHRvIGtlZXAgYSBjb3VudCBvZiBob3cgbWFueSB0aW1lcw0KKwlwb3J0RU5URVJfQ1JJVElDQUwoKSBoYXMgYmVlbiBjYWxsZWQuICovDQorCXVsQ3JpdGljYWxOZXN0aW5nKys7DQogDQotICAgIC8qIFRoaXMgaXMgbm90IHRoZSBpbnRlcnJ1cHQgc2FmZSB2ZXJzaW9uIG9mIHRoZSBlbnRlciBjcml0aWNhbCBmdW5jdGlvbiBzbw0KLSAgICAgKiBhc3NlcnQoKSBpZiBpdCBpcyBiZWluZyBjYWxsZWQgZnJvbSBhbiBpbnRlcnJ1cHQgY29udGV4dC4gIE9ubHkgQVBJDQotICAgICAqIGZ1bmN0aW9ucyB0aGF0IGVuZCBpbiAiRnJvbUlTUiIgY2FuIGJlIHVzZWQgaW4gYW4gaW50ZXJydXB0LiAgT25seSBhc3NlcnQgaWYNCi0gICAgICogdGhlIGNyaXRpY2FsIG5lc3RpbmcgY291bnQgaXMgMSB0byBwcm90ZWN0IGFnYWluc3QgcmVjdXJzaXZlIGNhbGxzIGlmIHRoZQ0KLSAgICAgKiBhc3NlcnQgZnVuY3Rpb24gYWxzbyB1c2VzIGEgY3JpdGljYWwgc2VjdGlvbi4gKi8NCi0gICAgaWYoIHVsQ3JpdGljYWxOZXN0aW5nID09IDEgKQ0KLSAgICB7DQotICAgICAgICBjb25maWdBU1NFUlQoIHVsUG9ydEludGVycnVwdE5lc3RpbmcgPT0gMCApOw0KLSAgICB9DQorCS8qIFRoaXMgaXMgbm90IHRoZSBpbnRlcnJ1cHQgc2FmZSB2ZXJzaW9uIG9mIHRoZSBlbnRlciBjcml0aWNhbCBmdW5jdGlvbiBzbw0KKwlhc3NlcnQoKSBpZiBpdCBpcyBiZWluZyBjYWxsZWQgZnJvbSBhbiBpbnRlcnJ1cHQgY29udGV4dC4gIE9ubHkgQVBJDQorCWZ1bmN0aW9ucyB0aGF0IGVuZCBpbiAiRnJvbUlTUiIgY2FuIGJlIHVzZWQgaW4gYW4gaW50ZXJydXB0LiAgT25seSBhc3NlcnQgaWYNCisJdGhlIGNyaXRpY2FsIG5lc3RpbmcgY291bnQgaXMgMSB0byBwcm90ZWN0IGFnYWluc3QgcmVjdXJzaXZlIGNhbGxzIGlmIHRoZQ0KKwlhc3NlcnQgZnVuY3Rpb24gYWxzbyB1c2VzIGEgY3JpdGljYWwgc2VjdGlvbi4gKi8NCisJaWYoIHVsQ3JpdGljYWxOZXN0aW5nID09IDEgKQ0KKwl7DQorCQljb25maWdBU1NFUlQoIHVsUG9ydEludGVycnVwdE5lc3RpbmcgPT0gMCApOw0KKwl9DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoIHZvaWQgKQ0KIHsNCi0gICAgaWYoIHVsQ3JpdGljYWxOZXN0aW5nID4gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgKQ0KLSAgICB7DQotICAgICAgICAvKiBEZWNyZW1lbnQgdGhlIG5lc3RpbmcgY291bnQgYXMgdGhlIGNyaXRpY2FsIHNlY3Rpb24gaXMgYmVpbmcNCi0gICAgICAgICAqIGV4aXRlZC4gKi8NCi0gICAgICAgIHVsQ3JpdGljYWxOZXN0aW5nLS07DQorCWlmKCB1bENyaXRpY2FsTmVzdGluZyA+IHBvcnROT19DUklUSUNBTF9ORVNUSU5HICkNCisJew0KKwkJLyogRGVjcmVtZW50IHRoZSBuZXN0aW5nIGNvdW50IGFzIHRoZSBjcml0aWNhbCBzZWN0aW9uIGlzIGJlaW5nDQorCQlleGl0ZWQuICovDQorCQl1bENyaXRpY2FsTmVzdGluZy0tOw0KIA0KLSAgICAgICAgLyogSWYgdGhlIG5lc3RpbmcgbGV2ZWwgaGFzIHJlYWNoZWQgemVybyB0aGVuIGFsbCBpbnRlcnJ1cHQNCi0gICAgICAgICAqIHByaW9yaXRpZXMgbXVzdCBiZSByZS1lbmFibGVkLiAqLw0KLSAgICAgICAgaWYoIHVsQ3JpdGljYWxOZXN0aW5nID09IHBvcnROT19DUklUSUNBTF9ORVNUSU5HICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICAvKiBDcml0aWNhbCBuZXN0aW5nIGhhcyByZWFjaGVkIHplcm8gc28gYWxsIGludGVycnVwdCBwcmlvcml0aWVzDQotICAgICAgICAgICAgICogc2hvdWxkIGJlIHVubWFza2VkLiAqLw0KLSAgICAgICAgICAgIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpOw0KLSAgICAgICAgfQ0KLSAgICB9DQorCQkvKiBJZiB0aGUgbmVzdGluZyBsZXZlbCBoYXMgcmVhY2hlZCB6ZXJvIHRoZW4gYWxsIGludGVycnVwdA0KKwkJcHJpb3JpdGllcyBtdXN0IGJlIHJlLWVuYWJsZWQuICovDQorCQlpZiggdWxDcml0aWNhbE5lc3RpbmcgPT0gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgKQ0KKwkJew0KKwkJCS8qIENyaXRpY2FsIG5lc3RpbmcgaGFzIHJlYWNoZWQgemVybyBzbyBhbGwgaW50ZXJydXB0IHByaW9yaXRpZXMNCisJCQlzaG91bGQgYmUgdW5tYXNrZWQuICovDQorCQkJcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7DQorCQl9DQorCX0NCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogdm9pZCBGcmVlUlRPU19UaWNrX0hhbmRsZXIoIHZvaWQgKQ0KIHsNCi0gICAgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOw0KKwlwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7DQogDQotICAgIC8qIEluY3JlbWVudCB0aGUgUlRPUyB0aWNrLiAqLw0KLSAgICBpZiggeFRhc2tJbmNyZW1lbnRUaWNrKCkgIT0gcGRGQUxTRSApDQotICAgIHsNCi0gICAgICAgIHVsUG9ydFlpZWxkUmVxdWlyZWQgPSBwZFRSVUU7DQotICAgIH0NCisJLyogSW5jcmVtZW50IHRoZSBSVE9TIHRpY2suICovDQorCWlmKCB4VGFza0luY3JlbWVudFRpY2soKSAhPSBwZEZBTFNFICkNCisJew0KKwkJdWxQb3J0WWllbGRSZXF1aXJlZCA9IHBkVFJVRTsNCisJfQ0KIA0KLSAgICBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKTsNCi0gICAgY29uZmlnQ0xFQVJfVElDS19JTlRFUlJVUFQoKTsNCisJcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7DQorCWNvbmZpZ0NMRUFSX1RJQ0tfSU5URVJSVVBUKCk7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlBvcnRUYXNrVXNlc0ZQVSggdm9pZCApDQogew0KLSAgICB1aW50MzJfdCB1bEluaXRpYWxGUFNDUiA9IDA7DQordWludDMyX3QgdWxJbml0aWFsRlBTQ1IgPSAwOw0KIA0KLSAgICAvKiBBIHRhc2sgaXMgcmVnaXN0ZXJpbmcgdGhlIGZhY3QgdGhhdCBpdCBuZWVkcyBhbiBGUFUgY29udGV4dC4gIFNldCB0aGUNCi0gICAgICogRlBVIGZsYWcgKHdoaWNoIGlzIHNhdmVkIGFzIHBhcnQgb2YgdGhlIHRhc2sgY29udGV4dCkuICovDQotICAgIHVsUG9ydFRhc2tIYXNGUFVDb250ZXh0ID0gcGRUUlVFOw0KKwkvKiBBIHRhc2sgaXMgcmVnaXN0ZXJpbmcgdGhlIGZhY3QgdGhhdCBpdCBuZWVkcyBhbiBGUFUgY29udGV4dC4gIFNldCB0aGUNCisJRlBVIGZsYWcgKHdoaWNoIGlzIHNhdmVkIGFzIHBhcnQgb2YgdGhlIHRhc2sgY29udGV4dCkuICovDQorCXVsUG9ydFRhc2tIYXNGUFVDb250ZXh0ID0gcGRUUlVFOw0KIA0KLSAgICAvKiBJbml0aWFsaXNlIHRoZSBmbG9hdGluZyBwb2ludCBzdGF0dXMgcmVnaXN0ZXIuICovDQotICAgIF9fYXNtKCAiRk1YUiAJRlBTQ1IsICUwIjo6InIiICggdWxJbml0aWFsRlBTQ1IgKSApOw0KKwkvKiBJbml0aWFsaXNlIHRoZSBmbG9hdGluZyBwb2ludCBzdGF0dXMgcmVnaXN0ZXIuICovDQorCV9fYXNtKCAiRk1YUiAJRlBTQ1IsICUwIiA6OiAiciIgKHVsSW5pdGlhbEZQU0NSKSApOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisNCisNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9JQVIvQVJNX0NBNV9Ob19HSUMvcG9ydEFTTS5oIGIvcG9ydGFibGUvSUFSL0FSTV9DQTVfTm9fR0lDL3BvcnRBU00uaAppbmRleCBlYmM5ZjAxLi5jMDUwMjY4IDEwMDY0NAotLS0gYS9wb3J0YWJsZS9JQVIvQVJNX0NBNV9Ob19HSUMvcG9ydEFTTS5oCisrKyBiL3BvcnRhYmxlL0lBUi9BUk1fQ0E1X05vX0dJQy9wb3J0QVNNLmgKQEAgLTEsMTI3ICsxLDExMyBAQAotOyAvKg0KLSAgICogOyAqIEZyZWVSVE9TIEtlcm5lbCBWMTAuMy4xDQotICAgKiA7ICogQ29weXJpZ2h0IChDKSAyMDIwIEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuICBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICogOyAqDQotICAgKiA7ICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZg0KLSAgICogOyAqIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluDQotICAgKiA7ICogdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bw0KLSAgICogOyAqIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mDQotICAgKiA7ICogdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLA0KLSAgICogOyAqIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOg0KLSAgICogOyAqDQotICAgKiA7ICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsDQotICAgKiA7ICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4NCi0gICAqIDsgKg0KLSAgICogOyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SDQotICAgKiA7ICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MNCi0gICAqIDsgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1INCi0gICAqIDsgKiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVINCi0gICAqIDsgKiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTg0KLSAgICogOyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuDQotICAgKiA7ICoNCi0gICAqIDsgKiBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZw0KLSAgICogOyAqIGh0dHA6Ly9hd3MuYW1hem9uLmNvbS9mcmVlcnRvcw0KLSAgICogOyAqDQotICAgKiA7ICogMSB0YWIgPT0gNCBzcGFjZXMhDQotICAgKiA7ICovDQorOy8qDQorOyAqIEZyZWVSVE9TIEtlcm5lbCBWMTAuMy4xDQorOyAqIENvcHlyaWdodCAoQykgMjAyMCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCis7ICoNCis7ICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZg0KKzsgKiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbg0KKzsgKiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvDQorOyAqIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mDQorOyAqIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywNCis7ICogc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6DQorOyAqDQorOyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbA0KKzsgKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLg0KKzsgKg0KKzsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUg0KKzsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUw0KKzsgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1INCis7ICogQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSDQorOyAqIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElODQorOyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuDQorOyAqDQorOyAqIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnDQorOyAqIGh0dHA6Ly9hd3MuYW1hem9uLmNvbS9mcmVlcnRvcw0KKzsgKg0KKzsgKiAxIHRhYiA9PSA0IHNwYWNlcyENCis7ICovDQogDQotRVhURVJOIHZUYXNrU3dpdGNoQ29udGV4dA0KLUVYVEVSTiB1bENyaXRpY2FsTmVzdGluZw0KLUVYVEVSTiBweEN1cnJlbnRUQ0INCi1FWFRFUk4gdWxQb3J0VGFza0hhc0ZQVUNvbnRleHQNCi1FWFRFUk4gdWxBc21BUElQcmlvcml0eU1hc2sNCisJRVhURVJOCXZUYXNrU3dpdGNoQ29udGV4dA0KKwlFWFRFUk4gIHVsQ3JpdGljYWxOZXN0aW5nDQorCUVYVEVSTglweEN1cnJlbnRUQ0INCisJRVhURVJOCXVsUG9ydFRhc2tIYXNGUFVDb250ZXh0DQorCUVYVEVSTiAgdWxBc21BUElQcmlvcml0eU1hc2sNCiANCiBwb3J0U0FWRV9DT05URVhUIG1hY3JvDQogDQotOw0KLVNhdmUgdGhlIExSIGFuZCBTUFNSIG9udG8gdGhlIHN5c3RlbSBtb2RlIHN0YWNrIGJlZm9yZSBzd2l0Y2hpbmcgdG8NCi07DQotc3lzdGVtIG1vZGUgdG8gc2F2ZSB0aGUgcmVtYWluaW5nIHN5c3RlbSBtb2RlIHJlZ2lzdGVycw0KLVNSU0RCIHNwICEsICMgU1lTX01PREUNCi0gICAgICBDUFMgICAgICMgU1lTX01PREUNCi0gICAgICBQVVNIICAgIHsgUjAgLSBSMTIsIFIxNCB9DQorCTsgU2F2ZSB0aGUgTFIgYW5kIFNQU1Igb250byB0aGUgc3lzdGVtIG1vZGUgc3RhY2sgYmVmb3JlIHN3aXRjaGluZyB0bw0KKwk7IHN5c3RlbSBtb2RlIHRvIHNhdmUgdGhlIHJlbWFpbmluZyBzeXN0ZW0gbW9kZSByZWdpc3RlcnMNCisJU1JTREIJc3AhLCAjU1lTX01PREUNCisJQ1BTCQkjU1lTX01PREUNCisJUFVTSAl7UjAtUjEyLCBSMTR9DQogDQotOw0KLVB1c2ggdGhlIGNyaXRpY2FsIG5lc3RpbmcgY291bnQNCi1MRFIgUjIsID0gdWxDcml0aWNhbE5lc3RpbmcNCi0gICAgICAgICAgTERSIFIxLCBbIFIyIF0NCi1QVVNIICAgIHsgUjEgfQ0KKwk7IFB1c2ggdGhlIGNyaXRpY2FsIG5lc3RpbmcgY291bnQNCisJTERSCQlSMiwgPXVsQ3JpdGljYWxOZXN0aW5nDQorCUxEUgkJUjEsIFtSMl0NCisJUFVTSAl7UjF9DQogDQotOw0KLURvZXMgdGhlIHRhc2sgaGF2ZSBhIGZsb2F0aW5nIHBvaW50IGNvbnRleHQgdGhhdCBuZWVkcyBzYXZpbmcgPyBJZg0KLTsNCi11bFBvcnRUYXNrSGFzRlBVQ29udGV4dCBpcyAwIHRoZW4gbm8uDQotICAgTERSIFIyLCA9IHVsUG9ydFRhc2tIYXNGUFVDb250ZXh0DQotICAgICAgICAgICAgIExEUiBSMywgWyBSMiBdDQotQ01QIFIzLCAjIDANCisJOyBEb2VzIHRoZSB0YXNrIGhhdmUgYSBmbG9hdGluZyBwb2ludCBjb250ZXh0IHRoYXQgbmVlZHMgc2F2aW5nPyAgSWYNCisJOyB1bFBvcnRUYXNrSGFzRlBVQ29udGV4dCBpcyAwIHRoZW4gbm8uDQorCUxEUgkJUjIsID11bFBvcnRUYXNrSGFzRlBVQ29udGV4dA0KKwlMRFIJCVIzLCBbUjJdDQorCUNNUAkJUjMsICMwDQogDQotOw0KLVNhdmUgdGhlIGZsb2F0aW5nIHBvaW50IGNvbnRleHQsIGlmIGFueQ0KLUZNUlhORSBSMSwgRlBTQ1INCi0gICAgICAgICAgICAgICAgICAgICAgICBWUFVTSE5FIHsgRDAgLSBEMTUgfQ0KKwk7IFNhdmUgdGhlIGZsb2F0aW5nIHBvaW50IGNvbnRleHQsIGlmIGFueQ0KKwlGTVJYTkUgIFIxLCAgRlBTQ1INCisJVlBVU0hORSB7RDAtRDE1fQ0KICNpZiBjb25maWdGUFVfRDMyID09IDENCi0gICAgVlBVU0hORSB7IEQxNiAtIEQzMSB9DQotI2VuZGlmOyBjb25maWdGUFVfRDMyDQotUFVTSE5FICB7IFIxIH0NCisJVlBVU0hORQl7RDE2LUQzMX0NCisjZW5kaWYgOyBjb25maWdGUFVfRDMyDQorCVBVU0hORQl7UjF9DQogDQotOw0KLVNhdmUgdWxQb3J0VGFza0hhc0ZQVUNvbnRleHQgaXRzZWxmDQotICAgIFBVU0ggICAgeyBSMyB9DQorCTsgU2F2ZSB1bFBvcnRUYXNrSGFzRlBVQ29udGV4dCBpdHNlbGYNCisJUFVTSAl7UjN9DQogDQotOw0KLVNhdmUgdGhlIHN0YWNrIHBvaW50ZXIgaW4gdGhlIFRDQg0KLUxEUiBSMCwgPSBweEN1cnJlbnRUQ0INCi0gICAgICAgICAgTERSIFIxLCBbIFIwIF0NCi1TVFIgU1AsIFsgUjEgXQ0KKwk7IFNhdmUgdGhlIHN0YWNrIHBvaW50ZXIgaW4gdGhlIFRDQg0KKwlMRFIJCVIwLCA9cHhDdXJyZW50VENCDQorCUxEUgkJUjEsIFtSMF0NCisJU1RSCQlTUCwgW1IxXQ0KIA0KLWVuZG0NCisJZW5kbQ0KIA0KIDsgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQogDQogcG9ydFJFU1RPUkVfQ09OVEVYVCBtYWNybw0KIA0KLTsNCi1TZXQgdGhlIFNQIHRvIHBvaW50IHRvIHRoZSBzdGFjayBvZiB0aGUgdGFzayBiZWluZyByZXN0b3JlZC4NCi0gICBMRFIgUjAsID0gcHhDdXJyZW50VENCDQotICAgICAgICAgICAgIExEUiBSMSwgWyBSMCBdDQotTERSIFNQLCBbIFIxIF0NCisJOyBTZXQgdGhlIFNQIHRvIHBvaW50IHRvIHRoZSBzdGFjayBvZiB0aGUgdGFzayBiZWluZyByZXN0b3JlZC4NCisJTERSCQlSMCwgPXB4Q3VycmVudFRDQg0KKwlMRFIJCVIxLCBbUjBdDQorCUxEUgkJU1AsIFtSMV0NCiANCi07DQotSXMgdGhlcmUgYSBmbG9hdGluZyBwb2ludCBjb250ZXh0IHRvIHJlc3RvcmUgPyBJZiB0aGUgcmVzdG9yZWQNCi07DQotdWxQb3J0VGFza0hhc0ZQVUNvbnRleHQgaXMgemVybyB0aGVuIG5vLg0KLSAgIExEUiBSMCwgPSB1bFBvcnRUYXNrSGFzRlBVQ29udGV4dA0KLSAgICAgICAgICAgICBQT1AgICAgIHsgUjEgfQ0KLVNUUiBSMSwgWyBSMCBdDQotQ01QIFIxLCAjIDANCisJOyBJcyB0aGVyZSBhIGZsb2F0aW5nIHBvaW50IGNvbnRleHQgdG8gcmVzdG9yZT8gIElmIHRoZSByZXN0b3JlZA0KKwk7IHVsUG9ydFRhc2tIYXNGUFVDb250ZXh0IGlzIHplcm8gdGhlbiBuby4NCisJTERSCQlSMCwgPXVsUG9ydFRhc2tIYXNGUFVDb250ZXh0DQorCVBPUAkJe1IxfQ0KKwlTVFIJCVIxLCBbUjBdDQorCUNNUAkJUjEsICMwDQogDQotOw0KLVJlc3RvcmUgdGhlIGZsb2F0aW5nIHBvaW50IGNvbnRleHQsIGlmIGFueQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFBPUE5FICAgeyBSMCB9DQorCTsgUmVzdG9yZSB0aGUgZmxvYXRpbmcgcG9pbnQgY29udGV4dCwgaWYgYW55DQorCVBPUE5FIAl7UjB9DQogI2lmIGNvbmZpZ0ZQVV9EMzIgPT0gMQ0KLSAgICBWUE9QTkUgIHsgRDE2IC0gRDMxIH0NCi0jZW5kaWY7IGNvbmZpZ0ZQVV9EMzINCi1WUE9QTkUgIHsgRDAgLSBEMTUgfQ0KLVZNU1JORSBGUFNDUiwgUjANCisJVlBPUE5FCXtEMTYtRDMxfQ0KKyNlbmRpZiA7IGNvbmZpZ0ZQVV9EMzINCisJVlBPUE5FCXtEMC1EMTV9DQorCVZNU1JORSAgRlBTQ1IsIFIwDQogDQotOw0KLVJlc3RvcmUgdGhlIGNyaXRpY2FsIHNlY3Rpb24gbmVzdGluZyBkZXB0aA0KLUxEUiBSMCwgPSB1bENyaXRpY2FsTmVzdGluZw0KLSAgICAgICAgICBQT1AgICAgIHsgUjEgfQ0KLVNUUiBSMSwgWyBSMCBdDQorCTsgUmVzdG9yZSB0aGUgY3JpdGljYWwgc2VjdGlvbiBuZXN0aW5nIGRlcHRoDQorCUxEUgkJUjAsID11bENyaXRpY2FsTmVzdGluZw0KKwlQT1AJCXtSMX0NCisJU1RSCQlSMSwgW1IwXQ0KIA0KLTsNCi1SZXN0b3JlIGFsbCBzeXN0ZW0gbW9kZSByZWdpc3RlcnMgb3RoZXIgdGhhbiB0aGUgU1AoIHdoaWNoIGlzIGFscmVhZHkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlaW5nIHVzZWQgKQ0KLVBPUA0KLXsNCi0gICAgUjAgLSBSMTIsIFIxNA0KLX0NCisJOyBSZXN0b3JlIGFsbCBzeXN0ZW0gbW9kZSByZWdpc3RlcnMgb3RoZXIgdGhhbiB0aGUgU1AgKHdoaWNoIGlzIGFscmVhZHkNCisJOyBiZWluZyB1c2VkKQ0KKwlQT1AJCXtSMC1SMTIsIFIxNH0NCiANCi1SZXR1cm4gdG8gdGhlIHRhc2sgY29kZSwgbG9hZGluZyBDUFNSIG9uIHRoZSB3YXkuQ1BTUiBoYXMgdGhlIGludGVycnVwdA0KLTsNCi1lbmFibGUgYml0IHNldCBhcHByb3ByaWF0ZWx5IGZvciB0aGUgdGFzayBhYm91dCB0byBleGVjdXRlLg0KLSAgIFJGRUlBIHNwICENCisJOyBSZXR1cm4gdG8gdGhlIHRhc2sgY29kZSwgbG9hZGluZyBDUFNSIG9uIHRoZSB3YXkuICBDUFNSIGhhcyB0aGUgaW50ZXJydXB0DQorCTsgZW5hYmxlIGJpdCBzZXQgYXBwcm9wcmlhdGVseSBmb3IgdGhlIHRhc2sgYWJvdXQgdG8gZXhlY3V0ZS4NCisJUkZFSUEJc3AhDQogDQotZW5kbQ0KKwllbmRtDQorDQorDQorDQorDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvSUFSL0FSTV9DQTVfTm9fR0lDL3BvcnRtYWNyby5oIGIvcG9ydGFibGUvSUFSL0FSTV9DQTVfTm9fR0lDL3BvcnRtYWNyby5oCmluZGV4IDRjNTU4NGMuLmRhMmYzMGIgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0lBUi9BUk1fQ0E1X05vX0dJQy9wb3J0bWFjcm8uaAorKysgYi9wb3J0YWJsZS9JQVIvQVJNX0NBNV9Ob19HSUMvcG9ydG1hY3JvLmgKQEAgLTI2LDEzNiArMjYsMTM3IEBACiAgKi8NCiANCiAjaWZuZGVmIFBPUlRNQUNST19IDQotICAgICNkZWZpbmUgUE9SVE1BQ1JPX0gNCisjZGVmaW5lIFBPUlRNQUNST19IDQogDQogLyogSUFSIGluY2x1ZGVzLiAqLw0KLSAgICAjaWZkZWYgX19JQ0NBUk1fXw0KKyNpZmRlZiBfX0lDQ0FSTV9fDQogDQotICAgICAgICAjaW5jbHVkZSA8aW50cmluc2ljcy5oPg0KKwkjaW5jbHVkZSA8aW50cmluc2ljcy5oPg0KIA0KLSAgICAgICAgI2lmZGVmIF9fY3BsdXNwbHVzDQotICAgICAgICAgICAgZXh0ZXJuICJDIiB7DQotICAgICAgICAjZW5kaWYNCisJI2lmZGVmIF9fY3BsdXNwbHVzDQorCQlleHRlcm4gIkMiIHsNCisJI2VuZGlmDQogDQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLSAqIFBvcnQgc3BlY2lmaWMgZGVmaW5pdGlvbnMuDQotICoNCi0gKiBUaGUgc2V0dGluZ3MgaW4gdGhpcyBmaWxlIGNvbmZpZ3VyZSBGcmVlUlRPUyBjb3JyZWN0bHkgZm9yIHRoZSBnaXZlbiBoYXJkd2FyZQ0KLSAqIGFuZCBjb21waWxlci4NCi0gKg0KLSAqIFRoZXNlIHNldHRpbmdzIHNob3VsZCBub3QgYmUgYWx0ZXJlZC4NCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotICovDQorCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisJICogUG9ydCBzcGVjaWZpYyBkZWZpbml0aW9ucy4NCisJICoNCisJICogVGhlIHNldHRpbmdzIGluIHRoaXMgZmlsZSBjb25maWd1cmUgRnJlZVJUT1MgY29ycmVjdGx5IGZvciB0aGUgZ2l2ZW4gaGFyZHdhcmUNCisJICogYW5kIGNvbXBpbGVyLg0KKwkgKg0KKwkgKiBUaGVzZSBzZXR0aW5ncyBzaG91bGQgbm90IGJlIGFsdGVyZWQuDQorCSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisJICovDQogDQotLyogVHlwZSBkZWZpbml0aW9ucy4gKi8NCi0gICAgICAgICNkZWZpbmUgcG9ydENIQVIgICAgICAgICAgY2hhcg0KLSAgICAgICAgI2RlZmluZSBwb3J0RkxPQVQgICAgICAgICBmbG9hdA0KLSAgICAgICAgI2RlZmluZSBwb3J0RE9VQkxFICAgICAgICBkb3VibGUNCi0gICAgICAgICNkZWZpbmUgcG9ydExPTkcgICAgICAgICAgbG9uZw0KLSAgICAgICAgI2RlZmluZSBwb3J0U0hPUlQgICAgICAgICBzaG9ydA0KLSAgICAgICAgI2RlZmluZSBwb3J0U1RBQ0tfVFlQRSAgICB1aW50MzJfdA0KLSAgICAgICAgI2RlZmluZSBwb3J0QkFTRV9UWVBFICAgICBsb25nDQorCS8qIFR5cGUgZGVmaW5pdGlvbnMuICovDQorCSNkZWZpbmUgcG9ydENIQVIJCWNoYXINCisJI2RlZmluZSBwb3J0RkxPQVQJCWZsb2F0DQorCSNkZWZpbmUgcG9ydERPVUJMRQkJZG91YmxlDQorCSNkZWZpbmUgcG9ydExPTkcJCWxvbmcNCisJI2RlZmluZSBwb3J0U0hPUlQJCXNob3J0DQorCSNkZWZpbmUgcG9ydFNUQUNLX1RZUEUJdWludDMyX3QNCisJI2RlZmluZSBwb3J0QkFTRV9UWVBFCWxvbmcNCiANCi0gICAgICAgIHR5cGVkZWYgcG9ydFNUQUNLX1RZUEUgICBTdGFja1R5cGVfdDsNCi0gICAgICAgIHR5cGVkZWYgbG9uZyAgICAgICAgICAgICBCYXNlVHlwZV90Ow0KLSAgICAgICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nICAgIFVCYXNlVHlwZV90Ow0KKwl0eXBlZGVmIHBvcnRTVEFDS19UWVBFIFN0YWNrVHlwZV90Ow0KKwl0eXBlZGVmIGxvbmcgQmFzZVR5cGVfdDsNCisJdHlwZWRlZiB1bnNpZ25lZCBsb25nIFVCYXNlVHlwZV90Ow0KIA0KLSAgICAgICAgdHlwZWRlZiB1aW50MzJfdCAgICAgICAgIFRpY2tUeXBlX3Q7DQotICAgICAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgICAgICAgICAgICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTA0KKwl0eXBlZGVmIHVpbnQzMl90IFRpY2tUeXBlX3Q7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwNCiANCi0vKiAzMi1iaXQgdGljayB0eXBlIG9uIGEgMzItYml0IGFyY2hpdGVjdHVyZSwgc28gcmVhZHMgb2YgdGhlIHRpY2sgY291bnQgZG8NCi0gKiBub3QgbmVlZCB0byBiZSBndWFyZGVkIHdpdGggYSBjcml0aWNhbCBzZWN0aW9uLiAqLw0KLSAgICAgICAgI2RlZmluZSBwb3J0VElDS19UWVBFX0lTX0FUT01JQyAgICAxDQorCS8qIDMyLWJpdCB0aWNrIHR5cGUgb24gYSAzMi1iaXQgYXJjaGl0ZWN0dXJlLCBzbyByZWFkcyBvZiB0aGUgdGljayBjb3VudCBkbw0KKwlub3QgbmVlZCB0byBiZSBndWFyZGVkIHdpdGggYSBjcml0aWNhbCBzZWN0aW9uLiAqLw0KKwkjZGVmaW5lIHBvcnRUSUNLX1RZUEVfSVNfQVRPTUlDIDENCiANCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQotLyogSGFyZHdhcmUgc3BlY2lmaWNzLiAqLw0KLSAgICAgICAgI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RIICAgICAgKCAtMSApDQotICAgICAgICAjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUyAgICAoICggVGlja1R5cGVfdCApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KLSAgICAgICAgI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQgICAgOA0KKwkvKiBIYXJkd2FyZSBzcGVjaWZpY3MuICovDQorCSNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJCSggLTEgKQ0KKwkjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUwkJCSggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQorCSNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UCQkJOA0KIA0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0vKiBUYXNrIHV0aWxpdGllcy4gKi8NCisJLyogVGFzayB1dGlsaXRpZXMuICovDQogDQotLyogQ2FsbGVkIGF0IHRoZSBlbmQgb2YgYW4gSVNSIHRoYXQgY2FuIGNhdXNlIGEgY29udGV4dCBzd2l0Y2guICovDQotICAgICAgICAjZGVmaW5lIHBvcnRFTkRfU1dJVENISU5HX0lTUiggeFN3aXRjaFJlcXVpcmVkICkgXA0KLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGV4dGVybiB1aW50MzJfdCB1bFBvcnRZaWVsZFJlcXVpcmVkOyAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgaWYoIHhTd2l0Y2hSZXF1aXJlZCAhPSBwZEZBTFNFICkgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgdWxQb3J0WWllbGRSZXF1aXJlZCA9IHBkVFJVRTsgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgfQ0KKwkvKiBDYWxsZWQgYXQgdGhlIGVuZCBvZiBhbiBJU1IgdGhhdCBjYW4gY2F1c2UgYSBjb250ZXh0IHN3aXRjaC4gKi8NCisJI2RlZmluZSBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHhTd2l0Y2hSZXF1aXJlZCApXA0KKwl7CQkJCQkJCQkJCQkJXA0KKwlleHRlcm4gdWludDMyX3QgdWxQb3J0WWllbGRSZXF1aXJlZDsJCQlcDQorCQkJCQkJCQkJCQkJCVwNCisJCWlmKCB4U3dpdGNoUmVxdWlyZWQgIT0gcGRGQUxTRSApCQkJXA0KKwkJewkJCQkJCQkJCQkJXA0KKwkJCXVsUG9ydFlpZWxkUmVxdWlyZWQgPSBwZFRSVUU7CQkJXA0KKwkJfQkJCQkJCQkJCQkJXA0KKwl9DQogDQotICAgICAgICAjZGVmaW5lIHBvcnRZSUVMRF9GUk9NX0lTUiggeCApICAgIHBvcnRFTkRfU1dJVENISU5HX0lTUiggeCApDQotICAgICAgICAjZGVmaW5lIHBvcnRZSUVMRCgpICAgICAgICAgICAgICAgIF9fYXNtIHZvbGF0aWxlICggIlNXSSAwIiApOyBfX0lTQigpDQorCSNkZWZpbmUgcG9ydFlJRUxEX0ZST01fSVNSKCB4ICkgcG9ydEVORF9TV0lUQ0hJTkdfSVNSKCB4ICkNCisJI2RlZmluZSBwb3J0WUlFTEQoKSBfX2FzbSB2b2xhdGlsZSAoICJTV0kgMCIgKTsgX19JU0IoKQ0KIA0KIA0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0qIENyaXRpY2FsIHNlY3Rpb24gY29udHJvbA0KLSotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKwkgKiBDcml0aWNhbCBzZWN0aW9uIGNvbnRyb2wNCisJICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0gICAgICAgIGV4dGVybiB2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCggdm9pZCApOw0KLSAgICAgICAgZXh0ZXJuIHZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCi0gICAgICAgIGV4dGVybiB1aW50MzJfdCB1bFBvcnRTZXRJbnRlcnJ1cHRNYXNrKCB2b2lkICk7DQotICAgICAgICBleHRlcm4gdm9pZCB2UG9ydENsZWFySW50ZXJydXB0TWFzayggdWludDMyX3QgdWxOZXdNYXNrVmFsdWUgKTsNCisJZXh0ZXJuIHZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICk7DQorCWV4dGVybiB2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICk7DQorCWV4dGVybiB1aW50MzJfdCB1bFBvcnRTZXRJbnRlcnJ1cHRNYXNrKCB2b2lkICk7DQorCWV4dGVybiB2b2lkIHZQb3J0Q2xlYXJJbnRlcnJ1cHRNYXNrKCB1aW50MzJfdCB1bE5ld01hc2tWYWx1ZSApOw0KIA0KLSAgICAgICAgI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKSAgICAgICAgICAgICAgICAgICAgICB2UG9ydEVudGVyQ3JpdGljYWwoKTsNCi0gICAgICAgICNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKSAgICAgICAgICAgICAgICAgICAgICAgdlBvcnRFeGl0Q3JpdGljYWwoKTsNCi0gICAgICAgICNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpICAgICAgICAgICAgICAgICAgX19kaXNhYmxlX2lycSgpOyBfX0RTQigpOyBfX0lTQigpICAgICAgICAvKiBObyBwcmlvcml0eSBtYXNrIHJlZ2lzdGVyIHNvIGdsb2JhbCBkaXNhYmxlIGlzIHVzZWQuICovDQotICAgICAgICAjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpICAgICAgICAgICAgICAgICAgIF9fZW5hYmxlX2lycSgpDQotICAgICAgICAjZGVmaW5lIHBvcnRTRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKSAgICAgICAgIF9fZ2V0X2ludGVycnVwdF9zdGF0ZSgpOyBfX2Rpc2FibGVfaXJxKCkgLyogTm8gcHJpb3JpdHkgbWFzayByZWdpc3RlciBzbyBnbG9iYWwgZGlzYWJsZSBpcyB1c2VkLiAqLw0KLSAgICAgICAgI2RlZmluZSBwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoIHggKSAgICBfX3NldF9pbnRlcnJ1cHRfc3RhdGUoIHggKQ0KKwkjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpCQl2UG9ydEVudGVyQ3JpdGljYWwoKTsNCisJI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpCQkJdlBvcnRFeGl0Q3JpdGljYWwoKTsNCisJI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkJX19kaXNhYmxlX2lycSgpOyBfX0RTQigpOyBfX0lTQigpIC8qIE5vIHByaW9yaXR5IG1hc2sgcmVnaXN0ZXIgc28gZ2xvYmFsIGRpc2FibGUgaXMgdXNlZC4gKi8NCisJI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKQkJX19lbmFibGVfaXJxKCkNCisJI2RlZmluZSBwb3J0U0VUX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCkJCV9fZ2V0X2ludGVycnVwdF9zdGF0ZSgpOyBfX2Rpc2FibGVfaXJxKCkgLyogTm8gcHJpb3JpdHkgbWFzayByZWdpc3RlciBzbyBnbG9iYWwgZGlzYWJsZSBpcyB1c2VkLiAqLw0KKwkjZGVmaW5lIHBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUih4KQlfX3NldF9pbnRlcnJ1cHRfc3RhdGUoeCkNCiANCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQotLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICBUaGVzZSBhcmUNCi0gKiBub3QgcmVxdWlyZWQgZm9yIHRoaXMgcG9ydCBidXQgaW5jbHVkZWQgaW4gY2FzZSBjb21tb24gZGVtbyBjb2RlIHRoYXQgdXNlcyB0aGVzZQ0KLSAqIG1hY3JvcyBpcyB1c2VkLiAqLw0KLSAgICAgICAgI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQotICAgICAgICAjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgICAgICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCisJLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICBUaGVzZSBhcmUNCisJbm90IHJlcXVpcmVkIGZvciB0aGlzIHBvcnQgYnV0IGluY2x1ZGVkIGluIGNhc2UgY29tbW9uIGRlbW8gY29kZSB0aGF0IHVzZXMgdGhlc2UNCisJbWFjcm9zIGlzIHVzZWQuICovDQorCSNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkJdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorCSNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkJdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQogDQotLyogUHJvdG90eXBlIG9mIHRoZSBGcmVlUlRPUyB0aWNrIGhhbmRsZXIuICBUaGlzIG11c3QgYmUgaW5zdGFsbGVkIGFzIHRoZQ0KLSAqIGhhbmRsZXIgZm9yIHdoaWNoZXZlciBwZXJpcGhlcmFsIGlzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIFJUT1MgdGljay4gKi8NCi0gICAgICAgIHZvaWQgRnJlZVJUT1NfVGlja19IYW5kbGVyKCB2b2lkICk7DQorCS8qIFByb3RvdHlwZSBvZiB0aGUgRnJlZVJUT1MgdGljayBoYW5kbGVyLiAgVGhpcyBtdXN0IGJlIGluc3RhbGxlZCBhcyB0aGUNCisJaGFuZGxlciBmb3Igd2hpY2hldmVyIHBlcmlwaGVyYWwgaXMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgUlRPUyB0aWNrLiAqLw0KKwl2b2lkIEZyZWVSVE9TX1RpY2tfSGFuZGxlciggdm9pZCApOw0KIA0KLS8qIEFueSB0YXNrIHRoYXQgdXNlcyB0aGUgZmxvYXRpbmcgcG9pbnQgdW5pdCBNVVNUIGNhbGwgdlBvcnRUYXNrVXNlc0ZQVSgpDQotICogYmVmb3JlIGFueSBmbG9hdGluZyBwb2ludCBpbnN0cnVjdGlvbnMgYXJlIGV4ZWN1dGVkLiAqLw0KLSAgICAgICAgdm9pZCB2UG9ydFRhc2tVc2VzRlBVKCB2b2lkICk7DQotICAgICAgICAjZGVmaW5lIHBvcnRUQVNLX1VTRVNfRkxPQVRJTkdfUE9JTlQoKSAgICB2UG9ydFRhc2tVc2VzRlBVKCkNCisJLyogQW55IHRhc2sgdGhhdCB1c2VzIHRoZSBmbG9hdGluZyBwb2ludCB1bml0IE1VU1QgY2FsbCB2UG9ydFRhc2tVc2VzRlBVKCkNCisJYmVmb3JlIGFueSBmbG9hdGluZyBwb2ludCBpbnN0cnVjdGlvbnMgYXJlIGV4ZWN1dGVkLiAqLw0KKwl2b2lkIHZQb3J0VGFza1VzZXNGUFUoIHZvaWQgKTsNCisJI2RlZmluZSBwb3J0VEFTS19VU0VTX0ZMT0FUSU5HX1BPSU5UKCkgdlBvcnRUYXNrVXNlc0ZQVSgpDQogDQotLyogQXJjaGl0ZWN0dXJlIHNwZWNpZmljIG9wdGltaXNhdGlvbnMuICovDQotICAgICAgICAjaWZuZGVmIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTg0KLSAgICAgICAgICAgICNkZWZpbmUgY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OICAgIDENCi0gICAgICAgICNlbmRpZg0KKwkvKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWMgb3B0aW1pc2F0aW9ucy4gKi8NCisJI2lmbmRlZiBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04NCisJCSNkZWZpbmUgY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OIDENCisJI2VuZGlmDQogDQotICAgICAgICAjaWYgY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OID09IDENCisJI2lmIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiA9PSAxDQogDQotLyogU3RvcmUvY2xlYXIgdGhlIHJlYWR5IHByaW9yaXRpZXMgaW4gYSBiaXQgbWFwLiAqLw0KLSAgICAgICAgICAgICNkZWZpbmUgcG9ydFJFQ09SRF9SRUFEWV9QUklPUklUWSggdXhQcmlvcml0eSwgdXhSZWFkeVByaW9yaXRpZXMgKSAgICAoIHV4UmVhZHlQcmlvcml0aWVzICkgfD0gKCAxVUwgPDwgKCB1eFByaW9yaXR5ICkgKQ0KLSAgICAgICAgICAgICNkZWZpbmUgcG9ydFJFU0VUX1JFQURZX1BSSU9SSVRZKCB1eFByaW9yaXR5LCB1eFJlYWR5UHJpb3JpdGllcyApICAgICAoIHV4UmVhZHlQcmlvcml0aWVzICkgJj0gfiggMVVMIDw8ICggdXhQcmlvcml0eSApICkNCisJCS8qIFN0b3JlL2NsZWFyIHRoZSByZWFkeSBwcmlvcml0aWVzIGluIGEgYml0IG1hcC4gKi8NCisJCSNkZWZpbmUgcG9ydFJFQ09SRF9SRUFEWV9QUklPUklUWSggdXhQcmlvcml0eSwgdXhSZWFkeVByaW9yaXRpZXMgKSAoIHV4UmVhZHlQcmlvcml0aWVzICkgfD0gKCAxVUwgPDwgKCB1eFByaW9yaXR5ICkgKQ0KKwkJI2RlZmluZSBwb3J0UkVTRVRfUkVBRFlfUFJJT1JJVFkoIHV4UHJpb3JpdHksIHV4UmVhZHlQcmlvcml0aWVzICkgKCB1eFJlYWR5UHJpb3JpdGllcyApICY9IH4oIDFVTCA8PCAoIHV4UHJpb3JpdHkgKSApDQogDQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorCQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0gICAgICAgICAgICAjZGVmaW5lIHBvcnRHRVRfSElHSEVTVF9QUklPUklUWSggdXhUb3BQcmlvcml0eSwgdXhSZWFkeVByaW9yaXRpZXMgKSAgICB1eFRvcFByaW9yaXR5ID0gKCAzMSAtIF9fQ0xaKCB1eFJlYWR5UHJpb3JpdGllcyApICkNCisJCSNkZWZpbmUgcG9ydEdFVF9ISUdIRVNUX1BSSU9SSVRZKCB1eFRvcFByaW9yaXR5LCB1eFJlYWR5UHJpb3JpdGllcyApIHV4VG9wUHJpb3JpdHkgPSAoIDMxIC0gX19DTFooIHV4UmVhZHlQcmlvcml0aWVzICkgKQ0KIA0KLSAgICAgICAgI2VuZGlmIC8qIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiAqLw0KKwkjZW5kaWYgLyogY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OICovDQogDQotICAgICAgICAjZGVmaW5lIHBvcnROT1AoKSAgICBfX2FzbSB2b2xhdGlsZSAoICJOT1AiICkNCisJI2RlZmluZSBwb3J0Tk9QKCkgX19hc20gdm9sYXRpbGUoICJOT1AiICkNCiANCiANCi0gICAgICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgICAgIH0gLyogZXh0ZXJuIEMgKi8NCi0gICAgICAgICNlbmRpZg0KKwkjaWZkZWYgX19jcGx1c3BsdXMNCisJCX0gLyogZXh0ZXJuIEMgKi8NCisJI2VuZGlmDQogDQotLyogU3VwcHJlc3Mgd2FybmluZ3MgdGhhdCBhcmUgZ2VuZXJhdGVkIGJ5IHRoZSBJQVIgdG9vbHMsIGJ1dCBjYW5ub3QgYmUNCi0gKiBmaXhlZCBpbiB0aGUgc291cmNlIGNvZGUgYmVjYXVzZSB0byBkbyBzbyB3b3VsZCBjYXVzZSBvdGhlciBjb21waWxlcnMgdG8NCi0gKiBnZW5lcmF0ZSB3YXJuaW5ncy4gKi8NCi0gICAgICAgICNwcmFnbWEgZGlhZ19zdXBwcmVzcz1QZTE5MQ0KLSAgICAgICAgI3ByYWdtYSBkaWFnX3N1cHByZXNzPVBhMDgyDQorCS8qIFN1cHByZXNzIHdhcm5pbmdzIHRoYXQgYXJlIGdlbmVyYXRlZCBieSB0aGUgSUFSIHRvb2xzLCBidXQgY2Fubm90IGJlDQorCWZpeGVkIGluIHRoZSBzb3VyY2UgY29kZSBiZWNhdXNlIHRvIGRvIHNvIHdvdWxkIGNhdXNlIG90aGVyIGNvbXBpbGVycyB0bw0KKwlnZW5lcmF0ZSB3YXJuaW5ncy4gKi8NCisJI3ByYWdtYSBkaWFnX3N1cHByZXNzPVBlMTkxDQorCSNwcmFnbWEgZGlhZ19zdXBwcmVzcz1QYTA4Mg0KIA0KLSAgICAjZW5kaWYgLyogX19JQ0NBUk1fXyAqLw0KKyNlbmRpZiAvKiBfX0lDQ0FSTV9fICovDQogDQogI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvSUFSL0FSTV9DQTkvcG9ydC5jIGIvcG9ydGFibGUvSUFSL0FSTV9DQTkvcG9ydC5jCmluZGV4IDQxNmJlOGUuLmExZDljMjkgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0lBUi9BUk1fQ0E5L3BvcnQuYworKysgYi9wb3J0YWJsZS9JQVIvQVJNX0NBOS9wb3J0LmMKQEAgLTM2LDg5ICszNiw4OSBAQAogI2luY2x1ZGUgInRhc2suaCINCiANCiAjaWZuZGVmIGNvbmZpZ0lOVEVSUlVQVF9DT05UUk9MTEVSX0JBU0VfQUREUkVTUw0KLSAgICAjZXJyb3IgY29uZmlnSU5URVJSVVBUX0NPTlRST0xMRVJfQkFTRV9BRERSRVNTIG11c3QgYmUgZGVmaW5lZC4gIFNlZSBodHRwOiAvKnd3dy5mcmVlcnRvcy5vcmcvVXNpbmctRnJlZVJUT1Mtb24tQ29ydGV4LUEtRW1iZWRkZWQtUHJvY2Vzc29ycy5odG1sICovDQorCSNlcnJvciBjb25maWdJTlRFUlJVUFRfQ09OVFJPTExFUl9CQVNFX0FERFJFU1MgbXVzdCBiZSBkZWZpbmVkLiAgU2VlIGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL1VzaW5nLUZyZWVSVE9TLW9uLUNvcnRleC1BLUVtYmVkZGVkLVByb2Nlc3NvcnMuaHRtbA0KICNlbmRpZg0KIA0KICNpZm5kZWYgY29uZmlnSU5URVJSVVBUX0NPTlRST0xMRVJfQ1BVX0lOVEVSRkFDRV9PRkZTRVQNCi0gICAgI2Vycm9yIGNvbmZpZ0lOVEVSUlVQVF9DT05UUk9MTEVSX0NQVV9JTlRFUkZBQ0VfT0ZGU0VUIG11c3QgYmUgZGVmaW5lZC4gIFNlZSBodHRwOiAvKnd3dy5mcmVlcnRvcy5vcmcvVXNpbmctRnJlZVJUT1Mtb24tQ29ydGV4LUEtRW1iZWRkZWQtUHJvY2Vzc29ycy5odG1sICovDQorCSNlcnJvciBjb25maWdJTlRFUlJVUFRfQ09OVFJPTExFUl9DUFVfSU5URVJGQUNFX09GRlNFVCBtdXN0IGJlIGRlZmluZWQuICBTZWUgaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvVXNpbmctRnJlZVJUT1Mtb24tQ29ydGV4LUEtRW1iZWRkZWQtUHJvY2Vzc29ycy5odG1sDQogI2VuZGlmDQogDQogI2lmbmRlZiBjb25maWdVTklRVUVfSU5URVJSVVBUX1BSSU9SSVRJRVMNCi0gICAgI2Vycm9yIGNvbmZpZ1VOSVFVRV9JTlRFUlJVUFRfUFJJT1JJVElFUyBtdXN0IGJlIGRlZmluZWQuICBTZWUgaHR0cDogLyp3d3cuZnJlZXJ0b3Mub3JnL1VzaW5nLUZyZWVSVE9TLW9uLUNvcnRleC1BLUVtYmVkZGVkLVByb2Nlc3NvcnMuaHRtbCAqLw0KKwkjZXJyb3IgY29uZmlnVU5JUVVFX0lOVEVSUlVQVF9QUklPUklUSUVTIG11c3QgYmUgZGVmaW5lZC4gIFNlZSBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9Vc2luZy1GcmVlUlRPUy1vbi1Db3J0ZXgtQS1FbWJlZGRlZC1Qcm9jZXNzb3JzLmh0bWwNCiAjZW5kaWYNCiANCiAjaWZuZGVmIGNvbmZpZ1NFVFVQX1RJQ0tfSU5URVJSVVBUDQotICAgICNlcnJvciBjb25maWdTRVRVUF9USUNLX0lOVEVSUlVQVCgpIG11c3QgYmUgZGVmaW5lZC4gIFNlZSBodHRwOiAvKnd3dy5mcmVlcnRvcy5vcmcvVXNpbmctRnJlZVJUT1Mtb24tQ29ydGV4LUEtRW1iZWRkZWQtUHJvY2Vzc29ycy5odG1sICovDQorCSNlcnJvciBjb25maWdTRVRVUF9USUNLX0lOVEVSUlVQVCgpIG11c3QgYmUgZGVmaW5lZC4gIFNlZSBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9Vc2luZy1GcmVlUlRPUy1vbi1Db3J0ZXgtQS1FbWJlZGRlZC1Qcm9jZXNzb3JzLmh0bWwNCiAjZW5kaWYgLyogY29uZmlnU0VUVVBfVElDS19JTlRFUlJVUFQgKi8NCiANCiAjaWZuZGVmIGNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkNCi0gICAgI2Vycm9yIGNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgbXVzdCBiZSBkZWZpbmVkLiAgU2VlIGh0dHA6IC8qd3d3LmZyZWVydG9zLm9yZy9Vc2luZy1GcmVlUlRPUy1vbi1Db3J0ZXgtQS1FbWJlZGRlZC1Qcm9jZXNzb3JzLmh0bWwgKi8NCisJI2Vycm9yIGNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgbXVzdCBiZSBkZWZpbmVkLiAgU2VlIGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL1VzaW5nLUZyZWVSVE9TLW9uLUNvcnRleC1BLUVtYmVkZGVkLVByb2Nlc3NvcnMuaHRtbA0KICNlbmRpZg0KIA0KICNpZiBjb25maWdNQVhfQVBJX0NBTExfSU5URVJSVVBUX1BSSU9SSVRZID09IDANCi0gICAgI2Vycm9yIGNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgbXVzdCBub3QgYmUgc2V0IHRvIDANCisJI2Vycm9yIGNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgbXVzdCBub3QgYmUgc2V0IHRvIDANCiAjZW5kaWYNCiANCiAjaWYgY29uZmlnTUFYX0FQSV9DQUxMX0lOVEVSUlVQVF9QUklPUklUWSA+IGNvbmZpZ1VOSVFVRV9JTlRFUlJVUFRfUFJJT1JJVElFUw0KLSAgICAjZXJyb3IgY29uZmlnTUFYX0FQSV9DQUxMX0lOVEVSUlVQVF9QUklPUklUWSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBjb25maWdVTklRVUVfSU5URVJSVVBUX1BSSU9SSVRJRVMgYXMgdGhlIGxvd2VyIHRoZSBudW1lcmljIHByaW9yaXR5IHZhbHVlIHRoZSBoaWdoZXIgdGhlIGxvZ2ljYWwgaW50ZXJydXB0IHByaW9yaXR5DQorCSNlcnJvciBjb25maWdNQVhfQVBJX0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGNvbmZpZ1VOSVFVRV9JTlRFUlJVUFRfUFJJT1JJVElFUyBhcyB0aGUgbG93ZXIgdGhlIG51bWVyaWMgcHJpb3JpdHkgdmFsdWUgdGhlIGhpZ2hlciB0aGUgbG9naWNhbCBpbnRlcnJ1cHQgcHJpb3JpdHkNCiAjZW5kaWYNCiANCiAjaWYgY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OID09IDENCi0gICAgLyogQ2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24uICovDQotICAgICNpZiAoIGNvbmZpZ01BWF9QUklPUklUSUVTID4gMzIgKQ0KLSAgICAgICAgI2Vycm9yIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiBjYW4gb25seSBiZSBzZXQgdG8gMSB3aGVuIGNvbmZpZ01BWF9QUklPUklUSUVTIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAzMi4gIEl0IGlzIHZlcnkgcmFyZSB0aGF0IGEgc3lzdGVtIHJlcXVpcmVzIG1vcmUgdGhhbiAxMCB0byAxNSBkaWZmZXJlbmNlIHByaW9yaXRpZXMgYXMgdGFza3MgdGhhdCBzaGFyZSBhIHByaW9yaXR5IHdpbGwgdGltZSBzbGljZS4NCi0gICAgI2VuZGlmDQorCS8qIENoZWNrIHRoZSBjb25maWd1cmF0aW9uLiAqLw0KKwkjaWYoIGNvbmZpZ01BWF9QUklPUklUSUVTID4gMzIgKQ0KKwkJI2Vycm9yIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiBjYW4gb25seSBiZSBzZXQgdG8gMSB3aGVuIGNvbmZpZ01BWF9QUklPUklUSUVTIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAzMi4gIEl0IGlzIHZlcnkgcmFyZSB0aGF0IGEgc3lzdGVtIHJlcXVpcmVzIG1vcmUgdGhhbiAxMCB0byAxNSBkaWZmZXJlbmNlIHByaW9yaXRpZXMgYXMgdGFza3MgdGhhdCBzaGFyZSBhIHByaW9yaXR5IHdpbGwgdGltZSBzbGljZS4NCisJI2VuZGlmDQogI2VuZGlmIC8qIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiAqLw0KIA0KIC8qIEluIGNhc2Ugc2VjdXJpdHkgZXh0ZW5zaW9ucyBhcmUgaW1wbGVtZW50ZWQuICovDQogI2lmIGNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgPD0gKCBjb25maWdVTklRVUVfSU5URVJSVVBUX1BSSU9SSVRJRVMgLyAyICkNCi0gICAgI2Vycm9yIGNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgbXVzdCBiZSBncmVhdGVyIHRoYW4gKCBjb25maWdVTklRVUVfSU5URVJSVVBUX1BSSU9SSVRJRVMgLyAyICkNCisJI2Vycm9yIGNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgbXVzdCBiZSBncmVhdGVyIHRoYW4gKCBjb25maWdVTklRVUVfSU5URVJSVVBUX1BSSU9SSVRJRVMgLyAyICkNCiAjZW5kaWYNCiANCiAjaWZuZGVmIGNvbmZpZ0NMRUFSX1RJQ0tfSU5URVJSVVBUDQotICAgICNkZWZpbmUgY29uZmlnQ0xFQVJfVElDS19JTlRFUlJVUFQoKQ0KKwkjZGVmaW5lIGNvbmZpZ0NMRUFSX1RJQ0tfSU5URVJSVVBUKCkNCiAjZW5kaWYNCiANCiAvKiBBIGNyaXRpY2FsIHNlY3Rpb24gaXMgZXhpdGVkIHdoZW4gdGhlIGNyaXRpY2FsIHNlY3Rpb24gbmVzdGluZyBjb3VudCByZWFjaGVzDQotICogdGhpcyB2YWx1ZS4gKi8NCi0jZGVmaW5lIHBvcnROT19DUklUSUNBTF9ORVNUSU5HICAgICAgICAgICggKCB1aW50MzJfdCApIDAgKQ0KK3RoaXMgdmFsdWUuICovDQorI2RlZmluZSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORwkJCSggKCB1aW50MzJfdCApIDAgKQ0KIA0KIC8qIEluIGFsbCBHSUNzIDI1NSBjYW4gYmUgd3JpdHRlbiB0byB0aGUgcHJpb3JpdHkgbWFzayByZWdpc3RlciB0byB1bm1hc2sgYWxsDQotICogKGJ1dCB0aGUgbG93ZXN0KSBpbnRlcnJ1cHQgcHJpb3JpdHkuICovDQotI2RlZmluZSBwb3J0VU5NQVNLX1ZBTFVFICAgICAgICAgICAgICAgICAoIDB4RkZVTCApDQorKGJ1dCB0aGUgbG93ZXN0KSBpbnRlcnJ1cHQgcHJpb3JpdHkuICovDQorI2RlZmluZSBwb3J0VU5NQVNLX1ZBTFVFCQkJCSggMHhGRlVMICkNCiANCiAvKiBUYXNrcyBhcmUgbm90IGNyZWF0ZWQgd2l0aCBhIGZsb2F0aW5nIHBvaW50IGNvbnRleHQsIGJ1dCBjYW4gYmUgZ2l2ZW4gYQ0KLSAqIGZsb2F0aW5nIHBvaW50IGNvbnRleHQgYWZ0ZXIgdGhleSBoYXZlIGJlZW4gY3JlYXRlZC4gIEEgdmFyaWFibGUgaXMgc3RvcmVkIGFzDQotICogcGFydCBvZiB0aGUgdGFza3MgY29udGV4dCB0aGF0IGhvbGRzIHBvcnROT19GTE9BVElOR19QT0lOVF9DT05URVhUIGlmIHRoZSB0YXNrDQotICogZG9lcyBub3QgaGF2ZSBhbiBGUFUgY29udGV4dCwgb3IgYW55IG90aGVyIHZhbHVlIGlmIHRoZSB0YXNrIGRvZXMgaGF2ZSBhbiBGUFUNCi0gKiBjb250ZXh0LiAqLw0KLSNkZWZpbmUgcG9ydE5PX0ZMT0FUSU5HX1BPSU5UX0NPTlRFWFQgICAgKCAoIFN0YWNrVHlwZV90ICkgMCApDQorZmxvYXRpbmcgcG9pbnQgY29udGV4dCBhZnRlciB0aGV5IGhhdmUgYmVlbiBjcmVhdGVkLiAgQSB2YXJpYWJsZSBpcyBzdG9yZWQgYXMNCitwYXJ0IG9mIHRoZSB0YXNrcyBjb250ZXh0IHRoYXQgaG9sZHMgcG9ydE5PX0ZMT0FUSU5HX1BPSU5UX0NPTlRFWFQgaWYgdGhlIHRhc2sNCitkb2VzIG5vdCBoYXZlIGFuIEZQVSBjb250ZXh0LCBvciBhbnkgb3RoZXIgdmFsdWUgaWYgdGhlIHRhc2sgZG9lcyBoYXZlIGFuIEZQVQ0KK2NvbnRleHQuICovDQorI2RlZmluZSBwb3J0Tk9fRkxPQVRJTkdfUE9JTlRfQ09OVEVYVAkoICggU3RhY2tUeXBlX3QgKSAwICkNCiANCiAvKiBDb25zdGFudHMgcmVxdWlyZWQgdG8gc2V0dXAgdGhlIGluaXRpYWwgdGFzayBjb250ZXh0LiAqLw0KLSNkZWZpbmUgcG9ydElOSVRJQUxfU1BTUiAgICAgICAgICAgICAgICAgKCAoIFN0YWNrVHlwZV90ICkgMHgxZiApIC8qIFN5c3RlbSBtb2RlLCBBUk0gbW9kZSwgaW50ZXJydXB0cyBlbmFibGVkLiAqLw0KLSNkZWZpbmUgcG9ydFRIVU1CX01PREVfQklUICAgICAgICAgICAgICAgKCAoIFN0YWNrVHlwZV90ICkgMHgyMCApDQotI2RlZmluZSBwb3J0VEhVTUJfTU9ERV9BRERSRVNTICAgICAgICAgICAoIDB4MDFVTCApDQorI2RlZmluZSBwb3J0SU5JVElBTF9TUFNSCQkJCSggKCBTdGFja1R5cGVfdCApIDB4MWYgKSAvKiBTeXN0ZW0gbW9kZSwgQVJNIG1vZGUsIGludGVycnVwdHMgZW5hYmxlZC4gKi8NCisjZGVmaW5lIHBvcnRUSFVNQl9NT0RFX0JJVAkJCQkoICggU3RhY2tUeXBlX3QgKSAweDIwICkNCisjZGVmaW5lIHBvcnRUSFVNQl9NT0RFX0FERFJFU1MJCQkoIDB4MDFVTCApDQogDQogLyogVXNlZCBieSBwb3J0QVNTRVJUX0lGX0lOVEVSUlVQVF9QUklPUklUWV9JTlZBTElEKCkgd2hlbiBlbnN1cmluZyB0aGUgYmluYXJ5DQotICogcG9pbnQgaXMgemVyby4gKi8NCi0jZGVmaW5lIHBvcnRCSU5BUllfUE9JTlRfQklUUyAgICAgICAgICAgICggKCB1aW50OF90ICkgMHgwMyApDQorcG9pbnQgaXMgemVyby4gKi8NCisjZGVmaW5lIHBvcnRCSU5BUllfUE9JTlRfQklUUwkJCSggKCB1aW50OF90ICkgMHgwMyApDQogDQogLyogTWFza3MgYWxsIGJpdHMgaW4gdGhlIEFQU1Igb3RoZXIgdGhhbiB0aGUgbW9kZSBiaXRzLiAqLw0KLSNkZWZpbmUgcG9ydEFQU1JfTU9ERV9CSVRTX01BU0sgICAgICAgICAgKCAweDFGICkNCisjZGVmaW5lIHBvcnRBUFNSX01PREVfQklUU19NQVNLCQkJKCAweDFGICkNCiANCiAvKiBUaGUgdmFsdWUgb2YgdGhlIG1vZGUgYml0cyBpbiB0aGUgQVBTUiB3aGVuIHRoZSBDUFUgaXMgZXhlY3V0aW5nIGluIHVzZXINCi0gKiBtb2RlLiAqLw0KLSNkZWZpbmUgcG9ydEFQU1JfVVNFUl9NT0RFICAgICAgICAgICAgICAgKCAweDEwICkNCittb2RlLiAqLw0KKyNkZWZpbmUgcG9ydEFQU1JfVVNFUl9NT0RFCQkJCSggMHgxMCApDQogDQogLyogTWFjcm8gdG8gdW5tYXNrIGFsbCBpbnRlcnJ1cHQgcHJpb3JpdGllcy4gKi8NCi0jZGVmaW5lIHBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTSygpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIF9fZGlzYWJsZV9pcnEoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHBvcnRJQ0NQTVJfUFJJT1JJVFlfTUFTS19SRUdJU1RFUiA9IHBvcnRVTk1BU0tfVkFMVUU7IFwNCi0gICAgICAgIF9fYXNtKCAiRFNCCQlcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAiSVNCCQlcbiIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgX19lbmFibGVfaXJxKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB9DQorI2RlZmluZSBwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0soKQkJCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwlfX2Rpc2FibGVfaXJxKCk7CQkJCQkJCQkJCQkJCQlcDQorCXBvcnRJQ0NQTVJfUFJJT1JJVFlfTUFTS19SRUdJU1RFUiA9IHBvcnRVTk1BU0tfVkFMVUU7CQkJCQlcDQorCV9fYXNtKAkiRFNCCQlcbiIJCQkJCQkJCQkJCQkJXA0KKwkJCSJJU0IJCVxuIiApOwkJCQkJCQkJCQkJCVwNCisJX19lbmFibGVfaXJxKCk7CQkJCQkJCQkJCQkJCQkJXA0KK30NCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCkBAIC0xMzYsMjEgKzEzNiwyMSBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogQSB2YXJpYWJsZSBpcyB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGNyaXRpY2FsIHNlY3Rpb24gbmVzdGluZy4gIFRoaXMNCi0gKiB2YXJpYWJsZSBoYXMgdG8gYmUgc3RvcmVkIGFzIHBhcnQgb2YgdGhlIHRhc2sgY29udGV4dCBhbmQgbXVzdCBiZSBpbml0aWFsaXNlZCB0bw0KLSAqIGEgbm9uIHplcm8gdmFsdWUgdG8gZW5zdXJlIGludGVycnVwdHMgZG9uJ3QgaW5hZHZlcnRlbnRseSBiZWNvbWUgdW5tYXNrZWQgYmVmb3JlDQotICogdGhlIHNjaGVkdWxlciBzdGFydHMuICBBcyBpdCBpcyBzdG9yZWQgYXMgcGFydCBvZiB0aGUgdGFzayBjb250ZXh0IGl0IHdpbGwNCi0gKiBhdXRvbWF0aWNhbGx5IGJlIHNldCB0byAwIHdoZW4gdGhlIGZpcnN0IHRhc2sgaXMgc3RhcnRlZC4gKi8NCit2YXJpYWJsZSBoYXMgdG8gYmUgc3RvcmVkIGFzIHBhcnQgb2YgdGhlIHRhc2sgY29udGV4dCBhbmQgbXVzdCBiZSBpbml0aWFsaXNlZCB0bw0KK2Egbm9uIHplcm8gdmFsdWUgdG8gZW5zdXJlIGludGVycnVwdHMgZG9uJ3QgaW5hZHZlcnRlbnRseSBiZWNvbWUgdW5tYXNrZWQgYmVmb3JlDQordGhlIHNjaGVkdWxlciBzdGFydHMuICBBcyBpdCBpcyBzdG9yZWQgYXMgcGFydCBvZiB0aGUgdGFzayBjb250ZXh0IGl0IHdpbGwNCithdXRvbWF0aWNhbGx5IGJlIHNldCB0byAwIHdoZW4gdGhlIGZpcnN0IHRhc2sgaXMgc3RhcnRlZC4gKi8NCiB2b2xhdGlsZSB1aW50MzJfdCB1bENyaXRpY2FsTmVzdGluZyA9IDk5OTlVTDsNCiANCiAvKiBTYXZlZCBhcyBwYXJ0IG9mIHRoZSB0YXNrIGNvbnRleHQuICBJZiB1bFBvcnRUYXNrSGFzRlBVQ29udGV4dCBpcyBub24temVybw0KLSAqIHRoZW4gYSBmbG9hdGluZyBwb2ludCBjb250ZXh0IG11c3QgYmUgc2F2ZWQgYW5kIHJlc3RvcmVkIGZvciB0aGUgdGFzay4gKi8NCit0aGVuIGEgZmxvYXRpbmcgcG9pbnQgY29udGV4dCBtdXN0IGJlIHNhdmVkIGFuZCByZXN0b3JlZCBmb3IgdGhlIHRhc2suICovDQogdWludDMyX3QgdWxQb3J0VGFza0hhc0ZQVUNvbnRleHQgPSBwZEZBTFNFOw0KIA0KIC8qIFNldCB0byAxIHRvIHBlbmQgYSBjb250ZXh0IHN3aXRjaCBmcm9tIGFuIElTUi4gKi8NCiB1aW50MzJfdCB1bFBvcnRZaWVsZFJlcXVpcmVkID0gcGRGQUxTRTsNCiANCiAvKiBDb3VudHMgdGhlIGludGVycnVwdCBuZXN0aW5nIGRlcHRoLiAgQSBjb250ZXh0IHN3aXRjaCBpcyBvbmx5IHBlcmZvcm1lZCBpZg0KLSAqIGlmIHRoZSBuZXN0aW5nIGRlcHRoIGlzIDAuICovDQoraWYgdGhlIG5lc3RpbmcgZGVwdGggaXMgMC4gKi8NCiB1aW50MzJfdCB1bFBvcnRJbnRlcnJ1cHROZXN0aW5nID0gMFVMOw0KIA0KIA0KQEAgLTE1OSwyODcgKzE1OSwyODEgQEAKIC8qDQogICogU2VlIGhlYWRlciBmaWxlIGZvciBkZXNjcmlwdGlvbi4NCiAgKi8NCi1TdGFja1R5cGVfdCAqIHB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKiBweFRvcE9mU3RhY2ssDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqIHB2UGFyYW1ldGVycyApDQorU3RhY2tUeXBlX3QgKnB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKnB4VG9wT2ZTdGFjaywgVGFza0Z1bmN0aW9uX3QgcHhDb2RlLCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KIHsNCi0gICAgLyogU2V0dXAgdGhlIGluaXRpYWwgc3RhY2sgb2YgdGhlIHRhc2suICBUaGUgc3RhY2sgaXMgc2V0IGV4YWN0bHkgYXMNCi0gICAgICogZXhwZWN0ZWQgYnkgdGhlIHBvcnRSRVNUT1JFX0NPTlRFWFQoKSBtYWNyby4NCi0gICAgICoNCi0gICAgICogVGhlIGZpc3QgcmVhbCB2YWx1ZSBvbiB0aGUgc3RhY2sgaXMgdGhlIHN0YXR1cyByZWdpc3Rlciwgd2hpY2ggaXMgc2V0IGZvcg0KLSAgICAgKiBzeXN0ZW0gbW9kZSwgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQuICBBIGZldyBOVUxMcyBhcmUgYWRkZWQgZmlyc3QgdG8gZW5zdXJlDQotICAgICAqIEdEQiBkb2VzIG5vdCB0cnkgZGVjb2RpbmcgYSBub24tZXhpc3RlbnQgcmV0dXJuIGFkZHJlc3MuICovDQotICAgICpweFRvcE9mU3RhY2sgPSBOVUxMOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IE5VTEw7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gTlVMTDsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcG9ydElOSVRJQUxfU1BTUjsNCisJLyogU2V0dXAgdGhlIGluaXRpYWwgc3RhY2sgb2YgdGhlIHRhc2suICBUaGUgc3RhY2sgaXMgc2V0IGV4YWN0bHkgYXMNCisJZXhwZWN0ZWQgYnkgdGhlIHBvcnRSRVNUT1JFX0NPTlRFWFQoKSBtYWNyby4NCiANCi0gICAgaWYoICggKCB1aW50MzJfdCApIHB4Q29kZSAmIHBvcnRUSFVNQl9NT0RFX0FERFJFU1MgKSAhPSAweDAwVUwgKQ0KLSAgICB7DQotICAgICAgICAvKiBUaGUgdGFzayB3aWxsIHN0YXJ0IGluIFRIVU1CIG1vZGUuICovDQotICAgICAgICAqcHhUb3BPZlN0YWNrIHw9IHBvcnRUSFVNQl9NT0RFX0JJVDsNCi0gICAgfQ0KKwlUaGUgZmlzdCByZWFsIHZhbHVlIG9uIHRoZSBzdGFjayBpcyB0aGUgc3RhdHVzIHJlZ2lzdGVyLCB3aGljaCBpcyBzZXQgZm9yDQorCXN5c3RlbSBtb2RlLCB3aXRoIGludGVycnVwdHMgZW5hYmxlZC4gIEEgZmV3IE5VTExzIGFyZSBhZGRlZCBmaXJzdCB0byBlbnN1cmUNCisJR0RCIGRvZXMgbm90IHRyeSBkZWNvZGluZyBhIG5vbi1leGlzdGVudCByZXR1cm4gYWRkcmVzcy4gKi8NCisJKnB4VG9wT2ZTdGFjayA9IE5VTEw7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gTlVMTDsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSBOVUxMOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwb3J0SU5JVElBTF9TUFNSOw0KIA0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJaWYoICggKCB1aW50MzJfdCApIHB4Q29kZSAmIHBvcnRUSFVNQl9NT0RFX0FERFJFU1MgKSAhPSAweDAwVUwgKQ0KKwl7DQorCQkvKiBUaGUgdGFzayB3aWxsIHN0YXJ0IGluIFRIVU1CIG1vZGUuICovDQorCQkqcHhUb3BPZlN0YWNrIHw9IHBvcnRUSFVNQl9NT0RFX0JJVDsNCisJfQ0KIA0KLSAgICAvKiBOZXh0IHRoZSByZXR1cm4gYWRkcmVzcywgd2hpY2ggaW4gdGhpcyBjYXNlIGlzIHRoZSBzdGFydCBvZiB0aGUgdGFzay4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBweENvZGU7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgLyogTmV4dCBhbGwgdGhlIHJlZ2lzdGVycyBvdGhlciB0aGFuIHRoZSBzdGFjayBwb2ludGVyLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHBydlRhc2tFeGl0RXJyb3I7IC8qIFIxNCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDEyMTIxMjEyOyAgICAgICAvKiBSMTIgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMTExMTExMTsgICAgICAgLyogUjExICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTAxMDEwMTA7ICAgICAgIC8qIFIxMCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA5MDkwOTA5OyAgICAgICAvKiBSOSAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA4MDgwODA4OyAgICAgICAvKiBSOCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA3MDcwNzA3OyAgICAgICAvKiBSNyAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA2MDYwNjA2OyAgICAgICAvKiBSNiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA1MDUwNTA1OyAgICAgICAvKiBSNSAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA0MDQwNDA0OyAgICAgICAvKiBSNCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAzMDMwMzAzOyAgICAgICAvKiBSMyAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAyMDIwMjAyOyAgICAgICAvKiBSMiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAxMDEwMTAxOyAgICAgICAvKiBSMSAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwdlBhcmFtZXRlcnM7ICAgICAvKiBSMCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJLyogTmV4dCB0aGUgcmV0dXJuIGFkZHJlc3MsIHdoaWNoIGluIHRoaXMgY2FzZSBpcyB0aGUgc3RhcnQgb2YgdGhlIHRhc2suICovDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHhDb2RlOw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgLyogVGhlIHRhc2sgd2lsbCBzdGFydCB3aXRoIGEgY3JpdGljYWwgbmVzdGluZyBjb3VudCBvZiAwIGFzIGludGVycnVwdHMgYXJlDQotICAgICAqIGVuYWJsZWQuICovDQotICAgICpweFRvcE9mU3RhY2sgPSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORzsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIE5leHQgYWxsIHRoZSByZWdpc3RlcnMgb3RoZXIgdGhhbiB0aGUgc3RhY2sgcG9pbnRlci4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwcnZUYXNrRXhpdEVycm9yOwkvKiBSMTQgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMjEyMTIxMjsJLyogUjEyICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTExMTExMTE7CS8qIFIxMSAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDEwMTAxMDEwOwkvKiBSMTAgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwOTA5MDkwOTsJLyogUjkgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwODA4MDgwODsJLyogUjggKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNzA3MDcwNzsJLyogUjcgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNjA2MDYwNjsJLyogUjYgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNTA1MDUwNTsJLyogUjUgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNDA0MDQwNDsJLyogUjQgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMzAzMDMwMzsJLyogUjMgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMjAyMDIwMjsJLyogUjIgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMTAxMDEwMTsJLyogUjEgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHZQYXJhbWV0ZXJzOyAvKiBSMCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgLyogVGhlIHRhc2sgd2lsbCBzdGFydCB3aXRob3V0IGEgZmxvYXRpbmcgcG9pbnQgY29udGV4dC4gIEEgdGFzayB0aGF0IHVzZXMNCi0gICAgICogdGhlIGZsb2F0aW5nIHBvaW50IGhhcmR3YXJlIG11c3QgY2FsbCB2UG9ydFRhc2tVc2VzRlBVKCkgYmVmb3JlIGV4ZWN1dGluZw0KLSAgICAgKiBhbnkgZmxvYXRpbmcgcG9pbnQgaW5zdHJ1Y3Rpb25zLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gcG9ydE5PX0ZMT0FUSU5HX1BPSU5UX0NPTlRFWFQ7DQorCS8qIFRoZSB0YXNrIHdpbGwgc3RhcnQgd2l0aCBhIGNyaXRpY2FsIG5lc3RpbmcgY291bnQgb2YgMCBhcyBpbnRlcnJ1cHRzIGFyZQ0KKwllbmFibGVkLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkc7DQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICByZXR1cm4gcHhUb3BPZlN0YWNrOw0KKwkvKiBUaGUgdGFzayB3aWxsIHN0YXJ0IHdpdGhvdXQgYSBmbG9hdGluZyBwb2ludCBjb250ZXh0LiAgQSB0YXNrIHRoYXQgdXNlcw0KKwl0aGUgZmxvYXRpbmcgcG9pbnQgaGFyZHdhcmUgbXVzdCBjYWxsIHZQb3J0VGFza1VzZXNGUFUoKSBiZWZvcmUgZXhlY3V0aW5nDQorCWFueSBmbG9hdGluZyBwb2ludCBpbnN0cnVjdGlvbnMuICovDQorCSpweFRvcE9mU3RhY2sgPSBwb3J0Tk9fRkxPQVRJTkdfUE9JTlRfQ09OVEVYVDsNCisNCisJcmV0dXJuIHB4VG9wT2ZTdGFjazsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogc3RhdGljIHZvaWQgcHJ2VGFza0V4aXRFcnJvciggdm9pZCApDQogew0KLSAgICAvKiBBIGZ1bmN0aW9uIHRoYXQgaW1wbGVtZW50cyBhIHRhc2sgbXVzdCBub3QgZXhpdCBvciBhdHRlbXB0IHRvIHJldHVybiB0bw0KLSAgICAgKiBpdHMgY2FsbGVyIGFzIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmV0dXJuIHRvLiAgSWYgYSB0YXNrIHdhbnRzIHRvIGV4aXQgaXQNCi0gICAgICogc2hvdWxkIGluc3RlYWQgY2FsbCB2VGFza0RlbGV0ZSggTlVMTCApLg0KLSAgICAgKg0KLSAgICAgKiBBcnRpZmljaWFsbHkgZm9yY2UgYW4gYXNzZXJ0KCkgdG8gYmUgdHJpZ2dlcmVkIGlmIGNvbmZpZ0FTU0VSVCgpIGlzDQotICAgICAqIGRlZmluZWQsIHRoZW4gc3RvcCBoZXJlIHNvIGFwcGxpY2F0aW9uIHdyaXRlcnMgY2FuIGNhdGNoIHRoZSBlcnJvci4gKi8NCi0gICAgY29uZmlnQVNTRVJUKCB1bFBvcnRJbnRlcnJ1cHROZXN0aW5nID09IH4wVUwgKTsNCi0gICAgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOw0KKwkvKiBBIGZ1bmN0aW9uIHRoYXQgaW1wbGVtZW50cyBhIHRhc2sgbXVzdCBub3QgZXhpdCBvciBhdHRlbXB0IHRvIHJldHVybiB0bw0KKwlpdHMgY2FsbGVyIGFzIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmV0dXJuIHRvLiAgSWYgYSB0YXNrIHdhbnRzIHRvIGV4aXQgaXQNCisJc2hvdWxkIGluc3RlYWQgY2FsbCB2VGFza0RlbGV0ZSggTlVMTCApLg0KIA0KLSAgICBmb3IoIDsgOyApDQotICAgIHsNCi0gICAgfQ0KKwlBcnRpZmljaWFsbHkgZm9yY2UgYW4gYXNzZXJ0KCkgdG8gYmUgdHJpZ2dlcmVkIGlmIGNvbmZpZ0FTU0VSVCgpIGlzDQorCWRlZmluZWQsIHRoZW4gc3RvcCBoZXJlIHNvIGFwcGxpY2F0aW9uIHdyaXRlcnMgY2FuIGNhdGNoIHRoZSBlcnJvci4gKi8NCisJY29uZmlnQVNTRVJUKCB1bFBvcnRJbnRlcnJ1cHROZXN0aW5nID09IH4wVUwgKTsNCisJcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOw0KKwlmb3IoIDs7ICk7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIEJhc2VUeXBlX3QgeFBvcnRTdGFydFNjaGVkdWxlciggdm9pZCApDQogew0KLSAgICB1aW50MzJfdCB1bEFQU1I7DQordWludDMyX3QgdWxBUFNSOw0KIA0KLSAgICAvKiBPbmx5IGNvbnRpbnVlIGlmIHRoZSBDUFUgaXMgbm90IGluIFVzZXIgbW9kZS4gIFRoZSBDUFUgbXVzdCBiZSBpbiBhDQotICAgICAqIFByaXZpbGVnZWQgbW9kZSBmb3IgdGhlIHNjaGVkdWxlciB0byBzdGFydC4gKi8NCi0gICAgX19hc20gdm9sYXRpbGUgKCAiTVJTICUwLCBBUFNSIiA6ICI9ciIgKCB1bEFQU1IgKSApOw0KKwkvKiBPbmx5IGNvbnRpbnVlIGlmIHRoZSBDUFUgaXMgbm90IGluIFVzZXIgbW9kZS4gIFRoZSBDUFUgbXVzdCBiZSBpbiBhDQorCVByaXZpbGVnZWQgbW9kZSBmb3IgdGhlIHNjaGVkdWxlciB0byBzdGFydC4gKi8NCisJX19hc20gdm9sYXRpbGUgKCAiTVJTICUwLCBBUFNSIiA6ICI9ciIgKCB1bEFQU1IgKSApOw0KKwl1bEFQU1IgJj0gcG9ydEFQU1JfTU9ERV9CSVRTX01BU0s7DQorCWNvbmZpZ0FTU0VSVCggdWxBUFNSICE9IHBvcnRBUFNSX1VTRVJfTU9ERSApOw0KIA0KLSAgICB1bEFQU1IgJj0gcG9ydEFQU1JfTU9ERV9CSVRTX01BU0s7DQotICAgIGNvbmZpZ0FTU0VSVCggdWxBUFNSICE9IHBvcnRBUFNSX1VTRVJfTU9ERSApOw0KKwlpZiggdWxBUFNSICE9IHBvcnRBUFNSX1VTRVJfTU9ERSApDQorCXsNCisJCS8qIE9ubHkgY29udGludWUgaWYgdGhlIGJpbmFyeSBwb2ludCB2YWx1ZSBpcyBzZXQgdG8gaXRzIGxvd2VzdCBwb3NzaWJsZQ0KKwkJc2V0dGluZy4gIFNlZSB0aGUgY29tbWVudHMgaW4gdlBvcnRWYWxpZGF0ZUludGVycnVwdFByaW9yaXR5KCkgYmVsb3cgZm9yDQorCQltb3JlIGluZm9ybWF0aW9uLiAqLw0KKwkJY29uZmlnQVNTRVJUKCAoIHBvcnRJQ0NCUFJfQklOQVJZX1BPSU5UX1JFR0lTVEVSICYgcG9ydEJJTkFSWV9QT0lOVF9CSVRTICkgPD0gcG9ydE1BWF9CSU5BUllfUE9JTlRfVkFMVUUgKTsNCiANCi0gICAgaWYoIHVsQVBTUiAhPSBwb3J0QVBTUl9VU0VSX01PREUgKQ0KLSAgICB7DQotICAgICAgICAvKiBPbmx5IGNvbnRpbnVlIGlmIHRoZSBiaW5hcnkgcG9pbnQgdmFsdWUgaXMgc2V0IHRvIGl0cyBsb3dlc3QgcG9zc2libGUNCi0gICAgICAgICAqIHNldHRpbmcuICBTZWUgdGhlIGNvbW1lbnRzIGluIHZQb3J0VmFsaWRhdGVJbnRlcnJ1cHRQcmlvcml0eSgpIGJlbG93IGZvcg0KLSAgICAgICAgICogbW9yZSBpbmZvcm1hdGlvbi4gKi8NCi0gICAgICAgIGNvbmZpZ0FTU0VSVCggKCBwb3J0SUNDQlBSX0JJTkFSWV9QT0lOVF9SRUdJU1RFUiAmIHBvcnRCSU5BUllfUE9JTlRfQklUUyApIDw9IHBvcnRNQVhfQklOQVJZX1BPSU5UX1ZBTFVFICk7DQorCQlpZiggKCBwb3J0SUNDQlBSX0JJTkFSWV9QT0lOVF9SRUdJU1RFUiAmIHBvcnRCSU5BUllfUE9JTlRfQklUUyApIDw9IHBvcnRNQVhfQklOQVJZX1BPSU5UX1ZBTFVFICkNCisJCXsNCisJCQkvKiBTdGFydCB0aGUgdGltZXIgdGhhdCBnZW5lcmF0ZXMgdGhlIHRpY2sgSVNSLiAqLw0KKwkJCWNvbmZpZ1NFVFVQX1RJQ0tfSU5URVJSVVBUKCk7DQogDQotICAgICAgICBpZiggKCBwb3J0SUNDQlBSX0JJTkFSWV9QT0lOVF9SRUdJU1RFUiAmIHBvcnRCSU5BUllfUE9JTlRfQklUUyApIDw9IHBvcnRNQVhfQklOQVJZX1BPSU5UX1ZBTFVFICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICAvKiBTdGFydCB0aGUgdGltZXIgdGhhdCBnZW5lcmF0ZXMgdGhlIHRpY2sgSVNSLiAqLw0KLSAgICAgICAgICAgIGNvbmZpZ1NFVFVQX1RJQ0tfSU5URVJSVVBUKCk7DQorCQkJX19lbmFibGVfaXJxKCk7DQorCQkJdlBvcnRSZXN0b3JlVGFza0NvbnRleHQoKTsNCisJCX0NCisJfQ0KIA0KLSAgICAgICAgICAgIF9fZW5hYmxlX2lycSgpOw0KLSAgICAgICAgICAgIHZQb3J0UmVzdG9yZVRhc2tDb250ZXh0KCk7DQotICAgICAgICB9DQotICAgIH0NCi0NCi0gICAgLyogV2lsbCBvbmx5IGdldCBoZXJlIGlmIHZUYXNrU3RhcnRTY2hlZHVsZXIoKSB3YXMgY2FsbGVkIHdpdGggdGhlIENQVSBpbg0KLSAgICAgKiBhIG5vbi1wcml2aWxlZ2VkIG1vZGUgb3IgdGhlIGJpbmFyeSBwb2ludCByZWdpc3RlciB3YXMgbm90IHNldCB0byBpdHMgbG93ZXN0DQotICAgICAqIHBvc3NpYmxlIHZhbHVlLiAqLw0KLSAgICByZXR1cm4gMDsNCisJLyogV2lsbCBvbmx5IGdldCBoZXJlIGlmIHZUYXNrU3RhcnRTY2hlZHVsZXIoKSB3YXMgY2FsbGVkIHdpdGggdGhlIENQVSBpbg0KKwlhIG5vbi1wcml2aWxlZ2VkIG1vZGUgb3IgdGhlIGJpbmFyeSBwb2ludCByZWdpc3RlciB3YXMgbm90IHNldCB0byBpdHMgbG93ZXN0DQorCXBvc3NpYmxlIHZhbHVlLiAqLw0KKwlyZXR1cm4gMDsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogdm9pZCB2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApDQogew0KLSAgICAvKiBOb3QgaW1wbGVtZW50ZWQgaW4gcG9ydHMgd2hlcmUgdGhlcmUgaXMgbm90aGluZyB0byByZXR1cm4gdG8uDQotICAgICAqIEFydGlmaWNpYWxseSBmb3JjZSBhbiBhc3NlcnQuICovDQotICAgIGNvbmZpZ0FTU0VSVCggdWxDcml0aWNhbE5lc3RpbmcgPT0gMTAwMFVMICk7DQorCS8qIE5vdCBpbXBsZW1lbnRlZCBpbiBwb3J0cyB3aGVyZSB0aGVyZSBpcyBub3RoaW5nIHRvIHJldHVybiB0by4NCisJQXJ0aWZpY2lhbGx5IGZvcmNlIGFuIGFzc2VydC4gKi8NCisJY29uZmlnQVNTRVJUKCB1bENyaXRpY2FsTmVzdGluZyA9PSAxMDAwVUwgKTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKQ0KIHsNCi0gICAgLyogRGlzYWJsZSBpbnRlcnJ1cHRzIGFzIHBlciBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7ICAqLw0KLSAgICB1bFBvcnRTZXRJbnRlcnJ1cHRNYXNrKCk7DQorCS8qIERpc2FibGUgaW50ZXJydXB0cyBhcyBwZXIgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOyAJKi8NCisJdWxQb3J0U2V0SW50ZXJydXB0TWFzaygpOw0KIA0KLSAgICAvKiBOb3cgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgdWxDcml0aWNhbE5lc3RpbmcgY2FuIGJlIGFjY2Vzc2VkDQotICAgICAqIGRpcmVjdGx5LiAgSW5jcmVtZW50IHVsQ3JpdGljYWxOZXN0aW5nIHRvIGtlZXAgYSBjb3VudCBvZiBob3cgbWFueSB0aW1lcw0KLSAgICAgKiBwb3J0RU5URVJfQ1JJVElDQUwoKSBoYXMgYmVlbiBjYWxsZWQuICovDQotICAgIHVsQ3JpdGljYWxOZXN0aW5nKys7DQotDQotICAgIC8qIFRoaXMgaXMgbm90IHRoZSBpbnRlcnJ1cHQgc2FmZSB2ZXJzaW9uIG9mIHRoZSBlbnRlciBjcml0aWNhbCBmdW5jdGlvbiBzbw0KLSAgICAgKiBhc3NlcnQoKSBpZiBpdCBpcyBiZWluZyBjYWxsZWQgZnJvbSBhbiBpbnRlcnJ1cHQgY29udGV4dC4gIE9ubHkgQVBJDQotICAgICAqIGZ1bmN0aW9ucyB0aGF0IGVuZCBpbiAiRnJvbUlTUiIgY2FuIGJlIHVzZWQgaW4gYW4gaW50ZXJydXB0LiAgT25seSBhc3NlcnQgaWYNCi0gICAgICogdGhlIGNyaXRpY2FsIG5lc3RpbmcgY291bnQgaXMgMSB0byBwcm90ZWN0IGFnYWluc3QgcmVjdXJzaXZlIGNhbGxzIGlmIHRoZQ0KLSAgICAgKiBhc3NlcnQgZnVuY3Rpb24gYWxzbyB1c2VzIGEgY3JpdGljYWwgc2VjdGlvbi4gKi8NCi0gICAgaWYoIHVsQ3JpdGljYWxOZXN0aW5nID09IDEgKQ0KLSAgICB7DQotICAgICAgICBjb25maWdBU1NFUlQoIHVsUG9ydEludGVycnVwdE5lc3RpbmcgPT0gMCApOw0KLSAgICB9DQorCS8qIE5vdyBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB1bENyaXRpY2FsTmVzdGluZyBjYW4gYmUgYWNjZXNzZWQNCisJZGlyZWN0bHkuICBJbmNyZW1lbnQgdWxDcml0aWNhbE5lc3RpbmcgdG8ga2VlcCBhIGNvdW50IG9mIGhvdyBtYW55IHRpbWVzDQorCXBvcnRFTlRFUl9DUklUSUNBTCgpIGhhcyBiZWVuIGNhbGxlZC4gKi8NCisJdWxDcml0aWNhbE5lc3RpbmcrKzsNCisJDQorCS8qIFRoaXMgaXMgbm90IHRoZSBpbnRlcnJ1cHQgc2FmZSB2ZXJzaW9uIG9mIHRoZSBlbnRlciBjcml0aWNhbCBmdW5jdGlvbiBzbw0KKwlhc3NlcnQoKSBpZiBpdCBpcyBiZWluZyBjYWxsZWQgZnJvbSBhbiBpbnRlcnJ1cHQgY29udGV4dC4gIE9ubHkgQVBJIA0KKwlmdW5jdGlvbnMgdGhhdCBlbmQgaW4gIkZyb21JU1IiIGNhbiBiZSB1c2VkIGluIGFuIGludGVycnVwdC4gIE9ubHkgYXNzZXJ0IGlmDQorCXRoZSBjcml0aWNhbCBuZXN0aW5nIGNvdW50IGlzIDEgdG8gcHJvdGVjdCBhZ2FpbnN0IHJlY3Vyc2l2ZSBjYWxscyBpZiB0aGUNCisJYXNzZXJ0IGZ1bmN0aW9uIGFsc28gdXNlcyBhIGNyaXRpY2FsIHNlY3Rpb24uICovDQorCWlmKCB1bENyaXRpY2FsTmVzdGluZyA9PSAxICkNCisJew0KKwkJY29uZmlnQVNTRVJUKCB1bFBvcnRJbnRlcnJ1cHROZXN0aW5nID09IDAgKTsNCisJfQ0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICkNCiB7DQotICAgIGlmKCB1bENyaXRpY2FsTmVzdGluZyA+IHBvcnROT19DUklUSUNBTF9ORVNUSU5HICkNCi0gICAgew0KLSAgICAgICAgLyogRGVjcmVtZW50IHRoZSBuZXN0aW5nIGNvdW50IGFzIHRoZSBjcml0aWNhbCBzZWN0aW9uIGlzIGJlaW5nDQotICAgICAgICAgKiBleGl0ZWQuICovDQotICAgICAgICB1bENyaXRpY2FsTmVzdGluZy0tOw0KKwlpZiggdWxDcml0aWNhbE5lc3RpbmcgPiBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyApDQorCXsNCisJCS8qIERlY3JlbWVudCB0aGUgbmVzdGluZyBjb3VudCBhcyB0aGUgY3JpdGljYWwgc2VjdGlvbiBpcyBiZWluZw0KKwkJZXhpdGVkLiAqLw0KKwkJdWxDcml0aWNhbE5lc3RpbmctLTsNCiANCi0gICAgICAgIC8qIElmIHRoZSBuZXN0aW5nIGxldmVsIGhhcyByZWFjaGVkIHplcm8gdGhlbiBhbGwgaW50ZXJydXB0DQotICAgICAgICAgKiBwcmlvcml0aWVzIG11c3QgYmUgcmUtZW5hYmxlZC4gKi8NCi0gICAgICAgIGlmKCB1bENyaXRpY2FsTmVzdGluZyA9PSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyApDQotICAgICAgICB7DQotICAgICAgICAgICAgLyogQ3JpdGljYWwgbmVzdGluZyBoYXMgcmVhY2hlZCB6ZXJvIHNvIGFsbCBpbnRlcnJ1cHQgcHJpb3JpdGllcw0KLSAgICAgICAgICAgICAqIHNob3VsZCBiZSB1bm1hc2tlZC4gKi8NCi0gICAgICAgICAgICBwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0soKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KKwkJLyogSWYgdGhlIG5lc3RpbmcgbGV2ZWwgaGFzIHJlYWNoZWQgemVybyB0aGVuIGFsbCBpbnRlcnJ1cHQNCisJCXByaW9yaXRpZXMgbXVzdCBiZSByZS1lbmFibGVkLiAqLw0KKwkJaWYoIHVsQ3JpdGljYWxOZXN0aW5nID09IHBvcnROT19DUklUSUNBTF9ORVNUSU5HICkNCisJCXsNCisJCQkvKiBDcml0aWNhbCBuZXN0aW5nIGhhcyByZWFjaGVkIHplcm8gc28gYWxsIGludGVycnVwdCBwcmlvcml0aWVzDQorCQkJc2hvdWxkIGJlIHVubWFza2VkLiAqLw0KKwkJCXBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTSygpOw0KKwkJfQ0KKwl9DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgRnJlZVJUT1NfVGlja19IYW5kbGVyKCB2b2lkICkNCiB7DQotICAgIC8qIFNldCBpbnRlcnJ1cHQgbWFzayBiZWZvcmUgYWx0ZXJpbmcgc2NoZWR1bGVyIHN0cnVjdHVyZXMuICAgVGhlIHRpY2sNCi0gICAgICogaGFuZGxlciBydW5zIGF0IHRoZSBsb3dlc3QgcHJpb3JpdHksIHNvIGludGVycnVwdHMgY2Fubm90IGFscmVhZHkgYmUgbWFza2VkLA0KLSAgICAgKiBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIHNhdmUgYW5kIHJlc3RvcmUgdGhlIGN1cnJlbnQgbWFzayB2YWx1ZS4gKi8NCi0gICAgX19kaXNhYmxlX2lycSgpOw0KLSAgICBwb3J0SUNDUE1SX1BSSU9SSVRZX01BU0tfUkVHSVNURVIgPSAoIHVpbnQzMl90ICkgKCBjb25maWdNQVhfQVBJX0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIDw8IHBvcnRQUklPUklUWV9TSElGVCApOw0KLSAgICBfX2FzbSggIkRTQgkJXG4iDQotICAgICAgICAgICAiSVNCCQlcbiIpOw0KLSAgICBfX2VuYWJsZV9pcnEoKTsNCisJLyogU2V0IGludGVycnVwdCBtYXNrIGJlZm9yZSBhbHRlcmluZyBzY2hlZHVsZXIgc3RydWN0dXJlcy4gICBUaGUgdGljaw0KKwloYW5kbGVyIHJ1bnMgYXQgdGhlIGxvd2VzdCBwcmlvcml0eSwgc28gaW50ZXJydXB0cyBjYW5ub3QgYWxyZWFkeSBiZSBtYXNrZWQsDQorCXNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gc2F2ZSBhbmQgcmVzdG9yZSB0aGUgY3VycmVudCBtYXNrIHZhbHVlLiAqLw0KKwlfX2Rpc2FibGVfaXJxKCk7DQorCXBvcnRJQ0NQTVJfUFJJT1JJVFlfTUFTS19SRUdJU1RFUiA9ICggdWludDMyX3QgKSAoIGNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgPDwgcG9ydFBSSU9SSVRZX1NISUZUICk7DQorCV9fYXNtKAkiRFNCCQlcbiINCisJCQkiSVNCCQlcbiIgKTsNCisJX19lbmFibGVfaXJxKCk7DQogDQotICAgIC8qIEluY3JlbWVudCB0aGUgUlRPUyB0aWNrLiAqLw0KLSAgICBpZiggeFRhc2tJbmNyZW1lbnRUaWNrKCkgIT0gcGRGQUxTRSApDQotICAgIHsNCi0gICAgICAgIHVsUG9ydFlpZWxkUmVxdWlyZWQgPSBwZFRSVUU7DQotICAgIH0NCisJLyogSW5jcmVtZW50IHRoZSBSVE9TIHRpY2suICovDQorCWlmKCB4VGFza0luY3JlbWVudFRpY2soKSAhPSBwZEZBTFNFICkNCisJew0KKwkJdWxQb3J0WWllbGRSZXF1aXJlZCA9IHBkVFJVRTsNCisJfQ0KIA0KLSAgICAvKiBFbnN1cmUgYWxsIGludGVycnVwdCBwcmlvcml0aWVzIGFyZSBhY3RpdmUgYWdhaW4uICovDQotICAgIHBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTSygpOw0KLSAgICBjb25maWdDTEVBUl9USUNLX0lOVEVSUlVQVCgpOw0KKwkvKiBFbnN1cmUgYWxsIGludGVycnVwdCBwcmlvcml0aWVzIGFyZSBhY3RpdmUgYWdhaW4uICovDQorCXBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTSygpOw0KKwljb25maWdDTEVBUl9USUNLX0lOVEVSUlVQVCgpOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0VGFza1VzZXNGUFUoIHZvaWQgKQ0KIHsNCi0gICAgdWludDMyX3QgdWxJbml0aWFsRlBTQ1IgPSAwOw0KK3VpbnQzMl90IHVsSW5pdGlhbEZQU0NSID0gMDsNCiANCi0gICAgLyogQSB0YXNrIGlzIHJlZ2lzdGVyaW5nIHRoZSBmYWN0IHRoYXQgaXQgbmVlZHMgYW4gRlBVIGNvbnRleHQuICBTZXQgdGhlDQotICAgICAqIEZQVSBmbGFnICh3aGljaCBpcyBzYXZlZCBhcyBwYXJ0IG9mIHRoZSB0YXNrIGNvbnRleHQpLiAqLw0KLSAgICB1bFBvcnRUYXNrSGFzRlBVQ29udGV4dCA9IHBkVFJVRTsNCisJLyogQSB0YXNrIGlzIHJlZ2lzdGVyaW5nIHRoZSBmYWN0IHRoYXQgaXQgbmVlZHMgYW4gRlBVIGNvbnRleHQuICBTZXQgdGhlDQorCUZQVSBmbGFnICh3aGljaCBpcyBzYXZlZCBhcyBwYXJ0IG9mIHRoZSB0YXNrIGNvbnRleHQpLiAqLw0KKwl1bFBvcnRUYXNrSGFzRlBVQ29udGV4dCA9IHBkVFJVRTsNCiANCi0gICAgLyogSW5pdGlhbGlzZSB0aGUgZmxvYXRpbmcgcG9pbnQgc3RhdHVzIHJlZ2lzdGVyLiAqLw0KLSAgICBfX2FzbSggIkZNWFIgCUZQU0NSLCAlMCI6OiJyIiAoIHVsSW5pdGlhbEZQU0NSICkgKTsNCisJLyogSW5pdGlhbGlzZSB0aGUgZmxvYXRpbmcgcG9pbnQgc3RhdHVzIHJlZ2lzdGVyLiAqLw0KKwlfX2FzbSggIkZNWFIgCUZQU0NSLCAlMCIgOjogInIiICh1bEluaXRpYWxGUFNDUikgKTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogdm9pZCB2UG9ydENsZWFySW50ZXJydXB0TWFzayggdWludDMyX3QgdWxOZXdNYXNrVmFsdWUgKQ0KIHsNCi0gICAgaWYoIHVsTmV3TWFza1ZhbHVlID09IHBkRkFMU0UgKQ0KLSAgICB7DQotICAgICAgICBwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0soKTsNCi0gICAgfQ0KKwlpZiggdWxOZXdNYXNrVmFsdWUgPT0gcGRGQUxTRSApDQorCXsNCisJCXBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTSygpOw0KKwl9DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHVpbnQzMl90IHVsUG9ydFNldEludGVycnVwdE1hc2soIHZvaWQgKQ0KIHsNCi0gICAgdWludDMyX3QgdWxSZXR1cm47DQordWludDMyX3QgdWxSZXR1cm47DQogDQotICAgIF9fZGlzYWJsZV9pcnEoKTsNCisJX19kaXNhYmxlX2lycSgpOw0KKwlpZiggcG9ydElDQ1BNUl9QUklPUklUWV9NQVNLX1JFR0lTVEVSID09ICggdWludDMyX3QgKSAoIGNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgPDwgcG9ydFBSSU9SSVRZX1NISUZUICkgKQ0KKwl7DQorCQkvKiBJbnRlcnJ1cHRzIHdlcmUgYWxyZWFkeSBtYXNrZWQuICovDQorCQl1bFJldHVybiA9IHBkVFJVRTsNCisJfQ0KKwllbHNlDQorCXsNCisJCXVsUmV0dXJuID0gcGRGQUxTRTsNCisJCXBvcnRJQ0NQTVJfUFJJT1JJVFlfTUFTS19SRUdJU1RFUiA9ICggdWludDMyX3QgKSAoIGNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgPDwgcG9ydFBSSU9SSVRZX1NISUZUICk7DQorCQlfX2FzbSgJIkRTQgkJXG4iDQorCQkJCSJJU0IJCVxuIiApOw0KKwl9DQorCV9fZW5hYmxlX2lycSgpOw0KIA0KLSAgICBpZiggcG9ydElDQ1BNUl9QUklPUklUWV9NQVNLX1JFR0lTVEVSID09ICggdWludDMyX3QgKSAoIGNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgPDwgcG9ydFBSSU9SSVRZX1NISUZUICkgKQ0KLSAgICB7DQotICAgICAgICAvKiBJbnRlcnJ1cHRzIHdlcmUgYWxyZWFkeSBtYXNrZWQuICovDQotICAgICAgICB1bFJldHVybiA9IHBkVFJVRTsNCi0gICAgfQ0KLSAgICBlbHNlDQotICAgIHsNCi0gICAgICAgIHVsUmV0dXJuID0gcGRGQUxTRTsNCi0gICAgICAgIHBvcnRJQ0NQTVJfUFJJT1JJVFlfTUFTS19SRUdJU1RFUiA9ICggdWludDMyX3QgKSAoIGNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgPDwgcG9ydFBSSU9SSVRZX1NISUZUICk7DQotICAgICAgICBfX2FzbSggIkRTQgkJXG4iDQotICAgICAgICAgICAgICAgIklTQgkJXG4iKTsNCi0gICAgfQ0KLQ0KLSAgICBfX2VuYWJsZV9pcnEoKTsNCi0NCi0gICAgcmV0dXJuIHVsUmV0dXJuOw0KKwlyZXR1cm4gdWxSZXR1cm47DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KLSNpZiAoIGNvbmZpZ0FTU0VSVF9ERUZJTkVEID09IDEgKQ0KKyNpZiggY29uZmlnQVNTRVJUX0RFRklORUQgPT0gMSApDQogDQotICAgIHZvaWQgdlBvcnRWYWxpZGF0ZUludGVycnVwdFByaW9yaXR5KCB2b2lkICkNCi0gICAgew0KLSAgICAgICAgLyogVGhlIGZvbGxvd2luZyBhc3NlcnRpb24gd2lsbCBmYWlsIGlmIGEgc2VydmljZSByb3V0aW5lIChJU1IpIGZvcg0KLSAgICAgICAgICogYW4gaW50ZXJydXB0IHRoYXQgaGFzIGJlZW4gYXNzaWduZWQgYSBwcmlvcml0eSBhYm92ZQ0KLSAgICAgICAgICogY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIGNhbGxzIGFuIElTUiBzYWZlIEZyZWVSVE9TIEFQSQ0KLSAgICAgICAgICogZnVuY3Rpb24uICBJU1Igc2FmZSBGcmVlUlRPUyBBUEkgZnVuY3Rpb25zIG11c3QgKm9ubHkqIGJlIGNhbGxlZA0KLSAgICAgICAgICogZnJvbSBpbnRlcnJ1cHRzIHRoYXQgaGF2ZSBiZWVuIGFzc2lnbmVkIGEgcHJpb3JpdHkgYXQgb3IgYmVsb3cNCi0gICAgICAgICAqIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWS4NCi0gICAgICAgICAqDQotICAgICAgICAgKiBOdW1lcmljYWxseSBsb3cgaW50ZXJydXB0IHByaW9yaXR5IG51bWJlcnMgcmVwcmVzZW50IGxvZ2ljYWxseSBoaWdoDQotICAgICAgICAgKiBpbnRlcnJ1cHQgcHJpb3JpdGllcywgdGhlcmVmb3JlIHRoZSBwcmlvcml0eSBvZiB0aGUgaW50ZXJydXB0IG11c3QNCi0gICAgICAgICAqIGJlIHNldCB0byBhIHZhbHVlIGVxdWFsIHRvIG9yIG51bWVyaWNhbGx5ICpoaWdoZXIqIHRoYW4NCi0gICAgICAgICAqIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWS4NCi0gICAgICAgICAqDQotICAgICAgICAgKiBGcmVlUlRPUyBtYWludGFpbnMgc2VwYXJhdGUgdGhyZWFkIGFuZCBJU1IgQVBJIGZ1bmN0aW9ucyB0byBlbnN1cmUNCi0gICAgICAgICAqIGludGVycnVwdCBlbnRyeSBpcyBhcyBmYXN0IGFuZCBzaW1wbGUgYXMgcG9zc2libGUuDQotICAgICAgICAgKg0KLSAgICAgICAgICogVGhlIGZvbGxvd2luZyBsaW5rcyBwcm92aWRlIGRldGFpbGVkIGluZm9ybWF0aW9uOg0KLSAgICAgICAgICogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvUlRPUy1Db3J0ZXgtTTMtTTQuaHRtbA0KLSAgICAgICAgICogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvRkFRSGVscC5odG1sICovDQotICAgICAgICBjb25maWdBU1NFUlQoIHBvcnRJQ0NSUFJfUlVOTklOR19QUklPUklUWV9SRUdJU1RFUiA+PSAoIHVpbnQzMl90ICkgKCBjb25maWdNQVhfQVBJX0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIDw8IHBvcnRQUklPUklUWV9TSElGVCApICk7DQorCXZvaWQgdlBvcnRWYWxpZGF0ZUludGVycnVwdFByaW9yaXR5KCB2b2lkICkNCisJew0KKwkJLyogVGhlIGZvbGxvd2luZyBhc3NlcnRpb24gd2lsbCBmYWlsIGlmIGEgc2VydmljZSByb3V0aW5lIChJU1IpIGZvcg0KKwkJYW4gaW50ZXJydXB0IHRoYXQgaGFzIGJlZW4gYXNzaWduZWQgYSBwcmlvcml0eSBhYm92ZQ0KKwkJY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIGNhbGxzIGFuIElTUiBzYWZlIEZyZWVSVE9TIEFQSQ0KKwkJZnVuY3Rpb24uICBJU1Igc2FmZSBGcmVlUlRPUyBBUEkgZnVuY3Rpb25zIG11c3QgKm9ubHkqIGJlIGNhbGxlZA0KKwkJZnJvbSBpbnRlcnJ1cHRzIHRoYXQgaGF2ZSBiZWVuIGFzc2lnbmVkIGEgcHJpb3JpdHkgYXQgb3IgYmVsb3cNCisJCWNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWS4NCiANCi0gICAgICAgIC8qIFByaW9yaXR5IGdyb3VwaW5nOiAgVGhlIGludGVycnVwdCBjb250cm9sbGVyIChHSUMpIGFsbG93cyB0aGUgYml0cw0KLSAgICAgICAgICogdGhhdCBkZWZpbmUgZWFjaCBpbnRlcnJ1cHQncyBwcmlvcml0eSB0byBiZSBzcGxpdCBiZXR3ZWVuIGJpdHMgdGhhdA0KLSAgICAgICAgICogZGVmaW5lIHRoZSBpbnRlcnJ1cHQncyBwcmUtZW1wdGlvbiBwcmlvcml0eSBiaXRzIGFuZCBiaXRzIHRoYXQgZGVmaW5lDQotICAgICAgICAgKiB0aGUgaW50ZXJydXB0J3Mgc3ViLXByaW9yaXR5LiAgRm9yIHNpbXBsaWNpdHkgYWxsIGJpdHMgbXVzdCBiZSBkZWZpbmVkDQotICAgICAgICAgKiB0byBiZSBwcmUtZW1wdGlvbiBwcmlvcml0eSBiaXRzLiAgVGhlIGZvbGxvd2luZyBhc3NlcnRpb24gd2lsbCBmYWlsIGlmDQotICAgICAgICAgKiB0aGlzIGlzIG5vdCB0aGUgY2FzZSAoaWYgc29tZSBiaXRzIHJlcHJlc2VudCBhIHN1Yi1wcmlvcml0eSkuDQotICAgICAgICAgKg0KLSAgICAgICAgICogVGhlIHByaW9yaXR5IGdyb3VwaW5nIGlzIGNvbmZpZ3VyZWQgYnkgdGhlIEdJQydzIGJpbmFyeSBwb2ludCByZWdpc3Rlcg0KLSAgICAgICAgICogKElDQ0JQUikuICBXcml0dGluZyAwIHRvIElDQ0JQUiB3aWxsIGVuc3VyZSBpdCBpcyBzZXQgdG8gaXRzIGxvd2VzdA0KLSAgICAgICAgICogcG9zc2libGUgdmFsdWUgKHdoaWNoIG1heSBiZSBhYm92ZSAwKS4gKi8NCi0gICAgICAgIGNvbmZpZ0FTU0VSVCggKCBwb3J0SUNDQlBSX0JJTkFSWV9QT0lOVF9SRUdJU1RFUiAmIHBvcnRCSU5BUllfUE9JTlRfQklUUyApIDw9IHBvcnRNQVhfQklOQVJZX1BPSU5UX1ZBTFVFICk7DQotICAgIH0NCisJCU51bWVyaWNhbGx5IGxvdyBpbnRlcnJ1cHQgcHJpb3JpdHkgbnVtYmVycyByZXByZXNlbnQgbG9naWNhbGx5IGhpZ2gNCisJCWludGVycnVwdCBwcmlvcml0aWVzLCB0aGVyZWZvcmUgdGhlIHByaW9yaXR5IG9mIHRoZSBpbnRlcnJ1cHQgbXVzdA0KKwkJYmUgc2V0IHRvIGEgdmFsdWUgZXF1YWwgdG8gb3IgbnVtZXJpY2FsbHkgKmhpZ2hlciogdGhhbg0KKwkJY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZLg0KKw0KKwkJRnJlZVJUT1MgbWFpbnRhaW5zIHNlcGFyYXRlIHRocmVhZCBhbmQgSVNSIEFQSSBmdW5jdGlvbnMgdG8gZW5zdXJlDQorCQlpbnRlcnJ1cHQgZW50cnkgaXMgYXMgZmFzdCBhbmQgc2ltcGxlIGFzIHBvc3NpYmxlLg0KKw0KKwkJVGhlIGZvbGxvd2luZyBsaW5rcyBwcm92aWRlIGRldGFpbGVkIGluZm9ybWF0aW9uOg0KKwkJaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvUlRPUy1Db3J0ZXgtTTMtTTQuaHRtbA0KKwkJaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvRkFRSGVscC5odG1sICovDQorCQljb25maWdBU1NFUlQoIHBvcnRJQ0NSUFJfUlVOTklOR19QUklPUklUWV9SRUdJU1RFUiA+PSAoIHVpbnQzMl90ICkgKCBjb25maWdNQVhfQVBJX0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIDw8IHBvcnRQUklPUklUWV9TSElGVCApICk7DQorDQorCQkvKiBQcmlvcml0eSBncm91cGluZzogIFRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciAoR0lDKSBhbGxvd3MgdGhlIGJpdHMNCisJCXRoYXQgZGVmaW5lIGVhY2ggaW50ZXJydXB0J3MgcHJpb3JpdHkgdG8gYmUgc3BsaXQgYmV0d2VlbiBiaXRzIHRoYXQNCisJCWRlZmluZSB0aGUgaW50ZXJydXB0J3MgcHJlLWVtcHRpb24gcHJpb3JpdHkgYml0cyBhbmQgYml0cyB0aGF0IGRlZmluZQ0KKwkJdGhlIGludGVycnVwdCdzIHN1Yi1wcmlvcml0eS4gIEZvciBzaW1wbGljaXR5IGFsbCBiaXRzIG11c3QgYmUgZGVmaW5lZA0KKwkJdG8gYmUgcHJlLWVtcHRpb24gcHJpb3JpdHkgYml0cy4gIFRoZSBmb2xsb3dpbmcgYXNzZXJ0aW9uIHdpbGwgZmFpbCBpZg0KKwkJdGhpcyBpcyBub3QgdGhlIGNhc2UgKGlmIHNvbWUgYml0cyByZXByZXNlbnQgYSBzdWItcHJpb3JpdHkpLg0KKw0KKwkJVGhlIHByaW9yaXR5IGdyb3VwaW5nIGlzIGNvbmZpZ3VyZWQgYnkgdGhlIEdJQydzIGJpbmFyeSBwb2ludCByZWdpc3Rlcg0KKwkJKElDQ0JQUikuICBXcml0dGluZyAwIHRvIElDQ0JQUiB3aWxsIGVuc3VyZSBpdCBpcyBzZXQgdG8gaXRzIGxvd2VzdA0KKwkJcG9zc2libGUgdmFsdWUgKHdoaWNoIG1heSBiZSBhYm92ZSAwKS4gKi8NCisJCWNvbmZpZ0FTU0VSVCggKCBwb3J0SUNDQlBSX0JJTkFSWV9QT0lOVF9SRUdJU1RFUiAmIHBvcnRCSU5BUllfUE9JTlRfQklUUyApIDw9IHBvcnRNQVhfQklOQVJZX1BPSU5UX1ZBTFVFICk7DQorCX0NCiANCiAjZW5kaWYgLyogY29uZmlnQVNTRVJUX0RFRklORUQgKi8NCisNCisNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9JQVIvQVJNX0NBOS9wb3J0QVNNLmggYi9wb3J0YWJsZS9JQVIvQVJNX0NBOS9wb3J0QVNNLmgKaW5kZXggODI3YjAxZi4uNGVjYmM5ZiAxMDA2NDQKLS0tIGEvcG9ydGFibGUvSUFSL0FSTV9DQTkvcG9ydEFTTS5oCisrKyBiL3BvcnRhYmxlL0lBUi9BUk1fQ0E5L3BvcnRBU00uaApAQCAtMSwxMjkgKzEsMTE1IEBACi07IC8qDQotICAgKiA7ICogRnJlZVJUT1MgS2VybmVsIFYxMC4zLjENCi0gICAqIDsgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgKiA7ICoNCi0gICAqIDsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mDQotICAgKiA7ICogdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4NCi0gICAqIDsgKiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvDQotICAgKiA7ICogdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YNCi0gICAqIDsgKiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sDQotICAgKiA7ICogc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6DQotICAgKiA7ICoNCi0gICAqIDsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwNCi0gICAqIDsgKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLg0KLSAgICogOyAqDQotICAgKiA7ICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1INCi0gICAqIDsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUw0KLSAgICogOyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUg0KLSAgICogOyAqIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUg0KLSAgICogOyAqIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElODQotICAgKiA7ICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4NCi0gICAqIDsgKg0KLSAgICogOyAqIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnDQotICAgKiA7ICogaHR0cDovL2F3cy5hbWF6b24uY29tL2ZyZWVydG9zDQotICAgKiA7ICoNCi0gICAqIDsgKiAxIHRhYiA9PSA0IHNwYWNlcyENCi0gICAqIDsgKi8NCis7LyoNCis7ICogRnJlZVJUT1MgS2VybmVsIFYxMC4zLjENCis7ICogQ29weXJpZ2h0IChDKSAyMDIwIEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuICBBbGwgUmlnaHRzIFJlc2VydmVkLg0KKzsgKg0KKzsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mDQorOyAqIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluDQorOyAqIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8NCis7ICogdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YNCis7ICogdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLA0KKzsgKiBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoNCis7ICoNCis7ICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsDQorOyAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuDQorOyAqDQorOyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SDQorOyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTDQorOyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUg0KKzsgKiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVINCis7ICogSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4NCis7ICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4NCis7ICoNCis7ICogaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcNCis7ICogaHR0cDovL2F3cy5hbWF6b24uY29tL2ZyZWVydG9zDQorOyAqDQorOyAqIDEgdGFiID09IDQgc3BhY2VzIQ0KKzsgKi8NCiANCi1FWFRFUk4gdlRhc2tTd2l0Y2hDb250ZXh0DQotRVhURVJOIHVsQ3JpdGljYWxOZXN0aW5nDQotRVhURVJOIHB4Q3VycmVudFRDQg0KLUVYVEVSTiB1bFBvcnRUYXNrSGFzRlBVQ29udGV4dA0KLUVYVEVSTiB1bEFzbUFQSVByaW9yaXR5TWFzaw0KKwlFWFRFUk4JdlRhc2tTd2l0Y2hDb250ZXh0DQorCUVYVEVSTiAgdWxDcml0aWNhbE5lc3RpbmcNCisJRVhURVJOCXB4Q3VycmVudFRDQg0KKwlFWFRFUk4JdWxQb3J0VGFza0hhc0ZQVUNvbnRleHQNCisJRVhURVJOICB1bEFzbUFQSVByaW9yaXR5TWFzaw0KIA0KIHBvcnRTQVZFX0NPTlRFWFQgbWFjcm8NCiANCi07DQotU2F2ZSB0aGUgTFIgYW5kIFNQU1Igb250byB0aGUgc3lzdGVtIG1vZGUgc3RhY2sgYmVmb3JlIHN3aXRjaGluZyB0bw0KLTsNCi1zeXN0ZW0gbW9kZSB0byBzYXZlIHRoZSByZW1haW5pbmcgc3lzdGVtIG1vZGUgcmVnaXN0ZXJzDQotU1JTREIgc3AgISwgIyBTWVNfTU9ERQ0KLSAgICAgIENQUyAgICAgIyBTWVNfTU9ERQ0KLSAgICAgIFBVU0ggICAgeyBSMCAtIFIxMiwgUjE0IH0NCisJOyBTYXZlIHRoZSBMUiBhbmQgU1BTUiBvbnRvIHRoZSBzeXN0ZW0gbW9kZSBzdGFjayBiZWZvcmUgc3dpdGNoaW5nIHRvDQorCTsgc3lzdGVtIG1vZGUgdG8gc2F2ZSB0aGUgcmVtYWluaW5nIHN5c3RlbSBtb2RlIHJlZ2lzdGVycw0KKwlTUlNEQglzcCEsICNTWVNfTU9ERQ0KKwlDUFMJCSNTWVNfTU9ERQ0KKwlQVVNICXtSMC1SMTIsIFIxNH0NCiANCi07DQotUHVzaCB0aGUgY3JpdGljYWwgbmVzdGluZyBjb3VudA0KLUxEUiBSMiwgPSB1bENyaXRpY2FsTmVzdGluZw0KLSAgICAgICAgICBMRFIgUjEsIFsgUjIgXQ0KLVBVU0ggICAgeyBSMSB9DQorCTsgUHVzaCB0aGUgY3JpdGljYWwgbmVzdGluZyBjb3VudA0KKwlMRFIJCVIyLCA9dWxDcml0aWNhbE5lc3RpbmcNCisJTERSCQlSMSwgW1IyXQ0KKwlQVVNICXtSMX0NCiANCi07DQotRG9lcyB0aGUgdGFzayBoYXZlIGEgZmxvYXRpbmcgcG9pbnQgY29udGV4dCB0aGF0IG5lZWRzIHNhdmluZyA/IElmDQotOw0KLXVsUG9ydFRhc2tIYXNGUFVDb250ZXh0IGlzIDAgdGhlbiBuby4NCi0gICBMRFIgUjIsID0gdWxQb3J0VGFza0hhc0ZQVUNvbnRleHQNCi0gICAgICAgICAgICAgTERSIFIzLCBbIFIyIF0NCi1DTVAgUjMsICMgMA0KKwk7IERvZXMgdGhlIHRhc2sgaGF2ZSBhIGZsb2F0aW5nIHBvaW50IGNvbnRleHQgdGhhdCBuZWVkcyBzYXZpbmc/ICBJZg0KKwk7IHVsUG9ydFRhc2tIYXNGUFVDb250ZXh0IGlzIDAgdGhlbiBuby4NCisJTERSCQlSMiwgPXVsUG9ydFRhc2tIYXNGUFVDb250ZXh0DQorCUxEUgkJUjMsIFtSMl0NCisJQ01QCQlSMywgIzANCiANCi07DQotU2F2ZSB0aGUgZmxvYXRpbmcgcG9pbnQgY29udGV4dCwgaWYgYW55DQotRk1SWE5FIFIxLCBGUFNDUg0KLSAgICAgICAgICAgICAgICAgICAgICAgIFZQVVNITkUgeyBEMCAtIEQxNSB9DQotVlBVU0hORSB7IEQxNiAtIEQzMSB9DQotUFVTSE5FICB7IFIxIH0NCisJOyBTYXZlIHRoZSBmbG9hdGluZyBwb2ludCBjb250ZXh0LCBpZiBhbnkNCisJRk1SWE5FICBSMSwgIEZQU0NSDQorCVZQVVNITkUge0QwLUQxNX0NCisJVlBVU0hORQl7RDE2LUQzMX0NCisJUFVTSE5FCXtSMX0NCiANCi07DQotU2F2ZSB1bFBvcnRUYXNrSGFzRlBVQ29udGV4dCBpdHNlbGYNCi0gICAgUFVTSCAgICB7IFIzIH0NCisJOyBTYXZlIHVsUG9ydFRhc2tIYXNGUFVDb250ZXh0IGl0c2VsZg0KKwlQVVNICXtSM30NCiANCi07DQotU2F2ZSB0aGUgc3RhY2sgcG9pbnRlciBpbiB0aGUgVENCDQotTERSIFIwLCA9IHB4Q3VycmVudFRDQg0KLSAgICAgICAgICBMRFIgUjEsIFsgUjAgXQ0KLVNUUiBTUCwgWyBSMSBdDQorCTsgU2F2ZSB0aGUgc3RhY2sgcG9pbnRlciBpbiB0aGUgVENCDQorCUxEUgkJUjAsID1weEN1cnJlbnRUQ0INCisJTERSCQlSMSwgW1IwXQ0KKwlTVFIJCVNQLCBbUjFdDQogDQotZW5kbQ0KKwllbmRtDQogDQogOyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCiANCiBwb3J0UkVTVE9SRV9DT05URVhUIG1hY3JvDQogDQotOw0KLVNldCB0aGUgU1AgdG8gcG9pbnQgdG8gdGhlIHN0YWNrIG9mIHRoZSB0YXNrIGJlaW5nIHJlc3RvcmVkLg0KLSAgIExEUiBSMCwgPSBweEN1cnJlbnRUQ0INCi0gICAgICAgICAgICAgTERSIFIxLCBbIFIwIF0NCi1MRFIgU1AsIFsgUjEgXQ0KKwk7IFNldCB0aGUgU1AgdG8gcG9pbnQgdG8gdGhlIHN0YWNrIG9mIHRoZSB0YXNrIGJlaW5nIHJlc3RvcmVkLg0KKwlMRFIJCVIwLCA9cHhDdXJyZW50VENCDQorCUxEUgkJUjEsIFtSMF0NCisJTERSCQlTUCwgW1IxXQ0KIA0KLTsNCi1JcyB0aGVyZSBhIGZsb2F0aW5nIHBvaW50IGNvbnRleHQgdG8gcmVzdG9yZSA/IElmIHRoZSByZXN0b3JlZA0KLTsNCi11bFBvcnRUYXNrSGFzRlBVQ29udGV4dCBpcyB6ZXJvIHRoZW4gbm8uDQotICAgTERSIFIwLCA9IHVsUG9ydFRhc2tIYXNGUFVDb250ZXh0DQotICAgICAgICAgICAgIFBPUCAgICAgeyBSMSB9DQotU1RSIFIxLCBbIFIwIF0NCi1DTVAgUjEsICMgMA0KKwk7IElzIHRoZXJlIGEgZmxvYXRpbmcgcG9pbnQgY29udGV4dCB0byByZXN0b3JlPyAgSWYgdGhlIHJlc3RvcmVkDQorCTsgdWxQb3J0VGFza0hhc0ZQVUNvbnRleHQgaXMgemVybyB0aGVuIG5vLg0KKwlMRFIJCVIwLCA9dWxQb3J0VGFza0hhc0ZQVUNvbnRleHQNCisJUE9QCQl7UjF9DQorCVNUUgkJUjEsIFtSMF0NCisJQ01QCQlSMSwgIzANCiANCi07DQotUmVzdG9yZSB0aGUgZmxvYXRpbmcgcG9pbnQgY29udGV4dCwgaWYgYW55DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgUE9QTkUgICB7IFIwIH0NCi1WUE9QTkUgIHsgRDE2IC0gRDMxIH0NCi1WUE9QTkUgIHsgRDAgLSBEMTUgfQ0KLVZNU1JORSBGUFNDUiwgUjANCisJOyBSZXN0b3JlIHRoZSBmbG9hdGluZyBwb2ludCBjb250ZXh0LCBpZiBhbnkNCisJUE9QTkUgCXtSMH0NCisJVlBPUE5FCXtEMTYtRDMxfQ0KKwlWUE9QTkUJe0QwLUQxNX0NCisJVk1TUk5FICBGUFNDUiwgUjANCiANCi07DQotUmVzdG9yZSB0aGUgY3JpdGljYWwgc2VjdGlvbiBuZXN0aW5nIGRlcHRoDQotTERSIFIwLCA9IHVsQ3JpdGljYWxOZXN0aW5nDQotICAgICAgICAgIFBPUCAgICAgeyBSMSB9DQotU1RSIFIxLCBbIFIwIF0NCisJOyBSZXN0b3JlIHRoZSBjcml0aWNhbCBzZWN0aW9uIG5lc3RpbmcgZGVwdGgNCisJTERSCQlSMCwgPXVsQ3JpdGljYWxOZXN0aW5nDQorCVBPUAkJe1IxfQ0KKwlTVFIJCVIxLCBbUjBdDQogDQotOw0KLUVuc3VyZSB0aGUgcHJpb3JpdHkgbWFzayBpcyBjb3JyZWN0IGZvciB0aGUgY3JpdGljYWwgbmVzdGluZyBkZXB0aA0KLUxEUiBSMiwgPSBwb3J0SUNDUE1SX1BSSU9SSVRZX01BU0tfUkVHSVNURVJfQUREUkVTUw0KLSAgICAgICAgICBDTVAgUjEsICMgMA0KLU1PVkVRIFI0LCAjIDI1NQ0KLUxEUk5FIFI0LCA9ICggY29uZmlnTUFYX0FQSV9DQUxMX0lOVEVSUlVQVF9QUklPUklUWSA8PCBwb3J0UFJJT1JJVFlfU0hJRlQgKQ0KLSAgICAgICAgICAgIFNUUiBSNCwgWyByMiBdDQorCTsgRW5zdXJlIHRoZSBwcmlvcml0eSBtYXNrIGlzIGNvcnJlY3QgZm9yIHRoZSBjcml0aWNhbCBuZXN0aW5nIGRlcHRoDQorCUxEUgkJUjIsID1wb3J0SUNDUE1SX1BSSU9SSVRZX01BU0tfUkVHSVNURVJfQUREUkVTUw0KKwlDTVAJCVIxLCAjMA0KKwlNT1ZFUQlSNCwgIzI1NQ0KKwlMRFJORQlSNCwgPSggY29uZmlnTUFYX0FQSV9DQUxMX0lOVEVSUlVQVF9QUklPUklUWSA8PCBwb3J0UFJJT1JJVFlfU0hJRlQgKQ0KKwlTVFIJCVI0LCBbcjJdDQogDQotOw0KLVJlc3RvcmUgYWxsIHN5c3RlbSBtb2RlIHJlZ2lzdGVycyBvdGhlciB0aGFuIHRoZSBTUCggd2hpY2ggaXMgYWxyZWFkeQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVpbmcgdXNlZCApDQotUE9QDQotew0KLSAgICBSMCAtIFIxMiwgUjE0DQotfQ0KKwk7IFJlc3RvcmUgYWxsIHN5c3RlbSBtb2RlIHJlZ2lzdGVycyBvdGhlciB0aGFuIHRoZSBTUCAod2hpY2ggaXMgYWxyZWFkeQ0KKwk7IGJlaW5nIHVzZWQpDQorCVBPUAkJe1IwLVIxMiwgUjE0fQ0KIA0KLVJldHVybiB0byB0aGUgdGFzayBjb2RlLCBsb2FkaW5nIENQU1Igb24gdGhlIHdheS4NCi0gICBSRkVJQSBzcCAhDQorCTsgUmV0dXJuIHRvIHRoZSB0YXNrIGNvZGUsIGxvYWRpbmcgQ1BTUiBvbiB0aGUgd2F5Lg0KKwlSRkVJQQlzcCENCiANCi1lbmRtDQorCWVuZG0NCisNCisNCisNCisNCisNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9JQVIvQVJNX0NBOS9wb3J0bWFjcm8uaCBiL3BvcnRhYmxlL0lBUi9BUk1fQ0E5L3BvcnRtYWNyby5oCmluZGV4IDM0M2ZmZmMuLjJiMWJhYTUgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0lBUi9BUk1fQ0E5L3BvcnRtYWNyby5oCisrKyBiL3BvcnRhYmxlL0lBUi9BUk1fQ0E5L3BvcnRtYWNyby5oCkBAIC0yNiwxODMgKzI2LDE4NCBAQAogICovDQogDQogI2lmbmRlZiBQT1JUTUFDUk9fSA0KLSAgICAjZGVmaW5lIFBPUlRNQUNST19IDQorI2RlZmluZSBQT1JUTUFDUk9fSA0KIA0KIC8qIElBUiBpbmNsdWRlcy4gKi8NCi0gICAgI2lmZGVmIF9fSUNDQVJNX18NCisjaWZkZWYgX19JQ0NBUk1fXw0KIA0KLSAgICAgICAgI2luY2x1ZGUgPGludHJpbnNpY3MuaD4NCisJI2luY2x1ZGUgPGludHJpbnNpY3MuaD4NCiANCi0gICAgICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgICAgIGV4dGVybiAiQyIgew0KLSAgICAgICAgI2VuZGlmDQorCSNpZmRlZiBfX2NwbHVzcGx1cw0KKwkJZXh0ZXJuICJDIiB7DQorCSNlbmRpZg0KIA0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0gKiBQb3J0IHNwZWNpZmljIGRlZmluaXRpb25zLg0KLSAqDQotICogVGhlIHNldHRpbmdzIGluIHRoaXMgZmlsZSBjb25maWd1cmUgRnJlZVJUT1MgY29ycmVjdGx5IGZvciB0aGUgZ2l2ZW4gaGFyZHdhcmUNCi0gKiBhbmQgY29tcGlsZXIuDQotICoNCi0gKiBUaGVzZSBzZXR0aW5ncyBzaG91bGQgbm90IGJlIGFsdGVyZWQuDQotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLSAqLw0KKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorCSAqIFBvcnQgc3BlY2lmaWMgZGVmaW5pdGlvbnMuDQorCSAqDQorCSAqIFRoZSBzZXR0aW5ncyBpbiB0aGlzIGZpbGUgY29uZmlndXJlIEZyZWVSVE9TIGNvcnJlY3RseSBmb3IgdGhlIGdpdmVuIGhhcmR3YXJlDQorCSAqIGFuZCBjb21waWxlci4NCisJICoNCisJICogVGhlc2Ugc2V0dGluZ3Mgc2hvdWxkIG5vdCBiZSBhbHRlcmVkLg0KKwkgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorCSAqLw0KIA0KLS8qIFR5cGUgZGVmaW5pdGlvbnMuICovDQotICAgICAgICAjZGVmaW5lIHBvcnRDSEFSICAgICAgICAgIGNoYXINCi0gICAgICAgICNkZWZpbmUgcG9ydEZMT0FUICAgICAgICAgZmxvYXQNCi0gICAgICAgICNkZWZpbmUgcG9ydERPVUJMRSAgICAgICAgZG91YmxlDQotICAgICAgICAjZGVmaW5lIHBvcnRMT05HICAgICAgICAgIGxvbmcNCi0gICAgICAgICNkZWZpbmUgcG9ydFNIT1JUICAgICAgICAgc2hvcnQNCi0gICAgICAgICNkZWZpbmUgcG9ydFNUQUNLX1RZUEUgICAgdWludDMyX3QNCi0gICAgICAgICNkZWZpbmUgcG9ydEJBU0VfVFlQRSAgICAgbG9uZw0KKwkvKiBUeXBlIGRlZmluaXRpb25zLiAqLw0KKwkjZGVmaW5lIHBvcnRDSEFSCQljaGFyDQorCSNkZWZpbmUgcG9ydEZMT0FUCQlmbG9hdA0KKwkjZGVmaW5lIHBvcnRET1VCTEUJCWRvdWJsZQ0KKwkjZGVmaW5lIHBvcnRMT05HCQlsb25nDQorCSNkZWZpbmUgcG9ydFNIT1JUCQlzaG9ydA0KKwkjZGVmaW5lIHBvcnRTVEFDS19UWVBFCXVpbnQzMl90DQorCSNkZWZpbmUgcG9ydEJBU0VfVFlQRQlsb25nDQogDQotICAgICAgICB0eXBlZGVmIHBvcnRTVEFDS19UWVBFICAgU3RhY2tUeXBlX3Q7DQotICAgICAgICB0eXBlZGVmIGxvbmcgICAgICAgICAgICAgQmFzZVR5cGVfdDsNCi0gICAgICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyAgICBVQmFzZVR5cGVfdDsNCisJdHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSBTdGFja1R5cGVfdDsNCisJdHlwZWRlZiBsb25nIEJhc2VUeXBlX3Q7DQorCXR5cGVkZWYgdW5zaWduZWQgbG9uZyBVQmFzZVR5cGVfdDsNCiANCi0gICAgICAgIHR5cGVkZWYgdWludDMyX3QgICAgICAgICBUaWNrVHlwZV90Ow0KLSAgICAgICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICAgICAgICAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwNCisJdHlwZWRlZiB1aW50MzJfdCBUaWNrVHlwZV90Ow0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQogDQotLyogMzItYml0IHRpY2sgdHlwZSBvbiBhIDMyLWJpdCBhcmNoaXRlY3R1cmUsIHNvIHJlYWRzIG9mIHRoZSB0aWNrIGNvdW50IGRvDQotICogbm90IG5lZWQgdG8gYmUgZ3VhcmRlZCB3aXRoIGEgY3JpdGljYWwgc2VjdGlvbi4gKi8NCi0gICAgICAgICNkZWZpbmUgcG9ydFRJQ0tfVFlQRV9JU19BVE9NSUMgICAgMQ0KKwkvKiAzMi1iaXQgdGljayB0eXBlIG9uIGEgMzItYml0IGFyY2hpdGVjdHVyZSwgc28gcmVhZHMgb2YgdGhlIHRpY2sgY291bnQgZG8NCisJbm90IG5lZWQgdG8gYmUgZ3VhcmRlZCB3aXRoIGEgY3JpdGljYWwgc2VjdGlvbi4gKi8NCisJI2RlZmluZSBwb3J0VElDS19UWVBFX0lTX0FUT01JQyAxDQogDQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KLS8qIEhhcmR3YXJlIHNwZWNpZmljcy4gKi8NCi0gICAgICAgICNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSCAgICAgICggLTEgKQ0KLSAgICAgICAgI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMgICAgKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCi0gICAgICAgICNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UICAgIDgNCisJLyogSGFyZHdhcmUgc3BlY2lmaWNzLiAqLw0KKwkjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEgJCQkoIC0xICkNCisJI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMJCQkoICggVGlja1R5cGVfdCApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KKwkjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVAkJCTgNCiANCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQotLyogVGFzayB1dGlsaXRpZXMuICovDQorCS8qIFRhc2sgdXRpbGl0aWVzLiAqLw0KIA0KLS8qIENhbGxlZCBhdCB0aGUgZW5kIG9mIGFuIElTUiB0aGF0IGNhbiBjYXVzZSBhIGNvbnRleHQgc3dpdGNoLiAqLw0KLSAgICAgICAgI2RlZmluZSBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHhTd2l0Y2hSZXF1aXJlZCApIFwNCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBleHRlcm4gdWludDMyX3QgdWxQb3J0WWllbGRSZXF1aXJlZDsgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGlmKCB4U3dpdGNoUmVxdWlyZWQgIT0gcGRGQUxTRSApICAgICAgICAgICAgICAgICBcDQotICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIHVsUG9ydFlpZWxkUmVxdWlyZWQgPSBwZFRSVUU7ICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIH0NCisJLyogQ2FsbGVkIGF0IHRoZSBlbmQgb2YgYW4gSVNSIHRoYXQgY2FuIGNhdXNlIGEgY29udGV4dCBzd2l0Y2guICovDQorCSNkZWZpbmUgcG9ydEVORF9TV0lUQ0hJTkdfSVNSKCB4U3dpdGNoUmVxdWlyZWQgKVwNCisJewkJCQkJCQkJCQkJCVwNCisJZXh0ZXJuIHVpbnQzMl90IHVsUG9ydFlpZWxkUmVxdWlyZWQ7CQkJXA0KKwkJCQkJCQkJCQkJCQlcDQorCQlpZiggeFN3aXRjaFJlcXVpcmVkICE9IHBkRkFMU0UgKQkJCVwNCisJCXsJCQkJCQkJCQkJCVwNCisJCQl1bFBvcnRZaWVsZFJlcXVpcmVkID0gcGRUUlVFOwkJCVwNCisJCX0JCQkJCQkJCQkJCVwNCisJfQ0KIA0KLSAgICAgICAgI2RlZmluZSBwb3J0WUlFTERfRlJPTV9JU1IoIHggKSAgICBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHggKQ0KLSAgICAgICAgI2RlZmluZSBwb3J0WUlFTEQoKSAgICAgICAgICAgICAgICBfX2FzbSggIlNXSSAwIiApOw0KKwkjZGVmaW5lIHBvcnRZSUVMRF9GUk9NX0lTUiggeCApIHBvcnRFTkRfU1dJVENISU5HX0lTUiggeCApDQorCSNkZWZpbmUgcG9ydFlJRUxEKCkgX19hc20oICJTV0kgMCIgKTsNCiANCiANCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotKiBDcml0aWNhbCBzZWN0aW9uIGNvbnRyb2wNCi0qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisJICogQ3JpdGljYWwgc2VjdGlvbiBjb250cm9sDQorCSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQotICAgICAgICBleHRlcm4gdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKTsNCi0gICAgICAgIGV4dGVybiB2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICk7DQotICAgICAgICBleHRlcm4gdWludDMyX3QgdWxQb3J0U2V0SW50ZXJydXB0TWFzayggdm9pZCApOw0KLSAgICAgICAgZXh0ZXJuIHZvaWQgdlBvcnRDbGVhckludGVycnVwdE1hc2soIHVpbnQzMl90IHVsTmV3TWFza1ZhbHVlICk7DQorCWV4dGVybiB2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCggdm9pZCApOw0KKwlleHRlcm4gdm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApOw0KKwlleHRlcm4gdWludDMyX3QgdWxQb3J0U2V0SW50ZXJydXB0TWFzayggdm9pZCApOw0KKwlleHRlcm4gdm9pZCB2UG9ydENsZWFySW50ZXJydXB0TWFzayggdWludDMyX3QgdWxOZXdNYXNrVmFsdWUgKTsNCiANCi0vKiBUaGVzZSBtYWNyb3MgZG8gbm90IGdsb2JhbGx5IGRpc2FibGUvZW5hYmxlIGludGVycnVwdHMuICBUaGV5IGRvIG1hc2sgb2ZmDQotICogaW50ZXJydXB0cyB0aGF0IGhhdmUgYSBwcmlvcml0eSBiZWxvdyBjb25maWdNQVhfQVBJX0NBTExfSU5URVJSVVBUX1BSSU9SSVRZLiAqLw0KLSAgICAgICAgI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKSAgICAgICAgICAgICAgICAgICAgICB2UG9ydEVudGVyQ3JpdGljYWwoKTsNCi0gICAgICAgICNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKSAgICAgICAgICAgICAgICAgICAgICAgdlBvcnRFeGl0Q3JpdGljYWwoKTsNCi0gICAgICAgICNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpICAgICAgICAgICAgICAgICAgdWxQb3J0U2V0SW50ZXJydXB0TWFzaygpDQotICAgICAgICAjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpICAgICAgICAgICAgICAgICAgIHZQb3J0Q2xlYXJJbnRlcnJ1cHRNYXNrKCAwICkNCi0gICAgICAgICNkZWZpbmUgcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpICAgICAgICAgdWxQb3J0U2V0SW50ZXJydXB0TWFzaygpDQotICAgICAgICAjZGVmaW5lIHBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUiggeCApICAgIHZQb3J0Q2xlYXJJbnRlcnJ1cHRNYXNrKCB4ICkNCisJLyogVGhlc2UgbWFjcm9zIGRvIG5vdCBnbG9iYWxseSBkaXNhYmxlL2VuYWJsZSBpbnRlcnJ1cHRzLiAgVGhleSBkbyBtYXNrIG9mZg0KKwlpbnRlcnJ1cHRzIHRoYXQgaGF2ZSBhIHByaW9yaXR5IGJlbG93IGNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkuICovDQorCSNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkJCXZQb3J0RW50ZXJDcml0aWNhbCgpOw0KKwkjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkJCQl2UG9ydEV4aXRDcml0aWNhbCgpOw0KKwkjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKQl1bFBvcnRTZXRJbnRlcnJ1cHRNYXNrKCkNCisJI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKQkJdlBvcnRDbGVhckludGVycnVwdE1hc2soIDAgKQ0KKwkjZGVmaW5lIHBvcnRTRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKQkJdWxQb3J0U2V0SW50ZXJydXB0TWFzaygpDQorCSNkZWZpbmUgcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKHgpCXZQb3J0Q2xlYXJJbnRlcnJ1cHRNYXNrKHgpDQogDQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KLS8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAgVGhlc2UgYXJlDQotICogbm90IHJlcXVpcmVkIGZvciB0aGlzIHBvcnQgYnV0IGluY2x1ZGVkIGluIGNhc2UgY29tbW9uIGRlbW8gY29kZSB0aGF0IHVzZXMgdGhlc2UNCi0gKiBtYWNyb3MgaXMgdXNlZC4gKi8NCi0gICAgICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KLSAgICAgICAgI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICAgICAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQorCS8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAgVGhlc2UgYXJlDQorCW5vdCByZXF1aXJlZCBmb3IgdGhpcyBwb3J0IGJ1dCBpbmNsdWRlZCBpbiBjYXNlIGNvbW1vbiBkZW1vIGNvZGUgdGhhdCB1c2VzIHRoZXNlDQorCW1hY3JvcyBpcyB1c2VkLiAqLw0KKwkjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApCXZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKwkjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApCXZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KIA0KLS8qIFByb3RvdHlwZSBvZiB0aGUgRnJlZVJUT1MgdGljayBoYW5kbGVyLiAgVGhpcyBtdXN0IGJlIGluc3RhbGxlZCBhcyB0aGUNCi0gKiBoYW5kbGVyIGZvciB3aGljaGV2ZXIgcGVyaXBoZXJhbCBpcyB1c2VkIHRvIGdlbmVyYXRlIHRoZSBSVE9TIHRpY2suICovDQotICAgICAgICB2b2lkIEZyZWVSVE9TX1RpY2tfSGFuZGxlciggdm9pZCApOw0KKwkvKiBQcm90b3R5cGUgb2YgdGhlIEZyZWVSVE9TIHRpY2sgaGFuZGxlci4gIFRoaXMgbXVzdCBiZSBpbnN0YWxsZWQgYXMgdGhlDQorCWhhbmRsZXIgZm9yIHdoaWNoZXZlciBwZXJpcGhlcmFsIGlzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIFJUT1MgdGljay4gKi8NCisJdm9pZCBGcmVlUlRPU19UaWNrX0hhbmRsZXIoIHZvaWQgKTsNCiANCi0vKiBBbnkgdGFzayB0aGF0IHVzZXMgdGhlIGZsb2F0aW5nIHBvaW50IHVuaXQgTVVTVCBjYWxsIHZQb3J0VGFza1VzZXNGUFUoKQ0KLSAqIGJlZm9yZSBhbnkgZmxvYXRpbmcgcG9pbnQgaW5zdHJ1Y3Rpb25zIGFyZSBleGVjdXRlZC4gKi8NCi0gICAgICAgIHZvaWQgdlBvcnRUYXNrVXNlc0ZQVSggdm9pZCApOw0KLSAgICAgICAgI2RlZmluZSBwb3J0VEFTS19VU0VTX0ZMT0FUSU5HX1BPSU5UKCkgICAgdlBvcnRUYXNrVXNlc0ZQVSgpDQorCS8qIEFueSB0YXNrIHRoYXQgdXNlcyB0aGUgZmxvYXRpbmcgcG9pbnQgdW5pdCBNVVNUIGNhbGwgdlBvcnRUYXNrVXNlc0ZQVSgpDQorCWJlZm9yZSBhbnkgZmxvYXRpbmcgcG9pbnQgaW5zdHJ1Y3Rpb25zIGFyZSBleGVjdXRlZC4gKi8NCisJdm9pZCB2UG9ydFRhc2tVc2VzRlBVKCB2b2lkICk7DQorCSNkZWZpbmUgcG9ydFRBU0tfVVNFU19GTE9BVElOR19QT0lOVCgpIHZQb3J0VGFza1VzZXNGUFUoKQ0KIA0KLSAgICAgICAgI2RlZmluZSBwb3J0TE9XRVNUX0lOVEVSUlVQVF9QUklPUklUWSAgICAgICAgICAgKCAoICggdWludDMyX3QgKSBjb25maWdVTklRVUVfSU5URVJSVVBUX1BSSU9SSVRJRVMgKSAtIDFVTCApDQotICAgICAgICAjZGVmaW5lIHBvcnRMT1dFU1RfVVNBQkxFX0lOVEVSUlVQVF9QUklPUklUWSAgICAoIHBvcnRMT1dFU1RfSU5URVJSVVBUX1BSSU9SSVRZIC0gMVVMICkNCisJI2RlZmluZSBwb3J0TE9XRVNUX0lOVEVSUlVQVF9QUklPUklUWSAoICggKCB1aW50MzJfdCApIGNvbmZpZ1VOSVFVRV9JTlRFUlJVUFRfUFJJT1JJVElFUyApIC0gMVVMICkNCisJI2RlZmluZSBwb3J0TE9XRVNUX1VTQUJMRV9JTlRFUlJVUFRfUFJJT1JJVFkgKCBwb3J0TE9XRVNUX0lOVEVSUlVQVF9QUklPUklUWSAtIDFVTCApDQogDQotLyogQXJjaGl0ZWN0dXJlIHNwZWNpZmljIG9wdGltaXNhdGlvbnMuICovDQotICAgICAgICAjaWZuZGVmIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTg0KLSAgICAgICAgICAgICNkZWZpbmUgY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OICAgIDENCi0gICAgICAgICNlbmRpZg0KKwkvKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWMgb3B0aW1pc2F0aW9ucy4gKi8NCisJI2lmbmRlZiBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04NCisJCSNkZWZpbmUgY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OIDENCisJI2VuZGlmDQogDQotICAgICAgICAjaWYgY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OID09IDENCisJI2lmIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiA9PSAxDQogDQotLyogU3RvcmUvY2xlYXIgdGhlIHJlYWR5IHByaW9yaXRpZXMgaW4gYSBiaXQgbWFwLiAqLw0KLSAgICAgICAgICAgICNkZWZpbmUgcG9ydFJFQ09SRF9SRUFEWV9QUklPUklUWSggdXhQcmlvcml0eSwgdXhSZWFkeVByaW9yaXRpZXMgKSAgICAoIHV4UmVhZHlQcmlvcml0aWVzICkgfD0gKCAxVUwgPDwgKCB1eFByaW9yaXR5ICkgKQ0KLSAgICAgICAgICAgICNkZWZpbmUgcG9ydFJFU0VUX1JFQURZX1BSSU9SSVRZKCB1eFByaW9yaXR5LCB1eFJlYWR5UHJpb3JpdGllcyApICAgICAoIHV4UmVhZHlQcmlvcml0aWVzICkgJj0gfiggMVVMIDw8ICggdXhQcmlvcml0eSApICkNCisJCS8qIFN0b3JlL2NsZWFyIHRoZSByZWFkeSBwcmlvcml0aWVzIGluIGEgYml0IG1hcC4gKi8NCisJCSNkZWZpbmUgcG9ydFJFQ09SRF9SRUFEWV9QUklPUklUWSggdXhQcmlvcml0eSwgdXhSZWFkeVByaW9yaXRpZXMgKSAoIHV4UmVhZHlQcmlvcml0aWVzICkgfD0gKCAxVUwgPDwgKCB1eFByaW9yaXR5ICkgKQ0KKwkJI2RlZmluZSBwb3J0UkVTRVRfUkVBRFlfUFJJT1JJVFkoIHV4UHJpb3JpdHksIHV4UmVhZHlQcmlvcml0aWVzICkgKCB1eFJlYWR5UHJpb3JpdGllcyApICY9IH4oIDFVTCA8PCAoIHV4UHJpb3JpdHkgKSApDQogDQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorCQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0gICAgICAgICAgICAjZGVmaW5lIHBvcnRHRVRfSElHSEVTVF9QUklPUklUWSggdXhUb3BQcmlvcml0eSwgdXhSZWFkeVByaW9yaXRpZXMgKSAgICB1eFRvcFByaW9yaXR5ID0gKCAzMSAtIF9fQ0xaKCB1eFJlYWR5UHJpb3JpdGllcyApICkNCisJCSNkZWZpbmUgcG9ydEdFVF9ISUdIRVNUX1BSSU9SSVRZKCB1eFRvcFByaW9yaXR5LCB1eFJlYWR5UHJpb3JpdGllcyApIHV4VG9wUHJpb3JpdHkgPSAoIDMxIC0gX19DTFooIHV4UmVhZHlQcmlvcml0aWVzICkgKQ0KIA0KLSAgICAgICAgI2VuZGlmIC8qIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiAqLw0KKwkjZW5kaWYgLyogY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OICovDQogDQotICAgICAgICAjaWZkZWYgY29uZmlnQVNTRVJUDQotICAgICAgICAgICAgdm9pZCB2UG9ydFZhbGlkYXRlSW50ZXJydXB0UHJpb3JpdHkoIHZvaWQgKTsNCi0gICAgICAgICAgICAjZGVmaW5lIHBvcnRBU1NFUlRfSUZfSU5URVJSVVBUX1BSSU9SSVRZX0lOVkFMSUQoKSAgICB2UG9ydFZhbGlkYXRlSW50ZXJydXB0UHJpb3JpdHkoKQ0KLSAgICAgICAgI2VuZGlmIC8qIGNvbmZpZ0FTU0VSVCAqLw0KKwkjaWZkZWYgY29uZmlnQVNTRVJUDQorCQl2b2lkIHZQb3J0VmFsaWRhdGVJbnRlcnJ1cHRQcmlvcml0eSggdm9pZCApOw0KKwkJI2RlZmluZSBwb3J0QVNTRVJUX0lGX0lOVEVSUlVQVF9QUklPUklUWV9JTlZBTElEKCkgCXZQb3J0VmFsaWRhdGVJbnRlcnJ1cHRQcmlvcml0eSgpDQorCSNlbmRpZiAvKiBjb25maWdBU1NFUlQgKi8NCiANCi0gICAgICAgICNkZWZpbmUgcG9ydE5PUCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2FzbSB2b2xhdGlsZSAoICJOT1AiICkNCisJI2RlZmluZSBwb3J0Tk9QKCkgX19hc20gdm9sYXRpbGUoICJOT1AiICkNCiANCiANCi0gICAgICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgICAgIH0gLyogZXh0ZXJuIEMgKi8NCi0gICAgICAgICNlbmRpZg0KKwkjaWZkZWYgX19jcGx1c3BsdXMNCisJCX0gLyogZXh0ZXJuIEMgKi8NCisJI2VuZGlmDQogDQotLyogU3VwcHJlc3Mgd2FybmluZ3MgdGhhdCBhcmUgZ2VuZXJhdGVkIGJ5IHRoZSBJQVIgdG9vbHMsIGJ1dCBjYW5ub3QgYmUNCi0gKiBmaXhlZCBpbiB0aGUgc291cmNlIGNvZGUgYmVjYXVzZSB0byBkbyBzbyB3b3VsZCBjYXVzZSBvdGhlciBjb21waWxlcnMgdG8NCi0gKiBnZW5lcmF0ZSB3YXJuaW5ncy4gKi8NCi0gICAgICAgICNwcmFnbWEgZGlhZ19zdXBwcmVzcz1QZTE5MQ0KLSAgICAgICAgI3ByYWdtYSBkaWFnX3N1cHByZXNzPVBhMDgyDQorCS8qIFN1cHByZXNzIHdhcm5pbmdzIHRoYXQgYXJlIGdlbmVyYXRlZCBieSB0aGUgSUFSIHRvb2xzLCBidXQgY2Fubm90IGJlDQorCWZpeGVkIGluIHRoZSBzb3VyY2UgY29kZSBiZWNhdXNlIHRvIGRvIHNvIHdvdWxkIGNhdXNlIG90aGVyIGNvbXBpbGVycyB0bw0KKwlnZW5lcmF0ZSB3YXJuaW5ncy4gKi8NCisJI3ByYWdtYSBkaWFnX3N1cHByZXNzPVBlMTkxDQorCSNwcmFnbWEgZGlhZ19zdXBwcmVzcz1QYTA4Mg0KIA0KLSAgICAjZW5kaWYgLyogX19JQ0NBUk1fXyAqLw0KKyNlbmRpZiAvKiBfX0lDQ0FSTV9fICovDQogDQogDQogLyogVGhlIG51bWJlciBvZiBiaXRzIHRvIHNoaWZ0IGZvciBhbiBpbnRlcnJ1cHQgcHJpb3JpdHkgaXMgZGVwZW5kZW50IG9uIHRoZQ0KLSAqIG51bWJlciBvZiBiaXRzIGltcGxlbWVudGVkIGJ5IHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlci4gKi8NCi0gICAgI2lmIGNvbmZpZ1VOSVFVRV9JTlRFUlJVUFRfUFJJT1JJVElFUyA9PSAxNg0KLSAgICAgICAgI2RlZmluZSBwb3J0UFJJT1JJVFlfU0hJRlQgICAgICAgICAgICA0DQotICAgICAgICAjZGVmaW5lIHBvcnRNQVhfQklOQVJZX1BPSU5UX1ZBTFVFICAgIDMNCi0gICAgI2VsaWYgY29uZmlnVU5JUVVFX0lOVEVSUlVQVF9QUklPUklUSUVTID09IDMyDQotICAgICAgICAjZGVmaW5lIHBvcnRQUklPUklUWV9TSElGVCAgICAgICAgICAgIDMNCi0gICAgICAgICNkZWZpbmUgcG9ydE1BWF9CSU5BUllfUE9JTlRfVkFMVUUgICAgMg0KLSAgICAjZWxpZiBjb25maWdVTklRVUVfSU5URVJSVVBUX1BSSU9SSVRJRVMgPT0gNjQNCi0gICAgICAgICNkZWZpbmUgcG9ydFBSSU9SSVRZX1NISUZUICAgICAgICAgICAgMg0KLSAgICAgICAgI2RlZmluZSBwb3J0TUFYX0JJTkFSWV9QT0lOVF9WQUxVRSAgICAxDQotICAgICNlbGlmIGNvbmZpZ1VOSVFVRV9JTlRFUlJVUFRfUFJJT1JJVElFUyA9PSAxMjgNCi0gICAgICAgICNkZWZpbmUgcG9ydFBSSU9SSVRZX1NISUZUICAgICAgICAgICAgMQ0KLSAgICAgICAgI2RlZmluZSBwb3J0TUFYX0JJTkFSWV9QT0lOVF9WQUxVRSAgICAwDQotICAgICNlbGlmIGNvbmZpZ1VOSVFVRV9JTlRFUlJVUFRfUFJJT1JJVElFUyA9PSAyNTYNCi0gICAgICAgICNkZWZpbmUgcG9ydFBSSU9SSVRZX1NISUZUICAgICAgICAgICAgMA0KLSAgICAgICAgI2RlZmluZSBwb3J0TUFYX0JJTkFSWV9QT0lOVF9WQUxVRSAgICAwDQotICAgICNlbHNlIC8qIGlmIGNvbmZpZ1VOSVFVRV9JTlRFUlJVUFRfUFJJT1JJVElFUyA9PSAxNiAqLw0KLSAgICAgICAgI2Vycm9yIEludmFsaWQgY29uZmlnVU5JUVVFX0lOVEVSUlVQVF9QUklPUklUSUVTIHNldHRpbmcuICBjb25maWdVTklRVUVfSU5URVJSVVBUX1BSSU9SSVRJRVMgbXVzdCBiZSBzZXQgdG8gdGhlIG51bWJlciBvZiB1bmlxdWUgcHJpb3JpdGllcyBpbXBsZW1lbnRlZCBieSB0aGUgdGFyZ2V0IGhhcmR3YXJlDQotICAgICNlbmRpZiAvKiBpZiBjb25maWdVTklRVUVfSU5URVJSVVBUX1BSSU9SSVRJRVMgPT0gMTYgKi8NCitudW1iZXIgb2YgYml0cyBpbXBsZW1lbnRlZCBieSB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIuICovDQorI2lmIGNvbmZpZ1VOSVFVRV9JTlRFUlJVUFRfUFJJT1JJVElFUyA9PSAxNg0KKwkjZGVmaW5lIHBvcnRQUklPUklUWV9TSElGVCA0DQorCSNkZWZpbmUgcG9ydE1BWF9CSU5BUllfUE9JTlRfVkFMVUUJMw0KKyNlbGlmIGNvbmZpZ1VOSVFVRV9JTlRFUlJVUFRfUFJJT1JJVElFUyA9PSAzMg0KKwkjZGVmaW5lIHBvcnRQUklPUklUWV9TSElGVCAzDQorCSNkZWZpbmUgcG9ydE1BWF9CSU5BUllfUE9JTlRfVkFMVUUJMg0KKyNlbGlmIGNvbmZpZ1VOSVFVRV9JTlRFUlJVUFRfUFJJT1JJVElFUyA9PSA2NA0KKwkjZGVmaW5lIHBvcnRQUklPUklUWV9TSElGVCAyDQorCSNkZWZpbmUgcG9ydE1BWF9CSU5BUllfUE9JTlRfVkFMVUUJMQ0KKyNlbGlmIGNvbmZpZ1VOSVFVRV9JTlRFUlJVUFRfUFJJT1JJVElFUyA9PSAxMjgNCisJI2RlZmluZSBwb3J0UFJJT1JJVFlfU0hJRlQgMQ0KKwkjZGVmaW5lIHBvcnRNQVhfQklOQVJZX1BPSU5UX1ZBTFVFCTANCisjZWxpZiBjb25maWdVTklRVUVfSU5URVJSVVBUX1BSSU9SSVRJRVMgPT0gMjU2DQorCSNkZWZpbmUgcG9ydFBSSU9SSVRZX1NISUZUIDANCisJI2RlZmluZSBwb3J0TUFYX0JJTkFSWV9QT0lOVF9WQUxVRQkwDQorI2Vsc2UNCisJI2Vycm9yIEludmFsaWQgY29uZmlnVU5JUVVFX0lOVEVSUlVQVF9QUklPUklUSUVTIHNldHRpbmcuICBjb25maWdVTklRVUVfSU5URVJSVVBUX1BSSU9SSVRJRVMgbXVzdCBiZSBzZXQgdG8gdGhlIG51bWJlciBvZiB1bmlxdWUgcHJpb3JpdGllcyBpbXBsZW1lbnRlZCBieSB0aGUgdGFyZ2V0IGhhcmR3YXJlDQorI2VuZGlmDQogDQogLyogSW50ZXJydXB0IGNvbnRyb2xsZXIgYWNjZXNzIGFkZHJlc3Nlcy4gKi8NCi0gICAgI2RlZmluZSBwb3J0SUNDUE1SX1BSSU9SSVRZX01BU0tfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICggMHgwNCApDQotICAgICNkZWZpbmUgcG9ydElDQ0lBUl9JTlRFUlJVUFRfQUNLTk9XTEVER0VfT0ZGU0VUICAgICAgICAgICAgICAoIDB4MEMgKQ0KLSAgICAjZGVmaW5lIHBvcnRJQ0NFT0lSX0VORF9PRl9JTlRFUlJVUFRfT0ZGU0VUICAgICAgICAgICAgICAgICAgKCAweDEwICkNCi0gICAgI2RlZmluZSBwb3J0SUNDQlBSX0JJTkFSWV9QT0lOVF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICggMHgwOCApDQotICAgICNkZWZpbmUgcG9ydElDQ1JQUl9SVU5OSU5HX1BSSU9SSVRZX09GRlNFVCAgICAgICAgICAgICAgICAgICAoIDB4MTQgKQ0KKyNkZWZpbmUgcG9ydElDQ1BNUl9QUklPUklUWV9NQVNLX09GRlNFVCAgCQkJCQkJKCAweDA0ICkNCisjZGVmaW5lIHBvcnRJQ0NJQVJfSU5URVJSVVBUX0FDS05PV0xFREdFX09GRlNFVCAJCQkJKCAweDBDICkNCisjZGVmaW5lIHBvcnRJQ0NFT0lSX0VORF9PRl9JTlRFUlJVUFRfT0ZGU0VUIAkJCQkJKCAweDEwICkNCisjZGVmaW5lIHBvcnRJQ0NCUFJfQklOQVJZX1BPSU5UX09GRlNFVAkJCQkJCQkoIDB4MDggKQ0KKyNkZWZpbmUgcG9ydElDQ1JQUl9SVU5OSU5HX1BSSU9SSVRZX09GRlNFVAkJCQkJCSggMHgxNCApDQogDQotICAgICNkZWZpbmUgcG9ydElOVEVSUlVQVF9DT05UUk9MTEVSX0NQVV9JTlRFUkZBQ0VfQUREUkVTUyAgICAgICAoIGNvbmZpZ0lOVEVSUlVQVF9DT05UUk9MTEVSX0JBU0VfQUREUkVTUyArIGNvbmZpZ0lOVEVSUlVQVF9DT05UUk9MTEVSX0NQVV9JTlRFUkZBQ0VfT0ZGU0VUICkNCi0gICAgI2RlZmluZSBwb3J0SUNDUE1SX1BSSU9SSVRZX01BU0tfUkVHSVNURVIgICAgICAgICAgICAgICAgICAgICggKiggKCB2b2xhdGlsZSB1aW50MzJfdCAqICkgKCBwb3J0SU5URVJSVVBUX0NPTlRST0xMRVJfQ1BVX0lOVEVSRkFDRV9BRERSRVNTICsgcG9ydElDQ1BNUl9QUklPUklUWV9NQVNLX09GRlNFVCApICkgKQ0KLSAgICAjZGVmaW5lIHBvcnRJQ0NJQVJfSU5URVJSVVBUX0FDS05PV0xFREdFX1JFR0lTVEVSX0FERFJFU1MgICAgKCBwb3J0SU5URVJSVVBUX0NPTlRST0xMRVJfQ1BVX0lOVEVSRkFDRV9BRERSRVNTICsgcG9ydElDQ0lBUl9JTlRFUlJVUFRfQUNLTk9XTEVER0VfT0ZGU0VUICkNCi0gICAgI2RlZmluZSBwb3J0SUNDRU9JUl9FTkRfT0ZfSU5URVJSVVBUX1JFR0lTVEVSX0FERFJFU1MgICAgICAgICggcG9ydElOVEVSUlVQVF9DT05UUk9MTEVSX0NQVV9JTlRFUkZBQ0VfQUREUkVTUyArIHBvcnRJQ0NFT0lSX0VORF9PRl9JTlRFUlJVUFRfT0ZGU0VUICkNCi0gICAgI2RlZmluZSBwb3J0SUNDUE1SX1BSSU9SSVRZX01BU0tfUkVHSVNURVJfQUREUkVTUyAgICAgICAgICAgICggcG9ydElOVEVSUlVQVF9DT05UUk9MTEVSX0NQVV9JTlRFUkZBQ0VfQUREUkVTUyArIHBvcnRJQ0NQTVJfUFJJT1JJVFlfTUFTS19PRkZTRVQgKQ0KLSAgICAjZGVmaW5lIHBvcnRJQ0NCUFJfQklOQVJZX1BPSU5UX1JFR0lTVEVSICAgICAgICAgICAgICAgICAgICAgKCAqKCAoIGNvbnN0IHZvbGF0aWxlIHVpbnQzMl90ICogKSAoIHBvcnRJTlRFUlJVUFRfQ09OVFJPTExFUl9DUFVfSU5URVJGQUNFX0FERFJFU1MgKyBwb3J0SUNDQlBSX0JJTkFSWV9QT0lOVF9PRkZTRVQgKSApICkNCi0gICAgI2RlZmluZSBwb3J0SUNDUlBSX1JVTk5JTkdfUFJJT1JJVFlfUkVHSVNURVIgICAgICAgICAgICAgICAgICggKiggKCBjb25zdCB2b2xhdGlsZSB1aW50MzJfdCAqICkgKCBwb3J0SU5URVJSVVBUX0NPTlRST0xMRVJfQ1BVX0lOVEVSRkFDRV9BRERSRVNTICsgcG9ydElDQ1JQUl9SVU5OSU5HX1BSSU9SSVRZX09GRlNFVCApICkgKQ0KKyNkZWZpbmUgcG9ydElOVEVSUlVQVF9DT05UUk9MTEVSX0NQVV9JTlRFUkZBQ0VfQUREUkVTUyAJCSggY29uZmlnSU5URVJSVVBUX0NPTlRST0xMRVJfQkFTRV9BRERSRVNTICsgY29uZmlnSU5URVJSVVBUX0NPTlRST0xMRVJfQ1BVX0lOVEVSRkFDRV9PRkZTRVQgKQ0KKyNkZWZpbmUgcG9ydElDQ1BNUl9QUklPUklUWV9NQVNLX1JFR0lTVEVSIAkJCQkJKCAqKCAoIHZvbGF0aWxlIHVpbnQzMl90ICogKSAoIHBvcnRJTlRFUlJVUFRfQ09OVFJPTExFUl9DUFVfSU5URVJGQUNFX0FERFJFU1MgKyBwb3J0SUNDUE1SX1BSSU9SSVRZX01BU0tfT0ZGU0VUICkgKSApDQorI2RlZmluZSBwb3J0SUNDSUFSX0lOVEVSUlVQVF9BQ0tOT1dMRURHRV9SRUdJU1RFUl9BRERSRVNTIAkoIHBvcnRJTlRFUlJVUFRfQ09OVFJPTExFUl9DUFVfSU5URVJGQUNFX0FERFJFU1MgKyBwb3J0SUNDSUFSX0lOVEVSUlVQVF9BQ0tOT1dMRURHRV9PRkZTRVQgKQ0KKyNkZWZpbmUgcG9ydElDQ0VPSVJfRU5EX09GX0lOVEVSUlVQVF9SRUdJU1RFUl9BRERSRVNTIAkJKCBwb3J0SU5URVJSVVBUX0NPTlRST0xMRVJfQ1BVX0lOVEVSRkFDRV9BRERSRVNTICsgcG9ydElDQ0VPSVJfRU5EX09GX0lOVEVSUlVQVF9PRkZTRVQgKQ0KKyNkZWZpbmUgcG9ydElDQ1BNUl9QUklPUklUWV9NQVNLX1JFR0lTVEVSX0FERFJFU1MgCQkJKCBwb3J0SU5URVJSVVBUX0NPTlRST0xMRVJfQ1BVX0lOVEVSRkFDRV9BRERSRVNTICsgcG9ydElDQ1BNUl9QUklPUklUWV9NQVNLX09GRlNFVCApDQorI2RlZmluZSBwb3J0SUNDQlBSX0JJTkFSWV9QT0lOVF9SRUdJU1RFUiAJCQkJCSggKiggKCBjb25zdCB2b2xhdGlsZSB1aW50MzJfdCAqICkgKCBwb3J0SU5URVJSVVBUX0NPTlRST0xMRVJfQ1BVX0lOVEVSRkFDRV9BRERSRVNTICsgcG9ydElDQ0JQUl9CSU5BUllfUE9JTlRfT0ZGU0VUICkgKSApDQorI2RlZmluZSBwb3J0SUNDUlBSX1JVTk5JTkdfUFJJT1JJVFlfUkVHSVNURVIgCQkJCSggKiggKCBjb25zdCB2b2xhdGlsZSB1aW50MzJfdCAqICkgKCBwb3J0SU5URVJSVVBUX0NPTlRST0xMRVJfQ1BVX0lOVEVSRkFDRV9BRERSRVNTICsgcG9ydElDQ1JQUl9SVU5OSU5HX1BSSU9SSVRZX09GRlNFVCApICkgKQ0KIA0KICNlbmRpZiAvKiBQT1JUTUFDUk9fSCAqLw0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0lBUi9BUk1fQ00yMy9ub25fc2VjdXJlL3BvcnQuYyBiL3BvcnRhYmxlL0lBUi9BUk1fQ00yMy9ub25fc2VjdXJlL3BvcnQuYwppbmRleCAzZjM5YmMzLi5lMGEwYzdlIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9JQVIvQVJNX0NNMjMvbm9uX3NlY3VyZS9wb3J0LmMKKysrIGIvcG9ydGFibGUvSUFSL0FSTV9DTTIzL25vbl9zZWN1cmUvcG9ydC5jCkBAIC02MTIsNyArNjEyLDcgQEAKICAgICAgICAgICAgIGV4dGVybiB1aW50MzJfdCAqIF9fdW5wcml2aWxlZ2VkX2ZsYXNoX2VuZF9fOw0KICAgICAgICAgICAgIGV4dGVybiB1aW50MzJfdCAqIF9fcHJpdmlsZWdlZF9zcmFtX3N0YXJ0X187DQogICAgICAgICAgICAgZXh0ZXJuIHVpbnQzMl90ICogX19wcml2aWxlZ2VkX3NyYW1fZW5kX187DQotICAgICAgICAjZWxzZSAgLyogaWYgZGVmaW5lZCggX19BUk1DQ19WRVJTSU9OICkgKi8NCisgICAgICAgICNlbHNlIC8qIGlmIGRlZmluZWQoIF9fQVJNQ0NfVkVSU0lPTiApICovDQogICAgICAgICAgICAgLyogRGVjbGFyYXRpb24gd2hlbiB0aGVzZSB2YXJpYWJsZSBhcmUgZXhwb3J0ZWQgZnJvbSBsaW5rZXIgc2NyaXB0cy4gKi8NCiAgICAgICAgICAgICBleHRlcm4gdWludDMyX3QgX19wcml2aWxlZ2VkX2Z1bmN0aW9uc19zdGFydF9fW107DQogICAgICAgICAgICAgZXh0ZXJuIHVpbnQzMl90IF9fcHJpdmlsZWdlZF9mdW5jdGlvbnNfZW5kX19bXTsNCkBAIC04MDIsMjIgKzgwMiwyMiBAQAogICAgICAgICAgICAgICAgIHVsUjAgPSBwdWxDYWxsZXJTdGFja0FkZHJlc3NbIDAgXTsNCiANCiAgICAgICAgICAgICAgICAgI2lmICggY29uZmlnRU5BQkxFX01QVSA9PSAxICkNCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgLyogUmVhZCB0aGUgQ09OVFJPTCByZWdpc3RlciB2YWx1ZS4gKi8NCi0gICAgICAgICAgICAgICAgICAgIF9fYXNtIHZvbGF0aWxlICggIm1ycyAlMCwgY29udHJvbCIgIDogIj1yIiAoIHVsQ29udHJvbCApICk7DQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVhZCB0aGUgQ09OVFJPTCByZWdpc3RlciB2YWx1ZS4gKi8NCisgICAgICAgICAgICAgICAgICAgICAgICBfX2FzbSB2b2xhdGlsZSAoICJtcnMgJTAsIGNvbnRyb2wiICA6ICI9ciIgKCB1bENvbnRyb2wgKSApOw0KIA0KLSAgICAgICAgICAgICAgICAgICAgLyogVGhlIHRhc2sgdGhhdCByYWlzZWQgdGhlIFNWQyBpcyBwcml2aWxlZ2VkIGlmIEJpdFswXQ0KLSAgICAgICAgICAgICAgICAgICAgICogaW4gdGhlIENPTlRST0wgcmVnaXN0ZXIgaXMgMC4gKi8NCi0gICAgICAgICAgICAgICAgICAgIHVsSXNUYXNrUHJpdmlsZWdlZCA9ICggKCB1bENvbnRyb2wgJiBwb3J0Q09OVFJPTF9QUklWSUxFR0VEX01BU0sgKSA9PSAwICk7DQorICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhlIHRhc2sgdGhhdCByYWlzZWQgdGhlIFNWQyBpcyBwcml2aWxlZ2VkIGlmIEJpdFswXQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAqIGluIHRoZSBDT05UUk9MIHJlZ2lzdGVyIGlzIDAuICovDQorICAgICAgICAgICAgICAgICAgICAgICAgdWxJc1Rhc2tQcml2aWxlZ2VkID0gKCAoIHVsQ29udHJvbCAmIHBvcnRDT05UUk9MX1BSSVZJTEVHRURfTUFTSyApID09IDAgKTsNCiANCi0gICAgICAgICAgICAgICAgICAgIC8qIEFsbG9jYXRlIGFuZCBsb2FkIGEgY29udGV4dCBmb3IgdGhlIHNlY3VyZSB0YXNrLiAqLw0KLSAgICAgICAgICAgICAgICAgICAgeFNlY3VyZUNvbnRleHQgPSBTZWN1cmVDb250ZXh0X0FsbG9jYXRlQ29udGV4dCggdWxSMCwgdWxJc1Rhc2tQcml2aWxlZ2VkICk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgI2Vsc2UgIC8qIGlmICggY29uZmlnRU5BQkxFX01QVSA9PSAxICkgKi8NCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgLyogQWxsb2NhdGUgYW5kIGxvYWQgYSBjb250ZXh0IGZvciB0aGUgc2VjdXJlIHRhc2suICovDQotICAgICAgICAgICAgICAgICAgICB4U2VjdXJlQ29udGV4dCA9IFNlY3VyZUNvbnRleHRfQWxsb2NhdGVDb250ZXh0KCB1bFIwICk7DQotICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBBbGxvY2F0ZSBhbmQgbG9hZCBhIGNvbnRleHQgZm9yIHRoZSBzZWN1cmUgdGFzay4gKi8NCisgICAgICAgICAgICAgICAgICAgICAgICB4U2VjdXJlQ29udGV4dCA9IFNlY3VyZUNvbnRleHRfQWxsb2NhdGVDb250ZXh0KCB1bFIwLCB1bElzVGFza1ByaXZpbGVnZWQgKTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgI2Vsc2UgLyogaWYgKCBjb25maWdFTkFCTEVfTVBVID09IDEgKSAqLw0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFsbG9jYXRlIGFuZCBsb2FkIGEgY29udGV4dCBmb3IgdGhlIHNlY3VyZSB0YXNrLiAqLw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHhTZWN1cmVDb250ZXh0ID0gU2VjdXJlQ29udGV4dF9BbGxvY2F0ZUNvbnRleHQoIHVsUjAgKTsNCisgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgI2VuZGlmIC8qIGNvbmZpZ0VOQUJMRV9NUFUgKi8NCiANCiAgICAgICAgICAgICAgICAgY29uZmlnQVNTRVJUKCB4U2VjdXJlQ29udGV4dCAhPSBOVUxMICk7DQpAQCAtODM1LDIxICs4MzUsMjEgQEAKIA0KICAgICAgICAgY2FzZSBwb3J0U1ZDX1NUQVJUX1NDSEVEVUxFUjoNCiAgICAgICAgICAgICAjaWYgKCBjb25maWdFTkFCTEVfVFJVU1RaT05FID09IDEgKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgLyogRGUtcHJpb3JpdGl6ZSB0aGUgbm9uLXNlY3VyZSBleGNlcHRpb25zIHNvIHRoYXQgdGhlDQotICAgICAgICAgICAgICAgICAqIG5vbi1zZWN1cmUgcGVuZFNWIHJ1bnMgYXQgdGhlIGxvd2VzdCBwcmlvcml0eS4gKi8NCi0gICAgICAgICAgICAgICAgU2VjdXJlSW5pdF9EZVByaW9yaXRpemVOU0V4Y2VwdGlvbnMoKTsNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgLyogRGUtcHJpb3JpdGl6ZSB0aGUgbm9uLXNlY3VyZSBleGNlcHRpb25zIHNvIHRoYXQgdGhlDQorICAgICAgICAgICAgICAgICAgICAgKiBub24tc2VjdXJlIHBlbmRTViBydW5zIGF0IHRoZSBsb3dlc3QgcHJpb3JpdHkuICovDQorICAgICAgICAgICAgICAgICAgICBTZWN1cmVJbml0X0RlUHJpb3JpdGl6ZU5TRXhjZXB0aW9ucygpOw0KIA0KLSAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIHRoZSBzZWN1cmUgY29udGV4dCBtYW5hZ2VtZW50IHN5c3RlbS4gKi8NCi0gICAgICAgICAgICAgICAgU2VjdXJlQ29udGV4dF9Jbml0KCk7DQotICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSB0aGUgc2VjdXJlIGNvbnRleHQgbWFuYWdlbWVudCBzeXN0ZW0uICovDQorICAgICAgICAgICAgICAgICAgICBTZWN1cmVDb250ZXh0X0luaXQoKTsNCisgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICNlbmRpZiAvKiBjb25maWdFTkFCTEVfVFJVU1RaT05FICovDQogDQogICAgICAgICAgICAgI2lmICggY29uZmlnRU5BQkxFX0ZQVSA9PSAxICkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIC8qIFNldHVwIHRoZSBGbG9hdGluZyBQb2ludCBVbml0IChGUFUpLiAqLw0KLSAgICAgICAgICAgICAgICBwcnZTZXR1cEZQVSgpOw0KLSAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgLyogU2V0dXAgdGhlIEZsb2F0aW5nIFBvaW50IFVuaXQgKEZQVSkuICovDQorICAgICAgICAgICAgICAgICAgICBwcnZTZXR1cEZQVSgpOw0KKyAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgI2VuZGlmIC8qIGNvbmZpZ0VOQUJMRV9GUFUgKi8NCiANCiAgICAgICAgICAgICAvKiBTZXR1cCB0aGUgY29udGV4dCBvZiB0aGUgZmlyc3QgdGFzayBzbyB0aGF0IHRoZSBmaXJzdCB0YXNrIHN0YXJ0cw0KQEAgLTg3NywxOCArODc3LDIwIEBACiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQorLyogKklOREVOVC1PRkYqICovDQogI2lmICggY29uZmlnRU5BQkxFX01QVSA9PSAxICkNCiAgICAgU3RhY2tUeXBlX3QgKiBweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICogcHhUb3BPZlN0YWNrLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tUeXBlX3QgKiBweEVuZE9mU3RhY2ssDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYXNrRnVuY3Rpb25fdCBweENvZGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICogcHZQYXJhbWV0ZXJzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFzZVR5cGVfdCB4UnVuUHJpdmlsZWdlZCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBSSVZJTEVHRURfRlVOQ1RJT04gKi8NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhc2VUeXBlX3QgeFJ1blByaXZpbGVnZWQgKSAvKiBQUklWSUxFR0VEX0ZVTkNUSU9OICovDQogI2Vsc2UNCiAgICAgU3RhY2tUeXBlX3QgKiBweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICogcHhUb3BPZlN0YWNrLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tUeXBlX3QgKiBweEVuZE9mU3RhY2ssDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYXNrRnVuY3Rpb25fdCBweENvZGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICogcHZQYXJhbWV0ZXJzICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUFJJVklMRUdFRF9GVU5DVElPTiAqLw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqIHB2UGFyYW1ldGVycyApIC8qIFBSSVZJTEVHRURfRlVOQ1RJT04gKi8NCiAjZW5kaWYgLyogY29uZmlnRU5BQkxFX01QVSAqLw0KKy8qICpJTkRFTlQtT04qICovDQogew0KICAgICAvKiBTaW11bGF0ZSB0aGUgc3RhY2sgZnJhbWUgYXMgaXQgd291bGQgYmUgY3JlYXRlZCBieSBhIGNvbnRleHQgc3dpdGNoDQogICAgICAqIGludGVycnVwdC4gKi8NCkBAIC0xMDUxLDcgKzEwNTMsOSBAQAogICAgIHsNCiAgICAgICAgIHVpbnQzMl90IHVsUmVnaW9uU3RhcnRBZGRyZXNzLCB1bFJlZ2lvbkVuZEFkZHJlc3MsIHVsUmVnaW9uTnVtYmVyOw0KICAgICAgICAgaW50MzJfdCBsSW5kZXggPSAwOw0KKw0KICAgICAgICAgI2lmIGRlZmluZWQoIF9fQVJNQ0NfVkVSU0lPTiApDQorDQogICAgICAgICAgICAgLyogRGVjbGFyYXRpb24gd2hlbiB0aGVzZSB2YXJpYWJsZSBhcmUgZGVmaW5lZCBpbiBjb2RlIGluc3RlYWQgb2YgYmVpbmcNCiAgICAgICAgICAgICAgKiBleHBvcnRlZCBmcm9tIGxpbmtlciBzY3JpcHRzLiAqLw0KICAgICAgICAgICAgIGV4dGVybiB1aW50MzJfdCAqIF9fcHJpdmlsZWdlZF9zcmFtX3N0YXJ0X187DQpAQCAtMTA3OSw4ICsxMDgzLDggQEAKICAgICAgICAgICAgICAqIHVzaW5nIGEgc2VwYXJhdGUgTVBVIHJlZ2lvbi4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBwcml2aWxlZ2VkDQogICAgICAgICAgICAgICogU1JBTSBpcyBhbHJlYWR5IHByb3RlY3RlZCB1c2luZyBhbiBNUFUgcmVnaW9uIGFuZCBBUk12OC1NIGRvZXMNCiAgICAgICAgICAgICAgKiBub3QgYWxsb3cgb3ZlcmxhcHBpbmcgTVBVIHJlZ2lvbnMuICovDQotICAgICAgICAgICAgaWYoIHVsUmVnaW9uU3RhcnRBZGRyZXNzID49ICggdWludDMyX3QgKSBfX3ByaXZpbGVnZWRfc3JhbV9zdGFydF9fICYmDQotICAgICAgICAgICAgICAgIHVsUmVnaW9uRW5kQWRkcmVzcyA8PSAoIHVpbnQzMl90ICkgX19wcml2aWxlZ2VkX3NyYW1fZW5kX18gKQ0KKyAgICAgICAgICAgIGlmKCAoIHVsUmVnaW9uU3RhcnRBZGRyZXNzID49ICggdWludDMyX3QgKSBfX3ByaXZpbGVnZWRfc3JhbV9zdGFydF9fICkgJiYNCisgICAgICAgICAgICAgICAgKCB1bFJlZ2lvbkVuZEFkZHJlc3MgPD0gKCB1aW50MzJfdCApIF9fcHJpdmlsZWdlZF9zcmFtX2VuZF9fICkgKQ0KICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgeE1QVVNldHRpbmdzLT54UmVnaW9uc1NldHRpbmdzWyAwIF0udWxSQkFSID0gMDsNCiAgICAgICAgICAgICAgICAgeE1QVVNldHRpbmdzLT54UmVnaW9uc1NldHRpbmdzWyAwIF0udWxSTEFSID0gMDsNCkBAIC0xMDg5LDcgKzEwOTMsNyBAQAogICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAvKiBEZWZpbmUgdGhlIHJlZ2lvbiB0aGF0IGFsbG93cyBhY2Nlc3MgdG8gdGhlIHN0YWNrLiAqLw0KICAgICAgICAgICAgICAgICB1bFJlZ2lvblN0YXJ0QWRkcmVzcyAmPSBwb3J0TVBVX1JCQVJfQUREUkVTU19NQVNLOw0KLSAgICAgICAgICAgICAgICB1bFJlZ2lvbkVuZEFkZHJlc3MgICY9IHBvcnRNUFVfUkxBUl9BRERSRVNTX01BU0s7DQorICAgICAgICAgICAgICAgIHVsUmVnaW9uRW5kQWRkcmVzcyAmPSBwb3J0TVBVX1JMQVJfQUREUkVTU19NQVNLOw0KIA0KICAgICAgICAgICAgICAgICB4TVBVU2V0dGluZ3MtPnhSZWdpb25zU2V0dGluZ3NbIDAgXS51bFJCQVIgPSAoIHVsUmVnaW9uU3RhcnRBZGRyZXNzICkgfA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIHBvcnRNUFVfUkVHSU9OX05PTl9TSEFSRUFCTEUgKSB8DQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvSUFSL0FSTV9DTTIzX05UWi9ub25fc2VjdXJlL3BvcnQuYyBiL3BvcnRhYmxlL0lBUi9BUk1fQ00yM19OVFovbm9uX3NlY3VyZS9wb3J0LmMKaW5kZXggM2YzOWJjMy4uZTBhMGM3ZSAxMDA2NDQKLS0tIGEvcG9ydGFibGUvSUFSL0FSTV9DTTIzX05UWi9ub25fc2VjdXJlL3BvcnQuYworKysgYi9wb3J0YWJsZS9JQVIvQVJNX0NNMjNfTlRaL25vbl9zZWN1cmUvcG9ydC5jCkBAIC02MTIsNyArNjEyLDcgQEAKICAgICAgICAgICAgIGV4dGVybiB1aW50MzJfdCAqIF9fdW5wcml2aWxlZ2VkX2ZsYXNoX2VuZF9fOw0KICAgICAgICAgICAgIGV4dGVybiB1aW50MzJfdCAqIF9fcHJpdmlsZWdlZF9zcmFtX3N0YXJ0X187DQogICAgICAgICAgICAgZXh0ZXJuIHVpbnQzMl90ICogX19wcml2aWxlZ2VkX3NyYW1fZW5kX187DQotICAgICAgICAjZWxzZSAgLyogaWYgZGVmaW5lZCggX19BUk1DQ19WRVJTSU9OICkgKi8NCisgICAgICAgICNlbHNlIC8qIGlmIGRlZmluZWQoIF9fQVJNQ0NfVkVSU0lPTiApICovDQogICAgICAgICAgICAgLyogRGVjbGFyYXRpb24gd2hlbiB0aGVzZSB2YXJpYWJsZSBhcmUgZXhwb3J0ZWQgZnJvbSBsaW5rZXIgc2NyaXB0cy4gKi8NCiAgICAgICAgICAgICBleHRlcm4gdWludDMyX3QgX19wcml2aWxlZ2VkX2Z1bmN0aW9uc19zdGFydF9fW107DQogICAgICAgICAgICAgZXh0ZXJuIHVpbnQzMl90IF9fcHJpdmlsZWdlZF9mdW5jdGlvbnNfZW5kX19bXTsNCkBAIC04MDIsMjIgKzgwMiwyMiBAQAogICAgICAgICAgICAgICAgIHVsUjAgPSBwdWxDYWxsZXJTdGFja0FkZHJlc3NbIDAgXTsNCiANCiAgICAgICAgICAgICAgICAgI2lmICggY29uZmlnRU5BQkxFX01QVSA9PSAxICkNCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgLyogUmVhZCB0aGUgQ09OVFJPTCByZWdpc3RlciB2YWx1ZS4gKi8NCi0gICAgICAgICAgICAgICAgICAgIF9fYXNtIHZvbGF0aWxlICggIm1ycyAlMCwgY29udHJvbCIgIDogIj1yIiAoIHVsQ29udHJvbCApICk7DQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVhZCB0aGUgQ09OVFJPTCByZWdpc3RlciB2YWx1ZS4gKi8NCisgICAgICAgICAgICAgICAgICAgICAgICBfX2FzbSB2b2xhdGlsZSAoICJtcnMgJTAsIGNvbnRyb2wiICA6ICI9ciIgKCB1bENvbnRyb2wgKSApOw0KIA0KLSAgICAgICAgICAgICAgICAgICAgLyogVGhlIHRhc2sgdGhhdCByYWlzZWQgdGhlIFNWQyBpcyBwcml2aWxlZ2VkIGlmIEJpdFswXQ0KLSAgICAgICAgICAgICAgICAgICAgICogaW4gdGhlIENPTlRST0wgcmVnaXN0ZXIgaXMgMC4gKi8NCi0gICAgICAgICAgICAgICAgICAgIHVsSXNUYXNrUHJpdmlsZWdlZCA9ICggKCB1bENvbnRyb2wgJiBwb3J0Q09OVFJPTF9QUklWSUxFR0VEX01BU0sgKSA9PSAwICk7DQorICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhlIHRhc2sgdGhhdCByYWlzZWQgdGhlIFNWQyBpcyBwcml2aWxlZ2VkIGlmIEJpdFswXQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAqIGluIHRoZSBDT05UUk9MIHJlZ2lzdGVyIGlzIDAuICovDQorICAgICAgICAgICAgICAgICAgICAgICAgdWxJc1Rhc2tQcml2aWxlZ2VkID0gKCAoIHVsQ29udHJvbCAmIHBvcnRDT05UUk9MX1BSSVZJTEVHRURfTUFTSyApID09IDAgKTsNCiANCi0gICAgICAgICAgICAgICAgICAgIC8qIEFsbG9jYXRlIGFuZCBsb2FkIGEgY29udGV4dCBmb3IgdGhlIHNlY3VyZSB0YXNrLiAqLw0KLSAgICAgICAgICAgICAgICAgICAgeFNlY3VyZUNvbnRleHQgPSBTZWN1cmVDb250ZXh0X0FsbG9jYXRlQ29udGV4dCggdWxSMCwgdWxJc1Rhc2tQcml2aWxlZ2VkICk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgI2Vsc2UgIC8qIGlmICggY29uZmlnRU5BQkxFX01QVSA9PSAxICkgKi8NCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgLyogQWxsb2NhdGUgYW5kIGxvYWQgYSBjb250ZXh0IGZvciB0aGUgc2VjdXJlIHRhc2suICovDQotICAgICAgICAgICAgICAgICAgICB4U2VjdXJlQ29udGV4dCA9IFNlY3VyZUNvbnRleHRfQWxsb2NhdGVDb250ZXh0KCB1bFIwICk7DQotICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBBbGxvY2F0ZSBhbmQgbG9hZCBhIGNvbnRleHQgZm9yIHRoZSBzZWN1cmUgdGFzay4gKi8NCisgICAgICAgICAgICAgICAgICAgICAgICB4U2VjdXJlQ29udGV4dCA9IFNlY3VyZUNvbnRleHRfQWxsb2NhdGVDb250ZXh0KCB1bFIwLCB1bElzVGFza1ByaXZpbGVnZWQgKTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgI2Vsc2UgLyogaWYgKCBjb25maWdFTkFCTEVfTVBVID09IDEgKSAqLw0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFsbG9jYXRlIGFuZCBsb2FkIGEgY29udGV4dCBmb3IgdGhlIHNlY3VyZSB0YXNrLiAqLw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHhTZWN1cmVDb250ZXh0ID0gU2VjdXJlQ29udGV4dF9BbGxvY2F0ZUNvbnRleHQoIHVsUjAgKTsNCisgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgI2VuZGlmIC8qIGNvbmZpZ0VOQUJMRV9NUFUgKi8NCiANCiAgICAgICAgICAgICAgICAgY29uZmlnQVNTRVJUKCB4U2VjdXJlQ29udGV4dCAhPSBOVUxMICk7DQpAQCAtODM1LDIxICs4MzUsMjEgQEAKIA0KICAgICAgICAgY2FzZSBwb3J0U1ZDX1NUQVJUX1NDSEVEVUxFUjoNCiAgICAgICAgICAgICAjaWYgKCBjb25maWdFTkFCTEVfVFJVU1RaT05FID09IDEgKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgLyogRGUtcHJpb3JpdGl6ZSB0aGUgbm9uLXNlY3VyZSBleGNlcHRpb25zIHNvIHRoYXQgdGhlDQotICAgICAgICAgICAgICAgICAqIG5vbi1zZWN1cmUgcGVuZFNWIHJ1bnMgYXQgdGhlIGxvd2VzdCBwcmlvcml0eS4gKi8NCi0gICAgICAgICAgICAgICAgU2VjdXJlSW5pdF9EZVByaW9yaXRpemVOU0V4Y2VwdGlvbnMoKTsNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgLyogRGUtcHJpb3JpdGl6ZSB0aGUgbm9uLXNlY3VyZSBleGNlcHRpb25zIHNvIHRoYXQgdGhlDQorICAgICAgICAgICAgICAgICAgICAgKiBub24tc2VjdXJlIHBlbmRTViBydW5zIGF0IHRoZSBsb3dlc3QgcHJpb3JpdHkuICovDQorICAgICAgICAgICAgICAgICAgICBTZWN1cmVJbml0X0RlUHJpb3JpdGl6ZU5TRXhjZXB0aW9ucygpOw0KIA0KLSAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIHRoZSBzZWN1cmUgY29udGV4dCBtYW5hZ2VtZW50IHN5c3RlbS4gKi8NCi0gICAgICAgICAgICAgICAgU2VjdXJlQ29udGV4dF9Jbml0KCk7DQotICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSB0aGUgc2VjdXJlIGNvbnRleHQgbWFuYWdlbWVudCBzeXN0ZW0uICovDQorICAgICAgICAgICAgICAgICAgICBTZWN1cmVDb250ZXh0X0luaXQoKTsNCisgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICNlbmRpZiAvKiBjb25maWdFTkFCTEVfVFJVU1RaT05FICovDQogDQogICAgICAgICAgICAgI2lmICggY29uZmlnRU5BQkxFX0ZQVSA9PSAxICkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIC8qIFNldHVwIHRoZSBGbG9hdGluZyBQb2ludCBVbml0IChGUFUpLiAqLw0KLSAgICAgICAgICAgICAgICBwcnZTZXR1cEZQVSgpOw0KLSAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgLyogU2V0dXAgdGhlIEZsb2F0aW5nIFBvaW50IFVuaXQgKEZQVSkuICovDQorICAgICAgICAgICAgICAgICAgICBwcnZTZXR1cEZQVSgpOw0KKyAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgI2VuZGlmIC8qIGNvbmZpZ0VOQUJMRV9GUFUgKi8NCiANCiAgICAgICAgICAgICAvKiBTZXR1cCB0aGUgY29udGV4dCBvZiB0aGUgZmlyc3QgdGFzayBzbyB0aGF0IHRoZSBmaXJzdCB0YXNrIHN0YXJ0cw0KQEAgLTg3NywxOCArODc3LDIwIEBACiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQorLyogKklOREVOVC1PRkYqICovDQogI2lmICggY29uZmlnRU5BQkxFX01QVSA9PSAxICkNCiAgICAgU3RhY2tUeXBlX3QgKiBweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICogcHhUb3BPZlN0YWNrLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tUeXBlX3QgKiBweEVuZE9mU3RhY2ssDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYXNrRnVuY3Rpb25fdCBweENvZGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICogcHZQYXJhbWV0ZXJzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFzZVR5cGVfdCB4UnVuUHJpdmlsZWdlZCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBSSVZJTEVHRURfRlVOQ1RJT04gKi8NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhc2VUeXBlX3QgeFJ1blByaXZpbGVnZWQgKSAvKiBQUklWSUxFR0VEX0ZVTkNUSU9OICovDQogI2Vsc2UNCiAgICAgU3RhY2tUeXBlX3QgKiBweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICogcHhUb3BPZlN0YWNrLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tUeXBlX3QgKiBweEVuZE9mU3RhY2ssDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYXNrRnVuY3Rpb25fdCBweENvZGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICogcHZQYXJhbWV0ZXJzICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUFJJVklMRUdFRF9GVU5DVElPTiAqLw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqIHB2UGFyYW1ldGVycyApIC8qIFBSSVZJTEVHRURfRlVOQ1RJT04gKi8NCiAjZW5kaWYgLyogY29uZmlnRU5BQkxFX01QVSAqLw0KKy8qICpJTkRFTlQtT04qICovDQogew0KICAgICAvKiBTaW11bGF0ZSB0aGUgc3RhY2sgZnJhbWUgYXMgaXQgd291bGQgYmUgY3JlYXRlZCBieSBhIGNvbnRleHQgc3dpdGNoDQogICAgICAqIGludGVycnVwdC4gKi8NCkBAIC0xMDUxLDcgKzEwNTMsOSBAQAogICAgIHsNCiAgICAgICAgIHVpbnQzMl90IHVsUmVnaW9uU3RhcnRBZGRyZXNzLCB1bFJlZ2lvbkVuZEFkZHJlc3MsIHVsUmVnaW9uTnVtYmVyOw0KICAgICAgICAgaW50MzJfdCBsSW5kZXggPSAwOw0KKw0KICAgICAgICAgI2lmIGRlZmluZWQoIF9fQVJNQ0NfVkVSU0lPTiApDQorDQogICAgICAgICAgICAgLyogRGVjbGFyYXRpb24gd2hlbiB0aGVzZSB2YXJpYWJsZSBhcmUgZGVmaW5lZCBpbiBjb2RlIGluc3RlYWQgb2YgYmVpbmcNCiAgICAgICAgICAgICAgKiBleHBvcnRlZCBmcm9tIGxpbmtlciBzY3JpcHRzLiAqLw0KICAgICAgICAgICAgIGV4dGVybiB1aW50MzJfdCAqIF9fcHJpdmlsZWdlZF9zcmFtX3N0YXJ0X187DQpAQCAtMTA3OSw4ICsxMDgzLDggQEAKICAgICAgICAgICAgICAqIHVzaW5nIGEgc2VwYXJhdGUgTVBVIHJlZ2lvbi4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBwcml2aWxlZ2VkDQogICAgICAgICAgICAgICogU1JBTSBpcyBhbHJlYWR5IHByb3RlY3RlZCB1c2luZyBhbiBNUFUgcmVnaW9uIGFuZCBBUk12OC1NIGRvZXMNCiAgICAgICAgICAgICAgKiBub3QgYWxsb3cgb3ZlcmxhcHBpbmcgTVBVIHJlZ2lvbnMuICovDQotICAgICAgICAgICAgaWYoIHVsUmVnaW9uU3RhcnRBZGRyZXNzID49ICggdWludDMyX3QgKSBfX3ByaXZpbGVnZWRfc3JhbV9zdGFydF9fICYmDQotICAgICAgICAgICAgICAgIHVsUmVnaW9uRW5kQWRkcmVzcyA8PSAoIHVpbnQzMl90ICkgX19wcml2aWxlZ2VkX3NyYW1fZW5kX18gKQ0KKyAgICAgICAgICAgIGlmKCAoIHVsUmVnaW9uU3RhcnRBZGRyZXNzID49ICggdWludDMyX3QgKSBfX3ByaXZpbGVnZWRfc3JhbV9zdGFydF9fICkgJiYNCisgICAgICAgICAgICAgICAgKCB1bFJlZ2lvbkVuZEFkZHJlc3MgPD0gKCB1aW50MzJfdCApIF9fcHJpdmlsZWdlZF9zcmFtX2VuZF9fICkgKQ0KICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgeE1QVVNldHRpbmdzLT54UmVnaW9uc1NldHRpbmdzWyAwIF0udWxSQkFSID0gMDsNCiAgICAgICAgICAgICAgICAgeE1QVVNldHRpbmdzLT54UmVnaW9uc1NldHRpbmdzWyAwIF0udWxSTEFSID0gMDsNCkBAIC0xMDg5LDcgKzEwOTMsNyBAQAogICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAvKiBEZWZpbmUgdGhlIHJlZ2lvbiB0aGF0IGFsbG93cyBhY2Nlc3MgdG8gdGhlIHN0YWNrLiAqLw0KICAgICAgICAgICAgICAgICB1bFJlZ2lvblN0YXJ0QWRkcmVzcyAmPSBwb3J0TVBVX1JCQVJfQUREUkVTU19NQVNLOw0KLSAgICAgICAgICAgICAgICB1bFJlZ2lvbkVuZEFkZHJlc3MgICY9IHBvcnRNUFVfUkxBUl9BRERSRVNTX01BU0s7DQorICAgICAgICAgICAgICAgIHVsUmVnaW9uRW5kQWRkcmVzcyAmPSBwb3J0TVBVX1JMQVJfQUREUkVTU19NQVNLOw0KIA0KICAgICAgICAgICAgICAgICB4TVBVU2V0dGluZ3MtPnhSZWdpb25zU2V0dGluZ3NbIDAgXS51bFJCQVIgPSAoIHVsUmVnaW9uU3RhcnRBZGRyZXNzICkgfA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIHBvcnRNUFVfUkVHSU9OX05PTl9TSEFSRUFCTEUgKSB8DQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvSUFSL0FSTV9DTTMzL25vbl9zZWN1cmUvcG9ydC5jIGIvcG9ydGFibGUvSUFSL0FSTV9DTTMzL25vbl9zZWN1cmUvcG9ydC5jCmluZGV4IDNmMzliYzMuLmUwYTBjN2UgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0lBUi9BUk1fQ00zMy9ub25fc2VjdXJlL3BvcnQuYworKysgYi9wb3J0YWJsZS9JQVIvQVJNX0NNMzMvbm9uX3NlY3VyZS9wb3J0LmMKQEAgLTYxMiw3ICs2MTIsNyBAQAogICAgICAgICAgICAgZXh0ZXJuIHVpbnQzMl90ICogX191bnByaXZpbGVnZWRfZmxhc2hfZW5kX187DQogICAgICAgICAgICAgZXh0ZXJuIHVpbnQzMl90ICogX19wcml2aWxlZ2VkX3NyYW1fc3RhcnRfXzsNCiAgICAgICAgICAgICBleHRlcm4gdWludDMyX3QgKiBfX3ByaXZpbGVnZWRfc3JhbV9lbmRfXzsNCi0gICAgICAgICNlbHNlICAvKiBpZiBkZWZpbmVkKCBfX0FSTUNDX1ZFUlNJT04gKSAqLw0KKyAgICAgICAgI2Vsc2UgLyogaWYgZGVmaW5lZCggX19BUk1DQ19WRVJTSU9OICkgKi8NCiAgICAgICAgICAgICAvKiBEZWNsYXJhdGlvbiB3aGVuIHRoZXNlIHZhcmlhYmxlIGFyZSBleHBvcnRlZCBmcm9tIGxpbmtlciBzY3JpcHRzLiAqLw0KICAgICAgICAgICAgIGV4dGVybiB1aW50MzJfdCBfX3ByaXZpbGVnZWRfZnVuY3Rpb25zX3N0YXJ0X19bXTsNCiAgICAgICAgICAgICBleHRlcm4gdWludDMyX3QgX19wcml2aWxlZ2VkX2Z1bmN0aW9uc19lbmRfX1tdOw0KQEAgLTgwMiwyMiArODAyLDIyIEBACiAgICAgICAgICAgICAgICAgdWxSMCA9IHB1bENhbGxlclN0YWNrQWRkcmVzc1sgMCBdOw0KIA0KICAgICAgICAgICAgICAgICAjaWYgKCBjb25maWdFTkFCTEVfTVBVID09IDEgKQ0KLSAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAvKiBSZWFkIHRoZSBDT05UUk9MIHJlZ2lzdGVyIHZhbHVlLiAqLw0KLSAgICAgICAgICAgICAgICAgICAgX19hc20gdm9sYXRpbGUgKCAibXJzICUwLCBjb250cm9sIiAgOiAiPXIiICggdWxDb250cm9sICkgKTsNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZWFkIHRoZSBDT05UUk9MIHJlZ2lzdGVyIHZhbHVlLiAqLw0KKyAgICAgICAgICAgICAgICAgICAgICAgIF9fYXNtIHZvbGF0aWxlICggIm1ycyAlMCwgY29udHJvbCIgIDogIj1yIiAoIHVsQ29udHJvbCApICk7DQogDQotICAgICAgICAgICAgICAgICAgICAvKiBUaGUgdGFzayB0aGF0IHJhaXNlZCB0aGUgU1ZDIGlzIHByaXZpbGVnZWQgaWYgQml0WzBdDQotICAgICAgICAgICAgICAgICAgICAgKiBpbiB0aGUgQ09OVFJPTCByZWdpc3RlciBpcyAwLiAqLw0KLSAgICAgICAgICAgICAgICAgICAgdWxJc1Rhc2tQcml2aWxlZ2VkID0gKCAoIHVsQ29udHJvbCAmIHBvcnRDT05UUk9MX1BSSVZJTEVHRURfTUFTSyApID09IDAgKTsNCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGUgdGFzayB0aGF0IHJhaXNlZCB0aGUgU1ZDIGlzIHByaXZpbGVnZWQgaWYgQml0WzBdDQorICAgICAgICAgICAgICAgICAgICAgICAgICogaW4gdGhlIENPTlRST0wgcmVnaXN0ZXIgaXMgMC4gKi8NCisgICAgICAgICAgICAgICAgICAgICAgICB1bElzVGFza1ByaXZpbGVnZWQgPSAoICggdWxDb250cm9sICYgcG9ydENPTlRST0xfUFJJVklMRUdFRF9NQVNLICkgPT0gMCApOw0KIA0KLSAgICAgICAgICAgICAgICAgICAgLyogQWxsb2NhdGUgYW5kIGxvYWQgYSBjb250ZXh0IGZvciB0aGUgc2VjdXJlIHRhc2suICovDQotICAgICAgICAgICAgICAgICAgICB4U2VjdXJlQ29udGV4dCA9IFNlY3VyZUNvbnRleHRfQWxsb2NhdGVDb250ZXh0KCB1bFIwLCB1bElzVGFza1ByaXZpbGVnZWQgKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAjZWxzZSAgLyogaWYgKCBjb25maWdFTkFCTEVfTVBVID09IDEgKSAqLw0KLSAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAvKiBBbGxvY2F0ZSBhbmQgbG9hZCBhIGNvbnRleHQgZm9yIHRoZSBzZWN1cmUgdGFzay4gKi8NCi0gICAgICAgICAgICAgICAgICAgIHhTZWN1cmVDb250ZXh0ID0gU2VjdXJlQ29udGV4dF9BbGxvY2F0ZUNvbnRleHQoIHVsUjAgKTsNCi0gICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFsbG9jYXRlIGFuZCBsb2FkIGEgY29udGV4dCBmb3IgdGhlIHNlY3VyZSB0YXNrLiAqLw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHhTZWN1cmVDb250ZXh0ID0gU2VjdXJlQ29udGV4dF9BbGxvY2F0ZUNvbnRleHQoIHVsUjAsIHVsSXNUYXNrUHJpdmlsZWdlZCApOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAjZWxzZSAvKiBpZiAoIGNvbmZpZ0VOQUJMRV9NUFUgPT0gMSApICovDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgLyogQWxsb2NhdGUgYW5kIGxvYWQgYSBjb250ZXh0IGZvciB0aGUgc2VjdXJlIHRhc2suICovDQorICAgICAgICAgICAgICAgICAgICAgICAgeFNlY3VyZUNvbnRleHQgPSBTZWN1cmVDb250ZXh0X0FsbG9jYXRlQ29udGV4dCggdWxSMCApOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAjZW5kaWYgLyogY29uZmlnRU5BQkxFX01QVSAqLw0KIA0KICAgICAgICAgICAgICAgICBjb25maWdBU1NFUlQoIHhTZWN1cmVDb250ZXh0ICE9IE5VTEwgKTsNCkBAIC04MzUsMjEgKzgzNSwyMSBAQAogDQogICAgICAgICBjYXNlIHBvcnRTVkNfU1RBUlRfU0NIRURVTEVSOg0KICAgICAgICAgICAgICNpZiAoIGNvbmZpZ0VOQUJMRV9UUlVTVFpPTkUgPT0gMSApDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAvKiBEZS1wcmlvcml0aXplIHRoZSBub24tc2VjdXJlIGV4Y2VwdGlvbnMgc28gdGhhdCB0aGUNCi0gICAgICAgICAgICAgICAgICogbm9uLXNlY3VyZSBwZW5kU1YgcnVucyBhdCB0aGUgbG93ZXN0IHByaW9yaXR5LiAqLw0KLSAgICAgICAgICAgICAgICBTZWN1cmVJbml0X0RlUHJpb3JpdGl6ZU5TRXhjZXB0aW9ucygpOw0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAvKiBEZS1wcmlvcml0aXplIHRoZSBub24tc2VjdXJlIGV4Y2VwdGlvbnMgc28gdGhhdCB0aGUNCisgICAgICAgICAgICAgICAgICAgICAqIG5vbi1zZWN1cmUgcGVuZFNWIHJ1bnMgYXQgdGhlIGxvd2VzdCBwcmlvcml0eS4gKi8NCisgICAgICAgICAgICAgICAgICAgIFNlY3VyZUluaXRfRGVQcmlvcml0aXplTlNFeGNlcHRpb25zKCk7DQogDQotICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgdGhlIHNlY3VyZSBjb250ZXh0IG1hbmFnZW1lbnQgc3lzdGVtLiAqLw0KLSAgICAgICAgICAgICAgICBTZWN1cmVDb250ZXh0X0luaXQoKTsNCi0gICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIHRoZSBzZWN1cmUgY29udGV4dCBtYW5hZ2VtZW50IHN5c3RlbS4gKi8NCisgICAgICAgICAgICAgICAgICAgIFNlY3VyZUNvbnRleHRfSW5pdCgpOw0KKyAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgI2VuZGlmIC8qIGNvbmZpZ0VOQUJMRV9UUlVTVFpPTkUgKi8NCiANCiAgICAgICAgICAgICAjaWYgKCBjb25maWdFTkFCTEVfRlBVID09IDEgKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgLyogU2V0dXAgdGhlIEZsb2F0aW5nIFBvaW50IFVuaXQgKEZQVSkuICovDQotICAgICAgICAgICAgICAgIHBydlNldHVwRlBVKCk7DQotICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAvKiBTZXR1cCB0aGUgRmxvYXRpbmcgUG9pbnQgVW5pdCAoRlBVKS4gKi8NCisgICAgICAgICAgICAgICAgICAgIHBydlNldHVwRlBVKCk7DQorICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAjZW5kaWYgLyogY29uZmlnRU5BQkxFX0ZQVSAqLw0KIA0KICAgICAgICAgICAgIC8qIFNldHVwIHRoZSBjb250ZXh0IG9mIHRoZSBmaXJzdCB0YXNrIHNvIHRoYXQgdGhlIGZpcnN0IHRhc2sgc3RhcnRzDQpAQCAtODc3LDE4ICs4NzcsMjAgQEAKIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCisvKiAqSU5ERU5ULU9GRiogKi8NCiAjaWYgKCBjb25maWdFTkFCTEVfTVBVID09IDEgKQ0KICAgICBTdGFja1R5cGVfdCAqIHB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKiBweFRvcE9mU3RhY2ssDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFja1R5cGVfdCAqIHB4RW5kT2ZTdGFjaywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiBwdlBhcmFtZXRlcnMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYXNlVHlwZV90IHhSdW5Qcml2aWxlZ2VkICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUFJJVklMRUdFRF9GVU5DVElPTiAqLw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFzZVR5cGVfdCB4UnVuUHJpdmlsZWdlZCApIC8qIFBSSVZJTEVHRURfRlVOQ1RJT04gKi8NCiAjZWxzZQ0KICAgICBTdGFja1R5cGVfdCAqIHB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKiBweFRvcE9mU3RhY2ssDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFja1R5cGVfdCAqIHB4RW5kT2ZTdGFjaywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiBwdlBhcmFtZXRlcnMgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQUklWSUxFR0VEX0ZVTkNUSU9OICovDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICogcHZQYXJhbWV0ZXJzICkgLyogUFJJVklMRUdFRF9GVU5DVElPTiAqLw0KICNlbmRpZiAvKiBjb25maWdFTkFCTEVfTVBVICovDQorLyogKklOREVOVC1PTiogKi8NCiB7DQogICAgIC8qIFNpbXVsYXRlIHRoZSBzdGFjayBmcmFtZSBhcyBpdCB3b3VsZCBiZSBjcmVhdGVkIGJ5IGEgY29udGV4dCBzd2l0Y2gNCiAgICAgICogaW50ZXJydXB0LiAqLw0KQEAgLTEwNTEsNyArMTA1Myw5IEBACiAgICAgew0KICAgICAgICAgdWludDMyX3QgdWxSZWdpb25TdGFydEFkZHJlc3MsIHVsUmVnaW9uRW5kQWRkcmVzcywgdWxSZWdpb25OdW1iZXI7DQogICAgICAgICBpbnQzMl90IGxJbmRleCA9IDA7DQorDQogICAgICAgICAjaWYgZGVmaW5lZCggX19BUk1DQ19WRVJTSU9OICkNCisNCiAgICAgICAgICAgICAvKiBEZWNsYXJhdGlvbiB3aGVuIHRoZXNlIHZhcmlhYmxlIGFyZSBkZWZpbmVkIGluIGNvZGUgaW5zdGVhZCBvZiBiZWluZw0KICAgICAgICAgICAgICAqIGV4cG9ydGVkIGZyb20gbGlua2VyIHNjcmlwdHMuICovDQogICAgICAgICAgICAgZXh0ZXJuIHVpbnQzMl90ICogX19wcml2aWxlZ2VkX3NyYW1fc3RhcnRfXzsNCkBAIC0xMDc5LDggKzEwODMsOCBAQAogICAgICAgICAgICAgICogdXNpbmcgYSBzZXBhcmF0ZSBNUFUgcmVnaW9uLiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHByaXZpbGVnZWQNCiAgICAgICAgICAgICAgKiBTUkFNIGlzIGFscmVhZHkgcHJvdGVjdGVkIHVzaW5nIGFuIE1QVSByZWdpb24gYW5kIEFSTXY4LU0gZG9lcw0KICAgICAgICAgICAgICAqIG5vdCBhbGxvdyBvdmVybGFwcGluZyBNUFUgcmVnaW9ucy4gKi8NCi0gICAgICAgICAgICBpZiggdWxSZWdpb25TdGFydEFkZHJlc3MgPj0gKCB1aW50MzJfdCApIF9fcHJpdmlsZWdlZF9zcmFtX3N0YXJ0X18gJiYNCi0gICAgICAgICAgICAgICAgdWxSZWdpb25FbmRBZGRyZXNzIDw9ICggdWludDMyX3QgKSBfX3ByaXZpbGVnZWRfc3JhbV9lbmRfXyApDQorICAgICAgICAgICAgaWYoICggdWxSZWdpb25TdGFydEFkZHJlc3MgPj0gKCB1aW50MzJfdCApIF9fcHJpdmlsZWdlZF9zcmFtX3N0YXJ0X18gKSAmJg0KKyAgICAgICAgICAgICAgICAoIHVsUmVnaW9uRW5kQWRkcmVzcyA8PSAoIHVpbnQzMl90ICkgX19wcml2aWxlZ2VkX3NyYW1fZW5kX18gKSApDQogICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICB4TVBVU2V0dGluZ3MtPnhSZWdpb25zU2V0dGluZ3NbIDAgXS51bFJCQVIgPSAwOw0KICAgICAgICAgICAgICAgICB4TVBVU2V0dGluZ3MtPnhSZWdpb25zU2V0dGluZ3NbIDAgXS51bFJMQVIgPSAwOw0KQEAgLTEwODksNyArMTA5Myw3IEBACiAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgIC8qIERlZmluZSB0aGUgcmVnaW9uIHRoYXQgYWxsb3dzIGFjY2VzcyB0byB0aGUgc3RhY2suICovDQogICAgICAgICAgICAgICAgIHVsUmVnaW9uU3RhcnRBZGRyZXNzICY9IHBvcnRNUFVfUkJBUl9BRERSRVNTX01BU0s7DQotICAgICAgICAgICAgICAgIHVsUmVnaW9uRW5kQWRkcmVzcyAgJj0gcG9ydE1QVV9STEFSX0FERFJFU1NfTUFTSzsNCisgICAgICAgICAgICAgICAgdWxSZWdpb25FbmRBZGRyZXNzICY9IHBvcnRNUFVfUkxBUl9BRERSRVNTX01BU0s7DQogDQogICAgICAgICAgICAgICAgIHhNUFVTZXR0aW5ncy0+eFJlZ2lvbnNTZXR0aW5nc1sgMCBdLnVsUkJBUiA9ICggdWxSZWdpb25TdGFydEFkZHJlc3MgKSB8DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggcG9ydE1QVV9SRUdJT05fTk9OX1NIQVJFQUJMRSApIHwNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9JQVIvQVJNX0NNMzNfTlRaL25vbl9zZWN1cmUvcG9ydC5jIGIvcG9ydGFibGUvSUFSL0FSTV9DTTMzX05UWi9ub25fc2VjdXJlL3BvcnQuYwppbmRleCAzZjM5YmMzLi5lMGEwYzdlIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9JQVIvQVJNX0NNMzNfTlRaL25vbl9zZWN1cmUvcG9ydC5jCisrKyBiL3BvcnRhYmxlL0lBUi9BUk1fQ00zM19OVFovbm9uX3NlY3VyZS9wb3J0LmMKQEAgLTYxMiw3ICs2MTIsNyBAQAogICAgICAgICAgICAgZXh0ZXJuIHVpbnQzMl90ICogX191bnByaXZpbGVnZWRfZmxhc2hfZW5kX187DQogICAgICAgICAgICAgZXh0ZXJuIHVpbnQzMl90ICogX19wcml2aWxlZ2VkX3NyYW1fc3RhcnRfXzsNCiAgICAgICAgICAgICBleHRlcm4gdWludDMyX3QgKiBfX3ByaXZpbGVnZWRfc3JhbV9lbmRfXzsNCi0gICAgICAgICNlbHNlICAvKiBpZiBkZWZpbmVkKCBfX0FSTUNDX1ZFUlNJT04gKSAqLw0KKyAgICAgICAgI2Vsc2UgLyogaWYgZGVmaW5lZCggX19BUk1DQ19WRVJTSU9OICkgKi8NCiAgICAgICAgICAgICAvKiBEZWNsYXJhdGlvbiB3aGVuIHRoZXNlIHZhcmlhYmxlIGFyZSBleHBvcnRlZCBmcm9tIGxpbmtlciBzY3JpcHRzLiAqLw0KICAgICAgICAgICAgIGV4dGVybiB1aW50MzJfdCBfX3ByaXZpbGVnZWRfZnVuY3Rpb25zX3N0YXJ0X19bXTsNCiAgICAgICAgICAgICBleHRlcm4gdWludDMyX3QgX19wcml2aWxlZ2VkX2Z1bmN0aW9uc19lbmRfX1tdOw0KQEAgLTgwMiwyMiArODAyLDIyIEBACiAgICAgICAgICAgICAgICAgdWxSMCA9IHB1bENhbGxlclN0YWNrQWRkcmVzc1sgMCBdOw0KIA0KICAgICAgICAgICAgICAgICAjaWYgKCBjb25maWdFTkFCTEVfTVBVID09IDEgKQ0KLSAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAvKiBSZWFkIHRoZSBDT05UUk9MIHJlZ2lzdGVyIHZhbHVlLiAqLw0KLSAgICAgICAgICAgICAgICAgICAgX19hc20gdm9sYXRpbGUgKCAibXJzICUwLCBjb250cm9sIiAgOiAiPXIiICggdWxDb250cm9sICkgKTsNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZWFkIHRoZSBDT05UUk9MIHJlZ2lzdGVyIHZhbHVlLiAqLw0KKyAgICAgICAgICAgICAgICAgICAgICAgIF9fYXNtIHZvbGF0aWxlICggIm1ycyAlMCwgY29udHJvbCIgIDogIj1yIiAoIHVsQ29udHJvbCApICk7DQogDQotICAgICAgICAgICAgICAgICAgICAvKiBUaGUgdGFzayB0aGF0IHJhaXNlZCB0aGUgU1ZDIGlzIHByaXZpbGVnZWQgaWYgQml0WzBdDQotICAgICAgICAgICAgICAgICAgICAgKiBpbiB0aGUgQ09OVFJPTCByZWdpc3RlciBpcyAwLiAqLw0KLSAgICAgICAgICAgICAgICAgICAgdWxJc1Rhc2tQcml2aWxlZ2VkID0gKCAoIHVsQ29udHJvbCAmIHBvcnRDT05UUk9MX1BSSVZJTEVHRURfTUFTSyApID09IDAgKTsNCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGUgdGFzayB0aGF0IHJhaXNlZCB0aGUgU1ZDIGlzIHByaXZpbGVnZWQgaWYgQml0WzBdDQorICAgICAgICAgICAgICAgICAgICAgICAgICogaW4gdGhlIENPTlRST0wgcmVnaXN0ZXIgaXMgMC4gKi8NCisgICAgICAgICAgICAgICAgICAgICAgICB1bElzVGFza1ByaXZpbGVnZWQgPSAoICggdWxDb250cm9sICYgcG9ydENPTlRST0xfUFJJVklMRUdFRF9NQVNLICkgPT0gMCApOw0KIA0KLSAgICAgICAgICAgICAgICAgICAgLyogQWxsb2NhdGUgYW5kIGxvYWQgYSBjb250ZXh0IGZvciB0aGUgc2VjdXJlIHRhc2suICovDQotICAgICAgICAgICAgICAgICAgICB4U2VjdXJlQ29udGV4dCA9IFNlY3VyZUNvbnRleHRfQWxsb2NhdGVDb250ZXh0KCB1bFIwLCB1bElzVGFza1ByaXZpbGVnZWQgKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAjZWxzZSAgLyogaWYgKCBjb25maWdFTkFCTEVfTVBVID09IDEgKSAqLw0KLSAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAvKiBBbGxvY2F0ZSBhbmQgbG9hZCBhIGNvbnRleHQgZm9yIHRoZSBzZWN1cmUgdGFzay4gKi8NCi0gICAgICAgICAgICAgICAgICAgIHhTZWN1cmVDb250ZXh0ID0gU2VjdXJlQ29udGV4dF9BbGxvY2F0ZUNvbnRleHQoIHVsUjAgKTsNCi0gICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFsbG9jYXRlIGFuZCBsb2FkIGEgY29udGV4dCBmb3IgdGhlIHNlY3VyZSB0YXNrLiAqLw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHhTZWN1cmVDb250ZXh0ID0gU2VjdXJlQ29udGV4dF9BbGxvY2F0ZUNvbnRleHQoIHVsUjAsIHVsSXNUYXNrUHJpdmlsZWdlZCApOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAjZWxzZSAvKiBpZiAoIGNvbmZpZ0VOQUJMRV9NUFUgPT0gMSApICovDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgLyogQWxsb2NhdGUgYW5kIGxvYWQgYSBjb250ZXh0IGZvciB0aGUgc2VjdXJlIHRhc2suICovDQorICAgICAgICAgICAgICAgICAgICAgICAgeFNlY3VyZUNvbnRleHQgPSBTZWN1cmVDb250ZXh0X0FsbG9jYXRlQ29udGV4dCggdWxSMCApOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAjZW5kaWYgLyogY29uZmlnRU5BQkxFX01QVSAqLw0KIA0KICAgICAgICAgICAgICAgICBjb25maWdBU1NFUlQoIHhTZWN1cmVDb250ZXh0ICE9IE5VTEwgKTsNCkBAIC04MzUsMjEgKzgzNSwyMSBAQAogDQogICAgICAgICBjYXNlIHBvcnRTVkNfU1RBUlRfU0NIRURVTEVSOg0KICAgICAgICAgICAgICNpZiAoIGNvbmZpZ0VOQUJMRV9UUlVTVFpPTkUgPT0gMSApDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAvKiBEZS1wcmlvcml0aXplIHRoZSBub24tc2VjdXJlIGV4Y2VwdGlvbnMgc28gdGhhdCB0aGUNCi0gICAgICAgICAgICAgICAgICogbm9uLXNlY3VyZSBwZW5kU1YgcnVucyBhdCB0aGUgbG93ZXN0IHByaW9yaXR5LiAqLw0KLSAgICAgICAgICAgICAgICBTZWN1cmVJbml0X0RlUHJpb3JpdGl6ZU5TRXhjZXB0aW9ucygpOw0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAvKiBEZS1wcmlvcml0aXplIHRoZSBub24tc2VjdXJlIGV4Y2VwdGlvbnMgc28gdGhhdCB0aGUNCisgICAgICAgICAgICAgICAgICAgICAqIG5vbi1zZWN1cmUgcGVuZFNWIHJ1bnMgYXQgdGhlIGxvd2VzdCBwcmlvcml0eS4gKi8NCisgICAgICAgICAgICAgICAgICAgIFNlY3VyZUluaXRfRGVQcmlvcml0aXplTlNFeGNlcHRpb25zKCk7DQogDQotICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgdGhlIHNlY3VyZSBjb250ZXh0IG1hbmFnZW1lbnQgc3lzdGVtLiAqLw0KLSAgICAgICAgICAgICAgICBTZWN1cmVDb250ZXh0X0luaXQoKTsNCi0gICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIHRoZSBzZWN1cmUgY29udGV4dCBtYW5hZ2VtZW50IHN5c3RlbS4gKi8NCisgICAgICAgICAgICAgICAgICAgIFNlY3VyZUNvbnRleHRfSW5pdCgpOw0KKyAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgI2VuZGlmIC8qIGNvbmZpZ0VOQUJMRV9UUlVTVFpPTkUgKi8NCiANCiAgICAgICAgICAgICAjaWYgKCBjb25maWdFTkFCTEVfRlBVID09IDEgKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgLyogU2V0dXAgdGhlIEZsb2F0aW5nIFBvaW50IFVuaXQgKEZQVSkuICovDQotICAgICAgICAgICAgICAgIHBydlNldHVwRlBVKCk7DQotICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAvKiBTZXR1cCB0aGUgRmxvYXRpbmcgUG9pbnQgVW5pdCAoRlBVKS4gKi8NCisgICAgICAgICAgICAgICAgICAgIHBydlNldHVwRlBVKCk7DQorICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAjZW5kaWYgLyogY29uZmlnRU5BQkxFX0ZQVSAqLw0KIA0KICAgICAgICAgICAgIC8qIFNldHVwIHRoZSBjb250ZXh0IG9mIHRoZSBmaXJzdCB0YXNrIHNvIHRoYXQgdGhlIGZpcnN0IHRhc2sgc3RhcnRzDQpAQCAtODc3LDE4ICs4NzcsMjAgQEAKIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCisvKiAqSU5ERU5ULU9GRiogKi8NCiAjaWYgKCBjb25maWdFTkFCTEVfTVBVID09IDEgKQ0KICAgICBTdGFja1R5cGVfdCAqIHB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKiBweFRvcE9mU3RhY2ssDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFja1R5cGVfdCAqIHB4RW5kT2ZTdGFjaywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiBwdlBhcmFtZXRlcnMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYXNlVHlwZV90IHhSdW5Qcml2aWxlZ2VkICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUFJJVklMRUdFRF9GVU5DVElPTiAqLw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFzZVR5cGVfdCB4UnVuUHJpdmlsZWdlZCApIC8qIFBSSVZJTEVHRURfRlVOQ1RJT04gKi8NCiAjZWxzZQ0KICAgICBTdGFja1R5cGVfdCAqIHB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKiBweFRvcE9mU3RhY2ssDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFja1R5cGVfdCAqIHB4RW5kT2ZTdGFjaywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiBwdlBhcmFtZXRlcnMgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQUklWSUxFR0VEX0ZVTkNUSU9OICovDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICogcHZQYXJhbWV0ZXJzICkgLyogUFJJVklMRUdFRF9GVU5DVElPTiAqLw0KICNlbmRpZiAvKiBjb25maWdFTkFCTEVfTVBVICovDQorLyogKklOREVOVC1PTiogKi8NCiB7DQogICAgIC8qIFNpbXVsYXRlIHRoZSBzdGFjayBmcmFtZSBhcyBpdCB3b3VsZCBiZSBjcmVhdGVkIGJ5IGEgY29udGV4dCBzd2l0Y2gNCiAgICAgICogaW50ZXJydXB0LiAqLw0KQEAgLTEwNTEsNyArMTA1Myw5IEBACiAgICAgew0KICAgICAgICAgdWludDMyX3QgdWxSZWdpb25TdGFydEFkZHJlc3MsIHVsUmVnaW9uRW5kQWRkcmVzcywgdWxSZWdpb25OdW1iZXI7DQogICAgICAgICBpbnQzMl90IGxJbmRleCA9IDA7DQorDQogICAgICAgICAjaWYgZGVmaW5lZCggX19BUk1DQ19WRVJTSU9OICkNCisNCiAgICAgICAgICAgICAvKiBEZWNsYXJhdGlvbiB3aGVuIHRoZXNlIHZhcmlhYmxlIGFyZSBkZWZpbmVkIGluIGNvZGUgaW5zdGVhZCBvZiBiZWluZw0KICAgICAgICAgICAgICAqIGV4cG9ydGVkIGZyb20gbGlua2VyIHNjcmlwdHMuICovDQogICAgICAgICAgICAgZXh0ZXJuIHVpbnQzMl90ICogX19wcml2aWxlZ2VkX3NyYW1fc3RhcnRfXzsNCkBAIC0xMDc5LDggKzEwODMsOCBAQAogICAgICAgICAgICAgICogdXNpbmcgYSBzZXBhcmF0ZSBNUFUgcmVnaW9uLiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHByaXZpbGVnZWQNCiAgICAgICAgICAgICAgKiBTUkFNIGlzIGFscmVhZHkgcHJvdGVjdGVkIHVzaW5nIGFuIE1QVSByZWdpb24gYW5kIEFSTXY4LU0gZG9lcw0KICAgICAgICAgICAgICAqIG5vdCBhbGxvdyBvdmVybGFwcGluZyBNUFUgcmVnaW9ucy4gKi8NCi0gICAgICAgICAgICBpZiggdWxSZWdpb25TdGFydEFkZHJlc3MgPj0gKCB1aW50MzJfdCApIF9fcHJpdmlsZWdlZF9zcmFtX3N0YXJ0X18gJiYNCi0gICAgICAgICAgICAgICAgdWxSZWdpb25FbmRBZGRyZXNzIDw9ICggdWludDMyX3QgKSBfX3ByaXZpbGVnZWRfc3JhbV9lbmRfXyApDQorICAgICAgICAgICAgaWYoICggdWxSZWdpb25TdGFydEFkZHJlc3MgPj0gKCB1aW50MzJfdCApIF9fcHJpdmlsZWdlZF9zcmFtX3N0YXJ0X18gKSAmJg0KKyAgICAgICAgICAgICAgICAoIHVsUmVnaW9uRW5kQWRkcmVzcyA8PSAoIHVpbnQzMl90ICkgX19wcml2aWxlZ2VkX3NyYW1fZW5kX18gKSApDQogICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICB4TVBVU2V0dGluZ3MtPnhSZWdpb25zU2V0dGluZ3NbIDAgXS51bFJCQVIgPSAwOw0KICAgICAgICAgICAgICAgICB4TVBVU2V0dGluZ3MtPnhSZWdpb25zU2V0dGluZ3NbIDAgXS51bFJMQVIgPSAwOw0KQEAgLTEwODksNyArMTA5Myw3IEBACiAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgIC8qIERlZmluZSB0aGUgcmVnaW9uIHRoYXQgYWxsb3dzIGFjY2VzcyB0byB0aGUgc3RhY2suICovDQogICAgICAgICAgICAgICAgIHVsUmVnaW9uU3RhcnRBZGRyZXNzICY9IHBvcnRNUFVfUkJBUl9BRERSRVNTX01BU0s7DQotICAgICAgICAgICAgICAgIHVsUmVnaW9uRW5kQWRkcmVzcyAgJj0gcG9ydE1QVV9STEFSX0FERFJFU1NfTUFTSzsNCisgICAgICAgICAgICAgICAgdWxSZWdpb25FbmRBZGRyZXNzICY9IHBvcnRNUFVfUkxBUl9BRERSRVNTX01BU0s7DQogDQogICAgICAgICAgICAgICAgIHhNUFVTZXR0aW5ncy0+eFJlZ2lvbnNTZXR0aW5nc1sgMCBdLnVsUkJBUiA9ICggdWxSZWdpb25TdGFydEFkZHJlc3MgKSB8DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggcG9ydE1QVV9SRUdJT05fTk9OX1NIQVJFQUJMRSApIHwNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9JQVIvQVJNX0NNNEZfTVBVL3BvcnRtYWNyby5oIGIvcG9ydGFibGUvSUFSL0FSTV9DTTRGX01QVS9wb3J0bWFjcm8uaAppbmRleCBkYzcyYmI5Li5kZjc3NmRiIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9JQVIvQVJNX0NNNEZfTVBVL3BvcnRtYWNyby5oCisrKyBiL3BvcnRhYmxlL0lBUi9BUk1fQ000Rl9NUFUvcG9ydG1hY3JvLmgKQEAgLTI3LDExICsyNywxMyBAQAogDQogDQogI2lmbmRlZiBQT1JUTUFDUk9fSA0KLSAgICAjZGVmaW5lIFBPUlRNQUNST19IDQorI2RlZmluZSBQT1JUTUFDUk9fSA0KIA0KLSAgICAjaWZkZWYgX19jcGx1c3BsdXMNCi0gICAgICAgIGV4dGVybiAiQyIgew0KLSAgICAjZW5kaWYNCisvKiAqSU5ERU5ULU9GRiogKi8NCisjaWZkZWYgX19jcGx1c3BsdXMNCisgICAgZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorLyogKklOREVOVC1PTiogKi8NCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICogUG9ydCBzcGVjaWZpYyBkZWZpbml0aW9ucy4NCkBAIC00NCwxNzEgKzQ2LDE3MiBAQAogICovDQogDQogLyogSUFSIGluY2x1ZGVzLiAqLw0KLSAgICAjaW5jbHVkZSA8aW50cmluc2ljcy5oPg0KKyNpbmNsdWRlIDxpbnRyaW5zaWNzLmg+DQogDQogLyogVHlwZSBkZWZpbml0aW9ucy4gKi8NCi0gICAgI2RlZmluZSBwb3J0Q0hBUiAgICAgICAgICBjaGFyDQotICAgICNkZWZpbmUgcG9ydEZMT0FUICAgICAgICAgZmxvYXQNCi0gICAgI2RlZmluZSBwb3J0RE9VQkxFICAgICAgICBkb3VibGUNCi0gICAgI2RlZmluZSBwb3J0TE9ORyAgICAgICAgICBsb25nDQotICAgICNkZWZpbmUgcG9ydFNIT1JUICAgICAgICAgc2hvcnQNCi0gICAgI2RlZmluZSBwb3J0U1RBQ0tfVFlQRSAgICB1aW50MzJfdA0KLSAgICAjZGVmaW5lIHBvcnRCQVNFX1RZUEUgICAgIGxvbmcNCisjZGVmaW5lIHBvcnRDSEFSICAgICAgICAgIGNoYXINCisjZGVmaW5lIHBvcnRGTE9BVCAgICAgICAgIGZsb2F0DQorI2RlZmluZSBwb3J0RE9VQkxFICAgICAgICBkb3VibGUNCisjZGVmaW5lIHBvcnRMT05HICAgICAgICAgIGxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVCAgICAgICAgIHNob3J0DQorI2RlZmluZSBwb3J0U1RBQ0tfVFlQRSAgICB1aW50MzJfdA0KKyNkZWZpbmUgcG9ydEJBU0VfVFlQRSAgICAgbG9uZw0KIA0KLSAgICB0eXBlZGVmIHBvcnRTVEFDS19UWVBFICAgU3RhY2tUeXBlX3Q7DQotICAgIHR5cGVkZWYgbG9uZyAgICAgICAgICAgICBCYXNlVHlwZV90Ow0KLSAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgICAgVUJhc2VUeXBlX3Q7DQordHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSAgIFN0YWNrVHlwZV90Ow0KK3R5cGVkZWYgbG9uZyAgICAgICAgICAgICBCYXNlVHlwZV90Ow0KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyAgICBVQmFzZVR5cGVfdDsNCiANCi0gICAgI2lmICggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCi0gICAgICAgIHR5cGVkZWYgdWludDE2X3QgICAgIFRpY2tUeXBlX3Q7DQotICAgICAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgICAgICAgICAgICggVGlja1R5cGVfdCApIDB4ZmZmZg0KLSAgICAjZWxzZQ0KLSAgICAgICAgdHlwZWRlZiB1aW50MzJfdCAgICAgVGlja1R5cGVfdDsNCi0gICAgICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAgICAgICAgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQorI2lmICggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCisgICAgdHlwZWRlZiB1aW50MTZfdCAgICAgVGlja1R5cGVfdDsNCisgICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICAgICAgICAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmYNCisjZWxzZQ0KKyAgICB0eXBlZGVmIHVpbnQzMl90ICAgICBUaWNrVHlwZV90Ow0KKyAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgICAgICAgICAgICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTA0KIA0KIC8qIDMyLWJpdCB0aWNrIHR5cGUgb24gYSAzMi1iaXQgYXJjaGl0ZWN0dXJlLCBzbyByZWFkcyBvZiB0aGUgdGljayBjb3VudCBkbw0KICAqIG5vdCBuZWVkIHRvIGJlIGd1YXJkZWQgd2l0aCBhIGNyaXRpY2FsIHNlY3Rpb24uICovDQotICAgICAgICAjZGVmaW5lIHBvcnRUSUNLX1RZUEVfSVNfQVRPTUlDICAgIDENCi0gICAgI2VuZGlmDQorICAgICNkZWZpbmUgcG9ydFRJQ0tfVFlQRV9JU19BVE9NSUMgICAgMQ0KKyNlbmRpZg0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIE1QVSBzcGVjaWZpYyBjb25zdGFudHMuICovDQotICAgICNkZWZpbmUgcG9ydFVTSU5HX01QVV9XUkFQUEVSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQ0KLSAgICAjZGVmaW5lIHBvcnRQUklWSUxFR0VfQklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMHg4MDAwMDAwMFVMICkNCisjZGVmaW5lIHBvcnRVU0lOR19NUFVfV1JBUFBFUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDENCisjZGVmaW5lIHBvcnRQUklWSUxFR0VfQklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMHg4MDAwMDAwMFVMICkNCiANCi0gICAgI2RlZmluZSBwb3J0TVBVX1JFR0lPTl9SRUFEX1dSSVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDB4MDNVTCA8PCAyNFVMICkNCi0gICAgI2RlZmluZSBwb3J0TVBVX1JFR0lPTl9QUklWSUxFR0VEX1JFQURfT05MWSAgICAgICAgICAgICAgICAgICAgICAoIDB4MDVVTCA8PCAyNFVMICkNCi0gICAgI2RlZmluZSBwb3J0TVBVX1JFR0lPTl9SRUFEX09OTFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDB4MDZVTCA8PCAyNFVMICkNCi0gICAgI2RlZmluZSBwb3J0TVBVX1JFR0lPTl9QUklWSUxFR0VEX1JFQURfV1JJVEUgICAgICAgICAgICAgICAgICAgICAoIDB4MDFVTCA8PCAyNFVMICkNCi0gICAgI2RlZmluZSBwb3J0TVBVX1JFR0lPTl9QUklWSUxFR0VEX1JFQURfV1JJVEVfVU5QUklWX1JFQURfT05MWSAgICAoIDB4MDJVTCA8PCAyNFVMICkNCi0gICAgI2RlZmluZSBwb3J0TVBVX1JFR0lPTl9DQUNIRUFCTEVfQlVGRkVSQUJMRSAgICAgICAgICAgICAgICAgICAgICAoIDB4MDdVTCA8PCAxNlVMICkNCi0gICAgI2RlZmluZSBwb3J0TVBVX1JFR0lPTl9FWEVDVVRFX05FVkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDB4MDFVTCA8PCAyOFVMICkNCi0gICAgLyogTG9jYXRpb24gb2YgdGhlIFRFWCxTLEMsQiBiaXRzIGluIHRoZSBNUFUgUmVnaW9uIEF0dHJpYnV0ZSBhbmQgU2l6ZQ0KLSAgICAgKiBSZWdpc3RlciAoUkFTUikuICovDQotICAgICNkZWZpbmUgcG9ydE1QVV9SQVNSX1RFWF9TX0NfQl9MT0NBVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgKCAxNlVMICkNCi0gICAgI2RlZmluZSBwb3J0TVBVX1JBU1JfVEVYX1NfQ19CX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDB4M0ZVTCApDQorI2RlZmluZSBwb3J0TVBVX1JFR0lPTl9SRUFEX1dSSVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDB4MDNVTCA8PCAyNFVMICkNCisjZGVmaW5lIHBvcnRNUFVfUkVHSU9OX1BSSVZJTEVHRURfUkVBRF9PTkxZICAgICAgICAgICAgICAgICAgICAgICggMHgwNVVMIDw8IDI0VUwgKQ0KKyNkZWZpbmUgcG9ydE1QVV9SRUdJT05fUkVBRF9PTkxZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAweDA2VUwgPDwgMjRVTCApDQorI2RlZmluZSBwb3J0TVBVX1JFR0lPTl9QUklWSUxFR0VEX1JFQURfV1JJVEUgICAgICAgICAgICAgICAgICAgICAoIDB4MDFVTCA8PCAyNFVMICkNCisjZGVmaW5lIHBvcnRNUFVfUkVHSU9OX1BSSVZJTEVHRURfUkVBRF9XUklURV9VTlBSSVZfUkVBRF9PTkxZICAgICggMHgwMlVMIDw8IDI0VUwgKQ0KKyNkZWZpbmUgcG9ydE1QVV9SRUdJT05fQ0FDSEVBQkxFX0JVRkZFUkFCTEUgICAgICAgICAgICAgICAgICAgICAgKCAweDA3VUwgPDwgMTZVTCApDQorI2RlZmluZSBwb3J0TVBVX1JFR0lPTl9FWEVDVVRFX05FVkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDB4MDFVTCA8PCAyOFVMICkNCiANCi0gICAgLyogTVBVIHNldHRpbmdzIHRoYXQgY2FuIGJlIG92ZXJyaWRlbiBpbiBGcmVlUlRPU0NvbmZpZy5oLiAqLw0KLSAgICAjaWZuZGVmIGNvbmZpZ1RPVEFMX01QVV9SRUdJT05TDQotICAgICAgICAvKiBEZWZpbmUgdG8gOCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gKi8NCi0gICAgICAgICNkZWZpbmUgY29uZmlnVE9UQUxfTVBVX1JFR0lPTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDhVTCApDQotICAgICNlbmRpZg0KKy8qIExvY2F0aW9uIG9mIHRoZSBURVgsUyxDLEIgYml0cyBpbiB0aGUgTVBVIFJlZ2lvbiBBdHRyaWJ1dGUgYW5kIFNpemUNCisgKiBSZWdpc3RlciAoUkFTUikuICovDQorI2RlZmluZSBwb3J0TVBVX1JBU1JfVEVYX1NfQ19CX0xPQ0FUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAoIDE2VUwgKQ0KKyNkZWZpbmUgcG9ydE1QVV9SQVNSX1RFWF9TX0NfQl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAweDNGVUwgKQ0KIA0KLSAgICAvKg0KLSAgICAgKiBUaGUgVEVYLCBTaGFyZWFibGUgKFMpLCBDYWNoZWFibGUgKEMpIGFuZCBCdWZmZXJhYmxlIChCKSBiaXRzIGRlZmluZSB0aGUNCi0gICAgICogbWVtb3J5IHR5cGUsIGFuZCB3aGVyZSBuZWNlc3NhcnkgdGhlIGNhY2hlYWJsZSBhbmQgc2hhcmVhYmxlIHByb3BlcnRpZXMNCi0gICAgICogb2YgdGhlIG1lbW9yeSByZWdpb24uDQotICAgICAqDQotICAgICAqIFRoZSBURVgsIEMsIGFuZCBCIGJpdHMgdG9nZXRoZXIgaW5kaWNhdGUgdGhlIG1lbW9yeSB0eXBlIG9mIHRoZSByZWdpb24sDQotICAgICAqIGFuZDoNCi0gICAgICogLSBGb3IgTm9ybWFsIG1lbW9yeSwgdGhlIGNhY2hlYWJsZSBwcm9wZXJ0aWVzIG9mIHRoZSByZWdpb24uDQotICAgICAqIC0gRm9yIERldmljZSBtZW1vcnksIHdoZXRoZXIgdGhlIHJlZ2lvbiBpcyBzaGFyZWFibGUuDQotICAgICAqDQotICAgICAqIEZvciBOb3JtYWwgbWVtb3J5IHJlZ2lvbnMsIHRoZSBTIGJpdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgcmVnaW9uIGlzDQotICAgICAqIHNoYXJlYWJsZS4gRm9yIFN0cm9uZ2x5LW9yZGVyZWQgYW5kIERldmljZSBtZW1vcnksIHRoZSBTIGJpdCBpcyBpZ25vcmVkLg0KLSAgICAgKg0KLSAgICAgKiBTZWUgdGhlIGZvbGxvd2luZyB0d28gdGFibGVzIGZvciBzZXR0aW5nIFRFWCwgUywgQyBhbmQgQiBiaXRzIGZvcg0KLSAgICAgKiB1bnByaXZpbGVnZWQgZmxhc2gsIHByaXZpbGVnZWQgZmxhc2ggYW5kIHByaXZpbGVnZWQgUkFNIHJlZ2lvbnMuDQotICAgICAqDQotICAgICstLS0tLSstLS0rLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KLSAgICB8IFRFWCB8IEMgfCBCIHwgTWVtb3J5IHR5cGUgICAgICAgICAgICB8ICBEZXNjcmlwdGlvbiBvciBOb3JtYWwgcmVnaW9uIGNhY2hlYWJpbGl0eSAgICAgICAgICAgICB8ICBTaGFyZWFibGU/ICAgICAgICAgICAgIHwNCi0gICAgKy0tLS0tKy0tLSstLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQotICAgIHwgMDAwIHwgMCB8IDAgfCBTdHJvbmdseS1vcmRlcmVkICAgICAgIHwgIFN0cm9uZ2x5IG9yZGVyZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFNoYXJlYWJsZSAgICAgICAgICAgICAgfA0KLSAgICArLS0tLS0rLS0tKy0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCi0gICAgfCAwMDAgfCAwIHwgMSB8IERldmljZSAgICAgICAgICAgICAgICAgfCAgU2hhcmVkIGRldmljZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgU2hhcmVhYmxlICAgICAgICAgICAgICB8DQotICAgICstLS0tLSstLS0rLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KLSAgICB8IDAwMCB8IDEgfCAwIHwgTm9ybWFsICAgICAgICAgICAgICAgICB8ICBPdXRlciBhbmQgaW5uZXIgICB3cml0ZS10aHJvdWdoOyBubyB3cml0ZSBhbGxvY2F0ZSAgICB8ICBTIGJpdCAgICAgICAgICAgICAgICAgIHwNCi0gICAgKy0tLS0tKy0tLSstLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQotICAgIHwgMDAwIHwgMSB8IDEgfCBOb3JtYWwgICAgICAgICAgICAgICAgIHwgIE91dGVyIGFuZCBpbm5lciAgIHdyaXRlLWJhY2s7IG5vIHdyaXRlIGFsbG9jYXRlICAgICAgIHwgIFMgYml0ICAgICAgICAgICAgICAgICAgfA0KLSAgICArLS0tLS0rLS0tKy0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCi0gICAgfCAwMDEgfCAwIHwgMCB8IE5vcm1hbCAgICAgICAgICAgICAgICAgfCAgT3V0ZXIgYW5kIGlubmVyICAgTm9uLWNhY2hlYWJsZSAgICAgICAgICAgICAgICAgICAgICAgfCAgUyBiaXQgICAgICAgICAgICAgICAgICB8DQotICAgICstLS0tLSstLS0rLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KLSAgICB8IDAwMSB8IDAgfCAxIHwgUmVzZXJ2ZWQgICAgICAgICAgICAgICB8ICBSZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBSZXNlcnZlZCAgICAgICAgICAgICAgIHwNCi0gICAgKy0tLS0tKy0tLSstLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQotICAgIHwgMDAxIHwgMSB8IDAgfCBJTVBMRU1FTlRBVElPTiBERUZJTkVEIHwgIElNUExFTUVOVEFUSU9OIERFRklORUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIElNUExFTUVOVEFUSU9OIERFRklORUQgfA0KLSAgICArLS0tLS0rLS0tKy0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCi0gICAgfCAwMDEgfCAxIHwgMSB8IE5vcm1hbCAgICAgICAgICAgICAgICAgfCAgT3V0ZXIgYW5kIGlubmVyICAgd3JpdGUtYmFjazsgd3JpdGUgYW5kIHJlYWQgYWxsb2NhdGUgfCAgUyBiaXQgICAgICAgICAgICAgICAgICB8DQotICAgICstLS0tLSstLS0rLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KLSAgICB8IDAxMCB8IDAgfCAwIHwgRGV2aWNlICAgICAgICAgICAgICAgICB8ICBOb24tc2hhcmVkIGRldmljZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBOb3Qgc2hhcmVhYmxlICAgICAgICAgIHwNCi0gICAgKy0tLS0tKy0tLSstLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQotICAgIHwgMDEwIHwgMCB8IDEgfCBSZXNlcnZlZCAgICAgICAgICAgICAgIHwgIFJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFJlc2VydmVkICAgICAgICAgICAgICAgfA0KLSAgICArLS0tLS0rLS0tKy0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCi0gICAgfCAwMTAgfCAxIHwgWCB8IFJlc2VydmVkICAgICAgICAgICAgICAgfCAgUmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgUmVzZXJ2ZWQgICAgICAgICAgICAgICB8DQotICAgICstLS0tLSstLS0rLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KLSAgICB8IDAxMSB8IFggfCBYIHwgUmVzZXJ2ZWQgICAgICAgICAgICAgICB8ICBSZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBSZXNlcnZlZCAgICAgICAgICAgICAgIHwNCi0gICAgKy0tLS0tKy0tLSstLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQotICAgIHwgMUJCIHwgQSB8IEEgfCBOb3JtYWwgICAgICAgICAgICAgICAgIHwgQ2FjaGVkIG1lbW9yeSwgd2l0aCBBQSBhbmQgQkIgaW5kaWNhdGluZyB0aGUgaW5uZXIgYW5kIHwgIFJlc2VydmVkICAgICAgICAgICAgICAgfA0KLSAgICB8ICAgICB8ICAgfCAgIHwgICAgICAgICAgICAgICAgICAgICAgICB8IG91dGVyIGNhY2hlYWJpbGl0eSBydWxlcyB0aGF0IG11c3QgYmUgZXhwb3J0ZWQgb24gdGhlICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwNCi0gICAgfCAgICAgfCAgIHwgICB8ICAgICAgICAgICAgICAgICAgICAgICAgfCBidXMuIFNlZSB0aGUgdGFibGUgYmVsb3cgZm9yIHRoZSBjYWNoZWFiaWxpdHkgcG9saWN5ICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8DQotICAgIHwgICAgIHwgICB8ICAgfCAgICAgICAgICAgICAgICAgICAgICAgIHwgZW5jb2RpbmcuIG1lbW9yeSwgQkI9T3V0ZXIgcG9saWN5LCBBQT1Jbm5lciBwb2xpY3kuICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfA0KLSAgICArLS0tLS0rLS0tKy0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCisvKiBNUFUgc2V0dGluZ3MgdGhhdCBjYW4gYmUgb3ZlcnJpZGVuIGluIEZyZWVSVE9TQ29uZmlnLmguICovDQorI2lmbmRlZiBjb25maWdUT1RBTF9NUFVfUkVHSU9OUw0KKyAgICAvKiBEZWZpbmUgdG8gOCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gKi8NCisgICAgI2RlZmluZSBjb25maWdUT1RBTF9NUFVfUkVHSU9OUyAgICAoIDhVTCApDQorI2VuZGlmDQogDQotICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KLSAgICB8IEFBIG9yIEJCIHN1YmZpZWxkIG9mIHtURVgsQyxCfSBlbmNvZGluZyB8ICBDYWNoZWFiaWxpdHkgcG9saWN5ICAgICAgICAgICAgICAgICAgIHwNCi0gICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQotICAgIHwgMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIE5vbi1jYWNoZWFibGUgICAgICAgICAgICAgICAgICAgICAgICAgfA0KLSAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCi0gICAgfCAwMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgV3JpdGUtYmFjaywgd3JpdGUgYW5kICAgcmVhZCBhbGxvY2F0ZSB8DQotICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KLSAgICB8IDEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBXcml0ZS10aHJvdWdoLCBubyB3cml0ZSAgIGFsbG9jYXRlICAgIHwNCi0gICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQotICAgIHwgMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFdyaXRlLWJhY2ssIG5vIHdyaXRlICAgYWxsb2NhdGUgICAgICAgfA0KLSAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCi0gICAgKi8NCisvKg0KKyAqIFRoZSBURVgsIFNoYXJlYWJsZSAoUyksIENhY2hlYWJsZSAoQykgYW5kIEJ1ZmZlcmFibGUgKEIpIGJpdHMgZGVmaW5lIHRoZQ0KKyAqIG1lbW9yeSB0eXBlLCBhbmQgd2hlcmUgbmVjZXNzYXJ5IHRoZSBjYWNoZWFibGUgYW5kIHNoYXJlYWJsZSBwcm9wZXJ0aWVzDQorICogb2YgdGhlIG1lbW9yeSByZWdpb24uDQorICoNCisgKiBUaGUgVEVYLCBDLCBhbmQgQiBiaXRzIHRvZ2V0aGVyIGluZGljYXRlIHRoZSBtZW1vcnkgdHlwZSBvZiB0aGUgcmVnaW9uLA0KKyAqIGFuZDoNCisgKiAtIEZvciBOb3JtYWwgbWVtb3J5LCB0aGUgY2FjaGVhYmxlIHByb3BlcnRpZXMgb2YgdGhlIHJlZ2lvbi4NCisgKiAtIEZvciBEZXZpY2UgbWVtb3J5LCB3aGV0aGVyIHRoZSByZWdpb24gaXMgc2hhcmVhYmxlLg0KKyAqDQorICogRm9yIE5vcm1hbCBtZW1vcnkgcmVnaW9ucywgdGhlIFMgYml0IGluZGljYXRlcyB3aGV0aGVyIHRoZSByZWdpb24gaXMNCisgKiBzaGFyZWFibGUuIEZvciBTdHJvbmdseS1vcmRlcmVkIGFuZCBEZXZpY2UgbWVtb3J5LCB0aGUgUyBiaXQgaXMgaWdub3JlZC4NCisgKg0KKyAqIFNlZSB0aGUgZm9sbG93aW5nIHR3byB0YWJsZXMgZm9yIHNldHRpbmcgVEVYLCBTLCBDIGFuZCBCIGJpdHMgZm9yDQorICogdW5wcml2aWxlZ2VkIGZsYXNoLCBwcml2aWxlZ2VkIGZsYXNoIGFuZCBwcml2aWxlZ2VkIFJBTSByZWdpb25zLg0KKyAqDQorICstLS0tLSstLS0rLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KKyB8IFRFWCB8IEMgfCBCIHwgTWVtb3J5IHR5cGUgICAgICAgICAgICB8ICBEZXNjcmlwdGlvbiBvciBOb3JtYWwgcmVnaW9uIGNhY2hlYWJpbGl0eSAgICAgICAgICAgICB8ICBTaGFyZWFibGU/ICAgICAgICAgICAgIHwNCisgKy0tLS0tKy0tLSstLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQorIHwgMDAwIHwgMCB8IDAgfCBTdHJvbmdseS1vcmRlcmVkICAgICAgIHwgIFN0cm9uZ2x5IG9yZGVyZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFNoYXJlYWJsZSAgICAgICAgICAgICAgfA0KKyArLS0tLS0rLS0tKy0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCisgfCAwMDAgfCAwIHwgMSB8IERldmljZSAgICAgICAgICAgICAgICAgfCAgU2hhcmVkIGRldmljZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgU2hhcmVhYmxlICAgICAgICAgICAgICB8DQorICstLS0tLSstLS0rLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KKyB8IDAwMCB8IDEgfCAwIHwgTm9ybWFsICAgICAgICAgICAgICAgICB8ICBPdXRlciBhbmQgaW5uZXIgICB3cml0ZS10aHJvdWdoOyBubyB3cml0ZSBhbGxvY2F0ZSAgICB8ICBTIGJpdCAgICAgICAgICAgICAgICAgIHwNCisgKy0tLS0tKy0tLSstLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQorIHwgMDAwIHwgMSB8IDEgfCBOb3JtYWwgICAgICAgICAgICAgICAgIHwgIE91dGVyIGFuZCBpbm5lciAgIHdyaXRlLWJhY2s7IG5vIHdyaXRlIGFsbG9jYXRlICAgICAgIHwgIFMgYml0ICAgICAgICAgICAgICAgICAgfA0KKyArLS0tLS0rLS0tKy0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCisgfCAwMDEgfCAwIHwgMCB8IE5vcm1hbCAgICAgICAgICAgICAgICAgfCAgT3V0ZXIgYW5kIGlubmVyICAgTm9uLWNhY2hlYWJsZSAgICAgICAgICAgICAgICAgICAgICAgfCAgUyBiaXQgICAgICAgICAgICAgICAgICB8DQorICstLS0tLSstLS0rLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KKyB8IDAwMSB8IDAgfCAxIHwgUmVzZXJ2ZWQgICAgICAgICAgICAgICB8ICBSZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBSZXNlcnZlZCAgICAgICAgICAgICAgIHwNCisgKy0tLS0tKy0tLSstLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQorIHwgMDAxIHwgMSB8IDAgfCBJTVBMRU1FTlRBVElPTiBERUZJTkVEIHwgIElNUExFTUVOVEFUSU9OIERFRklORUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIElNUExFTUVOVEFUSU9OIERFRklORUQgfA0KKyArLS0tLS0rLS0tKy0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCisgfCAwMDEgfCAxIHwgMSB8IE5vcm1hbCAgICAgICAgICAgICAgICAgfCAgT3V0ZXIgYW5kIGlubmVyICAgd3JpdGUtYmFjazsgd3JpdGUgYW5kIHJlYWQgYWxsb2NhdGUgfCAgUyBiaXQgICAgICAgICAgICAgICAgICB8DQorICstLS0tLSstLS0rLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KKyB8IDAxMCB8IDAgfCAwIHwgRGV2aWNlICAgICAgICAgICAgICAgICB8ICBOb24tc2hhcmVkIGRldmljZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBOb3Qgc2hhcmVhYmxlICAgICAgICAgIHwNCisgKy0tLS0tKy0tLSstLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQorIHwgMDEwIHwgMCB8IDEgfCBSZXNlcnZlZCAgICAgICAgICAgICAgIHwgIFJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFJlc2VydmVkICAgICAgICAgICAgICAgfA0KKyArLS0tLS0rLS0tKy0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCisgfCAwMTAgfCAxIHwgWCB8IFJlc2VydmVkICAgICAgICAgICAgICAgfCAgUmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgUmVzZXJ2ZWQgICAgICAgICAgICAgICB8DQorICstLS0tLSstLS0rLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KKyB8IDAxMSB8IFggfCBYIHwgUmVzZXJ2ZWQgICAgICAgICAgICAgICB8ICBSZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBSZXNlcnZlZCAgICAgICAgICAgICAgIHwNCisgKy0tLS0tKy0tLSstLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQorIHwgMUJCIHwgQSB8IEEgfCBOb3JtYWwgICAgICAgICAgICAgICAgIHwgQ2FjaGVkIG1lbW9yeSwgd2l0aCBBQSBhbmQgQkIgaW5kaWNhdGluZyB0aGUgaW5uZXIgYW5kIHwgIFJlc2VydmVkICAgICAgICAgICAgICAgfA0KKyB8ICAgICB8ICAgfCAgIHwgICAgICAgICAgICAgICAgICAgICAgICB8IG91dGVyIGNhY2hlYWJpbGl0eSBydWxlcyB0aGF0IG11c3QgYmUgZXhwb3J0ZWQgb24gdGhlICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgfCAgICAgfCAgIHwgICB8ICAgICAgICAgICAgICAgICAgICAgICAgfCBidXMuIFNlZSB0aGUgdGFibGUgYmVsb3cgZm9yIHRoZSBjYWNoZWFiaWxpdHkgcG9saWN5ICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8DQorIHwgICAgIHwgICB8ICAgfCAgICAgICAgICAgICAgICAgICAgICAgIHwgZW5jb2RpbmcuIG1lbW9yeSwgQkI9T3V0ZXIgcG9saWN5LCBBQT1Jbm5lciBwb2xpY3kuICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyArLS0tLS0rLS0tKy0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCisgfA0KKyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCisgfCBBQSBvciBCQiBzdWJmaWVsZCBvZiB7VEVYLEMsQn0gZW5jb2RpbmcgfCAgQ2FjaGVhYmlsaXR5IHBvbGljeSAgICAgICAgICAgICAgICAgICB8DQorICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KKyB8IDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBOb24tY2FjaGVhYmxlICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQorIHwgMDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFdyaXRlLWJhY2ssIHdyaXRlIGFuZCAgIHJlYWQgYWxsb2NhdGUgfA0KKyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCisgfCAxMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgV3JpdGUtdGhyb3VnaCwgbm8gd3JpdGUgICBhbGxvY2F0ZSAgICB8DQorICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KKyB8IDExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBXcml0ZS1iYWNrLCBubyB3cml0ZSAgIGFsbG9jYXRlICAgICAgIHwNCisgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQorICovDQogDQotICAgIC8qIFRFWCwgU2hhcmVhYmxlIChTKSwgQ2FjaGVhYmxlIChDKSBhbmQgQnVmZmVyYWJsZSAoQikgYml0cyBmb3IgZmxhc2gNCi0gICAgICogcmVnaW9uLiAqLw0KLSAgICAjaWZuZGVmIGNvbmZpZ1RFWF9TX0NfQl9GTEFTSA0KLSAgICAgICAgLyogRGVmYXVsdCB0byBURVg9MDAwLCBTPTEsIEM9MSwgQj0xIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAqLw0KLSAgICAgICAgI2RlZmluZSBjb25maWdURVhfU19DX0JfRkxBU0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMHgwN1VMICkNCi0gICAgI2VuZGlmDQorLyogVEVYLCBTaGFyZWFibGUgKFMpLCBDYWNoZWFibGUgKEMpIGFuZCBCdWZmZXJhYmxlIChCKSBiaXRzIGZvciBmbGFzaA0KKyAqIHJlZ2lvbi4gKi8NCisjaWZuZGVmIGNvbmZpZ1RFWF9TX0NfQl9GTEFTSA0KKyAgICAvKiBEZWZhdWx0IHRvIFRFWD0wMDAsIFM9MSwgQz0xLCBCPTEgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuICovDQorICAgICNkZWZpbmUgY29uZmlnVEVYX1NfQ19CX0ZMQVNIICAgICggMHgwN1VMICkNCisjZW5kaWYNCiANCi0gICAgLyogVEVYLCBTaGFyZWFibGUgKFMpLCBDYWNoZWFibGUgKEMpIGFuZCBCdWZmZXJhYmxlIChCKSBiaXRzIGZvciBSQU0NCi0gICAgICogcmVnaW9uLiAqLw0KLSAgICAjaWZuZGVmIGNvbmZpZ1RFWF9TX0NfQl9TUkFNDQotICAgICAgICAvKiBEZWZhdWx0IHRvIFRFWD0wMDAsIFM9MSwgQz0xLCBCPTEgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuICovDQotICAgICAgICAjZGVmaW5lIGNvbmZpZ1RFWF9TX0NfQl9TUkFNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAweDA3VUwgKQ0KLSAgICAjZW5kaWYNCisvKiBURVgsIFNoYXJlYWJsZSAoUyksIENhY2hlYWJsZSAoQykgYW5kIEJ1ZmZlcmFibGUgKEIpIGJpdHMgZm9yIFJBTQ0KKyAqIHJlZ2lvbi4gKi8NCisjaWZuZGVmIGNvbmZpZ1RFWF9TX0NfQl9TUkFNDQorICAgIC8qIERlZmF1bHQgdG8gVEVYPTAwMCwgUz0xLCBDPTEsIEI9MSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gKi8NCisgICAgI2RlZmluZSBjb25maWdURVhfU19DX0JfU1JBTSAgICAgICAgICAoIDB4MDdVTCApDQorI2VuZGlmDQogDQotICAgICNkZWZpbmUgcG9ydFVOUFJJVklMRUdFRF9GTEFTSF9SRUdJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAwVUwgKQ0KLSAgICAjZGVmaW5lIHBvcnRQUklWSUxFR0VEX0ZMQVNIX1JFR0lPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMVVMICkNCi0gICAgI2RlZmluZSBwb3J0UFJJVklMRUdFRF9SQU1fUkVHSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDJVTCApDQotICAgICNkZWZpbmUgcG9ydEdFTkVSQUxfUEVSSVBIRVJBTFNfUkVHSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAzVUwgKQ0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19SRUdJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggNFVMICkNCi0gICAgI2RlZmluZSBwb3J0RklSU1RfQ09ORklHVVJBQkxFX1JFR0lPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDVVTCApDQotICAgICNkZWZpbmUgcG9ydFRPVEFMX05VTV9SRUdJT05TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBjb25maWdUT1RBTF9NUFVfUkVHSU9OUyApDQotICAgICNkZWZpbmUgcG9ydE5VTV9DT05GSUdVUkFCTEVfUkVHSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBwb3J0VE9UQUxfTlVNX1JFR0lPTlMgLSBwb3J0RklSU1RfQ09ORklHVVJBQkxFX1JFR0lPTiApDQotICAgICNkZWZpbmUgcG9ydExBU1RfQ09ORklHVVJBQkxFX1JFR0lPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBwb3J0VE9UQUxfTlVNX1JFR0lPTlMgLSAxVUwgKQ0KKyNkZWZpbmUgcG9ydFVOUFJJVklMRUdFRF9GTEFTSF9SRUdJT04gICAgICggMFVMICkNCisjZGVmaW5lIHBvcnRQUklWSUxFR0VEX0ZMQVNIX1JFR0lPTiAgICAgICAoIDFVTCApDQorI2RlZmluZSBwb3J0UFJJVklMRUdFRF9SQU1fUkVHSU9OICAgICAgICAgKCAyVUwgKQ0KKyNkZWZpbmUgcG9ydEdFTkVSQUxfUEVSSVBIRVJBTFNfUkVHSU9OICAgICggM1VMICkNCisjZGVmaW5lIHBvcnRTVEFDS19SRUdJT04gICAgICAgICAgICAgICAgICAoIDRVTCApDQorI2RlZmluZSBwb3J0RklSU1RfQ09ORklHVVJBQkxFX1JFR0lPTiAgICAgKCA1VUwgKQ0KKyNkZWZpbmUgcG9ydFRPVEFMX05VTV9SRUdJT05TICAgICAgICAgICAgICggY29uZmlnVE9UQUxfTVBVX1JFR0lPTlMgKQ0KKyNkZWZpbmUgcG9ydE5VTV9DT05GSUdVUkFCTEVfUkVHSU9OUyAgICAgICggcG9ydFRPVEFMX05VTV9SRUdJT05TIC0gcG9ydEZJUlNUX0NPTkZJR1VSQUJMRV9SRUdJT04gKQ0KKyNkZWZpbmUgcG9ydExBU1RfQ09ORklHVVJBQkxFX1JFR0lPTiAgICAgICggcG9ydFRPVEFMX05VTV9SRUdJT05TIC0gMVVMICkNCiANCi0gICAgI2RlZmluZSBwb3J0U1dJVENIX1RPX1VTRVJfTU9ERSgpICAgIF9fYXNtIHZvbGF0aWxlICggIiBtcnMgcjAsIGNvbnRyb2wgXG4gb3JyIHIwLCByMCwgIzEgXG4gbXNyIGNvbnRyb2wsIHIwICIgOjo6ICJyMCIsICJtZW1vcnkiICkNCisjZGVmaW5lIHBvcnRTV0lUQ0hfVE9fVVNFUl9NT0RFKCkgICAgX19hc20gdm9sYXRpbGUgKCAiIG1ycyByMCwgY29udHJvbCBcbiBvcnIgcjAsIHIwLCAjMSBcbiBtc3IgY29udHJvbCwgcjAgIiA6OjogInIwIiwgIm1lbW9yeSIgKQ0KIA0KLSAgICB0eXBlZGVmIHN0cnVjdCBNUFVfUkVHSU9OX1JFR0lTVEVSUw0KLSAgICB7DQotICAgICAgICB1aW50MzJfdCB1bFJlZ2lvbkJhc2VBZGRyZXNzOw0KLSAgICAgICAgdWludDMyX3QgdWxSZWdpb25BdHRyaWJ1dGU7DQotICAgIH0geE1QVV9SRUdJT05fUkVHSVNURVJTOw0KK3R5cGVkZWYgc3RydWN0IE1QVV9SRUdJT05fUkVHSVNURVJTDQorew0KKyAgICB1aW50MzJfdCB1bFJlZ2lvbkJhc2VBZGRyZXNzOw0KKyAgICB1aW50MzJfdCB1bFJlZ2lvbkF0dHJpYnV0ZTsNCit9IHhNUFVfUkVHSU9OX1JFR0lTVEVSUzsNCiANCiAvKiBQbHVzIDEgdG8gY3JlYXRlIHNwYWNlIGZvciB0aGUgc3RhY2sgcmVnaW9uLiAqLw0KLSAgICB0eXBlZGVmIHN0cnVjdCBNUFVfU0VUVElOR1MNCi0gICAgew0KLSAgICAgICAgeE1QVV9SRUdJT05fUkVHSVNURVJTIHhSZWdpb25bIHBvcnRUT1RBTF9OVU1fUkVHSU9OUyBdOw0KLSAgICB9IHhNUFVfU0VUVElOR1M7DQordHlwZWRlZiBzdHJ1Y3QgTVBVX1NFVFRJTkdTDQorew0KKyAgICB4TVBVX1JFR0lPTl9SRUdJU1RFUlMgeFJlZ2lvblsgcG9ydFRPVEFMX05VTV9SRUdJT05TIF07DQorfSB4TVBVX1NFVFRJTkdTOw0KIA0KIC8qIEFyY2hpdGVjdHVyZSBzcGVjaWZpY3MuICovDQotICAgICNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSCAgICAgICggLTEgKQ0KLSAgICAjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUyAgICAoICggVGlja1R5cGVfdCApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KLSAgICAjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVCAgICA4DQorI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RIICAgICAgKCAtMSApDQorI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMgICAgKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCisjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVCAgICA4DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogU1ZDIG51bWJlcnMgZm9yIHZhcmlvdXMgc2VydmljZXMuICovDQotICAgICNkZWZpbmUgcG9ydFNWQ19TVEFSVF9TQ0hFRFVMRVIgICAgMA0KLSAgICAjZGVmaW5lIHBvcnRTVkNfWUlFTEQgICAgICAgICAgICAgIDENCi0gICAgI2RlZmluZSBwb3J0U1ZDX1JBSVNFX1BSSVZJTEVHRSAgICAyDQorI2RlZmluZSBwb3J0U1ZDX1NUQVJUX1NDSEVEVUxFUiAgICAwDQorI2RlZmluZSBwb3J0U1ZDX1lJRUxEICAgICAgICAgICAgICAxDQorI2RlZmluZSBwb3J0U1ZDX1JBSVNFX1BSSVZJTEVHRSAgICAyDQogDQogLyogU2NoZWR1bGVyIHV0aWxpdGllcy4gKi8NCiANCi0gICAgI2RlZmluZSBwb3J0WUlFTEQoKSAgICBfX2FzbSB2b2xhdGlsZSAoICIJU1ZDCSUwCVxuIjo6ImkiICggcG9ydFNWQ19ZSUVMRCApIDogIm1lbW9yeSIgKQ0KLSAgICAjZGVmaW5lIHBvcnRZSUVMRF9XSVRISU5fQVBJKCkgICAgICAgICAgICAgICAgICAgICAgXA0KKyNkZWZpbmUgcG9ydFlJRUxEKCkgICAgX19hc20gdm9sYXRpbGUgKCAiCVNWQwklMAlcbiI6OiJpIiAoIHBvcnRTVkNfWUlFTEQgKSA6ICJtZW1vcnkiICkNCisjZGVmaW5lIHBvcnRZSUVMRF9XSVRISU5fQVBJKCkgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCiAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCiAgICAgICAgIC8qIFNldCBhIFBlbmRTViB0byByZXF1ZXN0IGEgY29udGV4dCBzd2l0Y2guICovIFwNCiAgICAgICAgIHBvcnROVklDX0lOVF9DVFJMX1JFRyA9IHBvcnROVklDX1BFTkRTVlNFVF9CSVQ7IFwNCkBAIC0yMTYsMTM3ICsyMTksMTM5IEBACiAgICAgICAgIF9fSVNCKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCiAgICAgfQ0KIA0KLSAgICAjZGVmaW5lIHBvcnROVklDX0lOVF9DVFJMX1JFRyAgICAgKCAqKCAoIHZvbGF0aWxlIHVpbnQzMl90ICogKSAweGUwMDBlZDA0ICkgKQ0KLSAgICAjZGVmaW5lIHBvcnROVklDX1BFTkRTVlNFVF9CSVQgICAgKCAxVUwgPDwgMjhVTCApDQotICAgICNkZWZpbmUgcG9ydEVORF9TV0lUQ0hJTkdfSVNSKCB4U3dpdGNoUmVxdWlyZWQgKSAgICBpZiggeFN3aXRjaFJlcXVpcmVkICE9IHBkRkFMU0UgKSBwb3J0WUlFTERfV0lUSElOX0FQSSgpDQotICAgICNkZWZpbmUgcG9ydFlJRUxEX0ZST01fSVNSKCB4ICkgICAgICAgICAgICAgICAgICAgICBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHggKQ0KKyNkZWZpbmUgcG9ydE5WSUNfSU5UX0NUUkxfUkVHICAgICAoICooICggdm9sYXRpbGUgdWludDMyX3QgKiApIDB4ZTAwMGVkMDQgKSApDQorI2RlZmluZSBwb3J0TlZJQ19QRU5EU1ZTRVRfQklUICAgICggMVVMIDw8IDI4VUwgKQ0KKyNkZWZpbmUgcG9ydEVORF9TV0lUQ0hJTkdfSVNSKCB4U3dpdGNoUmVxdWlyZWQgKSAgICBpZiggeFN3aXRjaFJlcXVpcmVkICE9IHBkRkFMU0UgKSBwb3J0WUlFTERfV0lUSElOX0FQSSgpDQorI2RlZmluZSBwb3J0WUlFTERfRlJPTV9JU1IoIHggKSAgICAgICAgICAgICAgICAgICAgIHBvcnRFTkRfU1dJVENISU5HX0lTUiggeCApDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogQXJjaGl0ZWN0dXJlIHNwZWNpZmljIG9wdGltaXNhdGlvbnMuICovDQotICAgICNpZm5kZWYgY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9ODQotICAgICAgICAjZGVmaW5lIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiAgICAxDQotICAgICNlbmRpZg0KKyNpZm5kZWYgY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9ODQorICAgICNkZWZpbmUgY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OICAgIDENCisjZW5kaWYNCiANCi0gICAgI2lmICggY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OID09IDEgKQ0KKyNpZiAoIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiA9PSAxICkNCiANCiAvKiBDaGVjayB0aGUgY29uZmlndXJhdGlvbi4gKi8NCi0gICAgICAgICNpZiAoIGNvbmZpZ01BWF9QUklPUklUSUVTID4gMzIgKQ0KLSAgICAgICAgICAgICNlcnJvciBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gY2FuIG9ubHkgYmUgc2V0IHRvIDEgd2hlbiBjb25maWdNQVhfUFJJT1JJVElFUyBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMzIuICBJdCBpcyB2ZXJ5IHJhcmUgdGhhdCBhIHN5c3RlbSByZXF1aXJlcyBtb3JlIHRoYW4gMTAgdG8gMTUgZGlmZmVyZW5jZSBwcmlvcml0aWVzIGFzIHRhc2tzIHRoYXQgc2hhcmUgYSBwcmlvcml0eSB3aWxsIHRpbWUgc2xpY2UuDQotICAgICAgICAjZW5kaWYNCisgICAgI2lmICggY29uZmlnTUFYX1BSSU9SSVRJRVMgPiAzMiApDQorICAgICAgICAjZXJyb3IgY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OIGNhbiBvbmx5IGJlIHNldCB0byAxIHdoZW4gY29uZmlnTUFYX1BSSU9SSVRJRVMgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDMyLiAgSXQgaXMgdmVyeSByYXJlIHRoYXQgYSBzeXN0ZW0gcmVxdWlyZXMgbW9yZSB0aGFuIDEwIHRvIDE1IGRpZmZlcmVuY2UgcHJpb3JpdGllcyBhcyB0YXNrcyB0aGF0IHNoYXJlIGEgcHJpb3JpdHkgd2lsbCB0aW1lIHNsaWNlLg0KKyAgICAjZW5kaWYNCiANCiAvKiBTdG9yZS9jbGVhciB0aGUgcmVhZHkgcHJpb3JpdGllcyBpbiBhIGJpdCBtYXAuICovDQotICAgICAgICAjZGVmaW5lIHBvcnRSRUNPUkRfUkVBRFlfUFJJT1JJVFkoIHV4UHJpb3JpdHksIHV4UmVhZHlQcmlvcml0aWVzICkgICAgKCB1eFJlYWR5UHJpb3JpdGllcyApIHw9ICggMVVMIDw8ICggdXhQcmlvcml0eSApICkNCi0gICAgICAgICNkZWZpbmUgcG9ydFJFU0VUX1JFQURZX1BSSU9SSVRZKCB1eFByaW9yaXR5LCB1eFJlYWR5UHJpb3JpdGllcyApICAgICAoIHV4UmVhZHlQcmlvcml0aWVzICkgJj0gfiggMVVMIDw8ICggdXhQcmlvcml0eSApICkNCisgICAgI2RlZmluZSBwb3J0UkVDT1JEX1JFQURZX1BSSU9SSVRZKCB1eFByaW9yaXR5LCB1eFJlYWR5UHJpb3JpdGllcyApICAgICggdXhSZWFkeVByaW9yaXRpZXMgKSB8PSAoIDFVTCA8PCAoIHV4UHJpb3JpdHkgKSApDQorICAgICNkZWZpbmUgcG9ydFJFU0VUX1JFQURZX1BSSU9SSVRZKCB1eFByaW9yaXR5LCB1eFJlYWR5UHJpb3JpdGllcyApICAgICAoIHV4UmVhZHlQcmlvcml0aWVzICkgJj0gfiggMVVMIDw8ICggdXhQcmlvcml0eSApICkNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0gICAgICAgICNkZWZpbmUgcG9ydEdFVF9ISUdIRVNUX1BSSU9SSVRZKCB1eFRvcFByaW9yaXR5LCB1eFJlYWR5UHJpb3JpdGllcyApICAgIHV4VG9wUHJpb3JpdHkgPSAoIDMxVUwgLSAoICggdWludDMyX3QgKSBfX0NMWiggKCB1eFJlYWR5UHJpb3JpdGllcyApICkgKSApDQorICAgICNkZWZpbmUgcG9ydEdFVF9ISUdIRVNUX1BSSU9SSVRZKCB1eFRvcFByaW9yaXR5LCB1eFJlYWR5UHJpb3JpdGllcyApICAgIHV4VG9wUHJpb3JpdHkgPSAoIDMxVUwgLSAoICggdWludDMyX3QgKSBfX0NMWiggKCB1eFJlYWR5UHJpb3JpdGllcyApICkgKSApDQogDQotICAgICNlbmRpZiAvKiBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gKi8NCisjZW5kaWYgLyogY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OICovDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogQ3JpdGljYWwgc2VjdGlvbiBtYW5hZ2VtZW50LiAqLw0KLSAgICBleHRlcm4gdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKTsNCi0gICAgZXh0ZXJuIHZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApOw0KIA0KLSAgICAjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQogICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KICAgICAgICAgX19zZXRfQkFTRVBSSSggY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICk7IFwNCiAgICAgICAgIF9fRFNCKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQogICAgICAgICBfX0lTQigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KICAgICB9DQogDQotICAgICNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkgICAgICAgICAgICAgICAgICAgX19zZXRfQkFTRVBSSSggMCApDQotICAgICNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgICAgICAgICAgICAgICAgICAgICAgdlBvcnRFbnRlckNyaXRpY2FsKCkNCi0gICAgI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpICAgICAgICAgICAgICAgICAgICAgICB2UG9ydEV4aXRDcml0aWNhbCgpDQotICAgICNkZWZpbmUgcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpICAgICAgICAgX19nZXRfQkFTRVBSSSgpOyBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkNCi0gICAgI2RlZmluZSBwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoIHggKSAgICBfX3NldF9CQVNFUFJJKCB4ICkNCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpICAgICAgICAgICAgICAgICAgIF9fc2V0X0JBU0VQUkkoIDAgKQ0KKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgICAgICAgICAgICAgICAgICAgICAgdlBvcnRFbnRlckNyaXRpY2FsKCkNCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkgICAgICAgICAgICAgICAgICAgICAgIHZQb3J0RXhpdENyaXRpY2FsKCkNCisjZGVmaW5lIHBvcnRTRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKSAgICAgICAgIF9fZ2V0X0JBU0VQUkkoKTsgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpDQorI2RlZmluZSBwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoIHggKSAgICBfX3NldF9CQVNFUFJJKCB4ICkNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBUYXNrIGZ1bmN0aW9uIG1hY3JvcyBhcyBkZXNjcmliZWQgb24gdGhlIEZyZWVSVE9TLm9yZyBXRUIgc2l0ZS4gIFRoZXNlIGFyZQ0KICAqIG5vdCBuZWNlc3NhcnkgZm9yIHRvIHVzZSB0aGlzIHBvcnQuICBUaGV5IGFyZSBkZWZpbmVkIHNvIHRoZSBjb21tb24gZGVtbyBmaWxlcw0KICAqICh3aGljaCBidWlsZCB3aXRoIGFsbCB0aGUgcG9ydHMpIHdpbGwgYnVpbGQuICovDQotICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KLSAgICAjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgICAgICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgICAgICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0gICAgI2lmZGVmIGNvbmZpZ0FTU0VSVA0KLSAgICAgICAgdm9pZCB2UG9ydFZhbGlkYXRlSW50ZXJydXB0UHJpb3JpdHkoIHZvaWQgKTsNCi0gICAgICAgICNkZWZpbmUgcG9ydEFTU0VSVF9JRl9JTlRFUlJVUFRfUFJJT1JJVFlfSU5WQUxJRCgpICAgIHZQb3J0VmFsaWRhdGVJbnRlcnJ1cHRQcmlvcml0eSgpDQotICAgICNlbmRpZg0KKyNpZmRlZiBjb25maWdBU1NFUlQNCisgICAgdm9pZCB2UG9ydFZhbGlkYXRlSW50ZXJydXB0UHJpb3JpdHkoIHZvaWQgKTsNCisgICAgI2RlZmluZSBwb3J0QVNTRVJUX0lGX0lOVEVSUlVQVF9QUklPUklUWV9JTlZBTElEKCkgICAgdlBvcnRWYWxpZGF0ZUludGVycnVwdFByaW9yaXR5KCkNCisjZW5kaWYNCiANCiAvKiBwb3J0Tk9QKCkgaXMgbm90IHJlcXVpcmVkIGJ5IHRoaXMgcG9ydC4gKi8NCi0gICAgI2RlZmluZSBwb3J0Tk9QKCkNCisjZGVmaW5lIHBvcnROT1AoKQ0KIA0KLSAgICAjZGVmaW5lIHBvcnRJTkxJTkUgICAgICAgICAgICAgIF9faW5saW5lDQorI2RlZmluZSBwb3J0SU5MSU5FICAgICAgICAgICAgICBfX2lubGluZQ0KIA0KLSAgICAjaWZuZGVmIHBvcnRGT1JDRV9JTkxJTkUNCi0gICAgICAgICNkZWZpbmUgcG9ydEZPUkNFX0lOTElORSAgICBpbmxpbmUgX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKQ0KLSAgICAjZW5kaWYNCisjaWZuZGVmIHBvcnRGT1JDRV9JTkxJTkUNCisgICAgI2RlZmluZSBwb3J0Rk9SQ0VfSU5MSU5FICAgIGlubGluZSBfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApDQorI2VuZGlmDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQotICAgIHBvcnRGT1JDRV9JTkxJTkUgc3RhdGljIEJhc2VUeXBlX3QgeFBvcnRJc0luc2lkZUludGVycnVwdCggdm9pZCApDQorcG9ydEZPUkNFX0lOTElORSBzdGF0aWMgQmFzZVR5cGVfdCB4UG9ydElzSW5zaWRlSW50ZXJydXB0KCB2b2lkICkNCit7DQorICAgIHVpbnQzMl90IHVsQ3VycmVudEludGVycnVwdDsNCisgICAgQmFzZVR5cGVfdCB4UmV0dXJuOw0KKw0KKyAgICAvKiBPYnRhaW4gdGhlIG51bWJlciBvZiB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBpbnRlcnJ1cHQuICovDQorICAgIF9fYXNtIHZvbGF0aWxlICggIm1ycyAlMCwgaXBzciIgOiAiPXIiICggdWxDdXJyZW50SW50ZXJydXB0ICk6OiJtZW1vcnkiICk7DQorDQorICAgIGlmKCB1bEN1cnJlbnRJbnRlcnJ1cHQgPT0gMCApDQogICAgIHsNCi0gICAgICAgIHVpbnQzMl90IHVsQ3VycmVudEludGVycnVwdDsNCi0gICAgICAgIEJhc2VUeXBlX3QgeFJldHVybjsNCi0NCi0gICAgICAgIC8qIE9idGFpbiB0aGUgbnVtYmVyIG9mIHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nIGludGVycnVwdC4gKi8NCi0gICAgICAgIF9fYXNtIHZvbGF0aWxlICggIm1ycyAlMCwgaXBzciIgOiAiPXIiICggdWxDdXJyZW50SW50ZXJydXB0ICk6OiJtZW1vcnkiICk7DQotDQotICAgICAgICBpZiggdWxDdXJyZW50SW50ZXJydXB0ID09IDAgKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHhSZXR1cm4gPSBwZEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZWxzZQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHhSZXR1cm4gPSBwZFRSVUU7DQotICAgICAgICB9DQotDQotICAgICAgICByZXR1cm4geFJldHVybjsNCisgICAgICAgIHhSZXR1cm4gPSBwZEZBTFNFOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgeFJldHVybiA9IHBkVFJVRTsNCiAgICAgfQ0KIA0KKyAgICByZXR1cm4geFJldHVybjsNCit9DQorDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQotICAgIGV4dGVybiBCYXNlVHlwZV90IHhJc1ByaXZpbGVnZWQoIHZvaWQgKTsNCi0gICAgZXh0ZXJuIHZvaWQgdlJlc2V0UHJpdmlsZWdlKCB2b2lkICk7DQorZXh0ZXJuIEJhc2VUeXBlX3QgeElzUHJpdmlsZWdlZCggdm9pZCApOw0KK2V4dGVybiB2b2lkIHZSZXNldFByaXZpbGVnZSggdm9pZCApOw0KIA0KIC8qKg0KICAqIEBicmllZiBDaGVja3Mgd2hldGhlciBvciBub3QgdGhlIHByb2Nlc3NvciBpcyBwcml2aWxlZ2VkLg0KICAqDQogICogQHJldHVybiAxIGlmIHRoZSBwcm9jZXNzb3IgaXMgYWxyZWFkeSBwcml2aWxlZ2VkLCAwIG90aGVyd2lzZS4NCiAgKi8NCi0gICAgI2RlZmluZSBwb3J0SVNfUFJJVklMRUdFRCgpICAgICAgeElzUHJpdmlsZWdlZCgpDQorI2RlZmluZSBwb3J0SVNfUFJJVklMRUdFRCgpICAgICAgeElzUHJpdmlsZWdlZCgpDQogDQogLyoqDQogICogQGJyaWVmIFJhaXNlIGFuIFNWQyByZXF1ZXN0IHRvIHJhaXNlIHByaXZpbGVnZS4NCiAgKi8NCi0gICAgI2RlZmluZSBwb3J0UkFJU0VfUFJJVklMRUdFKCkgICAgX19hc20gdm9sYXRpbGUgKCAic3ZjICUwIFxuIiA6OiJpIiAoIHBvcnRTVkNfUkFJU0VfUFJJVklMRUdFICkgOiAibWVtb3J5IiApOw0KKyNkZWZpbmUgcG9ydFJBSVNFX1BSSVZJTEVHRSgpICAgIF9fYXNtIHZvbGF0aWxlICggInN2YyAlMCBcbiIgOjoiaSIgKCBwb3J0U1ZDX1JBSVNFX1BSSVZJTEVHRSApIDogIm1lbW9yeSIgKTsNCiANCiAvKioNCiAgKiBAYnJpZWYgTG93ZXJzIHRoZSBwcml2aWxlZ2UgbGV2ZWwgYnkgc2V0dGluZyB0aGUgYml0IDAgb2YgdGhlIENPTlRST0wNCiAgKiByZWdpc3Rlci4NCiAgKi8NCi0gICAgI2RlZmluZSBwb3J0UkVTRVRfUFJJVklMRUdFKCkgICAgdlJlc2V0UHJpdmlsZWdlKCkNCisjZGVmaW5lIHBvcnRSRVNFVF9QUklWSUxFR0UoKSAgICB2UmVzZXRQcml2aWxlZ2UoKQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KLSAgICAjaWZuZGVmIGNvbmZpZ0VORk9SQ0VfU1lTVEVNX0NBTExTX0ZST01fS0VSTkVMX09OTFkNCi0gICAgICAgICN3YXJuaW5nICJjb25maWdFTkZPUkNFX1NZU1RFTV9DQUxMU19GUk9NX0tFUk5FTF9PTkxZIGlzIG5vdCBkZWZpbmVkLiBXZSByZWNvbW1lbmQgZGVmaW5pbmcgaXQgdG8gMSBpbiBGcmVlUlRPU0NvbmZpZy5oIGZvciBiZXR0ZXIgc2VjdXJpdHkuIGh0dHBzOiAvKnd3dy5mcmVlcnRvcy5vcmcvRnJlZVJUT1MtVjEwLjMueC5odG1sIiAqLw0KLSAgICAgICAgI2RlZmluZSBjb25maWdFTkZPUkNFX1NZU1RFTV9DQUxMU19GUk9NX0tFUk5FTF9PTkxZICAgIDANCi0gICAgI2VuZGlmDQorI2lmbmRlZiBjb25maWdFTkZPUkNFX1NZU1RFTV9DQUxMU19GUk9NX0tFUk5FTF9PTkxZDQorICAgICN3YXJuaW5nICJjb25maWdFTkZPUkNFX1NZU1RFTV9DQUxMU19GUk9NX0tFUk5FTF9PTkxZIGlzIG5vdCBkZWZpbmVkLiBXZSByZWNvbW1lbmQgZGVmaW5pbmcgaXQgdG8gMSBpbiBGcmVlUlRPU0NvbmZpZy5oIGZvciBiZXR0ZXIgc2VjdXJpdHkuIGh0dHBzOiAvKnd3dy5mcmVlcnRvcy5vcmcvRnJlZVJUT1MtVjEwLjMueC5odG1sIiAqLw0KKyAgICAjZGVmaW5lIGNvbmZpZ0VORk9SQ0VfU1lTVEVNX0NBTExTX0ZST01fS0VSTkVMX09OTFkgICAgMA0KKyNlbmRpZg0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFN1cHByZXNzIHdhcm5pbmdzIHRoYXQgYXJlIGdlbmVyYXRlZCBieSB0aGUgSUFSIHRvb2xzLCBidXQgY2Fubm90IGJlIGZpeGVkIGluDQogICogdGhlIHNvdXJjZSBjb2RlIGJlY2F1c2UgdG8gZG8gc28gd291bGQgY2F1c2Ugb3RoZXIgY29tcGlsZXJzIHRvIGdlbmVyYXRlDQogICogd2FybmluZ3MuICovDQotICAgICNwcmFnbWEgZGlhZ19zdXBwcmVzcz1QZTE5MQ0KLSAgICAjcHJhZ21hIGRpYWdfc3VwcHJlc3M9UGEwODINCi0gICAgI3ByYWdtYSBkaWFnX3N1cHByZXNzPUJlMDA2DQorI3ByYWdtYSBkaWFnX3N1cHByZXNzPVBlMTkxDQorI3ByYWdtYSBkaWFnX3N1cHByZXNzPVBhMDgyDQorI3ByYWdtYSBkaWFnX3N1cHByZXNzPUJlMDA2DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgfQ0KLSAgICAjZW5kaWYNCisvKiAqSU5ERU5ULU9GRiogKi8NCisjaWZkZWYgX19jcGx1c3BsdXMNCisgICAgfQ0KKyNlbmRpZg0KKy8qICpJTkRFTlQtT04qICovDQogDQogI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvSUFSL0FSTV9DUnhfTm9fR0lDL3BvcnQuYyBiL3BvcnRhYmxlL0lBUi9BUk1fQ1J4X05vX0dJQy9wb3J0LmMKaW5kZXggZDQzNmZjNS4uZTg0NzczYiAxMDA2NDQKLS0tIGEvcG9ydGFibGUvSUFSL0FSTV9DUnhfTm9fR0lDL3BvcnQuYworKysgYi9wb3J0YWJsZS9JQVIvQVJNX0NSeF9Ob19HSUMvcG9ydC5jCkBAIC0zMyw1MCArMzMsNTAgQEAKICNpbmNsdWRlICJ0YXNrLmgiDQogDQogI2lmIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiA9PSAxDQotICAgIC8qIENoZWNrIHRoZSBjb25maWd1cmF0aW9uLiAqLw0KLSAgICAjaWYgKCBjb25maWdNQVhfUFJJT1JJVElFUyA+IDMyICkNCi0gICAgICAgICNlcnJvciBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gY2FuIG9ubHkgYmUgc2V0IHRvIDEgd2hlbiBjb25maWdNQVhfUFJJT1JJVElFUyBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMzIuICBJdCBpcyB2ZXJ5IHJhcmUgdGhhdCBhIHN5c3RlbSByZXF1aXJlcyBtb3JlIHRoYW4gMTAgdG8gMTUgZGlmZmVyZW5jZSBwcmlvcml0aWVzIGFzIHRhc2tzIHRoYXQgc2hhcmUgYSBwcmlvcml0eSB3aWxsIHRpbWUgc2xpY2UuDQotICAgICNlbmRpZg0KKwkvKiBDaGVjayB0aGUgY29uZmlndXJhdGlvbi4gKi8NCisJI2lmKCBjb25maWdNQVhfUFJJT1JJVElFUyA+IDMyICkNCisJCSNlcnJvciBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gY2FuIG9ubHkgYmUgc2V0IHRvIDEgd2hlbiBjb25maWdNQVhfUFJJT1JJVElFUyBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMzIuICBJdCBpcyB2ZXJ5IHJhcmUgdGhhdCBhIHN5c3RlbSByZXF1aXJlcyBtb3JlIHRoYW4gMTAgdG8gMTUgZGlmZmVyZW5jZSBwcmlvcml0aWVzIGFzIHRhc2tzIHRoYXQgc2hhcmUgYSBwcmlvcml0eSB3aWxsIHRpbWUgc2xpY2UuDQorCSNlbmRpZg0KICNlbmRpZiAvKiBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gKi8NCiANCiAjaWZuZGVmIGNvbmZpZ1NFVFVQX1RJQ0tfSU5URVJSVVBUDQotICAgICNlcnJvciBjb25maWdTRVRVUF9USUNLX0lOVEVSUlVQVCgpIG11c3QgYmUgZGVmaW5lZCBpbiBGcmVlUlRPU0NvbmZpZy5oIHRvIGNhbGwgdGhlIGZ1bmN0aW9uIHRoYXQgc2V0cyB1cCB0aGUgdGljayBpbnRlcnJ1cHQuDQorCSNlcnJvciBjb25maWdTRVRVUF9USUNLX0lOVEVSUlVQVCgpIG11c3QgYmUgZGVmaW5lZCBpbiBGcmVlUlRPU0NvbmZpZy5oIHRvIGNhbGwgdGhlIGZ1bmN0aW9uIHRoYXQgc2V0cyB1cCB0aGUgdGljayBpbnRlcnJ1cHQuDQogI2VuZGlmDQogDQogI2lmbmRlZiBjb25maWdDTEVBUl9USUNLX0lOVEVSUlVQVA0KLSAgICAjZXJyb3IgY29uZmlnQ0xFQVJfVElDS19JTlRFUlJVUFQgbXVzdCBiZSBkZWZpbmVkIGluIEZyZWVSVE9TQ29uZmlnLmggdG8gY2xlYXIgd2hpY2ggZXZlciBpbnRlcnJ1cHQgd2FzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRpY2sgaW50ZXJydXB0Lg0KKwkjZXJyb3IgY29uZmlnQ0xFQVJfVElDS19JTlRFUlJVUFQgbXVzdCBiZSBkZWZpbmVkIGluIEZyZWVSVE9TQ29uZmlnLmggdG8gY2xlYXIgd2hpY2ggZXZlciBpbnRlcnJ1cHQgd2FzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRpY2sgaW50ZXJydXB0Lg0KICNlbmRpZg0KIA0KIC8qIEEgY3JpdGljYWwgc2VjdGlvbiBpcyBleGl0ZWQgd2hlbiB0aGUgY3JpdGljYWwgc2VjdGlvbiBuZXN0aW5nIGNvdW50IHJlYWNoZXMNCi0gKiB0aGlzIHZhbHVlLiAqLw0KLSNkZWZpbmUgcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgICAgICAgICAgKCAoIHVpbnQzMl90ICkgMCApDQordGhpcyB2YWx1ZS4gKi8NCisjZGVmaW5lIHBvcnROT19DUklUSUNBTF9ORVNUSU5HCQkJKCAoIHVpbnQzMl90ICkgMCApDQogDQogLyogVGFza3MgYXJlIG5vdCBjcmVhdGVkIHdpdGggYSBmbG9hdGluZyBwb2ludCBjb250ZXh0LCBidXQgY2FuIGJlIGdpdmVuIGENCi0gKiBmbG9hdGluZyBwb2ludCBjb250ZXh0IGFmdGVyIHRoZXkgaGF2ZSBiZWVuIGNyZWF0ZWQuICBBIHZhcmlhYmxlIGlzIHN0b3JlZCBhcw0KLSAqIHBhcnQgb2YgdGhlIHRhc2tzIGNvbnRleHQgdGhhdCBob2xkcyBwb3J0Tk9fRkxPQVRJTkdfUE9JTlRfQ09OVEVYVCBpZiB0aGUgdGFzaw0KLSAqIGRvZXMgbm90IGhhdmUgYW4gRlBVIGNvbnRleHQsIG9yIGFueSBvdGhlciB2YWx1ZSBpZiB0aGUgdGFzayBkb2VzIGhhdmUgYW4gRlBVDQotICogY29udGV4dC4gKi8NCi0jZGVmaW5lIHBvcnROT19GTE9BVElOR19QT0lOVF9DT05URVhUICAgICggKCBTdGFja1R5cGVfdCApIDAgKQ0KK2Zsb2F0aW5nIHBvaW50IGNvbnRleHQgYWZ0ZXIgdGhleSBoYXZlIGJlZW4gY3JlYXRlZC4gIEEgdmFyaWFibGUgaXMgc3RvcmVkIGFzDQorcGFydCBvZiB0aGUgdGFza3MgY29udGV4dCB0aGF0IGhvbGRzIHBvcnROT19GTE9BVElOR19QT0lOVF9DT05URVhUIGlmIHRoZSB0YXNrDQorZG9lcyBub3QgaGF2ZSBhbiBGUFUgY29udGV4dCwgb3IgYW55IG90aGVyIHZhbHVlIGlmIHRoZSB0YXNrIGRvZXMgaGF2ZSBhbiBGUFUNCitjb250ZXh0LiAqLw0KKyNkZWZpbmUgcG9ydE5PX0ZMT0FUSU5HX1BPSU5UX0NPTlRFWFQJKCAoIFN0YWNrVHlwZV90ICkgMCApDQogDQogLyogQ29uc3RhbnRzIHJlcXVpcmVkIHRvIHNldHVwIHRoZSBpbml0aWFsIHRhc2sgY29udGV4dC4gKi8NCi0jZGVmaW5lIHBvcnRJTklUSUFMX1NQU1IgICAgICAgICAgICAgICAgICggKCBTdGFja1R5cGVfdCApIDB4MWYgKSAvKiBTeXN0ZW0gbW9kZSwgQVJNIG1vZGUsIElSUSBlbmFibGVkIEZJUSBlbmFibGVkLiAqLw0KLSNkZWZpbmUgcG9ydFRIVU1CX01PREVfQklUICAgICAgICAgICAgICAgKCAoIFN0YWNrVHlwZV90ICkgMHgyMCApDQotI2RlZmluZSBwb3J0VEhVTUJfTU9ERV9BRERSRVNTICAgICAgICAgICAoIDB4MDFVTCApDQorI2RlZmluZSBwb3J0SU5JVElBTF9TUFNSCQkJCSggKCBTdGFja1R5cGVfdCApIDB4MWYgKSAvKiBTeXN0ZW0gbW9kZSwgQVJNIG1vZGUsIElSUSBlbmFibGVkIEZJUSBlbmFibGVkLiAqLw0KKyNkZWZpbmUgcG9ydFRIVU1CX01PREVfQklUCQkJCSggKCBTdGFja1R5cGVfdCApIDB4MjAgKQ0KKyNkZWZpbmUgcG9ydFRIVU1CX01PREVfQUREUkVTUwkJCSggMHgwMVVMICkNCiANCiAvKiBNYXNrcyBhbGwgYml0cyBpbiB0aGUgQVBTUiBvdGhlciB0aGFuIHRoZSBtb2RlIGJpdHMuICovDQotI2RlZmluZSBwb3J0QVBTUl9NT0RFX0JJVFNfTUFTSyAgICAgICAgICAoIDB4MUYgKQ0KKyNkZWZpbmUgcG9ydEFQU1JfTU9ERV9CSVRTX01BU0sJCQkoIDB4MUYgKQ0KIA0KIC8qIFRoZSB2YWx1ZSBvZiB0aGUgbW9kZSBiaXRzIGluIHRoZSBBUFNSIHdoZW4gdGhlIENQVSBpcyBleGVjdXRpbmcgaW4gdXNlcg0KLSAqIG1vZGUuICovDQotI2RlZmluZSBwb3J0QVBTUl9VU0VSX01PREUgICAgICAgICAgICAgICAoIDB4MTAgKQ0KK21vZGUuICovDQorI2RlZmluZSBwb3J0QVBTUl9VU0VSX01PREUJCQkJKCAweDEwICkNCiANCiAvKiBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHByZS1sb2FkaW5nIG9mIHRoZSBpbml0aWFsIExSIHdpdGggdGhlIGFkZHJlc3Mgb2YNCi0gKiBwcnZUYXNrRXhpdEVycm9yKCkgaW4gY2FzZSBpdCBtZXNzZXMgdXAgdW53aW5kaW5nIG9mIHRoZSBzdGFjayBpbiB0aGUNCi0gKiBkZWJ1Z2dlci4gKi8NCitwcnZUYXNrRXhpdEVycm9yKCkgaW4gY2FzZSBpdCBtZXNzZXMgdXAgdW53aW5kaW5nIG9mIHRoZSBzdGFjayBpbiB0aGUNCitkZWJ1Z2dlci4gKi8NCiAjaWZkZWYgY29uZmlnVEFTS19SRVRVUk5fQUREUkVTUw0KLSAgICAjZGVmaW5lIHBvcnRUQVNLX1JFVFVSTl9BRERSRVNTICAgIGNvbmZpZ1RBU0tfUkVUVVJOX0FERFJFU1MNCisJI2RlZmluZSBwb3J0VEFTS19SRVRVUk5fQUREUkVTUwljb25maWdUQVNLX1JFVFVSTl9BRERSRVNTDQogI2Vsc2UNCi0gICAgI2RlZmluZSBwb3J0VEFTS19SRVRVUk5fQUREUkVTUyAgICBwcnZUYXNrRXhpdEVycm9yDQorCSNkZWZpbmUgcG9ydFRBU0tfUkVUVVJOX0FERFJFU1MJcHJ2VGFza0V4aXRFcnJvcg0KICNlbmRpZg0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KQEAgLTk1LDIxICs5NSwyMSBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogQSB2YXJpYWJsZSBpcyB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGNyaXRpY2FsIHNlY3Rpb24gbmVzdGluZy4gIFRoaXMNCi0gKiB2YXJpYWJsZSBoYXMgdG8gYmUgc3RvcmVkIGFzIHBhcnQgb2YgdGhlIHRhc2sgY29udGV4dCBhbmQgbXVzdCBiZSBpbml0aWFsaXNlZCB0bw0KLSAqIGEgbm9uIHplcm8gdmFsdWUgdG8gZW5zdXJlIGludGVycnVwdHMgZG9uJ3QgaW5hZHZlcnRlbnRseSBiZWNvbWUgdW5tYXNrZWQgYmVmb3JlDQotICogdGhlIHNjaGVkdWxlciBzdGFydHMuICBBcyBpdCBpcyBzdG9yZWQgYXMgcGFydCBvZiB0aGUgdGFzayBjb250ZXh0IGl0IHdpbGwNCi0gKiBhdXRvbWF0aWNhbGx5IGJlIHNldCB0byAwIHdoZW4gdGhlIGZpcnN0IHRhc2sgaXMgc3RhcnRlZC4gKi8NCit2YXJpYWJsZSBoYXMgdG8gYmUgc3RvcmVkIGFzIHBhcnQgb2YgdGhlIHRhc2sgY29udGV4dCBhbmQgbXVzdCBiZSBpbml0aWFsaXNlZCB0bw0KK2Egbm9uIHplcm8gdmFsdWUgdG8gZW5zdXJlIGludGVycnVwdHMgZG9uJ3QgaW5hZHZlcnRlbnRseSBiZWNvbWUgdW5tYXNrZWQgYmVmb3JlDQordGhlIHNjaGVkdWxlciBzdGFydHMuICBBcyBpdCBpcyBzdG9yZWQgYXMgcGFydCBvZiB0aGUgdGFzayBjb250ZXh0IGl0IHdpbGwNCithdXRvbWF0aWNhbGx5IGJlIHNldCB0byAwIHdoZW4gdGhlIGZpcnN0IHRhc2sgaXMgc3RhcnRlZC4gKi8NCiB2b2xhdGlsZSB1aW50MzJfdCB1bENyaXRpY2FsTmVzdGluZyA9IDk5OTlVTDsNCiANCiAvKiBTYXZlZCBhcyBwYXJ0IG9mIHRoZSB0YXNrIGNvbnRleHQuICBJZiB1bFBvcnRUYXNrSGFzRlBVQ29udGV4dCBpcyBub24temVybyB0aGVuDQotICogYSBmbG9hdGluZyBwb2ludCBjb250ZXh0IG11c3QgYmUgc2F2ZWQgYW5kIHJlc3RvcmVkIGZvciB0aGUgdGFzay4gKi8NCithIGZsb2F0aW5nIHBvaW50IGNvbnRleHQgbXVzdCBiZSBzYXZlZCBhbmQgcmVzdG9yZWQgZm9yIHRoZSB0YXNrLiAqLw0KIHZvbGF0aWxlIHVpbnQzMl90IHVsUG9ydFRhc2tIYXNGUFVDb250ZXh0ID0gcGRGQUxTRTsNCiANCiAvKiBTZXQgdG8gMSB0byBwZW5kIGEgY29udGV4dCBzd2l0Y2ggZnJvbSBhbiBJU1IuICovDQogdm9sYXRpbGUgdWludDMyX3QgdWxQb3J0WWllbGRSZXF1aXJlZCA9IHBkRkFMU0U7DQogDQogLyogQ291bnRzIHRoZSBpbnRlcnJ1cHQgbmVzdGluZyBkZXB0aC4gIEEgY29udGV4dCBzd2l0Y2ggaXMgb25seSBwZXJmb3JtZWQgaWYNCi0gKiBpZiB0aGUgbmVzdGluZyBkZXB0aCBpcyAwLiAqLw0KK2lmIHRoZSBuZXN0aW5nIGRlcHRoIGlzIDAuICovDQogdm9sYXRpbGUgdWludDMyX3QgdWxQb3J0SW50ZXJydXB0TmVzdGluZyA9IDBVTDsNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCkBAIC0xMTcsMjA0ICsxMTcsMjAwIEBACiAvKg0KICAqIFNlZSBoZWFkZXIgZmlsZSBmb3IgZGVzY3JpcHRpb24uDQogICovDQotU3RhY2tUeXBlX3QgKiBweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICogcHhUb3BPZlN0YWNrLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYXNrRnVuY3Rpb25fdCBweENvZGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KK1N0YWNrVHlwZV90ICpweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICpweFRvcE9mU3RhY2ssIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzICkNCiB7DQotICAgIC8qIFNldHVwIHRoZSBpbml0aWFsIHN0YWNrIG9mIHRoZSB0YXNrLiAgVGhlIHN0YWNrIGlzIHNldCBleGFjdGx5IGFzDQotICAgICAqIGV4cGVjdGVkIGJ5IHRoZSBwb3J0UkVTVE9SRV9DT05URVhUKCkgbWFjcm8uDQotICAgICAqDQotICAgICAqIFRoZSBmaXN0IHJlYWwgdmFsdWUgb24gdGhlIHN0YWNrIGlzIHRoZSBzdGF0dXMgcmVnaXN0ZXIsIHdoaWNoIGlzIHNldCBmb3INCi0gICAgICogc3lzdGVtIG1vZGUsIHdpdGggaW50ZXJydXB0cyBlbmFibGVkLiAgQSBmZXcgTlVMTHMgYXJlIGFkZGVkIGZpcnN0IHRvIGVuc3VyZQ0KLSAgICAgKiBHREIgZG9lcyBub3QgdHJ5IGRlY29kaW5nIGEgbm9uLWV4aXN0ZW50IHJldHVybiBhZGRyZXNzLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIE5VTEw7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIE5VTEw7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIE5VTEw7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHBvcnRJTklUSUFMX1NQU1I7DQorCS8qIFNldHVwIHRoZSBpbml0aWFsIHN0YWNrIG9mIHRoZSB0YXNrLiAgVGhlIHN0YWNrIGlzIHNldCBleGFjdGx5IGFzDQorCWV4cGVjdGVkIGJ5IHRoZSBwb3J0UkVTVE9SRV9DT05URVhUKCkgbWFjcm8uDQogDQotICAgIGlmKCAoICggdWludDMyX3QgKSBweENvZGUgJiBwb3J0VEhVTUJfTU9ERV9BRERSRVNTICkgIT0gMHgwMFVMICkNCi0gICAgew0KLSAgICAgICAgLyogVGhlIHRhc2sgd2lsbCBzdGFydCBpbiBUSFVNQiBtb2RlLiAqLw0KLSAgICAgICAgKnB4VG9wT2ZTdGFjayB8PSBwb3J0VEhVTUJfTU9ERV9CSVQ7DQotICAgIH0NCisJVGhlIGZpc3QgcmVhbCB2YWx1ZSBvbiB0aGUgc3RhY2sgaXMgdGhlIHN0YXR1cyByZWdpc3Rlciwgd2hpY2ggaXMgc2V0IGZvcg0KKwlzeXN0ZW0gbW9kZSwgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQuICBBIGZldyBOVUxMcyBhcmUgYWRkZWQgZmlyc3QgdG8gZW5zdXJlDQorCUdEQiBkb2VzIG5vdCB0cnkgZGVjb2RpbmcgYSBub24tZXhpc3RlbnQgcmV0dXJuIGFkZHJlc3MuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgTlVMTDsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgTlVMTDsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgTlVMTDsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcG9ydElOSVRJQUxfU1BTUjsNCiANCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCWlmKCAoICggdWludDMyX3QgKSBweENvZGUgJiBwb3J0VEhVTUJfTU9ERV9BRERSRVNTICkgIT0gMHgwMFVMICkNCisJew0KKwkJLyogVGhlIHRhc2sgd2lsbCBzdGFydCBpbiBUSFVNQiBtb2RlLiAqLw0KKwkJKnB4VG9wT2ZTdGFjayB8PSBwb3J0VEhVTUJfTU9ERV9CSVQ7DQorCX0NCiANCi0gICAgLyogTmV4dCB0aGUgcmV0dXJuIGFkZHJlc3MsIHdoaWNoIGluIHRoaXMgY2FzZSBpcyB0aGUgc3RhcnQgb2YgdGhlIHRhc2suICovDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHhDb2RlOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgIC8qIE5leHQgYWxsIHRoZSByZWdpc3RlcnMgb3RoZXIgdGhhbiB0aGUgc3RhY2sgcG9pbnRlci4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwb3J0VEFTS19SRVRVUk5fQUREUkVTUzsgLyogUjE0ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTIxMjEyMTI7ICAgICAgICAgICAgICAvKiBSMTIgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMTExMTExMTsgICAgICAgICAgICAgIC8qIFIxMSAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDEwMTAxMDEwOyAgICAgICAgICAgICAgLyogUjEwICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDkwOTA5MDk7ICAgICAgICAgICAgICAvKiBSOSAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA4MDgwODA4OyAgICAgICAgICAgICAgLyogUjggKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNzA3MDcwNzsgICAgICAgICAgICAgIC8qIFI3ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDYwNjA2MDY7ICAgICAgICAgICAgICAvKiBSNiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA1MDUwNTA1OyAgICAgICAgICAgICAgLyogUjUgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNDA0MDQwNDsgICAgICAgICAgICAgIC8qIFI0ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDMwMzAzMDM7ICAgICAgICAgICAgICAvKiBSMyAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAyMDIwMjAyOyAgICAgICAgICAgICAgLyogUjIgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMTAxMDEwMTsgICAgICAgICAgICAgIC8qIFIxICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB2UGFyYW1ldGVyczsgICAgICAgICAgICAvKiBSMCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJLyogTmV4dCB0aGUgcmV0dXJuIGFkZHJlc3MsIHdoaWNoIGluIHRoaXMgY2FzZSBpcyB0aGUgc3RhcnQgb2YgdGhlIHRhc2suICovDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHhDb2RlOw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgLyogVGhlIHRhc2sgd2lsbCBzdGFydCB3aXRoIGEgY3JpdGljYWwgbmVzdGluZyBjb3VudCBvZiAwIGFzIGludGVycnVwdHMgYXJlDQotICAgICAqIGVuYWJsZWQuICovDQotICAgICpweFRvcE9mU3RhY2sgPSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORzsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIE5leHQgYWxsIHRoZSByZWdpc3RlcnMgb3RoZXIgdGhhbiB0aGUgc3RhY2sgcG9pbnRlci4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwb3J0VEFTS19SRVRVUk5fQUREUkVTUzsJLyogUjE0ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTIxMjEyMTI7CS8qIFIxMiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDExMTExMTExOwkvKiBSMTEgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMDEwMTAxMDsJLyogUjEwICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDkwOTA5MDk7CS8qIFI5ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDgwODA4MDg7CS8qIFI4ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDcwNzA3MDc7CS8qIFI3ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDYwNjA2MDY7CS8qIFI2ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDUwNTA1MDU7CS8qIFI1ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDQwNDA0MDQ7CS8qIFI0ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDMwMzAzMDM7CS8qIFIzICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDIwMjAyMDI7CS8qIFIyICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDEwMTAxMDE7CS8qIFIxICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB2UGFyYW1ldGVyczsgLyogUjAgKi8NCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgIC8qIFRoZSB0YXNrIHdpbGwgc3RhcnQgd2l0aG91dCBhIGZsb2F0aW5nIHBvaW50IGNvbnRleHQuICBBIHRhc2sgdGhhdCB1c2VzDQotICAgICAqIHRoZSBmbG9hdGluZyBwb2ludCBoYXJkd2FyZSBtdXN0IGNhbGwgdlBvcnRUYXNrVXNlc0ZQVSgpIGJlZm9yZSBleGVjdXRpbmcNCi0gICAgICogYW55IGZsb2F0aW5nIHBvaW50IGluc3RydWN0aW9ucy4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9IHBvcnROT19GTE9BVElOR19QT0lOVF9DT05URVhUOw0KKwkvKiBUaGUgdGFzayB3aWxsIHN0YXJ0IHdpdGggYSBjcml0aWNhbCBuZXN0aW5nIGNvdW50IG9mIDAgYXMgaW50ZXJydXB0cyBhcmUNCisJZW5hYmxlZC4gKi8NCisJKnB4VG9wT2ZTdGFjayA9IHBvcnROT19DUklUSUNBTF9ORVNUSU5HOw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgcmV0dXJuIHB4VG9wT2ZTdGFjazsNCisJLyogVGhlIHRhc2sgd2lsbCBzdGFydCB3aXRob3V0IGEgZmxvYXRpbmcgcG9pbnQgY29udGV4dC4gIEEgdGFzayB0aGF0IHVzZXMNCisJdGhlIGZsb2F0aW5nIHBvaW50IGhhcmR3YXJlIG11c3QgY2FsbCB2UG9ydFRhc2tVc2VzRlBVKCkgYmVmb3JlIGV4ZWN1dGluZw0KKwlhbnkgZmxvYXRpbmcgcG9pbnQgaW5zdHJ1Y3Rpb25zLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gcG9ydE5PX0ZMT0FUSU5HX1BPSU5UX0NPTlRFWFQ7DQorDQorCXJldHVybiBweFRvcE9mU3RhY2s7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHN0YXRpYyB2b2lkIHBydlRhc2tFeGl0RXJyb3IoIHZvaWQgKQ0KIHsNCi0gICAgLyogQSBmdW5jdGlvbiB0aGF0IGltcGxlbWVudHMgYSB0YXNrIG11c3Qgbm90IGV4aXQgb3IgYXR0ZW1wdCB0byByZXR1cm4gdG8NCi0gICAgICogaXRzIGNhbGxlciBhcyB0aGVyZSBpcyBub3RoaW5nIHRvIHJldHVybiB0by4gIElmIGEgdGFzayB3YW50cyB0byBleGl0IGl0DQotICAgICAqIHNob3VsZCBpbnN0ZWFkIGNhbGwgdlRhc2tEZWxldGUoIE5VTEwgKS4NCi0gICAgICoNCi0gICAgICogQXJ0aWZpY2lhbGx5IGZvcmNlIGFuIGFzc2VydCgpIHRvIGJlIHRyaWdnZXJlZCBpZiBjb25maWdBU1NFUlQoKSBpcw0KLSAgICAgKiBkZWZpbmVkLCB0aGVuIHN0b3AgaGVyZSBzbyBhcHBsaWNhdGlvbiB3cml0ZXJzIGNhbiBjYXRjaCB0aGUgZXJyb3IuICovDQotICAgIGNvbmZpZ0FTU0VSVCggdWxQb3J0SW50ZXJydXB0TmVzdGluZyA9PSB+MFVMICk7DQotICAgIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsNCisJLyogQSBmdW5jdGlvbiB0aGF0IGltcGxlbWVudHMgYSB0YXNrIG11c3Qgbm90IGV4aXQgb3IgYXR0ZW1wdCB0byByZXR1cm4gdG8NCisJaXRzIGNhbGxlciBhcyB0aGVyZSBpcyBub3RoaW5nIHRvIHJldHVybiB0by4gIElmIGEgdGFzayB3YW50cyB0byBleGl0IGl0DQorCXNob3VsZCBpbnN0ZWFkIGNhbGwgdlRhc2tEZWxldGUoIE5VTEwgKS4NCiANCi0gICAgZm9yKCA7IDsgKQ0KLSAgICB7DQotICAgIH0NCisJQXJ0aWZpY2lhbGx5IGZvcmNlIGFuIGFzc2VydCgpIHRvIGJlIHRyaWdnZXJlZCBpZiBjb25maWdBU1NFUlQoKSBpcw0KKwlkZWZpbmVkLCB0aGVuIHN0b3AgaGVyZSBzbyBhcHBsaWNhdGlvbiB3cml0ZXJzIGNhbiBjYXRjaCB0aGUgZXJyb3IuICovDQorCWNvbmZpZ0FTU0VSVCggdWxQb3J0SW50ZXJydXB0TmVzdGluZyA9PSB+MFVMICk7DQorCXBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsNCisJZm9yKCA7OyApOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBCYXNlVHlwZV90IHhQb3J0U3RhcnRTY2hlZHVsZXIoIHZvaWQgKQ0KIHsNCi0gICAgdWludDMyX3QgdWxBUFNSOw0KK3VpbnQzMl90IHVsQVBTUjsNCiANCi0gICAgLyogT25seSBjb250aW51ZSBpZiB0aGUgQ1BVIGlzIG5vdCBpbiBVc2VyIG1vZGUuICBUaGUgQ1BVIG11c3QgYmUgaW4gYQ0KLSAgICAgKiBQcml2aWxlZ2VkIG1vZGUgZm9yIHRoZSBzY2hlZHVsZXIgdG8gc3RhcnQuICovDQotICAgIF9fYXNtIHZvbGF0aWxlICggIk1SUyAlMCwgQVBTUiIgOiAiPXIiICggdWxBUFNSICkgKTsNCisJLyogT25seSBjb250aW51ZSBpZiB0aGUgQ1BVIGlzIG5vdCBpbiBVc2VyIG1vZGUuICBUaGUgQ1BVIG11c3QgYmUgaW4gYQ0KKwlQcml2aWxlZ2VkIG1vZGUgZm9yIHRoZSBzY2hlZHVsZXIgdG8gc3RhcnQuICovDQorCV9fYXNtIHZvbGF0aWxlICggIk1SUyAlMCwgQVBTUiIgOiAiPXIiICggdWxBUFNSICkgKTsNCisJdWxBUFNSICY9IHBvcnRBUFNSX01PREVfQklUU19NQVNLOw0KKwljb25maWdBU1NFUlQoIHVsQVBTUiAhPSBwb3J0QVBTUl9VU0VSX01PREUgKTsNCiANCi0gICAgdWxBUFNSICY9IHBvcnRBUFNSX01PREVfQklUU19NQVNLOw0KLSAgICBjb25maWdBU1NFUlQoIHVsQVBTUiAhPSBwb3J0QVBTUl9VU0VSX01PREUgKTsNCisJaWYoIHVsQVBTUiAhPSBwb3J0QVBTUl9VU0VSX01PREUgKQ0KKwl7DQorCQkvKiBTdGFydCB0aGUgdGltZXIgdGhhdCBnZW5lcmF0ZXMgdGhlIHRpY2sgSVNSLiAqLw0KKwkJcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOw0KKwkJY29uZmlnU0VUVVBfVElDS19JTlRFUlJVUFQoKTsNCiANCi0gICAgaWYoIHVsQVBTUiAhPSBwb3J0QVBTUl9VU0VSX01PREUgKQ0KLSAgICB7DQotICAgICAgICAvKiBTdGFydCB0aGUgdGltZXIgdGhhdCBnZW5lcmF0ZXMgdGhlIHRpY2sgSVNSLiAqLw0KLSAgICAgICAgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOw0KLSAgICAgICAgY29uZmlnU0VUVVBfVElDS19JTlRFUlJVUFQoKTsNCisJCS8qIFN0YXJ0IHRoZSBmaXJzdCB0YXNrIGV4ZWN1dGluZy4gKi8NCisJCXZQb3J0UmVzdG9yZVRhc2tDb250ZXh0KCk7DQorCX0NCiANCi0gICAgICAgIC8qIFN0YXJ0IHRoZSBmaXJzdCB0YXNrIGV4ZWN1dGluZy4gKi8NCi0gICAgICAgIHZQb3J0UmVzdG9yZVRhc2tDb250ZXh0KCk7DQotICAgIH0NCi0NCi0gICAgLyogV2lsbCBvbmx5IGdldCBoZXJlIGlmIHZUYXNrU3RhcnRTY2hlZHVsZXIoKSB3YXMgY2FsbGVkIHdpdGggdGhlIENQVSBpbg0KLSAgICAgKiBhIG5vbi1wcml2aWxlZ2VkIG1vZGUgb3IgdGhlIGJpbmFyeSBwb2ludCByZWdpc3RlciB3YXMgbm90IHNldCB0byBpdHMgbG93ZXN0DQotICAgICAqIHBvc3NpYmxlIHZhbHVlLiAgcHJ2VGFza0V4aXRFcnJvcigpIGlzIHJlZmVyZW5jZWQgdG8gcHJldmVudCBhIGNvbXBpbGVyDQotICAgICAqIHdhcm5pbmcgYWJvdXQgaXQgYmVpbmcgZGVmaW5lZCBidXQgbm90IHJlZmVyZW5jZWQgaW4gdGhlIGNhc2UgdGhhdCB0aGUgdXNlcg0KLSAgICAgKiBkZWZpbmVzIHRoZWlyIG93biBleGl0IGFkZHJlc3MuICovDQotICAgICggdm9pZCApIHBydlRhc2tFeGl0RXJyb3I7DQotICAgIHJldHVybiAwOw0KKwkvKiBXaWxsIG9ubHkgZ2V0IGhlcmUgaWYgdlRhc2tTdGFydFNjaGVkdWxlcigpIHdhcyBjYWxsZWQgd2l0aCB0aGUgQ1BVIGluDQorCWEgbm9uLXByaXZpbGVnZWQgbW9kZSBvciB0aGUgYmluYXJ5IHBvaW50IHJlZ2lzdGVyIHdhcyBub3Qgc2V0IHRvIGl0cyBsb3dlc3QNCisJcG9zc2libGUgdmFsdWUuICBwcnZUYXNrRXhpdEVycm9yKCkgaXMgcmVmZXJlbmNlZCB0byBwcmV2ZW50IGEgY29tcGlsZXINCisJd2FybmluZyBhYm91dCBpdCBiZWluZyBkZWZpbmVkIGJ1dCBub3QgcmVmZXJlbmNlZCBpbiB0aGUgY2FzZSB0aGF0IHRoZSB1c2VyDQorCWRlZmluZXMgdGhlaXIgb3duIGV4aXQgYWRkcmVzcy4gKi8NCisJKCB2b2lkICkgcHJ2VGFza0V4aXRFcnJvcjsNCisJcmV0dXJuIDA7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQ0KIHsNCi0gICAgLyogTm90IGltcGxlbWVudGVkIGluIHBvcnRzIHdoZXJlIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmV0dXJuIHRvLg0KLSAgICAgKiBBcnRpZmljaWFsbHkgZm9yY2UgYW4gYXNzZXJ0LiAqLw0KLSAgICBjb25maWdBU1NFUlQoIHVsQ3JpdGljYWxOZXN0aW5nID09IDEwMDBVTCApOw0KKwkvKiBOb3QgaW1wbGVtZW50ZWQgaW4gcG9ydHMgd2hlcmUgdGhlcmUgaXMgbm90aGluZyB0byByZXR1cm4gdG8uDQorCUFydGlmaWNpYWxseSBmb3JjZSBhbiBhc3NlcnQuICovDQorCWNvbmZpZ0FTU0VSVCggdWxDcml0aWNhbE5lc3RpbmcgPT0gMTAwMFVMICk7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICkNCiB7DQotICAgIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsNCisJcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOw0KIA0KLSAgICAvKiBOb3cgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgdWxDcml0aWNhbE5lc3RpbmcgY2FuIGJlIGFjY2Vzc2VkDQotICAgICAqIGRpcmVjdGx5LiAgSW5jcmVtZW50IHVsQ3JpdGljYWxOZXN0aW5nIHRvIGtlZXAgYSBjb3VudCBvZiBob3cgbWFueSB0aW1lcw0KLSAgICAgKiBwb3J0RU5URVJfQ1JJVElDQUwoKSBoYXMgYmVlbiBjYWxsZWQuICovDQotICAgIHVsQ3JpdGljYWxOZXN0aW5nKys7DQorCS8qIE5vdyBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB1bENyaXRpY2FsTmVzdGluZyBjYW4gYmUgYWNjZXNzZWQNCisJZGlyZWN0bHkuICBJbmNyZW1lbnQgdWxDcml0aWNhbE5lc3RpbmcgdG8ga2VlcCBhIGNvdW50IG9mIGhvdyBtYW55IHRpbWVzDQorCXBvcnRFTlRFUl9DUklUSUNBTCgpIGhhcyBiZWVuIGNhbGxlZC4gKi8NCisJdWxDcml0aWNhbE5lc3RpbmcrKzsNCiANCi0gICAgLyogVGhpcyBpcyBub3QgdGhlIGludGVycnVwdCBzYWZlIHZlcnNpb24gb2YgdGhlIGVudGVyIGNyaXRpY2FsIGZ1bmN0aW9uIHNvDQotICAgICAqIGFzc2VydCgpIGlmIGl0IGlzIGJlaW5nIGNhbGxlZCBmcm9tIGFuIGludGVycnVwdCBjb250ZXh0LiAgT25seSBBUEkNCi0gICAgICogZnVuY3Rpb25zIHRoYXQgZW5kIGluICJGcm9tSVNSIiBjYW4gYmUgdXNlZCBpbiBhbiBpbnRlcnJ1cHQuICBPbmx5IGFzc2VydCBpZg0KLSAgICAgKiB0aGUgY3JpdGljYWwgbmVzdGluZyBjb3VudCBpcyAxIHRvIHByb3RlY3QgYWdhaW5zdCByZWN1cnNpdmUgY2FsbHMgaWYgdGhlDQotICAgICAqIGFzc2VydCBmdW5jdGlvbiBhbHNvIHVzZXMgYSBjcml0aWNhbCBzZWN0aW9uLiAqLw0KLSAgICBpZiggdWxDcml0aWNhbE5lc3RpbmcgPT0gMSApDQotICAgIHsNCi0gICAgICAgIGNvbmZpZ0FTU0VSVCggdWxQb3J0SW50ZXJydXB0TmVzdGluZyA9PSAwICk7DQotICAgIH0NCisJLyogVGhpcyBpcyBub3QgdGhlIGludGVycnVwdCBzYWZlIHZlcnNpb24gb2YgdGhlIGVudGVyIGNyaXRpY2FsIGZ1bmN0aW9uIHNvDQorCWFzc2VydCgpIGlmIGl0IGlzIGJlaW5nIGNhbGxlZCBmcm9tIGFuIGludGVycnVwdCBjb250ZXh0LiAgT25seSBBUEkNCisJZnVuY3Rpb25zIHRoYXQgZW5kIGluICJGcm9tSVNSIiBjYW4gYmUgdXNlZCBpbiBhbiBpbnRlcnJ1cHQuICBPbmx5IGFzc2VydCBpZg0KKwl0aGUgY3JpdGljYWwgbmVzdGluZyBjb3VudCBpcyAxIHRvIHByb3RlY3QgYWdhaW5zdCByZWN1cnNpdmUgY2FsbHMgaWYgdGhlDQorCWFzc2VydCBmdW5jdGlvbiBhbHNvIHVzZXMgYSBjcml0aWNhbCBzZWN0aW9uLiAqLw0KKwlpZiggdWxDcml0aWNhbE5lc3RpbmcgPT0gMSApDQorCXsNCisJCWNvbmZpZ0FTU0VSVCggdWxQb3J0SW50ZXJydXB0TmVzdGluZyA9PSAwICk7DQorCX0NCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogdm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApDQogew0KLSAgICBpZiggdWxDcml0aWNhbE5lc3RpbmcgPiBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyApDQotICAgIHsNCi0gICAgICAgIC8qIERlY3JlbWVudCB0aGUgbmVzdGluZyBjb3VudCBhcyB0aGUgY3JpdGljYWwgc2VjdGlvbiBpcyBiZWluZw0KLSAgICAgICAgICogZXhpdGVkLiAqLw0KLSAgICAgICAgdWxDcml0aWNhbE5lc3RpbmctLTsNCisJaWYoIHVsQ3JpdGljYWxOZXN0aW5nID4gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgKQ0KKwl7DQorCQkvKiBEZWNyZW1lbnQgdGhlIG5lc3RpbmcgY291bnQgYXMgdGhlIGNyaXRpY2FsIHNlY3Rpb24gaXMgYmVpbmcNCisJCWV4aXRlZC4gKi8NCisJCXVsQ3JpdGljYWxOZXN0aW5nLS07DQogDQotICAgICAgICAvKiBJZiB0aGUgbmVzdGluZyBsZXZlbCBoYXMgcmVhY2hlZCB6ZXJvIHRoZW4gYWxsIGludGVycnVwdA0KLSAgICAgICAgICogcHJpb3JpdGllcyBtdXN0IGJlIHJlLWVuYWJsZWQuICovDQotICAgICAgICBpZiggdWxDcml0aWNhbE5lc3RpbmcgPT0gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIC8qIENyaXRpY2FsIG5lc3RpbmcgaGFzIHJlYWNoZWQgemVybyBzbyBhbGwgaW50ZXJydXB0IHByaW9yaXRpZXMNCi0gICAgICAgICAgICAgKiBzaG91bGQgYmUgdW5tYXNrZWQuICovDQotICAgICAgICAgICAgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7DQotICAgICAgICB9DQotICAgIH0NCisJCS8qIElmIHRoZSBuZXN0aW5nIGxldmVsIGhhcyByZWFjaGVkIHplcm8gdGhlbiBhbGwgaW50ZXJydXB0DQorCQlwcmlvcml0aWVzIG11c3QgYmUgcmUtZW5hYmxlZC4gKi8NCisJCWlmKCB1bENyaXRpY2FsTmVzdGluZyA9PSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyApDQorCQl7DQorCQkJLyogQ3JpdGljYWwgbmVzdGluZyBoYXMgcmVhY2hlZCB6ZXJvIHNvIGFsbCBpbnRlcnJ1cHQgcHJpb3JpdGllcw0KKwkJCXNob3VsZCBiZSB1bm1hc2tlZC4gKi8NCisJCQlwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKTsNCisJCX0NCisJfQ0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIEZyZWVSVE9TX1RpY2tfSGFuZGxlciggdm9pZCApDQogew0KLSAgICB1aW50MzJfdCB1bEludGVycnVwdFN0YXR1czsNCit1aW50MzJfdCB1bEludGVycnVwdFN0YXR1czsNCiANCi0gICAgdWxJbnRlcnJ1cHRTdGF0dXMgPSBwb3J0U0VUX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCk7DQorCXVsSW50ZXJydXB0U3RhdHVzID0gcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpOw0KIA0KLSAgICAvKiBJbmNyZW1lbnQgdGhlIFJUT1MgdGljay4gKi8NCi0gICAgaWYoIHhUYXNrSW5jcmVtZW50VGljaygpICE9IHBkRkFMU0UgKQ0KLSAgICB7DQotICAgICAgICB1bFBvcnRZaWVsZFJlcXVpcmVkID0gcGRUUlVFOw0KLSAgICB9DQorCS8qIEluY3JlbWVudCB0aGUgUlRPUyB0aWNrLiAqLw0KKwlpZiggeFRhc2tJbmNyZW1lbnRUaWNrKCkgIT0gcGRGQUxTRSApDQorCXsNCisJCXVsUG9ydFlpZWxkUmVxdWlyZWQgPSBwZFRSVUU7DQorCX0NCiANCi0gICAgcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCB1bEludGVycnVwdFN0YXR1cyApOw0KKwlwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoIHVsSW50ZXJydXB0U3RhdHVzICk7DQogDQotICAgIGNvbmZpZ0NMRUFSX1RJQ0tfSU5URVJSVVBUKCk7DQorCWNvbmZpZ0NMRUFSX1RJQ0tfSU5URVJSVVBUKCk7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlBvcnRUYXNrVXNlc0ZQVSggdm9pZCApDQogew0KLSAgICB1aW50MzJfdCB1bEluaXRpYWxGUFNDUiA9IDA7DQordWludDMyX3QgdWxJbml0aWFsRlBTQ1IgPSAwOw0KIA0KLSAgICAvKiBBIHRhc2sgaXMgcmVnaXN0ZXJpbmcgdGhlIGZhY3QgdGhhdCBpdCBuZWVkcyBhbiBGUFUgY29udGV4dC4gIFNldCB0aGUNCi0gICAgICogRlBVIGZsYWcgKHdoaWNoIGlzIHNhdmVkIGFzIHBhcnQgb2YgdGhlIHRhc2sgY29udGV4dCkuICovDQotICAgIHVsUG9ydFRhc2tIYXNGUFVDb250ZXh0ID0gcGRUUlVFOw0KKwkvKiBBIHRhc2sgaXMgcmVnaXN0ZXJpbmcgdGhlIGZhY3QgdGhhdCBpdCBuZWVkcyBhbiBGUFUgY29udGV4dC4gIFNldCB0aGUNCisJRlBVIGZsYWcgKHdoaWNoIGlzIHNhdmVkIGFzIHBhcnQgb2YgdGhlIHRhc2sgY29udGV4dCkuICovDQorCXVsUG9ydFRhc2tIYXNGUFVDb250ZXh0ID0gcGRUUlVFOw0KIA0KLSAgICAvKiBJbml0aWFsaXNlIHRoZSBmbG9hdGluZyBwb2ludCBzdGF0dXMgcmVnaXN0ZXIuICovDQotICAgIF9fYXNtIHZvbGF0aWxlICggIkZNWFIgCUZQU0NSLCAlMCIgOjoiciIgKCB1bEluaXRpYWxGUFNDUiApICk7DQorCS8qIEluaXRpYWxpc2UgdGhlIGZsb2F0aW5nIHBvaW50IHN0YXR1cyByZWdpc3Rlci4gKi8NCisJX19hc20gdm9sYXRpbGUgKCAiRk1YUiAJRlBTQ1IsICUwIiA6OiAiciIgKHVsSW5pdGlhbEZQU0NSKSApOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9JQVIvQVJNX0NSeF9Ob19HSUMvcG9ydG1hY3JvLmggYi9wb3J0YWJsZS9JQVIvQVJNX0NSeF9Ob19HSUMvcG9ydG1hY3JvLmgKaW5kZXggN2ZmZDgzNS4uOTlmYzE4ZCAxMDA2NDQKLS0tIGEvcG9ydGFibGUvSUFSL0FSTV9DUnhfTm9fR0lDL3BvcnRtYWNyby5oCisrKyBiL3BvcnRhYmxlL0lBUi9BUk1fQ1J4X05vX0dJQy9wb3J0bWFjcm8uaApAQCAtMjYsMTMgKzI2LDEzIEBACiAgKi8NCiANCiAjaWZuZGVmIFBPUlRNQUNST19IDQotICAgICNkZWZpbmUgUE9SVE1BQ1JPX0gNCisjZGVmaW5lIFBPUlRNQUNST19IDQogDQotICAgICNpbmNsdWRlIDxpbnRyaW5zaWNzLmg+DQorI2luY2x1ZGUgPGludHJpbnNpY3MuaD4NCiANCi0gICAgI2lmZGVmIF9fY3BsdXNwbHVzDQotICAgICAgICBleHRlcm4gIkMiIHsNCi0gICAgI2VuZGlmDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorCWV4dGVybiAiQyIgew0KKyNlbmRpZg0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgKiBQb3J0IHNwZWNpZmljIGRlZmluaXRpb25zLg0KQEAgLTQ1LDEzOSArNDUsMTM3IEBACiAgKi8NCiANCiAvKiBUeXBlIGRlZmluaXRpb25zLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRDSEFSICAgICAgICAgIGNoYXINCi0gICAgI2RlZmluZSBwb3J0RkxPQVQgICAgICAgICBmbG9hdA0KLSAgICAjZGVmaW5lIHBvcnRET1VCTEUgICAgICAgIGRvdWJsZQ0KLSAgICAjZGVmaW5lIHBvcnRMT05HICAgICAgICAgIGxvbmcNCi0gICAgI2RlZmluZSBwb3J0U0hPUlQgICAgICAgICBzaG9ydA0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19UWVBFICAgIHVpbnQzMl90DQotICAgICNkZWZpbmUgcG9ydEJBU0VfVFlQRSAgICAgbG9uZw0KKyNkZWZpbmUgcG9ydENIQVIJCWNoYXINCisjZGVmaW5lIHBvcnRGTE9BVAkJZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUJCWRvdWJsZQ0KKyNkZWZpbmUgcG9ydExPTkcJCWxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVAkJc2hvcnQNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFCXVpbnQzMl90DQorI2RlZmluZSBwb3J0QkFTRV9UWVBFCWxvbmcNCiANCi0gICAgdHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSAgIFN0YWNrVHlwZV90Ow0KLSAgICB0eXBlZGVmIGxvbmcgICAgICAgICAgICAgQmFzZVR5cGVfdDsNCi0gICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nICAgIFVCYXNlVHlwZV90Ow0KK3R5cGVkZWYgcG9ydFNUQUNLX1RZUEUgU3RhY2tUeXBlX3Q7DQordHlwZWRlZiBsb25nIEJhc2VUeXBlX3Q7DQordHlwZWRlZiB1bnNpZ25lZCBsb25nIFVCYXNlVHlwZV90Ow0KIA0KLSAgICB0eXBlZGVmIHVpbnQzMl90ICAgICAgICAgVGlja1R5cGVfdDsNCi0gICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICAgICAgICAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwNCit0eXBlZGVmIHVpbnQzMl90IFRpY2tUeXBlX3Q7DQorI2RlZmluZSBwb3J0TUFYX0RFTEFZICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTA0KIA0KIC8qIDMyLWJpdCB0aWNrIHR5cGUgb24gYSAzMi1iaXQgYXJjaGl0ZWN0dXJlLCBzbyByZWFkcyBvZiB0aGUgdGljayBjb3VudCBkbw0KLSAqIG5vdCBuZWVkIHRvIGJlIGd1YXJkZWQgd2l0aCBhIGNyaXRpY2FsIHNlY3Rpb24uICovDQotICAgICNkZWZpbmUgcG9ydFRJQ0tfVFlQRV9JU19BVE9NSUMgICAgMQ0KK25vdCBuZWVkIHRvIGJlIGd1YXJkZWQgd2l0aCBhIGNyaXRpY2FsIHNlY3Rpb24uICovDQorI2RlZmluZSBwb3J0VElDS19UWVBFX0lTX0FUT01JQyAxDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogSGFyZHdhcmUgc3BlY2lmaWNzLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEggICAgICAoIC0xICkNCi0gICAgI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMgICAgKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCi0gICAgI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQgICAgOA0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJCSggLTEgKQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TCQkJKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCisjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVAkJCTgNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBUYXNrIHV0aWxpdGllcy4gKi8NCiANCiAvKiBDYWxsZWQgYXQgdGhlIGVuZCBvZiBhbiBJU1IgdGhhdCBjYW4gY2F1c2UgYSBjb250ZXh0IHN3aXRjaC4gKi8NCi0gICAgI2RlZmluZSBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHhTd2l0Y2hSZXF1aXJlZCApICBcDQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgZXh0ZXJuIHZvbGF0aWxlIHVpbnQzMl90IHVsUG9ydFlpZWxkUmVxdWlyZWQ7IFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBpZiggeFN3aXRjaFJlcXVpcmVkICE9IHBkRkFMU0UgKSAgICAgICAgICAgICAgXA0KLSAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICB1bFBvcnRZaWVsZFJlcXVpcmVkID0gcGRUUlVFOyAgICAgICAgICAgICBcDQotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB9DQorI2RlZmluZSBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHhTd2l0Y2hSZXF1aXJlZCApXA0KK3sJCQkJCQkJCQkJCQlcDQorZXh0ZXJuIHZvbGF0aWxlIHVpbnQzMl90IHVsUG9ydFlpZWxkUmVxdWlyZWQ7CVwNCisJCQkJCQkJCQkJCQlcDQorCWlmKCB4U3dpdGNoUmVxdWlyZWQgIT0gcGRGQUxTRSApCQkJXA0KKwl7CQkJCQkJCQkJCQlcDQorCQl1bFBvcnRZaWVsZFJlcXVpcmVkID0gcGRUUlVFOwkJCVwNCisJfQkJCQkJCQkJCQkJXA0KK30NCiANCi0gICAgI2RlZmluZSBwb3J0WUlFTERfRlJPTV9JU1IoIHggKSAgICBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHggKQ0KLSAgICAjZGVmaW5lIHBvcnRZSUVMRCgpICAgICAgICAgIFwNCi0gICAgX19hc20gdm9sYXRpbGUgKCAiU1dJIDAJCVxuIlwNCi0gICAgICAgICAgICAgICAgICAgICAiSVNCCQkgICIpOw0KKyNkZWZpbmUgcG9ydFlJRUxEX0ZST01fSVNSKCB4ICkgcG9ydEVORF9TV0lUQ0hJTkdfSVNSKCB4ICkNCisjZGVmaW5lIHBvcnRZSUVMRCgpIF9fYXNtIHZvbGF0aWxlICggIlNXSSAwCQlcbiIJCQkJXA0KKwkJCQkJCQkJCSAiSVNCCQkgICIgKTsNCiANCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotKiBDcml0aWNhbCBzZWN0aW9uIGNvbnRyb2wNCi0qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorICogQ3JpdGljYWwgc2VjdGlvbiBjb250cm9sDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0gICAgZXh0ZXJuIHZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICk7DQotICAgIGV4dGVybiB2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICk7DQotICAgIGV4dGVybiB1aW50MzJfdCB1bFBvcnRTZXRJbnRlcnJ1cHRNYXNrKCB2b2lkICk7DQotICAgIGV4dGVybiB2b2lkIHZQb3J0Q2xlYXJJbnRlcnJ1cHRNYXNrKCB1aW50MzJfdCB1bE5ld01hc2tWYWx1ZSApOw0KLSAgICBleHRlcm4gdm9pZCB2UG9ydEluc3RhbGxGcmVlUlRPU1ZlY3RvclRhYmxlKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCitleHRlcm4gdWludDMyX3QgdWxQb3J0U2V0SW50ZXJydXB0TWFzayggdm9pZCApOw0KK2V4dGVybiB2b2lkIHZQb3J0Q2xlYXJJbnRlcnJ1cHRNYXNrKCB1aW50MzJfdCB1bE5ld01hc2tWYWx1ZSApOw0KK2V4dGVybiB2b2lkIHZQb3J0SW5zdGFsbEZyZWVSVE9TVmVjdG9yVGFibGUoIHZvaWQgKTsNCiANCiAvKiBUaGUgSSBiaXQgd2l0aGluIHRoZSBDUFNSLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRJTlRFUlJVUFRfRU5BQkxFX0JJVCAgICAoIDEgPDwgNyApDQorI2RlZmluZSBwb3J0SU5URVJSVVBUX0VOQUJMRV9CSVQJKCAxIDw8IDcgKQ0KIA0KIC8qIEluIHRoZSBhYnNlbmNlIG9mIGEgcHJpb3JpdHkgbWFzayByZWdpc3RlciwgdGhlc2UgZnVuY3Rpb25zIGFuZCBtYWNyb3MNCi0gKiBnbG9iYWxseSBlbmFibGUgYW5kIGRpc2FibGUgaW50ZXJydXB0cy4gKi8NCi0gICAgI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKSAgICAgICB2UG9ydEVudGVyQ3JpdGljYWwoKTsNCi0gICAgI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpICAgICAgICB2UG9ydEV4aXRDcml0aWNhbCgpOw0KLSAgICAjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpICAgIF9fYXNtIHZvbGF0aWxlICggIkNQU0lFIGkgCVxuIik7DQotICAgICNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpIFwNCi0gICAgX19hc20gdm9sYXRpbGUgKCAiQ1BTSUQgaSAJXG4iICBcDQotICAgICAgICAgICAgICAgICAgICAgIkRTQgkJXG4iICBcDQotICAgICAgICAgICAgICAgICAgICAgIklTQgkJICAiKTsNCi0gICAgI3ByYWdtYSBpbmxpbmUNCi0gICAgc3RhdGljIGlubGluZSB1aW50MzJfdCBwb3J0SU5MSU5FX1NFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUiggdm9pZCApDQotICAgIHsNCi0gICAgICAgIHZvbGF0aWxlIHVpbnQzMl90IHVsQ1BTUjsNCitnbG9iYWxseSBlbmFibGUgYW5kIGRpc2FibGUgaW50ZXJydXB0cy4gKi8NCisjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpCQl2UG9ydEVudGVyQ3JpdGljYWwoKTsNCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkJCQl2UG9ydEV4aXRDcml0aWNhbCgpOw0KKyNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkJCV9fYXNtIHZvbGF0aWxlICggIkNQU0lFIGkgCVxuIgkpOw0KKyNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpCV9fYXNtIHZvbGF0aWxlICggIkNQU0lEIGkgCVxuIgkJXA0KKwkJCQkJCQkJCQkJCQkgIkRTQgkJXG4iCQlcDQorCQkJCQkJCQkJCQkJCSAiSVNCCQkgICIgKTsNCisjcHJhZ21hIGlubGluZQ0KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgcG9ydElOTElORV9TRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoIHZvaWQgKQ0KK3sNCit2b2xhdGlsZSB1aW50MzJfdCB1bENQU1I7DQogDQotICAgICAgICBfX2FzbSB2b2xhdGlsZSAoICJNUlMgJTAsIENQU1IiIDogIj1yIiAoIHVsQ1BTUiApICk7DQorCV9fYXNtIHZvbGF0aWxlICggIk1SUyAlMCwgQ1BTUiIgOiAiPXIiICh1bENQU1IpICk7DQorCXVsQ1BTUiAmPSBwb3J0SU5URVJSVVBUX0VOQUJMRV9CSVQ7DQorCXBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsNCisJcmV0dXJuIHVsQ1BTUjsNCit9DQogDQotICAgICAgICB1bENQU1IgJj0gcG9ydElOVEVSUlVQVF9FTkFCTEVfQklUOw0KLSAgICAgICAgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOw0KLSAgICAgICAgcmV0dXJuIHVsQ1BTUjsNCi0gICAgfQ0KLQ0KLSAgICAjZGVmaW5lIHBvcnRTRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKSAgICAgICAgIHBvcnRJTkxJTkVfU0VUX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCkNCi0gICAgI2RlZmluZSBwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoIHggKSAgICBpZiggeCA9PSAwICkgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkNCisjZGVmaW5lIHBvcnRTRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKSBwb3J0SU5MSU5FX1NFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpDQorI2RlZmluZSBwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoeCkJaWYoIHggPT0gMCApIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICBUaGVzZSBhcmUNCi0gKiBub3QgcmVxdWlyZWQgZm9yIHRoaXMgcG9ydCBidXQgaW5jbHVkZWQgaW4gY2FzZSBjb21tb24gZGVtbyBjb2RlIHRoYXQgdXNlcyB0aGVzZQ0KLSAqIG1hY3JvcyBpcyB1c2VkLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCi0gICAgI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICAgICAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQorbm90IHJlcXVpcmVkIGZvciB0aGlzIHBvcnQgYnV0IGluY2x1ZGVkIGluIGNhc2UgY29tbW9uIGRlbW8gY29kZSB0aGF0IHVzZXMgdGhlc2UNCittYWNyb3MgaXMgdXNlZC4gKi8NCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApCXZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkJdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQogDQogLyogUHJvdG90eXBlIG9mIHRoZSBGcmVlUlRPUyB0aWNrIGhhbmRsZXIuICBUaGlzIG11c3QgYmUgaW5zdGFsbGVkIGFzIHRoZQ0KLSAqIGhhbmRsZXIgZm9yIHdoaWNoZXZlciBwZXJpcGhlcmFsIGlzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIFJUT1MgdGljay4gKi8NCi0gICAgdm9pZCBGcmVlUlRPU19UaWNrX0hhbmRsZXIoIHZvaWQgKTsNCitoYW5kbGVyIGZvciB3aGljaGV2ZXIgcGVyaXBoZXJhbCBpcyB1c2VkIHRvIGdlbmVyYXRlIHRoZSBSVE9TIHRpY2suICovDQordm9pZCBGcmVlUlRPU19UaWNrX0hhbmRsZXIoIHZvaWQgKTsNCiANCiAvKiBBbnkgdGFzayB0aGF0IHVzZXMgdGhlIGZsb2F0aW5nIHBvaW50IHVuaXQgTVVTVCBjYWxsIHZQb3J0VGFza1VzZXNGUFUoKQ0KLSAqIGJlZm9yZSBhbnkgZmxvYXRpbmcgcG9pbnQgaW5zdHJ1Y3Rpb25zIGFyZSBleGVjdXRlZC4gKi8NCi0gICAgdm9pZCB2UG9ydFRhc2tVc2VzRlBVKCB2b2lkICk7DQotICAgICNkZWZpbmUgcG9ydFRBU0tfVVNFU19GTE9BVElOR19QT0lOVCgpICAgIHZQb3J0VGFza1VzZXNGUFUoKQ0KK2JlZm9yZSBhbnkgZmxvYXRpbmcgcG9pbnQgaW5zdHJ1Y3Rpb25zIGFyZSBleGVjdXRlZC4gKi8NCit2b2lkIHZQb3J0VGFza1VzZXNGUFUoIHZvaWQgKTsNCisjZGVmaW5lIHBvcnRUQVNLX1VTRVNfRkxPQVRJTkdfUE9JTlQoKSB2UG9ydFRhc2tVc2VzRlBVKCkNCiANCi0gICAgI2RlZmluZSBwb3J0TE9XRVNUX0lOVEVSUlVQVF9QUklPUklUWSAgICAgICAgICAgKCAoICggdWludDMyX3QgKSBjb25maWdVTklRVUVfSU5URVJSVVBUX1BSSU9SSVRJRVMgKSAtIDFVTCApDQotICAgICNkZWZpbmUgcG9ydExPV0VTVF9VU0FCTEVfSU5URVJSVVBUX1BSSU9SSVRZICAgICggcG9ydExPV0VTVF9JTlRFUlJVUFRfUFJJT1JJVFkgLSAxVUwgKQ0KKyNkZWZpbmUgcG9ydExPV0VTVF9JTlRFUlJVUFRfUFJJT1JJVFkgKCAoICggdWludDMyX3QgKSBjb25maWdVTklRVUVfSU5URVJSVVBUX1BSSU9SSVRJRVMgKSAtIDFVTCApDQorI2RlZmluZSBwb3J0TE9XRVNUX1VTQUJMRV9JTlRFUlJVUFRfUFJJT1JJVFkgKCBwb3J0TE9XRVNUX0lOVEVSUlVQVF9QUklPUklUWSAtIDFVTCApDQogDQogLyogQXJjaGl0ZWN0dXJlIHNwZWNpZmljIG9wdGltaXNhdGlvbnMuICovDQotICAgICNpZm5kZWYgY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9ODQotICAgICAgICAjZGVmaW5lIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiAgICAxDQotICAgICNlbmRpZg0KKyNpZm5kZWYgY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9ODQorCSNkZWZpbmUgY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OIDENCisjZW5kaWYNCiANCi0gICAgI2lmIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiA9PSAxDQorI2lmIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiA9PSAxDQogDQotLyogU3RvcmUvY2xlYXIgdGhlIHJlYWR5IHByaW9yaXRpZXMgaW4gYSBiaXQgbWFwLiAqLw0KLSAgICAgICAgI2RlZmluZSBwb3J0UkVDT1JEX1JFQURZX1BSSU9SSVRZKCB1eFByaW9yaXR5LCB1eFJlYWR5UHJpb3JpdGllcyApICAgICggdXhSZWFkeVByaW9yaXRpZXMgKSB8PSAoIDFVTCA8PCAoIHV4UHJpb3JpdHkgKSApDQotICAgICAgICAjZGVmaW5lIHBvcnRSRVNFVF9SRUFEWV9QUklPUklUWSggdXhQcmlvcml0eSwgdXhSZWFkeVByaW9yaXRpZXMgKSAgICAgKCB1eFJlYWR5UHJpb3JpdGllcyApICY9IH4oIDFVTCA8PCAoIHV4UHJpb3JpdHkgKSApDQorCS8qIFN0b3JlL2NsZWFyIHRoZSByZWFkeSBwcmlvcml0aWVzIGluIGEgYml0IG1hcC4gKi8NCisJI2RlZmluZSBwb3J0UkVDT1JEX1JFQURZX1BSSU9SSVRZKCB1eFByaW9yaXR5LCB1eFJlYWR5UHJpb3JpdGllcyApICggdXhSZWFkeVByaW9yaXRpZXMgKSB8PSAoIDFVTCA8PCAoIHV4UHJpb3JpdHkgKSApDQorCSNkZWZpbmUgcG9ydFJFU0VUX1JFQURZX1BSSU9SSVRZKCB1eFByaW9yaXR5LCB1eFJlYWR5UHJpb3JpdGllcyApICggdXhSZWFkeVByaW9yaXRpZXMgKSAmPSB+KCAxVUwgPDwgKCB1eFByaW9yaXR5ICkgKQ0KIA0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0gICAgICAgICNkZWZpbmUgcG9ydEdFVF9ISUdIRVNUX1BSSU9SSVRZKCB1eFRvcFByaW9yaXR5LCB1eFJlYWR5UHJpb3JpdGllcyApICAgIHV4VG9wUHJpb3JpdHkgPSAoIDMxVUwgLSAoIHVpbnQzMl90ICkgX19DTFooIHV4UmVhZHlQcmlvcml0aWVzICkgKQ0KKwkjZGVmaW5lIHBvcnRHRVRfSElHSEVTVF9QUklPUklUWSggdXhUb3BQcmlvcml0eSwgdXhSZWFkeVByaW9yaXRpZXMgKSB1eFRvcFByaW9yaXR5ID0gKCAzMVVMIC0gKCB1aW50MzJfdCApIF9fQ0xaKCB1eFJlYWR5UHJpb3JpdGllcyApICkNCiANCi0gICAgI2VuZGlmIC8qIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiAqLw0KKyNlbmRpZiAvKiBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gKi8NCiANCi0gICAgI2RlZmluZSBwb3J0Tk9QKCkgICAgX19hc20gdm9sYXRpbGUgKCAiTk9QIiApDQotICAgICNkZWZpbmUgcG9ydElOTElORSAgICBpbmxpbmUNCisjZGVmaW5lIHBvcnROT1AoKSBfX2FzbSB2b2xhdGlsZSggIk5PUCIgKQ0KKyNkZWZpbmUgcG9ydElOTElORSBpbmxpbmUNCiANCiAvKiBTdXBwcmVzcyB3YXJuaW5ncyB0aGF0IGFyZSBnZW5lcmF0ZWQgYnkgdGhlIElBUiB0b29scywgYnV0IGNhbm5vdCBiZSBmaXhlZCBpbg0KLSAqIHRoZSBzb3VyY2UgY29kZSBiZWNhdXNlIHRvIGRvIHNvIHdvdWxkIGNhdXNlIG90aGVyIGNvbXBpbGVycyB0byBnZW5lcmF0ZQ0KLSAqIHdhcm5pbmdzLiAqLw0KLSAgICAjcHJhZ21hIGRpYWdfc3VwcHJlc3M9UGUxOTENCi0gICAgI3ByYWdtYSBkaWFnX3N1cHByZXNzPVBhMDgyDQordGhlIHNvdXJjZSBjb2RlIGJlY2F1c2UgdG8gZG8gc28gd291bGQgY2F1c2Ugb3RoZXIgY29tcGlsZXJzIHRvIGdlbmVyYXRlDQord2FybmluZ3MuICovDQorI3ByYWdtYSBkaWFnX3N1cHByZXNzPVBlMTkxDQorI3ByYWdtYSBkaWFnX3N1cHByZXNzPVBhMDgyDQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgfSAvKiBleHRlcm4gQyAqLw0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCisJfSAvKiBleHRlcm4gQyAqLw0KKyNlbmRpZg0KIA0KIA0KICNlbmRpZiAvKiBQT1JUTUFDUk9fSCAqLw0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0lBUi9BVE1lZ2EzMjMvcG9ydC5jIGIvcG9ydGFibGUvSUFSL0FUTWVnYTMyMy9wb3J0LmMKaW5kZXggM2Y0NDg4Ni4uYmM5Y2U5ZiAxMDA2NDQKLS0tIGEvcG9ydGFibGUvSUFSL0FUTWVnYTMyMy9wb3J0LmMKKysrIGIvcG9ydGFibGUvSUFSL0FUTWVnYTMyMy9wb3J0LmMKQEAgLTMxLDI1ICszMSwyNSBAQAogI2luY2x1ZGUgInRhc2suaCINCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgQVZSL0lBUiBwb3J0Lg0KLSotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgQVZSL0lBUiBwb3J0Lg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogU3RhcnQgdGFza3Mgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZXMuICovDQotI2RlZmluZSBwb3J0RkxBR1NfSU5UX0VOQUJMRUQgICAgICAgICAgICAgICAgICAgKCAoIFN0YWNrVHlwZV90ICkgMHg4MCApDQorI2RlZmluZSBwb3J0RkxBR1NfSU5UX0VOQUJMRUQJCQkJCSggKCBTdGFja1R5cGVfdCApIDB4ODAgKQ0KIA0KIC8qIEhhcmR3YXJlIGNvbnN0YW50cyBmb3IgdGltZXIgMS4gKi8NCi0jZGVmaW5lIHBvcnRDTEVBUl9DT1VOVEVSX09OX01BVENIICAgICAgICAgICAgICAoICggdWludDhfdCApIDB4MDggKQ0KLSNkZWZpbmUgcG9ydFBSRVNDQUxFXzY0ICAgICAgICAgICAgICAgICAgICAgICAgICggKCB1aW50OF90ICkgMHgwMyApDQotI2RlZmluZSBwb3J0Q0xPQ0tfUFJFU0NBTEVSICAgICAgICAgICAgICAgICAgICAgKCAoIHVpbnQzMl90ICkgNjQgKQ0KLSNkZWZpbmUgcG9ydENPTVBBUkVfTUFUQ0hfQV9JTlRFUlJVUFRfRU5BQkxFICAgICggKCB1aW50OF90ICkgMHgxMCApDQorI2RlZmluZSBwb3J0Q0xFQVJfQ09VTlRFUl9PTl9NQVRDSAkJCQkoICggdWludDhfdCApIDB4MDggKQ0KKyNkZWZpbmUgcG9ydFBSRVNDQUxFXzY0CQkJCQkJCSggKCB1aW50OF90ICkgMHgwMyApDQorI2RlZmluZSBwb3J0Q0xPQ0tfUFJFU0NBTEVSCQkJCQkJKCAoIHVpbnQzMl90ICkgNjQgKQ0KKyNkZWZpbmUgcG9ydENPTVBBUkVfTUFUQ0hfQV9JTlRFUlJVUFRfRU5BQkxFCSggKCB1aW50OF90ICkgMHgxMCApDQogDQogLyogVGhlIG51bWJlciBvZiBieXRlcyB1c2VkIG9uIHRoZSBoYXJkd2FyZSBzdGFjayBieSB0aGUgdGFzayBzdGFydCBhZGRyZXNzLiAqLw0KLSNkZWZpbmUgcG9ydEJZVEVTX1VTRURfQllfUkVUVVJOX0FERFJFU1MgICAgICAgICggMiApDQorI2RlZmluZSBwb3J0QllURVNfVVNFRF9CWV9SRVRVUk5fQUREUkVTUwkJKCAyICkNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBTdG9yZXMgdGhlIGNyaXRpY2FsIHNlY3Rpb24gbmVzdGluZy4gIFRoaXMgbXVzdCBub3QgYmUgaW5pdGlhbGlzZWQgdG8gMC4NCi0gKiBJdCB3aWxsIGJlIGluaXRpYWxpc2VkIHdoZW4gYSB0YXNrIHN0YXJ0cy4gKi8NCi0jZGVmaW5lIHBvcnROT19DUklUSUNBTF9ORVNUSU5HICAgICggKCBVQmFzZVR5cGVfdCApIDAgKQ0KK0l0IHdpbGwgYmUgaW5pdGlhbGlzZWQgd2hlbiBhIHRhc2sgc3RhcnRzLiAqLw0KKyNkZWZpbmUgcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcJCQkJCSggKCBVQmFzZVR5cGVfdCApIDAgKQ0KIFVCYXNlVHlwZV90IHV4Q3JpdGljYWxOZXN0aW5nID0gMHg1MDsNCiANCiANCkBAIC03MCwxODcgKzcwLDE4NiBAQAogLyoNCiAgKiBTZWUgaGVhZGVyIGZpbGUgZm9yIGRlc2NyaXB0aW9uLg0KICAqLw0KLVN0YWNrVHlwZV90ICogcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqIHB4VG9wT2ZTdGFjaywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFza0Z1bmN0aW9uX3QgcHhDb2RlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICogcHZQYXJhbWV0ZXJzICkNCitTdGFja1R5cGVfdCAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqcHhUb3BPZlN0YWNrLCBUYXNrRnVuY3Rpb25fdCBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycyApDQogew0KLSAgICB1aW50MTZfdCB1c0FkZHJlc3M7DQotICAgIFN0YWNrVHlwZV90ICogcHhUb3BPZkhhcmR3YXJlU3RhY2s7DQordWludDE2X3QgdXNBZGRyZXNzOw0KK1N0YWNrVHlwZV90ICpweFRvcE9mSGFyZHdhcmVTdGFjazsNCiANCi0gICAgLyogUGxhY2UgYSBmZXcgYnl0ZXMgb2Yga25vd24gdmFsdWVzIG9uIHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLg0KLSAgICAgKiBUaGlzIGlzIGp1c3QgdXNlZnVsIGZvciBkZWJ1Z2dpbmcuICovDQorCS8qIFBsYWNlIGEgZmV3IGJ5dGVzIG9mIGtub3duIHZhbHVlcyBvbiB0aGUgYm90dG9tIG9mIHRoZSBzdGFjay4NCisJVGhpcyBpcyBqdXN0IHVzZWZ1bCBmb3IgZGVidWdnaW5nLiAqLw0KIA0KLSAgICAqcHhUb3BPZlN0YWNrID0gMHgxMTsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAweDIyOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MzM7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgxMTsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDIyOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MzM7DQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBSZW1lbWJlciB3aGVyZSB0aGUgdG9wIG9mIHRoZSBoYXJkd2FyZSBzdGFjayBpcyAtIHRoaXMgaXMgcmVxdWlyZWQNCi0gICAgICogYmVsb3cuICovDQotICAgIHB4VG9wT2ZIYXJkd2FyZVN0YWNrID0gcHhUb3BPZlN0YWNrOw0KKwkvKiBSZW1lbWJlciB3aGVyZSB0aGUgdG9wIG9mIHRoZSBoYXJkd2FyZSBzdGFjayBpcyAtIHRoaXMgaXMgcmVxdWlyZWQNCisJYmVsb3cuICovDQorCXB4VG9wT2ZIYXJkd2FyZVN0YWNrID0gcHhUb3BPZlN0YWNrOw0KIA0KIA0KLSAgICAvKiBTaW11bGF0ZSBob3cgdGhlIHN0YWNrIHdvdWxkIGxvb2sgYWZ0ZXIgYSBjYWxsIHRvIHZQb3J0WWllbGQoKS4gKi8NCisJLyogU2ltdWxhdGUgaG93IHRoZSBzdGFjayB3b3VsZCBsb29rIGFmdGVyIGEgY2FsbCB0byB2UG9ydFlpZWxkKCkuICovDQogDQotICAgIC8qbGludCAtZTk1MCAtZTYxMSAtZTkyMyBMaW50IGRvZXNuJ3QgbGlrZSB0aGlzIG11Y2ggLSBidXQgbm90aGluZyBJIGNhbiBkbyBhYm91dCBpdC4gKi8NCisJLypsaW50IC1lOTUwIC1lNjExIC1lOTIzIExpbnQgZG9lc24ndCBsaWtlIHRoaXMgbXVjaCAtIGJ1dCBub3RoaW5nIEkgY2FuIGRvIGFib3V0IGl0LiAqLw0KIA0KIA0KIA0KLSAgICAvKiBUaGUgSUFSIGNvbXBpbGVyIHJlcXVpcmVzIHR3byBzdGFja3MgcGVyIHRhc2suICBGaXJzdCB0aGVyZSBpcyB0aGUNCi0gICAgICogaGFyZHdhcmUgY2FsbCBzdGFjayB3aGljaCB1c2VzIHRoZSBBVlIgc3RhY2sgcG9pbnRlci4gIFNlY29uZCB0aGVyZSBpcyB0aGUNCi0gICAgICogc29mdHdhcmUgc3RhY2sgKGxvY2FsIHZhcmlhYmxlcywgcGFyYW1ldGVyIHBhc3NpbmcsIGV0Yy4pIHdoaWNoIHVzZXMgdGhlDQotICAgICAqIEFWUiBZIHJlZ2lzdGVyLg0KLSAgICAgKg0KLSAgICAgKiBUaGlzIGZ1bmN0aW9uIHBsYWNlcyBib3RoIHN0YWNrcyB3aXRoaW4gdGhlIG1lbW9yeSBibG9jayBwYXNzZWQgaW4gYXMgdGhlDQotICAgICAqIGZpcnN0IHBhcmFtZXRlci4gIFRoZSBoYXJkd2FyZSBzdGFjayBpcyBwbGFjZWQgYXQgdGhlIGJvdHRvbSBvZiB0aGUgbWVtb3J5DQotICAgICAqIGJsb2NrLiAgQSBnYXAgaXMgdGhlbiBsZWZ0IGZvciB0aGUgaGFyZHdhcmUgc3RhY2sgdG8gZ3Jvdy4gIE5leHQgdGhlIHNvZnR3YXJlDQotICAgICAqIHN0YWNrIGlzIHBsYWNlZC4gIFRoZSBhbW91bnQgb2Ygc3BhY2UgYmV0d2VlbiB0aGUgc29mdHdhcmUgYW5kIGhhcmR3YXJlDQotICAgICAqIHN0YWNrcyBpcyBkZWZpbmVkIGJ5IGNvbmZpZ0NBTExfU1RBQ0tfU0laRS4NCi0gICAgICoNCi0gICAgICoNCi0gICAgICoNCi0gICAgICogVGhlIGZpcnN0IHBhcnQgb2YgdGhlIHN0YWNrIGlzIHRoZSBoYXJkd2FyZSBzdGFjay4gIFBsYWNlIHRoZSBzdGFydA0KLSAgICAgKiBhZGRyZXNzIG9mIHRoZSB0YXNrIG9uIHRoZSBoYXJkd2FyZSBzdGFjay4gKi8NCi0gICAgdXNBZGRyZXNzID0gKCB1aW50MTZfdCApIHB4Q29kZTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAoIHVzQWRkcmVzcyAmICggdWludDE2X3QgKSAweDAwZmYgKTsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIFRoZSBJQVIgY29tcGlsZXIgcmVxdWlyZXMgdHdvIHN0YWNrcyBwZXIgdGFzay4gIEZpcnN0IHRoZXJlIGlzIHRoZQ0KKwloYXJkd2FyZSBjYWxsIHN0YWNrIHdoaWNoIHVzZXMgdGhlIEFWUiBzdGFjayBwb2ludGVyLiAgU2Vjb25kIHRoZXJlIGlzIHRoZQ0KKwlzb2Z0d2FyZSBzdGFjayAobG9jYWwgdmFyaWFibGVzLCBwYXJhbWV0ZXIgcGFzc2luZywgZXRjLikgd2hpY2ggdXNlcyB0aGUNCisJQVZSIFkgcmVnaXN0ZXIuDQogDQotICAgIHVzQWRkcmVzcyA+Pj0gODsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAoIHVzQWRkcmVzcyAmICggdWludDE2X3QgKSAweDAwZmYgKTsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQotDQotDQotICAgIC8qIExlYXZlIGVub3VnaCBzcGFjZSBmb3IgdGhlIGhhcmR3YXJlIHN0YWNrIGJlZm9yZSBzdGFydGluZyB0aGUgc29mdHdhcmUNCi0gICAgICogc3RhY2suICBUaGUgJy0gMicgaXMgYmVjYXVzZSB3ZSBoYXZlIGFscmVhZHkgdXNlZCB0d28gc3BhY2VzIGZvciB0aGUNCi0gICAgICogYWRkcmVzcyBvZiB0aGUgc3RhcnQgb2YgdGhlIHRhc2suICovDQotICAgIHB4VG9wT2ZTdGFjayAtPSAoIGNvbmZpZ0NBTExfU1RBQ0tfU0laRSAtIDIgKTsNCisJVGhpcyBmdW5jdGlvbiBwbGFjZXMgYm90aCBzdGFja3Mgd2l0aGluIHRoZSBtZW1vcnkgYmxvY2sgcGFzc2VkIGluIGFzIHRoZQ0KKwlmaXJzdCBwYXJhbWV0ZXIuICBUaGUgaGFyZHdhcmUgc3RhY2sgaXMgcGxhY2VkIGF0IHRoZSBib3R0b20gb2YgdGhlIG1lbW9yeQ0KKwlibG9jay4gIEEgZ2FwIGlzIHRoZW4gbGVmdCBmb3IgdGhlIGhhcmR3YXJlIHN0YWNrIHRvIGdyb3cuICBOZXh0IHRoZSBzb2Z0d2FyZQ0KKwlzdGFjayBpcyBwbGFjZWQuICBUaGUgYW1vdW50IG9mIHNwYWNlIGJldHdlZW4gdGhlIHNvZnR3YXJlIGFuZCBoYXJkd2FyZQ0KKwlzdGFja3MgaXMgZGVmaW5lZCBieSBjb25maWdDQUxMX1NUQUNLX1NJWkUuDQogDQogDQogDQotICAgIC8qIE5leHQgc2ltdWxhdGUgdGhlIHN0YWNrIGFzIGlmIGFmdGVyIGEgY2FsbCB0byBwb3J0U0FWRV9DT05URVhUKCkuDQotICAgICAqICBwb3J0U0FWRV9DT05URVhUIHBsYWNlcyB0aGUgZmxhZ3Mgb24gdGhlIHN0YWNrIGltbWVkaWF0ZWx5IGFmdGVyIHIwDQotICAgICAqICB0byBlbnN1cmUgdGhlIGludGVycnVwdHMgZ2V0IGRpc2FibGVkIGFzIHNvb24gYXMgcG9zc2libGUsIGFuZCBzbyBlbnN1cmluZw0KLSAgICAgKiAgdGhlIHN0YWNrIHVzZSBpcyBtaW5pbWFsIHNob3VsZCBhIGNvbnRleHQgc3dpdGNoIGludGVycnVwdCBvY2N1ci4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAwOyAvKiBSMCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IHBvcnRGTEFHU19JTlRfRU5BQkxFRDsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCVRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBzdGFjayBpcyB0aGUgaGFyZHdhcmUgc3RhY2suICBQbGFjZSB0aGUgc3RhcnQNCisJYWRkcmVzcyBvZiB0aGUgdGFzayBvbiB0aGUgaGFyZHdhcmUgc3RhY2suICovDQorCXVzQWRkcmVzcyA9ICggdWludDE2X3QgKSBweENvZGU7DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgKCB1c0FkZHJlc3MgJiAoIHVpbnQxNl90ICkgMHgwMGZmICk7DQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBOZXh0IHBsYWNlIHRoZSBhZGRyZXNzIG9mIHRoZSBoYXJkd2FyZSBzdGFjay4gIFRoaXMgaXMgcmVxdWlyZWQgc28NCi0gICAgICogdGhlIEFWUiBzdGFjayBwb2ludGVyIGNhbiBiZSByZXN0b3JlZCB0byBwb2ludCB0byB0aGUgaGFyZHdhcmUgc3RhY2suICovDQotICAgIHB4VG9wT2ZIYXJkd2FyZVN0YWNrIC09IHBvcnRCWVRFU19VU0VEX0JZX1JFVFVSTl9BRERSRVNTOw0KLSAgICB1c0FkZHJlc3MgPSAoIHVpbnQxNl90ICkgcHhUb3BPZkhhcmR3YXJlU3RhY2s7DQorCXVzQWRkcmVzcyA+Pj0gODsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAoIHVzQWRkcmVzcyAmICggdWludDE2X3QgKSAweDAwZmYgKTsNCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgIC8qIFNQTCAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApICggdXNBZGRyZXNzICYgKCB1aW50MTZfdCApIDB4MDBmZiApOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCiANCi0gICAgLyogU1BIICovDQotICAgIHVzQWRkcmVzcyA+Pj0gODsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAoIHVzQWRkcmVzcyAmICggdWludDE2X3QgKSAweDAwZmYgKTsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIExlYXZlIGVub3VnaCBzcGFjZSBmb3IgdGhlIGhhcmR3YXJlIHN0YWNrIGJlZm9yZSBzdGFydGluZyB0aGUgc29mdHdhcmUNCisJc3RhY2suICBUaGUgJy0gMicgaXMgYmVjYXVzZSB3ZSBoYXZlIGFscmVhZHkgdXNlZCB0d28gc3BhY2VzIGZvciB0aGUNCisJYWRkcmVzcyBvZiB0aGUgc3RhcnQgb2YgdGhlIHRhc2suICovDQorCXB4VG9wT2ZTdGFjayAtPSAoIGNvbmZpZ0NBTExfU1RBQ0tfU0laRSAtIDIgKTsNCiANCiANCiANCi0gICAgLyogTm93IHRoZSByZW1haW5pbmcgcmVnaXN0ZXJzLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDE7IC8qIFIxICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDI7IC8qIFIyICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDM7IC8qIFIzICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDQ7IC8qIFI0ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDU7IC8qIFI1ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDY7IC8qIFI2ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDc7IC8qIFI3ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDg7IC8qIFI4ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDk7IC8qIFI5ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTA7IC8qIFIxMCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDExOyAvKiBSMTEgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMjsgLyogUjEyICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTM7IC8qIFIxMyAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDE0OyAvKiBSMTQgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxNTsgLyogUjE1ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkvKiBOZXh0IHNpbXVsYXRlIHRoZSBzdGFjayBhcyBpZiBhZnRlciBhIGNhbGwgdG8gcG9ydFNBVkVfQ09OVEVYVCgpLg0KKwlwb3J0U0FWRV9DT05URVhUIHBsYWNlcyB0aGUgZmxhZ3Mgb24gdGhlIHN0YWNrIGltbWVkaWF0ZWx5IGFmdGVyIHIwDQorCXRvIGVuc3VyZSB0aGUgaW50ZXJydXB0cyBnZXQgZGlzYWJsZWQgYXMgc29vbiBhcyBwb3NzaWJsZSwgYW5kIHNvIGVuc3VyaW5nDQorCXRoZSBzdGFjayB1c2UgaXMgbWluaW1hbCBzaG91bGQgYSBjb250ZXh0IHN3aXRjaCBpbnRlcnJ1cHQgb2NjdXIuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMDsJLyogUjAgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSBwb3J0RkxBR1NfSU5UX0VOQUJMRUQ7DQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBQbGFjZSB0aGUgcGFyYW1ldGVyIG9uIHRoZSBzdGFjayBpbiB0aGUgZXhwZWN0ZWQgbG9jYXRpb24uICovDQotICAgIHVzQWRkcmVzcyA9ICggdWludDE2X3QgKSBwdlBhcmFtZXRlcnM7DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgKCB1c0FkZHJlc3MgJiAoIHVpbnQxNl90ICkgMHgwMGZmICk7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkvKiBOZXh0IHBsYWNlIHRoZSBhZGRyZXNzIG9mIHRoZSBoYXJkd2FyZSBzdGFjay4gIFRoaXMgaXMgcmVxdWlyZWQgc28NCisJdGhlIEFWUiBzdGFjayBwb2ludGVyIGNhbiBiZSByZXN0b3JlZCB0byBwb2ludCB0byB0aGUgaGFyZHdhcmUgc3RhY2suICovDQorCXB4VG9wT2ZIYXJkd2FyZVN0YWNrIC09IHBvcnRCWVRFU19VU0VEX0JZX1JFVFVSTl9BRERSRVNTOw0KKwl1c0FkZHJlc3MgPSAoIHVpbnQxNl90ICkgcHhUb3BPZkhhcmR3YXJlU3RhY2s7DQogDQotICAgIHVzQWRkcmVzcyA+Pj0gODsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAoIHVzQWRkcmVzcyAmICggdWludDE2X3QgKSAweDAwZmYgKTsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIFNQTCAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApICggdXNBZGRyZXNzICYgKCB1aW50MTZfdCApIDB4MDBmZiApOw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDE4OyAvKiBSMTggKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxOTsgLyogUjE5ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MjA7IC8qIFIyMCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDIxOyAvKiBSMjEgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgyMjsgLyogUjIyICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MjM7IC8qIFIyMyAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDI0OyAvKiBSMjQgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgyNTsgLyogUjI1ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MjY7IC8qIFIyNiBYICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4Mjc7IC8qIFIyNyAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJLyogU1BIICovDQorCXVzQWRkcmVzcyA+Pj0gODsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAoIHVzQWRkcmVzcyAmICggdWludDE2X3QgKSAweDAwZmYgKTsNCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgIC8qIFRoZSBZIHJlZ2lzdGVyIGlzIG5vdCBzdG9yZWQgYXMgaXQgaXMgdXNlZCBhcyB0aGUgc29mdHdhcmUgc3RhY2sgYW5kDQotICAgICAqIGdldHMgc2F2ZWQgaW50byB0aGUgdGFzayBjb250cm9sIGJsb2NrLiAqLw0KIA0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MzA7ICAvKiBSMzAgWiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAzMTsgLyogUjMxICovDQogDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkc7IC8qIENyaXRpY2FsIG5lc3RpbmcgaXMgemVybyB3aGVuIHRoZSB0YXNrIHN0YXJ0cy4gKi8NCiANCi0gICAgLypsaW50ICtlOTUwICtlNjExICtlOTIzICovDQorCS8qIE5vdyB0aGUgcmVtYWluaW5nIHJlZ2lzdGVycy4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAxOwkvKiBSMSAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAyOwkvKiBSMiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAzOwkvKiBSMyAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA0OwkvKiBSNCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA1OwkvKiBSNSAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA2OwkvKiBSNiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA3OwkvKiBSNyAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA4OwkvKiBSOCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA5OwkvKiBSOSAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDEwOwkvKiBSMTAgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMTsJLyogUjExICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTI7CS8qIFIxMiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDEzOwkvKiBSMTMgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxNDsJLyogUjE0ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTU7CS8qIFIxNSAqLw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgcmV0dXJuIHB4VG9wT2ZTdGFjazsNCisJLyogUGxhY2UgdGhlIHBhcmFtZXRlciBvbiB0aGUgc3RhY2sgaW4gdGhlIGV4cGVjdGVkIGxvY2F0aW9uLiAqLw0KKwl1c0FkZHJlc3MgPSAoIHVpbnQxNl90ICkgcHZQYXJhbWV0ZXJzOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApICggdXNBZGRyZXNzICYgKCB1aW50MTZfdCApIDB4MDBmZiApOw0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJdXNBZGRyZXNzID4+PSA4Ow0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApICggdXNBZGRyZXNzICYgKCB1aW50MTZfdCApIDB4MDBmZiApOw0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDE4OwkvKiBSMTggKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxOTsJLyogUjE5ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MjA7CS8qIFIyMCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDIxOwkvKiBSMjEgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgyMjsJLyogUjIyICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MjM7CS8qIFIyMyAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDI0OwkvKiBSMjQgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgyNTsJLyogUjI1ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MjY7CS8qIFIyNiBYICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4Mjc7CS8qIFIyNyAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisNCisJLyogVGhlIFkgcmVnaXN0ZXIgaXMgbm90IHN0b3JlZCBhcyBpdCBpcyB1c2VkIGFzIHRoZSBzb2Z0d2FyZSBzdGFjayBhbmQNCisJZ2V0cyBzYXZlZCBpbnRvIHRoZSB0YXNrIGNvbnRyb2wgYmxvY2suICovDQorDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgzMDsJLyogUjMwIFogKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMzE7CS8qIFIzMSAqLw0KKw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IHBvcnROT19DUklUSUNBTF9ORVNUSU5HOwkvKiBDcml0aWNhbCBuZXN0aW5nIGlzIHplcm8gd2hlbiB0aGUgdGFzayBzdGFydHMuICovDQorDQorCS8qbGludCArZTk1MCArZTYxMSArZTkyMyAqLw0KKw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBCYXNlVHlwZV90IHhQb3J0U3RhcnRTY2hlZHVsZXIoIHZvaWQgKQ0KIHsNCi0gICAgLyogU2V0dXAgdGhlIGhhcmR3YXJlIHRvIGdlbmVyYXRlIHRoZSB0aWNrLiAqLw0KLSAgICBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCk7DQorCS8qIFNldHVwIHRoZSBoYXJkd2FyZSB0byBnZW5lcmF0ZSB0aGUgdGljay4gKi8NCisJcHJ2U2V0dXBUaW1lckludGVycnVwdCgpOw0KIA0KLSAgICAvKiBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBmaXJzdCB0YXNrIHRoYXQgaXMgZ29pbmcgdG8gcnVuLg0KLSAgICAgKiBOb3JtYWxseSB3ZSB3b3VsZCBqdXN0IGNhbGwgcG9ydFJFU1RPUkVfQ09OVEVYVCgpIGhlcmUsIGJ1dCBhcyB0aGUgSUFSDQotICAgICAqIGNvbXBpbGVyIGRvZXMgbm90IGZ1bGx5IHN1cHBvcnQgaW5saW5lIGFzc2VtYmxlciB3ZSBoYXZlIHRvIG1ha2UgYSBjYWxsLiovDQotICAgIHZQb3J0U3RhcnQoKTsNCisJLyogUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgZmlyc3QgdGFzayB0aGF0IGlzIGdvaW5nIHRvIHJ1bi4NCisJTm9ybWFsbHkgd2Ugd291bGQganVzdCBjYWxsIHBvcnRSRVNUT1JFX0NPTlRFWFQoKSBoZXJlLCBidXQgYXMgdGhlIElBUg0KKwljb21waWxlciBkb2VzIG5vdCBmdWxseSBzdXBwb3J0IGlubGluZSBhc3NlbWJsZXIgd2UgaGF2ZSB0byBtYWtlIGEgY2FsbC4qLw0KKwl2UG9ydFN0YXJ0KCk7DQogDQotICAgIC8qIFNob3VsZCBub3QgZ2V0IGhlcmUhICovDQotICAgIHJldHVybiBwZFRSVUU7DQorCS8qIFNob3VsZCBub3QgZ2V0IGhlcmUhICovDQorCXJldHVybiBwZFRSVUU7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQ0KIHsNCi0gICAgLyogSXQgaXMgdW5saWtlbHkgdGhhdCB0aGUgQVZSIHBvcnQgd2lsbCBnZXQgc3RvcHBlZC4gIElmIHJlcXVpcmVkIHNpbXBseQ0KLSAgICAgKiBkaXNhYmxlIHRoZSB0aWNrIGludGVycnVwdCBoZXJlLiAqLw0KKwkvKiBJdCBpcyB1bmxpa2VseSB0aGF0IHRoZSBBVlIgcG9ydCB3aWxsIGdldCBzdG9wcGVkLiAgSWYgcmVxdWlyZWQgc2ltcGx5DQorCWRpc2FibGUgdGhlIHRpY2sgaW50ZXJydXB0IGhlcmUuICovDQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KQEAgLTI1OSw4MSArMjU4LDgyIEBACiAgKi8NCiBzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICkNCiB7DQotICAgIHVpbnQzMl90IHVsQ29tcGFyZU1hdGNoOw0KLSAgICB1aW50OF90IHVjSGlnaEJ5dGUsIHVjTG93Qnl0ZTsNCit1aW50MzJfdCB1bENvbXBhcmVNYXRjaDsNCit1aW50OF90IHVjSGlnaEJ5dGUsIHVjTG93Qnl0ZTsNCiANCi0gICAgLyogVXNpbmcgMTZiaXQgdGltZXIgMSB0byBnZW5lcmF0ZSB0aGUgdGljay4gIENvcnJlY3QgZnVzZXMgbXVzdCBiZQ0KLSAgICAgKiBzZWxlY3RlZCBmb3IgdGhlIGNvbmZpZ0NQVV9DTE9DS19IWiBjbG9jay4gKi8NCisJLyogVXNpbmcgMTZiaXQgdGltZXIgMSB0byBnZW5lcmF0ZSB0aGUgdGljay4gIENvcnJlY3QgZnVzZXMgbXVzdCBiZQ0KKwlzZWxlY3RlZCBmb3IgdGhlIGNvbmZpZ0NQVV9DTE9DS19IWiBjbG9jay4gKi8NCiANCi0gICAgdWxDb21wYXJlTWF0Y2ggPSBjb25maWdDUFVfQ0xPQ0tfSFogLyBjb25maWdUSUNLX1JBVEVfSFo7DQorCXVsQ29tcGFyZU1hdGNoID0gY29uZmlnQ1BVX0NMT0NLX0haIC8gY29uZmlnVElDS19SQVRFX0haOw0KIA0KLSAgICAvKiBXZSBvbmx5IGhhdmUgMTYgYml0cyBzbyBoYXZlIHRvIHNjYWxlIHRvIGdldCBvdXIgcmVxdWlyZWQgdGljayByYXRlLiAqLw0KLSAgICB1bENvbXBhcmVNYXRjaCAvPSBwb3J0Q0xPQ0tfUFJFU0NBTEVSOw0KKwkvKiBXZSBvbmx5IGhhdmUgMTYgYml0cyBzbyBoYXZlIHRvIHNjYWxlIHRvIGdldCBvdXIgcmVxdWlyZWQgdGljayByYXRlLiAqLw0KKwl1bENvbXBhcmVNYXRjaCAvPSBwb3J0Q0xPQ0tfUFJFU0NBTEVSOw0KIA0KLSAgICAvKiBBZGp1c3QgZm9yIGNvcnJlY3QgdmFsdWUuICovDQotICAgIHVsQ29tcGFyZU1hdGNoIC09ICggdWludDMyX3QgKSAxOw0KKwkvKiBBZGp1c3QgZm9yIGNvcnJlY3QgdmFsdWUuICovDQorCXVsQ29tcGFyZU1hdGNoIC09ICggdWludDMyX3QgKSAxOw0KIA0KLSAgICAvKiBTZXR1cCBjb21wYXJlIG1hdGNoIHZhbHVlIGZvciBjb21wYXJlIG1hdGNoIEEuICBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZA0KLSAgICAgKiBiZWZvcmUgdGhpcyBpcyBjYWxsZWQgc28gd2UgbmVlZCBub3Qgd29ycnkgaGVyZS4gKi8NCi0gICAgdWNMb3dCeXRlID0gKCB1aW50OF90ICkgKCB1bENvbXBhcmVNYXRjaCAmICggdWludDMyX3QgKSAweGZmICk7DQotICAgIHVsQ29tcGFyZU1hdGNoID4+PSA4Ow0KLSAgICB1Y0hpZ2hCeXRlID0gKCB1aW50OF90ICkgKCB1bENvbXBhcmVNYXRjaCAmICggdWludDMyX3QgKSAweGZmICk7DQotICAgIE9DUjFBSCA9IHVjSGlnaEJ5dGU7DQotICAgIE9DUjFBTCA9IHVjTG93Qnl0ZTsNCisJLyogU2V0dXAgY29tcGFyZSBtYXRjaCB2YWx1ZSBmb3IgY29tcGFyZSBtYXRjaCBBLiAgSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQNCisJYmVmb3JlIHRoaXMgaXMgY2FsbGVkIHNvIHdlIG5lZWQgbm90IHdvcnJ5IGhlcmUuICovDQorCXVjTG93Qnl0ZSA9ICggdWludDhfdCApICggdWxDb21wYXJlTWF0Y2ggJiAoIHVpbnQzMl90ICkgMHhmZiApOw0KKwl1bENvbXBhcmVNYXRjaCA+Pj0gODsNCisJdWNIaWdoQnl0ZSA9ICggdWludDhfdCApICggdWxDb21wYXJlTWF0Y2ggJiAoIHVpbnQzMl90ICkgMHhmZiApOw0KKwlPQ1IxQUggPSB1Y0hpZ2hCeXRlOw0KKwlPQ1IxQUwgPSB1Y0xvd0J5dGU7DQogDQotICAgIC8qIFNldHVwIGNsb2NrIHNvdXJjZSBhbmQgY29tcGFyZSBtYXRjaCBiZWhhdmlvdXIuICovDQotICAgIHVjTG93Qnl0ZSA9IHBvcnRDTEVBUl9DT1VOVEVSX09OX01BVENIIHwgcG9ydFBSRVNDQUxFXzY0Ow0KLSAgICBUQ0NSMUIgPSB1Y0xvd0J5dGU7DQorCS8qIFNldHVwIGNsb2NrIHNvdXJjZSBhbmQgY29tcGFyZSBtYXRjaCBiZWhhdmlvdXIuICovDQorCXVjTG93Qnl0ZSA9IHBvcnRDTEVBUl9DT1VOVEVSX09OX01BVENIIHwgcG9ydFBSRVNDQUxFXzY0Ow0KKwlUQ0NSMUIgPSB1Y0xvd0J5dGU7DQogDQotICAgIC8qIEVuYWJsZSB0aGUgaW50ZXJydXB0IC0gdGhpcyBpcyBva2F5IGFzIGludGVycnVwdCBhcmUgY3VycmVudGx5IGdsb2JhbGx5DQotICAgICAqIGRpc2FibGVkLiAqLw0KLSAgICBUSU1TSyB8PSBwb3J0Q09NUEFSRV9NQVRDSF9BX0lOVEVSUlVQVF9FTkFCTEU7DQorCS8qIEVuYWJsZSB0aGUgaW50ZXJydXB0IC0gdGhpcyBpcyBva2F5IGFzIGludGVycnVwdCBhcmUgY3VycmVudGx5IGdsb2JhbGx5DQorCWRpc2FibGVkLiAqLw0KKwlUSU1TSyB8PSBwb3J0Q09NUEFSRV9NQVRDSF9BX0lOVEVSUlVQVF9FTkFCTEU7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KICNpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAxDQogDQotLyoNCi0gKiBUaWNrIElTUiBmb3IgcHJlZW1wdGl2ZSBzY2hlZHVsZXIuICBXZSBjYW4gdXNlIGEgX190YXNrIGF0dHJpYnV0ZSBhcw0KLSAqIHRoZSBjb250ZXh0IGlzIHNhdmVkIGF0IHRoZSBzdGFydCBvZiB2UG9ydFlpZWxkRnJvbVRpY2soKS4gIFRoZSB0aWNrDQotICogY291bnQgaXMgaW5jcmVtZW50ZWQgYWZ0ZXIgdGhlIGNvbnRleHQgaXMgc2F2ZWQuDQotICovDQotICAgIF9fdGFzayB2b2lkIFNJR19PVVRQVVRfQ09NUEFSRTFBKCB2b2lkICkNCi0gICAgew0KLSAgICAgICAgdlBvcnRZaWVsZEZyb21UaWNrKCk7DQotICAgICAgICBhc20gKCAicmV0aSIgKTsNCi0gICAgfQ0KKwkvKg0KKwkgKiBUaWNrIElTUiBmb3IgcHJlZW1wdGl2ZSBzY2hlZHVsZXIuICBXZSBjYW4gdXNlIGEgX190YXNrIGF0dHJpYnV0ZSBhcw0KKwkgKiB0aGUgY29udGV4dCBpcyBzYXZlZCBhdCB0aGUgc3RhcnQgb2YgdlBvcnRZaWVsZEZyb21UaWNrKCkuICBUaGUgdGljaw0KKwkgKiBjb3VudCBpcyBpbmNyZW1lbnRlZCBhZnRlciB0aGUgY29udGV4dCBpcyBzYXZlZC4NCisJICovDQorCV9fdGFzayB2b2lkIFNJR19PVVRQVVRfQ09NUEFSRTFBKCB2b2lkICkNCisJew0KKwkJdlBvcnRZaWVsZEZyb21UaWNrKCk7DQorCQlhc20oICJyZXRpIiApOw0KKwl9DQogDQogI2Vsc2UNCiANCi0vKg0KLSAqIFRpY2sgSVNSIGZvciB0aGUgY29vcGVyYXRpdmUgc2NoZWR1bGVyLiAgQWxsIHRoaXMgZG9lcyBpcyBpbmNyZW1lbnQgdGhlDQotICogdGljayBjb3VudC4gIFdlIGRvbid0IG5lZWQgdG8gc3dpdGNoIGNvbnRleHQsIHRoaXMgY2FuIG9ubHkgYmUgZG9uZSBieQ0KLSAqIG1hbnVhbCBjYWxscyB0byB0YXNrWUlFTEQoKTsNCi0gKg0KLSAqIFRIRSBJTlRFUlJVUFQgVkVDVE9SIElTIFBPUFVMQVRFRCBJTiBwb3J0bWFjcm8uczkwLiAgRE8gTk9UIElOU1RBTEwNCi0gKiBJVCBIRVJFIFVTSU5HIFRIRSBVU1VBTCBQUkFHTUEuDQotICovDQotICAgIF9faW50ZXJydXB0IHZvaWQgU0lHX09VVFBVVF9DT01QQVJFMUEoIHZvaWQgKQ0KLSAgICB7DQotICAgICAgICB4VGFza0luY3JlbWVudFRpY2soKTsNCi0gICAgfQ0KLSNlbmRpZiAvKiBpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAxICovDQorCS8qDQorCSAqIFRpY2sgSVNSIGZvciB0aGUgY29vcGVyYXRpdmUgc2NoZWR1bGVyLiAgQWxsIHRoaXMgZG9lcyBpcyBpbmNyZW1lbnQgdGhlDQorCSAqIHRpY2sgY291bnQuICBXZSBkb24ndCBuZWVkIHRvIHN3aXRjaCBjb250ZXh0LCB0aGlzIGNhbiBvbmx5IGJlIGRvbmUgYnkNCisJICogbWFudWFsIGNhbGxzIHRvIHRhc2tZSUVMRCgpOw0KKwkgKg0KKwkgKiBUSEUgSU5URVJSVVBUIFZFQ1RPUiBJUyBQT1BVTEFURUQgSU4gcG9ydG1hY3JvLnM5MC4gIERPIE5PVCBJTlNUQUxMDQorCSAqIElUIEhFUkUgVVNJTkcgVEhFIFVTVUFMIFBSQUdNQS4NCisJICovDQorCV9faW50ZXJydXB0IHZvaWQgU0lHX09VVFBVVF9DT01QQVJFMUEoIHZvaWQgKQ0KKwl7DQorCQl4VGFza0luY3JlbWVudFRpY2soKTsNCisJfQ0KKyNlbmRpZg0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICkNCiB7DQotICAgIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsNCi0gICAgdXhDcml0aWNhbE5lc3RpbmcrKzsNCisJcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOw0KKwl1eENyaXRpY2FsTmVzdGluZysrOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICkNCiB7DQotICAgIHV4Q3JpdGljYWxOZXN0aW5nLS07DQotDQotICAgIGlmKCB1eENyaXRpY2FsTmVzdGluZyA9PSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyApDQotICAgIHsNCi0gICAgICAgIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpOw0KLSAgICB9DQorCXV4Q3JpdGljYWxOZXN0aW5nLS07DQorCWlmKCB1eENyaXRpY2FsTmVzdGluZyA9PSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyApDQorCXsNCisJCXBvcnRFTkFCTEVfSU5URVJSVVBUUygpOw0KKwl9DQogfQ0KKw0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0lBUi9BVE1lZ2EzMjMvcG9ydG1hY3JvLmggYi9wb3J0YWJsZS9JQVIvQVRNZWdhMzIzL3BvcnRtYWNyby5oCmluZGV4IGRmODM1OGYuLjRiN2YxMjUgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0lBUi9BVE1lZ2EzMjMvcG9ydG1hY3JvLmgKKysrIGIvcG9ydGFibGUvSUFSL0FUTWVnYTMyMy9wb3J0bWFjcm8uaApAQCAtMjYsMTggKzI2LDE4IEBACiAgKi8NCiANCiAvKg0KLSAqIENoYW5nZXMgZnJvbSBWMS4yLjMNCi0gKg0KLSArIHBvcnRDUFVfQ0xPU0tfSFogZGVmaW5pdGlvbiBjaGFuZ2VkIHRvIDhNSHogYmFzZSAxMCwgcHJldmlvdXNseSBpdA0KLSArICAgIGJhc2UgMTYuDQotICovDQorQ2hhbmdlcyBmcm9tIFYxLjIuMw0KKw0KKwkrIHBvcnRDUFVfQ0xPU0tfSFogZGVmaW5pdGlvbiBjaGFuZ2VkIHRvIDhNSHogYmFzZSAxMCwgcHJldmlvdXNseSBpdA0KKwkgIGJhc2UgMTYuDQorKi8NCiANCiAjaWZuZGVmIFBPUlRNQUNST19IDQotICAgICNkZWZpbmUgUE9SVE1BQ1JPX0gNCisjZGVmaW5lIFBPUlRNQUNST19IDQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgZXh0ZXJuICJDIiB7DQotICAgICNlbmRpZg0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgKiBQb3J0IHNwZWNpZmljIGRlZmluaXRpb25zLg0KQEAgLTUwLDYxICs1MCw2MyBAQAogICovDQogDQogLyogVHlwZSBkZWZpbml0aW9ucy4gKi8NCi0gICAgI2RlZmluZSBwb3J0Q0hBUiAgICAgICAgICAgICAgICAgY2hhcg0KLSAgICAjZGVmaW5lIHBvcnRGTE9BVCAgICAgICAgICAgICAgICBmbG9hdA0KLSAgICAjZGVmaW5lIHBvcnRET1VCTEUgICAgICAgICAgICAgICBkb3VibGUNCi0gICAgI2RlZmluZSBwb3J0TE9ORyAgICAgICAgICAgICAgICAgbG9uZw0KLSAgICAjZGVmaW5lIHBvcnRTSE9SVCAgICAgICAgICAgICAgICBpbnQNCi0gICAgI2RlZmluZSBwb3J0U1RBQ0tfVFlQRSAgICAgICAgICAgdWludDhfdA0KLSAgICAjZGVmaW5lIHBvcnRCQVNFX1RZUEUgICAgICAgICAgICBjaGFyDQotICAgICNkZWZpbmUgcG9ydFBPSU5URVJfU0laRV9UWVBFICAgIHVpbnQxNl90DQorI2RlZmluZSBwb3J0Q0hBUgkJY2hhcg0KKyNkZWZpbmUgcG9ydEZMT0FUCQlmbG9hdA0KKyNkZWZpbmUgcG9ydERPVUJMRQkJZG91YmxlDQorI2RlZmluZSBwb3J0TE9ORwkJbG9uZw0KKyNkZWZpbmUgcG9ydFNIT1JUCQlpbnQNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFCXVpbnQ4X3QNCisjZGVmaW5lIHBvcnRCQVNFX1RZUEUJY2hhcg0KKyNkZWZpbmUgcG9ydFBPSU5URVJfU0laRV9UWVBFIHVpbnQxNl90DQogDQotICAgIHR5cGVkZWYgcG9ydFNUQUNLX1RZUEUgICBTdGFja1R5cGVfdDsNCi0gICAgdHlwZWRlZiBzaWduZWQgY2hhciAgICAgIEJhc2VUeXBlX3Q7DQotICAgIHR5cGVkZWYgdW5zaWduZWQgY2hhciAgICBVQmFzZVR5cGVfdDsNCit0eXBlZGVmIHBvcnRTVEFDS19UWVBFIFN0YWNrVHlwZV90Ow0KK3R5cGVkZWYgc2lnbmVkIGNoYXIgQmFzZVR5cGVfdDsNCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgVUJhc2VUeXBlX3Q7DQogDQotICAgICNpZiAoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQotICAgICAgICB0eXBlZGVmIHVpbnQxNl90ICAgICBUaWNrVHlwZV90Ow0KLSAgICAgICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICggVGlja1R5cGVfdCApIDB4ZmZmZg0KLSAgICAjZWxzZQ0KLSAgICAgICAgdHlwZWRlZiB1aW50MzJfdCAgICAgVGlja1R5cGVfdDsNCi0gICAgICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwNCi0gICAgI2VuZGlmDQorI2lmKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KKwl0eXBlZGVmIHVpbnQxNl90IFRpY2tUeXBlX3Q7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIFRpY2tUeXBlX3QgKSAweGZmZmYNCisjZWxzZQ0KKwl0eXBlZGVmIHVpbnQzMl90IFRpY2tUeXBlX3Q7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwNCisjZW5kaWYNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBDcml0aWNhbCBzZWN0aW9uIG1hbmFnZW1lbnQuICovDQotICAgIGV4dGVybiB2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCggdm9pZCApOw0KLSAgICBleHRlcm4gdm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApOw0KLSAgICAjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpICAgICAgICB2UG9ydEVudGVyQ3JpdGljYWwoKQ0KLSAgICAjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkgICAgICAgICB2UG9ydEV4aXRDcml0aWNhbCgpDQorZXh0ZXJuIHZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCisjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpCXZQb3J0RW50ZXJDcml0aWNhbCgpDQorI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpCQl2UG9ydEV4aXRDcml0aWNhbCgpDQogDQotICAgICNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpICAgIGFzbSAoICJjbGkiICkNCi0gICAgI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKSAgICAgYXNtICggInNlaSIgKQ0KKyNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpCWFzbSggImNsaSIgKQ0KKyNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkJCWFzbSggInNlaSIgKQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIEFyY2hpdGVjdHVyZSBzcGVjaWZpY3MuICovDQotICAgICNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSCAgICAgICggLTEgKQ0KLSAgICAjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUyAgICAoICggVGlja1R5cGVfdCApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KLSAgICAjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVCAgICAxDQotICAgICNkZWZpbmUgcG9ydE5PUCgpICAgIGFzbSAoICJub3AiICkNCisjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEgJCQkoIC0xICkNCisjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUwkJCSggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQorI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQJCQkxDQorI2RlZmluZSBwb3J0Tk9QKCkJCQkJCWFzbSggIm5vcCIgKQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIEtlcm5lbCB1dGlsaXRpZXMuICovDQotICAgIHZvaWQgdlBvcnRZaWVsZCggdm9pZCApOw0KLSAgICAjZGVmaW5lIHBvcnRZSUVMRCgpICAgICAgICAgICAgICAgIHZQb3J0WWllbGQoKQ0KK3ZvaWQgdlBvcnRZaWVsZCggdm9pZCApOw0KKyNkZWZpbmUgcG9ydFlJRUxEKCkJdlBvcnRZaWVsZCgpDQogDQotICAgICNpZmRlZiBJQVJfTUVHQV9BVlINCi0gICAgICAgICNkZWZpbmUgb3V0YiggUE9SVCwgVkFMVUUgKSAgICBQT1JUID0gVkFMVUUNCi0gICAgI2VuZGlmDQorI2lmZGVmIElBUl9NRUdBX0FWUg0KKwkjZGVmaW5lIG91dGIoIFBPUlQsIFZBTFVFICkgUE9SVCA9IFZBTFVFDQorI2VuZGlmDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQotICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KLSAgICAjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgICAgICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgfQ0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQogDQogI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQorDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvSUFSL0FWUjMyX1VDMy9wb3J0LmMgYi9wb3J0YWJsZS9JQVIvQVZSMzJfVUMzL3BvcnQuYwppbmRleCA1YjRlMGU5Li40YjcxODg4IDEwMDY0NAotLS0gYS9wb3J0YWJsZS9JQVIvQVZSMzJfVUMzL3BvcnQuYworKysgYi9wb3J0YWJsZS9JQVIvQVZSMzJfVUMzL3BvcnQuYwpAQCAtMSw1ICsxLDQgQEAKIC8qVGhpcyBmaWxlIGhhcyBiZWVuIHByZXBhcmVkIGZvciBEb3h5Z2VuIGF1dG9tYXRpYyBkb2N1bWVudGF0aW9uIGdlbmVyYXRpb24uKi8NCi0NCiAvKiEgXGZpbGUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogICoNCiAgKiBcYnJpZWYgRnJlZVJUT1MgcG9ydCBzb3VyY2UgZm9yIEFWUjMyIFVDMy4NCkBAIC01MSwyNiArNTAsMjYgQEAKICNpbmNsdWRlICJncGlvLmgiDQogDQogI2lmIGNvbmZpZ0RCRw0KLSAgICAjaW5jbHVkZSAidXNhcnQuaCINCisJI2luY2x1ZGUgInVzYXJ0LmgiDQogI2VuZGlmDQogDQotI2lmICggY29uZmlnVElDS19VU0VfVEMgPT0gMSApDQotICAgICNpbmNsdWRlICJ0Yy5oIg0KKyNpZiggY29uZmlnVElDS19VU0VfVEM9PTEgKQ0KKwkjaW5jbHVkZSAidGMuaCINCiAjZW5kaWYNCiANCiANCiAvKiBDb25zdGFudHMgcmVxdWlyZWQgdG8gc2V0dXAgdGhlIHRhc2sgY29udGV4dC4gKi8NCi0jZGVmaW5lIHBvcnRJTklUSUFMX1NSICAgICAgICAgICAgICggKCBTdGFja1R5cGVfdCApIDB4MDA0MDAwMDAgKSAvKiBBVlIzMiA6IFtNMjpNMF09MDAxIEkxTT0wIEkwTT0wLCBHTT0wICovDQotI2RlZmluZSBwb3J0SU5TVFJVQ1RJT05fU0laRSAgICAgICAoICggU3RhY2tUeXBlX3QgKSAwICkNCisjZGVmaW5lIHBvcnRJTklUSUFMX1NSICAgICAgICAgICAgKCAoIFN0YWNrVHlwZV90ICkgMHgwMDQwMDAwMCApIC8qIEFWUjMyIDogW00yOk0wXT0wMDEgSTFNPTAgSTBNPTAsIEdNPTAgKi8NCisjZGVmaW5lIHBvcnRJTlNUUlVDVElPTl9TSVpFICAgICAgKCAoIFN0YWNrVHlwZV90ICkgMCApDQogDQogLyogRWFjaCB0YXNrIG1haW50YWlucyBpdHMgb3duIGNyaXRpY2FsIG5lc3RpbmcgdmFyaWFibGUuICovDQotI2RlZmluZSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyAgICAoICggdWludDMyX3QgKSAwICkNCisjZGVmaW5lIHBvcnROT19DUklUSUNBTF9ORVNUSU5HICAgKCAoIHVpbnQzMl90ICkgMCApDQogdm9sYXRpbGUgdWludDMyX3QgdWxDcml0aWNhbE5lc3RpbmcgPSA5OTk5VUw7DQogDQotI2lmICggY29uZmlnVElDS19VU0VfVEMgPT0gMCApDQotICAgIHN0YXRpYyB2b2lkIHBydlNjaGVkdWxlTmV4dFRpY2soIHZvaWQgKTsNCisjaWYoIGNvbmZpZ1RJQ0tfVVNFX1RDPT0wICkNCisJc3RhdGljIHZvaWQgcHJ2U2NoZWR1bGVOZXh0VGljayggdm9pZCApOw0KICNlbHNlDQotICAgIHN0YXRpYyB2b2lkIHBydkNsZWFyVGNJbnQoIHZvaWQgKTsNCisJc3RhdGljIHZvaWQgcHJ2Q2xlYXJUY0ludCggdm9pZCApOw0KICNlbmRpZg0KIA0KIC8qIFNldHVwIHRoZSB0aW1lciB0byBnZW5lcmF0ZSB0aGUgdGljayBpbnRlcnJ1cHRzLiAqLw0KQEAgLTgyLDE0OSArODEsMTQ1IEBACiAgKiBMb3ctbGV2ZWwgaW5pdGlhbGl6YXRpb24gcm91dGluZSBjYWxsZWQgZHVyaW5nIHN0YXJ0dXAsIGJlZm9yZSB0aGUgbWFpbg0KICAqIGZ1bmN0aW9uLg0KICAqLw0KLWludCBfX2xvd19sZXZlbF9pbml0KCB2b2lkICkNCitpbnQgX19sb3dfbGV2ZWxfaW5pdCh2b2lkKQ0KIHsNCi0gICAgI2lmIGNvbmZpZ0hFQVBfSU5JVA0KLSAgICAjcHJhZ21hIHNlZ21lbnQgPSAiSEVBUCINCi0gICAgICAgIEJhc2VUeXBlX3QgKiBweE1lbTsNCi0gICAgI2VuZGlmDQorCSNpZiBjb25maWdIRUFQX0lOSVQNCisJCSNwcmFnbWEgc2VnbWVudCA9ICJIRUFQIg0KKwkJQmFzZVR5cGVfdCAqcHhNZW07DQorCSNlbmRpZg0KIA0KLSAgICAvKiBFbmFibGUgZXhjZXB0aW9ucy4gKi8NCi0gICAgRU5BQkxFX0FMTF9FWENFUFRJT05TKCk7DQorCS8qIEVuYWJsZSBleGNlcHRpb25zLiAqLw0KKwlFTkFCTEVfQUxMX0VYQ0VQVElPTlMoKTsNCiANCi0gICAgLyogSW5pdGlhbGl6ZSBpbnRlcnJ1cHQgaGFuZGxpbmcuICovDQotICAgIElOVENfaW5pdF9pbnRlcnJ1cHRzKCk7DQorCS8qIEluaXRpYWxpemUgaW50ZXJydXB0IGhhbmRsaW5nLiAqLw0KKwlJTlRDX2luaXRfaW50ZXJydXB0cygpOw0KIA0KLSAgICAjaWYgY29uZmlnSEVBUF9JTklUDQotICAgICAgICB7DQotICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSB0aGUgaGVhcCB1c2VkIGJ5IG1hbGxvYy4gKi8NCi0gICAgICAgICAgICBmb3IoIHB4TWVtID0gX19zZWdtZW50X2JlZ2luKCAiSEVBUCIgKTsgcHhNZW0gPCAoIEJhc2VUeXBlX3QgKiApIF9fc2VnbWVudF9lbmQoICJIRUFQIiApOyApDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAqcHhNZW0rKyA9IDB4QTVBNUE1QTU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAjZW5kaWYNCisJI2lmIGNvbmZpZ0hFQVBfSU5JVA0KKwl7DQorCQkvKiBJbml0aWFsaXplIHRoZSBoZWFwIHVzZWQgYnkgbWFsbG9jLiAqLw0KKwkJZm9yKCBweE1lbSA9IF9fc2VnbWVudF9iZWdpbiggIkhFQVAiICk7IHB4TWVtIDwgKCBCYXNlVHlwZV90ICogKSBfX3NlZ21lbnRfZW5kKCAiSEVBUCIgKTsgKQ0KKwkJew0KKwkJCSpweE1lbSsrID0gMHhBNUE1QTVBNTsNCisJCX0NCisJfQ0KKwkjZW5kaWYNCiANCi0gICAgLyogQ29kZSBzZWN0aW9uIHByZXNlbnQgaWYgYW5kIG9ubHkgaWYgdGhlIGRlYnVnIHRyYWNlIGlzIGFjdGl2YXRlZC4gKi8NCi0gICAgI2lmIGNvbmZpZ0RCRw0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHN0YXRpYyBjb25zdCBncGlvX21hcF90IERCR19VU0FSVF9HUElPX01BUCA9DQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICB7IGNvbmZpZ0RCR19VU0FSVF9SWF9QSU4sIGNvbmZpZ0RCR19VU0FSVF9SWF9GVU5DVElPTiB9LA0KLSAgICAgICAgICAgICAgICB7IGNvbmZpZ0RCR19VU0FSVF9UWF9QSU4sIGNvbmZpZ0RCR19VU0FSVF9UWF9GVU5DVElPTiB9DQotICAgICAgICAgICAgfTsNCisJLyogQ29kZSBzZWN0aW9uIHByZXNlbnQgaWYgYW5kIG9ubHkgaWYgdGhlIGRlYnVnIHRyYWNlIGlzIGFjdGl2YXRlZC4gKi8NCisJI2lmIGNvbmZpZ0RCRw0KKwl7DQorCQlzdGF0aWMgY29uc3QgZ3Bpb19tYXBfdCBEQkdfVVNBUlRfR1BJT19NQVAgPQ0KKwkJew0KKwkJCXsgY29uZmlnREJHX1VTQVJUX1JYX1BJTiwgY29uZmlnREJHX1VTQVJUX1JYX0ZVTkNUSU9OIH0sDQorCQkJeyBjb25maWdEQkdfVVNBUlRfVFhfUElOLCBjb25maWdEQkdfVVNBUlRfVFhfRlVOQ1RJT04gfQ0KKwkJfTsNCiANCi0gICAgICAgICAgICBzdGF0aWMgY29uc3QgdXNhcnRfb3B0aW9uc190IERCR19VU0FSVF9PUFRJT05TID0NCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIC5iYXVkcmF0ZSAgICA9IGNvbmZpZ0RCR19VU0FSVF9CQVVEUkFURSwNCi0gICAgICAgICAgICAgICAgLmNoYXJsZW5ndGggID0gOCwNCi0gICAgICAgICAgICAgICAgLnBhcml0eXR5cGUgID0gVVNBUlRfTk9fUEFSSVRZLA0KLSAgICAgICAgICAgICAgICAuc3RvcGJpdHMgICAgPSBVU0FSVF8xX1NUT1BCSVQsDQotICAgICAgICAgICAgICAgIC5jaGFubmVsbW9kZSA9IFVTQVJUX05PUk1BTF9DSE1PREUNCi0gICAgICAgICAgICB9Ow0KKwkJc3RhdGljIGNvbnN0IHVzYXJ0X29wdGlvbnNfdCBEQkdfVVNBUlRfT1BUSU9OUyA9DQorCQl7DQorCQkJLmJhdWRyYXRlID0gY29uZmlnREJHX1VTQVJUX0JBVURSQVRFLA0KKwkJCS5jaGFybGVuZ3RoID0gOCwNCisJCQkucGFyaXR5dHlwZSA9IFVTQVJUX05PX1BBUklUWSwNCisJCQkuc3RvcGJpdHMgPSBVU0FSVF8xX1NUT1BCSVQsDQorCQkJLmNoYW5uZWxtb2RlID0gVVNBUlRfTk9STUFMX0NITU9ERQ0KKwkJfTsNCiANCi0gICAgICAgICAgICAvKiBJbml0aWFsaXplIHRoZSBVU0FSVCB1c2VkIGZvciB0aGUgZGVidWcgdHJhY2Ugd2l0aCB0aGUgY29uZmlndXJlZCBwYXJhbWV0ZXJzLiAqLw0KLSAgICAgICAgICAgIGV4dGVybiB2b2xhdGlsZSBhdnIzMl91c2FydF90ICogdm9sYXRpbGUgc3RkaW9fdXNhcnRfYmFzZTsNCi0gICAgICAgICAgICBzdGRpb191c2FydF9iYXNlID0gY29uZmlnREJHX1VTQVJUOw0KLSAgICAgICAgICAgIGdwaW9fZW5hYmxlX21vZHVsZSggREJHX1VTQVJUX0dQSU9fTUFQLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCBEQkdfVVNBUlRfR1BJT19NQVAgKSAvIHNpemVvZiggREJHX1VTQVJUX0dQSU9fTUFQWyAwIF0gKSApOw0KLSAgICAgICAgICAgIHVzYXJ0X2luaXRfcnMyMzIoIGNvbmZpZ0RCR19VU0FSVCwgJkRCR19VU0FSVF9PUFRJT05TLCBjb25maWdDUFVfQ0xPQ0tfSFogKTsNCi0gICAgICAgIH0NCi0gICAgI2VuZGlmIC8qIGlmIGNvbmZpZ0RCRyAqLw0KKwkJLyogSW5pdGlhbGl6ZSB0aGUgVVNBUlQgdXNlZCBmb3IgdGhlIGRlYnVnIHRyYWNlIHdpdGggdGhlIGNvbmZpZ3VyZWQgcGFyYW1ldGVycy4gKi8NCisJCWV4dGVybiB2b2xhdGlsZSBhdnIzMl91c2FydF90ICp2b2xhdGlsZSBzdGRpb191c2FydF9iYXNlOw0KKwkJc3RkaW9fdXNhcnRfYmFzZSA9IGNvbmZpZ0RCR19VU0FSVDsNCisJCWdwaW9fZW5hYmxlX21vZHVsZSggREJHX1VTQVJUX0dQSU9fTUFQLA0KKwkJICAgICAgICAgICAgICAgICAgICBzaXplb2YoIERCR19VU0FSVF9HUElPX01BUCApIC8gc2l6ZW9mKCBEQkdfVVNBUlRfR1BJT19NQVBbMF0gKSApOw0KKwkJdXNhcnRfaW5pdF9yczIzMihjb25maWdEQkdfVVNBUlQsICZEQkdfVVNBUlRfT1BUSU9OUywgY29uZmlnQ1BVX0NMT0NLX0haKTsNCisJfQ0KKwkjZW5kaWYNCiANCi0gICAgLyogUmVxdWVzdCBpbml0aWFsaXphdGlvbiBvZiBkYXRhIHNlZ21lbnRzLiAqLw0KLSAgICByZXR1cm4gMTsNCisJLyogUmVxdWVzdCBpbml0aWFsaXphdGlvbiBvZiBkYXRhIHNlZ21lbnRzLiAqLw0KKwlyZXR1cm4gMTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogQWRkZWQgYXMgdGhlcmUgaXMgbm8gc3VjaCBmdW5jdGlvbiBpbiBGcmVlUlRPUy4gKi8NCi12b2lkICogcHZQb3J0UmVhbGxvYyggdm9pZCAqIHB2LA0KLSAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgeFdhbnRlZFNpemUgKQ0KK3ZvaWQgKnB2UG9ydFJlYWxsb2MoIHZvaWQgKnB2LCBzaXplX3QgeFdhbnRlZFNpemUgKQ0KIHsNCi0gICAgdm9pZCAqIHB2UmV0dXJuOw0KK3ZvaWQgKnB2UmV0dXJuOw0KIA0KLSAgICB2VGFza1N1c3BlbmRBbGwoKTsNCi0gICAgew0KLSAgICAgICAgcHZSZXR1cm4gPSByZWFsbG9jKCBwdiwgeFdhbnRlZFNpemUgKTsNCi0gICAgfQ0KLSAgICB4VGFza1Jlc3VtZUFsbCgpOw0KKwl2VGFza1N1c3BlbmRBbGwoKTsNCisJew0KKwkJcHZSZXR1cm4gPSByZWFsbG9jKCBwdiwgeFdhbnRlZFNpemUgKTsNCisJfQ0KKwl4VGFza1Jlc3VtZUFsbCgpOw0KIA0KLSAgICByZXR1cm4gcHZSZXR1cm47DQorCXJldHVybiBwdlJldHVybjsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGhlIGNvb3BlcmF0aXZlIHNjaGVkdWxlciByZXF1aXJlcyBhIG5vcm1hbCBJUlEgc2VydmljZSByb3V0aW5lIHRvDQotICogc2ltcGx5IGluY3JlbWVudCB0aGUgc3lzdGVtIHRpY2suICovDQotDQorc2ltcGx5IGluY3JlbWVudCB0aGUgc3lzdGVtIHRpY2suICovDQogLyogVGhlIHByZWVtcHRpdmUgc2NoZWR1bGVyIGlzIGRlZmluZWQgYXMgIm5ha2VkIiBhcyB0aGUgZnVsbCBjb250ZXh0IGlzIHNhdmVkDQotICogb24gZW50cnkgYXMgcGFydCBvZiB0aGUgY29udGV4dCBzd2l0Y2guICovDQotI3ByYWdtYSBzaGFkb3dfcmVnaXN0ZXJzID0gZnVsbCAvKiBOYWtlZC4gKi8NCitvbiBlbnRyeSBhcyBwYXJ0IG9mIHRoZSBjb250ZXh0IHN3aXRjaC4gKi8NCisjcHJhZ21hIHNoYWRvd19yZWdpc3RlcnMgPSBmdWxsICAgLy8gTmFrZWQuDQogc3RhdGljIHZvaWQgdlRpY2soIHZvaWQgKQ0KIHsNCi0gICAgLyogU2F2ZSB0aGUgY29udGV4dCBvZiB0aGUgaW50ZXJydXB0ZWQgdGFzay4gKi8NCi0gICAgcG9ydFNBVkVfQ09OVEVYVF9PU19JTlQoKTsNCisJLyogU2F2ZSB0aGUgY29udGV4dCBvZiB0aGUgaW50ZXJydXB0ZWQgdGFzay4gKi8NCisJcG9ydFNBVkVfQ09OVEVYVF9PU19JTlQoKTsNCiANCi0gICAgI2lmICggY29uZmlnVElDS19VU0VfVEMgPT0gMSApDQotICAgICAgICAvKiBDbGVhciB0aGUgaW50ZXJydXB0IGZsYWcuICovDQotICAgICAgICBwcnZDbGVhclRjSW50KCk7DQotICAgICNlbHNlDQorCSNpZiggY29uZmlnVElDS19VU0VfVEM9PTEgKQ0KKwkJLyogQ2xlYXIgdGhlIGludGVycnVwdCBmbGFnLiAqLw0KKwkJcHJ2Q2xlYXJUY0ludCgpOw0KKwkjZWxzZQ0KKwkJLyogU2NoZWR1bGUgdGhlIENPVU5UJkNPTVBBUkUgbWF0Y2ggaW50ZXJydXB0IGluIChjb25maWdDUFVfQ0xPQ0tfSFovY29uZmlnVElDS19SQVRFX0haKQ0KKwkJY2xvY2sgY3ljbGVzIGZyb20gbm93LiAqLw0KKwkJcHJ2U2NoZWR1bGVOZXh0VGljaygpOw0KKwkjZW5kaWYNCiANCi0gICAgICAgIC8qIFNjaGVkdWxlIHRoZSBDT1VOVCZDT01QQVJFIG1hdGNoIGludGVycnVwdCBpbiAoY29uZmlnQ1BVX0NMT0NLX0haL2NvbmZpZ1RJQ0tfUkFURV9IWikNCi0gICAgICAgICAqIGNsb2NrIGN5Y2xlcyBmcm9tIG5vdy4gKi8NCi0gICAgICAgIHBydlNjaGVkdWxlTmV4dFRpY2soKTsNCi0gICAgI2VuZGlmDQorCS8qIEJlY2F1c2UgRnJlZVJUT1MgaXMgbm90IHN1cHBvc2VkIHRvIHJ1biB3aXRoIG5lc3RlZCBpbnRlcnJ1cHRzLCBwdXQgYWxsIE9TDQorCWNhbGxzIGluIGEgY3JpdGljYWwgc2VjdGlvbiAuICovDQorCXBvcnRFTlRFUl9DUklUSUNBTCgpOw0KKwkJeFRhc2tJbmNyZW1lbnRUaWNrKCk7DQorCXBvcnRFWElUX0NSSVRJQ0FMKCk7DQogDQotICAgIC8qIEJlY2F1c2UgRnJlZVJUT1MgaXMgbm90IHN1cHBvc2VkIHRvIHJ1biB3aXRoIG5lc3RlZCBpbnRlcnJ1cHRzLCBwdXQgYWxsIE9TDQotICAgICAqIGNhbGxzIGluIGEgY3JpdGljYWwgc2VjdGlvbiAuICovDQotICAgIHBvcnRFTlRFUl9DUklUSUNBTCgpOw0KLSAgICB4VGFza0luY3JlbWVudFRpY2soKTsNCi0gICAgcG9ydEVYSVRfQ1JJVElDQUwoKTsNCi0NCi0gICAgLyogUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgImVsZWN0ZWQgdGFzayIuICovDQotICAgIHBvcnRSRVNUT1JFX0NPTlRFWFRfT1NfSU5UKCk7DQorCS8qIFJlc3RvcmUgdGhlIGNvbnRleHQgb2YgdGhlICJlbGVjdGVkIHRhc2siLiAqLw0KKwlwb3J0UkVTVE9SRV9DT05URVhUX09TX0lOVCgpOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0jcHJhZ21hIHNoYWRvd19yZWdpc3RlcnMgPSBmdWxsIC8qIE5ha2VkLiAqLw0KKyNwcmFnbWEgc2hhZG93X3JlZ2lzdGVycyA9IGZ1bGwgICAvLyBOYWtlZC4NCiB2b2lkIFNDQUxMWWllbGQoIHZvaWQgKQ0KIHsNCi0gICAgLyogU2F2ZSB0aGUgY29udGV4dCBvZiB0aGUgaW50ZXJydXB0ZWQgdGFzay4gKi8NCi0gICAgcG9ydFNBVkVfQ09OVEVYVF9TQ0FMTCgpOw0KLSAgICB2VGFza1N3aXRjaENvbnRleHQoKTsNCi0gICAgcG9ydFJFU1RPUkVfQ09OVEVYVF9TQ0FMTCgpOw0KKwkvKiBTYXZlIHRoZSBjb250ZXh0IG9mIHRoZSBpbnRlcnJ1cHRlZCB0YXNrLiAqLw0KKwlwb3J0U0FWRV9DT05URVhUX1NDQUxMKCk7DQorCXZUYXNrU3dpdGNoQ29udGV4dCgpOw0KKwlwb3J0UkVTVE9SRV9DT05URVhUX1NDQUxMKCk7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFRoZSBjb2RlIGdlbmVyYXRlZCBieSB0aGUgR0NDIGNvbXBpbGVyIHVzZXMgdGhlIHN0YWNrIGluIGRpZmZlcmVudCB3YXlzIGF0DQotICogZGlmZmVyZW50IG9wdGltaXNhdGlvbiBsZXZlbHMuICBUaGUgaW50ZXJydXB0IGZsYWdzIGNhbiB0aGVyZWZvcmUgbm90IGFsd2F5cw0KLSAqIGJlIHNhdmVkIHRvIHRoZSBzdGFjay4gIEluc3RlYWQgdGhlIGNyaXRpY2FsIHNlY3Rpb24gbmVzdGluZyBsZXZlbCBpcyBzdG9yZWQNCi0gKiBpbiBhIHZhcmlhYmxlLCB3aGljaCBpcyB0aGVuIHNhdmVkIGFzIHBhcnQgb2YgdGhlIHN0YWNrIGNvbnRleHQuICovDQorZGlmZmVyZW50IG9wdGltaXNhdGlvbiBsZXZlbHMuICBUaGUgaW50ZXJydXB0IGZsYWdzIGNhbiB0aGVyZWZvcmUgbm90IGFsd2F5cw0KK2JlIHNhdmVkIHRvIHRoZSBzdGFjay4gIEluc3RlYWQgdGhlIGNyaXRpY2FsIHNlY3Rpb24gbmVzdGluZyBsZXZlbCBpcyBzdG9yZWQNCitpbiBhIHZhcmlhYmxlLCB3aGljaCBpcyB0aGVuIHNhdmVkIGFzIHBhcnQgb2YgdGhlIHN0YWNrIGNvbnRleHQuICovDQogI3ByYWdtYSBvcHRpbWl6ZSA9IG5vX2lubGluZQ0KIHZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICkNCiB7DQotICAgIC8qIERpc2FibGUgaW50ZXJydXB0cyAqLw0KLSAgICBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7DQorCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLw0KKwlwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7DQogDQotICAgIC8qIE5vdyBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB1bENyaXRpY2FsTmVzdGluZyBjYW4gYmUgYWNjZXNzZWQNCi0gICAgICogZGlyZWN0bHkuICBJbmNyZW1lbnQgdWxDcml0aWNhbE5lc3RpbmcgdG8ga2VlcCBhIGNvdW50IG9mIGhvdyBtYW55IHRpbWVzDQotICAgICAqIHBvcnRFTlRFUl9DUklUSUNBTCgpIGhhcyBiZWVuIGNhbGxlZC4gKi8NCi0gICAgdWxDcml0aWNhbE5lc3RpbmcrKzsNCisJLyogTm93IGludGVycnVwdHMgYXJlIGRpc2FibGVkIHVsQ3JpdGljYWxOZXN0aW5nIGNhbiBiZSBhY2Nlc3NlZA0KKwkgZGlyZWN0bHkuICBJbmNyZW1lbnQgdWxDcml0aWNhbE5lc3RpbmcgdG8ga2VlcCBhIGNvdW50IG9mIGhvdyBtYW55IHRpbWVzDQorCSBwb3J0RU5URVJfQ1JJVElDQUwoKSBoYXMgYmVlbiBjYWxsZWQuICovDQorCXVsQ3JpdGljYWxOZXN0aW5nKys7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KICNwcmFnbWEgb3B0aW1pemUgPSBub19pbmxpbmUNCiB2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICkNCiB7DQotICAgIGlmKCB1bENyaXRpY2FsTmVzdGluZyA+IHBvcnROT19DUklUSUNBTF9ORVNUSU5HICkNCi0gICAgew0KLSAgICAgICAgdWxDcml0aWNhbE5lc3RpbmctLTsNCi0NCi0gICAgICAgIGlmKCB1bENyaXRpY2FsTmVzdGluZyA9PSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyApDQotICAgICAgICB7DQotICAgICAgICAgICAgLyogRW5hYmxlIGFsbCBpbnRlcnJ1cHQvZXhjZXB0aW9uLiAqLw0KLSAgICAgICAgICAgIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpOw0KLSAgICAgICAgfQ0KLSAgICB9DQorCWlmKHVsQ3JpdGljYWxOZXN0aW5nID4gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcpDQorCXsNCisJCXVsQ3JpdGljYWxOZXN0aW5nLS07DQorCQlpZiggdWxDcml0aWNhbE5lc3RpbmcgPT0gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgKQ0KKwkJew0KKwkJCS8qIEVuYWJsZSBhbGwgaW50ZXJydXB0L2V4Y2VwdGlvbi4gKi8NCisJCQlwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKTsNCisJCX0NCisJfQ0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCkBAIC0yMzQsMTg0ICsyMjksMTc4IEBACiAgKg0KICAqIFNlZSBoZWFkZXIgZmlsZSBmb3IgZGVzY3JpcHRpb24uDQogICovDQotU3RhY2tUeXBlX3QgKiBweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICogcHhUb3BPZlN0YWNrLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYXNrRnVuY3Rpb25fdCBweENvZGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KK1N0YWNrVHlwZV90ICpweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICpweFRvcE9mU3RhY2ssIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzICkNCiB7DQotICAgIC8qIFNldHVwIHRoZSBpbml0aWFsIHN0YWNrIG9mIHRoZSB0YXNrLiAgVGhlIHN0YWNrIGlzIHNldCBleGFjdGx5IGFzDQotICAgICAqIGV4cGVjdGVkIGJ5IHRoZSBwb3J0UkVTVE9SRV9DT05URVhUKCkgbWFjcm8uICovDQorCS8qIFNldHVwIHRoZSBpbml0aWFsIHN0YWNrIG9mIHRoZSB0YXNrLiAgVGhlIHN0YWNrIGlzIHNldCBleGFjdGx5IGFzDQorCWV4cGVjdGVkIGJ5IHRoZSBwb3J0UkVTVE9SRV9DT05URVhUKCkgbWFjcm8uICovDQogDQotICAgIC8qIFdoZW4gdGhlIHRhc2sgc3RhcnRzLCBpdCB3aWxsIGV4cGVjdCB0byBmaW5kIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXIgaW4gUjEyLiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjay0tID0gKCBTdGFja1R5cGVfdCApIDB4MDgwODA4MDg7ICAgICAgICAgICAgICAgICAgICAvKiBSOCAqLw0KLSAgICAqcHhUb3BPZlN0YWNrLS0gPSAoIFN0YWNrVHlwZV90ICkgMHgwOTA5MDkwOTsgICAgICAgICAgICAgICAgICAgIC8qIFI5ICovDQotICAgICpweFRvcE9mU3RhY2stLSA9ICggU3RhY2tUeXBlX3QgKSAweDBBMEEwQTBBOyAgICAgICAgICAgICAgICAgICAgLyogUjEwICovDQotICAgICpweFRvcE9mU3RhY2stLSA9ICggU3RhY2tUeXBlX3QgKSAweDBCMEIwQjBCOyAgICAgICAgICAgICAgICAgICAgLyogUjExICovDQotICAgICpweFRvcE9mU3RhY2stLSA9ICggU3RhY2tUeXBlX3QgKSBwdlBhcmFtZXRlcnM7ICAgICAgICAgICAgICAgICAgLyogUjEyICovDQotICAgICpweFRvcE9mU3RhY2stLSA9ICggU3RhY2tUeXBlX3QgKSAweERFQURCRUVGOyAgICAgICAgICAgICAgICAgICAgLyogUjE0L0xSICovDQotICAgICpweFRvcE9mU3RhY2stLSA9ICggU3RhY2tUeXBlX3QgKSBweENvZGUgKyBwb3J0SU5TVFJVQ1RJT05fU0laRTsgLyogUjE1L1BDICovDQotICAgICpweFRvcE9mU3RhY2stLSA9ICggU3RhY2tUeXBlX3QgKSBwb3J0SU5JVElBTF9TUjsgICAgICAgICAgICAgICAgLyogU1IgKi8NCi0gICAgKnB4VG9wT2ZTdGFjay0tID0gKCBTdGFja1R5cGVfdCApIDB4RkYwMDAwRkY7ICAgICAgICAgICAgICAgICAgICAvKiBSMCAqLw0KLSAgICAqcHhUb3BPZlN0YWNrLS0gPSAoIFN0YWNrVHlwZV90ICkgMHgwMTAxMDEwMTsgICAgICAgICAgICAgICAgICAgIC8qIFIxICovDQotICAgICpweFRvcE9mU3RhY2stLSA9ICggU3RhY2tUeXBlX3QgKSAweDAyMDIwMjAyOyAgICAgICAgICAgICAgICAgICAgLyogUjIgKi8NCi0gICAgKnB4VG9wT2ZTdGFjay0tID0gKCBTdGFja1R5cGVfdCApIDB4MDMwMzAzMDM7ICAgICAgICAgICAgICAgICAgICAvKiBSMyAqLw0KLSAgICAqcHhUb3BPZlN0YWNrLS0gPSAoIFN0YWNrVHlwZV90ICkgMHgwNDA0MDQwNDsgICAgICAgICAgICAgICAgICAgIC8qIFI0ICovDQotICAgICpweFRvcE9mU3RhY2stLSA9ICggU3RhY2tUeXBlX3QgKSAweDA1MDUwNTA1OyAgICAgICAgICAgICAgICAgICAgLyogUjUgKi8NCi0gICAgKnB4VG9wT2ZTdGFjay0tID0gKCBTdGFja1R5cGVfdCApIDB4MDYwNjA2MDY7ICAgICAgICAgICAgICAgICAgICAvKiBSNiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrLS0gPSAoIFN0YWNrVHlwZV90ICkgMHgwNzA3MDcwNzsgICAgICAgICAgICAgICAgICAgIC8qIFI3ICovDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkc7ICAgICAgICAgLyogdWxDcml0aWNhbE5lc3RpbmcgKi8NCisJLyogV2hlbiB0aGUgdGFzayBzdGFydHMsIGl0IHdpbGwgZXhwZWN0IHRvIGZpbmQgdGhlIGZ1bmN0aW9uIHBhcmFtZXRlciBpbiBSMTIuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrLS0gPSAoIFN0YWNrVHlwZV90ICkgMHgwODA4MDgwODsJCQkJCS8qIFI4ICovDQorCSpweFRvcE9mU3RhY2stLSA9ICggU3RhY2tUeXBlX3QgKSAweDA5MDkwOTA5OwkJCQkJLyogUjkgKi8NCisJKnB4VG9wT2ZTdGFjay0tID0gKCBTdGFja1R5cGVfdCApIDB4MEEwQTBBMEE7CQkJCQkvKiBSMTAgKi8NCisJKnB4VG9wT2ZTdGFjay0tID0gKCBTdGFja1R5cGVfdCApIDB4MEIwQjBCMEI7CQkJCQkvKiBSMTEgKi8NCisJKnB4VG9wT2ZTdGFjay0tID0gKCBTdGFja1R5cGVfdCApIHB2UGFyYW1ldGVyczsJCQkJCS8qIFIxMiAqLw0KKwkqcHhUb3BPZlN0YWNrLS0gPSAoIFN0YWNrVHlwZV90ICkgMHhERUFEQkVFRjsJCQkJCS8qIFIxNC9MUiAqLw0KKwkqcHhUb3BPZlN0YWNrLS0gPSAoIFN0YWNrVHlwZV90ICkgcHhDb2RlICsgcG9ydElOU1RSVUNUSU9OX1NJWkU7IC8qIFIxNS9QQyAqLw0KKwkqcHhUb3BPZlN0YWNrLS0gPSAoIFN0YWNrVHlwZV90ICkgcG9ydElOSVRJQUxfU1I7CQkJCS8qIFNSICovDQorCSpweFRvcE9mU3RhY2stLSA9ICggU3RhY2tUeXBlX3QgKSAweEZGMDAwMEZGOwkJCQkJLyogUjAgKi8NCisJKnB4VG9wT2ZTdGFjay0tID0gKCBTdGFja1R5cGVfdCApIDB4MDEwMTAxMDE7CQkJCQkvKiBSMSAqLw0KKwkqcHhUb3BPZlN0YWNrLS0gPSAoIFN0YWNrVHlwZV90ICkgMHgwMjAyMDIwMjsJCQkJCS8qIFIyICovDQorCSpweFRvcE9mU3RhY2stLSA9ICggU3RhY2tUeXBlX3QgKSAweDAzMDMwMzAzOwkJCQkJLyogUjMgKi8NCisJKnB4VG9wT2ZTdGFjay0tID0gKCBTdGFja1R5cGVfdCApIDB4MDQwNDA0MDQ7CQkJCQkvKiBSNCAqLw0KKwkqcHhUb3BPZlN0YWNrLS0gPSAoIFN0YWNrVHlwZV90ICkgMHgwNTA1MDUwNTsJCQkJCS8qIFI1ICovDQorCSpweFRvcE9mU3RhY2stLSA9ICggU3RhY2tUeXBlX3QgKSAweDA2MDYwNjA2OwkJCQkJLyogUjYgKi8NCisJKnB4VG9wT2ZTdGFjay0tID0gKCBTdGFja1R5cGVfdCApIDB4MDcwNzA3MDc7CQkJCQkvKiBSNyAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHBvcnROT19DUklUSUNBTF9ORVNUSU5HOwkJCS8qIHVsQ3JpdGljYWxOZXN0aW5nICovDQogDQotICAgIHJldHVybiBweFRvcE9mU3RhY2s7DQorCXJldHVybiBweFRvcE9mU3RhY2s7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIEJhc2VUeXBlX3QgeFBvcnRTdGFydFNjaGVkdWxlciggdm9pZCApDQogew0KLSAgICAvKiBTdGFydCB0aGUgdGltZXIgdGhhdCBnZW5lcmF0ZXMgdGhlIHRpY2sgSVNSLiAgSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQNCi0gICAgICogaGVyZSBhbHJlYWR5LiAqLw0KLSAgICBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCk7DQorCS8qIFN0YXJ0IHRoZSB0aW1lciB0aGF0IGdlbmVyYXRlcyB0aGUgdGljayBJU1IuICBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZA0KKwloZXJlIGFscmVhZHkuICovDQorCXBydlNldHVwVGltZXJJbnRlcnJ1cHQoKTsNCiANCi0gICAgLyogU3RhcnQgdGhlIGZpcnN0IHRhc2suICovDQotICAgIHBvcnRSRVNUT1JFX0NPTlRFWFQoKTsNCisJLyogU3RhcnQgdGhlIGZpcnN0IHRhc2suICovDQorCXBvcnRSRVNUT1JFX0NPTlRFWFQoKTsNCiANCi0gICAgLyogU2hvdWxkIG5vdCBnZXQgaGVyZSEgKi8NCi0gICAgcmV0dXJuIDA7DQorCS8qIFNob3VsZCBub3QgZ2V0IGhlcmUhICovDQorCXJldHVybiAwOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0RW5kU2NoZWR1bGVyKCB2b2lkICkNCiB7DQotICAgIC8qIEl0IGlzIHVubGlrZWx5IHRoYXQgdGhlIEFWUjMyIHBvcnQgd2lsbCByZXF1aXJlIHRoaXMgZnVuY3Rpb24gYXMgdGhlcmUNCi0gICAgICogaXMgbm90aGluZyB0byByZXR1cm4gdG8uICAqLw0KKwkvKiBJdCBpcyB1bmxpa2VseSB0aGF0IHRoZSBBVlIzMiBwb3J0IHdpbGwgcmVxdWlyZSB0aGlzIGZ1bmN0aW9uIGFzIHRoZXJlDQorCWlzIG5vdGhpbmcgdG8gcmV0dXJuIHRvLiAgKi8NCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogU2NoZWR1bGUgdGhlIENPVU5UJkNPTVBBUkUgbWF0Y2ggaW50ZXJydXB0IGluIChjb25maWdDUFVfQ0xPQ0tfSFovY29uZmlnVElDS19SQVRFX0haKQ0KLSAqIGNsb2NrIGN5Y2xlcyBmcm9tIG5vdy4gKi8NCi0jaWYgKCBjb25maWdUSUNLX1VTRV9UQyA9PSAwICkNCi0gICAgc3RhdGljIHZvaWQgcHJ2U2NoZWR1bGVGaXJzdFRpY2soIHZvaWQgKQ0KLSAgICB7DQotICAgICAgICB1aW50MzJfdCBsQ3ljbGVzOw0KK2Nsb2NrIGN5Y2xlcyBmcm9tIG5vdy4gKi8NCisjaWYoIGNvbmZpZ1RJQ0tfVVNFX1RDPT0wICkNCisJc3RhdGljIHZvaWQgcHJ2U2NoZWR1bGVGaXJzdFRpY2sodm9pZCkNCisJew0KKwkJdWludDMyX3QgbEN5Y2xlczsNCiANCi0gICAgICAgIGxDeWNsZXMgPSBHZXRfc3lzdGVtX3JlZ2lzdGVyKCBBVlIzMl9DT1VOVCApOw0KLSAgICAgICAgbEN5Y2xlcyArPSAoIGNvbmZpZ0NQVV9DTE9DS19IWiAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApOw0KKwkJbEN5Y2xlcyA9IEdldF9zeXN0ZW1fcmVnaXN0ZXIoQVZSMzJfQ09VTlQpOw0KKwkJbEN5Y2xlcyArPSAoY29uZmlnQ1BVX0NMT0NLX0haL2NvbmZpZ1RJQ0tfUkFURV9IWik7DQorCQkvLyBJZiBsQ3ljbGVzIGVuZHMgdXAgdG8gYmUgMCwgbWFrZSBpdCAxIHNvIHRoYXQgdGhlIENPTVBBUkUgYW5kIGV4Y2VwdGlvbg0KKwkJLy8gZ2VuZXJhdGlvbiBmZWF0dXJlIGRvZXMgbm90IGdldCBkaXNhYmxlZC4NCisJCWlmKDAgPT0gbEN5Y2xlcykNCisJCXsNCisJCQlsQ3ljbGVzKys7DQorCQl9DQorCQlTZXRfc3lzdGVtX3JlZ2lzdGVyKEFWUjMyX0NPTVBBUkUsIGxDeWNsZXMpOw0KKwl9DQorCQ0KKwkjcHJhZ21hIG9wdGltaXplID0gbm9faW5saW5lDQorCXN0YXRpYyB2b2lkIHBydlNjaGVkdWxlTmV4dFRpY2sodm9pZCkNCisJew0KKwkJdWludDMyX3QgbEN5Y2xlcywgbENvdW50Ow0KIA0KLSAgICAgICAgLyogSWYgbEN5Y2xlcyBlbmRzIHVwIHRvIGJlIDAsIG1ha2UgaXQgMSBzbyB0aGF0IHRoZSBDT01QQVJFIGFuZCBleGNlcHRpb24gKi8NCi0gICAgICAgIC8qIGdlbmVyYXRpb24gZmVhdHVyZSBkb2VzIG5vdCBnZXQgZGlzYWJsZWQuICovDQotICAgICAgICBpZiggMCA9PSBsQ3ljbGVzICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBsQ3ljbGVzKys7DQotICAgICAgICB9DQotDQotICAgICAgICBTZXRfc3lzdGVtX3JlZ2lzdGVyKCBBVlIzMl9DT01QQVJFLCBsQ3ljbGVzICk7DQotICAgIH0NCi0NCi0gICAgI3ByYWdtYSBvcHRpbWl6ZSA9IG5vX2lubGluZQ0KLSAgICBzdGF0aWMgdm9pZCBwcnZTY2hlZHVsZU5leHRUaWNrKCB2b2lkICkNCi0gICAgew0KLSAgICAgICAgdWludDMyX3QgbEN5Y2xlcywgbENvdW50Ow0KLQ0KLSAgICAgICAgbEN5Y2xlcyA9IEdldF9zeXN0ZW1fcmVnaXN0ZXIoIEFWUjMyX0NPTVBBUkUgKTsNCi0gICAgICAgIGxDeWNsZXMgKz0gKCBjb25maWdDUFVfQ0xPQ0tfSFogLyBjb25maWdUSUNLX1JBVEVfSFogKTsNCi0NCi0gICAgICAgIC8qIElmIGxDeWNsZXMgZW5kcyB1cCB0byBiZSAwLCBtYWtlIGl0IDEgc28gdGhhdCB0aGUgQ09NUEFSRSBhbmQgZXhjZXB0aW9uICovDQotICAgICAgICAvKiBnZW5lcmF0aW9uIGZlYXR1cmUgZG9lcyBub3QgZ2V0IGRpc2FibGVkLiAqLw0KLSAgICAgICAgaWYoIDAgPT0gbEN5Y2xlcyApDQotICAgICAgICB7DQotICAgICAgICAgICAgbEN5Y2xlcysrOw0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgbENvdW50ID0gR2V0X3N5c3RlbV9yZWdpc3RlciggQVZSMzJfQ09VTlQgKTsNCi0NCi0gICAgICAgIGlmKCBsQ3ljbGVzIDwgbENvdW50ICkNCi0gICAgICAgIHsgLyogV2UgbWlzc2VkIGEgdGljaywgcmVjb3ZlciBmb3IgdGhlIG5leHQuICovDQotICAgICAgICAgICAgbEN5Y2xlcyArPSAoIGNvbmZpZ0NQVV9DTE9DS19IWiAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApOw0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgU2V0X3N5c3RlbV9yZWdpc3RlciggQVZSMzJfQ09NUEFSRSwgbEN5Y2xlcyApOw0KLSAgICB9DQotI2Vsc2UgLyogaWYgKCBjb25maWdUSUNLX1VTRV9UQyA9PSAwICkgKi8NCi0gICAgI3ByYWdtYSBvcHRpbWl6ZSA9IG5vX2lubGluZQ0KLSAgICBzdGF0aWMgdm9pZCBwcnZDbGVhclRjSW50KCB2b2lkICkNCi0gICAgew0KLSAgICAgICAgQVZSMzJfVEMuY2hhbm5lbFsgY29uZmlnVElDS19UQ19DSEFOTkVMIF0uc3I7DQotICAgIH0NCi0jZW5kaWYgLyogaWYgKCBjb25maWdUSUNLX1VTRV9UQyA9PSAwICkgKi8NCisJCWxDeWNsZXMgPSBHZXRfc3lzdGVtX3JlZ2lzdGVyKEFWUjMyX0NPTVBBUkUpOw0KKwkJbEN5Y2xlcyArPSAoY29uZmlnQ1BVX0NMT0NLX0haL2NvbmZpZ1RJQ0tfUkFURV9IWik7DQorCQkvLyBJZiBsQ3ljbGVzIGVuZHMgdXAgdG8gYmUgMCwgbWFrZSBpdCAxIHNvIHRoYXQgdGhlIENPTVBBUkUgYW5kIGV4Y2VwdGlvbg0KKwkJLy8gZ2VuZXJhdGlvbiBmZWF0dXJlIGRvZXMgbm90IGdldCBkaXNhYmxlZC4NCisJCWlmKDAgPT0gbEN5Y2xlcykNCisJCXsNCisJCQlsQ3ljbGVzKys7DQorCQl9DQorCQlsQ291bnQgPSBHZXRfc3lzdGVtX3JlZ2lzdGVyKEFWUjMyX0NPVU5UKTsNCisJCWlmKCBsQ3ljbGVzIDwgbENvdW50ICkNCisJCXsJCS8vIFdlIG1pc3NlZCBhIHRpY2ssIHJlY292ZXIgZm9yIHRoZSBuZXh0Lg0KKwkJCWxDeWNsZXMgKz0gKGNvbmZpZ0NQVV9DTE9DS19IWi9jb25maWdUSUNLX1JBVEVfSFopOw0KKwkJfQ0KKwkJU2V0X3N5c3RlbV9yZWdpc3RlcihBVlIzMl9DT01QQVJFLCBsQ3ljbGVzKTsNCisJfQ0KKyNlbHNlDQorCSNwcmFnbWEgb3B0aW1pemUgPSBub19pbmxpbmUNCisJc3RhdGljIHZvaWQgcHJ2Q2xlYXJUY0ludCh2b2lkKQ0KKwl7DQorCQlBVlIzMl9UQy5jaGFubmVsW2NvbmZpZ1RJQ0tfVENfQ0hBTk5FTF0uc3I7DQorCX0NCisjZW5kaWYNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBTZXR1cCB0aGUgdGltZXIgdG8gZ2VuZXJhdGUgdGhlIHRpY2sgaW50ZXJydXB0cy4gKi8NCi1zdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICkNCitzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KHZvaWQpDQogew0KLSAgICAjaWYgKCBjb25maWdUSUNLX1VTRV9UQyA9PSAxICkNCi0gICAgICAgIHZvbGF0aWxlIGF2cjMyX3RjX3QgKiB0YyA9ICZBVlIzMl9UQzsNCisJI2lmKCBjb25maWdUSUNLX1VTRV9UQz09MSApDQogDQotICAgICAgICAvKiBPcHRpb25zIGZvciB3YXZlZm9ybSBnZW5yYXRpb24uICovDQotICAgICAgICB0Y193YXZlZm9ybV9vcHRfdCB3YXZlZm9ybV9vcHQgPQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIC5jaGFubmVsID0gY29uZmlnVElDS19UQ19DSEFOTkVMLCAgICAgICAgICAgICAgLyogQ2hhbm5lbCBzZWxlY3Rpb24uICovDQorCQl2b2xhdGlsZSBhdnIzMl90Y190ICp0YyA9ICZBVlIzMl9UQzsNCiANCi0gICAgICAgICAgICAuYnN3dHJnICA9IFRDX0VWVF9FRkZFQ1RfTk9PUCwgICAgICAgICAgICAgICAgIC8qIFNvZnR3YXJlIHRyaWdnZXIgZWZmZWN0IG9uIFRJT0IuICovDQotICAgICAgICAgICAgLmJlZXZ0ICAgPSBUQ19FVlRfRUZGRUNUX05PT1AsICAgICAgICAgICAgICAgICAvKiBFeHRlcm5hbCBldmVudCBlZmZlY3Qgb24gVElPQi4gKi8NCi0gICAgICAgICAgICAuYmNwYyAgICA9IFRDX0VWVF9FRkZFQ1RfTk9PUCwgICAgICAgICAgICAgICAgIC8qIFJDIGNvbXBhcmUgZWZmZWN0IG9uIFRJT0IuICovDQotICAgICAgICAgICAgLmJjcGIgICAgPSBUQ19FVlRfRUZGRUNUX05PT1AsICAgICAgICAgICAgICAgICAvKiBSQiBjb21wYXJlIGVmZmVjdCBvbiBUSU9CLiAqLw0KKwkJLy8gT3B0aW9ucyBmb3Igd2F2ZWZvcm0gZ2VucmF0aW9uLg0KKwkJdGNfd2F2ZWZvcm1fb3B0X3Qgd2F2ZWZvcm1fb3B0ID0NCisJCXsNCisJCS5jaGFubmVsICA9IGNvbmZpZ1RJQ0tfVENfQ0hBTk5FTCwgICAgICAgICAgICAgLyogQ2hhbm5lbCBzZWxlY3Rpb24uICovDQogDQotICAgICAgICAgICAgLmFzd3RyZyAgPSBUQ19FVlRfRUZGRUNUX05PT1AsICAgICAgICAgICAgICAgICAvKiBTb2Z0d2FyZSB0cmlnZ2VyIGVmZmVjdCBvbiBUSU9BLiAqLw0KLSAgICAgICAgICAgIC5hZWV2dCAgID0gVENfRVZUX0VGRkVDVF9OT09QLCAgICAgICAgICAgICAgICAgLyogRXh0ZXJuYWwgZXZlbnQgZWZmZWN0IG9uIFRJT0EuICovDQotICAgICAgICAgICAgLmFjcGMgICAgPSBUQ19FVlRfRUZGRUNUX05PT1AsICAgICAgICAgICAgICAgICAvKiBSQyBjb21wYXJlIGVmZmVjdCBvbiBUSU9BOiB0b2dnbGUuICovDQotICAgICAgICAgICAgLmFjcGEgICAgPSBUQ19FVlRfRUZGRUNUX05PT1AsICAgICAgICAgICAgICAgICAvKiBSQSBjb21wYXJlIGVmZmVjdCBvbiBUSU9BOiB0b2dnbGUgKG90aGVyIHBvc3NpYmlsaXRpZXMgYXJlIG5vbmUsIHNldCBhbmQgY2xlYXIpLiAqLw0KKwkJLmJzd3RyZyAgID0gVENfRVZUX0VGRkVDVF9OT09QLCAgICAgICAgICAgICAgICAvKiBTb2Z0d2FyZSB0cmlnZ2VyIGVmZmVjdCBvbiBUSU9CLiAqLw0KKwkJLmJlZXZ0ICAgID0gVENfRVZUX0VGRkVDVF9OT09QLCAgICAgICAgICAgICAgICAvKiBFeHRlcm5hbCBldmVudCBlZmZlY3Qgb24gVElPQi4gKi8NCisJCS5iY3BjICAgICA9IFRDX0VWVF9FRkZFQ1RfTk9PUCwgICAgICAgICAgICAgICAgLyogUkMgY29tcGFyZSBlZmZlY3Qgb24gVElPQi4gKi8NCisJCS5iY3BiICAgICA9IFRDX0VWVF9FRkZFQ1RfTk9PUCwgICAgICAgICAgICAgICAgLyogUkIgY29tcGFyZSBlZmZlY3Qgb24gVElPQi4gKi8NCiANCi0gICAgICAgICAgICAud2F2c2VsICA9IFRDX1dBVkVGT1JNX1NFTF9VUF9NT0RFX1JDX1RSSUdHRVIsIC8qIFdhdmVmb3JtIHNlbGVjdGlvbjogVXAgbW9kZSB3aXRob3V0IGF1dG9tYXRpYyB0cmlnZ2VyIG9uIFJDIGNvbXBhcmUuICovDQotICAgICAgICAgICAgLmVuZXRyZyAgPSBGQUxTRSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFeHRlcm5hbCBldmVudCB0cmlnZ2VyIGVuYWJsZS4gKi8NCi0gICAgICAgICAgICAuZWV2dCAgICA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEV4dGVybmFsIGV2ZW50IHNlbGVjdGlvbi4gKi8NCi0gICAgICAgICAgICAuZWV2dGVkZyA9IFRDX1NFTF9OT19FREdFLCAgICAgICAgICAgICAgICAgICAgIC8qIEV4dGVybmFsIGV2ZW50IGVkZ2Ugc2VsZWN0aW9uLiAqLw0KLSAgICAgICAgICAgIC5jcGNkaXMgID0gRkFMU0UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ291bnRlciBkaXNhYmxlIHdoZW4gUkMgY29tcGFyZS4gKi8NCi0gICAgICAgICAgICAuY3Bjc3RvcCA9IEZBTFNFLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvdW50ZXIgY2xvY2sgc3RvcHBlZCB3aXRoIFJDIGNvbXBhcmUuICovDQorCQkuYXN3dHJnICAgPSBUQ19FVlRfRUZGRUNUX05PT1AsICAgICAgICAgICAgICAgIC8qIFNvZnR3YXJlIHRyaWdnZXIgZWZmZWN0IG9uIFRJT0EuICovDQorCQkuYWVldnQgICAgPSBUQ19FVlRfRUZGRUNUX05PT1AsICAgICAgICAgICAgICAgIC8qIEV4dGVybmFsIGV2ZW50IGVmZmVjdCBvbiBUSU9BLiAqLw0KKwkJLmFjcGMgICAgID0gVENfRVZUX0VGRkVDVF9OT09QLCAgICAgICAgICAgICAgICAvKiBSQyBjb21wYXJlIGVmZmVjdCBvbiBUSU9BOiB0b2dnbGUuICovDQorCQkuYWNwYSAgICAgPSBUQ19FVlRfRUZGRUNUX05PT1AsICAgICAgICAgICAgICAgIC8qIFJBIGNvbXBhcmUgZWZmZWN0IG9uIFRJT0E6IHRvZ2dsZSAob3RoZXIgcG9zc2liaWxpdGllcyBhcmUgbm9uZSwgc2V0IGFuZCBjbGVhcikuICovDQogDQotICAgICAgICAgICAgLmJ1cnN0ICAgPSBGQUxTRSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBCdXJzdCBzaWduYWwgc2VsZWN0aW9uLiAqLw0KLSAgICAgICAgICAgIC5jbGtpICAgID0gRkFMU0UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xvY2sgaW52ZXJzaW9uLiAqLw0KLSAgICAgICAgICAgIC50Y2Nsa3MgID0gVENfQ0xPQ0tfU09VUkNFX1RDMiAgICAgICAgICAgICAgICAgLyogSW50ZXJuYWwgc291cmNlIGNsb2NrIDIuICovDQotICAgICAgICB9Ow0KKwkJLndhdnNlbCAgID0gVENfV0FWRUZPUk1fU0VMX1VQX01PREVfUkNfVFJJR0dFUiwvKiBXYXZlZm9ybSBzZWxlY3Rpb246IFVwIG1vZGUgd2l0aG91dCBhdXRvbWF0aWMgdHJpZ2dlciBvbiBSQyBjb21wYXJlLiAqLw0KKwkJLmVuZXRyZyAgID0gRkFMU0UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFeHRlcm5hbCBldmVudCB0cmlnZ2VyIGVuYWJsZS4gKi8NCisJCS5lZXZ0ICAgICA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRXh0ZXJuYWwgZXZlbnQgc2VsZWN0aW9uLiAqLw0KKwkJLmVldnRlZGcgID0gVENfU0VMX05PX0VER0UsICAgICAgICAgICAgICAgICAgICAvKiBFeHRlcm5hbCBldmVudCBlZGdlIHNlbGVjdGlvbi4gKi8NCisJCS5jcGNkaXMgICA9IEZBTFNFLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ291bnRlciBkaXNhYmxlIHdoZW4gUkMgY29tcGFyZS4gKi8NCisJCS5jcGNzdG9wICA9IEZBTFNFLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ291bnRlciBjbG9jayBzdG9wcGVkIHdpdGggUkMgY29tcGFyZS4gKi8NCiANCi0gICAgICAgIHRjX2ludGVycnVwdF90IHRjX2ludGVycnVwdCA9DQotICAgICAgICB7DQotICAgICAgICAgICAgLmV0cmdzID0gMCwNCi0gICAgICAgICAgICAubGRyYnMgPSAwLA0KLSAgICAgICAgICAgIC5sZHJhcyA9IDAsDQotICAgICAgICAgICAgLmNwY3MgID0gMSwNCi0gICAgICAgICAgICAuY3BicyAgPSAwLA0KLSAgICAgICAgICAgIC5jcGFzICA9IDAsDQotICAgICAgICAgICAgLmxvdnJzID0gMCwNCi0gICAgICAgICAgICAuY292ZnMgPSAwLA0KLSAgICAgICAgfTsNCi0gICAgI2VuZGlmIC8qIGlmICggY29uZmlnVElDS19VU0VfVEMgPT0gMSApICovDQorCQkuYnVyc3QgICAgPSBGQUxTRSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJ1cnN0IHNpZ25hbCBzZWxlY3Rpb24uICovDQorCQkuY2xraSAgICAgPSBGQUxTRSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsb2NrIGludmVyc2lvbi4gKi8NCisJCS50Y2Nsa3MgICA9IFRDX0NMT0NLX1NPVVJDRV9UQzIgICAgICAgICAgICAgICAgLyogSW50ZXJuYWwgc291cmNlIGNsb2NrIDIuICovDQorCQl9Ow0KIA0KLSAgICAvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHQvZXhjZXB0aW9uLiAqLw0KLSAgICBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7DQorCQl0Y19pbnRlcnJ1cHRfdCB0Y19pbnRlcnJ1cHQgPQ0KKwkJew0KKwkJCS5ldHJncz0wLA0KKwkJCS5sZHJicz0wLA0KKwkJCS5sZHJhcz0wLA0KKwkJCS5jcGNzID0xLA0KKwkJCS5jcGJzID0wLA0KKwkJCS5jcGFzID0wLA0KKwkJCS5sb3Zycz0wLA0KKwkJCS5jb3Zmcz0wLA0KKwkJfTsNCiANCi0gICAgLyogUmVnaXN0ZXIgdGhlIGNvbXBhcmUgaW50ZXJydXB0IGhhbmRsZXIgdG8gdGhlIGludGVycnVwdCBjb250cm9sbGVyIGFuZA0KLSAgICAgKiBlbmFibGUgdGhlIGNvbXBhcmUgaW50ZXJydXB0LiAqLw0KKwkjZW5kaWYNCiANCi0gICAgI2lmICggY29uZmlnVElDS19VU0VfVEMgPT0gMSApDQotICAgICAgICB7DQotICAgICAgICAgICAgSU5UQ19yZWdpc3Rlcl9pbnRlcnJ1cHQoICggX19pbnRfaGFuZGxlciApICYgdlRpY2ssIGNvbmZpZ1RJQ0tfVENfSVJRLCBJTlQwICk7DQorCS8qIERpc2FibGUgYWxsIGludGVycnVwdC9leGNlcHRpb24uICovDQorCXBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsNCiANCi0gICAgICAgICAgICAvKiBJbml0aWFsaXplIHRoZSB0aW1lci9jb3VudGVyLiAqLw0KLSAgICAgICAgICAgIHRjX2luaXRfd2F2ZWZvcm0oIHRjLCAmd2F2ZWZvcm1fb3B0ICk7DQorCS8qIFJlZ2lzdGVyIHRoZSBjb21wYXJlIGludGVycnVwdCBoYW5kbGVyIHRvIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciBhbmQNCisJZW5hYmxlIHRoZSBjb21wYXJlIGludGVycnVwdC4gKi8NCiANCi0gICAgICAgICAgICAvKiBTZXQgdGhlIGNvbXBhcmUgdHJpZ2dlcnMuDQotICAgICAgICAgICAgICogUmVtZW1iZXIgVEMgY291bnRlciBpcyAxNi1iaXRzLCBzbyBjb3VudGluZyBzZWNvbmQgaXMgbm90IHBvc3NpYmxlIQ0KLSAgICAgICAgICAgICAqIFRoYXQncyB3aHkgd2UgY29uZmlndXJlIGl0IHRvIGNvdW50IG1zLiAqLw0KLSAgICAgICAgICAgIHRjX3dyaXRlX3JjKCB0YywgY29uZmlnVElDS19UQ19DSEFOTkVMLCAoIGNvbmZpZ1BCQV9DTE9DS19IWiAvIDQgKSAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApOw0KKwkjaWYoIGNvbmZpZ1RJQ0tfVVNFX1RDPT0xICkNCisJew0KKwkJSU5UQ19yZWdpc3Rlcl9pbnRlcnJ1cHQoKF9faW50X2hhbmRsZXIpJnZUaWNrLCBjb25maWdUSUNLX1RDX0lSUSwgSU5UMCk7DQogDQotICAgICAgICAgICAgdGNfY29uZmlndXJlX2ludGVycnVwdHMoIHRjLCBjb25maWdUSUNLX1RDX0NIQU5ORUwsICZ0Y19pbnRlcnJ1cHQgKTsNCisJCS8qIEluaXRpYWxpemUgdGhlIHRpbWVyL2NvdW50ZXIuICovDQorCQl0Y19pbml0X3dhdmVmb3JtKHRjLCAmd2F2ZWZvcm1fb3B0KTsNCiANCi0gICAgICAgICAgICAvKiBTdGFydCB0aGUgdGltZXIvY291bnRlci4gKi8NCi0gICAgICAgICAgICB0Y19zdGFydCggdGMsIGNvbmZpZ1RJQ0tfVENfQ0hBTk5FTCApOw0KLSAgICAgICAgfQ0KLSAgICAjZWxzZSAvKiBpZiAoIGNvbmZpZ1RJQ0tfVVNFX1RDID09IDEgKSAqLw0KLSAgICAgICAgew0KLSAgICAgICAgICAgIElOVENfcmVnaXN0ZXJfaW50ZXJydXB0KCAoIF9faW50X2hhbmRsZXIgKSAmIHZUaWNrLCBBVlIzMl9DT1JFX0NPTVBBUkVfSVJRLCBJTlQwICk7DQotICAgICAgICAgICAgcHJ2U2NoZWR1bGVGaXJzdFRpY2soKTsNCi0gICAgICAgIH0NCi0gICAgI2VuZGlmIC8qIGlmICggY29uZmlnVElDS19VU0VfVEMgPT0gMSApICovDQorCQkvKiBTZXQgdGhlIGNvbXBhcmUgdHJpZ2dlcnMuDQorCQlSZW1lbWJlciBUQyBjb3VudGVyIGlzIDE2LWJpdHMsIHNvIGNvdW50aW5nIHNlY29uZCBpcyBub3QgcG9zc2libGUhDQorCQlUaGF0J3Mgd2h5IHdlIGNvbmZpZ3VyZSBpdCB0byBjb3VudCBtcy4gKi8NCisJCXRjX3dyaXRlX3JjKCB0YywgY29uZmlnVElDS19UQ19DSEFOTkVMLCAoIGNvbmZpZ1BCQV9DTE9DS19IWiAvIDQpIC8gY29uZmlnVElDS19SQVRFX0haICk7DQorDQorCQl0Y19jb25maWd1cmVfaW50ZXJydXB0cyggdGMsIGNvbmZpZ1RJQ0tfVENfQ0hBTk5FTCwgJnRjX2ludGVycnVwdCApOw0KKw0KKwkJLyogU3RhcnQgdGhlIHRpbWVyL2NvdW50ZXIuICovDQorCQl0Y19zdGFydCh0YywgY29uZmlnVElDS19UQ19DSEFOTkVMKTsNCisJfQ0KKwkjZWxzZQ0KKwl7DQorCQlJTlRDX3JlZ2lzdGVyX2ludGVycnVwdCgoX19pbnRfaGFuZGxlcikmdlRpY2ssIEFWUjMyX0NPUkVfQ09NUEFSRV9JUlEsIElOVDApOw0KKwkJcHJ2U2NoZWR1bGVGaXJzdFRpY2soKTsNCisJfQ0KKwkjZW5kaWYNCiB9DQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvSUFSL0FWUjMyX1VDMy9wb3J0bWFjcm8uaCBiL3BvcnRhYmxlL0lBUi9BVlIzMl9VQzMvcG9ydG1hY3JvLmgKaW5kZXggMjdmNWU2Yy4uZWY3ZDFkZiAxMDA2NDQKLS0tIGEvcG9ydGFibGUvSUFSL0FWUjMyX1VDMy9wb3J0bWFjcm8uaAorKysgYi9wb3J0YWJsZS9JQVIvQVZSMzJfVUMzL3BvcnRtYWNyby5oCkBAIC0xLDUgKzEsNCBAQAogLypUaGlzIGZpbGUgaGFzIGJlZW4gcHJlcGFyZWQgZm9yIERveHlnZW4gYXV0b21hdGljIGRvY3VtZW50YXRpb24gZ2VuZXJhdGlvbi4qLw0KLQ0KIC8qISBcZmlsZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAgKg0KICAqIFxicmllZiBGcmVlUlRPUyBwb3J0IGhlYWRlciBmb3IgQVZSMzIgVUMzLg0KQEAgLTQzLDcgKzQyLDcgQEAKIA0KIA0KICNpZm5kZWYgUE9SVE1BQ1JPX0gNCi0gICAgI2RlZmluZSBQT1JUTUFDUk9fSA0KKyNkZWZpbmUgUE9SVE1BQ1JPX0gNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICogUG9ydCBzcGVjaWZpYyBkZWZpbml0aW9ucy4NCkBAIC01NCw2MyArNTMsNjMgQEAKICAqIFRoZXNlIHNldHRpbmdzIHNob3VsZCBub3QgYmUgYWx0ZXJlZC4NCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICovDQotICAgICNpbmNsdWRlIDxhdnIzMi9pby5oPg0KLSAgICAjaW5jbHVkZSAiaW50Yy5oIg0KLSAgICAjaW5jbHVkZSAiY29tcGlsZXIuaCINCisjaW5jbHVkZSA8YXZyMzIvaW8uaD4NCisjaW5jbHVkZSAiaW50Yy5oIg0KKyNpbmNsdWRlICJjb21waWxlci5oIg0KIA0KLSAgICAjaWZkZWYgX19jcGx1c3BsdXMNCi0gICAgICAgIGV4dGVybiAiQyIgew0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCiANCiANCiAvKiBUeXBlIGRlZmluaXRpb25zLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRDSEFSICAgICAgICAgIGNoYXINCi0gICAgI2RlZmluZSBwb3J0RkxPQVQgICAgICAgICBmbG9hdA0KLSAgICAjZGVmaW5lIHBvcnRET1VCTEUgICAgICAgIGRvdWJsZQ0KLSAgICAjZGVmaW5lIHBvcnRMT05HICAgICAgICAgIGxvbmcNCi0gICAgI2RlZmluZSBwb3J0U0hPUlQgICAgICAgICBzaG9ydA0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19UWVBFICAgIHVpbnQzMl90DQotICAgICNkZWZpbmUgcG9ydEJBU0VfVFlQRSAgICAgbG9uZw0KKyNkZWZpbmUgcG9ydENIQVIgICAgICAgIGNoYXINCisjZGVmaW5lIHBvcnRGTE9BVCAgICAgICBmbG9hdA0KKyNkZWZpbmUgcG9ydERPVUJMRSAgICAgIGRvdWJsZQ0KKyNkZWZpbmUgcG9ydExPTkcgICAgICAgIGxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVCAgICAgICBzaG9ydA0KKyNkZWZpbmUgcG9ydFNUQUNLX1RZUEUgIHVpbnQzMl90DQorI2RlZmluZSBwb3J0QkFTRV9UWVBFICAgbG9uZw0KIA0KLSAgICB0eXBlZGVmIHBvcnRTVEFDS19UWVBFICAgU3RhY2tUeXBlX3Q7DQotICAgIHR5cGVkZWYgbG9uZyAgICAgICAgICAgICBCYXNlVHlwZV90Ow0KLSAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgICAgVUJhc2VUeXBlX3Q7DQordHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSBTdGFja1R5cGVfdDsNCit0eXBlZGVmIGxvbmcgQmFzZVR5cGVfdDsNCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgVUJhc2VUeXBlX3Q7DQogDQogDQotICAgICNkZWZpbmUgVEFTS19ERUxBWV9NUyggeCApICAgICAoICggeCApIC8gcG9ydFRJQ0tfUEVSSU9EX01TICkNCi0gICAgI2RlZmluZSBUQVNLX0RFTEFZX1MoIHggKSAgICAgICggKCB4ICkgKiAxMDAwIC8gcG9ydFRJQ0tfUEVSSU9EX01TICkNCi0gICAgI2RlZmluZSBUQVNLX0RFTEFZX01JTiggeCApICAgICggKCB4ICkgKiA2MCAqIDEwMDAgLyBwb3J0VElDS19QRVJJT0RfTVMgKQ0KKyNkZWZpbmUgVEFTS19ERUxBWV9NUyh4KSAgICggKHgpICAgICAgICAvcG9ydFRJQ0tfUEVSSU9EX01TICkNCisjZGVmaW5lIFRBU0tfREVMQVlfUyh4KSAgICAoICh4KSoxMDAwICAgL3BvcnRUSUNLX1BFUklPRF9NUyApDQorI2RlZmluZSBUQVNLX0RFTEFZX01JTih4KSAgKCAoeCkqNjAqMTAwMC9wb3J0VElDS19QRVJJT0RfTVMgKQ0KIA0KLSAgICAjZGVmaW5lIGNvbmZpZ1RJQ0tfVENfSVJRICAgIEFUUEFTVEUyKCBBVlIzMl9UQ19JUlEsIGNvbmZpZ1RJQ0tfVENfQ0hBTk5FTCApDQorI2RlZmluZSBjb25maWdUSUNLX1RDX0lSUSAgICAgICAgICAgICBBVFBBU1RFMihBVlIzMl9UQ19JUlEsIGNvbmZpZ1RJQ0tfVENfQ0hBTk5FTCkNCiANCi0gICAgI2lmICggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCi0gICAgICAgIHR5cGVkZWYgdWludDE2X3QgICBUaWNrVHlwZV90Ow0KLSAgICAgICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICggVGlja1R5cGVfdCApIDB4ZmZmZg0KLSAgICAjZWxzZQ0KLSAgICAgICAgdHlwZWRlZiB1aW50MzJfdCAgIFRpY2tUeXBlX3Q7DQotICAgICAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQotICAgICNlbmRpZg0KKyNpZiggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCisgIHR5cGVkZWYgdWludDE2X3QgVGlja1R5cGVfdDsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggVGlja1R5cGVfdCApIDB4ZmZmZg0KKyNlbHNlDQorICB0eXBlZGVmIHVpbnQzMl90IFRpY2tUeXBlX3Q7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwNCisjZW5kaWYNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWNzLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEggICAgICAoIC0xICkNCi0gICAgI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMgICAgKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCi0gICAgI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQgICAgNA0KLSAgICAjZGVmaW5lIHBvcnROT1AoKSAgICB7IF9fYXNtX18gX192b2xhdGlsZV9fICggIm5vcCIgKTsgfQ0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSCAgICAgICggLTEgKQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TICAgICAgKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCisjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVCAgICAgICA0DQorI2RlZmluZSBwb3J0Tk9QKCkgICAgICAgICAgICAge19fYXNtX18gX192b2xhdGlsZV9fICgibm9wIik7fQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIElOVEMtc3BlY2lmaWMuICovDQotICAgICNkZWZpbmUgRElTQUJMRV9BTExfRVhDRVBUSU9OUygpICAgICAgICBEaXNhYmxlX2dsb2JhbF9leGNlcHRpb24oKQ0KLSAgICAjZGVmaW5lIEVOQUJMRV9BTExfRVhDRVBUSU9OUygpICAgICAgICAgRW5hYmxlX2dsb2JhbF9leGNlcHRpb24oKQ0KKyNkZWZpbmUgRElTQUJMRV9BTExfRVhDRVBUSU9OUygpICAgIERpc2FibGVfZ2xvYmFsX2V4Y2VwdGlvbigpDQorI2RlZmluZSBFTkFCTEVfQUxMX0VYQ0VQVElPTlMoKSAgICAgRW5hYmxlX2dsb2JhbF9leGNlcHRpb24oKQ0KIA0KLSAgICAjZGVmaW5lIERJU0FCTEVfQUxMX0lOVEVSUlVQVFMoKSAgICAgICAgRGlzYWJsZV9nbG9iYWxfaW50ZXJydXB0KCkNCi0gICAgI2RlZmluZSBFTkFCTEVfQUxMX0lOVEVSUlVQVFMoKSAgICAgICAgIEVuYWJsZV9nbG9iYWxfaW50ZXJydXB0KCkNCisjZGVmaW5lIERJU0FCTEVfQUxMX0lOVEVSUlVQVFMoKSAgICBEaXNhYmxlX2dsb2JhbF9pbnRlcnJ1cHQoKQ0KKyNkZWZpbmUgRU5BQkxFX0FMTF9JTlRFUlJVUFRTKCkgICAgIEVuYWJsZV9nbG9iYWxfaW50ZXJydXB0KCkNCiANCi0gICAgI2RlZmluZSBESVNBQkxFX0lOVF9MRVZFTCggaW50X2xldiApICAgIERpc2FibGVfaW50ZXJydXB0X2xldmVsKCBpbnRfbGV2ICkNCi0gICAgI2RlZmluZSBFTkFCTEVfSU5UX0xFVkVMKCBpbnRfbGV2ICkgICAgIEVuYWJsZV9pbnRlcnJ1cHRfbGV2ZWwoIGludF9sZXYgKQ0KKyNkZWZpbmUgRElTQUJMRV9JTlRfTEVWRUwoaW50X2xldikgIERpc2FibGVfaW50ZXJydXB0X2xldmVsKGludF9sZXYpDQorI2RlZmluZSBFTkFCTEVfSU5UX0xFVkVMKGludF9sZXYpICAgRW5hYmxlX2ludGVycnVwdF9sZXZlbChpbnRfbGV2KQ0KIA0KIA0KIC8qDQpAQCAtMTI2LDMzICsxMjUsMzIgQEAKICAqIFNIQUxMIE5PVCBCRSBDQUxMRUQgRlJPTSBXSVRISU4gQU4gSU5URVJSVVBUIGFzIGZwdXRzIGFuZCBwcmludGYgdXNlIG1hbGxvYywNCiAgKiB3aGljaCBpcyBpbnRlcnJ1cHQtdW5zYWZlIHdpdGggdGhlIGN1cnJlbnQgX19tYWxsb2NfbG9jayBhbmQgX19tYWxsb2NfdW5sb2NrLg0KICAqLw0KLSAgICAjaWYgY29uZmlnREJHDQotICAgICAgICAjZGVmaW5lIHBvcnREQkdfVFJBQ0UoIC4uLiApICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBmcHV0cyggX19GSUxFX18gIjoiIEFTVFJJTkdaKCBfX0xJTkVfXyApICI6ICIsIHN0ZG91dCApOyBcDQotICAgICAgICBwcmludGYoIF9fVkFfQVJHU19fICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBmcHV0cyggIlxyXG4iLCBzdGRvdXQgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIH0NCi0gICAgI2Vsc2UNCi0gICAgICAgICNkZWZpbmUgcG9ydERCR19UUkFDRSggLi4uICkNCi0gICAgI2VuZGlmDQorI2lmIGNvbmZpZ0RCRw0KKwkjZGVmaW5lIHBvcnREQkdfVFJBQ0UoLi4uKQkJCQkJCQkJCQkJCVwNCisJewkJCQkJCQkJCQkJCQkJCQkJCVwNCisJICBmcHV0cyhfX0ZJTEVfXyAiOiIgQVNUUklOR1ooX19MSU5FX18pICI6ICIsIHN0ZG91dCk7CQkJCQlcDQorCSAgcHJpbnRmKF9fVkFfQVJHU19fKTsJCQkJCQkJCQkJCQkJXA0KKwkgIGZwdXRzKCJcclxuIiwgc3Rkb3V0KTsJCQkJCQkJCQkJCQlcDQorCX0NCisjZWxzZQ0KKwkjZGVmaW5lIHBvcnREQkdfVFJBQ0UoLi4uKQ0KKyNlbmRpZg0KIA0KIA0KIC8qIENyaXRpY2FsIHNlY3Rpb24gbWFuYWdlbWVudC4gKi8NCi0gICAgI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgICAgRElTQUJMRV9BTExfSU5URVJSVVBUUygpDQotICAgICNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkgICAgIEVOQUJMRV9BTExfSU5URVJSVVBUUygpDQorI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgIERJU0FCTEVfQUxMX0lOVEVSUlVQVFMoKQ0KKyNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkgICBFTkFCTEVfQUxMX0lOVEVSUlVQVFMoKQ0KIA0KIA0KLSAgICBleHRlcm4gdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKTsNCi0gICAgZXh0ZXJuIHZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApOw0KIA0KLSAgICAjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpICAgIHZQb3J0RW50ZXJDcml0aWNhbCgpOw0KLSAgICAjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkgICAgIHZQb3J0RXhpdENyaXRpY2FsKCk7DQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKSAgICAgIHZQb3J0RW50ZXJDcml0aWNhbCgpOw0KKyNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKSAgICAgICB2UG9ydEV4aXRDcml0aWNhbCgpOw0KIA0KIA0KIC8qIEFkZGVkIGFzIHRoZXJlIGlzIG5vIHN1Y2ggZnVuY3Rpb24gaW4gRnJlZVJUT1MuICovDQotICAgIGV4dGVybiB2b2lkICogcHZQb3J0UmVhbGxvYyggdm9pZCAqIHB2LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB4U2l6ZSApOw0KK2V4dGVybiB2b2lkICpwdlBvcnRSZWFsbG9jKCB2b2lkICpwdiwgc2l6ZV90IHhTaXplICk7DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogDQpAQCAtMTYxLDQ0ICsxNTksNDQgQEAKIC8qDQogICogUmVzdG9yZSBDb250ZXh0IGZvciBjYXNlcyBvdGhlciB0aGFuIElOVGkuDQogICovDQotICAgICNkZWZpbmUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGV4dGVybiB2b2xhdGlsZSB1aW50MzJfdCB1bENyaXRpY2FsTmVzdGluZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBleHRlcm4gdm9sYXRpbGUgdm9pZCAqIHZvbGF0aWxlIHB4Q3VycmVudFRDQjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogU2V0IFNQIHRvIHBvaW50IHRvIG5ldyBzdGFjayAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICJtb3YgICAgIHI4LCBMV1JEKCJBU1RSSU5HWiAoIHB4Q3VycmVudFRDQiApICIpCQkJCQkJCQkJCQkJXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3JoICAgICByOCwgSFdSRCgiQVNUUklOR1ogKCBweEN1cnJlbnRUQ0IgKSAiKQkJCQkJCQkJCQkJCVxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxkLncgICAgcjAsIHI4WzBdCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsZC53ICAgIHNwLCByMFswXQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogUmVzdG9yZSB1bENyaXRpY2FsTmVzdGluZyB2YXJpYWJsZSAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsZC53ICAgIHIwLCBzcCsrCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW92ICAgICByOCwgTFdSRCgiQVNUUklOR1ogKCB1bENyaXRpY2FsTmVzdGluZyApICIpCQkJCQkJCQkJCVxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcmggICAgIHI4LCBIV1JEKCJBU1RSSU5HWiAoIHVsQ3JpdGljYWxOZXN0aW5nICkgIikJCQkJCQkJCQkJXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdC53ICAgIHI4WzBdLCByMAkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBSZXN0b3JlIFIwLi5SNyAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsZG0gICAgIHNwKyssIHIwLXI3CQkJCQkJCQkJCQkJCQkJCQlcblx0IiAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogUjAtUjcgc2hvdWxkIG5vdCBiZSB1c2VkIGJlbG93IHRoaXMgbGluZSAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIFNraXAgUEMgYW5kIFNSICh3aWxsIGRvIGl0IGF0IHRoZSBlbmQpICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgICAgc3AsIC0yKjQJCQkJCQkJCQkJCQkJCQkJCQlcblx0IiAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogUmVzdG9yZSBSOC4uUjEyIGFuZCBMUiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGRtICAgICBzcCsrLCByOC1yMTIsIGxyCQkJCQkJCQkJCQkJCQkJCVxuXHQiICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBSZXN0b3JlIFNSICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsZC53ICAgIHIwLCBzcFstOCo0XQkJCQkJCQkJCQkJCQkJCQkJXG5cdCIvKiBSMCBpcyBtb2RpZmllZCwgaXMgcmVzdG9yZWQgbGF0ZXIuICovXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXRzciAgICAiQVNUUklOR1ogKCBBVlIzMl9TUiApICIsIHIwCQkJCQkJCQkJCQkJCQlcblx0IiAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBSZXN0b3JlIHIwICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxkLncgICAgcjAsIHNwWy05KjRdCQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAvKiBSZXN0b3JlIFBDICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxkLncgICAgcGMsIHNwWy03KjRdIiAvKiBHZXQgUEMgZnJvbSBzdGFjayAtIFBDIGlzIHRoZSA3dGggcmVnaXN0ZXIgc2F2ZWQgKi8gXA0KLSAgICAgICAgICAgICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAvKiBGb3JjZSBpbXBvcnQgb2YgZ2xvYmFsIHN5bWJvbHMgZnJvbSBhc3NlbWJseSAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgdWxDcml0aWNhbE5lc3Rpbmc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHB4Q3VycmVudFRDQjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIH0NCisjZGVmaW5lIHBvcnRSRVNUT1JFX0NPTlRFWFQoKQkJCQkJCQkJCQkJCQkJCQlcDQorewkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgZXh0ZXJuIHZvbGF0aWxlIHVpbnQzMl90IHVsQ3JpdGljYWxOZXN0aW5nOwkJCQkJCQkJCQlcDQorICBleHRlcm4gdm9sYXRpbGUgdm9pZCAqdm9sYXRpbGUgcHhDdXJyZW50VENCOwkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgLyogU2V0IFNQIHRvIHBvaW50IHRvIG5ldyBzdGFjayAqLwkJCQkJCQkJCQkJCQkJXA0KKyAgICAibW92ICAgICByOCwgTFdSRCgiQVNUUklOR1oocHhDdXJyZW50VENCKSIpCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJvcmggICAgIHI4LCBIV1JEKCJBU1RSSU5HWihweEN1cnJlbnRUQ0IpIikJCQkJCQkJCQkJCQlcblx0IlwNCisgICAgImxkLncgICAgcjAsIHI4WzBdCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJsZC53ICAgIHNwLCByMFswXQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBSZXN0b3JlIHVsQ3JpdGljYWxOZXN0aW5nIHZhcmlhYmxlICovCQkJCQkJCQkJCQkJXA0KKyAgICAibGQudyAgICByMCwgc3ArKwkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAibW92ICAgICByOCwgTFdSRCgiQVNUUklOR1oodWxDcml0aWNhbE5lc3RpbmcpIikJCQkJCQkJCQkJXG5cdCJcDQorICAgICJvcmggICAgIHI4LCBIV1JEKCJBU1RSSU5HWih1bENyaXRpY2FsTmVzdGluZykiKQkJCQkJCQkJCQlcblx0IlwNCisgICAgInN0LncgICAgcjhbMF0sIHIwCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIFJlc3RvcmUgUjAuLlI3ICovCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgICJsZG0gICAgIHNwKyssIHIwLXI3CQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCisgICAgLyogUjAtUjcgc2hvdWxkIG5vdCBiZSB1c2VkIGJlbG93IHRoaXMgbGluZSAqLwkJCQkJCQkJCQkJXA0KKyAgICAvKiBTa2lwIFBDIGFuZCBTUiAod2lsbCBkbyBpdCBhdCB0aGUgZW5kKSAqLwkJCQkJCQkJCQkJXA0KKyAgICAic3ViICAgICBzcCwgLTIqNAkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAvKiBSZXN0b3JlIFI4Li5SMTIgYW5kIExSICovCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAibGRtICAgICBzcCsrLCByOC1yMTIsIGxyCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAvKiBSZXN0b3JlIFNSICovCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAibGQudyAgICByMCwgc3BbLTgqNF0JCQkJCQkJCQkJCQkJCQkJCVxuXHQiIC8qIFIwIGlzIG1vZGlmaWVkLCBpcyByZXN0b3JlZCBsYXRlci4gKi9cDQorICAgICJtdHNyICAgICJBU1RSSU5HWihBVlIzMl9TUikiLCByMAkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgIC8qIFJlc3RvcmUgcjAgKi8JCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgICJsZC53ICAgIHIwLCBzcFstOSo0XQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgIC8qIFJlc3RvcmUgUEMgKi8JCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgICJsZC53ICAgIHBjLCBzcFstNyo0XSIgLyogR2V0IFBDIGZyb20gc3RhY2sgLSBQQyBpcyB0aGUgN3RoIHJlZ2lzdGVyIHNhdmVkICovCQkJXA0KKyAgKTsJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgLyogRm9yY2UgaW1wb3J0IG9mIGdsb2JhbCBzeW1ib2xzIGZyb20gYXNzZW1ibHkgKi8JCQkJCQkJCQkJXA0KKyAgdWxDcml0aWNhbE5lc3Rpbmc7CQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgcHhDdXJyZW50VENCOwkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KK30NCiANCiANCiAvKg0KQEAgLTIwOSwxNjggKzIwNywxNjggQEAKICAqIGFyZSBub3QgdGhlIHNhbWUgYmV0d2VlbiBJTlQwLi4zIGV4Y2VwdGlvbnMgYW5kIHRoZSBzY2FsbCBleGNlcHRpb24uDQogICovDQogDQotLyogVGFzayBjb250ZXh0IHN0YWNrIGxheW91dDogKi8NCi0vKiBSOCAgKCopICovDQotLyogUjkgICgqKSAqLw0KLS8qIFIxMCAoKikgKi8NCi0vKiBSMTEgKCopICovDQotLyogUjEyICgqKSAqLw0KLS8qIFIxNC9MUiAoKikgKi8NCi0vKiBSMTUvUEMgKCopICovDQotLyogU1IgKCopICovDQotLyogUjAgKi8NCi0vKiBSMSAqLw0KLS8qIFIyICovDQotLyogUjMgKi8NCi0vKiBSNCAqLw0KLS8qIFI1ICovDQotLyogUjYgKi8NCi0vKiBSNyAqLw0KLS8qIHVsQ3JpdGljYWxOZXN0aW5nICovDQotLyogKCopIGF1dG9tYXRpY2FsbHkgZG9uZSBmb3IgSU5UMC4uSU5UMywgYnV0IG5vdCBmb3IgU0NBTEwgKi8NCisvLyBUYXNrIGNvbnRleHQgc3RhY2sgbGF5b3V0Og0KKyAgLy8gUjggICgqKQ0KKyAgLy8gUjkgICgqKQ0KKyAgLy8gUjEwICgqKQ0KKyAgLy8gUjExICgqKQ0KKyAgLy8gUjEyICgqKQ0KKyAgLy8gUjE0L0xSICgqKQ0KKyAgLy8gUjE1L1BDICgqKQ0KKyAgLy8gU1IgKCopDQorICAvLyBSMA0KKyAgLy8gUjENCisgIC8vIFIyDQorICAvLyBSMw0KKyAgLy8gUjQNCisgIC8vIFI1DQorICAvLyBSNg0KKyAgLy8gUjcNCisgIC8vIHVsQ3JpdGljYWxOZXN0aW5nDQorLy8gKCopIGF1dG9tYXRpY2FsbHkgZG9uZSBmb3IgSU5UMC4uSU5UMywgYnV0IG5vdCBmb3IgU0NBTEwNCiANCiAvKg0KICAqIFRoZSBJU1IgdXNlZCBmb3IgdGhlIHNjaGVkdWxlciB0aWNrIGRlcGVuZHMgb24gd2hldGhlciB0aGUgY29vcGVyYXRpdmUgb3INCiAgKiB0aGUgcHJlZW1wdGl2ZSBzY2hlZHVsZXIgaXMgYmVpbmcgdXNlZC4NCiAgKi8NCi0gICAgI2lmIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDANCisjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMA0KIA0KIC8qDQogICogcG9ydFNBVkVfQ09OVEVYVF9PU19JTlQoKSBmb3IgT1MgVGljayBleGNlcHRpb24uDQogICovDQotICAgICAgICAjZGVmaW5lIHBvcnRTQVZFX0NPTlRFWFRfT1NfSU5UKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIFNhdmUgUjAuLlI3ICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICJzdG0gICAgIC0tc3AsIHIwLXI3IiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIFdpdGggdGhlIGNvb3BlcmF0aXZlIHNjaGVkdWxlciwgYXMgdGhlcmUgaXMgbm8gY29udGV4dCBzd2l0Y2ggYnkgaW50ZXJydXB0LCAqLyBcDQotICAgICAgICAvKiB0aGVyZSBpcyBhbHNvIG5vIGNvbnRleHQgc2F2ZS4gKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB9DQorI2RlZmluZSBwb3J0U0FWRV9DT05URVhUX09TX0lOVCgpCQkJCQkJCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIC8qIFNhdmUgUjAuLlI3ICovCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgic3RtICAgICAtLXNwLCByMC1yNyIpOwkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIC8qIFdpdGggdGhlIGNvb3BlcmF0aXZlIHNjaGVkdWxlciwgYXMgdGhlcmUgaXMgbm8gY29udGV4dCBzd2l0Y2ggYnkgaW50ZXJydXB0LCAqLwkJCVwNCisgIC8qIHRoZXJlIGlzIGFsc28gbm8gY29udGV4dCBzYXZlLiAqLwkJCQkJCQkJCQkJCQkJXA0KK30NCiANCiAvKg0KICAqIHBvcnRSRVNUT1JFX0NPTlRFWFRfT1NfSU5UKCkgZm9yIFRpY2sgZXhjZXB0aW9uLg0KICAqLw0KLSAgICAgICAgI2RlZmluZSBwb3J0UkVTVE9SRV9DT05URVhUX09TX0lOVCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIFJlc3RvcmUgUjAuLlI3ICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgImxkbSAgICAgc3ArKywgcjAtcjcJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogV2l0aCB0aGUgY29vcGVyYXRpdmUgc2NoZWR1bGVyLCBhcyB0aGVyZSBpcyBubyBjb250ZXh0IHN3aXRjaCBieSBpbnRlcnJ1cHQsICovIFwNCi0gICAgICAgICAgICAvKiB0aGVyZSBpcyBhbHNvIG5vIGNvbnRleHQgcmVzdG9yZS4gKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICJyZXRlIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgfQ0KKyNkZWZpbmUgcG9ydFJFU1RPUkVfQ09OVEVYVF9PU19JTlQoKQkJCQkJCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgLyogUmVzdG9yZSBSMC4uUjcgKi8JCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgImxkbSAgICAgc3ArKywgcjAtcjcJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBXaXRoIHRoZSBjb29wZXJhdGl2ZSBzY2hlZHVsZXIsIGFzIHRoZXJlIGlzIG5vIGNvbnRleHQgc3dpdGNoIGJ5IGludGVycnVwdCwgKi8JCVwNCisgICAgLyogdGhlcmUgaXMgYWxzbyBubyBjb250ZXh0IHJlc3RvcmUuICovCQkJCQkJCQkJCQkJCVwNCisgICAgInJldGUiCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgKTsJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KK30NCiANCi0gICAgI2Vsc2UgLyogaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMCAqLw0KKyNlbHNlDQogDQogLyoNCiAgKiBwb3J0U0FWRV9DT05URVhUX09TX0lOVCgpIGZvciBPUyBUaWNrIGV4Y2VwdGlvbi4NCiAgKi8NCi0gICAgICAgICNkZWZpbmUgcG9ydFNBVkVfQ09OVEVYVF9PU19JTlQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgZXh0ZXJuIHZvbGF0aWxlIHVpbnQzMl90IHVsQ3JpdGljYWxOZXN0aW5nOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGV4dGVybiB2b2xhdGlsZSB2b2lkICogdm9sYXRpbGUgcHhDdXJyZW50VENCOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgLyogV2hlbiB3ZSBjb21lIGhlcmUgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIFJlZ2lzdGVycyBSOC4uUjEyLCBMUiwgUEMgYW5kIFNSIGhhZCBhbHJlYWR5IGJlZW4gcHVzaGVkIHRvIHN5c3RlbSBzdGFjayAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBTYXZlIFIwLi5SNyAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgInN0bSAgICAgLS1zcCwgcjAtcjcJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBTYXZlIHVsQ3JpdGljYWxOZXN0aW5nIHZhcmlhYmxlICAtIFIwIGlzIG92ZXJ3cml0dGVuICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgIm1vdiAgICAgcjgsIExXUkQoIkFTVFJJTkdaICggdWxDcml0aWNhbE5lc3RpbmcgKSAiKQkJCQkJCQkJCQkJCVxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9yaCAgICAgcjgsIEhXUkQoIkFTVFJJTkdaICggdWxDcml0aWNhbE5lc3RpbmcgKSAiKQkJCQkJCQkJCQkJCVxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGQudyAgICByMCwgcjhbMF0JCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3QudyAgICAtLXNwLCByMAkJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIENoZWNrIGlmIElOVDAgb3IgaGlnaGVyIHdlcmUgYmVpbmcgaGFuZGxlZCAoY2FzZSB3aGVyZSB0aGUgT1MgdGljayBpbnRlcnJ1cHRlZCBhbm90aGVyICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBpbnRlcnJ1cHQgaGFuZGxlciAod2hpY2ggd2FzIG9mIGEgaGlnaGVyIHByaW9yaXR5IGxldmVsIGJ1dCBkZWNpZGVkIHRvIGxvd2VyIGl0cyBwcmlvcml0eSAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogbGV2ZWwgYW5kIGFsbG93IG90aGVyIGxvd2VyIGludGVycnVwdCBsZXZlbCB0byBvY2N1cikuICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIEluIHRoaXMgY2FzZSB3ZSBkb24ndCB3YW50IHRvIGRvIGEgdGFzayBzd2l0Y2ggYmVjYXVzZSB3ZSBkb24ndCBrbm93IHdoYXQgdGhlIHN0YWNrICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBjdXJyZW50bHkgbG9va3MgbGlrZSAod2UgZG9uJ3Qga25vdyB3aGF0IHRoZSBpbnRlcnJ1cHRlZCBpbnRlcnJ1cHQgaGFuZGxlciB3YXMgZG9pbmcpLiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogU2F2aW5nIFNQIGluIHB4Q3VycmVudFRDQiBhbmQgdGhlbiBsYXRlciByZXN0b3JpbmcgaXQgKHRoaW5raW5nIHJlc3RvcmluZyB0aGUgdGFzaykgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIHdpbGwganVzdCBiZSByZXN0b3JpbmcgdGhlIGludGVycnVwdCBoYW5kbGVyLCBubyB3YXkhISEgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBTbywgc2luY2Ugd2Ugd29uJ3QgZG8gYSB2VGFza1N3aXRjaENvbnRleHQoKSwgaXQncyBvZiBubyB1c2UgdG8gc2F2ZSBTUC4gKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsZC53ICAgIHIwLCBzcFs5KjRdCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiLyogUmVhZCBTUiBpbiBzdGFjayAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmZleHR1ICByMCwgcjAsIDIyLCAzCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiLyogRXh0cmFjdCB0aGUgbW9kZSBiaXRzIHRvIFIwLiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3AudyAgICByMCwgMQkJCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiLyogQ29tcGFyZSB0aGUgbW9kZSBiaXRzIHdpdGggc3VwZXJ2aXNvciBtb2RlKGInMDAxKSAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnJoaSAgICBMQUJFTF9JTlRfU0tJUF9TQVZFX0NPTlRFWFRfIkFTVFJJTkdaICggX19MSU5FX18gKSAiCQkJCQkJCQkJCVxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIFN0b3JlIFNQIGluIHRoZSBmaXJzdCBtZW1iZXIgb2YgdGhlIHN0cnVjdHVyZSBwb2ludGVkIHRvIGJ5IHB4Q3VycmVudFRDQiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBOT1RFOiB3ZSBkb24ndCBlbnRlciBhIGNyaXRpY2FsIHNlY3Rpb24gaGVyZSBiZWNhdXNlIGFsbCBpbnRlcnJ1cHQgaGFuZGxlcnMgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogTVVTVCBwZXJmb3JtIGEgU0FWRV9DT05URVhUL1JFU1RPUkVfQ09OVEVYVCBpbiB0aGUgc2FtZSB3YXkgYXMgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIHBvcnRTQVZFX0NPTlRFWFRfT1NfSU5UL3BvcnRfUkVTVE9SRV9DT05URVhUX09TX0lOVCBpZiB0aGV5IGNhbGwgT1MgZnVuY3Rpb25zLiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiA9PiBhbGwgaW50ZXJydXB0IGhhbmRsZXJzIG11c3QgdXNlIHBvcnRFTlRFUl9TV0lUQ0hJTkdfSVNSL3BvcnRFWElUX1NXSVRDSElOR19JU1IuICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3YgICAgIHI4LCBMV1JEKCJBU1RSSU5HWiAoIHB4Q3VycmVudFRDQiApICIpCQkJCQkJCQkJCQkJCQlcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3JoICAgICByOCwgSFdSRCgiQVNUUklOR1ogKCBweEN1cnJlbnRUQ0IgKSAiKQkJCQkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsZC53ICAgIHIwLCByOFswXQkJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdC53ICAgIHIwWzBdLCBzcAkJCQkJCQkJCQkJCQkJCQkJCQkJXG4iXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkxBQkVMX0lOVF9TS0lQX1NBVkVfQ09OVEVYVF8iQVNUUklOR1ogKCBfX0xJTkVfXyApICI6IiBcDQotICAgICAgICAgICAgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB9DQorI2RlZmluZSBwb3J0U0FWRV9DT05URVhUX09TX0lOVCgpCQkJCQkJCQkJCQkJCQkJCQlcDQorewkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICBleHRlcm4gdm9sYXRpbGUgdWludDMyX3QgdWxDcml0aWNhbE5lc3Rpbmc7CQkJCQkJCQkJCQkJXA0KKyAgZXh0ZXJuIHZvbGF0aWxlIHZvaWQgKnZvbGF0aWxlIHB4Q3VycmVudFRDQjsJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgLyogV2hlbiB3ZSBjb21lIGhlcmUgKi8JCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgLyogUmVnaXN0ZXJzIFI4Li5SMTIsIExSLCBQQyBhbmQgU1IgaGFkIGFscmVhZHkgYmVlbiBwdXNoZWQgdG8gc3lzdGVtIHN0YWNrICovCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBTYXZlIFIwLi5SNyAqLwkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAic3RtICAgICAtLXNwLCByMC1yNwkJCQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBTYXZlIHVsQ3JpdGljYWxOZXN0aW5nIHZhcmlhYmxlICAtIFIwIGlzIG92ZXJ3cml0dGVuICovCQkJCQkJCQkJCVwNCisgICAgIm1vdiAgICAgcjgsIExXUkQoIkFTVFJJTkdaKHVsQ3JpdGljYWxOZXN0aW5nKSIpCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJvcmggICAgIHI4LCBIV1JEKCJBU1RSSU5HWih1bENyaXRpY2FsTmVzdGluZykiKQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAibGQudyAgICByMCwgcjhbMF0JCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAic3QudyAgICAtLXNwLCByMAkJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgLyogQ2hlY2sgaWYgSU5UMCBvciBoaWdoZXIgd2VyZSBiZWluZyBoYW5kbGVkIChjYXNlIHdoZXJlIHRoZSBPUyB0aWNrIGludGVycnVwdGVkIGFub3RoZXIgKi8JXA0KKyAgICAvKiBpbnRlcnJ1cHQgaGFuZGxlciAod2hpY2ggd2FzIG9mIGEgaGlnaGVyIHByaW9yaXR5IGxldmVsIGJ1dCBkZWNpZGVkIHRvIGxvd2VyIGl0cyBwcmlvcml0eSAqLwlcDQorICAgIC8qIGxldmVsIGFuZCBhbGxvdyBvdGhlciBsb3dlciBpbnRlcnJ1cHQgbGV2ZWwgdG8gb2NjdXIpLiAqLwkJCQkJCQkJCVwNCisgICAgLyogSW4gdGhpcyBjYXNlIHdlIGRvbid0IHdhbnQgdG8gZG8gYSB0YXNrIHN3aXRjaCBiZWNhdXNlIHdlIGRvbid0IGtub3cgd2hhdCB0aGUgc3RhY2sgKi8JCVwNCisgICAgLyogY3VycmVudGx5IGxvb2tzIGxpa2UgKHdlIGRvbid0IGtub3cgd2hhdCB0aGUgaW50ZXJydXB0ZWQgaW50ZXJydXB0IGhhbmRsZXIgd2FzIGRvaW5nKS4gKi8JXA0KKyAgICAvKiBTYXZpbmcgU1AgaW4gcHhDdXJyZW50VENCIGFuZCB0aGVuIGxhdGVyIHJlc3RvcmluZyBpdCAodGhpbmtpbmcgcmVzdG9yaW5nIHRoZSB0YXNrKSAqLwkJXA0KKyAgICAvKiB3aWxsIGp1c3QgYmUgcmVzdG9yaW5nIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciwgbm8gd2F5ISEhICovCQkJCQkJCQkJXA0KKyAgICAvKiBTbywgc2luY2Ugd2Ugd29uJ3QgZG8gYSB2VGFza1N3aXRjaENvbnRleHQoKSwgaXQncyBvZiBubyB1c2UgdG8gc2F2ZSBTUC4gKi8JCQkJCVwNCisgICAgImxkLncgICAgcjAsIHNwWzkqNF0JCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCIgLyogUmVhZCBTUiBpbiBzdGFjayAqL1wNCisgICAgImJmZXh0dSAgcjAsIHIwLCAyMiwgMwkJCQkJCQkJCQkJCQkJCQkJCQlcblx0IiAvKiBFeHRyYWN0IHRoZSBtb2RlIGJpdHMgdG8gUjAuICovXA0KKyAgICAiY3AudyAgICByMCwgMQkJCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiIC8qIENvbXBhcmUgdGhlIG1vZGUgYml0cyB3aXRoIHN1cGVydmlzb3IgbW9kZShiJzAwMSkgKi9cDQorICAgICJicmhpICAgIExBQkVMX0lOVF9TS0lQX1NBVkVfQ09OVEVYVF8iQVNUUklOR1ooX19MSU5FX18pIgkJCQkJCQkJCQlcblx0IlwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBTdG9yZSBTUCBpbiB0aGUgZmlyc3QgbWVtYmVyIG9mIHRoZSBzdHJ1Y3R1cmUgcG9pbnRlZCB0byBieSBweEN1cnJlbnRUQ0IgKi8JCQkJCVwNCisgICAgLyogTk9URTogd2UgZG9uJ3QgZW50ZXIgYSBjcml0aWNhbCBzZWN0aW9uIGhlcmUgYmVjYXVzZSBhbGwgaW50ZXJydXB0IGhhbmRsZXJzICovCQkJCVwNCisgICAgLyogTVVTVCBwZXJmb3JtIGEgU0FWRV9DT05URVhUL1JFU1RPUkVfQ09OVEVYVCBpbiB0aGUgc2FtZSB3YXkgYXMgKi8JCQkJCQkJXA0KKyAgICAvKiBwb3J0U0FWRV9DT05URVhUX09TX0lOVC9wb3J0X1JFU1RPUkVfQ09OVEVYVF9PU19JTlQgaWYgdGhleSBjYWxsIE9TIGZ1bmN0aW9ucy4gKi8JCQlcDQorICAgIC8qID0+IGFsbCBpbnRlcnJ1cHQgaGFuZGxlcnMgbXVzdCB1c2UgcG9ydEVOVEVSX1NXSVRDSElOR19JU1IvcG9ydEVYSVRfU1dJVENISU5HX0lTUi4gKi8JCVwNCisgICAgIm1vdiAgICAgcjgsIExXUkQoIkFTVFJJTkdaKHB4Q3VycmVudFRDQikiKQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJvcmggICAgIHI4LCBIV1JEKCJBU1RSSU5HWihweEN1cnJlbnRUQ0IpIikJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAibGQudyAgICByMCwgcjhbMF0JCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAic3QudyAgICByMFswXSwgc3AJCQkJCQkJCQkJCQkJCQkJCQkJCVxuIlwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAiTEFCRUxfSU5UX1NLSVBfU0FWRV9DT05URVhUXyJBU1RSSU5HWihfX0xJTkVfXykiOiIJCQkJCQkJCQkJCQlcDQorICApOwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCit9DQogDQogLyoNCiAgKiBwb3J0UkVTVE9SRV9DT05URVhUX09TX0lOVCgpIGZvciBUaWNrIGV4Y2VwdGlvbi4NCiAgKi8NCi0gICAgICAgICNkZWZpbmUgcG9ydFJFU1RPUkVfQ09OVEVYVF9PU19JTlQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGV4dGVybiB2b2xhdGlsZSB1aW50MzJfdCB1bENyaXRpY2FsTmVzdGluZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGV4dGVybiB2b2xhdGlsZSB2b2lkICogdm9sYXRpbGUgcHhDdXJyZW50VENCOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIENoZWNrIGlmIElOVDAgb3IgaGlnaGVyIHdlcmUgYmVpbmcgaGFuZGxlZCAoY2FzZSB3aGVyZSB0aGUgT1MgdGljayBpbnRlcnJ1cHRlZCBhbm90aGVyICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIGludGVycnVwdCBoYW5kbGVyICh3aGljaCB3YXMgb2YgYSBoaWdoZXIgcHJpb3JpdHkgbGV2ZWwgYnV0IGRlY2lkZWQgdG8gbG93ZXIgaXRzIHByaW9yaXR5ICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIGxldmVsIGFuZCBhbGxvdyBvdGhlciBsb3dlciBpbnRlcnJ1cHQgbGV2ZWwgdG8gb2NjdXIpLiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIEluIHRoaXMgY2FzZSB3ZSBkb24ndCB3YW50IHRvIGRvIGEgdGFzayBzd2l0Y2ggYmVjYXVzZSB3ZSBkb24ndCBrbm93IHdoYXQgdGhlIHN0YWNrICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIGN1cnJlbnRseSBsb29rcyBsaWtlICh3ZSBkb24ndCBrbm93IHdoYXQgdGhlIGludGVycnVwdGVkIGludGVycnVwdCBoYW5kbGVyIHdhcyBkb2luZykuICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIFNhdmluZyBTUCBpbiBweEN1cnJlbnRUQ0IgYW5kIHRoZW4gbGF0ZXIgcmVzdG9yaW5nIGl0ICh0aGlua2luZyByZXN0b3JpbmcgdGhlIHRhc2spICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIHdpbGwganVzdCBiZSByZXN0b3JpbmcgdGhlIGludGVycnVwdCBoYW5kbGVyLCBubyB3YXkhISEgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAibGQudyAgICByMCwgc3BbOSo0XQkJCQkJCQkJCQkJCQkJCQkJCQlcblx0Ii8qIFJlYWQgU1IgaW4gc3RhY2sgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAiYmZleHR1ICByMCwgcjAsIDIyLCAzCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiLyogRXh0cmFjdCB0aGUgbW9kZSBiaXRzIHRvIFIwLiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICJjcC53ICAgIHIwLCAxCQkJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCIvKiBDb21wYXJlIHRoZSBtb2RlIGJpdHMgd2l0aCBzdXBlcnZpc29yIG1vZGUoYicwMDEpICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgImJyaGkgICAgTEFCRUxfSU5UX1NLSVBfUkVTVE9SRV9DT05URVhUXyJBU1RSSU5HWiAoIF9fTElORV9fICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAvKiBFbHNlICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAvKiBiZWNhdXNlIGl0IGlzIGhlcmUgc2FmZSwgYWx3YXlzIGNhbGwgdlRhc2tTd2l0Y2hDb250ZXh0KCkgc2luY2UgYW4gT1MgdGljayBvY2N1cnJlZC4gKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAvKiBBIGNyaXRpY2FsIHNlY3Rpb24gaGFzIHRvIGJlIHVzZWQgaGVyZSBiZWNhdXNlIHZUYXNrU3dpdGNoQ29udGV4dCBoYW5kbGVzIEZyZWVSVE9TIGxpbmtlZCBsaXN0cy4gKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBwb3J0RU5URVJfQ1JJVElDQUwoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICB2VGFza1N3aXRjaENvbnRleHQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBwb3J0RVhJVF9DUklUSUNBTCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAvKiBSZXN0b3JlIGFsbCByZWdpc3RlcnMgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogU2V0IFNQIHRvIHBvaW50IHRvIG5ldyBzdGFjayAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgIm1vdiAgICAgcjgsIExXUkQoIkFTVFJJTkdaICggcHhDdXJyZW50VENCICkgIikJCQkJCQkJCQkJCQkJCVxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9yaCAgICAgcjgsIEhXUkQoIkFTVFJJTkdaICggcHhDdXJyZW50VENCICkgIikJCQkJCQkJCQkJCQkJCVxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxkLncgICAgcjAsIHI4WzBdCQkJCQkJCQkJCQkJCQkJCQkJCQlcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxkLncgICAgc3AsIHIwWzBdCQkJCQkJCQkJCQkJCQkJCQkJCQlcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkxBQkVMX0lOVF9TS0lQX1JFU1RPUkVfQ09OVEVYVF8iQVNUUklOR1ogKCBfX0xJTkVfXyApICI6CQkJCQkJCQkJCQlcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogUmVzdG9yZSB1bENyaXRpY2FsTmVzdGluZyB2YXJpYWJsZSAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsZC53ICAgIHIwLCBzcCsrCQkJCQkJCQkJCQkJCQkJCQkJCQlcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdiAgICAgcjgsIExXUkQoIkFTVFJJTkdaICggdWxDcml0aWNhbE5lc3RpbmcgKSAiKQkJCQkJCQkJCQkJCVxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9yaCAgICAgcjgsIEhXUkQoIkFTVFJJTkdaICggdWxDcml0aWNhbE5lc3RpbmcgKSAiKQkJCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0LncgICAgcjhbMF0sIHIwCQkJCQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBSZXN0b3JlIFIwLi5SNyAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsZG0gICAgIHNwKyssIHIwLXI3CQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIE5vdywgdGhlIHN0YWNrIHNob3VsZCBiZSBSOC4uUjEyLCBMUiwgUEMgYW5kIFNSICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJldGUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgLyogRm9yY2UgaW1wb3J0IG9mIGdsb2JhbCBzeW1ib2xzIGZyb20gYXNzZW1ibHkgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgdWxDcml0aWNhbE5lc3Rpbmc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgcHhDdXJyZW50VENCOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB9DQorI2RlZmluZSBwb3J0UkVTVE9SRV9DT05URVhUX09TX0lOVCgpCQkJCQkJCQkJCQkJCQkJCVwNCit7CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIGV4dGVybiB2b2xhdGlsZSB1aW50MzJfdCB1bENyaXRpY2FsTmVzdGluZzsJCQkJCQkJCQkJCQlcDQorICBleHRlcm4gdm9sYXRpbGUgdm9pZCAqdm9sYXRpbGUgcHhDdXJyZW50VENCOwkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAvKiBDaGVjayBpZiBJTlQwIG9yIGhpZ2hlciB3ZXJlIGJlaW5nIGhhbmRsZWQgKGNhc2Ugd2hlcmUgdGhlIE9TIHRpY2sgaW50ZXJydXB0ZWQgYW5vdGhlciAqLwkJXA0KKyAgLyogaW50ZXJydXB0IGhhbmRsZXIgKHdoaWNoIHdhcyBvZiBhIGhpZ2hlciBwcmlvcml0eSBsZXZlbCBidXQgZGVjaWRlZCB0byBsb3dlciBpdHMgcHJpb3JpdHkgKi8JXA0KKyAgLyogbGV2ZWwgYW5kIGFsbG93IG90aGVyIGxvd2VyIGludGVycnVwdCBsZXZlbCB0byBvY2N1cikuICovCQkJCQkJCQkJCVwNCisgIC8qIEluIHRoaXMgY2FzZSB3ZSBkb24ndCB3YW50IHRvIGRvIGEgdGFzayBzd2l0Y2ggYmVjYXVzZSB3ZSBkb24ndCBrbm93IHdoYXQgdGhlIHN0YWNrICovCQkJXA0KKyAgLyogY3VycmVudGx5IGxvb2tzIGxpa2UgKHdlIGRvbid0IGtub3cgd2hhdCB0aGUgaW50ZXJydXB0ZWQgaW50ZXJydXB0IGhhbmRsZXIgd2FzIGRvaW5nKS4gKi8JCVwNCisgIC8qIFNhdmluZyBTUCBpbiBweEN1cnJlbnRUQ0IgYW5kIHRoZW4gbGF0ZXIgcmVzdG9yaW5nIGl0ICh0aGlua2luZyByZXN0b3JpbmcgdGhlIHRhc2spICovCQkJXA0KKyAgLyogd2lsbCBqdXN0IGJlIHJlc3RvcmluZyB0aGUgaW50ZXJydXB0IGhhbmRsZXIsIG5vIHdheSEhISAqLwkJCQkJCQkJCQlcDQorICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgImxkLncgICAgcjAsIHNwWzkqNF0JCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCIgLyogUmVhZCBTUiBpbiBzdGFjayAqL1wNCisgICAgImJmZXh0dSAgcjAsIHIwLCAyMiwgMwkJCQkJCQkJCQkJCQkJCQkJCQlcblx0IiAvKiBFeHRyYWN0IHRoZSBtb2RlIGJpdHMgdG8gUjAuICovXA0KKyAgICAiY3AudyAgICByMCwgMQkJCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiIC8qIENvbXBhcmUgdGhlIG1vZGUgYml0cyB3aXRoIHN1cGVydmlzb3IgbW9kZShiJzAwMSkgKi9cDQorICAgICJicmhpICAgIExBQkVMX0lOVF9TS0lQX1JFU1RPUkVfQ09OVEVYVF8iQVNUUklOR1ooX19MSU5FX18pCQkJCQkJCQkJCVwNCisgICk7CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAvKiBFbHNlICovCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIC8qIGJlY2F1c2UgaXQgaXMgaGVyZSBzYWZlLCBhbHdheXMgY2FsbCB2VGFza1N3aXRjaENvbnRleHQoKSBzaW5jZSBhbiBPUyB0aWNrIG9jY3VycmVkLiAqLwkJXA0KKyAgLyogQSBjcml0aWNhbCBzZWN0aW9uIGhhcyB0byBiZSB1c2VkIGhlcmUgYmVjYXVzZSB2VGFza1N3aXRjaENvbnRleHQgaGFuZGxlcyBGcmVlUlRPUyBsaW5rZWQgbGlzdHMuICovXA0KKyAgcG9ydEVOVEVSX0NSSVRJQ0FMKCk7CQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICB2VGFza1N3aXRjaENvbnRleHQoKTsJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIHBvcnRFWElUX0NSSVRJQ0FMKCk7CQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIC8qIFJlc3RvcmUgYWxsIHJlZ2lzdGVycyAqLwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIFNldCBTUCB0byBwb2ludCB0byBuZXcgc3RhY2sgKi8JCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAibW92ICAgICByOCwgTFdSRCgiQVNUUklOR1oocHhDdXJyZW50VENCKSIpCQkJCQkJCQkJCQkJCQlcblx0IlwNCisgICAgIm9yaCAgICAgcjgsIEhXUkQoIkFTVFJJTkdaKHB4Q3VycmVudFRDQikiKQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJsZC53ICAgIHIwLCByOFswXQkJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJsZC53ICAgIHNwLCByMFswXQkJCQkJCQkJCQkJCQkJCQkJCQkJXG4iXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgICJMQUJFTF9JTlRfU0tJUF9SRVNUT1JFX0NPTlRFWFRfIkFTVFJJTkdaKF9fTElORV9fKSI6CQkJCQkJCQkJCQlcblx0IlwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBSZXN0b3JlIHVsQ3JpdGljYWxOZXN0aW5nIHZhcmlhYmxlICovCQkJCQkJCQkJCQkJCQlcDQorICAgICJsZC53ICAgIHIwLCBzcCsrCQkJCQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCisgICAgIm1vdiAgICAgcjgsIExXUkQoIkFTVFJJTkdaKHVsQ3JpdGljYWxOZXN0aW5nKSIpCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJvcmggICAgIHI4LCBIV1JEKCJBU1RSSU5HWih1bENyaXRpY2FsTmVzdGluZykiKQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAic3QudyAgICByOFswXSwgcjAJCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIFJlc3RvcmUgUjAuLlI3ICovCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgImxkbSAgICAgc3ArKywgcjAtcjcJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgLyogTm93LCB0aGUgc3RhY2sgc2hvdWxkIGJlIFI4Li5SMTIsIExSLCBQQyBhbmQgU1IgKi8JCQkJCQkJCQkJCVwNCisgICAgInJldGUiCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICApOwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgLyogRm9yY2UgaW1wb3J0IG9mIGdsb2JhbCBzeW1ib2xzIGZyb20gYXNzZW1ibHkgKi8JCQkJCQkJCQkJCQlcDQorICB1bENyaXRpY2FsTmVzdGluZzsJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIHB4Q3VycmVudFRDQjsJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KK30NCiANCi0gICAgI2VuZGlmIC8qIGlmIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDAgKi8NCisjZW5kaWYNCiANCiANCiAvKg0KQEAgLTM3OSwyNzggKzM3NywyNzggQEAKICAqIE5PVEU6IHRhc2tZSUVMRCgpKD09IFNDQUxMKSBNVVNUIE5PVCBiZSBjYWxsZWQgaW4gYSBtb2RlID4gc3VwZXJ2aXNvciBtb2RlLg0KICAqDQogICovDQotICAgICNkZWZpbmUgcG9ydFNBVkVfQ09OVEVYVF9TQ0FMTCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGV4dGVybiB2b2xhdGlsZSB1aW50MzJfdCB1bENyaXRpY2FsTmVzdGluZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBleHRlcm4gdm9sYXRpbGUgdm9pZCAqIHZvbGF0aWxlIHB4Q3VycmVudFRDQjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIFdhcm5pbmc6IHRoZSBzdGFjayBsYXlvdXQgYWZ0ZXIgU0NBTEwgZG9lc24ndCBtYXRjaCB0aGUgb25lIGFmdGVyIGFuIGludGVycnVwdC4gKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAvKiBJZiBTUltNMjpNMF0gPT0gMDAxICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgLyogICAgUEMgYW5kIFNSIGFyZSBvbiB0aGUgc3RhY2suICAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIEVsc2UgKG90aGVyIG1vZGVzKSAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAvKiAgICBOb3RoaW5nIG9uIHRoZSBzdGFjay4gKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIFdBUk5JTkcgTk9URTogdGhlIGVsc2UgY2FzZSBjYW5ub3QgaGFwcGVuIGFzIGl0IGlzIHN0cmljdGx5IGZvcmJpZGRlbiB0byBjYWxsICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAvKiB2VGFza0RlbGF5KCkgYW5kIHZUYXNrRGVsYXlVbnRpbCgpIE9TIGZ1bmN0aW9ucyAodGhhdCByZXN1bHQgaW4gYSB0YXNrWWllbGQoKSkgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgLyogaW4gYW4gaW50ZXJydXB0fGV4Y2VwdGlvbiBoYW5kbGVyLiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIGluIG9yZGVyIHRvIHNhdmUgUjAtUjcgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAic3ViICAgICBzcCwgNio0CQkJCQkJCQkJCQkJCQkJCQkJCQlcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogU2F2ZSBSMC4uUjcgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICJzdG0gICAgIC0tc3AsIHIwLXI3CQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogaW4gb3JkZXIgdG8gc2F2ZSBSOC1SMTIgYW5kIExSICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIGRvIG5vdCB1c2UgU1AgaWYgaW50ZXJydXB0cyBvY2N1cnMsIFNQIG11c3QgYmUgbGVmdCBhdCBib3R0b20gb2Ygc3RhY2sgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAic3ViICAgICByNywgc3AsLTE2KjQJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIENvcHkgUEMgYW5kIFNSIGluIG90aGVyIHBsYWNlcyBpbiB0aGUgc3RhY2suICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAibGQudyAgICByMCwgcjdbLTIqNF0JCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCIvKiBSZWFkIFNSICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICJzdC53ICAgIHI3Wy04KjRdLCByMAkJCQkJCQkJCQkJCQkJCQkJCQlcblx0Ii8qIENvcHkgU1IgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgImxkLncgICAgcjAsIHI3Wy0xKjRdCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiLyogUmVhZCBQQyAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAic3QudyAgICByN1stNyo0XSwgcjAJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCIvKiBDb3B5IFBDICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBTYXZlIFI4Li5SMTIgYW5kIExSIG9uIHRoZSBzdGFjay4gKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgInN0bSAgICAgLS1yNywgcjgtcjEyLCBscgkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogQXJyaXZpbmcgaGVyZSB3ZSBoYXZlIHRoZSBmb2xsb3dpbmcgc3RhY2sgb3JnYW5pemF0aW9uczogKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIFI4Li5SMTIsIExSLCBQQywgU1IsIFIwLi5SNy4gKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogTm93IHdlIGNhbiBmaW5hbGl6ZSB0aGUgc2F2ZS4gKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBTYXZlIHVsQ3JpdGljYWxOZXN0aW5nIHZhcmlhYmxlICAtIFIwIGlzIG92ZXJ3cml0dGVuICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgIm1vdiAgICAgcjgsIExXUkQoIkFTVFJJTkdaICggdWxDcml0aWNhbE5lc3RpbmcgKSAiKQkJCQkJCQkJCQkJCVxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9yaCAgICAgcjgsIEhXUkQoIkFTVFJJTkdaICggdWxDcml0aWNhbE5lc3RpbmcgKSAiKQkJCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGQudyAgICByMCwgcjhbMF0JCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3QudyAgICAtLXNwLCByMCIgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgLyogRGlzYWJsZSB0aGUgaXRzIHdoaWNoIG1heSBjYXVzZSBhIGNvbnRleHQgc3dpdGNoIChpLmUuIGNhdXNlIGEgY2hhbmdlIG9mICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIHB4Q3VycmVudFRDQikuICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAvKiBCYXNpY2FsbHksIGFsbCBhY2Nlc3NlcyB0byB0aGUgcHhDdXJyZW50VENCIHN0cnVjdHVyZSBzaG91bGQgYmUgcHV0IGluIGEgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgLyogY3JpdGljYWwgc2VjdGlvbiBiZWNhdXNlIGl0IGlzIGEgZ2xvYmFsIHN0cnVjdHVyZS4gKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHBvcnRFTlRFUl9DUklUSUNBTCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgLyogU3RvcmUgU1AgaW4gdGhlIGZpcnN0IG1lbWJlciBvZiB0aGUgc3RydWN0dXJlIHBvaW50ZWQgdG8gYnkgcHhDdXJyZW50VENCICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgIm1vdiAgICAgcjgsIExXUkQoIkFTVFJJTkdaICggcHhDdXJyZW50VENCICkgIikJCQkJCQkJCQkJCQkJCVxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcmggICAgIHI4LCBIV1JEKCJBU1RSSU5HWiAoIHB4Q3VycmVudFRDQiApICIpCQkJCQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGQudyAgICByMCwgcjhbMF0JCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdC53ICAgIHIwWzBdLCBzcCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIH0NCisjZGVmaW5lIHBvcnRTQVZFX0NPTlRFWFRfU0NBTEwoKQkJCQkJCQkJCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgZXh0ZXJuIHZvbGF0aWxlIHVpbnQzMl90IHVsQ3JpdGljYWxOZXN0aW5nOwkJCQkJCQkJCQkJCVwNCisgIGV4dGVybiB2b2xhdGlsZSB2b2lkICp2b2xhdGlsZSBweEN1cnJlbnRUQ0I7CQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIC8qIFdhcm5pbmc6IHRoZSBzdGFjayBsYXlvdXQgYWZ0ZXIgU0NBTEwgZG9lc24ndCBtYXRjaCB0aGUgb25lIGFmdGVyIGFuIGludGVycnVwdC4gKi8JCQkJXA0KKyAgLyogSWYgU1JbTTI6TTBdID09IDAwMSAqLwkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAvKiAgICBQQyBhbmQgU1IgYXJlIG9uIHRoZSBzdGFjay4gICovCQkJCQkJCQkJCQkJCQkJCVwNCisgIC8qIEVsc2UgKG90aGVyIG1vZGVzKSAqLwkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAvKiAgICBOb3RoaW5nIG9uIHRoZSBzdGFjay4gKi8JCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgLyogV0FSTklORyBOT1RFOiB0aGUgZWxzZSBjYXNlIGNhbm5vdCBoYXBwZW4gYXMgaXQgaXMgc3RyaWN0bHkgZm9yYmlkZGVuIHRvIGNhbGwgKi8JCQkJXA0KKyAgLyogdlRhc2tEZWxheSgpIGFuZCB2VGFza0RlbGF5VW50aWwoKSBPUyBmdW5jdGlvbnMgKHRoYXQgcmVzdWx0IGluIGEgdGFza1lpZWxkKCkpICovCQkJCVwNCisgIC8qIGluIGFuIGludGVycnVwdHxleGNlcHRpb24gaGFuZGxlci4gKi8JCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBpbiBvcmRlciB0byBzYXZlIFIwLVI3ICovCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgICJzdWIgICAgIHNwLCA2KjQJCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAvKiBTYXZlIFIwLi5SNyAqLwkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAic3RtICAgICAtLXNwLCByMC1yNwkJCQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBpbiBvcmRlciB0byBzYXZlIFI4LVIxMiBhbmQgTFIgKi8JCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIGRvIG5vdCB1c2UgU1AgaWYgaW50ZXJydXB0cyBvY2N1cnMsIFNQIG11c3QgYmUgbGVmdCBhdCBib3R0b20gb2Ygc3RhY2sgKi8JCQkJCVwNCisgICAgInN1YiAgICAgcjcsIHNwLC0xNio0CQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAvKiBDb3B5IFBDIGFuZCBTUiBpbiBvdGhlciBwbGFjZXMgaW4gdGhlIHN0YWNrLiAqLwkJCQkJCQkJCQkJCVwNCisgICAgImxkLncgICAgcjAsIHI3Wy0yKjRdCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiIC8qIFJlYWQgU1IgKi9cDQorICAgICJzdC53ICAgIHI3Wy04KjRdLCByMAkJCQkJCQkJCQkJCQkJCQkJCQlcblx0IiAvKiBDb3B5IFNSICovXA0KKyAgICAibGQudyAgICByMCwgcjdbLTEqNF0JCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCIgLyogUmVhZCBQQyAqL1wNCisgICAgInN0LncgICAgcjdbLTcqNF0sIHIwCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiIC8qIENvcHkgUEMgKi9cDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgLyogU2F2ZSBSOC4uUjEyIGFuZCBMUiBvbiB0aGUgc3RhY2suICovCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAic3RtICAgICAtLXI3LCByOC1yMTIsIGxyCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgLyogQXJyaXZpbmcgaGVyZSB3ZSBoYXZlIHRoZSBmb2xsb3dpbmcgc3RhY2sgb3JnYW5pemF0aW9uczogKi8JCQkJCQkJCQlcDQorICAgIC8qIFI4Li5SMTIsIExSLCBQQywgU1IsIFIwLi5SNy4gKi8JCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIE5vdyB3ZSBjYW4gZmluYWxpemUgdGhlIHNhdmUuICovCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBTYXZlIHVsQ3JpdGljYWxOZXN0aW5nIHZhcmlhYmxlICAtIFIwIGlzIG92ZXJ3cml0dGVuICovCQkJCQkJCQkJCVwNCisgICAgIm1vdiAgICAgcjgsIExXUkQoIkFTVFJJTkdaKHVsQ3JpdGljYWxOZXN0aW5nKSIpCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJvcmggICAgIHI4LCBIV1JEKCJBU1RSSU5HWih1bENyaXRpY2FsTmVzdGluZykiKQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAibGQudyAgICByMCwgcjhbMF0JCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAic3QudyAgICAtLXNwLCByMCIJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICk7CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAvKiBEaXNhYmxlIHRoZSBpdHMgd2hpY2ggbWF5IGNhdXNlIGEgY29udGV4dCBzd2l0Y2ggKGkuZS4gY2F1c2UgYSBjaGFuZ2Ugb2YgKi8JCQkJCVwNCisgIC8qIHB4Q3VycmVudFRDQikuICovCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAvKiBCYXNpY2FsbHksIGFsbCBhY2Nlc3NlcyB0byB0aGUgcHhDdXJyZW50VENCIHN0cnVjdHVyZSBzaG91bGQgYmUgcHV0IGluIGEgKi8JCQkJCVwNCisgIC8qIGNyaXRpY2FsIHNlY3Rpb24gYmVjYXVzZSBpdCBpcyBhIGdsb2JhbCBzdHJ1Y3R1cmUuICovCQkJCQkJCQkJCQlcDQorICBwb3J0RU5URVJfQ1JJVElDQUwoKTsJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgLyogU3RvcmUgU1AgaW4gdGhlIGZpcnN0IG1lbWJlciBvZiB0aGUgc3RydWN0dXJlIHBvaW50ZWQgdG8gYnkgcHhDdXJyZW50VENCICovCQkJCQlcDQorICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgIm1vdiAgICAgcjgsIExXUkQoIkFTVFJJTkdaKHB4Q3VycmVudFRDQikiKQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJvcmggICAgIHI4LCBIV1JEKCJBU1RSSU5HWihweEN1cnJlbnRUQ0IpIikJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAibGQudyAgICByMCwgcjhbMF0JCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAic3QudyAgICByMFswXSwgc3AiCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICApOwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCit9DQogDQogLyoNCiAgKiBwb3J0UkVTVE9SRV9DT05URVhUKCkgZm9yIFN1cGVydmlzb3JDQUxMIGV4Y2VwdGlvbi4NCiAgKi8NCi0gICAgI2RlZmluZSBwb3J0UkVTVE9SRV9DT05URVhUX1NDQUxMKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBleHRlcm4gdm9sYXRpbGUgdWludDMyX3QgdWxDcml0aWNhbE5lc3Rpbmc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGV4dGVybiB2b2xhdGlsZSB2b2lkICogdm9sYXRpbGUgcHhDdXJyZW50VENCOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAvKiBSZXN0b3JlIGFsbCByZWdpc3RlcnMgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgLyogU2V0IFNQIHRvIHBvaW50IHRvIG5ldyBzdGFjayAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAibW92ICAgICByOCwgTFdSRCgiQVNUUklOR1ogKCBweEN1cnJlbnRUQ0IgKSAiKQkJCQkJCQkJCQkJCQkJXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcmggICAgIHI4LCBIV1JEKCJBU1RSSU5HWiAoIHB4Q3VycmVudFRDQiApICIpCQkJCQkJCQkJCQkJCQlcblx0IiAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxkLncgICAgcjAsIHI4WzBdCQkJCQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGQudyAgICBzcCwgcjBbMF0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIExlYXZlIHB4Q3VycmVudFRDQiB2YXJpYWJsZSBhY2Nlc3MgY3JpdGljYWwgc2VjdGlvbiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgcG9ydEVYSVRfQ1JJVElDQUwoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIFJlc3RvcmUgdWxDcml0aWNhbE5lc3RpbmcgdmFyaWFibGUgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgImxkLncgICAgcjAsIHNwKysJCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgIm1vdiAgICAgcjgsIExXUkQoIkFTVFJJTkdaICggdWxDcml0aWNhbE5lc3RpbmcgKSAiKQkJCQkJCQkJCQkJCVxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcmggICAgIHI4LCBIV1JEKCJBU1RSSU5HWiAoIHVsQ3JpdGljYWxOZXN0aW5nICkgIikJCQkJCQkJCQkJCQlcblx0IiAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdC53ICAgIHI4WzBdLCByMAkJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBza2lwIFBDIGFuZCBTUiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIGRvIG5vdCB1c2UgU1AgaWYgaW50ZXJydXB0cyBvY2N1cnMsIFNQIG11c3QgYmUgbGVmdCBhdCBib3R0b20gb2Ygc3RhY2sgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICAgIHI3LCBzcCwgLTEwKjQJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgLyogUmVzdG9yZSByOC1yMTIgYW5kIExSICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxkbSAgICAgcjcrKywgcjgtcjEyLCBscgkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogUkVUUyB3aWxsIHRha2UgY2FyZSBvZiB0aGUgZXh0cmEgUEMgYW5kIFNSIHJlc3RvcmUuICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBTbywgd2UgaGF2ZSB0byBwcmVwYXJlIHRoZSBzdGFjayBmb3IgdGhpcy4gKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGQudyAgICByMCwgcjdbLTgqNF0JCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCIvKiBSZWFkIFNSICovXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3QudyAgICByN1stMio0XSwgcjAJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCIvKiBDb3B5IFNSICovXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGQudyAgICByMCwgcjdbLTcqNF0JCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCIvKiBSZWFkIFBDICovXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3QudyAgICByN1stMSo0XSwgcjAJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCIvKiBDb3B5IFBDICovXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogUmVzdG9yZSBSMC4uUjcgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxkbSAgICAgc3ArKywgcjAtcjcJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgICAgc3AsIC02KjQJCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXRzIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAvKiBGb3JjZSBpbXBvcnQgb2YgZ2xvYmFsIHN5bWJvbHMgZnJvbSBhc3NlbWJseSAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHVsQ3JpdGljYWxOZXN0aW5nOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgcHhDdXJyZW50VENCOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIH0NCisjZGVmaW5lIHBvcnRSRVNUT1JFX0NPTlRFWFRfU0NBTEwoKQkJCQkJCQkJCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgZXh0ZXJuIHZvbGF0aWxlIHVpbnQzMl90IHVsQ3JpdGljYWxOZXN0aW5nOwkJCQkJCQkJCQkJCVwNCisgIGV4dGVybiB2b2xhdGlsZSB2b2lkICp2b2xhdGlsZSBweEN1cnJlbnRUQ0I7CQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIC8qIFJlc3RvcmUgYWxsIHJlZ2lzdGVycyAqLwkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgLyogU2V0IFNQIHRvIHBvaW50IHRvIG5ldyBzdGFjayAqLwkJCQkJCQkJCQkJCQkJCQlcDQorICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgIm1vdiAgICAgcjgsIExXUkQoIkFTVFJJTkdaKHB4Q3VycmVudFRDQikiKQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJvcmggICAgIHI4LCBIV1JEKCJBU1RSSU5HWihweEN1cnJlbnRUQ0IpIikJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAibGQudyAgICByMCwgcjhbMF0JCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAibGQudyAgICBzcCwgcjBbMF0iCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICApOwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgLyogTGVhdmUgcHhDdXJyZW50VENCIHZhcmlhYmxlIGFjY2VzcyBjcml0aWNhbCBzZWN0aW9uICovCQkJCQkJCQkJCQlcDQorICBwb3J0RVhJVF9DUklUSUNBTCgpOwkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgLyogUmVzdG9yZSB1bENyaXRpY2FsTmVzdGluZyB2YXJpYWJsZSAqLwkJCQkJCQkJCQkJCQkJXA0KKyAgICAibGQudyAgICByMCwgc3ArKwkJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJtb3YgICAgIHI4LCBMV1JEKCJBU1RSSU5HWih1bENyaXRpY2FsTmVzdGluZykiKQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAib3JoICAgICByOCwgSFdSRCgiQVNUUklOR1oodWxDcml0aWNhbE5lc3RpbmcpIikJCQkJCQkJCQkJCQlcblx0IlwNCisgICAgInN0LncgICAgcjhbMF0sIHIwCQkJCQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBza2lwIFBDIGFuZCBTUiAqLwkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIGRvIG5vdCB1c2UgU1AgaWYgaW50ZXJydXB0cyBvY2N1cnMsIFNQIG11c3QgYmUgbGVmdCBhdCBib3R0b20gb2Ygc3RhY2sgKi8JCQkJCVwNCisgICAgInN1YiAgICAgcjcsIHNwLCAtMTAqNAkJCQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCisgICAgLyogUmVzdG9yZSByOC1yMTIgYW5kIExSICovCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAibGRtICAgICByNysrLCByOC1yMTIsIGxyCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgLyogUkVUUyB3aWxsIHRha2UgY2FyZSBvZiB0aGUgZXh0cmEgUEMgYW5kIFNSIHJlc3RvcmUuICovCQkJCQkJCQkJCVwNCisgICAgLyogU28sIHdlIGhhdmUgdG8gcHJlcGFyZSB0aGUgc3RhY2sgZm9yIHRoaXMuICovCQkJCQkJCQkJCQkJXA0KKyAgICAibGQudyAgICByMCwgcjdbLTgqNF0JCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCIgLyogUmVhZCBTUiAqL1wNCisgICAgInN0LncgICAgcjdbLTIqNF0sIHIwCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiIC8qIENvcHkgU1IgKi9cDQorICAgICJsZC53ICAgIHIwLCByN1stNyo0XQkJCQkJCQkJCQkJCQkJCQkJCQlcblx0IiAvKiBSZWFkIFBDICovXA0KKyAgICAic3QudyAgICByN1stMSo0XSwgcjAJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCIgLyogQ29weSBQQyAqL1wNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBSZXN0b3JlIFIwLi5SNyAqLwkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgICJsZG0gICAgIHNwKyssIHIwLXI3CQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgICJzdWIgICAgIHNwLCAtNio0CQkJCQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAicmV0cyIJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICk7CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAvKiBGb3JjZSBpbXBvcnQgb2YgZ2xvYmFsIHN5bWJvbHMgZnJvbSBhc3NlbWJseSAqLwkJCQkJCQkJCQkJCVwNCisgIHVsQ3JpdGljYWxOZXN0aW5nOwkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgcHhDdXJyZW50VENCOwkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorfQ0KIA0KIA0KIC8qDQogICogVGhlIElTUiB1c2VkIGRlcGVuZHMgb24gd2hldGhlciB0aGUgY29vcGVyYXRpdmUgb3INCiAgKiB0aGUgcHJlZW1wdGl2ZSBzY2hlZHVsZXIgaXMgYmVpbmcgdXNlZC4NCiAgKi8NCi0gICAgI2lmIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDANCisjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMA0KIA0KIC8qDQogICogSVNSIGVudHJ5IGFuZCBleGl0IG1hY3Jvcy4gIFRoZXNlIGFyZSBvbmx5IHJlcXVpcmVkIGlmIGEgdGFzayBzd2l0Y2gNCiAgKiBpcyByZXF1aXJlZCBmcm9tIHRoZSBJU1IuDQogICovDQotICAgICAgICAjZGVmaW5lIHBvcnRFTlRFUl9TV0lUQ0hJTkdfSVNSKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIFNhdmUgUjAuLlI3ICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICJzdG0gICAgIC0tc3AsIHIwLXI3IiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIFdpdGggdGhlIGNvb3BlcmF0aXZlIHNjaGVkdWxlciwgYXMgdGhlcmUgaXMgbm8gY29udGV4dCBzd2l0Y2ggYnkgaW50ZXJydXB0LCAqLyBcDQotICAgICAgICAvKiB0aGVyZSBpcyBhbHNvIG5vIGNvbnRleHQgc2F2ZS4gKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB9DQorI2RlZmluZSBwb3J0RU5URVJfU1dJVENISU5HX0lTUigpCQkJCQkJCQkJCQkJCQkJCQlcDQorewkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAvKiBTYXZlIFIwLi5SNyAqLwkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgic3RtICAgICAtLXNwLCByMC1yNyIpOwkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAvKiBXaXRoIHRoZSBjb29wZXJhdGl2ZSBzY2hlZHVsZXIsIGFzIHRoZXJlIGlzIG5vIGNvbnRleHQgc3dpdGNoIGJ5IGludGVycnVwdCwgKi8JCQkJCVwNCisgIC8qIHRoZXJlIGlzIGFsc28gbm8gY29udGV4dCBzYXZlLiAqLwkJCQkJCQkJCQkJCQkJCQlcDQorfQ0KIA0KIC8qDQogICogSW5wdXQgcGFyYW1ldGVyOiBpbiBSMTIsIGJvb2xlYW4uIFBlcmZvcm0gYSB2VGFza1N3aXRjaENvbnRleHQoKSBpZiAxDQogICovDQotICAgICAgICAjZGVmaW5lIHBvcnRFWElUX1NXSVRDSElOR19JU1IoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogUmVzdG9yZSBSMC4uUjcgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAibGRtICAgICBzcCsrLCByMC1yNwkJCQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIFdpdGggdGhlIGNvb3BlcmF0aXZlIHNjaGVkdWxlciwgYXMgdGhlcmUgaXMgbm8gY29udGV4dCBzd2l0Y2ggYnkgaW50ZXJydXB0LCAqLyBcDQotICAgICAgICAgICAgLyogdGhlcmUgaXMgYWxzbyBubyBjb250ZXh0IHJlc3RvcmUuICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAicmV0ZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIH0NCisjZGVmaW5lIHBvcnRFWElUX1NXSVRDSElOR19JU1IoKQkJCQkJCQkJCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIFJlc3RvcmUgUjAuLlI3ICovCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgImxkbSAgICAgc3ArKywgcjAtcjcJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgLyogV2l0aCB0aGUgY29vcGVyYXRpdmUgc2NoZWR1bGVyLCBhcyB0aGVyZSBpcyBubyBjb250ZXh0IHN3aXRjaCBieSBpbnRlcnJ1cHQsICovCQkJCVwNCisgICAgLyogdGhlcmUgaXMgYWxzbyBubyBjb250ZXh0IHJlc3RvcmUuICovCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAicmV0ZSIJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICk7CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KK30NCiANCi0gICAgI2Vsc2UgLyogaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMCAqLw0KKyNlbHNlDQogDQogLyoNCiAgKiBJU1IgZW50cnkgYW5kIGV4aXQgbWFjcm9zLiAgVGhlc2UgYXJlIG9ubHkgcmVxdWlyZWQgaWYgYSB0YXNrIHN3aXRjaA0KICAqIGlzIHJlcXVpcmVkIGZyb20gdGhlIElTUi4NCiAgKi8NCi0gICAgICAgICNkZWZpbmUgcG9ydEVOVEVSX1NXSVRDSElOR19JU1IoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgZXh0ZXJuIHZvbGF0aWxlIHVpbnQzMl90IHVsQ3JpdGljYWxOZXN0aW5nOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGV4dGVybiB2b2xhdGlsZSB2b2lkICogdm9sYXRpbGUgcHhDdXJyZW50VENCOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgLyogV2hlbiB3ZSBjb21lIGhlcmUgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIFJlZ2lzdGVycyBSOC4uUjEyLCBMUiwgUEMgYW5kIFNSIGhhZCBhbHJlYWR5IGJlZW4gcHVzaGVkIHRvIHN5c3RlbSBzdGFjayAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBTYXZlIFIwLi5SNyAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgInN0bSAgICAgLS1zcCwgcjAtcjcJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBTYXZlIHVsQ3JpdGljYWxOZXN0aW5nIHZhcmlhYmxlICAtIFIwIGlzIG92ZXJ3cml0dGVuICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgIm1vdiAgICAgcjgsIExXUkQoIkFTVFJJTkdaICggdWxDcml0aWNhbE5lc3RpbmcgKSAiKQkJCQkJCQkJCQkJCVxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9yaCAgICAgcjgsIEhXUkQoIkFTVFJJTkdaICggdWxDcml0aWNhbE5lc3RpbmcgKSAiKQkJCQkJCQkJCQkJCVxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGQudyAgICByMCwgcjhbMF0JCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3QudyAgICAtLXNwLCByMAkJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIENoZWNrIGlmIElOVDAgb3IgaGlnaGVyIHdlcmUgYmVpbmcgaGFuZGxlZCAoY2FzZSB3aGVyZSB0aGUgT1MgdGljayBpbnRlcnJ1cHRlZCBhbm90aGVyICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBpbnRlcnJ1cHQgaGFuZGxlciAod2hpY2ggd2FzIG9mIGEgaGlnaGVyIHByaW9yaXR5IGxldmVsIGJ1dCBkZWNpZGVkIHRvIGxvd2VyIGl0cyBwcmlvcml0eSAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogbGV2ZWwgYW5kIGFsbG93IG90aGVyIGxvd2VyIGludGVycnVwdCBsZXZlbCB0byBvY2N1cikuICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIEluIHRoaXMgY2FzZSB3ZSBkb24ndCB3YW50IHRvIGRvIGEgdGFzayBzd2l0Y2ggYmVjYXVzZSB3ZSBkb24ndCBrbm93IHdoYXQgdGhlIHN0YWNrICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBjdXJyZW50bHkgbG9va3MgbGlrZSAod2UgZG9uJ3Qga25vdyB3aGF0IHRoZSBpbnRlcnJ1cHRlZCBpbnRlcnJ1cHQgaGFuZGxlciB3YXMgZG9pbmcpLiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogU2F2aW5nIFNQIGluIHB4Q3VycmVudFRDQiBhbmQgdGhlbiBsYXRlciByZXN0b3JpbmcgaXQgKHRoaW5raW5nIHJlc3RvcmluZyB0aGUgdGFzaykgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIHdpbGwganVzdCBiZSByZXN0b3JpbmcgdGhlIGludGVycnVwdCBoYW5kbGVyLCBubyB3YXkhISEgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBTbywgc2luY2Ugd2Ugd29uJ3QgZG8gYSB2VGFza1N3aXRjaENvbnRleHQoKSwgaXQncyBvZiBubyB1c2UgdG8gc2F2ZSBTUC4gKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsZC53ICAgIHIwLCBzcFs5KjRdCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiLyogUmVhZCBTUiBpbiBzdGFjayAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmZleHR1ICByMCwgcjAsIDIyLCAzCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiLyogRXh0cmFjdCB0aGUgbW9kZSBiaXRzIHRvIFIwLiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3AudyAgICByMCwgMQkJCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiLyogQ29tcGFyZSB0aGUgbW9kZSBiaXRzIHdpdGggc3VwZXJ2aXNvciBtb2RlKGInMDAxKSAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnJoaSAgICBMQUJFTF9JU1JfU0tJUF9TQVZFX0NPTlRFWFRfIkFTVFJJTkdaICggX19MSU5FX18gKSAiCQkJCQkJCQkJCVxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIFN0b3JlIFNQIGluIHRoZSBmaXJzdCBtZW1iZXIgb2YgdGhlIHN0cnVjdHVyZSBwb2ludGVkIHRvIGJ5IHB4Q3VycmVudFRDQiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdiAgICAgcjgsIExXUkQoIkFTVFJJTkdaICggcHhDdXJyZW50VENCICkgIikJCQkJCQkJCQkJCQkJCVxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcmggICAgIHI4LCBIV1JEKCJBU1RSSU5HWiAoIHB4Q3VycmVudFRDQiApICIpCQkJCQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxkLncgICAgcjAsIHI4WzBdCQkJCQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0LncgICAgcjBbMF0sIHNwCQkJCQkJCQkJCQkJCQkJCQkJCQlcbiJcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTEFCRUxfSVNSX1NLSVBfU0FWRV9DT05URVhUXyJBU1RSSU5HWiAoIF9fTElORV9fICkgIjoiIFwNCi0gICAgICAgICAgICApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIH0NCisjZGVmaW5lIHBvcnRFTlRFUl9TV0lUQ0hJTkdfSVNSKCkJCQkJCQkJCQkJCQkJCQkJCVwNCit7CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIGV4dGVybiB2b2xhdGlsZSB1aW50MzJfdCB1bENyaXRpY2FsTmVzdGluZzsJCQkJCQkJCQkJCQlcDQorICBleHRlcm4gdm9sYXRpbGUgdm9pZCAqdm9sYXRpbGUgcHhDdXJyZW50VENCOwkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAvKiBXaGVuIHdlIGNvbWUgaGVyZSAqLwkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAvKiBSZWdpc3RlcnMgUjguLlIxMiwgTFIsIFBDIGFuZCBTUiBoYWQgYWxyZWFkeSBiZWVuIHB1c2hlZCB0byBzeXN0ZW0gc3RhY2sgKi8JCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIFNhdmUgUjAuLlI3ICovCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgICJzdG0gICAgIC0tc3AsIHIwLXI3CQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIFNhdmUgdWxDcml0aWNhbE5lc3RpbmcgdmFyaWFibGUgIC0gUjAgaXMgb3ZlcndyaXR0ZW4gKi8JCQkJCQkJCQkJXA0KKyAgICAibW92ICAgICByOCwgTFdSRCgiQVNUUklOR1oodWxDcml0aWNhbE5lc3RpbmcpIikJCQkJCQkJCQkJCQlcblx0IlwNCisgICAgIm9yaCAgICAgcjgsIEhXUkQoIkFTVFJJTkdaKHVsQ3JpdGljYWxOZXN0aW5nKSIpCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJsZC53ICAgIHIwLCByOFswXQkJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJzdC53ICAgIC0tc3AsIHIwCQkJCQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBDaGVjayBpZiBJTlQwIG9yIGhpZ2hlciB3ZXJlIGJlaW5nIGhhbmRsZWQgKGNhc2Ugd2hlcmUgdGhlIE9TIHRpY2sgaW50ZXJydXB0ZWQgYW5vdGhlciAqLwlcDQorICAgIC8qIGludGVycnVwdCBoYW5kbGVyICh3aGljaCB3YXMgb2YgYSBoaWdoZXIgcHJpb3JpdHkgbGV2ZWwgYnV0IGRlY2lkZWQgdG8gbG93ZXIgaXRzIHByaW9yaXR5ICovCVwNCisgICAgLyogbGV2ZWwgYW5kIGFsbG93IG90aGVyIGxvd2VyIGludGVycnVwdCBsZXZlbCB0byBvY2N1cikuICovCQkJCQkJCQkJXA0KKyAgICAvKiBJbiB0aGlzIGNhc2Ugd2UgZG9uJ3Qgd2FudCB0byBkbyBhIHRhc2sgc3dpdGNoIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdyB3aGF0IHRoZSBzdGFjayAqLwkJXA0KKyAgICAvKiBjdXJyZW50bHkgbG9va3MgbGlrZSAod2UgZG9uJ3Qga25vdyB3aGF0IHRoZSBpbnRlcnJ1cHRlZCBpbnRlcnJ1cHQgaGFuZGxlciB3YXMgZG9pbmcpLiAqLwlcDQorICAgIC8qIFNhdmluZyBTUCBpbiBweEN1cnJlbnRUQ0IgYW5kIHRoZW4gbGF0ZXIgcmVzdG9yaW5nIGl0ICh0aGlua2luZyByZXN0b3JpbmcgdGhlIHRhc2spICovCQlcDQorICAgIC8qIHdpbGwganVzdCBiZSByZXN0b3JpbmcgdGhlIGludGVycnVwdCBoYW5kbGVyLCBubyB3YXkhISEgKi8JCQkJCQkJCQlcDQorICAgIC8qIFNvLCBzaW5jZSB3ZSB3b24ndCBkbyBhIHZUYXNrU3dpdGNoQ29udGV4dCgpLCBpdCdzIG9mIG5vIHVzZSB0byBzYXZlIFNQLiAqLwkJCQkJXA0KKyAgICAibGQudyAgICByMCwgc3BbOSo0XQkJCQkJCQkJCQkJCQkJCQkJCQlcblx0IiAvKiBSZWFkIFNSIGluIHN0YWNrICovXA0KKyAgICAiYmZleHR1ICByMCwgcjAsIDIyLCAzCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiIC8qIEV4dHJhY3QgdGhlIG1vZGUgYml0cyB0byBSMC4gKi9cDQorICAgICJjcC53ICAgIHIwLCAxCQkJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCIgLyogQ29tcGFyZSB0aGUgbW9kZSBiaXRzIHdpdGggc3VwZXJ2aXNvciBtb2RlKGInMDAxKSAqL1wNCisgICAgImJyaGkgICAgTEFCRUxfSVNSX1NLSVBfU0FWRV9DT05URVhUXyJBU1RSSU5HWihfX0xJTkVfXykiCQkJCQkJCQkJCVxuXHQiXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIFN0b3JlIFNQIGluIHRoZSBmaXJzdCBtZW1iZXIgb2YgdGhlIHN0cnVjdHVyZSBwb2ludGVkIHRvIGJ5IHB4Q3VycmVudFRDQiAqLwkJCQkJXA0KKyAgICAibW92ICAgICByOCwgTFdSRCgiQVNUUklOR1oocHhDdXJyZW50VENCKSIpCQkJCQkJCQkJCQkJCQlcblx0IlwNCisgICAgIm9yaCAgICAgcjgsIEhXUkQoIkFTVFJJTkdaKHB4Q3VycmVudFRDQikiKQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJsZC53ICAgIHIwLCByOFswXQkJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJzdC53ICAgIHIwWzBdLCBzcAkJCQkJCQkJCQkJCQkJCQkJCQkJXG4iXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgICJMQUJFTF9JU1JfU0tJUF9TQVZFX0NPTlRFWFRfIkFTVFJJTkdaKF9fTElORV9fKSI6IgkJCQkJCQkJCQkJCVwNCisgICk7CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KK30NCiANCiANCiAvKg0KICAqIElucHV0IHBhcmFtZXRlcjogaW4gUjEyLCBib29sZWFuLiBQZXJmb3JtIGEgdlRhc2tTd2l0Y2hDb250ZXh0KCkgaWYgMQ0KICAqLw0KLSAgICAgICAgI2RlZmluZSBwb3J0RVhJVF9TV0lUQ0hJTkdfSVNSKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGV4dGVybiB2b2xhdGlsZSB1aW50MzJfdCB1bENyaXRpY2FsTmVzdGluZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgZXh0ZXJuIHZvbGF0aWxlIHZvaWQgKiB2b2xhdGlsZSBweEN1cnJlbnRUQ0I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIENoZWNrIGlmIElOVDAgb3IgaGlnaGVyIHdlcmUgYmVpbmcgaGFuZGxlZCAoY2FzZSB3aGVyZSB0aGUgT1MgdGljayBpbnRlcnJ1cHRlZCBhbm90aGVyICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogaW50ZXJydXB0IGhhbmRsZXIgKHdoaWNoIHdhcyBvZiBhIGhpZ2hlciBwcmlvcml0eSBsZXZlbCBidXQgZGVjaWRlZCB0byBsb3dlciBpdHMgcHJpb3JpdHkgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBsZXZlbCBhbmQgYWxsb3cgb3RoZXIgbG93ZXIgaW50ZXJydXB0IGxldmVsIHRvIG9jY3VyKS4gKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIEluIHRoaXMgY2FzZSBpdCdzIG9mIG5vIHVzZSB0byBzd2l0Y2ggY29udGV4dCBhbmQgcmVzdG9yZSBhIG5ldyBTUCBiZWNhdXNlIHdlIHB1cnBvc2VkbHkgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogZGlkIG5vdCBwcmV2aW91c2x5IHNhdmUgU1AgaW4gaXRzIFRDQi4gKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAibGQudyAgICByMCwgc3BbOSo0XQkJCQkJCQkJCQkJCQkJCQkJCQlcblx0Ii8qIFJlYWQgU1IgaW4gc3RhY2sgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICJiZmV4dHUgIHIwLCByMCwgMjIsIDMJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCIvKiBFeHRyYWN0IHRoZSBtb2RlIGJpdHMgdG8gUjAuICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAiY3AudyAgICByMCwgMQkJCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiLyogQ29tcGFyZSB0aGUgbW9kZSBiaXRzIHdpdGggc3VwZXJ2aXNvciBtb2RlKGInMDAxKSAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgImJyaGkgICAgTEFCRUxfSVNSX1NLSVBfUkVTVE9SRV9DT05URVhUXyJBU1RSSU5HWiAoIF9fTElORV9fICkgIgkJCQkJCQkJCVxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIElmIGEgc3dpdGNoIGlzIHJlcXVpcmVkIHRoZW4gd2UganVzdCBuZWVkIHRvIGNhbGwgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogdlRhc2tTd2l0Y2hDb250ZXh0KCkgYXMgdGhlIGNvbnRleHQgaGFzIGFscmVhZHkgYmVlbiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBzYXZlZC4gKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjcC53ICAgIHIxMiwgMQkJCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiLyogQ2hlY2sgaWYgU3dpdGNoIGNvbnRleHQgaXMgcmVxdWlyZWQuICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnJuZSAgICBMQUJFTF9JU1JfUkVTVE9SRV9DT05URVhUXyJBU1RSSU5HWiAoIF9fTElORV9fICkgIjpDIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIEEgY3JpdGljYWwgc2VjdGlvbiBoYXMgdG8gYmUgdXNlZCBoZXJlIGJlY2F1c2UgdlRhc2tTd2l0Y2hDb250ZXh0IGhhbmRsZXMgRnJlZVJUT1MgbGlua2VkIGxpc3RzLiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgcG9ydEVOVEVSX0NSSVRJQ0FMKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICB2VGFza1N3aXRjaENvbnRleHQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHBvcnRFWElUX0NSSVRJQ0FMKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAiTEFCRUxfSVNSX1JFU1RPUkVfQ09OVEVYVF8iQVNUUklOR1ogKCBfX0xJTkVfXyApICI6CQkJCQkJCQkJCQkJXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIFJlc3RvcmUgdGhlIGNvbnRleHQgb2Ygd2hpY2ggZXZlciB0YXNrIGlzIG5vdyB0aGUgaGlnaGVzdCAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogcHJpb3JpdHkgdGhhdCBpcyByZWFkeSB0byBydW4uICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIFJlc3RvcmUgYWxsIHJlZ2lzdGVycyAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBTZXQgU1AgdG8gcG9pbnQgdG8gbmV3IHN0YWNrICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdiAgICAgcjgsIExXUkQoIkFTVFJJTkdaICggcHhDdXJyZW50VENCICkgIikJCQkJCQkJCQkJCQkJCVxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9yaCAgICAgcjgsIEhXUkQoIkFTVFJJTkdaICggcHhDdXJyZW50VENCICkgIikJCQkJCQkJCQkJCQkJCVxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsZC53ICAgIHIwLCByOFswXQkJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGQudyAgICBzcCwgcjBbMF0JCQkJCQkJCQkJCQkJCQkJCQkJCVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTEFCRUxfSVNSX1NLSVBfUkVTVE9SRV9DT05URVhUXyJBU1RSSU5HWiAoIF9fTElORV9fICkgIjoJCQkJCQkJCQkJCVxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBSZXN0b3JlIHVsQ3JpdGljYWxOZXN0aW5nIHZhcmlhYmxlICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsZC53ICAgIHIwLCBzcCsrCQkJCQkJCQkJCQkJCQkJCQkJCQlcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdiAgICAgcjgsIExXUkQoIkFTVFJJTkdaICggdWxDcml0aWNhbE5lc3RpbmcgKSAiKQkJCQkJCQkJCQkJCVxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcmggICAgIHI4LCBIV1JEKCJBU1RSSU5HWiAoIHVsQ3JpdGljYWxOZXN0aW5nICkgIikJCQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0LncgICAgcjhbMF0sIHIwCQkJCQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIFJlc3RvcmUgUjAuLlI3ICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsZG0gICAgIHNwKyssIHIwLXI3CQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogTm93LCB0aGUgc3RhY2sgc2hvdWxkIGJlIFI4Li5SMTIsIExSLCBQQyBhbmQgU1IgICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJldGUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIEZvcmNlIGltcG9ydCBvZiBnbG9iYWwgc3ltYm9scyBmcm9tIGFzc2VtYmx5ICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgdWxDcml0aWNhbE5lc3Rpbmc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBweEN1cnJlbnRUQ0I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgfQ0KKyNkZWZpbmUgcG9ydEVYSVRfU1dJVENISU5HX0lTUigpCQkJCQkJCQkJCQkJCQkJCQlcDQorewkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICBleHRlcm4gdm9sYXRpbGUgdWludDMyX3QgdWxDcml0aWNhbE5lc3Rpbmc7CQkJCQkJCQkJCQkJXA0KKyAgZXh0ZXJuIHZvbGF0aWxlIHZvaWQgKnZvbGF0aWxlIHB4Q3VycmVudFRDQjsJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIENoZWNrIGlmIElOVDAgb3IgaGlnaGVyIHdlcmUgYmVpbmcgaGFuZGxlZCAoY2FzZSB3aGVyZSB0aGUgT1MgdGljayBpbnRlcnJ1cHRlZCBhbm90aGVyICovCVwNCisgICAgLyogaW50ZXJydXB0IGhhbmRsZXIgKHdoaWNoIHdhcyBvZiBhIGhpZ2hlciBwcmlvcml0eSBsZXZlbCBidXQgZGVjaWRlZCB0byBsb3dlciBpdHMgcHJpb3JpdHkgKi8JXA0KKyAgICAvKiBsZXZlbCBhbmQgYWxsb3cgb3RoZXIgbG93ZXIgaW50ZXJydXB0IGxldmVsIHRvIG9jY3VyKS4gKi8JCQkJCQkJCQlcDQorICAgIC8qIEluIHRoaXMgY2FzZSBpdCdzIG9mIG5vIHVzZSB0byBzd2l0Y2ggY29udGV4dCBhbmQgcmVzdG9yZSBhIG5ldyBTUCBiZWNhdXNlIHdlIHB1cnBvc2VkbHkgKi8JXA0KKyAgICAvKiBkaWQgbm90IHByZXZpb3VzbHkgc2F2ZSBTUCBpbiBpdHMgVENCLiAqLwkJCQkJCQkJCQkJCQlcDQorICAgICJsZC53ICAgIHIwLCBzcFs5KjRdCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiIC8qIFJlYWQgU1IgaW4gc3RhY2sgKi9cDQorICAgICJiZmV4dHUgIHIwLCByMCwgMjIsIDMJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCIgLyogRXh0cmFjdCB0aGUgbW9kZSBiaXRzIHRvIFIwLiAqL1wNCisgICAgImNwLncgICAgcjAsIDEJCQkJCQkJCQkJCQkJCQkJCQkJCQlcblx0IiAvKiBDb21wYXJlIHRoZSBtb2RlIGJpdHMgd2l0aCBzdXBlcnZpc29yIG1vZGUoYicwMDEpICovXA0KKyAgICAiYnJoaSAgICBMQUJFTF9JU1JfU0tJUF9SRVNUT1JFX0NPTlRFWFRfIkFTVFJJTkdaKF9fTElORV9fKSIJCQkJCQkJCQlcblx0IlwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBJZiBhIHN3aXRjaCBpcyByZXF1aXJlZCB0aGVuIHdlIGp1c3QgbmVlZCB0byBjYWxsICovCQkJCQkJCQkJCQlcDQorICAgIC8qIHZUYXNrU3dpdGNoQ29udGV4dCgpIGFzIHRoZSBjb250ZXh0IGhhcyBhbHJlYWR5IGJlZW4gKi8JCQkJCQkJCQkJXA0KKyAgICAvKiBzYXZlZC4gKi8JCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgICJjcC53ICAgIHIxMiwgMQkJCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiIC8qIENoZWNrIGlmIFN3aXRjaCBjb250ZXh0IGlzIHJlcXVpcmVkLiAqL1wNCisgICAgImJybmUgICAgTEFCRUxfSVNSX1JFU1RPUkVfQ09OVEVYVF8iQVNUUklOR1ooX19MSU5FX18pIjpDIgkJCQkJCQkJCQlcDQorICApOwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgLyogQSBjcml0aWNhbCBzZWN0aW9uIGhhcyB0byBiZSB1c2VkIGhlcmUgYmVjYXVzZSB2VGFza1N3aXRjaENvbnRleHQgaGFuZGxlcyBGcmVlUlRPUyBsaW5rZWQgbGlzdHMuICovXA0KKyAgcG9ydEVOVEVSX0NSSVRJQ0FMKCk7CQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICB2VGFza1N3aXRjaENvbnRleHQoKTsJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIHBvcnRFWElUX0NSSVRJQ0FMKCk7CQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAiTEFCRUxfSVNSX1JFU1RPUkVfQ09OVEVYVF8iQVNUUklOR1ooX19MSU5FX18pIjoJCQkJCQkJCQkJCQlcblx0IlwNCisgICAgLyogUmVzdG9yZSB0aGUgY29udGV4dCBvZiB3aGljaCBldmVyIHRhc2sgaXMgbm93IHRoZSBoaWdoZXN0ICovCQkJCQkJCQkJXA0KKyAgICAvKiBwcmlvcml0eSB0aGF0IGlzIHJlYWR5IHRvIHJ1bi4gKi8JCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgLyogUmVzdG9yZSBhbGwgcmVnaXN0ZXJzICovCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIFNldCBTUCB0byBwb2ludCB0byBuZXcgc3RhY2sgKi8JCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAibW92ICAgICByOCwgTFdSRCgiQVNUUklOR1oocHhDdXJyZW50VENCKSIpCQkJCQkJCQkJCQkJCQlcblx0IlwNCisgICAgIm9yaCAgICAgcjgsIEhXUkQoIkFTVFJJTkdaKHB4Q3VycmVudFRDQikiKQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJsZC53ICAgIHIwLCByOFswXQkJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJsZC53ICAgIHNwLCByMFswXQkJCQkJCQkJCQkJCQkJCQkJCQkJXG4iXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgICJMQUJFTF9JU1JfU0tJUF9SRVNUT1JFX0NPTlRFWFRfIkFTVFJJTkdaKF9fTElORV9fKSI6CQkJCQkJCQkJCQlcblx0IlwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgICAvKiBSZXN0b3JlIHVsQ3JpdGljYWxOZXN0aW5nIHZhcmlhYmxlICovCQkJCQkJCQkJCQkJCQlcDQorICAgICJsZC53ICAgIHIwLCBzcCsrCQkJCQkJCQkJCQkJCQkJCQkJCQlcblx0IlwNCisgICAgIm1vdiAgICAgcjgsIExXUkQoIkFTVFJJTkdaKHVsQ3JpdGljYWxOZXN0aW5nKSIpCQkJCQkJCQkJCQkJXG5cdCJcDQorICAgICJvcmggICAgIHI4LCBIV1JEKCJBU1RSSU5HWih1bENyaXRpY2FsTmVzdGluZykiKQkJCQkJCQkJCQkJCVxuXHQiXA0KKyAgICAic3QudyAgICByOFswXSwgcjAJCQkJCQkJCQkJCQkJCQkJCQkJCVxuXHQiXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICAgIC8qIFJlc3RvcmUgUjAuLlI3ICovCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgImxkbSAgICAgc3ArKywgcjAtcjcJCQkJCQkJCQkJCQkJCQkJCQkJXG5cdCJcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgICAgLyogTm93LCB0aGUgc3RhY2sgc2hvdWxkIGJlIFI4Li5SMTIsIExSLCBQQyBhbmQgU1IgICovCQkJCQkJCQkJCQlcDQorICAgICJyZXRlIgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKyAgKTsJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisgIC8qIEZvcmNlIGltcG9ydCBvZiBnbG9iYWwgc3ltYm9scyBmcm9tIGFzc2VtYmx5ICovCQkJCQkJCQkJCQkJXA0KKyAgdWxDcml0aWNhbE5lc3Rpbmc7CQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorICBweEN1cnJlbnRUQ0I7CQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCit9DQogDQotICAgICNlbmRpZiAvKiBpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAwICovDQorI2VuZGlmDQogDQogDQotICAgICNkZWZpbmUgcG9ydFlJRUxEKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICJzY2FsbCIgKTsgfQ0KKyNkZWZpbmUgcG9ydFlJRUxEKCkgICAgICAgICAgICAgICAgIHtfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInNjYWxsIik7fQ0KIA0KIC8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCi0gICAgI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICAgICAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KIA0KLSAgICAjaWZkZWYgX19jcGx1c3BsdXMNCi0gICAgICAgIH0NCi0gICAgI2VuZGlmDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KIA0KICNlbmRpZiAvKiBQT1JUTUFDUk9fSCAqLw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0lBUi9BVlIzMl9VQzMvcmVhZC5jIGIvcG9ydGFibGUvSUFSL0FWUjMyX1VDMy9yZWFkLmMKaW5kZXggYjQyZmY5My4uMzBiNWVlOCAxMDA2NDQKLS0tIGEvcG9ydGFibGUvSUFSL0FWUjMyX1VDMy9yZWFkLmMKKysrIGIvcG9ydGFibGUvSUFSL0FWUjMyX1VDMy9yZWFkLmMKQEAgLTEsMTggKzEsMTcgQEAKIC8qVGhpcyBmaWxlIGlzIHByZXBhcmVkIGZvciBEb3h5Z2VuIGF1dG9tYXRpYyBkb2N1bWVudGF0aW9uIGdlbmVyYXRpb24uKi8NCi0NCiAvKiEgXGZpbGUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotKg0KLSogXGJyaWVmIFN5c3RlbS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgXHJlZiBfX3JlYWQgZnVuY3Rpb24gdXNlZCBieQ0KLSogICAgICAgICB0aGUgc3RhbmRhcmQgbGlicmFyeS4NCi0qDQotKiAtIENvbXBpbGVyOiAgICAgICAgICAgSUFSIEVXQVZSMzINCi0qIC0gU3VwcG9ydGVkIGRldmljZXM6ICBBbGwgQVZSMzIgZGV2aWNlcyB3aXRoIGEgVVNBUlQgbW9kdWxlIGNhbiBiZSB1c2VkLg0KLSogLSBBcHBOb3RlOg0KLSoNCi0qIFxhdXRob3IgICAgICAgICAgICAgICBBdG1lbCBDb3Jwb3JhdGlvbjogaHR0cDovL3d3dy5hdG1lbC5jb20gXG4NCi0qICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0IGFuZCBGQVE6IGh0dHA6Ly9zdXBwb3J0LmF0bWVsLm5vLw0KLSoNCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorICoNCisgKiBcYnJpZWYgU3lzdGVtLXNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIHRoZSBccmVmIF9fcmVhZCBmdW5jdGlvbiB1c2VkIGJ5DQorICAgICAgICAgIHRoZSBzdGFuZGFyZCBsaWJyYXJ5Lg0KKyAqDQorICogLSBDb21waWxlcjogICAgICAgICAgIElBUiBFV0FWUjMyDQorICogLSBTdXBwb3J0ZWQgZGV2aWNlczogIEFsbCBBVlIzMiBkZXZpY2VzIHdpdGggYSBVU0FSVCBtb2R1bGUgY2FuIGJlIHVzZWQuDQorICogLSBBcHBOb3RlOg0KKyAqDQorICogXGF1dGhvciAgICAgICAgICAgICAgIEF0bWVsIENvcnBvcmF0aW9uOiBodHRwOi8vd3d3LmF0bWVsLmNvbSBcbg0KKyAqICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0IGFuZCBGQVE6IGh0dHA6Ly9zdXBwb3J0LmF0bWVsLm5vLw0KKyAqDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCiANCiAvKiBDb3B5cmlnaHQgKGMpIDIwMDcsIEF0bWVsIENvcnBvcmF0aW9uIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQogICoNCkBAIC01Myw3ICs1Miw3IEBACiAjcHJhZ21hIG1vZHVsZV9uYW1lID0gIj9fX3JlYWQiDQogDQogDQotZXh0ZXJuIHZvbGF0aWxlIGF2cjMyX3VzYXJ0X3QgKiB2b2xhdGlsZSBzdGRpb191c2FydF9iYXNlOw0KK2V4dGVybiB2b2xhdGlsZSBhdnIzMl91c2FydF90ICp2b2xhdGlsZSBzdGRpb191c2FydF9iYXNlOw0KIA0KIA0KIC8qISBcYnJpZWYgUmVhZHMgYSBudW1iZXIgb2YgYnl0ZXMsIGF0IG1vc3QgXGEgc2l6ZSwgaW50byB0aGUgbWVtb3J5IGFyZWENCkBAIC02NiwzMyArNjUsMjggQEAKICAqIFxyZXR1cm4gVGhlIG51bWJlciBvZiBieXRlcyByZWFkLCBcYyAwIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUsIG9yDQogICogICAgICAgICBcYyBfTExJT19FUlJPUiBvbiBmYWlsdXJlLg0KICAqLw0KLXNpemVfdCBfX3JlYWQoIGludCBoYW5kbGUsDQotICAgICAgICAgICAgICAgdWludDhfdCAqIGJ1ZmZlciwNCi0gICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSApDQorc2l6ZV90IF9fcmVhZChpbnQgaGFuZGxlLCB1aW50OF90ICpidWZmZXIsIHNpemVfdCBzaXplKQ0KIHsNCi0gICAgaW50IG5DaGFycyA9IDA7DQorICBpbnQgbkNoYXJzID0gMDsNCiANCi0gICAgLyogVGhpcyBpbXBsZW1lbnRhdGlvbiBvbmx5IHJlYWRzIGZyb20gc3RkaW4uICovDQotICAgIC8qIEZvciBhbGwgb3RoZXIgZmlsZSBoYW5kbGVzLCBpdCByZXR1cm5zIGZhaWx1cmUuICovDQotICAgIGlmKCBoYW5kbGUgIT0gX0xMSU9fU1RESU4gKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gX0xMSU9fRVJST1I7DQotICAgIH0NCisgIC8vIFRoaXMgaW1wbGVtZW50YXRpb24gb25seSByZWFkcyBmcm9tIHN0ZGluLg0KKyAgLy8gRm9yIGFsbCBvdGhlciBmaWxlIGhhbmRsZXMsIGl0IHJldHVybnMgZmFpbHVyZS4NCisgIGlmIChoYW5kbGUgIT0gX0xMSU9fU1RESU4pDQorICB7DQorICAgIHJldHVybiBfTExJT19FUlJPUjsNCisgIH0NCiANCi0gICAgZm9yKCA7IHNpemUgPiAwOyAtLXNpemUgKQ0KLSAgICB7DQotICAgICAgICBpbnQgYyA9IHVzYXJ0X2dldGNoYXIoIHN0ZGlvX3VzYXJ0X2Jhc2UgKTsNCisgIGZvciAoOyBzaXplID4gMDsgLS1zaXplKQ0KKyAgew0KKyAgICBpbnQgYyA9IHVzYXJ0X2dldGNoYXIoc3RkaW9fdXNhcnRfYmFzZSk7DQorICAgIGlmIChjIDwgMCkNCisgICAgICBicmVhazsNCiANCi0gICAgICAgIGlmKCBjIDwgMCApDQotICAgICAgICB7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9DQorICAgICpidWZmZXIrKyA9IGM7DQorICAgICsrbkNoYXJzOw0KKyAgfQ0KIA0KLSAgICAgICAgKmJ1ZmZlcisrID0gYzsNCi0gICAgICAgICsrbkNoYXJzOw0KLSAgICB9DQotDQotICAgIHJldHVybiBuQ2hhcnM7DQorICByZXR1cm4gbkNoYXJzOw0KIH0NCiANCiANCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9JQVIvQVZSMzJfVUMzL3dyaXRlLmMgYi9wb3J0YWJsZS9JQVIvQVZSMzJfVUMzL3dyaXRlLmMKaW5kZXggZThhYzRhNi4uODU5NDg3ZSAxMDA2NDQKLS0tIGEvcG9ydGFibGUvSUFSL0FWUjMyX1VDMy93cml0ZS5jCisrKyBiL3BvcnRhYmxlL0lBUi9BVlIzMl9VQzMvd3JpdGUuYwpAQCAtMSwxOCArMSwxNyBAQAogLypUaGlzIGZpbGUgaXMgcHJlcGFyZWQgZm9yIERveHlnZW4gYXV0b21hdGljIGRvY3VtZW50YXRpb24gZ2VuZXJhdGlvbi4qLw0KLQ0KIC8qISBcZmlsZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0qDQotKiBcYnJpZWYgU3lzdGVtLXNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIHRoZSBccmVmIF9fd3JpdGUgZnVuY3Rpb24gdXNlZCBieQ0KLSogICAgICAgICB0aGUgc3RhbmRhcmQgbGlicmFyeS4NCi0qDQotKiAtIENvbXBpbGVyOiAgICAgICAgICAgSUFSIEVXQVZSMzINCi0qIC0gU3VwcG9ydGVkIGRldmljZXM6ICBBbGwgQVZSMzIgZGV2aWNlcyB3aXRoIGEgVVNBUlQgbW9kdWxlIGNhbiBiZSB1c2VkLg0KLSogLSBBcHBOb3RlOg0KLSoNCi0qIFxhdXRob3IgICAgICAgICAgICAgICBBdG1lbCBDb3Jwb3JhdGlvbjogaHR0cDovL3d3dy5hdG1lbC5jb20gXG4NCi0qICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0IGFuZCBGQVE6IGh0dHA6Ly9zdXBwb3J0LmF0bWVsLm5vLw0KLSoNCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorICoNCisgKiBcYnJpZWYgU3lzdGVtLXNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIHRoZSBccmVmIF9fd3JpdGUgZnVuY3Rpb24gdXNlZCBieQ0KKyAgICAgICAgICB0aGUgc3RhbmRhcmQgbGlicmFyeS4NCisgKg0KKyAqIC0gQ29tcGlsZXI6ICAgICAgICAgICBJQVIgRVdBVlIzMg0KKyAqIC0gU3VwcG9ydGVkIGRldmljZXM6ICBBbGwgQVZSMzIgZGV2aWNlcyB3aXRoIGEgVVNBUlQgbW9kdWxlIGNhbiBiZSB1c2VkLg0KKyAqIC0gQXBwTm90ZToNCisgKg0KKyAqIFxhdXRob3IgICAgICAgICAgICAgICBBdG1lbCBDb3Jwb3JhdGlvbjogaHR0cDovL3d3dy5hdG1lbC5jb20gXG4NCisgKiAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydCBhbmQgRkFROiBodHRwOi8vc3VwcG9ydC5hdG1lbC5uby8NCisgKg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQogDQogLyogQ29weXJpZ2h0IChjKSAyMDA3LCBBdG1lbCBDb3Jwb3JhdGlvbiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KICAqDQpAQCAtNTMsOCArNTIsOCBAQAogI3ByYWdtYSBtb2R1bGVfbmFtZSA9ICI/X193cml0ZSINCiANCiANCi0vKiEgUG9pbnRlciB0byB0aGUgYmFzZSBvZiB0aGUgVVNBUlQgbW9kdWxlIGluc3RhbmNlIHRvIHVzZSBmb3Igc3RkaW8uICovDQotX19ub19pbml0IHZvbGF0aWxlIGF2cjMyX3VzYXJ0X3QgKiB2b2xhdGlsZSBzdGRpb191c2FydF9iYXNlOw0KKy8vISBQb2ludGVyIHRvIHRoZSBiYXNlIG9mIHRoZSBVU0FSVCBtb2R1bGUgaW5zdGFuY2UgdG8gdXNlIGZvciBzdGRpby4NCitfX25vX2luaXQgdm9sYXRpbGUgYXZyMzJfdXNhcnRfdCAqdm9sYXRpbGUgc3RkaW9fdXNhcnRfYmFzZTsNCiANCiANCiAvKiEgXGJyaWVmIFdyaXRlcyBhIG51bWJlciBvZiBieXRlcywgYXQgbW9zdCBcYSBzaXplLCBmcm9tIHRoZSBtZW1vcnkgYXJlYQ0KQEAgLTcwLDM2ICs2OSwzNCBAQAogICoNCiAgKiBccmV0dXJuIFRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiwgb3IgXGMgX0xMSU9fRVJST1Igb24gZmFpbHVyZS4NCiAgKi8NCi1zaXplX3QgX193cml0ZSggaW50IGhhbmRsZSwNCi0gICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqIGJ1ZmZlciwNCi0gICAgICAgICAgICAgICAgc2l6ZV90IHNpemUgKQ0KK3NpemVfdCBfX3dyaXRlKGludCBoYW5kbGUsIGNvbnN0IHVpbnQ4X3QgKmJ1ZmZlciwgc2l6ZV90IHNpemUpDQogew0KLSAgICBzaXplX3QgbkNoYXJzID0gMDsNCisgIHNpemVfdCBuQ2hhcnMgPSAwOw0KIA0KLSAgICBpZiggYnVmZmVyID09IDAgKQ0KKyAgaWYgKGJ1ZmZlciA9PSAwKQ0KKyAgew0KKyAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2Ugc2hvdWxkIGZsdXNoIGludGVybmFsIGJ1ZmZlcnMuDQorICAgIHJldHVybiAwOw0KKyAgfQ0KKw0KKyAgLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBvbmx5IHdyaXRlcyB0byBzdGRvdXQgYW5kIHN0ZGVyci4NCisgIC8vIEZvciBhbGwgb3RoZXIgZmlsZSBoYW5kbGVzLCBpdCByZXR1cm5zIGZhaWx1cmUuDQorICBpZiAoaGFuZGxlICE9IF9MTElPX1NURE9VVCAmJiBoYW5kbGUgIT0gX0xMSU9fU1RERVJSKQ0KKyAgew0KKyAgICByZXR1cm4gX0xMSU9fRVJST1I7DQorICB9DQorDQorICBmb3IgKDsgc2l6ZSAhPSAwOyAtLXNpemUpDQorICB7DQorICAgIGlmICh1c2FydF9wdXRjaGFyKHN0ZGlvX3VzYXJ0X2Jhc2UsICpidWZmZXIrKykgPCAwKQ0KICAgICB7DQotICAgICAgICAvKiBUaGlzIG1lYW5zIHRoYXQgd2Ugc2hvdWxkIGZsdXNoIGludGVybmFsIGJ1ZmZlcnMuICovDQotICAgICAgICByZXR1cm4gMDsNCisgICAgICByZXR1cm4gX0xMSU9fRVJST1I7DQogICAgIH0NCiANCi0gICAgLyogVGhpcyBpbXBsZW1lbnRhdGlvbiBvbmx5IHdyaXRlcyB0byBzdGRvdXQgYW5kIHN0ZGVyci4gKi8NCi0gICAgLyogRm9yIGFsbCBvdGhlciBmaWxlIGhhbmRsZXMsIGl0IHJldHVybnMgZmFpbHVyZS4gKi8NCi0gICAgaWYoICggaGFuZGxlICE9IF9MTElPX1NURE9VVCApICYmICggaGFuZGxlICE9IF9MTElPX1NUREVSUiApICkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIF9MTElPX0VSUk9SOw0KLSAgICB9DQorICAgICsrbkNoYXJzOw0KKyAgfQ0KIA0KLSAgICBmb3IoIDsgc2l6ZSAhPSAwOyAtLXNpemUgKQ0KLSAgICB7DQotICAgICAgICBpZiggdXNhcnRfcHV0Y2hhciggc3RkaW9fdXNhcnRfYmFzZSwgKmJ1ZmZlcisrICkgPCAwICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICByZXR1cm4gX0xMSU9fRVJST1I7DQotICAgICAgICB9DQotDQotICAgICAgICArK25DaGFyczsNCi0gICAgfQ0KLQ0KLSAgICByZXR1cm4gbkNoYXJzOw0KKyAgcmV0dXJuIG5DaGFyczsNCiB9DQogDQogDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvSUFSL0FWUl9BVlJEeC9wb3J0LmMgYi9wb3J0YWJsZS9JQVIvQVZSX0FWUkR4L3BvcnQuYwppbmRleCA4MjRjMWFhLi5lNzIzNjAzIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9JQVIvQVZSX0FWUkR4L3BvcnQuYworKysgYi9wb3J0YWJsZS9JQVIvQVZSX0FWUkR4L3BvcnQuYwpAQCAtMzIsMTEgKzMyLDExIEBACiAjaW5jbHVkZSAidGFzay5oIgogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgQVZSIHBvcnQuCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgQVZSIHBvcnQuCisqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qIFN0YXJ0IHRhc2tzIHdpdGggaW50ZXJydXB0cyBlbmFibGVzLiAqLwotI2RlZmluZSBwb3J0RkxBR1NfSU5UX0VOQUJMRUQgICAgICAgICAgICAgICAoKFN0YWNrVHlwZV90KSAweDgwKQorI2RlZmluZSBwb3J0RkxBR1NfSU5UX0VOQUJMRUQgICAgKCAoIFN0YWNrVHlwZV90ICkgMHg4MCApCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC00NSwxMiArNDUsMTMgQEAKICNkZWZpbmUgcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgICAgICAgICAgICAgKCAoIFVCYXNlVHlwZV90ICkgMCApCiAKIC8qIFN0b3JlcyB0aGUgY3JpdGljYWwgc2VjdGlvbiBuZXN0aW5nLiAgVGhpcyBtdXN0IG5vdCBiZSBpbml0aWFsaXNlZCB0byAwLgotSXQgd2lsbCBiZSBpbml0aWFsaXNlZCB3aGVuIGEgdGFzayBzdGFydHMuICovCisgKiBJdCB3aWxsIGJlIGluaXRpYWxpc2VkIHdoZW4gYSB0YXNrIHN0YXJ0cy4gKi8KIFVCYXNlVHlwZV90IHV4Q3JpdGljYWxOZXN0aW5nID0gMHg1MDsKKwogLyoKICAqIFNldHVwIHRpbWVyIHRvIGdlbmVyYXRlIGEgdGljayBpbnRlcnJ1cHQuCiAgKi8KLXN0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQodm9pZCk7CitzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICk7CiAKIC8qCiAgKiBUaGUgSUFSIGNvbXBpbGVyIGRvZXMgbm90IGhhdmUgZnVsbCBzdXBwb3J0IGZvciBpbmxpbmUgYXNzZW1ibGVyLCBzbwpAQCAtNjQsMzcgKzY1LDQwIEBACiAvKgogICogU2VlIGhlYWRlciBmaWxlIGZvciBkZXNjcmlwdGlvbi4KICAqLwotU3RhY2tUeXBlX3QgKnB4UG9ydEluaXRpYWxpc2VTdGFjayhTdGFja1R5cGVfdCAqcHhUb3BPZlN0YWNrLCBUYXNrRnVuY3Rpb25fdCBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycykKK1N0YWNrVHlwZV90ICogcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqIHB4VG9wT2ZTdGFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYXNrRnVuY3Rpb25fdCBweENvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqIHB2UGFyYW1ldGVycyApCiB7Ci11aW50MTZfdCB1c0FkZHJlc3M7Ci1TdGFja1R5cGVfdCAqcHhUb3BPZkhhcmR3YXJlU3RhY2s7CisgICAgdWludDE2X3QgdXNBZGRyZXNzOworICAgIFN0YWNrVHlwZV90ICogcHhUb3BPZkhhcmR3YXJlU3RhY2s7CisKICAgICAvKiBTaW11bGF0ZSBob3cgdGhlIHN0YWNrIHdvdWxkIGxvb2sgYWZ0ZXIgYSBjYWxsIHRvIHZQb3J0WWllbGQoKS4gKi8KIAogICAgIC8qbGludCAtZTk1MCAtZTYxMSAtZTkyMyBMaW50IGRvZXNuJ3QgbGlrZSB0aGlzIG11Y2ggLSBidXQgbm90aGluZyBJIGNhbiBkbyBhYm91dCBpdC4gKi8KIAogICAgIC8qIFRoZSBJQVIgY29tcGlsZXIgcmVxdWlyZXMgdHdvIHN0YWNrcyBwZXIgdGFzay4gIEZpcnN0IHRoZXJlIGlzIHRoZQotICAgIGhhcmR3YXJlIGNhbGwgc3RhY2sgd2hpY2ggdXNlcyB0aGUgQVZSIHN0YWNrIHBvaW50ZXIuICBTZWNvbmQgdGhlcmUgaXMgdGhlCi0gICAgc29mdHdhcmUgc3RhY2sgKGxvY2FsIHZhcmlhYmxlcywgcGFyYW1ldGVyIHBhc3NpbmcsIGV0Yy4pIHdoaWNoIHVzZXMgdGhlCi0gICAgQVZSIFkgcmVnaXN0ZXIuCi0gICAgVGhpcyBmdW5jdGlvbiBwbGFjZXMgYm90aCBzdGFja3Mgd2l0aGluIHRoZSBtZW1vcnkgYmxvY2sgcGFzc2VkIGluIGFzIHRoZQotICAgIGZpcnN0IHBhcmFtZXRlci4gIFRoZSBoYXJkd2FyZSBzdGFjayBpcyBwbGFjZWQgYXQgdGhlIGJvdHRvbSBvZiB0aGUgbWVtb3J5Ci0gICAgYmxvY2suICBBIGdhcCBpcyB0aGVuIGxlZnQgZm9yIHRoZSBoYXJkd2FyZSBzdGFjayB0byBncm93LiAgTmV4dCB0aGUgc29mdHdhcmUKLSAgICBzdGFjayBpcyBwbGFjZWQuICBUaGUgYW1vdW50IG9mIHNwYWNlIGJldHdlZW4gdGhlIHNvZnR3YXJlIGFuZCBoYXJkd2FyZQotICAgIHN0YWNrcyBpcyBkZWZpbmVkIGJ5IGNvbmZpZ0NBTExfU1RBQ0tfU0laRS4KLSAgICBUaGUgZmlyc3QgcGFydCBvZiB0aGUgc3RhY2sgaXMgdGhlIGhhcmR3YXJlIHN0YWNrLiAgUGxhY2UgdGhlIHN0YXJ0Ci0gICAgYWRkcmVzcyBvZiB0aGUgdGFzayBvbiB0aGUgaGFyZHdhcmUgc3RhY2suICovCisgICAgICogaGFyZHdhcmUgY2FsbCBzdGFjayB3aGljaCB1c2VzIHRoZSBBVlIgc3RhY2sgcG9pbnRlci4gIFNlY29uZCB0aGVyZSBpcyB0aGUKKyAgICAgKiBzb2Z0d2FyZSBzdGFjayAobG9jYWwgdmFyaWFibGVzLCBwYXJhbWV0ZXIgcGFzc2luZywgZXRjLikgd2hpY2ggdXNlcyB0aGUKKyAgICAgKiBBVlIgWSByZWdpc3Rlci4KKyAgICAgKiBUaGlzIGZ1bmN0aW9uIHBsYWNlcyBib3RoIHN0YWNrcyB3aXRoaW4gdGhlIG1lbW9yeSBibG9jayBwYXNzZWQgaW4gYXMgdGhlCisgICAgICogZmlyc3QgcGFyYW1ldGVyLiAgVGhlIGhhcmR3YXJlIHN0YWNrIGlzIHBsYWNlZCBhdCB0aGUgYm90dG9tIG9mIHRoZSBtZW1vcnkKKyAgICAgKiBibG9jay4gIEEgZ2FwIGlzIHRoZW4gbGVmdCBmb3IgdGhlIGhhcmR3YXJlIHN0YWNrIHRvIGdyb3cuICBOZXh0IHRoZSBzb2Z0d2FyZQorICAgICAqIHN0YWNrIGlzIHBsYWNlZC4gIFRoZSBhbW91bnQgb2Ygc3BhY2UgYmV0d2VlbiB0aGUgc29mdHdhcmUgYW5kIGhhcmR3YXJlCisgICAgICogc3RhY2tzIGlzIGRlZmluZWQgYnkgY29uZmlnQ0FMTF9TVEFDS19TSVpFLgorICAgICAqIFRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBzdGFjayBpcyB0aGUgaGFyZHdhcmUgc3RhY2suICBQbGFjZSB0aGUgc3RhcnQKKyAgICAgKiBhZGRyZXNzIG9mIHRoZSB0YXNrIG9uIHRoZSBoYXJkd2FyZSBzdGFjay4gKi8KIAogICAgIC8qIFBsYWNlIGEgZmV3IGJ5dGVzIG9mIGtub3duIHZhbHVlcyBvbiB0aGUgYm90dG9tIG9mIHRoZSBzdGFjay4KLSAgICBUaGlzIGlzIGp1c3QgdXNlZnVsIGZvciBkZWJ1Z2dpbmcuICovCi0gICAgLy8qcHhUb3BPZlN0YWNrID0gMHgxMTsKLSAgICAvL3B4VG9wT2ZTdGFjay0tOwotICAgIC8vKnB4VG9wT2ZTdGFjayA9IDB4MjI7Ci0gICAgLy9weFRvcE9mU3RhY2stLTsKLSAgICAvLypweFRvcE9mU3RhY2sgPSAweDMzOwotICAgIC8vcHhUb3BPZlN0YWNrLS07Ci0gICAgCisgICAgICogVGhpcyBpcyBqdXN0IHVzZWZ1bCBmb3IgZGVidWdnaW5nLiAqLworICAgIC8qKnB4VG9wT2ZTdGFjayA9IDB4MTE7ICovCisgICAgLypweFRvcE9mU3RhY2stLTsgKi8KKyAgICAvKipweFRvcE9mU3RhY2sgPSAweDIyOyAqLworICAgIC8qcHhUb3BPZlN0YWNrLS07ICovCisgICAgLyoqcHhUb3BPZlN0YWNrID0gMHgzMzsgKi8KKyAgICAvKnB4VG9wT2ZTdGFjay0tOyAqLworCiAgICAgLyogUmVtZW1iZXIgd2hlcmUgdGhlIHRvcCBvZiB0aGUgaGFyZHdhcmUgc3RhY2sgaXMgLSB0aGlzIGlzIHJlcXVpcmVkCi0gICAgYmVsb3cuICovCisgICAgICogYmVsb3cuICovCiAgICAgcHhUb3BPZkhhcmR3YXJlU3RhY2sgPSBweFRvcE9mU3RhY2s7CiAKICAgICB1c0FkZHJlc3MgPSAoIHVpbnQxNl90ICkgcHhDb2RlOwpAQCAtMTA0LDI1ICsxMDgsMjUgQEAKICAgICB1c0FkZHJlc3MgPj49IDg7CiAgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAoIHVzQWRkcmVzcyAmICggdWludDE2X3QgKSAweDAwZmYgKTsKICAgICBweFRvcE9mU3RhY2stLTsKLSAgICAKKwogICAgIC8qIExlYXZlIGVub3VnaCBzcGFjZSBmb3IgdGhlIGhhcmR3YXJlIHN0YWNrIGJlZm9yZSBzdGFydGluZyB0aGUgc29mdHdhcmUKLSAgICBzdGFjay4gIFRoZSAnLSAyJyBpcyBiZWNhdXNlIHdlIGhhdmUgYWxyZWFkeSB1c2VkIHR3byBzcGFjZXMgZm9yIHRoZQotICAgIGFkZHJlc3Mgb2YgdGhlIHN0YXJ0IG9mIHRoZSB0YXNrLiAqLworICAgICAqIHN0YWNrLiAgVGhlICctIDInIGlzIGJlY2F1c2Ugd2UgaGF2ZSBhbHJlYWR5IHVzZWQgdHdvIHNwYWNlcyBmb3IgdGhlCisgICAgICogYWRkcmVzcyBvZiB0aGUgc3RhcnQgb2YgdGhlIHRhc2suICovCiAgICAgcHhUb3BPZlN0YWNrIC09ICggY29uZmlnQ0FMTF9TVEFDS19TSVpFIC0gMiApOwogCiAgICAgLyogTmV4dCBzaW11bGF0ZSB0aGUgc3RhY2sgYXMgaWYgYWZ0ZXIgYSBjYWxsIHRvIHBvcnRTQVZFX0NPTlRFWFQoKS4KLSAgICBwb3J0U0FWRV9DT05URVhUIHBsYWNlcyB0aGUgZmxhZ3Mgb24gdGhlIHN0YWNrIGltbWVkaWF0ZWx5IGFmdGVyIHIwCi0gICAgdG8gZW5zdXJlIHRoZSBpbnRlcnJ1cHRzIGdldCBkaXNhYmxlZCBhcyBzb29uIGFzIHBvc3NpYmxlLCBhbmQgc28gZW5zdXJpbmcKLSAgICB0aGUgc3RhY2sgdXNlIGlzIG1pbmltYWwgc2hvdWxkIGEgY29udGV4dCBzd2l0Y2ggaW50ZXJydXB0IG9jY3VyLiAqLwotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMDsgICAgICAgLyogUjAgKi8KKyAgICAgKiAgcG9ydFNBVkVfQ09OVEVYVCBwbGFjZXMgdGhlIGZsYWdzIG9uIHRoZSBzdGFjayBpbW1lZGlhdGVseSBhZnRlciByMAorICAgICAqICB0byBlbnN1cmUgdGhlIGludGVycnVwdHMgZ2V0IGRpc2FibGVkIGFzIHNvb24gYXMgcG9zc2libGUsIGFuZCBzbyBlbnN1cmluZworICAgICAqICB0aGUgc3RhY2sgdXNlIGlzIG1pbmltYWwgc2hvdWxkIGEgY29udGV4dCBzd2l0Y2ggaW50ZXJydXB0IG9jY3VyLiAqLworICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMDsgLyogUjAgKi8KICAgICBweFRvcE9mU3RhY2stLTsKICAgICAqcHhUb3BPZlN0YWNrID0gcG9ydEZMQUdTX0lOVF9FTkFCTEVEOwogICAgIHB4VG9wT2ZTdGFjay0tOwotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMDsgICAgICAgLyogUkFNUFogKi8KKyAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDA7IC8qIFJBTVBaICovCiAgICAgcHhUb3BPZlN0YWNrLS07Ci0gICAgCisKICAgICAvKiBOZXh0IHBsYWNlIHRoZSBhZGRyZXNzIG9mIHRoZSBoYXJkd2FyZSBzdGFjay4gIFRoaXMgaXMgcmVxdWlyZWQgc28KLSAgICB0aGUgQVZSIHN0YWNrIHBvaW50ZXIgY2FuIGJlIHJlc3RvcmVkIHRvIHBvaW50IHRvIHRoZSBoYXJkd2FyZSBzdGFjay4gKi8KKyAgICAgKiB0aGUgQVZSIHN0YWNrIHBvaW50ZXIgY2FuIGJlIHJlc3RvcmVkIHRvIHBvaW50IHRvIHRoZSBoYXJkd2FyZSBzdGFjay4gKi8KICAgICBweFRvcE9mSGFyZHdhcmVTdGFjayAtPSBwb3J0QllURVNfVVNFRF9CWV9SRVRVUk5fQUREUkVTUzsKICAgICB1c0FkZHJlc3MgPSAoIHVpbnQxNl90ICkgcHhUb3BPZkhhcmR3YXJlU3RhY2s7CiAKQEAgLTEzNiw5MSArMTQwLDkxIEBACiAgICAgcHhUb3BPZlN0YWNrLS07CiAKICAgICAvKiBOb3cgdGhlIHJlbWFpbmluZyByZWdpc3RlcnMuICovCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAxOyAgICAgICAvKiBSMSAqLworICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMTsgLyogUjEgKi8KICAgICBweFRvcE9mU3RhY2stLTsKLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDI7ICAgICAgIC8qIFIyICovCisgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAyOyAvKiBSMiAqLwogICAgIHB4VG9wT2ZTdGFjay0tOwotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMzsgICAgICAgLyogUjMgKi8KKyAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDM7IC8qIFIzICovCiAgICAgcHhUb3BPZlN0YWNrLS07Ci0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA0OyAgICAgICAvKiBSNCAqLworICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNDsgLyogUjQgKi8KICAgICBweFRvcE9mU3RhY2stLTsKLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDU7ICAgICAgIC8qIFI1ICovCisgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA1OyAvKiBSNSAqLwogICAgIHB4VG9wT2ZTdGFjay0tOwotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNjsgICAgICAgLyogUjYgKi8KKyAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDY7IC8qIFI2ICovCiAgICAgcHhUb3BPZlN0YWNrLS07Ci0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA3OyAgICAgICAvKiBSNyAqLworICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNzsgLyogUjcgKi8KICAgICBweFRvcE9mU3RhY2stLTsKLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDg7ICAgICAgIC8qIFI4ICovCisgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA4OyAvKiBSOCAqLwogICAgIHB4VG9wT2ZTdGFjay0tOwotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwOTsgICAgICAgLyogUjkgKi8KKyAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDk7IC8qIFI5ICovCiAgICAgcHhUb3BPZlN0YWNrLS07Ci0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDEwOyAgICAgICAvKiBSMTAgKi8KKyAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTA7IC8qIFIxMCAqLwogICAgIHB4VG9wT2ZTdGFjay0tOwotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMTsgICAgICAgLyogUjExICovCisgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDExOyAvKiBSMTEgKi8KICAgICBweFRvcE9mU3RhY2stLTsKLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTI7ICAgICAgIC8qIFIxMiAqLworICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMjsgLyogUjEyICovCiAgICAgcHhUb3BPZlN0YWNrLS07Ci0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDEzOyAgICAgICAvKiBSMTMgKi8KKyAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTM7IC8qIFIxMyAqLwogICAgIHB4VG9wT2ZTdGFjay0tOwotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxNDsgICAgICAgLyogUjE0ICovCisgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDE0OyAvKiBSMTQgKi8KICAgICBweFRvcE9mU3RhY2stLTsKLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTU7ICAgICAgIC8qIFIxNSAqLworICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxNTsgLyogUjE1ICovCiAgICAgcHhUb3BPZlN0YWNrLS07CiAKICAgICAvKiBQbGFjZSB0aGUgcGFyYW1ldGVyIG9uIHRoZSBzdGFjayBpbiB0aGUgZXhwZWN0ZWQgbG9jYXRpb24uICovCi0gICAgdXNBZGRyZXNzICAgICA9ICh1aW50MTZfdCkgcHZQYXJhbWV0ZXJzOwotICAgICpweFRvcE9mU3RhY2sgPSAoU3RhY2tUeXBlX3QpICh1c0FkZHJlc3MgJiAodWludDE2X3QpIDB4MDBmZik7CisgICAgdXNBZGRyZXNzID0gKCB1aW50MTZfdCApIHB2UGFyYW1ldGVyczsKKyAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApICggdXNBZGRyZXNzICYgKCB1aW50MTZfdCApIDB4MDBmZiApOwogICAgIHB4VG9wT2ZTdGFjay0tOwogCiAgICAgdXNBZGRyZXNzID4+PSA4OwotICAgICpweFRvcE9mU3RhY2sgPSAoU3RhY2tUeXBlX3QpICh1c0FkZHJlc3MgJiAodWludDE2X3QpIDB4MDBmZik7CisgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAoIHVzQWRkcmVzcyAmICggdWludDE2X3QgKSAweDAwZmYgKTsKICAgICBweFRvcE9mU3RhY2stLTsKIAotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxODsgICAgICAgLyogUjE4ICovCisgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDE4OyAvKiBSMTggKi8KICAgICBweFRvcE9mU3RhY2stLTsKLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTk7ICAgICAgIC8qIFIxOSAqLworICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxOTsgLyogUjE5ICovCiAgICAgcHhUb3BPZlN0YWNrLS07Ci0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDIwOyAgICAgICAvKiBSMjAgKi8KKyAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MjA7IC8qIFIyMCAqLwogICAgIHB4VG9wT2ZTdGFjay0tOwotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgyMTsgICAgICAgLyogUjIxICovCisgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDIxOyAvKiBSMjEgKi8KICAgICBweFRvcE9mU3RhY2stLTsKLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MjI7ICAgICAgIC8qIFIyMiAqLworICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgyMjsgLyogUjIyICovCiAgICAgcHhUb3BPZlN0YWNrLS07Ci0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDIzOyAgICAgICAvKiBSMjMgKi8KKyAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MjM7IC8qIFIyMyAqLwogICAgIHB4VG9wT2ZTdGFjay0tOwotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgyNDsgICAgICAgLyogUjI0ICovCisgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDI0OyAvKiBSMjQgKi8KICAgICBweFRvcE9mU3RhY2stLTsKLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MjU7ICAgICAgIC8qIFIyNSAqLworICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgyNTsgLyogUjI1ICovCiAgICAgcHhUb3BPZlN0YWNrLS07Ci0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDI2OyAgICAgICAvKiBSMjYgWCAqLworICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgyNjsgLyogUjI2IFggKi8KICAgICBweFRvcE9mU3RhY2stLTsKLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4Mjc7ICAgICAgIC8qIFIyNyAqLworICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgyNzsgLyogUjI3ICovCiAgICAgcHhUb3BPZlN0YWNrLS07CiAKICAgICAvKiBUaGUgWSByZWdpc3RlciBpcyBub3Qgc3RvcmVkIGFzIGl0IGlzIHVzZWQgYXMgdGhlIHNvZnR3YXJlIHN0YWNrIGFuZAotICAgIGdldHMgc2F2ZWQgaW50byB0aGUgdGFzayBjb250cm9sIGJsb2NrLiAqLworICAgICAqIGdldHMgc2F2ZWQgaW50byB0aGUgdGFzayBjb250cm9sIGJsb2NrLiAqLwogCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDMwOyAgICAgICAvKiBSMzAgWiAqLworICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgzMDsgIC8qIFIzMCBaICovCiAgICAgcHhUb3BPZlN0YWNrLS07Ci0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAzMTsgICAgICAvKiBSMzEgKi8KKyAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDMxOyAvKiBSMzEgKi8KIAogICAgIHB4VG9wT2ZTdGFjay0tOwotICAgICpweFRvcE9mU3RhY2sgPSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORzsgICAgLyogQ3JpdGljYWwgbmVzdGluZyBpcyB6ZXJvIHdoZW4gdGhlIHRhc2sgc3RhcnRzLiAqLwotICAgIAorICAgICpweFRvcE9mU3RhY2sgPSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORzsgLyogQ3JpdGljYWwgbmVzdGluZyBpcyB6ZXJvIHdoZW4gdGhlIHRhc2sgc3RhcnRzLiAqLworCiAgICAgLypsaW50ICtlOTUwICtlNjExICtlOTIzICovCiAKICAgICByZXR1cm4gcHhUb3BPZlN0YWNrOwogfQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLUJhc2VUeXBlX3QgeFBvcnRTdGFydFNjaGVkdWxlcih2b2lkKQorQmFzZVR5cGVfdCB4UG9ydFN0YXJ0U2NoZWR1bGVyKCB2b2lkICkKIHsKICAgICAvKiBTZXR1cCB0aGUgaGFyZHdhcmUgdG8gZ2VuZXJhdGUgdGhlIHRpY2suICovCiAgICAgcHJ2U2V0dXBUaW1lckludGVycnVwdCgpOwogCiAgICAgLyogUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgZmlyc3QgdGFzayB0aGF0IGlzIGdvaW5nIHRvIHJ1bi4KLSAgICBOb3JtYWxseSB3ZSB3b3VsZCBqdXN0IGNhbGwgcG9ydFJFU1RPUkVfQ09OVEVYVCgpIGhlcmUsIGJ1dCBhcyB0aGUgSUFSCi0gICAgY29tcGlsZXIgZG9lcyBub3QgZnVsbHkgc3VwcG9ydCBpbmxpbmUgYXNzZW1ibGVyIHdlIGhhdmUgdG8gbWFrZSBhIGNhbGwuKi8KKyAgICAgKiBOb3JtYWxseSB3ZSB3b3VsZCBqdXN0IGNhbGwgcG9ydFJFU1RPUkVfQ09OVEVYVCgpIGhlcmUsIGJ1dCBhcyB0aGUgSUFSCisgICAgICogY29tcGlsZXIgZG9lcyBub3QgZnVsbHkgc3VwcG9ydCBpbmxpbmUgYXNzZW1ibGVyIHdlIGhhdmUgdG8gbWFrZSBhIGNhbGwuKi8KICAgICB2UG9ydFN0YXJ0KCk7CiAKICAgICAvKiBTaG91bGQgbm90IGdldCBoZXJlLiAqLwpAQCAtMjI4LDcgKzIzMiw3IEBACiB9CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotdm9pZCB2UG9ydEVuZFNjaGVkdWxlcih2b2lkKQordm9pZCB2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApCiB7CiAgICAgLyogdlBvcnRFbmRTY2hlZHVsZXIgaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgcG9ydC4gKi8KIH0KQEAgLTIzOCw3ICsyNDIsNyBAQAogLyoKICAqIFNldHVwIHRpbWVyIHRvIGdlbmVyYXRlIGEgdGljayBpbnRlcnJ1cHQuCiAgKi8KLXN0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQodm9pZCkKK3N0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKQogewogICAgIFRJQ0tfaW5pdCgpOwogfQpAQCAtMjQ2LDMyICsyNTAsMzQgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMQorCiAvKgogICogVGljayBJU1IgZm9yIHByZWVtcHRpdmUgc2NoZWR1bGVyLiAgV2UgY2FuIHVzZSBhIG5ha2VkIGF0dHJpYnV0ZSBhcwogICogdGhlIGNvbnRleHQgaXMgc2F2ZWQgYXQgdGhlIHN0YXJ0IG9mIHZQb3J0WWllbGRGcm9tVGljaygpLiAgVGhlIHRpY2sKICAqIGNvdW50IGlzIGluY3JlbWVudGVkIGFmdGVyIHRoZSBjb250ZXh0IGlzIHNhdmVkLgogICovCiAKLV9fdGFzayB2b2lkIFRJQ0tfSU5UKHZvaWQpCi17Ci0gICAgdlBvcnRZaWVsZEZyb21UaWNrKCk7Ci0gICAgYXNtKCJyZXRpIik7Ci19CisgICAgX190YXNrIHZvaWQgVElDS19JTlQoIHZvaWQgKQorICAgIHsKKyAgICAgICAgdlBvcnRZaWVsZEZyb21UaWNrKCk7CisgICAgICAgIGFzbSAoICJyZXRpIiApOworICAgIH0KICNlbHNlCisKIC8qCiAgKiBUaWNrIElTUiBmb3IgdGhlIGNvb3BlcmF0aXZlIHNjaGVkdWxlci4gIEFsbCB0aGlzIGRvZXMgaXMgaW5jcmVtZW50IHRoZQogICogdGljayBjb3VudC4gIFdlIGRvbid0IG5lZWQgdG8gc3dpdGNoIGNvbnRleHQsIHRoaXMgY2FuIG9ubHkgYmUgZG9uZSBieQogICogbWFudWFsIGNhbGxzIHRvIHRhc2tZSUVMRCgpOwogICovCiAKLV9faW50ZXJydXB0IHZvaWQgVElDS19JTlQodm9pZCkKLXsKLSAgICAvKiBDbGVhciB0aWNrIGludGVycnVwdCBmbGFnLiAqLwotICAgIElOVF9GTEFHUyA9IElOVF9NQVNLOworICAgIF9faW50ZXJydXB0IHZvaWQgVElDS19JTlQoIHZvaWQgKQorICAgIHsKKyAgICAgICAgLyogQ2xlYXIgdGljayBpbnRlcnJ1cHQgZmxhZy4gKi8KKyAgICAgICAgSU5UX0ZMQUdTID0gSU5UX01BU0s7CiAKLSAgICB4VGFza0luY3JlbWVudFRpY2soKTsKLX0KLSNlbmRpZgorICAgICAgICB4VGFza0luY3JlbWVudFRpY2soKTsKKyAgICB9CisjZW5kaWYgLyogaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMSAqLwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtMjg2LDYgKzI5Miw3IEBACiB2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICkKIHsKICAgICB1eENyaXRpY2FsTmVzdGluZy0tOworCiAgICAgaWYoIHV4Q3JpdGljYWxOZXN0aW5nID09IHBvcnROT19DUklUSUNBTF9ORVNUSU5HICkKICAgICB7CiAgICAgICAgIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpOwpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvSUFSL0FWUl9BVlJEeC9wb3J0aGFyZHdhcmUuaCBiL3BvcnRhYmxlL0lBUi9BVlJfQVZSRHgvcG9ydGhhcmR3YXJlLmgKaW5kZXggMTk1ZDg4MS4uMmQxN2I0MiAxMDA2NDQKLS0tIGEvcG9ydGFibGUvSUFSL0FWUl9BVlJEeC9wb3J0aGFyZHdhcmUuaAorKysgYi9wb3J0YWJsZS9JQVIvQVZSX0FWUkR4L3BvcnRoYXJkd2FyZS5oCkBAIC04LDg2ICs4LDkyIEBACiAKICNpZiAoIGNvbmZpZ1VTRV9USU1FUl9JTlNUQU5DRSA9PSAwICkKIAotICAgICNkZWZpbmUgVElDS19JTlRfdmVjdCAgICAgICBUQ0IwX0lOVF92ZWN0Ci0gICAgI2RlZmluZSBJTlRfRkxBR1MgICAgICAgICAgIFRDQjBfSU5URkxBR1MKLSAgICAjZGVmaW5lIElOVF9NQVNLICAgICAgICAgICAgVENCX0NBUFRfYm0KLSAgICAKLSAgICAjZGVmaW5lIFRJQ0tfaW5pdCgpICAgICAgICAgeyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRDQjAuQ0NNUCAgICA9IGNvbmZpZ0NQVV9DTE9DS19IWiAvIGNvbmZpZ1RJQ0tfUkFURV9IWjsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQ0IwLklOVENUUkwgPSBUQ0JfQ0FQVF9ibTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQ0IwLkNUUkxBICAgPSBUQ0JfRU5BQkxFX2JtOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAjZGVmaW5lIFRJQ0tfSU5UX3ZlY3QgICAgVENCMF9JTlRfdmVjdAorICAgICNkZWZpbmUgSU5UX0ZMQUdTICAgICAgICBUQ0IwX0lOVEZMQUdTCisgICAgI2RlZmluZSBJTlRfTUFTSyAgICAgICAgIFRDQl9DQVBUX2JtCisKKyAgICAjZGVmaW5lIFRJQ0tfaW5pdCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBUQ0IwLkNDTVAgPSBjb25maWdDUFVfQ0xPQ0tfSFogLyBjb25maWdUSUNLX1JBVEVfSFo7IFwKKyAgICAgICAgVENCMC5JTlRDVFJMID0gVENCX0NBUFRfYm07ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFRDQjAuQ1RSTEEgPSBUQ0JfRU5BQkxFX2JtOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KIAogI2VsaWYgKCBjb25maWdVU0VfVElNRVJfSU5TVEFOQ0UgPT0gMSApCiAKLSAgICAjZGVmaW5lIFRJQ0tfSU5UX3ZlY3QgICAgICAgVENCMV9JTlRfdmVjdAotICAgICNkZWZpbmUgSU5UX0ZMQUdTICAgICAgICAgICBUQ0IxX0lOVEZMQUdTCi0gICAgI2RlZmluZSBJTlRfTUFTSyAgICAgICAgICAgIFRDQl9DQVBUX2JtCi0gICAgCi0gICAgI2RlZmluZSBUSUNLX2luaXQoKSAgICAgICAgIHsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQ0IxLkNDTVAgICAgPSBjb25maWdDUFVfQ0xPQ0tfSFogLyBjb25maWdUSUNLX1JBVEVfSFo7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVENCMS5JTlRDVFJMID0gVENCX0NBUFRfYm07IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVENCMS5DVFJMQSAgID0gVENCX0VOQUJMRV9ibTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgIAorICAgICNkZWZpbmUgVElDS19JTlRfdmVjdCAgICBUQ0IxX0lOVF92ZWN0CisgICAgI2RlZmluZSBJTlRfRkxBR1MgICAgICAgIFRDQjFfSU5URkxBR1MKKyAgICAjZGVmaW5lIElOVF9NQVNLICAgICAgICAgVENCX0NBUFRfYm0KKworICAgICNkZWZpbmUgVElDS19pbml0KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFRDQjEuQ0NNUCA9IGNvbmZpZ0NQVV9DTE9DS19IWiAvIGNvbmZpZ1RJQ0tfUkFURV9IWjsgXAorICAgICAgICBUQ0IxLklOVENUUkwgPSBUQ0JfQ0FQVF9ibTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgVENCMS5DVFJMQSA9IFRDQl9FTkFCTEVfYm07ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQorCiAjZWxpZiAoIGNvbmZpZ1VTRV9USU1FUl9JTlNUQU5DRSA9PSAyICkKIAotICAgICNkZWZpbmUgVElDS19JTlRfdmVjdCAgICAgICBUQ0IyX0lOVF92ZWN0Ci0gICAgI2RlZmluZSBJTlRfRkxBR1MgICAgICAgICAgIFRDQjJfSU5URkxBR1MKLSAgICAjZGVmaW5lIElOVF9NQVNLICAgICAgICAgICAgVENCX0NBUFRfYm0KKyAgICAjZGVmaW5lIFRJQ0tfSU5UX3ZlY3QgICAgVENCMl9JTlRfdmVjdAorICAgICNkZWZpbmUgSU5UX0ZMQUdTICAgICAgICBUQ0IyX0lOVEZMQUdTCisgICAgI2RlZmluZSBJTlRfTUFTSyAgICAgICAgIFRDQl9DQVBUX2JtCiAKLSAgICAjZGVmaW5lIFRJQ0tfaW5pdCgpICAgICAgICAgeyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRDQjIuQ0NNUCAgICA9IGNvbmZpZ0NQVV9DTE9DS19IWiAvIGNvbmZpZ1RJQ0tfUkFURV9IWjsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQ0IyLklOVENUUkwgPSBUQ0JfQ0FQVF9ibTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQ0IyLkNUUkxBICAgPSBUQ0JfRU5BQkxFX2JtOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgCisgICAgI2RlZmluZSBUSUNLX2luaXQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgVENCMi5DQ01QID0gY29uZmlnQ1BVX0NMT0NLX0haIC8gY29uZmlnVElDS19SQVRFX0haOyBcCisgICAgICAgIFRDQjIuSU5UQ1RSTCA9IFRDQl9DQVBUX2JtOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBUQ0IyLkNUUkxBID0gVENCX0VOQUJMRV9ibTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CisKICNlbGlmICggY29uZmlnVVNFX1RJTUVSX0lOU1RBTkNFID09IDMgKQogCi0gICAgI2RlZmluZSBUSUNLX0lOVF92ZWN0ICAgICAgIFRDQjNfSU5UX3ZlY3QKLSAgICAjZGVmaW5lIElOVF9GTEFHUyAgICAgICAgICAgVENCM19JTlRGTEFHUwotICAgICNkZWZpbmUgSU5UX01BU0sgICAgICAgICAgICBUQ0JfQ0FQVF9ibQotICAgIAotICAgICNkZWZpbmUgVElDS19pbml0KCkgICAgICAgICB7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVENCMy5DQ01QICAgID0gY29uZmlnQ1BVX0NMT0NLX0haIC8gY29uZmlnVElDS19SQVRFX0haOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRDQjMuSU5UQ1RSTCA9IFRDQl9DQVBUX2JtOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRDQjMuQ1RSTEEgICA9IFRDQl9FTkFCTEVfYm07IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgIAorICAgICNkZWZpbmUgVElDS19JTlRfdmVjdCAgICBUQ0IzX0lOVF92ZWN0CisgICAgI2RlZmluZSBJTlRfRkxBR1MgICAgICAgIFRDQjNfSU5URkxBR1MKKyAgICAjZGVmaW5lIElOVF9NQVNLICAgICAgICAgVENCX0NBUFRfYm0KKworICAgICNkZWZpbmUgVElDS19pbml0KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFRDQjMuQ0NNUCA9IGNvbmZpZ0NQVV9DTE9DS19IWiAvIGNvbmZpZ1RJQ0tfUkFURV9IWjsgXAorICAgICAgICBUQ0IzLklOVENUUkwgPSBUQ0JfQ0FQVF9ibTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgVENCMy5DVFJMQSA9IFRDQl9FTkFCTEVfYm07ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQorCiAjZWxpZiAoIGNvbmZpZ1VTRV9USU1FUl9JTlNUQU5DRSA9PSA0ICkKIAotICAgICNkZWZpbmUgVElDS19JTlRfdmVjdCAgICAgICBUQ0I0X0lOVF92ZWN0Ci0gICAgI2RlZmluZSBJTlRfRkxBR1MgICAgICAgICAgIFRDQjRfSU5URkxBR1MKLSAgICAjZGVmaW5lIElOVF9NQVNLICAgICAgICAgICAgVENCX0NBUFRfYm0KLSAgICAKLSAgICAjZGVmaW5lIFRJQ0tfaW5pdCgpICAgICAgICAgeyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRDQjQuQ0NNUCAgICA9IGNvbmZpZ0NQVV9DTE9DS19IWiAvIGNvbmZpZ1RJQ0tfUkFURV9IWjsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQ0I0LklOVENUUkwgPSBUQ0JfQ0FQVF9ibTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQ0I0LkNUUkxBICAgPSBUQ0JfRU5BQkxFX2JtOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAKLSNlbGlmICggY29uZmlnVVNFX1RJTUVSX0lOU1RBTkNFID09IDUgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgI2RlZmluZSBUSUNLX0lOVF92ZWN0ICAgICAgIFJUQ19DTlRfdmVjdAotICAgICNkZWZpbmUgSU5UX0ZMQUdTICAgICAgICAgICBSVENfSU5URkxBR1MKLSAgICAjZGVmaW5lIElOVF9NQVNLICAgICAgICAgICAgUlRDX09WRl9ibQotICAgIAotICAgIC8qIEhlcnR6IHRvIHBlcmlvZCBmb3IgUlRDIHNldHVwICovCi0gICAgI2RlZmluZSBSVENfUEVSSU9EX0haKHgpICAgICggMzI3NjggKiAoICggMS4wIC8geCApICkgKQotICAgICNkZWZpbmUgVElDS19pbml0KCkgICAgICAgICB7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKFJUQy5TVEFUVVMgPiAwKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVEMuQ1RSTEEgICAgPSBSVENfUFJFU0NBTEVSX0RJVjFfZ2MgfCAxIDw8IFJUQ19SVENFTl9icDsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVEMuUEVSICAgICAgPSBSVENfUEVSSU9EX0haKGNvbmZpZ1RJQ0tfUkFURV9IWik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRDLklOVENUUkwgfD0gMSA8PCBSVENfT1ZGX2JwOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAjZGVmaW5lIFRJQ0tfSU5UX3ZlY3QgICAgVENCNF9JTlRfdmVjdAorICAgICNkZWZpbmUgSU5UX0ZMQUdTICAgICAgICBUQ0I0X0lOVEZMQUdTCisgICAgI2RlZmluZSBJTlRfTUFTSyAgICAgICAgIFRDQl9DQVBUX2JtCiAKLSNlbHNlCisgICAgI2RlZmluZSBUSUNLX2luaXQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgVENCNC5DQ01QID0gY29uZmlnQ1BVX0NMT0NLX0haIC8gY29uZmlnVElDS19SQVRFX0haOyBcCisgICAgICAgIFRDQjQuSU5UQ1RSTCA9IFRDQl9DQVBUX2JtOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBUQ0I0LkNUUkxBID0gVENCX0VOQUJMRV9ibTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CisKKyNlbGlmICggY29uZmlnVVNFX1RJTUVSX0lOU1RBTkNFID09IDUgKQorCisgICAgI2RlZmluZSBUSUNLX0lOVF92ZWN0ICAgIFJUQ19DTlRfdmVjdAorICAgICNkZWZpbmUgSU5UX0ZMQUdTICAgICAgICBSVENfSU5URkxBR1MKKyAgICAjZGVmaW5lIElOVF9NQVNLICAgICAgICAgUlRDX09WRl9ibQorCisvKiBIZXJ0eiB0byBwZXJpb2QgZm9yIFJUQyBzZXR1cCAqLworICAgICNkZWZpbmUgUlRDX1BFUklPRF9IWiggeCApICAgICggMzI3NjggKiAoICggMS4wIC8geCApICkgKQorICAgICNkZWZpbmUgVElDS19pbml0KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB3aGlsZSggUlRDLlNUQVRVUyA+IDAgKSB7OyB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBSVEMuQ1RSTEEgPSBSVENfUFJFU0NBTEVSX0RJVjFfZ2MgfCAxIDw8IFJUQ19SVENFTl9icDsgXAorICAgICAgICBSVEMuUEVSID0gUlRDX1BFUklPRF9IWiggY29uZmlnVElDS19SQVRFX0haICk7ICAgICAgICAgXAorICAgICAgICBSVEMuSU5UQ1RSTCB8PSAxIDw8IFJUQ19PVkZfYnA7ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KKworI2Vsc2UgLyogaWYgKCBjb25maWdVU0VfVElNRVJfSU5TVEFOQ0UgPT0gMCApICovCiAgICAgI3VuZGVmIFRJQ0tfSU5UX3ZlY3QKICAgICAjdW5kZWYgSU5UX0ZMQUdTCiAgICAgI3VuZGVmIElOVF9NQVNLCiAgICAgI3VuZGVmIFRJQ0tfaW5pdCgpCiAgICAgI2Vycm9yIEludmFsaWQgdGltZXIgc2V0dGluZy4KLSNlbmRpZgorI2VuZGlmIC8qIGlmICggY29uZmlnVVNFX1RJTUVSX0lOU1RBTkNFID09IDAgKSAqLwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApkaWZmIC0tZ2l0IGEvcG9ydGFibGUvSUFSL0FWUl9BVlJEeC9wb3J0bWFjcm8uaCBiL3BvcnRhYmxlL0lBUi9BVlJfQVZSRHgvcG9ydG1hY3JvLmgKaW5kZXggNTU1ZjQxZS4uMWMzODNiOSAxMDA2NDQKLS0tIGEvcG9ydGFibGUvSUFSL0FWUl9BVlJEeC9wb3J0bWFjcm8uaAorKysgYi9wb3J0YWJsZS9JQVIvQVZSX0FWUkR4L3BvcnRtYWNyby5oCkBAIC0yOSw5ICsyOSwxMSBAQAogI2lmbmRlZiBQT1JUTUFDUk9fSAogI2RlZmluZSBQT1JUTUFDUk9fSAogCisvKiAqSU5ERU5ULU9GRiogKi8KICNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7CisgICAgZXh0ZXJuICJDIiB7CiAjZW5kaWYKKy8qICpJTkRFTlQtT04qICovCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIFBvcnQgc3BlY2lmaWMgZGVmaW5pdGlvbnMuCkBAIC00NCwyNiArNDYsMjYgQEAKICAqLwogCiAvKiBUeXBlIGRlZmluaXRpb25zLiAqLwotI2RlZmluZSBwb3J0Q0hBUiAgICAgICAgICAgICAgICAgICAgY2hhcgotI2RlZmluZSBwb3J0RkxPQVQgICAgICAgICAgICAgICAgICAgZmxvYXQKLSNkZWZpbmUgcG9ydERPVUJMRSAgICAgICAgICAgICAgICAgIGRvdWJsZQotI2RlZmluZSBwb3J0TE9ORyAgICAgICAgICAgICAgICAgICAgbG9uZwotI2RlZmluZSBwb3J0U0hPUlQgICAgICAgICAgICAgICAgICAgaW50Ci0jZGVmaW5lIHBvcnRTVEFDS19UWVBFICAgICAgICAgICAgICB1aW50OF90Ci0jZGVmaW5lIHBvcnRCQVNFX1RZUEUgICAgICAgICAgICAgICBjaGFyCisjZGVmaW5lIHBvcnRDSEFSICAgICAgICAgICAgICAgICBjaGFyCisjZGVmaW5lIHBvcnRGTE9BVCAgICAgICAgICAgICAgICBmbG9hdAorI2RlZmluZSBwb3J0RE9VQkxFICAgICAgICAgICAgICAgZG91YmxlCisjZGVmaW5lIHBvcnRMT05HICAgICAgICAgICAgICAgICBsb25nCisjZGVmaW5lIHBvcnRTSE9SVCAgICAgICAgICAgICAgICBpbnQKKyNkZWZpbmUgcG9ydFNUQUNLX1RZUEUgICAgICAgICAgIHVpbnQ4X3QKKyNkZWZpbmUgcG9ydEJBU0VfVFlQRSAgICAgICAgICAgIGNoYXIKIAotI2RlZmluZSBwb3J0UE9JTlRFUl9TSVpFX1RZUEUgICAgICAgdWludDE2X3QKKyNkZWZpbmUgcG9ydFBPSU5URVJfU0laRV9UWVBFICAgIHVpbnQxNl90CiAKLXR5cGVkZWYgcG9ydFNUQUNLX1RZUEUgICAgICAgICAgICAgIFN0YWNrVHlwZV90OwotdHlwZWRlZiBzaWduZWQgY2hhciAgICAgICAgICAgICAgICAgQmFzZVR5cGVfdDsKLXR5cGVkZWYgdW5zaWduZWQgY2hhciAgICAgICAgICAgICAgIFVCYXNlVHlwZV90OwordHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSAgIFN0YWNrVHlwZV90OwordHlwZWRlZiBzaWduZWQgY2hhciAgICAgIEJhc2VUeXBlX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgICAgVUJhc2VUeXBlX3Q7CiAKLSNpZiAoY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxKQotICB0eXBlZGVmIHVpbnQxNl90ICAgICAgICAgICAgICAgICAgVGlja1R5cGVfdDsKLSAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICAgICAgICAgIChUaWNrVHlwZV90KTB4ZmZmZgorI2lmICggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkKKyAgICB0eXBlZGVmIHVpbnQxNl90ICAgICBUaWNrVHlwZV90OworICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmYKICNlbHNlCi0gIHR5cGVkZWYgdWludDMyX3QgICAgICAgICAgICAgICAgICBUaWNrVHlwZV90OwotICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgICAgICAgICAgKFRpY2tUeXBlX3QpMHhmZmZmZmZmZlVMCisgICAgdHlwZWRlZiB1aW50MzJfdCAgICAgVGlja1R5cGVfdDsKKyAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMCiAjZW5kaWYKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC03NSwzMSArNzcsMzMgQEAKICNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgICAgICAgIHZQb3J0RW50ZXJDcml0aWNhbCgpCiAjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkgICAgICAgICB2UG9ydEV4aXRDcml0aWNhbCgpCiAKLSNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpICAgIGFzbSggImNsaSIgKQotI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKSAgICAgYXNtKCAic2VpIiApCisjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAgICBhc20gKCAiY2xpIiApCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpICAgICBhc20gKCAic2VpIiApCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyogQXJjaGl0ZWN0dXJlIHNwZWNpZmljcy4gKi8KLSNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSCAgICAgICAgICAgICgtMSkKLSNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TICAgICAgICAgICgoVGlja1R5cGVfdCkxMDAwIC8gY29uZmlnVElDS19SQVRFX0haKQotI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQgICAgICAgICAgMQotI2RlZmluZSBwb3J0Tk9QKCkgICAgICAgICAgICAgICAgICAgYXNtKCAibm9wIiApCisjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEggICAgICAoIC0xICkKKyNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TICAgICggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApCisjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVCAgICAxCisjZGVmaW5lIHBvcnROT1AoKSAgICBhc20gKCAibm9wIiApCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyogS2VybmVsIHV0aWxpdGllcy4gKi8KLWV4dGVybiB2b2lkIHZQb3J0WWllbGQodm9pZCk7Ci0jZGVmaW5lIHBvcnRZSUVMRCgpICAgICAgICAgICAgICAgICB2UG9ydFlpZWxkKCkKK2V4dGVybiB2b2lkIHZQb3J0WWllbGQoIHZvaWQgKTsKKyNkZWZpbmUgcG9ydFlJRUxEKCkgICAgICAgICAgICAgdlBvcnRZaWVsZCgpCiAKLWV4dGVybiB2b2lkIHZQb3J0WWllbGRGcm9tSVNSKHZvaWQpOwotI2RlZmluZSBwb3J0WUlFTERfRlJPTV9JU1IoKSAgICAgICAgdlBvcnRZaWVsZEZyb21JU1IoKQorZXh0ZXJuIHZvaWQgdlBvcnRZaWVsZEZyb21JU1IoIHZvaWQgKTsKKyNkZWZpbmUgcG9ydFlJRUxEX0ZST01fSVNSKCkgICAgdlBvcnRZaWVsZEZyb21JU1IoKQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAqLwotI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyh2RnVuY3Rpb24sIHB2UGFyYW1ldGVycykgdm9pZCB2RnVuY3Rpb24odm9pZCAqcHZQYXJhbWV0ZXJzKQotI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTih2RnVuY3Rpb24sIHB2UGFyYW1ldGVycykgdm9pZCB2RnVuY3Rpb24odm9pZCAqcHZQYXJhbWV0ZXJzKQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgICAgICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkKIAorLyogKklOREVOVC1PRkYqICovCiAjaWZkZWYgX19jcGx1c3BsdXMKLX0KKyAgICB9CiAjZW5kaWYKKy8qICpJTkRFTlQtT04qICovCiAKICNlbmRpZiAvKiBQT1JUTUFDUk9fSCAqLwpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvSUFSL0FWUl9NZWdhMC9wb3J0LmMgYi9wb3J0YWJsZS9JQVIvQVZSX01lZ2EwL3BvcnQuYwppbmRleCA5ZTM0ZTFiLi5iMmQzNTYzIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9JQVIvQVZSX01lZ2EwL3BvcnQuYworKysgYi9wb3J0YWJsZS9JQVIvQVZSX01lZ2EwL3BvcnQuYwpAQCAtMzIsMTEgKzMyLDExIEBACiAjaW5jbHVkZSAidGFzay5oIgogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgQVZSIHBvcnQuCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgQVZSIHBvcnQuCisqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qIFN0YXJ0IHRhc2tzIHdpdGggaW50ZXJydXB0cyBlbmFibGVzLiAqLwotI2RlZmluZSBwb3J0RkxBR1NfSU5UX0VOQUJMRUQgICAgICAgICAgICAgICAoKFN0YWNrVHlwZV90KSAweDgwKQorI2RlZmluZSBwb3J0RkxBR1NfSU5UX0VOQUJMRUQgICAgKCAoIFN0YWNrVHlwZV90ICkgMHg4MCApCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC00NSwxMiArNDUsMTMgQEAKICNkZWZpbmUgcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgICAgICAgICAgICAgKCAoIFVCYXNlVHlwZV90ICkgMCApCiAKIC8qIFN0b3JlcyB0aGUgY3JpdGljYWwgc2VjdGlvbiBuZXN0aW5nLiAgVGhpcyBtdXN0IG5vdCBiZSBpbml0aWFsaXNlZCB0byAwLgotSXQgd2lsbCBiZSBpbml0aWFsaXNlZCB3aGVuIGEgdGFzayBzdGFydHMuICovCisgKiBJdCB3aWxsIGJlIGluaXRpYWxpc2VkIHdoZW4gYSB0YXNrIHN0YXJ0cy4gKi8KIFVCYXNlVHlwZV90IHV4Q3JpdGljYWxOZXN0aW5nID0gMHg1MDsKKwogLyoKICAqIFNldHVwIHRpbWVyIHRvIGdlbmVyYXRlIGEgdGljayBpbnRlcnJ1cHQuCiAgKi8KLXN0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQodm9pZCk7CitzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICk7CiAKIC8qCiAgKiBUaGUgSUFSIGNvbXBpbGVyIGRvZXMgbm90IGhhdmUgZnVsbCBzdXBwb3J0IGZvciBpbmxpbmUgYXNzZW1ibGVyLCBzbwpAQCAtNjQsMzcgKzY1LDQwIEBACiAvKgogICogU2VlIGhlYWRlciBmaWxlIGZvciBkZXNjcmlwdGlvbi4KICAqLwotU3RhY2tUeXBlX3QgKnB4UG9ydEluaXRpYWxpc2VTdGFjayhTdGFja1R5cGVfdCAqcHhUb3BPZlN0YWNrLCBUYXNrRnVuY3Rpb25fdCBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycykKK1N0YWNrVHlwZV90ICogcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqIHB4VG9wT2ZTdGFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYXNrRnVuY3Rpb25fdCBweENvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqIHB2UGFyYW1ldGVycyApCiB7Ci11aW50MTZfdCB1c0FkZHJlc3M7Ci1TdGFja1R5cGVfdCAqcHhUb3BPZkhhcmR3YXJlU3RhY2s7CisgICAgdWludDE2X3QgdXNBZGRyZXNzOworICAgIFN0YWNrVHlwZV90ICogcHhUb3BPZkhhcmR3YXJlU3RhY2s7CisKICAgICAvKiBTaW11bGF0ZSBob3cgdGhlIHN0YWNrIHdvdWxkIGxvb2sgYWZ0ZXIgYSBjYWxsIHRvIHZQb3J0WWllbGQoKS4gKi8KIAogICAgIC8qbGludCAtZTk1MCAtZTYxMSAtZTkyMyBMaW50IGRvZXNuJ3QgbGlrZSB0aGlzIG11Y2ggLSBidXQgbm90aGluZyBJIGNhbiBkbyBhYm91dCBpdC4gKi8KLSAgICAgICAgCisKICAgICAvKiBUaGUgSUFSIGNvbXBpbGVyIHJlcXVpcmVzIHR3byBzdGFja3MgcGVyIHRhc2suICBGaXJzdCB0aGVyZSBpcyB0aGUKLSAgICBoYXJkd2FyZSBjYWxsIHN0YWNrIHdoaWNoIHVzZXMgdGhlIEFWUiBzdGFjayBwb2ludGVyLiAgU2Vjb25kIHRoZXJlIGlzIHRoZQotICAgIHNvZnR3YXJlIHN0YWNrIChsb2NhbCB2YXJpYWJsZXMsIHBhcmFtZXRlciBwYXNzaW5nLCBldGMuKSB3aGljaCB1c2VzIHRoZQotICAgIEFWUiBZIHJlZ2lzdGVyLgotICAgIFRoaXMgZnVuY3Rpb24gcGxhY2VzIGJvdGggc3RhY2tzIHdpdGhpbiB0aGUgbWVtb3J5IGJsb2NrIHBhc3NlZCBpbiBhcyB0aGUKLSAgICBmaXJzdCBwYXJhbWV0ZXIuICBUaGUgaGFyZHdhcmUgc3RhY2sgaXMgcGxhY2VkIGF0IHRoZSBib3R0b20gb2YgdGhlIG1lbW9yeQotICAgIGJsb2NrLiAgQSBnYXAgaXMgdGhlbiBsZWZ0IGZvciB0aGUgaGFyZHdhcmUgc3RhY2sgdG8gZ3Jvdy4gIE5leHQgdGhlIHNvZnR3YXJlCi0gICAgc3RhY2sgaXMgcGxhY2VkLiAgVGhlIGFtb3VudCBvZiBzcGFjZSBiZXR3ZWVuIHRoZSBzb2Z0d2FyZSBhbmQgaGFyZHdhcmUKLSAgICBzdGFja3MgaXMgZGVmaW5lZCBieSBjb25maWdDQUxMX1NUQUNLX1NJWkUuCi0gICAgVGhlIGZpcnN0IHBhcnQgb2YgdGhlIHN0YWNrIGlzIHRoZSBoYXJkd2FyZSBzdGFjay4gIFBsYWNlIHRoZSBzdGFydAotICAgIGFkZHJlc3Mgb2YgdGhlIHRhc2sgb24gdGhlIGhhcmR3YXJlIHN0YWNrLiAqLwotICAgIAorICAgICAqIGhhcmR3YXJlIGNhbGwgc3RhY2sgd2hpY2ggdXNlcyB0aGUgQVZSIHN0YWNrIHBvaW50ZXIuICBTZWNvbmQgdGhlcmUgaXMgdGhlCisgICAgICogc29mdHdhcmUgc3RhY2sgKGxvY2FsIHZhcmlhYmxlcywgcGFyYW1ldGVyIHBhc3NpbmcsIGV0Yy4pIHdoaWNoIHVzZXMgdGhlCisgICAgICogQVZSIFkgcmVnaXN0ZXIuCisgICAgICogVGhpcyBmdW5jdGlvbiBwbGFjZXMgYm90aCBzdGFja3Mgd2l0aGluIHRoZSBtZW1vcnkgYmxvY2sgcGFzc2VkIGluIGFzIHRoZQorICAgICAqIGZpcnN0IHBhcmFtZXRlci4gIFRoZSBoYXJkd2FyZSBzdGFjayBpcyBwbGFjZWQgYXQgdGhlIGJvdHRvbSBvZiB0aGUgbWVtb3J5CisgICAgICogYmxvY2suICBBIGdhcCBpcyB0aGVuIGxlZnQgZm9yIHRoZSBoYXJkd2FyZSBzdGFjayB0byBncm93LiAgTmV4dCB0aGUgc29mdHdhcmUKKyAgICAgKiBzdGFjayBpcyBwbGFjZWQuICBUaGUgYW1vdW50IG9mIHNwYWNlIGJldHdlZW4gdGhlIHNvZnR3YXJlIGFuZCBoYXJkd2FyZQorICAgICAqIHN0YWNrcyBpcyBkZWZpbmVkIGJ5IGNvbmZpZ0NBTExfU1RBQ0tfU0laRS4KKyAgICAgKiBUaGUgZmlyc3QgcGFydCBvZiB0aGUgc3RhY2sgaXMgdGhlIGhhcmR3YXJlIHN0YWNrLiAgUGxhY2UgdGhlIHN0YXJ0CisgICAgICogYWRkcmVzcyBvZiB0aGUgdGFzayBvbiB0aGUgaGFyZHdhcmUgc3RhY2suICovCisKICAgICAvKiBQbGFjZSBhIGZldyBieXRlcyBvZiBrbm93biB2YWx1ZXMgb24gdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suCi0gICAgVGhpcyBpcyBqdXN0IHVzZWZ1bCBmb3IgZGVidWdnaW5nLiAqLwotICAgIC8vKnB4VG9wT2ZTdGFjayA9IDB4MTE7Ci0gICAgLy9weFRvcE9mU3RhY2stLTsKLSAgICAvLypweFRvcE9mU3RhY2sgPSAweDIyOwotICAgIC8vcHhUb3BPZlN0YWNrLS07Ci0gICAgLy8qcHhUb3BPZlN0YWNrID0gMHgzMzsKLSAgICAvL3B4VG9wT2ZTdGFjay0tOwotICAgIAorICAgICAqIFRoaXMgaXMganVzdCB1c2VmdWwgZm9yIGRlYnVnZ2luZy4gKi8KKyAgICAvKipweFRvcE9mU3RhY2sgPSAweDExOyAqLworICAgIC8qcHhUb3BPZlN0YWNrLS07ICovCisgICAgLyoqcHhUb3BPZlN0YWNrID0gMHgyMjsgKi8KKyAgICAvKnB4VG9wT2ZTdGFjay0tOyAqLworICAgIC8qKnB4VG9wT2ZTdGFjayA9IDB4MzM7ICovCisgICAgLypweFRvcE9mU3RhY2stLTsgKi8KKwogICAgIC8qIFJlbWVtYmVyIHdoZXJlIHRoZSB0b3Agb2YgdGhlIGhhcmR3YXJlIHN0YWNrIGlzIC0gdGhpcyBpcyByZXF1aXJlZAotICAgIGJlbG93LiAqLworICAgICAqIGJlbG93LiAqLwogICAgIHB4VG9wT2ZIYXJkd2FyZVN0YWNrID0gcHhUb3BPZlN0YWNrOwogCiAgICAgdXNBZGRyZXNzID0gKCB1aW50MTZfdCApIHB4Q29kZTsKQEAgLTEwNiwyMSArMTEwLDIxIEBACiAgICAgcHhUb3BPZlN0YWNrLS07CiAKICAgICAvKiBMZWF2ZSBlbm91Z2ggc3BhY2UgZm9yIHRoZSBoYXJkd2FyZSBzdGFjayBiZWZvcmUgc3RhcnRpbmcgdGhlIHNvZnR3YXJlCi0gICAgc3RhY2suICBUaGUgJy0gMicgaXMgYmVjYXVzZSB3ZSBoYXZlIGFscmVhZHkgdXNlZCB0d28gc3BhY2VzIGZvciB0aGUKLSAgICBhZGRyZXNzIG9mIHRoZSBzdGFydCBvZiB0aGUgdGFzay4gKi8KKyAgICAgKiBzdGFjay4gIFRoZSAnLSAyJyBpcyBiZWNhdXNlIHdlIGhhdmUgYWxyZWFkeSB1c2VkIHR3byBzcGFjZXMgZm9yIHRoZQorICAgICAqIGFkZHJlc3Mgb2YgdGhlIHN0YXJ0IG9mIHRoZSB0YXNrLiAqLwogICAgIHB4VG9wT2ZTdGFjayAtPSAoIGNvbmZpZ0NBTExfU1RBQ0tfU0laRSAtIDIgKTsKIAogICAgIC8qIE5leHQgc2ltdWxhdGUgdGhlIHN0YWNrIGFzIGlmIGFmdGVyIGEgY2FsbCB0byBwb3J0U0FWRV9DT05URVhUKCkuCi0gICAgcG9ydFNBVkVfQ09OVEVYVCBwbGFjZXMgdGhlIGZsYWdzIG9uIHRoZSBzdGFjayBpbW1lZGlhdGVseSBhZnRlciByMAotICAgIHRvIGVuc3VyZSB0aGUgaW50ZXJydXB0cyBnZXQgZGlzYWJsZWQgYXMgc29vbiBhcyBwb3NzaWJsZSwgYW5kIHNvIGVuc3VyaW5nCi0gICAgdGhlIHN0YWNrIHVzZSBpcyBtaW5pbWFsIHNob3VsZCBhIGNvbnRleHQgc3dpdGNoIGludGVycnVwdCBvY2N1ci4gKi8KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDA7ICAgICAgIC8qIFIwICovCisgICAgICogIHBvcnRTQVZFX0NPTlRFWFQgcGxhY2VzIHRoZSBmbGFncyBvbiB0aGUgc3RhY2sgaW1tZWRpYXRlbHkgYWZ0ZXIgcjAKKyAgICAgKiAgdG8gZW5zdXJlIHRoZSBpbnRlcnJ1cHRzIGdldCBkaXNhYmxlZCBhcyBzb29uIGFzIHBvc3NpYmxlLCBhbmQgc28gZW5zdXJpbmcKKyAgICAgKiAgdGhlIHN0YWNrIHVzZSBpcyBtaW5pbWFsIHNob3VsZCBhIGNvbnRleHQgc3dpdGNoIGludGVycnVwdCBvY2N1ci4gKi8KKyAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDA7IC8qIFIwICovCiAgICAgcHhUb3BPZlN0YWNrLS07CiAgICAgKnB4VG9wT2ZTdGFjayA9IHBvcnRGTEFHU19JTlRfRU5BQkxFRDsKICAgICBweFRvcE9mU3RhY2stLTsKIAogICAgIC8qIE5leHQgcGxhY2UgdGhlIGFkZHJlc3Mgb2YgdGhlIGhhcmR3YXJlIHN0YWNrLiAgVGhpcyBpcyByZXF1aXJlZCBzbwotICAgIHRoZSBBVlIgc3RhY2sgcG9pbnRlciBjYW4gYmUgcmVzdG9yZWQgdG8gcG9pbnQgdG8gdGhlIGhhcmR3YXJlIHN0YWNrLiAqLworICAgICAqIHRoZSBBVlIgc3RhY2sgcG9pbnRlciBjYW4gYmUgcmVzdG9yZWQgdG8gcG9pbnQgdG8gdGhlIGhhcmR3YXJlIHN0YWNrLiAqLwogICAgIHB4VG9wT2ZIYXJkd2FyZVN0YWNrIC09IHBvcnRCWVRFU19VU0VEX0JZX1JFVFVSTl9BRERSRVNTOwogICAgIHVzQWRkcmVzcyA9ICggdWludDE2X3QgKSBweFRvcE9mSGFyZHdhcmVTdGFjazsKIApAQCAtMTM0LDc2ICsxMzgsNzYgQEAKICAgICBweFRvcE9mU3RhY2stLTsKIAogICAgIC8qIE5vdyB0aGUgcmVtYWluaW5nIHJlZ2lzdGVycy4gKi8KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDE7ICAgICAgIC8qIFIxICovCisgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAxOyAvKiBSMSAqLwogICAgIHB4VG9wT2ZTdGFjay0tOwotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMjsgICAgICAgLyogUjIgKi8KKyAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDI7IC8qIFIyICovCiAgICAgcHhUb3BPZlN0YWNrLS07Ci0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAzOyAgICAgICAvKiBSMyAqLworICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMzsgLyogUjMgKi8KICAgICBweFRvcE9mU3RhY2stLTsKLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDQ7ICAgICAgIC8qIFI0ICovCisgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA0OyAvKiBSNCAqLwogICAgIHB4VG9wT2ZTdGFjay0tOwotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNTsgICAgICAgLyogUjUgKi8KKyAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDU7IC8qIFI1ICovCiAgICAgcHhUb3BPZlN0YWNrLS07Ci0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA2OyAgICAgICAvKiBSNiAqLworICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNjsgLyogUjYgKi8KICAgICBweFRvcE9mU3RhY2stLTsKLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDc7ICAgICAgIC8qIFI3ICovCisgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA3OyAvKiBSNyAqLwogICAgIHB4VG9wT2ZTdGFjay0tOwotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwODsgICAgICAgLyogUjggKi8KKyAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDg7IC8qIFI4ICovCiAgICAgcHhUb3BPZlN0YWNrLS07Ci0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA5OyAgICAgICAvKiBSOSAqLworICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwOTsgLyogUjkgKi8KICAgICBweFRvcE9mU3RhY2stLTsKLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTA7ICAgICAgIC8qIFIxMCAqLworICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMDsgLyogUjEwICovCiAgICAgcHhUb3BPZlN0YWNrLS07Ci0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDExOyAgICAgICAvKiBSMTEgKi8KKyAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTE7IC8qIFIxMSAqLwogICAgIHB4VG9wT2ZTdGFjay0tOwotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMjsgICAgICAgLyogUjEyICovCisgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDEyOyAvKiBSMTIgKi8KICAgICBweFRvcE9mU3RhY2stLTsKLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTM7ICAgICAgIC8qIFIxMyAqLworICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMzsgLyogUjEzICovCiAgICAgcHhUb3BPZlN0YWNrLS07Ci0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDE0OyAgICAgICAvKiBSMTQgKi8KKyAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTQ7IC8qIFIxNCAqLwogICAgIHB4VG9wT2ZTdGFjay0tOwotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxNTsgICAgICAgLyogUjE1ICovCisgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDE1OyAvKiBSMTUgKi8KICAgICBweFRvcE9mU3RhY2stLTsKIAogICAgIC8qIFBsYWNlIHRoZSBwYXJhbWV0ZXIgb24gdGhlIHN0YWNrIGluIHRoZSBleHBlY3RlZCBsb2NhdGlvbi4gKi8KLSAgICB1c0FkZHJlc3MgICAgID0gKHVpbnQxNl90KSBwdlBhcmFtZXRlcnM7Ci0gICAgKnB4VG9wT2ZTdGFjayA9IChTdGFja1R5cGVfdCkgKHVzQWRkcmVzcyAmICh1aW50MTZfdCkgMHgwMGZmKTsKKyAgICB1c0FkZHJlc3MgPSAoIHVpbnQxNl90ICkgcHZQYXJhbWV0ZXJzOworICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgKCB1c0FkZHJlc3MgJiAoIHVpbnQxNl90ICkgMHgwMGZmICk7CiAgICAgcHhUb3BPZlN0YWNrLS07CiAKICAgICB1c0FkZHJlc3MgPj49IDg7Ci0gICAgKnB4VG9wT2ZTdGFjayA9IChTdGFja1R5cGVfdCkgKHVzQWRkcmVzcyAmICh1aW50MTZfdCkgMHgwMGZmKTsKKyAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApICggdXNBZGRyZXNzICYgKCB1aW50MTZfdCApIDB4MDBmZiApOwogICAgIHB4VG9wT2ZTdGFjay0tOwogCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDE4OyAgICAgICAvKiBSMTggKi8KKyAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTg7IC8qIFIxOCAqLwogICAgIHB4VG9wT2ZTdGFjay0tOwotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxOTsgICAgICAgLyogUjE5ICovCisgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDE5OyAvKiBSMTkgKi8KICAgICBweFRvcE9mU3RhY2stLTsKLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MjA7ICAgICAgIC8qIFIyMCAqLworICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgyMDsgLyogUjIwICovCiAgICAgcHhUb3BPZlN0YWNrLS07Ci0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDIxOyAgICAgICAvKiBSMjEgKi8KKyAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MjE7IC8qIFIyMSAqLwogICAgIHB4VG9wT2ZTdGFjay0tOwotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgyMjsgICAgICAgLyogUjIyICovCisgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDIyOyAvKiBSMjIgKi8KICAgICBweFRvcE9mU3RhY2stLTsKLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MjM7ICAgICAgIC8qIFIyMyAqLworICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgyMzsgLyogUjIzICovCiAgICAgcHhUb3BPZlN0YWNrLS07Ci0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDI0OyAgICAgICAvKiBSMjQgKi8KKyAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MjQ7IC8qIFIyNCAqLwogICAgIHB4VG9wT2ZTdGFjay0tOwotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgyNTsgICAgICAgLyogUjI1ICovCisgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDI1OyAvKiBSMjUgKi8KICAgICBweFRvcE9mU3RhY2stLTsKLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MjY7ICAgICAgIC8qIFIyNiBYICovCisgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDI2OyAvKiBSMjYgWCAqLwogICAgIHB4VG9wT2ZTdGFjay0tOwotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgyNzsgICAgICAgLyogUjI3ICovCisgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDI3OyAvKiBSMjcgKi8KICAgICBweFRvcE9mU3RhY2stLTsKIAogICAgIC8qIFRoZSBZIHJlZ2lzdGVyIGlzIG5vdCBzdG9yZWQgYXMgaXQgaXMgdXNlZCBhcyB0aGUgc29mdHdhcmUgc3RhY2sgYW5kCi0gICAgZ2V0cyBzYXZlZCBpbnRvIHRoZSB0YXNrIGNvbnRyb2wgYmxvY2suICovCisgICAgICogZ2V0cyBzYXZlZCBpbnRvIHRoZSB0YXNrIGNvbnRyb2wgYmxvY2suICovCiAKLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MzA7ICAgICAgIC8qIFIzMCBaICovCisgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDMwOyAgLyogUjMwIFogKi8KICAgICBweFRvcE9mU3RhY2stLTsKLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDMxOyAgICAgIC8qIFIzMSAqLwotICAgICAgICAKLSAgICAgICAgcHhUb3BPZlN0YWNrLS07Ci0gICAgKnB4VG9wT2ZTdGFjayA9IHBvcnROT19DUklUSUNBTF9ORVNUSU5HOyAgICAvKiBDcml0aWNhbCBuZXN0aW5nIGlzIHplcm8gd2hlbiB0aGUgdGFzayBzdGFydHMuICovCisgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAzMTsgLyogUjMxICovCisKKyAgICBweFRvcE9mU3RhY2stLTsKKyAgICAqcHhUb3BPZlN0YWNrID0gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkc7IC8qIENyaXRpY2FsIG5lc3RpbmcgaXMgemVybyB3aGVuIHRoZSB0YXNrIHN0YXJ0cy4gKi8KIAogICAgIC8qbGludCArZTk1MCArZTYxMSArZTkyMyAqLwogCkBAIC0yMTEsMTQgKzIxNSwxNCBAQAogfQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLUJhc2VUeXBlX3QgeFBvcnRTdGFydFNjaGVkdWxlcih2b2lkKQorQmFzZVR5cGVfdCB4UG9ydFN0YXJ0U2NoZWR1bGVyKCB2b2lkICkKIHsKICAgICAvKiBTZXR1cCB0aGUgaGFyZHdhcmUgdG8gZ2VuZXJhdGUgdGhlIHRpY2suICovCiAgICAgcHJ2U2V0dXBUaW1lckludGVycnVwdCgpOwogCiAgICAgLyogUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgZmlyc3QgdGFzayB0aGF0IGlzIGdvaW5nIHRvIHJ1bi4KLSAgICBOb3JtYWxseSB3ZSB3b3VsZCBqdXN0IGNhbGwgcG9ydFJFU1RPUkVfQ09OVEVYVCgpIGhlcmUsIGJ1dCBhcyB0aGUgSUFSCi0gICAgY29tcGlsZXIgZG9lcyBub3QgZnVsbHkgc3VwcG9ydCBpbmxpbmUgYXNzZW1ibGVyIHdlIGhhdmUgdG8gbWFrZSBhIGNhbGwuKi8KKyAgICAgKiBOb3JtYWxseSB3ZSB3b3VsZCBqdXN0IGNhbGwgcG9ydFJFU1RPUkVfQ09OVEVYVCgpIGhlcmUsIGJ1dCBhcyB0aGUgSUFSCisgICAgICogY29tcGlsZXIgZG9lcyBub3QgZnVsbHkgc3VwcG9ydCBpbmxpbmUgYXNzZW1ibGVyIHdlIGhhdmUgdG8gbWFrZSBhIGNhbGwuKi8KICAgICB2UG9ydFN0YXJ0KCk7CiAKICAgICAvKiBTaG91bGQgbm90IGdldCBoZXJlLiAqLwpAQCAtMjI2LDcgKzIzMCw3IEBACiB9CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotdm9pZCB2UG9ydEVuZFNjaGVkdWxlcih2b2lkKQordm9pZCB2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApCiB7CiAgICAgLyogdlBvcnRFbmRTY2hlZHVsZXIgaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgcG9ydC4gKi8KIH0KQEAgLTIzNiw3ICsyNDAsNyBAQAogLyoKICAqIFNldHVwIHRpbWVyIHRvIGdlbmVyYXRlIGEgdGljayBpbnRlcnJ1cHQuCiAgKi8KLXN0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQodm9pZCkKK3N0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKQogewogICAgIFRJQ0tfaW5pdCgpOwogfQpAQCAtMjQ0LDMyICsyNDgsMzQgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMQorCiAvKgogICogVGljayBJU1IgZm9yIHByZWVtcHRpdmUgc2NoZWR1bGVyLiAgV2UgY2FuIHVzZSBhIG5ha2VkIGF0dHJpYnV0ZSBhcwogICogdGhlIGNvbnRleHQgaXMgc2F2ZWQgYXQgdGhlIHN0YXJ0IG9mIHZQb3J0WWllbGRGcm9tVGljaygpLiAgVGhlIHRpY2sKICAqIGNvdW50IGlzIGluY3JlbWVudGVkIGFmdGVyIHRoZSBjb250ZXh0IGlzIHNhdmVkLgogICovCiAKLV9fdGFzayB2b2lkIFRJQ0tfSU5UKHZvaWQpCi17Ci0gICAgdlBvcnRZaWVsZEZyb21UaWNrKCk7Ci0gICAgYXNtKCJyZXRpIik7Ci19CisgICAgX190YXNrIHZvaWQgVElDS19JTlQoIHZvaWQgKQorICAgIHsKKyAgICAgICAgdlBvcnRZaWVsZEZyb21UaWNrKCk7CisgICAgICAgIGFzbSAoICJyZXRpIiApOworICAgIH0KICNlbHNlCisKIC8qCiAgKiBUaWNrIElTUiBmb3IgdGhlIGNvb3BlcmF0aXZlIHNjaGVkdWxlci4gIEFsbCB0aGlzIGRvZXMgaXMgaW5jcmVtZW50IHRoZQogICogdGljayBjb3VudC4gIFdlIGRvbid0IG5lZWQgdG8gc3dpdGNoIGNvbnRleHQsIHRoaXMgY2FuIG9ubHkgYmUgZG9uZSBieQogICogbWFudWFsIGNhbGxzIHRvIHRhc2tZSUVMRCgpOwogICovCiAKLV9faW50ZXJydXB0IHZvaWQgVElDS19JTlQodm9pZCkKLXsKLSAgICAvKiBDbGVhciB0aWNrIGludGVycnVwdCBmbGFnLiAqLwotICAgIElOVF9GTEFHUyA9IElOVF9NQVNLOwotICAgICAgICAKLSAgICB4VGFza0luY3JlbWVudFRpY2soKTsKLX0KLSNlbmRpZgorICAgIF9faW50ZXJydXB0IHZvaWQgVElDS19JTlQoIHZvaWQgKQorICAgIHsKKyAgICAgICAgLyogQ2xlYXIgdGljayBpbnRlcnJ1cHQgZmxhZy4gKi8KKyAgICAgICAgSU5UX0ZMQUdTID0gSU5UX01BU0s7CisKKyAgICAgICAgeFRhc2tJbmNyZW1lbnRUaWNrKCk7CisgICAgfQorI2VuZGlmIC8qIGlmIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDEgKi8KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTI4NCw2ICsyOTAsNyBAQAogdm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApCiB7CiAgICAgdXhDcml0aWNhbE5lc3RpbmctLTsKKwogICAgIGlmKCB1eENyaXRpY2FsTmVzdGluZyA9PSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyApCiAgICAgewogICAgICAgICBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKTsKZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0lBUi9BVlJfTWVnYTAvcG9ydGhhcmR3YXJlLmggYi9wb3J0YWJsZS9JQVIvQVZSX01lZ2EwL3BvcnRoYXJkd2FyZS5oCmluZGV4IDU0NjhiZGEuLjQxODhhZTIgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0lBUi9BVlJfTWVnYTAvcG9ydGhhcmR3YXJlLmgKKysrIGIvcG9ydGFibGUvSUFSL0FWUl9NZWdhMC9wb3J0aGFyZHdhcmUuaApAQCAtOCw3NCArOCw3OSBAQAogCiAjaWYgKCBjb25maWdVU0VfVElNRVJfSU5TVEFOQ0UgPT0gMCApCiAKLSAgICAjZGVmaW5lIFRJQ0tfSU5UX3ZlY3QgICAgICAgVENCMF9JTlRfdmVjdAotICAgICNkZWZpbmUgSU5UX0ZMQUdTICAgICAgICAgICBUQ0IwX0lOVEZMQUdTCi0gICAgI2RlZmluZSBJTlRfTUFTSyAgICAgICAgICAgIFRDQl9DQVBUX2JtCisgICAgI2RlZmluZSBUSUNLX0lOVF92ZWN0ICAgIFRDQjBfSU5UX3ZlY3QKKyAgICAjZGVmaW5lIElOVF9GTEFHUyAgICAgICAgVENCMF9JTlRGTEFHUworICAgICNkZWZpbmUgSU5UX01BU0sgICAgICAgICBUQ0JfQ0FQVF9ibQogCi0gICAgI2RlZmluZSBUSUNLX2luaXQoKSAgICAgICAgIHsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQ0IwLkNDTVAgICAgPSBjb25maWdDUFVfQ0xPQ0tfSFogLyBjb25maWdUSUNLX1JBVEVfSFo7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVENCMC5JTlRDVFJMID0gVENCX0NBUFRfYm07IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVENCMC5DVFJMQSAgID0gVENCX0VOQUJMRV9ibTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgI2RlZmluZSBUSUNLX2luaXQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgVENCMC5DQ01QID0gY29uZmlnQ1BVX0NMT0NLX0haIC8gY29uZmlnVElDS19SQVRFX0haOyBcCisgICAgICAgIFRDQjAuSU5UQ1RSTCA9IFRDQl9DQVBUX2JtOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBUQ0IwLkNUUkxBID0gVENCX0VOQUJMRV9ibTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CiAKICNlbGlmICggY29uZmlnVVNFX1RJTUVSX0lOU1RBTkNFID09IDEgKQogCi0gICAgI2RlZmluZSBUSUNLX0lOVF92ZWN0ICAgICAgIFRDQjFfSU5UX3ZlY3QKLSAgICAjZGVmaW5lIElOVF9GTEFHUyAgICAgICAgICAgVENCMV9JTlRGTEFHUwotICAgICNkZWZpbmUgSU5UX01BU0sgICAgICAgICAgICBUQ0JfQ0FQVF9ibQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgI2RlZmluZSBUSUNLX2luaXQoKSAgICAgICAgIHsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQ0IxLkNDTVAgICAgPSBjb25maWdDUFVfQ0xPQ0tfSFogLyBjb25maWdUSUNLX1JBVEVfSFo7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVENCMS5JTlRDVFJMID0gVENCX0NBUFRfYm07IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVENCMS5DVFJMQSAgID0gVENCX0VOQUJMRV9ibTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgI2RlZmluZSBUSUNLX0lOVF92ZWN0ICAgIFRDQjFfSU5UX3ZlY3QKKyAgICAjZGVmaW5lIElOVF9GTEFHUyAgICAgICAgVENCMV9JTlRGTEFHUworICAgICNkZWZpbmUgSU5UX01BU0sgICAgICAgICBUQ0JfQ0FQVF9ibQorCisgICAgI2RlZmluZSBUSUNLX2luaXQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgVENCMS5DQ01QID0gY29uZmlnQ1BVX0NMT0NLX0haIC8gY29uZmlnVElDS19SQVRFX0haOyBcCisgICAgICAgIFRDQjEuSU5UQ1RSTCA9IFRDQl9DQVBUX2JtOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBUQ0IxLkNUUkxBID0gVENCX0VOQUJMRV9ibTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CiAKICNlbGlmICggY29uZmlnVVNFX1RJTUVSX0lOU1RBTkNFID09IDIgKQogCi0gICAgI2RlZmluZSBUSUNLX0lOVF92ZWN0ICAgICAgIFRDQjJfSU5UX3ZlY3QKLSAgICAjZGVmaW5lIElOVF9GTEFHUyAgICAgICAgICAgVENCMl9JTlRGTEFHUwotICAgICNkZWZpbmUgSU5UX01BU0sgICAgICAgICAgICBUQ0JfQ0FQVF9ibQotICAgIAotICAgICNkZWZpbmUgVElDS19pbml0KCkgICAgICAgICB7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVENCMi5DQ01QICAgID0gY29uZmlnQ1BVX0NMT0NLX0haIC8gY29uZmlnVElDS19SQVRFX0haOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRDQjIuSU5UQ1RSTCA9IFRDQl9DQVBUX2JtOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRDQjIuQ1RSTEEgICA9IFRDQl9FTkFCTEVfYm07IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAjZGVmaW5lIFRJQ0tfSU5UX3ZlY3QgICAgVENCMl9JTlRfdmVjdAorICAgICNkZWZpbmUgSU5UX0ZMQUdTICAgICAgICBUQ0IyX0lOVEZMQUdTCisgICAgI2RlZmluZSBJTlRfTUFTSyAgICAgICAgIFRDQl9DQVBUX2JtCisKKyAgICAjZGVmaW5lIFRJQ0tfaW5pdCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBUQ0IyLkNDTVAgPSBjb25maWdDUFVfQ0xPQ0tfSFogLyBjb25maWdUSUNLX1JBVEVfSFo7IFwKKyAgICAgICAgVENCMi5JTlRDVFJMID0gVENCX0NBUFRfYm07ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFRDQjIuQ1RSTEEgPSBUQ0JfRU5BQkxFX2JtOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KKwogI2VsaWYgKCBjb25maWdVU0VfVElNRVJfSU5TVEFOQ0UgPT0gMyApCiAKLSAgICAjZGVmaW5lIFRJQ0tfSU5UX3ZlY3QgICAgICAgVENCM19JTlRfdmVjdAotICAgICNkZWZpbmUgSU5UX0ZMQUdTICAgICAgICAgICBUQ0IzX0lOVEZMQUdTCi0gICAgI2RlZmluZSBJTlRfTUFTSyAgICAgICAgICAgIFRDQl9DQVBUX2JtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICNkZWZpbmUgVElDS19pbml0KCkgICAgICAgICB7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVENCMy5DQ01QICAgID0gY29uZmlnQ1BVX0NMT0NLX0haIC8gY29uZmlnVElDS19SQVRFX0haOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRDQjMuSU5UQ1RSTCA9IFRDQl9DQVBUX2JtOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRDQjMuQ1RSTEEgICA9IFRDQl9FTkFCTEVfYm07IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICNkZWZpbmUgVElDS19JTlRfdmVjdCAgICBUQ0IzX0lOVF92ZWN0CisgICAgI2RlZmluZSBJTlRfRkxBR1MgICAgICAgIFRDQjNfSU5URkxBR1MKKyAgICAjZGVmaW5lIElOVF9NQVNLICAgICAgICAgVENCX0NBUFRfYm0KKworICAgICNkZWZpbmUgVElDS19pbml0KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFRDQjMuQ0NNUCA9IGNvbmZpZ0NQVV9DTE9DS19IWiAvIGNvbmZpZ1RJQ0tfUkFURV9IWjsgXAorICAgICAgICBUQ0IzLklOVENUUkwgPSBUQ0JfQ0FQVF9ibTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgVENCMy5DVFJMQSA9IFRDQl9FTkFCTEVfYm07ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQogCiAjZWxpZiAoIGNvbmZpZ1VTRV9USU1FUl9JTlNUQU5DRSA9PSA0ICkKIAotICAgICNkZWZpbmUgVElDS19JTlRfdmVjdCAgICAgICBSVENfQ05UX3ZlY3QKLSAgICAjZGVmaW5lIElOVF9GTEFHUyAgICAgICAgICAgUlRDX0lOVEZMQUdTCi0gICAgI2RlZmluZSBJTlRfTUFTSyAgICAgICAgICAgIFJUQ19PVkZfYm0KLSAgICAKLSAgICAvKiBIZXJ0eiB0byBwZXJpb2QgZm9yIFJUQyBzZXR1cCAqLwotICAgICNkZWZpbmUgUlRDX1BFUklPRF9IWih4KSAgICAoIDMyNzY4ICogKCAoIDEuMCAvIHggKSApICkKLSAgICAjZGVmaW5lIFRJQ0tfaW5pdCgpICAgICAgICAgeyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChSVEMuU1RBVFVTID4gMCk7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRDLkNUUkxBICAgID0gUlRDX1BSRVNDQUxFUl9ESVYxX2djIHwgMSA8PCBSVENfUlRDRU5fYnA7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRDLlBFUiAgICAgID0gUlRDX1BFUklPRF9IWihjb25maWdUSUNLX1JBVEVfSFopOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUQy5JTlRDVFJMIHw9IDEgPDwgUlRDX09WRl9icDsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgI2RlZmluZSBUSUNLX0lOVF92ZWN0ICAgIFJUQ19DTlRfdmVjdAorICAgICNkZWZpbmUgSU5UX0ZMQUdTICAgICAgICBSVENfSU5URkxBR1MKKyAgICAjZGVmaW5lIElOVF9NQVNLICAgICAgICAgUlRDX09WRl9ibQogCi0jZWxzZQorLyogSGVydHogdG8gcGVyaW9kIGZvciBSVEMgc2V0dXAgKi8KKyAgICAjZGVmaW5lIFJUQ19QRVJJT0RfSFooIHggKSAgICAoIDMyNzY4ICogKCAoIDEuMCAvIHggKSApICkKKyAgICAjZGVmaW5lIFRJQ0tfaW5pdCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgd2hpbGUoIFJUQy5TVEFUVVMgPiAwICkgezsgfSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUlRDLkNUUkxBID0gUlRDX1BSRVNDQUxFUl9ESVYxX2djIHwgMSA8PCBSVENfUlRDRU5fYnA7IFwKKyAgICAgICAgUlRDLlBFUiA9IFJUQ19QRVJJT0RfSFooIGNvbmZpZ1RJQ0tfUkFURV9IWiApOyAgICAgICAgIFwKKyAgICAgICAgUlRDLklOVENUUkwgfD0gMSA8PCBSVENfT1ZGX2JwOyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CisKKyNlbHNlIC8qIGlmICggY29uZmlnVVNFX1RJTUVSX0lOU1RBTkNFID09IDAgKSAqLwogICAgICN1bmRlZiBUSUNLX0lOVF92ZWN0CiAgICAgI3VuZGVmIElOVF9GTEFHUwogICAgICN1bmRlZiBJTlRfTUFTSwogICAgICN1bmRlZiBUSUNLX2luaXQoKQogICAgICNlcnJvciBJbnZhbGlkIHRpbWVyIHNldHRpbmcuCi0jZW5kaWYKKyNlbmRpZiAvKiBpZiAoIGNvbmZpZ1VTRV9USU1FUl9JTlNUQU5DRSA9PSAwICkgKi8KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0lBUi9BVlJfTWVnYTAvcG9ydG1hY3JvLmggYi9wb3J0YWJsZS9JQVIvQVZSX01lZ2EwL3BvcnRtYWNyby5oCmluZGV4IDU1NWY0MWUuLjFjMzgzYjkgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0lBUi9BVlJfTWVnYTAvcG9ydG1hY3JvLmgKKysrIGIvcG9ydGFibGUvSUFSL0FWUl9NZWdhMC9wb3J0bWFjcm8uaApAQCAtMjksOSArMjksMTEgQEAKICNpZm5kZWYgUE9SVE1BQ1JPX0gKICNkZWZpbmUgUE9SVE1BQ1JPX0gKIAorLyogKklOREVOVC1PRkYqICovCiAjaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgeworICAgIGV4dGVybiAiQyIgewogI2VuZGlmCisvKiAqSU5ERU5ULU9OKiAqLwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBQb3J0IHNwZWNpZmljIGRlZmluaXRpb25zLgpAQCAtNDQsMjYgKzQ2LDI2IEBACiAgKi8KIAogLyogVHlwZSBkZWZpbml0aW9ucy4gKi8KLSNkZWZpbmUgcG9ydENIQVIgICAgICAgICAgICAgICAgICAgIGNoYXIKLSNkZWZpbmUgcG9ydEZMT0FUICAgICAgICAgICAgICAgICAgIGZsb2F0Ci0jZGVmaW5lIHBvcnRET1VCTEUgICAgICAgICAgICAgICAgICBkb3VibGUKLSNkZWZpbmUgcG9ydExPTkcgICAgICAgICAgICAgICAgICAgIGxvbmcKLSNkZWZpbmUgcG9ydFNIT1JUICAgICAgICAgICAgICAgICAgIGludAotI2RlZmluZSBwb3J0U1RBQ0tfVFlQRSAgICAgICAgICAgICAgdWludDhfdAotI2RlZmluZSBwb3J0QkFTRV9UWVBFICAgICAgICAgICAgICAgY2hhcgorI2RlZmluZSBwb3J0Q0hBUiAgICAgICAgICAgICAgICAgY2hhcgorI2RlZmluZSBwb3J0RkxPQVQgICAgICAgICAgICAgICAgZmxvYXQKKyNkZWZpbmUgcG9ydERPVUJMRSAgICAgICAgICAgICAgIGRvdWJsZQorI2RlZmluZSBwb3J0TE9ORyAgICAgICAgICAgICAgICAgbG9uZworI2RlZmluZSBwb3J0U0hPUlQgICAgICAgICAgICAgICAgaW50CisjZGVmaW5lIHBvcnRTVEFDS19UWVBFICAgICAgICAgICB1aW50OF90CisjZGVmaW5lIHBvcnRCQVNFX1RZUEUgICAgICAgICAgICBjaGFyCiAKLSNkZWZpbmUgcG9ydFBPSU5URVJfU0laRV9UWVBFICAgICAgIHVpbnQxNl90CisjZGVmaW5lIHBvcnRQT0lOVEVSX1NJWkVfVFlQRSAgICB1aW50MTZfdAogCi10eXBlZGVmIHBvcnRTVEFDS19UWVBFICAgICAgICAgICAgICBTdGFja1R5cGVfdDsKLXR5cGVkZWYgc2lnbmVkIGNoYXIgICAgICAgICAgICAgICAgIEJhc2VUeXBlX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGNoYXIgICAgICAgICAgICAgICBVQmFzZVR5cGVfdDsKK3R5cGVkZWYgcG9ydFNUQUNLX1RZUEUgICBTdGFja1R5cGVfdDsKK3R5cGVkZWYgc2lnbmVkIGNoYXIgICAgICBCYXNlVHlwZV90OwordHlwZWRlZiB1bnNpZ25lZCBjaGFyICAgIFVCYXNlVHlwZV90OwogCi0jaWYgKGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSkKLSAgdHlwZWRlZiB1aW50MTZfdCAgICAgICAgICAgICAgICAgIFRpY2tUeXBlX3Q7Ci0gICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAgICAgICAgICAoVGlja1R5cGVfdCkweGZmZmYKKyNpZiAoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApCisgICAgdHlwZWRlZiB1aW50MTZfdCAgICAgVGlja1R5cGVfdDsKKyAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmCiAjZWxzZQotICB0eXBlZGVmIHVpbnQzMl90ICAgICAgICAgICAgICAgICAgVGlja1R5cGVfdDsKLSAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICAgICAgICAgIChUaWNrVHlwZV90KTB4ZmZmZmZmZmZVTAorICAgIHR5cGVkZWYgdWludDMyX3QgICAgIFRpY2tUeXBlX3Q7CisgICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTAogI2VuZGlmCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtNzUsMzEgKzc3LDMzIEBACiAjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpICAgICAgICB2UG9ydEVudGVyQ3JpdGljYWwoKQogI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpICAgICAgICAgdlBvcnRFeGl0Q3JpdGljYWwoKQogCi0jZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAgICBhc20oICJjbGkiICkKLSNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkgICAgIGFzbSggInNlaSIgKQorI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgICAgYXNtICggImNsaSIgKQorI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKSAgICAgYXNtICggInNlaSIgKQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qIEFyY2hpdGVjdHVyZSBzcGVjaWZpY3MuICovCi0jZGVmaW5lIHBvcnRTVEFDS19HUk9XVEggICAgICAgICAgICAoLTEpCi0jZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUyAgICAgICAgICAoKFRpY2tUeXBlX3QpMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWikKLSNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UICAgICAgICAgIDEKLSNkZWZpbmUgcG9ydE5PUCgpICAgICAgICAgICAgICAgICAgIGFzbSggIm5vcCIgKQorI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RIICAgICAgKCAtMSApCisjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUyAgICAoICggVGlja1R5cGVfdCApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQorI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQgICAgMQorI2RlZmluZSBwb3J0Tk9QKCkgICAgYXNtICggIm5vcCIgKQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qIEtlcm5lbCB1dGlsaXRpZXMuICovCi1leHRlcm4gdm9pZCB2UG9ydFlpZWxkKHZvaWQpOwotI2RlZmluZSBwb3J0WUlFTEQoKSAgICAgICAgICAgICAgICAgdlBvcnRZaWVsZCgpCitleHRlcm4gdm9pZCB2UG9ydFlpZWxkKCB2b2lkICk7CisjZGVmaW5lIHBvcnRZSUVMRCgpICAgICAgICAgICAgIHZQb3J0WWllbGQoKQogCi1leHRlcm4gdm9pZCB2UG9ydFlpZWxkRnJvbUlTUih2b2lkKTsKLSNkZWZpbmUgcG9ydFlJRUxEX0ZST01fSVNSKCkgICAgICAgIHZQb3J0WWllbGRGcm9tSVNSKCkKK2V4dGVybiB2b2lkIHZQb3J0WWllbGRGcm9tSVNSKCB2b2lkICk7CisjZGVmaW5lIHBvcnRZSUVMRF9GUk9NX0lTUigpICAgIHZQb3J0WWllbGRGcm9tSVNSKCkKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKiBUYXNrIGZ1bmN0aW9uIG1hY3JvcyBhcyBkZXNjcmliZWQgb24gdGhlIEZyZWVSVE9TLm9yZyBXRUIgc2l0ZS4gKi8KLSNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8odkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMpIHZvaWQgdkZ1bmN0aW9uKHZvaWQgKnB2UGFyYW1ldGVycykKLSNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04odkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMpIHZvaWQgdkZ1bmN0aW9uKHZvaWQgKnB2UGFyYW1ldGVycykKKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICAgICAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApCiAKKy8qICpJTkRFTlQtT0ZGKiAqLwogI2lmZGVmIF9fY3BsdXNwbHVzCi19CisgICAgfQogI2VuZGlmCisvKiAqSU5ERU5ULU9OKiAqLwogCiAjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0lBUi9BdG1lbFNBTTdTNjQvQVQ5MVNBTTdTNjQuaCBiL3BvcnRhYmxlL0lBUi9BdG1lbFNBTTdTNjQvQVQ5MVNBTTdTNjQuaAppbmRleCBkM2JjNDc3Li44ZjlkZGI0IDEwMDY0NAotLS0gYS9wb3J0YWJsZS9JQVIvQXRtZWxTQU03UzY0L0FUOTFTQU03UzY0LmgKKysrIGIvcG9ydGFibGUvSUFSL0F0bWVsU0FNN1M2NC9BVDkxU0FNN1M2NC5oCkBAIC0xLDE5MzYgKzEsMTkxNCBAQAotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qICAgICAgICAgIEFUTUVMIE1pY3JvY29udHJvbGxlciBTb2Z0d2FyZSBTdXBwb3J0ICAtICBST1VTU0VUICAtICovDQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qICBUaGUgc29mdHdhcmUgaXMgZGVsaXZlcmVkICJBUyBJUyIgd2l0aG91dCB3YXJyYW50eSBvciBjb25kaXRpb24gb2YgYW55ICovDQotLyogIGtpbmQsIGVpdGhlciBleHByZXNzLCBpbXBsaWVkIG9yIHN0YXR1dG9yeS4gVGhpcyBpbmNsdWRlcyB3aXRob3V0ICovDQotLyogIGxpbWl0YXRpb24gYW55IHdhcnJhbnR5IG9yIGNvbmRpdGlvbiB3aXRoIHJlc3BlY3QgdG8gbWVyY2hhbnRhYmlsaXR5IG9yICovDQotLyogIGZpdG5lc3MgZm9yIGFueSBwYXJ0aWN1bGFyIHB1cnBvc2UsIG9yIGFnYWluc3QgdGhlIGluZnJpbmdlbWVudHMgb2YgKi8NCi0vKiAgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiBvdGhlcnMuICovDQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qIEZpbGUgTmFtZSAgICAgICAgICAgOiBBVDkxU0FNN1M2NC5oICovDQotLyogT2JqZWN0ICAgICAgICAgICAgICA6IEFUOTFTQU03UzY0IGRlZmluaXRpb25zICovDQotLyogR2VuZXJhdGVkICAgICAgICAgICA6IEFUOTEgU1cgQXBwbGljYXRpb24gR3JvdXAgIDA3LzE2LzIwMDQgKDA3OjQzOjA4KSAqLw0KLS8qICovDQotLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9BVDkxU0FNN1M2NC5wbC8xLjEyL01vbiBKdWwgMTIgMTM6MDI6MzAgMjAwNC8vICovDQotLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9TWVNDX1NBTTdTeHgucGwvMS41L01vbiBKdWwgMTIgMTY6MjI6MTIgMjAwNC8vICovDQotLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9NQ19TQU0wMi5wbC8xLjMvV2VkIE1hciAxMCAwODozNzowNCAyMDA0Ly8gKi8NCi0vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL1VEUF8xNzY1Qi5wbC8xLjMvRnJpIEF1ZyAgMiAxNDo0NTozOCAyMDAyLy8gKi8NCi0vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL0FJQ18xNzk2Qi5wbC8xLjEuMS4xL0ZyaSBKdW4gMjggMDk6MzY6NDggMjAwMi8vICovDQotLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfcG1jX1NBTS5oLzEuNi9UdWUgQXByIDI3IDEzOjUzOjUyIDIwMDQvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvUElPXzE3MjVELnBsLzEuMS4xLjEvRnJpIEp1biAyOCAwOTozNjo0OCAyMDAyLy8gKi8NCi0vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL0RCR1VfMTc1NEEucGwvMS40L0ZyaSBKYW4gMzEgMTI6MTg6MjQgMjAwMy8vICovDQotLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9VU18xNzM5Qy5wbC8xLjIvTW9uIEp1bCAxMiAxNzoyNjoyNCAyMDA0Ly8gKi8NCi0vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL1NQSTIucGwvMS4yL0ZyaSBPY3QgMTcgMDg6MTM6NDAgMjAwMy8vICovDQotLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9TU0NfMTc2MkEucGwvMS4yL0ZyaSBOb3YgIDggMTM6MjY6NDAgMjAwMi8vICovDQotLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfdGNfMTc1M2IuaC8xLjEvRnJpIEphbiAzMSAxMjoyMDowMiAyMDAzLy8gKi8NCi0vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL1RXSV8xNzYxQi5wbC8xLjQvRnJpIEZlYiAgNyAxMDozMDowOCAyMDAzLy8gKi8NCi0vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL1BEQ18xNzM0Qi5wbC8xLjIvVGh1IE5vdiAyMSAxNjozODoyNCAyMDAyLy8gKi8NCi0vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL0FEQ19TQU0ucGwvMS43L0ZyaSBPY3QgMTcgMDg6MTI6MzggMjAwMy8vICovDQotLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfUFdNX1NBTS5oLzEuMy9UaHUgSmFuIDIyIDEwOjEwOjUwIDIwMDQvLyAqLw0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8gICAgICAgICAgQVRNRUwgTWljcm9jb250cm9sbGVyIFNvZnR3YXJlIFN1cHBvcnQgIC0gIFJPVVNTRVQgIC0NCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8gIFRoZSBzb2Z0d2FyZSBpcyBkZWxpdmVyZWQgIkFTIElTIiB3aXRob3V0IHdhcnJhbnR5IG9yIGNvbmRpdGlvbiBvZiBhbnkNCisvLyAga2luZCwgZWl0aGVyIGV4cHJlc3MsIGltcGxpZWQgb3Igc3RhdHV0b3J5LiBUaGlzIGluY2x1ZGVzIHdpdGhvdXQNCisvLyAgbGltaXRhdGlvbiBhbnkgd2FycmFudHkgb3IgY29uZGl0aW9uIHdpdGggcmVzcGVjdCB0byBtZXJjaGFudGFiaWxpdHkgb3INCisvLyAgZml0bmVzcyBmb3IgYW55IHBhcnRpY3VsYXIgcHVycG9zZSwgb3IgYWdhaW5zdCB0aGUgaW5mcmluZ2VtZW50cyBvZg0KKy8vICBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9mIG90aGVycy4NCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8gRmlsZSBOYW1lICAgICAgICAgICA6IEFUOTFTQU03UzY0LmgNCisvLyBPYmplY3QgICAgICAgICAgICAgIDogQVQ5MVNBTTdTNjQgZGVmaW5pdGlvbnMNCisvLyBHZW5lcmF0ZWQgICAgICAgICAgIDogQVQ5MSBTVyBBcHBsaWNhdGlvbiBHcm91cCAgMDcvMTYvMjAwNCAoMDc6NDM6MDgpDQorLy8gDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9BVDkxU0FNN1M2NC5wbC8xLjEyL01vbiBKdWwgMTIgMTM6MDI6MzAgMjAwNC8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9TWVNDX1NBTTdTeHgucGwvMS41L01vbiBKdWwgMTIgMTY6MjI6MTIgMjAwNC8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9NQ19TQU0wMi5wbC8xLjMvV2VkIE1hciAxMCAwODozNzowNCAyMDA0Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1VEUF8xNzY1Qi5wbC8xLjMvRnJpIEF1ZyAgMiAxNDo0NTozOCAyMDAyLy8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL0FJQ18xNzk2Qi5wbC8xLjEuMS4xL0ZyaSBKdW4gMjggMDk6MzY6NDggMjAwMi8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfcG1jX1NBTS5oLzEuNi9UdWUgQXByIDI3IDEzOjUzOjUyIDIwMDQvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvUElPXzE3MjVELnBsLzEuMS4xLjEvRnJpIEp1biAyOCAwOTozNjo0OCAyMDAyLy8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL0RCR1VfMTc1NEEucGwvMS40L0ZyaSBKYW4gMzEgMTI6MTg6MjQgMjAwMy8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9VU18xNzM5Qy5wbC8xLjIvTW9uIEp1bCAxMiAxNzoyNjoyNCAyMDA0Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1NQSTIucGwvMS4yL0ZyaSBPY3QgMTcgMDg6MTM6NDAgMjAwMy8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9TU0NfMTc2MkEucGwvMS4yL0ZyaSBOb3YgIDggMTM6MjY6NDAgMjAwMi8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfdGNfMTc1M2IuaC8xLjEvRnJpIEphbiAzMSAxMjoyMDowMiAyMDAzLy8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1RXSV8xNzYxQi5wbC8xLjQvRnJpIEZlYiAgNyAxMDozMDowOCAyMDAzLy8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1BEQ18xNzM0Qi5wbC8xLjIvVGh1IE5vdiAyMSAxNjozODoyNCAyMDAyLy8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL0FEQ19TQU0ucGwvMS43L0ZyaSBPY3QgMTcgMDg6MTI6MzggMjAwMy8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfUFdNX1NBTS5oLzEuMy9UaHUgSmFuIDIyIDEwOjEwOjUwIDIwMDQvLw0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiANCiAjaWZuZGVmIEFUOTFTQU03UzY0X0gNCiAjZGVmaW5lIEFUOTFTQU03UzY0X0gNCiANCi10eXBlZGVmIHZvbGF0aWxlIHVuc2lnbmVkIGludCBBVDkxX1JFRzsgLyogSGFyZHdhcmUgcmVnaXN0ZXIgZGVmaW5pdGlvbiAqLw0KK3R5cGVkZWYgdm9sYXRpbGUgdW5zaWduZWQgaW50IEFUOTFfUkVHOy8vIEhhcmR3YXJlIHJlZ2lzdGVyIGRlZmluaXRpb24NCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFN5c3RlbSBQZXJpcGhlcmFscyAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotdHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1NZU0MNCi17DQotICAgIEFUOTFfUkVHIFNZU0NfQUlDX1NNUlsgMzIgXTsgLyogU291cmNlIE1vZGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1lTQ19BSUNfU1ZSWyAzMiBdOyAvKiBTb3VyY2UgVmVjdG9yIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNZU0NfQUlDX0lWUjsgICAgICAgLyogSVJRIFZlY3RvciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTWVNDX0FJQ19GVlI7ICAgICAgIC8qIEZJUSBWZWN0b3IgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1lTQ19BSUNfSVNSOyAgICAgICAvKiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNZU0NfQUlDX0lQUjsgICAgICAgLyogSW50ZXJydXB0IFBlbmRpbmcgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1lTQ19BSUNfSU1SOyAgICAgICAvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTWVNDX0FJQ19DSVNSOyAgICAgIC8qIENvcmUgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDBbIDIgXTsgICAgIC8qICovDQotICAgIEFUOTFfUkVHIFNZU0NfQUlDX0lFQ1I7ICAgICAgLyogSW50ZXJydXB0IEVuYWJsZSBDb21tYW5kIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNZU0NfQUlDX0lEQ1I7ICAgICAgLyogSW50ZXJydXB0IERpc2FibGUgQ29tbWFuZCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTWVNDX0FJQ19JQ0NSOyAgICAgIC8qIEludGVycnVwdCBDbGVhciBDb21tYW5kIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNZU0NfQUlDX0lTQ1I7ICAgICAgLyogSW50ZXJydXB0IFNldCBDb21tYW5kIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNZU0NfQUlDX0VPSUNSOyAgICAgLyogRW5kIG9mIEludGVycnVwdCBDb21tYW5kIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNZU0NfQUlDX1NQVTsgICAgICAgLyogU3B1cmlvdXMgVmVjdG9yIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNZU0NfQUlDX0RDUjsgICAgICAgLyogRGVidWcgQ29udHJvbCBSZWdpc3RlciAoUHJvdGVjdCkgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQxWyAxIF07ICAgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBTWVNDX0FJQ19GRkVSOyAgICAgIC8qIEZhc3QgRm9yY2luZyBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1lTQ19BSUNfRkZEUjsgICAgICAvKiBGYXN0IEZvcmNpbmcgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTWVNDX0FJQ19GRlNSOyAgICAgIC8qIEZhc3QgRm9yY2luZyBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQyWyA0NSBdOyAgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBTWVNDX0RCR1VfQ1I7ICAgICAgIC8qIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1lTQ19EQkdVX01SOyAgICAgICAvKiBNb2RlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNZU0NfREJHVV9JRVI7ICAgICAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTWVNDX0RCR1VfSURSOyAgICAgIC8qIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNZU0NfREJHVV9JTVI7ICAgICAgLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1lTQ19EQkdVX0NTUjsgICAgICAvKiBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTWVNDX0RCR1VfUkhSOyAgICAgIC8qIFJlY2VpdmVyIEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1lTQ19EQkdVX1RIUjsgICAgICAvKiBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNZU0NfREJHVV9CUkdSOyAgICAgLyogQmF1ZCBSYXRlIEdlbmVyYXRvciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDNbIDcgXTsgICAgIC8qICovDQotICAgIEFUOTFfUkVHIFNZU0NfREJHVV9DMVI7ICAgICAgLyogQ2hpcCBJRDEgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1lTQ19EQkdVX0MyUjsgICAgICAvKiBDaGlwIElEMiBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTWVNDX0RCR1VfRk5UUjsgICAgIC8qIEZvcmNlIE5UUlNUIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkNFsgNDUgXTsgICAgLyogKi8NCi0gICAgQVQ5MV9SRUcgU1lTQ19EQkdVX1JQUjsgICAgICAvKiBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1lTQ19EQkdVX1JDUjsgICAgICAvKiBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1lTQ19EQkdVX1RQUjsgICAgICAvKiBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNZU0NfREJHVV9UQ1I7ICAgICAgLyogVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTWVNDX0RCR1VfUk5QUjsgICAgIC8qIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNZU0NfREJHVV9STkNSOyAgICAgLyogUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1lTQ19EQkdVX1ROUFI7ICAgICAvKiBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1lTQ19EQkdVX1ROQ1I7ICAgICAvKiBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1lTQ19EQkdVX1BUQ1I7ICAgICAvKiBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTWVNDX0RCR1VfUFRTUjsgICAgIC8qIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQ1WyA1NCBdOyAgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBTWVNDX1BJT0FfUEVSOyAgICAgIC8qIFBJTyBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1lTQ19QSU9BX1BEUjsgICAgICAvKiBQSU8gRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTWVNDX1BJT0FfUFNSOyAgICAgIC8qIFBJTyBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQ2WyAxIF07ICAgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBTWVNDX1BJT0FfT0VSOyAgICAgIC8qIE91dHB1dCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1lTQ19QSU9BX09EUjsgICAgICAvKiBPdXRwdXQgRGlzYWJsZSBSZWdpc3RlcnIgKi8NCi0gICAgQVQ5MV9SRUcgU1lTQ19QSU9BX09TUjsgICAgICAvKiBPdXRwdXQgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkN1sgMSBdOyAgICAgLyogKi8NCi0gICAgQVQ5MV9SRUcgU1lTQ19QSU9BX0lGRVI7ICAgICAvKiBJbnB1dCBGaWx0ZXIgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNZU0NfUElPQV9JRkRSOyAgICAgLyogSW5wdXQgRmlsdGVyIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1lTQ19QSU9BX0lGU1I7ICAgICAvKiBJbnB1dCBGaWx0ZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkOFsgMSBdOyAgICAgLyogKi8NCi0gICAgQVQ5MV9SRUcgU1lTQ19QSU9BX1NPRFI7ICAgICAvKiBTZXQgT3V0cHV0IERhdGEgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1lTQ19QSU9BX0NPRFI7ICAgICAvKiBDbGVhciBPdXRwdXQgRGF0YSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTWVNDX1BJT0FfT0RTUjsgICAgIC8qIE91dHB1dCBEYXRhIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTWVNDX1BJT0FfUERTUjsgICAgIC8qIFBpbiBEYXRhIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTWVNDX1BJT0FfSUVSOyAgICAgIC8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1lTQ19QSU9BX0lEUjsgICAgICAvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTWVNDX1BJT0FfSU1SOyAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNZU0NfUElPQV9JU1I7ICAgICAgLyogSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTWVNDX1BJT0FfTURFUjsgICAgIC8qIE11bHRpLWRyaXZlciBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1lTQ19QSU9BX01ERFI7ICAgICAvKiBNdWx0aS1kcml2ZXIgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTWVNDX1BJT0FfTURTUjsgICAgIC8qIE11bHRpLWRyaXZlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQ5WyAxIF07ICAgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBTWVNDX1BJT0FfUFBVRFI7ICAgIC8qIFB1bGwtdXAgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTWVNDX1BJT0FfUFBVRVI7ICAgIC8qIFB1bGwtdXAgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNZU0NfUElPQV9QUFVTUjsgICAgLyogUGFkIFB1bGwtdXAgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMTBbIDEgXTsgICAgLyogKi8NCi0gICAgQVQ5MV9SRUcgU1lTQ19QSU9BX0FTUjsgICAgICAvKiBTZWxlY3QgQSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTWVNDX1BJT0FfQlNSOyAgICAgIC8qIFNlbGVjdCBCIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNZU0NfUElPQV9BQlNSOyAgICAgLyogQUIgU2VsZWN0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDExWyA5IF07ICAgIC8qICovDQotICAgIEFUOTFfUkVHIFNZU0NfUElPQV9PV0VSOyAgICAgLyogT3V0cHV0IFdyaXRlIEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTWVNDX1BJT0FfT1dEUjsgICAgIC8qIE91dHB1dCBXcml0ZSBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNZU0NfUElPQV9PV1NSOyAgICAgLyogT3V0cHV0IFdyaXRlIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDEyWyA0NjkgXTsgIC8qICovDQotICAgIEFUOTFfUkVHIFNZU0NfUE1DX1NDRVI7ICAgICAgLyogU3lzdGVtIENsb2NrIEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTWVNDX1BNQ19TQ0RSOyAgICAgIC8qIFN5c3RlbSBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNZU0NfUE1DX1NDU1I7ICAgICAgLyogU3lzdGVtIENsb2NrIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDEzWyAxIF07ICAgIC8qICovDQotICAgIEFUOTFfUkVHIFNZU0NfUE1DX1BDRVI7ICAgICAgLyogUGVyaXBoZXJhbCBDbG9jayBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1lTQ19QTUNfUENEUjsgICAgICAvKiBQZXJpcGhlcmFsIENsb2NrIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1lTQ19QTUNfUENTUjsgICAgICAvKiBQZXJpcGhlcmFsIENsb2NrIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDE0WyAxIF07ICAgIC8qICovDQotICAgIEFUOTFfUkVHIFNZU0NfUE1DX01PUjsgICAgICAgLyogTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNZU0NfUE1DX01DRlI7ICAgICAgLyogTWFpbiBDbG9jayAgRnJlcXVlbmN5IFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMTVbIDEgXTsgICAgLyogKi8NCi0gICAgQVQ5MV9SRUcgU1lTQ19QTUNfUExMUjsgICAgICAvKiBQTEwgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1lTQ19QTUNfTUNLUjsgICAgICAvKiBNYXN0ZXIgQ2xvY2sgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQxNlsgMyBdOyAgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBTWVNDX1BNQ19QQ0tSWyA4IF07IC8qIFByb2dyYW1tYWJsZSBDbG9jayBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTWVNDX1BNQ19JRVI7ICAgICAgIC8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1lTQ19QTUNfSURSOyAgICAgICAvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTWVNDX1BNQ19TUjsgICAgICAgIC8qIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTWVNDX1BNQ19JTVI7ICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMTdbIDM2IF07ICAgLyogKi8NCi0gICAgQVQ5MV9SRUcgU1lTQ19SU1RDX1JDUjsgICAgICAvKiBSZXNldCBDb250cm9sIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNZU0NfUlNUQ19SU1I7ICAgICAgLyogUmVzZXQgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNZU0NfUlNUQ19STVI7ICAgICAgLyogUmVzZXQgTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDE4WyA1IF07ICAgIC8qICovDQotICAgIEFUOTFfUkVHIFNZU0NfUlRUQ19SVE1SOyAgICAgLyogUmVhbC10aW1lIE1vZGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1lTQ19SVFRDX1JUQVI7ICAgICAvKiBSZWFsLXRpbWUgQWxhcm0gUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1lTQ19SVFRDX1JUVlI7ICAgICAvKiBSZWFsLXRpbWUgVmFsdWUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1lTQ19SVFRDX1JUU1I7ICAgICAvKiBSZWFsLXRpbWUgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNZU0NfUElUQ19QSU1SOyAgICAgLyogUGVyaW9kIEludGVydmFsIE1vZGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1lTQ19QSVRDX1BJU1I7ICAgICAvKiBQZXJpb2QgSW50ZXJ2YWwgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNZU0NfUElUQ19QSVZSOyAgICAgLyogUGVyaW9kIEludGVydmFsIFZhbHVlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNZU0NfUElUQ19QSUlSOyAgICAgLyogUGVyaW9kIEludGVydmFsIEltYWdlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNZU0NfV0RUQ19XRENSOyAgICAgLyogV2F0Y2hkb2cgQ29udHJvbCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTWVNDX1dEVENfV0RNUjsgICAgIC8qIFdhdGNoZG9nIE1vZGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1lTQ19XRFRDX1dEU1I7ICAgICAvKiBXYXRjaGRvZyBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQxOVsgNSBdOyAgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBTWVNDX1NZU0NfVlJQTTsgICAgIC8qIFZvbHRhZ2UgUmVndWxhdG9yIFBvd2VyIE1vZGUgUmVnaXN0ZXIgKi8NCi19IEFUOTFTX1NZU0MsICogQVQ5MVBTX1NZU0M7DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBTeXN0ZW0gUGVyaXBoZXJhbHMNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19TWVNDIHsNCisJQVQ5MV9SRUcJIFNZU0NfQUlDX1NNUlszMl07IAkvLyBTb3VyY2UgTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1lTQ19BSUNfU1ZSWzMyXTsgCS8vIFNvdXJjZSBWZWN0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNZU0NfQUlDX0lWUjsgCS8vIElSUSBWZWN0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNZU0NfQUlDX0ZWUjsgCS8vIEZJUSBWZWN0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNZU0NfQUlDX0lTUjsgCS8vIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNZU0NfQUlDX0lQUjsgCS8vIEludGVycnVwdCBQZW5kaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX0FJQ19JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1lTQ19BSUNfQ0lTUjsgCS8vIENvcmUgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzJdOyAJLy8gDQorCUFUOTFfUkVHCSBTWVNDX0FJQ19JRUNSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBDb21tYW5kIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX0FJQ19JRENSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgQ29tbWFuZCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1lTQ19BSUNfSUNDUjsgCS8vIEludGVycnVwdCBDbGVhciBDb21tYW5kIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX0FJQ19JU0NSOyAJLy8gSW50ZXJydXB0IFNldCBDb21tYW5kIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX0FJQ19FT0lDUjsgCS8vIEVuZCBvZiBJbnRlcnJ1cHQgQ29tbWFuZCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1lTQ19BSUNfU1BVOyAJLy8gU3B1cmlvdXMgVmVjdG9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX0FJQ19EQ1I7IAkvLyBEZWJ1ZyBDb250cm9sIFJlZ2lzdGVyIChQcm90ZWN0KQ0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBTWVNDX0FJQ19GRkVSOyAJLy8gRmFzdCBGb3JjaW5nIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1lTQ19BSUNfRkZEUjsgCS8vIEZhc3QgRm9yY2luZyBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX0FJQ19GRlNSOyAJLy8gRmFzdCBGb3JjaW5nIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQyWzQ1XTsgCS8vIA0KKwlBVDkxX1JFRwkgU1lTQ19EQkdVX0NSOyAJLy8gQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1lTQ19EQkdVX01SOyAJLy8gTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1lTQ19EQkdVX0lFUjsgCS8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNZU0NfREJHVV9JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1lTQ19EQkdVX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX0RCR1VfQ1NSOyAJLy8gQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNZU0NfREJHVV9SSFI7IAkvLyBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX0RCR1VfVEhSOyAJLy8gVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1lTQ19EQkdVX0JSR1I7IAkvLyBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDNbN107IAkvLyANCisJQVQ5MV9SRUcJIFNZU0NfREJHVV9DMVI7IAkvLyBDaGlwIElEMSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1lTQ19EQkdVX0MyUjsgCS8vIENoaXAgSUQyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX0RCR1VfRk5UUjsgCS8vIEZvcmNlIE5UUlNUIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDRbNDVdOyAJLy8gDQorCUFUOTFfUkVHCSBTWVNDX0RCR1VfUlBSOyAJLy8gUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX0RCR1VfUkNSOyAJLy8gUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX0RCR1VfVFBSOyAJLy8gVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1lTQ19EQkdVX1RDUjsgCS8vIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNZU0NfREJHVV9STlBSOyAJLy8gUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNZU0NfREJHVV9STkNSOyAJLy8gUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNZU0NfREJHVV9UTlBSOyAJLy8gVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX0RCR1VfVE5DUjsgCS8vIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1lTQ19EQkdVX1BUQ1I7IAkvLyBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1lTQ19EQkdVX1BUU1I7IAkvLyBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDVbNTRdOyAJLy8gDQorCUFUOTFfUkVHCSBTWVNDX1BJT0FfUEVSOyAJLy8gUElPIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1lTQ19QSU9BX1BEUjsgCS8vIFBJTyBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX1BJT0FfUFNSOyAJLy8gUElPIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQ2WzFdOyAJLy8gDQorCUFUOTFfUkVHCSBTWVNDX1BJT0FfT0VSOyAJLy8gT3V0cHV0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1lTQ19QSU9BX09EUjsgCS8vIE91dHB1dCBEaXNhYmxlIFJlZ2lzdGVycg0KKwlBVDkxX1JFRwkgU1lTQ19QSU9BX09TUjsgCS8vIE91dHB1dCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkN1sxXTsgCS8vIA0KKwlBVDkxX1JFRwkgU1lTQ19QSU9BX0lGRVI7IAkvLyBJbnB1dCBGaWx0ZXIgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX1BJT0FfSUZEUjsgCS8vIElucHV0IEZpbHRlciBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX1BJT0FfSUZTUjsgCS8vIElucHV0IEZpbHRlciBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkOFsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgU1lTQ19QSU9BX1NPRFI7IAkvLyBTZXQgT3V0cHV0IERhdGEgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNZU0NfUElPQV9DT0RSOyAJLy8gQ2xlYXIgT3V0cHV0IERhdGEgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNZU0NfUElPQV9PRFNSOyAJLy8gT3V0cHV0IERhdGEgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX1BJT0FfUERTUjsgCS8vIFBpbiBEYXRhIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1lTQ19QSU9BX0lFUjsgCS8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNZU0NfUElPQV9JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1lTQ19QSU9BX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX1BJT0FfSVNSOyAJLy8gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1lTQ19QSU9BX01ERVI7IAkvLyBNdWx0aS1kcml2ZXIgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX1BJT0FfTUREUjsgCS8vIE11bHRpLWRyaXZlciBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX1BJT0FfTURTUjsgCS8vIE11bHRpLWRyaXZlciBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkOVsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgU1lTQ19QSU9BX1BQVURSOyAJLy8gUHVsbC11cCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX1BJT0FfUFBVRVI7IAkvLyBQdWxsLXVwIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1lTQ19QSU9BX1BQVVNSOyAJLy8gUGFkIFB1bGwtdXAgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDEwWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBTWVNDX1BJT0FfQVNSOyAJLy8gU2VsZWN0IEEgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNZU0NfUElPQV9CU1I7IAkvLyBTZWxlY3QgQiBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1lTQ19QSU9BX0FCU1I7IAkvLyBBQiBTZWxlY3QgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDExWzldOyAJLy8gDQorCUFUOTFfUkVHCSBTWVNDX1BJT0FfT1dFUjsgCS8vIE91dHB1dCBXcml0ZSBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNZU0NfUElPQV9PV0RSOyAJLy8gT3V0cHV0IFdyaXRlIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNZU0NfUElPQV9PV1NSOyAJLy8gT3V0cHV0IFdyaXRlIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxMls0NjldOyAJLy8gDQorCUFUOTFfUkVHCSBTWVNDX1BNQ19TQ0VSOyAJLy8gU3lzdGVtIENsb2NrIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1lTQ19QTUNfU0NEUjsgCS8vIFN5c3RlbSBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX1BNQ19TQ1NSOyAJLy8gU3lzdGVtIENsb2NrIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxM1sxXTsgCS8vIA0KKwlBVDkxX1JFRwkgU1lTQ19QTUNfUENFUjsgCS8vIFBlcmlwaGVyYWwgQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX1BNQ19QQ0RSOyAJLy8gUGVyaXBoZXJhbCBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX1BNQ19QQ1NSOyAJLy8gUGVyaXBoZXJhbCBDbG9jayBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMTRbMV07IAkvLyANCisJQVQ5MV9SRUcJIFNZU0NfUE1DX01PUjsgCS8vIE1haW4gT3NjaWxsYXRvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1lTQ19QTUNfTUNGUjsgCS8vIE1haW4gQ2xvY2sgIEZyZXF1ZW5jeSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxNVsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgU1lTQ19QTUNfUExMUjsgCS8vIFBMTCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1lTQ19QTUNfTUNLUjsgCS8vIE1hc3RlciBDbG9jayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxNlszXTsgCS8vIA0KKwlBVDkxX1JFRwkgU1lTQ19QTUNfUENLUls4XTsgCS8vIFByb2dyYW1tYWJsZSBDbG9jayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1lTQ19QTUNfSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1lTQ19QTUNfSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNZU0NfUE1DX1NSOyAJLy8gU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX1BNQ19JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxN1szNl07IAkvLyANCisJQVQ5MV9SRUcJIFNZU0NfUlNUQ19SQ1I7IAkvLyBSZXNldCBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX1JTVENfUlNSOyAJLy8gUmVzZXQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX1JTVENfUk1SOyAJLy8gUmVzZXQgTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxOFs1XTsgCS8vIA0KKwlBVDkxX1JFRwkgU1lTQ19SVFRDX1JUTVI7IAkvLyBSZWFsLXRpbWUgTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1lTQ19SVFRDX1JUQVI7IAkvLyBSZWFsLXRpbWUgQWxhcm0gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNZU0NfUlRUQ19SVFZSOyAJLy8gUmVhbC10aW1lIFZhbHVlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX1JUVENfUlRTUjsgCS8vIFJlYWwtdGltZSBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNZU0NfUElUQ19QSU1SOyAJLy8gUGVyaW9kIEludGVydmFsIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNZU0NfUElUQ19QSVNSOyAJLy8gUGVyaW9kIEludGVydmFsIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1lTQ19QSVRDX1BJVlI7IAkvLyBQZXJpb2QgSW50ZXJ2YWwgVmFsdWUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNZU0NfUElUQ19QSUlSOyAJLy8gUGVyaW9kIEludGVydmFsIEltYWdlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTWVNDX1dEVENfV0RDUjsgCS8vIFdhdGNoZG9nIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNZU0NfV0RUQ19XRE1SOyAJLy8gV2F0Y2hkb2cgTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1lTQ19XRFRDX1dEU1I7IAkvLyBXYXRjaGRvZyBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMTlbNV07IAkvLyANCisJQVQ5MV9SRUcJIFNZU0NfU1lTQ19WUlBNOyAJLy8gVm9sdGFnZSBSZWd1bGF0b3IgUG93ZXIgTW9kZSBSZWdpc3Rlcg0KK30gQVQ5MVNfU1lTQywgKkFUOTFQU19TWVNDOw0KIA0KLS8qIC0tLS0tLS0tIFZSUE0gOiAoU1lTQyBPZmZzZXQ6IDB4ZDYwKSBWb2x0YWdlIFJlZ3VsYXRvciBQb3dlciBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19TWVNDX1BTVERCWSAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAvKiAoU1lTQykgVm9sdGFnZSBSZWd1bGF0b3IgUG93ZXIgTW9kZSAqLw0KKy8vIC0tLS0tLS0tIFZSUE0gOiAoU1lTQyBPZmZzZXQ6IDB4ZDYwKSBWb2x0YWdlIFJlZ3VsYXRvciBQb3dlciBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19QU1REQlkgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChTWVNDKSBWb2x0YWdlIFJlZ3VsYXRvciBQb3dlciBNb2RlDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotdHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX0FJQw0KLXsNCi0gICAgQVQ5MV9SRUcgQUlDX1NNUlsgMzIgXTsgIC8qIFNvdXJjZSBNb2RlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFJQ19TVlJbIDMyIF07ICAvKiBTb3VyY2UgVmVjdG9yIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFJQ19JVlI7ICAgICAgICAvKiBJUlEgVmVjdG9yIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFJQ19GVlI7ICAgICAgICAvKiBGSVEgVmVjdG9yIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFJQ19JU1I7ICAgICAgICAvKiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFJQ19JUFI7ICAgICAgICAvKiBJbnRlcnJ1cHQgUGVuZGluZyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBSUNfSU1SOyAgICAgICAgLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUlDX0NJU1I7ICAgICAgIC8qIENvcmUgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDBbIDIgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgQUlDX0lFQ1I7ICAgICAgIC8qIEludGVycnVwdCBFbmFibGUgQ29tbWFuZCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBSUNfSURDUjsgICAgICAgLyogSW50ZXJydXB0IERpc2FibGUgQ29tbWFuZCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBSUNfSUNDUjsgICAgICAgLyogSW50ZXJydXB0IENsZWFyIENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUlDX0lTQ1I7ICAgICAgIC8qIEludGVycnVwdCBTZXQgQ29tbWFuZCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBSUNfRU9JQ1I7ICAgICAgLyogRW5kIG9mIEludGVycnVwdCBDb21tYW5kIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFJQ19TUFU7ICAgICAgICAvKiBTcHVyaW91cyBWZWN0b3IgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUlDX0RDUjsgICAgICAgIC8qIERlYnVnIENvbnRyb2wgUmVnaXN0ZXIgKFByb3RlY3QpICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMVsgMSBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBBSUNfRkZFUjsgICAgICAgLyogRmFzdCBGb3JjaW5nIEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBSUNfRkZEUjsgICAgICAgLyogRmFzdCBGb3JjaW5nIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUlDX0ZGU1I7ICAgICAgIC8qIEZhc3QgRm9yY2luZyBTdGF0dXMgUmVnaXN0ZXIgKi8NCi19IEFUOTFTX0FJQywgKiBBVDkxUFNfQUlDOw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXINCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19BSUMgew0KKwlBVDkxX1JFRwkgQUlDX1NNUlszMl07IAkvLyBTb3VyY2UgTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX1NWUlszMl07IAkvLyBTb3VyY2UgVmVjdG9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfSVZSOyAJLy8gSVJRIFZlY3RvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0ZWUjsgCS8vIEZJUSBWZWN0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19JU1I7IAkvLyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfSVBSOyAJLy8gSW50ZXJydXB0IFBlbmRpbmcgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0NJU1I7IAkvLyBDb3JlIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFsyXTsgCS8vIA0KKwlBVDkxX1JFRwkgQUlDX0lFQ1I7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIENvbW1hbmQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19JRENSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgQ29tbWFuZCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0lDQ1I7IAkvLyBJbnRlcnJ1cHQgQ2xlYXIgQ29tbWFuZCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0lTQ1I7IAkvLyBJbnRlcnJ1cHQgU2V0IENvbW1hbmQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19FT0lDUjsgCS8vIEVuZCBvZiBJbnRlcnJ1cHQgQ29tbWFuZCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX1NQVTsgCS8vIFNwdXJpb3VzIFZlY3RvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0RDUjsgCS8vIERlYnVnIENvbnRyb2wgUmVnaXN0ZXIgKFByb3RlY3QpDQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbMV07IAkvLyANCisJQVQ5MV9SRUcJIEFJQ19GRkVSOyAJLy8gRmFzdCBGb3JjaW5nIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0ZGRFI7IAkvLyBGYXN0IEZvcmNpbmcgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0ZGU1I7IAkvLyBGYXN0IEZvcmNpbmcgU3RhdHVzIFJlZ2lzdGVyDQorfSBBVDkxU19BSUMsICpBVDkxUFNfQUlDOw0KIA0KLS8qIC0tLS0tLS0tIEFJQ19TTVIgOiAoQUlDIE9mZnNldDogMHgwKSBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19BSUNfUFJJT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg3IDw8IDAgKSAvKiAoQUlDKSBQcmlvcml0eSBMZXZlbCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FJQ19QUklPUl9MT1dFU1QgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCApICAgICAgLyogKEFJQykgTG93ZXN0IHByaW9yaXR5IGxldmVsICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUlDX1BSSU9SX0hJR0hFU1QgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg3ICkgICAgICAvKiAoQUlDKSBIaWdoZXN0IHByaW9yaXR5IGxldmVsICovDQotI2RlZmluZSBBVDkxQ19BSUNfU1JDVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDUgKSAvKiAoQUlDKSBJbnRlcnJ1cHQgU291cmNlIFR5cGUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BSUNfU1JDVFlQRV9JTlRfTEVWRUxfU0VOU0lUSVZFICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgNSApIC8qIChBSUMpIEludGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBMZXZlbCBTZW5zaXRpdmUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BSUNfU1JDVFlQRV9JTlRfRURHRV9UUklHR0VSRUQgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNSApIC8qIChBSUMpIEludGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBFZGdlIHRyaWdnZXJlZCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FJQ19TUkNUWVBFX0VYVF9ISUdIX0xFVkVMICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCA1ICkgLyogKEFJQykgRXh0ZXJuYWwgU291cmNlcyBDb2RlIExhYmVsIEhpZ2gtbGV2ZWwgU2Vuc2l0aXZlICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUlDX1NSQ1RZUEVfRVhUX1BPU0lUSVZFX0VER0UgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDUgKSAvKiAoQUlDKSBFeHRlcm5hbCBTb3VyY2VzIENvZGUgTGFiZWwgUG9zaXRpdmUgRWRnZSB0cmlnZ2VyZWQgKi8NCi0vKiAtLS0tLS0tLSBBSUNfQ0lTUiA6IChBSUMgT2Zmc2V0OiAweDExNCkgQUlDIENvcmUgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX05GSVEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgLyogKEFJQykgTkZJUSBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19OSVJRICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApIC8qIChBSUMpIE5JUlEgU3RhdHVzICovDQotLyogLS0tLS0tLS0gQUlDX0RDUiA6IChBSUMgT2Zmc2V0OiAweDEzOCkgQUlDIERlYnVnIENvbnRyb2wgUmVnaXN0ZXIgKFByb3RlY3QpIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19BSUNfRENSX1BST1QgICAgICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAvKiAoQUlDKSBQcm90ZWN0aW9uIE1vZGUgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19EQ1JfR01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApIC8qIChBSUMpIEdlbmVyYWwgTWFzayAqLw0KKy8vIC0tLS0tLS0tIEFJQ19TTVIgOiAoQUlDIE9mZnNldDogMHgwKSBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQUlDX1BSSU9SICAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgIDApIC8vIChBSUMpIFByaW9yaXR5IExldmVsDQorI2RlZmluZSAJQVQ5MUNfQUlDX1BSSU9SX0xPV0VTVCAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDApIC8vIChBSUMpIExvd2VzdCBwcmlvcml0eSBsZXZlbA0KKyNkZWZpbmUgCUFUOTFDX0FJQ19QUklPUl9ISUdIRVNUICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3KSAvLyAoQUlDKSBIaWdoZXN0IHByaW9yaXR5IGxldmVsDQorI2RlZmluZSBBVDkxQ19BSUNfU1JDVFlQRSAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgNSkgLy8gKEFJQykgSW50ZXJydXB0IFNvdXJjZSBUeXBlDQorI2RlZmluZSAJQVQ5MUNfQUlDX1NSQ1RZUEVfSU5UX0xFVkVMX1NFTlNJVElWRSAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgNSkgLy8gKEFJQykgSW50ZXJuYWwgU291cmNlcyBDb2RlIExhYmVsIExldmVsIFNlbnNpdGl2ZQ0KKyNkZWZpbmUgCUFUOTFDX0FJQ19TUkNUWVBFX0lOVF9FREdFX1RSSUdHRVJFRCAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChBSUMpIEludGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBFZGdlIHRyaWdnZXJlZA0KKyNkZWZpbmUgCUFUOTFDX0FJQ19TUkNUWVBFX0VYVF9ISUdIX0xFVkVMICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDUpIC8vIChBSUMpIEV4dGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBIaWdoLWxldmVsIFNlbnNpdGl2ZQ0KKyNkZWZpbmUgCUFUOTFDX0FJQ19TUkNUWVBFX0VYVF9QT1NJVElWRV9FREdFICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDUpIC8vIChBSUMpIEV4dGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBQb3NpdGl2ZSBFZGdlIHRyaWdnZXJlZA0KKy8vIC0tLS0tLS0tIEFJQ19DSVNSIDogKEFJQyBPZmZzZXQ6IDB4MTE0KSBBSUMgQ29yZSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQUlDX05GSVEgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChBSUMpIE5GSVEgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19BSUNfTklSUSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKEFJQykgTklSUSBTdGF0dXMNCisvLyAtLS0tLS0tLSBBSUNfRENSIDogKEFJQyBPZmZzZXQ6IDB4MTM4KSBBSUMgRGVidWcgQ29udHJvbCBSZWdpc3RlciAoUHJvdGVjdCkgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BSUNfRENSX1BST1QgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKEFJQykgUHJvdGVjdGlvbiBNb2RlDQorI2RlZmluZSBBVDkxQ19BSUNfRENSX0dNU0sgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKEFJQykgR2VuZXJhbCBNYXNrDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBEZWJ1ZyBVbml0ICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfREJHVQ0KLXsNCi0gICAgQVQ5MV9SRUcgREJHVV9DUjsgICAgICAgICAvKiBDb250cm9sIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfTVI7ICAgICAgICAgLyogTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX0lFUjsgICAgICAgIC8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9JRFI7ICAgICAgICAvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX0lNUjsgICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfQ1NSOyAgICAgICAgLyogQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9SSFI7ICAgICAgICAvKiBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfVEhSOyAgICAgICAgLyogVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX0JSR1I7ICAgICAgIC8qIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQwWyA3IF07ICAvKiAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX0MxUjsgICAgICAgIC8qIENoaXAgSUQxIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfQzJSOyAgICAgICAgLyogQ2hpcCBJRDIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9GTlRSOyAgICAgICAvKiBGb3JjZSBOVFJTVCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDFbIDQ1IF07IC8qICovDQotICAgIEFUOTFfUkVHIERCR1VfUlBSOyAgICAgICAgLyogUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfUkNSOyAgICAgICAgLyogUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfVFBSOyAgICAgICAgLyogVHJhbnNtaXQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX1RDUjsgICAgICAgIC8qIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9STlBSOyAgICAgICAvKiBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX1JOQ1I7ICAgICAgIC8qIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfVE5QUjsgICAgICAgLyogVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfVE5DUjsgICAgICAgLyogVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfUFRDUjsgICAgICAgLyogUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9QVFNSOyAgICAgICAvKiBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotfSBBVDkxU19EQkdVLCAqIEFUOTFQU19EQkdVOw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgRGVidWcgVW5pdA0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX0RCR1Ugew0KKwlBVDkxX1JFRwkgREJHVV9DUjsgCS8vIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfTVI7IAkvLyBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX0lFUjsgCS8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfQ1NSOyAJLy8gQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfUkhSOyAJLy8gUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9USFI7IAkvLyBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX0JSR1I7IAkvLyBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbN107IAkvLyANCisJQVQ5MV9SRUcJIERCR1VfQzFSOyAJLy8gQ2hpcCBJRDEgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfQzJSOyAJLy8gQ2hpcCBJRDIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfRk5UUjsgCS8vIEZvcmNlIE5UUlNUIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbNDVdOyAJLy8gDQorCUFUOTFfUkVHCSBEQkdVX1JQUjsgCS8vIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9SQ1I7IAkvLyBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfVFBSOyAJLy8gVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9UQ1I7IAkvLyBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1JOUFI7IAkvLyBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9STkNSOyAJLy8gUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfVE5QUjsgCS8vIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9UTkNSOyAJLy8gVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1BUQ1I7IAkvLyBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9QVFNSOyAJLy8gUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KK30gQVQ5MVNfREJHVSwgKkFUOTFQU19EQkdVOw0KIA0KLS8qIC0tLS0tLS0tIERCR1VfQ1IgOiAoREJHVSBPZmZzZXQ6IDB4MCkgRGVidWcgVW5pdCBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19VU19SU1RSWCAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyICkgIC8qIChEQkdVKSBSZXNldCBSZWNlaXZlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfUlNUVFggICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMyApICAvKiAoREJHVSkgUmVzZXQgVHJhbnNtaXR0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1JYRU4gICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDQgKSAgLyogKERCR1UpIFJlY2VpdmVyIEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfUlhESVMgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNSApICAvKiAoREJHVSkgUmVjZWl2ZXIgRGlzYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfVFhFTiAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNiApICAvKiAoREJHVSkgVHJhbnNtaXR0ZXIgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19VU19UWERJUyAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA3ICkgIC8qIChEQkdVKSBUcmFuc21pdHRlciBEaXNhYmxlICovDQotLyogLS0tLS0tLS0gREJHVV9NUiA6IChEQkdVIE9mZnNldDogMHg0KSBEZWJ1ZyBVbml0IE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1BBUiAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg3IDw8IDkgKSAgLyogKERCR1UpIFBhcml0eSB0eXBlICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfUEFSX0VWRU4gICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCA5ICkgIC8qIChEQkdVKSBFdmVuIFBhcml0eSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX1BBUl9PREQgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOSApICAvKiAoREJHVSkgT2RkIFBhcml0eSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX1BBUl9TUEFDRSAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgOSApICAvKiAoREJHVSkgUGFyaXR5IGZvcmNlZCB0byAwIChTcGFjZSkgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19QQVJfTUFSSyAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDkgKSAgLyogKERCR1UpIFBhcml0eSBmb3JjZWQgdG8gMSAoTWFyaykgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19QQVJfTk9ORSAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg0IDw8IDkgKSAgLyogKERCR1UpIE5vIFBhcml0eSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX1BBUl9NVUxUSV9EUk9QICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDYgPDwgOSApICAvKiAoREJHVSkgTXVsdGktZHJvcCBtb2RlICovDQotI2RlZmluZSBBVDkxQ19VU19DSE1PREUgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAxNCApIC8qIChEQkdVKSBDaGFubmVsIE1vZGUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19DSE1PREVfTk9STUFMICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDE0ICkgLyogKERCR1UpIE5vcm1hbCBNb2RlOiBUaGUgVVNBUlQgY2hhbm5lbCBvcGVyYXRlcyBhcyBhbiBSWC9UWCBVU0FSVC4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19DSE1PREVfQVVUTyAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE0ICkgLyogKERCR1UpIEF1dG9tYXRpYyBFY2hvOiBSZWNlaXZlciBEYXRhIElucHV0IGlzIGNvbm5lY3RlZCB0byB0aGUgVFhEIHBpbi4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19DSE1PREVfTE9DQUwgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDE0ICkgLyogKERCR1UpIExvY2FsIExvb3BiYWNrOiBUcmFuc21pdHRlciBPdXRwdXQgU2lnbmFsIGlzIGNvbm5lY3RlZCB0byBSZWNlaXZlciBJbnB1dCBTaWduYWwuICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfQ0hNT0RFX1JFTU9URSAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAxNCApIC8qIChEQkdVKSBSZW1vdGUgTG9vcGJhY2s6IFJYRCBwaW4gaXMgaW50ZXJuYWxseSBjb25uZWN0ZWQgdG8gVFhEIHBpbi4gKi8NCi0vKiAtLS0tLS0tLSBEQkdVX0lFUiA6IChEQkdVIE9mZnNldDogMHg4KSBEZWJ1ZyBVbml0IEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1JYUkRZICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgLyogKERCR1UpIFJYUkRZIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfVFhSRFkgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAvKiAoREJHVSkgVFhSRFkgSW50ZXJydXB0ICovDQotI2RlZmluZSBBVDkxQ19VU19FTkRSWCAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzICkgIC8qIChEQkdVKSBFbmQgb2YgUmVjZWl2ZSBUcmFuc2ZlciBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX0VORFRYICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDQgKSAgLyogKERCR1UpIEVuZCBvZiBUcmFuc21pdCBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX09WUkUgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDUgKSAgLyogKERCR1UpIE92ZXJydW4gSW50ZXJydXB0ICovDQotI2RlZmluZSBBVDkxQ19VU19GUkFNRSAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA2ICkgIC8qIChEQkdVKSBGcmFtaW5nIEVycm9yIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfUEFSRSAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNyApICAvKiAoREJHVSkgUGFyaXR5IEVycm9yIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfVFhFTVBUWSAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOSApICAvKiAoREJHVSkgVFhFTVBUWSBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1RYQlVGRSAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDExICkgLyogKERCR1UpIFRYQlVGRSBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1JYQlVGRiAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEyICkgLyogKERCR1UpIFJYQlVGRiBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX0NPTU1fVFggICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDMwICkgLyogKERCR1UpIENPTU1fVFggSW50ZXJydXB0ICovDQotI2RlZmluZSBBVDkxQ19VU19DT01NX1JYICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzMSApIC8qIChEQkdVKSBDT01NX1JYIEludGVycnVwdCAqLw0KLS8qIC0tLS0tLS0tIERCR1VfSURSIDogKERCR1UgT2Zmc2V0OiAweGMpIERlYnVnIFVuaXQgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBEQkdVX0lNUiA6IChEQkdVIE9mZnNldDogMHgxMCkgRGVidWcgVW5pdCBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIERCR1VfQ1NSIDogKERCR1UgT2Zmc2V0OiAweDE0KSBEZWJ1ZyBVbml0IENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gREJHVV9GTlRSIDogKERCR1UgT2Zmc2V0OiAweDQ4KSBEZWJ1ZyBVbml0IEZPUkNFX05UUlNUIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19VU19GT1JDRV9OVFJTVCAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAvKiAoREJHVSkgRm9yY2UgTlRSU1QgaW4gSlRBRyAqLw0KKy8vIC0tLS0tLS0tIERCR1VfQ1IgOiAoREJHVSBPZmZzZXQ6IDB4MCkgRGVidWcgVW5pdCBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVVNfUlNUUlggICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChEQkdVKSBSZXNldCBSZWNlaXZlcg0KKyNkZWZpbmUgQVQ5MUNfVVNfUlNUVFggICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChEQkdVKSBSZXNldCBUcmFuc21pdHRlcg0KKyNkZWZpbmUgQVQ5MUNfVVNfUlhFTiAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChEQkdVKSBSZWNlaXZlciBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1VTX1JYRElTICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoREJHVSkgUmVjZWl2ZXIgRGlzYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfVFhFTiAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChEQkdVKSBUcmFuc21pdHRlciBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1VTX1RYRElTICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoREJHVSkgVHJhbnNtaXR0ZXIgRGlzYWJsZQ0KKy8vIC0tLS0tLS0tIERCR1VfTVIgOiAoREJHVSBPZmZzZXQ6IDB4NCkgRGVidWcgVW5pdCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVVNfUEFSICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgIDkpIC8vIChEQkdVKSBQYXJpdHkgdHlwZQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1BBUl9FVkVOICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA5KSAvLyAoREJHVSkgRXZlbiBQYXJpdHkNCisjZGVmaW5lIAlBVDkxQ19VU19QQVJfT0REICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLy8gKERCR1UpIE9kZCBQYXJpdHkNCisjZGVmaW5lIAlBVDkxQ19VU19QQVJfU1BBQ0UgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgOSkgLy8gKERCR1UpIFBhcml0eSBmb3JjZWQgdG8gMCAoU3BhY2UpDQorI2RlZmluZSAJQVQ5MUNfVVNfUEFSX01BUksgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDkpIC8vIChEQkdVKSBQYXJpdHkgZm9yY2VkIHRvIDEgKE1hcmspDQorI2RlZmluZSAJQVQ5MUNfVVNfUEFSX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDQgPDwgIDkpIC8vIChEQkdVKSBObyBQYXJpdHkNCisjZGVmaW5lIAlBVDkxQ19VU19QQVJfTVVMVElfRFJPUCAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NiA8PCAgOSkgLy8gKERCR1UpIE11bHRpLWRyb3AgbW9kZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfQ0hNT0RFICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTQpIC8vIChEQkdVKSBDaGFubmVsIE1vZGUNCisjZGVmaW5lIAlBVDkxQ19VU19DSE1PREVfTk9STUFMICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAxNCkgLy8gKERCR1UpIE5vcm1hbCBNb2RlOiBUaGUgVVNBUlQgY2hhbm5lbCBvcGVyYXRlcyBhcyBhbiBSWC9UWCBVU0FSVC4NCisjZGVmaW5lIAlBVDkxQ19VU19DSE1PREVfQVVUTyAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNCkgLy8gKERCR1UpIEF1dG9tYXRpYyBFY2hvOiBSZWNlaXZlciBEYXRhIElucHV0IGlzIGNvbm5lY3RlZCB0byB0aGUgVFhEIHBpbi4NCisjZGVmaW5lIAlBVDkxQ19VU19DSE1PREVfTE9DQUwgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxNCkgLy8gKERCR1UpIExvY2FsIExvb3BiYWNrOiBUcmFuc21pdHRlciBPdXRwdXQgU2lnbmFsIGlzIGNvbm5lY3RlZCB0byBSZWNlaXZlciBJbnB1dCBTaWduYWwuDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0hNT0RFX1JFTU9URSAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTQpIC8vIChEQkdVKSBSZW1vdGUgTG9vcGJhY2s6IFJYRCBwaW4gaXMgaW50ZXJuYWxseSBjb25uZWN0ZWQgdG8gVFhEIHBpbi4NCisvLyAtLS0tLS0tLSBEQkdVX0lFUiA6IChEQkdVIE9mZnNldDogMHg4KSBEZWJ1ZyBVbml0IEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VU19SWFJEWSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKERCR1UpIFJYUkRZIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfVFhSRFkgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChEQkdVKSBUWFJEWSBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX0VORFJYICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoREJHVSkgRW5kIG9mIFJlY2VpdmUgVHJhbnNmZXIgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19FTkRUWCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKERCR1UpIEVuZCBvZiBUcmFuc21pdCBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX09WUkUgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoREJHVSkgT3ZlcnJ1biBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX0ZSQU1FICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoREJHVSkgRnJhbWluZyBFcnJvciBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX1BBUkUgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoREJHVSkgUGFyaXR5IEVycm9yIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfVFhFTVBUWSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChEQkdVKSBUWEVNUFRZIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfVFhCVUZFICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTEpIC8vIChEQkdVKSBUWEJVRkUgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19SWEJVRkYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLy8gKERCR1UpIFJYQlVGRiBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX0NPTU1fVFggICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDMwKSAvLyAoREJHVSkgQ09NTV9UWCBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX0NPTU1fUlggICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDMxKSAvLyAoREJHVSkgQ09NTV9SWCBJbnRlcnJ1cHQNCisvLyAtLS0tLS0tLSBEQkdVX0lEUiA6IChEQkdVIE9mZnNldDogMHhjKSBEZWJ1ZyBVbml0IEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIERCR1VfSU1SIDogKERCR1UgT2Zmc2V0OiAweDEwKSBEZWJ1ZyBVbml0IEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIERCR1VfQ1NSIDogKERCR1UgT2Zmc2V0OiAweDE0KSBEZWJ1ZyBVbml0IENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIERCR1VfRk5UUiA6IChEQkdVIE9mZnNldDogMHg0OCkgRGVidWcgVW5pdCBGT1JDRV9OVFJTVCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VTX0ZPUkNFX05UUlNUICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoREJHVSkgRm9yY2UgTlRSU1QgaW4gSlRBRw0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUGVyaXBoZXJhbCBEYXRhIENvbnRyb2xsZXIgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLXR5cGVkZWYgc3RydWN0IF9BVDkxU19QREMNCi17DQotICAgIEFUOTFfUkVHIFBEQ19SUFI7ICAvKiBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUERDX1JDUjsgIC8qIFJlY2VpdmUgQ291bnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQRENfVFBSOyAgLyogVHJhbnNtaXQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQRENfVENSOyAgLyogVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQRENfUk5QUjsgLyogUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUERDX1JOQ1I7IC8qIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBEQ19UTlBSOyAvKiBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUERDX1ROQ1I7IC8qIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQRENfUFRDUjsgLyogUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUERDX1BUU1I7IC8qIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi19IEFUOTFTX1BEQywgKiBBVDkxUFNfUERDOw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUGVyaXBoZXJhbCBEYXRhIENvbnRyb2xsZXINCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19QREMgew0KKwlBVDkxX1JFRwkgUERDX1JQUjsgCS8vIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUERDX1JDUjsgCS8vIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUERDX1RQUjsgCS8vIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBEQ19UQ1I7IAkvLyBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQRENfUk5QUjsgCS8vIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQRENfUk5DUjsgCS8vIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQRENfVE5QUjsgCS8vIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUERDX1ROQ1I7IAkvLyBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBEQ19QVENSOyAJLy8gUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBEQ19QVFNSOyAJLy8gUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KK30gQVQ5MVNfUERDLCAqQVQ5MVBTX1BEQzsNCiANCi0vKiAtLS0tLS0tLSBQRENfUFRDUiA6IChQREMgT2Zmc2V0OiAweDIwKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfUERDX1JYVEVOICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAvKiAoUERDKSBSZWNlaXZlciBUcmFuc2ZlciBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1BEQ19SWFRESVMgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgLyogKFBEQykgUmVjZWl2ZXIgVHJhbnNmZXIgRGlzYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfUERDX1RYVEVOICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDggKSAvKiAoUERDKSBUcmFuc21pdHRlciBUcmFuc2ZlciBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1BEQ19UWFRESVMgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA5ICkgLyogKFBEQykgVHJhbnNtaXR0ZXIgVHJhbnNmZXIgRGlzYWJsZSAqLw0KLS8qIC0tLS0tLS0tIFBEQ19QVFNSIDogKFBEQyBPZmZzZXQ6IDB4MjQpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCisvLyAtLS0tLS0tLSBQRENfUFRDUiA6IChQREMgT2Zmc2V0OiAweDIwKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BEQ19SWFRFTiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoUERDKSBSZWNlaXZlciBUcmFuc2ZlciBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1BEQ19SWFRESVMgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoUERDKSBSZWNlaXZlciBUcmFuc2ZlciBEaXNhYmxlDQorI2RlZmluZSBBVDkxQ19QRENfVFhURU4gICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFBEQykgVHJhbnNtaXR0ZXIgVHJhbnNmZXIgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19QRENfVFhURElTICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLy8gKFBEQykgVHJhbnNtaXR0ZXIgVHJhbnNmZXIgRGlzYWJsZQ0KKy8vIC0tLS0tLS0tIFBEQ19QVFNSIDogKFBEQyBPZmZzZXQ6IDB4MjQpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQYXJhbGxlbCBJbnB1dCBPdXRwdXQgQ29udHJvbGVyICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfUElPDQotew0KLSAgICBBVDkxX1JFRyBQSU9fUEVSOyAgICAgICAgLyogUElPIEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9fUERSOyAgICAgICAgLyogUElPIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPX1BTUjsgICAgICAgIC8qIFBJTyBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQwWyAxIF07IC8qICovDQotICAgIEFUOTFfUkVHIFBJT19PRVI7ICAgICAgICAvKiBPdXRwdXQgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT19PRFI7ICAgICAgICAvKiBPdXRwdXQgRGlzYWJsZSBSZWdpc3RlcnIgKi8NCi0gICAgQVQ5MV9SRUcgUElPX09TUjsgICAgICAgIC8qIE91dHB1dCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQxWyAxIF07IC8qICovDQotICAgIEFUOTFfUkVHIFBJT19JRkVSOyAgICAgICAvKiBJbnB1dCBGaWx0ZXIgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT19JRkRSOyAgICAgICAvKiBJbnB1dCBGaWx0ZXIgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9fSUZTUjsgICAgICAgLyogSW5wdXQgRmlsdGVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDJbIDEgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgUElPX1NPRFI7ICAgICAgIC8qIFNldCBPdXRwdXQgRGF0YSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9fQ09EUjsgICAgICAgLyogQ2xlYXIgT3V0cHV0IERhdGEgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPX09EU1I7ICAgICAgIC8qIE91dHB1dCBEYXRhIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9fUERTUjsgICAgICAgLyogUGluIERhdGEgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT19JRVI7ICAgICAgICAvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT19JRFI7ICAgICAgICAvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9fSU1SOyAgICAgICAgLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPX0lTUjsgICAgICAgIC8qIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPX01ERVI7ICAgICAgIC8qIE11bHRpLWRyaXZlciBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPX01ERFI7ICAgICAgIC8qIE11bHRpLWRyaXZlciBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT19NRFNSOyAgICAgICAvKiBNdWx0aS1kcml2ZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkM1sgMSBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBQSU9fUFBVRFI7ICAgICAgLyogUHVsbC11cCBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT19QUFVFUjsgICAgICAvKiBQdWxsLXVwIEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9fUFBVU1I7ICAgICAgLyogUGFkIFB1bGwtdXAgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkNFsgMSBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBQSU9fQVNSOyAgICAgICAgLyogU2VsZWN0IEEgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPX0JTUjsgICAgICAgIC8qIFNlbGVjdCBCIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT19BQlNSOyAgICAgICAvKiBBQiBTZWxlY3QgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkNVsgOSBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBQSU9fT1dFUjsgICAgICAgLyogT3V0cHV0IFdyaXRlIEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9fT1dEUjsgICAgICAgLyogT3V0cHV0IFdyaXRlIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPX09XU1I7ICAgICAgIC8qIE91dHB1dCBXcml0ZSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi19IEFUOTFTX1BJTywgKiBBVDkxUFNfUElPOw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUGFyYWxsZWwgSW5wdXQgT3V0cHV0IENvbnRyb2xlcg0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1BJTyB7DQorCUFUOTFfUkVHCSBQSU9fUEVSOyAJLy8gUElPIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX1BEUjsgCS8vIFBJTyBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fUFNSOyAJLy8gUElPIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9fT0VSOyAJLy8gT3V0cHV0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX09EUjsgCS8vIE91dHB1dCBEaXNhYmxlIFJlZ2lzdGVycg0KKwlBVDkxX1JFRwkgUElPX09TUjsgCS8vIE91dHB1dCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMVsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUElPX0lGRVI7IAkvLyBJbnB1dCBGaWx0ZXIgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fSUZEUjsgCS8vIElucHV0IEZpbHRlciBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fSUZTUjsgCS8vIElucHV0IEZpbHRlciBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMlsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUElPX1NPRFI7IAkvLyBTZXQgT3V0cHV0IERhdGEgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19DT0RSOyAJLy8gQ2xlYXIgT3V0cHV0IERhdGEgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19PRFNSOyAJLy8gT3V0cHV0IERhdGEgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fUERTUjsgCS8vIFBpbiBEYXRhIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX0lFUjsgCS8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fSVNSOyAJLy8gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX01ERVI7IAkvLyBNdWx0aS1kcml2ZXIgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fTUREUjsgCS8vIE11bHRpLWRyaXZlciBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fTURTUjsgCS8vIE11bHRpLWRyaXZlciBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkM1sxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUElPX1BQVURSOyAJLy8gUHVsbC11cCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fUFBVRVI7IAkvLyBQdWxsLXVwIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX1BQVVNSOyAJLy8gUGFkIFB1bGwtdXAgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDRbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT19BU1I7IAkvLyBTZWxlY3QgQSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX0JTUjsgCS8vIFNlbGVjdCBCIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fQUJTUjsgCS8vIEFCIFNlbGVjdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkNVs5XTsgCS8vIA0KKwlBVDkxX1JFRwkgUElPX09XRVI7IAkvLyBPdXRwdXQgV3JpdGUgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fT1dEUjsgCS8vIE91dHB1dCBXcml0ZSBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fT1dTUjsgCS8vIE91dHB1dCBXcml0ZSBTdGF0dXMgUmVnaXN0ZXINCit9IEFUOTFTX1BJTywgKkFUOTFQU19QSU87DQogDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBDbG9jayBHZW5lcmF0b3IgQ29udHJvbGVyICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfQ0tHUg0KLXsNCi0gICAgQVQ5MV9SRUcgQ0tHUl9NT1I7ICAgICAgIC8qIE1haW4gT3NjaWxsYXRvciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBDS0dSX01DRlI7ICAgICAgLyogTWFpbiBDbG9jayAgRnJlcXVlbmN5IFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMFsgMSBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBDS0dSX1BMTFI7ICAgICAgLyogUExMIFJlZ2lzdGVyICovDQotfSBBVDkxU19DS0dSLCAqIEFUOTFQU19DS0dSOw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQ2xvY2sgR2VuZXJhdG9yIENvbnRyb2xlcg0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX0NLR1Igew0KKwlBVDkxX1JFRwkgQ0tHUl9NT1I7IAkvLyBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIENLR1JfTUNGUjsgCS8vIE1haW4gQ2xvY2sgIEZyZXF1ZW5jeSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBDS0dSX1BMTFI7IAkvLyBQTEwgUmVnaXN0ZXINCit9IEFUOTFTX0NLR1IsICpBVDkxUFNfQ0tHUjsNCiANCi0vKiAtLS0tLS0tLSBDS0dSX01PUiA6IChDS0dSIE9mZnNldDogMHgwKSBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0NLR1JfTU9TQ0VOICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgICAgLyogKENLR1IpIE1haW4gT3NjaWxsYXRvciBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX0NLR1JfT1NDQllQQVNTICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgICAgLyogKENLR1IpIE1haW4gT3NjaWxsYXRvciBCeXBhc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0NLR1JfT1NDT1VOVCAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RkYgPDwgOCApICAgLyogKENLR1IpIE1haW4gT3NjaWxsYXRvciBTdGFydC11cCBUaW1lICovDQotLyogLS0tLS0tLS0gQ0tHUl9NQ0ZSIDogKENLR1IgT2Zmc2V0OiAweDQpIE1haW4gQ2xvY2sgRnJlcXVlbmN5IFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19DS0dSX01BSU5GICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGRkYgPDwgMCApIC8qIChDS0dSKSBNYWluIENsb2NrIEZyZXF1ZW5jeSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0tHUl9NQUlOUkRZICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE2ICkgICAvKiAoQ0tHUikgTWFpbiBDbG9jayBSZWFkeSAqLw0KLS8qIC0tLS0tLS0tIENLR1JfUExMUiA6IChDS0dSIE9mZnNldDogMHhjKSBQTEwgQiBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0tHUl9ESVYgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRiA8PCAwICkgICAvKiAoQ0tHUikgRGl2aWRlciBTZWxlY3RlZCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0NLR1JfRElWXzAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwICkgICAgICAgICAvKiAoQ0tHUikgRGl2aWRlciBvdXRwdXQgaXMgMCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0NLR1JfRElWX0JZUEFTUyAgICAoICggdW5zaWduZWQgaW50ICkgMHgxICkgICAgICAgICAvKiAoQ0tHUikgRGl2aWRlciBpcyBieXBhc3NlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0tHUl9QTExDT1VOVCAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzRiA8PCA4ICkgICAvKiAoQ0tHUikgUExMIENvdW50ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NLR1JfT1VUICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAxNCApICAgLyogKENLR1IpIFBMTCBPdXRwdXQgRnJlcXVlbmN5IFJhbmdlICovDQotI2RlZmluZSAgICAgQVQ5MUNfQ0tHUl9PVVRfMCAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMTQgKSAgIC8qIChDS0dSKSBQbGVhc2UgcmVmZXIgdG8gdGhlIFBMTCBkYXRhc2hlZXQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19DS0dSX09VVF8xICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNCApICAgLyogKENLR1IpIFBsZWFzZSByZWZlciB0byB0aGUgUExMIGRhdGFzaGVldCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0NLR1JfT1VUXzIgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDE0ICkgICAvKiAoQ0tHUikgUGxlYXNlIHJlZmVyIHRvIHRoZSBQTEwgZGF0YXNoZWV0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfQ0tHUl9PVVRfMyAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTQgKSAgIC8qIChDS0dSKSBQbGVhc2UgcmVmZXIgdG8gdGhlIFBMTCBkYXRhc2hlZXQgKi8NCi0jZGVmaW5lIEFUOTFDX0NLR1JfTVVMICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4N0ZGIDw8IDE2ICkgLyogKENLR1IpIFBMTCBNdWx0aXBsaWVyICovDQotI2RlZmluZSBBVDkxQ19DS0dSX1VTQkRJViAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMjggKSAgIC8qIChDS0dSKSBEaXZpZGVyIGZvciBVU0IgQ2xvY2tzICovDQotI2RlZmluZSAgICAgQVQ5MUNfQ0tHUl9VU0JESVZfMCAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMjggKSAgIC8qIChDS0dSKSBEaXZpZGVyIG91dHB1dCBpcyBQTEwgY2xvY2sgb3V0cHV0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfQ0tHUl9VU0JESVZfMSAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjggKSAgIC8qIChDS0dSKSBEaXZpZGVyIG91dHB1dCBpcyBQTEwgY2xvY2sgb3V0cHV0IGRpdmlkZWQgYnkgMiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0NLR1JfVVNCRElWXzIgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDI4ICkgICAvKiAoQ0tHUikgRGl2aWRlciBvdXRwdXQgaXMgUExMIGNsb2NrIG91dHB1dCBkaXZpZGVkIGJ5IDQgKi8NCisvLyAtLS0tLS0tLSBDS0dSX01PUiA6IChDS0dSIE9mZnNldDogMHgwKSBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DS0dSX01PU0NFTiAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKENLR1IpIE1haW4gT3NjaWxsYXRvciBFbmFibGUNCisjZGVmaW5lIEFUOTFDX0NLR1JfT1NDQllQQVNTICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoQ0tHUikgTWFpbiBPc2NpbGxhdG9yIEJ5cGFzcw0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9PU0NPVU5UICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8ICA4KSAvLyAoQ0tHUikgTWFpbiBPc2NpbGxhdG9yIFN0YXJ0LXVwIFRpbWUNCisvLyAtLS0tLS0tLSBDS0dSX01DRlIgOiAoQ0tHUiBPZmZzZXQ6IDB4NCkgTWFpbiBDbG9jayBGcmVxdWVuY3kgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DS0dSX01BSU5GICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGRiA8PCAgMCkgLy8gKENLR1IpIE1haW4gQ2xvY2sgRnJlcXVlbmN5DQorI2RlZmluZSBBVDkxQ19DS0dSX01BSU5SRFkgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKENLR1IpIE1haW4gQ2xvY2sgUmVhZHkNCisvLyAtLS0tLS0tLSBDS0dSX1BMTFIgOiAoQ0tHUiBPZmZzZXQ6IDB4YykgUExMIEIgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DS0dSX0RJViAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgIDApIC8vIChDS0dSKSBEaXZpZGVyIFNlbGVjdGVkDQorI2RlZmluZSAJQVQ5MUNfQ0tHUl9ESVZfMCAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCkgLy8gKENLR1IpIERpdmlkZXIgb3V0cHV0IGlzIDANCisjZGVmaW5lIAlBVDkxQ19DS0dSX0RJVl9CWVBBU1MgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxKSAvLyAoQ0tHUikgRGl2aWRlciBpcyBieXBhc3NlZA0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9QTExDT1VOVCAgICgodW5zaWduZWQgaW50KSAweDNGIDw8ICA4KSAvLyAoQ0tHUikgUExMIENvdW50ZXINCisjZGVmaW5lIEFUOTFDX0NLR1JfT1VUICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE0KSAvLyAoQ0tHUikgUExMIE91dHB1dCBGcmVxdWVuY3kgUmFuZ2UNCisjZGVmaW5lIAlBVDkxQ19DS0dSX09VVF8wICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDE0KSAvLyAoQ0tHUikgUGxlYXNlIHJlZmVyIHRvIHRoZSBQTEwgZGF0YXNoZWV0DQorI2RlZmluZSAJQVQ5MUNfQ0tHUl9PVVRfMSAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNCkgLy8gKENLR1IpIFBsZWFzZSByZWZlciB0byB0aGUgUExMIGRhdGFzaGVldA0KKyNkZWZpbmUgCUFUOTFDX0NLR1JfT1VUXzIgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMTQpIC8vIChDS0dSKSBQbGVhc2UgcmVmZXIgdG8gdGhlIFBMTCBkYXRhc2hlZXQNCisjZGVmaW5lIAlBVDkxQ19DS0dSX09VVF8zICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE0KSAvLyAoQ0tHUikgUGxlYXNlIHJlZmVyIHRvIHRoZSBQTEwgZGF0YXNoZWV0DQorI2RlZmluZSBBVDkxQ19DS0dSX01VTCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4N0ZGIDw8IDE2KSAvLyAoQ0tHUikgUExMIE11bHRpcGxpZXINCisjZGVmaW5lIEFUOTFDX0NLR1JfVVNCRElWICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDI4KSAvLyAoQ0tHUikgRGl2aWRlciBmb3IgVVNCIENsb2Nrcw0KKyNkZWZpbmUgCUFUOTFDX0NLR1JfVVNCRElWXzAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMjgpIC8vIChDS0dSKSBEaXZpZGVyIG91dHB1dCBpcyBQTEwgY2xvY2sgb3V0cHV0DQorI2RlZmluZSAJQVQ5MUNfQ0tHUl9VU0JESVZfMSAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyOCkgLy8gKENLR1IpIERpdmlkZXIgb3V0cHV0IGlzIFBMTCBjbG9jayBvdXRwdXQgZGl2aWRlZCBieSAyDQorI2RlZmluZSAJQVQ5MUNfQ0tHUl9VU0JESVZfMiAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAyOCkgLy8gKENLR1IpIERpdmlkZXIgb3V0cHV0IGlzIFBMTCBjbG9jayBvdXRwdXQgZGl2aWRlZCBieSA0DQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQb3dlciBNYW5hZ2VtZW50IENvbnRyb2xlciAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotdHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1BNQw0KLXsNCi0gICAgQVQ5MV9SRUcgUE1DX1NDRVI7ICAgICAgIC8qIFN5c3RlbSBDbG9jayBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUE1DX1NDRFI7ICAgICAgIC8qIFN5c3RlbSBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBNQ19TQ1NSOyAgICAgICAvKiBTeXN0ZW0gQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMFsgMSBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBQTUNfUENFUjsgICAgICAgLyogUGVyaXBoZXJhbCBDbG9jayBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUE1DX1BDRFI7ICAgICAgIC8qIFBlcmlwaGVyYWwgQ2xvY2sgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQTUNfUENTUjsgICAgICAgLyogUGVyaXBoZXJhbCBDbG9jayBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQxWyAxIF07IC8qICovDQotICAgIEFUOTFfUkVHIFBNQ19NT1I7ICAgICAgICAvKiBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUE1DX01DRlI7ICAgICAgIC8qIE1haW4gQ2xvY2sgIEZyZXF1ZW5jeSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDJbIDEgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgUE1DX1BMTFI7ICAgICAgIC8qIFBMTCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQTUNfTUNLUjsgICAgICAgLyogTWFzdGVyIENsb2NrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkM1sgMyBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBQTUNfUENLUlsgOCBdOyAgLyogUHJvZ3JhbW1hYmxlIENsb2NrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBNQ19JRVI7ICAgICAgICAvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBNQ19JRFI7ICAgICAgICAvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQTUNfU1I7ICAgICAgICAgLyogU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBNQ19JTVI7ICAgICAgICAvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLX0gQVQ5MVNfUE1DLCAqIEFUOTFQU19QTUM7DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQb3dlciBNYW5hZ2VtZW50IENvbnRyb2xlcg0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1BNQyB7DQorCUFUOTFfUkVHCSBQTUNfU0NFUjsgCS8vIFN5c3RlbSBDbG9jayBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19TQ0RSOyAJLy8gU3lzdGVtIENsb2NrIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19TQ1NSOyAJLy8gU3lzdGVtIENsb2NrIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQTUNfUENFUjsgCS8vIFBlcmlwaGVyYWwgQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfUENEUjsgCS8vIFBlcmlwaGVyYWwgQ2xvY2sgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUE1DX1BDU1I7IAkvLyBQZXJpcGhlcmFsIENsb2NrIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQTUNfTU9SOyAJLy8gTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfTUNGUjsgCS8vIE1haW4gQ2xvY2sgIEZyZXF1ZW5jeSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQyWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQTUNfUExMUjsgCS8vIFBMTCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUE1DX01DS1I7IAkvLyBNYXN0ZXIgQ2xvY2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkM1szXTsgCS8vIA0KKwlBVDkxX1JFRwkgUE1DX1BDS1JbOF07IAkvLyBQcm9ncmFtbWFibGUgQ2xvY2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19TUjsgCS8vIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUE1DX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorfSBBVDkxU19QTUMsICpBVDkxUFNfUE1DOw0KIA0KLS8qIC0tLS0tLS0tIFBNQ19TQ0VSIDogKFBNQyBPZmZzZXQ6IDB4MCkgU3lzdGVtIENsb2NrIEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDSyAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgIC8qIChQTUMpIFByb2Nlc3NvciBDbG9jayAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1VEUCAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA3ICkgIC8qIChQTUMpIFVTQiBEZXZpY2UgUG9ydCBDbG9jayAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDSzAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgIC8qIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19QQ0sxICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOSApICAvKiAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0ICovDQotI2RlZmluZSBBVDkxQ19QTUNfUENLMiAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEwICkgLyogKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDSzMgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMSApIC8qIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgKi8NCi0vKiAtLS0tLS0tLSBQTUNfU0NEUiA6IChQTUMgT2Zmc2V0OiAweDQpIFN5c3RlbSBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gUE1DX1NDU1IgOiAoUE1DIE9mZnNldDogMHg4KSBTeXN0ZW0gQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQ0tHUl9NT1IgOiAoUE1DIE9mZnNldDogMHgyMCkgTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQ0tHUl9NQ0ZSIDogKFBNQyBPZmZzZXQ6IDB4MjQpIE1haW4gQ2xvY2sgRnJlcXVlbmN5IFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQ0tHUl9QTExSIDogKFBNQyBPZmZzZXQ6IDB4MmMpIFBMTCBCIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gUE1DX01DS1IgOiAoUE1DIE9mZnNldDogMHgzMCkgTWFzdGVyIENsb2NrIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19QTUNfQ1NTICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDAgKSAvKiAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgU2VsZWN0aW9uICovDQotI2RlZmluZSAgICAgQVQ5MUNfUE1DX0NTU19TTE9XX0NMSyAgICAoICggdW5zaWduZWQgaW50ICkgMHgwICkgICAgICAvKiAoUE1DKSBTbG93IENsb2NrIGlzIHNlbGVjdGVkICovDQotI2RlZmluZSAgICAgQVQ5MUNfUE1DX0NTU19NQUlOX0NMSyAgICAoICggdW5zaWduZWQgaW50ICkgMHgxICkgICAgICAvKiAoUE1DKSBNYWluIENsb2NrIGlzIHNlbGVjdGVkICovDQotI2RlZmluZSAgICAgQVQ5MUNfUE1DX0NTU19QTExfQ0xLICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzICkgICAgICAvKiAoUE1DKSBDbG9jayBmcm9tIFBMTCBpcyBzZWxlY3RlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1BSRVMgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NyA8PCAyICkgLyogKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIFByZXNjYWxlciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1BNQ19QUkVTX0NMSyAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAyICkgLyogKFBNQykgU2VsZWN0ZWQgY2xvY2sgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19QTUNfUFJFU19DTEtfMiAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMiApIC8qIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgMiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1BNQ19QUkVTX0NMS180ICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCAyICkgLyogKFBNQykgU2VsZWN0ZWQgY2xvY2sgZGl2aWRlZCBieSA0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfUE1DX1BSRVNfQ0xLXzggICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDIgKSAvKiAoUE1DKSBTZWxlY3RlZCBjbG9jayBkaXZpZGVkIGJ5IDggKi8NCi0jZGVmaW5lICAgICBBVDkxQ19QTUNfUFJFU19DTEtfMTYgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDQgPDwgMiApIC8qIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgMTYgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19QTUNfUFJFU19DTEtfMzIgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDUgPDwgMiApIC8qIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgMzIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19QTUNfUFJFU19DTEtfNjQgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDYgPDwgMiApIC8qIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgNjQgKi8NCi0vKiAtLS0tLS0tLSBQTUNfUENLUiA6IChQTUMgT2Zmc2V0OiAweDQwKSBQcm9ncmFtbWFibGUgQ2xvY2sgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBQTUNfSUVSIDogKFBNQyBPZmZzZXQ6IDB4NjApIFBNQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19QTUNfTU9TQ1MgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgLyogKFBNQykgTU9TQyBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzayAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX0xPQ0sgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyICkgIC8qIChQTUMpIFBMTCBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzayAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX01DS1JEWSAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzICkgIC8qIChQTUMpIE1DS19SRFkgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sgKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19QQ0swUkRZICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOCApICAvKiAoUE1DKSBQQ0swX1JEWSBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzayAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDSzFSRFkgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA5ICkgIC8qIChQTUMpIFBDSzFfUkRZIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrICovDQotI2RlZmluZSBBVDkxQ19QTUNfUENLMlJEWSAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEwICkgLyogKFBNQykgUENLMl9SRFkgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sgKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19QQ0szUkRZICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTEgKSAvKiAoUE1DKSBQQ0szX1JEWSBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzayAqLw0KLS8qIC0tLS0tLS0tIFBNQ19JRFIgOiAoUE1DIE9mZnNldDogMHg2NCkgUE1DIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gUE1DX1NSIDogKFBNQyBPZmZzZXQ6IDB4NjgpIFBNQyBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBQTUNfSU1SIDogKFBNQyBPZmZzZXQ6IDB4NmMpIFBNQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSAqLw0KKy8vIC0tLS0tLS0tIFBNQ19TQ0VSIDogKFBNQyBPZmZzZXQ6IDB4MCkgU3lzdGVtIENsb2NrIEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0sgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoUE1DKSBQcm9jZXNzb3IgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BNQ19VRFAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoUE1DKSBVU0IgRGV2aWNlIFBvcnQgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0swICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0DQorI2RlZmluZSBBVDkxQ19QTUNfUENLMSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLy8gKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dA0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDSzIgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQNCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0szICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDExKSAvLyAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0DQorLy8gLS0tLS0tLS0gUE1DX1NDRFIgOiAoUE1DIE9mZnNldDogMHg0KSBTeXN0ZW0gQ2xvY2sgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQTUNfU0NTUiA6IChQTUMgT2Zmc2V0OiAweDgpIFN5c3RlbSBDbG9jayBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQ0tHUl9NT1IgOiAoUE1DIE9mZnNldDogMHgyMCkgTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIENLR1JfTUNGUiA6IChQTUMgT2Zmc2V0OiAweDI0KSBNYWluIENsb2NrIEZyZXF1ZW5jeSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBDS0dSX1BMTFIgOiAoUE1DIE9mZnNldDogMHgyYykgUExMIEIgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUE1DX01DS1IgOiAoUE1DIE9mZnNldDogMHgzMCkgTWFzdGVyIENsb2NrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUE1DX0NTUyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDApIC8vIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19QTUNfQ1NTX1NMT1dfQ0xLICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDApIC8vIChQTUMpIFNsb3cgQ2xvY2sgaXMgc2VsZWN0ZWQNCisjZGVmaW5lIAlBVDkxQ19QTUNfQ1NTX01BSU5fQ0xLICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEpIC8vIChQTUMpIE1haW4gQ2xvY2sgaXMgc2VsZWN0ZWQNCisjZGVmaW5lIAlBVDkxQ19QTUNfQ1NTX1BMTF9DTEsgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMpIC8vIChQTUMpIENsb2NrIGZyb20gUExMIGlzIHNlbGVjdGVkDQorI2RlZmluZSBBVDkxQ19QTUNfUFJFUyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAgMikgLy8gKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIFByZXNjYWxlcg0KKyNkZWZpbmUgCUFUOTFDX1BNQ19QUkVTX0NMSyAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDIpIC8vIChQTUMpIFNlbGVjdGVkIGNsb2NrDQorI2RlZmluZSAJQVQ5MUNfUE1DX1BSRVNfQ0xLXzIgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFBNQykgU2VsZWN0ZWQgY2xvY2sgZGl2aWRlZCBieSAyDQorI2RlZmluZSAJQVQ5MUNfUE1DX1BSRVNfQ0xLXzQgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgMikgLy8gKFBNQykgU2VsZWN0ZWQgY2xvY2sgZGl2aWRlZCBieSA0DQorI2RlZmluZSAJQVQ5MUNfUE1DX1BSRVNfQ0xLXzggICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgMikgLy8gKFBNQykgU2VsZWN0ZWQgY2xvY2sgZGl2aWRlZCBieSA4DQorI2RlZmluZSAJQVQ5MUNfUE1DX1BSRVNfQ0xLXzE2ICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NCA8PCAgMikgLy8gKFBNQykgU2VsZWN0ZWQgY2xvY2sgZGl2aWRlZCBieSAxNg0KKyNkZWZpbmUgCUFUOTFDX1BNQ19QUkVTX0NMS18zMiAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDUgPDwgIDIpIC8vIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgMzINCisjZGVmaW5lIAlBVDkxQ19QTUNfUFJFU19DTEtfNjQgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg2IDw8ICAyKSAvLyAoUE1DKSBTZWxlY3RlZCBjbG9jayBkaXZpZGVkIGJ5IDY0DQorLy8gLS0tLS0tLS0gUE1DX1BDS1IgOiAoUE1DIE9mZnNldDogMHg0MCkgUHJvZ3JhbW1hYmxlIENsb2NrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFBNQ19JRVIgOiAoUE1DIE9mZnNldDogMHg2MCkgUE1DIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QTUNfTU9TQ1MgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFBNQykgTU9TQyBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzaw0KKyNkZWZpbmUgQVQ5MUNfUE1DX0xPQ0sgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChQTUMpIFBMTCBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzaw0KKyNkZWZpbmUgQVQ5MUNfUE1DX01DS1JEWSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChQTUMpIE1DS19SRFkgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sNCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0swUkRZICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoUE1DKSBQQ0swX1JEWSBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzaw0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDSzFSRFkgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChQTUMpIFBDSzFfUkRZIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrDQorI2RlZmluZSBBVDkxQ19QTUNfUENLMlJEWSAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLy8gKFBNQykgUENLMl9SRFkgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sNCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0szUkRZICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDExKSAvLyAoUE1DKSBQQ0szX1JEWSBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzaw0KKy8vIC0tLS0tLS0tIFBNQ19JRFIgOiAoUE1DIE9mZnNldDogMHg2NCkgUE1DIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFBNQ19TUiA6IChQTUMgT2Zmc2V0OiAweDY4KSBQTUMgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFBNQ19JTVIgOiAoUE1DIE9mZnNldDogMHg2YykgUE1DIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUmVzZXQgQ29udHJvbGxlciBJbnRlcmZhY2UgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLXR5cGVkZWYgc3RydWN0IF9BVDkxU19SU1RDDQotew0KLSAgICBBVDkxX1JFRyBSU1RDX1JDUjsgLyogUmVzZXQgQ29udHJvbCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSU1RDX1JTUjsgLyogUmVzZXQgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJTVENfUk1SOyAvKiBSZXNldCBNb2RlIFJlZ2lzdGVyICovDQotfSBBVDkxU19SU1RDLCAqIEFUOTFQU19SU1RDOw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUmVzZXQgQ29udHJvbGxlciBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19SU1RDIHsNCisJQVQ5MV9SRUcJIFJTVENfUkNSOyAJLy8gUmVzZXQgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUlNUQ19SU1I7IAkvLyBSZXNldCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJTVENfUk1SOyAJLy8gUmVzZXQgTW9kZSBSZWdpc3Rlcg0KK30gQVQ5MVNfUlNUQywgKkFUOTFQU19SU1RDOw0KIA0KLS8qIC0tLS0tLS0tIFNZU0NfUkNSIDogKFJTVEMgT2Zmc2V0OiAweDApIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1NZU0NfUFJPQ1JTVCAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgIC8qIChSU1RDKSBQcm9jZXNzb3IgUmVzZXQgKi8NCi0jZGVmaW5lIEFUOTFDX1NZU0NfSUNFUlNUICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEgKSAgIC8qIChSU1RDKSBJQ0UgSW50ZXJmYWNlIFJlc2V0ICovDQotI2RlZmluZSBBVDkxQ19TWVNDX1BFUlJTVCAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyICkgICAvKiAoUlNUQykgUGVyaXBoZXJhbCBSZXNldCAqLw0KLSNkZWZpbmUgQVQ5MUNfU1lTQ19FWFRSU1QgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMyApICAgLyogKFJTVEMpIEV4dGVybmFsIFJlc2V0ICovDQotI2RlZmluZSBBVDkxQ19TWVNDX0tFWSAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RkYgPDwgMjQgKSAvKiAoUlNUQykgUGFzc3dvcmQgKi8NCi0vKiAtLS0tLS0tLSBTWVNDX1JTUiA6IChSU1RDIE9mZnNldDogMHg0KSBSZXNldCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1NZU0NfVVJTVFMgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgIC8qIChSU1RDKSBVc2VyIFJlc2V0IFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfU1lTQ19CT0RTVFMgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAgLyogKFJTVEMpIEJyb3duLW91dCBEZXRlY3Rpb24gU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19TWVNDX1JTVFRZUCAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NyA8PCA4ICkgICAvKiAoUlNUQykgUmVzZXQgVHlwZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NZU0NfUlNUVFlQX1BPV0VSVVAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgOCApICAgLyogKFJTVEMpIFBvd2VyLXVwIFJlc2V0LiBWRERDT1JFIHJpc2luZy4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TWVNDX1JTVFRZUF9XQVRDSERPRyAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDggKSAgIC8qIChSU1RDKSBXYXRjaGRvZyBSZXNldC4gV2F0Y2hkb2cgb3ZlcmZsb3cgb2NjdXJlZC4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TWVNDX1JTVFRZUF9TT0ZUV0FSRSAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDggKSAgIC8qIChSU1RDKSBTb2Z0d2FyZSBSZXNldC4gUHJvY2Vzc29yIHJlc2V0IHJlcXVpcmVkIGJ5IHRoZSBzb2Z0d2FyZS4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TWVNDX1JTVFRZUF9VU0VSICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg0IDw8IDggKSAgIC8qIChSU1RDKSBVc2VyIFJlc2V0LiBOUlNUIHBpbiBkZXRlY3RlZCBsb3cuICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1lTQ19SU1RUWVBfQlJPV05PVVQgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NSA8PCA4ICkgICAvKiAoUlNUQykgQnJvd24tb3V0IFJlc2V0LiAqLw0KLSNkZWZpbmUgQVQ5MUNfU1lTQ19OUlNUTCAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTYgKSAgLyogKFJTVEMpIE5SU1QgcGluIGxldmVsICovDQotI2RlZmluZSBBVDkxQ19TWVNDX1NSQ01QICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNyApICAvKiAoUlNUQykgU29mdHdhcmUgUmVzZXQgQ29tbWFuZCBpbiBQcm9ncmVzcy4gKi8NCi0vKiAtLS0tLS0tLSBTWVNDX1JNUiA6IChSU1RDIE9mZnNldDogMHg4KSBSZXNldCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19TWVNDX1VSU1RFTiAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgICAvKiAoUlNUQykgVXNlciBSZXNldCBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1NZU0NfVVJTVElFTiAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDQgKSAgIC8qIChSU1RDKSBVc2VyIFJlc2V0IEludGVycnVwdCBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1NZU0NfRVJTVEwgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGIDw8IDggKSAgIC8qIChSU1RDKSBVc2VyIFJlc2V0IEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1lTQ19CT0RJRU4gICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTYgKSAgLyogKFJTVEMpIEJyb3duLW91dCBEZXRlY3Rpb24gSW50ZXJydXB0IEVuYWJsZSAqLw0KKy8vIC0tLS0tLS0tIFNZU0NfUkNSIDogKFJTVEMgT2Zmc2V0OiAweDApIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TWVNDX1BST0NSU1QgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFJTVEMpIFByb2Nlc3NvciBSZXNldA0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19JQ0VSU1QgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChSU1RDKSBJQ0UgSW50ZXJmYWNlIFJlc2V0DQorI2RlZmluZSBBVDkxQ19TWVNDX1BFUlJTVCAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFJTVEMpIFBlcmlwaGVyYWwgUmVzZXQNCisjZGVmaW5lIEFUOTFDX1NZU0NfRVhUUlNUICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoUlNUQykgRXh0ZXJuYWwgUmVzZXQNCisjZGVmaW5lIEFUOTFDX1NZU0NfS0VZICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRiA8PCAyNCkgLy8gKFJTVEMpIFBhc3N3b3JkDQorLy8gLS0tLS0tLS0gU1lTQ19SU1IgOiAoUlNUQyBPZmZzZXQ6IDB4NCkgUmVzZXQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19VUlNUUyAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChSU1RDKSBVc2VyIFJlc2V0IFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19CT0RTVFMgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChSU1RDKSBCcm93bi1vdXQgRGV0ZWN0aW9uIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19SU1RUWVAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgIDgpIC8vIChSU1RDKSBSZXNldCBUeXBlDQorI2RlZmluZSAJQVQ5MUNfU1lTQ19SU1RUWVBfUE9XRVJVUCAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgOCkgLy8gKFJTVEMpIFBvd2VyLXVwIFJlc2V0LiBWRERDT1JFIHJpc2luZy4NCisjZGVmaW5lIAlBVDkxQ19TWVNDX1JTVFRZUF9XQVRDSERPRyAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA4KSAvLyAoUlNUQykgV2F0Y2hkb2cgUmVzZXQuIFdhdGNoZG9nIG92ZXJmbG93IG9jY3VyZWQuDQorI2RlZmluZSAJQVQ5MUNfU1lTQ19SU1RUWVBfU09GVFdBUkUgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKFJTVEMpIFNvZnR3YXJlIFJlc2V0LiBQcm9jZXNzb3IgcmVzZXQgcmVxdWlyZWQgYnkgdGhlIHNvZnR3YXJlLg0KKyNkZWZpbmUgCUFUOTFDX1NZU0NfUlNUVFlQX1VTRVIgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDQgPDwgIDgpIC8vIChSU1RDKSBVc2VyIFJlc2V0LiBOUlNUIHBpbiBkZXRlY3RlZCBsb3cuDQorI2RlZmluZSAJQVQ5MUNfU1lTQ19SU1RUWVBfQlJPV05PVVQgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NSA8PCAgOCkgLy8gKFJTVEMpIEJyb3duLW91dCBSZXNldC4NCisjZGVmaW5lIEFUOTFDX1NZU0NfTlJTVEwgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoUlNUQykgTlJTVCBwaW4gbGV2ZWwNCisjZGVmaW5lIEFUOTFDX1NZU0NfU1JDTVAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE3KSAvLyAoUlNUQykgU29mdHdhcmUgUmVzZXQgQ29tbWFuZCBpbiBQcm9ncmVzcy4NCisvLyAtLS0tLS0tLSBTWVNDX1JNUiA6IChSU1RDIE9mZnNldDogMHg4KSBSZXNldCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19VUlNURU4gICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChSU1RDKSBVc2VyIFJlc2V0IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19VUlNUSUVOICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChSU1RDKSBVc2VyIFJlc2V0IEludGVycnVwdCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1NZU0NfRVJTVEwgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8ICA4KSAvLyAoUlNUQykgVXNlciBSZXNldCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1NZU0NfQk9ESUVOICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoUlNUQykgQnJvd24tb3V0IERldGVjdGlvbiBJbnRlcnJ1cHQgRW5hYmxlDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBSZWFsIFRpbWUgVGltZXIgQ29udHJvbGxlciBJbnRlcmZhY2UgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLXR5cGVkZWYgc3RydWN0IF9BVDkxU19SVFRDDQotew0KLSAgICBBVDkxX1JFRyBSVFRDX1JUTVI7IC8qIFJlYWwtdGltZSBNb2RlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJUVENfUlRBUjsgLyogUmVhbC10aW1lIEFsYXJtIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJUVENfUlRWUjsgLyogUmVhbC10aW1lIFZhbHVlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJUVENfUlRTUjsgLyogUmVhbC10aW1lIFN0YXR1cyBSZWdpc3RlciAqLw0KLX0gQVQ5MVNfUlRUQywgKiBBVDkxUFNfUlRUQzsNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFJlYWwgVGltZSBUaW1lciBDb250cm9sbGVyIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1JUVEMgew0KKwlBVDkxX1JFRwkgUlRUQ19SVE1SOyAJLy8gUmVhbC10aW1lIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJUVENfUlRBUjsgCS8vIFJlYWwtdGltZSBBbGFybSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUlRUQ19SVFZSOyAJLy8gUmVhbC10aW1lIFZhbHVlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSVFRDX1JUU1I7IAkvLyBSZWFsLXRpbWUgU3RhdHVzIFJlZ2lzdGVyDQorfSBBVDkxU19SVFRDLCAqQVQ5MVBTX1JUVEM7DQogDQotLyogLS0tLS0tLS0gU1lTQ19SVE1SIDogKFJUVEMgT2Zmc2V0OiAweDApIFJlYWwtdGltZSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19TWVNDX1JUUFJFUyAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRkZGIDw8IDAgKSAvKiAoUlRUQykgUmVhbC10aW1lIFRpbWVyIFByZXNjYWxlciBWYWx1ZSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1lTQ19BTE1JRU4gICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNiApICAgLyogKFJUVEMpIEFsYXJtIEludGVycnVwdCBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1NZU0NfUlRUSU5DSUVOICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTcgKSAgIC8qIChSVFRDKSBSZWFsIFRpbWUgVGltZXIgSW5jcmVtZW50IEludGVycnVwdCBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1NZU0NfUlRUUlNUICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTggKSAgIC8qIChSVFRDKSBSZWFsIFRpbWUgVGltZXIgUmVzdGFydCAqLw0KLS8qIC0tLS0tLS0tIFNZU0NfUlRBUiA6IChSVFRDIE9mZnNldDogMHg0KSBSZWFsLXRpbWUgQWxhcm0gUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1NZU0NfQUxNViAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMCApICAgIC8qIChSVFRDKSBBbGFybSBWYWx1ZSAqLw0KLS8qIC0tLS0tLS0tIFNZU0NfUlRWUiA6IChSVFRDIE9mZnNldDogMHg4KSBDdXJyZW50IFJlYWwtdGltZSBWYWx1ZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1lTQ19DUlRWICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAwICkgICAgLyogKFJUVEMpIEN1cnJlbnQgUmVhbC10aW1lIFZhbHVlICovDQotLyogLS0tLS0tLS0gU1lTQ19SVFNSIDogKFJUVEMgT2Zmc2V0OiAweGMpIFJlYWwtdGltZSBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1NZU0NfQUxNUyAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgIC8qIChSVFRDKSBSZWFsLXRpbWUgQWxhcm0gU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19TWVNDX1JUVElOQyAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEgKSAgICAvKiAoUlRUQykgUmVhbC10aW1lIFRpbWVyIEluY3JlbWVudCAqLw0KKy8vIC0tLS0tLS0tIFNZU0NfUlRNUiA6IChSVFRDIE9mZnNldDogMHgwKSBSZWFsLXRpbWUgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NZU0NfUlRQUkVTICAgICAoKHVuc2lnbmVkIGludCkgMHhGRkZGIDw8ICAwKSAvLyAoUlRUQykgUmVhbC10aW1lIFRpbWVyIFByZXNjYWxlciBWYWx1ZQ0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19BTE1JRU4gICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChSVFRDKSBBbGFybSBJbnRlcnJ1cHQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19TWVNDX1JUVElOQ0lFTiAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNykgLy8gKFJUVEMpIFJlYWwgVGltZSBUaW1lciBJbmNyZW1lbnQgSW50ZXJydXB0IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19SVFRSU1QgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTgpIC8vIChSVFRDKSBSZWFsIFRpbWUgVGltZXIgUmVzdGFydA0KKy8vIC0tLS0tLS0tIFNZU0NfUlRBUiA6IChSVFRDIE9mZnNldDogMHg0KSBSZWFsLXRpbWUgQWxhcm0gUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TWVNDX0FMTVYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgMCkgLy8gKFJUVEMpIEFsYXJtIFZhbHVlDQorLy8gLS0tLS0tLS0gU1lTQ19SVFZSIDogKFJUVEMgT2Zmc2V0OiAweDgpIEN1cnJlbnQgUmVhbC10aW1lIFZhbHVlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19DUlRWICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDApIC8vIChSVFRDKSBDdXJyZW50IFJlYWwtdGltZSBWYWx1ZQ0KKy8vIC0tLS0tLS0tIFNZU0NfUlRTUiA6IChSVFRDIE9mZnNldDogMHhjKSBSZWFsLXRpbWUgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19BTE1TICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChSVFRDKSBSZWFsLXRpbWUgQWxhcm0gU3RhdHVzDQorI2RlZmluZSBBVDkxQ19TWVNDX1JUVElOQyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFJUVEMpIFJlYWwtdGltZSBUaW1lciBJbmNyZW1lbnQNCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFBlcmlvZGljIEludGVydmFsIFRpbWVyIENvbnRyb2xsZXIgSW50ZXJmYWNlICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfUElUQw0KLXsNCi0gICAgQVQ5MV9SRUcgUElUQ19QSU1SOyAvKiBQZXJpb2QgSW50ZXJ2YWwgTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSVRDX1BJU1I7IC8qIFBlcmlvZCBJbnRlcnZhbCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElUQ19QSVZSOyAvKiBQZXJpb2QgSW50ZXJ2YWwgVmFsdWUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElUQ19QSUlSOyAvKiBQZXJpb2QgSW50ZXJ2YWwgSW1hZ2UgUmVnaXN0ZXIgKi8NCi19IEFUOTFTX1BJVEMsICogQVQ5MVBTX1BJVEM7DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQZXJpb2RpYyBJbnRlcnZhbCBUaW1lciBDb250cm9sbGVyIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1BJVEMgew0KKwlBVDkxX1JFRwkgUElUQ19QSU1SOyAJLy8gUGVyaW9kIEludGVydmFsIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJVENfUElTUjsgCS8vIFBlcmlvZCBJbnRlcnZhbCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJVENfUElWUjsgCS8vIFBlcmlvZCBJbnRlcnZhbCBWYWx1ZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElUQ19QSUlSOyAJLy8gUGVyaW9kIEludGVydmFsIEltYWdlIFJlZ2lzdGVyDQorfSBBVDkxU19QSVRDLCAqQVQ5MVBTX1BJVEM7DQogDQotLyogLS0tLS0tLS0gU1lTQ19QSU1SIDogKFBJVEMgT2Zmc2V0OiAweDApIFBlcmlvZGljIEludGVydmFsIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1NZU0NfUElWICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGRkZGIDw8IDAgKSAvKiAoUElUQykgUGVyaW9kaWMgSW50ZXJ2YWwgVmFsdWUgKi8NCi0jZGVmaW5lIEFUOTFDX1NZU0NfUElURU4gICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjQgKSAgICAvKiAoUElUQykgUGVyaW9kaWMgSW50ZXJ2YWwgVGltZXIgRW5hYmxlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfU1lTQ19QSVRJRU4gICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyNSApICAgIC8qIChQSVRDKSBQZXJpb2RpYyBJbnRlcnZhbCBUaW1lciBJbnRlcnJ1cHQgRW5hYmxlICovDQotLyogLS0tLS0tLS0gU1lTQ19QSVNSIDogKFBJVEMgT2Zmc2V0OiAweDQpIFBlcmlvZGljIEludGVydmFsIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1lTQ19QSVRTICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgICAgIC8qIChQSVRDKSBQZXJpb2RpYyBJbnRlcnZhbCBUaW1lciBTdGF0dXMgKi8NCi0vKiAtLS0tLS0tLSBTWVNDX1BJVlIgOiAoUElUQyBPZmZzZXQ6IDB4OCkgUGVyaW9kaWMgSW50ZXJ2YWwgVmFsdWUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1NZU0NfQ1BJViAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGRkZGIDw8IDAgKSAvKiAoUElUQykgQ3VycmVudCBQZXJpb2RpYyBJbnRlcnZhbCBWYWx1ZSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1lTQ19QSUNOVCAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RkZGIDw8IDIwICkgIC8qIChQSVRDKSBQZXJpb2RpYyBJbnRlcnZhbCBDb3VudGVyICovDQotLyogLS0tLS0tLS0gU1lTQ19QSUlSIDogKFBJVEMgT2Zmc2V0OiAweGMpIFBlcmlvZGljIEludGVydmFsIEltYWdlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQorLy8gLS0tLS0tLS0gU1lTQ19QSU1SIDogKFBJVEMgT2Zmc2V0OiAweDApIFBlcmlvZGljIEludGVydmFsIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TWVNDX1BJViAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGRkYgPDwgIDApIC8vIChQSVRDKSBQZXJpb2RpYyBJbnRlcnZhbCBWYWx1ZQ0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19QSVRFTiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjQpIC8vIChQSVRDKSBQZXJpb2RpYyBJbnRlcnZhbCBUaW1lciBFbmFibGVkDQorI2RlZmluZSBBVDkxQ19TWVNDX1BJVElFTiAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNSkgLy8gKFBJVEMpIFBlcmlvZGljIEludGVydmFsIFRpbWVyIEludGVycnVwdCBFbmFibGUNCisvLyAtLS0tLS0tLSBTWVNDX1BJU1IgOiAoUElUQyBPZmZzZXQ6IDB4NCkgUGVyaW9kaWMgSW50ZXJ2YWwgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19QSVRTICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChQSVRDKSBQZXJpb2RpYyBJbnRlcnZhbCBUaW1lciBTdGF0dXMNCisvLyAtLS0tLS0tLSBTWVNDX1BJVlIgOiAoUElUQyBPZmZzZXQ6IDB4OCkgUGVyaW9kaWMgSW50ZXJ2YWwgVmFsdWUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TWVNDX0NQSVYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGRkYgPDwgIDApIC8vIChQSVRDKSBDdXJyZW50IFBlcmlvZGljIEludGVydmFsIFZhbHVlDQorI2RlZmluZSBBVDkxQ19TWVNDX1BJQ05UICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGIDw8IDIwKSAvLyAoUElUQykgUGVyaW9kaWMgSW50ZXJ2YWwgQ291bnRlcg0KKy8vIC0tLS0tLS0tIFNZU0NfUElJUiA6IChQSVRDIE9mZnNldDogMHhjKSBQZXJpb2RpYyBJbnRlcnZhbCBJbWFnZSBSZWdpc3RlciAtLS0tLS0tLSANCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFdhdGNoZG9nIFRpbWVyIENvbnRyb2xsZXIgSW50ZXJmYWNlICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfV0RUQw0KLXsNCi0gICAgQVQ5MV9SRUcgV0RUQ19XRENSOyAvKiBXYXRjaGRvZyBDb250cm9sIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFdEVENfV0RNUjsgLyogV2F0Y2hkb2cgTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBXRFRDX1dEU1I7IC8qIFdhdGNoZG9nIFN0YXR1cyBSZWdpc3RlciAqLw0KLX0gQVQ5MVNfV0RUQywgKiBBVDkxUFNfV0RUQzsNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFdhdGNoZG9nIFRpbWVyIENvbnRyb2xsZXIgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfV0RUQyB7DQorCUFUOTFfUkVHCSBXRFRDX1dEQ1I7IAkvLyBXYXRjaGRvZyBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBXRFRDX1dETVI7IAkvLyBXYXRjaGRvZyBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBXRFRDX1dEU1I7IAkvLyBXYXRjaGRvZyBTdGF0dXMgUmVnaXN0ZXINCit9IEFUOTFTX1dEVEMsICpBVDkxUFNfV0RUQzsNCiANCi0vKiAtLS0tLS0tLSBTWVNDX1dEQ1IgOiAoV0RUQyBPZmZzZXQ6IDB4MCkgUGVyaW9kaWMgSW50ZXJ2YWwgSW1hZ2UgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1NZU0NfV0RSU1RUICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgIC8qIChXRFRDKSBXYXRjaGRvZyBSZXN0YXJ0ICovDQotLyogLS0tLS0tLS0gU1lTQ19XRE1SIDogKFdEVEMgT2Zmc2V0OiAweDQpIFdhdGNoZG9nIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1NZU0NfV0RWICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGRiA8PCAwICkgIC8qIChXRFRDKSBXYXRjaGRvZyBUaW1lciBSZXN0YXJ0ICovDQotI2RlZmluZSBBVDkxQ19TWVNDX1dERklFTiAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEyICkgICAvKiAoV0RUQykgV2F0Y2hkb2cgRmF1bHQgSW50ZXJydXB0IEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1lTQ19XRFJTVEVOICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMyApICAgLyogKFdEVEMpIFdhdGNoZG9nIFJlc2V0IEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1lTQ19XRFJQUk9DICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNCApICAgLyogKFdEVEMpIFdhdGNoZG9nIFRpbWVyIFJlc3RhcnQgKi8NCi0jZGVmaW5lIEFUOTFDX1NZU0NfV0RESVMgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTUgKSAgIC8qIChXRFRDKSBXYXRjaGRvZyBEaXNhYmxlICovDQotI2RlZmluZSBBVDkxQ19TWVNDX1dERCAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRkYgPDwgMTYgKSAvKiAoV0RUQykgV2F0Y2hkb2cgRGVsdGEgVmFsdWUgKi8NCi0jZGVmaW5lIEFUOTFDX1NZU0NfV0REQkdITFQgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjggKSAgIC8qIChXRFRDKSBXYXRjaGRvZyBEZWJ1ZyBIYWx0ICovDQotI2RlZmluZSBBVDkxQ19TWVNDX1dESURMRUhMVCAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDI5ICkgICAvKiAoV0RUQykgV2F0Y2hkb2cgSWRsZSBIYWx0ICovDQotLyogLS0tLS0tLS0gU1lTQ19XRFNSIDogKFdEVEMgT2Zmc2V0OiAweDgpIFdhdGNoZG9nIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1lTQ19XRFVORiAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgICAgLyogKFdEVEMpIFdhdGNoZG9nIFVuZGVyZmxvdyAqLw0KLSNkZWZpbmUgQVQ5MUNfU1lTQ19XREVSUiAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgICAgLyogKFdEVEMpIFdhdGNoZG9nIEVycm9yICovDQorLy8gLS0tLS0tLS0gU1lTQ19XRENSIDogKFdEVEMgT2Zmc2V0OiAweDApIFBlcmlvZGljIEludGVydmFsIEltYWdlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19XRFJTVFQgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChXRFRDKSBXYXRjaGRvZyBSZXN0YXJ0DQorLy8gLS0tLS0tLS0gU1lTQ19XRE1SIDogKFdEVEMgT2Zmc2V0OiAweDQpIFdhdGNoZG9nIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TWVNDX1dEViAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGIDw8ICAwKSAvLyAoV0RUQykgV2F0Y2hkb2cgVGltZXIgUmVzdGFydA0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19XREZJRU4gICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8vIChXRFRDKSBXYXRjaGRvZyBGYXVsdCBJbnRlcnJ1cHQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19TWVNDX1dEUlNURU4gICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMykgLy8gKFdEVEMpIFdhdGNoZG9nIFJlc2V0IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19XRFJQUk9DICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTQpIC8vIChXRFRDKSBXYXRjaGRvZyBUaW1lciBSZXN0YXJ0DQorI2RlZmluZSBBVDkxQ19TWVNDX1dERElTICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNSkgLy8gKFdEVEMpIFdhdGNoZG9nIERpc2FibGUNCisjZGVmaW5lIEFUOTFDX1NZU0NfV0REICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRkYgPDwgMTYpIC8vIChXRFRDKSBXYXRjaGRvZyBEZWx0YSBWYWx1ZQ0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19XRERCR0hMVCAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjgpIC8vIChXRFRDKSBXYXRjaGRvZyBEZWJ1ZyBIYWx0DQorI2RlZmluZSBBVDkxQ19TWVNDX1dESURMRUhMVCAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyOSkgLy8gKFdEVEMpIFdhdGNoZG9nIElkbGUgSGFsdA0KKy8vIC0tLS0tLS0tIFNZU0NfV0RTUiA6IChXRFRDIE9mZnNldDogMHg4KSBXYXRjaGRvZyBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TWVNDX1dEVU5GICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFdEVEMpIFdhdGNoZG9nIFVuZGVyZmxvdw0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19XREVSUiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChXRFRDKSBXYXRjaGRvZyBFcnJvcg0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgTWVtb3J5IENvbnRyb2xsZXIgSW50ZXJmYWNlICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfTUMNCi17DQotICAgIEFUOTFfUkVHIE1DX1JDUjsgICAgICAgICAgLyogTUMgUmVtYXAgQ29udHJvbCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBNQ19BU1I7ICAgICAgICAgIC8qIE1DIEFib3J0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBNQ19BQVNSOyAgICAgICAgIC8qIE1DIEFib3J0IEFkZHJlc3MgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMFsgMjEgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgTUNfRk1SOyAgICAgICAgICAvKiBNQyBGbGFzaCBNb2RlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIE1DX0ZDUjsgICAgICAgICAgLyogTUMgRmxhc2ggQ29tbWFuZCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBNQ19GU1I7ICAgICAgICAgIC8qIE1DIEZsYXNoIFN0YXR1cyBSZWdpc3RlciAqLw0KLX0gQVQ5MVNfTUMsICogQVQ5MVBTX01DOw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgTWVtb3J5IENvbnRyb2xsZXIgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfTUMgew0KKwlBVDkxX1JFRwkgTUNfUkNSOyAJLy8gTUMgUmVtYXAgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgTUNfQVNSOyAJLy8gTUMgQWJvcnQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBNQ19BQVNSOyAJLy8gTUMgQWJvcnQgQWRkcmVzcyBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFsyMV07IAkvLyANCisJQVQ5MV9SRUcJIE1DX0ZNUjsgCS8vIE1DIEZsYXNoIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIE1DX0ZDUjsgCS8vIE1DIEZsYXNoIENvbW1hbmQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIE1DX0ZTUjsgCS8vIE1DIEZsYXNoIFN0YXR1cyBSZWdpc3Rlcg0KK30gQVQ5MVNfTUMsICpBVDkxUFNfTUM7DQogDQotLyogLS0tLS0tLS0gTUNfUkNSIDogKE1DIE9mZnNldDogMHgwKSBNQyBSZW1hcCBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19NQ19SQ0IgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgLyogKE1DKSBSZW1hcCBDb21tYW5kIEJpdCAqLw0KLS8qIC0tLS0tLS0tIE1DX0FTUiA6IChNQyBPZmZzZXQ6IDB4NCkgTUMgQWJvcnQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19NQ19VTkRBREQgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgLyogKE1DKSBVbmRlZmluZWQgQWRkZXNzIEFib3J0IFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTUlTQUREICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEgKSAgIC8qIChNQykgTWlzYWxpZ25lZCBBZGRlc3MgQWJvcnQgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19BQlRTWiAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgOCApICAgLyogKE1DKSBBYm9ydCBTaXplIFN0YXR1cyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX01DX0FCVFNaX0JZVEUgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDggKSAgIC8qIChNQykgQnl0ZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX01DX0FCVFNaX0hXT1JEICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDggKSAgIC8qIChNQykgSGFsZi13b3JkICovDQotI2RlZmluZSAgICAgQVQ5MUNfTUNfQUJUU1pfV09SRCAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgOCApICAgLyogKE1DKSBXb3JkICovDQotI2RlZmluZSBBVDkxQ19NQ19BQlRUWVAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTAgKSAgLyogKE1DKSBBYm9ydCBUeXBlIFN0YXR1cyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX01DX0FCVFRZUF9EQVRBUiAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDEwICkgIC8qIChNQykgRGF0YSBSZWFkICovDQotI2RlZmluZSAgICAgQVQ5MUNfTUNfQUJUVFlQX0RBVEFXICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTAgKSAgLyogKE1DKSBEYXRhIFdyaXRlICovDQotI2RlZmluZSAgICAgQVQ5MUNfTUNfQUJUVFlQX0ZFVENIICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgMTAgKSAgLyogKE1DKSBDb2RlIEZldGNoICovDQotI2RlZmluZSBBVDkxQ19NQ19NU1QwICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTYgKSAgLyogKE1DKSBNYXN0ZXIgMCBBYm9ydCBTb3VyY2UgKi8NCi0jZGVmaW5lIEFUOTFDX01DX01TVDEgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNyApICAvKiAoTUMpIE1hc3RlciAxIEFib3J0IFNvdXJjZSAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfU1ZNU1QwICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDI0ICkgIC8qIChNQykgU2F2ZWQgTWFzdGVyIDAgQWJvcnQgU291cmNlICovDQotI2RlZmluZSBBVDkxQ19NQ19TVk1TVDEgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjUgKSAgLyogKE1DKSBTYXZlZCBNYXN0ZXIgMSBBYm9ydCBTb3VyY2UgKi8NCi0vKiAtLS0tLS0tLSBNQ19GTVIgOiAoTUMgT2Zmc2V0OiAweDYwKSBNQyBGbGFzaCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19NQ19GUkRZICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgLyogKE1DKSBGbGFzaCBSZWFkeSAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTE9DS0UgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAgIC8qIChNQykgTG9jayBFcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfUFJPR0UgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDMgKSAgIC8qIChNQykgUHJvZ3JhbW1pbmcgRXJyb3IgKi8NCi0jZGVmaW5lIEFUOTFDX01DX05FQlAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA3ICkgICAvKiAoTUMpIE5vIEVyYXNlIEJlZm9yZSBQcm9ncmFtbWluZyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfRldTICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDggKSAgIC8qIChNQykgRmxhc2ggV2FpdCBTdGF0ZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX01DX0ZXU18wRldTICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDggKSAgIC8qIChNQykgMSBjeWNsZSBmb3IgUmVhZCwgMiBmb3IgV3JpdGUgb3BlcmF0aW9ucyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX01DX0ZXU18xRldTICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDggKSAgIC8qIChNQykgMiBjeWNsZXMgZm9yIFJlYWQsIDMgZm9yIFdyaXRlIG9wZXJhdGlvbnMgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19NQ19GV1NfMkZXUyAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCA4ICkgICAvKiAoTUMpIDMgY3ljbGVzIGZvciBSZWFkLCA0IGZvciBXcml0ZSBvcGVyYXRpb25zICovDQotI2RlZmluZSAgICAgQVQ5MUNfTUNfRldTXzNGV1MgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgOCApICAgLyogKE1DKSA0IGN5Y2xlcyBmb3IgUmVhZCwgNCBmb3IgV3JpdGUgb3BlcmF0aW9ucyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfRk1DTiAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRiA8PCAxNiApIC8qIChNQykgRmxhc2ggTWljcm9zZWNvbmQgQ3ljbGUgTnVtYmVyICovDQotLyogLS0tLS0tLS0gTUNfRkNSIDogKE1DIE9mZnNldDogMHg2NCkgTUMgRmxhc2ggQ29tbWFuZCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfRkNNRCAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGIDw8IDAgKSAgIC8qIChNQykgRmxhc2ggQ29tbWFuZCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX01DX0ZDTURfU1RBUlRfUFJPRyAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxICkgICAgICAgIC8qIChNQykgU3RhcnRzIHRoZSBwcm9ncmFtbWluZyBvZiB0aCBlcGFnZSBzcGVjaWZpZWQgYnkgUEFHRU4uICovDQotI2RlZmluZSAgICAgQVQ5MUNfTUNfRkNNRF9MT0NLICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgKSAgICAgICAgLyogKE1DKSBTdGFydHMgYSBsb2NrIHNlcXVlbmNlIG9mIHRoZSBzZWN0b3IgZGVmaW5lZCBieSB0aGUgYml0cyA0IHRvIDcgb2YgdGhlIGZpZWxkIFBBR0VOLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX01DX0ZDTURfUFJPR19BTkRfTE9DSyAgICAoICggdW5zaWduZWQgaW50ICkgMHgzICkgICAgICAgIC8qIChNQykgVGhlIGxvY2sgc2VxdWVuY2UgYXV0b21hdGljYWxseSBoYXBwZW5zIGFmdGVyIHRoZSBwcm9ncmFtbWluZyBzZXF1ZW5jZSBpcyBjb21wbGV0ZWQuICovDQotI2RlZmluZSAgICAgQVQ5MUNfTUNfRkNNRF9VTkxPQ0sgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDQgKSAgICAgICAgLyogKE1DKSBTdGFydHMgYW4gdW5sb2NrIHNlcXVlbmNlIG9mIHRoZSBzZWN0b3IgZGVmaW5lZCBieSB0aGUgYml0cyA0IHRvIDcgb2YgdGhlIGZpZWxkIFBBR0VOLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX01DX0ZDTURfRVJBU0VfQUxMICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg4ICkgICAgICAgIC8qIChNQykgU3RhcnRzIHRoZSBlcmFzZSBvZiB0aGUgZW50aXJlIGZsYXNoLklmIGF0IGxlYXN0IGEgcGFnZSBpcyBsb2NrZWQsIHRoZSBjb21tYW5kIGlzIGNhbmNlbGxlZC4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19NQ19GQ01EX1NFVF9HUF9OVk0gICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4QiApICAgICAgICAvKiAoTUMpIFNldCBHZW5lcmFsIFB1cnBvc2UgTlZNIGJpdHMuICovDQotI2RlZmluZSAgICAgQVQ5MUNfTUNfRkNNRF9DTFJfR1BfTlZNICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEQgKSAgICAgICAgLyogKE1DKSBDbGVhciBHZW5lcmFsIFB1cnBvc2UgTlZNIGJpdHMuICovDQotI2RlZmluZSAgICAgQVQ5MUNfTUNfRkNNRF9TRVRfU0VDVVJJVFkgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEYgKSAgICAgICAgLyogKE1DKSBTZXQgU2VjdXJpdHkgQml0LiAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfUEFHRU4gICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzRkYgPDwgOCApIC8qIChNQykgUGFnZSBOdW1iZXIgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0tFWSAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RkYgPDwgMjQgKSAvKiAoTUMpIFdyaXRpbmcgUHJvdGVjdCBLZXkgKi8NCi0vKiAtLS0tLS0tLSBNQ19GU1IgOiAoTUMgT2Zmc2V0OiAweDY4KSBNQyBGbGFzaCBDb21tYW5kIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19NQ19TRUNVUklUWSAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNCApICAgLyogKE1DKSBTZWN1cml0eSBCaXQgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19HUE5WTTAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOCApICAgLyogKE1DKSBTZWN0b3IgMCBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfR1BOVk0xICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDkgKSAgIC8qIChNQykgU2VjdG9yIDEgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0dQTlZNMiAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMCApICAvKiAoTUMpIFNlY3RvciAyIExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19HUE5WTTMgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTEgKSAgLyogKE1DKSBTZWN0b3IgMyBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfR1BOVk00ICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEyICkgIC8qIChNQykgU2VjdG9yIDQgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0dQTlZNNSAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMyApICAvKiAoTUMpIFNlY3RvciA1IExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19HUE5WTTYgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTQgKSAgLyogKE1DKSBTZWN0b3IgNiBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfR1BOVk03ICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE1ICkgIC8qIChNQykgU2VjdG9yIDcgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0xPQ0tTMCAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNiApICAvKiAoTUMpIFNlY3RvciAwIExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19MT0NLUzEgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTcgKSAgLyogKE1DKSBTZWN0b3IgMSBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MyICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE4ICkgIC8qIChNQykgU2VjdG9yIDIgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0xPQ0tTMyAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxOSApICAvKiAoTUMpIFNlY3RvciAzIExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19MT0NLUzQgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjAgKSAgLyogKE1DKSBTZWN0b3IgNCBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTE9DS1M1ICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIxICkgIC8qIChNQykgU2VjdG9yIDUgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0xPQ0tTNiAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyMiApICAvKiAoTUMpIFNlY3RvciA2IExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19MT0NLUzcgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjMgKSAgLyogKE1DKSBTZWN0b3IgNyBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTE9DS1M4ICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDI0ICkgIC8qIChNQykgU2VjdG9yIDggTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0xPQ0tTOSAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyNSApICAvKiAoTUMpIFNlY3RvciA5IExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19MT0NLUzEwICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjYgKSAgLyogKE1DKSBTZWN0b3IgMTAgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0xPQ0tTMTEgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyNyApICAvKiAoTUMpIFNlY3RvciAxMSBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxMiAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDI4ICkgIC8qIChNQykgU2VjdG9yIDEyIExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19MT0NLUzEzICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjkgKSAgLyogKE1DKSBTZWN0b3IgMTMgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0xPQ0tTMTQgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzMCApICAvKiAoTUMpIFNlY3RvciAxNCBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxNSAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDMxICkgIC8qIChNQykgU2VjdG9yIDE1IExvY2sgU3RhdHVzICovDQorLy8gLS0tLS0tLS0gTUNfUkNSIDogKE1DIE9mZnNldDogMHgwKSBNQyBSZW1hcCBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfTUNfUkNCICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChNQykgUmVtYXAgQ29tbWFuZCBCaXQNCisvLyAtLS0tLS0tLSBNQ19BU1IgOiAoTUMgT2Zmc2V0OiAweDQpIE1DIEFib3J0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX01DX1VOREFERCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoTUMpIFVuZGVmaW5lZCBBZGRlc3MgQWJvcnQgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19NSVNBREQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKE1DKSBNaXNhbGlnbmVkIEFkZGVzcyBBYm9ydCBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0FCVFNaICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA4KSAvLyAoTUMpIEFib3J0IFNpemUgU3RhdHVzDQorI2RlZmluZSAJQVQ5MUNfTUNfQUJUU1pfQllURSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgOCkgLy8gKE1DKSBCeXRlDQorI2RlZmluZSAJQVQ5MUNfTUNfQUJUU1pfSFdPUkQgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKE1DKSBIYWxmLXdvcmQNCisjZGVmaW5lIAlBVDkxQ19NQ19BQlRTWl9XT1JEICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA4KSAvLyAoTUMpIFdvcmQNCisjZGVmaW5lIEFUOTFDX01DX0FCVFRZUCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDEwKSAvLyAoTUMpIEFib3J0IFR5cGUgU3RhdHVzDQorI2RlZmluZSAJQVQ5MUNfTUNfQUJUVFlQX0RBVEFSICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMTApIC8vIChNQykgRGF0YSBSZWFkDQorI2RlZmluZSAJQVQ5MUNfTUNfQUJUVFlQX0RBVEFXICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChNQykgRGF0YSBXcml0ZQ0KKyNkZWZpbmUgCUFUOTFDX01DX0FCVFRZUF9GRVRDSCAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDEwKSAvLyAoTUMpIENvZGUgRmV0Y2gNCisjZGVmaW5lIEFUOTFDX01DX01TVDAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoTUMpIE1hc3RlciAwIEFib3J0IFNvdXJjZQ0KKyNkZWZpbmUgQVQ5MUNfTUNfTVNUMSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTcpIC8vIChNQykgTWFzdGVyIDEgQWJvcnQgU291cmNlDQorI2RlZmluZSBBVDkxQ19NQ19TVk1TVDAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNCkgLy8gKE1DKSBTYXZlZCBNYXN0ZXIgMCBBYm9ydCBTb3VyY2UNCisjZGVmaW5lIEFUOTFDX01DX1NWTVNUMSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI1KSAvLyAoTUMpIFNhdmVkIE1hc3RlciAxIEFib3J0IFNvdXJjZQ0KKy8vIC0tLS0tLS0tIE1DX0ZNUiA6IChNQyBPZmZzZXQ6IDB4NjApIE1DIEZsYXNoIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19NQ19GUkRZICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKE1DKSBGbGFzaCBSZWFkeQ0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS0UgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChNQykgTG9jayBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfTUNfUFJPR0UgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChNQykgUHJvZ3JhbW1pbmcgRXJyb3INCisjZGVmaW5lIEFUOTFDX01DX05FQlAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoTUMpIE5vIEVyYXNlIEJlZm9yZSBQcm9ncmFtbWluZw0KKyNkZWZpbmUgQVQ5MUNfTUNfRldTICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDgpIC8vIChNQykgRmxhc2ggV2FpdCBTdGF0ZQ0KKyNkZWZpbmUgCUFUOTFDX01DX0ZXU18wRldTICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA4KSAvLyAoTUMpIDEgY3ljbGUgZm9yIFJlYWQsIDIgZm9yIFdyaXRlIG9wZXJhdGlvbnMNCisjZGVmaW5lIAlBVDkxQ19NQ19GV1NfMUZXUyAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKE1DKSAyIGN5Y2xlcyBmb3IgUmVhZCwgMyBmb3IgV3JpdGUgb3BlcmF0aW9ucw0KKyNkZWZpbmUgCUFUOTFDX01DX0ZXU18yRldTICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA4KSAvLyAoTUMpIDMgY3ljbGVzIGZvciBSZWFkLCA0IGZvciBXcml0ZSBvcGVyYXRpb25zDQorI2RlZmluZSAJQVQ5MUNfTUNfRldTXzNGV1MgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDgpIC8vIChNQykgNCBjeWNsZXMgZm9yIFJlYWQsIDQgZm9yIFdyaXRlIG9wZXJhdGlvbnMNCisjZGVmaW5lIEFUOTFDX01DX0ZNQ04gICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRiA8PCAxNikgLy8gKE1DKSBGbGFzaCBNaWNyb3NlY29uZCBDeWNsZSBOdW1iZXINCisvLyAtLS0tLS0tLSBNQ19GQ1IgOiAoTUMgT2Zmc2V0OiAweDY0KSBNQyBGbGFzaCBDb21tYW5kIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfTUNfRkNNRCAgICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgIDApIC8vIChNQykgRmxhc2ggQ29tbWFuZA0KKyNkZWZpbmUgCUFUOTFDX01DX0ZDTURfU1RBUlRfUFJPRyAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSkgLy8gKE1DKSBTdGFydHMgdGhlIHByb2dyYW1taW5nIG9mIHRoIGVwYWdlIHNwZWNpZmllZCBieSBQQUdFTi4NCisjZGVmaW5lIAlBVDkxQ19NQ19GQ01EX0xPQ0sgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIpIC8vIChNQykgU3RhcnRzIGEgbG9jayBzZXF1ZW5jZSBvZiB0aGUgc2VjdG9yIGRlZmluZWQgYnkgdGhlIGJpdHMgNCB0byA3IG9mIHRoZSBmaWVsZCBQQUdFTi4NCisjZGVmaW5lIAlBVDkxQ19NQ19GQ01EX1BST0dfQU5EX0xPQ0sgICAgICAgICgodW5zaWduZWQgaW50KSAweDMpIC8vIChNQykgVGhlIGxvY2sgc2VxdWVuY2UgYXV0b21hdGljYWxseSBoYXBwZW5zIGFmdGVyIHRoZSBwcm9ncmFtbWluZyBzZXF1ZW5jZSBpcyBjb21wbGV0ZWQuDQorI2RlZmluZSAJQVQ5MUNfTUNfRkNNRF9VTkxPQ0sgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg0KSAvLyAoTUMpIFN0YXJ0cyBhbiB1bmxvY2sgc2VxdWVuY2Ugb2YgdGhlIHNlY3RvciBkZWZpbmVkIGJ5IHRoZSBiaXRzIDQgdG8gNyBvZiB0aGUgZmllbGQgUEFHRU4uDQorI2RlZmluZSAJQVQ5MUNfTUNfRkNNRF9FUkFTRV9BTEwgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg4KSAvLyAoTUMpIFN0YXJ0cyB0aGUgZXJhc2Ugb2YgdGhlIGVudGlyZSBmbGFzaC5JZiBhdCBsZWFzdCBhIHBhZ2UgaXMgbG9ja2VkLCB0aGUgY29tbWFuZCBpcyBjYW5jZWxsZWQuDQorI2RlZmluZSAJQVQ5MUNfTUNfRkNNRF9TRVRfR1BfTlZNICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhCKSAvLyAoTUMpIFNldCBHZW5lcmFsIFB1cnBvc2UgTlZNIGJpdHMuDQorI2RlZmluZSAJQVQ5MUNfTUNfRkNNRF9DTFJfR1BfTlZNICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhEKSAvLyAoTUMpIENsZWFyIEdlbmVyYWwgUHVycG9zZSBOVk0gYml0cy4NCisjZGVmaW5lIAlBVDkxQ19NQ19GQ01EX1NFVF9TRUNVUklUWSAgICAgICAgICgodW5zaWduZWQgaW50KSAweEYpIC8vIChNQykgU2V0IFNlY3VyaXR5IEJpdC4NCisjZGVmaW5lIEFUOTFDX01DX1BBR0VOICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzRkYgPDwgIDgpIC8vIChNQykgUGFnZSBOdW1iZXINCisjZGVmaW5lIEFUOTFDX01DX0tFWSAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRiA8PCAyNCkgLy8gKE1DKSBXcml0aW5nIFByb3RlY3QgS2V5DQorLy8gLS0tLS0tLS0gTUNfRlNSIDogKE1DIE9mZnNldDogMHg2OCkgTUMgRmxhc2ggQ29tbWFuZCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX01DX1NFQ1VSSVRZICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoTUMpIFNlY3VyaXR5IEJpdCBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0dQTlZNMCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoTUMpIFNlY3RvciAwIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19HUE5WTTEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLy8gKE1DKSBTZWN0b3IgMSBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfR1BOVk0yICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChNQykgU2VjdG9yIDIgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0dQTlZNMyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDExKSAvLyAoTUMpIFNlY3RvciAzIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19HUE5WTTQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLy8gKE1DKSBTZWN0b3IgNCBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfR1BOVk01ICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTMpIC8vIChNQykgU2VjdG9yIDUgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0dQTlZNNiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE0KSAvLyAoTUMpIFNlY3RvciA2IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19HUE5WTTcgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNSkgLy8gKE1DKSBTZWN0b3IgNyBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MwICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChNQykgU2VjdG9yIDAgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTMSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE3KSAvLyAoTUMpIFNlY3RvciAxIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzIgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOCkgLy8gKE1DKSBTZWN0b3IgMiBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MzICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTkpIC8vIChNQykgU2VjdG9yIDMgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTNCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIwKSAvLyAoTUMpIFNlY3RvciA0IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzUgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMSkgLy8gKE1DKSBTZWN0b3IgNSBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1M2ICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjIpIC8vIChNQykgU2VjdG9yIDYgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTNyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIzKSAvLyAoTUMpIFNlY3RvciA3IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzggICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNCkgLy8gKE1DKSBTZWN0b3IgOCBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1M5ICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjUpIC8vIChNQykgU2VjdG9yIDkgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTMTAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI2KSAvLyAoTUMpIFNlY3RvciAxMCBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxMSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjcpIC8vIChNQykgU2VjdG9yIDExIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzEyICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyOCkgLy8gKE1DKSBTZWN0b3IgMTIgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTMTMgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI5KSAvLyAoTUMpIFNlY3RvciAxMyBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxNCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMzApIC8vIChNQykgU2VjdG9yIDE0IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzE1ICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAzMSkgLy8gKE1DKSBTZWN0b3IgMTUgTG9jayBTdGF0dXMNCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFNlcmlhbCBQYXJhbGxlbCBJbnRlcmZhY2UgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLXR5cGVkZWYgc3RydWN0IF9BVDkxU19TUEkNCi17DQotICAgIEFUOTFfUkVHIFNQSV9DUjsgICAgICAgICAgLyogQ29udHJvbCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTUElfTVI7ICAgICAgICAgIC8qIE1vZGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1BJX1JEUjsgICAgICAgICAvKiBSZWNlaXZlIERhdGEgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1BJX1REUjsgICAgICAgICAvKiBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNQSV9TUjsgICAgICAgICAgLyogU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNQSV9JRVI7ICAgICAgICAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTUElfSURSOyAgICAgICAgIC8qIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNQSV9JTVI7ICAgICAgICAgLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQwWyA0IF07ICAvKiAqLw0KLSAgICBBVDkxX1JFRyBTUElfQ1NSWyA0IF07ICAgIC8qIENoaXAgU2VsZWN0IFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMVsgNDggXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgU1BJX1JQUjsgICAgICAgICAvKiBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1BJX1JDUjsgICAgICAgICAvKiBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1BJX1RQUjsgICAgICAgICAvKiBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNQSV9UQ1I7ICAgICAgICAgLyogVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTUElfUk5QUjsgICAgICAgIC8qIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNQSV9STkNSOyAgICAgICAgLyogUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1BJX1ROUFI7ICAgICAgICAvKiBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1BJX1ROQ1I7ICAgICAgICAvKiBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1BJX1BUQ1I7ICAgICAgICAvKiBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTUElfUFRTUjsgICAgICAgIC8qIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi19IEFUOTFTX1NQSSwgKiBBVDkxUFNfU1BJOw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgU2VyaWFsIFBhcmFsbGVsIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1NQSSB7DQorCUFUOTFfUkVHCSBTUElfQ1I7IAkvLyBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTUElfTVI7IAkvLyBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTUElfUkRSOyAJLy8gUmVjZWl2ZSBEYXRhIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTUElfVERSOyAJLy8gVHJhbnNtaXQgRGF0YSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX1NSOyAJLy8gU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTUElfSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX0lEUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTUElfSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFs0XTsgCS8vIA0KKwlBVDkxX1JFRwkgU1BJX0NTUls0XTsgCS8vIENoaXAgU2VsZWN0IFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbNDhdOyAJLy8gDQorCUFUOTFfUkVHCSBTUElfUlBSOyAJLy8gUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTUElfUkNSOyAJLy8gUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTUElfVFBSOyAJLy8gVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX1RDUjsgCS8vIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9STlBSOyAJLy8gUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9STkNSOyAJLy8gUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9UTlBSOyAJLy8gVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTUElfVE5DUjsgCS8vIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX1BUQ1I7IAkvLyBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX1BUU1I7IAkvLyBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorfSBBVDkxU19TUEksICpBVDkxUFNfU1BJOw0KIA0KLS8qIC0tLS0tLS0tIFNQSV9DUiA6IChTUEkgT2Zmc2V0OiAweDApIFNQSSBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19TUElfU1BJRU4gICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgIC8qIChTUEkpIFNQSSBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9TUElESVMgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgICAgLyogKFNQSSkgU1BJIERpc2FibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9TV1JTVCAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA3ICkgICAgLyogKFNQSSkgU1BJIFNvZnR3YXJlIHJlc2V0ICovDQotI2RlZmluZSBBVDkxQ19TUElfTEFTVFhGRVIgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjQgKSAgIC8qIChTUEkpIFNQSSBMYXN0IFRyYW5zZmVyICovDQotLyogLS0tLS0tLS0gU1BJX01SIDogKFNQSSBPZmZzZXQ6IDB4NCkgU1BJIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9NU1RSICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgICAgLyogKFNQSSkgTWFzdGVyL1NsYXZlIE1vZGUgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9QUyAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgICAgLyogKFNQSSkgUGVyaXBoZXJhbCBTZWxlY3QgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TUElfUFNfRklYRUQgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAxICkgICAgLyogKFNQSSkgRml4ZWQgUGVyaXBoZXJhbCBTZWxlY3QgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TUElfUFNfVkFSSUFCTEUgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgICAgLyogKFNQSSkgVmFyaWFibGUgUGVyaXBoZXJhbCBTZWxlY3QgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9QQ1NERUMgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyICkgICAgLyogKFNQSSkgQ2hpcCBTZWxlY3QgRGVjb2RlICovDQotI2RlZmluZSBBVDkxQ19TUElfRkRJViAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMyApICAgIC8qIChTUEkpIENsb2NrIFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX01PREZESVMgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDQgKSAgICAvKiAoU1BJKSBNb2RlIEZhdWx0IERldGVjdGlvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX0xMQiAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDcgKSAgICAvKiAoU1BJKSBDbG9jayBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9QQ1MgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RiA8PCAxNiApICAgLyogKFNQSSkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX0RMWUJDUyAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRiA8PCAyNCApICAvKiAoU1BJKSBEZWxheSBCZXR3ZWVuIENoaXAgU2VsZWN0cyAqLw0KLS8qIC0tLS0tLS0tIFNQSV9SRFIgOiAoU1BJIE9mZnNldDogMHg4KSBSZWNlaXZlIERhdGEgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9SRCAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RkZGRiA8PCAwICkgLyogKFNQSSkgUmVjZWl2ZSBEYXRhICovDQotI2RlZmluZSBBVDkxQ19TUElfUlBDUyAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEYgPDwgMTYgKSAgIC8qIChTUEkpIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgU3RhdHVzICovDQotLyogLS0tLS0tLS0gU1BJX1REUiA6IChTUEkgT2Zmc2V0OiAweGMpIFRyYW5zbWl0IERhdGEgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9URCAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RkZGRiA8PCAwICkgLyogKFNQSSkgVHJhbnNtaXQgRGF0YSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX1RQQ1MgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGIDw8IDE2ICkgICAvKiAoU1BJKSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IFN0YXR1cyAqLw0KLS8qIC0tLS0tLS0tIFNQSV9TUiA6IChTUEkgT2Zmc2V0OiAweDEwKSBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9SRFJGICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgICAgLyogKFNQSSkgUmVjZWl2ZSBEYXRhIFJlZ2lzdGVyIEZ1bGwgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9URFJFICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgICAgLyogKFNQSSkgVHJhbnNtaXQgRGF0YSBSZWdpc3RlciBFbXB0eSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX01PREYgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAgICAvKiAoU1BJKSBNb2RlIEZhdWx0IEVycm9yICovDQotI2RlZmluZSBBVDkxQ19TUElfT1ZSRVMgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMyApICAgIC8qIChTUEkpIE92ZXJydW4gRXJyb3IgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19TUElfRU5EUlggICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNCApICAgIC8qIChTUEkpIEVuZCBvZiBSZWNlaXZlciBUcmFuc2ZlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX0VORFRYICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDUgKSAgICAvKiAoU1BJKSBFbmQgb2YgUmVjZWl2ZXIgVHJhbnNmZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9SWEJVRkYgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA2ICkgICAgLyogKFNQSSkgUlhCVUZGIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX1RYQlVGRSAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDcgKSAgICAvKiAoU1BJKSBUWEJVRkUgSW50ZXJydXB0ICovDQotI2RlZmluZSBBVDkxQ19TUElfTlNTUiAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOCApICAgIC8qIChTUEkpIE5TU1IgSW50ZXJydXB0ICovDQotI2RlZmluZSBBVDkxQ19TUElfVFhFTVBUWSAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOSApICAgIC8qIChTUEkpIFRYRU1QVFkgSW50ZXJydXB0ICovDQotI2RlZmluZSBBVDkxQ19TUElfU1BJRU5TICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTYgKSAgIC8qIChTUEkpIEVuYWJsZSBTdGF0dXMgKi8NCi0vKiAtLS0tLS0tLSBTUElfSUVSIDogKFNQSSBPZmZzZXQ6IDB4MTQpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBTUElfSURSIDogKFNQSSBPZmZzZXQ6IDB4MTgpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gU1BJX0lNUiA6IChTUEkgT2Zmc2V0OiAweDFjKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFNQSV9DU1IgOiAoU1BJIE9mZnNldDogMHgzMCkgQ2hpcCBTZWxlY3QgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9DUE9MICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgIC8qIChTUEkpIENsb2NrIFBvbGFyaXR5ICovDQotI2RlZmluZSBBVDkxQ19TUElfTkNQSEEgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgICAvKiAoU1BJKSBDbG9jayBQaGFzZSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX0NTQUFUICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMiApICAgLyogKFNQSSkgQ2hpcCBTZWxlY3QgQWN0aXZlIEFmdGVyIFRyYW5zZmVyICovDQotI2RlZmluZSBBVDkxQ19TUElfQklUUyAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RiA8PCA0ICkgICAvKiAoU1BJKSBCaXRzIFBlciBUcmFuc2ZlciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NQSV9CSVRTXzggICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgNCApICAgLyogKFNQSSkgOCBCaXRzIFBlciB0cmFuc2ZlciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NQSV9CSVRTXzkgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNCApICAgLyogKFNQSSkgOSBCaXRzIFBlciB0cmFuc2ZlciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NQSV9CSVRTXzEwICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgNCApICAgLyogKFNQSSkgMTAgQml0cyBQZXIgdHJhbnNmZXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TUElfQklUU18xMSAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDQgKSAgIC8qIChTUEkpIDExIEJpdHMgUGVyIHRyYW5zZmVyICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1BJX0JJVFNfMTIgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NCA8PCA0ICkgICAvKiAoU1BJKSAxMiBCaXRzIFBlciB0cmFuc2ZlciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NQSV9CSVRTXzEzICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDUgPDwgNCApICAgLyogKFNQSSkgMTMgQml0cyBQZXIgdHJhbnNmZXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TUElfQklUU18xNCAgICAoICggdW5zaWduZWQgaW50ICkgMHg2IDw8IDQgKSAgIC8qIChTUEkpIDE0IEJpdHMgUGVyIHRyYW5zZmVyICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1BJX0JJVFNfMTUgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NyA8PCA0ICkgICAvKiAoU1BJKSAxNSBCaXRzIFBlciB0cmFuc2ZlciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NQSV9CSVRTXzE2ICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDggPDwgNCApICAgLyogKFNQSSkgMTYgQml0cyBQZXIgdHJhbnNmZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9TQ0JSICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRiA8PCA4ICkgIC8qIChTUEkpIFNlcmlhbCBDbG9jayBCYXVkIFJhdGUgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9ETFlCUyAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRiA8PCAxNiApIC8qIChTUEkpIFNlcmlhbCBDbG9jayBCYXVkIFJhdGUgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9ETFlCQ1QgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRiA8PCAyNCApIC8qIChTUEkpIERlbGF5IEJldHdlZW4gQ29uc2VjdXRpdmUgVHJhbnNmZXJzICovDQorLy8gLS0tLS0tLS0gU1BJX0NSIDogKFNQSSBPZmZzZXQ6IDB4MCkgU1BJIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TUElfU1BJRU4gICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFNQSSkgU1BJIEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX1NQSURJUyAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChTUEkpIFNQSSBEaXNhYmxlDQorI2RlZmluZSBBVDkxQ19TUElfU1dSU1QgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKFNQSSkgU1BJIFNvZnR3YXJlIHJlc2V0DQorI2RlZmluZSBBVDkxQ19TUElfTEFTVFhGRVIgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNCkgLy8gKFNQSSkgU1BJIExhc3QgVHJhbnNmZXINCisvLyAtLS0tLS0tLSBTUElfTVIgOiAoU1BJIE9mZnNldDogMHg0KSBTUEkgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NQSV9NU1RSICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoU1BJKSBNYXN0ZXIvU2xhdmUgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX1BTICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChTUEkpIFBlcmlwaGVyYWwgU2VsZWN0DQorI2RlZmluZSAJQVQ5MUNfU1BJX1BTX0ZJWEVEICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDEpIC8vIChTUEkpIEZpeGVkIFBlcmlwaGVyYWwgU2VsZWN0DQorI2RlZmluZSAJQVQ5MUNfU1BJX1BTX1ZBUklBQkxFICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChTUEkpIFZhcmlhYmxlIFBlcmlwaGVyYWwgU2VsZWN0DQorI2RlZmluZSBBVDkxQ19TUElfUENTREVDICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFNQSSkgQ2hpcCBTZWxlY3QgRGVjb2RlDQorI2RlZmluZSBBVDkxQ19TUElfRkRJViAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKFNQSSkgQ2xvY2sgU2VsZWN0aW9uDQorI2RlZmluZSBBVDkxQ19TUElfTU9ERkRJUyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFNQSSkgTW9kZSBGYXVsdCBEZXRlY3Rpb24NCisjZGVmaW5lIEFUOTFDX1NQSV9MTEIgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoU1BJKSBDbG9jayBTZWxlY3Rpb24NCisjZGVmaW5lIEFUOTFDX1NQSV9QQ1MgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8IDE2KSAvLyAoU1BJKSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0DQorI2RlZmluZSBBVDkxQ19TUElfRExZQkNTICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgMjQpIC8vIChTUEkpIERlbGF5IEJldHdlZW4gQ2hpcCBTZWxlY3RzDQorLy8gLS0tLS0tLS0gU1BJX1JEUiA6IChTUEkgT2Zmc2V0OiAweDgpIFJlY2VpdmUgRGF0YSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NQSV9SRCAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRkZGIDw8ICAwKSAvLyAoU1BJKSBSZWNlaXZlIERhdGENCisjZGVmaW5lIEFUOTFDX1NQSV9SUENTICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8IDE2KSAvLyAoU1BJKSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IFN0YXR1cw0KKy8vIC0tLS0tLS0tIFNQSV9URFIgOiAoU1BJIE9mZnNldDogMHhjKSBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1BJX1REICAgICAgICAgICgodW5zaWduZWQgaW50KSAweEZGRkYgPDwgIDApIC8vIChTUEkpIFRyYW5zbWl0IERhdGENCisjZGVmaW5lIEFUOTFDX1NQSV9UUENTICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8IDE2KSAvLyAoU1BJKSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IFN0YXR1cw0KKy8vIC0tLS0tLS0tIFNQSV9TUiA6IChTUEkgT2Zmc2V0OiAweDEwKSBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TUElfUkRSRiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFNQSSkgUmVjZWl2ZSBEYXRhIFJlZ2lzdGVyIEZ1bGwNCisjZGVmaW5lIEFUOTFDX1NQSV9URFJFICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoU1BJKSBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyIEVtcHR5DQorI2RlZmluZSBBVDkxQ19TUElfTU9ERiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFNQSSkgTW9kZSBGYXVsdCBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfU1BJX09WUkVTICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChTUEkpIE92ZXJydW4gRXJyb3IgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19TUElfRU5EUlggICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFNQSSkgRW5kIG9mIFJlY2VpdmVyIFRyYW5zZmVyDQorI2RlZmluZSBBVDkxQ19TUElfRU5EVFggICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKFNQSSkgRW5kIG9mIFJlY2VpdmVyIFRyYW5zZmVyDQorI2RlZmluZSBBVDkxQ19TUElfUlhCVUZGICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLy8gKFNQSSkgUlhCVUZGIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfU1BJX1RYQlVGRSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChTUEkpIFRYQlVGRSBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1NQSV9OU1NSICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoU1BJKSBOU1NSIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfU1BJX1RYRU1QVFkgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChTUEkpIFRYRU1QVFkgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19TUElfU1BJRU5TICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKFNQSSkgRW5hYmxlIFN0YXR1cw0KKy8vIC0tLS0tLS0tIFNQSV9JRVIgOiAoU1BJIE9mZnNldDogMHgxNCkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBTUElfSURSIDogKFNQSSBPZmZzZXQ6IDB4MTgpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFNQSV9JTVIgOiAoU1BJIE9mZnNldDogMHgxYykgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gU1BJX0NTUiA6IChTUEkgT2Zmc2V0OiAweDMwKSBDaGlwIFNlbGVjdCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NQSV9DUE9MICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoU1BJKSBDbG9jayBQb2xhcml0eQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX05DUEhBICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChTUEkpIENsb2NrIFBoYXNlDQorI2RlZmluZSBBVDkxQ19TUElfQ1NBQVQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFNQSSkgQ2hpcCBTZWxlY3QgQWN0aXZlIEFmdGVyIFRyYW5zZmVyDQorI2RlZmluZSBBVDkxQ19TUElfQklUUyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAgNCkgLy8gKFNQSSkgQml0cyBQZXIgVHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TUElfQklUU184ICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA0KSAvLyAoU1BJKSA4IEJpdHMgUGVyIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1BJX0JJVFNfOSAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFNQSSkgOSBCaXRzIFBlciB0cmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NQSV9CSVRTXzEwICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDQpIC8vIChTUEkpIDEwIEJpdHMgUGVyIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1BJX0JJVFNfMTEgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgNCkgLy8gKFNQSSkgMTEgQml0cyBQZXIgdHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TUElfQklUU18xMiAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg0IDw8ICA0KSAvLyAoU1BJKSAxMiBCaXRzIFBlciB0cmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NQSV9CSVRTXzEzICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDUgPDwgIDQpIC8vIChTUEkpIDEzIEJpdHMgUGVyIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1BJX0JJVFNfMTQgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NiA8PCAgNCkgLy8gKFNQSSkgMTQgQml0cyBQZXIgdHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TUElfQklUU18xNSAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8ICA0KSAvLyAoU1BJKSAxNSBCaXRzIFBlciB0cmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NQSV9CSVRTXzE2ICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDggPDwgIDQpIC8vIChTUEkpIDE2IEJpdHMgUGVyIHRyYW5zZmVyDQorI2RlZmluZSBBVDkxQ19TUElfU0NCUiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgIDgpIC8vIChTUEkpIFNlcmlhbCBDbG9jayBCYXVkIFJhdGUNCisjZGVmaW5lIEFUOTFDX1NQSV9ETFlCUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRiA8PCAxNikgLy8gKFNQSSkgU2VyaWFsIENsb2NrIEJhdWQgUmF0ZQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX0RMWUJDVCAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8IDI0KSAvLyAoU1BJKSBEZWxheSBCZXR3ZWVuIENvbnNlY3V0aXZlIFRyYW5zZmVycw0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQW5hbG9nIHRvIERpZ2l0YWwgQ29udmVydG9yICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfQURDDQotew0KLSAgICBBVDkxX1JFRyBBRENfQ1I7ICAgICAgICAgIC8qIEFEQyBDb250cm9sIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFEQ19NUjsgICAgICAgICAgLyogQURDIE1vZGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQwWyAyIF07ICAvKiAqLw0KLSAgICBBVDkxX1JFRyBBRENfQ0hFUjsgICAgICAgIC8qIEFEQyBDaGFubmVsIEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBRENfQ0hEUjsgICAgICAgIC8qIEFEQyBDaGFubmVsIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQURDX0NIU1I7ICAgICAgICAvKiBBREMgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQURDX1NSOyAgICAgICAgICAvKiBBREMgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFEQ19MQ0RSOyAgICAgICAgLyogQURDIExhc3QgQ29udmVydGVkIERhdGEgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQURDX0lFUjsgICAgICAgICAvKiBBREMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBRENfSURSOyAgICAgICAgIC8qIEFEQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBRENfSU1SOyAgICAgICAgIC8qIEFEQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBRENfQ0RSMDsgICAgICAgIC8qIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMCAqLw0KLSAgICBBVDkxX1JFRyBBRENfQ0RSMTsgICAgICAgIC8qIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMSAqLw0KLSAgICBBVDkxX1JFRyBBRENfQ0RSMjsgICAgICAgIC8qIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMiAqLw0KLSAgICBBVDkxX1JFRyBBRENfQ0RSMzsgICAgICAgIC8qIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMyAqLw0KLSAgICBBVDkxX1JFRyBBRENfQ0RSNDsgICAgICAgIC8qIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNCAqLw0KLSAgICBBVDkxX1JFRyBBRENfQ0RSNTsgICAgICAgIC8qIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNSAqLw0KLSAgICBBVDkxX1JFRyBBRENfQ0RSNjsgICAgICAgIC8qIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNiAqLw0KLSAgICBBVDkxX1JFRyBBRENfQ0RSNzsgICAgICAgIC8qIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNyAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDFbIDQ0IF07IC8qICovDQotICAgIEFUOTFfUkVHIEFEQ19SUFI7ICAgICAgICAgLyogUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFEQ19SQ1I7ICAgICAgICAgLyogUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFEQ19UUFI7ICAgICAgICAgLyogVHJhbnNtaXQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBRENfVENSOyAgICAgICAgIC8qIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQURDX1JOUFI7ICAgICAgICAvKiBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBRENfUk5DUjsgICAgICAgIC8qIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFEQ19UTlBSOyAgICAgICAgLyogVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFEQ19UTkNSOyAgICAgICAgLyogVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFEQ19QVENSOyAgICAgICAgLyogUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQURDX1BUU1I7ICAgICAgICAvKiBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotfSBBVDkxU19BREMsICogQVQ5MVBTX0FEQzsNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIEFuYWxvZyB0byBEaWdpdGFsIENvbnZlcnRvcg0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX0FEQyB7DQorCUFUOTFfUkVHCSBBRENfQ1I7IAkvLyBBREMgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX01SOyAJLy8gQURDIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFsyXTsgCS8vIA0KKwlBVDkxX1JFRwkgQURDX0NIRVI7IAkvLyBBREMgQ2hhbm5lbCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19DSERSOyAJLy8gQURDIENoYW5uZWwgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX0NIU1I7IAkvLyBBREMgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19TUjsgCS8vIEFEQyBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19MQ0RSOyAJLy8gQURDIExhc3QgQ29udmVydGVkIERhdGEgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19JRVI7IAkvLyBBREMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX0lEUjsgCS8vIEFEQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX0lNUjsgCS8vIEFEQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX0NEUjA7IAkvLyBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDANCisJQVQ5MV9SRUcJIEFEQ19DRFIxOyAJLy8gQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAxDQorCUFUOTFfUkVHCSBBRENfQ0RSMjsgCS8vIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMg0KKwlBVDkxX1JFRwkgQURDX0NEUjM7IAkvLyBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDMNCisJQVQ5MV9SRUcJIEFEQ19DRFI0OyAJLy8gQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA0DQorCUFUOTFfUkVHCSBBRENfQ0RSNTsgCS8vIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNQ0KKwlBVDkxX1JFRwkgQURDX0NEUjY7IAkvLyBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDYNCisJQVQ5MV9SRUcJIEFEQ19DRFI3OyAJLy8gQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA3DQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbNDRdOyAJLy8gDQorCUFUOTFfUkVHCSBBRENfUlBSOyAJLy8gUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfUkNSOyAJLy8gUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfVFBSOyAJLy8gVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX1RDUjsgCS8vIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19STlBSOyAJLy8gUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19STkNSOyAJLy8gUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19UTlBSOyAJLy8gVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfVE5DUjsgCS8vIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX1BUQ1I7IAkvLyBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX1BUU1I7IAkvLyBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorfSBBVDkxU19BREMsICpBVDkxUFNfQURDOw0KIA0KLS8qIC0tLS0tLS0tIEFEQ19DUiA6IChBREMgT2Zmc2V0OiAweDApIEFEQyBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19BRENfU1dSU1QgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgLyogKEFEQykgU29mdHdhcmUgUmVzZXQgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19TVEFSVCAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgICAvKiAoQURDKSBTdGFydCBDb252ZXJzaW9uICovDQotLyogLS0tLS0tLS0gQURDX01SIDogKEFEQyBPZmZzZXQ6IDB4NCkgQURDIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19UUkdFTiAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgICAvKiAoQURDKSBUcmlnZ2VyIEVuYWJsZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FEQ19UUkdFTl9ESVMgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwICkgICAgICAgIC8qIChBREMpIEhyYWR3YXJlIHRyaWdnZXJzIGFyZSBkaXNhYmxlZC4gU3RhcnRpbmcgYSBjb252ZXJzaW9uIGlzIG9ubHkgcG9zc2libGUgYnkgc29mdHdhcmUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRENfVFJHRU5fRU4gICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSApICAgICAgICAvKiAoQURDKSBIYXJkd2FyZSB0cmlnZ2VyIHNlbGVjdGVkIGJ5IFRSR1NFTCBmaWVsZCBpcyBlbmFibGVkLiAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1RSR1NFTCAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg3IDw8IDEgKSAgIC8qIChBREMpIFRyaWdnZXIgU2VsZWN0aW9uICovDQotI2RlZmluZSAgICAgQVQ5MUNfQURDX1RSR1NFTF9USU9BMCAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMSApICAgLyogKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gVElBTzAgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRENfVFJHU0VMX1RJT0ExICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgICAvKiAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPMSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FEQ19UUkdTRUxfVElPQTIgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDEgKSAgIC8qIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IFRJQU8yICovDQotI2RlZmluZSAgICAgQVQ5MUNfQURDX1RSR1NFTF9USU9BMyAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMSApICAgLyogKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gVElBTzMgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRENfVFJHU0VMX1RJT0E0ICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NCA8PCAxICkgICAvKiAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPNCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FEQ19UUkdTRUxfVElPQTUgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg1IDw8IDEgKSAgIC8qIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IFRJQU81ICovDQotI2RlZmluZSAgICAgQVQ5MUNfQURDX1RSR1NFTF9FWFQgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDYgPDwgMSApICAgLyogKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gRXh0ZXJuYWwgVHJpZ2dlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0xPV1JFUyAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDQgKSAgIC8qIChBREMpIFJlc29sdXRpb24uICovDQotI2RlZmluZSAgICAgQVQ5MUNfQURDX0xPV1JFU18xMF9CSVQgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgNCApICAgLyogKEFEQykgMTAtYml0IHJlc29sdXRpb24gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRENfTE9XUkVTXzhfQklUICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA0ICkgICAvKiAoQURDKSA4LWJpdCByZXNvbHV0aW9uICovDQotI2RlZmluZSBBVDkxQ19BRENfU0xFRVAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNSApICAgLyogKEFEQykgU2xlZXAgTW9kZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FEQ19TTEVFUF9OT1JNQUxfTU9ERSAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDUgKSAgIC8qIChBREMpIE5vcm1hbCBNb2RlICovDQotI2RlZmluZSAgICAgQVQ5MUNfQURDX1NMRUVQX01PREUgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNSApICAgLyogKEFEQykgU2xlZXAgTW9kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1BSRVNDQUwgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzRiA8PCA4ICkgIC8qIChBREMpIFByZXNjYWxlciByYXRlIHNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1NUQVJUVVAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxRiA8PCAxNiApIC8qIChBREMpIFN0YXJ0dXAgVGltZSAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1NIVElNICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGIDw8IDI0ICkgIC8qIChBREMpIFNhbXBsZSAmIEhvbGQgVGltZSAqLw0KLS8qIC0tLS0tLS0tICAgICBBRENfQ0hFUiA6IChBREMgT2Zmc2V0OiAweDEwKSBBREMgQ2hhbm5lbCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DSDAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgICAvKiAoQURDKSBDaGFubmVsIDAgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DSDEgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgICAvKiAoQURDKSBDaGFubmVsIDEgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DSDIgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyICkgICAvKiAoQURDKSBDaGFubmVsIDIgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DSDMgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzICkgICAvKiAoQURDKSBDaGFubmVsIDMgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DSDQgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA0ICkgICAvKiAoQURDKSBDaGFubmVsIDQgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DSDUgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA1ICkgICAvKiAoQURDKSBDaGFubmVsIDUgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DSDYgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA2ICkgICAvKiAoQURDKSBDaGFubmVsIDYgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DSDcgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA3ICkgICAvKiAoQURDKSBDaGFubmVsIDcgKi8NCi0vKiAtLS0tLS0tLSAgICAgQURDX0NIRFIgOiAoQURDIE9mZnNldDogMHgxNCkgQURDIENoYW5uZWwgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tICAgICBBRENfQ0hTUiA6IChBREMgT2Zmc2V0OiAweDE4KSBBREMgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBBRENfU1IgOiAoQURDIE9mZnNldDogMHgxYykgQURDIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0VPQzAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgIC8qIChBREMpIEVuZCBvZiBDb252ZXJzaW9uICovDQotI2RlZmluZSBBVDkxQ19BRENfRU9DMSAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAgLyogKEFEQykgRW5kIG9mIENvbnZlcnNpb24gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19FT0MyICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyICkgICAvKiAoQURDKSBFbmQgb2YgQ29udmVyc2lvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0VPQzMgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDMgKSAgIC8qIChBREMpIEVuZCBvZiBDb252ZXJzaW9uICovDQotI2RlZmluZSBBVDkxQ19BRENfRU9DNCAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNCApICAgLyogKEFEQykgRW5kIG9mIENvbnZlcnNpb24gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19FT0M1ICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA1ICkgICAvKiAoQURDKSBFbmQgb2YgQ29udmVyc2lvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0VPQzYgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDYgKSAgIC8qIChBREMpIEVuZCBvZiBDb252ZXJzaW9uICovDQotI2RlZmluZSBBVDkxQ19BRENfRU9DNyAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNyApICAgLyogKEFEQykgRW5kIG9mIENvbnZlcnNpb24gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19PVlJFMCAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgICAvKiAoQURDKSBPdmVycnVuIEVycm9yICovDQotI2RlZmluZSBBVDkxQ19BRENfT1ZSRTEgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOSApICAgLyogKEFEQykgT3ZlcnJ1biBFcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX09WUkUyICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEwICkgIC8qIChBREMpIE92ZXJydW4gRXJyb3IgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19PVlJFMyAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMSApICAvKiAoQURDKSBPdmVycnVuIEVycm9yICovDQotI2RlZmluZSBBVDkxQ19BRENfT1ZSRTQgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTIgKSAgLyogKEFEQykgT3ZlcnJ1biBFcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX09WUkU1ICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEzICkgIC8qIChBREMpIE92ZXJydW4gRXJyb3IgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19PVlJFNiAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNCApICAvKiAoQURDKSBPdmVycnVuIEVycm9yICovDQotI2RlZmluZSBBVDkxQ19BRENfT1ZSRTcgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTUgKSAgLyogKEFEQykgT3ZlcnJ1biBFcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0RSRFkgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE2ICkgIC8qIChBREMpIERhdGEgUmVhZHkgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19HT1ZSRSAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNyApICAvKiAoQURDKSBHZW5lcmFsIE92ZXJydW4gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19FTkRSWCAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxOCApICAvKiAoQURDKSBFbmQgb2YgUmVjZWl2ZXIgVHJhbnNmZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19SWEJVRkYgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxOSApICAvKiAoQURDKSBSWEJVRkYgSW50ZXJydXB0ICovDQotLyogLS0tLS0tLS0gQURDX0xDRFIgOiAoQURDIE9mZnNldDogMHgyMCkgQURDIExhc3QgQ29udmVydGVkIERhdGEgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19MREFUQSAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4M0ZGIDw8IDAgKSAvKiAoQURDKSBMYXN0IERhdGEgQ29udmVydGVkICovDQotLyogLS0tLS0tLS0gQURDX0lFUiA6IChBREMgT2Zmc2V0OiAweDI0KSBBREMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIEFEQ19JRFIgOiAoQURDIE9mZnNldDogMHgyOCkgQURDIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQURDX0lNUiA6IChBREMgT2Zmc2V0OiAweDJjKSBBREMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBBRENfQ0RSMCA6IChBREMgT2Zmc2V0OiAweDMwKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDAgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19EQVRBICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDNGRiA8PCAwICkgIC8qIChBREMpIENvbnZlcnRlZCBEYXRhICovDQotLyogLS0tLS0tLS0gQURDX0NEUjEgOiAoQURDIE9mZnNldDogMHgzNCkgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAxIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQURDX0NEUjIgOiAoQURDIE9mZnNldDogMHgzOCkgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQURDX0NEUjMgOiAoQURDIE9mZnNldDogMHgzYykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAzIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQURDX0NEUjQgOiAoQURDIE9mZnNldDogMHg0MCkgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA0IC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQURDX0NEUjUgOiAoQURDIE9mZnNldDogMHg0NCkgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA1IC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQURDX0NEUjYgOiAoQURDIE9mZnNldDogMHg0OCkgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA2IC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQURDX0NEUjcgOiAoQURDIE9mZnNldDogMHg0YykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA3IC0tLS0tLS0tICovDQorLy8gLS0tLS0tLS0gQURDX0NSIDogKEFEQyBPZmZzZXQ6IDB4MCkgQURDIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BRENfU1dSU1QgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKEFEQykgU29mdHdhcmUgUmVzZXQNCisjZGVmaW5lIEFUOTFDX0FEQ19TVEFSVCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoQURDKSBTdGFydCBDb252ZXJzaW9uDQorLy8gLS0tLS0tLS0gQURDX01SIDogKEFEQyBPZmZzZXQ6IDB4NCkgQURDIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BRENfVFJHRU4gICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKEFEQykgVHJpZ2dlciBFbmFibGUNCisjZGVmaW5lIAlBVDkxQ19BRENfVFJHRU5fRElTICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCkgLy8gKEFEQykgSHJhZHdhcmUgdHJpZ2dlcnMgYXJlIGRpc2FibGVkLiBTdGFydGluZyBhIGNvbnZlcnNpb24gaXMgb25seSBwb3NzaWJsZSBieSBzb2Z0d2FyZQ0KKyNkZWZpbmUgCUFUOTFDX0FEQ19UUkdFTl9FTiAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxKSAvLyAoQURDKSBIYXJkd2FyZSB0cmlnZ2VyIHNlbGVjdGVkIGJ5IFRSR1NFTCBmaWVsZCBpcyBlbmFibGVkLg0KKyNkZWZpbmUgQVQ5MUNfQURDX1RSR1NFTCAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgIDEpIC8vIChBREMpIFRyaWdnZXIgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfQURDX1RSR1NFTF9USU9BMCAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICAxKSAvLyAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPMA0KKyNkZWZpbmUgCUFUOTFDX0FEQ19UUkdTRUxfVElPQTEgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gVElBTzENCisjZGVmaW5lIAlBVDkxQ19BRENfVFJHU0VMX1RJT0EyICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDEpIC8vIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IFRJQU8yDQorI2RlZmluZSAJQVQ5MUNfQURDX1RSR1NFTF9USU9BMyAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICAxKSAvLyAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPMw0KKyNkZWZpbmUgCUFUOTFDX0FEQ19UUkdTRUxfVElPQTQgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NCA8PCAgMSkgLy8gKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gVElBTzQNCisjZGVmaW5lIAlBVDkxQ19BRENfVFJHU0VMX1RJT0E1ICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDUgPDwgIDEpIC8vIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IFRJQU81DQorI2RlZmluZSAJQVQ5MUNfQURDX1RSR1NFTF9FWFQgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg2IDw8ICAxKSAvLyAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBFeHRlcm5hbCBUcmlnZ2VyDQorI2RlZmluZSBBVDkxQ19BRENfTE9XUkVTICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKEFEQykgUmVzb2x1dGlvbi4NCisjZGVmaW5lIAlBVDkxQ19BRENfTE9XUkVTXzEwX0JJVCAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDQpIC8vIChBREMpIDEwLWJpdCByZXNvbHV0aW9uDQorI2RlZmluZSAJQVQ5MUNfQURDX0xPV1JFU184X0JJVCAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoQURDKSA4LWJpdCByZXNvbHV0aW9uDQorI2RlZmluZSBBVDkxQ19BRENfU0xFRVAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKEFEQykgU2xlZXAgTW9kZQ0KKyNkZWZpbmUgCUFUOTFDX0FEQ19TTEVFUF9OT1JNQUxfTU9ERSAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA1KSAvLyAoQURDKSBOb3JtYWwgTW9kZQ0KKyNkZWZpbmUgCUFUOTFDX0FEQ19TTEVFUF9NT0RFICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoQURDKSBTbGVlcCBNb2RlDQorI2RlZmluZSBBVDkxQ19BRENfUFJFU0NBTCAgICAgKCh1bnNpZ25lZCBpbnQpIDB4M0YgPDwgIDgpIC8vIChBREMpIFByZXNjYWxlciByYXRlIHNlbGVjdGlvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX1NUQVJUVVAgICAgICgodW5zaWduZWQgaW50KSAweDFGIDw8IDE2KSAvLyAoQURDKSBTdGFydHVwIFRpbWUNCisjZGVmaW5lIEFUOTFDX0FEQ19TSFRJTSAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8IDI0KSAvLyAoQURDKSBTYW1wbGUgJiBIb2xkIFRpbWUNCisvLyAtLS0tLS0tLSAJQURDX0NIRVIgOiAoQURDIE9mZnNldDogMHgxMCkgQURDIENoYW5uZWwgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQURDX0NIMCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChBREMpIENoYW5uZWwgMA0KKyNkZWZpbmUgQVQ5MUNfQURDX0NIMSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChBREMpIENoYW5uZWwgMQ0KKyNkZWZpbmUgQVQ5MUNfQURDX0NIMiAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChBREMpIENoYW5uZWwgMg0KKyNkZWZpbmUgQVQ5MUNfQURDX0NIMyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChBREMpIENoYW5uZWwgMw0KKyNkZWZpbmUgQVQ5MUNfQURDX0NINCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChBREMpIENoYW5uZWwgNA0KKyNkZWZpbmUgQVQ5MUNfQURDX0NINSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChBREMpIENoYW5uZWwgNQ0KKyNkZWZpbmUgQVQ5MUNfQURDX0NINiAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChBREMpIENoYW5uZWwgNg0KKyNkZWZpbmUgQVQ5MUNfQURDX0NINyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChBREMpIENoYW5uZWwgNw0KKy8vIC0tLS0tLS0tIAlBRENfQ0hEUiA6IChBREMgT2Zmc2V0OiAweDE0KSBBREMgQ2hhbm5lbCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIAlBRENfQ0hTUiA6IChBREMgT2Zmc2V0OiAweDE4KSBBREMgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX1NSIDogKEFEQyBPZmZzZXQ6IDB4MWMpIEFEQyBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BRENfRU9DMCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKEFEQykgRW5kIG9mIENvbnZlcnNpb24NCisjZGVmaW5lIEFUOTFDX0FEQ19FT0MxICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoQURDKSBFbmQgb2YgQ29udmVyc2lvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX0VPQzIgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19BRENfRU9DMyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKEFEQykgRW5kIG9mIENvbnZlcnNpb24NCisjZGVmaW5lIEFUOTFDX0FEQ19FT0M0ICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoQURDKSBFbmQgb2YgQ29udmVyc2lvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX0VPQzUgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19BRENfRU9DNiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLy8gKEFEQykgRW5kIG9mIENvbnZlcnNpb24NCisjZGVmaW5lIEFUOTFDX0FEQ19FT0M3ICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoQURDKSBFbmQgb2YgQ29udmVyc2lvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX09WUkUwICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChBREMpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX0FEQ19PVlJFMSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvLyAoQURDKSBPdmVycnVuIEVycm9yDQorI2RlZmluZSBBVDkxQ19BRENfT1ZSRTIgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLy8gKEFEQykgT3ZlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQURDX09WUkUzICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTEpIC8vIChBREMpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX0FEQ19PVlJFNCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvLyAoQURDKSBPdmVycnVuIEVycm9yDQorI2RlZmluZSBBVDkxQ19BRENfT1ZSRTUgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMykgLy8gKEFEQykgT3ZlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQURDX09WUkU2ICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTQpIC8vIChBREMpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX0FEQ19PVlJFNyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE1KSAvLyAoQURDKSBPdmVycnVuIEVycm9yDQorI2RlZmluZSBBVDkxQ19BRENfRFJEWSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKEFEQykgRGF0YSBSZWFkeQ0KKyNkZWZpbmUgQVQ5MUNfQURDX0dPVlJFICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTcpIC8vIChBREMpIEdlbmVyYWwgT3ZlcnJ1bg0KKyNkZWZpbmUgQVQ5MUNfQURDX0VORFJYICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTgpIC8vIChBREMpIEVuZCBvZiBSZWNlaXZlciBUcmFuc2Zlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1JYQlVGRiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTkpIC8vIChBREMpIFJYQlVGRiBJbnRlcnJ1cHQNCisvLyAtLS0tLS0tLSBBRENfTENEUiA6IChBREMgT2Zmc2V0OiAweDIwKSBBREMgTGFzdCBDb252ZXJ0ZWQgRGF0YSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FEQ19MREFUQSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzRkYgPDwgIDApIC8vIChBREMpIExhc3QgRGF0YSBDb252ZXJ0ZWQNCisvLyAtLS0tLS0tLSBBRENfSUVSIDogKEFEQyBPZmZzZXQ6IDB4MjQpIEFEQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19JRFIgOiAoQURDIE9mZnNldDogMHgyOCkgQURDIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19JTVIgOiAoQURDIE9mZnNldDogMHgyYykgQURDIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19DRFIwIDogKEFEQyBPZmZzZXQ6IDB4MzApIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMCAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FEQ19EQVRBICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzRkYgPDwgIDApIC8vIChBREMpIENvbnZlcnRlZCBEYXRhDQorLy8gLS0tLS0tLS0gQURDX0NEUjEgOiAoQURDIE9mZnNldDogMHgzNCkgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAxIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19DRFIyIDogKEFEQyBPZmZzZXQ6IDB4MzgpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMiAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRENfQ0RSMyA6IChBREMgT2Zmc2V0OiAweDNjKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDMgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX0NEUjQgOiAoQURDIE9mZnNldDogMHg0MCkgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA0IC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19DRFI1IDogKEFEQyBPZmZzZXQ6IDB4NDQpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNSAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRENfQ0RSNiA6IChBREMgT2Zmc2V0OiAweDQ4KSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDYgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX0NEUjcgOiAoQURDIE9mZnNldDogMHg0YykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA3IC0tLS0tLS0tIA0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgU3luY2hyb25vdXMgU2VyaWFsIENvbnRyb2xsZXIgSW50ZXJmYWNlICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfU1NDDQotew0KLSAgICBBVDkxX1JFRyBTU0NfQ1I7ICAgICAgICAgIC8qIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1NDX0NNUjsgICAgICAgICAvKiBDbG9jayBNb2RlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMFsgMiBdOyAgLyogKi8NCi0gICAgQVQ5MV9SRUcgU1NDX1JDTVI7ICAgICAgICAvKiBSZWNlaXZlIENsb2NrIE1vZGVSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTU0NfUkZNUjsgICAgICAgIC8qIFJlY2VpdmUgRnJhbWUgTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTU0NfVENNUjsgICAgICAgIC8qIFRyYW5zbWl0IENsb2NrIE1vZGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1NDX1RGTVI7ICAgICAgICAvKiBUcmFuc21pdCBGcmFtZSBNb2RlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNTQ19SSFI7ICAgICAgICAgLyogUmVjZWl2ZSBIb2xkaW5nIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNTQ19USFI7ICAgICAgICAgLyogVHJhbnNtaXQgSG9sZGluZyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDFbIDIgXTsgIC8qICovDQotICAgIEFUOTFfUkVHIFNTQ19SU0hSOyAgICAgICAgLyogUmVjZWl2ZSBTeW5jIEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1NDX1RTSFI7ICAgICAgICAvKiBUcmFuc21pdCBTeW5jIEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1NDX1JDMFI7ICAgICAgICAvKiBSZWNlaXZlIENvbXBhcmUgMCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTU0NfUkMxUjsgICAgICAgIC8qIFJlY2VpdmUgQ29tcGFyZSAxIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNTQ19TUjsgICAgICAgICAgLyogU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNTQ19JRVI7ICAgICAgICAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTU0NfSURSOyAgICAgICAgIC8qIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNTQ19JTVI7ICAgICAgICAgLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQyWyA0NCBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBTU0NfUlBSOyAgICAgICAgIC8qIFJlY2VpdmUgUG9pbnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTU0NfUkNSOyAgICAgICAgIC8qIFJlY2VpdmUgQ291bnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTU0NfVFBSOyAgICAgICAgIC8qIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1NDX1RDUjsgICAgICAgICAvKiBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNTQ19STlBSOyAgICAgICAgLyogUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1NDX1JOQ1I7ICAgICAgICAvKiBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTU0NfVE5QUjsgICAgICAgIC8qIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTU0NfVE5DUjsgICAgICAgIC8qIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTU0NfUFRDUjsgICAgICAgIC8qIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNTQ19QVFNSOyAgICAgICAgLyogUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLX0gQVQ5MVNfU1NDLCAqIEFUOTFQU19TU0M7DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBTeW5jaHJvbm91cyBTZXJpYWwgQ29udHJvbGxlciBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19TU0Mgew0KKwlBVDkxX1JFRwkgU1NDX0NSOyAJLy8gQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX0NNUjsgCS8vIENsb2NrIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFsyXTsgCS8vIA0KKwlBVDkxX1JFRwkgU1NDX1JDTVI7IAkvLyBSZWNlaXZlIENsb2NrIE1vZGVSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1JGTVI7IAkvLyBSZWNlaXZlIEZyYW1lIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19UQ01SOyAJLy8gVHJhbnNtaXQgQ2xvY2sgTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1RGTVI7IAkvLyBUcmFuc21pdCBGcmFtZSBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfUkhSOyAJLy8gUmVjZWl2ZSBIb2xkaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfVEhSOyAJLy8gVHJhbnNtaXQgSG9sZGluZyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzJdOyAJLy8gDQorCUFUOTFfUkVHCSBTU0NfUlNIUjsgCS8vIFJlY2VpdmUgU3luYyBIb2xkaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfVFNIUjsgCS8vIFRyYW5zbWl0IFN5bmMgSG9sZGluZyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1JDMFI7IAkvLyBSZWNlaXZlIENvbXBhcmUgMCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1JDMVI7IAkvLyBSZWNlaXZlIENvbXBhcmUgMSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1NSOyAJLy8gU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX0lEUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMls0NF07IAkvLyANCisJQVQ5MV9SRUcJIFNTQ19SUFI7IAkvLyBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19SQ1I7IAkvLyBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19UUFI7IAkvLyBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfVENSOyAJLy8gVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1JOUFI7IAkvLyBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1JOQ1I7IAkvLyBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1ROUFI7IAkvLyBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19UTkNSOyAJLy8gVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfUFRDUjsgCS8vIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfUFRTUjsgCS8vIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCit9IEFUOTFTX1NTQywgKkFUOTFQU19TU0M7DQogDQotLyogLS0tLS0tLS0gU1NDX0NSIDogKFNTQyBPZmZzZXQ6IDB4MCkgU1NDIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19SWEVOICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgLyogKFNTQykgUmVjZWl2ZSBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19SWERJUyAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAgLyogKFNTQykgUmVjZWl2ZSBEaXNhYmxlICovDQotI2RlZmluZSBBVDkxQ19TU0NfVFhFTiAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDggKSAgIC8qIChTU0MpIFRyYW5zbWl0IEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1RYRElTICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA5ICkgICAvKiAoU1NDKSBUcmFuc21pdCBEaXNhYmxlICovDQotI2RlZmluZSBBVDkxQ19TU0NfU1dSU1QgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE1ICkgIC8qIChTU0MpIFNvZnR3YXJlIFJlc2V0ICovDQotLyogLS0tLS0tLS0gU1NDX1JDTVIgOiAoU1NDIE9mZnNldDogMHgxMCkgU1NDIFJlY2VpdmUgQ2xvY2sgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0NLUyAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAwICkgICAvKiAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19DS1NfRElWICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCApICAgICAgICAvKiAoU1NDKSBEaXZpZGVkIENsb2NrICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX0NLU19USyAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxICkgICAgICAgIC8qIChTU0MpIFRLIENsb2NrIHNpZ25hbCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19DS1NfUksgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiApICAgICAgICAvKiAoU1NDKSBSSyBwaW4gKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19DS08gICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDcgPDwgMiApICAgLyogKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBPdXRwdXQgTW9kZSBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfQ0tPX05PTkUgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMiApICAgLyogKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBPdXRwdXQgTW9kZTogTm9uZSBSSyBwaW46IElucHV0LW9ubHkgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfQ0tPX0NPTlRJTk9VUyAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMiApICAgLyogKFNTQykgQ29udGludW91cyBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIFJLIHBpbjogT3V0cHV0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX0NLT19EQVRBX1RYICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDIgKSAgIC8qIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgb25seSBkdXJpbmcgZGF0YSB0cmFuc2ZlcnMgUksgcGluOiBPdXRwdXQgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19DS0kgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNSApICAgLyogKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBJbnZlcnNpb24gKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19DS0cgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgNiApICAgLyogKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBHYXRpbmcgU2VsZWN0aW9uICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX0NLR19OT05FICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDYgKSAgIC8qIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgR2F0aW5nOiBOb25lLCBjb250aW51b3VzIGNsb2NrICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX0NLR19MT1cgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDYgKSAgIC8qIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgZW5hYmxlZCBvbmx5IGlmIFJGIExvdyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19DS0dfSElHSCAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCA2ICkgICAvKiAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIGVuYWJsZWQgb25seSBpZiBSRiBIaWdoICovDQotI2RlZmluZSBBVDkxQ19TU0NfU1RBUlQgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGIDw8IDggKSAgIC8qIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgU3RhcnQgU2VsZWN0aW9uICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX1NUQVJUX0NPTlRJTk9VUyAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDggKSAgIC8qIChTU0MpIENvbnRpbnVvdXMsIGFzIHNvb24gYXMgdGhlIHJlY2VpdmVyIGlzIGVuYWJsZWQsIGFuZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgZW5kIG9mIHRyYW5zZmVyIG9mIHRoZSBwcmV2aW91cyBkYXRhLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19TVEFSVF9UWCAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgICAvKiAoU1NDKSBUcmFuc21pdC9SZWNlaXZlIHN0YXJ0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX1NUQVJUX0xPV19SRiAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDggKSAgIC8qIChTU0MpIERldGVjdGlvbiBvZiBhIGxvdyBsZXZlbCBvbiBSRiBpbnB1dCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19TVEFSVF9ISUdIX1JGICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCA4ICkgICAvKiAoU1NDKSBEZXRlY3Rpb24gb2YgYSBoaWdoIGxldmVsIG9uIFJGIGlucHV0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX1NUQVJUX0ZBTExfUkYgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg0IDw8IDggKSAgIC8qIChTU0MpIERldGVjdGlvbiBvZiBhIGZhbGxpbmcgZWRnZSBvbiBSRiBpbnB1dCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19TVEFSVF9SSVNFX1JGICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NSA8PCA4ICkgICAvKiAoU1NDKSBEZXRlY3Rpb24gb2YgYSByaXNpbmcgZWRnZSBvbiBSRiBpbnB1dCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19TVEFSVF9MRVZFTF9SRiAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NiA8PCA4ICkgICAvKiAoU1NDKSBEZXRlY3Rpb24gb2YgYW55IGxldmVsIGNoYW5nZSBvbiBSRiBpbnB1dCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19TVEFSVF9FREdFX1JGICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NyA8PCA4ICkgICAvKiAoU1NDKSBEZXRlY3Rpb24gb2YgYW55IGVkZ2Ugb24gUkYgaW5wdXQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfU1RBUlRfMCAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDggPDwgOCApICAgLyogKFNTQykgQ29tcGFyZSAwICovDQotI2RlZmluZSBBVDkxQ19TU0NfU1RPUCAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEyICkgIC8qIChTU0MpIFJlY2VpdmUgU3RvcCBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19TVFRPVVQgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTUgKSAgLyogKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBTdGFydCBPdXRwdXQgU2VsZWN0aW9uICovDQotI2RlZmluZSBBVDkxQ19TU0NfU1RURExZICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRiA8PCAxNiApIC8qIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgU3RhcnQgRGVsYXkgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19QRVJJT0QgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGIDw8IDI0ICkgLyogKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBQZXJpb2QgRGl2aWRlciBTZWxlY3Rpb24gKi8NCi0vKiAtLS0tLS0tLSBTU0NfUkZNUiA6IChTU0MgT2Zmc2V0OiAweDE0KSBTU0MgUmVjZWl2ZSBGcmFtZSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19TU0NfREFUTEVOICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxRiA8PCAwICkgIC8qIChTU0MpIERhdGEgTGVuZ3RoICovDQotI2RlZmluZSBBVDkxQ19TU0NfTE9PUCAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDUgKSAgIC8qIChTU0MpIExvb3AgTW9kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX01TQkYgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA3ICkgICAvKiAoU1NDKSBNb3N0IFNpZ25pZmljYW50IEJpdCBGaXJzdCAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0RBVE5CICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RiA8PCA4ICkgICAvKiAoU1NDKSBEYXRhIE51bWJlciBwZXIgRnJhbWUgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19GU0xFTiAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEYgPDwgMTYgKSAgLyogKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIGxlbmd0aCAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0ZTT1MgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NyA8PCAyMCApICAvKiAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgT3V0cHV0IFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19GU09TX05PTkUgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAyMCApICAvKiAoU1NDKSBTZWxlY3RlZCBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgU2lnbmFsOiBOb25lIFJLIHBpbiBJbnB1dC1vbmx5ICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX0ZTT1NfTkVHQVRJVkUgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIwICkgIC8qIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IE5lZ2F0aXZlIFB1bHNlICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX0ZTT1NfUE9TSVRJVkUgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDIwICkgIC8qIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IFBvc2l0aXZlIFB1bHNlICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX0ZTT1NfTE9XICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDIwICkgIC8qIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IERyaXZlciBMb3cgZHVyaW5nIGRhdGEgdHJhbnNmZXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfRlNPU19ISUdIICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDQgPDwgMjAgKSAgLyogKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogRHJpdmVyIEhpZ2ggZHVyaW5nIGRhdGEgdHJhbnNmZXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfRlNPU19UT0dHTEUgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDUgPDwgMjAgKSAgLyogKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogVG9nZ2xpbmcgYXQgZWFjaCBzdGFydCBvZiBkYXRhIHRyYW5zZmVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfRlNFREdFICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDI0ICkgIC8qIChTU0MpIEZyYW1lIFN5bmMgRWRnZSBEZXRlY3Rpb24gKi8NCi0vKiAtLS0tLS0tLSBTU0NfVENNUiA6IChTU0MgT2Zmc2V0OiAweDE4KSBTU0MgVHJhbnNtaXQgQ2xvY2sgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFNTQ19URk1SIDogKFNTQyBPZmZzZXQ6IDB4MWMpIFNTQyBUcmFuc21pdCBGcmFtZSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19TU0NfREFUREVGICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDUgKSAgLyogKFNTQykgRGF0YSBEZWZhdWx0IFZhbHVlICovDQotI2RlZmluZSBBVDkxQ19TU0NfRlNERU4gICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIzICkgLyogKFNTQykgRnJhbWUgU3luYyBEYXRhIEVuYWJsZSAqLw0KLS8qIC0tLS0tLS0tIFNTQ19TUiA6IChTU0MgT2Zmc2V0OiAweDQwKSBTU0MgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19TU0NfVFhSRFkgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgLyogKFNTQykgVHJhbnNtaXQgUmVhZHkgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19UWEVNUFRZICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAvKiAoU1NDKSBUcmFuc21pdCBFbXB0eSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0VORFRYICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyICkgIC8qIChTU0MpIEVuZCBPZiBUcmFuc21pc3Npb24gKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19UWEJVRkUgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMyApICAvKiAoU1NDKSBUcmFuc21pdCBCdWZmZXIgRW1wdHkgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19SWFJEWSAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNCApICAvKiAoU1NDKSBSZWNlaXZlIFJlYWR5ICovDQotI2RlZmluZSBBVDkxQ19TU0NfT1ZSVU4gICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDUgKSAgLyogKFNTQykgUmVjZWl2ZSBPdmVycnVuICovDQotI2RlZmluZSBBVDkxQ19TU0NfRU5EUlggICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDYgKSAgLyogKFNTQykgRW5kIG9mIFJlY2VwdGlvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1JYQlVGRiAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA3ICkgIC8qIChTU0MpIFJlY2VpdmUgQnVmZmVyIEZ1bGwgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19DUDAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOCApICAvKiAoU1NDKSBDb21wYXJlIDAgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19DUDEgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOSApICAvKiAoU1NDKSBDb21wYXJlIDEgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19UWFNZTiAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTAgKSAvKiAoU1NDKSBUcmFuc21pdCBTeW5jICovDQotI2RlZmluZSBBVDkxQ19TU0NfUlhTWU4gICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDExICkgLyogKFNTQykgUmVjZWl2ZSBTeW5jICovDQotI2RlZmluZSBBVDkxQ19TU0NfVFhFTkEgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE2ICkgLyogKFNTQykgVHJhbnNtaXQgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19TU0NfUlhFTkEgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE3ICkgLyogKFNTQykgUmVjZWl2ZSBFbmFibGUgKi8NCi0vKiAtLS0tLS0tLSBTU0NfSUVSIDogKFNTQyBPZmZzZXQ6IDB4NDQpIFNTQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gU1NDX0lEUiA6IChTU0MgT2Zmc2V0OiAweDQ4KSBTU0MgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBTU0NfSU1SIDogKFNTQyBPZmZzZXQ6IDB4NGMpIFNTQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSAqLw0KKy8vIC0tLS0tLS0tIFNTQ19DUiA6IChTU0MgT2Zmc2V0OiAweDApIFNTQyBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JYRU4gICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChTU0MpIFJlY2VpdmUgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19TU0NfUlhESVMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFNTQykgUmVjZWl2ZSBEaXNhYmxlDQorI2RlZmluZSBBVDkxQ19TU0NfVFhFTiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFNTQykgVHJhbnNtaXQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19TU0NfVFhESVMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLy8gKFNTQykgVHJhbnNtaXQgRGlzYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX1NXUlNUICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTUpIC8vIChTU0MpIFNvZnR3YXJlIFJlc2V0DQorLy8gLS0tLS0tLS0gU1NDX1JDTVIgOiAoU1NDIE9mZnNldDogMHgxMCkgU1NDIFJlY2VpdmUgQ2xvY2sgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NTQ19DS1MgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICAwKSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1NTQ19DS1NfRElWICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCkgLy8gKFNTQykgRGl2aWRlZCBDbG9jaw0KKyNkZWZpbmUgCUFUOTFDX1NTQ19DS1NfVEsgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSkgLy8gKFNTQykgVEsgQ2xvY2sgc2lnbmFsDQorI2RlZmluZSAJQVQ5MUNfU1NDX0NLU19SSyAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyKSAvLyAoU1NDKSBSSyBwaW4NCisjZGVmaW5lIEFUOTFDX1NTQ19DS08gICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8ICAyKSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIE91dHB1dCBNb2RlIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1NTQ19DS09fTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgMikgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBPdXRwdXQgTW9kZTogTm9uZSBSSyBwaW46IElucHV0LW9ubHkNCisjZGVmaW5lIAlBVDkxQ19TU0NfQ0tPX0NPTlRJTk9VUyAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChTU0MpIENvbnRpbnVvdXMgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBSSyBwaW46IE91dHB1dA0KKyNkZWZpbmUgCUFUOTFDX1NTQ19DS09fREFUQV9UWCAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgMikgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBvbmx5IGR1cmluZyBkYXRhIHRyYW5zZmVycyBSSyBwaW46IE91dHB1dA0KKyNkZWZpbmUgQVQ5MUNfU1NDX0NLSSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgSW52ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19TU0NfQ0tHICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgNikgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBHYXRpbmcgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfU1NDX0NLR19OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA2KSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIEdhdGluZzogTm9uZSwgY29udGludW91cyBjbG9jaw0KKyNkZWZpbmUgCUFUOTFDX1NTQ19DS0dfTE9XICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBlbmFibGVkIG9ubHkgaWYgUkYgTG93DQorI2RlZmluZSAJQVQ5MUNfU1NDX0NLR19ISUdIICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA2KSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIGVuYWJsZWQgb25seSBpZiBSRiBIaWdoDQorI2RlZmluZSBBVDkxQ19TU0NfU1RBUlQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAgOCkgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBTdGFydCBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfQ09OVElOT1VTICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgOCkgLy8gKFNTQykgQ29udGludW91cywgYXMgc29vbiBhcyB0aGUgcmVjZWl2ZXIgaXMgZW5hYmxlZCwgYW5kIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBlbmQgb2YgdHJhbnNmZXIgb2YgdGhlIHByZXZpb3VzIGRhdGEuDQorI2RlZmluZSAJQVQ5MUNfU1NDX1NUQVJUX1RYICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChTU0MpIFRyYW5zbWl0L1JlY2VpdmUgc3RhcnQNCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfTE9XX1JGICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgOCkgLy8gKFNTQykgRGV0ZWN0aW9uIG9mIGEgbG93IGxldmVsIG9uIFJGIGlucHV0DQorI2RlZmluZSAJQVQ5MUNfU1NDX1NUQVJUX0hJR0hfUkYgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDgpIC8vIChTU0MpIERldGVjdGlvbiBvZiBhIGhpZ2ggbGV2ZWwgb24gUkYgaW5wdXQNCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfRkFMTF9SRiAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NCA8PCAgOCkgLy8gKFNTQykgRGV0ZWN0aW9uIG9mIGEgZmFsbGluZyBlZGdlIG9uIFJGIGlucHV0DQorI2RlZmluZSAJQVQ5MUNfU1NDX1NUQVJUX1JJU0VfUkYgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDUgPDwgIDgpIC8vIChTU0MpIERldGVjdGlvbiBvZiBhIHJpc2luZyBlZGdlIG9uIFJGIGlucHV0DQorI2RlZmluZSAJQVQ5MUNfU1NDX1NUQVJUX0xFVkVMX1JGICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDYgPDwgIDgpIC8vIChTU0MpIERldGVjdGlvbiBvZiBhbnkgbGV2ZWwgY2hhbmdlIG9uIFJGIGlucHV0DQorI2RlZmluZSAJQVQ5MUNfU1NDX1NUQVJUX0VER0VfUkYgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgIDgpIC8vIChTU0MpIERldGVjdGlvbiBvZiBhbnkgZWRnZSBvbiBSRiBpbnB1dA0KKyNkZWZpbmUgCUFUOTFDX1NTQ19TVEFSVF8wICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg4IDw8ICA4KSAvLyAoU1NDKSBDb21wYXJlIDANCisjZGVmaW5lIEFUOTFDX1NTQ19TVE9QICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvLyAoU1NDKSBSZWNlaXZlIFN0b3AgU2VsZWN0aW9uDQorI2RlZmluZSBBVDkxQ19TU0NfU1RUT1VUICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNSkgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBTdGFydCBPdXRwdXQgU2VsZWN0aW9uDQorI2RlZmluZSBBVDkxQ19TU0NfU1RURExZICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgMTYpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgU3RhcnQgRGVsYXkNCisjZGVmaW5lIEFUOTFDX1NTQ19QRVJJT0QgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRiA8PCAyNCkgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBQZXJpb2QgRGl2aWRlciBTZWxlY3Rpb24NCisvLyAtLS0tLS0tLSBTU0NfUkZNUiA6IChTU0MgT2Zmc2V0OiAweDE0KSBTU0MgUmVjZWl2ZSBGcmFtZSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1NDX0RBVExFTiAgICAgICgodW5zaWduZWQgaW50KSAweDFGIDw8ICAwKSAvLyAoU1NDKSBEYXRhIExlbmd0aA0KKyNkZWZpbmUgQVQ5MUNfU1NDX0xPT1AgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChTU0MpIExvb3AgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX01TQkYgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChTU0MpIE1vc3QgU2lnbmlmaWNhbnQgQml0IEZpcnN0DQorI2RlZmluZSBBVDkxQ19TU0NfREFUTkIgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAgOCkgLy8gKFNTQykgRGF0YSBOdW1iZXIgcGVyIEZyYW1lDQorI2RlZmluZSBBVDkxQ19TU0NfRlNMRU4gICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAxNikgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIGxlbmd0aA0KKyNkZWZpbmUgQVQ5MUNfU1NDX0ZTT1MgICAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgMjApIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBPdXRwdXQgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfU1NDX0ZTT1NfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAyMCkgLy8gKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogTm9uZSBSSyBwaW4gSW5wdXQtb25seQ0KKyNkZWZpbmUgCUFUOTFDX1NTQ19GU09TX05FR0FUSVZFICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjApIC8vIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IE5lZ2F0aXZlIFB1bHNlDQorI2RlZmluZSAJQVQ5MUNfU1NDX0ZTT1NfUE9TSVRJVkUgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAyMCkgLy8gKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogUG9zaXRpdmUgUHVsc2UNCisjZGVmaW5lIAlBVDkxQ19TU0NfRlNPU19MT1cgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDIwKSAvLyAoU1NDKSBTZWxlY3RlZCBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgU2lnbmFsOiBEcml2ZXIgTG93IGR1cmluZyBkYXRhIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1NDX0ZTT1NfSElHSCAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NCA8PCAyMCkgLy8gKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogRHJpdmVyIEhpZ2ggZHVyaW5nIGRhdGEgdHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TU0NfRlNPU19UT0dHTEUgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg1IDw8IDIwKSAvLyAoU1NDKSBTZWxlY3RlZCBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgU2lnbmFsOiBUb2dnbGluZyBhdCBlYWNoIHN0YXJ0IG9mIGRhdGEgdHJhbnNmZXINCisjZGVmaW5lIEFUOTFDX1NTQ19GU0VER0UgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI0KSAvLyAoU1NDKSBGcmFtZSBTeW5jIEVkZ2UgRGV0ZWN0aW9uDQorLy8gLS0tLS0tLS0gU1NDX1RDTVIgOiAoU1NDIE9mZnNldDogMHgxOCkgU1NDIFRyYW5zbWl0IENsb2NrIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gU1NDX1RGTVIgOiAoU1NDIE9mZnNldDogMHgxYykgU1NDIFRyYW5zbWl0IEZyYW1lIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TU0NfREFUREVGICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKFNTQykgRGF0YSBEZWZhdWx0IFZhbHVlDQorI2RlZmluZSBBVDkxQ19TU0NfRlNERU4gICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMykgLy8gKFNTQykgRnJhbWUgU3luYyBEYXRhIEVuYWJsZQ0KKy8vIC0tLS0tLS0tIFNTQ19TUiA6IChTU0MgT2Zmc2V0OiAweDQwKSBTU0MgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RYUkRZICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChTU0MpIFRyYW5zbWl0IFJlYWR5DQorI2RlZmluZSBBVDkxQ19TU0NfVFhFTVBUWSAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFNTQykgVHJhbnNtaXQgRW1wdHkNCisjZGVmaW5lIEFUOTFDX1NTQ19FTkRUWCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoU1NDKSBFbmQgT2YgVHJhbnNtaXNzaW9uDQorI2RlZmluZSBBVDkxQ19TU0NfVFhCVUZFICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKFNTQykgVHJhbnNtaXQgQnVmZmVyIEVtcHR5DQorI2RlZmluZSBBVDkxQ19TU0NfUlhSRFkgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFNTQykgUmVjZWl2ZSBSZWFkeQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX09WUlVOICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChTU0MpIFJlY2VpdmUgT3ZlcnJ1bg0KKyNkZWZpbmUgQVQ5MUNfU1NDX0VORFJYICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChTU0MpIEVuZCBvZiBSZWNlcHRpb24NCisjZGVmaW5lIEFUOTFDX1NTQ19SWEJVRkYgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoU1NDKSBSZWNlaXZlIEJ1ZmZlciBGdWxsDQorI2RlZmluZSBBVDkxQ19TU0NfQ1AwICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFNTQykgQ29tcGFyZSAwDQorI2RlZmluZSBBVDkxQ19TU0NfQ1AxICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLy8gKFNTQykgQ29tcGFyZSAxDQorI2RlZmluZSBBVDkxQ19TU0NfVFhTWU4gICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLy8gKFNTQykgVHJhbnNtaXQgU3luYw0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JYU1lOICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTEpIC8vIChTU0MpIFJlY2VpdmUgU3luYw0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RYRU5BICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChTU0MpIFRyYW5zbWl0IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JYRU5BICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTcpIC8vIChTU0MpIFJlY2VpdmUgRW5hYmxlDQorLy8gLS0tLS0tLS0gU1NDX0lFUiA6IChTU0MgT2Zmc2V0OiAweDQ0KSBTU0MgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBTU0NfSURSIDogKFNTQyBPZmZzZXQ6IDB4NDgpIFNTQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBTU0NfSU1SIDogKFNTQyBPZmZzZXQ6IDB4NGMpIFNTQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFVzYXJ0ICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfVVNBUlQNCi17DQotICAgIEFUOTFfUkVHIFVTX0NSOyAgICAgICAgICAgLyogQ29udHJvbCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBVU19NUjsgICAgICAgICAgIC8qIE1vZGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVVNfSUVSOyAgICAgICAgICAvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFVTX0lEUjsgICAgICAgICAgLyogSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVVNfSU1SOyAgICAgICAgICAvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBVU19DU1I7ICAgICAgICAgIC8qIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFVTX1JIUjsgICAgICAgICAgLyogUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBVU19USFI7ICAgICAgICAgIC8qIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVVNfQlJHUjsgICAgICAgICAvKiBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFVTX1JUT1I7ICAgICAgICAgLyogUmVjZWl2ZXIgVGltZS1vdXQgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVVNfVFRHUjsgICAgICAgICAvKiBUcmFuc21pdHRlciBUaW1lLWd1YXJkIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMFsgNSBdOyAgLyogKi8NCi0gICAgQVQ5MV9SRUcgVVNfRklESTsgICAgICAgICAvKiBGSV9ESV9SYXRpbyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBVU19ORVI7ICAgICAgICAgIC8qIE5iIEVycm9ycyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBVU19YWFI7ICAgICAgICAgIC8qIFhPTl9YT0ZGIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFVTX0lGOyAgICAgICAgICAgLyogSVJEQV9GSUxURVIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQxWyA0NCBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBVU19SUFI7ICAgICAgICAgIC8qIFJlY2VpdmUgUG9pbnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBVU19SQ1I7ICAgICAgICAgIC8qIFJlY2VpdmUgQ291bnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBVU19UUFI7ICAgICAgICAgIC8qIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVVNfVENSOyAgICAgICAgICAvKiBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFVTX1JOUFI7ICAgICAgICAgLyogUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVVNfUk5DUjsgICAgICAgICAvKiBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBVU19UTlBSOyAgICAgICAgIC8qIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBVU19UTkNSOyAgICAgICAgIC8qIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBVU19QVENSOyAgICAgICAgIC8qIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFVTX1BUU1I7ICAgICAgICAgLyogUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLX0gQVQ5MVNfVVNBUlQsICogQVQ5MVBTX1VTQVJUOw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVXNhcnQNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19VU0FSVCB7DQorCUFUOTFfUkVHCSBVU19DUjsgCS8vIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX01SOyAJLy8gTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19DU1I7IAkvLyBDaGFubmVsIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfUkhSOyAJLy8gUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfVEhSOyAJLy8gVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfQlJHUjsgCS8vIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX1JUT1I7IAkvLyBSZWNlaXZlciBUaW1lLW91dCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfVFRHUjsgCS8vIFRyYW5zbWl0dGVyIFRpbWUtZ3VhcmQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFs1XTsgCS8vIA0KKwlBVDkxX1JFRwkgVVNfRklESTsgCS8vIEZJX0RJX1JhdGlvIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19ORVI7IAkvLyBOYiBFcnJvcnMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX1hYUjsgCS8vIFhPTl9YT0ZGIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19JRjsgCS8vIElSREFfRklMVEVSIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbNDRdOyAJLy8gDQorCUFUOTFfUkVHCSBVU19SUFI7IAkvLyBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX1JDUjsgCS8vIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfVFBSOyAJLy8gVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfVENSOyAJLy8gVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfUk5QUjsgCS8vIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19STkNSOyAJLy8gUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX1ROUFI7IAkvLyBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX1ROQ1I7IAkvLyBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX1BUQ1I7IAkvLyBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfUFRTUjsgCS8vIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCit9IEFUOTFTX1VTQVJULCAqQVQ5MVBTX1VTQVJUOw0KIA0KLS8qIC0tLS0tLS0tIFVTX0NSIDogKFVTQVJUIE9mZnNldDogMHgwKSBEZWJ1ZyBVbml0IENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1JTVFNUQSAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOCApICAvKiAoVVNBUlQpIFJlc2V0IFN0YXR1cyBCaXRzICovDQotI2RlZmluZSBBVDkxQ19VU19TVFRCUksgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDkgKSAgLyogKFVTQVJUKSBTdGFydCBCcmVhayAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfU1RQQlJLICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMCApIC8qIChVU0FSVCkgU3RvcCBCcmVhayAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfU1RUVE8gICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMSApIC8qIChVU0FSVCkgU3RhcnQgVGltZS1vdXQgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1NFTkRBICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTIgKSAvKiAoVVNBUlQpIFNlbmQgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfUlNUSVQgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMyApIC8qIChVU0FSVCkgUmVzZXQgSXRlcmF0aW9ucyAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfUlNUTkFDSyAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNCApIC8qIChVU0FSVCkgUmVzZXQgTm9uIEFja25vd2xlZGdlICovDQotI2RlZmluZSBBVDkxQ19VU19SRVRUTyAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE1ICkgLyogKFVTQVJUKSBSZWFybSBUaW1lLW91dCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfRFRSRU4gICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNiApIC8qIChVU0FSVCkgRGF0YSBUZXJtaW5hbCByZWFkeSBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX0RUUkRJUyAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTcgKSAvKiAoVVNBUlQpIERhdGEgVGVybWluYWwgcmVhZHkgRGlzYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfUlRTRU4gICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxOCApIC8qIChVU0FSVCkgUmVxdWVzdCB0byBTZW5kIGVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfUlRTRElTICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxOSApIC8qIChVU0FSVCkgUmVxdWVzdCB0byBTZW5kIERpc2FibGUgKi8NCi0vKiAtLS0tLS0tLSBVU19NUiA6IChVU0FSVCBPZmZzZXQ6IDB4NCkgRGVidWcgVW5pdCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19VU19VU01PREUgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGIDw8IDAgKSAgLyogKFVTQVJUKSBVc2FydCBtb2RlICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfVVNNT0RFX05PUk1BTCAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwICkgICAgICAgLyogKFVTQVJUKSBOb3JtYWwgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19VU01PREVfUlM0ODUgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgKSAgICAgICAvKiAoVVNBUlQpIFJTNDg1ICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfVVNNT0RFX0hXSFNIICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyICkgICAgICAgLyogKFVTQVJUKSBIYXJkd2FyZSBIYW5kc2hha2luZyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX1VTTU9ERV9NT0RFTSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyApICAgICAgIC8qIChVU0FSVCkgTW9kZW0gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19VU01PREVfSVNPNzgxNl8wICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDQgKSAgICAgICAvKiAoVVNBUlQpIElTTzc4MTYgcHJvdG9jb2w6IFQgPSAwICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfVVNNT0RFX0lTTzc4MTZfMSAgICAoICggdW5zaWduZWQgaW50ICkgMHg2ICkgICAgICAgLyogKFVTQVJUKSBJU083ODE2IHByb3RvY29sOiBUID0gMSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX1VTTU9ERV9JUkRBICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4OCApICAgICAgIC8qIChVU0FSVCkgSXJEQSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX1VTTU9ERV9TV0hTSCAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4QyApICAgICAgIC8qIChVU0FSVCkgU29mdHdhcmUgSGFuZHNoYWtpbmcgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX0NMS1MgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgNCApICAvKiAoVVNBUlQpIENsb2NrIFNlbGVjdGlvbiAoQmF1ZCBSYXRlIGdlbmVyYXRvciBJbnB1dCBDbG9jayAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX0NMS1NfQ0xPQ0sgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCA0ICkgIC8qIChVU0FSVCkgQ2xvY2sgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19DTEtTX0ZESVYxICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNCApICAvKiAoVVNBUlQpIGZkaXYxICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfQ0xLU19TTE9XICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDQgKSAgLyogKFVTQVJUKSBzbG93X2Nsb2NrIChBUk0pICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfQ0xLU19FWFQgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDQgKSAgLyogKFVTQVJUKSBFeHRlcm5hbCAoU0NLKSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfQ0hSTCAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCA2ICkgIC8qIChVU0FSVCkgQ2xvY2sgU2VsZWN0aW9uIChCYXVkIFJhdGUgZ2VuZXJhdG9yIElucHV0IENsb2NrICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfQ0hSTF81X0JJVFMgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDYgKSAgLyogKFVTQVJUKSBDaGFyYWN0ZXIgTGVuZ3RoOiA1IGJpdHMgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19DSFJMXzZfQklUUyAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNiApICAvKiAoVVNBUlQpIENoYXJhY3RlciBMZW5ndGg6IDYgYml0cyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX0NIUkxfN19CSVRTICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCA2ICkgIC8qIChVU0FSVCkgQ2hhcmFjdGVyIExlbmd0aDogNyBiaXRzICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfQ0hSTF84X0JJVFMgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDYgKSAgLyogKFVTQVJUKSBDaGFyYWN0ZXIgTGVuZ3RoOiA4IGJpdHMgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1NZTkMgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOCApICAvKiAoVVNBUlQpIFN5bmNocm9ub3VzIE1vZGUgU2VsZWN0ICovDQotI2RlZmluZSBBVDkxQ19VU19OQlNUT1AgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDEyICkgLyogKFVTQVJUKSBOdW1iZXIgb2YgU3RvcCBiaXRzICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfTkJTVE9QXzFfQklUICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDEyICkgLyogKFVTQVJUKSAxIHN0b3AgYml0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfTkJTVE9QXzE1X0JJVCAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEyICkgLyogKFVTQVJUKSBBc3luY2hyb25vdXMgKFNZTkM9MCkgMiBzdG9wIGJpdHMgU3luY2hyb25vdXMgKFNZTkM9MSkgMiBzdG9wIGJpdHMgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19OQlNUT1BfMl9CSVQgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgMTIgKSAvKiAoVVNBUlQpIDIgc3RvcCBiaXRzICovDQotI2RlZmluZSBBVDkxQ19VU19NU0JGICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE2ICkgLyogKFVTQVJUKSBCaXQgT3JkZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX01PREU5ICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTcgKSAvKiAoVVNBUlQpIDktYml0IENoYXJhY3RlciBsZW5ndGggKi8NCi0jZGVmaW5lIEFUOTFDX1VTX0NLTE8gICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTggKSAvKiAoVVNBUlQpIENsb2NrIE91dHB1dCBTZWxlY3QgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX09WRVIgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTkgKSAvKiAoVVNBUlQpIE92ZXIgU2FtcGxpbmcgTW9kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfSU5BQ0sgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyMCApIC8qIChVU0FSVCkgSW5oaWJpdCBOb24gQWNrbm93bGVkZ2UgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX0RTTkFDSyAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjEgKSAvKiAoVVNBUlQpIERpc2FibGUgU3VjY2Vzc2l2ZSBOQUNLICovDQotI2RlZmluZSBBVDkxQ19VU19NQVhfSVRFUiAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDI0ICkgLyogKFVTQVJUKSBOdW1iZXIgb2YgUmVwZXRpdGlvbnMgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX0ZJTFRFUiAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjggKSAvKiAoVVNBUlQpIFJlY2VpdmUgTGluZSBGaWx0ZXIgKi8NCi0vKiAtLS0tLS0tLSBVU19JRVIgOiAoVVNBUlQgT2Zmc2V0OiAweDgpIERlYnVnIFVuaXQgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfUlhCUksgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyICkgIC8qIChVU0FSVCkgQnJlYWsgUmVjZWl2ZWQvRW5kIG9mIEJyZWFrICovDQotI2RlZmluZSBBVDkxQ19VU19USU1FT1VUICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDggKSAgLyogKFVTQVJUKSBSZWNlaXZlciBUaW1lLW91dCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfSVRFUkFUSU9OICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMCApIC8qIChVU0FSVCkgTWF4IG51bWJlciBvZiBSZXBldGl0aW9ucyBSZWFjaGVkICovDQotI2RlZmluZSBBVDkxQ19VU19OQUNLICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEzICkgLyogKFVTQVJUKSBOb24gQWNrbm93bGVkZ2UgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1JJSUMgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTYgKSAvKiAoVVNBUlQpIFJpbmcgSU5kaWNhdG9yIElucHV0IENoYW5nZSBGbGFnICovDQotI2RlZmluZSBBVDkxQ19VU19EU1JJQyAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE3ICkgLyogKFVTQVJUKSBEYXRhIFNldCBSZWFkeSBJbnB1dCBDaGFuZ2UgRmxhZyAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfRENESUMgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxOCApIC8qIChVU0FSVCkgRGF0YSBDYXJyaWVyIEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX0NUU0lDICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTkgKSAvKiAoVVNBUlQpIENsZWFyIFRvIFNlbmQgSW5wdXQgQ2hhbmdlIEZsYWcgKi8NCi0vKiAtLS0tLS0tLSBVU19JRFIgOiAoVVNBUlQgT2Zmc2V0OiAweGMpIERlYnVnIFVuaXQgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBVU19JTVIgOiAoVVNBUlQgT2Zmc2V0OiAweDEwKSBEZWJ1ZyBVbml0IEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gVVNfQ1NSIDogKFVTQVJUIE9mZnNldDogMHgxNCkgRGVidWcgVW5pdCBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfUkkgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjAgKSAgIC8qIChVU0FSVCkgSW1hZ2Ugb2YgUkkgSW5wdXQgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX0RTUiAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIxICkgICAvKiAoVVNBUlQpIEltYWdlIG9mIERTUiBJbnB1dCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfRENEICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjIgKSAgIC8qIChVU0FSVCkgSW1hZ2Ugb2YgRENEIElucHV0ICovDQotI2RlZmluZSBBVDkxQ19VU19DVFMgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyMyApICAgLyogKFVTQVJUKSBJbWFnZSBvZiBDVFMgSW5wdXQgKi8NCisvLyAtLS0tLS0tLSBVU19DUiA6IChVU0FSVCBPZmZzZXQ6IDB4MCkgRGVidWcgVW5pdCBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVVNfUlNUU1RBICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChVU0FSVCkgUmVzZXQgU3RhdHVzIEJpdHMNCisjZGVmaW5lIEFUOTFDX1VTX1NUVEJSSyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvLyAoVVNBUlQpIFN0YXJ0IEJyZWFrDQorI2RlZmluZSBBVDkxQ19VU19TVFBCUksgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLy8gKFVTQVJUKSBTdG9wIEJyZWFrDQorI2RlZmluZSBBVDkxQ19VU19TVFRUTyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMSkgLy8gKFVTQVJUKSBTdGFydCBUaW1lLW91dA0KKyNkZWZpbmUgQVQ5MUNfVVNfU0VOREEgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8vIChVU0FSVCkgU2VuZCBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19VU19SU1RJVCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMykgLy8gKFVTQVJUKSBSZXNldCBJdGVyYXRpb25zDQorI2RlZmluZSBBVDkxQ19VU19SU1ROQUNLICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNCkgLy8gKFVTQVJUKSBSZXNldCBOb24gQWNrbm93bGVkZ2UNCisjZGVmaW5lIEFUOTFDX1VTX1JFVFRPICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE1KSAvLyAoVVNBUlQpIFJlYXJtIFRpbWUtb3V0DQorI2RlZmluZSBBVDkxQ19VU19EVFJFTiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKFVTQVJUKSBEYXRhIFRlcm1pbmFsIHJlYWR5IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfRFRSRElTICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTcpIC8vIChVU0FSVCkgRGF0YSBUZXJtaW5hbCByZWFkeSBEaXNhYmxlDQorI2RlZmluZSBBVDkxQ19VU19SVFNFTiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOCkgLy8gKFVTQVJUKSBSZXF1ZXN0IHRvIFNlbmQgZW5hYmxlDQorI2RlZmluZSBBVDkxQ19VU19SVFNESVMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOSkgLy8gKFVTQVJUKSBSZXF1ZXN0IHRvIFNlbmQgRGlzYWJsZQ0KKy8vIC0tLS0tLS0tIFVTX01SIDogKFVTQVJUIE9mZnNldDogMHg0KSBEZWJ1ZyBVbml0IE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VU19VU01PREUgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAgMCkgLy8gKFVTQVJUKSBVc2FydCBtb2RlDQorI2RlZmluZSAJQVQ5MUNfVVNfVVNNT0RFX05PUk1BTCAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDApIC8vIChVU0FSVCkgTm9ybWFsDQorI2RlZmluZSAJQVQ5MUNfVVNfVVNNT0RFX1JTNDg1ICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEpIC8vIChVU0FSVCkgUlM0ODUNCisjZGVmaW5lIAlBVDkxQ19VU19VU01PREVfSFdIU0ggICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MikgLy8gKFVTQVJUKSBIYXJkd2FyZSBIYW5kc2hha2luZw0KKyNkZWZpbmUgCUFUOTFDX1VTX1VTTU9ERV9NT0RFTSAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzKSAvLyAoVVNBUlQpIE1vZGVtDQorI2RlZmluZSAJQVQ5MUNfVVNfVVNNT0RFX0lTTzc4MTZfMCAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDQpIC8vIChVU0FSVCkgSVNPNzgxNiBwcm90b2NvbDogVCA9IDANCisjZGVmaW5lIAlBVDkxQ19VU19VU01PREVfSVNPNzgxNl8xICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NikgLy8gKFVTQVJUKSBJU083ODE2IHByb3RvY29sOiBUID0gMQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1VTTU9ERV9JUkRBICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg4KSAvLyAoVVNBUlQpIElyREENCisjZGVmaW5lIAlBVDkxQ19VU19VU01PREVfU1dIU0ggICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4QykgLy8gKFVTQVJUKSBTb2Z0d2FyZSBIYW5kc2hha2luZw0KKyNkZWZpbmUgQVQ5MUNfVVNfQ0xLUyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDQpIC8vIChVU0FSVCkgQ2xvY2sgU2VsZWN0aW9uIChCYXVkIFJhdGUgZ2VuZXJhdG9yIElucHV0IENsb2NrDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0xLU19DTE9DSyAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA0KSAvLyAoVVNBUlQpIENsb2NrDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0xLU19GRElWMSAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoVVNBUlQpIGZkaXYxDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0xLU19TTE9XICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA0KSAvLyAoVVNBUlQpIHNsb3dfY2xvY2sgKEFSTSkNCisjZGVmaW5lIAlBVDkxQ19VU19DTEtTX0VYVCAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDQpIC8vIChVU0FSVCkgRXh0ZXJuYWwgKFNDSykNCisjZGVmaW5lIEFUOTFDX1VTX0NIUkwgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA2KSAvLyAoVVNBUlQpIENsb2NrIFNlbGVjdGlvbiAoQmF1ZCBSYXRlIGdlbmVyYXRvciBJbnB1dCBDbG9jaw0KKyNkZWZpbmUgCUFUOTFDX1VTX0NIUkxfNV9CSVRTICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgNikgLy8gKFVTQVJUKSBDaGFyYWN0ZXIgTGVuZ3RoOiA1IGJpdHMNCisjZGVmaW5lIAlBVDkxQ19VU19DSFJMXzZfQklUUyAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChVU0FSVCkgQ2hhcmFjdGVyIExlbmd0aDogNiBiaXRzDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0hSTF83X0JJVFMgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA2KSAvLyAoVVNBUlQpIENoYXJhY3RlciBMZW5ndGg6IDcgYml0cw0KKyNkZWZpbmUgCUFUOTFDX1VTX0NIUkxfOF9CSVRTICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgNikgLy8gKFVTQVJUKSBDaGFyYWN0ZXIgTGVuZ3RoOiA4IGJpdHMNCisjZGVmaW5lIEFUOTFDX1VTX1NZTkMgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoVVNBUlQpIFN5bmNocm9ub3VzIE1vZGUgU2VsZWN0DQorI2RlZmluZSBBVDkxQ19VU19OQlNUT1AgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxMikgLy8gKFVTQVJUKSBOdW1iZXIgb2YgU3RvcCBiaXRzDQorI2RlZmluZSAJQVQ5MUNfVVNfTkJTVE9QXzFfQklUICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMTIpIC8vIChVU0FSVCkgMSBzdG9wIGJpdA0KKyNkZWZpbmUgCUFUOTFDX1VTX05CU1RPUF8xNV9CSVQgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvLyAoVVNBUlQpIEFzeW5jaHJvbm91cyAoU1lOQz0wKSAyIHN0b3AgYml0cyBTeW5jaHJvbm91cyAoU1lOQz0xKSAyIHN0b3AgYml0cw0KKyNkZWZpbmUgCUFUOTFDX1VTX05CU1RPUF8yX0JJVCAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDEyKSAvLyAoVVNBUlQpIDIgc3RvcCBiaXRzDQorI2RlZmluZSBBVDkxQ19VU19NU0JGICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKFVTQVJUKSBCaXQgT3JkZXINCisjZGVmaW5lIEFUOTFDX1VTX01PREU5ICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE3KSAvLyAoVVNBUlQpIDktYml0IENoYXJhY3RlciBsZW5ndGgNCisjZGVmaW5lIEFUOTFDX1VTX0NLTE8gICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE4KSAvLyAoVVNBUlQpIENsb2NrIE91dHB1dCBTZWxlY3QNCisjZGVmaW5lIEFUOTFDX1VTX09WRVIgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE5KSAvLyAoVVNBUlQpIE92ZXIgU2FtcGxpbmcgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfSU5BQ0sgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjApIC8vIChVU0FSVCkgSW5oaWJpdCBOb24gQWNrbm93bGVkZ2UNCisjZGVmaW5lIEFUOTFDX1VTX0RTTkFDSyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIxKSAvLyAoVVNBUlQpIERpc2FibGUgU3VjY2Vzc2l2ZSBOQUNLDQorI2RlZmluZSBBVDkxQ19VU19NQVhfSVRFUiAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNCkgLy8gKFVTQVJUKSBOdW1iZXIgb2YgUmVwZXRpdGlvbnMNCisjZGVmaW5lIEFUOTFDX1VTX0ZJTFRFUiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI4KSAvLyAoVVNBUlQpIFJlY2VpdmUgTGluZSBGaWx0ZXINCisvLyAtLS0tLS0tLSBVU19JRVIgOiAoVVNBUlQgT2Zmc2V0OiAweDgpIERlYnVnIFVuaXQgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VTX1JYQlJLICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoVVNBUlQpIEJyZWFrIFJlY2VpdmVkL0VuZCBvZiBCcmVhaw0KKyNkZWZpbmUgQVQ5MUNfVVNfVElNRU9VVCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChVU0FSVCkgUmVjZWl2ZXIgVGltZS1vdXQNCisjZGVmaW5lIEFUOTFDX1VTX0lURVJBVElPTiAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEwKSAvLyAoVVNBUlQpIE1heCBudW1iZXIgb2YgUmVwZXRpdGlvbnMgUmVhY2hlZA0KKyNkZWZpbmUgQVQ5MUNfVVNfTkFDSyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTMpIC8vIChVU0FSVCkgTm9uIEFja25vd2xlZGdlDQorI2RlZmluZSBBVDkxQ19VU19SSUlDICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKFVTQVJUKSBSaW5nIElOZGljYXRvciBJbnB1dCBDaGFuZ2UgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfVVNfRFNSSUMgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTcpIC8vIChVU0FSVCkgRGF0YSBTZXQgUmVhZHkgSW5wdXQgQ2hhbmdlIEZsYWcNCisjZGVmaW5lIEFUOTFDX1VTX0RDRElDICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE4KSAvLyAoVVNBUlQpIERhdGEgQ2FycmllciBGbGFnDQorI2RlZmluZSBBVDkxQ19VU19DVFNJQyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOSkgLy8gKFVTQVJUKSBDbGVhciBUbyBTZW5kIElucHV0IENoYW5nZSBGbGFnDQorLy8gLS0tLS0tLS0gVVNfSURSIDogKFVTQVJUIE9mZnNldDogMHhjKSBEZWJ1ZyBVbml0IEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFVTX0lNUiA6IChVU0FSVCBPZmZzZXQ6IDB4MTApIERlYnVnIFVuaXQgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVVNfQ1NSIDogKFVTQVJUIE9mZnNldDogMHgxNCkgRGVidWcgVW5pdCBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VTX1JJICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIwKSAvLyAoVVNBUlQpIEltYWdlIG9mIFJJIElucHV0DQorI2RlZmluZSBBVDkxQ19VU19EU1IgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMSkgLy8gKFVTQVJUKSBJbWFnZSBvZiBEU1IgSW5wdXQNCisjZGVmaW5lIEFUOTFDX1VTX0RDRCAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIyKSAvLyAoVVNBUlQpIEltYWdlIG9mIERDRCBJbnB1dA0KKyNkZWZpbmUgQVQ5MUNfVVNfQ1RTICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjMpIC8vIChVU0FSVCkgSW1hZ2Ugb2YgQ1RTIElucHV0DQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBUd28td2lyZSBJbnRlcmZhY2UgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLXR5cGVkZWYgc3RydWN0IF9BVDkxU19UV0kNCi17DQotICAgIEFUOTFfUkVHIFRXSV9DUjsgICAgICAgICAvKiBDb250cm9sIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFRXSV9NTVI7ICAgICAgICAvKiBNYXN0ZXIgTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBUV0lfU01SOyAgICAgICAgLyogU2xhdmUgTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBUV0lfSUFEUjsgICAgICAgLyogSW50ZXJuYWwgQWRkcmVzcyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBUV0lfQ1dHUjsgICAgICAgLyogQ2xvY2sgV2F2ZWZvcm0gR2VuZXJhdG9yIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMFsgMyBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBUV0lfU1I7ICAgICAgICAgLyogU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFRXSV9JRVI7ICAgICAgICAvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFRXSV9JRFI7ICAgICAgICAvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBUV0lfSU1SOyAgICAgICAgLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVFdJX1JIUjsgICAgICAgIC8qIFJlY2VpdmUgSG9sZGluZyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBUV0lfVEhSOyAgICAgICAgLyogVHJhbnNtaXQgSG9sZGluZyBSZWdpc3RlciAqLw0KLX0gQVQ5MVNfVFdJLCAqIEFUOTFQU19UV0k7DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBUd28td2lyZSBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19UV0kgew0KKwlBVDkxX1JFRwkgVFdJX0NSOyAJLy8gQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVFdJX01NUjsgCS8vIE1hc3RlciBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUV0lfU01SOyAJLy8gU2xhdmUgTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVFdJX0lBRFI7IAkvLyBJbnRlcm5hbCBBZGRyZXNzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUV0lfQ1dHUjsgCS8vIENsb2NrIFdhdmVmb3JtIEdlbmVyYXRvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzNdOyAJLy8gDQorCUFUOTFfUkVHCSBUV0lfU1I7IAkvLyBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRXSV9JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUV0lfSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRXSV9JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVFdJX1JIUjsgCS8vIFJlY2VpdmUgSG9sZGluZyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVFdJX1RIUjsgCS8vIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXINCit9IEFUOTFTX1RXSSwgKkFUOTFQU19UV0k7DQogDQotLyogLS0tLS0tLS0gVFdJX0NSIDogKFRXSSBPZmZzZXQ6IDB4MCkgVFdJIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9TVEFSVCAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgIC8qIChUV0kpIFNlbmQgYSBTVEFSVCBDb25kaXRpb24gKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9TVE9QICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEgKSAgIC8qIChUV0kpIFNlbmQgYSBTVE9QIENvbmRpdGlvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX01TRU4gICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMiApICAgLyogKFRXSSkgVFdJIE1hc3RlciBUcmFuc2ZlciBFbmFibGVkICovDQotI2RlZmluZSBBVDkxQ19UV0lfTVNESVMgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzICkgICAvKiAoVFdJKSBUV0kgTWFzdGVyIFRyYW5zZmVyIERpc2FibGVkICovDQotI2RlZmluZSBBVDkxQ19UV0lfU1ZFTiAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA0ICkgICAvKiAoVFdJKSBUV0kgU2xhdmUgVHJhbnNmZXIgRW5hYmxlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX1NWRElTICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNSApICAgLyogKFRXSSkgVFdJIFNsYXZlIFRyYW5zZmVyIERpc2FibGVkICovDQotI2RlZmluZSBBVDkxQ19UV0lfU1dSU1QgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA3ICkgICAvKiAoVFdJKSBTb2Z0d2FyZSBSZXNldCAqLw0KLS8qIC0tLS0tLS0tIFRXSV9NTVIgOiAoVFdJIE9mZnNldDogMHg0KSBUV0kgTWFzdGVyIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9JQURSU1ogICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDggKSAgIC8qIChUV0kpIEludGVybmFsIERldmljZSBBZGRyZXNzIFNpemUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UV0lfSUFEUlNaX05PICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDggKSAgIC8qIChUV0kpIE5vIGludGVybmFsIGRldmljZSBhZGRyZXNzICovDQotI2RlZmluZSAgICAgQVQ5MUNfVFdJX0lBRFJTWl8xX0JZVEUgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgICAvKiAoVFdJKSBPbmUtYnl0ZSBpbnRlcm5hbCBkZXZpY2UgYWRkcmVzcyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RXSV9JQURSU1pfMl9CWVRFICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgOCApICAgLyogKFRXSSkgVHdvLWJ5dGUgaW50ZXJuYWwgZGV2aWNlIGFkZHJlc3MgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UV0lfSUFEUlNaXzNfQllURSAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDggKSAgIC8qIChUV0kpIFRocmVlLWJ5dGUgaW50ZXJuYWwgZGV2aWNlIGFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9NUkVBRCAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEyICkgIC8qIChUV0kpIE1hc3RlciBSZWFkIERpcmVjdGlvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX0RBRFIgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDdGIDw8IDE2ICkgLyogKFRXSSkgRGV2aWNlIEFkZHJlc3MgKi8NCi0vKiAtLS0tLS0tLSBUV0lfU01SIDogKFRXSSBPZmZzZXQ6IDB4OCkgVFdJIFNsYXZlIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9TQURSICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg3RiA8PCAxNiApIC8qIChUV0kpIFNsYXZlIERldmljZSBBZGRyZXNzICovDQotLyogLS0tLS0tLS0gVFdJX0NXR1IgOiAoVFdJIE9mZnNldDogMHgxMCkgVFdJIENsb2NrIFdhdmVmb3JtIEdlbmVyYXRvciBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX0NMRElWICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGIDw8IDAgKSAgLyogKFRXSSkgQ2xvY2sgTG93IERpdmlkZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9DSERJViAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRiA8PCA4ICkgIC8qIChUV0kpIENsb2NrIEhpZ2ggRGl2aWRlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX0NLRElWICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDcgPDwgMTYgKSAgLyogKFRXSSkgQ2xvY2sgRGl2aWRlciAqLw0KLS8qIC0tLS0tLS0tIFRXSV9TUiA6IChUV0kgT2Zmc2V0OiAweDIwKSBUV0kgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19UV0lfVFhDT01QICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgICAvKiAoVFdJKSBUcmFuc21pc3Npb24gQ29tcGxldGVkICovDQotI2RlZmluZSBBVDkxQ19UV0lfUlhSRFkgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgICAvKiAoVFdJKSBSZWNlaXZlIGhvbGRpbmcgcmVnaXN0ZXIgUmVhRFkgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9UWFJEWSAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAgIC8qIChUV0kpIFRyYW5zbWl0IGhvbGRpbmcgcmVnaXN0ZXIgUmVhRFkgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9TVlJFQUQgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDMgKSAgIC8qIChUV0kpIFNsYXZlIFJlYWQgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9TVkFDQyAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDQgKSAgIC8qIChUV0kpIFNsYXZlIEFjY2VzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX0dDQUNDICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNSApICAgLyogKFRXSSkgR2VuZXJhbCBDYWxsIEFjY2VzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX09WUkUgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNiApICAgLyogKFRXSSkgT3ZlcnJ1biBFcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX1VOUkUgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNyApICAgLyogKFRXSSkgVW5kZXJydW4gRXJyb3IgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9OQUNLICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDggKSAgIC8qIChUV0kpIE5vdCBBY2tub3dsZWRnZWQgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9BUkJMU1QgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDkgKSAgIC8qIChUV0kpIEFyYml0cmF0aW9uIExvc3QgKi8NCi0vKiAtLS0tLS0tLSBUV0lfSUVSIDogKFRXSSBPZmZzZXQ6IDB4MjQpIFRXSSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gVFdJX0lEUiA6IChUV0kgT2Zmc2V0OiAweDI4KSBUV0kgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBUV0lfSU1SIDogKFRXSSBPZmZzZXQ6IDB4MmMpIFRXSSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSAqLw0KKy8vIC0tLS0tLS0tIFRXSV9DUiA6IChUV0kgT2Zmc2V0OiAweDApIFRXSSBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVFdJX1NUQVJUICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChUV0kpIFNlbmQgYSBTVEFSVCBDb25kaXRpb24NCisjZGVmaW5lIEFUOTFDX1RXSV9TVE9QICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoVFdJKSBTZW5kIGEgU1RPUCBDb25kaXRpb24NCisjZGVmaW5lIEFUOTFDX1RXSV9NU0VOICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoVFdJKSBUV0kgTWFzdGVyIFRyYW5zZmVyIEVuYWJsZWQNCisjZGVmaW5lIEFUOTFDX1RXSV9NU0RJUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoVFdJKSBUV0kgTWFzdGVyIFRyYW5zZmVyIERpc2FibGVkDQorI2RlZmluZSBBVDkxQ19UV0lfU1ZFTiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFRXSSkgVFdJIFNsYXZlIFRyYW5zZmVyIEVuYWJsZWQNCisjZGVmaW5lIEFUOTFDX1RXSV9TVkRJUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoVFdJKSBUV0kgU2xhdmUgVHJhbnNmZXIgRGlzYWJsZWQNCisjZGVmaW5lIEFUOTFDX1RXSV9TV1JTVCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoVFdJKSBTb2Z0d2FyZSBSZXNldA0KKy8vIC0tLS0tLS0tIFRXSV9NTVIgOiAoVFdJIE9mZnNldDogMHg0KSBUV0kgTWFzdGVyIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UV0lfSUFEUlNaICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKFRXSSkgSW50ZXJuYWwgRGV2aWNlIEFkZHJlc3MgU2l6ZQ0KKyNkZWZpbmUgCUFUOTFDX1RXSV9JQURSU1pfTk8gICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgOCkgLy8gKFRXSSkgTm8gaW50ZXJuYWwgZGV2aWNlIGFkZHJlc3MNCisjZGVmaW5lIAlBVDkxQ19UV0lfSUFEUlNaXzFfQllURSAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChUV0kpIE9uZS1ieXRlIGludGVybmFsIGRldmljZSBhZGRyZXNzDQorI2RlZmluZSAJQVQ5MUNfVFdJX0lBRFJTWl8yX0JZVEUgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA4KSAvLyAoVFdJKSBUd28tYnl0ZSBpbnRlcm5hbCBkZXZpY2UgYWRkcmVzcw0KKyNkZWZpbmUgCUFUOTFDX1RXSV9JQURSU1pfM19CWVRFICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKFRXSSkgVGhyZWUtYnl0ZSBpbnRlcm5hbCBkZXZpY2UgYWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfVFdJX01SRUFEICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8vIChUV0kpIE1hc3RlciBSZWFkIERpcmVjdGlvbg0KKyNkZWZpbmUgQVQ5MUNfVFdJX0RBRFIgICAgICAgICgodW5zaWduZWQgaW50KSAweDdGIDw8IDE2KSAvLyAoVFdJKSBEZXZpY2UgQWRkcmVzcw0KKy8vIC0tLS0tLS0tIFRXSV9TTVIgOiAoVFdJIE9mZnNldDogMHg4KSBUV0kgU2xhdmUgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RXSV9TQURSICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3RiA8PCAxNikgLy8gKFRXSSkgU2xhdmUgRGV2aWNlIEFkZHJlc3MNCisvLyAtLS0tLS0tLSBUV0lfQ1dHUiA6IChUV0kgT2Zmc2V0OiAweDEwKSBUV0kgQ2xvY2sgV2F2ZWZvcm0gR2VuZXJhdG9yIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVFdJX0NMRElWICAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8ICAwKSAvLyAoVFdJKSBDbG9jayBMb3cgRGl2aWRlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX0NIRElWICAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8ICA4KSAvLyAoVFdJKSBDbG9jayBIaWdoIERpdmlkZXINCisjZGVmaW5lIEFUOTFDX1RXSV9DS0RJViAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8IDE2KSAvLyAoVFdJKSBDbG9jayBEaXZpZGVyDQorLy8gLS0tLS0tLS0gVFdJX1NSIDogKFRXSSBPZmZzZXQ6IDB4MjApIFRXSSBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UV0lfVFhDT01QICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFRXSSkgVHJhbnNtaXNzaW9uIENvbXBsZXRlZA0KKyNkZWZpbmUgQVQ5MUNfVFdJX1JYUkRZICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChUV0kpIFJlY2VpdmUgaG9sZGluZyByZWdpc3RlciBSZWFEWQ0KKyNkZWZpbmUgQVQ5MUNfVFdJX1RYUkRZICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChUV0kpIFRyYW5zbWl0IGhvbGRpbmcgcmVnaXN0ZXIgUmVhRFkNCisjZGVmaW5lIEFUOTFDX1RXSV9TVlJFQUQgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoVFdJKSBTbGF2ZSBSZWFkDQorI2RlZmluZSBBVDkxQ19UV0lfU1ZBQ0MgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFRXSSkgU2xhdmUgQWNjZXNzDQorI2RlZmluZSBBVDkxQ19UV0lfR0NBQ0MgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKFRXSSkgR2VuZXJhbCBDYWxsIEFjY2Vzcw0KKyNkZWZpbmUgQVQ5MUNfVFdJX09WUkUgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChUV0kpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX1RXSV9VTlJFICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoVFdJKSBVbmRlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX05BQ0sgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChUV0kpIE5vdCBBY2tub3dsZWRnZWQNCisjZGVmaW5lIEFUOTFDX1RXSV9BUkJMU1QgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvLyAoVFdJKSBBcmJpdHJhdGlvbiBMb3N0DQorLy8gLS0tLS0tLS0gVFdJX0lFUiA6IChUV0kgT2Zmc2V0OiAweDI0KSBUV0kgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBUV0lfSURSIDogKFRXSSBPZmZzZXQ6IDB4MjgpIFRXSSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBUV0lfSU1SIDogKFRXSSBPZmZzZXQ6IDB4MmMpIFRXSSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFRpbWVyIENvdW50ZXIgQ2hhbm5lbCBJbnRlcmZhY2UgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLXR5cGVkZWYgc3RydWN0IF9BVDkxU19UQw0KLXsNCi0gICAgQVQ5MV9SRUcgVENfQ0NSOyAgICAgICAgIC8qIENoYW5uZWwgQ29udHJvbCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBUQ19DTVI7ICAgICAgICAgLyogQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyIChDYXB0dXJlIE1vZGUgLyBXYXZlZm9ybSBNb2RlKSAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDBbIDIgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgVENfQ1Y7ICAgICAgICAgIC8qIENvdW50ZXIgVmFsdWUgKi8NCi0gICAgQVQ5MV9SRUcgVENfUkE7ICAgICAgICAgIC8qIFJlZ2lzdGVyIEEgKi8NCi0gICAgQVQ5MV9SRUcgVENfUkI7ICAgICAgICAgIC8qIFJlZ2lzdGVyIEIgKi8NCi0gICAgQVQ5MV9SRUcgVENfUkM7ICAgICAgICAgIC8qIFJlZ2lzdGVyIEMgKi8NCi0gICAgQVQ5MV9SRUcgVENfU1I7ICAgICAgICAgIC8qIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBUQ19JRVI7ICAgICAgICAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBUQ19JRFI7ICAgICAgICAgLyogSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVENfSU1SOyAgICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotfSBBVDkxU19UQywgKiBBVDkxUFNfVEM7DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBUaW1lciBDb3VudGVyIENoYW5uZWwgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfVEMgew0KKwlBVDkxX1JFRwkgVENfQ0NSOyAJLy8gQ2hhbm5lbCBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUQ19DTVI7IAkvLyBDaGFubmVsIE1vZGUgUmVnaXN0ZXIgKENhcHR1cmUgTW9kZSAvIFdhdmVmb3JtIE1vZGUpDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbMl07IAkvLyANCisJQVQ5MV9SRUcJIFRDX0NWOyAJLy8gQ291bnRlciBWYWx1ZQ0KKwlBVDkxX1JFRwkgVENfUkE7IAkvLyBSZWdpc3RlciBBDQorCUFUOTFfUkVHCSBUQ19SQjsgCS8vIFJlZ2lzdGVyIEINCisJQVQ5MV9SRUcJIFRDX1JDOyAJLy8gUmVnaXN0ZXIgQw0KKwlBVDkxX1JFRwkgVENfU1I7IAkvLyBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRDX0lFUjsgCS8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRDX0lEUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUQ19JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KK30gQVQ5MVNfVEMsICpBVDkxUFNfVEM7DQogDQotLyogLS0tLS0tLS0gVENfQ0NSIDogKFRDIE9mZnNldDogMHgwKSBUQyBDaGFubmVsIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0NMS0VOICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgIC8qIChUQykgQ291bnRlciBDbG9jayBFbmFibGUgQ29tbWFuZCAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQ0xLRElTICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEgKSAgLyogKFRDKSBDb3VudGVyIENsb2NrIERpc2FibGUgQ29tbWFuZCAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfU1dUUkcgICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAgLyogKFRDKSBTb2Z0d2FyZSBUcmlnZ2VyIENvbW1hbmQgKi8NCi0vKiAtLS0tLS0tLSBUQ19DTVIgOiAoVEMgT2Zmc2V0OiAweDQpIFRDIENoYW5uZWwgTW9kZSBSZWdpc3RlcjogQ2FwdHVyZSBNb2RlIC8gV2F2ZWZvcm0gTW9kZSAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQ0xLUyAgICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg3IDw8IDAgKSAgLyogKFRDKSBDbG9jayBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjFfQ0xPQ0sgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCApICAgICAgIC8qIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjFfQ0xPQ0sgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjJfQ0xPQ0sgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSApICAgICAgIC8qIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjJfQ0xPQ0sgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjNfQ0xPQ0sgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiApICAgICAgIC8qIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjNfQ0xPQ0sgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjRfQ0xPQ0sgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyApICAgICAgIC8qIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjRfQ0xPQ0sgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjVfQ0xPQ0sgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NCApICAgICAgIC8qIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjVfQ0xPQ0sgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19DTEtTX1hDMCAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NSApICAgICAgIC8qIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFhDMCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0NMS1NfWEMxICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg2ICkgICAgICAgLyogKFRDKSBDbG9jayBzZWxlY3RlZDogWEMxICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQ0xLU19YQzIgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDcgKSAgICAgICAvKiAoVEMpIENsb2NrIHNlbGVjdGVkOiBYQzIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0NMS0kgICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzICkgIC8qIChUQykgQ2xvY2sgSW52ZXJ0ICovDQotI2RlZmluZSBBVDkxQ19UQ19CVVJTVCAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgNCApICAvKiAoVEMpIEJ1cnN0IFNpZ25hbCBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19CVVJTVF9OT05FICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCA0ICkgIC8qIChUQykgVGhlIGNsb2NrIGlzIG5vdCBnYXRlZCBieSBhbiBleHRlcm5hbCBzaWduYWwgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19CVVJTVF9YQzAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA0ICkgIC8qIChUQykgWEMwIGlzIEFORGVkIHdpdGggdGhlIHNlbGVjdGVkIGNsb2NrICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQlVSU1RfWEMxICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgNCApICAvKiAoVEMpIFhDMSBpcyBBTkRlZCB3aXRoIHRoZSBzZWxlY3RlZCBjbG9jayAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JVUlNUX1hDMiAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDQgKSAgLyogKFRDKSBYQzIgaXMgQU5EZWQgd2l0aCB0aGUgc2VsZWN0ZWQgY2xvY2sgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0NQQ1NUT1AgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA2ICkgIC8qIChUQykgQ291bnRlciBDbG9jayBTdG9wcGVkIHdpdGggUkMgQ29tcGFyZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfTERCU1RPUCAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDYgKSAgLyogKFRDKSBDb3VudGVyIENsb2NrIFN0b3BwZWQgd2l0aCBSQiBMb2FkaW5nICovDQotI2RlZmluZSBBVDkxQ19UQ19MREJESVMgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNyApICAvKiAoVEMpIENvdW50ZXIgQ2xvY2sgRGlzYWJsZWQgd2l0aCBSQiBMb2FkaW5nICovDQotI2RlZmluZSBBVDkxQ19UQ19DUENESVMgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNyApICAvKiAoVEMpIENvdW50ZXIgQ2xvY2sgRGlzYWJsZSB3aXRoIFJDIENvbXBhcmUgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0VUUkdFREcgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCA4ICkgIC8qIChUQykgRXh0ZXJuYWwgVHJpZ2dlciBFZGdlIFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0VUUkdFREdfTk9ORSAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDggKSAgLyogKFRDKSBFZGdlOiBOb25lICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfRVRSR0VER19SSVNJTkcgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOCApICAvKiAoVEMpIEVkZ2U6IHJpc2luZyBlZGdlICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfRVRSR0VER19GQUxMSU5HICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgOCApICAvKiAoVEMpIEVkZ2U6IGZhbGxpbmcgZWRnZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0VUUkdFREdfQk9USCAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDggKSAgLyogKFRDKSBFZGdlOiBlYWNoIGVkZ2UgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0VFVlRFREcgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCA4ICkgIC8qIChUQykgRXh0ZXJuYWwgRXZlbnQgRWRnZSBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19FRVZURURHX05PTkUgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCA4ICkgIC8qIChUQykgRWRnZTogTm9uZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0VFVlRFREdfUklTSU5HICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDggKSAgLyogKFRDKSBFZGdlOiByaXNpbmcgZWRnZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0VFVlRFREdfRkFMTElORyAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDggKSAgLyogKFRDKSBFZGdlOiBmYWxsaW5nIGVkZ2UgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19FRVZURURHX0JPVEggICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCA4ICkgIC8qIChUQykgRWRnZTogZWFjaCBlZGdlICovDQotI2RlZmluZSBBVDkxQ19UQ19BQkVUUkcgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTAgKSAvKiAoVEMpIFRJT0Egb3IgVElPQiBFeHRlcm5hbCBUcmlnZ2VyIFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfRUVWVCAgICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDEwICkgLyogKFRDKSBFeHRlcm5hbCBFdmVudCAgU2VsZWN0aW9uICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfRUVWVF9OT05FICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMTAgKSAvKiAoVEMpIFNpZ25hbCBzZWxlY3RlZCBhcyBleHRlcm5hbCBldmVudDogVElPQiBUSU9CIGRpcmVjdGlvbjogaW5wdXQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19FRVZUX1JJU0lORyAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMCApIC8qIChUQykgU2lnbmFsIHNlbGVjdGVkIGFzIGV4dGVybmFsIGV2ZW50OiBYQzAgVElPQiBkaXJlY3Rpb246IG91dHB1dCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0VFVlRfRkFMTElORyAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDEwICkgLyogKFRDKSBTaWduYWwgc2VsZWN0ZWQgYXMgZXh0ZXJuYWwgZXZlbnQ6IFhDMSBUSU9CIGRpcmVjdGlvbjogb3V0cHV0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfRUVWVF9CT1RIICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTAgKSAvKiAoVEMpIFNpZ25hbCBzZWxlY3RlZCBhcyBleHRlcm5hbCBldmVudDogWEMyIFRJT0IgZGlyZWN0aW9uOiBvdXRwdXQgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0VORVRSRyAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMiApIC8qIChUQykgRXh0ZXJuYWwgRXZlbnQgVHJpZ2dlciBlbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX1dBVkVTRUwgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAxMyApIC8qIChUQykgV2F2ZWZvcm0gIFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX1dBVkVTRUxfVVAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDEzICkgLyogKFRDKSBVUCBtb2RlIHdpdGhvdXQgYXRvbWF0aWMgdHJpZ2dlciBvbiBSQyBDb21wYXJlICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfV0FWRVNFTF9VUERPV04gICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTMgKSAvKiAoVEMpIFVQRE9XTiBtb2RlIHdpdGhvdXQgYXV0b21hdGljIHRyaWdnZXIgb24gUkMgQ29tcGFyZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX1dBVkVTRUxfVVBfQVVUTyAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDEzICkgLyogKFRDKSBVUCBtb2RlIHdpdGggYXV0b21hdGljIHRyaWdnZXIgb24gUkMgQ29tcGFyZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX1dBVkVTRUxfVVBET1dOX0FVVE8gICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDEzICkgLyogKFRDKSBVUERPV04gbW9kZSB3aXRoIGF1dG9tYXRpYyB0cmlnZ2VyIG9uIFJDIENvbXBhcmUgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0NQQ1RSRyAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNCApIC8qIChUQykgUkMgQ29tcGFyZSBUcmlnZ2VyIEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfV0FWRSAgICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE1ICkgLyogKFRDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfTERSQSAgICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDE2ICkgLyogKFRDKSBSQSBMb2FkaW5nIFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0xEUkFfTk9ORSAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDE2ICkgLyogKFRDKSBFZGdlOiBOb25lICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfTERSQV9SSVNJTkcgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTYgKSAvKiAoVEMpIEVkZ2U6IHJpc2luZyBlZGdlIG9mIFRJT0EgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19MRFJBX0ZBTExJTkcgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCAxNiApIC8qIChUQykgRWRnZTogZmFsbGluZyBlZGdlIG9mIFRJT0EgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19MRFJBX0JPVEggICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAxNiApIC8qIChUQykgRWRnZTogZWFjaCBlZGdlIG9mIFRJT0EgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0FDUEEgICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAxNiApIC8qIChUQykgUkEgQ29tcGFyZSBFZmZlY3Qgb24gVElPQSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0FDUEFfTk9ORSAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDE2ICkgLyogKFRDKSBFZmZlY3Q6IG5vbmUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19BQ1BBX1NFVCAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNiApIC8qIChUQykgRWZmZWN0OiBzZXQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19BQ1BBX0NMRUFSICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCAxNiApIC8qIChUQykgRWZmZWN0OiBjbGVhciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0FDUEFfVE9HR0xFICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDE2ICkgLyogKFRDKSBFZmZlY3Q6IHRvZ2dsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfTERSQiAgICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDE4ICkgLyogKFRDKSBSQiBMb2FkaW5nIFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0xEUkJfTk9ORSAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDE4ICkgLyogKFRDKSBFZGdlOiBOb25lICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfTERSQl9SSVNJTkcgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTggKSAvKiAoVEMpIEVkZ2U6IHJpc2luZyBlZGdlIG9mIFRJT0EgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19MRFJCX0ZBTExJTkcgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCAxOCApIC8qIChUQykgRWRnZTogZmFsbGluZyBlZGdlIG9mIFRJT0EgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19MRFJCX0JPVEggICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAxOCApIC8qIChUQykgRWRnZTogZWFjaCBlZGdlIG9mIFRJT0EgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0FDUEMgICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAxOCApIC8qIChUQykgUkMgQ29tcGFyZSBFZmZlY3Qgb24gVElPQSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0FDUENfTk9ORSAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDE4ICkgLyogKFRDKSBFZmZlY3Q6IG5vbmUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19BQ1BDX1NFVCAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxOCApIC8qIChUQykgRWZmZWN0OiBzZXQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19BQ1BDX0NMRUFSICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCAxOCApIC8qIChUQykgRWZmZWN0OiBjbGVhciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0FDUENfVE9HR0xFICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDE4ICkgLyogKFRDKSBFZmZlY3Q6IHRvZ2dsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQUVFVlQgICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDIwICkgLyogKFRDKSBFeHRlcm5hbCBFdmVudCBFZmZlY3Qgb24gVElPQSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0FFRVZUX05PTkUgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDIwICkgLyogKFRDKSBFZmZlY3Q6IG5vbmUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19BRUVWVF9TRVQgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyMCApIC8qIChUQykgRWZmZWN0OiBzZXQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19BRUVWVF9DTEVBUiAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCAyMCApIC8qIChUQykgRWZmZWN0OiBjbGVhciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0FFRVZUX1RPR0dMRSAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDIwICkgLyogKFRDKSBFZmZlY3Q6IHRvZ2dsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQVNXVFJHICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDIyICkgLyogKFRDKSBTb2Z0d2FyZSBUcmlnZ2VyIEVmZmVjdCBvbiBUSU9BICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQVNXVFJHX05PTkUgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMjIgKSAvKiAoVEMpIEVmZmVjdDogbm9uZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0FTV1RSR19TRVQgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIyICkgLyogKFRDKSBFZmZlY3Q6IHNldCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0FTV1RSR19DTEVBUiAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDIyICkgLyogKFRDKSBFZmZlY3Q6IGNsZWFyICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQVNXVFJHX1RPR0dMRSAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMjIgKSAvKiAoVEMpIEVmZmVjdDogdG9nZ2xlICovDQotI2RlZmluZSBBVDkxQ19UQ19CQ1BCICAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMjQgKSAvKiAoVEMpIFJCIENvbXBhcmUgRWZmZWN0IG9uIFRJT0IgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19CQ1BCX05PTkUgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAyNCApIC8qIChUQykgRWZmZWN0OiBub25lICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQkNQQl9TRVQgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjQgKSAvKiAoVEMpIEVmZmVjdDogc2V0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQkNQQl9DTEVBUiAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgMjQgKSAvKiAoVEMpIEVmZmVjdDogY2xlYXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19CQ1BCX1RPR0dMRSAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAyNCApIC8qIChUQykgRWZmZWN0OiB0b2dnbGUgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0JDUEMgICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAyNiApIC8qIChUQykgUkMgQ29tcGFyZSBFZmZlY3Qgb24gVElPQiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JDUENfTk9ORSAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDI2ICkgLyogKFRDKSBFZmZlY3Q6IG5vbmUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19CQ1BDX1NFVCAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyNiApIC8qIChUQykgRWZmZWN0OiBzZXQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19CQ1BDX0NMRUFSICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCAyNiApIC8qIChUQykgRWZmZWN0OiBjbGVhciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JDUENfVE9HR0xFICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDI2ICkgLyogKFRDKSBFZmZlY3Q6IHRvZ2dsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQkVFVlQgICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDI4ICkgLyogKFRDKSBFeHRlcm5hbCBFdmVudCBFZmZlY3Qgb24gVElPQiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JFRVZUX05PTkUgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDI4ICkgLyogKFRDKSBFZmZlY3Q6IG5vbmUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19CRUVWVF9TRVQgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyOCApIC8qIChUQykgRWZmZWN0OiBzZXQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19CRUVWVF9DTEVBUiAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCAyOCApIC8qIChUQykgRWZmZWN0OiBjbGVhciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JFRVZUX1RPR0dMRSAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDI4ICkgLyogKFRDKSBFZmZlY3Q6IHRvZ2dsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQlNXVFJHICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDMwICkgLyogKFRDKSBTb2Z0d2FyZSBUcmlnZ2VyIEVmZmVjdCBvbiBUSU9CICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQlNXVFJHX05PTkUgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMzAgKSAvKiAoVEMpIEVmZmVjdDogbm9uZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JTV1RSR19TRVQgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDMwICkgLyogKFRDKSBFZmZlY3Q6IHNldCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JTV1RSR19DTEVBUiAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDMwICkgLyogKFRDKSBFZmZlY3Q6IGNsZWFyICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQlNXVFJHX1RPR0dMRSAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMzAgKSAvKiAoVEMpIEVmZmVjdDogdG9nZ2xlICovDQotLyogLS0tLS0tLS0gVENfU1IgOiAoVEMgT2Zmc2V0OiAweDIwKSBUQyBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQ09WRlMgICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgLyogKFRDKSBDb3VudGVyIE92ZXJmbG93ICovDQotI2RlZmluZSBBVDkxQ19UQ19MT1ZSUyAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAvKiAoVEMpIExvYWQgT3ZlcnJ1biAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQ1BBUyAgICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAgLyogKFRDKSBSQSBDb21wYXJlICovDQotI2RlZmluZSBBVDkxQ19UQ19DUEJTICAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMyApICAvKiAoVEMpIFJCIENvbXBhcmUgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0NQQ1MgICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA0ICkgIC8qIChUQykgUkMgQ29tcGFyZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfTERSQVMgICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDUgKSAgLyogKFRDKSBSQSBMb2FkaW5nICovDQotI2RlZmluZSBBVDkxQ19UQ19MRFJCUyAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNiApICAvKiAoVEMpIFJCIExvYWRpbmcgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0VUUkNTICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA3ICkgIC8qIChUQykgRXh0ZXJuYWwgVHJpZ2dlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfRVRSR1MgICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE2ICkgLyogKFRDKSBDbG9jayBFbmFibGluZyAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfTVRJT0EgICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE3ICkgLyogKFRDKSBUSU9BIE1pcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfTVRJT0IgICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE4ICkgLyogKFRDKSBUSU9BIE1pcnJvciAqLw0KLS8qIC0tLS0tLS0tIFRDX0lFUiA6IChUQyBPZmZzZXQ6IDB4MjQpIFRDIENoYW5uZWwgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFRDX0lEUiA6IChUQyBPZmZzZXQ6IDB4MjgpIFRDIENoYW5uZWwgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBUQ19JTVIgOiAoVEMgT2Zmc2V0OiAweDJjKSBUQyBDaGFubmVsIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tICovDQorLy8gLS0tLS0tLS0gVENfQ0NSIDogKFRDIE9mZnNldDogMHgwKSBUQyBDaGFubmVsIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UQ19DTEtFTiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFRDKSBDb3VudGVyIENsb2NrIEVuYWJsZSBDb21tYW5kDQorI2RlZmluZSBBVDkxQ19UQ19DTEtESVMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFRDKSBDb3VudGVyIENsb2NrIERpc2FibGUgQ29tbWFuZA0KKyNkZWZpbmUgQVQ5MUNfVENfU1dUUkcgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChUQykgU29mdHdhcmUgVHJpZ2dlciBDb21tYW5kDQorLy8gLS0tLS0tLS0gVENfQ01SIDogKFRDIE9mZnNldDogMHg0KSBUQyBDaGFubmVsIE1vZGUgUmVnaXN0ZXI6IENhcHR1cmUgTW9kZSAvIFdhdmVmb3JtIE1vZGUgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UQ19DTEtTICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAgMCkgLy8gKFRDKSBDbG9jayBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjFfQ0xPQ0sgICAgICgodW5zaWduZWQgaW50KSAweDApIC8vIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjFfQ0xPQ0sNCisjZGVmaW5lIAlBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjJfQ0xPQ0sgICAgICgodW5zaWduZWQgaW50KSAweDEpIC8vIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjJfQ0xPQ0sNCisjZGVmaW5lIAlBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjNfQ0xPQ0sgICAgICgodW5zaWduZWQgaW50KSAweDIpIC8vIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjNfQ0xPQ0sNCisjZGVmaW5lIAlBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjRfQ0xPQ0sgICAgICgodW5zaWduZWQgaW50KSAweDMpIC8vIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjRfQ0xPQ0sNCisjZGVmaW5lIAlBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjVfQ0xPQ0sgICAgICgodW5zaWduZWQgaW50KSAweDQpIC8vIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjVfQ0xPQ0sNCisjZGVmaW5lIAlBVDkxQ19UQ19DTEtTX1hDMCAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDUpIC8vIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFhDMA0KKyNkZWZpbmUgCUFUOTFDX1RDX0NMS1NfWEMxICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NikgLy8gKFRDKSBDbG9jayBzZWxlY3RlZDogWEMxDQorI2RlZmluZSAJQVQ5MUNfVENfQ0xLU19YQzIgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3KSAvLyAoVEMpIENsb2NrIHNlbGVjdGVkOiBYQzINCisjZGVmaW5lIEFUOTFDX1RDX0NMS0kgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoVEMpIENsb2NrIEludmVydA0KKyNkZWZpbmUgQVQ5MUNfVENfQlVSU1QgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDQpIC8vIChUQykgQnVyc3QgU2lnbmFsIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDX0JVUlNUX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDQpIC8vIChUQykgVGhlIGNsb2NrIGlzIG5vdCBnYXRlZCBieSBhbiBleHRlcm5hbCBzaWduYWwNCisjZGVmaW5lIAlBVDkxQ19UQ19CVVJTVF9YQzAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoVEMpIFhDMCBpcyBBTkRlZCB3aXRoIHRoZSBzZWxlY3RlZCBjbG9jaw0KKyNkZWZpbmUgCUFUOTFDX1RDX0JVUlNUX1hDMSAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDQpIC8vIChUQykgWEMxIGlzIEFORGVkIHdpdGggdGhlIHNlbGVjdGVkIGNsb2NrDQorI2RlZmluZSAJQVQ5MUNfVENfQlVSU1RfWEMyICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgNCkgLy8gKFRDKSBYQzIgaXMgQU5EZWQgd2l0aCB0aGUgc2VsZWN0ZWQgY2xvY2sNCisjZGVmaW5lIEFUOTFDX1RDX0NQQ1NUT1AgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoVEMpIENvdW50ZXIgQ2xvY2sgU3RvcHBlZCB3aXRoIFJDIENvbXBhcmUNCisjZGVmaW5lIEFUOTFDX1RDX0xEQlNUT1AgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoVEMpIENvdW50ZXIgQ2xvY2sgU3RvcHBlZCB3aXRoIFJCIExvYWRpbmcNCisjZGVmaW5lIEFUOTFDX1RDX0xEQkRJUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoVEMpIENvdW50ZXIgQ2xvY2sgRGlzYWJsZWQgd2l0aCBSQiBMb2FkaW5nDQorI2RlZmluZSBBVDkxQ19UQ19DUENESVMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKFRDKSBDb3VudGVyIENsb2NrIERpc2FibGUgd2l0aCBSQyBDb21wYXJlDQorI2RlZmluZSBBVDkxQ19UQ19FVFJHRURHICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKFRDKSBFeHRlcm5hbCBUcmlnZ2VyIEVkZ2UgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfVENfRVRSR0VER19OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA4KSAvLyAoVEMpIEVkZ2U6IE5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19FVFJHRURHX1JJU0lORyAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChUQykgRWRnZTogcmlzaW5nIGVkZ2UNCisjZGVmaW5lIAlBVDkxQ19UQ19FVFJHRURHX0ZBTExJTkcgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDgpIC8vIChUQykgRWRnZTogZmFsbGluZyBlZGdlDQorI2RlZmluZSAJQVQ5MUNfVENfRVRSR0VER19CT1RIICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA4KSAvLyAoVEMpIEVkZ2U6IGVhY2ggZWRnZQ0KKyNkZWZpbmUgQVQ5MUNfVENfRUVWVEVERyAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDgpIC8vIChUQykgRXh0ZXJuYWwgRXZlbnQgRWRnZSBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ19FRVZURURHX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDgpIC8vIChUQykgRWRnZTogTm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0VFVlRFREdfUklTSU5HICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFRDKSBFZGdlOiByaXNpbmcgZWRnZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0VFVlRFREdfRkFMTElORyAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgOCkgLy8gKFRDKSBFZGdlOiBmYWxsaW5nIGVkZ2UNCisjZGVmaW5lIAlBVDkxQ19UQ19FRVZURURHX0JPVEggICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDgpIC8vIChUQykgRWRnZTogZWFjaCBlZGdlDQorI2RlZmluZSBBVDkxQ19UQ19BQkVUUkcgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLy8gKFRDKSBUSU9BIG9yIFRJT0IgRXh0ZXJuYWwgVHJpZ2dlciBTZWxlY3Rpb24NCisjZGVmaW5lIEFUOTFDX1RDX0VFVlQgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDEwKSAvLyAoVEMpIEV4dGVybmFsIEV2ZW50ICBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ19FRVZUX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMTApIC8vIChUQykgU2lnbmFsIHNlbGVjdGVkIGFzIGV4dGVybmFsIGV2ZW50OiBUSU9CIFRJT0IgZGlyZWN0aW9uOiBpbnB1dA0KKyNkZWZpbmUgCUFUOTFDX1RDX0VFVlRfUklTSU5HICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLy8gKFRDKSBTaWduYWwgc2VsZWN0ZWQgYXMgZXh0ZXJuYWwgZXZlbnQ6IFhDMCBUSU9CIGRpcmVjdGlvbjogb3V0cHV0DQorI2RlZmluZSAJQVQ5MUNfVENfRUVWVF9GQUxMSU5HICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDEwKSAvLyAoVEMpIFNpZ25hbCBzZWxlY3RlZCBhcyBleHRlcm5hbCBldmVudDogWEMxIFRJT0IgZGlyZWN0aW9uOiBvdXRwdXQNCisjZGVmaW5lIAlBVDkxQ19UQ19FRVZUX0JPVEggICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTApIC8vIChUQykgU2lnbmFsIHNlbGVjdGVkIGFzIGV4dGVybmFsIGV2ZW50OiBYQzIgVElPQiBkaXJlY3Rpb246IG91dHB1dA0KKyNkZWZpbmUgQVQ5MUNfVENfRU5FVFJHICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8vIChUQykgRXh0ZXJuYWwgRXZlbnQgVHJpZ2dlciBlbmFibGUNCisjZGVmaW5lIEFUOTFDX1RDX1dBVkVTRUwgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDEzKSAvLyAoVEMpIFdhdmVmb3JtICBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ19XQVZFU0VMX1VQICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMTMpIC8vIChUQykgVVAgbW9kZSB3aXRob3V0IGF0b21hdGljIHRyaWdnZXIgb24gUkMgQ29tcGFyZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX1dBVkVTRUxfVVBET1dOICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMykgLy8gKFRDKSBVUERPV04gbW9kZSB3aXRob3V0IGF1dG9tYXRpYyB0cmlnZ2VyIG9uIFJDIENvbXBhcmUNCisjZGVmaW5lIAlBVDkxQ19UQ19XQVZFU0VMX1VQX0FVVE8gICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMTMpIC8vIChUQykgVVAgbW9kZSB3aXRoIGF1dG9tYXRpYyB0cmlnZ2VyIG9uIFJDIENvbXBhcmUNCisjZGVmaW5lIAlBVDkxQ19UQ19XQVZFU0VMX1VQRE9XTl9BVVRPICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTMpIC8vIChUQykgVVBET1dOIG1vZGUgd2l0aCBhdXRvbWF0aWMgdHJpZ2dlciBvbiBSQyBDb21wYXJlDQorI2RlZmluZSBBVDkxQ19UQ19DUENUUkcgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNCkgLy8gKFRDKSBSQyBDb21wYXJlIFRyaWdnZXIgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19UQ19XQVZFICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNSkgLy8gKFRDKSANCisjZGVmaW5lIEFUOTFDX1RDX0xEUkEgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE2KSAvLyAoVEMpIFJBIExvYWRpbmcgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfVENfTERSQV9OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDE2KSAvLyAoVEMpIEVkZ2U6IE5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19MRFJBX1JJU0lORyAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChUQykgRWRnZTogcmlzaW5nIGVkZ2Ugb2YgVElPQQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0xEUkFfRkFMTElORyAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxNikgLy8gKFRDKSBFZGdlOiBmYWxsaW5nIGVkZ2Ugb2YgVElPQQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0xEUkFfQk9USCAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxNikgLy8gKFRDKSBFZGdlOiBlYWNoIGVkZ2Ugb2YgVElPQQ0KKyNkZWZpbmUgQVQ5MUNfVENfQUNQQSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTYpIC8vIChUQykgUkEgQ29tcGFyZSBFZmZlY3Qgb24gVElPQQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0FDUEFfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAxNikgLy8gKFRDKSBFZmZlY3Q6IG5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19BQ1BBX1NFVCAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChUQykgRWZmZWN0OiBzZXQNCisjZGVmaW5lIAlBVDkxQ19UQ19BQ1BBX0NMRUFSICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMTYpIC8vIChUQykgRWZmZWN0OiBjbGVhcg0KKyNkZWZpbmUgCUFUOTFDX1RDX0FDUEFfVE9HR0xFICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxNikgLy8gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KKyNkZWZpbmUgQVQ5MUNfVENfTERSQiAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTgpIC8vIChUQykgUkIgTG9hZGluZyBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ19MRFJCX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMTgpIC8vIChUQykgRWRnZTogTm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0xEUkJfUklTSU5HICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOCkgLy8gKFRDKSBFZGdlOiByaXNpbmcgZWRnZSBvZiBUSU9BDQorI2RlZmluZSAJQVQ5MUNfVENfTERSQl9GQUxMSU5HICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDE4KSAvLyAoVEMpIEVkZ2U6IGZhbGxpbmcgZWRnZSBvZiBUSU9BDQorI2RlZmluZSAJQVQ5MUNfVENfTERSQl9CT1RIICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE4KSAvLyAoVEMpIEVkZ2U6IGVhY2ggZWRnZSBvZiBUSU9BDQorI2RlZmluZSBBVDkxQ19UQ19BQ1BDICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxOCkgLy8gKFRDKSBSQyBDb21wYXJlIEVmZmVjdCBvbiBUSU9BDQorI2RlZmluZSAJQVQ5MUNfVENfQUNQQ19OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDE4KSAvLyAoVEMpIEVmZmVjdDogbm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0FDUENfU0VUICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOCkgLy8gKFRDKSBFZmZlY3Q6IHNldA0KKyNkZWZpbmUgCUFUOTFDX1RDX0FDUENfQ0xFQVIgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxOCkgLy8gKFRDKSBFZmZlY3Q6IGNsZWFyDQorI2RlZmluZSAJQVQ5MUNfVENfQUNQQ19UT0dHTEUgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE4KSAvLyAoVEMpIEVmZmVjdDogdG9nZ2xlDQorI2RlZmluZSBBVDkxQ19UQ19BRUVWVCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyMCkgLy8gKFRDKSBFeHRlcm5hbCBFdmVudCBFZmZlY3Qgb24gVElPQQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0FFRVZUX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMjApIC8vIChUQykgRWZmZWN0OiBub25lDQorI2RlZmluZSAJQVQ5MUNfVENfQUVFVlRfU0VUICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMCkgLy8gKFRDKSBFZmZlY3Q6IHNldA0KKyNkZWZpbmUgCUFUOTFDX1RDX0FFRVZUX0NMRUFSICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMjApIC8vIChUQykgRWZmZWN0OiBjbGVhcg0KKyNkZWZpbmUgCUFUOTFDX1RDX0FFRVZUX1RPR0dMRSAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMjApIC8vIChUQykgRWZmZWN0OiB0b2dnbGUNCisjZGVmaW5lIEFUOTFDX1RDX0FTV1RSRyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDIyKSAvLyAoVEMpIFNvZnR3YXJlIFRyaWdnZXIgRWZmZWN0IG9uIFRJT0ENCisjZGVmaW5lIAlBVDkxQ19UQ19BU1dUUkdfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAyMikgLy8gKFRDKSBFZmZlY3Q6IG5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19BU1dUUkdfU0VUICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMikgLy8gKFRDKSBFZmZlY3Q6IHNldA0KKyNkZWZpbmUgCUFUOTFDX1RDX0FTV1RSR19DTEVBUiAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDIyKSAvLyAoVEMpIEVmZmVjdDogY2xlYXINCisjZGVmaW5lIAlBVDkxQ19UQ19BU1dUUkdfVE9HR0xFICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyMikgLy8gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KKyNkZWZpbmUgQVQ5MUNfVENfQkNQQiAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMjQpIC8vIChUQykgUkIgQ29tcGFyZSBFZmZlY3Qgb24gVElPQg0KKyNkZWZpbmUgCUFUOTFDX1RDX0JDUEJfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAyNCkgLy8gKFRDKSBFZmZlY3Q6IG5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19CQ1BCX1NFVCAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjQpIC8vIChUQykgRWZmZWN0OiBzZXQNCisjZGVmaW5lIAlBVDkxQ19UQ19CQ1BCX0NMRUFSICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMjQpIC8vIChUQykgRWZmZWN0OiBjbGVhcg0KKyNkZWZpbmUgCUFUOTFDX1RDX0JDUEJfVE9HR0xFICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyNCkgLy8gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KKyNkZWZpbmUgQVQ5MUNfVENfQkNQQyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMjYpIC8vIChUQykgUkMgQ29tcGFyZSBFZmZlY3Qgb24gVElPQg0KKyNkZWZpbmUgCUFUOTFDX1RDX0JDUENfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAyNikgLy8gKFRDKSBFZmZlY3Q6IG5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19CQ1BDX1NFVCAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjYpIC8vIChUQykgRWZmZWN0OiBzZXQNCisjZGVmaW5lIAlBVDkxQ19UQ19CQ1BDX0NMRUFSICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMjYpIC8vIChUQykgRWZmZWN0OiBjbGVhcg0KKyNkZWZpbmUgCUFUOTFDX1RDX0JDUENfVE9HR0xFICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyNikgLy8gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KKyNkZWZpbmUgQVQ5MUNfVENfQkVFVlQgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMjgpIC8vIChUQykgRXh0ZXJuYWwgRXZlbnQgRWZmZWN0IG9uIFRJT0INCisjZGVmaW5lIAlBVDkxQ19UQ19CRUVWVF9OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDI4KSAvLyAoVEMpIEVmZmVjdDogbm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0JFRVZUX1NFVCAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjgpIC8vIChUQykgRWZmZWN0OiBzZXQNCisjZGVmaW5lIAlBVDkxQ19UQ19CRUVWVF9DTEVBUiAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDI4KSAvLyAoVEMpIEVmZmVjdDogY2xlYXINCisjZGVmaW5lIAlBVDkxQ19UQ19CRUVWVF9UT0dHTEUgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDI4KSAvLyAoVEMpIEVmZmVjdDogdG9nZ2xlDQorI2RlZmluZSBBVDkxQ19UQ19CU1dUUkcgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAzMCkgLy8gKFRDKSBTb2Z0d2FyZSBUcmlnZ2VyIEVmZmVjdCBvbiBUSU9CDQorI2RlZmluZSAJQVQ5MUNfVENfQlNXVFJHX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMzApIC8vIChUQykgRWZmZWN0OiBub25lDQorI2RlZmluZSAJQVQ5MUNfVENfQlNXVFJHX1NFVCAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMzApIC8vIChUQykgRWZmZWN0OiBzZXQNCisjZGVmaW5lIAlBVDkxQ19UQ19CU1dUUkdfQ0xFQVIgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAzMCkgLy8gKFRDKSBFZmZlY3Q6IGNsZWFyDQorI2RlZmluZSAJQVQ5MUNfVENfQlNXVFJHX1RPR0dMRSAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMzApIC8vIChUQykgRWZmZWN0OiB0b2dnbGUNCisvLyAtLS0tLS0tLSBUQ19TUiA6IChUQyBPZmZzZXQ6IDB4MjApIFRDIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVENfQ09WRlMgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChUQykgQ291bnRlciBPdmVyZmxvdw0KKyNkZWZpbmUgQVQ5MUNfVENfTE9WUlMgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChUQykgTG9hZCBPdmVycnVuDQorI2RlZmluZSBBVDkxQ19UQ19DUEFTICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFRDKSBSQSBDb21wYXJlDQorI2RlZmluZSBBVDkxQ19UQ19DUEJTICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKFRDKSBSQiBDb21wYXJlDQorI2RlZmluZSBBVDkxQ19UQ19DUENTICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFRDKSBSQyBDb21wYXJlDQorI2RlZmluZSBBVDkxQ19UQ19MRFJBUyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKFRDKSBSQSBMb2FkaW5nDQorI2RlZmluZSBBVDkxQ19UQ19MRFJCUyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLy8gKFRDKSBSQiBMb2FkaW5nDQorI2RlZmluZSBBVDkxQ19UQ19FVFJDUyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKFRDKSBFeHRlcm5hbCBUcmlnZ2VyDQorI2RlZmluZSBBVDkxQ19UQ19FVFJHUyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKFRDKSBDbG9jayBFbmFibGluZw0KKyNkZWZpbmUgQVQ5MUNfVENfTVRJT0EgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTcpIC8vIChUQykgVElPQSBNaXJyb3INCisjZGVmaW5lIEFUOTFDX1RDX01USU9CICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE4KSAvLyAoVEMpIFRJT0EgTWlycm9yDQorLy8gLS0tLS0tLS0gVENfSUVSIDogKFRDIE9mZnNldDogMHgyNCkgVEMgQ2hhbm5lbCBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFRDX0lEUiA6IChUQyBPZmZzZXQ6IDB4MjgpIFRDIENoYW5uZWwgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVENfSU1SIDogKFRDIE9mZnNldDogMHgyYykgVEMgQ2hhbm5lbCBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFRpbWVyIENvdW50ZXIgSW50ZXJmYWNlICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfVENCDQotew0KLSAgICBBVDkxU19UQyBUQ0JfVEMwOyAgICAgICAgLyogVEMgQ2hhbm5lbCAwICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMFsgNCBdOyAvKiAqLw0KLSAgICBBVDkxU19UQyBUQ0JfVEMxOyAgICAgICAgLyogVEMgQ2hhbm5lbCAxICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMVsgNCBdOyAvKiAqLw0KLSAgICBBVDkxU19UQyBUQ0JfVEMyOyAgICAgICAgLyogVEMgQ2hhbm5lbCAyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMlsgNCBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBUQ0JfQkNSOyAgICAgICAgLyogVEMgQmxvY2sgQ29udHJvbCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBUQ0JfQk1SOyAgICAgICAgLyogVEMgQmxvY2sgTW9kZSBSZWdpc3RlciAqLw0KLX0gQVQ5MVNfVENCLCAqIEFUOTFQU19UQ0I7DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBUaW1lciBDb3VudGVyIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1RDQiB7DQorCUFUOTFTX1RDCSBUQ0JfVEMwOyAJLy8gVEMgQ2hhbm5lbCAwDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbNF07IAkvLyANCisJQVQ5MVNfVEMJIFRDQl9UQzE7IAkvLyBUQyBDaGFubmVsIDENCisJQVQ5MV9SRUcJIFJlc2VydmVkMVs0XTsgCS8vIA0KKwlBVDkxU19UQwkgVENCX1RDMjsgCS8vIFRDIENoYW5uZWwgMg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQyWzRdOyAJLy8gDQorCUFUOTFfUkVHCSBUQ0JfQkNSOyAJLy8gVEMgQmxvY2sgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVENCX0JNUjsgCS8vIFRDIEJsb2NrIE1vZGUgUmVnaXN0ZXINCit9IEFUOTFTX1RDQiwgKkFUOTFQU19UQ0I7DQogDQotLyogLS0tLS0tLS0gVENCX0JDUiA6IChUQ0IgT2Zmc2V0OiAweGMwKSBUQyBCbG9jayBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19UQ0JfU1lOQyAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgLyogKFRDQikgU3luY2hybyBDb21tYW5kICovDQotLyogLS0tLS0tLS0gVENCX0JNUiA6IChUQ0IgT2Zmc2V0OiAweGM0KSBUQyBCbG9jayBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19UQ0JfVEMwWEMwUyAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgLyogKFRDQikgRXh0ZXJuYWwgQ2xvY2sgU2lnbmFsIDAgU2VsZWN0aW9uICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENCX1RDMFhDMFNfVENMSzAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCApICAgICAgLyogKFRDQikgVENMSzAgY29ubmVjdGVkIHRvIFhDMCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDQl9UQzBYQzBTX05PTkUgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgKSAgICAgIC8qIChUQ0IpIE5vbmUgc2lnbmFsIGNvbm5lY3RlZCB0byBYQzAgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ0JfVEMwWEMwU19USU9BMSAgICAoICggdW5zaWduZWQgaW50ICkgMHgyICkgICAgICAvKiAoVENCKSBUSU9BMSBjb25uZWN0ZWQgdG8gWEMwICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENCX1RDMFhDMFNfVElPQTIgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyApICAgICAgLyogKFRDQikgVElPQTIgY29ubmVjdGVkIHRvIFhDMCAqLw0KLSNkZWZpbmUgQVQ5MUNfVENCX1RDMVhDMVMgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMiApIC8qIChUQ0IpIEV4dGVybmFsIENsb2NrIFNpZ25hbCAxIFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDQl9UQzFYQzFTX1RDTEsxICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMiApIC8qIChUQ0IpIFRDTEsxIGNvbm5lY3RlZCB0byBYQzEgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ0JfVEMxWEMxU19OT05FICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAvKiAoVENCKSBOb25lIHNpZ25hbCBjb25uZWN0ZWQgdG8gWEMxICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENCX1RDMVhDMVNfVElPQTAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCAyICkgLyogKFRDQikgVElPQTAgY29ubmVjdGVkIHRvIFhDMSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDQl9UQzFYQzFTX1RJT0EyICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMiApIC8qIChUQ0IpIFRJT0EyIGNvbm5lY3RlZCB0byBYQzEgKi8NCi0jZGVmaW5lIEFUOTFDX1RDQl9UQzJYQzJTICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDQgKSAvKiAoVENCKSBFeHRlcm5hbCBDbG9jayBTaWduYWwgMiBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ0JfVEMyWEMyU19UQ0xLMiAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDQgKSAvKiAoVENCKSBUQ0xLMiBjb25uZWN0ZWQgdG8gWEMyICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENCX1RDMlhDMlNfTk9ORSAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA0ICkgLyogKFRDQikgTm9uZSBzaWduYWwgY29ubmVjdGVkIHRvIFhDMiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDQl9UQzJYQzJTX1RJT0EwICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgNCApIC8qIChUQ0IpIFRJT0EwIGNvbm5lY3RlZCB0byBYQzIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ0JfVEMyWEMyU19USU9BMiAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDQgKSAvKiAoVENCKSBUSU9BMiBjb25uZWN0ZWQgdG8gWEMyICovDQorLy8gLS0tLS0tLS0gVENCX0JDUiA6IChUQ0IgT2Zmc2V0OiAweGMwKSBUQyBCbG9jayBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVENCX1NZTkMgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChUQ0IpIFN5bmNocm8gQ29tbWFuZA0KKy8vIC0tLS0tLS0tIFRDQl9CTVIgOiAoVENCIE9mZnNldDogMHhjNCkgVEMgQmxvY2sgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RDQl9UQzBYQzBTICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoVENCKSBFeHRlcm5hbCBDbG9jayBTaWduYWwgMCBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMwWEMwU19UQ0xLMCAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwKSAvLyAoVENCKSBUQ0xLMCBjb25uZWN0ZWQgdG8gWEMwDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMFhDMFNfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSkgLy8gKFRDQikgTm9uZSBzaWduYWwgY29ubmVjdGVkIHRvIFhDMA0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzBYQzBTX1RJT0ExICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIpIC8vIChUQ0IpIFRJT0ExIGNvbm5lY3RlZCB0byBYQzANCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMwWEMwU19USU9BMiAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzKSAvLyAoVENCKSBUSU9BMiBjb25uZWN0ZWQgdG8gWEMwDQorI2RlZmluZSBBVDkxQ19UQ0JfVEMxWEMxUyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFRDQikgRXh0ZXJuYWwgQ2xvY2sgU2lnbmFsIDEgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMVhDMVNfVENMSzEgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgMikgLy8gKFRDQikgVENMSzEgY29ubmVjdGVkIHRvIFhDMQ0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzFYQzFTX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChUQ0IpIE5vbmUgc2lnbmFsIGNvbm5lY3RlZCB0byBYQzENCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMxWEMxU19USU9BMCAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICAyKSAvLyAoVENCKSBUSU9BMCBjb25uZWN0ZWQgdG8gWEMxDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMVhDMVNfVElPQTIgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgMikgLy8gKFRDQikgVElPQTIgY29ubmVjdGVkIHRvIFhDMQ0KKyNkZWZpbmUgQVQ5MUNfVENCX1RDMlhDMlMgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChUQ0IpIEV4dGVybmFsIENsb2NrIFNpZ25hbCAyIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzJYQzJTX1RDTEsyICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDQpIC8vIChUQ0IpIFRDTEsyIGNvbm5lY3RlZCB0byBYQzINCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMyWEMyU19OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoVENCKSBOb25lIHNpZ25hbCBjb25uZWN0ZWQgdG8gWEMyDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMlhDMlNfVElPQTAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgNCkgLy8gKFRDQikgVElPQTAgY29ubmVjdGVkIHRvIFhDMg0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzJYQzJTX1RJT0EyICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDQpIC8vIChUQ0IpIFRJT0EyIGNvbm5lY3RlZCB0byBYQzINCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFBXTUMgQ2hhbm5lbCBJbnRlcmZhY2UgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLXR5cGVkZWYgc3RydWN0IF9BVDkxU19QV01DX0NIDQotew0KLSAgICBBVDkxX1JFRyBQV01DX0NNUjsgICAgICAgICAgIC8qIENoYW5uZWwgTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQV01DX0NEVFlSOyAgICAgICAgIC8qIENoYW5uZWwgRHV0eSBDeWNsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQV01DX0NQUkRSOyAgICAgICAgIC8qIENoYW5uZWwgUGVyaW9kIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBXTUNfQ0NOVFI7ICAgICAgICAgLyogQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBXTUNfQ1VQRFI7ICAgICAgICAgLyogQ2hhbm5lbCBVcGRhdGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUFdNQ19SZXNlcnZlZFsgMyBdOyAvKiBSZXNlcnZlZCAqLw0KLX0gQVQ5MVNfUFdNQ19DSCwgKiBBVDkxUFNfUFdNQ19DSDsNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFBXTUMgQ2hhbm5lbCBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19QV01DX0NIIHsNCisJQVQ5MV9SRUcJIFBXTUNfQ01SOyAJLy8gQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQV01DX0NEVFlSOyAJLy8gQ2hhbm5lbCBEdXR5IEN5Y2xlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQV01DX0NQUkRSOyAJLy8gQ2hhbm5lbCBQZXJpb2QgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBXTUNfQ0NOVFI7IAkvLyBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBXTUNfQ1VQRFI7IAkvLyBDaGFubmVsIFVwZGF0ZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUFdNQ19SZXNlcnZlZFszXTsgCS8vIFJlc2VydmVkDQorfSBBVDkxU19QV01DX0NILCAqQVQ5MVBTX1BXTUNfQ0g7DQogDQotLyogLS0tLS0tLS0gUFdNQ19DTVIgOiAoUFdNQ19DSCBPZmZzZXQ6IDB4MCkgUFdNQyBDaGFubmVsIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ1BSRSAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGIDw8IDAgKSAgLyogKFBXTUNfQ0gpIENoYW5uZWwgUHJlLXNjYWxlciA6IFBXTUNfQ0xLeCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1BXTUNfQ1BSRV9NQ0sgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgKSAgICAgICAvKiAoUFdNQ19DSCkgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19QV01DX0NQUkVfTUNLQSAgICAoICggdW5zaWduZWQgaW50ICkgMHhCICkgICAgICAgLyogKFBXTUNfQ0gpICovDQotI2RlZmluZSAgICAgQVQ5MUNfUFdNQ19DUFJFX01DS0IgICAgKCAoIHVuc2lnbmVkIGludCApIDB4QyApICAgICAgIC8qIChQV01DX0NIKSAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DQUxHICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOCApICAvKiAoUFdNQ19DSCkgQ2hhbm5lbCBBbGlnbm1lbnQgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ1BPTCAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDkgKSAgLyogKFBXTUNfQ0gpIENoYW5uZWwgUG9sYXJpdHkgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ1BEICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEwICkgLyogKFBXTUNfQ0gpIENoYW5uZWwgVXBkYXRlIFBlcmlvZCAqLw0KLS8qIC0tLS0tLS0tIFBXTUNfQ0RUWVIgOiAoUFdNQ19DSCBPZmZzZXQ6IDB4NCkgUFdNQyBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0RUWSAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDAgKSAgLyogKFBXTUNfQ0gpIENoYW5uZWwgRHV0eSBDeWNsZSAqLw0KLS8qIC0tLS0tLS0tIFBXTUNfQ1BSRFIgOiAoUFdNQ19DSCBPZmZzZXQ6IDB4OCkgUFdNQyBDaGFubmVsIFBlcmlvZCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DUFJEICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMCApICAvKiAoUFdNQ19DSCkgQ2hhbm5lbCBQZXJpb2QgKi8NCi0vKiAtLS0tLS0tLSBQV01DX0NDTlRSIDogKFBXTUNfQ0ggT2Zmc2V0OiAweGMpIFBXTUMgQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NDTlQgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAwICkgIC8qIChQV01DX0NIKSBDaGFubmVsIENvdW50ZXIgKi8NCi0vKiAtLS0tLS0tLSBQV01DX0NVUERSIDogKFBXTUNfQ0ggT2Zmc2V0OiAweDEwKSBQV01DIENoYW5uZWwgVXBkYXRlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NVUEQgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAwICkgIC8qIChQV01DX0NIKSBDaGFubmVsIFVwZGF0ZSAqLw0KKy8vIC0tLS0tLS0tIFBXTUNfQ01SIDogKFBXTUNfQ0ggT2Zmc2V0OiAweDApIFBXTUMgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DUFJFICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgIDApIC8vIChQV01DX0NIKSBDaGFubmVsIFByZS1zY2FsZXIgOiBQV01DX0NMS3gNCisjZGVmaW5lIAlBVDkxQ19QV01DX0NQUkVfTUNLICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCkgLy8gKFBXTUNfQ0gpIA0KKyNkZWZpbmUgCUFUOTFDX1BXTUNfQ1BSRV9NQ0tBICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhCKSAvLyAoUFdNQ19DSCkgDQorI2RlZmluZSAJQVQ5MUNfUFdNQ19DUFJFX01DS0IgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweEMpIC8vIChQV01DX0NIKSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0FMRyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoUFdNQ19DSCkgQ2hhbm5lbCBBbGlnbm1lbnQNCisjZGVmaW5lIEFUOTFDX1BXTUNfQ1BPTCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvLyAoUFdNQ19DSCkgQ2hhbm5lbCBQb2xhcml0eQ0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DUEQgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChQV01DX0NIKSBDaGFubmVsIFVwZGF0ZSBQZXJpb2QNCisvLyAtLS0tLS0tLSBQV01DX0NEVFlSIDogKFBXTUNfQ0ggT2Zmc2V0OiAweDQpIFBXTUMgQ2hhbm5lbCBEdXR5IEN5Y2xlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DRFRZICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDApIC8vIChQV01DX0NIKSBDaGFubmVsIER1dHkgQ3ljbGUNCisvLyAtLS0tLS0tLSBQV01DX0NQUkRSIDogKFBXTUNfQ0ggT2Zmc2V0OiAweDgpIFBXTUMgQ2hhbm5lbCBQZXJpb2QgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QV01DX0NQUkQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgMCkgLy8gKFBXTUNfQ0gpIENoYW5uZWwgUGVyaW9kDQorLy8gLS0tLS0tLS0gUFdNQ19DQ05UUiA6IChQV01DX0NIIE9mZnNldDogMHhjKSBQV01DIENoYW5uZWwgQ291bnRlciBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0NOVCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICAwKSAvLyAoUFdNQ19DSCkgQ2hhbm5lbCBDb3VudGVyDQorLy8gLS0tLS0tLS0gUFdNQ19DVVBEUiA6IChQV01DX0NIIE9mZnNldDogMHgxMCkgUFdNQyBDaGFubmVsIFVwZGF0ZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ1VQRCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICAwKSAvLyAoUFdNQ19DSCkgQ2hhbm5lbCBVcGRhdGUNCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFB1bHNlIFdpZHRoIE1vZHVsYXRpb24gQ29udHJvbGxlciBJbnRlcmZhY2UgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLXR5cGVkZWYgc3RydWN0IF9BVDkxU19QV01DDQotew0KLSAgICBBVDkxX1JFRyBQV01DX01SOyAgICAgICAgICAgIC8qIFBXTUMgTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQV01DX0VOQTsgICAgICAgICAgIC8qIFBXTUMgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBXTUNfRElTOyAgICAgICAgICAgLyogUFdNQyBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBXTUNfU1I7ICAgICAgICAgICAgLyogUFdNQyBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUFdNQ19JRVI7ICAgICAgICAgICAvKiBQV01DIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUFdNQ19JRFI7ICAgICAgICAgICAvKiBQV01DIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBXTUNfSU1SOyAgICAgICAgICAgLyogUFdNQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQV01DX0lTUjsgICAgICAgICAgIC8qIFBXTUMgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDBbIDU1IF07ICAgIC8qICovDQotICAgIEFUOTFfUkVHIFBXTUNfVlI7ICAgICAgICAgICAgLyogUFdNQyBWZXJzaW9uIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMVsgNjQgXTsgICAgLyogKi8NCi0gICAgQVQ5MVNfUFdNQ19DSCBQV01DX0NIWyAzMiBdOyAvKiBQV01DIENoYW5uZWwgMCAqLw0KLX0gQVQ5MVNfUFdNQywgKiBBVDkxUFNfUFdNQzsNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFB1bHNlIFdpZHRoIE1vZHVsYXRpb24gQ29udHJvbGxlciBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19QV01DIHsNCisJQVQ5MV9SRUcJIFBXTUNfTVI7IAkvLyBQV01DIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBXTUNfRU5BOyAJLy8gUFdNQyBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBXTUNfRElTOyAJLy8gUFdNQyBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQV01DX1NSOyAJLy8gUFdNQyBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBXTUNfSUVSOyAJLy8gUFdNQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQV01DX0lEUjsgCS8vIFBXTUMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBXTUNfSU1SOyAJLy8gUFdNQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUFdNQ19JU1I7IAkvLyBQV01DIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFs1NV07IAkvLyANCisJQVQ5MV9SRUcJIFBXTUNfVlI7IAkvLyBQV01DIFZlcnNpb24gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMVs2NF07IAkvLyANCisJQVQ5MVNfUFdNQ19DSAkgUFdNQ19DSFszMl07IAkvLyBQV01DIENoYW5uZWwgMA0KK30gQVQ5MVNfUFdNQywgKkFUOTFQU19QV01DOw0KIA0KLS8qIC0tLS0tLS0tIFBXTUNfTVIgOiAoUFdNQyBPZmZzZXQ6IDB4MCkgUFdNQyBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19QV01DX0RJVkEgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRiA8PCAwICkgIC8qIChQV01DKSBDTEtBIGRpdmlkZSBmYWN0b3IuICovDQotI2RlZmluZSBBVDkxQ19QV01DX1BSRUEgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGIDw8IDggKSAgIC8qIChQV01DKSBEaXZpZGVyIElucHV0IENsb2NrIFByZXNjYWxlciBBICovDQotI2RlZmluZSAgICAgQVQ5MUNfUFdNQ19QUkVBX01DSyAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDggKSAgIC8qIChQV01DKSAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19ESVZCICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RkYgPDwgMTYgKSAvKiAoUFdNQykgQ0xLQiBkaXZpZGUgZmFjdG9yLiAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19QUkVCICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RiA8PCAyNCApICAvKiAoUFdNQykgRGl2aWRlciBJbnB1dCBDbG9jayBQcmVzY2FsZXIgQiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1BXTUNfUFJFQl9NQ0sgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAyNCApICAvKiAoUFdNQykgKi8NCi0vKiAtLS0tLS0tLSBQV01DX0VOQSA6IChQV01DIE9mZnNldDogMHg0KSBQV01DIEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSElEMCAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgICAvKiAoUFdNQykgQ2hhbm5lbCBJRCAwICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NISUQxICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEgKSAgIC8qIChQV01DKSBDaGFubmVsIElEIDEgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0hJRDIgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMiApICAgLyogKFBXTUMpIENoYW5uZWwgSUQgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSElEMyAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzICkgICAvKiAoUFdNQykgQ2hhbm5lbCBJRCAzICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NISUQ0ICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDQgKSAgIC8qIChQV01DKSBDaGFubmVsIElEIDQgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0hJRDUgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNSApICAgLyogKFBXTUMpIENoYW5uZWwgSUQgNSAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSElENiAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA2ICkgICAvKiAoUFdNQykgQ2hhbm5lbCBJRCA2ICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NISUQ3ICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDcgKSAgIC8qIChQV01DKSBDaGFubmVsIElEIDcgKi8NCi0vKiAtLS0tLS0tLSBQV01DX0RJUyA6IChQV01DIE9mZnNldDogMHg4KSBQV01DIERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBQV01DX1NSIDogKFBXTUMgT2Zmc2V0OiAweGMpIFBXTUMgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gUFdNQ19JRVIgOiAoUFdNQyBPZmZzZXQ6IDB4MTApIFBXTUMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFBXTUNfSURSIDogKFBXTUMgT2Zmc2V0OiAweDE0KSBQV01DIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gUFdNQ19JTVIgOiAoUFdNQyBPZmZzZXQ6IDB4MTgpIFBXTUMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBQV01DX0lTUiA6IChQV01DIE9mZnNldDogMHgxYykgUFdNQyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQorLy8gLS0tLS0tLS0gUFdNQ19NUiA6IChQV01DIE9mZnNldDogMHgwKSBQV01DIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QV01DX0RJVkEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgIDApIC8vIChQV01DKSBDTEtBIGRpdmlkZSBmYWN0b3IuDQorI2RlZmluZSBBVDkxQ19QV01DX1BSRUEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAgOCkgLy8gKFBXTUMpIERpdmlkZXIgSW5wdXQgQ2xvY2sgUHJlc2NhbGVyIEENCisjZGVmaW5lIAlBVDkxQ19QV01DX1BSRUFfTUNLICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgOCkgLy8gKFBXTUMpIA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19ESVZCICAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8IDE2KSAvLyAoUFdNQykgQ0xLQiBkaXZpZGUgZmFjdG9yLg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19QUkVCICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgMjQpIC8vIChQV01DKSBEaXZpZGVyIElucHV0IENsb2NrIFByZXNjYWxlciBCDQorI2RlZmluZSAJQVQ5MUNfUFdNQ19QUkVCX01DSyAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMjQpIC8vIChQV01DKSANCisvLyAtLS0tLS0tLSBQV01DX0VOQSA6IChQV01DIE9mZnNldDogMHg0KSBQV01DIEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0hJRDAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoUFdNQykgQ2hhbm5lbCBJRCAwDQorI2RlZmluZSBBVDkxQ19QV01DX0NISUQxICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFBXTUMpIENoYW5uZWwgSUQgMQ0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSElEMiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChQV01DKSBDaGFubmVsIElEIDINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0hJRDMgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoUFdNQykgQ2hhbm5lbCBJRCAzDQorI2RlZmluZSBBVDkxQ19QV01DX0NISUQ0ICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFBXTUMpIENoYW5uZWwgSUQgNA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSElENSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChQV01DKSBDaGFubmVsIElEIDUNCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0hJRDYgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoUFdNQykgQ2hhbm5lbCBJRCA2DQorI2RlZmluZSBBVDkxQ19QV01DX0NISUQ3ICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKFBXTUMpIENoYW5uZWwgSUQgNw0KKy8vIC0tLS0tLS0tIFBXTUNfRElTIDogKFBXTUMgT2Zmc2V0OiAweDgpIFBXTUMgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQV01DX1NSIDogKFBXTUMgT2Zmc2V0OiAweGMpIFBXTUMgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFBXTUNfSUVSIDogKFBXTUMgT2Zmc2V0OiAweDEwKSBQV01DIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUFdNQ19JRFIgOiAoUFdNQyBPZmZzZXQ6IDB4MTQpIFBXTUMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUFdNQ19JTVIgOiAoUFdNQyBPZmZzZXQ6IDB4MTgpIFBXTUMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUFdNQ19JU1IgOiAoUFdNQyBPZmZzZXQ6IDB4MWMpIFBXTUMgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFVTQiBEZXZpY2UgSW50ZXJmYWNlICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfVURQDQotew0KLSAgICBBVDkxX1JFRyBVRFBfTlVNOyAgICAgICAgLyogRnJhbWUgTnVtYmVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFVEUF9HTEJTVEFURTsgICAvKiBHbG9iYWwgU3RhdGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVURQX0ZBRERSOyAgICAgIC8qIEZ1bmN0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQwWyAxIF07IC8qICovDQotICAgIEFUOTFfUkVHIFVEUF9JRVI7ICAgICAgICAvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFVEUF9JRFI7ICAgICAgICAvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBVRFBfSU1SOyAgICAgICAgLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVURQX0lTUjsgICAgICAgIC8qIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVURQX0lDUjsgICAgICAgIC8qIEludGVycnVwdCBDbGVhciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDFbIDEgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgVURQX1JTVEVQOyAgICAgIC8qIFJlc2V0IEVuZHBvaW50IFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMlsgMSBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBVRFBfQ1NSWyA4IF07ICAgLyogRW5kcG9pbnQgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFVEUF9GRFJbIDggXTsgICAvKiBFbmRwb2ludCBGSUZPIERhdGEgUmVnaXN0ZXIgKi8NCi19IEFUOTFTX1VEUCwgKiBBVDkxUFNfVURQOw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVVNCIERldmljZSBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19VRFAgew0KKwlBVDkxX1JFRwkgVURQX05VTTsgCS8vIEZyYW1lIE51bWJlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVURQX0dMQlNUQVRFOyAJLy8gR2xvYmFsIFN0YXRlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVRFBfRkFERFI7IAkvLyBGdW5jdGlvbiBBZGRyZXNzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbMV07IAkvLyANCisJQVQ5MV9SRUcJIFVEUF9JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVRFBfSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVEUF9JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVURQX0lTUjsgCS8vIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVEUF9JQ1I7IAkvLyBJbnRlcnJ1cHQgQ2xlYXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMVsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgVURQX1JTVEVQOyAJLy8gUmVzZXQgRW5kcG9pbnQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMlsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgVURQX0NTUls4XTsgCS8vIEVuZHBvaW50IENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVURQX0ZEUls4XTsgCS8vIEVuZHBvaW50IEZJRk8gRGF0YSBSZWdpc3Rlcg0KK30gQVQ5MVNfVURQLCAqQVQ5MVBTX1VEUDsNCiANCi0vKiAtLS0tLS0tLSBVRFBfRlJNX05VTSA6IChVRFAgT2Zmc2V0OiAweDApIFVTQiBGcmFtZSBOdW1iZXIgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9GUk1fTlVNICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDdGRiA8PCAwICkgLyogKFVEUCkgRnJhbWUgTnVtYmVyIGFzIERlZmluZWQgaW4gdGhlIFBhY2tldCBGaWVsZCBGb3JtYXRzICovDQotI2RlZmluZSBBVDkxQ19VRFBfRlJNX0VSUiAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE2ICkgIC8qIChVRFApIEZyYW1lIEVycm9yICovDQotI2RlZmluZSBBVDkxQ19VRFBfRlJNX09LICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE3ICkgIC8qIChVRFApIEZyYW1lIE9LICovDQotLyogLS0tLS0tLS0gVURQX0dMQl9TVEFURSA6IChVRFAgT2Zmc2V0OiAweDQpIFVTQiBHbG9iYWwgU3RhdGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9GQURERU4gICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgLyogKFVEUCkgRnVuY3Rpb24gQWRkcmVzcyBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9DT05GRyAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAgLyogKFVEUCkgQ29uZmlndXJlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX1JNV1VQRSAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyICkgICAvKiAoVURQKSBSZW1vdGUgV2FrZSBVcCBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9SU01JTlBSICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMyApICAgLyogKFVEUCkgQSBSZXN1bWUgSGFzIEJlZW4gU2VudCB0byB0aGUgSG9zdCAqLw0KLS8qIC0tLS0tLS0tIFVEUF9GQUREUiA6IChVRFAgT2Zmc2V0OiAweDgpIFVTQiBGdW5jdGlvbiBBZGRyZXNzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19VRFBfRkFERCAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRiA8PCAwICkgIC8qIChVRFApIEZ1bmN0aW9uIEFkZHJlc3MgVmFsdWUgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9GRU4gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOCApICAgLyogKFVEUCkgRnVuY3Rpb24gRW5hYmxlICovDQotLyogLS0tLS0tLS0gVURQX0lFUiA6IChVRFAgT2Zmc2V0OiAweDEwKSBVU0IgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UMCAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgICAvKiAoVURQKSBFbmRwb2ludCAwIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UMSAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgICAvKiAoVURQKSBFbmRwb2ludCAwIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UMiAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyICkgICAvKiAoVURQKSBFbmRwb2ludCAyIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UMyAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzICkgICAvKiAoVURQKSBFbmRwb2ludCAzIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UNCAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA0ICkgICAvKiAoVURQKSBFbmRwb2ludCA0IEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UNSAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA1ICkgICAvKiAoVURQKSBFbmRwb2ludCA1IEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UNiAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA2ICkgICAvKiAoVURQKSBFbmRwb2ludCA2IEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UNyAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA3ICkgICAvKiAoVURQKSBFbmRwb2ludCA3IEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX1JYU1VTUCAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgICAvKiAoVURQKSBVU0IgU3VzcGVuZCBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9SWFJTTSAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOSApICAgLyogKFVEUCkgVVNCIFJlc3VtZSBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FWFRSU00gICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTAgKSAgLyogKFVEUCkgVVNCIEV4dGVybmFsIFJlc3VtZSBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9TT0ZJTlQgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTEgKSAgLyogKFVEUCkgVVNCIFN0YXJ0IE9mIGZyYW1lIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX1dBS0VVUCAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMyApICAvKiAoVURQKSBVU0IgUmVzdW1lIEludGVycnVwdCAqLw0KLS8qIC0tLS0tLS0tIFVEUF9JRFIgOiAoVURQIE9mZnNldDogMHgxNCkgVVNCIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gVURQX0lNUiA6IChVRFAgT2Zmc2V0OiAweDE4KSBVU0IgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBVRFBfSVNSIDogKFVEUCBPZmZzZXQ6IDB4MWMpIFVTQiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19VRFBfRU5EQlVTUkVTICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEyICkgLyogKFVEUCkgVVNCIEVuZCBPZiBCdXMgUmVzZXQgSW50ZXJydXB0ICovDQotLyogLS0tLS0tLS0gVURQX0lDUiA6IChVRFAgT2Zmc2V0OiAweDIwKSBVU0IgSW50ZXJydXB0IENsZWFyIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gVURQX1JTVF9FUCA6IChVRFAgT2Zmc2V0OiAweDI4KSBVU0IgUmVzZXQgRW5kcG9pbnQgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUDAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgIC8qIChVRFApIFJlc2V0IEVuZHBvaW50IDAgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUDEgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAgIC8qIChVRFApIFJlc2V0IEVuZHBvaW50IDEgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUDIgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMiApICAgIC8qIChVRFApIFJlc2V0IEVuZHBvaW50IDIgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUDMgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMyApICAgIC8qIChVRFApIFJlc2V0IEVuZHBvaW50IDMgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUDQgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNCApICAgIC8qIChVRFApIFJlc2V0IEVuZHBvaW50IDQgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUDUgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNSApICAgIC8qIChVRFApIFJlc2V0IEVuZHBvaW50IDUgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUDYgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNiApICAgIC8qIChVRFApIFJlc2V0IEVuZHBvaW50IDYgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUDcgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNyApICAgIC8qIChVRFApIFJlc2V0IEVuZHBvaW50IDcgKi8NCi0vKiAtLS0tLS0tLSBVRFBfQ1NSIDogKFVEUCBPZmZzZXQ6IDB4MzApIFVTQiBFbmRwb2ludCBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9UWENPTVAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgIC8qIChVRFApIEdlbmVyYXRlcyBhbiBJTiBwYWNrZXQgd2l0aCBkYXRhIHByZXZpb3VzbHkgd3JpdHRlbiBpbiB0aGUgRFBSICovDQotI2RlZmluZSBBVDkxQ19VRFBfUlhfREFUQV9CSzAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEgKSAgICAvKiAoVURQKSBSZWNlaXZlIERhdGEgQmFuayAwICovDQotI2RlZmluZSBBVDkxQ19VRFBfUlhTRVRVUCAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAgICAvKiAoVURQKSBTZW5kcyBTVEFMTCB0byB0aGUgSG9zdCAoQ29udHJvbCBlbmRwb2ludHMpICovDQotI2RlZmluZSBBVDkxQ19VRFBfSVNPRVJST1IgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDMgKSAgICAvKiAoVURQKSBJc29jaHJvbm91cyBlcnJvciAoSXNvY2hyb25vdXMgZW5kcG9pbnRzKSAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX1RYUEtUUkRZICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA0ICkgICAgLyogKFVEUCkgVHJhbnNtaXQgUGFja2V0IFJlYWR5ICovDQotI2RlZmluZSBBVDkxQ19VRFBfRk9SQ0VTVEFMTCAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDUgKSAgICAvKiAoVURQKSBGb3JjZSBTdGFsbCAodXNlZCBieSBDb250cm9sLCBCdWxrIGFuZCBJc29jaHJvbm91cyBlbmRwb2ludHMpLiAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX1JYX0RBVEFfQksxICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA2ICkgICAgLyogKFVEUCkgUmVjZWl2ZSBEYXRhIEJhbmsgMSAob25seSB1c2VkIGJ5IGVuZHBvaW50cyB3aXRoIHBpbmctcG9uZyBhdHRyaWJ1dGVzKS4gKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9ESVIgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNyApICAgIC8qIChVRFApIFRyYW5zZmVyIERpcmVjdGlvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0VQVFlQRSAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NyA8PCA4ICkgICAgLyogKFVEUCkgRW5kcG9pbnQgdHlwZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VEUF9FUFRZUEVfQ1RSTCAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCA4ICkgICAgLyogKFVEUCkgQ29udHJvbCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VEUF9FUFRZUEVfSVNPX09VVCAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgICAgLyogKFVEUCkgSXNvY2hyb25vdXMgT1VUICovDQotI2RlZmluZSAgICAgQVQ5MUNfVURQX0VQVFlQRV9CVUxLX09VVCAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDggKSAgICAvKiAoVURQKSBCdWxrIE9VVCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VEUF9FUFRZUEVfSU5UX09VVCAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCA4ICkgICAgLyogKFVEUCkgSW50ZXJydXB0IE9VVCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VEUF9FUFRZUEVfSVNPX0lOICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NSA8PCA4ICkgICAgLyogKFVEUCkgSXNvY2hyb25vdXMgSU4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VRFBfRVBUWVBFX0JVTEtfSU4gICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDYgPDwgOCApICAgIC8qIChVRFApIEJ1bGsgSU4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VRFBfRVBUWVBFX0lOVF9JTiAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDcgPDwgOCApICAgIC8qIChVRFApIEludGVycnVwdCBJTiAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0RUR0xFICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMSApICAgLyogKFVEUCkgRGF0YSBUb2dnbGUgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUEVEUyAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTUgKSAgIC8qIChVRFApIEVuZHBvaW50IEVuYWJsZSBEaXNhYmxlICovDQotI2RlZmluZSBBVDkxQ19VRFBfUlhCWVRFQ05UICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg3RkYgPDwgMTYgKSAvKiAoVURQKSBOdW1iZXIgT2YgQnl0ZXMgQXZhaWxhYmxlIGluIHRoZSBGSUZPICovDQorLy8gLS0tLS0tLS0gVURQX0ZSTV9OVU0gOiAoVURQIE9mZnNldDogMHgwKSBVU0IgRnJhbWUgTnVtYmVyIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZSTV9OVU0gICAgICgodW5zaWduZWQgaW50KSAweDdGRiA8PCAgMCkgLy8gKFVEUCkgRnJhbWUgTnVtYmVyIGFzIERlZmluZWQgaW4gdGhlIFBhY2tldCBGaWVsZCBGb3JtYXRzDQorI2RlZmluZSBBVDkxQ19VRFBfRlJNX0VSUiAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKFVEUCkgRnJhbWUgRXJyb3INCisjZGVmaW5lIEFUOTFDX1VEUF9GUk1fT0sgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE3KSAvLyAoVURQKSBGcmFtZSBPSw0KKy8vIC0tLS0tLS0tIFVEUF9HTEJfU1RBVEUgOiAoVURQIE9mZnNldDogMHg0KSBVU0IgR2xvYmFsIFN0YXRlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZBRERFTiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChVRFApIEZ1bmN0aW9uIEFkZHJlc3MgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19VRFBfQ09ORkcgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFVEUCkgQ29uZmlndXJlZA0KKyNkZWZpbmUgQVQ5MUNfVURQX1JNV1VQRSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChVRFApIFJlbW90ZSBXYWtlIFVwIEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVURQX1JTTUlOUFIgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChVRFApIEEgUmVzdW1lIEhhcyBCZWVuIFNlbnQgdG8gdGhlIEhvc3QNCisvLyAtLS0tLS0tLSBVRFBfRkFERFIgOiAoVURQIE9mZnNldDogMHg4KSBVU0IgRnVuY3Rpb24gQWRkcmVzcyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VEUF9GQUREICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRiA8PCAgMCkgLy8gKFVEUCkgRnVuY3Rpb24gQWRkcmVzcyBWYWx1ZQ0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZFTiAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChVRFApIEZ1bmN0aW9uIEVuYWJsZQ0KKy8vIC0tLS0tLS0tIFVEUF9JRVIgOiAoVURQIE9mZnNldDogMHgxMCkgVVNCIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VRFBfRVBJTlQwICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFVEUCkgRW5kcG9pbnQgMCBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9FUElOVDEgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoVURQKSBFbmRwb2ludCAwIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UMiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChVRFApIEVuZHBvaW50IDIgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfRVBJTlQzICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKFVEUCkgRW5kcG9pbnQgMyBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9FUElOVDQgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoVURQKSBFbmRwb2ludCA0IEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UNSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChVRFApIEVuZHBvaW50IDUgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfRVBJTlQ2ICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLy8gKFVEUCkgRW5kcG9pbnQgNiBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9FUElOVDcgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoVURQKSBFbmRwb2ludCA3IEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX1JYU1VTUCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChVRFApIFVTQiBTdXNwZW5kIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX1JYUlNNICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChVRFApIFVTQiBSZXN1bWUgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfRVhUUlNNICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLy8gKFVEUCkgVVNCIEV4dGVybmFsIFJlc3VtZSBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9TT0ZJTlQgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDExKSAvLyAoVURQKSBVU0IgU3RhcnQgT2YgZnJhbWUgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfV0FLRVVQICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMykgLy8gKFVEUCkgVVNCIFJlc3VtZSBJbnRlcnJ1cHQNCisvLyAtLS0tLS0tLSBVRFBfSURSIDogKFVEUCBPZmZzZXQ6IDB4MTQpIFVTQiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBVRFBfSU1SIDogKFVEUCBPZmZzZXQ6IDB4MTgpIFVTQiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBVRFBfSVNSIDogKFVEUCBPZmZzZXQ6IDB4MWMpIFVTQiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VOREJVU1JFUyAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8vIChVRFApIFVTQiBFbmQgT2YgQnVzIFJlc2V0IEludGVycnVwdA0KKy8vIC0tLS0tLS0tIFVEUF9JQ1IgOiAoVURQIE9mZnNldDogMHgyMCkgVVNCIEludGVycnVwdCBDbGVhciBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBVRFBfUlNUX0VQIDogKFVEUCBPZmZzZXQ6IDB4MjgpIFVTQiBSZXNldCBFbmRwb2ludCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VEUF9FUDAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoVURQKSBSZXNldCBFbmRwb2ludCAwDQorI2RlZmluZSBBVDkxQ19VRFBfRVAxICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFVEUCkgUmVzZXQgRW5kcG9pbnQgMQ0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQMiAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChVRFApIFJlc2V0IEVuZHBvaW50IDINCisjZGVmaW5lIEFUOTFDX1VEUF9FUDMgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoVURQKSBSZXNldCBFbmRwb2ludCAzDQorI2RlZmluZSBBVDkxQ19VRFBfRVA0ICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFVEUCkgUmVzZXQgRW5kcG9pbnQgNA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQNSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChVRFApIFJlc2V0IEVuZHBvaW50IDUNCisjZGVmaW5lIEFUOTFDX1VEUF9FUDYgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoVURQKSBSZXNldCBFbmRwb2ludCA2DQorI2RlZmluZSBBVDkxQ19VRFBfRVA3ICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKFVEUCkgUmVzZXQgRW5kcG9pbnQgNw0KKy8vIC0tLS0tLS0tIFVEUF9DU1IgOiAoVURQIE9mZnNldDogMHgzMCkgVVNCIEVuZHBvaW50IENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VEUF9UWENPTVAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoVURQKSBHZW5lcmF0ZXMgYW4gSU4gcGFja2V0IHdpdGggZGF0YSBwcmV2aW91c2x5IHdyaXR0ZW4gaW4gdGhlIERQUg0KKyNkZWZpbmUgQVQ5MUNfVURQX1JYX0RBVEFfQkswICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChVRFApIFJlY2VpdmUgRGF0YSBCYW5rIDANCisjZGVmaW5lIEFUOTFDX1VEUF9SWFNFVFVQICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoVURQKSBTZW5kcyBTVEFMTCB0byB0aGUgSG9zdCAoQ29udHJvbCBlbmRwb2ludHMpDQorI2RlZmluZSBBVDkxQ19VRFBfSVNPRVJST1IgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKFVEUCkgSXNvY2hyb25vdXMgZXJyb3IgKElzb2Nocm9ub3VzIGVuZHBvaW50cykNCisjZGVmaW5lIEFUOTFDX1VEUF9UWFBLVFJEWSAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoVURQKSBUcmFuc21pdCBQYWNrZXQgUmVhZHkNCisjZGVmaW5lIEFUOTFDX1VEUF9GT1JDRVNUQUxMICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoVURQKSBGb3JjZSBTdGFsbCAodXNlZCBieSBDb250cm9sLCBCdWxrIGFuZCBJc29jaHJvbm91cyBlbmRwb2ludHMpLg0KKyNkZWZpbmUgQVQ5MUNfVURQX1JYX0RBVEFfQksxICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChVRFApIFJlY2VpdmUgRGF0YSBCYW5rIDEgKG9ubHkgdXNlZCBieSBlbmRwb2ludHMgd2l0aCBwaW5nLXBvbmcgYXR0cmlidXRlcykuDQorI2RlZmluZSBBVDkxQ19VRFBfRElSICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKFVEUCkgVHJhbnNmZXIgRGlyZWN0aW9uDQorI2RlZmluZSBBVDkxQ19VRFBfRVBUWVBFICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAgOCkgLy8gKFVEUCkgRW5kcG9pbnQgdHlwZQ0KKyNkZWZpbmUgCUFUOTFDX1VEUF9FUFRZUEVfQ1RSTCAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgOCkgLy8gKFVEUCkgQ29udHJvbA0KKyNkZWZpbmUgCUFUOTFDX1VEUF9FUFRZUEVfSVNPX09VVCAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFVEUCkgSXNvY2hyb25vdXMgT1VUDQorI2RlZmluZSAJQVQ5MUNfVURQX0VQVFlQRV9CVUxLX09VVCAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA4KSAvLyAoVURQKSBCdWxrIE9VVA0KKyNkZWZpbmUgCUFUOTFDX1VEUF9FUFRZUEVfSU5UX09VVCAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKFVEUCkgSW50ZXJydXB0IE9VVA0KKyNkZWZpbmUgCUFUOTFDX1VEUF9FUFRZUEVfSVNPX0lOICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NSA8PCAgOCkgLy8gKFVEUCkgSXNvY2hyb25vdXMgSU4NCisjZGVmaW5lIAlBVDkxQ19VRFBfRVBUWVBFX0JVTEtfSU4gICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDYgPDwgIDgpIC8vIChVRFApIEJ1bGsgSU4NCisjZGVmaW5lIAlBVDkxQ19VRFBfRVBUWVBFX0lOVF9JTiAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgIDgpIC8vIChVRFApIEludGVycnVwdCBJTg0KKyNkZWZpbmUgQVQ5MUNfVURQX0RUR0xFICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTEpIC8vIChVRFApIERhdGEgVG9nZ2xlDQorI2RlZmluZSBBVDkxQ19VRFBfRVBFRFMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNSkgLy8gKFVEUCkgRW5kcG9pbnQgRW5hYmxlIERpc2FibGUNCisjZGVmaW5lIEFUOTFDX1VEUF9SWEJZVEVDTlQgICAoKHVuc2lnbmVkIGludCkgMHg3RkYgPDwgMTYpIC8vIChVRFApIE51bWJlciBPZiBCeXRlcyBBdmFpbGFibGUgaW4gdGhlIEZJRk8NCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICAgUkVHSVNURVIgQUREUkVTUyBERUZJTklUSU9OIEZPUiBBVDkxU0FNN1M2NCAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBTWVNDIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1lTQ19TWVNDX1ZSUE0gICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGRDYwICkgLyogKFNZU0MpIFZvbHRhZ2UgUmVndWxhdG9yIFBvd2VyIE1vZGUgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIEFJQyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19JQ0NSICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjEyOCApIC8qIChBSUMpIEludGVycnVwdCBDbGVhciBDb21tYW5kIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BSUNfSUVDUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYxMjAgKSAvKiAoQUlDKSBJbnRlcnJ1cHQgRW5hYmxlIENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19TTVIgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjAwMCApIC8qIChBSUMpIFNvdXJjZSBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BSUNfSVNDUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYxMkMgKSAvKiAoQUlDKSBJbnRlcnJ1cHQgU2V0IENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19FT0lDUiAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjEzMCApIC8qIChBSUMpIEVuZCBvZiBJbnRlcnJ1cHQgQ29tbWFuZCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX0RDUiAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMTM4ICkgLyogKEFJQykgRGVidWcgQ29udHJvbCBSZWdpc3RlciAoUHJvdGVjdCkgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19GRkVSICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjE0MCApIC8qIChBSUMpIEZhc3QgRm9yY2luZyBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19TVlIgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjA4MCApIC8qIChBSUMpIFNvdXJjZSBWZWN0b3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19TUFUgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjEzNCApIC8qIChBSUMpIFNwdXJpb3VzIFZlY3RvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX0ZGRFIgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMTQ0ICkgLyogKEFJQykgRmFzdCBGb3JjaW5nIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19GVlIgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjEwNCApIC8qIChBSUMpIEZJUSBWZWN0b3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19GRlNSICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjE0OCApIC8qIChBSUMpIEZhc3QgRm9yY2luZyBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19JTVIgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjExMCApIC8qIChBSUMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BSUNfSVNSICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYxMDggKSAvKiAoQUlDKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BSUNfSVZSICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYxMDAgKSAvKiAoQUlDKSBJUlEgVmVjdG9yIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BSUNfSURDUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYxMjQgKSAvKiAoQUlDKSBJbnRlcnJ1cHQgRGlzYWJsZSBDb21tYW5kIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BSUNfQ0lTUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYxMTQgKSAvKiAoQUlDKSBDb3JlIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19JUFIgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjEwQyApIC8qIChBSUMpIEludGVycnVwdCBQZW5kaW5nIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBEQkdVIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9DMlIgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMjQ0ICkgLyogKERCR1UpIENoaXAgSUQyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19EQkdVX1RIUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYyMUMgKSAvKiAoREJHVSkgVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9DU1IgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMjE0ICkgLyogKERCR1UpIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19EQkdVX0lEUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYyMEMgKSAvKiAoREJHVSkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfTVIgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjIwNCApIC8qIChEQkdVKSBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19EQkdVX0ZOVFIgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYyNDggKSAvKiAoREJHVSkgRm9yY2UgTlRSU1QgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfQzFSICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjI0MCApIC8qIChEQkdVKSBDaGlwIElEMSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9CUkdSICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMjIwICkgLyogKERCR1UpIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfUkhSICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjIxOCApIC8qIChEQkdVKSBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19EQkdVX0lNUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYyMTAgKSAvKiAoREJHVSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfSUVSICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjIwOCApIC8qIChEQkdVKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19EQkdVX0NSICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYyMDAgKSAvKiAoREJHVSkgQ29udHJvbCBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX0RCR1UgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19EQkdVX1ROQ1IgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYzMUMgKSAvKiAoUERDX0RCR1UpIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9STkNSICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMzE0ICkgLyogKFBEQ19EQkdVKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9QVENSICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMzIwICkgLyogKFBEQ19EQkdVKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9QVFNSICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMzI0ICkgLyogKFBEQ19EQkdVKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19EQkdVX1JDUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYzMDQgKSAvKiAoUERDX0RCR1UpIFJlY2VpdmUgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9UQ1IgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMzBDICkgLyogKFBEQ19EQkdVKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19EQkdVX1JQUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYzMDAgKSAvKiAoUERDX0RCR1UpIFJlY2VpdmUgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9UUFIgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMzA4ICkgLyogKFBEQ19EQkdVKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19EQkdVX1JOUFIgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYzMTAgKSAvKiAoUERDX0RCR1UpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19EQkdVX1ROUFIgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYzMTggKSAvKiAoUERDX0RCR1UpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUElPQSBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfSU1SICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjQ0OCApIC8qIChQSU9BKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9JRVIgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNDQwICkgLyogKFBJT0EpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfT1dEUiAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjRBNCApIC8qIChQSU9BKSBPdXRwdXQgV3JpdGUgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9JU1IgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNDRDICkgLyogKFBJT0EpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfUFBVRFIgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjQ2MCApIC8qIChQSU9BKSBQdWxsLXVwIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfTURTUiAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjQ1OCApIC8qIChQSU9BKSBNdWx0aS1kcml2ZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX01ERVIgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY0NTAgKSAvKiAoUElPQSkgTXVsdGktZHJpdmVyIEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9QRVIgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNDAwICkgLyogKFBJT0EpIFBJTyBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfUFNSICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjQwOCApIC8qIChQSU9BKSBQSU8gU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX09FUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY0MTAgKSAvKiAoUElPQSkgT3V0cHV0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9CU1IgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNDc0ICkgLyogKFBJT0EpIFNlbGVjdCBCIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX1BQVUVSICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY0NjQgKSAvKiAoUElPQSkgUHVsbC11cCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfTUREUiAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjQ1NCApIC8qIChQSU9BKSBNdWx0aS1kcml2ZXIgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9QRFIgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNDA0ICkgLyogKFBJT0EpIFBJTyBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX09EUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY0MTQgKSAvKiAoUElPQSkgT3V0cHV0IERpc2FibGUgUmVnaXN0ZXJyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX0lGRFIgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY0MjQgKSAvKiAoUElPQSkgSW5wdXQgRmlsdGVyIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfQUJTUiAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjQ3OCApIC8qIChQSU9BKSBBQiBTZWxlY3QgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX0FTUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY0NzAgKSAvKiAoUElPQSkgU2VsZWN0IEEgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfUFBVU1IgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjQ2OCApIC8qIChQSU9BKSBQYWQgUHVsbC11cCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfT0RTUiAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjQzOCApIC8qIChQSU9BKSBPdXRwdXQgRGF0YSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfU09EUiAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjQzMCApIC8qIChQSU9BKSBTZXQgT3V0cHV0IERhdGEgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfSUZTUiAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjQyOCApIC8qIChQSU9BKSBJbnB1dCBGaWx0ZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX0lGRVIgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY0MjAgKSAvKiAoUElPQSkgSW5wdXQgRmlsdGVyIEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9PU1IgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNDE4ICkgLyogKFBJT0EpIE91dHB1dCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfSURSICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjQ0NCApIC8qIChQSU9BKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9QRFNSICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNDNDICkgLyogKFBJT0EpIFBpbiBEYXRhIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9DT0RSICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNDM0ICkgLyogKFBJT0EpIENsZWFyIE91dHB1dCBEYXRhIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX09XU1IgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY0QTggKSAvKiAoUElPQSkgT3V0cHV0IFdyaXRlIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9PV0VSICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNEEwICkgLyogKFBJT0EpIE91dHB1dCBXcml0ZSBFbmFibGUgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENLR1IgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19DS0dSX1BMTFIgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZDMkMgKSAvKiAoQ0tHUikgUExMIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DS0dSX01DRlIgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZDMjQgKSAvKiAoQ0tHUikgTWFpbiBDbG9jayAgRnJlcXVlbmN5IFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DS0dSX01PUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZDMjAgKSAvKiAoQ0tHUikgTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQTUMgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19QTUNfU0NTUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZDMDggKSAvKiAoUE1DKSBTeXN0ZW0gQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QTUNfU0NFUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZDMDAgKSAvKiAoUE1DKSBTeXN0ZW0gQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QTUNfSU1SICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZDNkMgKSAvKiAoUE1DKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX0lEUiAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGQzY0ICkgLyogKFBNQykgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19QQ0RSICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkMxNCApIC8qIChQTUMpIFBlcmlwaGVyYWwgQ2xvY2sgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1NDRFIgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGQzA0ICkgLyogKFBNQykgU3lzdGVtIENsb2NrIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19TUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkM2OCApIC8qIChQTUMpIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX0lFUiAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGQzYwICkgLyogKFBNQykgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX01DS1IgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGQzMwICkgLyogKFBNQykgTWFzdGVyIENsb2NrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QTUNfTU9SICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZDMjAgKSAvKiAoUE1DKSBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19QQ0VSICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkMxMCApIC8qIChQTUMpIFBlcmlwaGVyYWwgQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QTUNfUENTUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZDMTggKSAvKiAoUE1DKSBQZXJpcGhlcmFsIENsb2NrIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1BMTFIgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGQzJDICkgLyogKFBNQykgUExMIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QTUNfTUNGUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZDMjQgKSAvKiAoUE1DKSBNYWluIENsb2NrICBGcmVxdWVuY3kgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19QQ0tSICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkM0MCApIC8qIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUlNUQyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1JTVENfUlNSICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkQwNCApIC8qIChSU1RDKSBSZXNldCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1JTVENfUk1SICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkQwOCApIC8qIChSU1RDKSBSZXNldCBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19SU1RDX1JDUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZEMDAgKSAvKiAoUlNUQykgUmVzZXQgQ29udHJvbCBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUlRUQyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1JUVENfUlRTUiAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkQyQyApIC8qIChSVFRDKSBSZWFsLXRpbWUgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19SVFRDX1JUQVIgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZEMjQgKSAvKiAoUlRUQykgUmVhbC10aW1lIEFsYXJtIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19SVFRDX1JUVlIgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZEMjggKSAvKiAoUlRUQykgUmVhbC10aW1lIFZhbHVlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19SVFRDX1JUTVIgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZEMjAgKSAvKiAoUlRUQykgUmVhbC10aW1lIE1vZGUgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBJVEMgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19QSVRDX1BJSVIgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZEM0MgKSAvKiAoUElUQykgUGVyaW9kIEludGVydmFsIEltYWdlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSVRDX1BJU1IgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZEMzQgKSAvKiAoUElUQykgUGVyaW9kIEludGVydmFsIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElUQ19QSVZSICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGRDM4ICkgLyogKFBJVEMpIFBlcmlvZCBJbnRlcnZhbCBWYWx1ZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElUQ19QSU1SICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGRDMwICkgLyogKFBJVEMpIFBlcmlvZCBJbnRlcnZhbCBNb2RlIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBXRFRDIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfV0RUQ19XRE1SICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGRDQ0ICkgLyogKFdEVEMpIFdhdGNoZG9nIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1dEVENfV0RTUiAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkQ0OCApIC8qIChXRFRDKSBXYXRjaGRvZyBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1dEVENfV0RDUiAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkQ0MCApIC8qIChXRFRDKSBXYXRjaGRvZyBDb250cm9sIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBNQyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX01DX0ZDUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkY2NCApIC8qIChNQykgTUMgRmxhc2ggQ29tbWFuZCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfQVNSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGRjA0ICkgLyogKE1DKSBNQyBBYm9ydCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0ZTUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkY2OCApIC8qIChNQykgTUMgRmxhc2ggU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19NQ19GTVIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZGNjAgKSAvKiAoTUMpIE1DIEZsYXNoIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0FBU1IgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkYwOCApIC8qIChNQykgTUMgQWJvcnQgQWRkcmVzcyBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX01DX1JDUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkYwMCApIC8qIChNQykgTUMgUmVtYXAgQ29udHJvbCBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX1NQSSBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9QVENSICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZFMDEyMCApIC8qIChQRENfU1BJKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX1ROUFIgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkUwMTE4ICkgLyogKFBEQ19TUEkpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX1JOUFIgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkUwMTEwICkgLyogKFBEQ19TUEkpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUElfVFBSICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTAxMDggKSAvKiAoUERDX1NQSSkgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX1JQUiAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkUwMTAwICkgLyogKFBEQ19TUEkpIFJlY2VpdmUgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX1BUU1IgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkUwMTI0ICkgLyogKFBEQ19TUEkpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9UTkNSICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZFMDExQyApIC8qIChQRENfU1BJKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9STkNSICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZFMDExNCApIC8qIChQRENfU1BJKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX1RDUiAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkUwMTBDICkgLyogKFBEQ19TUEkpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9SQ1IgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZFMDEwNCApIC8qIChQRENfU1BJKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFNQSSBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9DU1IgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZFMDAzMCApIC8qIChTUEkpIENoaXAgU2VsZWN0IFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUElfSURSICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTAwMTggKSAvKiAoU1BJKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX1NSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkUwMDEwICkgLyogKFNQSSkgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUElfUkRSICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTAwMDggKSAvKiAoU1BJKSBSZWNlaXZlIERhdGEgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9DUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZFMDAwMCApIC8qIChTUEkpIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9JTVIgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZFMDAxQyApIC8qIChTUEkpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUElfSUVSICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTAwMTQgKSAvKiAoU1BJKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUElfVERSICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTAwMEMgKSAvKiAoU1BJKSBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUElfTVIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTAwMDQgKSAvKiAoU1BJKSBNb2RlIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfQURDIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1BUQ1IgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ4MTIwICkgLyogKFBEQ19BREMpIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRENfVE5QUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDgxMTggKSAvKiAoUERDX0FEQykgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRENfUk5QUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDgxMTAgKSAvKiAoUERDX0FEQykgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19UUFIgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEODEwOCApIC8qIChQRENfQURDKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRENfUlBSICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDgxMDAgKSAvKiAoUERDX0FEQykgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRENfUFRTUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDgxMjQgKSAvKiAoUERDX0FEQykgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1ROQ1IgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ4MTFDICkgLyogKFBEQ19BREMpIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1JOQ1IgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ4MTE0ICkgLyogKFBEQ19BREMpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRENfVENSICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDgxMEMgKSAvKiAoUERDX0FEQykgVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1JDUiAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ4MTA0ICkgLyogKFBEQ19BREMpIFJlY2VpdmUgQ291bnRlciBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQURDIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0lNUiAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ4MDJDICkgLyogKEFEQykgQURDIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRENfQ0RSNCAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDgwNDAgKSAvKiAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDQgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DRFIyICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEODAzOCApIC8qIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NEUjAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ4MDMwICkgLyogKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAwICovDQotI2RlZmluZSBBVDkxQ19BRENfQ0RSNyAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDgwNEMgKSAvKiAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDcgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DRFIxICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEODAzNCApIC8qIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMSAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NEUjMgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ4MDNDICkgLyogKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAzICovDQotI2RlZmluZSBBVDkxQ19BRENfQ0RSNSAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDgwNDQgKSAvKiAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDUgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19NUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEODAwNCApIC8qIChBREMpIEFEQyBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRENfQ0RSNiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDgwNDggKSAvKiAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDYgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEODAwMCApIC8qIChBREMpIEFEQyBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRENfQ0hFUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDgwMTAgKSAvKiAoQURDKSBBREMgQ2hhbm5lbCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DSFNSICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEODAxOCApIC8qIChBREMpIEFEQyBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0lFUiAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ4MDI0ICkgLyogKEFEQykgQURDIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19TUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEODAxQyApIC8qIChBREMpIEFEQyBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DSERSICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEODAxNCApIC8qIChBREMpIEFEQyBDaGFubmVsIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19JRFIgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEODAyOCApIC8qIChBREMpIEFEQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0xDRFIgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ4MDIwICkgLyogKEFEQykgQURDIExhc3QgQ29udmVydGVkIERhdGEgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19TU0MgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19TU0NfUFRDUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDQxMjAgKSAvKiAoUERDX1NTQykgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19UTlBSICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZENDExOCApIC8qIChQRENfU1NDKSBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19STlBSICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZENDExMCApIC8qIChQRENfU1NDKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1RQUiAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ0MTA4ICkgLyogKFBEQ19TU0MpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19SUFIgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZENDEwMCApIC8qIChQRENfU1NDKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19QVFNSICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZENDEyNCApIC8qIChQRENfU1NDKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfVE5DUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDQxMUMgKSAvKiAoUERDX1NTQykgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfUk5DUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDQxMTQgKSAvKiAoUERDX1NTQykgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19UQ1IgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZENDEwQyApIC8qIChQRENfU1NDKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfUkNSICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDQxMDQgKSAvKiAoUERDX1NTQykgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBTU0MgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19TU0NfUkZNUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDQwMTQgKSAvKiAoU1NDKSBSZWNlaXZlIEZyYW1lIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19DTVIgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZENDAwNCApIC8qIChTU0MpIENsb2NrIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19JRFIgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZENDA0OCApIC8qIChTU0MpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfU1IgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDQwNDAgKSAvKiAoU1NDKSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19SQzBSICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZENDAzOCApIC8qIChTU0MpIFJlY2VpdmUgQ29tcGFyZSAwIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfUlNIUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDQwMzAgKSAvKiAoU1NDKSBSZWNlaXZlIFN5bmMgSG9sZGluZyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1JIUiAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ0MDIwICkgLyogKFNTQykgUmVjZWl2ZSBIb2xkaW5nIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfVENNUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDQwMTggKSAvKiAoU1NDKSBUcmFuc21pdCBDbG9jayBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfUkNNUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDQwMTAgKSAvKiAoU1NDKSBSZWNlaXZlIENsb2NrIE1vZGVSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0NSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ0MDAwICkgLyogKFNTQykgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0lNUiAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ0MDRDICkgLyogKFNTQykgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19JRVIgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZENDA0NCApIC8qIChTU0MpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19SQzFSICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZENDAzQyApIC8qIChTU0MpIFJlY2VpdmUgQ29tcGFyZSAxIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfVFNIUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDQwMzQgKSAvKiAoU1NDKSBUcmFuc21pdCBTeW5jIEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19USFIgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZENDAyNCApIC8qIChTU0MpIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19URk1SICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZENDAxQyApIC8qIChTU0MpIFRyYW5zbWl0IEZyYW1lIE1vZGUgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19VUzEgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19VUzFfUFRTUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzQxMjQgKSAvKiAoUERDX1VTMSkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1ROQ1IgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkM0MTFDICkgLyogKFBEQ19VUzEpIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1JOQ1IgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkM0MTE0ICkgLyogKFBEQ19VUzEpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfVENSICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzQxMEMgKSAvKiAoUERDX1VTMSkgVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1JDUiAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkM0MTA0ICkgLyogKFBEQ19VUzEpIFJlY2VpdmUgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1BUQ1IgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkM0MTIwICkgLyogKFBEQ19VUzEpIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfVE5QUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzQxMTggKSAvKiAoUERDX1VTMSkgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfUk5QUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzQxMTAgKSAvKiAoUERDX1VTMSkgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMV9UUFIgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDNDEwOCApIC8qIChQRENfVVMxKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfUlBSICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzQxMDAgKSAvKiAoUERDX1VTMSkgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBVUzEgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19VUzFfWFhSICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzQwNDggKSAvKiAoVVMxKSBYT05fWE9GRiBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1JIUiAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkM0MDE4ICkgLyogKFVTMSkgUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX0lNUiAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkM0MDEwICkgLyogKFVTMSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMV9JRVIgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDNDAwOCApIC8qIChVUzEpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMV9DUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDNDAwMCApIC8qIChVUzEpIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMV9SVE9SICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDNDAyNCApIC8qIChVUzEpIFJlY2VpdmVyIFRpbWUtb3V0IFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfVEhSICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzQwMUMgKSAvKiAoVVMxKSBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfQ1NSICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzQwMTQgKSAvKiAoVVMxKSBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX0lEUiAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkM0MDBDICkgLyogKFVTMSkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMV9GSURJICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDNDA0MCApIC8qIChVUzEpIEZJX0RJX1JhdGlvIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfQlJHUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzQwMjAgKSAvKiAoVVMxKSBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfVFRHUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzQwMjggKSAvKiAoVVMxKSBUcmFuc21pdHRlciBUaW1lLWd1YXJkIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfSUYgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzQwNEMgKSAvKiAoVVMxKSBJUkRBX0ZJTFRFUiBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX05FUiAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkM0MDQ0ICkgLyogKFVTMSkgTmIgRXJyb3JzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfTVIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzQwMDQgKSAvKiAoVVMxKSBNb2RlIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfVVMwIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX1BUQ1IgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkMwMTIwICkgLyogKFBEQ19VUzApIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzBfVE5QUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzAxMTggKSAvKiAoUERDX1VTMCkgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzBfUk5QUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzAxMTAgKSAvKiAoUERDX1VTMCkgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9UUFIgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDMDEwOCApIC8qIChQRENfVVMwKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzBfUlBSICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzAxMDAgKSAvKiAoUERDX1VTMCkgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzBfUFRTUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzAxMjQgKSAvKiAoUERDX1VTMCkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX1ROQ1IgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkMwMTFDICkgLyogKFBEQ19VUzApIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX1JOQ1IgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkMwMTE0ICkgLyogKFBEQ19VUzApIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzBfVENSICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzAxMEMgKSAvKiAoUERDX1VTMCkgVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX1JDUiAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkMwMTA0ICkgLyogKFBEQ19VUzApIFJlY2VpdmUgQ291bnRlciBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVVMwIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX1RUR1IgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkMwMDI4ICkgLyogKFVTMCkgVHJhbnNtaXR0ZXIgVGltZS1ndWFyZCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX0JSR1IgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkMwMDIwICkgLyogKFVTMCkgQmF1ZCBSYXRlIEdlbmVyYXRvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX1JIUiAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkMwMDE4ICkgLyogKFVTMCkgUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX0lNUiAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkMwMDEwICkgLyogKFVTMCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9ORVIgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDMDA0NCApIC8qIChVUzApIE5iIEVycm9ycyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX1JUT1IgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkMwMDI0ICkgLyogKFVTMCkgUmVjZWl2ZXIgVGltZS1vdXQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9YWFIgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDMDA0OCApIC8qIChVUzApIFhPTl9YT0ZGIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzBfRklESSAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzAwNDAgKSAvKiAoVVMwKSBGSV9ESV9SYXRpbyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX0NSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkMwMDAwICkgLyogKFVTMCkgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX0lFUiAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkMwMDA4ICkgLyogKFVTMCkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX0lGICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkMwMDRDICkgLyogKFVTMCkgSVJEQV9GSUxURVIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9NUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDMDAwNCApIC8qIChVUzApIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9JRFIgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDMDAwQyApIC8qIChVUzApIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzBfQ1NSICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzAwMTQgKSAvKiAoVVMwKSBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX1RIUiAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkMwMDFDICkgLyogKFVTMCkgVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVFdJIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX1JIUiAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkI4MDMwICkgLyogKFRXSSkgUmVjZWl2ZSBIb2xkaW5nIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UV0lfSURSICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQjgwMjggKSAvKiAoVFdJKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX1NSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkI4MDIwICkgLyogKFRXSSkgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UV0lfQ1dHUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQjgwMTAgKSAvKiAoVFdJKSBDbG9jayBXYXZlZm9ybSBHZW5lcmF0b3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9TTVIgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZCODAwOCApIC8qIChUV0kpIFNsYXZlIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9DUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZCODAwMCApIC8qIChUV0kpIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9USFIgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZCODAzNCApIC8qIChUV0kpIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9JTVIgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZCODAyQyApIC8qIChUV0kpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UV0lfSUVSICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQjgwMjQgKSAvKiAoVFdJKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UV0lfSUFEUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQjgwMEMgKSAvKiAoVFdJKSBJbnRlcm5hbCBBZGRyZXNzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UV0lfTU1SICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQjgwMDQgKSAvKiAoVFdJKSBNYXN0ZXIgTW9kZSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVEMyIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMyX0lNUiAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMEFDICkgLyogKFRDMikgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMl9JRVIgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDBBNCApIC8qIChUQzIpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMl9SQyAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDA5QyApIC8qIChUQzIpIFJlZ2lzdGVyIEMgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMl9SQSAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDA5NCApIC8qIChUQzIpIFJlZ2lzdGVyIEEgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMl9DTVIgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDA4NCApIC8qIChUQzIpIENoYW5uZWwgTW9kZSBSZWdpc3RlciAoQ2FwdHVyZSBNb2RlIC8gV2F2ZWZvcm0gTW9kZSkgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMl9JRFIgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDBBOCApIC8qIChUQzIpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UQzJfU1IgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTAwQTAgKSAvKiAoVEMyKSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMl9SQiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDA5OCApIC8qIChUQzIpIFJlZ2lzdGVyIEIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMl9DViAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDA5MCApIC8qIChUQzIpIENvdW50ZXIgVmFsdWUgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMl9DQ1IgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDA4MCApIC8qIChUQzIpIENoYW5uZWwgQ29udHJvbCBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVEMxIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMxX0lNUiAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMDZDICkgLyogKFRDMSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMV9JRVIgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDA2NCApIC8qIChUQzEpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMV9SQyAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDA1QyApIC8qIChUQzEpIFJlZ2lzdGVyIEMgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMV9SQSAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDA1NCApIC8qIChUQzEpIFJlZ2lzdGVyIEEgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMV9DTVIgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDA0NCApIC8qIChUQzEpIENoYW5uZWwgTW9kZSBSZWdpc3RlciAoQ2FwdHVyZSBNb2RlIC8gV2F2ZWZvcm0gTW9kZSkgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMV9JRFIgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDA2OCApIC8qIChUQzEpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UQzFfU1IgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTAwNjAgKSAvKiAoVEMxKSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMV9SQiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDA1OCApIC8qIChUQzEpIFJlZ2lzdGVyIEIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMV9DViAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDA1MCApIC8qIChUQzEpIENvdW50ZXIgVmFsdWUgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMV9DQ1IgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDA0MCApIC8qIChUQzEpIENoYW5uZWwgQ29udHJvbCBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVEMwIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMwX0lNUiAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMDJDICkgLyogKFRDMCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMF9JRVIgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDAyNCApIC8qIChUQzApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMF9SQyAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDAxQyApIC8qIChUQzApIFJlZ2lzdGVyIEMgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMF9SQSAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDAxNCApIC8qIChUQzApIFJlZ2lzdGVyIEEgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMF9DTVIgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDAwNCApIC8qIChUQzApIENoYW5uZWwgTW9kZSBSZWdpc3RlciAoQ2FwdHVyZSBNb2RlIC8gV2F2ZWZvcm0gTW9kZSkgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMF9JRFIgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDAyOCApIC8qIChUQzApIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UQzBfU1IgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTAwMjAgKSAvKiAoVEMwKSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMF9SQiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDAxOCApIC8qIChUQzApIFJlZ2lzdGVyIEIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMF9DViAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDAxMCApIC8qIChUQzApIENvdW50ZXIgVmFsdWUgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMF9DQ1IgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDAwMCApIC8qIChUQzApIENoYW5uZWwgQ29udHJvbCBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVENCIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENCX0JNUiAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMEM0ICkgLyogKFRDQikgVEMgQmxvY2sgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVENCX0JDUiAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMEMwICkgLyogKFRDQikgVEMgQmxvY2sgQ29udHJvbCBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUFdNQ19DSDMgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19DSDNfQ1VQRFIgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQ0MyNzAgKSAvKiAoUFdNQ19DSDMpIENoYW5uZWwgVXBkYXRlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DSDNfQ1BSRFIgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQ0MyNjggKSAvKiAoUFdNQ19DSDMpIENoYW5uZWwgUGVyaW9kIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DSDNfQ01SICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQ0MyNjAgKSAvKiAoUFdNQ19DSDMpIENoYW5uZWwgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0gzX1Jlc2VydmVkICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMjc0ICkgLyogKFBXTUNfQ0gzKSBSZXNlcnZlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0gzX0NDTlRSICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMjZDICkgLyogKFBXTUNfQ0gzKSBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NIM19DRFRZUiAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzI2NCApIC8qIChQV01DX0NIMykgQ2hhbm5lbCBEdXR5IEN5Y2xlIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQV01DX0NIMiBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX0NIMl9DVVBEUiAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzI1MCApIC8qIChQV01DX0NIMikgQ2hhbm5lbCBVcGRhdGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NIMl9DUFJEUiAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzI0OCApIC8qIChQV01DX0NIMikgQ2hhbm5lbCBQZXJpb2QgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NIMl9DTVIgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzI0MCApIC8qIChQV01DX0NIMikgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DSDJfUmVzZXJ2ZWQgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQ0MyNTQgKSAvKiAoUFdNQ19DSDIpIFJlc2VydmVkICovDQotI2RlZmluZSBBVDkxQ19DSDJfQ0NOVFIgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQ0MyNEMgKSAvKiAoUFdNQ19DSDIpIENoYW5uZWwgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0gyX0NEVFlSICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMjQ0ICkgLyogKFBXTUNfQ0gyKSBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBXTUNfQ0gxIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0gxX0NVUERSICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMjMwICkgLyogKFBXTUNfQ0gxKSBDaGFubmVsIFVwZGF0ZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0gxX0NQUkRSICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMjI4ICkgLyogKFBXTUNfQ0gxKSBDaGFubmVsIFBlcmlvZCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0gxX0NNUiAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMjIwICkgLyogKFBXTUNfQ0gxKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NIMV9SZXNlcnZlZCAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzIzNCApIC8qIChQV01DX0NIMSkgUmVzZXJ2ZWQgKi8NCi0jZGVmaW5lIEFUOTFDX0NIMV9DQ05UUiAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzIyQyApIC8qIChQV01DX0NIMSkgQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DSDFfQ0RUWVIgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQ0MyMjQgKSAvKiAoUFdNQ19DSDEpIENoYW5uZWwgRHV0eSBDeWNsZSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUFdNQ19DSDAgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19DSDBfQ1VQRFIgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQ0MyMTAgKSAvKiAoUFdNQ19DSDApIENoYW5uZWwgVXBkYXRlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DSDBfQ1BSRFIgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQ0MyMDggKSAvKiAoUFdNQ19DSDApIENoYW5uZWwgUGVyaW9kIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DSDBfQ01SICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQ0MyMDAgKSAvKiAoUFdNQ19DSDApIENoYW5uZWwgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0gwX1Jlc2VydmVkICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMjE0ICkgLyogKFBXTUNfQ0gwKSBSZXNlcnZlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0gwX0NDTlRSICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMjBDICkgLyogKFBXTUNfQ0gwKSBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NIMF9DRFRZUiAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzIwNCApIC8qIChQV01DX0NIMCkgQ2hhbm5lbCBEdXR5IEN5Y2xlIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQV01DIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19WUiAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMEZDICkgLyogKFBXTUMpIFBXTUMgVmVyc2lvbiBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19JU1IgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMDFDICkgLyogKFBXTUMpIFBXTUMgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19JRFIgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMDE0ICkgLyogKFBXTUMpIFBXTUMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfU1IgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzAwQyApIC8qIChQV01DKSBQV01DIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19FTkEgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMDA0ICkgLyogKFBXTUMpIFBXTUMgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QV01DX0lNUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQ0MwMTggKSAvKiAoUFdNQykgUFdNQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19NUiAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMDAwICkgLyogKFBXTUMpIFBXTUMgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19ESVMgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMDA4ICkgLyogKFBXTUMpIFBXTUMgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19JRVIgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMDEwICkgLyogKFBXTUMpIFBXTUMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVURQIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0lTUiAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkIwMDFDICkgLyogKFVEUCkgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0lEUiAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkIwMDE0ICkgLyogKFVEUCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9HTEJTVEFURSAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZCMDAwNCApIC8qIChVRFApIEdsb2JhbCBTdGF0ZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0ZEUiAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkIwMDUwICkgLyogKFVEUCkgRW5kcG9pbnQgRklGTyBEYXRhIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VRFBfQ1NSICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQjAwMzAgKSAvKiAoVURQKSBFbmRwb2ludCBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9SU1RFUCAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZCMDAyOCApIC8qIChVRFApIFJlc2V0IEVuZHBvaW50IFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VRFBfSUNSICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQjAwMjAgKSAvKiAoVURQKSBJbnRlcnJ1cHQgQ2xlYXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9JTVIgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZCMDAxOCApIC8qIChVRFApIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VRFBfSUVSICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQjAwMTAgKSAvKiAoVURQKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VRFBfRkFERFIgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQjAwMDggKSAvKiAoVURQKSBGdW5jdGlvbiBBZGRyZXNzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VRFBfTlVNICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQjAwMDAgKSAvKiAoVURQKSBGcmFtZSBOdW1iZXIgUmVnaXN0ZXIgKi8NCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICAgUkVHSVNURVIgQUREUkVTUyBERUZJTklUSU9OIEZPUiBBVDkxU0FNN1M2NA0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBTWVNDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1NZU0NfU1lTQ19WUlBNICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZENjApIC8vIChTWVNDKSBWb2x0YWdlIFJlZ3VsYXRvciBQb3dlciBNb2RlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBBSUMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQUlDX0lDQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYxMjgpIC8vIChBSUMpIEludGVycnVwdCBDbGVhciBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfSUVDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjEyMCkgLy8gKEFJQykgSW50ZXJydXB0IEVuYWJsZSBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfU01SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjAwMCkgLy8gKEFJQykgU291cmNlIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19JU0NSICAoKEFUOTFfUkVHICopIAkweEZGRkZGMTJDKSAvLyAoQUlDKSBJbnRlcnJ1cHQgU2V0IENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19FT0lDUiAoKEFUOTFfUkVHICopIAkweEZGRkZGMTMwKSAvLyAoQUlDKSBFbmQgb2YgSW50ZXJydXB0IENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19EQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkZGMTM4KSAvLyAoQUlDKSBEZWJ1ZyBDb250cm9sIFJlZ2lzdGVyIChQcm90ZWN0KQ0KKyNkZWZpbmUgQVQ5MUNfQUlDX0ZGRVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYxNDApIC8vIChBSUMpIEZhc3QgRm9yY2luZyBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19TVlIgICAoKEFUOTFfUkVHICopIAkweEZGRkZGMDgwKSAvLyAoQUlDKSBTb3VyY2UgVmVjdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfU1BVICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjEzNCkgLy8gKEFJQykgU3B1cmlvdXMgVmVjdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfRkZEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjE0NCkgLy8gKEFJQykgRmFzdCBGb3JjaW5nIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19GVlIgICAoKEFUOTFfUkVHICopIAkweEZGRkZGMTA0KSAvLyAoQUlDKSBGSVEgVmVjdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfRkZTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjE0OCkgLy8gKEFJQykgRmFzdCBGb3JjaW5nIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0lNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYxMTApIC8vIChBSUMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfSVNSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjEwOCkgLy8gKEFJQykgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0lWUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYxMDApIC8vIChBSUMpIElSUSBWZWN0b3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19JRENSICAoKEFUOTFfUkVHICopIAkweEZGRkZGMTI0KSAvLyAoQUlDKSBJbnRlcnJ1cHQgRGlzYWJsZSBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfQ0lTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjExNCkgLy8gKEFJQykgQ29yZSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfSVBSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjEwQykgLy8gKEFJQykgSW50ZXJydXB0IFBlbmRpbmcgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIERCR1UgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfREJHVV9DMlIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYyNDQpIC8vIChEQkdVKSBDaGlwIElEMiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9USFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYyMUMpIC8vIChEQkdVKSBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX0NTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjIxNCkgLy8gKERCR1UpIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX0lEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjIwQykgLy8gKERCR1UpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX01SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjIwNCkgLy8gKERCR1UpIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfRk5UUiAoKEFUOTFfUkVHICopIAkweEZGRkZGMjQ4KSAvLyAoREJHVSkgRm9yY2UgTlRSU1QgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfQzFSICAoKEFUOTFfUkVHICopIAkweEZGRkZGMjQwKSAvLyAoREJHVSkgQ2hpcCBJRDEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfQlJHUiAoKEFUOTFfUkVHICopIAkweEZGRkZGMjIwKSAvLyAoREJHVSkgQmF1ZCBSYXRlIEdlbmVyYXRvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9SSFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYyMTgpIC8vIChEQkdVKSBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX0lNUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjIxMCkgLy8gKERCR1UpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX0lFUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjIwOCkgLy8gKERCR1UpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkZGMjAwKSAvLyAoREJHVSkgQ29udHJvbCBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX0RCR1UgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfREJHVV9UTkNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYzMUMpIC8vIChQRENfREJHVSkgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1JOQ1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjMxNCkgLy8gKFBEQ19EQkdVKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9QVENSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYzMjApIC8vIChQRENfREJHVSkgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfUFRTUiAoKEFUOTFfUkVHICopIAkweEZGRkZGMzI0KSAvLyAoUERDX0RCR1UpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfUkNSICAoKEFUOTFfUkVHICopIAkweEZGRkZGMzA0KSAvLyAoUERDX0RCR1UpIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9UQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYzMEMpIC8vIChQRENfREJHVSkgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9SUFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYzMDApIC8vIChQRENfREJHVSkgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1RQUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjMwOCkgLy8gKFBEQ19EQkdVKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1JOUFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjMxMCkgLy8gKFBEQ19EQkdVKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9UTlBSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYzMTgpIC8vIChQRENfREJHVSkgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQSU9BIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1BJT0FfSU1SICAoKEFUOTFfUkVHICopIAkweEZGRkZGNDQ4KSAvLyAoUElPQSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfSUVSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNDQwKSAvLyAoUElPQSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9PV0RSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0QTQpIC8vIChQSU9BKSBPdXRwdXQgV3JpdGUgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9JU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0NEMpIC8vIChQSU9BKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX1BQVURSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0NjApIC8vIChQSU9BKSBQdWxsLXVwIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfTURTUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNDU4KSAvLyAoUElPQSkgTXVsdGktZHJpdmVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9NREVSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0NTApIC8vIChQSU9BKSBNdWx0aS1kcml2ZXIgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX1BFUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQwMCkgLy8gKFBJT0EpIFBJTyBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfUFNSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNDA4KSAvLyAoUElPQSkgUElPIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9PRVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0MTApIC8vIChQSU9BKSBPdXRwdXQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0JTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQ3NCkgLy8gKFBJT0EpIFNlbGVjdCBCIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX1BQVUVSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0NjQpIC8vIChQSU9BKSBQdWxsLXVwIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9NRERSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0NTQpIC8vIChQSU9BKSBNdWx0aS1kcml2ZXIgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9QRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0MDQpIC8vIChQSU9BKSBQSU8gRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9PRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0MTQpIC8vIChQSU9BKSBPdXRwdXQgRGlzYWJsZSBSZWdpc3RlcnINCisjZGVmaW5lIEFUOTFDX1BJT0FfSUZEUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNDI0KSAvLyAoUElPQSkgSW5wdXQgRmlsdGVyIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfQUJTUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNDc4KSAvLyAoUElPQSkgQUIgU2VsZWN0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9BU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0NzApIC8vIChQSU9BKSBTZWxlY3QgQSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9QUFVTUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNDY4KSAvLyAoUElPQSkgUGFkIFB1bGwtdXAgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX09EU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQzOCkgLy8gKFBJT0EpIE91dHB1dCBEYXRhIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9TT0RSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0MzApIC8vIChQSU9BKSBTZXQgT3V0cHV0IERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfSUZTUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNDI4KSAvLyAoUElPQSkgSW5wdXQgRmlsdGVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9JRkVSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0MjApIC8vIChQSU9BKSBJbnB1dCBGaWx0ZXIgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX09TUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQxOCkgLy8gKFBJT0EpIE91dHB1dCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfSURSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNDQ0KSAvLyAoUElPQSkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfUERTUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNDNDKSAvLyAoUElPQSkgUGluIERhdGEgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0NPRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQzNCkgLy8gKFBJT0EpIENsZWFyIE91dHB1dCBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX09XU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjRBOCkgLy8gKFBJT0EpIE91dHB1dCBXcml0ZSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfT1dFUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNEEwKSAvLyAoUElPQSkgT3V0cHV0IFdyaXRlIEVuYWJsZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0tHUiBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19DS0dSX1BMTFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkMyQykgLy8gKENLR1IpIFBMTCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9NQ0ZSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDMjQpIC8vIChDS0dSKSBNYWluIENsb2NrICBGcmVxdWVuY3kgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NLR1JfTU9SICAoKEFUOTFfUkVHICopIAkweEZGRkZGQzIwKSAvLyAoQ0tHUikgTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQTUMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUE1DX1NDU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDMDgpIC8vIChQTUMpIFN5c3RlbSBDbG9jayBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19TQ0VSICAoKEFUOTFfUkVHICopIAkweEZGRkZGQzAwKSAvLyAoUE1DKSBTeXN0ZW0gQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfSU1SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkM2QykgLy8gKFBNQykgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19JRFIgICAoKEFUOTFfUkVHICopIAkweEZGRkZGQzY0KSAvLyAoUE1DKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDMTQpIC8vIChQTUMpIFBlcmlwaGVyYWwgQ2xvY2sgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX1NDRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDMDQpIC8vIChQTUMpIFN5c3RlbSBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfU1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkM2OCkgLy8gKFBNQykgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfSUVSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkM2MCkgLy8gKFBNQykgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX01DS1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDMzApIC8vIChQTUMpIE1hc3RlciBDbG9jayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX01PUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDMjApIC8vIChQTUMpIE1haW4gT3NjaWxsYXRvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDRVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDMTApIC8vIChQTUMpIFBlcmlwaGVyYWwgQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfUENTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkMxOCkgLy8gKFBNQykgUGVyaXBoZXJhbCBDbG9jayBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19QTExSICAoKEFUOTFfUkVHICopIAkweEZGRkZGQzJDKSAvLyAoUE1DKSBQTEwgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19NQ0ZSICAoKEFUOTFfUkVHICopIAkweEZGRkZGQzI0KSAvLyAoUE1DKSBNYWluIENsb2NrICBGcmVxdWVuY3kgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0tSICAoKEFUOTFfUkVHICopIAkweEZGRkZGQzQwKSAvLyAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFJTVEMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19SU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZEMDQpIC8vIChSU1RDKSBSZXNldCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1JTVENfUk1SICAoKEFUOTFfUkVHICopIAkweEZGRkZGRDA4KSAvLyAoUlNUQykgUmVzZXQgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19SQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZEMDApIC8vIChSU1RDKSBSZXNldCBDb250cm9sIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBSVFRDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1JUVENfUlRTUiAoKEFUOTFfUkVHICopIAkweEZGRkZGRDJDKSAvLyAoUlRUQykgUmVhbC10aW1lIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19SVEFSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZEMjQpIC8vIChSVFRDKSBSZWFsLXRpbWUgQWxhcm0gUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1JUVENfUlRWUiAoKEFUOTFfUkVHICopIAkweEZGRkZGRDI4KSAvLyAoUlRUQykgUmVhbC10aW1lIFZhbHVlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19SVFRDX1JUTVIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkQyMCkgLy8gKFJUVEMpIFJlYWwtdGltZSBNb2RlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQSVRDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1BJVENfUElJUiAoKEFUOTFfUkVHICopIAkweEZGRkZGRDNDKSAvLyAoUElUQykgUGVyaW9kIEludGVydmFsIEltYWdlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSVRDX1BJU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkQzNCkgLy8gKFBJVEMpIFBlcmlvZCBJbnRlcnZhbCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJVENfUElWUiAoKEFUOTFfUkVHICopIAkweEZGRkZGRDM4KSAvLyAoUElUQykgUGVyaW9kIEludGVydmFsIFZhbHVlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSVRDX1BJTVIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkQzMCkgLy8gKFBJVEMpIFBlcmlvZCBJbnRlcnZhbCBNb2RlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBXRFRDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1dEVENfV0RNUiAoKEFUOTFfUkVHICopIAkweEZGRkZGRDQ0KSAvLyAoV0RUQykgV2F0Y2hkb2cgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRFNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZENDgpIC8vIChXRFRDKSBXYXRjaGRvZyBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1dEVENfV0RDUiAoKEFUOTFfUkVHICopIAkweEZGRkZGRDQwKSAvLyAoV0RUQykgV2F0Y2hkb2cgQ29udHJvbCBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgTUMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfTUNfRkNSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZGNjQpIC8vIChNQykgTUMgRmxhc2ggQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfTUNfQVNSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZGMDQpIC8vIChNQykgTUMgQWJvcnQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19NQ19GU1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkY2OCkgLy8gKE1DKSBNQyBGbGFzaCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX01DX0ZNUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkZGRjYwKSAvLyAoTUMpIE1DIEZsYXNoIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX01DX0FBU1IgICAoKEFUOTFfUkVHICopIAkweEZGRkZGRjA4KSAvLyAoTUMpIE1DIEFib3J0IEFkZHJlc3MgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19NQ19SQ1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkYwMCkgLy8gKE1DKSBNQyBSZW1hcCBDb250cm9sIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfU1BJIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1NQSV9QVENSICAoKEFUOTFfUkVHICopIAkweEZGRkUwMTIwKSAvLyAoUERDX1NQSSkgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSV9UTlBSICAoKEFUOTFfUkVHICopIAkweEZGRkUwMTE4KSAvLyAoUERDX1NQSSkgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUElfUk5QUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDExMCkgLy8gKFBEQ19TUEkpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUElfVFBSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDEwOCkgLy8gKFBEQ19TUEkpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSV9SUFIgICAoKEFUOTFfUkVHICopIAkweEZGRkUwMTAwKSAvLyAoUERDX1NQSSkgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUElfUFRTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDEyNCkgLy8gKFBEQ19TUEkpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSV9UTkNSICAoKEFUOTFfUkVHICopIAkweEZGRkUwMTFDKSAvLyAoUERDX1NQSSkgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUElfUk5DUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDExNCkgLy8gKFBEQ19TUEkpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUElfVENSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDEwQykgLy8gKFBEQ19TUEkpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSV9SQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkUwMTA0KSAvLyAoUERDX1NQSSkgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBTUEkgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfU1BJX0NTUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAwMzApIC8vIChTUEkpIENoaXAgU2VsZWN0IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUElfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDAxOCkgLy8gKFNQSSkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSV9TUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkUwMDEwKSAvLyAoU1BJKSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSV9SRFIgICAoKEFUOTFfUkVHICopIAkweEZGRkUwMDA4KSAvLyAoU1BJKSBSZWNlaXZlIERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSV9DUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkUwMDAwKSAvLyAoU1BJKSBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUElfSU1SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDAxQykgLy8gKFNQSSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSV9JRVIgICAoKEFUOTFfUkVHICopIAkweEZGRkUwMDE0KSAvLyAoU1BJKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUElfVERSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDAwQykgLy8gKFNQSSkgVHJhbnNtaXQgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJX01SICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAwMDQpIC8vIChTUEkpIE1vZGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19BREMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQURDX1BUQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgxMjApIC8vIChQRENfQURDKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1ROUFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgxMTgpIC8vIChQRENfQURDKSBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19STlBSICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MTEwKSAvLyAoUERDX0FEQykgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19UUFIgICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MTA4KSAvLyAoUERDX0FEQykgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1JQUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgxMDApIC8vIChQRENfQURDKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19QVFNSICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MTI0KSAvLyAoUERDX0FEQykgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1ROQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgxMUMpIC8vIChQRENfQURDKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19STkNSICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MTE0KSAvLyAoUERDX0FEQykgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19UQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MTBDKSAvLyAoUERDX0FEQykgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1JDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgxMDQpIC8vIChQRENfQURDKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIEFEQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19BRENfSU1SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODAyQykgLy8gKEFEQykgQURDIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfQ0RSNCAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODA0MCkgLy8gKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA0DQorI2RlZmluZSBBVDkxQ19BRENfQ0RSMiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODAzOCkgLy8gKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAyDQorI2RlZmluZSBBVDkxQ19BRENfQ0RSMCAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODAzMCkgLy8gKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAwDQorI2RlZmluZSBBVDkxQ19BRENfQ0RSNyAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODA0QykgLy8gKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA3DQorI2RlZmluZSBBVDkxQ19BRENfQ0RSMSAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODAzNCkgLy8gKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAxDQorI2RlZmluZSBBVDkxQ19BRENfQ0RSMyAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODAzQykgLy8gKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAzDQorI2RlZmluZSBBVDkxQ19BRENfQ0RSNSAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODA0NCkgLy8gKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA1DQorI2RlZmluZSBBVDkxQ19BRENfTVIgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODAwNCkgLy8gKEFEQykgQURDIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19DRFI2ICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDQ4KSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDYNCisjZGVmaW5lIEFUOTFDX0FEQ19DUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDAwKSAvLyAoQURDKSBBREMgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX0NIRVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwMTApIC8vIChBREMpIEFEQyBDaGFubmVsIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX0NIU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwMTgpIC8vIChBREMpIEFEQyBDaGFubmVsIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX0lFUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwMjQpIC8vIChBREMpIEFEQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfU1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODAxQykgLy8gKEFEQykgQURDIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX0NIRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwMTQpIC8vIChBREMpIEFEQyBDaGFubmVsIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19JRFIgICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDI4KSAvLyAoQURDKSBBREMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19MQ0RSICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDIwKSAvLyAoQURDKSBBREMgTGFzdCBDb252ZXJ0ZWQgRGF0YSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX1NTQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19TU0NfUFRDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDEyMCkgLy8gKFBEQ19TU0MpIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfVE5QUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDExOCkgLy8gKFBEQ19TU0MpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JOUFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQxMTApIC8vIChQRENfU1NDKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RQUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQxMDgpIC8vIChQRENfU1NDKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUlBSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDEwMCkgLy8gKFBEQ19TU0MpIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1BUU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQxMjQpIC8vIChQRENfU1NDKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfVE5DUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDExQykgLy8gKFBEQ19TU0MpIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JOQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQxMTQpIC8vIChQRENfU1NDKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQxMEMpIC8vIChQRENfU1NDKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUkNSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDEwNCkgLy8gKFBEQ19TU0MpIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgU1NDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1NTQ19SRk1SICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MDE0KSAvLyAoU1NDKSBSZWNlaXZlIEZyYW1lIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19DTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MDA0KSAvLyAoU1NDKSBDbG9jayBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDA0OCkgLy8gKFNTQykgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19TUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MDQwKSAvLyAoU1NDKSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19SQzBSICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MDM4KSAvLyAoU1NDKSBSZWNlaXZlIENvbXBhcmUgMCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JTSFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQwMzApIC8vIChTU0MpIFJlY2VpdmUgU3luYyBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUkhSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDAyMCkgLy8gKFNTQykgUmVjZWl2ZSBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfVENNUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDAxOCkgLy8gKFNTQykgVHJhbnNtaXQgQ2xvY2sgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JDTVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQwMTApIC8vIChTU0MpIFJlY2VpdmUgQ2xvY2sgTW9kZVJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfQ1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDAwMCkgLy8gKFNTQykgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX0lNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQwNEMpIC8vIChTU0MpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfSUVSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDA0NCkgLy8gKFNTQykgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JDMVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQwM0MpIC8vIChTU0MpIFJlY2VpdmUgQ29tcGFyZSAxIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfVFNIUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDAzNCkgLy8gKFNTQykgVHJhbnNtaXQgU3luYyBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfVEhSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDAyNCkgLy8gKFNTQykgVHJhbnNtaXQgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RGTVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQwMUMpIC8vIChTU0MpIFRyYW5zbWl0IEZyYW1lIE1vZGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19VUzEgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVVMxX1BUU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQxMjQpIC8vIChQRENfVVMxKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfVE5DUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDExQykgLy8gKFBEQ19VUzEpIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1JOQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQxMTQpIC8vIChQRENfVVMxKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1RDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQxMEMpIC8vIChQRENfVVMxKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfUkNSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDEwNCkgLy8gKFBEQ19VUzEpIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1BUQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQxMjApIC8vIChQRENfVVMxKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1ROUFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQxMTgpIC8vIChQRENfVVMxKSBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9STlBSICAoKEFUOTFfUkVHICopIAkweEZGRkM0MTEwKSAvLyAoUERDX1VTMSkgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9UUFIgICAoKEFUOTFfUkVHICopIAkweEZGRkM0MTA4KSAvLyAoUERDX1VTMSkgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1JQUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQxMDApIC8vIChQRENfVVMxKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFVTMSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19VUzFfWFhSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDA0OCkgLy8gKFVTMSkgWE9OX1hPRkYgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9SSFIgICAoKEFUOTFfUkVHICopIAkweEZGRkM0MDE4KSAvLyAoVVMxKSBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfSU1SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDAxMCkgLy8gKFVTMSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9JRVIgICAoKEFUOTFfUkVHICopIAkweEZGRkM0MDA4KSAvLyAoVVMxKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfQ1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDAwMCkgLy8gKFVTMSkgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1JUT1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQwMjQpIC8vIChVUzEpIFJlY2VpdmVyIFRpbWUtb3V0IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfVEhSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDAxQykgLy8gKFVTMSkgVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX0NTUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQwMTQpIC8vIChVUzEpIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDAwQykgLy8gKFVTMSkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9GSURJICAoKEFUOTFfUkVHICopIAkweEZGRkM0MDQwKSAvLyAoVVMxKSBGSV9ESV9SYXRpbyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX0JSR1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQwMjApIC8vIChVUzEpIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9UVEdSICAoKEFUOTFfUkVHICopIAkweEZGRkM0MDI4KSAvLyAoVVMxKSBUcmFuc21pdHRlciBUaW1lLWd1YXJkIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfSUYgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDA0QykgLy8gKFVTMSkgSVJEQV9GSUxURVIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9ORVIgICAoKEFUOTFfUkVHICopIAkweEZGRkM0MDQ0KSAvLyAoVVMxKSBOYiBFcnJvcnMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9NUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkM0MDA0KSAvLyAoVVMxKSBNb2RlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfVVMwIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1VTMF9QVENSICAoKEFUOTFfUkVHICopIAkweEZGRkMwMTIwKSAvLyAoUERDX1VTMCkgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9UTlBSICAoKEFUOTFfUkVHICopIAkweEZGRkMwMTE4KSAvLyAoUERDX1VTMCkgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfUk5QUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDExMCkgLy8gKFBEQ19VUzApIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfVFBSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDEwOCkgLy8gKFBEQ19VUzApIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9SUFIgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMTAwKSAvLyAoUERDX1VTMCkgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfUFRTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDEyNCkgLy8gKFBEQ19VUzApIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9UTkNSICAoKEFUOTFfUkVHICopIAkweEZGRkMwMTFDKSAvLyAoUERDX1VTMCkgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfUk5DUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDExNCkgLy8gKFBEQ19VUzApIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfVENSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDEwQykgLy8gKFBEQ19VUzApIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9SQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMTA0KSAvLyAoUERDX1VTMCkgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBVUzAgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVVMwX1RUR1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAwMjgpIC8vIChVUzApIFRyYW5zbWl0dGVyIFRpbWUtZ3VhcmQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9CUkdSICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDIwKSAvLyAoVVMwKSBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfUkhSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDAxOCkgLy8gKFVTMCkgUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX0lNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAwMTApIC8vIChVUzApIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfTkVSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDA0NCkgLy8gKFVTMCkgTmIgRXJyb3JzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfUlRPUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDAyNCkgLy8gKFVTMCkgUmVjZWl2ZXIgVGltZS1vdXQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9YWFIgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDQ4KSAvLyAoVVMwKSBYT05fWE9GRiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX0ZJREkgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAwNDApIC8vIChVUzApIEZJX0RJX1JhdGlvIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfQ1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDAwMCkgLy8gKFVTMCkgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX0lFUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAwMDgpIC8vIChVUzApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9JRiAgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDRDKSAvLyAoVVMwKSBJUkRBX0ZJTFRFUiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX01SICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAwMDQpIC8vIChVUzApIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9JRFIgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDBDKSAvLyAoVVMwKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX0NTUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAwMTQpIC8vIChVUzApIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfVEhSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDAxQykgLy8gKFVTMCkgVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVFdJIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1RXSV9SSFIgICAoKEFUOTFfUkVHICopIAkweEZGRkI4MDMwKSAvLyAoVFdJKSBSZWNlaXZlIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9JRFIgICAoKEFUOTFfUkVHICopIAkweEZGRkI4MDI4KSAvLyAoVFdJKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX1NSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjgwMjApIC8vIChUV0kpIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX0NXR1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjgwMTApIC8vIChUV0kpIENsb2NrIFdhdmVmb3JtIEdlbmVyYXRvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX1NNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjgwMDgpIC8vIChUV0kpIFNsYXZlIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9DUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkI4MDAwKSAvLyAoVFdJKSBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UV0lfVEhSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZCODAzNCkgLy8gKFRXSSkgVHJhbnNtaXQgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX0lNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjgwMkMpIC8vIChUV0kpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UV0lfSUVSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZCODAyNCkgLy8gKFRXSSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX0lBRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjgwMEMpIC8vIChUV0kpIEludGVybmFsIEFkZHJlc3MgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9NTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkI4MDA0KSAvLyAoVFdJKSBNYXN0ZXIgTW9kZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVEMyIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1RDMl9JTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMEFDKSAvLyAoVEMyKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMyX0lFUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwQTQpIC8vIChUQzIpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMl9SQyAgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDlDKSAvLyAoVEMyKSBSZWdpc3RlciBDDQorI2RlZmluZSBBVDkxQ19UQzJfUkEgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDA5NCkgLy8gKFRDMikgUmVnaXN0ZXIgQQ0KKyNkZWZpbmUgQVQ5MUNfVEMyX0NNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwODQpIC8vIChUQzIpIENoYW5uZWwgTW9kZSBSZWdpc3RlciAoQ2FwdHVyZSBNb2RlIC8gV2F2ZWZvcm0gTW9kZSkNCisjZGVmaW5lIEFUOTFDX1RDMl9JRFIgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMEE4KSAvLyAoVEMyKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMyX1NSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwQTApIC8vIChUQzIpIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMyX1JCICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwOTgpIC8vIChUQzIpIFJlZ2lzdGVyIEINCisjZGVmaW5lIEFUOTFDX1RDMl9DViAgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDkwKSAvLyAoVEMyKSBDb3VudGVyIFZhbHVlDQorI2RlZmluZSBBVDkxQ19UQzJfQ0NSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDA4MCkgLy8gKFRDMikgQ2hhbm5lbCBDb250cm9sIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBUQzEgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVEMxX0lNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwNkMpIC8vIChUQzEpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzFfSUVSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDA2NCkgLy8gKFRDMSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMxX1JDICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwNUMpIC8vIChUQzEpIFJlZ2lzdGVyIEMNCisjZGVmaW5lIEFUOTFDX1RDMV9SQSAgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDU0KSAvLyAoVEMxKSBSZWdpc3RlciBBDQorI2RlZmluZSBBVDkxQ19UQzFfQ01SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDA0NCkgLy8gKFRDMSkgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyIChDYXB0dXJlIE1vZGUgLyBXYXZlZm9ybSBNb2RlKQ0KKyNkZWZpbmUgQVQ5MUNfVEMxX0lEUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwNjgpIC8vIChUQzEpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzFfU1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDA2MCkgLy8gKFRDMSkgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzFfUkIgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDA1OCkgLy8gKFRDMSkgUmVnaXN0ZXIgQg0KKyNkZWZpbmUgQVQ5MUNfVEMxX0NWICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwNTApIC8vIChUQzEpIENvdW50ZXIgVmFsdWUNCisjZGVmaW5lIEFUOTFDX1RDMV9DQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDQwKSAvLyAoVEMxKSBDaGFubmVsIENvbnRyb2wgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRDMCBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19UQzBfSU1SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDAyQykgLy8gKFRDMCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMF9JRVIgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDI0KSAvLyAoVEMwKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzBfUkMgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDAxQykgLy8gKFRDMCkgUmVnaXN0ZXIgQw0KKyNkZWZpbmUgQVQ5MUNfVEMwX1JBICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwMTQpIC8vIChUQzApIFJlZ2lzdGVyIEENCisjZGVmaW5lIEFUOTFDX1RDMF9DTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDA0KSAvLyAoVEMwKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXIgKENhcHR1cmUgTW9kZSAvIFdhdmVmb3JtIE1vZGUpDQorI2RlZmluZSBBVDkxQ19UQzBfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDAyOCkgLy8gKFRDMCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMF9TUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDIwKSAvLyAoVEMwKSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMF9SQiAgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDE4KSAvLyAoVEMwKSBSZWdpc3RlciBCDQorI2RlZmluZSBBVDkxQ19UQzBfQ1YgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDAxMCkgLy8gKFRDMCkgQ291bnRlciBWYWx1ZQ0KKyNkZWZpbmUgQVQ5MUNfVEMwX0NDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwMDApIC8vIChUQzApIENoYW5uZWwgQ29udHJvbCBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVENCIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1RDQl9CTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMEM0KSAvLyAoVENCKSBUQyBCbG9jayBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQ0JfQkNSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDBDMCkgLy8gKFRDQikgVEMgQmxvY2sgQ29udHJvbCBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUFdNQ19DSDMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQ0gzX0NVUERSICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyNzApIC8vIChQV01DX0NIMykgQ2hhbm5lbCBVcGRhdGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NIM19DUFJEUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjY4KSAvLyAoUFdNQ19DSDMpIENoYW5uZWwgUGVyaW9kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DSDNfQ01SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzI2MCkgLy8gKFBXTUNfQ0gzKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NIM19SZXNlcnZlZCAoKEFUOTFfUkVHICopIAkweEZGRkNDMjc0KSAvLyAoUFdNQ19DSDMpIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19DSDNfQ0NOVFIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzI2QykgLy8gKFBXTUNfQ0gzKSBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NIM19DRFRZUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjY0KSAvLyAoUFdNQ19DSDMpIENoYW5uZWwgRHV0eSBDeWNsZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUFdNQ19DSDIgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQ0gyX0NVUERSICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyNTApIC8vIChQV01DX0NIMikgQ2hhbm5lbCBVcGRhdGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NIMl9DUFJEUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjQ4KSAvLyAoUFdNQ19DSDIpIENoYW5uZWwgUGVyaW9kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DSDJfQ01SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzI0MCkgLy8gKFBXTUNfQ0gyKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NIMl9SZXNlcnZlZCAoKEFUOTFfUkVHICopIAkweEZGRkNDMjU0KSAvLyAoUFdNQ19DSDIpIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19DSDJfQ0NOVFIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzI0QykgLy8gKFBXTUNfQ0gyKSBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NIMl9DRFRZUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjQ0KSAvLyAoUFdNQ19DSDIpIENoYW5uZWwgRHV0eSBDeWNsZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUFdNQ19DSDEgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQ0gxX0NVUERSICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyMzApIC8vIChQV01DX0NIMSkgQ2hhbm5lbCBVcGRhdGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NIMV9DUFJEUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjI4KSAvLyAoUFdNQ19DSDEpIENoYW5uZWwgUGVyaW9kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DSDFfQ01SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzIyMCkgLy8gKFBXTUNfQ0gxKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NIMV9SZXNlcnZlZCAoKEFUOTFfUkVHICopIAkweEZGRkNDMjM0KSAvLyAoUFdNQ19DSDEpIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19DSDFfQ0NOVFIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzIyQykgLy8gKFBXTUNfQ0gxKSBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NIMV9DRFRZUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjI0KSAvLyAoUFdNQ19DSDEpIENoYW5uZWwgRHV0eSBDeWNsZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUFdNQ19DSDAgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQ0gwX0NVUERSICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyMTApIC8vIChQV01DX0NIMCkgQ2hhbm5lbCBVcGRhdGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NIMF9DUFJEUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjA4KSAvLyAoUFdNQ19DSDApIENoYW5uZWwgUGVyaW9kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DSDBfQ01SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzIwMCkgLy8gKFBXTUNfQ0gwKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NIMF9SZXNlcnZlZCAoKEFUOTFfUkVHICopIAkweEZGRkNDMjE0KSAvLyAoUFdNQ19DSDApIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19DSDBfQ0NOVFIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzIwQykgLy8gKFBXTUNfQ0gwKSBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NIMF9DRFRZUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjA0KSAvLyAoUFdNQ19DSDApIENoYW5uZWwgRHV0eSBDeWNsZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUFdNQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19QV01DX1ZSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzBGQykgLy8gKFBXTUMpIFBXTUMgVmVyc2lvbiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19JU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MwMUMpIC8vIChQV01DKSBQV01DIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfSURSICAoKEFUOTFfUkVHICopIAkweEZGRkNDMDE0KSAvLyAoUFdNQykgUFdNQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19TUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MwMEMpIC8vIChQV01DKSBQV01DIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19FTkEgICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MwMDQpIC8vIChQV01DKSBQV01DIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19JTVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MwMTgpIC8vIChQV01DKSBQV01DIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX01SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzAwMCkgLy8gKFBXTUMpIFBXTUMgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19ESVMgICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MwMDgpIC8vIChQV01DKSBQV01DIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfSUVSICAoKEFUOTFfUkVHICopIAkweEZGRkNDMDEwKSAvLyAoUFdNQykgUFdNQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBVRFAgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVURQX0lTUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjAwMUMpIC8vIChVRFApIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9JRFIgICAoKEFUOTFfUkVHICopIAkweEZGRkIwMDE0KSAvLyAoVURQKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVURQX0dMQlNUQVRFICgoQVQ5MV9SRUcgKikgCTB4RkZGQjAwMDQpIC8vIChVRFApIEdsb2JhbCBTdGF0ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZEUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjAwNTApIC8vIChVRFApIEVuZHBvaW50IEZJRk8gRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVURQX0NTUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjAwMzApIC8vIChVRFApIEVuZHBvaW50IENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVURQX1JTVEVQICgoQVQ5MV9SRUcgKikgCTB4RkZGQjAwMjgpIC8vIChVRFApIFJlc2V0IEVuZHBvaW50IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfSUNSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZCMDAyMCkgLy8gKFVEUCkgSW50ZXJydXB0IENsZWFyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfSU1SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZCMDAxOCkgLy8gKFVEUCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9JRVIgICAoKEFUOTFfUkVHICopIAkweEZGRkIwMDEwKSAvLyAoVURQKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfRkFERFIgKChBVDkxX1JFRyAqKSAJMHhGRkZCMDAwOCkgLy8gKFVEUCkgRnVuY3Rpb24gQWRkcmVzcyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVURQX05VTSAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjAwMDApIC8vIChVRFApIEZyYW1lIE51bWJlciBSZWdpc3Rlcg0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgICBQSU8gREVGSU5JVElPTlMgRk9SIEFUOTFTQU03UzY0ICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMCApICAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEEwICovDQotI2RlZmluZSBBVDkxQ19QQTBfUFdNMCAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEEwICkgIC8qICBQV00gQ2hhbm5lbCAwICovDQotI2RlZmluZSBBVDkxQ19QQTBfVElPQTAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEEwICkgIC8qICBUaW1lciBDb3VudGVyIDAgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMSAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAxICkgICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTEgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMV9QV00xICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTEgKSAgLyogIFBXTSBDaGFubmVsIDEgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMV9USU9CMCAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTEgKSAgLyogIFRpbWVyIENvdW50ZXIgMCBNdWx0aXB1cnBvc2UgVGltZXIgSS9PIFBpbiBCICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEExMCAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDEwICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMTAgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMTBfRFRYRCAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTEwICkgLyogIERCR1UgRGVidWcgVHJhbnNtaXQgRGF0YSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEExMF9OUENTMiAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMTAgKSAvKiAgU1BJIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMTEgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAxMSApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTExICovDQotI2RlZmluZSBBVDkxQ19QQTExX05QQ1MwICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEExMSApIC8qICBTUEkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAwICovDQotI2RlZmluZSBBVDkxQ19QQTExX1BXTTAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEExMSApIC8qICBQV00gQ2hhbm5lbCAwICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEExMiAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDEyICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMTIgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMTJfTUlTTyAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTEyICkgLyogIFNQSSBNYXN0ZXIgSW4gU2xhdmUgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMTJfUFdNMSAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTEyICkgLyogIFBXTSBDaGFubmVsIDEgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTEzICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMTMgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEExMyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEExM19NT1NJICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMTMgKSAvKiAgU1BJIE1hc3RlciBPdXQgU2xhdmUgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMTNfUFdNMiAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTEzICkgLyogIFBXTSBDaGFubmVsIDIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTE0ICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMTQgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEExNCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEExNF9TUENLICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMTQgKSAvKiAgU1BJIFNlcmlhbCBDbG9jayAqLw0KLSNkZWZpbmUgQVQ5MUNfUEExNF9QV00zICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMTQgKSAvKiAgUFdNIENoYW5uZWwgMyAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMTUgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAxNSApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTE1ICovDQotI2RlZmluZSBBVDkxQ19QQTE1X1RGICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEExNSApIC8qICBTU0MgVHJhbnNtaXQgRnJhbWUgU3luYyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEExNV9USU9BMSAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMTUgKSAvKiAgVGltZXIgQ291bnRlciAxIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEEgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTE2ICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMTYgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEExNiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEExNl9USyAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMTYgKSAvKiAgU1NDIFRyYW5zbWl0IENsb2NrICovDQotI2RlZmluZSBBVDkxQ19QQTE2X1RJT0IxICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEExNiApIC8qICBUaW1lciBDb3VudGVyIDEgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQiAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMTcgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAxNyApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTE3ICovDQotI2RlZmluZSBBVDkxQ19QQTE3X1REICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEExNyApIC8qICBTU0MgVHJhbnNtaXQgZGF0YSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEExN19QQ0sxICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMTcgKSAvKiAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMTggICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAxOCApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTE4ICovDQotI2RlZmluZSBBVDkxQ19QQTE4X1JEICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEExOCApIC8qICBTU0MgUmVjZWl2ZSBEYXRhICovDQotI2RlZmluZSBBVDkxQ19QQTE4X1BDSzIgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEExOCApIC8qICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAyICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEExOSAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDE5ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMTkgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMTlfUksgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTE5ICkgLyogIFNTQyBSZWNlaXZlIENsb2NrICovDQotI2RlZmluZSBBVDkxQ19QQTE5X0ZJUSAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEExOSApIC8qICBBSUMgRmFzdCBJbnRlcnJ1cHQgSW5wdXQgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTIgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMiApICAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEEyICovDQotI2RlZmluZSBBVDkxQ19QQTJfUFdNMiAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEEyICkgIC8qICBQV00gQ2hhbm5lbCAyICovDQotI2RlZmluZSBBVDkxQ19QQTJfU0NLMCAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEEyICkgIC8qICBVU0FSVCAwIFNlcmlhbCBDbG9jayAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMjAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAyMCApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTIwICovDQotI2RlZmluZSBBVDkxQ19QQTIwX1JGICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEEyMCApIC8qICBTU0MgUmVjZWl2ZSBGcmFtZSBTeW5jICovDQotI2RlZmluZSBBVDkxQ19QQTIwX0lSUTAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEEyMCApIC8qICBFeHRlcm5hbCBJbnRlcnJ1cHQgMCAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMjEgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAyMSApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTIxICovDQotI2RlZmluZSBBVDkxQ19QQTIxX1JYRDEgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEEyMSApIC8qICBVU0FSVCAxIFJlY2VpdmUgRGF0YSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyMV9QQ0sxICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMjEgKSAvKiAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMjIgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAyMiApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTIyICovDQotI2RlZmluZSBBVDkxQ19QQTIyX1RYRDEgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEEyMiApIC8qICBVU0FSVCAxIFRyYW5zbWl0IERhdGEgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjJfTlBDUzMgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTIyICkgLyogIFNQSSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTIzICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMjMgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEEyMyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyM19TQ0sxICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMjMgKSAvKiAgVVNBUlQgMSBTZXJpYWwgQ2xvY2sgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjNfUFdNMCAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTIzICkgLyogIFBXTSBDaGFubmVsIDAgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTI0ICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMjQgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEEyNCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyNF9SVFMxICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMjQgKSAvKiAgVVNBUlQgMSBSZWFkeSBUbyBTZW5kICovDQotI2RlZmluZSBBVDkxQ19QQTI0X1BXTTEgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEEyNCApIC8qICBQV00gQ2hhbm5lbCAxICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEEyNSAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDI1ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMjUgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjVfQ1RTMSAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTI1ICkgLyogIFVTQVJUIDEgQ2xlYXIgVG8gU2VuZCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyNV9QV00yICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMjUgKSAvKiAgUFdNIENoYW5uZWwgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMjYgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAyNiApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTI2ICovDQotI2RlZmluZSBBVDkxQ19QQTI2X0RDRDEgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEEyNiApIC8qICBVU0FSVCAxIERhdGEgQ2FycmllciBEZXRlY3QgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjZfVElPQTIgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTI2ICkgLyogIFRpbWVyIENvdW50ZXIgMiBNdWx0aXB1cnBvc2UgVGltZXIgSS9PIFBpbiBBICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEEyNyAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDI3ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMjcgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjdfRFRSMSAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTI3ICkgLyogIFVTQVJUIDEgRGF0YSBUZXJtaW5hbCByZWFkeSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyN19USU9CMiAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMjcgKSAvKiAgVGltZXIgQ291bnRlciAyIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTI4ICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMjggKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEEyOCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyOF9EU1IxICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMjggKSAvKiAgVVNBUlQgMSBEYXRhIFNldCByZWFkeSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyOF9UQ0xLMSAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMjggKSAvKiAgVGltZXIgQ291bnRlciAxIGV4dGVybmFsIGNsb2NrIGlucHV0ICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEEyOSAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDI5ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMjkgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjlfUkkxICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTI5ICkgLyogIFVTQVJUIDEgUmluZyBJbmRpY2F0b3IgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjlfVENMSzIgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTI5ICkgLyogIFRpbWVyIENvdW50ZXIgMiBleHRlcm5hbCBjbG9jayBpbnB1dCAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMyAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAzICkgICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTMgKi8NCi0jZGVmaW5lIEFUOTFDX1BBM19UV0QgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTMgKSAgLyogIFRXSSBUd28td2lyZSBTZXJpYWwgRGF0YSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEzX05QQ1MzICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMyApICAvKiAgU1BJIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMyAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMzAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAzMCApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTMwICovDQotI2RlZmluZSBBVDkxQ19QQTMwX0lSUTEgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEEzMCApIC8qICBFeHRlcm5hbCBJbnRlcnJ1cHQgMSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEzMF9OUENTMiAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMzAgKSAvKiAgU1BJIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMzEgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAzMSApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTMxICovDQotI2RlZmluZSBBVDkxQ19QQTMxX05QQ1MxICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEEzMSApIC8qICBTUEkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAxICovDQotI2RlZmluZSBBVDkxQ19QQTMxX1BDSzIgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEEzMSApIC8qICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAyICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEE0ICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDQgKSAgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBNCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEE0X1RXQ0sgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBNCApICAvKiAgVFdJIFR3by13aXJlIFNlcmlhbCBDbG9jayAqLw0KLSNkZWZpbmUgQVQ5MUNfUEE0X1RDTEswICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBNCApICAvKiAgVGltZXIgQ291bnRlciAwIGV4dGVybmFsIGNsb2NrIGlucHV0ICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEE1ICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDUgKSAgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBNSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEE1X1JYRDAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBNSApICAvKiAgVVNBUlQgMCBSZWNlaXZlIERhdGEgKi8NCi0jZGVmaW5lIEFUOTFDX1BBNV9OUENTMyAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTUgKSAgLyogIFNQSSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTYgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgNiApICAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEE2ICovDQotI2RlZmluZSBBVDkxQ19QQTZfVFhEMCAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEE2ICkgIC8qICBVU0FSVCAwIFRyYW5zbWl0IERhdGEgKi8NCi0jZGVmaW5lIEFUOTFDX1BBNl9QQ0swICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTYgKSAgLyogIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDAgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTcgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgNyApICAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEE3ICovDQotI2RlZmluZSBBVDkxQ19QQTdfUlRTMCAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEE3ICkgIC8qICBVU0FSVCAwIFJlYWR5IFRvIFNlbmQgKi8NCi0jZGVmaW5lIEFUOTFDX1BBN19QV00zICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTcgKSAgLyogIFBXTSBDaGFubmVsIDMgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTggICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgOCApICAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEE4ICovDQotI2RlZmluZSBBVDkxQ19QQThfQ1RTMCAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEE4ICkgIC8qICBVU0FSVCAwIENsZWFyIFRvIFNlbmQgKi8NCi0jZGVmaW5lIEFUOTFDX1BBOF9BRFRSRyAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTggKSAgLyogIEFEQyBFeHRlcm5hbCBUcmlnZ2VyICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEE5ICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDkgKSAgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBOSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEE5X0RSWEQgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBOSApICAvKiAgREJHVSBEZWJ1ZyBSZWNlaXZlIERhdGEgKi8NCi0jZGVmaW5lIEFUOTFDX1BBOV9OUENTMSAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTkgKSAgLyogIFNQSSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDEgKi8NCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICAgUElPIERFRklOSVRJT05TIEZPUiBBVDkxU0FNN1M2NA0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorI2RlZmluZSBBVDkxQ19QSU9fUEEwICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgMCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEwDQorI2RlZmluZSBBVDkxQ19QQTBfUFdNMCAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTApIC8vICBQV00gQ2hhbm5lbCAwDQorI2RlZmluZSBBVDkxQ19QQTBfVElPQTAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTApIC8vICBUaW1lciBDb3VudGVyIDAgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDEpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMQ0KKyNkZWZpbmUgQVQ5MUNfUEExX1BXTTEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExKSAvLyAgUFdNIENoYW5uZWwgMQ0KKyNkZWZpbmUgQVQ5MUNfUEExX1RJT0IwICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExKSAvLyAgVGltZXIgQ291bnRlciAwIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEINCisjZGVmaW5lIEFUOTFDX1BJT19QQTEwICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDEwKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTEwDQorI2RlZmluZSBBVDkxQ19QQTEwX0RUWEQgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExMCkgLy8gIERCR1UgRGVidWcgVHJhbnNtaXQgRGF0YQ0KKyNkZWZpbmUgQVQ5MUNfUEExMF9OUENTMiAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMTApIC8vICBTUEkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAyDQorI2RlZmluZSBBVDkxQ19QSU9fUEExMSAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxMSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExMQ0KKyNkZWZpbmUgQVQ5MUNfUEExMV9OUENTMCAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMTEpIC8vICBTUEkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAwDQorI2RlZmluZSBBVDkxQ19QQTExX1BXTTAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExMSkgLy8gIFBXTSBDaGFubmVsIDANCisjZGVmaW5lIEFUOTFDX1BJT19QQTEyICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDEyKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTEyDQorI2RlZmluZSBBVDkxQ19QQTEyX01JU08gICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExMikgLy8gIFNQSSBNYXN0ZXIgSW4gU2xhdmUNCisjZGVmaW5lIEFUOTFDX1BBMTJfUFdNMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTEyKSAvLyAgUFdNIENoYW5uZWwgMQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMTMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTMpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMTMNCisjZGVmaW5lIEFUOTFDX1BBMTNfTU9TSSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTEzKSAvLyAgU1BJIE1hc3RlciBPdXQgU2xhdmUNCisjZGVmaW5lIEFUOTFDX1BBMTNfUFdNMiAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTEzKSAvLyAgUFdNIENoYW5uZWwgMg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMTQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTQpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMTQNCisjZGVmaW5lIEFUOTFDX1BBMTRfU1BDSyAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTE0KSAvLyAgU1BJIFNlcmlhbCBDbG9jaw0KKyNkZWZpbmUgQVQ5MUNfUEExNF9QV00zICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMTQpIC8vICBQV00gQ2hhbm5lbCAzDQorI2RlZmluZSBBVDkxQ19QSU9fUEExNSAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxNSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExNQ0KKyNkZWZpbmUgQVQ5MUNfUEExNV9URiAgICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMTUpIC8vICBTU0MgVHJhbnNtaXQgRnJhbWUgU3luYw0KKyNkZWZpbmUgQVQ5MUNfUEExNV9USU9BMSAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMTUpIC8vICBUaW1lciBDb3VudGVyIDEgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMTYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTYpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMTYNCisjZGVmaW5lIEFUOTFDX1BBMTZfVEsgICAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTE2KSAvLyAgU1NDIFRyYW5zbWl0IENsb2NrDQorI2RlZmluZSBBVDkxQ19QQTE2X1RJT0IxICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExNikgLy8gIFRpbWVyIENvdW50ZXIgMSBNdWx0aXB1cnBvc2UgVGltZXIgSS9PIFBpbiBCDQorI2RlZmluZSBBVDkxQ19QSU9fUEExNyAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxNykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExNw0KKyNkZWZpbmUgQVQ5MUNfUEExN19URCAgICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMTcpIC8vICBTU0MgVHJhbnNtaXQgZGF0YQ0KKyNkZWZpbmUgQVQ5MUNfUEExN19QQ0sxICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMTcpIC8vICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAxDQorI2RlZmluZSBBVDkxQ19QSU9fUEExOCAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxOCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExOA0KKyNkZWZpbmUgQVQ5MUNfUEExOF9SRCAgICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMTgpIC8vICBTU0MgUmVjZWl2ZSBEYXRhDQorI2RlZmluZSBBVDkxQ19QQTE4X1BDSzIgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExOCkgLy8gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDINCisjZGVmaW5lIEFUOTFDX1BJT19QQTE5ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDE5KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTE5DQorI2RlZmluZSBBVDkxQ19QQTE5X1JLICAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExOSkgLy8gIFNTQyBSZWNlaXZlIENsb2NrDQorI2RlZmluZSBBVDkxQ19QQTE5X0ZJUSAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExOSkgLy8gIEFJQyBGYXN0IEludGVycnVwdCBJbnB1dA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDIpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMg0KKyNkZWZpbmUgQVQ5MUNfUEEyX1BXTTIgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyKSAvLyAgUFdNIENoYW5uZWwgMg0KKyNkZWZpbmUgQVQ5MUNfUEEyX1NDSzAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyKSAvLyAgVVNBUlQgMCBTZXJpYWwgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BJT19QQTIwICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDIwKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTIwDQorI2RlZmluZSBBVDkxQ19QQTIwX1JGICAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyMCkgLy8gIFNTQyBSZWNlaXZlIEZyYW1lIFN5bmMNCisjZGVmaW5lIEFUOTFDX1BBMjBfSVJRMCAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTIwKSAvLyAgRXh0ZXJuYWwgSW50ZXJydXB0IDANCisjZGVmaW5lIEFUOTFDX1BJT19QQTIxICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDIxKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTIxDQorI2RlZmluZSBBVDkxQ19QQTIxX1JYRDEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyMSkgLy8gIFVTQVJUIDEgUmVjZWl2ZSBEYXRhDQorI2RlZmluZSBBVDkxQ19QQTIxX1BDSzEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyMSkgLy8gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDENCisjZGVmaW5lIEFUOTFDX1BJT19QQTIyICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDIyKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTIyDQorI2RlZmluZSBBVDkxQ19QQTIyX1RYRDEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyMikgLy8gIFVTQVJUIDEgVHJhbnNtaXQgRGF0YQ0KKyNkZWZpbmUgQVQ5MUNfUEEyMl9OUENTMyAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjIpIC8vICBTUEkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzDQorI2RlZmluZSBBVDkxQ19QSU9fUEEyMyAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAyMykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEyMw0KKyNkZWZpbmUgQVQ5MUNfUEEyM19TQ0sxICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjMpIC8vICBVU0FSVCAxIFNlcmlhbCBDbG9jaw0KKyNkZWZpbmUgQVQ5MUNfUEEyM19QV00wICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjMpIC8vICBQV00gQ2hhbm5lbCAwDQorI2RlZmluZSBBVDkxQ19QSU9fUEEyNCAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAyNCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEyNA0KKyNkZWZpbmUgQVQ5MUNfUEEyNF9SVFMxICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjQpIC8vICBVU0FSVCAxIFJlYWR5IFRvIFNlbmQNCisjZGVmaW5lIEFUOTFDX1BBMjRfUFdNMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTI0KSAvLyAgUFdNIENoYW5uZWwgMQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMjUgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjUpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjUNCisjZGVmaW5lIEFUOTFDX1BBMjVfQ1RTMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTI1KSAvLyAgVVNBUlQgMSBDbGVhciBUbyBTZW5kDQorI2RlZmluZSBBVDkxQ19QQTI1X1BXTTIgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyNSkgLy8gIFBXTSBDaGFubmVsIDINCisjZGVmaW5lIEFUOTFDX1BJT19QQTI2ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDI2KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTI2DQorI2RlZmluZSBBVDkxQ19QQTI2X0RDRDEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyNikgLy8gIFVTQVJUIDEgRGF0YSBDYXJyaWVyIERldGVjdA0KKyNkZWZpbmUgQVQ5MUNfUEEyNl9USU9BMiAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjYpIC8vICBUaW1lciBDb3VudGVyIDIgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMjcgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjcpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjcNCisjZGVmaW5lIEFUOTFDX1BBMjdfRFRSMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTI3KSAvLyAgVVNBUlQgMSBEYXRhIFRlcm1pbmFsIHJlYWR5DQorI2RlZmluZSBBVDkxQ19QQTI3X1RJT0IyICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyNykgLy8gIFRpbWVyIENvdW50ZXIgMiBNdWx0aXB1cnBvc2UgVGltZXIgSS9PIFBpbiBCDQorI2RlZmluZSBBVDkxQ19QSU9fUEEyOCAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAyOCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEyOA0KKyNkZWZpbmUgQVQ5MUNfUEEyOF9EU1IxICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjgpIC8vICBVU0FSVCAxIERhdGEgU2V0IHJlYWR5DQorI2RlZmluZSBBVDkxQ19QQTI4X1RDTEsxICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyOCkgLy8gIFRpbWVyIENvdW50ZXIgMSBleHRlcm5hbCBjbG9jayBpbnB1dA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMjkgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjkpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjkNCisjZGVmaW5lIEFUOTFDX1BBMjlfUkkxICAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTI5KSAvLyAgVVNBUlQgMSBSaW5nIEluZGljYXRvcg0KKyNkZWZpbmUgQVQ5MUNfUEEyOV9UQ0xLMiAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjkpIC8vICBUaW1lciBDb3VudGVyIDIgZXh0ZXJuYWwgY2xvY2sgaW5wdXQNCisjZGVmaW5lIEFUOTFDX1BJT19QQTMgICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICAzKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTMNCisjZGVmaW5lIEFUOTFDX1BBM19UV0QgICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMykgLy8gIFRXSSBUd28td2lyZSBTZXJpYWwgRGF0YQ0KKyNkZWZpbmUgQVQ5MUNfUEEzX05QQ1MzICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEzKSAvLyAgU1BJIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMzAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMzApIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMzANCisjZGVmaW5lIEFUOTFDX1BBMzBfSVJRMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTMwKSAvLyAgRXh0ZXJuYWwgSW50ZXJydXB0IDENCisjZGVmaW5lIEFUOTFDX1BBMzBfTlBDUzIgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTMwKSAvLyAgU1BJIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMzEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMzEpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMzENCisjZGVmaW5lIEFUOTFDX1BBMzFfTlBDUzEgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTMxKSAvLyAgU1BJIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMQ0KKyNkZWZpbmUgQVQ5MUNfUEEzMV9QQ0syICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMzEpIC8vICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAyDQorI2RlZmluZSBBVDkxQ19QSU9fUEE0ICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgNCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEE0DQorI2RlZmluZSBBVDkxQ19QQTRfVFdDSyAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTQpIC8vICBUV0kgVHdvLXdpcmUgU2VyaWFsIENsb2NrDQorI2RlZmluZSBBVDkxQ19QQTRfVENMSzAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTQpIC8vICBUaW1lciBDb3VudGVyIDAgZXh0ZXJuYWwgY2xvY2sgaW5wdXQNCisjZGVmaW5lIEFUOTFDX1BJT19QQTUgICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICA1KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTUNCisjZGVmaW5lIEFUOTFDX1BBNV9SWEQwICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBNSkgLy8gIFVTQVJUIDAgUmVjZWl2ZSBEYXRhDQorI2RlZmluZSBBVDkxQ19QQTVfTlBDUzMgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTUpIC8vICBTUEkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzDQorI2RlZmluZSBBVDkxQ19QSU9fUEE2ICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgNikgLy8gUGluIENvbnRyb2xsZWQgYnkgUEE2DQorI2RlZmluZSBBVDkxQ19QQTZfVFhEMCAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTYpIC8vICBVU0FSVCAwIFRyYW5zbWl0IERhdGENCisjZGVmaW5lIEFUOTFDX1BBNl9QQ0swICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBNikgLy8gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDANCisjZGVmaW5lIEFUOTFDX1BJT19QQTcgICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICA3KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTcNCisjZGVmaW5lIEFUOTFDX1BBN19SVFMwICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBNykgLy8gIFVTQVJUIDAgUmVhZHkgVG8gU2VuZA0KKyNkZWZpbmUgQVQ5MUNfUEE3X1BXTTMgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEE3KSAvLyAgUFdNIENoYW5uZWwgMw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBOCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDgpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBOA0KKyNkZWZpbmUgQVQ5MUNfUEE4X0NUUzAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEE4KSAvLyAgVVNBUlQgMCBDbGVhciBUbyBTZW5kDQorI2RlZmluZSBBVDkxQ19QQThfQURUUkcgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTgpIC8vICBBREMgRXh0ZXJuYWwgVHJpZ2dlcg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBOSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDkpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBOQ0KKyNkZWZpbmUgQVQ5MUNfUEE5X0RSWEQgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEE5KSAvLyAgREJHVSBEZWJ1ZyBSZWNlaXZlIERhdGENCisjZGVmaW5lIEFUOTFDX1BBOV9OUENTMSAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBOSkgLy8gIFNQSSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDENCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICAgUEVSSVBIRVJBTCBJRCBERUZJTklUSU9OUyBGT1IgQVQ5MVNBTTdTNjQgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfRklRICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDAgKSAgLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKEZJUSkgKi8NCi0jZGVmaW5lIEFUOTFDX0lEX1NZUyAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxICkgIC8qIFN5c3RlbSBQZXJpcGhlcmFsICovDQotI2RlZmluZSBBVDkxQ19JRF9QSU9BICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMiApICAvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyICovDQotI2RlZmluZSBBVDkxQ19JRF8zX1Jlc2VydmVkICAgICAoICggdW5zaWduZWQgaW50ICkgMyApICAvKiBSZXNlcnZlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfQURDICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDQgKSAgLyogQW5hbG9nLXRvLURpZ2l0YWwgQ29udmVydGVyICovDQotI2RlZmluZSBBVDkxQ19JRF9TUEkgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgNSApICAvKiBTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgKi8NCi0jZGVmaW5lIEFUOTFDX0lEX1VTMCAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSA2ICkgIC8qIFVTQVJUIDAgKi8NCi0jZGVmaW5lIEFUOTFDX0lEX1VTMSAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSA3ICkgIC8qIFVTQVJUIDEgKi8NCi0jZGVmaW5lIEFUOTFDX0lEX1NTQyAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSA4ICkgIC8qIFNlcmlhbCBTeW5jaHJvbm91cyBDb250cm9sbGVyICovDQotI2RlZmluZSBBVDkxQ19JRF9UV0kgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgOSApICAvKiBUd28tV2lyZSBJbnRlcmZhY2UgKi8NCi0jZGVmaW5lIEFUOTFDX0lEX1BXTUMgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxMCApIC8qIFBXTSBDb250cm9sbGVyICovDQotI2RlZmluZSBBVDkxQ19JRF9VRFAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMTEgKSAvKiBVU0IgRGV2aWNlIFBvcnQgKi8NCi0jZGVmaW5lIEFUOTFDX0lEX1RDMCAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxMiApIC8qIFRpbWVyIENvdW50ZXIgMCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfVEMxICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEzICkgLyogVGltZXIgQ291bnRlciAxICovDQotI2RlZmluZSBBVDkxQ19JRF9UQzIgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMTQgKSAvKiBUaW1lciBDb3VudGVyIDIgKi8NCi0jZGVmaW5lIEFUOTFDX0lEXzE1X1Jlc2VydmVkICAgICggKCB1bnNpZ25lZCBpbnQgKSAxNSApIC8qIFJlc2VydmVkICovDQotI2RlZmluZSBBVDkxQ19JRF8xNl9SZXNlcnZlZCAgICAoICggdW5zaWduZWQgaW50ICkgMTYgKSAvKiBSZXNlcnZlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfMTdfUmVzZXJ2ZWQgICAgKCAoIHVuc2lnbmVkIGludCApIDE3ICkgLyogUmVzZXJ2ZWQgKi8NCi0jZGVmaW5lIEFUOTFDX0lEXzE4X1Jlc2VydmVkICAgICggKCB1bnNpZ25lZCBpbnQgKSAxOCApIC8qIFJlc2VydmVkICovDQotI2RlZmluZSBBVDkxQ19JRF8xOV9SZXNlcnZlZCAgICAoICggdW5zaWduZWQgaW50ICkgMTkgKSAvKiBSZXNlcnZlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfMjBfUmVzZXJ2ZWQgICAgKCAoIHVuc2lnbmVkIGludCApIDIwICkgLyogUmVzZXJ2ZWQgKi8NCi0jZGVmaW5lIEFUOTFDX0lEXzIxX1Jlc2VydmVkICAgICggKCB1bnNpZ25lZCBpbnQgKSAyMSApIC8qIFJlc2VydmVkICovDQotI2RlZmluZSBBVDkxQ19JRF8yMl9SZXNlcnZlZCAgICAoICggdW5zaWduZWQgaW50ICkgMjIgKSAvKiBSZXNlcnZlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfMjNfUmVzZXJ2ZWQgICAgKCAoIHVuc2lnbmVkIGludCApIDIzICkgLyogUmVzZXJ2ZWQgKi8NCi0jZGVmaW5lIEFUOTFDX0lEXzI0X1Jlc2VydmVkICAgICggKCB1bnNpZ25lZCBpbnQgKSAyNCApIC8qIFJlc2VydmVkICovDQotI2RlZmluZSBBVDkxQ19JRF8yNV9SZXNlcnZlZCAgICAoICggdW5zaWduZWQgaW50ICkgMjUgKSAvKiBSZXNlcnZlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfMjZfUmVzZXJ2ZWQgICAgKCAoIHVuc2lnbmVkIGludCApIDI2ICkgLyogUmVzZXJ2ZWQgKi8NCi0jZGVmaW5lIEFUOTFDX0lEXzI3X1Jlc2VydmVkICAgICggKCB1bnNpZ25lZCBpbnQgKSAyNyApIC8qIFJlc2VydmVkICovDQotI2RlZmluZSBBVDkxQ19JRF8yOF9SZXNlcnZlZCAgICAoICggdW5zaWduZWQgaW50ICkgMjggKSAvKiBSZXNlcnZlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfMjlfUmVzZXJ2ZWQgICAgKCAoIHVuc2lnbmVkIGludCApIDI5ICkgLyogUmVzZXJ2ZWQgKi8NCi0jZGVmaW5lIEFUOTFDX0lEX0lSUTAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAzMCApIC8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChJUlEwKSAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfSVJRMSAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDMxICkgLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKElSUTEpICovDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgIFBFUklQSEVSQUwgSUQgREVGSU5JVElPTlMgRk9SIEFUOTFTQU03UzY0DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisjZGVmaW5lIEFUOTFDX0lEX0ZJUSAgICAoKHVuc2lnbmVkIGludCkgIDApIC8vIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChGSVEpDQorI2RlZmluZSBBVDkxQ19JRF9TWVMgICAgKCh1bnNpZ25lZCBpbnQpICAxKSAvLyBTeXN0ZW0gUGVyaXBoZXJhbA0KKyNkZWZpbmUgQVQ5MUNfSURfUElPQSAgICgodW5zaWduZWQgaW50KSAgMikgLy8gUGFyYWxsZWwgSU8gQ29udHJvbGxlcg0KKyNkZWZpbmUgQVQ5MUNfSURfM19SZXNlcnZlZCAoKHVuc2lnbmVkIGludCkgIDMpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF9BREMgICAgKCh1bnNpZ25lZCBpbnQpICA0KSAvLyBBbmFsb2ctdG8tRGlnaXRhbCBDb252ZXJ0ZXINCisjZGVmaW5lIEFUOTFDX0lEX1NQSSAgICAoKHVuc2lnbmVkIGludCkgIDUpIC8vIFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZQ0KKyNkZWZpbmUgQVQ5MUNfSURfVVMwICAgICgodW5zaWduZWQgaW50KSAgNikgLy8gVVNBUlQgMA0KKyNkZWZpbmUgQVQ5MUNfSURfVVMxICAgICgodW5zaWduZWQgaW50KSAgNykgLy8gVVNBUlQgMQ0KKyNkZWZpbmUgQVQ5MUNfSURfU1NDICAgICgodW5zaWduZWQgaW50KSAgOCkgLy8gU2VyaWFsIFN5bmNocm9ub3VzIENvbnRyb2xsZXINCisjZGVmaW5lIEFUOTFDX0lEX1RXSSAgICAoKHVuc2lnbmVkIGludCkgIDkpIC8vIFR3by1XaXJlIEludGVyZmFjZQ0KKyNkZWZpbmUgQVQ5MUNfSURfUFdNQyAgICgodW5zaWduZWQgaW50KSAxMCkgLy8gUFdNIENvbnRyb2xsZXINCisjZGVmaW5lIEFUOTFDX0lEX1VEUCAgICAoKHVuc2lnbmVkIGludCkgMTEpIC8vIFVTQiBEZXZpY2UgUG9ydA0KKyNkZWZpbmUgQVQ5MUNfSURfVEMwICAgICgodW5zaWduZWQgaW50KSAxMikgLy8gVGltZXIgQ291bnRlciAwDQorI2RlZmluZSBBVDkxQ19JRF9UQzEgICAgKCh1bnNpZ25lZCBpbnQpIDEzKSAvLyBUaW1lciBDb3VudGVyIDENCisjZGVmaW5lIEFUOTFDX0lEX1RDMiAgICAoKHVuc2lnbmVkIGludCkgMTQpIC8vIFRpbWVyIENvdW50ZXIgMg0KKyNkZWZpbmUgQVQ5MUNfSURfMTVfUmVzZXJ2ZWQgKCh1bnNpZ25lZCBpbnQpIDE1KSAvLyBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfSURfMTZfUmVzZXJ2ZWQgKCh1bnNpZ25lZCBpbnQpIDE2KSAvLyBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfSURfMTdfUmVzZXJ2ZWQgKCh1bnNpZ25lZCBpbnQpIDE3KSAvLyBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfSURfMThfUmVzZXJ2ZWQgKCh1bnNpZ25lZCBpbnQpIDE4KSAvLyBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfSURfMTlfUmVzZXJ2ZWQgKCh1bnNpZ25lZCBpbnQpIDE5KSAvLyBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfSURfMjBfUmVzZXJ2ZWQgKCh1bnNpZ25lZCBpbnQpIDIwKSAvLyBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfSURfMjFfUmVzZXJ2ZWQgKCh1bnNpZ25lZCBpbnQpIDIxKSAvLyBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfSURfMjJfUmVzZXJ2ZWQgKCh1bnNpZ25lZCBpbnQpIDIyKSAvLyBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfSURfMjNfUmVzZXJ2ZWQgKCh1bnNpZ25lZCBpbnQpIDIzKSAvLyBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfSURfMjRfUmVzZXJ2ZWQgKCh1bnNpZ25lZCBpbnQpIDI0KSAvLyBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfSURfMjVfUmVzZXJ2ZWQgKCh1bnNpZ25lZCBpbnQpIDI1KSAvLyBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfSURfMjZfUmVzZXJ2ZWQgKCh1bnNpZ25lZCBpbnQpIDI2KSAvLyBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfSURfMjdfUmVzZXJ2ZWQgKCh1bnNpZ25lZCBpbnQpIDI3KSAvLyBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfSURfMjhfUmVzZXJ2ZWQgKCh1bnNpZ25lZCBpbnQpIDI4KSAvLyBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfSURfMjlfUmVzZXJ2ZWQgKCh1bnNpZ25lZCBpbnQpIDI5KSAvLyBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfSURfSVJRMCAgICgodW5zaWduZWQgaW50KSAzMCkgLy8gQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKElSUTApDQorI2RlZmluZSBBVDkxQ19JRF9JUlExICAgKCh1bnNpZ25lZCBpbnQpIDMxKSAvLyBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoSVJRMSkNCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICAgQkFTRSBBRERSRVNTIERFRklOSVRJT05TIEZPUiBBVDkxU0FNN1M2NCAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1NZU0MgICAgICAgICggKCBBVDkxUFNfU1lTQyApIDB4RkZGRkYwMDAgKSAgICAvKiAoU1lTQykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX0FJQyAgICAgICAgICggKCBBVDkxUFNfQUlDICkgMHhGRkZGRjAwMCApICAgICAvKiAoQUlDKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfREJHVSAgICAgICAgKCAoIEFUOTFQU19EQkdVICkgMHhGRkZGRjIwMCApICAgIC8qIChEQkdVKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfUERDX0RCR1UgICAgKCAoIEFUOTFQU19QREMgKSAweEZGRkZGMzAwICkgICAgIC8qIChQRENfREJHVSkgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1BJT0EgICAgICAgICggKCBBVDkxUFNfUElPICkgMHhGRkZGRjQwMCApICAgICAvKiAoUElPQSkgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX0NLR1IgICAgICAgICggKCBBVDkxUFNfQ0tHUiApIDB4RkZGRkZDMjAgKSAgICAvKiAoQ0tHUikgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1BNQyAgICAgICAgICggKCBBVDkxUFNfUE1DICkgMHhGRkZGRkMwMCApICAgICAvKiAoUE1DKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfUlNUQyAgICAgICAgKCAoIEFUOTFQU19SU1RDICkgMHhGRkZGRkQwMCApICAgIC8qIChSU1RDKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfUlRUQyAgICAgICAgKCAoIEFUOTFQU19SVFRDICkgMHhGRkZGRkQyMCApICAgIC8qIChSVFRDKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfUElUQyAgICAgICAgKCAoIEFUOTFQU19QSVRDICkgMHhGRkZGRkQzMCApICAgIC8qIChQSVRDKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfV0RUQyAgICAgICAgKCAoIEFUOTFQU19XRFRDICkgMHhGRkZGRkQ0MCApICAgIC8qIChXRFRDKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfTUMgICAgICAgICAgKCAoIEFUOTFQU19NQyApIDB4RkZGRkZGMDAgKSAgICAgIC8qIChNQykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19TUEkgICAgICggKCBBVDkxUFNfUERDICkgMHhGRkZFMDEwMCApICAgICAvKiAoUERDX1NQSSkgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1NQSSAgICAgICAgICggKCBBVDkxUFNfU1BJICkgMHhGRkZFMDAwMCApICAgICAvKiAoU1BJKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfUERDX0FEQyAgICAgKCAoIEFUOTFQU19QREMgKSAweEZGRkQ4MTAwICkgICAgIC8qIChQRENfQURDKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfQURDICAgICAgICAgKCAoIEFUOTFQU19BREMgKSAweEZGRkQ4MDAwICkgICAgIC8qIChBREMpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfU1NDICAgICAoICggQVQ5MVBTX1BEQyApIDB4RkZGRDQxMDAgKSAgICAgLyogKFBEQ19TU0MpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9TU0MgICAgICAgICAoICggQVQ5MVBTX1NTQyApIDB4RkZGRDQwMDAgKSAgICAgLyogKFNTQykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19VUzEgICAgICggKCBBVDkxUFNfUERDICkgMHhGRkZDNDEwMCApICAgICAvKiAoUERDX1VTMSkgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1VTMSAgICAgICAgICggKCBBVDkxUFNfVVNBUlQgKSAweEZGRkM0MDAwICkgICAvKiAoVVMxKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfUERDX1VTMCAgICAgKCAoIEFUOTFQU19QREMgKSAweEZGRkMwMTAwICkgICAgIC8qIChQRENfVVMwKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfVVMwICAgICAgICAgKCAoIEFUOTFQU19VU0FSVCApIDB4RkZGQzAwMDAgKSAgIC8qIChVUzApIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9UV0kgICAgICAgICAoICggQVQ5MVBTX1RXSSApIDB4RkZGQjgwMDAgKSAgICAgLyogKFRXSSkgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1RDMiAgICAgICAgICggKCBBVDkxUFNfVEMgKSAweEZGRkEwMDgwICkgICAgICAvKiAoVEMyKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfVEMxICAgICAgICAgKCAoIEFUOTFQU19UQyApIDB4RkZGQTAwNDAgKSAgICAgIC8qIChUQzEpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9UQzAgICAgICAgICAoICggQVQ5MVBTX1RDICkgMHhGRkZBMDAwMCApICAgICAgLyogKFRDMCkgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1RDQiAgICAgICAgICggKCBBVDkxUFNfVENCICkgMHhGRkZBMDAwMCApICAgICAvKiAoVENCKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfUFdNQ19DSDMgICAgKCAoIEFUOTFQU19QV01DX0NIICkgMHhGRkZDQzI2MCApIC8qIChQV01DX0NIMykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1BXTUNfQ0gyICAgICggKCBBVDkxUFNfUFdNQ19DSCApIDB4RkZGQ0MyNDAgKSAvKiAoUFdNQ19DSDIpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9QV01DX0NIMSAgICAoICggQVQ5MVBTX1BXTUNfQ0ggKSAweEZGRkNDMjIwICkgLyogKFBXTUNfQ0gxKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfUFdNQ19DSDAgICAgKCAoIEFUOTFQU19QV01DX0NIICkgMHhGRkZDQzIwMCApIC8qIChQV01DX0NIMCkgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1BXTUMgICAgICAgICggKCBBVDkxUFNfUFdNQyApIDB4RkZGQ0MwMDAgKSAgICAvKiAoUFdNQykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1VEUCAgICAgICAgICggKCBBVDkxUFNfVURQICkgMHhGRkZCMDAwMCApICAgICAvKiAoVURQKSBCYXNlIEFkZHJlc3MgKi8NCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICAgQkFTRSBBRERSRVNTIERFRklOSVRJT05TIEZPUiBBVDkxU0FNN1M2NA0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorI2RlZmluZSBBVDkxQ19CQVNFX1NZU0MgICAgICAoKEFUOTFQU19TWVNDKSAJMHhGRkZGRjAwMCkgLy8gKFNZU0MpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9BSUMgICAgICAgKChBVDkxUFNfQUlDKSAJMHhGRkZGRjAwMCkgLy8gKEFJQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0RCR1UgICAgICAoKEFUOTFQU19EQkdVKSAJMHhGRkZGRjIwMCkgLy8gKERCR1UpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfREJHVSAgKChBVDkxUFNfUERDKSAJMHhGRkZGRjMwMCkgLy8gKFBEQ19EQkdVKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUElPQSAgICAgICgoQVQ5MVBTX1BJTykgCTB4RkZGRkY0MDApIC8vIChQSU9BKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfQ0tHUiAgICAgICgoQVQ5MVBTX0NLR1IpIAkweEZGRkZGQzIwKSAvLyAoQ0tHUikgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BNQyAgICAgICAoKEFUOTFQU19QTUMpIAkweEZGRkZGQzAwKSAvLyAoUE1DKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUlNUQyAgICAgICgoQVQ5MVBTX1JTVEMpIAkweEZGRkZGRDAwKSAvLyAoUlNUQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1JUVEMgICAgICAoKEFUOTFQU19SVFRDKSAJMHhGRkZGRkQyMCkgLy8gKFJUVEMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QSVRDICAgICAgKChBVDkxUFNfUElUQykgCTB4RkZGRkZEMzApIC8vIChQSVRDKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfV0RUQyAgICAgICgoQVQ5MVBTX1dEVEMpIAkweEZGRkZGRDQwKSAvLyAoV0RUQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX01DICAgICAgICAoKEFUOTFQU19NQykgCTB4RkZGRkZGMDApIC8vIChNQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19TUEkgICAoKEFUOTFQU19QREMpIAkweEZGRkUwMTAwKSAvLyAoUERDX1NQSSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1NQSSAgICAgICAoKEFUOTFQU19TUEkpIAkweEZGRkUwMDAwKSAvLyAoU1BJKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUERDX0FEQyAgICgoQVQ5MVBTX1BEQykgCTB4RkZGRDgxMDApIC8vIChQRENfQURDKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfQURDICAgICAgICgoQVQ5MVBTX0FEQykgCTB4RkZGRDgwMDApIC8vIChBREMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfU1NDICAgKChBVDkxUFNfUERDKSAJMHhGRkZENDEwMCkgLy8gKFBEQ19TU0MpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9TU0MgICAgICAgKChBVDkxUFNfU1NDKSAJMHhGRkZENDAwMCkgLy8gKFNTQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19VUzEgICAoKEFUOTFQU19QREMpIAkweEZGRkM0MTAwKSAvLyAoUERDX1VTMSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1VTMSAgICAgICAoKEFUOTFQU19VU0FSVCkgCTB4RkZGQzQwMDApIC8vIChVUzEpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfVVMwICAgKChBVDkxUFNfUERDKSAJMHhGRkZDMDEwMCkgLy8gKFBEQ19VUzApIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9VUzAgICAgICAgKChBVDkxUFNfVVNBUlQpIAkweEZGRkMwMDAwKSAvLyAoVVMwKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfVFdJICAgICAgICgoQVQ5MVBTX1RXSSkgCTB4RkZGQjgwMDApIC8vIChUV0kpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9UQzIgICAgICAgKChBVDkxUFNfVEMpIAkweEZGRkEwMDgwKSAvLyAoVEMyKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfVEMxICAgICAgICgoQVQ5MVBTX1RDKSAJMHhGRkZBMDA0MCkgLy8gKFRDMSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1RDMCAgICAgICAoKEFUOTFQU19UQykgCTB4RkZGQTAwMDApIC8vIChUQzApIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9UQ0IgICAgICAgKChBVDkxUFNfVENCKSAJMHhGRkZBMDAwMCkgLy8gKFRDQikgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BXTUNfQ0gzICAoKEFUOTFQU19QV01DX0NIKSAJMHhGRkZDQzI2MCkgLy8gKFBXTUNfQ0gzKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUFdNQ19DSDIgICgoQVQ5MVBTX1BXTUNfQ0gpIAkweEZGRkNDMjQwKSAvLyAoUFdNQ19DSDIpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QV01DX0NIMSAgKChBVDkxUFNfUFdNQ19DSCkgCTB4RkZGQ0MyMjApIC8vIChQV01DX0NIMSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BXTUNfQ0gwICAoKEFUOTFQU19QV01DX0NIKSAJMHhGRkZDQzIwMCkgLy8gKFBXTUNfQ0gwKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUFdNQyAgICAgICgoQVQ5MVBTX1BXTUMpIAkweEZGRkNDMDAwKSAvLyAoUFdNQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1VEUCAgICAgICAoKEFUOTFQU19VRFApIAkweEZGRkIwMDAwKSAvLyAoVURQKSBCYXNlIEFkZHJlc3MNCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICAgTUVNT1JZIE1BUFBJTkcgREVGSU5JVElPTlMgRk9SIEFUOTFTQU03UzY0ICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0jZGVmaW5lIEFUOTFDX0lTUkFNICAgICAgICAgICggKCBjaGFyICogKSAweDAwMjAwMDAwICkgICAgICAgLyogSW50ZXJuYWwgU1JBTSBiYXNlIGFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0lTUkFNX1NJWkUgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAwMDA0MDAwICkgLyogSW50ZXJuYWwgU1JBTSBzaXplIGluIGJ5dGUgKDE2IEtieXRlKSAqLw0KLSNkZWZpbmUgQVQ5MUNfSUZMQVNIICAgICAgICAgKCAoIGNoYXIgKiApIDB4MDAxMDAwMDAgKSAgICAgICAvKiBJbnRlcm5hbCBST00gYmFzZSBhZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19JRkxBU0hfU0laRSAgICAoICggdW5zaWduZWQgaW50ICkgMHgwMDAxMDAwMCApIC8qIEludGVybmFsIFJPTSBzaXplIGluIGJ5dGUgKDY0IEtieXRlKSAqLw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgICBNRU1PUlkgTUFQUElORyBERUZJTklUSU9OUyBGT1IgQVQ5MVNBTTdTNjQNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyNkZWZpbmUgQVQ5MUNfSVNSQU0JICgoY2hhciAqKSAJMHgwMDIwMDAwMCkgLy8gSW50ZXJuYWwgU1JBTSBiYXNlIGFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0lTUkFNX1NJWkUJICgodW5zaWduZWQgaW50KSAweDAwMDA0MDAwKSAvLyBJbnRlcm5hbCBTUkFNIHNpemUgaW4gYnl0ZSAoMTYgS2J5dGUpDQorI2RlZmluZSBBVDkxQ19JRkxBU0gJICgoY2hhciAqKSAJMHgwMDEwMDAwMCkgLy8gSW50ZXJuYWwgUk9NIGJhc2UgYWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfSUZMQVNIX1NJWkUJICgodW5zaWduZWQgaW50KSAweDAwMDEwMDAwKSAvLyBJbnRlcm5hbCBST00gc2l6ZSBpbiBieXRlICg2NCBLYnl0ZSkNCiANCi0jZW5kaWYgLyogaWZuZGVmIEFUOTFTQU03UzY0X0ggKi8NCisjZW5kaWYNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9JQVIvQXRtZWxTQU03UzY0L0FUOTFTQU03UzY0X2luYy5oIGIvcG9ydGFibGUvSUFSL0F0bWVsU0FNN1M2NC9BVDkxU0FNN1M2NF9pbmMuaAppbmRleCAyYzdhODk5Li43ZDI2NTdhIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9JQVIvQXRtZWxTQU03UzY0L0FUOTFTQU03UzY0X2luYy5oCisrKyBiL3BvcnRhYmxlL0lBUi9BdG1lbFNBTTdTNjQvQVQ5MVNBTTdTNjRfaW5jLmgKQEAgLTEsMTgxMCArMSwxODEyIEBACi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyogICAgICAgICAgQVRNRUwgTWljcm9jb250cm9sbGVyIFNvZnR3YXJlIFN1cHBvcnQgIC0gIFJPVVNTRVQgIC0gKi8NCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyogIFRoZSBzb2Z0d2FyZSBpcyBkZWxpdmVyZWQgIkFTIElTIiB3aXRob3V0IHdhcnJhbnR5IG9yIGNvbmRpdGlvbiBvZiBhbnkgKi8NCi0vKiAga2luZCwgZWl0aGVyIGV4cHJlc3MsIGltcGxpZWQgb3Igc3RhdHV0b3J5LiBUaGlzIGluY2x1ZGVzIHdpdGhvdXQgKi8NCi0vKiAgbGltaXRhdGlvbiBhbnkgd2FycmFudHkgb3IgY29uZGl0aW9uIHdpdGggcmVzcGVjdCB0byBtZXJjaGFudGFiaWxpdHkgb3IgKi8NCi0vKiAgZml0bmVzcyBmb3IgYW55IHBhcnRpY3VsYXIgcHVycG9zZSwgb3IgYWdhaW5zdCB0aGUgaW5mcmluZ2VtZW50cyBvZiAqLw0KLS8qICBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9mIG90aGVycy4gKi8NCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyogRmlsZSBOYW1lICAgICAgICAgICA6IEFUOTFTQU03UzY0LmggKi8NCi0vKiBPYmplY3QgICAgICAgICAgICAgIDogQVQ5MVNBTTdTNjQgZGVmaW5pdGlvbnMgKi8NCi0vKiBHZW5lcmF0ZWQgICAgICAgICAgIDogQVQ5MSBTVyBBcHBsaWNhdGlvbiBHcm91cCAgMDcvMTYvMjAwNCAoMDc6NDM6MDkpICovDQotLyogKi8NCi0vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL0FUOTFTQU03UzY0LnBsLzEuMTIvTW9uIEp1bCAxMiAxMzowMjozMCAyMDA0Ly8gKi8NCi0vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL1NZU0NfU0FNN1N4eC5wbC8xLjUvTW9uIEp1bCAxMiAxNjoyMjoxMiAyMDA0Ly8gKi8NCi0vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL01DX1NBTTAyLnBsLzEuMy9XZWQgTWFyIDEwIDA4OjM3OjA0IDIwMDQvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvVURQXzE3NjVCLnBsLzEuMy9GcmkgQXVnICAyIDE0OjQ1OjM4IDIwMDIvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvQUlDXzE3OTZCLnBsLzEuMS4xLjEvRnJpIEp1biAyOCAwOTozNjo0OCAyMDAyLy8gKi8NCi0vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9wbWNfU0FNLmgvMS42L1R1ZSBBcHIgMjcgMTM6NTM6NTIgMjAwNC8vICovDQotLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9QSU9fMTcyNUQucGwvMS4xLjEuMS9GcmkgSnVuIDI4IDA5OjM2OjQ4IDIwMDIvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvREJHVV8xNzU0QS5wbC8xLjQvRnJpIEphbiAzMSAxMjoxODoyNCAyMDAzLy8gKi8NCi0vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL1VTXzE3MzlDLnBsLzEuMi9Nb24gSnVsIDEyIDE3OjI2OjI0IDIwMDQvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvU1BJMi5wbC8xLjIvRnJpIE9jdCAxNyAwODoxMzo0MCAyMDAzLy8gKi8NCi0vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL1NTQ18xNzYyQS5wbC8xLjIvRnJpIE5vdiAgOCAxMzoyNjo0MCAyMDAyLy8gKi8NCi0vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl90Y18xNzUzYi5oLzEuMS9GcmkgSmFuIDMxIDEyOjIwOjAyIDIwMDMvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvVFdJXzE3NjFCLnBsLzEuNC9GcmkgRmViICA3IDEwOjMwOjA4IDIwMDMvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvUERDXzE3MzRCLnBsLzEuMi9UaHUgTm92IDIxIDE2OjM4OjI0IDIwMDIvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvQURDX1NBTS5wbC8xLjcvRnJpIE9jdCAxNyAwODoxMjozOCAyMDAzLy8gKi8NCi0vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9QV01fU0FNLmgvMS4zL1RodSBKYW4gMjIgMTA6MTA6NTAgMjAwNC8vICovDQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyAgICAgICAgICBBVE1FTCBNaWNyb2NvbnRyb2xsZXIgU29mdHdhcmUgU3VwcG9ydCAgLSAgUk9VU1NFVCAgLQ0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyAgVGhlIHNvZnR3YXJlIGlzIGRlbGl2ZXJlZCAiQVMgSVMiIHdpdGhvdXQgd2FycmFudHkgb3IgY29uZGl0aW9uIG9mIGFueQ0KKy8vICBraW5kLCBlaXRoZXIgZXhwcmVzcywgaW1wbGllZCBvciBzdGF0dXRvcnkuIFRoaXMgaW5jbHVkZXMgd2l0aG91dA0KKy8vICBsaW1pdGF0aW9uIGFueSB3YXJyYW50eSBvciBjb25kaXRpb24gd2l0aCByZXNwZWN0IHRvIG1lcmNoYW50YWJpbGl0eSBvcg0KKy8vICBmaXRuZXNzIGZvciBhbnkgcGFydGljdWxhciBwdXJwb3NlLCBvciBhZ2FpbnN0IHRoZSBpbmZyaW5nZW1lbnRzIG9mDQorLy8gIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb2Ygb3RoZXJzLg0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyBGaWxlIE5hbWUgICAgICAgICAgIDogQVQ5MVNBTTdTNjQuaA0KKy8vIE9iamVjdCAgICAgICAgICAgICAgOiBBVDkxU0FNN1M2NCBkZWZpbml0aW9ucw0KKy8vIEdlbmVyYXRlZCAgICAgICAgICAgOiBBVDkxIFNXIEFwcGxpY2F0aW9uIEdyb3VwICAwNy8xNi8yMDA0ICgwNzo0MzowOSkNCisvLyANCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL0FUOTFTQU03UzY0LnBsLzEuMTIvTW9uIEp1bCAxMiAxMzowMjozMCAyMDA0Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1NZU0NfU0FNN1N4eC5wbC8xLjUvTW9uIEp1bCAxMiAxNjoyMjoxMiAyMDA0Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL01DX1NBTTAyLnBsLzEuMy9XZWQgTWFyIDEwIDA4OjM3OjA0IDIwMDQvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvVURQXzE3NjVCLnBsLzEuMy9GcmkgQXVnICAyIDE0OjQ1OjM4IDIwMDIvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvQUlDXzE3OTZCLnBsLzEuMS4xLjEvRnJpIEp1biAyOCAwOTozNjo0OCAyMDAyLy8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9wbWNfU0FNLmgvMS42L1R1ZSBBcHIgMjcgMTM6NTM6NTIgMjAwNC8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9QSU9fMTcyNUQucGwvMS4xLjEuMS9GcmkgSnVuIDI4IDA5OjM2OjQ4IDIwMDIvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvREJHVV8xNzU0QS5wbC8xLjQvRnJpIEphbiAzMSAxMjoxODoyNCAyMDAzLy8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1VTXzE3MzlDLnBsLzEuMi9Nb24gSnVsIDEyIDE3OjI2OjI0IDIwMDQvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvU1BJMi5wbC8xLjIvRnJpIE9jdCAxNyAwODoxMzo0MCAyMDAzLy8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1NTQ18xNzYyQS5wbC8xLjIvRnJpIE5vdiAgOCAxMzoyNjo0MCAyMDAyLy8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl90Y18xNzUzYi5oLzEuMS9GcmkgSmFuIDMxIDEyOjIwOjAyIDIwMDMvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvVFdJXzE3NjFCLnBsLzEuNC9GcmkgRmViICA3IDEwOjMwOjA4IDIwMDMvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvUERDXzE3MzRCLnBsLzEuMi9UaHUgTm92IDIxIDE2OjM4OjI0IDIwMDIvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvQURDX1NBTS5wbC8xLjcvRnJpIE9jdCAxNyAwODoxMjozOCAyMDAzLy8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9QV01fU0FNLmgvMS4zL1RodSBKYW4gMjIgMTA6MTA6NTAgMjAwNC8vDQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIA0KLS8qIEhhcmR3YXJlIHJlZ2lzdGVyIGRlZmluaXRpb24gKi8NCisvLyBIYXJkd2FyZSByZWdpc3RlciBkZWZpbml0aW9uDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBTeXN0ZW0gUGVyaXBoZXJhbHMgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfU1lTQyBzdHJ1Y3R1cmUgKioqICovDQotI2RlZmluZSBTWVNDX0FJQ19TTVIgICAgICAgICAoIDAgKSAgICAgICAgLyogU291cmNlIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNZU0NfQUlDX1NWUiAgICAgICAgICggMTI4ICkgICAgICAvKiBTb3VyY2UgVmVjdG9yIFJlZ2lzdGVyICovDQotI2RlZmluZSBTWVNDX0FJQ19JVlIgICAgICAgICAoIDI1NiApICAgICAgLyogSVJRIFZlY3RvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1lTQ19BSUNfRlZSICAgICAgICAgKCAyNjAgKSAgICAgIC8qIEZJUSBWZWN0b3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNZU0NfQUlDX0lTUiAgICAgICAgICggMjY0ICkgICAgICAvKiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBTWVNDX0FJQ19JUFIgICAgICAgICAoIDI2OCApICAgICAgLyogSW50ZXJydXB0IFBlbmRpbmcgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNZU0NfQUlDX0lNUiAgICAgICAgICggMjcyICkgICAgICAvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1lTQ19BSUNfQ0lTUiAgICAgICAgKCAyNzYgKSAgICAgIC8qIENvcmUgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1lTQ19BSUNfSUVDUiAgICAgICAgKCAyODggKSAgICAgIC8qIEludGVycnVwdCBFbmFibGUgQ29tbWFuZCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1lTQ19BSUNfSURDUiAgICAgICAgKCAyOTIgKSAgICAgIC8qIEludGVycnVwdCBEaXNhYmxlIENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNZU0NfQUlDX0lDQ1IgICAgICAgICggMjk2ICkgICAgICAvKiBJbnRlcnJ1cHQgQ2xlYXIgQ29tbWFuZCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1lTQ19BSUNfSVNDUiAgICAgICAgKCAzMDAgKSAgICAgIC8qIEludGVycnVwdCBTZXQgQ29tbWFuZCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1lTQ19BSUNfRU9JQ1IgICAgICAgKCAzMDQgKSAgICAgIC8qIEVuZCBvZiBJbnRlcnJ1cHQgQ29tbWFuZCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1lTQ19BSUNfU1BVICAgICAgICAgKCAzMDggKSAgICAgIC8qIFNwdXJpb3VzIFZlY3RvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1lTQ19BSUNfRENSICAgICAgICAgKCAzMTIgKSAgICAgIC8qIERlYnVnIENvbnRyb2wgUmVnaXN0ZXIgKFByb3RlY3QpICovDQotI2RlZmluZSBTWVNDX0FJQ19GRkVSICAgICAgICAoIDMyMCApICAgICAgLyogRmFzdCBGb3JjaW5nIEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1lTQ19BSUNfRkZEUiAgICAgICAgKCAzMjQgKSAgICAgIC8qIEZhc3QgRm9yY2luZyBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBTWVNDX0FJQ19GRlNSICAgICAgICAoIDMyOCApICAgICAgLyogRmFzdCBGb3JjaW5nIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1lTQ19EQkdVX0NSICAgICAgICAgKCA1MTIgKSAgICAgIC8qIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNZU0NfREJHVV9NUiAgICAgICAgICggNTE2ICkgICAgICAvKiBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBTWVNDX0RCR1VfSUVSICAgICAgICAoIDUyMCApICAgICAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1lTQ19EQkdVX0lEUiAgICAgICAgKCA1MjQgKSAgICAgIC8qIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBTWVNDX0RCR1VfSU1SICAgICAgICAoIDUyOCApICAgICAgLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNZU0NfREJHVV9DU1IgICAgICAgICggNTMyICkgICAgICAvKiBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1lTQ19EQkdVX1JIUiAgICAgICAgKCA1MzYgKSAgICAgIC8qIFJlY2VpdmVyIEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNZU0NfREJHVV9USFIgICAgICAgICggNTQwICkgICAgICAvKiBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyICovDQotI2RlZmluZSBTWVNDX0RCR1VfQlJHUiAgICAgICAoIDU0NCApICAgICAgLyogQmF1ZCBSYXRlIEdlbmVyYXRvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1lTQ19EQkdVX0MxUiAgICAgICAgKCA1NzYgKSAgICAgIC8qIENoaXAgSUQxIFJlZ2lzdGVyICovDQotI2RlZmluZSBTWVNDX0RCR1VfQzJSICAgICAgICAoIDU4MCApICAgICAgLyogQ2hpcCBJRDIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNZU0NfREJHVV9GTlRSICAgICAgICggNTg0ICkgICAgICAvKiBGb3JjZSBOVFJTVCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1lTQ19EQkdVX1JQUiAgICAgICAgKCA3NjggKSAgICAgIC8qIFJlY2VpdmUgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1lTQ19EQkdVX1JDUiAgICAgICAgKCA3NzIgKSAgICAgIC8qIFJlY2VpdmUgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1lTQ19EQkdVX1RQUiAgICAgICAgKCA3NzYgKSAgICAgIC8qIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNZU0NfREJHVV9UQ1IgICAgICAgICggNzgwICkgICAgICAvKiBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBTWVNDX0RCR1VfUk5QUiAgICAgICAoIDc4NCApICAgICAgLyogUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNZU0NfREJHVV9STkNSICAgICAgICggNzg4ICkgICAgICAvKiBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1lTQ19EQkdVX1ROUFIgICAgICAgKCA3OTIgKSAgICAgIC8qIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1lTQ19EQkdVX1ROQ1IgICAgICAgKCA3OTYgKSAgICAgIC8qIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1lTQ19EQkdVX1BUQ1IgICAgICAgKCA4MDAgKSAgICAgIC8qIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBTWVNDX0RCR1VfUFRTUiAgICAgICAoIDgwNCApICAgICAgLyogUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1lTQ19QSU9BX1BFUiAgICAgICAgKCAxMDI0ICkgICAgIC8qIFBJTyBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNZU0NfUElPQV9QRFIgICAgICAgICggMTAyOCApICAgICAvKiBQSU8gRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1lTQ19QSU9BX1BTUiAgICAgICAgKCAxMDMyICkgICAgIC8qIFBJTyBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNZU0NfUElPQV9PRVIgICAgICAgICggMTA0MCApICAgICAvKiBPdXRwdXQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBTWVNDX1BJT0FfT0RSICAgICAgICAoIDEwNDQgKSAgICAgLyogT3V0cHV0IERpc2FibGUgUmVnaXN0ZXJyICovDQotI2RlZmluZSBTWVNDX1BJT0FfT1NSICAgICAgICAoIDEwNDggKSAgICAgLyogT3V0cHV0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1lTQ19QSU9BX0lGRVIgICAgICAgKCAxMDU2ICkgICAgIC8qIElucHV0IEZpbHRlciBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNZU0NfUElPQV9JRkRSICAgICAgICggMTA2MCApICAgICAvKiBJbnB1dCBGaWx0ZXIgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1lTQ19QSU9BX0lGU1IgICAgICAgKCAxMDY0ICkgICAgIC8qIElucHV0IEZpbHRlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNZU0NfUElPQV9TT0RSICAgICAgICggMTA3MiApICAgICAvKiBTZXQgT3V0cHV0IERhdGEgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNZU0NfUElPQV9DT0RSICAgICAgICggMTA3NiApICAgICAvKiBDbGVhciBPdXRwdXQgRGF0YSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1lTQ19QSU9BX09EU1IgICAgICAgKCAxMDgwICkgICAgIC8qIE91dHB1dCBEYXRhIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1lTQ19QSU9BX1BEU1IgICAgICAgKCAxMDg0ICkgICAgIC8qIFBpbiBEYXRhIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1lTQ19QSU9BX0lFUiAgICAgICAgKCAxMDg4ICkgICAgIC8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNZU0NfUElPQV9JRFIgICAgICAgICggMTA5MiApICAgICAvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1lTQ19QSU9BX0lNUiAgICAgICAgKCAxMDk2ICkgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBTWVNDX1BJT0FfSVNSICAgICAgICAoIDExMDAgKSAgICAgLyogSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1lTQ19QSU9BX01ERVIgICAgICAgKCAxMTA0ICkgICAgIC8qIE11bHRpLWRyaXZlciBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNZU0NfUElPQV9NRERSICAgICAgICggMTEwOCApICAgICAvKiBNdWx0aS1kcml2ZXIgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1lTQ19QSU9BX01EU1IgICAgICAgKCAxMTEyICkgICAgIC8qIE11bHRpLWRyaXZlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNZU0NfUElPQV9QUFVEUiAgICAgICggMTEyMCApICAgICAvKiBQdWxsLXVwIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNZU0NfUElPQV9QUFVFUiAgICAgICggMTEyNCApICAgICAvKiBQdWxsLXVwIEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1lTQ19QSU9BX1BQVVNSICAgICAgKCAxMTI4ICkgICAgIC8qIFBhZCBQdWxsLXVwIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1lTQ19QSU9BX0FTUiAgICAgICAgKCAxMTM2ICkgICAgIC8qIFNlbGVjdCBBIFJlZ2lzdGVyICovDQotI2RlZmluZSBTWVNDX1BJT0FfQlNSICAgICAgICAoIDExNDAgKSAgICAgLyogU2VsZWN0IEIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNZU0NfUElPQV9BQlNSICAgICAgICggMTE0NCApICAgICAvKiBBQiBTZWxlY3QgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBTWVNDX1BJT0FfT1dFUiAgICAgICAoIDExODQgKSAgICAgLyogT3V0cHV0IFdyaXRlIEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1lTQ19QSU9BX09XRFIgICAgICAgKCAxMTg4ICkgICAgIC8qIE91dHB1dCBXcml0ZSBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBTWVNDX1BJT0FfT1dTUiAgICAgICAoIDExOTIgKSAgICAgLyogT3V0cHV0IFdyaXRlIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1lTQ19QTUNfU0NFUiAgICAgICAgKCAzMDcyICkgICAgIC8qIFN5c3RlbSBDbG9jayBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNZU0NfUE1DX1NDRFIgICAgICAgICggMzA3NiApICAgICAvKiBTeXN0ZW0gQ2xvY2sgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1lTQ19QTUNfU0NTUiAgICAgICAgKCAzMDgwICkgICAgIC8qIFN5c3RlbSBDbG9jayBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNZU0NfUE1DX1BDRVIgICAgICAgICggMzA4OCApICAgICAvKiBQZXJpcGhlcmFsIENsb2NrIEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1lTQ19QTUNfUENEUiAgICAgICAgKCAzMDkyICkgICAgIC8qIFBlcmlwaGVyYWwgQ2xvY2sgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1lTQ19QTUNfUENTUiAgICAgICAgKCAzMDk2ICkgICAgIC8qIFBlcmlwaGVyYWwgQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBTWVNDX1BNQ19NT1IgICAgICAgICAoIDMxMDQgKSAgICAgLyogTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyICovDQotI2RlZmluZSBTWVNDX1BNQ19NQ0ZSICAgICAgICAoIDMxMDggKSAgICAgLyogTWFpbiBDbG9jayAgRnJlcXVlbmN5IFJlZ2lzdGVyICovDQotI2RlZmluZSBTWVNDX1BNQ19QTExSICAgICAgICAoIDMxMTYgKSAgICAgLyogUExMIFJlZ2lzdGVyICovDQotI2RlZmluZSBTWVNDX1BNQ19NQ0tSICAgICAgICAoIDMxMjAgKSAgICAgLyogTWFzdGVyIENsb2NrIFJlZ2lzdGVyICovDQotI2RlZmluZSBTWVNDX1BNQ19QQ0tSICAgICAgICAoIDMxMzYgKSAgICAgLyogUHJvZ3JhbW1hYmxlIENsb2NrIFJlZ2lzdGVyICovDQotI2RlZmluZSBTWVNDX1BNQ19JRVIgICAgICAgICAoIDMxNjggKSAgICAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1lTQ19QTUNfSURSICAgICAgICAgKCAzMTcyICkgICAgIC8qIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBTWVNDX1BNQ19TUiAgICAgICAgICAoIDMxNzYgKSAgICAgLyogU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBTWVNDX1BNQ19JTVIgICAgICAgICAoIDMxODAgKSAgICAgLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNZU0NfUlNUQ19SQ1IgICAgICAgICggMzMyOCApICAgICAvKiBSZXNldCBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBTWVNDX1JTVENfUlNSICAgICAgICAoIDMzMzIgKSAgICAgLyogUmVzZXQgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBTWVNDX1JTVENfUk1SICAgICAgICAoIDMzMzYgKSAgICAgLyogUmVzZXQgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1lTQ19SVFRDX1JUTVIgICAgICAgKCAzMzYwICkgICAgIC8qIFJlYWwtdGltZSBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBTWVNDX1JUVENfUlRBUiAgICAgICAoIDMzNjQgKSAgICAgLyogUmVhbC10aW1lIEFsYXJtIFJlZ2lzdGVyICovDQotI2RlZmluZSBTWVNDX1JUVENfUlRWUiAgICAgICAoIDMzNjggKSAgICAgLyogUmVhbC10aW1lIFZhbHVlIFJlZ2lzdGVyICovDQotI2RlZmluZSBTWVNDX1JUVENfUlRTUiAgICAgICAoIDMzNzIgKSAgICAgLyogUmVhbC10aW1lIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1lTQ19QSVRDX1BJTVIgICAgICAgKCAzMzc2ICkgICAgIC8qIFBlcmlvZCBJbnRlcnZhbCBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBTWVNDX1BJVENfUElTUiAgICAgICAoIDMzODAgKSAgICAgLyogUGVyaW9kIEludGVydmFsIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1lTQ19QSVRDX1BJVlIgICAgICAgKCAzMzg0ICkgICAgIC8qIFBlcmlvZCBJbnRlcnZhbCBWYWx1ZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1lTQ19QSVRDX1BJSVIgICAgICAgKCAzMzg4ICkgICAgIC8qIFBlcmlvZCBJbnRlcnZhbCBJbWFnZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1lTQ19XRFRDX1dEQ1IgICAgICAgKCAzMzkyICkgICAgIC8qIFdhdGNoZG9nIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNZU0NfV0RUQ19XRE1SICAgICAgICggMzM5NiApICAgICAvKiBXYXRjaGRvZyBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBTWVNDX1dEVENfV0RTUiAgICAgICAoIDM0MDAgKSAgICAgLyogV2F0Y2hkb2cgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBTWVNDX1NZU0NfVlJQTSAgICAgICAoIDM0MjQgKSAgICAgLyogVm9sdGFnZSBSZWd1bGF0b3IgUG93ZXIgTW9kZSBSZWdpc3RlciAqLw0KLS8qIC0tLS0tLS0tIFZSUE0gOiAoU1lTQyBPZmZzZXQ6IDB4ZDYwKSBWb2x0YWdlIFJlZ3VsYXRvciBQb3dlciBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19TWVNDX1BTVERCWSAgICAoIDB4MSA8PCAwICkgLyogKFNZU0MpIFZvbHRhZ2UgUmVndWxhdG9yIFBvd2VyIE1vZGUgKi8NCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFN5c3RlbSBQZXJpcGhlcmFscw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19TWVNDIHN0cnVjdHVyZSAqKioNCisjZGVmaW5lIFNZU0NfQUlDX1NNUiAgICAoIDApIC8vIFNvdXJjZSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBTWVNDX0FJQ19TVlIgICAgKDEyOCkgLy8gU291cmNlIFZlY3RvciBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19BSUNfSVZSICAgICgyNTYpIC8vIElSUSBWZWN0b3IgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfQUlDX0ZWUiAgICAoMjYwKSAvLyBGSVEgVmVjdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBTWVNDX0FJQ19JU1IgICAgKDI2NCkgLy8gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19BSUNfSVBSICAgICgyNjgpIC8vIEludGVycnVwdCBQZW5kaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBTWVNDX0FJQ19JTVIgICAgKDI3MikgLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfQUlDX0NJU1IgICAoMjc2KSAvLyBDb3JlIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfQUlDX0lFQ1IgICAoMjg4KSAvLyBJbnRlcnJ1cHQgRW5hYmxlIENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfQUlDX0lEQ1IgICAoMjkyKSAvLyBJbnRlcnJ1cHQgRGlzYWJsZSBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBTWVNDX0FJQ19JQ0NSICAgKDI5NikgLy8gSW50ZXJydXB0IENsZWFyIENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfQUlDX0lTQ1IgICAoMzAwKSAvLyBJbnRlcnJ1cHQgU2V0IENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfQUlDX0VPSUNSICAoMzA0KSAvLyBFbmQgb2YgSW50ZXJydXB0IENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfQUlDX1NQVSAgICAoMzA4KSAvLyBTcHVyaW91cyBWZWN0b3IgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfQUlDX0RDUiAgICAoMzEyKSAvLyBEZWJ1ZyBDb250cm9sIFJlZ2lzdGVyIChQcm90ZWN0KQ0KKyNkZWZpbmUgU1lTQ19BSUNfRkZFUiAgICgzMjApIC8vIEZhc3QgRm9yY2luZyBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfQUlDX0ZGRFIgICAoMzI0KSAvLyBGYXN0IEZvcmNpbmcgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19BSUNfRkZTUiAgICgzMjgpIC8vIEZhc3QgRm9yY2luZyBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfREJHVV9DUiAgICAoNTEyKSAvLyBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBTWVNDX0RCR1VfTVIgICAgKDUxNikgLy8gTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19EQkdVX0lFUiAgICg1MjApIC8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfREJHVV9JRFIgICAoNTI0KSAvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19EQkdVX0lNUiAgICg1MjgpIC8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBTWVNDX0RCR1VfQ1NSICAgKDUzMikgLy8gQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfREJHVV9SSFIgICAoNTM2KSAvLyBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBTWVNDX0RCR1VfVEhSICAgKDU0MCkgLy8gVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19EQkdVX0JSR1IgICg1NDQpIC8vIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfREJHVV9DMVIgICAoNTc2KSAvLyBDaGlwIElEMSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19EQkdVX0MyUiAgICg1ODApIC8vIENoaXAgSUQyIFJlZ2lzdGVyDQorI2RlZmluZSBTWVNDX0RCR1VfRk5UUiAgKDU4NCkgLy8gRm9yY2UgTlRSU1QgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfREJHVV9SUFIgICAoNzY4KSAvLyBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfREJHVV9SQ1IgICAoNzcyKSAvLyBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfREJHVV9UUFIgICAoNzc2KSAvLyBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBTWVNDX0RCR1VfVENSICAgKDc4MCkgLy8gVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19EQkdVX1JOUFIgICg3ODQpIC8vIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBTWVNDX0RCR1VfUk5DUiAgKDc4OCkgLy8gUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfREJHVV9UTlBSICAoNzkyKSAvLyBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfREJHVV9UTkNSICAoNzk2KSAvLyBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfREJHVV9QVENSICAoODAwKSAvLyBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19EQkdVX1BUU1IgICg4MDQpIC8vIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfUElPQV9QRVIgICAoMTAyNCkgLy8gUElPIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19QSU9BX1BEUiAgICgxMDI4KSAvLyBQSU8gRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19QSU9BX1BTUiAgICgxMDMyKSAvLyBQSU8gU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBTWVNDX1BJT0FfT0VSICAgKDEwNDApIC8vIE91dHB1dCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfUElPQV9PRFIgICAoMTA0NCkgLy8gT3V0cHV0IERpc2FibGUgUmVnaXN0ZXJyDQorI2RlZmluZSBTWVNDX1BJT0FfT1NSICAgKDEwNDgpIC8vIE91dHB1dCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfUElPQV9JRkVSICAoMTA1NikgLy8gSW5wdXQgRmlsdGVyIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19QSU9BX0lGRFIgICgxMDYwKSAvLyBJbnB1dCBGaWx0ZXIgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19QSU9BX0lGU1IgICgxMDY0KSAvLyBJbnB1dCBGaWx0ZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBTWVNDX1BJT0FfU09EUiAgKDEwNzIpIC8vIFNldCBPdXRwdXQgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19QSU9BX0NPRFIgICgxMDc2KSAvLyBDbGVhciBPdXRwdXQgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19QSU9BX09EU1IgICgxMDgwKSAvLyBPdXRwdXQgRGF0YSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfUElPQV9QRFNSICAoMTA4NCkgLy8gUGluIERhdGEgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBTWVNDX1BJT0FfSUVSICAgKDEwODgpIC8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfUElPQV9JRFIgICAoMTA5MikgLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfUElPQV9JTVIgICAoMTA5NikgLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfUElPQV9JU1IgICAoMTEwMCkgLy8gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19QSU9BX01ERVIgICgxMTA0KSAvLyBNdWx0aS1kcml2ZXIgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBTWVNDX1BJT0FfTUREUiAgKDExMDgpIC8vIE11bHRpLWRyaXZlciBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBTWVNDX1BJT0FfTURTUiAgKDExMTIpIC8vIE11bHRpLWRyaXZlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfUElPQV9QUFVEUiAoMTEyMCkgLy8gUHVsbC11cCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBTWVNDX1BJT0FfUFBVRVIgKDExMjQpIC8vIFB1bGwtdXAgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBTWVNDX1BJT0FfUFBVU1IgKDExMjgpIC8vIFBhZCBQdWxsLXVwIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19QSU9BX0FTUiAgICgxMTM2KSAvLyBTZWxlY3QgQSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19QSU9BX0JTUiAgICgxMTQwKSAvLyBTZWxlY3QgQiBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19QSU9BX0FCU1IgICgxMTQ0KSAvLyBBQiBTZWxlY3QgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBTWVNDX1BJT0FfT1dFUiAgKDExODQpIC8vIE91dHB1dCBXcml0ZSBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfUElPQV9PV0RSICAoMTE4OCkgLy8gT3V0cHV0IFdyaXRlIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfUElPQV9PV1NSICAoMTE5MikgLy8gT3V0cHV0IFdyaXRlIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19QTUNfU0NFUiAgICgzMDcyKSAvLyBTeXN0ZW0gQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBTWVNDX1BNQ19TQ0RSICAgKDMwNzYpIC8vIFN5c3RlbSBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBTWVNDX1BNQ19TQ1NSICAgKDMwODApIC8vIFN5c3RlbSBDbG9jayBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfUE1DX1BDRVIgICAoMzA4OCkgLy8gUGVyaXBoZXJhbCBDbG9jayBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfUE1DX1BDRFIgICAoMzA5MikgLy8gUGVyaXBoZXJhbCBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBTWVNDX1BNQ19QQ1NSICAgKDMwOTYpIC8vIFBlcmlwaGVyYWwgQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBTWVNDX1BNQ19NT1IgICAgKDMxMDQpIC8vIE1haW4gT3NjaWxsYXRvciBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19QTUNfTUNGUiAgICgzMTA4KSAvLyBNYWluIENsb2NrICBGcmVxdWVuY3kgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfUE1DX1BMTFIgICAoMzExNikgLy8gUExMIFJlZ2lzdGVyDQorI2RlZmluZSBTWVNDX1BNQ19NQ0tSICAgKDMxMjApIC8vIE1hc3RlciBDbG9jayBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19QTUNfUENLUiAgICgzMTM2KSAvLyBQcm9ncmFtbWFibGUgQ2xvY2sgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfUE1DX0lFUiAgICAoMzE2OCkgLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19QTUNfSURSICAgICgzMTcyKSAvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19QTUNfU1IgICAgICgzMTc2KSAvLyBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfUE1DX0lNUiAgICAoMzE4MCkgLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfUlNUQ19SQ1IgICAoMzMyOCkgLy8gUmVzZXQgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19SU1RDX1JTUiAgICgzMzMyKSAvLyBSZXNldCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfUlNUQ19STVIgICAoMzMzNikgLy8gUmVzZXQgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19SVFRDX1JUTVIgICgzMzYwKSAvLyBSZWFsLXRpbWUgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19SVFRDX1JUQVIgICgzMzY0KSAvLyBSZWFsLXRpbWUgQWxhcm0gUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfUlRUQ19SVFZSICAoMzM2OCkgLy8gUmVhbC10aW1lIFZhbHVlIFJlZ2lzdGVyDQorI2RlZmluZSBTWVNDX1JUVENfUlRTUiAgKDMzNzIpIC8vIFJlYWwtdGltZSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfUElUQ19QSU1SICAoMzM3NikgLy8gUGVyaW9kIEludGVydmFsIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfUElUQ19QSVNSICAoMzM4MCkgLy8gUGVyaW9kIEludGVydmFsIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19QSVRDX1BJVlIgICgzMzg0KSAvLyBQZXJpb2QgSW50ZXJ2YWwgVmFsdWUgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfUElUQ19QSUlSICAoMzM4OCkgLy8gUGVyaW9kIEludGVydmFsIEltYWdlIFJlZ2lzdGVyDQorI2RlZmluZSBTWVNDX1dEVENfV0RDUiAgKDMzOTIpIC8vIFdhdGNoZG9nIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfV0RUQ19XRE1SICAoMzM5NikgLy8gV2F0Y2hkb2cgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1lTQ19XRFRDX1dEU1IgICgzNDAwKSAvLyBXYXRjaGRvZyBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFNZU0NfU1lTQ19WUlBNICAoMzQyNCkgLy8gVm9sdGFnZSBSZWd1bGF0b3IgUG93ZXIgTW9kZSBSZWdpc3Rlcg0KKy8vIC0tLS0tLS0tIFZSUE0gOiAoU1lTQyBPZmZzZXQ6IDB4ZDYwKSBWb2x0YWdlIFJlZ3VsYXRvciBQb3dlciBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19QU1REQlkgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoU1lTQykgVm9sdGFnZSBSZWd1bGF0b3IgUG93ZXIgTW9kZQ0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfQUlDIHN0cnVjdHVyZSAqKiogKi8NCi0jZGVmaW5lIEFJQ19TTVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMCApICAgICAgICAvKiBTb3VyY2UgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQUlDX1NWUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAxMjggKSAgICAgIC8qIFNvdXJjZSBWZWN0b3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFJQ19JVlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMjU2ICkgICAgICAvKiBJUlEgVmVjdG9yIFJlZ2lzdGVyICovDQotI2RlZmluZSBBSUNfRlZSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDI2MCApICAgICAgLyogRklRIFZlY3RvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQUlDX0lTUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAyNjQgKSAgICAgIC8qIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFJQ19JUFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMjY4ICkgICAgICAvKiBJbnRlcnJ1cHQgUGVuZGluZyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQUlDX0lNUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAyNzIgKSAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBSUNfQ0lTUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDI3NiApICAgICAgLyogQ29yZSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBSUNfSUVDUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDI4OCApICAgICAgLyogSW50ZXJydXB0IEVuYWJsZSBDb21tYW5kIFJlZ2lzdGVyICovDQotI2RlZmluZSBBSUNfSURDUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDI5MiApICAgICAgLyogSW50ZXJydXB0IERpc2FibGUgQ29tbWFuZCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQUlDX0lDQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAyOTYgKSAgICAgIC8qIEludGVycnVwdCBDbGVhciBDb21tYW5kIFJlZ2lzdGVyICovDQotI2RlZmluZSBBSUNfSVNDUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDMwMCApICAgICAgLyogSW50ZXJydXB0IFNldCBDb21tYW5kIFJlZ2lzdGVyICovDQotI2RlZmluZSBBSUNfRU9JQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDMwNCApICAgICAgLyogRW5kIG9mIEludGVycnVwdCBDb21tYW5kIFJlZ2lzdGVyICovDQotI2RlZmluZSBBSUNfU1BVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDMwOCApICAgICAgLyogU3B1cmlvdXMgVmVjdG9yIFJlZ2lzdGVyICovDQotI2RlZmluZSBBSUNfRENSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDMxMiApICAgICAgLyogRGVidWcgQ29udHJvbCBSZWdpc3RlciAoUHJvdGVjdCkgKi8NCi0jZGVmaW5lIEFJQ19GRkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMzIwICkgICAgICAvKiBGYXN0IEZvcmNpbmcgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBSUNfRkZEUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDMyNCApICAgICAgLyogRmFzdCBGb3JjaW5nIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFJQ19GRlNSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMzI4ICkgICAgICAvKiBGYXN0IEZvcmNpbmcgU3RhdHVzIFJlZ2lzdGVyICovDQotLyogLS0tLS0tLS0gQUlDX1NNUiA6IChBSUMgT2Zmc2V0OiAweDApIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19QUklPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMHg3IDw8IDAgKSAvKiAoQUlDKSBQcmlvcml0eSBMZXZlbCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FJQ19QUklPUl9MT1dFU1QgICAgICAgICAgICAgICAgICAgKCAweDAgKSAgICAgIC8qIChBSUMpIExvd2VzdCBwcmlvcml0eSBsZXZlbCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FJQ19QUklPUl9ISUdIRVNUICAgICAgICAgICAgICAgICAgKCAweDcgKSAgICAgIC8qIChBSUMpIEhpZ2hlc3QgcHJpb3JpdHkgbGV2ZWwgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19TUkNUWVBFICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMHgzIDw8IDUgKSAvKiAoQUlDKSBJbnRlcnJ1cHQgU291cmNlIFR5cGUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BSUNfU1JDVFlQRV9JTlRfTEVWRUxfU0VOU0lUSVZFICAgICggMHgwIDw8IDUgKSAvKiAoQUlDKSBJbnRlcm5hbCBTb3VyY2VzIENvZGUgTGFiZWwgTGV2ZWwgU2Vuc2l0aXZlICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUlDX1NSQ1RZUEVfSU5UX0VER0VfVFJJR0dFUkVEICAgICAoIDB4MSA8PCA1ICkgLyogKEFJQykgSW50ZXJuYWwgU291cmNlcyBDb2RlIExhYmVsIEVkZ2UgdHJpZ2dlcmVkICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUlDX1NSQ1RZUEVfRVhUX0hJR0hfTEVWRUwgICAgICAgICAoIDB4MiA8PCA1ICkgLyogKEFJQykgRXh0ZXJuYWwgU291cmNlcyBDb2RlIExhYmVsIEhpZ2gtbGV2ZWwgU2Vuc2l0aXZlICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUlDX1NSQ1RZUEVfRVhUX1BPU0lUSVZFX0VER0UgICAgICAoIDB4MyA8PCA1ICkgLyogKEFJQykgRXh0ZXJuYWwgU291cmNlcyBDb2RlIExhYmVsIFBvc2l0aXZlIEVkZ2UgdHJpZ2dlcmVkICovDQotLyogLS0tLS0tLS0gQUlDX0NJU1IgOiAoQUlDIE9mZnNldDogMHgxMTQpIEFJQyBDb3JlIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19ORklRICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDAgKSAvKiAoQUlDKSBORklRIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX05JUlEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMSApIC8qIChBSUMpIE5JUlEgU3RhdHVzICovDQotLyogLS0tLS0tLS0gQUlDX0RDUiA6IChBSUMgT2Zmc2V0OiAweDEzOCkgQUlDIERlYnVnIENvbnRyb2wgUmVnaXN0ZXIgKFByb3RlY3QpIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19BSUNfRENSX1BST1QgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAwICkgLyogKEFJQykgUHJvdGVjdGlvbiBNb2RlICovDQotI2RlZmluZSBBVDkxQ19BSUNfRENSX0dNU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxICkgLyogKEFJQykgR2VuZXJhbCBNYXNrICovDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlcg0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19BSUMgc3RydWN0dXJlICoqKg0KKyNkZWZpbmUgQUlDX1NNUiAgICAgICAgICggMCkgLy8gU291cmNlIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFJQ19TVlIgICAgICAgICAoMTI4KSAvLyBTb3VyY2UgVmVjdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBSUNfSVZSICAgICAgICAgKDI1NikgLy8gSVJRIFZlY3RvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQUlDX0ZWUiAgICAgICAgICgyNjApIC8vIEZJUSBWZWN0b3IgUmVnaXN0ZXINCisjZGVmaW5lIEFJQ19JU1IgICAgICAgICAoMjY0KSAvLyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBSUNfSVBSICAgICAgICAgKDI2OCkgLy8gSW50ZXJydXB0IFBlbmRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFJQ19JTVIgICAgICAgICAoMjcyKSAvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQUlDX0NJU1IgICAgICAgICgyNzYpIC8vIENvcmUgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQUlDX0lFQ1IgICAgICAgICgyODgpIC8vIEludGVycnVwdCBFbmFibGUgQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQUlDX0lEQ1IgICAgICAgICgyOTIpIC8vIEludGVycnVwdCBEaXNhYmxlIENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIEFJQ19JQ0NSICAgICAgICAoMjk2KSAvLyBJbnRlcnJ1cHQgQ2xlYXIgQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQUlDX0lTQ1IgICAgICAgICgzMDApIC8vIEludGVycnVwdCBTZXQgQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQUlDX0VPSUNSICAgICAgICgzMDQpIC8vIEVuZCBvZiBJbnRlcnJ1cHQgQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQUlDX1NQVSAgICAgICAgICgzMDgpIC8vIFNwdXJpb3VzIFZlY3RvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQUlDX0RDUiAgICAgICAgICgzMTIpIC8vIERlYnVnIENvbnRyb2wgUmVnaXN0ZXIgKFByb3RlY3QpDQorI2RlZmluZSBBSUNfRkZFUiAgICAgICAgKDMyMCkgLy8gRmFzdCBGb3JjaW5nIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQUlDX0ZGRFIgICAgICAgICgzMjQpIC8vIEZhc3QgRm9yY2luZyBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBSUNfRkZTUiAgICAgICAgKDMyOCkgLy8gRmFzdCBGb3JjaW5nIFN0YXR1cyBSZWdpc3Rlcg0KKy8vIC0tLS0tLS0tIEFJQ19TTVIgOiAoQUlDIE9mZnNldDogMHgwKSBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQUlDX1BSSU9SICAgICAgICAgICAoMHg3IDw8ICAwKSAvLyAoQUlDKSBQcmlvcml0eSBMZXZlbA0KKyNkZWZpbmUgCUFUOTFDX0FJQ19QUklPUl9MT1dFU1QgICAgICAgICAgICAgICAoMHgwKSAvLyAoQUlDKSBMb3dlc3QgcHJpb3JpdHkgbGV2ZWwNCisjZGVmaW5lIAlBVDkxQ19BSUNfUFJJT1JfSElHSEVTVCAgICAgICAgICAgICAgKDB4NykgLy8gKEFJQykgSGlnaGVzdCBwcmlvcml0eSBsZXZlbA0KKyNkZWZpbmUgQVQ5MUNfQUlDX1NSQ1RZUEUgICAgICAgICAoMHgzIDw8ICA1KSAvLyAoQUlDKSBJbnRlcnJ1cHQgU291cmNlIFR5cGUNCisjZGVmaW5lIAlBVDkxQ19BSUNfU1JDVFlQRV9JTlRfTEVWRUxfU0VOU0lUSVZFICAoMHgwIDw8ICA1KSAvLyAoQUlDKSBJbnRlcm5hbCBTb3VyY2VzIENvZGUgTGFiZWwgTGV2ZWwgU2Vuc2l0aXZlDQorI2RlZmluZSAJQVQ5MUNfQUlDX1NSQ1RZUEVfSU5UX0VER0VfVFJJR0dFUkVEICAgKDB4MSA8PCAgNSkgLy8gKEFJQykgSW50ZXJuYWwgU291cmNlcyBDb2RlIExhYmVsIEVkZ2UgdHJpZ2dlcmVkDQorI2RlZmluZSAJQVQ5MUNfQUlDX1NSQ1RZUEVfRVhUX0hJR0hfTEVWRUwgICAgICAgKDB4MiA8PCAgNSkgLy8gKEFJQykgRXh0ZXJuYWwgU291cmNlcyBDb2RlIExhYmVsIEhpZ2gtbGV2ZWwgU2Vuc2l0aXZlDQorI2RlZmluZSAJQVQ5MUNfQUlDX1NSQ1RZUEVfRVhUX1BPU0lUSVZFX0VER0UgICAgKDB4MyA8PCAgNSkgLy8gKEFJQykgRXh0ZXJuYWwgU291cmNlcyBDb2RlIExhYmVsIFBvc2l0aXZlIEVkZ2UgdHJpZ2dlcmVkDQorLy8gLS0tLS0tLS0gQUlDX0NJU1IgOiAoQUlDIE9mZnNldDogMHgxMTQpIEFJQyBDb3JlIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BSUNfTkZJUSAgICAgICAgICAgICgweDEgPDwgIDApIC8vIChBSUMpIE5GSVEgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19BSUNfTklSUSAgICAgICAgICAgICgweDEgPDwgIDEpIC8vIChBSUMpIE5JUlEgU3RhdHVzDQorLy8gLS0tLS0tLS0gQUlDX0RDUiA6IChBSUMgT2Zmc2V0OiAweDEzOCkgQUlDIERlYnVnIENvbnRyb2wgUmVnaXN0ZXIgKFByb3RlY3QpIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQUlDX0RDUl9QUk9UICAgICAgICAoMHgxIDw8ICAwKSAvLyAoQUlDKSBQcm90ZWN0aW9uIE1vZGUNCisjZGVmaW5lIEFUOTFDX0FJQ19EQ1JfR01TSyAgICAgICAgKDB4MSA8PCAgMSkgLy8gKEFJQykgR2VuZXJhbCBNYXNrDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBEZWJ1ZyBVbml0ICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX0RCR1Ugc3RydWN0dXJlICoqKiAqLw0KLSNkZWZpbmUgREJHVV9DUiAgICAgICAgICAgICAgICAgICAgICAgICggMCApICAgICAgICAgLyogQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgREJHVV9NUiAgICAgICAgICAgICAgICAgICAgICAgICggNCApICAgICAgICAgLyogTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgREJHVV9JRVIgICAgICAgICAgICAgICAgICAgICAgICggOCApICAgICAgICAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgREJHVV9JRFIgICAgICAgICAgICAgICAgICAgICAgICggMTIgKSAgICAgICAgLyogSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIERCR1VfSU1SICAgICAgICAgICAgICAgICAgICAgICAoIDE2ICkgICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBEQkdVX0NTUiAgICAgICAgICAgICAgICAgICAgICAgKCAyMCApICAgICAgICAvKiBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgREJHVV9SSFIgICAgICAgICAgICAgICAgICAgICAgICggMjQgKSAgICAgICAgLyogUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgREJHVV9USFIgICAgICAgICAgICAgICAgICAgICAgICggMjggKSAgICAgICAgLyogVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgREJHVV9CUkdSICAgICAgICAgICAgICAgICAgICAgICggMzIgKSAgICAgICAgLyogQmF1ZCBSYXRlIEdlbmVyYXRvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgREJHVV9DMVIgICAgICAgICAgICAgICAgICAgICAgICggNjQgKSAgICAgICAgLyogQ2hpcCBJRDEgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIERCR1VfQzJSICAgICAgICAgICAgICAgICAgICAgICAoIDY4ICkgICAgICAgIC8qIENoaXAgSUQyIFJlZ2lzdGVyICovDQotI2RlZmluZSBEQkdVX0ZOVFIgICAgICAgICAgICAgICAgICAgICAgKCA3MiApICAgICAgICAvKiBGb3JjZSBOVFJTVCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgREJHVV9SUFIgICAgICAgICAgICAgICAgICAgICAgICggMjU2ICkgICAgICAgLyogUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBEQkdVX1JDUiAgICAgICAgICAgICAgICAgICAgICAgKCAyNjAgKSAgICAgICAvKiBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIERCR1VfVFBSICAgICAgICAgICAgICAgICAgICAgICAoIDI2NCApICAgICAgIC8qIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIERCR1VfVENSICAgICAgICAgICAgICAgICAgICAgICAoIDI2OCApICAgICAgIC8qIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIERCR1VfUk5QUiAgICAgICAgICAgICAgICAgICAgICAoIDI3MiApICAgICAgIC8qIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBEQkdVX1JOQ1IgICAgICAgICAgICAgICAgICAgICAgKCAyNzYgKSAgICAgICAvKiBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgREJHVV9UTlBSICAgICAgICAgICAgICAgICAgICAgICggMjgwICkgICAgICAgLyogVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBEQkdVX1ROQ1IgICAgICAgICAgICAgICAgICAgICAgKCAyODQgKSAgICAgICAvKiBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIERCR1VfUFRDUiAgICAgICAgICAgICAgICAgICAgICAoIDI4OCApICAgICAgIC8qIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBEQkdVX1BUU1IgICAgICAgICAgICAgICAgICAgICAgKCAyOTIgKSAgICAgICAvKiBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotLyogLS0tLS0tLS0gREJHVV9DUiA6IChEQkdVIE9mZnNldDogMHgwKSBEZWJ1ZyBVbml0IENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1JTVFJYICAgICAgICAgICAgICAgICAoIDB4MSA8PCAyICkgIC8qIChEQkdVKSBSZXNldCBSZWNlaXZlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfUlNUVFggICAgICAgICAgICAgICAgICggMHgxIDw8IDMgKSAgLyogKERCR1UpIFJlc2V0IFRyYW5zbWl0dGVyICovDQotI2RlZmluZSBBVDkxQ19VU19SWEVOICAgICAgICAgICAgICAgICAgKCAweDEgPDwgNCApICAvKiAoREJHVSkgUmVjZWl2ZXIgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19VU19SWERJUyAgICAgICAgICAgICAgICAgKCAweDEgPDwgNSApICAvKiAoREJHVSkgUmVjZWl2ZXIgRGlzYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfVFhFTiAgICAgICAgICAgICAgICAgICggMHgxIDw8IDYgKSAgLyogKERCR1UpIFRyYW5zbWl0dGVyIEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfVFhESVMgICAgICAgICAgICAgICAgICggMHgxIDw8IDcgKSAgLyogKERCR1UpIFRyYW5zbWl0dGVyIERpc2FibGUgKi8NCi0vKiAtLS0tLS0tLSBEQkdVX01SIDogKERCR1UgT2Zmc2V0OiAweDQpIERlYnVnIFVuaXQgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfUEFSICAgICAgICAgICAgICAgICAgICggMHg3IDw8IDkgKSAgLyogKERCR1UpIFBhcml0eSB0eXBlICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfUEFSX0VWRU4gICAgICAgICAgKCAweDAgPDwgOSApICAvKiAoREJHVSkgRXZlbiBQYXJpdHkgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19QQVJfT0REICAgICAgICAgICAoIDB4MSA8PCA5ICkgIC8qIChEQkdVKSBPZGQgUGFyaXR5ICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfUEFSX1NQQUNFICAgICAgICAgKCAweDIgPDwgOSApICAvKiAoREJHVSkgUGFyaXR5IGZvcmNlZCB0byAwIChTcGFjZSkgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19QQVJfTUFSSyAgICAgICAgICAoIDB4MyA8PCA5ICkgIC8qIChEQkdVKSBQYXJpdHkgZm9yY2VkIHRvIDEgKE1hcmspICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfUEFSX05PTkUgICAgICAgICAgKCAweDQgPDwgOSApICAvKiAoREJHVSkgTm8gUGFyaXR5ICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfUEFSX01VTFRJX0RST1AgICAgKCAweDYgPDwgOSApICAvKiAoREJHVSkgTXVsdGktZHJvcCBtb2RlICovDQotI2RlZmluZSBBVDkxQ19VU19DSE1PREUgICAgICAgICAgICAgICAgKCAweDMgPDwgMTQgKSAvKiAoREJHVSkgQ2hhbm5lbCBNb2RlICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfQ0hNT0RFX05PUk1BTCAgICAgKCAweDAgPDwgMTQgKSAvKiAoREJHVSkgTm9ybWFsIE1vZGU6IFRoZSBVU0FSVCBjaGFubmVsIG9wZXJhdGVzIGFzIGFuIFJYL1RYIFVTQVJULiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX0NITU9ERV9BVVRPICAgICAgICggMHgxIDw8IDE0ICkgLyogKERCR1UpIEF1dG9tYXRpYyBFY2hvOiBSZWNlaXZlciBEYXRhIElucHV0IGlzIGNvbm5lY3RlZCB0byB0aGUgVFhEIHBpbi4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19DSE1PREVfTE9DQUwgICAgICAoIDB4MiA8PCAxNCApIC8qIChEQkdVKSBMb2NhbCBMb29wYmFjazogVHJhbnNtaXR0ZXIgT3V0cHV0IFNpZ25hbCBpcyBjb25uZWN0ZWQgdG8gUmVjZWl2ZXIgSW5wdXQgU2lnbmFsLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX0NITU9ERV9SRU1PVEUgICAgICggMHgzIDw8IDE0ICkgLyogKERCR1UpIFJlbW90ZSBMb29wYmFjazogUlhEIHBpbiBpcyBpbnRlcm5hbGx5IGNvbm5lY3RlZCB0byBUWEQgcGluLiAqLw0KLS8qIC0tLS0tLS0tIERCR1VfSUVSIDogKERCR1UgT2Zmc2V0OiAweDgpIERlYnVnIFVuaXQgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfUlhSRFkgICAgICAgICAgICAgICAgICggMHgxIDw8IDAgKSAgLyogKERCR1UpIFJYUkRZIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfVFhSRFkgICAgICAgICAgICAgICAgICggMHgxIDw8IDEgKSAgLyogKERCR1UpIFRYUkRZIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfRU5EUlggICAgICAgICAgICAgICAgICggMHgxIDw8IDMgKSAgLyogKERCR1UpIEVuZCBvZiBSZWNlaXZlIFRyYW5zZmVyIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfRU5EVFggICAgICAgICAgICAgICAgICggMHgxIDw8IDQgKSAgLyogKERCR1UpIEVuZCBvZiBUcmFuc21pdCBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX09WUkUgICAgICAgICAgICAgICAgICAoIDB4MSA8PCA1ICkgIC8qIChEQkdVKSBPdmVycnVuIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfRlJBTUUgICAgICAgICAgICAgICAgICggMHgxIDw8IDYgKSAgLyogKERCR1UpIEZyYW1pbmcgRXJyb3IgSW50ZXJydXB0ICovDQotI2RlZmluZSBBVDkxQ19VU19QQVJFICAgICAgICAgICAgICAgICAgKCAweDEgPDwgNyApICAvKiAoREJHVSkgUGFyaXR5IEVycm9yIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfVFhFTVBUWSAgICAgICAgICAgICAgICggMHgxIDw8IDkgKSAgLyogKERCR1UpIFRYRU1QVFkgSW50ZXJydXB0ICovDQotI2RlZmluZSBBVDkxQ19VU19UWEJVRkUgICAgICAgICAgICAgICAgKCAweDEgPDwgMTEgKSAvKiAoREJHVSkgVFhCVUZFIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfUlhCVUZGICAgICAgICAgICAgICAgICggMHgxIDw8IDEyICkgLyogKERCR1UpIFJYQlVGRiBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX0NPTU1fVFggICAgICAgICAgICAgICAoIDB4MSA8PCAzMCApIC8qIChEQkdVKSBDT01NX1RYIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfQ09NTV9SWCAgICAgICAgICAgICAgICggMHgxIDw8IDMxICkgLyogKERCR1UpIENPTU1fUlggSW50ZXJydXB0ICovDQotLyogLS0tLS0tLS0gREJHVV9JRFIgOiAoREJHVSBPZmZzZXQ6IDB4YykgRGVidWcgVW5pdCBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIERCR1VfSU1SIDogKERCR1UgT2Zmc2V0OiAweDEwKSBEZWJ1ZyBVbml0IEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gREJHVV9DU1IgOiAoREJHVSBPZmZzZXQ6IDB4MTQpIERlYnVnIFVuaXQgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBEQkdVX0ZOVFIgOiAoREJHVSBPZmZzZXQ6IDB4NDgpIERlYnVnIFVuaXQgRk9SQ0VfTlRSU1QgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1VTX0ZPUkNFX05UUlNUICAgICggMHgxIDw8IDAgKSAgLyogKERCR1UpIEZvcmNlIE5UUlNUIGluIEpUQUcgKi8NCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIERlYnVnIFVuaXQNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfREJHVSBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBEQkdVX0NSICAgICAgICAgKCAwKSAvLyBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBEQkdVX01SICAgICAgICAgKCA0KSAvLyBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBEQkdVX0lFUiAgICAgICAgKCA4KSAvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBEQkdVX0lEUiAgICAgICAgKDEyKSAvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgREJHVV9JTVIgICAgICAgICgxNikgLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIERCR1VfQ1NSICAgICAgICAoMjApIC8vIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBEQkdVX1JIUiAgICAgICAgKDI0KSAvLyBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBEQkdVX1RIUiAgICAgICAgKDI4KSAvLyBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBEQkdVX0JSR1IgICAgICAgKDMyKSAvLyBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBEQkdVX0MxUiAgICAgICAgKDY0KSAvLyBDaGlwIElEMSBSZWdpc3Rlcg0KKyNkZWZpbmUgREJHVV9DMlIgICAgICAgICg2OCkgLy8gQ2hpcCBJRDIgUmVnaXN0ZXINCisjZGVmaW5lIERCR1VfRk5UUiAgICAgICAoNzIpIC8vIEZvcmNlIE5UUlNUIFJlZ2lzdGVyDQorI2RlZmluZSBEQkdVX1JQUiAgICAgICAgKDI1NikgLy8gUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBEQkdVX1JDUiAgICAgICAgKDI2MCkgLy8gUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBEQkdVX1RQUiAgICAgICAgKDI2NCkgLy8gVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgREJHVV9UQ1IgICAgICAgICgyNjgpIC8vIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIERCR1VfUk5QUiAgICAgICAoMjcyKSAvLyBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgREJHVV9STkNSICAgICAgICgyNzYpIC8vIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBEQkdVX1ROUFIgICAgICAgKDI4MCkgLy8gVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBEQkdVX1ROQ1IgICAgICAgKDI4NCkgLy8gVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBEQkdVX1BUQ1IgICAgICAgKDI4OCkgLy8gUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIERCR1VfUFRTUiAgICAgICAoMjkyKSAvLyBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorLy8gLS0tLS0tLS0gREJHVV9DUiA6IChEQkdVIE9mZnNldDogMHgwKSBEZWJ1ZyBVbml0IENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VU19SU1RSWCAgICAgICAgICAgICgweDEgPDwgIDIpIC8vIChEQkdVKSBSZXNldCBSZWNlaXZlcg0KKyNkZWZpbmUgQVQ5MUNfVVNfUlNUVFggICAgICAgICAgICAoMHgxIDw8ICAzKSAvLyAoREJHVSkgUmVzZXQgVHJhbnNtaXR0ZXINCisjZGVmaW5lIEFUOTFDX1VTX1JYRU4gICAgICAgICAgICAgKDB4MSA8PCAgNCkgLy8gKERCR1UpIFJlY2VpdmVyIEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfUlhESVMgICAgICAgICAgICAoMHgxIDw8ICA1KSAvLyAoREJHVSkgUmVjZWl2ZXIgRGlzYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfVFhFTiAgICAgICAgICAgICAoMHgxIDw8ICA2KSAvLyAoREJHVSkgVHJhbnNtaXR0ZXIgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19VU19UWERJUyAgICAgICAgICAgICgweDEgPDwgIDcpIC8vIChEQkdVKSBUcmFuc21pdHRlciBEaXNhYmxlDQorLy8gLS0tLS0tLS0gREJHVV9NUiA6IChEQkdVIE9mZnNldDogMHg0KSBEZWJ1ZyBVbml0IE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VU19QQVIgICAgICAgICAgICAgICgweDcgPDwgIDkpIC8vIChEQkdVKSBQYXJpdHkgdHlwZQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1BBUl9FVkVOICAgICAgICAgICAgICAgICAoMHgwIDw8ICA5KSAvLyAoREJHVSkgRXZlbiBQYXJpdHkNCisjZGVmaW5lIAlBVDkxQ19VU19QQVJfT0REICAgICAgICAgICAgICAgICAgKDB4MSA8PCAgOSkgLy8gKERCR1UpIE9kZCBQYXJpdHkNCisjZGVmaW5lIAlBVDkxQ19VU19QQVJfU1BBQ0UgICAgICAgICAgICAgICAgKDB4MiA8PCAgOSkgLy8gKERCR1UpIFBhcml0eSBmb3JjZWQgdG8gMCAoU3BhY2UpDQorI2RlZmluZSAJQVQ5MUNfVVNfUEFSX01BUksgICAgICAgICAgICAgICAgICgweDMgPDwgIDkpIC8vIChEQkdVKSBQYXJpdHkgZm9yY2VkIHRvIDEgKE1hcmspDQorI2RlZmluZSAJQVQ5MUNfVVNfUEFSX05PTkUgICAgICAgICAgICAgICAgICgweDQgPDwgIDkpIC8vIChEQkdVKSBObyBQYXJpdHkNCisjZGVmaW5lIAlBVDkxQ19VU19QQVJfTVVMVElfRFJPUCAgICAgICAgICAgKDB4NiA8PCAgOSkgLy8gKERCR1UpIE11bHRpLWRyb3AgbW9kZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfQ0hNT0RFICAgICAgICAgICAoMHgzIDw8IDE0KSAvLyAoREJHVSkgQ2hhbm5lbCBNb2RlDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0hNT0RFX05PUk1BTCAgICAgICAgICAgICAgICgweDAgPDwgMTQpIC8vIChEQkdVKSBOb3JtYWwgTW9kZTogVGhlIFVTQVJUIGNoYW5uZWwgb3BlcmF0ZXMgYXMgYW4gUlgvVFggVVNBUlQuDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0hNT0RFX0FVVE8gICAgICAgICAgICAgICAgICgweDEgPDwgMTQpIC8vIChEQkdVKSBBdXRvbWF0aWMgRWNobzogUmVjZWl2ZXIgRGF0YSBJbnB1dCBpcyBjb25uZWN0ZWQgdG8gdGhlIFRYRCBwaW4uDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0hNT0RFX0xPQ0FMICAgICAgICAgICAgICAgICgweDIgPDwgMTQpIC8vIChEQkdVKSBMb2NhbCBMb29wYmFjazogVHJhbnNtaXR0ZXIgT3V0cHV0IFNpZ25hbCBpcyBjb25uZWN0ZWQgdG8gUmVjZWl2ZXIgSW5wdXQgU2lnbmFsLg0KKyNkZWZpbmUgCUFUOTFDX1VTX0NITU9ERV9SRU1PVEUgICAgICAgICAgICAgICAoMHgzIDw8IDE0KSAvLyAoREJHVSkgUmVtb3RlIExvb3BiYWNrOiBSWEQgcGluIGlzIGludGVybmFsbHkgY29ubmVjdGVkIHRvIFRYRCBwaW4uDQorLy8gLS0tLS0tLS0gREJHVV9JRVIgOiAoREJHVSBPZmZzZXQ6IDB4OCkgRGVidWcgVW5pdCBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVVNfUlhSRFkgICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoREJHVSkgUlhSRFkgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19UWFJEWSAgICAgICAgICAgICgweDEgPDwgIDEpIC8vIChEQkdVKSBUWFJEWSBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX0VORFJYICAgICAgICAgICAgKDB4MSA8PCAgMykgLy8gKERCR1UpIEVuZCBvZiBSZWNlaXZlIFRyYW5zZmVyIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfRU5EVFggICAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoREJHVSkgRW5kIG9mIFRyYW5zbWl0IEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfT1ZSRSAgICAgICAgICAgICAoMHgxIDw8ICA1KSAvLyAoREJHVSkgT3ZlcnJ1biBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX0ZSQU1FICAgICAgICAgICAgKDB4MSA8PCAgNikgLy8gKERCR1UpIEZyYW1pbmcgRXJyb3IgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19QQVJFICAgICAgICAgICAgICgweDEgPDwgIDcpIC8vIChEQkdVKSBQYXJpdHkgRXJyb3IgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19UWEVNUFRZICAgICAgICAgICgweDEgPDwgIDkpIC8vIChEQkdVKSBUWEVNUFRZIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfVFhCVUZFICAgICAgICAgICAoMHgxIDw8IDExKSAvLyAoREJHVSkgVFhCVUZFIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfUlhCVUZGICAgICAgICAgICAoMHgxIDw8IDEyKSAvLyAoREJHVSkgUlhCVUZGIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfQ09NTV9UWCAgICAgICAgICAoMHgxIDw8IDMwKSAvLyAoREJHVSkgQ09NTV9UWCBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX0NPTU1fUlggICAgICAgICAgKDB4MSA8PCAzMSkgLy8gKERCR1UpIENPTU1fUlggSW50ZXJydXB0DQorLy8gLS0tLS0tLS0gREJHVV9JRFIgOiAoREJHVSBPZmZzZXQ6IDB4YykgRGVidWcgVW5pdCBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBEQkdVX0lNUiA6IChEQkdVIE9mZnNldDogMHgxMCkgRGVidWcgVW5pdCBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBEQkdVX0NTUiA6IChEQkdVIE9mZnNldDogMHgxNCkgRGVidWcgVW5pdCBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBEQkdVX0ZOVFIgOiAoREJHVSBPZmZzZXQ6IDB4NDgpIERlYnVnIFVuaXQgRk9SQ0VfTlRSU1QgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VU19GT1JDRV9OVFJTVCAgICAgICgweDEgPDwgIDApIC8vIChEQkdVKSBGb3JjZSBOVFJTVCBpbiBKVEFHDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQZXJpcGhlcmFsIERhdGEgQ29udHJvbGxlciAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19QREMgc3RydWN0dXJlICoqKiAqLw0KLSNkZWZpbmUgUERDX1JQUiAgICAgICAgICAgICAoIDAgKSAgICAgICAgLyogUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBQRENfUkNSICAgICAgICAgICAgICggNCApICAgICAgICAvKiBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBEQ19UUFIgICAgICAgICAgICAgKCA4ICkgICAgICAgIC8qIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBEQ19UQ1IgICAgICAgICAgICAgKCAxMiApICAgICAgIC8qIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBEQ19STlBSICAgICAgICAgICAgKCAxNiApICAgICAgIC8qIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBQRENfUk5DUiAgICAgICAgICAgICggMjAgKSAgICAgICAvKiBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUERDX1ROUFIgICAgICAgICAgICAoIDI0ICkgICAgICAgLyogVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBQRENfVE5DUiAgICAgICAgICAgICggMjggKSAgICAgICAvKiBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBEQ19QVENSICAgICAgICAgICAgKCAzMiApICAgICAgIC8qIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBQRENfUFRTUiAgICAgICAgICAgICggMzYgKSAgICAgICAvKiBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotLyogLS0tLS0tLS0gUERDX1BUQ1IgOiAoUERDIE9mZnNldDogMHgyMCkgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1BEQ19SWFRFTiAgICAgKCAweDEgPDwgMCApIC8qIChQREMpIFJlY2VpdmVyIFRyYW5zZmVyIEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfUERDX1JYVERJUyAgICAoIDB4MSA8PCAxICkgLyogKFBEQykgUmVjZWl2ZXIgVHJhbnNmZXIgRGlzYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfUERDX1RYVEVOICAgICAoIDB4MSA8PCA4ICkgLyogKFBEQykgVHJhbnNtaXR0ZXIgVHJhbnNmZXIgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19QRENfVFhURElTICAgICggMHgxIDw8IDkgKSAvKiAoUERDKSBUcmFuc21pdHRlciBUcmFuc2ZlciBEaXNhYmxlICovDQotLyogLS0tLS0tLS0gUERDX1BUU1IgOiAoUERDIE9mZnNldDogMHgyNCkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUGVyaXBoZXJhbCBEYXRhIENvbnRyb2xsZXINCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfUERDIHN0cnVjdHVyZSAqKioNCisjZGVmaW5lIFBEQ19SUFIgICAgICAgICAoIDApIC8vIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgUERDX1JDUiAgICAgICAgICggNCkgLy8gUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBQRENfVFBSICAgICAgICAgKCA4KSAvLyBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBQRENfVENSICAgICAgICAgKDEyKSAvLyBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBQRENfUk5QUiAgICAgICAgKDE2KSAvLyBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgUERDX1JOQ1IgICAgICAgICgyMCkgLy8gUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFBEQ19UTlBSICAgICAgICAoMjQpIC8vIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgUERDX1ROQ1IgICAgICAgICgyOCkgLy8gVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBQRENfUFRDUiAgICAgICAgKDMyKSAvLyBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgUERDX1BUU1IgICAgICAgICgzNikgLy8gUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKy8vIC0tLS0tLS0tIFBEQ19QVENSIDogKFBEQyBPZmZzZXQ6IDB4MjApIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUERDX1JYVEVOICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoUERDKSBSZWNlaXZlciBUcmFuc2ZlciBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1BEQ19SWFRESVMgICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKFBEQykgUmVjZWl2ZXIgVHJhbnNmZXIgRGlzYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfUERDX1RYVEVOICAgICAgICAgICAoMHgxIDw8ICA4KSAvLyAoUERDKSBUcmFuc21pdHRlciBUcmFuc2ZlciBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1BEQ19UWFRESVMgICAgICAgICAgKDB4MSA8PCAgOSkgLy8gKFBEQykgVHJhbnNtaXR0ZXIgVHJhbnNmZXIgRGlzYWJsZQ0KKy8vIC0tLS0tLS0tIFBEQ19QVFNSIDogKFBEQyBPZmZzZXQ6IDB4MjQpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQYXJhbGxlbCBJbnB1dCBPdXRwdXQgQ29udHJvbGVyICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1BJTyBzdHJ1Y3R1cmUgKioqICovDQotI2RlZmluZSBQSU9fUEVSICAgICAgKCAwICkgICAvKiBQSU8gRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBQSU9fUERSICAgICAgKCA0ICkgICAvKiBQSU8gRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUElPX1BTUiAgICAgICggOCApICAgLyogUElPIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUElPX09FUiAgICAgICggMTYgKSAgLyogT3V0cHV0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUElPX09EUiAgICAgICggMjAgKSAgLyogT3V0cHV0IERpc2FibGUgUmVnaXN0ZXJyICovDQotI2RlZmluZSBQSU9fT1NSICAgICAgKCAyNCApICAvKiBPdXRwdXQgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBQSU9fSUZFUiAgICAgKCAzMiApICAvKiBJbnB1dCBGaWx0ZXIgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBQSU9fSUZEUiAgICAgKCAzNiApICAvKiBJbnB1dCBGaWx0ZXIgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUElPX0lGU1IgICAgICggNDAgKSAgLyogSW5wdXQgRmlsdGVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUElPX1NPRFIgICAgICggNDggKSAgLyogU2V0IE91dHB1dCBEYXRhIFJlZ2lzdGVyICovDQotI2RlZmluZSBQSU9fQ09EUiAgICAgKCA1MiApICAvKiBDbGVhciBPdXRwdXQgRGF0YSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUElPX09EU1IgICAgICggNTYgKSAgLyogT3V0cHV0IERhdGEgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBQSU9fUERTUiAgICAgKCA2MCApICAvKiBQaW4gRGF0YSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBJT19JRVIgICAgICAoIDY0ICkgIC8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBJT19JRFIgICAgICAoIDY4ICkgIC8qIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBQSU9fSU1SICAgICAgKCA3MiApICAvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUElPX0lTUiAgICAgICggNzYgKSAgLyogSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUElPX01ERVIgICAgICggODAgKSAgLyogTXVsdGktZHJpdmVyIEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUElPX01ERFIgICAgICggODQgKSAgLyogTXVsdGktZHJpdmVyIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBJT19NRFNSICAgICAoIDg4ICkgIC8qIE11bHRpLWRyaXZlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBJT19QUFVEUiAgICAoIDk2ICkgIC8qIFB1bGwtdXAgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUElPX1BQVUVSICAgICggMTAwICkgLyogUHVsbC11cCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBJT19QUFVTUiAgICAoIDEwNCApIC8qIFBhZCBQdWxsLXVwIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUElPX0FTUiAgICAgICggMTEyICkgLyogU2VsZWN0IEEgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBJT19CU1IgICAgICAoIDExNiApIC8qIFNlbGVjdCBCIFJlZ2lzdGVyICovDQotI2RlZmluZSBQSU9fQUJTUiAgICAgKCAxMjAgKSAvKiBBQiBTZWxlY3QgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBQSU9fT1dFUiAgICAgKCAxNjAgKSAvKiBPdXRwdXQgV3JpdGUgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBQSU9fT1dEUiAgICAgKCAxNjQgKSAvKiBPdXRwdXQgV3JpdGUgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUElPX09XU1IgICAgICggMTY4ICkgLyogT3V0cHV0IFdyaXRlIFN0YXR1cyBSZWdpc3RlciAqLw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUGFyYWxsZWwgSW5wdXQgT3V0cHV0IENvbnRyb2xlcg0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19QSU8gc3RydWN0dXJlICoqKg0KKyNkZWZpbmUgUElPX1BFUiAgICAgICAgICggMCkgLy8gUElPIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX1BEUiAgICAgICAgICggNCkgLy8gUElPIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIFBJT19QU1IgICAgICAgICAoIDgpIC8vIFBJTyBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFBJT19PRVIgICAgICAgICAoMTYpIC8vIE91dHB1dCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFBJT19PRFIgICAgICAgICAoMjApIC8vIE91dHB1dCBEaXNhYmxlIFJlZ2lzdGVycg0KKyNkZWZpbmUgUElPX09TUiAgICAgICAgICgyNCkgLy8gT3V0cHV0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX0lGRVIgICAgICAgICgzMikgLy8gSW5wdXQgRmlsdGVyIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX0lGRFIgICAgICAgICgzNikgLy8gSW5wdXQgRmlsdGVyIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIFBJT19JRlNSICAgICAgICAoNDApIC8vIElucHV0IEZpbHRlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFBJT19TT0RSICAgICAgICAoNDgpIC8vIFNldCBPdXRwdXQgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX0NPRFIgICAgICAgICg1MikgLy8gQ2xlYXIgT3V0cHV0IERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIFBJT19PRFNSICAgICAgICAoNTYpIC8vIE91dHB1dCBEYXRhIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX1BEU1IgICAgICAgICg2MCkgLy8gUGluIERhdGEgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBQSU9fSUVSICAgICAgICAgKDY0KSAvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBQSU9fSURSICAgICAgICAgKDY4KSAvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX0lNUiAgICAgICAgICg3MikgLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIFBJT19JU1IgICAgICAgICAoNzYpIC8vIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFBJT19NREVSICAgICAgICAoODApIC8vIE11bHRpLWRyaXZlciBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFBJT19NRERSICAgICAgICAoODQpIC8vIE11bHRpLWRyaXZlciBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBQSU9fTURTUiAgICAgICAgKDg4KSAvLyBNdWx0aS1kcml2ZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBQSU9fUFBVRFIgICAgICAgKDk2KSAvLyBQdWxsLXVwIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIFBJT19QUFVFUiAgICAgICAoMTAwKSAvLyBQdWxsLXVwIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX1BQVVNSICAgICAgICgxMDQpIC8vIFBhZCBQdWxsLXVwIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX0FTUiAgICAgICAgICgxMTIpIC8vIFNlbGVjdCBBIFJlZ2lzdGVyDQorI2RlZmluZSBQSU9fQlNSICAgICAgICAgKDExNikgLy8gU2VsZWN0IEIgUmVnaXN0ZXINCisjZGVmaW5lIFBJT19BQlNSICAgICAgICAoMTIwKSAvLyBBQiBTZWxlY3QgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBQSU9fT1dFUiAgICAgICAgKDE2MCkgLy8gT3V0cHV0IFdyaXRlIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX09XRFIgICAgICAgICgxNjQpIC8vIE91dHB1dCBXcml0ZSBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBQSU9fT1dTUiAgICAgICAgKDE2OCkgLy8gT3V0cHV0IFdyaXRlIFN0YXR1cyBSZWdpc3Rlcg0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQ2xvY2sgR2VuZXJhdG9yIENvbnRyb2xlciAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19DS0dSIHN0cnVjdHVyZSAqKiogKi8NCi0jZGVmaW5lIENLR1JfTU9SICAgICAgICAgICAgICAgICAgICAgKCAwICkgICAgICAgICAgIC8qIE1haW4gT3NjaWxsYXRvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQ0tHUl9NQ0ZSICAgICAgICAgICAgICAgICAgICAoIDQgKSAgICAgICAgICAgLyogTWFpbiBDbG9jayAgRnJlcXVlbmN5IFJlZ2lzdGVyICovDQotI2RlZmluZSBDS0dSX1BMTFIgICAgICAgICAgICAgICAgICAgICggMTIgKSAgICAgICAgICAvKiBQTEwgUmVnaXN0ZXIgKi8NCi0vKiAtLS0tLS0tLSBDS0dSX01PUiA6IChDS0dSIE9mZnNldDogMHgwKSBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0NLR1JfTU9TQ0VOICAgICAgICAgICAgKCAweDEgPDwgMCApICAgIC8qIChDS0dSKSBNYWluIE9zY2lsbGF0b3IgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19DS0dSX09TQ0JZUEFTUyAgICAgICAgICggMHgxIDw8IDEgKSAgICAvKiAoQ0tHUikgTWFpbiBPc2NpbGxhdG9yIEJ5cGFzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0tHUl9PU0NPVU5UICAgICAgICAgICAoIDB4RkYgPDwgOCApICAgLyogKENLR1IpIE1haW4gT3NjaWxsYXRvciBTdGFydC11cCBUaW1lICovDQotLyogLS0tLS0tLS0gQ0tHUl9NQ0ZSIDogKENLR1IgT2Zmc2V0OiAweDQpIE1haW4gQ2xvY2sgRnJlcXVlbmN5IFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19DS0dSX01BSU5GICAgICAgICAgICAgICggMHhGRkZGIDw8IDAgKSAvKiAoQ0tHUikgTWFpbiBDbG9jayBGcmVxdWVuY3kgKi8NCi0jZGVmaW5lIEFUOTFDX0NLR1JfTUFJTlJEWSAgICAgICAgICAgKCAweDEgPDwgMTYgKSAgIC8qIChDS0dSKSBNYWluIENsb2NrIFJlYWR5ICovDQotLyogLS0tLS0tLS0gQ0tHUl9QTExSIDogKENLR1IgT2Zmc2V0OiAweGMpIFBMTCBCIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19DS0dSX0RJViAgICAgICAgICAgICAgICggMHhGRiA8PCAwICkgICAvKiAoQ0tHUikgRGl2aWRlciBTZWxlY3RlZCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0NLR1JfRElWXzAgICAgICAgICAoIDB4MCApICAgICAgICAgLyogKENLR1IpIERpdmlkZXIgb3V0cHV0IGlzIDAgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19DS0dSX0RJVl9CWVBBU1MgICAgKCAweDEgKSAgICAgICAgIC8qIChDS0dSKSBEaXZpZGVyIGlzIGJ5cGFzc2VkICovDQotI2RlZmluZSBBVDkxQ19DS0dSX1BMTENPVU5UICAgICAgICAgICggMHgzRiA8PCA4ICkgICAvKiAoQ0tHUikgUExMIENvdW50ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NLR1JfT1VUICAgICAgICAgICAgICAgKCAweDMgPDwgMTQgKSAgIC8qIChDS0dSKSBQTEwgT3V0cHV0IEZyZXF1ZW5jeSBSYW5nZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0NLR1JfT1VUXzAgICAgICAgICAoIDB4MCA8PCAxNCApICAgLyogKENLR1IpIFBsZWFzZSByZWZlciB0byB0aGUgUExMIGRhdGFzaGVldCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0NLR1JfT1VUXzEgICAgICAgICAoIDB4MSA8PCAxNCApICAgLyogKENLR1IpIFBsZWFzZSByZWZlciB0byB0aGUgUExMIGRhdGFzaGVldCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0NLR1JfT1VUXzIgICAgICAgICAoIDB4MiA8PCAxNCApICAgLyogKENLR1IpIFBsZWFzZSByZWZlciB0byB0aGUgUExMIGRhdGFzaGVldCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0NLR1JfT1VUXzMgICAgICAgICAoIDB4MyA8PCAxNCApICAgLyogKENLR1IpIFBsZWFzZSByZWZlciB0byB0aGUgUExMIGRhdGFzaGVldCAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0tHUl9NVUwgICAgICAgICAgICAgICAoIDB4N0ZGIDw8IDE2ICkgLyogKENLR1IpIFBMTCBNdWx0aXBsaWVyICovDQotI2RlZmluZSBBVDkxQ19DS0dSX1VTQkRJViAgICAgICAgICAgICggMHgzIDw8IDI4ICkgICAvKiAoQ0tHUikgRGl2aWRlciBmb3IgVVNCIENsb2NrcyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0NLR1JfVVNCRElWXzAgICAgICAoIDB4MCA8PCAyOCApICAgLyogKENLR1IpIERpdmlkZXIgb3V0cHV0IGlzIFBMTCBjbG9jayBvdXRwdXQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19DS0dSX1VTQkRJVl8xICAgICAgKCAweDEgPDwgMjggKSAgIC8qIChDS0dSKSBEaXZpZGVyIG91dHB1dCBpcyBQTEwgY2xvY2sgb3V0cHV0IGRpdmlkZWQgYnkgMiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0NLR1JfVVNCRElWXzIgICAgICAoIDB4MiA8PCAyOCApICAgLyogKENLR1IpIERpdmlkZXIgb3V0cHV0IGlzIFBMTCBjbG9jayBvdXRwdXQgZGl2aWRlZCBieSA0ICovDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBDbG9jayBHZW5lcmF0b3IgQ29udHJvbGVyDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX0NLR1Igc3RydWN0dXJlICoqKg0KKyNkZWZpbmUgQ0tHUl9NT1IgICAgICAgICggMCkgLy8gTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBDS0dSX01DRlIgICAgICAgKCA0KSAvLyBNYWluIENsb2NrICBGcmVxdWVuY3kgUmVnaXN0ZXINCisjZGVmaW5lIENLR1JfUExMUiAgICAgICAoMTIpIC8vIFBMTCBSZWdpc3Rlcg0KKy8vIC0tLS0tLS0tIENLR1JfTU9SIDogKENLR1IgT2Zmc2V0OiAweDApIE1haW4gT3NjaWxsYXRvciBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0NLR1JfTU9TQ0VOICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKENLR1IpIE1haW4gT3NjaWxsYXRvciBFbmFibGUNCisjZGVmaW5lIEFUOTFDX0NLR1JfT1NDQllQQVNTICAgICAgKDB4MSA8PCAgMSkgLy8gKENLR1IpIE1haW4gT3NjaWxsYXRvciBCeXBhc3MNCisjZGVmaW5lIEFUOTFDX0NLR1JfT1NDT1VOVCAgICAgICAgKDB4RkYgPDwgIDgpIC8vIChDS0dSKSBNYWluIE9zY2lsbGF0b3IgU3RhcnQtdXAgVGltZQ0KKy8vIC0tLS0tLS0tIENLR1JfTUNGUiA6IChDS0dSIE9mZnNldDogMHg0KSBNYWluIENsb2NrIEZyZXF1ZW5jeSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0NLR1JfTUFJTkYgICAgICAgICAgKDB4RkZGRiA8PCAgMCkgLy8gKENLR1IpIE1haW4gQ2xvY2sgRnJlcXVlbmN5DQorI2RlZmluZSBBVDkxQ19DS0dSX01BSU5SRFkgICAgICAgICgweDEgPDwgMTYpIC8vIChDS0dSKSBNYWluIENsb2NrIFJlYWR5DQorLy8gLS0tLS0tLS0gQ0tHUl9QTExSIDogKENLR1IgT2Zmc2V0OiAweGMpIFBMTCBCIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9ESVYgICAgICAgICAgICAoMHhGRiA8PCAgMCkgLy8gKENLR1IpIERpdmlkZXIgU2VsZWN0ZWQNCisjZGVmaW5lIAlBVDkxQ19DS0dSX0RJVl8wICAgICAgICAgICAgICAgICAgICAoMHgwKSAvLyAoQ0tHUikgRGl2aWRlciBvdXRwdXQgaXMgMA0KKyNkZWZpbmUgCUFUOTFDX0NLR1JfRElWX0JZUEFTUyAgICAgICAgICAgICAgICgweDEpIC8vIChDS0dSKSBEaXZpZGVyIGlzIGJ5cGFzc2VkDQorI2RlZmluZSBBVDkxQ19DS0dSX1BMTENPVU5UICAgICAgICgweDNGIDw8ICA4KSAvLyAoQ0tHUikgUExMIENvdW50ZXINCisjZGVmaW5lIEFUOTFDX0NLR1JfT1VUICAgICAgICAgICAgKDB4MyA8PCAxNCkgLy8gKENLR1IpIFBMTCBPdXRwdXQgRnJlcXVlbmN5IFJhbmdlDQorI2RlZmluZSAJQVQ5MUNfQ0tHUl9PVVRfMCAgICAgICAgICAgICAgICAgICAgKDB4MCA8PCAxNCkgLy8gKENLR1IpIFBsZWFzZSByZWZlciB0byB0aGUgUExMIGRhdGFzaGVldA0KKyNkZWZpbmUgCUFUOTFDX0NLR1JfT1VUXzEgICAgICAgICAgICAgICAgICAgICgweDEgPDwgMTQpIC8vIChDS0dSKSBQbGVhc2UgcmVmZXIgdG8gdGhlIFBMTCBkYXRhc2hlZXQNCisjZGVmaW5lIAlBVDkxQ19DS0dSX09VVF8yICAgICAgICAgICAgICAgICAgICAoMHgyIDw8IDE0KSAvLyAoQ0tHUikgUGxlYXNlIHJlZmVyIHRvIHRoZSBQTEwgZGF0YXNoZWV0DQorI2RlZmluZSAJQVQ5MUNfQ0tHUl9PVVRfMyAgICAgICAgICAgICAgICAgICAgKDB4MyA8PCAxNCkgLy8gKENLR1IpIFBsZWFzZSByZWZlciB0byB0aGUgUExMIGRhdGFzaGVldA0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9NVUwgICAgICAgICAgICAoMHg3RkYgPDwgMTYpIC8vIChDS0dSKSBQTEwgTXVsdGlwbGllcg0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9VU0JESVYgICAgICAgICAoMHgzIDw8IDI4KSAvLyAoQ0tHUikgRGl2aWRlciBmb3IgVVNCIENsb2Nrcw0KKyNkZWZpbmUgCUFUOTFDX0NLR1JfVVNCRElWXzAgICAgICAgICAgICAgICAgICAgICgweDAgPDwgMjgpIC8vIChDS0dSKSBEaXZpZGVyIG91dHB1dCBpcyBQTEwgY2xvY2sgb3V0cHV0DQorI2RlZmluZSAJQVQ5MUNfQ0tHUl9VU0JESVZfMSAgICAgICAgICAgICAgICAgICAgKDB4MSA8PCAyOCkgLy8gKENLR1IpIERpdmlkZXIgb3V0cHV0IGlzIFBMTCBjbG9jayBvdXRwdXQgZGl2aWRlZCBieSAyDQorI2RlZmluZSAJQVQ5MUNfQ0tHUl9VU0JESVZfMiAgICAgICAgICAgICAgICAgICAgKDB4MiA8PCAyOCkgLy8gKENLR1IpIERpdmlkZXIgb3V0cHV0IGlzIFBMTCBjbG9jayBvdXRwdXQgZGl2aWRlZCBieSA0DQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQb3dlciBNYW5hZ2VtZW50IENvbnRyb2xlciAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19QTUMgc3RydWN0dXJlICoqKiAqLw0KLSNkZWZpbmUgUE1DX1NDRVIgICAgICAgICAgKCAwICkgICAgICAgICAvKiBTeXN0ZW0gQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBQTUNfU0NEUiAgICAgICAgICAoIDQgKSAgICAgICAgIC8qIFN5c3RlbSBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBQTUNfU0NTUiAgICAgICAgICAoIDggKSAgICAgICAgIC8qIFN5c3RlbSBDbG9jayBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBNQ19QQ0VSICAgICAgICAgICggMTYgKSAgICAgICAgLyogUGVyaXBoZXJhbCBDbG9jayBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBNQ19QQ0RSICAgICAgICAgICggMjAgKSAgICAgICAgLyogUGVyaXBoZXJhbCBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBQTUNfUENTUiAgICAgICAgICAoIDI0ICkgICAgICAgIC8qIFBlcmlwaGVyYWwgQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBQTUNfTU9SICAgICAgICAgICAoIDMyICkgICAgICAgIC8qIE1haW4gT3NjaWxsYXRvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUE1DX01DRlIgICAgICAgICAgKCAzNiApICAgICAgICAvKiBNYWluIENsb2NrICBGcmVxdWVuY3kgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBNQ19QTExSICAgICAgICAgICggNDQgKSAgICAgICAgLyogUExMIFJlZ2lzdGVyICovDQotI2RlZmluZSBQTUNfTUNLUiAgICAgICAgICAoIDQ4ICkgICAgICAgIC8qIE1hc3RlciBDbG9jayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUE1DX1BDS1IgICAgICAgICAgKCA2NCApICAgICAgICAvKiBQcm9ncmFtbWFibGUgQ2xvY2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBNQ19JRVIgICAgICAgICAgICggOTYgKSAgICAgICAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUE1DX0lEUiAgICAgICAgICAgKCAxMDAgKSAgICAgICAvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUE1DX1NSICAgICAgICAgICAgKCAxMDQgKSAgICAgICAvKiBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBNQ19JTVIgICAgICAgICAgICggMTA4ICkgICAgICAgLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0vKiAtLS0tLS0tLSBQTUNfU0NFUiA6IChQTUMgT2Zmc2V0OiAweDApIFN5c3RlbSBDbG9jayBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19QQ0sgICAgICggMHgxIDw8IDAgKSAgLyogKFBNQykgUHJvY2Vzc29yIENsb2NrICovDQotI2RlZmluZSBBVDkxQ19QTUNfVURQICAgICAoIDB4MSA8PCA3ICkgIC8qIChQTUMpIFVTQiBEZXZpY2UgUG9ydCBDbG9jayAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDSzAgICAgKCAweDEgPDwgOCApICAvKiAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0ICovDQotI2RlZmluZSBBVDkxQ19QTUNfUENLMSAgICAoIDB4MSA8PCA5ICkgIC8qIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19QQ0syICAgICggMHgxIDw8IDEwICkgLyogKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDSzMgICAgKCAweDEgPDwgMTEgKSAvKiAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0ICovDQotLyogLS0tLS0tLS0gUE1DX1NDRFIgOiAoUE1DIE9mZnNldDogMHg0KSBTeXN0ZW0gQ2xvY2sgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFBNQ19TQ1NSIDogKFBNQyBPZmZzZXQ6IDB4OCkgU3lzdGVtIENsb2NrIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIENLR1JfTU9SIDogKFBNQyBPZmZzZXQ6IDB4MjApIE1haW4gT3NjaWxsYXRvciBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIENLR1JfTUNGUiA6IChQTUMgT2Zmc2V0OiAweDI0KSBNYWluIENsb2NrIEZyZXF1ZW5jeSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIENLR1JfUExMUiA6IChQTUMgT2Zmc2V0OiAweDJjKSBQTEwgQiBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFBNQ19NQ0tSIDogKFBNQyBPZmZzZXQ6IDB4MzApIE1hc3RlciBDbG9jayBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX0NTUyAgICAgICAgICAgICAgICAgKCAweDMgPDwgMCApIC8qIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19QTUNfQ1NTX1NMT1dfQ0xLICAgICggMHgwICkgICAgICAvKiAoUE1DKSBTbG93IENsb2NrIGlzIHNlbGVjdGVkICovDQotI2RlZmluZSAgICAgQVQ5MUNfUE1DX0NTU19NQUlOX0NMSyAgICAoIDB4MSApICAgICAgLyogKFBNQykgTWFpbiBDbG9jayBpcyBzZWxlY3RlZCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1BNQ19DU1NfUExMX0NMSyAgICAgKCAweDMgKSAgICAgIC8qIChQTUMpIENsb2NrIGZyb20gUExMIGlzIHNlbGVjdGVkICovDQotI2RlZmluZSBBVDkxQ19QTUNfUFJFUyAgICAgICAgICAgICAgICAoIDB4NyA8PCAyICkgLyogKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIFByZXNjYWxlciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1BNQ19QUkVTX0NMSyAgICAgICAgKCAweDAgPDwgMiApIC8qIChQTUMpIFNlbGVjdGVkIGNsb2NrICovDQotI2RlZmluZSAgICAgQVQ5MUNfUE1DX1BSRVNfQ0xLXzIgICAgICAoIDB4MSA8PCAyICkgLyogKFBNQykgU2VsZWN0ZWQgY2xvY2sgZGl2aWRlZCBieSAyICovDQotI2RlZmluZSAgICAgQVQ5MUNfUE1DX1BSRVNfQ0xLXzQgICAgICAoIDB4MiA8PCAyICkgLyogKFBNQykgU2VsZWN0ZWQgY2xvY2sgZGl2aWRlZCBieSA0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfUE1DX1BSRVNfQ0xLXzggICAgICAoIDB4MyA8PCAyICkgLyogKFBNQykgU2VsZWN0ZWQgY2xvY2sgZGl2aWRlZCBieSA4ICovDQotI2RlZmluZSAgICAgQVQ5MUNfUE1DX1BSRVNfQ0xLXzE2ICAgICAoIDB4NCA8PCAyICkgLyogKFBNQykgU2VsZWN0ZWQgY2xvY2sgZGl2aWRlZCBieSAxNiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1BNQ19QUkVTX0NMS18zMiAgICAgKCAweDUgPDwgMiApIC8qIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgMzIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19QTUNfUFJFU19DTEtfNjQgICAgICggMHg2IDw8IDIgKSAvKiAoUE1DKSBTZWxlY3RlZCBjbG9jayBkaXZpZGVkIGJ5IDY0ICovDQotLyogLS0tLS0tLS0gUE1DX1BDS1IgOiAoUE1DIE9mZnNldDogMHg0MCkgUHJvZ3JhbW1hYmxlIENsb2NrIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gUE1DX0lFUiA6IChQTUMgT2Zmc2V0OiAweDYwKSBQTUMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX01PU0NTICAgICAgICAgICAgICAgKCAweDEgPDwgMCApICAvKiAoUE1DKSBNT1NDIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrICovDQotI2RlZmluZSBBVDkxQ19QTUNfTE9DSyAgICAgICAgICAgICAgICAoIDB4MSA8PCAyICkgIC8qIChQTUMpIFBMTCBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzayAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX01DS1JEWSAgICAgICAgICAgICAgKCAweDEgPDwgMyApICAvKiAoUE1DKSBNQ0tfUkRZIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrICovDQotI2RlZmluZSBBVDkxQ19QTUNfUENLMFJEWSAgICAgICAgICAgICAoIDB4MSA8PCA4ICkgIC8qIChQTUMpIFBDSzBfUkRZIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrICovDQotI2RlZmluZSBBVDkxQ19QTUNfUENLMVJEWSAgICAgICAgICAgICAoIDB4MSA8PCA5ICkgIC8qIChQTUMpIFBDSzFfUkRZIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrICovDQotI2RlZmluZSBBVDkxQ19QTUNfUENLMlJEWSAgICAgICAgICAgICAoIDB4MSA8PCAxMCApIC8qIChQTUMpIFBDSzJfUkRZIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrICovDQotI2RlZmluZSBBVDkxQ19QTUNfUENLM1JEWSAgICAgICAgICAgICAoIDB4MSA8PCAxMSApIC8qIChQTUMpIFBDSzNfUkRZIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrICovDQotLyogLS0tLS0tLS0gUE1DX0lEUiA6IChQTUMgT2Zmc2V0OiAweDY0KSBQTUMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBQTUNfU1IgOiAoUE1DIE9mZnNldDogMHg2OCkgUE1DIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFBNQ19JTVIgOiAoUE1DIE9mZnNldDogMHg2YykgUE1DIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tICovDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQb3dlciBNYW5hZ2VtZW50IENvbnRyb2xlcg0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19QTUMgc3RydWN0dXJlICoqKg0KKyNkZWZpbmUgUE1DX1NDRVIgICAgICAgICggMCkgLy8gU3lzdGVtIENsb2NrIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUE1DX1NDRFIgICAgICAgICggNCkgLy8gU3lzdGVtIENsb2NrIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIFBNQ19TQ1NSICAgICAgICAoIDgpIC8vIFN5c3RlbSBDbG9jayBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFBNQ19QQ0VSICAgICAgICAoMTYpIC8vIFBlcmlwaGVyYWwgQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBQTUNfUENEUiAgICAgICAgKDIwKSAvLyBQZXJpcGhlcmFsIENsb2NrIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIFBNQ19QQ1NSICAgICAgICAoMjQpIC8vIFBlcmlwaGVyYWwgQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBQTUNfTU9SICAgICAgICAgKDMyKSAvLyBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXINCisjZGVmaW5lIFBNQ19NQ0ZSICAgICAgICAoMzYpIC8vIE1haW4gQ2xvY2sgIEZyZXF1ZW5jeSBSZWdpc3Rlcg0KKyNkZWZpbmUgUE1DX1BMTFIgICAgICAgICg0NCkgLy8gUExMIFJlZ2lzdGVyDQorI2RlZmluZSBQTUNfTUNLUiAgICAgICAgKDQ4KSAvLyBNYXN0ZXIgQ2xvY2sgUmVnaXN0ZXINCisjZGVmaW5lIFBNQ19QQ0tSICAgICAgICAoNjQpIC8vIFByb2dyYW1tYWJsZSBDbG9jayBSZWdpc3Rlcg0KKyNkZWZpbmUgUE1DX0lFUiAgICAgICAgICg5NikgLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUE1DX0lEUiAgICAgICAgICgxMDApIC8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBQTUNfU1IgICAgICAgICAgKDEwNCkgLy8gU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBQTUNfSU1SICAgICAgICAgKDEwOCkgLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisvLyAtLS0tLS0tLSBQTUNfU0NFUiA6IChQTUMgT2Zmc2V0OiAweDApIFN5c3RlbSBDbG9jayBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QTUNfUENLICAgICAgICAgICAgICgweDEgPDwgIDApIC8vIChQTUMpIFByb2Nlc3NvciBDbG9jaw0KKyNkZWZpbmUgQVQ5MUNfUE1DX1VEUCAgICAgICAgICAgICAoMHgxIDw8ICA3KSAvLyAoUE1DKSBVU0IgRGV2aWNlIFBvcnQgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0swICAgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dA0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDSzEgICAgICAgICAgICAoMHgxIDw8ICA5KSAvLyAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0DQorI2RlZmluZSBBVDkxQ19QTUNfUENLMiAgICAgICAgICAgICgweDEgPDwgMTApIC8vIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQNCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0szICAgICAgICAgICAgKDB4MSA8PCAxMSkgLy8gKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dA0KKy8vIC0tLS0tLS0tIFBNQ19TQ0RSIDogKFBNQyBPZmZzZXQ6IDB4NCkgU3lzdGVtIENsb2NrIERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUE1DX1NDU1IgOiAoUE1DIE9mZnNldDogMHg4KSBTeXN0ZW0gQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIENLR1JfTU9SIDogKFBNQyBPZmZzZXQ6IDB4MjApIE1haW4gT3NjaWxsYXRvciBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBDS0dSX01DRlIgOiAoUE1DIE9mZnNldDogMHgyNCkgTWFpbiBDbG9jayBGcmVxdWVuY3kgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQ0tHUl9QTExSIDogKFBNQyBPZmZzZXQ6IDB4MmMpIFBMTCBCIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFBNQ19NQ0tSIDogKFBNQyBPZmZzZXQ6IDB4MzApIE1hc3RlciBDbG9jayBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BNQ19DU1MgICAgICAgICAgICAgKDB4MyA8PCAgMCkgLy8gKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1BNQ19DU1NfU0xPV19DTEsgICAgICAgICAgICAgKDB4MCkgLy8gKFBNQykgU2xvdyBDbG9jayBpcyBzZWxlY3RlZA0KKyNkZWZpbmUgCUFUOTFDX1BNQ19DU1NfTUFJTl9DTEsgICAgICAgICAgICAgKDB4MSkgLy8gKFBNQykgTWFpbiBDbG9jayBpcyBzZWxlY3RlZA0KKyNkZWZpbmUgCUFUOTFDX1BNQ19DU1NfUExMX0NMSyAgICAgICAgICAgICAgKDB4MykgLy8gKFBNQykgQ2xvY2sgZnJvbSBQTEwgaXMgc2VsZWN0ZWQNCisjZGVmaW5lIEFUOTFDX1BNQ19QUkVTICAgICAgICAgICAgKDB4NyA8PCAgMikgLy8gKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIFByZXNjYWxlcg0KKyNkZWZpbmUgCUFUOTFDX1BNQ19QUkVTX0NMSyAgICAgICAgICAgICAgICAgICgweDAgPDwgIDIpIC8vIChQTUMpIFNlbGVjdGVkIGNsb2NrDQorI2RlZmluZSAJQVQ5MUNfUE1DX1BSRVNfQ0xLXzIgICAgICAgICAgICAgICAgKDB4MSA8PCAgMikgLy8gKFBNQykgU2VsZWN0ZWQgY2xvY2sgZGl2aWRlZCBieSAyDQorI2RlZmluZSAJQVQ5MUNfUE1DX1BSRVNfQ0xLXzQgICAgICAgICAgICAgICAgKDB4MiA8PCAgMikgLy8gKFBNQykgU2VsZWN0ZWQgY2xvY2sgZGl2aWRlZCBieSA0DQorI2RlZmluZSAJQVQ5MUNfUE1DX1BSRVNfQ0xLXzggICAgICAgICAgICAgICAgKDB4MyA8PCAgMikgLy8gKFBNQykgU2VsZWN0ZWQgY2xvY2sgZGl2aWRlZCBieSA4DQorI2RlZmluZSAJQVQ5MUNfUE1DX1BSRVNfQ0xLXzE2ICAgICAgICAgICAgICAgKDB4NCA8PCAgMikgLy8gKFBNQykgU2VsZWN0ZWQgY2xvY2sgZGl2aWRlZCBieSAxNg0KKyNkZWZpbmUgCUFUOTFDX1BNQ19QUkVTX0NMS18zMiAgICAgICAgICAgICAgICgweDUgPDwgIDIpIC8vIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgMzINCisjZGVmaW5lIAlBVDkxQ19QTUNfUFJFU19DTEtfNjQgICAgICAgICAgICAgICAoMHg2IDw8ICAyKSAvLyAoUE1DKSBTZWxlY3RlZCBjbG9jayBkaXZpZGVkIGJ5IDY0DQorLy8gLS0tLS0tLS0gUE1DX1BDS1IgOiAoUE1DIE9mZnNldDogMHg0MCkgUHJvZ3JhbW1hYmxlIENsb2NrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFBNQ19JRVIgOiAoUE1DIE9mZnNldDogMHg2MCkgUE1DIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QTUNfTU9TQ1MgICAgICAgICAgICgweDEgPDwgIDApIC8vIChQTUMpIE1PU0MgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sNCisjZGVmaW5lIEFUOTFDX1BNQ19MT0NLICAgICAgICAgICAgKDB4MSA8PCAgMikgLy8gKFBNQykgUExMIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrDQorI2RlZmluZSBBVDkxQ19QTUNfTUNLUkRZICAgICAgICAgICgweDEgPDwgIDMpIC8vIChQTUMpIE1DS19SRFkgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sNCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0swUkRZICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKFBNQykgUENLMF9SRFkgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sNCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0sxUkRZICAgICAgICAgKDB4MSA8PCAgOSkgLy8gKFBNQykgUENLMV9SRFkgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sNCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0syUkRZICAgICAgICAgKDB4MSA8PCAxMCkgLy8gKFBNQykgUENLMl9SRFkgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sNCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0szUkRZICAgICAgICAgKDB4MSA8PCAxMSkgLy8gKFBNQykgUENLM19SRFkgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sNCisvLyAtLS0tLS0tLSBQTUNfSURSIDogKFBNQyBPZmZzZXQ6IDB4NjQpIFBNQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQTUNfU1IgOiAoUE1DIE9mZnNldDogMHg2OCkgUE1DIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQTUNfSU1SIDogKFBNQyBPZmZzZXQ6IDB4NmMpIFBNQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFJlc2V0IENvbnRyb2xsZXIgSW50ZXJmYWNlICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1JTVEMgc3RydWN0dXJlICoqKiAqLw0KLSNkZWZpbmUgUlNUQ19SQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICggMCApICAgICAgICAgIC8qIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFJTVENfUlNSICAgICAgICAgICAgICAgICAgICAgICAgICAoIDQgKSAgICAgICAgICAvKiBSZXNldCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFJTVENfUk1SICAgICAgICAgICAgICAgICAgICAgICAgICAoIDggKSAgICAgICAgICAvKiBSZXNldCBNb2RlIFJlZ2lzdGVyICovDQotLyogLS0tLS0tLS0gU1lTQ19SQ1IgOiAoUlNUQyBPZmZzZXQ6IDB4MCkgUmVzZXQgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1lTQ19QUk9DUlNUICAgICAgICAgICAgICAgICggMHgxIDw8IDAgKSAgIC8qIChSU1RDKSBQcm9jZXNzb3IgUmVzZXQgKi8NCi0jZGVmaW5lIEFUOTFDX1NZU0NfSUNFUlNUICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxICkgICAvKiAoUlNUQykgSUNFIEludGVyZmFjZSBSZXNldCAqLw0KLSNkZWZpbmUgQVQ5MUNfU1lTQ19QRVJSU1QgICAgICAgICAgICAgICAgICggMHgxIDw8IDIgKSAgIC8qIChSU1RDKSBQZXJpcGhlcmFsIFJlc2V0ICovDQotI2RlZmluZSBBVDkxQ19TWVNDX0VYVFJTVCAgICAgICAgICAgICAgICAgKCAweDEgPDwgMyApICAgLyogKFJTVEMpIEV4dGVybmFsIFJlc2V0ICovDQotI2RlZmluZSBBVDkxQ19TWVNDX0tFWSAgICAgICAgICAgICAgICAgICAgKCAweEZGIDw8IDI0ICkgLyogKFJTVEMpIFBhc3N3b3JkICovDQotLyogLS0tLS0tLS0gU1lTQ19SU1IgOiAoUlNUQyBPZmZzZXQ6IDB4NCkgUmVzZXQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19TWVNDX1VSU1RTICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMCApICAgLyogKFJTVEMpIFVzZXIgUmVzZXQgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19TWVNDX0JPRFNUUyAgICAgICAgICAgICAgICAgKCAweDEgPDwgMSApICAgLyogKFJTVEMpIEJyb3duLW91dCBEZXRlY3Rpb24gU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19TWVNDX1JTVFRZUCAgICAgICAgICAgICAgICAgKCAweDcgPDwgOCApICAgLyogKFJTVEMpIFJlc2V0IFR5cGUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TWVNDX1JTVFRZUF9QT1dFUlVQICAgICAoIDB4MCA8PCA4ICkgICAvKiAoUlNUQykgUG93ZXItdXAgUmVzZXQuIFZERENPUkUgcmlzaW5nLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NZU0NfUlNUVFlQX1dBVENIRE9HICAgICggMHgyIDw8IDggKSAgIC8qIChSU1RDKSBXYXRjaGRvZyBSZXNldC4gV2F0Y2hkb2cgb3ZlcmZsb3cgb2NjdXJlZC4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TWVNDX1JTVFRZUF9TT0ZUV0FSRSAgICAoIDB4MyA8PCA4ICkgICAvKiAoUlNUQykgU29mdHdhcmUgUmVzZXQuIFByb2Nlc3NvciByZXNldCByZXF1aXJlZCBieSB0aGUgc29mdHdhcmUuICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1lTQ19SU1RUWVBfVVNFUiAgICAgICAgKCAweDQgPDwgOCApICAgLyogKFJTVEMpIFVzZXIgUmVzZXQuIE5SU1QgcGluIGRldGVjdGVkIGxvdy4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TWVNDX1JTVFRZUF9CUk9XTk9VVCAgICAoIDB4NSA8PCA4ICkgICAvKiAoUlNUQykgQnJvd24tb3V0IFJlc2V0LiAqLw0KLSNkZWZpbmUgQVQ5MUNfU1lTQ19OUlNUTCAgICAgICAgICAgICAgICAgICggMHgxIDw8IDE2ICkgIC8qIChSU1RDKSBOUlNUIHBpbiBsZXZlbCAqLw0KLSNkZWZpbmUgQVQ5MUNfU1lTQ19TUkNNUCAgICAgICAgICAgICAgICAgICggMHgxIDw8IDE3ICkgIC8qIChSU1RDKSBTb2Z0d2FyZSBSZXNldCBDb21tYW5kIGluIFByb2dyZXNzLiAqLw0KLS8qIC0tLS0tLS0tIFNZU0NfUk1SIDogKFJTVEMgT2Zmc2V0OiAweDgpIFJlc2V0IE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1NZU0NfVVJTVEVOICAgICAgICAgICAgICAgICAoIDB4MSA8PCAwICkgICAvKiAoUlNUQykgVXNlciBSZXNldCBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1NZU0NfVVJTVElFTiAgICAgICAgICAgICAgICAoIDB4MSA8PCA0ICkgICAvKiAoUlNUQykgVXNlciBSZXNldCBJbnRlcnJ1cHQgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19TWVNDX0VSU1RMICAgICAgICAgICAgICAgICAgKCAweEYgPDwgOCApICAgLyogKFJTVEMpIFVzZXIgUmVzZXQgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19TWVNDX0JPRElFTiAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTYgKSAgLyogKFJTVEMpIEJyb3duLW91dCBEZXRlY3Rpb24gSW50ZXJydXB0IEVuYWJsZSAqLw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUmVzZXQgQ29udHJvbGxlciBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfUlNUQyBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBSU1RDX1JDUiAgICAgICAgKCAwKSAvLyBSZXNldCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBSU1RDX1JTUiAgICAgICAgKCA0KSAvLyBSZXNldCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFJTVENfUk1SICAgICAgICAoIDgpIC8vIFJlc2V0IE1vZGUgUmVnaXN0ZXINCisvLyAtLS0tLS0tLSBTWVNDX1JDUiA6IChSU1RDIE9mZnNldDogMHgwKSBSZXNldCBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19QUk9DUlNUICAgICAgICAoMHgxIDw8ICAwKSAvLyAoUlNUQykgUHJvY2Vzc29yIFJlc2V0DQorI2RlZmluZSBBVDkxQ19TWVNDX0lDRVJTVCAgICAgICAgICgweDEgPDwgIDEpIC8vIChSU1RDKSBJQ0UgSW50ZXJmYWNlIFJlc2V0DQorI2RlZmluZSBBVDkxQ19TWVNDX1BFUlJTVCAgICAgICAgICgweDEgPDwgIDIpIC8vIChSU1RDKSBQZXJpcGhlcmFsIFJlc2V0DQorI2RlZmluZSBBVDkxQ19TWVNDX0VYVFJTVCAgICAgICAgICgweDEgPDwgIDMpIC8vIChSU1RDKSBFeHRlcm5hbCBSZXNldA0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19LRVkgICAgICAgICAgICAoMHhGRiA8PCAyNCkgLy8gKFJTVEMpIFBhc3N3b3JkDQorLy8gLS0tLS0tLS0gU1lTQ19SU1IgOiAoUlNUQyBPZmZzZXQ6IDB4NCkgUmVzZXQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19VUlNUUyAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoUlNUQykgVXNlciBSZXNldCBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX1NZU0NfQk9EU1RTICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKFJTVEMpIEJyb3duLW91dCBEZXRlY3Rpb24gU3RhdHVzDQorI2RlZmluZSBBVDkxQ19TWVNDX1JTVFRZUCAgICAgICAgICgweDcgPDwgIDgpIC8vIChSU1RDKSBSZXNldCBUeXBlDQorI2RlZmluZSAJQVQ5MUNfU1lTQ19SU1RUWVBfUE9XRVJVUCAgICAgICAgICAgICAgKDB4MCA8PCAgOCkgLy8gKFJTVEMpIFBvd2VyLXVwIFJlc2V0LiBWRERDT1JFIHJpc2luZy4NCisjZGVmaW5lIAlBVDkxQ19TWVNDX1JTVFRZUF9XQVRDSERPRyAgICAgICAgICAgICAoMHgyIDw8ICA4KSAvLyAoUlNUQykgV2F0Y2hkb2cgUmVzZXQuIFdhdGNoZG9nIG92ZXJmbG93IG9jY3VyZWQuDQorI2RlZmluZSAJQVQ5MUNfU1lTQ19SU1RUWVBfU09GVFdBUkUgICAgICAgICAgICAgKDB4MyA8PCAgOCkgLy8gKFJTVEMpIFNvZnR3YXJlIFJlc2V0LiBQcm9jZXNzb3IgcmVzZXQgcmVxdWlyZWQgYnkgdGhlIHNvZnR3YXJlLg0KKyNkZWZpbmUgCUFUOTFDX1NZU0NfUlNUVFlQX1VTRVIgICAgICAgICAgICAgICAgICgweDQgPDwgIDgpIC8vIChSU1RDKSBVc2VyIFJlc2V0LiBOUlNUIHBpbiBkZXRlY3RlZCBsb3cuDQorI2RlZmluZSAJQVQ5MUNfU1lTQ19SU1RUWVBfQlJPV05PVVQgICAgICAgICAgICAgKDB4NSA8PCAgOCkgLy8gKFJTVEMpIEJyb3duLW91dCBSZXNldC4NCisjZGVmaW5lIEFUOTFDX1NZU0NfTlJTVEwgICAgICAgICAgKDB4MSA8PCAxNikgLy8gKFJTVEMpIE5SU1QgcGluIGxldmVsDQorI2RlZmluZSBBVDkxQ19TWVNDX1NSQ01QICAgICAgICAgICgweDEgPDwgMTcpIC8vIChSU1RDKSBTb2Z0d2FyZSBSZXNldCBDb21tYW5kIGluIFByb2dyZXNzLg0KKy8vIC0tLS0tLS0tIFNZU0NfUk1SIDogKFJTVEMgT2Zmc2V0OiAweDgpIFJlc2V0IE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TWVNDX1VSU1RFTiAgICAgICAgICgweDEgPDwgIDApIC8vIChSU1RDKSBVc2VyIFJlc2V0IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19VUlNUSUVOICAgICAgICAoMHgxIDw8ICA0KSAvLyAoUlNUQykgVXNlciBSZXNldCBJbnRlcnJ1cHQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19TWVNDX0VSU1RMICAgICAgICAgICgweEYgPDwgIDgpIC8vIChSU1RDKSBVc2VyIFJlc2V0IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19CT0RJRU4gICAgICAgICAoMHgxIDw8IDE2KSAvLyAoUlNUQykgQnJvd24tb3V0IERldGVjdGlvbiBJbnRlcnJ1cHQgRW5hYmxlDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBSZWFsIFRpbWUgVGltZXIgQ29udHJvbGxlciBJbnRlcmZhY2UgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfUlRUQyBzdHJ1Y3R1cmUgKioqICovDQotI2RlZmluZSBSVFRDX1JUTVIgICAgICAgICAgICAgICAoIDAgKSAgICAgICAgICAgLyogUmVhbC10aW1lIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFJUVENfUlRBUiAgICAgICAgICAgICAgICggNCApICAgICAgICAgICAvKiBSZWFsLXRpbWUgQWxhcm0gUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFJUVENfUlRWUiAgICAgICAgICAgICAgICggOCApICAgICAgICAgICAvKiBSZWFsLXRpbWUgVmFsdWUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFJUVENfUlRTUiAgICAgICAgICAgICAgICggMTIgKSAgICAgICAgICAvKiBSZWFsLXRpbWUgU3RhdHVzIFJlZ2lzdGVyICovDQotLyogLS0tLS0tLS0gU1lTQ19SVE1SIDogKFJUVEMgT2Zmc2V0OiAweDApIFJlYWwtdGltZSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19TWVNDX1JUUFJFUyAgICAgICAoIDB4RkZGRiA8PCAwICkgLyogKFJUVEMpIFJlYWwtdGltZSBUaW1lciBQcmVzY2FsZXIgVmFsdWUgKi8NCi0jZGVmaW5lIEFUOTFDX1NZU0NfQUxNSUVOICAgICAgICggMHgxIDw8IDE2ICkgICAvKiAoUlRUQykgQWxhcm0gSW50ZXJydXB0IEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1lTQ19SVFRJTkNJRU4gICAgKCAweDEgPDwgMTcgKSAgIC8qIChSVFRDKSBSZWFsIFRpbWUgVGltZXIgSW5jcmVtZW50IEludGVycnVwdCBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1NZU0NfUlRUUlNUICAgICAgICggMHgxIDw8IDE4ICkgICAvKiAoUlRUQykgUmVhbCBUaW1lIFRpbWVyIFJlc3RhcnQgKi8NCi0vKiAtLS0tLS0tLSBTWVNDX1JUQVIgOiAoUlRUQyBPZmZzZXQ6IDB4NCkgUmVhbC10aW1lIEFsYXJtIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19TWVNDX0FMTVYgICAgICAgICAoIDB4MCA8PCAwICkgICAgLyogKFJUVEMpIEFsYXJtIFZhbHVlICovDQotLyogLS0tLS0tLS0gU1lTQ19SVFZSIDogKFJUVEMgT2Zmc2V0OiAweDgpIEN1cnJlbnQgUmVhbC10aW1lIFZhbHVlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19TWVNDX0NSVFYgICAgICAgICAoIDB4MCA8PCAwICkgICAgLyogKFJUVEMpIEN1cnJlbnQgUmVhbC10aW1lIFZhbHVlICovDQotLyogLS0tLS0tLS0gU1lTQ19SVFNSIDogKFJUVEMgT2Zmc2V0OiAweGMpIFJlYWwtdGltZSBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1NZU0NfQUxNUyAgICAgICAgICggMHgxIDw8IDAgKSAgICAvKiAoUlRUQykgUmVhbC10aW1lIEFsYXJtIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfU1lTQ19SVFRJTkMgICAgICAgKCAweDEgPDwgMSApICAgIC8qIChSVFRDKSBSZWFsLXRpbWUgVGltZXIgSW5jcmVtZW50ICovDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBSZWFsIFRpbWUgVGltZXIgQ29udHJvbGxlciBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfUlRUQyBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBSVFRDX1JUTVIgICAgICAgKCAwKSAvLyBSZWFsLXRpbWUgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUlRUQ19SVEFSICAgICAgICggNCkgLy8gUmVhbC10aW1lIEFsYXJtIFJlZ2lzdGVyDQorI2RlZmluZSBSVFRDX1JUVlIgICAgICAgKCA4KSAvLyBSZWFsLXRpbWUgVmFsdWUgUmVnaXN0ZXINCisjZGVmaW5lIFJUVENfUlRTUiAgICAgICAoMTIpIC8vIFJlYWwtdGltZSBTdGF0dXMgUmVnaXN0ZXINCisvLyAtLS0tLS0tLSBTWVNDX1JUTVIgOiAoUlRUQyBPZmZzZXQ6IDB4MCkgUmVhbC10aW1lIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TWVNDX1JUUFJFUyAgICAgICAgICgweEZGRkYgPDwgIDApIC8vIChSVFRDKSBSZWFsLXRpbWUgVGltZXIgUHJlc2NhbGVyIFZhbHVlDQorI2RlZmluZSBBVDkxQ19TWVNDX0FMTUlFTiAgICAgICAgICgweDEgPDwgMTYpIC8vIChSVFRDKSBBbGFybSBJbnRlcnJ1cHQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19TWVNDX1JUVElOQ0lFTiAgICAgICgweDEgPDwgMTcpIC8vIChSVFRDKSBSZWFsIFRpbWUgVGltZXIgSW5jcmVtZW50IEludGVycnVwdCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1NZU0NfUlRUUlNUICAgICAgICAgKDB4MSA8PCAxOCkgLy8gKFJUVEMpIFJlYWwgVGltZSBUaW1lciBSZXN0YXJ0DQorLy8gLS0tLS0tLS0gU1lTQ19SVEFSIDogKFJUVEMgT2Zmc2V0OiAweDQpIFJlYWwtdGltZSBBbGFybSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NZU0NfQUxNViAgICAgICAgICAgKDB4MCA8PCAgMCkgLy8gKFJUVEMpIEFsYXJtIFZhbHVlDQorLy8gLS0tLS0tLS0gU1lTQ19SVFZSIDogKFJUVEMgT2Zmc2V0OiAweDgpIEN1cnJlbnQgUmVhbC10aW1lIFZhbHVlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19DUlRWICAgICAgICAgICAoMHgwIDw8ICAwKSAvLyAoUlRUQykgQ3VycmVudCBSZWFsLXRpbWUgVmFsdWUNCisvLyAtLS0tLS0tLSBTWVNDX1JUU1IgOiAoUlRUQyBPZmZzZXQ6IDB4YykgUmVhbC10aW1lIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NZU0NfQUxNUyAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFJUVEMpIFJlYWwtdGltZSBBbGFybSBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX1NZU0NfUlRUSU5DICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKFJUVEMpIFJlYWwtdGltZSBUaW1lciBJbmNyZW1lbnQNCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFBlcmlvZGljIEludGVydmFsIFRpbWVyIENvbnRyb2xsZXIgSW50ZXJmYWNlICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1BJVEMgc3RydWN0dXJlICoqKiAqLw0KLSNkZWZpbmUgUElUQ19QSU1SICAgICAgICAgICAgKCAwICkgICAgICAgICAgICAvKiBQZXJpb2QgSW50ZXJ2YWwgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUElUQ19QSVNSICAgICAgICAgICAgKCA0ICkgICAgICAgICAgICAvKiBQZXJpb2QgSW50ZXJ2YWwgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBQSVRDX1BJVlIgICAgICAgICAgICAoIDggKSAgICAgICAgICAgIC8qIFBlcmlvZCBJbnRlcnZhbCBWYWx1ZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUElUQ19QSUlSICAgICAgICAgICAgKCAxMiApICAgICAgICAgICAvKiBQZXJpb2QgSW50ZXJ2YWwgSW1hZ2UgUmVnaXN0ZXIgKi8NCi0vKiAtLS0tLS0tLSBTWVNDX1BJTVIgOiAoUElUQyBPZmZzZXQ6IDB4MCkgUGVyaW9kaWMgSW50ZXJ2YWwgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1lTQ19QSVYgICAgICAgKCAweEZGRkZGIDw8IDAgKSAvKiAoUElUQykgUGVyaW9kaWMgSW50ZXJ2YWwgVmFsdWUgKi8NCi0jZGVmaW5lIEFUOTFDX1NZU0NfUElURU4gICAgICggMHgxIDw8IDI0ICkgICAgLyogKFBJVEMpIFBlcmlvZGljIEludGVydmFsIFRpbWVyIEVuYWJsZWQgKi8NCi0jZGVmaW5lIEFUOTFDX1NZU0NfUElUSUVOICAgICggMHgxIDw8IDI1ICkgICAgLyogKFBJVEMpIFBlcmlvZGljIEludGVydmFsIFRpbWVyIEludGVycnVwdCBFbmFibGUgKi8NCi0vKiAtLS0tLS0tLSBTWVNDX1BJU1IgOiAoUElUQyBPZmZzZXQ6IDB4NCkgUGVyaW9kaWMgSW50ZXJ2YWwgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19TWVNDX1BJVFMgICAgICAoIDB4MSA8PCAwICkgICAgIC8qIChQSVRDKSBQZXJpb2RpYyBJbnRlcnZhbCBUaW1lciBTdGF0dXMgKi8NCi0vKiAtLS0tLS0tLSBTWVNDX1BJVlIgOiAoUElUQyBPZmZzZXQ6IDB4OCkgUGVyaW9kaWMgSW50ZXJ2YWwgVmFsdWUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1NZU0NfQ1BJViAgICAgICggMHhGRkZGRiA8PCAwICkgLyogKFBJVEMpIEN1cnJlbnQgUGVyaW9kaWMgSW50ZXJ2YWwgVmFsdWUgKi8NCi0jZGVmaW5lIEFUOTFDX1NZU0NfUElDTlQgICAgICggMHhGRkYgPDwgMjAgKSAgLyogKFBJVEMpIFBlcmlvZGljIEludGVydmFsIENvdW50ZXIgKi8NCi0vKiAtLS0tLS0tLSBTWVNDX1BJSVIgOiAoUElUQyBPZmZzZXQ6IDB4YykgUGVyaW9kaWMgSW50ZXJ2YWwgSW1hZ2UgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFBlcmlvZGljIEludGVydmFsIFRpbWVyIENvbnRyb2xsZXIgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1BJVEMgc3RydWN0dXJlICoqKg0KKyNkZWZpbmUgUElUQ19QSU1SICAgICAgICggMCkgLy8gUGVyaW9kIEludGVydmFsIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIFBJVENfUElTUiAgICAgICAoIDQpIC8vIFBlcmlvZCBJbnRlcnZhbCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFBJVENfUElWUiAgICAgICAoIDgpIC8vIFBlcmlvZCBJbnRlcnZhbCBWYWx1ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUElUQ19QSUlSICAgICAgICgxMikgLy8gUGVyaW9kIEludGVydmFsIEltYWdlIFJlZ2lzdGVyDQorLy8gLS0tLS0tLS0gU1lTQ19QSU1SIDogKFBJVEMgT2Zmc2V0OiAweDApIFBlcmlvZGljIEludGVydmFsIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TWVNDX1BJViAgICAgICAgICAgICgweEZGRkZGIDw8ICAwKSAvLyAoUElUQykgUGVyaW9kaWMgSW50ZXJ2YWwgVmFsdWUNCisjZGVmaW5lIEFUOTFDX1NZU0NfUElURU4gICAgICAgICAgKDB4MSA8PCAyNCkgLy8gKFBJVEMpIFBlcmlvZGljIEludGVydmFsIFRpbWVyIEVuYWJsZWQNCisjZGVmaW5lIEFUOTFDX1NZU0NfUElUSUVOICAgICAgICAgKDB4MSA8PCAyNSkgLy8gKFBJVEMpIFBlcmlvZGljIEludGVydmFsIFRpbWVyIEludGVycnVwdCBFbmFibGUNCisvLyAtLS0tLS0tLSBTWVNDX1BJU1IgOiAoUElUQyBPZmZzZXQ6IDB4NCkgUGVyaW9kaWMgSW50ZXJ2YWwgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19QSVRTICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoUElUQykgUGVyaW9kaWMgSW50ZXJ2YWwgVGltZXIgU3RhdHVzDQorLy8gLS0tLS0tLS0gU1lTQ19QSVZSIDogKFBJVEMgT2Zmc2V0OiAweDgpIFBlcmlvZGljIEludGVydmFsIFZhbHVlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19DUElWICAgICAgICAgICAoMHhGRkZGRiA8PCAgMCkgLy8gKFBJVEMpIEN1cnJlbnQgUGVyaW9kaWMgSW50ZXJ2YWwgVmFsdWUNCisjZGVmaW5lIEFUOTFDX1NZU0NfUElDTlQgICAgICAgICAgKDB4RkZGIDw8IDIwKSAvLyAoUElUQykgUGVyaW9kaWMgSW50ZXJ2YWwgQ291bnRlcg0KKy8vIC0tLS0tLS0tIFNZU0NfUElJUiA6IChQSVRDIE9mZnNldDogMHhjKSBQZXJpb2RpYyBJbnRlcnZhbCBJbWFnZSBSZWdpc3RlciAtLS0tLS0tLSANCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFdhdGNoZG9nIFRpbWVyIENvbnRyb2xsZXIgSW50ZXJmYWNlICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1dEVEMgc3RydWN0dXJlICoqKiAqLw0KLSNkZWZpbmUgV0RUQ19XRENSICAgICAgICAgICAgICAgKCAwICkgICAgICAgICAgIC8qIFdhdGNoZG9nIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFdEVENfV0RNUiAgICAgICAgICAgICAgICggNCApICAgICAgICAgICAvKiBXYXRjaGRvZyBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBXRFRDX1dEU1IgICAgICAgICAgICAgICAoIDggKSAgICAgICAgICAgLyogV2F0Y2hkb2cgU3RhdHVzIFJlZ2lzdGVyICovDQotLyogLS0tLS0tLS0gU1lTQ19XRENSIDogKFdEVEMgT2Zmc2V0OiAweDApIFBlcmlvZGljIEludGVydmFsIEltYWdlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19TWVNDX1dEUlNUVCAgICAgICAoIDB4MSA8PCAwICkgICAgLyogKFdEVEMpIFdhdGNoZG9nIFJlc3RhcnQgKi8NCi0vKiAtLS0tLS0tLSBTWVNDX1dETVIgOiAoV0RUQyBPZmZzZXQ6IDB4NCkgV2F0Y2hkb2cgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1lTQ19XRFYgICAgICAgICAgKCAweEZGRiA8PCAwICkgIC8qIChXRFRDKSBXYXRjaGRvZyBUaW1lciBSZXN0YXJ0ICovDQotI2RlZmluZSBBVDkxQ19TWVNDX1dERklFTiAgICAgICAoIDB4MSA8PCAxMiApICAgLyogKFdEVEMpIFdhdGNoZG9nIEZhdWx0IEludGVycnVwdCBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1NZU0NfV0RSU1RFTiAgICAgICggMHgxIDw8IDEzICkgICAvKiAoV0RUQykgV2F0Y2hkb2cgUmVzZXQgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19TWVNDX1dEUlBST0MgICAgICAoIDB4MSA8PCAxNCApICAgLyogKFdEVEMpIFdhdGNoZG9nIFRpbWVyIFJlc3RhcnQgKi8NCi0jZGVmaW5lIEFUOTFDX1NZU0NfV0RESVMgICAgICAgICggMHgxIDw8IDE1ICkgICAvKiAoV0RUQykgV2F0Y2hkb2cgRGlzYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1lTQ19XREQgICAgICAgICAgKCAweEZGRiA8PCAxNiApIC8qIChXRFRDKSBXYXRjaGRvZyBEZWx0YSBWYWx1ZSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1lTQ19XRERCR0hMVCAgICAgKCAweDEgPDwgMjggKSAgIC8qIChXRFRDKSBXYXRjaGRvZyBEZWJ1ZyBIYWx0ICovDQotI2RlZmluZSBBVDkxQ19TWVNDX1dESURMRUhMVCAgICAoIDB4MSA8PCAyOSApICAgLyogKFdEVEMpIFdhdGNoZG9nIElkbGUgSGFsdCAqLw0KLS8qIC0tLS0tLS0tIFNZU0NfV0RTUiA6IChXRFRDIE9mZnNldDogMHg4KSBXYXRjaGRvZyBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1NZU0NfV0RVTkYgICAgICAgICggMHgxIDw8IDAgKSAgICAvKiAoV0RUQykgV2F0Y2hkb2cgVW5kZXJmbG93ICovDQotI2RlZmluZSBBVDkxQ19TWVNDX1dERVJSICAgICAgICAoIDB4MSA8PCAxICkgICAgLyogKFdEVEMpIFdhdGNoZG9nIEVycm9yICovDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBXYXRjaGRvZyBUaW1lciBDb250cm9sbGVyIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19XRFRDIHN0cnVjdHVyZSAqKioNCisjZGVmaW5lIFdEVENfV0RDUiAgICAgICAoIDApIC8vIFdhdGNoZG9nIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIFdEVENfV0RNUiAgICAgICAoIDQpIC8vIFdhdGNoZG9nIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIFdEVENfV0RTUiAgICAgICAoIDgpIC8vIFdhdGNoZG9nIFN0YXR1cyBSZWdpc3Rlcg0KKy8vIC0tLS0tLS0tIFNZU0NfV0RDUiA6IChXRFRDIE9mZnNldDogMHgwKSBQZXJpb2RpYyBJbnRlcnZhbCBJbWFnZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NZU0NfV0RSU1RUICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFdEVEMpIFdhdGNoZG9nIFJlc3RhcnQNCisvLyAtLS0tLS0tLSBTWVNDX1dETVIgOiAoV0RUQyBPZmZzZXQ6IDB4NCkgV2F0Y2hkb2cgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NZU0NfV0RWICAgICAgICAgICAgKDB4RkZGIDw8ICAwKSAvLyAoV0RUQykgV2F0Y2hkb2cgVGltZXIgUmVzdGFydA0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19XREZJRU4gICAgICAgICAoMHgxIDw8IDEyKSAvLyAoV0RUQykgV2F0Y2hkb2cgRmF1bHQgSW50ZXJydXB0IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19XRFJTVEVOICAgICAgICAoMHgxIDw8IDEzKSAvLyAoV0RUQykgV2F0Y2hkb2cgUmVzZXQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19TWVNDX1dEUlBST0MgICAgICAgICgweDEgPDwgMTQpIC8vIChXRFRDKSBXYXRjaGRvZyBUaW1lciBSZXN0YXJ0DQorI2RlZmluZSBBVDkxQ19TWVNDX1dERElTICAgICAgICAgICgweDEgPDwgMTUpIC8vIChXRFRDKSBXYXRjaGRvZyBEaXNhYmxlDQorI2RlZmluZSBBVDkxQ19TWVNDX1dERCAgICAgICAgICAgICgweEZGRiA8PCAxNikgLy8gKFdEVEMpIFdhdGNoZG9nIERlbHRhIFZhbHVlDQorI2RlZmluZSBBVDkxQ19TWVNDX1dEREJHSExUICAgICAgICgweDEgPDwgMjgpIC8vIChXRFRDKSBXYXRjaGRvZyBEZWJ1ZyBIYWx0DQorI2RlZmluZSBBVDkxQ19TWVNDX1dESURMRUhMVCAgICAgICgweDEgPDwgMjkpIC8vIChXRFRDKSBXYXRjaGRvZyBJZGxlIEhhbHQNCisvLyAtLS0tLS0tLSBTWVNDX1dEU1IgOiAoV0RUQyBPZmZzZXQ6IDB4OCkgV2F0Y2hkb2cgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1lTQ19XRFVORiAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoV0RUQykgV2F0Y2hkb2cgVW5kZXJmbG93DQorI2RlZmluZSBBVDkxQ19TWVNDX1dERVJSICAgICAgICAgICgweDEgPDwgIDEpIC8vIChXRFRDKSBXYXRjaGRvZyBFcnJvcg0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgTWVtb3J5IENvbnRyb2xsZXIgSW50ZXJmYWNlICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX01DIHN0cnVjdHVyZSAqKiogKi8NCi0jZGVmaW5lIE1DX1JDUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAwICkgICAgICAgICAgLyogTUMgUmVtYXAgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgTUNfQVNSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDQgKSAgICAgICAgICAvKiBNQyBBYm9ydCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIE1DX0FBU1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCA4ICkgICAgICAgICAgLyogTUMgQWJvcnQgQWRkcmVzcyBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIE1DX0ZNUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCA5NiApICAgICAgICAgLyogTUMgRmxhc2ggTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgTUNfRkNSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDEwMCApICAgICAgICAvKiBNQyBGbGFzaCBDb21tYW5kIFJlZ2lzdGVyICovDQotI2RlZmluZSBNQ19GU1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMTA0ICkgICAgICAgIC8qIE1DIEZsYXNoIFN0YXR1cyBSZWdpc3RlciAqLw0KLS8qIC0tLS0tLS0tIE1DX1JDUiA6IChNQyBPZmZzZXQ6IDB4MCkgTUMgUmVtYXAgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfUkNCICAgICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAwICkgICAvKiAoTUMpIFJlbWFwIENvbW1hbmQgQml0ICovDQotLyogLS0tLS0tLS0gTUNfQVNSIDogKE1DIE9mZnNldDogMHg0KSBNQyBBYm9ydCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX01DX1VOREFERCAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMCApICAgLyogKE1DKSBVbmRlZmluZWQgQWRkZXNzIEFib3J0IFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTUlTQUREICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxICkgICAvKiAoTUMpIE1pc2FsaWduZWQgQWRkZXNzIEFib3J0IFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfQUJUU1ogICAgICAgICAgICAgICAgICAgICAoIDB4MyA8PCA4ICkgICAvKiAoTUMpIEFib3J0IFNpemUgU3RhdHVzICovDQotI2RlZmluZSAgICAgQVQ5MUNfTUNfQUJUU1pfQllURSAgICAgICAgICAgICggMHgwIDw8IDggKSAgIC8qIChNQykgQnl0ZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX01DX0FCVFNaX0hXT1JEICAgICAgICAgICAoIDB4MSA8PCA4ICkgICAvKiAoTUMpIEhhbGYtd29yZCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX01DX0FCVFNaX1dPUkQgICAgICAgICAgICAoIDB4MiA8PCA4ICkgICAvKiAoTUMpIFdvcmQgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0FCVFRZUCAgICAgICAgICAgICAgICAgICAgKCAweDMgPDwgMTAgKSAgLyogKE1DKSBBYm9ydCBUeXBlIFN0YXR1cyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX01DX0FCVFRZUF9EQVRBUiAgICAgICAgICAoIDB4MCA8PCAxMCApICAvKiAoTUMpIERhdGEgUmVhZCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX01DX0FCVFRZUF9EQVRBVyAgICAgICAgICAoIDB4MSA8PCAxMCApICAvKiAoTUMpIERhdGEgV3JpdGUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19NQ19BQlRUWVBfRkVUQ0ggICAgICAgICAgKCAweDIgPDwgMTAgKSAgLyogKE1DKSBDb2RlIEZldGNoICovDQotI2RlZmluZSBBVDkxQ19NQ19NU1QwICAgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDE2ICkgIC8qIChNQykgTWFzdGVyIDAgQWJvcnQgU291cmNlICovDQotI2RlZmluZSBBVDkxQ19NQ19NU1QxICAgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDE3ICkgIC8qIChNQykgTWFzdGVyIDEgQWJvcnQgU291cmNlICovDQotI2RlZmluZSBBVDkxQ19NQ19TVk1TVDAgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDI0ICkgIC8qIChNQykgU2F2ZWQgTWFzdGVyIDAgQWJvcnQgU291cmNlICovDQotI2RlZmluZSBBVDkxQ19NQ19TVk1TVDEgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDI1ICkgIC8qIChNQykgU2F2ZWQgTWFzdGVyIDEgQWJvcnQgU291cmNlICovDQotLyogLS0tLS0tLS0gTUNfRk1SIDogKE1DIE9mZnNldDogMHg2MCkgTUMgRmxhc2ggTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfRlJEWSAgICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAwICkgICAvKiAoTUMpIEZsYXNoIFJlYWR5ICovDQotI2RlZmluZSBBVDkxQ19NQ19MT0NLRSAgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDIgKSAgIC8qIChNQykgTG9jayBFcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfUFJPR0UgICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAzICkgICAvKiAoTUMpIFByb2dyYW1taW5nIEVycm9yICovDQotI2RlZmluZSBBVDkxQ19NQ19ORUJQICAgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDcgKSAgIC8qIChNQykgTm8gRXJhc2UgQmVmb3JlIFByb2dyYW1taW5nICovDQotI2RlZmluZSBBVDkxQ19NQ19GV1MgICAgICAgICAgICAgICAgICAgICAgICggMHgzIDw8IDggKSAgIC8qIChNQykgRmxhc2ggV2FpdCBTdGF0ZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX01DX0ZXU18wRldTICAgICAgICAgICAgICAoIDB4MCA8PCA4ICkgICAvKiAoTUMpIDEgY3ljbGUgZm9yIFJlYWQsIDIgZm9yIFdyaXRlIG9wZXJhdGlvbnMgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19NQ19GV1NfMUZXUyAgICAgICAgICAgICAgKCAweDEgPDwgOCApICAgLyogKE1DKSAyIGN5Y2xlcyBmb3IgUmVhZCwgMyBmb3IgV3JpdGUgb3BlcmF0aW9ucyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX01DX0ZXU18yRldTICAgICAgICAgICAgICAoIDB4MiA8PCA4ICkgICAvKiAoTUMpIDMgY3ljbGVzIGZvciBSZWFkLCA0IGZvciBXcml0ZSBvcGVyYXRpb25zICovDQotI2RlZmluZSAgICAgQVQ5MUNfTUNfRldTXzNGV1MgICAgICAgICAgICAgICggMHgzIDw8IDggKSAgIC8qIChNQykgNCBjeWNsZXMgZm9yIFJlYWQsIDQgZm9yIFdyaXRlIG9wZXJhdGlvbnMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0ZNQ04gICAgICAgICAgICAgICAgICAgICAgKCAweEZGIDw8IDE2ICkgLyogKE1DKSBGbGFzaCBNaWNyb3NlY29uZCBDeWNsZSBOdW1iZXIgKi8NCi0vKiAtLS0tLS0tLSBNQ19GQ1IgOiAoTUMgT2Zmc2V0OiAweDY0KSBNQyBGbGFzaCBDb21tYW5kIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19NQ19GQ01EICAgICAgICAgICAgICAgICAgICAgICggMHhGIDw8IDAgKSAgIC8qIChNQykgRmxhc2ggQ29tbWFuZCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX01DX0ZDTURfU1RBUlRfUFJPRyAgICAgICAoIDB4MSApICAgICAgICAvKiAoTUMpIFN0YXJ0cyB0aGUgcHJvZ3JhbW1pbmcgb2YgdGggZXBhZ2Ugc3BlY2lmaWVkIGJ5IFBBR0VOLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX01DX0ZDTURfTE9DSyAgICAgICAgICAgICAoIDB4MiApICAgICAgICAvKiAoTUMpIFN0YXJ0cyBhIGxvY2sgc2VxdWVuY2Ugb2YgdGhlIHNlY3RvciBkZWZpbmVkIGJ5IHRoZSBiaXRzIDQgdG8gNyBvZiB0aGUgZmllbGQgUEFHRU4uICovDQotI2RlZmluZSAgICAgQVQ5MUNfTUNfRkNNRF9QUk9HX0FORF9MT0NLICAgICggMHgzICkgICAgICAgIC8qIChNQykgVGhlIGxvY2sgc2VxdWVuY2UgYXV0b21hdGljYWxseSBoYXBwZW5zIGFmdGVyIHRoZSBwcm9ncmFtbWluZyBzZXF1ZW5jZSBpcyBjb21wbGV0ZWQuICovDQotI2RlZmluZSAgICAgQVQ5MUNfTUNfRkNNRF9VTkxPQ0sgICAgICAgICAgICggMHg0ICkgICAgICAgIC8qIChNQykgU3RhcnRzIGFuIHVubG9jayBzZXF1ZW5jZSBvZiB0aGUgc2VjdG9yIGRlZmluZWQgYnkgdGhlIGJpdHMgNCB0byA3IG9mIHRoZSBmaWVsZCBQQUdFTi4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19NQ19GQ01EX0VSQVNFX0FMTCAgICAgICAgKCAweDggKSAgICAgICAgLyogKE1DKSBTdGFydHMgdGhlIGVyYXNlIG9mIHRoZSBlbnRpcmUgZmxhc2guSWYgYXQgbGVhc3QgYSBwYWdlIGlzIGxvY2tlZCwgdGhlIGNvbW1hbmQgaXMgY2FuY2VsbGVkLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX01DX0ZDTURfU0VUX0dQX05WTSAgICAgICAoIDB4QiApICAgICAgICAvKiAoTUMpIFNldCBHZW5lcmFsIFB1cnBvc2UgTlZNIGJpdHMuICovDQotI2RlZmluZSAgICAgQVQ5MUNfTUNfRkNNRF9DTFJfR1BfTlZNICAgICAgICggMHhEICkgICAgICAgIC8qIChNQykgQ2xlYXIgR2VuZXJhbCBQdXJwb3NlIE5WTSBiaXRzLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX01DX0ZDTURfU0VUX1NFQ1VSSVRZICAgICAoIDB4RiApICAgICAgICAvKiAoTUMpIFNldCBTZWN1cml0eSBCaXQuICovDQotI2RlZmluZSBBVDkxQ19NQ19QQUdFTiAgICAgICAgICAgICAgICAgICAgICggMHgzRkYgPDwgOCApIC8qIChNQykgUGFnZSBOdW1iZXIgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0tFWSAgICAgICAgICAgICAgICAgICAgICAgKCAweEZGIDw8IDI0ICkgLyogKE1DKSBXcml0aW5nIFByb3RlY3QgS2V5ICovDQotLyogLS0tLS0tLS0gTUNfRlNSIDogKE1DIE9mZnNldDogMHg2OCkgTUMgRmxhc2ggQ29tbWFuZCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfU0VDVVJJVFkgICAgICAgICAgICAgICAgICAoIDB4MSA8PCA0ICkgICAvKiAoTUMpIFNlY3VyaXR5IEJpdCBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0dQTlZNMCAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgOCApICAgLyogKE1DKSBTZWN0b3IgMCBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfR1BOVk0xICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCA5ICkgICAvKiAoTUMpIFNlY3RvciAxIExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19HUE5WTTIgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDEwICkgIC8qIChNQykgU2VjdG9yIDIgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0dQTlZNMyAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTEgKSAgLyogKE1DKSBTZWN0b3IgMyBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfR1BOVk00ICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxMiApICAvKiAoTUMpIFNlY3RvciA0IExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19HUE5WTTUgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDEzICkgIC8qIChNQykgU2VjdG9yIDUgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0dQTlZNNiAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTQgKSAgLyogKE1DKSBTZWN0b3IgNiBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfR1BOVk03ICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxNSApICAvKiAoTUMpIFNlY3RvciA3IExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19MT0NLUzAgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDE2ICkgIC8qIChNQykgU2VjdG9yIDAgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0xPQ0tTMSAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTcgKSAgLyogKE1DKSBTZWN0b3IgMSBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MyICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxOCApICAvKiAoTUMpIFNlY3RvciAyIExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19MT0NLUzMgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDE5ICkgIC8qIChNQykgU2VjdG9yIDMgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0xPQ0tTNCAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMjAgKSAgLyogKE1DKSBTZWN0b3IgNCBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTE9DS1M1ICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAyMSApICAvKiAoTUMpIFNlY3RvciA1IExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19MT0NLUzYgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDIyICkgIC8qIChNQykgU2VjdG9yIDYgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0xPQ0tTNyAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMjMgKSAgLyogKE1DKSBTZWN0b3IgNyBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTE9DS1M4ICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAyNCApICAvKiAoTUMpIFNlY3RvciA4IExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19MT0NLUzkgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDI1ICkgIC8qIChNQykgU2VjdG9yIDkgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0xPQ0tTMTAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMjYgKSAgLyogKE1DKSBTZWN0b3IgMTAgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0xPQ0tTMTEgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMjcgKSAgLyogKE1DKSBTZWN0b3IgMTEgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0xPQ0tTMTIgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMjggKSAgLyogKE1DKSBTZWN0b3IgMTIgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0xPQ0tTMTMgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMjkgKSAgLyogKE1DKSBTZWN0b3IgMTMgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0xPQ0tTMTQgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMzAgKSAgLyogKE1DKSBTZWN0b3IgMTQgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0xPQ0tTMTUgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMzEgKSAgLyogKE1DKSBTZWN0b3IgMTUgTG9jayBTdGF0dXMgKi8NCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIE1lbW9yeSBDb250cm9sbGVyIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19NQyBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBNQ19SQ1IgICAgICAgICAgKCAwKSAvLyBNQyBSZW1hcCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBNQ19BU1IgICAgICAgICAgKCA0KSAvLyBNQyBBYm9ydCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIE1DX0FBU1IgICAgICAgICAoIDgpIC8vIE1DIEFib3J0IEFkZHJlc3MgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBNQ19GTVIgICAgICAgICAgKDk2KSAvLyBNQyBGbGFzaCBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBNQ19GQ1IgICAgICAgICAgKDEwMCkgLy8gTUMgRmxhc2ggQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgTUNfRlNSICAgICAgICAgICgxMDQpIC8vIE1DIEZsYXNoIFN0YXR1cyBSZWdpc3Rlcg0KKy8vIC0tLS0tLS0tIE1DX1JDUiA6IChNQyBPZmZzZXQ6IDB4MCkgTUMgUmVtYXAgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX01DX1JDQiAgICAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKE1DKSBSZW1hcCBDb21tYW5kIEJpdA0KKy8vIC0tLS0tLS0tIE1DX0FTUiA6IChNQyBPZmZzZXQ6IDB4NCkgTUMgQWJvcnQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfTUNfVU5EQUREICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoTUMpIFVuZGVmaW5lZCBBZGRlc3MgQWJvcnQgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19NSVNBREQgICAgICAgICAgICgweDEgPDwgIDEpIC8vIChNQykgTWlzYWxpZ25lZCBBZGRlc3MgQWJvcnQgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19BQlRTWiAgICAgICAgICAgICgweDMgPDwgIDgpIC8vIChNQykgQWJvcnQgU2l6ZSBTdGF0dXMNCisjZGVmaW5lIAlBVDkxQ19NQ19BQlRTWl9CWVRFICAgICAgICAgICAgICAgICAoMHgwIDw8ICA4KSAvLyAoTUMpIEJ5dGUNCisjZGVmaW5lIAlBVDkxQ19NQ19BQlRTWl9IV09SRCAgICAgICAgICAgICAgICAoMHgxIDw8ICA4KSAvLyAoTUMpIEhhbGYtd29yZA0KKyNkZWZpbmUgCUFUOTFDX01DX0FCVFNaX1dPUkQgICAgICAgICAgICAgICAgICgweDIgPDwgIDgpIC8vIChNQykgV29yZA0KKyNkZWZpbmUgQVQ5MUNfTUNfQUJUVFlQICAgICAgICAgICAoMHgzIDw8IDEwKSAvLyAoTUMpIEFib3J0IFR5cGUgU3RhdHVzDQorI2RlZmluZSAJQVQ5MUNfTUNfQUJUVFlQX0RBVEFSICAgICAgICAgICAgICAgICgweDAgPDwgMTApIC8vIChNQykgRGF0YSBSZWFkDQorI2RlZmluZSAJQVQ5MUNfTUNfQUJUVFlQX0RBVEFXICAgICAgICAgICAgICAgICgweDEgPDwgMTApIC8vIChNQykgRGF0YSBXcml0ZQ0KKyNkZWZpbmUgCUFUOTFDX01DX0FCVFRZUF9GRVRDSCAgICAgICAgICAgICAgICAoMHgyIDw8IDEwKSAvLyAoTUMpIENvZGUgRmV0Y2gNCisjZGVmaW5lIEFUOTFDX01DX01TVDAgICAgICAgICAgICAgKDB4MSA8PCAxNikgLy8gKE1DKSBNYXN0ZXIgMCBBYm9ydCBTb3VyY2UNCisjZGVmaW5lIEFUOTFDX01DX01TVDEgICAgICAgICAgICAgKDB4MSA8PCAxNykgLy8gKE1DKSBNYXN0ZXIgMSBBYm9ydCBTb3VyY2UNCisjZGVmaW5lIEFUOTFDX01DX1NWTVNUMCAgICAgICAgICAgKDB4MSA8PCAyNCkgLy8gKE1DKSBTYXZlZCBNYXN0ZXIgMCBBYm9ydCBTb3VyY2UNCisjZGVmaW5lIEFUOTFDX01DX1NWTVNUMSAgICAgICAgICAgKDB4MSA8PCAyNSkgLy8gKE1DKSBTYXZlZCBNYXN0ZXIgMSBBYm9ydCBTb3VyY2UNCisvLyAtLS0tLS0tLSBNQ19GTVIgOiAoTUMgT2Zmc2V0OiAweDYwKSBNQyBGbGFzaCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfTUNfRlJEWSAgICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoTUMpIEZsYXNoIFJlYWR5DQorI2RlZmluZSBBVDkxQ19NQ19MT0NLRSAgICAgICAgICAgICgweDEgPDwgIDIpIC8vIChNQykgTG9jayBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfTUNfUFJPR0UgICAgICAgICAgICAoMHgxIDw8ICAzKSAvLyAoTUMpIFByb2dyYW1taW5nIEVycm9yDQorI2RlZmluZSBBVDkxQ19NQ19ORUJQICAgICAgICAgICAgICgweDEgPDwgIDcpIC8vIChNQykgTm8gRXJhc2UgQmVmb3JlIFByb2dyYW1taW5nDQorI2RlZmluZSBBVDkxQ19NQ19GV1MgICAgICAgICAgICAgICgweDMgPDwgIDgpIC8vIChNQykgRmxhc2ggV2FpdCBTdGF0ZQ0KKyNkZWZpbmUgCUFUOTFDX01DX0ZXU18wRldTICAgICAgICAgICAgICAgICAoMHgwIDw8ICA4KSAvLyAoTUMpIDEgY3ljbGUgZm9yIFJlYWQsIDIgZm9yIFdyaXRlIG9wZXJhdGlvbnMNCisjZGVmaW5lIAlBVDkxQ19NQ19GV1NfMUZXUyAgICAgICAgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKE1DKSAyIGN5Y2xlcyBmb3IgUmVhZCwgMyBmb3IgV3JpdGUgb3BlcmF0aW9ucw0KKyNkZWZpbmUgCUFUOTFDX01DX0ZXU18yRldTICAgICAgICAgICAgICAgICAoMHgyIDw8ICA4KSAvLyAoTUMpIDMgY3ljbGVzIGZvciBSZWFkLCA0IGZvciBXcml0ZSBvcGVyYXRpb25zDQorI2RlZmluZSAJQVQ5MUNfTUNfRldTXzNGV1MgICAgICAgICAgICAgICAgICgweDMgPDwgIDgpIC8vIChNQykgNCBjeWNsZXMgZm9yIFJlYWQsIDQgZm9yIFdyaXRlIG9wZXJhdGlvbnMNCisjZGVmaW5lIEFUOTFDX01DX0ZNQ04gICAgICAgICAgICAgKDB4RkYgPDwgMTYpIC8vIChNQykgRmxhc2ggTWljcm9zZWNvbmQgQ3ljbGUgTnVtYmVyDQorLy8gLS0tLS0tLS0gTUNfRkNSIDogKE1DIE9mZnNldDogMHg2NCkgTUMgRmxhc2ggQ29tbWFuZCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX01DX0ZDTUQgICAgICAgICAgICAgKDB4RiA8PCAgMCkgLy8gKE1DKSBGbGFzaCBDb21tYW5kDQorI2RlZmluZSAJQVQ5MUNfTUNfRkNNRF9TVEFSVF9QUk9HICAgICAgICAgICAoMHgxKSAvLyAoTUMpIFN0YXJ0cyB0aGUgcHJvZ3JhbW1pbmcgb2YgdGggZXBhZ2Ugc3BlY2lmaWVkIGJ5IFBBR0VOLg0KKyNkZWZpbmUgCUFUOTFDX01DX0ZDTURfTE9DSyAgICAgICAgICAgICAgICAgKDB4MikgLy8gKE1DKSBTdGFydHMgYSBsb2NrIHNlcXVlbmNlIG9mIHRoZSBzZWN0b3IgZGVmaW5lZCBieSB0aGUgYml0cyA0IHRvIDcgb2YgdGhlIGZpZWxkIFBBR0VOLg0KKyNkZWZpbmUgCUFUOTFDX01DX0ZDTURfUFJPR19BTkRfTE9DSyAgICAgICAgKDB4MykgLy8gKE1DKSBUaGUgbG9jayBzZXF1ZW5jZSBhdXRvbWF0aWNhbGx5IGhhcHBlbnMgYWZ0ZXIgdGhlIHByb2dyYW1taW5nIHNlcXVlbmNlIGlzIGNvbXBsZXRlZC4NCisjZGVmaW5lIAlBVDkxQ19NQ19GQ01EX1VOTE9DSyAgICAgICAgICAgICAgICgweDQpIC8vIChNQykgU3RhcnRzIGFuIHVubG9jayBzZXF1ZW5jZSBvZiB0aGUgc2VjdG9yIGRlZmluZWQgYnkgdGhlIGJpdHMgNCB0byA3IG9mIHRoZSBmaWVsZCBQQUdFTi4NCisjZGVmaW5lIAlBVDkxQ19NQ19GQ01EX0VSQVNFX0FMTCAgICAgICAgICAgICgweDgpIC8vIChNQykgU3RhcnRzIHRoZSBlcmFzZSBvZiB0aGUgZW50aXJlIGZsYXNoLklmIGF0IGxlYXN0IGEgcGFnZSBpcyBsb2NrZWQsIHRoZSBjb21tYW5kIGlzIGNhbmNlbGxlZC4NCisjZGVmaW5lIAlBVDkxQ19NQ19GQ01EX1NFVF9HUF9OVk0gICAgICAgICAgICgweEIpIC8vIChNQykgU2V0IEdlbmVyYWwgUHVycG9zZSBOVk0gYml0cy4NCisjZGVmaW5lIAlBVDkxQ19NQ19GQ01EX0NMUl9HUF9OVk0gICAgICAgICAgICgweEQpIC8vIChNQykgQ2xlYXIgR2VuZXJhbCBQdXJwb3NlIE5WTSBiaXRzLg0KKyNkZWZpbmUgCUFUOTFDX01DX0ZDTURfU0VUX1NFQ1VSSVRZICAgICAgICAgKDB4RikgLy8gKE1DKSBTZXQgU2VjdXJpdHkgQml0Lg0KKyNkZWZpbmUgQVQ5MUNfTUNfUEFHRU4gICAgICAgICAgICAoMHgzRkYgPDwgIDgpIC8vIChNQykgUGFnZSBOdW1iZXINCisjZGVmaW5lIEFUOTFDX01DX0tFWSAgICAgICAgICAgICAgKDB4RkYgPDwgMjQpIC8vIChNQykgV3JpdGluZyBQcm90ZWN0IEtleQ0KKy8vIC0tLS0tLS0tIE1DX0ZTUiA6IChNQyBPZmZzZXQ6IDB4NjgpIE1DIEZsYXNoIENvbW1hbmQgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19NQ19TRUNVUklUWSAgICAgICAgICgweDEgPDwgIDQpIC8vIChNQykgU2VjdXJpdHkgQml0IFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfR1BOVk0wICAgICAgICAgICAoMHgxIDw8ICA4KSAvLyAoTUMpIFNlY3RvciAwIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19HUE5WTTEgICAgICAgICAgICgweDEgPDwgIDkpIC8vIChNQykgU2VjdG9yIDEgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0dQTlZNMiAgICAgICAgICAgKDB4MSA8PCAxMCkgLy8gKE1DKSBTZWN0b3IgMiBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfR1BOVk0zICAgICAgICAgICAoMHgxIDw8IDExKSAvLyAoTUMpIFNlY3RvciAzIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19HUE5WTTQgICAgICAgICAgICgweDEgPDwgMTIpIC8vIChNQykgU2VjdG9yIDQgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0dQTlZNNSAgICAgICAgICAgKDB4MSA8PCAxMykgLy8gKE1DKSBTZWN0b3IgNSBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfR1BOVk02ICAgICAgICAgICAoMHgxIDw8IDE0KSAvLyAoTUMpIFNlY3RvciA2IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19HUE5WTTcgICAgICAgICAgICgweDEgPDwgMTUpIC8vIChNQykgU2VjdG9yIDcgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTMCAgICAgICAgICAgKDB4MSA8PCAxNikgLy8gKE1DKSBTZWN0b3IgMCBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxICAgICAgICAgICAoMHgxIDw8IDE3KSAvLyAoTUMpIFNlY3RvciAxIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzIgICAgICAgICAgICgweDEgPDwgMTgpIC8vIChNQykgU2VjdG9yIDIgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTMyAgICAgICAgICAgKDB4MSA8PCAxOSkgLy8gKE1DKSBTZWN0b3IgMyBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1M0ICAgICAgICAgICAoMHgxIDw8IDIwKSAvLyAoTUMpIFNlY3RvciA0IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzUgICAgICAgICAgICgweDEgPDwgMjEpIC8vIChNQykgU2VjdG9yIDUgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTNiAgICAgICAgICAgKDB4MSA8PCAyMikgLy8gKE1DKSBTZWN0b3IgNiBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1M3ICAgICAgICAgICAoMHgxIDw8IDIzKSAvLyAoTUMpIFNlY3RvciA3IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzggICAgICAgICAgICgweDEgPDwgMjQpIC8vIChNQykgU2VjdG9yIDggTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTOSAgICAgICAgICAgKDB4MSA8PCAyNSkgLy8gKE1DKSBTZWN0b3IgOSBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxMCAgICAgICAgICAoMHgxIDw8IDI2KSAvLyAoTUMpIFNlY3RvciAxMCBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxMSAgICAgICAgICAoMHgxIDw8IDI3KSAvLyAoTUMpIFNlY3RvciAxMSBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxMiAgICAgICAgICAoMHgxIDw8IDI4KSAvLyAoTUMpIFNlY3RvciAxMiBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxMyAgICAgICAgICAoMHgxIDw8IDI5KSAvLyAoTUMpIFNlY3RvciAxMyBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxNCAgICAgICAgICAoMHgxIDw8IDMwKSAvLyAoTUMpIFNlY3RvciAxNCBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxNSAgICAgICAgICAoMHgxIDw8IDMxKSAvLyAoTUMpIFNlY3RvciAxNSBMb2NrIFN0YXR1cw0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgU2VyaWFsIFBhcmFsbGVsIEludGVyZmFjZSAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19TUEkgc3RydWN0dXJlICoqKiAqLw0KLSNkZWZpbmUgU1BJX0NSICAgICAgICAgICAgICAgICAgICAgICAoIDAgKSAgICAgICAgICAgLyogQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1BJX01SICAgICAgICAgICAgICAgICAgICAgICAoIDQgKSAgICAgICAgICAgLyogTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1BJX1JEUiAgICAgICAgICAgICAgICAgICAgICAoIDggKSAgICAgICAgICAgLyogUmVjZWl2ZSBEYXRhIFJlZ2lzdGVyICovDQotI2RlZmluZSBTUElfVERSICAgICAgICAgICAgICAgICAgICAgICggMTIgKSAgICAgICAgICAvKiBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyICovDQotI2RlZmluZSBTUElfU1IgICAgICAgICAgICAgICAgICAgICAgICggMTYgKSAgICAgICAgICAvKiBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNQSV9JRVIgICAgICAgICAgICAgICAgICAgICAgKCAyMCApICAgICAgICAgIC8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNQSV9JRFIgICAgICAgICAgICAgICAgICAgICAgKCAyNCApICAgICAgICAgIC8qIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBTUElfSU1SICAgICAgICAgICAgICAgICAgICAgICggMjggKSAgICAgICAgICAvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1BJX0NTUiAgICAgICAgICAgICAgICAgICAgICAoIDQ4ICkgICAgICAgICAgLyogQ2hpcCBTZWxlY3QgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNQSV9SUFIgICAgICAgICAgICAgICAgICAgICAgKCAyNTYgKSAgICAgICAgIC8qIFJlY2VpdmUgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1BJX1JDUiAgICAgICAgICAgICAgICAgICAgICAoIDI2MCApICAgICAgICAgLyogUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBTUElfVFBSICAgICAgICAgICAgICAgICAgICAgICggMjY0ICkgICAgICAgICAvKiBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBTUElfVENSICAgICAgICAgICAgICAgICAgICAgICggMjY4ICkgICAgICAgICAvKiBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBTUElfUk5QUiAgICAgICAgICAgICAgICAgICAgICggMjcyICkgICAgICAgICAvKiBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1BJX1JOQ1IgICAgICAgICAgICAgICAgICAgICAoIDI3NiApICAgICAgICAgLyogUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNQSV9UTlBSICAgICAgICAgICAgICAgICAgICAgKCAyODAgKSAgICAgICAgIC8qIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1BJX1ROQ1IgICAgICAgICAgICAgICAgICAgICAoIDI4NCApICAgICAgICAgLyogVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBTUElfUFRDUiAgICAgICAgICAgICAgICAgICAgICggMjg4ICkgICAgICAgICAvKiBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1BJX1BUU1IgICAgICAgICAgICAgICAgICAgICAoIDI5MiApICAgICAgICAgLyogUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLS8qIC0tLS0tLS0tIFNQSV9DUiA6IChTUEkgT2Zmc2V0OiAweDApIFNQSSBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19TUElfU1BJRU4gICAgICAgICAgICAgICggMHgxIDw8IDAgKSAgICAvKiAoU1BJKSBTUEkgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19TUElfU1BJRElTICAgICAgICAgICAgICggMHgxIDw8IDEgKSAgICAvKiAoU1BJKSBTUEkgRGlzYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX1NXUlNUICAgICAgICAgICAgICAoIDB4MSA8PCA3ICkgICAgLyogKFNQSSkgU1BJIFNvZnR3YXJlIHJlc2V0ICovDQotI2RlZmluZSBBVDkxQ19TUElfTEFTVFhGRVIgICAgICAgICAgICggMHgxIDw8IDI0ICkgICAvKiAoU1BJKSBTUEkgTGFzdCBUcmFuc2ZlciAqLw0KLS8qIC0tLS0tLS0tIFNQSV9NUiA6IChTUEkgT2Zmc2V0OiAweDQpIFNQSSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19TUElfTVNUUiAgICAgICAgICAgICAgICggMHgxIDw8IDAgKSAgICAvKiAoU1BJKSBNYXN0ZXIvU2xhdmUgTW9kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX1BTICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxICkgICAgLyogKFNQSSkgUGVyaXBoZXJhbCBTZWxlY3QgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TUElfUFNfRklYRUQgICAgICAgKCAweDAgPDwgMSApICAgIC8qIChTUEkpIEZpeGVkIFBlcmlwaGVyYWwgU2VsZWN0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1BJX1BTX1ZBUklBQkxFICAgICggMHgxIDw8IDEgKSAgICAvKiAoU1BJKSBWYXJpYWJsZSBQZXJpcGhlcmFsIFNlbGVjdCAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX1BDU0RFQyAgICAgICAgICAgICAoIDB4MSA8PCAyICkgICAgLyogKFNQSSkgQ2hpcCBTZWxlY3QgRGVjb2RlICovDQotI2RlZmluZSBBVDkxQ19TUElfRkRJViAgICAgICAgICAgICAgICggMHgxIDw8IDMgKSAgICAvKiAoU1BJKSBDbG9jayBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9NT0RGRElTICAgICAgICAgICAgKCAweDEgPDwgNCApICAgIC8qIChTUEkpIE1vZGUgRmF1bHQgRGV0ZWN0aW9uICovDQotI2RlZmluZSBBVDkxQ19TUElfTExCICAgICAgICAgICAgICAgICggMHgxIDw8IDcgKSAgICAvKiAoU1BJKSBDbG9jayBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9QQ1MgICAgICAgICAgICAgICAgKCAweEYgPDwgMTYgKSAgIC8qIChTUEkpIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9ETFlCQ1MgICAgICAgICAgICAgKCAweEZGIDw8IDI0ICkgIC8qIChTUEkpIERlbGF5IEJldHdlZW4gQ2hpcCBTZWxlY3RzICovDQotLyogLS0tLS0tLS0gU1BJX1JEUiA6IChTUEkgT2Zmc2V0OiAweDgpIFJlY2VpdmUgRGF0YSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX1JEICAgICAgICAgICAgICAgICAoIDB4RkZGRiA8PCAwICkgLyogKFNQSSkgUmVjZWl2ZSBEYXRhICovDQotI2RlZmluZSBBVDkxQ19TUElfUlBDUyAgICAgICAgICAgICAgICggMHhGIDw8IDE2ICkgICAvKiAoU1BJKSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IFN0YXR1cyAqLw0KLS8qIC0tLS0tLS0tIFNQSV9URFIgOiAoU1BJIE9mZnNldDogMHhjKSBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19TUElfVEQgICAgICAgICAgICAgICAgICggMHhGRkZGIDw8IDAgKSAvKiAoU1BJKSBUcmFuc21pdCBEYXRhICovDQotI2RlZmluZSBBVDkxQ19TUElfVFBDUyAgICAgICAgICAgICAgICggMHhGIDw8IDE2ICkgICAvKiAoU1BJKSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IFN0YXR1cyAqLw0KLS8qIC0tLS0tLS0tIFNQSV9TUiA6IChTUEkgT2Zmc2V0OiAweDEwKSBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9SRFJGICAgICAgICAgICAgICAgKCAweDEgPDwgMCApICAgIC8qIChTUEkpIFJlY2VpdmUgRGF0YSBSZWdpc3RlciBGdWxsICovDQotI2RlZmluZSBBVDkxQ19TUElfVERSRSAgICAgICAgICAgICAgICggMHgxIDw8IDEgKSAgICAvKiAoU1BJKSBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyIEVtcHR5ICovDQotI2RlZmluZSBBVDkxQ19TUElfTU9ERiAgICAgICAgICAgICAgICggMHgxIDw8IDIgKSAgICAvKiAoU1BJKSBNb2RlIEZhdWx0IEVycm9yICovDQotI2RlZmluZSBBVDkxQ19TUElfT1ZSRVMgICAgICAgICAgICAgICggMHgxIDw8IDMgKSAgICAvKiAoU1BJKSBPdmVycnVuIEVycm9yIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX0VORFJYICAgICAgICAgICAgICAoIDB4MSA8PCA0ICkgICAgLyogKFNQSSkgRW5kIG9mIFJlY2VpdmVyIFRyYW5zZmVyICovDQotI2RlZmluZSBBVDkxQ19TUElfRU5EVFggICAgICAgICAgICAgICggMHgxIDw8IDUgKSAgICAvKiAoU1BJKSBFbmQgb2YgUmVjZWl2ZXIgVHJhbnNmZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9SWEJVRkYgICAgICAgICAgICAgKCAweDEgPDwgNiApICAgIC8qIChTUEkpIFJYQlVGRiBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9UWEJVRkUgICAgICAgICAgICAgKCAweDEgPDwgNyApICAgIC8qIChTUEkpIFRYQlVGRSBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9OU1NSICAgICAgICAgICAgICAgKCAweDEgPDwgOCApICAgIC8qIChTUEkpIE5TU1IgSW50ZXJydXB0ICovDQotI2RlZmluZSBBVDkxQ19TUElfVFhFTVBUWSAgICAgICAgICAgICggMHgxIDw8IDkgKSAgICAvKiAoU1BJKSBUWEVNUFRZIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX1NQSUVOUyAgICAgICAgICAgICAoIDB4MSA8PCAxNiApICAgLyogKFNQSSkgRW5hYmxlIFN0YXR1cyAqLw0KLS8qIC0tLS0tLS0tIFNQSV9JRVIgOiAoU1BJIE9mZnNldDogMHgxNCkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFNQSV9JRFIgOiAoU1BJIE9mZnNldDogMHgxOCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBTUElfSU1SIDogKFNQSSBPZmZzZXQ6IDB4MWMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gU1BJX0NTUiA6IChTUEkgT2Zmc2V0OiAweDMwKSBDaGlwIFNlbGVjdCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX0NQT0wgICAgICAgICAgICggMHgxIDw8IDAgKSAgIC8qIChTUEkpIENsb2NrIFBvbGFyaXR5ICovDQotI2RlZmluZSBBVDkxQ19TUElfTkNQSEEgICAgICAgICAgKCAweDEgPDwgMSApICAgLyogKFNQSSkgQ2xvY2sgUGhhc2UgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9DU0FBVCAgICAgICAgICAoIDB4MSA8PCAyICkgICAvKiAoU1BJKSBDaGlwIFNlbGVjdCBBY3RpdmUgQWZ0ZXIgVHJhbnNmZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9CSVRTICAgICAgICAgICAoIDB4RiA8PCA0ICkgICAvKiAoU1BJKSBCaXRzIFBlciBUcmFuc2ZlciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NQSV9CSVRTXzggICAgICggMHgwIDw8IDQgKSAgIC8qIChTUEkpIDggQml0cyBQZXIgdHJhbnNmZXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TUElfQklUU185ICAgICAoIDB4MSA8PCA0ICkgICAvKiAoU1BJKSA5IEJpdHMgUGVyIHRyYW5zZmVyICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1BJX0JJVFNfMTAgICAgKCAweDIgPDwgNCApICAgLyogKFNQSSkgMTAgQml0cyBQZXIgdHJhbnNmZXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TUElfQklUU18xMSAgICAoIDB4MyA8PCA0ICkgICAvKiAoU1BJKSAxMSBCaXRzIFBlciB0cmFuc2ZlciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NQSV9CSVRTXzEyICAgICggMHg0IDw8IDQgKSAgIC8qIChTUEkpIDEyIEJpdHMgUGVyIHRyYW5zZmVyICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1BJX0JJVFNfMTMgICAgKCAweDUgPDwgNCApICAgLyogKFNQSSkgMTMgQml0cyBQZXIgdHJhbnNmZXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TUElfQklUU18xNCAgICAoIDB4NiA8PCA0ICkgICAvKiAoU1BJKSAxNCBCaXRzIFBlciB0cmFuc2ZlciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NQSV9CSVRTXzE1ICAgICggMHg3IDw8IDQgKSAgIC8qIChTUEkpIDE1IEJpdHMgUGVyIHRyYW5zZmVyICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1BJX0JJVFNfMTYgICAgKCAweDggPDwgNCApICAgLyogKFNQSSkgMTYgQml0cyBQZXIgdHJhbnNmZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9TQ0JSICAgICAgICAgICAoIDB4RkYgPDwgOCApICAvKiAoU1BJKSBTZXJpYWwgQ2xvY2sgQmF1ZCBSYXRlICovDQotI2RlZmluZSBBVDkxQ19TUElfRExZQlMgICAgICAgICAgKCAweEZGIDw8IDE2ICkgLyogKFNQSSkgU2VyaWFsIENsb2NrIEJhdWQgUmF0ZSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX0RMWUJDVCAgICAgICAgICggMHhGRiA8PCAyNCApIC8qIChTUEkpIERlbGF5IEJldHdlZW4gQ29uc2VjdXRpdmUgVHJhbnNmZXJzICovDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBTZXJpYWwgUGFyYWxsZWwgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1NQSSBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBTUElfQ1IgICAgICAgICAgKCAwKSAvLyBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBTUElfTVIgICAgICAgICAgKCA0KSAvLyBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBTUElfUkRSICAgICAgICAgKCA4KSAvLyBSZWNlaXZlIERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIFNQSV9URFIgICAgICAgICAoMTIpIC8vIFRyYW5zbWl0IERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIFNQSV9TUiAgICAgICAgICAoMTYpIC8vIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgU1BJX0lFUiAgICAgICAgICgyMCkgLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1BJX0lEUiAgICAgICAgICgyNCkgLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIFNQSV9JTVIgICAgICAgICAoMjgpIC8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBTUElfQ1NSICAgICAgICAgKDQ4KSAvLyBDaGlwIFNlbGVjdCBSZWdpc3Rlcg0KKyNkZWZpbmUgU1BJX1JQUiAgICAgICAgICgyNTYpIC8vIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgU1BJX1JDUiAgICAgICAgICgyNjApIC8vIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgU1BJX1RQUiAgICAgICAgICgyNjQpIC8vIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFNQSV9UQ1IgICAgICAgICAoMjY4KSAvLyBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBTUElfUk5QUiAgICAgICAgKDI3MikgLy8gUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFNQSV9STkNSICAgICAgICAoMjc2KSAvLyBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgU1BJX1ROUFIgICAgICAgICgyODApIC8vIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgU1BJX1ROQ1IgICAgICAgICgyODQpIC8vIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgU1BJX1BUQ1IgICAgICAgICgyODgpIC8vIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBTUElfUFRTUiAgICAgICAgKDI5MikgLy8gUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKy8vIC0tLS0tLS0tIFNQSV9DUiA6IChTUEkgT2Zmc2V0OiAweDApIFNQSSBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1BJX1NQSUVOICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoU1BJKSBTUEkgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19TUElfU1BJRElTICAgICAgICAgICgweDEgPDwgIDEpIC8vIChTUEkpIFNQSSBEaXNhYmxlDQorI2RlZmluZSBBVDkxQ19TUElfU1dSU1QgICAgICAgICAgICgweDEgPDwgIDcpIC8vIChTUEkpIFNQSSBTb2Z0d2FyZSByZXNldA0KKyNkZWZpbmUgQVQ5MUNfU1BJX0xBU1RYRkVSICAgICAgICAoMHgxIDw8IDI0KSAvLyAoU1BJKSBTUEkgTGFzdCBUcmFuc2Zlcg0KKy8vIC0tLS0tLS0tIFNQSV9NUiA6IChTUEkgT2Zmc2V0OiAweDQpIFNQSSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1BJX01TVFIgICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoU1BJKSBNYXN0ZXIvU2xhdmUgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX1BTICAgICAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoU1BJKSBQZXJpcGhlcmFsIFNlbGVjdA0KKyNkZWZpbmUgCUFUOTFDX1NQSV9QU19GSVhFRCAgICAgICAgICAgICAgICAoMHgwIDw8ICAxKSAvLyAoU1BJKSBGaXhlZCBQZXJpcGhlcmFsIFNlbGVjdA0KKyNkZWZpbmUgCUFUOTFDX1NQSV9QU19WQVJJQUJMRSAgICAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoU1BJKSBWYXJpYWJsZSBQZXJpcGhlcmFsIFNlbGVjdA0KKyNkZWZpbmUgQVQ5MUNfU1BJX1BDU0RFQyAgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoU1BJKSBDaGlwIFNlbGVjdCBEZWNvZGUNCisjZGVmaW5lIEFUOTFDX1NQSV9GRElWICAgICAgICAgICAgKDB4MSA8PCAgMykgLy8gKFNQSSkgQ2xvY2sgU2VsZWN0aW9uDQorI2RlZmluZSBBVDkxQ19TUElfTU9ERkRJUyAgICAgICAgICgweDEgPDwgIDQpIC8vIChTUEkpIE1vZGUgRmF1bHQgRGV0ZWN0aW9uDQorI2RlZmluZSBBVDkxQ19TUElfTExCICAgICAgICAgICAgICgweDEgPDwgIDcpIC8vIChTUEkpIENsb2NrIFNlbGVjdGlvbg0KKyNkZWZpbmUgQVQ5MUNfU1BJX1BDUyAgICAgICAgICAgICAoMHhGIDw8IDE2KSAvLyAoU1BJKSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0DQorI2RlZmluZSBBVDkxQ19TUElfRExZQkNTICAgICAgICAgICgweEZGIDw8IDI0KSAvLyAoU1BJKSBEZWxheSBCZXR3ZWVuIENoaXAgU2VsZWN0cw0KKy8vIC0tLS0tLS0tIFNQSV9SRFIgOiAoU1BJIE9mZnNldDogMHg4KSBSZWNlaXZlIERhdGEgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TUElfUkQgICAgICAgICAgICAgICgweEZGRkYgPDwgIDApIC8vIChTUEkpIFJlY2VpdmUgRGF0YQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX1JQQ1MgICAgICAgICAgICAoMHhGIDw8IDE2KSAvLyAoU1BJKSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IFN0YXR1cw0KKy8vIC0tLS0tLS0tIFNQSV9URFIgOiAoU1BJIE9mZnNldDogMHhjKSBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1BJX1REICAgICAgICAgICAgICAoMHhGRkZGIDw8ICAwKSAvLyAoU1BJKSBUcmFuc21pdCBEYXRhDQorI2RlZmluZSBBVDkxQ19TUElfVFBDUyAgICAgICAgICAgICgweEYgPDwgMTYpIC8vIChTUEkpIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgU3RhdHVzDQorLy8gLS0tLS0tLS0gU1BJX1NSIDogKFNQSSBPZmZzZXQ6IDB4MTApIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NQSV9SRFJGICAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFNQSSkgUmVjZWl2ZSBEYXRhIFJlZ2lzdGVyIEZ1bGwNCisjZGVmaW5lIEFUOTFDX1NQSV9URFJFICAgICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKFNQSSkgVHJhbnNtaXQgRGF0YSBSZWdpc3RlciBFbXB0eQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX01PREYgICAgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoU1BJKSBNb2RlIEZhdWx0IEVycm9yDQorI2RlZmluZSBBVDkxQ19TUElfT1ZSRVMgICAgICAgICAgICgweDEgPDwgIDMpIC8vIChTUEkpIE92ZXJydW4gRXJyb3IgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19TUElfRU5EUlggICAgICAgICAgICgweDEgPDwgIDQpIC8vIChTUEkpIEVuZCBvZiBSZWNlaXZlciBUcmFuc2Zlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJX0VORFRYICAgICAgICAgICAoMHgxIDw8ICA1KSAvLyAoU1BJKSBFbmQgb2YgUmVjZWl2ZXIgVHJhbnNmZXINCisjZGVmaW5lIEFUOTFDX1NQSV9SWEJVRkYgICAgICAgICAgKDB4MSA8PCAgNikgLy8gKFNQSSkgUlhCVUZGIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfU1BJX1RYQlVGRSAgICAgICAgICAoMHgxIDw8ICA3KSAvLyAoU1BJKSBUWEJVRkUgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19TUElfTlNTUiAgICAgICAgICAgICgweDEgPDwgIDgpIC8vIChTUEkpIE5TU1IgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19TUElfVFhFTVBUWSAgICAgICAgICgweDEgPDwgIDkpIC8vIChTUEkpIFRYRU1QVFkgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19TUElfU1BJRU5TICAgICAgICAgICgweDEgPDwgMTYpIC8vIChTUEkpIEVuYWJsZSBTdGF0dXMNCisvLyAtLS0tLS0tLSBTUElfSUVSIDogKFNQSSBPZmZzZXQ6IDB4MTQpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gU1BJX0lEUiA6IChTUEkgT2Zmc2V0OiAweDE4KSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBTUElfSU1SIDogKFNQSSBPZmZzZXQ6IDB4MWMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFNQSV9DU1IgOiAoU1BJIE9mZnNldDogMHgzMCkgQ2hpcCBTZWxlY3QgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TUElfQ1BPTCAgICAgICAgICAgICgweDEgPDwgIDApIC8vIChTUEkpIENsb2NrIFBvbGFyaXR5DQorI2RlZmluZSBBVDkxQ19TUElfTkNQSEEgICAgICAgICAgICgweDEgPDwgIDEpIC8vIChTUEkpIENsb2NrIFBoYXNlDQorI2RlZmluZSBBVDkxQ19TUElfQ1NBQVQgICAgICAgICAgICgweDEgPDwgIDIpIC8vIChTUEkpIENoaXAgU2VsZWN0IEFjdGl2ZSBBZnRlciBUcmFuc2Zlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJX0JJVFMgICAgICAgICAgICAoMHhGIDw8ICA0KSAvLyAoU1BJKSBCaXRzIFBlciBUcmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NQSV9CSVRTXzggICAgICAgICAgICAgICAgICAgICgweDAgPDwgIDQpIC8vIChTUEkpIDggQml0cyBQZXIgdHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TUElfQklUU185ICAgICAgICAgICAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoU1BJKSA5IEJpdHMgUGVyIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1BJX0JJVFNfMTAgICAgICAgICAgICAgICAgICAgKDB4MiA8PCAgNCkgLy8gKFNQSSkgMTAgQml0cyBQZXIgdHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TUElfQklUU18xMSAgICAgICAgICAgICAgICAgICAoMHgzIDw8ICA0KSAvLyAoU1BJKSAxMSBCaXRzIFBlciB0cmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NQSV9CSVRTXzEyICAgICAgICAgICAgICAgICAgICgweDQgPDwgIDQpIC8vIChTUEkpIDEyIEJpdHMgUGVyIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1BJX0JJVFNfMTMgICAgICAgICAgICAgICAgICAgKDB4NSA8PCAgNCkgLy8gKFNQSSkgMTMgQml0cyBQZXIgdHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TUElfQklUU18xNCAgICAgICAgICAgICAgICAgICAoMHg2IDw8ICA0KSAvLyAoU1BJKSAxNCBCaXRzIFBlciB0cmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NQSV9CSVRTXzE1ICAgICAgICAgICAgICAgICAgICgweDcgPDwgIDQpIC8vIChTUEkpIDE1IEJpdHMgUGVyIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1BJX0JJVFNfMTYgICAgICAgICAgICAgICAgICAgKDB4OCA8PCAgNCkgLy8gKFNQSSkgMTYgQml0cyBQZXIgdHJhbnNmZXINCisjZGVmaW5lIEFUOTFDX1NQSV9TQ0JSICAgICAgICAgICAgKDB4RkYgPDwgIDgpIC8vIChTUEkpIFNlcmlhbCBDbG9jayBCYXVkIFJhdGUNCisjZGVmaW5lIEFUOTFDX1NQSV9ETFlCUyAgICAgICAgICAgKDB4RkYgPDwgMTYpIC8vIChTUEkpIFNlcmlhbCBDbG9jayBCYXVkIFJhdGUNCisjZGVmaW5lIEFUOTFDX1NQSV9ETFlCQ1QgICAgICAgICAgKDB4RkYgPDwgMjQpIC8vIChTUEkpIERlbGF5IEJldHdlZW4gQ29uc2VjdXRpdmUgVHJhbnNmZXJzDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBBbmFsb2cgdG8gRGlnaXRhbCBDb252ZXJ0b3IgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfQURDIHN0cnVjdHVyZSAqKiogKi8NCi0jZGVmaW5lIEFEQ19DUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAwICkgICAgICAgICAgLyogQURDIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFEQ19NUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCA0ICkgICAgICAgICAgLyogQURDIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFEQ19DSEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAxNiApICAgICAgICAgLyogQURDIENoYW5uZWwgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBRENfQ0hEUiAgICAgICAgICAgICAgICAgICAgICAgICAgICggMjAgKSAgICAgICAgIC8qIEFEQyBDaGFubmVsIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFEQ19DSFNSICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAyNCApICAgICAgICAgLyogQURDIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBRENfU1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMjggKSAgICAgICAgIC8qIEFEQyBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFEQ19MQ0RSICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAzMiApICAgICAgICAgLyogQURDIExhc3QgQ29udmVydGVkIERhdGEgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFEQ19JRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAzNiApICAgICAgICAgLyogQURDIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFEQ19JRFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCA0MCApICAgICAgICAgLyogQURDIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBRENfSU1SICAgICAgICAgICAgICAgICAgICAgICAgICAgICggNDQgKSAgICAgICAgIC8qIEFEQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQURDX0NEUjAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDQ4ICkgICAgICAgICAvKiBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDAgKi8NCi0jZGVmaW5lIEFEQ19DRFIxICAgICAgICAgICAgICAgICAgICAgICAgICAgKCA1MiApICAgICAgICAgLyogQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAxICovDQotI2RlZmluZSBBRENfQ0RSMiAgICAgICAgICAgICAgICAgICAgICAgICAgICggNTYgKSAgICAgICAgIC8qIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMiAqLw0KLSNkZWZpbmUgQURDX0NEUjMgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDYwICkgICAgICAgICAvKiBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDMgKi8NCi0jZGVmaW5lIEFEQ19DRFI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgKCA2NCApICAgICAgICAgLyogQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA0ICovDQotI2RlZmluZSBBRENfQ0RSNSAgICAgICAgICAgICAgICAgICAgICAgICAgICggNjggKSAgICAgICAgIC8qIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNSAqLw0KLSNkZWZpbmUgQURDX0NEUjYgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDcyICkgICAgICAgICAvKiBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDYgKi8NCi0jZGVmaW5lIEFEQ19DRFI3ICAgICAgICAgICAgICAgICAgICAgICAgICAgKCA3NiApICAgICAgICAgLyogQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA3ICovDQotI2RlZmluZSBBRENfUlBSICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMjU2ICkgICAgICAgIC8qIFJlY2VpdmUgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQURDX1JDUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDI2MCApICAgICAgICAvKiBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFEQ19UUFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAyNjQgKSAgICAgICAgLyogVHJhbnNtaXQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQURDX1RDUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDI2OCApICAgICAgICAvKiBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBRENfUk5QUiAgICAgICAgICAgICAgICAgICAgICAgICAgICggMjcyICkgICAgICAgIC8qIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBRENfUk5DUiAgICAgICAgICAgICAgICAgICAgICAgICAgICggMjc2ICkgICAgICAgIC8qIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBRENfVE5QUiAgICAgICAgICAgICAgICAgICAgICAgICAgICggMjgwICkgICAgICAgIC8qIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQURDX1ROQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDI4NCApICAgICAgICAvKiBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFEQ19QVENSICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAyODggKSAgICAgICAgLyogUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFEQ19QVFNSICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAyOTIgKSAgICAgICAgLyogUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLS8qIC0tLS0tLS0tIEFEQ19DUiA6IChBREMgT2Zmc2V0OiAweDApIEFEQyBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19BRENfU1dSU1QgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDAgKSAgIC8qIChBREMpIFNvZnR3YXJlIFJlc2V0ICovDQotI2RlZmluZSBBVDkxQ19BRENfU1RBUlQgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDEgKSAgIC8qIChBREMpIFN0YXJ0IENvbnZlcnNpb24gKi8NCi0vKiAtLS0tLS0tLSBBRENfTVIgOiAoQURDIE9mZnNldDogMHg0KSBBREMgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1RSR0VOICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAwICkgICAvKiAoQURDKSBUcmlnZ2VyIEVuYWJsZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FEQ19UUkdFTl9ESVMgICAgICAgICAgICAoIDB4MCApICAgICAgICAvKiAoQURDKSBIcmFkd2FyZSB0cmlnZ2VycyBhcmUgZGlzYWJsZWQuIFN0YXJ0aW5nIGEgY29udmVyc2lvbiBpcyBvbmx5IHBvc3NpYmxlIGJ5IHNvZnR3YXJlICovDQotI2RlZmluZSAgICAgQVQ5MUNfQURDX1RSR0VOX0VOICAgICAgICAgICAgICggMHgxICkgICAgICAgIC8qIChBREMpIEhhcmR3YXJlIHRyaWdnZXIgc2VsZWN0ZWQgYnkgVFJHU0VMIGZpZWxkIGlzIGVuYWJsZWQuICovDQotI2RlZmluZSBBVDkxQ19BRENfVFJHU0VMICAgICAgICAgICAgICAgICAgICggMHg3IDw8IDEgKSAgIC8qIChBREMpIFRyaWdnZXIgU2VsZWN0aW9uICovDQotI2RlZmluZSAgICAgQVQ5MUNfQURDX1RSR1NFTF9USU9BMCAgICAgICAgICggMHgwIDw8IDEgKSAgIC8qIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IFRJQU8wICovDQotI2RlZmluZSAgICAgQVQ5MUNfQURDX1RSR1NFTF9USU9BMSAgICAgICAgICggMHgxIDw8IDEgKSAgIC8qIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IFRJQU8xICovDQotI2RlZmluZSAgICAgQVQ5MUNfQURDX1RSR1NFTF9USU9BMiAgICAgICAgICggMHgyIDw8IDEgKSAgIC8qIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IFRJQU8yICovDQotI2RlZmluZSAgICAgQVQ5MUNfQURDX1RSR1NFTF9USU9BMyAgICAgICAgICggMHgzIDw8IDEgKSAgIC8qIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IFRJQU8zICovDQotI2RlZmluZSAgICAgQVQ5MUNfQURDX1RSR1NFTF9USU9BNCAgICAgICAgICggMHg0IDw8IDEgKSAgIC8qIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IFRJQU80ICovDQotI2RlZmluZSAgICAgQVQ5MUNfQURDX1RSR1NFTF9USU9BNSAgICAgICAgICggMHg1IDw8IDEgKSAgIC8qIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IFRJQU81ICovDQotI2RlZmluZSAgICAgQVQ5MUNfQURDX1RSR1NFTF9FWFQgICAgICAgICAgICggMHg2IDw8IDEgKSAgIC8qIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IEV4dGVybmFsIFRyaWdnZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19MT1dSRVMgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgNCApICAgLyogKEFEQykgUmVzb2x1dGlvbi4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRENfTE9XUkVTXzEwX0JJVCAgICAgICAgKCAweDAgPDwgNCApICAgLyogKEFEQykgMTAtYml0IHJlc29sdXRpb24gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRENfTE9XUkVTXzhfQklUICAgICAgICAgKCAweDEgPDwgNCApICAgLyogKEFEQykgOC1iaXQgcmVzb2x1dGlvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1NMRUVQICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCA1ICkgICAvKiAoQURDKSBTbGVlcCBNb2RlICovDQotI2RlZmluZSAgICAgQVQ5MUNfQURDX1NMRUVQX05PUk1BTF9NT0RFICAgICggMHgwIDw8IDUgKSAgIC8qIChBREMpIE5vcm1hbCBNb2RlICovDQotI2RlZmluZSAgICAgQVQ5MUNfQURDX1NMRUVQX01PREUgICAgICAgICAgICggMHgxIDw8IDUgKSAgIC8qIChBREMpIFNsZWVwIE1vZGUgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19QUkVTQ0FMICAgICAgICAgICAgICAgICAgKCAweDNGIDw8IDggKSAgLyogKEFEQykgUHJlc2NhbGVyIHJhdGUgc2VsZWN0aW9uICovDQotI2RlZmluZSBBVDkxQ19BRENfU1RBUlRVUCAgICAgICAgICAgICAgICAgICggMHgxRiA8PCAxNiApIC8qIChBREMpIFN0YXJ0dXAgVGltZSAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1NIVElNICAgICAgICAgICAgICAgICAgICAoIDB4RiA8PCAyNCApICAvKiAoQURDKSBTYW1wbGUgJiBIb2xkIFRpbWUgKi8NCi0vKiAtLS0tLS0tLSAgICAgQURDX0NIRVIgOiAoQURDIE9mZnNldDogMHgxMCkgQURDIENoYW5uZWwgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19BRENfQ0gwICAgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDAgKSAgIC8qIChBREMpIENoYW5uZWwgMCAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NIMSAgICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxICkgICAvKiAoQURDKSBDaGFubmVsIDEgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DSDIgICAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMiApICAgLyogKEFEQykgQ2hhbm5lbCAyICovDQotI2RlZmluZSBBVDkxQ19BRENfQ0gzICAgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDMgKSAgIC8qIChBREMpIENoYW5uZWwgMyAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NINCAgICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCA0ICkgICAvKiAoQURDKSBDaGFubmVsIDQgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DSDUgICAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgNSApICAgLyogKEFEQykgQ2hhbm5lbCA1ICovDQotI2RlZmluZSBBVDkxQ19BRENfQ0g2ICAgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDYgKSAgIC8qIChBREMpIENoYW5uZWwgNiAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NINyAgICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCA3ICkgICAvKiAoQURDKSBDaGFubmVsIDcgKi8NCi0vKiAtLS0tLS0tLSAgICAgQURDX0NIRFIgOiAoQURDIE9mZnNldDogMHgxNCkgQURDIENoYW5uZWwgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tICAgICBBRENfQ0hTUiA6IChBREMgT2Zmc2V0OiAweDE4KSBBREMgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBBRENfU1IgOiAoQURDIE9mZnNldDogMHgxYykgQURDIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0VPQzAgICAgICAoIDB4MSA8PCAwICkgICAgICAvKiAoQURDKSBFbmQgb2YgQ29udmVyc2lvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0VPQzEgICAgICAoIDB4MSA8PCAxICkgICAgICAvKiAoQURDKSBFbmQgb2YgQ29udmVyc2lvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0VPQzIgICAgICAoIDB4MSA8PCAyICkgICAgICAvKiAoQURDKSBFbmQgb2YgQ29udmVyc2lvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0VPQzMgICAgICAoIDB4MSA8PCAzICkgICAgICAvKiAoQURDKSBFbmQgb2YgQ29udmVyc2lvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0VPQzQgICAgICAoIDB4MSA8PCA0ICkgICAgICAvKiAoQURDKSBFbmQgb2YgQ29udmVyc2lvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0VPQzUgICAgICAoIDB4MSA8PCA1ICkgICAgICAvKiAoQURDKSBFbmQgb2YgQ29udmVyc2lvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0VPQzYgICAgICAoIDB4MSA8PCA2ICkgICAgICAvKiAoQURDKSBFbmQgb2YgQ29udmVyc2lvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0VPQzcgICAgICAoIDB4MSA8PCA3ICkgICAgICAvKiAoQURDKSBFbmQgb2YgQ29udmVyc2lvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX09WUkUwICAgICAoIDB4MSA8PCA4ICkgICAgICAvKiAoQURDKSBPdmVycnVuIEVycm9yICovDQotI2RlZmluZSBBVDkxQ19BRENfT1ZSRTEgICAgICggMHgxIDw8IDkgKSAgICAgIC8qIChBREMpIE92ZXJydW4gRXJyb3IgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19PVlJFMiAgICAgKCAweDEgPDwgMTAgKSAgICAgLyogKEFEQykgT3ZlcnJ1biBFcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX09WUkUzICAgICAoIDB4MSA8PCAxMSApICAgICAvKiAoQURDKSBPdmVycnVuIEVycm9yICovDQotI2RlZmluZSBBVDkxQ19BRENfT1ZSRTQgICAgICggMHgxIDw8IDEyICkgICAgIC8qIChBREMpIE92ZXJydW4gRXJyb3IgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19PVlJFNSAgICAgKCAweDEgPDwgMTMgKSAgICAgLyogKEFEQykgT3ZlcnJ1biBFcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX09WUkU2ICAgICAoIDB4MSA8PCAxNCApICAgICAvKiAoQURDKSBPdmVycnVuIEVycm9yICovDQotI2RlZmluZSBBVDkxQ19BRENfT1ZSRTcgICAgICggMHgxIDw8IDE1ICkgICAgIC8qIChBREMpIE92ZXJydW4gRXJyb3IgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19EUkRZICAgICAgKCAweDEgPDwgMTYgKSAgICAgLyogKEFEQykgRGF0YSBSZWFkeSAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0dPVlJFICAgICAoIDB4MSA8PCAxNyApICAgICAvKiAoQURDKSBHZW5lcmFsIE92ZXJydW4gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19FTkRSWCAgICAgKCAweDEgPDwgMTggKSAgICAgLyogKEFEQykgRW5kIG9mIFJlY2VpdmVyIFRyYW5zZmVyICovDQotI2RlZmluZSBBVDkxQ19BRENfUlhCVUZGICAgICggMHgxIDw8IDE5ICkgICAgIC8qIChBREMpIFJYQlVGRiBJbnRlcnJ1cHQgKi8NCi0vKiAtLS0tLS0tLSBBRENfTENEUiA6IChBREMgT2Zmc2V0OiAweDIwKSBBREMgTGFzdCBDb252ZXJ0ZWQgRGF0YSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0xEQVRBICAgICAoIDB4M0ZGIDw8IDAgKSAgICAvKiAoQURDKSBMYXN0IERhdGEgQ29udmVydGVkICovDQotLyogLS0tLS0tLS0gQURDX0lFUiA6IChBREMgT2Zmc2V0OiAweDI0KSBBREMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIEFEQ19JRFIgOiAoQURDIE9mZnNldDogMHgyOCkgQURDIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQURDX0lNUiA6IChBREMgT2Zmc2V0OiAweDJjKSBBREMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBBRENfQ0RSMCA6IChBREMgT2Zmc2V0OiAweDMwKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDAgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19EQVRBICAgICggMHgzRkYgPDwgMCApICAgICAgICAvKiAoQURDKSBDb252ZXJ0ZWQgRGF0YSAqLw0KLS8qIC0tLS0tLS0tIEFEQ19DRFIxIDogKEFEQyBPZmZzZXQ6IDB4MzQpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMSAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIEFEQ19DRFIyIDogKEFEQyBPZmZzZXQ6IDB4MzgpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMiAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIEFEQ19DRFIzIDogKEFEQyBPZmZzZXQ6IDB4M2MpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMyAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIEFEQ19DRFI0IDogKEFEQyBPZmZzZXQ6IDB4NDApIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNCAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIEFEQ19DRFI1IDogKEFEQyBPZmZzZXQ6IDB4NDQpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNSAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIEFEQ19DRFI2IDogKEFEQyBPZmZzZXQ6IDB4NDgpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNiAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIEFEQ19DRFI3IDogKEFEQyBPZmZzZXQ6IDB4NGMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNyAtLS0tLS0tLSAqLw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQW5hbG9nIHRvIERpZ2l0YWwgQ29udmVydG9yDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX0FEQyBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBBRENfQ1IgICAgICAgICAgKCAwKSAvLyBBREMgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQURDX01SICAgICAgICAgICggNCkgLy8gQURDIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFEQ19DSEVSICAgICAgICAoMTYpIC8vIEFEQyBDaGFubmVsIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQURDX0NIRFIgICAgICAgICgyMCkgLy8gQURDIENoYW5uZWwgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQURDX0NIU1IgICAgICAgICgyNCkgLy8gQURDIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBRENfU1IgICAgICAgICAgKDI4KSAvLyBBREMgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBRENfTENEUiAgICAgICAgKDMyKSAvLyBBREMgTGFzdCBDb252ZXJ0ZWQgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgQURDX0lFUiAgICAgICAgICgzNikgLy8gQURDIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFEQ19JRFIgICAgICAgICAoNDApIC8vIEFEQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQURDX0lNUiAgICAgICAgICg0NCkgLy8gQURDIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBRENfQ0RSMCAgICAgICAgKDQ4KSAvLyBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDANCisjZGVmaW5lIEFEQ19DRFIxICAgICAgICAoNTIpIC8vIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMQ0KKyNkZWZpbmUgQURDX0NEUjIgICAgICAgICg1NikgLy8gQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAyDQorI2RlZmluZSBBRENfQ0RSMyAgICAgICAgKDYwKSAvLyBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDMNCisjZGVmaW5lIEFEQ19DRFI0ICAgICAgICAoNjQpIC8vIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNA0KKyNkZWZpbmUgQURDX0NEUjUgICAgICAgICg2OCkgLy8gQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA1DQorI2RlZmluZSBBRENfQ0RSNiAgICAgICAgKDcyKSAvLyBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDYNCisjZGVmaW5lIEFEQ19DRFI3ICAgICAgICAoNzYpIC8vIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNw0KKyNkZWZpbmUgQURDX1JQUiAgICAgICAgICgyNTYpIC8vIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQURDX1JDUiAgICAgICAgICgyNjApIC8vIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQURDX1RQUiAgICAgICAgICgyNjQpIC8vIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFEQ19UQ1IgICAgICAgICAoMjY4KSAvLyBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBRENfUk5QUiAgICAgICAgKDI3MikgLy8gUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFEQ19STkNSICAgICAgICAoMjc2KSAvLyBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQURDX1ROUFIgICAgICAgICgyODApIC8vIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQURDX1ROQ1IgICAgICAgICgyODQpIC8vIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQURDX1BUQ1IgICAgICAgICgyODgpIC8vIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBRENfUFRTUiAgICAgICAgKDI5MikgLy8gUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKy8vIC0tLS0tLS0tIEFEQ19DUiA6IChBREMgT2Zmc2V0OiAweDApIEFEQyBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQURDX1NXUlNUICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoQURDKSBTb2Z0d2FyZSBSZXNldA0KKyNkZWZpbmUgQVQ5MUNfQURDX1NUQVJUICAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoQURDKSBTdGFydCBDb252ZXJzaW9uDQorLy8gLS0tLS0tLS0gQURDX01SIDogKEFEQyBPZmZzZXQ6IDB4NCkgQURDIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BRENfVFJHRU4gICAgICAgICAgICgweDEgPDwgIDApIC8vIChBREMpIFRyaWdnZXIgRW5hYmxlDQorI2RlZmluZSAJQVQ5MUNfQURDX1RSR0VOX0RJUyAgICAgICAgICAgICAgICAgICgweDApIC8vIChBREMpIEhyYWR3YXJlIHRyaWdnZXJzIGFyZSBkaXNhYmxlZC4gU3RhcnRpbmcgYSBjb252ZXJzaW9uIGlzIG9ubHkgcG9zc2libGUgYnkgc29mdHdhcmUNCisjZGVmaW5lIAlBVDkxQ19BRENfVFJHRU5fRU4gICAgICAgICAgICAgICAgICAgKDB4MSkgLy8gKEFEQykgSGFyZHdhcmUgdHJpZ2dlciBzZWxlY3RlZCBieSBUUkdTRUwgZmllbGQgaXMgZW5hYmxlZC4NCisjZGVmaW5lIEFUOTFDX0FEQ19UUkdTRUwgICAgICAgICAgKDB4NyA8PCAgMSkgLy8gKEFEQykgVHJpZ2dlciBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19BRENfVFJHU0VMX1RJT0EwICAgICAgICAgICAgICAgICgweDAgPDwgIDEpIC8vIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IFRJQU8wDQorI2RlZmluZSAJQVQ5MUNfQURDX1RSR1NFTF9USU9BMSAgICAgICAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPMQ0KKyNkZWZpbmUgCUFUOTFDX0FEQ19UUkdTRUxfVElPQTIgICAgICAgICAgICAgICAgKDB4MiA8PCAgMSkgLy8gKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gVElBTzINCisjZGVmaW5lIAlBVDkxQ19BRENfVFJHU0VMX1RJT0EzICAgICAgICAgICAgICAgICgweDMgPDwgIDEpIC8vIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IFRJQU8zDQorI2RlZmluZSAJQVQ5MUNfQURDX1RSR1NFTF9USU9BNCAgICAgICAgICAgICAgICAoMHg0IDw8ICAxKSAvLyAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPNA0KKyNkZWZpbmUgCUFUOTFDX0FEQ19UUkdTRUxfVElPQTUgICAgICAgICAgICAgICAgKDB4NSA8PCAgMSkgLy8gKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gVElBTzUNCisjZGVmaW5lIAlBVDkxQ19BRENfVFJHU0VMX0VYVCAgICAgICAgICAgICAgICAgICgweDYgPDwgIDEpIC8vIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IEV4dGVybmFsIFRyaWdnZXINCisjZGVmaW5lIEFUOTFDX0FEQ19MT1dSRVMgICAgICAgICAgKDB4MSA8PCAgNCkgLy8gKEFEQykgUmVzb2x1dGlvbi4NCisjZGVmaW5lIAlBVDkxQ19BRENfTE9XUkVTXzEwX0JJVCAgICAgICAgICAgICAgICgweDAgPDwgIDQpIC8vIChBREMpIDEwLWJpdCByZXNvbHV0aW9uDQorI2RlZmluZSAJQVQ5MUNfQURDX0xPV1JFU184X0JJVCAgICAgICAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoQURDKSA4LWJpdCByZXNvbHV0aW9uDQorI2RlZmluZSBBVDkxQ19BRENfU0xFRVAgICAgICAgICAgICgweDEgPDwgIDUpIC8vIChBREMpIFNsZWVwIE1vZGUNCisjZGVmaW5lIAlBVDkxQ19BRENfU0xFRVBfTk9STUFMX01PREUgICAgICAgICAgKDB4MCA8PCAgNSkgLy8gKEFEQykgTm9ybWFsIE1vZGUNCisjZGVmaW5lIAlBVDkxQ19BRENfU0xFRVBfTU9ERSAgICAgICAgICAgICAgICAgKDB4MSA8PCAgNSkgLy8gKEFEQykgU2xlZXAgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfQURDX1BSRVNDQUwgICAgICAgICAoMHgzRiA8PCAgOCkgLy8gKEFEQykgUHJlc2NhbGVyIHJhdGUgc2VsZWN0aW9uDQorI2RlZmluZSBBVDkxQ19BRENfU1RBUlRVUCAgICAgICAgICgweDFGIDw8IDE2KSAvLyAoQURDKSBTdGFydHVwIFRpbWUNCisjZGVmaW5lIEFUOTFDX0FEQ19TSFRJTSAgICAgICAgICAgKDB4RiA8PCAyNCkgLy8gKEFEQykgU2FtcGxlICYgSG9sZCBUaW1lDQorLy8gLS0tLS0tLS0gCUFEQ19DSEVSIDogKEFEQyBPZmZzZXQ6IDB4MTApIEFEQyBDaGFubmVsIEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FEQ19DSDAgICAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKEFEQykgQ2hhbm5lbCAwDQorI2RlZmluZSBBVDkxQ19BRENfQ0gxICAgICAgICAgICAgICgweDEgPDwgIDEpIC8vIChBREMpIENoYW5uZWwgMQ0KKyNkZWZpbmUgQVQ5MUNfQURDX0NIMiAgICAgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoQURDKSBDaGFubmVsIDINCisjZGVmaW5lIEFUOTFDX0FEQ19DSDMgICAgICAgICAgICAgKDB4MSA8PCAgMykgLy8gKEFEQykgQ2hhbm5lbCAzDQorI2RlZmluZSBBVDkxQ19BRENfQ0g0ICAgICAgICAgICAgICgweDEgPDwgIDQpIC8vIChBREMpIENoYW5uZWwgNA0KKyNkZWZpbmUgQVQ5MUNfQURDX0NINSAgICAgICAgICAgICAoMHgxIDw8ICA1KSAvLyAoQURDKSBDaGFubmVsIDUNCisjZGVmaW5lIEFUOTFDX0FEQ19DSDYgICAgICAgICAgICAgKDB4MSA8PCAgNikgLy8gKEFEQykgQ2hhbm5lbCA2DQorI2RlZmluZSBBVDkxQ19BRENfQ0g3ICAgICAgICAgICAgICgweDEgPDwgIDcpIC8vIChBREMpIENoYW5uZWwgNw0KKy8vIC0tLS0tLS0tIAlBRENfQ0hEUiA6IChBREMgT2Zmc2V0OiAweDE0KSBBREMgQ2hhbm5lbCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIAlBRENfQ0hTUiA6IChBREMgT2Zmc2V0OiAweDE4KSBBREMgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX1NSIDogKEFEQyBPZmZzZXQ6IDB4MWMpIEFEQyBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BRENfRU9DMCAgICAgICAgICAgICgweDEgPDwgIDApIC8vIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19BRENfRU9DMSAgICAgICAgICAgICgweDEgPDwgIDEpIC8vIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19BRENfRU9DMiAgICAgICAgICAgICgweDEgPDwgIDIpIC8vIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19BRENfRU9DMyAgICAgICAgICAgICgweDEgPDwgIDMpIC8vIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19BRENfRU9DNCAgICAgICAgICAgICgweDEgPDwgIDQpIC8vIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19BRENfRU9DNSAgICAgICAgICAgICgweDEgPDwgIDUpIC8vIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19BRENfRU9DNiAgICAgICAgICAgICgweDEgPDwgIDYpIC8vIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19BRENfRU9DNyAgICAgICAgICAgICgweDEgPDwgIDcpIC8vIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19BRENfT1ZSRTAgICAgICAgICAgICgweDEgPDwgIDgpIC8vIChBREMpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX0FEQ19PVlJFMSAgICAgICAgICAgKDB4MSA8PCAgOSkgLy8gKEFEQykgT3ZlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQURDX09WUkUyICAgICAgICAgICAoMHgxIDw8IDEwKSAvLyAoQURDKSBPdmVycnVuIEVycm9yDQorI2RlZmluZSBBVDkxQ19BRENfT1ZSRTMgICAgICAgICAgICgweDEgPDwgMTEpIC8vIChBREMpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX0FEQ19PVlJFNCAgICAgICAgICAgKDB4MSA8PCAxMikgLy8gKEFEQykgT3ZlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQURDX09WUkU1ICAgICAgICAgICAoMHgxIDw8IDEzKSAvLyAoQURDKSBPdmVycnVuIEVycm9yDQorI2RlZmluZSBBVDkxQ19BRENfT1ZSRTYgICAgICAgICAgICgweDEgPDwgMTQpIC8vIChBREMpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX0FEQ19PVlJFNyAgICAgICAgICAgKDB4MSA8PCAxNSkgLy8gKEFEQykgT3ZlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQURDX0RSRFkgICAgICAgICAgICAoMHgxIDw8IDE2KSAvLyAoQURDKSBEYXRhIFJlYWR5DQorI2RlZmluZSBBVDkxQ19BRENfR09WUkUgICAgICAgICAgICgweDEgPDwgMTcpIC8vIChBREMpIEdlbmVyYWwgT3ZlcnJ1bg0KKyNkZWZpbmUgQVQ5MUNfQURDX0VORFJYICAgICAgICAgICAoMHgxIDw8IDE4KSAvLyAoQURDKSBFbmQgb2YgUmVjZWl2ZXIgVHJhbnNmZXINCisjZGVmaW5lIEFUOTFDX0FEQ19SWEJVRkYgICAgICAgICAgKDB4MSA8PCAxOSkgLy8gKEFEQykgUlhCVUZGIEludGVycnVwdA0KKy8vIC0tLS0tLS0tIEFEQ19MQ0RSIDogKEFEQyBPZmZzZXQ6IDB4MjApIEFEQyBMYXN0IENvbnZlcnRlZCBEYXRhIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQURDX0xEQVRBICAgICAgICAgICAoMHgzRkYgPDwgIDApIC8vIChBREMpIExhc3QgRGF0YSBDb252ZXJ0ZWQNCisvLyAtLS0tLS0tLSBBRENfSUVSIDogKEFEQyBPZmZzZXQ6IDB4MjQpIEFEQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19JRFIgOiAoQURDIE9mZnNldDogMHgyOCkgQURDIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19JTVIgOiAoQURDIE9mZnNldDogMHgyYykgQURDIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19DRFIwIDogKEFEQyBPZmZzZXQ6IDB4MzApIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMCAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FEQ19EQVRBICAgICAgICAgICAgKDB4M0ZGIDw8ICAwKSAvLyAoQURDKSBDb252ZXJ0ZWQgRGF0YQ0KKy8vIC0tLS0tLS0tIEFEQ19DRFIxIDogKEFEQyBPZmZzZXQ6IDB4MzQpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMSAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRENfQ0RSMiA6IChBREMgT2Zmc2V0OiAweDM4KSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX0NEUjMgOiAoQURDIE9mZnNldDogMHgzYykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAzIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19DRFI0IDogKEFEQyBPZmZzZXQ6IDB4NDApIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNCAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRENfQ0RSNSA6IChBREMgT2Zmc2V0OiAweDQ0KSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDUgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX0NEUjYgOiAoQURDIE9mZnNldDogMHg0OCkgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA2IC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19DRFI3IDogKEFEQyBPZmZzZXQ6IDB4NGMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNyAtLS0tLS0tLSANCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFN5bmNocm9ub3VzIFNlcmlhbCBDb250cm9sbGVyIEludGVyZmFjZSAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19TU0Mgc3RydWN0dXJlICoqKiAqLw0KLSNkZWZpbmUgU1NDX0NSICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAwICkgICAgICAgICAgLyogQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1NDX0NNUiAgICAgICAgICAgICAgICAgICAgICAgICAgKCA0ICkgICAgICAgICAgLyogQ2xvY2sgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1NDX1JDTVIgICAgICAgICAgICAgICAgICAgICAgICAgKCAxNiApICAgICAgICAgLyogUmVjZWl2ZSBDbG9jayBNb2RlUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNTQ19SRk1SICAgICAgICAgICAgICAgICAgICAgICAgICggMjAgKSAgICAgICAgIC8qIFJlY2VpdmUgRnJhbWUgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1NDX1RDTVIgICAgICAgICAgICAgICAgICAgICAgICAgKCAyNCApICAgICAgICAgLyogVHJhbnNtaXQgQ2xvY2sgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1NDX1RGTVIgICAgICAgICAgICAgICAgICAgICAgICAgKCAyOCApICAgICAgICAgLyogVHJhbnNtaXQgRnJhbWUgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1NDX1JIUiAgICAgICAgICAgICAgICAgICAgICAgICAgKCAzMiApICAgICAgICAgLyogUmVjZWl2ZSBIb2xkaW5nIFJlZ2lzdGVyICovDQotI2RlZmluZSBTU0NfVEhSICAgICAgICAgICAgICAgICAgICAgICAgICAoIDM2ICkgICAgICAgICAvKiBUcmFuc21pdCBIb2xkaW5nIFJlZ2lzdGVyICovDQotI2RlZmluZSBTU0NfUlNIUiAgICAgICAgICAgICAgICAgICAgICAgICAoIDQ4ICkgICAgICAgICAvKiBSZWNlaXZlIFN5bmMgSG9sZGluZyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1NDX1RTSFIgICAgICAgICAgICAgICAgICAgICAgICAgKCA1MiApICAgICAgICAgLyogVHJhbnNtaXQgU3luYyBIb2xkaW5nIFJlZ2lzdGVyICovDQotI2RlZmluZSBTU0NfUkMwUiAgICAgICAgICAgICAgICAgICAgICAgICAoIDU2ICkgICAgICAgICAvKiBSZWNlaXZlIENvbXBhcmUgMCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1NDX1JDMVIgICAgICAgICAgICAgICAgICAgICAgICAgKCA2MCApICAgICAgICAgLyogUmVjZWl2ZSBDb21wYXJlIDEgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNTQ19TUiAgICAgICAgICAgICAgICAgICAgICAgICAgICggNjQgKSAgICAgICAgIC8qIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1NDX0lFUiAgICAgICAgICAgICAgICAgICAgICAgICAgKCA2OCApICAgICAgICAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1NDX0lEUiAgICAgICAgICAgICAgICAgICAgICAgICAgKCA3MiApICAgICAgICAgLyogSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNTQ19JTVIgICAgICAgICAgICAgICAgICAgICAgICAgICggNzYgKSAgICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBTU0NfUlBSICAgICAgICAgICAgICAgICAgICAgICAgICAoIDI1NiApICAgICAgICAvKiBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNTQ19SQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICggMjYwICkgICAgICAgIC8qIFJlY2VpdmUgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1NDX1RQUiAgICAgICAgICAgICAgICAgICAgICAgICAgKCAyNjQgKSAgICAgICAgLyogVHJhbnNtaXQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1NDX1RDUiAgICAgICAgICAgICAgICAgICAgICAgICAgKCAyNjggKSAgICAgICAgLyogVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1NDX1JOUFIgICAgICAgICAgICAgICAgICAgICAgICAgKCAyNzIgKSAgICAgICAgLyogUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNTQ19STkNSICAgICAgICAgICAgICAgICAgICAgICAgICggMjc2ICkgICAgICAgIC8qIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBTU0NfVE5QUiAgICAgICAgICAgICAgICAgICAgICAgICAoIDI4MCApICAgICAgICAvKiBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNTQ19UTkNSICAgICAgICAgICAgICAgICAgICAgICAgICggMjg0ICkgICAgICAgIC8qIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1NDX1BUQ1IgICAgICAgICAgICAgICAgICAgICAgICAgKCAyODggKSAgICAgICAgLyogUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNTQ19QVFNSICAgICAgICAgICAgICAgICAgICAgICAgICggMjkyICkgICAgICAgIC8qIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0vKiAtLS0tLS0tLSBTU0NfQ1IgOiAoU1NDIE9mZnNldDogMHgwKSBTU0MgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1JYRU4gICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMCApICAgLyogKFNTQykgUmVjZWl2ZSBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19SWERJUyAgICAgICAgICAgICAgICAgICggMHgxIDw8IDEgKSAgIC8qIChTU0MpIFJlY2VpdmUgRGlzYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1RYRU4gICAgICAgICAgICAgICAgICAgKCAweDEgPDwgOCApICAgLyogKFNTQykgVHJhbnNtaXQgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19TU0NfVFhESVMgICAgICAgICAgICAgICAgICAoIDB4MSA8PCA5ICkgICAvKiAoU1NDKSBUcmFuc21pdCBEaXNhYmxlICovDQotI2RlZmluZSBBVDkxQ19TU0NfU1dSU1QgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxNSApICAvKiAoU1NDKSBTb2Z0d2FyZSBSZXNldCAqLw0KLS8qIC0tLS0tLS0tIFNTQ19SQ01SIDogKFNTQyBPZmZzZXQ6IDB4MTApIFNTQyBSZWNlaXZlIENsb2NrIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19DS1MgICAgICAgICAgICAgICAgICAgICggMHgzIDw8IDAgKSAgIC8qIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgU2VsZWN0aW9uICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX0NLU19ESVYgICAgICAgICAgICAoIDB4MCApICAgICAgICAvKiAoU1NDKSBEaXZpZGVkIENsb2NrICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX0NLU19USyAgICAgICAgICAgICAoIDB4MSApICAgICAgICAvKiAoU1NDKSBUSyBDbG9jayBzaWduYWwgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfQ0tTX1JLICAgICAgICAgICAgICggMHgyICkgICAgICAgIC8qIChTU0MpIFJLIHBpbiAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0NLTyAgICAgICAgICAgICAgICAgICAgKCAweDcgPDwgMiApICAgLyogKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBPdXRwdXQgTW9kZSBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfQ0tPX05PTkUgICAgICAgICAgICggMHgwIDw8IDIgKSAgIC8qIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgT3V0cHV0IE1vZGU6IE5vbmUgUksgcGluOiBJbnB1dC1vbmx5ICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX0NLT19DT05USU5PVVMgICAgICAoIDB4MSA8PCAyICkgICAvKiAoU1NDKSBDb250aW51b3VzIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgUksgcGluOiBPdXRwdXQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfQ0tPX0RBVEFfVFggICAgICAgICggMHgyIDw8IDIgKSAgIC8qIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgb25seSBkdXJpbmcgZGF0YSB0cmFuc2ZlcnMgUksgcGluOiBPdXRwdXQgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19DS0kgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDUgKSAgIC8qIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgSW52ZXJzaW9uICovDQotI2RlZmluZSBBVDkxQ19TU0NfQ0tHICAgICAgICAgICAgICAgICAgICAoIDB4MyA8PCA2ICkgICAvKiAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIEdhdGluZyBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfQ0tHX05PTkUgICAgICAgICAgICggMHgwIDw8IDYgKSAgIC8qIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgR2F0aW5nOiBOb25lLCBjb250aW51b3VzIGNsb2NrICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX0NLR19MT1cgICAgICAgICAgICAoIDB4MSA8PCA2ICkgICAvKiAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIGVuYWJsZWQgb25seSBpZiBSRiBMb3cgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfQ0tHX0hJR0ggICAgICAgICAgICggMHgyIDw8IDYgKSAgIC8qIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgZW5hYmxlZCBvbmx5IGlmIFJGIEhpZ2ggKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19TVEFSVCAgICAgICAgICAgICAgICAgICggMHhGIDw8IDggKSAgIC8qIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgU3RhcnQgU2VsZWN0aW9uICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX1NUQVJUX0NPTlRJTk9VUyAgICAoIDB4MCA8PCA4ICkgICAvKiAoU1NDKSBDb250aW51b3VzLCBhcyBzb29uIGFzIHRoZSByZWNlaXZlciBpcyBlbmFibGVkLCBhbmQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGVuZCBvZiB0cmFuc2ZlciBvZiB0aGUgcHJldmlvdXMgZGF0YS4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfU1RBUlRfVFggICAgICAgICAgICggMHgxIDw8IDggKSAgIC8qIChTU0MpIFRyYW5zbWl0L1JlY2VpdmUgc3RhcnQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfU1RBUlRfTE9XX1JGICAgICAgICggMHgyIDw8IDggKSAgIC8qIChTU0MpIERldGVjdGlvbiBvZiBhIGxvdyBsZXZlbCBvbiBSRiBpbnB1dCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19TVEFSVF9ISUdIX1JGICAgICAgKCAweDMgPDwgOCApICAgLyogKFNTQykgRGV0ZWN0aW9uIG9mIGEgaGlnaCBsZXZlbCBvbiBSRiBpbnB1dCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19TVEFSVF9GQUxMX1JGICAgICAgKCAweDQgPDwgOCApICAgLyogKFNTQykgRGV0ZWN0aW9uIG9mIGEgZmFsbGluZyBlZGdlIG9uIFJGIGlucHV0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX1NUQVJUX1JJU0VfUkYgICAgICAoIDB4NSA8PCA4ICkgICAvKiAoU1NDKSBEZXRlY3Rpb24gb2YgYSByaXNpbmcgZWRnZSBvbiBSRiBpbnB1dCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19TVEFSVF9MRVZFTF9SRiAgICAgKCAweDYgPDwgOCApICAgLyogKFNTQykgRGV0ZWN0aW9uIG9mIGFueSBsZXZlbCBjaGFuZ2Ugb24gUkYgaW5wdXQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfU1RBUlRfRURHRV9SRiAgICAgICggMHg3IDw8IDggKSAgIC8qIChTU0MpIERldGVjdGlvbiBvZiBhbnkgZWRnZSBvbiBSRiBpbnB1dCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19TVEFSVF8wICAgICAgICAgICAgKCAweDggPDwgOCApICAgLyogKFNTQykgQ29tcGFyZSAwICovDQotI2RlZmluZSBBVDkxQ19TU0NfU1RPUCAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxMiApICAvKiAoU1NDKSBSZWNlaXZlIFN0b3AgU2VsZWN0aW9uICovDQotI2RlZmluZSBBVDkxQ19TU0NfU1RUT1VUICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxNSApICAvKiAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IFN0YXJ0IE91dHB1dCBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19TVFRETFkgICAgICAgICAgICAgICAgICggMHhGRiA8PCAxNiApIC8qIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgU3RhcnQgRGVsYXkgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19QRVJJT0QgICAgICAgICAgICAgICAgICggMHhGRiA8PCAyNCApIC8qIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgUGVyaW9kIERpdmlkZXIgU2VsZWN0aW9uICovDQotLyogLS0tLS0tLS0gU1NDX1JGTVIgOiAoU1NDIE9mZnNldDogMHgxNCkgU1NDIFJlY2VpdmUgRnJhbWUgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0RBVExFTiAgICAgICAgICAgICAgICAgKCAweDFGIDw8IDAgKSAgLyogKFNTQykgRGF0YSBMZW5ndGggKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19MT09QICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDUgKSAgIC8qIChTU0MpIExvb3AgTW9kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX01TQkYgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgNyApICAgLyogKFNTQykgTW9zdCBTaWduaWZpY2FudCBCaXQgRmlyc3QgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19EQVROQiAgICAgICAgICAgICAgICAgICggMHhGIDw8IDggKSAgIC8qIChTU0MpIERhdGEgTnVtYmVyIHBlciBGcmFtZSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0ZTTEVOICAgICAgICAgICAgICAgICAgKCAweEYgPDwgMTYgKSAgLyogKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIGxlbmd0aCAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0ZTT1MgICAgICAgICAgICAgICAgICAgKCAweDcgPDwgMjAgKSAgLyogKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIE91dHB1dCBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfRlNPU19OT05FICAgICAgICAgICggMHgwIDw8IDIwICkgIC8qIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IE5vbmUgUksgcGluIElucHV0LW9ubHkgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfRlNPU19ORUdBVElWRSAgICAgICggMHgxIDw8IDIwICkgIC8qIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IE5lZ2F0aXZlIFB1bHNlICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX0ZTT1NfUE9TSVRJVkUgICAgICAoIDB4MiA8PCAyMCApICAvKiAoU1NDKSBTZWxlY3RlZCBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgU2lnbmFsOiBQb3NpdGl2ZSBQdWxzZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19GU09TX0xPVyAgICAgICAgICAgKCAweDMgPDwgMjAgKSAgLyogKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogRHJpdmVyIExvdyBkdXJpbmcgZGF0YSB0cmFuc2ZlciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19GU09TX0hJR0ggICAgICAgICAgKCAweDQgPDwgMjAgKSAgLyogKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogRHJpdmVyIEhpZ2ggZHVyaW5nIGRhdGEgdHJhbnNmZXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfRlNPU19UT0dHTEUgICAgICAgICggMHg1IDw8IDIwICkgIC8qIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IFRvZ2dsaW5nIGF0IGVhY2ggc3RhcnQgb2YgZGF0YSB0cmFuc2ZlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0ZTRURHRSAgICAgICAgICAgICAgICAgKCAweDEgPDwgMjQgKSAgLyogKFNTQykgRnJhbWUgU3luYyBFZGdlIERldGVjdGlvbiAqLw0KLS8qIC0tLS0tLS0tIFNTQ19UQ01SIDogKFNTQyBPZmZzZXQ6IDB4MTgpIFNTQyBUcmFuc21pdCBDbG9jayBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gU1NDX1RGTVIgOiAoU1NDIE9mZnNldDogMHgxYykgU1NDIFRyYW5zbWl0IEZyYW1lIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19EQVRERUYgICAgICAgICAgICAgICAgICggMHgxIDw8IDUgKSAgLyogKFNTQykgRGF0YSBEZWZhdWx0IFZhbHVlICovDQotI2RlZmluZSBBVDkxQ19TU0NfRlNERU4gICAgICAgICAgICAgICAgICAoIDB4MSA8PCAyMyApIC8qIChTU0MpIEZyYW1lIFN5bmMgRGF0YSBFbmFibGUgKi8NCi0vKiAtLS0tLS0tLSBTU0NfU1IgOiAoU1NDIE9mZnNldDogMHg0MCkgU1NDIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1RYUkRZICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMCApICAvKiAoU1NDKSBUcmFuc21pdCBSZWFkeSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1RYRU1QVFkgICAgICAgICAgICAgICAgKCAweDEgPDwgMSApICAvKiAoU1NDKSBUcmFuc21pdCBFbXB0eSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0VORFRYICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMiApICAvKiAoU1NDKSBFbmQgT2YgVHJhbnNtaXNzaW9uICovDQotI2RlZmluZSBBVDkxQ19TU0NfVFhCVUZFICAgICAgICAgICAgICAgICAoIDB4MSA8PCAzICkgIC8qIChTU0MpIFRyYW5zbWl0IEJ1ZmZlciBFbXB0eSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1JYUkRZICAgICAgICAgICAgICAgICAgKCAweDEgPDwgNCApICAvKiAoU1NDKSBSZWNlaXZlIFJlYWR5ICovDQotI2RlZmluZSBBVDkxQ19TU0NfT1ZSVU4gICAgICAgICAgICAgICAgICAoIDB4MSA8PCA1ICkgIC8qIChTU0MpIFJlY2VpdmUgT3ZlcnJ1biAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0VORFJYICAgICAgICAgICAgICAgICAgKCAweDEgPDwgNiApICAvKiAoU1NDKSBFbmQgb2YgUmVjZXB0aW9uICovDQotI2RlZmluZSBBVDkxQ19TU0NfUlhCVUZGICAgICAgICAgICAgICAgICAoIDB4MSA8PCA3ICkgIC8qIChTU0MpIFJlY2VpdmUgQnVmZmVyIEZ1bGwgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19DUDAgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDggKSAgLyogKFNTQykgQ29tcGFyZSAwICovDQotI2RlZmluZSBBVDkxQ19TU0NfQ1AxICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCA5ICkgIC8qIChTU0MpIENvbXBhcmUgMSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1RYU1lOICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTAgKSAvKiAoU1NDKSBUcmFuc21pdCBTeW5jICovDQotI2RlZmluZSBBVDkxQ19TU0NfUlhTWU4gICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxMSApIC8qIChTU0MpIFJlY2VpdmUgU3luYyAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1RYRU5BICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTYgKSAvKiAoU1NDKSBUcmFuc21pdCBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19SWEVOQSAgICAgICAgICAgICAgICAgICggMHgxIDw8IDE3ICkgLyogKFNTQykgUmVjZWl2ZSBFbmFibGUgKi8NCi0vKiAtLS0tLS0tLSBTU0NfSUVSIDogKFNTQyBPZmZzZXQ6IDB4NDQpIFNTQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gU1NDX0lEUiA6IChTU0MgT2Zmc2V0OiAweDQ4KSBTU0MgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBTU0NfSU1SIDogKFNTQyBPZmZzZXQ6IDB4NGMpIFNTQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSAqLw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgU3luY2hyb25vdXMgU2VyaWFsIENvbnRyb2xsZXIgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1NTQyBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBTU0NfQ1IgICAgICAgICAgKCAwKSAvLyBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBTU0NfQ01SICAgICAgICAgKCA0KSAvLyBDbG9jayBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBTU0NfUkNNUiAgICAgICAgKDE2KSAvLyBSZWNlaXZlIENsb2NrIE1vZGVSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX1JGTVIgICAgICAgICgyMCkgLy8gUmVjZWl2ZSBGcmFtZSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBTU0NfVENNUiAgICAgICAgKDI0KSAvLyBUcmFuc21pdCBDbG9jayBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBTU0NfVEZNUiAgICAgICAgKDI4KSAvLyBUcmFuc21pdCBGcmFtZSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBTU0NfUkhSICAgICAgICAgKDMyKSAvLyBSZWNlaXZlIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIFNTQ19USFIgICAgICAgICAoMzYpIC8vIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIFNTQ19SU0hSICAgICAgICAoNDgpIC8vIFJlY2VpdmUgU3luYyBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBTU0NfVFNIUiAgICAgICAgKDUyKSAvLyBUcmFuc21pdCBTeW5jIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIFNTQ19SQzBSICAgICAgICAoNTYpIC8vIFJlY2VpdmUgQ29tcGFyZSAwIFJlZ2lzdGVyDQorI2RlZmluZSBTU0NfUkMxUiAgICAgICAgKDYwKSAvLyBSZWNlaXZlIENvbXBhcmUgMSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX1NSICAgICAgICAgICg2NCkgLy8gU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBTU0NfSUVSICAgICAgICAgKDY4KSAvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBTU0NfSURSICAgICAgICAgKDcyKSAvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX0lNUiAgICAgICAgICg3NikgLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIFNTQ19SUFIgICAgICAgICAoMjU2KSAvLyBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFNTQ19SQ1IgICAgICAgICAoMjYwKSAvLyBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFNTQ19UUFIgICAgICAgICAoMjY0KSAvLyBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBTU0NfVENSICAgICAgICAgKDI2OCkgLy8gVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX1JOUFIgICAgICAgICgyNzIpIC8vIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBTU0NfUk5DUiAgICAgICAgKDI3NikgLy8gUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFNTQ19UTlBSICAgICAgICAoMjgwKSAvLyBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFNTQ19UTkNSICAgICAgICAoMjg0KSAvLyBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFNTQ19QVENSICAgICAgICAoMjg4KSAvLyBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX1BUU1IgICAgICAgICgyOTIpIC8vIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisvLyAtLS0tLS0tLSBTU0NfQ1IgOiAoU1NDIE9mZnNldDogMHgwKSBTU0MgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NTQ19SWEVOICAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFNTQykgUmVjZWl2ZSBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1NTQ19SWERJUyAgICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKFNTQykgUmVjZWl2ZSBEaXNhYmxlDQorI2RlZmluZSBBVDkxQ19TU0NfVFhFTiAgICAgICAgICAgICgweDEgPDwgIDgpIC8vIChTU0MpIFRyYW5zbWl0IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RYRElTICAgICAgICAgICAoMHgxIDw8ICA5KSAvLyAoU1NDKSBUcmFuc21pdCBEaXNhYmxlDQorI2RlZmluZSBBVDkxQ19TU0NfU1dSU1QgICAgICAgICAgICgweDEgPDwgMTUpIC8vIChTU0MpIFNvZnR3YXJlIFJlc2V0DQorLy8gLS0tLS0tLS0gU1NDX1JDTVIgOiAoU1NDIE9mZnNldDogMHgxMCkgU1NDIFJlY2VpdmUgQ2xvY2sgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NTQ19DS1MgICAgICAgICAgICAgKDB4MyA8PCAgMCkgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19TU0NfQ0tTX0RJViAgICAgICAgICAgICAgICAgICgweDApIC8vIChTU0MpIERpdmlkZWQgQ2xvY2sNCisjZGVmaW5lIAlBVDkxQ19TU0NfQ0tTX1RLICAgICAgICAgICAgICAgICAgICgweDEpIC8vIChTU0MpIFRLIENsb2NrIHNpZ25hbA0KKyNkZWZpbmUgCUFUOTFDX1NTQ19DS1NfUksgICAgICAgICAgICAgICAgICAgKDB4MikgLy8gKFNTQykgUksgcGluDQorI2RlZmluZSBBVDkxQ19TU0NfQ0tPICAgICAgICAgICAgICgweDcgPDwgIDIpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgT3V0cHV0IE1vZGUgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfU1NDX0NLT19OT05FICAgICAgICAgICAgICAgICAoMHgwIDw8ICAyKSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIE91dHB1dCBNb2RlOiBOb25lIFJLIHBpbjogSW5wdXQtb25seQ0KKyNkZWZpbmUgCUFUOTFDX1NTQ19DS09fQ09OVElOT1VTICAgICAgICAgICAgKDB4MSA8PCAgMikgLy8gKFNTQykgQ29udGludW91cyBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIFJLIHBpbjogT3V0cHV0DQorI2RlZmluZSAJQVQ5MUNfU1NDX0NLT19EQVRBX1RYICAgICAgICAgICAgICAoMHgyIDw8ICAyKSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIG9ubHkgZHVyaW5nIGRhdGEgdHJhbnNmZXJzIFJLIHBpbjogT3V0cHV0DQorI2RlZmluZSBBVDkxQ19TU0NfQ0tJICAgICAgICAgICAgICgweDEgPDwgIDUpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgSW52ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19TU0NfQ0tHICAgICAgICAgICAgICgweDMgPDwgIDYpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgR2F0aW5nIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1NTQ19DS0dfTk9ORSAgICAgICAgICAgICAgICAgKDB4MCA8PCAgNikgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBHYXRpbmc6IE5vbmUsIGNvbnRpbnVvdXMgY2xvY2sNCisjZGVmaW5lIAlBVDkxQ19TU0NfQ0tHX0xPVyAgICAgICAgICAgICAgICAgICgweDEgPDwgIDYpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgZW5hYmxlZCBvbmx5IGlmIFJGIExvdw0KKyNkZWZpbmUgCUFUOTFDX1NTQ19DS0dfSElHSCAgICAgICAgICAgICAgICAgKDB4MiA8PCAgNikgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBlbmFibGVkIG9ubHkgaWYgUkYgSGlnaA0KKyNkZWZpbmUgQVQ5MUNfU1NDX1NUQVJUICAgICAgICAgICAoMHhGIDw8ICA4KSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IFN0YXJ0IFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1NTQ19TVEFSVF9DT05USU5PVVMgICAgICAgICAgICAoMHgwIDw8ICA4KSAvLyAoU1NDKSBDb250aW51b3VzLCBhcyBzb29uIGFzIHRoZSByZWNlaXZlciBpcyBlbmFibGVkLCBhbmQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGVuZCBvZiB0cmFuc2ZlciBvZiB0aGUgcHJldmlvdXMgZGF0YS4NCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfVFggICAgICAgICAgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKFNTQykgVHJhbnNtaXQvUmVjZWl2ZSBzdGFydA0KKyNkZWZpbmUgCUFUOTFDX1NTQ19TVEFSVF9MT1dfUkYgICAgICAgICAgICAgICAoMHgyIDw8ICA4KSAvLyAoU1NDKSBEZXRlY3Rpb24gb2YgYSBsb3cgbGV2ZWwgb24gUkYgaW5wdXQNCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfSElHSF9SRiAgICAgICAgICAgICAgKDB4MyA8PCAgOCkgLy8gKFNTQykgRGV0ZWN0aW9uIG9mIGEgaGlnaCBsZXZlbCBvbiBSRiBpbnB1dA0KKyNkZWZpbmUgCUFUOTFDX1NTQ19TVEFSVF9GQUxMX1JGICAgICAgICAgICAgICAoMHg0IDw8ICA4KSAvLyAoU1NDKSBEZXRlY3Rpb24gb2YgYSBmYWxsaW5nIGVkZ2Ugb24gUkYgaW5wdXQNCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfUklTRV9SRiAgICAgICAgICAgICAgKDB4NSA8PCAgOCkgLy8gKFNTQykgRGV0ZWN0aW9uIG9mIGEgcmlzaW5nIGVkZ2Ugb24gUkYgaW5wdXQNCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfTEVWRUxfUkYgICAgICAgICAgICAgKDB4NiA8PCAgOCkgLy8gKFNTQykgRGV0ZWN0aW9uIG9mIGFueSBsZXZlbCBjaGFuZ2Ugb24gUkYgaW5wdXQNCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfRURHRV9SRiAgICAgICAgICAgICAgKDB4NyA8PCAgOCkgLy8gKFNTQykgRGV0ZWN0aW9uIG9mIGFueSBlZGdlIG9uIFJGIGlucHV0DQorI2RlZmluZSAJQVQ5MUNfU1NDX1NUQVJUXzAgICAgICAgICAgICAgICAgICAgICgweDggPDwgIDgpIC8vIChTU0MpIENvbXBhcmUgMA0KKyNkZWZpbmUgQVQ5MUNfU1NDX1NUT1AgICAgICAgICAgICAoMHgxIDw8IDEyKSAvLyAoU1NDKSBSZWNlaXZlIFN0b3AgU2VsZWN0aW9uDQorI2RlZmluZSBBVDkxQ19TU0NfU1RUT1VUICAgICAgICAgICgweDEgPDwgMTUpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgU3RhcnQgT3V0cHV0IFNlbGVjdGlvbg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1NUVERMWSAgICAgICAgICAoMHhGRiA8PCAxNikgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBTdGFydCBEZWxheQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX1BFUklPRCAgICAgICAgICAoMHhGRiA8PCAyNCkgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBQZXJpb2QgRGl2aWRlciBTZWxlY3Rpb24NCisvLyAtLS0tLS0tLSBTU0NfUkZNUiA6IChTU0MgT2Zmc2V0OiAweDE0KSBTU0MgUmVjZWl2ZSBGcmFtZSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1NDX0RBVExFTiAgICAgICAgICAoMHgxRiA8PCAgMCkgLy8gKFNTQykgRGF0YSBMZW5ndGgNCisjZGVmaW5lIEFUOTFDX1NTQ19MT09QICAgICAgICAgICAgKDB4MSA8PCAgNSkgLy8gKFNTQykgTG9vcCBNb2RlDQorI2RlZmluZSBBVDkxQ19TU0NfTVNCRiAgICAgICAgICAgICgweDEgPDwgIDcpIC8vIChTU0MpIE1vc3QgU2lnbmlmaWNhbnQgQml0IEZpcnN0DQorI2RlZmluZSBBVDkxQ19TU0NfREFUTkIgICAgICAgICAgICgweEYgPDwgIDgpIC8vIChTU0MpIERhdGEgTnVtYmVyIHBlciBGcmFtZQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX0ZTTEVOICAgICAgICAgICAoMHhGIDw8IDE2KSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgbGVuZ3RoDQorI2RlZmluZSBBVDkxQ19TU0NfRlNPUyAgICAgICAgICAgICgweDcgPDwgMjApIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBPdXRwdXQgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfU1NDX0ZTT1NfTk9ORSAgICAgICAgICAgICAgICAgKDB4MCA8PCAyMCkgLy8gKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogTm9uZSBSSyBwaW4gSW5wdXQtb25seQ0KKyNkZWZpbmUgCUFUOTFDX1NTQ19GU09TX05FR0FUSVZFICAgICAgICAgICAgICgweDEgPDwgMjApIC8vIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IE5lZ2F0aXZlIFB1bHNlDQorI2RlZmluZSAJQVQ5MUNfU1NDX0ZTT1NfUE9TSVRJVkUgICAgICAgICAgICAgKDB4MiA8PCAyMCkgLy8gKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogUG9zaXRpdmUgUHVsc2UNCisjZGVmaW5lIAlBVDkxQ19TU0NfRlNPU19MT1cgICAgICAgICAgICAgICAgICAoMHgzIDw8IDIwKSAvLyAoU1NDKSBTZWxlY3RlZCBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgU2lnbmFsOiBEcml2ZXIgTG93IGR1cmluZyBkYXRhIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1NDX0ZTT1NfSElHSCAgICAgICAgICAgICAgICAgKDB4NCA8PCAyMCkgLy8gKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogRHJpdmVyIEhpZ2ggZHVyaW5nIGRhdGEgdHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TU0NfRlNPU19UT0dHTEUgICAgICAgICAgICAgICAoMHg1IDw8IDIwKSAvLyAoU1NDKSBTZWxlY3RlZCBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgU2lnbmFsOiBUb2dnbGluZyBhdCBlYWNoIHN0YXJ0IG9mIGRhdGEgdHJhbnNmZXINCisjZGVmaW5lIEFUOTFDX1NTQ19GU0VER0UgICAgICAgICAgKDB4MSA8PCAyNCkgLy8gKFNTQykgRnJhbWUgU3luYyBFZGdlIERldGVjdGlvbg0KKy8vIC0tLS0tLS0tIFNTQ19UQ01SIDogKFNTQyBPZmZzZXQ6IDB4MTgpIFNTQyBUcmFuc21pdCBDbG9jayBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFNTQ19URk1SIDogKFNTQyBPZmZzZXQ6IDB4MWMpIFNTQyBUcmFuc21pdCBGcmFtZSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1NDX0RBVERFRiAgICAgICAgICAoMHgxIDw8ICA1KSAvLyAoU1NDKSBEYXRhIERlZmF1bHQgVmFsdWUNCisjZGVmaW5lIEFUOTFDX1NTQ19GU0RFTiAgICAgICAgICAgKDB4MSA8PCAyMykgLy8gKFNTQykgRnJhbWUgU3luYyBEYXRhIEVuYWJsZQ0KKy8vIC0tLS0tLS0tIFNTQ19TUiA6IChTU0MgT2Zmc2V0OiAweDQwKSBTU0MgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RYUkRZICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoU1NDKSBUcmFuc21pdCBSZWFkeQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RYRU1QVFkgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoU1NDKSBUcmFuc21pdCBFbXB0eQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX0VORFRYICAgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoU1NDKSBFbmQgT2YgVHJhbnNtaXNzaW9uDQorI2RlZmluZSBBVDkxQ19TU0NfVFhCVUZFICAgICAgICAgICgweDEgPDwgIDMpIC8vIChTU0MpIFRyYW5zbWl0IEJ1ZmZlciBFbXB0eQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JYUkRZICAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoU1NDKSBSZWNlaXZlIFJlYWR5DQorI2RlZmluZSBBVDkxQ19TU0NfT1ZSVU4gICAgICAgICAgICgweDEgPDwgIDUpIC8vIChTU0MpIFJlY2VpdmUgT3ZlcnJ1bg0KKyNkZWZpbmUgQVQ5MUNfU1NDX0VORFJYICAgICAgICAgICAoMHgxIDw8ICA2KSAvLyAoU1NDKSBFbmQgb2YgUmVjZXB0aW9uDQorI2RlZmluZSBBVDkxQ19TU0NfUlhCVUZGICAgICAgICAgICgweDEgPDwgIDcpIC8vIChTU0MpIFJlY2VpdmUgQnVmZmVyIEZ1bGwNCisjZGVmaW5lIEFUOTFDX1NTQ19DUDAgICAgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKFNTQykgQ29tcGFyZSAwDQorI2RlZmluZSBBVDkxQ19TU0NfQ1AxICAgICAgICAgICAgICgweDEgPDwgIDkpIC8vIChTU0MpIENvbXBhcmUgMQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RYU1lOICAgICAgICAgICAoMHgxIDw8IDEwKSAvLyAoU1NDKSBUcmFuc21pdCBTeW5jDQorI2RlZmluZSBBVDkxQ19TU0NfUlhTWU4gICAgICAgICAgICgweDEgPDwgMTEpIC8vIChTU0MpIFJlY2VpdmUgU3luYw0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RYRU5BICAgICAgICAgICAoMHgxIDw8IDE2KSAvLyAoU1NDKSBUcmFuc21pdCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1NTQ19SWEVOQSAgICAgICAgICAgKDB4MSA8PCAxNykgLy8gKFNTQykgUmVjZWl2ZSBFbmFibGUNCisvLyAtLS0tLS0tLSBTU0NfSUVSIDogKFNTQyBPZmZzZXQ6IDB4NDQpIFNTQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFNTQ19JRFIgOiAoU1NDIE9mZnNldDogMHg0OCkgU1NDIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFNTQ19JTVIgOiAoU1NDIE9mZnNldDogMHg0YykgU1NDIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVXNhcnQgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfVVNBUlQgc3RydWN0dXJlICoqKiAqLw0KLSNkZWZpbmUgVVNfQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAwICkgICAgICAgICAvKiBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBVU19NUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDQgKSAgICAgICAgIC8qIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFVTX0lFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICggOCApICAgICAgICAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVVNfSURSICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAxMiApICAgICAgICAvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVVNfSU1SICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAxNiApICAgICAgICAvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVVNfQ1NSICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAyMCApICAgICAgICAvKiBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVVNfUkhSICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAyNCApICAgICAgICAvKiBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyICovDQotI2RlZmluZSBVU19USFIgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDI4ICkgICAgICAgIC8qIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFVTX0JSR1IgICAgICAgICAgICAgICAgICAgICAgICAgICggMzIgKSAgICAgICAgLyogQmF1ZCBSYXRlIEdlbmVyYXRvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVVNfUlRPUiAgICAgICAgICAgICAgICAgICAgICAgICAgKCAzNiApICAgICAgICAvKiBSZWNlaXZlciBUaW1lLW91dCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVVNfVFRHUiAgICAgICAgICAgICAgICAgICAgICAgICAgKCA0MCApICAgICAgICAvKiBUcmFuc21pdHRlciBUaW1lLWd1YXJkIFJlZ2lzdGVyICovDQotI2RlZmluZSBVU19GSURJICAgICAgICAgICAgICAgICAgICAgICAgICAoIDY0ICkgICAgICAgIC8qIEZJX0RJX1JhdGlvIFJlZ2lzdGVyICovDQotI2RlZmluZSBVU19ORVIgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDY4ICkgICAgICAgIC8qIE5iIEVycm9ycyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVVNfWFhSICAgICAgICAgICAgICAgICAgICAgICAgICAgKCA3MiApICAgICAgICAvKiBYT05fWE9GRiBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVVNfSUYgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCA3NiApICAgICAgICAvKiBJUkRBX0ZJTFRFUiBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVVNfUlBSICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAyNTYgKSAgICAgICAvKiBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFVTX1JDUiAgICAgICAgICAgICAgICAgICAgICAgICAgICggMjYwICkgICAgICAgLyogUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBVU19UUFIgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDI2NCApICAgICAgIC8qIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFVTX1RDUiAgICAgICAgICAgICAgICAgICAgICAgICAgICggMjY4ICkgICAgICAgLyogVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVVNfUk5QUiAgICAgICAgICAgICAgICAgICAgICAgICAgKCAyNzIgKSAgICAgICAvKiBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVVNfUk5DUiAgICAgICAgICAgICAgICAgICAgICAgICAgKCAyNzYgKSAgICAgICAvKiBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVVNfVE5QUiAgICAgICAgICAgICAgICAgICAgICAgICAgKCAyODAgKSAgICAgICAvKiBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFVTX1ROQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICggMjg0ICkgICAgICAgLyogVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBVU19QVENSICAgICAgICAgICAgICAgICAgICAgICAgICAoIDI4OCApICAgICAgIC8qIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBVU19QVFNSICAgICAgICAgICAgICAgICAgICAgICAgICAoIDI5MiApICAgICAgIC8qIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0vKiAtLS0tLS0tLSBVU19DUiA6IChVU0FSVCBPZmZzZXQ6IDB4MCkgRGVidWcgVW5pdCBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19VU19SU1RTVEEgICAgICAgICAgICAgICAgICAoIDB4MSA8PCA4ICkgIC8qIChVU0FSVCkgUmVzZXQgU3RhdHVzIEJpdHMgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1NUVEJSSyAgICAgICAgICAgICAgICAgICggMHgxIDw8IDkgKSAgLyogKFVTQVJUKSBTdGFydCBCcmVhayAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfU1RQQlJLICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTAgKSAvKiAoVVNBUlQpIFN0b3AgQnJlYWsgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1NUVFRPICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDExICkgLyogKFVTQVJUKSBTdGFydCBUaW1lLW91dCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfU0VOREEgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTIgKSAvKiAoVVNBUlQpIFNlbmQgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfUlNUSVQgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTMgKSAvKiAoVVNBUlQpIFJlc2V0IEl0ZXJhdGlvbnMgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1JTVE5BQ0sgICAgICAgICAgICAgICAgICggMHgxIDw8IDE0ICkgLyogKFVTQVJUKSBSZXNldCBOb24gQWNrbm93bGVkZ2UgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1JFVFRPICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDE1ICkgLyogKFVTQVJUKSBSZWFybSBUaW1lLW91dCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfRFRSRU4gICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTYgKSAvKiAoVVNBUlQpIERhdGEgVGVybWluYWwgcmVhZHkgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19VU19EVFJESVMgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxNyApIC8qIChVU0FSVCkgRGF0YSBUZXJtaW5hbCByZWFkeSBEaXNhYmxlICovDQotI2RlZmluZSBBVDkxQ19VU19SVFNFTiAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxOCApIC8qIChVU0FSVCkgUmVxdWVzdCB0byBTZW5kIGVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfUlRTRElTICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTkgKSAvKiAoVVNBUlQpIFJlcXVlc3QgdG8gU2VuZCBEaXNhYmxlICovDQotLyogLS0tLS0tLS0gVVNfTVIgOiAoVVNBUlQgT2Zmc2V0OiAweDQpIERlYnVnIFVuaXQgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfVVNNT0RFICAgICAgICAgICAgICAgICAgKCAweEYgPDwgMCApICAvKiAoVVNBUlQpIFVzYXJ0IG1vZGUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19VU01PREVfTk9STUFMICAgICAgICggMHgwICkgICAgICAgLyogKFVTQVJUKSBOb3JtYWwgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19VU01PREVfUlM0ODUgICAgICAgICggMHgxICkgICAgICAgLyogKFVTQVJUKSBSUzQ4NSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX1VTTU9ERV9IV0hTSCAgICAgICAgKCAweDIgKSAgICAgICAvKiAoVVNBUlQpIEhhcmR3YXJlIEhhbmRzaGFraW5nICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfVVNNT0RFX01PREVNICAgICAgICAoIDB4MyApICAgICAgIC8qIChVU0FSVCkgTW9kZW0gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19VU01PREVfSVNPNzgxNl8wICAgICggMHg0ICkgICAgICAgLyogKFVTQVJUKSBJU083ODE2IHByb3RvY29sOiBUID0gMCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX1VTTU9ERV9JU083ODE2XzEgICAgKCAweDYgKSAgICAgICAvKiAoVVNBUlQpIElTTzc4MTYgcHJvdG9jb2w6IFQgPSAxICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfVVNNT0RFX0lSREEgICAgICAgICAoIDB4OCApICAgICAgIC8qIChVU0FSVCkgSXJEQSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX1VTTU9ERV9TV0hTSCAgICAgICAgKCAweEMgKSAgICAgICAvKiAoVVNBUlQpIFNvZnR3YXJlIEhhbmRzaGFraW5nICovDQotI2RlZmluZSBBVDkxQ19VU19DTEtTICAgICAgICAgICAgICAgICAgICAoIDB4MyA8PCA0ICkgIC8qIChVU0FSVCkgQ2xvY2sgU2VsZWN0aW9uIChCYXVkIFJhdGUgZ2VuZXJhdG9yIElucHV0IENsb2NrICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfQ0xLU19DTE9DSyAgICAgICAgICAoIDB4MCA8PCA0ICkgIC8qIChVU0FSVCkgQ2xvY2sgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19DTEtTX0ZESVYxICAgICAgICAgICggMHgxIDw8IDQgKSAgLyogKFVTQVJUKSBmZGl2MSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX0NMS1NfU0xPVyAgICAgICAgICAgKCAweDIgPDwgNCApICAvKiAoVVNBUlQpIHNsb3dfY2xvY2sgKEFSTSkgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19DTEtTX0VYVCAgICAgICAgICAgICggMHgzIDw8IDQgKSAgLyogKFVTQVJUKSBFeHRlcm5hbCAoU0NLKSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfQ0hSTCAgICAgICAgICAgICAgICAgICAgKCAweDMgPDwgNiApICAvKiAoVVNBUlQpIENsb2NrIFNlbGVjdGlvbiAoQmF1ZCBSYXRlIGdlbmVyYXRvciBJbnB1dCBDbG9jayAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX0NIUkxfNV9CSVRTICAgICAgICAgKCAweDAgPDwgNiApICAvKiAoVVNBUlQpIENoYXJhY3RlciBMZW5ndGg6IDUgYml0cyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX0NIUkxfNl9CSVRTICAgICAgICAgKCAweDEgPDwgNiApICAvKiAoVVNBUlQpIENoYXJhY3RlciBMZW5ndGg6IDYgYml0cyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX0NIUkxfN19CSVRTICAgICAgICAgKCAweDIgPDwgNiApICAvKiAoVVNBUlQpIENoYXJhY3RlciBMZW5ndGg6IDcgYml0cyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX0NIUkxfOF9CSVRTICAgICAgICAgKCAweDMgPDwgNiApICAvKiAoVVNBUlQpIENoYXJhY3RlciBMZW5ndGg6IDggYml0cyAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfU1lOQyAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgOCApICAvKiAoVVNBUlQpIFN5bmNocm9ub3VzIE1vZGUgU2VsZWN0ICovDQotI2RlZmluZSBBVDkxQ19VU19OQlNUT1AgICAgICAgICAgICAgICAgICAoIDB4MyA8PCAxMiApIC8qIChVU0FSVCkgTnVtYmVyIG9mIFN0b3AgYml0cyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX05CU1RPUF8xX0JJVCAgICAgICAgKCAweDAgPDwgMTIgKSAvKiAoVVNBUlQpIDEgc3RvcCBiaXQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19OQlNUT1BfMTVfQklUICAgICAgICggMHgxIDw8IDEyICkgLyogKFVTQVJUKSBBc3luY2hyb25vdXMgKFNZTkM9MCkgMiBzdG9wIGJpdHMgU3luY2hyb25vdXMgKFNZTkM9MSkgMiBzdG9wIGJpdHMgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19OQlNUT1BfMl9CSVQgICAgICAgICggMHgyIDw8IDEyICkgLyogKFVTQVJUKSAyIHN0b3AgYml0cyAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfTVNCRiAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTYgKSAvKiAoVVNBUlQpIEJpdCBPcmRlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfTU9ERTkgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTcgKSAvKiAoVVNBUlQpIDktYml0IENoYXJhY3RlciBsZW5ndGggKi8NCi0jZGVmaW5lIEFUOTFDX1VTX0NLTE8gICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDE4ICkgLyogKFVTQVJUKSBDbG9jayBPdXRwdXQgU2VsZWN0ICovDQotI2RlZmluZSBBVDkxQ19VU19PVkVSICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxOSApIC8qIChVU0FSVCkgT3ZlciBTYW1wbGluZyBNb2RlICovDQotI2RlZmluZSBBVDkxQ19VU19JTkFDSyAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAyMCApIC8qIChVU0FSVCkgSW5oaWJpdCBOb24gQWNrbm93bGVkZ2UgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX0RTTkFDSyAgICAgICAgICAgICAgICAgICggMHgxIDw8IDIxICkgLyogKFVTQVJUKSBEaXNhYmxlIFN1Y2Nlc3NpdmUgTkFDSyAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfTUFYX0lURVIgICAgICAgICAgICAgICAgKCAweDEgPDwgMjQgKSAvKiAoVVNBUlQpIE51bWJlciBvZiBSZXBldGl0aW9ucyAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfRklMVEVSICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMjggKSAvKiAoVVNBUlQpIFJlY2VpdmUgTGluZSBGaWx0ZXIgKi8NCi0vKiAtLS0tLS0tLSBVU19JRVIgOiAoVVNBUlQgT2Zmc2V0OiAweDgpIERlYnVnIFVuaXQgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfUlhCUksgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMiApICAvKiAoVVNBUlQpIEJyZWFrIFJlY2VpdmVkL0VuZCBvZiBCcmVhayAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfVElNRU9VVCAgICAgICAgICAgICAgICAgKCAweDEgPDwgOCApICAvKiAoVVNBUlQpIFJlY2VpdmVyIFRpbWUtb3V0ICovDQotI2RlZmluZSBBVDkxQ19VU19JVEVSQVRJT04gICAgICAgICAgICAgICAoIDB4MSA8PCAxMCApIC8qIChVU0FSVCkgTWF4IG51bWJlciBvZiBSZXBldGl0aW9ucyBSZWFjaGVkICovDQotI2RlZmluZSBBVDkxQ19VU19OQUNLICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxMyApIC8qIChVU0FSVCkgTm9uIEFja25vd2xlZGdlICovDQotI2RlZmluZSBBVDkxQ19VU19SSUlDICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxNiApIC8qIChVU0FSVCkgUmluZyBJTmRpY2F0b3IgSW5wdXQgQ2hhbmdlIEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX0RTUklDICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDE3ICkgLyogKFVTQVJUKSBEYXRhIFNldCBSZWFkeSBJbnB1dCBDaGFuZ2UgRmxhZyAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfRENESUMgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTggKSAvKiAoVVNBUlQpIERhdGEgQ2FycmllciBGbGFnICovDQotI2RlZmluZSBBVDkxQ19VU19DVFNJQyAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxOSApIC8qIChVU0FSVCkgQ2xlYXIgVG8gU2VuZCBJbnB1dCBDaGFuZ2UgRmxhZyAqLw0KLS8qIC0tLS0tLS0tIFVTX0lEUiA6IChVU0FSVCBPZmZzZXQ6IDB4YykgRGVidWcgVW5pdCBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFVTX0lNUiA6IChVU0FSVCBPZmZzZXQ6IDB4MTApIERlYnVnIFVuaXQgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBVU19DU1IgOiAoVVNBUlQgT2Zmc2V0OiAweDE0KSBEZWJ1ZyBVbml0IENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19VU19SSSAgICAgKCAweDEgPDwgMjAgKSAgICAgICAgIC8qIChVU0FSVCkgSW1hZ2Ugb2YgUkkgSW5wdXQgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX0RTUiAgICAoIDB4MSA8PCAyMSApICAgICAgICAgLyogKFVTQVJUKSBJbWFnZSBvZiBEU1IgSW5wdXQgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX0RDRCAgICAoIDB4MSA8PCAyMiApICAgICAgICAgLyogKFVTQVJUKSBJbWFnZSBvZiBEQ0QgSW5wdXQgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX0NUUyAgICAoIDB4MSA8PCAyMyApICAgICAgICAgLyogKFVTQVJUKSBJbWFnZSBvZiBDVFMgSW5wdXQgKi8NCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFVzYXJ0DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1VTQVJUIHN0cnVjdHVyZSAqKioNCisjZGVmaW5lIFVTX0NSICAgICAgICAgICAoIDApIC8vIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIFVTX01SICAgICAgICAgICAoIDQpIC8vIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIFVTX0lFUiAgICAgICAgICAoIDgpIC8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFVTX0lEUiAgICAgICAgICAoMTIpIC8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBVU19JTVIgICAgICAgICAgKDE2KSAvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgVVNfQ1NSICAgICAgICAgICgyMCkgLy8gQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFVTX1JIUiAgICAgICAgICAoMjQpIC8vIFJlY2VpdmVyIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIFVTX1RIUiAgICAgICAgICAoMjgpIC8vIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIFVTX0JSR1IgICAgICAgICAoMzIpIC8vIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXINCisjZGVmaW5lIFVTX1JUT1IgICAgICAgICAoMzYpIC8vIFJlY2VpdmVyIFRpbWUtb3V0IFJlZ2lzdGVyDQorI2RlZmluZSBVU19UVEdSICAgICAgICAgKDQwKSAvLyBUcmFuc21pdHRlciBUaW1lLWd1YXJkIFJlZ2lzdGVyDQorI2RlZmluZSBVU19GSURJICAgICAgICAgKDY0KSAvLyBGSV9ESV9SYXRpbyBSZWdpc3Rlcg0KKyNkZWZpbmUgVVNfTkVSICAgICAgICAgICg2OCkgLy8gTmIgRXJyb3JzIFJlZ2lzdGVyDQorI2RlZmluZSBVU19YWFIgICAgICAgICAgKDcyKSAvLyBYT05fWE9GRiBSZWdpc3Rlcg0KKyNkZWZpbmUgVVNfSUYgICAgICAgICAgICg3NikgLy8gSVJEQV9GSUxURVIgUmVnaXN0ZXINCisjZGVmaW5lIFVTX1JQUiAgICAgICAgICAoMjU2KSAvLyBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFVTX1JDUiAgICAgICAgICAoMjYwKSAvLyBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFVTX1RQUiAgICAgICAgICAoMjY0KSAvLyBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBVU19UQ1IgICAgICAgICAgKDI2OCkgLy8gVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgVVNfUk5QUiAgICAgICAgICgyNzIpIC8vIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBVU19STkNSICAgICAgICAgKDI3NikgLy8gUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFVTX1ROUFIgICAgICAgICAoMjgwKSAvLyBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFVTX1ROQ1IgICAgICAgICAoMjg0KSAvLyBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFVTX1BUQ1IgICAgICAgICAoMjg4KSAvLyBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgVVNfUFRTUiAgICAgICAgICgyOTIpIC8vIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisvLyAtLS0tLS0tLSBVU19DUiA6IChVU0FSVCBPZmZzZXQ6IDB4MCkgRGVidWcgVW5pdCBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVVNfUlNUU1RBICAgICAgICAgICAoMHgxIDw8ICA4KSAvLyAoVVNBUlQpIFJlc2V0IFN0YXR1cyBCaXRzDQorI2RlZmluZSBBVDkxQ19VU19TVFRCUksgICAgICAgICAgICgweDEgPDwgIDkpIC8vIChVU0FSVCkgU3RhcnQgQnJlYWsNCisjZGVmaW5lIEFUOTFDX1VTX1NUUEJSSyAgICAgICAgICAgKDB4MSA8PCAxMCkgLy8gKFVTQVJUKSBTdG9wIEJyZWFrDQorI2RlZmluZSBBVDkxQ19VU19TVFRUTyAgICAgICAgICAgICgweDEgPDwgMTEpIC8vIChVU0FSVCkgU3RhcnQgVGltZS1vdXQNCisjZGVmaW5lIEFUOTFDX1VTX1NFTkRBICAgICAgICAgICAgKDB4MSA8PCAxMikgLy8gKFVTQVJUKSBTZW5kIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX1VTX1JTVElUICAgICAgICAgICAgKDB4MSA8PCAxMykgLy8gKFVTQVJUKSBSZXNldCBJdGVyYXRpb25zDQorI2RlZmluZSBBVDkxQ19VU19SU1ROQUNLICAgICAgICAgICgweDEgPDwgMTQpIC8vIChVU0FSVCkgUmVzZXQgTm9uIEFja25vd2xlZGdlDQorI2RlZmluZSBBVDkxQ19VU19SRVRUTyAgICAgICAgICAgICgweDEgPDwgMTUpIC8vIChVU0FSVCkgUmVhcm0gVGltZS1vdXQNCisjZGVmaW5lIEFUOTFDX1VTX0RUUkVOICAgICAgICAgICAgKDB4MSA8PCAxNikgLy8gKFVTQVJUKSBEYXRhIFRlcm1pbmFsIHJlYWR5IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfRFRSRElTICAgICAgICAgICAoMHgxIDw8IDE3KSAvLyAoVVNBUlQpIERhdGEgVGVybWluYWwgcmVhZHkgRGlzYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfUlRTRU4gICAgICAgICAgICAoMHgxIDw8IDE4KSAvLyAoVVNBUlQpIFJlcXVlc3QgdG8gU2VuZCBlbmFibGUNCisjZGVmaW5lIEFUOTFDX1VTX1JUU0RJUyAgICAgICAgICAgKDB4MSA8PCAxOSkgLy8gKFVTQVJUKSBSZXF1ZXN0IHRvIFNlbmQgRGlzYWJsZQ0KKy8vIC0tLS0tLS0tIFVTX01SIDogKFVTQVJUIE9mZnNldDogMHg0KSBEZWJ1ZyBVbml0IE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VU19VU01PREUgICAgICAgICAgICgweEYgPDwgIDApIC8vIChVU0FSVCkgVXNhcnQgbW9kZQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1VTTU9ERV9OT1JNQUwgICAgICAgICAgICAgICAoMHgwKSAvLyAoVVNBUlQpIE5vcm1hbA0KKyNkZWZpbmUgCUFUOTFDX1VTX1VTTU9ERV9SUzQ4NSAgICAgICAgICAgICAgICAoMHgxKSAvLyAoVVNBUlQpIFJTNDg1DQorI2RlZmluZSAJQVQ5MUNfVVNfVVNNT0RFX0hXSFNIICAgICAgICAgICAgICAgICgweDIpIC8vIChVU0FSVCkgSGFyZHdhcmUgSGFuZHNoYWtpbmcNCisjZGVmaW5lIAlBVDkxQ19VU19VU01PREVfTU9ERU0gICAgICAgICAgICAgICAgKDB4MykgLy8gKFVTQVJUKSBNb2RlbQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1VTTU9ERV9JU083ODE2XzAgICAgICAgICAgICAoMHg0KSAvLyAoVVNBUlQpIElTTzc4MTYgcHJvdG9jb2w6IFQgPSAwDQorI2RlZmluZSAJQVQ5MUNfVVNfVVNNT0RFX0lTTzc4MTZfMSAgICAgICAgICAgICgweDYpIC8vIChVU0FSVCkgSVNPNzgxNiBwcm90b2NvbDogVCA9IDENCisjZGVmaW5lIAlBVDkxQ19VU19VU01PREVfSVJEQSAgICAgICAgICAgICAgICAgKDB4OCkgLy8gKFVTQVJUKSBJckRBDQorI2RlZmluZSAJQVQ5MUNfVVNfVVNNT0RFX1NXSFNIICAgICAgICAgICAgICAgICgweEMpIC8vIChVU0FSVCkgU29mdHdhcmUgSGFuZHNoYWtpbmcNCisjZGVmaW5lIEFUOTFDX1VTX0NMS1MgICAgICAgICAgICAgKDB4MyA8PCAgNCkgLy8gKFVTQVJUKSBDbG9jayBTZWxlY3Rpb24gKEJhdWQgUmF0ZSBnZW5lcmF0b3IgSW5wdXQgQ2xvY2sNCisjZGVmaW5lIAlBVDkxQ19VU19DTEtTX0NMT0NLICAgICAgICAgICAgICAgICgweDAgPDwgIDQpIC8vIChVU0FSVCkgQ2xvY2sNCisjZGVmaW5lIAlBVDkxQ19VU19DTEtTX0ZESVYxICAgICAgICAgICAgICAgICgweDEgPDwgIDQpIC8vIChVU0FSVCkgZmRpdjENCisjZGVmaW5lIAlBVDkxQ19VU19DTEtTX1NMT1cgICAgICAgICAgICAgICAgICgweDIgPDwgIDQpIC8vIChVU0FSVCkgc2xvd19jbG9jayAoQVJNKQ0KKyNkZWZpbmUgCUFUOTFDX1VTX0NMS1NfRVhUICAgICAgICAgICAgICAgICAgKDB4MyA8PCAgNCkgLy8gKFVTQVJUKSBFeHRlcm5hbCAoU0NLKQ0KKyNkZWZpbmUgQVQ5MUNfVVNfQ0hSTCAgICAgICAgICAgICAoMHgzIDw8ICA2KSAvLyAoVVNBUlQpIENsb2NrIFNlbGVjdGlvbiAoQmF1ZCBSYXRlIGdlbmVyYXRvciBJbnB1dCBDbG9jaw0KKyNkZWZpbmUgCUFUOTFDX1VTX0NIUkxfNV9CSVRTICAgICAgICAgICAgICAgKDB4MCA8PCAgNikgLy8gKFVTQVJUKSBDaGFyYWN0ZXIgTGVuZ3RoOiA1IGJpdHMNCisjZGVmaW5lIAlBVDkxQ19VU19DSFJMXzZfQklUUyAgICAgICAgICAgICAgICgweDEgPDwgIDYpIC8vIChVU0FSVCkgQ2hhcmFjdGVyIExlbmd0aDogNiBiaXRzDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0hSTF83X0JJVFMgICAgICAgICAgICAgICAoMHgyIDw8ICA2KSAvLyAoVVNBUlQpIENoYXJhY3RlciBMZW5ndGg6IDcgYml0cw0KKyNkZWZpbmUgCUFUOTFDX1VTX0NIUkxfOF9CSVRTICAgICAgICAgICAgICAgKDB4MyA8PCAgNikgLy8gKFVTQVJUKSBDaGFyYWN0ZXIgTGVuZ3RoOiA4IGJpdHMNCisjZGVmaW5lIEFUOTFDX1VTX1NZTkMgICAgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKFVTQVJUKSBTeW5jaHJvbm91cyBNb2RlIFNlbGVjdA0KKyNkZWZpbmUgQVQ5MUNfVVNfTkJTVE9QICAgICAgICAgICAoMHgzIDw8IDEyKSAvLyAoVVNBUlQpIE51bWJlciBvZiBTdG9wIGJpdHMNCisjZGVmaW5lIAlBVDkxQ19VU19OQlNUT1BfMV9CSVQgICAgICAgICAgICAgICAgKDB4MCA8PCAxMikgLy8gKFVTQVJUKSAxIHN0b3AgYml0DQorI2RlZmluZSAJQVQ5MUNfVVNfTkJTVE9QXzE1X0JJVCAgICAgICAgICAgICAgICgweDEgPDwgMTIpIC8vIChVU0FSVCkgQXN5bmNocm9ub3VzIChTWU5DPTApIDIgc3RvcCBiaXRzIFN5bmNocm9ub3VzIChTWU5DPTEpIDIgc3RvcCBiaXRzDQorI2RlZmluZSAJQVQ5MUNfVVNfTkJTVE9QXzJfQklUICAgICAgICAgICAgICAgICgweDIgPDwgMTIpIC8vIChVU0FSVCkgMiBzdG9wIGJpdHMNCisjZGVmaW5lIEFUOTFDX1VTX01TQkYgICAgICAgICAgICAgKDB4MSA8PCAxNikgLy8gKFVTQVJUKSBCaXQgT3JkZXINCisjZGVmaW5lIEFUOTFDX1VTX01PREU5ICAgICAgICAgICAgKDB4MSA8PCAxNykgLy8gKFVTQVJUKSA5LWJpdCBDaGFyYWN0ZXIgbGVuZ3RoDQorI2RlZmluZSBBVDkxQ19VU19DS0xPICAgICAgICAgICAgICgweDEgPDwgMTgpIC8vIChVU0FSVCkgQ2xvY2sgT3V0cHV0IFNlbGVjdA0KKyNkZWZpbmUgQVQ5MUNfVVNfT1ZFUiAgICAgICAgICAgICAoMHgxIDw8IDE5KSAvLyAoVVNBUlQpIE92ZXIgU2FtcGxpbmcgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfSU5BQ0sgICAgICAgICAgICAoMHgxIDw8IDIwKSAvLyAoVVNBUlQpIEluaGliaXQgTm9uIEFja25vd2xlZGdlDQorI2RlZmluZSBBVDkxQ19VU19EU05BQ0sgICAgICAgICAgICgweDEgPDwgMjEpIC8vIChVU0FSVCkgRGlzYWJsZSBTdWNjZXNzaXZlIE5BQ0sNCisjZGVmaW5lIEFUOTFDX1VTX01BWF9JVEVSICAgICAgICAgKDB4MSA8PCAyNCkgLy8gKFVTQVJUKSBOdW1iZXIgb2YgUmVwZXRpdGlvbnMNCisjZGVmaW5lIEFUOTFDX1VTX0ZJTFRFUiAgICAgICAgICAgKDB4MSA8PCAyOCkgLy8gKFVTQVJUKSBSZWNlaXZlIExpbmUgRmlsdGVyDQorLy8gLS0tLS0tLS0gVVNfSUVSIDogKFVTQVJUIE9mZnNldDogMHg4KSBEZWJ1ZyBVbml0IEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VU19SWEJSSyAgICAgICAgICAgICgweDEgPDwgIDIpIC8vIChVU0FSVCkgQnJlYWsgUmVjZWl2ZWQvRW5kIG9mIEJyZWFrDQorI2RlZmluZSBBVDkxQ19VU19USU1FT1VUICAgICAgICAgICgweDEgPDwgIDgpIC8vIChVU0FSVCkgUmVjZWl2ZXIgVGltZS1vdXQNCisjZGVmaW5lIEFUOTFDX1VTX0lURVJBVElPTiAgICAgICAgKDB4MSA8PCAxMCkgLy8gKFVTQVJUKSBNYXggbnVtYmVyIG9mIFJlcGV0aXRpb25zIFJlYWNoZWQNCisjZGVmaW5lIEFUOTFDX1VTX05BQ0sgICAgICAgICAgICAgKDB4MSA8PCAxMykgLy8gKFVTQVJUKSBOb24gQWNrbm93bGVkZ2UNCisjZGVmaW5lIEFUOTFDX1VTX1JJSUMgICAgICAgICAgICAgKDB4MSA8PCAxNikgLy8gKFVTQVJUKSBSaW5nIElOZGljYXRvciBJbnB1dCBDaGFuZ2UgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfVVNfRFNSSUMgICAgICAgICAgICAoMHgxIDw8IDE3KSAvLyAoVVNBUlQpIERhdGEgU2V0IFJlYWR5IElucHV0IENoYW5nZSBGbGFnDQorI2RlZmluZSBBVDkxQ19VU19EQ0RJQyAgICAgICAgICAgICgweDEgPDwgMTgpIC8vIChVU0FSVCkgRGF0YSBDYXJyaWVyIEZsYWcNCisjZGVmaW5lIEFUOTFDX1VTX0NUU0lDICAgICAgICAgICAgKDB4MSA8PCAxOSkgLy8gKFVTQVJUKSBDbGVhciBUbyBTZW5kIElucHV0IENoYW5nZSBGbGFnDQorLy8gLS0tLS0tLS0gVVNfSURSIDogKFVTQVJUIE9mZnNldDogMHhjKSBEZWJ1ZyBVbml0IEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFVTX0lNUiA6IChVU0FSVCBPZmZzZXQ6IDB4MTApIERlYnVnIFVuaXQgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVVNfQ1NSIDogKFVTQVJUIE9mZnNldDogMHgxNCkgRGVidWcgVW5pdCBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VTX1JJICAgICAgICAgICAgICAgKDB4MSA8PCAyMCkgLy8gKFVTQVJUKSBJbWFnZSBvZiBSSSBJbnB1dA0KKyNkZWZpbmUgQVQ5MUNfVVNfRFNSICAgICAgICAgICAgICAoMHgxIDw8IDIxKSAvLyAoVVNBUlQpIEltYWdlIG9mIERTUiBJbnB1dA0KKyNkZWZpbmUgQVQ5MUNfVVNfRENEICAgICAgICAgICAgICAoMHgxIDw8IDIyKSAvLyAoVVNBUlQpIEltYWdlIG9mIERDRCBJbnB1dA0KKyNkZWZpbmUgQVQ5MUNfVVNfQ1RTICAgICAgICAgICAgICAoMHgxIDw8IDIzKSAvLyAoVVNBUlQpIEltYWdlIG9mIENUUyBJbnB1dA0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVHdvLXdpcmUgSW50ZXJmYWNlICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1RXSSBzdHJ1Y3R1cmUgKioqICovDQotI2RlZmluZSBUV0lfQ1IgICAgICAgICAgICAgICAgICAgICAgICAgKCAwICkgICAgICAgICAgLyogQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVFdJX01NUiAgICAgICAgICAgICAgICAgICAgICAgICggNCApICAgICAgICAgIC8qIE1hc3RlciBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBUV0lfU01SICAgICAgICAgICAgICAgICAgICAgICAgKCA4ICkgICAgICAgICAgLyogU2xhdmUgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVFdJX0lBRFIgICAgICAgICAgICAgICAgICAgICAgICggMTIgKSAgICAgICAgIC8qIEludGVybmFsIEFkZHJlc3MgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFRXSV9DV0dSICAgICAgICAgICAgICAgICAgICAgICAoIDE2ICkgICAgICAgICAvKiBDbG9jayBXYXZlZm9ybSBHZW5lcmF0b3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFRXSV9TUiAgICAgICAgICAgICAgICAgICAgICAgICAoIDMyICkgICAgICAgICAvKiBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFRXSV9JRVIgICAgICAgICAgICAgICAgICAgICAgICAoIDM2ICkgICAgICAgICAvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBUV0lfSURSICAgICAgICAgICAgICAgICAgICAgICAgKCA0MCApICAgICAgICAgLyogSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFRXSV9JTVIgICAgICAgICAgICAgICAgICAgICAgICAoIDQ0ICkgICAgICAgICAvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVFdJX1JIUiAgICAgICAgICAgICAgICAgICAgICAgICggNDggKSAgICAgICAgIC8qIFJlY2VpdmUgSG9sZGluZyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVFdJX1RIUiAgICAgICAgICAgICAgICAgICAgICAgICggNTIgKSAgICAgICAgIC8qIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0vKiAtLS0tLS0tLSBUV0lfQ1IgOiAoVFdJIE9mZnNldDogMHgwKSBUV0kgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX1NUQVJUICAgICAgICAgICAgICAgICggMHgxIDw8IDAgKSAgIC8qIChUV0kpIFNlbmQgYSBTVEFSVCBDb25kaXRpb24gKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9TVE9QICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxICkgICAvKiAoVFdJKSBTZW5kIGEgU1RPUCBDb25kaXRpb24gKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9NU0VOICAgICAgICAgICAgICAgICAoIDB4MSA8PCAyICkgICAvKiAoVFdJKSBUV0kgTWFzdGVyIFRyYW5zZmVyIEVuYWJsZWQgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9NU0RJUyAgICAgICAgICAgICAgICAoIDB4MSA8PCAzICkgICAvKiAoVFdJKSBUV0kgTWFzdGVyIFRyYW5zZmVyIERpc2FibGVkICovDQotI2RlZmluZSBBVDkxQ19UV0lfU1ZFTiAgICAgICAgICAgICAgICAgKCAweDEgPDwgNCApICAgLyogKFRXSSkgVFdJIFNsYXZlIFRyYW5zZmVyIEVuYWJsZWQgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9TVkRJUyAgICAgICAgICAgICAgICAoIDB4MSA8PCA1ICkgICAvKiAoVFdJKSBUV0kgU2xhdmUgVHJhbnNmZXIgRGlzYWJsZWQgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9TV1JTVCAgICAgICAgICAgICAgICAoIDB4MSA8PCA3ICkgICAvKiAoVFdJKSBTb2Z0d2FyZSBSZXNldCAqLw0KLS8qIC0tLS0tLS0tIFRXSV9NTVIgOiAoVFdJIE9mZnNldDogMHg0KSBUV0kgTWFzdGVyIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9JQURSU1ogICAgICAgICAgICAgICAoIDB4MyA8PCA4ICkgICAvKiAoVFdJKSBJbnRlcm5hbCBEZXZpY2UgQWRkcmVzcyBTaXplICovDQotI2RlZmluZSAgICAgQVQ5MUNfVFdJX0lBRFJTWl9OTyAgICAgICAgKCAweDAgPDwgOCApICAgLyogKFRXSSkgTm8gaW50ZXJuYWwgZGV2aWNlIGFkZHJlc3MgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UV0lfSUFEUlNaXzFfQllURSAgICAoIDB4MSA8PCA4ICkgICAvKiAoVFdJKSBPbmUtYnl0ZSBpbnRlcm5hbCBkZXZpY2UgYWRkcmVzcyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RXSV9JQURSU1pfMl9CWVRFICAgICggMHgyIDw8IDggKSAgIC8qIChUV0kpIFR3by1ieXRlIGludGVybmFsIGRldmljZSBhZGRyZXNzICovDQotI2RlZmluZSAgICAgQVQ5MUNfVFdJX0lBRFJTWl8zX0JZVEUgICAgKCAweDMgPDwgOCApICAgLyogKFRXSSkgVGhyZWUtYnl0ZSBpbnRlcm5hbCBkZXZpY2UgYWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX01SRUFEICAgICAgICAgICAgICAgICggMHgxIDw8IDEyICkgIC8qIChUV0kpIE1hc3RlciBSZWFkIERpcmVjdGlvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX0RBRFIgICAgICAgICAgICAgICAgICggMHg3RiA8PCAxNiApIC8qIChUV0kpIERldmljZSBBZGRyZXNzICovDQotLyogLS0tLS0tLS0gVFdJX1NNUiA6IChUV0kgT2Zmc2V0OiAweDgpIFRXSSBTbGF2ZSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19UV0lfU0FEUiAgICAgICAgICAgICAgICAgKCAweDdGIDw8IDE2ICkgLyogKFRXSSkgU2xhdmUgRGV2aWNlIEFkZHJlc3MgKi8NCi0vKiAtLS0tLS0tLSBUV0lfQ1dHUiA6IChUV0kgT2Zmc2V0OiAweDEwKSBUV0kgQ2xvY2sgV2F2ZWZvcm0gR2VuZXJhdG9yIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19UV0lfQ0xESVYgICAgICAgICAgICAgICAgKCAweEZGIDw8IDAgKSAgLyogKFRXSSkgQ2xvY2sgTG93IERpdmlkZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9DSERJViAgICAgICAgICAgICAgICAoIDB4RkYgPDwgOCApICAvKiAoVFdJKSBDbG9jayBIaWdoIERpdmlkZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9DS0RJViAgICAgICAgICAgICAgICAoIDB4NyA8PCAxNiApICAvKiAoVFdJKSBDbG9jayBEaXZpZGVyICovDQotLyogLS0tLS0tLS0gVFdJX1NSIDogKFRXSSBPZmZzZXQ6IDB4MjApIFRXSSBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9UWENPTVAgICAgICAgICAgICAgICAoIDB4MSA8PCAwICkgICAvKiAoVFdJKSBUcmFuc21pc3Npb24gQ29tcGxldGVkICovDQotI2RlZmluZSBBVDkxQ19UV0lfUlhSRFkgICAgICAgICAgICAgICAgKCAweDEgPDwgMSApICAgLyogKFRXSSkgUmVjZWl2ZSBob2xkaW5nIHJlZ2lzdGVyIFJlYURZICovDQotI2RlZmluZSBBVDkxQ19UV0lfVFhSRFkgICAgICAgICAgICAgICAgKCAweDEgPDwgMiApICAgLyogKFRXSSkgVHJhbnNtaXQgaG9sZGluZyByZWdpc3RlciBSZWFEWSAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX1NWUkVBRCAgICAgICAgICAgICAgICggMHgxIDw8IDMgKSAgIC8qIChUV0kpIFNsYXZlIFJlYWQgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9TVkFDQyAgICAgICAgICAgICAgICAoIDB4MSA8PCA0ICkgICAvKiAoVFdJKSBTbGF2ZSBBY2Nlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9HQ0FDQyAgICAgICAgICAgICAgICAoIDB4MSA8PCA1ICkgICAvKiAoVFdJKSBHZW5lcmFsIENhbGwgQWNjZXNzICovDQotI2RlZmluZSBBVDkxQ19UV0lfT1ZSRSAgICAgICAgICAgICAgICAgKCAweDEgPDwgNiApICAgLyogKFRXSSkgT3ZlcnJ1biBFcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX1VOUkUgICAgICAgICAgICAgICAgICggMHgxIDw8IDcgKSAgIC8qIChUV0kpIFVuZGVycnVuIEVycm9yICovDQotI2RlZmluZSBBVDkxQ19UV0lfTkFDSyAgICAgICAgICAgICAgICAgKCAweDEgPDwgOCApICAgLyogKFRXSSkgTm90IEFja25vd2xlZGdlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX0FSQkxTVCAgICAgICAgICAgICAgICggMHgxIDw8IDkgKSAgIC8qIChUV0kpIEFyYml0cmF0aW9uIExvc3QgKi8NCi0vKiAtLS0tLS0tLSBUV0lfSUVSIDogKFRXSSBPZmZzZXQ6IDB4MjQpIFRXSSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gVFdJX0lEUiA6IChUV0kgT2Zmc2V0OiAweDI4KSBUV0kgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBUV0lfSU1SIDogKFRXSSBPZmZzZXQ6IDB4MmMpIFRXSSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSAqLw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVHdvLXdpcmUgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1RXSSBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBUV0lfQ1IgICAgICAgICAgKCAwKSAvLyBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBUV0lfTU1SICAgICAgICAgKCA0KSAvLyBNYXN0ZXIgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgVFdJX1NNUiAgICAgICAgICggOCkgLy8gU2xhdmUgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgVFdJX0lBRFIgICAgICAgICgxMikgLy8gSW50ZXJuYWwgQWRkcmVzcyBSZWdpc3Rlcg0KKyNkZWZpbmUgVFdJX0NXR1IgICAgICAgICgxNikgLy8gQ2xvY2sgV2F2ZWZvcm0gR2VuZXJhdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBUV0lfU1IgICAgICAgICAgKDMyKSAvLyBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFRXSV9JRVIgICAgICAgICAoMzYpIC8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFRXSV9JRFIgICAgICAgICAoNDApIC8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBUV0lfSU1SICAgICAgICAgKDQ0KSAvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgVFdJX1JIUiAgICAgICAgICg0OCkgLy8gUmVjZWl2ZSBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBUV0lfVEhSICAgICAgICAgKDUyKSAvLyBUcmFuc21pdCBIb2xkaW5nIFJlZ2lzdGVyDQorLy8gLS0tLS0tLS0gVFdJX0NSIDogKFRXSSBPZmZzZXQ6IDB4MCkgVFdJIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UV0lfU1RBUlQgICAgICAgICAgICgweDEgPDwgIDApIC8vIChUV0kpIFNlbmQgYSBTVEFSVCBDb25kaXRpb24NCisjZGVmaW5lIEFUOTFDX1RXSV9TVE9QICAgICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKFRXSSkgU2VuZCBhIFNUT1AgQ29uZGl0aW9uDQorI2RlZmluZSBBVDkxQ19UV0lfTVNFTiAgICAgICAgICAgICgweDEgPDwgIDIpIC8vIChUV0kpIFRXSSBNYXN0ZXIgVHJhbnNmZXIgRW5hYmxlZA0KKyNkZWZpbmUgQVQ5MUNfVFdJX01TRElTICAgICAgICAgICAoMHgxIDw8ICAzKSAvLyAoVFdJKSBUV0kgTWFzdGVyIFRyYW5zZmVyIERpc2FibGVkDQorI2RlZmluZSBBVDkxQ19UV0lfU1ZFTiAgICAgICAgICAgICgweDEgPDwgIDQpIC8vIChUV0kpIFRXSSBTbGF2ZSBUcmFuc2ZlciBFbmFibGVkDQorI2RlZmluZSBBVDkxQ19UV0lfU1ZESVMgICAgICAgICAgICgweDEgPDwgIDUpIC8vIChUV0kpIFRXSSBTbGF2ZSBUcmFuc2ZlciBEaXNhYmxlZA0KKyNkZWZpbmUgQVQ5MUNfVFdJX1NXUlNUICAgICAgICAgICAoMHgxIDw8ICA3KSAvLyAoVFdJKSBTb2Z0d2FyZSBSZXNldA0KKy8vIC0tLS0tLS0tIFRXSV9NTVIgOiAoVFdJIE9mZnNldDogMHg0KSBUV0kgTWFzdGVyIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UV0lfSUFEUlNaICAgICAgICAgICgweDMgPDwgIDgpIC8vIChUV0kpIEludGVybmFsIERldmljZSBBZGRyZXNzIFNpemUNCisjZGVmaW5lIAlBVDkxQ19UV0lfSUFEUlNaX05PICAgICAgICAgICAgICAgICAgICgweDAgPDwgIDgpIC8vIChUV0kpIE5vIGludGVybmFsIGRldmljZSBhZGRyZXNzDQorI2RlZmluZSAJQVQ5MUNfVFdJX0lBRFJTWl8xX0JZVEUgICAgICAgICAgICAgICAoMHgxIDw8ICA4KSAvLyAoVFdJKSBPbmUtYnl0ZSBpbnRlcm5hbCBkZXZpY2UgYWRkcmVzcw0KKyNkZWZpbmUgCUFUOTFDX1RXSV9JQURSU1pfMl9CWVRFICAgICAgICAgICAgICAgKDB4MiA8PCAgOCkgLy8gKFRXSSkgVHdvLWJ5dGUgaW50ZXJuYWwgZGV2aWNlIGFkZHJlc3MNCisjZGVmaW5lIAlBVDkxQ19UV0lfSUFEUlNaXzNfQllURSAgICAgICAgICAgICAgICgweDMgPDwgIDgpIC8vIChUV0kpIFRocmVlLWJ5dGUgaW50ZXJuYWwgZGV2aWNlIGFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX1RXSV9NUkVBRCAgICAgICAgICAgKDB4MSA8PCAxMikgLy8gKFRXSSkgTWFzdGVyIFJlYWQgRGlyZWN0aW9uDQorI2RlZmluZSBBVDkxQ19UV0lfREFEUiAgICAgICAgICAgICgweDdGIDw8IDE2KSAvLyAoVFdJKSBEZXZpY2UgQWRkcmVzcw0KKy8vIC0tLS0tLS0tIFRXSV9TTVIgOiAoVFdJIE9mZnNldDogMHg4KSBUV0kgU2xhdmUgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RXSV9TQURSICAgICAgICAgICAgKDB4N0YgPDwgMTYpIC8vIChUV0kpIFNsYXZlIERldmljZSBBZGRyZXNzDQorLy8gLS0tLS0tLS0gVFdJX0NXR1IgOiAoVFdJIE9mZnNldDogMHgxMCkgVFdJIENsb2NrIFdhdmVmb3JtIEdlbmVyYXRvciBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RXSV9DTERJViAgICAgICAgICAgKDB4RkYgPDwgIDApIC8vIChUV0kpIENsb2NrIExvdyBEaXZpZGVyDQorI2RlZmluZSBBVDkxQ19UV0lfQ0hESVYgICAgICAgICAgICgweEZGIDw8ICA4KSAvLyAoVFdJKSBDbG9jayBIaWdoIERpdmlkZXINCisjZGVmaW5lIEFUOTFDX1RXSV9DS0RJViAgICAgICAgICAgKDB4NyA8PCAxNikgLy8gKFRXSSkgQ2xvY2sgRGl2aWRlcg0KKy8vIC0tLS0tLS0tIFRXSV9TUiA6IChUV0kgT2Zmc2V0OiAweDIwKSBUV0kgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVFdJX1RYQ09NUCAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoVFdJKSBUcmFuc21pc3Npb24gQ29tcGxldGVkDQorI2RlZmluZSBBVDkxQ19UV0lfUlhSRFkgICAgICAgICAgICgweDEgPDwgIDEpIC8vIChUV0kpIFJlY2VpdmUgaG9sZGluZyByZWdpc3RlciBSZWFEWQ0KKyNkZWZpbmUgQVQ5MUNfVFdJX1RYUkRZICAgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoVFdJKSBUcmFuc21pdCBob2xkaW5nIHJlZ2lzdGVyIFJlYURZDQorI2RlZmluZSBBVDkxQ19UV0lfU1ZSRUFEICAgICAgICAgICgweDEgPDwgIDMpIC8vIChUV0kpIFNsYXZlIFJlYWQNCisjZGVmaW5lIEFUOTFDX1RXSV9TVkFDQyAgICAgICAgICAgKDB4MSA8PCAgNCkgLy8gKFRXSSkgU2xhdmUgQWNjZXNzDQorI2RlZmluZSBBVDkxQ19UV0lfR0NBQ0MgICAgICAgICAgICgweDEgPDwgIDUpIC8vIChUV0kpIEdlbmVyYWwgQ2FsbCBBY2Nlc3MNCisjZGVmaW5lIEFUOTFDX1RXSV9PVlJFICAgICAgICAgICAgKDB4MSA8PCAgNikgLy8gKFRXSSkgT3ZlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX1VOUkUgICAgICAgICAgICAoMHgxIDw8ICA3KSAvLyAoVFdJKSBVbmRlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX05BQ0sgICAgICAgICAgICAoMHgxIDw8ICA4KSAvLyAoVFdJKSBOb3QgQWNrbm93bGVkZ2VkDQorI2RlZmluZSBBVDkxQ19UV0lfQVJCTFNUICAgICAgICAgICgweDEgPDwgIDkpIC8vIChUV0kpIEFyYml0cmF0aW9uIExvc3QNCisvLyAtLS0tLS0tLSBUV0lfSUVSIDogKFRXSSBPZmZzZXQ6IDB4MjQpIFRXSSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFRXSV9JRFIgOiAoVFdJIE9mZnNldDogMHgyOCkgVFdJIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFRXSV9JTVIgOiAoVFdJIE9mZnNldDogMHgyYykgVFdJIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVGltZXIgQ291bnRlciBDaGFubmVsIEludGVyZmFjZSAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19UQyBzdHJ1Y3R1cmUgKioqICovDQotI2RlZmluZSBUQ19DQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMCApICAgICAgICAgLyogQ2hhbm5lbCBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBUQ19DTVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggNCApICAgICAgICAgLyogQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyIChDYXB0dXJlIE1vZGUgLyBXYXZlZm9ybSBNb2RlKSAqLw0KLSNkZWZpbmUgVENfQ1YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDE2ICkgICAgICAgIC8qIENvdW50ZXIgVmFsdWUgKi8NCi0jZGVmaW5lIFRDX1JBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAyMCApICAgICAgICAvKiBSZWdpc3RlciBBICovDQotI2RlZmluZSBUQ19SQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMjQgKSAgICAgICAgLyogUmVnaXN0ZXIgQiAqLw0KLSNkZWZpbmUgVENfUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDI4ICkgICAgICAgIC8qIFJlZ2lzdGVyIEMgKi8NCi0jZGVmaW5lIFRDX1NSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAzMiApICAgICAgICAvKiBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFRDX0lFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAzNiApICAgICAgICAvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBUQ19JRFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggNDAgKSAgICAgICAgLyogSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFRDX0lNUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCA0NCApICAgICAgICAvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLS8qIC0tLS0tLS0tIFRDX0NDUiA6IChUQyBPZmZzZXQ6IDB4MCkgVEMgQ2hhbm5lbCBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19UQ19DTEtFTiAgICAgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDAgKSAgLyogKFRDKSBDb3VudGVyIENsb2NrIEVuYWJsZSBDb21tYW5kICovDQotI2RlZmluZSBBVDkxQ19UQ19DTEtESVMgICAgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDEgKSAgLyogKFRDKSBDb3VudGVyIENsb2NrIERpc2FibGUgQ29tbWFuZCAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfU1dUUkcgICAgICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAyICkgIC8qIChUQykgU29mdHdhcmUgVHJpZ2dlciBDb21tYW5kICovDQotLyogLS0tLS0tLS0gVENfQ01SIDogKFRDIE9mZnNldDogMHg0KSBUQyBDaGFubmVsIE1vZGUgUmVnaXN0ZXI6IENhcHR1cmUgTW9kZSAvIFdhdmVmb3JtIE1vZGUgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0NMS1MgICAgICAgICAgICAgICAgICAgICAgICAgKCAweDcgPDwgMCApICAvKiAoVEMpIENsb2NrIFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0NMS1NfVElNRVJfRElWMV9DTE9DSyAgICAoIDB4MCApICAgICAgIC8qIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjFfQ0xPQ0sgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjJfQ0xPQ0sgICAgKCAweDEgKSAgICAgICAvKiAoVEMpIENsb2NrIHNlbGVjdGVkOiBUSU1FUl9ESVYyX0NMT0NLICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQ0xLU19USU1FUl9ESVYzX0NMT0NLICAgICggMHgyICkgICAgICAgLyogKFRDKSBDbG9jayBzZWxlY3RlZDogVElNRVJfRElWM19DTE9DSyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0NMS1NfVElNRVJfRElWNF9DTE9DSyAgICAoIDB4MyApICAgICAgIC8qIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjRfQ0xPQ0sgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjVfQ0xPQ0sgICAgKCAweDQgKSAgICAgICAvKiAoVEMpIENsb2NrIHNlbGVjdGVkOiBUSU1FUl9ESVY1X0NMT0NLICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQ0xLU19YQzAgICAgICAgICAgICAgICAgICggMHg1ICkgICAgICAgLyogKFRDKSBDbG9jayBzZWxlY3RlZDogWEMwICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQ0xLU19YQzEgICAgICAgICAgICAgICAgICggMHg2ICkgICAgICAgLyogKFRDKSBDbG9jayBzZWxlY3RlZDogWEMxICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQ0xLU19YQzIgICAgICAgICAgICAgICAgICggMHg3ICkgICAgICAgLyogKFRDKSBDbG9jayBzZWxlY3RlZDogWEMyICovDQotI2RlZmluZSBBVDkxQ19UQ19DTEtJICAgICAgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDMgKSAgLyogKFRDKSBDbG9jayBJbnZlcnQgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0JVUlNUICAgICAgICAgICAgICAgICAgICAgICAgKCAweDMgPDwgNCApICAvKiAoVEMpIEJ1cnN0IFNpZ25hbCBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19CVVJTVF9OT05FICAgICAgICAgICAgICAgKCAweDAgPDwgNCApICAvKiAoVEMpIFRoZSBjbG9jayBpcyBub3QgZ2F0ZWQgYnkgYW4gZXh0ZXJuYWwgc2lnbmFsICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQlVSU1RfWEMwICAgICAgICAgICAgICAgICggMHgxIDw8IDQgKSAgLyogKFRDKSBYQzAgaXMgQU5EZWQgd2l0aCB0aGUgc2VsZWN0ZWQgY2xvY2sgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19CVVJTVF9YQzEgICAgICAgICAgICAgICAgKCAweDIgPDwgNCApICAvKiAoVEMpIFhDMSBpcyBBTkRlZCB3aXRoIHRoZSBzZWxlY3RlZCBjbG9jayAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JVUlNUX1hDMiAgICAgICAgICAgICAgICAoIDB4MyA8PCA0ICkgIC8qIChUQykgWEMyIGlzIEFORGVkIHdpdGggdGhlIHNlbGVjdGVkIGNsb2NrICovDQotI2RlZmluZSBBVDkxQ19UQ19DUENTVE9QICAgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDYgKSAgLyogKFRDKSBDb3VudGVyIENsb2NrIFN0b3BwZWQgd2l0aCBSQyBDb21wYXJlICovDQotI2RlZmluZSBBVDkxQ19UQ19MREJTVE9QICAgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDYgKSAgLyogKFRDKSBDb3VudGVyIENsb2NrIFN0b3BwZWQgd2l0aCBSQiBMb2FkaW5nICovDQotI2RlZmluZSBBVDkxQ19UQ19MREJESVMgICAgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDcgKSAgLyogKFRDKSBDb3VudGVyIENsb2NrIERpc2FibGVkIHdpdGggUkIgTG9hZGluZyAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQ1BDRElTICAgICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCA3ICkgIC8qIChUQykgQ291bnRlciBDbG9jayBEaXNhYmxlIHdpdGggUkMgQ29tcGFyZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfRVRSR0VERyAgICAgICAgICAgICAgICAgICAgICAoIDB4MyA8PCA4ICkgIC8qIChUQykgRXh0ZXJuYWwgVHJpZ2dlciBFZGdlIFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0VUUkdFREdfTk9ORSAgICAgICAgICAgICAoIDB4MCA8PCA4ICkgIC8qIChUQykgRWRnZTogTm9uZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0VUUkdFREdfUklTSU5HICAgICAgICAgICAoIDB4MSA8PCA4ICkgIC8qIChUQykgRWRnZTogcmlzaW5nIGVkZ2UgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19FVFJHRURHX0ZBTExJTkcgICAgICAgICAgKCAweDIgPDwgOCApICAvKiAoVEMpIEVkZ2U6IGZhbGxpbmcgZWRnZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0VUUkdFREdfQk9USCAgICAgICAgICAgICAoIDB4MyA8PCA4ICkgIC8qIChUQykgRWRnZTogZWFjaCBlZGdlICovDQotI2RlZmluZSBBVDkxQ19UQ19FRVZURURHICAgICAgICAgICAgICAgICAgICAgICggMHgzIDw8IDggKSAgLyogKFRDKSBFeHRlcm5hbCBFdmVudCBFZGdlIFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0VFVlRFREdfTk9ORSAgICAgICAgICAgICAoIDB4MCA8PCA4ICkgIC8qIChUQykgRWRnZTogTm9uZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0VFVlRFREdfUklTSU5HICAgICAgICAgICAoIDB4MSA8PCA4ICkgIC8qIChUQykgRWRnZTogcmlzaW5nIGVkZ2UgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19FRVZURURHX0ZBTExJTkcgICAgICAgICAgKCAweDIgPDwgOCApICAvKiAoVEMpIEVkZ2U6IGZhbGxpbmcgZWRnZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0VFVlRFREdfQk9USCAgICAgICAgICAgICAoIDB4MyA8PCA4ICkgIC8qIChUQykgRWRnZTogZWFjaCBlZGdlICovDQotI2RlZmluZSBBVDkxQ19UQ19BQkVUUkcgICAgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDEwICkgLyogKFRDKSBUSU9BIG9yIFRJT0IgRXh0ZXJuYWwgVHJpZ2dlciBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0VFVlQgICAgICAgICAgICAgICAgICAgICAgICAgKCAweDMgPDwgMTAgKSAvKiAoVEMpIEV4dGVybmFsIEV2ZW50ICBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19FRVZUX05PTkUgICAgICAgICAgICAgICAgKCAweDAgPDwgMTAgKSAvKiAoVEMpIFNpZ25hbCBzZWxlY3RlZCBhcyBleHRlcm5hbCBldmVudDogVElPQiBUSU9CIGRpcmVjdGlvbjogaW5wdXQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19FRVZUX1JJU0lORyAgICAgICAgICAgICAgKCAweDEgPDwgMTAgKSAvKiAoVEMpIFNpZ25hbCBzZWxlY3RlZCBhcyBleHRlcm5hbCBldmVudDogWEMwIFRJT0IgZGlyZWN0aW9uOiBvdXRwdXQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19FRVZUX0ZBTExJTkcgICAgICAgICAgICAgKCAweDIgPDwgMTAgKSAvKiAoVEMpIFNpZ25hbCBzZWxlY3RlZCBhcyBleHRlcm5hbCBldmVudDogWEMxIFRJT0IgZGlyZWN0aW9uOiBvdXRwdXQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19FRVZUX0JPVEggICAgICAgICAgICAgICAgKCAweDMgPDwgMTAgKSAvKiAoVEMpIFNpZ25hbCBzZWxlY3RlZCBhcyBleHRlcm5hbCBldmVudDogWEMyIFRJT0IgZGlyZWN0aW9uOiBvdXRwdXQgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0VORVRSRyAgICAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTIgKSAvKiAoVEMpIEV4dGVybmFsIEV2ZW50IFRyaWdnZXIgZW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19UQ19XQVZFU0VMICAgICAgICAgICAgICAgICAgICAgICggMHgzIDw8IDEzICkgLyogKFRDKSBXYXZlZm9ybSAgU2VsZWN0aW9uICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfV0FWRVNFTF9VUCAgICAgICAgICAgICAgICggMHgwIDw8IDEzICkgLyogKFRDKSBVUCBtb2RlIHdpdGhvdXQgYXRvbWF0aWMgdHJpZ2dlciBvbiBSQyBDb21wYXJlICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfV0FWRVNFTF9VUERPV04gICAgICAgICAgICggMHgxIDw8IDEzICkgLyogKFRDKSBVUERPV04gbW9kZSB3aXRob3V0IGF1dG9tYXRpYyB0cmlnZ2VyIG9uIFJDIENvbXBhcmUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19XQVZFU0VMX1VQX0FVVE8gICAgICAgICAgKCAweDIgPDwgMTMgKSAvKiAoVEMpIFVQIG1vZGUgd2l0aCBhdXRvbWF0aWMgdHJpZ2dlciBvbiBSQyBDb21wYXJlICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfV0FWRVNFTF9VUERPV05fQVVUTyAgICAgICggMHgzIDw8IDEzICkgLyogKFRDKSBVUERPV04gbW9kZSB3aXRoIGF1dG9tYXRpYyB0cmlnZ2VyIG9uIFJDIENvbXBhcmUgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0NQQ1RSRyAgICAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTQgKSAvKiAoVEMpIFJDIENvbXBhcmUgVHJpZ2dlciBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX1dBVkUgICAgICAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTUgKSAvKiAoVEMpICovDQotI2RlZmluZSBBVDkxQ19UQ19MRFJBICAgICAgICAgICAgICAgICAgICAgICAgICggMHgzIDw8IDE2ICkgLyogKFRDKSBSQSBMb2FkaW5nIFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0xEUkFfTk9ORSAgICAgICAgICAgICAgICAoIDB4MCA8PCAxNiApIC8qIChUQykgRWRnZTogTm9uZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0xEUkFfUklTSU5HICAgICAgICAgICAgICAoIDB4MSA8PCAxNiApIC8qIChUQykgRWRnZTogcmlzaW5nIGVkZ2Ugb2YgVElPQSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0xEUkFfRkFMTElORyAgICAgICAgICAgICAoIDB4MiA8PCAxNiApIC8qIChUQykgRWRnZTogZmFsbGluZyBlZGdlIG9mIFRJT0EgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19MRFJBX0JPVEggICAgICAgICAgICAgICAgKCAweDMgPDwgMTYgKSAvKiAoVEMpIEVkZ2U6IGVhY2ggZWRnZSBvZiBUSU9BICovDQotI2RlZmluZSBBVDkxQ19UQ19BQ1BBICAgICAgICAgICAgICAgICAgICAgICAgICggMHgzIDw8IDE2ICkgLyogKFRDKSBSQSBDb21wYXJlIEVmZmVjdCBvbiBUSU9BICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQUNQQV9OT05FICAgICAgICAgICAgICAgICggMHgwIDw8IDE2ICkgLyogKFRDKSBFZmZlY3Q6IG5vbmUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19BQ1BBX1NFVCAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTYgKSAvKiAoVEMpIEVmZmVjdDogc2V0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQUNQQV9DTEVBUiAgICAgICAgICAgICAgICggMHgyIDw8IDE2ICkgLyogKFRDKSBFZmZlY3Q6IGNsZWFyICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQUNQQV9UT0dHTEUgICAgICAgICAgICAgICggMHgzIDw8IDE2ICkgLyogKFRDKSBFZmZlY3Q6IHRvZ2dsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfTERSQiAgICAgICAgICAgICAgICAgICAgICAgICAoIDB4MyA8PCAxOCApIC8qIChUQykgUkIgTG9hZGluZyBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19MRFJCX05PTkUgICAgICAgICAgICAgICAgKCAweDAgPDwgMTggKSAvKiAoVEMpIEVkZ2U6IE5vbmUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19MRFJCX1JJU0lORyAgICAgICAgICAgICAgKCAweDEgPDwgMTggKSAvKiAoVEMpIEVkZ2U6IHJpc2luZyBlZGdlIG9mIFRJT0EgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19MRFJCX0ZBTExJTkcgICAgICAgICAgICAgKCAweDIgPDwgMTggKSAvKiAoVEMpIEVkZ2U6IGZhbGxpbmcgZWRnZSBvZiBUSU9BICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfTERSQl9CT1RIICAgICAgICAgICAgICAgICggMHgzIDw8IDE4ICkgLyogKFRDKSBFZGdlOiBlYWNoIGVkZ2Ugb2YgVElPQSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQUNQQyAgICAgICAgICAgICAgICAgICAgICAgICAoIDB4MyA8PCAxOCApIC8qIChUQykgUkMgQ29tcGFyZSBFZmZlY3Qgb24gVElPQSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0FDUENfTk9ORSAgICAgICAgICAgICAgICAoIDB4MCA8PCAxOCApIC8qIChUQykgRWZmZWN0OiBub25lICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQUNQQ19TRVQgICAgICAgICAgICAgICAgICggMHgxIDw8IDE4ICkgLyogKFRDKSBFZmZlY3Q6IHNldCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0FDUENfQ0xFQVIgICAgICAgICAgICAgICAoIDB4MiA8PCAxOCApIC8qIChUQykgRWZmZWN0OiBjbGVhciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0FDUENfVE9HR0xFICAgICAgICAgICAgICAoIDB4MyA8PCAxOCApIC8qIChUQykgRWZmZWN0OiB0b2dnbGUgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0FFRVZUICAgICAgICAgICAgICAgICAgICAgICAgKCAweDMgPDwgMjAgKSAvKiAoVEMpIEV4dGVybmFsIEV2ZW50IEVmZmVjdCBvbiBUSU9BICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQUVFVlRfTk9ORSAgICAgICAgICAgICAgICggMHgwIDw8IDIwICkgLyogKFRDKSBFZmZlY3Q6IG5vbmUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19BRUVWVF9TRVQgICAgICAgICAgICAgICAgKCAweDEgPDwgMjAgKSAvKiAoVEMpIEVmZmVjdDogc2V0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQUVFVlRfQ0xFQVIgICAgICAgICAgICAgICggMHgyIDw8IDIwICkgLyogKFRDKSBFZmZlY3Q6IGNsZWFyICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQUVFVlRfVE9HR0xFICAgICAgICAgICAgICggMHgzIDw8IDIwICkgLyogKFRDKSBFZmZlY3Q6IHRvZ2dsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQVNXVFJHICAgICAgICAgICAgICAgICAgICAgICAoIDB4MyA8PCAyMiApIC8qIChUQykgU29mdHdhcmUgVHJpZ2dlciBFZmZlY3Qgb24gVElPQSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0FTV1RSR19OT05FICAgICAgICAgICAgICAoIDB4MCA8PCAyMiApIC8qIChUQykgRWZmZWN0OiBub25lICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQVNXVFJHX1NFVCAgICAgICAgICAgICAgICggMHgxIDw8IDIyICkgLyogKFRDKSBFZmZlY3Q6IHNldCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0FTV1RSR19DTEVBUiAgICAgICAgICAgICAoIDB4MiA8PCAyMiApIC8qIChUQykgRWZmZWN0OiBjbGVhciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0FTV1RSR19UT0dHTEUgICAgICAgICAgICAoIDB4MyA8PCAyMiApIC8qIChUQykgRWZmZWN0OiB0b2dnbGUgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0JDUEIgICAgICAgICAgICAgICAgICAgICAgICAgKCAweDMgPDwgMjQgKSAvKiAoVEMpIFJCIENvbXBhcmUgRWZmZWN0IG9uIFRJT0IgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19CQ1BCX05PTkUgICAgICAgICAgICAgICAgKCAweDAgPDwgMjQgKSAvKiAoVEMpIEVmZmVjdDogbm9uZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JDUEJfU0VUICAgICAgICAgICAgICAgICAoIDB4MSA8PCAyNCApIC8qIChUQykgRWZmZWN0OiBzZXQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19CQ1BCX0NMRUFSICAgICAgICAgICAgICAgKCAweDIgPDwgMjQgKSAvKiAoVEMpIEVmZmVjdDogY2xlYXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19CQ1BCX1RPR0dMRSAgICAgICAgICAgICAgKCAweDMgPDwgMjQgKSAvKiAoVEMpIEVmZmVjdDogdG9nZ2xlICovDQotI2RlZmluZSBBVDkxQ19UQ19CQ1BDICAgICAgICAgICAgICAgICAgICAgICAgICggMHgzIDw8IDI2ICkgLyogKFRDKSBSQyBDb21wYXJlIEVmZmVjdCBvbiBUSU9CICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQkNQQ19OT05FICAgICAgICAgICAgICAgICggMHgwIDw8IDI2ICkgLyogKFRDKSBFZmZlY3Q6IG5vbmUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19CQ1BDX1NFVCAgICAgICAgICAgICAgICAgKCAweDEgPDwgMjYgKSAvKiAoVEMpIEVmZmVjdDogc2V0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQkNQQ19DTEVBUiAgICAgICAgICAgICAgICggMHgyIDw8IDI2ICkgLyogKFRDKSBFZmZlY3Q6IGNsZWFyICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQkNQQ19UT0dHTEUgICAgICAgICAgICAgICggMHgzIDw8IDI2ICkgLyogKFRDKSBFZmZlY3Q6IHRvZ2dsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQkVFVlQgICAgICAgICAgICAgICAgICAgICAgICAoIDB4MyA8PCAyOCApIC8qIChUQykgRXh0ZXJuYWwgRXZlbnQgRWZmZWN0IG9uIFRJT0IgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19CRUVWVF9OT05FICAgICAgICAgICAgICAgKCAweDAgPDwgMjggKSAvKiAoVEMpIEVmZmVjdDogbm9uZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JFRVZUX1NFVCAgICAgICAgICAgICAgICAoIDB4MSA8PCAyOCApIC8qIChUQykgRWZmZWN0OiBzZXQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19CRUVWVF9DTEVBUiAgICAgICAgICAgICAgKCAweDIgPDwgMjggKSAvKiAoVEMpIEVmZmVjdDogY2xlYXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19CRUVWVF9UT0dHTEUgICAgICAgICAgICAgKCAweDMgPDwgMjggKSAvKiAoVEMpIEVmZmVjdDogdG9nZ2xlICovDQotI2RlZmluZSBBVDkxQ19UQ19CU1dUUkcgICAgICAgICAgICAgICAgICAgICAgICggMHgzIDw8IDMwICkgLyogKFRDKSBTb2Z0d2FyZSBUcmlnZ2VyIEVmZmVjdCBvbiBUSU9CICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQlNXVFJHX05PTkUgICAgICAgICAgICAgICggMHgwIDw8IDMwICkgLyogKFRDKSBFZmZlY3Q6IG5vbmUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19CU1dUUkdfU0VUICAgICAgICAgICAgICAgKCAweDEgPDwgMzAgKSAvKiAoVEMpIEVmZmVjdDogc2V0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQlNXVFJHX0NMRUFSICAgICAgICAgICAgICggMHgyIDw8IDMwICkgLyogKFRDKSBFZmZlY3Q6IGNsZWFyICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQlNXVFJHX1RPR0dMRSAgICAgICAgICAgICggMHgzIDw8IDMwICkgLyogKFRDKSBFZmZlY3Q6IHRvZ2dsZSAqLw0KLS8qIC0tLS0tLS0tIFRDX1NSIDogKFRDIE9mZnNldDogMHgyMCkgVEMgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0NPVkZTICAgICAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMCApICAvKiAoVEMpIENvdW50ZXIgT3ZlcmZsb3cgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0xPVlJTICAgICAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMSApICAvKiAoVEMpIExvYWQgT3ZlcnJ1biAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQ1BBUyAgICAgICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAyICkgIC8qIChUQykgUkEgQ29tcGFyZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQ1BCUyAgICAgICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAzICkgIC8qIChUQykgUkIgQ29tcGFyZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQ1BDUyAgICAgICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCA0ICkgIC8qIChUQykgUkMgQ29tcGFyZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfTERSQVMgICAgICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCA1ICkgIC8qIChUQykgUkEgTG9hZGluZyAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfTERSQlMgICAgICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCA2ICkgIC8qIChUQykgUkIgTG9hZGluZyAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfRVRSQ1MgICAgICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCA3ICkgIC8qIChUQykgRXh0ZXJuYWwgVHJpZ2dlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfRVRSR1MgICAgICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxNiApIC8qIChUQykgQ2xvY2sgRW5hYmxpbmcgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX01USU9BICAgICAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTcgKSAvKiAoVEMpIFRJT0EgTWlycm9yICovDQotI2RlZmluZSBBVDkxQ19UQ19NVElPQiAgICAgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDE4ICkgLyogKFRDKSBUSU9BIE1pcnJvciAqLw0KLS8qIC0tLS0tLS0tIFRDX0lFUiA6IChUQyBPZmZzZXQ6IDB4MjQpIFRDIENoYW5uZWwgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFRDX0lEUiA6IChUQyBPZmZzZXQ6IDB4MjgpIFRDIENoYW5uZWwgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBUQ19JTVIgOiAoVEMgT2Zmc2V0OiAweDJjKSBUQyBDaGFubmVsIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tICovDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBUaW1lciBDb3VudGVyIENoYW5uZWwgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1RDIHN0cnVjdHVyZSAqKioNCisjZGVmaW5lIFRDX0NDUiAgICAgICAgICAoIDApIC8vIENoYW5uZWwgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgVENfQ01SICAgICAgICAgICggNCkgLy8gQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyIChDYXB0dXJlIE1vZGUgLyBXYXZlZm9ybSBNb2RlKQ0KKyNkZWZpbmUgVENfQ1YgICAgICAgICAgICgxNikgLy8gQ291bnRlciBWYWx1ZQ0KKyNkZWZpbmUgVENfUkEgICAgICAgICAgICgyMCkgLy8gUmVnaXN0ZXIgQQ0KKyNkZWZpbmUgVENfUkIgICAgICAgICAgICgyNCkgLy8gUmVnaXN0ZXIgQg0KKyNkZWZpbmUgVENfUkMgICAgICAgICAgICgyOCkgLy8gUmVnaXN0ZXIgQw0KKyNkZWZpbmUgVENfU1IgICAgICAgICAgICgzMikgLy8gU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBUQ19JRVIgICAgICAgICAgKDM2KSAvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBUQ19JRFIgICAgICAgICAgKDQwKSAvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgVENfSU1SICAgICAgICAgICg0NCkgLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisvLyAtLS0tLS0tLSBUQ19DQ1IgOiAoVEMgT2Zmc2V0OiAweDApIFRDIENoYW5uZWwgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RDX0NMS0VOICAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFRDKSBDb3VudGVyIENsb2NrIEVuYWJsZSBDb21tYW5kDQorI2RlZmluZSBBVDkxQ19UQ19DTEtESVMgICAgICAgICAgICgweDEgPDwgIDEpIC8vIChUQykgQ291bnRlciBDbG9jayBEaXNhYmxlIENvbW1hbmQNCisjZGVmaW5lIEFUOTFDX1RDX1NXVFJHICAgICAgICAgICAgKDB4MSA8PCAgMikgLy8gKFRDKSBTb2Z0d2FyZSBUcmlnZ2VyIENvbW1hbmQNCisvLyAtLS0tLS0tLSBUQ19DTVIgOiAoVEMgT2Zmc2V0OiAweDQpIFRDIENoYW5uZWwgTW9kZSBSZWdpc3RlcjogQ2FwdHVyZSBNb2RlIC8gV2F2ZWZvcm0gTW9kZSAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RDX0NMS1MgICAgICAgICAgICAgKDB4NyA8PCAgMCkgLy8gKFRDKSBDbG9jayBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjFfQ0xPQ0sgICAgICgweDApIC8vIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjFfQ0xPQ0sNCisjZGVmaW5lIAlBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjJfQ0xPQ0sgICAgICgweDEpIC8vIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjJfQ0xPQ0sNCisjZGVmaW5lIAlBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjNfQ0xPQ0sgICAgICgweDIpIC8vIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjNfQ0xPQ0sNCisjZGVmaW5lIAlBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjRfQ0xPQ0sgICAgICgweDMpIC8vIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjRfQ0xPQ0sNCisjZGVmaW5lIAlBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjVfQ0xPQ0sgICAgICgweDQpIC8vIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjVfQ0xPQ0sNCisjZGVmaW5lIAlBVDkxQ19UQ19DTEtTX1hDMCAgICAgICAgICAgICAgICAgICgweDUpIC8vIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFhDMA0KKyNkZWZpbmUgCUFUOTFDX1RDX0NMS1NfWEMxICAgICAgICAgICAgICAgICAgKDB4NikgLy8gKFRDKSBDbG9jayBzZWxlY3RlZDogWEMxDQorI2RlZmluZSAJQVQ5MUNfVENfQ0xLU19YQzIgICAgICAgICAgICAgICAgICAoMHg3KSAvLyAoVEMpIENsb2NrIHNlbGVjdGVkOiBYQzINCisjZGVmaW5lIEFUOTFDX1RDX0NMS0kgICAgICAgICAgICAgKDB4MSA8PCAgMykgLy8gKFRDKSBDbG9jayBJbnZlcnQNCisjZGVmaW5lIEFUOTFDX1RDX0JVUlNUICAgICAgICAgICAgKDB4MyA8PCAgNCkgLy8gKFRDKSBCdXJzdCBTaWduYWwgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfVENfQlVSU1RfTk9ORSAgICAgICAgICAgICAgICAgKDB4MCA8PCAgNCkgLy8gKFRDKSBUaGUgY2xvY2sgaXMgbm90IGdhdGVkIGJ5IGFuIGV4dGVybmFsIHNpZ25hbA0KKyNkZWZpbmUgCUFUOTFDX1RDX0JVUlNUX1hDMCAgICAgICAgICAgICAgICAgICgweDEgPDwgIDQpIC8vIChUQykgWEMwIGlzIEFORGVkIHdpdGggdGhlIHNlbGVjdGVkIGNsb2NrDQorI2RlZmluZSAJQVQ5MUNfVENfQlVSU1RfWEMxICAgICAgICAgICAgICAgICAgKDB4MiA8PCAgNCkgLy8gKFRDKSBYQzEgaXMgQU5EZWQgd2l0aCB0aGUgc2VsZWN0ZWQgY2xvY2sNCisjZGVmaW5lIAlBVDkxQ19UQ19CVVJTVF9YQzIgICAgICAgICAgICAgICAgICAoMHgzIDw8ICA0KSAvLyAoVEMpIFhDMiBpcyBBTkRlZCB3aXRoIHRoZSBzZWxlY3RlZCBjbG9jaw0KKyNkZWZpbmUgQVQ5MUNfVENfQ1BDU1RPUCAgICAgICAgICAoMHgxIDw8ICA2KSAvLyAoVEMpIENvdW50ZXIgQ2xvY2sgU3RvcHBlZCB3aXRoIFJDIENvbXBhcmUNCisjZGVmaW5lIEFUOTFDX1RDX0xEQlNUT1AgICAgICAgICAgKDB4MSA8PCAgNikgLy8gKFRDKSBDb3VudGVyIENsb2NrIFN0b3BwZWQgd2l0aCBSQiBMb2FkaW5nDQorI2RlZmluZSBBVDkxQ19UQ19MREJESVMgICAgICAgICAgICgweDEgPDwgIDcpIC8vIChUQykgQ291bnRlciBDbG9jayBEaXNhYmxlZCB3aXRoIFJCIExvYWRpbmcNCisjZGVmaW5lIEFUOTFDX1RDX0NQQ0RJUyAgICAgICAgICAgKDB4MSA8PCAgNykgLy8gKFRDKSBDb3VudGVyIENsb2NrIERpc2FibGUgd2l0aCBSQyBDb21wYXJlDQorI2RlZmluZSBBVDkxQ19UQ19FVFJHRURHICAgICAgICAgICgweDMgPDwgIDgpIC8vIChUQykgRXh0ZXJuYWwgVHJpZ2dlciBFZGdlIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDX0VUUkdFREdfTk9ORSAgICAgICAgICAgICAgICAgKDB4MCA8PCAgOCkgLy8gKFRDKSBFZGdlOiBOb25lDQorI2RlZmluZSAJQVQ5MUNfVENfRVRSR0VER19SSVNJTkcgICAgICAgICAgICAgICAoMHgxIDw8ICA4KSAvLyAoVEMpIEVkZ2U6IHJpc2luZyBlZGdlDQorI2RlZmluZSAJQVQ5MUNfVENfRVRSR0VER19GQUxMSU5HICAgICAgICAgICAgICAoMHgyIDw8ICA4KSAvLyAoVEMpIEVkZ2U6IGZhbGxpbmcgZWRnZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0VUUkdFREdfQk9USCAgICAgICAgICAgICAgICAgKDB4MyA8PCAgOCkgLy8gKFRDKSBFZGdlOiBlYWNoIGVkZ2UNCisjZGVmaW5lIEFUOTFDX1RDX0VFVlRFREcgICAgICAgICAgKDB4MyA8PCAgOCkgLy8gKFRDKSBFeHRlcm5hbCBFdmVudCBFZGdlIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDX0VFVlRFREdfTk9ORSAgICAgICAgICAgICAgICAgKDB4MCA8PCAgOCkgLy8gKFRDKSBFZGdlOiBOb25lDQorI2RlZmluZSAJQVQ5MUNfVENfRUVWVEVER19SSVNJTkcgICAgICAgICAgICAgICAoMHgxIDw8ICA4KSAvLyAoVEMpIEVkZ2U6IHJpc2luZyBlZGdlDQorI2RlZmluZSAJQVQ5MUNfVENfRUVWVEVER19GQUxMSU5HICAgICAgICAgICAgICAoMHgyIDw8ICA4KSAvLyAoVEMpIEVkZ2U6IGZhbGxpbmcgZWRnZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0VFVlRFREdfQk9USCAgICAgICAgICAgICAgICAgKDB4MyA8PCAgOCkgLy8gKFRDKSBFZGdlOiBlYWNoIGVkZ2UNCisjZGVmaW5lIEFUOTFDX1RDX0FCRVRSRyAgICAgICAgICAgKDB4MSA8PCAxMCkgLy8gKFRDKSBUSU9BIG9yIFRJT0IgRXh0ZXJuYWwgVHJpZ2dlciBTZWxlY3Rpb24NCisjZGVmaW5lIEFUOTFDX1RDX0VFVlQgICAgICAgICAgICAgKDB4MyA8PCAxMCkgLy8gKFRDKSBFeHRlcm5hbCBFdmVudCAgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfVENfRUVWVF9OT05FICAgICAgICAgICAgICAgICAoMHgwIDw8IDEwKSAvLyAoVEMpIFNpZ25hbCBzZWxlY3RlZCBhcyBleHRlcm5hbCBldmVudDogVElPQiBUSU9CIGRpcmVjdGlvbjogaW5wdXQNCisjZGVmaW5lIAlBVDkxQ19UQ19FRVZUX1JJU0lORyAgICAgICAgICAgICAgICgweDEgPDwgMTApIC8vIChUQykgU2lnbmFsIHNlbGVjdGVkIGFzIGV4dGVybmFsIGV2ZW50OiBYQzAgVElPQiBkaXJlY3Rpb246IG91dHB1dA0KKyNkZWZpbmUgCUFUOTFDX1RDX0VFVlRfRkFMTElORyAgICAgICAgICAgICAgKDB4MiA8PCAxMCkgLy8gKFRDKSBTaWduYWwgc2VsZWN0ZWQgYXMgZXh0ZXJuYWwgZXZlbnQ6IFhDMSBUSU9CIGRpcmVjdGlvbjogb3V0cHV0DQorI2RlZmluZSAJQVQ5MUNfVENfRUVWVF9CT1RIICAgICAgICAgICAgICAgICAoMHgzIDw8IDEwKSAvLyAoVEMpIFNpZ25hbCBzZWxlY3RlZCBhcyBleHRlcm5hbCBldmVudDogWEMyIFRJT0IgZGlyZWN0aW9uOiBvdXRwdXQNCisjZGVmaW5lIEFUOTFDX1RDX0VORVRSRyAgICAgICAgICAgKDB4MSA8PCAxMikgLy8gKFRDKSBFeHRlcm5hbCBFdmVudCBUcmlnZ2VyIGVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVENfV0FWRVNFTCAgICAgICAgICAoMHgzIDw8IDEzKSAvLyAoVEMpIFdhdmVmb3JtICBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ19XQVZFU0VMX1VQICAgICAgICAgICAgICAgICAgICgweDAgPDwgMTMpIC8vIChUQykgVVAgbW9kZSB3aXRob3V0IGF0b21hdGljIHRyaWdnZXIgb24gUkMgQ29tcGFyZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX1dBVkVTRUxfVVBET1dOICAgICAgICAgICAgICAgKDB4MSA8PCAxMykgLy8gKFRDKSBVUERPV04gbW9kZSB3aXRob3V0IGF1dG9tYXRpYyB0cmlnZ2VyIG9uIFJDIENvbXBhcmUNCisjZGVmaW5lIAlBVDkxQ19UQ19XQVZFU0VMX1VQX0FVVE8gICAgICAgICAgICAgICgweDIgPDwgMTMpIC8vIChUQykgVVAgbW9kZSB3aXRoIGF1dG9tYXRpYyB0cmlnZ2VyIG9uIFJDIENvbXBhcmUNCisjZGVmaW5lIAlBVDkxQ19UQ19XQVZFU0VMX1VQRE9XTl9BVVRPICAgICAgICAgICgweDMgPDwgMTMpIC8vIChUQykgVVBET1dOIG1vZGUgd2l0aCBhdXRvbWF0aWMgdHJpZ2dlciBvbiBSQyBDb21wYXJlDQorI2RlZmluZSBBVDkxQ19UQ19DUENUUkcgICAgICAgICAgICgweDEgPDwgMTQpIC8vIChUQykgUkMgQ29tcGFyZSBUcmlnZ2VyIEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVENfV0FWRSAgICAgICAgICAgICAoMHgxIDw8IDE1KSAvLyAoVEMpIA0KKyNkZWZpbmUgQVQ5MUNfVENfTERSQSAgICAgICAgICAgICAoMHgzIDw8IDE2KSAvLyAoVEMpIFJBIExvYWRpbmcgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfVENfTERSQV9OT05FICAgICAgICAgICAgICAgICAoMHgwIDw8IDE2KSAvLyAoVEMpIEVkZ2U6IE5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19MRFJBX1JJU0lORyAgICAgICAgICAgICAgICgweDEgPDwgMTYpIC8vIChUQykgRWRnZTogcmlzaW5nIGVkZ2Ugb2YgVElPQQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0xEUkFfRkFMTElORyAgICAgICAgICAgICAgKDB4MiA8PCAxNikgLy8gKFRDKSBFZGdlOiBmYWxsaW5nIGVkZ2Ugb2YgVElPQQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0xEUkFfQk9USCAgICAgICAgICAgICAgICAgKDB4MyA8PCAxNikgLy8gKFRDKSBFZGdlOiBlYWNoIGVkZ2Ugb2YgVElPQQ0KKyNkZWZpbmUgQVQ5MUNfVENfQUNQQSAgICAgICAgICAgICAoMHgzIDw8IDE2KSAvLyAoVEMpIFJBIENvbXBhcmUgRWZmZWN0IG9uIFRJT0ENCisjZGVmaW5lIAlBVDkxQ19UQ19BQ1BBX05PTkUgICAgICAgICAgICAgICAgICgweDAgPDwgMTYpIC8vIChUQykgRWZmZWN0OiBub25lDQorI2RlZmluZSAJQVQ5MUNfVENfQUNQQV9TRVQgICAgICAgICAgICAgICAgICAoMHgxIDw8IDE2KSAvLyAoVEMpIEVmZmVjdDogc2V0DQorI2RlZmluZSAJQVQ5MUNfVENfQUNQQV9DTEVBUiAgICAgICAgICAgICAgICAoMHgyIDw8IDE2KSAvLyAoVEMpIEVmZmVjdDogY2xlYXINCisjZGVmaW5lIAlBVDkxQ19UQ19BQ1BBX1RPR0dMRSAgICAgICAgICAgICAgICgweDMgPDwgMTYpIC8vIChUQykgRWZmZWN0OiB0b2dnbGUNCisjZGVmaW5lIEFUOTFDX1RDX0xEUkIgICAgICAgICAgICAgKDB4MyA8PCAxOCkgLy8gKFRDKSBSQiBMb2FkaW5nIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDX0xEUkJfTk9ORSAgICAgICAgICAgICAgICAgKDB4MCA8PCAxOCkgLy8gKFRDKSBFZGdlOiBOb25lDQorI2RlZmluZSAJQVQ5MUNfVENfTERSQl9SSVNJTkcgICAgICAgICAgICAgICAoMHgxIDw8IDE4KSAvLyAoVEMpIEVkZ2U6IHJpc2luZyBlZGdlIG9mIFRJT0ENCisjZGVmaW5lIAlBVDkxQ19UQ19MRFJCX0ZBTExJTkcgICAgICAgICAgICAgICgweDIgPDwgMTgpIC8vIChUQykgRWRnZTogZmFsbGluZyBlZGdlIG9mIFRJT0ENCisjZGVmaW5lIAlBVDkxQ19UQ19MRFJCX0JPVEggICAgICAgICAgICAgICAgICgweDMgPDwgMTgpIC8vIChUQykgRWRnZTogZWFjaCBlZGdlIG9mIFRJT0ENCisjZGVmaW5lIEFUOTFDX1RDX0FDUEMgICAgICAgICAgICAgKDB4MyA8PCAxOCkgLy8gKFRDKSBSQyBDb21wYXJlIEVmZmVjdCBvbiBUSU9BDQorI2RlZmluZSAJQVQ5MUNfVENfQUNQQ19OT05FICAgICAgICAgICAgICAgICAoMHgwIDw8IDE4KSAvLyAoVEMpIEVmZmVjdDogbm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0FDUENfU0VUICAgICAgICAgICAgICAgICAgKDB4MSA8PCAxOCkgLy8gKFRDKSBFZmZlY3Q6IHNldA0KKyNkZWZpbmUgCUFUOTFDX1RDX0FDUENfQ0xFQVIgICAgICAgICAgICAgICAgKDB4MiA8PCAxOCkgLy8gKFRDKSBFZmZlY3Q6IGNsZWFyDQorI2RlZmluZSAJQVQ5MUNfVENfQUNQQ19UT0dHTEUgICAgICAgICAgICAgICAoMHgzIDw8IDE4KSAvLyAoVEMpIEVmZmVjdDogdG9nZ2xlDQorI2RlZmluZSBBVDkxQ19UQ19BRUVWVCAgICAgICAgICAgICgweDMgPDwgMjApIC8vIChUQykgRXh0ZXJuYWwgRXZlbnQgRWZmZWN0IG9uIFRJT0ENCisjZGVmaW5lIAlBVDkxQ19UQ19BRUVWVF9OT05FICAgICAgICAgICAgICAgICAoMHgwIDw8IDIwKSAvLyAoVEMpIEVmZmVjdDogbm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0FFRVZUX1NFVCAgICAgICAgICAgICAgICAgICgweDEgPDwgMjApIC8vIChUQykgRWZmZWN0OiBzZXQNCisjZGVmaW5lIAlBVDkxQ19UQ19BRUVWVF9DTEVBUiAgICAgICAgICAgICAgICAoMHgyIDw8IDIwKSAvLyAoVEMpIEVmZmVjdDogY2xlYXINCisjZGVmaW5lIAlBVDkxQ19UQ19BRUVWVF9UT0dHTEUgICAgICAgICAgICAgICAoMHgzIDw8IDIwKSAvLyAoVEMpIEVmZmVjdDogdG9nZ2xlDQorI2RlZmluZSBBVDkxQ19UQ19BU1dUUkcgICAgICAgICAgICgweDMgPDwgMjIpIC8vIChUQykgU29mdHdhcmUgVHJpZ2dlciBFZmZlY3Qgb24gVElPQQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0FTV1RSR19OT05FICAgICAgICAgICAgICAgICAoMHgwIDw8IDIyKSAvLyAoVEMpIEVmZmVjdDogbm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0FTV1RSR19TRVQgICAgICAgICAgICAgICAgICAoMHgxIDw8IDIyKSAvLyAoVEMpIEVmZmVjdDogc2V0DQorI2RlZmluZSAJQVQ5MUNfVENfQVNXVFJHX0NMRUFSICAgICAgICAgICAgICAgICgweDIgPDwgMjIpIC8vIChUQykgRWZmZWN0OiBjbGVhcg0KKyNkZWZpbmUgCUFUOTFDX1RDX0FTV1RSR19UT0dHTEUgICAgICAgICAgICAgICAoMHgzIDw8IDIyKSAvLyAoVEMpIEVmZmVjdDogdG9nZ2xlDQorI2RlZmluZSBBVDkxQ19UQ19CQ1BCICAgICAgICAgICAgICgweDMgPDwgMjQpIC8vIChUQykgUkIgQ29tcGFyZSBFZmZlY3Qgb24gVElPQg0KKyNkZWZpbmUgCUFUOTFDX1RDX0JDUEJfTk9ORSAgICAgICAgICAgICAgICAgKDB4MCA8PCAyNCkgLy8gKFRDKSBFZmZlY3Q6IG5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19CQ1BCX1NFVCAgICAgICAgICAgICAgICAgICgweDEgPDwgMjQpIC8vIChUQykgRWZmZWN0OiBzZXQNCisjZGVmaW5lIAlBVDkxQ19UQ19CQ1BCX0NMRUFSICAgICAgICAgICAgICAgICgweDIgPDwgMjQpIC8vIChUQykgRWZmZWN0OiBjbGVhcg0KKyNkZWZpbmUgCUFUOTFDX1RDX0JDUEJfVE9HR0xFICAgICAgICAgICAgICAgKDB4MyA8PCAyNCkgLy8gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KKyNkZWZpbmUgQVQ5MUNfVENfQkNQQyAgICAgICAgICAgICAoMHgzIDw8IDI2KSAvLyAoVEMpIFJDIENvbXBhcmUgRWZmZWN0IG9uIFRJT0INCisjZGVmaW5lIAlBVDkxQ19UQ19CQ1BDX05PTkUgICAgICAgICAgICAgICAgICgweDAgPDwgMjYpIC8vIChUQykgRWZmZWN0OiBub25lDQorI2RlZmluZSAJQVQ5MUNfVENfQkNQQ19TRVQgICAgICAgICAgICAgICAgICAoMHgxIDw8IDI2KSAvLyAoVEMpIEVmZmVjdDogc2V0DQorI2RlZmluZSAJQVQ5MUNfVENfQkNQQ19DTEVBUiAgICAgICAgICAgICAgICAoMHgyIDw8IDI2KSAvLyAoVEMpIEVmZmVjdDogY2xlYXINCisjZGVmaW5lIAlBVDkxQ19UQ19CQ1BDX1RPR0dMRSAgICAgICAgICAgICAgICgweDMgPDwgMjYpIC8vIChUQykgRWZmZWN0OiB0b2dnbGUNCisjZGVmaW5lIEFUOTFDX1RDX0JFRVZUICAgICAgICAgICAgKDB4MyA8PCAyOCkgLy8gKFRDKSBFeHRlcm5hbCBFdmVudCBFZmZlY3Qgb24gVElPQg0KKyNkZWZpbmUgCUFUOTFDX1RDX0JFRVZUX05PTkUgICAgICAgICAgICAgICAgICgweDAgPDwgMjgpIC8vIChUQykgRWZmZWN0OiBub25lDQorI2RlZmluZSAJQVQ5MUNfVENfQkVFVlRfU0VUICAgICAgICAgICAgICAgICAgKDB4MSA8PCAyOCkgLy8gKFRDKSBFZmZlY3Q6IHNldA0KKyNkZWZpbmUgCUFUOTFDX1RDX0JFRVZUX0NMRUFSICAgICAgICAgICAgICAgICgweDIgPDwgMjgpIC8vIChUQykgRWZmZWN0OiBjbGVhcg0KKyNkZWZpbmUgCUFUOTFDX1RDX0JFRVZUX1RPR0dMRSAgICAgICAgICAgICAgICgweDMgPDwgMjgpIC8vIChUQykgRWZmZWN0OiB0b2dnbGUNCisjZGVmaW5lIEFUOTFDX1RDX0JTV1RSRyAgICAgICAgICAgKDB4MyA8PCAzMCkgLy8gKFRDKSBTb2Z0d2FyZSBUcmlnZ2VyIEVmZmVjdCBvbiBUSU9CDQorI2RlZmluZSAJQVQ5MUNfVENfQlNXVFJHX05PTkUgICAgICAgICAgICAgICAgICgweDAgPDwgMzApIC8vIChUQykgRWZmZWN0OiBub25lDQorI2RlZmluZSAJQVQ5MUNfVENfQlNXVFJHX1NFVCAgICAgICAgICAgICAgICAgICgweDEgPDwgMzApIC8vIChUQykgRWZmZWN0OiBzZXQNCisjZGVmaW5lIAlBVDkxQ19UQ19CU1dUUkdfQ0xFQVIgICAgICAgICAgICAgICAgKDB4MiA8PCAzMCkgLy8gKFRDKSBFZmZlY3Q6IGNsZWFyDQorI2RlZmluZSAJQVQ5MUNfVENfQlNXVFJHX1RPR0dMRSAgICAgICAgICAgICAgICgweDMgPDwgMzApIC8vIChUQykgRWZmZWN0OiB0b2dnbGUNCisvLyAtLS0tLS0tLSBUQ19TUiA6IChUQyBPZmZzZXQ6IDB4MjApIFRDIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVENfQ09WRlMgICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoVEMpIENvdW50ZXIgT3ZlcmZsb3cNCisjZGVmaW5lIEFUOTFDX1RDX0xPVlJTICAgICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKFRDKSBMb2FkIE92ZXJydW4NCisjZGVmaW5lIEFUOTFDX1RDX0NQQVMgICAgICAgICAgICAgKDB4MSA8PCAgMikgLy8gKFRDKSBSQSBDb21wYXJlDQorI2RlZmluZSBBVDkxQ19UQ19DUEJTICAgICAgICAgICAgICgweDEgPDwgIDMpIC8vIChUQykgUkIgQ29tcGFyZQ0KKyNkZWZpbmUgQVQ5MUNfVENfQ1BDUyAgICAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoVEMpIFJDIENvbXBhcmUNCisjZGVmaW5lIEFUOTFDX1RDX0xEUkFTICAgICAgICAgICAgKDB4MSA8PCAgNSkgLy8gKFRDKSBSQSBMb2FkaW5nDQorI2RlZmluZSBBVDkxQ19UQ19MRFJCUyAgICAgICAgICAgICgweDEgPDwgIDYpIC8vIChUQykgUkIgTG9hZGluZw0KKyNkZWZpbmUgQVQ5MUNfVENfRVRSQ1MgICAgICAgICAgICAoMHgxIDw8ICA3KSAvLyAoVEMpIEV4dGVybmFsIFRyaWdnZXINCisjZGVmaW5lIEFUOTFDX1RDX0VUUkdTICAgICAgICAgICAgKDB4MSA8PCAxNikgLy8gKFRDKSBDbG9jayBFbmFibGluZw0KKyNkZWZpbmUgQVQ5MUNfVENfTVRJT0EgICAgICAgICAgICAoMHgxIDw8IDE3KSAvLyAoVEMpIFRJT0EgTWlycm9yDQorI2RlZmluZSBBVDkxQ19UQ19NVElPQiAgICAgICAgICAgICgweDEgPDwgMTgpIC8vIChUQykgVElPQSBNaXJyb3INCisvLyAtLS0tLS0tLSBUQ19JRVIgOiAoVEMgT2Zmc2V0OiAweDI0KSBUQyBDaGFubmVsIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVENfSURSIDogKFRDIE9mZnNldDogMHgyOCkgVEMgQ2hhbm5lbCBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBUQ19JTVIgOiAoVEMgT2Zmc2V0OiAweDJjKSBUQyBDaGFubmVsIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVGltZXIgQ291bnRlciBJbnRlcmZhY2UgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfVENCIHN0cnVjdHVyZSAqKiogKi8NCi0jZGVmaW5lIFRDQl9UQzAgICAgICAgICAgICAgICAgICAgICAgICAoIDAgKSAgICAgICAgLyogVEMgQ2hhbm5lbCAwICovDQotI2RlZmluZSBUQ0JfVEMxICAgICAgICAgICAgICAgICAgICAgICAgKCA2NCApICAgICAgIC8qIFRDIENoYW5uZWwgMSAqLw0KLSNkZWZpbmUgVENCX1RDMiAgICAgICAgICAgICAgICAgICAgICAgICggMTI4ICkgICAgICAvKiBUQyBDaGFubmVsIDIgKi8NCi0jZGVmaW5lIFRDQl9CQ1IgICAgICAgICAgICAgICAgICAgICAgICAoIDE5MiApICAgICAgLyogVEMgQmxvY2sgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVENCX0JNUiAgICAgICAgICAgICAgICAgICAgICAgICggMTk2ICkgICAgICAvKiBUQyBCbG9jayBNb2RlIFJlZ2lzdGVyICovDQotLyogLS0tLS0tLS0gVENCX0JDUiA6IChUQ0IgT2Zmc2V0OiAweGMwKSBUQyBCbG9jayBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19UQ0JfU1lOQyAgICAgICAgICAgICAgICAgKCAweDEgPDwgMCApIC8qIChUQ0IpIFN5bmNocm8gQ29tbWFuZCAqLw0KLS8qIC0tLS0tLS0tIFRDQl9CTVIgOiAoVENCIE9mZnNldDogMHhjNCkgVEMgQmxvY2sgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENCX1RDMFhDMFMgICAgICAgICAgICAgICggMHgxIDw8IDAgKSAvKiAoVENCKSBFeHRlcm5hbCBDbG9jayBTaWduYWwgMCBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ0JfVEMwWEMwU19UQ0xLMCAgICAoIDB4MCApICAgICAgLyogKFRDQikgVENMSzAgY29ubmVjdGVkIHRvIFhDMCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDQl9UQzBYQzBTX05PTkUgICAgICggMHgxICkgICAgICAvKiAoVENCKSBOb25lIHNpZ25hbCBjb25uZWN0ZWQgdG8gWEMwICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENCX1RDMFhDMFNfVElPQTEgICAgKCAweDIgKSAgICAgIC8qIChUQ0IpIFRJT0ExIGNvbm5lY3RlZCB0byBYQzAgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ0JfVEMwWEMwU19USU9BMiAgICAoIDB4MyApICAgICAgLyogKFRDQikgVElPQTIgY29ubmVjdGVkIHRvIFhDMCAqLw0KLSNkZWZpbmUgQVQ5MUNfVENCX1RDMVhDMVMgICAgICAgICAgICAgICggMHgxIDw8IDIgKSAvKiAoVENCKSBFeHRlcm5hbCBDbG9jayBTaWduYWwgMSBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ0JfVEMxWEMxU19UQ0xLMSAgICAoIDB4MCA8PCAyICkgLyogKFRDQikgVENMSzEgY29ubmVjdGVkIHRvIFhDMSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDQl9UQzFYQzFTX05PTkUgICAgICggMHgxIDw8IDIgKSAvKiAoVENCKSBOb25lIHNpZ25hbCBjb25uZWN0ZWQgdG8gWEMxICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENCX1RDMVhDMVNfVElPQTAgICAgKCAweDIgPDwgMiApIC8qIChUQ0IpIFRJT0EwIGNvbm5lY3RlZCB0byBYQzEgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ0JfVEMxWEMxU19USU9BMiAgICAoIDB4MyA8PCAyICkgLyogKFRDQikgVElPQTIgY29ubmVjdGVkIHRvIFhDMSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENCX1RDMlhDMlMgICAgICAgICAgICAgICggMHgxIDw8IDQgKSAvKiAoVENCKSBFeHRlcm5hbCBDbG9jayBTaWduYWwgMiBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ0JfVEMyWEMyU19UQ0xLMiAgICAoIDB4MCA8PCA0ICkgLyogKFRDQikgVENMSzIgY29ubmVjdGVkIHRvIFhDMiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDQl9UQzJYQzJTX05PTkUgICAgICggMHgxIDw8IDQgKSAvKiAoVENCKSBOb25lIHNpZ25hbCBjb25uZWN0ZWQgdG8gWEMyICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENCX1RDMlhDMlNfVElPQTAgICAgKCAweDIgPDwgNCApIC8qIChUQ0IpIFRJT0EwIGNvbm5lY3RlZCB0byBYQzIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ0JfVEMyWEMyU19USU9BMiAgICAoIDB4MyA8PCA0ICkgLyogKFRDQikgVElPQTIgY29ubmVjdGVkIHRvIFhDMiAqLw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVGltZXIgQ291bnRlciBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfVENCIHN0cnVjdHVyZSAqKioNCisjZGVmaW5lIFRDQl9UQzAgICAgICAgICAoIDApIC8vIFRDIENoYW5uZWwgMA0KKyNkZWZpbmUgVENCX1RDMSAgICAgICAgICg2NCkgLy8gVEMgQ2hhbm5lbCAxDQorI2RlZmluZSBUQ0JfVEMyICAgICAgICAgKDEyOCkgLy8gVEMgQ2hhbm5lbCAyDQorI2RlZmluZSBUQ0JfQkNSICAgICAgICAgKDE5MikgLy8gVEMgQmxvY2sgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgVENCX0JNUiAgICAgICAgICgxOTYpIC8vIFRDIEJsb2NrIE1vZGUgUmVnaXN0ZXINCisvLyAtLS0tLS0tLSBUQ0JfQkNSIDogKFRDQiBPZmZzZXQ6IDB4YzApIFRDIEJsb2NrIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UQ0JfU1lOQyAgICAgICAgICAgICgweDEgPDwgIDApIC8vIChUQ0IpIFN5bmNocm8gQ29tbWFuZA0KKy8vIC0tLS0tLS0tIFRDQl9CTVIgOiAoVENCIE9mZnNldDogMHhjNCkgVEMgQmxvY2sgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RDQl9UQzBYQzBTICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFRDQikgRXh0ZXJuYWwgQ2xvY2sgU2lnbmFsIDAgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMFhDMFNfVENMSzAgICAgICAgICAgICAgICAgKDB4MCkgLy8gKFRDQikgVENMSzAgY29ubmVjdGVkIHRvIFhDMA0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzBYQzBTX05PTkUgICAgICAgICAgICAgICAgICgweDEpIC8vIChUQ0IpIE5vbmUgc2lnbmFsIGNvbm5lY3RlZCB0byBYQzANCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMwWEMwU19USU9BMSAgICAgICAgICAgICAgICAoMHgyKSAvLyAoVENCKSBUSU9BMSBjb25uZWN0ZWQgdG8gWEMwDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMFhDMFNfVElPQTIgICAgICAgICAgICAgICAgKDB4MykgLy8gKFRDQikgVElPQTIgY29ubmVjdGVkIHRvIFhDMA0KKyNkZWZpbmUgQVQ5MUNfVENCX1RDMVhDMVMgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoVENCKSBFeHRlcm5hbCBDbG9jayBTaWduYWwgMSBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMxWEMxU19UQ0xLMSAgICAgICAgICAgICAgICAoMHgwIDw8ICAyKSAvLyAoVENCKSBUQ0xLMSBjb25uZWN0ZWQgdG8gWEMxDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMVhDMVNfTk9ORSAgICAgICAgICAgICAgICAgKDB4MSA8PCAgMikgLy8gKFRDQikgTm9uZSBzaWduYWwgY29ubmVjdGVkIHRvIFhDMQ0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzFYQzFTX1RJT0EwICAgICAgICAgICAgICAgICgweDIgPDwgIDIpIC8vIChUQ0IpIFRJT0EwIGNvbm5lY3RlZCB0byBYQzENCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMxWEMxU19USU9BMiAgICAgICAgICAgICAgICAoMHgzIDw8ICAyKSAvLyAoVENCKSBUSU9BMiBjb25uZWN0ZWQgdG8gWEMxDQorI2RlZmluZSBBVDkxQ19UQ0JfVEMyWEMyUyAgICAgICAgICgweDEgPDwgIDQpIC8vIChUQ0IpIEV4dGVybmFsIENsb2NrIFNpZ25hbCAyIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzJYQzJTX1RDTEsyICAgICAgICAgICAgICAgICgweDAgPDwgIDQpIC8vIChUQ0IpIFRDTEsyIGNvbm5lY3RlZCB0byBYQzINCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMyWEMyU19OT05FICAgICAgICAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoVENCKSBOb25lIHNpZ25hbCBjb25uZWN0ZWQgdG8gWEMyDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMlhDMlNfVElPQTAgICAgICAgICAgICAgICAgKDB4MiA8PCAgNCkgLy8gKFRDQikgVElPQTAgY29ubmVjdGVkIHRvIFhDMg0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzJYQzJTX1RJT0EyICAgICAgICAgICAgICAgICgweDMgPDwgIDQpIC8vIChUQ0IpIFRJT0EyIGNvbm5lY3RlZCB0byBYQzINCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFBXTUMgQ2hhbm5lbCBJbnRlcmZhY2UgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfUFdNQ19DSCBzdHJ1Y3R1cmUgKioqICovDQotI2RlZmluZSBQV01DX0NNUiAgICAgICAgICAgICAgICAgICAgKCAwICkgICAgICAgICAvKiBDaGFubmVsIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBXTUNfQ0RUWVIgICAgICAgICAgICAgICAgICAoIDQgKSAgICAgICAgIC8qIENoYW5uZWwgRHV0eSBDeWNsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUFdNQ19DUFJEUiAgICAgICAgICAgICAgICAgICggOCApICAgICAgICAgLyogQ2hhbm5lbCBQZXJpb2QgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBXTUNfQ0NOVFIgICAgICAgICAgICAgICAgICAoIDEyICkgICAgICAgIC8qIENoYW5uZWwgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUFdNQ19DVVBEUiAgICAgICAgICAgICAgICAgICggMTYgKSAgICAgICAgLyogQ2hhbm5lbCBVcGRhdGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBXTUNfUmVzZXJ2ZWQgICAgICAgICAgICAgICAoIDIwICkgICAgICAgIC8qIFJlc2VydmVkICovDQotLyogLS0tLS0tLS0gUFdNQ19DTVIgOiAoUFdNQ19DSCBPZmZzZXQ6IDB4MCkgUFdNQyBDaGFubmVsIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ1BSRSAgICAgICAgICAgICAoIDB4RiA8PCAwICkgIC8qIChQV01DX0NIKSBDaGFubmVsIFByZS1zY2FsZXIgOiBQV01DX0NMS3ggKi8NCi0jZGVmaW5lICAgICBBVDkxQ19QV01DX0NQUkVfTUNLICAgICAoIDB4MCApICAgICAgIC8qIChQV01DX0NIKSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1BXTUNfQ1BSRV9NQ0tBICAgICggMHhCICkgICAgICAgLyogKFBXTUNfQ0gpICovDQotI2RlZmluZSAgICAgQVQ5MUNfUFdNQ19DUFJFX01DS0IgICAgKCAweEMgKSAgICAgICAvKiAoUFdNQ19DSCkgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0FMRyAgICAgICAgICAgICAoIDB4MSA8PCA4ICkgIC8qIChQV01DX0NIKSBDaGFubmVsIEFsaWdubWVudCAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DUE9MICAgICAgICAgICAgICggMHgxIDw8IDkgKSAgLyogKFBXTUNfQ0gpIENoYW5uZWwgUG9sYXJpdHkgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ1BEICAgICAgICAgICAgICAoIDB4MSA8PCAxMCApIC8qIChQV01DX0NIKSBDaGFubmVsIFVwZGF0ZSBQZXJpb2QgKi8NCi0vKiAtLS0tLS0tLSBQV01DX0NEVFlSIDogKFBXTUNfQ0ggT2Zmc2V0OiAweDQpIFBXTUMgQ2hhbm5lbCBEdXR5IEN5Y2xlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NEVFkgICAgICAgICAgICAgKCAweDAgPDwgMCApICAvKiAoUFdNQ19DSCkgQ2hhbm5lbCBEdXR5IEN5Y2xlICovDQotLyogLS0tLS0tLS0gUFdNQ19DUFJEUiA6IChQV01DX0NIIE9mZnNldDogMHg4KSBQV01DIENoYW5uZWwgUGVyaW9kIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NQUkQgICAgICAgICAgICAgKCAweDAgPDwgMCApICAvKiAoUFdNQ19DSCkgQ2hhbm5lbCBQZXJpb2QgKi8NCi0vKiAtLS0tLS0tLSBQV01DX0NDTlRSIDogKFBXTUNfQ0ggT2Zmc2V0OiAweGMpIFBXTUMgQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NDTlQgICAgICAgICAgICAgKCAweDAgPDwgMCApICAvKiAoUFdNQ19DSCkgQ2hhbm5lbCBDb3VudGVyICovDQotLyogLS0tLS0tLS0gUFdNQ19DVVBEUiA6IChQV01DX0NIIE9mZnNldDogMHgxMCkgUFdNQyBDaGFubmVsIFVwZGF0ZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DVVBEICAgICAgICAgICAgICggMHgwIDw8IDAgKSAgLyogKFBXTUNfQ0gpIENoYW5uZWwgVXBkYXRlICovDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQV01DIENoYW5uZWwgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1BXTUNfQ0ggc3RydWN0dXJlICoqKg0KKyNkZWZpbmUgUFdNQ19DTVIgICAgICAgICggMCkgLy8gQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBQV01DX0NEVFlSICAgICAgKCA0KSAvLyBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXINCisjZGVmaW5lIFBXTUNfQ1BSRFIgICAgICAoIDgpIC8vIENoYW5uZWwgUGVyaW9kIFJlZ2lzdGVyDQorI2RlZmluZSBQV01DX0NDTlRSICAgICAgKDEyKSAvLyBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFBXTUNfQ1VQRFIgICAgICAoMTYpIC8vIENoYW5uZWwgVXBkYXRlIFJlZ2lzdGVyDQorI2RlZmluZSBQV01DX1Jlc2VydmVkICAgKDIwKSAvLyBSZXNlcnZlZA0KKy8vIC0tLS0tLS0tIFBXTUNfQ01SIDogKFBXTUNfQ0ggT2Zmc2V0OiAweDApIFBXTUMgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DUFJFICAgICAgICAgICAoMHhGIDw8ICAwKSAvLyAoUFdNQ19DSCkgQ2hhbm5lbCBQcmUtc2NhbGVyIDogUFdNQ19DTEt4DQorI2RlZmluZSAJQVQ5MUNfUFdNQ19DUFJFX01DSyAgICAgICAgICAgICAgICAgICgweDApIC8vIChQV01DX0NIKSANCisjZGVmaW5lIAlBVDkxQ19QV01DX0NQUkVfTUNLQSAgICAgICAgICAgICAgICAgKDB4QikgLy8gKFBXTUNfQ0gpIA0KKyNkZWZpbmUgCUFUOTFDX1BXTUNfQ1BSRV9NQ0tCICAgICAgICAgICAgICAgICAoMHhDKSAvLyAoUFdNQ19DSCkgDQorI2RlZmluZSBBVDkxQ19QV01DX0NBTEcgICAgICAgICAgICgweDEgPDwgIDgpIC8vIChQV01DX0NIKSBDaGFubmVsIEFsaWdubWVudA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DUE9MICAgICAgICAgICAoMHgxIDw8ICA5KSAvLyAoUFdNQ19DSCkgQ2hhbm5lbCBQb2xhcml0eQ0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DUEQgICAgICAgICAgICAoMHgxIDw8IDEwKSAvLyAoUFdNQ19DSCkgQ2hhbm5lbCBVcGRhdGUgUGVyaW9kDQorLy8gLS0tLS0tLS0gUFdNQ19DRFRZUiA6IChQV01DX0NIIE9mZnNldDogMHg0KSBQV01DIENoYW5uZWwgRHV0eSBDeWNsZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0RUWSAgICAgICAgICAgKDB4MCA8PCAgMCkgLy8gKFBXTUNfQ0gpIENoYW5uZWwgRHV0eSBDeWNsZQ0KKy8vIC0tLS0tLS0tIFBXTUNfQ1BSRFIgOiAoUFdNQ19DSCBPZmZzZXQ6IDB4OCkgUFdNQyBDaGFubmVsIFBlcmlvZCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ1BSRCAgICAgICAgICAgKDB4MCA8PCAgMCkgLy8gKFBXTUNfQ0gpIENoYW5uZWwgUGVyaW9kDQorLy8gLS0tLS0tLS0gUFdNQ19DQ05UUiA6IChQV01DX0NIIE9mZnNldDogMHhjKSBQV01DIENoYW5uZWwgQ291bnRlciBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0NOVCAgICAgICAgICAgKDB4MCA8PCAgMCkgLy8gKFBXTUNfQ0gpIENoYW5uZWwgQ291bnRlcg0KKy8vIC0tLS0tLS0tIFBXTUNfQ1VQRFIgOiAoUFdNQ19DSCBPZmZzZXQ6IDB4MTApIFBXTUMgQ2hhbm5lbCBVcGRhdGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QV01DX0NVUEQgICAgICAgICAgICgweDAgPDwgIDApIC8vIChQV01DX0NIKSBDaGFubmVsIFVwZGF0ZQ0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUHVsc2UgV2lkdGggTW9kdWxhdGlvbiBDb250cm9sbGVyIEludGVyZmFjZSAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19QV01DIHN0cnVjdHVyZSAqKiogKi8NCi0jZGVmaW5lIFBXTUNfTVIgICAgICAgICAgICAgICAgICAgICggMCApICAgICAgICAgIC8qIFBXTUMgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUFdNQ19FTkEgICAgICAgICAgICAgICAgICAgKCA0ICkgICAgICAgICAgLyogUFdNQyBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBXTUNfRElTICAgICAgICAgICAgICAgICAgICggOCApICAgICAgICAgIC8qIFBXTUMgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUFdNQ19TUiAgICAgICAgICAgICAgICAgICAgKCAxMiApICAgICAgICAgLyogUFdNQyBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBXTUNfSUVSICAgICAgICAgICAgICAgICAgICggMTYgKSAgICAgICAgIC8qIFBXTUMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUFdNQ19JRFIgICAgICAgICAgICAgICAgICAgKCAyMCApICAgICAgICAgLyogUFdNQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUFdNQ19JTVIgICAgICAgICAgICAgICAgICAgKCAyNCApICAgICAgICAgLyogUFdNQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUFdNQ19JU1IgICAgICAgICAgICAgICAgICAgKCAyOCApICAgICAgICAgLyogUFdNQyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBQV01DX1ZSICAgICAgICAgICAgICAgICAgICAoIDI1MiApICAgICAgICAvKiBQV01DIFZlcnNpb24gUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBXTUNfQ0ggICAgICAgICAgICAgICAgICAgICggNTEyICkgICAgICAgIC8qIFBXTUMgQ2hhbm5lbCAwICovDQotLyogLS0tLS0tLS0gUFdNQ19NUiA6IChQV01DIE9mZnNldDogMHgwKSBQV01DIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfRElWQSAgICAgICAgICAgICggMHhGRiA8PCAwICkgIC8qIChQV01DKSBDTEtBIGRpdmlkZSBmYWN0b3IuICovDQotI2RlZmluZSBBVDkxQ19QV01DX1BSRUEgICAgICAgICAgICAoIDB4RiA8PCA4ICkgICAvKiAoUFdNQykgRGl2aWRlciBJbnB1dCBDbG9jayBQcmVzY2FsZXIgQSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1BXTUNfUFJFQV9NQ0sgICAgKCAweDAgPDwgOCApICAgLyogKFBXTUMpICovDQotI2RlZmluZSBBVDkxQ19QV01DX0RJVkIgICAgICAgICAgICAoIDB4RkYgPDwgMTYgKSAvKiAoUFdNQykgQ0xLQiBkaXZpZGUgZmFjdG9yLiAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19QUkVCICAgICAgICAgICAgKCAweEYgPDwgMjQgKSAgLyogKFBXTUMpIERpdmlkZXIgSW5wdXQgQ2xvY2sgUHJlc2NhbGVyIEIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19QV01DX1BSRUJfTUNLICAgICggMHgwIDw8IDI0ICkgIC8qIChQV01DKSAqLw0KLS8qIC0tLS0tLS0tIFBXTUNfRU5BIDogKFBXTUMgT2Zmc2V0OiAweDQpIFBXTUMgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NISUQwICAgICAgICAgICAoIDB4MSA8PCAwICkgICAvKiAoUFdNQykgQ2hhbm5lbCBJRCAwICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NISUQxICAgICAgICAgICAoIDB4MSA8PCAxICkgICAvKiAoUFdNQykgQ2hhbm5lbCBJRCAxICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NISUQyICAgICAgICAgICAoIDB4MSA8PCAyICkgICAvKiAoUFdNQykgQ2hhbm5lbCBJRCAyICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NISUQzICAgICAgICAgICAoIDB4MSA8PCAzICkgICAvKiAoUFdNQykgQ2hhbm5lbCBJRCAzICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NISUQ0ICAgICAgICAgICAoIDB4MSA8PCA0ICkgICAvKiAoUFdNQykgQ2hhbm5lbCBJRCA0ICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NISUQ1ICAgICAgICAgICAoIDB4MSA8PCA1ICkgICAvKiAoUFdNQykgQ2hhbm5lbCBJRCA1ICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NISUQ2ICAgICAgICAgICAoIDB4MSA8PCA2ICkgICAvKiAoUFdNQykgQ2hhbm5lbCBJRCA2ICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NISUQ3ICAgICAgICAgICAoIDB4MSA8PCA3ICkgICAvKiAoUFdNQykgQ2hhbm5lbCBJRCA3ICovDQotLyogLS0tLS0tLS0gUFdNQ19ESVMgOiAoUFdNQyBPZmZzZXQ6IDB4OCkgUFdNQyBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gUFdNQ19TUiA6IChQV01DIE9mZnNldDogMHhjKSBQV01DIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFBXTUNfSUVSIDogKFBXTUMgT2Zmc2V0OiAweDEwKSBQV01DIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBQV01DX0lEUiA6IChQV01DIE9mZnNldDogMHgxNCkgUFdNQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFBXTUNfSU1SIDogKFBXTUMgT2Zmc2V0OiAweDE4KSBQV01DIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gUFdNQ19JU1IgOiAoUFdNQyBPZmZzZXQ6IDB4MWMpIFBXTUMgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUHVsc2UgV2lkdGggTW9kdWxhdGlvbiBDb250cm9sbGVyIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19QV01DIHN0cnVjdHVyZSAqKioNCisjZGVmaW5lIFBXTUNfTVIgICAgICAgICAoIDApIC8vIFBXTUMgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUFdNQ19FTkEgICAgICAgICggNCkgLy8gUFdNQyBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFBXTUNfRElTICAgICAgICAoIDgpIC8vIFBXTUMgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUFdNQ19TUiAgICAgICAgICgxMikgLy8gUFdNQyBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFBXTUNfSUVSICAgICAgICAoMTYpIC8vIFBXTUMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUFdNQ19JRFIgICAgICAgICgyMCkgLy8gUFdNQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUFdNQ19JTVIgICAgICAgICgyNCkgLy8gUFdNQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgUFdNQ19JU1IgICAgICAgICgyOCkgLy8gUFdNQyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBQV01DX1ZSICAgICAgICAgKDI1MikgLy8gUFdNQyBWZXJzaW9uIFJlZ2lzdGVyDQorI2RlZmluZSBQV01DX0NIICAgICAgICAgKDUxMikgLy8gUFdNQyBDaGFubmVsIDANCisvLyAtLS0tLS0tLSBQV01DX01SIDogKFBXTUMgT2Zmc2V0OiAweDApIFBXTUMgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BXTUNfRElWQSAgICAgICAgICAgKDB4RkYgPDwgIDApIC8vIChQV01DKSBDTEtBIGRpdmlkZSBmYWN0b3IuDQorI2RlZmluZSBBVDkxQ19QV01DX1BSRUEgICAgICAgICAgICgweEYgPDwgIDgpIC8vIChQV01DKSBEaXZpZGVyIElucHV0IENsb2NrIFByZXNjYWxlciBBDQorI2RlZmluZSAJQVQ5MUNfUFdNQ19QUkVBX01DSyAgICAgICAgICAgICAgICAgICgweDAgPDwgIDgpIC8vIChQV01DKSANCisjZGVmaW5lIEFUOTFDX1BXTUNfRElWQiAgICAgICAgICAgKDB4RkYgPDwgMTYpIC8vIChQV01DKSBDTEtCIGRpdmlkZSBmYWN0b3IuDQorI2RlZmluZSBBVDkxQ19QV01DX1BSRUIgICAgICAgICAgICgweEYgPDwgMjQpIC8vIChQV01DKSBEaXZpZGVyIElucHV0IENsb2NrIFByZXNjYWxlciBCDQorI2RlZmluZSAJQVQ5MUNfUFdNQ19QUkVCX01DSyAgICAgICAgICAgICAgICAgICgweDAgPDwgMjQpIC8vIChQV01DKSANCisvLyAtLS0tLS0tLSBQV01DX0VOQSA6IChQV01DIE9mZnNldDogMHg0KSBQV01DIEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0hJRDAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFBXTUMpIENoYW5uZWwgSUQgMA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSElEMSAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoUFdNQykgQ2hhbm5lbCBJRCAxDQorI2RlZmluZSBBVDkxQ19QV01DX0NISUQyICAgICAgICAgICgweDEgPDwgIDIpIC8vIChQV01DKSBDaGFubmVsIElEIDINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0hJRDMgICAgICAgICAgKDB4MSA8PCAgMykgLy8gKFBXTUMpIENoYW5uZWwgSUQgMw0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSElENCAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoUFdNQykgQ2hhbm5lbCBJRCA0DQorI2RlZmluZSBBVDkxQ19QV01DX0NISUQ1ICAgICAgICAgICgweDEgPDwgIDUpIC8vIChQV01DKSBDaGFubmVsIElEIDUNCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0hJRDYgICAgICAgICAgKDB4MSA8PCAgNikgLy8gKFBXTUMpIENoYW5uZWwgSUQgNg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSElENyAgICAgICAgICAoMHgxIDw8ICA3KSAvLyAoUFdNQykgQ2hhbm5lbCBJRCA3DQorLy8gLS0tLS0tLS0gUFdNQ19ESVMgOiAoUFdNQyBPZmZzZXQ6IDB4OCkgUFdNQyBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFBXTUNfU1IgOiAoUFdNQyBPZmZzZXQ6IDB4YykgUFdNQyBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUFdNQ19JRVIgOiAoUFdNQyBPZmZzZXQ6IDB4MTApIFBXTUMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQV01DX0lEUiA6IChQV01DIE9mZnNldDogMHgxNCkgUFdNQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQV01DX0lNUiA6IChQV01DIE9mZnNldDogMHgxOCkgUFdNQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQV01DX0lTUiA6IChQV01DIE9mZnNldDogMHgxYykgUFdNQyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVVNCIERldmljZSBJbnRlcmZhY2UgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfVURQIHN0cnVjdHVyZSAqKiogKi8NCi0jZGVmaW5lIFVEUF9OVU0gICAgICAgICAgICAgICggMCApICAgICAgICAgIC8qIEZyYW1lIE51bWJlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVURQX0dMQlNUQVRFICAgICAgICAgKCA0ICkgICAgICAgICAgLyogR2xvYmFsIFN0YXRlIFJlZ2lzdGVyICovDQotI2RlZmluZSBVRFBfRkFERFIgICAgICAgICAgICAoIDggKSAgICAgICAgICAvKiBGdW5jdGlvbiBBZGRyZXNzIFJlZ2lzdGVyICovDQotI2RlZmluZSBVRFBfSUVSICAgICAgICAgICAgICAoIDE2ICkgICAgICAgICAvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBVRFBfSURSICAgICAgICAgICAgICAoIDIwICkgICAgICAgICAvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVURQX0lNUiAgICAgICAgICAgICAgKCAyNCApICAgICAgICAgLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFVEUF9JU1IgICAgICAgICAgICAgICggMjggKSAgICAgICAgIC8qIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFVEUF9JQ1IgICAgICAgICAgICAgICggMzIgKSAgICAgICAgIC8qIEludGVycnVwdCBDbGVhciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVURQX1JTVEVQICAgICAgICAgICAgKCA0MCApICAgICAgICAgLyogUmVzZXQgRW5kcG9pbnQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFVEUF9DU1IgICAgICAgICAgICAgICggNDggKSAgICAgICAgIC8qIEVuZHBvaW50IENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVURQX0ZEUiAgICAgICAgICAgICAgKCA4MCApICAgICAgICAgLyogRW5kcG9pbnQgRklGTyBEYXRhIFJlZ2lzdGVyICovDQotLyogLS0tLS0tLS0gVURQX0ZSTV9OVU0gOiAoVURQIE9mZnNldDogMHgwKSBVU0IgRnJhbWUgTnVtYmVyIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19VRFBfRlJNX05VTSAgICAoIDB4N0ZGIDw8IDAgKSAvKiAoVURQKSBGcmFtZSBOdW1iZXIgYXMgRGVmaW5lZCBpbiB0aGUgUGFja2V0IEZpZWxkIEZvcm1hdHMgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9GUk1fRVJSICAgICggMHgxIDw8IDE2ICkgIC8qIChVRFApIEZyYW1lIEVycm9yICovDQotI2RlZmluZSBBVDkxQ19VRFBfRlJNX09LICAgICAoIDB4MSA8PCAxNyApICAvKiAoVURQKSBGcmFtZSBPSyAqLw0KLS8qIC0tLS0tLS0tIFVEUF9HTEJfU1RBVEUgOiAoVURQIE9mZnNldDogMHg0KSBVU0IgR2xvYmFsIFN0YXRlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19VRFBfRkFEREVOICAgICAoIDB4MSA8PCAwICkgICAvKiAoVURQKSBGdW5jdGlvbiBBZGRyZXNzIEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0NPTkZHICAgICAgKCAweDEgPDwgMSApICAgLyogKFVEUCkgQ29uZmlndXJlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX1JNV1VQRSAgICAgKCAweDEgPDwgMiApICAgLyogKFVEUCkgUmVtb3RlIFdha2UgVXAgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19VRFBfUlNNSU5QUiAgICAoIDB4MSA8PCAzICkgICAvKiAoVURQKSBBIFJlc3VtZSBIYXMgQmVlbiBTZW50IHRvIHRoZSBIb3N0ICovDQotLyogLS0tLS0tLS0gVURQX0ZBRERSIDogKFVEUCBPZmZzZXQ6IDB4OCkgVVNCIEZ1bmN0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9GQUREICAgICAgICggMHhGRiA8PCAwICkgIC8qIChVRFApIEZ1bmN0aW9uIEFkZHJlc3MgVmFsdWUgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9GRU4gICAgICAgICggMHgxIDw8IDggKSAgIC8qIChVRFApIEZ1bmN0aW9uIEVuYWJsZSAqLw0KLS8qIC0tLS0tLS0tIFVEUF9JRVIgOiAoVURQIE9mZnNldDogMHgxMCkgVVNCIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUElOVDAgICAgICggMHgxIDw8IDAgKSAgIC8qIChVRFApIEVuZHBvaW50IDAgSW50ZXJydXB0ICovDQotI2RlZmluZSBBVDkxQ19VRFBfRVBJTlQxICAgICAoIDB4MSA8PCAxICkgICAvKiAoVURQKSBFbmRwb2ludCAwIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UMiAgICAgKCAweDEgPDwgMiApICAgLyogKFVEUCkgRW5kcG9pbnQgMiBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUElOVDMgICAgICggMHgxIDw8IDMgKSAgIC8qIChVRFApIEVuZHBvaW50IDMgSW50ZXJydXB0ICovDQotI2RlZmluZSBBVDkxQ19VRFBfRVBJTlQ0ICAgICAoIDB4MSA8PCA0ICkgICAvKiAoVURQKSBFbmRwb2ludCA0IEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UNSAgICAgKCAweDEgPDwgNSApICAgLyogKFVEUCkgRW5kcG9pbnQgNSBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUElOVDYgICAgICggMHgxIDw8IDYgKSAgIC8qIChVRFApIEVuZHBvaW50IDYgSW50ZXJydXB0ICovDQotI2RlZmluZSBBVDkxQ19VRFBfRVBJTlQ3ICAgICAoIDB4MSA8PCA3ICkgICAvKiAoVURQKSBFbmRwb2ludCA3IEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX1JYU1VTUCAgICAgKCAweDEgPDwgOCApICAgLyogKFVEUCkgVVNCIFN1c3BlbmQgSW50ZXJydXB0ICovDQotI2RlZmluZSBBVDkxQ19VRFBfUlhSU00gICAgICAoIDB4MSA8PCA5ICkgICAvKiAoVURQKSBVU0IgUmVzdW1lIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0VYVFJTTSAgICAgKCAweDEgPDwgMTAgKSAgLyogKFVEUCkgVVNCIEV4dGVybmFsIFJlc3VtZSBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9TT0ZJTlQgICAgICggMHgxIDw8IDExICkgIC8qIChVRFApIFVTQiBTdGFydCBPZiBmcmFtZSBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9XQUtFVVAgICAgICggMHgxIDw8IDEzICkgIC8qIChVRFApIFVTQiBSZXN1bWUgSW50ZXJydXB0ICovDQotLyogLS0tLS0tLS0gVURQX0lEUiA6IChVRFAgT2Zmc2V0OiAweDE0KSBVU0IgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBVRFBfSU1SIDogKFVEUCBPZmZzZXQ6IDB4MTgpIFVTQiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFVEUF9JU1IgOiAoVURQIE9mZnNldDogMHgxYykgVVNCIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FTkRCVVNSRVMgICAgICAgICAgICAgICggMHgxIDw8IDEyICkgLyogKFVEUCkgVVNCIEVuZCBPZiBCdXMgUmVzZXQgSW50ZXJydXB0ICovDQotLyogLS0tLS0tLS0gVURQX0lDUiA6IChVRFAgT2Zmc2V0OiAweDIwKSBVU0IgSW50ZXJydXB0IENsZWFyIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gVURQX1JTVF9FUCA6IChVRFAgT2Zmc2V0OiAweDI4KSBVU0IgUmVzZXQgRW5kcG9pbnQgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUDAgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDAgKSAgICAvKiAoVURQKSBSZXNldCBFbmRwb2ludCAwICovDQotI2RlZmluZSBBVDkxQ19VRFBfRVAxICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxICkgICAgLyogKFVEUCkgUmVzZXQgRW5kcG9pbnQgMSAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0VQMiAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMiApICAgIC8qIChVRFApIFJlc2V0IEVuZHBvaW50IDIgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUDMgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDMgKSAgICAvKiAoVURQKSBSZXNldCBFbmRwb2ludCAzICovDQotI2RlZmluZSBBVDkxQ19VRFBfRVA0ICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCA0ICkgICAgLyogKFVEUCkgUmVzZXQgRW5kcG9pbnQgNCAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0VQNSAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgNSApICAgIC8qIChVRFApIFJlc2V0IEVuZHBvaW50IDUgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUDYgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDYgKSAgICAvKiAoVURQKSBSZXNldCBFbmRwb2ludCA2ICovDQotI2RlZmluZSBBVDkxQ19VRFBfRVA3ICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCA3ICkgICAgLyogKFVEUCkgUmVzZXQgRW5kcG9pbnQgNyAqLw0KLS8qIC0tLS0tLS0tIFVEUF9DU1IgOiAoVURQIE9mZnNldDogMHgzMCkgVVNCIEVuZHBvaW50IENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX1RYQ09NUCAgICAgICAgICAgICAgICAgKCAweDEgPDwgMCApICAgIC8qIChVRFApIEdlbmVyYXRlcyBhbiBJTiBwYWNrZXQgd2l0aCBkYXRhIHByZXZpb3VzbHkgd3JpdHRlbiBpbiB0aGUgRFBSICovDQotI2RlZmluZSBBVDkxQ19VRFBfUlhfREFUQV9CSzAgICAgICAgICAgICAoIDB4MSA8PCAxICkgICAgLyogKFVEUCkgUmVjZWl2ZSBEYXRhIEJhbmsgMCAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX1JYU0VUVVAgICAgICAgICAgICAgICAgKCAweDEgPDwgMiApICAgIC8qIChVRFApIFNlbmRzIFNUQUxMIHRvIHRoZSBIb3N0IChDb250cm9sIGVuZHBvaW50cykgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9JU09FUlJPUiAgICAgICAgICAgICAgICggMHgxIDw8IDMgKSAgICAvKiAoVURQKSBJc29jaHJvbm91cyBlcnJvciAoSXNvY2hyb25vdXMgZW5kcG9pbnRzKSAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX1RYUEtUUkRZICAgICAgICAgICAgICAgKCAweDEgPDwgNCApICAgIC8qIChVRFApIFRyYW5zbWl0IFBhY2tldCBSZWFkeSAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0ZPUkNFU1RBTEwgICAgICAgICAgICAgKCAweDEgPDwgNSApICAgIC8qIChVRFApIEZvcmNlIFN0YWxsICh1c2VkIGJ5IENvbnRyb2wsIEJ1bGsgYW5kIElzb2Nocm9ub3VzIGVuZHBvaW50cykuICovDQotI2RlZmluZSBBVDkxQ19VRFBfUlhfREFUQV9CSzEgICAgICAgICAgICAoIDB4MSA8PCA2ICkgICAgLyogKFVEUCkgUmVjZWl2ZSBEYXRhIEJhbmsgMSAob25seSB1c2VkIGJ5IGVuZHBvaW50cyB3aXRoIHBpbmctcG9uZyBhdHRyaWJ1dGVzKS4gKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9ESVIgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDcgKSAgICAvKiAoVURQKSBUcmFuc2ZlciBEaXJlY3Rpb24gKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUFRZUEUgICAgICAgICAgICAgICAgICggMHg3IDw8IDggKSAgICAvKiAoVURQKSBFbmRwb2ludCB0eXBlICovDQotI2RlZmluZSAgICAgQVQ5MUNfVURQX0VQVFlQRV9DVFJMICAgICAgICAoIDB4MCA8PCA4ICkgICAgLyogKFVEUCkgQ29udHJvbCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VEUF9FUFRZUEVfSVNPX09VVCAgICAgKCAweDEgPDwgOCApICAgIC8qIChVRFApIElzb2Nocm9ub3VzIE9VVCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VEUF9FUFRZUEVfQlVMS19PVVQgICAgKCAweDIgPDwgOCApICAgIC8qIChVRFApIEJ1bGsgT1VUICovDQotI2RlZmluZSAgICAgQVQ5MUNfVURQX0VQVFlQRV9JTlRfT1VUICAgICAoIDB4MyA8PCA4ICkgICAgLyogKFVEUCkgSW50ZXJydXB0IE9VVCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VEUF9FUFRZUEVfSVNPX0lOICAgICAgKCAweDUgPDwgOCApICAgIC8qIChVRFApIElzb2Nocm9ub3VzIElOICovDQotI2RlZmluZSAgICAgQVQ5MUNfVURQX0VQVFlQRV9CVUxLX0lOICAgICAoIDB4NiA8PCA4ICkgICAgLyogKFVEUCkgQnVsayBJTiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VEUF9FUFRZUEVfSU5UX0lOICAgICAgKCAweDcgPDwgOCApICAgIC8qIChVRFApIEludGVycnVwdCBJTiAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0RUR0xFICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTEgKSAgIC8qIChVRFApIERhdGEgVG9nZ2xlICovDQotI2RlZmluZSBBVDkxQ19VRFBfRVBFRFMgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxNSApICAgLyogKFVEUCkgRW5kcG9pbnQgRW5hYmxlIERpc2FibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9SWEJZVEVDTlQgICAgICAgICAgICAgICggMHg3RkYgPDwgMTYgKSAvKiAoVURQKSBOdW1iZXIgT2YgQnl0ZXMgQXZhaWxhYmxlIGluIHRoZSBGSUZPICovDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBVU0IgRGV2aWNlIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19VRFAgc3RydWN0dXJlICoqKg0KKyNkZWZpbmUgVURQX05VTSAgICAgICAgICggMCkgLy8gRnJhbWUgTnVtYmVyIFJlZ2lzdGVyDQorI2RlZmluZSBVRFBfR0xCU1RBVEUgICAgKCA0KSAvLyBHbG9iYWwgU3RhdGUgUmVnaXN0ZXINCisjZGVmaW5lIFVEUF9GQUREUiAgICAgICAoIDgpIC8vIEZ1bmN0aW9uIEFkZHJlc3MgUmVnaXN0ZXINCisjZGVmaW5lIFVEUF9JRVIgICAgICAgICAoMTYpIC8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFVEUF9JRFIgICAgICAgICAoMjApIC8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBVRFBfSU1SICAgICAgICAgKDI0KSAvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgVURQX0lTUiAgICAgICAgICgyOCkgLy8gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgVURQX0lDUiAgICAgICAgICgzMikgLy8gSW50ZXJydXB0IENsZWFyIFJlZ2lzdGVyDQorI2RlZmluZSBVRFBfUlNURVAgICAgICAgKDQwKSAvLyBSZXNldCBFbmRwb2ludCBSZWdpc3Rlcg0KKyNkZWZpbmUgVURQX0NTUiAgICAgICAgICg0OCkgLy8gRW5kcG9pbnQgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBVRFBfRkRSICAgICAgICAgKDgwKSAvLyBFbmRwb2ludCBGSUZPIERhdGEgUmVnaXN0ZXINCisvLyAtLS0tLS0tLSBVRFBfRlJNX05VTSA6IChVRFAgT2Zmc2V0OiAweDApIFVTQiBGcmFtZSBOdW1iZXIgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VRFBfRlJNX05VTSAgICAgICAgICgweDdGRiA8PCAgMCkgLy8gKFVEUCkgRnJhbWUgTnVtYmVyIGFzIERlZmluZWQgaW4gdGhlIFBhY2tldCBGaWVsZCBGb3JtYXRzDQorI2RlZmluZSBBVDkxQ19VRFBfRlJNX0VSUiAgICAgICAgICgweDEgPDwgMTYpIC8vIChVRFApIEZyYW1lIEVycm9yDQorI2RlZmluZSBBVDkxQ19VRFBfRlJNX09LICAgICAgICAgICgweDEgPDwgMTcpIC8vIChVRFApIEZyYW1lIE9LDQorLy8gLS0tLS0tLS0gVURQX0dMQl9TVEFURSA6IChVRFAgT2Zmc2V0OiAweDQpIFVTQiBHbG9iYWwgU3RhdGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VRFBfRkFEREVOICAgICAgICAgICgweDEgPDwgIDApIC8vIChVRFApIEZ1bmN0aW9uIEFkZHJlc3MgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19VRFBfQ09ORkcgICAgICAgICAgICgweDEgPDwgIDEpIC8vIChVRFApIENvbmZpZ3VyZWQNCisjZGVmaW5lIEFUOTFDX1VEUF9STVdVUEUgICAgICAgICAgKDB4MSA8PCAgMikgLy8gKFVEUCkgUmVtb3RlIFdha2UgVXAgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19VRFBfUlNNSU5QUiAgICAgICAgICgweDEgPDwgIDMpIC8vIChVRFApIEEgUmVzdW1lIEhhcyBCZWVuIFNlbnQgdG8gdGhlIEhvc3QNCisvLyAtLS0tLS0tLSBVRFBfRkFERFIgOiAoVURQIE9mZnNldDogMHg4KSBVU0IgRnVuY3Rpb24gQWRkcmVzcyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VEUF9GQUREICAgICAgICAgICAgKDB4RkYgPDwgIDApIC8vIChVRFApIEZ1bmN0aW9uIEFkZHJlc3MgVmFsdWUNCisjZGVmaW5lIEFUOTFDX1VEUF9GRU4gICAgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKFVEUCkgRnVuY3Rpb24gRW5hYmxlDQorLy8gLS0tLS0tLS0gVURQX0lFUiA6IChVRFAgT2Zmc2V0OiAweDEwKSBVU0IgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VEUF9FUElOVDAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFVEUCkgRW5kcG9pbnQgMCBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9FUElOVDEgICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKFVEUCkgRW5kcG9pbnQgMCBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9FUElOVDIgICAgICAgICAgKDB4MSA8PCAgMikgLy8gKFVEUCkgRW5kcG9pbnQgMiBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9FUElOVDMgICAgICAgICAgKDB4MSA8PCAgMykgLy8gKFVEUCkgRW5kcG9pbnQgMyBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9FUElOVDQgICAgICAgICAgKDB4MSA8PCAgNCkgLy8gKFVEUCkgRW5kcG9pbnQgNCBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9FUElOVDUgICAgICAgICAgKDB4MSA8PCAgNSkgLy8gKFVEUCkgRW5kcG9pbnQgNSBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9FUElOVDYgICAgICAgICAgKDB4MSA8PCAgNikgLy8gKFVEUCkgRW5kcG9pbnQgNiBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9FUElOVDcgICAgICAgICAgKDB4MSA8PCAgNykgLy8gKFVEUCkgRW5kcG9pbnQgNyBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9SWFNVU1AgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKFVEUCkgVVNCIFN1c3BlbmQgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfUlhSU00gICAgICAgICAgICgweDEgPDwgIDkpIC8vIChVRFApIFVTQiBSZXN1bWUgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfRVhUUlNNICAgICAgICAgICgweDEgPDwgMTApIC8vIChVRFApIFVTQiBFeHRlcm5hbCBSZXN1bWUgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfU09GSU5UICAgICAgICAgICgweDEgPDwgMTEpIC8vIChVRFApIFVTQiBTdGFydCBPZiBmcmFtZSBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9XQUtFVVAgICAgICAgICAgKDB4MSA8PCAxMykgLy8gKFVEUCkgVVNCIFJlc3VtZSBJbnRlcnJ1cHQNCisvLyAtLS0tLS0tLSBVRFBfSURSIDogKFVEUCBPZmZzZXQ6IDB4MTQpIFVTQiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBVRFBfSU1SIDogKFVEUCBPZmZzZXQ6IDB4MTgpIFVTQiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBVRFBfSVNSIDogKFVEUCBPZmZzZXQ6IDB4MWMpIFVTQiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VOREJVU1JFUyAgICAgICAoMHgxIDw8IDEyKSAvLyAoVURQKSBVU0IgRW5kIE9mIEJ1cyBSZXNldCBJbnRlcnJ1cHQNCisvLyAtLS0tLS0tLSBVRFBfSUNSIDogKFVEUCBPZmZzZXQ6IDB4MjApIFVTQiBJbnRlcnJ1cHQgQ2xlYXIgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVURQX1JTVF9FUCA6IChVRFAgT2Zmc2V0OiAweDI4KSBVU0IgUmVzZXQgRW5kcG9pbnQgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VRFBfRVAwICAgICAgICAgICAgICgweDEgPDwgIDApIC8vIChVRFApIFJlc2V0IEVuZHBvaW50IDANCisjZGVmaW5lIEFUOTFDX1VEUF9FUDEgICAgICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKFVEUCkgUmVzZXQgRW5kcG9pbnQgMQ0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQMiAgICAgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoVURQKSBSZXNldCBFbmRwb2ludCAyDQorI2RlZmluZSBBVDkxQ19VRFBfRVAzICAgICAgICAgICAgICgweDEgPDwgIDMpIC8vIChVRFApIFJlc2V0IEVuZHBvaW50IDMNCisjZGVmaW5lIEFUOTFDX1VEUF9FUDQgICAgICAgICAgICAgKDB4MSA8PCAgNCkgLy8gKFVEUCkgUmVzZXQgRW5kcG9pbnQgNA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQNSAgICAgICAgICAgICAoMHgxIDw8ICA1KSAvLyAoVURQKSBSZXNldCBFbmRwb2ludCA1DQorI2RlZmluZSBBVDkxQ19VRFBfRVA2ICAgICAgICAgICAgICgweDEgPDwgIDYpIC8vIChVRFApIFJlc2V0IEVuZHBvaW50IDYNCisjZGVmaW5lIEFUOTFDX1VEUF9FUDcgICAgICAgICAgICAgKDB4MSA8PCAgNykgLy8gKFVEUCkgUmVzZXQgRW5kcG9pbnQgNw0KKy8vIC0tLS0tLS0tIFVEUF9DU1IgOiAoVURQIE9mZnNldDogMHgzMCkgVVNCIEVuZHBvaW50IENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VEUF9UWENPTVAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFVEUCkgR2VuZXJhdGVzIGFuIElOIHBhY2tldCB3aXRoIGRhdGEgcHJldmlvdXNseSB3cml0dGVuIGluIHRoZSBEUFINCisjZGVmaW5lIEFUOTFDX1VEUF9SWF9EQVRBX0JLMCAgICAgKDB4MSA8PCAgMSkgLy8gKFVEUCkgUmVjZWl2ZSBEYXRhIEJhbmsgMA0KKyNkZWZpbmUgQVQ5MUNfVURQX1JYU0VUVVAgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoVURQKSBTZW5kcyBTVEFMTCB0byB0aGUgSG9zdCAoQ29udHJvbCBlbmRwb2ludHMpDQorI2RlZmluZSBBVDkxQ19VRFBfSVNPRVJST1IgICAgICAgICgweDEgPDwgIDMpIC8vIChVRFApIElzb2Nocm9ub3VzIGVycm9yIChJc29jaHJvbm91cyBlbmRwb2ludHMpDQorI2RlZmluZSBBVDkxQ19VRFBfVFhQS1RSRFkgICAgICAgICgweDEgPDwgIDQpIC8vIChVRFApIFRyYW5zbWl0IFBhY2tldCBSZWFkeQ0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZPUkNFU1RBTEwgICAgICAoMHgxIDw8ICA1KSAvLyAoVURQKSBGb3JjZSBTdGFsbCAodXNlZCBieSBDb250cm9sLCBCdWxrIGFuZCBJc29jaHJvbm91cyBlbmRwb2ludHMpLg0KKyNkZWZpbmUgQVQ5MUNfVURQX1JYX0RBVEFfQksxICAgICAoMHgxIDw8ICA2KSAvLyAoVURQKSBSZWNlaXZlIERhdGEgQmFuayAxIChvbmx5IHVzZWQgYnkgZW5kcG9pbnRzIHdpdGggcGluZy1wb25nIGF0dHJpYnV0ZXMpLg0KKyNkZWZpbmUgQVQ5MUNfVURQX0RJUiAgICAgICAgICAgICAoMHgxIDw8ICA3KSAvLyAoVURQKSBUcmFuc2ZlciBEaXJlY3Rpb24NCisjZGVmaW5lIEFUOTFDX1VEUF9FUFRZUEUgICAgICAgICAgKDB4NyA8PCAgOCkgLy8gKFVEUCkgRW5kcG9pbnQgdHlwZQ0KKyNkZWZpbmUgCUFUOTFDX1VEUF9FUFRZUEVfQ1RSTCAgICAgICAgICAgICAgICAgKDB4MCA8PCAgOCkgLy8gKFVEUCkgQ29udHJvbA0KKyNkZWZpbmUgCUFUOTFDX1VEUF9FUFRZUEVfSVNPX09VVCAgICAgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKFVEUCkgSXNvY2hyb25vdXMgT1VUDQorI2RlZmluZSAJQVQ5MUNfVURQX0VQVFlQRV9CVUxLX09VVCAgICAgICAgICAgICAoMHgyIDw8ICA4KSAvLyAoVURQKSBCdWxrIE9VVA0KKyNkZWZpbmUgCUFUOTFDX1VEUF9FUFRZUEVfSU5UX09VVCAgICAgICAgICAgICAgKDB4MyA8PCAgOCkgLy8gKFVEUCkgSW50ZXJydXB0IE9VVA0KKyNkZWZpbmUgCUFUOTFDX1VEUF9FUFRZUEVfSVNPX0lOICAgICAgICAgICAgICAgKDB4NSA8PCAgOCkgLy8gKFVEUCkgSXNvY2hyb25vdXMgSU4NCisjZGVmaW5lIAlBVDkxQ19VRFBfRVBUWVBFX0JVTEtfSU4gICAgICAgICAgICAgICgweDYgPDwgIDgpIC8vIChVRFApIEJ1bGsgSU4NCisjZGVmaW5lIAlBVDkxQ19VRFBfRVBUWVBFX0lOVF9JTiAgICAgICAgICAgICAgICgweDcgPDwgIDgpIC8vIChVRFApIEludGVycnVwdCBJTg0KKyNkZWZpbmUgQVQ5MUNfVURQX0RUR0xFICAgICAgICAgICAoMHgxIDw8IDExKSAvLyAoVURQKSBEYXRhIFRvZ2dsZQ0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQRURTICAgICAgICAgICAoMHgxIDw8IDE1KSAvLyAoVURQKSBFbmRwb2ludCBFbmFibGUgRGlzYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVURQX1JYQllURUNOVCAgICAgICAoMHg3RkYgPDwgMTYpIC8vIChVRFApIE51bWJlciBPZiBCeXRlcyBBdmFpbGFibGUgaW4gdGhlIEZJRk8NCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICAgUkVHSVNURVIgQUREUkVTUyBERUZJTklUSU9OIEZPUiBBVDkxU0FNN1M2NCAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBTWVNDIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1lTQ19TWVNDX1ZSUE0gICAgKCAweEZGRkZGRDYwICkgLyogKFNZU0MpIFZvbHRhZ2UgUmVndWxhdG9yIFBvd2VyIE1vZGUgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIEFJQyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19JQ0NSICAgICAgICAgICggMHhGRkZGRjEyOCApIC8qIChBSUMpIEludGVycnVwdCBDbGVhciBDb21tYW5kIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BSUNfSUVDUiAgICAgICAgICAoIDB4RkZGRkYxMjAgKSAvKiAoQUlDKSBJbnRlcnJ1cHQgRW5hYmxlIENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19TTVIgICAgICAgICAgICggMHhGRkZGRjAwMCApIC8qIChBSUMpIFNvdXJjZSBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BSUNfSVNDUiAgICAgICAgICAoIDB4RkZGRkYxMkMgKSAvKiAoQUlDKSBJbnRlcnJ1cHQgU2V0IENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19FT0lDUiAgICAgICAgICggMHhGRkZGRjEzMCApIC8qIChBSUMpIEVuZCBvZiBJbnRlcnJ1cHQgQ29tbWFuZCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX0RDUiAgICAgICAgICAgKCAweEZGRkZGMTM4ICkgLyogKEFJQykgRGVidWcgQ29udHJvbCBSZWdpc3RlciAoUHJvdGVjdCkgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19GRkVSICAgICAgICAgICggMHhGRkZGRjE0MCApIC8qIChBSUMpIEZhc3QgRm9yY2luZyBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19TVlIgICAgICAgICAgICggMHhGRkZGRjA4MCApIC8qIChBSUMpIFNvdXJjZSBWZWN0b3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19TUFUgICAgICAgICAgICggMHhGRkZGRjEzNCApIC8qIChBSUMpIFNwdXJpb3VzIFZlY3RvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX0ZGRFIgICAgICAgICAgKCAweEZGRkZGMTQ0ICkgLyogKEFJQykgRmFzdCBGb3JjaW5nIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19GVlIgICAgICAgICAgICggMHhGRkZGRjEwNCApIC8qIChBSUMpIEZJUSBWZWN0b3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19GRlNSICAgICAgICAgICggMHhGRkZGRjE0OCApIC8qIChBSUMpIEZhc3QgRm9yY2luZyBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19JTVIgICAgICAgICAgICggMHhGRkZGRjExMCApIC8qIChBSUMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BSUNfSVNSICAgICAgICAgICAoIDB4RkZGRkYxMDggKSAvKiAoQUlDKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BSUNfSVZSICAgICAgICAgICAoIDB4RkZGRkYxMDAgKSAvKiAoQUlDKSBJUlEgVmVjdG9yIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BSUNfSURDUiAgICAgICAgICAoIDB4RkZGRkYxMjQgKSAvKiAoQUlDKSBJbnRlcnJ1cHQgRGlzYWJsZSBDb21tYW5kIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BSUNfQ0lTUiAgICAgICAgICAoIDB4RkZGRkYxMTQgKSAvKiAoQUlDKSBDb3JlIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19JUFIgICAgICAgICAgICggMHhGRkZGRjEwQyApIC8qIChBSUMpIEludGVycnVwdCBQZW5kaW5nIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBEQkdVIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9DMlIgICAgICAgICAgKCAweEZGRkZGMjQ0ICkgLyogKERCR1UpIENoaXAgSUQyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19EQkdVX1RIUiAgICAgICAgICAoIDB4RkZGRkYyMUMgKSAvKiAoREJHVSkgVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9DU1IgICAgICAgICAgKCAweEZGRkZGMjE0ICkgLyogKERCR1UpIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19EQkdVX0lEUiAgICAgICAgICAoIDB4RkZGRkYyMEMgKSAvKiAoREJHVSkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfTVIgICAgICAgICAgICggMHhGRkZGRjIwNCApIC8qIChEQkdVKSBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19EQkdVX0ZOVFIgICAgICAgICAoIDB4RkZGRkYyNDggKSAvKiAoREJHVSkgRm9yY2UgTlRSU1QgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfQzFSICAgICAgICAgICggMHhGRkZGRjI0MCApIC8qIChEQkdVKSBDaGlwIElEMSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9CUkdSICAgICAgICAgKCAweEZGRkZGMjIwICkgLyogKERCR1UpIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfUkhSICAgICAgICAgICggMHhGRkZGRjIxOCApIC8qIChEQkdVKSBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19EQkdVX0lNUiAgICAgICAgICAoIDB4RkZGRkYyMTAgKSAvKiAoREJHVSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfSUVSICAgICAgICAgICggMHhGRkZGRjIwOCApIC8qIChEQkdVKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19EQkdVX0NSICAgICAgICAgICAoIDB4RkZGRkYyMDAgKSAvKiAoREJHVSkgQ29udHJvbCBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX0RCR1UgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19EQkdVX1ROQ1IgICAgICAgICAoIDB4RkZGRkYzMUMgKSAvKiAoUERDX0RCR1UpIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9STkNSICAgICAgICAgKCAweEZGRkZGMzE0ICkgLyogKFBEQ19EQkdVKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9QVENSICAgICAgICAgKCAweEZGRkZGMzIwICkgLyogKFBEQ19EQkdVKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9QVFNSICAgICAgICAgKCAweEZGRkZGMzI0ICkgLyogKFBEQ19EQkdVKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19EQkdVX1JDUiAgICAgICAgICAoIDB4RkZGRkYzMDQgKSAvKiAoUERDX0RCR1UpIFJlY2VpdmUgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9UQ1IgICAgICAgICAgKCAweEZGRkZGMzBDICkgLyogKFBEQ19EQkdVKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19EQkdVX1JQUiAgICAgICAgICAoIDB4RkZGRkYzMDAgKSAvKiAoUERDX0RCR1UpIFJlY2VpdmUgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9UUFIgICAgICAgICAgKCAweEZGRkZGMzA4ICkgLyogKFBEQ19EQkdVKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19EQkdVX1JOUFIgICAgICAgICAoIDB4RkZGRkYzMTAgKSAvKiAoUERDX0RCR1UpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19EQkdVX1ROUFIgICAgICAgICAoIDB4RkZGRkYzMTggKSAvKiAoUERDX0RCR1UpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUElPQSBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfSU1SICAgICAgICAgICggMHhGRkZGRjQ0OCApIC8qIChQSU9BKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9JRVIgICAgICAgICAgKCAweEZGRkZGNDQwICkgLyogKFBJT0EpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfT1dEUiAgICAgICAgICggMHhGRkZGRjRBNCApIC8qIChQSU9BKSBPdXRwdXQgV3JpdGUgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9JU1IgICAgICAgICAgKCAweEZGRkZGNDRDICkgLyogKFBJT0EpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfUFBVRFIgICAgICAgICggMHhGRkZGRjQ2MCApIC8qIChQSU9BKSBQdWxsLXVwIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfTURTUiAgICAgICAgICggMHhGRkZGRjQ1OCApIC8qIChQSU9BKSBNdWx0aS1kcml2ZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX01ERVIgICAgICAgICAoIDB4RkZGRkY0NTAgKSAvKiAoUElPQSkgTXVsdGktZHJpdmVyIEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9QRVIgICAgICAgICAgKCAweEZGRkZGNDAwICkgLyogKFBJT0EpIFBJTyBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfUFNSICAgICAgICAgICggMHhGRkZGRjQwOCApIC8qIChQSU9BKSBQSU8gU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX09FUiAgICAgICAgICAoIDB4RkZGRkY0MTAgKSAvKiAoUElPQSkgT3V0cHV0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9CU1IgICAgICAgICAgKCAweEZGRkZGNDc0ICkgLyogKFBJT0EpIFNlbGVjdCBCIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX1BQVUVSICAgICAgICAoIDB4RkZGRkY0NjQgKSAvKiAoUElPQSkgUHVsbC11cCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfTUREUiAgICAgICAgICggMHhGRkZGRjQ1NCApIC8qIChQSU9BKSBNdWx0aS1kcml2ZXIgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9QRFIgICAgICAgICAgKCAweEZGRkZGNDA0ICkgLyogKFBJT0EpIFBJTyBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX09EUiAgICAgICAgICAoIDB4RkZGRkY0MTQgKSAvKiAoUElPQSkgT3V0cHV0IERpc2FibGUgUmVnaXN0ZXJyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX0lGRFIgICAgICAgICAoIDB4RkZGRkY0MjQgKSAvKiAoUElPQSkgSW5wdXQgRmlsdGVyIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfQUJTUiAgICAgICAgICggMHhGRkZGRjQ3OCApIC8qIChQSU9BKSBBQiBTZWxlY3QgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX0FTUiAgICAgICAgICAoIDB4RkZGRkY0NzAgKSAvKiAoUElPQSkgU2VsZWN0IEEgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfUFBVU1IgICAgICAgICggMHhGRkZGRjQ2OCApIC8qIChQSU9BKSBQYWQgUHVsbC11cCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfT0RTUiAgICAgICAgICggMHhGRkZGRjQzOCApIC8qIChQSU9BKSBPdXRwdXQgRGF0YSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfU09EUiAgICAgICAgICggMHhGRkZGRjQzMCApIC8qIChQSU9BKSBTZXQgT3V0cHV0IERhdGEgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfSUZTUiAgICAgICAgICggMHhGRkZGRjQyOCApIC8qIChQSU9BKSBJbnB1dCBGaWx0ZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX0lGRVIgICAgICAgICAoIDB4RkZGRkY0MjAgKSAvKiAoUElPQSkgSW5wdXQgRmlsdGVyIEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9PU1IgICAgICAgICAgKCAweEZGRkZGNDE4ICkgLyogKFBJT0EpIE91dHB1dCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfSURSICAgICAgICAgICggMHhGRkZGRjQ0NCApIC8qIChQSU9BKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9QRFNSICAgICAgICAgKCAweEZGRkZGNDNDICkgLyogKFBJT0EpIFBpbiBEYXRhIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9DT0RSICAgICAgICAgKCAweEZGRkZGNDM0ICkgLyogKFBJT0EpIENsZWFyIE91dHB1dCBEYXRhIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX09XU1IgICAgICAgICAoIDB4RkZGRkY0QTggKSAvKiAoUElPQSkgT3V0cHV0IFdyaXRlIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9PV0VSICAgICAgICAgKCAweEZGRkZGNEEwICkgLyogKFBJT0EpIE91dHB1dCBXcml0ZSBFbmFibGUgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENLR1IgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19DS0dSX1BMTFIgICAgICAgICAoIDB4RkZGRkZDMkMgKSAvKiAoQ0tHUikgUExMIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DS0dSX01DRlIgICAgICAgICAoIDB4RkZGRkZDMjQgKSAvKiAoQ0tHUikgTWFpbiBDbG9jayAgRnJlcXVlbmN5IFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DS0dSX01PUiAgICAgICAgICAoIDB4RkZGRkZDMjAgKSAvKiAoQ0tHUikgTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQTUMgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19QTUNfU0NTUiAgICAgICAgICAoIDB4RkZGRkZDMDggKSAvKiAoUE1DKSBTeXN0ZW0gQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QTUNfU0NFUiAgICAgICAgICAoIDB4RkZGRkZDMDAgKSAvKiAoUE1DKSBTeXN0ZW0gQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QTUNfSU1SICAgICAgICAgICAoIDB4RkZGRkZDNkMgKSAvKiAoUE1DKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX0lEUiAgICAgICAgICAgKCAweEZGRkZGQzY0ICkgLyogKFBNQykgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19QQ0RSICAgICAgICAgICggMHhGRkZGRkMxNCApIC8qIChQTUMpIFBlcmlwaGVyYWwgQ2xvY2sgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1NDRFIgICAgICAgICAgKCAweEZGRkZGQzA0ICkgLyogKFBNQykgU3lzdGVtIENsb2NrIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19TUiAgICAgICAgICAgICggMHhGRkZGRkM2OCApIC8qIChQTUMpIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX0lFUiAgICAgICAgICAgKCAweEZGRkZGQzYwICkgLyogKFBNQykgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX01DS1IgICAgICAgICAgKCAweEZGRkZGQzMwICkgLyogKFBNQykgTWFzdGVyIENsb2NrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QTUNfTU9SICAgICAgICAgICAoIDB4RkZGRkZDMjAgKSAvKiAoUE1DKSBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19QQ0VSICAgICAgICAgICggMHhGRkZGRkMxMCApIC8qIChQTUMpIFBlcmlwaGVyYWwgQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QTUNfUENTUiAgICAgICAgICAoIDB4RkZGRkZDMTggKSAvKiAoUE1DKSBQZXJpcGhlcmFsIENsb2NrIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1BMTFIgICAgICAgICAgKCAweEZGRkZGQzJDICkgLyogKFBNQykgUExMIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QTUNfTUNGUiAgICAgICAgICAoIDB4RkZGRkZDMjQgKSAvKiAoUE1DKSBNYWluIENsb2NrICBGcmVxdWVuY3kgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19QQ0tSICAgICAgICAgICggMHhGRkZGRkM0MCApIC8qIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUlNUQyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1JTVENfUlNSICAgICAgICAgICggMHhGRkZGRkQwNCApIC8qIChSU1RDKSBSZXNldCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1JTVENfUk1SICAgICAgICAgICggMHhGRkZGRkQwOCApIC8qIChSU1RDKSBSZXNldCBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19SU1RDX1JDUiAgICAgICAgICAoIDB4RkZGRkZEMDAgKSAvKiAoUlNUQykgUmVzZXQgQ29udHJvbCBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUlRUQyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1JUVENfUlRTUiAgICAgICAgICggMHhGRkZGRkQyQyApIC8qIChSVFRDKSBSZWFsLXRpbWUgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19SVFRDX1JUQVIgICAgICAgICAoIDB4RkZGRkZEMjQgKSAvKiAoUlRUQykgUmVhbC10aW1lIEFsYXJtIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19SVFRDX1JUVlIgICAgICAgICAoIDB4RkZGRkZEMjggKSAvKiAoUlRUQykgUmVhbC10aW1lIFZhbHVlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19SVFRDX1JUTVIgICAgICAgICAoIDB4RkZGRkZEMjAgKSAvKiAoUlRUQykgUmVhbC10aW1lIE1vZGUgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBJVEMgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19QSVRDX1BJSVIgICAgICAgICAoIDB4RkZGRkZEM0MgKSAvKiAoUElUQykgUGVyaW9kIEludGVydmFsIEltYWdlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSVRDX1BJU1IgICAgICAgICAoIDB4RkZGRkZEMzQgKSAvKiAoUElUQykgUGVyaW9kIEludGVydmFsIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElUQ19QSVZSICAgICAgICAgKCAweEZGRkZGRDM4ICkgLyogKFBJVEMpIFBlcmlvZCBJbnRlcnZhbCBWYWx1ZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElUQ19QSU1SICAgICAgICAgKCAweEZGRkZGRDMwICkgLyogKFBJVEMpIFBlcmlvZCBJbnRlcnZhbCBNb2RlIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBXRFRDIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfV0RUQ19XRE1SICAgICAgICAgKCAweEZGRkZGRDQ0ICkgLyogKFdEVEMpIFdhdGNoZG9nIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1dEVENfV0RTUiAgICAgICAgICggMHhGRkZGRkQ0OCApIC8qIChXRFRDKSBXYXRjaGRvZyBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1dEVENfV0RDUiAgICAgICAgICggMHhGRkZGRkQ0MCApIC8qIChXRFRDKSBXYXRjaGRvZyBDb250cm9sIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBNQyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX01DX0ZDUiAgICAgICAgICAgICggMHhGRkZGRkY2NCApIC8qIChNQykgTUMgRmxhc2ggQ29tbWFuZCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfQVNSICAgICAgICAgICAgKCAweEZGRkZGRjA0ICkgLyogKE1DKSBNQyBBYm9ydCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0ZTUiAgICAgICAgICAgICggMHhGRkZGRkY2OCApIC8qIChNQykgTUMgRmxhc2ggU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19NQ19GTVIgICAgICAgICAgICAoIDB4RkZGRkZGNjAgKSAvKiAoTUMpIE1DIEZsYXNoIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0FBU1IgICAgICAgICAgICggMHhGRkZGRkYwOCApIC8qIChNQykgTUMgQWJvcnQgQWRkcmVzcyBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX01DX1JDUiAgICAgICAgICAgICggMHhGRkZGRkYwMCApIC8qIChNQykgTUMgUmVtYXAgQ29udHJvbCBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX1NQSSBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9QVENSICAgICAgICAgICggMHhGRkZFMDEyMCApIC8qIChQRENfU1BJKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX1ROUFIgICAgICAgICAgKCAweEZGRkUwMTE4ICkgLyogKFBEQ19TUEkpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX1JOUFIgICAgICAgICAgKCAweEZGRkUwMTEwICkgLyogKFBEQ19TUEkpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUElfVFBSICAgICAgICAgICAoIDB4RkZGRTAxMDggKSAvKiAoUERDX1NQSSkgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX1JQUiAgICAgICAgICAgKCAweEZGRkUwMTAwICkgLyogKFBEQ19TUEkpIFJlY2VpdmUgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX1BUU1IgICAgICAgICAgKCAweEZGRkUwMTI0ICkgLyogKFBEQ19TUEkpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9UTkNSICAgICAgICAgICggMHhGRkZFMDExQyApIC8qIChQRENfU1BJKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9STkNSICAgICAgICAgICggMHhGRkZFMDExNCApIC8qIChQRENfU1BJKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX1RDUiAgICAgICAgICAgKCAweEZGRkUwMTBDICkgLyogKFBEQ19TUEkpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9SQ1IgICAgICAgICAgICggMHhGRkZFMDEwNCApIC8qIChQRENfU1BJKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFNQSSBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9DU1IgICAgICAgICAgICggMHhGRkZFMDAzMCApIC8qIChTUEkpIENoaXAgU2VsZWN0IFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUElfSURSICAgICAgICAgICAoIDB4RkZGRTAwMTggKSAvKiAoU1BJKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX1NSICAgICAgICAgICAgKCAweEZGRkUwMDEwICkgLyogKFNQSSkgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUElfUkRSICAgICAgICAgICAoIDB4RkZGRTAwMDggKSAvKiAoU1BJKSBSZWNlaXZlIERhdGEgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9DUiAgICAgICAgICAgICggMHhGRkZFMDAwMCApIC8qIChTUEkpIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9JTVIgICAgICAgICAgICggMHhGRkZFMDAxQyApIC8qIChTUEkpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUElfSUVSICAgICAgICAgICAoIDB4RkZGRTAwMTQgKSAvKiAoU1BJKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUElfVERSICAgICAgICAgICAoIDB4RkZGRTAwMEMgKSAvKiAoU1BJKSBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUElfTVIgICAgICAgICAgICAoIDB4RkZGRTAwMDQgKSAvKiAoU1BJKSBNb2RlIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfQURDIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1BUQ1IgICAgICAgICAgKCAweEZGRkQ4MTIwICkgLyogKFBEQ19BREMpIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRENfVE5QUiAgICAgICAgICAoIDB4RkZGRDgxMTggKSAvKiAoUERDX0FEQykgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRENfUk5QUiAgICAgICAgICAoIDB4RkZGRDgxMTAgKSAvKiAoUERDX0FEQykgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19UUFIgICAgICAgICAgICggMHhGRkZEODEwOCApIC8qIChQRENfQURDKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRENfUlBSICAgICAgICAgICAoIDB4RkZGRDgxMDAgKSAvKiAoUERDX0FEQykgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRENfUFRTUiAgICAgICAgICAoIDB4RkZGRDgxMjQgKSAvKiAoUERDX0FEQykgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1ROQ1IgICAgICAgICAgKCAweEZGRkQ4MTFDICkgLyogKFBEQ19BREMpIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1JOQ1IgICAgICAgICAgKCAweEZGRkQ4MTE0ICkgLyogKFBEQ19BREMpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRENfVENSICAgICAgICAgICAoIDB4RkZGRDgxMEMgKSAvKiAoUERDX0FEQykgVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1JDUiAgICAgICAgICAgKCAweEZGRkQ4MTA0ICkgLyogKFBEQ19BREMpIFJlY2VpdmUgQ291bnRlciBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQURDIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0lNUiAgICAgICAgICAgKCAweEZGRkQ4MDJDICkgLyogKEFEQykgQURDIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRENfQ0RSNCAgICAgICAgICAoIDB4RkZGRDgwNDAgKSAvKiAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDQgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DRFIyICAgICAgICAgICggMHhGRkZEODAzOCApIC8qIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NEUjAgICAgICAgICAgKCAweEZGRkQ4MDMwICkgLyogKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAwICovDQotI2RlZmluZSBBVDkxQ19BRENfQ0RSNyAgICAgICAgICAoIDB4RkZGRDgwNEMgKSAvKiAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDcgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DRFIxICAgICAgICAgICggMHhGRkZEODAzNCApIC8qIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMSAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NEUjMgICAgICAgICAgKCAweEZGRkQ4MDNDICkgLyogKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAzICovDQotI2RlZmluZSBBVDkxQ19BRENfQ0RSNSAgICAgICAgICAoIDB4RkZGRDgwNDQgKSAvKiAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDUgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19NUiAgICAgICAgICAgICggMHhGRkZEODAwNCApIC8qIChBREMpIEFEQyBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRENfQ0RSNiAgICAgICAgICAoIDB4RkZGRDgwNDggKSAvKiAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDYgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DUiAgICAgICAgICAgICggMHhGRkZEODAwMCApIC8qIChBREMpIEFEQyBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRENfQ0hFUiAgICAgICAgICAoIDB4RkZGRDgwMTAgKSAvKiAoQURDKSBBREMgQ2hhbm5lbCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DSFNSICAgICAgICAgICggMHhGRkZEODAxOCApIC8qIChBREMpIEFEQyBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0lFUiAgICAgICAgICAgKCAweEZGRkQ4MDI0ICkgLyogKEFEQykgQURDIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19TUiAgICAgICAgICAgICggMHhGRkZEODAxQyApIC8qIChBREMpIEFEQyBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DSERSICAgICAgICAgICggMHhGRkZEODAxNCApIC8qIChBREMpIEFEQyBDaGFubmVsIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19JRFIgICAgICAgICAgICggMHhGRkZEODAyOCApIC8qIChBREMpIEFEQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0xDRFIgICAgICAgICAgKCAweEZGRkQ4MDIwICkgLyogKEFEQykgQURDIExhc3QgQ29udmVydGVkIERhdGEgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19TU0MgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19TU0NfUFRDUiAgICAgICAgICAoIDB4RkZGRDQxMjAgKSAvKiAoUERDX1NTQykgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19UTlBSICAgICAgICAgICggMHhGRkZENDExOCApIC8qIChQRENfU1NDKSBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19STlBSICAgICAgICAgICggMHhGRkZENDExMCApIC8qIChQRENfU1NDKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1RQUiAgICAgICAgICAgKCAweEZGRkQ0MTA4ICkgLyogKFBEQ19TU0MpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19SUFIgICAgICAgICAgICggMHhGRkZENDEwMCApIC8qIChQRENfU1NDKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19QVFNSICAgICAgICAgICggMHhGRkZENDEyNCApIC8qIChQRENfU1NDKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfVE5DUiAgICAgICAgICAoIDB4RkZGRDQxMUMgKSAvKiAoUERDX1NTQykgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfUk5DUiAgICAgICAgICAoIDB4RkZGRDQxMTQgKSAvKiAoUERDX1NTQykgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19UQ1IgICAgICAgICAgICggMHhGRkZENDEwQyApIC8qIChQRENfU1NDKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfUkNSICAgICAgICAgICAoIDB4RkZGRDQxMDQgKSAvKiAoUERDX1NTQykgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBTU0MgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19TU0NfUkZNUiAgICAgICAgICAoIDB4RkZGRDQwMTQgKSAvKiAoU1NDKSBSZWNlaXZlIEZyYW1lIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19DTVIgICAgICAgICAgICggMHhGRkZENDAwNCApIC8qIChTU0MpIENsb2NrIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19JRFIgICAgICAgICAgICggMHhGRkZENDA0OCApIC8qIChTU0MpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfU1IgICAgICAgICAgICAoIDB4RkZGRDQwNDAgKSAvKiAoU1NDKSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19SQzBSICAgICAgICAgICggMHhGRkZENDAzOCApIC8qIChTU0MpIFJlY2VpdmUgQ29tcGFyZSAwIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfUlNIUiAgICAgICAgICAoIDB4RkZGRDQwMzAgKSAvKiAoU1NDKSBSZWNlaXZlIFN5bmMgSG9sZGluZyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1JIUiAgICAgICAgICAgKCAweEZGRkQ0MDIwICkgLyogKFNTQykgUmVjZWl2ZSBIb2xkaW5nIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfVENNUiAgICAgICAgICAoIDB4RkZGRDQwMTggKSAvKiAoU1NDKSBUcmFuc21pdCBDbG9jayBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfUkNNUiAgICAgICAgICAoIDB4RkZGRDQwMTAgKSAvKiAoU1NDKSBSZWNlaXZlIENsb2NrIE1vZGVSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0NSICAgICAgICAgICAgKCAweEZGRkQ0MDAwICkgLyogKFNTQykgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0lNUiAgICAgICAgICAgKCAweEZGRkQ0MDRDICkgLyogKFNTQykgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19JRVIgICAgICAgICAgICggMHhGRkZENDA0NCApIC8qIChTU0MpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19SQzFSICAgICAgICAgICggMHhGRkZENDAzQyApIC8qIChTU0MpIFJlY2VpdmUgQ29tcGFyZSAxIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfVFNIUiAgICAgICAgICAoIDB4RkZGRDQwMzQgKSAvKiAoU1NDKSBUcmFuc21pdCBTeW5jIEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19USFIgICAgICAgICAgICggMHhGRkZENDAyNCApIC8qIChTU0MpIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19URk1SICAgICAgICAgICggMHhGRkZENDAxQyApIC8qIChTU0MpIFRyYW5zbWl0IEZyYW1lIE1vZGUgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19VUzEgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19VUzFfUFRTUiAgICAgICAgICAoIDB4RkZGQzQxMjQgKSAvKiAoUERDX1VTMSkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1ROQ1IgICAgICAgICAgKCAweEZGRkM0MTFDICkgLyogKFBEQ19VUzEpIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1JOQ1IgICAgICAgICAgKCAweEZGRkM0MTE0ICkgLyogKFBEQ19VUzEpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfVENSICAgICAgICAgICAoIDB4RkZGQzQxMEMgKSAvKiAoUERDX1VTMSkgVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1JDUiAgICAgICAgICAgKCAweEZGRkM0MTA0ICkgLyogKFBEQ19VUzEpIFJlY2VpdmUgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1BUQ1IgICAgICAgICAgKCAweEZGRkM0MTIwICkgLyogKFBEQ19VUzEpIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfVE5QUiAgICAgICAgICAoIDB4RkZGQzQxMTggKSAvKiAoUERDX1VTMSkgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfUk5QUiAgICAgICAgICAoIDB4RkZGQzQxMTAgKSAvKiAoUERDX1VTMSkgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMV9UUFIgICAgICAgICAgICggMHhGRkZDNDEwOCApIC8qIChQRENfVVMxKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfUlBSICAgICAgICAgICAoIDB4RkZGQzQxMDAgKSAvKiAoUERDX1VTMSkgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBVUzEgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19VUzFfWFhSICAgICAgICAgICAoIDB4RkZGQzQwNDggKSAvKiAoVVMxKSBYT05fWE9GRiBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1JIUiAgICAgICAgICAgKCAweEZGRkM0MDE4ICkgLyogKFVTMSkgUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX0lNUiAgICAgICAgICAgKCAweEZGRkM0MDEwICkgLyogKFVTMSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMV9JRVIgICAgICAgICAgICggMHhGRkZDNDAwOCApIC8qIChVUzEpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMV9DUiAgICAgICAgICAgICggMHhGRkZDNDAwMCApIC8qIChVUzEpIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMV9SVE9SICAgICAgICAgICggMHhGRkZDNDAyNCApIC8qIChVUzEpIFJlY2VpdmVyIFRpbWUtb3V0IFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfVEhSICAgICAgICAgICAoIDB4RkZGQzQwMUMgKSAvKiAoVVMxKSBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfQ1NSICAgICAgICAgICAoIDB4RkZGQzQwMTQgKSAvKiAoVVMxKSBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX0lEUiAgICAgICAgICAgKCAweEZGRkM0MDBDICkgLyogKFVTMSkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMV9GSURJICAgICAgICAgICggMHhGRkZDNDA0MCApIC8qIChVUzEpIEZJX0RJX1JhdGlvIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfQlJHUiAgICAgICAgICAoIDB4RkZGQzQwMjAgKSAvKiAoVVMxKSBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfVFRHUiAgICAgICAgICAoIDB4RkZGQzQwMjggKSAvKiAoVVMxKSBUcmFuc21pdHRlciBUaW1lLWd1YXJkIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfSUYgICAgICAgICAgICAoIDB4RkZGQzQwNEMgKSAvKiAoVVMxKSBJUkRBX0ZJTFRFUiBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX05FUiAgICAgICAgICAgKCAweEZGRkM0MDQ0ICkgLyogKFVTMSkgTmIgRXJyb3JzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfTVIgICAgICAgICAgICAoIDB4RkZGQzQwMDQgKSAvKiAoVVMxKSBNb2RlIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfVVMwIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX1BUQ1IgICAgICAgICAgKCAweEZGRkMwMTIwICkgLyogKFBEQ19VUzApIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzBfVE5QUiAgICAgICAgICAoIDB4RkZGQzAxMTggKSAvKiAoUERDX1VTMCkgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzBfUk5QUiAgICAgICAgICAoIDB4RkZGQzAxMTAgKSAvKiAoUERDX1VTMCkgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9UUFIgICAgICAgICAgICggMHhGRkZDMDEwOCApIC8qIChQRENfVVMwKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzBfUlBSICAgICAgICAgICAoIDB4RkZGQzAxMDAgKSAvKiAoUERDX1VTMCkgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzBfUFRTUiAgICAgICAgICAoIDB4RkZGQzAxMjQgKSAvKiAoUERDX1VTMCkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX1ROQ1IgICAgICAgICAgKCAweEZGRkMwMTFDICkgLyogKFBEQ19VUzApIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX1JOQ1IgICAgICAgICAgKCAweEZGRkMwMTE0ICkgLyogKFBEQ19VUzApIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzBfVENSICAgICAgICAgICAoIDB4RkZGQzAxMEMgKSAvKiAoUERDX1VTMCkgVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX1JDUiAgICAgICAgICAgKCAweEZGRkMwMTA0ICkgLyogKFBEQ19VUzApIFJlY2VpdmUgQ291bnRlciBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVVMwIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX1RUR1IgICAgICAgICAgKCAweEZGRkMwMDI4ICkgLyogKFVTMCkgVHJhbnNtaXR0ZXIgVGltZS1ndWFyZCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX0JSR1IgICAgICAgICAgKCAweEZGRkMwMDIwICkgLyogKFVTMCkgQmF1ZCBSYXRlIEdlbmVyYXRvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX1JIUiAgICAgICAgICAgKCAweEZGRkMwMDE4ICkgLyogKFVTMCkgUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX0lNUiAgICAgICAgICAgKCAweEZGRkMwMDEwICkgLyogKFVTMCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9ORVIgICAgICAgICAgICggMHhGRkZDMDA0NCApIC8qIChVUzApIE5iIEVycm9ycyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX1JUT1IgICAgICAgICAgKCAweEZGRkMwMDI0ICkgLyogKFVTMCkgUmVjZWl2ZXIgVGltZS1vdXQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9YWFIgICAgICAgICAgICggMHhGRkZDMDA0OCApIC8qIChVUzApIFhPTl9YT0ZGIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzBfRklESSAgICAgICAgICAoIDB4RkZGQzAwNDAgKSAvKiAoVVMwKSBGSV9ESV9SYXRpbyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX0NSICAgICAgICAgICAgKCAweEZGRkMwMDAwICkgLyogKFVTMCkgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX0lFUiAgICAgICAgICAgKCAweEZGRkMwMDA4ICkgLyogKFVTMCkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX0lGICAgICAgICAgICAgKCAweEZGRkMwMDRDICkgLyogKFVTMCkgSVJEQV9GSUxURVIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9NUiAgICAgICAgICAgICggMHhGRkZDMDAwNCApIC8qIChVUzApIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9JRFIgICAgICAgICAgICggMHhGRkZDMDAwQyApIC8qIChVUzApIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzBfQ1NSICAgICAgICAgICAoIDB4RkZGQzAwMTQgKSAvKiAoVVMwKSBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX1RIUiAgICAgICAgICAgKCAweEZGRkMwMDFDICkgLyogKFVTMCkgVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVFdJIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX1JIUiAgICAgICAgICAgKCAweEZGRkI4MDMwICkgLyogKFRXSSkgUmVjZWl2ZSBIb2xkaW5nIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UV0lfSURSICAgICAgICAgICAoIDB4RkZGQjgwMjggKSAvKiAoVFdJKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX1NSICAgICAgICAgICAgKCAweEZGRkI4MDIwICkgLyogKFRXSSkgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UV0lfQ1dHUiAgICAgICAgICAoIDB4RkZGQjgwMTAgKSAvKiAoVFdJKSBDbG9jayBXYXZlZm9ybSBHZW5lcmF0b3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9TTVIgICAgICAgICAgICggMHhGRkZCODAwOCApIC8qIChUV0kpIFNsYXZlIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9DUiAgICAgICAgICAgICggMHhGRkZCODAwMCApIC8qIChUV0kpIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9USFIgICAgICAgICAgICggMHhGRkZCODAzNCApIC8qIChUV0kpIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9JTVIgICAgICAgICAgICggMHhGRkZCODAyQyApIC8qIChUV0kpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UV0lfSUVSICAgICAgICAgICAoIDB4RkZGQjgwMjQgKSAvKiAoVFdJKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UV0lfSUFEUiAgICAgICAgICAoIDB4RkZGQjgwMEMgKSAvKiAoVFdJKSBJbnRlcm5hbCBBZGRyZXNzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UV0lfTU1SICAgICAgICAgICAoIDB4RkZGQjgwMDQgKSAvKiAoVFdJKSBNYXN0ZXIgTW9kZSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVEMyIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMyX0lNUiAgICAgICAgICAgKCAweEZGRkEwMEFDICkgLyogKFRDMikgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMl9JRVIgICAgICAgICAgICggMHhGRkZBMDBBNCApIC8qIChUQzIpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMl9SQyAgICAgICAgICAgICggMHhGRkZBMDA5QyApIC8qIChUQzIpIFJlZ2lzdGVyIEMgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMl9SQSAgICAgICAgICAgICggMHhGRkZBMDA5NCApIC8qIChUQzIpIFJlZ2lzdGVyIEEgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMl9DTVIgICAgICAgICAgICggMHhGRkZBMDA4NCApIC8qIChUQzIpIENoYW5uZWwgTW9kZSBSZWdpc3RlciAoQ2FwdHVyZSBNb2RlIC8gV2F2ZWZvcm0gTW9kZSkgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMl9JRFIgICAgICAgICAgICggMHhGRkZBMDBBOCApIC8qIChUQzIpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UQzJfU1IgICAgICAgICAgICAoIDB4RkZGQTAwQTAgKSAvKiAoVEMyKSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMl9SQiAgICAgICAgICAgICggMHhGRkZBMDA5OCApIC8qIChUQzIpIFJlZ2lzdGVyIEIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMl9DViAgICAgICAgICAgICggMHhGRkZBMDA5MCApIC8qIChUQzIpIENvdW50ZXIgVmFsdWUgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMl9DQ1IgICAgICAgICAgICggMHhGRkZBMDA4MCApIC8qIChUQzIpIENoYW5uZWwgQ29udHJvbCBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVEMxIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMxX0lNUiAgICAgICAgICAgKCAweEZGRkEwMDZDICkgLyogKFRDMSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMV9JRVIgICAgICAgICAgICggMHhGRkZBMDA2NCApIC8qIChUQzEpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMV9SQyAgICAgICAgICAgICggMHhGRkZBMDA1QyApIC8qIChUQzEpIFJlZ2lzdGVyIEMgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMV9SQSAgICAgICAgICAgICggMHhGRkZBMDA1NCApIC8qIChUQzEpIFJlZ2lzdGVyIEEgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMV9DTVIgICAgICAgICAgICggMHhGRkZBMDA0NCApIC8qIChUQzEpIENoYW5uZWwgTW9kZSBSZWdpc3RlciAoQ2FwdHVyZSBNb2RlIC8gV2F2ZWZvcm0gTW9kZSkgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMV9JRFIgICAgICAgICAgICggMHhGRkZBMDA2OCApIC8qIChUQzEpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UQzFfU1IgICAgICAgICAgICAoIDB4RkZGQTAwNjAgKSAvKiAoVEMxKSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMV9SQiAgICAgICAgICAgICggMHhGRkZBMDA1OCApIC8qIChUQzEpIFJlZ2lzdGVyIEIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMV9DViAgICAgICAgICAgICggMHhGRkZBMDA1MCApIC8qIChUQzEpIENvdW50ZXIgVmFsdWUgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMV9DQ1IgICAgICAgICAgICggMHhGRkZBMDA0MCApIC8qIChUQzEpIENoYW5uZWwgQ29udHJvbCBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVEMwIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMwX0lNUiAgICAgICAgICAgKCAweEZGRkEwMDJDICkgLyogKFRDMCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMF9JRVIgICAgICAgICAgICggMHhGRkZBMDAyNCApIC8qIChUQzApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMF9SQyAgICAgICAgICAgICggMHhGRkZBMDAxQyApIC8qIChUQzApIFJlZ2lzdGVyIEMgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMF9SQSAgICAgICAgICAgICggMHhGRkZBMDAxNCApIC8qIChUQzApIFJlZ2lzdGVyIEEgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMF9DTVIgICAgICAgICAgICggMHhGRkZBMDAwNCApIC8qIChUQzApIENoYW5uZWwgTW9kZSBSZWdpc3RlciAoQ2FwdHVyZSBNb2RlIC8gV2F2ZWZvcm0gTW9kZSkgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMF9JRFIgICAgICAgICAgICggMHhGRkZBMDAyOCApIC8qIChUQzApIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UQzBfU1IgICAgICAgICAgICAoIDB4RkZGQTAwMjAgKSAvKiAoVEMwKSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMF9SQiAgICAgICAgICAgICggMHhGRkZBMDAxOCApIC8qIChUQzApIFJlZ2lzdGVyIEIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMF9DViAgICAgICAgICAgICggMHhGRkZBMDAxMCApIC8qIChUQzApIENvdW50ZXIgVmFsdWUgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMF9DQ1IgICAgICAgICAgICggMHhGRkZBMDAwMCApIC8qIChUQzApIENoYW5uZWwgQ29udHJvbCBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVENCIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENCX0JNUiAgICAgICAgICAgKCAweEZGRkEwMEM0ICkgLyogKFRDQikgVEMgQmxvY2sgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVENCX0JDUiAgICAgICAgICAgKCAweEZGRkEwMEMwICkgLyogKFRDQikgVEMgQmxvY2sgQ29udHJvbCBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUFdNQ19DSDMgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19DSDNfQ1VQRFIgICAgICAgICAoIDB4RkZGQ0MyNzAgKSAvKiAoUFdNQ19DSDMpIENoYW5uZWwgVXBkYXRlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DSDNfQ1BSRFIgICAgICAgICAoIDB4RkZGQ0MyNjggKSAvKiAoUFdNQ19DSDMpIENoYW5uZWwgUGVyaW9kIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DSDNfQ01SICAgICAgICAgICAoIDB4RkZGQ0MyNjAgKSAvKiAoUFdNQ19DSDMpIENoYW5uZWwgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0gzX1Jlc2VydmVkICAgICAgKCAweEZGRkNDMjc0ICkgLyogKFBXTUNfQ0gzKSBSZXNlcnZlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0gzX0NDTlRSICAgICAgICAgKCAweEZGRkNDMjZDICkgLyogKFBXTUNfQ0gzKSBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NIM19DRFRZUiAgICAgICAgICggMHhGRkZDQzI2NCApIC8qIChQV01DX0NIMykgQ2hhbm5lbCBEdXR5IEN5Y2xlIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQV01DX0NIMiBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX0NIMl9DVVBEUiAgICAgICAgICggMHhGRkZDQzI1MCApIC8qIChQV01DX0NIMikgQ2hhbm5lbCBVcGRhdGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NIMl9DUFJEUiAgICAgICAgICggMHhGRkZDQzI0OCApIC8qIChQV01DX0NIMikgQ2hhbm5lbCBQZXJpb2QgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NIMl9DTVIgICAgICAgICAgICggMHhGRkZDQzI0MCApIC8qIChQV01DX0NIMikgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DSDJfUmVzZXJ2ZWQgICAgICAoIDB4RkZGQ0MyNTQgKSAvKiAoUFdNQ19DSDIpIFJlc2VydmVkICovDQotI2RlZmluZSBBVDkxQ19DSDJfQ0NOVFIgICAgICAgICAoIDB4RkZGQ0MyNEMgKSAvKiAoUFdNQ19DSDIpIENoYW5uZWwgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0gyX0NEVFlSICAgICAgICAgKCAweEZGRkNDMjQ0ICkgLyogKFBXTUNfQ0gyKSBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBXTUNfQ0gxIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0gxX0NVUERSICAgICAgICAgKCAweEZGRkNDMjMwICkgLyogKFBXTUNfQ0gxKSBDaGFubmVsIFVwZGF0ZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0gxX0NQUkRSICAgICAgICAgKCAweEZGRkNDMjI4ICkgLyogKFBXTUNfQ0gxKSBDaGFubmVsIFBlcmlvZCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0gxX0NNUiAgICAgICAgICAgKCAweEZGRkNDMjIwICkgLyogKFBXTUNfQ0gxKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NIMV9SZXNlcnZlZCAgICAgICggMHhGRkZDQzIzNCApIC8qIChQV01DX0NIMSkgUmVzZXJ2ZWQgKi8NCi0jZGVmaW5lIEFUOTFDX0NIMV9DQ05UUiAgICAgICAgICggMHhGRkZDQzIyQyApIC8qIChQV01DX0NIMSkgQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DSDFfQ0RUWVIgICAgICAgICAoIDB4RkZGQ0MyMjQgKSAvKiAoUFdNQ19DSDEpIENoYW5uZWwgRHV0eSBDeWNsZSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUFdNQ19DSDAgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19DSDBfQ1VQRFIgICAgICAgICAoIDB4RkZGQ0MyMTAgKSAvKiAoUFdNQ19DSDApIENoYW5uZWwgVXBkYXRlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DSDBfQ1BSRFIgICAgICAgICAoIDB4RkZGQ0MyMDggKSAvKiAoUFdNQ19DSDApIENoYW5uZWwgUGVyaW9kIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DSDBfQ01SICAgICAgICAgICAoIDB4RkZGQ0MyMDAgKSAvKiAoUFdNQ19DSDApIENoYW5uZWwgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0gwX1Jlc2VydmVkICAgICAgKCAweEZGRkNDMjE0ICkgLyogKFBXTUNfQ0gwKSBSZXNlcnZlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0gwX0NDTlRSICAgICAgICAgKCAweEZGRkNDMjBDICkgLyogKFBXTUNfQ0gwKSBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NIMF9DRFRZUiAgICAgICAgICggMHhGRkZDQzIwNCApIC8qIChQV01DX0NIMCkgQ2hhbm5lbCBEdXR5IEN5Y2xlIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQV01DIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19WUiAgICAgICAgICAgKCAweEZGRkNDMEZDICkgLyogKFBXTUMpIFBXTUMgVmVyc2lvbiBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19JU1IgICAgICAgICAgKCAweEZGRkNDMDFDICkgLyogKFBXTUMpIFBXTUMgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19JRFIgICAgICAgICAgKCAweEZGRkNDMDE0ICkgLyogKFBXTUMpIFBXTUMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfU1IgICAgICAgICAgICggMHhGRkZDQzAwQyApIC8qIChQV01DKSBQV01DIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19FTkEgICAgICAgICAgKCAweEZGRkNDMDA0ICkgLyogKFBXTUMpIFBXTUMgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QV01DX0lNUiAgICAgICAgICAoIDB4RkZGQ0MwMTggKSAvKiAoUFdNQykgUFdNQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19NUiAgICAgICAgICAgKCAweEZGRkNDMDAwICkgLyogKFBXTUMpIFBXTUMgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19ESVMgICAgICAgICAgKCAweEZGRkNDMDA4ICkgLyogKFBXTUMpIFBXTUMgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19JRVIgICAgICAgICAgKCAweEZGRkNDMDEwICkgLyogKFBXTUMpIFBXTUMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVURQIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0lTUiAgICAgICAgICAgKCAweEZGRkIwMDFDICkgLyogKFVEUCkgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0lEUiAgICAgICAgICAgKCAweEZGRkIwMDE0ICkgLyogKFVEUCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9HTEJTVEFURSAgICAgICggMHhGRkZCMDAwNCApIC8qIChVRFApIEdsb2JhbCBTdGF0ZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0ZEUiAgICAgICAgICAgKCAweEZGRkIwMDUwICkgLyogKFVEUCkgRW5kcG9pbnQgRklGTyBEYXRhIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VRFBfQ1NSICAgICAgICAgICAoIDB4RkZGQjAwMzAgKSAvKiAoVURQKSBFbmRwb2ludCBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9SU1RFUCAgICAgICAgICggMHhGRkZCMDAyOCApIC8qIChVRFApIFJlc2V0IEVuZHBvaW50IFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VRFBfSUNSICAgICAgICAgICAoIDB4RkZGQjAwMjAgKSAvKiAoVURQKSBJbnRlcnJ1cHQgQ2xlYXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9JTVIgICAgICAgICAgICggMHhGRkZCMDAxOCApIC8qIChVRFApIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VRFBfSUVSICAgICAgICAgICAoIDB4RkZGQjAwMTAgKSAvKiAoVURQKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VRFBfRkFERFIgICAgICAgICAoIDB4RkZGQjAwMDggKSAvKiAoVURQKSBGdW5jdGlvbiBBZGRyZXNzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VRFBfTlVNICAgICAgICAgICAoIDB4RkZGQjAwMDAgKSAvKiAoVURQKSBGcmFtZSBOdW1iZXIgUmVnaXN0ZXIgKi8NCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICAgUkVHSVNURVIgQUREUkVTUyBERUZJTklUSU9OIEZPUiBBVDkxU0FNN1M2NA0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBTWVNDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1NZU0NfU1lTQ19WUlBNICAgICAgKDB4RkZGRkZENjApIC8vIChTWVNDKSBWb2x0YWdlIFJlZ3VsYXRvciBQb3dlciBNb2RlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBBSUMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQUlDX0lDQ1IgICAgICAgICAgICAoMHhGRkZGRjEyOCkgLy8gKEFJQykgSW50ZXJydXB0IENsZWFyIENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19JRUNSICAgICAgICAgICAgKDB4RkZGRkYxMjApIC8vIChBSUMpIEludGVycnVwdCBFbmFibGUgQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX1NNUiAgICAgICAgICAgICAoMHhGRkZGRjAwMCkgLy8gKEFJQykgU291cmNlIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19JU0NSICAgICAgICAgICAgKDB4RkZGRkYxMkMpIC8vIChBSUMpIEludGVycnVwdCBTZXQgQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0VPSUNSICAgICAgICAgICAoMHhGRkZGRjEzMCkgLy8gKEFJQykgRW5kIG9mIEludGVycnVwdCBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfRENSICAgICAgICAgICAgICgweEZGRkZGMTM4KSAvLyAoQUlDKSBEZWJ1ZyBDb250cm9sIFJlZ2lzdGVyIChQcm90ZWN0KQ0KKyNkZWZpbmUgQVQ5MUNfQUlDX0ZGRVIgICAgICAgICAgICAoMHhGRkZGRjE0MCkgLy8gKEFJQykgRmFzdCBGb3JjaW5nIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX1NWUiAgICAgICAgICAgICAoMHhGRkZGRjA4MCkgLy8gKEFJQykgU291cmNlIFZlY3RvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX1NQVSAgICAgICAgICAgICAoMHhGRkZGRjEzNCkgLy8gKEFJQykgU3B1cmlvdXMgVmVjdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfRkZEUiAgICAgICAgICAgICgweEZGRkZGMTQ0KSAvLyAoQUlDKSBGYXN0IEZvcmNpbmcgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0ZWUiAgICAgICAgICAgICAoMHhGRkZGRjEwNCkgLy8gKEFJQykgRklRIFZlY3RvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0ZGU1IgICAgICAgICAgICAoMHhGRkZGRjE0OCkgLy8gKEFJQykgRmFzdCBGb3JjaW5nIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0lNUiAgICAgICAgICAgICAoMHhGRkZGRjExMCkgLy8gKEFJQykgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19JU1IgICAgICAgICAgICAgKDB4RkZGRkYxMDgpIC8vIChBSUMpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19JVlIgICAgICAgICAgICAgKDB4RkZGRkYxMDApIC8vIChBSUMpIElSUSBWZWN0b3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19JRENSICAgICAgICAgICAgKDB4RkZGRkYxMjQpIC8vIChBSUMpIEludGVycnVwdCBEaXNhYmxlIENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19DSVNSICAgICAgICAgICAgKDB4RkZGRkYxMTQpIC8vIChBSUMpIENvcmUgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0lQUiAgICAgICAgICAgICAoMHhGRkZGRjEwQykgLy8gKEFJQykgSW50ZXJydXB0IFBlbmRpbmcgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIERCR1UgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfREJHVV9DMlIgICAgICAgICAgICAoMHhGRkZGRjI0NCkgLy8gKERCR1UpIENoaXAgSUQyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1RIUiAgICAgICAgICAgICgweEZGRkZGMjFDKSAvLyAoREJHVSkgVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9DU1IgICAgICAgICAgICAoMHhGRkZGRjIxNCkgLy8gKERCR1UpIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX0lEUiAgICAgICAgICAgICgweEZGRkZGMjBDKSAvLyAoREJHVSkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfTVIgICAgICAgICAgICAgKDB4RkZGRkYyMDQpIC8vIChEQkdVKSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX0ZOVFIgICAgICAgICAgICgweEZGRkZGMjQ4KSAvLyAoREJHVSkgRm9yY2UgTlRSU1QgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfQzFSICAgICAgICAgICAgKDB4RkZGRkYyNDApIC8vIChEQkdVKSBDaGlwIElEMSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9CUkdSICAgICAgICAgICAoMHhGRkZGRjIyMCkgLy8gKERCR1UpIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfUkhSICAgICAgICAgICAgKDB4RkZGRkYyMTgpIC8vIChEQkdVKSBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX0lNUiAgICAgICAgICAgICgweEZGRkZGMjEwKSAvLyAoREJHVSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfSUVSICAgICAgICAgICAgKDB4RkZGRkYyMDgpIC8vIChEQkdVKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX0NSICAgICAgICAgICAgICgweEZGRkZGMjAwKSAvLyAoREJHVSkgQ29udHJvbCBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX0RCR1UgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfREJHVV9UTkNSICAgICAgICAgICAoMHhGRkZGRjMxQykgLy8gKFBEQ19EQkdVKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfUk5DUiAgICAgICAgICAgKDB4RkZGRkYzMTQpIC8vIChQRENfREJHVSkgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfUFRDUiAgICAgICAgICAgKDB4RkZGRkYzMjApIC8vIChQRENfREJHVSkgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfUFRTUiAgICAgICAgICAgKDB4RkZGRkYzMjQpIC8vIChQRENfREJHVSkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9SQ1IgICAgICAgICAgICAoMHhGRkZGRjMwNCkgLy8gKFBEQ19EQkdVKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfVENSICAgICAgICAgICAgKDB4RkZGRkYzMEMpIC8vIChQRENfREJHVSkgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9SUFIgICAgICAgICAgICAoMHhGRkZGRjMwMCkgLy8gKFBEQ19EQkdVKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfVFBSICAgICAgICAgICAgKDB4RkZGRkYzMDgpIC8vIChQRENfREJHVSkgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9STlBSICAgICAgICAgICAoMHhGRkZGRjMxMCkgLy8gKFBEQ19EQkdVKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9UTlBSICAgICAgICAgICAoMHhGRkZGRjMxOCkgLy8gKFBEQ19EQkdVKSBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBJT0EgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUElPQV9JTVIgICAgICAgICAgICAoMHhGRkZGRjQ0OCkgLy8gKFBJT0EpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0lFUiAgICAgICAgICAgICgweEZGRkZGNDQwKSAvLyAoUElPQSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9PV0RSICAgICAgICAgICAoMHhGRkZGRjRBNCkgLy8gKFBJT0EpIE91dHB1dCBXcml0ZSBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0lTUiAgICAgICAgICAgICgweEZGRkZGNDRDKSAvLyAoUElPQSkgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9QUFVEUiAgICAgICAgICAoMHhGRkZGRjQ2MCkgLy8gKFBJT0EpIFB1bGwtdXAgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9NRFNSICAgICAgICAgICAoMHhGRkZGRjQ1OCkgLy8gKFBJT0EpIE11bHRpLWRyaXZlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfTURFUiAgICAgICAgICAgKDB4RkZGRkY0NTApIC8vIChQSU9BKSBNdWx0aS1kcml2ZXIgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX1BFUiAgICAgICAgICAgICgweEZGRkZGNDAwKSAvLyAoUElPQSkgUElPIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9QU1IgICAgICAgICAgICAoMHhGRkZGRjQwOCkgLy8gKFBJT0EpIFBJTyBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfT0VSICAgICAgICAgICAgKDB4RkZGRkY0MTApIC8vIChQSU9BKSBPdXRwdXQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0JTUiAgICAgICAgICAgICgweEZGRkZGNDc0KSAvLyAoUElPQSkgU2VsZWN0IEIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfUFBVRVIgICAgICAgICAgKDB4RkZGRkY0NjQpIC8vIChQSU9BKSBQdWxsLXVwIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9NRERSICAgICAgICAgICAoMHhGRkZGRjQ1NCkgLy8gKFBJT0EpIE11bHRpLWRyaXZlciBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX1BEUiAgICAgICAgICAgICgweEZGRkZGNDA0KSAvLyAoUElPQSkgUElPIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfT0RSICAgICAgICAgICAgKDB4RkZGRkY0MTQpIC8vIChQSU9BKSBPdXRwdXQgRGlzYWJsZSBSZWdpc3RlcnINCisjZGVmaW5lIEFUOTFDX1BJT0FfSUZEUiAgICAgICAgICAgKDB4RkZGRkY0MjQpIC8vIChQSU9BKSBJbnB1dCBGaWx0ZXIgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9BQlNSICAgICAgICAgICAoMHhGRkZGRjQ3OCkgLy8gKFBJT0EpIEFCIFNlbGVjdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfQVNSICAgICAgICAgICAgKDB4RkZGRkY0NzApIC8vIChQSU9BKSBTZWxlY3QgQSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9QUFVTUiAgICAgICAgICAoMHhGRkZGRjQ2OCkgLy8gKFBJT0EpIFBhZCBQdWxsLXVwIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9PRFNSICAgICAgICAgICAoMHhGRkZGRjQzOCkgLy8gKFBJT0EpIE91dHB1dCBEYXRhIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9TT0RSICAgICAgICAgICAoMHhGRkZGRjQzMCkgLy8gKFBJT0EpIFNldCBPdXRwdXQgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9JRlNSICAgICAgICAgICAoMHhGRkZGRjQyOCkgLy8gKFBJT0EpIElucHV0IEZpbHRlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfSUZFUiAgICAgICAgICAgKDB4RkZGRkY0MjApIC8vIChQSU9BKSBJbnB1dCBGaWx0ZXIgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX09TUiAgICAgICAgICAgICgweEZGRkZGNDE4KSAvLyAoUElPQSkgT3V0cHV0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9JRFIgICAgICAgICAgICAoMHhGRkZGRjQ0NCkgLy8gKFBJT0EpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX1BEU1IgICAgICAgICAgICgweEZGRkZGNDNDKSAvLyAoUElPQSkgUGluIERhdGEgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0NPRFIgICAgICAgICAgICgweEZGRkZGNDM0KSAvLyAoUElPQSkgQ2xlYXIgT3V0cHV0IERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfT1dTUiAgICAgICAgICAgKDB4RkZGRkY0QTgpIC8vIChQSU9BKSBPdXRwdXQgV3JpdGUgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX09XRVIgICAgICAgICAgICgweEZGRkZGNEEwKSAvLyAoUElPQSkgT3V0cHV0IFdyaXRlIEVuYWJsZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0tHUiBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19DS0dSX1BMTFIgICAgICAgICAgICgweEZGRkZGQzJDKSAvLyAoQ0tHUikgUExMIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DS0dSX01DRlIgICAgICAgICAgICgweEZGRkZGQzI0KSAvLyAoQ0tHUikgTWFpbiBDbG9jayAgRnJlcXVlbmN5IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DS0dSX01PUiAgICAgICAgICAgICgweEZGRkZGQzIwKSAvLyAoQ0tHUikgTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQTUMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUE1DX1NDU1IgICAgICAgICAgICAoMHhGRkZGRkMwOCkgLy8gKFBNQykgU3lzdGVtIENsb2NrIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX1NDRVIgICAgICAgICAgICAoMHhGRkZGRkMwMCkgLy8gKFBNQykgU3lzdGVtIENsb2NrIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX0lNUiAgICAgICAgICAgICAoMHhGRkZGRkM2QykgLy8gKFBNQykgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19JRFIgICAgICAgICAgICAgKDB4RkZGRkZDNjQpIC8vIChQTUMpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfUENEUiAgICAgICAgICAgICgweEZGRkZGQzE0KSAvLyAoUE1DKSBQZXJpcGhlcmFsIENsb2NrIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19TQ0RSICAgICAgICAgICAgKDB4RkZGRkZDMDQpIC8vIChQTUMpIFN5c3RlbSBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfU1IgICAgICAgICAgICAgICgweEZGRkZGQzY4KSAvLyAoUE1DKSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19JRVIgICAgICAgICAgICAgKDB4RkZGRkZDNjApIC8vIChQTUMpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19NQ0tSICAgICAgICAgICAgKDB4RkZGRkZDMzApIC8vIChQTUMpIE1hc3RlciBDbG9jayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX01PUiAgICAgICAgICAgICAoMHhGRkZGRkMyMCkgLy8gKFBNQykgTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfUENFUiAgICAgICAgICAgICgweEZGRkZGQzEwKSAvLyAoUE1DKSBQZXJpcGhlcmFsIENsb2NrIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDU1IgICAgICAgICAgICAoMHhGRkZGRkMxOCkgLy8gKFBNQykgUGVyaXBoZXJhbCBDbG9jayBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19QTExSICAgICAgICAgICAgKDB4RkZGRkZDMkMpIC8vIChQTUMpIFBMTCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX01DRlIgICAgICAgICAgICAoMHhGRkZGRkMyNCkgLy8gKFBNQykgTWFpbiBDbG9jayAgRnJlcXVlbmN5IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfUENLUiAgICAgICAgICAgICgweEZGRkZGQzQwKSAvLyAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFJTVEMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19SU1IgICAgICAgICAgICAoMHhGRkZGRkQwNCkgLy8gKFJTVEMpIFJlc2V0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19STVIgICAgICAgICAgICAoMHhGRkZGRkQwOCkgLy8gKFJTVEMpIFJlc2V0IE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1JTVENfUkNSICAgICAgICAgICAgKDB4RkZGRkZEMDApIC8vIChSU1RDKSBSZXNldCBDb250cm9sIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBSVFRDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1JUVENfUlRTUiAgICAgICAgICAgKDB4RkZGRkZEMkMpIC8vIChSVFRDKSBSZWFsLXRpbWUgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19SVFRDX1JUQVIgICAgICAgICAgICgweEZGRkZGRDI0KSAvLyAoUlRUQykgUmVhbC10aW1lIEFsYXJtIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19SVFRDX1JUVlIgICAgICAgICAgICgweEZGRkZGRDI4KSAvLyAoUlRUQykgUmVhbC10aW1lIFZhbHVlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19SVFRDX1JUTVIgICAgICAgICAgICgweEZGRkZGRDIwKSAvLyAoUlRUQykgUmVhbC10aW1lIE1vZGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBJVEMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUElUQ19QSUlSICAgICAgICAgICAoMHhGRkZGRkQzQykgLy8gKFBJVEMpIFBlcmlvZCBJbnRlcnZhbCBJbWFnZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElUQ19QSVNSICAgICAgICAgICAoMHhGRkZGRkQzNCkgLy8gKFBJVEMpIFBlcmlvZCBJbnRlcnZhbCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJVENfUElWUiAgICAgICAgICAgKDB4RkZGRkZEMzgpIC8vIChQSVRDKSBQZXJpb2QgSW50ZXJ2YWwgVmFsdWUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJVENfUElNUiAgICAgICAgICAgKDB4RkZGRkZEMzApIC8vIChQSVRDKSBQZXJpb2QgSW50ZXJ2YWwgTW9kZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgV0RUQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19XRFRDX1dETVIgICAgICAgICAgICgweEZGRkZGRDQ0KSAvLyAoV0RUQykgV2F0Y2hkb2cgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRFNSICAgICAgICAgICAoMHhGRkZGRkQ0OCkgLy8gKFdEVEMpIFdhdGNoZG9nIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRENSICAgICAgICAgICAoMHhGRkZGRkQ0MCkgLy8gKFdEVEMpIFdhdGNoZG9nIENvbnRyb2wgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIE1DIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX01DX0ZDUiAgICAgICAgICAgICAgKDB4RkZGRkZGNjQpIC8vIChNQykgTUMgRmxhc2ggQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfTUNfQVNSICAgICAgICAgICAgICAoMHhGRkZGRkYwNCkgLy8gKE1DKSBNQyBBYm9ydCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX01DX0ZTUiAgICAgICAgICAgICAgKDB4RkZGRkZGNjgpIC8vIChNQykgTUMgRmxhc2ggU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19NQ19GTVIgICAgICAgICAgICAgICgweEZGRkZGRjYwKSAvLyAoTUMpIE1DIEZsYXNoIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX01DX0FBU1IgICAgICAgICAgICAgKDB4RkZGRkZGMDgpIC8vIChNQykgTUMgQWJvcnQgQWRkcmVzcyBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX01DX1JDUiAgICAgICAgICAgICAgKDB4RkZGRkZGMDApIC8vIChNQykgTUMgUmVtYXAgQ29udHJvbCBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX1NQSSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19TUElfUFRDUiAgICAgICAgICAgICgweEZGRkUwMTIwKSAvLyAoUERDX1NQSSkgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSV9UTlBSICAgICAgICAgICAgKDB4RkZGRTAxMTgpIC8vIChQRENfU1BJKSBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSV9STlBSICAgICAgICAgICAgKDB4RkZGRTAxMTApIC8vIChQRENfU1BJKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJX1RQUiAgICAgICAgICAgICAoMHhGRkZFMDEwOCkgLy8gKFBEQ19TUEkpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSV9SUFIgICAgICAgICAgICAgKDB4RkZGRTAxMDApIC8vIChQRENfU1BJKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSV9QVFNSICAgICAgICAgICAgKDB4RkZGRTAxMjQpIC8vIChQRENfU1BJKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUElfVE5DUiAgICAgICAgICAgICgweEZGRkUwMTFDKSAvLyAoUERDX1NQSSkgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUElfUk5DUiAgICAgICAgICAgICgweEZGRkUwMTE0KSAvLyAoUERDX1NQSSkgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSV9UQ1IgICAgICAgICAgICAgKDB4RkZGRTAxMEMpIC8vIChQRENfU1BJKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUElfUkNSICAgICAgICAgICAgICgweEZGRkUwMTA0KSAvLyAoUERDX1NQSSkgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBTUEkgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfU1BJX0NTUiAgICAgICAgICAgICAoMHhGRkZFMDAzMCkgLy8gKFNQSSkgQ2hpcCBTZWxlY3QgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSV9JRFIgICAgICAgICAgICAgKDB4RkZGRTAwMTgpIC8vIChTUEkpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUElfU1IgICAgICAgICAgICAgICgweEZGRkUwMDEwKSAvLyAoU1BJKSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSV9SRFIgICAgICAgICAgICAgKDB4RkZGRTAwMDgpIC8vIChTUEkpIFJlY2VpdmUgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJX0NSICAgICAgICAgICAgICAoMHhGRkZFMDAwMCkgLy8gKFNQSSkgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJX0lNUiAgICAgICAgICAgICAoMHhGRkZFMDAxQykgLy8gKFNQSSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSV9JRVIgICAgICAgICAgICAgKDB4RkZGRTAwMTQpIC8vIChTUEkpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSV9URFIgICAgICAgICAgICAgKDB4RkZGRTAwMEMpIC8vIChTUEkpIFRyYW5zbWl0IERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSV9NUiAgICAgICAgICAgICAgKDB4RkZGRTAwMDQpIC8vIChTUEkpIE1vZGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19BREMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQURDX1BUQ1IgICAgICAgICAgICAoMHhGRkZEODEyMCkgLy8gKFBEQ19BREMpIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfVE5QUiAgICAgICAgICAgICgweEZGRkQ4MTE4KSAvLyAoUERDX0FEQykgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfUk5QUiAgICAgICAgICAgICgweEZGRkQ4MTEwKSAvLyAoUERDX0FEQykgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19UUFIgICAgICAgICAgICAgKDB4RkZGRDgxMDgpIC8vIChQRENfQURDKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfUlBSICAgICAgICAgICAgICgweEZGRkQ4MTAwKSAvLyAoUERDX0FEQykgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfUFRTUiAgICAgICAgICAgICgweEZGRkQ4MTI0KSAvLyAoUERDX0FEQykgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1ROQ1IgICAgICAgICAgICAoMHhGRkZEODExQykgLy8gKFBEQ19BREMpIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1JOQ1IgICAgICAgICAgICAoMHhGRkZEODExNCkgLy8gKFBEQ19BREMpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfVENSICAgICAgICAgICAgICgweEZGRkQ4MTBDKSAvLyAoUERDX0FEQykgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1JDUiAgICAgICAgICAgICAoMHhGRkZEODEwNCkgLy8gKFBEQ19BREMpIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQURDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0FEQ19JTVIgICAgICAgICAgICAgKDB4RkZGRDgwMkMpIC8vIChBREMpIEFEQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX0NEUjQgICAgICAgICAgICAoMHhGRkZEODA0MCkgLy8gKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA0DQorI2RlZmluZSBBVDkxQ19BRENfQ0RSMiAgICAgICAgICAgICgweEZGRkQ4MDM4KSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDINCisjZGVmaW5lIEFUOTFDX0FEQ19DRFIwICAgICAgICAgICAgKDB4RkZGRDgwMzApIC8vIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMA0KKyNkZWZpbmUgQVQ5MUNfQURDX0NEUjcgICAgICAgICAgICAoMHhGRkZEODA0QykgLy8gKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA3DQorI2RlZmluZSBBVDkxQ19BRENfQ0RSMSAgICAgICAgICAgICgweEZGRkQ4MDM0KSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDENCisjZGVmaW5lIEFUOTFDX0FEQ19DRFIzICAgICAgICAgICAgKDB4RkZGRDgwM0MpIC8vIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMw0KKyNkZWZpbmUgQVQ5MUNfQURDX0NEUjUgICAgICAgICAgICAoMHhGRkZEODA0NCkgLy8gKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA1DQorI2RlZmluZSBBVDkxQ19BRENfTVIgICAgICAgICAgICAgICgweEZGRkQ4MDA0KSAvLyAoQURDKSBBREMgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX0NEUjYgICAgICAgICAgICAoMHhGRkZEODA0OCkgLy8gKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA2DQorI2RlZmluZSBBVDkxQ19BRENfQ1IgICAgICAgICAgICAgICgweEZGRkQ4MDAwKSAvLyAoQURDKSBBREMgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX0NIRVIgICAgICAgICAgICAoMHhGRkZEODAxMCkgLy8gKEFEQykgQURDIENoYW5uZWwgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfQ0hTUiAgICAgICAgICAgICgweEZGRkQ4MDE4KSAvLyAoQURDKSBBREMgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19JRVIgICAgICAgICAgICAgKDB4RkZGRDgwMjQpIC8vIChBREMpIEFEQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfU1IgICAgICAgICAgICAgICgweEZGRkQ4MDFDKSAvLyAoQURDKSBBREMgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfQ0hEUiAgICAgICAgICAgICgweEZGRkQ4MDE0KSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfSURSICAgICAgICAgICAgICgweEZGRkQ4MDI4KSAvLyAoQURDKSBBREMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19MQ0RSICAgICAgICAgICAgKDB4RkZGRDgwMjApIC8vIChBREMpIEFEQyBMYXN0IENvbnZlcnRlZCBEYXRhIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfU1NDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1NTQ19QVENSICAgICAgICAgICAgKDB4RkZGRDQxMjApIC8vIChQRENfU1NDKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1ROUFIgICAgICAgICAgICAoMHhGRkZENDExOCkgLy8gKFBEQ19TU0MpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JOUFIgICAgICAgICAgICAoMHhGRkZENDExMCkgLy8gKFBEQ19TU0MpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfVFBSICAgICAgICAgICAgICgweEZGRkQ0MTA4KSAvLyAoUERDX1NTQykgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JQUiAgICAgICAgICAgICAoMHhGRkZENDEwMCkgLy8gKFBEQ19TU0MpIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1BUU1IgICAgICAgICAgICAoMHhGRkZENDEyNCkgLy8gKFBEQ19TU0MpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19UTkNSICAgICAgICAgICAgKDB4RkZGRDQxMUMpIC8vIChQRENfU1NDKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19STkNSICAgICAgICAgICAgKDB4RkZGRDQxMTQpIC8vIChQRENfU1NDKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RDUiAgICAgICAgICAgICAoMHhGRkZENDEwQykgLy8gKFBEQ19TU0MpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19SQ1IgICAgICAgICAgICAgKDB4RkZGRDQxMDQpIC8vIChQRENfU1NDKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFNTQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19TU0NfUkZNUiAgICAgICAgICAgICgweEZGRkQ0MDE0KSAvLyAoU1NDKSBSZWNlaXZlIEZyYW1lIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19DTVIgICAgICAgICAgICAgKDB4RkZGRDQwMDQpIC8vIChTU0MpIENsb2NrIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19JRFIgICAgICAgICAgICAgKDB4RkZGRDQwNDgpIC8vIChTU0MpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfU1IgICAgICAgICAgICAgICgweEZGRkQ0MDQwKSAvLyAoU1NDKSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19SQzBSICAgICAgICAgICAgKDB4RkZGRDQwMzgpIC8vIChTU0MpIFJlY2VpdmUgQ29tcGFyZSAwIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUlNIUiAgICAgICAgICAgICgweEZGRkQ0MDMwKSAvLyAoU1NDKSBSZWNlaXZlIFN5bmMgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JIUiAgICAgICAgICAgICAoMHhGRkZENDAyMCkgLy8gKFNTQykgUmVjZWl2ZSBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfVENNUiAgICAgICAgICAgICgweEZGRkQ0MDE4KSAvLyAoU1NDKSBUcmFuc21pdCBDbG9jayBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUkNNUiAgICAgICAgICAgICgweEZGRkQ0MDEwKSAvLyAoU1NDKSBSZWNlaXZlIENsb2NrIE1vZGVSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX0NSICAgICAgICAgICAgICAoMHhGRkZENDAwMCkgLy8gKFNTQykgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX0lNUiAgICAgICAgICAgICAoMHhGRkZENDA0QykgLy8gKFNTQykgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19JRVIgICAgICAgICAgICAgKDB4RkZGRDQwNDQpIC8vIChTU0MpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19SQzFSICAgICAgICAgICAgKDB4RkZGRDQwM0MpIC8vIChTU0MpIFJlY2VpdmUgQ29tcGFyZSAxIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfVFNIUiAgICAgICAgICAgICgweEZGRkQ0MDM0KSAvLyAoU1NDKSBUcmFuc21pdCBTeW5jIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19USFIgICAgICAgICAgICAgKDB4RkZGRDQwMjQpIC8vIChTU0MpIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19URk1SICAgICAgICAgICAgKDB4RkZGRDQwMUMpIC8vIChTU0MpIFRyYW5zbWl0IEZyYW1lIE1vZGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19VUzEgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVVMxX1BUU1IgICAgICAgICAgICAoMHhGRkZDNDEyNCkgLy8gKFBEQ19VUzEpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9UTkNSICAgICAgICAgICAgKDB4RkZGQzQxMUMpIC8vIChQRENfVVMxKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9STkNSICAgICAgICAgICAgKDB4RkZGQzQxMTQpIC8vIChQRENfVVMxKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1RDUiAgICAgICAgICAgICAoMHhGRkZDNDEwQykgLy8gKFBEQ19VUzEpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9SQ1IgICAgICAgICAgICAgKDB4RkZGQzQxMDQpIC8vIChQRENfVVMxKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9QVENSICAgICAgICAgICAgKDB4RkZGQzQxMjApIC8vIChQRENfVVMxKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1ROUFIgICAgICAgICAgICAoMHhGRkZDNDExOCkgLy8gKFBEQ19VUzEpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1JOUFIgICAgICAgICAgICAoMHhGRkZDNDExMCkgLy8gKFBEQ19VUzEpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfVFBSICAgICAgICAgICAgICgweEZGRkM0MTA4KSAvLyAoUERDX1VTMSkgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1JQUiAgICAgICAgICAgICAoMHhGRkZDNDEwMCkgLy8gKFBEQ19VUzEpIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVVMxIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1VTMV9YWFIgICAgICAgICAgICAgKDB4RkZGQzQwNDgpIC8vIChVUzEpIFhPTl9YT0ZGIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfUkhSICAgICAgICAgICAgICgweEZGRkM0MDE4KSAvLyAoVVMxKSBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfSU1SICAgICAgICAgICAgICgweEZGRkM0MDEwKSAvLyAoVVMxKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX0lFUiAgICAgICAgICAgICAoMHhGRkZDNDAwOCkgLy8gKFVTMSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX0NSICAgICAgICAgICAgICAoMHhGRkZDNDAwMCkgLy8gKFVTMSkgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1JUT1IgICAgICAgICAgICAoMHhGRkZDNDAyNCkgLy8gKFVTMSkgUmVjZWl2ZXIgVGltZS1vdXQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9USFIgICAgICAgICAgICAgKDB4RkZGQzQwMUMpIC8vIChVUzEpIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9DU1IgICAgICAgICAgICAgKDB4RkZGQzQwMTQpIC8vIChVUzEpIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfSURSICAgICAgICAgICAgICgweEZGRkM0MDBDKSAvLyAoVVMxKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX0ZJREkgICAgICAgICAgICAoMHhGRkZDNDA0MCkgLy8gKFVTMSkgRklfRElfUmF0aW8gUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9CUkdSICAgICAgICAgICAgKDB4RkZGQzQwMjApIC8vIChVUzEpIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9UVEdSICAgICAgICAgICAgKDB4RkZGQzQwMjgpIC8vIChVUzEpIFRyYW5zbWl0dGVyIFRpbWUtZ3VhcmQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9JRiAgICAgICAgICAgICAgKDB4RkZGQzQwNEMpIC8vIChVUzEpIElSREFfRklMVEVSIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfTkVSICAgICAgICAgICAgICgweEZGRkM0MDQ0KSAvLyAoVVMxKSBOYiBFcnJvcnMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9NUiAgICAgICAgICAgICAgKDB4RkZGQzQwMDQpIC8vIChVUzEpIE1vZGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19VUzAgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVVMwX1BUQ1IgICAgICAgICAgICAoMHhGRkZDMDEyMCkgLy8gKFBEQ19VUzApIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfVE5QUiAgICAgICAgICAgICgweEZGRkMwMTE4KSAvLyAoUERDX1VTMCkgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfUk5QUiAgICAgICAgICAgICgweEZGRkMwMTEwKSAvLyAoUERDX1VTMCkgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9UUFIgICAgICAgICAgICAgKDB4RkZGQzAxMDgpIC8vIChQRENfVVMwKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfUlBSICAgICAgICAgICAgICgweEZGRkMwMTAwKSAvLyAoUERDX1VTMCkgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfUFRTUiAgICAgICAgICAgICgweEZGRkMwMTI0KSAvLyAoUERDX1VTMCkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1ROQ1IgICAgICAgICAgICAoMHhGRkZDMDExQykgLy8gKFBEQ19VUzApIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1JOQ1IgICAgICAgICAgICAoMHhGRkZDMDExNCkgLy8gKFBEQ19VUzApIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfVENSICAgICAgICAgICAgICgweEZGRkMwMTBDKSAvLyAoUERDX1VTMCkgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1JDUiAgICAgICAgICAgICAoMHhGRkZDMDEwNCkgLy8gKFBEQ19VUzApIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVVMwIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1VTMF9UVEdSICAgICAgICAgICAgKDB4RkZGQzAwMjgpIC8vIChVUzApIFRyYW5zbWl0dGVyIFRpbWUtZ3VhcmQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9CUkdSICAgICAgICAgICAgKDB4RkZGQzAwMjApIC8vIChVUzApIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9SSFIgICAgICAgICAgICAgKDB4RkZGQzAwMTgpIC8vIChVUzApIFJlY2VpdmVyIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9JTVIgICAgICAgICAgICAgKDB4RkZGQzAwMTApIC8vIChVUzApIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfTkVSICAgICAgICAgICAgICgweEZGRkMwMDQ0KSAvLyAoVVMwKSBOYiBFcnJvcnMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9SVE9SICAgICAgICAgICAgKDB4RkZGQzAwMjQpIC8vIChVUzApIFJlY2VpdmVyIFRpbWUtb3V0IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfWFhSICAgICAgICAgICAgICgweEZGRkMwMDQ4KSAvLyAoVVMwKSBYT05fWE9GRiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX0ZJREkgICAgICAgICAgICAoMHhGRkZDMDA0MCkgLy8gKFVTMCkgRklfRElfUmF0aW8gUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9DUiAgICAgICAgICAgICAgKDB4RkZGQzAwMDApIC8vIChVUzApIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9JRVIgICAgICAgICAgICAgKDB4RkZGQzAwMDgpIC8vIChVUzApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9JRiAgICAgICAgICAgICAgKDB4RkZGQzAwNEMpIC8vIChVUzApIElSREFfRklMVEVSIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfTVIgICAgICAgICAgICAgICgweEZGRkMwMDA0KSAvLyAoVVMwKSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfSURSICAgICAgICAgICAgICgweEZGRkMwMDBDKSAvLyAoVVMwKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX0NTUiAgICAgICAgICAgICAoMHhGRkZDMDAxNCkgLy8gKFVTMCkgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9USFIgICAgICAgICAgICAgKDB4RkZGQzAwMUMpIC8vIChVUzApIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRXSSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19UV0lfUkhSICAgICAgICAgICAgICgweEZGRkI4MDMwKSAvLyAoVFdJKSBSZWNlaXZlIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9JRFIgICAgICAgICAgICAgKDB4RkZGQjgwMjgpIC8vIChUV0kpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UV0lfU1IgICAgICAgICAgICAgICgweEZGRkI4MDIwKSAvLyAoVFdJKSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9DV0dSICAgICAgICAgICAgKDB4RkZGQjgwMTApIC8vIChUV0kpIENsb2NrIFdhdmVmb3JtIEdlbmVyYXRvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX1NNUiAgICAgICAgICAgICAoMHhGRkZCODAwOCkgLy8gKFRXSSkgU2xhdmUgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX0NSICAgICAgICAgICAgICAoMHhGRkZCODAwMCkgLy8gKFRXSSkgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX1RIUiAgICAgICAgICAgICAoMHhGRkZCODAzNCkgLy8gKFRXSSkgVHJhbnNtaXQgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX0lNUiAgICAgICAgICAgICAoMHhGRkZCODAyQykgLy8gKFRXSSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9JRVIgICAgICAgICAgICAgKDB4RkZGQjgwMjQpIC8vIChUV0kpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9JQURSICAgICAgICAgICAgKDB4RkZGQjgwMEMpIC8vIChUV0kpIEludGVybmFsIEFkZHJlc3MgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9NTVIgICAgICAgICAgICAgKDB4RkZGQjgwMDQpIC8vIChUV0kpIE1hc3RlciBNb2RlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBUQzIgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVEMyX0lNUiAgICAgICAgICAgICAoMHhGRkZBMDBBQykgLy8gKFRDMikgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMl9JRVIgICAgICAgICAgICAgKDB4RkZGQTAwQTQpIC8vIChUQzIpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMl9SQyAgICAgICAgICAgICAgKDB4RkZGQTAwOUMpIC8vIChUQzIpIFJlZ2lzdGVyIEMNCisjZGVmaW5lIEFUOTFDX1RDMl9SQSAgICAgICAgICAgICAgKDB4RkZGQTAwOTQpIC8vIChUQzIpIFJlZ2lzdGVyIEENCisjZGVmaW5lIEFUOTFDX1RDMl9DTVIgICAgICAgICAgICAgKDB4RkZGQTAwODQpIC8vIChUQzIpIENoYW5uZWwgTW9kZSBSZWdpc3RlciAoQ2FwdHVyZSBNb2RlIC8gV2F2ZWZvcm0gTW9kZSkNCisjZGVmaW5lIEFUOTFDX1RDMl9JRFIgICAgICAgICAgICAgKDB4RkZGQTAwQTgpIC8vIChUQzIpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzJfU1IgICAgICAgICAgICAgICgweEZGRkEwMEEwKSAvLyAoVEMyKSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMl9SQiAgICAgICAgICAgICAgKDB4RkZGQTAwOTgpIC8vIChUQzIpIFJlZ2lzdGVyIEINCisjZGVmaW5lIEFUOTFDX1RDMl9DViAgICAgICAgICAgICAgKDB4RkZGQTAwOTApIC8vIChUQzIpIENvdW50ZXIgVmFsdWUNCisjZGVmaW5lIEFUOTFDX1RDMl9DQ1IgICAgICAgICAgICAgKDB4RkZGQTAwODApIC8vIChUQzIpIENoYW5uZWwgQ29udHJvbCBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVEMxIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1RDMV9JTVIgICAgICAgICAgICAgKDB4RkZGQTAwNkMpIC8vIChUQzEpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzFfSUVSICAgICAgICAgICAgICgweEZGRkEwMDY0KSAvLyAoVEMxKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzFfUkMgICAgICAgICAgICAgICgweEZGRkEwMDVDKSAvLyAoVEMxKSBSZWdpc3RlciBDDQorI2RlZmluZSBBVDkxQ19UQzFfUkEgICAgICAgICAgICAgICgweEZGRkEwMDU0KSAvLyAoVEMxKSBSZWdpc3RlciBBDQorI2RlZmluZSBBVDkxQ19UQzFfQ01SICAgICAgICAgICAgICgweEZGRkEwMDQ0KSAvLyAoVEMxKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXIgKENhcHR1cmUgTW9kZSAvIFdhdmVmb3JtIE1vZGUpDQorI2RlZmluZSBBVDkxQ19UQzFfSURSICAgICAgICAgICAgICgweEZGRkEwMDY4KSAvLyAoVEMxKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMxX1NSICAgICAgICAgICAgICAoMHhGRkZBMDA2MCkgLy8gKFRDMSkgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzFfUkIgICAgICAgICAgICAgICgweEZGRkEwMDU4KSAvLyAoVEMxKSBSZWdpc3RlciBCDQorI2RlZmluZSBBVDkxQ19UQzFfQ1YgICAgICAgICAgICAgICgweEZGRkEwMDUwKSAvLyAoVEMxKSBDb3VudGVyIFZhbHVlDQorI2RlZmluZSBBVDkxQ19UQzFfQ0NSICAgICAgICAgICAgICgweEZGRkEwMDQwKSAvLyAoVEMxKSBDaGFubmVsIENvbnRyb2wgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRDMCBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19UQzBfSU1SICAgICAgICAgICAgICgweEZGRkEwMDJDKSAvLyAoVEMwKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMwX0lFUiAgICAgICAgICAgICAoMHhGRkZBMDAyNCkgLy8gKFRDMCkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMwX1JDICAgICAgICAgICAgICAoMHhGRkZBMDAxQykgLy8gKFRDMCkgUmVnaXN0ZXIgQw0KKyNkZWZpbmUgQVQ5MUNfVEMwX1JBICAgICAgICAgICAgICAoMHhGRkZBMDAxNCkgLy8gKFRDMCkgUmVnaXN0ZXIgQQ0KKyNkZWZpbmUgQVQ5MUNfVEMwX0NNUiAgICAgICAgICAgICAoMHhGRkZBMDAwNCkgLy8gKFRDMCkgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyIChDYXB0dXJlIE1vZGUgLyBXYXZlZm9ybSBNb2RlKQ0KKyNkZWZpbmUgQVQ5MUNfVEMwX0lEUiAgICAgICAgICAgICAoMHhGRkZBMDAyOCkgLy8gKFRDMCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMF9TUiAgICAgICAgICAgICAgKDB4RkZGQTAwMjApIC8vIChUQzApIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMwX1JCICAgICAgICAgICAgICAoMHhGRkZBMDAxOCkgLy8gKFRDMCkgUmVnaXN0ZXIgQg0KKyNkZWZpbmUgQVQ5MUNfVEMwX0NWICAgICAgICAgICAgICAoMHhGRkZBMDAxMCkgLy8gKFRDMCkgQ291bnRlciBWYWx1ZQ0KKyNkZWZpbmUgQVQ5MUNfVEMwX0NDUiAgICAgICAgICAgICAoMHhGRkZBMDAwMCkgLy8gKFRDMCkgQ2hhbm5lbCBDb250cm9sIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBUQ0IgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVENCX0JNUiAgICAgICAgICAgICAoMHhGRkZBMDBDNCkgLy8gKFRDQikgVEMgQmxvY2sgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVENCX0JDUiAgICAgICAgICAgICAoMHhGRkZBMDBDMCkgLy8gKFRDQikgVEMgQmxvY2sgQ29udHJvbCBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUFdNQ19DSDMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQ0gzX0NVUERSICAgICAgICAgICAoMHhGRkZDQzI3MCkgLy8gKFBXTUNfQ0gzKSBDaGFubmVsIFVwZGF0ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0gzX0NQUkRSICAgICAgICAgICAoMHhGRkZDQzI2OCkgLy8gKFBXTUNfQ0gzKSBDaGFubmVsIFBlcmlvZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0gzX0NNUiAgICAgICAgICAgICAoMHhGRkZDQzI2MCkgLy8gKFBXTUNfQ0gzKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NIM19SZXNlcnZlZCAgICAgICAgKDB4RkZGQ0MyNzQpIC8vIChQV01DX0NIMykgUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0NIM19DQ05UUiAgICAgICAgICAgKDB4RkZGQ0MyNkMpIC8vIChQV01DX0NIMykgQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DSDNfQ0RUWVIgICAgICAgICAgICgweEZGRkNDMjY0KSAvLyAoUFdNQ19DSDMpIENoYW5uZWwgRHV0eSBDeWNsZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUFdNQ19DSDIgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQ0gyX0NVUERSICAgICAgICAgICAoMHhGRkZDQzI1MCkgLy8gKFBXTUNfQ0gyKSBDaGFubmVsIFVwZGF0ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0gyX0NQUkRSICAgICAgICAgICAoMHhGRkZDQzI0OCkgLy8gKFBXTUNfQ0gyKSBDaGFubmVsIFBlcmlvZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0gyX0NNUiAgICAgICAgICAgICAoMHhGRkZDQzI0MCkgLy8gKFBXTUNfQ0gyKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NIMl9SZXNlcnZlZCAgICAgICAgKDB4RkZGQ0MyNTQpIC8vIChQV01DX0NIMikgUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0NIMl9DQ05UUiAgICAgICAgICAgKDB4RkZGQ0MyNEMpIC8vIChQV01DX0NIMikgQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DSDJfQ0RUWVIgICAgICAgICAgICgweEZGRkNDMjQ0KSAvLyAoUFdNQ19DSDIpIENoYW5uZWwgRHV0eSBDeWNsZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUFdNQ19DSDEgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQ0gxX0NVUERSICAgICAgICAgICAoMHhGRkZDQzIzMCkgLy8gKFBXTUNfQ0gxKSBDaGFubmVsIFVwZGF0ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0gxX0NQUkRSICAgICAgICAgICAoMHhGRkZDQzIyOCkgLy8gKFBXTUNfQ0gxKSBDaGFubmVsIFBlcmlvZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0gxX0NNUiAgICAgICAgICAgICAoMHhGRkZDQzIyMCkgLy8gKFBXTUNfQ0gxKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NIMV9SZXNlcnZlZCAgICAgICAgKDB4RkZGQ0MyMzQpIC8vIChQV01DX0NIMSkgUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0NIMV9DQ05UUiAgICAgICAgICAgKDB4RkZGQ0MyMkMpIC8vIChQV01DX0NIMSkgQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DSDFfQ0RUWVIgICAgICAgICAgICgweEZGRkNDMjI0KSAvLyAoUFdNQ19DSDEpIENoYW5uZWwgRHV0eSBDeWNsZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUFdNQ19DSDAgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQ0gwX0NVUERSICAgICAgICAgICAoMHhGRkZDQzIxMCkgLy8gKFBXTUNfQ0gwKSBDaGFubmVsIFVwZGF0ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0gwX0NQUkRSICAgICAgICAgICAoMHhGRkZDQzIwOCkgLy8gKFBXTUNfQ0gwKSBDaGFubmVsIFBlcmlvZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0gwX0NNUiAgICAgICAgICAgICAoMHhGRkZDQzIwMCkgLy8gKFBXTUNfQ0gwKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NIMF9SZXNlcnZlZCAgICAgICAgKDB4RkZGQ0MyMTQpIC8vIChQV01DX0NIMCkgUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0NIMF9DQ05UUiAgICAgICAgICAgKDB4RkZGQ0MyMEMpIC8vIChQV01DX0NIMCkgQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DSDBfQ0RUWVIgICAgICAgICAgICgweEZGRkNDMjA0KSAvLyAoUFdNQ19DSDApIENoYW5uZWwgRHV0eSBDeWNsZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUFdNQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19QV01DX1ZSICAgICAgICAgICAgICgweEZGRkNDMEZDKSAvLyAoUFdNQykgUFdNQyBWZXJzaW9uIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0lTUiAgICAgICAgICAgICgweEZGRkNDMDFDKSAvLyAoUFdNQykgUFdNQyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0lEUiAgICAgICAgICAgICgweEZGRkNDMDE0KSAvLyAoUFdNQykgUFdNQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19TUiAgICAgICAgICAgICAoMHhGRkZDQzAwQykgLy8gKFBXTUMpIFBXTUMgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0VOQSAgICAgICAgICAgICgweEZGRkNDMDA0KSAvLyAoUFdNQykgUFdNQyBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfSU1SICAgICAgICAgICAgKDB4RkZGQ0MwMTgpIC8vIChQV01DKSBQV01DIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX01SICAgICAgICAgICAgICgweEZGRkNDMDAwKSAvLyAoUFdNQykgUFdNQyBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0RJUyAgICAgICAgICAgICgweEZGRkNDMDA4KSAvLyAoUFdNQykgUFdNQyBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0lFUiAgICAgICAgICAgICgweEZGRkNDMDEwKSAvLyAoUFdNQykgUFdNQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBVRFAgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVURQX0lTUiAgICAgICAgICAgICAoMHhGRkZCMDAxQykgLy8gKFVEUCkgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVURQX0lEUiAgICAgICAgICAgICAoMHhGRkZCMDAxNCkgLy8gKFVEUCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9HTEJTVEFURSAgICAgICAgKDB4RkZGQjAwMDQpIC8vIChVRFApIEdsb2JhbCBTdGF0ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZEUiAgICAgICAgICAgICAoMHhGRkZCMDA1MCkgLy8gKFVEUCkgRW5kcG9pbnQgRklGTyBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfQ1NSICAgICAgICAgICAgICgweEZGRkIwMDMwKSAvLyAoVURQKSBFbmRwb2ludCBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9SU1RFUCAgICAgICAgICAgKDB4RkZGQjAwMjgpIC8vIChVRFApIFJlc2V0IEVuZHBvaW50IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfSUNSICAgICAgICAgICAgICgweEZGRkIwMDIwKSAvLyAoVURQKSBJbnRlcnJ1cHQgQ2xlYXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9JTVIgICAgICAgICAgICAgKDB4RkZGQjAwMTgpIC8vIChVRFApIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfSUVSICAgICAgICAgICAgICgweEZGRkIwMDEwKSAvLyAoVURQKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfRkFERFIgICAgICAgICAgICgweEZGRkIwMDA4KSAvLyAoVURQKSBGdW5jdGlvbiBBZGRyZXNzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfTlVNICAgICAgICAgICAgICgweEZGRkIwMDAwKSAvLyAoVURQKSBGcmFtZSBOdW1iZXIgUmVnaXN0ZXINCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICAgUElPIERFRklOSVRJT05TIEZPUiBBVDkxU0FNN1M2NCAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEEwICAgICAgICggMSA8PCAwICkgICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTAgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMF9QV00wICAgICAgKCBBVDkxQ19QSU9fUEEwICkgIC8qICBQV00gQ2hhbm5lbCAwICovDQotI2RlZmluZSBBVDkxQ19QQTBfVElPQTAgICAgICggQVQ5MUNfUElPX1BBMCApICAvKiAgVGltZXIgQ291bnRlciAwIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEEgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTEgICAgICAgKCAxIDw8IDEgKSAgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEExX1BXTTEgICAgICAoIEFUOTFDX1BJT19QQTEgKSAgLyogIFBXTSBDaGFubmVsIDEgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMV9USU9CMCAgICAgKCBBVDkxQ19QSU9fUEExICkgIC8qICBUaW1lciBDb3VudGVyIDAgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQiAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMTAgICAgICAoIDEgPDwgMTAgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEExMCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEExMF9EVFhEICAgICAoIEFUOTFDX1BJT19QQTEwICkgLyogIERCR1UgRGVidWcgVHJhbnNtaXQgRGF0YSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEExMF9OUENTMiAgICAoIEFUOTFDX1BJT19QQTEwICkgLyogIFNQSSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTExICAgICAgKCAxIDw8IDExICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMTEgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMTFfTlBDUzAgICAgKCBBVDkxQ19QSU9fUEExMSApIC8qICBTUEkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAwICovDQotI2RlZmluZSBBVDkxQ19QQTExX1BXTTAgICAgICggQVQ5MUNfUElPX1BBMTEgKSAvKiAgUFdNIENoYW5uZWwgMCAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMTIgICAgICAoIDEgPDwgMTIgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEExMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEExMl9NSVNPICAgICAoIEFUOTFDX1BJT19QQTEyICkgLyogIFNQSSBNYXN0ZXIgSW4gU2xhdmUgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMTJfUFdNMSAgICAgKCBBVDkxQ19QSU9fUEExMiApIC8qICBQV00gQ2hhbm5lbCAxICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEExMyAgICAgICggMSA8PCAxMyApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTEzICovDQotI2RlZmluZSBBVDkxQ19QQTEzX01PU0kgICAgICggQVQ5MUNfUElPX1BBMTMgKSAvKiAgU1BJIE1hc3RlciBPdXQgU2xhdmUgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMTNfUFdNMiAgICAgKCBBVDkxQ19QSU9fUEExMyApIC8qICBQV00gQ2hhbm5lbCAyICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEExNCAgICAgICggMSA8PCAxNCApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTE0ICovDQotI2RlZmluZSBBVDkxQ19QQTE0X1NQQ0sgICAgICggQVQ5MUNfUElPX1BBMTQgKSAvKiAgU1BJIFNlcmlhbCBDbG9jayAqLw0KLSNkZWZpbmUgQVQ5MUNfUEExNF9QV00zICAgICAoIEFUOTFDX1BJT19QQTE0ICkgLyogIFBXTSBDaGFubmVsIDMgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTE1ICAgICAgKCAxIDw8IDE1ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMTUgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMTVfVEYgICAgICAgKCBBVDkxQ19QSU9fUEExNSApIC8qICBTU0MgVHJhbnNtaXQgRnJhbWUgU3luYyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEExNV9USU9BMSAgICAoIEFUOTFDX1BJT19QQTE1ICkgLyogIFRpbWVyIENvdW50ZXIgMSBNdWx0aXB1cnBvc2UgVGltZXIgSS9PIFBpbiBBICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEExNiAgICAgICggMSA8PCAxNiApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTE2ICovDQotI2RlZmluZSBBVDkxQ19QQTE2X1RLICAgICAgICggQVQ5MUNfUElPX1BBMTYgKSAvKiAgU1NDIFRyYW5zbWl0IENsb2NrICovDQotI2RlZmluZSBBVDkxQ19QQTE2X1RJT0IxICAgICggQVQ5MUNfUElPX1BBMTYgKSAvKiAgVGltZXIgQ291bnRlciAxIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTE3ICAgICAgKCAxIDw8IDE3ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMTcgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMTdfVEQgICAgICAgKCBBVDkxQ19QSU9fUEExNyApIC8qICBTU0MgVHJhbnNtaXQgZGF0YSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEExN19QQ0sxICAgICAoIEFUOTFDX1BJT19QQTE3ICkgLyogIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDEgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTE4ICAgICAgKCAxIDw8IDE4ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMTggKi8NCi0jZGVmaW5lIEFUOTFDX1BBMThfUkQgICAgICAgKCBBVDkxQ19QSU9fUEExOCApIC8qICBTU0MgUmVjZWl2ZSBEYXRhICovDQotI2RlZmluZSBBVDkxQ19QQTE4X1BDSzIgICAgICggQVQ5MUNfUElPX1BBMTggKSAvKiAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMTkgICAgICAoIDEgPDwgMTkgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEExOSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEExOV9SSyAgICAgICAoIEFUOTFDX1BJT19QQTE5ICkgLyogIFNTQyBSZWNlaXZlIENsb2NrICovDQotI2RlZmluZSBBVDkxQ19QQTE5X0ZJUSAgICAgICggQVQ5MUNfUElPX1BBMTkgKSAvKiAgQUlDIEZhc3QgSW50ZXJydXB0IElucHV0ICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEEyICAgICAgICggMSA8PCAyICkgICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTIgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMl9QV00yICAgICAgKCBBVDkxQ19QSU9fUEEyICkgIC8qICBQV00gQ2hhbm5lbCAyICovDQotI2RlZmluZSBBVDkxQ19QQTJfU0NLMCAgICAgICggQVQ5MUNfUElPX1BBMiApICAvKiAgVVNBUlQgMCBTZXJpYWwgQ2xvY2sgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTIwICAgICAgKCAxIDw8IDIwICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMjAgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjBfUkYgICAgICAgKCBBVDkxQ19QSU9fUEEyMCApIC8qICBTU0MgUmVjZWl2ZSBGcmFtZSBTeW5jICovDQotI2RlZmluZSBBVDkxQ19QQTIwX0lSUTAgICAgICggQVQ5MUNfUElPX1BBMjAgKSAvKiAgRXh0ZXJuYWwgSW50ZXJydXB0IDAgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTIxICAgICAgKCAxIDw8IDIxICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMjEgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjFfUlhEMSAgICAgKCBBVDkxQ19QSU9fUEEyMSApIC8qICBVU0FSVCAxIFJlY2VpdmUgRGF0YSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyMV9QQ0sxICAgICAoIEFUOTFDX1BJT19QQTIxICkgLyogIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDEgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTIyICAgICAgKCAxIDw8IDIyICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMjIgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjJfVFhEMSAgICAgKCBBVDkxQ19QSU9fUEEyMiApIC8qICBVU0FSVCAxIFRyYW5zbWl0IERhdGEgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjJfTlBDUzMgICAgKCBBVDkxQ19QSU9fUEEyMiApIC8qICBTUEkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEEyMyAgICAgICggMSA8PCAyMyApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTIzICovDQotI2RlZmluZSBBVDkxQ19QQTIzX1NDSzEgICAgICggQVQ5MUNfUElPX1BBMjMgKSAvKiAgVVNBUlQgMSBTZXJpYWwgQ2xvY2sgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjNfUFdNMCAgICAgKCBBVDkxQ19QSU9fUEEyMyApIC8qICBQV00gQ2hhbm5lbCAwICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEEyNCAgICAgICggMSA8PCAyNCApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTI0ICovDQotI2RlZmluZSBBVDkxQ19QQTI0X1JUUzEgICAgICggQVQ5MUNfUElPX1BBMjQgKSAvKiAgVVNBUlQgMSBSZWFkeSBUbyBTZW5kICovDQotI2RlZmluZSBBVDkxQ19QQTI0X1BXTTEgICAgICggQVQ5MUNfUElPX1BBMjQgKSAvKiAgUFdNIENoYW5uZWwgMSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMjUgICAgICAoIDEgPDwgMjUgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEEyNSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyNV9DVFMxICAgICAoIEFUOTFDX1BJT19QQTI1ICkgLyogIFVTQVJUIDEgQ2xlYXIgVG8gU2VuZCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyNV9QV00yICAgICAoIEFUOTFDX1BJT19QQTI1ICkgLyogIFBXTSBDaGFubmVsIDIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTI2ICAgICAgKCAxIDw8IDI2ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMjYgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjZfRENEMSAgICAgKCBBVDkxQ19QSU9fUEEyNiApIC8qICBVU0FSVCAxIERhdGEgQ2FycmllciBEZXRlY3QgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjZfVElPQTIgICAgKCBBVDkxQ19QSU9fUEEyNiApIC8qICBUaW1lciBDb3VudGVyIDIgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMjcgICAgICAoIDEgPDwgMjcgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEEyNyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyN19EVFIxICAgICAoIEFUOTFDX1BJT19QQTI3ICkgLyogIFVTQVJUIDEgRGF0YSBUZXJtaW5hbCByZWFkeSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyN19USU9CMiAgICAoIEFUOTFDX1BJT19QQTI3ICkgLyogIFRpbWVyIENvdW50ZXIgMiBNdWx0aXB1cnBvc2UgVGltZXIgSS9PIFBpbiBCICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEEyOCAgICAgICggMSA8PCAyOCApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTI4ICovDQotI2RlZmluZSBBVDkxQ19QQTI4X0RTUjEgICAgICggQVQ5MUNfUElPX1BBMjggKSAvKiAgVVNBUlQgMSBEYXRhIFNldCByZWFkeSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyOF9UQ0xLMSAgICAoIEFUOTFDX1BJT19QQTI4ICkgLyogIFRpbWVyIENvdW50ZXIgMSBleHRlcm5hbCBjbG9jayBpbnB1dCAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMjkgICAgICAoIDEgPDwgMjkgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEEyOSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyOV9SSTEgICAgICAoIEFUOTFDX1BJT19QQTI5ICkgLyogIFVTQVJUIDEgUmluZyBJbmRpY2F0b3IgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjlfVENMSzIgICAgKCBBVDkxQ19QSU9fUEEyOSApIC8qICBUaW1lciBDb3VudGVyIDIgZXh0ZXJuYWwgY2xvY2sgaW5wdXQgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTMgICAgICAgKCAxIDw8IDMgKSAgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEzX1RXRCAgICAgICAoIEFUOTFDX1BJT19QQTMgKSAgLyogIFRXSSBUd28td2lyZSBTZXJpYWwgRGF0YSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEzX05QQ1MzICAgICAoIEFUOTFDX1BJT19QQTMgKSAgLyogIFNQSSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTMwICAgICAgKCAxIDw8IDMwICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMzAgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMzBfSVJRMSAgICAgKCBBVDkxQ19QSU9fUEEzMCApIC8qICBFeHRlcm5hbCBJbnRlcnJ1cHQgMSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEzMF9OUENTMiAgICAoIEFUOTFDX1BJT19QQTMwICkgLyogIFNQSSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTMxICAgICAgKCAxIDw8IDMxICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMzEgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMzFfTlBDUzEgICAgKCBBVDkxQ19QSU9fUEEzMSApIC8qICBTUEkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAxICovDQotI2RlZmluZSBBVDkxQ19QQTMxX1BDSzIgICAgICggQVQ5MUNfUElPX1BBMzEgKSAvKiAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBNCAgICAgICAoIDEgPDwgNCApICAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEE0ICovDQotI2RlZmluZSBBVDkxQ19QQTRfVFdDSyAgICAgICggQVQ5MUNfUElPX1BBNCApICAvKiAgVFdJIFR3by13aXJlIFNlcmlhbCBDbG9jayAqLw0KLSNkZWZpbmUgQVQ5MUNfUEE0X1RDTEswICAgICAoIEFUOTFDX1BJT19QQTQgKSAgLyogIFRpbWVyIENvdW50ZXIgMCBleHRlcm5hbCBjbG9jayBpbnB1dCAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBNSAgICAgICAoIDEgPDwgNSApICAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEE1ICovDQotI2RlZmluZSBBVDkxQ19QQTVfUlhEMCAgICAgICggQVQ5MUNfUElPX1BBNSApICAvKiAgVVNBUlQgMCBSZWNlaXZlIERhdGEgKi8NCi0jZGVmaW5lIEFUOTFDX1BBNV9OUENTMyAgICAgKCBBVDkxQ19QSU9fUEE1ICkgIC8qICBTUEkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEE2ICAgICAgICggMSA8PCA2ICkgICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTYgKi8NCi0jZGVmaW5lIEFUOTFDX1BBNl9UWEQwICAgICAgKCBBVDkxQ19QSU9fUEE2ICkgIC8qICBVU0FSVCAwIFRyYW5zbWl0IERhdGEgKi8NCi0jZGVmaW5lIEFUOTFDX1BBNl9QQ0swICAgICAgKCBBVDkxQ19QSU9fUEE2ICkgIC8qICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAwICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEE3ICAgICAgICggMSA8PCA3ICkgICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTcgKi8NCi0jZGVmaW5lIEFUOTFDX1BBN19SVFMwICAgICAgKCBBVDkxQ19QSU9fUEE3ICkgIC8qICBVU0FSVCAwIFJlYWR5IFRvIFNlbmQgKi8NCi0jZGVmaW5lIEFUOTFDX1BBN19QV00zICAgICAgKCBBVDkxQ19QSU9fUEE3ICkgIC8qICBQV00gQ2hhbm5lbCAzICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEE4ICAgICAgICggMSA8PCA4ICkgICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTggKi8NCi0jZGVmaW5lIEFUOTFDX1BBOF9DVFMwICAgICAgKCBBVDkxQ19QSU9fUEE4ICkgIC8qICBVU0FSVCAwIENsZWFyIFRvIFNlbmQgKi8NCi0jZGVmaW5lIEFUOTFDX1BBOF9BRFRSRyAgICAgKCBBVDkxQ19QSU9fUEE4ICkgIC8qICBBREMgRXh0ZXJuYWwgVHJpZ2dlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBOSAgICAgICAoIDEgPDwgOSApICAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEE5ICovDQotI2RlZmluZSBBVDkxQ19QQTlfRFJYRCAgICAgICggQVQ5MUNfUElPX1BBOSApICAvKiAgREJHVSBEZWJ1ZyBSZWNlaXZlIERhdGEgKi8NCi0jZGVmaW5lIEFUOTFDX1BBOV9OUENTMSAgICAgKCBBVDkxQ19QSU9fUEE5ICkgIC8qICBTUEkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAxICovDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgIFBJTyBERUZJTklUSU9OUyBGT1IgQVQ5MVNBTTdTNjQNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMCAgICAgICAgICAgICAoMSA8PCAgMCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEwDQorI2RlZmluZSBBVDkxQ19QQTBfUFdNMCAgICAgICAgICAgIChBVDkxQ19QSU9fUEEwKSAvLyAgUFdNIENoYW5uZWwgMA0KKyNkZWZpbmUgQVQ5MUNfUEEwX1RJT0EwICAgICAgICAgICAoQVQ5MUNfUElPX1BBMCkgLy8gIFRpbWVyIENvdW50ZXIgMCBNdWx0aXB1cnBvc2UgVGltZXIgSS9PIFBpbiBBDQorI2RlZmluZSBBVDkxQ19QSU9fUEExICAgICAgICAgICAgICgxIDw8ICAxKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTENCisjZGVmaW5lIEFUOTFDX1BBMV9QV00xICAgICAgICAgICAgKEFUOTFDX1BJT19QQTEpIC8vICBQV00gQ2hhbm5lbCAxDQorI2RlZmluZSBBVDkxQ19QQTFfVElPQjAgICAgICAgICAgIChBVDkxQ19QSU9fUEExKSAvLyAgVGltZXIgQ291bnRlciAwIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEINCisjZGVmaW5lIEFUOTFDX1BJT19QQTEwICAgICAgICAgICAgKDEgPDwgMTApIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMTANCisjZGVmaW5lIEFUOTFDX1BBMTBfRFRYRCAgICAgICAgICAgKEFUOTFDX1BJT19QQTEwKSAvLyAgREJHVSBEZWJ1ZyBUcmFuc21pdCBEYXRhDQorI2RlZmluZSBBVDkxQ19QQTEwX05QQ1MyICAgICAgICAgIChBVDkxQ19QSU9fUEExMCkgLy8gIFNQSSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDINCisjZGVmaW5lIEFUOTFDX1BJT19QQTExICAgICAgICAgICAgKDEgPDwgMTEpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMTENCisjZGVmaW5lIEFUOTFDX1BBMTFfTlBDUzAgICAgICAgICAgKEFUOTFDX1BJT19QQTExKSAvLyAgU1BJIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMA0KKyNkZWZpbmUgQVQ5MUNfUEExMV9QV00wICAgICAgICAgICAoQVQ5MUNfUElPX1BBMTEpIC8vICBQV00gQ2hhbm5lbCAwDQorI2RlZmluZSBBVDkxQ19QSU9fUEExMiAgICAgICAgICAgICgxIDw8IDEyKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTEyDQorI2RlZmluZSBBVDkxQ19QQTEyX01JU08gICAgICAgICAgIChBVDkxQ19QSU9fUEExMikgLy8gIFNQSSBNYXN0ZXIgSW4gU2xhdmUNCisjZGVmaW5lIEFUOTFDX1BBMTJfUFdNMSAgICAgICAgICAgKEFUOTFDX1BJT19QQTEyKSAvLyAgUFdNIENoYW5uZWwgMQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMTMgICAgICAgICAgICAoMSA8PCAxMykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExMw0KKyNkZWZpbmUgQVQ5MUNfUEExM19NT1NJICAgICAgICAgICAoQVQ5MUNfUElPX1BBMTMpIC8vICBTUEkgTWFzdGVyIE91dCBTbGF2ZQ0KKyNkZWZpbmUgQVQ5MUNfUEExM19QV00yICAgICAgICAgICAoQVQ5MUNfUElPX1BBMTMpIC8vICBQV00gQ2hhbm5lbCAyDQorI2RlZmluZSBBVDkxQ19QSU9fUEExNCAgICAgICAgICAgICgxIDw8IDE0KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTE0DQorI2RlZmluZSBBVDkxQ19QQTE0X1NQQ0sgICAgICAgICAgIChBVDkxQ19QSU9fUEExNCkgLy8gIFNQSSBTZXJpYWwgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BBMTRfUFdNMyAgICAgICAgICAgKEFUOTFDX1BJT19QQTE0KSAvLyAgUFdNIENoYW5uZWwgMw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMTUgICAgICAgICAgICAoMSA8PCAxNSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExNQ0KKyNkZWZpbmUgQVQ5MUNfUEExNV9URiAgICAgICAgICAgICAoQVQ5MUNfUElPX1BBMTUpIC8vICBTU0MgVHJhbnNtaXQgRnJhbWUgU3luYw0KKyNkZWZpbmUgQVQ5MUNfUEExNV9USU9BMSAgICAgICAgICAoQVQ5MUNfUElPX1BBMTUpIC8vICBUaW1lciBDb3VudGVyIDEgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMTYgICAgICAgICAgICAoMSA8PCAxNikgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExNg0KKyNkZWZpbmUgQVQ5MUNfUEExNl9USyAgICAgICAgICAgICAoQVQ5MUNfUElPX1BBMTYpIC8vICBTU0MgVHJhbnNtaXQgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BBMTZfVElPQjEgICAgICAgICAgKEFUOTFDX1BJT19QQTE2KSAvLyAgVGltZXIgQ291bnRlciAxIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEINCisjZGVmaW5lIEFUOTFDX1BJT19QQTE3ICAgICAgICAgICAgKDEgPDwgMTcpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMTcNCisjZGVmaW5lIEFUOTFDX1BBMTdfVEQgICAgICAgICAgICAgKEFUOTFDX1BJT19QQTE3KSAvLyAgU1NDIFRyYW5zbWl0IGRhdGENCisjZGVmaW5lIEFUOTFDX1BBMTdfUENLMSAgICAgICAgICAgKEFUOTFDX1BJT19QQTE3KSAvLyAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMTggICAgICAgICAgICAoMSA8PCAxOCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExOA0KKyNkZWZpbmUgQVQ5MUNfUEExOF9SRCAgICAgICAgICAgICAoQVQ5MUNfUElPX1BBMTgpIC8vICBTU0MgUmVjZWl2ZSBEYXRhDQorI2RlZmluZSBBVDkxQ19QQTE4X1BDSzIgICAgICAgICAgIChBVDkxQ19QSU9fUEExOCkgLy8gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDINCisjZGVmaW5lIEFUOTFDX1BJT19QQTE5ICAgICAgICAgICAgKDEgPDwgMTkpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMTkNCisjZGVmaW5lIEFUOTFDX1BBMTlfUksgICAgICAgICAgICAgKEFUOTFDX1BJT19QQTE5KSAvLyAgU1NDIFJlY2VpdmUgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BBMTlfRklRICAgICAgICAgICAgKEFUOTFDX1BJT19QQTE5KSAvLyAgQUlDIEZhc3QgSW50ZXJydXB0IElucHV0DQorI2RlZmluZSBBVDkxQ19QSU9fUEEyICAgICAgICAgICAgICgxIDw8ICAyKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTINCisjZGVmaW5lIEFUOTFDX1BBMl9QV00yICAgICAgICAgICAgKEFUOTFDX1BJT19QQTIpIC8vICBQV00gQ2hhbm5lbCAyDQorI2RlZmluZSBBVDkxQ19QQTJfU0NLMCAgICAgICAgICAgIChBVDkxQ19QSU9fUEEyKSAvLyAgVVNBUlQgMCBTZXJpYWwgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BJT19QQTIwICAgICAgICAgICAgKDEgPDwgMjApIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjANCisjZGVmaW5lIEFUOTFDX1BBMjBfUkYgICAgICAgICAgICAgKEFUOTFDX1BJT19QQTIwKSAvLyAgU1NDIFJlY2VpdmUgRnJhbWUgU3luYw0KKyNkZWZpbmUgQVQ5MUNfUEEyMF9JUlEwICAgICAgICAgICAoQVQ5MUNfUElPX1BBMjApIC8vICBFeHRlcm5hbCBJbnRlcnJ1cHQgMA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMjEgICAgICAgICAgICAoMSA8PCAyMSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEyMQ0KKyNkZWZpbmUgQVQ5MUNfUEEyMV9SWEQxICAgICAgICAgICAoQVQ5MUNfUElPX1BBMjEpIC8vICBVU0FSVCAxIFJlY2VpdmUgRGF0YQ0KKyNkZWZpbmUgQVQ5MUNfUEEyMV9QQ0sxICAgICAgICAgICAoQVQ5MUNfUElPX1BBMjEpIC8vICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAxDQorI2RlZmluZSBBVDkxQ19QSU9fUEEyMiAgICAgICAgICAgICgxIDw8IDIyKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTIyDQorI2RlZmluZSBBVDkxQ19QQTIyX1RYRDEgICAgICAgICAgIChBVDkxQ19QSU9fUEEyMikgLy8gIFVTQVJUIDEgVHJhbnNtaXQgRGF0YQ0KKyNkZWZpbmUgQVQ5MUNfUEEyMl9OUENTMyAgICAgICAgICAoQVQ5MUNfUElPX1BBMjIpIC8vICBTUEkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzDQorI2RlZmluZSBBVDkxQ19QSU9fUEEyMyAgICAgICAgICAgICgxIDw8IDIzKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTIzDQorI2RlZmluZSBBVDkxQ19QQTIzX1NDSzEgICAgICAgICAgIChBVDkxQ19QSU9fUEEyMykgLy8gIFVTQVJUIDEgU2VyaWFsIENsb2NrDQorI2RlZmluZSBBVDkxQ19QQTIzX1BXTTAgICAgICAgICAgIChBVDkxQ19QSU9fUEEyMykgLy8gIFBXTSBDaGFubmVsIDANCisjZGVmaW5lIEFUOTFDX1BJT19QQTI0ICAgICAgICAgICAgKDEgPDwgMjQpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjQNCisjZGVmaW5lIEFUOTFDX1BBMjRfUlRTMSAgICAgICAgICAgKEFUOTFDX1BJT19QQTI0KSAvLyAgVVNBUlQgMSBSZWFkeSBUbyBTZW5kDQorI2RlZmluZSBBVDkxQ19QQTI0X1BXTTEgICAgICAgICAgIChBVDkxQ19QSU9fUEEyNCkgLy8gIFBXTSBDaGFubmVsIDENCisjZGVmaW5lIEFUOTFDX1BJT19QQTI1ICAgICAgICAgICAgKDEgPDwgMjUpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjUNCisjZGVmaW5lIEFUOTFDX1BBMjVfQ1RTMSAgICAgICAgICAgKEFUOTFDX1BJT19QQTI1KSAvLyAgVVNBUlQgMSBDbGVhciBUbyBTZW5kDQorI2RlZmluZSBBVDkxQ19QQTI1X1BXTTIgICAgICAgICAgIChBVDkxQ19QSU9fUEEyNSkgLy8gIFBXTSBDaGFubmVsIDINCisjZGVmaW5lIEFUOTFDX1BJT19QQTI2ICAgICAgICAgICAgKDEgPDwgMjYpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjYNCisjZGVmaW5lIEFUOTFDX1BBMjZfRENEMSAgICAgICAgICAgKEFUOTFDX1BJT19QQTI2KSAvLyAgVVNBUlQgMSBEYXRhIENhcnJpZXIgRGV0ZWN0DQorI2RlZmluZSBBVDkxQ19QQTI2X1RJT0EyICAgICAgICAgIChBVDkxQ19QSU9fUEEyNikgLy8gIFRpbWVyIENvdW50ZXIgMiBNdWx0aXB1cnBvc2UgVGltZXIgSS9PIFBpbiBBDQorI2RlZmluZSBBVDkxQ19QSU9fUEEyNyAgICAgICAgICAgICgxIDw8IDI3KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTI3DQorI2RlZmluZSBBVDkxQ19QQTI3X0RUUjEgICAgICAgICAgIChBVDkxQ19QSU9fUEEyNykgLy8gIFVTQVJUIDEgRGF0YSBUZXJtaW5hbCByZWFkeQ0KKyNkZWZpbmUgQVQ5MUNfUEEyN19USU9CMiAgICAgICAgICAoQVQ5MUNfUElPX1BBMjcpIC8vICBUaW1lciBDb3VudGVyIDIgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMjggICAgICAgICAgICAoMSA8PCAyOCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEyOA0KKyNkZWZpbmUgQVQ5MUNfUEEyOF9EU1IxICAgICAgICAgICAoQVQ5MUNfUElPX1BBMjgpIC8vICBVU0FSVCAxIERhdGEgU2V0IHJlYWR5DQorI2RlZmluZSBBVDkxQ19QQTI4X1RDTEsxICAgICAgICAgIChBVDkxQ19QSU9fUEEyOCkgLy8gIFRpbWVyIENvdW50ZXIgMSBleHRlcm5hbCBjbG9jayBpbnB1dA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMjkgICAgICAgICAgICAoMSA8PCAyOSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEyOQ0KKyNkZWZpbmUgQVQ5MUNfUEEyOV9SSTEgICAgICAgICAgICAoQVQ5MUNfUElPX1BBMjkpIC8vICBVU0FSVCAxIFJpbmcgSW5kaWNhdG9yDQorI2RlZmluZSBBVDkxQ19QQTI5X1RDTEsyICAgICAgICAgIChBVDkxQ19QSU9fUEEyOSkgLy8gIFRpbWVyIENvdW50ZXIgMiBleHRlcm5hbCBjbG9jayBpbnB1dA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMyAgICAgICAgICAgICAoMSA8PCAgMykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEzDQorI2RlZmluZSBBVDkxQ19QQTNfVFdEICAgICAgICAgICAgIChBVDkxQ19QSU9fUEEzKSAvLyAgVFdJIFR3by13aXJlIFNlcmlhbCBEYXRhDQorI2RlZmluZSBBVDkxQ19QQTNfTlBDUzMgICAgICAgICAgIChBVDkxQ19QSU9fUEEzKSAvLyAgU1BJIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMzAgICAgICAgICAgICAoMSA8PCAzMCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEzMA0KKyNkZWZpbmUgQVQ5MUNfUEEzMF9JUlExICAgICAgICAgICAoQVQ5MUNfUElPX1BBMzApIC8vICBFeHRlcm5hbCBJbnRlcnJ1cHQgMQ0KKyNkZWZpbmUgQVQ5MUNfUEEzMF9OUENTMiAgICAgICAgICAoQVQ5MUNfUElPX1BBMzApIC8vICBTUEkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAyDQorI2RlZmluZSBBVDkxQ19QSU9fUEEzMSAgICAgICAgICAgICgxIDw8IDMxKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTMxDQorI2RlZmluZSBBVDkxQ19QQTMxX05QQ1MxICAgICAgICAgIChBVDkxQ19QSU9fUEEzMSkgLy8gIFNQSSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDENCisjZGVmaW5lIEFUOTFDX1BBMzFfUENLMiAgICAgICAgICAgKEFUOTFDX1BJT19QQTMxKSAvLyAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBNCAgICAgICAgICAgICAoMSA8PCAgNCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEE0DQorI2RlZmluZSBBVDkxQ19QQTRfVFdDSyAgICAgICAgICAgIChBVDkxQ19QSU9fUEE0KSAvLyAgVFdJIFR3by13aXJlIFNlcmlhbCBDbG9jaw0KKyNkZWZpbmUgQVQ5MUNfUEE0X1RDTEswICAgICAgICAgICAoQVQ5MUNfUElPX1BBNCkgLy8gIFRpbWVyIENvdW50ZXIgMCBleHRlcm5hbCBjbG9jayBpbnB1dA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBNSAgICAgICAgICAgICAoMSA8PCAgNSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEE1DQorI2RlZmluZSBBVDkxQ19QQTVfUlhEMCAgICAgICAgICAgIChBVDkxQ19QSU9fUEE1KSAvLyAgVVNBUlQgMCBSZWNlaXZlIERhdGENCisjZGVmaW5lIEFUOTFDX1BBNV9OUENTMyAgICAgICAgICAgKEFUOTFDX1BJT19QQTUpIC8vICBTUEkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzDQorI2RlZmluZSBBVDkxQ19QSU9fUEE2ICAgICAgICAgICAgICgxIDw8ICA2KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTYNCisjZGVmaW5lIEFUOTFDX1BBNl9UWEQwICAgICAgICAgICAgKEFUOTFDX1BJT19QQTYpIC8vICBVU0FSVCAwIFRyYW5zbWl0IERhdGENCisjZGVmaW5lIEFUOTFDX1BBNl9QQ0swICAgICAgICAgICAgKEFUOTFDX1BJT19QQTYpIC8vICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAwDQorI2RlZmluZSBBVDkxQ19QSU9fUEE3ICAgICAgICAgICAgICgxIDw8ICA3KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTcNCisjZGVmaW5lIEFUOTFDX1BBN19SVFMwICAgICAgICAgICAgKEFUOTFDX1BJT19QQTcpIC8vICBVU0FSVCAwIFJlYWR5IFRvIFNlbmQNCisjZGVmaW5lIEFUOTFDX1BBN19QV00zICAgICAgICAgICAgKEFUOTFDX1BJT19QQTcpIC8vICBQV00gQ2hhbm5lbCAzDQorI2RlZmluZSBBVDkxQ19QSU9fUEE4ICAgICAgICAgICAgICgxIDw8ICA4KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTgNCisjZGVmaW5lIEFUOTFDX1BBOF9DVFMwICAgICAgICAgICAgKEFUOTFDX1BJT19QQTgpIC8vICBVU0FSVCAwIENsZWFyIFRvIFNlbmQNCisjZGVmaW5lIEFUOTFDX1BBOF9BRFRSRyAgICAgICAgICAgKEFUOTFDX1BJT19QQTgpIC8vICBBREMgRXh0ZXJuYWwgVHJpZ2dlcg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBOSAgICAgICAgICAgICAoMSA8PCAgOSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEE5DQorI2RlZmluZSBBVDkxQ19QQTlfRFJYRCAgICAgICAgICAgIChBVDkxQ19QSU9fUEE5KSAvLyAgREJHVSBEZWJ1ZyBSZWNlaXZlIERhdGENCisjZGVmaW5lIEFUOTFDX1BBOV9OUENTMSAgICAgICAgICAgKEFUOTFDX1BJT19QQTkpIC8vICBTUEkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAxDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgIFBFUklQSEVSQUwgSUQgREVGSU5JVElPTlMgRk9SIEFUOTFTQU03UzY0ICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0jZGVmaW5lIEFUOTFDX0lEX0ZJUSAgICAgICAgICAgICggMCApICAvKiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoRklRKSAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfU1lTICAgICAgICAgICAgKCAxICkgIC8qIFN5c3RlbSBQZXJpcGhlcmFsICovDQotI2RlZmluZSBBVDkxQ19JRF9QSU9BICAgICAgICAgICAoIDIgKSAgLyogUGFyYWxsZWwgSU8gQ29udHJvbGxlciAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfM19SZXNlcnZlZCAgICAgKCAzICkgIC8qIFJlc2VydmVkICovDQotI2RlZmluZSBBVDkxQ19JRF9BREMgICAgICAgICAgICAoIDQgKSAgLyogQW5hbG9nLXRvLURpZ2l0YWwgQ29udmVydGVyICovDQotI2RlZmluZSBBVDkxQ19JRF9TUEkgICAgICAgICAgICAoIDUgKSAgLyogU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlICovDQotI2RlZmluZSBBVDkxQ19JRF9VUzAgICAgICAgICAgICAoIDYgKSAgLyogVVNBUlQgMCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfVVMxICAgICAgICAgICAgKCA3ICkgIC8qIFVTQVJUIDEgKi8NCi0jZGVmaW5lIEFUOTFDX0lEX1NTQyAgICAgICAgICAgICggOCApICAvKiBTZXJpYWwgU3luY2hyb25vdXMgQ29udHJvbGxlciAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfVFdJICAgICAgICAgICAgKCA5ICkgIC8qIFR3by1XaXJlIEludGVyZmFjZSAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfUFdNQyAgICAgICAgICAgKCAxMCApIC8qIFBXTSBDb250cm9sbGVyICovDQotI2RlZmluZSBBVDkxQ19JRF9VRFAgICAgICAgICAgICAoIDExICkgLyogVVNCIERldmljZSBQb3J0ICovDQotI2RlZmluZSBBVDkxQ19JRF9UQzAgICAgICAgICAgICAoIDEyICkgLyogVGltZXIgQ291bnRlciAwICovDQotI2RlZmluZSBBVDkxQ19JRF9UQzEgICAgICAgICAgICAoIDEzICkgLyogVGltZXIgQ291bnRlciAxICovDQotI2RlZmluZSBBVDkxQ19JRF9UQzIgICAgICAgICAgICAoIDE0ICkgLyogVGltZXIgQ291bnRlciAyICovDQotI2RlZmluZSBBVDkxQ19JRF8xNV9SZXNlcnZlZCAgICAoIDE1ICkgLyogUmVzZXJ2ZWQgKi8NCi0jZGVmaW5lIEFUOTFDX0lEXzE2X1Jlc2VydmVkICAgICggMTYgKSAvKiBSZXNlcnZlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfMTdfUmVzZXJ2ZWQgICAgKCAxNyApIC8qIFJlc2VydmVkICovDQotI2RlZmluZSBBVDkxQ19JRF8xOF9SZXNlcnZlZCAgICAoIDE4ICkgLyogUmVzZXJ2ZWQgKi8NCi0jZGVmaW5lIEFUOTFDX0lEXzE5X1Jlc2VydmVkICAgICggMTkgKSAvKiBSZXNlcnZlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfMjBfUmVzZXJ2ZWQgICAgKCAyMCApIC8qIFJlc2VydmVkICovDQotI2RlZmluZSBBVDkxQ19JRF8yMV9SZXNlcnZlZCAgICAoIDIxICkgLyogUmVzZXJ2ZWQgKi8NCi0jZGVmaW5lIEFUOTFDX0lEXzIyX1Jlc2VydmVkICAgICggMjIgKSAvKiBSZXNlcnZlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfMjNfUmVzZXJ2ZWQgICAgKCAyMyApIC8qIFJlc2VydmVkICovDQotI2RlZmluZSBBVDkxQ19JRF8yNF9SZXNlcnZlZCAgICAoIDI0ICkgLyogUmVzZXJ2ZWQgKi8NCi0jZGVmaW5lIEFUOTFDX0lEXzI1X1Jlc2VydmVkICAgICggMjUgKSAvKiBSZXNlcnZlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfMjZfUmVzZXJ2ZWQgICAgKCAyNiApIC8qIFJlc2VydmVkICovDQotI2RlZmluZSBBVDkxQ19JRF8yN19SZXNlcnZlZCAgICAoIDI3ICkgLyogUmVzZXJ2ZWQgKi8NCi0jZGVmaW5lIEFUOTFDX0lEXzI4X1Jlc2VydmVkICAgICggMjggKSAvKiBSZXNlcnZlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfMjlfUmVzZXJ2ZWQgICAgKCAyOSApIC8qIFJlc2VydmVkICovDQotI2RlZmluZSBBVDkxQ19JRF9JUlEwICAgICAgICAgICAoIDMwICkgLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKElSUTApICovDQotI2RlZmluZSBBVDkxQ19JRF9JUlExICAgICAgICAgICAoIDMxICkgLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKElSUTEpICovDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgIFBFUklQSEVSQUwgSUQgREVGSU5JVElPTlMgRk9SIEFUOTFTQU03UzY0DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisjZGVmaW5lIEFUOTFDX0lEX0ZJUSAgICAgICAgICAgICAgKCAwKSAvLyBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoRklRKQ0KKyNkZWZpbmUgQVQ5MUNfSURfU1lTICAgICAgICAgICAgICAoIDEpIC8vIFN5c3RlbSBQZXJpcGhlcmFsDQorI2RlZmluZSBBVDkxQ19JRF9QSU9BICAgICAgICAgICAgICggMikgLy8gUGFyYWxsZWwgSU8gQ29udHJvbGxlcg0KKyNkZWZpbmUgQVQ5MUNfSURfM19SZXNlcnZlZCAgICAgICAoIDMpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF9BREMgICAgICAgICAgICAgICggNCkgLy8gQW5hbG9nLXRvLURpZ2l0YWwgQ29udmVydGVyDQorI2RlZmluZSBBVDkxQ19JRF9TUEkgICAgICAgICAgICAgICggNSkgLy8gU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlDQorI2RlZmluZSBBVDkxQ19JRF9VUzAgICAgICAgICAgICAgICggNikgLy8gVVNBUlQgMA0KKyNkZWZpbmUgQVQ5MUNfSURfVVMxICAgICAgICAgICAgICAoIDcpIC8vIFVTQVJUIDENCisjZGVmaW5lIEFUOTFDX0lEX1NTQyAgICAgICAgICAgICAgKCA4KSAvLyBTZXJpYWwgU3luY2hyb25vdXMgQ29udHJvbGxlcg0KKyNkZWZpbmUgQVQ5MUNfSURfVFdJICAgICAgICAgICAgICAoIDkpIC8vIFR3by1XaXJlIEludGVyZmFjZQ0KKyNkZWZpbmUgQVQ5MUNfSURfUFdNQyAgICAgICAgICAgICAoMTApIC8vIFBXTSBDb250cm9sbGVyDQorI2RlZmluZSBBVDkxQ19JRF9VRFAgICAgICAgICAgICAgICgxMSkgLy8gVVNCIERldmljZSBQb3J0DQorI2RlZmluZSBBVDkxQ19JRF9UQzAgICAgICAgICAgICAgICgxMikgLy8gVGltZXIgQ291bnRlciAwDQorI2RlZmluZSBBVDkxQ19JRF9UQzEgICAgICAgICAgICAgICgxMykgLy8gVGltZXIgQ291bnRlciAxDQorI2RlZmluZSBBVDkxQ19JRF9UQzIgICAgICAgICAgICAgICgxNCkgLy8gVGltZXIgQ291bnRlciAyDQorI2RlZmluZSBBVDkxQ19JRF8xNV9SZXNlcnZlZCAgICAgICgxNSkgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzE2X1Jlc2VydmVkICAgICAgKDE2KSAvLyBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfSURfMTdfUmVzZXJ2ZWQgICAgICAoMTcpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8xOF9SZXNlcnZlZCAgICAgICgxOCkgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzE5X1Jlc2VydmVkICAgICAgKDE5KSAvLyBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfSURfMjBfUmVzZXJ2ZWQgICAgICAoMjApIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yMV9SZXNlcnZlZCAgICAgICgyMSkgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzIyX1Jlc2VydmVkICAgICAgKDIyKSAvLyBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfSURfMjNfUmVzZXJ2ZWQgICAgICAoMjMpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yNF9SZXNlcnZlZCAgICAgICgyNCkgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzI1X1Jlc2VydmVkICAgICAgKDI1KSAvLyBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfSURfMjZfUmVzZXJ2ZWQgICAgICAoMjYpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yN19SZXNlcnZlZCAgICAgICgyNykgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzI4X1Jlc2VydmVkICAgICAgKDI4KSAvLyBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfSURfMjlfUmVzZXJ2ZWQgICAgICAoMjkpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF9JUlEwICAgICAgICAgICAgICgzMCkgLy8gQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKElSUTApDQorI2RlZmluZSBBVDkxQ19JRF9JUlExICAgICAgICAgICAgICgzMSkgLy8gQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKElSUTEpDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgIEJBU0UgQUREUkVTUyBERUZJTklUSU9OUyBGT1IgQVQ5MVNBTTdTNjQgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9TWVNDICAgICAgICAoIDB4RkZGRkYwMDAgKSAgLyogKFNZU0MpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9BSUMgICAgICAgICAoIDB4RkZGRkYwMDAgKSAgLyogKEFJQykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX0RCR1UgICAgICAgICggMHhGRkZGRjIwMCApICAvKiAoREJHVSkgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19EQkdVICAgICggMHhGRkZGRjMwMCApICAvKiAoUERDX0RCR1UpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9QSU9BICAgICAgICAoIDB4RkZGRkY0MDAgKSAgLyogKFBJT0EpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9DS0dSICAgICAgICAoIDB4RkZGRkZDMjAgKSAgLyogKENLR1IpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9QTUMgICAgICAgICAoIDB4RkZGRkZDMDAgKSAgLyogKFBNQykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1JTVEMgICAgICAgICggMHhGRkZGRkQwMCApICAvKiAoUlNUQykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1JUVEMgICAgICAgICggMHhGRkZGRkQyMCApICAvKiAoUlRUQykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1BJVEMgICAgICAgICggMHhGRkZGRkQzMCApICAvKiAoUElUQykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1dEVEMgICAgICAgICggMHhGRkZGRkQ0MCApICAvKiAoV0RUQykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX01DICAgICAgICAgICggMHhGRkZGRkYwMCApICAvKiAoTUMpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfU1BJICAgICAoIDB4RkZGRTAxMDAgKSAgLyogKFBEQ19TUEkpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9TUEkgICAgICAgICAoIDB4RkZGRTAwMDAgKSAgLyogKFNQSSkgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19BREMgICAgICggMHhGRkZEODEwMCApICAvKiAoUERDX0FEQykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX0FEQyAgICAgICAgICggMHhGRkZEODAwMCApICAvKiAoQURDKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfUERDX1NTQyAgICAgKCAweEZGRkQ0MTAwICkgIC8qIChQRENfU1NDKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfU1NDICAgICAgICAgKCAweEZGRkQ0MDAwICkgIC8qIChTU0MpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfVVMxICAgICAoIDB4RkZGQzQxMDAgKSAgLyogKFBEQ19VUzEpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9VUzEgICAgICAgICAoIDB4RkZGQzQwMDAgKSAgLyogKFVTMSkgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19VUzAgICAgICggMHhGRkZDMDEwMCApICAvKiAoUERDX1VTMCkgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1VTMCAgICAgICAgICggMHhGRkZDMDAwMCApICAvKiAoVVMwKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfVFdJICAgICAgICAgKCAweEZGRkI4MDAwICkgIC8qIChUV0kpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9UQzIgICAgICAgICAoIDB4RkZGQTAwODAgKSAgLyogKFRDMikgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1RDMSAgICAgICAgICggMHhGRkZBMDA0MCApICAvKiAoVEMxKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfVEMwICAgICAgICAgKCAweEZGRkEwMDAwICkgIC8qIChUQzApIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9UQ0IgICAgICAgICAoIDB4RkZGQTAwMDAgKSAgLyogKFRDQikgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1BXTUNfQ0gzICAgICggMHhGRkZDQzI2MCApICAvKiAoUFdNQ19DSDMpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9QV01DX0NIMiAgICAoIDB4RkZGQ0MyNDAgKSAgLyogKFBXTUNfQ0gyKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfUFdNQ19DSDEgICAgKCAweEZGRkNDMjIwICkgIC8qIChQV01DX0NIMSkgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1BXTUNfQ0gwICAgICggMHhGRkZDQzIwMCApICAvKiAoUFdNQ19DSDApIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9QV01DICAgICAgICAoIDB4RkZGQ0MwMDAgKSAgLyogKFBXTUMpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9VRFAgICAgICAgICAoIDB4RkZGQjAwMDAgKSAgLyogKFVEUCkgQmFzZSBBZGRyZXNzICovDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgIEJBU0UgQUREUkVTUyBERUZJTklUSU9OUyBGT1IgQVQ5MVNBTTdTNjQNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9TWVNDICAgICAgICAgICAoMHhGRkZGRjAwMCkgLy8gKFNZU0MpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9BSUMgICAgICAgICAgICAoMHhGRkZGRjAwMCkgLy8gKEFJQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0RCR1UgICAgICAgICAgICgweEZGRkZGMjAwKSAvLyAoREJHVSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19EQkdVICAgICAgICgweEZGRkZGMzAwKSAvLyAoUERDX0RCR1UpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QSU9BICAgICAgICAgICAoMHhGRkZGRjQwMCkgLy8gKFBJT0EpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DS0dSICAgICAgICAgICAoMHhGRkZGRkMyMCkgLy8gKENLR1IpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QTUMgICAgICAgICAgICAoMHhGRkZGRkMwMCkgLy8gKFBNQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1JTVEMgICAgICAgICAgICgweEZGRkZGRDAwKSAvLyAoUlNUQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1JUVEMgICAgICAgICAgICgweEZGRkZGRDIwKSAvLyAoUlRUQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BJVEMgICAgICAgICAgICgweEZGRkZGRDMwKSAvLyAoUElUQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1dEVEMgICAgICAgICAgICgweEZGRkZGRDQwKSAvLyAoV0RUQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX01DICAgICAgICAgICAgICgweEZGRkZGRjAwKSAvLyAoTUMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfU1BJICAgICAgICAoMHhGRkZFMDEwMCkgLy8gKFBEQ19TUEkpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9TUEkgICAgICAgICAgICAoMHhGRkZFMDAwMCkgLy8gKFNQSSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19BREMgICAgICAgICgweEZGRkQ4MTAwKSAvLyAoUERDX0FEQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0FEQyAgICAgICAgICAgICgweEZGRkQ4MDAwKSAvLyAoQURDKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUERDX1NTQyAgICAgICAgKDB4RkZGRDQxMDApIC8vIChQRENfU1NDKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfU1NDICAgICAgICAgICAgKDB4RkZGRDQwMDApIC8vIChTU0MpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfVVMxICAgICAgICAoMHhGRkZDNDEwMCkgLy8gKFBEQ19VUzEpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9VUzEgICAgICAgICAgICAoMHhGRkZDNDAwMCkgLy8gKFVTMSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19VUzAgICAgICAgICgweEZGRkMwMTAwKSAvLyAoUERDX1VTMCkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1VTMCAgICAgICAgICAgICgweEZGRkMwMDAwKSAvLyAoVVMwKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfVFdJICAgICAgICAgICAgKDB4RkZGQjgwMDApIC8vIChUV0kpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9UQzIgICAgICAgICAgICAoMHhGRkZBMDA4MCkgLy8gKFRDMikgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1RDMSAgICAgICAgICAgICgweEZGRkEwMDQwKSAvLyAoVEMxKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfVEMwICAgICAgICAgICAgKDB4RkZGQTAwMDApIC8vIChUQzApIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9UQ0IgICAgICAgICAgICAoMHhGRkZBMDAwMCkgLy8gKFRDQikgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BXTUNfQ0gzICAgICAgICgweEZGRkNDMjYwKSAvLyAoUFdNQ19DSDMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QV01DX0NIMiAgICAgICAoMHhGRkZDQzI0MCkgLy8gKFBXTUNfQ0gyKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUFdNQ19DSDEgICAgICAgKDB4RkZGQ0MyMjApIC8vIChQV01DX0NIMSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BXTUNfQ0gwICAgICAgICgweEZGRkNDMjAwKSAvLyAoUFdNQ19DSDApIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QV01DICAgICAgICAgICAoMHhGRkZDQzAwMCkgLy8gKFBXTUMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9VRFAgICAgICAgICAgICAoMHhGRkZCMDAwMCkgLy8gKFVEUCkgQmFzZSBBZGRyZXNzDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgIE1FTU9SWSBNQVBQSU5HIERFRklOSVRJT05TIEZPUiBBVDkxU0FNN1M2NCAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotI2RlZmluZSBBVDkxQ19JU1JBTSAgICAgICAgICAoIDB4MDAyMDAwMDAgKSAgICAvKiBJbnRlcm5hbCBTUkFNIGJhc2UgYWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfSVNSQU1fU0laRSAgICAgKCAweDAwMDA0MDAwICkgICAgLyogSW50ZXJuYWwgU1JBTSBzaXplIGluIGJ5dGUgKDE2IEtieXRlKSAqLw0KLSNkZWZpbmUgQVQ5MUNfSUZMQVNIICAgICAgICAgKCAweDAwMTAwMDAwICkgICAgLyogSW50ZXJuYWwgUk9NIGJhc2UgYWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfSUZMQVNIX1NJWkUgICAgKCAweDAwMDEwMDAwICkgICAgLyogSW50ZXJuYWwgUk9NIHNpemUgaW4gYnl0ZSAoNjQgS2J5dGUpICovDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgIE1FTU9SWSBNQVBQSU5HIERFRklOSVRJT05TIEZPUiBBVDkxU0FNN1M2NA0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorI2RlZmluZSBBVDkxQ19JU1JBTQkgICAgICAgICAgICAgICgweDAwMjAwMDAwKSAvLyBJbnRlcm5hbCBTUkFNIGJhc2UgYWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfSVNSQU1fU0laRQkgICAgICAgICAoMHgwMDAwNDAwMCkgLy8gSW50ZXJuYWwgU1JBTSBzaXplIGluIGJ5dGUgKDE2IEtieXRlKQ0KKyNkZWZpbmUgQVQ5MUNfSUZMQVNICSAgICAgICAgICAgICAoMHgwMDEwMDAwMCkgLy8gSW50ZXJuYWwgUk9NIGJhc2UgYWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfSUZMQVNIX1NJWkUJICAgICAgICAoMHgwMDAxMDAwMCkgLy8gSW50ZXJuYWwgUk9NIHNpemUgaW4gYnl0ZSAoNjQgS2J5dGUpDQorDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvSUFSL0F0bWVsU0FNN1M2NC9BVDkxU0FNN1gxMjguaCBiL3BvcnRhYmxlL0lBUi9BdG1lbFNBTTdTNjQvQVQ5MVNBTTdYMTI4LmgKaW5kZXggOTE2NGQwYy4uYWU0ZjM1ZiAxMDA2NDQKLS0tIGEvcG9ydGFibGUvSUFSL0F0bWVsU0FNN1M2NC9BVDkxU0FNN1gxMjguaAorKysgYi9wb3J0YWJsZS9JQVIvQXRtZWxTQU03UzY0L0FUOTFTQU03WDEyOC5oCkBAIC0xLDI3NDMgKzEsMjcxNSBAQAotLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiAgICAgICAgICBBVE1FTCBNaWNyb2NvbnRyb2xsZXIgU29mdHdhcmUgU3VwcG9ydCAgLSAgUk9VU1NFVCAgLSAqLw0KLS8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyogIERJU0NMQUlNRVI6ICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFUTUVMICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SICovDQotLyogIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgKi8NCi0vKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVCBBUkUgKi8NCi0vKiAgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVRNRUwgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgKi8NCi0vKiAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCAqLw0KLS8qICBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgKi8NCi0vKiAgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiAqLw0KLS8qICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyAqLw0KLS8qICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsICovDQotLyogIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuICovDQotLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiBGaWxlIE5hbWUgICAgICAgICAgIDogQVQ5MVNBTTdYMTI4LmggKi8NCi0vKiBPYmplY3QgICAgICAgICAgICAgIDogQVQ5MVNBTTdYMTI4IGRlZmluaXRpb25zICovDQotLyogR2VuZXJhdGVkICAgICAgICAgICA6IEFUOTEgU1cgQXBwbGljYXRpb24gR3JvdXAgIDA1LzIwLzIwMDUgKDE2OjIyOjIzKSAqLw0KLS8qICovDQotLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9BVDkxU0FNN1gxMjgucGwvMS4xNC9UdWUgTWF5IDEwIDEyOjEyOjA1IDIwMDUvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvU1lTX1NBTTdYLnBsLzEuMy9UdWUgRmViICAxIDE3OjAxOjQzIDIwMDUvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvTUNfU0FNN1gucGwvMS4yL0ZyaSBNYXkgMjAgMTQ6MTM6MDQgMjAwNS8vICovDQotLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9QTUNfU0FNN1gucGwvMS40L1R1ZSBGZWIgIDggMTM6NTg6MTAgMjAwNS8vICovDQotLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9SU1RDX1NBTTdYLnBsLzEuMS9UdWUgRmViICAxIDE2OjE2OjI2IDIwMDUvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvVURQX1NBTTdYLnBsLzEuMS9UdWUgTWF5IDEwIDExOjM1OjM1IDIwMDUvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvUFdNX1NBTTdYLnBsLzEuMS9UdWUgTWF5IDEwIDExOjUzOjA3IDIwMDUvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvQUlDXzYwNzVCLnBsLzEuMy9GcmkgTWF5IDIwIDE0OjAxOjMwIDIwMDUvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvUElPXzYwNTdBLnBsLzEuMi9UaHUgRmViICAzIDEwOjE4OjI4IDIwMDUvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvUlRUQ182MDgxQS5wbC8xLjIvVHVlIE5vdiAgOSAxNDo0Mzo1OCAyMDA0Ly8gKi8NCi0vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL1BJVENfNjA3OUEucGwvMS4yL1R1ZSBOb3YgIDkgMTQ6NDM6NTYgMjAwNC8vICovDQotLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9XRFRDXzYwODBBLnBsLzEuMy9UdWUgTm92ICA5IDE0OjQ0OjAwIDIwMDQvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvVlJFR182MDg1Qi5wbC8xLjEvVHVlIEZlYiAgMSAxNjowNTo0OCAyMDA1Ly8gKi8NCi0vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL1BEQ182MDc0Qy5wbC8xLjIvVGh1IEZlYiAgMyAwODo0ODo1NCAyMDA1Ly8gKi8NCi0vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL0RCR1VfNjA1OUQucGwvMS4xL01vbiBKYW4gMzEgMTM6MTU6MzIgMjAwNS8vICovDQotLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9TUElfNjA4OEQucGwvMS4zL0ZyaSBNYXkgMjAgMTQ6MDg6NTkgMjAwNS8vICovDQotLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9VU182MDg5Qy5wbC8xLjEvTW9uIEp1bCAxMiAxODoyMzoyNiAyMDA0Ly8gKi8NCi0vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL1NTQ182MDc4QS5wbC8xLjEvVHVlIEp1bCAxMyAwNzo0NTo0MCAyMDA0Ly8gKi8NCi0vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL1RXSV82MDYxQS5wbC8xLjEvVHVlIEp1bCAxMyAwNzozODowNiAyMDA0Ly8gKi8NCi0vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL1RDXzYwODJBLnBsLzEuNy9GcmkgTWFyIDExIDEyOjUyOjE3IDIwMDUvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvQ0FOXzYwMTlCLnBsLzEuMS9UdWUgTWFyICA4IDEyOjQyOjIyIDIwMDUvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvRU1BQ0JfNjExOUEucGwvMS41L1RodSBGZWIgIDMgMTU6NTI6MDQgMjAwNS8vICovDQotLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9BRENfNjA1MUMucGwvMS4xL0ZyaSBPY3QgMTcgMDk6MTI6MzggMjAwMy8vICovDQotLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9BRVNfNjE0OUEucGwvMS4xMC9Nb24gRmViICA3IDA5OjQ0OjI1IDIwMDUvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvREVTM182MTUwQS5wbC8xLjEvTW9uIEphbiAxNyAwODozNDozMSAyMDA1Ly8gKi8NCi0vKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKy8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8gICAgICAgICAgQVRNRUwgTWljcm9jb250cm9sbGVyIFNvZnR3YXJlIFN1cHBvcnQgIC0gIFJPVVNTRVQgIC0NCisvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vICBESVNDTEFJTUVSOiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVE1FTCAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUg0KKy8vICBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GDQorLy8gIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQgQVJFDQorLy8gIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFUTUVMIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsDQorLy8gIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QNCisvLyAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsDQorLy8gIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YNCisvLyAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcNCisvLyAgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLA0KKy8vICBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKy8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8gRmlsZSBOYW1lICAgICAgICAgICA6IEFUOTFTQU03WDEyOC5oDQorLy8gT2JqZWN0ICAgICAgICAgICAgICA6IEFUOTFTQU03WDEyOCBkZWZpbml0aW9ucw0KKy8vIEdlbmVyYXRlZCAgICAgICAgICAgOiBBVDkxIFNXIEFwcGxpY2F0aW9uIEdyb3VwICAwNS8yMC8yMDA1ICgxNjoyMjoyMykNCisvLyANCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL0FUOTFTQU03WDEyOC5wbC8xLjE0L1R1ZSBNYXkgMTAgMTI6MTI6MDUgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9TWVNfU0FNN1gucGwvMS4zL1R1ZSBGZWIgIDEgMTc6MDE6NDMgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9NQ19TQU03WC5wbC8xLjIvRnJpIE1heSAyMCAxNDoxMzowNCAyMDA1Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1BNQ19TQU03WC5wbC8xLjQvVHVlIEZlYiAgOCAxMzo1ODoxMCAyMDA1Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1JTVENfU0FNN1gucGwvMS4xL1R1ZSBGZWIgIDEgMTY6MTY6MjYgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9VRFBfU0FNN1gucGwvMS4xL1R1ZSBNYXkgMTAgMTE6MzU6MzUgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9QV01fU0FNN1gucGwvMS4xL1R1ZSBNYXkgMTAgMTE6NTM6MDcgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9BSUNfNjA3NUIucGwvMS4zL0ZyaSBNYXkgMjAgMTQ6MDE6MzAgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9QSU9fNjA1N0EucGwvMS4yL1RodSBGZWIgIDMgMTA6MTg6MjggMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9SVFRDXzYwODFBLnBsLzEuMi9UdWUgTm92ICA5IDE0OjQzOjU4IDIwMDQvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvUElUQ182MDc5QS5wbC8xLjIvVHVlIE5vdiAgOSAxNDo0Mzo1NiAyMDA0Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1dEVENfNjA4MEEucGwvMS4zL1R1ZSBOb3YgIDkgMTQ6NDQ6MDAgMjAwNC8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9WUkVHXzYwODVCLnBsLzEuMS9UdWUgRmViICAxIDE2OjA1OjQ4IDIwMDUvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvUERDXzYwNzRDLnBsLzEuMi9UaHUgRmViICAzIDA4OjQ4OjU0IDIwMDUvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvREJHVV82MDU5RC5wbC8xLjEvTW9uIEphbiAzMSAxMzoxNTozMiAyMDA1Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1NQSV82MDg4RC5wbC8xLjMvRnJpIE1heSAyMCAxNDowODo1OSAyMDA1Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1VTXzYwODlDLnBsLzEuMS9Nb24gSnVsIDEyIDE4OjIzOjI2IDIwMDQvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvU1NDXzYwNzhBLnBsLzEuMS9UdWUgSnVsIDEzIDA3OjQ1OjQwIDIwMDQvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvVFdJXzYwNjFBLnBsLzEuMS9UdWUgSnVsIDEzIDA3OjM4OjA2IDIwMDQvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvVENfNjA4MkEucGwvMS43L0ZyaSBNYXIgMTEgMTI6NTI6MTcgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9DQU5fNjAxOUIucGwvMS4xL1R1ZSBNYXIgIDggMTI6NDI6MjIgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9FTUFDQl82MTE5QS5wbC8xLjUvVGh1IEZlYiAgMyAxNTo1MjowNCAyMDA1Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL0FEQ182MDUxQy5wbC8xLjEvRnJpIE9jdCAxNyAwOToxMjozOCAyMDAzLy8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL0FFU182MTQ5QS5wbC8xLjEwL01vbiBGZWIgIDcgMDk6NDQ6MjUgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9ERVMzXzYxNTBBLnBsLzEuMS9Nb24gSmFuIDE3IDA4OjM0OjMxIDIwMDUvLw0KKy8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogDQogI2lmbmRlZiBBVDkxU0FNN1gxMjhfSA0KICNkZWZpbmUgQVQ5MVNBTTdYMTI4X0gNCiANCi10eXBlZGVmIHZvbGF0aWxlIHVuc2lnbmVkIGludCBBVDkxX1JFRzsgLyogSGFyZHdhcmUgcmVnaXN0ZXIgZGVmaW5pdGlvbiAqLw0KK3R5cGVkZWYgdm9sYXRpbGUgdW5zaWduZWQgaW50IEFUOTFfUkVHOy8vIEhhcmR3YXJlIHJlZ2lzdGVyIGRlZmluaXRpb24NCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFN5c3RlbSBQZXJpcGhlcmFscyAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotdHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1NZUw0KLXsNCi0gICAgQVQ5MV9SRUcgQUlDX1NNUlsgMzIgXTsgICAgIC8qIFNvdXJjZSBNb2RlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFJQ19TVlJbIDMyIF07ICAgICAvKiBTb3VyY2UgVmVjdG9yIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFJQ19JVlI7ICAgICAgICAgICAvKiBJUlEgVmVjdG9yIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFJQ19GVlI7ICAgICAgICAgICAvKiBGSVEgVmVjdG9yIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFJQ19JU1I7ICAgICAgICAgICAvKiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFJQ19JUFI7ICAgICAgICAgICAvKiBJbnRlcnJ1cHQgUGVuZGluZyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBSUNfSU1SOyAgICAgICAgICAgLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUlDX0NJU1I7ICAgICAgICAgIC8qIENvcmUgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDBbIDIgXTsgICAgLyogKi8NCi0gICAgQVQ5MV9SRUcgQUlDX0lFQ1I7ICAgICAgICAgIC8qIEludGVycnVwdCBFbmFibGUgQ29tbWFuZCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBSUNfSURDUjsgICAgICAgICAgLyogSW50ZXJydXB0IERpc2FibGUgQ29tbWFuZCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBSUNfSUNDUjsgICAgICAgICAgLyogSW50ZXJydXB0IENsZWFyIENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUlDX0lTQ1I7ICAgICAgICAgIC8qIEludGVycnVwdCBTZXQgQ29tbWFuZCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBSUNfRU9JQ1I7ICAgICAgICAgLyogRW5kIG9mIEludGVycnVwdCBDb21tYW5kIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFJQ19TUFU7ICAgICAgICAgICAvKiBTcHVyaW91cyBWZWN0b3IgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUlDX0RDUjsgICAgICAgICAgIC8qIERlYnVnIENvbnRyb2wgUmVnaXN0ZXIgKFByb3RlY3QpICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMVsgMSBdOyAgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBBSUNfRkZFUjsgICAgICAgICAgLyogRmFzdCBGb3JjaW5nIEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBSUNfRkZEUjsgICAgICAgICAgLyogRmFzdCBGb3JjaW5nIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUlDX0ZGU1I7ICAgICAgICAgIC8qIEZhc3QgRm9yY2luZyBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQyWyA0NSBdOyAgIC8qICovDQotICAgIEFUOTFfUkVHIERCR1VfQ1I7ICAgICAgICAgICAvKiBDb250cm9sIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfTVI7ICAgICAgICAgICAvKiBNb2RlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfSUVSOyAgICAgICAgICAvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfSURSOyAgICAgICAgICAvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX0lNUjsgICAgICAgICAgLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9DU1I7ICAgICAgICAgIC8qIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfUkhSOyAgICAgICAgICAvKiBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfVEhSOyAgICAgICAgICAvKiBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfQlJHUjsgICAgICAgICAvKiBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkM1sgNyBdOyAgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX0NJRFI7ICAgICAgICAgLyogQ2hpcCBJRCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX0VYSUQ7ICAgICAgICAgLyogQ2hpcCBJRCBFeHRlbnNpb24gUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9GTlRSOyAgICAgICAgIC8qIEZvcmNlIE5UUlNUIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkNFsgNDUgXTsgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX1JQUjsgICAgICAgICAgLyogUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfUkNSOyAgICAgICAgICAvKiBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9UUFI7ICAgICAgICAgIC8qIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9UQ1I7ICAgICAgICAgIC8qIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9STlBSOyAgICAgICAgIC8qIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfUk5DUjsgICAgICAgICAvKiBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX1ROUFI7ICAgICAgICAgLyogVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfVE5DUjsgICAgICAgICAvKiBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9QVENSOyAgICAgICAgIC8qIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfUFRTUjsgICAgICAgICAvKiBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkNVsgNTQgXTsgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBQSU9BX1BFUjsgICAgICAgICAgLyogUElPIEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9BX1BEUjsgICAgICAgICAgLyogUElPIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQV9QU1I7ICAgICAgICAgIC8qIFBJTyBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQ2WyAxIF07ICAgIC8qICovDQotICAgIEFUOTFfUkVHIFBJT0FfT0VSOyAgICAgICAgICAvKiBPdXRwdXQgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0FfT0RSOyAgICAgICAgICAvKiBPdXRwdXQgRGlzYWJsZSBSZWdpc3RlcnIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQV9PU1I7ICAgICAgICAgIC8qIE91dHB1dCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQ3WyAxIF07ICAgIC8qICovDQotICAgIEFUOTFfUkVHIFBJT0FfSUZFUjsgICAgICAgICAvKiBJbnB1dCBGaWx0ZXIgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0FfSUZEUjsgICAgICAgICAvKiBJbnB1dCBGaWx0ZXIgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9BX0lGU1I7ICAgICAgICAgLyogSW5wdXQgRmlsdGVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDhbIDEgXTsgICAgLyogKi8NCi0gICAgQVQ5MV9SRUcgUElPQV9TT0RSOyAgICAgICAgIC8qIFNldCBPdXRwdXQgRGF0YSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9BX0NPRFI7ICAgICAgICAgLyogQ2xlYXIgT3V0cHV0IERhdGEgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQV9PRFNSOyAgICAgICAgIC8qIE91dHB1dCBEYXRhIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9BX1BEU1I7ICAgICAgICAgLyogUGluIERhdGEgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0FfSUVSOyAgICAgICAgICAvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0FfSURSOyAgICAgICAgICAvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9BX0lNUjsgICAgICAgICAgLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQV9JU1I7ICAgICAgICAgIC8qIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQV9NREVSOyAgICAgICAgIC8qIE11bHRpLWRyaXZlciBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQV9NRERSOyAgICAgICAgIC8qIE11bHRpLWRyaXZlciBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0FfTURTUjsgICAgICAgICAvKiBNdWx0aS1kcml2ZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkOVsgMSBdOyAgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBQSU9BX1BQVURSOyAgICAgICAgLyogUHVsbC11cCBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0FfUFBVRVI7ICAgICAgICAvKiBQdWxsLXVwIEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9BX1BQVVNSOyAgICAgICAgLyogUHVsbC11cCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQxMFsgMSBdOyAgIC8qICovDQotICAgIEFUOTFfUkVHIFBJT0FfQVNSOyAgICAgICAgICAvKiBTZWxlY3QgQSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9BX0JTUjsgICAgICAgICAgLyogU2VsZWN0IEIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQV9BQlNSOyAgICAgICAgIC8qIEFCIFNlbGVjdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQxMVsgOSBdOyAgIC8qICovDQotICAgIEFUOTFfUkVHIFBJT0FfT1dFUjsgICAgICAgICAvKiBPdXRwdXQgV3JpdGUgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0FfT1dEUjsgICAgICAgICAvKiBPdXRwdXQgV3JpdGUgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9BX09XU1I7ICAgICAgICAgLyogT3V0cHV0IFdyaXRlIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDEyWyA4NSBdOyAgLyogKi8NCi0gICAgQVQ5MV9SRUcgUElPQl9QRVI7ICAgICAgICAgIC8qIFBJTyBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQl9QRFI7ICAgICAgICAgIC8qIFBJTyBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0JfUFNSOyAgICAgICAgICAvKiBQSU8gU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMTNbIDEgXTsgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBQSU9CX09FUjsgICAgICAgICAgLyogT3V0cHV0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9CX09EUjsgICAgICAgICAgLyogT3V0cHV0IERpc2FibGUgUmVnaXN0ZXJyICovDQotICAgIEFUOTFfUkVHIFBJT0JfT1NSOyAgICAgICAgICAvKiBPdXRwdXQgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMTRbIDEgXTsgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBQSU9CX0lGRVI7ICAgICAgICAgLyogSW5wdXQgRmlsdGVyIEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9CX0lGRFI7ICAgICAgICAgLyogSW5wdXQgRmlsdGVyIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQl9JRlNSOyAgICAgICAgIC8qIElucHV0IEZpbHRlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQxNVsgMSBdOyAgIC8qICovDQotICAgIEFUOTFfUkVHIFBJT0JfU09EUjsgICAgICAgICAvKiBTZXQgT3V0cHV0IERhdGEgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQl9DT0RSOyAgICAgICAgIC8qIENsZWFyIE91dHB1dCBEYXRhIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0JfT0RTUjsgICAgICAgICAvKiBPdXRwdXQgRGF0YSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQl9QRFNSOyAgICAgICAgIC8qIFBpbiBEYXRhIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9CX0lFUjsgICAgICAgICAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9CX0lEUjsgICAgICAgICAgLyogSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQl9JTVI7ICAgICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0JfSVNSOyAgICAgICAgICAvKiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0JfTURFUjsgICAgICAgICAvKiBNdWx0aS1kcml2ZXIgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0JfTUREUjsgICAgICAgICAvKiBNdWx0aS1kcml2ZXIgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9CX01EU1I7ICAgICAgICAgLyogTXVsdGktZHJpdmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDE2WyAxIF07ICAgLyogKi8NCi0gICAgQVQ5MV9SRUcgUElPQl9QUFVEUjsgICAgICAgIC8qIFB1bGwtdXAgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9CX1BQVUVSOyAgICAgICAgLyogUHVsbC11cCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQl9QUFVTUjsgICAgICAgIC8qIFB1bGwtdXAgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMTdbIDEgXTsgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBQSU9CX0FTUjsgICAgICAgICAgLyogU2VsZWN0IEEgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQl9CU1I7ICAgICAgICAgIC8qIFNlbGVjdCBCIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0JfQUJTUjsgICAgICAgICAvKiBBQiBTZWxlY3QgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMThbIDkgXTsgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBQSU9CX09XRVI7ICAgICAgICAgLyogT3V0cHV0IFdyaXRlIEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9CX09XRFI7ICAgICAgICAgLyogT3V0cHV0IFdyaXRlIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQl9PV1NSOyAgICAgICAgIC8qIE91dHB1dCBXcml0ZSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQxOVsgMzQxIF07IC8qICovDQotICAgIEFUOTFfUkVHIFBNQ19TQ0VSOyAgICAgICAgICAvKiBTeXN0ZW0gQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBNQ19TQ0RSOyAgICAgICAgICAvKiBTeXN0ZW0gQ2xvY2sgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQTUNfU0NTUjsgICAgICAgICAgLyogU3lzdGVtIENsb2NrIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDIwWyAxIF07ICAgLyogKi8NCi0gICAgQVQ5MV9SRUcgUE1DX1BDRVI7ICAgICAgICAgIC8qIFBlcmlwaGVyYWwgQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBNQ19QQ0RSOyAgICAgICAgICAvKiBQZXJpcGhlcmFsIENsb2NrIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUE1DX1BDU1I7ICAgICAgICAgIC8qIFBlcmlwaGVyYWwgQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMjFbIDEgXTsgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBQTUNfTU9SOyAgICAgICAgICAgLyogTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBNQ19NQ0ZSOyAgICAgICAgICAvKiBNYWluIENsb2NrICBGcmVxdWVuY3kgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQyMlsgMSBdOyAgIC8qICovDQotICAgIEFUOTFfUkVHIFBNQ19QTExSOyAgICAgICAgICAvKiBQTEwgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUE1DX01DS1I7ICAgICAgICAgIC8qIE1hc3RlciBDbG9jayBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDIzWyAzIF07ICAgLyogKi8NCi0gICAgQVQ5MV9SRUcgUE1DX1BDS1JbIDQgXTsgICAgIC8qIFByb2dyYW1tYWJsZSBDbG9jayBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDI0WyA0IF07ICAgLyogKi8NCi0gICAgQVQ5MV9SRUcgUE1DX0lFUjsgICAgICAgICAgIC8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUE1DX0lEUjsgICAgICAgICAgIC8qIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBNQ19TUjsgICAgICAgICAgICAvKiBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUE1DX0lNUjsgICAgICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMjVbIDM2IF07ICAvKiAqLw0KLSAgICBBVDkxX1JFRyBSU1RDX1JDUjsgICAgICAgICAgLyogUmVzZXQgQ29udHJvbCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSU1RDX1JTUjsgICAgICAgICAgLyogUmVzZXQgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJTVENfUk1SOyAgICAgICAgICAvKiBSZXNldCBNb2RlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMjZbIDUgXTsgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBSVFRDX1JUTVI7ICAgICAgICAgLyogUmVhbC10aW1lIE1vZGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUlRUQ19SVEFSOyAgICAgICAgIC8qIFJlYWwtdGltZSBBbGFybSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSVFRDX1JUVlI7ICAgICAgICAgLyogUmVhbC10aW1lIFZhbHVlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJUVENfUlRTUjsgICAgICAgICAvKiBSZWFsLXRpbWUgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJVENfUElNUjsgICAgICAgICAvKiBQZXJpb2QgSW50ZXJ2YWwgTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSVRDX1BJU1I7ICAgICAgICAgLyogUGVyaW9kIEludGVydmFsIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSVRDX1BJVlI7ICAgICAgICAgLyogUGVyaW9kIEludGVydmFsIFZhbHVlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJVENfUElJUjsgICAgICAgICAvKiBQZXJpb2QgSW50ZXJ2YWwgSW1hZ2UgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgV0RUQ19XRENSOyAgICAgICAgIC8qIFdhdGNoZG9nIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgV0RUQ19XRE1SOyAgICAgICAgIC8qIFdhdGNoZG9nIE1vZGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgV0RUQ19XRFNSOyAgICAgICAgIC8qIFdhdGNoZG9nIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDI3WyA1IF07ICAgLyogKi8NCi0gICAgQVQ5MV9SRUcgVlJFR19NUjsgICAgICAgICAgIC8qIFZvbHRhZ2UgUmVndWxhdG9yIE1vZGUgUmVnaXN0ZXIgKi8NCi19IEFUOTFTX1NZUywgKiBBVDkxUFNfU1lTOw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgU3lzdGVtIFBlcmlwaGVyYWxzDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfU1lTIHsNCisJQVQ5MV9SRUcJIEFJQ19TTVJbMzJdOyAJLy8gU291cmNlIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19TVlJbMzJdOyAJLy8gU291cmNlIFZlY3RvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0lWUjsgCS8vIElSUSBWZWN0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19GVlI7IAkvLyBGSVEgVmVjdG9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfSVNSOyAJLy8gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0lQUjsgCS8vIEludGVycnVwdCBQZW5kaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19DSVNSOyAJLy8gQ29yZSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbMl07IAkvLyANCisJQVQ5MV9SRUcJIEFJQ19JRUNSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBDb21tYW5kIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfSURDUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIENvbW1hbmQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19JQ0NSOyAJLy8gSW50ZXJydXB0IENsZWFyIENvbW1hbmQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19JU0NSOyAJLy8gSW50ZXJydXB0IFNldCBDb21tYW5kIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfRU9JQ1I7IAkvLyBFbmQgb2YgSW50ZXJydXB0IENvbW1hbmQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19TUFU7IAkvLyBTcHVyaW91cyBWZWN0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19EQ1I7IAkvLyBEZWJ1ZyBDb250cm9sIFJlZ2lzdGVyIChQcm90ZWN0KQ0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBBSUNfRkZFUjsgCS8vIEZhc3QgRm9yY2luZyBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19GRkRSOyAJLy8gRmFzdCBGb3JjaW5nIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19GRlNSOyAJLy8gRmFzdCBGb3JjaW5nIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQyWzQ1XTsgCS8vIA0KKwlBVDkxX1JFRwkgREJHVV9DUjsgCS8vIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfTVI7IAkvLyBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX0lFUjsgCS8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfQ1NSOyAJLy8gQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfUkhSOyAJLy8gUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9USFI7IAkvLyBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX0JSR1I7IAkvLyBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDNbN107IAkvLyANCisJQVQ5MV9SRUcJIERCR1VfQ0lEUjsgCS8vIENoaXAgSUQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfRVhJRDsgCS8vIENoaXAgSUQgRXh0ZW5zaW9uIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX0ZOVFI7IAkvLyBGb3JjZSBOVFJTVCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQ0WzQ1XTsgCS8vIA0KKwlBVDkxX1JFRwkgREJHVV9SUFI7IAkvLyBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfUkNSOyAJLy8gUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1RQUjsgCS8vIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfVENSOyAJLy8gVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9STlBSOyAJLy8gUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfUk5DUjsgCS8vIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1ROUFI7IAkvLyBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfVE5DUjsgCS8vIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9QVENSOyAJLy8gUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfUFRTUjsgCS8vIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkNVs1NF07IAkvLyANCisJQVQ5MV9SRUcJIFBJT0FfUEVSOyAJLy8gUElPIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9QRFI7IAkvLyBQSU8gRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9QU1I7IAkvLyBQSU8gU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDZbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT0FfT0VSOyAJLy8gT3V0cHV0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9PRFI7IAkvLyBPdXRwdXQgRGlzYWJsZSBSZWdpc3RlcnINCisJQVQ5MV9SRUcJIFBJT0FfT1NSOyAJLy8gT3V0cHV0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQ3WzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9BX0lGRVI7IAkvLyBJbnB1dCBGaWx0ZXIgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX0lGRFI7IAkvLyBJbnB1dCBGaWx0ZXIgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9JRlNSOyAJLy8gSW5wdXQgRmlsdGVyIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQ4WzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9BX1NPRFI7IAkvLyBTZXQgT3V0cHV0IERhdGEgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0FfQ09EUjsgCS8vIENsZWFyIE91dHB1dCBEYXRhIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX09EU1I7IAkvLyBPdXRwdXQgRGF0YSBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0FfUERTUjsgCS8vIFBpbiBEYXRhIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX0lEUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX0lTUjsgCS8vIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0FfTURFUjsgCS8vIE11bHRpLWRyaXZlciBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0FfTUREUjsgCS8vIE11bHRpLWRyaXZlciBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX01EU1I7IAkvLyBNdWx0aS1kcml2ZXIgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDlbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT0FfUFBVRFI7IAkvLyBQdWxsLXVwIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0FfUFBVRVI7IAkvLyBQdWxsLXVwIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9QUFVTUjsgCS8vIFB1bGwtdXAgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDEwWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9BX0FTUjsgCS8vIFNlbGVjdCBBIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX0JTUjsgCS8vIFNlbGVjdCBCIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX0FCU1I7IAkvLyBBQiBTZWxlY3QgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDExWzldOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9BX09XRVI7IAkvLyBPdXRwdXQgV3JpdGUgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX09XRFI7IAkvLyBPdXRwdXQgV3JpdGUgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9PV1NSOyAJLy8gT3V0cHV0IFdyaXRlIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxMls4NV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT0JfUEVSOyAJLy8gUElPIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9QRFI7IAkvLyBQSU8gRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9QU1I7IAkvLyBQSU8gU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDEzWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9CX09FUjsgCS8vIE91dHB1dCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfT0RSOyAJLy8gT3V0cHV0IERpc2FibGUgUmVnaXN0ZXJyDQorCUFUOTFfUkVHCSBQSU9CX09TUjsgCS8vIE91dHB1dCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMTRbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT0JfSUZFUjsgCS8vIElucHV0IEZpbHRlciBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfSUZEUjsgCS8vIElucHV0IEZpbHRlciBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX0lGU1I7IAkvLyBJbnB1dCBGaWx0ZXIgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDE1WzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9CX1NPRFI7IAkvLyBTZXQgT3V0cHV0IERhdGEgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfQ09EUjsgCS8vIENsZWFyIE91dHB1dCBEYXRhIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX09EU1I7IAkvLyBPdXRwdXQgRGF0YSBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfUERTUjsgCS8vIFBpbiBEYXRhIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX0lEUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX0lTUjsgCS8vIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfTURFUjsgCS8vIE11bHRpLWRyaXZlciBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfTUREUjsgCS8vIE11bHRpLWRyaXZlciBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX01EU1I7IAkvLyBNdWx0aS1kcml2ZXIgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDE2WzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9CX1BQVURSOyAJLy8gUHVsbC11cCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX1BQVUVSOyAJLy8gUHVsbC11cCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfUFBVU1I7IAkvLyBQdWxsLXVwIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxN1sxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUElPQl9BU1I7IAkvLyBTZWxlY3QgQSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9CU1I7IAkvLyBTZWxlY3QgQiBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9BQlNSOyAJLy8gQUIgU2VsZWN0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxOFs5XTsgCS8vIA0KKwlBVDkxX1JFRwkgUElPQl9PV0VSOyAJLy8gT3V0cHV0IFdyaXRlIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9PV0RSOyAJLy8gT3V0cHV0IFdyaXRlIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfT1dTUjsgCS8vIE91dHB1dCBXcml0ZSBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMTlbMzQxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUE1DX1NDRVI7IAkvLyBTeXN0ZW0gQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfU0NEUjsgCS8vIFN5c3RlbSBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfU0NTUjsgCS8vIFN5c3RlbSBDbG9jayBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMjBbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBNQ19QQ0VSOyAJLy8gUGVyaXBoZXJhbCBDbG9jayBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19QQ0RSOyAJLy8gUGVyaXBoZXJhbCBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfUENTUjsgCS8vIFBlcmlwaGVyYWwgQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDIxWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQTUNfTU9SOyAJLy8gTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfTUNGUjsgCS8vIE1haW4gQ2xvY2sgIEZyZXF1ZW5jeSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQyMlsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUE1DX1BMTFI7IAkvLyBQTEwgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19NQ0tSOyAJLy8gTWFzdGVyIENsb2NrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDIzWzNdOyAJLy8gDQorCUFUOTFfUkVHCSBQTUNfUENLUls0XTsgCS8vIFByb2dyYW1tYWJsZSBDbG9jayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQyNFs0XTsgCS8vIA0KKwlBVDkxX1JFRwkgUE1DX0lFUjsgCS8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUE1DX1NSOyAJLy8gU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMjVbMzZdOyAJLy8gDQorCUFUOTFfUkVHCSBSU1RDX1JDUjsgCS8vIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJTVENfUlNSOyAJLy8gUmVzZXQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSU1RDX1JNUjsgCS8vIFJlc2V0IE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMjZbNV07IAkvLyANCisJQVQ5MV9SRUcJIFJUVENfUlRNUjsgCS8vIFJlYWwtdGltZSBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSVFRDX1JUQVI7IAkvLyBSZWFsLXRpbWUgQWxhcm0gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJUVENfUlRWUjsgCS8vIFJlYWwtdGltZSBWYWx1ZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUlRUQ19SVFNSOyAJLy8gUmVhbC10aW1lIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElUQ19QSU1SOyAJLy8gUGVyaW9kIEludGVydmFsIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJVENfUElTUjsgCS8vIFBlcmlvZCBJbnRlcnZhbCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJVENfUElWUjsgCS8vIFBlcmlvZCBJbnRlcnZhbCBWYWx1ZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElUQ19QSUlSOyAJLy8gUGVyaW9kIEludGVydmFsIEltYWdlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBXRFRDX1dEQ1I7IAkvLyBXYXRjaGRvZyBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBXRFRDX1dETVI7IAkvLyBXYXRjaGRvZyBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBXRFRDX1dEU1I7IAkvLyBXYXRjaGRvZyBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMjdbNV07IAkvLyANCisJQVQ5MV9SRUcJIFZSRUdfTVI7IAkvLyBWb2x0YWdlIFJlZ3VsYXRvciBNb2RlIFJlZ2lzdGVyDQorfSBBVDkxU19TWVMsICpBVDkxUFNfU1lTOw0KIA0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLXR5cGVkZWYgc3RydWN0IF9BVDkxU19BSUMNCi17DQotICAgIEFUOTFfUkVHIEFJQ19TTVJbIDMyIF07ICAvKiBTb3VyY2UgTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBSUNfU1ZSWyAzMiBdOyAgLyogU291cmNlIFZlY3RvciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBSUNfSVZSOyAgICAgICAgLyogSVJRIFZlY3RvciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBSUNfRlZSOyAgICAgICAgLyogRklRIFZlY3RvciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBSUNfSVNSOyAgICAgICAgLyogSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBSUNfSVBSOyAgICAgICAgLyogSW50ZXJydXB0IFBlbmRpbmcgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUlDX0lNUjsgICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFJQ19DSVNSOyAgICAgICAvKiBDb3JlIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQwWyAyIF07IC8qICovDQotICAgIEFUOTFfUkVHIEFJQ19JRUNSOyAgICAgICAvKiBJbnRlcnJ1cHQgRW5hYmxlIENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUlDX0lEQ1I7ICAgICAgIC8qIEludGVycnVwdCBEaXNhYmxlIENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUlDX0lDQ1I7ICAgICAgIC8qIEludGVycnVwdCBDbGVhciBDb21tYW5kIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFJQ19JU0NSOyAgICAgICAvKiBJbnRlcnJ1cHQgU2V0IENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUlDX0VPSUNSOyAgICAgIC8qIEVuZCBvZiBJbnRlcnJ1cHQgQ29tbWFuZCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBSUNfU1BVOyAgICAgICAgLyogU3B1cmlvdXMgVmVjdG9yIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFJQ19EQ1I7ICAgICAgICAvKiBEZWJ1ZyBDb250cm9sIFJlZ2lzdGVyIChQcm90ZWN0KSAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDFbIDEgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgQUlDX0ZGRVI7ICAgICAgIC8qIEZhc3QgRm9yY2luZyBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUlDX0ZGRFI7ICAgICAgIC8qIEZhc3QgRm9yY2luZyBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFJQ19GRlNSOyAgICAgICAvKiBGYXN0IEZvcmNpbmcgU3RhdHVzIFJlZ2lzdGVyICovDQotfSBBVDkxU19BSUMsICogQVQ5MVBTX0FJQzsNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfQUlDIHsNCisJQVQ5MV9SRUcJIEFJQ19TTVJbMzJdOyAJLy8gU291cmNlIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19TVlJbMzJdOyAJLy8gU291cmNlIFZlY3RvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0lWUjsgCS8vIElSUSBWZWN0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19GVlI7IAkvLyBGSVEgVmVjdG9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfSVNSOyAJLy8gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0lQUjsgCS8vIEludGVycnVwdCBQZW5kaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19DSVNSOyAJLy8gQ29yZSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbMl07IAkvLyANCisJQVQ5MV9SRUcJIEFJQ19JRUNSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBDb21tYW5kIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfSURDUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIENvbW1hbmQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19JQ0NSOyAJLy8gSW50ZXJydXB0IENsZWFyIENvbW1hbmQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19JU0NSOyAJLy8gSW50ZXJydXB0IFNldCBDb21tYW5kIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfRU9JQ1I7IAkvLyBFbmQgb2YgSW50ZXJydXB0IENvbW1hbmQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19TUFU7IAkvLyBTcHVyaW91cyBWZWN0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19EQ1I7IAkvLyBEZWJ1ZyBDb250cm9sIFJlZ2lzdGVyIChQcm90ZWN0KQ0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBBSUNfRkZFUjsgCS8vIEZhc3QgRm9yY2luZyBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19GRkRSOyAJLy8gRmFzdCBGb3JjaW5nIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19GRlNSOyAJLy8gRmFzdCBGb3JjaW5nIFN0YXR1cyBSZWdpc3Rlcg0KK30gQVQ5MVNfQUlDLCAqQVQ5MVBTX0FJQzsNCiANCi0vKiAtLS0tLS0tLSBBSUNfU01SIDogKEFJQyBPZmZzZXQ6IDB4MCkgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX1BSSU9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDcgPDwgMCApIC8qIChBSUMpIFByaW9yaXR5IExldmVsICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUlDX1BSSU9SX0xPV0VTVCAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCApICAgICAgLyogKEFJQykgTG93ZXN0IHByaW9yaXR5IGxldmVsICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUlDX1BSSU9SX0hJR0hFU1QgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NyApICAgICAgLyogKEFJQykgSGlnaGVzdCBwcmlvcml0eSBsZXZlbCAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX1NSQ1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgNSApIC8qIChBSUMpIEludGVycnVwdCBTb3VyY2UgVHlwZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FJQ19TUkNUWVBFX0lOVF9ISUdIX0xFVkVMICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgNSApIC8qIChBSUMpIEludGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBIaWdoLWxldmVsIFNlbnNpdGl2ZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FJQ19TUkNUWVBFX0VYVF9MT1dfTEVWRUwgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgNSApIC8qIChBSUMpIEV4dGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBMb3ctbGV2ZWwgU2Vuc2l0aXZlICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUlDX1NSQ1RZUEVfSU5UX1BPU0lUSVZFX0VER0UgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA1ICkgLyogKEFJQykgSW50ZXJuYWwgU291cmNlcyBDb2RlIExhYmVsIFBvc2l0aXZlIEVkZ2UgdHJpZ2dlcmVkICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUlDX1NSQ1RZUEVfRVhUX05FR0FUSVZFX0VER0UgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA1ICkgLyogKEFJQykgRXh0ZXJuYWwgU291cmNlcyBDb2RlIExhYmVsIE5lZ2F0aXZlIEVkZ2UgdHJpZ2dlcmVkICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUlDX1NSQ1RZUEVfSElHSF9MRVZFTCAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCA1ICkgLyogKEFJQykgSW50ZXJuYWwgT3IgRXh0ZXJuYWwgU291cmNlcyBDb2RlIExhYmVsIEhpZ2gtbGV2ZWwgU2Vuc2l0aXZlICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUlDX1NSQ1RZUEVfUE9TSVRJVkVfRURHRSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCA1ICkgLyogKEFJQykgSW50ZXJuYWwgT3IgRXh0ZXJuYWwgU291cmNlcyBDb2RlIExhYmVsIFBvc2l0aXZlIEVkZ2UgdHJpZ2dlcmVkICovDQotLyogLS0tLS0tLS0gQUlDX0NJU1IgOiAoQUlDIE9mZnNldDogMHgxMTQpIEFJQyBDb3JlIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19ORklRICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAvKiAoQUlDKSBORklRIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX05JUlEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApIC8qIChBSUMpIE5JUlEgU3RhdHVzICovDQotLyogLS0tLS0tLS0gQUlDX0RDUiA6IChBSUMgT2Zmc2V0OiAweDEzOCkgQUlDIERlYnVnIENvbnRyb2wgUmVnaXN0ZXIgKFByb3RlY3QpIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19BSUNfRENSX1BST1QgICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgLyogKEFJQykgUHJvdGVjdGlvbiBNb2RlICovDQotI2RlZmluZSBBVDkxQ19BSUNfRENSX0dNU0sgICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgLyogKEFJQykgR2VuZXJhbCBNYXNrICovDQorLy8gLS0tLS0tLS0gQUlDX1NNUiA6IChBSUMgT2Zmc2V0OiAweDApIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BSUNfUFJJT1IgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAgMCkgLy8gKEFJQykgUHJpb3JpdHkgTGV2ZWwNCisjZGVmaW5lIAlBVDkxQ19BSUNfUFJJT1JfTE9XRVNUICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCkgLy8gKEFJQykgTG93ZXN0IHByaW9yaXR5IGxldmVsDQorI2RlZmluZSAJQVQ5MUNfQUlDX1BSSU9SX0hJR0hFU1QgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDcpIC8vIChBSUMpIEhpZ2hlc3QgcHJpb3JpdHkgbGV2ZWwNCisjZGVmaW5lIEFUOTFDX0FJQ19TUkNUWVBFICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA1KSAvLyAoQUlDKSBJbnRlcnJ1cHQgU291cmNlIFR5cGUNCisjZGVmaW5lIAlBVDkxQ19BSUNfU1JDVFlQRV9JTlRfSElHSF9MRVZFTCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA1KSAvLyAoQUlDKSBJbnRlcm5hbCBTb3VyY2VzIENvZGUgTGFiZWwgSGlnaC1sZXZlbCBTZW5zaXRpdmUNCisjZGVmaW5lIAlBVDkxQ19BSUNfU1JDVFlQRV9FWFRfTE9XX0xFVkVMICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA1KSAvLyAoQUlDKSBFeHRlcm5hbCBTb3VyY2VzIENvZGUgTGFiZWwgTG93LWxldmVsIFNlbnNpdGl2ZQ0KKyNkZWZpbmUgCUFUOTFDX0FJQ19TUkNUWVBFX0lOVF9QT1NJVElWRV9FREdFICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChBSUMpIEludGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBQb3NpdGl2ZSBFZGdlIHRyaWdnZXJlZA0KKyNkZWZpbmUgCUFUOTFDX0FJQ19TUkNUWVBFX0VYVF9ORUdBVElWRV9FREdFICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChBSUMpIEV4dGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBOZWdhdGl2ZSBFZGdlIHRyaWdnZXJlZA0KKyNkZWZpbmUgCUFUOTFDX0FJQ19TUkNUWVBFX0hJR0hfTEVWRUwgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDUpIC8vIChBSUMpIEludGVybmFsIE9yIEV4dGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBIaWdoLWxldmVsIFNlbnNpdGl2ZQ0KKyNkZWZpbmUgCUFUOTFDX0FJQ19TUkNUWVBFX1BPU0lUSVZFX0VER0UgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDUpIC8vIChBSUMpIEludGVybmFsIE9yIEV4dGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBQb3NpdGl2ZSBFZGdlIHRyaWdnZXJlZA0KKy8vIC0tLS0tLS0tIEFJQ19DSVNSIDogKEFJQyBPZmZzZXQ6IDB4MTE0KSBBSUMgQ29yZSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQUlDX05GSVEgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChBSUMpIE5GSVEgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19BSUNfTklSUSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKEFJQykgTklSUSBTdGF0dXMNCisvLyAtLS0tLS0tLSBBSUNfRENSIDogKEFJQyBPZmZzZXQ6IDB4MTM4KSBBSUMgRGVidWcgQ29udHJvbCBSZWdpc3RlciAoUHJvdGVjdCkgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BSUNfRENSX1BST1QgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKEFJQykgUHJvdGVjdGlvbiBNb2RlDQorI2RlZmluZSBBVDkxQ19BSUNfRENSX0dNU0sgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKEFJQykgR2VuZXJhbCBNYXNrDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQZXJpcGhlcmFsIERNQSBDb250cm9sbGVyICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfUERDDQotew0KLSAgICBBVDkxX1JFRyBQRENfUlBSOyAgLyogUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBEQ19SQ1I7ICAvKiBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUERDX1RQUjsgIC8qIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUERDX1RDUjsgIC8qIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUERDX1JOUFI7IC8qIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBEQ19STkNSOyAvKiBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQRENfVE5QUjsgLyogVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBEQ19UTkNSOyAvKiBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUERDX1BUQ1I7IC8qIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBEQ19QVFNSOyAvKiBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotfSBBVDkxU19QREMsICogQVQ5MVBTX1BEQzsNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFBlcmlwaGVyYWwgRE1BIENvbnRyb2xsZXINCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19QREMgew0KKwlBVDkxX1JFRwkgUERDX1JQUjsgCS8vIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUERDX1JDUjsgCS8vIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUERDX1RQUjsgCS8vIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBEQ19UQ1I7IAkvLyBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQRENfUk5QUjsgCS8vIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQRENfUk5DUjsgCS8vIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQRENfVE5QUjsgCS8vIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUERDX1ROQ1I7IAkvLyBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBEQ19QVENSOyAJLy8gUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBEQ19QVFNSOyAJLy8gUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KK30gQVQ5MVNfUERDLCAqQVQ5MVBTX1BEQzsNCiANCi0vKiAtLS0tLS0tLSBQRENfUFRDUiA6IChQREMgT2Zmc2V0OiAweDIwKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfUERDX1JYVEVOICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAvKiAoUERDKSBSZWNlaXZlciBUcmFuc2ZlciBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1BEQ19SWFRESVMgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgLyogKFBEQykgUmVjZWl2ZXIgVHJhbnNmZXIgRGlzYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfUERDX1RYVEVOICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDggKSAvKiAoUERDKSBUcmFuc21pdHRlciBUcmFuc2ZlciBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1BEQ19UWFRESVMgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA5ICkgLyogKFBEQykgVHJhbnNtaXR0ZXIgVHJhbnNmZXIgRGlzYWJsZSAqLw0KLS8qIC0tLS0tLS0tIFBEQ19QVFNSIDogKFBEQyBPZmZzZXQ6IDB4MjQpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCisvLyAtLS0tLS0tLSBQRENfUFRDUiA6IChQREMgT2Zmc2V0OiAweDIwKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BEQ19SWFRFTiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoUERDKSBSZWNlaXZlciBUcmFuc2ZlciBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1BEQ19SWFRESVMgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoUERDKSBSZWNlaXZlciBUcmFuc2ZlciBEaXNhYmxlDQorI2RlZmluZSBBVDkxQ19QRENfVFhURU4gICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFBEQykgVHJhbnNtaXR0ZXIgVHJhbnNmZXIgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19QRENfVFhURElTICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLy8gKFBEQykgVHJhbnNtaXR0ZXIgVHJhbnNmZXIgRGlzYWJsZQ0KKy8vIC0tLS0tLS0tIFBEQ19QVFNSIDogKFBEQyBPZmZzZXQ6IDB4MjQpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBEZWJ1ZyBVbml0ICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfREJHVQ0KLXsNCi0gICAgQVQ5MV9SRUcgREJHVV9DUjsgICAgICAgICAvKiBDb250cm9sIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfTVI7ICAgICAgICAgLyogTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX0lFUjsgICAgICAgIC8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9JRFI7ICAgICAgICAvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX0lNUjsgICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfQ1NSOyAgICAgICAgLyogQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9SSFI7ICAgICAgICAvKiBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfVEhSOyAgICAgICAgLyogVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX0JSR1I7ICAgICAgIC8qIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQwWyA3IF07ICAvKiAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX0NJRFI7ICAgICAgIC8qIENoaXAgSUQgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9FWElEOyAgICAgICAvKiBDaGlwIElEIEV4dGVuc2lvbiBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX0ZOVFI7ICAgICAgIC8qIEZvcmNlIE5UUlNUIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMVsgNDUgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9SUFI7ICAgICAgICAvKiBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9SQ1I7ICAgICAgICAvKiBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9UUFI7ICAgICAgICAvKiBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfVENSOyAgICAgICAgLyogVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX1JOUFI7ICAgICAgIC8qIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfUk5DUjsgICAgICAgLyogUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9UTlBSOyAgICAgICAvKiBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9UTkNSOyAgICAgICAvKiBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9QVENSOyAgICAgICAvKiBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX1BUU1I7ICAgICAgIC8qIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi19IEFUOTFTX0RCR1UsICogQVQ5MVBTX0RCR1U7DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBEZWJ1ZyBVbml0DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfREJHVSB7DQorCUFUOTFfUkVHCSBEQkdVX0NSOyAJLy8gQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9NUjsgCS8vIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9DU1I7IAkvLyBDaGFubmVsIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9SSFI7IAkvLyBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1RIUjsgCS8vIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfQlJHUjsgCS8vIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFs3XTsgCS8vIA0KKwlBVDkxX1JFRwkgREJHVV9DSURSOyAJLy8gQ2hpcCBJRCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9FWElEOyAJLy8gQ2hpcCBJRCBFeHRlbnNpb24gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfRk5UUjsgCS8vIEZvcmNlIE5UUlNUIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbNDVdOyAJLy8gDQorCUFUOTFfUkVHCSBEQkdVX1JQUjsgCS8vIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9SQ1I7IAkvLyBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfVFBSOyAJLy8gVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9UQ1I7IAkvLyBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1JOUFI7IAkvLyBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9STkNSOyAJLy8gUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfVE5QUjsgCS8vIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9UTkNSOyAJLy8gVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1BUQ1I7IAkvLyBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9QVFNSOyAJLy8gUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KK30gQVQ5MVNfREJHVSwgKkFUOTFQU19EQkdVOw0KIA0KLS8qIC0tLS0tLS0tIERCR1VfQ1IgOiAoREJHVSBPZmZzZXQ6IDB4MCkgRGVidWcgVW5pdCBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19VU19SU1RSWCAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyICkgIC8qIChEQkdVKSBSZXNldCBSZWNlaXZlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfUlNUVFggICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMyApICAvKiAoREJHVSkgUmVzZXQgVHJhbnNtaXR0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1JYRU4gICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDQgKSAgLyogKERCR1UpIFJlY2VpdmVyIEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfUlhESVMgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNSApICAvKiAoREJHVSkgUmVjZWl2ZXIgRGlzYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfVFhFTiAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNiApICAvKiAoREJHVSkgVHJhbnNtaXR0ZXIgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19VU19UWERJUyAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA3ICkgIC8qIChEQkdVKSBUcmFuc21pdHRlciBEaXNhYmxlICovDQotI2RlZmluZSBBVDkxQ19VU19SU1RTVEEgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgIC8qIChEQkdVKSBSZXNldCBTdGF0dXMgQml0cyAqLw0KLS8qIC0tLS0tLS0tIERCR1VfTVIgOiAoREJHVSBPZmZzZXQ6IDB4NCkgRGVidWcgVW5pdCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19VU19QQVIgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NyA8PCA5ICkgIC8qIChEQkdVKSBQYXJpdHkgdHlwZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX1BBUl9FVkVOICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgOSApICAvKiAoREJHVSkgRXZlbiBQYXJpdHkgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19QQVJfT0REICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDkgKSAgLyogKERCR1UpIE9kZCBQYXJpdHkgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19QQVJfU1BBQ0UgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDkgKSAgLyogKERCR1UpIFBhcml0eSBmb3JjZWQgdG8gMCAoU3BhY2UpICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfUEFSX01BUksgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCA5ICkgIC8qIChEQkdVKSBQYXJpdHkgZm9yY2VkIHRvIDEgKE1hcmspICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfUEFSX05PTkUgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NCA8PCA5ICkgIC8qIChEQkdVKSBObyBQYXJpdHkgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19QQVJfTVVMVElfRFJPUCAgICAoICggdW5zaWduZWQgaW50ICkgMHg2IDw8IDkgKSAgLyogKERCR1UpIE11bHRpLWRyb3AgbW9kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfQ0hNT0RFICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTQgKSAvKiAoREJHVSkgQ2hhbm5lbCBNb2RlICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfQ0hNT0RFX05PUk1BTCAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAxNCApIC8qIChEQkdVKSBOb3JtYWwgTW9kZTogVGhlIFVTQVJUIGNoYW5uZWwgb3BlcmF0ZXMgYXMgYW4gUlgvVFggVVNBUlQuICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfQ0hNT0RFX0FVVE8gICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNCApIC8qIChEQkdVKSBBdXRvbWF0aWMgRWNobzogUmVjZWl2ZXIgRGF0YSBJbnB1dCBpcyBjb25uZWN0ZWQgdG8gdGhlIFRYRCBwaW4uICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfQ0hNT0RFX0xPQ0FMICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCAxNCApIC8qIChEQkdVKSBMb2NhbCBMb29wYmFjazogVHJhbnNtaXR0ZXIgT3V0cHV0IFNpZ25hbCBpcyBjb25uZWN0ZWQgdG8gUmVjZWl2ZXIgSW5wdXQgU2lnbmFsLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX0NITU9ERV9SRU1PVEUgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTQgKSAvKiAoREJHVSkgUmVtb3RlIExvb3BiYWNrOiBSWEQgcGluIGlzIGludGVybmFsbHkgY29ubmVjdGVkIHRvIFRYRCBwaW4uICovDQotLyogLS0tLS0tLS0gREJHVV9JRVIgOiAoREJHVSBPZmZzZXQ6IDB4OCkgRGVidWcgVW5pdCBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19VU19SWFJEWSAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgIC8qIChEQkdVKSBSWFJEWSBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1RYUkRZICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEgKSAgLyogKERCR1UpIFRYUkRZIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfRU5EUlggICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMyApICAvKiAoREJHVSkgRW5kIG9mIFJlY2VpdmUgVHJhbnNmZXIgSW50ZXJydXB0ICovDQotI2RlZmluZSBBVDkxQ19VU19FTkRUWCAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA0ICkgIC8qIChEQkdVKSBFbmQgb2YgVHJhbnNtaXQgSW50ZXJydXB0ICovDQotI2RlZmluZSBBVDkxQ19VU19PVlJFICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA1ICkgIC8qIChEQkdVKSBPdmVycnVuIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfRlJBTUUgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNiApICAvKiAoREJHVSkgRnJhbWluZyBFcnJvciBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1BBUkUgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDcgKSAgLyogKERCR1UpIFBhcml0eSBFcnJvciBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1RYRU1QVFkgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDkgKSAgLyogKERCR1UpIFRYRU1QVFkgSW50ZXJydXB0ICovDQotI2RlZmluZSBBVDkxQ19VU19UWEJVRkUgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMSApIC8qIChEQkdVKSBUWEJVRkUgSW50ZXJydXB0ICovDQotI2RlZmluZSBBVDkxQ19VU19SWEJVRkYgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMiApIC8qIChEQkdVKSBSWEJVRkYgSW50ZXJydXB0ICovDQotI2RlZmluZSBBVDkxQ19VU19DT01NX1RYICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzMCApIC8qIChEQkdVKSBDT01NX1RYIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfQ09NTV9SWCAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMzEgKSAvKiAoREJHVSkgQ09NTV9SWCBJbnRlcnJ1cHQgKi8NCi0vKiAtLS0tLS0tLSBEQkdVX0lEUiA6IChEQkdVIE9mZnNldDogMHhjKSBEZWJ1ZyBVbml0IEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gREJHVV9JTVIgOiAoREJHVSBPZmZzZXQ6IDB4MTApIERlYnVnIFVuaXQgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBEQkdVX0NTUiA6IChEQkdVIE9mZnNldDogMHgxNCkgRGVidWcgVW5pdCBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIERCR1VfRk5UUiA6IChEQkdVIE9mZnNldDogMHg0OCkgRGVidWcgVW5pdCBGT1JDRV9OVFJTVCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfRk9SQ0VfTlRSU1QgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgLyogKERCR1UpIEZvcmNlIE5UUlNUIGluIEpUQUcgKi8NCisvLyAtLS0tLS0tLSBEQkdVX0NSIDogKERCR1UgT2Zmc2V0OiAweDApIERlYnVnIFVuaXQgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VTX1JTVFJYICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoREJHVSkgUmVzZXQgUmVjZWl2ZXINCisjZGVmaW5lIEFUOTFDX1VTX1JTVFRYICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoREJHVSkgUmVzZXQgVHJhbnNtaXR0ZXINCisjZGVmaW5lIEFUOTFDX1VTX1JYRU4gICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoREJHVSkgUmVjZWl2ZXIgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19VU19SWERJUyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKERCR1UpIFJlY2VpdmVyIERpc2FibGUNCisjZGVmaW5lIEFUOTFDX1VTX1RYRU4gICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoREJHVSkgVHJhbnNtaXR0ZXIgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19VU19UWERJUyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKERCR1UpIFRyYW5zbWl0dGVyIERpc2FibGUNCisjZGVmaW5lIEFUOTFDX1VTX1JTVFNUQSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoREJHVSkgUmVzZXQgU3RhdHVzIEJpdHMNCisvLyAtLS0tLS0tLSBEQkdVX01SIDogKERCR1UgT2Zmc2V0OiAweDQpIERlYnVnIFVuaXQgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VTX1BBUiAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8ICA5KSAvLyAoREJHVSkgUGFyaXR5IHR5cGUNCisjZGVmaW5lIAlBVDkxQ19VU19QQVJfRVZFTiAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgOSkgLy8gKERCR1UpIEV2ZW4gUGFyaXR5DQorI2RlZmluZSAJQVQ5MUNfVVNfUEFSX09ERCAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChEQkdVKSBPZGQgUGFyaXR5DQorI2RlZmluZSAJQVQ5MUNfVVNfUEFSX1NQQUNFICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDkpIC8vIChEQkdVKSBQYXJpdHkgZm9yY2VkIHRvIDAgKFNwYWNlKQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1BBUl9NQVJLICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA5KSAvLyAoREJHVSkgUGFyaXR5IGZvcmNlZCB0byAxIChNYXJrKQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1BBUl9OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg0IDw8ICA5KSAvLyAoREJHVSkgTm8gUGFyaXR5DQorI2RlZmluZSAJQVQ5MUNfVVNfUEFSX01VTFRJX0RST1AgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDYgPDwgIDkpIC8vIChEQkdVKSBNdWx0aS1kcm9wIG1vZGUNCisjZGVmaW5lIEFUOTFDX1VTX0NITU9ERSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE0KSAvLyAoREJHVSkgQ2hhbm5lbCBNb2RlDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0hNT0RFX05PUk1BTCAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMTQpIC8vIChEQkdVKSBOb3JtYWwgTW9kZTogVGhlIFVTQVJUIGNoYW5uZWwgb3BlcmF0ZXMgYXMgYW4gUlgvVFggVVNBUlQuDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0hNT0RFX0FVVE8gICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTQpIC8vIChEQkdVKSBBdXRvbWF0aWMgRWNobzogUmVjZWl2ZXIgRGF0YSBJbnB1dCBpcyBjb25uZWN0ZWQgdG8gdGhlIFRYRCBwaW4uDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0hNT0RFX0xPQ0FMICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMTQpIC8vIChEQkdVKSBMb2NhbCBMb29wYmFjazogVHJhbnNtaXR0ZXIgT3V0cHV0IFNpZ25hbCBpcyBjb25uZWN0ZWQgdG8gUmVjZWl2ZXIgSW5wdXQgU2lnbmFsLg0KKyNkZWZpbmUgCUFUOTFDX1VTX0NITU9ERV9SRU1PVEUgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE0KSAvLyAoREJHVSkgUmVtb3RlIExvb3BiYWNrOiBSWEQgcGluIGlzIGludGVybmFsbHkgY29ubmVjdGVkIHRvIFRYRCBwaW4uDQorLy8gLS0tLS0tLS0gREJHVV9JRVIgOiAoREJHVSBPZmZzZXQ6IDB4OCkgRGVidWcgVW5pdCBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVVNfUlhSRFkgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChEQkdVKSBSWFJEWSBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX1RYUkRZICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoREJHVSkgVFhSRFkgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19FTkRSWCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKERCR1UpIEVuZCBvZiBSZWNlaXZlIFRyYW5zZmVyIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfRU5EVFggICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChEQkdVKSBFbmQgb2YgVHJhbnNtaXQgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19PVlJFICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKERCR1UpIE92ZXJydW4gSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19GUkFNRSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLy8gKERCR1UpIEZyYW1pbmcgRXJyb3IgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19QQVJFICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKERCR1UpIFBhcml0eSBFcnJvciBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX1RYRU1QVFkgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvLyAoREJHVSkgVFhFTVBUWSBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX1RYQlVGRSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDExKSAvLyAoREJHVSkgVFhCVUZFIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfUlhCVUZGICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8vIChEQkdVKSBSWEJVRkYgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19DT01NX1RYICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAzMCkgLy8gKERCR1UpIENPTU1fVFggSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19DT01NX1JYICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAzMSkgLy8gKERCR1UpIENPTU1fUlggSW50ZXJydXB0DQorLy8gLS0tLS0tLS0gREJHVV9JRFIgOiAoREJHVSBPZmZzZXQ6IDB4YykgRGVidWcgVW5pdCBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBEQkdVX0lNUiA6IChEQkdVIE9mZnNldDogMHgxMCkgRGVidWcgVW5pdCBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBEQkdVX0NTUiA6IChEQkdVIE9mZnNldDogMHgxNCkgRGVidWcgVW5pdCBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBEQkdVX0ZOVFIgOiAoREJHVSBPZmZzZXQ6IDB4NDgpIERlYnVnIFVuaXQgRk9SQ0VfTlRSU1QgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VU19GT1JDRV9OVFJTVCAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKERCR1UpIEZvcmNlIE5UUlNUIGluIEpUQUcNCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFBhcmFsbGVsIElucHV0IE91dHB1dCBDb250cm9sZXIgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLXR5cGVkZWYgc3RydWN0IF9BVDkxU19QSU8NCi17DQotICAgIEFUOTFfUkVHIFBJT19QRVI7ICAgICAgICAvKiBQSU8gRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT19QRFI7ICAgICAgICAvKiBQSU8gRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9fUFNSOyAgICAgICAgLyogUElPIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDBbIDEgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgUElPX09FUjsgICAgICAgIC8qIE91dHB1dCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPX09EUjsgICAgICAgIC8qIE91dHB1dCBEaXNhYmxlIFJlZ2lzdGVyciAqLw0KLSAgICBBVDkxX1JFRyBQSU9fT1NSOyAgICAgICAgLyogT3V0cHV0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDFbIDEgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgUElPX0lGRVI7ICAgICAgIC8qIElucHV0IEZpbHRlciBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPX0lGRFI7ICAgICAgIC8qIElucHV0IEZpbHRlciBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT19JRlNSOyAgICAgICAvKiBJbnB1dCBGaWx0ZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMlsgMSBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBQSU9fU09EUjsgICAgICAgLyogU2V0IE91dHB1dCBEYXRhIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT19DT0RSOyAgICAgICAvKiBDbGVhciBPdXRwdXQgRGF0YSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9fT0RTUjsgICAgICAgLyogT3V0cHV0IERhdGEgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT19QRFNSOyAgICAgICAvKiBQaW4gRGF0YSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPX0lFUjsgICAgICAgIC8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPX0lEUjsgICAgICAgIC8qIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT19JTVI7ICAgICAgICAvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9fSVNSOyAgICAgICAgLyogSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9fTURFUjsgICAgICAgLyogTXVsdGktZHJpdmVyIEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9fTUREUjsgICAgICAgLyogTXVsdGktZHJpdmVyIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPX01EU1I7ICAgICAgIC8qIE11bHRpLWRyaXZlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQzWyAxIF07IC8qICovDQotICAgIEFUOTFfUkVHIFBJT19QUFVEUjsgICAgICAvKiBQdWxsLXVwIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPX1BQVUVSOyAgICAgIC8qIFB1bGwtdXAgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT19QUFVTUjsgICAgICAvKiBQdWxsLXVwIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDRbIDEgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgUElPX0FTUjsgICAgICAgIC8qIFNlbGVjdCBBIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT19CU1I7ICAgICAgICAvKiBTZWxlY3QgQiBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9fQUJTUjsgICAgICAgLyogQUIgU2VsZWN0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDVbIDkgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgUElPX09XRVI7ICAgICAgIC8qIE91dHB1dCBXcml0ZSBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPX09XRFI7ICAgICAgIC8qIE91dHB1dCBXcml0ZSBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT19PV1NSOyAgICAgICAvKiBPdXRwdXQgV3JpdGUgU3RhdHVzIFJlZ2lzdGVyICovDQotfSBBVDkxU19QSU8sICogQVQ5MVBTX1BJTzsNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFBhcmFsbGVsIElucHV0IE91dHB1dCBDb250cm9sZXINCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19QSU8gew0KKwlBVDkxX1JFRwkgUElPX1BFUjsgCS8vIFBJTyBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19QRFI7IAkvLyBQSU8gRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX1BTUjsgCS8vIFBJTyBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUElPX09FUjsgCS8vIE91dHB1dCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19PRFI7IAkvLyBPdXRwdXQgRGlzYWJsZSBSZWdpc3RlcnINCisJQVQ5MV9SRUcJIFBJT19PU1I7IAkvLyBPdXRwdXQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT19JRkVSOyAJLy8gSW5wdXQgRmlsdGVyIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX0lGRFI7IAkvLyBJbnB1dCBGaWx0ZXIgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX0lGU1I7IAkvLyBJbnB1dCBGaWx0ZXIgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDJbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT19TT0RSOyAJLy8gU2V0IE91dHB1dCBEYXRhIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fQ09EUjsgCS8vIENsZWFyIE91dHB1dCBEYXRhIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fT0RTUjsgCS8vIE91dHB1dCBEYXRhIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX1BEU1I7IAkvLyBQaW4gRGF0YSBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX0lTUjsgCS8vIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19NREVSOyAJLy8gTXVsdGktZHJpdmVyIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX01ERFI7IAkvLyBNdWx0aS1kcml2ZXIgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX01EU1I7IAkvLyBNdWx0aS1kcml2ZXIgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDNbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT19QUFVEUjsgCS8vIFB1bGwtdXAgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX1BQVUVSOyAJLy8gUHVsbC11cCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19QUFVTUjsgCS8vIFB1bGwtdXAgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDRbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT19BU1I7IAkvLyBTZWxlY3QgQSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX0JTUjsgCS8vIFNlbGVjdCBCIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fQUJTUjsgCS8vIEFCIFNlbGVjdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkNVs5XTsgCS8vIA0KKwlBVDkxX1JFRwkgUElPX09XRVI7IAkvLyBPdXRwdXQgV3JpdGUgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fT1dEUjsgCS8vIE91dHB1dCBXcml0ZSBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fT1dTUjsgCS8vIE91dHB1dCBXcml0ZSBTdGF0dXMgUmVnaXN0ZXINCit9IEFUOTFTX1BJTywgKkFUOTFQU19QSU87DQogDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBDbG9jayBHZW5lcmF0b3IgQ29udHJvbGVyICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfQ0tHUg0KLXsNCi0gICAgQVQ5MV9SRUcgQ0tHUl9NT1I7ICAgICAgIC8qIE1haW4gT3NjaWxsYXRvciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBDS0dSX01DRlI7ICAgICAgLyogTWFpbiBDbG9jayAgRnJlcXVlbmN5IFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMFsgMSBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBDS0dSX1BMTFI7ICAgICAgLyogUExMIFJlZ2lzdGVyICovDQotfSBBVDkxU19DS0dSLCAqIEFUOTFQU19DS0dSOw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQ2xvY2sgR2VuZXJhdG9yIENvbnRyb2xlcg0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX0NLR1Igew0KKwlBVDkxX1JFRwkgQ0tHUl9NT1I7IAkvLyBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIENLR1JfTUNGUjsgCS8vIE1haW4gQ2xvY2sgIEZyZXF1ZW5jeSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBDS0dSX1BMTFI7IAkvLyBQTEwgUmVnaXN0ZXINCit9IEFUOTFTX0NLR1IsICpBVDkxUFNfQ0tHUjsNCiANCi0vKiAtLS0tLS0tLSBDS0dSX01PUiA6IChDS0dSIE9mZnNldDogMHgwKSBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0NLR1JfTU9TQ0VOICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgICAgLyogKENLR1IpIE1haW4gT3NjaWxsYXRvciBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX0NLR1JfT1NDQllQQVNTICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgICAgLyogKENLR1IpIE1haW4gT3NjaWxsYXRvciBCeXBhc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0NLR1JfT1NDT1VOVCAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RkYgPDwgOCApICAgLyogKENLR1IpIE1haW4gT3NjaWxsYXRvciBTdGFydC11cCBUaW1lICovDQotLyogLS0tLS0tLS0gQ0tHUl9NQ0ZSIDogKENLR1IgT2Zmc2V0OiAweDQpIE1haW4gQ2xvY2sgRnJlcXVlbmN5IFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19DS0dSX01BSU5GICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGRkYgPDwgMCApIC8qIChDS0dSKSBNYWluIENsb2NrIEZyZXF1ZW5jeSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0tHUl9NQUlOUkRZICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE2ICkgICAvKiAoQ0tHUikgTWFpbiBDbG9jayBSZWFkeSAqLw0KLS8qIC0tLS0tLS0tIENLR1JfUExMUiA6IChDS0dSIE9mZnNldDogMHhjKSBQTEwgQiBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0tHUl9ESVYgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRiA8PCAwICkgICAvKiAoQ0tHUikgRGl2aWRlciBTZWxlY3RlZCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0NLR1JfRElWXzAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwICkgICAgICAgICAvKiAoQ0tHUikgRGl2aWRlciBvdXRwdXQgaXMgMCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0NLR1JfRElWX0JZUEFTUyAgICAoICggdW5zaWduZWQgaW50ICkgMHgxICkgICAgICAgICAvKiAoQ0tHUikgRGl2aWRlciBpcyBieXBhc3NlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0tHUl9QTExDT1VOVCAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzRiA8PCA4ICkgICAvKiAoQ0tHUikgUExMIENvdW50ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NLR1JfT1VUICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAxNCApICAgLyogKENLR1IpIFBMTCBPdXRwdXQgRnJlcXVlbmN5IFJhbmdlICovDQotI2RlZmluZSAgICAgQVQ5MUNfQ0tHUl9PVVRfMCAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMTQgKSAgIC8qIChDS0dSKSBQbGVhc2UgcmVmZXIgdG8gdGhlIFBMTCBkYXRhc2hlZXQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19DS0dSX09VVF8xICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNCApICAgLyogKENLR1IpIFBsZWFzZSByZWZlciB0byB0aGUgUExMIGRhdGFzaGVldCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0NLR1JfT1VUXzIgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDE0ICkgICAvKiAoQ0tHUikgUGxlYXNlIHJlZmVyIHRvIHRoZSBQTEwgZGF0YXNoZWV0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfQ0tHUl9PVVRfMyAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTQgKSAgIC8qIChDS0dSKSBQbGVhc2UgcmVmZXIgdG8gdGhlIFBMTCBkYXRhc2hlZXQgKi8NCi0jZGVmaW5lIEFUOTFDX0NLR1JfTVVMICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4N0ZGIDw8IDE2ICkgLyogKENLR1IpIFBMTCBNdWx0aXBsaWVyICovDQotI2RlZmluZSBBVDkxQ19DS0dSX1VTQkRJViAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMjggKSAgIC8qIChDS0dSKSBEaXZpZGVyIGZvciBVU0IgQ2xvY2tzICovDQotI2RlZmluZSAgICAgQVQ5MUNfQ0tHUl9VU0JESVZfMCAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMjggKSAgIC8qIChDS0dSKSBEaXZpZGVyIG91dHB1dCBpcyBQTEwgY2xvY2sgb3V0cHV0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfQ0tHUl9VU0JESVZfMSAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjggKSAgIC8qIChDS0dSKSBEaXZpZGVyIG91dHB1dCBpcyBQTEwgY2xvY2sgb3V0cHV0IGRpdmlkZWQgYnkgMiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0NLR1JfVVNCRElWXzIgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDI4ICkgICAvKiAoQ0tHUikgRGl2aWRlciBvdXRwdXQgaXMgUExMIGNsb2NrIG91dHB1dCBkaXZpZGVkIGJ5IDQgKi8NCisvLyAtLS0tLS0tLSBDS0dSX01PUiA6IChDS0dSIE9mZnNldDogMHgwKSBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DS0dSX01PU0NFTiAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKENLR1IpIE1haW4gT3NjaWxsYXRvciBFbmFibGUNCisjZGVmaW5lIEFUOTFDX0NLR1JfT1NDQllQQVNTICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoQ0tHUikgTWFpbiBPc2NpbGxhdG9yIEJ5cGFzcw0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9PU0NPVU5UICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8ICA4KSAvLyAoQ0tHUikgTWFpbiBPc2NpbGxhdG9yIFN0YXJ0LXVwIFRpbWUNCisvLyAtLS0tLS0tLSBDS0dSX01DRlIgOiAoQ0tHUiBPZmZzZXQ6IDB4NCkgTWFpbiBDbG9jayBGcmVxdWVuY3kgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DS0dSX01BSU5GICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGRiA8PCAgMCkgLy8gKENLR1IpIE1haW4gQ2xvY2sgRnJlcXVlbmN5DQorI2RlZmluZSBBVDkxQ19DS0dSX01BSU5SRFkgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKENLR1IpIE1haW4gQ2xvY2sgUmVhZHkNCisvLyAtLS0tLS0tLSBDS0dSX1BMTFIgOiAoQ0tHUiBPZmZzZXQ6IDB4YykgUExMIEIgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DS0dSX0RJViAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgIDApIC8vIChDS0dSKSBEaXZpZGVyIFNlbGVjdGVkDQorI2RlZmluZSAJQVQ5MUNfQ0tHUl9ESVZfMCAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCkgLy8gKENLR1IpIERpdmlkZXIgb3V0cHV0IGlzIDANCisjZGVmaW5lIAlBVDkxQ19DS0dSX0RJVl9CWVBBU1MgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxKSAvLyAoQ0tHUikgRGl2aWRlciBpcyBieXBhc3NlZA0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9QTExDT1VOVCAgICgodW5zaWduZWQgaW50KSAweDNGIDw8ICA4KSAvLyAoQ0tHUikgUExMIENvdW50ZXINCisjZGVmaW5lIEFUOTFDX0NLR1JfT1VUICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE0KSAvLyAoQ0tHUikgUExMIE91dHB1dCBGcmVxdWVuY3kgUmFuZ2UNCisjZGVmaW5lIAlBVDkxQ19DS0dSX09VVF8wICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDE0KSAvLyAoQ0tHUikgUGxlYXNlIHJlZmVyIHRvIHRoZSBQTEwgZGF0YXNoZWV0DQorI2RlZmluZSAJQVQ5MUNfQ0tHUl9PVVRfMSAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNCkgLy8gKENLR1IpIFBsZWFzZSByZWZlciB0byB0aGUgUExMIGRhdGFzaGVldA0KKyNkZWZpbmUgCUFUOTFDX0NLR1JfT1VUXzIgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMTQpIC8vIChDS0dSKSBQbGVhc2UgcmVmZXIgdG8gdGhlIFBMTCBkYXRhc2hlZXQNCisjZGVmaW5lIAlBVDkxQ19DS0dSX09VVF8zICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE0KSAvLyAoQ0tHUikgUGxlYXNlIHJlZmVyIHRvIHRoZSBQTEwgZGF0YXNoZWV0DQorI2RlZmluZSBBVDkxQ19DS0dSX01VTCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4N0ZGIDw8IDE2KSAvLyAoQ0tHUikgUExMIE11bHRpcGxpZXINCisjZGVmaW5lIEFUOTFDX0NLR1JfVVNCRElWICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDI4KSAvLyAoQ0tHUikgRGl2aWRlciBmb3IgVVNCIENsb2Nrcw0KKyNkZWZpbmUgCUFUOTFDX0NLR1JfVVNCRElWXzAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMjgpIC8vIChDS0dSKSBEaXZpZGVyIG91dHB1dCBpcyBQTEwgY2xvY2sgb3V0cHV0DQorI2RlZmluZSAJQVQ5MUNfQ0tHUl9VU0JESVZfMSAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyOCkgLy8gKENLR1IpIERpdmlkZXIgb3V0cHV0IGlzIFBMTCBjbG9jayBvdXRwdXQgZGl2aWRlZCBieSAyDQorI2RlZmluZSAJQVQ5MUNfQ0tHUl9VU0JESVZfMiAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAyOCkgLy8gKENLR1IpIERpdmlkZXIgb3V0cHV0IGlzIFBMTCBjbG9jayBvdXRwdXQgZGl2aWRlZCBieSA0DQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQb3dlciBNYW5hZ2VtZW50IENvbnRyb2xlciAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotdHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1BNQw0KLXsNCi0gICAgQVQ5MV9SRUcgUE1DX1NDRVI7ICAgICAgIC8qIFN5c3RlbSBDbG9jayBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUE1DX1NDRFI7ICAgICAgIC8qIFN5c3RlbSBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBNQ19TQ1NSOyAgICAgICAvKiBTeXN0ZW0gQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMFsgMSBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBQTUNfUENFUjsgICAgICAgLyogUGVyaXBoZXJhbCBDbG9jayBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUE1DX1BDRFI7ICAgICAgIC8qIFBlcmlwaGVyYWwgQ2xvY2sgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQTUNfUENTUjsgICAgICAgLyogUGVyaXBoZXJhbCBDbG9jayBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQxWyAxIF07IC8qICovDQotICAgIEFUOTFfUkVHIFBNQ19NT1I7ICAgICAgICAvKiBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUE1DX01DRlI7ICAgICAgIC8qIE1haW4gQ2xvY2sgIEZyZXF1ZW5jeSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDJbIDEgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgUE1DX1BMTFI7ICAgICAgIC8qIFBMTCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQTUNfTUNLUjsgICAgICAgLyogTWFzdGVyIENsb2NrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkM1sgMyBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBQTUNfUENLUlsgNCBdOyAgLyogUHJvZ3JhbW1hYmxlIENsb2NrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkNFsgNCBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBQTUNfSUVSOyAgICAgICAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQTUNfSURSOyAgICAgICAgLyogSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUE1DX1NSOyAgICAgICAgIC8qIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQTUNfSU1SOyAgICAgICAgLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi19IEFUOTFTX1BNQywgKiBBVDkxUFNfUE1DOw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUG93ZXIgTWFuYWdlbWVudCBDb250cm9sZXINCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19QTUMgew0KKwlBVDkxX1JFRwkgUE1DX1NDRVI7IAkvLyBTeXN0ZW0gQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfU0NEUjsgCS8vIFN5c3RlbSBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfU0NTUjsgCS8vIFN5c3RlbSBDbG9jayBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUE1DX1BDRVI7IAkvLyBQZXJpcGhlcmFsIENsb2NrIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUE1DX1BDRFI7IAkvLyBQZXJpcGhlcmFsIENsb2NrIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19QQ1NSOyAJLy8gUGVyaXBoZXJhbCBDbG9jayBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMVsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUE1DX01PUjsgCS8vIE1haW4gT3NjaWxsYXRvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUE1DX01DRlI7IAkvLyBNYWluIENsb2NrICBGcmVxdWVuY3kgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMlsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUE1DX1BMTFI7IAkvLyBQTEwgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19NQ0tSOyAJLy8gTWFzdGVyIENsb2NrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDNbM107IAkvLyANCisJQVQ5MV9SRUcJIFBNQ19QQ0tSWzRdOyAJLy8gUHJvZ3JhbW1hYmxlIENsb2NrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDRbNF07IAkvLyANCisJQVQ5MV9SRUcJIFBNQ19JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19TUjsgCS8vIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUE1DX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorfSBBVDkxU19QTUMsICpBVDkxUFNfUE1DOw0KIA0KLS8qIC0tLS0tLS0tIFBNQ19TQ0VSIDogKFBNQyBPZmZzZXQ6IDB4MCkgU3lzdGVtIENsb2NrIEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDSyAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgIC8qIChQTUMpIFByb2Nlc3NvciBDbG9jayAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1VEUCAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA3ICkgIC8qIChQTUMpIFVTQiBEZXZpY2UgUG9ydCBDbG9jayAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDSzAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgIC8qIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19QQ0sxICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOSApICAvKiAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0ICovDQotI2RlZmluZSBBVDkxQ19QTUNfUENLMiAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEwICkgLyogKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDSzMgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMSApIC8qIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgKi8NCi0vKiAtLS0tLS0tLSBQTUNfU0NEUiA6IChQTUMgT2Zmc2V0OiAweDQpIFN5c3RlbSBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gUE1DX1NDU1IgOiAoUE1DIE9mZnNldDogMHg4KSBTeXN0ZW0gQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQ0tHUl9NT1IgOiAoUE1DIE9mZnNldDogMHgyMCkgTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQ0tHUl9NQ0ZSIDogKFBNQyBPZmZzZXQ6IDB4MjQpIE1haW4gQ2xvY2sgRnJlcXVlbmN5IFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQ0tHUl9QTExSIDogKFBNQyBPZmZzZXQ6IDB4MmMpIFBMTCBCIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gUE1DX01DS1IgOiAoUE1DIE9mZnNldDogMHgzMCkgTWFzdGVyIENsb2NrIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19QTUNfQ1NTICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDAgKSAvKiAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgU2VsZWN0aW9uICovDQotI2RlZmluZSAgICAgQVQ5MUNfUE1DX0NTU19TTE9XX0NMSyAgICAoICggdW5zaWduZWQgaW50ICkgMHgwICkgICAgICAvKiAoUE1DKSBTbG93IENsb2NrIGlzIHNlbGVjdGVkICovDQotI2RlZmluZSAgICAgQVQ5MUNfUE1DX0NTU19NQUlOX0NMSyAgICAoICggdW5zaWduZWQgaW50ICkgMHgxICkgICAgICAvKiAoUE1DKSBNYWluIENsb2NrIGlzIHNlbGVjdGVkICovDQotI2RlZmluZSAgICAgQVQ5MUNfUE1DX0NTU19QTExfQ0xLICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzICkgICAgICAvKiAoUE1DKSBDbG9jayBmcm9tIFBMTCBpcyBzZWxlY3RlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1BSRVMgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NyA8PCAyICkgLyogKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIFByZXNjYWxlciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1BNQ19QUkVTX0NMSyAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAyICkgLyogKFBNQykgU2VsZWN0ZWQgY2xvY2sgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19QTUNfUFJFU19DTEtfMiAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMiApIC8qIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgMiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1BNQ19QUkVTX0NMS180ICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCAyICkgLyogKFBNQykgU2VsZWN0ZWQgY2xvY2sgZGl2aWRlZCBieSA0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfUE1DX1BSRVNfQ0xLXzggICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDIgKSAvKiAoUE1DKSBTZWxlY3RlZCBjbG9jayBkaXZpZGVkIGJ5IDggKi8NCi0jZGVmaW5lICAgICBBVDkxQ19QTUNfUFJFU19DTEtfMTYgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDQgPDwgMiApIC8qIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgMTYgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19QTUNfUFJFU19DTEtfMzIgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDUgPDwgMiApIC8qIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgMzIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19QTUNfUFJFU19DTEtfNjQgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDYgPDwgMiApIC8qIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgNjQgKi8NCi0vKiAtLS0tLS0tLSBQTUNfUENLUiA6IChQTUMgT2Zmc2V0OiAweDQwKSBQcm9ncmFtbWFibGUgQ2xvY2sgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBQTUNfSUVSIDogKFBNQyBPZmZzZXQ6IDB4NjApIFBNQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19QTUNfTU9TQ1MgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgLyogKFBNQykgTU9TQyBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzayAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX0xPQ0sgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyICkgIC8qIChQTUMpIFBMTCBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzayAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX01DS1JEWSAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzICkgIC8qIChQTUMpIE1DS19SRFkgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sgKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19QQ0swUkRZICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOCApICAvKiAoUE1DKSBQQ0swX1JEWSBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzayAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDSzFSRFkgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA5ICkgIC8qIChQTUMpIFBDSzFfUkRZIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrICovDQotI2RlZmluZSBBVDkxQ19QTUNfUENLMlJEWSAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEwICkgLyogKFBNQykgUENLMl9SRFkgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sgKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19QQ0szUkRZICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTEgKSAvKiAoUE1DKSBQQ0szX1JEWSBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzayAqLw0KLS8qIC0tLS0tLS0tIFBNQ19JRFIgOiAoUE1DIE9mZnNldDogMHg2NCkgUE1DIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gUE1DX1NSIDogKFBNQyBPZmZzZXQ6IDB4NjgpIFBNQyBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBQTUNfSU1SIDogKFBNQyBPZmZzZXQ6IDB4NmMpIFBNQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSAqLw0KKy8vIC0tLS0tLS0tIFBNQ19TQ0VSIDogKFBNQyBPZmZzZXQ6IDB4MCkgU3lzdGVtIENsb2NrIEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0sgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoUE1DKSBQcm9jZXNzb3IgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BNQ19VRFAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoUE1DKSBVU0IgRGV2aWNlIFBvcnQgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0swICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0DQorI2RlZmluZSBBVDkxQ19QTUNfUENLMSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLy8gKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dA0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDSzIgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQNCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0szICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDExKSAvLyAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0DQorLy8gLS0tLS0tLS0gUE1DX1NDRFIgOiAoUE1DIE9mZnNldDogMHg0KSBTeXN0ZW0gQ2xvY2sgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQTUNfU0NTUiA6IChQTUMgT2Zmc2V0OiAweDgpIFN5c3RlbSBDbG9jayBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQ0tHUl9NT1IgOiAoUE1DIE9mZnNldDogMHgyMCkgTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIENLR1JfTUNGUiA6IChQTUMgT2Zmc2V0OiAweDI0KSBNYWluIENsb2NrIEZyZXF1ZW5jeSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBDS0dSX1BMTFIgOiAoUE1DIE9mZnNldDogMHgyYykgUExMIEIgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUE1DX01DS1IgOiAoUE1DIE9mZnNldDogMHgzMCkgTWFzdGVyIENsb2NrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUE1DX0NTUyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDApIC8vIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19QTUNfQ1NTX1NMT1dfQ0xLICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDApIC8vIChQTUMpIFNsb3cgQ2xvY2sgaXMgc2VsZWN0ZWQNCisjZGVmaW5lIAlBVDkxQ19QTUNfQ1NTX01BSU5fQ0xLICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEpIC8vIChQTUMpIE1haW4gQ2xvY2sgaXMgc2VsZWN0ZWQNCisjZGVmaW5lIAlBVDkxQ19QTUNfQ1NTX1BMTF9DTEsgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMpIC8vIChQTUMpIENsb2NrIGZyb20gUExMIGlzIHNlbGVjdGVkDQorI2RlZmluZSBBVDkxQ19QTUNfUFJFUyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAgMikgLy8gKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIFByZXNjYWxlcg0KKyNkZWZpbmUgCUFUOTFDX1BNQ19QUkVTX0NMSyAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDIpIC8vIChQTUMpIFNlbGVjdGVkIGNsb2NrDQorI2RlZmluZSAJQVQ5MUNfUE1DX1BSRVNfQ0xLXzIgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFBNQykgU2VsZWN0ZWQgY2xvY2sgZGl2aWRlZCBieSAyDQorI2RlZmluZSAJQVQ5MUNfUE1DX1BSRVNfQ0xLXzQgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgMikgLy8gKFBNQykgU2VsZWN0ZWQgY2xvY2sgZGl2aWRlZCBieSA0DQorI2RlZmluZSAJQVQ5MUNfUE1DX1BSRVNfQ0xLXzggICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgMikgLy8gKFBNQykgU2VsZWN0ZWQgY2xvY2sgZGl2aWRlZCBieSA4DQorI2RlZmluZSAJQVQ5MUNfUE1DX1BSRVNfQ0xLXzE2ICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NCA8PCAgMikgLy8gKFBNQykgU2VsZWN0ZWQgY2xvY2sgZGl2aWRlZCBieSAxNg0KKyNkZWZpbmUgCUFUOTFDX1BNQ19QUkVTX0NMS18zMiAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDUgPDwgIDIpIC8vIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgMzINCisjZGVmaW5lIAlBVDkxQ19QTUNfUFJFU19DTEtfNjQgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg2IDw8ICAyKSAvLyAoUE1DKSBTZWxlY3RlZCBjbG9jayBkaXZpZGVkIGJ5IDY0DQorLy8gLS0tLS0tLS0gUE1DX1BDS1IgOiAoUE1DIE9mZnNldDogMHg0MCkgUHJvZ3JhbW1hYmxlIENsb2NrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFBNQ19JRVIgOiAoUE1DIE9mZnNldDogMHg2MCkgUE1DIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QTUNfTU9TQ1MgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFBNQykgTU9TQyBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzaw0KKyNkZWZpbmUgQVQ5MUNfUE1DX0xPQ0sgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChQTUMpIFBMTCBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzaw0KKyNkZWZpbmUgQVQ5MUNfUE1DX01DS1JEWSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChQTUMpIE1DS19SRFkgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sNCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0swUkRZICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoUE1DKSBQQ0swX1JEWSBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzaw0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDSzFSRFkgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChQTUMpIFBDSzFfUkRZIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrDQorI2RlZmluZSBBVDkxQ19QTUNfUENLMlJEWSAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLy8gKFBNQykgUENLMl9SRFkgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sNCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0szUkRZICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDExKSAvLyAoUE1DKSBQQ0szX1JEWSBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzaw0KKy8vIC0tLS0tLS0tIFBNQ19JRFIgOiAoUE1DIE9mZnNldDogMHg2NCkgUE1DIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFBNQ19TUiA6IChQTUMgT2Zmc2V0OiAweDY4KSBQTUMgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFBNQ19JTVIgOiAoUE1DIE9mZnNldDogMHg2YykgUE1DIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUmVzZXQgQ29udHJvbGxlciBJbnRlcmZhY2UgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLXR5cGVkZWYgc3RydWN0IF9BVDkxU19SU1RDDQotew0KLSAgICBBVDkxX1JFRyBSU1RDX1JDUjsgLyogUmVzZXQgQ29udHJvbCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSU1RDX1JTUjsgLyogUmVzZXQgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJTVENfUk1SOyAvKiBSZXNldCBNb2RlIFJlZ2lzdGVyICovDQotfSBBVDkxU19SU1RDLCAqIEFUOTFQU19SU1RDOw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUmVzZXQgQ29udHJvbGxlciBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19SU1RDIHsNCisJQVQ5MV9SRUcJIFJTVENfUkNSOyAJLy8gUmVzZXQgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUlNUQ19SU1I7IAkvLyBSZXNldCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJTVENfUk1SOyAJLy8gUmVzZXQgTW9kZSBSZWdpc3Rlcg0KK30gQVQ5MVNfUlNUQywgKkFUOTFQU19SU1RDOw0KIA0KLS8qIC0tLS0tLS0tIFJTVENfUkNSIDogKFJTVEMgT2Zmc2V0OiAweDApIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1JTVENfUFJPQ1JTVCAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgIC8qIChSU1RDKSBQcm9jZXNzb3IgUmVzZXQgKi8NCi0jZGVmaW5lIEFUOTFDX1JTVENfUEVSUlNUICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAgIC8qIChSU1RDKSBQZXJpcGhlcmFsIFJlc2V0ICovDQotI2RlZmluZSBBVDkxQ19SU1RDX0VYVFJTVCAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzICkgICAvKiAoUlNUQykgRXh0ZXJuYWwgUmVzZXQgKi8NCi0jZGVmaW5lIEFUOTFDX1JTVENfS0VZICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRiA8PCAyNCApIC8qIChSU1RDKSBQYXNzd29yZCAqLw0KLS8qIC0tLS0tLS0tIFJTVENfUlNSIDogKFJTVEMgT2Zmc2V0OiAweDQpIFJlc2V0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfUlNUQ19VUlNUUyAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgLyogKFJTVEMpIFVzZXIgUmVzZXQgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19SU1RDX0JPRFNUUyAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgICAvKiAoUlNUQykgQnJvd25vdXQgRGV0ZWN0aW9uIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfUlNUQ19SU1RUWVAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDcgPDwgOCApICAgLyogKFJTVEMpIFJlc2V0IFR5cGUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19SU1RDX1JTVFRZUF9QT1dFUlVQICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDggKSAgIC8qIChSU1RDKSBQb3dlci11cCBSZXNldC4gVkREQ09SRSByaXNpbmcuICovDQotI2RlZmluZSAgICAgQVQ5MUNfUlNUQ19SU1RUWVBfV0FLRVVQICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgICAvKiAoUlNUQykgV2FrZVVwIFJlc2V0LiBWRERDT1JFIHJpc2luZy4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19SU1RDX1JTVFRZUF9XQVRDSERPRyAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDggKSAgIC8qIChSU1RDKSBXYXRjaGRvZyBSZXNldC4gV2F0Y2hkb2cgb3ZlcmZsb3cgb2NjdXJlZC4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19SU1RDX1JTVFRZUF9TT0ZUV0FSRSAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDggKSAgIC8qIChSU1RDKSBTb2Z0d2FyZSBSZXNldC4gUHJvY2Vzc29yIHJlc2V0IHJlcXVpcmVkIGJ5IHRoZSBzb2Z0d2FyZS4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19SU1RDX1JTVFRZUF9VU0VSICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg0IDw8IDggKSAgIC8qIChSU1RDKSBVc2VyIFJlc2V0LiBOUlNUIHBpbiBkZXRlY3RlZCBsb3cuICovDQotI2RlZmluZSAgICAgQVQ5MUNfUlNUQ19SU1RUWVBfQlJPV05PVVQgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NSA8PCA4ICkgICAvKiAoUlNUQykgQnJvd25vdXQgUmVzZXQgb2NjdXJlZC4gKi8NCi0jZGVmaW5lIEFUOTFDX1JTVENfTlJTVEwgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE2ICkgIC8qIChSU1RDKSBOUlNUIHBpbiBsZXZlbCAqLw0KLSNkZWZpbmUgQVQ5MUNfUlNUQ19TUkNNUCAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTcgKSAgLyogKFJTVEMpIFNvZnR3YXJlIFJlc2V0IENvbW1hbmQgaW4gUHJvZ3Jlc3MuICovDQotLyogLS0tLS0tLS0gUlNUQ19STVIgOiAoUlNUQyBPZmZzZXQ6IDB4OCkgUmVzZXQgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfUlNUQ19VUlNURU4gICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgLyogKFJTVEMpIFVzZXIgUmVzZXQgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19SU1RDX1VSU1RJRU4gICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA0ICkgICAvKiAoUlNUQykgVXNlciBSZXNldCBJbnRlcnJ1cHQgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19SU1RDX0VSU1RMICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RiA8PCA4ICkgICAvKiAoUlNUQykgVXNlciBSZXNldCBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1JTVENfQk9ESUVOICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE2ICkgIC8qIChSU1RDKSBCcm93bm91dCBEZXRlY3Rpb24gSW50ZXJydXB0IEVuYWJsZSAqLw0KKy8vIC0tLS0tLS0tIFJTVENfUkNSIDogKFJTVEMgT2Zmc2V0OiAweDApIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19SU1RDX1BST0NSU1QgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFJTVEMpIFByb2Nlc3NvciBSZXNldA0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19QRVJSU1QgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChSU1RDKSBQZXJpcGhlcmFsIFJlc2V0DQorI2RlZmluZSBBVDkxQ19SU1RDX0VYVFJTVCAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKFJTVEMpIEV4dGVybmFsIFJlc2V0DQorI2RlZmluZSBBVDkxQ19SU1RDX0tFWSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgMjQpIC8vIChSU1RDKSBQYXNzd29yZA0KKy8vIC0tLS0tLS0tIFJTVENfUlNSIDogKFJTVEMgT2Zmc2V0OiAweDQpIFJlc2V0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1JTVENfVVJTVFMgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoUlNUQykgVXNlciBSZXNldCBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX1JTVENfQk9EU1RTICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoUlNUQykgQnJvd25vdXQgRGV0ZWN0aW9uIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19SU1RUWVAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgIDgpIC8vIChSU1RDKSBSZXNldCBUeXBlDQorI2RlZmluZSAJQVQ5MUNfUlNUQ19SU1RUWVBfUE9XRVJVUCAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgOCkgLy8gKFJTVEMpIFBvd2VyLXVwIFJlc2V0LiBWRERDT1JFIHJpc2luZy4NCisjZGVmaW5lIAlBVDkxQ19SU1RDX1JTVFRZUF9XQUtFVVAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoUlNUQykgV2FrZVVwIFJlc2V0LiBWRERDT1JFIHJpc2luZy4NCisjZGVmaW5lIAlBVDkxQ19SU1RDX1JTVFRZUF9XQVRDSERPRyAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA4KSAvLyAoUlNUQykgV2F0Y2hkb2cgUmVzZXQuIFdhdGNoZG9nIG92ZXJmbG93IG9jY3VyZWQuDQorI2RlZmluZSAJQVQ5MUNfUlNUQ19SU1RUWVBfU09GVFdBUkUgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKFJTVEMpIFNvZnR3YXJlIFJlc2V0LiBQcm9jZXNzb3IgcmVzZXQgcmVxdWlyZWQgYnkgdGhlIHNvZnR3YXJlLg0KKyNkZWZpbmUgCUFUOTFDX1JTVENfUlNUVFlQX1VTRVIgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDQgPDwgIDgpIC8vIChSU1RDKSBVc2VyIFJlc2V0LiBOUlNUIHBpbiBkZXRlY3RlZCBsb3cuDQorI2RlZmluZSAJQVQ5MUNfUlNUQ19SU1RUWVBfQlJPV05PVVQgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NSA8PCAgOCkgLy8gKFJTVEMpIEJyb3dub3V0IFJlc2V0IG9jY3VyZWQuDQorI2RlZmluZSBBVDkxQ19SU1RDX05SU1RMICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKFJTVEMpIE5SU1QgcGluIGxldmVsDQorI2RlZmluZSBBVDkxQ19SU1RDX1NSQ01QICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNykgLy8gKFJTVEMpIFNvZnR3YXJlIFJlc2V0IENvbW1hbmQgaW4gUHJvZ3Jlc3MuDQorLy8gLS0tLS0tLS0gUlNUQ19STVIgOiAoUlNUQyBPZmZzZXQ6IDB4OCkgUmVzZXQgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1JTVENfVVJTVEVOICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoUlNUQykgVXNlciBSZXNldCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1JTVENfVVJTVElFTiAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoUlNUQykgVXNlciBSZXNldCBJbnRlcnJ1cHQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19SU1RDX0VSU1RMICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAgOCkgLy8gKFJTVEMpIFVzZXIgUmVzZXQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19SU1RDX0JPRElFTiAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKFJTVEMpIEJyb3dub3V0IERldGVjdGlvbiBJbnRlcnJ1cHQgRW5hYmxlDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBSZWFsIFRpbWUgVGltZXIgQ29udHJvbGxlciBJbnRlcmZhY2UgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLXR5cGVkZWYgc3RydWN0IF9BVDkxU19SVFRDDQotew0KLSAgICBBVDkxX1JFRyBSVFRDX1JUTVI7IC8qIFJlYWwtdGltZSBNb2RlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJUVENfUlRBUjsgLyogUmVhbC10aW1lIEFsYXJtIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJUVENfUlRWUjsgLyogUmVhbC10aW1lIFZhbHVlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJUVENfUlRTUjsgLyogUmVhbC10aW1lIFN0YXR1cyBSZWdpc3RlciAqLw0KLX0gQVQ5MVNfUlRUQywgKiBBVDkxUFNfUlRUQzsNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFJlYWwgVGltZSBUaW1lciBDb250cm9sbGVyIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1JUVEMgew0KKwlBVDkxX1JFRwkgUlRUQ19SVE1SOyAJLy8gUmVhbC10aW1lIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJUVENfUlRBUjsgCS8vIFJlYWwtdGltZSBBbGFybSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUlRUQ19SVFZSOyAJLy8gUmVhbC10aW1lIFZhbHVlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSVFRDX1JUU1I7IAkvLyBSZWFsLXRpbWUgU3RhdHVzIFJlZ2lzdGVyDQorfSBBVDkxU19SVFRDLCAqQVQ5MVBTX1JUVEM7DQogDQotLyogLS0tLS0tLS0gUlRUQ19SVE1SIDogKFJUVEMgT2Zmc2V0OiAweDApIFJlYWwtdGltZSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19SVFRDX1JUUFJFUyAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRkZGIDw8IDAgKSAvKiAoUlRUQykgUmVhbC10aW1lIFRpbWVyIFByZXNjYWxlciBWYWx1ZSAqLw0KLSNkZWZpbmUgQVQ5MUNfUlRUQ19BTE1JRU4gICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNiApICAgLyogKFJUVEMpIEFsYXJtIEludGVycnVwdCBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1JUVENfUlRUSU5DSUVOICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTcgKSAgIC8qIChSVFRDKSBSZWFsIFRpbWUgVGltZXIgSW5jcmVtZW50IEludGVycnVwdCBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1JUVENfUlRUUlNUICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTggKSAgIC8qIChSVFRDKSBSZWFsIFRpbWUgVGltZXIgUmVzdGFydCAqLw0KLS8qIC0tLS0tLS0tIFJUVENfUlRBUiA6IChSVFRDIE9mZnNldDogMHg0KSBSZWFsLXRpbWUgQWxhcm0gUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1JUVENfQUxNViAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMCApICAgIC8qIChSVFRDKSBBbGFybSBWYWx1ZSAqLw0KLS8qIC0tLS0tLS0tIFJUVENfUlRWUiA6IChSVFRDIE9mZnNldDogMHg4KSBDdXJyZW50IFJlYWwtdGltZSBWYWx1ZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfUlRUQ19DUlRWICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAwICkgICAgLyogKFJUVEMpIEN1cnJlbnQgUmVhbC10aW1lIFZhbHVlICovDQotLyogLS0tLS0tLS0gUlRUQ19SVFNSIDogKFJUVEMgT2Zmc2V0OiAweGMpIFJlYWwtdGltZSBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1JUVENfQUxNUyAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgIC8qIChSVFRDKSBSZWFsLXRpbWUgQWxhcm0gU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19SVFRDX1JUVElOQyAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEgKSAgICAvKiAoUlRUQykgUmVhbC10aW1lIFRpbWVyIEluY3JlbWVudCAqLw0KKy8vIC0tLS0tLS0tIFJUVENfUlRNUiA6IChSVFRDIE9mZnNldDogMHgwKSBSZWFsLXRpbWUgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1JUVENfUlRQUkVTICAgICAoKHVuc2lnbmVkIGludCkgMHhGRkZGIDw8ICAwKSAvLyAoUlRUQykgUmVhbC10aW1lIFRpbWVyIFByZXNjYWxlciBWYWx1ZQ0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19BTE1JRU4gICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChSVFRDKSBBbGFybSBJbnRlcnJ1cHQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19SVFRDX1JUVElOQ0lFTiAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNykgLy8gKFJUVEMpIFJlYWwgVGltZSBUaW1lciBJbmNyZW1lbnQgSW50ZXJydXB0IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19SVFRSU1QgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTgpIC8vIChSVFRDKSBSZWFsIFRpbWUgVGltZXIgUmVzdGFydA0KKy8vIC0tLS0tLS0tIFJUVENfUlRBUiA6IChSVFRDIE9mZnNldDogMHg0KSBSZWFsLXRpbWUgQWxhcm0gUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19SVFRDX0FMTVYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgMCkgLy8gKFJUVEMpIEFsYXJtIFZhbHVlDQorLy8gLS0tLS0tLS0gUlRUQ19SVFZSIDogKFJUVEMgT2Zmc2V0OiAweDgpIEN1cnJlbnQgUmVhbC10aW1lIFZhbHVlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19DUlRWICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDApIC8vIChSVFRDKSBDdXJyZW50IFJlYWwtdGltZSBWYWx1ZQ0KKy8vIC0tLS0tLS0tIFJUVENfUlRTUiA6IChSVFRDIE9mZnNldDogMHhjKSBSZWFsLXRpbWUgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19BTE1TICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChSVFRDKSBSZWFsLXRpbWUgQWxhcm0gU3RhdHVzDQorI2RlZmluZSBBVDkxQ19SVFRDX1JUVElOQyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFJUVEMpIFJlYWwtdGltZSBUaW1lciBJbmNyZW1lbnQNCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFBlcmlvZGljIEludGVydmFsIFRpbWVyIENvbnRyb2xsZXIgSW50ZXJmYWNlICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfUElUQw0KLXsNCi0gICAgQVQ5MV9SRUcgUElUQ19QSU1SOyAvKiBQZXJpb2QgSW50ZXJ2YWwgTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSVRDX1BJU1I7IC8qIFBlcmlvZCBJbnRlcnZhbCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElUQ19QSVZSOyAvKiBQZXJpb2QgSW50ZXJ2YWwgVmFsdWUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElUQ19QSUlSOyAvKiBQZXJpb2QgSW50ZXJ2YWwgSW1hZ2UgUmVnaXN0ZXIgKi8NCi19IEFUOTFTX1BJVEMsICogQVQ5MVBTX1BJVEM7DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQZXJpb2RpYyBJbnRlcnZhbCBUaW1lciBDb250cm9sbGVyIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1BJVEMgew0KKwlBVDkxX1JFRwkgUElUQ19QSU1SOyAJLy8gUGVyaW9kIEludGVydmFsIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJVENfUElTUjsgCS8vIFBlcmlvZCBJbnRlcnZhbCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJVENfUElWUjsgCS8vIFBlcmlvZCBJbnRlcnZhbCBWYWx1ZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElUQ19QSUlSOyAJLy8gUGVyaW9kIEludGVydmFsIEltYWdlIFJlZ2lzdGVyDQorfSBBVDkxU19QSVRDLCAqQVQ5MVBTX1BJVEM7DQogDQotLyogLS0tLS0tLS0gUElUQ19QSU1SIDogKFBJVEMgT2Zmc2V0OiAweDApIFBlcmlvZGljIEludGVydmFsIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1BJVENfUElWICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGRkZGIDw8IDAgKSAvKiAoUElUQykgUGVyaW9kaWMgSW50ZXJ2YWwgVmFsdWUgKi8NCi0jZGVmaW5lIEFUOTFDX1BJVENfUElURU4gICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjQgKSAgICAvKiAoUElUQykgUGVyaW9kaWMgSW50ZXJ2YWwgVGltZXIgRW5hYmxlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfUElUQ19QSVRJRU4gICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyNSApICAgIC8qIChQSVRDKSBQZXJpb2RpYyBJbnRlcnZhbCBUaW1lciBJbnRlcnJ1cHQgRW5hYmxlICovDQotLyogLS0tLS0tLS0gUElUQ19QSVNSIDogKFBJVEMgT2Zmc2V0OiAweDQpIFBlcmlvZGljIEludGVydmFsIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElUQ19QSVRTICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgICAgIC8qIChQSVRDKSBQZXJpb2RpYyBJbnRlcnZhbCBUaW1lciBTdGF0dXMgKi8NCi0vKiAtLS0tLS0tLSBQSVRDX1BJVlIgOiAoUElUQyBPZmZzZXQ6IDB4OCkgUGVyaW9kaWMgSW50ZXJ2YWwgVmFsdWUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1BJVENfQ1BJViAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGRkZGIDw8IDAgKSAvKiAoUElUQykgQ3VycmVudCBQZXJpb2RpYyBJbnRlcnZhbCBWYWx1ZSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElUQ19QSUNOVCAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RkZGIDw8IDIwICkgIC8qIChQSVRDKSBQZXJpb2RpYyBJbnRlcnZhbCBDb3VudGVyICovDQotLyogLS0tLS0tLS0gUElUQ19QSUlSIDogKFBJVEMgT2Zmc2V0OiAweGMpIFBlcmlvZGljIEludGVydmFsIEltYWdlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQorLy8gLS0tLS0tLS0gUElUQ19QSU1SIDogKFBJVEMgT2Zmc2V0OiAweDApIFBlcmlvZGljIEludGVydmFsIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QSVRDX1BJViAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGRkYgPDwgIDApIC8vIChQSVRDKSBQZXJpb2RpYyBJbnRlcnZhbCBWYWx1ZQ0KKyNkZWZpbmUgQVQ5MUNfUElUQ19QSVRFTiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjQpIC8vIChQSVRDKSBQZXJpb2RpYyBJbnRlcnZhbCBUaW1lciBFbmFibGVkDQorI2RlZmluZSBBVDkxQ19QSVRDX1BJVElFTiAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNSkgLy8gKFBJVEMpIFBlcmlvZGljIEludGVydmFsIFRpbWVyIEludGVycnVwdCBFbmFibGUNCisvLyAtLS0tLS0tLSBQSVRDX1BJU1IgOiAoUElUQyBPZmZzZXQ6IDB4NCkgUGVyaW9kaWMgSW50ZXJ2YWwgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUElUQ19QSVRTICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChQSVRDKSBQZXJpb2RpYyBJbnRlcnZhbCBUaW1lciBTdGF0dXMNCisvLyAtLS0tLS0tLSBQSVRDX1BJVlIgOiAoUElUQyBPZmZzZXQ6IDB4OCkgUGVyaW9kaWMgSW50ZXJ2YWwgVmFsdWUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QSVRDX0NQSVYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGRkYgPDwgIDApIC8vIChQSVRDKSBDdXJyZW50IFBlcmlvZGljIEludGVydmFsIFZhbHVlDQorI2RlZmluZSBBVDkxQ19QSVRDX1BJQ05UICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGIDw8IDIwKSAvLyAoUElUQykgUGVyaW9kaWMgSW50ZXJ2YWwgQ291bnRlcg0KKy8vIC0tLS0tLS0tIFBJVENfUElJUiA6IChQSVRDIE9mZnNldDogMHhjKSBQZXJpb2RpYyBJbnRlcnZhbCBJbWFnZSBSZWdpc3RlciAtLS0tLS0tLSANCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFdhdGNoZG9nIFRpbWVyIENvbnRyb2xsZXIgSW50ZXJmYWNlICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfV0RUQw0KLXsNCi0gICAgQVQ5MV9SRUcgV0RUQ19XRENSOyAvKiBXYXRjaGRvZyBDb250cm9sIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFdEVENfV0RNUjsgLyogV2F0Y2hkb2cgTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBXRFRDX1dEU1I7IC8qIFdhdGNoZG9nIFN0YXR1cyBSZWdpc3RlciAqLw0KLX0gQVQ5MVNfV0RUQywgKiBBVDkxUFNfV0RUQzsNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFdhdGNoZG9nIFRpbWVyIENvbnRyb2xsZXIgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfV0RUQyB7DQorCUFUOTFfUkVHCSBXRFRDX1dEQ1I7IAkvLyBXYXRjaGRvZyBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBXRFRDX1dETVI7IAkvLyBXYXRjaGRvZyBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBXRFRDX1dEU1I7IAkvLyBXYXRjaGRvZyBTdGF0dXMgUmVnaXN0ZXINCit9IEFUOTFTX1dEVEMsICpBVDkxUFNfV0RUQzsNCiANCi0vKiAtLS0tLS0tLSBXRFRDX1dEQ1IgOiAoV0RUQyBPZmZzZXQ6IDB4MCkgUGVyaW9kaWMgSW50ZXJ2YWwgSW1hZ2UgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1dEVENfV0RSU1RUICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgIC8qIChXRFRDKSBXYXRjaGRvZyBSZXN0YXJ0ICovDQotI2RlZmluZSBBVDkxQ19XRFRDX0tFWSAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRiA8PCAyNCApICAvKiAoV0RUQykgV2F0Y2hkb2cgS0VZIFBhc3N3b3JkICovDQotLyogLS0tLS0tLS0gV0RUQ19XRE1SIDogKFdEVEMgT2Zmc2V0OiAweDQpIFdhdGNoZG9nIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1dEVENfV0RWICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGRiA8PCAwICkgIC8qIChXRFRDKSBXYXRjaGRvZyBUaW1lciBSZXN0YXJ0ICovDQotI2RlZmluZSBBVDkxQ19XRFRDX1dERklFTiAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEyICkgICAvKiAoV0RUQykgV2F0Y2hkb2cgRmF1bHQgSW50ZXJydXB0IEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfV0RUQ19XRFJTVEVOICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMyApICAgLyogKFdEVEMpIFdhdGNoZG9nIFJlc2V0IEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfV0RUQ19XRFJQUk9DICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNCApICAgLyogKFdEVEMpIFdhdGNoZG9nIFRpbWVyIFJlc3RhcnQgKi8NCi0jZGVmaW5lIEFUOTFDX1dEVENfV0RESVMgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTUgKSAgIC8qIChXRFRDKSBXYXRjaGRvZyBEaXNhYmxlICovDQotI2RlZmluZSBBVDkxQ19XRFRDX1dERCAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRkYgPDwgMTYgKSAvKiAoV0RUQykgV2F0Y2hkb2cgRGVsdGEgVmFsdWUgKi8NCi0jZGVmaW5lIEFUOTFDX1dEVENfV0REQkdITFQgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjggKSAgIC8qIChXRFRDKSBXYXRjaGRvZyBEZWJ1ZyBIYWx0ICovDQotI2RlZmluZSBBVDkxQ19XRFRDX1dESURMRUhMVCAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDI5ICkgICAvKiAoV0RUQykgV2F0Y2hkb2cgSWRsZSBIYWx0ICovDQotLyogLS0tLS0tLS0gV0RUQ19XRFNSIDogKFdEVEMgT2Zmc2V0OiAweDgpIFdhdGNoZG9nIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfV0RUQ19XRFVORiAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgICAgLyogKFdEVEMpIFdhdGNoZG9nIFVuZGVyZmxvdyAqLw0KLSNkZWZpbmUgQVQ5MUNfV0RUQ19XREVSUiAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgICAgLyogKFdEVEMpIFdhdGNoZG9nIEVycm9yICovDQorLy8gLS0tLS0tLS0gV0RUQ19XRENSIDogKFdEVEMgT2Zmc2V0OiAweDApIFBlcmlvZGljIEludGVydmFsIEltYWdlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRFJTVFQgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChXRFRDKSBXYXRjaGRvZyBSZXN0YXJ0DQorI2RlZmluZSBBVDkxQ19XRFRDX0tFWSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgMjQpIC8vIChXRFRDKSBXYXRjaGRvZyBLRVkgUGFzc3dvcmQNCisvLyAtLS0tLS0tLSBXRFRDX1dETVIgOiAoV0RUQyBPZmZzZXQ6IDB4NCkgV2F0Y2hkb2cgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1dEVENfV0RWICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRkYgPDwgIDApIC8vIChXRFRDKSBXYXRjaGRvZyBUaW1lciBSZXN0YXJ0DQorI2RlZmluZSBBVDkxQ19XRFRDX1dERklFTiAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLy8gKFdEVEMpIFdhdGNoZG9nIEZhdWx0IEludGVycnVwdCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1dEVENfV0RSU1RFTiAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEzKSAvLyAoV0RUQykgV2F0Y2hkb2cgUmVzZXQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19XRFRDX1dEUlBST0MgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNCkgLy8gKFdEVEMpIFdhdGNoZG9nIFRpbWVyIFJlc3RhcnQNCisjZGVmaW5lIEFUOTFDX1dEVENfV0RESVMgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE1KSAvLyAoV0RUQykgV2F0Y2hkb2cgRGlzYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XREQgICAgICAgICgodW5zaWduZWQgaW50KSAweEZGRiA8PCAxNikgLy8gKFdEVEMpIFdhdGNoZG9nIERlbHRhIFZhbHVlDQorI2RlZmluZSBBVDkxQ19XRFRDX1dEREJHSExUICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyOCkgLy8gKFdEVEMpIFdhdGNoZG9nIERlYnVnIEhhbHQNCisjZGVmaW5lIEFUOTFDX1dEVENfV0RJRExFSExUICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI5KSAvLyAoV0RUQykgV2F0Y2hkb2cgSWRsZSBIYWx0DQorLy8gLS0tLS0tLS0gV0RUQ19XRFNSIDogKFdEVEMgT2Zmc2V0OiAweDgpIFdhdGNoZG9nIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1dEVENfV0RVTkYgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoV0RUQykgV2F0Y2hkb2cgVW5kZXJmbG93DQorI2RlZmluZSBBVDkxQ19XRFRDX1dERVJSICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFdEVEMpIFdhdGNoZG9nIEVycm9yDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBWb2x0YWdlIFJlZ3VsYXRvciBNb2RlIENvbnRyb2xsZXIgSW50ZXJmYWNlICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfVlJFRw0KLXsNCi0gICAgQVQ5MV9SRUcgVlJFR19NUjsgLyogVm9sdGFnZSBSZWd1bGF0b3IgTW9kZSBSZWdpc3RlciAqLw0KLX0gQVQ5MVNfVlJFRywgKiBBVDkxUFNfVlJFRzsNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFZvbHRhZ2UgUmVndWxhdG9yIE1vZGUgQ29udHJvbGxlciBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19WUkVHIHsNCisJQVQ5MV9SRUcJIFZSRUdfTVI7IAkvLyBWb2x0YWdlIFJlZ3VsYXRvciBNb2RlIFJlZ2lzdGVyDQorfSBBVDkxU19WUkVHLCAqQVQ5MVBTX1ZSRUc7DQogDQotLyogLS0tLS0tLS0gVlJFR19NUiA6IChWUkVHIE9mZnNldDogMHgwKSBWb2x0YWdlIFJlZ3VsYXRvciBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19WUkVHX1BTVERCWSAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAvKiAoVlJFRykgVm9sdGFnZSBSZWd1bGF0b3IgUG93ZXIgU3RhbmRieSBNb2RlICovDQorLy8gLS0tLS0tLS0gVlJFR19NUiA6IChWUkVHIE9mZnNldDogMHgwKSBWb2x0YWdlIFJlZ3VsYXRvciBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVlJFR19QU1REQlkgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChWUkVHKSBWb2x0YWdlIFJlZ3VsYXRvciBQb3dlciBTdGFuZGJ5IE1vZGUNCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIE1lbW9yeSBDb250cm9sbGVyIEludGVyZmFjZSAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotdHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX01DDQotew0KLSAgICBBVDkxX1JFRyBNQ19SQ1I7ICAgICAgICAgIC8qIE1DIFJlbWFwIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgTUNfQVNSOyAgICAgICAgICAvKiBNQyBBYm9ydCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgTUNfQUFTUjsgICAgICAgICAvKiBNQyBBYm9ydCBBZGRyZXNzIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDBbIDIxIF07IC8qICovDQotICAgIEFUOTFfUkVHIE1DX0ZNUjsgICAgICAgICAgLyogTUMgRmxhc2ggTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBNQ19GQ1I7ICAgICAgICAgIC8qIE1DIEZsYXNoIENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgTUNfRlNSOyAgICAgICAgICAvKiBNQyBGbGFzaCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi19IEFUOTFTX01DLCAqIEFUOTFQU19NQzsNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIE1lbW9yeSBDb250cm9sbGVyIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX01DIHsNCisJQVQ5MV9SRUcJIE1DX1JDUjsgCS8vIE1DIFJlbWFwIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIE1DX0FTUjsgCS8vIE1DIEFib3J0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgTUNfQUFTUjsgCS8vIE1DIEFib3J0IEFkZHJlc3MgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbMjFdOyAJLy8gDQorCUFUOTFfUkVHCSBNQ19GTVI7IAkvLyBNQyBGbGFzaCBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBNQ19GQ1I7IAkvLyBNQyBGbGFzaCBDb21tYW5kIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBNQ19GU1I7IAkvLyBNQyBGbGFzaCBTdGF0dXMgUmVnaXN0ZXINCit9IEFUOTFTX01DLCAqQVQ5MVBTX01DOw0KIA0KLS8qIC0tLS0tLS0tIE1DX1JDUiA6IChNQyBPZmZzZXQ6IDB4MCkgTUMgUmVtYXAgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfUkNCICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgIC8qIChNQykgUmVtYXAgQ29tbWFuZCBCaXQgKi8NCi0vKiAtLS0tLS0tLSBNQ19BU1IgOiAoTUMgT2Zmc2V0OiAweDQpIE1DIEFib3J0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfVU5EQUREICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgIC8qIChNQykgVW5kZWZpbmVkIEFkZGVzcyBBYm9ydCBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX01JU0FERCAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgICAvKiAoTUMpIE1pc2FsaWduZWQgQWRkZXNzIEFib3J0IFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfQUJUU1ogICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDggKSAgIC8qIChNQykgQWJvcnQgU2l6ZSBTdGF0dXMgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19NQ19BQlRTWl9CWVRFICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCA4ICkgICAvKiAoTUMpIEJ5dGUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19NQ19BQlRTWl9IV09SRCAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgICAvKiAoTUMpIEhhbGYtd29yZCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX01DX0FCVFNaX1dPUkQgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDggKSAgIC8qIChNQykgV29yZCAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfQUJUVFlQICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDEwICkgIC8qIChNQykgQWJvcnQgVHlwZSBTdGF0dXMgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19NQ19BQlRUWVBfREFUQVIgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAxMCApICAvKiAoTUMpIERhdGEgUmVhZCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX01DX0FCVFRZUF9EQVRBVyAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEwICkgIC8qIChNQykgRGF0YSBXcml0ZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX01DX0FCVFRZUF9GRVRDSCAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDEwICkgIC8qIChNQykgQ29kZSBGZXRjaCAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTVNUMCAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE2ICkgIC8qIChNQykgTWFzdGVyIDAgQWJvcnQgU291cmNlICovDQotI2RlZmluZSBBVDkxQ19NQ19NU1QxICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTcgKSAgLyogKE1DKSBNYXN0ZXIgMSBBYm9ydCBTb3VyY2UgKi8NCi0jZGVmaW5lIEFUOTFDX01DX1NWTVNUMCAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyNCApICAvKiAoTUMpIFNhdmVkIE1hc3RlciAwIEFib3J0IFNvdXJjZSAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfU1ZNU1QxICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDI1ICkgIC8qIChNQykgU2F2ZWQgTWFzdGVyIDEgQWJvcnQgU291cmNlICovDQotLyogLS0tLS0tLS0gTUNfRk1SIDogKE1DIE9mZnNldDogMHg2MCkgTUMgRmxhc2ggTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfRlJEWSAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgIC8qIChNQykgRmxhc2ggUmVhZHkgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0xPQ0tFICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyICkgICAvKiAoTUMpIExvY2sgRXJyb3IgKi8NCi0jZGVmaW5lIEFUOTFDX01DX1BST0dFICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzICkgICAvKiAoTUMpIFByb2dyYW1taW5nIEVycm9yICovDQotI2RlZmluZSBBVDkxQ19NQ19ORUJQICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNyApICAgLyogKE1DKSBObyBFcmFzZSBCZWZvcmUgUHJvZ3JhbW1pbmcgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0ZXUyAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCA4ICkgICAvKiAoTUMpIEZsYXNoIFdhaXQgU3RhdGUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19NQ19GV1NfMEZXUyAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCA4ICkgICAvKiAoTUMpIDEgY3ljbGUgZm9yIFJlYWQsIDIgZm9yIFdyaXRlIG9wZXJhdGlvbnMgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19NQ19GV1NfMUZXUyAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgICAvKiAoTUMpIDIgY3ljbGVzIGZvciBSZWFkLCAzIGZvciBXcml0ZSBvcGVyYXRpb25zICovDQotI2RlZmluZSAgICAgQVQ5MUNfTUNfRldTXzJGV1MgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgOCApICAgLyogKE1DKSAzIGN5Y2xlcyBmb3IgUmVhZCwgNCBmb3IgV3JpdGUgb3BlcmF0aW9ucyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX01DX0ZXU18zRldTICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDggKSAgIC8qIChNQykgNCBjeWNsZXMgZm9yIFJlYWQsIDQgZm9yIFdyaXRlIG9wZXJhdGlvbnMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0ZNQ04gICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RkYgPDwgMTYgKSAvKiAoTUMpIEZsYXNoIE1pY3Jvc2Vjb25kIEN5Y2xlIE51bWJlciAqLw0KLS8qIC0tLS0tLS0tIE1DX0ZDUiA6IChNQyBPZmZzZXQ6IDB4NjQpIE1DIEZsYXNoIENvbW1hbmQgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX01DX0ZDTUQgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RiA8PCAwICkgICAvKiAoTUMpIEZsYXNoIENvbW1hbmQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19NQ19GQ01EX1NUQVJUX1BST0cgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSApICAgICAgICAvKiAoTUMpIFN0YXJ0cyB0aGUgcHJvZ3JhbW1pbmcgb2YgdGggZXBhZ2Ugc3BlY2lmaWVkIGJ5IFBBR0VOLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX01DX0ZDTURfTE9DSyAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyICkgICAgICAgIC8qIChNQykgU3RhcnRzIGEgbG9jayBzZXF1ZW5jZSBvZiB0aGUgc2VjdG9yIGRlZmluZWQgYnkgdGhlIGJpdHMgNCB0byA3IG9mIHRoZSBmaWVsZCBQQUdFTi4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19NQ19GQ01EX1BST0dfQU5EX0xPQ0sgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyApICAgICAgICAvKiAoTUMpIFRoZSBsb2NrIHNlcXVlbmNlIGF1dG9tYXRpY2FsbHkgaGFwcGVucyBhZnRlciB0aGUgcHJvZ3JhbW1pbmcgc2VxdWVuY2UgaXMgY29tcGxldGVkLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX01DX0ZDTURfVU5MT0NLICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg0ICkgICAgICAgIC8qIChNQykgU3RhcnRzIGFuIHVubG9jayBzZXF1ZW5jZSBvZiB0aGUgc2VjdG9yIGRlZmluZWQgYnkgdGhlIGJpdHMgNCB0byA3IG9mIHRoZSBmaWVsZCBQQUdFTi4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19NQ19GQ01EX0VSQVNFX0FMTCAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4OCApICAgICAgICAvKiAoTUMpIFN0YXJ0cyB0aGUgZXJhc2Ugb2YgdGhlIGVudGlyZSBmbGFzaC5JZiBhdCBsZWFzdCBhIHBhZ2UgaXMgbG9ja2VkLCB0aGUgY29tbWFuZCBpcyBjYW5jZWxsZWQuICovDQotI2RlZmluZSAgICAgQVQ5MUNfTUNfRkNNRF9TRVRfR1BfTlZNICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEIgKSAgICAgICAgLyogKE1DKSBTZXQgR2VuZXJhbCBQdXJwb3NlIE5WTSBiaXRzLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX01DX0ZDTURfQ0xSX0dQX05WTSAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhEICkgICAgICAgIC8qIChNQykgQ2xlYXIgR2VuZXJhbCBQdXJwb3NlIE5WTSBiaXRzLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX01DX0ZDTURfU0VUX1NFQ1VSSVRZICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGICkgICAgICAgIC8qIChNQykgU2V0IFNlY3VyaXR5IEJpdC4gKi8NCi0jZGVmaW5lIEFUOTFDX01DX1BBR0VOICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4M0ZGIDw8IDggKSAvKiAoTUMpIFBhZ2UgTnVtYmVyICovDQotI2RlZmluZSBBVDkxQ19NQ19LRVkgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGIDw8IDI0ICkgLyogKE1DKSBXcml0aW5nIFByb3RlY3QgS2V5ICovDQotLyogLS0tLS0tLS0gTUNfRlNSIDogKE1DIE9mZnNldDogMHg2OCkgTUMgRmxhc2ggQ29tbWFuZCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfU0VDVVJJVFkgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDQgKSAgIC8qIChNQykgU2VjdXJpdHkgQml0IFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfR1BOVk0wICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDggKSAgIC8qIChNQykgU2VjdG9yIDAgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0dQTlZNMSAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA5ICkgICAvKiAoTUMpIFNlY3RvciAxIExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19HUE5WTTIgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTAgKSAgLyogKE1DKSBTZWN0b3IgMiBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfR1BOVk0zICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDExICkgIC8qIChNQykgU2VjdG9yIDMgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0dQTlZNNCAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMiApICAvKiAoTUMpIFNlY3RvciA0IExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19HUE5WTTUgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTMgKSAgLyogKE1DKSBTZWN0b3IgNSBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfR1BOVk02ICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE0ICkgIC8qIChNQykgU2VjdG9yIDYgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0dQTlZNNyAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNSApICAvKiAoTUMpIFNlY3RvciA3IExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19MT0NLUzAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTYgKSAgLyogKE1DKSBTZWN0b3IgMCBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE3ICkgIC8qIChNQykgU2VjdG9yIDEgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0xPQ0tTMiAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxOCApICAvKiAoTUMpIFNlY3RvciAyIExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19MT0NLUzMgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTkgKSAgLyogKE1DKSBTZWN0b3IgMyBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTE9DS1M0ICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIwICkgIC8qIChNQykgU2VjdG9yIDQgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0xPQ0tTNSAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyMSApICAvKiAoTUMpIFNlY3RvciA1IExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19MT0NLUzYgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjIgKSAgLyogKE1DKSBTZWN0b3IgNiBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTE9DS1M3ICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIzICkgIC8qIChNQykgU2VjdG9yIDcgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0xPQ0tTOCAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyNCApICAvKiAoTUMpIFNlY3RvciA4IExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19MT0NLUzkgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjUgKSAgLyogKE1DKSBTZWN0b3IgOSBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxMCAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDI2ICkgIC8qIChNQykgU2VjdG9yIDEwIExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19MT0NLUzExICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjcgKSAgLyogKE1DKSBTZWN0b3IgMTEgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0xPQ0tTMTIgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyOCApICAvKiAoTUMpIFNlY3RvciAxMiBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxMyAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDI5ICkgIC8qIChNQykgU2VjdG9yIDEzIExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19MT0NLUzE0ICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMzAgKSAgLyogKE1DKSBTZWN0b3IgMTQgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0xPQ0tTMTUgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzMSApICAvKiAoTUMpIFNlY3RvciAxNSBMb2NrIFN0YXR1cyAqLw0KKy8vIC0tLS0tLS0tIE1DX1JDUiA6IChNQyBPZmZzZXQ6IDB4MCkgTUMgUmVtYXAgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX01DX1JDQiAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoTUMpIFJlbWFwIENvbW1hbmQgQml0DQorLy8gLS0tLS0tLS0gTUNfQVNSIDogKE1DIE9mZnNldDogMHg0KSBNQyBBYm9ydCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19NQ19VTkRBREQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKE1DKSBVbmRlZmluZWQgQWRkZXNzIEFib3J0IFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTUlTQUREICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChNQykgTWlzYWxpZ25lZCBBZGRlc3MgQWJvcnQgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19BQlRTWiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKE1DKSBBYm9ydCBTaXplIFN0YXR1cw0KKyNkZWZpbmUgCUFUOTFDX01DX0FCVFNaX0JZVEUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDgpIC8vIChNQykgQnl0ZQ0KKyNkZWZpbmUgCUFUOTFDX01DX0FCVFNaX0hXT1JEICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChNQykgSGFsZi13b3JkDQorI2RlZmluZSAJQVQ5MUNfTUNfQUJUU1pfV09SRCAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgOCkgLy8gKE1DKSBXb3JkDQorI2RlZmluZSBBVDkxQ19NQ19BQlRUWVAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxMCkgLy8gKE1DKSBBYm9ydCBUeXBlIFN0YXR1cw0KKyNkZWZpbmUgCUFUOTFDX01DX0FCVFRZUF9EQVRBUiAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDEwKSAvLyAoTUMpIERhdGEgUmVhZA0KKyNkZWZpbmUgCUFUOTFDX01DX0FCVFRZUF9EQVRBVyAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEwKSAvLyAoTUMpIERhdGEgV3JpdGUNCisjZGVmaW5lIAlBVDkxQ19NQ19BQlRUWVBfRkVUQ0ggICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxMCkgLy8gKE1DKSBDb2RlIEZldGNoDQorI2RlZmluZSBBVDkxQ19NQ19NU1QwICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKE1DKSBNYXN0ZXIgMCBBYm9ydCBTb3VyY2UNCisjZGVmaW5lIEFUOTFDX01DX01TVDEgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE3KSAvLyAoTUMpIE1hc3RlciAxIEFib3J0IFNvdXJjZQ0KKyNkZWZpbmUgQVQ5MUNfTUNfU1ZNU1QwICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjQpIC8vIChNQykgU2F2ZWQgTWFzdGVyIDAgQWJvcnQgU291cmNlDQorI2RlZmluZSBBVDkxQ19NQ19TVk1TVDEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNSkgLy8gKE1DKSBTYXZlZCBNYXN0ZXIgMSBBYm9ydCBTb3VyY2UNCisvLyAtLS0tLS0tLSBNQ19GTVIgOiAoTUMgT2Zmc2V0OiAweDYwKSBNQyBGbGFzaCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfTUNfRlJEWSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChNQykgRmxhc2ggUmVhZHkNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tFICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoTUMpIExvY2sgRXJyb3INCisjZGVmaW5lIEFUOTFDX01DX1BST0dFICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoTUMpIFByb2dyYW1taW5nIEVycm9yDQorI2RlZmluZSBBVDkxQ19NQ19ORUJQICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKE1DKSBObyBFcmFzZSBCZWZvcmUgUHJvZ3JhbW1pbmcNCisjZGVmaW5lIEFUOTFDX01DX0ZXUyAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA4KSAvLyAoTUMpIEZsYXNoIFdhaXQgU3RhdGUNCisjZGVmaW5lIAlBVDkxQ19NQ19GV1NfMEZXUyAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgOCkgLy8gKE1DKSAxIGN5Y2xlIGZvciBSZWFkLCAyIGZvciBXcml0ZSBvcGVyYXRpb25zDQorI2RlZmluZSAJQVQ5MUNfTUNfRldTXzFGV1MgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChNQykgMiBjeWNsZXMgZm9yIFJlYWQsIDMgZm9yIFdyaXRlIG9wZXJhdGlvbnMNCisjZGVmaW5lIAlBVDkxQ19NQ19GV1NfMkZXUyAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgOCkgLy8gKE1DKSAzIGN5Y2xlcyBmb3IgUmVhZCwgNCBmb3IgV3JpdGUgb3BlcmF0aW9ucw0KKyNkZWZpbmUgCUFUOTFDX01DX0ZXU18zRldTICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA4KSAvLyAoTUMpIDQgY3ljbGVzIGZvciBSZWFkLCA0IGZvciBXcml0ZSBvcGVyYXRpb25zDQorI2RlZmluZSBBVDkxQ19NQ19GTUNOICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgMTYpIC8vIChNQykgRmxhc2ggTWljcm9zZWNvbmQgQ3ljbGUgTnVtYmVyDQorLy8gLS0tLS0tLS0gTUNfRkNSIDogKE1DIE9mZnNldDogMHg2NCkgTUMgRmxhc2ggQ29tbWFuZCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX01DX0ZDTUQgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8ICAwKSAvLyAoTUMpIEZsYXNoIENvbW1hbmQNCisjZGVmaW5lIAlBVDkxQ19NQ19GQ01EX1NUQVJUX1BST0cgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEpIC8vIChNQykgU3RhcnRzIHRoZSBwcm9ncmFtbWluZyBvZiB0aCBlcGFnZSBzcGVjaWZpZWQgYnkgUEFHRU4uDQorI2RlZmluZSAJQVQ5MUNfTUNfRkNNRF9MT0NLICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyKSAvLyAoTUMpIFN0YXJ0cyBhIGxvY2sgc2VxdWVuY2Ugb2YgdGhlIHNlY3RvciBkZWZpbmVkIGJ5IHRoZSBiaXRzIDQgdG8gNyBvZiB0aGUgZmllbGQgUEFHRU4uDQorI2RlZmluZSAJQVQ5MUNfTUNfRkNNRF9QUk9HX0FORF9MT0NLICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzKSAvLyAoTUMpIFRoZSBsb2NrIHNlcXVlbmNlIGF1dG9tYXRpY2FsbHkgaGFwcGVucyBhZnRlciB0aGUgcHJvZ3JhbW1pbmcgc2VxdWVuY2UgaXMgY29tcGxldGVkLg0KKyNkZWZpbmUgCUFUOTFDX01DX0ZDTURfVU5MT0NLICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NCkgLy8gKE1DKSBTdGFydHMgYW4gdW5sb2NrIHNlcXVlbmNlIG9mIHRoZSBzZWN0b3IgZGVmaW5lZCBieSB0aGUgYml0cyA0IHRvIDcgb2YgdGhlIGZpZWxkIFBBR0VOLg0KKyNkZWZpbmUgCUFUOTFDX01DX0ZDTURfRVJBU0VfQUxMICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4OCkgLy8gKE1DKSBTdGFydHMgdGhlIGVyYXNlIG9mIHRoZSBlbnRpcmUgZmxhc2guSWYgYXQgbGVhc3QgYSBwYWdlIGlzIGxvY2tlZCwgdGhlIGNvbW1hbmQgaXMgY2FuY2VsbGVkLg0KKyNkZWZpbmUgCUFUOTFDX01DX0ZDTURfU0VUX0dQX05WTSAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4QikgLy8gKE1DKSBTZXQgR2VuZXJhbCBQdXJwb3NlIE5WTSBiaXRzLg0KKyNkZWZpbmUgCUFUOTFDX01DX0ZDTURfQ0xSX0dQX05WTSAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RCkgLy8gKE1DKSBDbGVhciBHZW5lcmFsIFB1cnBvc2UgTlZNIGJpdHMuDQorI2RlZmluZSAJQVQ5MUNfTUNfRkNNRF9TRVRfU0VDVVJJVFkgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGKSAvLyAoTUMpIFNldCBTZWN1cml0eSBCaXQuDQorI2RlZmluZSBBVDkxQ19NQ19QQUdFTiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4M0ZGIDw8ICA4KSAvLyAoTUMpIFBhZ2UgTnVtYmVyDQorI2RlZmluZSBBVDkxQ19NQ19LRVkgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgMjQpIC8vIChNQykgV3JpdGluZyBQcm90ZWN0IEtleQ0KKy8vIC0tLS0tLS0tIE1DX0ZTUiA6IChNQyBPZmZzZXQ6IDB4NjgpIE1DIEZsYXNoIENvbW1hbmQgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19NQ19TRUNVUklUWSAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKE1DKSBTZWN1cml0eSBCaXQgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19HUE5WTTAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKE1DKSBTZWN0b3IgMCBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfR1BOVk0xICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChNQykgU2VjdG9yIDEgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0dQTlZNMiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEwKSAvLyAoTUMpIFNlY3RvciAyIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19HUE5WTTMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMSkgLy8gKE1DKSBTZWN0b3IgMyBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfR1BOVk00ICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8vIChNQykgU2VjdG9yIDQgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0dQTlZNNSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEzKSAvLyAoTUMpIFNlY3RvciA1IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19HUE5WTTYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNCkgLy8gKE1DKSBTZWN0b3IgNiBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfR1BOVk03ICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTUpIC8vIChNQykgU2VjdG9yIDcgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTMCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoTUMpIFNlY3RvciAwIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNykgLy8gKE1DKSBTZWN0b3IgMSBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MyICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTgpIC8vIChNQykgU2VjdG9yIDIgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTMyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE5KSAvLyAoTUMpIFNlY3RvciAzIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMCkgLy8gKE1DKSBTZWN0b3IgNCBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1M1ICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjEpIC8vIChNQykgU2VjdG9yIDUgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTNiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIyKSAvLyAoTUMpIFNlY3RvciA2IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzcgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMykgLy8gKE1DKSBTZWN0b3IgNyBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1M4ICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjQpIC8vIChNQykgU2VjdG9yIDggTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTOSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI1KSAvLyAoTUMpIFNlY3RvciA5IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzEwICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNikgLy8gKE1DKSBTZWN0b3IgMTAgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTMTEgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI3KSAvLyAoTUMpIFNlY3RvciAxMSBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxMiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjgpIC8vIChNQykgU2VjdG9yIDEyIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzEzICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyOSkgLy8gKE1DKSBTZWN0b3IgMTMgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTMTQgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDMwKSAvLyAoTUMpIFNlY3RvciAxNCBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxNSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMzEpIC8vIChNQykgU2VjdG9yIDE1IExvY2sgU3RhdHVzDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBTZXJpYWwgUGFyYWxsZWwgSW50ZXJmYWNlICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfU1BJDQotew0KLSAgICBBVDkxX1JFRyBTUElfQ1I7ICAgICAgICAgIC8qIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1BJX01SOyAgICAgICAgICAvKiBNb2RlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNQSV9SRFI7ICAgICAgICAgLyogUmVjZWl2ZSBEYXRhIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNQSV9URFI7ICAgICAgICAgLyogVHJhbnNtaXQgRGF0YSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTUElfU1I7ICAgICAgICAgIC8qIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTUElfSUVSOyAgICAgICAgIC8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1BJX0lEUjsgICAgICAgICAvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTUElfSU1SOyAgICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMFsgNCBdOyAgLyogKi8NCi0gICAgQVQ5MV9SRUcgU1BJX0NTUlsgNCBdOyAgICAvKiBDaGlwIFNlbGVjdCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDFbIDQ4IF07IC8qICovDQotICAgIEFUOTFfUkVHIFNQSV9SUFI7ICAgICAgICAgLyogUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNQSV9SQ1I7ICAgICAgICAgLyogUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNQSV9UUFI7ICAgICAgICAgLyogVHJhbnNtaXQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTUElfVENSOyAgICAgICAgIC8qIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1BJX1JOUFI7ICAgICAgICAvKiBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTUElfUk5DUjsgICAgICAgIC8qIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNQSV9UTlBSOyAgICAgICAgLyogVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNQSV9UTkNSOyAgICAgICAgLyogVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNQSV9QVENSOyAgICAgICAgLyogUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1BJX1BUU1I7ICAgICAgICAvKiBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotfSBBVDkxU19TUEksICogQVQ5MVBTX1NQSTsNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFNlcmlhbCBQYXJhbGxlbCBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19TUEkgew0KKwlBVDkxX1JFRwkgU1BJX0NSOyAJLy8gQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX01SOyAJLy8gTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX1JEUjsgCS8vIFJlY2VpdmUgRGF0YSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX1REUjsgCS8vIFRyYW5zbWl0IERhdGEgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9TUjsgCS8vIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX0lFUjsgCS8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbNF07IAkvLyANCisJQVQ5MV9SRUcJIFNQSV9DU1JbNF07IAkvLyBDaGlwIFNlbGVjdCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzQ4XTsgCS8vIA0KKwlBVDkxX1JFRwkgU1BJX1JQUjsgCS8vIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX1JDUjsgCS8vIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX1RQUjsgCS8vIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9UQ1I7IAkvLyBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTUElfUk5QUjsgCS8vIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTUElfUk5DUjsgCS8vIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTUElfVE5QUjsgCS8vIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX1ROQ1I7IAkvLyBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9QVENSOyAJLy8gUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9QVFNSOyAJLy8gUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KK30gQVQ5MVNfU1BJLCAqQVQ5MVBTX1NQSTsNCiANCi0vKiAtLS0tLS0tLSBTUElfQ1IgOiAoU1BJIE9mZnNldDogMHgwKSBTUEkgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX1NQSUVOICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgICAvKiAoU1BJKSBTUEkgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19TUElfU1BJRElTICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAgIC8qIChTUEkpIFNQSSBEaXNhYmxlICovDQotI2RlZmluZSBBVDkxQ19TUElfU1dSU1QgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNyApICAgIC8qIChTUEkpIFNQSSBTb2Z0d2FyZSByZXNldCAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX0xBU1RYRkVSICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDI0ICkgICAvKiAoU1BJKSBTUEkgTGFzdCBUcmFuc2ZlciAqLw0KLS8qIC0tLS0tLS0tIFNQSV9NUiA6IChTUEkgT2Zmc2V0OiAweDQpIFNQSSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19TUElfTVNUUiAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgIC8qIChTUEkpIE1hc3Rlci9TbGF2ZSBNb2RlICovDQotI2RlZmluZSBBVDkxQ19TUElfUFMgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAgIC8qIChTUEkpIFBlcmlwaGVyYWwgU2VsZWN0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1BJX1BTX0ZJWEVEICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMSApICAgIC8qIChTUEkpIEZpeGVkIFBlcmlwaGVyYWwgU2VsZWN0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1BJX1BTX1ZBUklBQkxFICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAgIC8qIChTUEkpIFZhcmlhYmxlIFBlcmlwaGVyYWwgU2VsZWN0ICovDQotI2RlZmluZSBBVDkxQ19TUElfUENTREVDICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMiApICAgIC8qIChTUEkpIENoaXAgU2VsZWN0IERlY29kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX0ZESVYgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDMgKSAgICAvKiAoU1BJKSBDbG9jayBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9NT0RGRElTICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA0ICkgICAgLyogKFNQSSkgTW9kZSBGYXVsdCBEZXRlY3Rpb24gKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9MTEIgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA3ICkgICAgLyogKFNQSSkgQ2xvY2sgU2VsZWN0aW9uICovDQotI2RlZmluZSBBVDkxQ19TUElfUENTICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEYgPDwgMTYgKSAgIC8qIChTUEkpIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9ETFlCQ1MgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RkYgPDwgMjQgKSAgLyogKFNQSSkgRGVsYXkgQmV0d2VlbiBDaGlwIFNlbGVjdHMgKi8NCi0vKiAtLS0tLS0tLSBTUElfUkRSIDogKFNQSSBPZmZzZXQ6IDB4OCkgUmVjZWl2ZSBEYXRhIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19TUElfUkQgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGRkYgPDwgMCApIC8qIChTUEkpIFJlY2VpdmUgRGF0YSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX1JQQ1MgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGIDw8IDE2ICkgICAvKiAoU1BJKSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IFN0YXR1cyAqLw0KLS8qIC0tLS0tLS0tIFNQSV9URFIgOiAoU1BJIE9mZnNldDogMHhjKSBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19TUElfVEQgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGRkYgPDwgMCApIC8qIChTUEkpIFRyYW5zbWl0IERhdGEgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9UUENTICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RiA8PCAxNiApICAgLyogKFNQSSkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCBTdGF0dXMgKi8NCi0vKiAtLS0tLS0tLSBTUElfU1IgOiAoU1BJIE9mZnNldDogMHgxMCkgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19TUElfUkRSRiAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgIC8qIChTUEkpIFJlY2VpdmUgRGF0YSBSZWdpc3RlciBGdWxsICovDQotI2RlZmluZSBBVDkxQ19TUElfVERSRSAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAgIC8qIChTUEkpIFRyYW5zbWl0IERhdGEgUmVnaXN0ZXIgRW1wdHkgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9NT0RGICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyICkgICAgLyogKFNQSSkgTW9kZSBGYXVsdCBFcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX09WUkVTICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDMgKSAgICAvKiAoU1BJKSBPdmVycnVuIEVycm9yIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX0VORFJYICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDQgKSAgICAvKiAoU1BJKSBFbmQgb2YgUmVjZWl2ZXIgVHJhbnNmZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9FTkRUWCAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA1ICkgICAgLyogKFNQSSkgRW5kIG9mIFJlY2VpdmVyIFRyYW5zZmVyICovDQotI2RlZmluZSBBVDkxQ19TUElfUlhCVUZGICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNiApICAgIC8qIChTUEkpIFJYQlVGRiBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9UWEJVRkUgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA3ICkgICAgLyogKFNQSSkgVFhCVUZFIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX05TU1IgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDggKSAgICAvKiAoU1BJKSBOU1NSIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX1RYRU1QVFkgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDkgKSAgICAvKiAoU1BJKSBUWEVNUFRZIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX1NQSUVOUyAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE2ICkgICAvKiAoU1BJKSBFbmFibGUgU3RhdHVzICovDQotLyogLS0tLS0tLS0gU1BJX0lFUiA6IChTUEkgT2Zmc2V0OiAweDE0KSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gU1BJX0lEUiA6IChTUEkgT2Zmc2V0OiAweDE4KSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFNQSV9JTVIgOiAoU1BJIE9mZnNldDogMHgxYykgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBTUElfQ1NSIDogKFNQSSBPZmZzZXQ6IDB4MzApIENoaXAgU2VsZWN0IFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19TUElfQ1BPTCAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgICAvKiAoU1BJKSBDbG9jayBQb2xhcml0eSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX05DUEhBICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAgLyogKFNQSSkgQ2xvY2sgUGhhc2UgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9DU0FBVCAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDMgKSAgIC8qIChTUEkpIENoaXAgU2VsZWN0IEFjdGl2ZSBBZnRlciBUcmFuc2ZlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX0JJVFMgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEYgPDwgNCApICAgLyogKFNQSSkgQml0cyBQZXIgVHJhbnNmZXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TUElfQklUU184ICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDQgKSAgIC8qIChTUEkpIDggQml0cyBQZXIgdHJhbnNmZXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TUElfQklUU185ICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDQgKSAgIC8qIChTUEkpIDkgQml0cyBQZXIgdHJhbnNmZXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TUElfQklUU18xMCAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDQgKSAgIC8qIChTUEkpIDEwIEJpdHMgUGVyIHRyYW5zZmVyICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1BJX0JJVFNfMTEgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCA0ICkgICAvKiAoU1BJKSAxMSBCaXRzIFBlciB0cmFuc2ZlciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NQSV9CSVRTXzEyICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDQgPDwgNCApICAgLyogKFNQSSkgMTIgQml0cyBQZXIgdHJhbnNmZXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TUElfQklUU18xMyAgICAoICggdW5zaWduZWQgaW50ICkgMHg1IDw8IDQgKSAgIC8qIChTUEkpIDEzIEJpdHMgUGVyIHRyYW5zZmVyICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1BJX0JJVFNfMTQgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NiA8PCA0ICkgICAvKiAoU1BJKSAxNCBCaXRzIFBlciB0cmFuc2ZlciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NQSV9CSVRTXzE1ICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDcgPDwgNCApICAgLyogKFNQSSkgMTUgQml0cyBQZXIgdHJhbnNmZXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TUElfQklUU18xNiAgICAoICggdW5zaWduZWQgaW50ICkgMHg4IDw8IDQgKSAgIC8qIChTUEkpIDE2IEJpdHMgUGVyIHRyYW5zZmVyICovDQotI2RlZmluZSBBVDkxQ19TUElfU0NCUiAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RkYgPDwgOCApICAvKiAoU1BJKSBTZXJpYWwgQ2xvY2sgQmF1ZCBSYXRlICovDQotI2RlZmluZSBBVDkxQ19TUElfRExZQlMgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RkYgPDwgMTYgKSAvKiAoU1BJKSBEZWxheSBCZWZvcmUgU1BDSyAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX0RMWUJDVCAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGIDw8IDI0ICkgLyogKFNQSSkgRGVsYXkgQmV0d2VlbiBDb25zZWN1dGl2ZSBUcmFuc2ZlcnMgKi8NCisvLyAtLS0tLS0tLSBTUElfQ1IgOiAoU1BJIE9mZnNldDogMHgwKSBTUEkgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NQSV9TUElFTiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoU1BJKSBTUEkgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19TUElfU1BJRElTICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFNQSSkgU1BJIERpc2FibGUNCisjZGVmaW5lIEFUOTFDX1NQSV9TV1JTVCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoU1BJKSBTUEkgU29mdHdhcmUgcmVzZXQNCisjZGVmaW5lIEFUOTFDX1NQSV9MQVNUWEZFUiAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI0KSAvLyAoU1BJKSBTUEkgTGFzdCBUcmFuc2Zlcg0KKy8vIC0tLS0tLS0tIFNQSV9NUiA6IChTUEkgT2Zmc2V0OiAweDQpIFNQSSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1BJX01TVFIgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChTUEkpIE1hc3Rlci9TbGF2ZSBNb2RlDQorI2RlZmluZSBBVDkxQ19TUElfUFMgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFNQSSkgUGVyaXBoZXJhbCBTZWxlY3QNCisjZGVmaW5lIAlBVDkxQ19TUElfUFNfRklYRUQgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgMSkgLy8gKFNQSSkgRml4ZWQgUGVyaXBoZXJhbCBTZWxlY3QNCisjZGVmaW5lIAlBVDkxQ19TUElfUFNfVkFSSUFCTEUgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFNQSSkgVmFyaWFibGUgUGVyaXBoZXJhbCBTZWxlY3QNCisjZGVmaW5lIEFUOTFDX1NQSV9QQ1NERUMgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoU1BJKSBDaGlwIFNlbGVjdCBEZWNvZGUNCisjZGVmaW5lIEFUOTFDX1NQSV9GRElWICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoU1BJKSBDbG9jayBTZWxlY3Rpb24NCisjZGVmaW5lIEFUOTFDX1NQSV9NT0RGRElTICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoU1BJKSBNb2RlIEZhdWx0IERldGVjdGlvbg0KKyNkZWZpbmUgQVQ5MUNfU1BJX0xMQiAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChTUEkpIENsb2NrIFNlbGVjdGlvbg0KKyNkZWZpbmUgQVQ5MUNfU1BJX1BDUyAgICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgMTYpIC8vIChTUEkpIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QNCisjZGVmaW5lIEFUOTFDX1NQSV9ETFlCQ1MgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRiA8PCAyNCkgLy8gKFNQSSkgRGVsYXkgQmV0d2VlbiBDaGlwIFNlbGVjdHMNCisvLyAtLS0tLS0tLSBTUElfUkRSIDogKFNQSSBPZmZzZXQ6IDB4OCkgUmVjZWl2ZSBEYXRhIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1BJX1JEICAgICAgICAgICgodW5zaWduZWQgaW50KSAweEZGRkYgPDwgIDApIC8vIChTUEkpIFJlY2VpdmUgRGF0YQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX1JQQ1MgICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgMTYpIC8vIChTUEkpIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgU3RhdHVzDQorLy8gLS0tLS0tLS0gU1BJX1REUiA6IChTUEkgT2Zmc2V0OiAweGMpIFRyYW5zbWl0IERhdGEgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TUElfVEQgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGRiA8PCAgMCkgLy8gKFNQSSkgVHJhbnNtaXQgRGF0YQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX1RQQ1MgICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgMTYpIC8vIChTUEkpIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgU3RhdHVzDQorLy8gLS0tLS0tLS0gU1BJX1NSIDogKFNQSSBPZmZzZXQ6IDB4MTApIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NQSV9SRFJGICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoU1BJKSBSZWNlaXZlIERhdGEgUmVnaXN0ZXIgRnVsbA0KKyNkZWZpbmUgQVQ5MUNfU1BJX1REUkUgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChTUEkpIFRyYW5zbWl0IERhdGEgUmVnaXN0ZXIgRW1wdHkNCisjZGVmaW5lIEFUOTFDX1NQSV9NT0RGICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoU1BJKSBNb2RlIEZhdWx0IEVycm9yDQorI2RlZmluZSBBVDkxQ19TUElfT1ZSRVMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKFNQSSkgT3ZlcnJ1biBFcnJvciBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX1NQSV9FTkRSWCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoU1BJKSBFbmQgb2YgUmVjZWl2ZXIgVHJhbnNmZXINCisjZGVmaW5lIEFUOTFDX1NQSV9FTkRUWCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoU1BJKSBFbmQgb2YgUmVjZWl2ZXIgVHJhbnNmZXINCisjZGVmaW5lIEFUOTFDX1NQSV9SWEJVRkYgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoU1BJKSBSWEJVRkYgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19TUElfVFhCVUZFICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKFNQSSkgVFhCVUZFIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfU1BJX05TU1IgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChTUEkpIE5TU1IgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19TUElfVFhFTVBUWSAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLy8gKFNQSSkgVFhFTVBUWSBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1NQSV9TUElFTlMgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoU1BJKSBFbmFibGUgU3RhdHVzDQorLy8gLS0tLS0tLS0gU1BJX0lFUiA6IChTUEkgT2Zmc2V0OiAweDE0KSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFNQSV9JRFIgOiAoU1BJIE9mZnNldDogMHgxOCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gU1BJX0lNUiA6IChTUEkgT2Zmc2V0OiAweDFjKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBTUElfQ1NSIDogKFNQSSBPZmZzZXQ6IDB4MzApIENoaXAgU2VsZWN0IFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1BJX0NQT0wgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChTUEkpIENsb2NrIFBvbGFyaXR5DQorI2RlZmluZSBBVDkxQ19TUElfTkNQSEEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFNQSSkgQ2xvY2sgUGhhc2UNCisjZGVmaW5lIEFUOTFDX1NQSV9DU0FBVCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoU1BJKSBDaGlwIFNlbGVjdCBBY3RpdmUgQWZ0ZXIgVHJhbnNmZXINCisjZGVmaW5lIEFUOTFDX1NQSV9CSVRTICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8ICA0KSAvLyAoU1BJKSBCaXRzIFBlciBUcmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NQSV9CSVRTXzggICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDQpIC8vIChTUEkpIDggQml0cyBQZXIgdHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TUElfQklUU185ICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoU1BJKSA5IEJpdHMgUGVyIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1BJX0JJVFNfMTAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgNCkgLy8gKFNQSSkgMTAgQml0cyBQZXIgdHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TUElfQklUU18xMSAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA0KSAvLyAoU1BJKSAxMSBCaXRzIFBlciB0cmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NQSV9CSVRTXzEyICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDQgPDwgIDQpIC8vIChTUEkpIDEyIEJpdHMgUGVyIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1BJX0JJVFNfMTMgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NSA8PCAgNCkgLy8gKFNQSSkgMTMgQml0cyBQZXIgdHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TUElfQklUU18xNCAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg2IDw8ICA0KSAvLyAoU1BJKSAxNCBCaXRzIFBlciB0cmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NQSV9CSVRTXzE1ICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgIDQpIC8vIChTUEkpIDE1IEJpdHMgUGVyIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1BJX0JJVFNfMTYgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4OCA8PCAgNCkgLy8gKFNQSSkgMTYgQml0cyBQZXIgdHJhbnNmZXINCisjZGVmaW5lIEFUOTFDX1NQSV9TQ0JSICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRiA8PCAgOCkgLy8gKFNQSSkgU2VyaWFsIENsb2NrIEJhdWQgUmF0ZQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX0RMWUJTICAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8IDE2KSAvLyAoU1BJKSBEZWxheSBCZWZvcmUgU1BDSw0KKyNkZWZpbmUgQVQ5MUNfU1BJX0RMWUJDVCAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8IDI0KSAvLyAoU1BJKSBEZWxheSBCZXR3ZWVuIENvbnNlY3V0aXZlIFRyYW5zZmVycw0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVXNhcnQgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLXR5cGVkZWYgc3RydWN0IF9BVDkxU19VU0FSVA0KLXsNCi0gICAgQVQ5MV9SRUcgVVNfQ1I7ICAgICAgICAgICAvKiBDb250cm9sIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFVTX01SOyAgICAgICAgICAgLyogTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBVU19JRVI7ICAgICAgICAgIC8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVVNfSURSOyAgICAgICAgICAvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBVU19JTVI7ICAgICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFVTX0NTUjsgICAgICAgICAgLyogQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVVNfUkhSOyAgICAgICAgICAvKiBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFVTX1RIUjsgICAgICAgICAgLyogVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBVU19CUkdSOyAgICAgICAgIC8qIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVVNfUlRPUjsgICAgICAgICAvKiBSZWNlaXZlciBUaW1lLW91dCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBVU19UVEdSOyAgICAgICAgIC8qIFRyYW5zbWl0dGVyIFRpbWUtZ3VhcmQgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQwWyA1IF07ICAvKiAqLw0KLSAgICBBVDkxX1JFRyBVU19GSURJOyAgICAgICAgIC8qIEZJX0RJX1JhdGlvIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFVTX05FUjsgICAgICAgICAgLyogTmIgRXJyb3JzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMVsgMSBdOyAgLyogKi8NCi0gICAgQVQ5MV9SRUcgVVNfSUY7ICAgICAgICAgICAvKiBJUkRBX0ZJTFRFUiBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDJbIDQ0IF07IC8qICovDQotICAgIEFUOTFfUkVHIFVTX1JQUjsgICAgICAgICAgLyogUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFVTX1JDUjsgICAgICAgICAgLyogUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFVTX1RQUjsgICAgICAgICAgLyogVHJhbnNtaXQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBVU19UQ1I7ICAgICAgICAgIC8qIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVVNfUk5QUjsgICAgICAgICAvKiBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBVU19STkNSOyAgICAgICAgIC8qIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFVTX1ROUFI7ICAgICAgICAgLyogVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFVTX1ROQ1I7ICAgICAgICAgLyogVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFVTX1BUQ1I7ICAgICAgICAgLyogUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVVNfUFRTUjsgICAgICAgICAvKiBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotfSBBVDkxU19VU0FSVCwgKiBBVDkxUFNfVVNBUlQ7DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBVc2FydA0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1VTQVJUIHsNCisJQVQ5MV9SRUcJIFVTX0NSOyAJLy8gQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfTVI7IAkvLyBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX0NTUjsgCS8vIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19SSFI7IAkvLyBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19USFI7IAkvLyBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19CUkdSOyAJLy8gQmF1ZCBSYXRlIEdlbmVyYXRvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfUlRPUjsgCS8vIFJlY2VpdmVyIFRpbWUtb3V0IFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19UVEdSOyAJLy8gVHJhbnNtaXR0ZXIgVGltZS1ndWFyZCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzVdOyAJLy8gDQorCUFUOTFfUkVHCSBVU19GSURJOyAJLy8gRklfRElfUmF0aW8gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX05FUjsgCS8vIE5iIEVycm9ycyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBVU19JRjsgCS8vIElSREFfRklMVEVSIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDJbNDRdOyAJLy8gDQorCUFUOTFfUkVHCSBVU19SUFI7IAkvLyBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX1JDUjsgCS8vIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfVFBSOyAJLy8gVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfVENSOyAJLy8gVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfUk5QUjsgCS8vIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19STkNSOyAJLy8gUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX1ROUFI7IAkvLyBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX1ROQ1I7IAkvLyBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX1BUQ1I7IAkvLyBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfUFRTUjsgCS8vIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCit9IEFUOTFTX1VTQVJULCAqQVQ5MVBTX1VTQVJUOw0KIA0KLS8qIC0tLS0tLS0tIFVTX0NSIDogKFVTQVJUIE9mZnNldDogMHgwKSBEZWJ1ZyBVbml0IENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1NUVEJSSyAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOSApICAvKiAoVVNBUlQpIFN0YXJ0IEJyZWFrICovDQotI2RlZmluZSBBVDkxQ19VU19TVFBCUksgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEwICkgLyogKFVTQVJUKSBTdG9wIEJyZWFrICovDQotI2RlZmluZSBBVDkxQ19VU19TVFRUTyAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDExICkgLyogKFVTQVJUKSBTdGFydCBUaW1lLW91dCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfU0VOREEgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMiApIC8qIChVU0FSVCkgU2VuZCBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19VU19SU1RJVCAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEzICkgLyogKFVTQVJUKSBSZXNldCBJdGVyYXRpb25zICovDQotI2RlZmluZSBBVDkxQ19VU19SU1ROQUNLICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE0ICkgLyogKFVTQVJUKSBSZXNldCBOb24gQWNrbm93bGVkZ2UgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1JFVFRPICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTUgKSAvKiAoVVNBUlQpIFJlYXJtIFRpbWUtb3V0ICovDQotI2RlZmluZSBBVDkxQ19VU19EVFJFTiAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE2ICkgLyogKFVTQVJUKSBEYXRhIFRlcm1pbmFsIHJlYWR5IEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfRFRSRElTICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNyApIC8qIChVU0FSVCkgRGF0YSBUZXJtaW5hbCByZWFkeSBEaXNhYmxlICovDQotI2RlZmluZSBBVDkxQ19VU19SVFNFTiAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE4ICkgLyogKFVTQVJUKSBSZXF1ZXN0IHRvIFNlbmQgZW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19VU19SVFNESVMgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE5ICkgLyogKFVTQVJUKSBSZXF1ZXN0IHRvIFNlbmQgRGlzYWJsZSAqLw0KLS8qIC0tLS0tLS0tIFVTX01SIDogKFVTQVJUIE9mZnNldDogMHg0KSBEZWJ1ZyBVbml0IE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1VTTU9ERSAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEYgPDwgMCApICAvKiAoVVNBUlQpIFVzYXJ0IG1vZGUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19VU01PREVfTk9STUFMICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgKSAgICAgICAvKiAoVVNBUlQpIE5vcm1hbCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX1VTTU9ERV9SUzQ4NSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSApICAgICAgIC8qIChVU0FSVCkgUlM0ODUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19VU01PREVfSFdIU0ggICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgKSAgICAgICAvKiAoVVNBUlQpIEhhcmR3YXJlIEhhbmRzaGFraW5nICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfVVNNT0RFX01PREVNICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzICkgICAgICAgLyogKFVTQVJUKSBNb2RlbSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX1VTTU9ERV9JU083ODE2XzAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NCApICAgICAgIC8qIChVU0FSVCkgSVNPNzgxNiBwcm90b2NvbDogVCA9IDAgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19VU01PREVfSVNPNzgxNl8xICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDYgKSAgICAgICAvKiAoVVNBUlQpIElTTzc4MTYgcHJvdG9jb2w6IFQgPSAxICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfVVNNT0RFX0lSREEgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg4ICkgICAgICAgLyogKFVTQVJUKSBJckRBICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfVVNNT0RFX1NXSFNIICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhDICkgICAgICAgLyogKFVTQVJUKSBTb2Z0d2FyZSBIYW5kc2hha2luZyAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfQ0xLUyAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCA0ICkgIC8qIChVU0FSVCkgQ2xvY2sgU2VsZWN0aW9uIChCYXVkIFJhdGUgZ2VuZXJhdG9yIElucHV0IENsb2NrICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfQ0xLU19DTE9DSyAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDQgKSAgLyogKFVTQVJUKSBDbG9jayAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX0NMS1NfRkRJVjEgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA0ICkgIC8qIChVU0FSVCkgZmRpdjEgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19DTEtTX1NMT1cgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgNCApICAvKiAoVVNBUlQpIHNsb3dfY2xvY2sgKEFSTSkgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19DTEtTX0VYVCAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgNCApICAvKiAoVVNBUlQpIEV4dGVybmFsIChTQ0spICovDQotI2RlZmluZSBBVDkxQ19VU19DSFJMICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDYgKSAgLyogKFVTQVJUKSBDbG9jayBTZWxlY3Rpb24gKEJhdWQgUmF0ZSBnZW5lcmF0b3IgSW5wdXQgQ2xvY2sgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19DSFJMXzVfQklUUyAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgNiApICAvKiAoVVNBUlQpIENoYXJhY3RlciBMZW5ndGg6IDUgYml0cyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX0NIUkxfNl9CSVRTICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA2ICkgIC8qIChVU0FSVCkgQ2hhcmFjdGVyIExlbmd0aDogNiBiaXRzICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfQ0hSTF83X0JJVFMgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDYgKSAgLyogKFVTQVJUKSBDaGFyYWN0ZXIgTGVuZ3RoOiA3IGJpdHMgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19DSFJMXzhfQklUUyAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgNiApICAvKiAoVVNBUlQpIENoYXJhY3RlciBMZW5ndGg6IDggYml0cyAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfU1lOQyAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgIC8qIChVU0FSVCkgU3luY2hyb25vdXMgTW9kZSBTZWxlY3QgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX05CU1RPUCAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTIgKSAvKiAoVVNBUlQpIE51bWJlciBvZiBTdG9wIGJpdHMgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19OQlNUT1BfMV9CSVQgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMTIgKSAvKiAoVVNBUlQpIDEgc3RvcCBiaXQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19OQlNUT1BfMTVfQklUICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTIgKSAvKiAoVVNBUlQpIEFzeW5jaHJvbm91cyAoU1lOQz0wKSAyIHN0b3AgYml0cyBTeW5jaHJvbm91cyAoU1lOQz0xKSAyIHN0b3AgYml0cyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX05CU1RPUF8yX0JJVCAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCAxMiApIC8qIChVU0FSVCkgMiBzdG9wIGJpdHMgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX01TQkYgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTYgKSAvKiAoVVNBUlQpIEJpdCBPcmRlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfTU9ERTkgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNyApIC8qIChVU0FSVCkgOS1iaXQgQ2hhcmFjdGVyIGxlbmd0aCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfQ0tMTyAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxOCApIC8qIChVU0FSVCkgQ2xvY2sgT3V0cHV0IFNlbGVjdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfT1ZFUiAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxOSApIC8qIChVU0FSVCkgT3ZlciBTYW1wbGluZyBNb2RlICovDQotI2RlZmluZSBBVDkxQ19VU19JTkFDSyAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIwICkgLyogKFVTQVJUKSBJbmhpYml0IE5vbiBBY2tub3dsZWRnZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfRFNOQUNLICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyMSApIC8qIChVU0FSVCkgRGlzYWJsZSBTdWNjZXNzaXZlIE5BQ0sgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX01BWF9JVEVSICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjQgKSAvKiAoVVNBUlQpIE51bWJlciBvZiBSZXBldGl0aW9ucyAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfRklMVEVSICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyOCApIC8qIChVU0FSVCkgUmVjZWl2ZSBMaW5lIEZpbHRlciAqLw0KLS8qIC0tLS0tLS0tIFVTX0lFUiA6IChVU0FSVCBPZmZzZXQ6IDB4OCkgRGVidWcgVW5pdCBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19VU19SWEJSSyAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAgLyogKFVTQVJUKSBCcmVhayBSZWNlaXZlZC9FbmQgb2YgQnJlYWsgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1RJTUVPVVQgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOCApICAvKiAoVVNBUlQpIFJlY2VpdmVyIFRpbWUtb3V0ICovDQotI2RlZmluZSBBVDkxQ19VU19JVEVSQVRJT04gICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEwICkgLyogKFVTQVJUKSBNYXggbnVtYmVyIG9mIFJlcGV0aXRpb25zIFJlYWNoZWQgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX05BQ0sgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTMgKSAvKiAoVVNBUlQpIE5vbiBBY2tub3dsZWRnZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfUklJQyAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNiApIC8qIChVU0FSVCkgUmluZyBJTmRpY2F0b3IgSW5wdXQgQ2hhbmdlIEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX0RTUklDICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTcgKSAvKiAoVVNBUlQpIERhdGEgU2V0IFJlYWR5IElucHV0IENoYW5nZSBGbGFnICovDQotI2RlZmluZSBBVDkxQ19VU19EQ0RJQyAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE4ICkgLyogKFVTQVJUKSBEYXRhIENhcnJpZXIgRmxhZyAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfQ1RTSUMgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxOSApIC8qIChVU0FSVCkgQ2xlYXIgVG8gU2VuZCBJbnB1dCBDaGFuZ2UgRmxhZyAqLw0KLS8qIC0tLS0tLS0tIFVTX0lEUiA6IChVU0FSVCBPZmZzZXQ6IDB4YykgRGVidWcgVW5pdCBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFVTX0lNUiA6IChVU0FSVCBPZmZzZXQ6IDB4MTApIERlYnVnIFVuaXQgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBVU19DU1IgOiAoVVNBUlQgT2Zmc2V0OiAweDE0KSBEZWJ1ZyBVbml0IENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19VU19SSSAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyMCApICAgLyogKFVTQVJUKSBJbWFnZSBvZiBSSSBJbnB1dCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfRFNSICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjEgKSAgIC8qIChVU0FSVCkgSW1hZ2Ugb2YgRFNSIElucHV0ICovDQotI2RlZmluZSBBVDkxQ19VU19EQ0QgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyMiApICAgLyogKFVTQVJUKSBJbWFnZSBvZiBEQ0QgSW5wdXQgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX0NUUyAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIzICkgICAvKiAoVVNBUlQpIEltYWdlIG9mIENUUyBJbnB1dCAqLw0KKy8vIC0tLS0tLS0tIFVTX0NSIDogKFVTQVJUIE9mZnNldDogMHgwKSBEZWJ1ZyBVbml0IENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VU19TVFRCUksgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLy8gKFVTQVJUKSBTdGFydCBCcmVhaw0KKyNkZWZpbmUgQVQ5MUNfVVNfU1RQQlJLICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChVU0FSVCkgU3RvcCBCcmVhaw0KKyNkZWZpbmUgQVQ5MUNfVVNfU1RUVE8gICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTEpIC8vIChVU0FSVCkgU3RhcnQgVGltZS1vdXQNCisjZGVmaW5lIEFUOTFDX1VTX1NFTkRBICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvLyAoVVNBUlQpIFNlbmQgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfVVNfUlNUSVQgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTMpIC8vIChVU0FSVCkgUmVzZXQgSXRlcmF0aW9ucw0KKyNkZWZpbmUgQVQ5MUNfVVNfUlNUTkFDSyAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTQpIC8vIChVU0FSVCkgUmVzZXQgTm9uIEFja25vd2xlZGdlDQorI2RlZmluZSBBVDkxQ19VU19SRVRUTyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNSkgLy8gKFVTQVJUKSBSZWFybSBUaW1lLW91dA0KKyNkZWZpbmUgQVQ5MUNfVVNfRFRSRU4gICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChVU0FSVCkgRGF0YSBUZXJtaW5hbCByZWFkeSBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1VTX0RUUkRJUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE3KSAvLyAoVVNBUlQpIERhdGEgVGVybWluYWwgcmVhZHkgRGlzYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfUlRTRU4gICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTgpIC8vIChVU0FSVCkgUmVxdWVzdCB0byBTZW5kIGVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfUlRTRElTICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTkpIC8vIChVU0FSVCkgUmVxdWVzdCB0byBTZW5kIERpc2FibGUNCisvLyAtLS0tLS0tLSBVU19NUiA6IChVU0FSVCBPZmZzZXQ6IDB4NCkgRGVidWcgVW5pdCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVVNfVVNNT0RFICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgIDApIC8vIChVU0FSVCkgVXNhcnQgbW9kZQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1VTTU9ERV9OT1JNQUwgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwKSAvLyAoVVNBUlQpIE5vcm1hbA0KKyNkZWZpbmUgCUFUOTFDX1VTX1VTTU9ERV9SUzQ4NSAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxKSAvLyAoVVNBUlQpIFJTNDg1DQorI2RlZmluZSAJQVQ5MUNfVVNfVVNNT0RFX0hXSFNIICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIpIC8vIChVU0FSVCkgSGFyZHdhcmUgSGFuZHNoYWtpbmcNCisjZGVmaW5lIAlBVDkxQ19VU19VU01PREVfTU9ERU0gICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MykgLy8gKFVTQVJUKSBNb2RlbQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1VTTU9ERV9JU083ODE2XzAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg0KSAvLyAoVVNBUlQpIElTTzc4MTYgcHJvdG9jb2w6IFQgPSAwDQorI2RlZmluZSAJQVQ5MUNfVVNfVVNNT0RFX0lTTzc4MTZfMSAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDYpIC8vIChVU0FSVCkgSVNPNzgxNiBwcm90b2NvbDogVCA9IDENCisjZGVmaW5lIAlBVDkxQ19VU19VU01PREVfSVJEQSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4OCkgLy8gKFVTQVJUKSBJckRBDQorI2RlZmluZSAJQVQ5MUNfVVNfVVNNT0RFX1NXSFNIICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweEMpIC8vIChVU0FSVCkgU29mdHdhcmUgSGFuZHNoYWtpbmcNCisjZGVmaW5lIEFUOTFDX1VTX0NMS1MgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA0KSAvLyAoVVNBUlQpIENsb2NrIFNlbGVjdGlvbiAoQmF1ZCBSYXRlIGdlbmVyYXRvciBJbnB1dCBDbG9jaw0KKyNkZWZpbmUgCUFUOTFDX1VTX0NMS1NfQ0xPQ0sgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgNCkgLy8gKFVTQVJUKSBDbG9jaw0KKyNkZWZpbmUgCUFUOTFDX1VTX0NMS1NfRkRJVjEgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFVTQVJUKSBmZGl2MQ0KKyNkZWZpbmUgCUFUOTFDX1VTX0NMS1NfU0xPVyAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgNCkgLy8gKFVTQVJUKSBzbG93X2Nsb2NrIChBUk0pDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0xLU19FWFQgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA0KSAvLyAoVVNBUlQpIEV4dGVybmFsIChTQ0spDQorI2RlZmluZSBBVDkxQ19VU19DSFJMICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgNikgLy8gKFVTQVJUKSBDbG9jayBTZWxlY3Rpb24gKEJhdWQgUmF0ZSBnZW5lcmF0b3IgSW5wdXQgQ2xvY2sNCisjZGVmaW5lIAlBVDkxQ19VU19DSFJMXzVfQklUUyAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDYpIC8vIChVU0FSVCkgQ2hhcmFjdGVyIExlbmd0aDogNSBiaXRzDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0hSTF82X0JJVFMgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoVVNBUlQpIENoYXJhY3RlciBMZW5ndGg6IDYgYml0cw0KKyNkZWZpbmUgCUFUOTFDX1VTX0NIUkxfN19CSVRTICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgNikgLy8gKFVTQVJUKSBDaGFyYWN0ZXIgTGVuZ3RoOiA3IGJpdHMNCisjZGVmaW5lIAlBVDkxQ19VU19DSFJMXzhfQklUUyAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDYpIC8vIChVU0FSVCkgQ2hhcmFjdGVyIExlbmd0aDogOCBiaXRzDQorI2RlZmluZSBBVDkxQ19VU19TWU5DICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFVTQVJUKSBTeW5jaHJvbm91cyBNb2RlIFNlbGVjdA0KKyNkZWZpbmUgQVQ5MUNfVVNfTkJTVE9QICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTIpIC8vIChVU0FSVCkgTnVtYmVyIG9mIFN0b3AgYml0cw0KKyNkZWZpbmUgCUFUOTFDX1VTX05CU1RPUF8xX0JJVCAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDEyKSAvLyAoVVNBUlQpIDEgc3RvcCBiaXQNCisjZGVmaW5lIAlBVDkxQ19VU19OQlNUT1BfMTVfQklUICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLy8gKFVTQVJUKSBBc3luY2hyb25vdXMgKFNZTkM9MCkgMiBzdG9wIGJpdHMgU3luY2hyb25vdXMgKFNZTkM9MSkgMiBzdG9wIGJpdHMNCisjZGVmaW5lIAlBVDkxQ19VU19OQlNUT1BfMl9CSVQgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxMikgLy8gKFVTQVJUKSAyIHN0b3AgYml0cw0KKyNkZWZpbmUgQVQ5MUNfVVNfTVNCRiAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChVU0FSVCkgQml0IE9yZGVyDQorI2RlZmluZSBBVDkxQ19VU19NT0RFOSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNykgLy8gKFVTQVJUKSA5LWJpdCBDaGFyYWN0ZXIgbGVuZ3RoDQorI2RlZmluZSBBVDkxQ19VU19DS0xPICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOCkgLy8gKFVTQVJUKSBDbG9jayBPdXRwdXQgU2VsZWN0DQorI2RlZmluZSBBVDkxQ19VU19PVkVSICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOSkgLy8gKFVTQVJUKSBPdmVyIFNhbXBsaW5nIE1vZGUNCisjZGVmaW5lIEFUOTFDX1VTX0lOQUNLICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIwKSAvLyAoVVNBUlQpIEluaGliaXQgTm9uIEFja25vd2xlZGdlDQorI2RlZmluZSBBVDkxQ19VU19EU05BQ0sgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMSkgLy8gKFVTQVJUKSBEaXNhYmxlIFN1Y2Nlc3NpdmUgTkFDSw0KKyNkZWZpbmUgQVQ5MUNfVVNfTUFYX0lURVIgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjQpIC8vIChVU0FSVCkgTnVtYmVyIG9mIFJlcGV0aXRpb25zDQorI2RlZmluZSBBVDkxQ19VU19GSUxURVIgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyOCkgLy8gKFVTQVJUKSBSZWNlaXZlIExpbmUgRmlsdGVyDQorLy8gLS0tLS0tLS0gVVNfSUVSIDogKFVTQVJUIE9mZnNldDogMHg4KSBEZWJ1ZyBVbml0IEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VU19SWEJSSyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFVTQVJUKSBCcmVhayBSZWNlaXZlZC9FbmQgb2YgQnJlYWsNCisjZGVmaW5lIEFUOTFDX1VTX1RJTUVPVVQgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoVVNBUlQpIFJlY2VpdmVyIFRpbWUtb3V0DQorI2RlZmluZSBBVDkxQ19VU19JVEVSQVRJT04gICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLy8gKFVTQVJUKSBNYXggbnVtYmVyIG9mIFJlcGV0aXRpb25zIFJlYWNoZWQNCisjZGVmaW5lIEFUOTFDX1VTX05BQ0sgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEzKSAvLyAoVVNBUlQpIE5vbiBBY2tub3dsZWRnZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfUklJQyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChVU0FSVCkgUmluZyBJTmRpY2F0b3IgSW5wdXQgQ2hhbmdlIEZsYWcNCisjZGVmaW5lIEFUOTFDX1VTX0RTUklDICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE3KSAvLyAoVVNBUlQpIERhdGEgU2V0IFJlYWR5IElucHV0IENoYW5nZSBGbGFnDQorI2RlZmluZSBBVDkxQ19VU19EQ0RJQyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOCkgLy8gKFVTQVJUKSBEYXRhIENhcnJpZXIgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfVVNfQ1RTSUMgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTkpIC8vIChVU0FSVCkgQ2xlYXIgVG8gU2VuZCBJbnB1dCBDaGFuZ2UgRmxhZw0KKy8vIC0tLS0tLS0tIFVTX0lEUiA6IChVU0FSVCBPZmZzZXQ6IDB4YykgRGVidWcgVW5pdCBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBVU19JTVIgOiAoVVNBUlQgT2Zmc2V0OiAweDEwKSBEZWJ1ZyBVbml0IEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFVTX0NTUiA6IChVU0FSVCBPZmZzZXQ6IDB4MTQpIERlYnVnIFVuaXQgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VU19SSSAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMCkgLy8gKFVTQVJUKSBJbWFnZSBvZiBSSSBJbnB1dA0KKyNkZWZpbmUgQVQ5MUNfVVNfRFNSICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjEpIC8vIChVU0FSVCkgSW1hZ2Ugb2YgRFNSIElucHV0DQorI2RlZmluZSBBVDkxQ19VU19EQ0QgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMikgLy8gKFVTQVJUKSBJbWFnZSBvZiBEQ0QgSW5wdXQNCisjZGVmaW5lIEFUOTFDX1VTX0NUUyAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIzKSAvLyAoVVNBUlQpIEltYWdlIG9mIENUUyBJbnB1dA0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgU3luY2hyb25vdXMgU2VyaWFsIENvbnRyb2xsZXIgSW50ZXJmYWNlICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfU1NDDQotew0KLSAgICBBVDkxX1JFRyBTU0NfQ1I7ICAgICAgICAgIC8qIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1NDX0NNUjsgICAgICAgICAvKiBDbG9jayBNb2RlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMFsgMiBdOyAgLyogKi8NCi0gICAgQVQ5MV9SRUcgU1NDX1JDTVI7ICAgICAgICAvKiBSZWNlaXZlIENsb2NrIE1vZGVSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTU0NfUkZNUjsgICAgICAgIC8qIFJlY2VpdmUgRnJhbWUgTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTU0NfVENNUjsgICAgICAgIC8qIFRyYW5zbWl0IENsb2NrIE1vZGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1NDX1RGTVI7ICAgICAgICAvKiBUcmFuc21pdCBGcmFtZSBNb2RlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNTQ19SSFI7ICAgICAgICAgLyogUmVjZWl2ZSBIb2xkaW5nIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNTQ19USFI7ICAgICAgICAgLyogVHJhbnNtaXQgSG9sZGluZyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDFbIDIgXTsgIC8qICovDQotICAgIEFUOTFfUkVHIFNTQ19SU0hSOyAgICAgICAgLyogUmVjZWl2ZSBTeW5jIEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1NDX1RTSFI7ICAgICAgICAvKiBUcmFuc21pdCBTeW5jIEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQyWyAyIF07ICAvKiAqLw0KLSAgICBBVDkxX1JFRyBTU0NfU1I7ICAgICAgICAgIC8qIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTU0NfSUVSOyAgICAgICAgIC8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1NDX0lEUjsgICAgICAgICAvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTU0NfSU1SOyAgICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkM1sgNDQgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgU1NDX1JQUjsgICAgICAgICAvKiBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1NDX1JDUjsgICAgICAgICAvKiBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1NDX1RQUjsgICAgICAgICAvKiBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNTQ19UQ1I7ICAgICAgICAgLyogVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTU0NfUk5QUjsgICAgICAgIC8qIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNTQ19STkNSOyAgICAgICAgLyogUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1NDX1ROUFI7ICAgICAgICAvKiBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1NDX1ROQ1I7ICAgICAgICAvKiBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1NDX1BUQ1I7ICAgICAgICAvKiBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTU0NfUFRTUjsgICAgICAgIC8qIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi19IEFUOTFTX1NTQywgKiBBVDkxUFNfU1NDOw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgU3luY2hyb25vdXMgU2VyaWFsIENvbnRyb2xsZXIgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfU1NDIHsNCisJQVQ5MV9SRUcJIFNTQ19DUjsgCS8vIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19DTVI7IAkvLyBDbG9jayBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbMl07IAkvLyANCisJQVQ5MV9SRUcJIFNTQ19SQ01SOyAJLy8gUmVjZWl2ZSBDbG9jayBNb2RlUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19SRk1SOyAJLy8gUmVjZWl2ZSBGcmFtZSBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfVENNUjsgCS8vIFRyYW5zbWl0IENsb2NrIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19URk1SOyAJLy8gVHJhbnNtaXQgRnJhbWUgTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1JIUjsgCS8vIFJlY2VpdmUgSG9sZGluZyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1RIUjsgCS8vIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMVsyXTsgCS8vIA0KKwlBVDkxX1JFRwkgU1NDX1JTSFI7IAkvLyBSZWNlaXZlIFN5bmMgSG9sZGluZyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1RTSFI7IAkvLyBUcmFuc21pdCBTeW5jIEhvbGRpbmcgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMlsyXTsgCS8vIA0KKwlBVDkxX1JFRwkgU1NDX1NSOyAJLy8gU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX0lEUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkM1s0NF07IAkvLyANCisJQVQ5MV9SRUcJIFNTQ19SUFI7IAkvLyBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19SQ1I7IAkvLyBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19UUFI7IAkvLyBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfVENSOyAJLy8gVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1JOUFI7IAkvLyBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1JOQ1I7IAkvLyBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1ROUFI7IAkvLyBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19UTkNSOyAJLy8gVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfUFRDUjsgCS8vIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfUFRTUjsgCS8vIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCit9IEFUOTFTX1NTQywgKkFUOTFQU19TU0M7DQogDQotLyogLS0tLS0tLS0gU1NDX0NSIDogKFNTQyBPZmZzZXQ6IDB4MCkgU1NDIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19SWEVOICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgLyogKFNTQykgUmVjZWl2ZSBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19SWERJUyAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAgLyogKFNTQykgUmVjZWl2ZSBEaXNhYmxlICovDQotI2RlZmluZSBBVDkxQ19TU0NfVFhFTiAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDggKSAgIC8qIChTU0MpIFRyYW5zbWl0IEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1RYRElTICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA5ICkgICAvKiAoU1NDKSBUcmFuc21pdCBEaXNhYmxlICovDQotI2RlZmluZSBBVDkxQ19TU0NfU1dSU1QgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE1ICkgIC8qIChTU0MpIFNvZnR3YXJlIFJlc2V0ICovDQotLyogLS0tLS0tLS0gU1NDX1JDTVIgOiAoU1NDIE9mZnNldDogMHgxMCkgU1NDIFJlY2VpdmUgQ2xvY2sgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0NLUyAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAwICkgICAvKiAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19DS1NfRElWICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCApICAgICAgICAvKiAoU1NDKSBEaXZpZGVkIENsb2NrICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX0NLU19USyAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxICkgICAgICAgIC8qIChTU0MpIFRLIENsb2NrIHNpZ25hbCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19DS1NfUksgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiApICAgICAgICAvKiAoU1NDKSBSSyBwaW4gKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19DS08gICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDcgPDwgMiApICAgLyogKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBPdXRwdXQgTW9kZSBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfQ0tPX05PTkUgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMiApICAgLyogKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBPdXRwdXQgTW9kZTogTm9uZSBSSyBwaW46IElucHV0LW9ubHkgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfQ0tPX0NPTlRJTk9VUyAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMiApICAgLyogKFNTQykgQ29udGludW91cyBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIFJLIHBpbjogT3V0cHV0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX0NLT19EQVRBX1RYICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDIgKSAgIC8qIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgb25seSBkdXJpbmcgZGF0YSB0cmFuc2ZlcnMgUksgcGluOiBPdXRwdXQgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19DS0kgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNSApICAgLyogKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBJbnZlcnNpb24gKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19TVEFSVCAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEYgPDwgOCApICAgLyogKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBTdGFydCBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfU1RBUlRfQ09OVElOT1VTICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgOCApICAgLyogKFNTQykgQ29udGludW91cywgYXMgc29vbiBhcyB0aGUgcmVjZWl2ZXIgaXMgZW5hYmxlZCwgYW5kIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBlbmQgb2YgdHJhbnNmZXIgb2YgdGhlIHByZXZpb3VzIGRhdGEuICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX1NUQVJUX1RYICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDggKSAgIC8qIChTU0MpIFRyYW5zbWl0L1JlY2VpdmUgc3RhcnQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfU1RBUlRfTE9XX1JGICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgOCApICAgLyogKFNTQykgRGV0ZWN0aW9uIG9mIGEgbG93IGxldmVsIG9uIFJGIGlucHV0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX1NUQVJUX0hJR0hfUkYgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDggKSAgIC8qIChTU0MpIERldGVjdGlvbiBvZiBhIGhpZ2ggbGV2ZWwgb24gUkYgaW5wdXQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfU1RBUlRfRkFMTF9SRiAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDQgPDwgOCApICAgLyogKFNTQykgRGV0ZWN0aW9uIG9mIGEgZmFsbGluZyBlZGdlIG9uIFJGIGlucHV0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX1NUQVJUX1JJU0VfUkYgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg1IDw8IDggKSAgIC8qIChTU0MpIERldGVjdGlvbiBvZiBhIHJpc2luZyBlZGdlIG9uIFJGIGlucHV0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX1NUQVJUX0xFVkVMX1JGICAgICAoICggdW5zaWduZWQgaW50ICkgMHg2IDw8IDggKSAgIC8qIChTU0MpIERldGVjdGlvbiBvZiBhbnkgbGV2ZWwgY2hhbmdlIG9uIFJGIGlucHV0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX1NUQVJUX0VER0VfUkYgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg3IDw8IDggKSAgIC8qIChTU0MpIERldGVjdGlvbiBvZiBhbnkgZWRnZSBvbiBSRiBpbnB1dCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19TVEFSVF8wICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4OCA8PCA4ICkgICAvKiAoU1NDKSBDb21wYXJlIDAgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19TVFRETFkgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGIDw8IDE2ICkgLyogKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBTdGFydCBEZWxheSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1BFUklPRCAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RkYgPDwgMjQgKSAvKiAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IFBlcmlvZCBEaXZpZGVyIFNlbGVjdGlvbiAqLw0KLS8qIC0tLS0tLS0tIFNTQ19SRk1SIDogKFNTQyBPZmZzZXQ6IDB4MTQpIFNTQyBSZWNlaXZlIEZyYW1lIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19EQVRMRU4gICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDFGIDw8IDAgKSAgLyogKFNTQykgRGF0YSBMZW5ndGggKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19MT09QICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNSApICAgLyogKFNTQykgTG9vcCBNb2RlICovDQotI2RlZmluZSBBVDkxQ19TU0NfTVNCRiAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDcgKSAgIC8qIChTU0MpIE1vc3QgU2lnbmlmaWNhbnQgQml0IEZpcnN0ICovDQotI2RlZmluZSBBVDkxQ19TU0NfREFUTkIgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGIDw8IDggKSAgIC8qIChTU0MpIERhdGEgTnVtYmVyIHBlciBGcmFtZSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0ZTTEVOICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RiA8PCAxNiApICAvKiAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgbGVuZ3RoICovDQotI2RlZmluZSBBVDkxQ19TU0NfRlNPUyAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg3IDw8IDIwICkgIC8qIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBPdXRwdXQgU2VsZWN0aW9uICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX0ZTT1NfTk9ORSAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDIwICkgIC8qIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IE5vbmUgUksgcGluIElucHV0LW9ubHkgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfRlNPU19ORUdBVElWRSAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjAgKSAgLyogKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogTmVnYXRpdmUgUHVsc2UgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfRlNPU19QT1NJVElWRSAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgMjAgKSAgLyogKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogUG9zaXRpdmUgUHVsc2UgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfRlNPU19MT1cgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMjAgKSAgLyogKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogRHJpdmVyIExvdyBkdXJpbmcgZGF0YSB0cmFuc2ZlciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19GU09TX0hJR0ggICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NCA8PCAyMCApICAvKiAoU1NDKSBTZWxlY3RlZCBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgU2lnbmFsOiBEcml2ZXIgSGlnaCBkdXJpbmcgZGF0YSB0cmFuc2ZlciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19GU09TX1RPR0dMRSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NSA8PCAyMCApICAvKiAoU1NDKSBTZWxlY3RlZCBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgU2lnbmFsOiBUb2dnbGluZyBhdCBlYWNoIHN0YXJ0IG9mIGRhdGEgdHJhbnNmZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19GU0VER0UgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjQgKSAgLyogKFNTQykgRnJhbWUgU3luYyBFZGdlIERldGVjdGlvbiAqLw0KLS8qIC0tLS0tLS0tIFNTQ19UQ01SIDogKFNTQyBPZmZzZXQ6IDB4MTgpIFNTQyBUcmFuc21pdCBDbG9jayBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gU1NDX1RGTVIgOiAoU1NDIE9mZnNldDogMHgxYykgU1NDIFRyYW5zbWl0IEZyYW1lIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19EQVRERUYgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNSApICAvKiAoU1NDKSBEYXRhIERlZmF1bHQgVmFsdWUgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19GU0RFTiAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjMgKSAvKiAoU1NDKSBGcmFtZSBTeW5jIERhdGEgRW5hYmxlICovDQotLyogLS0tLS0tLS0gU1NDX1NSIDogKFNTQyBPZmZzZXQ6IDB4NDApIFNTQyBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19UWFJEWSAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAvKiAoU1NDKSBUcmFuc21pdCBSZWFkeSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1RYRU1QVFkgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgIC8qIChTU0MpIFRyYW5zbWl0IEVtcHR5ICovDQotI2RlZmluZSBBVDkxQ19TU0NfRU5EVFggICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAgLyogKFNTQykgRW5kIE9mIFRyYW5zbWlzc2lvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1RYQlVGRSAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzICkgIC8qIChTU0MpIFRyYW5zbWl0IEJ1ZmZlciBFbXB0eSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1JYUkRZICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA0ICkgIC8qIChTU0MpIFJlY2VpdmUgUmVhZHkgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19PVlJVTiAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNSApICAvKiAoU1NDKSBSZWNlaXZlIE92ZXJydW4gKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19FTkRSWCAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNiApICAvKiAoU1NDKSBFbmQgb2YgUmVjZXB0aW9uICovDQotI2RlZmluZSBBVDkxQ19TU0NfUlhCVUZGICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDcgKSAgLyogKFNTQykgUmVjZWl2ZSBCdWZmZXIgRnVsbCAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1RYU1lOICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMCApIC8qIChTU0MpIFRyYW5zbWl0IFN5bmMgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19SWFNZTiAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTEgKSAvKiAoU1NDKSBSZWNlaXZlIFN5bmMgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19UWEVOQSAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTYgKSAvKiAoU1NDKSBUcmFuc21pdCBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19SWEVOQSAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTcgKSAvKiAoU1NDKSBSZWNlaXZlIEVuYWJsZSAqLw0KLS8qIC0tLS0tLS0tIFNTQ19JRVIgOiAoU1NDIE9mZnNldDogMHg0NCkgU1NDIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBTU0NfSURSIDogKFNTQyBPZmZzZXQ6IDB4NDgpIFNTQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFNTQ19JTVIgOiAoU1NDIE9mZnNldDogMHg0YykgU1NDIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tICovDQorLy8gLS0tLS0tLS0gU1NDX0NSIDogKFNTQyBPZmZzZXQ6IDB4MCkgU1NDIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TU0NfUlhFTiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFNTQykgUmVjZWl2ZSBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1NTQ19SWERJUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoU1NDKSBSZWNlaXZlIERpc2FibGUNCisjZGVmaW5lIEFUOTFDX1NTQ19UWEVOICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoU1NDKSBUcmFuc21pdCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1NTQ19UWERJUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvLyAoU1NDKSBUcmFuc21pdCBEaXNhYmxlDQorI2RlZmluZSBBVDkxQ19TU0NfU1dSU1QgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNSkgLy8gKFNTQykgU29mdHdhcmUgUmVzZXQNCisvLyAtLS0tLS0tLSBTU0NfUkNNUiA6IChTU0MgT2Zmc2V0OiAweDEwKSBTU0MgUmVjZWl2ZSBDbG9jayBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1NDX0NLUyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDApIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfU1NDX0NLU19ESVYgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwKSAvLyAoU1NDKSBEaXZpZGVkIENsb2NrDQorI2RlZmluZSAJQVQ5MUNfU1NDX0NLU19USyAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxKSAvLyAoU1NDKSBUSyBDbG9jayBzaWduYWwNCisjZGVmaW5lIAlBVDkxQ19TU0NfQ0tTX1JLICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIpIC8vIChTU0MpIFJLIHBpbg0KKyNkZWZpbmUgQVQ5MUNfU1NDX0NLTyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgIDIpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgT3V0cHV0IE1vZGUgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfU1NDX0NLT19OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICAyKSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIE91dHB1dCBNb2RlOiBOb25lIFJLIHBpbjogSW5wdXQtb25seQ0KKyNkZWZpbmUgCUFUOTFDX1NTQ19DS09fQ09OVElOT1VTICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFNTQykgQ29udGludW91cyBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIFJLIHBpbjogT3V0cHV0DQorI2RlZmluZSAJQVQ5MUNfU1NDX0NLT19EQVRBX1RYICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICAyKSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIG9ubHkgZHVyaW5nIGRhdGEgdHJhbnNmZXJzIFJLIHBpbjogT3V0cHV0DQorI2RlZmluZSBBVDkxQ19TU0NfQ0tJICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBJbnZlcnNpb24NCisjZGVmaW5lIEFUOTFDX1NTQ19TVEFSVCAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8ICA4KSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IFN0YXJ0IFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1NTQ19TVEFSVF9DT05USU5PVVMgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA4KSAvLyAoU1NDKSBDb250aW51b3VzLCBhcyBzb29uIGFzIHRoZSByZWNlaXZlciBpcyBlbmFibGVkLCBhbmQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGVuZCBvZiB0cmFuc2ZlciBvZiB0aGUgcHJldmlvdXMgZGF0YS4NCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfVFggICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFNTQykgVHJhbnNtaXQvUmVjZWl2ZSBzdGFydA0KKyNkZWZpbmUgCUFUOTFDX1NTQ19TVEFSVF9MT1dfUkYgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA4KSAvLyAoU1NDKSBEZXRlY3Rpb24gb2YgYSBsb3cgbGV2ZWwgb24gUkYgaW5wdXQNCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfSElHSF9SRiAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKFNTQykgRGV0ZWN0aW9uIG9mIGEgaGlnaCBsZXZlbCBvbiBSRiBpbnB1dA0KKyNkZWZpbmUgCUFUOTFDX1NTQ19TVEFSVF9GQUxMX1JGICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg0IDw8ICA4KSAvLyAoU1NDKSBEZXRlY3Rpb24gb2YgYSBmYWxsaW5nIGVkZ2Ugb24gUkYgaW5wdXQNCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfUklTRV9SRiAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NSA8PCAgOCkgLy8gKFNTQykgRGV0ZWN0aW9uIG9mIGEgcmlzaW5nIGVkZ2Ugb24gUkYgaW5wdXQNCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfTEVWRUxfUkYgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NiA8PCAgOCkgLy8gKFNTQykgRGV0ZWN0aW9uIG9mIGFueSBsZXZlbCBjaGFuZ2Ugb24gUkYgaW5wdXQNCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfRURHRV9SRiAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAgOCkgLy8gKFNTQykgRGV0ZWN0aW9uIG9mIGFueSBlZGdlIG9uIFJGIGlucHV0DQorI2RlZmluZSAJQVQ5MUNfU1NDX1NUQVJUXzAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDggPDwgIDgpIC8vIChTU0MpIENvbXBhcmUgMA0KKyNkZWZpbmUgQVQ5MUNfU1NDX1NUVERMWSAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8IDE2KSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IFN0YXJ0IERlbGF5DQorI2RlZmluZSBBVDkxQ19TU0NfUEVSSU9EICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgMjQpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgUGVyaW9kIERpdmlkZXIgU2VsZWN0aW9uDQorLy8gLS0tLS0tLS0gU1NDX1JGTVIgOiAoU1NDIE9mZnNldDogMHgxNCkgU1NDIFJlY2VpdmUgRnJhbWUgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NTQ19EQVRMRU4gICAgICAoKHVuc2lnbmVkIGludCkgMHgxRiA8PCAgMCkgLy8gKFNTQykgRGF0YSBMZW5ndGgNCisjZGVmaW5lIEFUOTFDX1NTQ19MT09QICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoU1NDKSBMb29wIE1vZGUNCisjZGVmaW5lIEFUOTFDX1NTQ19NU0JGICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoU1NDKSBNb3N0IFNpZ25pZmljYW50IEJpdCBGaXJzdA0KKyNkZWZpbmUgQVQ5MUNfU1NDX0RBVE5CICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgIDgpIC8vIChTU0MpIERhdGEgTnVtYmVyIHBlciBGcmFtZQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX0ZTTEVOICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgMTYpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBsZW5ndGgNCisjZGVmaW5lIEFUOTFDX1NTQ19GU09TICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8IDIwKSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgT3V0cHV0IFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1NTQ19GU09TX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMjApIC8vIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IE5vbmUgUksgcGluIElucHV0LW9ubHkNCisjZGVmaW5lIAlBVDkxQ19TU0NfRlNPU19ORUdBVElWRSAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIwKSAvLyAoU1NDKSBTZWxlY3RlZCBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgU2lnbmFsOiBOZWdhdGl2ZSBQdWxzZQ0KKyNkZWZpbmUgCUFUOTFDX1NTQ19GU09TX1BPU0lUSVZFICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMjApIC8vIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IFBvc2l0aXZlIFB1bHNlDQorI2RlZmluZSAJQVQ5MUNfU1NDX0ZTT1NfTE9XICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyMCkgLy8gKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogRHJpdmVyIExvdyBkdXJpbmcgZGF0YSB0cmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NTQ19GU09TX0hJR0ggICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDQgPDwgMjApIC8vIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IERyaXZlciBIaWdoIGR1cmluZyBkYXRhIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1NDX0ZTT1NfVE9HR0xFICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NSA8PCAyMCkgLy8gKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogVG9nZ2xpbmcgYXQgZWFjaCBzdGFydCBvZiBkYXRhIHRyYW5zZmVyDQorI2RlZmluZSBBVDkxQ19TU0NfRlNFREdFICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNCkgLy8gKFNTQykgRnJhbWUgU3luYyBFZGdlIERldGVjdGlvbg0KKy8vIC0tLS0tLS0tIFNTQ19UQ01SIDogKFNTQyBPZmZzZXQ6IDB4MTgpIFNTQyBUcmFuc21pdCBDbG9jayBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFNTQ19URk1SIDogKFNTQyBPZmZzZXQ6IDB4MWMpIFNTQyBUcmFuc21pdCBGcmFtZSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1NDX0RBVERFRiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChTU0MpIERhdGEgRGVmYXVsdCBWYWx1ZQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX0ZTREVOICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjMpIC8vIChTU0MpIEZyYW1lIFN5bmMgRGF0YSBFbmFibGUNCisvLyAtLS0tLS0tLSBTU0NfU1IgOiAoU1NDIE9mZnNldDogMHg0MCkgU1NDIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NTQ19UWFJEWSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoU1NDKSBUcmFuc21pdCBSZWFkeQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RYRU1QVFkgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChTU0MpIFRyYW5zbWl0IEVtcHR5DQorI2RlZmluZSBBVDkxQ19TU0NfRU5EVFggICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFNTQykgRW5kIE9mIFRyYW5zbWlzc2lvbg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RYQlVGRSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChTU0MpIFRyYW5zbWl0IEJ1ZmZlciBFbXB0eQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JYUkRZICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChTU0MpIFJlY2VpdmUgUmVhZHkNCisjZGVmaW5lIEFUOTFDX1NTQ19PVlJVTiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoU1NDKSBSZWNlaXZlIE92ZXJydW4NCisjZGVmaW5lIEFUOTFDX1NTQ19FTkRSWCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoU1NDKSBFbmQgb2YgUmVjZXB0aW9uDQorI2RlZmluZSBBVDkxQ19TU0NfUlhCVUZGICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKFNTQykgUmVjZWl2ZSBCdWZmZXIgRnVsbA0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RYU1lOICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChTU0MpIFRyYW5zbWl0IFN5bmMNCisjZGVmaW5lIEFUOTFDX1NTQ19SWFNZTiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDExKSAvLyAoU1NDKSBSZWNlaXZlIFN5bmMNCisjZGVmaW5lIEFUOTFDX1NTQ19UWEVOQSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoU1NDKSBUcmFuc21pdCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1NTQ19SWEVOQSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE3KSAvLyAoU1NDKSBSZWNlaXZlIEVuYWJsZQ0KKy8vIC0tLS0tLS0tIFNTQ19JRVIgOiAoU1NDIE9mZnNldDogMHg0NCkgU1NDIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gU1NDX0lEUiA6IChTU0MgT2Zmc2V0OiAweDQ4KSBTU0MgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gU1NDX0lNUiA6IChTU0MgT2Zmc2V0OiAweDRjKSBTU0MgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBUd28td2lyZSBJbnRlcmZhY2UgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLXR5cGVkZWYgc3RydWN0IF9BVDkxU19UV0kNCi17DQotICAgIEFUOTFfUkVHIFRXSV9DUjsgICAgICAgICAvKiBDb250cm9sIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFRXSV9NTVI7ICAgICAgICAvKiBNYXN0ZXIgTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDBbIDEgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgVFdJX0lBRFI7ICAgICAgIC8qIEludGVybmFsIEFkZHJlc3MgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVFdJX0NXR1I7ICAgICAgIC8qIENsb2NrIFdhdmVmb3JtIEdlbmVyYXRvciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDFbIDMgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgVFdJX1NSOyAgICAgICAgIC8qIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBUV0lfSUVSOyAgICAgICAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBUV0lfSURSOyAgICAgICAgLyogSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVFdJX0lNUjsgICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFRXSV9SSFI7ICAgICAgICAvKiBSZWNlaXZlIEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVFdJX1RIUjsgICAgICAgIC8qIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi19IEFUOTFTX1RXSSwgKiBBVDkxUFNfVFdJOw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVHdvLXdpcmUgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfVFdJIHsNCisJQVQ5MV9SRUcJIFRXSV9DUjsgCS8vIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRXSV9NTVI7IAkvLyBNYXN0ZXIgTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBUV0lfSUFEUjsgCS8vIEludGVybmFsIEFkZHJlc3MgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRXSV9DV0dSOyAJLy8gQ2xvY2sgV2F2ZWZvcm0gR2VuZXJhdG9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbM107IAkvLyANCisJQVQ5MV9SRUcJIFRXSV9TUjsgCS8vIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVFdJX0lFUjsgCS8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRXSV9JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVFdJX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUV0lfUkhSOyAJLy8gUmVjZWl2ZSBIb2xkaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUV0lfVEhSOyAJLy8gVHJhbnNtaXQgSG9sZGluZyBSZWdpc3Rlcg0KK30gQVQ5MVNfVFdJLCAqQVQ5MVBTX1RXSTsNCiANCi0vKiAtLS0tLS0tLSBUV0lfQ1IgOiAoVFdJIE9mZnNldDogMHgwKSBUV0kgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX1NUQVJUICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgLyogKFRXSSkgU2VuZCBhIFNUQVJUIENvbmRpdGlvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX1NUT1AgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAgLyogKFRXSSkgU2VuZCBhIFNUT1AgQ29uZGl0aW9uICovDQotI2RlZmluZSBBVDkxQ19UV0lfTVNFTiAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyICkgICAvKiAoVFdJKSBUV0kgTWFzdGVyIFRyYW5zZmVyIEVuYWJsZWQgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9NU0RJUyAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDMgKSAgIC8qIChUV0kpIFRXSSBNYXN0ZXIgVHJhbnNmZXIgRGlzYWJsZWQgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9TV1JTVCAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDcgKSAgIC8qIChUV0kpIFNvZnR3YXJlIFJlc2V0ICovDQotLyogLS0tLS0tLS0gVFdJX01NUiA6IChUV0kgT2Zmc2V0OiAweDQpIFRXSSBNYXN0ZXIgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX0lBRFJTWiAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgOCApICAgLyogKFRXSSkgSW50ZXJuYWwgRGV2aWNlIEFkZHJlc3MgU2l6ZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RXSV9JQURSU1pfTk8gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgOCApICAgLyogKFRXSSkgTm8gaW50ZXJuYWwgZGV2aWNlIGFkZHJlc3MgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UV0lfSUFEUlNaXzFfQllURSAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDggKSAgIC8qIChUV0kpIE9uZS1ieXRlIGludGVybmFsIGRldmljZSBhZGRyZXNzICovDQotI2RlZmluZSAgICAgQVQ5MUNfVFdJX0lBRFJTWl8yX0JZVEUgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCA4ICkgICAvKiAoVFdJKSBUd28tYnl0ZSBpbnRlcm5hbCBkZXZpY2UgYWRkcmVzcyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RXSV9JQURSU1pfM19CWVRFICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgOCApICAgLyogKFRXSSkgVGhyZWUtYnl0ZSBpbnRlcm5hbCBkZXZpY2UgYWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX01SRUFEICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTIgKSAgLyogKFRXSSkgTWFzdGVyIFJlYWQgRGlyZWN0aW9uICovDQotI2RlZmluZSBBVDkxQ19UV0lfREFEUiAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4N0YgPDwgMTYgKSAvKiAoVFdJKSBEZXZpY2UgQWRkcmVzcyAqLw0KLS8qIC0tLS0tLS0tIFRXSV9DV0dSIDogKFRXSSBPZmZzZXQ6IDB4MTApIFRXSSBDbG9jayBXYXZlZm9ybSBHZW5lcmF0b3IgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9DTERJViAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRiA8PCAwICkgIC8qIChUV0kpIENsb2NrIExvdyBEaXZpZGVyICovDQotI2RlZmluZSBBVDkxQ19UV0lfQ0hESVYgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RkYgPDwgOCApICAvKiAoVFdJKSBDbG9jayBIaWdoIERpdmlkZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9DS0RJViAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg3IDw8IDE2ICkgIC8qIChUV0kpIENsb2NrIERpdmlkZXIgKi8NCi0vKiAtLS0tLS0tLSBUV0lfU1IgOiAoVFdJIE9mZnNldDogMHgyMCkgVFdJIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX1RYQ09NUCAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgLyogKFRXSSkgVHJhbnNtaXNzaW9uIENvbXBsZXRlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX1JYUkRZICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAgLyogKFRXSSkgUmVjZWl2ZSBob2xkaW5nIHJlZ2lzdGVyIFJlYURZICovDQotI2RlZmluZSBBVDkxQ19UV0lfVFhSRFkgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyICkgICAvKiAoVFdJKSBUcmFuc21pdCBob2xkaW5nIHJlZ2lzdGVyIFJlYURZICovDQotI2RlZmluZSBBVDkxQ19UV0lfT1ZSRSAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA2ICkgICAvKiAoVFdJKSBPdmVycnVuIEVycm9yICovDQotI2RlZmluZSBBVDkxQ19UV0lfVU5SRSAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA3ICkgICAvKiAoVFdJKSBVbmRlcnJ1biBFcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX05BQ0sgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOCApICAgLyogKFRXSSkgTm90IEFja25vd2xlZGdlZCAqLw0KLS8qIC0tLS0tLS0tIFRXSV9JRVIgOiAoVFdJIE9mZnNldDogMHgyNCkgVFdJIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBUV0lfSURSIDogKFRXSSBPZmZzZXQ6IDB4MjgpIFRXSSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFRXSV9JTVIgOiAoVFdJIE9mZnNldDogMHgyYykgVFdJIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tICovDQorLy8gLS0tLS0tLS0gVFdJX0NSIDogKFRXSSBPZmZzZXQ6IDB4MCkgVFdJIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UV0lfU1RBUlQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFRXSSkgU2VuZCBhIFNUQVJUIENvbmRpdGlvbg0KKyNkZWZpbmUgQVQ5MUNfVFdJX1NUT1AgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChUV0kpIFNlbmQgYSBTVE9QIENvbmRpdGlvbg0KKyNkZWZpbmUgQVQ5MUNfVFdJX01TRU4gICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChUV0kpIFRXSSBNYXN0ZXIgVHJhbnNmZXIgRW5hYmxlZA0KKyNkZWZpbmUgQVQ5MUNfVFdJX01TRElTICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChUV0kpIFRXSSBNYXN0ZXIgVHJhbnNmZXIgRGlzYWJsZWQNCisjZGVmaW5lIEFUOTFDX1RXSV9TV1JTVCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoVFdJKSBTb2Z0d2FyZSBSZXNldA0KKy8vIC0tLS0tLS0tIFRXSV9NTVIgOiAoVFdJIE9mZnNldDogMHg0KSBUV0kgTWFzdGVyIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UV0lfSUFEUlNaICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKFRXSSkgSW50ZXJuYWwgRGV2aWNlIEFkZHJlc3MgU2l6ZQ0KKyNkZWZpbmUgCUFUOTFDX1RXSV9JQURSU1pfTk8gICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgOCkgLy8gKFRXSSkgTm8gaW50ZXJuYWwgZGV2aWNlIGFkZHJlc3MNCisjZGVmaW5lIAlBVDkxQ19UV0lfSUFEUlNaXzFfQllURSAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChUV0kpIE9uZS1ieXRlIGludGVybmFsIGRldmljZSBhZGRyZXNzDQorI2RlZmluZSAJQVQ5MUNfVFdJX0lBRFJTWl8yX0JZVEUgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA4KSAvLyAoVFdJKSBUd28tYnl0ZSBpbnRlcm5hbCBkZXZpY2UgYWRkcmVzcw0KKyNkZWZpbmUgCUFUOTFDX1RXSV9JQURSU1pfM19CWVRFICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKFRXSSkgVGhyZWUtYnl0ZSBpbnRlcm5hbCBkZXZpY2UgYWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfVFdJX01SRUFEICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8vIChUV0kpIE1hc3RlciBSZWFkIERpcmVjdGlvbg0KKyNkZWZpbmUgQVQ5MUNfVFdJX0RBRFIgICAgICAgICgodW5zaWduZWQgaW50KSAweDdGIDw8IDE2KSAvLyAoVFdJKSBEZXZpY2UgQWRkcmVzcw0KKy8vIC0tLS0tLS0tIFRXSV9DV0dSIDogKFRXSSBPZmZzZXQ6IDB4MTApIFRXSSBDbG9jayBXYXZlZm9ybSBHZW5lcmF0b3IgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UV0lfQ0xESVYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgIDApIC8vIChUV0kpIENsb2NrIExvdyBEaXZpZGVyDQorI2RlZmluZSBBVDkxQ19UV0lfQ0hESVYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgIDgpIC8vIChUV0kpIENsb2NrIEhpZ2ggRGl2aWRlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX0NLRElWICAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgMTYpIC8vIChUV0kpIENsb2NrIERpdmlkZXINCisvLyAtLS0tLS0tLSBUV0lfU1IgOiAoVFdJIE9mZnNldDogMHgyMCkgVFdJIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RXSV9UWENPTVAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoVFdJKSBUcmFuc21pc3Npb24gQ29tcGxldGVkDQorI2RlZmluZSBBVDkxQ19UV0lfUlhSRFkgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFRXSSkgUmVjZWl2ZSBob2xkaW5nIHJlZ2lzdGVyIFJlYURZDQorI2RlZmluZSBBVDkxQ19UV0lfVFhSRFkgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFRXSSkgVHJhbnNtaXQgaG9sZGluZyByZWdpc3RlciBSZWFEWQ0KKyNkZWZpbmUgQVQ5MUNfVFdJX09WUkUgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChUV0kpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX1RXSV9VTlJFICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoVFdJKSBVbmRlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX05BQ0sgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChUV0kpIE5vdCBBY2tub3dsZWRnZWQNCisvLyAtLS0tLS0tLSBUV0lfSUVSIDogKFRXSSBPZmZzZXQ6IDB4MjQpIFRXSSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFRXSV9JRFIgOiAoVFdJIE9mZnNldDogMHgyOCkgVFdJIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFRXSV9JTVIgOiAoVFdJIE9mZnNldDogMHgyYykgVFdJIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUFdNQyBDaGFubmVsIEludGVyZmFjZSAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotdHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1BXTUNfQ0gNCi17DQotICAgIEFUOTFfUkVHIFBXTUNfQ01SOyAgICAgICAgICAgLyogQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBXTUNfQ0RUWVI7ICAgICAgICAgLyogQ2hhbm5lbCBEdXR5IEN5Y2xlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBXTUNfQ1BSRFI7ICAgICAgICAgLyogQ2hhbm5lbCBQZXJpb2QgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUFdNQ19DQ05UUjsgICAgICAgICAvKiBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUFdNQ19DVVBEUjsgICAgICAgICAvKiBDaGFubmVsIFVwZGF0ZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQV01DX1Jlc2VydmVkWyAzIF07IC8qIFJlc2VydmVkICovDQotfSBBVDkxU19QV01DX0NILCAqIEFUOTFQU19QV01DX0NIOw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUFdNQyBDaGFubmVsIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1BXTUNfQ0ggew0KKwlBVDkxX1JFRwkgUFdNQ19DTVI7IAkvLyBDaGFubmVsIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBXTUNfQ0RUWVI7IAkvLyBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBXTUNfQ1BSRFI7IAkvLyBDaGFubmVsIFBlcmlvZCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUFdNQ19DQ05UUjsgCS8vIENoYW5uZWwgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUFdNQ19DVVBEUjsgCS8vIENoYW5uZWwgVXBkYXRlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQV01DX1Jlc2VydmVkWzNdOyAJLy8gUmVzZXJ2ZWQNCit9IEFUOTFTX1BXTUNfQ0gsICpBVDkxUFNfUFdNQ19DSDsNCiANCi0vKiAtLS0tLS0tLSBQV01DX0NNUiA6IChQV01DX0NIIE9mZnNldDogMHgwKSBQV01DIENoYW5uZWwgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DUFJFICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEYgPDwgMCApICAvKiAoUFdNQ19DSCkgQ2hhbm5lbCBQcmUtc2NhbGVyIDogUFdNQ19DTEt4ICovDQotI2RlZmluZSAgICAgQVQ5MUNfUFdNQ19DUFJFX01DSyAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCApICAgICAgIC8qIChQV01DX0NIKSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1BXTUNfQ1BSRV9NQ0tBICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEIgKSAgICAgICAvKiAoUFdNQ19DSCkgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19QV01DX0NQUkVfTUNLQiAgICAoICggdW5zaWduZWQgaW50ICkgMHhDICkgICAgICAgLyogKFBXTUNfQ0gpICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NBTEcgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgIC8qIChQV01DX0NIKSBDaGFubmVsIEFsaWdubWVudCAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DUE9MICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOSApICAvKiAoUFdNQ19DSCkgQ2hhbm5lbCBQb2xhcml0eSAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DUEQgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTAgKSAvKiAoUFdNQ19DSCkgQ2hhbm5lbCBVcGRhdGUgUGVyaW9kICovDQotLyogLS0tLS0tLS0gUFdNQ19DRFRZUiA6IChQV01DX0NIIE9mZnNldDogMHg0KSBQV01DIENoYW5uZWwgRHV0eSBDeWNsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DRFRZICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMCApICAvKiAoUFdNQ19DSCkgQ2hhbm5lbCBEdXR5IEN5Y2xlICovDQotLyogLS0tLS0tLS0gUFdNQ19DUFJEUiA6IChQV01DX0NIIE9mZnNldDogMHg4KSBQV01DIENoYW5uZWwgUGVyaW9kIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NQUkQgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAwICkgIC8qIChQV01DX0NIKSBDaGFubmVsIFBlcmlvZCAqLw0KLS8qIC0tLS0tLS0tIFBXTUNfQ0NOVFIgOiAoUFdNQ19DSCBPZmZzZXQ6IDB4YykgUFdNQyBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0NOVCAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDAgKSAgLyogKFBXTUNfQ0gpIENoYW5uZWwgQ291bnRlciAqLw0KLS8qIC0tLS0tLS0tIFBXTUNfQ1VQRFIgOiAoUFdNQ19DSCBPZmZzZXQ6IDB4MTApIFBXTUMgQ2hhbm5lbCBVcGRhdGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ1VQRCAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDAgKSAgLyogKFBXTUNfQ0gpIENoYW5uZWwgVXBkYXRlICovDQorLy8gLS0tLS0tLS0gUFdNQ19DTVIgOiAoUFdNQ19DSCBPZmZzZXQ6IDB4MCkgUFdNQyBDaGFubmVsIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QV01DX0NQUkUgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAgMCkgLy8gKFBXTUNfQ0gpIENoYW5uZWwgUHJlLXNjYWxlciA6IFBXTUNfQ0xLeA0KKyNkZWZpbmUgCUFUOTFDX1BXTUNfQ1BSRV9NQ0sgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwKSAvLyAoUFdNQ19DSCkgDQorI2RlZmluZSAJQVQ5MUNfUFdNQ19DUFJFX01DS0EgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweEIpIC8vIChQV01DX0NIKSANCisjZGVmaW5lIAlBVDkxQ19QV01DX0NQUkVfTUNLQiAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4QykgLy8gKFBXTUNfQ0gpIA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DQUxHICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChQV01DX0NIKSBDaGFubmVsIEFsaWdubWVudA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DUE9MICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChQV01DX0NIKSBDaGFubmVsIFBvbGFyaXR5DQorI2RlZmluZSBBVDkxQ19QV01DX0NQRCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLy8gKFBXTUNfQ0gpIENoYW5uZWwgVXBkYXRlIFBlcmlvZA0KKy8vIC0tLS0tLS0tIFBXTUNfQ0RUWVIgOiAoUFdNQ19DSCBPZmZzZXQ6IDB4NCkgUFdNQyBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QV01DX0NEVFkgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgMCkgLy8gKFBXTUNfQ0gpIENoYW5uZWwgRHV0eSBDeWNsZQ0KKy8vIC0tLS0tLS0tIFBXTUNfQ1BSRFIgOiAoUFdNQ19DSCBPZmZzZXQ6IDB4OCkgUFdNQyBDaGFubmVsIFBlcmlvZCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ1BSRCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICAwKSAvLyAoUFdNQ19DSCkgQ2hhbm5lbCBQZXJpb2QNCisvLyAtLS0tLS0tLSBQV01DX0NDTlRSIDogKFBXTUNfQ0ggT2Zmc2V0OiAweGMpIFBXTUMgQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DQ05UICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDApIC8vIChQV01DX0NIKSBDaGFubmVsIENvdW50ZXINCisvLyAtLS0tLS0tLSBQV01DX0NVUERSIDogKFBXTUNfQ0ggT2Zmc2V0OiAweDEwKSBQV01DIENoYW5uZWwgVXBkYXRlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DVVBEICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDApIC8vIChQV01DX0NIKSBDaGFubmVsIFVwZGF0ZQ0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUHVsc2UgV2lkdGggTW9kdWxhdGlvbiBDb250cm9sbGVyIEludGVyZmFjZSAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotdHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1BXTUMNCi17DQotICAgIEFUOTFfUkVHIFBXTUNfTVI7ICAgICAgICAgICAvKiBQV01DIE1vZGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUFdNQ19FTkE7ICAgICAgICAgIC8qIFBXTUMgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBXTUNfRElTOyAgICAgICAgICAvKiBQV01DIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUFdNQ19TUjsgICAgICAgICAgIC8qIFBXTUMgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBXTUNfSUVSOyAgICAgICAgICAvKiBQV01DIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUFdNQ19JRFI7ICAgICAgICAgIC8qIFBXTUMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUFdNQ19JTVI7ICAgICAgICAgIC8qIFBXTUMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUFdNQ19JU1I7ICAgICAgICAgIC8qIFBXTUMgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDBbIDU1IF07ICAgLyogKi8NCi0gICAgQVQ5MV9SRUcgUFdNQ19WUjsgICAgICAgICAgIC8qIFBXTUMgVmVyc2lvbiBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDFbIDY0IF07ICAgLyogKi8NCi0gICAgQVQ5MVNfUFdNQ19DSCBQV01DX0NIWyA0IF07IC8qIFBXTUMgQ2hhbm5lbCAqLw0KLX0gQVQ5MVNfUFdNQywgKiBBVDkxUFNfUFdNQzsNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFB1bHNlIFdpZHRoIE1vZHVsYXRpb24gQ29udHJvbGxlciBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19QV01DIHsNCisJQVQ5MV9SRUcJIFBXTUNfTVI7IAkvLyBQV01DIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBXTUNfRU5BOyAJLy8gUFdNQyBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBXTUNfRElTOyAJLy8gUFdNQyBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQV01DX1NSOyAJLy8gUFdNQyBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBXTUNfSUVSOyAJLy8gUFdNQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQV01DX0lEUjsgCS8vIFBXTUMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBXTUNfSU1SOyAJLy8gUFdNQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUFdNQ19JU1I7IAkvLyBQV01DIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFs1NV07IAkvLyANCisJQVQ5MV9SRUcJIFBXTUNfVlI7IAkvLyBQV01DIFZlcnNpb24gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMVs2NF07IAkvLyANCisJQVQ5MVNfUFdNQ19DSAkgUFdNQ19DSFs0XTsgCS8vIFBXTUMgQ2hhbm5lbA0KK30gQVQ5MVNfUFdNQywgKkFUOTFQU19QV01DOw0KIA0KLS8qIC0tLS0tLS0tIFBXTUNfTVIgOiAoUFdNQyBPZmZzZXQ6IDB4MCkgUFdNQyBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19QV01DX0RJVkEgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRiA8PCAwICkgIC8qIChQV01DKSBDTEtBIGRpdmlkZSBmYWN0b3IuICovDQotI2RlZmluZSBBVDkxQ19QV01DX1BSRUEgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGIDw8IDggKSAgIC8qIChQV01DKSBEaXZpZGVyIElucHV0IENsb2NrIFByZXNjYWxlciBBICovDQotI2RlZmluZSAgICAgQVQ5MUNfUFdNQ19QUkVBX01DSyAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDggKSAgIC8qIChQV01DKSAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19ESVZCICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RkYgPDwgMTYgKSAvKiAoUFdNQykgQ0xLQiBkaXZpZGUgZmFjdG9yLiAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19QUkVCICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RiA8PCAyNCApICAvKiAoUFdNQykgRGl2aWRlciBJbnB1dCBDbG9jayBQcmVzY2FsZXIgQiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1BXTUNfUFJFQl9NQ0sgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAyNCApICAvKiAoUFdNQykgKi8NCi0vKiAtLS0tLS0tLSBQV01DX0VOQSA6IChQV01DIE9mZnNldDogMHg0KSBQV01DIEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSElEMCAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgICAvKiAoUFdNQykgQ2hhbm5lbCBJRCAwICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NISUQxICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEgKSAgIC8qIChQV01DKSBDaGFubmVsIElEIDEgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0hJRDIgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMiApICAgLyogKFBXTUMpIENoYW5uZWwgSUQgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSElEMyAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzICkgICAvKiAoUFdNQykgQ2hhbm5lbCBJRCAzICovDQotLyogLS0tLS0tLS0gUFdNQ19ESVMgOiAoUFdNQyBPZmZzZXQ6IDB4OCkgUFdNQyBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gUFdNQ19TUiA6IChQV01DIE9mZnNldDogMHhjKSBQV01DIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFBXTUNfSUVSIDogKFBXTUMgT2Zmc2V0OiAweDEwKSBQV01DIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBQV01DX0lEUiA6IChQV01DIE9mZnNldDogMHgxNCkgUFdNQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFBXTUNfSU1SIDogKFBXTUMgT2Zmc2V0OiAweDE4KSBQV01DIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gUFdNQ19JU1IgOiAoUFdNQyBPZmZzZXQ6IDB4MWMpIFBXTUMgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KKy8vIC0tLS0tLS0tIFBXTUNfTVIgOiAoUFdNQyBPZmZzZXQ6IDB4MCkgUFdNQyBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19ESVZBICAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8ICAwKSAvLyAoUFdNQykgQ0xLQSBkaXZpZGUgZmFjdG9yLg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19QUkVBICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgIDgpIC8vIChQV01DKSBEaXZpZGVyIElucHV0IENsb2NrIFByZXNjYWxlciBBDQorI2RlZmluZSAJQVQ5MUNfUFdNQ19QUkVBX01DSyAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDgpIC8vIChQV01DKSANCisjZGVmaW5lIEFUOTFDX1BXTUNfRElWQiAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRiA8PCAxNikgLy8gKFBXTUMpIENMS0IgZGl2aWRlIGZhY3Rvci4NCisjZGVmaW5lIEFUOTFDX1BXTUNfUFJFQiAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8IDI0KSAvLyAoUFdNQykgRGl2aWRlciBJbnB1dCBDbG9jayBQcmVzY2FsZXIgQg0KKyNkZWZpbmUgCUFUOTFDX1BXTUNfUFJFQl9NQ0sgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDI0KSAvLyAoUFdNQykgDQorLy8gLS0tLS0tLS0gUFdNQ19FTkEgOiAoUFdNQyBPZmZzZXQ6IDB4NCkgUFdNQyBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QV01DX0NISUQwICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFBXTUMpIENoYW5uZWwgSUQgMA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSElEMSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChQV01DKSBDaGFubmVsIElEIDENCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0hJRDIgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoUFdNQykgQ2hhbm5lbCBJRCAyDQorI2RlZmluZSBBVDkxQ19QV01DX0NISUQzICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKFBXTUMpIENoYW5uZWwgSUQgMw0KKy8vIC0tLS0tLS0tIFBXTUNfRElTIDogKFBXTUMgT2Zmc2V0OiAweDgpIFBXTUMgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQV01DX1NSIDogKFBXTUMgT2Zmc2V0OiAweGMpIFBXTUMgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFBXTUNfSUVSIDogKFBXTUMgT2Zmc2V0OiAweDEwKSBQV01DIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUFdNQ19JRFIgOiAoUFdNQyBPZmZzZXQ6IDB4MTQpIFBXTUMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUFdNQ19JTVIgOiAoUFdNQyBPZmZzZXQ6IDB4MTgpIFBXTUMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUFdNQ19JU1IgOiAoUFdNQyBPZmZzZXQ6IDB4MWMpIFBXTUMgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFVTQiBEZXZpY2UgSW50ZXJmYWNlICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfVURQDQotew0KLSAgICBBVDkxX1JFRyBVRFBfTlVNOyAgICAgICAgLyogRnJhbWUgTnVtYmVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFVEUF9HTEJTVEFURTsgICAvKiBHbG9iYWwgU3RhdGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVURQX0ZBRERSOyAgICAgIC8qIEZ1bmN0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQwWyAxIF07IC8qICovDQotICAgIEFUOTFfUkVHIFVEUF9JRVI7ICAgICAgICAvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFVEUF9JRFI7ICAgICAgICAvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBVRFBfSU1SOyAgICAgICAgLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVURQX0lTUjsgICAgICAgIC8qIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVURQX0lDUjsgICAgICAgIC8qIEludGVycnVwdCBDbGVhciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDFbIDEgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgVURQX1JTVEVQOyAgICAgIC8qIFJlc2V0IEVuZHBvaW50IFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMlsgMSBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBVRFBfQ1NSWyA2IF07ICAgLyogRW5kcG9pbnQgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkM1sgMiBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBVRFBfRkRSWyA2IF07ICAgLyogRW5kcG9pbnQgRklGTyBEYXRhIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkNFsgMyBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBVRFBfVFhWQzsgICAgICAgLyogVHJhbnNjZWl2ZXIgQ29udHJvbCBSZWdpc3RlciAqLw0KLX0gQVQ5MVNfVURQLCAqIEFUOTFQU19VRFA7DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBVU0IgRGV2aWNlIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1VEUCB7DQorCUFUOTFfUkVHCSBVRFBfTlVNOyAJLy8gRnJhbWUgTnVtYmVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVRFBfR0xCU1RBVEU7IAkvLyBHbG9iYWwgU3RhdGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVEUF9GQUREUjsgCS8vIEZ1bmN0aW9uIEFkZHJlc3MgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgVURQX0lFUjsgCS8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVEUF9JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVURQX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVRFBfSVNSOyAJLy8gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVURQX0lDUjsgCS8vIEludGVycnVwdCBDbGVhciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBVRFBfUlNURVA7IAkvLyBSZXNldCBFbmRwb2ludCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQyWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBVRFBfQ1NSWzZdOyAJLy8gRW5kcG9pbnQgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDNbMl07IAkvLyANCisJQVQ5MV9SRUcJIFVEUF9GRFJbNl07IAkvLyBFbmRwb2ludCBGSUZPIERhdGEgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkNFszXTsgCS8vIA0KKwlBVDkxX1JFRwkgVURQX1RYVkM7IAkvLyBUcmFuc2NlaXZlciBDb250cm9sIFJlZ2lzdGVyDQorfSBBVDkxU19VRFAsICpBVDkxUFNfVURQOw0KIA0KLS8qIC0tLS0tLS0tIFVEUF9GUk1fTlVNIDogKFVEUCBPZmZzZXQ6IDB4MCkgVVNCIEZyYW1lIE51bWJlciBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0ZSTV9OVU0gICAgKCAoIHVuc2lnbmVkIGludCApIDB4N0ZGIDw8IDAgKSAvKiAoVURQKSBGcmFtZSBOdW1iZXIgYXMgRGVmaW5lZCBpbiB0aGUgUGFja2V0IEZpZWxkIEZvcm1hdHMgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9GUk1fRVJSICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTYgKSAgLyogKFVEUCkgRnJhbWUgRXJyb3IgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9GUk1fT0sgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTcgKSAgLyogKFVEUCkgRnJhbWUgT0sgKi8NCi0vKiAtLS0tLS0tLSBVRFBfR0xCX1NUQVRFIDogKFVEUCBPZmZzZXQ6IDB4NCkgVVNCIEdsb2JhbCBTdGF0ZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0ZBRERFTiAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgICAvKiAoVURQKSBGdW5jdGlvbiBBZGRyZXNzIEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0NPTkZHICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgICAvKiAoVURQKSBDb25maWd1cmVkICovDQotI2RlZmluZSBBVDkxQ19VRFBfRVNSICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAgIC8qIChVRFApIEVuYWJsZSBTZW5kIFJlc3VtZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX1JTTUlOUFIgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzICkgICAvKiAoVURQKSBBIFJlc3VtZSBIYXMgQmVlbiBTZW50IHRvIHRoZSBIb3N0ICovDQotI2RlZmluZSBBVDkxQ19VRFBfUk1XVVBFICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDQgKSAgIC8qIChVRFApIFJlbW90ZSBXYWtlIFVwIEVuYWJsZSAqLw0KLS8qIC0tLS0tLS0tIFVEUF9GQUREUiA6IChVRFAgT2Zmc2V0OiAweDgpIFVTQiBGdW5jdGlvbiBBZGRyZXNzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19VRFBfRkFERCAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRiA8PCAwICkgIC8qIChVRFApIEZ1bmN0aW9uIEFkZHJlc3MgVmFsdWUgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9GRU4gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOCApICAgLyogKFVEUCkgRnVuY3Rpb24gRW5hYmxlICovDQotLyogLS0tLS0tLS0gVURQX0lFUiA6IChVRFAgT2Zmc2V0OiAweDEwKSBVU0IgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UMCAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgICAvKiAoVURQKSBFbmRwb2ludCAwIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UMSAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgICAvKiAoVURQKSBFbmRwb2ludCAwIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UMiAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyICkgICAvKiAoVURQKSBFbmRwb2ludCAyIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UMyAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzICkgICAvKiAoVURQKSBFbmRwb2ludCAzIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UNCAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA0ICkgICAvKiAoVURQKSBFbmRwb2ludCA0IEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UNSAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA1ICkgICAvKiAoVURQKSBFbmRwb2ludCA1IEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX1JYU1VTUCAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgICAvKiAoVURQKSBVU0IgU3VzcGVuZCBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9SWFJTTSAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOSApICAgLyogKFVEUCkgVVNCIFJlc3VtZSBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FWFRSU00gICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTAgKSAgLyogKFVEUCkgVVNCIEV4dGVybmFsIFJlc3VtZSBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9TT0ZJTlQgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTEgKSAgLyogKFVEUCkgVVNCIFN0YXJ0IE9mIGZyYW1lIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX1dBS0VVUCAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMyApICAvKiAoVURQKSBVU0IgUmVzdW1lIEludGVycnVwdCAqLw0KLS8qIC0tLS0tLS0tIFVEUF9JRFIgOiAoVURQIE9mZnNldDogMHgxNCkgVVNCIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gVURQX0lNUiA6IChVRFAgT2Zmc2V0OiAweDE4KSBVU0IgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBVRFBfSVNSIDogKFVEUCBPZmZzZXQ6IDB4MWMpIFVTQiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19VRFBfRU5EQlVTUkVTICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEyICkgLyogKFVEUCkgVVNCIEVuZCBPZiBCdXMgUmVzZXQgSW50ZXJydXB0ICovDQotLyogLS0tLS0tLS0gVURQX0lDUiA6IChVRFAgT2Zmc2V0OiAweDIwKSBVU0IgSW50ZXJydXB0IENsZWFyIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gVURQX1JTVF9FUCA6IChVRFAgT2Zmc2V0OiAweDI4KSBVU0IgUmVzZXQgRW5kcG9pbnQgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUDAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgIC8qIChVRFApIFJlc2V0IEVuZHBvaW50IDAgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUDEgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAgIC8qIChVRFApIFJlc2V0IEVuZHBvaW50IDEgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUDIgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMiApICAgIC8qIChVRFApIFJlc2V0IEVuZHBvaW50IDIgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUDMgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMyApICAgIC8qIChVRFApIFJlc2V0IEVuZHBvaW50IDMgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUDQgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNCApICAgIC8qIChVRFApIFJlc2V0IEVuZHBvaW50IDQgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUDUgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNSApICAgIC8qIChVRFApIFJlc2V0IEVuZHBvaW50IDUgKi8NCi0vKiAtLS0tLS0tLSBVRFBfQ1NSIDogKFVEUCBPZmZzZXQ6IDB4MzApIFVTQiBFbmRwb2ludCBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9UWENPTVAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgIC8qIChVRFApIEdlbmVyYXRlcyBhbiBJTiBwYWNrZXQgd2l0aCBkYXRhIHByZXZpb3VzbHkgd3JpdHRlbiBpbiB0aGUgRFBSICovDQotI2RlZmluZSBBVDkxQ19VRFBfUlhfREFUQV9CSzAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEgKSAgICAvKiAoVURQKSBSZWNlaXZlIERhdGEgQmFuayAwICovDQotI2RlZmluZSBBVDkxQ19VRFBfUlhTRVRVUCAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAgICAvKiAoVURQKSBTZW5kcyBTVEFMTCB0byB0aGUgSG9zdCAoQ29udHJvbCBlbmRwb2ludHMpICovDQotI2RlZmluZSBBVDkxQ19VRFBfSVNPRVJST1IgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDMgKSAgICAvKiAoVURQKSBJc29jaHJvbm91cyBlcnJvciAoSXNvY2hyb25vdXMgZW5kcG9pbnRzKSAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX1RYUEtUUkRZICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA0ICkgICAgLyogKFVEUCkgVHJhbnNtaXQgUGFja2V0IFJlYWR5ICovDQotI2RlZmluZSBBVDkxQ19VRFBfRk9SQ0VTVEFMTCAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDUgKSAgICAvKiAoVURQKSBGb3JjZSBTdGFsbCAodXNlZCBieSBDb250cm9sLCBCdWxrIGFuZCBJc29jaHJvbm91cyBlbmRwb2ludHMpLiAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX1JYX0RBVEFfQksxICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA2ICkgICAgLyogKFVEUCkgUmVjZWl2ZSBEYXRhIEJhbmsgMSAob25seSB1c2VkIGJ5IGVuZHBvaW50cyB3aXRoIHBpbmctcG9uZyBhdHRyaWJ1dGVzKS4gKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9ESVIgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNyApICAgIC8qIChVRFApIFRyYW5zZmVyIERpcmVjdGlvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0VQVFlQRSAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NyA8PCA4ICkgICAgLyogKFVEUCkgRW5kcG9pbnQgdHlwZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VEUF9FUFRZUEVfQ1RSTCAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCA4ICkgICAgLyogKFVEUCkgQ29udHJvbCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VEUF9FUFRZUEVfSVNPX09VVCAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgICAgLyogKFVEUCkgSXNvY2hyb25vdXMgT1VUICovDQotI2RlZmluZSAgICAgQVQ5MUNfVURQX0VQVFlQRV9CVUxLX09VVCAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDggKSAgICAvKiAoVURQKSBCdWxrIE9VVCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VEUF9FUFRZUEVfSU5UX09VVCAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCA4ICkgICAgLyogKFVEUCkgSW50ZXJydXB0IE9VVCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VEUF9FUFRZUEVfSVNPX0lOICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NSA8PCA4ICkgICAgLyogKFVEUCkgSXNvY2hyb25vdXMgSU4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VRFBfRVBUWVBFX0JVTEtfSU4gICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDYgPDwgOCApICAgIC8qIChVRFApIEJ1bGsgSU4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VRFBfRVBUWVBFX0lOVF9JTiAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDcgPDwgOCApICAgIC8qIChVRFApIEludGVycnVwdCBJTiAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0RUR0xFICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMSApICAgLyogKFVEUCkgRGF0YSBUb2dnbGUgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUEVEUyAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTUgKSAgIC8qIChVRFApIEVuZHBvaW50IEVuYWJsZSBEaXNhYmxlICovDQotI2RlZmluZSBBVDkxQ19VRFBfUlhCWVRFQ05UICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg3RkYgPDwgMTYgKSAvKiAoVURQKSBOdW1iZXIgT2YgQnl0ZXMgQXZhaWxhYmxlIGluIHRoZSBGSUZPICovDQotLyogLS0tLS0tLS0gVURQX1RYVkMgOiAoVURQIE9mZnNldDogMHg3NCkgVHJhbnNjZWl2ZXIgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX1RYVkRJUyAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgICAgLyogKFVEUCkgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9QVU9OICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOSApICAgIC8qIChVRFApIFB1bGwtdXAgT04gKi8NCisvLyAtLS0tLS0tLSBVRFBfRlJNX05VTSA6IChVRFAgT2Zmc2V0OiAweDApIFVTQiBGcmFtZSBOdW1iZXIgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VRFBfRlJNX05VTSAgICAgKCh1bnNpZ25lZCBpbnQpIDB4N0ZGIDw8ICAwKSAvLyAoVURQKSBGcmFtZSBOdW1iZXIgYXMgRGVmaW5lZCBpbiB0aGUgUGFja2V0IEZpZWxkIEZvcm1hdHMNCisjZGVmaW5lIEFUOTFDX1VEUF9GUk1fRVJSICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoVURQKSBGcmFtZSBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZSTV9PSyAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTcpIC8vIChVRFApIEZyYW1lIE9LDQorLy8gLS0tLS0tLS0gVURQX0dMQl9TVEFURSA6IChVRFAgT2Zmc2V0OiAweDQpIFVTQiBHbG9iYWwgU3RhdGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VRFBfRkFEREVOICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFVEUCkgRnVuY3Rpb24gQWRkcmVzcyBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1VEUF9DT05GRyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoVURQKSBDb25maWd1cmVkDQorI2RlZmluZSBBVDkxQ19VRFBfRVNSICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFVEUCkgRW5hYmxlIFNlbmQgUmVzdW1lDQorI2RlZmluZSBBVDkxQ19VRFBfUlNNSU5QUiAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKFVEUCkgQSBSZXN1bWUgSGFzIEJlZW4gU2VudCB0byB0aGUgSG9zdA0KKyNkZWZpbmUgQVQ5MUNfVURQX1JNV1VQRSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChVRFApIFJlbW90ZSBXYWtlIFVwIEVuYWJsZQ0KKy8vIC0tLS0tLS0tIFVEUF9GQUREUiA6IChVRFAgT2Zmc2V0OiAweDgpIFVTQiBGdW5jdGlvbiBBZGRyZXNzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZBREQgICAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8ICAwKSAvLyAoVURQKSBGdW5jdGlvbiBBZGRyZXNzIFZhbHVlDQorI2RlZmluZSBBVDkxQ19VRFBfRkVOICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFVEUCkgRnVuY3Rpb24gRW5hYmxlDQorLy8gLS0tLS0tLS0gVURQX0lFUiA6IChVRFAgT2Zmc2V0OiAweDEwKSBVU0IgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VEUF9FUElOVDAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoVURQKSBFbmRwb2ludCAwIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UMSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChVRFApIEVuZHBvaW50IDAgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfRVBJTlQyICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFVEUCkgRW5kcG9pbnQgMiBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9FUElOVDMgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoVURQKSBFbmRwb2ludCAzIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UNCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChVRFApIEVuZHBvaW50IDQgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfRVBJTlQ1ICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKFVEUCkgRW5kcG9pbnQgNSBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9SWFNVU1AgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoVURQKSBVU0IgU3VzcGVuZCBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9SWFJTTSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvLyAoVURQKSBVU0IgUmVzdW1lIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VYVFJTTSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChVRFApIFVTQiBFeHRlcm5hbCBSZXN1bWUgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfU09GSU5UICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMSkgLy8gKFVEUCkgVVNCIFN0YXJ0IE9mIGZyYW1lIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX1dBS0VVUCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTMpIC8vIChVRFApIFVTQiBSZXN1bWUgSW50ZXJydXB0DQorLy8gLS0tLS0tLS0gVURQX0lEUiA6IChVRFAgT2Zmc2V0OiAweDE0KSBVU0IgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVURQX0lNUiA6IChVRFAgT2Zmc2V0OiAweDE4KSBVU0IgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVURQX0lTUiA6IChVRFAgT2Zmc2V0OiAweDFjKSBVU0IgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VEUF9FTkRCVVNSRVMgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvLyAoVURQKSBVU0IgRW5kIE9mIEJ1cyBSZXNldCBJbnRlcnJ1cHQNCisvLyAtLS0tLS0tLSBVRFBfSUNSIDogKFVEUCBPZmZzZXQ6IDB4MjApIFVTQiBJbnRlcnJ1cHQgQ2xlYXIgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVURQX1JTVF9FUCA6IChVRFAgT2Zmc2V0OiAweDI4KSBVU0IgUmVzZXQgRW5kcG9pbnQgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VRFBfRVAwICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFVEUCkgUmVzZXQgRW5kcG9pbnQgMA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQMSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChVRFApIFJlc2V0IEVuZHBvaW50IDENCisjZGVmaW5lIEFUOTFDX1VEUF9FUDIgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoVURQKSBSZXNldCBFbmRwb2ludCAyDQorI2RlZmluZSBBVDkxQ19VRFBfRVAzICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKFVEUCkgUmVzZXQgRW5kcG9pbnQgMw0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQNCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChVRFApIFJlc2V0IEVuZHBvaW50IDQNCisjZGVmaW5lIEFUOTFDX1VEUF9FUDUgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoVURQKSBSZXNldCBFbmRwb2ludCA1DQorLy8gLS0tLS0tLS0gVURQX0NTUiA6IChVRFAgT2Zmc2V0OiAweDMwKSBVU0IgRW5kcG9pbnQgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVURQX1RYQ09NUCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChVRFApIEdlbmVyYXRlcyBhbiBJTiBwYWNrZXQgd2l0aCBkYXRhIHByZXZpb3VzbHkgd3JpdHRlbiBpbiB0aGUgRFBSDQorI2RlZmluZSBBVDkxQ19VRFBfUlhfREFUQV9CSzAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFVEUCkgUmVjZWl2ZSBEYXRhIEJhbmsgMA0KKyNkZWZpbmUgQVQ5MUNfVURQX1JYU0VUVVAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChVRFApIFNlbmRzIFNUQUxMIHRvIHRoZSBIb3N0IChDb250cm9sIGVuZHBvaW50cykNCisjZGVmaW5lIEFUOTFDX1VEUF9JU09FUlJPUiAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoVURQKSBJc29jaHJvbm91cyBlcnJvciAoSXNvY2hyb25vdXMgZW5kcG9pbnRzKQ0KKyNkZWZpbmUgQVQ5MUNfVURQX1RYUEtUUkRZICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChVRFApIFRyYW5zbWl0IFBhY2tldCBSZWFkeQ0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZPUkNFU1RBTEwgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChVRFApIEZvcmNlIFN0YWxsICh1c2VkIGJ5IENvbnRyb2wsIEJ1bGsgYW5kIElzb2Nocm9ub3VzIGVuZHBvaW50cykuDQorI2RlZmluZSBBVDkxQ19VRFBfUlhfREFUQV9CSzEgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLy8gKFVEUCkgUmVjZWl2ZSBEYXRhIEJhbmsgMSAob25seSB1c2VkIGJ5IGVuZHBvaW50cyB3aXRoIHBpbmctcG9uZyBhdHRyaWJ1dGVzKS4NCisjZGVmaW5lIEFUOTFDX1VEUF9ESVIgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoVURQKSBUcmFuc2ZlciBEaXJlY3Rpb24NCisjZGVmaW5lIEFUOTFDX1VEUF9FUFRZUEUgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8ICA4KSAvLyAoVURQKSBFbmRwb2ludCB0eXBlDQorI2RlZmluZSAJQVQ5MUNfVURQX0VQVFlQRV9DVFJMICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA4KSAvLyAoVURQKSBDb250cm9sDQorI2RlZmluZSAJQVQ5MUNfVURQX0VQVFlQRV9JU09fT1VUICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoVURQKSBJc29jaHJvbm91cyBPVVQNCisjZGVmaW5lIAlBVDkxQ19VRFBfRVBUWVBFX0JVTEtfT1VUICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDgpIC8vIChVRFApIEJ1bGsgT1VUDQorI2RlZmluZSAJQVQ5MUNfVURQX0VQVFlQRV9JTlRfT1VUICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA4KSAvLyAoVURQKSBJbnRlcnJ1cHQgT1VUDQorI2RlZmluZSAJQVQ5MUNfVURQX0VQVFlQRV9JU09fSU4gICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg1IDw8ICA4KSAvLyAoVURQKSBJc29jaHJvbm91cyBJTg0KKyNkZWZpbmUgCUFUOTFDX1VEUF9FUFRZUEVfQlVMS19JTiAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NiA8PCAgOCkgLy8gKFVEUCkgQnVsayBJTg0KKyNkZWZpbmUgCUFUOTFDX1VEUF9FUFRZUEVfSU5UX0lOICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAgOCkgLy8gKFVEUCkgSW50ZXJydXB0IElODQorI2RlZmluZSBBVDkxQ19VRFBfRFRHTEUgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMSkgLy8gKFVEUCkgRGF0YSBUb2dnbGUNCisjZGVmaW5lIEFUOTFDX1VEUF9FUEVEUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE1KSAvLyAoVURQKSBFbmRwb2ludCBFbmFibGUgRGlzYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVURQX1JYQllURUNOVCAgICgodW5zaWduZWQgaW50KSAweDdGRiA8PCAxNikgLy8gKFVEUCkgTnVtYmVyIE9mIEJ5dGVzIEF2YWlsYWJsZSBpbiB0aGUgRklGTw0KKy8vIC0tLS0tLS0tIFVEUF9UWFZDIDogKFVEUCBPZmZzZXQ6IDB4NzQpIFRyYW5zY2VpdmVyIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VRFBfVFhWRElTICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFVEUCkgDQorI2RlZmluZSBBVDkxQ19VRFBfUFVPTiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLy8gKFVEUCkgUHVsbC11cCBPTg0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVGltZXIgQ291bnRlciBDaGFubmVsIEludGVyZmFjZSAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotdHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1RDDQotew0KLSAgICBBVDkxX1JFRyBUQ19DQ1I7ICAgICAgICAgLyogQ2hhbm5lbCBDb250cm9sIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFRDX0NNUjsgICAgICAgICAvKiBDaGFubmVsIE1vZGUgUmVnaXN0ZXIgKENhcHR1cmUgTW9kZSAvIFdhdmVmb3JtIE1vZGUpICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMFsgMiBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBUQ19DVjsgICAgICAgICAgLyogQ291bnRlciBWYWx1ZSAqLw0KLSAgICBBVDkxX1JFRyBUQ19SQTsgICAgICAgICAgLyogUmVnaXN0ZXIgQSAqLw0KLSAgICBBVDkxX1JFRyBUQ19SQjsgICAgICAgICAgLyogUmVnaXN0ZXIgQiAqLw0KLSAgICBBVDkxX1JFRyBUQ19SQzsgICAgICAgICAgLyogUmVnaXN0ZXIgQyAqLw0KLSAgICBBVDkxX1JFRyBUQ19TUjsgICAgICAgICAgLyogU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFRDX0lFUjsgICAgICAgICAvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFRDX0lEUjsgICAgICAgICAvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBUQ19JTVI7ICAgICAgICAgLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi19IEFUOTFTX1RDLCAqIEFUOTFQU19UQzsNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFRpbWVyIENvdW50ZXIgQ2hhbm5lbCBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19UQyB7DQorCUFUOTFfUkVHCSBUQ19DQ1I7IAkvLyBDaGFubmVsIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRDX0NNUjsgCS8vIENoYW5uZWwgTW9kZSBSZWdpc3RlciAoQ2FwdHVyZSBNb2RlIC8gV2F2ZWZvcm0gTW9kZSkNCisJQVQ5MV9SRUcJIFJlc2VydmVkMFsyXTsgCS8vIA0KKwlBVDkxX1JFRwkgVENfQ1Y7IAkvLyBDb3VudGVyIFZhbHVlDQorCUFUOTFfUkVHCSBUQ19SQTsgCS8vIFJlZ2lzdGVyIEENCisJQVQ5MV9SRUcJIFRDX1JCOyAJLy8gUmVnaXN0ZXIgQg0KKwlBVDkxX1JFRwkgVENfUkM7IAkvLyBSZWdpc3RlciBDDQorCUFUOTFfUkVHCSBUQ19TUjsgCS8vIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVENfSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVENfSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRDX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorfSBBVDkxU19UQywgKkFUOTFQU19UQzsNCiANCi0vKiAtLS0tLS0tLSBUQ19DQ1IgOiAoVEMgT2Zmc2V0OiAweDApIFRDIENoYW5uZWwgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQ0xLRU4gICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgLyogKFRDKSBDb3VudGVyIENsb2NrIEVuYWJsZSBDb21tYW5kICovDQotI2RlZmluZSBBVDkxQ19UQ19DTEtESVMgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAvKiAoVEMpIENvdW50ZXIgQ2xvY2sgRGlzYWJsZSBDb21tYW5kICovDQotI2RlZmluZSBBVDkxQ19UQ19TV1RSRyAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMiApICAvKiAoVEMpIFNvZnR3YXJlIFRyaWdnZXIgQ29tbWFuZCAqLw0KLS8qIC0tLS0tLS0tIFRDX0NNUiA6IChUQyBPZmZzZXQ6IDB4NCkgVEMgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyOiBDYXB0dXJlIE1vZGUgLyBXYXZlZm9ybSBNb2RlIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19UQ19DTEtTICAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDcgPDwgMCApICAvKiAoVEMpIENsb2NrIFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0NMS1NfVElNRVJfRElWMV9DTE9DSyAgICAoICggdW5zaWduZWQgaW50ICkgMHgwICkgICAgICAgLyogKFRDKSBDbG9jayBzZWxlY3RlZDogVElNRVJfRElWMV9DTE9DSyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0NMS1NfVElNRVJfRElWMl9DTE9DSyAgICAoICggdW5zaWduZWQgaW50ICkgMHgxICkgICAgICAgLyogKFRDKSBDbG9jayBzZWxlY3RlZDogVElNRVJfRElWMl9DTE9DSyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0NMS1NfVElNRVJfRElWM19DTE9DSyAgICAoICggdW5zaWduZWQgaW50ICkgMHgyICkgICAgICAgLyogKFRDKSBDbG9jayBzZWxlY3RlZDogVElNRVJfRElWM19DTE9DSyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0NMS1NfVElNRVJfRElWNF9DTE9DSyAgICAoICggdW5zaWduZWQgaW50ICkgMHgzICkgICAgICAgLyogKFRDKSBDbG9jayBzZWxlY3RlZDogVElNRVJfRElWNF9DTE9DSyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0NMS1NfVElNRVJfRElWNV9DTE9DSyAgICAoICggdW5zaWduZWQgaW50ICkgMHg0ICkgICAgICAgLyogKFRDKSBDbG9jayBzZWxlY3RlZDogVElNRVJfRElWNV9DTE9DSyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0NMS1NfWEMwICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg1ICkgICAgICAgLyogKFRDKSBDbG9jayBzZWxlY3RlZDogWEMwICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQ0xLU19YQzEgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDYgKSAgICAgICAvKiAoVEMpIENsb2NrIHNlbGVjdGVkOiBYQzEgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19DTEtTX1hDMiAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NyApICAgICAgIC8qIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFhDMiAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQ0xLSSAgICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDMgKSAgLyogKFRDKSBDbG9jayBJbnZlcnQgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0JVUlNUICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCA0ICkgIC8qIChUQykgQnVyc3QgU2lnbmFsIFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JVUlNUX05PTkUgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDQgKSAgLyogKFRDKSBUaGUgY2xvY2sgaXMgbm90IGdhdGVkIGJ5IGFuIGV4dGVybmFsIHNpZ25hbCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JVUlNUX1hDMCAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDQgKSAgLyogKFRDKSBYQzAgaXMgQU5EZWQgd2l0aCB0aGUgc2VsZWN0ZWQgY2xvY2sgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19CVVJTVF9YQzEgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCA0ICkgIC8qIChUQykgWEMxIGlzIEFORGVkIHdpdGggdGhlIHNlbGVjdGVkIGNsb2NrICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQlVSU1RfWEMyICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgNCApICAvKiAoVEMpIFhDMiBpcyBBTkRlZCB3aXRoIHRoZSBzZWxlY3RlZCBjbG9jayAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQ1BDU1RPUCAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDYgKSAgLyogKFRDKSBDb3VudGVyIENsb2NrIFN0b3BwZWQgd2l0aCBSQyBDb21wYXJlICovDQotI2RlZmluZSBBVDkxQ19UQ19MREJTVE9QICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNiApICAvKiAoVEMpIENvdW50ZXIgQ2xvY2sgU3RvcHBlZCB3aXRoIFJCIExvYWRpbmcgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0NQQ0RJUyAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA3ICkgIC8qIChUQykgQ291bnRlciBDbG9jayBEaXNhYmxlIHdpdGggUkMgQ29tcGFyZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfTERCRElTICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDcgKSAgLyogKFRDKSBDb3VudGVyIENsb2NrIERpc2FibGVkIHdpdGggUkIgTG9hZGluZyAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfRVRSR0VERyAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDggKSAgLyogKFRDKSBFeHRlcm5hbCBUcmlnZ2VyIEVkZ2UgU2VsZWN0aW9uICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfRVRSR0VER19OT05FICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgOCApICAvKiAoVEMpIEVkZ2U6IE5vbmUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19FVFJHRURHX1JJU0lORyAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgIC8qIChUQykgRWRnZTogcmlzaW5nIGVkZ2UgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19FVFJHRURHX0ZBTExJTkcgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCA4ICkgIC8qIChUQykgRWRnZTogZmFsbGluZyBlZGdlICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfRVRSR0VER19CT1RIICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgOCApICAvKiAoVEMpIEVkZ2U6IGVhY2ggZWRnZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfRUVWVEVERyAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDggKSAgLyogKFRDKSBFeHRlcm5hbCBFdmVudCBFZGdlIFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0VFVlRFREdfTk9ORSAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDggKSAgLyogKFRDKSBFZGdlOiBOb25lICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfRUVWVEVER19SSVNJTkcgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOCApICAvKiAoVEMpIEVkZ2U6IHJpc2luZyBlZGdlICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfRUVWVEVER19GQUxMSU5HICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgOCApICAvKiAoVEMpIEVkZ2U6IGZhbGxpbmcgZWRnZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0VFVlRFREdfQk9USCAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDggKSAgLyogKFRDKSBFZGdlOiBlYWNoIGVkZ2UgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0VFVlQgICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAxMCApIC8qIChUQykgRXh0ZXJuYWwgRXZlbnQgIFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0VFVlRfVElPQiAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDEwICkgLyogKFRDKSBTaWduYWwgc2VsZWN0ZWQgYXMgZXh0ZXJuYWwgZXZlbnQ6IFRJT0IgVElPQiBkaXJlY3Rpb246IGlucHV0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfRUVWVF9YQzAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTAgKSAvKiAoVEMpIFNpZ25hbCBzZWxlY3RlZCBhcyBleHRlcm5hbCBldmVudDogWEMwIFRJT0IgZGlyZWN0aW9uOiBvdXRwdXQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19FRVZUX1hDMSAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCAxMCApIC8qIChUQykgU2lnbmFsIHNlbGVjdGVkIGFzIGV4dGVybmFsIGV2ZW50OiBYQzEgVElPQiBkaXJlY3Rpb246IG91dHB1dCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0VFVlRfWEMyICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDEwICkgLyogKFRDKSBTaWduYWwgc2VsZWN0ZWQgYXMgZXh0ZXJuYWwgZXZlbnQ6IFhDMiBUSU9CIGRpcmVjdGlvbjogb3V0cHV0ICovDQotI2RlZmluZSBBVDkxQ19UQ19BQkVUUkcgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTAgKSAvKiAoVEMpIFRJT0Egb3IgVElPQiBFeHRlcm5hbCBUcmlnZ2VyIFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfRU5FVFJHICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEyICkgLyogKFRDKSBFeHRlcm5hbCBFdmVudCBUcmlnZ2VyIGVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfV0FWRVNFTCAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDEzICkgLyogKFRDKSBXYXZlZm9ybSAgU2VsZWN0aW9uICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfV0FWRVNFTF9VUCAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMTMgKSAvKiAoVEMpIFVQIG1vZGUgd2l0aG91dCBhdG9tYXRpYyB0cmlnZ2VyIG9uIFJDIENvbXBhcmUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19XQVZFU0VMX1VQRE9XTiAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMyApIC8qIChUQykgVVBET1dOIG1vZGUgd2l0aG91dCBhdXRvbWF0aWMgdHJpZ2dlciBvbiBSQyBDb21wYXJlICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfV0FWRVNFTF9VUF9BVVRPICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgMTMgKSAvKiAoVEMpIFVQIG1vZGUgd2l0aCBhdXRvbWF0aWMgdHJpZ2dlciBvbiBSQyBDb21wYXJlICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfV0FWRVNFTF9VUERPV05fQVVUTyAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTMgKSAvKiAoVEMpIFVQRE9XTiBtb2RlIHdpdGggYXV0b21hdGljIHRyaWdnZXIgb24gUkMgQ29tcGFyZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQ1BDVFJHICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE0ICkgLyogKFRDKSBSQyBDb21wYXJlIFRyaWdnZXIgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19UQ19XQVZFICAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTUgKSAvKiAoVEMpICovDQotI2RlZmluZSBBVDkxQ19UQ19BQ1BBICAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTYgKSAvKiAoVEMpIFJBIENvbXBhcmUgRWZmZWN0IG9uIFRJT0EgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19BQ1BBX05PTkUgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAxNiApIC8qIChUQykgRWZmZWN0OiBub25lICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQUNQQV9TRVQgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTYgKSAvKiAoVEMpIEVmZmVjdDogc2V0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQUNQQV9DTEVBUiAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgMTYgKSAvKiAoVEMpIEVmZmVjdDogY2xlYXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19BQ1BBX1RPR0dMRSAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAxNiApIC8qIChUQykgRWZmZWN0OiB0b2dnbGUgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0xEUkEgICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAxNiApIC8qIChUQykgUkEgTG9hZGluZyBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19MRFJBX05PTkUgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAxNiApIC8qIChUQykgRWRnZTogTm9uZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0xEUkFfUklTSU5HICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE2ICkgLyogKFRDKSBFZGdlOiByaXNpbmcgZWRnZSBvZiBUSU9BICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfTERSQV9GQUxMSU5HICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgMTYgKSAvKiAoVEMpIEVkZ2U6IGZhbGxpbmcgZWRnZSBvZiBUSU9BICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfTERSQV9CT1RIICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTYgKSAvKiAoVEMpIEVkZ2U6IGVhY2ggZWRnZSBvZiBUSU9BICovDQotI2RlZmluZSBBVDkxQ19UQ19BQ1BDICAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTggKSAvKiAoVEMpIFJDIENvbXBhcmUgRWZmZWN0IG9uIFRJT0EgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19BQ1BDX05PTkUgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAxOCApIC8qIChUQykgRWZmZWN0OiBub25lICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQUNQQ19TRVQgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTggKSAvKiAoVEMpIEVmZmVjdDogc2V0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQUNQQ19DTEVBUiAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgMTggKSAvKiAoVEMpIEVmZmVjdDogY2xlYXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19BQ1BDX1RPR0dMRSAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAxOCApIC8qIChUQykgRWZmZWN0OiB0b2dnbGUgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0xEUkIgICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAxOCApIC8qIChUQykgUkIgTG9hZGluZyBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19MRFJCX05PTkUgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAxOCApIC8qIChUQykgRWRnZTogTm9uZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0xEUkJfUklTSU5HICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE4ICkgLyogKFRDKSBFZGdlOiByaXNpbmcgZWRnZSBvZiBUSU9BICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfTERSQl9GQUxMSU5HICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgMTggKSAvKiAoVEMpIEVkZ2U6IGZhbGxpbmcgZWRnZSBvZiBUSU9BICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfTERSQl9CT1RIICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTggKSAvKiAoVEMpIEVkZ2U6IGVhY2ggZWRnZSBvZiBUSU9BICovDQotI2RlZmluZSBBVDkxQ19UQ19BRUVWVCAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMjAgKSAvKiAoVEMpIEV4dGVybmFsIEV2ZW50IEVmZmVjdCBvbiBUSU9BICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQUVFVlRfTk9ORSAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMjAgKSAvKiAoVEMpIEVmZmVjdDogbm9uZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0FFRVZUX1NFVCAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIwICkgLyogKFRDKSBFZmZlY3Q6IHNldCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0FFRVZUX0NMRUFSICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDIwICkgLyogKFRDKSBFZmZlY3Q6IGNsZWFyICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQUVFVlRfVE9HR0xFICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMjAgKSAvKiAoVEMpIEVmZmVjdDogdG9nZ2xlICovDQotI2RlZmluZSBBVDkxQ19UQ19BU1dUUkcgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMjIgKSAvKiAoVEMpIFNvZnR3YXJlIFRyaWdnZXIgRWZmZWN0IG9uIFRJT0EgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19BU1dUUkdfTk9ORSAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAyMiApIC8qIChUQykgRWZmZWN0OiBub25lICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQVNXVFJHX1NFVCAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjIgKSAvKiAoVEMpIEVmZmVjdDogc2V0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQVNXVFJHX0NMRUFSICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgMjIgKSAvKiAoVEMpIEVmZmVjdDogY2xlYXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19BU1dUUkdfVE9HR0xFICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAyMiApIC8qIChUQykgRWZmZWN0OiB0b2dnbGUgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0JDUEIgICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAyNCApIC8qIChUQykgUkIgQ29tcGFyZSBFZmZlY3Qgb24gVElPQiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JDUEJfTk9ORSAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDI0ICkgLyogKFRDKSBFZmZlY3Q6IG5vbmUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19CQ1BCX1NFVCAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyNCApIC8qIChUQykgRWZmZWN0OiBzZXQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19CQ1BCX0NMRUFSICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCAyNCApIC8qIChUQykgRWZmZWN0OiBjbGVhciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JDUEJfVE9HR0xFICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDI0ICkgLyogKFRDKSBFZmZlY3Q6IHRvZ2dsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQkNQQyAgICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDI2ICkgLyogKFRDKSBSQyBDb21wYXJlIEVmZmVjdCBvbiBUSU9CICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQkNQQ19OT05FICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMjYgKSAvKiAoVEMpIEVmZmVjdDogbm9uZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JDUENfU0VUICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDI2ICkgLyogKFRDKSBFZmZlY3Q6IHNldCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JDUENfQ0xFQVIgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDI2ICkgLyogKFRDKSBFZmZlY3Q6IGNsZWFyICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQkNQQ19UT0dHTEUgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMjYgKSAvKiAoVEMpIEVmZmVjdDogdG9nZ2xlICovDQotI2RlZmluZSBBVDkxQ19UQ19CRUVWVCAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMjggKSAvKiAoVEMpIEV4dGVybmFsIEV2ZW50IEVmZmVjdCBvbiBUSU9CICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQkVFVlRfTk9ORSAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMjggKSAvKiAoVEMpIEVmZmVjdDogbm9uZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JFRVZUX1NFVCAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDI4ICkgLyogKFRDKSBFZmZlY3Q6IHNldCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JFRVZUX0NMRUFSICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDI4ICkgLyogKFRDKSBFZmZlY3Q6IGNsZWFyICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQkVFVlRfVE9HR0xFICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMjggKSAvKiAoVEMpIEVmZmVjdDogdG9nZ2xlICovDQotI2RlZmluZSBBVDkxQ19UQ19CU1dUUkcgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMzAgKSAvKiAoVEMpIFNvZnR3YXJlIFRyaWdnZXIgRWZmZWN0IG9uIFRJT0IgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19CU1dUUkdfTk9ORSAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAzMCApIC8qIChUQykgRWZmZWN0OiBub25lICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQlNXVFJHX1NFVCAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMzAgKSAvKiAoVEMpIEVmZmVjdDogc2V0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQlNXVFJHX0NMRUFSICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgMzAgKSAvKiAoVEMpIEVmZmVjdDogY2xlYXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19CU1dUUkdfVE9HR0xFICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAzMCApIC8qIChUQykgRWZmZWN0OiB0b2dnbGUgKi8NCi0vKiAtLS0tLS0tLSBUQ19TUiA6IChUQyBPZmZzZXQ6IDB4MjApIFRDIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19UQ19DT1ZGUyAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAvKiAoVEMpIENvdW50ZXIgT3ZlcmZsb3cgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0xPVlJTICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgIC8qIChUQykgTG9hZCBPdmVycnVuICovDQotI2RlZmluZSBBVDkxQ19UQ19DUEFTICAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMiApICAvKiAoVEMpIFJBIENvbXBhcmUgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0NQQlMgICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzICkgIC8qIChUQykgUkIgQ29tcGFyZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQ1BDUyAgICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDQgKSAgLyogKFRDKSBSQyBDb21wYXJlICovDQotI2RlZmluZSBBVDkxQ19UQ19MRFJBUyAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNSApICAvKiAoVEMpIFJBIExvYWRpbmcgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0xEUkJTICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA2ICkgIC8qIChUQykgUkIgTG9hZGluZyAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfRVRSR1MgICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDcgKSAgLyogKFRDKSBFeHRlcm5hbCBUcmlnZ2VyICovDQotI2RlZmluZSBBVDkxQ19UQ19DTEtTVEEgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTYgKSAvKiAoVEMpIENsb2NrIEVuYWJsaW5nICovDQotI2RlZmluZSBBVDkxQ19UQ19NVElPQSAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTcgKSAvKiAoVEMpIFRJT0EgTWlycm9yICovDQotI2RlZmluZSBBVDkxQ19UQ19NVElPQiAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTggKSAvKiAoVEMpIFRJT0EgTWlycm9yICovDQotLyogLS0tLS0tLS0gVENfSUVSIDogKFRDIE9mZnNldDogMHgyNCkgVEMgQ2hhbm5lbCBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gVENfSURSIDogKFRDIE9mZnNldDogMHgyOCkgVEMgQ2hhbm5lbCBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFRDX0lNUiA6IChUQyBPZmZzZXQ6IDB4MmMpIFRDIENoYW5uZWwgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCisvLyAtLS0tLS0tLSBUQ19DQ1IgOiAoVEMgT2Zmc2V0OiAweDApIFRDIENoYW5uZWwgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RDX0NMS0VOICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoVEMpIENvdW50ZXIgQ2xvY2sgRW5hYmxlIENvbW1hbmQNCisjZGVmaW5lIEFUOTFDX1RDX0NMS0RJUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoVEMpIENvdW50ZXIgQ2xvY2sgRGlzYWJsZSBDb21tYW5kDQorI2RlZmluZSBBVDkxQ19UQ19TV1RSRyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFRDKSBTb2Z0d2FyZSBUcmlnZ2VyIENvbW1hbmQNCisvLyAtLS0tLS0tLSBUQ19DTVIgOiAoVEMgT2Zmc2V0OiAweDQpIFRDIENoYW5uZWwgTW9kZSBSZWdpc3RlcjogQ2FwdHVyZSBNb2RlIC8gV2F2ZWZvcm0gTW9kZSAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RDX0NMS1MgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8ICAwKSAvLyAoVEMpIENsb2NrIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDX0NMS1NfVElNRVJfRElWMV9DTE9DSyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCkgLy8gKFRDKSBDbG9jayBzZWxlY3RlZDogVElNRVJfRElWMV9DTE9DSw0KKyNkZWZpbmUgCUFUOTFDX1RDX0NMS1NfVElNRVJfRElWMl9DTE9DSyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSkgLy8gKFRDKSBDbG9jayBzZWxlY3RlZDogVElNRVJfRElWMl9DTE9DSw0KKyNkZWZpbmUgCUFUOTFDX1RDX0NMS1NfVElNRVJfRElWM19DTE9DSyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MikgLy8gKFRDKSBDbG9jayBzZWxlY3RlZDogVElNRVJfRElWM19DTE9DSw0KKyNkZWZpbmUgCUFUOTFDX1RDX0NMS1NfVElNRVJfRElWNF9DTE9DSyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MykgLy8gKFRDKSBDbG9jayBzZWxlY3RlZDogVElNRVJfRElWNF9DTE9DSw0KKyNkZWZpbmUgCUFUOTFDX1RDX0NMS1NfVElNRVJfRElWNV9DTE9DSyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NCkgLy8gKFRDKSBDbG9jayBzZWxlY3RlZDogVElNRVJfRElWNV9DTE9DSw0KKyNkZWZpbmUgCUFUOTFDX1RDX0NMS1NfWEMwICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NSkgLy8gKFRDKSBDbG9jayBzZWxlY3RlZDogWEMwDQorI2RlZmluZSAJQVQ5MUNfVENfQ0xLU19YQzEgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg2KSAvLyAoVEMpIENsb2NrIHNlbGVjdGVkOiBYQzENCisjZGVmaW5lIAlBVDkxQ19UQ19DTEtTX1hDMiAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDcpIC8vIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFhDMg0KKyNkZWZpbmUgQVQ5MUNfVENfQ0xLSSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChUQykgQ2xvY2sgSW52ZXJ0DQorI2RlZmluZSBBVDkxQ19UQ19CVVJTVCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgNCkgLy8gKFRDKSBCdXJzdCBTaWduYWwgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfVENfQlVSU1RfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgNCkgLy8gKFRDKSBUaGUgY2xvY2sgaXMgbm90IGdhdGVkIGJ5IGFuIGV4dGVybmFsIHNpZ25hbA0KKyNkZWZpbmUgCUFUOTFDX1RDX0JVUlNUX1hDMCAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChUQykgWEMwIGlzIEFORGVkIHdpdGggdGhlIHNlbGVjdGVkIGNsb2NrDQorI2RlZmluZSAJQVQ5MUNfVENfQlVSU1RfWEMxICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgNCkgLy8gKFRDKSBYQzEgaXMgQU5EZWQgd2l0aCB0aGUgc2VsZWN0ZWQgY2xvY2sNCisjZGVmaW5lIAlBVDkxQ19UQ19CVVJTVF9YQzIgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA0KSAvLyAoVEMpIFhDMiBpcyBBTkRlZCB3aXRoIHRoZSBzZWxlY3RlZCBjbG9jaw0KKyNkZWZpbmUgQVQ5MUNfVENfQ1BDU1RPUCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChUQykgQ291bnRlciBDbG9jayBTdG9wcGVkIHdpdGggUkMgQ29tcGFyZQ0KKyNkZWZpbmUgQVQ5MUNfVENfTERCU1RPUCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChUQykgQ291bnRlciBDbG9jayBTdG9wcGVkIHdpdGggUkIgTG9hZGluZw0KKyNkZWZpbmUgQVQ5MUNfVENfQ1BDRElTICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChUQykgQ291bnRlciBDbG9jayBEaXNhYmxlIHdpdGggUkMgQ29tcGFyZQ0KKyNkZWZpbmUgQVQ5MUNfVENfTERCRElTICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChUQykgQ291bnRlciBDbG9jayBEaXNhYmxlZCB3aXRoIFJCIExvYWRpbmcNCisjZGVmaW5lIEFUOTFDX1RDX0VUUkdFREcgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA4KSAvLyAoVEMpIEV4dGVybmFsIFRyaWdnZXIgRWRnZSBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ19FVFJHRURHX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDgpIC8vIChUQykgRWRnZTogTm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0VUUkdFREdfUklTSU5HICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFRDKSBFZGdlOiByaXNpbmcgZWRnZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0VUUkdFREdfRkFMTElORyAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgOCkgLy8gKFRDKSBFZGdlOiBmYWxsaW5nIGVkZ2UNCisjZGVmaW5lIAlBVDkxQ19UQ19FVFJHRURHX0JPVEggICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDgpIC8vIChUQykgRWRnZTogZWFjaCBlZGdlDQorI2RlZmluZSBBVDkxQ19UQ19FRVZURURHICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKFRDKSBFeHRlcm5hbCBFdmVudCBFZGdlIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDX0VFVlRFREdfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgOCkgLy8gKFRDKSBFZGdlOiBOb25lDQorI2RlZmluZSAJQVQ5MUNfVENfRUVWVEVER19SSVNJTkcgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoVEMpIEVkZ2U6IHJpc2luZyBlZGdlDQorI2RlZmluZSAJQVQ5MUNfVENfRUVWVEVER19GQUxMSU5HICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA4KSAvLyAoVEMpIEVkZ2U6IGZhbGxpbmcgZWRnZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0VFVlRFREdfQk9USCAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKFRDKSBFZGdlOiBlYWNoIGVkZ2UNCisjZGVmaW5lIEFUOTFDX1RDX0VFVlQgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDEwKSAvLyAoVEMpIEV4dGVybmFsIEV2ZW50ICBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ19FRVZUX1RJT0IgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMTApIC8vIChUQykgU2lnbmFsIHNlbGVjdGVkIGFzIGV4dGVybmFsIGV2ZW50OiBUSU9CIFRJT0IgZGlyZWN0aW9uOiBpbnB1dA0KKyNkZWZpbmUgCUFUOTFDX1RDX0VFVlRfWEMwICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLy8gKFRDKSBTaWduYWwgc2VsZWN0ZWQgYXMgZXh0ZXJuYWwgZXZlbnQ6IFhDMCBUSU9CIGRpcmVjdGlvbjogb3V0cHV0DQorI2RlZmluZSAJQVQ5MUNfVENfRUVWVF9YQzEgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDEwKSAvLyAoVEMpIFNpZ25hbCBzZWxlY3RlZCBhcyBleHRlcm5hbCBldmVudDogWEMxIFRJT0IgZGlyZWN0aW9uOiBvdXRwdXQNCisjZGVmaW5lIAlBVDkxQ19UQ19FRVZUX1hDMiAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTApIC8vIChUQykgU2lnbmFsIHNlbGVjdGVkIGFzIGV4dGVybmFsIGV2ZW50OiBYQzIgVElPQiBkaXJlY3Rpb246IG91dHB1dA0KKyNkZWZpbmUgQVQ5MUNfVENfQUJFVFJHICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChUQykgVElPQSBvciBUSU9CIEV4dGVybmFsIFRyaWdnZXIgU2VsZWN0aW9uDQorI2RlZmluZSBBVDkxQ19UQ19FTkVUUkcgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLy8gKFRDKSBFeHRlcm5hbCBFdmVudCBUcmlnZ2VyIGVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVENfV0FWRVNFTCAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTMpIC8vIChUQykgV2F2ZWZvcm0gIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDX1dBVkVTRUxfVVAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAxMykgLy8gKFRDKSBVUCBtb2RlIHdpdGhvdXQgYXRvbWF0aWMgdHJpZ2dlciBvbiBSQyBDb21wYXJlDQorI2RlZmluZSAJQVQ5MUNfVENfV0FWRVNFTF9VUERPV04gICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEzKSAvLyAoVEMpIFVQRE9XTiBtb2RlIHdpdGhvdXQgYXV0b21hdGljIHRyaWdnZXIgb24gUkMgQ29tcGFyZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX1dBVkVTRUxfVVBfQVVUTyAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxMykgLy8gKFRDKSBVUCBtb2RlIHdpdGggYXV0b21hdGljIHRyaWdnZXIgb24gUkMgQ29tcGFyZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX1dBVkVTRUxfVVBET1dOX0FVVE8gICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxMykgLy8gKFRDKSBVUERPV04gbW9kZSB3aXRoIGF1dG9tYXRpYyB0cmlnZ2VyIG9uIFJDIENvbXBhcmUNCisjZGVmaW5lIEFUOTFDX1RDX0NQQ1RSRyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE0KSAvLyAoVEMpIFJDIENvbXBhcmUgVHJpZ2dlciBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1RDX1dBVkUgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE1KSAvLyAoVEMpIA0KKyNkZWZpbmUgQVQ5MUNfVENfQUNQQSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTYpIC8vIChUQykgUkEgQ29tcGFyZSBFZmZlY3Qgb24gVElPQQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0FDUEFfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAxNikgLy8gKFRDKSBFZmZlY3Q6IG5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19BQ1BBX1NFVCAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChUQykgRWZmZWN0OiBzZXQNCisjZGVmaW5lIAlBVDkxQ19UQ19BQ1BBX0NMRUFSICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMTYpIC8vIChUQykgRWZmZWN0OiBjbGVhcg0KKyNkZWZpbmUgCUFUOTFDX1RDX0FDUEFfVE9HR0xFICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxNikgLy8gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KKyNkZWZpbmUgQVQ5MUNfVENfTERSQSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTYpIC8vIChUQykgUkEgTG9hZGluZyBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ19MRFJBX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMTYpIC8vIChUQykgRWRnZTogTm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0xEUkFfUklTSU5HICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKFRDKSBFZGdlOiByaXNpbmcgZWRnZSBvZiBUSU9BDQorI2RlZmluZSAJQVQ5MUNfVENfTERSQV9GQUxMSU5HICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDE2KSAvLyAoVEMpIEVkZ2U6IGZhbGxpbmcgZWRnZSBvZiBUSU9BDQorI2RlZmluZSAJQVQ5MUNfVENfTERSQV9CT1RIICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE2KSAvLyAoVEMpIEVkZ2U6IGVhY2ggZWRnZSBvZiBUSU9BDQorI2RlZmluZSBBVDkxQ19UQ19BQ1BDICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxOCkgLy8gKFRDKSBSQyBDb21wYXJlIEVmZmVjdCBvbiBUSU9BDQorI2RlZmluZSAJQVQ5MUNfVENfQUNQQ19OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDE4KSAvLyAoVEMpIEVmZmVjdDogbm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0FDUENfU0VUICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOCkgLy8gKFRDKSBFZmZlY3Q6IHNldA0KKyNkZWZpbmUgCUFUOTFDX1RDX0FDUENfQ0xFQVIgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxOCkgLy8gKFRDKSBFZmZlY3Q6IGNsZWFyDQorI2RlZmluZSAJQVQ5MUNfVENfQUNQQ19UT0dHTEUgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE4KSAvLyAoVEMpIEVmZmVjdDogdG9nZ2xlDQorI2RlZmluZSBBVDkxQ19UQ19MRFJCICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxOCkgLy8gKFRDKSBSQiBMb2FkaW5nIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDX0xEUkJfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAxOCkgLy8gKFRDKSBFZGdlOiBOb25lDQorI2RlZmluZSAJQVQ5MUNfVENfTERSQl9SSVNJTkcgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE4KSAvLyAoVEMpIEVkZ2U6IHJpc2luZyBlZGdlIG9mIFRJT0ENCisjZGVmaW5lIAlBVDkxQ19UQ19MRFJCX0ZBTExJTkcgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMTgpIC8vIChUQykgRWRnZTogZmFsbGluZyBlZGdlIG9mIFRJT0ENCisjZGVmaW5lIAlBVDkxQ19UQ19MRFJCX0JPVEggICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTgpIC8vIChUQykgRWRnZTogZWFjaCBlZGdlIG9mIFRJT0ENCisjZGVmaW5lIEFUOTFDX1RDX0FFRVZUICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDIwKSAvLyAoVEMpIEV4dGVybmFsIEV2ZW50IEVmZmVjdCBvbiBUSU9BDQorI2RlZmluZSAJQVQ5MUNfVENfQUVFVlRfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAyMCkgLy8gKFRDKSBFZmZlY3Q6IG5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19BRUVWVF9TRVQgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIwKSAvLyAoVEMpIEVmZmVjdDogc2V0DQorI2RlZmluZSAJQVQ5MUNfVENfQUVFVlRfQ0xFQVIgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAyMCkgLy8gKFRDKSBFZmZlY3Q6IGNsZWFyDQorI2RlZmluZSAJQVQ5MUNfVENfQUVFVlRfVE9HR0xFICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyMCkgLy8gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KKyNkZWZpbmUgQVQ5MUNfVENfQVNXVFJHICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMjIpIC8vIChUQykgU29mdHdhcmUgVHJpZ2dlciBFZmZlY3Qgb24gVElPQQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0FTV1RSR19OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDIyKSAvLyAoVEMpIEVmZmVjdDogbm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0FTV1RSR19TRVQgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIyKSAvLyAoVEMpIEVmZmVjdDogc2V0DQorI2RlZmluZSAJQVQ5MUNfVENfQVNXVFJHX0NMRUFSICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMjIpIC8vIChUQykgRWZmZWN0OiBjbGVhcg0KKyNkZWZpbmUgCUFUOTFDX1RDX0FTV1RSR19UT0dHTEUgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDIyKSAvLyAoVEMpIEVmZmVjdDogdG9nZ2xlDQorI2RlZmluZSBBVDkxQ19UQ19CQ1BCICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyNCkgLy8gKFRDKSBSQiBDb21wYXJlIEVmZmVjdCBvbiBUSU9CDQorI2RlZmluZSAJQVQ5MUNfVENfQkNQQl9OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDI0KSAvLyAoVEMpIEVmZmVjdDogbm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0JDUEJfU0VUICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNCkgLy8gKFRDKSBFZmZlY3Q6IHNldA0KKyNkZWZpbmUgCUFUOTFDX1RDX0JDUEJfQ0xFQVIgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAyNCkgLy8gKFRDKSBFZmZlY3Q6IGNsZWFyDQorI2RlZmluZSAJQVQ5MUNfVENfQkNQQl9UT0dHTEUgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDI0KSAvLyAoVEMpIEVmZmVjdDogdG9nZ2xlDQorI2RlZmluZSBBVDkxQ19UQ19CQ1BDICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyNikgLy8gKFRDKSBSQyBDb21wYXJlIEVmZmVjdCBvbiBUSU9CDQorI2RlZmluZSAJQVQ5MUNfVENfQkNQQ19OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDI2KSAvLyAoVEMpIEVmZmVjdDogbm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0JDUENfU0VUICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNikgLy8gKFRDKSBFZmZlY3Q6IHNldA0KKyNkZWZpbmUgCUFUOTFDX1RDX0JDUENfQ0xFQVIgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAyNikgLy8gKFRDKSBFZmZlY3Q6IGNsZWFyDQorI2RlZmluZSAJQVQ5MUNfVENfQkNQQ19UT0dHTEUgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDI2KSAvLyAoVEMpIEVmZmVjdDogdG9nZ2xlDQorI2RlZmluZSBBVDkxQ19UQ19CRUVWVCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyOCkgLy8gKFRDKSBFeHRlcm5hbCBFdmVudCBFZmZlY3Qgb24gVElPQg0KKyNkZWZpbmUgCUFUOTFDX1RDX0JFRVZUX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMjgpIC8vIChUQykgRWZmZWN0OiBub25lDQorI2RlZmluZSAJQVQ5MUNfVENfQkVFVlRfU0VUICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyOCkgLy8gKFRDKSBFZmZlY3Q6IHNldA0KKyNkZWZpbmUgCUFUOTFDX1RDX0JFRVZUX0NMRUFSICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMjgpIC8vIChUQykgRWZmZWN0OiBjbGVhcg0KKyNkZWZpbmUgCUFUOTFDX1RDX0JFRVZUX1RPR0dMRSAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMjgpIC8vIChUQykgRWZmZWN0OiB0b2dnbGUNCisjZGVmaW5lIEFUOTFDX1RDX0JTV1RSRyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDMwKSAvLyAoVEMpIFNvZnR3YXJlIFRyaWdnZXIgRWZmZWN0IG9uIFRJT0INCisjZGVmaW5lIAlBVDkxQ19UQ19CU1dUUkdfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAzMCkgLy8gKFRDKSBFZmZlY3Q6IG5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19CU1dUUkdfU0VUICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAzMCkgLy8gKFRDKSBFZmZlY3Q6IHNldA0KKyNkZWZpbmUgCUFUOTFDX1RDX0JTV1RSR19DTEVBUiAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDMwKSAvLyAoVEMpIEVmZmVjdDogY2xlYXINCisjZGVmaW5lIAlBVDkxQ19UQ19CU1dUUkdfVE9HR0xFICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAzMCkgLy8gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KKy8vIC0tLS0tLS0tIFRDX1NSIDogKFRDIE9mZnNldDogMHgyMCkgVEMgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UQ19DT1ZGUyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFRDKSBDb3VudGVyIE92ZXJmbG93DQorI2RlZmluZSBBVDkxQ19UQ19MT1ZSUyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFRDKSBMb2FkIE92ZXJydW4NCisjZGVmaW5lIEFUOTFDX1RDX0NQQVMgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoVEMpIFJBIENvbXBhcmUNCisjZGVmaW5lIEFUOTFDX1RDX0NQQlMgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoVEMpIFJCIENvbXBhcmUNCisjZGVmaW5lIEFUOTFDX1RDX0NQQ1MgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoVEMpIFJDIENvbXBhcmUNCisjZGVmaW5lIEFUOTFDX1RDX0xEUkFTICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoVEMpIFJBIExvYWRpbmcNCisjZGVmaW5lIEFUOTFDX1RDX0xEUkJTICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoVEMpIFJCIExvYWRpbmcNCisjZGVmaW5lIEFUOTFDX1RDX0VUUkdTICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoVEMpIEV4dGVybmFsIFRyaWdnZXINCisjZGVmaW5lIEFUOTFDX1RDX0NMS1NUQSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoVEMpIENsb2NrIEVuYWJsaW5nDQorI2RlZmluZSBBVDkxQ19UQ19NVElPQSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNykgLy8gKFRDKSBUSU9BIE1pcnJvcg0KKyNkZWZpbmUgQVQ5MUNfVENfTVRJT0IgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTgpIC8vIChUQykgVElPQSBNaXJyb3INCisvLyAtLS0tLS0tLSBUQ19JRVIgOiAoVEMgT2Zmc2V0OiAweDI0KSBUQyBDaGFubmVsIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVENfSURSIDogKFRDIE9mZnNldDogMHgyOCkgVEMgQ2hhbm5lbCBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBUQ19JTVIgOiAoVEMgT2Zmc2V0OiAweDJjKSBUQyBDaGFubmVsIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVGltZXIgQ291bnRlciBJbnRlcmZhY2UgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLXR5cGVkZWYgc3RydWN0IF9BVDkxU19UQ0INCi17DQotICAgIEFUOTFTX1RDIFRDQl9UQzA7ICAgICAgICAvKiBUQyBDaGFubmVsIDAgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQwWyA0IF07IC8qICovDQotICAgIEFUOTFTX1RDIFRDQl9UQzE7ICAgICAgICAvKiBUQyBDaGFubmVsIDEgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQxWyA0IF07IC8qICovDQotICAgIEFUOTFTX1RDIFRDQl9UQzI7ICAgICAgICAvKiBUQyBDaGFubmVsIDIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQyWyA0IF07IC8qICovDQotICAgIEFUOTFfUkVHIFRDQl9CQ1I7ICAgICAgICAvKiBUQyBCbG9jayBDb250cm9sIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFRDQl9CTVI7ICAgICAgICAvKiBUQyBCbG9jayBNb2RlIFJlZ2lzdGVyICovDQotfSBBVDkxU19UQ0IsICogQVQ5MVBTX1RDQjsNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFRpbWVyIENvdW50ZXIgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfVENCIHsNCisJQVQ5MVNfVEMJIFRDQl9UQzA7IAkvLyBUQyBDaGFubmVsIDANCisJQVQ5MV9SRUcJIFJlc2VydmVkMFs0XTsgCS8vIA0KKwlBVDkxU19UQwkgVENCX1RDMTsgCS8vIFRDIENoYW5uZWwgMQ0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzRdOyAJLy8gDQorCUFUOTFTX1RDCSBUQ0JfVEMyOyAJLy8gVEMgQ2hhbm5lbCAyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDJbNF07IAkvLyANCisJQVQ5MV9SRUcJIFRDQl9CQ1I7IAkvLyBUQyBCbG9jayBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUQ0JfQk1SOyAJLy8gVEMgQmxvY2sgTW9kZSBSZWdpc3Rlcg0KK30gQVQ5MVNfVENCLCAqQVQ5MVBTX1RDQjsNCiANCi0vKiAtLS0tLS0tLSBUQ0JfQkNSIDogKFRDQiBPZmZzZXQ6IDB4YzApIFRDIEJsb2NrIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1RDQl9TWU5DICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAvKiAoVENCKSBTeW5jaHJvIENvbW1hbmQgKi8NCi0vKiAtLS0tLS0tLSBUQ0JfQk1SIDogKFRDQiBPZmZzZXQ6IDB4YzQpIFRDIEJsb2NrIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1RDQl9UQzBYQzBTICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDAgKSAvKiAoVENCKSBFeHRlcm5hbCBDbG9jayBTaWduYWwgMCBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ0JfVEMwWEMwU19UQ0xLMCAgICAoICggdW5zaWduZWQgaW50ICkgMHgwICkgICAgICAvKiAoVENCKSBUQ0xLMCBjb25uZWN0ZWQgdG8gWEMwICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENCX1RDMFhDMFNfTk9ORSAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSApICAgICAgLyogKFRDQikgTm9uZSBzaWduYWwgY29ubmVjdGVkIHRvIFhDMCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDQl9UQzBYQzBTX1RJT0ExICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgKSAgICAgIC8qIChUQ0IpIFRJT0ExIGNvbm5lY3RlZCB0byBYQzAgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ0JfVEMwWEMwU19USU9BMiAgICAoICggdW5zaWduZWQgaW50ICkgMHgzICkgICAgICAvKiAoVENCKSBUSU9BMiBjb25uZWN0ZWQgdG8gWEMwICovDQotI2RlZmluZSBBVDkxQ19UQ0JfVEMxWEMxUyAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAyICkgLyogKFRDQikgRXh0ZXJuYWwgQ2xvY2sgU2lnbmFsIDEgU2VsZWN0aW9uICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENCX1RDMVhDMVNfVENMSzEgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAyICkgLyogKFRDQikgVENMSzEgY29ubmVjdGVkIHRvIFhDMSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDQl9UQzFYQzFTX05PTkUgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMiApIC8qIChUQ0IpIE5vbmUgc2lnbmFsIGNvbm5lY3RlZCB0byBYQzEgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ0JfVEMxWEMxU19USU9BMCAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDIgKSAvKiAoVENCKSBUSU9BMCBjb25uZWN0ZWQgdG8gWEMxICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENCX1RDMVhDMVNfVElPQTIgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAyICkgLyogKFRDQikgVElPQTIgY29ubmVjdGVkIHRvIFhDMSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENCX1RDMlhDMlMgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgNCApIC8qIChUQ0IpIEV4dGVybmFsIENsb2NrIFNpZ25hbCAyIFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDQl9UQzJYQzJTX1RDTEsyICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgNCApIC8qIChUQ0IpIFRDTEsyIGNvbm5lY3RlZCB0byBYQzIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ0JfVEMyWEMyU19OT05FICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDQgKSAvKiAoVENCKSBOb25lIHNpZ25hbCBjb25uZWN0ZWQgdG8gWEMyICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENCX1RDMlhDMlNfVElPQTAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCA0ICkgLyogKFRDQikgVElPQTAgY29ubmVjdGVkIHRvIFhDMiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDQl9UQzJYQzJTX1RJT0ExICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgNCApIC8qIChUQ0IpIFRJT0EyIGNvbm5lY3RlZCB0byBYQzIgKi8NCisvLyAtLS0tLS0tLSBUQ0JfQkNSIDogKFRDQiBPZmZzZXQ6IDB4YzApIFRDIEJsb2NrIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UQ0JfU1lOQyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFRDQikgU3luY2hybyBDb21tYW5kDQorLy8gLS0tLS0tLS0gVENCX0JNUiA6IChUQ0IgT2Zmc2V0OiAweGM0KSBUQyBCbG9jayBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVENCX1RDMFhDMFMgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDApIC8vIChUQ0IpIEV4dGVybmFsIENsb2NrIFNpZ25hbCAwIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzBYQzBTX1RDTEswICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDApIC8vIChUQ0IpIFRDTEswIGNvbm5lY3RlZCB0byBYQzANCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMwWEMwU19OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxKSAvLyAoVENCKSBOb25lIHNpZ25hbCBjb25uZWN0ZWQgdG8gWEMwDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMFhDMFNfVElPQTEgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MikgLy8gKFRDQikgVElPQTEgY29ubmVjdGVkIHRvIFhDMA0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzBYQzBTX1RJT0EyICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMpIC8vIChUQ0IpIFRJT0EyIGNvbm5lY3RlZCB0byBYQzANCisjZGVmaW5lIEFUOTFDX1RDQl9UQzFYQzFTICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICAyKSAvLyAoVENCKSBFeHRlcm5hbCBDbG9jayBTaWduYWwgMSBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMxWEMxU19UQ0xLMSAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICAyKSAvLyAoVENCKSBUQ0xLMSBjb25uZWN0ZWQgdG8gWEMxDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMVhDMVNfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFRDQikgTm9uZSBzaWduYWwgY29ubmVjdGVkIHRvIFhDMQ0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzFYQzFTX1RJT0EwICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDIpIC8vIChUQ0IpIFRJT0EwIGNvbm5lY3RlZCB0byBYQzENCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMxWEMxU19USU9BMiAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICAyKSAvLyAoVENCKSBUSU9BMiBjb25uZWN0ZWQgdG8gWEMxDQorI2RlZmluZSBBVDkxQ19UQ0JfVEMyWEMyUyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgNCkgLy8gKFRDQikgRXh0ZXJuYWwgQ2xvY2sgU2lnbmFsIDIgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMlhDMlNfVENMSzIgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgNCkgLy8gKFRDQikgVENMSzIgY29ubmVjdGVkIHRvIFhDMg0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzJYQzJTX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChUQ0IpIE5vbmUgc2lnbmFsIGNvbm5lY3RlZCB0byBYQzINCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMyWEMyU19USU9BMCAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA0KSAvLyAoVENCKSBUSU9BMCBjb25uZWN0ZWQgdG8gWEMyDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMlhDMlNfVElPQTEgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgNCkgLy8gKFRDQikgVElPQTIgY29ubmVjdGVkIHRvIFhDMg0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQ29udHJvbCBBcmVhIE5ldHdvcmsgTWFpbEJveCBJbnRlcmZhY2UgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLXR5cGVkZWYgc3RydWN0IF9BVDkxU19DQU5fTUINCi17DQotICAgIEFUOTFfUkVHIENBTl9NQl9NTVI7ICAvKiBNYWlsQm94IE1vZGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQ0FOX01CX01BTTsgIC8qIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIENBTl9NQl9NSUQ7ICAvKiBNYWlsQm94IElEIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIENBTl9NQl9NRklEOyAvKiBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBDQU5fTUJfTVNSOyAgLyogTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQ0FOX01CX01ETDsgIC8qIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQ0FOX01CX01ESDsgIC8qIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIENBTl9NQl9NQ1I7ICAvKiBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXIgKi8NCi19IEFUOTFTX0NBTl9NQiwgKiBBVDkxUFNfQ0FOX01COw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQ29udHJvbCBBcmVhIE5ldHdvcmsgTWFpbEJveCBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19DQU5fTUIgew0KKwlBVDkxX1JFRwkgQ0FOX01CX01NUjsgCS8vIE1haWxCb3ggTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0FOX01CX01BTTsgCS8vIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBDQU5fTUJfTUlEOyAJLy8gTWFpbEJveCBJRCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0FOX01CX01GSUQ7IAkvLyBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0FOX01CX01TUjsgCS8vIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBDQU5fTUJfTURMOyAJLy8gTWFpbEJveCBEYXRhIExvdyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0FOX01CX01ESDsgCS8vIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBDQU5fTUJfTUNSOyAJLy8gTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyDQorfSBBVDkxU19DQU5fTUIsICpBVDkxUFNfQ0FOX01COw0KIA0KLS8qIC0tLS0tLS0tIENBTl9NTVIgOiAoQ0FOX01CIE9mZnNldDogMHgwKSBDQU4gTWVzc2FnZSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19DQU5fTVRJTUVNQVJLICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRkZGIDw8IDAgKSAgLyogKENBTl9NQikgTWFpbGJveCBUaW1lbWFyayAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1BSSU9SICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RiA8PCAxNiApICAgIC8qIChDQU5fTUIpIE1haWxib3ggUHJpb3JpdHkgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NT1QgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDcgPDwgMjQgKSAgICAvKiAoQ0FOX01CKSBNYWlsYm94IE9iamVjdCBUeXBlICovDQotI2RlZmluZSAgICAgQVQ5MUNfQ0FOX01PVF9ESVMgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDI0ICkgICAgLyogKENBTl9NQikgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19DQU5fTU9UX1JYICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjQgKSAgICAvKiAoQ0FOX01CKSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0NBTl9NT1RfUlhPVkVSV1JJVEUgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCAyNCApICAgIC8qIChDQU5fTUIpICovDQotI2RlZmluZSAgICAgQVQ5MUNfQ0FOX01PVF9UWCAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDI0ICkgICAgLyogKENBTl9NQikgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19DQU5fTU9UX0NPTlNVTUVSICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDQgPDwgMjQgKSAgICAvKiAoQ0FOX01CKSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0NBTl9NT1RfUFJPRFVDRVIgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NSA8PCAyNCApICAgIC8qIChDQU5fTUIpICovDQotLyogLS0tLS0tLS0gQ0FOX01BTSA6IChDQU5fTUIgT2Zmc2V0OiAweDQpIENBTiBNZXNzYWdlIEFjY2VwdGFuY2UgTWFzayBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01JRHZCICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4M0ZGRkYgPDwgMCApIC8qIChDQU5fTUIpIENvbXBsZW1lbnRhcnkgYml0cyBmb3IgaWRlbnRpZmllciBpbiBleHRlbmRlZCBtb2RlICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUlEdkEgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg3RkYgPDwgMTggKSAgLyogKENBTl9NQikgSWRlbnRpZmllciBmb3Igc3RhbmRhcmQgZnJhbWUgbW9kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01JREUgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyOSApICAgIC8qIChDQU5fTUIpIElkZW50aWZpZXIgVmVyc2lvbiAqLw0KLS8qIC0tLS0tLS0tIENBTl9NSUQgOiAoQ0FOX01CIE9mZnNldDogMHg4KSBDQU4gTWVzc2FnZSBJRCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIENBTl9NRklEIDogKENBTl9NQiBPZmZzZXQ6IDB4YykgQ0FOIE1lc3NhZ2UgRmFtaWx5IElEIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQ0FOX01TUiA6IChDQU5fTUIgT2Zmc2V0OiAweDEwKSBDQU4gTWVzc2FnZSBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NVElNRVNUQU1QICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGRkYgPDwgMCApIC8qIChDQU5fTUIpIFRpbWVyIFZhbHVlICovDQotI2RlZmluZSBBVDkxQ19DQU5fTURMQyAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGIDw8IDE2ICkgICAvKiAoQ0FOX01CKSBNYWlsYm94IERhdGEgTGVuZ3RoIENvZGUgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NUlRSICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjAgKSAgIC8qIChDQU5fTUIpIE1haWxib3ggUmVtb3RlIFRyYW5zbWlzc2lvbiBSZXF1ZXN0ICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUFCVCAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIyICkgICAvKiAoQ0FOX01CKSBNYWlsYm94IE1lc3NhZ2UgQWJvcnQgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NUkRZICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjMgKSAgIC8qIChDQU5fTUIpIE1haWxib3ggUmVhZHkgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NTUkgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjQgKSAgIC8qIChDQU5fTUIpIE1haWxib3ggTWVzc2FnZSBJZ25vcmVkICovDQotLyogLS0tLS0tLS0gQ0FOX01ETCA6IChDQU5fTUIgT2Zmc2V0OiAweDE0KSBDQU4gTWVzc2FnZSBEYXRhIExvdyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIENBTl9NREggOiAoQ0FOX01CIE9mZnNldDogMHgxOCkgQ0FOIE1lc3NhZ2UgRGF0YSBIaWdoIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQ0FOX01DUiA6IChDQU5fTUIgT2Zmc2V0OiAweDFjKSBDQU4gTWVzc2FnZSBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUFDUiAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIyICkgLyogKENBTl9NQikgQWJvcnQgUmVxdWVzdCBmb3IgTWFpbGJveCAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01UQ1IgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyMyApIC8qIChDQU5fTUIpIE1haWxib3ggVHJhbnNmZXIgQ29tbWFuZCAqLw0KKy8vIC0tLS0tLS0tIENBTl9NTVIgOiAoQ0FOX01CIE9mZnNldDogMHgwKSBDQU4gTWVzc2FnZSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01USU1FTUFSSyAgICgodW5zaWduZWQgaW50KSAweEZGRkYgPDwgIDApIC8vIChDQU5fTUIpIE1haWxib3ggVGltZW1hcmsNCisjZGVmaW5lIEFUOTFDX0NBTl9QUklPUiAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8IDE2KSAvLyAoQ0FOX01CKSBNYWlsYm94IFByaW9yaXR5DQorI2RlZmluZSBBVDkxQ19DQU5fTU9UICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAyNCkgLy8gKENBTl9NQikgTWFpbGJveCBPYmplY3QgVHlwZQ0KKyNkZWZpbmUgCUFUOTFDX0NBTl9NT1RfRElTICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAyNCkgLy8gKENBTl9NQikgDQorI2RlZmluZSAJQVQ5MUNfQ0FOX01PVF9SWCAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI0KSAvLyAoQ0FOX01CKSANCisjZGVmaW5lIAlBVDkxQ19DQU5fTU9UX1JYT1ZFUldSSVRFICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMjQpIC8vIChDQU5fTUIpIA0KKyNkZWZpbmUgCUFUOTFDX0NBTl9NT1RfVFggICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyNCkgLy8gKENBTl9NQikgDQorI2RlZmluZSAJQVQ5MUNfQ0FOX01PVF9DT05TVU1FUiAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg0IDw8IDI0KSAvLyAoQ0FOX01CKSANCisjZGVmaW5lIAlBVDkxQ19DQU5fTU9UX1BST0RVQ0VSICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDUgPDwgMjQpIC8vIChDQU5fTUIpIA0KKy8vIC0tLS0tLS0tIENBTl9NQU0gOiAoQ0FOX01CIE9mZnNldDogMHg0KSBDQU4gTWVzc2FnZSBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DQU5fTUlEdkIgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4M0ZGRkYgPDwgIDApIC8vIChDQU5fTUIpIENvbXBsZW1lbnRhcnkgYml0cyBmb3IgaWRlbnRpZmllciBpbiBleHRlbmRlZCBtb2RlDQorI2RlZmluZSBBVDkxQ19DQU5fTUlEdkEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4N0ZGIDw8IDE4KSAvLyAoQ0FOX01CKSBJZGVudGlmaWVyIGZvciBzdGFuZGFyZCBmcmFtZSBtb2RlDQorI2RlZmluZSBBVDkxQ19DQU5fTUlERSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyOSkgLy8gKENBTl9NQikgSWRlbnRpZmllciBWZXJzaW9uDQorLy8gLS0tLS0tLS0gQ0FOX01JRCA6IChDQU5fTUIgT2Zmc2V0OiAweDgpIENBTiBNZXNzYWdlIElEIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIENBTl9NRklEIDogKENBTl9NQiBPZmZzZXQ6IDB4YykgQ0FOIE1lc3NhZ2UgRmFtaWx5IElEIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIENBTl9NU1IgOiAoQ0FOX01CIE9mZnNldDogMHgxMCkgQ0FOIE1lc3NhZ2UgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01USU1FU1RBTVAgICgodW5zaWduZWQgaW50KSAweEZGRkYgPDwgIDApIC8vIChDQU5fTUIpIFRpbWVyIFZhbHVlDQorI2RlZmluZSBBVDkxQ19DQU5fTURMQyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAxNikgLy8gKENBTl9NQikgTWFpbGJveCBEYXRhIExlbmd0aCBDb2RlDQorI2RlZmluZSBBVDkxQ19DQU5fTVJUUiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMCkgLy8gKENBTl9NQikgTWFpbGJveCBSZW1vdGUgVHJhbnNtaXNzaW9uIFJlcXVlc3QNCisjZGVmaW5lIEFUOTFDX0NBTl9NQUJUICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIyKSAvLyAoQ0FOX01CKSBNYWlsYm94IE1lc3NhZ2UgQWJvcnQNCisjZGVmaW5lIEFUOTFDX0NBTl9NUkRZICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIzKSAvLyAoQ0FOX01CKSBNYWlsYm94IFJlYWR5DQorI2RlZmluZSBBVDkxQ19DQU5fTU1JICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNCkgLy8gKENBTl9NQikgTWFpbGJveCBNZXNzYWdlIElnbm9yZWQNCisvLyAtLS0tLS0tLSBDQU5fTURMIDogKENBTl9NQiBPZmZzZXQ6IDB4MTQpIENBTiBNZXNzYWdlIERhdGEgTG93IFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIENBTl9NREggOiAoQ0FOX01CIE9mZnNldDogMHgxOCkgQ0FOIE1lc3NhZ2UgRGF0YSBIaWdoIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIENBTl9NQ1IgOiAoQ0FOX01CIE9mZnNldDogMHgxYykgQ0FOIE1lc3NhZ2UgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0NBTl9NQUNSICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIyKSAvLyAoQ0FOX01CKSBBYm9ydCBSZXF1ZXN0IGZvciBNYWlsYm94DQorI2RlZmluZSBBVDkxQ19DQU5fTVRDUiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMykgLy8gKENBTl9NQikgTWFpbGJveCBUcmFuc2ZlciBDb21tYW5kDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBDb250cm9sIEFyZWEgTmV0d29yayBJbnRlcmZhY2UgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLXR5cGVkZWYgc3RydWN0IF9BVDkxU19DQU4NCi17DQotICAgIEFUOTFfUkVHIENBTl9NUjsgICAgICAgICAgLyogTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBDQU5fSUVSOyAgICAgICAgIC8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQ0FOX0lEUjsgICAgICAgICAvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBDQU5fSU1SOyAgICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIENBTl9TUjsgICAgICAgICAgLyogU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIENBTl9CUjsgICAgICAgICAgLyogQmF1ZHJhdGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQ0FOX1RJTTsgICAgICAgICAvKiBUaW1lciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBDQU5fVElNRVNUUDsgICAgIC8qIFRpbWUgU3RhbXAgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQ0FOX0VDUjsgICAgICAgICAvKiBFcnJvciBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIENBTl9UQ1I7ICAgICAgICAgLyogVHJhbnNmZXIgQ29tbWFuZCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBDQU5fQUNSOyAgICAgICAgIC8qIEFib3J0IENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQwWyA1MiBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBDQU5fVlI7ICAgICAgICAgIC8qIFZlcnNpb24gUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQxWyA2NCBdOyAvKiAqLw0KLSAgICBBVDkxU19DQU5fTUIgQ0FOX01CMDsgICAgIC8qIENBTiBNYWlsYm94IDAgKi8NCi0gICAgQVQ5MVNfQ0FOX01CIENBTl9NQjE7ICAgICAvKiBDQU4gTWFpbGJveCAxICovDQotICAgIEFUOTFTX0NBTl9NQiBDQU5fTUIyOyAgICAgLyogQ0FOIE1haWxib3ggMiAqLw0KLSAgICBBVDkxU19DQU5fTUIgQ0FOX01CMzsgICAgIC8qIENBTiBNYWlsYm94IDMgKi8NCi0gICAgQVQ5MVNfQ0FOX01CIENBTl9NQjQ7ICAgICAvKiBDQU4gTWFpbGJveCA0ICovDQotICAgIEFUOTFTX0NBTl9NQiBDQU5fTUI1OyAgICAgLyogQ0FOIE1haWxib3ggNSAqLw0KLSAgICBBVDkxU19DQU5fTUIgQ0FOX01CNjsgICAgIC8qIENBTiBNYWlsYm94IDYgKi8NCi0gICAgQVQ5MVNfQ0FOX01CIENBTl9NQjc7ICAgICAvKiBDQU4gTWFpbGJveCA3ICovDQotICAgIEFUOTFTX0NBTl9NQiBDQU5fTUI4OyAgICAgLyogQ0FOIE1haWxib3ggOCAqLw0KLSAgICBBVDkxU19DQU5fTUIgQ0FOX01COTsgICAgIC8qIENBTiBNYWlsYm94IDkgKi8NCi0gICAgQVQ5MVNfQ0FOX01CIENBTl9NQjEwOyAgICAvKiBDQU4gTWFpbGJveCAxMCAqLw0KLSAgICBBVDkxU19DQU5fTUIgQ0FOX01CMTE7ICAgIC8qIENBTiBNYWlsYm94IDExICovDQotICAgIEFUOTFTX0NBTl9NQiBDQU5fTUIxMjsgICAgLyogQ0FOIE1haWxib3ggMTIgKi8NCi0gICAgQVQ5MVNfQ0FOX01CIENBTl9NQjEzOyAgICAvKiBDQU4gTWFpbGJveCAxMyAqLw0KLSAgICBBVDkxU19DQU5fTUIgQ0FOX01CMTQ7ICAgIC8qIENBTiBNYWlsYm94IDE0ICovDQotICAgIEFUOTFTX0NBTl9NQiBDQU5fTUIxNTsgICAgLyogQ0FOIE1haWxib3ggMTUgKi8NCi19IEFUOTFTX0NBTiwgKiBBVDkxUFNfQ0FOOw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQ29udHJvbCBBcmVhIE5ldHdvcmsgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfQ0FOIHsNCisJQVQ5MV9SRUcJIENBTl9NUjsgCS8vIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIENBTl9JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBDQU5fSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIENBTl9JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0FOX1NSOyAJLy8gU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBDQU5fQlI7IAkvLyBCYXVkcmF0ZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0FOX1RJTTsgCS8vIFRpbWVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBDQU5fVElNRVNUUDsgCS8vIFRpbWUgU3RhbXAgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIENBTl9FQ1I7IAkvLyBFcnJvciBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBDQU5fVENSOyAJLy8gVHJhbnNmZXIgQ29tbWFuZCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0FOX0FDUjsgCS8vIEFib3J0IENvbW1hbmQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFs1Ml07IAkvLyANCisJQVQ5MV9SRUcJIENBTl9WUjsgCS8vIFZlcnNpb24gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMVs2NF07IAkvLyANCisJQVQ5MVNfQ0FOX01CCSBDQU5fTUIwOyAJLy8gQ0FOIE1haWxib3ggMA0KKwlBVDkxU19DQU5fTUIJIENBTl9NQjE7IAkvLyBDQU4gTWFpbGJveCAxDQorCUFUOTFTX0NBTl9NQgkgQ0FOX01CMjsgCS8vIENBTiBNYWlsYm94IDINCisJQVQ5MVNfQ0FOX01CCSBDQU5fTUIzOyAJLy8gQ0FOIE1haWxib3ggMw0KKwlBVDkxU19DQU5fTUIJIENBTl9NQjQ7IAkvLyBDQU4gTWFpbGJveCA0DQorCUFUOTFTX0NBTl9NQgkgQ0FOX01CNTsgCS8vIENBTiBNYWlsYm94IDUNCisJQVQ5MVNfQ0FOX01CCSBDQU5fTUI2OyAJLy8gQ0FOIE1haWxib3ggNg0KKwlBVDkxU19DQU5fTUIJIENBTl9NQjc7IAkvLyBDQU4gTWFpbGJveCA3DQorCUFUOTFTX0NBTl9NQgkgQ0FOX01CODsgCS8vIENBTiBNYWlsYm94IDgNCisJQVQ5MVNfQ0FOX01CCSBDQU5fTUI5OyAJLy8gQ0FOIE1haWxib3ggOQ0KKwlBVDkxU19DQU5fTUIJIENBTl9NQjEwOyAJLy8gQ0FOIE1haWxib3ggMTANCisJQVQ5MVNfQ0FOX01CCSBDQU5fTUIxMTsgCS8vIENBTiBNYWlsYm94IDExDQorCUFUOTFTX0NBTl9NQgkgQ0FOX01CMTI7IAkvLyBDQU4gTWFpbGJveCAxMg0KKwlBVDkxU19DQU5fTUIJIENBTl9NQjEzOyAJLy8gQ0FOIE1haWxib3ggMTMNCisJQVQ5MVNfQ0FOX01CCSBDQU5fTUIxNDsgCS8vIENBTiBNYWlsYm94IDE0DQorCUFUOTFTX0NBTl9NQgkgQ0FOX01CMTU7IAkvLyBDQU4gTWFpbGJveCAxNQ0KK30gQVQ5MVNfQ0FOLCAqQVQ5MVBTX0NBTjsNCiANCi0vKiAtLS0tLS0tLSBDQU5fTVIgOiAoQ0FOIE9mZnNldDogMHgwKSBDQU4gTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX0NBTkVOICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgLyogKENBTikgQ0FOIENvbnRyb2xsZXIgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19DQU5fTFBNICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAvKiAoQ0FOKSBEaXNhYmxlL0VuYWJsZSBMb3cgUG93ZXIgTW9kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX0FCTSAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAgLyogKENBTikgRGlzYWJsZS9FbmFibGUgQXV0b2JhdWQvTGlzdGVuIE1vZGUgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9PVkwgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzICkgIC8qIChDQU4pIERpc2FibGUvRW5hYmxlIE92ZXJsb2FkIEZyYW1lICovDQotI2RlZmluZSBBVDkxQ19DQU5fVEVPRiAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNCApICAvKiAoQ0FOKSBUaW1lIFN0YW1wIG1lc3NhZ2VzIGF0IGVhY2ggZW5kIG9mIEZyYW1lICovDQotI2RlZmluZSBBVDkxQ19DQU5fVFRNICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNSApICAvKiAoQ0FOKSBEaXNhYmxlL0VuYWJsZSBUaW1lIFRyaWdnZXIgTW9kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1RJTUZSWiAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDYgKSAgLyogKENBTikgRW5hYmxlIFRpbWVyIEZyZWV6ZSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX0RSUFQgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDcgKSAgLyogKENBTikgRGlzYWJsZSBSZXBlYXQgKi8NCi0vKiAtLS0tLS0tLSBDQU5fSUVSIDogKENBTiBPZmZzZXQ6IDB4NCkgQ0FOIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgIC8qIChDQU4pIE1haWxib3ggMCBGbGFnICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIxICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAvKiAoQ0FOKSBNYWlsYm94IDEgRmxhZyAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMiAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAgLyogKENBTikgTWFpbGJveCAyIEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjMgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzICkgIC8qIChDQU4pIE1haWxib3ggMyBGbGFnICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI0ICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNCApICAvKiAoQ0FOKSBNYWlsYm94IDQgRmxhZyAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CNSAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDUgKSAgLyogKENBTikgTWFpbGJveCA1IEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjYgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA2ICkgIC8qIChDQU4pIE1haWxib3ggNiBGbGFnICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI3ICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNyApICAvKiAoQ0FOKSBNYWlsYm94IDcgRmxhZyAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01COCAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDggKSAgLyogKENBTikgTWFpbGJveCA4IEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjkgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA5ICkgIC8qIChDQU4pIE1haWxib3ggOSBGbGFnICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIxMCAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTAgKSAvKiAoQ0FOKSBNYWlsYm94IDEwIEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjExICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMSApIC8qIChDQU4pIE1haWxib3ggMTEgRmxhZyAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMTIgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEyICkgLyogKENBTikgTWFpbGJveCAxMiBGbGFnICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIxMyAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTMgKSAvKiAoQ0FOKSBNYWlsYm94IDEzIEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjE0ICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNCApIC8qIChDQU4pIE1haWxib3ggMTQgRmxhZyAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMTUgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE1ICkgLyogKENBTikgTWFpbGJveCAxNSBGbGFnICovDQotI2RlZmluZSBBVDkxQ19DQU5fRVJSQSAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTYgKSAvKiAoQ0FOKSBFcnJvciBBY3RpdmUgTW9kZSBGbGFnICovDQotI2RlZmluZSBBVDkxQ19DQU5fV0FSTiAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTcgKSAvKiAoQ0FOKSBXYXJuaW5nIExpbWl0IEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9FUlJQICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxOCApIC8qIChDQU4pIEVycm9yIFBhc3NpdmUgTW9kZSBGbGFnICovDQotI2RlZmluZSBBVDkxQ19DQU5fQk9GRiAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTkgKSAvKiAoQ0FOKSBCdXMgT2ZmIE1vZGUgRmxhZyAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1NMRUVQICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIwICkgLyogKENBTikgU2xlZXAgRmxhZyAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1dBS0VVUCAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIxICkgLyogKENBTikgV2FrZXVwIEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9UT1ZGICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyMiApIC8qIChDQU4pIFRpbWVyIE92ZXJmbG93IEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9UU1RQICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyMyApIC8qIChDQU4pIFRpbWVzdGFtcCBGbGFnICovDQotI2RlZmluZSBBVDkxQ19DQU5fQ0VSUiAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjQgKSAvKiAoQ0FOKSBDUkMgRXJyb3IgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9TRVJSICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyNSApIC8qIChDQU4pIFN0dWZmaW5nIEVycm9yICovDQotI2RlZmluZSBBVDkxQ19DQU5fQUVSUiAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjYgKSAvKiAoQ0FOKSBBY2tub3dsZWRnbWVudCBFcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX0ZFUlIgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDI3ICkgLyogKENBTikgRm9ybSBFcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX0JFUlIgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDI4ICkgLyogKENBTikgQml0IEVycm9yICovDQotLyogLS0tLS0tLS0gQ0FOX0lEUiA6IChDQU4gT2Zmc2V0OiAweDgpIENBTiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIENBTl9JTVIgOiAoQ0FOIE9mZnNldDogMHhjKSBDQU4gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBDQU5fU1IgOiAoQ0FOIE9mZnNldDogMHgxMCkgQ0FOIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1JCU1kgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDI5ICkgICAvKiAoQ0FOKSBSZWNlaXZlciBCdXN5ICovDQotI2RlZmluZSBBVDkxQ19DQU5fVEJTWSAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMzAgKSAgIC8qIChDQU4pIFRyYW5zbWl0dGVyIEJ1c3kgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9PVkxZICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzMSApICAgLyogKENBTikgT3ZlcmxvYWQgQnVzeSAqLw0KLS8qIC0tLS0tLS0tIENBTl9CUiA6IChDQU4gT2Zmc2V0OiAweDE0KSBDQU4gQmF1ZHJhdGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9QSEFTRTIgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NyA8PCAwICkgICAgLyogKENBTikgUGhhc2UgMiBzZWdtZW50ICovDQotI2RlZmluZSBBVDkxQ19DQU5fUEhBU0UxICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDcgPDwgNCApICAgIC8qIChDQU4pIFBoYXNlIDEgc2VnbWVudCAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1BST1BBRyAgICAoICggdW5zaWduZWQgaW50ICkgMHg3IDw8IDggKSAgICAvKiAoQ0FOKSBQcm9ncmFtbWF0aW9uIHRpbWUgc2VnbWVudCAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1NZTkMgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDEyICkgICAvKiAoQ0FOKSBSZS1zeW5jaHJvbml6YXRpb24ganVtcCB3aWR0aCBzZWdtZW50ICovDQotI2RlZmluZSBBVDkxQ19DQU5fQlJQICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDdGIDw8IDE2ICkgIC8qIChDQU4pIEJhdWRyYXRlIFByZXNjYWxlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1NNUCAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDI0ICkgICAvKiAoQ0FOKSBTYW1wbGluZyBtb2RlICovDQotLyogLS0tLS0tLS0gQ0FOX1RJTSA6IChDQU4gT2Zmc2V0OiAweDE4KSBDQU4gVGltZXIgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9USU1FUiAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RkZGRiA8PCAwICkgLyogKENBTikgVGltZXIgZmllbGQgKi8NCi0vKiAtLS0tLS0tLSBDQU5fVElNRVNUUCA6IChDQU4gT2Zmc2V0OiAweDFjKSBDQU4gVGltZXN0YW1wIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQ0FOX0VDUiA6IChDQU4gT2Zmc2V0OiAweDIwKSBDQU4gRXJyb3IgQ291bnRlciBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1JFQyAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRiA8PCAwICkgIC8qIChDQU4pIFJlY2VpdmUgRXJyb3IgQ291bnRlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1RFQyAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRiA8PCAxNiApIC8qIChDQU4pIFRyYW5zbWl0IEVycm9yIENvdW50ZXIgKi8NCi0vKiAtLS0tLS0tLSBDQU5fVENSIDogKENBTiBPZmZzZXQ6IDB4MjQpIENBTiBUcmFuc2ZlciBDb21tYW5kIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19DQU5fVElNUlNUICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMzEgKSAgLyogKENBTikgVGltZXIgUmVzZXQgRmllbGQgKi8NCi0vKiAtLS0tLS0tLSBDQU5fQUNSIDogKENBTiBPZmZzZXQ6IDB4MjgpIENBTiBBYm9ydCBDb21tYW5kIFJlZ2lzdGVyIC0tLS0tLS0tICovDQorLy8gLS0tLS0tLS0gQ0FOX01SIDogKENBTiBPZmZzZXQ6IDB4MCkgQ0FOIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DQU5fQ0FORU4gICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKENBTikgQ0FOIENvbnRyb2xsZXIgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19DQU5fTFBNICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKENBTikgRGlzYWJsZS9FbmFibGUgTG93IFBvd2VyIE1vZGUNCisjZGVmaW5lIEFUOTFDX0NBTl9BQk0gICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoQ0FOKSBEaXNhYmxlL0VuYWJsZSBBdXRvYmF1ZC9MaXN0ZW4gTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX09WTCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChDQU4pIERpc2FibGUvRW5hYmxlIE92ZXJsb2FkIEZyYW1lDQorI2RlZmluZSBBVDkxQ19DQU5fVEVPRiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKENBTikgVGltZSBTdGFtcCBtZXNzYWdlcyBhdCBlYWNoIGVuZCBvZiBGcmFtZQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1RUTSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChDQU4pIERpc2FibGUvRW5hYmxlIFRpbWUgVHJpZ2dlciBNb2RlDQorI2RlZmluZSBBVDkxQ19DQU5fVElNRlJaICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLy8gKENBTikgRW5hYmxlIFRpbWVyIEZyZWV6ZQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0RSUFQgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChDQU4pIERpc2FibGUgUmVwZWF0DQorLy8gLS0tLS0tLS0gQ0FOX0lFUiA6IChDQU4gT2Zmc2V0OiAweDQpIENBTiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChDQU4pIE1haWxib3ggMCBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKENBTikgTWFpbGJveCAxIEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9NQjIgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoQ0FOKSBNYWlsYm94IDIgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChDQU4pIE1haWxib3ggMyBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUI0ICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKENBTikgTWFpbGJveCA0IEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9NQjUgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoQ0FOKSBNYWlsYm94IDUgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNiAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChDQU4pIE1haWxib3ggNiBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUI3ICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKENBTikgTWFpbGJveCA3IEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9NQjggICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoQ0FOKSBNYWlsYm94IDggRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01COSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChDQU4pIE1haWxib3ggOSBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxMCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLy8gKENBTikgTWFpbGJveCAxMCBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxMSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMSkgLy8gKENBTikgTWFpbGJveCAxMSBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxMiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLy8gKENBTikgTWFpbGJveCAxMiBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxMyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMykgLy8gKENBTikgTWFpbGJveCAxMyBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxNCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNCkgLy8gKENBTikgTWFpbGJveCAxNCBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxNSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNSkgLy8gKENBTikgTWFpbGJveCAxNSBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fRVJSQSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKENBTikgRXJyb3IgQWN0aXZlIE1vZGUgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1dBUk4gICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTcpIC8vIChDQU4pIFdhcm5pbmcgTGltaXQgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0VSUlAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTgpIC8vIChDQU4pIEVycm9yIFBhc3NpdmUgTW9kZSBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fQk9GRiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOSkgLy8gKENBTikgQnVzIE9mZiBNb2RlIEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9TTEVFUCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIwKSAvLyAoQ0FOKSBTbGVlcCBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fV0FLRVVQICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMSkgLy8gKENBTikgV2FrZXVwIEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9UT1ZGICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIyKSAvLyAoQ0FOKSBUaW1lciBPdmVyZmxvdyBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fVFNUUCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMykgLy8gKENBTikgVGltZXN0YW1wIEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9DRVJSICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI0KSAvLyAoQ0FOKSBDUkMgRXJyb3INCisjZGVmaW5lIEFUOTFDX0NBTl9TRVJSICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI1KSAvLyAoQ0FOKSBTdHVmZmluZyBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0FFUlIgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjYpIC8vIChDQU4pIEFja25vd2xlZGdtZW50IEVycm9yDQorI2RlZmluZSBBVDkxQ19DQU5fRkVSUiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNykgLy8gKENBTikgRm9ybSBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0JFUlIgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjgpIC8vIChDQU4pIEJpdCBFcnJvcg0KKy8vIC0tLS0tLS0tIENBTl9JRFIgOiAoQ0FOIE9mZnNldDogMHg4KSBDQU4gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQ0FOX0lNUiA6IChDQU4gT2Zmc2V0OiAweGMpIENBTiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBDQU5fU1IgOiAoQ0FOIE9mZnNldDogMHgxMCkgQ0FOIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0NBTl9SQlNZICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI5KSAvLyAoQ0FOKSBSZWNlaXZlciBCdXN5DQorI2RlZmluZSBBVDkxQ19DQU5fVEJTWSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAzMCkgLy8gKENBTikgVHJhbnNtaXR0ZXIgQnVzeQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX09WTFkgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMzEpIC8vIChDQU4pIE92ZXJsb2FkIEJ1c3kNCisvLyAtLS0tLS0tLSBDQU5fQlIgOiAoQ0FOIE9mZnNldDogMHgxNCkgQ0FOIEJhdWRyYXRlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1BIQVNFMiAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgIDApIC8vIChDQU4pIFBoYXNlIDIgc2VnbWVudA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1BIQVNFMSAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgIDQpIC8vIChDQU4pIFBoYXNlIDEgc2VnbWVudA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1BST1BBRyAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgIDgpIC8vIChDQU4pIFByb2dyYW1tYXRpb24gdGltZSBzZWdtZW50DQorI2RlZmluZSBBVDkxQ19DQU5fU1lOQyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxMikgLy8gKENBTikgUmUtc3luY2hyb25pemF0aW9uIGp1bXAgd2lkdGggc2VnbWVudA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0JSUCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDdGIDw8IDE2KSAvLyAoQ0FOKSBCYXVkcmF0ZSBQcmVzY2FsZXINCisjZGVmaW5lIEFUOTFDX0NBTl9TTVAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI0KSAvLyAoQ0FOKSBTYW1wbGluZyBtb2RlDQorLy8gLS0tLS0tLS0gQ0FOX1RJTSA6IChDQU4gT2Zmc2V0OiAweDE4KSBDQU4gVGltZXIgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DQU5fVElNRVIgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGRiA8PCAgMCkgLy8gKENBTikgVGltZXIgZmllbGQNCisvLyAtLS0tLS0tLSBDQU5fVElNRVNUUCA6IChDQU4gT2Zmc2V0OiAweDFjKSBDQU4gVGltZXN0YW1wIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIENBTl9FQ1IgOiAoQ0FOIE9mZnNldDogMHgyMCkgQ0FOIEVycm9yIENvdW50ZXIgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DQU5fUkVDICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgIDApIC8vIChDQU4pIFJlY2VpdmUgRXJyb3IgQ291bnRlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1RFQyAgICAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8IDE2KSAvLyAoQ0FOKSBUcmFuc21pdCBFcnJvciBDb3VudGVyDQorLy8gLS0tLS0tLS0gQ0FOX1RDUiA6IChDQU4gT2Zmc2V0OiAweDI0KSBDQU4gVHJhbnNmZXIgQ29tbWFuZCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0NBTl9USU1SU1QgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDMxKSAvLyAoQ0FOKSBUaW1lciBSZXNldCBGaWVsZA0KKy8vIC0tLS0tLS0tIENBTl9BQ1IgOiAoQ0FOIE9mZnNldDogMHgyOCkgQ0FOIEFib3J0IENvbW1hbmQgUmVnaXN0ZXIgLS0tLS0tLS0gDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBFdGhlcm5ldCBNQUMgMTAvMTAwICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfRU1BQw0KLXsNCi0gICAgQVQ5MV9SRUcgRU1BQ19OQ1I7ICAgICAgICAvKiBOZXR3b3JrIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19OQ0ZHUjsgICAgICAvKiBOZXR3b3JrIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19OU1I7ICAgICAgICAvKiBOZXR3b3JrIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDBbIDIgXTsgIC8qICovDQotICAgIEFUOTFfUkVHIEVNQUNfVFNSOyAgICAgICAgLyogVHJhbnNtaXQgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfUkJRUDsgICAgICAgLyogUmVjZWl2ZSBCdWZmZXIgUXVldWUgUG9pbnRlciAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX1RCUVA7ICAgICAgIC8qIFRyYW5zbWl0IEJ1ZmZlciBRdWV1ZSBQb2ludGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfUlNSOyAgICAgICAgLyogUmVjZWl2ZSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19JU1I7ICAgICAgICAvKiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfSUVSOyAgICAgICAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX0lEUjsgICAgICAgIC8qIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfSU1SOyAgICAgICAgLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19NQU47ICAgICAgICAvKiBQSFkgTWFpbnRlbmFuY2UgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19QVFI7ICAgICAgICAvKiBQYXVzZSBUaW1lIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfUEZSOyAgICAgICAgLyogUGF1c2UgRnJhbWVzIHJlY2VpdmVkIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfRlRPOyAgICAgICAgLyogRnJhbWVzIFRyYW5zbWl0dGVkIE9LIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfU0NGOyAgICAgICAgLyogU2luZ2xlIENvbGxpc2lvbiBGcmFtZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX01DRjsgICAgICAgIC8qIE11bHRpcGxlIENvbGxpc2lvbiBGcmFtZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX0ZSTzsgICAgICAgIC8qIEZyYW1lcyBSZWNlaXZlZCBPSyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX0ZDU0U7ICAgICAgIC8qIEZyYW1lIENoZWNrIFNlcXVlbmNlIEVycm9yIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfQUxFOyAgICAgICAgLyogQWxpZ25tZW50IEVycm9yIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfRFRGOyAgICAgICAgLyogRGVmZXJyZWQgVHJhbnNtaXNzaW9uIEZyYW1lIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfTENPTDsgICAgICAgLyogTGF0ZSBDb2xsaXNpb24gUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19FQ09MOyAgICAgICAvKiBFeGNlc3NpdmUgQ29sbGlzaW9uIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfVFVORDsgICAgICAgLyogVHJhbnNtaXQgVW5kZXJydW4gRXJyb3IgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19DU0U7ICAgICAgICAvKiBDYXJyaWVyIFNlbnNlIEVycm9yIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfUlJFOyAgICAgICAgLyogUmVjZWl2ZSBSZXNzb3VyY2UgRXJyb3IgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19ST1Y7ICAgICAgICAvKiBSZWNlaXZlIE92ZXJydW4gRXJyb3JzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfUlNFOyAgICAgICAgLyogUmVjZWl2ZSBTeW1ib2wgRXJyb3JzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfRUxFOyAgICAgICAgLyogRXhjZXNzaXZlIExlbmd0aCBFcnJvcnMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19SSkE7ICAgICAgICAvKiBSZWNlaXZlIEphYmJlcnMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19VU0Y7ICAgICAgICAvKiBVbmRlcnNpemUgRnJhbWVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfU1RFOyAgICAgICAgLyogU1FFIFRlc3QgRXJyb3IgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19STEU7ICAgICAgICAvKiBSZWNlaXZlIExlbmd0aCBGaWVsZCBNaXNtYXRjaCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX1RQRjsgICAgICAgIC8qIFRyYW5zbWl0dGVkIFBhdXNlIEZyYW1lcyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX0hSQjsgICAgICAgIC8qIEhhc2ggQWRkcmVzcyBCb3R0b21bMzE6MF0gKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19IUlQ7ICAgICAgICAvKiBIYXNoIEFkZHJlc3MgVG9wWzYzOjMyXSAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX1NBMUw7ICAgICAgIC8qIFNwZWNpZmljIEFkZHJlc3MgMSBCb3R0b20sIEZpcnN0IDQgYnl0ZXMgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19TQTFIOyAgICAgICAvKiBTcGVjaWZpYyBBZGRyZXNzIDEgVG9wLCBMYXN0IDIgYnl0ZXMgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19TQTJMOyAgICAgICAvKiBTcGVjaWZpYyBBZGRyZXNzIDIgQm90dG9tLCBGaXJzdCA0IGJ5dGVzICovDQotICAgIEFUOTFfUkVHIEVNQUNfU0EySDsgICAgICAgLyogU3BlY2lmaWMgQWRkcmVzcyAyIFRvcCwgTGFzdCAyIGJ5dGVzICovDQotICAgIEFUOTFfUkVHIEVNQUNfU0EzTDsgICAgICAgLyogU3BlY2lmaWMgQWRkcmVzcyAzIEJvdHRvbSwgRmlyc3QgNCBieXRlcyAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX1NBM0g7ICAgICAgIC8qIFNwZWNpZmljIEFkZHJlc3MgMyBUb3AsIExhc3QgMiBieXRlcyAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX1NBNEw7ICAgICAgIC8qIFNwZWNpZmljIEFkZHJlc3MgNCBCb3R0b20sIEZpcnN0IDQgYnl0ZXMgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19TQTRIOyAgICAgICAvKiBTcGVjaWZpYyBBZGRyZXNzIDQgVG9wLCBMYXN0IDIgYnl0ZXMgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19USUQ7ICAgICAgICAvKiBUeXBlIElEIENoZWNraW5nIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfVFBROyAgICAgICAgLyogVHJhbnNtaXQgUGF1c2UgUXVhbnR1bSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX1VTUklPOyAgICAgIC8qIFVTRVIgSW5wdXQvT3V0cHV0IFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfV09MOyAgICAgICAgLyogV2FrZSBPbiBMQU4gUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQxWyAxMyBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX1JFVjsgICAgICAgIC8qIFJldmlzaW9uIFJlZ2lzdGVyICovDQotfSBBVDkxU19FTUFDLCAqIEFUOTFQU19FTUFDOw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgRXRoZXJuZXQgTUFDIDEwLzEwMA0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX0VNQUMgew0KKwlBVDkxX1JFRwkgRU1BQ19OQ1I7IAkvLyBOZXR3b3JrIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfTkNGR1I7IAkvLyBOZXR3b3JrIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfTlNSOyAJLy8gTmV0d29yayBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFsyXTsgCS8vIA0KKwlBVDkxX1JFRwkgRU1BQ19UU1I7IAkvLyBUcmFuc21pdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfUkJRUDsgCS8vIFJlY2VpdmUgQnVmZmVyIFF1ZXVlIFBvaW50ZXINCisJQVQ5MV9SRUcJIEVNQUNfVEJRUDsgCS8vIFRyYW5zbWl0IEJ1ZmZlciBRdWV1ZSBQb2ludGVyDQorCUFUOTFfUkVHCSBFTUFDX1JTUjsgCS8vIFJlY2VpdmUgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX0lTUjsgCS8vIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19NQU47IAkvLyBQSFkgTWFpbnRlbmFuY2UgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfUFRSOyAJLy8gUGF1c2UgVGltZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19QRlI7IAkvLyBQYXVzZSBGcmFtZXMgcmVjZWl2ZWQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfRlRPOyAJLy8gRnJhbWVzIFRyYW5zbWl0dGVkIE9LIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX1NDRjsgCS8vIFNpbmdsZSBDb2xsaXNpb24gRnJhbWUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfTUNGOyAJLy8gTXVsdGlwbGUgQ29sbGlzaW9uIEZyYW1lIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX0ZSTzsgCS8vIEZyYW1lcyBSZWNlaXZlZCBPSyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19GQ1NFOyAJLy8gRnJhbWUgQ2hlY2sgU2VxdWVuY2UgRXJyb3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfQUxFOyAJLy8gQWxpZ25tZW50IEVycm9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX0RURjsgCS8vIERlZmVycmVkIFRyYW5zbWlzc2lvbiBGcmFtZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19MQ09MOyAJLy8gTGF0ZSBDb2xsaXNpb24gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfRUNPTDsgCS8vIEV4Y2Vzc2l2ZSBDb2xsaXNpb24gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfVFVORDsgCS8vIFRyYW5zbWl0IFVuZGVycnVuIEVycm9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX0NTRTsgCS8vIENhcnJpZXIgU2Vuc2UgRXJyb3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfUlJFOyAJLy8gUmVjZWl2ZSBSZXNzb3VyY2UgRXJyb3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfUk9WOyAJLy8gUmVjZWl2ZSBPdmVycnVuIEVycm9ycyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19SU0U7IAkvLyBSZWNlaXZlIFN5bWJvbCBFcnJvcnMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfRUxFOyAJLy8gRXhjZXNzaXZlIExlbmd0aCBFcnJvcnMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfUkpBOyAJLy8gUmVjZWl2ZSBKYWJiZXJzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX1VTRjsgCS8vIFVuZGVyc2l6ZSBGcmFtZXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfU1RFOyAJLy8gU1FFIFRlc3QgRXJyb3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfUkxFOyAJLy8gUmVjZWl2ZSBMZW5ndGggRmllbGQgTWlzbWF0Y2ggUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfVFBGOyAJLy8gVHJhbnNtaXR0ZWQgUGF1c2UgRnJhbWVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX0hSQjsgCS8vIEhhc2ggQWRkcmVzcyBCb3R0b21bMzE6MF0NCisJQVQ5MV9SRUcJIEVNQUNfSFJUOyAJLy8gSGFzaCBBZGRyZXNzIFRvcFs2MzozMl0NCisJQVQ5MV9SRUcJIEVNQUNfU0ExTDsgCS8vIFNwZWNpZmljIEFkZHJlc3MgMSBCb3R0b20sIEZpcnN0IDQgYnl0ZXMNCisJQVQ5MV9SRUcJIEVNQUNfU0ExSDsgCS8vIFNwZWNpZmljIEFkZHJlc3MgMSBUb3AsIExhc3QgMiBieXRlcw0KKwlBVDkxX1JFRwkgRU1BQ19TQTJMOyAJLy8gU3BlY2lmaWMgQWRkcmVzcyAyIEJvdHRvbSwgRmlyc3QgNCBieXRlcw0KKwlBVDkxX1JFRwkgRU1BQ19TQTJIOyAJLy8gU3BlY2lmaWMgQWRkcmVzcyAyIFRvcCwgTGFzdCAyIGJ5dGVzDQorCUFUOTFfUkVHCSBFTUFDX1NBM0w7IAkvLyBTcGVjaWZpYyBBZGRyZXNzIDMgQm90dG9tLCBGaXJzdCA0IGJ5dGVzDQorCUFUOTFfUkVHCSBFTUFDX1NBM0g7IAkvLyBTcGVjaWZpYyBBZGRyZXNzIDMgVG9wLCBMYXN0IDIgYnl0ZXMNCisJQVQ5MV9SRUcJIEVNQUNfU0E0TDsgCS8vIFNwZWNpZmljIEFkZHJlc3MgNCBCb3R0b20sIEZpcnN0IDQgYnl0ZXMNCisJQVQ5MV9SRUcJIEVNQUNfU0E0SDsgCS8vIFNwZWNpZmljIEFkZHJlc3MgNCBUb3AsIExhc3QgMiBieXRlcw0KKwlBVDkxX1JFRwkgRU1BQ19USUQ7IAkvLyBUeXBlIElEIENoZWNraW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX1RQUTsgCS8vIFRyYW5zbWl0IFBhdXNlIFF1YW50dW0gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfVVNSSU87IAkvLyBVU0VSIElucHV0L091dHB1dCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19XT0w7IAkvLyBXYWtlIE9uIExBTiBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzEzXTsgCS8vIA0KKwlBVDkxX1JFRwkgRU1BQ19SRVY7IAkvLyBSZXZpc2lvbiBSZWdpc3Rlcg0KK30gQVQ5MVNfRU1BQywgKkFUOTFQU19FTUFDOw0KIA0KLS8qIC0tLS0tLS0tIEVNQUNfTkNSIDogKEVNQUMgT2Zmc2V0OiAweDApICAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19MQiAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgLyogKEVNQUMpIExvb3BiYWNrLiBPcHRpb25hbC4gV2hlbiBzZXQsIGxvb3BiYWNrIHNpZ25hbCBpcyBhdCBoaWdoIGxldmVsLiAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19MTEIgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEgKSAgLyogKEVNQUMpIExvb3BiYWNrIGxvY2FsLiAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19SRSAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAgLyogKEVNQUMpIFJlY2VpdmUgZW5hYmxlLiAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19URSAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDMgKSAgLyogKEVNQUMpIFRyYW5zbWl0IGVuYWJsZS4gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfTVBFICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA0ICkgIC8qIChFTUFDKSBNYW5hZ2VtZW50IHBvcnQgZW5hYmxlLiAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19DTFJTVEFUICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDUgKSAgLyogKEVNQUMpIENsZWFyIHN0YXRpc3RpY3MgcmVnaXN0ZXJzLiAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19JTkNTVEFUICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDYgKSAgLyogKEVNQUMpIEluY3JlbWVudCBzdGF0aXN0aWNzIHJlZ2lzdGVycy4gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfV0VTVEFUICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA3ICkgIC8qIChFTUFDKSBXcml0ZSBlbmFibGUgZm9yIHN0YXRpc3RpY3MgcmVnaXN0ZXJzLiAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19CUCAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDggKSAgLyogKEVNQUMpIEJhY2sgcHJlc3N1cmUuICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1RTVEFSVCAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOSApICAvKiAoRU1BQykgU3RhcnQgVHJhbnNtaXNzaW9uLiAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19USEFMVCAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEwICkgLyogKEVNQUMpIFRyYW5zbWlzc2lvbiBIYWx0LiAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19UUEZSICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDExICkgLyogKEVNQUMpIFRyYW5zbWl0IHBhdXNlIGZyYW1lICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1RaUSAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTIgKSAvKiAoRU1BQykgVHJhbnNtaXQgemVybyBxdWFudHVtIHBhdXNlIGZyYW1lICovDQotLyogLS0tLS0tLS0gRU1BQ19OQ0ZHUiA6IChFTUFDIE9mZnNldDogMHg0KSBOZXR3b3JrIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfU1BEICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgIC8qIChFTUFDKSBTcGVlZC4gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfRkQgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgIC8qIChFTUFDKSBGdWxsIGR1cGxleC4gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfSkZSQU1FICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzICkgIC8qIChFTUFDKSBKdW1ibyBGcmFtZXMuICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0NBRiAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNCApICAvKiAoRU1BQykgQ29weSBhbGwgZnJhbWVzLiAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19OQkMgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDUgKSAgLyogKEVNQUMpIE5vIGJyb2FkY2FzdC4gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfTVRJICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA2ICkgIC8qIChFTUFDKSBNdWx0aWNhc3QgaGFzaCBldmVudCBlbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfVU5JICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA3ICkgIC8qIChFTUFDKSBVbmljYXN0IGhhc2ggZW5hYmxlLiAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19CSUcgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDggKSAgLyogKEVNQUMpIFJlY2VpdmUgMTUyMiBieXRlcy4gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfRUFFICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA5ICkgIC8qIChFTUFDKSBFeHRlcm5hbCBhZGRyZXNzIG1hdGNoIGVuYWJsZS4gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfQ0xLICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAxMCApIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0VNQUNfQ0xLX0hDTEtfOCAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDEwICkgLyogKEVNQUMpIEhDTEsgZGl2aWRlZCBieSA4ICovDQotI2RlZmluZSAgICAgQVQ5MUNfRU1BQ19DTEtfSENMS18xNiAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTAgKSAvKiAoRU1BQykgSENMSyBkaXZpZGVkIGJ5IDE2ICovDQotI2RlZmluZSAgICAgQVQ5MUNfRU1BQ19DTEtfSENMS18zMiAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgMTAgKSAvKiAoRU1BQykgSENMSyBkaXZpZGVkIGJ5IDMyICovDQotI2RlZmluZSAgICAgQVQ5MUNfRU1BQ19DTEtfSENMS182NCAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTAgKSAvKiAoRU1BQykgSENMSyBkaXZpZGVkIGJ5IDY0ICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1JUWSAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTIgKSAvKiAoRU1BQykgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfUEFFICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMyApIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19SQk9GICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDE0ICkgLyogKEVNQUMpICovDQotI2RlZmluZSAgICAgQVQ5MUNfRU1BQ19SQk9GX09GRlNFVF8wICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMTQgKSAvKiAoRU1BQykgbm8gb2Zmc2V0IGZyb20gc3RhcnQgb2YgcmVjZWl2ZSBidWZmZXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19FTUFDX1JCT0ZfT0ZGU0VUXzEgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNCApIC8qIChFTUFDKSBvbmUgYnl0ZSBvZmZzZXQgZnJvbSBzdGFydCBvZiByZWNlaXZlIGJ1ZmZlciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0VNQUNfUkJPRl9PRkZTRVRfMiAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDE0ICkgLyogKEVNQUMpIHR3byBieXRlcyBvZmZzZXQgZnJvbSBzdGFydCBvZiByZWNlaXZlIGJ1ZmZlciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0VNQUNfUkJPRl9PRkZTRVRfMyAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDE0ICkgLyogKEVNQUMpIHRocmVlIGJ5dGVzIG9mZnNldCBmcm9tIHN0YXJ0IG9mIHJlY2VpdmUgYnVmZmVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1JMQ0UgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTYgKSAvKiAoRU1BQykgUmVjZWl2ZSBMZW5ndGggZmllbGQgQ2hlY2tpbmcgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0RSRkNTICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTcgKSAvKiAoRU1BQykgRGlzY2FyZCBSZWNlaXZlIEZDUyAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19FRlJIRCAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE4ICkgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0lSWEZDUyAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTkgKSAvKiAoRU1BQykgSWdub3JlIFJYIEZDUyAqLw0KLS8qIC0tLS0tLS0tIEVNQUNfTlNSIDogKEVNQUMgT2Zmc2V0OiAweDgpIE5ldHdvcmsgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0xJTktSICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAvKiAoRU1BQykgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfTURJTyAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19JRExFICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAgLyogKEVNQUMpICovDQotLyogLS0tLS0tLS0gRU1BQ19UU1IgOiAoRU1BQyBPZmZzZXQ6IDB4MTQpIFRyYW5zbWl0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19VQlIgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0NPTCAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAvKiAoRU1BQykgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfUkxFUyAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyICkgIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19UR08gICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDMgKSAgLyogKEVNQUMpIFRyYW5zbWl0IEdvICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0JFWCAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNCApICAvKiAoRU1BQykgQnVmZmVycyBleGhhdXN0ZWQgbWlkIGZyYW1lICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0NPTVAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNSApICAvKiAoRU1BQykgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfVU5EICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA2ICkgIC8qIChFTUFDKSAqLw0KLS8qIC0tLS0tLS0tIEVNQUNfUlNSIDogKEVNQUMgT2Zmc2V0OiAweDIwKSBSZWNlaXZlIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19CTkEgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1JFQyAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAvKiAoRU1BQykgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfT1ZSICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyICkgIC8qIChFTUFDKSAqLw0KLS8qIC0tLS0tLS0tIEVNQUNfSVNSIDogKEVNQUMgT2Zmc2V0OiAweDI0KSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19FTUFDX01GRCAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAvKiAoRU1BQykgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfUkNPTVAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19SWFVCUiAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1RYVUJSICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMyApICAvKiAoRU1BQykgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfVFVORFIgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA0ICkgIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19STEVYICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDUgKSAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1RYRVJSICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNiApICAvKiAoRU1BQykgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfVENPTVAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA3ICkgIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19MSU5LICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDkgKSAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1JPVlIgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTAgKSAvKiAoRU1BQykgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfSFJFU1AgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMSApIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19QRlJFICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEyICkgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1BUWiAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTMgKSAvKiAoRU1BQykgKi8NCi0vKiAtLS0tLS0tLSBFTUFDX0lFUiA6IChFTUFDIE9mZnNldDogMHgyOCkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIEVNQUNfSURSIDogKEVNQUMgT2Zmc2V0OiAweDJjKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIEVNQUNfSU1SIDogKEVNQUMgT2Zmc2V0OiAweDMwKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIEVNQUNfTUFOIDogKEVNQUMgT2Zmc2V0OiAweDM0KSBQSFkgTWFpbnRlbmFuY2UgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfREFUQSAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRkZGIDw8IDAgKSAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0NPREUgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAxNiApICAgIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19SRUdBICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDFGIDw8IDE4ICkgICAvKiAoRU1BQykgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfUEhZQSAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxRiA8PCAyMyApICAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1JXICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAyOCApICAgIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19TT0YgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMzAgKSAgICAvKiAoRU1BQykgKi8NCi0vKiAtLS0tLS0tLSBFTUFDX1VTUklPIDogKEVNQUMgT2Zmc2V0OiAweGMwKSBVU0VSIElucHV0IE91dHB1dCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19STUlJICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgICAvKiAoRU1BQykgUmVkdWNlIE1JSSAqLw0KLS8qIC0tLS0tLS0tIEVNQUNfV09MIDogKEVNQUMgT2Zmc2V0OiAweGM0KSBXYWtlIE9uIExBTiBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19JUCAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGRkYgPDwgMCApICAvKiAoRU1BQykgQVJQIHJlcXVlc3QgSVAgYWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19NQUcgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTYgKSAgICAvKiAoRU1BQykgTWFnaWMgcGFja2V0IGV2ZW50IGVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19BUlAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTcgKSAgICAvKiAoRU1BQykgQVJQIHJlcXVlc3QgZXZlbnQgZW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1NBMSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxOCApICAgIC8qIChFTUFDKSBTcGVjaWZpYyBhZGRyZXNzIHJlZ2lzdGVyIDEgZXZlbnQgZW5hYmxlICovDQotLyogLS0tLS0tLS0gRU1BQ19SRVYgOiAoRU1BQyBPZmZzZXQ6IDB4ZmMpIFJldmlzaW9uIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1JFVlJFRiAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RkZGRiA8PCAwICkgIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19QQVJUUkVGICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGRkYgPDwgMTYgKSAvKiAoRU1BQykgKi8NCisvLyAtLS0tLS0tLSBFTUFDX05DUiA6IChFTUFDIE9mZnNldDogMHgwKSAgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19FTUFDX0xCICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKEVNQUMpIExvb3BiYWNrLiBPcHRpb25hbC4gV2hlbiBzZXQsIGxvb3BiYWNrIHNpZ25hbCBpcyBhdCBoaWdoIGxldmVsLg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19MTEIgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChFTUFDKSBMb29wYmFjayBsb2NhbC4gDQorI2RlZmluZSBBVDkxQ19FTUFDX1JFICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKEVNQUMpIFJlY2VpdmUgZW5hYmxlLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfVEUgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoRU1BQykgVHJhbnNtaXQgZW5hYmxlLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfTVBFICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoRU1BQykgTWFuYWdlbWVudCBwb3J0IGVuYWJsZS4gDQorI2RlZmluZSBBVDkxQ19FTUFDX0NMUlNUQVQgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKEVNQUMpIENsZWFyIHN0YXRpc3RpY3MgcmVnaXN0ZXJzLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfSU5DU1RBVCAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoRU1BQykgSW5jcmVtZW50IHN0YXRpc3RpY3MgcmVnaXN0ZXJzLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfV0VTVEFUICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoRU1BQykgV3JpdGUgZW5hYmxlIGZvciBzdGF0aXN0aWNzIHJlZ2lzdGVycy4gDQorI2RlZmluZSBBVDkxQ19FTUFDX0JQICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKEVNQUMpIEJhY2sgcHJlc3N1cmUuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19UU1RBUlQgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChFTUFDKSBTdGFydCBUcmFuc21pc3Npb24uIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19USEFMVCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChFTUFDKSBUcmFuc21pc3Npb24gSGFsdC4gDQorI2RlZmluZSBBVDkxQ19FTUFDX1RQRlIgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMSkgLy8gKEVNQUMpIFRyYW5zbWl0IHBhdXNlIGZyYW1lIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19UWlEgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8vIChFTUFDKSBUcmFuc21pdCB6ZXJvIHF1YW50dW0gcGF1c2UgZnJhbWUNCisvLyAtLS0tLS0tLSBFTUFDX05DRkdSIDogKEVNQUMgT2Zmc2V0OiAweDQpIE5ldHdvcmsgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0VNQUNfU1BEICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoRU1BQykgU3BlZWQuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19GRCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChFTUFDKSBGdWxsIGR1cGxleC4gDQorI2RlZmluZSBBVDkxQ19FTUFDX0pGUkFNRSAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKEVNQUMpIEp1bWJvIEZyYW1lcy4gDQorI2RlZmluZSBBVDkxQ19FTUFDX0NBRiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKEVNQUMpIENvcHkgYWxsIGZyYW1lcy4gDQorI2RlZmluZSBBVDkxQ19FTUFDX05CQyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKEVNQUMpIE5vIGJyb2FkY2FzdC4gDQorI2RlZmluZSBBVDkxQ19FTUFDX01USSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLy8gKEVNQUMpIE11bHRpY2FzdCBoYXNoIGV2ZW50IGVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19VTkkgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChFTUFDKSBVbmljYXN0IGhhc2ggZW5hYmxlLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfQklHICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoRU1BQykgUmVjZWl2ZSAxNTIyIGJ5dGVzLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfRUFFICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvLyAoRU1BQykgRXh0ZXJuYWwgYWRkcmVzcyBtYXRjaCBlbmFibGUuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19DTEsgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTApIC8vIChFTUFDKSANCisjZGVmaW5lIAlBVDkxQ19FTUFDX0NMS19IQ0xLXzggICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDEwKSAvLyAoRU1BQykgSENMSyBkaXZpZGVkIGJ5IDgNCisjZGVmaW5lIAlBVDkxQ19FTUFDX0NMS19IQ0xLXzE2ICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEwKSAvLyAoRU1BQykgSENMSyBkaXZpZGVkIGJ5IDE2DQorI2RlZmluZSAJQVQ5MUNfRU1BQ19DTEtfSENMS18zMiAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxMCkgLy8gKEVNQUMpIEhDTEsgZGl2aWRlZCBieSAzMg0KKyNkZWZpbmUgCUFUOTFDX0VNQUNfQ0xLX0hDTEtfNjQgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTApIC8vIChFTUFDKSBIQ0xLIGRpdmlkZWQgYnkgNjQNCisjZGVmaW5lIEFUOTFDX0VNQUNfUlRZICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1BBRSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMykgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SQk9GICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTQpIC8vIChFTUFDKSANCisjZGVmaW5lIAlBVDkxQ19FTUFDX1JCT0ZfT0ZGU0VUXzAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAxNCkgLy8gKEVNQUMpIG5vIG9mZnNldCBmcm9tIHN0YXJ0IG9mIHJlY2VpdmUgYnVmZmVyDQorI2RlZmluZSAJQVQ5MUNfRU1BQ19SQk9GX09GRlNFVF8xICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTQpIC8vIChFTUFDKSBvbmUgYnl0ZSBvZmZzZXQgZnJvbSBzdGFydCBvZiByZWNlaXZlIGJ1ZmZlcg0KKyNkZWZpbmUgCUFUOTFDX0VNQUNfUkJPRl9PRkZTRVRfMiAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDE0KSAvLyAoRU1BQykgdHdvIGJ5dGVzIG9mZnNldCBmcm9tIHN0YXJ0IG9mIHJlY2VpdmUgYnVmZmVyDQorI2RlZmluZSAJQVQ5MUNfRU1BQ19SQk9GX09GRlNFVF8zICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTQpIC8vIChFTUFDKSB0aHJlZSBieXRlcyBvZmZzZXQgZnJvbSBzdGFydCBvZiByZWNlaXZlIGJ1ZmZlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19STENFICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChFTUFDKSBSZWNlaXZlIExlbmd0aCBmaWVsZCBDaGVja2luZyBFbmFibGUNCisjZGVmaW5lIEFUOTFDX0VNQUNfRFJGQ1MgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE3KSAvLyAoRU1BQykgRGlzY2FyZCBSZWNlaXZlIEZDUw0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19FRlJIRCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTgpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfSVJYRkNTICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE5KSAvLyAoRU1BQykgSWdub3JlIFJYIEZDUw0KKy8vIC0tLS0tLS0tIEVNQUNfTlNSIDogKEVNQUMgT2Zmc2V0OiAweDgpIE5ldHdvcmsgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19MSU5LUiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfTURJTyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX0lETEUgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKEVNQUMpIA0KKy8vIC0tLS0tLS0tIEVNQUNfVFNSIDogKEVNQUMgT2Zmc2V0OiAweDE0KSBUcmFuc21pdCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19FTUFDX1VCUiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19DT0wgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUkxFUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1RHTyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKEVNQUMpIFRyYW5zbWl0IEdvDQorI2RlZmluZSBBVDkxQ19FTUFDX0JFWCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKEVNQUMpIEJ1ZmZlcnMgZXhoYXVzdGVkIG1pZCBmcmFtZQ0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19DT01QICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfVU5EICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoRU1BQykgDQorLy8gLS0tLS0tLS0gRU1BQ19SU1IgOiAoRU1BQyBPZmZzZXQ6IDB4MjApIFJlY2VpdmUgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19CTkEgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUkVDICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX09WUiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKEVNQUMpIA0KKy8vIC0tLS0tLS0tIEVNQUNfSVNSIDogKEVNQUMgT2Zmc2V0OiAweDI0KSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19NRkQgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUkNPTVAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1JYVUJSICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19UWFVCUiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfVFVORFIgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1JMRVggICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19UWEVSUiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfVENPTVAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX0xJTksgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19ST1ZSICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfSFJFU1AgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDExKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1BGUkUgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19QVFogICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTMpIC8vIChFTUFDKSANCisvLyAtLS0tLS0tLSBFTUFDX0lFUiA6IChFTUFDIE9mZnNldDogMHgyOCkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBFTUFDX0lEUiA6IChFTUFDIE9mZnNldDogMHgyYykgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gRU1BQ19JTVIgOiAoRU1BQyBPZmZzZXQ6IDB4MzApIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEVNQUNfTUFOIDogKEVNQUMgT2Zmc2V0OiAweDM0KSBQSFkgTWFpbnRlbmFuY2UgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19FTUFDX0RBVEEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGRiA8PCAgMCkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19DT0RFICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTYpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUkVHQSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxRiA8PCAxOCkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19QSFlBICAgICAgICgodW5zaWduZWQgaW50KSAweDFGIDw8IDIzKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1JXICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyOCkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TT0YgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMzApIC8vIChFTUFDKSANCisvLyAtLS0tLS0tLSBFTUFDX1VTUklPIDogKEVNQUMgT2Zmc2V0OiAweGMwKSBVU0VSIElucHV0IE91dHB1dCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUk1JSSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoRU1BQykgUmVkdWNlIE1JSQ0KKy8vIC0tLS0tLS0tIEVNQUNfV09MIDogKEVNQUMgT2Zmc2V0OiAweGM0KSBXYWtlIE9uIExBTiBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0VNQUNfSVAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRkZGIDw8ICAwKSAvLyAoRU1BQykgQVJQIHJlcXVlc3QgSVAgYWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19NQUcgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChFTUFDKSBNYWdpYyBwYWNrZXQgZXZlbnQgZW5hYmxlDQorI2RlZmluZSBBVDkxQ19FTUFDX0FSUCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNykgLy8gKEVNQUMpIEFSUCByZXF1ZXN0IGV2ZW50IGVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TQTEgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTgpIC8vIChFTUFDKSBTcGVjaWZpYyBhZGRyZXNzIHJlZ2lzdGVyIDEgZXZlbnQgZW5hYmxlDQorLy8gLS0tLS0tLS0gRU1BQ19SRVYgOiAoRU1BQyBPZmZzZXQ6IDB4ZmMpIFJldmlzaW9uIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SRVZSRUYgICAgICgodW5zaWduZWQgaW50KSAweEZGRkYgPDwgIDApIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUEFSVFJFRiAgICAoKHVuc2lnbmVkIGludCkgMHhGRkZGIDw8IDE2KSAvLyAoRU1BQykgDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBBbmFsb2cgdG8gRGlnaXRhbCBDb252ZXJ0b3IgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLXR5cGVkZWYgc3RydWN0IF9BVDkxU19BREMNCi17DQotICAgIEFUOTFfUkVHIEFEQ19DUjsgICAgICAgICAgLyogQURDIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQURDX01SOyAgICAgICAgICAvKiBBREMgTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDBbIDIgXTsgIC8qICovDQotICAgIEFUOTFfUkVHIEFEQ19DSEVSOyAgICAgICAgLyogQURDIENoYW5uZWwgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFEQ19DSERSOyAgICAgICAgLyogQURDIENoYW5uZWwgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBRENfQ0hTUjsgICAgICAgIC8qIEFEQyBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBRENfU1I7ICAgICAgICAgIC8qIEFEQyBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQURDX0xDRFI7ICAgICAgICAvKiBBREMgTGFzdCBDb252ZXJ0ZWQgRGF0YSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBRENfSUVSOyAgICAgICAgIC8qIEFEQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFEQ19JRFI7ICAgICAgICAgLyogQURDIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFEQ19JTVI7ICAgICAgICAgLyogQURDIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFEQ19DRFIwOyAgICAgICAgLyogQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAwICovDQotICAgIEFUOTFfUkVHIEFEQ19DRFIxOyAgICAgICAgLyogQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAxICovDQotICAgIEFUOTFfUkVHIEFEQ19DRFIyOyAgICAgICAgLyogQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAyICovDQotICAgIEFUOTFfUkVHIEFEQ19DRFIzOyAgICAgICAgLyogQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAzICovDQotICAgIEFUOTFfUkVHIEFEQ19DRFI0OyAgICAgICAgLyogQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA0ICovDQotICAgIEFUOTFfUkVHIEFEQ19DRFI1OyAgICAgICAgLyogQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA1ICovDQotICAgIEFUOTFfUkVHIEFEQ19DRFI2OyAgICAgICAgLyogQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA2ICovDQotICAgIEFUOTFfUkVHIEFEQ19DRFI3OyAgICAgICAgLyogQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA3ICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMVsgNDQgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgQURDX1JQUjsgICAgICAgICAvKiBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQURDX1JDUjsgICAgICAgICAvKiBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQURDX1RQUjsgICAgICAgICAvKiBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFEQ19UQ1I7ICAgICAgICAgLyogVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBRENfUk5QUjsgICAgICAgIC8qIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFEQ19STkNSOyAgICAgICAgLyogUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQURDX1ROUFI7ICAgICAgICAvKiBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQURDX1ROQ1I7ICAgICAgICAvKiBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQURDX1BUQ1I7ICAgICAgICAvKiBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBRENfUFRTUjsgICAgICAgIC8qIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi19IEFUOTFTX0FEQywgKiBBVDkxUFNfQURDOw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQW5hbG9nIHRvIERpZ2l0YWwgQ29udmVydG9yDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfQURDIHsNCisJQVQ5MV9SRUcJIEFEQ19DUjsgCS8vIEFEQyBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfTVI7IAkvLyBBREMgTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzJdOyAJLy8gDQorCUFUOTFfUkVHCSBBRENfQ0hFUjsgCS8vIEFEQyBDaGFubmVsIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX0NIRFI7IAkvLyBBREMgQ2hhbm5lbCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfQ0hTUjsgCS8vIEFEQyBDaGFubmVsIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX1NSOyAJLy8gQURDIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX0xDRFI7IAkvLyBBREMgTGFzdCBDb252ZXJ0ZWQgRGF0YSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX0lFUjsgCS8vIEFEQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfSURSOyAJLy8gQURDIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfSU1SOyAJLy8gQURDIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfQ0RSMDsgCS8vIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMA0KKwlBVDkxX1JFRwkgQURDX0NEUjE7IAkvLyBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDENCisJQVQ5MV9SRUcJIEFEQ19DRFIyOyAJLy8gQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAyDQorCUFUOTFfUkVHCSBBRENfQ0RSMzsgCS8vIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMw0KKwlBVDkxX1JFRwkgQURDX0NEUjQ7IAkvLyBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDQNCisJQVQ5MV9SRUcJIEFEQ19DRFI1OyAJLy8gQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA1DQorCUFUOTFfUkVHCSBBRENfQ0RSNjsgCS8vIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNg0KKwlBVDkxX1JFRwkgQURDX0NEUjc7IAkvLyBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDcNCisJQVQ5MV9SRUcJIFJlc2VydmVkMVs0NF07IAkvLyANCisJQVQ5MV9SRUcJIEFEQ19SUFI7IAkvLyBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19SQ1I7IAkvLyBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19UUFI7IAkvLyBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfVENSOyAJLy8gVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX1JOUFI7IAkvLyBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX1JOQ1I7IAkvLyBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX1ROUFI7IAkvLyBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19UTkNSOyAJLy8gVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfUFRDUjsgCS8vIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfUFRTUjsgCS8vIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCit9IEFUOTFTX0FEQywgKkFUOTFQU19BREM7DQogDQotLyogLS0tLS0tLS0gQURDX0NSIDogKEFEQyBPZmZzZXQ6IDB4MCkgQURDIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19TV1JTVCAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgICAvKiAoQURDKSBTb2Z0d2FyZSBSZXNldCAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1NUQVJUICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEgKSAgIC8qIChBREMpIFN0YXJ0IENvbnZlcnNpb24gKi8NCi0vKiAtLS0tLS0tLSBBRENfTVIgOiAoQURDIE9mZnNldDogMHg0KSBBREMgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1RSR0VOICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgIC8qIChBREMpIFRyaWdnZXIgRW5hYmxlICovDQotI2RlZmluZSAgICAgQVQ5MUNfQURDX1RSR0VOX0RJUyAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgKSAgICAgICAgLyogKEFEQykgSHJhZHdhcmUgdHJpZ2dlcnMgYXJlIGRpc2FibGVkLiBTdGFydGluZyBhIGNvbnZlcnNpb24gaXMgb25seSBwb3NzaWJsZSBieSBzb2Z0d2FyZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FEQ19UUkdFTl9FTiAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxICkgICAgICAgIC8qIChBREMpIEhhcmR3YXJlIHRyaWdnZXIgc2VsZWN0ZWQgYnkgVFJHU0VMIGZpZWxkIGlzIGVuYWJsZWQuICovDQotI2RlZmluZSBBVDkxQ19BRENfVFJHU0VMICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDcgPDwgMSApICAgLyogKEFEQykgVHJpZ2dlciBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRENfVFJHU0VMX1RJT0EwICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAxICkgICAvKiAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPMCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FEQ19UUkdTRUxfVElPQTEgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEgKSAgIC8qIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IFRJQU8xICovDQotI2RlZmluZSAgICAgQVQ5MUNfQURDX1RSR1NFTF9USU9BMiAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgMSApICAgLyogKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gVElBTzIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRENfVFJHU0VMX1RJT0EzICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAxICkgICAvKiAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPMyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FEQ19UUkdTRUxfVElPQTQgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg0IDw8IDEgKSAgIC8qIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IFRJQU80ICovDQotI2RlZmluZSAgICAgQVQ5MUNfQURDX1RSR1NFTF9USU9BNSAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDUgPDwgMSApICAgLyogKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gVElBTzUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRENfVFJHU0VMX0VYVCAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NiA8PCAxICkgICAvKiAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBFeHRlcm5hbCBUcmlnZ2VyICovDQotI2RlZmluZSBBVDkxQ19BRENfTE9XUkVTICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNCApICAgLyogKEFEQykgUmVzb2x1dGlvbi4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRENfTE9XUkVTXzEwX0JJVCAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCA0ICkgICAvKiAoQURDKSAxMC1iaXQgcmVzb2x1dGlvbiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FEQ19MT1dSRVNfOF9CSVQgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDQgKSAgIC8qIChBREMpIDgtYml0IHJlc29sdXRpb24gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19TTEVFUCAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA1ICkgICAvKiAoQURDKSBTbGVlcCBNb2RlICovDQotI2RlZmluZSAgICAgQVQ5MUNfQURDX1NMRUVQX05PUk1BTF9NT0RFICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgNSApICAgLyogKEFEQykgTm9ybWFsIE1vZGUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRENfU0xFRVBfTU9ERSAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA1ICkgICAvKiAoQURDKSBTbGVlcCBNb2RlICovDQotI2RlZmluZSBBVDkxQ19BRENfUFJFU0NBTCAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDNGIDw8IDggKSAgLyogKEFEQykgUHJlc2NhbGVyIHJhdGUgc2VsZWN0aW9uICovDQotI2RlZmluZSBBVDkxQ19BRENfU1RBUlRVUCAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDFGIDw8IDE2ICkgLyogKEFEQykgU3RhcnR1cCBUaW1lICovDQotI2RlZmluZSBBVDkxQ19BRENfU0hUSU0gICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEYgPDwgMjQgKSAgLyogKEFEQykgU2FtcGxlICYgSG9sZCBUaW1lICovDQotLyogLS0tLS0tLS0gICAgIEFEQ19DSEVSIDogKEFEQyBPZmZzZXQ6IDB4MTApIEFEQyBDaGFubmVsIEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NIMCAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgIC8qIChBREMpIENoYW5uZWwgMCAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NIMSAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEgKSAgIC8qIChBREMpIENoYW5uZWwgMSAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NIMiAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAgIC8qIChBREMpIENoYW5uZWwgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NIMyAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDMgKSAgIC8qIChBREMpIENoYW5uZWwgMyAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NINCAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDQgKSAgIC8qIChBREMpIENoYW5uZWwgNCAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NINSAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDUgKSAgIC8qIChBREMpIENoYW5uZWwgNSAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NINiAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDYgKSAgIC8qIChBREMpIENoYW5uZWwgNiAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NINyAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDcgKSAgIC8qIChBREMpIENoYW5uZWwgNyAqLw0KLS8qIC0tLS0tLS0tICAgICBBRENfQ0hEUiA6IChBREMgT2Zmc2V0OiAweDE0KSBBREMgQ2hhbm5lbCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gICAgIEFEQ19DSFNSIDogKEFEQyBPZmZzZXQ6IDB4MTgpIEFEQyBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIEFEQ19TUiA6IChBREMgT2Zmc2V0OiAweDFjKSBBREMgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19BRENfRU9DMCAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgLyogKEFEQykgRW5kIG9mIENvbnZlcnNpb24gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19FT0MxICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgICAvKiAoQURDKSBFbmQgb2YgQ29udmVyc2lvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0VPQzIgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAgIC8qIChBREMpIEVuZCBvZiBDb252ZXJzaW9uICovDQotI2RlZmluZSBBVDkxQ19BRENfRU9DMyAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMyApICAgLyogKEFEQykgRW5kIG9mIENvbnZlcnNpb24gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19FT0M0ICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA0ICkgICAvKiAoQURDKSBFbmQgb2YgQ29udmVyc2lvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0VPQzUgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDUgKSAgIC8qIChBREMpIEVuZCBvZiBDb252ZXJzaW9uICovDQotI2RlZmluZSBBVDkxQ19BRENfRU9DNiAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNiApICAgLyogKEFEQykgRW5kIG9mIENvbnZlcnNpb24gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19FT0M3ICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA3ICkgICAvKiAoQURDKSBFbmQgb2YgQ29udmVyc2lvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX09WUkUwICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDggKSAgIC8qIChBREMpIE92ZXJydW4gRXJyb3IgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19PVlJFMSAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA5ICkgICAvKiAoQURDKSBPdmVycnVuIEVycm9yICovDQotI2RlZmluZSBBVDkxQ19BRENfT1ZSRTIgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTAgKSAgLyogKEFEQykgT3ZlcnJ1biBFcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX09WUkUzICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDExICkgIC8qIChBREMpIE92ZXJydW4gRXJyb3IgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19PVlJFNCAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMiApICAvKiAoQURDKSBPdmVycnVuIEVycm9yICovDQotI2RlZmluZSBBVDkxQ19BRENfT1ZSRTUgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTMgKSAgLyogKEFEQykgT3ZlcnJ1biBFcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX09WUkU2ICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE0ICkgIC8qIChBREMpIE92ZXJydW4gRXJyb3IgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19PVlJFNyAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNSApICAvKiAoQURDKSBPdmVycnVuIEVycm9yICovDQotI2RlZmluZSBBVDkxQ19BRENfRFJEWSAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTYgKSAgLyogKEFEQykgRGF0YSBSZWFkeSAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0dPVlJFICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE3ICkgIC8qIChBREMpIEdlbmVyYWwgT3ZlcnJ1biAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0VORFJYICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE4ICkgIC8qIChBREMpIEVuZCBvZiBSZWNlaXZlciBUcmFuc2ZlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1JYQlVGRiAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE5ICkgIC8qIChBREMpIFJYQlVGRiBJbnRlcnJ1cHQgKi8NCi0vKiAtLS0tLS0tLSBBRENfTENEUiA6IChBREMgT2Zmc2V0OiAweDIwKSBBREMgTGFzdCBDb252ZXJ0ZWQgRGF0YSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0xEQVRBICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzRkYgPDwgMCApIC8qIChBREMpIExhc3QgRGF0YSBDb252ZXJ0ZWQgKi8NCi0vKiAtLS0tLS0tLSBBRENfSUVSIDogKEFEQyBPZmZzZXQ6IDB4MjQpIEFEQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQURDX0lEUiA6IChBREMgT2Zmc2V0OiAweDI4KSBBREMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBBRENfSU1SIDogKEFEQyBPZmZzZXQ6IDB4MmMpIEFEQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIEFEQ19DRFIwIDogKEFEQyBPZmZzZXQ6IDB4MzApIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMCAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0RBVEEgICAgKCAoIHVuc2lnbmVkIGludCApIDB4M0ZGIDw8IDAgKSAgLyogKEFEQykgQ29udmVydGVkIERhdGEgKi8NCi0vKiAtLS0tLS0tLSBBRENfQ0RSMSA6IChBREMgT2Zmc2V0OiAweDM0KSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDEgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBBRENfQ0RSMiA6IChBREMgT2Zmc2V0OiAweDM4KSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBBRENfQ0RSMyA6IChBREMgT2Zmc2V0OiAweDNjKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDMgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBBRENfQ0RSNCA6IChBREMgT2Zmc2V0OiAweDQwKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDQgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBBRENfQ0RSNSA6IChBREMgT2Zmc2V0OiAweDQ0KSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDUgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBBRENfQ0RSNiA6IChBREMgT2Zmc2V0OiAweDQ4KSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDYgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBBRENfQ0RSNyA6IChBREMgT2Zmc2V0OiAweDRjKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDcgLS0tLS0tLS0gKi8NCisvLyAtLS0tLS0tLSBBRENfQ1IgOiAoQURDIE9mZnNldDogMHgwKSBBREMgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FEQ19TV1JTVCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoQURDKSBTb2Z0d2FyZSBSZXNldA0KKyNkZWZpbmUgQVQ5MUNfQURDX1NUQVJUICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChBREMpIFN0YXJ0IENvbnZlcnNpb24NCisvLyAtLS0tLS0tLSBBRENfTVIgOiAoQURDIE9mZnNldDogMHg0KSBBREMgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FEQ19UUkdFTiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoQURDKSBUcmlnZ2VyIEVuYWJsZQ0KKyNkZWZpbmUgCUFUOTFDX0FEQ19UUkdFTl9ESVMgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwKSAvLyAoQURDKSBIcmFkd2FyZSB0cmlnZ2VycyBhcmUgZGlzYWJsZWQuIFN0YXJ0aW5nIGEgY29udmVyc2lvbiBpcyBvbmx5IHBvc3NpYmxlIGJ5IHNvZnR3YXJlDQorI2RlZmluZSAJQVQ5MUNfQURDX1RSR0VOX0VOICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEpIC8vIChBREMpIEhhcmR3YXJlIHRyaWdnZXIgc2VsZWN0ZWQgYnkgVFJHU0VMIGZpZWxkIGlzIGVuYWJsZWQuDQorI2RlZmluZSBBVDkxQ19BRENfVFJHU0VMICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAgMSkgLy8gKEFEQykgVHJpZ2dlciBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19BRENfVFJHU0VMX1RJT0EwICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDEpIC8vIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IFRJQU8wDQorI2RlZmluZSAJQVQ5MUNfQURDX1RSR1NFTF9USU9BMSAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPMQ0KKyNkZWZpbmUgCUFUOTFDX0FEQ19UUkdTRUxfVElPQTIgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgMSkgLy8gKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gVElBTzINCisjZGVmaW5lIAlBVDkxQ19BRENfVFJHU0VMX1RJT0EzICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDEpIC8vIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IFRJQU8zDQorI2RlZmluZSAJQVQ5MUNfQURDX1RSR1NFTF9USU9BNCAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg0IDw8ICAxKSAvLyAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPNA0KKyNkZWZpbmUgCUFUOTFDX0FEQ19UUkdTRUxfVElPQTUgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NSA8PCAgMSkgLy8gKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gVElBTzUNCisjZGVmaW5lIAlBVDkxQ19BRENfVFJHU0VMX0VYVCAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDYgPDwgIDEpIC8vIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IEV4dGVybmFsIFRyaWdnZXINCisjZGVmaW5lIEFUOTFDX0FEQ19MT1dSRVMgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoQURDKSBSZXNvbHV0aW9uLg0KKyNkZWZpbmUgCUFUOTFDX0FEQ19MT1dSRVNfMTBfQklUICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgNCkgLy8gKEFEQykgMTAtYml0IHJlc29sdXRpb24NCisjZGVmaW5lIAlBVDkxQ19BRENfTE9XUkVTXzhfQklUICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChBREMpIDgtYml0IHJlc29sdXRpb24NCisjZGVmaW5lIEFUOTFDX0FEQ19TTEVFUCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoQURDKSBTbGVlcCBNb2RlDQorI2RlZmluZSAJQVQ5MUNfQURDX1NMRUVQX05PUk1BTF9NT0RFICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDUpIC8vIChBREMpIE5vcm1hbCBNb2RlDQorI2RlZmluZSAJQVQ5MUNfQURDX1NMRUVQX01PREUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChBREMpIFNsZWVwIE1vZGUNCisjZGVmaW5lIEFUOTFDX0FEQ19QUkVTQ0FMICAgICAoKHVuc2lnbmVkIGludCkgMHgzRiA8PCAgOCkgLy8gKEFEQykgUHJlc2NhbGVyIHJhdGUgc2VsZWN0aW9uDQorI2RlZmluZSBBVDkxQ19BRENfU1RBUlRVUCAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MUYgPDwgMTYpIC8vIChBREMpIFN0YXJ0dXAgVGltZQ0KKyNkZWZpbmUgQVQ5MUNfQURDX1NIVElNICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgMjQpIC8vIChBREMpIFNhbXBsZSAmIEhvbGQgVGltZQ0KKy8vIC0tLS0tLS0tIAlBRENfQ0hFUiA6IChBREMgT2Zmc2V0OiAweDEwKSBBREMgQ2hhbm5lbCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BRENfQ0gwICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKEFEQykgQ2hhbm5lbCAwDQorI2RlZmluZSBBVDkxQ19BRENfQ0gxICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKEFEQykgQ2hhbm5lbCAxDQorI2RlZmluZSBBVDkxQ19BRENfQ0gyICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKEFEQykgQ2hhbm5lbCAyDQorI2RlZmluZSBBVDkxQ19BRENfQ0gzICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKEFEQykgQ2hhbm5lbCAzDQorI2RlZmluZSBBVDkxQ19BRENfQ0g0ICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKEFEQykgQ2hhbm5lbCA0DQorI2RlZmluZSBBVDkxQ19BRENfQ0g1ICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKEFEQykgQ2hhbm5lbCA1DQorI2RlZmluZSBBVDkxQ19BRENfQ0g2ICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLy8gKEFEQykgQ2hhbm5lbCA2DQorI2RlZmluZSBBVDkxQ19BRENfQ0g3ICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKEFEQykgQ2hhbm5lbCA3DQorLy8gLS0tLS0tLS0gCUFEQ19DSERSIDogKEFEQyBPZmZzZXQ6IDB4MTQpIEFEQyBDaGFubmVsIERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gCUFEQ19DSFNSIDogKEFEQyBPZmZzZXQ6IDB4MTgpIEFEQyBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRENfU1IgOiAoQURDIE9mZnNldDogMHgxYykgQURDIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FEQ19FT0MwICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoQURDKSBFbmQgb2YgQ29udmVyc2lvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX0VPQzEgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19BRENfRU9DMiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKEFEQykgRW5kIG9mIENvbnZlcnNpb24NCisjZGVmaW5lIEFUOTFDX0FEQ19FT0MzICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoQURDKSBFbmQgb2YgQ29udmVyc2lvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX0VPQzQgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19BRENfRU9DNSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKEFEQykgRW5kIG9mIENvbnZlcnNpb24NCisjZGVmaW5lIEFUOTFDX0FEQ19FT0M2ICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoQURDKSBFbmQgb2YgQ29udmVyc2lvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX0VPQzcgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19BRENfT1ZSRTAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKEFEQykgT3ZlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQURDX09WUkUxICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChBREMpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX0FEQ19PVlJFMiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEwKSAvLyAoQURDKSBPdmVycnVuIEVycm9yDQorI2RlZmluZSBBVDkxQ19BRENfT1ZSRTMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMSkgLy8gKEFEQykgT3ZlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQURDX09WUkU0ICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8vIChBREMpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX0FEQ19PVlJFNSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEzKSAvLyAoQURDKSBPdmVycnVuIEVycm9yDQorI2RlZmluZSBBVDkxQ19BRENfT1ZSRTYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNCkgLy8gKEFEQykgT3ZlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQURDX09WUkU3ICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTUpIC8vIChBREMpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX0FEQ19EUkRZICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoQURDKSBEYXRhIFJlYWR5DQorI2RlZmluZSBBVDkxQ19BRENfR09WUkUgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNykgLy8gKEFEQykgR2VuZXJhbCBPdmVycnVuDQorI2RlZmluZSBBVDkxQ19BRENfRU5EUlggICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOCkgLy8gKEFEQykgRW5kIG9mIFJlY2VpdmVyIFRyYW5zZmVyDQorI2RlZmluZSBBVDkxQ19BRENfUlhCVUZGICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOSkgLy8gKEFEQykgUlhCVUZGIEludGVycnVwdA0KKy8vIC0tLS0tLS0tIEFEQ19MQ0RSIDogKEFEQyBPZmZzZXQ6IDB4MjApIEFEQyBMYXN0IENvbnZlcnRlZCBEYXRhIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQURDX0xEQVRBICAgICAgICgodW5zaWduZWQgaW50KSAweDNGRiA8PCAgMCkgLy8gKEFEQykgTGFzdCBEYXRhIENvbnZlcnRlZA0KKy8vIC0tLS0tLS0tIEFEQ19JRVIgOiAoQURDIE9mZnNldDogMHgyNCkgQURDIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX0lEUiA6IChBREMgT2Zmc2V0OiAweDI4KSBBREMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX0lNUiA6IChBREMgT2Zmc2V0OiAweDJjKSBBREMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX0NEUjAgOiAoQURDIE9mZnNldDogMHgzMCkgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAwIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQURDX0RBVEEgICAgICAgICgodW5zaWduZWQgaW50KSAweDNGRiA8PCAgMCkgLy8gKEFEQykgQ29udmVydGVkIERhdGENCisvLyAtLS0tLS0tLSBBRENfQ0RSMSA6IChBREMgT2Zmc2V0OiAweDM0KSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDEgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX0NEUjIgOiAoQURDIE9mZnNldDogMHgzOCkgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19DRFIzIDogKEFEQyBPZmZzZXQ6IDB4M2MpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMyAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRENfQ0RSNCA6IChBREMgT2Zmc2V0OiAweDQwKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDQgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX0NEUjUgOiAoQURDIE9mZnNldDogMHg0NCkgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA1IC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19DRFI2IDogKEFEQyBPZmZzZXQ6IDB4NDgpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNiAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRENfQ0RSNyA6IChBREMgT2Zmc2V0OiAweDRjKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDcgLS0tLS0tLS0gDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBBZHZhbmNlZCAgRW5jcnlwdGlvbiBTdGFuZGFyZCAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotdHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX0FFUw0KLXsNCi0gICAgQVQ5MV9SRUcgQUVTX0NSOyAgICAgICAgICAgLyogQ29udHJvbCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBRVNfTVI7ICAgICAgICAgICAvKiBNb2RlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMFsgMiBdOyAgIC8qICovDQotICAgIEFUOTFfUkVHIEFFU19JRVI7ICAgICAgICAgIC8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUVTX0lEUjsgICAgICAgICAgLyogSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUVTX0lNUjsgICAgICAgICAgLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUVTX0lTUjsgICAgICAgICAgLyogSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBRVNfS0VZV3hSWyA0IF07ICAvKiBLZXkgV29yZCB4IFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMVsgNCBdOyAgIC8qICovDQotICAgIEFUOTFfUkVHIEFFU19JREFUQXhSWyA0IF07IC8qIElucHV0IERhdGEgeCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBRVNfT0RBVEF4UlsgNCBdOyAvKiBPdXRwdXQgRGF0YSB4IFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFFU19JVnhSWyA0IF07ICAgIC8qIEluaXRpYWxpemF0aW9uIFZlY3RvciB4IFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMlsgMzUgXTsgIC8qICovDQotICAgIEFUOTFfUkVHIEFFU19WUjsgICAgICAgICAgIC8qIEFFUyBWZXJzaW9uIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFFU19SUFI7ICAgICAgICAgIC8qIFJlY2VpdmUgUG9pbnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBRVNfUkNSOyAgICAgICAgICAvKiBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUVTX1RQUjsgICAgICAgICAgLyogVHJhbnNtaXQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBRVNfVENSOyAgICAgICAgICAvKiBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFFU19STlBSOyAgICAgICAgIC8qIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFFU19STkNSOyAgICAgICAgIC8qIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFFU19UTlBSOyAgICAgICAgIC8qIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBRVNfVE5DUjsgICAgICAgICAvKiBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUVTX1BUQ1I7ICAgICAgICAgLyogUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUVTX1BUU1I7ICAgICAgICAgLyogUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLX0gQVQ5MVNfQUVTLCAqIEFUOTFQU19BRVM7DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBBZHZhbmNlZCAgRW5jcnlwdGlvbiBTdGFuZGFyZA0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX0FFUyB7DQorCUFUOTFfUkVHCSBBRVNfQ1I7IAkvLyBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRVNfTVI7IAkvLyBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbMl07IAkvLyANCisJQVQ5MV9SRUcJIEFFU19JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRVNfSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFFU19JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUVTX0lTUjsgCS8vIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFFU19LRVlXeFJbNF07IAkvLyBLZXkgV29yZCB4IFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbNF07IAkvLyANCisJQVQ5MV9SRUcJIEFFU19JREFUQXhSWzRdOyAJLy8gSW5wdXQgRGF0YSB4IFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRVNfT0RBVEF4Uls0XTsgCS8vIE91dHB1dCBEYXRhIHggUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFFU19JVnhSWzRdOyAJLy8gSW5pdGlhbGl6YXRpb24gVmVjdG9yIHggUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMlszNV07IAkvLyANCisJQVQ5MV9SRUcJIEFFU19WUjsgCS8vIEFFUyBWZXJzaW9uIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRVNfUlBSOyAJLy8gUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRVNfUkNSOyAJLy8gUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRVNfVFBSOyAJLy8gVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUVTX1RDUjsgCS8vIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFFU19STlBSOyAJLy8gUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFFU19STkNSOyAJLy8gUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFFU19UTlBSOyAJLy8gVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRVNfVE5DUjsgCS8vIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUVTX1BUQ1I7IAkvLyBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUVTX1BUU1I7IAkvLyBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorfSBBVDkxU19BRVMsICpBVDkxUFNfQUVTOw0KIA0KLS8qIC0tLS0tLS0tIEFFU19DUiA6IChBRVMgT2Zmc2V0OiAweDApIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19TVEFSVCAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgICAvKiAoQUVTKSBTdGFydHMgUHJvY2Vzc2luZyAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX1NXUlNUICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDggKSAgIC8qIChBRVMpIFNvZnR3YXJlIFJlc2V0ICovDQotI2RlZmluZSBBVDkxQ19BRVNfTE9BRFNFRUQgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTYgKSAgLyogKEFFUykgUmFuZG9tIE51bWJlciBHZW5lcmF0b3IgU2VlZCBMb2FkaW5nICovDQotLyogLS0tLS0tLS0gQUVTX01SIDogKEFFUyBPZmZzZXQ6IDB4NCkgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX0NJUEhFUiAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgIC8qIChBRVMpIFByb2Nlc3NpbmcgTW9kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX1BST0NETFkgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGIDw8IDQgKSAgIC8qIChBRVMpIFByb2Nlc3NpbmcgRGVsYXkgKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19TTU9EICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCA4ICkgICAvKiAoQUVTKSBTdGFydCBNb2RlICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUVTX1NNT0RfTUFOVUFMICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgOCApICAgLyogKEFFUykgTWFudWFsIE1vZGU6IFRoZSBTVEFSVCBiaXQgaW4gcmVnaXN0ZXIgQUVTX0NSIG11c3QgYmUgc2V0IHRvIGJlZ2luIGVuY3J5cHRpb24gb3IgZGVjcnlwdGlvbi4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfU01PRF9BVVRPICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgICAvKiAoQUVTKSBBdXRvIE1vZGU6IG5vIGFjdGlvbiBpbiBBRVNfQ1IgaXMgbmVjZXNzYXJ5IChjZiBkYXRhc2hlZXQpLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FFU19TTU9EX1BEQyAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDggKSAgIC8qIChBRVMpIFBEQyBNb2RlIChjZiBkYXRhc2hlZXQpLiAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX09QTU9EICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg3IDw8IDEyICkgIC8qIChBRVMpIE9wZXJhdGlvbiBNb2RlICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUVTX09QTU9EX0VDQiAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMTIgKSAgLyogKEFFUykgRUNCIEVsZWN0cm9uaWMgQ29kZUJvb2sgbW9kZS4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfT1BNT0RfQ0JDICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMiApICAvKiAoQUVTKSBDQkMgQ2lwaGVyIEJsb2NrIENoYWluaW5nIG1vZGUuICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUVTX09QTU9EX09GQiAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgMTIgKSAgLyogKEFFUykgT0ZCIE91dHB1dCBGZWVkYmFjayBtb2RlLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FFU19PUE1PRF9DRkIgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDEyICkgIC8qIChBRVMpIENGQiBDaXBoZXIgRmVlZGJhY2sgbW9kZS4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfT1BNT0RfQ1RSICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NCA8PCAxMiApICAvKiAoQUVTKSBDVFIgQ291bnRlciBtb2RlLiAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX0xPRCAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE1ICkgIC8qIChBRVMpIExhc3QgT3V0cHV0IERhdGEgTW9kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX0NGQlMgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg3IDw8IDE2ICkgIC8qIChBRVMpIENpcGhlciBGZWVkYmFjayBEYXRhIFNpemUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfQ0ZCU18xMjhfQklUICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAxNiApICAvKiAoQUVTKSAxMjgtYml0LiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FFU19DRkJTXzY0X0JJVCAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE2ICkgIC8qIChBRVMpIDY0LWJpdC4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfQ0ZCU18zMl9CSVQgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCAxNiApICAvKiAoQUVTKSAzMi1iaXQuICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUVTX0NGQlNfMTZfQklUICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTYgKSAgLyogKEFFUykgMTYtYml0LiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FFU19DRkJTXzhfQklUICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg0IDw8IDE2ICkgIC8qIChBRVMpIDgtYml0LiAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX0NLRVkgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGIDw8IDIwICkgIC8qIChBRVMpIENvdW50ZXJtZWFzdXJlIEtleSAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX0NUWVBFICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxRiA8PCAyNCApIC8qIChBRVMpIENvdW50ZXJtZWFzdXJlIFR5cGUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfQ1RZUEVfVFlQRTFfRU4gICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyNCApICAvKiAoQUVTKSBDb3VudGVybWVhc3VyZSB0eXBlIDEgaXMgZW5hYmxlZC4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfQ1RZUEVfVFlQRTJfRU4gICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCAyNCApICAvKiAoQUVTKSBDb3VudGVybWVhc3VyZSB0eXBlIDIgaXMgZW5hYmxlZC4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfQ1RZUEVfVFlQRTNfRU4gICAgKCAoIHVuc2lnbmVkIGludCApIDB4NCA8PCAyNCApICAvKiAoQUVTKSBDb3VudGVybWVhc3VyZSB0eXBlIDMgaXMgZW5hYmxlZC4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfQ1RZUEVfVFlQRTRfRU4gICAgKCAoIHVuc2lnbmVkIGludCApIDB4OCA8PCAyNCApICAvKiAoQUVTKSBDb3VudGVybWVhc3VyZSB0eXBlIDQgaXMgZW5hYmxlZC4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfQ1RZUEVfVFlQRTVfRU4gICAgKCAoIHVuc2lnbmVkIGludCApIDB4MTAgPDwgMjQgKSAvKiAoQUVTKSBDb3VudGVybWVhc3VyZSB0eXBlIDUgaXMgZW5hYmxlZC4gKi8NCi0vKiAtLS0tLS0tLSBBRVNfSUVSIDogKEFFUyBPZmZzZXQ6IDB4MTApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19EQVRSRFkgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgICAvKiAoQUVTKSBEQVRSRFkgKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19FTkRSWCAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgICAvKiAoQUVTKSBQREMgUmVhZCBCdWZmZXIgRW5kICovDQotI2RlZmluZSBBVDkxQ19BRVNfRU5EVFggICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMiApICAgLyogKEFFUykgUERDIFdyaXRlIEJ1ZmZlciBFbmQgKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19SWEJVRkYgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzICkgICAvKiAoQUVTKSBQREMgUmVhZCBCdWZmZXIgRnVsbCAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX1RYQlVGRSAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDQgKSAgIC8qIChBRVMpIFBEQyBXcml0ZSBCdWZmZXIgRW1wdHkgKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19VUkFEICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgICAvKiAoQUVTKSBVbnNwZWNpZmllZCBSZWdpc3RlciBBY2Nlc3MgRGV0ZWN0aW9uICovDQotLyogLS0tLS0tLS0gQUVTX0lEUiA6IChBRVMgT2Zmc2V0OiAweDE0KSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIEFFU19JTVIgOiAoQUVTIE9mZnNldDogMHgxOCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBBRVNfSVNSIDogKEFFUyBPZmZzZXQ6IDB4MWMpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19VUkFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NyA8PCAxMiApIC8qIChBRVMpIFVuc3BlY2lmaWVkIFJlZ2lzdGVyIEFjY2VzcyBUeXBlIFN0YXR1cyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FFU19VUkFUX0lOX0RBVF9XUklURV9EQVRQUk9DICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDEyICkgLyogKEFFUykgSW5wdXQgZGF0YSByZWdpc3RlciB3cml0dGVuIGR1cmluZyB0aGUgZGF0YSBwcm9jZXNzaW5nIGluIFBEQyBtb2RlLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FFU19VUkFUX09VVF9EQVRfUkVBRF9EQVRQUk9DICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEyICkgLyogKEFFUykgT3V0cHV0IGRhdGEgcmVnaXN0ZXIgcmVhZCBkdXJpbmcgdGhlIGRhdGEgcHJvY2Vzc2luZy4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfVVJBVF9NT0RFUkVHX1dSSVRFX0RBVFBST0MgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCAxMiApIC8qIChBRVMpIE1vZGUgcmVnaXN0ZXIgd3JpdHRlbiBkdXJpbmcgdGhlIGRhdGEgcHJvY2Vzc2luZy4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfVVJBVF9PVVRfREFUX1JFQURfU1VCS0VZICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAxMiApIC8qIChBRVMpIE91dHB1dCBkYXRhIHJlZ2lzdGVyIHJlYWQgZHVyaW5nIHRoZSBzdWIta2V5cyBnZW5lcmF0aW9uLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FFU19VUkFUX01PREVSRUdfV1JJVEVfU1VCS0VZICAgICAoICggdW5zaWduZWQgaW50ICkgMHg0IDw8IDEyICkgLyogKEFFUykgTW9kZSByZWdpc3RlciB3cml0dGVuIGR1cmluZyB0aGUgc3ViLWtleXMgZ2VuZXJhdGlvbi4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfVVJBVF9XT19SRUdfUkVBRCAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NSA8PCAxMiApIC8qIChBRVMpIFdyaXRlLW9ubHkgcmVnaXN0ZXIgcmVhZCBhY2Nlc3MuICovDQorLy8gLS0tLS0tLS0gQUVTX0NSIDogKEFFUyBPZmZzZXQ6IDB4MCkgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FFU19TVEFSVCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoQUVTKSBTdGFydHMgUHJvY2Vzc2luZw0KKyNkZWZpbmUgQVQ5MUNfQUVTX1NXUlNUICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChBRVMpIFNvZnR3YXJlIFJlc2V0DQorI2RlZmluZSBBVDkxQ19BRVNfTE9BRFNFRUQgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKEFFUykgUmFuZG9tIE51bWJlciBHZW5lcmF0b3IgU2VlZCBMb2FkaW5nDQorLy8gLS0tLS0tLS0gQUVTX01SIDogKEFFUyBPZmZzZXQ6IDB4NCkgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FFU19DSVBIRVIgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoQUVTKSBQcm9jZXNzaW5nIE1vZGUNCisjZGVmaW5lIEFUOTFDX0FFU19QUk9DRExZICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8ICA0KSAvLyAoQUVTKSBQcm9jZXNzaW5nIERlbGF5DQorI2RlZmluZSBBVDkxQ19BRVNfU01PRCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKEFFUykgU3RhcnQgTW9kZQ0KKyNkZWZpbmUgCUFUOTFDX0FFU19TTU9EX01BTlVBTCAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDgpIC8vIChBRVMpIE1hbnVhbCBNb2RlOiBUaGUgU1RBUlQgYml0IGluIHJlZ2lzdGVyIEFFU19DUiBtdXN0IGJlIHNldCB0byBiZWdpbiBlbmNyeXB0aW9uIG9yIGRlY3J5cHRpb24uDQorI2RlZmluZSAJQVQ5MUNfQUVTX1NNT0RfQVVUTyAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKEFFUykgQXV0byBNb2RlOiBubyBhY3Rpb24gaW4gQUVTX0NSIGlzIG5lY2Vzc2FyeSAoY2YgZGF0YXNoZWV0KS4NCisjZGVmaW5lIAlBVDkxQ19BRVNfU01PRF9QREMgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA4KSAvLyAoQUVTKSBQREMgTW9kZSAoY2YgZGF0YXNoZWV0KS4NCisjZGVmaW5lIEFUOTFDX0FFU19PUE1PRCAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8IDEyKSAvLyAoQUVTKSBPcGVyYXRpb24gTW9kZQ0KKyNkZWZpbmUgCUFUOTFDX0FFU19PUE1PRF9FQ0IgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDEyKSAvLyAoQUVTKSBFQ0IgRWxlY3Ryb25pYyBDb2RlQm9vayBtb2RlLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19PUE1PRF9DQkMgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvLyAoQUVTKSBDQkMgQ2lwaGVyIEJsb2NrIENoYWluaW5nIG1vZGUuDQorI2RlZmluZSAJQVQ5MUNfQUVTX09QTU9EX09GQiAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMTIpIC8vIChBRVMpIE9GQiBPdXRwdXQgRmVlZGJhY2sgbW9kZS4NCisjZGVmaW5lIAlBVDkxQ19BRVNfT1BNT0RfQ0ZCICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxMikgLy8gKEFFUykgQ0ZCIENpcGhlciBGZWVkYmFjayBtb2RlLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19PUE1PRF9DVFIgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg0IDw8IDEyKSAvLyAoQUVTKSBDVFIgQ291bnRlciBtb2RlLg0KKyNkZWZpbmUgQVQ5MUNfQUVTX0xPRCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTUpIC8vIChBRVMpIExhc3QgT3V0cHV0IERhdGEgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfQUVTX0NGQlMgICAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgMTYpIC8vIChBRVMpIENpcGhlciBGZWVkYmFjayBEYXRhIFNpemUNCisjZGVmaW5lIAlBVDkxQ19BRVNfQ0ZCU18xMjhfQklUICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDE2KSAvLyAoQUVTKSAxMjgtYml0Lg0KKyNkZWZpbmUgCUFUOTFDX0FFU19DRkJTXzY0X0JJVCAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChBRVMpIDY0LWJpdC4NCisjZGVmaW5lIAlBVDkxQ19BRVNfQ0ZCU18zMl9CSVQgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDE2KSAvLyAoQUVTKSAzMi1iaXQuDQorI2RlZmluZSAJQVQ5MUNfQUVTX0NGQlNfMTZfQklUICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxNikgLy8gKEFFUykgMTYtYml0Lg0KKyNkZWZpbmUgCUFUOTFDX0FFU19DRkJTXzhfQklUICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDQgPDwgMTYpIC8vIChBRVMpIDgtYml0Lg0KKyNkZWZpbmUgQVQ5MUNfQUVTX0NLRVkgICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgMjApIC8vIChBRVMpIENvdW50ZXJtZWFzdXJlIEtleQ0KKyNkZWZpbmUgQVQ5MUNfQUVTX0NUWVBFICAgICAgICgodW5zaWduZWQgaW50KSAweDFGIDw8IDI0KSAvLyAoQUVTKSBDb3VudGVybWVhc3VyZSBUeXBlDQorI2RlZmluZSAJQVQ5MUNfQUVTX0NUWVBFX1RZUEUxX0VOICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjQpIC8vIChBRVMpIENvdW50ZXJtZWFzdXJlIHR5cGUgMSBpcyBlbmFibGVkLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19DVFlQRV9UWVBFMl9FTiAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDI0KSAvLyAoQUVTKSBDb3VudGVybWVhc3VyZSB0eXBlIDIgaXMgZW5hYmxlZC4NCisjZGVmaW5lIAlBVDkxQ19BRVNfQ1RZUEVfVFlQRTNfRU4gICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NCA8PCAyNCkgLy8gKEFFUykgQ291bnRlcm1lYXN1cmUgdHlwZSAzIGlzIGVuYWJsZWQuDQorI2RlZmluZSAJQVQ5MUNfQUVTX0NUWVBFX1RZUEU0X0VOICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDggPDwgMjQpIC8vIChBRVMpIENvdW50ZXJtZWFzdXJlIHR5cGUgNCBpcyBlbmFibGVkLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19DVFlQRV9UWVBFNV9FTiAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxMCA8PCAyNCkgLy8gKEFFUykgQ291bnRlcm1lYXN1cmUgdHlwZSA1IGlzIGVuYWJsZWQuDQorLy8gLS0tLS0tLS0gQUVTX0lFUiA6IChBRVMgT2Zmc2V0OiAweDEwKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQUVTX0RBVFJEWSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChBRVMpIERBVFJEWQ0KKyNkZWZpbmUgQVQ5MUNfQUVTX0VORFJYICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChBRVMpIFBEQyBSZWFkIEJ1ZmZlciBFbmQNCisjZGVmaW5lIEFUOTFDX0FFU19FTkRUWCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoQUVTKSBQREMgV3JpdGUgQnVmZmVyIEVuZA0KKyNkZWZpbmUgQVQ5MUNfQUVTX1JYQlVGRiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChBRVMpIFBEQyBSZWFkIEJ1ZmZlciBGdWxsDQorI2RlZmluZSBBVDkxQ19BRVNfVFhCVUZFICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKEFFUykgUERDIFdyaXRlIEJ1ZmZlciBFbXB0eQ0KKyNkZWZpbmUgQVQ5MUNfQUVTX1VSQUQgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChBRVMpIFVuc3BlY2lmaWVkIFJlZ2lzdGVyIEFjY2VzcyBEZXRlY3Rpb24NCisvLyAtLS0tLS0tLSBBRVNfSURSIDogKEFFUyBPZmZzZXQ6IDB4MTQpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFFU19JTVIgOiAoQUVTIE9mZnNldDogMHgxOCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQUVTX0lTUiA6IChBRVMgT2Zmc2V0OiAweDFjKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQUVTX1VSQVQgICAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgMTIpIC8vIChBRVMpIFVuc3BlY2lmaWVkIFJlZ2lzdGVyIEFjY2VzcyBUeXBlIFN0YXR1cw0KKyNkZWZpbmUgCUFUOTFDX0FFU19VUkFUX0lOX0RBVF9XUklURV9EQVRQUk9DICgodW5zaWduZWQgaW50KSAweDAgPDwgMTIpIC8vIChBRVMpIElucHV0IGRhdGEgcmVnaXN0ZXIgd3JpdHRlbiBkdXJpbmcgdGhlIGRhdGEgcHJvY2Vzc2luZyBpbiBQREMgbW9kZS4NCisjZGVmaW5lIAlBVDkxQ19BRVNfVVJBVF9PVVRfREFUX1JFQURfREFUUFJPQyAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvLyAoQUVTKSBPdXRwdXQgZGF0YSByZWdpc3RlciByZWFkIGR1cmluZyB0aGUgZGF0YSBwcm9jZXNzaW5nLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19VUkFUX01PREVSRUdfV1JJVEVfREFUUFJPQyAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDEyKSAvLyAoQUVTKSBNb2RlIHJlZ2lzdGVyIHdyaXR0ZW4gZHVyaW5nIHRoZSBkYXRhIHByb2Nlc3NpbmcuDQorI2RlZmluZSAJQVQ5MUNfQUVTX1VSQVRfT1VUX0RBVF9SRUFEX1NVQktFWSAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxMikgLy8gKEFFUykgT3V0cHV0IGRhdGEgcmVnaXN0ZXIgcmVhZCBkdXJpbmcgdGhlIHN1Yi1rZXlzIGdlbmVyYXRpb24uDQorI2RlZmluZSAJQVQ5MUNfQUVTX1VSQVRfTU9ERVJFR19XUklURV9TVUJLRVkgKCh1bnNpZ25lZCBpbnQpIDB4NCA8PCAxMikgLy8gKEFFUykgTW9kZSByZWdpc3RlciB3cml0dGVuIGR1cmluZyB0aGUgc3ViLWtleXMgZ2VuZXJhdGlvbi4NCisjZGVmaW5lIAlBVDkxQ19BRVNfVVJBVF9XT19SRUdfUkVBRCAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg1IDw8IDEyKSAvLyAoQUVTKSBXcml0ZS1vbmx5IHJlZ2lzdGVyIHJlYWQgYWNjZXNzLg0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVHJpcGxlIERhdGEgRW5jcnlwdGlvbiBTdGFuZGFyZCAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotdHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1RERVMNCi17DQotICAgIEFUOTFfUkVHIFRERVNfQ1I7ICAgICAgICAgICAvKiBDb250cm9sIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFRERVNfTVI7ICAgICAgICAgICAvKiBNb2RlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMFsgMiBdOyAgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBUREVTX0lFUjsgICAgICAgICAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBUREVTX0lEUjsgICAgICAgICAgLyogSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVERFU19JTVI7ICAgICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFRERVNfSVNSOyAgICAgICAgICAvKiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFRERVNfS0VZMVd4UlsgMiBdOyAvKiBLZXkgMSBXb3JkIHggUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVERFU19LRVkyV3hSWyAyIF07IC8qIEtleSAyIFdvcmQgeCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBUREVTX0tFWTNXeFJbIDIgXTsgLyogS2V5IDMgV29yZCB4IFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMVsgMiBdOyAgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBUREVTX0lEQVRBeFJbIDIgXTsgLyogSW5wdXQgRGF0YSB4IFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMlsgMiBdOyAgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBUREVTX09EQVRBeFJbIDIgXTsgLyogT3V0cHV0IERhdGEgeCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDNbIDIgXTsgICAgLyogKi8NCi0gICAgQVQ5MV9SRUcgVERFU19JVnhSWyAyIF07ICAgIC8qIEluaXRpYWxpemF0aW9uIFZlY3RvciB4IFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkNFsgMzcgXTsgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBUREVTX1ZSOyAgICAgICAgICAgLyogVERFUyBWZXJzaW9uIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFRERVNfUlBSOyAgICAgICAgICAvKiBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVERFU19SQ1I7ICAgICAgICAgIC8qIFJlY2VpdmUgQ291bnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBUREVTX1RQUjsgICAgICAgICAgLyogVHJhbnNtaXQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBUREVTX1RDUjsgICAgICAgICAgLyogVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBUREVTX1JOUFI7ICAgICAgICAgLyogUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVERFU19STkNSOyAgICAgICAgIC8qIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFRERVNfVE5QUjsgICAgICAgICAvKiBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVERFU19UTkNSOyAgICAgICAgIC8qIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBUREVTX1BUQ1I7ICAgICAgICAgLyogUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVERFU19QVFNSOyAgICAgICAgIC8qIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi19IEFUOTFTX1RERVMsICogQVQ5MVBTX1RERVM7DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBUcmlwbGUgRGF0YSBFbmNyeXB0aW9uIFN0YW5kYXJkDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfVERFUyB7DQorCUFUOTFfUkVHCSBUREVTX0NSOyAJLy8gQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVERFU19NUjsgCS8vIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFsyXTsgCS8vIA0KKwlBVDkxX1JFRwkgVERFU19JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUREVTX0lEUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUREVTX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUREVTX0lTUjsgCS8vIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRERVNfS0VZMVd4UlsyXTsgCS8vIEtleSAxIFdvcmQgeCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVERFU19LRVkyV3hSWzJdOyAJLy8gS2V5IDIgV29yZCB4IFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUREVTX0tFWTNXeFJbMl07IAkvLyBLZXkgMyBXb3JkIHggUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMVsyXTsgCS8vIA0KKwlBVDkxX1JFRwkgVERFU19JREFUQXhSWzJdOyAJLy8gSW5wdXQgRGF0YSB4IFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDJbMl07IAkvLyANCisJQVQ5MV9SRUcJIFRERVNfT0RBVEF4UlsyXTsgCS8vIE91dHB1dCBEYXRhIHggUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkM1syXTsgCS8vIA0KKwlBVDkxX1JFRwkgVERFU19JVnhSWzJdOyAJLy8gSW5pdGlhbGl6YXRpb24gVmVjdG9yIHggUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkNFszN107IAkvLyANCisJQVQ5MV9SRUcJIFRERVNfVlI7IAkvLyBUREVTIFZlcnNpb24gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRERVNfUlBSOyAJLy8gUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUREVTX1JDUjsgCS8vIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVERFU19UUFI7IAkvLyBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUREVTX1RDUjsgCS8vIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRERVNfUk5QUjsgCS8vIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUREVTX1JOQ1I7IAkvLyBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVERFU19UTlBSOyAJLy8gVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUREVTX1ROQ1I7IAkvLyBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRERVNfUFRDUjsgCS8vIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUREVTX1BUU1I7IAkvLyBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorfSBBVDkxU19UREVTLCAqQVQ5MVBTX1RERVM7DQogDQotLyogLS0tLS0tLS0gVERFU19DUiA6IChUREVTIE9mZnNldDogMHgwKSBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19UREVTX1NUQVJUICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgLyogKFRERVMpIFN0YXJ0cyBQcm9jZXNzaW5nICovDQotI2RlZmluZSBBVDkxQ19UREVTX1NXUlNUICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDggKSAgLyogKFRERVMpIFNvZnR3YXJlIFJlc2V0ICovDQotLyogLS0tLS0tLS0gVERFU19NUiA6IChUREVTIE9mZnNldDogMHg0KSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19UREVTX0NJUEhFUiAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgLyogKFRERVMpIFByb2Nlc3NpbmcgTW9kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19UREVTTU9EICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgIC8qIChUREVTKSBTaW5nbGUgb3IgVHJpcGxlIERFUyBNb2RlICovDQotI2RlZmluZSBBVDkxQ19UREVTX0tFWU1PRCAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDQgKSAgLyogKFRERVMpIEtleSBNb2RlICovDQotI2RlZmluZSBBVDkxQ19UREVTX1NNT0QgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDggKSAgLyogKFRERVMpIFN0YXJ0IE1vZGUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UREVTX1NNT0RfTUFOVUFMICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgOCApICAvKiAoVERFUykgTWFudWFsIE1vZGU6IFRoZSBTVEFSVCBiaXQgaW4gcmVnaXN0ZXIgVERFU19DUiBtdXN0IGJlIHNldCB0byBiZWdpbiBlbmNyeXB0aW9uIG9yIGRlY3J5cHRpb24uICovDQotI2RlZmluZSAgICAgQVQ5MUNfVERFU19TTU9EX0FVVE8gICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDggKSAgLyogKFRERVMpIEF1dG8gTW9kZTogbm8gYWN0aW9uIGluIFRERVNfQ1IgaXMgbmVjZXNzYXJ5IChjZiBkYXRhc2hlZXQpLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RERVNfU01PRF9QREMgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCA4ICkgIC8qIChUREVTKSBQREMgTW9kZSAoY2YgZGF0YXNoZWV0KS4gKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfT1BNT0QgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTIgKSAvKiAoVERFUykgT3BlcmF0aW9uIE1vZGUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UREVTX09QTU9EX0VDQiAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMTIgKSAvKiAoVERFUykgRUNCIEVsZWN0cm9uaWMgQ29kZUJvb2sgbW9kZS4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UREVTX09QTU9EX0NCQyAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTIgKSAvKiAoVERFUykgQ0JDIENpcGhlciBCbG9jayBDaGFpbmluZyBtb2RlLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RERVNfT1BNT0RfT0ZCICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCAxMiApIC8qIChUREVTKSBPRkIgT3V0cHV0IEZlZWRiYWNrIG1vZGUuICovDQotI2RlZmluZSAgICAgQVQ5MUNfVERFU19PUE1PRF9DRkIgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDEyICkgLyogKFRERVMpIENGQiBDaXBoZXIgRmVlZGJhY2sgbW9kZS4gKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfTE9EICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTUgKSAvKiAoVERFUykgTGFzdCBPdXRwdXQgRGF0YSBNb2RlICovDQotI2RlZmluZSBBVDkxQ19UREVTX0NGQlMgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDE2ICkgLyogKFRERVMpIENpcGhlciBGZWVkYmFjayBEYXRhIFNpemUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UREVTX0NGQlNfNjRfQklUICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMTYgKSAvKiAoVERFUykgNjQtYml0LiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RERVNfQ0ZCU18zMl9CSVQgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNiApIC8qIChUREVTKSAzMi1iaXQuICovDQotI2RlZmluZSAgICAgQVQ5MUNfVERFU19DRkJTXzE2X0JJVCAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDE2ICkgLyogKFRERVMpIDE2LWJpdC4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UREVTX0NGQlNfOF9CSVQgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTYgKSAvKiAoVERFUykgOC1iaXQuICovDQotLyogLS0tLS0tLS0gVERFU19JRVIgOiAoVERFUyBPZmZzZXQ6IDB4MTApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfREFUUkRZICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAvKiAoVERFUykgREFUUkRZICovDQotI2RlZmluZSBBVDkxQ19UREVTX0VORFJYICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEgKSAgLyogKFRERVMpIFBEQyBSZWFkIEJ1ZmZlciBFbmQgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfRU5EVFggICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMiApICAvKiAoVERFUykgUERDIFdyaXRlIEJ1ZmZlciBFbmQgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfUlhCVUZGICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMyApICAvKiAoVERFUykgUERDIFJlYWQgQnVmZmVyIEZ1bGwgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfVFhCVUZFICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNCApICAvKiAoVERFUykgUERDIFdyaXRlIEJ1ZmZlciBFbXB0eSAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19VUkFEICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgIC8qIChUREVTKSBVbnNwZWNpZmllZCBSZWdpc3RlciBBY2Nlc3MgRGV0ZWN0aW9uICovDQotLyogLS0tLS0tLS0gVERFU19JRFIgOiAoVERFUyBPZmZzZXQ6IDB4MTQpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gVERFU19JTVIgOiAoVERFUyBPZmZzZXQ6IDB4MTgpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gVERFU19JU1IgOiAoVERFUyBPZmZzZXQ6IDB4MWMpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfVVJBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTIgKSAvKiAoVERFUykgVW5zcGVjaWZpZWQgUmVnaXN0ZXIgQWNjZXNzIFR5cGUgU3RhdHVzICovDQotI2RlZmluZSAgICAgQVQ5MUNfVERFU19VUkFUX0lOX0RBVF9XUklURV9EQVRQUk9DICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDEyICkgLyogKFRERVMpIElucHV0IGRhdGEgcmVnaXN0ZXIgd3JpdHRlbiBkdXJpbmcgdGhlIGRhdGEgcHJvY2Vzc2luZyBpbiBQREMgbW9kZS4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UREVTX1VSQVRfT1VUX0RBVF9SRUFEX0RBVFBST0MgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTIgKSAvKiAoVERFUykgT3V0cHV0IGRhdGEgcmVnaXN0ZXIgcmVhZCBkdXJpbmcgdGhlIGRhdGEgcHJvY2Vzc2luZy4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UREVTX1VSQVRfTU9ERVJFR19XUklURV9EQVRQUk9DICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgMTIgKSAvKiAoVERFUykgTW9kZSByZWdpc3RlciB3cml0dGVuIGR1cmluZyB0aGUgZGF0YSBwcm9jZXNzaW5nLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RERVNfVVJBVF9XT19SRUdfUkVBRCAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAxMiApIC8qIChUREVTKSBXcml0ZS1vbmx5IHJlZ2lzdGVyIHJlYWQgYWNjZXNzLiAqLw0KKy8vIC0tLS0tLS0tIFRERVNfQ1IgOiAoVERFUyBPZmZzZXQ6IDB4MCkgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RERVNfU1RBUlQgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoVERFUykgU3RhcnRzIFByb2Nlc3NpbmcNCisjZGVmaW5lIEFUOTFDX1RERVNfU1dSU1QgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoVERFUykgU29mdHdhcmUgUmVzZXQNCisvLyAtLS0tLS0tLSBUREVTX01SIDogKFRERVMgT2Zmc2V0OiAweDQpIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UREVTX0NJUEhFUiAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFRERVMpIFByb2Nlc3NpbmcgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfVERFU19UREVTTU9EICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChUREVTKSBTaW5nbGUgb3IgVHJpcGxlIERFUyBNb2RlDQorI2RlZmluZSBBVDkxQ19UREVTX0tFWU1PRCAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFRERVMpIEtleSBNb2RlDQorI2RlZmluZSBBVDkxQ19UREVTX1NNT0QgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKFRERVMpIFN0YXJ0IE1vZGUNCisjZGVmaW5lIAlBVDkxQ19UREVTX1NNT0RfTUFOVUFMICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgOCkgLy8gKFRERVMpIE1hbnVhbCBNb2RlOiBUaGUgU1RBUlQgYml0IGluIHJlZ2lzdGVyIFRERVNfQ1IgbXVzdCBiZSBzZXQgdG8gYmVnaW4gZW5jcnlwdGlvbiBvciBkZWNyeXB0aW9uLg0KKyNkZWZpbmUgCUFUOTFDX1RERVNfU01PRF9BVVRPICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoVERFUykgQXV0byBNb2RlOiBubyBhY3Rpb24gaW4gVERFU19DUiBpcyBuZWNlc3NhcnkgKGNmIGRhdGFzaGVldCkuDQorI2RlZmluZSAJQVQ5MUNfVERFU19TTU9EX1BEQyAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDgpIC8vIChUREVTKSBQREMgTW9kZSAoY2YgZGF0YXNoZWV0KS4NCisjZGVmaW5lIEFUOTFDX1RERVNfT1BNT0QgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDEyKSAvLyAoVERFUykgT3BlcmF0aW9uIE1vZGUNCisjZGVmaW5lIAlBVDkxQ19UREVTX09QTU9EX0VDQiAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMTIpIC8vIChUREVTKSBFQ0IgRWxlY3Ryb25pYyBDb2RlQm9vayBtb2RlLg0KKyNkZWZpbmUgCUFUOTFDX1RERVNfT1BNT0RfQ0JDICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLy8gKFRERVMpIENCQyBDaXBoZXIgQmxvY2sgQ2hhaW5pbmcgbW9kZS4NCisjZGVmaW5lIAlBVDkxQ19UREVTX09QTU9EX09GQiAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMTIpIC8vIChUREVTKSBPRkIgT3V0cHV0IEZlZWRiYWNrIG1vZGUuDQorI2RlZmluZSAJQVQ5MUNfVERFU19PUE1PRF9DRkIgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDEyKSAvLyAoVERFUykgQ0ZCIENpcGhlciBGZWVkYmFjayBtb2RlLg0KKyNkZWZpbmUgQVQ5MUNfVERFU19MT0QgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTUpIC8vIChUREVTKSBMYXN0IE91dHB1dCBEYXRhIE1vZGUNCisjZGVmaW5lIEFUOTFDX1RERVNfQ0ZCUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE2KSAvLyAoVERFUykgQ2lwaGVyIEZlZWRiYWNrIERhdGEgU2l6ZQ0KKyNkZWZpbmUgCUFUOTFDX1RERVNfQ0ZCU182NF9CSVQgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDE2KSAvLyAoVERFUykgNjQtYml0Lg0KKyNkZWZpbmUgCUFUOTFDX1RERVNfQ0ZCU18zMl9CSVQgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoVERFUykgMzItYml0Lg0KKyNkZWZpbmUgCUFUOTFDX1RERVNfQ0ZCU18xNl9CSVQgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDE2KSAvLyAoVERFUykgMTYtYml0Lg0KKyNkZWZpbmUgCUFUOTFDX1RERVNfQ0ZCU184X0JJVCAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE2KSAvLyAoVERFUykgOC1iaXQuDQorLy8gLS0tLS0tLS0gVERFU19JRVIgOiAoVERFUyBPZmZzZXQ6IDB4MTApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UREVTX0RBVFJEWSAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFRERVMpIERBVFJEWQ0KKyNkZWZpbmUgQVQ5MUNfVERFU19FTkRSWCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChUREVTKSBQREMgUmVhZCBCdWZmZXIgRW5kDQorI2RlZmluZSBBVDkxQ19UREVTX0VORFRYICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFRERVMpIFBEQyBXcml0ZSBCdWZmZXIgRW5kDQorI2RlZmluZSBBVDkxQ19UREVTX1JYQlVGRiAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKFRERVMpIFBEQyBSZWFkIEJ1ZmZlciBGdWxsDQorI2RlZmluZSBBVDkxQ19UREVTX1RYQlVGRSAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFRERVMpIFBEQyBXcml0ZSBCdWZmZXIgRW1wdHkNCisjZGVmaW5lIEFUOTFDX1RERVNfVVJBRCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoVERFUykgVW5zcGVjaWZpZWQgUmVnaXN0ZXIgQWNjZXNzIERldGVjdGlvbg0KKy8vIC0tLS0tLS0tIFRERVNfSURSIDogKFRERVMgT2Zmc2V0OiAweDE0KSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBUREVTX0lNUiA6IChUREVTIE9mZnNldDogMHgxOCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVERFU19JU1IgOiAoVERFUyBPZmZzZXQ6IDB4MWMpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UREVTX1VSQVQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxMikgLy8gKFRERVMpIFVuc3BlY2lmaWVkIFJlZ2lzdGVyIEFjY2VzcyBUeXBlIFN0YXR1cw0KKyNkZWZpbmUgCUFUOTFDX1RERVNfVVJBVF9JTl9EQVRfV1JJVEVfREFUUFJPQyAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDEyKSAvLyAoVERFUykgSW5wdXQgZGF0YSByZWdpc3RlciB3cml0dGVuIGR1cmluZyB0aGUgZGF0YSBwcm9jZXNzaW5nIGluIFBEQyBtb2RlLg0KKyNkZWZpbmUgCUFUOTFDX1RERVNfVVJBVF9PVVRfREFUX1JFQURfREFUUFJPQyAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvLyAoVERFUykgT3V0cHV0IGRhdGEgcmVnaXN0ZXIgcmVhZCBkdXJpbmcgdGhlIGRhdGEgcHJvY2Vzc2luZy4NCisjZGVmaW5lIAlBVDkxQ19UREVTX1VSQVRfTU9ERVJFR19XUklURV9EQVRQUk9DICgodW5zaWduZWQgaW50KSAweDIgPDwgMTIpIC8vIChUREVTKSBNb2RlIHJlZ2lzdGVyIHdyaXR0ZW4gZHVyaW5nIHRoZSBkYXRhIHByb2Nlc3NpbmcuDQorI2RlZmluZSAJQVQ5MUNfVERFU19VUkFUX1dPX1JFR19SRUFEICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTIpIC8vIChUREVTKSBXcml0ZS1vbmx5IHJlZ2lzdGVyIHJlYWQgYWNjZXNzLg0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgICBSRUdJU1RFUiBBRERSRVNTIERFRklOSVRJT04gRk9SIEFUOTFTQU03WDEyOCAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBTWVMgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBBSUMgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19BSUNfSVZSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYxMDAgKSAvKiAoQUlDKSBJUlEgVmVjdG9yIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BSUNfU01SICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYwMDAgKSAvKiAoQUlDKSBTb3VyY2UgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX0ZWUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMTA0ICkgLyogKEFJQykgRklRIFZlY3RvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX0RDUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMTM4ICkgLyogKEFJQykgRGVidWcgQ29udHJvbCBSZWdpc3RlciAoUHJvdGVjdCkgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19FT0lDUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjEzMCApIC8qIChBSUMpIEVuZCBvZiBJbnRlcnJ1cHQgQ29tbWFuZCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX1NWUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMDgwICkgLyogKEFJQykgU291cmNlIFZlY3RvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX0ZGU1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMTQ4ICkgLyogKEFJQykgRmFzdCBGb3JjaW5nIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX0lDQ1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMTI4ICkgLyogKEFJQykgSW50ZXJydXB0IENsZWFyIENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19JU1IgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjEwOCApIC8qIChBSUMpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19JTVIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjExMCApIC8qIChBSUMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BSUNfSVBSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYxMEMgKSAvKiAoQUlDKSBJbnRlcnJ1cHQgUGVuZGluZyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX0ZGRVIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMTQwICkgLyogKEFJQykgRmFzdCBGb3JjaW5nIEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX0lFQ1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMTIwICkgLyogKEFJQykgSW50ZXJydXB0IEVuYWJsZSBDb21tYW5kIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BSUNfSVNDUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYxMkMgKSAvKiAoQUlDKSBJbnRlcnJ1cHQgU2V0IENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19GRkRSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjE0NCApIC8qIChBSUMpIEZhc3QgRm9yY2luZyBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BSUNfQ0lTUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYxMTQgKSAvKiAoQUlDKSBDb3JlIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19JRENSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjEyNCApIC8qIChBSUMpIEludGVycnVwdCBEaXNhYmxlIENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19TUFUgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjEzNCApIC8qIChBSUMpIFNwdXJpb3VzIFZlY3RvciBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX0RCR1UgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19EQkdVX1RDUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYzMEMgKSAvKiAoUERDX0RCR1UpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfUk5QUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjMxMCApIC8qIChQRENfREJHVSkgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfVE5QUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjMxOCApIC8qIChQRENfREJHVSkgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19EQkdVX1RQUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYzMDggKSAvKiAoUERDX0RCR1UpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfUlBSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjMwMCApIC8qIChQRENfREJHVSkgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19EQkdVX1JDUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYzMDQgKSAvKiAoUERDX0RCR1UpIFJlY2VpdmUgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9STkNSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMzE0ICkgLyogKFBEQ19EQkdVKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9QVENSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMzIwICkgLyogKFBEQ19EQkdVKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9QVFNSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMzI0ICkgLyogKFBEQ19EQkdVKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19EQkdVX1ROQ1IgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYzMUMgKSAvKiAoUERDX0RCR1UpIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgREJHVSBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfRVhJRCAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjI0NCApIC8qIChEQkdVKSBDaGlwIElEIEV4dGVuc2lvbiBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9CUkdSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMjIwICkgLyogKERCR1UpIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfSURSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjIwQyApIC8qIChEQkdVKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9DU1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMjE0ICkgLyogKERCR1UpIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19EQkdVX0NJRFIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYyNDAgKSAvKiAoREJHVSkgQ2hpcCBJRCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9NUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMjA0ICkgLyogKERCR1UpIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfSU1SICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjIxMCApIC8qIChEQkdVKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9DUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMjAwICkgLyogKERCR1UpIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfRk5UUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjI0OCApIC8qIChEQkdVKSBGb3JjZSBOVFJTVCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9USFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMjFDICkgLyogKERCR1UpIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfUkhSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjIxOCApIC8qIChEQkdVKSBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19EQkdVX0lFUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYyMDggKSAvKiAoREJHVSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUElPQSBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfT0RSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjQxNCApIC8qIChQSU9BKSBPdXRwdXQgRGlzYWJsZSBSZWdpc3RlcnIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfU09EUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjQzMCApIC8qIChQSU9BKSBTZXQgT3V0cHV0IERhdGEgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfSVNSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjQ0QyApIC8qIChQSU9BKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX0FCU1IgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY0NzggKSAvKiAoUElPQSkgQUIgU2VsZWN0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9JRVIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNDQwICkgLyogKFBJT0EpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfUFBVRFIgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjQ2MCApIC8qIChQSU9BKSBQdWxsLXVwIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfSU1SICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjQ0OCApIC8qIChQSU9BKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9QRVIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNDAwICkgLyogKFBJT0EpIFBJTyBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfSUZEUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjQyNCApIC8qIChQSU9BKSBJbnB1dCBGaWx0ZXIgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9PV0RSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNEE0ICkgLyogKFBJT0EpIE91dHB1dCBXcml0ZSBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX01EU1IgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY0NTggKSAvKiAoUElPQSkgTXVsdGktZHJpdmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9JRFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNDQ0ICkgLyogKFBJT0EpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX09EU1IgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY0MzggKSAvKiAoUElPQSkgT3V0cHV0IERhdGEgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX1BQVVNSICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY0NjggKSAvKiAoUElPQSkgUHVsbC11cCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfT1dTUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjRBOCApIC8qIChQSU9BKSBPdXRwdXQgV3JpdGUgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX0JTUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY0NzQgKSAvKiAoUElPQSkgU2VsZWN0IEIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfT1dFUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjRBMCApIC8qIChQSU9BKSBPdXRwdXQgV3JpdGUgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX0lGRVIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY0MjAgKSAvKiAoUElPQSkgSW5wdXQgRmlsdGVyIEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9QRFNSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNDNDICkgLyogKFBJT0EpIFBpbiBEYXRhIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9QUFVFUiAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNDY0ICkgLyogKFBJT0EpIFB1bGwtdXAgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX09TUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY0MTggKSAvKiAoUElPQSkgT3V0cHV0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9BU1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNDcwICkgLyogKFBJT0EpIFNlbGVjdCBBIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX01ERFIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY0NTQgKSAvKiAoUElPQSkgTXVsdGktZHJpdmVyIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfQ09EUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjQzNCApIC8qIChQSU9BKSBDbGVhciBPdXRwdXQgRGF0YSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9NREVSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNDUwICkgLyogKFBJT0EpIE11bHRpLWRyaXZlciBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfUERSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjQwNCApIC8qIChQSU9BKSBQSU8gRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9JRlNSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNDI4ICkgLyogKFBJT0EpIElucHV0IEZpbHRlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfT0VSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjQxMCApIC8qIChQSU9BKSBPdXRwdXQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX1BTUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY0MDggKSAvKiAoUElPQSkgUElPIFN0YXR1cyBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUElPQiBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0JfT1dEUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjZBNCApIC8qIChQSU9CKSBPdXRwdXQgV3JpdGUgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9NREVSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNjUwICkgLyogKFBJT0IpIE11bHRpLWRyaXZlciBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0JfUFBVU1IgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjY2OCApIC8qIChQSU9CKSBQdWxsLXVwIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9JTVIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNjQ4ICkgLyogKFBJT0IpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX0FTUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY2NzAgKSAvKiAoUElPQikgU2VsZWN0IEEgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0JfUFBVRFIgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjY2MCApIC8qIChQSU9CKSBQdWxsLXVwIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0JfUFNSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjYwOCApIC8qIChQSU9CKSBQSU8gU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX0lFUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY2NDAgKSAvKiAoUElPQikgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9DT0RSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNjM0ICkgLyogKFBJT0IpIENsZWFyIE91dHB1dCBEYXRhIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX09XRVIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY2QTAgKSAvKiAoUElPQikgT3V0cHV0IFdyaXRlIEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9BQlNSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNjc4ICkgLyogKFBJT0IpIEFCIFNlbGVjdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0JfSUZEUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjYyNCApIC8qIChQSU9CKSBJbnB1dCBGaWx0ZXIgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9QRFNSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNjNDICkgLyogKFBJT0IpIFBpbiBEYXRhIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9JRFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNjQ0ICkgLyogKFBJT0IpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX09XU1IgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY2QTggKSAvKiAoUElPQikgT3V0cHV0IFdyaXRlIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9QRFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNjA0ICkgLyogKFBJT0IpIFBJTyBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX09EUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY2MTQgKSAvKiAoUElPQikgT3V0cHV0IERpc2FibGUgUmVnaXN0ZXJyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX0lGU1IgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY2MjggKSAvKiAoUElPQikgSW5wdXQgRmlsdGVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9QUFVFUiAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNjY0ICkgLyogKFBJT0IpIFB1bGwtdXAgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX1NPRFIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY2MzAgKSAvKiAoUElPQikgU2V0IE91dHB1dCBEYXRhIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX0lTUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY2NEMgKSAvKiAoUElPQikgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9PRFNSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNjM4ICkgLyogKFBJT0IpIE91dHB1dCBEYXRhIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9PU1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNjE4ICkgLyogKFBJT0IpIE91dHB1dCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0JfTURTUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjY1OCApIC8qIChQSU9CKSBNdWx0aS1kcml2ZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX0lGRVIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY2MjAgKSAvKiAoUElPQikgSW5wdXQgRmlsdGVyIEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9CU1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNjc0ICkgLyogKFBJT0IpIFNlbGVjdCBCIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX01ERFIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY2NTQgKSAvKiAoUElPQikgTXVsdGktZHJpdmVyIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0JfT0VSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjYxMCApIC8qIChQSU9CKSBPdXRwdXQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX1BFUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY2MDAgKSAvKiAoUElPQikgUElPIEVuYWJsZSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0tHUiBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX0NLR1JfTU9SICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkMyMCApIC8qIChDS0dSKSBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NLR1JfUExMUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkMyQyApIC8qIChDS0dSKSBQTEwgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NLR1JfTUNGUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkMyNCApIC8qIChDS0dSKSBNYWluIENsb2NrICBGcmVxdWVuY3kgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBNQyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19JRFIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkM2NCApIC8qIChQTUMpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QTUNfTU9SICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZDMjAgKSAvKiAoUE1DKSBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19QTExSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkMyQyApIC8qIChQTUMpIFBMTCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDRVIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGQzEwICkgLyogKFBNQykgUGVyaXBoZXJhbCBDbG9jayBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19QQ0tSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkM0MCApIC8qIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX01DS1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGQzMwICkgLyogKFBNQykgTWFzdGVyIENsb2NrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QTUNfU0NEUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZDMDQgKSAvKiAoUE1DKSBTeXN0ZW0gQ2xvY2sgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDRFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGQzE0ICkgLyogKFBNQykgUGVyaXBoZXJhbCBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QTUNfU0NTUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZDMDggKSAvKiAoUE1DKSBTeXN0ZW0gQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QTUNfUENTUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZDMTggKSAvKiAoUE1DKSBQZXJpcGhlcmFsIENsb2NrIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX01DRlIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGQzI0ICkgLyogKFBNQykgTWFpbiBDbG9jayAgRnJlcXVlbmN5IFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QTUNfU0NFUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZDMDAgKSAvKiAoUE1DKSBTeXN0ZW0gQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QTUNfSU1SICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZDNkMgKSAvKiAoUE1DKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX0lFUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGQzYwICkgLyogKFBNQykgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1NSICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGQzY4ICkgLyogKFBNQykgU3RhdHVzIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBSU1RDIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfUlNUQ19SQ1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGRDAwICkgLyogKFJTVEMpIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1JTVENfUk1SICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkQwOCApIC8qIChSU1RDKSBSZXNldCBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19SU1RDX1JTUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZEMDQgKSAvKiAoUlNUQykgUmVzZXQgU3RhdHVzIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBSVFRDIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfUlRUQ19SVFNSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGRDJDICkgLyogKFJUVEMpIFJlYWwtdGltZSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1JUVENfUlRNUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkQyMCApIC8qIChSVFRDKSBSZWFsLXRpbWUgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUlRUQ19SVFZSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGRDI4ICkgLyogKFJUVEMpIFJlYWwtdGltZSBWYWx1ZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUlRUQ19SVEFSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGRDI0ICkgLyogKFJUVEMpIFJlYWwtdGltZSBBbGFybSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUElUQyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1BJVENfUElWUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkQzOCApIC8qIChQSVRDKSBQZXJpb2QgSW50ZXJ2YWwgVmFsdWUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJVENfUElTUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkQzNCApIC8qIChQSVRDKSBQZXJpb2QgSW50ZXJ2YWwgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSVRDX1BJSVIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZEM0MgKSAvKiAoUElUQykgUGVyaW9kIEludGVydmFsIEltYWdlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSVRDX1BJTVIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZEMzAgKSAvKiAoUElUQykgUGVyaW9kIEludGVydmFsIE1vZGUgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFdEVEMgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19XRFRDX1dEQ1IgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZENDAgKSAvKiAoV0RUQykgV2F0Y2hkb2cgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfV0RUQ19XRFNSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGRDQ4ICkgLyogKFdEVEMpIFdhdGNoZG9nIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfV0RUQ19XRE1SICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGRDQ0ICkgLyogKFdEVEMpIFdhdGNoZG9nIE1vZGUgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFZSRUcgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19WUkVHX01SICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZENjAgKSAvKiAoVlJFRykgVm9sdGFnZSBSZWd1bGF0b3IgTW9kZSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgTUMgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19NQ19BU1IgICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZGMDQgKSAvKiAoTUMpIE1DIEFib3J0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfUkNSICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGRjAwICkgLyogKE1DKSBNQyBSZW1hcCBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19NQ19GQ1IgICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZGNjQgKSAvKiAoTUMpIE1DIEZsYXNoIENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0FBU1IgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkYwOCApIC8qIChNQykgTUMgQWJvcnQgQWRkcmVzcyBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0ZTUiAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkY2OCApIC8qIChNQykgTUMgRmxhc2ggU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19NQ19GTVIgICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZGNjAgKSAvKiAoTUMpIE1DIEZsYXNoIE1vZGUgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19TUEkxIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMV9QVENSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkU0MTIwICkgLyogKFBEQ19TUEkxKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMV9SUFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkU0MTAwICkgLyogKFBEQ19TUEkxKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTFfVE5DUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZFNDExQyApIC8qIChQRENfU1BJMSkgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkxX1RQUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTQxMDggKSAvKiAoUERDX1NQSTEpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTFfVE5QUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZFNDExOCApIC8qIChQRENfU1BJMSkgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkxX1RDUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTQxMEMgKSAvKiAoUERDX1NQSTEpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTFfUkNSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZFNDEwNCApIC8qIChQRENfU1BJMSkgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkxX1JOUFIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTQxMTAgKSAvKiAoUERDX1NQSTEpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkxX1JOQ1IgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTQxMTQgKSAvKiAoUERDX1NQSTEpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkxX1BUU1IgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTQxMjQgKSAvKiAoUERDX1NQSTEpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFNQSTEgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19TUEkxX0lNUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTQwMUMgKSAvKiAoU1BJMSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTFfSUVSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZFNDAxNCApIC8qIChTUEkxKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkxX01SICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTQwMDQgKSAvKiAoU1BJMSkgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMV9SRFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkU0MDA4ICkgLyogKFNQSTEpIFJlY2VpdmUgRGF0YSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMV9JRFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkU0MDE4ICkgLyogKFNQSTEpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkxX1NSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTQwMTAgKSAvKiAoU1BJMSkgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkxX1REUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTQwMEMgKSAvKiAoU1BJMSkgVHJhbnNtaXQgRGF0YSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMV9DUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkU0MDAwICkgLyogKFNQSTEpIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTFfQ1NSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZFNDAzMCApIC8qIChTUEkxKSBDaGlwIFNlbGVjdCBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX1NQSTAgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19TUEkwX1BUQ1IgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTAxMjAgKSAvKiAoUERDX1NQSTApIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkwX1RQUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTAxMDggKSAvKiAoUERDX1NQSTApIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTBfVENSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZFMDEwQyApIC8qIChQRENfU1BJMCkgVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMF9SQ1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkUwMTA0ICkgLyogKFBEQ19TUEkwKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTBfUFRTUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZFMDEyNCApIC8qIChQRENfU1BJMCkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMF9STlBSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkUwMTEwICkgLyogKFBEQ19TUEkwKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMF9SUFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkUwMTAwICkgLyogKFBEQ19TUEkwKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTBfVE5DUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZFMDExQyApIC8qIChQRENfU1BJMCkgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkwX1JOQ1IgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTAxMTQgKSAvKiAoUERDX1NQSTApIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkwX1ROUFIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTAxMTggKSAvKiAoUERDX1NQSTApIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgU1BJMCBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTBfSUVSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZFMDAxNCApIC8qIChTUEkwKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkwX1NSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTAwMTAgKSAvKiAoU1BJMCkgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkwX0lEUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTAwMTggKSAvKiAoU1BJMCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTBfQ1IgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZFMDAwMCApIC8qIChTUEkwKSBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkwX01SICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTAwMDQgKSAvKiAoU1BJMCkgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMF9JTVIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkUwMDFDICkgLyogKFNQSTApIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkwX1REUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTAwMEMgKSAvKiAoU1BJMCkgVHJhbnNtaXQgRGF0YSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMF9SRFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkUwMDA4ICkgLyogKFNQSTApIFJlY2VpdmUgRGF0YSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMF9DU1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkUwMDMwICkgLyogKFNQSTApIENoaXAgU2VsZWN0IFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfVVMxIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1JOQ1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkM0MTE0ICkgLyogKFBEQ19VUzEpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfUFRDUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzQxMjAgKSAvKiAoUERDX1VTMSkgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMV9UQ1IgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDNDEwQyApIC8qIChQRENfVVMxKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfUFRTUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzQxMjQgKSAvKiAoUERDX1VTMSkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1ROUFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkM0MTE4ICkgLyogKFBEQ19VUzEpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1JDUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkM0MTA0ICkgLyogKFBEQ19VUzEpIFJlY2VpdmUgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1JOUFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkM0MTEwICkgLyogKFBEQ19VUzEpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfUlBSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzQxMDAgKSAvKiAoUERDX1VTMSkgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfVE5DUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzQxMUMgKSAvKiAoUERDX1VTMSkgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfVFBSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzQxMDggKSAvKiAoUERDX1VTMSkgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVVMxIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX0lGICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkM0MDRDICkgLyogKFVTMSkgSVJEQV9GSUxURVIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMV9ORVIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDNDA0NCApIC8qIChVUzEpIE5iIEVycm9ycyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1JUT1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkM0MDI0ICkgLyogKFVTMSkgUmVjZWl2ZXIgVGltZS1vdXQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMV9DU1IgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDNDAxNCApIC8qIChVUzEpIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfSURSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzQwMEMgKSAvKiAoVVMxKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX0lFUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkM0MDA4ICkgLyogKFVTMSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1RIUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkM0MDFDICkgLyogKFVTMSkgVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1RUR1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkM0MDI4ICkgLyogKFVTMSkgVHJhbnNtaXR0ZXIgVGltZS1ndWFyZCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1JIUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkM0MDE4ICkgLyogKFVTMSkgUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX0JSR1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkM0MDIwICkgLyogKFVTMSkgQmF1ZCBSYXRlIEdlbmVyYXRvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX0lNUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkM0MDEwICkgLyogKFVTMSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMV9GSURJICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDNDA0MCApIC8qIChVUzEpIEZJX0RJX1JhdGlvIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfQ1IgICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzQwMDAgKSAvKiAoVVMxKSBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfTVIgICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzQwMDQgKSAvKiAoVVMxKSBNb2RlIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfVVMwIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX1ROUFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkMwMTE4ICkgLyogKFBEQ19VUzApIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX1JOUFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkMwMTEwICkgLyogKFBEQ19VUzApIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzBfVENSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzAxMEMgKSAvKiAoUERDX1VTMCkgVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX1BUQ1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkMwMTIwICkgLyogKFBEQ19VUzApIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzBfUFRTUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzAxMjQgKSAvKiAoUERDX1VTMCkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX1ROQ1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkMwMTFDICkgLyogKFBEQ19VUzApIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX1RQUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkMwMTA4ICkgLyogKFBEQ19VUzApIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9SQ1IgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDMDEwNCApIC8qIChQRENfVVMwKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9SUFIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDMDEwMCApIC8qIChQRENfVVMwKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9STkNSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDMDExNCApIC8qIChQRENfVVMwKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVVMwIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX0JSR1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkMwMDIwICkgLyogKFVTMCkgQmF1ZCBSYXRlIEdlbmVyYXRvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX05FUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkMwMDQ0ICkgLyogKFVTMCkgTmIgRXJyb3JzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzBfQ1IgICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzAwMDAgKSAvKiAoVVMwKSBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzBfSU1SICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzAwMTAgKSAvKiAoVVMwKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX0ZJREkgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkMwMDQwICkgLyogKFVTMCkgRklfRElfUmF0aW8gUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9UVEdSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDMDAyOCApIC8qIChVUzApIFRyYW5zbWl0dGVyIFRpbWUtZ3VhcmQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9NUiAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDMDAwNCApIC8qIChVUzApIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9SVE9SICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDMDAyNCApIC8qIChVUzApIFJlY2VpdmVyIFRpbWUtb3V0IFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzBfQ1NSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzAwMTQgKSAvKiAoVVMwKSBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX1JIUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkMwMDE4ICkgLyogKFVTMCkgUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX0lEUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkMwMDBDICkgLyogKFVTMCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9USFIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDMDAxQyApIC8qIChVUzApIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9JRiAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDMDA0QyApIC8qIChVUzApIElSREFfRklMVEVSIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzBfSUVSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzAwMDggKSAvKiAoVVMwKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfU1NDIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1ROQ1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ0MTFDICkgLyogKFBEQ19TU0MpIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1JQUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ0MTAwICkgLyogKFBEQ19TU0MpIFJlY2VpdmUgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1JOQ1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ0MTE0ICkgLyogKFBEQ19TU0MpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfVFBSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDQxMDggKSAvKiAoUERDX1NTQykgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1BUQ1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ0MTIwICkgLyogKFBEQ19TU0MpIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfVENSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDQxMEMgKSAvKiAoUERDX1NTQykgVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1JDUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ0MTA0ICkgLyogKFBEQ19TU0MpIFJlY2VpdmUgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1JOUFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ0MTEwICkgLyogKFBEQ19TU0MpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfVE5QUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDQxMTggKSAvKiAoUERDX1NTQykgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfUFRTUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDQxMjQgKSAvKiAoUERDX1NTQykgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgU1NDIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1JIUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ0MDIwICkgLyogKFNTQykgUmVjZWl2ZSBIb2xkaW5nIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfUlNIUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDQwMzAgKSAvKiAoU1NDKSBSZWNlaXZlIFN5bmMgSG9sZGluZyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1RGTVIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ0MDFDICkgLyogKFNTQykgVHJhbnNtaXQgRnJhbWUgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0lEUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ0MDQ4ICkgLyogKFNTQykgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19USFIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZENDAyNCApIC8qIChTU0MpIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19SQ01SICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZENDAxMCApIC8qIChTU0MpIFJlY2VpdmUgQ2xvY2sgTW9kZVJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfSUVSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDQwNDQgKSAvKiAoU1NDKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfVFNIUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDQwMzQgKSAvKiAoU1NDKSBUcmFuc21pdCBTeW5jIEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19TUiAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZENDA0MCApIC8qIChTU0MpIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0NNUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ0MDA0ICkgLyogKFNTQykgQ2xvY2sgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1RDTVIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ0MDE4ICkgLyogKFNTQykgVHJhbnNtaXQgQ2xvY2sgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0NSICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ0MDAwICkgLyogKFNTQykgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0lNUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ0MDRDICkgLyogKFNTQykgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19SRk1SICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZENDAxNCApIC8qIChTU0MpIFJlY2VpdmUgRnJhbWUgTW9kZSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVFdJIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX0lFUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkI4MDI0ICkgLyogKFRXSSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX0NSICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkI4MDAwICkgLyogKFRXSSkgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX1NSICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkI4MDIwICkgLyogKFRXSSkgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UV0lfSU1SICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQjgwMkMgKSAvKiAoVFdJKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX1RIUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkI4MDM0ICkgLyogKFRXSSkgVHJhbnNtaXQgSG9sZGluZyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX0lEUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkI4MDI4ICkgLyogKFRXSSkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9JQURSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZCODAwQyApIC8qIChUV0kpIEludGVybmFsIEFkZHJlc3MgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9NTVIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZCODAwNCApIC8qIChUV0kpIE1hc3RlciBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UV0lfQ1dHUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQjgwMTAgKSAvKiAoVFdJKSBDbG9jayBXYXZlZm9ybSBHZW5lcmF0b3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9SSFIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZCODAzMCApIC8qIChUV0kpIFJlY2VpdmUgSG9sZGluZyBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUFdNQ19DSDMgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NIM19DVVBEUiAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQ0MyNzAgKSAvKiAoUFdNQ19DSDMpIENoYW5uZWwgVXBkYXRlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NIM19SZXNlcnZlZCAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQ0MyNzQgKSAvKiAoUFdNQ19DSDMpIFJlc2VydmVkICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NIM19DUFJEUiAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQ0MyNjggKSAvKiAoUFdNQ19DSDMpIENoYW5uZWwgUGVyaW9kIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NIM19DRFRZUiAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQ0MyNjQgKSAvKiAoUFdNQ19DSDMpIENoYW5uZWwgRHV0eSBDeWNsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDNfQ0NOVFIgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMjZDICkgLyogKFBXTUNfQ0gzKSBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0gzX0NNUiAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzI2MCApIC8qIChQV01DX0NIMykgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQV01DX0NIMiBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0gyX1Jlc2VydmVkICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzI1NCApIC8qIChQV01DX0NIMikgUmVzZXJ2ZWQgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0gyX0NNUiAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzI0MCApIC8qIChQV01DX0NIMikgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NIMl9DQ05UUiAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQ0MyNEMgKSAvKiAoUFdNQ19DSDIpIENoYW5uZWwgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDJfQ1BSRFIgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMjQ4ICkgLyogKFBXTUNfQ0gyKSBDaGFubmVsIFBlcmlvZCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDJfQ1VQRFIgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMjUwICkgLyogKFBXTUNfQ0gyKSBDaGFubmVsIFVwZGF0ZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDJfQ0RUWVIgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMjQ0ICkgLyogKFBXTUNfQ0gyKSBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBXTUNfQ0gxIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDFfUmVzZXJ2ZWQgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMjM0ICkgLyogKFBXTUNfQ0gxKSBSZXNlcnZlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDFfQ1VQRFIgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMjMwICkgLyogKFBXTUNfQ0gxKSBDaGFubmVsIFVwZGF0ZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDFfQ1BSRFIgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMjI4ICkgLyogKFBXTUNfQ0gxKSBDaGFubmVsIFBlcmlvZCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDFfQ0NOVFIgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMjJDICkgLyogKFBXTUNfQ0gxKSBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0gxX0NEVFlSICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzIyNCApIC8qIChQV01DX0NIMSkgQ2hhbm5lbCBEdXR5IEN5Y2xlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NIMV9DTVIgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQ0MyMjAgKSAvKiAoUFdNQ19DSDEpIENoYW5uZWwgTW9kZSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUFdNQ19DSDAgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NIMF9SZXNlcnZlZCAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQ0MyMTQgKSAvKiAoUFdNQ19DSDApIFJlc2VydmVkICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NIMF9DUFJEUiAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQ0MyMDggKSAvKiAoUFdNQ19DSDApIENoYW5uZWwgUGVyaW9kIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NIMF9DRFRZUiAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQ0MyMDQgKSAvKiAoUFdNQ19DSDApIENoYW5uZWwgRHV0eSBDeWNsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDBfQ01SICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMjAwICkgLyogKFBXTUNfQ0gwKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0gwX0NVUERSICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzIxMCApIC8qIChQV01DX0NIMCkgQ2hhbm5lbCBVcGRhdGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0gwX0NDTlRSICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzIwQyApIC8qIChQV01DX0NIMCkgQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQV01DIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19JRFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMDE0ICkgLyogKFBXTUMpIFBXTUMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfRElTICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzAwOCApIC8qIChQV01DKSBQV01DIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfSUVSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzAxMCApIC8qIChQV01DKSBQV01DIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfVlIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzBGQyApIC8qIChQV01DKSBQV01DIFZlcnNpb24gUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfSVNSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzAxQyApIC8qIChQV01DKSBQV01DIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfU1IgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzAwQyApIC8qIChQV01DKSBQV01DIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19JTVIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMDE4ICkgLyogKFBXTUMpIFBXTUMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfTVIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzAwMCApIC8qIChQV01DKSBQV01DIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfRU5BICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzAwNCApIC8qIChQV01DKSBQV01DIEVuYWJsZSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVURQIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0lNUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkIwMDE4ICkgLyogKFVEUCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9GQUREUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZCMDAwOCApIC8qIChVRFApIEZ1bmN0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9OVU0gICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZCMDAwMCApIC8qIChVRFApIEZyYW1lIE51bWJlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0ZEUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkIwMDUwICkgLyogKFVEUCkgRW5kcG9pbnQgRklGTyBEYXRhIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VRFBfSVNSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQjAwMUMgKSAvKiAoVURQKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VRFBfQ1NSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQjAwMzAgKSAvKiAoVURQKSBFbmRwb2ludCBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9JRFIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZCMDAxNCApIC8qIChVRFApIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VRFBfSUNSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQjAwMjAgKSAvKiAoVURQKSBJbnRlcnJ1cHQgQ2xlYXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9SU1RFUCAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZCMDAyOCApIC8qIChVRFApIFJlc2V0IEVuZHBvaW50IFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VRFBfVFhWQyAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQjAwNzQgKSAvKiAoVURQKSBUcmFuc2NlaXZlciBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VRFBfR0xCU1RBVEUgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQjAwMDQgKSAvKiAoVURQKSBHbG9iYWwgU3RhdGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9JRVIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZCMDAxMCApIC8qIChVRFApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRDMCBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1RDMF9TUiAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDAyMCApIC8qIChUQzApIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMwX1JDICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMDFDICkgLyogKFRDMCkgUmVnaXN0ZXIgQyAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMwX1JCICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMDE4ICkgLyogKFRDMCkgUmVnaXN0ZXIgQiAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMwX0NDUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMDAwICkgLyogKFRDMCkgQ2hhbm5lbCBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UQzBfQ01SICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTAwMDQgKSAvKiAoVEMwKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXIgKENhcHR1cmUgTW9kZSAvIFdhdmVmb3JtIE1vZGUpICovDQotI2RlZmluZSBBVDkxQ19UQzBfSUVSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTAwMjQgKSAvKiAoVEMwKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UQzBfUkEgICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTAwMTQgKSAvKiAoVEMwKSBSZWdpc3RlciBBICovDQotI2RlZmluZSBBVDkxQ19UQzBfSURSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTAwMjggKSAvKiAoVEMwKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMwX0NWICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMDEwICkgLyogKFRDMCkgQ291bnRlciBWYWx1ZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMwX0lNUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMDJDICkgLyogKFRDMCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRDMSBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1RDMV9SQiAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDA1OCApIC8qIChUQzEpIFJlZ2lzdGVyIEIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMV9DQ1IgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDA0MCApIC8qIChUQzEpIENoYW5uZWwgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMxX0lFUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMDY0ICkgLyogKFRDMSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMxX0lEUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMDY4ICkgLyogKFRDMSkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMV9TUiAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDA2MCApIC8qIChUQzEpIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMxX0NNUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMDQ0ICkgLyogKFRDMSkgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyIChDYXB0dXJlIE1vZGUgLyBXYXZlZm9ybSBNb2RlKSAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMxX1JBICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMDU0ICkgLyogKFRDMSkgUmVnaXN0ZXIgQSAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMxX1JDICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMDVDICkgLyogKFRDMSkgUmVnaXN0ZXIgQyAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMxX0lNUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMDZDICkgLyogKFRDMSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMV9DViAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDA1MCApIC8qIChUQzEpIENvdW50ZXIgVmFsdWUgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRDMiBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1RDMl9DTVIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDA4NCApIC8qIChUQzIpIENoYW5uZWwgTW9kZSBSZWdpc3RlciAoQ2FwdHVyZSBNb2RlIC8gV2F2ZWZvcm0gTW9kZSkgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMl9DQ1IgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDA4MCApIC8qIChUQzIpIENoYW5uZWwgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMyX0NWICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMDkwICkgLyogKFRDMikgQ291bnRlciBWYWx1ZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMyX1JBICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMDk0ICkgLyogKFRDMikgUmVnaXN0ZXIgQSAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMyX1JCICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMDk4ICkgLyogKFRDMikgUmVnaXN0ZXIgQiAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMyX0lEUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMEE4ICkgLyogKFRDMikgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMl9JTVIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDBBQyApIC8qIChUQzIpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UQzJfUkMgICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTAwOUMgKSAvKiAoVEMyKSBSZWdpc3RlciBDICovDQotI2RlZmluZSBBVDkxQ19UQzJfSUVSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTAwQTQgKSAvKiAoVEMyKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UQzJfU1IgICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTAwQTAgKSAvKiAoVEMyKSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRDQiBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1RDQl9CTVIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDBDNCApIC8qIChUQ0IpIFRDIEJsb2NrIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDQl9CQ1IgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDBDMCApIC8qIChUQ0IpIFRDIEJsb2NrIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENBTl9NQjAgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIwX01ETCAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyMTQgKSAvKiAoQ0FOX01CMCkgTWFpbEJveCBEYXRhIExvdyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMF9NQU0gICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjA0ICkgLyogKENBTl9NQjApIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIwX01DUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyMUMgKSAvKiAoQ0FOX01CMCkgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIwX01JRCAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyMDggKSAvKiAoQ0FOX01CMCkgTWFpbEJveCBJRCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMF9NU1IgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjEwICkgLyogKENBTl9NQjApIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIwX01GSUQgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyMEMgKSAvKiAoQ0FOX01CMCkgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjBfTURIICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDIxOCApIC8qIChDQU5fTUIwKSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMF9NTVIgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjAwICkgLyogKENBTl9NQjApIE1haWxCb3ggTW9kZSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CMSBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjFfTURMICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDIzNCApIC8qIChDQU5fTUIxKSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIxX01JRCAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyMjggKSAvKiAoQ0FOX01CMSkgTWFpbEJveCBJRCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMV9NTVIgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjIwICkgLyogKENBTl9NQjEpIE1haWxCb3ggTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMV9NU1IgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjMwICkgLyogKENBTl9NQjEpIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIxX01BTSAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyMjQgKSAvKiAoQ0FOX01CMSkgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjFfTURIICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDIzOCApIC8qIChDQU5fTUIxKSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMV9NQ1IgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjNDICkgLyogKENBTl9NQjEpIE1haWxCb3ggQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMV9NRklEICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjJDICkgLyogKENBTl9NQjEpIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU5fTUIyIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NQ1IgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjVDICkgLyogKENBTl9NQjIpIE1haWxCb3ggQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NREggICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjU4ICkgLyogKENBTl9NQjIpIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIyX01JRCAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyNDggKSAvKiAoQ0FOX01CMikgTWFpbEJveCBJRCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NREwgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjU0ICkgLyogKENBTl9NQjIpIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjJfTU1SICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDI0MCApIC8qIChDQU5fTUIyKSBNYWlsQm94IE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjJfTUFNICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDI0NCApIC8qIChDQU5fTUIyKSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NRklEICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjRDICkgLyogKENBTl9NQjIpIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIyX01TUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyNTAgKSAvKiAoQ0FOX01CMikgTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENBTl9NQjMgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIzX01GSUQgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyNkMgKSAvKiAoQ0FOX01CMykgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjNfTUFNICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDI2NCApIC8qIChDQU5fTUIzKSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CM19NSUQgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjY4ICkgLyogKENBTl9NQjMpIE1haWxCb3ggSUQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjNfTUNSICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDI3QyApIC8qIChDQU5fTUIzKSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjNfTU1SICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDI2MCApIC8qIChDQU5fTUIzKSBNYWlsQm94IE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjNfTVNSICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDI3MCApIC8qIChDQU5fTUIzKSBNYWlsQm94IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CM19NREwgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjc0ICkgLyogKENBTl9NQjMpIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjNfTURIICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDI3OCApIC8qIChDQU5fTUIzKSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CNCBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjRfTUlEICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDI4OCApIC8qIChDQU5fTUI0KSBNYWlsQm94IElEIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI0X01NUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyODAgKSAvKiAoQ0FOX01CNCkgTWFpbEJveCBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI0X01ESCAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyOTggKSAvKiAoQ0FOX01CNCkgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjRfTUZJRCAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDI4QyApIC8qIChDQU5fTUI0KSBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CNF9NU1IgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjkwICkgLyogKENBTl9NQjQpIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI0X01DUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyOUMgKSAvKiAoQ0FOX01CNCkgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI0X01ETCAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyOTQgKSAvKiAoQ0FOX01CNCkgTWFpbEJveCBEYXRhIExvdyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CNF9NQU0gICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjg0ICkgLyogKENBTl9NQjQpIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU5fTUI1IHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CNV9NU1IgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMkIwICkgLyogKENBTl9NQjUpIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI1X01DUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyQkMgKSAvKiAoQ0FOX01CNSkgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI1X01GSUQgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyQUMgKSAvKiAoQ0FOX01CNSkgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjVfTURIICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDJCOCApIC8qIChDQU5fTUI1KSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CNV9NSUQgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMkE4ICkgLyogKENBTl9NQjUpIE1haWxCb3ggSUQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjVfTU1SICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDJBMCApIC8qIChDQU5fTUI1KSBNYWlsQm94IE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjVfTURMICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDJCNCApIC8qIChDQU5fTUI1KSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI1X01BTSAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyQTQgKSAvKiAoQ0FOX01CNSkgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENBTl9NQjYgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI2X01GSUQgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyQ0MgKSAvKiAoQ0FOX01CNikgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjZfTUlEICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDJDOCApIC8qIChDQU5fTUI2KSBNYWlsQm94IElEIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI2X01BTSAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyQzQgKSAvKiAoQ0FOX01CNikgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjZfTVNSICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDJEMCApIC8qIChDQU5fTUI2KSBNYWlsQm94IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CNl9NREwgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMkQ0ICkgLyogKENBTl9NQjYpIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjZfTUNSICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDJEQyApIC8qIChDQU5fTUI2KSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjZfTURIICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDJEOCApIC8qIChDQU5fTUI2KSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CNl9NTVIgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMkMwICkgLyogKENBTl9NQjYpIE1haWxCb3ggTW9kZSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CNyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjdfTUNSICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDJGQyApIC8qIChDQU5fTUI3KSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjdfTURIICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDJGOCApIC8qIChDQU5fTUI3KSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CN19NRklEICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMkVDICkgLyogKENBTl9NQjcpIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI3X01ETCAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyRjQgKSAvKiAoQ0FOX01CNykgTWFpbEJveCBEYXRhIExvdyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CN19NSUQgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMkU4ICkgLyogKENBTl9NQjcpIE1haWxCb3ggSUQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjdfTU1SICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDJFMCApIC8qIChDQU5fTUI3KSBNYWlsQm94IE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjdfTUFNICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDJFNCApIC8qIChDQU5fTUI3KSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CN19NU1IgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMkYwICkgLyogKENBTl9NQjcpIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU4gcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19DQU5fVENSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAwMjQgKSAvKiAoQ0FOKSBUcmFuc2ZlciBDb21tYW5kIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fSU1SICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAwMEMgKSAvKiAoQ0FOKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX0lFUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMDA0ICkgLyogKENBTikgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX0VDUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMDIwICkgLyogKENBTikgRXJyb3IgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1RJTUVTVFAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMDFDICkgLyogKENBTikgVGltZSBTdGFtcCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01SICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMDAwICkgLyogKENBTikgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX0lEUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMDA4ICkgLyogKENBTikgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9BQ1IgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDAyOCApIC8qIChDQU4pIEFib3J0IENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9USU0gICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDAxOCApIC8qIChDQU4pIFRpbWVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fU1IgICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAwMTAgKSAvKiAoQ0FOKSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9CUiAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDAxNCApIC8qIChDQU4pIEJhdWRyYXRlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fVlIgICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAwRkMgKSAvKiAoQ0FOKSBWZXJzaW9uIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBFTUFDIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19JU1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDI0ICkgLyogKEVNQUMpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfU0E0SCAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzBCNCApIC8qIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDQgVG9wLCBMYXN0IDIgYnl0ZXMgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfU0ExTCAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzA5OCApIC8qIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDEgQm90dG9tLCBGaXJzdCA0IGJ5dGVzICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0VMRSAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGREMwNzggKSAvKiAoRU1BQykgRXhjZXNzaXZlIExlbmd0aCBFcnJvcnMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfTENPTCAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzA1QyApIC8qIChFTUFDKSBMYXRlIENvbGxpc2lvbiBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19STEUgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDg4ICkgLyogKEVNQUMpIFJlY2VpdmUgTGVuZ3RoIEZpZWxkIE1pc21hdGNoIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1dPTCAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGREMwQzQgKSAvKiAoRU1BQykgV2FrZSBPbiBMQU4gUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfRFRGICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzA1OCApIC8qIChFTUFDKSBEZWZlcnJlZCBUcmFuc21pc3Npb24gRnJhbWUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfVFVORCAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzA2NCApIC8qIChFTUFDKSBUcmFuc21pdCBVbmRlcnJ1biBFcnJvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19OQ1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDAwICkgLyogKEVNQUMpIE5ldHdvcmsgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19TQTRMICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMEIwICkgLyogKEVNQUMpIFNwZWNpZmljIEFkZHJlc3MgNCBCb3R0b20sIEZpcnN0IDQgYnl0ZXMgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfUlNSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzAyMCApIC8qIChFTUFDKSBSZWNlaXZlIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19TQTNMICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMEE4ICkgLyogKEVNQUMpIFNwZWNpZmljIEFkZHJlc3MgMyBCb3R0b20sIEZpcnN0IDQgYnl0ZXMgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfVFNSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzAxNCApIC8qIChFTUFDKSBUcmFuc21pdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfSURSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzAyQyApIC8qIChFTUFDKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19SU0UgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDc0ICkgLyogKEVNQUMpIFJlY2VpdmUgU3ltYm9sIEVycm9ycyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19FQ09MICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDYwICkgLyogKEVNQUMpIEV4Y2Vzc2l2ZSBDb2xsaXNpb24gUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfVElEICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzBCOCApIC8qIChFTUFDKSBUeXBlIElEIENoZWNraW5nIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0hSQiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGREMwOTAgKSAvKiAoRU1BQykgSGFzaCBBZGRyZXNzIEJvdHRvbVszMTowXSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19UQlFQICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDFDICkgLyogKEVNQUMpIFRyYW5zbWl0IEJ1ZmZlciBRdWV1ZSBQb2ludGVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1VTUklPICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGREMwQzAgKSAvKiAoRU1BQykgVVNFUiBJbnB1dC9PdXRwdXQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfUFRSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzAzOCApIC8qIChFTUFDKSBQYXVzZSBUaW1lIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1NBMkggICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGREMwQTQgKSAvKiAoRU1BQykgU3BlY2lmaWMgQWRkcmVzcyAyIFRvcCwgTGFzdCAyIGJ5dGVzICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1JPViAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGREMwNzAgKSAvKiAoRU1BQykgUmVjZWl2ZSBPdmVycnVuIEVycm9ycyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19BTEUgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDU0ICkgLyogKEVNQUMpIEFsaWdubWVudCBFcnJvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19SSkEgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDdDICkgLyogKEVNQUMpIFJlY2VpdmUgSmFiYmVycyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19SQlFQICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDE4ICkgLyogKEVNQUMpIFJlY2VpdmUgQnVmZmVyIFF1ZXVlIFBvaW50ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfVFBGICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzA4QyApIC8qIChFTUFDKSBUcmFuc21pdHRlZCBQYXVzZSBGcmFtZXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfTkNGR1IgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzAwNCApIC8qIChFTUFDKSBOZXR3b3JrIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfSFJUICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzA5NCApIC8qIChFTUFDKSBIYXNoIEFkZHJlc3MgVG9wWzYzOjMyXSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19VU0YgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDgwICkgLyogKEVNQUMpIFVuZGVyc2l6ZSBGcmFtZXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfRkNTRSAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzA1MCApIC8qIChFTUFDKSBGcmFtZSBDaGVjayBTZXF1ZW5jZSBFcnJvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19UUFEgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMEJDICkgLyogKEVNQUMpIFRyYW5zbWl0IFBhdXNlIFF1YW50dW0gUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfTUFOICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzAzNCApIC8qIChFTUFDKSBQSFkgTWFpbnRlbmFuY2UgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfRlRPICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzA0MCApIC8qIChFTUFDKSBGcmFtZXMgVHJhbnNtaXR0ZWQgT0sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfUkVWICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzBGQyApIC8qIChFTUFDKSBSZXZpc2lvbiBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19JTVIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDMwICkgLyogKEVNQUMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1NDRiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGREMwNDQgKSAvKiAoRU1BQykgU2luZ2xlIENvbGxpc2lvbiBGcmFtZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19QRlIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDNDICkgLyogKEVNQUMpIFBhdXNlIEZyYW1lcyByZWNlaXZlZCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19NQ0YgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDQ4ICkgLyogKEVNQUMpIE11bHRpcGxlIENvbGxpc2lvbiBGcmFtZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19OU1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDA4ICkgLyogKEVNQUMpIE5ldHdvcmsgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1NBMkwgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGREMwQTAgKSAvKiAoRU1BQykgU3BlY2lmaWMgQWRkcmVzcyAyIEJvdHRvbSwgRmlyc3QgNCBieXRlcyAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19GUk8gICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDRDICkgLyogKEVNQUMpIEZyYW1lcyBSZWNlaXZlZCBPSyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19JRVIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDI4ICkgLyogKEVNQUMpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfU0ExSCAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzA5QyApIC8qIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDEgVG9wLCBMYXN0IDIgYnl0ZXMgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfQ1NFICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzA2OCApIC8qIChFTUFDKSBDYXJyaWVyIFNlbnNlIEVycm9yIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1NBM0ggICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGREMwQUMgKSAvKiAoRU1BQykgU3BlY2lmaWMgQWRkcmVzcyAzIFRvcCwgTGFzdCAyIGJ5dGVzICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1JSRSAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGREMwNkMgKSAvKiAoRU1BQykgUmVjZWl2ZSBSZXNzb3VyY2UgRXJyb3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfU1RFICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzA4NCApIC8qIChFTUFDKSBTUUUgVGVzdCBFcnJvciBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX0FEQyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19QVFNSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEODEyNCApIC8qIChQRENfQURDKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRENfUFRDUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDgxMjAgKSAvKiAoUERDX0FEQykgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19UTlBSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEODExOCApIC8qIChQRENfQURDKSBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19UTkNSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEODExQyApIC8qIChQRENfQURDKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19STlBSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEODExMCApIC8qIChQRENfQURDKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1JOQ1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ4MTE0ICkgLyogKFBEQ19BREMpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRENfUlBSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDgxMDAgKSAvKiAoUERDX0FEQykgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRENfVENSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDgxMEMgKSAvKiAoUERDX0FEQykgVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1RQUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ4MTA4ICkgLyogKFBEQ19BREMpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19SQ1IgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEODEwNCApIC8qIChQRENfQURDKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIEFEQyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DRFIyICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEODAzOCApIC8qIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NEUjMgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ4MDNDICkgLyogKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAzICovDQotI2RlZmluZSBBVDkxQ19BRENfQ0RSMCAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDgwMzAgKSAvKiAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDAgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DRFI1ICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEODA0NCApIC8qIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNSAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NIRFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ4MDE0ICkgLyogKEFEQykgQURDIENoYW5uZWwgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1NSICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ4MDFDICkgLyogKEFEQykgQURDIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NEUjQgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ4MDQwICkgLyogKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA0ICovDQotI2RlZmluZSBBVDkxQ19BRENfQ0RSMSAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDgwMzQgKSAvKiAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDEgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19MQ0RSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEODAyMCApIC8qIChBREMpIEFEQyBMYXN0IENvbnZlcnRlZCBEYXRhIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRENfSURSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDgwMjggKSAvKiAoQURDKSBBREMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DUiAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEODAwMCApIC8qIChBREMpIEFEQyBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRENfQ0RSNyAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDgwNEMgKSAvKiAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDcgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DRFI2ICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEODA0OCApIC8qIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNiAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0lFUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ4MDI0ICkgLyogKEFEQykgQURDIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DSEVSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEODAxMCApIC8qIChBREMpIEFEQyBDaGFubmVsIEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NIU1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ4MDE4ICkgLyogKEFEQykgQURDIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRENfTVIgICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDgwMDQgKSAvKiAoQURDKSBBREMgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0lNUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ4MDJDICkgLyogKEFEQykgQURDIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfQUVTIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX1RQUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE0MTA4ICkgLyogKFBEQ19BRVMpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19QVENSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBNDEyMCApIC8qIChQRENfQUVTKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX1JOUFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE0MTEwICkgLyogKFBEQ19BRVMpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRVNfVE5DUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTQxMUMgKSAvKiAoUERDX0FFUykgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRVNfVENSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTQxMEMgKSAvKiAoUERDX0FFUykgVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX1JDUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE0MTA0ICkgLyogKFBEQ19BRVMpIFJlY2VpdmUgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX1JOQ1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE0MTE0ICkgLyogKFBEQ19BRVMpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRVNfVE5QUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTQxMTggKSAvKiAoUERDX0FFUykgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRVNfUlBSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTQxMDAgKSAvKiAoUERDX0FFUykgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRVNfUFRTUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTQxMjQgKSAvKiAoUERDX0FFUykgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQUVTIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX0lWeFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE0MDYwICkgLyogKEFFUykgSW5pdGlhbGl6YXRpb24gVmVjdG9yIHggUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19NUiAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBNDAwNCApIC8qIChBRVMpIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19WUiAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBNDBGQyApIC8qIChBRVMpIEFFUyBWZXJzaW9uIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRVNfT0RBVEF4UiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTQwNTAgKSAvKiAoQUVTKSBPdXRwdXQgRGF0YSB4IFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRVNfSURBVEF4UiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTQwNDAgKSAvKiAoQUVTKSBJbnB1dCBEYXRhIHggUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19DUiAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBNDAwMCApIC8qIChBRVMpIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19JRFIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBNDAxNCApIC8qIChBRVMpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRVNfSU1SICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTQwMTggKSAvKiAoQUVTKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX0lFUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE0MDEwICkgLyogKEFFUykgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX0tFWVd4UiAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE0MDIwICkgLyogKEFFUykgS2V5IFdvcmQgeCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX0lTUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE0MDFDICkgLyogKEFFUykgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX1RERVMgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19UREVTX1JOQ1IgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTgxMTQgKSAvKiAoUERDX1RERVMpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UREVTX1RDUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTgxMEMgKSAvKiAoUERDX1RERVMpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfUkNSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBODEwNCApIC8qIChQRENfVERFUykgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UREVTX1ROUFIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTgxMTggKSAvKiAoUERDX1RERVMpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19STlBSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE4MTEwICkgLyogKFBEQ19UREVTKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19SUFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE4MTAwICkgLyogKFBEQ19UREVTKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfVE5DUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBODExQyApIC8qIChQRENfVERFUykgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UREVTX1RQUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTgxMDggKSAvKiAoUERDX1RERVMpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfUFRTUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBODEyNCApIC8qIChQRENfVERFUykgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19QVENSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE4MTIwICkgLyogKFBEQ19UREVTKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVERFUyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfS0VZMld4UiAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBODAyOCApIC8qIChUREVTKSBLZXkgMiBXb3JkIHggUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfS0VZM1d4UiAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBODAzMCApIC8qIChUREVTKSBLZXkgMyBXb3JkIHggUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfSURSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBODAxNCApIC8qIChUREVTKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19WUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE4MEZDICkgLyogKFRERVMpIFRERVMgVmVyc2lvbiBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19JVnhSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE4MDYwICkgLyogKFRERVMpIEluaXRpYWxpemF0aW9uIFZlY3RvciB4IFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UREVTX09EQVRBeFIgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTgwNTAgKSAvKiAoVERFUykgT3V0cHV0IERhdGEgeCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19JTVIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE4MDE4ICkgLyogKFRERVMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UREVTX01SICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTgwMDQgKSAvKiAoVERFUykgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19DUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE4MDAwICkgLyogKFRERVMpIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfSUVSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBODAxMCApIC8qIChUREVTKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UREVTX0lTUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTgwMUMgKSAvKiAoVERFUykgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19JREFUQXhSICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE4MDQwICkgLyogKFRERVMpIElucHV0IERhdGEgeCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19LRVkxV3hSICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE4MDIwICkgLyogKFRERVMpIEtleSAxIFdvcmQgeCBSZWdpc3RlciAqLw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgICBSRUdJU1RFUiBBRERSRVNTIERFRklOSVRJT04gRk9SIEFUOTFTQU03WDEyOA0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBTWVMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQUlDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0FJQ19JVlIgICAoKEFUOTFfUkVHICopIAkweEZGRkZGMTAwKSAvLyAoQUlDKSBJUlEgVmVjdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfU01SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjAwMCkgLy8gKEFJQykgU291cmNlIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19GVlIgICAoKEFUOTFfUkVHICopIAkweEZGRkZGMTA0KSAvLyAoQUlDKSBGSVEgVmVjdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfRENSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjEzOCkgLy8gKEFJQykgRGVidWcgQ29udHJvbCBSZWdpc3RlciAoUHJvdGVjdCkNCisjZGVmaW5lIEFUOTFDX0FJQ19FT0lDUiAoKEFUOTFfUkVHICopIAkweEZGRkZGMTMwKSAvLyAoQUlDKSBFbmQgb2YgSW50ZXJydXB0IENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19TVlIgICAoKEFUOTFfUkVHICopIAkweEZGRkZGMDgwKSAvLyAoQUlDKSBTb3VyY2UgVmVjdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfRkZTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjE0OCkgLy8gKEFJQykgRmFzdCBGb3JjaW5nIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0lDQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYxMjgpIC8vIChBSUMpIEludGVycnVwdCBDbGVhciBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfSVNSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjEwOCkgLy8gKEFJQykgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0lNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYxMTApIC8vIChBSUMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfSVBSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjEwQykgLy8gKEFJQykgSW50ZXJydXB0IFBlbmRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19GRkVSICAoKEFUOTFfUkVHICopIAkweEZGRkZGMTQwKSAvLyAoQUlDKSBGYXN0IEZvcmNpbmcgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfSUVDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjEyMCkgLy8gKEFJQykgSW50ZXJydXB0IEVuYWJsZSBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfSVNDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjEyQykgLy8gKEFJQykgSW50ZXJydXB0IFNldCBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfRkZEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjE0NCkgLy8gKEFJQykgRmFzdCBGb3JjaW5nIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19DSVNSICAoKEFUOTFfUkVHICopIAkweEZGRkZGMTE0KSAvLyAoQUlDKSBDb3JlIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19JRENSICAoKEFUOTFfUkVHICopIAkweEZGRkZGMTI0KSAvLyAoQUlDKSBJbnRlcnJ1cHQgRGlzYWJsZSBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfU1BVICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjEzNCkgLy8gKEFJQykgU3B1cmlvdXMgVmVjdG9yIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfREJHVSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19EQkdVX1RDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjMwQykgLy8gKFBEQ19EQkdVKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1JOUFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjMxMCkgLy8gKFBEQ19EQkdVKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9UTlBSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYzMTgpIC8vIChQRENfREJHVSkgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1RQUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjMwOCkgLy8gKFBEQ19EQkdVKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1JQUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjMwMCkgLy8gKFBEQ19EQkdVKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfUkNSICAoKEFUOTFfUkVHICopIAkweEZGRkZGMzA0KSAvLyAoUERDX0RCR1UpIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9STkNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYzMTQpIC8vIChQRENfREJHVSkgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfUFRDUiAoKEFUOTFfUkVHICopIAkweEZGRkZGMzIwKSAvLyAoUERDX0RCR1UpIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1BUU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjMyNCkgLy8gKFBEQ19EQkdVKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1ROQ1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjMxQykgLy8gKFBEQ19EQkdVKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIERCR1UgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfREJHVV9FWElEICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYyNDQpIC8vIChEQkdVKSBDaGlwIElEIEV4dGVuc2lvbiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9CUkdSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYyMjApIC8vIChEQkdVKSBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX0lEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjIwQykgLy8gKERCR1UpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX0NTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjIxNCkgLy8gKERCR1UpIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX0NJRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjI0MCkgLy8gKERCR1UpIENoaXAgSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkZGMjA0KSAvLyAoREJHVSkgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9JTVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYyMTApIC8vIChEQkdVKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9DUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYyMDApIC8vIChEQkdVKSBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX0ZOVFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjI0OCkgLy8gKERCR1UpIEZvcmNlIE5UUlNUIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1RIUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjIxQykgLy8gKERCR1UpIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfUkhSICAoKEFUOTFfUkVHICopIAkweEZGRkZGMjE4KSAvLyAoREJHVSkgUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9JRVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYyMDgpIC8vIChEQkdVKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQSU9BIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1BJT0FfT0RSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNDE0KSAvLyAoUElPQSkgT3V0cHV0IERpc2FibGUgUmVnaXN0ZXJyDQorI2RlZmluZSBBVDkxQ19QSU9BX1NPRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQzMCkgLy8gKFBJT0EpIFNldCBPdXRwdXQgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9JU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0NEMpIC8vIChQSU9BKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0FCU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQ3OCkgLy8gKFBJT0EpIEFCIFNlbGVjdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfSUVSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNDQwKSAvLyAoUElPQSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9QUFVEUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNDYwKSAvLyAoUElPQSkgUHVsbC11cCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0lNUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQ0OCkgLy8gKFBJT0EpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX1BFUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQwMCkgLy8gKFBJT0EpIFBJTyBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfSUZEUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNDI0KSAvLyAoUElPQSkgSW5wdXQgRmlsdGVyIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfT1dEUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNEE0KSAvLyAoUElPQSkgT3V0cHV0IFdyaXRlIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfTURTUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNDU4KSAvLyAoUElPQSkgTXVsdGktZHJpdmVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9JRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0NDQpIC8vIChQSU9BKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9PRFNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0MzgpIC8vIChQSU9BKSBPdXRwdXQgRGF0YSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfUFBVU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQ2OCkgLy8gKFBJT0EpIFB1bGwtdXAgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX09XU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjRBOCkgLy8gKFBJT0EpIE91dHB1dCBXcml0ZSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfQlNSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNDc0KSAvLyAoUElPQSkgU2VsZWN0IEIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfT1dFUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNEEwKSAvLyAoUElPQSkgT3V0cHV0IFdyaXRlIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9JRkVSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0MjApIC8vIChQSU9BKSBJbnB1dCBGaWx0ZXIgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX1BEU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQzQykgLy8gKFBJT0EpIFBpbiBEYXRhIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9QUFVFUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNDY0KSAvLyAoUElPQSkgUHVsbC11cCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfT1NSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNDE4KSAvLyAoUElPQSkgT3V0cHV0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9BU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0NzApIC8vIChQSU9BKSBTZWxlY3QgQSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9NRERSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0NTQpIC8vIChQSU9BKSBNdWx0aS1kcml2ZXIgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9DT0RSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0MzQpIC8vIChQSU9BKSBDbGVhciBPdXRwdXQgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9NREVSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0NTApIC8vIChQSU9BKSBNdWx0aS1kcml2ZXIgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX1BEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQwNCkgLy8gKFBJT0EpIFBJTyBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0lGU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQyOCkgLy8gKFBJT0EpIElucHV0IEZpbHRlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfT0VSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNDEwKSAvLyAoUElPQSkgT3V0cHV0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9QU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0MDgpIC8vIChQSU9BKSBQSU8gU3RhdHVzIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQSU9CIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1BJT0JfT1dEUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNkE0KSAvLyAoUElPQikgT3V0cHV0IFdyaXRlIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfTURFUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNjUwKSAvLyAoUElPQikgTXVsdGktZHJpdmVyIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9QUFVTUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNjY4KSAvLyAoUElPQikgUHVsbC11cCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfSU1SICAoKEFUOTFfUkVHICopIAkweEZGRkZGNjQ4KSAvLyAoUElPQikgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfQVNSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNjcwKSAvLyAoUElPQikgU2VsZWN0IEEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfUFBVRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjY2MCkgLy8gKFBJT0IpIFB1bGwtdXAgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9QU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2MDgpIC8vIChQSU9CKSBQSU8gU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX0lFUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjY0MCkgLy8gKFBJT0IpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfQ09EUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNjM0KSAvLyAoUElPQikgQ2xlYXIgT3V0cHV0IERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfT1dFUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNkEwKSAvLyAoUElPQikgT3V0cHV0IFdyaXRlIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9BQlNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2NzgpIC8vIChQSU9CKSBBQiBTZWxlY3QgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX0lGRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjYyNCkgLy8gKFBJT0IpIElucHV0IEZpbHRlciBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX1BEU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjYzQykgLy8gKFBJT0IpIFBpbiBEYXRhIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9JRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2NDQpIC8vIChQSU9CKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9PV1NSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2QTgpIC8vIChQSU9CKSBPdXRwdXQgV3JpdGUgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX1BEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjYwNCkgLy8gKFBJT0IpIFBJTyBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX09EUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjYxNCkgLy8gKFBJT0IpIE91dHB1dCBEaXNhYmxlIFJlZ2lzdGVycg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9JRlNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2MjgpIC8vIChQSU9CKSBJbnB1dCBGaWx0ZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX1BQVUVSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2NjQpIC8vIChQSU9CKSBQdWxsLXVwIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9TT0RSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2MzApIC8vIChQSU9CKSBTZXQgT3V0cHV0IERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfSVNSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNjRDKSAvLyAoUElPQikgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9PRFNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2MzgpIC8vIChQSU9CKSBPdXRwdXQgRGF0YSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfT1NSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNjE4KSAvLyAoUElPQikgT3V0cHV0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9NRFNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2NTgpIC8vIChQSU9CKSBNdWx0aS1kcml2ZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX0lGRVIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjYyMCkgLy8gKFBJT0IpIElucHV0IEZpbHRlciBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfQlNSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNjc0KSAvLyAoUElPQikgU2VsZWN0IEIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfTUREUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNjU0KSAvLyAoUElPQikgTXVsdGktZHJpdmVyIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfT0VSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNjEwKSAvLyAoUElPQikgT3V0cHV0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9QRVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2MDApIC8vIChQSU9CKSBQSU8gRW5hYmxlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDS0dSIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0NLR1JfTU9SICAoKEFUOTFfUkVHICopIAkweEZGRkZGQzIwKSAvLyAoQ0tHUikgTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DS0dSX1BMTFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkMyQykgLy8gKENLR1IpIFBMTCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9NQ0ZSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDMjQpIC8vIChDS0dSKSBNYWluIENsb2NrICBGcmVxdWVuY3kgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBNQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19QTUNfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkM2NCkgLy8gKFBNQykgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19NT1IgICAoKEFUOTFfUkVHICopIAkweEZGRkZGQzIwKSAvLyAoUE1DKSBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19QTExSICAoKEFUOTFfUkVHICopIAkweEZGRkZGQzJDKSAvLyAoUE1DKSBQTEwgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0VSICAoKEFUOTFfUkVHICopIAkweEZGRkZGQzEwKSAvLyAoUE1DKSBQZXJpcGhlcmFsIENsb2NrIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDS1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDNDApIC8vIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX01DS1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDMzApIC8vIChQTUMpIE1hc3RlciBDbG9jayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX1NDRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDMDQpIC8vIChQTUMpIFN5c3RlbSBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfUENEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkMxNCkgLy8gKFBNQykgUGVyaXBoZXJhbCBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfU0NTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkMwOCkgLy8gKFBNQykgU3lzdGVtIENsb2NrIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDMTgpIC8vIChQTUMpIFBlcmlwaGVyYWwgQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfTUNGUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkMyNCkgLy8gKFBNQykgTWFpbiBDbG9jayAgRnJlcXVlbmN5IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfU0NFUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkMwMCkgLy8gKFBNQykgU3lzdGVtIENsb2NrIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX0lNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDNkMpIC8vIChQTUMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfSUVSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkM2MCkgLy8gKFBNQykgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX1NSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDNjgpIC8vIChQTUMpIFN0YXR1cyBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUlNUQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19SU1RDX1JDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkQwMCkgLy8gKFJTVEMpIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1JTVENfUk1SICAoKEFUOTFfUkVHICopIAkweEZGRkZGRDA4KSAvLyAoUlNUQykgUmVzZXQgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19SU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZEMDQpIC8vIChSU1RDKSBSZXNldCBTdGF0dXMgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFJUVEMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19SVFNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZEMkMpIC8vIChSVFRDKSBSZWFsLXRpbWUgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19SVFRDX1JUTVIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkQyMCkgLy8gKFJUVEMpIFJlYWwtdGltZSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19SVFRDX1JUVlIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkQyOCkgLy8gKFJUVEMpIFJlYWwtdGltZSBWYWx1ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19SVEFSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZEMjQpIC8vIChSVFRDKSBSZWFsLXRpbWUgQWxhcm0gUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBJVEMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUElUQ19QSVZSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZEMzgpIC8vIChQSVRDKSBQZXJpb2QgSW50ZXJ2YWwgVmFsdWUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJVENfUElTUiAoKEFUOTFfUkVHICopIAkweEZGRkZGRDM0KSAvLyAoUElUQykgUGVyaW9kIEludGVydmFsIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElUQ19QSUlSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZEM0MpIC8vIChQSVRDKSBQZXJpb2QgSW50ZXJ2YWwgSW1hZ2UgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJVENfUElNUiAoKEFUOTFfUkVHICopIAkweEZGRkZGRDMwKSAvLyAoUElUQykgUGVyaW9kIEludGVydmFsIE1vZGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFdEVEMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRENSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZENDApIC8vIChXRFRDKSBXYXRjaGRvZyBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19XRFRDX1dEU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkQ0OCkgLy8gKFdEVEMpIFdhdGNoZG9nIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRE1SICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZENDQpIC8vIChXRFRDKSBXYXRjaGRvZyBNb2RlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBWUkVHIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1ZSRUdfTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkZGRDYwKSAvLyAoVlJFRykgVm9sdGFnZSBSZWd1bGF0b3IgTW9kZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgTUMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfTUNfQVNSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZGMDQpIC8vIChNQykgTUMgQWJvcnQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19NQ19SQ1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkYwMCkgLy8gKE1DKSBNQyBSZW1hcCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19NQ19GQ1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkY2NCkgLy8gKE1DKSBNQyBGbGFzaCBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19NQ19BQVNSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkYwOCkgLy8gKE1DKSBNQyBBYm9ydCBBZGRyZXNzIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfTUNfRlNSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZGNjgpIC8vIChNQykgTUMgRmxhc2ggU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19NQ19GTVIgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkY2MCkgLy8gKE1DKSBNQyBGbGFzaCBNb2RlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfU1BJMSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19TUEkxX1BUQ1IgKChBVDkxX1JFRyAqKSAJMHhGRkZFNDEyMCkgLy8gKFBEQ19TUEkxKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9SUFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQxMDApIC8vIChQRENfU1BJMSkgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX1ROQ1IgKChBVDkxX1JFRyAqKSAJMHhGRkZFNDExQykgLy8gKFBEQ19TUEkxKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfVFBSICAoKEFUOTFfUkVHICopIAkweEZGRkU0MTA4KSAvLyAoUERDX1NQSTEpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfVE5QUiAoKEFUOTFfUkVHICopIAkweEZGRkU0MTE4KSAvLyAoUERDX1NQSTEpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9UQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQxMEMpIC8vIChQRENfU1BJMSkgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9SQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQxMDQpIC8vIChQRENfU1BJMSkgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX1JOUFIgKChBVDkxX1JFRyAqKSAJMHhGRkZFNDExMCkgLy8gKFBEQ19TUEkxKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9STkNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQxMTQpIC8vIChQRENfU1BJMSkgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfUFRTUiAoKEFUOTFfUkVHICopIAkweEZGRkU0MTI0KSAvLyAoUERDX1NQSTEpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFNQSTEgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9JTVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQwMUMpIC8vIChTUEkxKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9JRVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQwMTQpIC8vIChTUEkxKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX01SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZFNDAwNCkgLy8gKFNQSTEpIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfUkRSICAoKEFUOTFfUkVHICopIAkweEZGRkU0MDA4KSAvLyAoU1BJMSkgUmVjZWl2ZSBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX0lEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFNDAxOCkgLy8gKFNQSTEpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX1NSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZFNDAxMCkgLy8gKFNQSTEpIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9URFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQwMEMpIC8vIChTUEkxKSBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX0NSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZFNDAwMCkgLy8gKFNQSTEpIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfQ1NSICAoKEFUOTFfUkVHICopIAkweEZGRkU0MDMwKSAvLyAoU1BJMSkgQ2hpcCBTZWxlY3QgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19TUEkwIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1NQSTBfUFRDUiAoKEFUOTFfUkVHICopIAkweEZGRkUwMTIwKSAvLyAoUERDX1NQSTApIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1RQUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDEwOCkgLy8gKFBEQ19TUEkwKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1RDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDEwQykgLy8gKFBEQ19TUEkwKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1JDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDEwNCkgLy8gKFBEQ19TUEkwKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfUFRTUiAoKEFUOTFfUkVHICopIAkweEZGRkUwMTI0KSAvLyAoUERDX1NQSTApIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfUk5QUiAoKEFUOTFfUkVHICopIAkweEZGRkUwMTEwKSAvLyAoUERDX1NQSTApIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1JQUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDEwMCkgLy8gKFBEQ19TUEkwKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfVE5DUiAoKEFUOTFfUkVHICopIAkweEZGRkUwMTFDKSAvLyAoUERDX1NQSTApIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9STkNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAxMTQpIC8vIChQRENfU1BJMCkgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfVE5QUiAoKEFUOTFfUkVHICopIAkweEZGRkUwMTE4KSAvLyAoUERDX1NQSTApIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgU1BJMCBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19TUEkwX0lFUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDAxNCkgLy8gKFNQSTApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfU1IgICAoKEFUOTFfUkVHICopIAkweEZGRkUwMDEwKSAvLyAoU1BJMCkgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX0lEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDAxOCkgLy8gKFNQSTApIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX0NSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDAwMCkgLy8gKFNQSTApIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkUwMDA0KSAvLyAoU1BJMCkgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9JTVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAwMUMpIC8vIChTUEkwKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9URFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAwMEMpIC8vIChTUEkwKSBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1JEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDAwOCkgLy8gKFNQSTApIFJlY2VpdmUgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9DU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAwMzApIC8vIChTUEkwKSBDaGlwIFNlbGVjdCBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX1VTMSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19VUzFfUk5DUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDExNCkgLy8gKFBEQ19VUzEpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfUFRDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDEyMCkgLy8gKFBEQ19VUzEpIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfVENSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDEwQykgLy8gKFBEQ19VUzEpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9QVFNSICAoKEFUOTFfUkVHICopIAkweEZGRkM0MTI0KSAvLyAoUERDX1VTMSkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1ROUFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQxMTgpIC8vIChQRENfVVMxKSBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9SQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkM0MTA0KSAvLyAoUERDX1VTMSkgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfUk5QUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDExMCkgLy8gKFBEQ19VUzEpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfUlBSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDEwMCkgLy8gKFBEQ19VUzEpIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1ROQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQxMUMpIC8vIChQRENfVVMxKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9UUFIgICAoKEFUOTFfUkVHICopIAkweEZGRkM0MTA4KSAvLyAoUERDX1VTMSkgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVVMxIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1VTMV9JRiAgICAoKEFUOTFfUkVHICopIAkweEZGRkM0MDRDKSAvLyAoVVMxKSBJUkRBX0ZJTFRFUiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX05FUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQwNDQpIC8vIChVUzEpIE5iIEVycm9ycyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1JUT1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQwMjQpIC8vIChVUzEpIFJlY2VpdmVyIFRpbWUtb3V0IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfQ1NSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDAxNCkgLy8gKFVTMSkgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9JRFIgICAoKEFUOTFfUkVHICopIAkweEZGRkM0MDBDKSAvLyAoVVMxKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX0lFUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQwMDgpIC8vIChVUzEpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9USFIgICAoKEFUOTFfUkVHICopIAkweEZGRkM0MDFDKSAvLyAoVVMxKSBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfVFRHUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDAyOCkgLy8gKFVTMSkgVHJhbnNtaXR0ZXIgVGltZS1ndWFyZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1JIUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQwMTgpIC8vIChVUzEpIFJlY2VpdmVyIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9CUkdSICAoKEFUOTFfUkVHICopIAkweEZGRkM0MDIwKSAvLyAoVVMxKSBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfSU1SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDAxMCkgLy8gKFVTMSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9GSURJICAoKEFUOTFfUkVHICopIAkweEZGRkM0MDQwKSAvLyAoVVMxKSBGSV9ESV9SYXRpbyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX0NSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQwMDApIC8vIChVUzEpIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9NUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkM0MDA0KSAvLyAoVVMxKSBNb2RlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfVVMwIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1VTMF9UTlBSICAoKEFUOTFfUkVHICopIAkweEZGRkMwMTE4KSAvLyAoUERDX1VTMCkgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfUk5QUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDExMCkgLy8gKFBEQ19VUzApIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfVENSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDEwQykgLy8gKFBEQ19VUzApIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9QVENSICAoKEFUOTFfUkVHICopIAkweEZGRkMwMTIwKSAvLyAoUERDX1VTMCkgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9QVFNSICAoKEFUOTFfUkVHICopIAkweEZGRkMwMTI0KSAvLyAoUERDX1VTMCkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1ROQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAxMUMpIC8vIChQRENfVVMwKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9UUFIgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMTA4KSAvLyAoUERDX1VTMCkgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1JDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAxMDQpIC8vIChQRENfVVMwKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9SUFIgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMTAwKSAvLyAoUERDX1VTMCkgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfUk5DUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDExNCkgLy8gKFBEQ19VUzApIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBVUzAgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVVMwX0JSR1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAwMjApIC8vIChVUzApIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9ORVIgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDQ0KSAvLyAoVVMwKSBOYiBFcnJvcnMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9DUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDAwKSAvLyAoVVMwKSBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfSU1SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDAxMCkgLy8gKFVTMCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9GSURJICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDQwKSAvLyAoVVMwKSBGSV9ESV9SYXRpbyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1RUR1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAwMjgpIC8vIChVUzApIFRyYW5zbWl0dGVyIFRpbWUtZ3VhcmQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9NUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDA0KSAvLyAoVVMwKSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfUlRPUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDAyNCkgLy8gKFVTMCkgUmVjZWl2ZXIgVGltZS1vdXQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9DU1IgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDE0KSAvLyAoVVMwKSBDaGFubmVsIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1JIUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAwMTgpIC8vIChVUzApIFJlY2VpdmVyIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9JRFIgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDBDKSAvLyAoVVMwKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1RIUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAwMUMpIC8vIChVUzApIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9JRiAgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDRDKSAvLyAoVVMwKSBJUkRBX0ZJTFRFUiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX0lFUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAwMDgpIC8vIChVUzApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19TU0MgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfU1NDX1ROQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQxMUMpIC8vIChQRENfU1NDKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19SUFIgICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MTAwKSAvLyAoUERDX1NTQykgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUk5DUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDExNCkgLy8gKFBEQ19TU0MpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfVFBSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDEwOCkgLy8gKFBEQ19TU0MpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19QVENSICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MTIwKSAvLyAoUERDX1NTQykgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19UQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MTBDKSAvLyAoUERDX1NTQykgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQxMDQpIC8vIChQRENfU1NDKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19STlBSICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MTEwKSAvLyAoUERDX1NTQykgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19UTlBSICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MTE4KSAvLyAoUERDX1NTQykgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUFRTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDEyNCkgLy8gKFBEQ19TU0MpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFNTQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19TU0NfUkhSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDAyMCkgLy8gKFNTQykgUmVjZWl2ZSBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUlNIUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDAzMCkgLy8gKFNTQykgUmVjZWl2ZSBTeW5jIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19URk1SICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MDFDKSAvLyAoU1NDKSBUcmFuc21pdCBGcmFtZSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDA0OCkgLy8gKFNTQykgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19USFIgICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MDI0KSAvLyAoU1NDKSBUcmFuc21pdCBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUkNNUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDAxMCkgLy8gKFNTQykgUmVjZWl2ZSBDbG9jayBNb2RlUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19JRVIgICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MDQ0KSAvLyAoU1NDKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfVFNIUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDAzNCkgLy8gKFNTQykgVHJhbnNtaXQgU3luYyBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfU1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDA0MCkgLy8gKFNTQykgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfQ01SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDAwNCkgLy8gKFNTQykgQ2xvY2sgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RDTVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQwMTgpIC8vIChTU0MpIFRyYW5zbWl0IENsb2NrIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19DUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MDAwKSAvLyAoU1NDKSBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfSU1SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDA0QykgLy8gKFNTQykgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19SRk1SICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MDE0KSAvLyAoU1NDKSBSZWNlaXZlIEZyYW1lIE1vZGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRXSSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19UV0lfSUVSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZCODAyNCkgLy8gKFRXSSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX0NSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjgwMDApIC8vIChUV0kpIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9TUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkI4MDIwKSAvLyAoVFdJKSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9JTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkI4MDJDKSAvLyAoVFdJKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX1RIUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjgwMzQpIC8vIChUV0kpIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9JRFIgICAoKEFUOTFfUkVHICopIAkweEZGRkI4MDI4KSAvLyAoVFdJKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX0lBRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjgwMEMpIC8vIChUV0kpIEludGVybmFsIEFkZHJlc3MgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9NTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkI4MDA0KSAvLyAoVFdJKSBNYXN0ZXIgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX0NXR1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjgwMTApIC8vIChUV0kpIENsb2NrIFdhdmVmb3JtIEdlbmVyYXRvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX1JIUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjgwMzApIC8vIChUV0kpIFJlY2VpdmUgSG9sZGluZyBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUFdNQ19DSDMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDNfQ1VQRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzI3MCkgLy8gKFBXTUNfQ0gzKSBDaGFubmVsIFVwZGF0ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDNfUmVzZXJ2ZWQgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzI3NCkgLy8gKFBXTUNfQ0gzKSBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDNfQ1BSRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzI2OCkgLy8gKFBXTUNfQ0gzKSBDaGFubmVsIFBlcmlvZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDNfQ0RUWVIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzI2NCkgLy8gKFBXTUNfQ0gzKSBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gzX0NDTlRSICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyNkMpIC8vIChQV01DX0NIMykgQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIM19DTVIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzI2MCkgLy8gKFBXTUNfQ0gzKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBXTUNfQ0gyIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gyX1Jlc2VydmVkICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyNTQpIC8vIChQV01DX0NIMikgUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gyX0NNUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjQwKSAvLyAoUFdNQ19DSDIpIENoYW5uZWwgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDJfQ0NOVFIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzI0QykgLy8gKFBXTUNfQ0gyKSBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gyX0NQUkRSICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyNDgpIC8vIChQV01DX0NIMikgQ2hhbm5lbCBQZXJpb2QgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gyX0NVUERSICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyNTApIC8vIChQV01DX0NIMikgQ2hhbm5lbCBVcGRhdGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gyX0NEVFlSICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyNDQpIC8vIChQV01DX0NIMikgQ2hhbm5lbCBEdXR5IEN5Y2xlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQV01DX0NIMSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMV9SZXNlcnZlZCAoKEFUOTFfUkVHICopIAkweEZGRkNDMjM0KSAvLyAoUFdNQ19DSDEpIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMV9DVVBEUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjMwKSAvLyAoUFdNQ19DSDEpIENoYW5uZWwgVXBkYXRlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMV9DUFJEUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjI4KSAvLyAoUFdNQ19DSDEpIENoYW5uZWwgUGVyaW9kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMV9DQ05UUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjJDKSAvLyAoUFdNQ19DSDEpIENoYW5uZWwgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDFfQ0RUWVIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzIyNCkgLy8gKFBXTUNfQ0gxKSBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gxX0NNUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjIwKSAvLyAoUFdNQ19DSDEpIENoYW5uZWwgTW9kZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUFdNQ19DSDAgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDBfUmVzZXJ2ZWQgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzIxNCkgLy8gKFBXTUNfQ0gwKSBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDBfQ1BSRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzIwOCkgLy8gKFBXTUNfQ0gwKSBDaGFubmVsIFBlcmlvZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDBfQ0RUWVIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzIwNCkgLy8gKFBXTUNfQ0gwKSBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gwX0NNUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjAwKSAvLyAoUFdNQ19DSDApIENoYW5uZWwgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDBfQ1VQRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzIxMCkgLy8gKFBXTUNfQ0gwKSBDaGFubmVsIFVwZGF0ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDBfQ0NOVFIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzIwQykgLy8gKFBXTUNfQ0gwKSBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBXTUMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19JRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MwMTQpIC8vIChQV01DKSBQV01DIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0RJUyAgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzAwOCkgLy8gKFBXTUMpIFBXTUMgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19JRVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MwMTApIC8vIChQV01DKSBQV01DIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfVlIgICAoKEFUOTFfUkVHICopIAkweEZGRkNDMEZDKSAvLyAoUFdNQykgUFdNQyBWZXJzaW9uIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0lTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzAxQykgLy8gKFBXTUMpIFBXTUMgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19TUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MwMEMpIC8vIChQV01DKSBQV01DIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19JTVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MwMTgpIC8vIChQV01DKSBQV01DIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX01SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzAwMCkgLy8gKFBXTUMpIFBXTUMgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19FTkEgICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MwMDQpIC8vIChQV01DKSBQV01DIEVuYWJsZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVURQIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1VEUF9JTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkIwMDE4KSAvLyAoVURQKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZBRERSICgoQVQ5MV9SRUcgKikgCTB4RkZGQjAwMDgpIC8vIChVRFApIEZ1bmN0aW9uIEFkZHJlc3MgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9OVU0gICAoKEFUOTFfUkVHICopIAkweEZGRkIwMDAwKSAvLyAoVURQKSBGcmFtZSBOdW1iZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9GRFIgICAoKEFUOTFfUkVHICopIAkweEZGRkIwMDUwKSAvLyAoVURQKSBFbmRwb2ludCBGSUZPIERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9JU1IgICAoKEFUOTFfUkVHICopIAkweEZGRkIwMDFDKSAvLyAoVURQKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfQ1NSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZCMDAzMCkgLy8gKFVEUCkgRW5kcG9pbnQgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZCMDAxNCkgLy8gKFVEUCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9JQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkIwMDIwKSAvLyAoVURQKSBJbnRlcnJ1cHQgQ2xlYXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9SU1RFUCAoKEFUOTFfUkVHICopIAkweEZGRkIwMDI4KSAvLyAoVURQKSBSZXNldCBFbmRwb2ludCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVURQX1RYVkMgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjAwNzQpIC8vIChVRFApIFRyYW5zY2VpdmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9HTEJTVEFURSAoKEFUOTFfUkVHICopIAkweEZGRkIwMDA0KSAvLyAoVURQKSBHbG9iYWwgU3RhdGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9JRVIgICAoKEFUOTFfUkVHICopIAkweEZGRkIwMDEwKSAvLyAoVURQKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBUQzAgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVEMwX1NSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwMjApIC8vIChUQzApIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMwX1JDICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwMUMpIC8vIChUQzApIFJlZ2lzdGVyIEMNCisjZGVmaW5lIEFUOTFDX1RDMF9SQiAgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDE4KSAvLyAoVEMwKSBSZWdpc3RlciBCDQorI2RlZmluZSBBVDkxQ19UQzBfQ0NSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDAwMCkgLy8gKFRDMCkgQ2hhbm5lbCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzBfQ01SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDAwNCkgLy8gKFRDMCkgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyIChDYXB0dXJlIE1vZGUgLyBXYXZlZm9ybSBNb2RlKQ0KKyNkZWZpbmUgQVQ5MUNfVEMwX0lFUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwMjQpIC8vIChUQzApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMF9SQSAgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDE0KSAvLyAoVEMwKSBSZWdpc3RlciBBDQorI2RlZmluZSBBVDkxQ19UQzBfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDAyOCkgLy8gKFRDMCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMF9DViAgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDEwKSAvLyAoVEMwKSBDb3VudGVyIFZhbHVlDQorI2RlZmluZSBBVDkxQ19UQzBfSU1SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDAyQykgLy8gKFRDMCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRDMSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19UQzFfUkIgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDA1OCkgLy8gKFRDMSkgUmVnaXN0ZXIgQg0KKyNkZWZpbmUgQVQ5MUNfVEMxX0NDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwNDApIC8vIChUQzEpIENoYW5uZWwgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMxX0lFUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwNjQpIC8vIChUQzEpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMV9JRFIgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDY4KSAvLyAoVEMxKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMxX1NSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwNjApIC8vIChUQzEpIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMxX0NNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwNDQpIC8vIChUQzEpIENoYW5uZWwgTW9kZSBSZWdpc3RlciAoQ2FwdHVyZSBNb2RlIC8gV2F2ZWZvcm0gTW9kZSkNCisjZGVmaW5lIEFUOTFDX1RDMV9SQSAgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDU0KSAvLyAoVEMxKSBSZWdpc3RlciBBDQorI2RlZmluZSBBVDkxQ19UQzFfUkMgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDA1QykgLy8gKFRDMSkgUmVnaXN0ZXIgQw0KKyNkZWZpbmUgQVQ5MUNfVEMxX0lNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwNkMpIC8vIChUQzEpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzFfQ1YgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDA1MCkgLy8gKFRDMSkgQ291bnRlciBWYWx1ZQ0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVEMyIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1RDMl9DTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDg0KSAvLyAoVEMyKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXIgKENhcHR1cmUgTW9kZSAvIFdhdmVmb3JtIE1vZGUpDQorI2RlZmluZSBBVDkxQ19UQzJfQ0NSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDA4MCkgLy8gKFRDMikgQ2hhbm5lbCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzJfQ1YgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDA5MCkgLy8gKFRDMikgQ291bnRlciBWYWx1ZQ0KKyNkZWZpbmUgQVQ5MUNfVEMyX1JBICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwOTQpIC8vIChUQzIpIFJlZ2lzdGVyIEENCisjZGVmaW5lIEFUOTFDX1RDMl9SQiAgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDk4KSAvLyAoVEMyKSBSZWdpc3RlciBCDQorI2RlZmluZSBBVDkxQ19UQzJfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDBBOCkgLy8gKFRDMikgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMl9JTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMEFDKSAvLyAoVEMyKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMyX1JDICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwOUMpIC8vIChUQzIpIFJlZ2lzdGVyIEMNCisjZGVmaW5lIEFUOTFDX1RDMl9JRVIgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMEE0KSAvLyAoVEMyKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzJfU1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDBBMCkgLy8gKFRDMikgU3RhdHVzIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBUQ0IgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVENCX0JNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwQzQpIC8vIChUQ0IpIFRDIEJsb2NrIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDQl9CQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMEMwKSAvLyAoVENCKSBUQyBCbG9jayBDb250cm9sIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU5fTUIwIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0NBTl9NQjBfTURMICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyMTQpIC8vIChDQU5fTUIwKSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIwX01BTSAoKEFUOTFfUkVHICopIAkweEZGRkQwMjA0KSAvLyAoQ0FOX01CMCkgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjBfTUNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyMUMpIC8vIChDQU5fTUIwKSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjBfTUlEICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyMDgpIC8vIChDQU5fTUIwKSBNYWlsQm94IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIwX01TUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMjEwKSAvLyAoQ0FOX01CMCkgTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjBfTUZJRCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjBDKSAvLyAoQ0FOX01CMCkgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjBfTURIICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyMTgpIC8vIChDQU5fTUIwKSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMF9NTVIgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDIwMCkgLy8gKENBTl9NQjApIE1haWxCb3ggTW9kZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CMSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxX01ETCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjM0KSAvLyAoQ0FOX01CMSkgTWFpbEJveCBEYXRhIExvdyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMV9NSUQgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDIyOCkgLy8gKENBTl9NQjEpIE1haWxCb3ggSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjFfTU1SICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyMjApIC8vIChDQU5fTUIxKSBNYWlsQm94IE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjFfTVNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyMzApIC8vIChDQU5fTUIxKSBNYWlsQm94IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMV9NQU0gKChBVDkxX1JFRyAqKSAJMHhGRkZEMDIyNCkgLy8gKENBTl9NQjEpIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxX01ESCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjM4KSAvLyAoQ0FOX01CMSkgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjFfTUNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyM0MpIC8vIChDQU5fTUIxKSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjFfTUZJRCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjJDKSAvLyAoQ0FOX01CMSkgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENBTl9NQjIgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NQ1IgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI1QykgLy8gKENBTl9NQjIpIE1haWxCb3ggQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NREggKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI1OCkgLy8gKENBTl9NQjIpIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIyX01JRCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjQ4KSAvLyAoQ0FOX01CMikgTWFpbEJveCBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NREwgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI1NCkgLy8gKENBTl9NQjIpIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjJfTU1SICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyNDApIC8vIChDQU5fTUIyKSBNYWlsQm94IE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjJfTUFNICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyNDQpIC8vIChDQU5fTUIyKSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NRklEICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyNEMpIC8vIChDQU5fTUIyKSBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI1MCkgLy8gKENBTl9NQjIpIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU5fTUIzIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0NBTl9NQjNfTUZJRCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjZDKSAvLyAoQ0FOX01CMykgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjNfTUFNICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyNjQpIC8vIChDQU5fTUIzKSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CM19NSUQgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI2OCkgLy8gKENBTl9NQjMpIE1haWxCb3ggSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjNfTUNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyN0MpIC8vIChDQU5fTUIzKSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjNfTU1SICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyNjApIC8vIChDQU5fTUIzKSBNYWlsQm94IE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjNfTVNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyNzApIC8vIChDQU5fTUIzKSBNYWlsQm94IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CM19NREwgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI3NCkgLy8gKENBTl9NQjMpIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjNfTURIICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyNzgpIC8vIChDQU5fTUIzKSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CNCBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19DQU5fTUI0X01JRCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjg4KSAvLyAoQ0FOX01CNCkgTWFpbEJveCBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNF9NTVIgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI4MCkgLy8gKENBTl9NQjQpIE1haWxCb3ggTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNF9NREggKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI5OCkgLy8gKENBTl9NQjQpIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI0X01GSUQgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI4QykgLy8gKENBTl9NQjQpIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI0X01TUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMjkwKSAvLyAoQ0FOX01CNCkgTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjRfTUNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyOUMpIC8vIChDQU5fTUI0KSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjRfTURMICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyOTQpIC8vIChDQU5fTUI0KSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI0X01BTSAoKEFUOTFfUkVHICopIAkweEZGRkQwMjg0KSAvLyAoQ0FOX01CNCkgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENBTl9NQjUgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNV9NU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJCMCkgLy8gKENBTl9NQjUpIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI1X01DUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMkJDKSAvLyAoQ0FOX01CNSkgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI1X01GSUQgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJBQykgLy8gKENBTl9NQjUpIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI1X01ESCAoKEFUOTFfUkVHICopIAkweEZGRkQwMkI4KSAvLyAoQ0FOX01CNSkgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjVfTUlEICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyQTgpIC8vIChDQU5fTUI1KSBNYWlsQm94IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI1X01NUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMkEwKSAvLyAoQ0FOX01CNSkgTWFpbEJveCBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI1X01ETCAoKEFUOTFfUkVHICopIAkweEZGRkQwMkI0KSAvLyAoQ0FOX01CNSkgTWFpbEJveCBEYXRhIExvdyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNV9NQU0gKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJBNCkgLy8gKENBTl9NQjUpIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU5fTUI2IHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0NBTl9NQjZfTUZJRCAoKEFUOTFfUkVHICopIAkweEZGRkQwMkNDKSAvLyAoQ0FOX01CNikgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjZfTUlEICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyQzgpIC8vIChDQU5fTUI2KSBNYWlsQm94IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI2X01BTSAoKEFUOTFfUkVHICopIAkweEZGRkQwMkM0KSAvLyAoQ0FOX01CNikgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjZfTVNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyRDApIC8vIChDQU5fTUI2KSBNYWlsQm94IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNl9NREwgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJENCkgLy8gKENBTl9NQjYpIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjZfTUNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyREMpIC8vIChDQU5fTUI2KSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjZfTURIICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyRDgpIC8vIChDQU5fTUI2KSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNl9NTVIgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJDMCkgLy8gKENBTl9NQjYpIE1haWxCb3ggTW9kZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CNyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19DQU5fTUI3X01DUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMkZDKSAvLyAoQ0FOX01CNykgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI3X01ESCAoKEFUOTFfUkVHICopIAkweEZGRkQwMkY4KSAvLyAoQ0FOX01CNykgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjdfTUZJRCAoKEFUOTFfUkVHICopIAkweEZGRkQwMkVDKSAvLyAoQ0FOX01CNykgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjdfTURMICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyRjQpIC8vIChDQU5fTUI3KSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI3X01JRCAoKEFUOTFfUkVHICopIAkweEZGRkQwMkU4KSAvLyAoQ0FOX01CNykgTWFpbEJveCBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CN19NTVIgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJFMCkgLy8gKENBTl9NQjcpIE1haWxCb3ggTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CN19NQU0gKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJFNCkgLy8gKENBTl9NQjcpIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI3X01TUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMkYwKSAvLyAoQ0FOX01CNykgTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENBTiBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19DQU5fVENSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDAyNCkgLy8gKENBTikgVHJhbnNmZXIgQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0lNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAwMEMpIC8vIChDQU4pIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fSUVSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDAwNCkgLy8gKENBTikgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0VDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAwMjApIC8vIChDQU4pIEVycm9yIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9USU1FU1RQICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAwMUMpIC8vIChDQU4pIFRpbWUgU3RhbXAgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkQwMDAwKSAvLyAoQ0FOKSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDAwOCkgLy8gKENBTikgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9BQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkQwMDI4KSAvLyAoQ0FOKSBBYm9ydCBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fVElNICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDAxOCkgLy8gKENBTikgVGltZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9TUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkQwMDEwKSAvLyAoQ0FOKSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9CUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkQwMDE0KSAvLyAoQ0FOKSBCYXVkcmF0ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1ZSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAwRkMpIC8vIChDQU4pIFZlcnNpb24gUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIEVNQUMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19JU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwMjQpIC8vIChFTUFDKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1NBNEggKChBVDkxX1JFRyAqKSAJMHhGRkZEQzBCNCkgLy8gKEVNQUMpIFNwZWNpZmljIEFkZHJlc3MgNCBUb3AsIExhc3QgMiBieXRlcw0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TQTFMICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwOTgpIC8vIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDEgQm90dG9tLCBGaXJzdCA0IGJ5dGVzDQorI2RlZmluZSBBVDkxQ19FTUFDX0VMRSAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA3OCkgLy8gKEVNQUMpIEV4Y2Vzc2l2ZSBMZW5ndGggRXJyb3JzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX0xDT0wgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA1QykgLy8gKEVNQUMpIExhdGUgQ29sbGlzaW9uIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1JMRSAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA4OCkgLy8gKEVNQUMpIFJlY2VpdmUgTGVuZ3RoIEZpZWxkIE1pc21hdGNoIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1dPTCAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzBDNCkgLy8gKEVNQUMpIFdha2UgT24gTEFOIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX0RURiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA1OCkgLy8gKEVNQUMpIERlZmVycmVkIFRyYW5zbWlzc2lvbiBGcmFtZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19UVU5EICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwNjQpIC8vIChFTUFDKSBUcmFuc21pdCBVbmRlcnJ1biBFcnJvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19OQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwMDApIC8vIChFTUFDKSBOZXR3b3JrIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfU0E0TCAoKEFUOTFfUkVHICopIAkweEZGRkRDMEIwKSAvLyAoRU1BQykgU3BlY2lmaWMgQWRkcmVzcyA0IEJvdHRvbSwgRmlyc3QgNCBieXRlcw0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwMjApIC8vIChFTUFDKSBSZWNlaXZlIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TQTNMICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwQTgpIC8vIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDMgQm90dG9tLCBGaXJzdCA0IGJ5dGVzDQorI2RlZmluZSBBVDkxQ19FTUFDX1RTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzAxNCkgLy8gKEVNQUMpIFRyYW5zbWl0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19JRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwMkMpIC8vIChFTUFDKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SU0UgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwNzQpIC8vIChFTUFDKSBSZWNlaXZlIFN5bWJvbCBFcnJvcnMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfRUNPTCAoKEFUOTFfUkVHICopIAkweEZGRkRDMDYwKSAvLyAoRU1BQykgRXhjZXNzaXZlIENvbGxpc2lvbiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19USUQgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwQjgpIC8vIChFTUFDKSBUeXBlIElEIENoZWNraW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX0hSQiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA5MCkgLy8gKEVNQUMpIEhhc2ggQWRkcmVzcyBCb3R0b21bMzE6MF0NCisjZGVmaW5lIEFUOTFDX0VNQUNfVEJRUCAoKEFUOTFfUkVHICopIAkweEZGRkRDMDFDKSAvLyAoRU1BQykgVHJhbnNtaXQgQnVmZmVyIFF1ZXVlIFBvaW50ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfVVNSSU8gKChBVDkxX1JFRyAqKSAJMHhGRkZEQzBDMCkgLy8gKEVNQUMpIFVTRVIgSW5wdXQvT3V0cHV0IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1BUUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzAzOCkgLy8gKEVNQUMpIFBhdXNlIFRpbWUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfU0EySCAoKEFUOTFfUkVHICopIAkweEZGRkRDMEE0KSAvLyAoRU1BQykgU3BlY2lmaWMgQWRkcmVzcyAyIFRvcCwgTGFzdCAyIGJ5dGVzDQorI2RlZmluZSBBVDkxQ19FTUFDX1JPViAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA3MCkgLy8gKEVNQUMpIFJlY2VpdmUgT3ZlcnJ1biBFcnJvcnMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfQUxFICAoKEFUOTFfUkVHICopIAkweEZGRkRDMDU0KSAvLyAoRU1BQykgQWxpZ25tZW50IEVycm9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1JKQSAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA3QykgLy8gKEVNQUMpIFJlY2VpdmUgSmFiYmVycyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SQlFQICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwMTgpIC8vIChFTUFDKSBSZWNlaXZlIEJ1ZmZlciBRdWV1ZSBQb2ludGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1RQRiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA4QykgLy8gKEVNQUMpIFRyYW5zbWl0dGVkIFBhdXNlIEZyYW1lcyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19OQ0ZHUiAoKEFUOTFfUkVHICopIAkweEZGRkRDMDA0KSAvLyAoRU1BQykgTmV0d29yayBDb25maWd1cmF0aW9uIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX0hSVCAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA5NCkgLy8gKEVNQUMpIEhhc2ggQWRkcmVzcyBUb3BbNjM6MzJdDQorI2RlZmluZSBBVDkxQ19FTUFDX1VTRiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA4MCkgLy8gKEVNQUMpIFVuZGVyc2l6ZSBGcmFtZXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfRkNTRSAoKEFUOTFfUkVHICopIAkweEZGRkRDMDUwKSAvLyAoRU1BQykgRnJhbWUgQ2hlY2sgU2VxdWVuY2UgRXJyb3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfVFBRICAoKEFUOTFfUkVHICopIAkweEZGRkRDMEJDKSAvLyAoRU1BQykgVHJhbnNtaXQgUGF1c2UgUXVhbnR1bSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19NQU4gICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwMzQpIC8vIChFTUFDKSBQSFkgTWFpbnRlbmFuY2UgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfRlRPICAoKEFUOTFfUkVHICopIAkweEZGRkRDMDQwKSAvLyAoRU1BQykgRnJhbWVzIFRyYW5zbWl0dGVkIE9LIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1JFViAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzBGQykgLy8gKEVNQUMpIFJldmlzaW9uIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX0lNUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzAzMCkgLy8gKEVNQUMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1NDRiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA0NCkgLy8gKEVNQUMpIFNpbmdsZSBDb2xsaXNpb24gRnJhbWUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfUEZSICAoKEFUOTFfUkVHICopIAkweEZGRkRDMDNDKSAvLyAoRU1BQykgUGF1c2UgRnJhbWVzIHJlY2VpdmVkIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX01DRiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA0OCkgLy8gKEVNQUMpIE11bHRpcGxlIENvbGxpc2lvbiBGcmFtZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19OU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwMDgpIC8vIChFTUFDKSBOZXR3b3JrIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TQTJMICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwQTApIC8vIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDIgQm90dG9tLCBGaXJzdCA0IGJ5dGVzDQorI2RlZmluZSBBVDkxQ19FTUFDX0ZSTyAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA0QykgLy8gKEVNQUMpIEZyYW1lcyBSZWNlaXZlZCBPSyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19JRVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwMjgpIC8vIChFTUFDKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1NBMUggKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA5QykgLy8gKEVNQUMpIFNwZWNpZmljIEFkZHJlc3MgMSBUb3AsIExhc3QgMiBieXRlcw0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19DU0UgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwNjgpIC8vIChFTUFDKSBDYXJyaWVyIFNlbnNlIEVycm9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1NBM0ggKChBVDkxX1JFRyAqKSAJMHhGRkZEQzBBQykgLy8gKEVNQUMpIFNwZWNpZmljIEFkZHJlc3MgMyBUb3AsIExhc3QgMiBieXRlcw0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SUkUgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwNkMpIC8vIChFTUFDKSBSZWNlaXZlIFJlc3NvdXJjZSBFcnJvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TVEUgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwODQpIC8vIChFTUFDKSBTUUUgVGVzdCBFcnJvciBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX0FEQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19BRENfUFRTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODEyNCkgLy8gKFBEQ19BREMpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19QVENSICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MTIwKSAvLyAoUERDX0FEQykgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19UTlBSICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MTE4KSAvLyAoUERDX0FEQykgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfVE5DUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODExQykgLy8gKFBEQ19BREMpIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1JOUFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgxMTApIC8vIChQRENfQURDKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1JOQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgxMTQpIC8vIChQRENfQURDKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1JQUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgxMDApIC8vIChQRENfQURDKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19UQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MTBDKSAvLyAoUERDX0FEQykgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1RQUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgxMDgpIC8vIChQRENfQURDKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfUkNSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODEwNCkgLy8gKFBEQ19BREMpIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQURDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0FEQ19DRFIyICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDM4KSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDINCisjZGVmaW5lIEFUOTFDX0FEQ19DRFIzICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDNDKSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDMNCisjZGVmaW5lIEFUOTFDX0FEQ19DRFIwICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDMwKSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDANCisjZGVmaW5lIEFUOTFDX0FEQ19DRFI1ICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDQ0KSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDUNCisjZGVmaW5lIEFUOTFDX0FEQ19DSERSICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDE0KSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfU1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODAxQykgLy8gKEFEQykgQURDIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX0NEUjQgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwNDApIC8vIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNA0KKyNkZWZpbmUgQVQ5MUNfQURDX0NEUjEgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwMzQpIC8vIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMQ0KKyNkZWZpbmUgQVQ5MUNfQURDX0xDRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwMjApIC8vIChBREMpIEFEQyBMYXN0IENvbnZlcnRlZCBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODAyOCkgLy8gKEFEQykgQURDIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfQ1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODAwMCkgLy8gKEFEQykgQURDIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19DRFI3ICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDRDKSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDcNCisjZGVmaW5lIEFUOTFDX0FEQ19DRFI2ICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDQ4KSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDYNCisjZGVmaW5lIEFUOTFDX0FEQ19JRVIgICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDI0KSAvLyAoQURDKSBBREMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX0NIRVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwMTApIC8vIChBREMpIEFEQyBDaGFubmVsIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX0NIU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwMTgpIC8vIChBREMpIEFEQyBDaGFubmVsIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX01SICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwMDQpIC8vIChBREMpIEFEQyBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfSU1SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODAyQykgLy8gKEFEQykgQURDIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfQUVTIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0FFU19UUFIgICAoKEFUOTFfUkVHICopIAkweEZGRkE0MTA4KSAvLyAoUERDX0FFUykgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX1BUQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQxMjApIC8vIChQRENfQUVTKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX1JOUFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQxMTApIC8vIChQRENfQUVTKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX1ROQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQxMUMpIC8vIChQRENfQUVTKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19UQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkE0MTBDKSAvLyAoUERDX0FFUykgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX1JDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQxMDQpIC8vIChQRENfQUVTKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19STkNSICAoKEFUOTFfUkVHICopIAkweEZGRkE0MTE0KSAvLyAoUERDX0FFUykgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19UTlBSICAoKEFUOTFfUkVHICopIAkweEZGRkE0MTE4KSAvLyAoUERDX0FFUykgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfUlBSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBNDEwMCkgLy8gKFBEQ19BRVMpIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX1BUU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQxMjQpIC8vIChQRENfQUVTKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBBRVMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQUVTX0lWeFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQwNjApIC8vIChBRVMpIEluaXRpYWxpemF0aW9uIFZlY3RvciB4IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfTVIgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBNDAwNCkgLy8gKEFFUykgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX1ZSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQwRkMpIC8vIChBRVMpIEFFUyBWZXJzaW9uIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfT0RBVEF4UiAoKEFUOTFfUkVHICopIAkweEZGRkE0MDUwKSAvLyAoQUVTKSBPdXRwdXQgRGF0YSB4IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfSURBVEF4UiAoKEFUOTFfUkVHICopIAkweEZGRkE0MDQwKSAvLyAoQUVTKSBJbnB1dCBEYXRhIHggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19DUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkE0MDAwKSAvLyAoQUVTKSBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBNDAxNCkgLy8gKEFFUykgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19JTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkE0MDE4KSAvLyAoQUVTKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX0lFUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQwMTApIC8vIChBRVMpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19LRVlXeFIgKChBVDkxX1JFRyAqKSAJMHhGRkZBNDAyMCkgLy8gKEFFUykgS2V5IFdvcmQgeCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX0lTUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQwMUMpIC8vIChBRVMpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19UREVTIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1RERVNfUk5DUiAoKEFUOTFfUkVHICopIAkweEZGRkE4MTE0KSAvLyAoUERDX1RERVMpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX1RDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZBODEwQykgLy8gKFBEQ19UREVTKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX1JDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZBODEwNCkgLy8gKFBEQ19UREVTKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfVE5QUiAoKEFUOTFfUkVHICopIAkweEZGRkE4MTE4KSAvLyAoUERDX1RERVMpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19STlBSICgoQVQ5MV9SRUcgKikgCTB4RkZGQTgxMTApIC8vIChQRENfVERFUykgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfUlBSICAoKEFUOTFfUkVHICopIAkweEZGRkE4MTAwKSAvLyAoUERDX1RERVMpIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19UTkNSICgoQVQ5MV9SRUcgKikgCTB4RkZGQTgxMUMpIC8vIChQRENfVERFUykgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX1RQUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZBODEwOCkgLy8gKFBEQ19UREVTKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX1BUU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZBODEyNCkgLy8gKFBEQ19UREVTKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX1BUQ1IgKChBVDkxX1JFRyAqKSAJMHhGRkZBODEyMCkgLy8gKFBEQ19UREVTKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVERFUyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19UREVTX0tFWTJXeFIgKChBVDkxX1JFRyAqKSAJMHhGRkZBODAyOCkgLy8gKFRERVMpIEtleSAyIFdvcmQgeCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19LRVkzV3hSICgoQVQ5MV9SRUcgKikgCTB4RkZGQTgwMzApIC8vIChUREVTKSBLZXkgMyBXb3JkIHggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfSURSICAoKEFUOTFfUkVHICopIAkweEZGRkE4MDE0KSAvLyAoVERFUykgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfVlIgICAoKEFUOTFfUkVHICopIAkweEZGRkE4MEZDKSAvLyAoVERFUykgVERFUyBWZXJzaW9uIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX0lWeFIgKChBVDkxX1JFRyAqKSAJMHhGRkZBODA2MCkgLy8gKFRERVMpIEluaXRpYWxpemF0aW9uIFZlY3RvciB4IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX09EQVRBeFIgKChBVDkxX1JFRyAqKSAJMHhGRkZBODA1MCkgLy8gKFRERVMpIE91dHB1dCBEYXRhIHggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfSU1SICAoKEFUOTFfUkVHICopIAkweEZGRkE4MDE4KSAvLyAoVERFUykgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkE4MDA0KSAvLyAoVERFUykgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19DUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTgwMDApIC8vIChUREVTKSBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX0lFUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZBODAxMCkgLy8gKFRERVMpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfSVNSICAoKEFUOTFfUkVHICopIAkweEZGRkE4MDFDKSAvLyAoVERFUykgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19JREFUQXhSICgoQVQ5MV9SRUcgKikgCTB4RkZGQTgwNDApIC8vIChUREVTKSBJbnB1dCBEYXRhIHggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfS0VZMVd4UiAoKEFUOTFfUkVHICopIAkweEZGRkE4MDIwKSAvLyAoVERFUykgS2V5IDEgV29yZCB4IFJlZ2lzdGVyDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgIFBJTyBERUZJTklUSU9OUyBGT1IgQVQ5MVNBTTdYMTI4ICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMCApICAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEEwICovDQotI2RlZmluZSBBVDkxQ19QQTBfUlhEMCAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEEwICkgIC8qICBVU0FSVCAwIFJlY2VpdmUgRGF0YSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMSAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAxICkgICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTEgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMV9UWEQwICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTEgKSAgLyogIFVTQVJUIDAgVHJhbnNtaXQgRGF0YSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMTAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAxMCApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTEwICovDQotI2RlZmluZSBBVDkxQ19QQTEwX1RXRCAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEExMCApIC8qICBUV0kgVHdvLXdpcmUgU2VyaWFsIERhdGEgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTExICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMTEgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEExMSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEExMV9UV0NLICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMTEgKSAvKiAgVFdJIFR3by13aXJlIFNlcmlhbCBDbG9jayAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMTIgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAxMiApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTEyICovDQotI2RlZmluZSBBVDkxQ19QQTEyX05QQ1MwMCAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEExMiApIC8qICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDAgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTEzICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMTMgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEExMyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEExM19OUENTMDEgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMTMgKSAvKiAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAxICovDQotI2RlZmluZSBBVDkxQ19QQTEzX1BDSzEgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEExMyApIC8qICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAxICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEExNCAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDE0ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMTQgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMTRfTlBDUzAyICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTE0ICkgLyogIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEExNF9JUlExICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMTQgKSAvKiAgRXh0ZXJuYWwgSW50ZXJydXB0IDEgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTE1ICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMTUgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEExNSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEExNV9OUENTMDMgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMTUgKSAvKiAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzICovDQotI2RlZmluZSBBVDkxQ19QQTE1X1RDTEsyICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEExNSApIC8qICBUaW1lciBDb3VudGVyIDIgZXh0ZXJuYWwgY2xvY2sgaW5wdXQgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTE2ICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMTYgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEExNiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEExNl9NSVNPMCAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMTYgKSAvKiAgU1BJIDAgTWFzdGVyIEluIFNsYXZlICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEExNyAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDE3ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMTcgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMTdfTU9TSTAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTE3ICkgLyogIFNQSSAwIE1hc3RlciBPdXQgU2xhdmUgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTE4ICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMTggKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEExOCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEExOF9TUENLMCAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMTggKSAvKiAgU1BJIDAgU2VyaWFsIENsb2NrICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEExOSAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDE5ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMTkgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMTlfQ0FOUlggICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTE5ICkgLyogIENBTiBSZWNlaXZlICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEEyICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDIgKSAgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyX1NDSzAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMiApICAvKiAgVVNBUlQgMCBTZXJpYWwgQ2xvY2sgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMl9OUENTMTEgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTIgKSAgLyogIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMjAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAyMCApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTIwICovDQotI2RlZmluZSBBVDkxQ19QQTIwX0NBTlRYICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEEyMCApIC8qICBDQU4gVHJhbnNtaXQgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTIxICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMjEgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEEyMSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyMV9URiAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMjEgKSAvKiAgU1NDIFRyYW5zbWl0IEZyYW1lIFN5bmMgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjFfTlBDUzEwICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTIxICkgLyogIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMCAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMjIgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAyMiApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTIyICovDQotI2RlZmluZSBBVDkxQ19QQTIyX1RLICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEEyMiApIC8qICBTU0MgVHJhbnNtaXQgQ2xvY2sgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjJfU1BDSzEgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTIyICkgLyogIFNQSSAxIFNlcmlhbCBDbG9jayAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMjMgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAyMyApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTIzICovDQotI2RlZmluZSBBVDkxQ19QQTIzX1REICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEEyMyApIC8qICBTU0MgVHJhbnNtaXQgZGF0YSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyM19NT1NJMSAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMjMgKSAvKiAgU1BJIDEgTWFzdGVyIE91dCBTbGF2ZSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMjQgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAyNCApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTI0ICovDQotI2RlZmluZSBBVDkxQ19QQTI0X1JEICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEEyNCApIC8qICBTU0MgUmVjZWl2ZSBEYXRhICovDQotI2RlZmluZSBBVDkxQ19QQTI0X01JU08xICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEEyNCApIC8qICBTUEkgMSBNYXN0ZXIgSW4gU2xhdmUgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTI1ICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMjUgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEEyNSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyNV9SSyAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMjUgKSAvKiAgU1NDIFJlY2VpdmUgQ2xvY2sgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjVfTlBDUzExICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTI1ICkgLyogIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMjYgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAyNiApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTI2ICovDQotI2RlZmluZSBBVDkxQ19QQTI2X1JGICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEEyNiApIC8qICBTU0MgUmVjZWl2ZSBGcmFtZSBTeW5jICovDQotI2RlZmluZSBBVDkxQ19QQTI2X05QQ1MxMiAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEEyNiApIC8qICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTI3ICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMjcgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEEyNyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyN19EUlhEICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMjcgKSAvKiAgREJHVSBEZWJ1ZyBSZWNlaXZlIERhdGEgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjdfUENLMyAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTI3ICkgLyogIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDMgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTI4ICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMjggKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEEyOCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyOF9EVFhEICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMjggKSAvKiAgREJHVSBEZWJ1ZyBUcmFuc21pdCBEYXRhICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEEyOSAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDI5ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMjkgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjlfRklRICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTI5ICkgLyogIEFJQyBGYXN0IEludGVycnVwdCBJbnB1dCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyOV9OUENTMTMgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMjkgKSAvKiAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEEzICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDMgKSAgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEzX1JUUzAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMyApICAvKiAgVVNBUlQgMCBSZWFkeSBUbyBTZW5kICovDQotI2RlZmluZSBBVDkxQ19QQTNfTlBDUzEyICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEEzICkgIC8qICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTMwICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMzAgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEEzMCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEzMF9JUlEwICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMzAgKSAvKiAgRXh0ZXJuYWwgSW50ZXJydXB0IDAgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMzBfUENLMiAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTMwICkgLyogIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTQgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgNCApICAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEE0ICovDQotI2RlZmluZSBBVDkxQ19QQTRfQ1RTMCAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEE0ICkgIC8qICBVU0FSVCAwIENsZWFyIFRvIFNlbmQgKi8NCi0jZGVmaW5lIEFUOTFDX1BBNF9OUENTMTMgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTQgKSAgLyogIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMyAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBNSAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCA1ICkgICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTUgKi8NCi0jZGVmaW5lIEFUOTFDX1BBNV9SWEQxICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTUgKSAgLyogIFVTQVJUIDEgUmVjZWl2ZSBEYXRhICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEE2ICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDYgKSAgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBNiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEE2X1RYRDEgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBNiApICAvKiAgVVNBUlQgMSBUcmFuc21pdCBEYXRhICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEE3ICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDcgKSAgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBNyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEE3X1NDSzEgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBNyApICAvKiAgVVNBUlQgMSBTZXJpYWwgQ2xvY2sgKi8NCi0jZGVmaW5lIEFUOTFDX1BBN19OUENTMDEgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTcgKSAgLyogIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBOCAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCA4ICkgICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTggKi8NCi0jZGVmaW5lIEFUOTFDX1BBOF9SVFMxICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTggKSAgLyogIFVTQVJUIDEgUmVhZHkgVG8gU2VuZCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEE4X05QQ1MwMiAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBOCApICAvKiAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAyICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEE5ICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDkgKSAgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBOSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEE5X0NUUzEgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBOSApICAvKiAgVVNBUlQgMSBDbGVhciBUbyBTZW5kICovDQotI2RlZmluZSBBVDkxQ19QQTlfTlBDUzAzICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEE5ICkgIC8qICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMCApICAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIwICovDQotI2RlZmluZSBBVDkxQ19QQjBfRVRYQ0tfRVJFRkNLICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIwICkgIC8qICBFdGhlcm5ldCBNQUMgVHJhbnNtaXQgQ2xvY2svUmVmZXJlbmNlIENsb2NrICovDQotI2RlZmluZSBBVDkxQ19QQjBfUENLMCAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIwICkgIC8qICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAwICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEIxICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDEgKSAgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxX0VUWEVOICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMSApICAvKiAgRXRoZXJuZXQgTUFDIFRyYW5zbWl0IEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BCMTAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAxMCApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQjEwICovDQotI2RlZmluZSBBVDkxQ19QQjEwX0VUWDIgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIxMCApIC8qICBFdGhlcm5ldCBNQUMgVHJhbnNtaXQgRGF0YSAyICovDQotI2RlZmluZSBBVDkxQ19QQjEwX05QQ1MxMSAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIxMCApIC8qICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDEgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjExICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMTEgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIxMSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxMV9FVFgzICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMTEgKSAvKiAgRXRoZXJuZXQgTUFDIFRyYW5zbWl0IERhdGEgMyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxMV9OUENTMTIgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMTEgKSAvKiAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAyICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEIxMiAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDEyICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMTIgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMTJfRVRYRVIgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjEyICkgLyogIEV0aGVybmV0IE1BQyBUcmFuc21pa3QgQ29kaW5nIEVycm9yICovDQotI2RlZmluZSBBVDkxQ19QQjEyX1RDTEswICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIxMiApIC8qICBUaW1lciBDb3VudGVyIDAgZXh0ZXJuYWwgY2xvY2sgaW5wdXQgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjEzICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMTMgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIxMyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxM19FUlgyICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMTMgKSAvKiAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgRGF0YSAyICovDQotI2RlZmluZSBBVDkxQ19QQjEzX05QQ1MwMSAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIxMyApIC8qICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDEgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjE0ICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMTQgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIxNCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxNF9FUlgzICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMTQgKSAvKiAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgRGF0YSAzICovDQotI2RlZmluZSBBVDkxQ19QQjE0X05QQ1MwMiAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIxNCApIC8qICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjE1ICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMTUgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIxNSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxNV9FUlhEViAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMTUgKSAvKiAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgRGF0YSBWYWxpZCAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BCMTYgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAxNiApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQjE2ICovDQotI2RlZmluZSBBVDkxQ19QQjE2X0VDT0wgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIxNiApIC8qICBFdGhlcm5ldCBNQUMgQ29sbGlzaW9uIERldGVjdGVkICovDQotI2RlZmluZSBBVDkxQ19QQjE2X05QQ1MxMyAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIxNiApIC8qICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjE3ICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMTcgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIxNyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxN19FUlhDSyAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMTcgKSAvKiAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgQ2xvY2sgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMTdfTlBDUzAzICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjE3ICkgLyogIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMyAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BCMTggICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAxOCApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQjE4ICovDQotI2RlZmluZSBBVDkxQ19QQjE4X0VGMTAwICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIxOCApIC8qICBFdGhlcm5ldCBNQUMgRm9yY2UgMTAwIE1iaXRzL3NlYyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxOF9BRFRSRyAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMTggKSAvKiAgQURDIEV4dGVybmFsIFRyaWdnZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjE5ICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMTkgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIxOSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxOV9QV00wICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMTkgKSAvKiAgUFdNIENoYW5uZWwgMCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxOV9UQ0xLMSAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMTkgKSAvKiAgVGltZXIgQ291bnRlciAxIGV4dGVybmFsIGNsb2NrIGlucHV0ICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEIyICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDIgKSAgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIyX0VUWDAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMiApICAvKiAgRXRoZXJuZXQgTUFDIFRyYW5zbWl0IERhdGEgMCAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BCMjAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAyMCApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQjIwICovDQotI2RlZmluZSBBVDkxQ19QQjIwX1BXTTEgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIyMCApIC8qICBQV00gQ2hhbm5lbCAxICovDQotI2RlZmluZSBBVDkxQ19QQjIwX1BDSzAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIyMCApIC8qICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAwICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEIyMSAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDIxICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMjEgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMjFfUFdNMiAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjIxICkgLyogIFBXTSBDaGFubmVsIDIgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMjFfUENLMSAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjIxICkgLyogIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDEgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjIyICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMjIgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIyMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIyMl9QV00zICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMjIgKSAvKiAgUFdNIENoYW5uZWwgMyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIyMl9QQ0syICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMjIgKSAvKiAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BCMjMgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAyMyApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQjIzICovDQotI2RlZmluZSBBVDkxQ19QQjIzX1RJT0EwICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIyMyApIC8qICBUaW1lciBDb3VudGVyIDAgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIyM19EQ0QxICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMjMgKSAvKiAgVVNBUlQgMSBEYXRhIENhcnJpZXIgRGV0ZWN0ICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEIyNCAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDI0ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMjQgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMjRfVElPQjAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjI0ICkgLyogIFRpbWVyIENvdW50ZXIgMCBNdWx0aXB1cnBvc2UgVGltZXIgSS9PIFBpbiBCICovDQotI2RlZmluZSBBVDkxQ19QQjI0X0RTUjEgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIyNCApIC8qICBVU0FSVCAxIERhdGEgU2V0IHJlYWR5ICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEIyNSAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDI1ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMjUgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMjVfVElPQTEgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjI1ICkgLyogIFRpbWVyIENvdW50ZXIgMSBNdWx0aXB1cnBvc2UgVGltZXIgSS9PIFBpbiBBICovDQotI2RlZmluZSBBVDkxQ19QQjI1X0RUUjEgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIyNSApIC8qICBVU0FSVCAxIERhdGEgVGVybWluYWwgcmVhZHkgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjI2ICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMjYgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIyNiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIyNl9USU9CMSAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMjYgKSAvKiAgVGltZXIgQ291bnRlciAxIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEIgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMjZfUkkxICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjI2ICkgLyogIFVTQVJUIDEgUmluZyBJbmRpY2F0b3IgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjI3ICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMjcgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIyNyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIyN19USU9BMiAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMjcgKSAvKiAgVGltZXIgQ291bnRlciAyIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEEgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMjdfUFdNMCAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjI3ICkgLyogIFBXTSBDaGFubmVsIDAgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjI4ICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMjggKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIyOCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIyOF9USU9CMiAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMjggKSAvKiAgVGltZXIgQ291bnRlciAyIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEIgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMjhfUFdNMSAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjI4ICkgLyogIFBXTSBDaGFubmVsIDEgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjI5ICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMjkgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIyOSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIyOV9QQ0sxICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMjkgKSAvKiAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIyOV9QV00yICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMjkgKSAvKiAgUFdNIENoYW5uZWwgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BCMyAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAzICkgICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQjMgKi8NCi0jZGVmaW5lIEFUOTFDX1BCM19FVFgxICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjMgKSAgLyogIEV0aGVybmV0IE1BQyBUcmFuc21pdCBEYXRhIDEgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjMwICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMzAgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIzMCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIzMF9QQ0syICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMzAgKSAvKiAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIzMF9QV00zICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMzAgKSAvKiAgUFdNIENoYW5uZWwgMyAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BCNCAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCA0ICkgICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQjQgKi8NCi0jZGVmaW5lIEFUOTFDX1BCNF9FQ1JTX0VDUlNEViAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjQgKSAgLyogIEV0aGVybmV0IE1BQyBDYXJyaWVyIFNlbnNlL0NhcnJpZXIgU2Vuc2UgYW5kIERhdGEgVmFsaWQgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjUgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgNSApICAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEI1ICovDQotI2RlZmluZSBBVDkxQ19QQjVfRVJYMCAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEI1ICkgIC8qICBFdGhlcm5ldCBNQUMgUmVjZWl2ZSBEYXRhIDAgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjYgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgNiApICAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEI2ICovDQotI2RlZmluZSBBVDkxQ19QQjZfRVJYMSAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEI2ICkgIC8qICBFdGhlcm5ldCBNQUMgUmVjZWl2ZSBEYXRhIDEgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjcgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgNyApICAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEI3ICovDQotI2RlZmluZSBBVDkxQ19QQjdfRVJYRVIgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEI3ICkgIC8qICBFdGhlcm5ldCBNQUMgUmVjZWl2ZSBFcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BCOCAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCA4ICkgICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQjggKi8NCi0jZGVmaW5lIEFUOTFDX1BCOF9FTURDICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjggKSAgLyogIEV0aGVybmV0IE1BQyBNYW5hZ2VtZW50IERhdGEgQ2xvY2sgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjkgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgOSApICAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEI5ICovDQotI2RlZmluZSBBVDkxQ19QQjlfRU1ESU8gICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEI5ICkgIC8qICBFdGhlcm5ldCBNQUMgTWFuYWdlbWVudCBEYXRhIElucHV0L091dHB1dCAqLw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgICBQSU8gREVGSU5JVElPTlMgRk9SIEFUOTFTQU03WDEyOA0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorI2RlZmluZSBBVDkxQ19QSU9fUEEwICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgMCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEwDQorI2RlZmluZSBBVDkxQ19QQTBfUlhEMCAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTApIC8vICBVU0FSVCAwIFJlY2VpdmUgRGF0YQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDEpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMQ0KKyNkZWZpbmUgQVQ5MUNfUEExX1RYRDAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExKSAvLyAgVVNBUlQgMCBUcmFuc21pdCBEYXRhDQorI2RlZmluZSBBVDkxQ19QSU9fUEExMCAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxMCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExMA0KKyNkZWZpbmUgQVQ5MUNfUEExMF9UV0QgICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMTApIC8vICBUV0kgVHdvLXdpcmUgU2VyaWFsIERhdGENCisjZGVmaW5lIEFUOTFDX1BJT19QQTExICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDExKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTExDQorI2RlZmluZSBBVDkxQ19QQTExX1RXQ0sgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExMSkgLy8gIFRXSSBUd28td2lyZSBTZXJpYWwgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BJT19QQTEyICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDEyKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTEyDQorI2RlZmluZSBBVDkxQ19QQTEyX05QQ1MwMCAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExMikgLy8gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMTMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTMpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMTMNCisjZGVmaW5lIEFUOTFDX1BBMTNfTlBDUzAxICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTEzKSAvLyAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAxDQorI2RlZmluZSBBVDkxQ19QQTEzX1BDSzEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExMykgLy8gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDENCisjZGVmaW5lIEFUOTFDX1BJT19QQTE0ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDE0KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTE0DQorI2RlZmluZSBBVDkxQ19QQTE0X05QQ1MwMiAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExNCkgLy8gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMg0KKyNkZWZpbmUgQVQ5MUNfUEExNF9JUlExICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMTQpIC8vICBFeHRlcm5hbCBJbnRlcnJ1cHQgMQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMTUgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTUpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMTUNCisjZGVmaW5lIEFUOTFDX1BBMTVfTlBDUzAzICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTE1KSAvLyAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzDQorI2RlZmluZSBBVDkxQ19QQTE1X1RDTEsyICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExNSkgLy8gIFRpbWVyIENvdW50ZXIgMiBleHRlcm5hbCBjbG9jayBpbnB1dA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMTYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTYpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMTYNCisjZGVmaW5lIEFUOTFDX1BBMTZfTUlTTzAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTE2KSAvLyAgU1BJIDAgTWFzdGVyIEluIFNsYXZlDQorI2RlZmluZSBBVDkxQ19QSU9fUEExNyAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxNykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExNw0KKyNkZWZpbmUgQVQ5MUNfUEExN19NT1NJMCAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMTcpIC8vICBTUEkgMCBNYXN0ZXIgT3V0IFNsYXZlDQorI2RlZmluZSBBVDkxQ19QSU9fUEExOCAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxOCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExOA0KKyNkZWZpbmUgQVQ5MUNfUEExOF9TUENLMCAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMTgpIC8vICBTUEkgMCBTZXJpYWwgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BJT19QQTE5ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDE5KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTE5DQorI2RlZmluZSBBVDkxQ19QQTE5X0NBTlJYICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExOSkgLy8gIENBTiBSZWNlaXZlDQorI2RlZmluZSBBVDkxQ19QSU9fUEEyICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgMikgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEyDQorI2RlZmluZSBBVDkxQ19QQTJfU0NLMCAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTIpIC8vICBVU0FSVCAwIFNlcmlhbCBDbG9jaw0KKyNkZWZpbmUgQVQ5MUNfUEEyX05QQ1MxMSAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyKSAvLyAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAxDQorI2RlZmluZSBBVDkxQ19QSU9fUEEyMCAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAyMCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEyMA0KKyNkZWZpbmUgQVQ5MUNfUEEyMF9DQU5UWCAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjApIC8vICBDQU4gVHJhbnNtaXQNCisjZGVmaW5lIEFUOTFDX1BJT19QQTIxICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDIxKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTIxDQorI2RlZmluZSBBVDkxQ19QQTIxX1RGICAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyMSkgLy8gIFNTQyBUcmFuc21pdCBGcmFtZSBTeW5jDQorI2RlZmluZSBBVDkxQ19QQTIxX05QQ1MxMCAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyMSkgLy8gIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMjIgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjIpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjINCisjZGVmaW5lIEFUOTFDX1BBMjJfVEsgICAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTIyKSAvLyAgU1NDIFRyYW5zbWl0IENsb2NrDQorI2RlZmluZSBBVDkxQ19QQTIyX1NQQ0sxICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyMikgLy8gIFNQSSAxIFNlcmlhbCBDbG9jaw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMjMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjMpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjMNCisjZGVmaW5lIEFUOTFDX1BBMjNfVEQgICAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTIzKSAvLyAgU1NDIFRyYW5zbWl0IGRhdGENCisjZGVmaW5lIEFUOTFDX1BBMjNfTU9TSTEgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTIzKSAvLyAgU1BJIDEgTWFzdGVyIE91dCBTbGF2ZQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMjQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjQpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjQNCisjZGVmaW5lIEFUOTFDX1BBMjRfUkQgICAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTI0KSAvLyAgU1NDIFJlY2VpdmUgRGF0YQ0KKyNkZWZpbmUgQVQ5MUNfUEEyNF9NSVNPMSAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjQpIC8vICBTUEkgMSBNYXN0ZXIgSW4gU2xhdmUNCisjZGVmaW5lIEFUOTFDX1BJT19QQTI1ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDI1KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTI1DQorI2RlZmluZSBBVDkxQ19QQTI1X1JLICAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyNSkgLy8gIFNTQyBSZWNlaXZlIENsb2NrDQorI2RlZmluZSBBVDkxQ19QQTI1X05QQ1MxMSAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyNSkgLy8gIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMjYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjYpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjYNCisjZGVmaW5lIEFUOTFDX1BBMjZfUkYgICAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTI2KSAvLyAgU1NDIFJlY2VpdmUgRnJhbWUgU3luYw0KKyNkZWZpbmUgQVQ5MUNfUEEyNl9OUENTMTIgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjYpIC8vICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDINCisjZGVmaW5lIEFUOTFDX1BJT19QQTI3ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDI3KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTI3DQorI2RlZmluZSBBVDkxQ19QQTI3X0RSWEQgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyNykgLy8gIERCR1UgRGVidWcgUmVjZWl2ZSBEYXRhDQorI2RlZmluZSBBVDkxQ19QQTI3X1BDSzMgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyNykgLy8gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDMNCisjZGVmaW5lIEFUOTFDX1BJT19QQTI4ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDI4KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTI4DQorI2RlZmluZSBBVDkxQ19QQTI4X0RUWEQgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyOCkgLy8gIERCR1UgRGVidWcgVHJhbnNtaXQgRGF0YQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMjkgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjkpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjkNCisjZGVmaW5lIEFUOTFDX1BBMjlfRklRICAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTI5KSAvLyAgQUlDIEZhc3QgSW50ZXJydXB0IElucHV0DQorI2RlZmluZSBBVDkxQ19QQTI5X05QQ1MxMyAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyOSkgLy8gIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDMpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMw0KKyNkZWZpbmUgQVQ5MUNfUEEzX1JUUzAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEzKSAvLyAgVVNBUlQgMCBSZWFkeSBUbyBTZW5kDQorI2RlZmluZSBBVDkxQ19QQTNfTlBDUzEyICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTMpIC8vICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDINCisjZGVmaW5lIEFUOTFDX1BJT19QQTMwICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDMwKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTMwDQorI2RlZmluZSBBVDkxQ19QQTMwX0lSUTAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEzMCkgLy8gIEV4dGVybmFsIEludGVycnVwdCAwDQorI2RlZmluZSBBVDkxQ19QQTMwX1BDSzIgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEzMCkgLy8gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDINCisjZGVmaW5lIEFUOTFDX1BJT19QQTQgICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICA0KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTQNCisjZGVmaW5lIEFUOTFDX1BBNF9DVFMwICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBNCkgLy8gIFVTQVJUIDAgQ2xlYXIgVG8gU2VuZA0KKyNkZWZpbmUgQVQ5MUNfUEE0X05QQ1MxMyAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEE0KSAvLyAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzDQorI2RlZmluZSBBVDkxQ19QSU9fUEE1ICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgNSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEE1DQorI2RlZmluZSBBVDkxQ19QQTVfUlhEMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTUpIC8vICBVU0FSVCAxIFJlY2VpdmUgRGF0YQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBNiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDYpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBNg0KKyNkZWZpbmUgQVQ5MUNfUEE2X1RYRDEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEE2KSAvLyAgVVNBUlQgMSBUcmFuc21pdCBEYXRhDQorI2RlZmluZSBBVDkxQ19QSU9fUEE3ICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgNykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEE3DQorI2RlZmluZSBBVDkxQ19QQTdfU0NLMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTcpIC8vICBVU0FSVCAxIFNlcmlhbCBDbG9jaw0KKyNkZWZpbmUgQVQ5MUNfUEE3X05QQ1MwMSAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEE3KSAvLyAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAxDQorI2RlZmluZSBBVDkxQ19QSU9fUEE4ICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgOCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEE4DQorI2RlZmluZSBBVDkxQ19QQThfUlRTMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTgpIC8vICBVU0FSVCAxIFJlYWR5IFRvIFNlbmQNCisjZGVmaW5lIEFUOTFDX1BBOF9OUENTMDIgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBOCkgLy8gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBOSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDkpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBOQ0KKyNkZWZpbmUgQVQ5MUNfUEE5X0NUUzEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEE5KSAvLyAgVVNBUlQgMSBDbGVhciBUbyBTZW5kDQorI2RlZmluZSBBVDkxQ19QQTlfTlBDUzAzICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTkpIC8vICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMNCisjZGVmaW5lIEFUOTFDX1BJT19QQjAgICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICAwKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjANCisjZGVmaW5lIEFUOTFDX1BCMF9FVFhDS19FUkVGQ0sgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjApIC8vICBFdGhlcm5ldCBNQUMgVHJhbnNtaXQgQ2xvY2svUmVmZXJlbmNlIENsb2NrDQorI2RlZmluZSBBVDkxQ19QQjBfUENLMCAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjApIC8vICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAwDQorI2RlZmluZSBBVDkxQ19QSU9fUEIxICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgMSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIxDQorI2RlZmluZSBBVDkxQ19QQjFfRVRYRU4gICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjEpIC8vICBFdGhlcm5ldCBNQUMgVHJhbnNtaXQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19QSU9fUEIxMCAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxMCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIxMA0KKyNkZWZpbmUgQVQ5MUNfUEIxMF9FVFgyICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMTApIC8vICBFdGhlcm5ldCBNQUMgVHJhbnNtaXQgRGF0YSAyDQorI2RlZmluZSBBVDkxQ19QQjEwX05QQ1MxMSAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxMCkgLy8gIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMTEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTEpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMTENCisjZGVmaW5lIEFUOTFDX1BCMTFfRVRYMyAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjExKSAvLyAgRXRoZXJuZXQgTUFDIFRyYW5zbWl0IERhdGEgMw0KKyNkZWZpbmUgQVQ5MUNfUEIxMV9OUENTMTIgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMTEpIC8vICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDINCisjZGVmaW5lIEFUOTFDX1BJT19QQjEyICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDEyKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjEyDQorI2RlZmluZSBBVDkxQ19QQjEyX0VUWEVSICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxMikgLy8gIEV0aGVybmV0IE1BQyBUcmFuc21pa3QgQ29kaW5nIEVycm9yDQorI2RlZmluZSBBVDkxQ19QQjEyX1RDTEswICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxMikgLy8gIFRpbWVyIENvdW50ZXIgMCBleHRlcm5hbCBjbG9jayBpbnB1dA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMTMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTMpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMTMNCisjZGVmaW5lIEFUOTFDX1BCMTNfRVJYMiAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjEzKSAvLyAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgRGF0YSAyDQorI2RlZmluZSBBVDkxQ19QQjEzX05QQ1MwMSAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxMykgLy8gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMTQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTQpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMTQNCisjZGVmaW5lIEFUOTFDX1BCMTRfRVJYMyAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjE0KSAvLyAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgRGF0YSAzDQorI2RlZmluZSBBVDkxQ19QQjE0X05QQ1MwMiAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxNCkgLy8gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMTUgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTUpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMTUNCisjZGVmaW5lIEFUOTFDX1BCMTVfRVJYRFYgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjE1KSAvLyAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgRGF0YSBWYWxpZA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMTYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTYpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMTYNCisjZGVmaW5lIEFUOTFDX1BCMTZfRUNPTCAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjE2KSAvLyAgRXRoZXJuZXQgTUFDIENvbGxpc2lvbiBEZXRlY3RlZA0KKyNkZWZpbmUgQVQ5MUNfUEIxNl9OUENTMTMgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMTYpIC8vICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMNCisjZGVmaW5lIEFUOTFDX1BJT19QQjE3ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDE3KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjE3DQorI2RlZmluZSBBVDkxQ19QQjE3X0VSWENLICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxNykgLy8gIEV0aGVybmV0IE1BQyBSZWNlaXZlIENsb2NrDQorI2RlZmluZSBBVDkxQ19QQjE3X05QQ1MwMyAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxNykgLy8gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMTggICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTgpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMTgNCisjZGVmaW5lIEFUOTFDX1BCMThfRUYxMDAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjE4KSAvLyAgRXRoZXJuZXQgTUFDIEZvcmNlIDEwMCBNYml0cy9zZWMNCisjZGVmaW5lIEFUOTFDX1BCMThfQURUUkcgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjE4KSAvLyAgQURDIEV4dGVybmFsIFRyaWdnZXINCisjZGVmaW5lIEFUOTFDX1BJT19QQjE5ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDE5KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjE5DQorI2RlZmluZSBBVDkxQ19QQjE5X1BXTTAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxOSkgLy8gIFBXTSBDaGFubmVsIDANCisjZGVmaW5lIEFUOTFDX1BCMTlfVENMSzEgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjE5KSAvLyAgVGltZXIgQ291bnRlciAxIGV4dGVybmFsIGNsb2NrIGlucHV0DQorI2RlZmluZSBBVDkxQ19QSU9fUEIyICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgMikgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIyDQorI2RlZmluZSBBVDkxQ19QQjJfRVRYMCAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjIpIC8vICBFdGhlcm5ldCBNQUMgVHJhbnNtaXQgRGF0YSAwDQorI2RlZmluZSBBVDkxQ19QSU9fUEIyMCAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAyMCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIyMA0KKyNkZWZpbmUgQVQ5MUNfUEIyMF9QV00xICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMjApIC8vICBQV00gQ2hhbm5lbCAxDQorI2RlZmluZSBBVDkxQ19QQjIwX1BDSzAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyMCkgLy8gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDANCisjZGVmaW5lIEFUOTFDX1BJT19QQjIxICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDIxKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjIxDQorI2RlZmluZSBBVDkxQ19QQjIxX1BXTTIgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyMSkgLy8gIFBXTSBDaGFubmVsIDINCisjZGVmaW5lIEFUOTFDX1BCMjFfUENLMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjIxKSAvLyAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMjIgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjIpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMjINCisjZGVmaW5lIEFUOTFDX1BCMjJfUFdNMyAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjIyKSAvLyAgUFdNIENoYW5uZWwgMw0KKyNkZWZpbmUgQVQ5MUNfUEIyMl9QQ0syICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMjIpIC8vICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAyDQorI2RlZmluZSBBVDkxQ19QSU9fUEIyMyAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAyMykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIyMw0KKyNkZWZpbmUgQVQ5MUNfUEIyM19USU9BMCAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMjMpIC8vICBUaW1lciBDb3VudGVyIDAgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQQ0KKyNkZWZpbmUgQVQ5MUNfUEIyM19EQ0QxICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMjMpIC8vICBVU0FSVCAxIERhdGEgQ2FycmllciBEZXRlY3QNCisjZGVmaW5lIEFUOTFDX1BJT19QQjI0ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDI0KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjI0DQorI2RlZmluZSBBVDkxQ19QQjI0X1RJT0IwICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyNCkgLy8gIFRpbWVyIENvdW50ZXIgMCBNdWx0aXB1cnBvc2UgVGltZXIgSS9PIFBpbiBCDQorI2RlZmluZSBBVDkxQ19QQjI0X0RTUjEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyNCkgLy8gIFVTQVJUIDEgRGF0YSBTZXQgcmVhZHkNCisjZGVmaW5lIEFUOTFDX1BJT19QQjI1ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDI1KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjI1DQorI2RlZmluZSBBVDkxQ19QQjI1X1RJT0ExICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyNSkgLy8gIFRpbWVyIENvdW50ZXIgMSBNdWx0aXB1cnBvc2UgVGltZXIgSS9PIFBpbiBBDQorI2RlZmluZSBBVDkxQ19QQjI1X0RUUjEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyNSkgLy8gIFVTQVJUIDEgRGF0YSBUZXJtaW5hbCByZWFkeQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMjYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjYpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMjYNCisjZGVmaW5lIEFUOTFDX1BCMjZfVElPQjEgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjI2KSAvLyAgVGltZXIgQ291bnRlciAxIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEINCisjZGVmaW5lIEFUOTFDX1BCMjZfUkkxICAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjI2KSAvLyAgVVNBUlQgMSBSaW5nIEluZGljYXRvcg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMjcgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjcpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMjcNCisjZGVmaW5lIEFUOTFDX1BCMjdfVElPQTIgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjI3KSAvLyAgVGltZXIgQ291bnRlciAyIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEENCisjZGVmaW5lIEFUOTFDX1BCMjdfUFdNMCAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjI3KSAvLyAgUFdNIENoYW5uZWwgMA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMjggICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjgpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMjgNCisjZGVmaW5lIEFUOTFDX1BCMjhfVElPQjIgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjI4KSAvLyAgVGltZXIgQ291bnRlciAyIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEINCisjZGVmaW5lIEFUOTFDX1BCMjhfUFdNMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjI4KSAvLyAgUFdNIENoYW5uZWwgMQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMjkgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjkpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMjkNCisjZGVmaW5lIEFUOTFDX1BCMjlfUENLMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjI5KSAvLyAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMQ0KKyNkZWZpbmUgQVQ5MUNfUEIyOV9QV00yICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMjkpIC8vICBQV00gQ2hhbm5lbCAyDQorI2RlZmluZSBBVDkxQ19QSU9fUEIzICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgMykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIzDQorI2RlZmluZSBBVDkxQ19QQjNfRVRYMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjMpIC8vICBFdGhlcm5ldCBNQUMgVHJhbnNtaXQgRGF0YSAxDQorI2RlZmluZSBBVDkxQ19QSU9fUEIzMCAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAzMCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIzMA0KKyNkZWZpbmUgQVQ5MUNfUEIzMF9QQ0syICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMzApIC8vICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAyDQorI2RlZmluZSBBVDkxQ19QQjMwX1BXTTMgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIzMCkgLy8gIFBXTSBDaGFubmVsIDMNCisjZGVmaW5lIEFUOTFDX1BJT19QQjQgICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICA0KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjQNCisjZGVmaW5lIEFUOTFDX1BCNF9FQ1JTX0VDUlNEViAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCNCkgLy8gIEV0aGVybmV0IE1BQyBDYXJyaWVyIFNlbnNlL0NhcnJpZXIgU2Vuc2UgYW5kIERhdGEgVmFsaWQNCisjZGVmaW5lIEFUOTFDX1BJT19QQjUgICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICA1KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjUNCisjZGVmaW5lIEFUOTFDX1BCNV9FUlgwICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCNSkgLy8gIEV0aGVybmV0IE1BQyBSZWNlaXZlIERhdGEgMA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCNiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDYpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCNg0KKyNkZWZpbmUgQVQ5MUNfUEI2X0VSWDEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEI2KSAvLyAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgRGF0YSAxDQorI2RlZmluZSBBVDkxQ19QSU9fUEI3ICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgNykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEI3DQorI2RlZmluZSBBVDkxQ19QQjdfRVJYRVIgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjcpIC8vICBFdGhlcm5ldCBNQUMgUmVjZWl2ZSBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCOCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDgpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCOA0KKyNkZWZpbmUgQVQ5MUNfUEI4X0VNREMgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEI4KSAvLyAgRXRoZXJuZXQgTUFDIE1hbmFnZW1lbnQgRGF0YSBDbG9jaw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCOSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDkpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCOQ0KKyNkZWZpbmUgQVQ5MUNfUEI5X0VNRElPICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEI5KSAvLyAgRXRoZXJuZXQgTUFDIE1hbmFnZW1lbnQgRGF0YSBJbnB1dC9PdXRwdXQNCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICAgUEVSSVBIRVJBTCBJRCBERUZJTklUSU9OUyBGT1IgQVQ5MVNBTTdYMTI4ICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0jZGVmaW5lIEFUOTFDX0lEX0ZJUSAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAwICkgIC8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChGSVEpICovDQotI2RlZmluZSBBVDkxQ19JRF9TWVMgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSApICAvKiBTeXN0ZW0gUGVyaXBoZXJhbCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfUElPQSAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDIgKSAgLyogUGFyYWxsZWwgSU8gQ29udHJvbGxlciBBICovDQotI2RlZmluZSBBVDkxQ19JRF9QSU9CICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMyApICAvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEIgKi8NCi0jZGVmaW5lIEFUOTFDX0lEX1NQSTAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSA0ICkgIC8qIFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSAwICovDQotI2RlZmluZSBBVDkxQ19JRF9TUEkxICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgNSApICAvKiBTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgMSAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfVVMwICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDYgKSAgLyogVVNBUlQgMCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfVVMxICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDcgKSAgLyogVVNBUlQgMSAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfU1NDICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDggKSAgLyogU2VyaWFsIFN5bmNocm9ub3VzIENvbnRyb2xsZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0lEX1RXSSAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSA5ICkgIC8qIFR3by1XaXJlIEludGVyZmFjZSAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfUFdNQyAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEwICkgLyogUFdNIENvbnRyb2xsZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0lEX1VEUCAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxMSApIC8qIFVTQiBEZXZpY2UgUG9ydCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfVEMwICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEyICkgLyogVGltZXIgQ291bnRlciAwICovDQotI2RlZmluZSBBVDkxQ19JRF9UQzEgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMTMgKSAvKiBUaW1lciBDb3VudGVyIDEgKi8NCi0jZGVmaW5lIEFUOTFDX0lEX1RDMiAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxNCApIC8qIFRpbWVyIENvdW50ZXIgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfQ0FOICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDE1ICkgLyogQ29udHJvbCBBcmVhIE5ldHdvcmsgQ29udHJvbGxlciAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfRU1BQyAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDE2ICkgLyogRXRoZXJuZXQgTUFDICovDQotI2RlZmluZSBBVDkxQ19JRF9BREMgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMTcgKSAvKiBBbmFsb2ctdG8tRGlnaXRhbCBDb252ZXJ0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0lEX0FFUyAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxOCApIC8qIEFkdmFuY2VkIEVuY3J5cHRpb24gU3RhbmRhcmQgMTI4LWJpdCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfVERFUyAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDE5ICkgLyogVHJpcGxlIERhdGEgRW5jcnlwdGlvbiBTdGFuZGFyZCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfMjBfUmVzZXJ2ZWQgICAgKCAoIHVuc2lnbmVkIGludCApIDIwICkgLyogUmVzZXJ2ZWQgKi8NCi0jZGVmaW5lIEFUOTFDX0lEXzIxX1Jlc2VydmVkICAgICggKCB1bnNpZ25lZCBpbnQgKSAyMSApIC8qIFJlc2VydmVkICovDQotI2RlZmluZSBBVDkxQ19JRF8yMl9SZXNlcnZlZCAgICAoICggdW5zaWduZWQgaW50ICkgMjIgKSAvKiBSZXNlcnZlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfMjNfUmVzZXJ2ZWQgICAgKCAoIHVuc2lnbmVkIGludCApIDIzICkgLyogUmVzZXJ2ZWQgKi8NCi0jZGVmaW5lIEFUOTFDX0lEXzI0X1Jlc2VydmVkICAgICggKCB1bnNpZ25lZCBpbnQgKSAyNCApIC8qIFJlc2VydmVkICovDQotI2RlZmluZSBBVDkxQ19JRF8yNV9SZXNlcnZlZCAgICAoICggdW5zaWduZWQgaW50ICkgMjUgKSAvKiBSZXNlcnZlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfMjZfUmVzZXJ2ZWQgICAgKCAoIHVuc2lnbmVkIGludCApIDI2ICkgLyogUmVzZXJ2ZWQgKi8NCi0jZGVmaW5lIEFUOTFDX0lEXzI3X1Jlc2VydmVkICAgICggKCB1bnNpZ25lZCBpbnQgKSAyNyApIC8qIFJlc2VydmVkICovDQotI2RlZmluZSBBVDkxQ19JRF8yOF9SZXNlcnZlZCAgICAoICggdW5zaWduZWQgaW50ICkgMjggKSAvKiBSZXNlcnZlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfMjlfUmVzZXJ2ZWQgICAgKCAoIHVuc2lnbmVkIGludCApIDI5ICkgLyogUmVzZXJ2ZWQgKi8NCi0jZGVmaW5lIEFUOTFDX0lEX0lSUTAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAzMCApIC8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChJUlEwKSAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfSVJRMSAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDMxICkgLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKElSUTEpICovDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgIFBFUklQSEVSQUwgSUQgREVGSU5JVElPTlMgRk9SIEFUOTFTQU03WDEyOA0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorI2RlZmluZSBBVDkxQ19JRF9GSVEgICAgKCh1bnNpZ25lZCBpbnQpICAwKSAvLyBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoRklRKQ0KKyNkZWZpbmUgQVQ5MUNfSURfU1lTICAgICgodW5zaWduZWQgaW50KSAgMSkgLy8gU3lzdGVtIFBlcmlwaGVyYWwNCisjZGVmaW5lIEFUOTFDX0lEX1BJT0EgICAoKHVuc2lnbmVkIGludCkgIDIpIC8vIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgQQ0KKyNkZWZpbmUgQVQ5MUNfSURfUElPQiAgICgodW5zaWduZWQgaW50KSAgMykgLy8gUGFyYWxsZWwgSU8gQ29udHJvbGxlciBCDQorI2RlZmluZSBBVDkxQ19JRF9TUEkwICAgKCh1bnNpZ25lZCBpbnQpICA0KSAvLyBTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgMA0KKyNkZWZpbmUgQVQ5MUNfSURfU1BJMSAgICgodW5zaWduZWQgaW50KSAgNSkgLy8gU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlIDENCisjZGVmaW5lIEFUOTFDX0lEX1VTMCAgICAoKHVuc2lnbmVkIGludCkgIDYpIC8vIFVTQVJUIDANCisjZGVmaW5lIEFUOTFDX0lEX1VTMSAgICAoKHVuc2lnbmVkIGludCkgIDcpIC8vIFVTQVJUIDENCisjZGVmaW5lIEFUOTFDX0lEX1NTQyAgICAoKHVuc2lnbmVkIGludCkgIDgpIC8vIFNlcmlhbCBTeW5jaHJvbm91cyBDb250cm9sbGVyDQorI2RlZmluZSBBVDkxQ19JRF9UV0kgICAgKCh1bnNpZ25lZCBpbnQpICA5KSAvLyBUd28tV2lyZSBJbnRlcmZhY2UNCisjZGVmaW5lIEFUOTFDX0lEX1BXTUMgICAoKHVuc2lnbmVkIGludCkgMTApIC8vIFBXTSBDb250cm9sbGVyDQorI2RlZmluZSBBVDkxQ19JRF9VRFAgICAgKCh1bnNpZ25lZCBpbnQpIDExKSAvLyBVU0IgRGV2aWNlIFBvcnQNCisjZGVmaW5lIEFUOTFDX0lEX1RDMCAgICAoKHVuc2lnbmVkIGludCkgMTIpIC8vIFRpbWVyIENvdW50ZXIgMA0KKyNkZWZpbmUgQVQ5MUNfSURfVEMxICAgICgodW5zaWduZWQgaW50KSAxMykgLy8gVGltZXIgQ291bnRlciAxDQorI2RlZmluZSBBVDkxQ19JRF9UQzIgICAgKCh1bnNpZ25lZCBpbnQpIDE0KSAvLyBUaW1lciBDb3VudGVyIDINCisjZGVmaW5lIEFUOTFDX0lEX0NBTiAgICAoKHVuc2lnbmVkIGludCkgMTUpIC8vIENvbnRyb2wgQXJlYSBOZXR3b3JrIENvbnRyb2xsZXINCisjZGVmaW5lIEFUOTFDX0lEX0VNQUMgICAoKHVuc2lnbmVkIGludCkgMTYpIC8vIEV0aGVybmV0IE1BQw0KKyNkZWZpbmUgQVQ5MUNfSURfQURDICAgICgodW5zaWduZWQgaW50KSAxNykgLy8gQW5hbG9nLXRvLURpZ2l0YWwgQ29udmVydGVyDQorI2RlZmluZSBBVDkxQ19JRF9BRVMgICAgKCh1bnNpZ25lZCBpbnQpIDE4KSAvLyBBZHZhbmNlZCBFbmNyeXB0aW9uIFN0YW5kYXJkIDEyOC1iaXQNCisjZGVmaW5lIEFUOTFDX0lEX1RERVMgICAoKHVuc2lnbmVkIGludCkgMTkpIC8vIFRyaXBsZSBEYXRhIEVuY3J5cHRpb24gU3RhbmRhcmQNCisjZGVmaW5lIEFUOTFDX0lEXzIwX1Jlc2VydmVkICgodW5zaWduZWQgaW50KSAyMCkgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzIxX1Jlc2VydmVkICgodW5zaWduZWQgaW50KSAyMSkgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzIyX1Jlc2VydmVkICgodW5zaWduZWQgaW50KSAyMikgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzIzX1Jlc2VydmVkICgodW5zaWduZWQgaW50KSAyMykgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzI0X1Jlc2VydmVkICgodW5zaWduZWQgaW50KSAyNCkgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzI1X1Jlc2VydmVkICgodW5zaWduZWQgaW50KSAyNSkgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzI2X1Jlc2VydmVkICgodW5zaWduZWQgaW50KSAyNikgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzI3X1Jlc2VydmVkICgodW5zaWduZWQgaW50KSAyNykgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzI4X1Jlc2VydmVkICgodW5zaWduZWQgaW50KSAyOCkgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzI5X1Jlc2VydmVkICgodW5zaWduZWQgaW50KSAyOSkgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEX0lSUTAgICAoKHVuc2lnbmVkIGludCkgMzApIC8vIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChJUlEwKQ0KKyNkZWZpbmUgQVQ5MUNfSURfSVJRMSAgICgodW5zaWduZWQgaW50KSAzMSkgLy8gQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKElSUTEpDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgIEJBU0UgQUREUkVTUyBERUZJTklUSU9OUyBGT1IgQVQ5MVNBTTdYMTI4ICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfU1lTICAgICAgICAgKCAoIEFUOTFQU19TWVMgKSAweEZGRkZGMDAwICkgICAgIC8qIChTWVMpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9BSUMgICAgICAgICAoICggQVQ5MVBTX0FJQyApIDB4RkZGRkYwMDAgKSAgICAgLyogKEFJQykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19EQkdVICAgICggKCBBVDkxUFNfUERDICkgMHhGRkZGRjMwMCApICAgICAvKiAoUERDX0RCR1UpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9EQkdVICAgICAgICAoICggQVQ5MVBTX0RCR1UgKSAweEZGRkZGMjAwICkgICAgLyogKERCR1UpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9QSU9BICAgICAgICAoICggQVQ5MVBTX1BJTyApIDB4RkZGRkY0MDAgKSAgICAgLyogKFBJT0EpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9QSU9CICAgICAgICAoICggQVQ5MVBTX1BJTyApIDB4RkZGRkY2MDAgKSAgICAgLyogKFBJT0IpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9DS0dSICAgICAgICAoICggQVQ5MVBTX0NLR1IgKSAweEZGRkZGQzIwICkgICAgLyogKENLR1IpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9QTUMgICAgICAgICAoICggQVQ5MVBTX1BNQyApIDB4RkZGRkZDMDAgKSAgICAgLyogKFBNQykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1JTVEMgICAgICAgICggKCBBVDkxUFNfUlNUQyApIDB4RkZGRkZEMDAgKSAgICAvKiAoUlNUQykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1JUVEMgICAgICAgICggKCBBVDkxUFNfUlRUQyApIDB4RkZGRkZEMjAgKSAgICAvKiAoUlRUQykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1BJVEMgICAgICAgICggKCBBVDkxUFNfUElUQyApIDB4RkZGRkZEMzAgKSAgICAvKiAoUElUQykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1dEVEMgICAgICAgICggKCBBVDkxUFNfV0RUQyApIDB4RkZGRkZENDAgKSAgICAvKiAoV0RUQykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1ZSRUcgICAgICAgICggKCBBVDkxUFNfVlJFRyApIDB4RkZGRkZENjAgKSAgICAvKiAoVlJFRykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX01DICAgICAgICAgICggKCBBVDkxUFNfTUMgKSAweEZGRkZGRjAwICkgICAgICAvKiAoTUMpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfU1BJMSAgICAoICggQVQ5MVBTX1BEQyApIDB4RkZGRTQxMDAgKSAgICAgLyogKFBEQ19TUEkxKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfU1BJMSAgICAgICAgKCAoIEFUOTFQU19TUEkgKSAweEZGRkU0MDAwICkgICAgIC8qIChTUEkxKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfUERDX1NQSTAgICAgKCAoIEFUOTFQU19QREMgKSAweEZGRkUwMTAwICkgICAgIC8qIChQRENfU1BJMCkgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1NQSTAgICAgICAgICggKCBBVDkxUFNfU1BJICkgMHhGRkZFMDAwMCApICAgICAvKiAoU1BJMCkgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19VUzEgICAgICggKCBBVDkxUFNfUERDICkgMHhGRkZDNDEwMCApICAgICAvKiAoUERDX1VTMSkgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1VTMSAgICAgICAgICggKCBBVDkxUFNfVVNBUlQgKSAweEZGRkM0MDAwICkgICAvKiAoVVMxKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfUERDX1VTMCAgICAgKCAoIEFUOTFQU19QREMgKSAweEZGRkMwMTAwICkgICAgIC8qIChQRENfVVMwKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfVVMwICAgICAgICAgKCAoIEFUOTFQU19VU0FSVCApIDB4RkZGQzAwMDAgKSAgIC8qIChVUzApIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfU1NDICAgICAoICggQVQ5MVBTX1BEQyApIDB4RkZGRDQxMDAgKSAgICAgLyogKFBEQ19TU0MpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9TU0MgICAgICAgICAoICggQVQ5MVBTX1NTQyApIDB4RkZGRDQwMDAgKSAgICAgLyogKFNTQykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1RXSSAgICAgICAgICggKCBBVDkxUFNfVFdJICkgMHhGRkZCODAwMCApICAgICAvKiAoVFdJKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfUFdNQ19DSDMgICAgKCAoIEFUOTFQU19QV01DX0NIICkgMHhGRkZDQzI2MCApIC8qIChQV01DX0NIMykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1BXTUNfQ0gyICAgICggKCBBVDkxUFNfUFdNQ19DSCApIDB4RkZGQ0MyNDAgKSAvKiAoUFdNQ19DSDIpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9QV01DX0NIMSAgICAoICggQVQ5MVBTX1BXTUNfQ0ggKSAweEZGRkNDMjIwICkgLyogKFBXTUNfQ0gxKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfUFdNQ19DSDAgICAgKCAoIEFUOTFQU19QV01DX0NIICkgMHhGRkZDQzIwMCApIC8qIChQV01DX0NIMCkgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1BXTUMgICAgICAgICggKCBBVDkxUFNfUFdNQyApIDB4RkZGQ0MwMDAgKSAgICAvKiAoUFdNQykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1VEUCAgICAgICAgICggKCBBVDkxUFNfVURQICkgMHhGRkZCMDAwMCApICAgICAvKiAoVURQKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfVEMwICAgICAgICAgKCAoIEFUOTFQU19UQyApIDB4RkZGQTAwMDAgKSAgICAgIC8qIChUQzApIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9UQzEgICAgICAgICAoICggQVQ5MVBTX1RDICkgMHhGRkZBMDA0MCApICAgICAgLyogKFRDMSkgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1RDMiAgICAgICAgICggKCBBVDkxUFNfVEMgKSAweEZGRkEwMDgwICkgICAgICAvKiAoVEMyKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfVENCICAgICAgICAgKCAoIEFUOTFQU19UQ0IgKSAweEZGRkEwMDAwICkgICAgIC8qIChUQ0IpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUIwICAgICAoICggQVQ5MVBTX0NBTl9NQiApIDB4RkZGRDAyMDAgKSAgLyogKENBTl9NQjApIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUIxICAgICAoICggQVQ5MVBTX0NBTl9NQiApIDB4RkZGRDAyMjAgKSAgLyogKENBTl9NQjEpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUIyICAgICAoICggQVQ5MVBTX0NBTl9NQiApIDB4RkZGRDAyNDAgKSAgLyogKENBTl9NQjIpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUIzICAgICAoICggQVQ5MVBTX0NBTl9NQiApIDB4RkZGRDAyNjAgKSAgLyogKENBTl9NQjMpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUI0ICAgICAoICggQVQ5MVBTX0NBTl9NQiApIDB4RkZGRDAyODAgKSAgLyogKENBTl9NQjQpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUI1ICAgICAoICggQVQ5MVBTX0NBTl9NQiApIDB4RkZGRDAyQTAgKSAgLyogKENBTl9NQjUpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUI2ICAgICAoICggQVQ5MVBTX0NBTl9NQiApIDB4RkZGRDAyQzAgKSAgLyogKENBTl9NQjYpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUI3ICAgICAoICggQVQ5MVBTX0NBTl9NQiApIDB4RkZGRDAyRTAgKSAgLyogKENBTl9NQjcpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9DQU4gICAgICAgICAoICggQVQ5MVBTX0NBTiApIDB4RkZGRDAwMDAgKSAgICAgLyogKENBTikgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX0VNQUMgICAgICAgICggKCBBVDkxUFNfRU1BQyApIDB4RkZGREMwMDAgKSAgICAvKiAoRU1BQykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19BREMgICAgICggKCBBVDkxUFNfUERDICkgMHhGRkZEODEwMCApICAgICAvKiAoUERDX0FEQykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX0FEQyAgICAgICAgICggKCBBVDkxUFNfQURDICkgMHhGRkZEODAwMCApICAgICAvKiAoQURDKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfUERDX0FFUyAgICAgKCAoIEFUOTFQU19QREMgKSAweEZGRkE0MTAwICkgICAgIC8qIChQRENfQUVTKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfQUVTICAgICAgICAgKCAoIEFUOTFQU19BRVMgKSAweEZGRkE0MDAwICkgICAgIC8qIChBRVMpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfVERFUyAgICAoICggQVQ5MVBTX1BEQyApIDB4RkZGQTgxMDAgKSAgICAgLyogKFBEQ19UREVTKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfVERFUyAgICAgICAgKCAoIEFUOTFQU19UREVTICkgMHhGRkZBODAwMCApICAgIC8qIChUREVTKSBCYXNlIEFkZHJlc3MgKi8NCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICAgQkFTRSBBRERSRVNTIERFRklOSVRJT05TIEZPUiBBVDkxU0FNN1gxMjgNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9TWVMgICAgICAgKChBVDkxUFNfU1lTKSAJMHhGRkZGRjAwMCkgLy8gKFNZUykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0FJQyAgICAgICAoKEFUOTFQU19BSUMpIAkweEZGRkZGMDAwKSAvLyAoQUlDKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUERDX0RCR1UgICgoQVQ5MVBTX1BEQykgCTB4RkZGRkYzMDApIC8vIChQRENfREJHVSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0RCR1UgICAgICAoKEFUOTFQU19EQkdVKSAJMHhGRkZGRjIwMCkgLy8gKERCR1UpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QSU9BICAgICAgKChBVDkxUFNfUElPKSAJMHhGRkZGRjQwMCkgLy8gKFBJT0EpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QSU9CICAgICAgKChBVDkxUFNfUElPKSAJMHhGRkZGRjYwMCkgLy8gKFBJT0IpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DS0dSICAgICAgKChBVDkxUFNfQ0tHUikgCTB4RkZGRkZDMjApIC8vIChDS0dSKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUE1DICAgICAgICgoQVQ5MVBTX1BNQykgCTB4RkZGRkZDMDApIC8vIChQTUMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9SU1RDICAgICAgKChBVDkxUFNfUlNUQykgCTB4RkZGRkZEMDApIC8vIChSU1RDKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUlRUQyAgICAgICgoQVQ5MVBTX1JUVEMpIAkweEZGRkZGRDIwKSAvLyAoUlRUQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BJVEMgICAgICAoKEFUOTFQU19QSVRDKSAJMHhGRkZGRkQzMCkgLy8gKFBJVEMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9XRFRDICAgICAgKChBVDkxUFNfV0RUQykgCTB4RkZGRkZENDApIC8vIChXRFRDKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfVlJFRyAgICAgICgoQVQ5MVBTX1ZSRUcpIAkweEZGRkZGRDYwKSAvLyAoVlJFRykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX01DICAgICAgICAoKEFUOTFQU19NQykgCTB4RkZGRkZGMDApIC8vIChNQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19TUEkxICAoKEFUOTFQU19QREMpIAkweEZGRkU0MTAwKSAvLyAoUERDX1NQSTEpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9TUEkxICAgICAgKChBVDkxUFNfU1BJKSAJMHhGRkZFNDAwMCkgLy8gKFNQSTEpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfU1BJMCAgKChBVDkxUFNfUERDKSAJMHhGRkZFMDEwMCkgLy8gKFBEQ19TUEkwKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfU1BJMCAgICAgICgoQVQ5MVBTX1NQSSkgCTB4RkZGRTAwMDApIC8vIChTUEkwKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUERDX1VTMSAgICgoQVQ5MVBTX1BEQykgCTB4RkZGQzQxMDApIC8vIChQRENfVVMxKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfVVMxICAgICAgICgoQVQ5MVBTX1VTQVJUKSAJMHhGRkZDNDAwMCkgLy8gKFVTMSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19VUzAgICAoKEFUOTFQU19QREMpIAkweEZGRkMwMTAwKSAvLyAoUERDX1VTMCkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1VTMCAgICAgICAoKEFUOTFQU19VU0FSVCkgCTB4RkZGQzAwMDApIC8vIChVUzApIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfU1NDICAgKChBVDkxUFNfUERDKSAJMHhGRkZENDEwMCkgLy8gKFBEQ19TU0MpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9TU0MgICAgICAgKChBVDkxUFNfU1NDKSAJMHhGRkZENDAwMCkgLy8gKFNTQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1RXSSAgICAgICAoKEFUOTFQU19UV0kpIAkweEZGRkI4MDAwKSAvLyAoVFdJKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUFdNQ19DSDMgICgoQVQ5MVBTX1BXTUNfQ0gpIAkweEZGRkNDMjYwKSAvLyAoUFdNQ19DSDMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QV01DX0NIMiAgKChBVDkxUFNfUFdNQ19DSCkgCTB4RkZGQ0MyNDApIC8vIChQV01DX0NIMikgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BXTUNfQ0gxICAoKEFUOTFQU19QV01DX0NIKSAJMHhGRkZDQzIyMCkgLy8gKFBXTUNfQ0gxKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUFdNQ19DSDAgICgoQVQ5MVBTX1BXTUNfQ0gpIAkweEZGRkNDMjAwKSAvLyAoUFdNQ19DSDApIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QV01DICAgICAgKChBVDkxUFNfUFdNQykgCTB4RkZGQ0MwMDApIC8vIChQV01DKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfVURQICAgICAgICgoQVQ5MVBTX1VEUCkgCTB4RkZGQjAwMDApIC8vIChVRFApIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9UQzAgICAgICAgKChBVDkxUFNfVEMpIAkweEZGRkEwMDAwKSAvLyAoVEMwKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfVEMxICAgICAgICgoQVQ5MVBTX1RDKSAJMHhGRkZBMDA0MCkgLy8gKFRDMSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1RDMiAgICAgICAoKEFUOTFQU19UQykgCTB4RkZGQTAwODApIC8vIChUQzIpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9UQ0IgICAgICAgKChBVDkxUFNfVENCKSAJMHhGRkZBMDAwMCkgLy8gKFRDQikgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0NBTl9NQjAgICAoKEFUOTFQU19DQU5fTUIpIAkweEZGRkQwMjAwKSAvLyAoQ0FOX01CMCkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0NBTl9NQjEgICAoKEFUOTFQU19DQU5fTUIpIAkweEZGRkQwMjIwKSAvLyAoQ0FOX01CMSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0NBTl9NQjIgICAoKEFUOTFQU19DQU5fTUIpIAkweEZGRkQwMjQwKSAvLyAoQ0FOX01CMikgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0NBTl9NQjMgICAoKEFUOTFQU19DQU5fTUIpIAkweEZGRkQwMjYwKSAvLyAoQ0FOX01CMykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0NBTl9NQjQgICAoKEFUOTFQU19DQU5fTUIpIAkweEZGRkQwMjgwKSAvLyAoQ0FOX01CNCkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0NBTl9NQjUgICAoKEFUOTFQU19DQU5fTUIpIAkweEZGRkQwMkEwKSAvLyAoQ0FOX01CNSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0NBTl9NQjYgICAoKEFUOTFQU19DQU5fTUIpIAkweEZGRkQwMkMwKSAvLyAoQ0FOX01CNikgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0NBTl9NQjcgICAoKEFUOTFQU19DQU5fTUIpIAkweEZGRkQwMkUwKSAvLyAoQ0FOX01CNykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0NBTiAgICAgICAoKEFUOTFQU19DQU4pIAkweEZGRkQwMDAwKSAvLyAoQ0FOKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfRU1BQyAgICAgICgoQVQ5MVBTX0VNQUMpIAkweEZGRkRDMDAwKSAvLyAoRU1BQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19BREMgICAoKEFUOTFQU19QREMpIAkweEZGRkQ4MTAwKSAvLyAoUERDX0FEQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0FEQyAgICAgICAoKEFUOTFQU19BREMpIAkweEZGRkQ4MDAwKSAvLyAoQURDKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUERDX0FFUyAgICgoQVQ5MVBTX1BEQykgCTB4RkZGQTQxMDApIC8vIChQRENfQUVTKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfQUVTICAgICAgICgoQVQ5MVBTX0FFUykgCTB4RkZGQTQwMDApIC8vIChBRVMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfVERFUyAgKChBVDkxUFNfUERDKSAJMHhGRkZBODEwMCkgLy8gKFBEQ19UREVTKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfVERFUyAgICAgICgoQVQ5MVBTX1RERVMpIAkweEZGRkE4MDAwKSAvLyAoVERFUykgQmFzZSBBZGRyZXNzDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgIE1FTU9SWSBNQVBQSU5HIERFRklOSVRJT05TIEZPUiBBVDkxU0FNN1gxMjggKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLSNkZWZpbmUgQVQ5MUNfSVNSQU0gICAgICAgICAgKCAoIGNoYXIgKiApIDB4MDAyMDAwMDAgKSAgICAgICAvKiBJbnRlcm5hbCBTUkFNIGJhc2UgYWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfSVNSQU1fU0laRSAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MDAwMDgwMDAgKSAvKiBJbnRlcm5hbCBTUkFNIHNpemUgaW4gYnl0ZSAoMzIgS2J5dGUpICovDQotI2RlZmluZSBBVDkxQ19JRkxBU0ggICAgICAgICAoICggY2hhciAqICkgMHgwMDEwMDAwMCApICAgICAgIC8qIEludGVybmFsIFJPTSBiYXNlIGFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0lGTEFTSF9TSVpFICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAwMDIwMDAwICkgLyogSW50ZXJuYWwgUk9NIHNpemUgaW4gYnl0ZSAoMTI4IEtieXRlKSAqLw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgICBNRU1PUlkgTUFQUElORyBERUZJTklUSU9OUyBGT1IgQVQ5MVNBTTdYMTI4DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisjZGVmaW5lIEFUOTFDX0lTUkFNCSAoKGNoYXIgKikgCTB4MDAyMDAwMDApIC8vIEludGVybmFsIFNSQU0gYmFzZSBhZGRyZXNzDQorI2RlZmluZSBBVDkxQ19JU1JBTV9TSVpFCSAoKHVuc2lnbmVkIGludCkgMHgwMDAwODAwMCkgLy8gSW50ZXJuYWwgU1JBTSBzaXplIGluIGJ5dGUgKDMyIEtieXRlKQ0KKyNkZWZpbmUgQVQ5MUNfSUZMQVNICSAoKGNoYXIgKikgCTB4MDAxMDAwMDApIC8vIEludGVybmFsIFJPTSBiYXNlIGFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0lGTEFTSF9TSVpFCSAoKHVuc2lnbmVkIGludCkgMHgwMDAyMDAwMCkgLy8gSW50ZXJuYWwgUk9NIHNpemUgaW4gYnl0ZSAoMTI4IEtieXRlKQ0KIA0KLSNlbmRpZiAvKiBpZm5kZWYgQVQ5MVNBTTdYMTI4X0ggKi8NCisjZW5kaWYNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9JQVIvQXRtZWxTQU03UzY0L0FUOTFTQU03WDEyOF9pbmMuaCBiL3BvcnRhYmxlL0lBUi9BdG1lbFNBTTdTNjQvQVQ5MVNBTTdYMTI4X2luYy5oCmluZGV4IGI5ZjJlZmYuLjk2YjY4MGEgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0lBUi9BdG1lbFNBTTdTNjQvQVQ5MVNBTTdYMTI4X2luYy5oCisrKyBiL3BvcnRhYmxlL0lBUi9BdG1lbFNBTTdTNjQvQVQ5MVNBTTdYMTI4X2luYy5oCkBAIC0xLDI0NDQgKzEsMjQ0NiBAQAotLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiAgICAgICAgICBBVE1FTCBNaWNyb2NvbnRyb2xsZXIgU29mdHdhcmUgU3VwcG9ydCAgLSAgUk9VU1NFVCAgLSAqLw0KLS8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyogIERJU0NMQUlNRVI6ICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFUTUVMICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SICovDQotLyogIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgKi8NCi0vKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVCBBUkUgKi8NCi0vKiAgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVRNRUwgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgKi8NCi0vKiAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCAqLw0KLS8qICBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgKi8NCi0vKiAgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiAqLw0KLS8qICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyAqLw0KLS8qICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsICovDQotLyogIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuICovDQotLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiBGaWxlIE5hbWUgICAgICAgICAgIDogQVQ5MVNBTTdYMTI4LmggKi8NCi0vKiBPYmplY3QgICAgICAgICAgICAgIDogQVQ5MVNBTTdYMTI4IGRlZmluaXRpb25zICovDQotLyogR2VuZXJhdGVkICAgICAgICAgICA6IEFUOTEgU1cgQXBwbGljYXRpb24gR3JvdXAgIDA1LzIwLzIwMDUgKDE2OjIyOjIzKSAqLw0KLS8qICovDQotLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9BVDkxU0FNN1gxMjgucGwvMS4xNC9UdWUgTWF5IDEwIDEyOjEyOjA1IDIwMDUvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvU1lTX1NBTTdYLnBsLzEuMy9UdWUgRmViICAxIDE3OjAxOjQzIDIwMDUvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvTUNfU0FNN1gucGwvMS4yL0ZyaSBNYXkgMjAgMTQ6MTM6MDQgMjAwNS8vICovDQotLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9QTUNfU0FNN1gucGwvMS40L1R1ZSBGZWIgIDggMTM6NTg6MTAgMjAwNS8vICovDQotLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9SU1RDX1NBTTdYLnBsLzEuMS9UdWUgRmViICAxIDE2OjE2OjI2IDIwMDUvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvVURQX1NBTTdYLnBsLzEuMS9UdWUgTWF5IDEwIDExOjM1OjM1IDIwMDUvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvUFdNX1NBTTdYLnBsLzEuMS9UdWUgTWF5IDEwIDExOjUzOjA3IDIwMDUvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvQUlDXzYwNzVCLnBsLzEuMy9GcmkgTWF5IDIwIDE0OjAxOjMwIDIwMDUvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvUElPXzYwNTdBLnBsLzEuMi9UaHUgRmViICAzIDEwOjE4OjI4IDIwMDUvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvUlRUQ182MDgxQS5wbC8xLjIvVHVlIE5vdiAgOSAxNDo0Mzo1OCAyMDA0Ly8gKi8NCi0vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL1BJVENfNjA3OUEucGwvMS4yL1R1ZSBOb3YgIDkgMTQ6NDM6NTYgMjAwNC8vICovDQotLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9XRFRDXzYwODBBLnBsLzEuMy9UdWUgTm92ICA5IDE0OjQ0OjAwIDIwMDQvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvVlJFR182MDg1Qi5wbC8xLjEvVHVlIEZlYiAgMSAxNjowNTo0OCAyMDA1Ly8gKi8NCi0vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL1BEQ182MDc0Qy5wbC8xLjIvVGh1IEZlYiAgMyAwODo0ODo1NCAyMDA1Ly8gKi8NCi0vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL0RCR1VfNjA1OUQucGwvMS4xL01vbiBKYW4gMzEgMTM6MTU6MzIgMjAwNS8vICovDQotLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9TUElfNjA4OEQucGwvMS4zL0ZyaSBNYXkgMjAgMTQ6MDg6NTkgMjAwNS8vICovDQotLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9VU182MDg5Qy5wbC8xLjEvTW9uIEp1bCAxMiAxODoyMzoyNiAyMDA0Ly8gKi8NCi0vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL1NTQ182MDc4QS5wbC8xLjEvVHVlIEp1bCAxMyAwNzo0NTo0MCAyMDA0Ly8gKi8NCi0vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL1RXSV82MDYxQS5wbC8xLjEvVHVlIEp1bCAxMyAwNzozODowNiAyMDA0Ly8gKi8NCi0vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL1RDXzYwODJBLnBsLzEuNy9GcmkgTWFyIDExIDEyOjUyOjE3IDIwMDUvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvQ0FOXzYwMTlCLnBsLzEuMS9UdWUgTWFyICA4IDEyOjQyOjIyIDIwMDUvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvRU1BQ0JfNjExOUEucGwvMS41L1RodSBGZWIgIDMgMTU6NTI6MDQgMjAwNS8vICovDQotLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9BRENfNjA1MUMucGwvMS4xL0ZyaSBPY3QgMTcgMDk6MTI6MzggMjAwMy8vICovDQotLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9BRVNfNjE0OUEucGwvMS4xMC9Nb24gRmViICA3IDA5OjQ0OjI1IDIwMDUvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvREVTM182MTUwQS5wbC8xLjEvTW9uIEphbiAxNyAwODozNDozMSAyMDA1Ly8gKi8NCi0vKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKy8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8gICAgICAgICAgQVRNRUwgTWljcm9jb250cm9sbGVyIFNvZnR3YXJlIFN1cHBvcnQgIC0gIFJPVVNTRVQgIC0NCisvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vICBESVNDTEFJTUVSOiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVE1FTCAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUg0KKy8vICBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GDQorLy8gIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQgQVJFDQorLy8gIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFUTUVMIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsDQorLy8gIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QNCisvLyAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsDQorLy8gIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YNCisvLyAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcNCisvLyAgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLA0KKy8vICBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKy8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8gRmlsZSBOYW1lICAgICAgICAgICA6IEFUOTFTQU03WDEyOC5oDQorLy8gT2JqZWN0ICAgICAgICAgICAgICA6IEFUOTFTQU03WDEyOCBkZWZpbml0aW9ucw0KKy8vIEdlbmVyYXRlZCAgICAgICAgICAgOiBBVDkxIFNXIEFwcGxpY2F0aW9uIEdyb3VwICAwNS8yMC8yMDA1ICgxNjoyMjoyMykNCisvLyANCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL0FUOTFTQU03WDEyOC5wbC8xLjE0L1R1ZSBNYXkgMTAgMTI6MTI6MDUgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9TWVNfU0FNN1gucGwvMS4zL1R1ZSBGZWIgIDEgMTc6MDE6NDMgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9NQ19TQU03WC5wbC8xLjIvRnJpIE1heSAyMCAxNDoxMzowNCAyMDA1Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1BNQ19TQU03WC5wbC8xLjQvVHVlIEZlYiAgOCAxMzo1ODoxMCAyMDA1Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1JTVENfU0FNN1gucGwvMS4xL1R1ZSBGZWIgIDEgMTY6MTY6MjYgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9VRFBfU0FNN1gucGwvMS4xL1R1ZSBNYXkgMTAgMTE6MzU6MzUgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9QV01fU0FNN1gucGwvMS4xL1R1ZSBNYXkgMTAgMTE6NTM6MDcgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9BSUNfNjA3NUIucGwvMS4zL0ZyaSBNYXkgMjAgMTQ6MDE6MzAgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9QSU9fNjA1N0EucGwvMS4yL1RodSBGZWIgIDMgMTA6MTg6MjggMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9SVFRDXzYwODFBLnBsLzEuMi9UdWUgTm92ICA5IDE0OjQzOjU4IDIwMDQvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvUElUQ182MDc5QS5wbC8xLjIvVHVlIE5vdiAgOSAxNDo0Mzo1NiAyMDA0Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1dEVENfNjA4MEEucGwvMS4zL1R1ZSBOb3YgIDkgMTQ6NDQ6MDAgMjAwNC8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9WUkVHXzYwODVCLnBsLzEuMS9UdWUgRmViICAxIDE2OjA1OjQ4IDIwMDUvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvUERDXzYwNzRDLnBsLzEuMi9UaHUgRmViICAzIDA4OjQ4OjU0IDIwMDUvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvREJHVV82MDU5RC5wbC8xLjEvTW9uIEphbiAzMSAxMzoxNTozMiAyMDA1Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1NQSV82MDg4RC5wbC8xLjMvRnJpIE1heSAyMCAxNDowODo1OSAyMDA1Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1VTXzYwODlDLnBsLzEuMS9Nb24gSnVsIDEyIDE4OjIzOjI2IDIwMDQvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvU1NDXzYwNzhBLnBsLzEuMS9UdWUgSnVsIDEzIDA3OjQ1OjQwIDIwMDQvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvVFdJXzYwNjFBLnBsLzEuMS9UdWUgSnVsIDEzIDA3OjM4OjA2IDIwMDQvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvVENfNjA4MkEucGwvMS43L0ZyaSBNYXIgMTEgMTI6NTI6MTcgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9DQU5fNjAxOUIucGwvMS4xL1R1ZSBNYXIgIDggMTI6NDI6MjIgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9FTUFDQl82MTE5QS5wbC8xLjUvVGh1IEZlYiAgMyAxNTo1MjowNCAyMDA1Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL0FEQ182MDUxQy5wbC8xLjEvRnJpIE9jdCAxNyAwOToxMjozOCAyMDAzLy8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL0FFU182MTQ5QS5wbC8xLjEwL01vbiBGZWIgIDcgMDk6NDQ6MjUgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9ERVMzXzYxNTBBLnBsLzEuMS9Nb24gSmFuIDE3IDA4OjM0OjMxIDIwMDUvLw0KKy8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogDQotLyogSGFyZHdhcmUgcmVnaXN0ZXIgZGVmaW5pdGlvbiAqLw0KKy8vIEhhcmR3YXJlIHJlZ2lzdGVyIGRlZmluaXRpb24NCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFN5c3RlbSBQZXJpcGhlcmFscyAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBTeXN0ZW0gUGVyaXBoZXJhbHMNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfQUlDIHN0cnVjdHVyZSAqKiogKi8NCi0jZGVmaW5lIEFJQ19TTVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDAgKSAgICAgICAgLyogU291cmNlIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFJQ19TVlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDEyOCApICAgICAgLyogU291cmNlIFZlY3RvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQUlDX0lWUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMjU2ICkgICAgICAvKiBJUlEgVmVjdG9yIFJlZ2lzdGVyICovDQotI2RlZmluZSBBSUNfRlZSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAyNjAgKSAgICAgIC8qIEZJUSBWZWN0b3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFJQ19JU1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDI2NCApICAgICAgLyogSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQUlDX0lQUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMjY4ICkgICAgICAvKiBJbnRlcnJ1cHQgUGVuZGluZyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQUlDX0lNUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMjcyICkgICAgICAvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQUlDX0NJU1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMjc2ICkgICAgICAvKiBDb3JlIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFJQ19JRUNSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDI4OCApICAgICAgLyogSW50ZXJydXB0IEVuYWJsZSBDb21tYW5kIFJlZ2lzdGVyICovDQotI2RlZmluZSBBSUNfSURDUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAyOTIgKSAgICAgIC8qIEludGVycnVwdCBEaXNhYmxlIENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFJQ19JQ0NSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDI5NiApICAgICAgLyogSW50ZXJydXB0IENsZWFyIENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFJQ19JU0NSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDMwMCApICAgICAgLyogSW50ZXJydXB0IFNldCBDb21tYW5kIFJlZ2lzdGVyICovDQotI2RlZmluZSBBSUNfRU9JQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAzMDQgKSAgICAgIC8qIEVuZCBvZiBJbnRlcnJ1cHQgQ29tbWFuZCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQUlDX1NQVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMzA4ICkgICAgICAvKiBTcHVyaW91cyBWZWN0b3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFJQ19EQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDMxMiApICAgICAgLyogRGVidWcgQ29udHJvbCBSZWdpc3RlciAoUHJvdGVjdCkgKi8NCi0jZGVmaW5lIEFJQ19GRkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDMyMCApICAgICAgLyogRmFzdCBGb3JjaW5nIEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQUlDX0ZGRFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMzI0ICkgICAgICAvKiBGYXN0IEZvcmNpbmcgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQUlDX0ZGU1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMzI4ICkgICAgICAvKiBGYXN0IEZvcmNpbmcgU3RhdHVzIFJlZ2lzdGVyICovDQotLyogLS0tLS0tLS0gQUlDX1NNUiA6IChBSUMgT2Zmc2V0OiAweDApIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19QUklPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDB4NyA8PCAwICkgLyogKEFJQykgUHJpb3JpdHkgTGV2ZWwgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BSUNfUFJJT1JfTE9XRVNUICAgICAgICAgICAgICAgICAoIDB4MCApICAgICAgLyogKEFJQykgTG93ZXN0IHByaW9yaXR5IGxldmVsICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUlDX1BSSU9SX0hJR0hFU1QgICAgICAgICAgICAgICAgKCAweDcgKSAgICAgIC8qIChBSUMpIEhpZ2hlc3QgcHJpb3JpdHkgbGV2ZWwgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19TUkNUWVBFICAgICAgICAgICAgICAgICAgICAgICAgICAoIDB4MyA8PCA1ICkgLyogKEFJQykgSW50ZXJydXB0IFNvdXJjZSBUeXBlICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUlDX1NSQ1RZUEVfSU5UX0hJR0hfTEVWRUwgICAgICAgKCAweDAgPDwgNSApIC8qIChBSUMpIEludGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBIaWdoLWxldmVsIFNlbnNpdGl2ZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FJQ19TUkNUWVBFX0VYVF9MT1dfTEVWRUwgICAgICAgICggMHgwIDw8IDUgKSAvKiAoQUlDKSBFeHRlcm5hbCBTb3VyY2VzIENvZGUgTGFiZWwgTG93LWxldmVsIFNlbnNpdGl2ZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FJQ19TUkNUWVBFX0lOVF9QT1NJVElWRV9FREdFICAgICggMHgxIDw8IDUgKSAvKiAoQUlDKSBJbnRlcm5hbCBTb3VyY2VzIENvZGUgTGFiZWwgUG9zaXRpdmUgRWRnZSB0cmlnZ2VyZWQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BSUNfU1JDVFlQRV9FWFRfTkVHQVRJVkVfRURHRSAgICAoIDB4MSA8PCA1ICkgLyogKEFJQykgRXh0ZXJuYWwgU291cmNlcyBDb2RlIExhYmVsIE5lZ2F0aXZlIEVkZ2UgdHJpZ2dlcmVkICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUlDX1NSQ1RZUEVfSElHSF9MRVZFTCAgICAgICAgICAgKCAweDIgPDwgNSApIC8qIChBSUMpIEludGVybmFsIE9yIEV4dGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBIaWdoLWxldmVsIFNlbnNpdGl2ZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FJQ19TUkNUWVBFX1BPU0lUSVZFX0VER0UgICAgICAgICggMHgzIDw8IDUgKSAvKiAoQUlDKSBJbnRlcm5hbCBPciBFeHRlcm5hbCBTb3VyY2VzIENvZGUgTGFiZWwgUG9zaXRpdmUgRWRnZSB0cmlnZ2VyZWQgKi8NCi0vKiAtLS0tLS0tLSBBSUNfQ0lTUiA6IChBSUMgT2Zmc2V0OiAweDExNCkgQUlDIENvcmUgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX05GSVEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDAgKSAvKiAoQUlDKSBORklRIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX05JUlEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDEgKSAvKiAoQUlDKSBOSVJRIFN0YXR1cyAqLw0KLS8qIC0tLS0tLS0tIEFJQ19EQ1IgOiAoQUlDIE9mZnNldDogMHgxMzgpIEFJQyBEZWJ1ZyBDb250cm9sIFJlZ2lzdGVyIChQcm90ZWN0KSAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX0RDUl9QUk9UICAgICAgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDAgKSAvKiAoQUlDKSBQcm90ZWN0aW9uIE1vZGUgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19EQ1JfR01TSyAgICAgICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxICkgLyogKEFJQykgR2VuZXJhbCBNYXNrICovDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlcg0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19BSUMgc3RydWN0dXJlICoqKg0KKyNkZWZpbmUgQUlDX1NNUiAgICAgICAgICggMCkgLy8gU291cmNlIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFJQ19TVlIgICAgICAgICAoMTI4KSAvLyBTb3VyY2UgVmVjdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBSUNfSVZSICAgICAgICAgKDI1NikgLy8gSVJRIFZlY3RvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQUlDX0ZWUiAgICAgICAgICgyNjApIC8vIEZJUSBWZWN0b3IgUmVnaXN0ZXINCisjZGVmaW5lIEFJQ19JU1IgICAgICAgICAoMjY0KSAvLyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBSUNfSVBSICAgICAgICAgKDI2OCkgLy8gSW50ZXJydXB0IFBlbmRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFJQ19JTVIgICAgICAgICAoMjcyKSAvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQUlDX0NJU1IgICAgICAgICgyNzYpIC8vIENvcmUgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQUlDX0lFQ1IgICAgICAgICgyODgpIC8vIEludGVycnVwdCBFbmFibGUgQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQUlDX0lEQ1IgICAgICAgICgyOTIpIC8vIEludGVycnVwdCBEaXNhYmxlIENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIEFJQ19JQ0NSICAgICAgICAoMjk2KSAvLyBJbnRlcnJ1cHQgQ2xlYXIgQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQUlDX0lTQ1IgICAgICAgICgzMDApIC8vIEludGVycnVwdCBTZXQgQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQUlDX0VPSUNSICAgICAgICgzMDQpIC8vIEVuZCBvZiBJbnRlcnJ1cHQgQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQUlDX1NQVSAgICAgICAgICgzMDgpIC8vIFNwdXJpb3VzIFZlY3RvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQUlDX0RDUiAgICAgICAgICgzMTIpIC8vIERlYnVnIENvbnRyb2wgUmVnaXN0ZXIgKFByb3RlY3QpDQorI2RlZmluZSBBSUNfRkZFUiAgICAgICAgKDMyMCkgLy8gRmFzdCBGb3JjaW5nIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQUlDX0ZGRFIgICAgICAgICgzMjQpIC8vIEZhc3QgRm9yY2luZyBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBSUNfRkZTUiAgICAgICAgKDMyOCkgLy8gRmFzdCBGb3JjaW5nIFN0YXR1cyBSZWdpc3Rlcg0KKy8vIC0tLS0tLS0tIEFJQ19TTVIgOiAoQUlDIE9mZnNldDogMHgwKSBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQUlDX1BSSU9SICAgICAgICAgICAoMHg3IDw8ICAwKSAvLyAoQUlDKSBQcmlvcml0eSBMZXZlbA0KKyNkZWZpbmUgCUFUOTFDX0FJQ19QUklPUl9MT1dFU1QgICAgICAgICAgICAgICAoMHgwKSAvLyAoQUlDKSBMb3dlc3QgcHJpb3JpdHkgbGV2ZWwNCisjZGVmaW5lIAlBVDkxQ19BSUNfUFJJT1JfSElHSEVTVCAgICAgICAgICAgICAgKDB4NykgLy8gKEFJQykgSGlnaGVzdCBwcmlvcml0eSBsZXZlbA0KKyNkZWZpbmUgQVQ5MUNfQUlDX1NSQ1RZUEUgICAgICAgICAoMHgzIDw8ICA1KSAvLyAoQUlDKSBJbnRlcnJ1cHQgU291cmNlIFR5cGUNCisjZGVmaW5lIAlBVDkxQ19BSUNfU1JDVFlQRV9JTlRfSElHSF9MRVZFTCAgICAgICAoMHgwIDw8ICA1KSAvLyAoQUlDKSBJbnRlcm5hbCBTb3VyY2VzIENvZGUgTGFiZWwgSGlnaC1sZXZlbCBTZW5zaXRpdmUNCisjZGVmaW5lIAlBVDkxQ19BSUNfU1JDVFlQRV9FWFRfTE9XX0xFVkVMICAgICAgICAoMHgwIDw8ICA1KSAvLyAoQUlDKSBFeHRlcm5hbCBTb3VyY2VzIENvZGUgTGFiZWwgTG93LWxldmVsIFNlbnNpdGl2ZQ0KKyNkZWZpbmUgCUFUOTFDX0FJQ19TUkNUWVBFX0lOVF9QT1NJVElWRV9FREdFICAgICgweDEgPDwgIDUpIC8vIChBSUMpIEludGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBQb3NpdGl2ZSBFZGdlIHRyaWdnZXJlZA0KKyNkZWZpbmUgCUFUOTFDX0FJQ19TUkNUWVBFX0VYVF9ORUdBVElWRV9FREdFICAgICgweDEgPDwgIDUpIC8vIChBSUMpIEV4dGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBOZWdhdGl2ZSBFZGdlIHRyaWdnZXJlZA0KKyNkZWZpbmUgCUFUOTFDX0FJQ19TUkNUWVBFX0hJR0hfTEVWRUwgICAgICAgICAgICgweDIgPDwgIDUpIC8vIChBSUMpIEludGVybmFsIE9yIEV4dGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBIaWdoLWxldmVsIFNlbnNpdGl2ZQ0KKyNkZWZpbmUgCUFUOTFDX0FJQ19TUkNUWVBFX1BPU0lUSVZFX0VER0UgICAgICAgICgweDMgPDwgIDUpIC8vIChBSUMpIEludGVybmFsIE9yIEV4dGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBQb3NpdGl2ZSBFZGdlIHRyaWdnZXJlZA0KKy8vIC0tLS0tLS0tIEFJQ19DSVNSIDogKEFJQyBPZmZzZXQ6IDB4MTE0KSBBSUMgQ29yZSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQUlDX05GSVEgICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoQUlDKSBORklRIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfQUlDX05JUlEgICAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoQUlDKSBOSVJRIFN0YXR1cw0KKy8vIC0tLS0tLS0tIEFJQ19EQ1IgOiAoQUlDIE9mZnNldDogMHgxMzgpIEFJQyBEZWJ1ZyBDb250cm9sIFJlZ2lzdGVyIChQcm90ZWN0KSAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FJQ19EQ1JfUFJPVCAgICAgICAgKDB4MSA8PCAgMCkgLy8gKEFJQykgUHJvdGVjdGlvbiBNb2RlDQorI2RlZmluZSBBVDkxQ19BSUNfRENSX0dNU0sgICAgICAgICgweDEgPDwgIDEpIC8vIChBSUMpIEdlbmVyYWwgTWFzaw0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUGVyaXBoZXJhbCBETUEgQ29udHJvbGxlciAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19QREMgc3RydWN0dXJlICoqKiAqLw0KLSNkZWZpbmUgUERDX1JQUiAgICAgICAgICAgICAoIDAgKSAgICAgICAgLyogUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBQRENfUkNSICAgICAgICAgICAgICggNCApICAgICAgICAvKiBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBEQ19UUFIgICAgICAgICAgICAgKCA4ICkgICAgICAgIC8qIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBEQ19UQ1IgICAgICAgICAgICAgKCAxMiApICAgICAgIC8qIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBEQ19STlBSICAgICAgICAgICAgKCAxNiApICAgICAgIC8qIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBQRENfUk5DUiAgICAgICAgICAgICggMjAgKSAgICAgICAvKiBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUERDX1ROUFIgICAgICAgICAgICAoIDI0ICkgICAgICAgLyogVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBQRENfVE5DUiAgICAgICAgICAgICggMjggKSAgICAgICAvKiBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBEQ19QVENSICAgICAgICAgICAgKCAzMiApICAgICAgIC8qIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBQRENfUFRTUiAgICAgICAgICAgICggMzYgKSAgICAgICAvKiBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotLyogLS0tLS0tLS0gUERDX1BUQ1IgOiAoUERDIE9mZnNldDogMHgyMCkgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1BEQ19SWFRFTiAgICAgKCAweDEgPDwgMCApIC8qIChQREMpIFJlY2VpdmVyIFRyYW5zZmVyIEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfUERDX1JYVERJUyAgICAoIDB4MSA8PCAxICkgLyogKFBEQykgUmVjZWl2ZXIgVHJhbnNmZXIgRGlzYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfUERDX1RYVEVOICAgICAoIDB4MSA8PCA4ICkgLyogKFBEQykgVHJhbnNtaXR0ZXIgVHJhbnNmZXIgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19QRENfVFhURElTICAgICggMHgxIDw8IDkgKSAvKiAoUERDKSBUcmFuc21pdHRlciBUcmFuc2ZlciBEaXNhYmxlICovDQotLyogLS0tLS0tLS0gUERDX1BUU1IgOiAoUERDIE9mZnNldDogMHgyNCkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUGVyaXBoZXJhbCBETUEgQ29udHJvbGxlcg0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19QREMgc3RydWN0dXJlICoqKg0KKyNkZWZpbmUgUERDX1JQUiAgICAgICAgICggMCkgLy8gUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBQRENfUkNSICAgICAgICAgKCA0KSAvLyBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFBEQ19UUFIgICAgICAgICAoIDgpIC8vIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFBEQ19UQ1IgICAgICAgICAoMTIpIC8vIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFBEQ19STlBSICAgICAgICAoMTYpIC8vIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBQRENfUk5DUiAgICAgICAgKDIwKSAvLyBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgUERDX1ROUFIgICAgICAgICgyNCkgLy8gVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBQRENfVE5DUiAgICAgICAgKDI4KSAvLyBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFBEQ19QVENSICAgICAgICAoMzIpIC8vIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBQRENfUFRTUiAgICAgICAgKDM2KSAvLyBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorLy8gLS0tLS0tLS0gUERDX1BUQ1IgOiAoUERDIE9mZnNldDogMHgyMCkgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QRENfUlhURU4gICAgICAgICAgICgweDEgPDwgIDApIC8vIChQREMpIFJlY2VpdmVyIFRyYW5zZmVyIEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfUERDX1JYVERJUyAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoUERDKSBSZWNlaXZlciBUcmFuc2ZlciBEaXNhYmxlDQorI2RlZmluZSBBVDkxQ19QRENfVFhURU4gICAgICAgICAgICgweDEgPDwgIDgpIC8vIChQREMpIFRyYW5zbWl0dGVyIFRyYW5zZmVyIEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfUERDX1RYVERJUyAgICAgICAgICAoMHgxIDw8ICA5KSAvLyAoUERDKSBUcmFuc21pdHRlciBUcmFuc2ZlciBEaXNhYmxlDQorLy8gLS0tLS0tLS0gUERDX1BUU1IgOiAoUERDIE9mZnNldDogMHgyNCkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIERlYnVnIFVuaXQgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfREJHVSBzdHJ1Y3R1cmUgKioqICovDQotI2RlZmluZSBEQkdVX0NSICAgICAgICAgICAgICAgICAgICAgICAgKCAwICkgICAgICAgICAvKiBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBEQkdVX01SICAgICAgICAgICAgICAgICAgICAgICAgKCA0ICkgICAgICAgICAvKiBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBEQkdVX0lFUiAgICAgICAgICAgICAgICAgICAgICAgKCA4ICkgICAgICAgICAvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBEQkdVX0lEUiAgICAgICAgICAgICAgICAgICAgICAgKCAxMiApICAgICAgICAvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgREJHVV9JTVIgICAgICAgICAgICAgICAgICAgICAgICggMTYgKSAgICAgICAgLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIERCR1VfQ1NSICAgICAgICAgICAgICAgICAgICAgICAoIDIwICkgICAgICAgIC8qIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBEQkdVX1JIUiAgICAgICAgICAgICAgICAgICAgICAgKCAyNCApICAgICAgICAvKiBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyICovDQotI2RlZmluZSBEQkdVX1RIUiAgICAgICAgICAgICAgICAgICAgICAgKCAyOCApICAgICAgICAvKiBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyICovDQotI2RlZmluZSBEQkdVX0JSR1IgICAgICAgICAgICAgICAgICAgICAgKCAzMiApICAgICAgICAvKiBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyICovDQotI2RlZmluZSBEQkdVX0NJRFIgICAgICAgICAgICAgICAgICAgICAgKCA2NCApICAgICAgICAvKiBDaGlwIElEIFJlZ2lzdGVyICovDQotI2RlZmluZSBEQkdVX0VYSUQgICAgICAgICAgICAgICAgICAgICAgKCA2OCApICAgICAgICAvKiBDaGlwIElEIEV4dGVuc2lvbiBSZWdpc3RlciAqLw0KLSNkZWZpbmUgREJHVV9GTlRSICAgICAgICAgICAgICAgICAgICAgICggNzIgKSAgICAgICAgLyogRm9yY2UgTlRSU1QgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIERCR1VfUlBSICAgICAgICAgICAgICAgICAgICAgICAoIDI1NiApICAgICAgIC8qIFJlY2VpdmUgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgREJHVV9SQ1IgICAgICAgICAgICAgICAgICAgICAgICggMjYwICkgICAgICAgLyogUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBEQkdVX1RQUiAgICAgICAgICAgICAgICAgICAgICAgKCAyNjQgKSAgICAgICAvKiBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBEQkdVX1RDUiAgICAgICAgICAgICAgICAgICAgICAgKCAyNjggKSAgICAgICAvKiBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBEQkdVX1JOUFIgICAgICAgICAgICAgICAgICAgICAgKCAyNzIgKSAgICAgICAvKiBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgREJHVV9STkNSICAgICAgICAgICAgICAgICAgICAgICggMjc2ICkgICAgICAgLyogUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIERCR1VfVE5QUiAgICAgICAgICAgICAgICAgICAgICAoIDI4MCApICAgICAgIC8qIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgREJHVV9UTkNSICAgICAgICAgICAgICAgICAgICAgICggMjg0ICkgICAgICAgLyogVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBEQkdVX1BUQ1IgICAgICAgICAgICAgICAgICAgICAgKCAyODggKSAgICAgICAvKiBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgREJHVV9QVFNSICAgICAgICAgICAgICAgICAgICAgICggMjkyICkgICAgICAgLyogUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLS8qIC0tLS0tLS0tIERCR1VfQ1IgOiAoREJHVSBPZmZzZXQ6IDB4MCkgRGVidWcgVW5pdCBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19VU19SU1RSWCAgICAgICAgICAgICAgICAgKCAweDEgPDwgMiApICAvKiAoREJHVSkgUmVzZXQgUmVjZWl2ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1JTVFRYICAgICAgICAgICAgICAgICAoIDB4MSA8PCAzICkgIC8qIChEQkdVKSBSZXNldCBUcmFuc21pdHRlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfUlhFTiAgICAgICAgICAgICAgICAgICggMHgxIDw8IDQgKSAgLyogKERCR1UpIFJlY2VpdmVyIEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfUlhESVMgICAgICAgICAgICAgICAgICggMHgxIDw8IDUgKSAgLyogKERCR1UpIFJlY2VpdmVyIERpc2FibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1RYRU4gICAgICAgICAgICAgICAgICAoIDB4MSA8PCA2ICkgIC8qIChEQkdVKSBUcmFuc21pdHRlciBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1RYRElTICAgICAgICAgICAgICAgICAoIDB4MSA8PCA3ICkgIC8qIChEQkdVKSBUcmFuc21pdHRlciBEaXNhYmxlICovDQotI2RlZmluZSBBVDkxQ19VU19SU1RTVEEgICAgICAgICAgICAgICAgKCAweDEgPDwgOCApICAvKiAoREJHVSkgUmVzZXQgU3RhdHVzIEJpdHMgKi8NCi0vKiAtLS0tLS0tLSBEQkdVX01SIDogKERCR1UgT2Zmc2V0OiAweDQpIERlYnVnIFVuaXQgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfUEFSICAgICAgICAgICAgICAgICAgICggMHg3IDw8IDkgKSAgLyogKERCR1UpIFBhcml0eSB0eXBlICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfUEFSX0VWRU4gICAgICAgICAgKCAweDAgPDwgOSApICAvKiAoREJHVSkgRXZlbiBQYXJpdHkgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19QQVJfT0REICAgICAgICAgICAoIDB4MSA8PCA5ICkgIC8qIChEQkdVKSBPZGQgUGFyaXR5ICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfUEFSX1NQQUNFICAgICAgICAgKCAweDIgPDwgOSApICAvKiAoREJHVSkgUGFyaXR5IGZvcmNlZCB0byAwIChTcGFjZSkgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19QQVJfTUFSSyAgICAgICAgICAoIDB4MyA8PCA5ICkgIC8qIChEQkdVKSBQYXJpdHkgZm9yY2VkIHRvIDEgKE1hcmspICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfUEFSX05PTkUgICAgICAgICAgKCAweDQgPDwgOSApICAvKiAoREJHVSkgTm8gUGFyaXR5ICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfUEFSX01VTFRJX0RST1AgICAgKCAweDYgPDwgOSApICAvKiAoREJHVSkgTXVsdGktZHJvcCBtb2RlICovDQotI2RlZmluZSBBVDkxQ19VU19DSE1PREUgICAgICAgICAgICAgICAgKCAweDMgPDwgMTQgKSAvKiAoREJHVSkgQ2hhbm5lbCBNb2RlICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfQ0hNT0RFX05PUk1BTCAgICAgKCAweDAgPDwgMTQgKSAvKiAoREJHVSkgTm9ybWFsIE1vZGU6IFRoZSBVU0FSVCBjaGFubmVsIG9wZXJhdGVzIGFzIGFuIFJYL1RYIFVTQVJULiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX0NITU9ERV9BVVRPICAgICAgICggMHgxIDw8IDE0ICkgLyogKERCR1UpIEF1dG9tYXRpYyBFY2hvOiBSZWNlaXZlciBEYXRhIElucHV0IGlzIGNvbm5lY3RlZCB0byB0aGUgVFhEIHBpbi4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19DSE1PREVfTE9DQUwgICAgICAoIDB4MiA8PCAxNCApIC8qIChEQkdVKSBMb2NhbCBMb29wYmFjazogVHJhbnNtaXR0ZXIgT3V0cHV0IFNpZ25hbCBpcyBjb25uZWN0ZWQgdG8gUmVjZWl2ZXIgSW5wdXQgU2lnbmFsLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX0NITU9ERV9SRU1PVEUgICAgICggMHgzIDw8IDE0ICkgLyogKERCR1UpIFJlbW90ZSBMb29wYmFjazogUlhEIHBpbiBpcyBpbnRlcm5hbGx5IGNvbm5lY3RlZCB0byBUWEQgcGluLiAqLw0KLS8qIC0tLS0tLS0tIERCR1VfSUVSIDogKERCR1UgT2Zmc2V0OiAweDgpIERlYnVnIFVuaXQgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfUlhSRFkgICAgICAgICAgICAgICAgICggMHgxIDw8IDAgKSAgLyogKERCR1UpIFJYUkRZIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfVFhSRFkgICAgICAgICAgICAgICAgICggMHgxIDw8IDEgKSAgLyogKERCR1UpIFRYUkRZIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfRU5EUlggICAgICAgICAgICAgICAgICggMHgxIDw8IDMgKSAgLyogKERCR1UpIEVuZCBvZiBSZWNlaXZlIFRyYW5zZmVyIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfRU5EVFggICAgICAgICAgICAgICAgICggMHgxIDw8IDQgKSAgLyogKERCR1UpIEVuZCBvZiBUcmFuc21pdCBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX09WUkUgICAgICAgICAgICAgICAgICAoIDB4MSA8PCA1ICkgIC8qIChEQkdVKSBPdmVycnVuIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfRlJBTUUgICAgICAgICAgICAgICAgICggMHgxIDw8IDYgKSAgLyogKERCR1UpIEZyYW1pbmcgRXJyb3IgSW50ZXJydXB0ICovDQotI2RlZmluZSBBVDkxQ19VU19QQVJFICAgICAgICAgICAgICAgICAgKCAweDEgPDwgNyApICAvKiAoREJHVSkgUGFyaXR5IEVycm9yIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfVFhFTVBUWSAgICAgICAgICAgICAgICggMHgxIDw8IDkgKSAgLyogKERCR1UpIFRYRU1QVFkgSW50ZXJydXB0ICovDQotI2RlZmluZSBBVDkxQ19VU19UWEJVRkUgICAgICAgICAgICAgICAgKCAweDEgPDwgMTEgKSAvKiAoREJHVSkgVFhCVUZFIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfUlhCVUZGICAgICAgICAgICAgICAgICggMHgxIDw8IDEyICkgLyogKERCR1UpIFJYQlVGRiBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX0NPTU1fVFggICAgICAgICAgICAgICAoIDB4MSA8PCAzMCApIC8qIChEQkdVKSBDT01NX1RYIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfQ09NTV9SWCAgICAgICAgICAgICAgICggMHgxIDw8IDMxICkgLyogKERCR1UpIENPTU1fUlggSW50ZXJydXB0ICovDQotLyogLS0tLS0tLS0gREJHVV9JRFIgOiAoREJHVSBPZmZzZXQ6IDB4YykgRGVidWcgVW5pdCBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIERCR1VfSU1SIDogKERCR1UgT2Zmc2V0OiAweDEwKSBEZWJ1ZyBVbml0IEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gREJHVV9DU1IgOiAoREJHVSBPZmZzZXQ6IDB4MTQpIERlYnVnIFVuaXQgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBEQkdVX0ZOVFIgOiAoREJHVSBPZmZzZXQ6IDB4NDgpIERlYnVnIFVuaXQgRk9SQ0VfTlRSU1QgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1VTX0ZPUkNFX05UUlNUICAgICggMHgxIDw8IDAgKSAgLyogKERCR1UpIEZvcmNlIE5UUlNUIGluIEpUQUcgKi8NCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIERlYnVnIFVuaXQNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfREJHVSBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBEQkdVX0NSICAgICAgICAgKCAwKSAvLyBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBEQkdVX01SICAgICAgICAgKCA0KSAvLyBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBEQkdVX0lFUiAgICAgICAgKCA4KSAvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBEQkdVX0lEUiAgICAgICAgKDEyKSAvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgREJHVV9JTVIgICAgICAgICgxNikgLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIERCR1VfQ1NSICAgICAgICAoMjApIC8vIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBEQkdVX1JIUiAgICAgICAgKDI0KSAvLyBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBEQkdVX1RIUiAgICAgICAgKDI4KSAvLyBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBEQkdVX0JSR1IgICAgICAgKDMyKSAvLyBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBEQkdVX0NJRFIgICAgICAgKDY0KSAvLyBDaGlwIElEIFJlZ2lzdGVyDQorI2RlZmluZSBEQkdVX0VYSUQgICAgICAgKDY4KSAvLyBDaGlwIElEIEV4dGVuc2lvbiBSZWdpc3Rlcg0KKyNkZWZpbmUgREJHVV9GTlRSICAgICAgICg3MikgLy8gRm9yY2UgTlRSU1QgUmVnaXN0ZXINCisjZGVmaW5lIERCR1VfUlBSICAgICAgICAoMjU2KSAvLyBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIERCR1VfUkNSICAgICAgICAoMjYwKSAvLyBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIERCR1VfVFBSICAgICAgICAoMjY0KSAvLyBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBEQkdVX1RDUiAgICAgICAgKDI2OCkgLy8gVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgREJHVV9STlBSICAgICAgICgyNzIpIC8vIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBEQkdVX1JOQ1IgICAgICAgKDI3NikgLy8gUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIERCR1VfVE5QUiAgICAgICAoMjgwKSAvLyBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIERCR1VfVE5DUiAgICAgICAoMjg0KSAvLyBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIERCR1VfUFRDUiAgICAgICAoMjg4KSAvLyBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgREJHVV9QVFNSICAgICAgICgyOTIpIC8vIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisvLyAtLS0tLS0tLSBEQkdVX0NSIDogKERCR1UgT2Zmc2V0OiAweDApIERlYnVnIFVuaXQgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VTX1JTVFJYICAgICAgICAgICAgKDB4MSA8PCAgMikgLy8gKERCR1UpIFJlc2V0IFJlY2VpdmVyDQorI2RlZmluZSBBVDkxQ19VU19SU1RUWCAgICAgICAgICAgICgweDEgPDwgIDMpIC8vIChEQkdVKSBSZXNldCBUcmFuc21pdHRlcg0KKyNkZWZpbmUgQVQ5MUNfVVNfUlhFTiAgICAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoREJHVSkgUmVjZWl2ZXIgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19VU19SWERJUyAgICAgICAgICAgICgweDEgPDwgIDUpIC8vIChEQkdVKSBSZWNlaXZlciBEaXNhYmxlDQorI2RlZmluZSBBVDkxQ19VU19UWEVOICAgICAgICAgICAgICgweDEgPDwgIDYpIC8vIChEQkdVKSBUcmFuc21pdHRlciBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1VTX1RYRElTICAgICAgICAgICAgKDB4MSA8PCAgNykgLy8gKERCR1UpIFRyYW5zbWl0dGVyIERpc2FibGUNCisjZGVmaW5lIEFUOTFDX1VTX1JTVFNUQSAgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKERCR1UpIFJlc2V0IFN0YXR1cyBCaXRzDQorLy8gLS0tLS0tLS0gREJHVV9NUiA6IChEQkdVIE9mZnNldDogMHg0KSBEZWJ1ZyBVbml0IE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VU19QQVIgICAgICAgICAgICAgICgweDcgPDwgIDkpIC8vIChEQkdVKSBQYXJpdHkgdHlwZQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1BBUl9FVkVOICAgICAgICAgICAgICAgICAoMHgwIDw8ICA5KSAvLyAoREJHVSkgRXZlbiBQYXJpdHkNCisjZGVmaW5lIAlBVDkxQ19VU19QQVJfT0REICAgICAgICAgICAgICAgICAgKDB4MSA8PCAgOSkgLy8gKERCR1UpIE9kZCBQYXJpdHkNCisjZGVmaW5lIAlBVDkxQ19VU19QQVJfU1BBQ0UgICAgICAgICAgICAgICAgKDB4MiA8PCAgOSkgLy8gKERCR1UpIFBhcml0eSBmb3JjZWQgdG8gMCAoU3BhY2UpDQorI2RlZmluZSAJQVQ5MUNfVVNfUEFSX01BUksgICAgICAgICAgICAgICAgICgweDMgPDwgIDkpIC8vIChEQkdVKSBQYXJpdHkgZm9yY2VkIHRvIDEgKE1hcmspDQorI2RlZmluZSAJQVQ5MUNfVVNfUEFSX05PTkUgICAgICAgICAgICAgICAgICgweDQgPDwgIDkpIC8vIChEQkdVKSBObyBQYXJpdHkNCisjZGVmaW5lIAlBVDkxQ19VU19QQVJfTVVMVElfRFJPUCAgICAgICAgICAgKDB4NiA8PCAgOSkgLy8gKERCR1UpIE11bHRpLWRyb3AgbW9kZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfQ0hNT0RFICAgICAgICAgICAoMHgzIDw8IDE0KSAvLyAoREJHVSkgQ2hhbm5lbCBNb2RlDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0hNT0RFX05PUk1BTCAgICAgICAgICAgICAgICgweDAgPDwgMTQpIC8vIChEQkdVKSBOb3JtYWwgTW9kZTogVGhlIFVTQVJUIGNoYW5uZWwgb3BlcmF0ZXMgYXMgYW4gUlgvVFggVVNBUlQuDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0hNT0RFX0FVVE8gICAgICAgICAgICAgICAgICgweDEgPDwgMTQpIC8vIChEQkdVKSBBdXRvbWF0aWMgRWNobzogUmVjZWl2ZXIgRGF0YSBJbnB1dCBpcyBjb25uZWN0ZWQgdG8gdGhlIFRYRCBwaW4uDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0hNT0RFX0xPQ0FMICAgICAgICAgICAgICAgICgweDIgPDwgMTQpIC8vIChEQkdVKSBMb2NhbCBMb29wYmFjazogVHJhbnNtaXR0ZXIgT3V0cHV0IFNpZ25hbCBpcyBjb25uZWN0ZWQgdG8gUmVjZWl2ZXIgSW5wdXQgU2lnbmFsLg0KKyNkZWZpbmUgCUFUOTFDX1VTX0NITU9ERV9SRU1PVEUgICAgICAgICAgICAgICAoMHgzIDw8IDE0KSAvLyAoREJHVSkgUmVtb3RlIExvb3BiYWNrOiBSWEQgcGluIGlzIGludGVybmFsbHkgY29ubmVjdGVkIHRvIFRYRCBwaW4uDQorLy8gLS0tLS0tLS0gREJHVV9JRVIgOiAoREJHVSBPZmZzZXQ6IDB4OCkgRGVidWcgVW5pdCBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVVNfUlhSRFkgICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoREJHVSkgUlhSRFkgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19UWFJEWSAgICAgICAgICAgICgweDEgPDwgIDEpIC8vIChEQkdVKSBUWFJEWSBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX0VORFJYICAgICAgICAgICAgKDB4MSA8PCAgMykgLy8gKERCR1UpIEVuZCBvZiBSZWNlaXZlIFRyYW5zZmVyIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfRU5EVFggICAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoREJHVSkgRW5kIG9mIFRyYW5zbWl0IEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfT1ZSRSAgICAgICAgICAgICAoMHgxIDw8ICA1KSAvLyAoREJHVSkgT3ZlcnJ1biBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX0ZSQU1FICAgICAgICAgICAgKDB4MSA8PCAgNikgLy8gKERCR1UpIEZyYW1pbmcgRXJyb3IgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19QQVJFICAgICAgICAgICAgICgweDEgPDwgIDcpIC8vIChEQkdVKSBQYXJpdHkgRXJyb3IgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19UWEVNUFRZICAgICAgICAgICgweDEgPDwgIDkpIC8vIChEQkdVKSBUWEVNUFRZIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfVFhCVUZFICAgICAgICAgICAoMHgxIDw8IDExKSAvLyAoREJHVSkgVFhCVUZFIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfUlhCVUZGICAgICAgICAgICAoMHgxIDw8IDEyKSAvLyAoREJHVSkgUlhCVUZGIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfQ09NTV9UWCAgICAgICAgICAoMHgxIDw8IDMwKSAvLyAoREJHVSkgQ09NTV9UWCBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX0NPTU1fUlggICAgICAgICAgKDB4MSA8PCAzMSkgLy8gKERCR1UpIENPTU1fUlggSW50ZXJydXB0DQorLy8gLS0tLS0tLS0gREJHVV9JRFIgOiAoREJHVSBPZmZzZXQ6IDB4YykgRGVidWcgVW5pdCBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBEQkdVX0lNUiA6IChEQkdVIE9mZnNldDogMHgxMCkgRGVidWcgVW5pdCBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBEQkdVX0NTUiA6IChEQkdVIE9mZnNldDogMHgxNCkgRGVidWcgVW5pdCBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBEQkdVX0ZOVFIgOiAoREJHVSBPZmZzZXQ6IDB4NDgpIERlYnVnIFVuaXQgRk9SQ0VfTlRSU1QgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VU19GT1JDRV9OVFJTVCAgICAgICgweDEgPDwgIDApIC8vIChEQkdVKSBGb3JjZSBOVFJTVCBpbiBKVEFHDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQYXJhbGxlbCBJbnB1dCBPdXRwdXQgQ29udHJvbGVyICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1BJTyBzdHJ1Y3R1cmUgKioqICovDQotI2RlZmluZSBQSU9fUEVSICAgICAgKCAwICkgICAvKiBQSU8gRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBQSU9fUERSICAgICAgKCA0ICkgICAvKiBQSU8gRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUElPX1BTUiAgICAgICggOCApICAgLyogUElPIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUElPX09FUiAgICAgICggMTYgKSAgLyogT3V0cHV0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUElPX09EUiAgICAgICggMjAgKSAgLyogT3V0cHV0IERpc2FibGUgUmVnaXN0ZXJyICovDQotI2RlZmluZSBQSU9fT1NSICAgICAgKCAyNCApICAvKiBPdXRwdXQgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBQSU9fSUZFUiAgICAgKCAzMiApICAvKiBJbnB1dCBGaWx0ZXIgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBQSU9fSUZEUiAgICAgKCAzNiApICAvKiBJbnB1dCBGaWx0ZXIgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUElPX0lGU1IgICAgICggNDAgKSAgLyogSW5wdXQgRmlsdGVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUElPX1NPRFIgICAgICggNDggKSAgLyogU2V0IE91dHB1dCBEYXRhIFJlZ2lzdGVyICovDQotI2RlZmluZSBQSU9fQ09EUiAgICAgKCA1MiApICAvKiBDbGVhciBPdXRwdXQgRGF0YSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUElPX09EU1IgICAgICggNTYgKSAgLyogT3V0cHV0IERhdGEgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBQSU9fUERTUiAgICAgKCA2MCApICAvKiBQaW4gRGF0YSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBJT19JRVIgICAgICAoIDY0ICkgIC8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBJT19JRFIgICAgICAoIDY4ICkgIC8qIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBQSU9fSU1SICAgICAgKCA3MiApICAvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUElPX0lTUiAgICAgICggNzYgKSAgLyogSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUElPX01ERVIgICAgICggODAgKSAgLyogTXVsdGktZHJpdmVyIEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUElPX01ERFIgICAgICggODQgKSAgLyogTXVsdGktZHJpdmVyIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBJT19NRFNSICAgICAoIDg4ICkgIC8qIE11bHRpLWRyaXZlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBJT19QUFVEUiAgICAoIDk2ICkgIC8qIFB1bGwtdXAgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUElPX1BQVUVSICAgICggMTAwICkgLyogUHVsbC11cCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBJT19QUFVTUiAgICAoIDEwNCApIC8qIFB1bGwtdXAgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBQSU9fQVNSICAgICAgKCAxMTIgKSAvKiBTZWxlY3QgQSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUElPX0JTUiAgICAgICggMTE2ICkgLyogU2VsZWN0IEIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBJT19BQlNSICAgICAoIDEyMCApIC8qIEFCIFNlbGVjdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBJT19PV0VSICAgICAoIDE2MCApIC8qIE91dHB1dCBXcml0ZSBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBJT19PV0RSICAgICAoIDE2NCApIC8qIE91dHB1dCBXcml0ZSBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBQSU9fT1dTUiAgICAgKCAxNjggKSAvKiBPdXRwdXQgV3JpdGUgU3RhdHVzIFJlZ2lzdGVyICovDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQYXJhbGxlbCBJbnB1dCBPdXRwdXQgQ29udHJvbGVyDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1BJTyBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBQSU9fUEVSICAgICAgICAgKCAwKSAvLyBQSU8gRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBQSU9fUERSICAgICAgICAgKCA0KSAvLyBQSU8gRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX1BTUiAgICAgICAgICggOCkgLy8gUElPIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX09FUiAgICAgICAgICgxNikgLy8gT3V0cHV0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX09EUiAgICAgICAgICgyMCkgLy8gT3V0cHV0IERpc2FibGUgUmVnaXN0ZXJyDQorI2RlZmluZSBQSU9fT1NSICAgICAgICAgKDI0KSAvLyBPdXRwdXQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBQSU9fSUZFUiAgICAgICAgKDMyKSAvLyBJbnB1dCBGaWx0ZXIgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBQSU9fSUZEUiAgICAgICAgKDM2KSAvLyBJbnB1dCBGaWx0ZXIgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX0lGU1IgICAgICAgICg0MCkgLy8gSW5wdXQgRmlsdGVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX1NPRFIgICAgICAgICg0OCkgLy8gU2V0IE91dHB1dCBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBQSU9fQ09EUiAgICAgICAgKDUyKSAvLyBDbGVhciBPdXRwdXQgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX09EU1IgICAgICAgICg1NikgLy8gT3V0cHV0IERhdGEgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBQSU9fUERTUiAgICAgICAgKDYwKSAvLyBQaW4gRGF0YSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFBJT19JRVIgICAgICAgICAoNjQpIC8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFBJT19JRFIgICAgICAgICAoNjgpIC8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBQSU9fSU1SICAgICAgICAgKDcyKSAvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX0lTUiAgICAgICAgICg3NikgLy8gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX01ERVIgICAgICAgICg4MCkgLy8gTXVsdGktZHJpdmVyIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX01ERFIgICAgICAgICg4NCkgLy8gTXVsdGktZHJpdmVyIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIFBJT19NRFNSICAgICAgICAoODgpIC8vIE11bHRpLWRyaXZlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFBJT19QUFVEUiAgICAgICAoOTYpIC8vIFB1bGwtdXAgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX1BQVUVSICAgICAgICgxMDApIC8vIFB1bGwtdXAgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBQSU9fUFBVU1IgICAgICAgKDEwNCkgLy8gUHVsbC11cCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFBJT19BU1IgICAgICAgICAoMTEyKSAvLyBTZWxlY3QgQSBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX0JTUiAgICAgICAgICgxMTYpIC8vIFNlbGVjdCBCIFJlZ2lzdGVyDQorI2RlZmluZSBQSU9fQUJTUiAgICAgICAgKDEyMCkgLy8gQUIgU2VsZWN0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX09XRVIgICAgICAgICgxNjApIC8vIE91dHB1dCBXcml0ZSBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFBJT19PV0RSICAgICAgICAoMTY0KSAvLyBPdXRwdXQgV3JpdGUgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX09XU1IgICAgICAgICgxNjgpIC8vIE91dHB1dCBXcml0ZSBTdGF0dXMgUmVnaXN0ZXINCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIENsb2NrIEdlbmVyYXRvciBDb250cm9sZXIgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfQ0tHUiBzdHJ1Y3R1cmUgKioqICovDQotI2RlZmluZSBDS0dSX01PUiAgICAgICAgICAgICAgICAgICAgICggMCApICAgICAgICAgICAvKiBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIENLR1JfTUNGUiAgICAgICAgICAgICAgICAgICAgKCA0ICkgICAgICAgICAgIC8qIE1haW4gQ2xvY2sgIEZyZXF1ZW5jeSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQ0tHUl9QTExSICAgICAgICAgICAgICAgICAgICAoIDEyICkgICAgICAgICAgLyogUExMIFJlZ2lzdGVyICovDQotLyogLS0tLS0tLS0gQ0tHUl9NT1IgOiAoQ0tHUiBPZmZzZXQ6IDB4MCkgTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19DS0dSX01PU0NFTiAgICAgICAgICAgICggMHgxIDw8IDAgKSAgICAvKiAoQ0tHUikgTWFpbiBPc2NpbGxhdG9yIEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0tHUl9PU0NCWVBBU1MgICAgICAgICAoIDB4MSA8PCAxICkgICAgLyogKENLR1IpIE1haW4gT3NjaWxsYXRvciBCeXBhc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0NLR1JfT1NDT1VOVCAgICAgICAgICAgKCAweEZGIDw8IDggKSAgIC8qIChDS0dSKSBNYWluIE9zY2lsbGF0b3IgU3RhcnQtdXAgVGltZSAqLw0KLS8qIC0tLS0tLS0tIENLR1JfTUNGUiA6IChDS0dSIE9mZnNldDogMHg0KSBNYWluIENsb2NrIEZyZXF1ZW5jeSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0tHUl9NQUlORiAgICAgICAgICAgICAoIDB4RkZGRiA8PCAwICkgLyogKENLR1IpIE1haW4gQ2xvY2sgRnJlcXVlbmN5ICovDQotI2RlZmluZSBBVDkxQ19DS0dSX01BSU5SRFkgICAgICAgICAgICggMHgxIDw8IDE2ICkgICAvKiAoQ0tHUikgTWFpbiBDbG9jayBSZWFkeSAqLw0KLS8qIC0tLS0tLS0tIENLR1JfUExMUiA6IChDS0dSIE9mZnNldDogMHhjKSBQTEwgQiBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0tHUl9ESVYgICAgICAgICAgICAgICAoIDB4RkYgPDwgMCApICAgLyogKENLR1IpIERpdmlkZXIgU2VsZWN0ZWQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19DS0dSX0RJVl8wICAgICAgICAgKCAweDAgKSAgICAgICAgIC8qIChDS0dSKSBEaXZpZGVyIG91dHB1dCBpcyAwICovDQotI2RlZmluZSAgICAgQVQ5MUNfQ0tHUl9ESVZfQllQQVNTICAgICggMHgxICkgICAgICAgICAvKiAoQ0tHUikgRGl2aWRlciBpcyBieXBhc3NlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0tHUl9QTExDT1VOVCAgICAgICAgICAoIDB4M0YgPDwgOCApICAgLyogKENLR1IpIFBMTCBDb3VudGVyICovDQotI2RlZmluZSBBVDkxQ19DS0dSX09VVCAgICAgICAgICAgICAgICggMHgzIDw8IDE0ICkgICAvKiAoQ0tHUikgUExMIE91dHB1dCBGcmVxdWVuY3kgUmFuZ2UgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19DS0dSX09VVF8wICAgICAgICAgKCAweDAgPDwgMTQgKSAgIC8qIChDS0dSKSBQbGVhc2UgcmVmZXIgdG8gdGhlIFBMTCBkYXRhc2hlZXQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19DS0dSX09VVF8xICAgICAgICAgKCAweDEgPDwgMTQgKSAgIC8qIChDS0dSKSBQbGVhc2UgcmVmZXIgdG8gdGhlIFBMTCBkYXRhc2hlZXQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19DS0dSX09VVF8yICAgICAgICAgKCAweDIgPDwgMTQgKSAgIC8qIChDS0dSKSBQbGVhc2UgcmVmZXIgdG8gdGhlIFBMTCBkYXRhc2hlZXQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19DS0dSX09VVF8zICAgICAgICAgKCAweDMgPDwgMTQgKSAgIC8qIChDS0dSKSBQbGVhc2UgcmVmZXIgdG8gdGhlIFBMTCBkYXRhc2hlZXQgKi8NCi0jZGVmaW5lIEFUOTFDX0NLR1JfTVVMICAgICAgICAgICAgICAgKCAweDdGRiA8PCAxNiApIC8qIChDS0dSKSBQTEwgTXVsdGlwbGllciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0tHUl9VU0JESVYgICAgICAgICAgICAoIDB4MyA8PCAyOCApICAgLyogKENLR1IpIERpdmlkZXIgZm9yIFVTQiBDbG9ja3MgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19DS0dSX1VTQkRJVl8wICAgICAgKCAweDAgPDwgMjggKSAgIC8qIChDS0dSKSBEaXZpZGVyIG91dHB1dCBpcyBQTEwgY2xvY2sgb3V0cHV0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfQ0tHUl9VU0JESVZfMSAgICAgICggMHgxIDw8IDI4ICkgICAvKiAoQ0tHUikgRGl2aWRlciBvdXRwdXQgaXMgUExMIGNsb2NrIG91dHB1dCBkaXZpZGVkIGJ5IDIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19DS0dSX1VTQkRJVl8yICAgICAgKCAweDIgPDwgMjggKSAgIC8qIChDS0dSKSBEaXZpZGVyIG91dHB1dCBpcyBQTEwgY2xvY2sgb3V0cHV0IGRpdmlkZWQgYnkgNCAqLw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQ2xvY2sgR2VuZXJhdG9yIENvbnRyb2xlcg0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19DS0dSIHN0cnVjdHVyZSAqKioNCisjZGVmaW5lIENLR1JfTU9SICAgICAgICAoIDApIC8vIE1haW4gT3NjaWxsYXRvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQ0tHUl9NQ0ZSICAgICAgICggNCkgLy8gTWFpbiBDbG9jayAgRnJlcXVlbmN5IFJlZ2lzdGVyDQorI2RlZmluZSBDS0dSX1BMTFIgICAgICAgKDEyKSAvLyBQTEwgUmVnaXN0ZXINCisvLyAtLS0tLS0tLSBDS0dSX01PUiA6IChDS0dSIE9mZnNldDogMHgwKSBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DS0dSX01PU0NFTiAgICAgICAgICgweDEgPDwgIDApIC8vIChDS0dSKSBNYWluIE9zY2lsbGF0b3IgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19DS0dSX09TQ0JZUEFTUyAgICAgICgweDEgPDwgIDEpIC8vIChDS0dSKSBNYWluIE9zY2lsbGF0b3IgQnlwYXNzDQorI2RlZmluZSBBVDkxQ19DS0dSX09TQ09VTlQgICAgICAgICgweEZGIDw8ICA4KSAvLyAoQ0tHUikgTWFpbiBPc2NpbGxhdG9yIFN0YXJ0LXVwIFRpbWUNCisvLyAtLS0tLS0tLSBDS0dSX01DRlIgOiAoQ0tHUiBPZmZzZXQ6IDB4NCkgTWFpbiBDbG9jayBGcmVxdWVuY3kgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DS0dSX01BSU5GICAgICAgICAgICgweEZGRkYgPDwgIDApIC8vIChDS0dSKSBNYWluIENsb2NrIEZyZXF1ZW5jeQ0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9NQUlOUkRZICAgICAgICAoMHgxIDw8IDE2KSAvLyAoQ0tHUikgTWFpbiBDbG9jayBSZWFkeQ0KKy8vIC0tLS0tLS0tIENLR1JfUExMUiA6IChDS0dSIE9mZnNldDogMHhjKSBQTEwgQiBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0NLR1JfRElWICAgICAgICAgICAgKDB4RkYgPDwgIDApIC8vIChDS0dSKSBEaXZpZGVyIFNlbGVjdGVkDQorI2RlZmluZSAJQVQ5MUNfQ0tHUl9ESVZfMCAgICAgICAgICAgICAgICAgICAgKDB4MCkgLy8gKENLR1IpIERpdmlkZXIgb3V0cHV0IGlzIDANCisjZGVmaW5lIAlBVDkxQ19DS0dSX0RJVl9CWVBBU1MgICAgICAgICAgICAgICAoMHgxKSAvLyAoQ0tHUikgRGl2aWRlciBpcyBieXBhc3NlZA0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9QTExDT1VOVCAgICAgICAoMHgzRiA8PCAgOCkgLy8gKENLR1IpIFBMTCBDb3VudGVyDQorI2RlZmluZSBBVDkxQ19DS0dSX09VVCAgICAgICAgICAgICgweDMgPDwgMTQpIC8vIChDS0dSKSBQTEwgT3V0cHV0IEZyZXF1ZW5jeSBSYW5nZQ0KKyNkZWZpbmUgCUFUOTFDX0NLR1JfT1VUXzAgICAgICAgICAgICAgICAgICAgICgweDAgPDwgMTQpIC8vIChDS0dSKSBQbGVhc2UgcmVmZXIgdG8gdGhlIFBMTCBkYXRhc2hlZXQNCisjZGVmaW5lIAlBVDkxQ19DS0dSX09VVF8xICAgICAgICAgICAgICAgICAgICAoMHgxIDw8IDE0KSAvLyAoQ0tHUikgUGxlYXNlIHJlZmVyIHRvIHRoZSBQTEwgZGF0YXNoZWV0DQorI2RlZmluZSAJQVQ5MUNfQ0tHUl9PVVRfMiAgICAgICAgICAgICAgICAgICAgKDB4MiA8PCAxNCkgLy8gKENLR1IpIFBsZWFzZSByZWZlciB0byB0aGUgUExMIGRhdGFzaGVldA0KKyNkZWZpbmUgCUFUOTFDX0NLR1JfT1VUXzMgICAgICAgICAgICAgICAgICAgICgweDMgPDwgMTQpIC8vIChDS0dSKSBQbGVhc2UgcmVmZXIgdG8gdGhlIFBMTCBkYXRhc2hlZXQNCisjZGVmaW5lIEFUOTFDX0NLR1JfTVVMICAgICAgICAgICAgKDB4N0ZGIDw8IDE2KSAvLyAoQ0tHUikgUExMIE11bHRpcGxpZXINCisjZGVmaW5lIEFUOTFDX0NLR1JfVVNCRElWICAgICAgICAgKDB4MyA8PCAyOCkgLy8gKENLR1IpIERpdmlkZXIgZm9yIFVTQiBDbG9ja3MNCisjZGVmaW5lIAlBVDkxQ19DS0dSX1VTQkRJVl8wICAgICAgICAgICAgICAgICAgICAoMHgwIDw8IDI4KSAvLyAoQ0tHUikgRGl2aWRlciBvdXRwdXQgaXMgUExMIGNsb2NrIG91dHB1dA0KKyNkZWZpbmUgCUFUOTFDX0NLR1JfVVNCRElWXzEgICAgICAgICAgICAgICAgICAgICgweDEgPDwgMjgpIC8vIChDS0dSKSBEaXZpZGVyIG91dHB1dCBpcyBQTEwgY2xvY2sgb3V0cHV0IGRpdmlkZWQgYnkgMg0KKyNkZWZpbmUgCUFUOTFDX0NLR1JfVVNCRElWXzIgICAgICAgICAgICAgICAgICAgICgweDIgPDwgMjgpIC8vIChDS0dSKSBEaXZpZGVyIG91dHB1dCBpcyBQTEwgY2xvY2sgb3V0cHV0IGRpdmlkZWQgYnkgNA0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUG93ZXIgTWFuYWdlbWVudCBDb250cm9sZXIgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfUE1DIHN0cnVjdHVyZSAqKiogKi8NCi0jZGVmaW5lIFBNQ19TQ0VSICAgICAgICAgICggMCApICAgICAgICAgLyogU3lzdGVtIENsb2NrIEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUE1DX1NDRFIgICAgICAgICAgKCA0ICkgICAgICAgICAvKiBTeXN0ZW0gQ2xvY2sgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUE1DX1NDU1IgICAgICAgICAgKCA4ICkgICAgICAgICAvKiBTeXN0ZW0gQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBQTUNfUENFUiAgICAgICAgICAoIDE2ICkgICAgICAgIC8qIFBlcmlwaGVyYWwgQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBQTUNfUENEUiAgICAgICAgICAoIDIwICkgICAgICAgIC8qIFBlcmlwaGVyYWwgQ2xvY2sgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUE1DX1BDU1IgICAgICAgICAgKCAyNCApICAgICAgICAvKiBQZXJpcGhlcmFsIENsb2NrIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUE1DX01PUiAgICAgICAgICAgKCAzMiApICAgICAgICAvKiBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBNQ19NQ0ZSICAgICAgICAgICggMzYgKSAgICAgICAgLyogTWFpbiBDbG9jayAgRnJlcXVlbmN5IFJlZ2lzdGVyICovDQotI2RlZmluZSBQTUNfUExMUiAgICAgICAgICAoIDQ0ICkgICAgICAgIC8qIFBMTCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUE1DX01DS1IgICAgICAgICAgKCA0OCApICAgICAgICAvKiBNYXN0ZXIgQ2xvY2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBNQ19QQ0tSICAgICAgICAgICggNjQgKSAgICAgICAgLyogUHJvZ3JhbW1hYmxlIENsb2NrIFJlZ2lzdGVyICovDQotI2RlZmluZSBQTUNfSUVSICAgICAgICAgICAoIDk2ICkgICAgICAgIC8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBNQ19JRFIgICAgICAgICAgICggMTAwICkgICAgICAgLyogSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBNQ19TUiAgICAgICAgICAgICggMTA0ICkgICAgICAgLyogU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBQTUNfSU1SICAgICAgICAgICAoIDEwOCApICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotLyogLS0tLS0tLS0gUE1DX1NDRVIgOiAoUE1DIE9mZnNldDogMHgwKSBTeXN0ZW0gQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19QTUNfUENLICAgICAoIDB4MSA8PCAwICkgIC8qIChQTUMpIFByb2Nlc3NvciBDbG9jayAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1VEUCAgICAgKCAweDEgPDwgNyApICAvKiAoUE1DKSBVU0IgRGV2aWNlIFBvcnQgQ2xvY2sgKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19QQ0swICAgICggMHgxIDw8IDggKSAgLyogKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDSzEgICAgKCAweDEgPDwgOSApICAvKiAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0ICovDQotI2RlZmluZSBBVDkxQ19QTUNfUENLMiAgICAoIDB4MSA8PCAxMCApIC8qIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19QQ0szICAgICggMHgxIDw8IDExICkgLyogKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAqLw0KLS8qIC0tLS0tLS0tIFBNQ19TQ0RSIDogKFBNQyBPZmZzZXQ6IDB4NCkgU3lzdGVtIENsb2NrIERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBQTUNfU0NTUiA6IChQTUMgT2Zmc2V0OiAweDgpIFN5c3RlbSBDbG9jayBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBDS0dSX01PUiA6IChQTUMgT2Zmc2V0OiAweDIwKSBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBDS0dSX01DRlIgOiAoUE1DIE9mZnNldDogMHgyNCkgTWFpbiBDbG9jayBGcmVxdWVuY3kgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBDS0dSX1BMTFIgOiAoUE1DIE9mZnNldDogMHgyYykgUExMIEIgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBQTUNfTUNLUiA6IChQTUMgT2Zmc2V0OiAweDMwKSBNYXN0ZXIgQ2xvY2sgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19DU1MgICAgICAgICAgICAgICAgICggMHgzIDw8IDAgKSAvKiAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgU2VsZWN0aW9uICovDQotI2RlZmluZSAgICAgQVQ5MUNfUE1DX0NTU19TTE9XX0NMSyAgICAoIDB4MCApICAgICAgLyogKFBNQykgU2xvdyBDbG9jayBpcyBzZWxlY3RlZCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1BNQ19DU1NfTUFJTl9DTEsgICAgKCAweDEgKSAgICAgIC8qIChQTUMpIE1haW4gQ2xvY2sgaXMgc2VsZWN0ZWQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19QTUNfQ1NTX1BMTF9DTEsgICAgICggMHgzICkgICAgICAvKiAoUE1DKSBDbG9jayBmcm9tIFBMTCBpcyBzZWxlY3RlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1BSRVMgICAgICAgICAgICAgICAgKCAweDcgPDwgMiApIC8qIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBQcmVzY2FsZXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19QTUNfUFJFU19DTEsgICAgICAgICggMHgwIDw8IDIgKSAvKiAoUE1DKSBTZWxlY3RlZCBjbG9jayAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1BNQ19QUkVTX0NMS18yICAgICAgKCAweDEgPDwgMiApIC8qIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgMiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1BNQ19QUkVTX0NMS180ICAgICAgKCAweDIgPDwgMiApIC8qIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgNCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1BNQ19QUkVTX0NMS184ICAgICAgKCAweDMgPDwgMiApIC8qIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgOCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1BNQ19QUkVTX0NMS18xNiAgICAgKCAweDQgPDwgMiApIC8qIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgMTYgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19QTUNfUFJFU19DTEtfMzIgICAgICggMHg1IDw8IDIgKSAvKiAoUE1DKSBTZWxlY3RlZCBjbG9jayBkaXZpZGVkIGJ5IDMyICovDQotI2RlZmluZSAgICAgQVQ5MUNfUE1DX1BSRVNfQ0xLXzY0ICAgICAoIDB4NiA8PCAyICkgLyogKFBNQykgU2VsZWN0ZWQgY2xvY2sgZGl2aWRlZCBieSA2NCAqLw0KLS8qIC0tLS0tLS0tIFBNQ19QQ0tSIDogKFBNQyBPZmZzZXQ6IDB4NDApIFByb2dyYW1tYWJsZSBDbG9jayBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFBNQ19JRVIgOiAoUE1DIE9mZnNldDogMHg2MCkgUE1DIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19NT1NDUyAgICAgICAgICAgICAgICggMHgxIDw8IDAgKSAgLyogKFBNQykgTU9TQyBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzayAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX0xPQ0sgICAgICAgICAgICAgICAgKCAweDEgPDwgMiApICAvKiAoUE1DKSBQTEwgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sgKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19NQ0tSRFkgICAgICAgICAgICAgICggMHgxIDw8IDMgKSAgLyogKFBNQykgTUNLX1JEWSBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzayAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDSzBSRFkgICAgICAgICAgICAgKCAweDEgPDwgOCApICAvKiAoUE1DKSBQQ0swX1JEWSBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzayAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDSzFSRFkgICAgICAgICAgICAgKCAweDEgPDwgOSApICAvKiAoUE1DKSBQQ0sxX1JEWSBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzayAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDSzJSRFkgICAgICAgICAgICAgKCAweDEgPDwgMTAgKSAvKiAoUE1DKSBQQ0syX1JEWSBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzayAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDSzNSRFkgICAgICAgICAgICAgKCAweDEgPDwgMTEgKSAvKiAoUE1DKSBQQ0szX1JEWSBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzayAqLw0KLS8qIC0tLS0tLS0tIFBNQ19JRFIgOiAoUE1DIE9mZnNldDogMHg2NCkgUE1DIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gUE1DX1NSIDogKFBNQyBPZmZzZXQ6IDB4NjgpIFBNQyBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBQTUNfSU1SIDogKFBNQyBPZmZzZXQ6IDB4NmMpIFBNQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSAqLw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUG93ZXIgTWFuYWdlbWVudCBDb250cm9sZXINCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfUE1DIHN0cnVjdHVyZSAqKioNCisjZGVmaW5lIFBNQ19TQ0VSICAgICAgICAoIDApIC8vIFN5c3RlbSBDbG9jayBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFBNQ19TQ0RSICAgICAgICAoIDQpIC8vIFN5c3RlbSBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBQTUNfU0NTUiAgICAgICAgKCA4KSAvLyBTeXN0ZW0gQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBQTUNfUENFUiAgICAgICAgKDE2KSAvLyBQZXJpcGhlcmFsIENsb2NrIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUE1DX1BDRFIgICAgICAgICgyMCkgLy8gUGVyaXBoZXJhbCBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBQTUNfUENTUiAgICAgICAgKDI0KSAvLyBQZXJpcGhlcmFsIENsb2NrIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgUE1DX01PUiAgICAgICAgICgzMikgLy8gTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBQTUNfTUNGUiAgICAgICAgKDM2KSAvLyBNYWluIENsb2NrICBGcmVxdWVuY3kgUmVnaXN0ZXINCisjZGVmaW5lIFBNQ19QTExSICAgICAgICAoNDQpIC8vIFBMTCBSZWdpc3Rlcg0KKyNkZWZpbmUgUE1DX01DS1IgICAgICAgICg0OCkgLy8gTWFzdGVyIENsb2NrIFJlZ2lzdGVyDQorI2RlZmluZSBQTUNfUENLUiAgICAgICAgKDY0KSAvLyBQcm9ncmFtbWFibGUgQ2xvY2sgUmVnaXN0ZXINCisjZGVmaW5lIFBNQ19JRVIgICAgICAgICAoOTYpIC8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFBNQ19JRFIgICAgICAgICAoMTAwKSAvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUE1DX1NSICAgICAgICAgICgxMDQpIC8vIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgUE1DX0lNUiAgICAgICAgICgxMDgpIC8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorLy8gLS0tLS0tLS0gUE1DX1NDRVIgOiAoUE1DIE9mZnNldDogMHgwKSBTeXN0ZW0gQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDSyAgICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoUE1DKSBQcm9jZXNzb3IgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BNQ19VRFAgICAgICAgICAgICAgKDB4MSA8PCAgNykgLy8gKFBNQykgVVNCIERldmljZSBQb3J0IENsb2NrDQorI2RlZmluZSBBVDkxQ19QTUNfUENLMCAgICAgICAgICAgICgweDEgPDwgIDgpIC8vIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQNCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0sxICAgICAgICAgICAgKDB4MSA8PCAgOSkgLy8gKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dA0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDSzIgICAgICAgICAgICAoMHgxIDw8IDEwKSAvLyAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0DQorI2RlZmluZSBBVDkxQ19QTUNfUENLMyAgICAgICAgICAgICgweDEgPDwgMTEpIC8vIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQNCisvLyAtLS0tLS0tLSBQTUNfU0NEUiA6IChQTUMgT2Zmc2V0OiAweDQpIFN5c3RlbSBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFBNQ19TQ1NSIDogKFBNQyBPZmZzZXQ6IDB4OCkgU3lzdGVtIENsb2NrIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBDS0dSX01PUiA6IChQTUMgT2Zmc2V0OiAweDIwKSBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQ0tHUl9NQ0ZSIDogKFBNQyBPZmZzZXQ6IDB4MjQpIE1haW4gQ2xvY2sgRnJlcXVlbmN5IFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIENLR1JfUExMUiA6IChQTUMgT2Zmc2V0OiAweDJjKSBQTEwgQiBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQTUNfTUNLUiA6IChQTUMgT2Zmc2V0OiAweDMwKSBNYXN0ZXIgQ2xvY2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QTUNfQ1NTICAgICAgICAgICAgICgweDMgPDwgIDApIC8vIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19QTUNfQ1NTX1NMT1dfQ0xLICAgICAgICAgICAgICgweDApIC8vIChQTUMpIFNsb3cgQ2xvY2sgaXMgc2VsZWN0ZWQNCisjZGVmaW5lIAlBVDkxQ19QTUNfQ1NTX01BSU5fQ0xLICAgICAgICAgICAgICgweDEpIC8vIChQTUMpIE1haW4gQ2xvY2sgaXMgc2VsZWN0ZWQNCisjZGVmaW5lIAlBVDkxQ19QTUNfQ1NTX1BMTF9DTEsgICAgICAgICAgICAgICgweDMpIC8vIChQTUMpIENsb2NrIGZyb20gUExMIGlzIHNlbGVjdGVkDQorI2RlZmluZSBBVDkxQ19QTUNfUFJFUyAgICAgICAgICAgICgweDcgPDwgIDIpIC8vIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBQcmVzY2FsZXINCisjZGVmaW5lIAlBVDkxQ19QTUNfUFJFU19DTEsgICAgICAgICAgICAgICAgICAoMHgwIDw8ICAyKSAvLyAoUE1DKSBTZWxlY3RlZCBjbG9jaw0KKyNkZWZpbmUgCUFUOTFDX1BNQ19QUkVTX0NMS18yICAgICAgICAgICAgICAgICgweDEgPDwgIDIpIC8vIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgMg0KKyNkZWZpbmUgCUFUOTFDX1BNQ19QUkVTX0NMS180ICAgICAgICAgICAgICAgICgweDIgPDwgIDIpIC8vIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgNA0KKyNkZWZpbmUgCUFUOTFDX1BNQ19QUkVTX0NMS184ICAgICAgICAgICAgICAgICgweDMgPDwgIDIpIC8vIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgOA0KKyNkZWZpbmUgCUFUOTFDX1BNQ19QUkVTX0NMS18xNiAgICAgICAgICAgICAgICgweDQgPDwgIDIpIC8vIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgMTYNCisjZGVmaW5lIAlBVDkxQ19QTUNfUFJFU19DTEtfMzIgICAgICAgICAgICAgICAoMHg1IDw8ICAyKSAvLyAoUE1DKSBTZWxlY3RlZCBjbG9jayBkaXZpZGVkIGJ5IDMyDQorI2RlZmluZSAJQVQ5MUNfUE1DX1BSRVNfQ0xLXzY0ICAgICAgICAgICAgICAgKDB4NiA8PCAgMikgLy8gKFBNQykgU2VsZWN0ZWQgY2xvY2sgZGl2aWRlZCBieSA2NA0KKy8vIC0tLS0tLS0tIFBNQ19QQ0tSIDogKFBNQyBPZmZzZXQ6IDB4NDApIFByb2dyYW1tYWJsZSBDbG9jayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQTUNfSUVSIDogKFBNQyBPZmZzZXQ6IDB4NjApIFBNQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUE1DX01PU0NTICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoUE1DKSBNT1NDIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrDQorI2RlZmluZSBBVDkxQ19QTUNfTE9DSyAgICAgICAgICAgICgweDEgPDwgIDIpIC8vIChQTUMpIFBMTCBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzaw0KKyNkZWZpbmUgQVQ5MUNfUE1DX01DS1JEWSAgICAgICAgICAoMHgxIDw8ICAzKSAvLyAoUE1DKSBNQ0tfUkRZIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrDQorI2RlZmluZSBBVDkxQ19QTUNfUENLMFJEWSAgICAgICAgICgweDEgPDwgIDgpIC8vIChQTUMpIFBDSzBfUkRZIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrDQorI2RlZmluZSBBVDkxQ19QTUNfUENLMVJEWSAgICAgICAgICgweDEgPDwgIDkpIC8vIChQTUMpIFBDSzFfUkRZIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrDQorI2RlZmluZSBBVDkxQ19QTUNfUENLMlJEWSAgICAgICAgICgweDEgPDwgMTApIC8vIChQTUMpIFBDSzJfUkRZIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrDQorI2RlZmluZSBBVDkxQ19QTUNfUENLM1JEWSAgICAgICAgICgweDEgPDwgMTEpIC8vIChQTUMpIFBDSzNfUkRZIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrDQorLy8gLS0tLS0tLS0gUE1DX0lEUiA6IChQTUMgT2Zmc2V0OiAweDY0KSBQTUMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUE1DX1NSIDogKFBNQyBPZmZzZXQ6IDB4NjgpIFBNQyBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUE1DX0lNUiA6IChQTUMgT2Zmc2V0OiAweDZjKSBQTUMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBSZXNldCBDb250cm9sbGVyIEludGVyZmFjZSAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19SU1RDIHN0cnVjdHVyZSAqKiogKi8NCi0jZGVmaW5lIFJTVENfUkNSICAgICAgICAgICAgICAgICAgICAgICAgICAoIDAgKSAgICAgICAgICAvKiBSZXNldCBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBSU1RDX1JTUiAgICAgICAgICAgICAgICAgICAgICAgICAgKCA0ICkgICAgICAgICAgLyogUmVzZXQgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBSU1RDX1JNUiAgICAgICAgICAgICAgICAgICAgICAgICAgKCA4ICkgICAgICAgICAgLyogUmVzZXQgTW9kZSBSZWdpc3RlciAqLw0KLS8qIC0tLS0tLS0tIFJTVENfUkNSIDogKFJTVEMgT2Zmc2V0OiAweDApIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1JTVENfUFJPQ1JTVCAgICAgICAgICAgICAgICAoIDB4MSA8PCAwICkgICAvKiAoUlNUQykgUHJvY2Vzc29yIFJlc2V0ICovDQotI2RlZmluZSBBVDkxQ19SU1RDX1BFUlJTVCAgICAgICAgICAgICAgICAgKCAweDEgPDwgMiApICAgLyogKFJTVEMpIFBlcmlwaGVyYWwgUmVzZXQgKi8NCi0jZGVmaW5lIEFUOTFDX1JTVENfRVhUUlNUICAgICAgICAgICAgICAgICAoIDB4MSA8PCAzICkgICAvKiAoUlNUQykgRXh0ZXJuYWwgUmVzZXQgKi8NCi0jZGVmaW5lIEFUOTFDX1JTVENfS0VZICAgICAgICAgICAgICAgICAgICAoIDB4RkYgPDwgMjQgKSAvKiAoUlNUQykgUGFzc3dvcmQgKi8NCi0vKiAtLS0tLS0tLSBSU1RDX1JTUiA6IChSU1RDIE9mZnNldDogMHg0KSBSZXNldCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1JTVENfVVJTVFMgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAwICkgICAvKiAoUlNUQykgVXNlciBSZXNldCBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX1JTVENfQk9EU1RTICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxICkgICAvKiAoUlNUQykgQnJvd25vdXQgRGV0ZWN0aW9uIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfUlNUQ19SU1RUWVAgICAgICAgICAgICAgICAgICggMHg3IDw8IDggKSAgIC8qIChSU1RDKSBSZXNldCBUeXBlICovDQotI2RlZmluZSAgICAgQVQ5MUNfUlNUQ19SU1RUWVBfUE9XRVJVUCAgICAgKCAweDAgPDwgOCApICAgLyogKFJTVEMpIFBvd2VyLXVwIFJlc2V0LiBWRERDT1JFIHJpc2luZy4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19SU1RDX1JTVFRZUF9XQUtFVVAgICAgICAoIDB4MSA8PCA4ICkgICAvKiAoUlNUQykgV2FrZVVwIFJlc2V0LiBWRERDT1JFIHJpc2luZy4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19SU1RDX1JTVFRZUF9XQVRDSERPRyAgICAoIDB4MiA8PCA4ICkgICAvKiAoUlNUQykgV2F0Y2hkb2cgUmVzZXQuIFdhdGNoZG9nIG92ZXJmbG93IG9jY3VyZWQuICovDQotI2RlZmluZSAgICAgQVQ5MUNfUlNUQ19SU1RUWVBfU09GVFdBUkUgICAgKCAweDMgPDwgOCApICAgLyogKFJTVEMpIFNvZnR3YXJlIFJlc2V0LiBQcm9jZXNzb3IgcmVzZXQgcmVxdWlyZWQgYnkgdGhlIHNvZnR3YXJlLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1JTVENfUlNUVFlQX1VTRVIgICAgICAgICggMHg0IDw8IDggKSAgIC8qIChSU1RDKSBVc2VyIFJlc2V0LiBOUlNUIHBpbiBkZXRlY3RlZCBsb3cuICovDQotI2RlZmluZSAgICAgQVQ5MUNfUlNUQ19SU1RUWVBfQlJPV05PVVQgICAgKCAweDUgPDwgOCApICAgLyogKFJTVEMpIEJyb3dub3V0IFJlc2V0IG9jY3VyZWQuICovDQotI2RlZmluZSBBVDkxQ19SU1RDX05SU1RMICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTYgKSAgLyogKFJTVEMpIE5SU1QgcGluIGxldmVsICovDQotI2RlZmluZSBBVDkxQ19SU1RDX1NSQ01QICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTcgKSAgLyogKFJTVEMpIFNvZnR3YXJlIFJlc2V0IENvbW1hbmQgaW4gUHJvZ3Jlc3MuICovDQotLyogLS0tLS0tLS0gUlNUQ19STVIgOiAoUlNUQyBPZmZzZXQ6IDB4OCkgUmVzZXQgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfUlNUQ19VUlNURU4gICAgICAgICAgICAgICAgICggMHgxIDw8IDAgKSAgIC8qIChSU1RDKSBVc2VyIFJlc2V0IEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfUlNUQ19VUlNUSUVOICAgICAgICAgICAgICAgICggMHgxIDw8IDQgKSAgIC8qIChSU1RDKSBVc2VyIFJlc2V0IEludGVycnVwdCBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1JTVENfRVJTVEwgICAgICAgICAgICAgICAgICAoIDB4RiA8PCA4ICkgICAvKiAoUlNUQykgVXNlciBSZXNldCBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1JTVENfQk9ESUVOICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxNiApICAvKiAoUlNUQykgQnJvd25vdXQgRGV0ZWN0aW9uIEludGVycnVwdCBFbmFibGUgKi8NCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFJlc2V0IENvbnRyb2xsZXIgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1JTVEMgc3RydWN0dXJlICoqKg0KKyNkZWZpbmUgUlNUQ19SQ1IgICAgICAgICggMCkgLy8gUmVzZXQgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgUlNUQ19SU1IgICAgICAgICggNCkgLy8gUmVzZXQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBSU1RDX1JNUiAgICAgICAgKCA4KSAvLyBSZXNldCBNb2RlIFJlZ2lzdGVyDQorLy8gLS0tLS0tLS0gUlNUQ19SQ1IgOiAoUlNUQyBPZmZzZXQ6IDB4MCkgUmVzZXQgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1JTVENfUFJPQ1JTVCAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFJTVEMpIFByb2Nlc3NvciBSZXNldA0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19QRVJSU1QgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoUlNUQykgUGVyaXBoZXJhbCBSZXNldA0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19FWFRSU1QgICAgICAgICAoMHgxIDw8ICAzKSAvLyAoUlNUQykgRXh0ZXJuYWwgUmVzZXQNCisjZGVmaW5lIEFUOTFDX1JTVENfS0VZICAgICAgICAgICAgKDB4RkYgPDwgMjQpIC8vIChSU1RDKSBQYXNzd29yZA0KKy8vIC0tLS0tLS0tIFJTVENfUlNSIDogKFJTVEMgT2Zmc2V0OiAweDQpIFJlc2V0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1JTVENfVVJTVFMgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFJTVEMpIFVzZXIgUmVzZXQgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19SU1RDX0JPRFNUUyAgICAgICAgICgweDEgPDwgIDEpIC8vIChSU1RDKSBCcm93bm91dCBEZXRlY3Rpb24gU3RhdHVzDQorI2RlZmluZSBBVDkxQ19SU1RDX1JTVFRZUCAgICAgICAgICgweDcgPDwgIDgpIC8vIChSU1RDKSBSZXNldCBUeXBlDQorI2RlZmluZSAJQVQ5MUNfUlNUQ19SU1RUWVBfUE9XRVJVUCAgICAgICAgICAgICAgKDB4MCA8PCAgOCkgLy8gKFJTVEMpIFBvd2VyLXVwIFJlc2V0LiBWRERDT1JFIHJpc2luZy4NCisjZGVmaW5lIAlBVDkxQ19SU1RDX1JTVFRZUF9XQUtFVVAgICAgICAgICAgICAgICAoMHgxIDw8ICA4KSAvLyAoUlNUQykgV2FrZVVwIFJlc2V0LiBWRERDT1JFIHJpc2luZy4NCisjZGVmaW5lIAlBVDkxQ19SU1RDX1JTVFRZUF9XQVRDSERPRyAgICAgICAgICAgICAoMHgyIDw8ICA4KSAvLyAoUlNUQykgV2F0Y2hkb2cgUmVzZXQuIFdhdGNoZG9nIG92ZXJmbG93IG9jY3VyZWQuDQorI2RlZmluZSAJQVQ5MUNfUlNUQ19SU1RUWVBfU09GVFdBUkUgICAgICAgICAgICAgKDB4MyA8PCAgOCkgLy8gKFJTVEMpIFNvZnR3YXJlIFJlc2V0LiBQcm9jZXNzb3IgcmVzZXQgcmVxdWlyZWQgYnkgdGhlIHNvZnR3YXJlLg0KKyNkZWZpbmUgCUFUOTFDX1JTVENfUlNUVFlQX1VTRVIgICAgICAgICAgICAgICAgICgweDQgPDwgIDgpIC8vIChSU1RDKSBVc2VyIFJlc2V0LiBOUlNUIHBpbiBkZXRlY3RlZCBsb3cuDQorI2RlZmluZSAJQVQ5MUNfUlNUQ19SU1RUWVBfQlJPV05PVVQgICAgICAgICAgICAgKDB4NSA8PCAgOCkgLy8gKFJTVEMpIEJyb3dub3V0IFJlc2V0IG9jY3VyZWQuDQorI2RlZmluZSBBVDkxQ19SU1RDX05SU1RMICAgICAgICAgICgweDEgPDwgMTYpIC8vIChSU1RDKSBOUlNUIHBpbiBsZXZlbA0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19TUkNNUCAgICAgICAgICAoMHgxIDw8IDE3KSAvLyAoUlNUQykgU29mdHdhcmUgUmVzZXQgQ29tbWFuZCBpbiBQcm9ncmVzcy4NCisvLyAtLS0tLS0tLSBSU1RDX1JNUiA6IChSU1RDIE9mZnNldDogMHg4KSBSZXNldCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19VUlNURU4gICAgICAgICAoMHgxIDw8ICAwKSAvLyAoUlNUQykgVXNlciBSZXNldCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1JTVENfVVJTVElFTiAgICAgICAgKDB4MSA8PCAgNCkgLy8gKFJTVEMpIFVzZXIgUmVzZXQgSW50ZXJydXB0IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19FUlNUTCAgICAgICAgICAoMHhGIDw8ICA4KSAvLyAoUlNUQykgVXNlciBSZXNldCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1JTVENfQk9ESUVOICAgICAgICAgKDB4MSA8PCAxNikgLy8gKFJTVEMpIEJyb3dub3V0IERldGVjdGlvbiBJbnRlcnJ1cHQgRW5hYmxlDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBSZWFsIFRpbWUgVGltZXIgQ29udHJvbGxlciBJbnRlcmZhY2UgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfUlRUQyBzdHJ1Y3R1cmUgKioqICovDQotI2RlZmluZSBSVFRDX1JUTVIgICAgICAgICAgICAgICAoIDAgKSAgICAgICAgICAgLyogUmVhbC10aW1lIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFJUVENfUlRBUiAgICAgICAgICAgICAgICggNCApICAgICAgICAgICAvKiBSZWFsLXRpbWUgQWxhcm0gUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFJUVENfUlRWUiAgICAgICAgICAgICAgICggOCApICAgICAgICAgICAvKiBSZWFsLXRpbWUgVmFsdWUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFJUVENfUlRTUiAgICAgICAgICAgICAgICggMTIgKSAgICAgICAgICAvKiBSZWFsLXRpbWUgU3RhdHVzIFJlZ2lzdGVyICovDQotLyogLS0tLS0tLS0gUlRUQ19SVE1SIDogKFJUVEMgT2Zmc2V0OiAweDApIFJlYWwtdGltZSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19SVFRDX1JUUFJFUyAgICAgICAoIDB4RkZGRiA8PCAwICkgLyogKFJUVEMpIFJlYWwtdGltZSBUaW1lciBQcmVzY2FsZXIgVmFsdWUgKi8NCi0jZGVmaW5lIEFUOTFDX1JUVENfQUxNSUVOICAgICAgICggMHgxIDw8IDE2ICkgICAvKiAoUlRUQykgQWxhcm0gSW50ZXJydXB0IEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfUlRUQ19SVFRJTkNJRU4gICAgKCAweDEgPDwgMTcgKSAgIC8qIChSVFRDKSBSZWFsIFRpbWUgVGltZXIgSW5jcmVtZW50IEludGVycnVwdCBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1JUVENfUlRUUlNUICAgICAgICggMHgxIDw8IDE4ICkgICAvKiAoUlRUQykgUmVhbCBUaW1lIFRpbWVyIFJlc3RhcnQgKi8NCi0vKiAtLS0tLS0tLSBSVFRDX1JUQVIgOiAoUlRUQyBPZmZzZXQ6IDB4NCkgUmVhbC10aW1lIEFsYXJtIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19SVFRDX0FMTVYgICAgICAgICAoIDB4MCA8PCAwICkgICAgLyogKFJUVEMpIEFsYXJtIFZhbHVlICovDQotLyogLS0tLS0tLS0gUlRUQ19SVFZSIDogKFJUVEMgT2Zmc2V0OiAweDgpIEN1cnJlbnQgUmVhbC10aW1lIFZhbHVlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19SVFRDX0NSVFYgICAgICAgICAoIDB4MCA8PCAwICkgICAgLyogKFJUVEMpIEN1cnJlbnQgUmVhbC10aW1lIFZhbHVlICovDQotLyogLS0tLS0tLS0gUlRUQ19SVFNSIDogKFJUVEMgT2Zmc2V0OiAweGMpIFJlYWwtdGltZSBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1JUVENfQUxNUyAgICAgICAgICggMHgxIDw8IDAgKSAgICAvKiAoUlRUQykgUmVhbC10aW1lIEFsYXJtIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfUlRUQ19SVFRJTkMgICAgICAgKCAweDEgPDwgMSApICAgIC8qIChSVFRDKSBSZWFsLXRpbWUgVGltZXIgSW5jcmVtZW50ICovDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBSZWFsIFRpbWUgVGltZXIgQ29udHJvbGxlciBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfUlRUQyBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBSVFRDX1JUTVIgICAgICAgKCAwKSAvLyBSZWFsLXRpbWUgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUlRUQ19SVEFSICAgICAgICggNCkgLy8gUmVhbC10aW1lIEFsYXJtIFJlZ2lzdGVyDQorI2RlZmluZSBSVFRDX1JUVlIgICAgICAgKCA4KSAvLyBSZWFsLXRpbWUgVmFsdWUgUmVnaXN0ZXINCisjZGVmaW5lIFJUVENfUlRTUiAgICAgICAoMTIpIC8vIFJlYWwtdGltZSBTdGF0dXMgUmVnaXN0ZXINCisvLyAtLS0tLS0tLSBSVFRDX1JUTVIgOiAoUlRUQyBPZmZzZXQ6IDB4MCkgUmVhbC10aW1lIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19SVFRDX1JUUFJFUyAgICAgICAgICgweEZGRkYgPDwgIDApIC8vIChSVFRDKSBSZWFsLXRpbWUgVGltZXIgUHJlc2NhbGVyIFZhbHVlDQorI2RlZmluZSBBVDkxQ19SVFRDX0FMTUlFTiAgICAgICAgICgweDEgPDwgMTYpIC8vIChSVFRDKSBBbGFybSBJbnRlcnJ1cHQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19SVFRDX1JUVElOQ0lFTiAgICAgICgweDEgPDwgMTcpIC8vIChSVFRDKSBSZWFsIFRpbWUgVGltZXIgSW5jcmVtZW50IEludGVycnVwdCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1JUVENfUlRUUlNUICAgICAgICAgKDB4MSA8PCAxOCkgLy8gKFJUVEMpIFJlYWwgVGltZSBUaW1lciBSZXN0YXJ0DQorLy8gLS0tLS0tLS0gUlRUQ19SVEFSIDogKFJUVEMgT2Zmc2V0OiAweDQpIFJlYWwtdGltZSBBbGFybSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1JUVENfQUxNViAgICAgICAgICAgKDB4MCA8PCAgMCkgLy8gKFJUVEMpIEFsYXJtIFZhbHVlDQorLy8gLS0tLS0tLS0gUlRUQ19SVFZSIDogKFJUVEMgT2Zmc2V0OiAweDgpIEN1cnJlbnQgUmVhbC10aW1lIFZhbHVlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19DUlRWICAgICAgICAgICAoMHgwIDw8ICAwKSAvLyAoUlRUQykgQ3VycmVudCBSZWFsLXRpbWUgVmFsdWUNCisvLyAtLS0tLS0tLSBSVFRDX1JUU1IgOiAoUlRUQyBPZmZzZXQ6IDB4YykgUmVhbC10aW1lIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1JUVENfQUxNUyAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFJUVEMpIFJlYWwtdGltZSBBbGFybSBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX1JUVENfUlRUSU5DICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKFJUVEMpIFJlYWwtdGltZSBUaW1lciBJbmNyZW1lbnQNCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFBlcmlvZGljIEludGVydmFsIFRpbWVyIENvbnRyb2xsZXIgSW50ZXJmYWNlICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1BJVEMgc3RydWN0dXJlICoqKiAqLw0KLSNkZWZpbmUgUElUQ19QSU1SICAgICAgICAgICAgKCAwICkgICAgICAgICAgICAvKiBQZXJpb2QgSW50ZXJ2YWwgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUElUQ19QSVNSICAgICAgICAgICAgKCA0ICkgICAgICAgICAgICAvKiBQZXJpb2QgSW50ZXJ2YWwgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBQSVRDX1BJVlIgICAgICAgICAgICAoIDggKSAgICAgICAgICAgIC8qIFBlcmlvZCBJbnRlcnZhbCBWYWx1ZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUElUQ19QSUlSICAgICAgICAgICAgKCAxMiApICAgICAgICAgICAvKiBQZXJpb2QgSW50ZXJ2YWwgSW1hZ2UgUmVnaXN0ZXIgKi8NCi0vKiAtLS0tLS0tLSBQSVRDX1BJTVIgOiAoUElUQyBPZmZzZXQ6IDB4MCkgUGVyaW9kaWMgSW50ZXJ2YWwgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElUQ19QSVYgICAgICAgKCAweEZGRkZGIDw8IDAgKSAvKiAoUElUQykgUGVyaW9kaWMgSW50ZXJ2YWwgVmFsdWUgKi8NCi0jZGVmaW5lIEFUOTFDX1BJVENfUElURU4gICAgICggMHgxIDw8IDI0ICkgICAgLyogKFBJVEMpIFBlcmlvZGljIEludGVydmFsIFRpbWVyIEVuYWJsZWQgKi8NCi0jZGVmaW5lIEFUOTFDX1BJVENfUElUSUVOICAgICggMHgxIDw8IDI1ICkgICAgLyogKFBJVEMpIFBlcmlvZGljIEludGVydmFsIFRpbWVyIEludGVycnVwdCBFbmFibGUgKi8NCi0vKiAtLS0tLS0tLSBQSVRDX1BJU1IgOiAoUElUQyBPZmZzZXQ6IDB4NCkgUGVyaW9kaWMgSW50ZXJ2YWwgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19QSVRDX1BJVFMgICAgICAoIDB4MSA8PCAwICkgICAgIC8qIChQSVRDKSBQZXJpb2RpYyBJbnRlcnZhbCBUaW1lciBTdGF0dXMgKi8NCi0vKiAtLS0tLS0tLSBQSVRDX1BJVlIgOiAoUElUQyBPZmZzZXQ6IDB4OCkgUGVyaW9kaWMgSW50ZXJ2YWwgVmFsdWUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1BJVENfQ1BJViAgICAgICggMHhGRkZGRiA8PCAwICkgLyogKFBJVEMpIEN1cnJlbnQgUGVyaW9kaWMgSW50ZXJ2YWwgVmFsdWUgKi8NCi0jZGVmaW5lIEFUOTFDX1BJVENfUElDTlQgICAgICggMHhGRkYgPDwgMjAgKSAgLyogKFBJVEMpIFBlcmlvZGljIEludGVydmFsIENvdW50ZXIgKi8NCi0vKiAtLS0tLS0tLSBQSVRDX1BJSVIgOiAoUElUQyBPZmZzZXQ6IDB4YykgUGVyaW9kaWMgSW50ZXJ2YWwgSW1hZ2UgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFBlcmlvZGljIEludGVydmFsIFRpbWVyIENvbnRyb2xsZXIgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1BJVEMgc3RydWN0dXJlICoqKg0KKyNkZWZpbmUgUElUQ19QSU1SICAgICAgICggMCkgLy8gUGVyaW9kIEludGVydmFsIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIFBJVENfUElTUiAgICAgICAoIDQpIC8vIFBlcmlvZCBJbnRlcnZhbCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFBJVENfUElWUiAgICAgICAoIDgpIC8vIFBlcmlvZCBJbnRlcnZhbCBWYWx1ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUElUQ19QSUlSICAgICAgICgxMikgLy8gUGVyaW9kIEludGVydmFsIEltYWdlIFJlZ2lzdGVyDQorLy8gLS0tLS0tLS0gUElUQ19QSU1SIDogKFBJVEMgT2Zmc2V0OiAweDApIFBlcmlvZGljIEludGVydmFsIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QSVRDX1BJViAgICAgICAgICAgICgweEZGRkZGIDw8ICAwKSAvLyAoUElUQykgUGVyaW9kaWMgSW50ZXJ2YWwgVmFsdWUNCisjZGVmaW5lIEFUOTFDX1BJVENfUElURU4gICAgICAgICAgKDB4MSA8PCAyNCkgLy8gKFBJVEMpIFBlcmlvZGljIEludGVydmFsIFRpbWVyIEVuYWJsZWQNCisjZGVmaW5lIEFUOTFDX1BJVENfUElUSUVOICAgICAgICAgKDB4MSA8PCAyNSkgLy8gKFBJVEMpIFBlcmlvZGljIEludGVydmFsIFRpbWVyIEludGVycnVwdCBFbmFibGUNCisvLyAtLS0tLS0tLSBQSVRDX1BJU1IgOiAoUElUQyBPZmZzZXQ6IDB4NCkgUGVyaW9kaWMgSW50ZXJ2YWwgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUElUQ19QSVRTICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoUElUQykgUGVyaW9kaWMgSW50ZXJ2YWwgVGltZXIgU3RhdHVzDQorLy8gLS0tLS0tLS0gUElUQ19QSVZSIDogKFBJVEMgT2Zmc2V0OiAweDgpIFBlcmlvZGljIEludGVydmFsIFZhbHVlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUElUQ19DUElWICAgICAgICAgICAoMHhGRkZGRiA8PCAgMCkgLy8gKFBJVEMpIEN1cnJlbnQgUGVyaW9kaWMgSW50ZXJ2YWwgVmFsdWUNCisjZGVmaW5lIEFUOTFDX1BJVENfUElDTlQgICAgICAgICAgKDB4RkZGIDw8IDIwKSAvLyAoUElUQykgUGVyaW9kaWMgSW50ZXJ2YWwgQ291bnRlcg0KKy8vIC0tLS0tLS0tIFBJVENfUElJUiA6IChQSVRDIE9mZnNldDogMHhjKSBQZXJpb2RpYyBJbnRlcnZhbCBJbWFnZSBSZWdpc3RlciAtLS0tLS0tLSANCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFdhdGNoZG9nIFRpbWVyIENvbnRyb2xsZXIgSW50ZXJmYWNlICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1dEVEMgc3RydWN0dXJlICoqKiAqLw0KLSNkZWZpbmUgV0RUQ19XRENSICAgICAgICAgICAgICAgKCAwICkgICAgICAgICAgIC8qIFdhdGNoZG9nIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFdEVENfV0RNUiAgICAgICAgICAgICAgICggNCApICAgICAgICAgICAvKiBXYXRjaGRvZyBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBXRFRDX1dEU1IgICAgICAgICAgICAgICAoIDggKSAgICAgICAgICAgLyogV2F0Y2hkb2cgU3RhdHVzIFJlZ2lzdGVyICovDQotLyogLS0tLS0tLS0gV0RUQ19XRENSIDogKFdEVEMgT2Zmc2V0OiAweDApIFBlcmlvZGljIEludGVydmFsIEltYWdlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19XRFRDX1dEUlNUVCAgICAgICAoIDB4MSA8PCAwICkgICAgLyogKFdEVEMpIFdhdGNoZG9nIFJlc3RhcnQgKi8NCi0jZGVmaW5lIEFUOTFDX1dEVENfS0VZICAgICAgICAgICggMHhGRiA8PCAyNCApICAvKiAoV0RUQykgV2F0Y2hkb2cgS0VZIFBhc3N3b3JkICovDQotLyogLS0tLS0tLS0gV0RUQ19XRE1SIDogKFdEVEMgT2Zmc2V0OiAweDQpIFdhdGNoZG9nIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1dEVENfV0RWICAgICAgICAgICggMHhGRkYgPDwgMCApICAvKiAoV0RUQykgV2F0Y2hkb2cgVGltZXIgUmVzdGFydCAqLw0KLSNkZWZpbmUgQVQ5MUNfV0RUQ19XREZJRU4gICAgICAgKCAweDEgPDwgMTIgKSAgIC8qIChXRFRDKSBXYXRjaGRvZyBGYXVsdCBJbnRlcnJ1cHQgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19XRFRDX1dEUlNURU4gICAgICAoIDB4MSA8PCAxMyApICAgLyogKFdEVEMpIFdhdGNoZG9nIFJlc2V0IEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfV0RUQ19XRFJQUk9DICAgICAgKCAweDEgPDwgMTQgKSAgIC8qIChXRFRDKSBXYXRjaGRvZyBUaW1lciBSZXN0YXJ0ICovDQotI2RlZmluZSBBVDkxQ19XRFRDX1dERElTICAgICAgICAoIDB4MSA8PCAxNSApICAgLyogKFdEVEMpIFdhdGNoZG9nIERpc2FibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1dEVENfV0REICAgICAgICAgICggMHhGRkYgPDwgMTYgKSAvKiAoV0RUQykgV2F0Y2hkb2cgRGVsdGEgVmFsdWUgKi8NCi0jZGVmaW5lIEFUOTFDX1dEVENfV0REQkdITFQgICAgICggMHgxIDw8IDI4ICkgICAvKiAoV0RUQykgV2F0Y2hkb2cgRGVidWcgSGFsdCAqLw0KLSNkZWZpbmUgQVQ5MUNfV0RUQ19XRElETEVITFQgICAgKCAweDEgPDwgMjkgKSAgIC8qIChXRFRDKSBXYXRjaGRvZyBJZGxlIEhhbHQgKi8NCi0vKiAtLS0tLS0tLSBXRFRDX1dEU1IgOiAoV0RUQyBPZmZzZXQ6IDB4OCkgV2F0Y2hkb2cgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19XRFRDX1dEVU5GICAgICAgICAoIDB4MSA8PCAwICkgICAgLyogKFdEVEMpIFdhdGNoZG9nIFVuZGVyZmxvdyAqLw0KLSNkZWZpbmUgQVQ5MUNfV0RUQ19XREVSUiAgICAgICAgKCAweDEgPDwgMSApICAgIC8qIChXRFRDKSBXYXRjaGRvZyBFcnJvciAqLw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgV2F0Y2hkb2cgVGltZXIgQ29udHJvbGxlciBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfV0RUQyBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBXRFRDX1dEQ1IgICAgICAgKCAwKSAvLyBXYXRjaGRvZyBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBXRFRDX1dETVIgICAgICAgKCA0KSAvLyBXYXRjaGRvZyBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBXRFRDX1dEU1IgICAgICAgKCA4KSAvLyBXYXRjaGRvZyBTdGF0dXMgUmVnaXN0ZXINCisvLyAtLS0tLS0tLSBXRFRDX1dEQ1IgOiAoV0RUQyBPZmZzZXQ6IDB4MCkgUGVyaW9kaWMgSW50ZXJ2YWwgSW1hZ2UgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19XRFRDX1dEUlNUVCAgICAgICAgICgweDEgPDwgIDApIC8vIChXRFRDKSBXYXRjaGRvZyBSZXN0YXJ0DQorI2RlZmluZSBBVDkxQ19XRFRDX0tFWSAgICAgICAgICAgICgweEZGIDw8IDI0KSAvLyAoV0RUQykgV2F0Y2hkb2cgS0VZIFBhc3N3b3JkDQorLy8gLS0tLS0tLS0gV0RUQ19XRE1SIDogKFdEVEMgT2Zmc2V0OiAweDQpIFdhdGNoZG9nIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19XRFRDX1dEViAgICAgICAgICAgICgweEZGRiA8PCAgMCkgLy8gKFdEVEMpIFdhdGNoZG9nIFRpbWVyIFJlc3RhcnQNCisjZGVmaW5lIEFUOTFDX1dEVENfV0RGSUVOICAgICAgICAgKDB4MSA8PCAxMikgLy8gKFdEVEMpIFdhdGNoZG9nIEZhdWx0IEludGVycnVwdCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1dEVENfV0RSU1RFTiAgICAgICAgKDB4MSA8PCAxMykgLy8gKFdEVEMpIFdhdGNoZG9nIFJlc2V0IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRFJQUk9DICAgICAgICAoMHgxIDw8IDE0KSAvLyAoV0RUQykgV2F0Y2hkb2cgVGltZXIgUmVzdGFydA0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRERJUyAgICAgICAgICAoMHgxIDw8IDE1KSAvLyAoV0RUQykgV2F0Y2hkb2cgRGlzYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XREQgICAgICAgICAgICAoMHhGRkYgPDwgMTYpIC8vIChXRFRDKSBXYXRjaGRvZyBEZWx0YSBWYWx1ZQ0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRERCR0hMVCAgICAgICAoMHgxIDw8IDI4KSAvLyAoV0RUQykgV2F0Y2hkb2cgRGVidWcgSGFsdA0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRElETEVITFQgICAgICAoMHgxIDw8IDI5KSAvLyAoV0RUQykgV2F0Y2hkb2cgSWRsZSBIYWx0DQorLy8gLS0tLS0tLS0gV0RUQ19XRFNSIDogKFdEVEMgT2Zmc2V0OiAweDgpIFdhdGNoZG9nIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1dEVENfV0RVTkYgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFdEVEMpIFdhdGNoZG9nIFVuZGVyZmxvdw0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XREVSUiAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoV0RUQykgV2F0Y2hkb2cgRXJyb3INCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFZvbHRhZ2UgUmVndWxhdG9yIE1vZGUgQ29udHJvbGxlciBJbnRlcmZhY2UgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfVlJFRyBzdHJ1Y3R1cmUgKioqICovDQotI2RlZmluZSBWUkVHX01SICAgICAgICAgICAgICAoIDAgKSAgICAgICAgLyogVm9sdGFnZSBSZWd1bGF0b3IgTW9kZSBSZWdpc3RlciAqLw0KLS8qIC0tLS0tLS0tIFZSRUdfTVIgOiAoVlJFRyBPZmZzZXQ6IDB4MCkgVm9sdGFnZSBSZWd1bGF0b3IgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVlJFR19QU1REQlkgICAgKCAweDEgPDwgMCApIC8qIChWUkVHKSBWb2x0YWdlIFJlZ3VsYXRvciBQb3dlciBTdGFuZGJ5IE1vZGUgKi8NCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFZvbHRhZ2UgUmVndWxhdG9yIE1vZGUgQ29udHJvbGxlciBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfVlJFRyBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBWUkVHX01SICAgICAgICAgKCAwKSAvLyBWb2x0YWdlIFJlZ3VsYXRvciBNb2RlIFJlZ2lzdGVyDQorLy8gLS0tLS0tLS0gVlJFR19NUiA6IChWUkVHIE9mZnNldDogMHgwKSBWb2x0YWdlIFJlZ3VsYXRvciBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVlJFR19QU1REQlkgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoVlJFRykgVm9sdGFnZSBSZWd1bGF0b3IgUG93ZXIgU3RhbmRieSBNb2RlDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBNZW1vcnkgQ29udHJvbGxlciBJbnRlcmZhY2UgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfTUMgc3RydWN0dXJlICoqKiAqLw0KLSNkZWZpbmUgTUNfUkNSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDAgKSAgICAgICAgICAvKiBNQyBSZW1hcCBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBNQ19BU1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggNCApICAgICAgICAgIC8qIE1DIEFib3J0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgTUNfQUFTUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDggKSAgICAgICAgICAvKiBNQyBBYm9ydCBBZGRyZXNzIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgTUNfRk1SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDk2ICkgICAgICAgICAvKiBNQyBGbGFzaCBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBNQ19GQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMTAwICkgICAgICAgIC8qIE1DIEZsYXNoIENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIE1DX0ZTUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAxMDQgKSAgICAgICAgLyogTUMgRmxhc2ggU3RhdHVzIFJlZ2lzdGVyICovDQotLyogLS0tLS0tLS0gTUNfUkNSIDogKE1DIE9mZnNldDogMHgwKSBNQyBSZW1hcCBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19NQ19SQ0IgICAgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDAgKSAgIC8qIChNQykgUmVtYXAgQ29tbWFuZCBCaXQgKi8NCi0vKiAtLS0tLS0tLSBNQ19BU1IgOiAoTUMgT2Zmc2V0OiAweDQpIE1DIEFib3J0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfVU5EQUREICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAwICkgICAvKiAoTUMpIFVuZGVmaW5lZCBBZGRlc3MgQWJvcnQgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19NSVNBREQgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDEgKSAgIC8qIChNQykgTWlzYWxpZ25lZCBBZGRlc3MgQWJvcnQgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19BQlRTWiAgICAgICAgICAgICAgICAgICAgICggMHgzIDw8IDggKSAgIC8qIChNQykgQWJvcnQgU2l6ZSBTdGF0dXMgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19NQ19BQlRTWl9CWVRFICAgICAgICAgICAgKCAweDAgPDwgOCApICAgLyogKE1DKSBCeXRlICovDQotI2RlZmluZSAgICAgQVQ5MUNfTUNfQUJUU1pfSFdPUkQgICAgICAgICAgICggMHgxIDw8IDggKSAgIC8qIChNQykgSGFsZi13b3JkICovDQotI2RlZmluZSAgICAgQVQ5MUNfTUNfQUJUU1pfV09SRCAgICAgICAgICAgICggMHgyIDw8IDggKSAgIC8qIChNQykgV29yZCAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfQUJUVFlQICAgICAgICAgICAgICAgICAgICAoIDB4MyA8PCAxMCApICAvKiAoTUMpIEFib3J0IFR5cGUgU3RhdHVzICovDQotI2RlZmluZSAgICAgQVQ5MUNfTUNfQUJUVFlQX0RBVEFSICAgICAgICAgICggMHgwIDw8IDEwICkgIC8qIChNQykgRGF0YSBSZWFkICovDQotI2RlZmluZSAgICAgQVQ5MUNfTUNfQUJUVFlQX0RBVEFXICAgICAgICAgICggMHgxIDw8IDEwICkgIC8qIChNQykgRGF0YSBXcml0ZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX01DX0FCVFRZUF9GRVRDSCAgICAgICAgICAoIDB4MiA8PCAxMCApICAvKiAoTUMpIENvZGUgRmV0Y2ggKi8NCi0jZGVmaW5lIEFUOTFDX01DX01TVDAgICAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTYgKSAgLyogKE1DKSBNYXN0ZXIgMCBBYm9ydCBTb3VyY2UgKi8NCi0jZGVmaW5lIEFUOTFDX01DX01TVDEgICAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTcgKSAgLyogKE1DKSBNYXN0ZXIgMSBBYm9ydCBTb3VyY2UgKi8NCi0jZGVmaW5lIEFUOTFDX01DX1NWTVNUMCAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMjQgKSAgLyogKE1DKSBTYXZlZCBNYXN0ZXIgMCBBYm9ydCBTb3VyY2UgKi8NCi0jZGVmaW5lIEFUOTFDX01DX1NWTVNUMSAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMjUgKSAgLyogKE1DKSBTYXZlZCBNYXN0ZXIgMSBBYm9ydCBTb3VyY2UgKi8NCi0vKiAtLS0tLS0tLSBNQ19GTVIgOiAoTUMgT2Zmc2V0OiAweDYwKSBNQyBGbGFzaCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19NQ19GUkRZICAgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDAgKSAgIC8qIChNQykgRmxhc2ggUmVhZHkgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0xPQ0tFICAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMiApICAgLyogKE1DKSBMb2NrIEVycm9yICovDQotI2RlZmluZSBBVDkxQ19NQ19QUk9HRSAgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDMgKSAgIC8qIChNQykgUHJvZ3JhbW1pbmcgRXJyb3IgKi8NCi0jZGVmaW5lIEFUOTFDX01DX05FQlAgICAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgNyApICAgLyogKE1DKSBObyBFcmFzZSBCZWZvcmUgUHJvZ3JhbW1pbmcgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0ZXUyAgICAgICAgICAgICAgICAgICAgICAgKCAweDMgPDwgOCApICAgLyogKE1DKSBGbGFzaCBXYWl0IFN0YXRlICovDQotI2RlZmluZSAgICAgQVQ5MUNfTUNfRldTXzBGV1MgICAgICAgICAgICAgICggMHgwIDw8IDggKSAgIC8qIChNQykgMSBjeWNsZSBmb3IgUmVhZCwgMiBmb3IgV3JpdGUgb3BlcmF0aW9ucyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX01DX0ZXU18xRldTICAgICAgICAgICAgICAoIDB4MSA8PCA4ICkgICAvKiAoTUMpIDIgY3ljbGVzIGZvciBSZWFkLCAzIGZvciBXcml0ZSBvcGVyYXRpb25zICovDQotI2RlZmluZSAgICAgQVQ5MUNfTUNfRldTXzJGV1MgICAgICAgICAgICAgICggMHgyIDw8IDggKSAgIC8qIChNQykgMyBjeWNsZXMgZm9yIFJlYWQsIDQgZm9yIFdyaXRlIG9wZXJhdGlvbnMgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19NQ19GV1NfM0ZXUyAgICAgICAgICAgICAgKCAweDMgPDwgOCApICAgLyogKE1DKSA0IGN5Y2xlcyBmb3IgUmVhZCwgNCBmb3IgV3JpdGUgb3BlcmF0aW9ucyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfRk1DTiAgICAgICAgICAgICAgICAgICAgICAoIDB4RkYgPDwgMTYgKSAvKiAoTUMpIEZsYXNoIE1pY3Jvc2Vjb25kIEN5Y2xlIE51bWJlciAqLw0KLS8qIC0tLS0tLS0tIE1DX0ZDUiA6IChNQyBPZmZzZXQ6IDB4NjQpIE1DIEZsYXNoIENvbW1hbmQgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX01DX0ZDTUQgICAgICAgICAgICAgICAgICAgICAgKCAweEYgPDwgMCApICAgLyogKE1DKSBGbGFzaCBDb21tYW5kICovDQotI2RlZmluZSAgICAgQVQ5MUNfTUNfRkNNRF9TVEFSVF9QUk9HICAgICAgICggMHgxICkgICAgICAgIC8qIChNQykgU3RhcnRzIHRoZSBwcm9ncmFtbWluZyBvZiB0aCBlcGFnZSBzcGVjaWZpZWQgYnkgUEFHRU4uICovDQotI2RlZmluZSAgICAgQVQ5MUNfTUNfRkNNRF9MT0NLICAgICAgICAgICAgICggMHgyICkgICAgICAgIC8qIChNQykgU3RhcnRzIGEgbG9jayBzZXF1ZW5jZSBvZiB0aGUgc2VjdG9yIGRlZmluZWQgYnkgdGhlIGJpdHMgNCB0byA3IG9mIHRoZSBmaWVsZCBQQUdFTi4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19NQ19GQ01EX1BST0dfQU5EX0xPQ0sgICAgKCAweDMgKSAgICAgICAgLyogKE1DKSBUaGUgbG9jayBzZXF1ZW5jZSBhdXRvbWF0aWNhbGx5IGhhcHBlbnMgYWZ0ZXIgdGhlIHByb2dyYW1taW5nIHNlcXVlbmNlIGlzIGNvbXBsZXRlZC4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19NQ19GQ01EX1VOTE9DSyAgICAgICAgICAgKCAweDQgKSAgICAgICAgLyogKE1DKSBTdGFydHMgYW4gdW5sb2NrIHNlcXVlbmNlIG9mIHRoZSBzZWN0b3IgZGVmaW5lZCBieSB0aGUgYml0cyA0IHRvIDcgb2YgdGhlIGZpZWxkIFBBR0VOLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX01DX0ZDTURfRVJBU0VfQUxMICAgICAgICAoIDB4OCApICAgICAgICAvKiAoTUMpIFN0YXJ0cyB0aGUgZXJhc2Ugb2YgdGhlIGVudGlyZSBmbGFzaC5JZiBhdCBsZWFzdCBhIHBhZ2UgaXMgbG9ja2VkLCB0aGUgY29tbWFuZCBpcyBjYW5jZWxsZWQuICovDQotI2RlZmluZSAgICAgQVQ5MUNfTUNfRkNNRF9TRVRfR1BfTlZNICAgICAgICggMHhCICkgICAgICAgIC8qIChNQykgU2V0IEdlbmVyYWwgUHVycG9zZSBOVk0gYml0cy4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19NQ19GQ01EX0NMUl9HUF9OVk0gICAgICAgKCAweEQgKSAgICAgICAgLyogKE1DKSBDbGVhciBHZW5lcmFsIFB1cnBvc2UgTlZNIGJpdHMuICovDQotI2RlZmluZSAgICAgQVQ5MUNfTUNfRkNNRF9TRVRfU0VDVVJJVFkgICAgICggMHhGICkgICAgICAgIC8qIChNQykgU2V0IFNlY3VyaXR5IEJpdC4gKi8NCi0jZGVmaW5lIEFUOTFDX01DX1BBR0VOICAgICAgICAgICAgICAgICAgICAgKCAweDNGRiA8PCA4ICkgLyogKE1DKSBQYWdlIE51bWJlciAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfS0VZICAgICAgICAgICAgICAgICAgICAgICAoIDB4RkYgPDwgMjQgKSAvKiAoTUMpIFdyaXRpbmcgUHJvdGVjdCBLZXkgKi8NCi0vKiAtLS0tLS0tLSBNQ19GU1IgOiAoTUMgT2Zmc2V0OiAweDY4KSBNQyBGbGFzaCBDb21tYW5kIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19NQ19TRUNVUklUWSAgICAgICAgICAgICAgICAgICggMHgxIDw8IDQgKSAgIC8qIChNQykgU2VjdXJpdHkgQml0IFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfR1BOVk0wICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCA4ICkgICAvKiAoTUMpIFNlY3RvciAwIExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19HUE5WTTEgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDkgKSAgIC8qIChNQykgU2VjdG9yIDEgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0dQTlZNMiAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTAgKSAgLyogKE1DKSBTZWN0b3IgMiBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfR1BOVk0zICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxMSApICAvKiAoTUMpIFNlY3RvciAzIExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19HUE5WTTQgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDEyICkgIC8qIChNQykgU2VjdG9yIDQgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0dQTlZNNSAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTMgKSAgLyogKE1DKSBTZWN0b3IgNSBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfR1BOVk02ICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxNCApICAvKiAoTUMpIFNlY3RvciA2IExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19HUE5WTTcgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDE1ICkgIC8qIChNQykgU2VjdG9yIDcgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0xPQ0tTMCAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTYgKSAgLyogKE1DKSBTZWN0b3IgMCBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxNyApICAvKiAoTUMpIFNlY3RvciAxIExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19MT0NLUzIgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDE4ICkgIC8qIChNQykgU2VjdG9yIDIgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0xPQ0tTMyAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTkgKSAgLyogKE1DKSBTZWN0b3IgMyBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTE9DS1M0ICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAyMCApICAvKiAoTUMpIFNlY3RvciA0IExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19MT0NLUzUgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDIxICkgIC8qIChNQykgU2VjdG9yIDUgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0xPQ0tTNiAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMjIgKSAgLyogKE1DKSBTZWN0b3IgNiBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTE9DS1M3ICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAyMyApICAvKiAoTUMpIFNlY3RvciA3IExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19MT0NLUzggICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDI0ICkgIC8qIChNQykgU2VjdG9yIDggTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0xPQ0tTOSAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMjUgKSAgLyogKE1DKSBTZWN0b3IgOSBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxMCAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAyNiApICAvKiAoTUMpIFNlY3RvciAxMCBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxMSAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAyNyApICAvKiAoTUMpIFNlY3RvciAxMSBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxMiAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAyOCApICAvKiAoTUMpIFNlY3RvciAxMiBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxMyAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAyOSApICAvKiAoTUMpIFNlY3RvciAxMyBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxNCAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAzMCApICAvKiAoTUMpIFNlY3RvciAxNCBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxNSAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAzMSApICAvKiAoTUMpIFNlY3RvciAxNSBMb2NrIFN0YXR1cyAqLw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgTWVtb3J5IENvbnRyb2xsZXIgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX01DIHN0cnVjdHVyZSAqKioNCisjZGVmaW5lIE1DX1JDUiAgICAgICAgICAoIDApIC8vIE1DIFJlbWFwIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIE1DX0FTUiAgICAgICAgICAoIDQpIC8vIE1DIEFib3J0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgTUNfQUFTUiAgICAgICAgICggOCkgLy8gTUMgQWJvcnQgQWRkcmVzcyBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIE1DX0ZNUiAgICAgICAgICAoOTYpIC8vIE1DIEZsYXNoIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIE1DX0ZDUiAgICAgICAgICAoMTAwKSAvLyBNQyBGbGFzaCBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBNQ19GU1IgICAgICAgICAgKDEwNCkgLy8gTUMgRmxhc2ggU3RhdHVzIFJlZ2lzdGVyDQorLy8gLS0tLS0tLS0gTUNfUkNSIDogKE1DIE9mZnNldDogMHgwKSBNQyBSZW1hcCBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfTUNfUkNCICAgICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoTUMpIFJlbWFwIENvbW1hbmQgQml0DQorLy8gLS0tLS0tLS0gTUNfQVNSIDogKE1DIE9mZnNldDogMHg0KSBNQyBBYm9ydCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19NQ19VTkRBREQgICAgICAgICAgICgweDEgPDwgIDApIC8vIChNQykgVW5kZWZpbmVkIEFkZGVzcyBBYm9ydCBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX01JU0FERCAgICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKE1DKSBNaXNhbGlnbmVkIEFkZGVzcyBBYm9ydCBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0FCVFNaICAgICAgICAgICAgKDB4MyA8PCAgOCkgLy8gKE1DKSBBYm9ydCBTaXplIFN0YXR1cw0KKyNkZWZpbmUgCUFUOTFDX01DX0FCVFNaX0JZVEUgICAgICAgICAgICAgICAgICgweDAgPDwgIDgpIC8vIChNQykgQnl0ZQ0KKyNkZWZpbmUgCUFUOTFDX01DX0FCVFNaX0hXT1JEICAgICAgICAgICAgICAgICgweDEgPDwgIDgpIC8vIChNQykgSGFsZi13b3JkDQorI2RlZmluZSAJQVQ5MUNfTUNfQUJUU1pfV09SRCAgICAgICAgICAgICAgICAgKDB4MiA8PCAgOCkgLy8gKE1DKSBXb3JkDQorI2RlZmluZSBBVDkxQ19NQ19BQlRUWVAgICAgICAgICAgICgweDMgPDwgMTApIC8vIChNQykgQWJvcnQgVHlwZSBTdGF0dXMNCisjZGVmaW5lIAlBVDkxQ19NQ19BQlRUWVBfREFUQVIgICAgICAgICAgICAgICAgKDB4MCA8PCAxMCkgLy8gKE1DKSBEYXRhIFJlYWQNCisjZGVmaW5lIAlBVDkxQ19NQ19BQlRUWVBfREFUQVcgICAgICAgICAgICAgICAgKDB4MSA8PCAxMCkgLy8gKE1DKSBEYXRhIFdyaXRlDQorI2RlZmluZSAJQVQ5MUNfTUNfQUJUVFlQX0ZFVENIICAgICAgICAgICAgICAgICgweDIgPDwgMTApIC8vIChNQykgQ29kZSBGZXRjaA0KKyNkZWZpbmUgQVQ5MUNfTUNfTVNUMCAgICAgICAgICAgICAoMHgxIDw8IDE2KSAvLyAoTUMpIE1hc3RlciAwIEFib3J0IFNvdXJjZQ0KKyNkZWZpbmUgQVQ5MUNfTUNfTVNUMSAgICAgICAgICAgICAoMHgxIDw8IDE3KSAvLyAoTUMpIE1hc3RlciAxIEFib3J0IFNvdXJjZQ0KKyNkZWZpbmUgQVQ5MUNfTUNfU1ZNU1QwICAgICAgICAgICAoMHgxIDw8IDI0KSAvLyAoTUMpIFNhdmVkIE1hc3RlciAwIEFib3J0IFNvdXJjZQ0KKyNkZWZpbmUgQVQ5MUNfTUNfU1ZNU1QxICAgICAgICAgICAoMHgxIDw8IDI1KSAvLyAoTUMpIFNhdmVkIE1hc3RlciAxIEFib3J0IFNvdXJjZQ0KKy8vIC0tLS0tLS0tIE1DX0ZNUiA6IChNQyBPZmZzZXQ6IDB4NjApIE1DIEZsYXNoIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19NQ19GUkRZICAgICAgICAgICAgICgweDEgPDwgIDApIC8vIChNQykgRmxhc2ggUmVhZHkNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tFICAgICAgICAgICAgKDB4MSA8PCAgMikgLy8gKE1DKSBMb2NrIEVycm9yDQorI2RlZmluZSBBVDkxQ19NQ19QUk9HRSAgICAgICAgICAgICgweDEgPDwgIDMpIC8vIChNQykgUHJvZ3JhbW1pbmcgRXJyb3INCisjZGVmaW5lIEFUOTFDX01DX05FQlAgICAgICAgICAgICAgKDB4MSA8PCAgNykgLy8gKE1DKSBObyBFcmFzZSBCZWZvcmUgUHJvZ3JhbW1pbmcNCisjZGVmaW5lIEFUOTFDX01DX0ZXUyAgICAgICAgICAgICAgKDB4MyA8PCAgOCkgLy8gKE1DKSBGbGFzaCBXYWl0IFN0YXRlDQorI2RlZmluZSAJQVQ5MUNfTUNfRldTXzBGV1MgICAgICAgICAgICAgICAgICgweDAgPDwgIDgpIC8vIChNQykgMSBjeWNsZSBmb3IgUmVhZCwgMiBmb3IgV3JpdGUgb3BlcmF0aW9ucw0KKyNkZWZpbmUgCUFUOTFDX01DX0ZXU18xRldTICAgICAgICAgICAgICAgICAoMHgxIDw8ICA4KSAvLyAoTUMpIDIgY3ljbGVzIGZvciBSZWFkLCAzIGZvciBXcml0ZSBvcGVyYXRpb25zDQorI2RlZmluZSAJQVQ5MUNfTUNfRldTXzJGV1MgICAgICAgICAgICAgICAgICgweDIgPDwgIDgpIC8vIChNQykgMyBjeWNsZXMgZm9yIFJlYWQsIDQgZm9yIFdyaXRlIG9wZXJhdGlvbnMNCisjZGVmaW5lIAlBVDkxQ19NQ19GV1NfM0ZXUyAgICAgICAgICAgICAgICAgKDB4MyA8PCAgOCkgLy8gKE1DKSA0IGN5Y2xlcyBmb3IgUmVhZCwgNCBmb3IgV3JpdGUgb3BlcmF0aW9ucw0KKyNkZWZpbmUgQVQ5MUNfTUNfRk1DTiAgICAgICAgICAgICAoMHhGRiA8PCAxNikgLy8gKE1DKSBGbGFzaCBNaWNyb3NlY29uZCBDeWNsZSBOdW1iZXINCisvLyAtLS0tLS0tLSBNQ19GQ1IgOiAoTUMgT2Zmc2V0OiAweDY0KSBNQyBGbGFzaCBDb21tYW5kIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfTUNfRkNNRCAgICAgICAgICAgICAoMHhGIDw8ICAwKSAvLyAoTUMpIEZsYXNoIENvbW1hbmQNCisjZGVmaW5lIAlBVDkxQ19NQ19GQ01EX1NUQVJUX1BST0cgICAgICAgICAgICgweDEpIC8vIChNQykgU3RhcnRzIHRoZSBwcm9ncmFtbWluZyBvZiB0aCBlcGFnZSBzcGVjaWZpZWQgYnkgUEFHRU4uDQorI2RlZmluZSAJQVQ5MUNfTUNfRkNNRF9MT0NLICAgICAgICAgICAgICAgICAoMHgyKSAvLyAoTUMpIFN0YXJ0cyBhIGxvY2sgc2VxdWVuY2Ugb2YgdGhlIHNlY3RvciBkZWZpbmVkIGJ5IHRoZSBiaXRzIDQgdG8gNyBvZiB0aGUgZmllbGQgUEFHRU4uDQorI2RlZmluZSAJQVQ5MUNfTUNfRkNNRF9QUk9HX0FORF9MT0NLICAgICAgICAoMHgzKSAvLyAoTUMpIFRoZSBsb2NrIHNlcXVlbmNlIGF1dG9tYXRpY2FsbHkgaGFwcGVucyBhZnRlciB0aGUgcHJvZ3JhbW1pbmcgc2VxdWVuY2UgaXMgY29tcGxldGVkLg0KKyNkZWZpbmUgCUFUOTFDX01DX0ZDTURfVU5MT0NLICAgICAgICAgICAgICAgKDB4NCkgLy8gKE1DKSBTdGFydHMgYW4gdW5sb2NrIHNlcXVlbmNlIG9mIHRoZSBzZWN0b3IgZGVmaW5lZCBieSB0aGUgYml0cyA0IHRvIDcgb2YgdGhlIGZpZWxkIFBBR0VOLg0KKyNkZWZpbmUgCUFUOTFDX01DX0ZDTURfRVJBU0VfQUxMICAgICAgICAgICAgKDB4OCkgLy8gKE1DKSBTdGFydHMgdGhlIGVyYXNlIG9mIHRoZSBlbnRpcmUgZmxhc2guSWYgYXQgbGVhc3QgYSBwYWdlIGlzIGxvY2tlZCwgdGhlIGNvbW1hbmQgaXMgY2FuY2VsbGVkLg0KKyNkZWZpbmUgCUFUOTFDX01DX0ZDTURfU0VUX0dQX05WTSAgICAgICAgICAgKDB4QikgLy8gKE1DKSBTZXQgR2VuZXJhbCBQdXJwb3NlIE5WTSBiaXRzLg0KKyNkZWZpbmUgCUFUOTFDX01DX0ZDTURfQ0xSX0dQX05WTSAgICAgICAgICAgKDB4RCkgLy8gKE1DKSBDbGVhciBHZW5lcmFsIFB1cnBvc2UgTlZNIGJpdHMuDQorI2RlZmluZSAJQVQ5MUNfTUNfRkNNRF9TRVRfU0VDVVJJVFkgICAgICAgICAoMHhGKSAvLyAoTUMpIFNldCBTZWN1cml0eSBCaXQuDQorI2RlZmluZSBBVDkxQ19NQ19QQUdFTiAgICAgICAgICAgICgweDNGRiA8PCAgOCkgLy8gKE1DKSBQYWdlIE51bWJlcg0KKyNkZWZpbmUgQVQ5MUNfTUNfS0VZICAgICAgICAgICAgICAoMHhGRiA8PCAyNCkgLy8gKE1DKSBXcml0aW5nIFByb3RlY3QgS2V5DQorLy8gLS0tLS0tLS0gTUNfRlNSIDogKE1DIE9mZnNldDogMHg2OCkgTUMgRmxhc2ggQ29tbWFuZCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX01DX1NFQ1VSSVRZICAgICAgICAgKDB4MSA8PCAgNCkgLy8gKE1DKSBTZWN1cml0eSBCaXQgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19HUE5WTTAgICAgICAgICAgICgweDEgPDwgIDgpIC8vIChNQykgU2VjdG9yIDAgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0dQTlZNMSAgICAgICAgICAgKDB4MSA8PCAgOSkgLy8gKE1DKSBTZWN0b3IgMSBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfR1BOVk0yICAgICAgICAgICAoMHgxIDw8IDEwKSAvLyAoTUMpIFNlY3RvciAyIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19HUE5WTTMgICAgICAgICAgICgweDEgPDwgMTEpIC8vIChNQykgU2VjdG9yIDMgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0dQTlZNNCAgICAgICAgICAgKDB4MSA8PCAxMikgLy8gKE1DKSBTZWN0b3IgNCBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfR1BOVk01ICAgICAgICAgICAoMHgxIDw8IDEzKSAvLyAoTUMpIFNlY3RvciA1IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19HUE5WTTYgICAgICAgICAgICgweDEgPDwgMTQpIC8vIChNQykgU2VjdG9yIDYgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0dQTlZNNyAgICAgICAgICAgKDB4MSA8PCAxNSkgLy8gKE1DKSBTZWN0b3IgNyBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MwICAgICAgICAgICAoMHgxIDw8IDE2KSAvLyAoTUMpIFNlY3RvciAwIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzEgICAgICAgICAgICgweDEgPDwgMTcpIC8vIChNQykgU2VjdG9yIDEgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTMiAgICAgICAgICAgKDB4MSA8PCAxOCkgLy8gKE1DKSBTZWN0b3IgMiBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MzICAgICAgICAgICAoMHgxIDw8IDE5KSAvLyAoTUMpIFNlY3RvciAzIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzQgICAgICAgICAgICgweDEgPDwgMjApIC8vIChNQykgU2VjdG9yIDQgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTNSAgICAgICAgICAgKDB4MSA8PCAyMSkgLy8gKE1DKSBTZWN0b3IgNSBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1M2ICAgICAgICAgICAoMHgxIDw8IDIyKSAvLyAoTUMpIFNlY3RvciA2IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzcgICAgICAgICAgICgweDEgPDwgMjMpIC8vIChNQykgU2VjdG9yIDcgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTOCAgICAgICAgICAgKDB4MSA8PCAyNCkgLy8gKE1DKSBTZWN0b3IgOCBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1M5ICAgICAgICAgICAoMHgxIDw8IDI1KSAvLyAoTUMpIFNlY3RvciA5IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzEwICAgICAgICAgICgweDEgPDwgMjYpIC8vIChNQykgU2VjdG9yIDEwIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzExICAgICAgICAgICgweDEgPDwgMjcpIC8vIChNQykgU2VjdG9yIDExIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzEyICAgICAgICAgICgweDEgPDwgMjgpIC8vIChNQykgU2VjdG9yIDEyIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzEzICAgICAgICAgICgweDEgPDwgMjkpIC8vIChNQykgU2VjdG9yIDEzIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzE0ICAgICAgICAgICgweDEgPDwgMzApIC8vIChNQykgU2VjdG9yIDE0IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzE1ICAgICAgICAgICgweDEgPDwgMzEpIC8vIChNQykgU2VjdG9yIDE1IExvY2sgU3RhdHVzDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBTZXJpYWwgUGFyYWxsZWwgSW50ZXJmYWNlICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1NQSSBzdHJ1Y3R1cmUgKioqICovDQotI2RlZmluZSBTUElfQ1IgICAgICAgICAgICAgICAgICAgICAgICggMCApICAgICAgICAgICAvKiBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBTUElfTVIgICAgICAgICAgICAgICAgICAgICAgICggNCApICAgICAgICAgICAvKiBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBTUElfUkRSICAgICAgICAgICAgICAgICAgICAgICggOCApICAgICAgICAgICAvKiBSZWNlaXZlIERhdGEgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNQSV9URFIgICAgICAgICAgICAgICAgICAgICAgKCAxMiApICAgICAgICAgIC8qIFRyYW5zbWl0IERhdGEgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNQSV9TUiAgICAgICAgICAgICAgICAgICAgICAgKCAxNiApICAgICAgICAgIC8qIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1BJX0lFUiAgICAgICAgICAgICAgICAgICAgICAoIDIwICkgICAgICAgICAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1BJX0lEUiAgICAgICAgICAgICAgICAgICAgICAoIDI0ICkgICAgICAgICAgLyogSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNQSV9JTVIgICAgICAgICAgICAgICAgICAgICAgKCAyOCApICAgICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBTUElfQ1NSICAgICAgICAgICAgICAgICAgICAgICggNDggKSAgICAgICAgICAvKiBDaGlwIFNlbGVjdCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1BJX1JQUiAgICAgICAgICAgICAgICAgICAgICAoIDI1NiApICAgICAgICAgLyogUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBTUElfUkNSICAgICAgICAgICAgICAgICAgICAgICggMjYwICkgICAgICAgICAvKiBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNQSV9UUFIgICAgICAgICAgICAgICAgICAgICAgKCAyNjQgKSAgICAgICAgIC8qIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNQSV9UQ1IgICAgICAgICAgICAgICAgICAgICAgKCAyNjggKSAgICAgICAgIC8qIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNQSV9STlBSICAgICAgICAgICAgICAgICAgICAgKCAyNzIgKSAgICAgICAgIC8qIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBTUElfUk5DUiAgICAgICAgICAgICAgICAgICAgICggMjc2ICkgICAgICAgICAvKiBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1BJX1ROUFIgICAgICAgICAgICAgICAgICAgICAoIDI4MCApICAgICAgICAgLyogVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBTUElfVE5DUiAgICAgICAgICAgICAgICAgICAgICggMjg0ICkgICAgICAgICAvKiBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNQSV9QVENSICAgICAgICAgICAgICAgICAgICAgKCAyODggKSAgICAgICAgIC8qIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBTUElfUFRTUiAgICAgICAgICAgICAgICAgICAgICggMjkyICkgICAgICAgICAvKiBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotLyogLS0tLS0tLS0gU1BJX0NSIDogKFNQSSBPZmZzZXQ6IDB4MCkgU1BJIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9TUElFTiAgICAgICAgICAgICAgKCAweDEgPDwgMCApICAgIC8qIChTUEkpIFNQSSBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9TUElESVMgICAgICAgICAgICAgKCAweDEgPDwgMSApICAgIC8qIChTUEkpIFNQSSBEaXNhYmxlICovDQotI2RlZmluZSBBVDkxQ19TUElfU1dSU1QgICAgICAgICAgICAgICggMHgxIDw8IDcgKSAgICAvKiAoU1BJKSBTUEkgU29mdHdhcmUgcmVzZXQgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9MQVNUWEZFUiAgICAgICAgICAgKCAweDEgPDwgMjQgKSAgIC8qIChTUEkpIFNQSSBMYXN0IFRyYW5zZmVyICovDQotLyogLS0tLS0tLS0gU1BJX01SIDogKFNQSSBPZmZzZXQ6IDB4NCkgU1BJIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9NU1RSICAgICAgICAgICAgICAgKCAweDEgPDwgMCApICAgIC8qIChTUEkpIE1hc3Rlci9TbGF2ZSBNb2RlICovDQotI2RlZmluZSBBVDkxQ19TUElfUFMgICAgICAgICAgICAgICAgICggMHgxIDw8IDEgKSAgICAvKiAoU1BJKSBQZXJpcGhlcmFsIFNlbGVjdCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NQSV9QU19GSVhFRCAgICAgICAoIDB4MCA8PCAxICkgICAgLyogKFNQSSkgRml4ZWQgUGVyaXBoZXJhbCBTZWxlY3QgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TUElfUFNfVkFSSUFCTEUgICAgKCAweDEgPDwgMSApICAgIC8qIChTUEkpIFZhcmlhYmxlIFBlcmlwaGVyYWwgU2VsZWN0ICovDQotI2RlZmluZSBBVDkxQ19TUElfUENTREVDICAgICAgICAgICAgICggMHgxIDw8IDIgKSAgICAvKiAoU1BJKSBDaGlwIFNlbGVjdCBEZWNvZGUgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9GRElWICAgICAgICAgICAgICAgKCAweDEgPDwgMyApICAgIC8qIChTUEkpIENsb2NrIFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX01PREZESVMgICAgICAgICAgICAoIDB4MSA8PCA0ICkgICAgLyogKFNQSSkgTW9kZSBGYXVsdCBEZXRlY3Rpb24gKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9MTEIgICAgICAgICAgICAgICAgKCAweDEgPDwgNyApICAgIC8qIChTUEkpIENsb2NrIFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX1BDUyAgICAgICAgICAgICAgICAoIDB4RiA8PCAxNiApICAgLyogKFNQSSkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX0RMWUJDUyAgICAgICAgICAgICAoIDB4RkYgPDwgMjQgKSAgLyogKFNQSSkgRGVsYXkgQmV0d2VlbiBDaGlwIFNlbGVjdHMgKi8NCi0vKiAtLS0tLS0tLSBTUElfUkRSIDogKFNQSSBPZmZzZXQ6IDB4OCkgUmVjZWl2ZSBEYXRhIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19TUElfUkQgICAgICAgICAgICAgICAgICggMHhGRkZGIDw8IDAgKSAvKiAoU1BJKSBSZWNlaXZlIERhdGEgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9SUENTICAgICAgICAgICAgICAgKCAweEYgPDwgMTYgKSAgIC8qIChTUEkpIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgU3RhdHVzICovDQotLyogLS0tLS0tLS0gU1BJX1REUiA6IChTUEkgT2Zmc2V0OiAweGMpIFRyYW5zbWl0IERhdGEgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9URCAgICAgICAgICAgICAgICAgKCAweEZGRkYgPDwgMCApIC8qIChTUEkpIFRyYW5zbWl0IERhdGEgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9UUENTICAgICAgICAgICAgICAgKCAweEYgPDwgMTYgKSAgIC8qIChTUEkpIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgU3RhdHVzICovDQotLyogLS0tLS0tLS0gU1BJX1NSIDogKFNQSSBPZmZzZXQ6IDB4MTApIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX1JEUkYgICAgICAgICAgICAgICAoIDB4MSA8PCAwICkgICAgLyogKFNQSSkgUmVjZWl2ZSBEYXRhIFJlZ2lzdGVyIEZ1bGwgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9URFJFICAgICAgICAgICAgICAgKCAweDEgPDwgMSApICAgIC8qIChTUEkpIFRyYW5zbWl0IERhdGEgUmVnaXN0ZXIgRW1wdHkgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9NT0RGICAgICAgICAgICAgICAgKCAweDEgPDwgMiApICAgIC8qIChTUEkpIE1vZGUgRmF1bHQgRXJyb3IgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9PVlJFUyAgICAgICAgICAgICAgKCAweDEgPDwgMyApICAgIC8qIChTUEkpIE92ZXJydW4gRXJyb3IgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19TUElfRU5EUlggICAgICAgICAgICAgICggMHgxIDw8IDQgKSAgICAvKiAoU1BJKSBFbmQgb2YgUmVjZWl2ZXIgVHJhbnNmZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9FTkRUWCAgICAgICAgICAgICAgKCAweDEgPDwgNSApICAgIC8qIChTUEkpIEVuZCBvZiBSZWNlaXZlciBUcmFuc2ZlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX1JYQlVGRiAgICAgICAgICAgICAoIDB4MSA8PCA2ICkgICAgLyogKFNQSSkgUlhCVUZGIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX1RYQlVGRSAgICAgICAgICAgICAoIDB4MSA8PCA3ICkgICAgLyogKFNQSSkgVFhCVUZFIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX05TU1IgICAgICAgICAgICAgICAoIDB4MSA8PCA4ICkgICAgLyogKFNQSSkgTlNTUiBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9UWEVNUFRZICAgICAgICAgICAgKCAweDEgPDwgOSApICAgIC8qIChTUEkpIFRYRU1QVFkgSW50ZXJydXB0ICovDQotI2RlZmluZSBBVDkxQ19TUElfU1BJRU5TICAgICAgICAgICAgICggMHgxIDw8IDE2ICkgICAvKiAoU1BJKSBFbmFibGUgU3RhdHVzICovDQotLyogLS0tLS0tLS0gU1BJX0lFUiA6IChTUEkgT2Zmc2V0OiAweDE0KSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gU1BJX0lEUiA6IChTUEkgT2Zmc2V0OiAweDE4KSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFNQSV9JTVIgOiAoU1BJIE9mZnNldDogMHgxYykgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBTUElfQ1NSIDogKFNQSSBPZmZzZXQ6IDB4MzApIENoaXAgU2VsZWN0IFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19TUElfQ1BPTCAgICAgICAgICAgKCAweDEgPDwgMCApICAgLyogKFNQSSkgQ2xvY2sgUG9sYXJpdHkgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9OQ1BIQSAgICAgICAgICAoIDB4MSA8PCAxICkgICAvKiAoU1BJKSBDbG9jayBQaGFzZSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX0NTQUFUICAgICAgICAgICggMHgxIDw8IDMgKSAgIC8qIChTUEkpIENoaXAgU2VsZWN0IEFjdGl2ZSBBZnRlciBUcmFuc2ZlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX0JJVFMgICAgICAgICAgICggMHhGIDw8IDQgKSAgIC8qIChTUEkpIEJpdHMgUGVyIFRyYW5zZmVyICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1BJX0JJVFNfOCAgICAgKCAweDAgPDwgNCApICAgLyogKFNQSSkgOCBCaXRzIFBlciB0cmFuc2ZlciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NQSV9CSVRTXzkgICAgICggMHgxIDw8IDQgKSAgIC8qIChTUEkpIDkgQml0cyBQZXIgdHJhbnNmZXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TUElfQklUU18xMCAgICAoIDB4MiA8PCA0ICkgICAvKiAoU1BJKSAxMCBCaXRzIFBlciB0cmFuc2ZlciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NQSV9CSVRTXzExICAgICggMHgzIDw8IDQgKSAgIC8qIChTUEkpIDExIEJpdHMgUGVyIHRyYW5zZmVyICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1BJX0JJVFNfMTIgICAgKCAweDQgPDwgNCApICAgLyogKFNQSSkgMTIgQml0cyBQZXIgdHJhbnNmZXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TUElfQklUU18xMyAgICAoIDB4NSA8PCA0ICkgICAvKiAoU1BJKSAxMyBCaXRzIFBlciB0cmFuc2ZlciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NQSV9CSVRTXzE0ICAgICggMHg2IDw8IDQgKSAgIC8qIChTUEkpIDE0IEJpdHMgUGVyIHRyYW5zZmVyICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1BJX0JJVFNfMTUgICAgKCAweDcgPDwgNCApICAgLyogKFNQSSkgMTUgQml0cyBQZXIgdHJhbnNmZXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TUElfQklUU18xNiAgICAoIDB4OCA8PCA0ICkgICAvKiAoU1BJKSAxNiBCaXRzIFBlciB0cmFuc2ZlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX1NDQlIgICAgICAgICAgICggMHhGRiA8PCA4ICkgIC8qIChTUEkpIFNlcmlhbCBDbG9jayBCYXVkIFJhdGUgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9ETFlCUyAgICAgICAgICAoIDB4RkYgPDwgMTYgKSAvKiAoU1BJKSBEZWxheSBCZWZvcmUgU1BDSyAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX0RMWUJDVCAgICAgICAgICggMHhGRiA8PCAyNCApIC8qIChTUEkpIERlbGF5IEJldHdlZW4gQ29uc2VjdXRpdmUgVHJhbnNmZXJzICovDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBTZXJpYWwgUGFyYWxsZWwgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1NQSSBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBTUElfQ1IgICAgICAgICAgKCAwKSAvLyBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBTUElfTVIgICAgICAgICAgKCA0KSAvLyBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBTUElfUkRSICAgICAgICAgKCA4KSAvLyBSZWNlaXZlIERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIFNQSV9URFIgICAgICAgICAoMTIpIC8vIFRyYW5zbWl0IERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIFNQSV9TUiAgICAgICAgICAoMTYpIC8vIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgU1BJX0lFUiAgICAgICAgICgyMCkgLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1BJX0lEUiAgICAgICAgICgyNCkgLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIFNQSV9JTVIgICAgICAgICAoMjgpIC8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBTUElfQ1NSICAgICAgICAgKDQ4KSAvLyBDaGlwIFNlbGVjdCBSZWdpc3Rlcg0KKyNkZWZpbmUgU1BJX1JQUiAgICAgICAgICgyNTYpIC8vIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgU1BJX1JDUiAgICAgICAgICgyNjApIC8vIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgU1BJX1RQUiAgICAgICAgICgyNjQpIC8vIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFNQSV9UQ1IgICAgICAgICAoMjY4KSAvLyBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBTUElfUk5QUiAgICAgICAgKDI3MikgLy8gUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFNQSV9STkNSICAgICAgICAoMjc2KSAvLyBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgU1BJX1ROUFIgICAgICAgICgyODApIC8vIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgU1BJX1ROQ1IgICAgICAgICgyODQpIC8vIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgU1BJX1BUQ1IgICAgICAgICgyODgpIC8vIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBTUElfUFRTUiAgICAgICAgKDI5MikgLy8gUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKy8vIC0tLS0tLS0tIFNQSV9DUiA6IChTUEkgT2Zmc2V0OiAweDApIFNQSSBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1BJX1NQSUVOICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoU1BJKSBTUEkgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19TUElfU1BJRElTICAgICAgICAgICgweDEgPDwgIDEpIC8vIChTUEkpIFNQSSBEaXNhYmxlDQorI2RlZmluZSBBVDkxQ19TUElfU1dSU1QgICAgICAgICAgICgweDEgPDwgIDcpIC8vIChTUEkpIFNQSSBTb2Z0d2FyZSByZXNldA0KKyNkZWZpbmUgQVQ5MUNfU1BJX0xBU1RYRkVSICAgICAgICAoMHgxIDw8IDI0KSAvLyAoU1BJKSBTUEkgTGFzdCBUcmFuc2Zlcg0KKy8vIC0tLS0tLS0tIFNQSV9NUiA6IChTUEkgT2Zmc2V0OiAweDQpIFNQSSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1BJX01TVFIgICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoU1BJKSBNYXN0ZXIvU2xhdmUgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX1BTICAgICAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoU1BJKSBQZXJpcGhlcmFsIFNlbGVjdA0KKyNkZWZpbmUgCUFUOTFDX1NQSV9QU19GSVhFRCAgICAgICAgICAgICAgICAoMHgwIDw8ICAxKSAvLyAoU1BJKSBGaXhlZCBQZXJpcGhlcmFsIFNlbGVjdA0KKyNkZWZpbmUgCUFUOTFDX1NQSV9QU19WQVJJQUJMRSAgICAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoU1BJKSBWYXJpYWJsZSBQZXJpcGhlcmFsIFNlbGVjdA0KKyNkZWZpbmUgQVQ5MUNfU1BJX1BDU0RFQyAgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoU1BJKSBDaGlwIFNlbGVjdCBEZWNvZGUNCisjZGVmaW5lIEFUOTFDX1NQSV9GRElWICAgICAgICAgICAgKDB4MSA8PCAgMykgLy8gKFNQSSkgQ2xvY2sgU2VsZWN0aW9uDQorI2RlZmluZSBBVDkxQ19TUElfTU9ERkRJUyAgICAgICAgICgweDEgPDwgIDQpIC8vIChTUEkpIE1vZGUgRmF1bHQgRGV0ZWN0aW9uDQorI2RlZmluZSBBVDkxQ19TUElfTExCICAgICAgICAgICAgICgweDEgPDwgIDcpIC8vIChTUEkpIENsb2NrIFNlbGVjdGlvbg0KKyNkZWZpbmUgQVQ5MUNfU1BJX1BDUyAgICAgICAgICAgICAoMHhGIDw8IDE2KSAvLyAoU1BJKSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0DQorI2RlZmluZSBBVDkxQ19TUElfRExZQkNTICAgICAgICAgICgweEZGIDw8IDI0KSAvLyAoU1BJKSBEZWxheSBCZXR3ZWVuIENoaXAgU2VsZWN0cw0KKy8vIC0tLS0tLS0tIFNQSV9SRFIgOiAoU1BJIE9mZnNldDogMHg4KSBSZWNlaXZlIERhdGEgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TUElfUkQgICAgICAgICAgICAgICgweEZGRkYgPDwgIDApIC8vIChTUEkpIFJlY2VpdmUgRGF0YQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX1JQQ1MgICAgICAgICAgICAoMHhGIDw8IDE2KSAvLyAoU1BJKSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IFN0YXR1cw0KKy8vIC0tLS0tLS0tIFNQSV9URFIgOiAoU1BJIE9mZnNldDogMHhjKSBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1BJX1REICAgICAgICAgICAgICAoMHhGRkZGIDw8ICAwKSAvLyAoU1BJKSBUcmFuc21pdCBEYXRhDQorI2RlZmluZSBBVDkxQ19TUElfVFBDUyAgICAgICAgICAgICgweEYgPDwgMTYpIC8vIChTUEkpIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgU3RhdHVzDQorLy8gLS0tLS0tLS0gU1BJX1NSIDogKFNQSSBPZmZzZXQ6IDB4MTApIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NQSV9SRFJGICAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFNQSSkgUmVjZWl2ZSBEYXRhIFJlZ2lzdGVyIEZ1bGwNCisjZGVmaW5lIEFUOTFDX1NQSV9URFJFICAgICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKFNQSSkgVHJhbnNtaXQgRGF0YSBSZWdpc3RlciBFbXB0eQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX01PREYgICAgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoU1BJKSBNb2RlIEZhdWx0IEVycm9yDQorI2RlZmluZSBBVDkxQ19TUElfT1ZSRVMgICAgICAgICAgICgweDEgPDwgIDMpIC8vIChTUEkpIE92ZXJydW4gRXJyb3IgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19TUElfRU5EUlggICAgICAgICAgICgweDEgPDwgIDQpIC8vIChTUEkpIEVuZCBvZiBSZWNlaXZlciBUcmFuc2Zlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJX0VORFRYICAgICAgICAgICAoMHgxIDw8ICA1KSAvLyAoU1BJKSBFbmQgb2YgUmVjZWl2ZXIgVHJhbnNmZXINCisjZGVmaW5lIEFUOTFDX1NQSV9SWEJVRkYgICAgICAgICAgKDB4MSA8PCAgNikgLy8gKFNQSSkgUlhCVUZGIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfU1BJX1RYQlVGRSAgICAgICAgICAoMHgxIDw8ICA3KSAvLyAoU1BJKSBUWEJVRkUgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19TUElfTlNTUiAgICAgICAgICAgICgweDEgPDwgIDgpIC8vIChTUEkpIE5TU1IgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19TUElfVFhFTVBUWSAgICAgICAgICgweDEgPDwgIDkpIC8vIChTUEkpIFRYRU1QVFkgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19TUElfU1BJRU5TICAgICAgICAgICgweDEgPDwgMTYpIC8vIChTUEkpIEVuYWJsZSBTdGF0dXMNCisvLyAtLS0tLS0tLSBTUElfSUVSIDogKFNQSSBPZmZzZXQ6IDB4MTQpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gU1BJX0lEUiA6IChTUEkgT2Zmc2V0OiAweDE4KSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBTUElfSU1SIDogKFNQSSBPZmZzZXQ6IDB4MWMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFNQSV9DU1IgOiAoU1BJIE9mZnNldDogMHgzMCkgQ2hpcCBTZWxlY3QgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TUElfQ1BPTCAgICAgICAgICAgICgweDEgPDwgIDApIC8vIChTUEkpIENsb2NrIFBvbGFyaXR5DQorI2RlZmluZSBBVDkxQ19TUElfTkNQSEEgICAgICAgICAgICgweDEgPDwgIDEpIC8vIChTUEkpIENsb2NrIFBoYXNlDQorI2RlZmluZSBBVDkxQ19TUElfQ1NBQVQgICAgICAgICAgICgweDEgPDwgIDMpIC8vIChTUEkpIENoaXAgU2VsZWN0IEFjdGl2ZSBBZnRlciBUcmFuc2Zlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJX0JJVFMgICAgICAgICAgICAoMHhGIDw8ICA0KSAvLyAoU1BJKSBCaXRzIFBlciBUcmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NQSV9CSVRTXzggICAgICAgICAgICAgICAgICAgICgweDAgPDwgIDQpIC8vIChTUEkpIDggQml0cyBQZXIgdHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TUElfQklUU185ICAgICAgICAgICAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoU1BJKSA5IEJpdHMgUGVyIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1BJX0JJVFNfMTAgICAgICAgICAgICAgICAgICAgKDB4MiA8PCAgNCkgLy8gKFNQSSkgMTAgQml0cyBQZXIgdHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TUElfQklUU18xMSAgICAgICAgICAgICAgICAgICAoMHgzIDw8ICA0KSAvLyAoU1BJKSAxMSBCaXRzIFBlciB0cmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NQSV9CSVRTXzEyICAgICAgICAgICAgICAgICAgICgweDQgPDwgIDQpIC8vIChTUEkpIDEyIEJpdHMgUGVyIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1BJX0JJVFNfMTMgICAgICAgICAgICAgICAgICAgKDB4NSA8PCAgNCkgLy8gKFNQSSkgMTMgQml0cyBQZXIgdHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TUElfQklUU18xNCAgICAgICAgICAgICAgICAgICAoMHg2IDw8ICA0KSAvLyAoU1BJKSAxNCBCaXRzIFBlciB0cmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NQSV9CSVRTXzE1ICAgICAgICAgICAgICAgICAgICgweDcgPDwgIDQpIC8vIChTUEkpIDE1IEJpdHMgUGVyIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1BJX0JJVFNfMTYgICAgICAgICAgICAgICAgICAgKDB4OCA8PCAgNCkgLy8gKFNQSSkgMTYgQml0cyBQZXIgdHJhbnNmZXINCisjZGVmaW5lIEFUOTFDX1NQSV9TQ0JSICAgICAgICAgICAgKDB4RkYgPDwgIDgpIC8vIChTUEkpIFNlcmlhbCBDbG9jayBCYXVkIFJhdGUNCisjZGVmaW5lIEFUOTFDX1NQSV9ETFlCUyAgICAgICAgICAgKDB4RkYgPDwgMTYpIC8vIChTUEkpIERlbGF5IEJlZm9yZSBTUENLDQorI2RlZmluZSBBVDkxQ19TUElfRExZQkNUICAgICAgICAgICgweEZGIDw8IDI0KSAvLyAoU1BJKSBEZWxheSBCZXR3ZWVuIENvbnNlY3V0aXZlIFRyYW5zZmVycw0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVXNhcnQgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfVVNBUlQgc3RydWN0dXJlICoqKiAqLw0KLSNkZWZpbmUgVVNfQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAwICkgICAgICAgICAvKiBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBVU19NUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDQgKSAgICAgICAgIC8qIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFVTX0lFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICggOCApICAgICAgICAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVVNfSURSICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAxMiApICAgICAgICAvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVVNfSU1SICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAxNiApICAgICAgICAvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVVNfQ1NSICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAyMCApICAgICAgICAvKiBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVVNfUkhSICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAyNCApICAgICAgICAvKiBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyICovDQotI2RlZmluZSBVU19USFIgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDI4ICkgICAgICAgIC8qIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFVTX0JSR1IgICAgICAgICAgICAgICAgICAgICAgICAgICggMzIgKSAgICAgICAgLyogQmF1ZCBSYXRlIEdlbmVyYXRvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVVNfUlRPUiAgICAgICAgICAgICAgICAgICAgICAgICAgKCAzNiApICAgICAgICAvKiBSZWNlaXZlciBUaW1lLW91dCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVVNfVFRHUiAgICAgICAgICAgICAgICAgICAgICAgICAgKCA0MCApICAgICAgICAvKiBUcmFuc21pdHRlciBUaW1lLWd1YXJkIFJlZ2lzdGVyICovDQotI2RlZmluZSBVU19GSURJICAgICAgICAgICAgICAgICAgICAgICAgICAoIDY0ICkgICAgICAgIC8qIEZJX0RJX1JhdGlvIFJlZ2lzdGVyICovDQotI2RlZmluZSBVU19ORVIgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDY4ICkgICAgICAgIC8qIE5iIEVycm9ycyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVVNfSUYgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCA3NiApICAgICAgICAvKiBJUkRBX0ZJTFRFUiBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVVNfUlBSICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAyNTYgKSAgICAgICAvKiBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFVTX1JDUiAgICAgICAgICAgICAgICAgICAgICAgICAgICggMjYwICkgICAgICAgLyogUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBVU19UUFIgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDI2NCApICAgICAgIC8qIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFVTX1RDUiAgICAgICAgICAgICAgICAgICAgICAgICAgICggMjY4ICkgICAgICAgLyogVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVVNfUk5QUiAgICAgICAgICAgICAgICAgICAgICAgICAgKCAyNzIgKSAgICAgICAvKiBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVVNfUk5DUiAgICAgICAgICAgICAgICAgICAgICAgICAgKCAyNzYgKSAgICAgICAvKiBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVVNfVE5QUiAgICAgICAgICAgICAgICAgICAgICAgICAgKCAyODAgKSAgICAgICAvKiBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFVTX1ROQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICggMjg0ICkgICAgICAgLyogVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBVU19QVENSICAgICAgICAgICAgICAgICAgICAgICAgICAoIDI4OCApICAgICAgIC8qIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBVU19QVFNSICAgICAgICAgICAgICAgICAgICAgICAgICAoIDI5MiApICAgICAgIC8qIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0vKiAtLS0tLS0tLSBVU19DUiA6IChVU0FSVCBPZmZzZXQ6IDB4MCkgRGVidWcgVW5pdCBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19VU19TVFRCUksgICAgICAgICAgICAgICAgICAoIDB4MSA8PCA5ICkgIC8qIChVU0FSVCkgU3RhcnQgQnJlYWsgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1NUUEJSSyAgICAgICAgICAgICAgICAgICggMHgxIDw8IDEwICkgLyogKFVTQVJUKSBTdG9wIEJyZWFrICovDQotI2RlZmluZSBBVDkxQ19VU19TVFRUTyAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxMSApIC8qIChVU0FSVCkgU3RhcnQgVGltZS1vdXQgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1NFTkRBICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDEyICkgLyogKFVTQVJUKSBTZW5kIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1JTVElUICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDEzICkgLyogKFVTQVJUKSBSZXNldCBJdGVyYXRpb25zICovDQotI2RlZmluZSBBVDkxQ19VU19SU1ROQUNLICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxNCApIC8qIChVU0FSVCkgUmVzZXQgTm9uIEFja25vd2xlZGdlICovDQotI2RlZmluZSBBVDkxQ19VU19SRVRUTyAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxNSApIC8qIChVU0FSVCkgUmVhcm0gVGltZS1vdXQgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX0RUUkVOICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDE2ICkgLyogKFVTQVJUKSBEYXRhIFRlcm1pbmFsIHJlYWR5IEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfRFRSRElTICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTcgKSAvKiAoVVNBUlQpIERhdGEgVGVybWluYWwgcmVhZHkgRGlzYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfUlRTRU4gICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTggKSAvKiAoVVNBUlQpIFJlcXVlc3QgdG8gU2VuZCBlbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1JUU0RJUyAgICAgICAgICAgICAgICAgICggMHgxIDw8IDE5ICkgLyogKFVTQVJUKSBSZXF1ZXN0IHRvIFNlbmQgRGlzYWJsZSAqLw0KLS8qIC0tLS0tLS0tIFVTX01SIDogKFVTQVJUIE9mZnNldDogMHg0KSBEZWJ1ZyBVbml0IE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1VTTU9ERSAgICAgICAgICAgICAgICAgICggMHhGIDw8IDAgKSAgLyogKFVTQVJUKSBVc2FydCBtb2RlICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfVVNNT0RFX05PUk1BTCAgICAgICAoIDB4MCApICAgICAgIC8qIChVU0FSVCkgTm9ybWFsICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfVVNNT0RFX1JTNDg1ICAgICAgICAoIDB4MSApICAgICAgIC8qIChVU0FSVCkgUlM0ODUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19VU01PREVfSFdIU0ggICAgICAgICggMHgyICkgICAgICAgLyogKFVTQVJUKSBIYXJkd2FyZSBIYW5kc2hha2luZyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX1VTTU9ERV9NT0RFTSAgICAgICAgKCAweDMgKSAgICAgICAvKiAoVVNBUlQpIE1vZGVtICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfVVNNT0RFX0lTTzc4MTZfMCAgICAoIDB4NCApICAgICAgIC8qIChVU0FSVCkgSVNPNzgxNiBwcm90b2NvbDogVCA9IDAgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19VU01PREVfSVNPNzgxNl8xICAgICggMHg2ICkgICAgICAgLyogKFVTQVJUKSBJU083ODE2IHByb3RvY29sOiBUID0gMSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX1VTTU9ERV9JUkRBICAgICAgICAgKCAweDggKSAgICAgICAvKiAoVVNBUlQpIElyREEgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19VU01PREVfU1dIU0ggICAgICAgICggMHhDICkgICAgICAgLyogKFVTQVJUKSBTb2Z0d2FyZSBIYW5kc2hha2luZyAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfQ0xLUyAgICAgICAgICAgICAgICAgICAgKCAweDMgPDwgNCApICAvKiAoVVNBUlQpIENsb2NrIFNlbGVjdGlvbiAoQmF1ZCBSYXRlIGdlbmVyYXRvciBJbnB1dCBDbG9jayAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX0NMS1NfQ0xPQ0sgICAgICAgICAgKCAweDAgPDwgNCApICAvKiAoVVNBUlQpIENsb2NrICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfQ0xLU19GRElWMSAgICAgICAgICAoIDB4MSA8PCA0ICkgIC8qIChVU0FSVCkgZmRpdjEgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19DTEtTX1NMT1cgICAgICAgICAgICggMHgyIDw8IDQgKSAgLyogKFVTQVJUKSBzbG93X2Nsb2NrIChBUk0pICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfQ0xLU19FWFQgICAgICAgICAgICAoIDB4MyA8PCA0ICkgIC8qIChVU0FSVCkgRXh0ZXJuYWwgKFNDSykgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX0NIUkwgICAgICAgICAgICAgICAgICAgICggMHgzIDw8IDYgKSAgLyogKFVTQVJUKSBDbG9jayBTZWxlY3Rpb24gKEJhdWQgUmF0ZSBnZW5lcmF0b3IgSW5wdXQgQ2xvY2sgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19DSFJMXzVfQklUUyAgICAgICAgICggMHgwIDw8IDYgKSAgLyogKFVTQVJUKSBDaGFyYWN0ZXIgTGVuZ3RoOiA1IGJpdHMgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19DSFJMXzZfQklUUyAgICAgICAgICggMHgxIDw8IDYgKSAgLyogKFVTQVJUKSBDaGFyYWN0ZXIgTGVuZ3RoOiA2IGJpdHMgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19DSFJMXzdfQklUUyAgICAgICAgICggMHgyIDw8IDYgKSAgLyogKFVTQVJUKSBDaGFyYWN0ZXIgTGVuZ3RoOiA3IGJpdHMgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19DSFJMXzhfQklUUyAgICAgICAgICggMHgzIDw8IDYgKSAgLyogKFVTQVJUKSBDaGFyYWN0ZXIgTGVuZ3RoOiA4IGJpdHMgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1NZTkMgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDggKSAgLyogKFVTQVJUKSBTeW5jaHJvbm91cyBNb2RlIFNlbGVjdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfTkJTVE9QICAgICAgICAgICAgICAgICAgKCAweDMgPDwgMTIgKSAvKiAoVVNBUlQpIE51bWJlciBvZiBTdG9wIGJpdHMgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19OQlNUT1BfMV9CSVQgICAgICAgICggMHgwIDw8IDEyICkgLyogKFVTQVJUKSAxIHN0b3AgYml0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfTkJTVE9QXzE1X0JJVCAgICAgICAoIDB4MSA8PCAxMiApIC8qIChVU0FSVCkgQXN5bmNocm9ub3VzIChTWU5DPTApIDIgc3RvcCBiaXRzIFN5bmNocm9ub3VzIChTWU5DPTEpIDIgc3RvcCBiaXRzICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfTkJTVE9QXzJfQklUICAgICAgICAoIDB4MiA8PCAxMiApIC8qIChVU0FSVCkgMiBzdG9wIGJpdHMgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX01TQkYgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDE2ICkgLyogKFVTQVJUKSBCaXQgT3JkZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX01PREU5ICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDE3ICkgLyogKFVTQVJUKSA5LWJpdCBDaGFyYWN0ZXIgbGVuZ3RoICovDQotI2RlZmluZSBBVDkxQ19VU19DS0xPICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxOCApIC8qIChVU0FSVCkgQ2xvY2sgT3V0cHV0IFNlbGVjdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfT1ZFUiAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTkgKSAvKiAoVVNBUlQpIE92ZXIgU2FtcGxpbmcgTW9kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfSU5BQ0sgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMjAgKSAvKiAoVVNBUlQpIEluaGliaXQgTm9uIEFja25vd2xlZGdlICovDQotI2RlZmluZSBBVDkxQ19VU19EU05BQ0sgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAyMSApIC8qIChVU0FSVCkgRGlzYWJsZSBTdWNjZXNzaXZlIE5BQ0sgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX01BWF9JVEVSICAgICAgICAgICAgICAgICggMHgxIDw8IDI0ICkgLyogKFVTQVJUKSBOdW1iZXIgb2YgUmVwZXRpdGlvbnMgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX0ZJTFRFUiAgICAgICAgICAgICAgICAgICggMHgxIDw8IDI4ICkgLyogKFVTQVJUKSBSZWNlaXZlIExpbmUgRmlsdGVyICovDQotLyogLS0tLS0tLS0gVVNfSUVSIDogKFVTQVJUIE9mZnNldDogMHg4KSBEZWJ1ZyBVbml0IEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1JYQlJLICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDIgKSAgLyogKFVTQVJUKSBCcmVhayBSZWNlaXZlZC9FbmQgb2YgQnJlYWsgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1RJTUVPVVQgICAgICAgICAgICAgICAgICggMHgxIDw8IDggKSAgLyogKFVTQVJUKSBSZWNlaXZlciBUaW1lLW91dCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfSVRFUkFUSU9OICAgICAgICAgICAgICAgKCAweDEgPDwgMTAgKSAvKiAoVVNBUlQpIE1heCBudW1iZXIgb2YgUmVwZXRpdGlvbnMgUmVhY2hlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfTkFDSyAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTMgKSAvKiAoVVNBUlQpIE5vbiBBY2tub3dsZWRnZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfUklJQyAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTYgKSAvKiAoVVNBUlQpIFJpbmcgSU5kaWNhdG9yIElucHV0IENoYW5nZSBGbGFnICovDQotI2RlZmluZSBBVDkxQ19VU19EU1JJQyAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxNyApIC8qIChVU0FSVCkgRGF0YSBTZXQgUmVhZHkgSW5wdXQgQ2hhbmdlIEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX0RDRElDICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDE4ICkgLyogKFVTQVJUKSBEYXRhIENhcnJpZXIgRmxhZyAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfQ1RTSUMgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTkgKSAvKiAoVVNBUlQpIENsZWFyIFRvIFNlbmQgSW5wdXQgQ2hhbmdlIEZsYWcgKi8NCi0vKiAtLS0tLS0tLSBVU19JRFIgOiAoVVNBUlQgT2Zmc2V0OiAweGMpIERlYnVnIFVuaXQgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBVU19JTVIgOiAoVVNBUlQgT2Zmc2V0OiAweDEwKSBEZWJ1ZyBVbml0IEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gVVNfQ1NSIDogKFVTQVJUIE9mZnNldDogMHgxNCkgRGVidWcgVW5pdCBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfUkkgICAgICggMHgxIDw8IDIwICkgICAgICAgICAvKiAoVVNBUlQpIEltYWdlIG9mIFJJIElucHV0ICovDQotI2RlZmluZSBBVDkxQ19VU19EU1IgICAgKCAweDEgPDwgMjEgKSAgICAgICAgIC8qIChVU0FSVCkgSW1hZ2Ugb2YgRFNSIElucHV0ICovDQotI2RlZmluZSBBVDkxQ19VU19EQ0QgICAgKCAweDEgPDwgMjIgKSAgICAgICAgIC8qIChVU0FSVCkgSW1hZ2Ugb2YgRENEIElucHV0ICovDQotI2RlZmluZSBBVDkxQ19VU19DVFMgICAgKCAweDEgPDwgMjMgKSAgICAgICAgIC8qIChVU0FSVCkgSW1hZ2Ugb2YgQ1RTIElucHV0ICovDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBVc2FydA0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19VU0FSVCBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBVU19DUiAgICAgICAgICAgKCAwKSAvLyBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBVU19NUiAgICAgICAgICAgKCA0KSAvLyBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBVU19JRVIgICAgICAgICAgKCA4KSAvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBVU19JRFIgICAgICAgICAgKDEyKSAvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgVVNfSU1SICAgICAgICAgICgxNikgLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIFVTX0NTUiAgICAgICAgICAoMjApIC8vIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBVU19SSFIgICAgICAgICAgKDI0KSAvLyBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBVU19USFIgICAgICAgICAgKDI4KSAvLyBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBVU19CUkdSICAgICAgICAgKDMyKSAvLyBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBVU19SVE9SICAgICAgICAgKDM2KSAvLyBSZWNlaXZlciBUaW1lLW91dCBSZWdpc3Rlcg0KKyNkZWZpbmUgVVNfVFRHUiAgICAgICAgICg0MCkgLy8gVHJhbnNtaXR0ZXIgVGltZS1ndWFyZCBSZWdpc3Rlcg0KKyNkZWZpbmUgVVNfRklESSAgICAgICAgICg2NCkgLy8gRklfRElfUmF0aW8gUmVnaXN0ZXINCisjZGVmaW5lIFVTX05FUiAgICAgICAgICAoNjgpIC8vIE5iIEVycm9ycyBSZWdpc3Rlcg0KKyNkZWZpbmUgVVNfSUYgICAgICAgICAgICg3NikgLy8gSVJEQV9GSUxURVIgUmVnaXN0ZXINCisjZGVmaW5lIFVTX1JQUiAgICAgICAgICAoMjU2KSAvLyBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFVTX1JDUiAgICAgICAgICAoMjYwKSAvLyBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFVTX1RQUiAgICAgICAgICAoMjY0KSAvLyBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBVU19UQ1IgICAgICAgICAgKDI2OCkgLy8gVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgVVNfUk5QUiAgICAgICAgICgyNzIpIC8vIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBVU19STkNSICAgICAgICAgKDI3NikgLy8gUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFVTX1ROUFIgICAgICAgICAoMjgwKSAvLyBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFVTX1ROQ1IgICAgICAgICAoMjg0KSAvLyBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFVTX1BUQ1IgICAgICAgICAoMjg4KSAvLyBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgVVNfUFRTUiAgICAgICAgICgyOTIpIC8vIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisvLyAtLS0tLS0tLSBVU19DUiA6IChVU0FSVCBPZmZzZXQ6IDB4MCkgRGVidWcgVW5pdCBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVVNfU1RUQlJLICAgICAgICAgICAoMHgxIDw8ICA5KSAvLyAoVVNBUlQpIFN0YXJ0IEJyZWFrDQorI2RlZmluZSBBVDkxQ19VU19TVFBCUksgICAgICAgICAgICgweDEgPDwgMTApIC8vIChVU0FSVCkgU3RvcCBCcmVhaw0KKyNkZWZpbmUgQVQ5MUNfVVNfU1RUVE8gICAgICAgICAgICAoMHgxIDw8IDExKSAvLyAoVVNBUlQpIFN0YXJ0IFRpbWUtb3V0DQorI2RlZmluZSBBVDkxQ19VU19TRU5EQSAgICAgICAgICAgICgweDEgPDwgMTIpIC8vIChVU0FSVCkgU2VuZCBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19VU19SU1RJVCAgICAgICAgICAgICgweDEgPDwgMTMpIC8vIChVU0FSVCkgUmVzZXQgSXRlcmF0aW9ucw0KKyNkZWZpbmUgQVQ5MUNfVVNfUlNUTkFDSyAgICAgICAgICAoMHgxIDw8IDE0KSAvLyAoVVNBUlQpIFJlc2V0IE5vbiBBY2tub3dsZWRnZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfUkVUVE8gICAgICAgICAgICAoMHgxIDw8IDE1KSAvLyAoVVNBUlQpIFJlYXJtIFRpbWUtb3V0DQorI2RlZmluZSBBVDkxQ19VU19EVFJFTiAgICAgICAgICAgICgweDEgPDwgMTYpIC8vIChVU0FSVCkgRGF0YSBUZXJtaW5hbCByZWFkeSBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1VTX0RUUkRJUyAgICAgICAgICAgKDB4MSA8PCAxNykgLy8gKFVTQVJUKSBEYXRhIFRlcm1pbmFsIHJlYWR5IERpc2FibGUNCisjZGVmaW5lIEFUOTFDX1VTX1JUU0VOICAgICAgICAgICAgKDB4MSA8PCAxOCkgLy8gKFVTQVJUKSBSZXF1ZXN0IHRvIFNlbmQgZW5hYmxlDQorI2RlZmluZSBBVDkxQ19VU19SVFNESVMgICAgICAgICAgICgweDEgPDwgMTkpIC8vIChVU0FSVCkgUmVxdWVzdCB0byBTZW5kIERpc2FibGUNCisvLyAtLS0tLS0tLSBVU19NUiA6IChVU0FSVCBPZmZzZXQ6IDB4NCkgRGVidWcgVW5pdCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVVNfVVNNT0RFICAgICAgICAgICAoMHhGIDw8ICAwKSAvLyAoVVNBUlQpIFVzYXJ0IG1vZGUNCisjZGVmaW5lIAlBVDkxQ19VU19VU01PREVfTk9STUFMICAgICAgICAgICAgICAgKDB4MCkgLy8gKFVTQVJUKSBOb3JtYWwNCisjZGVmaW5lIAlBVDkxQ19VU19VU01PREVfUlM0ODUgICAgICAgICAgICAgICAgKDB4MSkgLy8gKFVTQVJUKSBSUzQ4NQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1VTTU9ERV9IV0hTSCAgICAgICAgICAgICAgICAoMHgyKSAvLyAoVVNBUlQpIEhhcmR3YXJlIEhhbmRzaGFraW5nDQorI2RlZmluZSAJQVQ5MUNfVVNfVVNNT0RFX01PREVNICAgICAgICAgICAgICAgICgweDMpIC8vIChVU0FSVCkgTW9kZW0NCisjZGVmaW5lIAlBVDkxQ19VU19VU01PREVfSVNPNzgxNl8wICAgICAgICAgICAgKDB4NCkgLy8gKFVTQVJUKSBJU083ODE2IHByb3RvY29sOiBUID0gMA0KKyNkZWZpbmUgCUFUOTFDX1VTX1VTTU9ERV9JU083ODE2XzEgICAgICAgICAgICAoMHg2KSAvLyAoVVNBUlQpIElTTzc4MTYgcHJvdG9jb2w6IFQgPSAxDQorI2RlZmluZSAJQVQ5MUNfVVNfVVNNT0RFX0lSREEgICAgICAgICAgICAgICAgICgweDgpIC8vIChVU0FSVCkgSXJEQQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1VTTU9ERV9TV0hTSCAgICAgICAgICAgICAgICAoMHhDKSAvLyAoVVNBUlQpIFNvZnR3YXJlIEhhbmRzaGFraW5nDQorI2RlZmluZSBBVDkxQ19VU19DTEtTICAgICAgICAgICAgICgweDMgPDwgIDQpIC8vIChVU0FSVCkgQ2xvY2sgU2VsZWN0aW9uIChCYXVkIFJhdGUgZ2VuZXJhdG9yIElucHV0IENsb2NrDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0xLU19DTE9DSyAgICAgICAgICAgICAgICAoMHgwIDw8ICA0KSAvLyAoVVNBUlQpIENsb2NrDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0xLU19GRElWMSAgICAgICAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoVVNBUlQpIGZkaXYxDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0xLU19TTE9XICAgICAgICAgICAgICAgICAoMHgyIDw8ICA0KSAvLyAoVVNBUlQpIHNsb3dfY2xvY2sgKEFSTSkNCisjZGVmaW5lIAlBVDkxQ19VU19DTEtTX0VYVCAgICAgICAgICAgICAgICAgICgweDMgPDwgIDQpIC8vIChVU0FSVCkgRXh0ZXJuYWwgKFNDSykNCisjZGVmaW5lIEFUOTFDX1VTX0NIUkwgICAgICAgICAgICAgKDB4MyA8PCAgNikgLy8gKFVTQVJUKSBDbG9jayBTZWxlY3Rpb24gKEJhdWQgUmF0ZSBnZW5lcmF0b3IgSW5wdXQgQ2xvY2sNCisjZGVmaW5lIAlBVDkxQ19VU19DSFJMXzVfQklUUyAgICAgICAgICAgICAgICgweDAgPDwgIDYpIC8vIChVU0FSVCkgQ2hhcmFjdGVyIExlbmd0aDogNSBiaXRzDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0hSTF82X0JJVFMgICAgICAgICAgICAgICAoMHgxIDw8ICA2KSAvLyAoVVNBUlQpIENoYXJhY3RlciBMZW5ndGg6IDYgYml0cw0KKyNkZWZpbmUgCUFUOTFDX1VTX0NIUkxfN19CSVRTICAgICAgICAgICAgICAgKDB4MiA8PCAgNikgLy8gKFVTQVJUKSBDaGFyYWN0ZXIgTGVuZ3RoOiA3IGJpdHMNCisjZGVmaW5lIAlBVDkxQ19VU19DSFJMXzhfQklUUyAgICAgICAgICAgICAgICgweDMgPDwgIDYpIC8vIChVU0FSVCkgQ2hhcmFjdGVyIExlbmd0aDogOCBiaXRzDQorI2RlZmluZSBBVDkxQ19VU19TWU5DICAgICAgICAgICAgICgweDEgPDwgIDgpIC8vIChVU0FSVCkgU3luY2hyb25vdXMgTW9kZSBTZWxlY3QNCisjZGVmaW5lIEFUOTFDX1VTX05CU1RPUCAgICAgICAgICAgKDB4MyA8PCAxMikgLy8gKFVTQVJUKSBOdW1iZXIgb2YgU3RvcCBiaXRzDQorI2RlZmluZSAJQVQ5MUNfVVNfTkJTVE9QXzFfQklUICAgICAgICAgICAgICAgICgweDAgPDwgMTIpIC8vIChVU0FSVCkgMSBzdG9wIGJpdA0KKyNkZWZpbmUgCUFUOTFDX1VTX05CU1RPUF8xNV9CSVQgICAgICAgICAgICAgICAoMHgxIDw8IDEyKSAvLyAoVVNBUlQpIEFzeW5jaHJvbm91cyAoU1lOQz0wKSAyIHN0b3AgYml0cyBTeW5jaHJvbm91cyAoU1lOQz0xKSAyIHN0b3AgYml0cw0KKyNkZWZpbmUgCUFUOTFDX1VTX05CU1RPUF8yX0JJVCAgICAgICAgICAgICAgICAoMHgyIDw8IDEyKSAvLyAoVVNBUlQpIDIgc3RvcCBiaXRzDQorI2RlZmluZSBBVDkxQ19VU19NU0JGICAgICAgICAgICAgICgweDEgPDwgMTYpIC8vIChVU0FSVCkgQml0IE9yZGVyDQorI2RlZmluZSBBVDkxQ19VU19NT0RFOSAgICAgICAgICAgICgweDEgPDwgMTcpIC8vIChVU0FSVCkgOS1iaXQgQ2hhcmFjdGVyIGxlbmd0aA0KKyNkZWZpbmUgQVQ5MUNfVVNfQ0tMTyAgICAgICAgICAgICAoMHgxIDw8IDE4KSAvLyAoVVNBUlQpIENsb2NrIE91dHB1dCBTZWxlY3QNCisjZGVmaW5lIEFUOTFDX1VTX09WRVIgICAgICAgICAgICAgKDB4MSA8PCAxOSkgLy8gKFVTQVJUKSBPdmVyIFNhbXBsaW5nIE1vZGUNCisjZGVmaW5lIEFUOTFDX1VTX0lOQUNLICAgICAgICAgICAgKDB4MSA8PCAyMCkgLy8gKFVTQVJUKSBJbmhpYml0IE5vbiBBY2tub3dsZWRnZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfRFNOQUNLICAgICAgICAgICAoMHgxIDw8IDIxKSAvLyAoVVNBUlQpIERpc2FibGUgU3VjY2Vzc2l2ZSBOQUNLDQorI2RlZmluZSBBVDkxQ19VU19NQVhfSVRFUiAgICAgICAgICgweDEgPDwgMjQpIC8vIChVU0FSVCkgTnVtYmVyIG9mIFJlcGV0aXRpb25zDQorI2RlZmluZSBBVDkxQ19VU19GSUxURVIgICAgICAgICAgICgweDEgPDwgMjgpIC8vIChVU0FSVCkgUmVjZWl2ZSBMaW5lIEZpbHRlcg0KKy8vIC0tLS0tLS0tIFVTX0lFUiA6IChVU0FSVCBPZmZzZXQ6IDB4OCkgRGVidWcgVW5pdCBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVVNfUlhCUksgICAgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoVVNBUlQpIEJyZWFrIFJlY2VpdmVkL0VuZCBvZiBCcmVhaw0KKyNkZWZpbmUgQVQ5MUNfVVNfVElNRU9VVCAgICAgICAgICAoMHgxIDw8ICA4KSAvLyAoVVNBUlQpIFJlY2VpdmVyIFRpbWUtb3V0DQorI2RlZmluZSBBVDkxQ19VU19JVEVSQVRJT04gICAgICAgICgweDEgPDwgMTApIC8vIChVU0FSVCkgTWF4IG51bWJlciBvZiBSZXBldGl0aW9ucyBSZWFjaGVkDQorI2RlZmluZSBBVDkxQ19VU19OQUNLICAgICAgICAgICAgICgweDEgPDwgMTMpIC8vIChVU0FSVCkgTm9uIEFja25vd2xlZGdlDQorI2RlZmluZSBBVDkxQ19VU19SSUlDICAgICAgICAgICAgICgweDEgPDwgMTYpIC8vIChVU0FSVCkgUmluZyBJTmRpY2F0b3IgSW5wdXQgQ2hhbmdlIEZsYWcNCisjZGVmaW5lIEFUOTFDX1VTX0RTUklDICAgICAgICAgICAgKDB4MSA8PCAxNykgLy8gKFVTQVJUKSBEYXRhIFNldCBSZWFkeSBJbnB1dCBDaGFuZ2UgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfVVNfRENESUMgICAgICAgICAgICAoMHgxIDw8IDE4KSAvLyAoVVNBUlQpIERhdGEgQ2FycmllciBGbGFnDQorI2RlZmluZSBBVDkxQ19VU19DVFNJQyAgICAgICAgICAgICgweDEgPDwgMTkpIC8vIChVU0FSVCkgQ2xlYXIgVG8gU2VuZCBJbnB1dCBDaGFuZ2UgRmxhZw0KKy8vIC0tLS0tLS0tIFVTX0lEUiA6IChVU0FSVCBPZmZzZXQ6IDB4YykgRGVidWcgVW5pdCBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBVU19JTVIgOiAoVVNBUlQgT2Zmc2V0OiAweDEwKSBEZWJ1ZyBVbml0IEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFVTX0NTUiA6IChVU0FSVCBPZmZzZXQ6IDB4MTQpIERlYnVnIFVuaXQgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VU19SSSAgICAgICAgICAgICAgICgweDEgPDwgMjApIC8vIChVU0FSVCkgSW1hZ2Ugb2YgUkkgSW5wdXQNCisjZGVmaW5lIEFUOTFDX1VTX0RTUiAgICAgICAgICAgICAgKDB4MSA8PCAyMSkgLy8gKFVTQVJUKSBJbWFnZSBvZiBEU1IgSW5wdXQNCisjZGVmaW5lIEFUOTFDX1VTX0RDRCAgICAgICAgICAgICAgKDB4MSA8PCAyMikgLy8gKFVTQVJUKSBJbWFnZSBvZiBEQ0QgSW5wdXQNCisjZGVmaW5lIEFUOTFDX1VTX0NUUyAgICAgICAgICAgICAgKDB4MSA8PCAyMykgLy8gKFVTQVJUKSBJbWFnZSBvZiBDVFMgSW5wdXQNCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFN5bmNocm9ub3VzIFNlcmlhbCBDb250cm9sbGVyIEludGVyZmFjZSAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19TU0Mgc3RydWN0dXJlICoqKiAqLw0KLSNkZWZpbmUgU1NDX0NSICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAwICkgICAgICAgICAgLyogQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1NDX0NNUiAgICAgICAgICAgICAgICAgICAgICAgICAgKCA0ICkgICAgICAgICAgLyogQ2xvY2sgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1NDX1JDTVIgICAgICAgICAgICAgICAgICAgICAgICAgKCAxNiApICAgICAgICAgLyogUmVjZWl2ZSBDbG9jayBNb2RlUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNTQ19SRk1SICAgICAgICAgICAgICAgICAgICAgICAgICggMjAgKSAgICAgICAgIC8qIFJlY2VpdmUgRnJhbWUgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1NDX1RDTVIgICAgICAgICAgICAgICAgICAgICAgICAgKCAyNCApICAgICAgICAgLyogVHJhbnNtaXQgQ2xvY2sgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1NDX1RGTVIgICAgICAgICAgICAgICAgICAgICAgICAgKCAyOCApICAgICAgICAgLyogVHJhbnNtaXQgRnJhbWUgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1NDX1JIUiAgICAgICAgICAgICAgICAgICAgICAgICAgKCAzMiApICAgICAgICAgLyogUmVjZWl2ZSBIb2xkaW5nIFJlZ2lzdGVyICovDQotI2RlZmluZSBTU0NfVEhSICAgICAgICAgICAgICAgICAgICAgICAgICAoIDM2ICkgICAgICAgICAvKiBUcmFuc21pdCBIb2xkaW5nIFJlZ2lzdGVyICovDQotI2RlZmluZSBTU0NfUlNIUiAgICAgICAgICAgICAgICAgICAgICAgICAoIDQ4ICkgICAgICAgICAvKiBSZWNlaXZlIFN5bmMgSG9sZGluZyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1NDX1RTSFIgICAgICAgICAgICAgICAgICAgICAgICAgKCA1MiApICAgICAgICAgLyogVHJhbnNtaXQgU3luYyBIb2xkaW5nIFJlZ2lzdGVyICovDQotI2RlZmluZSBTU0NfU1IgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDY0ICkgICAgICAgICAvKiBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNTQ19JRVIgICAgICAgICAgICAgICAgICAgICAgICAgICggNjggKSAgICAgICAgIC8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNTQ19JRFIgICAgICAgICAgICAgICAgICAgICAgICAgICggNzIgKSAgICAgICAgIC8qIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBTU0NfSU1SICAgICAgICAgICAgICAgICAgICAgICAgICAoIDc2ICkgICAgICAgICAvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1NDX1JQUiAgICAgICAgICAgICAgICAgICAgICAgICAgKCAyNTYgKSAgICAgICAgLyogUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBTU0NfUkNSICAgICAgICAgICAgICAgICAgICAgICAgICAoIDI2MCApICAgICAgICAvKiBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNTQ19UUFIgICAgICAgICAgICAgICAgICAgICAgICAgICggMjY0ICkgICAgICAgIC8qIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNTQ19UQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICggMjY4ICkgICAgICAgIC8qIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNTQ19STlBSICAgICAgICAgICAgICAgICAgICAgICAgICggMjcyICkgICAgICAgIC8qIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBTU0NfUk5DUiAgICAgICAgICAgICAgICAgICAgICAgICAoIDI3NiApICAgICAgICAvKiBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1NDX1ROUFIgICAgICAgICAgICAgICAgICAgICAgICAgKCAyODAgKSAgICAgICAgLyogVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBTU0NfVE5DUiAgICAgICAgICAgICAgICAgICAgICAgICAoIDI4NCApICAgICAgICAvKiBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNTQ19QVENSICAgICAgICAgICAgICAgICAgICAgICAgICggMjg4ICkgICAgICAgIC8qIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBTU0NfUFRTUiAgICAgICAgICAgICAgICAgICAgICAgICAoIDI5MiApICAgICAgICAvKiBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotLyogLS0tLS0tLS0gU1NDX0NSIDogKFNTQyBPZmZzZXQ6IDB4MCkgU1NDIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19SWEVOICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDAgKSAgIC8qIChTU0MpIFJlY2VpdmUgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19TU0NfUlhESVMgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxICkgICAvKiAoU1NDKSBSZWNlaXZlIERpc2FibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19UWEVOICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDggKSAgIC8qIChTU0MpIFRyYW5zbWl0IEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1RYRElTICAgICAgICAgICAgICAgICAgKCAweDEgPDwgOSApICAgLyogKFNTQykgVHJhbnNtaXQgRGlzYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1NXUlNUICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTUgKSAgLyogKFNTQykgU29mdHdhcmUgUmVzZXQgKi8NCi0vKiAtLS0tLS0tLSBTU0NfUkNNUiA6IChTU0MgT2Zmc2V0OiAweDEwKSBTU0MgUmVjZWl2ZSBDbG9jayBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19TU0NfQ0tTICAgICAgICAgICAgICAgICAgICAoIDB4MyA8PCAwICkgICAvKiAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19DS1NfRElWICAgICAgICAgICAgKCAweDAgKSAgICAgICAgLyogKFNTQykgRGl2aWRlZCBDbG9jayAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19DS1NfVEsgICAgICAgICAgICAgKCAweDEgKSAgICAgICAgLyogKFNTQykgVEsgQ2xvY2sgc2lnbmFsICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX0NLU19SSyAgICAgICAgICAgICAoIDB4MiApICAgICAgICAvKiAoU1NDKSBSSyBwaW4gKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19DS08gICAgICAgICAgICAgICAgICAgICggMHg3IDw8IDIgKSAgIC8qIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgT3V0cHV0IE1vZGUgU2VsZWN0aW9uICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX0NLT19OT05FICAgICAgICAgICAoIDB4MCA8PCAyICkgICAvKiAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIE91dHB1dCBNb2RlOiBOb25lIFJLIHBpbjogSW5wdXQtb25seSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19DS09fQ09OVElOT1VTICAgICAgKCAweDEgPDwgMiApICAgLyogKFNTQykgQ29udGludW91cyBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIFJLIHBpbjogT3V0cHV0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX0NLT19EQVRBX1RYICAgICAgICAoIDB4MiA8PCAyICkgICAvKiAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIG9ubHkgZHVyaW5nIGRhdGEgdHJhbnNmZXJzIFJLIHBpbjogT3V0cHV0ICovDQotI2RlZmluZSBBVDkxQ19TU0NfQ0tJICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCA1ICkgICAvKiAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIEludmVyc2lvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1NUQVJUICAgICAgICAgICAgICAgICAgKCAweEYgPDwgOCApICAgLyogKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBTdGFydCBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfU1RBUlRfQ09OVElOT1VTICAgICggMHgwIDw8IDggKSAgIC8qIChTU0MpIENvbnRpbnVvdXMsIGFzIHNvb24gYXMgdGhlIHJlY2VpdmVyIGlzIGVuYWJsZWQsIGFuZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgZW5kIG9mIHRyYW5zZmVyIG9mIHRoZSBwcmV2aW91cyBkYXRhLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19TVEFSVF9UWCAgICAgICAgICAgKCAweDEgPDwgOCApICAgLyogKFNTQykgVHJhbnNtaXQvUmVjZWl2ZSBzdGFydCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19TVEFSVF9MT1dfUkYgICAgICAgKCAweDIgPDwgOCApICAgLyogKFNTQykgRGV0ZWN0aW9uIG9mIGEgbG93IGxldmVsIG9uIFJGIGlucHV0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX1NUQVJUX0hJR0hfUkYgICAgICAoIDB4MyA8PCA4ICkgICAvKiAoU1NDKSBEZXRlY3Rpb24gb2YgYSBoaWdoIGxldmVsIG9uIFJGIGlucHV0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX1NUQVJUX0ZBTExfUkYgICAgICAoIDB4NCA8PCA4ICkgICAvKiAoU1NDKSBEZXRlY3Rpb24gb2YgYSBmYWxsaW5nIGVkZ2Ugb24gUkYgaW5wdXQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfU1RBUlRfUklTRV9SRiAgICAgICggMHg1IDw8IDggKSAgIC8qIChTU0MpIERldGVjdGlvbiBvZiBhIHJpc2luZyBlZGdlIG9uIFJGIGlucHV0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX1NUQVJUX0xFVkVMX1JGICAgICAoIDB4NiA8PCA4ICkgICAvKiAoU1NDKSBEZXRlY3Rpb24gb2YgYW55IGxldmVsIGNoYW5nZSBvbiBSRiBpbnB1dCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19TVEFSVF9FREdFX1JGICAgICAgKCAweDcgPDwgOCApICAgLyogKFNTQykgRGV0ZWN0aW9uIG9mIGFueSBlZGdlIG9uIFJGIGlucHV0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX1NUQVJUXzAgICAgICAgICAgICAoIDB4OCA8PCA4ICkgICAvKiAoU1NDKSBDb21wYXJlIDAgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19TVFRETFkgICAgICAgICAgICAgICAgICggMHhGRiA8PCAxNiApIC8qIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgU3RhcnQgRGVsYXkgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19QRVJJT0QgICAgICAgICAgICAgICAgICggMHhGRiA8PCAyNCApIC8qIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgUGVyaW9kIERpdmlkZXIgU2VsZWN0aW9uICovDQotLyogLS0tLS0tLS0gU1NDX1JGTVIgOiAoU1NDIE9mZnNldDogMHgxNCkgU1NDIFJlY2VpdmUgRnJhbWUgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0RBVExFTiAgICAgICAgICAgICAgICAgKCAweDFGIDw8IDAgKSAgLyogKFNTQykgRGF0YSBMZW5ndGggKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19MT09QICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDUgKSAgIC8qIChTU0MpIExvb3AgTW9kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX01TQkYgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgNyApICAgLyogKFNTQykgTW9zdCBTaWduaWZpY2FudCBCaXQgRmlyc3QgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19EQVROQiAgICAgICAgICAgICAgICAgICggMHhGIDw8IDggKSAgIC8qIChTU0MpIERhdGEgTnVtYmVyIHBlciBGcmFtZSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0ZTTEVOICAgICAgICAgICAgICAgICAgKCAweEYgPDwgMTYgKSAgLyogKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIGxlbmd0aCAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0ZTT1MgICAgICAgICAgICAgICAgICAgKCAweDcgPDwgMjAgKSAgLyogKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIE91dHB1dCBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfRlNPU19OT05FICAgICAgICAgICggMHgwIDw8IDIwICkgIC8qIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IE5vbmUgUksgcGluIElucHV0LW9ubHkgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfRlNPU19ORUdBVElWRSAgICAgICggMHgxIDw8IDIwICkgIC8qIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IE5lZ2F0aXZlIFB1bHNlICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX0ZTT1NfUE9TSVRJVkUgICAgICAoIDB4MiA8PCAyMCApICAvKiAoU1NDKSBTZWxlY3RlZCBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgU2lnbmFsOiBQb3NpdGl2ZSBQdWxzZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19GU09TX0xPVyAgICAgICAgICAgKCAweDMgPDwgMjAgKSAgLyogKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogRHJpdmVyIExvdyBkdXJpbmcgZGF0YSB0cmFuc2ZlciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19GU09TX0hJR0ggICAgICAgICAgKCAweDQgPDwgMjAgKSAgLyogKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogRHJpdmVyIEhpZ2ggZHVyaW5nIGRhdGEgdHJhbnNmZXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfRlNPU19UT0dHTEUgICAgICAgICggMHg1IDw8IDIwICkgIC8qIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IFRvZ2dsaW5nIGF0IGVhY2ggc3RhcnQgb2YgZGF0YSB0cmFuc2ZlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0ZTRURHRSAgICAgICAgICAgICAgICAgKCAweDEgPDwgMjQgKSAgLyogKFNTQykgRnJhbWUgU3luYyBFZGdlIERldGVjdGlvbiAqLw0KLS8qIC0tLS0tLS0tIFNTQ19UQ01SIDogKFNTQyBPZmZzZXQ6IDB4MTgpIFNTQyBUcmFuc21pdCBDbG9jayBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gU1NDX1RGTVIgOiAoU1NDIE9mZnNldDogMHgxYykgU1NDIFRyYW5zbWl0IEZyYW1lIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19EQVRERUYgICAgICAgICAgICAgICAgICggMHgxIDw8IDUgKSAgLyogKFNTQykgRGF0YSBEZWZhdWx0IFZhbHVlICovDQotI2RlZmluZSBBVDkxQ19TU0NfRlNERU4gICAgICAgICAgICAgICAgICAoIDB4MSA8PCAyMyApIC8qIChTU0MpIEZyYW1lIFN5bmMgRGF0YSBFbmFibGUgKi8NCi0vKiAtLS0tLS0tLSBTU0NfU1IgOiAoU1NDIE9mZnNldDogMHg0MCkgU1NDIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1RYUkRZICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMCApICAvKiAoU1NDKSBUcmFuc21pdCBSZWFkeSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1RYRU1QVFkgICAgICAgICAgICAgICAgKCAweDEgPDwgMSApICAvKiAoU1NDKSBUcmFuc21pdCBFbXB0eSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0VORFRYICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMiApICAvKiAoU1NDKSBFbmQgT2YgVHJhbnNtaXNzaW9uICovDQotI2RlZmluZSBBVDkxQ19TU0NfVFhCVUZFICAgICAgICAgICAgICAgICAoIDB4MSA8PCAzICkgIC8qIChTU0MpIFRyYW5zbWl0IEJ1ZmZlciBFbXB0eSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1JYUkRZICAgICAgICAgICAgICAgICAgKCAweDEgPDwgNCApICAvKiAoU1NDKSBSZWNlaXZlIFJlYWR5ICovDQotI2RlZmluZSBBVDkxQ19TU0NfT1ZSVU4gICAgICAgICAgICAgICAgICAoIDB4MSA8PCA1ICkgIC8qIChTU0MpIFJlY2VpdmUgT3ZlcnJ1biAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0VORFJYICAgICAgICAgICAgICAgICAgKCAweDEgPDwgNiApICAvKiAoU1NDKSBFbmQgb2YgUmVjZXB0aW9uICovDQotI2RlZmluZSBBVDkxQ19TU0NfUlhCVUZGICAgICAgICAgICAgICAgICAoIDB4MSA8PCA3ICkgIC8qIChTU0MpIFJlY2VpdmUgQnVmZmVyIEZ1bGwgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19UWFNZTiAgICAgICAgICAgICAgICAgICggMHgxIDw8IDEwICkgLyogKFNTQykgVHJhbnNtaXQgU3luYyAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1JYU1lOICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTEgKSAvKiAoU1NDKSBSZWNlaXZlIFN5bmMgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19UWEVOQSAgICAgICAgICAgICAgICAgICggMHgxIDw8IDE2ICkgLyogKFNTQykgVHJhbnNtaXQgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19TU0NfUlhFTkEgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxNyApIC8qIChTU0MpIFJlY2VpdmUgRW5hYmxlICovDQotLyogLS0tLS0tLS0gU1NDX0lFUiA6IChTU0MgT2Zmc2V0OiAweDQ0KSBTU0MgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFNTQ19JRFIgOiAoU1NDIE9mZnNldDogMHg0OCkgU1NDIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gU1NDX0lNUiA6IChTU0MgT2Zmc2V0OiAweDRjKSBTU0MgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFN5bmNocm9ub3VzIFNlcmlhbCBDb250cm9sbGVyIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19TU0Mgc3RydWN0dXJlICoqKg0KKyNkZWZpbmUgU1NDX0NSICAgICAgICAgICggMCkgLy8gQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX0NNUiAgICAgICAgICggNCkgLy8gQ2xvY2sgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX1JDTVIgICAgICAgICgxNikgLy8gUmVjZWl2ZSBDbG9jayBNb2RlUmVnaXN0ZXINCisjZGVmaW5lIFNTQ19SRk1SICAgICAgICAoMjApIC8vIFJlY2VpdmUgRnJhbWUgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX1RDTVIgICAgICAgICgyNCkgLy8gVHJhbnNtaXQgQ2xvY2sgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX1RGTVIgICAgICAgICgyOCkgLy8gVHJhbnNtaXQgRnJhbWUgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX1JIUiAgICAgICAgICgzMikgLy8gUmVjZWl2ZSBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBTU0NfVEhSICAgICAgICAgKDM2KSAvLyBUcmFuc21pdCBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBTU0NfUlNIUiAgICAgICAgKDQ4KSAvLyBSZWNlaXZlIFN5bmMgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX1RTSFIgICAgICAgICg1MikgLy8gVHJhbnNtaXQgU3luYyBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBTU0NfU1IgICAgICAgICAgKDY0KSAvLyBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFNTQ19JRVIgICAgICAgICAoNjgpIC8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFNTQ19JRFIgICAgICAgICAoNzIpIC8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBTU0NfSU1SICAgICAgICAgKDc2KSAvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX1JQUiAgICAgICAgICgyNTYpIC8vIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX1JDUiAgICAgICAgICgyNjApIC8vIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX1RQUiAgICAgICAgICgyNjQpIC8vIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFNTQ19UQ1IgICAgICAgICAoMjY4KSAvLyBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBTU0NfUk5QUiAgICAgICAgKDI3MikgLy8gUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFNTQ19STkNSICAgICAgICAoMjc2KSAvLyBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX1ROUFIgICAgICAgICgyODApIC8vIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX1ROQ1IgICAgICAgICgyODQpIC8vIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX1BUQ1IgICAgICAgICgyODgpIC8vIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBTU0NfUFRTUiAgICAgICAgKDI5MikgLy8gUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKy8vIC0tLS0tLS0tIFNTQ19DUiA6IChTU0MgT2Zmc2V0OiAweDApIFNTQyBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JYRU4gICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoU1NDKSBSZWNlaXZlIEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JYRElTICAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoU1NDKSBSZWNlaXZlIERpc2FibGUNCisjZGVmaW5lIEFUOTFDX1NTQ19UWEVOICAgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKFNTQykgVHJhbnNtaXQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19TU0NfVFhESVMgICAgICAgICAgICgweDEgPDwgIDkpIC8vIChTU0MpIFRyYW5zbWl0IERpc2FibGUNCisjZGVmaW5lIEFUOTFDX1NTQ19TV1JTVCAgICAgICAgICAgKDB4MSA8PCAxNSkgLy8gKFNTQykgU29mdHdhcmUgUmVzZXQNCisvLyAtLS0tLS0tLSBTU0NfUkNNUiA6IChTU0MgT2Zmc2V0OiAweDEwKSBTU0MgUmVjZWl2ZSBDbG9jayBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1NDX0NLUyAgICAgICAgICAgICAoMHgzIDw8ICAwKSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1NTQ19DS1NfRElWICAgICAgICAgICAgICAgICAgKDB4MCkgLy8gKFNTQykgRGl2aWRlZCBDbG9jaw0KKyNkZWZpbmUgCUFUOTFDX1NTQ19DS1NfVEsgICAgICAgICAgICAgICAgICAgKDB4MSkgLy8gKFNTQykgVEsgQ2xvY2sgc2lnbmFsDQorI2RlZmluZSAJQVQ5MUNfU1NDX0NLU19SSyAgICAgICAgICAgICAgICAgICAoMHgyKSAvLyAoU1NDKSBSSyBwaW4NCisjZGVmaW5lIEFUOTFDX1NTQ19DS08gICAgICAgICAgICAgKDB4NyA8PCAgMikgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBPdXRwdXQgTW9kZSBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19TU0NfQ0tPX05PTkUgICAgICAgICAgICAgICAgICgweDAgPDwgIDIpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgT3V0cHV0IE1vZGU6IE5vbmUgUksgcGluOiBJbnB1dC1vbmx5DQorI2RlZmluZSAJQVQ5MUNfU1NDX0NLT19DT05USU5PVVMgICAgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoU1NDKSBDb250aW51b3VzIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgUksgcGluOiBPdXRwdXQNCisjZGVmaW5lIAlBVDkxQ19TU0NfQ0tPX0RBVEFfVFggICAgICAgICAgICAgICgweDIgPDwgIDIpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgb25seSBkdXJpbmcgZGF0YSB0cmFuc2ZlcnMgUksgcGluOiBPdXRwdXQNCisjZGVmaW5lIEFUOTFDX1NTQ19DS0kgICAgICAgICAgICAgKDB4MSA8PCAgNSkgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBJbnZlcnNpb24NCisjZGVmaW5lIEFUOTFDX1NTQ19TVEFSVCAgICAgICAgICAgKDB4RiA8PCAgOCkgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBTdGFydCBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfQ09OVElOT1VTICAgICAgICAgICAgKDB4MCA8PCAgOCkgLy8gKFNTQykgQ29udGludW91cywgYXMgc29vbiBhcyB0aGUgcmVjZWl2ZXIgaXMgZW5hYmxlZCwgYW5kIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBlbmQgb2YgdHJhbnNmZXIgb2YgdGhlIHByZXZpb3VzIGRhdGEuDQorI2RlZmluZSAJQVQ5MUNfU1NDX1NUQVJUX1RYICAgICAgICAgICAgICAgICAgICgweDEgPDwgIDgpIC8vIChTU0MpIFRyYW5zbWl0L1JlY2VpdmUgc3RhcnQNCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfTE9XX1JGICAgICAgICAgICAgICAgKDB4MiA8PCAgOCkgLy8gKFNTQykgRGV0ZWN0aW9uIG9mIGEgbG93IGxldmVsIG9uIFJGIGlucHV0DQorI2RlZmluZSAJQVQ5MUNfU1NDX1NUQVJUX0hJR0hfUkYgICAgICAgICAgICAgICgweDMgPDwgIDgpIC8vIChTU0MpIERldGVjdGlvbiBvZiBhIGhpZ2ggbGV2ZWwgb24gUkYgaW5wdXQNCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfRkFMTF9SRiAgICAgICAgICAgICAgKDB4NCA8PCAgOCkgLy8gKFNTQykgRGV0ZWN0aW9uIG9mIGEgZmFsbGluZyBlZGdlIG9uIFJGIGlucHV0DQorI2RlZmluZSAJQVQ5MUNfU1NDX1NUQVJUX1JJU0VfUkYgICAgICAgICAgICAgICgweDUgPDwgIDgpIC8vIChTU0MpIERldGVjdGlvbiBvZiBhIHJpc2luZyBlZGdlIG9uIFJGIGlucHV0DQorI2RlZmluZSAJQVQ5MUNfU1NDX1NUQVJUX0xFVkVMX1JGICAgICAgICAgICAgICgweDYgPDwgIDgpIC8vIChTU0MpIERldGVjdGlvbiBvZiBhbnkgbGV2ZWwgY2hhbmdlIG9uIFJGIGlucHV0DQorI2RlZmluZSAJQVQ5MUNfU1NDX1NUQVJUX0VER0VfUkYgICAgICAgICAgICAgICgweDcgPDwgIDgpIC8vIChTU0MpIERldGVjdGlvbiBvZiBhbnkgZWRnZSBvbiBSRiBpbnB1dA0KKyNkZWZpbmUgCUFUOTFDX1NTQ19TVEFSVF8wICAgICAgICAgICAgICAgICAgICAoMHg4IDw8ICA4KSAvLyAoU1NDKSBDb21wYXJlIDANCisjZGVmaW5lIEFUOTFDX1NTQ19TVFRETFkgICAgICAgICAgKDB4RkYgPDwgMTYpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgU3RhcnQgRGVsYXkNCisjZGVmaW5lIEFUOTFDX1NTQ19QRVJJT0QgICAgICAgICAgKDB4RkYgPDwgMjQpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgUGVyaW9kIERpdmlkZXIgU2VsZWN0aW9uDQorLy8gLS0tLS0tLS0gU1NDX1JGTVIgOiAoU1NDIE9mZnNldDogMHgxNCkgU1NDIFJlY2VpdmUgRnJhbWUgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NTQ19EQVRMRU4gICAgICAgICAgKDB4MUYgPDwgIDApIC8vIChTU0MpIERhdGEgTGVuZ3RoDQorI2RlZmluZSBBVDkxQ19TU0NfTE9PUCAgICAgICAgICAgICgweDEgPDwgIDUpIC8vIChTU0MpIExvb3AgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX01TQkYgICAgICAgICAgICAoMHgxIDw8ICA3KSAvLyAoU1NDKSBNb3N0IFNpZ25pZmljYW50IEJpdCBGaXJzdA0KKyNkZWZpbmUgQVQ5MUNfU1NDX0RBVE5CICAgICAgICAgICAoMHhGIDw8ICA4KSAvLyAoU1NDKSBEYXRhIE51bWJlciBwZXIgRnJhbWUNCisjZGVmaW5lIEFUOTFDX1NTQ19GU0xFTiAgICAgICAgICAgKDB4RiA8PCAxNikgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIGxlbmd0aA0KKyNkZWZpbmUgQVQ5MUNfU1NDX0ZTT1MgICAgICAgICAgICAoMHg3IDw8IDIwKSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgT3V0cHV0IFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1NTQ19GU09TX05PTkUgICAgICAgICAgICAgICAgICgweDAgPDwgMjApIC8vIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IE5vbmUgUksgcGluIElucHV0LW9ubHkNCisjZGVmaW5lIAlBVDkxQ19TU0NfRlNPU19ORUdBVElWRSAgICAgICAgICAgICAoMHgxIDw8IDIwKSAvLyAoU1NDKSBTZWxlY3RlZCBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgU2lnbmFsOiBOZWdhdGl2ZSBQdWxzZQ0KKyNkZWZpbmUgCUFUOTFDX1NTQ19GU09TX1BPU0lUSVZFICAgICAgICAgICAgICgweDIgPDwgMjApIC8vIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IFBvc2l0aXZlIFB1bHNlDQorI2RlZmluZSAJQVQ5MUNfU1NDX0ZTT1NfTE9XICAgICAgICAgICAgICAgICAgKDB4MyA8PCAyMCkgLy8gKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogRHJpdmVyIExvdyBkdXJpbmcgZGF0YSB0cmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NTQ19GU09TX0hJR0ggICAgICAgICAgICAgICAgICgweDQgPDwgMjApIC8vIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IERyaXZlciBIaWdoIGR1cmluZyBkYXRhIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1NDX0ZTT1NfVE9HR0xFICAgICAgICAgICAgICAgKDB4NSA8PCAyMCkgLy8gKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogVG9nZ2xpbmcgYXQgZWFjaCBzdGFydCBvZiBkYXRhIHRyYW5zZmVyDQorI2RlZmluZSBBVDkxQ19TU0NfRlNFREdFICAgICAgICAgICgweDEgPDwgMjQpIC8vIChTU0MpIEZyYW1lIFN5bmMgRWRnZSBEZXRlY3Rpb24NCisvLyAtLS0tLS0tLSBTU0NfVENNUiA6IChTU0MgT2Zmc2V0OiAweDE4KSBTU0MgVHJhbnNtaXQgQ2xvY2sgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBTU0NfVEZNUiA6IChTU0MgT2Zmc2V0OiAweDFjKSBTU0MgVHJhbnNtaXQgRnJhbWUgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NTQ19EQVRERUYgICAgICAgICAgKDB4MSA8PCAgNSkgLy8gKFNTQykgRGF0YSBEZWZhdWx0IFZhbHVlDQorI2RlZmluZSBBVDkxQ19TU0NfRlNERU4gICAgICAgICAgICgweDEgPDwgMjMpIC8vIChTU0MpIEZyYW1lIFN5bmMgRGF0YSBFbmFibGUNCisvLyAtLS0tLS0tLSBTU0NfU1IgOiAoU1NDIE9mZnNldDogMHg0MCkgU1NDIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NTQ19UWFJEWSAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFNTQykgVHJhbnNtaXQgUmVhZHkNCisjZGVmaW5lIEFUOTFDX1NTQ19UWEVNUFRZICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKFNTQykgVHJhbnNtaXQgRW1wdHkNCisjZGVmaW5lIEFUOTFDX1NTQ19FTkRUWCAgICAgICAgICAgKDB4MSA8PCAgMikgLy8gKFNTQykgRW5kIE9mIFRyYW5zbWlzc2lvbg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RYQlVGRSAgICAgICAgICAoMHgxIDw8ICAzKSAvLyAoU1NDKSBUcmFuc21pdCBCdWZmZXIgRW1wdHkNCisjZGVmaW5lIEFUOTFDX1NTQ19SWFJEWSAgICAgICAgICAgKDB4MSA8PCAgNCkgLy8gKFNTQykgUmVjZWl2ZSBSZWFkeQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX09WUlVOICAgICAgICAgICAoMHgxIDw8ICA1KSAvLyAoU1NDKSBSZWNlaXZlIE92ZXJydW4NCisjZGVmaW5lIEFUOTFDX1NTQ19FTkRSWCAgICAgICAgICAgKDB4MSA8PCAgNikgLy8gKFNTQykgRW5kIG9mIFJlY2VwdGlvbg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JYQlVGRiAgICAgICAgICAoMHgxIDw8ICA3KSAvLyAoU1NDKSBSZWNlaXZlIEJ1ZmZlciBGdWxsDQorI2RlZmluZSBBVDkxQ19TU0NfVFhTWU4gICAgICAgICAgICgweDEgPDwgMTApIC8vIChTU0MpIFRyYW5zbWl0IFN5bmMNCisjZGVmaW5lIEFUOTFDX1NTQ19SWFNZTiAgICAgICAgICAgKDB4MSA8PCAxMSkgLy8gKFNTQykgUmVjZWl2ZSBTeW5jDQorI2RlZmluZSBBVDkxQ19TU0NfVFhFTkEgICAgICAgICAgICgweDEgPDwgMTYpIC8vIChTU0MpIFRyYW5zbWl0IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JYRU5BICAgICAgICAgICAoMHgxIDw8IDE3KSAvLyAoU1NDKSBSZWNlaXZlIEVuYWJsZQ0KKy8vIC0tLS0tLS0tIFNTQ19JRVIgOiAoU1NDIE9mZnNldDogMHg0NCkgU1NDIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gU1NDX0lEUiA6IChTU0MgT2Zmc2V0OiAweDQ4KSBTU0MgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gU1NDX0lNUiA6IChTU0MgT2Zmc2V0OiAweDRjKSBTU0MgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBUd28td2lyZSBJbnRlcmZhY2UgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfVFdJIHN0cnVjdHVyZSAqKiogKi8NCi0jZGVmaW5lIFRXSV9DUiAgICAgICAgICAgICAgICAgICAgICAgICAoIDAgKSAgICAgICAgICAvKiBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBUV0lfTU1SICAgICAgICAgICAgICAgICAgICAgICAgKCA0ICkgICAgICAgICAgLyogTWFzdGVyIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFRXSV9JQURSICAgICAgICAgICAgICAgICAgICAgICAoIDEyICkgICAgICAgICAvKiBJbnRlcm5hbCBBZGRyZXNzIFJlZ2lzdGVyICovDQotI2RlZmluZSBUV0lfQ1dHUiAgICAgICAgICAgICAgICAgICAgICAgKCAxNiApICAgICAgICAgLyogQ2xvY2sgV2F2ZWZvcm0gR2VuZXJhdG9yIFJlZ2lzdGVyICovDQotI2RlZmluZSBUV0lfU1IgICAgICAgICAgICAgICAgICAgICAgICAgKCAzMiApICAgICAgICAgLyogU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBUV0lfSUVSICAgICAgICAgICAgICAgICAgICAgICAgKCAzNiApICAgICAgICAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVFdJX0lEUiAgICAgICAgICAgICAgICAgICAgICAgICggNDAgKSAgICAgICAgIC8qIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBUV0lfSU1SICAgICAgICAgICAgICAgICAgICAgICAgKCA0NCApICAgICAgICAgLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFRXSV9SSFIgICAgICAgICAgICAgICAgICAgICAgICAoIDQ4ICkgICAgICAgICAvKiBSZWNlaXZlIEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFRXSV9USFIgICAgICAgICAgICAgICAgICAgICAgICAoIDUyICkgICAgICAgICAvKiBUcmFuc21pdCBIb2xkaW5nIFJlZ2lzdGVyICovDQotLyogLS0tLS0tLS0gVFdJX0NSIDogKFRXSSBPZmZzZXQ6IDB4MCkgVFdJIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9TVEFSVCAgICAgICAgICAgICAgICAoIDB4MSA8PCAwICkgICAvKiAoVFdJKSBTZW5kIGEgU1RBUlQgQ29uZGl0aW9uICovDQotI2RlZmluZSBBVDkxQ19UV0lfU1RPUCAgICAgICAgICAgICAgICAgKCAweDEgPDwgMSApICAgLyogKFRXSSkgU2VuZCBhIFNUT1AgQ29uZGl0aW9uICovDQotI2RlZmluZSBBVDkxQ19UV0lfTVNFTiAgICAgICAgICAgICAgICAgKCAweDEgPDwgMiApICAgLyogKFRXSSkgVFdJIE1hc3RlciBUcmFuc2ZlciBFbmFibGVkICovDQotI2RlZmluZSBBVDkxQ19UV0lfTVNESVMgICAgICAgICAgICAgICAgKCAweDEgPDwgMyApICAgLyogKFRXSSkgVFdJIE1hc3RlciBUcmFuc2ZlciBEaXNhYmxlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX1NXUlNUICAgICAgICAgICAgICAgICggMHgxIDw8IDcgKSAgIC8qIChUV0kpIFNvZnR3YXJlIFJlc2V0ICovDQotLyogLS0tLS0tLS0gVFdJX01NUiA6IChUV0kgT2Zmc2V0OiAweDQpIFRXSSBNYXN0ZXIgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX0lBRFJTWiAgICAgICAgICAgICAgICggMHgzIDw8IDggKSAgIC8qIChUV0kpIEludGVybmFsIERldmljZSBBZGRyZXNzIFNpemUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UV0lfSUFEUlNaX05PICAgICAgICAoIDB4MCA8PCA4ICkgICAvKiAoVFdJKSBObyBpbnRlcm5hbCBkZXZpY2UgYWRkcmVzcyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RXSV9JQURSU1pfMV9CWVRFICAgICggMHgxIDw8IDggKSAgIC8qIChUV0kpIE9uZS1ieXRlIGludGVybmFsIGRldmljZSBhZGRyZXNzICovDQotI2RlZmluZSAgICAgQVQ5MUNfVFdJX0lBRFJTWl8yX0JZVEUgICAgKCAweDIgPDwgOCApICAgLyogKFRXSSkgVHdvLWJ5dGUgaW50ZXJuYWwgZGV2aWNlIGFkZHJlc3MgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UV0lfSUFEUlNaXzNfQllURSAgICAoIDB4MyA8PCA4ICkgICAvKiAoVFdJKSBUaHJlZS1ieXRlIGludGVybmFsIGRldmljZSBhZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19UV0lfTVJFQUQgICAgICAgICAgICAgICAgKCAweDEgPDwgMTIgKSAgLyogKFRXSSkgTWFzdGVyIFJlYWQgRGlyZWN0aW9uICovDQotI2RlZmluZSBBVDkxQ19UV0lfREFEUiAgICAgICAgICAgICAgICAgKCAweDdGIDw8IDE2ICkgLyogKFRXSSkgRGV2aWNlIEFkZHJlc3MgKi8NCi0vKiAtLS0tLS0tLSBUV0lfQ1dHUiA6IChUV0kgT2Zmc2V0OiAweDEwKSBUV0kgQ2xvY2sgV2F2ZWZvcm0gR2VuZXJhdG9yIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19UV0lfQ0xESVYgICAgICAgICAgICAgICAgKCAweEZGIDw8IDAgKSAgLyogKFRXSSkgQ2xvY2sgTG93IERpdmlkZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9DSERJViAgICAgICAgICAgICAgICAoIDB4RkYgPDwgOCApICAvKiAoVFdJKSBDbG9jayBIaWdoIERpdmlkZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9DS0RJViAgICAgICAgICAgICAgICAoIDB4NyA8PCAxNiApICAvKiAoVFdJKSBDbG9jayBEaXZpZGVyICovDQotLyogLS0tLS0tLS0gVFdJX1NSIDogKFRXSSBPZmZzZXQ6IDB4MjApIFRXSSBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9UWENPTVAgICAgICAgICAgICAgICAoIDB4MSA8PCAwICkgICAvKiAoVFdJKSBUcmFuc21pc3Npb24gQ29tcGxldGVkICovDQotI2RlZmluZSBBVDkxQ19UV0lfUlhSRFkgICAgICAgICAgICAgICAgKCAweDEgPDwgMSApICAgLyogKFRXSSkgUmVjZWl2ZSBob2xkaW5nIHJlZ2lzdGVyIFJlYURZICovDQotI2RlZmluZSBBVDkxQ19UV0lfVFhSRFkgICAgICAgICAgICAgICAgKCAweDEgPDwgMiApICAgLyogKFRXSSkgVHJhbnNtaXQgaG9sZGluZyByZWdpc3RlciBSZWFEWSAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX09WUkUgICAgICAgICAgICAgICAgICggMHgxIDw8IDYgKSAgIC8qIChUV0kpIE92ZXJydW4gRXJyb3IgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9VTlJFICAgICAgICAgICAgICAgICAoIDB4MSA8PCA3ICkgICAvKiAoVFdJKSBVbmRlcnJ1biBFcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX05BQ0sgICAgICAgICAgICAgICAgICggMHgxIDw8IDggKSAgIC8qIChUV0kpIE5vdCBBY2tub3dsZWRnZWQgKi8NCi0vKiAtLS0tLS0tLSBUV0lfSUVSIDogKFRXSSBPZmZzZXQ6IDB4MjQpIFRXSSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gVFdJX0lEUiA6IChUV0kgT2Zmc2V0OiAweDI4KSBUV0kgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBUV0lfSU1SIDogKFRXSSBPZmZzZXQ6IDB4MmMpIFRXSSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSAqLw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVHdvLXdpcmUgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1RXSSBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBUV0lfQ1IgICAgICAgICAgKCAwKSAvLyBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBUV0lfTU1SICAgICAgICAgKCA0KSAvLyBNYXN0ZXIgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgVFdJX0lBRFIgICAgICAgICgxMikgLy8gSW50ZXJuYWwgQWRkcmVzcyBSZWdpc3Rlcg0KKyNkZWZpbmUgVFdJX0NXR1IgICAgICAgICgxNikgLy8gQ2xvY2sgV2F2ZWZvcm0gR2VuZXJhdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBUV0lfU1IgICAgICAgICAgKDMyKSAvLyBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFRXSV9JRVIgICAgICAgICAoMzYpIC8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFRXSV9JRFIgICAgICAgICAoNDApIC8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBUV0lfSU1SICAgICAgICAgKDQ0KSAvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgVFdJX1JIUiAgICAgICAgICg0OCkgLy8gUmVjZWl2ZSBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBUV0lfVEhSICAgICAgICAgKDUyKSAvLyBUcmFuc21pdCBIb2xkaW5nIFJlZ2lzdGVyDQorLy8gLS0tLS0tLS0gVFdJX0NSIDogKFRXSSBPZmZzZXQ6IDB4MCkgVFdJIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UV0lfU1RBUlQgICAgICAgICAgICgweDEgPDwgIDApIC8vIChUV0kpIFNlbmQgYSBTVEFSVCBDb25kaXRpb24NCisjZGVmaW5lIEFUOTFDX1RXSV9TVE9QICAgICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKFRXSSkgU2VuZCBhIFNUT1AgQ29uZGl0aW9uDQorI2RlZmluZSBBVDkxQ19UV0lfTVNFTiAgICAgICAgICAgICgweDEgPDwgIDIpIC8vIChUV0kpIFRXSSBNYXN0ZXIgVHJhbnNmZXIgRW5hYmxlZA0KKyNkZWZpbmUgQVQ5MUNfVFdJX01TRElTICAgICAgICAgICAoMHgxIDw8ICAzKSAvLyAoVFdJKSBUV0kgTWFzdGVyIFRyYW5zZmVyIERpc2FibGVkDQorI2RlZmluZSBBVDkxQ19UV0lfU1dSU1QgICAgICAgICAgICgweDEgPDwgIDcpIC8vIChUV0kpIFNvZnR3YXJlIFJlc2V0DQorLy8gLS0tLS0tLS0gVFdJX01NUiA6IChUV0kgT2Zmc2V0OiAweDQpIFRXSSBNYXN0ZXIgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RXSV9JQURSU1ogICAgICAgICAgKDB4MyA8PCAgOCkgLy8gKFRXSSkgSW50ZXJuYWwgRGV2aWNlIEFkZHJlc3MgU2l6ZQ0KKyNkZWZpbmUgCUFUOTFDX1RXSV9JQURSU1pfTk8gICAgICAgICAgICAgICAgICAgKDB4MCA8PCAgOCkgLy8gKFRXSSkgTm8gaW50ZXJuYWwgZGV2aWNlIGFkZHJlc3MNCisjZGVmaW5lIAlBVDkxQ19UV0lfSUFEUlNaXzFfQllURSAgICAgICAgICAgICAgICgweDEgPDwgIDgpIC8vIChUV0kpIE9uZS1ieXRlIGludGVybmFsIGRldmljZSBhZGRyZXNzDQorI2RlZmluZSAJQVQ5MUNfVFdJX0lBRFJTWl8yX0JZVEUgICAgICAgICAgICAgICAoMHgyIDw8ICA4KSAvLyAoVFdJKSBUd28tYnl0ZSBpbnRlcm5hbCBkZXZpY2UgYWRkcmVzcw0KKyNkZWZpbmUgCUFUOTFDX1RXSV9JQURSU1pfM19CWVRFICAgICAgICAgICAgICAgKDB4MyA8PCAgOCkgLy8gKFRXSSkgVGhyZWUtYnl0ZSBpbnRlcm5hbCBkZXZpY2UgYWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfVFdJX01SRUFEICAgICAgICAgICAoMHgxIDw8IDEyKSAvLyAoVFdJKSBNYXN0ZXIgUmVhZCBEaXJlY3Rpb24NCisjZGVmaW5lIEFUOTFDX1RXSV9EQURSICAgICAgICAgICAgKDB4N0YgPDwgMTYpIC8vIChUV0kpIERldmljZSBBZGRyZXNzDQorLy8gLS0tLS0tLS0gVFdJX0NXR1IgOiAoVFdJIE9mZnNldDogMHgxMCkgVFdJIENsb2NrIFdhdmVmb3JtIEdlbmVyYXRvciBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RXSV9DTERJViAgICAgICAgICAgKDB4RkYgPDwgIDApIC8vIChUV0kpIENsb2NrIExvdyBEaXZpZGVyDQorI2RlZmluZSBBVDkxQ19UV0lfQ0hESVYgICAgICAgICAgICgweEZGIDw8ICA4KSAvLyAoVFdJKSBDbG9jayBIaWdoIERpdmlkZXINCisjZGVmaW5lIEFUOTFDX1RXSV9DS0RJViAgICAgICAgICAgKDB4NyA8PCAxNikgLy8gKFRXSSkgQ2xvY2sgRGl2aWRlcg0KKy8vIC0tLS0tLS0tIFRXSV9TUiA6IChUV0kgT2Zmc2V0OiAweDIwKSBUV0kgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVFdJX1RYQ09NUCAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoVFdJKSBUcmFuc21pc3Npb24gQ29tcGxldGVkDQorI2RlZmluZSBBVDkxQ19UV0lfUlhSRFkgICAgICAgICAgICgweDEgPDwgIDEpIC8vIChUV0kpIFJlY2VpdmUgaG9sZGluZyByZWdpc3RlciBSZWFEWQ0KKyNkZWZpbmUgQVQ5MUNfVFdJX1RYUkRZICAgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoVFdJKSBUcmFuc21pdCBob2xkaW5nIHJlZ2lzdGVyIFJlYURZDQorI2RlZmluZSBBVDkxQ19UV0lfT1ZSRSAgICAgICAgICAgICgweDEgPDwgIDYpIC8vIChUV0kpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX1RXSV9VTlJFICAgICAgICAgICAgKDB4MSA8PCAgNykgLy8gKFRXSSkgVW5kZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX1RXSV9OQUNLICAgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKFRXSSkgTm90IEFja25vd2xlZGdlZA0KKy8vIC0tLS0tLS0tIFRXSV9JRVIgOiAoVFdJIE9mZnNldDogMHgyNCkgVFdJIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVFdJX0lEUiA6IChUV0kgT2Zmc2V0OiAweDI4KSBUV0kgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVFdJX0lNUiA6IChUV0kgT2Zmc2V0OiAweDJjKSBUV0kgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQV01DIENoYW5uZWwgSW50ZXJmYWNlICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1BXTUNfQ0ggc3RydWN0dXJlICoqKiAqLw0KLSNkZWZpbmUgUFdNQ19DTVIgICAgICAgICAgICAgICAgICAgICggMCApICAgICAgICAgLyogQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBQV01DX0NEVFlSICAgICAgICAgICAgICAgICAgKCA0ICkgICAgICAgICAvKiBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBXTUNfQ1BSRFIgICAgICAgICAgICAgICAgICAoIDggKSAgICAgICAgIC8qIENoYW5uZWwgUGVyaW9kIFJlZ2lzdGVyICovDQotI2RlZmluZSBQV01DX0NDTlRSICAgICAgICAgICAgICAgICAgKCAxMiApICAgICAgICAvKiBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBXTUNfQ1VQRFIgICAgICAgICAgICAgICAgICAoIDE2ICkgICAgICAgIC8qIENoYW5uZWwgVXBkYXRlIFJlZ2lzdGVyICovDQotI2RlZmluZSBQV01DX1Jlc2VydmVkICAgICAgICAgICAgICAgKCAyMCApICAgICAgICAvKiBSZXNlcnZlZCAqLw0KLS8qIC0tLS0tLS0tIFBXTUNfQ01SIDogKFBXTUNfQ0ggT2Zmc2V0OiAweDApIFBXTUMgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NQUkUgICAgICAgICAgICAgKCAweEYgPDwgMCApICAvKiAoUFdNQ19DSCkgQ2hhbm5lbCBQcmUtc2NhbGVyIDogUFdNQ19DTEt4ICovDQotI2RlZmluZSAgICAgQVQ5MUNfUFdNQ19DUFJFX01DSyAgICAgKCAweDAgKSAgICAgICAvKiAoUFdNQ19DSCkgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19QV01DX0NQUkVfTUNLQSAgICAoIDB4QiApICAgICAgIC8qIChQV01DX0NIKSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1BXTUNfQ1BSRV9NQ0tCICAgICggMHhDICkgICAgICAgLyogKFBXTUNfQ0gpICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NBTEcgICAgICAgICAgICAgKCAweDEgPDwgOCApICAvKiAoUFdNQ19DSCkgQ2hhbm5lbCBBbGlnbm1lbnQgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ1BPTCAgICAgICAgICAgICAoIDB4MSA8PCA5ICkgIC8qIChQV01DX0NIKSBDaGFubmVsIFBvbGFyaXR5ICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NQRCAgICAgICAgICAgICAgKCAweDEgPDwgMTAgKSAvKiAoUFdNQ19DSCkgQ2hhbm5lbCBVcGRhdGUgUGVyaW9kICovDQotLyogLS0tLS0tLS0gUFdNQ19DRFRZUiA6IChQV01DX0NIIE9mZnNldDogMHg0KSBQV01DIENoYW5uZWwgRHV0eSBDeWNsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DRFRZICAgICAgICAgICAgICggMHgwIDw8IDAgKSAgLyogKFBXTUNfQ0gpIENoYW5uZWwgRHV0eSBDeWNsZSAqLw0KLS8qIC0tLS0tLS0tIFBXTUNfQ1BSRFIgOiAoUFdNQ19DSCBPZmZzZXQ6IDB4OCkgUFdNQyBDaGFubmVsIFBlcmlvZCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DUFJEICAgICAgICAgICAgICggMHgwIDw8IDAgKSAgLyogKFBXTUNfQ0gpIENoYW5uZWwgUGVyaW9kICovDQotLyogLS0tLS0tLS0gUFdNQ19DQ05UUiA6IChQV01DX0NIIE9mZnNldDogMHhjKSBQV01DIENoYW5uZWwgQ291bnRlciBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DQ05UICAgICAgICAgICAgICggMHgwIDw8IDAgKSAgLyogKFBXTUNfQ0gpIENoYW5uZWwgQ291bnRlciAqLw0KLS8qIC0tLS0tLS0tIFBXTUNfQ1VQRFIgOiAoUFdNQ19DSCBPZmZzZXQ6IDB4MTApIFBXTUMgQ2hhbm5lbCBVcGRhdGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ1VQRCAgICAgICAgICAgICAoIDB4MCA8PCAwICkgIC8qIChQV01DX0NIKSBDaGFubmVsIFVwZGF0ZSAqLw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUFdNQyBDaGFubmVsIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19QV01DX0NIIHN0cnVjdHVyZSAqKioNCisjZGVmaW5lIFBXTUNfQ01SICAgICAgICAoIDApIC8vIENoYW5uZWwgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUFdNQ19DRFRZUiAgICAgICggNCkgLy8gQ2hhbm5lbCBEdXR5IEN5Y2xlIFJlZ2lzdGVyDQorI2RlZmluZSBQV01DX0NQUkRSICAgICAgKCA4KSAvLyBDaGFubmVsIFBlcmlvZCBSZWdpc3Rlcg0KKyNkZWZpbmUgUFdNQ19DQ05UUiAgICAgICgxMikgLy8gQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBQV01DX0NVUERSICAgICAgKDE2KSAvLyBDaGFubmVsIFVwZGF0ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUFdNQ19SZXNlcnZlZCAgICgyMCkgLy8gUmVzZXJ2ZWQNCisvLyAtLS0tLS0tLSBQV01DX0NNUiA6IChQV01DX0NIIE9mZnNldDogMHgwKSBQV01DIENoYW5uZWwgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ1BSRSAgICAgICAgICAgKDB4RiA8PCAgMCkgLy8gKFBXTUNfQ0gpIENoYW5uZWwgUHJlLXNjYWxlciA6IFBXTUNfQ0xLeA0KKyNkZWZpbmUgCUFUOTFDX1BXTUNfQ1BSRV9NQ0sgICAgICAgICAgICAgICAgICAoMHgwKSAvLyAoUFdNQ19DSCkgDQorI2RlZmluZSAJQVQ5MUNfUFdNQ19DUFJFX01DS0EgICAgICAgICAgICAgICAgICgweEIpIC8vIChQV01DX0NIKSANCisjZGVmaW5lIAlBVDkxQ19QV01DX0NQUkVfTUNLQiAgICAgICAgICAgICAgICAgKDB4QykgLy8gKFBXTUNfQ0gpIA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DQUxHICAgICAgICAgICAoMHgxIDw8ICA4KSAvLyAoUFdNQ19DSCkgQ2hhbm5lbCBBbGlnbm1lbnQNCisjZGVmaW5lIEFUOTFDX1BXTUNfQ1BPTCAgICAgICAgICAgKDB4MSA8PCAgOSkgLy8gKFBXTUNfQ0gpIENoYW5uZWwgUG9sYXJpdHkNCisjZGVmaW5lIEFUOTFDX1BXTUNfQ1BEICAgICAgICAgICAgKDB4MSA8PCAxMCkgLy8gKFBXTUNfQ0gpIENoYW5uZWwgVXBkYXRlIFBlcmlvZA0KKy8vIC0tLS0tLS0tIFBXTUNfQ0RUWVIgOiAoUFdNQ19DSCBPZmZzZXQ6IDB4NCkgUFdNQyBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QV01DX0NEVFkgICAgICAgICAgICgweDAgPDwgIDApIC8vIChQV01DX0NIKSBDaGFubmVsIER1dHkgQ3ljbGUNCisvLyAtLS0tLS0tLSBQV01DX0NQUkRSIDogKFBXTUNfQ0ggT2Zmc2V0OiAweDgpIFBXTUMgQ2hhbm5lbCBQZXJpb2QgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QV01DX0NQUkQgICAgICAgICAgICgweDAgPDwgIDApIC8vIChQV01DX0NIKSBDaGFubmVsIFBlcmlvZA0KKy8vIC0tLS0tLS0tIFBXTUNfQ0NOVFIgOiAoUFdNQ19DSCBPZmZzZXQ6IDB4YykgUFdNQyBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QV01DX0NDTlQgICAgICAgICAgICgweDAgPDwgIDApIC8vIChQV01DX0NIKSBDaGFubmVsIENvdW50ZXINCisvLyAtLS0tLS0tLSBQV01DX0NVUERSIDogKFBXTUNfQ0ggT2Zmc2V0OiAweDEwKSBQV01DIENoYW5uZWwgVXBkYXRlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DVVBEICAgICAgICAgICAoMHgwIDw8ICAwKSAvLyAoUFdNQ19DSCkgQ2hhbm5lbCBVcGRhdGUNCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFB1bHNlIFdpZHRoIE1vZHVsYXRpb24gQ29udHJvbGxlciBJbnRlcmZhY2UgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfUFdNQyBzdHJ1Y3R1cmUgKioqICovDQotI2RlZmluZSBQV01DX01SICAgICAgICAgICAgICAgICAgICAoIDAgKSAgICAgICAgICAvKiBQV01DIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBXTUNfRU5BICAgICAgICAgICAgICAgICAgICggNCApICAgICAgICAgIC8qIFBXTUMgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBQV01DX0RJUyAgICAgICAgICAgICAgICAgICAoIDggKSAgICAgICAgICAvKiBQV01DIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBXTUNfU1IgICAgICAgICAgICAgICAgICAgICggMTIgKSAgICAgICAgIC8qIFBXTUMgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBQV01DX0lFUiAgICAgICAgICAgICAgICAgICAoIDE2ICkgICAgICAgICAvKiBQV01DIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBXTUNfSURSICAgICAgICAgICAgICAgICAgICggMjAgKSAgICAgICAgIC8qIFBXTUMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBXTUNfSU1SICAgICAgICAgICAgICAgICAgICggMjQgKSAgICAgICAgIC8qIFBXTUMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBXTUNfSVNSICAgICAgICAgICAgICAgICAgICggMjggKSAgICAgICAgIC8qIFBXTUMgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUFdNQ19WUiAgICAgICAgICAgICAgICAgICAgKCAyNTIgKSAgICAgICAgLyogUFdNQyBWZXJzaW9uIFJlZ2lzdGVyICovDQotI2RlZmluZSBQV01DX0NIICAgICAgICAgICAgICAgICAgICAoIDUxMiApICAgICAgICAvKiBQV01DIENoYW5uZWwgKi8NCi0vKiAtLS0tLS0tLSBQV01DX01SIDogKFBXTUMgT2Zmc2V0OiAweDApIFBXTUMgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19ESVZBICAgICAgICAgICAgKCAweEZGIDw8IDAgKSAgLyogKFBXTUMpIENMS0EgZGl2aWRlIGZhY3Rvci4gKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfUFJFQSAgICAgICAgICAgICggMHhGIDw8IDggKSAgIC8qIChQV01DKSBEaXZpZGVyIElucHV0IENsb2NrIFByZXNjYWxlciBBICovDQotI2RlZmluZSAgICAgQVQ5MUNfUFdNQ19QUkVBX01DSyAgICAoIDB4MCA8PCA4ICkgICAvKiAoUFdNQykgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfRElWQiAgICAgICAgICAgICggMHhGRiA8PCAxNiApIC8qIChQV01DKSBDTEtCIGRpdmlkZSBmYWN0b3IuICovDQotI2RlZmluZSBBVDkxQ19QV01DX1BSRUIgICAgICAgICAgICAoIDB4RiA8PCAyNCApICAvKiAoUFdNQykgRGl2aWRlciBJbnB1dCBDbG9jayBQcmVzY2FsZXIgQiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1BXTUNfUFJFQl9NQ0sgICAgKCAweDAgPDwgMjQgKSAgLyogKFBXTUMpICovDQotLyogLS0tLS0tLS0gUFdNQ19FTkEgOiAoUFdNQyBPZmZzZXQ6IDB4NCkgUFdNQyBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0hJRDAgICAgICAgICAgICggMHgxIDw8IDAgKSAgIC8qIChQV01DKSBDaGFubmVsIElEIDAgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0hJRDEgICAgICAgICAgICggMHgxIDw8IDEgKSAgIC8qIChQV01DKSBDaGFubmVsIElEIDEgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0hJRDIgICAgICAgICAgICggMHgxIDw8IDIgKSAgIC8qIChQV01DKSBDaGFubmVsIElEIDIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0hJRDMgICAgICAgICAgICggMHgxIDw8IDMgKSAgIC8qIChQV01DKSBDaGFubmVsIElEIDMgKi8NCi0vKiAtLS0tLS0tLSBQV01DX0RJUyA6IChQV01DIE9mZnNldDogMHg4KSBQV01DIERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBQV01DX1NSIDogKFBXTUMgT2Zmc2V0OiAweGMpIFBXTUMgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gUFdNQ19JRVIgOiAoUFdNQyBPZmZzZXQ6IDB4MTApIFBXTUMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFBXTUNfSURSIDogKFBXTUMgT2Zmc2V0OiAweDE0KSBQV01DIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gUFdNQ19JTVIgOiAoUFdNQyBPZmZzZXQ6IDB4MTgpIFBXTUMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBQV01DX0lTUiA6IChQV01DIE9mZnNldDogMHgxYykgUFdNQyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQdWxzZSBXaWR0aCBNb2R1bGF0aW9uIENvbnRyb2xsZXIgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1BXTUMgc3RydWN0dXJlICoqKg0KKyNkZWZpbmUgUFdNQ19NUiAgICAgICAgICggMCkgLy8gUFdNQyBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBQV01DX0VOQSAgICAgICAgKCA0KSAvLyBQV01DIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUFdNQ19ESVMgICAgICAgICggOCkgLy8gUFdNQyBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBQV01DX1NSICAgICAgICAgKDEyKSAvLyBQV01DIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgUFdNQ19JRVIgICAgICAgICgxNikgLy8gUFdNQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBQV01DX0lEUiAgICAgICAgKDIwKSAvLyBQV01DIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBQV01DX0lNUiAgICAgICAgKDI0KSAvLyBQV01DIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBQV01DX0lTUiAgICAgICAgKDI4KSAvLyBQV01DIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFBXTUNfVlIgICAgICAgICAoMjUyKSAvLyBQV01DIFZlcnNpb24gUmVnaXN0ZXINCisjZGVmaW5lIFBXTUNfQ0ggICAgICAgICAoNTEyKSAvLyBQV01DIENoYW5uZWwNCisvLyAtLS0tLS0tLSBQV01DX01SIDogKFBXTUMgT2Zmc2V0OiAweDApIFBXTUMgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BXTUNfRElWQSAgICAgICAgICAgKDB4RkYgPDwgIDApIC8vIChQV01DKSBDTEtBIGRpdmlkZSBmYWN0b3IuDQorI2RlZmluZSBBVDkxQ19QV01DX1BSRUEgICAgICAgICAgICgweEYgPDwgIDgpIC8vIChQV01DKSBEaXZpZGVyIElucHV0IENsb2NrIFByZXNjYWxlciBBDQorI2RlZmluZSAJQVQ5MUNfUFdNQ19QUkVBX01DSyAgICAgICAgICAgICAgICAgICgweDAgPDwgIDgpIC8vIChQV01DKSANCisjZGVmaW5lIEFUOTFDX1BXTUNfRElWQiAgICAgICAgICAgKDB4RkYgPDwgMTYpIC8vIChQV01DKSBDTEtCIGRpdmlkZSBmYWN0b3IuDQorI2RlZmluZSBBVDkxQ19QV01DX1BSRUIgICAgICAgICAgICgweEYgPDwgMjQpIC8vIChQV01DKSBEaXZpZGVyIElucHV0IENsb2NrIFByZXNjYWxlciBCDQorI2RlZmluZSAJQVQ5MUNfUFdNQ19QUkVCX01DSyAgICAgICAgICAgICAgICAgICgweDAgPDwgMjQpIC8vIChQV01DKSANCisvLyAtLS0tLS0tLSBQV01DX0VOQSA6IChQV01DIE9mZnNldDogMHg0KSBQV01DIEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0hJRDAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFBXTUMpIENoYW5uZWwgSUQgMA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSElEMSAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoUFdNQykgQ2hhbm5lbCBJRCAxDQorI2RlZmluZSBBVDkxQ19QV01DX0NISUQyICAgICAgICAgICgweDEgPDwgIDIpIC8vIChQV01DKSBDaGFubmVsIElEIDINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0hJRDMgICAgICAgICAgKDB4MSA8PCAgMykgLy8gKFBXTUMpIENoYW5uZWwgSUQgMw0KKy8vIC0tLS0tLS0tIFBXTUNfRElTIDogKFBXTUMgT2Zmc2V0OiAweDgpIFBXTUMgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQV01DX1NSIDogKFBXTUMgT2Zmc2V0OiAweGMpIFBXTUMgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFBXTUNfSUVSIDogKFBXTUMgT2Zmc2V0OiAweDEwKSBQV01DIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUFdNQ19JRFIgOiAoUFdNQyBPZmZzZXQ6IDB4MTQpIFBXTUMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUFdNQ19JTVIgOiAoUFdNQyBPZmZzZXQ6IDB4MTgpIFBXTUMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUFdNQ19JU1IgOiAoUFdNQyBPZmZzZXQ6IDB4MWMpIFBXTUMgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFVTQiBEZXZpY2UgSW50ZXJmYWNlICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1VEUCBzdHJ1Y3R1cmUgKioqICovDQotI2RlZmluZSBVRFBfTlVNICAgICAgICAgICAgICAoIDAgKSAgICAgICAgICAvKiBGcmFtZSBOdW1iZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFVEUF9HTEJTVEFURSAgICAgICAgICggNCApICAgICAgICAgIC8qIEdsb2JhbCBTdGF0ZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVURQX0ZBRERSICAgICAgICAgICAgKCA4ICkgICAgICAgICAgLyogRnVuY3Rpb24gQWRkcmVzcyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVURQX0lFUiAgICAgICAgICAgICAgKCAxNiApICAgICAgICAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVURQX0lEUiAgICAgICAgICAgICAgKCAyMCApICAgICAgICAgLyogSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFVEUF9JTVIgICAgICAgICAgICAgICggMjQgKSAgICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBVRFBfSVNSICAgICAgICAgICAgICAoIDI4ICkgICAgICAgICAvKiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBVRFBfSUNSICAgICAgICAgICAgICAoIDMyICkgICAgICAgICAvKiBJbnRlcnJ1cHQgQ2xlYXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFVEUF9SU1RFUCAgICAgICAgICAgICggNDAgKSAgICAgICAgIC8qIFJlc2V0IEVuZHBvaW50IFJlZ2lzdGVyICovDQotI2RlZmluZSBVRFBfQ1NSICAgICAgICAgICAgICAoIDQ4ICkgICAgICAgICAvKiBFbmRwb2ludCBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFVEUF9GRFIgICAgICAgICAgICAgICggODAgKSAgICAgICAgIC8qIEVuZHBvaW50IEZJRk8gRGF0YSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVURQX1RYVkMgICAgICAgICAgICAgKCAxMTYgKSAgICAgICAgLyogVHJhbnNjZWl2ZXIgQ29udHJvbCBSZWdpc3RlciAqLw0KLS8qIC0tLS0tLS0tIFVEUF9GUk1fTlVNIDogKFVEUCBPZmZzZXQ6IDB4MCkgVVNCIEZyYW1lIE51bWJlciBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0ZSTV9OVU0gICAgKCAweDdGRiA8PCAwICkgLyogKFVEUCkgRnJhbWUgTnVtYmVyIGFzIERlZmluZWQgaW4gdGhlIFBhY2tldCBGaWVsZCBGb3JtYXRzICovDQotI2RlZmluZSBBVDkxQ19VRFBfRlJNX0VSUiAgICAoIDB4MSA8PCAxNiApICAvKiAoVURQKSBGcmFtZSBFcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0ZSTV9PSyAgICAgKCAweDEgPDwgMTcgKSAgLyogKFVEUCkgRnJhbWUgT0sgKi8NCi0vKiAtLS0tLS0tLSBVRFBfR0xCX1NUQVRFIDogKFVEUCBPZmZzZXQ6IDB4NCkgVVNCIEdsb2JhbCBTdGF0ZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0ZBRERFTiAgICAgKCAweDEgPDwgMCApICAgLyogKFVEUCkgRnVuY3Rpb24gQWRkcmVzcyBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9DT05GRyAgICAgICggMHgxIDw8IDEgKSAgIC8qIChVRFApIENvbmZpZ3VyZWQgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FU1IgICAgICAgICggMHgxIDw8IDIgKSAgIC8qIChVRFApIEVuYWJsZSBTZW5kIFJlc3VtZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX1JTTUlOUFIgICAgKCAweDEgPDwgMyApICAgLyogKFVEUCkgQSBSZXN1bWUgSGFzIEJlZW4gU2VudCB0byB0aGUgSG9zdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX1JNV1VQRSAgICAgKCAweDEgPDwgNCApICAgLyogKFVEUCkgUmVtb3RlIFdha2UgVXAgRW5hYmxlICovDQotLyogLS0tLS0tLS0gVURQX0ZBRERSIDogKFVEUCBPZmZzZXQ6IDB4OCkgVVNCIEZ1bmN0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9GQUREICAgICAgICggMHhGRiA8PCAwICkgIC8qIChVRFApIEZ1bmN0aW9uIEFkZHJlc3MgVmFsdWUgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9GRU4gICAgICAgICggMHgxIDw8IDggKSAgIC8qIChVRFApIEZ1bmN0aW9uIEVuYWJsZSAqLw0KLS8qIC0tLS0tLS0tIFVEUF9JRVIgOiAoVURQIE9mZnNldDogMHgxMCkgVVNCIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUElOVDAgICAgICggMHgxIDw8IDAgKSAgIC8qIChVRFApIEVuZHBvaW50IDAgSW50ZXJydXB0ICovDQotI2RlZmluZSBBVDkxQ19VRFBfRVBJTlQxICAgICAoIDB4MSA8PCAxICkgICAvKiAoVURQKSBFbmRwb2ludCAwIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UMiAgICAgKCAweDEgPDwgMiApICAgLyogKFVEUCkgRW5kcG9pbnQgMiBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUElOVDMgICAgICggMHgxIDw8IDMgKSAgIC8qIChVRFApIEVuZHBvaW50IDMgSW50ZXJydXB0ICovDQotI2RlZmluZSBBVDkxQ19VRFBfRVBJTlQ0ICAgICAoIDB4MSA8PCA0ICkgICAvKiAoVURQKSBFbmRwb2ludCA0IEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UNSAgICAgKCAweDEgPDwgNSApICAgLyogKFVEUCkgRW5kcG9pbnQgNSBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9SWFNVU1AgICAgICggMHgxIDw8IDggKSAgIC8qIChVRFApIFVTQiBTdXNwZW5kIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX1JYUlNNICAgICAgKCAweDEgPDwgOSApICAgLyogKFVEUCkgVVNCIFJlc3VtZSBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FWFRSU00gICAgICggMHgxIDw8IDEwICkgIC8qIChVRFApIFVTQiBFeHRlcm5hbCBSZXN1bWUgSW50ZXJydXB0ICovDQotI2RlZmluZSBBVDkxQ19VRFBfU09GSU5UICAgICAoIDB4MSA8PCAxMSApICAvKiAoVURQKSBVU0IgU3RhcnQgT2YgZnJhbWUgSW50ZXJydXB0ICovDQotI2RlZmluZSBBVDkxQ19VRFBfV0FLRVVQICAgICAoIDB4MSA8PCAxMyApICAvKiAoVURQKSBVU0IgUmVzdW1lIEludGVycnVwdCAqLw0KLS8qIC0tLS0tLS0tIFVEUF9JRFIgOiAoVURQIE9mZnNldDogMHgxNCkgVVNCIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gVURQX0lNUiA6IChVRFAgT2Zmc2V0OiAweDE4KSBVU0IgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBVRFBfSVNSIDogKFVEUCBPZmZzZXQ6IDB4MWMpIFVTQiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19VRFBfRU5EQlVTUkVTICAgICAgICAgICAgICAoIDB4MSA8PCAxMiApIC8qIChVRFApIFVTQiBFbmQgT2YgQnVzIFJlc2V0IEludGVycnVwdCAqLw0KLS8qIC0tLS0tLS0tIFVEUF9JQ1IgOiAoVURQIE9mZnNldDogMHgyMCkgVVNCIEludGVycnVwdCBDbGVhciBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFVEUF9SU1RfRVAgOiAoVURQIE9mZnNldDogMHgyOCkgVVNCIFJlc2V0IEVuZHBvaW50IFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19VRFBfRVAwICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAwICkgICAgLyogKFVEUCkgUmVzZXQgRW5kcG9pbnQgMCAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0VQMSAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMSApICAgIC8qIChVRFApIFJlc2V0IEVuZHBvaW50IDEgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUDIgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDIgKSAgICAvKiAoVURQKSBSZXNldCBFbmRwb2ludCAyICovDQotI2RlZmluZSBBVDkxQ19VRFBfRVAzICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAzICkgICAgLyogKFVEUCkgUmVzZXQgRW5kcG9pbnQgMyAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0VQNCAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgNCApICAgIC8qIChVRFApIFJlc2V0IEVuZHBvaW50IDQgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUDUgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDUgKSAgICAvKiAoVURQKSBSZXNldCBFbmRwb2ludCA1ICovDQotLyogLS0tLS0tLS0gVURQX0NTUiA6IChVRFAgT2Zmc2V0OiAweDMwKSBVU0IgRW5kcG9pbnQgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19VRFBfVFhDT01QICAgICAgICAgICAgICAgICAoIDB4MSA8PCAwICkgICAgLyogKFVEUCkgR2VuZXJhdGVzIGFuIElOIHBhY2tldCB3aXRoIGRhdGEgcHJldmlvdXNseSB3cml0dGVuIGluIHRoZSBEUFIgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9SWF9EQVRBX0JLMCAgICAgICAgICAgICggMHgxIDw8IDEgKSAgICAvKiAoVURQKSBSZWNlaXZlIERhdGEgQmFuayAwICovDQotI2RlZmluZSBBVDkxQ19VRFBfUlhTRVRVUCAgICAgICAgICAgICAgICAoIDB4MSA8PCAyICkgICAgLyogKFVEUCkgU2VuZHMgU1RBTEwgdG8gdGhlIEhvc3QgKENvbnRyb2wgZW5kcG9pbnRzKSAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0lTT0VSUk9SICAgICAgICAgICAgICAgKCAweDEgPDwgMyApICAgIC8qIChVRFApIElzb2Nocm9ub3VzIGVycm9yIChJc29jaHJvbm91cyBlbmRwb2ludHMpICovDQotI2RlZmluZSBBVDkxQ19VRFBfVFhQS1RSRFkgICAgICAgICAgICAgICAoIDB4MSA8PCA0ICkgICAgLyogKFVEUCkgVHJhbnNtaXQgUGFja2V0IFJlYWR5ICovDQotI2RlZmluZSBBVDkxQ19VRFBfRk9SQ0VTVEFMTCAgICAgICAgICAgICAoIDB4MSA8PCA1ICkgICAgLyogKFVEUCkgRm9yY2UgU3RhbGwgKHVzZWQgYnkgQ29udHJvbCwgQnVsayBhbmQgSXNvY2hyb25vdXMgZW5kcG9pbnRzKS4gKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9SWF9EQVRBX0JLMSAgICAgICAgICAgICggMHgxIDw8IDYgKSAgICAvKiAoVURQKSBSZWNlaXZlIERhdGEgQmFuayAxIChvbmx5IHVzZWQgYnkgZW5kcG9pbnRzIHdpdGggcGluZy1wb25nIGF0dHJpYnV0ZXMpLiAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0RJUiAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgNyApICAgIC8qIChVRFApIFRyYW5zZmVyIERpcmVjdGlvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0VQVFlQRSAgICAgICAgICAgICAgICAgKCAweDcgPDwgOCApICAgIC8qIChVRFApIEVuZHBvaW50IHR5cGUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VRFBfRVBUWVBFX0NUUkwgICAgICAgICggMHgwIDw8IDggKSAgICAvKiAoVURQKSBDb250cm9sICovDQotI2RlZmluZSAgICAgQVQ5MUNfVURQX0VQVFlQRV9JU09fT1VUICAgICAoIDB4MSA8PCA4ICkgICAgLyogKFVEUCkgSXNvY2hyb25vdXMgT1VUICovDQotI2RlZmluZSAgICAgQVQ5MUNfVURQX0VQVFlQRV9CVUxLX09VVCAgICAoIDB4MiA8PCA4ICkgICAgLyogKFVEUCkgQnVsayBPVVQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VRFBfRVBUWVBFX0lOVF9PVVQgICAgICggMHgzIDw8IDggKSAgICAvKiAoVURQKSBJbnRlcnJ1cHQgT1VUICovDQotI2RlZmluZSAgICAgQVQ5MUNfVURQX0VQVFlQRV9JU09fSU4gICAgICAoIDB4NSA8PCA4ICkgICAgLyogKFVEUCkgSXNvY2hyb25vdXMgSU4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VRFBfRVBUWVBFX0JVTEtfSU4gICAgICggMHg2IDw8IDggKSAgICAvKiAoVURQKSBCdWxrIElOICovDQotI2RlZmluZSAgICAgQVQ5MUNfVURQX0VQVFlQRV9JTlRfSU4gICAgICAoIDB4NyA8PCA4ICkgICAgLyogKFVEUCkgSW50ZXJydXB0IElOICovDQotI2RlZmluZSBBVDkxQ19VRFBfRFRHTEUgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxMSApICAgLyogKFVEUCkgRGF0YSBUb2dnbGUgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUEVEUyAgICAgICAgICAgICAgICAgICggMHgxIDw8IDE1ICkgICAvKiAoVURQKSBFbmRwb2ludCBFbmFibGUgRGlzYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX1JYQllURUNOVCAgICAgICAgICAgICAgKCAweDdGRiA8PCAxNiApIC8qIChVRFApIE51bWJlciBPZiBCeXRlcyBBdmFpbGFibGUgaW4gdGhlIEZJRk8gKi8NCi0vKiAtLS0tLS0tLSBVRFBfVFhWQyA6IChVRFAgT2Zmc2V0OiAweDc0KSBUcmFuc2NlaXZlciBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19VRFBfVFhWRElTICAgICAgICAgICAgICAgICAoIDB4MSA8PCA4ICkgICAgLyogKFVEUCkgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9QVU9OICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDkgKSAgICAvKiAoVURQKSBQdWxsLXVwIE9OICovDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBVU0IgRGV2aWNlIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19VRFAgc3RydWN0dXJlICoqKg0KKyNkZWZpbmUgVURQX05VTSAgICAgICAgICggMCkgLy8gRnJhbWUgTnVtYmVyIFJlZ2lzdGVyDQorI2RlZmluZSBVRFBfR0xCU1RBVEUgICAgKCA0KSAvLyBHbG9iYWwgU3RhdGUgUmVnaXN0ZXINCisjZGVmaW5lIFVEUF9GQUREUiAgICAgICAoIDgpIC8vIEZ1bmN0aW9uIEFkZHJlc3MgUmVnaXN0ZXINCisjZGVmaW5lIFVEUF9JRVIgICAgICAgICAoMTYpIC8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFVEUF9JRFIgICAgICAgICAoMjApIC8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBVRFBfSU1SICAgICAgICAgKDI0KSAvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgVURQX0lTUiAgICAgICAgICgyOCkgLy8gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgVURQX0lDUiAgICAgICAgICgzMikgLy8gSW50ZXJydXB0IENsZWFyIFJlZ2lzdGVyDQorI2RlZmluZSBVRFBfUlNURVAgICAgICAgKDQwKSAvLyBSZXNldCBFbmRwb2ludCBSZWdpc3Rlcg0KKyNkZWZpbmUgVURQX0NTUiAgICAgICAgICg0OCkgLy8gRW5kcG9pbnQgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBVRFBfRkRSICAgICAgICAgKDgwKSAvLyBFbmRwb2ludCBGSUZPIERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIFVEUF9UWFZDICAgICAgICAoMTE2KSAvLyBUcmFuc2NlaXZlciBDb250cm9sIFJlZ2lzdGVyDQorLy8gLS0tLS0tLS0gVURQX0ZSTV9OVU0gOiAoVURQIE9mZnNldDogMHgwKSBVU0IgRnJhbWUgTnVtYmVyIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZSTV9OVU0gICAgICAgICAoMHg3RkYgPDwgIDApIC8vIChVRFApIEZyYW1lIE51bWJlciBhcyBEZWZpbmVkIGluIHRoZSBQYWNrZXQgRmllbGQgRm9ybWF0cw0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZSTV9FUlIgICAgICAgICAoMHgxIDw8IDE2KSAvLyAoVURQKSBGcmFtZSBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZSTV9PSyAgICAgICAgICAoMHgxIDw8IDE3KSAvLyAoVURQKSBGcmFtZSBPSw0KKy8vIC0tLS0tLS0tIFVEUF9HTEJfU1RBVEUgOiAoVURQIE9mZnNldDogMHg0KSBVU0IgR2xvYmFsIFN0YXRlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZBRERFTiAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoVURQKSBGdW5jdGlvbiBBZGRyZXNzIEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVURQX0NPTkZHICAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoVURQKSBDb25maWd1cmVkDQorI2RlZmluZSBBVDkxQ19VRFBfRVNSICAgICAgICAgICAgICgweDEgPDwgIDIpIC8vIChVRFApIEVuYWJsZSBTZW5kIFJlc3VtZQ0KKyNkZWZpbmUgQVQ5MUNfVURQX1JTTUlOUFIgICAgICAgICAoMHgxIDw8ICAzKSAvLyAoVURQKSBBIFJlc3VtZSBIYXMgQmVlbiBTZW50IHRvIHRoZSBIb3N0DQorI2RlZmluZSBBVDkxQ19VRFBfUk1XVVBFICAgICAgICAgICgweDEgPDwgIDQpIC8vIChVRFApIFJlbW90ZSBXYWtlIFVwIEVuYWJsZQ0KKy8vIC0tLS0tLS0tIFVEUF9GQUREUiA6IChVRFAgT2Zmc2V0OiAweDgpIFVTQiBGdW5jdGlvbiBBZGRyZXNzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZBREQgICAgICAgICAgICAoMHhGRiA8PCAgMCkgLy8gKFVEUCkgRnVuY3Rpb24gQWRkcmVzcyBWYWx1ZQ0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZFTiAgICAgICAgICAgICAoMHgxIDw8ICA4KSAvLyAoVURQKSBGdW5jdGlvbiBFbmFibGUNCisvLyAtLS0tLS0tLSBVRFBfSUVSIDogKFVEUCBPZmZzZXQ6IDB4MTApIFVTQiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UMCAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoVURQKSBFbmRwb2ludCAwIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UMSAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoVURQKSBFbmRwb2ludCAwIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UMiAgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoVURQKSBFbmRwb2ludCAyIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UMyAgICAgICAgICAoMHgxIDw8ICAzKSAvLyAoVURQKSBFbmRwb2ludCAzIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UNCAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoVURQKSBFbmRwb2ludCA0IEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UNSAgICAgICAgICAoMHgxIDw8ICA1KSAvLyAoVURQKSBFbmRwb2ludCA1IEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX1JYU1VTUCAgICAgICAgICAoMHgxIDw8ICA4KSAvLyAoVURQKSBVU0IgU3VzcGVuZCBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9SWFJTTSAgICAgICAgICAgKDB4MSA8PCAgOSkgLy8gKFVEUCkgVVNCIFJlc3VtZSBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9FWFRSU00gICAgICAgICAgKDB4MSA8PCAxMCkgLy8gKFVEUCkgVVNCIEV4dGVybmFsIFJlc3VtZSBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9TT0ZJTlQgICAgICAgICAgKDB4MSA8PCAxMSkgLy8gKFVEUCkgVVNCIFN0YXJ0IE9mIGZyYW1lIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX1dBS0VVUCAgICAgICAgICAoMHgxIDw8IDEzKSAvLyAoVURQKSBVU0IgUmVzdW1lIEludGVycnVwdA0KKy8vIC0tLS0tLS0tIFVEUF9JRFIgOiAoVURQIE9mZnNldDogMHgxNCkgVVNCIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFVEUF9JTVIgOiAoVURQIE9mZnNldDogMHgxOCkgVVNCIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFVEUF9JU1IgOiAoVURQIE9mZnNldDogMHgxYykgVVNCIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VRFBfRU5EQlVTUkVTICAgICAgICgweDEgPDwgMTIpIC8vIChVRFApIFVTQiBFbmQgT2YgQnVzIFJlc2V0IEludGVycnVwdA0KKy8vIC0tLS0tLS0tIFVEUF9JQ1IgOiAoVURQIE9mZnNldDogMHgyMCkgVVNCIEludGVycnVwdCBDbGVhciBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBVRFBfUlNUX0VQIDogKFVEUCBPZmZzZXQ6IDB4MjgpIFVTQiBSZXNldCBFbmRwb2ludCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VEUF9FUDAgICAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFVEUCkgUmVzZXQgRW5kcG9pbnQgMA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQMSAgICAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoVURQKSBSZXNldCBFbmRwb2ludCAxDQorI2RlZmluZSBBVDkxQ19VRFBfRVAyICAgICAgICAgICAgICgweDEgPDwgIDIpIC8vIChVRFApIFJlc2V0IEVuZHBvaW50IDINCisjZGVmaW5lIEFUOTFDX1VEUF9FUDMgICAgICAgICAgICAgKDB4MSA8PCAgMykgLy8gKFVEUCkgUmVzZXQgRW5kcG9pbnQgMw0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQNCAgICAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoVURQKSBSZXNldCBFbmRwb2ludCA0DQorI2RlZmluZSBBVDkxQ19VRFBfRVA1ICAgICAgICAgICAgICgweDEgPDwgIDUpIC8vIChVRFApIFJlc2V0IEVuZHBvaW50IDUNCisvLyAtLS0tLS0tLSBVRFBfQ1NSIDogKFVEUCBPZmZzZXQ6IDB4MzApIFVTQiBFbmRwb2ludCBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VRFBfVFhDT01QICAgICAgICAgICgweDEgPDwgIDApIC8vIChVRFApIEdlbmVyYXRlcyBhbiBJTiBwYWNrZXQgd2l0aCBkYXRhIHByZXZpb3VzbHkgd3JpdHRlbiBpbiB0aGUgRFBSDQorI2RlZmluZSBBVDkxQ19VRFBfUlhfREFUQV9CSzAgICAgICgweDEgPDwgIDEpIC8vIChVRFApIFJlY2VpdmUgRGF0YSBCYW5rIDANCisjZGVmaW5lIEFUOTFDX1VEUF9SWFNFVFVQICAgICAgICAgKDB4MSA8PCAgMikgLy8gKFVEUCkgU2VuZHMgU1RBTEwgdG8gdGhlIEhvc3QgKENvbnRyb2wgZW5kcG9pbnRzKQ0KKyNkZWZpbmUgQVQ5MUNfVURQX0lTT0VSUk9SICAgICAgICAoMHgxIDw8ICAzKSAvLyAoVURQKSBJc29jaHJvbm91cyBlcnJvciAoSXNvY2hyb25vdXMgZW5kcG9pbnRzKQ0KKyNkZWZpbmUgQVQ5MUNfVURQX1RYUEtUUkRZICAgICAgICAoMHgxIDw8ICA0KSAvLyAoVURQKSBUcmFuc21pdCBQYWNrZXQgUmVhZHkNCisjZGVmaW5lIEFUOTFDX1VEUF9GT1JDRVNUQUxMICAgICAgKDB4MSA8PCAgNSkgLy8gKFVEUCkgRm9yY2UgU3RhbGwgKHVzZWQgYnkgQ29udHJvbCwgQnVsayBhbmQgSXNvY2hyb25vdXMgZW5kcG9pbnRzKS4NCisjZGVmaW5lIEFUOTFDX1VEUF9SWF9EQVRBX0JLMSAgICAgKDB4MSA8PCAgNikgLy8gKFVEUCkgUmVjZWl2ZSBEYXRhIEJhbmsgMSAob25seSB1c2VkIGJ5IGVuZHBvaW50cyB3aXRoIHBpbmctcG9uZyBhdHRyaWJ1dGVzKS4NCisjZGVmaW5lIEFUOTFDX1VEUF9ESVIgICAgICAgICAgICAgKDB4MSA8PCAgNykgLy8gKFVEUCkgVHJhbnNmZXIgRGlyZWN0aW9uDQorI2RlZmluZSBBVDkxQ19VRFBfRVBUWVBFICAgICAgICAgICgweDcgPDwgIDgpIC8vIChVRFApIEVuZHBvaW50IHR5cGUNCisjZGVmaW5lIAlBVDkxQ19VRFBfRVBUWVBFX0NUUkwgICAgICAgICAgICAgICAgICgweDAgPDwgIDgpIC8vIChVRFApIENvbnRyb2wNCisjZGVmaW5lIAlBVDkxQ19VRFBfRVBUWVBFX0lTT19PVVQgICAgICAgICAgICAgICgweDEgPDwgIDgpIC8vIChVRFApIElzb2Nocm9ub3VzIE9VVA0KKyNkZWZpbmUgCUFUOTFDX1VEUF9FUFRZUEVfQlVMS19PVVQgICAgICAgICAgICAgKDB4MiA8PCAgOCkgLy8gKFVEUCkgQnVsayBPVVQNCisjZGVmaW5lIAlBVDkxQ19VRFBfRVBUWVBFX0lOVF9PVVQgICAgICAgICAgICAgICgweDMgPDwgIDgpIC8vIChVRFApIEludGVycnVwdCBPVVQNCisjZGVmaW5lIAlBVDkxQ19VRFBfRVBUWVBFX0lTT19JTiAgICAgICAgICAgICAgICgweDUgPDwgIDgpIC8vIChVRFApIElzb2Nocm9ub3VzIElODQorI2RlZmluZSAJQVQ5MUNfVURQX0VQVFlQRV9CVUxLX0lOICAgICAgICAgICAgICAoMHg2IDw8ICA4KSAvLyAoVURQKSBCdWxrIElODQorI2RlZmluZSAJQVQ5MUNfVURQX0VQVFlQRV9JTlRfSU4gICAgICAgICAgICAgICAoMHg3IDw8ICA4KSAvLyAoVURQKSBJbnRlcnJ1cHQgSU4NCisjZGVmaW5lIEFUOTFDX1VEUF9EVEdMRSAgICAgICAgICAgKDB4MSA8PCAxMSkgLy8gKFVEUCkgRGF0YSBUb2dnbGUNCisjZGVmaW5lIEFUOTFDX1VEUF9FUEVEUyAgICAgICAgICAgKDB4MSA8PCAxNSkgLy8gKFVEUCkgRW5kcG9pbnQgRW5hYmxlIERpc2FibGUNCisjZGVmaW5lIEFUOTFDX1VEUF9SWEJZVEVDTlQgICAgICAgKDB4N0ZGIDw8IDE2KSAvLyAoVURQKSBOdW1iZXIgT2YgQnl0ZXMgQXZhaWxhYmxlIGluIHRoZSBGSUZPDQorLy8gLS0tLS0tLS0gVURQX1RYVkMgOiAoVURQIE9mZnNldDogMHg3NCkgVHJhbnNjZWl2ZXIgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VEUF9UWFZESVMgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKFVEUCkgDQorI2RlZmluZSBBVDkxQ19VRFBfUFVPTiAgICAgICAgICAgICgweDEgPDwgIDkpIC8vIChVRFApIFB1bGwtdXAgT04NCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFRpbWVyIENvdW50ZXIgQ2hhbm5lbCBJbnRlcmZhY2UgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfVEMgc3RydWN0dXJlICoqKiAqLw0KLSNkZWZpbmUgVENfQ0NSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDAgKSAgICAgICAgIC8qIENoYW5uZWwgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVENfQ01SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDQgKSAgICAgICAgIC8qIENoYW5uZWwgTW9kZSBSZWdpc3RlciAoQ2FwdHVyZSBNb2RlIC8gV2F2ZWZvcm0gTW9kZSkgKi8NCi0jZGVmaW5lIFRDX0NWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAxNiApICAgICAgICAvKiBDb3VudGVyIFZhbHVlICovDQotI2RlZmluZSBUQ19SQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMjAgKSAgICAgICAgLyogUmVnaXN0ZXIgQSAqLw0KLSNkZWZpbmUgVENfUkIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDI0ICkgICAgICAgIC8qIFJlZ2lzdGVyIEIgKi8NCi0jZGVmaW5lIFRDX1JDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAyOCApICAgICAgICAvKiBSZWdpc3RlciBDICovDQotI2RlZmluZSBUQ19TUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMzIgKSAgICAgICAgLyogU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBUQ19JRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMzYgKSAgICAgICAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVENfSURSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDQwICkgICAgICAgIC8qIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBUQ19JTVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggNDQgKSAgICAgICAgLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0vKiAtLS0tLS0tLSBUQ19DQ1IgOiAoVEMgT2Zmc2V0OiAweDApIFRDIENoYW5uZWwgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQ0xLRU4gICAgICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAwICkgIC8qIChUQykgQ291bnRlciBDbG9jayBFbmFibGUgQ29tbWFuZCAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQ0xLRElTICAgICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxICkgIC8qIChUQykgQ291bnRlciBDbG9jayBEaXNhYmxlIENvbW1hbmQgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX1NXVFJHICAgICAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMiApICAvKiAoVEMpIFNvZnR3YXJlIFRyaWdnZXIgQ29tbWFuZCAqLw0KLS8qIC0tLS0tLS0tIFRDX0NNUiA6IChUQyBPZmZzZXQ6IDB4NCkgVEMgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyOiBDYXB0dXJlIE1vZGUgLyBXYXZlZm9ybSBNb2RlIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19UQ19DTEtTICAgICAgICAgICAgICAgICAgICAgICAgICggMHg3IDw8IDAgKSAgLyogKFRDKSBDbG9jayBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjFfQ0xPQ0sgICAgKCAweDAgKSAgICAgICAvKiAoVEMpIENsb2NrIHNlbGVjdGVkOiBUSU1FUl9ESVYxX0NMT0NLICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQ0xLU19USU1FUl9ESVYyX0NMT0NLICAgICggMHgxICkgICAgICAgLyogKFRDKSBDbG9jayBzZWxlY3RlZDogVElNRVJfRElWMl9DTE9DSyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0NMS1NfVElNRVJfRElWM19DTE9DSyAgICAoIDB4MiApICAgICAgIC8qIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjNfQ0xPQ0sgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjRfQ0xPQ0sgICAgKCAweDMgKSAgICAgICAvKiAoVEMpIENsb2NrIHNlbGVjdGVkOiBUSU1FUl9ESVY0X0NMT0NLICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQ0xLU19USU1FUl9ESVY1X0NMT0NLICAgICggMHg0ICkgICAgICAgLyogKFRDKSBDbG9jayBzZWxlY3RlZDogVElNRVJfRElWNV9DTE9DSyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0NMS1NfWEMwICAgICAgICAgICAgICAgICAoIDB4NSApICAgICAgIC8qIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFhDMCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0NMS1NfWEMxICAgICAgICAgICAgICAgICAoIDB4NiApICAgICAgIC8qIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFhDMSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0NMS1NfWEMyICAgICAgICAgICAgICAgICAoIDB4NyApICAgICAgIC8qIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFhDMiAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQ0xLSSAgICAgICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAzICkgIC8qIChUQykgQ2xvY2sgSW52ZXJ0ICovDQotI2RlZmluZSBBVDkxQ19UQ19CVVJTVCAgICAgICAgICAgICAgICAgICAgICAgICggMHgzIDw8IDQgKSAgLyogKFRDKSBCdXJzdCBTaWduYWwgU2VsZWN0aW9uICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQlVSU1RfTk9ORSAgICAgICAgICAgICAgICggMHgwIDw8IDQgKSAgLyogKFRDKSBUaGUgY2xvY2sgaXMgbm90IGdhdGVkIGJ5IGFuIGV4dGVybmFsIHNpZ25hbCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JVUlNUX1hDMCAgICAgICAgICAgICAgICAoIDB4MSA8PCA0ICkgIC8qIChUQykgWEMwIGlzIEFORGVkIHdpdGggdGhlIHNlbGVjdGVkIGNsb2NrICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQlVSU1RfWEMxICAgICAgICAgICAgICAgICggMHgyIDw8IDQgKSAgLyogKFRDKSBYQzEgaXMgQU5EZWQgd2l0aCB0aGUgc2VsZWN0ZWQgY2xvY2sgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19CVVJTVF9YQzIgICAgICAgICAgICAgICAgKCAweDMgPDwgNCApICAvKiAoVEMpIFhDMiBpcyBBTkRlZCB3aXRoIHRoZSBzZWxlY3RlZCBjbG9jayAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQ1BDU1RPUCAgICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCA2ICkgIC8qIChUQykgQ291bnRlciBDbG9jayBTdG9wcGVkIHdpdGggUkMgQ29tcGFyZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfTERCU1RPUCAgICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCA2ICkgIC8qIChUQykgQ291bnRlciBDbG9jayBTdG9wcGVkIHdpdGggUkIgTG9hZGluZyAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQ1BDRElTICAgICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCA3ICkgIC8qIChUQykgQ291bnRlciBDbG9jayBEaXNhYmxlIHdpdGggUkMgQ29tcGFyZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfTERCRElTICAgICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCA3ICkgIC8qIChUQykgQ291bnRlciBDbG9jayBEaXNhYmxlZCB3aXRoIFJCIExvYWRpbmcgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0VUUkdFREcgICAgICAgICAgICAgICAgICAgICAgKCAweDMgPDwgOCApICAvKiAoVEMpIEV4dGVybmFsIFRyaWdnZXIgRWRnZSBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19FVFJHRURHX05PTkUgICAgICAgICAgICAgKCAweDAgPDwgOCApICAvKiAoVEMpIEVkZ2U6IE5vbmUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19FVFJHRURHX1JJU0lORyAgICAgICAgICAgKCAweDEgPDwgOCApICAvKiAoVEMpIEVkZ2U6IHJpc2luZyBlZGdlICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfRVRSR0VER19GQUxMSU5HICAgICAgICAgICggMHgyIDw8IDggKSAgLyogKFRDKSBFZGdlOiBmYWxsaW5nIGVkZ2UgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19FVFJHRURHX0JPVEggICAgICAgICAgICAgKCAweDMgPDwgOCApICAvKiAoVEMpIEVkZ2U6IGVhY2ggZWRnZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfRUVWVEVERyAgICAgICAgICAgICAgICAgICAgICAoIDB4MyA8PCA4ICkgIC8qIChUQykgRXh0ZXJuYWwgRXZlbnQgRWRnZSBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19FRVZURURHX05PTkUgICAgICAgICAgICAgKCAweDAgPDwgOCApICAvKiAoVEMpIEVkZ2U6IE5vbmUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19FRVZURURHX1JJU0lORyAgICAgICAgICAgKCAweDEgPDwgOCApICAvKiAoVEMpIEVkZ2U6IHJpc2luZyBlZGdlICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfRUVWVEVER19GQUxMSU5HICAgICAgICAgICggMHgyIDw8IDggKSAgLyogKFRDKSBFZGdlOiBmYWxsaW5nIGVkZ2UgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19FRVZURURHX0JPVEggICAgICAgICAgICAgKCAweDMgPDwgOCApICAvKiAoVEMpIEVkZ2U6IGVhY2ggZWRnZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfRUVWVCAgICAgICAgICAgICAgICAgICAgICAgICAoIDB4MyA8PCAxMCApIC8qIChUQykgRXh0ZXJuYWwgRXZlbnQgIFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0VFVlRfVElPQiAgICAgICAgICAgICAgICAoIDB4MCA8PCAxMCApIC8qIChUQykgU2lnbmFsIHNlbGVjdGVkIGFzIGV4dGVybmFsIGV2ZW50OiBUSU9CIFRJT0IgZGlyZWN0aW9uOiBpbnB1dCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0VFVlRfWEMwICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxMCApIC8qIChUQykgU2lnbmFsIHNlbGVjdGVkIGFzIGV4dGVybmFsIGV2ZW50OiBYQzAgVElPQiBkaXJlY3Rpb246IG91dHB1dCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0VFVlRfWEMxICAgICAgICAgICAgICAgICAoIDB4MiA8PCAxMCApIC8qIChUQykgU2lnbmFsIHNlbGVjdGVkIGFzIGV4dGVybmFsIGV2ZW50OiBYQzEgVElPQiBkaXJlY3Rpb246IG91dHB1dCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0VFVlRfWEMyICAgICAgICAgICAgICAgICAoIDB4MyA8PCAxMCApIC8qIChUQykgU2lnbmFsIHNlbGVjdGVkIGFzIGV4dGVybmFsIGV2ZW50OiBYQzIgVElPQiBkaXJlY3Rpb246IG91dHB1dCAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQUJFVFJHICAgICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxMCApIC8qIChUQykgVElPQSBvciBUSU9CIEV4dGVybmFsIFRyaWdnZXIgU2VsZWN0aW9uICovDQotI2RlZmluZSBBVDkxQ19UQ19FTkVUUkcgICAgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDEyICkgLyogKFRDKSBFeHRlcm5hbCBFdmVudCBUcmlnZ2VyIGVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfV0FWRVNFTCAgICAgICAgICAgICAgICAgICAgICAoIDB4MyA8PCAxMyApIC8qIChUQykgV2F2ZWZvcm0gIFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX1dBVkVTRUxfVVAgICAgICAgICAgICAgICAoIDB4MCA8PCAxMyApIC8qIChUQykgVVAgbW9kZSB3aXRob3V0IGF0b21hdGljIHRyaWdnZXIgb24gUkMgQ29tcGFyZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX1dBVkVTRUxfVVBET1dOICAgICAgICAgICAoIDB4MSA8PCAxMyApIC8qIChUQykgVVBET1dOIG1vZGUgd2l0aG91dCBhdXRvbWF0aWMgdHJpZ2dlciBvbiBSQyBDb21wYXJlICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfV0FWRVNFTF9VUF9BVVRPICAgICAgICAgICggMHgyIDw8IDEzICkgLyogKFRDKSBVUCBtb2RlIHdpdGggYXV0b21hdGljIHRyaWdnZXIgb24gUkMgQ29tcGFyZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX1dBVkVTRUxfVVBET1dOX0FVVE8gICAgICAoIDB4MyA8PCAxMyApIC8qIChUQykgVVBET1dOIG1vZGUgd2l0aCBhdXRvbWF0aWMgdHJpZ2dlciBvbiBSQyBDb21wYXJlICovDQotI2RlZmluZSBBVDkxQ19UQ19DUENUUkcgICAgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDE0ICkgLyogKFRDKSBSQyBDb21wYXJlIFRyaWdnZXIgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19UQ19XQVZFICAgICAgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDE1ICkgLyogKFRDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQUNQQSAgICAgICAgICAgICAgICAgICAgICAgICAoIDB4MyA8PCAxNiApIC8qIChUQykgUkEgQ29tcGFyZSBFZmZlY3Qgb24gVElPQSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0FDUEFfTk9ORSAgICAgICAgICAgICAgICAoIDB4MCA8PCAxNiApIC8qIChUQykgRWZmZWN0OiBub25lICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQUNQQV9TRVQgICAgICAgICAgICAgICAgICggMHgxIDw8IDE2ICkgLyogKFRDKSBFZmZlY3Q6IHNldCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0FDUEFfQ0xFQVIgICAgICAgICAgICAgICAoIDB4MiA8PCAxNiApIC8qIChUQykgRWZmZWN0OiBjbGVhciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0FDUEFfVE9HR0xFICAgICAgICAgICAgICAoIDB4MyA8PCAxNiApIC8qIChUQykgRWZmZWN0OiB0b2dnbGUgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0xEUkEgICAgICAgICAgICAgICAgICAgICAgICAgKCAweDMgPDwgMTYgKSAvKiAoVEMpIFJBIExvYWRpbmcgU2VsZWN0aW9uICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfTERSQV9OT05FICAgICAgICAgICAgICAgICggMHgwIDw8IDE2ICkgLyogKFRDKSBFZGdlOiBOb25lICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfTERSQV9SSVNJTkcgICAgICAgICAgICAgICggMHgxIDw8IDE2ICkgLyogKFRDKSBFZGdlOiByaXNpbmcgZWRnZSBvZiBUSU9BICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfTERSQV9GQUxMSU5HICAgICAgICAgICAgICggMHgyIDw8IDE2ICkgLyogKFRDKSBFZGdlOiBmYWxsaW5nIGVkZ2Ugb2YgVElPQSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0xEUkFfQk9USCAgICAgICAgICAgICAgICAoIDB4MyA8PCAxNiApIC8qIChUQykgRWRnZTogZWFjaCBlZGdlIG9mIFRJT0EgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0FDUEMgICAgICAgICAgICAgICAgICAgICAgICAgKCAweDMgPDwgMTggKSAvKiAoVEMpIFJDIENvbXBhcmUgRWZmZWN0IG9uIFRJT0EgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19BQ1BDX05PTkUgICAgICAgICAgICAgICAgKCAweDAgPDwgMTggKSAvKiAoVEMpIEVmZmVjdDogbm9uZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0FDUENfU0VUICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxOCApIC8qIChUQykgRWZmZWN0OiBzZXQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19BQ1BDX0NMRUFSICAgICAgICAgICAgICAgKCAweDIgPDwgMTggKSAvKiAoVEMpIEVmZmVjdDogY2xlYXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19BQ1BDX1RPR0dMRSAgICAgICAgICAgICAgKCAweDMgPDwgMTggKSAvKiAoVEMpIEVmZmVjdDogdG9nZ2xlICovDQotI2RlZmluZSBBVDkxQ19UQ19MRFJCICAgICAgICAgICAgICAgICAgICAgICAgICggMHgzIDw8IDE4ICkgLyogKFRDKSBSQiBMb2FkaW5nIFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0xEUkJfTk9ORSAgICAgICAgICAgICAgICAoIDB4MCA8PCAxOCApIC8qIChUQykgRWRnZTogTm9uZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0xEUkJfUklTSU5HICAgICAgICAgICAgICAoIDB4MSA8PCAxOCApIC8qIChUQykgRWRnZTogcmlzaW5nIGVkZ2Ugb2YgVElPQSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0xEUkJfRkFMTElORyAgICAgICAgICAgICAoIDB4MiA8PCAxOCApIC8qIChUQykgRWRnZTogZmFsbGluZyBlZGdlIG9mIFRJT0EgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19MRFJCX0JPVEggICAgICAgICAgICAgICAgKCAweDMgPDwgMTggKSAvKiAoVEMpIEVkZ2U6IGVhY2ggZWRnZSBvZiBUSU9BICovDQotI2RlZmluZSBBVDkxQ19UQ19BRUVWVCAgICAgICAgICAgICAgICAgICAgICAgICggMHgzIDw8IDIwICkgLyogKFRDKSBFeHRlcm5hbCBFdmVudCBFZmZlY3Qgb24gVElPQSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0FFRVZUX05PTkUgICAgICAgICAgICAgICAoIDB4MCA8PCAyMCApIC8qIChUQykgRWZmZWN0OiBub25lICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQUVFVlRfU0VUICAgICAgICAgICAgICAgICggMHgxIDw8IDIwICkgLyogKFRDKSBFZmZlY3Q6IHNldCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0FFRVZUX0NMRUFSICAgICAgICAgICAgICAoIDB4MiA8PCAyMCApIC8qIChUQykgRWZmZWN0OiBjbGVhciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0FFRVZUX1RPR0dMRSAgICAgICAgICAgICAoIDB4MyA8PCAyMCApIC8qIChUQykgRWZmZWN0OiB0b2dnbGUgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0FTV1RSRyAgICAgICAgICAgICAgICAgICAgICAgKCAweDMgPDwgMjIgKSAvKiAoVEMpIFNvZnR3YXJlIFRyaWdnZXIgRWZmZWN0IG9uIFRJT0EgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19BU1dUUkdfTk9ORSAgICAgICAgICAgICAgKCAweDAgPDwgMjIgKSAvKiAoVEMpIEVmZmVjdDogbm9uZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0FTV1RSR19TRVQgICAgICAgICAgICAgICAoIDB4MSA8PCAyMiApIC8qIChUQykgRWZmZWN0OiBzZXQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19BU1dUUkdfQ0xFQVIgICAgICAgICAgICAgKCAweDIgPDwgMjIgKSAvKiAoVEMpIEVmZmVjdDogY2xlYXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19BU1dUUkdfVE9HR0xFICAgICAgICAgICAgKCAweDMgPDwgMjIgKSAvKiAoVEMpIEVmZmVjdDogdG9nZ2xlICovDQotI2RlZmluZSBBVDkxQ19UQ19CQ1BCICAgICAgICAgICAgICAgICAgICAgICAgICggMHgzIDw8IDI0ICkgLyogKFRDKSBSQiBDb21wYXJlIEVmZmVjdCBvbiBUSU9CICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQkNQQl9OT05FICAgICAgICAgICAgICAgICggMHgwIDw8IDI0ICkgLyogKFRDKSBFZmZlY3Q6IG5vbmUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19CQ1BCX1NFVCAgICAgICAgICAgICAgICAgKCAweDEgPDwgMjQgKSAvKiAoVEMpIEVmZmVjdDogc2V0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQkNQQl9DTEVBUiAgICAgICAgICAgICAgICggMHgyIDw8IDI0ICkgLyogKFRDKSBFZmZlY3Q6IGNsZWFyICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQkNQQl9UT0dHTEUgICAgICAgICAgICAgICggMHgzIDw8IDI0ICkgLyogKFRDKSBFZmZlY3Q6IHRvZ2dsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQkNQQyAgICAgICAgICAgICAgICAgICAgICAgICAoIDB4MyA8PCAyNiApIC8qIChUQykgUkMgQ29tcGFyZSBFZmZlY3Qgb24gVElPQiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JDUENfTk9ORSAgICAgICAgICAgICAgICAoIDB4MCA8PCAyNiApIC8qIChUQykgRWZmZWN0OiBub25lICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQkNQQ19TRVQgICAgICAgICAgICAgICAgICggMHgxIDw8IDI2ICkgLyogKFRDKSBFZmZlY3Q6IHNldCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JDUENfQ0xFQVIgICAgICAgICAgICAgICAoIDB4MiA8PCAyNiApIC8qIChUQykgRWZmZWN0OiBjbGVhciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JDUENfVE9HR0xFICAgICAgICAgICAgICAoIDB4MyA8PCAyNiApIC8qIChUQykgRWZmZWN0OiB0b2dnbGUgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0JFRVZUICAgICAgICAgICAgICAgICAgICAgICAgKCAweDMgPDwgMjggKSAvKiAoVEMpIEV4dGVybmFsIEV2ZW50IEVmZmVjdCBvbiBUSU9CICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQkVFVlRfTk9ORSAgICAgICAgICAgICAgICggMHgwIDw8IDI4ICkgLyogKFRDKSBFZmZlY3Q6IG5vbmUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19CRUVWVF9TRVQgICAgICAgICAgICAgICAgKCAweDEgPDwgMjggKSAvKiAoVEMpIEVmZmVjdDogc2V0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQkVFVlRfQ0xFQVIgICAgICAgICAgICAgICggMHgyIDw8IDI4ICkgLyogKFRDKSBFZmZlY3Q6IGNsZWFyICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQkVFVlRfVE9HR0xFICAgICAgICAgICAgICggMHgzIDw8IDI4ICkgLyogKFRDKSBFZmZlY3Q6IHRvZ2dsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQlNXVFJHICAgICAgICAgICAgICAgICAgICAgICAoIDB4MyA8PCAzMCApIC8qIChUQykgU29mdHdhcmUgVHJpZ2dlciBFZmZlY3Qgb24gVElPQiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JTV1RSR19OT05FICAgICAgICAgICAgICAoIDB4MCA8PCAzMCApIC8qIChUQykgRWZmZWN0OiBub25lICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQlNXVFJHX1NFVCAgICAgICAgICAgICAgICggMHgxIDw8IDMwICkgLyogKFRDKSBFZmZlY3Q6IHNldCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JTV1RSR19DTEVBUiAgICAgICAgICAgICAoIDB4MiA8PCAzMCApIC8qIChUQykgRWZmZWN0OiBjbGVhciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JTV1RSR19UT0dHTEUgICAgICAgICAgICAoIDB4MyA8PCAzMCApIC8qIChUQykgRWZmZWN0OiB0b2dnbGUgKi8NCi0vKiAtLS0tLS0tLSBUQ19TUiA6IChUQyBPZmZzZXQ6IDB4MjApIFRDIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19UQ19DT1ZGUyAgICAgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDAgKSAgLyogKFRDKSBDb3VudGVyIE92ZXJmbG93ICovDQotI2RlZmluZSBBVDkxQ19UQ19MT1ZSUyAgICAgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDEgKSAgLyogKFRDKSBMb2FkIE92ZXJydW4gKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0NQQVMgICAgICAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMiApICAvKiAoVEMpIFJBIENvbXBhcmUgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0NQQlMgICAgICAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMyApICAvKiAoVEMpIFJCIENvbXBhcmUgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0NQQ1MgICAgICAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgNCApICAvKiAoVEMpIFJDIENvbXBhcmUgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0xEUkFTICAgICAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgNSApICAvKiAoVEMpIFJBIExvYWRpbmcgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0xEUkJTICAgICAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgNiApICAvKiAoVEMpIFJCIExvYWRpbmcgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0VUUkdTICAgICAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgNyApICAvKiAoVEMpIEV4dGVybmFsIFRyaWdnZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0NMS1NUQSAgICAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTYgKSAvKiAoVEMpIENsb2NrIEVuYWJsaW5nICovDQotI2RlZmluZSBBVDkxQ19UQ19NVElPQSAgICAgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDE3ICkgLyogKFRDKSBUSU9BIE1pcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfTVRJT0IgICAgICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxOCApIC8qIChUQykgVElPQSBNaXJyb3IgKi8NCi0vKiAtLS0tLS0tLSBUQ19JRVIgOiAoVEMgT2Zmc2V0OiAweDI0KSBUQyBDaGFubmVsIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBUQ19JRFIgOiAoVEMgT2Zmc2V0OiAweDI4KSBUQyBDaGFubmVsIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gVENfSU1SIDogKFRDIE9mZnNldDogMHgyYykgVEMgQ2hhbm5lbCBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSAqLw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVGltZXIgQ291bnRlciBDaGFubmVsIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19UQyBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBUQ19DQ1IgICAgICAgICAgKCAwKSAvLyBDaGFubmVsIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIFRDX0NNUiAgICAgICAgICAoIDQpIC8vIENoYW5uZWwgTW9kZSBSZWdpc3RlciAoQ2FwdHVyZSBNb2RlIC8gV2F2ZWZvcm0gTW9kZSkNCisjZGVmaW5lIFRDX0NWICAgICAgICAgICAoMTYpIC8vIENvdW50ZXIgVmFsdWUNCisjZGVmaW5lIFRDX1JBICAgICAgICAgICAoMjApIC8vIFJlZ2lzdGVyIEENCisjZGVmaW5lIFRDX1JCICAgICAgICAgICAoMjQpIC8vIFJlZ2lzdGVyIEINCisjZGVmaW5lIFRDX1JDICAgICAgICAgICAoMjgpIC8vIFJlZ2lzdGVyIEMNCisjZGVmaW5lIFRDX1NSICAgICAgICAgICAoMzIpIC8vIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgVENfSUVSICAgICAgICAgICgzNikgLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgVENfSURSICAgICAgICAgICg0MCkgLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIFRDX0lNUiAgICAgICAgICAoNDQpIC8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorLy8gLS0tLS0tLS0gVENfQ0NSIDogKFRDIE9mZnNldDogMHgwKSBUQyBDaGFubmVsIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UQ19DTEtFTiAgICAgICAgICAgICgweDEgPDwgIDApIC8vIChUQykgQ291bnRlciBDbG9jayBFbmFibGUgQ29tbWFuZA0KKyNkZWZpbmUgQVQ5MUNfVENfQ0xLRElTICAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoVEMpIENvdW50ZXIgQ2xvY2sgRGlzYWJsZSBDb21tYW5kDQorI2RlZmluZSBBVDkxQ19UQ19TV1RSRyAgICAgICAgICAgICgweDEgPDwgIDIpIC8vIChUQykgU29mdHdhcmUgVHJpZ2dlciBDb21tYW5kDQorLy8gLS0tLS0tLS0gVENfQ01SIDogKFRDIE9mZnNldDogMHg0KSBUQyBDaGFubmVsIE1vZGUgUmVnaXN0ZXI6IENhcHR1cmUgTW9kZSAvIFdhdmVmb3JtIE1vZGUgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UQ19DTEtTICAgICAgICAgICAgICgweDcgPDwgIDApIC8vIChUQykgQ2xvY2sgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfVENfQ0xLU19USU1FUl9ESVYxX0NMT0NLICAgICAoMHgwKSAvLyAoVEMpIENsb2NrIHNlbGVjdGVkOiBUSU1FUl9ESVYxX0NMT0NLDQorI2RlZmluZSAJQVQ5MUNfVENfQ0xLU19USU1FUl9ESVYyX0NMT0NLICAgICAoMHgxKSAvLyAoVEMpIENsb2NrIHNlbGVjdGVkOiBUSU1FUl9ESVYyX0NMT0NLDQorI2RlZmluZSAJQVQ5MUNfVENfQ0xLU19USU1FUl9ESVYzX0NMT0NLICAgICAoMHgyKSAvLyAoVEMpIENsb2NrIHNlbGVjdGVkOiBUSU1FUl9ESVYzX0NMT0NLDQorI2RlZmluZSAJQVQ5MUNfVENfQ0xLU19USU1FUl9ESVY0X0NMT0NLICAgICAoMHgzKSAvLyAoVEMpIENsb2NrIHNlbGVjdGVkOiBUSU1FUl9ESVY0X0NMT0NLDQorI2RlZmluZSAJQVQ5MUNfVENfQ0xLU19USU1FUl9ESVY1X0NMT0NLICAgICAoMHg0KSAvLyAoVEMpIENsb2NrIHNlbGVjdGVkOiBUSU1FUl9ESVY1X0NMT0NLDQorI2RlZmluZSAJQVQ5MUNfVENfQ0xLU19YQzAgICAgICAgICAgICAgICAgICAoMHg1KSAvLyAoVEMpIENsb2NrIHNlbGVjdGVkOiBYQzANCisjZGVmaW5lIAlBVDkxQ19UQ19DTEtTX1hDMSAgICAgICAgICAgICAgICAgICgweDYpIC8vIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFhDMQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0NMS1NfWEMyICAgICAgICAgICAgICAgICAgKDB4NykgLy8gKFRDKSBDbG9jayBzZWxlY3RlZDogWEMyDQorI2RlZmluZSBBVDkxQ19UQ19DTEtJICAgICAgICAgICAgICgweDEgPDwgIDMpIC8vIChUQykgQ2xvY2sgSW52ZXJ0DQorI2RlZmluZSBBVDkxQ19UQ19CVVJTVCAgICAgICAgICAgICgweDMgPDwgIDQpIC8vIChUQykgQnVyc3QgU2lnbmFsIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDX0JVUlNUX05PTkUgICAgICAgICAgICAgICAgICgweDAgPDwgIDQpIC8vIChUQykgVGhlIGNsb2NrIGlzIG5vdCBnYXRlZCBieSBhbiBleHRlcm5hbCBzaWduYWwNCisjZGVmaW5lIAlBVDkxQ19UQ19CVVJTVF9YQzAgICAgICAgICAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoVEMpIFhDMCBpcyBBTkRlZCB3aXRoIHRoZSBzZWxlY3RlZCBjbG9jaw0KKyNkZWZpbmUgCUFUOTFDX1RDX0JVUlNUX1hDMSAgICAgICAgICAgICAgICAgICgweDIgPDwgIDQpIC8vIChUQykgWEMxIGlzIEFORGVkIHdpdGggdGhlIHNlbGVjdGVkIGNsb2NrDQorI2RlZmluZSAJQVQ5MUNfVENfQlVSU1RfWEMyICAgICAgICAgICAgICAgICAgKDB4MyA8PCAgNCkgLy8gKFRDKSBYQzIgaXMgQU5EZWQgd2l0aCB0aGUgc2VsZWN0ZWQgY2xvY2sNCisjZGVmaW5lIEFUOTFDX1RDX0NQQ1NUT1AgICAgICAgICAgKDB4MSA8PCAgNikgLy8gKFRDKSBDb3VudGVyIENsb2NrIFN0b3BwZWQgd2l0aCBSQyBDb21wYXJlDQorI2RlZmluZSBBVDkxQ19UQ19MREJTVE9QICAgICAgICAgICgweDEgPDwgIDYpIC8vIChUQykgQ291bnRlciBDbG9jayBTdG9wcGVkIHdpdGggUkIgTG9hZGluZw0KKyNkZWZpbmUgQVQ5MUNfVENfQ1BDRElTICAgICAgICAgICAoMHgxIDw8ICA3KSAvLyAoVEMpIENvdW50ZXIgQ2xvY2sgRGlzYWJsZSB3aXRoIFJDIENvbXBhcmUNCisjZGVmaW5lIEFUOTFDX1RDX0xEQkRJUyAgICAgICAgICAgKDB4MSA8PCAgNykgLy8gKFRDKSBDb3VudGVyIENsb2NrIERpc2FibGVkIHdpdGggUkIgTG9hZGluZw0KKyNkZWZpbmUgQVQ5MUNfVENfRVRSR0VERyAgICAgICAgICAoMHgzIDw8ICA4KSAvLyAoVEMpIEV4dGVybmFsIFRyaWdnZXIgRWRnZSBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ19FVFJHRURHX05PTkUgICAgICAgICAgICAgICAgICgweDAgPDwgIDgpIC8vIChUQykgRWRnZTogTm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0VUUkdFREdfUklTSU5HICAgICAgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKFRDKSBFZGdlOiByaXNpbmcgZWRnZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0VUUkdFREdfRkFMTElORyAgICAgICAgICAgICAgKDB4MiA8PCAgOCkgLy8gKFRDKSBFZGdlOiBmYWxsaW5nIGVkZ2UNCisjZGVmaW5lIAlBVDkxQ19UQ19FVFJHRURHX0JPVEggICAgICAgICAgICAgICAgICgweDMgPDwgIDgpIC8vIChUQykgRWRnZTogZWFjaCBlZGdlDQorI2RlZmluZSBBVDkxQ19UQ19FRVZURURHICAgICAgICAgICgweDMgPDwgIDgpIC8vIChUQykgRXh0ZXJuYWwgRXZlbnQgRWRnZSBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ19FRVZURURHX05PTkUgICAgICAgICAgICAgICAgICgweDAgPDwgIDgpIC8vIChUQykgRWRnZTogTm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0VFVlRFREdfUklTSU5HICAgICAgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKFRDKSBFZGdlOiByaXNpbmcgZWRnZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0VFVlRFREdfRkFMTElORyAgICAgICAgICAgICAgKDB4MiA8PCAgOCkgLy8gKFRDKSBFZGdlOiBmYWxsaW5nIGVkZ2UNCisjZGVmaW5lIAlBVDkxQ19UQ19FRVZURURHX0JPVEggICAgICAgICAgICAgICAgICgweDMgPDwgIDgpIC8vIChUQykgRWRnZTogZWFjaCBlZGdlDQorI2RlZmluZSBBVDkxQ19UQ19FRVZUICAgICAgICAgICAgICgweDMgPDwgMTApIC8vIChUQykgRXh0ZXJuYWwgRXZlbnQgIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDX0VFVlRfVElPQiAgICAgICAgICAgICAgICAgKDB4MCA8PCAxMCkgLy8gKFRDKSBTaWduYWwgc2VsZWN0ZWQgYXMgZXh0ZXJuYWwgZXZlbnQ6IFRJT0IgVElPQiBkaXJlY3Rpb246IGlucHV0DQorI2RlZmluZSAJQVQ5MUNfVENfRUVWVF9YQzAgICAgICAgICAgICAgICAgICAoMHgxIDw8IDEwKSAvLyAoVEMpIFNpZ25hbCBzZWxlY3RlZCBhcyBleHRlcm5hbCBldmVudDogWEMwIFRJT0IgZGlyZWN0aW9uOiBvdXRwdXQNCisjZGVmaW5lIAlBVDkxQ19UQ19FRVZUX1hDMSAgICAgICAgICAgICAgICAgICgweDIgPDwgMTApIC8vIChUQykgU2lnbmFsIHNlbGVjdGVkIGFzIGV4dGVybmFsIGV2ZW50OiBYQzEgVElPQiBkaXJlY3Rpb246IG91dHB1dA0KKyNkZWZpbmUgCUFUOTFDX1RDX0VFVlRfWEMyICAgICAgICAgICAgICAgICAgKDB4MyA8PCAxMCkgLy8gKFRDKSBTaWduYWwgc2VsZWN0ZWQgYXMgZXh0ZXJuYWwgZXZlbnQ6IFhDMiBUSU9CIGRpcmVjdGlvbjogb3V0cHV0DQorI2RlZmluZSBBVDkxQ19UQ19BQkVUUkcgICAgICAgICAgICgweDEgPDwgMTApIC8vIChUQykgVElPQSBvciBUSU9CIEV4dGVybmFsIFRyaWdnZXIgU2VsZWN0aW9uDQorI2RlZmluZSBBVDkxQ19UQ19FTkVUUkcgICAgICAgICAgICgweDEgPDwgMTIpIC8vIChUQykgRXh0ZXJuYWwgRXZlbnQgVHJpZ2dlciBlbmFibGUNCisjZGVmaW5lIEFUOTFDX1RDX1dBVkVTRUwgICAgICAgICAgKDB4MyA8PCAxMykgLy8gKFRDKSBXYXZlZm9ybSAgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfVENfV0FWRVNFTF9VUCAgICAgICAgICAgICAgICAgICAoMHgwIDw8IDEzKSAvLyAoVEMpIFVQIG1vZGUgd2l0aG91dCBhdG9tYXRpYyB0cmlnZ2VyIG9uIFJDIENvbXBhcmUNCisjZGVmaW5lIAlBVDkxQ19UQ19XQVZFU0VMX1VQRE9XTiAgICAgICAgICAgICAgICgweDEgPDwgMTMpIC8vIChUQykgVVBET1dOIG1vZGUgd2l0aG91dCBhdXRvbWF0aWMgdHJpZ2dlciBvbiBSQyBDb21wYXJlDQorI2RlZmluZSAJQVQ5MUNfVENfV0FWRVNFTF9VUF9BVVRPICAgICAgICAgICAgICAoMHgyIDw8IDEzKSAvLyAoVEMpIFVQIG1vZGUgd2l0aCBhdXRvbWF0aWMgdHJpZ2dlciBvbiBSQyBDb21wYXJlDQorI2RlZmluZSAJQVQ5MUNfVENfV0FWRVNFTF9VUERPV05fQVVUTyAgICAgICAgICAoMHgzIDw8IDEzKSAvLyAoVEMpIFVQRE9XTiBtb2RlIHdpdGggYXV0b21hdGljIHRyaWdnZXIgb24gUkMgQ29tcGFyZQ0KKyNkZWZpbmUgQVQ5MUNfVENfQ1BDVFJHICAgICAgICAgICAoMHgxIDw8IDE0KSAvLyAoVEMpIFJDIENvbXBhcmUgVHJpZ2dlciBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1RDX1dBVkUgICAgICAgICAgICAgKDB4MSA8PCAxNSkgLy8gKFRDKSANCisjZGVmaW5lIEFUOTFDX1RDX0FDUEEgICAgICAgICAgICAgKDB4MyA8PCAxNikgLy8gKFRDKSBSQSBDb21wYXJlIEVmZmVjdCBvbiBUSU9BDQorI2RlZmluZSAJQVQ5MUNfVENfQUNQQV9OT05FICAgICAgICAgICAgICAgICAoMHgwIDw8IDE2KSAvLyAoVEMpIEVmZmVjdDogbm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0FDUEFfU0VUICAgICAgICAgICAgICAgICAgKDB4MSA8PCAxNikgLy8gKFRDKSBFZmZlY3Q6IHNldA0KKyNkZWZpbmUgCUFUOTFDX1RDX0FDUEFfQ0xFQVIgICAgICAgICAgICAgICAgKDB4MiA8PCAxNikgLy8gKFRDKSBFZmZlY3Q6IGNsZWFyDQorI2RlZmluZSAJQVQ5MUNfVENfQUNQQV9UT0dHTEUgICAgICAgICAgICAgICAoMHgzIDw8IDE2KSAvLyAoVEMpIEVmZmVjdDogdG9nZ2xlDQorI2RlZmluZSBBVDkxQ19UQ19MRFJBICAgICAgICAgICAgICgweDMgPDwgMTYpIC8vIChUQykgUkEgTG9hZGluZyBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ19MRFJBX05PTkUgICAgICAgICAgICAgICAgICgweDAgPDwgMTYpIC8vIChUQykgRWRnZTogTm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0xEUkFfUklTSU5HICAgICAgICAgICAgICAgKDB4MSA8PCAxNikgLy8gKFRDKSBFZGdlOiByaXNpbmcgZWRnZSBvZiBUSU9BDQorI2RlZmluZSAJQVQ5MUNfVENfTERSQV9GQUxMSU5HICAgICAgICAgICAgICAoMHgyIDw8IDE2KSAvLyAoVEMpIEVkZ2U6IGZhbGxpbmcgZWRnZSBvZiBUSU9BDQorI2RlZmluZSAJQVQ5MUNfVENfTERSQV9CT1RIICAgICAgICAgICAgICAgICAoMHgzIDw8IDE2KSAvLyAoVEMpIEVkZ2U6IGVhY2ggZWRnZSBvZiBUSU9BDQorI2RlZmluZSBBVDkxQ19UQ19BQ1BDICAgICAgICAgICAgICgweDMgPDwgMTgpIC8vIChUQykgUkMgQ29tcGFyZSBFZmZlY3Qgb24gVElPQQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0FDUENfTk9ORSAgICAgICAgICAgICAgICAgKDB4MCA8PCAxOCkgLy8gKFRDKSBFZmZlY3Q6IG5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19BQ1BDX1NFVCAgICAgICAgICAgICAgICAgICgweDEgPDwgMTgpIC8vIChUQykgRWZmZWN0OiBzZXQNCisjZGVmaW5lIAlBVDkxQ19UQ19BQ1BDX0NMRUFSICAgICAgICAgICAgICAgICgweDIgPDwgMTgpIC8vIChUQykgRWZmZWN0OiBjbGVhcg0KKyNkZWZpbmUgCUFUOTFDX1RDX0FDUENfVE9HR0xFICAgICAgICAgICAgICAgKDB4MyA8PCAxOCkgLy8gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KKyNkZWZpbmUgQVQ5MUNfVENfTERSQiAgICAgICAgICAgICAoMHgzIDw8IDE4KSAvLyAoVEMpIFJCIExvYWRpbmcgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfVENfTERSQl9OT05FICAgICAgICAgICAgICAgICAoMHgwIDw8IDE4KSAvLyAoVEMpIEVkZ2U6IE5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19MRFJCX1JJU0lORyAgICAgICAgICAgICAgICgweDEgPDwgMTgpIC8vIChUQykgRWRnZTogcmlzaW5nIGVkZ2Ugb2YgVElPQQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0xEUkJfRkFMTElORyAgICAgICAgICAgICAgKDB4MiA8PCAxOCkgLy8gKFRDKSBFZGdlOiBmYWxsaW5nIGVkZ2Ugb2YgVElPQQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0xEUkJfQk9USCAgICAgICAgICAgICAgICAgKDB4MyA8PCAxOCkgLy8gKFRDKSBFZGdlOiBlYWNoIGVkZ2Ugb2YgVElPQQ0KKyNkZWZpbmUgQVQ5MUNfVENfQUVFVlQgICAgICAgICAgICAoMHgzIDw8IDIwKSAvLyAoVEMpIEV4dGVybmFsIEV2ZW50IEVmZmVjdCBvbiBUSU9BDQorI2RlZmluZSAJQVQ5MUNfVENfQUVFVlRfTk9ORSAgICAgICAgICAgICAgICAgKDB4MCA8PCAyMCkgLy8gKFRDKSBFZmZlY3Q6IG5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19BRUVWVF9TRVQgICAgICAgICAgICAgICAgICAoMHgxIDw8IDIwKSAvLyAoVEMpIEVmZmVjdDogc2V0DQorI2RlZmluZSAJQVQ5MUNfVENfQUVFVlRfQ0xFQVIgICAgICAgICAgICAgICAgKDB4MiA8PCAyMCkgLy8gKFRDKSBFZmZlY3Q6IGNsZWFyDQorI2RlZmluZSAJQVQ5MUNfVENfQUVFVlRfVE9HR0xFICAgICAgICAgICAgICAgKDB4MyA8PCAyMCkgLy8gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KKyNkZWZpbmUgQVQ5MUNfVENfQVNXVFJHICAgICAgICAgICAoMHgzIDw8IDIyKSAvLyAoVEMpIFNvZnR3YXJlIFRyaWdnZXIgRWZmZWN0IG9uIFRJT0ENCisjZGVmaW5lIAlBVDkxQ19UQ19BU1dUUkdfTk9ORSAgICAgICAgICAgICAgICAgKDB4MCA8PCAyMikgLy8gKFRDKSBFZmZlY3Q6IG5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19BU1dUUkdfU0VUICAgICAgICAgICAgICAgICAgKDB4MSA8PCAyMikgLy8gKFRDKSBFZmZlY3Q6IHNldA0KKyNkZWZpbmUgCUFUOTFDX1RDX0FTV1RSR19DTEVBUiAgICAgICAgICAgICAgICAoMHgyIDw8IDIyKSAvLyAoVEMpIEVmZmVjdDogY2xlYXINCisjZGVmaW5lIAlBVDkxQ19UQ19BU1dUUkdfVE9HR0xFICAgICAgICAgICAgICAgKDB4MyA8PCAyMikgLy8gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KKyNkZWZpbmUgQVQ5MUNfVENfQkNQQiAgICAgICAgICAgICAoMHgzIDw8IDI0KSAvLyAoVEMpIFJCIENvbXBhcmUgRWZmZWN0IG9uIFRJT0INCisjZGVmaW5lIAlBVDkxQ19UQ19CQ1BCX05PTkUgICAgICAgICAgICAgICAgICgweDAgPDwgMjQpIC8vIChUQykgRWZmZWN0OiBub25lDQorI2RlZmluZSAJQVQ5MUNfVENfQkNQQl9TRVQgICAgICAgICAgICAgICAgICAoMHgxIDw8IDI0KSAvLyAoVEMpIEVmZmVjdDogc2V0DQorI2RlZmluZSAJQVQ5MUNfVENfQkNQQl9DTEVBUiAgICAgICAgICAgICAgICAoMHgyIDw8IDI0KSAvLyAoVEMpIEVmZmVjdDogY2xlYXINCisjZGVmaW5lIAlBVDkxQ19UQ19CQ1BCX1RPR0dMRSAgICAgICAgICAgICAgICgweDMgPDwgMjQpIC8vIChUQykgRWZmZWN0OiB0b2dnbGUNCisjZGVmaW5lIEFUOTFDX1RDX0JDUEMgICAgICAgICAgICAgKDB4MyA8PCAyNikgLy8gKFRDKSBSQyBDb21wYXJlIEVmZmVjdCBvbiBUSU9CDQorI2RlZmluZSAJQVQ5MUNfVENfQkNQQ19OT05FICAgICAgICAgICAgICAgICAoMHgwIDw8IDI2KSAvLyAoVEMpIEVmZmVjdDogbm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0JDUENfU0VUICAgICAgICAgICAgICAgICAgKDB4MSA8PCAyNikgLy8gKFRDKSBFZmZlY3Q6IHNldA0KKyNkZWZpbmUgCUFUOTFDX1RDX0JDUENfQ0xFQVIgICAgICAgICAgICAgICAgKDB4MiA8PCAyNikgLy8gKFRDKSBFZmZlY3Q6IGNsZWFyDQorI2RlZmluZSAJQVQ5MUNfVENfQkNQQ19UT0dHTEUgICAgICAgICAgICAgICAoMHgzIDw8IDI2KSAvLyAoVEMpIEVmZmVjdDogdG9nZ2xlDQorI2RlZmluZSBBVDkxQ19UQ19CRUVWVCAgICAgICAgICAgICgweDMgPDwgMjgpIC8vIChUQykgRXh0ZXJuYWwgRXZlbnQgRWZmZWN0IG9uIFRJT0INCisjZGVmaW5lIAlBVDkxQ19UQ19CRUVWVF9OT05FICAgICAgICAgICAgICAgICAoMHgwIDw8IDI4KSAvLyAoVEMpIEVmZmVjdDogbm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0JFRVZUX1NFVCAgICAgICAgICAgICAgICAgICgweDEgPDwgMjgpIC8vIChUQykgRWZmZWN0OiBzZXQNCisjZGVmaW5lIAlBVDkxQ19UQ19CRUVWVF9DTEVBUiAgICAgICAgICAgICAgICAoMHgyIDw8IDI4KSAvLyAoVEMpIEVmZmVjdDogY2xlYXINCisjZGVmaW5lIAlBVDkxQ19UQ19CRUVWVF9UT0dHTEUgICAgICAgICAgICAgICAoMHgzIDw8IDI4KSAvLyAoVEMpIEVmZmVjdDogdG9nZ2xlDQorI2RlZmluZSBBVDkxQ19UQ19CU1dUUkcgICAgICAgICAgICgweDMgPDwgMzApIC8vIChUQykgU29mdHdhcmUgVHJpZ2dlciBFZmZlY3Qgb24gVElPQg0KKyNkZWZpbmUgCUFUOTFDX1RDX0JTV1RSR19OT05FICAgICAgICAgICAgICAgICAoMHgwIDw8IDMwKSAvLyAoVEMpIEVmZmVjdDogbm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0JTV1RSR19TRVQgICAgICAgICAgICAgICAgICAoMHgxIDw8IDMwKSAvLyAoVEMpIEVmZmVjdDogc2V0DQorI2RlZmluZSAJQVQ5MUNfVENfQlNXVFJHX0NMRUFSICAgICAgICAgICAgICAgICgweDIgPDwgMzApIC8vIChUQykgRWZmZWN0OiBjbGVhcg0KKyNkZWZpbmUgCUFUOTFDX1RDX0JTV1RSR19UT0dHTEUgICAgICAgICAgICAgICAoMHgzIDw8IDMwKSAvLyAoVEMpIEVmZmVjdDogdG9nZ2xlDQorLy8gLS0tLS0tLS0gVENfU1IgOiAoVEMgT2Zmc2V0OiAweDIwKSBUQyBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RDX0NPVkZTICAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFRDKSBDb3VudGVyIE92ZXJmbG93DQorI2RlZmluZSBBVDkxQ19UQ19MT1ZSUyAgICAgICAgICAgICgweDEgPDwgIDEpIC8vIChUQykgTG9hZCBPdmVycnVuDQorI2RlZmluZSBBVDkxQ19UQ19DUEFTICAgICAgICAgICAgICgweDEgPDwgIDIpIC8vIChUQykgUkEgQ29tcGFyZQ0KKyNkZWZpbmUgQVQ5MUNfVENfQ1BCUyAgICAgICAgICAgICAoMHgxIDw8ICAzKSAvLyAoVEMpIFJCIENvbXBhcmUNCisjZGVmaW5lIEFUOTFDX1RDX0NQQ1MgICAgICAgICAgICAgKDB4MSA8PCAgNCkgLy8gKFRDKSBSQyBDb21wYXJlDQorI2RlZmluZSBBVDkxQ19UQ19MRFJBUyAgICAgICAgICAgICgweDEgPDwgIDUpIC8vIChUQykgUkEgTG9hZGluZw0KKyNkZWZpbmUgQVQ5MUNfVENfTERSQlMgICAgICAgICAgICAoMHgxIDw8ICA2KSAvLyAoVEMpIFJCIExvYWRpbmcNCisjZGVmaW5lIEFUOTFDX1RDX0VUUkdTICAgICAgICAgICAgKDB4MSA8PCAgNykgLy8gKFRDKSBFeHRlcm5hbCBUcmlnZ2VyDQorI2RlZmluZSBBVDkxQ19UQ19DTEtTVEEgICAgICAgICAgICgweDEgPDwgMTYpIC8vIChUQykgQ2xvY2sgRW5hYmxpbmcNCisjZGVmaW5lIEFUOTFDX1RDX01USU9BICAgICAgICAgICAgKDB4MSA8PCAxNykgLy8gKFRDKSBUSU9BIE1pcnJvcg0KKyNkZWZpbmUgQVQ5MUNfVENfTVRJT0IgICAgICAgICAgICAoMHgxIDw8IDE4KSAvLyAoVEMpIFRJT0EgTWlycm9yDQorLy8gLS0tLS0tLS0gVENfSUVSIDogKFRDIE9mZnNldDogMHgyNCkgVEMgQ2hhbm5lbCBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFRDX0lEUiA6IChUQyBPZmZzZXQ6IDB4MjgpIFRDIENoYW5uZWwgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVENfSU1SIDogKFRDIE9mZnNldDogMHgyYykgVEMgQ2hhbm5lbCBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFRpbWVyIENvdW50ZXIgSW50ZXJmYWNlICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1RDQiBzdHJ1Y3R1cmUgKioqICovDQotI2RlZmluZSBUQ0JfVEMwICAgICAgICAgICAgICAgICAgICAgICAgKCAwICkgICAgICAgIC8qIFRDIENoYW5uZWwgMCAqLw0KLSNkZWZpbmUgVENCX1RDMSAgICAgICAgICAgICAgICAgICAgICAgICggNjQgKSAgICAgICAvKiBUQyBDaGFubmVsIDEgKi8NCi0jZGVmaW5lIFRDQl9UQzIgICAgICAgICAgICAgICAgICAgICAgICAoIDEyOCApICAgICAgLyogVEMgQ2hhbm5lbCAyICovDQotI2RlZmluZSBUQ0JfQkNSICAgICAgICAgICAgICAgICAgICAgICAgKCAxOTIgKSAgICAgIC8qIFRDIEJsb2NrIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFRDQl9CTVIgICAgICAgICAgICAgICAgICAgICAgICAoIDE5NiApICAgICAgLyogVEMgQmxvY2sgTW9kZSBSZWdpc3RlciAqLw0KLS8qIC0tLS0tLS0tIFRDQl9CQ1IgOiAoVENCIE9mZnNldDogMHhjMCkgVEMgQmxvY2sgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENCX1NZTkMgICAgICAgICAgICAgICAgICggMHgxIDw8IDAgKSAvKiAoVENCKSBTeW5jaHJvIENvbW1hbmQgKi8NCi0vKiAtLS0tLS0tLSBUQ0JfQk1SIDogKFRDQiBPZmZzZXQ6IDB4YzQpIFRDIEJsb2NrIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1RDQl9UQzBYQzBTICAgICAgICAgICAgICAoIDB4MyA8PCAwICkgLyogKFRDQikgRXh0ZXJuYWwgQ2xvY2sgU2lnbmFsIDAgU2VsZWN0aW9uICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENCX1RDMFhDMFNfVENMSzAgICAgKCAweDAgKSAgICAgIC8qIChUQ0IpIFRDTEswIGNvbm5lY3RlZCB0byBYQzAgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ0JfVEMwWEMwU19OT05FICAgICAoIDB4MSApICAgICAgLyogKFRDQikgTm9uZSBzaWduYWwgY29ubmVjdGVkIHRvIFhDMCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDQl9UQzBYQzBTX1RJT0ExICAgICggMHgyICkgICAgICAvKiAoVENCKSBUSU9BMSBjb25uZWN0ZWQgdG8gWEMwICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENCX1RDMFhDMFNfVElPQTIgICAgKCAweDMgKSAgICAgIC8qIChUQ0IpIFRJT0EyIGNvbm5lY3RlZCB0byBYQzAgKi8NCi0jZGVmaW5lIEFUOTFDX1RDQl9UQzFYQzFTICAgICAgICAgICAgICAoIDB4MyA8PCAyICkgLyogKFRDQikgRXh0ZXJuYWwgQ2xvY2sgU2lnbmFsIDEgU2VsZWN0aW9uICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENCX1RDMVhDMVNfVENMSzEgICAgKCAweDAgPDwgMiApIC8qIChUQ0IpIFRDTEsxIGNvbm5lY3RlZCB0byBYQzEgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ0JfVEMxWEMxU19OT05FICAgICAoIDB4MSA8PCAyICkgLyogKFRDQikgTm9uZSBzaWduYWwgY29ubmVjdGVkIHRvIFhDMSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDQl9UQzFYQzFTX1RJT0EwICAgICggMHgyIDw8IDIgKSAvKiAoVENCKSBUSU9BMCBjb25uZWN0ZWQgdG8gWEMxICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENCX1RDMVhDMVNfVElPQTIgICAgKCAweDMgPDwgMiApIC8qIChUQ0IpIFRJT0EyIGNvbm5lY3RlZCB0byBYQzEgKi8NCi0jZGVmaW5lIEFUOTFDX1RDQl9UQzJYQzJTICAgICAgICAgICAgICAoIDB4MyA8PCA0ICkgLyogKFRDQikgRXh0ZXJuYWwgQ2xvY2sgU2lnbmFsIDIgU2VsZWN0aW9uICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENCX1RDMlhDMlNfVENMSzIgICAgKCAweDAgPDwgNCApIC8qIChUQ0IpIFRDTEsyIGNvbm5lY3RlZCB0byBYQzIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ0JfVEMyWEMyU19OT05FICAgICAoIDB4MSA8PCA0ICkgLyogKFRDQikgTm9uZSBzaWduYWwgY29ubmVjdGVkIHRvIFhDMiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDQl9UQzJYQzJTX1RJT0EwICAgICggMHgyIDw8IDQgKSAvKiAoVENCKSBUSU9BMCBjb25uZWN0ZWQgdG8gWEMyICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENCX1RDMlhDMlNfVElPQTEgICAgKCAweDMgPDwgNCApIC8qIChUQ0IpIFRJT0EyIGNvbm5lY3RlZCB0byBYQzIgKi8NCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFRpbWVyIENvdW50ZXIgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1RDQiBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBUQ0JfVEMwICAgICAgICAgKCAwKSAvLyBUQyBDaGFubmVsIDANCisjZGVmaW5lIFRDQl9UQzEgICAgICAgICAoNjQpIC8vIFRDIENoYW5uZWwgMQ0KKyNkZWZpbmUgVENCX1RDMiAgICAgICAgICgxMjgpIC8vIFRDIENoYW5uZWwgMg0KKyNkZWZpbmUgVENCX0JDUiAgICAgICAgICgxOTIpIC8vIFRDIEJsb2NrIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIFRDQl9CTVIgICAgICAgICAoMTk2KSAvLyBUQyBCbG9jayBNb2RlIFJlZ2lzdGVyDQorLy8gLS0tLS0tLS0gVENCX0JDUiA6IChUQ0IgT2Zmc2V0OiAweGMwKSBUQyBCbG9jayBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVENCX1NZTkMgICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoVENCKSBTeW5jaHJvIENvbW1hbmQNCisvLyAtLS0tLS0tLSBUQ0JfQk1SIDogKFRDQiBPZmZzZXQ6IDB4YzQpIFRDIEJsb2NrIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UQ0JfVEMwWEMwUyAgICAgICAgICgweDMgPDwgIDApIC8vIChUQ0IpIEV4dGVybmFsIENsb2NrIFNpZ25hbCAwIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzBYQzBTX1RDTEswICAgICAgICAgICAgICAgICgweDApIC8vIChUQ0IpIFRDTEswIGNvbm5lY3RlZCB0byBYQzANCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMwWEMwU19OT05FICAgICAgICAgICAgICAgICAoMHgxKSAvLyAoVENCKSBOb25lIHNpZ25hbCBjb25uZWN0ZWQgdG8gWEMwDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMFhDMFNfVElPQTEgICAgICAgICAgICAgICAgKDB4MikgLy8gKFRDQikgVElPQTEgY29ubmVjdGVkIHRvIFhDMA0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzBYQzBTX1RJT0EyICAgICAgICAgICAgICAgICgweDMpIC8vIChUQ0IpIFRJT0EyIGNvbm5lY3RlZCB0byBYQzANCisjZGVmaW5lIEFUOTFDX1RDQl9UQzFYQzFTICAgICAgICAgKDB4MyA8PCAgMikgLy8gKFRDQikgRXh0ZXJuYWwgQ2xvY2sgU2lnbmFsIDEgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMVhDMVNfVENMSzEgICAgICAgICAgICAgICAgKDB4MCA8PCAgMikgLy8gKFRDQikgVENMSzEgY29ubmVjdGVkIHRvIFhDMQ0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzFYQzFTX05PTkUgICAgICAgICAgICAgICAgICgweDEgPDwgIDIpIC8vIChUQ0IpIE5vbmUgc2lnbmFsIGNvbm5lY3RlZCB0byBYQzENCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMxWEMxU19USU9BMCAgICAgICAgICAgICAgICAoMHgyIDw8ICAyKSAvLyAoVENCKSBUSU9BMCBjb25uZWN0ZWQgdG8gWEMxDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMVhDMVNfVElPQTIgICAgICAgICAgICAgICAgKDB4MyA8PCAgMikgLy8gKFRDQikgVElPQTIgY29ubmVjdGVkIHRvIFhDMQ0KKyNkZWZpbmUgQVQ5MUNfVENCX1RDMlhDMlMgICAgICAgICAoMHgzIDw8ICA0KSAvLyAoVENCKSBFeHRlcm5hbCBDbG9jayBTaWduYWwgMiBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMyWEMyU19UQ0xLMiAgICAgICAgICAgICAgICAoMHgwIDw8ICA0KSAvLyAoVENCKSBUQ0xLMiBjb25uZWN0ZWQgdG8gWEMyDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMlhDMlNfTk9ORSAgICAgICAgICAgICAgICAgKDB4MSA8PCAgNCkgLy8gKFRDQikgTm9uZSBzaWduYWwgY29ubmVjdGVkIHRvIFhDMg0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzJYQzJTX1RJT0EwICAgICAgICAgICAgICAgICgweDIgPDwgIDQpIC8vIChUQ0IpIFRJT0EwIGNvbm5lY3RlZCB0byBYQzINCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMyWEMyU19USU9BMSAgICAgICAgICAgICAgICAoMHgzIDw8ICA0KSAvLyAoVENCKSBUSU9BMiBjb25uZWN0ZWQgdG8gWEMyDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBDb250cm9sIEFyZWEgTmV0d29yayBNYWlsQm94IEludGVyZmFjZSAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19DQU5fTUIgc3RydWN0dXJlICoqKiAqLw0KLSNkZWZpbmUgQ0FOX01CX01NUiAgICAgICAgICAgICAgICAgICAgICAgKCAwICkgICAgICAgICAgICAvKiBNYWlsQm94IE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIENBTl9NQl9NQU0gICAgICAgICAgICAgICAgICAgICAgICggNCApICAgICAgICAgICAgLyogTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIENBTl9NQl9NSUQgICAgICAgICAgICAgICAgICAgICAgICggOCApICAgICAgICAgICAgLyogTWFpbEJveCBJRCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQ0FOX01CX01GSUQgICAgICAgICAgICAgICAgICAgICAgKCAxMiApICAgICAgICAgICAvKiBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQ0FOX01CX01TUiAgICAgICAgICAgICAgICAgICAgICAgKCAxNiApICAgICAgICAgICAvKiBNYWlsQm94IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQ0FOX01CX01ETCAgICAgICAgICAgICAgICAgICAgICAgKCAyMCApICAgICAgICAgICAvKiBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyICovDQotI2RlZmluZSBDQU5fTUJfTURIICAgICAgICAgICAgICAgICAgICAgICAoIDI0ICkgICAgICAgICAgIC8qIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyICovDQotI2RlZmluZSBDQU5fTUJfTUNSICAgICAgICAgICAgICAgICAgICAgICAoIDI4ICkgICAgICAgICAgIC8qIE1haWxCb3ggQ29udHJvbCBSZWdpc3RlciAqLw0KLS8qIC0tLS0tLS0tIENBTl9NTVIgOiAoQ0FOX01CIE9mZnNldDogMHgwKSBDQU4gTWVzc2FnZSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19DQU5fTVRJTUVNQVJLICAgICAgICAgICAgICAoIDB4RkZGRiA8PCAwICkgIC8qIChDQU5fTUIpIE1haWxib3ggVGltZW1hcmsgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9QUklPUiAgICAgICAgICAgICAgICAgICggMHhGIDw8IDE2ICkgICAgLyogKENBTl9NQikgTWFpbGJveCBQcmlvcml0eSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01PVCAgICAgICAgICAgICAgICAgICAgKCAweDcgPDwgMjQgKSAgICAvKiAoQ0FOX01CKSBNYWlsYm94IE9iamVjdCBUeXBlICovDQotI2RlZmluZSAgICAgQVQ5MUNfQ0FOX01PVF9ESVMgICAgICAgICAgICAoIDB4MCA8PCAyNCApICAgIC8qIChDQU5fTUIpICovDQotI2RlZmluZSAgICAgQVQ5MUNfQ0FOX01PVF9SWCAgICAgICAgICAgICAoIDB4MSA8PCAyNCApICAgIC8qIChDQU5fTUIpICovDQotI2RlZmluZSAgICAgQVQ5MUNfQ0FOX01PVF9SWE9WRVJXUklURSAgICAoIDB4MiA8PCAyNCApICAgIC8qIChDQU5fTUIpICovDQotI2RlZmluZSAgICAgQVQ5MUNfQ0FOX01PVF9UWCAgICAgICAgICAgICAoIDB4MyA8PCAyNCApICAgIC8qIChDQU5fTUIpICovDQotI2RlZmluZSAgICAgQVQ5MUNfQ0FOX01PVF9DT05TVU1FUiAgICAgICAoIDB4NCA8PCAyNCApICAgIC8qIChDQU5fTUIpICovDQotI2RlZmluZSAgICAgQVQ5MUNfQ0FOX01PVF9QUk9EVUNFUiAgICAgICAoIDB4NSA8PCAyNCApICAgIC8qIChDQU5fTUIpICovDQotLyogLS0tLS0tLS0gQ0FOX01BTSA6IChDQU5fTUIgT2Zmc2V0OiAweDQpIENBTiBNZXNzYWdlIEFjY2VwdGFuY2UgTWFzayBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01JRHZCICAgICAgICAgICAgICAgICAgKCAweDNGRkZGIDw8IDAgKSAvKiAoQ0FOX01CKSBDb21wbGVtZW50YXJ5IGJpdHMgZm9yIGlkZW50aWZpZXIgaW4gZXh0ZW5kZWQgbW9kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01JRHZBICAgICAgICAgICAgICAgICAgKCAweDdGRiA8PCAxOCApICAvKiAoQ0FOX01CKSBJZGVudGlmaWVyIGZvciBzdGFuZGFyZCBmcmFtZSBtb2RlICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUlERSAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAyOSApICAgIC8qIChDQU5fTUIpIElkZW50aWZpZXIgVmVyc2lvbiAqLw0KLS8qIC0tLS0tLS0tIENBTl9NSUQgOiAoQ0FOX01CIE9mZnNldDogMHg4KSBDQU4gTWVzc2FnZSBJRCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIENBTl9NRklEIDogKENBTl9NQiBPZmZzZXQ6IDB4YykgQ0FOIE1lc3NhZ2UgRmFtaWx5IElEIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQ0FOX01TUiA6IChDQU5fTUIgT2Zmc2V0OiAweDEwKSBDQU4gTWVzc2FnZSBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NVElNRVNUQU1QICAgICggMHhGRkZGIDw8IDAgKSAvKiAoQ0FOX01CKSBUaW1lciBWYWx1ZSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01ETEMgICAgICAgICAgKCAweEYgPDwgMTYgKSAgIC8qIChDQU5fTUIpIE1haWxib3ggRGF0YSBMZW5ndGggQ29kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01SVFIgICAgICAgICAgKCAweDEgPDwgMjAgKSAgIC8qIChDQU5fTUIpIE1haWxib3ggUmVtb3RlIFRyYW5zbWlzc2lvbiBSZXF1ZXN0ICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUFCVCAgICAgICAgICAoIDB4MSA8PCAyMiApICAgLyogKENBTl9NQikgTWFpbGJveCBNZXNzYWdlIEFib3J0ICovDQotI2RlZmluZSBBVDkxQ19DQU5fTVJEWSAgICAgICAgICAoIDB4MSA8PCAyMyApICAgLyogKENBTl9NQikgTWFpbGJveCBSZWFkeSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01NSSAgICAgICAgICAgKCAweDEgPDwgMjQgKSAgIC8qIChDQU5fTUIpIE1haWxib3ggTWVzc2FnZSBJZ25vcmVkICovDQotLyogLS0tLS0tLS0gQ0FOX01ETCA6IChDQU5fTUIgT2Zmc2V0OiAweDE0KSBDQU4gTWVzc2FnZSBEYXRhIExvdyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIENBTl9NREggOiAoQ0FOX01CIE9mZnNldDogMHgxOCkgQ0FOIE1lc3NhZ2UgRGF0YSBIaWdoIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQ0FOX01DUiA6IChDQU5fTUIgT2Zmc2V0OiAweDFjKSBDQU4gTWVzc2FnZSBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUFDUiAgICAoIDB4MSA8PCAyMiApICAgICAgIC8qIChDQU5fTUIpIEFib3J0IFJlcXVlc3QgZm9yIE1haWxib3ggKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NVENSICAgICggMHgxIDw8IDIzICkgICAgICAgLyogKENBTl9NQikgTWFpbGJveCBUcmFuc2ZlciBDb21tYW5kICovDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBDb250cm9sIEFyZWEgTmV0d29yayBNYWlsQm94IEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19DQU5fTUIgc3RydWN0dXJlICoqKg0KKyNkZWZpbmUgQ0FOX01CX01NUiAgICAgICggMCkgLy8gTWFpbEJveCBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBDQU5fTUJfTUFNICAgICAgKCA0KSAvLyBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQ0FOX01CX01JRCAgICAgICggOCkgLy8gTWFpbEJveCBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQ0FOX01CX01GSUQgICAgICgxMikgLy8gTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXINCisjZGVmaW5lIENBTl9NQl9NU1IgICAgICAoMTYpIC8vIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBDQU5fTUJfTURMICAgICAgKDIwKSAvLyBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyDQorI2RlZmluZSBDQU5fTUJfTURIICAgICAgKDI0KSAvLyBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3Rlcg0KKyNkZWZpbmUgQ0FOX01CX01DUiAgICAgICgyOCkgLy8gTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyDQorLy8gLS0tLS0tLS0gQ0FOX01NUiA6IChDQU5fTUIgT2Zmc2V0OiAweDApIENBTiBNZXNzYWdlIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DQU5fTVRJTUVNQVJLICAgICAgICgweEZGRkYgPDwgIDApIC8vIChDQU5fTUIpIE1haWxib3ggVGltZW1hcmsNCisjZGVmaW5lIEFUOTFDX0NBTl9QUklPUiAgICAgICAgICAgKDB4RiA8PCAxNikgLy8gKENBTl9NQikgTWFpbGJveCBQcmlvcml0eQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01PVCAgICAgICAgICAgICAoMHg3IDw8IDI0KSAvLyAoQ0FOX01CKSBNYWlsYm94IE9iamVjdCBUeXBlDQorI2RlZmluZSAJQVQ5MUNfQ0FOX01PVF9ESVMgICAgICAgICAgICAgICAgICAoMHgwIDw8IDI0KSAvLyAoQ0FOX01CKSANCisjZGVmaW5lIAlBVDkxQ19DQU5fTU9UX1JYICAgICAgICAgICAgICAgICAgICgweDEgPDwgMjQpIC8vIChDQU5fTUIpIA0KKyNkZWZpbmUgCUFUOTFDX0NBTl9NT1RfUlhPVkVSV1JJVEUgICAgICAgICAgKDB4MiA8PCAyNCkgLy8gKENBTl9NQikgDQorI2RlZmluZSAJQVQ5MUNfQ0FOX01PVF9UWCAgICAgICAgICAgICAgICAgICAoMHgzIDw8IDI0KSAvLyAoQ0FOX01CKSANCisjZGVmaW5lIAlBVDkxQ19DQU5fTU9UX0NPTlNVTUVSICAgICAgICAgICAgICgweDQgPDwgMjQpIC8vIChDQU5fTUIpIA0KKyNkZWZpbmUgCUFUOTFDX0NBTl9NT1RfUFJPRFVDRVIgICAgICAgICAgICAgKDB4NSA8PCAyNCkgLy8gKENBTl9NQikgDQorLy8gLS0tLS0tLS0gQ0FOX01BTSA6IChDQU5fTUIgT2Zmc2V0OiAweDQpIENBTiBNZXNzYWdlIEFjY2VwdGFuY2UgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0NBTl9NSUR2QiAgICAgICAgICAgKDB4M0ZGRkYgPDwgIDApIC8vIChDQU5fTUIpIENvbXBsZW1lbnRhcnkgYml0cyBmb3IgaWRlbnRpZmllciBpbiBleHRlbmRlZCBtb2RlDQorI2RlZmluZSBBVDkxQ19DQU5fTUlEdkEgICAgICAgICAgICgweDdGRiA8PCAxOCkgLy8gKENBTl9NQikgSWRlbnRpZmllciBmb3Igc3RhbmRhcmQgZnJhbWUgbW9kZQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01JREUgICAgICAgICAgICAoMHgxIDw8IDI5KSAvLyAoQ0FOX01CKSBJZGVudGlmaWVyIFZlcnNpb24NCisvLyAtLS0tLS0tLSBDQU5fTUlEIDogKENBTl9NQiBPZmZzZXQ6IDB4OCkgQ0FOIE1lc3NhZ2UgSUQgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQ0FOX01GSUQgOiAoQ0FOX01CIE9mZnNldDogMHhjKSBDQU4gTWVzc2FnZSBGYW1pbHkgSUQgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQ0FOX01TUiA6IChDQU5fTUIgT2Zmc2V0OiAweDEwKSBDQU4gTWVzc2FnZSBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DQU5fTVRJTUVTVEFNUCAgICAgICgweEZGRkYgPDwgIDApIC8vIChDQU5fTUIpIFRpbWVyIFZhbHVlDQorI2RlZmluZSBBVDkxQ19DQU5fTURMQyAgICAgICAgICAgICgweEYgPDwgMTYpIC8vIChDQU5fTUIpIE1haWxib3ggRGF0YSBMZW5ndGggQ29kZQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01SVFIgICAgICAgICAgICAoMHgxIDw8IDIwKSAvLyAoQ0FOX01CKSBNYWlsYm94IFJlbW90ZSBUcmFuc21pc3Npb24gUmVxdWVzdA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01BQlQgICAgICAgICAgICAoMHgxIDw8IDIyKSAvLyAoQ0FOX01CKSBNYWlsYm94IE1lc3NhZ2UgQWJvcnQNCisjZGVmaW5lIEFUOTFDX0NBTl9NUkRZICAgICAgICAgICAgKDB4MSA8PCAyMykgLy8gKENBTl9NQikgTWFpbGJveCBSZWFkeQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01NSSAgICAgICAgICAgICAoMHgxIDw8IDI0KSAvLyAoQ0FOX01CKSBNYWlsYm94IE1lc3NhZ2UgSWdub3JlZA0KKy8vIC0tLS0tLS0tIENBTl9NREwgOiAoQ0FOX01CIE9mZnNldDogMHgxNCkgQ0FOIE1lc3NhZ2UgRGF0YSBMb3cgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQ0FOX01ESCA6IChDQU5fTUIgT2Zmc2V0OiAweDE4KSBDQU4gTWVzc2FnZSBEYXRhIEhpZ2ggUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQ0FOX01DUiA6IChDQU5fTUIgT2Zmc2V0OiAweDFjKSBDQU4gTWVzc2FnZSBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01BQ1IgICAgICAgICAgICAoMHgxIDw8IDIyKSAvLyAoQ0FOX01CKSBBYm9ydCBSZXF1ZXN0IGZvciBNYWlsYm94DQorI2RlZmluZSBBVDkxQ19DQU5fTVRDUiAgICAgICAgICAgICgweDEgPDwgMjMpIC8vIChDQU5fTUIpIE1haWxib3ggVHJhbnNmZXIgQ29tbWFuZA0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQ29udHJvbCBBcmVhIE5ldHdvcmsgSW50ZXJmYWNlICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX0NBTiBzdHJ1Y3R1cmUgKioqICovDQotI2RlZmluZSBDQU5fTVIgICAgICAgICAgICAgICggMCApICAgICAgICAgLyogTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQ0FOX0lFUiAgICAgICAgICAgICAoIDQgKSAgICAgICAgIC8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIENBTl9JRFIgICAgICAgICAgICAgKCA4ICkgICAgICAgICAvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQ0FOX0lNUiAgICAgICAgICAgICAoIDEyICkgICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBDQU5fU1IgICAgICAgICAgICAgICggMTYgKSAgICAgICAgLyogU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBDQU5fQlIgICAgICAgICAgICAgICggMjAgKSAgICAgICAgLyogQmF1ZHJhdGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIENBTl9USU0gICAgICAgICAgICAgKCAyNCApICAgICAgICAvKiBUaW1lciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQ0FOX1RJTUVTVFAgICAgICAgICAoIDI4ICkgICAgICAgIC8qIFRpbWUgU3RhbXAgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIENBTl9FQ1IgICAgICAgICAgICAgKCAzMiApICAgICAgICAvKiBFcnJvciBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBDQU5fVENSICAgICAgICAgICAgICggMzYgKSAgICAgICAgLyogVHJhbnNmZXIgQ29tbWFuZCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQ0FOX0FDUiAgICAgICAgICAgICAoIDQwICkgICAgICAgIC8qIEFib3J0IENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIENBTl9WUiAgICAgICAgICAgICAgKCAyNTIgKSAgICAgICAvKiBWZXJzaW9uIFJlZ2lzdGVyICovDQotI2RlZmluZSBDQU5fTUIwICAgICAgICAgICAgICggNTEyICkgICAgICAgLyogQ0FOIE1haWxib3ggMCAqLw0KLSNkZWZpbmUgQ0FOX01CMSAgICAgICAgICAgICAoIDU0NCApICAgICAgIC8qIENBTiBNYWlsYm94IDEgKi8NCi0jZGVmaW5lIENBTl9NQjIgICAgICAgICAgICAgKCA1NzYgKSAgICAgICAvKiBDQU4gTWFpbGJveCAyICovDQotI2RlZmluZSBDQU5fTUIzICAgICAgICAgICAgICggNjA4ICkgICAgICAgLyogQ0FOIE1haWxib3ggMyAqLw0KLSNkZWZpbmUgQ0FOX01CNCAgICAgICAgICAgICAoIDY0MCApICAgICAgIC8qIENBTiBNYWlsYm94IDQgKi8NCi0jZGVmaW5lIENBTl9NQjUgICAgICAgICAgICAgKCA2NzIgKSAgICAgICAvKiBDQU4gTWFpbGJveCA1ICovDQotI2RlZmluZSBDQU5fTUI2ICAgICAgICAgICAgICggNzA0ICkgICAgICAgLyogQ0FOIE1haWxib3ggNiAqLw0KLSNkZWZpbmUgQ0FOX01CNyAgICAgICAgICAgICAoIDczNiApICAgICAgIC8qIENBTiBNYWlsYm94IDcgKi8NCi0jZGVmaW5lIENBTl9NQjggICAgICAgICAgICAgKCA3NjggKSAgICAgICAvKiBDQU4gTWFpbGJveCA4ICovDQotI2RlZmluZSBDQU5fTUI5ICAgICAgICAgICAgICggODAwICkgICAgICAgLyogQ0FOIE1haWxib3ggOSAqLw0KLSNkZWZpbmUgQ0FOX01CMTAgICAgICAgICAgICAoIDgzMiApICAgICAgIC8qIENBTiBNYWlsYm94IDEwICovDQotI2RlZmluZSBDQU5fTUIxMSAgICAgICAgICAgICggODY0ICkgICAgICAgLyogQ0FOIE1haWxib3ggMTEgKi8NCi0jZGVmaW5lIENBTl9NQjEyICAgICAgICAgICAgKCA4OTYgKSAgICAgICAvKiBDQU4gTWFpbGJveCAxMiAqLw0KLSNkZWZpbmUgQ0FOX01CMTMgICAgICAgICAgICAoIDkyOCApICAgICAgIC8qIENBTiBNYWlsYm94IDEzICovDQotI2RlZmluZSBDQU5fTUIxNCAgICAgICAgICAgICggOTYwICkgICAgICAgLyogQ0FOIE1haWxib3ggMTQgKi8NCi0jZGVmaW5lIENBTl9NQjE1ICAgICAgICAgICAgKCA5OTIgKSAgICAgICAvKiBDQU4gTWFpbGJveCAxNSAqLw0KLS8qIC0tLS0tLS0tIENBTl9NUiA6IChDQU4gT2Zmc2V0OiAweDApIENBTiBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19DQU5fQ0FORU4gICAgICggMHgxIDw8IDAgKSAgLyogKENBTikgQ0FOIENvbnRyb2xsZXIgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19DQU5fTFBNICAgICAgICggMHgxIDw8IDEgKSAgLyogKENBTikgRGlzYWJsZS9FbmFibGUgTG93IFBvd2VyIE1vZGUgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9BQk0gICAgICAgKCAweDEgPDwgMiApICAvKiAoQ0FOKSBEaXNhYmxlL0VuYWJsZSBBdXRvYmF1ZC9MaXN0ZW4gTW9kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX09WTCAgICAgICAoIDB4MSA8PCAzICkgIC8qIChDQU4pIERpc2FibGUvRW5hYmxlIE92ZXJsb2FkIEZyYW1lICovDQotI2RlZmluZSBBVDkxQ19DQU5fVEVPRiAgICAgICggMHgxIDw8IDQgKSAgLyogKENBTikgVGltZSBTdGFtcCBtZXNzYWdlcyBhdCBlYWNoIGVuZCBvZiBGcmFtZSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1RUTSAgICAgICAoIDB4MSA8PCA1ICkgIC8qIChDQU4pIERpc2FibGUvRW5hYmxlIFRpbWUgVHJpZ2dlciBNb2RlICovDQotI2RlZmluZSBBVDkxQ19DQU5fVElNRlJaICAgICggMHgxIDw8IDYgKSAgLyogKENBTikgRW5hYmxlIFRpbWVyIEZyZWV6ZSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX0RSUFQgICAgICAoIDB4MSA8PCA3ICkgIC8qIChDQU4pIERpc2FibGUgUmVwZWF0ICovDQotLyogLS0tLS0tLS0gQ0FOX0lFUiA6IChDQU4gT2Zmc2V0OiAweDQpIENBTiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIwICAgICAgICggMHgxIDw8IDAgKSAgLyogKENBTikgTWFpbGJveCAwIEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjEgICAgICAgKCAweDEgPDwgMSApICAvKiAoQ0FOKSBNYWlsYm94IDEgRmxhZyAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMiAgICAgICAoIDB4MSA8PCAyICkgIC8qIChDQU4pIE1haWxib3ggMiBGbGFnICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIzICAgICAgICggMHgxIDw8IDMgKSAgLyogKENBTikgTWFpbGJveCAzIEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjQgICAgICAgKCAweDEgPDwgNCApICAvKiAoQ0FOKSBNYWlsYm94IDQgRmxhZyAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CNSAgICAgICAoIDB4MSA8PCA1ICkgIC8qIChDQU4pIE1haWxib3ggNSBGbGFnICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI2ICAgICAgICggMHgxIDw8IDYgKSAgLyogKENBTikgTWFpbGJveCA2IEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjcgICAgICAgKCAweDEgPDwgNyApICAvKiAoQ0FOKSBNYWlsYm94IDcgRmxhZyAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01COCAgICAgICAoIDB4MSA8PCA4ICkgIC8qIChDQU4pIE1haWxib3ggOCBGbGFnICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI5ICAgICAgICggMHgxIDw8IDkgKSAgLyogKENBTikgTWFpbGJveCA5IEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjEwICAgICAgKCAweDEgPDwgMTAgKSAvKiAoQ0FOKSBNYWlsYm94IDEwIEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjExICAgICAgKCAweDEgPDwgMTEgKSAvKiAoQ0FOKSBNYWlsYm94IDExIEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjEyICAgICAgKCAweDEgPDwgMTIgKSAvKiAoQ0FOKSBNYWlsYm94IDEyIEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjEzICAgICAgKCAweDEgPDwgMTMgKSAvKiAoQ0FOKSBNYWlsYm94IDEzIEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjE0ICAgICAgKCAweDEgPDwgMTQgKSAvKiAoQ0FOKSBNYWlsYm94IDE0IEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjE1ICAgICAgKCAweDEgPDwgMTUgKSAvKiAoQ0FOKSBNYWlsYm94IDE1IEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9FUlJBICAgICAgKCAweDEgPDwgMTYgKSAvKiAoQ0FOKSBFcnJvciBBY3RpdmUgTW9kZSBGbGFnICovDQotI2RlZmluZSBBVDkxQ19DQU5fV0FSTiAgICAgICggMHgxIDw8IDE3ICkgLyogKENBTikgV2FybmluZyBMaW1pdCBGbGFnICovDQotI2RlZmluZSBBVDkxQ19DQU5fRVJSUCAgICAgICggMHgxIDw8IDE4ICkgLyogKENBTikgRXJyb3IgUGFzc2l2ZSBNb2RlIEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9CT0ZGICAgICAgKCAweDEgPDwgMTkgKSAvKiAoQ0FOKSBCdXMgT2ZmIE1vZGUgRmxhZyAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1NMRUVQICAgICAoIDB4MSA8PCAyMCApIC8qIChDQU4pIFNsZWVwIEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9XQUtFVVAgICAgKCAweDEgPDwgMjEgKSAvKiAoQ0FOKSBXYWtldXAgRmxhZyAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1RPVkYgICAgICAoIDB4MSA8PCAyMiApIC8qIChDQU4pIFRpbWVyIE92ZXJmbG93IEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9UU1RQICAgICAgKCAweDEgPDwgMjMgKSAvKiAoQ0FOKSBUaW1lc3RhbXAgRmxhZyAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX0NFUlIgICAgICAoIDB4MSA8PCAyNCApIC8qIChDQU4pIENSQyBFcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1NFUlIgICAgICAoIDB4MSA8PCAyNSApIC8qIChDQU4pIFN0dWZmaW5nIEVycm9yICovDQotI2RlZmluZSBBVDkxQ19DQU5fQUVSUiAgICAgICggMHgxIDw8IDI2ICkgLyogKENBTikgQWNrbm93bGVkZ21lbnQgRXJyb3IgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9GRVJSICAgICAgKCAweDEgPDwgMjcgKSAvKiAoQ0FOKSBGb3JtIEVycm9yICovDQotI2RlZmluZSBBVDkxQ19DQU5fQkVSUiAgICAgICggMHgxIDw8IDI4ICkgLyogKENBTikgQml0IEVycm9yICovDQotLyogLS0tLS0tLS0gQ0FOX0lEUiA6IChDQU4gT2Zmc2V0OiAweDgpIENBTiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIENBTl9JTVIgOiAoQ0FOIE9mZnNldDogMHhjKSBDQU4gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBDQU5fU1IgOiAoQ0FOIE9mZnNldDogMHgxMCkgQ0FOIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1JCU1kgICAgICAoIDB4MSA8PCAyOSApICAgICAvKiAoQ0FOKSBSZWNlaXZlciBCdXN5ICovDQotI2RlZmluZSBBVDkxQ19DQU5fVEJTWSAgICAgICggMHgxIDw8IDMwICkgICAgIC8qIChDQU4pIFRyYW5zbWl0dGVyIEJ1c3kgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9PVkxZICAgICAgKCAweDEgPDwgMzEgKSAgICAgLyogKENBTikgT3ZlcmxvYWQgQnVzeSAqLw0KLS8qIC0tLS0tLS0tIENBTl9CUiA6IChDQU4gT2Zmc2V0OiAweDE0KSBDQU4gQmF1ZHJhdGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9QSEFTRTIgICAgKCAweDcgPDwgMCApICAgICAgLyogKENBTikgUGhhc2UgMiBzZWdtZW50ICovDQotI2RlZmluZSBBVDkxQ19DQU5fUEhBU0UxICAgICggMHg3IDw8IDQgKSAgICAgIC8qIChDQU4pIFBoYXNlIDEgc2VnbWVudCAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1BST1BBRyAgICAoIDB4NyA8PCA4ICkgICAgICAvKiAoQ0FOKSBQcm9ncmFtbWF0aW9uIHRpbWUgc2VnbWVudCAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1NZTkMgICAgICAoIDB4MyA8PCAxMiApICAgICAvKiAoQ0FOKSBSZS1zeW5jaHJvbml6YXRpb24ganVtcCB3aWR0aCBzZWdtZW50ICovDQotI2RlZmluZSBBVDkxQ19DQU5fQlJQICAgICAgICggMHg3RiA8PCAxNiApICAgIC8qIChDQU4pIEJhdWRyYXRlIFByZXNjYWxlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1NNUCAgICAgICAoIDB4MSA8PCAyNCApICAgICAvKiAoQ0FOKSBTYW1wbGluZyBtb2RlICovDQotLyogLS0tLS0tLS0gQ0FOX1RJTSA6IChDQU4gT2Zmc2V0OiAweDE4KSBDQU4gVGltZXIgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9USU1FUiAgICAgKCAweEZGRkYgPDwgMCApICAgLyogKENBTikgVGltZXIgZmllbGQgKi8NCi0vKiAtLS0tLS0tLSBDQU5fVElNRVNUUCA6IChDQU4gT2Zmc2V0OiAweDFjKSBDQU4gVGltZXN0YW1wIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQ0FOX0VDUiA6IChDQU4gT2Zmc2V0OiAweDIwKSBDQU4gRXJyb3IgQ291bnRlciBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1JFQyAgICAgICAoIDB4RkYgPDwgMCApICAgICAvKiAoQ0FOKSBSZWNlaXZlIEVycm9yIENvdW50ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9URUMgICAgICAgKCAweEZGIDw8IDE2ICkgICAgLyogKENBTikgVHJhbnNtaXQgRXJyb3IgQ291bnRlciAqLw0KLS8qIC0tLS0tLS0tIENBTl9UQ1IgOiAoQ0FOIE9mZnNldDogMHgyNCkgQ0FOIFRyYW5zZmVyIENvbW1hbmQgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9USU1SU1QgICAgKCAweDEgPDwgMzEgKSAgICAgLyogKENBTikgVGltZXIgUmVzZXQgRmllbGQgKi8NCi0vKiAtLS0tLS0tLSBDQU5fQUNSIDogKENBTiBPZmZzZXQ6IDB4MjgpIENBTiBBYm9ydCBDb21tYW5kIFJlZ2lzdGVyIC0tLS0tLS0tICovDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBDb250cm9sIEFyZWEgTmV0d29yayBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfQ0FOIHN0cnVjdHVyZSAqKioNCisjZGVmaW5lIENBTl9NUiAgICAgICAgICAoIDApIC8vIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIENBTl9JRVIgICAgICAgICAoIDQpIC8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIENBTl9JRFIgICAgICAgICAoIDgpIC8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBDQU5fSU1SICAgICAgICAgKDEyKSAvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQ0FOX1NSICAgICAgICAgICgxNikgLy8gU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBDQU5fQlIgICAgICAgICAgKDIwKSAvLyBCYXVkcmF0ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQ0FOX1RJTSAgICAgICAgICgyNCkgLy8gVGltZXIgUmVnaXN0ZXINCisjZGVmaW5lIENBTl9USU1FU1RQICAgICAoMjgpIC8vIFRpbWUgU3RhbXAgUmVnaXN0ZXINCisjZGVmaW5lIENBTl9FQ1IgICAgICAgICAoMzIpIC8vIEVycm9yIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIENBTl9UQ1IgICAgICAgICAoMzYpIC8vIFRyYW5zZmVyIENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIENBTl9BQ1IgICAgICAgICAoNDApIC8vIEFib3J0IENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIENBTl9WUiAgICAgICAgICAoMjUyKSAvLyBWZXJzaW9uIFJlZ2lzdGVyDQorI2RlZmluZSBDQU5fTUIwICAgICAgICAgKDUxMikgLy8gQ0FOIE1haWxib3ggMA0KKyNkZWZpbmUgQ0FOX01CMSAgICAgICAgICg1NDQpIC8vIENBTiBNYWlsYm94IDENCisjZGVmaW5lIENBTl9NQjIgICAgICAgICAoNTc2KSAvLyBDQU4gTWFpbGJveCAyDQorI2RlZmluZSBDQU5fTUIzICAgICAgICAgKDYwOCkgLy8gQ0FOIE1haWxib3ggMw0KKyNkZWZpbmUgQ0FOX01CNCAgICAgICAgICg2NDApIC8vIENBTiBNYWlsYm94IDQNCisjZGVmaW5lIENBTl9NQjUgICAgICAgICAoNjcyKSAvLyBDQU4gTWFpbGJveCA1DQorI2RlZmluZSBDQU5fTUI2ICAgICAgICAgKDcwNCkgLy8gQ0FOIE1haWxib3ggNg0KKyNkZWZpbmUgQ0FOX01CNyAgICAgICAgICg3MzYpIC8vIENBTiBNYWlsYm94IDcNCisjZGVmaW5lIENBTl9NQjggICAgICAgICAoNzY4KSAvLyBDQU4gTWFpbGJveCA4DQorI2RlZmluZSBDQU5fTUI5ICAgICAgICAgKDgwMCkgLy8gQ0FOIE1haWxib3ggOQ0KKyNkZWZpbmUgQ0FOX01CMTAgICAgICAgICg4MzIpIC8vIENBTiBNYWlsYm94IDEwDQorI2RlZmluZSBDQU5fTUIxMSAgICAgICAgKDg2NCkgLy8gQ0FOIE1haWxib3ggMTENCisjZGVmaW5lIENBTl9NQjEyICAgICAgICAoODk2KSAvLyBDQU4gTWFpbGJveCAxMg0KKyNkZWZpbmUgQ0FOX01CMTMgICAgICAgICg5MjgpIC8vIENBTiBNYWlsYm94IDEzDQorI2RlZmluZSBDQU5fTUIxNCAgICAgICAgKDk2MCkgLy8gQ0FOIE1haWxib3ggMTQNCisjZGVmaW5lIENBTl9NQjE1ICAgICAgICAoOTkyKSAvLyBDQU4gTWFpbGJveCAxNQ0KKy8vIC0tLS0tLS0tIENBTl9NUiA6IChDQU4gT2Zmc2V0OiAweDApIENBTiBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0NBTkVOICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoQ0FOKSBDQU4gQ29udHJvbGxlciBFbmFibGUNCisjZGVmaW5lIEFUOTFDX0NBTl9MUE0gICAgICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKENBTikgRGlzYWJsZS9FbmFibGUgTG93IFBvd2VyIE1vZGUNCisjZGVmaW5lIEFUOTFDX0NBTl9BQk0gICAgICAgICAgICAgKDB4MSA8PCAgMikgLy8gKENBTikgRGlzYWJsZS9FbmFibGUgQXV0b2JhdWQvTGlzdGVuIE1vZGUNCisjZGVmaW5lIEFUOTFDX0NBTl9PVkwgICAgICAgICAgICAgKDB4MSA8PCAgMykgLy8gKENBTikgRGlzYWJsZS9FbmFibGUgT3ZlcmxvYWQgRnJhbWUNCisjZGVmaW5lIEFUOTFDX0NBTl9URU9GICAgICAgICAgICAgKDB4MSA8PCAgNCkgLy8gKENBTikgVGltZSBTdGFtcCBtZXNzYWdlcyBhdCBlYWNoIGVuZCBvZiBGcmFtZQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1RUTSAgICAgICAgICAgICAoMHgxIDw8ICA1KSAvLyAoQ0FOKSBEaXNhYmxlL0VuYWJsZSBUaW1lIFRyaWdnZXIgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1RJTUZSWiAgICAgICAgICAoMHgxIDw8ICA2KSAvLyAoQ0FOKSBFbmFibGUgVGltZXIgRnJlZXplDQorI2RlZmluZSBBVDkxQ19DQU5fRFJQVCAgICAgICAgICAgICgweDEgPDwgIDcpIC8vIChDQU4pIERpc2FibGUgUmVwZWF0DQorLy8gLS0tLS0tLS0gQ0FOX0lFUiA6IChDQU4gT2Zmc2V0OiAweDQpIENBTiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMCAgICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoQ0FOKSBNYWlsYm94IDAgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMSAgICAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoQ0FOKSBNYWlsYm94IDEgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMiAgICAgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoQ0FOKSBNYWlsYm94IDIgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMyAgICAgICAgICAgICAoMHgxIDw8ICAzKSAvLyAoQ0FOKSBNYWlsYm94IDMgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNCAgICAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoQ0FOKSBNYWlsYm94IDQgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNSAgICAgICAgICAgICAoMHgxIDw8ICA1KSAvLyAoQ0FOKSBNYWlsYm94IDUgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNiAgICAgICAgICAgICAoMHgxIDw8ICA2KSAvLyAoQ0FOKSBNYWlsYm94IDYgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNyAgICAgICAgICAgICAoMHgxIDw8ICA3KSAvLyAoQ0FOKSBNYWlsYm94IDcgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01COCAgICAgICAgICAgICAoMHgxIDw8ICA4KSAvLyAoQ0FOKSBNYWlsYm94IDggRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01COSAgICAgICAgICAgICAoMHgxIDw8ICA5KSAvLyAoQ0FOKSBNYWlsYm94IDkgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMTAgICAgICAgICAgICAoMHgxIDw8IDEwKSAvLyAoQ0FOKSBNYWlsYm94IDEwIEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9NQjExICAgICAgICAgICAgKDB4MSA8PCAxMSkgLy8gKENBTikgTWFpbGJveCAxMSBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxMiAgICAgICAgICAgICgweDEgPDwgMTIpIC8vIChDQU4pIE1haWxib3ggMTIgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMTMgICAgICAgICAgICAoMHgxIDw8IDEzKSAvLyAoQ0FOKSBNYWlsYm94IDEzIEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9NQjE0ICAgICAgICAgICAgKDB4MSA8PCAxNCkgLy8gKENBTikgTWFpbGJveCAxNCBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxNSAgICAgICAgICAgICgweDEgPDwgMTUpIC8vIChDQU4pIE1haWxib3ggMTUgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0VSUkEgICAgICAgICAgICAoMHgxIDw8IDE2KSAvLyAoQ0FOKSBFcnJvciBBY3RpdmUgTW9kZSBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fV0FSTiAgICAgICAgICAgICgweDEgPDwgMTcpIC8vIChDQU4pIFdhcm5pbmcgTGltaXQgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0VSUlAgICAgICAgICAgICAoMHgxIDw8IDE4KSAvLyAoQ0FOKSBFcnJvciBQYXNzaXZlIE1vZGUgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0JPRkYgICAgICAgICAgICAoMHgxIDw8IDE5KSAvLyAoQ0FOKSBCdXMgT2ZmIE1vZGUgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1NMRUVQICAgICAgICAgICAoMHgxIDw8IDIwKSAvLyAoQ0FOKSBTbGVlcCBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fV0FLRVVQICAgICAgICAgICgweDEgPDwgMjEpIC8vIChDQU4pIFdha2V1cCBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fVE9WRiAgICAgICAgICAgICgweDEgPDwgMjIpIC8vIChDQU4pIFRpbWVyIE92ZXJmbG93IEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9UU1RQICAgICAgICAgICAgKDB4MSA8PCAyMykgLy8gKENBTikgVGltZXN0YW1wIEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9DRVJSICAgICAgICAgICAgKDB4MSA8PCAyNCkgLy8gKENBTikgQ1JDIEVycm9yDQorI2RlZmluZSBBVDkxQ19DQU5fU0VSUiAgICAgICAgICAgICgweDEgPDwgMjUpIC8vIChDQU4pIFN0dWZmaW5nIEVycm9yDQorI2RlZmluZSBBVDkxQ19DQU5fQUVSUiAgICAgICAgICAgICgweDEgPDwgMjYpIC8vIChDQU4pIEFja25vd2xlZGdtZW50IEVycm9yDQorI2RlZmluZSBBVDkxQ19DQU5fRkVSUiAgICAgICAgICAgICgweDEgPDwgMjcpIC8vIChDQU4pIEZvcm0gRXJyb3INCisjZGVmaW5lIEFUOTFDX0NBTl9CRVJSICAgICAgICAgICAgKDB4MSA8PCAyOCkgLy8gKENBTikgQml0IEVycm9yDQorLy8gLS0tLS0tLS0gQ0FOX0lEUiA6IChDQU4gT2Zmc2V0OiAweDgpIENBTiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBDQU5fSU1SIDogKENBTiBPZmZzZXQ6IDB4YykgQ0FOIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIENBTl9TUiA6IChDQU4gT2Zmc2V0OiAweDEwKSBDQU4gU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1JCU1kgICAgICAgICAgICAoMHgxIDw8IDI5KSAvLyAoQ0FOKSBSZWNlaXZlciBCdXN5DQorI2RlZmluZSBBVDkxQ19DQU5fVEJTWSAgICAgICAgICAgICgweDEgPDwgMzApIC8vIChDQU4pIFRyYW5zbWl0dGVyIEJ1c3kNCisjZGVmaW5lIEFUOTFDX0NBTl9PVkxZICAgICAgICAgICAgKDB4MSA8PCAzMSkgLy8gKENBTikgT3ZlcmxvYWQgQnVzeQ0KKy8vIC0tLS0tLS0tIENBTl9CUiA6IChDQU4gT2Zmc2V0OiAweDE0KSBDQU4gQmF1ZHJhdGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DQU5fUEhBU0UyICAgICAgICAgICgweDcgPDwgIDApIC8vIChDQU4pIFBoYXNlIDIgc2VnbWVudA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1BIQVNFMSAgICAgICAgICAoMHg3IDw8ICA0KSAvLyAoQ0FOKSBQaGFzZSAxIHNlZ21lbnQNCisjZGVmaW5lIEFUOTFDX0NBTl9QUk9QQUcgICAgICAgICAgKDB4NyA8PCAgOCkgLy8gKENBTikgUHJvZ3JhbW1hdGlvbiB0aW1lIHNlZ21lbnQNCisjZGVmaW5lIEFUOTFDX0NBTl9TWU5DICAgICAgICAgICAgKDB4MyA8PCAxMikgLy8gKENBTikgUmUtc3luY2hyb25pemF0aW9uIGp1bXAgd2lkdGggc2VnbWVudA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0JSUCAgICAgICAgICAgICAoMHg3RiA8PCAxNikgLy8gKENBTikgQmF1ZHJhdGUgUHJlc2NhbGVyDQorI2RlZmluZSBBVDkxQ19DQU5fU01QICAgICAgICAgICAgICgweDEgPDwgMjQpIC8vIChDQU4pIFNhbXBsaW5nIG1vZGUNCisvLyAtLS0tLS0tLSBDQU5fVElNIDogKENBTiBPZmZzZXQ6IDB4MTgpIENBTiBUaW1lciBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0NBTl9USU1FUiAgICAgICAgICAgKDB4RkZGRiA8PCAgMCkgLy8gKENBTikgVGltZXIgZmllbGQNCisvLyAtLS0tLS0tLSBDQU5fVElNRVNUUCA6IChDQU4gT2Zmc2V0OiAweDFjKSBDQU4gVGltZXN0YW1wIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIENBTl9FQ1IgOiAoQ0FOIE9mZnNldDogMHgyMCkgQ0FOIEVycm9yIENvdW50ZXIgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DQU5fUkVDICAgICAgICAgICAgICgweEZGIDw8ICAwKSAvLyAoQ0FOKSBSZWNlaXZlIEVycm9yIENvdW50ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9URUMgICAgICAgICAgICAgKDB4RkYgPDwgMTYpIC8vIChDQU4pIFRyYW5zbWl0IEVycm9yIENvdW50ZXINCisvLyAtLS0tLS0tLSBDQU5fVENSIDogKENBTiBPZmZzZXQ6IDB4MjQpIENBTiBUcmFuc2ZlciBDb21tYW5kIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1RJTVJTVCAgICAgICAgICAoMHgxIDw8IDMxKSAvLyAoQ0FOKSBUaW1lciBSZXNldCBGaWVsZA0KKy8vIC0tLS0tLS0tIENBTl9BQ1IgOiAoQ0FOIE9mZnNldDogMHgyOCkgQ0FOIEFib3J0IENvbW1hbmQgUmVnaXN0ZXIgLS0tLS0tLS0gDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBFdGhlcm5ldCBNQUMgMTAvMTAwICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX0VNQUMgc3RydWN0dXJlICoqKiAqLw0KLSNkZWZpbmUgRU1BQ19OQ1IgICAgICAgICAgICAgICAgICAgICAgICAoIDAgKSAgICAgICAgIC8qIE5ldHdvcmsgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgRU1BQ19OQ0ZHUiAgICAgICAgICAgICAgICAgICAgICAoIDQgKSAgICAgICAgIC8qIE5ldHdvcmsgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLw0KLSNkZWZpbmUgRU1BQ19OU1IgICAgICAgICAgICAgICAgICAgICAgICAoIDggKSAgICAgICAgIC8qIE5ldHdvcmsgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBFTUFDX1RTUiAgICAgICAgICAgICAgICAgICAgICAgICggMjAgKSAgICAgICAgLyogVHJhbnNtaXQgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBFTUFDX1JCUVAgICAgICAgICAgICAgICAgICAgICAgICggMjQgKSAgICAgICAgLyogUmVjZWl2ZSBCdWZmZXIgUXVldWUgUG9pbnRlciAqLw0KLSNkZWZpbmUgRU1BQ19UQlFQICAgICAgICAgICAgICAgICAgICAgICAoIDI4ICkgICAgICAgIC8qIFRyYW5zbWl0IEJ1ZmZlciBRdWV1ZSBQb2ludGVyICovDQotI2RlZmluZSBFTUFDX1JTUiAgICAgICAgICAgICAgICAgICAgICAgICggMzIgKSAgICAgICAgLyogUmVjZWl2ZSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEVNQUNfSVNSICAgICAgICAgICAgICAgICAgICAgICAgKCAzNiApICAgICAgICAvKiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBFTUFDX0lFUiAgICAgICAgICAgICAgICAgICAgICAgICggNDAgKSAgICAgICAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgRU1BQ19JRFIgICAgICAgICAgICAgICAgICAgICAgICAoIDQ0ICkgICAgICAgIC8qIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBFTUFDX0lNUiAgICAgICAgICAgICAgICAgICAgICAgICggNDggKSAgICAgICAgLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEVNQUNfTUFOICAgICAgICAgICAgICAgICAgICAgICAgKCA1MiApICAgICAgICAvKiBQSFkgTWFpbnRlbmFuY2UgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEVNQUNfUFRSICAgICAgICAgICAgICAgICAgICAgICAgKCA1NiApICAgICAgICAvKiBQYXVzZSBUaW1lIFJlZ2lzdGVyICovDQotI2RlZmluZSBFTUFDX1BGUiAgICAgICAgICAgICAgICAgICAgICAgICggNjAgKSAgICAgICAgLyogUGF1c2UgRnJhbWVzIHJlY2VpdmVkIFJlZ2lzdGVyICovDQotI2RlZmluZSBFTUFDX0ZUTyAgICAgICAgICAgICAgICAgICAgICAgICggNjQgKSAgICAgICAgLyogRnJhbWVzIFRyYW5zbWl0dGVkIE9LIFJlZ2lzdGVyICovDQotI2RlZmluZSBFTUFDX1NDRiAgICAgICAgICAgICAgICAgICAgICAgICggNjggKSAgICAgICAgLyogU2luZ2xlIENvbGxpc2lvbiBGcmFtZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgRU1BQ19NQ0YgICAgICAgICAgICAgICAgICAgICAgICAoIDcyICkgICAgICAgIC8qIE11bHRpcGxlIENvbGxpc2lvbiBGcmFtZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgRU1BQ19GUk8gICAgICAgICAgICAgICAgICAgICAgICAoIDc2ICkgICAgICAgIC8qIEZyYW1lcyBSZWNlaXZlZCBPSyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgRU1BQ19GQ1NFICAgICAgICAgICAgICAgICAgICAgICAoIDgwICkgICAgICAgIC8qIEZyYW1lIENoZWNrIFNlcXVlbmNlIEVycm9yIFJlZ2lzdGVyICovDQotI2RlZmluZSBFTUFDX0FMRSAgICAgICAgICAgICAgICAgICAgICAgICggODQgKSAgICAgICAgLyogQWxpZ25tZW50IEVycm9yIFJlZ2lzdGVyICovDQotI2RlZmluZSBFTUFDX0RURiAgICAgICAgICAgICAgICAgICAgICAgICggODggKSAgICAgICAgLyogRGVmZXJyZWQgVHJhbnNtaXNzaW9uIEZyYW1lIFJlZ2lzdGVyICovDQotI2RlZmluZSBFTUFDX0xDT0wgICAgICAgICAgICAgICAgICAgICAgICggOTIgKSAgICAgICAgLyogTGF0ZSBDb2xsaXNpb24gUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEVNQUNfRUNPTCAgICAgICAgICAgICAgICAgICAgICAgKCA5NiApICAgICAgICAvKiBFeGNlc3NpdmUgQ29sbGlzaW9uIFJlZ2lzdGVyICovDQotI2RlZmluZSBFTUFDX1RVTkQgICAgICAgICAgICAgICAgICAgICAgICggMTAwICkgICAgICAgLyogVHJhbnNtaXQgVW5kZXJydW4gRXJyb3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEVNQUNfQ1NFICAgICAgICAgICAgICAgICAgICAgICAgKCAxMDQgKSAgICAgICAvKiBDYXJyaWVyIFNlbnNlIEVycm9yIFJlZ2lzdGVyICovDQotI2RlZmluZSBFTUFDX1JSRSAgICAgICAgICAgICAgICAgICAgICAgICggMTA4ICkgICAgICAgLyogUmVjZWl2ZSBSZXNzb3VyY2UgRXJyb3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEVNQUNfUk9WICAgICAgICAgICAgICAgICAgICAgICAgKCAxMTIgKSAgICAgICAvKiBSZWNlaXZlIE92ZXJydW4gRXJyb3JzIFJlZ2lzdGVyICovDQotI2RlZmluZSBFTUFDX1JTRSAgICAgICAgICAgICAgICAgICAgICAgICggMTE2ICkgICAgICAgLyogUmVjZWl2ZSBTeW1ib2wgRXJyb3JzIFJlZ2lzdGVyICovDQotI2RlZmluZSBFTUFDX0VMRSAgICAgICAgICAgICAgICAgICAgICAgICggMTIwICkgICAgICAgLyogRXhjZXNzaXZlIExlbmd0aCBFcnJvcnMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEVNQUNfUkpBICAgICAgICAgICAgICAgICAgICAgICAgKCAxMjQgKSAgICAgICAvKiBSZWNlaXZlIEphYmJlcnMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEVNQUNfVVNGICAgICAgICAgICAgICAgICAgICAgICAgKCAxMjggKSAgICAgICAvKiBVbmRlcnNpemUgRnJhbWVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBFTUFDX1NURSAgICAgICAgICAgICAgICAgICAgICAgICggMTMyICkgICAgICAgLyogU1FFIFRlc3QgRXJyb3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEVNQUNfUkxFICAgICAgICAgICAgICAgICAgICAgICAgKCAxMzYgKSAgICAgICAvKiBSZWNlaXZlIExlbmd0aCBGaWVsZCBNaXNtYXRjaCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgRU1BQ19UUEYgICAgICAgICAgICAgICAgICAgICAgICAoIDE0MCApICAgICAgIC8qIFRyYW5zbWl0dGVkIFBhdXNlIEZyYW1lcyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgRU1BQ19IUkIgICAgICAgICAgICAgICAgICAgICAgICAoIDE0NCApICAgICAgIC8qIEhhc2ggQWRkcmVzcyBCb3R0b21bMzE6MF0gKi8NCi0jZGVmaW5lIEVNQUNfSFJUICAgICAgICAgICAgICAgICAgICAgICAgKCAxNDggKSAgICAgICAvKiBIYXNoIEFkZHJlc3MgVG9wWzYzOjMyXSAqLw0KLSNkZWZpbmUgRU1BQ19TQTFMICAgICAgICAgICAgICAgICAgICAgICAoIDE1MiApICAgICAgIC8qIFNwZWNpZmljIEFkZHJlc3MgMSBCb3R0b20sIEZpcnN0IDQgYnl0ZXMgKi8NCi0jZGVmaW5lIEVNQUNfU0ExSCAgICAgICAgICAgICAgICAgICAgICAgKCAxNTYgKSAgICAgICAvKiBTcGVjaWZpYyBBZGRyZXNzIDEgVG9wLCBMYXN0IDIgYnl0ZXMgKi8NCi0jZGVmaW5lIEVNQUNfU0EyTCAgICAgICAgICAgICAgICAgICAgICAgKCAxNjAgKSAgICAgICAvKiBTcGVjaWZpYyBBZGRyZXNzIDIgQm90dG9tLCBGaXJzdCA0IGJ5dGVzICovDQotI2RlZmluZSBFTUFDX1NBMkggICAgICAgICAgICAgICAgICAgICAgICggMTY0ICkgICAgICAgLyogU3BlY2lmaWMgQWRkcmVzcyAyIFRvcCwgTGFzdCAyIGJ5dGVzICovDQotI2RlZmluZSBFTUFDX1NBM0wgICAgICAgICAgICAgICAgICAgICAgICggMTY4ICkgICAgICAgLyogU3BlY2lmaWMgQWRkcmVzcyAzIEJvdHRvbSwgRmlyc3QgNCBieXRlcyAqLw0KLSNkZWZpbmUgRU1BQ19TQTNIICAgICAgICAgICAgICAgICAgICAgICAoIDE3MiApICAgICAgIC8qIFNwZWNpZmljIEFkZHJlc3MgMyBUb3AsIExhc3QgMiBieXRlcyAqLw0KLSNkZWZpbmUgRU1BQ19TQTRMICAgICAgICAgICAgICAgICAgICAgICAoIDE3NiApICAgICAgIC8qIFNwZWNpZmljIEFkZHJlc3MgNCBCb3R0b20sIEZpcnN0IDQgYnl0ZXMgKi8NCi0jZGVmaW5lIEVNQUNfU0E0SCAgICAgICAgICAgICAgICAgICAgICAgKCAxODAgKSAgICAgICAvKiBTcGVjaWZpYyBBZGRyZXNzIDQgVG9wLCBMYXN0IDIgYnl0ZXMgKi8NCi0jZGVmaW5lIEVNQUNfVElEICAgICAgICAgICAgICAgICAgICAgICAgKCAxODQgKSAgICAgICAvKiBUeXBlIElEIENoZWNraW5nIFJlZ2lzdGVyICovDQotI2RlZmluZSBFTUFDX1RQUSAgICAgICAgICAgICAgICAgICAgICAgICggMTg4ICkgICAgICAgLyogVHJhbnNtaXQgUGF1c2UgUXVhbnR1bSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgRU1BQ19VU1JJTyAgICAgICAgICAgICAgICAgICAgICAoIDE5MiApICAgICAgIC8qIFVTRVIgSW5wdXQvT3V0cHV0IFJlZ2lzdGVyICovDQotI2RlZmluZSBFTUFDX1dPTCAgICAgICAgICAgICAgICAgICAgICAgICggMTk2ICkgICAgICAgLyogV2FrZSBPbiBMQU4gUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEVNQUNfUkVWICAgICAgICAgICAgICAgICAgICAgICAgKCAyNTIgKSAgICAgICAvKiBSZXZpc2lvbiBSZWdpc3RlciAqLw0KLS8qIC0tLS0tLS0tIEVNQUNfTkNSIDogKEVNQUMgT2Zmc2V0OiAweDApICAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19MQiAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAwICkgIC8qIChFTUFDKSBMb29wYmFjay4gT3B0aW9uYWwuIFdoZW4gc2V0LCBsb29wYmFjayBzaWduYWwgaXMgYXQgaGlnaCBsZXZlbC4gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfTExCICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMSApICAvKiAoRU1BQykgTG9vcGJhY2sgbG9jYWwuICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1JFICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDIgKSAgLyogKEVNQUMpIFJlY2VpdmUgZW5hYmxlLiAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19URSAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAzICkgIC8qIChFTUFDKSBUcmFuc21pdCBlbmFibGUuICovDQotI2RlZmluZSBBVDkxQ19FTUFDX01QRSAgICAgICAgICAgICAgICAgICggMHgxIDw8IDQgKSAgLyogKEVNQUMpIE1hbmFnZW1lbnQgcG9ydCBlbmFibGUuICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0NMUlNUQVQgICAgICAgICAgICAgICggMHgxIDw8IDUgKSAgLyogKEVNQUMpIENsZWFyIHN0YXRpc3RpY3MgcmVnaXN0ZXJzLiAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19JTkNTVEFUICAgICAgICAgICAgICAoIDB4MSA8PCA2ICkgIC8qIChFTUFDKSBJbmNyZW1lbnQgc3RhdGlzdGljcyByZWdpc3RlcnMuICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1dFU1RBVCAgICAgICAgICAgICAgICggMHgxIDw8IDcgKSAgLyogKEVNQUMpIFdyaXRlIGVuYWJsZSBmb3Igc3RhdGlzdGljcyByZWdpc3RlcnMuICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0JQICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDggKSAgLyogKEVNQUMpIEJhY2sgcHJlc3N1cmUuICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1RTVEFSVCAgICAgICAgICAgICAgICggMHgxIDw8IDkgKSAgLyogKEVNQUMpIFN0YXJ0IFRyYW5zbWlzc2lvbi4gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfVEhBTFQgICAgICAgICAgICAgICAgKCAweDEgPDwgMTAgKSAvKiAoRU1BQykgVHJhbnNtaXNzaW9uIEhhbHQuICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1RQRlIgICAgICAgICAgICAgICAgICggMHgxIDw8IDExICkgLyogKEVNQUMpIFRyYW5zbWl0IHBhdXNlIGZyYW1lICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1RaUSAgICAgICAgICAgICAgICAgICggMHgxIDw8IDEyICkgLyogKEVNQUMpIFRyYW5zbWl0IHplcm8gcXVhbnR1bSBwYXVzZSBmcmFtZSAqLw0KLS8qIC0tLS0tLS0tIEVNQUNfTkNGR1IgOiAoRU1BQyBPZmZzZXQ6IDB4NCkgTmV0d29yayBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1NQRCAgICAgICAgICAgICAgICAgICggMHgxIDw8IDAgKSAgLyogKEVNQUMpIFNwZWVkLiAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19GRCAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxICkgIC8qIChFTUFDKSBGdWxsIGR1cGxleC4gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfSkZSQU1FICAgICAgICAgICAgICAgKCAweDEgPDwgMyApICAvKiAoRU1BQykgSnVtYm8gRnJhbWVzLiAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19DQUYgICAgICAgICAgICAgICAgICAoIDB4MSA8PCA0ICkgIC8qIChFTUFDKSBDb3B5IGFsbCBmcmFtZXMuICovDQotI2RlZmluZSBBVDkxQ19FTUFDX05CQyAgICAgICAgICAgICAgICAgICggMHgxIDw8IDUgKSAgLyogKEVNQUMpIE5vIGJyb2FkY2FzdC4gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfTVRJICAgICAgICAgICAgICAgICAgKCAweDEgPDwgNiApICAvKiAoRU1BQykgTXVsdGljYXN0IGhhc2ggZXZlbnQgZW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1VOSSAgICAgICAgICAgICAgICAgICggMHgxIDw8IDcgKSAgLyogKEVNQUMpIFVuaWNhc3QgaGFzaCBlbmFibGUuICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0JJRyAgICAgICAgICAgICAgICAgICggMHgxIDw8IDggKSAgLyogKEVNQUMpIFJlY2VpdmUgMTUyMiBieXRlcy4gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfRUFFICAgICAgICAgICAgICAgICAgKCAweDEgPDwgOSApICAvKiAoRU1BQykgRXh0ZXJuYWwgYWRkcmVzcyBtYXRjaCBlbmFibGUuICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0NMSyAgICAgICAgICAgICAgICAgICggMHgzIDw8IDEwICkgLyogKEVNQUMpICovDQotI2RlZmluZSAgICAgQVQ5MUNfRU1BQ19DTEtfSENMS184ICAgICAgICggMHgwIDw8IDEwICkgLyogKEVNQUMpIEhDTEsgZGl2aWRlZCBieSA4ICovDQotI2RlZmluZSAgICAgQVQ5MUNfRU1BQ19DTEtfSENMS18xNiAgICAgICggMHgxIDw8IDEwICkgLyogKEVNQUMpIEhDTEsgZGl2aWRlZCBieSAxNiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0VNQUNfQ0xLX0hDTEtfMzIgICAgICAoIDB4MiA8PCAxMCApIC8qIChFTUFDKSBIQ0xLIGRpdmlkZWQgYnkgMzIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19FTUFDX0NMS19IQ0xLXzY0ICAgICAgKCAweDMgPDwgMTAgKSAvKiAoRU1BQykgSENMSyBkaXZpZGVkIGJ5IDY0ICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1JUWSAgICAgICAgICAgICAgICAgICggMHgxIDw8IDEyICkgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1BBRSAgICAgICAgICAgICAgICAgICggMHgxIDw8IDEzICkgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1JCT0YgICAgICAgICAgICAgICAgICggMHgzIDw8IDE0ICkgLyogKEVNQUMpICovDQotI2RlZmluZSAgICAgQVQ5MUNfRU1BQ19SQk9GX09GRlNFVF8wICAgICggMHgwIDw8IDE0ICkgLyogKEVNQUMpIG5vIG9mZnNldCBmcm9tIHN0YXJ0IG9mIHJlY2VpdmUgYnVmZmVyICovDQotI2RlZmluZSAgICAgQVQ5MUNfRU1BQ19SQk9GX09GRlNFVF8xICAgICggMHgxIDw8IDE0ICkgLyogKEVNQUMpIG9uZSBieXRlIG9mZnNldCBmcm9tIHN0YXJ0IG9mIHJlY2VpdmUgYnVmZmVyICovDQotI2RlZmluZSAgICAgQVQ5MUNfRU1BQ19SQk9GX09GRlNFVF8yICAgICggMHgyIDw8IDE0ICkgLyogKEVNQUMpIHR3byBieXRlcyBvZmZzZXQgZnJvbSBzdGFydCBvZiByZWNlaXZlIGJ1ZmZlciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0VNQUNfUkJPRl9PRkZTRVRfMyAgICAoIDB4MyA8PCAxNCApIC8qIChFTUFDKSB0aHJlZSBieXRlcyBvZmZzZXQgZnJvbSBzdGFydCBvZiByZWNlaXZlIGJ1ZmZlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19STENFICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxNiApIC8qIChFTUFDKSBSZWNlaXZlIExlbmd0aCBmaWVsZCBDaGVja2luZyBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfRFJGQ1MgICAgICAgICAgICAgICAgKCAweDEgPDwgMTcgKSAvKiAoRU1BQykgRGlzY2FyZCBSZWNlaXZlIEZDUyAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19FRlJIRCAgICAgICAgICAgICAgICAoIDB4MSA8PCAxOCApIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19JUlhGQ1MgICAgICAgICAgICAgICAoIDB4MSA8PCAxOSApIC8qIChFTUFDKSBJZ25vcmUgUlggRkNTICovDQotLyogLS0tLS0tLS0gRU1BQ19OU1IgOiAoRU1BQyBPZmZzZXQ6IDB4OCkgTmV0d29yayBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfTElOS1IgICAgICAgICAgICAgICAgKCAweDEgPDwgMCApICAvKiAoRU1BQykgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfTURJTyAgICAgICAgICAgICAgICAgKCAweDEgPDwgMSApICAvKiAoRU1BQykgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfSURMRSAgICAgICAgICAgICAgICAgKCAweDEgPDwgMiApICAvKiAoRU1BQykgKi8NCi0vKiAtLS0tLS0tLSBFTUFDX1RTUiA6IChFTUFDIE9mZnNldDogMHgxNCkgVHJhbnNtaXQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1VCUiAgICAgICAgICAgICAgICAgICggMHgxIDw8IDAgKSAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0NPTCAgICAgICAgICAgICAgICAgICggMHgxIDw8IDEgKSAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1JMRVMgICAgICAgICAgICAgICAgICggMHgxIDw8IDIgKSAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1RHTyAgICAgICAgICAgICAgICAgICggMHgxIDw8IDMgKSAgLyogKEVNQUMpIFRyYW5zbWl0IEdvICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0JFWCAgICAgICAgICAgICAgICAgICggMHgxIDw8IDQgKSAgLyogKEVNQUMpIEJ1ZmZlcnMgZXhoYXVzdGVkIG1pZCBmcmFtZSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19DT01QICAgICAgICAgICAgICAgICAoIDB4MSA8PCA1ICkgIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19VTkQgICAgICAgICAgICAgICAgICAoIDB4MSA8PCA2ICkgIC8qIChFTUFDKSAqLw0KLS8qIC0tLS0tLS0tIEVNQUNfUlNSIDogKEVNQUMgT2Zmc2V0OiAweDIwKSBSZWNlaXZlIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19CTkEgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAwICkgIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19SRUMgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxICkgIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19PVlIgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAyICkgIC8qIChFTUFDKSAqLw0KLS8qIC0tLS0tLS0tIEVNQUNfSVNSIDogKEVNQUMgT2Zmc2V0OiAweDI0KSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19FTUFDX01GRCAgICAgICAgICAgICAgICAgICggMHgxIDw8IDAgKSAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1JDT01QICAgICAgICAgICAgICAgICggMHgxIDw8IDEgKSAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1JYVUJSICAgICAgICAgICAgICAgICggMHgxIDw8IDIgKSAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1RYVUJSICAgICAgICAgICAgICAgICggMHgxIDw8IDMgKSAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1RVTkRSICAgICAgICAgICAgICAgICggMHgxIDw8IDQgKSAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1JMRVggICAgICAgICAgICAgICAgICggMHgxIDw8IDUgKSAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1RYRVJSICAgICAgICAgICAgICAgICggMHgxIDw8IDYgKSAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1RDT01QICAgICAgICAgICAgICAgICggMHgxIDw8IDcgKSAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0xJTksgICAgICAgICAgICAgICAgICggMHgxIDw8IDkgKSAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1JPVlIgICAgICAgICAgICAgICAgICggMHgxIDw8IDEwICkgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0hSRVNQICAgICAgICAgICAgICAgICggMHgxIDw8IDExICkgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1BGUkUgICAgICAgICAgICAgICAgICggMHgxIDw8IDEyICkgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1BUWiAgICAgICAgICAgICAgICAgICggMHgxIDw8IDEzICkgLyogKEVNQUMpICovDQotLyogLS0tLS0tLS0gRU1BQ19JRVIgOiAoRU1BQyBPZmZzZXQ6IDB4MjgpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBFTUFDX0lEUiA6IChFTUFDIE9mZnNldDogMHgyYykgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBFTUFDX0lNUiA6IChFTUFDIE9mZnNldDogMHgzMCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBFTUFDX01BTiA6IChFTUFDIE9mZnNldDogMHgzNCkgUEhZIE1haW50ZW5hbmNlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0RBVEEgICAgICAgKCAweEZGRkYgPDwgMCApICAvKiAoRU1BQykgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfQ09ERSAgICAgICAoIDB4MyA8PCAxNiApICAgIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19SRUdBICAgICAgICggMHgxRiA8PCAxOCApICAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1BIWUEgICAgICAgKCAweDFGIDw8IDIzICkgICAvKiAoRU1BQykgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfUlcgICAgICAgICAoIDB4MyA8PCAyOCApICAgIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19TT0YgICAgICAgICggMHgzIDw8IDMwICkgICAgLyogKEVNQUMpICovDQotLyogLS0tLS0tLS0gRU1BQ19VU1JJTyA6IChFTUFDIE9mZnNldDogMHhjMCkgVVNFUiBJbnB1dCBPdXRwdXQgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfUk1JSSAgICAgICAoIDB4MSA8PCAwICkgICAgIC8qIChFTUFDKSBSZWR1Y2UgTUlJICovDQotLyogLS0tLS0tLS0gRU1BQ19XT0wgOiAoRU1BQyBPZmZzZXQ6IDB4YzQpIFdha2UgT24gTEFOIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0lQICAgICAgICAgKCAweEZGRkYgPDwgMCApICAvKiAoRU1BQykgQVJQIHJlcXVlc3QgSVAgYWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19NQUcgICAgICAgICggMHgxIDw8IDE2ICkgICAgLyogKEVNQUMpIE1hZ2ljIHBhY2tldCBldmVudCBlbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfQVJQICAgICAgICAoIDB4MSA8PCAxNyApICAgIC8qIChFTUFDKSBBUlAgcmVxdWVzdCBldmVudCBlbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfU0ExICAgICAgICAoIDB4MSA8PCAxOCApICAgIC8qIChFTUFDKSBTcGVjaWZpYyBhZGRyZXNzIHJlZ2lzdGVyIDEgZXZlbnQgZW5hYmxlICovDQotLyogLS0tLS0tLS0gRU1BQ19SRVYgOiAoRU1BQyBPZmZzZXQ6IDB4ZmMpIFJldmlzaW9uIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1JFVlJFRiAgICAgKCAweEZGRkYgPDwgMCApICAvKiAoRU1BQykgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfUEFSVFJFRiAgICAoIDB4RkZGRiA8PCAxNiApIC8qIChFTUFDKSAqLw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgRXRoZXJuZXQgTUFDIDEwLzEwMA0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19FTUFDIHN0cnVjdHVyZSAqKioNCisjZGVmaW5lIEVNQUNfTkNSICAgICAgICAoIDApIC8vIE5ldHdvcmsgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgRU1BQ19OQ0ZHUiAgICAgICggNCkgLy8gTmV0d29yayBDb25maWd1cmF0aW9uIFJlZ2lzdGVyDQorI2RlZmluZSBFTUFDX05TUiAgICAgICAgKCA4KSAvLyBOZXR3b3JrIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgRU1BQ19UU1IgICAgICAgICgyMCkgLy8gVHJhbnNtaXQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBFTUFDX1JCUVAgICAgICAgKDI0KSAvLyBSZWNlaXZlIEJ1ZmZlciBRdWV1ZSBQb2ludGVyDQorI2RlZmluZSBFTUFDX1RCUVAgICAgICAgKDI4KSAvLyBUcmFuc21pdCBCdWZmZXIgUXVldWUgUG9pbnRlcg0KKyNkZWZpbmUgRU1BQ19SU1IgICAgICAgICgzMikgLy8gUmVjZWl2ZSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEVNQUNfSVNSICAgICAgICAoMzYpIC8vIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEVNQUNfSUVSICAgICAgICAoNDApIC8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEVNQUNfSURSICAgICAgICAoNDQpIC8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBFTUFDX0lNUiAgICAgICAgKDQ4KSAvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgRU1BQ19NQU4gICAgICAgICg1MikgLy8gUEhZIE1haW50ZW5hbmNlIFJlZ2lzdGVyDQorI2RlZmluZSBFTUFDX1BUUiAgICAgICAgKDU2KSAvLyBQYXVzZSBUaW1lIFJlZ2lzdGVyDQorI2RlZmluZSBFTUFDX1BGUiAgICAgICAgKDYwKSAvLyBQYXVzZSBGcmFtZXMgcmVjZWl2ZWQgUmVnaXN0ZXINCisjZGVmaW5lIEVNQUNfRlRPICAgICAgICAoNjQpIC8vIEZyYW1lcyBUcmFuc21pdHRlZCBPSyBSZWdpc3Rlcg0KKyNkZWZpbmUgRU1BQ19TQ0YgICAgICAgICg2OCkgLy8gU2luZ2xlIENvbGxpc2lvbiBGcmFtZSBSZWdpc3Rlcg0KKyNkZWZpbmUgRU1BQ19NQ0YgICAgICAgICg3MikgLy8gTXVsdGlwbGUgQ29sbGlzaW9uIEZyYW1lIFJlZ2lzdGVyDQorI2RlZmluZSBFTUFDX0ZSTyAgICAgICAgKDc2KSAvLyBGcmFtZXMgUmVjZWl2ZWQgT0sgUmVnaXN0ZXINCisjZGVmaW5lIEVNQUNfRkNTRSAgICAgICAoODApIC8vIEZyYW1lIENoZWNrIFNlcXVlbmNlIEVycm9yIFJlZ2lzdGVyDQorI2RlZmluZSBFTUFDX0FMRSAgICAgICAgKDg0KSAvLyBBbGlnbm1lbnQgRXJyb3IgUmVnaXN0ZXINCisjZGVmaW5lIEVNQUNfRFRGICAgICAgICAoODgpIC8vIERlZmVycmVkIFRyYW5zbWlzc2lvbiBGcmFtZSBSZWdpc3Rlcg0KKyNkZWZpbmUgRU1BQ19MQ09MICAgICAgICg5MikgLy8gTGF0ZSBDb2xsaXNpb24gUmVnaXN0ZXINCisjZGVmaW5lIEVNQUNfRUNPTCAgICAgICAoOTYpIC8vIEV4Y2Vzc2l2ZSBDb2xsaXNpb24gUmVnaXN0ZXINCisjZGVmaW5lIEVNQUNfVFVORCAgICAgICAoMTAwKSAvLyBUcmFuc21pdCBVbmRlcnJ1biBFcnJvciBSZWdpc3Rlcg0KKyNkZWZpbmUgRU1BQ19DU0UgICAgICAgICgxMDQpIC8vIENhcnJpZXIgU2Vuc2UgRXJyb3IgUmVnaXN0ZXINCisjZGVmaW5lIEVNQUNfUlJFICAgICAgICAoMTA4KSAvLyBSZWNlaXZlIFJlc3NvdXJjZSBFcnJvciBSZWdpc3Rlcg0KKyNkZWZpbmUgRU1BQ19ST1YgICAgICAgICgxMTIpIC8vIFJlY2VpdmUgT3ZlcnJ1biBFcnJvcnMgUmVnaXN0ZXINCisjZGVmaW5lIEVNQUNfUlNFICAgICAgICAoMTE2KSAvLyBSZWNlaXZlIFN5bWJvbCBFcnJvcnMgUmVnaXN0ZXINCisjZGVmaW5lIEVNQUNfRUxFICAgICAgICAoMTIwKSAvLyBFeGNlc3NpdmUgTGVuZ3RoIEVycm9ycyBSZWdpc3Rlcg0KKyNkZWZpbmUgRU1BQ19SSkEgICAgICAgICgxMjQpIC8vIFJlY2VpdmUgSmFiYmVycyBSZWdpc3Rlcg0KKyNkZWZpbmUgRU1BQ19VU0YgICAgICAgICgxMjgpIC8vIFVuZGVyc2l6ZSBGcmFtZXMgUmVnaXN0ZXINCisjZGVmaW5lIEVNQUNfU1RFICAgICAgICAoMTMyKSAvLyBTUUUgVGVzdCBFcnJvciBSZWdpc3Rlcg0KKyNkZWZpbmUgRU1BQ19STEUgICAgICAgICgxMzYpIC8vIFJlY2VpdmUgTGVuZ3RoIEZpZWxkIE1pc21hdGNoIFJlZ2lzdGVyDQorI2RlZmluZSBFTUFDX1RQRiAgICAgICAgKDE0MCkgLy8gVHJhbnNtaXR0ZWQgUGF1c2UgRnJhbWVzIFJlZ2lzdGVyDQorI2RlZmluZSBFTUFDX0hSQiAgICAgICAgKDE0NCkgLy8gSGFzaCBBZGRyZXNzIEJvdHRvbVszMTowXQ0KKyNkZWZpbmUgRU1BQ19IUlQgICAgICAgICgxNDgpIC8vIEhhc2ggQWRkcmVzcyBUb3BbNjM6MzJdDQorI2RlZmluZSBFTUFDX1NBMUwgICAgICAgKDE1MikgLy8gU3BlY2lmaWMgQWRkcmVzcyAxIEJvdHRvbSwgRmlyc3QgNCBieXRlcw0KKyNkZWZpbmUgRU1BQ19TQTFIICAgICAgICgxNTYpIC8vIFNwZWNpZmljIEFkZHJlc3MgMSBUb3AsIExhc3QgMiBieXRlcw0KKyNkZWZpbmUgRU1BQ19TQTJMICAgICAgICgxNjApIC8vIFNwZWNpZmljIEFkZHJlc3MgMiBCb3R0b20sIEZpcnN0IDQgYnl0ZXMNCisjZGVmaW5lIEVNQUNfU0EySCAgICAgICAoMTY0KSAvLyBTcGVjaWZpYyBBZGRyZXNzIDIgVG9wLCBMYXN0IDIgYnl0ZXMNCisjZGVmaW5lIEVNQUNfU0EzTCAgICAgICAoMTY4KSAvLyBTcGVjaWZpYyBBZGRyZXNzIDMgQm90dG9tLCBGaXJzdCA0IGJ5dGVzDQorI2RlZmluZSBFTUFDX1NBM0ggICAgICAgKDE3MikgLy8gU3BlY2lmaWMgQWRkcmVzcyAzIFRvcCwgTGFzdCAyIGJ5dGVzDQorI2RlZmluZSBFTUFDX1NBNEwgICAgICAgKDE3NikgLy8gU3BlY2lmaWMgQWRkcmVzcyA0IEJvdHRvbSwgRmlyc3QgNCBieXRlcw0KKyNkZWZpbmUgRU1BQ19TQTRIICAgICAgICgxODApIC8vIFNwZWNpZmljIEFkZHJlc3MgNCBUb3AsIExhc3QgMiBieXRlcw0KKyNkZWZpbmUgRU1BQ19USUQgICAgICAgICgxODQpIC8vIFR5cGUgSUQgQ2hlY2tpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEVNQUNfVFBRICAgICAgICAoMTg4KSAvLyBUcmFuc21pdCBQYXVzZSBRdWFudHVtIFJlZ2lzdGVyDQorI2RlZmluZSBFTUFDX1VTUklPICAgICAgKDE5MikgLy8gVVNFUiBJbnB1dC9PdXRwdXQgUmVnaXN0ZXINCisjZGVmaW5lIEVNQUNfV09MICAgICAgICAoMTk2KSAvLyBXYWtlIE9uIExBTiBSZWdpc3Rlcg0KKyNkZWZpbmUgRU1BQ19SRVYgICAgICAgICgyNTIpIC8vIFJldmlzaW9uIFJlZ2lzdGVyDQorLy8gLS0tLS0tLS0gRU1BQ19OQ1IgOiAoRU1BQyBPZmZzZXQ6IDB4MCkgIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19MQiAgICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoRU1BQykgTG9vcGJhY2suIE9wdGlvbmFsLiBXaGVuIHNldCwgbG9vcGJhY2sgc2lnbmFsIGlzIGF0IGhpZ2ggbGV2ZWwuDQorI2RlZmluZSBBVDkxQ19FTUFDX0xMQiAgICAgICAgICAgICgweDEgPDwgIDEpIC8vIChFTUFDKSBMb29wYmFjayBsb2NhbC4gDQorI2RlZmluZSBBVDkxQ19FTUFDX1JFICAgICAgICAgICAgICgweDEgPDwgIDIpIC8vIChFTUFDKSBSZWNlaXZlIGVuYWJsZS4gDQorI2RlZmluZSBBVDkxQ19FTUFDX1RFICAgICAgICAgICAgICgweDEgPDwgIDMpIC8vIChFTUFDKSBUcmFuc21pdCBlbmFibGUuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19NUEUgICAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoRU1BQykgTWFuYWdlbWVudCBwb3J0IGVuYWJsZS4gDQorI2RlZmluZSBBVDkxQ19FTUFDX0NMUlNUQVQgICAgICAgICgweDEgPDwgIDUpIC8vIChFTUFDKSBDbGVhciBzdGF0aXN0aWNzIHJlZ2lzdGVycy4gDQorI2RlZmluZSBBVDkxQ19FTUFDX0lOQ1NUQVQgICAgICAgICgweDEgPDwgIDYpIC8vIChFTUFDKSBJbmNyZW1lbnQgc3RhdGlzdGljcyByZWdpc3RlcnMuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19XRVNUQVQgICAgICAgICAoMHgxIDw8ICA3KSAvLyAoRU1BQykgV3JpdGUgZW5hYmxlIGZvciBzdGF0aXN0aWNzIHJlZ2lzdGVycy4gDQorI2RlZmluZSBBVDkxQ19FTUFDX0JQICAgICAgICAgICAgICgweDEgPDwgIDgpIC8vIChFTUFDKSBCYWNrIHByZXNzdXJlLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfVFNUQVJUICAgICAgICAgKDB4MSA8PCAgOSkgLy8gKEVNQUMpIFN0YXJ0IFRyYW5zbWlzc2lvbi4gDQorI2RlZmluZSBBVDkxQ19FTUFDX1RIQUxUICAgICAgICAgICgweDEgPDwgMTApIC8vIChFTUFDKSBUcmFuc21pc3Npb24gSGFsdC4gDQorI2RlZmluZSBBVDkxQ19FTUFDX1RQRlIgICAgICAgICAgICgweDEgPDwgMTEpIC8vIChFTUFDKSBUcmFuc21pdCBwYXVzZSBmcmFtZSANCisjZGVmaW5lIEFUOTFDX0VNQUNfVFpRICAgICAgICAgICAgKDB4MSA8PCAxMikgLy8gKEVNQUMpIFRyYW5zbWl0IHplcm8gcXVhbnR1bSBwYXVzZSBmcmFtZQ0KKy8vIC0tLS0tLS0tIEVNQUNfTkNGR1IgOiAoRU1BQyBPZmZzZXQ6IDB4NCkgTmV0d29yayBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TUEQgICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoRU1BQykgU3BlZWQuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19GRCAgICAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoRU1BQykgRnVsbCBkdXBsZXguIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19KRlJBTUUgICAgICAgICAoMHgxIDw8ICAzKSAvLyAoRU1BQykgSnVtYm8gRnJhbWVzLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfQ0FGICAgICAgICAgICAgKDB4MSA8PCAgNCkgLy8gKEVNQUMpIENvcHkgYWxsIGZyYW1lcy4gDQorI2RlZmluZSBBVDkxQ19FTUFDX05CQyAgICAgICAgICAgICgweDEgPDwgIDUpIC8vIChFTUFDKSBObyBicm9hZGNhc3QuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19NVEkgICAgICAgICAgICAoMHgxIDw8ICA2KSAvLyAoRU1BQykgTXVsdGljYXN0IGhhc2ggZXZlbnQgZW5hYmxlDQorI2RlZmluZSBBVDkxQ19FTUFDX1VOSSAgICAgICAgICAgICgweDEgPDwgIDcpIC8vIChFTUFDKSBVbmljYXN0IGhhc2ggZW5hYmxlLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfQklHICAgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKEVNQUMpIFJlY2VpdmUgMTUyMiBieXRlcy4gDQorI2RlZmluZSBBVDkxQ19FTUFDX0VBRSAgICAgICAgICAgICgweDEgPDwgIDkpIC8vIChFTUFDKSBFeHRlcm5hbCBhZGRyZXNzIG1hdGNoIGVuYWJsZS4gDQorI2RlZmluZSBBVDkxQ19FTUFDX0NMSyAgICAgICAgICAgICgweDMgPDwgMTApIC8vIChFTUFDKSANCisjZGVmaW5lIAlBVDkxQ19FTUFDX0NMS19IQ0xLXzggICAgICAgICAgICAgICAoMHgwIDw8IDEwKSAvLyAoRU1BQykgSENMSyBkaXZpZGVkIGJ5IDgNCisjZGVmaW5lIAlBVDkxQ19FTUFDX0NMS19IQ0xLXzE2ICAgICAgICAgICAgICAoMHgxIDw8IDEwKSAvLyAoRU1BQykgSENMSyBkaXZpZGVkIGJ5IDE2DQorI2RlZmluZSAJQVQ5MUNfRU1BQ19DTEtfSENMS18zMiAgICAgICAgICAgICAgKDB4MiA8PCAxMCkgLy8gKEVNQUMpIEhDTEsgZGl2aWRlZCBieSAzMg0KKyNkZWZpbmUgCUFUOTFDX0VNQUNfQ0xLX0hDTEtfNjQgICAgICAgICAgICAgICgweDMgPDwgMTApIC8vIChFTUFDKSBIQ0xLIGRpdmlkZWQgYnkgNjQNCisjZGVmaW5lIEFUOTFDX0VNQUNfUlRZICAgICAgICAgICAgKDB4MSA8PCAxMikgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19QQUUgICAgICAgICAgICAoMHgxIDw8IDEzKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1JCT0YgICAgICAgICAgICgweDMgPDwgMTQpIC8vIChFTUFDKSANCisjZGVmaW5lIAlBVDkxQ19FTUFDX1JCT0ZfT0ZGU0VUXzAgICAgICAgICAgICAgKDB4MCA8PCAxNCkgLy8gKEVNQUMpIG5vIG9mZnNldCBmcm9tIHN0YXJ0IG9mIHJlY2VpdmUgYnVmZmVyDQorI2RlZmluZSAJQVQ5MUNfRU1BQ19SQk9GX09GRlNFVF8xICAgICAgICAgICAgICgweDEgPDwgMTQpIC8vIChFTUFDKSBvbmUgYnl0ZSBvZmZzZXQgZnJvbSBzdGFydCBvZiByZWNlaXZlIGJ1ZmZlcg0KKyNkZWZpbmUgCUFUOTFDX0VNQUNfUkJPRl9PRkZTRVRfMiAgICAgICAgICAgICAoMHgyIDw8IDE0KSAvLyAoRU1BQykgdHdvIGJ5dGVzIG9mZnNldCBmcm9tIHN0YXJ0IG9mIHJlY2VpdmUgYnVmZmVyDQorI2RlZmluZSAJQVQ5MUNfRU1BQ19SQk9GX09GRlNFVF8zICAgICAgICAgICAgICgweDMgPDwgMTQpIC8vIChFTUFDKSB0aHJlZSBieXRlcyBvZmZzZXQgZnJvbSBzdGFydCBvZiByZWNlaXZlIGJ1ZmZlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19STENFICAgICAgICAgICAoMHgxIDw8IDE2KSAvLyAoRU1BQykgUmVjZWl2ZSBMZW5ndGggZmllbGQgQ2hlY2tpbmcgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19FTUFDX0RSRkNTICAgICAgICAgICgweDEgPDwgMTcpIC8vIChFTUFDKSBEaXNjYXJkIFJlY2VpdmUgRkNTDQorI2RlZmluZSBBVDkxQ19FTUFDX0VGUkhEICAgICAgICAgICgweDEgPDwgMTgpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfSVJYRkNTICAgICAgICAgKDB4MSA8PCAxOSkgLy8gKEVNQUMpIElnbm9yZSBSWCBGQ1MNCisvLyAtLS0tLS0tLSBFTUFDX05TUiA6IChFTUFDIE9mZnNldDogMHg4KSBOZXR3b3JrIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0VNQUNfTElOS1IgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19NRElPICAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX0lETEUgICAgICAgICAgICgweDEgPDwgIDIpIC8vIChFTUFDKSANCisvLyAtLS0tLS0tLSBFTUFDX1RTUiA6IChFTUFDIE9mZnNldDogMHgxNCkgVHJhbnNtaXQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19VQlIgICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX0NPTCAgICAgICAgICAgICgweDEgPDwgIDEpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUkxFUyAgICAgICAgICAgKDB4MSA8PCAgMikgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19UR08gICAgICAgICAgICAoMHgxIDw8ICAzKSAvLyAoRU1BQykgVHJhbnNtaXQgR28NCisjZGVmaW5lIEFUOTFDX0VNQUNfQkVYICAgICAgICAgICAgKDB4MSA8PCAgNCkgLy8gKEVNQUMpIEJ1ZmZlcnMgZXhoYXVzdGVkIG1pZCBmcmFtZQ0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19DT01QICAgICAgICAgICAoMHgxIDw8ICA1KSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1VORCAgICAgICAgICAgICgweDEgPDwgIDYpIC8vIChFTUFDKSANCisvLyAtLS0tLS0tLSBFTUFDX1JTUiA6IChFTUFDIE9mZnNldDogMHgyMCkgUmVjZWl2ZSBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19FTUFDX0JOQSAgICAgICAgICAgICgweDEgPDwgIDApIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUkVDICAgICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19PVlIgICAgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoRU1BQykgDQorLy8gLS0tLS0tLS0gRU1BQ19JU1IgOiAoRU1BQyBPZmZzZXQ6IDB4MjQpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19FTUFDX01GRCAgICAgICAgICAgICgweDEgPDwgIDApIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUkNPTVAgICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SWFVCUiAgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1RYVUJSICAgICAgICAgICgweDEgPDwgIDMpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfVFVORFIgICAgICAgICAgKDB4MSA8PCAgNCkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19STEVYICAgICAgICAgICAoMHgxIDw8ICA1KSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1RYRVJSICAgICAgICAgICgweDEgPDwgIDYpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfVENPTVAgICAgICAgICAgKDB4MSA8PCAgNykgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19MSU5LICAgICAgICAgICAoMHgxIDw8ICA5KSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1JPVlIgICAgICAgICAgICgweDEgPDwgMTApIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfSFJFU1AgICAgICAgICAgKDB4MSA8PCAxMSkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19QRlJFICAgICAgICAgICAoMHgxIDw8IDEyKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1BUWiAgICAgICAgICAgICgweDEgPDwgMTMpIC8vIChFTUFDKSANCisvLyAtLS0tLS0tLSBFTUFDX0lFUiA6IChFTUFDIE9mZnNldDogMHgyOCkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBFTUFDX0lEUiA6IChFTUFDIE9mZnNldDogMHgyYykgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gRU1BQ19JTVIgOiAoRU1BQyBPZmZzZXQ6IDB4MzApIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEVNQUNfTUFOIDogKEVNQUMgT2Zmc2V0OiAweDM0KSBQSFkgTWFpbnRlbmFuY2UgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19FTUFDX0RBVEEgICAgICAgICAgICgweEZGRkYgPDwgIDApIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfQ09ERSAgICAgICAgICAgKDB4MyA8PCAxNikgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SRUdBICAgICAgICAgICAoMHgxRiA8PCAxOCkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19QSFlBICAgICAgICAgICAoMHgxRiA8PCAyMykgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SVyAgICAgICAgICAgICAoMHgzIDw8IDI4KSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1NPRiAgICAgICAgICAgICgweDMgPDwgMzApIC8vIChFTUFDKSANCisvLyAtLS0tLS0tLSBFTUFDX1VTUklPIDogKEVNQUMgT2Zmc2V0OiAweGMwKSBVU0VSIElucHV0IE91dHB1dCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUk1JSSAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKEVNQUMpIFJlZHVjZSBNSUkNCisvLyAtLS0tLS0tLSBFTUFDX1dPTCA6IChFTUFDIE9mZnNldDogMHhjNCkgV2FrZSBPbiBMQU4gUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19FTUFDX0lQICAgICAgICAgICAgICgweEZGRkYgPDwgIDApIC8vIChFTUFDKSBBUlAgcmVxdWVzdCBJUCBhZGRyZXNzDQorI2RlZmluZSBBVDkxQ19FTUFDX01BRyAgICAgICAgICAgICgweDEgPDwgMTYpIC8vIChFTUFDKSBNYWdpYyBwYWNrZXQgZXZlbnQgZW5hYmxlDQorI2RlZmluZSBBVDkxQ19FTUFDX0FSUCAgICAgICAgICAgICgweDEgPDwgMTcpIC8vIChFTUFDKSBBUlAgcmVxdWVzdCBldmVudCBlbmFibGUNCisjZGVmaW5lIEFUOTFDX0VNQUNfU0ExICAgICAgICAgICAgKDB4MSA8PCAxOCkgLy8gKEVNQUMpIFNwZWNpZmljIGFkZHJlc3MgcmVnaXN0ZXIgMSBldmVudCBlbmFibGUNCisvLyAtLS0tLS0tLSBFTUFDX1JFViA6IChFTUFDIE9mZnNldDogMHhmYykgUmV2aXNpb24gUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19FTUFDX1JFVlJFRiAgICAgICAgICgweEZGRkYgPDwgIDApIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUEFSVFJFRiAgICAgICAgKDB4RkZGRiA8PCAxNikgLy8gKEVNQUMpIA0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQW5hbG9nIHRvIERpZ2l0YWwgQ29udmVydG9yICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX0FEQyBzdHJ1Y3R1cmUgKioqICovDQotI2RlZmluZSBBRENfQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMCApICAgICAgICAgIC8qIEFEQyBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBRENfTVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggNCApICAgICAgICAgIC8qIEFEQyBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBRENfQ0hFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICggMTYgKSAgICAgICAgIC8qIEFEQyBDaGFubmVsIEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQURDX0NIRFIgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDIwICkgICAgICAgICAvKiBBREMgQ2hhbm5lbCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBRENfQ0hTUiAgICAgICAgICAgICAgICAgICAgICAgICAgICggMjQgKSAgICAgICAgIC8qIEFEQyBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQURDX1NSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDI4ICkgICAgICAgICAvKiBBREMgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBRENfTENEUiAgICAgICAgICAgICAgICAgICAgICAgICAgICggMzIgKSAgICAgICAgIC8qIEFEQyBMYXN0IENvbnZlcnRlZCBEYXRhIFJlZ2lzdGVyICovDQotI2RlZmluZSBBRENfSUVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMzYgKSAgICAgICAgIC8qIEFEQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBRENfSURSICAgICAgICAgICAgICAgICAgICAgICAgICAgICggNDAgKSAgICAgICAgIC8qIEFEQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQURDX0lNUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDQ0ICkgICAgICAgICAvKiBBREMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFEQ19DRFIwICAgICAgICAgICAgICAgICAgICAgICAgICAgKCA0OCApICAgICAgICAgLyogQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAwICovDQotI2RlZmluZSBBRENfQ0RSMSAgICAgICAgICAgICAgICAgICAgICAgICAgICggNTIgKSAgICAgICAgIC8qIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMSAqLw0KLSNkZWZpbmUgQURDX0NEUjIgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDU2ICkgICAgICAgICAvKiBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDIgKi8NCi0jZGVmaW5lIEFEQ19DRFIzICAgICAgICAgICAgICAgICAgICAgICAgICAgKCA2MCApICAgICAgICAgLyogQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAzICovDQotI2RlZmluZSBBRENfQ0RSNCAgICAgICAgICAgICAgICAgICAgICAgICAgICggNjQgKSAgICAgICAgIC8qIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNCAqLw0KLSNkZWZpbmUgQURDX0NEUjUgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDY4ICkgICAgICAgICAvKiBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDUgKi8NCi0jZGVmaW5lIEFEQ19DRFI2ICAgICAgICAgICAgICAgICAgICAgICAgICAgKCA3MiApICAgICAgICAgLyogQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA2ICovDQotI2RlZmluZSBBRENfQ0RSNyAgICAgICAgICAgICAgICAgICAgICAgICAgICggNzYgKSAgICAgICAgIC8qIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNyAqLw0KLSNkZWZpbmUgQURDX1JQUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDI1NiApICAgICAgICAvKiBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFEQ19SQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAyNjAgKSAgICAgICAgLyogUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBRENfVFBSICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMjY0ICkgICAgICAgIC8qIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFEQ19UQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAyNjggKSAgICAgICAgLyogVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQURDX1JOUFIgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDI3MiApICAgICAgICAvKiBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQURDX1JOQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDI3NiApICAgICAgICAvKiBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQURDX1ROUFIgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDI4MCApICAgICAgICAvKiBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFEQ19UTkNSICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAyODQgKSAgICAgICAgLyogVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBRENfUFRDUiAgICAgICAgICAgICAgICAgICAgICAgICAgICggMjg4ICkgICAgICAgIC8qIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBRENfUFRTUiAgICAgICAgICAgICAgICAgICAgICAgICAgICggMjkyICkgICAgICAgIC8qIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0vKiAtLS0tLS0tLSBBRENfQ1IgOiAoQURDIE9mZnNldDogMHgwKSBBREMgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1NXUlNUICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAwICkgICAvKiAoQURDKSBTb2Z0d2FyZSBSZXNldCAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1NUQVJUICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxICkgICAvKiAoQURDKSBTdGFydCBDb252ZXJzaW9uICovDQotLyogLS0tLS0tLS0gQURDX01SIDogKEFEQyBPZmZzZXQ6IDB4NCkgQURDIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19UUkdFTiAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMCApICAgLyogKEFEQykgVHJpZ2dlciBFbmFibGUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRENfVFJHRU5fRElTICAgICAgICAgICAgKCAweDAgKSAgICAgICAgLyogKEFEQykgSHJhZHdhcmUgdHJpZ2dlcnMgYXJlIGRpc2FibGVkLiBTdGFydGluZyBhIGNvbnZlcnNpb24gaXMgb25seSBwb3NzaWJsZSBieSBzb2Z0d2FyZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FEQ19UUkdFTl9FTiAgICAgICAgICAgICAoIDB4MSApICAgICAgICAvKiAoQURDKSBIYXJkd2FyZSB0cmlnZ2VyIHNlbGVjdGVkIGJ5IFRSR1NFTCBmaWVsZCBpcyBlbmFibGVkLiAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1RSR1NFTCAgICAgICAgICAgICAgICAgICAoIDB4NyA8PCAxICkgICAvKiAoQURDKSBUcmlnZ2VyIFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FEQ19UUkdTRUxfVElPQTAgICAgICAgICAoIDB4MCA8PCAxICkgICAvKiAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPMCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FEQ19UUkdTRUxfVElPQTEgICAgICAgICAoIDB4MSA8PCAxICkgICAvKiAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPMSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FEQ19UUkdTRUxfVElPQTIgICAgICAgICAoIDB4MiA8PCAxICkgICAvKiAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPMiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FEQ19UUkdTRUxfVElPQTMgICAgICAgICAoIDB4MyA8PCAxICkgICAvKiAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPMyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FEQ19UUkdTRUxfVElPQTQgICAgICAgICAoIDB4NCA8PCAxICkgICAvKiAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPNCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FEQ19UUkdTRUxfVElPQTUgICAgICAgICAoIDB4NSA8PCAxICkgICAvKiAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPNSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FEQ19UUkdTRUxfRVhUICAgICAgICAgICAoIDB4NiA8PCAxICkgICAvKiAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBFeHRlcm5hbCBUcmlnZ2VyICovDQotI2RlZmluZSBBVDkxQ19BRENfTE9XUkVTICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDQgKSAgIC8qIChBREMpIFJlc29sdXRpb24uICovDQotI2RlZmluZSAgICAgQVQ5MUNfQURDX0xPV1JFU18xMF9CSVQgICAgICAgICggMHgwIDw8IDQgKSAgIC8qIChBREMpIDEwLWJpdCByZXNvbHV0aW9uICovDQotI2RlZmluZSAgICAgQVQ5MUNfQURDX0xPV1JFU184X0JJVCAgICAgICAgICggMHgxIDw8IDQgKSAgIC8qIChBREMpIDgtYml0IHJlc29sdXRpb24gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19TTEVFUCAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgNSApICAgLyogKEFEQykgU2xlZXAgTW9kZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FEQ19TTEVFUF9OT1JNQUxfTU9ERSAgICAoIDB4MCA8PCA1ICkgICAvKiAoQURDKSBOb3JtYWwgTW9kZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FEQ19TTEVFUF9NT0RFICAgICAgICAgICAoIDB4MSA8PCA1ICkgICAvKiAoQURDKSBTbGVlcCBNb2RlICovDQotI2RlZmluZSBBVDkxQ19BRENfUFJFU0NBTCAgICAgICAgICAgICAgICAgICggMHgzRiA8PCA4ICkgIC8qIChBREMpIFByZXNjYWxlciByYXRlIHNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1NUQVJUVVAgICAgICAgICAgICAgICAgICAoIDB4MUYgPDwgMTYgKSAvKiAoQURDKSBTdGFydHVwIFRpbWUgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19TSFRJTSAgICAgICAgICAgICAgICAgICAgKCAweEYgPDwgMjQgKSAgLyogKEFEQykgU2FtcGxlICYgSG9sZCBUaW1lICovDQotLyogLS0tLS0tLS0gICAgIEFEQ19DSEVSIDogKEFEQyBPZmZzZXQ6IDB4MTApIEFEQyBDaGFubmVsIEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NIMCAgICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAwICkgICAvKiAoQURDKSBDaGFubmVsIDAgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DSDEgICAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMSApICAgLyogKEFEQykgQ2hhbm5lbCAxICovDQotI2RlZmluZSBBVDkxQ19BRENfQ0gyICAgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDIgKSAgIC8qIChBREMpIENoYW5uZWwgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NIMyAgICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAzICkgICAvKiAoQURDKSBDaGFubmVsIDMgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DSDQgICAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgNCApICAgLyogKEFEQykgQ2hhbm5lbCA0ICovDQotI2RlZmluZSBBVDkxQ19BRENfQ0g1ICAgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDUgKSAgIC8qIChBREMpIENoYW5uZWwgNSAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NINiAgICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCA2ICkgICAvKiAoQURDKSBDaGFubmVsIDYgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DSDcgICAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgNyApICAgLyogKEFEQykgQ2hhbm5lbCA3ICovDQotLyogLS0tLS0tLS0gICAgIEFEQ19DSERSIDogKEFEQyBPZmZzZXQ6IDB4MTQpIEFEQyBDaGFubmVsIERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSAgICAgQURDX0NIU1IgOiAoQURDIE9mZnNldDogMHgxOCkgQURDIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQURDX1NSIDogKEFEQyBPZmZzZXQ6IDB4MWMpIEFEQyBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19FT0MwICAgICAgKCAweDEgPDwgMCApICAgICAgLyogKEFEQykgRW5kIG9mIENvbnZlcnNpb24gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19FT0MxICAgICAgKCAweDEgPDwgMSApICAgICAgLyogKEFEQykgRW5kIG9mIENvbnZlcnNpb24gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19FT0MyICAgICAgKCAweDEgPDwgMiApICAgICAgLyogKEFEQykgRW5kIG9mIENvbnZlcnNpb24gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19FT0MzICAgICAgKCAweDEgPDwgMyApICAgICAgLyogKEFEQykgRW5kIG9mIENvbnZlcnNpb24gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19FT0M0ICAgICAgKCAweDEgPDwgNCApICAgICAgLyogKEFEQykgRW5kIG9mIENvbnZlcnNpb24gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19FT0M1ICAgICAgKCAweDEgPDwgNSApICAgICAgLyogKEFEQykgRW5kIG9mIENvbnZlcnNpb24gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19FT0M2ICAgICAgKCAweDEgPDwgNiApICAgICAgLyogKEFEQykgRW5kIG9mIENvbnZlcnNpb24gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19FT0M3ICAgICAgKCAweDEgPDwgNyApICAgICAgLyogKEFEQykgRW5kIG9mIENvbnZlcnNpb24gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19PVlJFMCAgICAgKCAweDEgPDwgOCApICAgICAgLyogKEFEQykgT3ZlcnJ1biBFcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX09WUkUxICAgICAoIDB4MSA8PCA5ICkgICAgICAvKiAoQURDKSBPdmVycnVuIEVycm9yICovDQotI2RlZmluZSBBVDkxQ19BRENfT1ZSRTIgICAgICggMHgxIDw8IDEwICkgICAgIC8qIChBREMpIE92ZXJydW4gRXJyb3IgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19PVlJFMyAgICAgKCAweDEgPDwgMTEgKSAgICAgLyogKEFEQykgT3ZlcnJ1biBFcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX09WUkU0ICAgICAoIDB4MSA8PCAxMiApICAgICAvKiAoQURDKSBPdmVycnVuIEVycm9yICovDQotI2RlZmluZSBBVDkxQ19BRENfT1ZSRTUgICAgICggMHgxIDw8IDEzICkgICAgIC8qIChBREMpIE92ZXJydW4gRXJyb3IgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19PVlJFNiAgICAgKCAweDEgPDwgMTQgKSAgICAgLyogKEFEQykgT3ZlcnJ1biBFcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX09WUkU3ICAgICAoIDB4MSA8PCAxNSApICAgICAvKiAoQURDKSBPdmVycnVuIEVycm9yICovDQotI2RlZmluZSBBVDkxQ19BRENfRFJEWSAgICAgICggMHgxIDw8IDE2ICkgICAgIC8qIChBREMpIERhdGEgUmVhZHkgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19HT1ZSRSAgICAgKCAweDEgPDwgMTcgKSAgICAgLyogKEFEQykgR2VuZXJhbCBPdmVycnVuICovDQotI2RlZmluZSBBVDkxQ19BRENfRU5EUlggICAgICggMHgxIDw8IDE4ICkgICAgIC8qIChBREMpIEVuZCBvZiBSZWNlaXZlciBUcmFuc2ZlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1JYQlVGRiAgICAoIDB4MSA8PCAxOSApICAgICAvKiAoQURDKSBSWEJVRkYgSW50ZXJydXB0ICovDQotLyogLS0tLS0tLS0gQURDX0xDRFIgOiAoQURDIE9mZnNldDogMHgyMCkgQURDIExhc3QgQ29udmVydGVkIERhdGEgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19MREFUQSAgICAgKCAweDNGRiA8PCAwICkgICAgLyogKEFEQykgTGFzdCBEYXRhIENvbnZlcnRlZCAqLw0KLS8qIC0tLS0tLS0tIEFEQ19JRVIgOiAoQURDIE9mZnNldDogMHgyNCkgQURDIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBBRENfSURSIDogKEFEQyBPZmZzZXQ6IDB4MjgpIEFEQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIEFEQ19JTVIgOiAoQURDIE9mZnNldDogMHgyYykgQURDIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQURDX0NEUjAgOiAoQURDIE9mZnNldDogMHgzMCkgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAwIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19BRENfREFUQSAgICAoIDB4M0ZGIDw8IDAgKSAgICAgICAgLyogKEFEQykgQ29udmVydGVkIERhdGEgKi8NCi0vKiAtLS0tLS0tLSBBRENfQ0RSMSA6IChBREMgT2Zmc2V0OiAweDM0KSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDEgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBBRENfQ0RSMiA6IChBREMgT2Zmc2V0OiAweDM4KSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBBRENfQ0RSMyA6IChBREMgT2Zmc2V0OiAweDNjKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDMgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBBRENfQ0RSNCA6IChBREMgT2Zmc2V0OiAweDQwKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDQgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBBRENfQ0RSNSA6IChBREMgT2Zmc2V0OiAweDQ0KSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDUgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBBRENfQ0RSNiA6IChBREMgT2Zmc2V0OiAweDQ4KSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDYgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBBRENfQ0RSNyA6IChBREMgT2Zmc2V0OiAweDRjKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDcgLS0tLS0tLS0gKi8NCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIEFuYWxvZyB0byBEaWdpdGFsIENvbnZlcnRvcg0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19BREMgc3RydWN0dXJlICoqKg0KKyNkZWZpbmUgQURDX0NSICAgICAgICAgICggMCkgLy8gQURDIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFEQ19NUiAgICAgICAgICAoIDQpIC8vIEFEQyBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBRENfQ0hFUiAgICAgICAgKDE2KSAvLyBBREMgQ2hhbm5lbCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFEQ19DSERSICAgICAgICAoMjApIC8vIEFEQyBDaGFubmVsIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFEQ19DSFNSICAgICAgICAoMjQpIC8vIEFEQyBDaGFubmVsIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQURDX1NSICAgICAgICAgICgyOCkgLy8gQURDIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQURDX0xDRFIgICAgICAgICgzMikgLy8gQURDIExhc3QgQ29udmVydGVkIERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIEFEQ19JRVIgICAgICAgICAoMzYpIC8vIEFEQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBRENfSURSICAgICAgICAgKDQwKSAvLyBBREMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFEQ19JTVIgICAgICAgICAoNDQpIC8vIEFEQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQURDX0NEUjAgICAgICAgICg0OCkgLy8gQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAwDQorI2RlZmluZSBBRENfQ0RSMSAgICAgICAgKDUyKSAvLyBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDENCisjZGVmaW5lIEFEQ19DRFIyICAgICAgICAoNTYpIC8vIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMg0KKyNkZWZpbmUgQURDX0NEUjMgICAgICAgICg2MCkgLy8gQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAzDQorI2RlZmluZSBBRENfQ0RSNCAgICAgICAgKDY0KSAvLyBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDQNCisjZGVmaW5lIEFEQ19DRFI1ICAgICAgICAoNjgpIC8vIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNQ0KKyNkZWZpbmUgQURDX0NEUjYgICAgICAgICg3MikgLy8gQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA2DQorI2RlZmluZSBBRENfQ0RSNyAgICAgICAgKDc2KSAvLyBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDcNCisjZGVmaW5lIEFEQ19SUFIgICAgICAgICAoMjU2KSAvLyBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFEQ19SQ1IgICAgICAgICAoMjYwKSAvLyBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFEQ19UUFIgICAgICAgICAoMjY0KSAvLyBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBRENfVENSICAgICAgICAgKDI2OCkgLy8gVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQURDX1JOUFIgICAgICAgICgyNzIpIC8vIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBRENfUk5DUiAgICAgICAgKDI3NikgLy8gUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFEQ19UTlBSICAgICAgICAoMjgwKSAvLyBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFEQ19UTkNSICAgICAgICAoMjg0KSAvLyBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFEQ19QVENSICAgICAgICAoMjg4KSAvLyBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQURDX1BUU1IgICAgICAgICgyOTIpIC8vIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisvLyAtLS0tLS0tLSBBRENfQ1IgOiAoQURDIE9mZnNldDogMHgwKSBBREMgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FEQ19TV1JTVCAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKEFEQykgU29mdHdhcmUgUmVzZXQNCisjZGVmaW5lIEFUOTFDX0FEQ19TVEFSVCAgICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKEFEQykgU3RhcnQgQ29udmVyc2lvbg0KKy8vIC0tLS0tLS0tIEFEQ19NUiA6IChBREMgT2Zmc2V0OiAweDQpIEFEQyBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQURDX1RSR0VOICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoQURDKSBUcmlnZ2VyIEVuYWJsZQ0KKyNkZWZpbmUgCUFUOTFDX0FEQ19UUkdFTl9ESVMgICAgICAgICAgICAgICAgICAoMHgwKSAvLyAoQURDKSBIcmFkd2FyZSB0cmlnZ2VycyBhcmUgZGlzYWJsZWQuIFN0YXJ0aW5nIGEgY29udmVyc2lvbiBpcyBvbmx5IHBvc3NpYmxlIGJ5IHNvZnR3YXJlDQorI2RlZmluZSAJQVQ5MUNfQURDX1RSR0VOX0VOICAgICAgICAgICAgICAgICAgICgweDEpIC8vIChBREMpIEhhcmR3YXJlIHRyaWdnZXIgc2VsZWN0ZWQgYnkgVFJHU0VMIGZpZWxkIGlzIGVuYWJsZWQuDQorI2RlZmluZSBBVDkxQ19BRENfVFJHU0VMICAgICAgICAgICgweDcgPDwgIDEpIC8vIChBREMpIFRyaWdnZXIgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfQURDX1RSR1NFTF9USU9BMCAgICAgICAgICAgICAgICAoMHgwIDw8ICAxKSAvLyAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPMA0KKyNkZWZpbmUgCUFUOTFDX0FEQ19UUkdTRUxfVElPQTEgICAgICAgICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gVElBTzENCisjZGVmaW5lIAlBVDkxQ19BRENfVFJHU0VMX1RJT0EyICAgICAgICAgICAgICAgICgweDIgPDwgIDEpIC8vIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IFRJQU8yDQorI2RlZmluZSAJQVQ5MUNfQURDX1RSR1NFTF9USU9BMyAgICAgICAgICAgICAgICAoMHgzIDw8ICAxKSAvLyAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPMw0KKyNkZWZpbmUgCUFUOTFDX0FEQ19UUkdTRUxfVElPQTQgICAgICAgICAgICAgICAgKDB4NCA8PCAgMSkgLy8gKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gVElBTzQNCisjZGVmaW5lIAlBVDkxQ19BRENfVFJHU0VMX1RJT0E1ICAgICAgICAgICAgICAgICgweDUgPDwgIDEpIC8vIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IFRJQU81DQorI2RlZmluZSAJQVQ5MUNfQURDX1RSR1NFTF9FWFQgICAgICAgICAgICAgICAgICAoMHg2IDw8ICAxKSAvLyAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBFeHRlcm5hbCBUcmlnZ2VyDQorI2RlZmluZSBBVDkxQ19BRENfTE9XUkVTICAgICAgICAgICgweDEgPDwgIDQpIC8vIChBREMpIFJlc29sdXRpb24uDQorI2RlZmluZSAJQVQ5MUNfQURDX0xPV1JFU18xMF9CSVQgICAgICAgICAgICAgICAoMHgwIDw8ICA0KSAvLyAoQURDKSAxMC1iaXQgcmVzb2x1dGlvbg0KKyNkZWZpbmUgCUFUOTFDX0FEQ19MT1dSRVNfOF9CSVQgICAgICAgICAgICAgICAgKDB4MSA8PCAgNCkgLy8gKEFEQykgOC1iaXQgcmVzb2x1dGlvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX1NMRUVQICAgICAgICAgICAoMHgxIDw8ICA1KSAvLyAoQURDKSBTbGVlcCBNb2RlDQorI2RlZmluZSAJQVQ5MUNfQURDX1NMRUVQX05PUk1BTF9NT0RFICAgICAgICAgICgweDAgPDwgIDUpIC8vIChBREMpIE5vcm1hbCBNb2RlDQorI2RlZmluZSAJQVQ5MUNfQURDX1NMRUVQX01PREUgICAgICAgICAgICAgICAgICgweDEgPDwgIDUpIC8vIChBREMpIFNsZWVwIE1vZGUNCisjZGVmaW5lIEFUOTFDX0FEQ19QUkVTQ0FMICAgICAgICAgKDB4M0YgPDwgIDgpIC8vIChBREMpIFByZXNjYWxlciByYXRlIHNlbGVjdGlvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX1NUQVJUVVAgICAgICAgICAoMHgxRiA8PCAxNikgLy8gKEFEQykgU3RhcnR1cCBUaW1lDQorI2RlZmluZSBBVDkxQ19BRENfU0hUSU0gICAgICAgICAgICgweEYgPDwgMjQpIC8vIChBREMpIFNhbXBsZSAmIEhvbGQgVGltZQ0KKy8vIC0tLS0tLS0tIAlBRENfQ0hFUiA6IChBREMgT2Zmc2V0OiAweDEwKSBBREMgQ2hhbm5lbCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BRENfQ0gwICAgICAgICAgICAgICgweDEgPDwgIDApIC8vIChBREMpIENoYW5uZWwgMA0KKyNkZWZpbmUgQVQ5MUNfQURDX0NIMSAgICAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoQURDKSBDaGFubmVsIDENCisjZGVmaW5lIEFUOTFDX0FEQ19DSDIgICAgICAgICAgICAgKDB4MSA8PCAgMikgLy8gKEFEQykgQ2hhbm5lbCAyDQorI2RlZmluZSBBVDkxQ19BRENfQ0gzICAgICAgICAgICAgICgweDEgPDwgIDMpIC8vIChBREMpIENoYW5uZWwgMw0KKyNkZWZpbmUgQVQ5MUNfQURDX0NINCAgICAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoQURDKSBDaGFubmVsIDQNCisjZGVmaW5lIEFUOTFDX0FEQ19DSDUgICAgICAgICAgICAgKDB4MSA8PCAgNSkgLy8gKEFEQykgQ2hhbm5lbCA1DQorI2RlZmluZSBBVDkxQ19BRENfQ0g2ICAgICAgICAgICAgICgweDEgPDwgIDYpIC8vIChBREMpIENoYW5uZWwgNg0KKyNkZWZpbmUgQVQ5MUNfQURDX0NINyAgICAgICAgICAgICAoMHgxIDw8ICA3KSAvLyAoQURDKSBDaGFubmVsIDcNCisvLyAtLS0tLS0tLSAJQURDX0NIRFIgOiAoQURDIE9mZnNldDogMHgxNCkgQURDIENoYW5uZWwgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSAJQURDX0NIU1IgOiAoQURDIE9mZnNldDogMHgxOCkgQURDIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19TUiA6IChBREMgT2Zmc2V0OiAweDFjKSBBREMgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQURDX0VPQzAgICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoQURDKSBFbmQgb2YgQ29udmVyc2lvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX0VPQzEgICAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoQURDKSBFbmQgb2YgQ29udmVyc2lvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX0VPQzIgICAgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoQURDKSBFbmQgb2YgQ29udmVyc2lvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX0VPQzMgICAgICAgICAgICAoMHgxIDw8ICAzKSAvLyAoQURDKSBFbmQgb2YgQ29udmVyc2lvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX0VPQzQgICAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoQURDKSBFbmQgb2YgQ29udmVyc2lvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX0VPQzUgICAgICAgICAgICAoMHgxIDw8ICA1KSAvLyAoQURDKSBFbmQgb2YgQ29udmVyc2lvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX0VPQzYgICAgICAgICAgICAoMHgxIDw8ICA2KSAvLyAoQURDKSBFbmQgb2YgQ29udmVyc2lvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX0VPQzcgICAgICAgICAgICAoMHgxIDw8ICA3KSAvLyAoQURDKSBFbmQgb2YgQ29udmVyc2lvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX09WUkUwICAgICAgICAgICAoMHgxIDw8ICA4KSAvLyAoQURDKSBPdmVycnVuIEVycm9yDQorI2RlZmluZSBBVDkxQ19BRENfT1ZSRTEgICAgICAgICAgICgweDEgPDwgIDkpIC8vIChBREMpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX0FEQ19PVlJFMiAgICAgICAgICAgKDB4MSA8PCAxMCkgLy8gKEFEQykgT3ZlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQURDX09WUkUzICAgICAgICAgICAoMHgxIDw8IDExKSAvLyAoQURDKSBPdmVycnVuIEVycm9yDQorI2RlZmluZSBBVDkxQ19BRENfT1ZSRTQgICAgICAgICAgICgweDEgPDwgMTIpIC8vIChBREMpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX0FEQ19PVlJFNSAgICAgICAgICAgKDB4MSA8PCAxMykgLy8gKEFEQykgT3ZlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQURDX09WUkU2ICAgICAgICAgICAoMHgxIDw8IDE0KSAvLyAoQURDKSBPdmVycnVuIEVycm9yDQorI2RlZmluZSBBVDkxQ19BRENfT1ZSRTcgICAgICAgICAgICgweDEgPDwgMTUpIC8vIChBREMpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX0FEQ19EUkRZICAgICAgICAgICAgKDB4MSA8PCAxNikgLy8gKEFEQykgRGF0YSBSZWFkeQ0KKyNkZWZpbmUgQVQ5MUNfQURDX0dPVlJFICAgICAgICAgICAoMHgxIDw8IDE3KSAvLyAoQURDKSBHZW5lcmFsIE92ZXJydW4NCisjZGVmaW5lIEFUOTFDX0FEQ19FTkRSWCAgICAgICAgICAgKDB4MSA8PCAxOCkgLy8gKEFEQykgRW5kIG9mIFJlY2VpdmVyIFRyYW5zZmVyDQorI2RlZmluZSBBVDkxQ19BRENfUlhCVUZGICAgICAgICAgICgweDEgPDwgMTkpIC8vIChBREMpIFJYQlVGRiBJbnRlcnJ1cHQNCisvLyAtLS0tLS0tLSBBRENfTENEUiA6IChBREMgT2Zmc2V0OiAweDIwKSBBREMgTGFzdCBDb252ZXJ0ZWQgRGF0YSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FEQ19MREFUQSAgICAgICAgICAgKDB4M0ZGIDw8ICAwKSAvLyAoQURDKSBMYXN0IERhdGEgQ29udmVydGVkDQorLy8gLS0tLS0tLS0gQURDX0lFUiA6IChBREMgT2Zmc2V0OiAweDI0KSBBREMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRENfSURSIDogKEFEQyBPZmZzZXQ6IDB4MjgpIEFEQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRENfSU1SIDogKEFEQyBPZmZzZXQ6IDB4MmMpIEFEQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRENfQ0RSMCA6IChBREMgT2Zmc2V0OiAweDMwKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDAgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BRENfREFUQSAgICAgICAgICAgICgweDNGRiA8PCAgMCkgLy8gKEFEQykgQ29udmVydGVkIERhdGENCisvLyAtLS0tLS0tLSBBRENfQ0RSMSA6IChBREMgT2Zmc2V0OiAweDM0KSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDEgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX0NEUjIgOiAoQURDIE9mZnNldDogMHgzOCkgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19DRFIzIDogKEFEQyBPZmZzZXQ6IDB4M2MpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMyAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRENfQ0RSNCA6IChBREMgT2Zmc2V0OiAweDQwKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDQgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX0NEUjUgOiAoQURDIE9mZnNldDogMHg0NCkgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA1IC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19DRFI2IDogKEFEQyBPZmZzZXQ6IDB4NDgpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNiAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRENfQ0RSNyA6IChBREMgT2Zmc2V0OiAweDRjKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDcgLS0tLS0tLS0gDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBBZHZhbmNlZCAgRW5jcnlwdGlvbiBTdGFuZGFyZCAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19BRVMgc3RydWN0dXJlICoqKiAqLw0KLSNkZWZpbmUgQUVTX0NSICAgICAgICAgICAgICAgICAgICAgICAgICAoIDAgKSAgICAgICAgICAvKiBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBRVNfTVIgICAgICAgICAgICAgICAgICAgICAgICAgICggNCApICAgICAgICAgIC8qIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFFU19JRVIgICAgICAgICAgICAgICAgICAgICAgICAgKCAxNiApICAgICAgICAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQUVTX0lEUiAgICAgICAgICAgICAgICAgICAgICAgICAoIDIwICkgICAgICAgICAvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQUVTX0lNUiAgICAgICAgICAgICAgICAgICAgICAgICAoIDI0ICkgICAgICAgICAvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQUVTX0lTUiAgICAgICAgICAgICAgICAgICAgICAgICAoIDI4ICkgICAgICAgICAvKiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBRVNfS0VZV3hSICAgICAgICAgICAgICAgICAgICAgICggMzIgKSAgICAgICAgIC8qIEtleSBXb3JkIHggUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFFU19JREFUQXhSICAgICAgICAgICAgICAgICAgICAgKCA2NCApICAgICAgICAgLyogSW5wdXQgRGF0YSB4IFJlZ2lzdGVyICovDQotI2RlZmluZSBBRVNfT0RBVEF4UiAgICAgICAgICAgICAgICAgICAgICggODAgKSAgICAgICAgIC8qIE91dHB1dCBEYXRhIHggUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFFU19JVnhSICAgICAgICAgICAgICAgICAgICAgICAgKCA5NiApICAgICAgICAgLyogSW5pdGlhbGl6YXRpb24gVmVjdG9yIHggUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFFU19WUiAgICAgICAgICAgICAgICAgICAgICAgICAgKCAyNTIgKSAgICAgICAgLyogQUVTIFZlcnNpb24gUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFFU19SUFIgICAgICAgICAgICAgICAgICAgICAgICAgKCAyNTYgKSAgICAgICAgLyogUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBRVNfUkNSICAgICAgICAgICAgICAgICAgICAgICAgICggMjYwICkgICAgICAgIC8qIFJlY2VpdmUgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQUVTX1RQUiAgICAgICAgICAgICAgICAgICAgICAgICAoIDI2NCApICAgICAgICAvKiBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBRVNfVENSICAgICAgICAgICAgICAgICAgICAgICAgICggMjY4ICkgICAgICAgIC8qIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFFU19STlBSICAgICAgICAgICAgICAgICAgICAgICAgKCAyNzIgKSAgICAgICAgLyogUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFFU19STkNSICAgICAgICAgICAgICAgICAgICAgICAgKCAyNzYgKSAgICAgICAgLyogUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFFU19UTlBSICAgICAgICAgICAgICAgICAgICAgICAgKCAyODAgKSAgICAgICAgLyogVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBRVNfVE5DUiAgICAgICAgICAgICAgICAgICAgICAgICggMjg0ICkgICAgICAgIC8qIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQUVTX1BUQ1IgICAgICAgICAgICAgICAgICAgICAgICAoIDI4OCApICAgICAgICAvKiBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQUVTX1BUU1IgICAgICAgICAgICAgICAgICAgICAgICAoIDI5MiApICAgICAgICAvKiBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotLyogLS0tLS0tLS0gQUVTX0NSIDogKEFFUyBPZmZzZXQ6IDB4MCkgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX1NUQVJUICAgICAgICAgICAgICAgICAoIDB4MSA8PCAwICkgICAvKiAoQUVTKSBTdGFydHMgUHJvY2Vzc2luZyAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX1NXUlNUICAgICAgICAgICAgICAgICAoIDB4MSA8PCA4ICkgICAvKiAoQUVTKSBTb2Z0d2FyZSBSZXNldCAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX0xPQURTRUVEICAgICAgICAgICAgICAoIDB4MSA8PCAxNiApICAvKiAoQUVTKSBSYW5kb20gTnVtYmVyIEdlbmVyYXRvciBTZWVkIExvYWRpbmcgKi8NCi0vKiAtLS0tLS0tLSBBRVNfTVIgOiAoQUVTIE9mZnNldDogMHg0KSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19BRVNfQ0lQSEVSICAgICAgICAgICAgICAgICggMHgxIDw8IDAgKSAgIC8qIChBRVMpIFByb2Nlc3NpbmcgTW9kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX1BST0NETFkgICAgICAgICAgICAgICAoIDB4RiA8PCA0ICkgICAvKiAoQUVTKSBQcm9jZXNzaW5nIERlbGF5ICovDQotI2RlZmluZSBBVDkxQ19BRVNfU01PRCAgICAgICAgICAgICAgICAgICggMHgzIDw8IDggKSAgIC8qIChBRVMpIFN0YXJ0IE1vZGUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfU01PRF9NQU5VQUwgICAgICAgKCAweDAgPDwgOCApICAgLyogKEFFUykgTWFudWFsIE1vZGU6IFRoZSBTVEFSVCBiaXQgaW4gcmVnaXN0ZXIgQUVTX0NSIG11c3QgYmUgc2V0IHRvIGJlZ2luIGVuY3J5cHRpb24gb3IgZGVjcnlwdGlvbi4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfU01PRF9BVVRPICAgICAgICAgKCAweDEgPDwgOCApICAgLyogKEFFUykgQXV0byBNb2RlOiBubyBhY3Rpb24gaW4gQUVTX0NSIGlzIG5lY2Vzc2FyeSAoY2YgZGF0YXNoZWV0KS4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfU01PRF9QREMgICAgICAgICAgKCAweDIgPDwgOCApICAgLyogKEFFUykgUERDIE1vZGUgKGNmIGRhdGFzaGVldCkuICovDQotI2RlZmluZSBBVDkxQ19BRVNfT1BNT0QgICAgICAgICAgICAgICAgICggMHg3IDw8IDEyICkgIC8qIChBRVMpIE9wZXJhdGlvbiBNb2RlICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUVTX09QTU9EX0VDQiAgICAgICAgICggMHgwIDw8IDEyICkgIC8qIChBRVMpIEVDQiBFbGVjdHJvbmljIENvZGVCb29rIG1vZGUuICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUVTX09QTU9EX0NCQyAgICAgICAgICggMHgxIDw8IDEyICkgIC8qIChBRVMpIENCQyBDaXBoZXIgQmxvY2sgQ2hhaW5pbmcgbW9kZS4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfT1BNT0RfT0ZCICAgICAgICAgKCAweDIgPDwgMTIgKSAgLyogKEFFUykgT0ZCIE91dHB1dCBGZWVkYmFjayBtb2RlLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FFU19PUE1PRF9DRkIgICAgICAgICAoIDB4MyA8PCAxMiApICAvKiAoQUVTKSBDRkIgQ2lwaGVyIEZlZWRiYWNrIG1vZGUuICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUVTX09QTU9EX0NUUiAgICAgICAgICggMHg0IDw8IDEyICkgIC8qIChBRVMpIENUUiBDb3VudGVyIG1vZGUuICovDQotI2RlZmluZSBBVDkxQ19BRVNfTE9EICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDE1ICkgIC8qIChBRVMpIExhc3QgT3V0cHV0IERhdGEgTW9kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX0NGQlMgICAgICAgICAgICAgICAgICAoIDB4NyA8PCAxNiApICAvKiAoQUVTKSBDaXBoZXIgRmVlZGJhY2sgRGF0YSBTaXplICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUVTX0NGQlNfMTI4X0JJVCAgICAgICggMHgwIDw8IDE2ICkgIC8qIChBRVMpIDEyOC1iaXQuICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUVTX0NGQlNfNjRfQklUICAgICAgICggMHgxIDw8IDE2ICkgIC8qIChBRVMpIDY0LWJpdC4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfQ0ZCU18zMl9CSVQgICAgICAgKCAweDIgPDwgMTYgKSAgLyogKEFFUykgMzItYml0LiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FFU19DRkJTXzE2X0JJVCAgICAgICAoIDB4MyA8PCAxNiApICAvKiAoQUVTKSAxNi1iaXQuICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUVTX0NGQlNfOF9CSVQgICAgICAgICggMHg0IDw8IDE2ICkgIC8qIChBRVMpIDgtYml0LiAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX0NLRVkgICAgICAgICAgICAgICAgICAoIDB4RiA8PCAyMCApICAvKiAoQUVTKSBDb3VudGVybWVhc3VyZSBLZXkgKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19DVFlQRSAgICAgICAgICAgICAgICAgKCAweDFGIDw8IDI0ICkgLyogKEFFUykgQ291bnRlcm1lYXN1cmUgVHlwZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FFU19DVFlQRV9UWVBFMV9FTiAgICAoIDB4MSA8PCAyNCApICAvKiAoQUVTKSBDb3VudGVybWVhc3VyZSB0eXBlIDEgaXMgZW5hYmxlZC4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfQ1RZUEVfVFlQRTJfRU4gICAgKCAweDIgPDwgMjQgKSAgLyogKEFFUykgQ291bnRlcm1lYXN1cmUgdHlwZSAyIGlzIGVuYWJsZWQuICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUVTX0NUWVBFX1RZUEUzX0VOICAgICggMHg0IDw8IDI0ICkgIC8qIChBRVMpIENvdW50ZXJtZWFzdXJlIHR5cGUgMyBpcyBlbmFibGVkLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FFU19DVFlQRV9UWVBFNF9FTiAgICAoIDB4OCA8PCAyNCApICAvKiAoQUVTKSBDb3VudGVybWVhc3VyZSB0eXBlIDQgaXMgZW5hYmxlZC4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfQ1RZUEVfVFlQRTVfRU4gICAgKCAweDEwIDw8IDI0ICkgLyogKEFFUykgQ291bnRlcm1lYXN1cmUgdHlwZSA1IGlzIGVuYWJsZWQuICovDQotLyogLS0tLS0tLS0gQUVTX0lFUiA6IChBRVMgT2Zmc2V0OiAweDEwKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19BRVNfREFUUkRZICAgICAgICAgICAgICAgICggMHgxIDw8IDAgKSAgIC8qIChBRVMpIERBVFJEWSAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX0VORFJYICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxICkgICAvKiAoQUVTKSBQREMgUmVhZCBCdWZmZXIgRW5kICovDQotI2RlZmluZSBBVDkxQ19BRVNfRU5EVFggICAgICAgICAgICAgICAgICggMHgxIDw8IDIgKSAgIC8qIChBRVMpIFBEQyBXcml0ZSBCdWZmZXIgRW5kICovDQotI2RlZmluZSBBVDkxQ19BRVNfUlhCVUZGICAgICAgICAgICAgICAgICggMHgxIDw8IDMgKSAgIC8qIChBRVMpIFBEQyBSZWFkIEJ1ZmZlciBGdWxsICovDQotI2RlZmluZSBBVDkxQ19BRVNfVFhCVUZFICAgICAgICAgICAgICAgICggMHgxIDw8IDQgKSAgIC8qIChBRVMpIFBEQyBXcml0ZSBCdWZmZXIgRW1wdHkgKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19VUkFEICAgICAgICAgICAgICAgICAgKCAweDEgPDwgOCApICAgLyogKEFFUykgVW5zcGVjaWZpZWQgUmVnaXN0ZXIgQWNjZXNzIERldGVjdGlvbiAqLw0KLS8qIC0tLS0tLS0tIEFFU19JRFIgOiAoQUVTIE9mZnNldDogMHgxNCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBBRVNfSU1SIDogKEFFUyBPZmZzZXQ6IDB4MTgpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQUVTX0lTUiA6IChBRVMgT2Zmc2V0OiAweDFjKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19BRVNfVVJBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMHg3IDw8IDEyICkgLyogKEFFUykgVW5zcGVjaWZpZWQgUmVnaXN0ZXIgQWNjZXNzIFR5cGUgU3RhdHVzICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUVTX1VSQVRfSU5fREFUX1dSSVRFX0RBVFBST0MgICAgICggMHgwIDw8IDEyICkgLyogKEFFUykgSW5wdXQgZGF0YSByZWdpc3RlciB3cml0dGVuIGR1cmluZyB0aGUgZGF0YSBwcm9jZXNzaW5nIGluIFBEQyBtb2RlLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FFU19VUkFUX09VVF9EQVRfUkVBRF9EQVRQUk9DICAgICAoIDB4MSA8PCAxMiApIC8qIChBRVMpIE91dHB1dCBkYXRhIHJlZ2lzdGVyIHJlYWQgZHVyaW5nIHRoZSBkYXRhIHByb2Nlc3NpbmcuICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUVTX1VSQVRfTU9ERVJFR19XUklURV9EQVRQUk9DICAgICggMHgyIDw8IDEyICkgLyogKEFFUykgTW9kZSByZWdpc3RlciB3cml0dGVuIGR1cmluZyB0aGUgZGF0YSBwcm9jZXNzaW5nLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FFU19VUkFUX09VVF9EQVRfUkVBRF9TVUJLRVkgICAgICAoIDB4MyA8PCAxMiApIC8qIChBRVMpIE91dHB1dCBkYXRhIHJlZ2lzdGVyIHJlYWQgZHVyaW5nIHRoZSBzdWIta2V5cyBnZW5lcmF0aW9uLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FFU19VUkFUX01PREVSRUdfV1JJVEVfU1VCS0VZICAgICAoIDB4NCA8PCAxMiApIC8qIChBRVMpIE1vZGUgcmVnaXN0ZXIgd3JpdHRlbiBkdXJpbmcgdGhlIHN1Yi1rZXlzIGdlbmVyYXRpb24uICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUVTX1VSQVRfV09fUkVHX1JFQUQgICAgICAgICAgICAgICggMHg1IDw8IDEyICkgLyogKEFFUykgV3JpdGUtb25seSByZWdpc3RlciByZWFkIGFjY2Vzcy4gKi8NCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIEFkdmFuY2VkICBFbmNyeXB0aW9uIFN0YW5kYXJkDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX0FFUyBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBBRVNfQ1IgICAgICAgICAgKCAwKSAvLyBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBRVNfTVIgICAgICAgICAgKCA0KSAvLyBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBRVNfSUVSICAgICAgICAgKDE2KSAvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBRVNfSURSICAgICAgICAgKDIwKSAvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQUVTX0lNUiAgICAgICAgICgyNCkgLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFFU19JU1IgICAgICAgICAoMjgpIC8vIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFFU19LRVlXeFIgICAgICAoMzIpIC8vIEtleSBXb3JkIHggUmVnaXN0ZXINCisjZGVmaW5lIEFFU19JREFUQXhSICAgICAoNjQpIC8vIElucHV0IERhdGEgeCBSZWdpc3Rlcg0KKyNkZWZpbmUgQUVTX09EQVRBeFIgICAgICg4MCkgLy8gT3V0cHV0IERhdGEgeCBSZWdpc3Rlcg0KKyNkZWZpbmUgQUVTX0lWeFIgICAgICAgICg5NikgLy8gSW5pdGlhbGl6YXRpb24gVmVjdG9yIHggUmVnaXN0ZXINCisjZGVmaW5lIEFFU19WUiAgICAgICAgICAoMjUyKSAvLyBBRVMgVmVyc2lvbiBSZWdpc3Rlcg0KKyNkZWZpbmUgQUVTX1JQUiAgICAgICAgICgyNTYpIC8vIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQUVTX1JDUiAgICAgICAgICgyNjApIC8vIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQUVTX1RQUiAgICAgICAgICgyNjQpIC8vIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFFU19UQ1IgICAgICAgICAoMjY4KSAvLyBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBRVNfUk5QUiAgICAgICAgKDI3MikgLy8gUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFFU19STkNSICAgICAgICAoMjc2KSAvLyBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQUVTX1ROUFIgICAgICAgICgyODApIC8vIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQUVTX1ROQ1IgICAgICAgICgyODQpIC8vIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQUVTX1BUQ1IgICAgICAgICgyODgpIC8vIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBRVNfUFRTUiAgICAgICAgKDI5MikgLy8gUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKy8vIC0tLS0tLS0tIEFFU19DUiA6IChBRVMgT2Zmc2V0OiAweDApIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BRVNfU1RBUlQgICAgICAgICAgICgweDEgPDwgIDApIC8vIChBRVMpIFN0YXJ0cyBQcm9jZXNzaW5nDQorI2RlZmluZSBBVDkxQ19BRVNfU1dSU1QgICAgICAgICAgICgweDEgPDwgIDgpIC8vIChBRVMpIFNvZnR3YXJlIFJlc2V0DQorI2RlZmluZSBBVDkxQ19BRVNfTE9BRFNFRUQgICAgICAgICgweDEgPDwgMTYpIC8vIChBRVMpIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yIFNlZWQgTG9hZGluZw0KKy8vIC0tLS0tLS0tIEFFU19NUiA6IChBRVMgT2Zmc2V0OiAweDQpIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BRVNfQ0lQSEVSICAgICAgICAgICgweDEgPDwgIDApIC8vIChBRVMpIFByb2Nlc3NpbmcgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfQUVTX1BST0NETFkgICAgICAgICAoMHhGIDw8ICA0KSAvLyAoQUVTKSBQcm9jZXNzaW5nIERlbGF5DQorI2RlZmluZSBBVDkxQ19BRVNfU01PRCAgICAgICAgICAgICgweDMgPDwgIDgpIC8vIChBRVMpIFN0YXJ0IE1vZGUNCisjZGVmaW5lIAlBVDkxQ19BRVNfU01PRF9NQU5VQUwgICAgICAgICAgICAgICAoMHgwIDw8ICA4KSAvLyAoQUVTKSBNYW51YWwgTW9kZTogVGhlIFNUQVJUIGJpdCBpbiByZWdpc3RlciBBRVNfQ1IgbXVzdCBiZSBzZXQgdG8gYmVnaW4gZW5jcnlwdGlvbiBvciBkZWNyeXB0aW9uLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19TTU9EX0FVVE8gICAgICAgICAgICAgICAgICgweDEgPDwgIDgpIC8vIChBRVMpIEF1dG8gTW9kZTogbm8gYWN0aW9uIGluIEFFU19DUiBpcyBuZWNlc3NhcnkgKGNmIGRhdGFzaGVldCkuDQorI2RlZmluZSAJQVQ5MUNfQUVTX1NNT0RfUERDICAgICAgICAgICAgICAgICAgKDB4MiA8PCAgOCkgLy8gKEFFUykgUERDIE1vZGUgKGNmIGRhdGFzaGVldCkuDQorI2RlZmluZSBBVDkxQ19BRVNfT1BNT0QgICAgICAgICAgICgweDcgPDwgMTIpIC8vIChBRVMpIE9wZXJhdGlvbiBNb2RlDQorI2RlZmluZSAJQVQ5MUNfQUVTX09QTU9EX0VDQiAgICAgICAgICAgICAgICAgICgweDAgPDwgMTIpIC8vIChBRVMpIEVDQiBFbGVjdHJvbmljIENvZGVCb29rIG1vZGUuDQorI2RlZmluZSAJQVQ5MUNfQUVTX09QTU9EX0NCQyAgICAgICAgICAgICAgICAgICgweDEgPDwgMTIpIC8vIChBRVMpIENCQyBDaXBoZXIgQmxvY2sgQ2hhaW5pbmcgbW9kZS4NCisjZGVmaW5lIAlBVDkxQ19BRVNfT1BNT0RfT0ZCICAgICAgICAgICAgICAgICAgKDB4MiA8PCAxMikgLy8gKEFFUykgT0ZCIE91dHB1dCBGZWVkYmFjayBtb2RlLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19PUE1PRF9DRkIgICAgICAgICAgICAgICAgICAoMHgzIDw8IDEyKSAvLyAoQUVTKSBDRkIgQ2lwaGVyIEZlZWRiYWNrIG1vZGUuDQorI2RlZmluZSAJQVQ5MUNfQUVTX09QTU9EX0NUUiAgICAgICAgICAgICAgICAgICgweDQgPDwgMTIpIC8vIChBRVMpIENUUiBDb3VudGVyIG1vZGUuDQorI2RlZmluZSBBVDkxQ19BRVNfTE9EICAgICAgICAgICAgICgweDEgPDwgMTUpIC8vIChBRVMpIExhc3QgT3V0cHV0IERhdGEgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfQUVTX0NGQlMgICAgICAgICAgICAoMHg3IDw8IDE2KSAvLyAoQUVTKSBDaXBoZXIgRmVlZGJhY2sgRGF0YSBTaXplDQorI2RlZmluZSAJQVQ5MUNfQUVTX0NGQlNfMTI4X0JJVCAgICAgICAgICAgICAgKDB4MCA8PCAxNikgLy8gKEFFUykgMTI4LWJpdC4NCisjZGVmaW5lIAlBVDkxQ19BRVNfQ0ZCU182NF9CSVQgICAgICAgICAgICAgICAoMHgxIDw8IDE2KSAvLyAoQUVTKSA2NC1iaXQuDQorI2RlZmluZSAJQVQ5MUNfQUVTX0NGQlNfMzJfQklUICAgICAgICAgICAgICAgKDB4MiA8PCAxNikgLy8gKEFFUykgMzItYml0Lg0KKyNkZWZpbmUgCUFUOTFDX0FFU19DRkJTXzE2X0JJVCAgICAgICAgICAgICAgICgweDMgPDwgMTYpIC8vIChBRVMpIDE2LWJpdC4NCisjZGVmaW5lIAlBVDkxQ19BRVNfQ0ZCU184X0JJVCAgICAgICAgICAgICAgICAoMHg0IDw8IDE2KSAvLyAoQUVTKSA4LWJpdC4NCisjZGVmaW5lIEFUOTFDX0FFU19DS0VZICAgICAgICAgICAgKDB4RiA8PCAyMCkgLy8gKEFFUykgQ291bnRlcm1lYXN1cmUgS2V5DQorI2RlZmluZSBBVDkxQ19BRVNfQ1RZUEUgICAgICAgICAgICgweDFGIDw8IDI0KSAvLyAoQUVTKSBDb3VudGVybWVhc3VyZSBUeXBlDQorI2RlZmluZSAJQVQ5MUNfQUVTX0NUWVBFX1RZUEUxX0VOICAgICAgICAgICAgICgweDEgPDwgMjQpIC8vIChBRVMpIENvdW50ZXJtZWFzdXJlIHR5cGUgMSBpcyBlbmFibGVkLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19DVFlQRV9UWVBFMl9FTiAgICAgICAgICAgICAoMHgyIDw8IDI0KSAvLyAoQUVTKSBDb3VudGVybWVhc3VyZSB0eXBlIDIgaXMgZW5hYmxlZC4NCisjZGVmaW5lIAlBVDkxQ19BRVNfQ1RZUEVfVFlQRTNfRU4gICAgICAgICAgICAgKDB4NCA8PCAyNCkgLy8gKEFFUykgQ291bnRlcm1lYXN1cmUgdHlwZSAzIGlzIGVuYWJsZWQuDQorI2RlZmluZSAJQVQ5MUNfQUVTX0NUWVBFX1RZUEU0X0VOICAgICAgICAgICAgICgweDggPDwgMjQpIC8vIChBRVMpIENvdW50ZXJtZWFzdXJlIHR5cGUgNCBpcyBlbmFibGVkLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19DVFlQRV9UWVBFNV9FTiAgICAgICAgICAgICAoMHgxMCA8PCAyNCkgLy8gKEFFUykgQ291bnRlcm1lYXN1cmUgdHlwZSA1IGlzIGVuYWJsZWQuDQorLy8gLS0tLS0tLS0gQUVTX0lFUiA6IChBRVMgT2Zmc2V0OiAweDEwKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQUVTX0RBVFJEWSAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoQUVTKSBEQVRSRFkNCisjZGVmaW5lIEFUOTFDX0FFU19FTkRSWCAgICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKEFFUykgUERDIFJlYWQgQnVmZmVyIEVuZA0KKyNkZWZpbmUgQVQ5MUNfQUVTX0VORFRYICAgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoQUVTKSBQREMgV3JpdGUgQnVmZmVyIEVuZA0KKyNkZWZpbmUgQVQ5MUNfQUVTX1JYQlVGRiAgICAgICAgICAoMHgxIDw8ICAzKSAvLyAoQUVTKSBQREMgUmVhZCBCdWZmZXIgRnVsbA0KKyNkZWZpbmUgQVQ5MUNfQUVTX1RYQlVGRSAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoQUVTKSBQREMgV3JpdGUgQnVmZmVyIEVtcHR5DQorI2RlZmluZSBBVDkxQ19BRVNfVVJBRCAgICAgICAgICAgICgweDEgPDwgIDgpIC8vIChBRVMpIFVuc3BlY2lmaWVkIFJlZ2lzdGVyIEFjY2VzcyBEZXRlY3Rpb24NCisvLyAtLS0tLS0tLSBBRVNfSURSIDogKEFFUyBPZmZzZXQ6IDB4MTQpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFFU19JTVIgOiAoQUVTIE9mZnNldDogMHgxOCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQUVTX0lTUiA6IChBRVMgT2Zmc2V0OiAweDFjKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQUVTX1VSQVQgICAgICAgICAgICAoMHg3IDw8IDEyKSAvLyAoQUVTKSBVbnNwZWNpZmllZCBSZWdpc3RlciBBY2Nlc3MgVHlwZSBTdGF0dXMNCisjZGVmaW5lIAlBVDkxQ19BRVNfVVJBVF9JTl9EQVRfV1JJVEVfREFUUFJPQyAoMHgwIDw8IDEyKSAvLyAoQUVTKSBJbnB1dCBkYXRhIHJlZ2lzdGVyIHdyaXR0ZW4gZHVyaW5nIHRoZSBkYXRhIHByb2Nlc3NpbmcgaW4gUERDIG1vZGUuDQorI2RlZmluZSAJQVQ5MUNfQUVTX1VSQVRfT1VUX0RBVF9SRUFEX0RBVFBST0MgKDB4MSA8PCAxMikgLy8gKEFFUykgT3V0cHV0IGRhdGEgcmVnaXN0ZXIgcmVhZCBkdXJpbmcgdGhlIGRhdGEgcHJvY2Vzc2luZy4NCisjZGVmaW5lIAlBVDkxQ19BRVNfVVJBVF9NT0RFUkVHX1dSSVRFX0RBVFBST0MgKDB4MiA8PCAxMikgLy8gKEFFUykgTW9kZSByZWdpc3RlciB3cml0dGVuIGR1cmluZyB0aGUgZGF0YSBwcm9jZXNzaW5nLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19VUkFUX09VVF9EQVRfUkVBRF9TVUJLRVkgICgweDMgPDwgMTIpIC8vIChBRVMpIE91dHB1dCBkYXRhIHJlZ2lzdGVyIHJlYWQgZHVyaW5nIHRoZSBzdWIta2V5cyBnZW5lcmF0aW9uLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19VUkFUX01PREVSRUdfV1JJVEVfU1VCS0VZICgweDQgPDwgMTIpIC8vIChBRVMpIE1vZGUgcmVnaXN0ZXIgd3JpdHRlbiBkdXJpbmcgdGhlIHN1Yi1rZXlzIGdlbmVyYXRpb24uDQorI2RlZmluZSAJQVQ5MUNfQUVTX1VSQVRfV09fUkVHX1JFQUQgICAgICAgICAgKDB4NSA8PCAxMikgLy8gKEFFUykgV3JpdGUtb25seSByZWdpc3RlciByZWFkIGFjY2Vzcy4NCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFRyaXBsZSBEYXRhIEVuY3J5cHRpb24gU3RhbmRhcmQgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfVERFUyBzdHJ1Y3R1cmUgKioqICovDQotI2RlZmluZSBUREVTX0NSICAgICAgICAgICAgICAgICAgICAgICAoIDAgKSAgICAgICAgIC8qIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFRERVNfTVIgICAgICAgICAgICAgICAgICAgICAgICggNCApICAgICAgICAgLyogTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVERFU19JRVIgICAgICAgICAgICAgICAgICAgICAgKCAxNiApICAgICAgICAvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBUREVTX0lEUiAgICAgICAgICAgICAgICAgICAgICAoIDIwICkgICAgICAgIC8qIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBUREVTX0lNUiAgICAgICAgICAgICAgICAgICAgICAoIDI0ICkgICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBUREVTX0lTUiAgICAgICAgICAgICAgICAgICAgICAoIDI4ICkgICAgICAgIC8qIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFRERVNfS0VZMVd4UiAgICAgICAgICAgICAgICAgICggMzIgKSAgICAgICAgLyogS2V5IDEgV29yZCB4IFJlZ2lzdGVyICovDQotI2RlZmluZSBUREVTX0tFWTJXeFIgICAgICAgICAgICAgICAgICAoIDQwICkgICAgICAgIC8qIEtleSAyIFdvcmQgeCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVERFU19LRVkzV3hSICAgICAgICAgICAgICAgICAgKCA0OCApICAgICAgICAvKiBLZXkgMyBXb3JkIHggUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFRERVNfSURBVEF4UiAgICAgICAgICAgICAgICAgICggNjQgKSAgICAgICAgLyogSW5wdXQgRGF0YSB4IFJlZ2lzdGVyICovDQotI2RlZmluZSBUREVTX09EQVRBeFIgICAgICAgICAgICAgICAgICAoIDgwICkgICAgICAgIC8qIE91dHB1dCBEYXRhIHggUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFRERVNfSVZ4UiAgICAgICAgICAgICAgICAgICAgICggOTYgKSAgICAgICAgLyogSW5pdGlhbGl6YXRpb24gVmVjdG9yIHggUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFRERVNfVlIgICAgICAgICAgICAgICAgICAgICAgICggMjUyICkgICAgICAgLyogVERFUyBWZXJzaW9uIFJlZ2lzdGVyICovDQotI2RlZmluZSBUREVTX1JQUiAgICAgICAgICAgICAgICAgICAgICAoIDI1NiApICAgICAgIC8qIFJlY2VpdmUgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVERFU19SQ1IgICAgICAgICAgICAgICAgICAgICAgKCAyNjAgKSAgICAgICAvKiBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFRERVNfVFBSICAgICAgICAgICAgICAgICAgICAgICggMjY0ICkgICAgICAgLyogVHJhbnNtaXQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVERFU19UQ1IgICAgICAgICAgICAgICAgICAgICAgKCAyNjggKSAgICAgICAvKiBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBUREVTX1JOUFIgICAgICAgICAgICAgICAgICAgICAoIDI3MiApICAgICAgIC8qIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBUREVTX1JOQ1IgICAgICAgICAgICAgICAgICAgICAoIDI3NiApICAgICAgIC8qIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBUREVTX1ROUFIgICAgICAgICAgICAgICAgICAgICAoIDI4MCApICAgICAgIC8qIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVERFU19UTkNSICAgICAgICAgICAgICAgICAgICAgKCAyODQgKSAgICAgICAvKiBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFRERVNfUFRDUiAgICAgICAgICAgICAgICAgICAgICggMjg4ICkgICAgICAgLyogUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFRERVNfUFRTUiAgICAgICAgICAgICAgICAgICAgICggMjkyICkgICAgICAgLyogUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLS8qIC0tLS0tLS0tIFRERVNfQ1IgOiAoVERFUyBPZmZzZXQ6IDB4MCkgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19TVEFSVCAgICAgICAgICAgICAgKCAweDEgPDwgMCApICAvKiAoVERFUykgU3RhcnRzIFByb2Nlc3NpbmcgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfU1dSU1QgICAgICAgICAgICAgICggMHgxIDw8IDggKSAgLyogKFRERVMpIFNvZnR3YXJlIFJlc2V0ICovDQotLyogLS0tLS0tLS0gVERFU19NUiA6IChUREVTIE9mZnNldDogMHg0KSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19UREVTX0NJUEhFUiAgICAgICAgICAgICAoIDB4MSA8PCAwICkgIC8qIChUREVTKSBQcm9jZXNzaW5nIE1vZGUgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfVERFU01PRCAgICAgICAgICAgICggMHgxIDw8IDEgKSAgLyogKFRERVMpIFNpbmdsZSBvciBUcmlwbGUgREVTIE1vZGUgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfS0VZTU9EICAgICAgICAgICAgICggMHgxIDw8IDQgKSAgLyogKFRERVMpIEtleSBNb2RlICovDQotI2RlZmluZSBBVDkxQ19UREVTX1NNT0QgICAgICAgICAgICAgICAoIDB4MyA8PCA4ICkgIC8qIChUREVTKSBTdGFydCBNb2RlICovDQotI2RlZmluZSAgICAgQVQ5MUNfVERFU19TTU9EX01BTlVBTCAgICAoIDB4MCA8PCA4ICkgIC8qIChUREVTKSBNYW51YWwgTW9kZTogVGhlIFNUQVJUIGJpdCBpbiByZWdpc3RlciBUREVTX0NSIG11c3QgYmUgc2V0IHRvIGJlZ2luIGVuY3J5cHRpb24gb3IgZGVjcnlwdGlvbi4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UREVTX1NNT0RfQVVUTyAgICAgICggMHgxIDw8IDggKSAgLyogKFRERVMpIEF1dG8gTW9kZTogbm8gYWN0aW9uIGluIFRERVNfQ1IgaXMgbmVjZXNzYXJ5IChjZiBkYXRhc2hlZXQpLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RERVNfU01PRF9QREMgICAgICAgKCAweDIgPDwgOCApICAvKiAoVERFUykgUERDIE1vZGUgKGNmIGRhdGFzaGVldCkuICovDQotI2RlZmluZSBBVDkxQ19UREVTX09QTU9EICAgICAgICAgICAgICAoIDB4MyA8PCAxMiApIC8qIChUREVTKSBPcGVyYXRpb24gTW9kZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RERVNfT1BNT0RfRUNCICAgICAgKCAweDAgPDwgMTIgKSAvKiAoVERFUykgRUNCIEVsZWN0cm9uaWMgQ29kZUJvb2sgbW9kZS4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UREVTX09QTU9EX0NCQyAgICAgICggMHgxIDw8IDEyICkgLyogKFRERVMpIENCQyBDaXBoZXIgQmxvY2sgQ2hhaW5pbmcgbW9kZS4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UREVTX09QTU9EX09GQiAgICAgICggMHgyIDw8IDEyICkgLyogKFRERVMpIE9GQiBPdXRwdXQgRmVlZGJhY2sgbW9kZS4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UREVTX09QTU9EX0NGQiAgICAgICggMHgzIDw8IDEyICkgLyogKFRERVMpIENGQiBDaXBoZXIgRmVlZGJhY2sgbW9kZS4gKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfTE9EICAgICAgICAgICAgICAgICggMHgxIDw8IDE1ICkgLyogKFRERVMpIExhc3QgT3V0cHV0IERhdGEgTW9kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19DRkJTICAgICAgICAgICAgICAgKCAweDMgPDwgMTYgKSAvKiAoVERFUykgQ2lwaGVyIEZlZWRiYWNrIERhdGEgU2l6ZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RERVNfQ0ZCU182NF9CSVQgICAgKCAweDAgPDwgMTYgKSAvKiAoVERFUykgNjQtYml0LiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RERVNfQ0ZCU18zMl9CSVQgICAgKCAweDEgPDwgMTYgKSAvKiAoVERFUykgMzItYml0LiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RERVNfQ0ZCU18xNl9CSVQgICAgKCAweDIgPDwgMTYgKSAvKiAoVERFUykgMTYtYml0LiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RERVNfQ0ZCU184X0JJVCAgICAgKCAweDMgPDwgMTYgKSAvKiAoVERFUykgOC1iaXQuICovDQotLyogLS0tLS0tLS0gVERFU19JRVIgOiAoVERFUyBPZmZzZXQ6IDB4MTApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfREFUUkRZICAgICAgICAgICAgICggMHgxIDw8IDAgKSAgLyogKFRERVMpIERBVFJEWSAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19FTkRSWCAgICAgICAgICAgICAgKCAweDEgPDwgMSApICAvKiAoVERFUykgUERDIFJlYWQgQnVmZmVyIEVuZCAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19FTkRUWCAgICAgICAgICAgICAgKCAweDEgPDwgMiApICAvKiAoVERFUykgUERDIFdyaXRlIEJ1ZmZlciBFbmQgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfUlhCVUZGICAgICAgICAgICAgICggMHgxIDw8IDMgKSAgLyogKFRERVMpIFBEQyBSZWFkIEJ1ZmZlciBGdWxsICovDQotI2RlZmluZSBBVDkxQ19UREVTX1RYQlVGRSAgICAgICAgICAgICAoIDB4MSA8PCA0ICkgIC8qIChUREVTKSBQREMgV3JpdGUgQnVmZmVyIEVtcHR5ICovDQotI2RlZmluZSBBVDkxQ19UREVTX1VSQUQgICAgICAgICAgICAgICAoIDB4MSA8PCA4ICkgIC8qIChUREVTKSBVbnNwZWNpZmllZCBSZWdpc3RlciBBY2Nlc3MgRGV0ZWN0aW9uICovDQotLyogLS0tLS0tLS0gVERFU19JRFIgOiAoVERFUyBPZmZzZXQ6IDB4MTQpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gVERFU19JTVIgOiAoVERFUyBPZmZzZXQ6IDB4MTgpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gVERFU19JU1IgOiAoVERFUyBPZmZzZXQ6IDB4MWMpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfVVJBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMHgzIDw8IDEyICkgLyogKFRERVMpIFVuc3BlY2lmaWVkIFJlZ2lzdGVyIEFjY2VzcyBUeXBlIFN0YXR1cyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RERVNfVVJBVF9JTl9EQVRfV1JJVEVfREFUUFJPQyAgICAgKCAweDAgPDwgMTIgKSAvKiAoVERFUykgSW5wdXQgZGF0YSByZWdpc3RlciB3cml0dGVuIGR1cmluZyB0aGUgZGF0YSBwcm9jZXNzaW5nIGluIFBEQyBtb2RlLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RERVNfVVJBVF9PVVRfREFUX1JFQURfREFUUFJPQyAgICAgKCAweDEgPDwgMTIgKSAvKiAoVERFUykgT3V0cHV0IGRhdGEgcmVnaXN0ZXIgcmVhZCBkdXJpbmcgdGhlIGRhdGEgcHJvY2Vzc2luZy4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UREVTX1VSQVRfTU9ERVJFR19XUklURV9EQVRQUk9DICAgICggMHgyIDw8IDEyICkgLyogKFRERVMpIE1vZGUgcmVnaXN0ZXIgd3JpdHRlbiBkdXJpbmcgdGhlIGRhdGEgcHJvY2Vzc2luZy4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UREVTX1VSQVRfV09fUkVHX1JFQUQgICAgICAgICAgICAgICggMHgzIDw8IDEyICkgLyogKFRERVMpIFdyaXRlLW9ubHkgcmVnaXN0ZXIgcmVhZCBhY2Nlc3MuICovDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBUcmlwbGUgRGF0YSBFbmNyeXB0aW9uIFN0YW5kYXJkDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1RERVMgc3RydWN0dXJlICoqKg0KKyNkZWZpbmUgVERFU19DUiAgICAgICAgICggMCkgLy8gQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgVERFU19NUiAgICAgICAgICggNCkgLy8gTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgVERFU19JRVIgICAgICAgICgxNikgLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgVERFU19JRFIgICAgICAgICgyMCkgLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIFRERVNfSU1SICAgICAgICAoMjQpIC8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBUREVTX0lTUiAgICAgICAgKDI4KSAvLyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBUREVTX0tFWTFXeFIgICAgKDMyKSAvLyBLZXkgMSBXb3JkIHggUmVnaXN0ZXINCisjZGVmaW5lIFRERVNfS0VZMld4UiAgICAoNDApIC8vIEtleSAyIFdvcmQgeCBSZWdpc3Rlcg0KKyNkZWZpbmUgVERFU19LRVkzV3hSICAgICg0OCkgLy8gS2V5IDMgV29yZCB4IFJlZ2lzdGVyDQorI2RlZmluZSBUREVTX0lEQVRBeFIgICAgKDY0KSAvLyBJbnB1dCBEYXRhIHggUmVnaXN0ZXINCisjZGVmaW5lIFRERVNfT0RBVEF4UiAgICAoODApIC8vIE91dHB1dCBEYXRhIHggUmVnaXN0ZXINCisjZGVmaW5lIFRERVNfSVZ4UiAgICAgICAoOTYpIC8vIEluaXRpYWxpemF0aW9uIFZlY3RvciB4IFJlZ2lzdGVyDQorI2RlZmluZSBUREVTX1ZSICAgICAgICAgKDI1MikgLy8gVERFUyBWZXJzaW9uIFJlZ2lzdGVyDQorI2RlZmluZSBUREVTX1JQUiAgICAgICAgKDI1NikgLy8gUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBUREVTX1JDUiAgICAgICAgKDI2MCkgLy8gUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBUREVTX1RQUiAgICAgICAgKDI2NCkgLy8gVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgVERFU19UQ1IgICAgICAgICgyNjgpIC8vIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFRERVNfUk5QUiAgICAgICAoMjcyKSAvLyBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgVERFU19STkNSICAgICAgICgyNzYpIC8vIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBUREVTX1ROUFIgICAgICAgKDI4MCkgLy8gVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBUREVTX1ROQ1IgICAgICAgKDI4NCkgLy8gVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBUREVTX1BUQ1IgICAgICAgKDI4OCkgLy8gUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIFRERVNfUFRTUiAgICAgICAoMjkyKSAvLyBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorLy8gLS0tLS0tLS0gVERFU19DUiA6IChUREVTIE9mZnNldDogMHgwKSBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVERFU19TVEFSVCAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoVERFUykgU3RhcnRzIFByb2Nlc3NpbmcNCisjZGVmaW5lIEFUOTFDX1RERVNfU1dSU1QgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKFRERVMpIFNvZnR3YXJlIFJlc2V0DQorLy8gLS0tLS0tLS0gVERFU19NUiA6IChUREVTIE9mZnNldDogMHg0KSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVERFU19DSVBIRVIgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoVERFUykgUHJvY2Vzc2luZyBNb2RlDQorI2RlZmluZSBBVDkxQ19UREVTX1RERVNNT0QgICAgICAgICgweDEgPDwgIDEpIC8vIChUREVTKSBTaW5nbGUgb3IgVHJpcGxlIERFUyBNb2RlDQorI2RlZmluZSBBVDkxQ19UREVTX0tFWU1PRCAgICAgICAgICgweDEgPDwgIDQpIC8vIChUREVTKSBLZXkgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfVERFU19TTU9EICAgICAgICAgICAoMHgzIDw8ICA4KSAvLyAoVERFUykgU3RhcnQgTW9kZQ0KKyNkZWZpbmUgCUFUOTFDX1RERVNfU01PRF9NQU5VQUwgICAgICAgICAgICAgICAoMHgwIDw8ICA4KSAvLyAoVERFUykgTWFudWFsIE1vZGU6IFRoZSBTVEFSVCBiaXQgaW4gcmVnaXN0ZXIgVERFU19DUiBtdXN0IGJlIHNldCB0byBiZWdpbiBlbmNyeXB0aW9uIG9yIGRlY3J5cHRpb24uDQorI2RlZmluZSAJQVQ5MUNfVERFU19TTU9EX0FVVE8gICAgICAgICAgICAgICAgICgweDEgPDwgIDgpIC8vIChUREVTKSBBdXRvIE1vZGU6IG5vIGFjdGlvbiBpbiBUREVTX0NSIGlzIG5lY2Vzc2FyeSAoY2YgZGF0YXNoZWV0KS4NCisjZGVmaW5lIAlBVDkxQ19UREVTX1NNT0RfUERDICAgICAgICAgICAgICAgICAgKDB4MiA8PCAgOCkgLy8gKFRERVMpIFBEQyBNb2RlIChjZiBkYXRhc2hlZXQpLg0KKyNkZWZpbmUgQVQ5MUNfVERFU19PUE1PRCAgICAgICAgICAoMHgzIDw8IDEyKSAvLyAoVERFUykgT3BlcmF0aW9uIE1vZGUNCisjZGVmaW5lIAlBVDkxQ19UREVTX09QTU9EX0VDQiAgICAgICAgICAgICAgICAgICgweDAgPDwgMTIpIC8vIChUREVTKSBFQ0IgRWxlY3Ryb25pYyBDb2RlQm9vayBtb2RlLg0KKyNkZWZpbmUgCUFUOTFDX1RERVNfT1BNT0RfQ0JDICAgICAgICAgICAgICAgICAgKDB4MSA8PCAxMikgLy8gKFRERVMpIENCQyBDaXBoZXIgQmxvY2sgQ2hhaW5pbmcgbW9kZS4NCisjZGVmaW5lIAlBVDkxQ19UREVTX09QTU9EX09GQiAgICAgICAgICAgICAgICAgICgweDIgPDwgMTIpIC8vIChUREVTKSBPRkIgT3V0cHV0IEZlZWRiYWNrIG1vZGUuDQorI2RlZmluZSAJQVQ5MUNfVERFU19PUE1PRF9DRkIgICAgICAgICAgICAgICAgICAoMHgzIDw8IDEyKSAvLyAoVERFUykgQ0ZCIENpcGhlciBGZWVkYmFjayBtb2RlLg0KKyNkZWZpbmUgQVQ5MUNfVERFU19MT0QgICAgICAgICAgICAoMHgxIDw8IDE1KSAvLyAoVERFUykgTGFzdCBPdXRwdXQgRGF0YSBNb2RlDQorI2RlZmluZSBBVDkxQ19UREVTX0NGQlMgICAgICAgICAgICgweDMgPDwgMTYpIC8vIChUREVTKSBDaXBoZXIgRmVlZGJhY2sgRGF0YSBTaXplDQorI2RlZmluZSAJQVQ5MUNfVERFU19DRkJTXzY0X0JJVCAgICAgICAgICAgICAgICgweDAgPDwgMTYpIC8vIChUREVTKSA2NC1iaXQuDQorI2RlZmluZSAJQVQ5MUNfVERFU19DRkJTXzMyX0JJVCAgICAgICAgICAgICAgICgweDEgPDwgMTYpIC8vIChUREVTKSAzMi1iaXQuDQorI2RlZmluZSAJQVQ5MUNfVERFU19DRkJTXzE2X0JJVCAgICAgICAgICAgICAgICgweDIgPDwgMTYpIC8vIChUREVTKSAxNi1iaXQuDQorI2RlZmluZSAJQVQ5MUNfVERFU19DRkJTXzhfQklUICAgICAgICAgICAgICAgICgweDMgPDwgMTYpIC8vIChUREVTKSA4LWJpdC4NCisvLyAtLS0tLS0tLSBUREVTX0lFUiA6IChUREVTIE9mZnNldDogMHgxMCkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RERVNfREFUUkRZICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFRERVMpIERBVFJEWQ0KKyNkZWZpbmUgQVQ5MUNfVERFU19FTkRSWCAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoVERFUykgUERDIFJlYWQgQnVmZmVyIEVuZA0KKyNkZWZpbmUgQVQ5MUNfVERFU19FTkRUWCAgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoVERFUykgUERDIFdyaXRlIEJ1ZmZlciBFbmQNCisjZGVmaW5lIEFUOTFDX1RERVNfUlhCVUZGICAgICAgICAgKDB4MSA8PCAgMykgLy8gKFRERVMpIFBEQyBSZWFkIEJ1ZmZlciBGdWxsDQorI2RlZmluZSBBVDkxQ19UREVTX1RYQlVGRSAgICAgICAgICgweDEgPDwgIDQpIC8vIChUREVTKSBQREMgV3JpdGUgQnVmZmVyIEVtcHR5DQorI2RlZmluZSBBVDkxQ19UREVTX1VSQUQgICAgICAgICAgICgweDEgPDwgIDgpIC8vIChUREVTKSBVbnNwZWNpZmllZCBSZWdpc3RlciBBY2Nlc3MgRGV0ZWN0aW9uDQorLy8gLS0tLS0tLS0gVERFU19JRFIgOiAoVERFUyBPZmZzZXQ6IDB4MTQpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFRERVNfSU1SIDogKFRERVMgT2Zmc2V0OiAweDE4KSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBUREVTX0lTUiA6IChUREVTIE9mZnNldDogMHgxYykgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RERVNfVVJBVCAgICAgICAgICAgKDB4MyA8PCAxMikgLy8gKFRERVMpIFVuc3BlY2lmaWVkIFJlZ2lzdGVyIEFjY2VzcyBUeXBlIFN0YXR1cw0KKyNkZWZpbmUgCUFUOTFDX1RERVNfVVJBVF9JTl9EQVRfV1JJVEVfREFUUFJPQyAoMHgwIDw8IDEyKSAvLyAoVERFUykgSW5wdXQgZGF0YSByZWdpc3RlciB3cml0dGVuIGR1cmluZyB0aGUgZGF0YSBwcm9jZXNzaW5nIGluIFBEQyBtb2RlLg0KKyNkZWZpbmUgCUFUOTFDX1RERVNfVVJBVF9PVVRfREFUX1JFQURfREFUUFJPQyAoMHgxIDw8IDEyKSAvLyAoVERFUykgT3V0cHV0IGRhdGEgcmVnaXN0ZXIgcmVhZCBkdXJpbmcgdGhlIGRhdGEgcHJvY2Vzc2luZy4NCisjZGVmaW5lIAlBVDkxQ19UREVTX1VSQVRfTU9ERVJFR19XUklURV9EQVRQUk9DICgweDIgPDwgMTIpIC8vIChUREVTKSBNb2RlIHJlZ2lzdGVyIHdyaXR0ZW4gZHVyaW5nIHRoZSBkYXRhIHByb2Nlc3NpbmcuDQorI2RlZmluZSAJQVQ5MUNfVERFU19VUkFUX1dPX1JFR19SRUFEICAgICAgICAgICgweDMgPDwgMTIpIC8vIChUREVTKSBXcml0ZS1vbmx5IHJlZ2lzdGVyIHJlYWQgYWNjZXNzLg0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgICBSRUdJU1RFUiBBRERSRVNTIERFRklOSVRJT04gRk9SIEFUOTFTQU03WDEyOCAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBTWVMgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBBSUMgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19BSUNfSVZSICAgICAgICAgICAgICAoIDB4RkZGRkYxMDAgKSAvKiAoQUlDKSBJUlEgVmVjdG9yIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BSUNfU01SICAgICAgICAgICAgICAoIDB4RkZGRkYwMDAgKSAvKiAoQUlDKSBTb3VyY2UgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX0ZWUiAgICAgICAgICAgICAgKCAweEZGRkZGMTA0ICkgLyogKEFJQykgRklRIFZlY3RvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX0RDUiAgICAgICAgICAgICAgKCAweEZGRkZGMTM4ICkgLyogKEFJQykgRGVidWcgQ29udHJvbCBSZWdpc3RlciAoUHJvdGVjdCkgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19FT0lDUiAgICAgICAgICAgICggMHhGRkZGRjEzMCApIC8qIChBSUMpIEVuZCBvZiBJbnRlcnJ1cHQgQ29tbWFuZCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX1NWUiAgICAgICAgICAgICAgKCAweEZGRkZGMDgwICkgLyogKEFJQykgU291cmNlIFZlY3RvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX0ZGU1IgICAgICAgICAgICAgKCAweEZGRkZGMTQ4ICkgLyogKEFJQykgRmFzdCBGb3JjaW5nIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX0lDQ1IgICAgICAgICAgICAgKCAweEZGRkZGMTI4ICkgLyogKEFJQykgSW50ZXJydXB0IENsZWFyIENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19JU1IgICAgICAgICAgICAgICggMHhGRkZGRjEwOCApIC8qIChBSUMpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19JTVIgICAgICAgICAgICAgICggMHhGRkZGRjExMCApIC8qIChBSUMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BSUNfSVBSICAgICAgICAgICAgICAoIDB4RkZGRkYxMEMgKSAvKiAoQUlDKSBJbnRlcnJ1cHQgUGVuZGluZyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX0ZGRVIgICAgICAgICAgICAgKCAweEZGRkZGMTQwICkgLyogKEFJQykgRmFzdCBGb3JjaW5nIEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX0lFQ1IgICAgICAgICAgICAgKCAweEZGRkZGMTIwICkgLyogKEFJQykgSW50ZXJydXB0IEVuYWJsZSBDb21tYW5kIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BSUNfSVNDUiAgICAgICAgICAgICAoIDB4RkZGRkYxMkMgKSAvKiAoQUlDKSBJbnRlcnJ1cHQgU2V0IENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19GRkRSICAgICAgICAgICAgICggMHhGRkZGRjE0NCApIC8qIChBSUMpIEZhc3QgRm9yY2luZyBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BSUNfQ0lTUiAgICAgICAgICAgICAoIDB4RkZGRkYxMTQgKSAvKiAoQUlDKSBDb3JlIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19JRENSICAgICAgICAgICAgICggMHhGRkZGRjEyNCApIC8qIChBSUMpIEludGVycnVwdCBEaXNhYmxlIENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19TUFUgICAgICAgICAgICAgICggMHhGRkZGRjEzNCApIC8qIChBSUMpIFNwdXJpb3VzIFZlY3RvciBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX0RCR1UgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19EQkdVX1RDUiAgICAgICAgICAgICAoIDB4RkZGRkYzMEMgKSAvKiAoUERDX0RCR1UpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfUk5QUiAgICAgICAgICAgICggMHhGRkZGRjMxMCApIC8qIChQRENfREJHVSkgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfVE5QUiAgICAgICAgICAgICggMHhGRkZGRjMxOCApIC8qIChQRENfREJHVSkgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19EQkdVX1RQUiAgICAgICAgICAgICAoIDB4RkZGRkYzMDggKSAvKiAoUERDX0RCR1UpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfUlBSICAgICAgICAgICAgICggMHhGRkZGRjMwMCApIC8qIChQRENfREJHVSkgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19EQkdVX1JDUiAgICAgICAgICAgICAoIDB4RkZGRkYzMDQgKSAvKiAoUERDX0RCR1UpIFJlY2VpdmUgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9STkNSICAgICAgICAgICAgKCAweEZGRkZGMzE0ICkgLyogKFBEQ19EQkdVKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9QVENSICAgICAgICAgICAgKCAweEZGRkZGMzIwICkgLyogKFBEQ19EQkdVKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9QVFNSICAgICAgICAgICAgKCAweEZGRkZGMzI0ICkgLyogKFBEQ19EQkdVKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19EQkdVX1ROQ1IgICAgICAgICAgICAoIDB4RkZGRkYzMUMgKSAvKiAoUERDX0RCR1UpIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgREJHVSBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfRVhJRCAgICAgICAgICAgICggMHhGRkZGRjI0NCApIC8qIChEQkdVKSBDaGlwIElEIEV4dGVuc2lvbiBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9CUkdSICAgICAgICAgICAgKCAweEZGRkZGMjIwICkgLyogKERCR1UpIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfSURSICAgICAgICAgICAgICggMHhGRkZGRjIwQyApIC8qIChEQkdVKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9DU1IgICAgICAgICAgICAgKCAweEZGRkZGMjE0ICkgLyogKERCR1UpIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19EQkdVX0NJRFIgICAgICAgICAgICAoIDB4RkZGRkYyNDAgKSAvKiAoREJHVSkgQ2hpcCBJRCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9NUiAgICAgICAgICAgICAgKCAweEZGRkZGMjA0ICkgLyogKERCR1UpIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfSU1SICAgICAgICAgICAgICggMHhGRkZGRjIxMCApIC8qIChEQkdVKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9DUiAgICAgICAgICAgICAgKCAweEZGRkZGMjAwICkgLyogKERCR1UpIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfRk5UUiAgICAgICAgICAgICggMHhGRkZGRjI0OCApIC8qIChEQkdVKSBGb3JjZSBOVFJTVCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9USFIgICAgICAgICAgICAgKCAweEZGRkZGMjFDICkgLyogKERCR1UpIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfUkhSICAgICAgICAgICAgICggMHhGRkZGRjIxOCApIC8qIChEQkdVKSBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19EQkdVX0lFUiAgICAgICAgICAgICAoIDB4RkZGRkYyMDggKSAvKiAoREJHVSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUElPQSBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfT0RSICAgICAgICAgICAgICggMHhGRkZGRjQxNCApIC8qIChQSU9BKSBPdXRwdXQgRGlzYWJsZSBSZWdpc3RlcnIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfU09EUiAgICAgICAgICAgICggMHhGRkZGRjQzMCApIC8qIChQSU9BKSBTZXQgT3V0cHV0IERhdGEgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfSVNSICAgICAgICAgICAgICggMHhGRkZGRjQ0QyApIC8qIChQSU9BKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX0FCU1IgICAgICAgICAgICAoIDB4RkZGRkY0NzggKSAvKiAoUElPQSkgQUIgU2VsZWN0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9JRVIgICAgICAgICAgICAgKCAweEZGRkZGNDQwICkgLyogKFBJT0EpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfUFBVRFIgICAgICAgICAgICggMHhGRkZGRjQ2MCApIC8qIChQSU9BKSBQdWxsLXVwIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfSU1SICAgICAgICAgICAgICggMHhGRkZGRjQ0OCApIC8qIChQSU9BKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9QRVIgICAgICAgICAgICAgKCAweEZGRkZGNDAwICkgLyogKFBJT0EpIFBJTyBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfSUZEUiAgICAgICAgICAgICggMHhGRkZGRjQyNCApIC8qIChQSU9BKSBJbnB1dCBGaWx0ZXIgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9PV0RSICAgICAgICAgICAgKCAweEZGRkZGNEE0ICkgLyogKFBJT0EpIE91dHB1dCBXcml0ZSBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX01EU1IgICAgICAgICAgICAoIDB4RkZGRkY0NTggKSAvKiAoUElPQSkgTXVsdGktZHJpdmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9JRFIgICAgICAgICAgICAgKCAweEZGRkZGNDQ0ICkgLyogKFBJT0EpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX09EU1IgICAgICAgICAgICAoIDB4RkZGRkY0MzggKSAvKiAoUElPQSkgT3V0cHV0IERhdGEgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX1BQVVNSICAgICAgICAgICAoIDB4RkZGRkY0NjggKSAvKiAoUElPQSkgUHVsbC11cCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfT1dTUiAgICAgICAgICAgICggMHhGRkZGRjRBOCApIC8qIChQSU9BKSBPdXRwdXQgV3JpdGUgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX0JTUiAgICAgICAgICAgICAoIDB4RkZGRkY0NzQgKSAvKiAoUElPQSkgU2VsZWN0IEIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfT1dFUiAgICAgICAgICAgICggMHhGRkZGRjRBMCApIC8qIChQSU9BKSBPdXRwdXQgV3JpdGUgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX0lGRVIgICAgICAgICAgICAoIDB4RkZGRkY0MjAgKSAvKiAoUElPQSkgSW5wdXQgRmlsdGVyIEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9QRFNSICAgICAgICAgICAgKCAweEZGRkZGNDNDICkgLyogKFBJT0EpIFBpbiBEYXRhIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9QUFVFUiAgICAgICAgICAgKCAweEZGRkZGNDY0ICkgLyogKFBJT0EpIFB1bGwtdXAgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX09TUiAgICAgICAgICAgICAoIDB4RkZGRkY0MTggKSAvKiAoUElPQSkgT3V0cHV0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9BU1IgICAgICAgICAgICAgKCAweEZGRkZGNDcwICkgLyogKFBJT0EpIFNlbGVjdCBBIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX01ERFIgICAgICAgICAgICAoIDB4RkZGRkY0NTQgKSAvKiAoUElPQSkgTXVsdGktZHJpdmVyIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfQ09EUiAgICAgICAgICAgICggMHhGRkZGRjQzNCApIC8qIChQSU9BKSBDbGVhciBPdXRwdXQgRGF0YSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9NREVSICAgICAgICAgICAgKCAweEZGRkZGNDUwICkgLyogKFBJT0EpIE11bHRpLWRyaXZlciBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfUERSICAgICAgICAgICAgICggMHhGRkZGRjQwNCApIC8qIChQSU9BKSBQSU8gRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9JRlNSICAgICAgICAgICAgKCAweEZGRkZGNDI4ICkgLyogKFBJT0EpIElucHV0IEZpbHRlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfT0VSICAgICAgICAgICAgICggMHhGRkZGRjQxMCApIC8qIChQSU9BKSBPdXRwdXQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX1BTUiAgICAgICAgICAgICAoIDB4RkZGRkY0MDggKSAvKiAoUElPQSkgUElPIFN0YXR1cyBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUElPQiBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0JfT1dEUiAgICAgICAgICAgICggMHhGRkZGRjZBNCApIC8qIChQSU9CKSBPdXRwdXQgV3JpdGUgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9NREVSICAgICAgICAgICAgKCAweEZGRkZGNjUwICkgLyogKFBJT0IpIE11bHRpLWRyaXZlciBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0JfUFBVU1IgICAgICAgICAgICggMHhGRkZGRjY2OCApIC8qIChQSU9CKSBQdWxsLXVwIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9JTVIgICAgICAgICAgICAgKCAweEZGRkZGNjQ4ICkgLyogKFBJT0IpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX0FTUiAgICAgICAgICAgICAoIDB4RkZGRkY2NzAgKSAvKiAoUElPQikgU2VsZWN0IEEgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0JfUFBVRFIgICAgICAgICAgICggMHhGRkZGRjY2MCApIC8qIChQSU9CKSBQdWxsLXVwIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0JfUFNSICAgICAgICAgICAgICggMHhGRkZGRjYwOCApIC8qIChQSU9CKSBQSU8gU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX0lFUiAgICAgICAgICAgICAoIDB4RkZGRkY2NDAgKSAvKiAoUElPQikgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9DT0RSICAgICAgICAgICAgKCAweEZGRkZGNjM0ICkgLyogKFBJT0IpIENsZWFyIE91dHB1dCBEYXRhIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX09XRVIgICAgICAgICAgICAoIDB4RkZGRkY2QTAgKSAvKiAoUElPQikgT3V0cHV0IFdyaXRlIEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9BQlNSICAgICAgICAgICAgKCAweEZGRkZGNjc4ICkgLyogKFBJT0IpIEFCIFNlbGVjdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0JfSUZEUiAgICAgICAgICAgICggMHhGRkZGRjYyNCApIC8qIChQSU9CKSBJbnB1dCBGaWx0ZXIgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9QRFNSICAgICAgICAgICAgKCAweEZGRkZGNjNDICkgLyogKFBJT0IpIFBpbiBEYXRhIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9JRFIgICAgICAgICAgICAgKCAweEZGRkZGNjQ0ICkgLyogKFBJT0IpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX09XU1IgICAgICAgICAgICAoIDB4RkZGRkY2QTggKSAvKiAoUElPQikgT3V0cHV0IFdyaXRlIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9QRFIgICAgICAgICAgICAgKCAweEZGRkZGNjA0ICkgLyogKFBJT0IpIFBJTyBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX09EUiAgICAgICAgICAgICAoIDB4RkZGRkY2MTQgKSAvKiAoUElPQikgT3V0cHV0IERpc2FibGUgUmVnaXN0ZXJyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX0lGU1IgICAgICAgICAgICAoIDB4RkZGRkY2MjggKSAvKiAoUElPQikgSW5wdXQgRmlsdGVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9QUFVFUiAgICAgICAgICAgKCAweEZGRkZGNjY0ICkgLyogKFBJT0IpIFB1bGwtdXAgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX1NPRFIgICAgICAgICAgICAoIDB4RkZGRkY2MzAgKSAvKiAoUElPQikgU2V0IE91dHB1dCBEYXRhIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX0lTUiAgICAgICAgICAgICAoIDB4RkZGRkY2NEMgKSAvKiAoUElPQikgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9PRFNSICAgICAgICAgICAgKCAweEZGRkZGNjM4ICkgLyogKFBJT0IpIE91dHB1dCBEYXRhIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9PU1IgICAgICAgICAgICAgKCAweEZGRkZGNjE4ICkgLyogKFBJT0IpIE91dHB1dCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0JfTURTUiAgICAgICAgICAgICggMHhGRkZGRjY1OCApIC8qIChQSU9CKSBNdWx0aS1kcml2ZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX0lGRVIgICAgICAgICAgICAoIDB4RkZGRkY2MjAgKSAvKiAoUElPQikgSW5wdXQgRmlsdGVyIEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9CU1IgICAgICAgICAgICAgKCAweEZGRkZGNjc0ICkgLyogKFBJT0IpIFNlbGVjdCBCIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX01ERFIgICAgICAgICAgICAoIDB4RkZGRkY2NTQgKSAvKiAoUElPQikgTXVsdGktZHJpdmVyIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0JfT0VSICAgICAgICAgICAgICggMHhGRkZGRjYxMCApIC8qIChQSU9CKSBPdXRwdXQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX1BFUiAgICAgICAgICAgICAoIDB4RkZGRkY2MDAgKSAvKiAoUElPQikgUElPIEVuYWJsZSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0tHUiBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX0NLR1JfTU9SICAgICAgICAgICAgICggMHhGRkZGRkMyMCApIC8qIChDS0dSKSBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NLR1JfUExMUiAgICAgICAgICAgICggMHhGRkZGRkMyQyApIC8qIChDS0dSKSBQTEwgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NLR1JfTUNGUiAgICAgICAgICAgICggMHhGRkZGRkMyNCApIC8qIChDS0dSKSBNYWluIENsb2NrICBGcmVxdWVuY3kgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBNQyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19JRFIgICAgICAgICAgICAgICggMHhGRkZGRkM2NCApIC8qIChQTUMpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QTUNfTU9SICAgICAgICAgICAgICAoIDB4RkZGRkZDMjAgKSAvKiAoUE1DKSBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19QTExSICAgICAgICAgICAgICggMHhGRkZGRkMyQyApIC8qIChQTUMpIFBMTCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDRVIgICAgICAgICAgICAgKCAweEZGRkZGQzEwICkgLyogKFBNQykgUGVyaXBoZXJhbCBDbG9jayBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19QQ0tSICAgICAgICAgICAgICggMHhGRkZGRkM0MCApIC8qIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX01DS1IgICAgICAgICAgICAgKCAweEZGRkZGQzMwICkgLyogKFBNQykgTWFzdGVyIENsb2NrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QTUNfU0NEUiAgICAgICAgICAgICAoIDB4RkZGRkZDMDQgKSAvKiAoUE1DKSBTeXN0ZW0gQ2xvY2sgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDRFIgICAgICAgICAgICAgKCAweEZGRkZGQzE0ICkgLyogKFBNQykgUGVyaXBoZXJhbCBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QTUNfU0NTUiAgICAgICAgICAgICAoIDB4RkZGRkZDMDggKSAvKiAoUE1DKSBTeXN0ZW0gQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QTUNfUENTUiAgICAgICAgICAgICAoIDB4RkZGRkZDMTggKSAvKiAoUE1DKSBQZXJpcGhlcmFsIENsb2NrIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX01DRlIgICAgICAgICAgICAgKCAweEZGRkZGQzI0ICkgLyogKFBNQykgTWFpbiBDbG9jayAgRnJlcXVlbmN5IFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QTUNfU0NFUiAgICAgICAgICAgICAoIDB4RkZGRkZDMDAgKSAvKiAoUE1DKSBTeXN0ZW0gQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QTUNfSU1SICAgICAgICAgICAgICAoIDB4RkZGRkZDNkMgKSAvKiAoUE1DKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX0lFUiAgICAgICAgICAgICAgKCAweEZGRkZGQzYwICkgLyogKFBNQykgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1NSICAgICAgICAgICAgICAgKCAweEZGRkZGQzY4ICkgLyogKFBNQykgU3RhdHVzIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBSU1RDIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfUlNUQ19SQ1IgICAgICAgICAgICAgKCAweEZGRkZGRDAwICkgLyogKFJTVEMpIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1JTVENfUk1SICAgICAgICAgICAgICggMHhGRkZGRkQwOCApIC8qIChSU1RDKSBSZXNldCBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19SU1RDX1JTUiAgICAgICAgICAgICAoIDB4RkZGRkZEMDQgKSAvKiAoUlNUQykgUmVzZXQgU3RhdHVzIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBSVFRDIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfUlRUQ19SVFNSICAgICAgICAgICAgKCAweEZGRkZGRDJDICkgLyogKFJUVEMpIFJlYWwtdGltZSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1JUVENfUlRNUiAgICAgICAgICAgICggMHhGRkZGRkQyMCApIC8qIChSVFRDKSBSZWFsLXRpbWUgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUlRUQ19SVFZSICAgICAgICAgICAgKCAweEZGRkZGRDI4ICkgLyogKFJUVEMpIFJlYWwtdGltZSBWYWx1ZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUlRUQ19SVEFSICAgICAgICAgICAgKCAweEZGRkZGRDI0ICkgLyogKFJUVEMpIFJlYWwtdGltZSBBbGFybSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUElUQyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1BJVENfUElWUiAgICAgICAgICAgICggMHhGRkZGRkQzOCApIC8qIChQSVRDKSBQZXJpb2QgSW50ZXJ2YWwgVmFsdWUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJVENfUElTUiAgICAgICAgICAgICggMHhGRkZGRkQzNCApIC8qIChQSVRDKSBQZXJpb2QgSW50ZXJ2YWwgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSVRDX1BJSVIgICAgICAgICAgICAoIDB4RkZGRkZEM0MgKSAvKiAoUElUQykgUGVyaW9kIEludGVydmFsIEltYWdlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSVRDX1BJTVIgICAgICAgICAgICAoIDB4RkZGRkZEMzAgKSAvKiAoUElUQykgUGVyaW9kIEludGVydmFsIE1vZGUgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFdEVEMgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19XRFRDX1dEQ1IgICAgICAgICAgICAoIDB4RkZGRkZENDAgKSAvKiAoV0RUQykgV2F0Y2hkb2cgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfV0RUQ19XRFNSICAgICAgICAgICAgKCAweEZGRkZGRDQ4ICkgLyogKFdEVEMpIFdhdGNoZG9nIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfV0RUQ19XRE1SICAgICAgICAgICAgKCAweEZGRkZGRDQ0ICkgLyogKFdEVEMpIFdhdGNoZG9nIE1vZGUgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFZSRUcgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19WUkVHX01SICAgICAgICAgICAgICAoIDB4RkZGRkZENjAgKSAvKiAoVlJFRykgVm9sdGFnZSBSZWd1bGF0b3IgTW9kZSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgTUMgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19NQ19BU1IgICAgICAgICAgICAgICAoIDB4RkZGRkZGMDQgKSAvKiAoTUMpIE1DIEFib3J0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfUkNSICAgICAgICAgICAgICAgKCAweEZGRkZGRjAwICkgLyogKE1DKSBNQyBSZW1hcCBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19NQ19GQ1IgICAgICAgICAgICAgICAoIDB4RkZGRkZGNjQgKSAvKiAoTUMpIE1DIEZsYXNoIENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0FBU1IgICAgICAgICAgICAgICggMHhGRkZGRkYwOCApIC8qIChNQykgTUMgQWJvcnQgQWRkcmVzcyBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0ZTUiAgICAgICAgICAgICAgICggMHhGRkZGRkY2OCApIC8qIChNQykgTUMgRmxhc2ggU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19NQ19GTVIgICAgICAgICAgICAgICAoIDB4RkZGRkZGNjAgKSAvKiAoTUMpIE1DIEZsYXNoIE1vZGUgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19TUEkxIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMV9QVENSICAgICAgICAgICAgKCAweEZGRkU0MTIwICkgLyogKFBEQ19TUEkxKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMV9SUFIgICAgICAgICAgICAgKCAweEZGRkU0MTAwICkgLyogKFBEQ19TUEkxKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTFfVE5DUiAgICAgICAgICAgICggMHhGRkZFNDExQyApIC8qIChQRENfU1BJMSkgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkxX1RQUiAgICAgICAgICAgICAoIDB4RkZGRTQxMDggKSAvKiAoUERDX1NQSTEpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTFfVE5QUiAgICAgICAgICAgICggMHhGRkZFNDExOCApIC8qIChQRENfU1BJMSkgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkxX1RDUiAgICAgICAgICAgICAoIDB4RkZGRTQxMEMgKSAvKiAoUERDX1NQSTEpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTFfUkNSICAgICAgICAgICAgICggMHhGRkZFNDEwNCApIC8qIChQRENfU1BJMSkgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkxX1JOUFIgICAgICAgICAgICAoIDB4RkZGRTQxMTAgKSAvKiAoUERDX1NQSTEpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkxX1JOQ1IgICAgICAgICAgICAoIDB4RkZGRTQxMTQgKSAvKiAoUERDX1NQSTEpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkxX1BUU1IgICAgICAgICAgICAoIDB4RkZGRTQxMjQgKSAvKiAoUERDX1NQSTEpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFNQSTEgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19TUEkxX0lNUiAgICAgICAgICAgICAoIDB4RkZGRTQwMUMgKSAvKiAoU1BJMSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTFfSUVSICAgICAgICAgICAgICggMHhGRkZFNDAxNCApIC8qIChTUEkxKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkxX01SICAgICAgICAgICAgICAoIDB4RkZGRTQwMDQgKSAvKiAoU1BJMSkgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMV9SRFIgICAgICAgICAgICAgKCAweEZGRkU0MDA4ICkgLyogKFNQSTEpIFJlY2VpdmUgRGF0YSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMV9JRFIgICAgICAgICAgICAgKCAweEZGRkU0MDE4ICkgLyogKFNQSTEpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkxX1NSICAgICAgICAgICAgICAoIDB4RkZGRTQwMTAgKSAvKiAoU1BJMSkgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkxX1REUiAgICAgICAgICAgICAoIDB4RkZGRTQwMEMgKSAvKiAoU1BJMSkgVHJhbnNtaXQgRGF0YSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMV9DUiAgICAgICAgICAgICAgKCAweEZGRkU0MDAwICkgLyogKFNQSTEpIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTFfQ1NSICAgICAgICAgICAgICggMHhGRkZFNDAzMCApIC8qIChTUEkxKSBDaGlwIFNlbGVjdCBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX1NQSTAgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19TUEkwX1BUQ1IgICAgICAgICAgICAoIDB4RkZGRTAxMjAgKSAvKiAoUERDX1NQSTApIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkwX1RQUiAgICAgICAgICAgICAoIDB4RkZGRTAxMDggKSAvKiAoUERDX1NQSTApIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTBfVENSICAgICAgICAgICAgICggMHhGRkZFMDEwQyApIC8qIChQRENfU1BJMCkgVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMF9SQ1IgICAgICAgICAgICAgKCAweEZGRkUwMTA0ICkgLyogKFBEQ19TUEkwKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTBfUFRTUiAgICAgICAgICAgICggMHhGRkZFMDEyNCApIC8qIChQRENfU1BJMCkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMF9STlBSICAgICAgICAgICAgKCAweEZGRkUwMTEwICkgLyogKFBEQ19TUEkwKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMF9SUFIgICAgICAgICAgICAgKCAweEZGRkUwMTAwICkgLyogKFBEQ19TUEkwKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTBfVE5DUiAgICAgICAgICAgICggMHhGRkZFMDExQyApIC8qIChQRENfU1BJMCkgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkwX1JOQ1IgICAgICAgICAgICAoIDB4RkZGRTAxMTQgKSAvKiAoUERDX1NQSTApIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkwX1ROUFIgICAgICAgICAgICAoIDB4RkZGRTAxMTggKSAvKiAoUERDX1NQSTApIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgU1BJMCBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTBfSUVSICAgICAgICAgICAgICggMHhGRkZFMDAxNCApIC8qIChTUEkwKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkwX1NSICAgICAgICAgICAgICAoIDB4RkZGRTAwMTAgKSAvKiAoU1BJMCkgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkwX0lEUiAgICAgICAgICAgICAoIDB4RkZGRTAwMTggKSAvKiAoU1BJMCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTBfQ1IgICAgICAgICAgICAgICggMHhGRkZFMDAwMCApIC8qIChTUEkwKSBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkwX01SICAgICAgICAgICAgICAoIDB4RkZGRTAwMDQgKSAvKiAoU1BJMCkgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMF9JTVIgICAgICAgICAgICAgKCAweEZGRkUwMDFDICkgLyogKFNQSTApIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkwX1REUiAgICAgICAgICAgICAoIDB4RkZGRTAwMEMgKSAvKiAoU1BJMCkgVHJhbnNtaXQgRGF0YSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMF9SRFIgICAgICAgICAgICAgKCAweEZGRkUwMDA4ICkgLyogKFNQSTApIFJlY2VpdmUgRGF0YSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMF9DU1IgICAgICAgICAgICAgKCAweEZGRkUwMDMwICkgLyogKFNQSTApIENoaXAgU2VsZWN0IFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfVVMxIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1JOQ1IgICAgICAgICAgICAgKCAweEZGRkM0MTE0ICkgLyogKFBEQ19VUzEpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfUFRDUiAgICAgICAgICAgICAoIDB4RkZGQzQxMjAgKSAvKiAoUERDX1VTMSkgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMV9UQ1IgICAgICAgICAgICAgICggMHhGRkZDNDEwQyApIC8qIChQRENfVVMxKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfUFRTUiAgICAgICAgICAgICAoIDB4RkZGQzQxMjQgKSAvKiAoUERDX1VTMSkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1ROUFIgICAgICAgICAgICAgKCAweEZGRkM0MTE4ICkgLyogKFBEQ19VUzEpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1JDUiAgICAgICAgICAgICAgKCAweEZGRkM0MTA0ICkgLyogKFBEQ19VUzEpIFJlY2VpdmUgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1JOUFIgICAgICAgICAgICAgKCAweEZGRkM0MTEwICkgLyogKFBEQ19VUzEpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfUlBSICAgICAgICAgICAgICAoIDB4RkZGQzQxMDAgKSAvKiAoUERDX1VTMSkgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfVE5DUiAgICAgICAgICAgICAoIDB4RkZGQzQxMUMgKSAvKiAoUERDX1VTMSkgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfVFBSICAgICAgICAgICAgICAoIDB4RkZGQzQxMDggKSAvKiAoUERDX1VTMSkgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVVMxIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX0lGICAgICAgICAgICAgICAgKCAweEZGRkM0MDRDICkgLyogKFVTMSkgSVJEQV9GSUxURVIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMV9ORVIgICAgICAgICAgICAgICggMHhGRkZDNDA0NCApIC8qIChVUzEpIE5iIEVycm9ycyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1JUT1IgICAgICAgICAgICAgKCAweEZGRkM0MDI0ICkgLyogKFVTMSkgUmVjZWl2ZXIgVGltZS1vdXQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMV9DU1IgICAgICAgICAgICAgICggMHhGRkZDNDAxNCApIC8qIChVUzEpIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfSURSICAgICAgICAgICAgICAoIDB4RkZGQzQwMEMgKSAvKiAoVVMxKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX0lFUiAgICAgICAgICAgICAgKCAweEZGRkM0MDA4ICkgLyogKFVTMSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1RIUiAgICAgICAgICAgICAgKCAweEZGRkM0MDFDICkgLyogKFVTMSkgVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1RUR1IgICAgICAgICAgICAgKCAweEZGRkM0MDI4ICkgLyogKFVTMSkgVHJhbnNtaXR0ZXIgVGltZS1ndWFyZCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1JIUiAgICAgICAgICAgICAgKCAweEZGRkM0MDE4ICkgLyogKFVTMSkgUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX0JSR1IgICAgICAgICAgICAgKCAweEZGRkM0MDIwICkgLyogKFVTMSkgQmF1ZCBSYXRlIEdlbmVyYXRvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX0lNUiAgICAgICAgICAgICAgKCAweEZGRkM0MDEwICkgLyogKFVTMSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMV9GSURJICAgICAgICAgICAgICggMHhGRkZDNDA0MCApIC8qIChVUzEpIEZJX0RJX1JhdGlvIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfQ1IgICAgICAgICAgICAgICAoIDB4RkZGQzQwMDAgKSAvKiAoVVMxKSBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfTVIgICAgICAgICAgICAgICAoIDB4RkZGQzQwMDQgKSAvKiAoVVMxKSBNb2RlIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfVVMwIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX1ROUFIgICAgICAgICAgICAgKCAweEZGRkMwMTE4ICkgLyogKFBEQ19VUzApIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX1JOUFIgICAgICAgICAgICAgKCAweEZGRkMwMTEwICkgLyogKFBEQ19VUzApIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzBfVENSICAgICAgICAgICAgICAoIDB4RkZGQzAxMEMgKSAvKiAoUERDX1VTMCkgVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX1BUQ1IgICAgICAgICAgICAgKCAweEZGRkMwMTIwICkgLyogKFBEQ19VUzApIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzBfUFRTUiAgICAgICAgICAgICAoIDB4RkZGQzAxMjQgKSAvKiAoUERDX1VTMCkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX1ROQ1IgICAgICAgICAgICAgKCAweEZGRkMwMTFDICkgLyogKFBEQ19VUzApIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX1RQUiAgICAgICAgICAgICAgKCAweEZGRkMwMTA4ICkgLyogKFBEQ19VUzApIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9SQ1IgICAgICAgICAgICAgICggMHhGRkZDMDEwNCApIC8qIChQRENfVVMwKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9SUFIgICAgICAgICAgICAgICggMHhGRkZDMDEwMCApIC8qIChQRENfVVMwKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9STkNSICAgICAgICAgICAgICggMHhGRkZDMDExNCApIC8qIChQRENfVVMwKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVVMwIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX0JSR1IgICAgICAgICAgICAgKCAweEZGRkMwMDIwICkgLyogKFVTMCkgQmF1ZCBSYXRlIEdlbmVyYXRvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX05FUiAgICAgICAgICAgICAgKCAweEZGRkMwMDQ0ICkgLyogKFVTMCkgTmIgRXJyb3JzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzBfQ1IgICAgICAgICAgICAgICAoIDB4RkZGQzAwMDAgKSAvKiAoVVMwKSBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzBfSU1SICAgICAgICAgICAgICAoIDB4RkZGQzAwMTAgKSAvKiAoVVMwKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX0ZJREkgICAgICAgICAgICAgKCAweEZGRkMwMDQwICkgLyogKFVTMCkgRklfRElfUmF0aW8gUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9UVEdSICAgICAgICAgICAgICggMHhGRkZDMDAyOCApIC8qIChVUzApIFRyYW5zbWl0dGVyIFRpbWUtZ3VhcmQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9NUiAgICAgICAgICAgICAgICggMHhGRkZDMDAwNCApIC8qIChVUzApIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9SVE9SICAgICAgICAgICAgICggMHhGRkZDMDAyNCApIC8qIChVUzApIFJlY2VpdmVyIFRpbWUtb3V0IFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzBfQ1NSICAgICAgICAgICAgICAoIDB4RkZGQzAwMTQgKSAvKiAoVVMwKSBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX1JIUiAgICAgICAgICAgICAgKCAweEZGRkMwMDE4ICkgLyogKFVTMCkgUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX0lEUiAgICAgICAgICAgICAgKCAweEZGRkMwMDBDICkgLyogKFVTMCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9USFIgICAgICAgICAgICAgICggMHhGRkZDMDAxQyApIC8qIChVUzApIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9JRiAgICAgICAgICAgICAgICggMHhGRkZDMDA0QyApIC8qIChVUzApIElSREFfRklMVEVSIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzBfSUVSICAgICAgICAgICAgICAoIDB4RkZGQzAwMDggKSAvKiAoVVMwKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfU1NDIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1ROQ1IgICAgICAgICAgICAgKCAweEZGRkQ0MTFDICkgLyogKFBEQ19TU0MpIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1JQUiAgICAgICAgICAgICAgKCAweEZGRkQ0MTAwICkgLyogKFBEQ19TU0MpIFJlY2VpdmUgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1JOQ1IgICAgICAgICAgICAgKCAweEZGRkQ0MTE0ICkgLyogKFBEQ19TU0MpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfVFBSICAgICAgICAgICAgICAoIDB4RkZGRDQxMDggKSAvKiAoUERDX1NTQykgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1BUQ1IgICAgICAgICAgICAgKCAweEZGRkQ0MTIwICkgLyogKFBEQ19TU0MpIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfVENSICAgICAgICAgICAgICAoIDB4RkZGRDQxMEMgKSAvKiAoUERDX1NTQykgVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1JDUiAgICAgICAgICAgICAgKCAweEZGRkQ0MTA0ICkgLyogKFBEQ19TU0MpIFJlY2VpdmUgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1JOUFIgICAgICAgICAgICAgKCAweEZGRkQ0MTEwICkgLyogKFBEQ19TU0MpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfVE5QUiAgICAgICAgICAgICAoIDB4RkZGRDQxMTggKSAvKiAoUERDX1NTQykgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfUFRTUiAgICAgICAgICAgICAoIDB4RkZGRDQxMjQgKSAvKiAoUERDX1NTQykgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgU1NDIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1JIUiAgICAgICAgICAgICAgKCAweEZGRkQ0MDIwICkgLyogKFNTQykgUmVjZWl2ZSBIb2xkaW5nIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfUlNIUiAgICAgICAgICAgICAoIDB4RkZGRDQwMzAgKSAvKiAoU1NDKSBSZWNlaXZlIFN5bmMgSG9sZGluZyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1RGTVIgICAgICAgICAgICAgKCAweEZGRkQ0MDFDICkgLyogKFNTQykgVHJhbnNtaXQgRnJhbWUgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0lEUiAgICAgICAgICAgICAgKCAweEZGRkQ0MDQ4ICkgLyogKFNTQykgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19USFIgICAgICAgICAgICAgICggMHhGRkZENDAyNCApIC8qIChTU0MpIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19SQ01SICAgICAgICAgICAgICggMHhGRkZENDAxMCApIC8qIChTU0MpIFJlY2VpdmUgQ2xvY2sgTW9kZVJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfSUVSICAgICAgICAgICAgICAoIDB4RkZGRDQwNDQgKSAvKiAoU1NDKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfVFNIUiAgICAgICAgICAgICAoIDB4RkZGRDQwMzQgKSAvKiAoU1NDKSBUcmFuc21pdCBTeW5jIEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19TUiAgICAgICAgICAgICAgICggMHhGRkZENDA0MCApIC8qIChTU0MpIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0NNUiAgICAgICAgICAgICAgKCAweEZGRkQ0MDA0ICkgLyogKFNTQykgQ2xvY2sgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1RDTVIgICAgICAgICAgICAgKCAweEZGRkQ0MDE4ICkgLyogKFNTQykgVHJhbnNtaXQgQ2xvY2sgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0NSICAgICAgICAgICAgICAgKCAweEZGRkQ0MDAwICkgLyogKFNTQykgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0lNUiAgICAgICAgICAgICAgKCAweEZGRkQ0MDRDICkgLyogKFNTQykgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19SRk1SICAgICAgICAgICAgICggMHhGRkZENDAxNCApIC8qIChTU0MpIFJlY2VpdmUgRnJhbWUgTW9kZSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVFdJIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX0lFUiAgICAgICAgICAgICAgKCAweEZGRkI4MDI0ICkgLyogKFRXSSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX0NSICAgICAgICAgICAgICAgKCAweEZGRkI4MDAwICkgLyogKFRXSSkgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX1NSICAgICAgICAgICAgICAgKCAweEZGRkI4MDIwICkgLyogKFRXSSkgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UV0lfSU1SICAgICAgICAgICAgICAoIDB4RkZGQjgwMkMgKSAvKiAoVFdJKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX1RIUiAgICAgICAgICAgICAgKCAweEZGRkI4MDM0ICkgLyogKFRXSSkgVHJhbnNtaXQgSG9sZGluZyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX0lEUiAgICAgICAgICAgICAgKCAweEZGRkI4MDI4ICkgLyogKFRXSSkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9JQURSICAgICAgICAgICAgICggMHhGRkZCODAwQyApIC8qIChUV0kpIEludGVybmFsIEFkZHJlc3MgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9NTVIgICAgICAgICAgICAgICggMHhGRkZCODAwNCApIC8qIChUV0kpIE1hc3RlciBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UV0lfQ1dHUiAgICAgICAgICAgICAoIDB4RkZGQjgwMTAgKSAvKiAoVFdJKSBDbG9jayBXYXZlZm9ybSBHZW5lcmF0b3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9SSFIgICAgICAgICAgICAgICggMHhGRkZCODAzMCApIC8qIChUV0kpIFJlY2VpdmUgSG9sZGluZyBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUFdNQ19DSDMgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NIM19DVVBEUiAgICAgICAoIDB4RkZGQ0MyNzAgKSAvKiAoUFdNQ19DSDMpIENoYW5uZWwgVXBkYXRlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NIM19SZXNlcnZlZCAgICAoIDB4RkZGQ0MyNzQgKSAvKiAoUFdNQ19DSDMpIFJlc2VydmVkICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NIM19DUFJEUiAgICAgICAoIDB4RkZGQ0MyNjggKSAvKiAoUFdNQ19DSDMpIENoYW5uZWwgUGVyaW9kIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NIM19DRFRZUiAgICAgICAoIDB4RkZGQ0MyNjQgKSAvKiAoUFdNQ19DSDMpIENoYW5uZWwgRHV0eSBDeWNsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDNfQ0NOVFIgICAgICAgKCAweEZGRkNDMjZDICkgLyogKFBXTUNfQ0gzKSBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0gzX0NNUiAgICAgICAgICggMHhGRkZDQzI2MCApIC8qIChQV01DX0NIMykgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQV01DX0NIMiBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0gyX1Jlc2VydmVkICAgICggMHhGRkZDQzI1NCApIC8qIChQV01DX0NIMikgUmVzZXJ2ZWQgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0gyX0NNUiAgICAgICAgICggMHhGRkZDQzI0MCApIC8qIChQV01DX0NIMikgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NIMl9DQ05UUiAgICAgICAoIDB4RkZGQ0MyNEMgKSAvKiAoUFdNQ19DSDIpIENoYW5uZWwgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDJfQ1BSRFIgICAgICAgKCAweEZGRkNDMjQ4ICkgLyogKFBXTUNfQ0gyKSBDaGFubmVsIFBlcmlvZCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDJfQ1VQRFIgICAgICAgKCAweEZGRkNDMjUwICkgLyogKFBXTUNfQ0gyKSBDaGFubmVsIFVwZGF0ZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDJfQ0RUWVIgICAgICAgKCAweEZGRkNDMjQ0ICkgLyogKFBXTUNfQ0gyKSBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBXTUNfQ0gxIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDFfUmVzZXJ2ZWQgICAgKCAweEZGRkNDMjM0ICkgLyogKFBXTUNfQ0gxKSBSZXNlcnZlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDFfQ1VQRFIgICAgICAgKCAweEZGRkNDMjMwICkgLyogKFBXTUNfQ0gxKSBDaGFubmVsIFVwZGF0ZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDFfQ1BSRFIgICAgICAgKCAweEZGRkNDMjI4ICkgLyogKFBXTUNfQ0gxKSBDaGFubmVsIFBlcmlvZCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDFfQ0NOVFIgICAgICAgKCAweEZGRkNDMjJDICkgLyogKFBXTUNfQ0gxKSBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0gxX0NEVFlSICAgICAgICggMHhGRkZDQzIyNCApIC8qIChQV01DX0NIMSkgQ2hhbm5lbCBEdXR5IEN5Y2xlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NIMV9DTVIgICAgICAgICAoIDB4RkZGQ0MyMjAgKSAvKiAoUFdNQ19DSDEpIENoYW5uZWwgTW9kZSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUFdNQ19DSDAgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NIMF9SZXNlcnZlZCAgICAoIDB4RkZGQ0MyMTQgKSAvKiAoUFdNQ19DSDApIFJlc2VydmVkICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NIMF9DUFJEUiAgICAgICAoIDB4RkZGQ0MyMDggKSAvKiAoUFdNQ19DSDApIENoYW5uZWwgUGVyaW9kIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NIMF9DRFRZUiAgICAgICAoIDB4RkZGQ0MyMDQgKSAvKiAoUFdNQ19DSDApIENoYW5uZWwgRHV0eSBDeWNsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDBfQ01SICAgICAgICAgKCAweEZGRkNDMjAwICkgLyogKFBXTUNfQ0gwKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0gwX0NVUERSICAgICAgICggMHhGRkZDQzIxMCApIC8qIChQV01DX0NIMCkgQ2hhbm5lbCBVcGRhdGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0gwX0NDTlRSICAgICAgICggMHhGRkZDQzIwQyApIC8qIChQV01DX0NIMCkgQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQV01DIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19JRFIgICAgICAgICAgICAgKCAweEZGRkNDMDE0ICkgLyogKFBXTUMpIFBXTUMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfRElTICAgICAgICAgICAgICggMHhGRkZDQzAwOCApIC8qIChQV01DKSBQV01DIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfSUVSICAgICAgICAgICAgICggMHhGRkZDQzAxMCApIC8qIChQV01DKSBQV01DIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfVlIgICAgICAgICAgICAgICggMHhGRkZDQzBGQyApIC8qIChQV01DKSBQV01DIFZlcnNpb24gUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfSVNSICAgICAgICAgICAgICggMHhGRkZDQzAxQyApIC8qIChQV01DKSBQV01DIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfU1IgICAgICAgICAgICAgICggMHhGRkZDQzAwQyApIC8qIChQV01DKSBQV01DIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19JTVIgICAgICAgICAgICAgKCAweEZGRkNDMDE4ICkgLyogKFBXTUMpIFBXTUMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfTVIgICAgICAgICAgICAgICggMHhGRkZDQzAwMCApIC8qIChQV01DKSBQV01DIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfRU5BICAgICAgICAgICAgICggMHhGRkZDQzAwNCApIC8qIChQV01DKSBQV01DIEVuYWJsZSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVURQIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0lNUiAgICAgICAgICAgICAgKCAweEZGRkIwMDE4ICkgLyogKFVEUCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9GQUREUiAgICAgICAgICAgICggMHhGRkZCMDAwOCApIC8qIChVRFApIEZ1bmN0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9OVU0gICAgICAgICAgICAgICggMHhGRkZCMDAwMCApIC8qIChVRFApIEZyYW1lIE51bWJlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0ZEUiAgICAgICAgICAgICAgKCAweEZGRkIwMDUwICkgLyogKFVEUCkgRW5kcG9pbnQgRklGTyBEYXRhIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VRFBfSVNSICAgICAgICAgICAgICAoIDB4RkZGQjAwMUMgKSAvKiAoVURQKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VRFBfQ1NSICAgICAgICAgICAgICAoIDB4RkZGQjAwMzAgKSAvKiAoVURQKSBFbmRwb2ludCBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9JRFIgICAgICAgICAgICAgICggMHhGRkZCMDAxNCApIC8qIChVRFApIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VRFBfSUNSICAgICAgICAgICAgICAoIDB4RkZGQjAwMjAgKSAvKiAoVURQKSBJbnRlcnJ1cHQgQ2xlYXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9SU1RFUCAgICAgICAgICAgICggMHhGRkZCMDAyOCApIC8qIChVRFApIFJlc2V0IEVuZHBvaW50IFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VRFBfVFhWQyAgICAgICAgICAgICAoIDB4RkZGQjAwNzQgKSAvKiAoVURQKSBUcmFuc2NlaXZlciBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VRFBfR0xCU1RBVEUgICAgICAgICAoIDB4RkZGQjAwMDQgKSAvKiAoVURQKSBHbG9iYWwgU3RhdGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9JRVIgICAgICAgICAgICAgICggMHhGRkZCMDAxMCApIC8qIChVRFApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRDMCBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1RDMF9TUiAgICAgICAgICAgICAgICggMHhGRkZBMDAyMCApIC8qIChUQzApIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMwX1JDICAgICAgICAgICAgICAgKCAweEZGRkEwMDFDICkgLyogKFRDMCkgUmVnaXN0ZXIgQyAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMwX1JCICAgICAgICAgICAgICAgKCAweEZGRkEwMDE4ICkgLyogKFRDMCkgUmVnaXN0ZXIgQiAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMwX0NDUiAgICAgICAgICAgICAgKCAweEZGRkEwMDAwICkgLyogKFRDMCkgQ2hhbm5lbCBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UQzBfQ01SICAgICAgICAgICAgICAoIDB4RkZGQTAwMDQgKSAvKiAoVEMwKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXIgKENhcHR1cmUgTW9kZSAvIFdhdmVmb3JtIE1vZGUpICovDQotI2RlZmluZSBBVDkxQ19UQzBfSUVSICAgICAgICAgICAgICAoIDB4RkZGQTAwMjQgKSAvKiAoVEMwKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UQzBfUkEgICAgICAgICAgICAgICAoIDB4RkZGQTAwMTQgKSAvKiAoVEMwKSBSZWdpc3RlciBBICovDQotI2RlZmluZSBBVDkxQ19UQzBfSURSICAgICAgICAgICAgICAoIDB4RkZGQTAwMjggKSAvKiAoVEMwKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMwX0NWICAgICAgICAgICAgICAgKCAweEZGRkEwMDEwICkgLyogKFRDMCkgQ291bnRlciBWYWx1ZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMwX0lNUiAgICAgICAgICAgICAgKCAweEZGRkEwMDJDICkgLyogKFRDMCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRDMSBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1RDMV9SQiAgICAgICAgICAgICAgICggMHhGRkZBMDA1OCApIC8qIChUQzEpIFJlZ2lzdGVyIEIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMV9DQ1IgICAgICAgICAgICAgICggMHhGRkZBMDA0MCApIC8qIChUQzEpIENoYW5uZWwgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMxX0lFUiAgICAgICAgICAgICAgKCAweEZGRkEwMDY0ICkgLyogKFRDMSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMxX0lEUiAgICAgICAgICAgICAgKCAweEZGRkEwMDY4ICkgLyogKFRDMSkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMV9TUiAgICAgICAgICAgICAgICggMHhGRkZBMDA2MCApIC8qIChUQzEpIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMxX0NNUiAgICAgICAgICAgICAgKCAweEZGRkEwMDQ0ICkgLyogKFRDMSkgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyIChDYXB0dXJlIE1vZGUgLyBXYXZlZm9ybSBNb2RlKSAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMxX1JBICAgICAgICAgICAgICAgKCAweEZGRkEwMDU0ICkgLyogKFRDMSkgUmVnaXN0ZXIgQSAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMxX1JDICAgICAgICAgICAgICAgKCAweEZGRkEwMDVDICkgLyogKFRDMSkgUmVnaXN0ZXIgQyAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMxX0lNUiAgICAgICAgICAgICAgKCAweEZGRkEwMDZDICkgLyogKFRDMSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMV9DViAgICAgICAgICAgICAgICggMHhGRkZBMDA1MCApIC8qIChUQzEpIENvdW50ZXIgVmFsdWUgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRDMiBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1RDMl9DTVIgICAgICAgICAgICAgICggMHhGRkZBMDA4NCApIC8qIChUQzIpIENoYW5uZWwgTW9kZSBSZWdpc3RlciAoQ2FwdHVyZSBNb2RlIC8gV2F2ZWZvcm0gTW9kZSkgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMl9DQ1IgICAgICAgICAgICAgICggMHhGRkZBMDA4MCApIC8qIChUQzIpIENoYW5uZWwgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMyX0NWICAgICAgICAgICAgICAgKCAweEZGRkEwMDkwICkgLyogKFRDMikgQ291bnRlciBWYWx1ZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMyX1JBICAgICAgICAgICAgICAgKCAweEZGRkEwMDk0ICkgLyogKFRDMikgUmVnaXN0ZXIgQSAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMyX1JCICAgICAgICAgICAgICAgKCAweEZGRkEwMDk4ICkgLyogKFRDMikgUmVnaXN0ZXIgQiAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMyX0lEUiAgICAgICAgICAgICAgKCAweEZGRkEwMEE4ICkgLyogKFRDMikgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMl9JTVIgICAgICAgICAgICAgICggMHhGRkZBMDBBQyApIC8qIChUQzIpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UQzJfUkMgICAgICAgICAgICAgICAoIDB4RkZGQTAwOUMgKSAvKiAoVEMyKSBSZWdpc3RlciBDICovDQotI2RlZmluZSBBVDkxQ19UQzJfSUVSICAgICAgICAgICAgICAoIDB4RkZGQTAwQTQgKSAvKiAoVEMyKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UQzJfU1IgICAgICAgICAgICAgICAoIDB4RkZGQTAwQTAgKSAvKiAoVEMyKSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRDQiBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1RDQl9CTVIgICAgICAgICAgICAgICggMHhGRkZBMDBDNCApIC8qIChUQ0IpIFRDIEJsb2NrIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDQl9CQ1IgICAgICAgICAgICAgICggMHhGRkZBMDBDMCApIC8qIChUQ0IpIFRDIEJsb2NrIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENBTl9NQjAgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIwX01ETCAgICAgICAgICAoIDB4RkZGRDAyMTQgKSAvKiAoQ0FOX01CMCkgTWFpbEJveCBEYXRhIExvdyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMF9NQU0gICAgICAgICAgKCAweEZGRkQwMjA0ICkgLyogKENBTl9NQjApIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIwX01DUiAgICAgICAgICAoIDB4RkZGRDAyMUMgKSAvKiAoQ0FOX01CMCkgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIwX01JRCAgICAgICAgICAoIDB4RkZGRDAyMDggKSAvKiAoQ0FOX01CMCkgTWFpbEJveCBJRCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMF9NU1IgICAgICAgICAgKCAweEZGRkQwMjEwICkgLyogKENBTl9NQjApIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIwX01GSUQgICAgICAgICAoIDB4RkZGRDAyMEMgKSAvKiAoQ0FOX01CMCkgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjBfTURIICAgICAgICAgICggMHhGRkZEMDIxOCApIC8qIChDQU5fTUIwKSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMF9NTVIgICAgICAgICAgKCAweEZGRkQwMjAwICkgLyogKENBTl9NQjApIE1haWxCb3ggTW9kZSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CMSBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjFfTURMICAgICAgICAgICggMHhGRkZEMDIzNCApIC8qIChDQU5fTUIxKSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIxX01JRCAgICAgICAgICAoIDB4RkZGRDAyMjggKSAvKiAoQ0FOX01CMSkgTWFpbEJveCBJRCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMV9NTVIgICAgICAgICAgKCAweEZGRkQwMjIwICkgLyogKENBTl9NQjEpIE1haWxCb3ggTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMV9NU1IgICAgICAgICAgKCAweEZGRkQwMjMwICkgLyogKENBTl9NQjEpIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIxX01BTSAgICAgICAgICAoIDB4RkZGRDAyMjQgKSAvKiAoQ0FOX01CMSkgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjFfTURIICAgICAgICAgICggMHhGRkZEMDIzOCApIC8qIChDQU5fTUIxKSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMV9NQ1IgICAgICAgICAgKCAweEZGRkQwMjNDICkgLyogKENBTl9NQjEpIE1haWxCb3ggQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMV9NRklEICAgICAgICAgKCAweEZGRkQwMjJDICkgLyogKENBTl9NQjEpIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU5fTUIyIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NQ1IgICAgICAgICAgKCAweEZGRkQwMjVDICkgLyogKENBTl9NQjIpIE1haWxCb3ggQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NREggICAgICAgICAgKCAweEZGRkQwMjU4ICkgLyogKENBTl9NQjIpIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIyX01JRCAgICAgICAgICAoIDB4RkZGRDAyNDggKSAvKiAoQ0FOX01CMikgTWFpbEJveCBJRCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NREwgICAgICAgICAgKCAweEZGRkQwMjU0ICkgLyogKENBTl9NQjIpIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjJfTU1SICAgICAgICAgICggMHhGRkZEMDI0MCApIC8qIChDQU5fTUIyKSBNYWlsQm94IE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjJfTUFNICAgICAgICAgICggMHhGRkZEMDI0NCApIC8qIChDQU5fTUIyKSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NRklEICAgICAgICAgKCAweEZGRkQwMjRDICkgLyogKENBTl9NQjIpIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIyX01TUiAgICAgICAgICAoIDB4RkZGRDAyNTAgKSAvKiAoQ0FOX01CMikgTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENBTl9NQjMgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIzX01GSUQgICAgICAgICAoIDB4RkZGRDAyNkMgKSAvKiAoQ0FOX01CMykgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjNfTUFNICAgICAgICAgICggMHhGRkZEMDI2NCApIC8qIChDQU5fTUIzKSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CM19NSUQgICAgICAgICAgKCAweEZGRkQwMjY4ICkgLyogKENBTl9NQjMpIE1haWxCb3ggSUQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjNfTUNSICAgICAgICAgICggMHhGRkZEMDI3QyApIC8qIChDQU5fTUIzKSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjNfTU1SICAgICAgICAgICggMHhGRkZEMDI2MCApIC8qIChDQU5fTUIzKSBNYWlsQm94IE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjNfTVNSICAgICAgICAgICggMHhGRkZEMDI3MCApIC8qIChDQU5fTUIzKSBNYWlsQm94IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CM19NREwgICAgICAgICAgKCAweEZGRkQwMjc0ICkgLyogKENBTl9NQjMpIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjNfTURIICAgICAgICAgICggMHhGRkZEMDI3OCApIC8qIChDQU5fTUIzKSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CNCBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjRfTUlEICAgICAgICAgICggMHhGRkZEMDI4OCApIC8qIChDQU5fTUI0KSBNYWlsQm94IElEIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI0X01NUiAgICAgICAgICAoIDB4RkZGRDAyODAgKSAvKiAoQ0FOX01CNCkgTWFpbEJveCBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI0X01ESCAgICAgICAgICAoIDB4RkZGRDAyOTggKSAvKiAoQ0FOX01CNCkgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjRfTUZJRCAgICAgICAgICggMHhGRkZEMDI4QyApIC8qIChDQU5fTUI0KSBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CNF9NU1IgICAgICAgICAgKCAweEZGRkQwMjkwICkgLyogKENBTl9NQjQpIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI0X01DUiAgICAgICAgICAoIDB4RkZGRDAyOUMgKSAvKiAoQ0FOX01CNCkgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI0X01ETCAgICAgICAgICAoIDB4RkZGRDAyOTQgKSAvKiAoQ0FOX01CNCkgTWFpbEJveCBEYXRhIExvdyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CNF9NQU0gICAgICAgICAgKCAweEZGRkQwMjg0ICkgLyogKENBTl9NQjQpIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU5fTUI1IHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CNV9NU1IgICAgICAgICAgKCAweEZGRkQwMkIwICkgLyogKENBTl9NQjUpIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI1X01DUiAgICAgICAgICAoIDB4RkZGRDAyQkMgKSAvKiAoQ0FOX01CNSkgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI1X01GSUQgICAgICAgICAoIDB4RkZGRDAyQUMgKSAvKiAoQ0FOX01CNSkgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjVfTURIICAgICAgICAgICggMHhGRkZEMDJCOCApIC8qIChDQU5fTUI1KSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CNV9NSUQgICAgICAgICAgKCAweEZGRkQwMkE4ICkgLyogKENBTl9NQjUpIE1haWxCb3ggSUQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjVfTU1SICAgICAgICAgICggMHhGRkZEMDJBMCApIC8qIChDQU5fTUI1KSBNYWlsQm94IE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjVfTURMICAgICAgICAgICggMHhGRkZEMDJCNCApIC8qIChDQU5fTUI1KSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI1X01BTSAgICAgICAgICAoIDB4RkZGRDAyQTQgKSAvKiAoQ0FOX01CNSkgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENBTl9NQjYgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI2X01GSUQgICAgICAgICAoIDB4RkZGRDAyQ0MgKSAvKiAoQ0FOX01CNikgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjZfTUlEICAgICAgICAgICggMHhGRkZEMDJDOCApIC8qIChDQU5fTUI2KSBNYWlsQm94IElEIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI2X01BTSAgICAgICAgICAoIDB4RkZGRDAyQzQgKSAvKiAoQ0FOX01CNikgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjZfTVNSICAgICAgICAgICggMHhGRkZEMDJEMCApIC8qIChDQU5fTUI2KSBNYWlsQm94IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CNl9NREwgICAgICAgICAgKCAweEZGRkQwMkQ0ICkgLyogKENBTl9NQjYpIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjZfTUNSICAgICAgICAgICggMHhGRkZEMDJEQyApIC8qIChDQU5fTUI2KSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjZfTURIICAgICAgICAgICggMHhGRkZEMDJEOCApIC8qIChDQU5fTUI2KSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CNl9NTVIgICAgICAgICAgKCAweEZGRkQwMkMwICkgLyogKENBTl9NQjYpIE1haWxCb3ggTW9kZSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CNyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjdfTUNSICAgICAgICAgICggMHhGRkZEMDJGQyApIC8qIChDQU5fTUI3KSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjdfTURIICAgICAgICAgICggMHhGRkZEMDJGOCApIC8qIChDQU5fTUI3KSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CN19NRklEICAgICAgICAgKCAweEZGRkQwMkVDICkgLyogKENBTl9NQjcpIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI3X01ETCAgICAgICAgICAoIDB4RkZGRDAyRjQgKSAvKiAoQ0FOX01CNykgTWFpbEJveCBEYXRhIExvdyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CN19NSUQgICAgICAgICAgKCAweEZGRkQwMkU4ICkgLyogKENBTl9NQjcpIE1haWxCb3ggSUQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjdfTU1SICAgICAgICAgICggMHhGRkZEMDJFMCApIC8qIChDQU5fTUI3KSBNYWlsQm94IE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjdfTUFNICAgICAgICAgICggMHhGRkZEMDJFNCApIC8qIChDQU5fTUI3KSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CN19NU1IgICAgICAgICAgKCAweEZGRkQwMkYwICkgLyogKENBTl9NQjcpIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU4gcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19DQU5fVENSICAgICAgICAgICAgICAoIDB4RkZGRDAwMjQgKSAvKiAoQ0FOKSBUcmFuc2ZlciBDb21tYW5kIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fSU1SICAgICAgICAgICAgICAoIDB4RkZGRDAwMEMgKSAvKiAoQ0FOKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX0lFUiAgICAgICAgICAgICAgKCAweEZGRkQwMDA0ICkgLyogKENBTikgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX0VDUiAgICAgICAgICAgICAgKCAweEZGRkQwMDIwICkgLyogKENBTikgRXJyb3IgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1RJTUVTVFAgICAgICAgICAgKCAweEZGRkQwMDFDICkgLyogKENBTikgVGltZSBTdGFtcCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01SICAgICAgICAgICAgICAgKCAweEZGRkQwMDAwICkgLyogKENBTikgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX0lEUiAgICAgICAgICAgICAgKCAweEZGRkQwMDA4ICkgLyogKENBTikgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9BQ1IgICAgICAgICAgICAgICggMHhGRkZEMDAyOCApIC8qIChDQU4pIEFib3J0IENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9USU0gICAgICAgICAgICAgICggMHhGRkZEMDAxOCApIC8qIChDQU4pIFRpbWVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fU1IgICAgICAgICAgICAgICAoIDB4RkZGRDAwMTAgKSAvKiAoQ0FOKSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9CUiAgICAgICAgICAgICAgICggMHhGRkZEMDAxNCApIC8qIChDQU4pIEJhdWRyYXRlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fVlIgICAgICAgICAgICAgICAoIDB4RkZGRDAwRkMgKSAvKiAoQ0FOKSBWZXJzaW9uIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBFTUFDIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19JU1IgICAgICAgICAgICAgKCAweEZGRkRDMDI0ICkgLyogKEVNQUMpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfU0E0SCAgICAgICAgICAgICggMHhGRkZEQzBCNCApIC8qIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDQgVG9wLCBMYXN0IDIgYnl0ZXMgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfU0ExTCAgICAgICAgICAgICggMHhGRkZEQzA5OCApIC8qIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDEgQm90dG9tLCBGaXJzdCA0IGJ5dGVzICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0VMRSAgICAgICAgICAgICAoIDB4RkZGREMwNzggKSAvKiAoRU1BQykgRXhjZXNzaXZlIExlbmd0aCBFcnJvcnMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfTENPTCAgICAgICAgICAgICggMHhGRkZEQzA1QyApIC8qIChFTUFDKSBMYXRlIENvbGxpc2lvbiBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19STEUgICAgICAgICAgICAgKCAweEZGRkRDMDg4ICkgLyogKEVNQUMpIFJlY2VpdmUgTGVuZ3RoIEZpZWxkIE1pc21hdGNoIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1dPTCAgICAgICAgICAgICAoIDB4RkZGREMwQzQgKSAvKiAoRU1BQykgV2FrZSBPbiBMQU4gUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfRFRGICAgICAgICAgICAgICggMHhGRkZEQzA1OCApIC8qIChFTUFDKSBEZWZlcnJlZCBUcmFuc21pc3Npb24gRnJhbWUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfVFVORCAgICAgICAgICAgICggMHhGRkZEQzA2NCApIC8qIChFTUFDKSBUcmFuc21pdCBVbmRlcnJ1biBFcnJvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19OQ1IgICAgICAgICAgICAgKCAweEZGRkRDMDAwICkgLyogKEVNQUMpIE5ldHdvcmsgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19TQTRMICAgICAgICAgICAgKCAweEZGRkRDMEIwICkgLyogKEVNQUMpIFNwZWNpZmljIEFkZHJlc3MgNCBCb3R0b20sIEZpcnN0IDQgYnl0ZXMgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfUlNSICAgICAgICAgICAgICggMHhGRkZEQzAyMCApIC8qIChFTUFDKSBSZWNlaXZlIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19TQTNMICAgICAgICAgICAgKCAweEZGRkRDMEE4ICkgLyogKEVNQUMpIFNwZWNpZmljIEFkZHJlc3MgMyBCb3R0b20sIEZpcnN0IDQgYnl0ZXMgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfVFNSICAgICAgICAgICAgICggMHhGRkZEQzAxNCApIC8qIChFTUFDKSBUcmFuc21pdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfSURSICAgICAgICAgICAgICggMHhGRkZEQzAyQyApIC8qIChFTUFDKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19SU0UgICAgICAgICAgICAgKCAweEZGRkRDMDc0ICkgLyogKEVNQUMpIFJlY2VpdmUgU3ltYm9sIEVycm9ycyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19FQ09MICAgICAgICAgICAgKCAweEZGRkRDMDYwICkgLyogKEVNQUMpIEV4Y2Vzc2l2ZSBDb2xsaXNpb24gUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfVElEICAgICAgICAgICAgICggMHhGRkZEQzBCOCApIC8qIChFTUFDKSBUeXBlIElEIENoZWNraW5nIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0hSQiAgICAgICAgICAgICAoIDB4RkZGREMwOTAgKSAvKiAoRU1BQykgSGFzaCBBZGRyZXNzIEJvdHRvbVszMTowXSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19UQlFQICAgICAgICAgICAgKCAweEZGRkRDMDFDICkgLyogKEVNQUMpIFRyYW5zbWl0IEJ1ZmZlciBRdWV1ZSBQb2ludGVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1VTUklPICAgICAgICAgICAoIDB4RkZGREMwQzAgKSAvKiAoRU1BQykgVVNFUiBJbnB1dC9PdXRwdXQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfUFRSICAgICAgICAgICAgICggMHhGRkZEQzAzOCApIC8qIChFTUFDKSBQYXVzZSBUaW1lIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1NBMkggICAgICAgICAgICAoIDB4RkZGREMwQTQgKSAvKiAoRU1BQykgU3BlY2lmaWMgQWRkcmVzcyAyIFRvcCwgTGFzdCAyIGJ5dGVzICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1JPViAgICAgICAgICAgICAoIDB4RkZGREMwNzAgKSAvKiAoRU1BQykgUmVjZWl2ZSBPdmVycnVuIEVycm9ycyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19BTEUgICAgICAgICAgICAgKCAweEZGRkRDMDU0ICkgLyogKEVNQUMpIEFsaWdubWVudCBFcnJvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19SSkEgICAgICAgICAgICAgKCAweEZGRkRDMDdDICkgLyogKEVNQUMpIFJlY2VpdmUgSmFiYmVycyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19SQlFQICAgICAgICAgICAgKCAweEZGRkRDMDE4ICkgLyogKEVNQUMpIFJlY2VpdmUgQnVmZmVyIFF1ZXVlIFBvaW50ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfVFBGICAgICAgICAgICAgICggMHhGRkZEQzA4QyApIC8qIChFTUFDKSBUcmFuc21pdHRlZCBQYXVzZSBGcmFtZXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfTkNGR1IgICAgICAgICAgICggMHhGRkZEQzAwNCApIC8qIChFTUFDKSBOZXR3b3JrIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfSFJUICAgICAgICAgICAgICggMHhGRkZEQzA5NCApIC8qIChFTUFDKSBIYXNoIEFkZHJlc3MgVG9wWzYzOjMyXSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19VU0YgICAgICAgICAgICAgKCAweEZGRkRDMDgwICkgLyogKEVNQUMpIFVuZGVyc2l6ZSBGcmFtZXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfRkNTRSAgICAgICAgICAgICggMHhGRkZEQzA1MCApIC8qIChFTUFDKSBGcmFtZSBDaGVjayBTZXF1ZW5jZSBFcnJvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19UUFEgICAgICAgICAgICAgKCAweEZGRkRDMEJDICkgLyogKEVNQUMpIFRyYW5zbWl0IFBhdXNlIFF1YW50dW0gUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfTUFOICAgICAgICAgICAgICggMHhGRkZEQzAzNCApIC8qIChFTUFDKSBQSFkgTWFpbnRlbmFuY2UgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfRlRPICAgICAgICAgICAgICggMHhGRkZEQzA0MCApIC8qIChFTUFDKSBGcmFtZXMgVHJhbnNtaXR0ZWQgT0sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfUkVWICAgICAgICAgICAgICggMHhGRkZEQzBGQyApIC8qIChFTUFDKSBSZXZpc2lvbiBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19JTVIgICAgICAgICAgICAgKCAweEZGRkRDMDMwICkgLyogKEVNQUMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1NDRiAgICAgICAgICAgICAoIDB4RkZGREMwNDQgKSAvKiAoRU1BQykgU2luZ2xlIENvbGxpc2lvbiBGcmFtZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19QRlIgICAgICAgICAgICAgKCAweEZGRkRDMDNDICkgLyogKEVNQUMpIFBhdXNlIEZyYW1lcyByZWNlaXZlZCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19NQ0YgICAgICAgICAgICAgKCAweEZGRkRDMDQ4ICkgLyogKEVNQUMpIE11bHRpcGxlIENvbGxpc2lvbiBGcmFtZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19OU1IgICAgICAgICAgICAgKCAweEZGRkRDMDA4ICkgLyogKEVNQUMpIE5ldHdvcmsgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1NBMkwgICAgICAgICAgICAoIDB4RkZGREMwQTAgKSAvKiAoRU1BQykgU3BlY2lmaWMgQWRkcmVzcyAyIEJvdHRvbSwgRmlyc3QgNCBieXRlcyAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19GUk8gICAgICAgICAgICAgKCAweEZGRkRDMDRDICkgLyogKEVNQUMpIEZyYW1lcyBSZWNlaXZlZCBPSyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19JRVIgICAgICAgICAgICAgKCAweEZGRkRDMDI4ICkgLyogKEVNQUMpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfU0ExSCAgICAgICAgICAgICggMHhGRkZEQzA5QyApIC8qIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDEgVG9wLCBMYXN0IDIgYnl0ZXMgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfQ1NFICAgICAgICAgICAgICggMHhGRkZEQzA2OCApIC8qIChFTUFDKSBDYXJyaWVyIFNlbnNlIEVycm9yIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1NBM0ggICAgICAgICAgICAoIDB4RkZGREMwQUMgKSAvKiAoRU1BQykgU3BlY2lmaWMgQWRkcmVzcyAzIFRvcCwgTGFzdCAyIGJ5dGVzICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1JSRSAgICAgICAgICAgICAoIDB4RkZGREMwNkMgKSAvKiAoRU1BQykgUmVjZWl2ZSBSZXNzb3VyY2UgRXJyb3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfU1RFICAgICAgICAgICAgICggMHhGRkZEQzA4NCApIC8qIChFTUFDKSBTUUUgVGVzdCBFcnJvciBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX0FEQyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19QVFNSICAgICAgICAgICAgICggMHhGRkZEODEyNCApIC8qIChQRENfQURDKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRENfUFRDUiAgICAgICAgICAgICAoIDB4RkZGRDgxMjAgKSAvKiAoUERDX0FEQykgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19UTlBSICAgICAgICAgICAgICggMHhGRkZEODExOCApIC8qIChQRENfQURDKSBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19UTkNSICAgICAgICAgICAgICggMHhGRkZEODExQyApIC8qIChQRENfQURDKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19STlBSICAgICAgICAgICAgICggMHhGRkZEODExMCApIC8qIChQRENfQURDKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1JOQ1IgICAgICAgICAgICAgKCAweEZGRkQ4MTE0ICkgLyogKFBEQ19BREMpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRENfUlBSICAgICAgICAgICAgICAoIDB4RkZGRDgxMDAgKSAvKiAoUERDX0FEQykgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRENfVENSICAgICAgICAgICAgICAoIDB4RkZGRDgxMEMgKSAvKiAoUERDX0FEQykgVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1RQUiAgICAgICAgICAgICAgKCAweEZGRkQ4MTA4ICkgLyogKFBEQ19BREMpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19SQ1IgICAgICAgICAgICAgICggMHhGRkZEODEwNCApIC8qIChQRENfQURDKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIEFEQyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DRFIyICAgICAgICAgICAgICggMHhGRkZEODAzOCApIC8qIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NEUjMgICAgICAgICAgICAgKCAweEZGRkQ4MDNDICkgLyogKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAzICovDQotI2RlZmluZSBBVDkxQ19BRENfQ0RSMCAgICAgICAgICAgICAoIDB4RkZGRDgwMzAgKSAvKiAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDAgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DRFI1ICAgICAgICAgICAgICggMHhGRkZEODA0NCApIC8qIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNSAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NIRFIgICAgICAgICAgICAgKCAweEZGRkQ4MDE0ICkgLyogKEFEQykgQURDIENoYW5uZWwgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1NSICAgICAgICAgICAgICAgKCAweEZGRkQ4MDFDICkgLyogKEFEQykgQURDIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NEUjQgICAgICAgICAgICAgKCAweEZGRkQ4MDQwICkgLyogKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA0ICovDQotI2RlZmluZSBBVDkxQ19BRENfQ0RSMSAgICAgICAgICAgICAoIDB4RkZGRDgwMzQgKSAvKiAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDEgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19MQ0RSICAgICAgICAgICAgICggMHhGRkZEODAyMCApIC8qIChBREMpIEFEQyBMYXN0IENvbnZlcnRlZCBEYXRhIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRENfSURSICAgICAgICAgICAgICAoIDB4RkZGRDgwMjggKSAvKiAoQURDKSBBREMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DUiAgICAgICAgICAgICAgICggMHhGRkZEODAwMCApIC8qIChBREMpIEFEQyBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRENfQ0RSNyAgICAgICAgICAgICAoIDB4RkZGRDgwNEMgKSAvKiAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDcgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DRFI2ICAgICAgICAgICAgICggMHhGRkZEODA0OCApIC8qIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNiAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0lFUiAgICAgICAgICAgICAgKCAweEZGRkQ4MDI0ICkgLyogKEFEQykgQURDIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DSEVSICAgICAgICAgICAgICggMHhGRkZEODAxMCApIC8qIChBREMpIEFEQyBDaGFubmVsIEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NIU1IgICAgICAgICAgICAgKCAweEZGRkQ4MDE4ICkgLyogKEFEQykgQURDIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRENfTVIgICAgICAgICAgICAgICAoIDB4RkZGRDgwMDQgKSAvKiAoQURDKSBBREMgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0lNUiAgICAgICAgICAgICAgKCAweEZGRkQ4MDJDICkgLyogKEFEQykgQURDIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfQUVTIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX1RQUiAgICAgICAgICAgICAgKCAweEZGRkE0MTA4ICkgLyogKFBEQ19BRVMpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19QVENSICAgICAgICAgICAgICggMHhGRkZBNDEyMCApIC8qIChQRENfQUVTKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX1JOUFIgICAgICAgICAgICAgKCAweEZGRkE0MTEwICkgLyogKFBEQ19BRVMpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRVNfVE5DUiAgICAgICAgICAgICAoIDB4RkZGQTQxMUMgKSAvKiAoUERDX0FFUykgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRVNfVENSICAgICAgICAgICAgICAoIDB4RkZGQTQxMEMgKSAvKiAoUERDX0FFUykgVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX1JDUiAgICAgICAgICAgICAgKCAweEZGRkE0MTA0ICkgLyogKFBEQ19BRVMpIFJlY2VpdmUgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX1JOQ1IgICAgICAgICAgICAgKCAweEZGRkE0MTE0ICkgLyogKFBEQ19BRVMpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRVNfVE5QUiAgICAgICAgICAgICAoIDB4RkZGQTQxMTggKSAvKiAoUERDX0FFUykgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRVNfUlBSICAgICAgICAgICAgICAoIDB4RkZGQTQxMDAgKSAvKiAoUERDX0FFUykgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRVNfUFRTUiAgICAgICAgICAgICAoIDB4RkZGQTQxMjQgKSAvKiAoUERDX0FFUykgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQUVTIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX0lWeFIgICAgICAgICAgICAgKCAweEZGRkE0MDYwICkgLyogKEFFUykgSW5pdGlhbGl6YXRpb24gVmVjdG9yIHggUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19NUiAgICAgICAgICAgICAgICggMHhGRkZBNDAwNCApIC8qIChBRVMpIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19WUiAgICAgICAgICAgICAgICggMHhGRkZBNDBGQyApIC8qIChBRVMpIEFFUyBWZXJzaW9uIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRVNfT0RBVEF4UiAgICAgICAgICAoIDB4RkZGQTQwNTAgKSAvKiAoQUVTKSBPdXRwdXQgRGF0YSB4IFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRVNfSURBVEF4UiAgICAgICAgICAoIDB4RkZGQTQwNDAgKSAvKiAoQUVTKSBJbnB1dCBEYXRhIHggUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19DUiAgICAgICAgICAgICAgICggMHhGRkZBNDAwMCApIC8qIChBRVMpIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19JRFIgICAgICAgICAgICAgICggMHhGRkZBNDAxNCApIC8qIChBRVMpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRVNfSU1SICAgICAgICAgICAgICAoIDB4RkZGQTQwMTggKSAvKiAoQUVTKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX0lFUiAgICAgICAgICAgICAgKCAweEZGRkE0MDEwICkgLyogKEFFUykgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX0tFWVd4UiAgICAgICAgICAgKCAweEZGRkE0MDIwICkgLyogKEFFUykgS2V5IFdvcmQgeCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX0lTUiAgICAgICAgICAgICAgKCAweEZGRkE0MDFDICkgLyogKEFFUykgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX1RERVMgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19UREVTX1JOQ1IgICAgICAgICAgICAoIDB4RkZGQTgxMTQgKSAvKiAoUERDX1RERVMpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UREVTX1RDUiAgICAgICAgICAgICAoIDB4RkZGQTgxMEMgKSAvKiAoUERDX1RERVMpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfUkNSICAgICAgICAgICAgICggMHhGRkZBODEwNCApIC8qIChQRENfVERFUykgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UREVTX1ROUFIgICAgICAgICAgICAoIDB4RkZGQTgxMTggKSAvKiAoUERDX1RERVMpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19STlBSICAgICAgICAgICAgKCAweEZGRkE4MTEwICkgLyogKFBEQ19UREVTKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19SUFIgICAgICAgICAgICAgKCAweEZGRkE4MTAwICkgLyogKFBEQ19UREVTKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfVE5DUiAgICAgICAgICAgICggMHhGRkZBODExQyApIC8qIChQRENfVERFUykgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UREVTX1RQUiAgICAgICAgICAgICAoIDB4RkZGQTgxMDggKSAvKiAoUERDX1RERVMpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfUFRTUiAgICAgICAgICAgICggMHhGRkZBODEyNCApIC8qIChQRENfVERFUykgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19QVENSICAgICAgICAgICAgKCAweEZGRkE4MTIwICkgLyogKFBEQ19UREVTKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVERFUyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfS0VZMld4UiAgICAgICAgICggMHhGRkZBODAyOCApIC8qIChUREVTKSBLZXkgMiBXb3JkIHggUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfS0VZM1d4UiAgICAgICAgICggMHhGRkZBODAzMCApIC8qIChUREVTKSBLZXkgMyBXb3JkIHggUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfSURSICAgICAgICAgICAgICggMHhGRkZBODAxNCApIC8qIChUREVTKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19WUiAgICAgICAgICAgICAgKCAweEZGRkE4MEZDICkgLyogKFRERVMpIFRERVMgVmVyc2lvbiBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19JVnhSICAgICAgICAgICAgKCAweEZGRkE4MDYwICkgLyogKFRERVMpIEluaXRpYWxpemF0aW9uIFZlY3RvciB4IFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UREVTX09EQVRBeFIgICAgICAgICAoIDB4RkZGQTgwNTAgKSAvKiAoVERFUykgT3V0cHV0IERhdGEgeCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19JTVIgICAgICAgICAgICAgKCAweEZGRkE4MDE4ICkgLyogKFRERVMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UREVTX01SICAgICAgICAgICAgICAoIDB4RkZGQTgwMDQgKSAvKiAoVERFUykgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19DUiAgICAgICAgICAgICAgKCAweEZGRkE4MDAwICkgLyogKFRERVMpIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfSUVSICAgICAgICAgICAgICggMHhGRkZBODAxMCApIC8qIChUREVTKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UREVTX0lTUiAgICAgICAgICAgICAoIDB4RkZGQTgwMUMgKSAvKiAoVERFUykgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19JREFUQXhSICAgICAgICAgKCAweEZGRkE4MDQwICkgLyogKFRERVMpIElucHV0IERhdGEgeCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19LRVkxV3hSICAgICAgICAgKCAweEZGRkE4MDIwICkgLyogKFRERVMpIEtleSAxIFdvcmQgeCBSZWdpc3RlciAqLw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgICBSRUdJU1RFUiBBRERSRVNTIERFRklOSVRJT04gRk9SIEFUOTFTQU03WDEyOA0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBTWVMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQUlDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0FJQ19JVlIgICAgICAgICAgICAgKDB4RkZGRkYxMDApIC8vIChBSUMpIElSUSBWZWN0b3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19TTVIgICAgICAgICAgICAgKDB4RkZGRkYwMDApIC8vIChBSUMpIFNvdXJjZSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfRlZSICAgICAgICAgICAgICgweEZGRkZGMTA0KSAvLyAoQUlDKSBGSVEgVmVjdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfRENSICAgICAgICAgICAgICgweEZGRkZGMTM4KSAvLyAoQUlDKSBEZWJ1ZyBDb250cm9sIFJlZ2lzdGVyIChQcm90ZWN0KQ0KKyNkZWZpbmUgQVQ5MUNfQUlDX0VPSUNSICAgICAgICAgICAoMHhGRkZGRjEzMCkgLy8gKEFJQykgRW5kIG9mIEludGVycnVwdCBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfU1ZSICAgICAgICAgICAgICgweEZGRkZGMDgwKSAvLyAoQUlDKSBTb3VyY2UgVmVjdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfRkZTUiAgICAgICAgICAgICgweEZGRkZGMTQ4KSAvLyAoQUlDKSBGYXN0IEZvcmNpbmcgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfSUNDUiAgICAgICAgICAgICgweEZGRkZGMTI4KSAvLyAoQUlDKSBJbnRlcnJ1cHQgQ2xlYXIgQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0lTUiAgICAgICAgICAgICAoMHhGRkZGRjEwOCkgLy8gKEFJQykgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0lNUiAgICAgICAgICAgICAoMHhGRkZGRjExMCkgLy8gKEFJQykgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19JUFIgICAgICAgICAgICAgKDB4RkZGRkYxMEMpIC8vIChBSUMpIEludGVycnVwdCBQZW5kaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfRkZFUiAgICAgICAgICAgICgweEZGRkZGMTQwKSAvLyAoQUlDKSBGYXN0IEZvcmNpbmcgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfSUVDUiAgICAgICAgICAgICgweEZGRkZGMTIwKSAvLyAoQUlDKSBJbnRlcnJ1cHQgRW5hYmxlIENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19JU0NSICAgICAgICAgICAgKDB4RkZGRkYxMkMpIC8vIChBSUMpIEludGVycnVwdCBTZXQgQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0ZGRFIgICAgICAgICAgICAoMHhGRkZGRjE0NCkgLy8gKEFJQykgRmFzdCBGb3JjaW5nIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19DSVNSICAgICAgICAgICAgKDB4RkZGRkYxMTQpIC8vIChBSUMpIENvcmUgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0lEQ1IgICAgICAgICAgICAoMHhGRkZGRjEyNCkgLy8gKEFJQykgSW50ZXJydXB0IERpc2FibGUgQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX1NQVSAgICAgICAgICAgICAoMHhGRkZGRjEzNCkgLy8gKEFJQykgU3B1cmlvdXMgVmVjdG9yIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfREJHVSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19EQkdVX1RDUiAgICAgICAgICAgICgweEZGRkZGMzBDKSAvLyAoUERDX0RCR1UpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfUk5QUiAgICAgICAgICAgKDB4RkZGRkYzMTApIC8vIChQRENfREJHVSkgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfVE5QUiAgICAgICAgICAgKDB4RkZGRkYzMTgpIC8vIChQRENfREJHVSkgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1RQUiAgICAgICAgICAgICgweEZGRkZGMzA4KSAvLyAoUERDX0RCR1UpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfUlBSICAgICAgICAgICAgKDB4RkZGRkYzMDApIC8vIChQRENfREJHVSkgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1JDUiAgICAgICAgICAgICgweEZGRkZGMzA0KSAvLyAoUERDX0RCR1UpIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9STkNSICAgICAgICAgICAoMHhGRkZGRjMxNCkgLy8gKFBEQ19EQkdVKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9QVENSICAgICAgICAgICAoMHhGRkZGRjMyMCkgLy8gKFBEQ19EQkdVKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9QVFNSICAgICAgICAgICAoMHhGRkZGRjMyNCkgLy8gKFBEQ19EQkdVKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1ROQ1IgICAgICAgICAgICgweEZGRkZGMzFDKSAvLyAoUERDX0RCR1UpIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgREJHVSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19EQkdVX0VYSUQgICAgICAgICAgICgweEZGRkZGMjQ0KSAvLyAoREJHVSkgQ2hpcCBJRCBFeHRlbnNpb24gUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfQlJHUiAgICAgICAgICAgKDB4RkZGRkYyMjApIC8vIChEQkdVKSBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX0lEUiAgICAgICAgICAgICgweEZGRkZGMjBDKSAvLyAoREJHVSkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfQ1NSICAgICAgICAgICAgKDB4RkZGRkYyMTQpIC8vIChEQkdVKSBDaGFubmVsIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9DSURSICAgICAgICAgICAoMHhGRkZGRjI0MCkgLy8gKERCR1UpIENoaXAgSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfTVIgICAgICAgICAgICAgKDB4RkZGRkYyMDQpIC8vIChEQkdVKSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX0lNUiAgICAgICAgICAgICgweEZGRkZGMjEwKSAvLyAoREJHVSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfQ1IgICAgICAgICAgICAgKDB4RkZGRkYyMDApIC8vIChEQkdVKSBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX0ZOVFIgICAgICAgICAgICgweEZGRkZGMjQ4KSAvLyAoREJHVSkgRm9yY2UgTlRSU1QgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfVEhSICAgICAgICAgICAgKDB4RkZGRkYyMUMpIC8vIChEQkdVKSBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1JIUiAgICAgICAgICAgICgweEZGRkZGMjE4KSAvLyAoREJHVSkgUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9JRVIgICAgICAgICAgICAoMHhGRkZGRjIwOCkgLy8gKERCR1UpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBJT0EgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUElPQV9PRFIgICAgICAgICAgICAoMHhGRkZGRjQxNCkgLy8gKFBJT0EpIE91dHB1dCBEaXNhYmxlIFJlZ2lzdGVycg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9TT0RSICAgICAgICAgICAoMHhGRkZGRjQzMCkgLy8gKFBJT0EpIFNldCBPdXRwdXQgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9JU1IgICAgICAgICAgICAoMHhGRkZGRjQ0QykgLy8gKFBJT0EpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfQUJTUiAgICAgICAgICAgKDB4RkZGRkY0NzgpIC8vIChQSU9BKSBBQiBTZWxlY3QgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0lFUiAgICAgICAgICAgICgweEZGRkZGNDQwKSAvLyAoUElPQSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9QUFVEUiAgICAgICAgICAoMHhGRkZGRjQ2MCkgLy8gKFBJT0EpIFB1bGwtdXAgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9JTVIgICAgICAgICAgICAoMHhGRkZGRjQ0OCkgLy8gKFBJT0EpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX1BFUiAgICAgICAgICAgICgweEZGRkZGNDAwKSAvLyAoUElPQSkgUElPIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9JRkRSICAgICAgICAgICAoMHhGRkZGRjQyNCkgLy8gKFBJT0EpIElucHV0IEZpbHRlciBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX09XRFIgICAgICAgICAgICgweEZGRkZGNEE0KSAvLyAoUElPQSkgT3V0cHV0IFdyaXRlIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfTURTUiAgICAgICAgICAgKDB4RkZGRkY0NTgpIC8vIChQSU9BKSBNdWx0aS1kcml2ZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0lEUiAgICAgICAgICAgICgweEZGRkZGNDQ0KSAvLyAoUElPQSkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfT0RTUiAgICAgICAgICAgKDB4RkZGRkY0MzgpIC8vIChQSU9BKSBPdXRwdXQgRGF0YSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfUFBVU1IgICAgICAgICAgKDB4RkZGRkY0NjgpIC8vIChQSU9BKSBQdWxsLXVwIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9PV1NSICAgICAgICAgICAoMHhGRkZGRjRBOCkgLy8gKFBJT0EpIE91dHB1dCBXcml0ZSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfQlNSICAgICAgICAgICAgKDB4RkZGRkY0NzQpIC8vIChQSU9BKSBTZWxlY3QgQiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9PV0VSICAgICAgICAgICAoMHhGRkZGRjRBMCkgLy8gKFBJT0EpIE91dHB1dCBXcml0ZSBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfSUZFUiAgICAgICAgICAgKDB4RkZGRkY0MjApIC8vIChQSU9BKSBJbnB1dCBGaWx0ZXIgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX1BEU1IgICAgICAgICAgICgweEZGRkZGNDNDKSAvLyAoUElPQSkgUGluIERhdGEgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX1BQVUVSICAgICAgICAgICgweEZGRkZGNDY0KSAvLyAoUElPQSkgUHVsbC11cCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfT1NSICAgICAgICAgICAgKDB4RkZGRkY0MTgpIC8vIChQSU9BKSBPdXRwdXQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0FTUiAgICAgICAgICAgICgweEZGRkZGNDcwKSAvLyAoUElPQSkgU2VsZWN0IEEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfTUREUiAgICAgICAgICAgKDB4RkZGRkY0NTQpIC8vIChQSU9BKSBNdWx0aS1kcml2ZXIgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9DT0RSICAgICAgICAgICAoMHhGRkZGRjQzNCkgLy8gKFBJT0EpIENsZWFyIE91dHB1dCBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX01ERVIgICAgICAgICAgICgweEZGRkZGNDUwKSAvLyAoUElPQSkgTXVsdGktZHJpdmVyIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9QRFIgICAgICAgICAgICAoMHhGRkZGRjQwNCkgLy8gKFBJT0EpIFBJTyBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0lGU1IgICAgICAgICAgICgweEZGRkZGNDI4KSAvLyAoUElPQSkgSW5wdXQgRmlsdGVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9PRVIgICAgICAgICAgICAoMHhGRkZGRjQxMCkgLy8gKFBJT0EpIE91dHB1dCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfUFNSICAgICAgICAgICAgKDB4RkZGRkY0MDgpIC8vIChQSU9BKSBQSU8gU3RhdHVzIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQSU9CIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1BJT0JfT1dEUiAgICAgICAgICAgKDB4RkZGRkY2QTQpIC8vIChQSU9CKSBPdXRwdXQgV3JpdGUgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9NREVSICAgICAgICAgICAoMHhGRkZGRjY1MCkgLy8gKFBJT0IpIE11bHRpLWRyaXZlciBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfUFBVU1IgICAgICAgICAgKDB4RkZGRkY2NjgpIC8vIChQSU9CKSBQdWxsLXVwIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9JTVIgICAgICAgICAgICAoMHhGRkZGRjY0OCkgLy8gKFBJT0IpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX0FTUiAgICAgICAgICAgICgweEZGRkZGNjcwKSAvLyAoUElPQikgU2VsZWN0IEEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfUFBVRFIgICAgICAgICAgKDB4RkZGRkY2NjApIC8vIChQSU9CKSBQdWxsLXVwIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfUFNSICAgICAgICAgICAgKDB4RkZGRkY2MDgpIC8vIChQSU9CKSBQSU8gU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX0lFUiAgICAgICAgICAgICgweEZGRkZGNjQwKSAvLyAoUElPQikgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9DT0RSICAgICAgICAgICAoMHhGRkZGRjYzNCkgLy8gKFBJT0IpIENsZWFyIE91dHB1dCBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX09XRVIgICAgICAgICAgICgweEZGRkZGNkEwKSAvLyAoUElPQikgT3V0cHV0IFdyaXRlIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9BQlNSICAgICAgICAgICAoMHhGRkZGRjY3OCkgLy8gKFBJT0IpIEFCIFNlbGVjdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfSUZEUiAgICAgICAgICAgKDB4RkZGRkY2MjQpIC8vIChQSU9CKSBJbnB1dCBGaWx0ZXIgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9QRFNSICAgICAgICAgICAoMHhGRkZGRjYzQykgLy8gKFBJT0IpIFBpbiBEYXRhIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9JRFIgICAgICAgICAgICAoMHhGRkZGRjY0NCkgLy8gKFBJT0IpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX09XU1IgICAgICAgICAgICgweEZGRkZGNkE4KSAvLyAoUElPQikgT3V0cHV0IFdyaXRlIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9QRFIgICAgICAgICAgICAoMHhGRkZGRjYwNCkgLy8gKFBJT0IpIFBJTyBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX09EUiAgICAgICAgICAgICgweEZGRkZGNjE0KSAvLyAoUElPQikgT3V0cHV0IERpc2FibGUgUmVnaXN0ZXJyDQorI2RlZmluZSBBVDkxQ19QSU9CX0lGU1IgICAgICAgICAgICgweEZGRkZGNjI4KSAvLyAoUElPQikgSW5wdXQgRmlsdGVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9QUFVFUiAgICAgICAgICAoMHhGRkZGRjY2NCkgLy8gKFBJT0IpIFB1bGwtdXAgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX1NPRFIgICAgICAgICAgICgweEZGRkZGNjMwKSAvLyAoUElPQikgU2V0IE91dHB1dCBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX0lTUiAgICAgICAgICAgICgweEZGRkZGNjRDKSAvLyAoUElPQikgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9PRFNSICAgICAgICAgICAoMHhGRkZGRjYzOCkgLy8gKFBJT0IpIE91dHB1dCBEYXRhIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9PU1IgICAgICAgICAgICAoMHhGRkZGRjYxOCkgLy8gKFBJT0IpIE91dHB1dCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfTURTUiAgICAgICAgICAgKDB4RkZGRkY2NTgpIC8vIChQSU9CKSBNdWx0aS1kcml2ZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX0lGRVIgICAgICAgICAgICgweEZGRkZGNjIwKSAvLyAoUElPQikgSW5wdXQgRmlsdGVyIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9CU1IgICAgICAgICAgICAoMHhGRkZGRjY3NCkgLy8gKFBJT0IpIFNlbGVjdCBCIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX01ERFIgICAgICAgICAgICgweEZGRkZGNjU0KSAvLyAoUElPQikgTXVsdGktZHJpdmVyIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfT0VSICAgICAgICAgICAgKDB4RkZGRkY2MTApIC8vIChQSU9CKSBPdXRwdXQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX1BFUiAgICAgICAgICAgICgweEZGRkZGNjAwKSAvLyAoUElPQikgUElPIEVuYWJsZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0tHUiBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19DS0dSX01PUiAgICAgICAgICAgICgweEZGRkZGQzIwKSAvLyAoQ0tHUikgTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DS0dSX1BMTFIgICAgICAgICAgICgweEZGRkZGQzJDKSAvLyAoQ0tHUikgUExMIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DS0dSX01DRlIgICAgICAgICAgICgweEZGRkZGQzI0KSAvLyAoQ0tHUikgTWFpbiBDbG9jayAgRnJlcXVlbmN5IFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQTUMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUE1DX0lEUiAgICAgICAgICAgICAoMHhGRkZGRkM2NCkgLy8gKFBNQykgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19NT1IgICAgICAgICAgICAgKDB4RkZGRkZDMjApIC8vIChQTUMpIE1haW4gT3NjaWxsYXRvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BMTFIgICAgICAgICAgICAoMHhGRkZGRkMyQykgLy8gKFBNQykgUExMIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfUENFUiAgICAgICAgICAgICgweEZGRkZGQzEwKSAvLyAoUE1DKSBQZXJpcGhlcmFsIENsb2NrIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDS1IgICAgICAgICAgICAoMHhGRkZGRkM0MCkgLy8gKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfTUNLUiAgICAgICAgICAgICgweEZGRkZGQzMwKSAvLyAoUE1DKSBNYXN0ZXIgQ2xvY2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19TQ0RSICAgICAgICAgICAgKDB4RkZGRkZDMDQpIC8vIChQTUMpIFN5c3RlbSBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfUENEUiAgICAgICAgICAgICgweEZGRkZGQzE0KSAvLyAoUE1DKSBQZXJpcGhlcmFsIENsb2NrIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19TQ1NSICAgICAgICAgICAgKDB4RkZGRkZDMDgpIC8vIChQTUMpIFN5c3RlbSBDbG9jayBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19QQ1NSICAgICAgICAgICAgKDB4RkZGRkZDMTgpIC8vIChQTUMpIFBlcmlwaGVyYWwgQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfTUNGUiAgICAgICAgICAgICgweEZGRkZGQzI0KSAvLyAoUE1DKSBNYWluIENsb2NrICBGcmVxdWVuY3kgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19TQ0VSICAgICAgICAgICAgKDB4RkZGRkZDMDApIC8vIChQTUMpIFN5c3RlbSBDbG9jayBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19JTVIgICAgICAgICAgICAgKDB4RkZGRkZDNkMpIC8vIChQTUMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfSUVSICAgICAgICAgICAgICgweEZGRkZGQzYwKSAvLyAoUE1DKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfU1IgICAgICAgICAgICAgICgweEZGRkZGQzY4KSAvLyAoUE1DKSBTdGF0dXMgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFJTVEMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19SQ1IgICAgICAgICAgICAoMHhGRkZGRkQwMCkgLy8gKFJTVEMpIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1JTVENfUk1SICAgICAgICAgICAgKDB4RkZGRkZEMDgpIC8vIChSU1RDKSBSZXNldCBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19SU1RDX1JTUiAgICAgICAgICAgICgweEZGRkZGRDA0KSAvLyAoUlNUQykgUmVzZXQgU3RhdHVzIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBSVFRDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1JUVENfUlRTUiAgICAgICAgICAgKDB4RkZGRkZEMkMpIC8vIChSVFRDKSBSZWFsLXRpbWUgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19SVFRDX1JUTVIgICAgICAgICAgICgweEZGRkZGRDIwKSAvLyAoUlRUQykgUmVhbC10aW1lIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1JUVENfUlRWUiAgICAgICAgICAgKDB4RkZGRkZEMjgpIC8vIChSVFRDKSBSZWFsLXRpbWUgVmFsdWUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1JUVENfUlRBUiAgICAgICAgICAgKDB4RkZGRkZEMjQpIC8vIChSVFRDKSBSZWFsLXRpbWUgQWxhcm0gUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBJVEMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUElUQ19QSVZSICAgICAgICAgICAoMHhGRkZGRkQzOCkgLy8gKFBJVEMpIFBlcmlvZCBJbnRlcnZhbCBWYWx1ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElUQ19QSVNSICAgICAgICAgICAoMHhGRkZGRkQzNCkgLy8gKFBJVEMpIFBlcmlvZCBJbnRlcnZhbCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJVENfUElJUiAgICAgICAgICAgKDB4RkZGRkZEM0MpIC8vIChQSVRDKSBQZXJpb2QgSW50ZXJ2YWwgSW1hZ2UgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJVENfUElNUiAgICAgICAgICAgKDB4RkZGRkZEMzApIC8vIChQSVRDKSBQZXJpb2QgSW50ZXJ2YWwgTW9kZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgV0RUQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19XRFRDX1dEQ1IgICAgICAgICAgICgweEZGRkZGRDQwKSAvLyAoV0RUQykgV2F0Y2hkb2cgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRFNSICAgICAgICAgICAoMHhGRkZGRkQ0OCkgLy8gKFdEVEMpIFdhdGNoZG9nIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRE1SICAgICAgICAgICAoMHhGRkZGRkQ0NCkgLy8gKFdEVEMpIFdhdGNoZG9nIE1vZGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFZSRUcgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVlJFR19NUiAgICAgICAgICAgICAoMHhGRkZGRkQ2MCkgLy8gKFZSRUcpIFZvbHRhZ2UgUmVndWxhdG9yIE1vZGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIE1DIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX01DX0FTUiAgICAgICAgICAgICAgKDB4RkZGRkZGMDQpIC8vIChNQykgTUMgQWJvcnQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19NQ19SQ1IgICAgICAgICAgICAgICgweEZGRkZGRjAwKSAvLyAoTUMpIE1DIFJlbWFwIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX01DX0ZDUiAgICAgICAgICAgICAgKDB4RkZGRkZGNjQpIC8vIChNQykgTUMgRmxhc2ggQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfTUNfQUFTUiAgICAgICAgICAgICAoMHhGRkZGRkYwOCkgLy8gKE1DKSBNQyBBYm9ydCBBZGRyZXNzIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfTUNfRlNSICAgICAgICAgICAgICAoMHhGRkZGRkY2OCkgLy8gKE1DKSBNQyBGbGFzaCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX01DX0ZNUiAgICAgICAgICAgICAgKDB4RkZGRkZGNjApIC8vIChNQykgTUMgRmxhc2ggTW9kZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX1NQSTEgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9QVENSICAgICAgICAgICAoMHhGRkZFNDEyMCkgLy8gKFBEQ19TUEkxKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9SUFIgICAgICAgICAgICAoMHhGRkZFNDEwMCkgLy8gKFBEQ19TUEkxKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfVE5DUiAgICAgICAgICAgKDB4RkZGRTQxMUMpIC8vIChQRENfU1BJMSkgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX1RQUiAgICAgICAgICAgICgweEZGRkU0MTA4KSAvLyAoUERDX1NQSTEpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfVE5QUiAgICAgICAgICAgKDB4RkZGRTQxMTgpIC8vIChQRENfU1BJMSkgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX1RDUiAgICAgICAgICAgICgweEZGRkU0MTBDKSAvLyAoUERDX1NQSTEpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfUkNSICAgICAgICAgICAgKDB4RkZGRTQxMDQpIC8vIChQRENfU1BJMSkgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX1JOUFIgICAgICAgICAgICgweEZGRkU0MTEwKSAvLyAoUERDX1NQSTEpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX1JOQ1IgICAgICAgICAgICgweEZGRkU0MTE0KSAvLyAoUERDX1NQSTEpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX1BUU1IgICAgICAgICAgICgweEZGRkU0MTI0KSAvLyAoUERDX1NQSTEpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFNQSTEgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9JTVIgICAgICAgICAgICAoMHhGRkZFNDAxQykgLy8gKFNQSTEpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX0lFUiAgICAgICAgICAgICgweEZGRkU0MDE0KSAvLyAoU1BJMSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9NUiAgICAgICAgICAgICAoMHhGRkZFNDAwNCkgLy8gKFNQSTEpIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfUkRSICAgICAgICAgICAgKDB4RkZGRTQwMDgpIC8vIChTUEkxKSBSZWNlaXZlIERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfSURSICAgICAgICAgICAgKDB4RkZGRTQwMTgpIC8vIChTUEkxKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9TUiAgICAgICAgICAgICAoMHhGRkZFNDAxMCkgLy8gKFNQSTEpIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9URFIgICAgICAgICAgICAoMHhGRkZFNDAwQykgLy8gKFNQSTEpIFRyYW5zbWl0IERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfQ1IgICAgICAgICAgICAgKDB4RkZGRTQwMDApIC8vIChTUEkxKSBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX0NTUiAgICAgICAgICAgICgweEZGRkU0MDMwKSAvLyAoU1BJMSkgQ2hpcCBTZWxlY3QgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19TUEkwIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1NQSTBfUFRDUiAgICAgICAgICAgKDB4RkZGRTAxMjApIC8vIChQRENfU1BJMCkgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfVFBSICAgICAgICAgICAgKDB4RkZGRTAxMDgpIC8vIChQRENfU1BJMCkgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9UQ1IgICAgICAgICAgICAoMHhGRkZFMDEwQykgLy8gKFBEQ19TUEkwKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1JDUiAgICAgICAgICAgICgweEZGRkUwMTA0KSAvLyAoUERDX1NQSTApIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9QVFNSICAgICAgICAgICAoMHhGRkZFMDEyNCkgLy8gKFBEQ19TUEkwKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1JOUFIgICAgICAgICAgICgweEZGRkUwMTEwKSAvLyAoUERDX1NQSTApIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1JQUiAgICAgICAgICAgICgweEZGRkUwMTAwKSAvLyAoUERDX1NQSTApIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9UTkNSICAgICAgICAgICAoMHhGRkZFMDExQykgLy8gKFBEQ19TUEkwKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfUk5DUiAgICAgICAgICAgKDB4RkZGRTAxMTQpIC8vIChQRENfU1BJMCkgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfVE5QUiAgICAgICAgICAgKDB4RkZGRTAxMTgpIC8vIChQRENfU1BJMCkgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBTUEkwIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1NQSTBfSUVSICAgICAgICAgICAgKDB4RkZGRTAwMTQpIC8vIChTUEkwKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1NSICAgICAgICAgICAgICgweEZGRkUwMDEwKSAvLyAoU1BJMCkgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX0lEUiAgICAgICAgICAgICgweEZGRkUwMDE4KSAvLyAoU1BJMCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfQ1IgICAgICAgICAgICAgKDB4RkZGRTAwMDApIC8vIChTUEkwKSBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX01SICAgICAgICAgICAgICgweEZGRkUwMDA0KSAvLyAoU1BJMCkgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9JTVIgICAgICAgICAgICAoMHhGRkZFMDAxQykgLy8gKFNQSTApIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1REUiAgICAgICAgICAgICgweEZGRkUwMDBDKSAvLyAoU1BJMCkgVHJhbnNtaXQgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9SRFIgICAgICAgICAgICAoMHhGRkZFMDAwOCkgLy8gKFNQSTApIFJlY2VpdmUgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9DU1IgICAgICAgICAgICAoMHhGRkZFMDAzMCkgLy8gKFNQSTApIENoaXAgU2VsZWN0IFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfVVMxIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1VTMV9STkNSICAgICAgICAgICAgKDB4RkZGQzQxMTQpIC8vIChQRENfVVMxKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1BUQ1IgICAgICAgICAgICAoMHhGRkZDNDEyMCkgLy8gKFBEQ19VUzEpIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfVENSICAgICAgICAgICAgICgweEZGRkM0MTBDKSAvLyAoUERDX1VTMSkgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1BUU1IgICAgICAgICAgICAoMHhGRkZDNDEyNCkgLy8gKFBEQ19VUzEpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9UTlBSICAgICAgICAgICAgKDB4RkZGQzQxMTgpIC8vIChQRENfVVMxKSBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9SQ1IgICAgICAgICAgICAgKDB4RkZGQzQxMDQpIC8vIChQRENfVVMxKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9STlBSICAgICAgICAgICAgKDB4RkZGQzQxMTApIC8vIChQRENfVVMxKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1JQUiAgICAgICAgICAgICAoMHhGRkZDNDEwMCkgLy8gKFBEQ19VUzEpIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1ROQ1IgICAgICAgICAgICAoMHhGRkZDNDExQykgLy8gKFBEQ19VUzEpIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1RQUiAgICAgICAgICAgICAoMHhGRkZDNDEwOCkgLy8gKFBEQ19VUzEpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFVTMSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19VUzFfSUYgICAgICAgICAgICAgICgweEZGRkM0MDRDKSAvLyAoVVMxKSBJUkRBX0ZJTFRFUiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX05FUiAgICAgICAgICAgICAoMHhGRkZDNDA0NCkgLy8gKFVTMSkgTmIgRXJyb3JzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfUlRPUiAgICAgICAgICAgICgweEZGRkM0MDI0KSAvLyAoVVMxKSBSZWNlaXZlciBUaW1lLW91dCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX0NTUiAgICAgICAgICAgICAoMHhGRkZDNDAxNCkgLy8gKFVTMSkgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9JRFIgICAgICAgICAgICAgKDB4RkZGQzQwMEMpIC8vIChVUzEpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfSUVSICAgICAgICAgICAgICgweEZGRkM0MDA4KSAvLyAoVVMxKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfVEhSICAgICAgICAgICAgICgweEZGRkM0MDFDKSAvLyAoVVMxKSBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfVFRHUiAgICAgICAgICAgICgweEZGRkM0MDI4KSAvLyAoVVMxKSBUcmFuc21pdHRlciBUaW1lLWd1YXJkIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfUkhSICAgICAgICAgICAgICgweEZGRkM0MDE4KSAvLyAoVVMxKSBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfQlJHUiAgICAgICAgICAgICgweEZGRkM0MDIwKSAvLyAoVVMxKSBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfSU1SICAgICAgICAgICAgICgweEZGRkM0MDEwKSAvLyAoVVMxKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX0ZJREkgICAgICAgICAgICAoMHhGRkZDNDA0MCkgLy8gKFVTMSkgRklfRElfUmF0aW8gUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9DUiAgICAgICAgICAgICAgKDB4RkZGQzQwMDApIC8vIChVUzEpIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9NUiAgICAgICAgICAgICAgKDB4RkZGQzQwMDQpIC8vIChVUzEpIE1vZGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19VUzAgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVVMwX1ROUFIgICAgICAgICAgICAoMHhGRkZDMDExOCkgLy8gKFBEQ19VUzApIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1JOUFIgICAgICAgICAgICAoMHhGRkZDMDExMCkgLy8gKFBEQ19VUzApIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfVENSICAgICAgICAgICAgICgweEZGRkMwMTBDKSAvLyAoUERDX1VTMCkgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1BUQ1IgICAgICAgICAgICAoMHhGRkZDMDEyMCkgLy8gKFBEQ19VUzApIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfUFRTUiAgICAgICAgICAgICgweEZGRkMwMTI0KSAvLyAoUERDX1VTMCkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1ROQ1IgICAgICAgICAgICAoMHhGRkZDMDExQykgLy8gKFBEQ19VUzApIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1RQUiAgICAgICAgICAgICAoMHhGRkZDMDEwOCkgLy8gKFBEQ19VUzApIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9SQ1IgICAgICAgICAgICAgKDB4RkZGQzAxMDQpIC8vIChQRENfVVMwKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9SUFIgICAgICAgICAgICAgKDB4RkZGQzAxMDApIC8vIChQRENfVVMwKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9STkNSICAgICAgICAgICAgKDB4RkZGQzAxMTQpIC8vIChQRENfVVMwKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVVMwIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1VTMF9CUkdSICAgICAgICAgICAgKDB4RkZGQzAwMjApIC8vIChVUzApIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9ORVIgICAgICAgICAgICAgKDB4RkZGQzAwNDQpIC8vIChVUzApIE5iIEVycm9ycyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX0NSICAgICAgICAgICAgICAoMHhGRkZDMDAwMCkgLy8gKFVTMCkgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX0lNUiAgICAgICAgICAgICAoMHhGRkZDMDAxMCkgLy8gKFVTMCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9GSURJICAgICAgICAgICAgKDB4RkZGQzAwNDApIC8vIChVUzApIEZJX0RJX1JhdGlvIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfVFRHUiAgICAgICAgICAgICgweEZGRkMwMDI4KSAvLyAoVVMwKSBUcmFuc21pdHRlciBUaW1lLWd1YXJkIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfTVIgICAgICAgICAgICAgICgweEZGRkMwMDA0KSAvLyAoVVMwKSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfUlRPUiAgICAgICAgICAgICgweEZGRkMwMDI0KSAvLyAoVVMwKSBSZWNlaXZlciBUaW1lLW91dCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX0NTUiAgICAgICAgICAgICAoMHhGRkZDMDAxNCkgLy8gKFVTMCkgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9SSFIgICAgICAgICAgICAgKDB4RkZGQzAwMTgpIC8vIChVUzApIFJlY2VpdmVyIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9JRFIgICAgICAgICAgICAgKDB4RkZGQzAwMEMpIC8vIChVUzApIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfVEhSICAgICAgICAgICAgICgweEZGRkMwMDFDKSAvLyAoVVMwKSBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfSUYgICAgICAgICAgICAgICgweEZGRkMwMDRDKSAvLyAoVVMwKSBJUkRBX0ZJTFRFUiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX0lFUiAgICAgICAgICAgICAoMHhGRkZDMDAwOCkgLy8gKFVTMCkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX1NTQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19TU0NfVE5DUiAgICAgICAgICAgICgweEZGRkQ0MTFDKSAvLyAoUERDX1NTQykgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUlBSICAgICAgICAgICAgICgweEZGRkQ0MTAwKSAvLyAoUERDX1NTQykgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUk5DUiAgICAgICAgICAgICgweEZGRkQ0MTE0KSAvLyAoUERDX1NTQykgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19UUFIgICAgICAgICAgICAgKDB4RkZGRDQxMDgpIC8vIChQRENfU1NDKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUFRDUiAgICAgICAgICAgICgweEZGRkQ0MTIwKSAvLyAoUERDX1NTQykgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19UQ1IgICAgICAgICAgICAgKDB4RkZGRDQxMEMpIC8vIChQRENfU1NDKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUkNSICAgICAgICAgICAgICgweEZGRkQ0MTA0KSAvLyAoUERDX1NTQykgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUk5QUiAgICAgICAgICAgICgweEZGRkQ0MTEwKSAvLyAoUERDX1NTQykgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19UTlBSICAgICAgICAgICAgKDB4RkZGRDQxMTgpIC8vIChQRENfU1NDKSBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19QVFNSICAgICAgICAgICAgKDB4RkZGRDQxMjQpIC8vIChQRENfU1NDKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBTU0MgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JIUiAgICAgICAgICAgICAoMHhGRkZENDAyMCkgLy8gKFNTQykgUmVjZWl2ZSBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUlNIUiAgICAgICAgICAgICgweEZGRkQ0MDMwKSAvLyAoU1NDKSBSZWNlaXZlIFN5bmMgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RGTVIgICAgICAgICAgICAoMHhGRkZENDAxQykgLy8gKFNTQykgVHJhbnNtaXQgRnJhbWUgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX0lEUiAgICAgICAgICAgICAoMHhGRkZENDA0OCkgLy8gKFNTQykgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19USFIgICAgICAgICAgICAgKDB4RkZGRDQwMjQpIC8vIChTU0MpIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19SQ01SICAgICAgICAgICAgKDB4RkZGRDQwMTApIC8vIChTU0MpIFJlY2VpdmUgQ2xvY2sgTW9kZVJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfSUVSICAgICAgICAgICAgICgweEZGRkQ0MDQ0KSAvLyAoU1NDKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfVFNIUiAgICAgICAgICAgICgweEZGRkQ0MDM0KSAvLyAoU1NDKSBUcmFuc21pdCBTeW5jIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19TUiAgICAgICAgICAgICAgKDB4RkZGRDQwNDApIC8vIChTU0MpIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX0NNUiAgICAgICAgICAgICAoMHhGRkZENDAwNCkgLy8gKFNTQykgQ2xvY2sgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RDTVIgICAgICAgICAgICAoMHhGRkZENDAxOCkgLy8gKFNTQykgVHJhbnNtaXQgQ2xvY2sgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX0NSICAgICAgICAgICAgICAoMHhGRkZENDAwMCkgLy8gKFNTQykgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX0lNUiAgICAgICAgICAgICAoMHhGRkZENDA0QykgLy8gKFNTQykgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19SRk1SICAgICAgICAgICAgKDB4RkZGRDQwMTQpIC8vIChTU0MpIFJlY2VpdmUgRnJhbWUgTW9kZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVFdJIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1RXSV9JRVIgICAgICAgICAgICAgKDB4RkZGQjgwMjQpIC8vIChUV0kpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9DUiAgICAgICAgICAgICAgKDB4RkZGQjgwMDApIC8vIChUV0kpIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9TUiAgICAgICAgICAgICAgKDB4RkZGQjgwMjApIC8vIChUV0kpIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX0lNUiAgICAgICAgICAgICAoMHhGRkZCODAyQykgLy8gKFRXSSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9USFIgICAgICAgICAgICAgKDB4RkZGQjgwMzQpIC8vIChUV0kpIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9JRFIgICAgICAgICAgICAgKDB4RkZGQjgwMjgpIC8vIChUV0kpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UV0lfSUFEUiAgICAgICAgICAgICgweEZGRkI4MDBDKSAvLyAoVFdJKSBJbnRlcm5hbCBBZGRyZXNzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UV0lfTU1SICAgICAgICAgICAgICgweEZGRkI4MDA0KSAvLyAoVFdJKSBNYXN0ZXIgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX0NXR1IgICAgICAgICAgICAoMHhGRkZCODAxMCkgLy8gKFRXSSkgQ2xvY2sgV2F2ZWZvcm0gR2VuZXJhdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UV0lfUkhSICAgICAgICAgICAgICgweEZGRkI4MDMwKSAvLyAoVFdJKSBSZWNlaXZlIEhvbGRpbmcgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBXTUNfQ0gzIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gzX0NVUERSICAgICAgKDB4RkZGQ0MyNzApIC8vIChQV01DX0NIMykgQ2hhbm5lbCBVcGRhdGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gzX1Jlc2VydmVkICAgKDB4RkZGQ0MyNzQpIC8vIChQV01DX0NIMykgUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gzX0NQUkRSICAgICAgKDB4RkZGQ0MyNjgpIC8vIChQV01DX0NIMykgQ2hhbm5lbCBQZXJpb2QgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gzX0NEVFlSICAgICAgKDB4RkZGQ0MyNjQpIC8vIChQV01DX0NIMykgQ2hhbm5lbCBEdXR5IEN5Y2xlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIM19DQ05UUiAgICAgICgweEZGRkNDMjZDKSAvLyAoUFdNQ19DSDMpIENoYW5uZWwgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDNfQ01SICAgICAgICAoMHhGRkZDQzI2MCkgLy8gKFBXTUNfQ0gzKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBXTUNfQ0gyIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gyX1Jlc2VydmVkICAgKDB4RkZGQ0MyNTQpIC8vIChQV01DX0NIMikgUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gyX0NNUiAgICAgICAgKDB4RkZGQ0MyNDApIC8vIChQV01DX0NIMikgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMl9DQ05UUiAgICAgICgweEZGRkNDMjRDKSAvLyAoUFdNQ19DSDIpIENoYW5uZWwgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDJfQ1BSRFIgICAgICAoMHhGRkZDQzI0OCkgLy8gKFBXTUNfQ0gyKSBDaGFubmVsIFBlcmlvZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDJfQ1VQRFIgICAgICAoMHhGRkZDQzI1MCkgLy8gKFBXTUNfQ0gyKSBDaGFubmVsIFVwZGF0ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDJfQ0RUWVIgICAgICAoMHhGRkZDQzI0NCkgLy8gKFBXTUNfQ0gyKSBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBXTUNfQ0gxIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gxX1Jlc2VydmVkICAgKDB4RkZGQ0MyMzQpIC8vIChQV01DX0NIMSkgUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gxX0NVUERSICAgICAgKDB4RkZGQ0MyMzApIC8vIChQV01DX0NIMSkgQ2hhbm5lbCBVcGRhdGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gxX0NQUkRSICAgICAgKDB4RkZGQ0MyMjgpIC8vIChQV01DX0NIMSkgQ2hhbm5lbCBQZXJpb2QgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gxX0NDTlRSICAgICAgKDB4RkZGQ0MyMkMpIC8vIChQV01DX0NIMSkgQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMV9DRFRZUiAgICAgICgweEZGRkNDMjI0KSAvLyAoUFdNQ19DSDEpIENoYW5uZWwgRHV0eSBDeWNsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDFfQ01SICAgICAgICAoMHhGRkZDQzIyMCkgLy8gKFBXTUNfQ0gxKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBXTUNfQ0gwIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gwX1Jlc2VydmVkICAgKDB4RkZGQ0MyMTQpIC8vIChQV01DX0NIMCkgUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gwX0NQUkRSICAgICAgKDB4RkZGQ0MyMDgpIC8vIChQV01DX0NIMCkgQ2hhbm5lbCBQZXJpb2QgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gwX0NEVFlSICAgICAgKDB4RkZGQ0MyMDQpIC8vIChQV01DX0NIMCkgQ2hhbm5lbCBEdXR5IEN5Y2xlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMF9DTVIgICAgICAgICgweEZGRkNDMjAwKSAvLyAoUFdNQ19DSDApIENoYW5uZWwgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDBfQ1VQRFIgICAgICAoMHhGRkZDQzIxMCkgLy8gKFBXTUNfQ0gwKSBDaGFubmVsIFVwZGF0ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDBfQ0NOVFIgICAgICAoMHhGRkZDQzIwQykgLy8gKFBXTUNfQ0gwKSBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBXTUMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19JRFIgICAgICAgICAgICAoMHhGRkZDQzAxNCkgLy8gKFBXTUMpIFBXTUMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfRElTICAgICAgICAgICAgKDB4RkZGQ0MwMDgpIC8vIChQV01DKSBQV01DIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfSUVSICAgICAgICAgICAgKDB4RkZGQ0MwMTApIC8vIChQV01DKSBQV01DIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfVlIgICAgICAgICAgICAgKDB4RkZGQ0MwRkMpIC8vIChQV01DKSBQV01DIFZlcnNpb24gUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfSVNSICAgICAgICAgICAgKDB4RkZGQ0MwMUMpIC8vIChQV01DKSBQV01DIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfU1IgICAgICAgICAgICAgKDB4RkZGQ0MwMEMpIC8vIChQV01DKSBQV01DIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19JTVIgICAgICAgICAgICAoMHhGRkZDQzAxOCkgLy8gKFBXTUMpIFBXTUMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfTVIgICAgICAgICAgICAgKDB4RkZGQ0MwMDApIC8vIChQV01DKSBQV01DIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfRU5BICAgICAgICAgICAgKDB4RkZGQ0MwMDQpIC8vIChQV01DKSBQV01DIEVuYWJsZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVURQIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1VEUF9JTVIgICAgICAgICAgICAgKDB4RkZGQjAwMTgpIC8vIChVRFApIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfRkFERFIgICAgICAgICAgICgweEZGRkIwMDA4KSAvLyAoVURQKSBGdW5jdGlvbiBBZGRyZXNzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfTlVNICAgICAgICAgICAgICgweEZGRkIwMDAwKSAvLyAoVURQKSBGcmFtZSBOdW1iZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9GRFIgICAgICAgICAgICAgKDB4RkZGQjAwNTApIC8vIChVRFApIEVuZHBvaW50IEZJRk8gRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVURQX0lTUiAgICAgICAgICAgICAoMHhGRkZCMDAxQykgLy8gKFVEUCkgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVURQX0NTUiAgICAgICAgICAgICAoMHhGRkZCMDAzMCkgLy8gKFVEUCkgRW5kcG9pbnQgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfSURSICAgICAgICAgICAgICgweEZGRkIwMDE0KSAvLyAoVURQKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVURQX0lDUiAgICAgICAgICAgICAoMHhGRkZCMDAyMCkgLy8gKFVEUCkgSW50ZXJydXB0IENsZWFyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfUlNURVAgICAgICAgICAgICgweEZGRkIwMDI4KSAvLyAoVURQKSBSZXNldCBFbmRwb2ludCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVURQX1RYVkMgICAgICAgICAgICAoMHhGRkZCMDA3NCkgLy8gKFVEUCkgVHJhbnNjZWl2ZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVURQX0dMQlNUQVRFICAgICAgICAoMHhGRkZCMDAwNCkgLy8gKFVEUCkgR2xvYmFsIFN0YXRlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfSUVSICAgICAgICAgICAgICgweEZGRkIwMDEwKSAvLyAoVURQKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBUQzAgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVEMwX1NSICAgICAgICAgICAgICAoMHhGRkZBMDAyMCkgLy8gKFRDMCkgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzBfUkMgICAgICAgICAgICAgICgweEZGRkEwMDFDKSAvLyAoVEMwKSBSZWdpc3RlciBDDQorI2RlZmluZSBBVDkxQ19UQzBfUkIgICAgICAgICAgICAgICgweEZGRkEwMDE4KSAvLyAoVEMwKSBSZWdpc3RlciBCDQorI2RlZmluZSBBVDkxQ19UQzBfQ0NSICAgICAgICAgICAgICgweEZGRkEwMDAwKSAvLyAoVEMwKSBDaGFubmVsIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMF9DTVIgICAgICAgICAgICAgKDB4RkZGQTAwMDQpIC8vIChUQzApIENoYW5uZWwgTW9kZSBSZWdpc3RlciAoQ2FwdHVyZSBNb2RlIC8gV2F2ZWZvcm0gTW9kZSkNCisjZGVmaW5lIEFUOTFDX1RDMF9JRVIgICAgICAgICAgICAgKDB4RkZGQTAwMjQpIC8vIChUQzApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMF9SQSAgICAgICAgICAgICAgKDB4RkZGQTAwMTQpIC8vIChUQzApIFJlZ2lzdGVyIEENCisjZGVmaW5lIEFUOTFDX1RDMF9JRFIgICAgICAgICAgICAgKDB4RkZGQTAwMjgpIC8vIChUQzApIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzBfQ1YgICAgICAgICAgICAgICgweEZGRkEwMDEwKSAvLyAoVEMwKSBDb3VudGVyIFZhbHVlDQorI2RlZmluZSBBVDkxQ19UQzBfSU1SICAgICAgICAgICAgICgweEZGRkEwMDJDKSAvLyAoVEMwKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVEMxIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1RDMV9SQiAgICAgICAgICAgICAgKDB4RkZGQTAwNTgpIC8vIChUQzEpIFJlZ2lzdGVyIEINCisjZGVmaW5lIEFUOTFDX1RDMV9DQ1IgICAgICAgICAgICAgKDB4RkZGQTAwNDApIC8vIChUQzEpIENoYW5uZWwgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMxX0lFUiAgICAgICAgICAgICAoMHhGRkZBMDA2NCkgLy8gKFRDMSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMxX0lEUiAgICAgICAgICAgICAoMHhGRkZBMDA2OCkgLy8gKFRDMSkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMV9TUiAgICAgICAgICAgICAgKDB4RkZGQTAwNjApIC8vIChUQzEpIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMxX0NNUiAgICAgICAgICAgICAoMHhGRkZBMDA0NCkgLy8gKFRDMSkgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyIChDYXB0dXJlIE1vZGUgLyBXYXZlZm9ybSBNb2RlKQ0KKyNkZWZpbmUgQVQ5MUNfVEMxX1JBICAgICAgICAgICAgICAoMHhGRkZBMDA1NCkgLy8gKFRDMSkgUmVnaXN0ZXIgQQ0KKyNkZWZpbmUgQVQ5MUNfVEMxX1JDICAgICAgICAgICAgICAoMHhGRkZBMDA1QykgLy8gKFRDMSkgUmVnaXN0ZXIgQw0KKyNkZWZpbmUgQVQ5MUNfVEMxX0lNUiAgICAgICAgICAgICAoMHhGRkZBMDA2QykgLy8gKFRDMSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMV9DViAgICAgICAgICAgICAgKDB4RkZGQTAwNTApIC8vIChUQzEpIENvdW50ZXIgVmFsdWUNCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRDMiBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19UQzJfQ01SICAgICAgICAgICAgICgweEZGRkEwMDg0KSAvLyAoVEMyKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXIgKENhcHR1cmUgTW9kZSAvIFdhdmVmb3JtIE1vZGUpDQorI2RlZmluZSBBVDkxQ19UQzJfQ0NSICAgICAgICAgICAgICgweEZGRkEwMDgwKSAvLyAoVEMyKSBDaGFubmVsIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMl9DViAgICAgICAgICAgICAgKDB4RkZGQTAwOTApIC8vIChUQzIpIENvdW50ZXIgVmFsdWUNCisjZGVmaW5lIEFUOTFDX1RDMl9SQSAgICAgICAgICAgICAgKDB4RkZGQTAwOTQpIC8vIChUQzIpIFJlZ2lzdGVyIEENCisjZGVmaW5lIEFUOTFDX1RDMl9SQiAgICAgICAgICAgICAgKDB4RkZGQTAwOTgpIC8vIChUQzIpIFJlZ2lzdGVyIEINCisjZGVmaW5lIEFUOTFDX1RDMl9JRFIgICAgICAgICAgICAgKDB4RkZGQTAwQTgpIC8vIChUQzIpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzJfSU1SICAgICAgICAgICAgICgweEZGRkEwMEFDKSAvLyAoVEMyKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMyX1JDICAgICAgICAgICAgICAoMHhGRkZBMDA5QykgLy8gKFRDMikgUmVnaXN0ZXIgQw0KKyNkZWZpbmUgQVQ5MUNfVEMyX0lFUiAgICAgICAgICAgICAoMHhGRkZBMDBBNCkgLy8gKFRDMikgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMyX1NSICAgICAgICAgICAgICAoMHhGRkZBMDBBMCkgLy8gKFRDMikgU3RhdHVzIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBUQ0IgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVENCX0JNUiAgICAgICAgICAgICAoMHhGRkZBMDBDNCkgLy8gKFRDQikgVEMgQmxvY2sgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVENCX0JDUiAgICAgICAgICAgICAoMHhGRkZBMDBDMCkgLy8gKFRDQikgVEMgQmxvY2sgQ29udHJvbCBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CMCBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19DQU5fTUIwX01ETCAgICAgICAgICgweEZGRkQwMjE0KSAvLyAoQ0FOX01CMCkgTWFpbEJveCBEYXRhIExvdyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMF9NQU0gICAgICAgICAoMHhGRkZEMDIwNCkgLy8gKENBTl9NQjApIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIwX01DUiAgICAgICAgICgweEZGRkQwMjFDKSAvLyAoQ0FOX01CMCkgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIwX01JRCAgICAgICAgICgweEZGRkQwMjA4KSAvLyAoQ0FOX01CMCkgTWFpbEJveCBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMF9NU1IgICAgICAgICAoMHhGRkZEMDIxMCkgLy8gKENBTl9NQjApIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIwX01GSUQgICAgICAgICgweEZGRkQwMjBDKSAvLyAoQ0FOX01CMCkgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjBfTURIICAgICAgICAgKDB4RkZGRDAyMTgpIC8vIChDQU5fTUIwKSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMF9NTVIgICAgICAgICAoMHhGRkZEMDIwMCkgLy8gKENBTl9NQjApIE1haWxCb3ggTW9kZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CMSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxX01ETCAgICAgICAgICgweEZGRkQwMjM0KSAvLyAoQ0FOX01CMSkgTWFpbEJveCBEYXRhIExvdyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMV9NSUQgICAgICAgICAoMHhGRkZEMDIyOCkgLy8gKENBTl9NQjEpIE1haWxCb3ggSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjFfTU1SICAgICAgICAgKDB4RkZGRDAyMjApIC8vIChDQU5fTUIxKSBNYWlsQm94IE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjFfTVNSICAgICAgICAgKDB4RkZGRDAyMzApIC8vIChDQU5fTUIxKSBNYWlsQm94IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMV9NQU0gICAgICAgICAoMHhGRkZEMDIyNCkgLy8gKENBTl9NQjEpIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxX01ESCAgICAgICAgICgweEZGRkQwMjM4KSAvLyAoQ0FOX01CMSkgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjFfTUNSICAgICAgICAgKDB4RkZGRDAyM0MpIC8vIChDQU5fTUIxKSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjFfTUZJRCAgICAgICAgKDB4RkZGRDAyMkMpIC8vIChDQU5fTUIxKSBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CMiBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19DQU5fTUIyX01DUiAgICAgICAgICgweEZGRkQwMjVDKSAvLyAoQ0FOX01CMikgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIyX01ESCAgICAgICAgICgweEZGRkQwMjU4KSAvLyAoQ0FOX01CMikgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjJfTUlEICAgICAgICAgKDB4RkZGRDAyNDgpIC8vIChDQU5fTUIyKSBNYWlsQm94IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIyX01ETCAgICAgICAgICgweEZGRkQwMjU0KSAvLyAoQ0FOX01CMikgTWFpbEJveCBEYXRhIExvdyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NTVIgICAgICAgICAoMHhGRkZEMDI0MCkgLy8gKENBTl9NQjIpIE1haWxCb3ggTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NQU0gICAgICAgICAoMHhGRkZEMDI0NCkgLy8gKENBTl9NQjIpIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIyX01GSUQgICAgICAgICgweEZGRkQwMjRDKSAvLyAoQ0FOX01CMikgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjJfTVNSICAgICAgICAgKDB4RkZGRDAyNTApIC8vIChDQU5fTUIyKSBNYWlsQm94IFN0YXR1cyBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CMyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19DQU5fTUIzX01GSUQgICAgICAgICgweEZGRkQwMjZDKSAvLyAoQ0FOX01CMykgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjNfTUFNICAgICAgICAgKDB4RkZGRDAyNjQpIC8vIChDQU5fTUIzKSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CM19NSUQgICAgICAgICAoMHhGRkZEMDI2OCkgLy8gKENBTl9NQjMpIE1haWxCb3ggSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjNfTUNSICAgICAgICAgKDB4RkZGRDAyN0MpIC8vIChDQU5fTUIzKSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjNfTU1SICAgICAgICAgKDB4RkZGRDAyNjApIC8vIChDQU5fTUIzKSBNYWlsQm94IE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjNfTVNSICAgICAgICAgKDB4RkZGRDAyNzApIC8vIChDQU5fTUIzKSBNYWlsQm94IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CM19NREwgICAgICAgICAoMHhGRkZEMDI3NCkgLy8gKENBTl9NQjMpIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjNfTURIICAgICAgICAgKDB4RkZGRDAyNzgpIC8vIChDQU5fTUIzKSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CNCBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19DQU5fTUI0X01JRCAgICAgICAgICgweEZGRkQwMjg4KSAvLyAoQ0FOX01CNCkgTWFpbEJveCBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNF9NTVIgICAgICAgICAoMHhGRkZEMDI4MCkgLy8gKENBTl9NQjQpIE1haWxCb3ggTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNF9NREggICAgICAgICAoMHhGRkZEMDI5OCkgLy8gKENBTl9NQjQpIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI0X01GSUQgICAgICAgICgweEZGRkQwMjhDKSAvLyAoQ0FOX01CNCkgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjRfTVNSICAgICAgICAgKDB4RkZGRDAyOTApIC8vIChDQU5fTUI0KSBNYWlsQm94IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNF9NQ1IgICAgICAgICAoMHhGRkZEMDI5QykgLy8gKENBTl9NQjQpIE1haWxCb3ggQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNF9NREwgICAgICAgICAoMHhGRkZEMDI5NCkgLy8gKENBTl9NQjQpIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjRfTUFNICAgICAgICAgKDB4RkZGRDAyODQpIC8vIChDQU5fTUI0KSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CNSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19DQU5fTUI1X01TUiAgICAgICAgICgweEZGRkQwMkIwKSAvLyAoQ0FOX01CNSkgTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjVfTUNSICAgICAgICAgKDB4RkZGRDAyQkMpIC8vIChDQU5fTUI1KSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjVfTUZJRCAgICAgICAgKDB4RkZGRDAyQUMpIC8vIChDQU5fTUI1KSBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNV9NREggICAgICAgICAoMHhGRkZEMDJCOCkgLy8gKENBTl9NQjUpIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI1X01JRCAgICAgICAgICgweEZGRkQwMkE4KSAvLyAoQ0FOX01CNSkgTWFpbEJveCBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNV9NTVIgICAgICAgICAoMHhGRkZEMDJBMCkgLy8gKENBTl9NQjUpIE1haWxCb3ggTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNV9NREwgICAgICAgICAoMHhGRkZEMDJCNCkgLy8gKENBTl9NQjUpIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjVfTUFNICAgICAgICAgKDB4RkZGRDAyQTQpIC8vIChDQU5fTUI1KSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CNiBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19DQU5fTUI2X01GSUQgICAgICAgICgweEZGRkQwMkNDKSAvLyAoQ0FOX01CNikgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjZfTUlEICAgICAgICAgKDB4RkZGRDAyQzgpIC8vIChDQU5fTUI2KSBNYWlsQm94IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI2X01BTSAgICAgICAgICgweEZGRkQwMkM0KSAvLyAoQ0FOX01CNikgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjZfTVNSICAgICAgICAgKDB4RkZGRDAyRDApIC8vIChDQU5fTUI2KSBNYWlsQm94IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNl9NREwgICAgICAgICAoMHhGRkZEMDJENCkgLy8gKENBTl9NQjYpIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjZfTUNSICAgICAgICAgKDB4RkZGRDAyREMpIC8vIChDQU5fTUI2KSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjZfTURIICAgICAgICAgKDB4RkZGRDAyRDgpIC8vIChDQU5fTUI2KSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNl9NTVIgICAgICAgICAoMHhGRkZEMDJDMCkgLy8gKENBTl9NQjYpIE1haWxCb3ggTW9kZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CNyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19DQU5fTUI3X01DUiAgICAgICAgICgweEZGRkQwMkZDKSAvLyAoQ0FOX01CNykgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI3X01ESCAgICAgICAgICgweEZGRkQwMkY4KSAvLyAoQ0FOX01CNykgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjdfTUZJRCAgICAgICAgKDB4RkZGRDAyRUMpIC8vIChDQU5fTUI3KSBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CN19NREwgICAgICAgICAoMHhGRkZEMDJGNCkgLy8gKENBTl9NQjcpIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjdfTUlEICAgICAgICAgKDB4RkZGRDAyRTgpIC8vIChDQU5fTUI3KSBNYWlsQm94IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI3X01NUiAgICAgICAgICgweEZGRkQwMkUwKSAvLyAoQ0FOX01CNykgTWFpbEJveCBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI3X01BTSAgICAgICAgICgweEZGRkQwMkU0KSAvLyAoQ0FOX01CNykgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjdfTVNSICAgICAgICAgKDB4RkZGRDAyRjApIC8vIChDQU5fTUI3KSBNYWlsQm94IFN0YXR1cyBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0NBTl9UQ1IgICAgICAgICAgICAgKDB4RkZGRDAwMjQpIC8vIChDQU4pIFRyYW5zZmVyIENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9JTVIgICAgICAgICAgICAgKDB4RkZGRDAwMEMpIC8vIChDQU4pIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fSUVSICAgICAgICAgICAgICgweEZGRkQwMDA0KSAvLyAoQ0FOKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fRUNSICAgICAgICAgICAgICgweEZGRkQwMDIwKSAvLyAoQ0FOKSBFcnJvciBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fVElNRVNUUCAgICAgICAgICgweEZGRkQwMDFDKSAvLyAoQ0FOKSBUaW1lIFN0YW1wIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTVIgICAgICAgICAgICAgICgweEZGRkQwMDAwKSAvLyAoQ0FOKSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fSURSICAgICAgICAgICAgICgweEZGRkQwMDA4KSAvLyAoQ0FOKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0FDUiAgICAgICAgICAgICAoMHhGRkZEMDAyOCkgLy8gKENBTikgQWJvcnQgQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1RJTSAgICAgICAgICAgICAoMHhGRkZEMDAxOCkgLy8gKENBTikgVGltZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9TUiAgICAgICAgICAgICAgKDB4RkZGRDAwMTApIC8vIChDQU4pIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0JSICAgICAgICAgICAgICAoMHhGRkZEMDAxNCkgLy8gKENBTikgQmF1ZHJhdGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9WUiAgICAgICAgICAgICAgKDB4RkZGRDAwRkMpIC8vIChDQU4pIFZlcnNpb24gUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIEVNQUMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19JU1IgICAgICAgICAgICAoMHhGRkZEQzAyNCkgLy8gKEVNQUMpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfU0E0SCAgICAgICAgICAgKDB4RkZGREMwQjQpIC8vIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDQgVG9wLCBMYXN0IDIgYnl0ZXMNCisjZGVmaW5lIEFUOTFDX0VNQUNfU0ExTCAgICAgICAgICAgKDB4RkZGREMwOTgpIC8vIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDEgQm90dG9tLCBGaXJzdCA0IGJ5dGVzDQorI2RlZmluZSBBVDkxQ19FTUFDX0VMRSAgICAgICAgICAgICgweEZGRkRDMDc4KSAvLyAoRU1BQykgRXhjZXNzaXZlIExlbmd0aCBFcnJvcnMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfTENPTCAgICAgICAgICAgKDB4RkZGREMwNUMpIC8vIChFTUFDKSBMYXRlIENvbGxpc2lvbiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19STEUgICAgICAgICAgICAoMHhGRkZEQzA4OCkgLy8gKEVNQUMpIFJlY2VpdmUgTGVuZ3RoIEZpZWxkIE1pc21hdGNoIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1dPTCAgICAgICAgICAgICgweEZGRkRDMEM0KSAvLyAoRU1BQykgV2FrZSBPbiBMQU4gUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfRFRGICAgICAgICAgICAgKDB4RkZGREMwNTgpIC8vIChFTUFDKSBEZWZlcnJlZCBUcmFuc21pc3Npb24gRnJhbWUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfVFVORCAgICAgICAgICAgKDB4RkZGREMwNjQpIC8vIChFTUFDKSBUcmFuc21pdCBVbmRlcnJ1biBFcnJvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19OQ1IgICAgICAgICAgICAoMHhGRkZEQzAwMCkgLy8gKEVNQUMpIE5ldHdvcmsgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TQTRMICAgICAgICAgICAoMHhGRkZEQzBCMCkgLy8gKEVNQUMpIFNwZWNpZmljIEFkZHJlc3MgNCBCb3R0b20sIEZpcnN0IDQgYnl0ZXMNCisjZGVmaW5lIEFUOTFDX0VNQUNfUlNSICAgICAgICAgICAgKDB4RkZGREMwMjApIC8vIChFTUFDKSBSZWNlaXZlIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TQTNMICAgICAgICAgICAoMHhGRkZEQzBBOCkgLy8gKEVNQUMpIFNwZWNpZmljIEFkZHJlc3MgMyBCb3R0b20sIEZpcnN0IDQgYnl0ZXMNCisjZGVmaW5lIEFUOTFDX0VNQUNfVFNSICAgICAgICAgICAgKDB4RkZGREMwMTQpIC8vIChFTUFDKSBUcmFuc21pdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfSURSICAgICAgICAgICAgKDB4RkZGREMwMkMpIC8vIChFTUFDKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SU0UgICAgICAgICAgICAoMHhGRkZEQzA3NCkgLy8gKEVNQUMpIFJlY2VpdmUgU3ltYm9sIEVycm9ycyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19FQ09MICAgICAgICAgICAoMHhGRkZEQzA2MCkgLy8gKEVNQUMpIEV4Y2Vzc2l2ZSBDb2xsaXNpb24gUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfVElEICAgICAgICAgICAgKDB4RkZGREMwQjgpIC8vIChFTUFDKSBUeXBlIElEIENoZWNraW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX0hSQiAgICAgICAgICAgICgweEZGRkRDMDkwKSAvLyAoRU1BQykgSGFzaCBBZGRyZXNzIEJvdHRvbVszMTowXQ0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19UQlFQICAgICAgICAgICAoMHhGRkZEQzAxQykgLy8gKEVNQUMpIFRyYW5zbWl0IEJ1ZmZlciBRdWV1ZSBQb2ludGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1VTUklPICAgICAgICAgICgweEZGRkRDMEMwKSAvLyAoRU1BQykgVVNFUiBJbnB1dC9PdXRwdXQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfUFRSICAgICAgICAgICAgKDB4RkZGREMwMzgpIC8vIChFTUFDKSBQYXVzZSBUaW1lIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1NBMkggICAgICAgICAgICgweEZGRkRDMEE0KSAvLyAoRU1BQykgU3BlY2lmaWMgQWRkcmVzcyAyIFRvcCwgTGFzdCAyIGJ5dGVzDQorI2RlZmluZSBBVDkxQ19FTUFDX1JPViAgICAgICAgICAgICgweEZGRkRDMDcwKSAvLyAoRU1BQykgUmVjZWl2ZSBPdmVycnVuIEVycm9ycyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19BTEUgICAgICAgICAgICAoMHhGRkZEQzA1NCkgLy8gKEVNQUMpIEFsaWdubWVudCBFcnJvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SSkEgICAgICAgICAgICAoMHhGRkZEQzA3QykgLy8gKEVNQUMpIFJlY2VpdmUgSmFiYmVycyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SQlFQICAgICAgICAgICAoMHhGRkZEQzAxOCkgLy8gKEVNQUMpIFJlY2VpdmUgQnVmZmVyIFF1ZXVlIFBvaW50ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfVFBGICAgICAgICAgICAgKDB4RkZGREMwOEMpIC8vIChFTUFDKSBUcmFuc21pdHRlZCBQYXVzZSBGcmFtZXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfTkNGR1IgICAgICAgICAgKDB4RkZGREMwMDQpIC8vIChFTUFDKSBOZXR3b3JrIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfSFJUICAgICAgICAgICAgKDB4RkZGREMwOTQpIC8vIChFTUFDKSBIYXNoIEFkZHJlc3MgVG9wWzYzOjMyXQ0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19VU0YgICAgICAgICAgICAoMHhGRkZEQzA4MCkgLy8gKEVNQUMpIFVuZGVyc2l6ZSBGcmFtZXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfRkNTRSAgICAgICAgICAgKDB4RkZGREMwNTApIC8vIChFTUFDKSBGcmFtZSBDaGVjayBTZXF1ZW5jZSBFcnJvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19UUFEgICAgICAgICAgICAoMHhGRkZEQzBCQykgLy8gKEVNQUMpIFRyYW5zbWl0IFBhdXNlIFF1YW50dW0gUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfTUFOICAgICAgICAgICAgKDB4RkZGREMwMzQpIC8vIChFTUFDKSBQSFkgTWFpbnRlbmFuY2UgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfRlRPICAgICAgICAgICAgKDB4RkZGREMwNDApIC8vIChFTUFDKSBGcmFtZXMgVHJhbnNtaXR0ZWQgT0sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfUkVWICAgICAgICAgICAgKDB4RkZGREMwRkMpIC8vIChFTUFDKSBSZXZpc2lvbiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19JTVIgICAgICAgICAgICAoMHhGRkZEQzAzMCkgLy8gKEVNQUMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1NDRiAgICAgICAgICAgICgweEZGRkRDMDQ0KSAvLyAoRU1BQykgU2luZ2xlIENvbGxpc2lvbiBGcmFtZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19QRlIgICAgICAgICAgICAoMHhGRkZEQzAzQykgLy8gKEVNQUMpIFBhdXNlIEZyYW1lcyByZWNlaXZlZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19NQ0YgICAgICAgICAgICAoMHhGRkZEQzA0OCkgLy8gKEVNQUMpIE11bHRpcGxlIENvbGxpc2lvbiBGcmFtZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19OU1IgICAgICAgICAgICAoMHhGRkZEQzAwOCkgLy8gKEVNQUMpIE5ldHdvcmsgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1NBMkwgICAgICAgICAgICgweEZGRkRDMEEwKSAvLyAoRU1BQykgU3BlY2lmaWMgQWRkcmVzcyAyIEJvdHRvbSwgRmlyc3QgNCBieXRlcw0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19GUk8gICAgICAgICAgICAoMHhGRkZEQzA0QykgLy8gKEVNQUMpIEZyYW1lcyBSZWNlaXZlZCBPSyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19JRVIgICAgICAgICAgICAoMHhGRkZEQzAyOCkgLy8gKEVNQUMpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfU0ExSCAgICAgICAgICAgKDB4RkZGREMwOUMpIC8vIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDEgVG9wLCBMYXN0IDIgYnl0ZXMNCisjZGVmaW5lIEFUOTFDX0VNQUNfQ1NFICAgICAgICAgICAgKDB4RkZGREMwNjgpIC8vIChFTUFDKSBDYXJyaWVyIFNlbnNlIEVycm9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1NBM0ggICAgICAgICAgICgweEZGRkRDMEFDKSAvLyAoRU1BQykgU3BlY2lmaWMgQWRkcmVzcyAzIFRvcCwgTGFzdCAyIGJ5dGVzDQorI2RlZmluZSBBVDkxQ19FTUFDX1JSRSAgICAgICAgICAgICgweEZGRkRDMDZDKSAvLyAoRU1BQykgUmVjZWl2ZSBSZXNzb3VyY2UgRXJyb3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfU1RFICAgICAgICAgICAgKDB4RkZGREMwODQpIC8vIChFTUFDKSBTUUUgVGVzdCBFcnJvciBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX0FEQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19BRENfUFRTUiAgICAgICAgICAgICgweEZGRkQ4MTI0KSAvLyAoUERDX0FEQykgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1BUQ1IgICAgICAgICAgICAoMHhGRkZEODEyMCkgLy8gKFBEQ19BREMpIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfVE5QUiAgICAgICAgICAgICgweEZGRkQ4MTE4KSAvLyAoUERDX0FEQykgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfVE5DUiAgICAgICAgICAgICgweEZGRkQ4MTFDKSAvLyAoUERDX0FEQykgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfUk5QUiAgICAgICAgICAgICgweEZGRkQ4MTEwKSAvLyAoUERDX0FEQykgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19STkNSICAgICAgICAgICAgKDB4RkZGRDgxMTQpIC8vIChQRENfQURDKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1JQUiAgICAgICAgICAgICAoMHhGRkZEODEwMCkgLy8gKFBEQ19BREMpIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1RDUiAgICAgICAgICAgICAoMHhGRkZEODEwQykgLy8gKFBEQ19BREMpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19UUFIgICAgICAgICAgICAgKDB4RkZGRDgxMDgpIC8vIChQRENfQURDKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfUkNSICAgICAgICAgICAgICgweEZGRkQ4MTA0KSAvLyAoUERDX0FEQykgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBBREMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQURDX0NEUjIgICAgICAgICAgICAoMHhGRkZEODAzOCkgLy8gKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAyDQorI2RlZmluZSBBVDkxQ19BRENfQ0RSMyAgICAgICAgICAgICgweEZGRkQ4MDNDKSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDMNCisjZGVmaW5lIEFUOTFDX0FEQ19DRFIwICAgICAgICAgICAgKDB4RkZGRDgwMzApIC8vIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMA0KKyNkZWZpbmUgQVQ5MUNfQURDX0NEUjUgICAgICAgICAgICAoMHhGRkZEODA0NCkgLy8gKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA1DQorI2RlZmluZSBBVDkxQ19BRENfQ0hEUiAgICAgICAgICAgICgweEZGRkQ4MDE0KSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfU1IgICAgICAgICAgICAgICgweEZGRkQ4MDFDKSAvLyAoQURDKSBBREMgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfQ0RSNCAgICAgICAgICAgICgweEZGRkQ4MDQwKSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDQNCisjZGVmaW5lIEFUOTFDX0FEQ19DRFIxICAgICAgICAgICAgKDB4RkZGRDgwMzQpIC8vIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMQ0KKyNkZWZpbmUgQVQ5MUNfQURDX0xDRFIgICAgICAgICAgICAoMHhGRkZEODAyMCkgLy8gKEFEQykgQURDIExhc3QgQ29udmVydGVkIERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19JRFIgICAgICAgICAgICAgKDB4RkZGRDgwMjgpIC8vIChBREMpIEFEQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX0NSICAgICAgICAgICAgICAoMHhGRkZEODAwMCkgLy8gKEFEQykgQURDIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19DRFI3ICAgICAgICAgICAgKDB4RkZGRDgwNEMpIC8vIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNw0KKyNkZWZpbmUgQVQ5MUNfQURDX0NEUjYgICAgICAgICAgICAoMHhGRkZEODA0OCkgLy8gKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA2DQorI2RlZmluZSBBVDkxQ19BRENfSUVSICAgICAgICAgICAgICgweEZGRkQ4MDI0KSAvLyAoQURDKSBBREMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX0NIRVIgICAgICAgICAgICAoMHhGRkZEODAxMCkgLy8gKEFEQykgQURDIENoYW5uZWwgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfQ0hTUiAgICAgICAgICAgICgweEZGRkQ4MDE4KSAvLyAoQURDKSBBREMgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19NUiAgICAgICAgICAgICAgKDB4RkZGRDgwMDQpIC8vIChBREMpIEFEQyBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfSU1SICAgICAgICAgICAgICgweEZGRkQ4MDJDKSAvLyAoQURDKSBBREMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19BRVMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQUVTX1RQUiAgICAgICAgICAgICAoMHhGRkZBNDEwOCkgLy8gKFBEQ19BRVMpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19QVENSICAgICAgICAgICAgKDB4RkZGQTQxMjApIC8vIChQRENfQUVTKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX1JOUFIgICAgICAgICAgICAoMHhGRkZBNDExMCkgLy8gKFBEQ19BRVMpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfVE5DUiAgICAgICAgICAgICgweEZGRkE0MTFDKSAvLyAoUERDX0FFUykgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfVENSICAgICAgICAgICAgICgweEZGRkE0MTBDKSAvLyAoUERDX0FFUykgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX1JDUiAgICAgICAgICAgICAoMHhGRkZBNDEwNCkgLy8gKFBEQ19BRVMpIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX1JOQ1IgICAgICAgICAgICAoMHhGRkZBNDExNCkgLy8gKFBEQ19BRVMpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfVE5QUiAgICAgICAgICAgICgweEZGRkE0MTE4KSAvLyAoUERDX0FFUykgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfUlBSICAgICAgICAgICAgICgweEZGRkE0MTAwKSAvLyAoUERDX0FFUykgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfUFRTUiAgICAgICAgICAgICgweEZGRkE0MTI0KSAvLyAoUERDX0FFUykgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQUVTIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0FFU19JVnhSICAgICAgICAgICAgKDB4RkZGQTQwNjApIC8vIChBRVMpIEluaXRpYWxpemF0aW9uIFZlY3RvciB4IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfTVIgICAgICAgICAgICAgICgweEZGRkE0MDA0KSAvLyAoQUVTKSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfVlIgICAgICAgICAgICAgICgweEZGRkE0MEZDKSAvLyAoQUVTKSBBRVMgVmVyc2lvbiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX09EQVRBeFIgICAgICAgICAoMHhGRkZBNDA1MCkgLy8gKEFFUykgT3V0cHV0IERhdGEgeCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX0lEQVRBeFIgICAgICAgICAoMHhGRkZBNDA0MCkgLy8gKEFFUykgSW5wdXQgRGF0YSB4IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfQ1IgICAgICAgICAgICAgICgweEZGRkE0MDAwKSAvLyAoQUVTKSBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfSURSICAgICAgICAgICAgICgweEZGRkE0MDE0KSAvLyAoQUVTKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX0lNUiAgICAgICAgICAgICAoMHhGRkZBNDAxOCkgLy8gKEFFUykgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19JRVIgICAgICAgICAgICAgKDB4RkZGQTQwMTApIC8vIChBRVMpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19LRVlXeFIgICAgICAgICAgKDB4RkZGQTQwMjApIC8vIChBRVMpIEtleSBXb3JkIHggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19JU1IgICAgICAgICAgICAgKDB4RkZGQTQwMUMpIC8vIChBRVMpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19UREVTIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1RERVNfUk5DUiAgICAgICAgICAgKDB4RkZGQTgxMTQpIC8vIChQRENfVERFUykgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfVENSICAgICAgICAgICAgKDB4RkZGQTgxMEMpIC8vIChQRENfVERFUykgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19SQ1IgICAgICAgICAgICAoMHhGRkZBODEwNCkgLy8gKFBEQ19UREVTKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfVE5QUiAgICAgICAgICAgKDB4RkZGQTgxMTgpIC8vIChQRENfVERFUykgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX1JOUFIgICAgICAgICAgICgweEZGRkE4MTEwKSAvLyAoUERDX1RERVMpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX1JQUiAgICAgICAgICAgICgweEZGRkE4MTAwKSAvLyAoUERDX1RERVMpIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19UTkNSICAgICAgICAgICAoMHhGRkZBODExQykgLy8gKFBEQ19UREVTKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfVFBSICAgICAgICAgICAgKDB4RkZGQTgxMDgpIC8vIChQRENfVERFUykgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19QVFNSICAgICAgICAgICAoMHhGRkZBODEyNCkgLy8gKFBEQ19UREVTKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX1BUQ1IgICAgICAgICAgICgweEZGRkE4MTIwKSAvLyAoUERDX1RERVMpIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBUREVTIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1RERVNfS0VZMld4UiAgICAgICAgKDB4RkZGQTgwMjgpIC8vIChUREVTKSBLZXkgMiBXb3JkIHggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfS0VZM1d4UiAgICAgICAgKDB4RkZGQTgwMzApIC8vIChUREVTKSBLZXkgMyBXb3JkIHggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfSURSICAgICAgICAgICAgKDB4RkZGQTgwMTQpIC8vIChUREVTKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19WUiAgICAgICAgICAgICAoMHhGRkZBODBGQykgLy8gKFRERVMpIFRERVMgVmVyc2lvbiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19JVnhSICAgICAgICAgICAoMHhGRkZBODA2MCkgLy8gKFRERVMpIEluaXRpYWxpemF0aW9uIFZlY3RvciB4IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX09EQVRBeFIgICAgICAgICgweEZGRkE4MDUwKSAvLyAoVERFUykgT3V0cHV0IERhdGEgeCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19JTVIgICAgICAgICAgICAoMHhGRkZBODAxOCkgLy8gKFRERVMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX01SICAgICAgICAgICAgICgweEZGRkE4MDA0KSAvLyAoVERFUykgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19DUiAgICAgICAgICAgICAoMHhGRkZBODAwMCkgLy8gKFRERVMpIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfSUVSICAgICAgICAgICAgKDB4RkZGQTgwMTApIC8vIChUREVTKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX0lTUiAgICAgICAgICAgICgweEZGRkE4MDFDKSAvLyAoVERFUykgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19JREFUQXhSICAgICAgICAoMHhGRkZBODA0MCkgLy8gKFRERVMpIElucHV0IERhdGEgeCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19LRVkxV3hSICAgICAgICAoMHhGRkZBODAyMCkgLy8gKFRERVMpIEtleSAxIFdvcmQgeCBSZWdpc3Rlcg0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgICBQSU8gREVGSU5JVElPTlMgRk9SIEFUOTFTQU03WDEyOCAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEEwICAgICAgICAgICAgICggMSA8PCAwICkgICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTAgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMF9SWEQwICAgICAgICAgICAgKCBBVDkxQ19QSU9fUEEwICkgIC8qICBVU0FSVCAwIFJlY2VpdmUgRGF0YSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMSAgICAgICAgICAgICAoIDEgPDwgMSApICAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEExICovDQotI2RlZmluZSBBVDkxQ19QQTFfVFhEMCAgICAgICAgICAgICggQVQ5MUNfUElPX1BBMSApICAvKiAgVVNBUlQgMCBUcmFuc21pdCBEYXRhICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEExMCAgICAgICAgICAgICggMSA8PCAxMCApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTEwICovDQotI2RlZmluZSBBVDkxQ19QQTEwX1RXRCAgICAgICAgICAgICggQVQ5MUNfUElPX1BBMTAgKSAvKiAgVFdJIFR3by13aXJlIFNlcmlhbCBEYXRhICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEExMSAgICAgICAgICAgICggMSA8PCAxMSApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTExICovDQotI2RlZmluZSBBVDkxQ19QQTExX1RXQ0sgICAgICAgICAgICggQVQ5MUNfUElPX1BBMTEgKSAvKiAgVFdJIFR3by13aXJlIFNlcmlhbCBDbG9jayAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMTIgICAgICAgICAgICAoIDEgPDwgMTIgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEExMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEExMl9OUENTMDAgICAgICAgICAoIEFUOTFDX1BJT19QQTEyICkgLyogIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMCAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMTMgICAgICAgICAgICAoIDEgPDwgMTMgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEExMyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEExM19OUENTMDEgICAgICAgICAoIEFUOTFDX1BJT19QQTEzICkgLyogIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEExM19QQ0sxICAgICAgICAgICAoIEFUOTFDX1BJT19QQTEzICkgLyogIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDEgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTE0ICAgICAgICAgICAgKCAxIDw8IDE0ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMTQgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMTRfTlBDUzAyICAgICAgICAgKCBBVDkxQ19QSU9fUEExNCApIC8qICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDIgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMTRfSVJRMSAgICAgICAgICAgKCBBVDkxQ19QSU9fUEExNCApIC8qICBFeHRlcm5hbCBJbnRlcnJ1cHQgMSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMTUgICAgICAgICAgICAoIDEgPDwgMTUgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEExNSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEExNV9OUENTMDMgICAgICAgICAoIEFUOTFDX1BJT19QQTE1ICkgLyogIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEExNV9UQ0xLMiAgICAgICAgICAoIEFUOTFDX1BJT19QQTE1ICkgLyogIFRpbWVyIENvdW50ZXIgMiBleHRlcm5hbCBjbG9jayBpbnB1dCAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMTYgICAgICAgICAgICAoIDEgPDwgMTYgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEExNiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEExNl9NSVNPMCAgICAgICAgICAoIEFUOTFDX1BJT19QQTE2ICkgLyogIFNQSSAwIE1hc3RlciBJbiBTbGF2ZSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMTcgICAgICAgICAgICAoIDEgPDwgMTcgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEExNyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEExN19NT1NJMCAgICAgICAgICAoIEFUOTFDX1BJT19QQTE3ICkgLyogIFNQSSAwIE1hc3RlciBPdXQgU2xhdmUgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTE4ICAgICAgICAgICAgKCAxIDw8IDE4ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMTggKi8NCi0jZGVmaW5lIEFUOTFDX1BBMThfU1BDSzAgICAgICAgICAgKCBBVDkxQ19QSU9fUEExOCApIC8qICBTUEkgMCBTZXJpYWwgQ2xvY2sgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTE5ICAgICAgICAgICAgKCAxIDw8IDE5ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMTkgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMTlfQ0FOUlggICAgICAgICAgKCBBVDkxQ19QSU9fUEExOSApIC8qICBDQU4gUmVjZWl2ZSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMiAgICAgICAgICAgICAoIDEgPDwgMiApICAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEEyICovDQotI2RlZmluZSBBVDkxQ19QQTJfU0NLMCAgICAgICAgICAgICggQVQ5MUNfUElPX1BBMiApICAvKiAgVVNBUlQgMCBTZXJpYWwgQ2xvY2sgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMl9OUENTMTEgICAgICAgICAgKCBBVDkxQ19QSU9fUEEyICkgIC8qICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDEgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTIwICAgICAgICAgICAgKCAxIDw8IDIwICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMjAgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjBfQ0FOVFggICAgICAgICAgKCBBVDkxQ19QSU9fUEEyMCApIC8qICBDQU4gVHJhbnNtaXQgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTIxICAgICAgICAgICAgKCAxIDw8IDIxICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMjEgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjFfVEYgICAgICAgICAgICAgKCBBVDkxQ19QSU9fUEEyMSApIC8qICBTU0MgVHJhbnNtaXQgRnJhbWUgU3luYyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyMV9OUENTMTAgICAgICAgICAoIEFUOTFDX1BJT19QQTIxICkgLyogIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMCAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMjIgICAgICAgICAgICAoIDEgPDwgMjIgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEEyMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyMl9USyAgICAgICAgICAgICAoIEFUOTFDX1BJT19QQTIyICkgLyogIFNTQyBUcmFuc21pdCBDbG9jayAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyMl9TUENLMSAgICAgICAgICAoIEFUOTFDX1BJT19QQTIyICkgLyogIFNQSSAxIFNlcmlhbCBDbG9jayAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMjMgICAgICAgICAgICAoIDEgPDwgMjMgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEEyMyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyM19URCAgICAgICAgICAgICAoIEFUOTFDX1BJT19QQTIzICkgLyogIFNTQyBUcmFuc21pdCBkYXRhICovDQotI2RlZmluZSBBVDkxQ19QQTIzX01PU0kxICAgICAgICAgICggQVQ5MUNfUElPX1BBMjMgKSAvKiAgU1BJIDEgTWFzdGVyIE91dCBTbGF2ZSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMjQgICAgICAgICAgICAoIDEgPDwgMjQgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEEyNCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyNF9SRCAgICAgICAgICAgICAoIEFUOTFDX1BJT19QQTI0ICkgLyogIFNTQyBSZWNlaXZlIERhdGEgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjRfTUlTTzEgICAgICAgICAgKCBBVDkxQ19QSU9fUEEyNCApIC8qICBTUEkgMSBNYXN0ZXIgSW4gU2xhdmUgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTI1ICAgICAgICAgICAgKCAxIDw8IDI1ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMjUgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjVfUksgICAgICAgICAgICAgKCBBVDkxQ19QSU9fUEEyNSApIC8qICBTU0MgUmVjZWl2ZSBDbG9jayAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyNV9OUENTMTEgICAgICAgICAoIEFUOTFDX1BJT19QQTI1ICkgLyogIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMjYgICAgICAgICAgICAoIDEgPDwgMjYgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEEyNiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyNl9SRiAgICAgICAgICAgICAoIEFUOTFDX1BJT19QQTI2ICkgLyogIFNTQyBSZWNlaXZlIEZyYW1lIFN5bmMgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjZfTlBDUzEyICAgICAgICAgKCBBVDkxQ19QSU9fUEEyNiApIC8qICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTI3ICAgICAgICAgICAgKCAxIDw8IDI3ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMjcgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjdfRFJYRCAgICAgICAgICAgKCBBVDkxQ19QSU9fUEEyNyApIC8qICBEQkdVIERlYnVnIFJlY2VpdmUgRGF0YSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyN19QQ0szICAgICAgICAgICAoIEFUOTFDX1BJT19QQTI3ICkgLyogIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDMgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTI4ICAgICAgICAgICAgKCAxIDw8IDI4ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMjggKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjhfRFRYRCAgICAgICAgICAgKCBBVDkxQ19QSU9fUEEyOCApIC8qICBEQkdVIERlYnVnIFRyYW5zbWl0IERhdGEgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTI5ICAgICAgICAgICAgKCAxIDw8IDI5ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMjkgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjlfRklRICAgICAgICAgICAgKCBBVDkxQ19QSU9fUEEyOSApIC8qICBBSUMgRmFzdCBJbnRlcnJ1cHQgSW5wdXQgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjlfTlBDUzEzICAgICAgICAgKCBBVDkxQ19QSU9fUEEyOSApIC8qICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTMgICAgICAgICAgICAgKCAxIDw8IDMgKSAgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEzX1JUUzAgICAgICAgICAgICAoIEFUOTFDX1BJT19QQTMgKSAgLyogIFVTQVJUIDAgUmVhZHkgVG8gU2VuZCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEzX05QQ1MxMiAgICAgICAgICAoIEFUOTFDX1BJT19QQTMgKSAgLyogIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMzAgICAgICAgICAgICAoIDEgPDwgMzAgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEEzMCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEzMF9JUlEwICAgICAgICAgICAoIEFUOTFDX1BJT19QQTMwICkgLyogIEV4dGVybmFsIEludGVycnVwdCAwICovDQotI2RlZmluZSBBVDkxQ19QQTMwX1BDSzIgICAgICAgICAgICggQVQ5MUNfUElPX1BBMzAgKSAvKiAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBNCAgICAgICAgICAgICAoIDEgPDwgNCApICAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEE0ICovDQotI2RlZmluZSBBVDkxQ19QQTRfQ1RTMCAgICAgICAgICAgICggQVQ5MUNfUElPX1BBNCApICAvKiAgVVNBUlQgMCBDbGVhciBUbyBTZW5kICovDQotI2RlZmluZSBBVDkxQ19QQTRfTlBDUzEzICAgICAgICAgICggQVQ5MUNfUElPX1BBNCApICAvKiAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEE1ICAgICAgICAgICAgICggMSA8PCA1ICkgICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTUgKi8NCi0jZGVmaW5lIEFUOTFDX1BBNV9SWEQxICAgICAgICAgICAgKCBBVDkxQ19QSU9fUEE1ICkgIC8qICBVU0FSVCAxIFJlY2VpdmUgRGF0YSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBNiAgICAgICAgICAgICAoIDEgPDwgNiApICAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEE2ICovDQotI2RlZmluZSBBVDkxQ19QQTZfVFhEMSAgICAgICAgICAgICggQVQ5MUNfUElPX1BBNiApICAvKiAgVVNBUlQgMSBUcmFuc21pdCBEYXRhICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEE3ICAgICAgICAgICAgICggMSA8PCA3ICkgICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTcgKi8NCi0jZGVmaW5lIEFUOTFDX1BBN19TQ0sxICAgICAgICAgICAgKCBBVDkxQ19QSU9fUEE3ICkgIC8qICBVU0FSVCAxIFNlcmlhbCBDbG9jayAqLw0KLSNkZWZpbmUgQVQ5MUNfUEE3X05QQ1MwMSAgICAgICAgICAoIEFUOTFDX1BJT19QQTcgKSAgLyogIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBOCAgICAgICAgICAgICAoIDEgPDwgOCApICAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEE4ICovDQotI2RlZmluZSBBVDkxQ19QQThfUlRTMSAgICAgICAgICAgICggQVQ5MUNfUElPX1BBOCApICAvKiAgVVNBUlQgMSBSZWFkeSBUbyBTZW5kICovDQotI2RlZmluZSBBVDkxQ19QQThfTlBDUzAyICAgICAgICAgICggQVQ5MUNfUElPX1BBOCApICAvKiAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAyICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEE5ICAgICAgICAgICAgICggMSA8PCA5ICkgICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTkgKi8NCi0jZGVmaW5lIEFUOTFDX1BBOV9DVFMxICAgICAgICAgICAgKCBBVDkxQ19QSU9fUEE5ICkgIC8qICBVU0FSVCAxIENsZWFyIFRvIFNlbmQgKi8NCi0jZGVmaW5lIEFUOTFDX1BBOV9OUENTMDMgICAgICAgICAgKCBBVDkxQ19QSU9fUEE5ICkgIC8qICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjAgICAgICAgICAgICAgKCAxIDw8IDAgKSAgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIwX0VUWENLX0VSRUZDSyAgICAoIEFUOTFDX1BJT19QQjAgKSAgLyogIEV0aGVybmV0IE1BQyBUcmFuc21pdCBDbG9jay9SZWZlcmVuY2UgQ2xvY2sgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMF9QQ0swICAgICAgICAgICAgKCBBVDkxQ19QSU9fUEIwICkgIC8qICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAwICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEIxICAgICAgICAgICAgICggMSA8PCAxICkgICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQjEgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMV9FVFhFTiAgICAgICAgICAgKCBBVDkxQ19QSU9fUEIxICkgIC8qICBFdGhlcm5ldCBNQUMgVHJhbnNtaXQgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEIxMCAgICAgICAgICAgICggMSA8PCAxMCApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQjEwICovDQotI2RlZmluZSBBVDkxQ19QQjEwX0VUWDIgICAgICAgICAgICggQVQ5MUNfUElPX1BCMTAgKSAvKiAgRXRoZXJuZXQgTUFDIFRyYW5zbWl0IERhdGEgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxMF9OUENTMTEgICAgICAgICAoIEFUOTFDX1BJT19QQjEwICkgLyogIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BCMTEgICAgICAgICAgICAoIDEgPDwgMTEgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIxMSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxMV9FVFgzICAgICAgICAgICAoIEFUOTFDX1BJT19QQjExICkgLyogIEV0aGVybmV0IE1BQyBUcmFuc21pdCBEYXRhIDMgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMTFfTlBDUzEyICAgICAgICAgKCBBVDkxQ19QSU9fUEIxMSApIC8qICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjEyICAgICAgICAgICAgKCAxIDw8IDEyICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMTIgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMTJfRVRYRVIgICAgICAgICAgKCBBVDkxQ19QSU9fUEIxMiApIC8qICBFdGhlcm5ldCBNQUMgVHJhbnNtaWt0IENvZGluZyBFcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxMl9UQ0xLMCAgICAgICAgICAoIEFUOTFDX1BJT19QQjEyICkgLyogIFRpbWVyIENvdW50ZXIgMCBleHRlcm5hbCBjbG9jayBpbnB1dCAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BCMTMgICAgICAgICAgICAoIDEgPDwgMTMgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIxMyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxM19FUlgyICAgICAgICAgICAoIEFUOTFDX1BJT19QQjEzICkgLyogIEV0aGVybmV0IE1BQyBSZWNlaXZlIERhdGEgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxM19OUENTMDEgICAgICAgICAoIEFUOTFDX1BJT19QQjEzICkgLyogIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BCMTQgICAgICAgICAgICAoIDEgPDwgMTQgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIxNCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxNF9FUlgzICAgICAgICAgICAoIEFUOTFDX1BJT19QQjE0ICkgLyogIEV0aGVybmV0IE1BQyBSZWNlaXZlIERhdGEgMyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxNF9OUENTMDIgICAgICAgICAoIEFUOTFDX1BJT19QQjE0ICkgLyogIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BCMTUgICAgICAgICAgICAoIDEgPDwgMTUgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIxNSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxNV9FUlhEViAgICAgICAgICAoIEFUOTFDX1BJT19QQjE1ICkgLyogIEV0aGVybmV0IE1BQyBSZWNlaXZlIERhdGEgVmFsaWQgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjE2ICAgICAgICAgICAgKCAxIDw8IDE2ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMTYgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMTZfRUNPTCAgICAgICAgICAgKCBBVDkxQ19QSU9fUEIxNiApIC8qICBFdGhlcm5ldCBNQUMgQ29sbGlzaW9uIERldGVjdGVkICovDQotI2RlZmluZSBBVDkxQ19QQjE2X05QQ1MxMyAgICAgICAgICggQVQ5MUNfUElPX1BCMTYgKSAvKiAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEIxNyAgICAgICAgICAgICggMSA8PCAxNyApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQjE3ICovDQotI2RlZmluZSBBVDkxQ19QQjE3X0VSWENLICAgICAgICAgICggQVQ5MUNfUElPX1BCMTcgKSAvKiAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgQ2xvY2sgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMTdfTlBDUzAzICAgICAgICAgKCBBVDkxQ19QSU9fUEIxNyApIC8qICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjE4ICAgICAgICAgICAgKCAxIDw8IDE4ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMTggKi8NCi0jZGVmaW5lIEFUOTFDX1BCMThfRUYxMDAgICAgICAgICAgKCBBVDkxQ19QSU9fUEIxOCApIC8qICBFdGhlcm5ldCBNQUMgRm9yY2UgMTAwIE1iaXRzL3NlYyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxOF9BRFRSRyAgICAgICAgICAoIEFUOTFDX1BJT19QQjE4ICkgLyogIEFEQyBFeHRlcm5hbCBUcmlnZ2VyICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEIxOSAgICAgICAgICAgICggMSA8PCAxOSApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQjE5ICovDQotI2RlZmluZSBBVDkxQ19QQjE5X1BXTTAgICAgICAgICAgICggQVQ5MUNfUElPX1BCMTkgKSAvKiAgUFdNIENoYW5uZWwgMCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxOV9UQ0xLMSAgICAgICAgICAoIEFUOTFDX1BJT19QQjE5ICkgLyogIFRpbWVyIENvdW50ZXIgMSBleHRlcm5hbCBjbG9jayBpbnB1dCAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BCMiAgICAgICAgICAgICAoIDEgPDwgMiApICAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIyICovDQotI2RlZmluZSBBVDkxQ19QQjJfRVRYMCAgICAgICAgICAgICggQVQ5MUNfUElPX1BCMiApICAvKiAgRXRoZXJuZXQgTUFDIFRyYW5zbWl0IERhdGEgMCAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BCMjAgICAgICAgICAgICAoIDEgPDwgMjAgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIyMCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIyMF9QV00xICAgICAgICAgICAoIEFUOTFDX1BJT19QQjIwICkgLyogIFBXTSBDaGFubmVsIDEgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMjBfUENLMCAgICAgICAgICAgKCBBVDkxQ19QSU9fUEIyMCApIC8qICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAwICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEIyMSAgICAgICAgICAgICggMSA8PCAyMSApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQjIxICovDQotI2RlZmluZSBBVDkxQ19QQjIxX1BXTTIgICAgICAgICAgICggQVQ5MUNfUElPX1BCMjEgKSAvKiAgUFdNIENoYW5uZWwgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIyMV9QQ0sxICAgICAgICAgICAoIEFUOTFDX1BJT19QQjIxICkgLyogIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDEgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjIyICAgICAgICAgICAgKCAxIDw8IDIyICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMjIgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMjJfUFdNMyAgICAgICAgICAgKCBBVDkxQ19QSU9fUEIyMiApIC8qICBQV00gQ2hhbm5lbCAzICovDQotI2RlZmluZSBBVDkxQ19QQjIyX1BDSzIgICAgICAgICAgICggQVQ5MUNfUElPX1BCMjIgKSAvKiAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BCMjMgICAgICAgICAgICAoIDEgPDwgMjMgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIyMyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIyM19USU9BMCAgICAgICAgICAoIEFUOTFDX1BJT19QQjIzICkgLyogIFRpbWVyIENvdW50ZXIgMCBNdWx0aXB1cnBvc2UgVGltZXIgSS9PIFBpbiBBICovDQotI2RlZmluZSBBVDkxQ19QQjIzX0RDRDEgICAgICAgICAgICggQVQ5MUNfUElPX1BCMjMgKSAvKiAgVVNBUlQgMSBEYXRhIENhcnJpZXIgRGV0ZWN0ICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEIyNCAgICAgICAgICAgICggMSA8PCAyNCApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQjI0ICovDQotI2RlZmluZSBBVDkxQ19QQjI0X1RJT0IwICAgICAgICAgICggQVQ5MUNfUElPX1BCMjQgKSAvKiAgVGltZXIgQ291bnRlciAwIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEIgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMjRfRFNSMSAgICAgICAgICAgKCBBVDkxQ19QSU9fUEIyNCApIC8qICBVU0FSVCAxIERhdGEgU2V0IHJlYWR5ICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEIyNSAgICAgICAgICAgICggMSA8PCAyNSApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQjI1ICovDQotI2RlZmluZSBBVDkxQ19QQjI1X1RJT0ExICAgICAgICAgICggQVQ5MUNfUElPX1BCMjUgKSAvKiAgVGltZXIgQ291bnRlciAxIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEEgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMjVfRFRSMSAgICAgICAgICAgKCBBVDkxQ19QSU9fUEIyNSApIC8qICBVU0FSVCAxIERhdGEgVGVybWluYWwgcmVhZHkgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjI2ICAgICAgICAgICAgKCAxIDw8IDI2ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMjYgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMjZfVElPQjEgICAgICAgICAgKCBBVDkxQ19QSU9fUEIyNiApIC8qICBUaW1lciBDb3VudGVyIDEgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIyNl9SSTEgICAgICAgICAgICAoIEFUOTFDX1BJT19QQjI2ICkgLyogIFVTQVJUIDEgUmluZyBJbmRpY2F0b3IgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjI3ICAgICAgICAgICAgKCAxIDw8IDI3ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMjcgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMjdfVElPQTIgICAgICAgICAgKCBBVDkxQ19QSU9fUEIyNyApIC8qICBUaW1lciBDb3VudGVyIDIgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIyN19QV00wICAgICAgICAgICAoIEFUOTFDX1BJT19QQjI3ICkgLyogIFBXTSBDaGFubmVsIDAgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjI4ICAgICAgICAgICAgKCAxIDw8IDI4ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMjggKi8NCi0jZGVmaW5lIEFUOTFDX1BCMjhfVElPQjIgICAgICAgICAgKCBBVDkxQ19QSU9fUEIyOCApIC8qICBUaW1lciBDb3VudGVyIDIgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIyOF9QV00xICAgICAgICAgICAoIEFUOTFDX1BJT19QQjI4ICkgLyogIFBXTSBDaGFubmVsIDEgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjI5ICAgICAgICAgICAgKCAxIDw8IDI5ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMjkgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMjlfUENLMSAgICAgICAgICAgKCBBVDkxQ19QSU9fUEIyOSApIC8qICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAxICovDQotI2RlZmluZSBBVDkxQ19QQjI5X1BXTTIgICAgICAgICAgICggQVQ5MUNfUElPX1BCMjkgKSAvKiAgUFdNIENoYW5uZWwgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BCMyAgICAgICAgICAgICAoIDEgPDwgMyApICAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIzICovDQotI2RlZmluZSBBVDkxQ19QQjNfRVRYMSAgICAgICAgICAgICggQVQ5MUNfUElPX1BCMyApICAvKiAgRXRoZXJuZXQgTUFDIFRyYW5zbWl0IERhdGEgMSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BCMzAgICAgICAgICAgICAoIDEgPDwgMzAgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIzMCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIzMF9QQ0syICAgICAgICAgICAoIEFUOTFDX1BJT19QQjMwICkgLyogIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDIgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMzBfUFdNMyAgICAgICAgICAgKCBBVDkxQ19QSU9fUEIzMCApIC8qICBQV00gQ2hhbm5lbCAzICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEI0ICAgICAgICAgICAgICggMSA8PCA0ICkgICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQjQgKi8NCi0jZGVmaW5lIEFUOTFDX1BCNF9FQ1JTX0VDUlNEViAgICAgKCBBVDkxQ19QSU9fUEI0ICkgIC8qICBFdGhlcm5ldCBNQUMgQ2FycmllciBTZW5zZS9DYXJyaWVyIFNlbnNlIGFuZCBEYXRhIFZhbGlkICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEI1ICAgICAgICAgICAgICggMSA8PCA1ICkgICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQjUgKi8NCi0jZGVmaW5lIEFUOTFDX1BCNV9FUlgwICAgICAgICAgICAgKCBBVDkxQ19QSU9fUEI1ICkgIC8qICBFdGhlcm5ldCBNQUMgUmVjZWl2ZSBEYXRhIDAgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjYgICAgICAgICAgICAgKCAxIDw8IDYgKSAgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCNiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEI2X0VSWDEgICAgICAgICAgICAoIEFUOTFDX1BJT19QQjYgKSAgLyogIEV0aGVybmV0IE1BQyBSZWNlaXZlIERhdGEgMSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BCNyAgICAgICAgICAgICAoIDEgPDwgNyApICAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEI3ICovDQotI2RlZmluZSBBVDkxQ19QQjdfRVJYRVIgICAgICAgICAgICggQVQ5MUNfUElPX1BCNyApICAvKiAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgRXJyb3IgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjggICAgICAgICAgICAgKCAxIDw8IDggKSAgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCOCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEI4X0VNREMgICAgICAgICAgICAoIEFUOTFDX1BJT19QQjggKSAgLyogIEV0aGVybmV0IE1BQyBNYW5hZ2VtZW50IERhdGEgQ2xvY2sgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjkgICAgICAgICAgICAgKCAxIDw8IDkgKSAgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCOSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEI5X0VNRElPICAgICAgICAgICAoIEFUOTFDX1BJT19QQjkgKSAgLyogIEV0aGVybmV0IE1BQyBNYW5hZ2VtZW50IERhdGEgSW5wdXQvT3V0cHV0ICovDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgIFBJTyBERUZJTklUSU9OUyBGT1IgQVQ5MVNBTTdYMTI4DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisjZGVmaW5lIEFUOTFDX1BJT19QQTAgICAgICAgICAgICAgKDEgPDwgIDApIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMA0KKyNkZWZpbmUgQVQ5MUNfUEEwX1JYRDAgICAgICAgICAgICAoQVQ5MUNfUElPX1BBMCkgLy8gIFVTQVJUIDAgUmVjZWl2ZSBEYXRhDQorI2RlZmluZSBBVDkxQ19QSU9fUEExICAgICAgICAgICAgICgxIDw8ICAxKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTENCisjZGVmaW5lIEFUOTFDX1BBMV9UWEQwICAgICAgICAgICAgKEFUOTFDX1BJT19QQTEpIC8vICBVU0FSVCAwIFRyYW5zbWl0IERhdGENCisjZGVmaW5lIEFUOTFDX1BJT19QQTEwICAgICAgICAgICAgKDEgPDwgMTApIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMTANCisjZGVmaW5lIEFUOTFDX1BBMTBfVFdEICAgICAgICAgICAgKEFUOTFDX1BJT19QQTEwKSAvLyAgVFdJIFR3by13aXJlIFNlcmlhbCBEYXRhDQorI2RlZmluZSBBVDkxQ19QSU9fUEExMSAgICAgICAgICAgICgxIDw8IDExKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTExDQorI2RlZmluZSBBVDkxQ19QQTExX1RXQ0sgICAgICAgICAgIChBVDkxQ19QSU9fUEExMSkgLy8gIFRXSSBUd28td2lyZSBTZXJpYWwgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BJT19QQTEyICAgICAgICAgICAgKDEgPDwgMTIpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMTINCisjZGVmaW5lIEFUOTFDX1BBMTJfTlBDUzAwICAgICAgICAgKEFUOTFDX1BJT19QQTEyKSAvLyAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAwDQorI2RlZmluZSBBVDkxQ19QSU9fUEExMyAgICAgICAgICAgICgxIDw8IDEzKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTEzDQorI2RlZmluZSBBVDkxQ19QQTEzX05QQ1MwMSAgICAgICAgIChBVDkxQ19QSU9fUEExMykgLy8gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMQ0KKyNkZWZpbmUgQVQ5MUNfUEExM19QQ0sxICAgICAgICAgICAoQVQ5MUNfUElPX1BBMTMpIC8vICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAxDQorI2RlZmluZSBBVDkxQ19QSU9fUEExNCAgICAgICAgICAgICgxIDw8IDE0KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTE0DQorI2RlZmluZSBBVDkxQ19QQTE0X05QQ1MwMiAgICAgICAgIChBVDkxQ19QSU9fUEExNCkgLy8gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMg0KKyNkZWZpbmUgQVQ5MUNfUEExNF9JUlExICAgICAgICAgICAoQVQ5MUNfUElPX1BBMTQpIC8vICBFeHRlcm5hbCBJbnRlcnJ1cHQgMQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMTUgICAgICAgICAgICAoMSA8PCAxNSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExNQ0KKyNkZWZpbmUgQVQ5MUNfUEExNV9OUENTMDMgICAgICAgICAoQVQ5MUNfUElPX1BBMTUpIC8vICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMNCisjZGVmaW5lIEFUOTFDX1BBMTVfVENMSzIgICAgICAgICAgKEFUOTFDX1BJT19QQTE1KSAvLyAgVGltZXIgQ291bnRlciAyIGV4dGVybmFsIGNsb2NrIGlucHV0DQorI2RlZmluZSBBVDkxQ19QSU9fUEExNiAgICAgICAgICAgICgxIDw8IDE2KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTE2DQorI2RlZmluZSBBVDkxQ19QQTE2X01JU08wICAgICAgICAgIChBVDkxQ19QSU9fUEExNikgLy8gIFNQSSAwIE1hc3RlciBJbiBTbGF2ZQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMTcgICAgICAgICAgICAoMSA8PCAxNykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExNw0KKyNkZWZpbmUgQVQ5MUNfUEExN19NT1NJMCAgICAgICAgICAoQVQ5MUNfUElPX1BBMTcpIC8vICBTUEkgMCBNYXN0ZXIgT3V0IFNsYXZlDQorI2RlZmluZSBBVDkxQ19QSU9fUEExOCAgICAgICAgICAgICgxIDw8IDE4KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTE4DQorI2RlZmluZSBBVDkxQ19QQTE4X1NQQ0swICAgICAgICAgIChBVDkxQ19QSU9fUEExOCkgLy8gIFNQSSAwIFNlcmlhbCBDbG9jaw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMTkgICAgICAgICAgICAoMSA8PCAxOSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExOQ0KKyNkZWZpbmUgQVQ5MUNfUEExOV9DQU5SWCAgICAgICAgICAoQVQ5MUNfUElPX1BBMTkpIC8vICBDQU4gUmVjZWl2ZQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMiAgICAgICAgICAgICAoMSA8PCAgMikgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEyDQorI2RlZmluZSBBVDkxQ19QQTJfU0NLMCAgICAgICAgICAgIChBVDkxQ19QSU9fUEEyKSAvLyAgVVNBUlQgMCBTZXJpYWwgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BBMl9OUENTMTEgICAgICAgICAgKEFUOTFDX1BJT19QQTIpIC8vICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDENCisjZGVmaW5lIEFUOTFDX1BJT19QQTIwICAgICAgICAgICAgKDEgPDwgMjApIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjANCisjZGVmaW5lIEFUOTFDX1BBMjBfQ0FOVFggICAgICAgICAgKEFUOTFDX1BJT19QQTIwKSAvLyAgQ0FOIFRyYW5zbWl0DQorI2RlZmluZSBBVDkxQ19QSU9fUEEyMSAgICAgICAgICAgICgxIDw8IDIxKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTIxDQorI2RlZmluZSBBVDkxQ19QQTIxX1RGICAgICAgICAgICAgIChBVDkxQ19QSU9fUEEyMSkgLy8gIFNTQyBUcmFuc21pdCBGcmFtZSBTeW5jDQorI2RlZmluZSBBVDkxQ19QQTIxX05QQ1MxMCAgICAgICAgIChBVDkxQ19QSU9fUEEyMSkgLy8gIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMjIgICAgICAgICAgICAoMSA8PCAyMikgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEyMg0KKyNkZWZpbmUgQVQ5MUNfUEEyMl9USyAgICAgICAgICAgICAoQVQ5MUNfUElPX1BBMjIpIC8vICBTU0MgVHJhbnNtaXQgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BBMjJfU1BDSzEgICAgICAgICAgKEFUOTFDX1BJT19QQTIyKSAvLyAgU1BJIDEgU2VyaWFsIENsb2NrDQorI2RlZmluZSBBVDkxQ19QSU9fUEEyMyAgICAgICAgICAgICgxIDw8IDIzKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTIzDQorI2RlZmluZSBBVDkxQ19QQTIzX1REICAgICAgICAgICAgIChBVDkxQ19QSU9fUEEyMykgLy8gIFNTQyBUcmFuc21pdCBkYXRhDQorI2RlZmluZSBBVDkxQ19QQTIzX01PU0kxICAgICAgICAgIChBVDkxQ19QSU9fUEEyMykgLy8gIFNQSSAxIE1hc3RlciBPdXQgU2xhdmUNCisjZGVmaW5lIEFUOTFDX1BJT19QQTI0ICAgICAgICAgICAgKDEgPDwgMjQpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjQNCisjZGVmaW5lIEFUOTFDX1BBMjRfUkQgICAgICAgICAgICAgKEFUOTFDX1BJT19QQTI0KSAvLyAgU1NDIFJlY2VpdmUgRGF0YQ0KKyNkZWZpbmUgQVQ5MUNfUEEyNF9NSVNPMSAgICAgICAgICAoQVQ5MUNfUElPX1BBMjQpIC8vICBTUEkgMSBNYXN0ZXIgSW4gU2xhdmUNCisjZGVmaW5lIEFUOTFDX1BJT19QQTI1ICAgICAgICAgICAgKDEgPDwgMjUpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjUNCisjZGVmaW5lIEFUOTFDX1BBMjVfUksgICAgICAgICAgICAgKEFUOTFDX1BJT19QQTI1KSAvLyAgU1NDIFJlY2VpdmUgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BBMjVfTlBDUzExICAgICAgICAgKEFUOTFDX1BJT19QQTI1KSAvLyAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAxDQorI2RlZmluZSBBVDkxQ19QSU9fUEEyNiAgICAgICAgICAgICgxIDw8IDI2KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTI2DQorI2RlZmluZSBBVDkxQ19QQTI2X1JGICAgICAgICAgICAgIChBVDkxQ19QSU9fUEEyNikgLy8gIFNTQyBSZWNlaXZlIEZyYW1lIFN5bmMNCisjZGVmaW5lIEFUOTFDX1BBMjZfTlBDUzEyICAgICAgICAgKEFUOTFDX1BJT19QQTI2KSAvLyAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAyDQorI2RlZmluZSBBVDkxQ19QSU9fUEEyNyAgICAgICAgICAgICgxIDw8IDI3KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTI3DQorI2RlZmluZSBBVDkxQ19QQTI3X0RSWEQgICAgICAgICAgIChBVDkxQ19QSU9fUEEyNykgLy8gIERCR1UgRGVidWcgUmVjZWl2ZSBEYXRhDQorI2RlZmluZSBBVDkxQ19QQTI3X1BDSzMgICAgICAgICAgIChBVDkxQ19QSU9fUEEyNykgLy8gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDMNCisjZGVmaW5lIEFUOTFDX1BJT19QQTI4ICAgICAgICAgICAgKDEgPDwgMjgpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjgNCisjZGVmaW5lIEFUOTFDX1BBMjhfRFRYRCAgICAgICAgICAgKEFUOTFDX1BJT19QQTI4KSAvLyAgREJHVSBEZWJ1ZyBUcmFuc21pdCBEYXRhDQorI2RlZmluZSBBVDkxQ19QSU9fUEEyOSAgICAgICAgICAgICgxIDw8IDI5KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTI5DQorI2RlZmluZSBBVDkxQ19QQTI5X0ZJUSAgICAgICAgICAgIChBVDkxQ19QSU9fUEEyOSkgLy8gIEFJQyBGYXN0IEludGVycnVwdCBJbnB1dA0KKyNkZWZpbmUgQVQ5MUNfUEEyOV9OUENTMTMgICAgICAgICAoQVQ5MUNfUElPX1BBMjkpIC8vICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMNCisjZGVmaW5lIEFUOTFDX1BJT19QQTMgICAgICAgICAgICAgKDEgPDwgIDMpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMw0KKyNkZWZpbmUgQVQ5MUNfUEEzX1JUUzAgICAgICAgICAgICAoQVQ5MUNfUElPX1BBMykgLy8gIFVTQVJUIDAgUmVhZHkgVG8gU2VuZA0KKyNkZWZpbmUgQVQ5MUNfUEEzX05QQ1MxMiAgICAgICAgICAoQVQ5MUNfUElPX1BBMykgLy8gIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMzAgICAgICAgICAgICAoMSA8PCAzMCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEzMA0KKyNkZWZpbmUgQVQ5MUNfUEEzMF9JUlEwICAgICAgICAgICAoQVQ5MUNfUElPX1BBMzApIC8vICBFeHRlcm5hbCBJbnRlcnJ1cHQgMA0KKyNkZWZpbmUgQVQ5MUNfUEEzMF9QQ0syICAgICAgICAgICAoQVQ5MUNfUElPX1BBMzApIC8vICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAyDQorI2RlZmluZSBBVDkxQ19QSU9fUEE0ICAgICAgICAgICAgICgxIDw8ICA0KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTQNCisjZGVmaW5lIEFUOTFDX1BBNF9DVFMwICAgICAgICAgICAgKEFUOTFDX1BJT19QQTQpIC8vICBVU0FSVCAwIENsZWFyIFRvIFNlbmQNCisjZGVmaW5lIEFUOTFDX1BBNF9OUENTMTMgICAgICAgICAgKEFUOTFDX1BJT19QQTQpIC8vICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMNCisjZGVmaW5lIEFUOTFDX1BJT19QQTUgICAgICAgICAgICAgKDEgPDwgIDUpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBNQ0KKyNkZWZpbmUgQVQ5MUNfUEE1X1JYRDEgICAgICAgICAgICAoQVQ5MUNfUElPX1BBNSkgLy8gIFVTQVJUIDEgUmVjZWl2ZSBEYXRhDQorI2RlZmluZSBBVDkxQ19QSU9fUEE2ICAgICAgICAgICAgICgxIDw8ICA2KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTYNCisjZGVmaW5lIEFUOTFDX1BBNl9UWEQxICAgICAgICAgICAgKEFUOTFDX1BJT19QQTYpIC8vICBVU0FSVCAxIFRyYW5zbWl0IERhdGENCisjZGVmaW5lIEFUOTFDX1BJT19QQTcgICAgICAgICAgICAgKDEgPDwgIDcpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBNw0KKyNkZWZpbmUgQVQ5MUNfUEE3X1NDSzEgICAgICAgICAgICAoQVQ5MUNfUElPX1BBNykgLy8gIFVTQVJUIDEgU2VyaWFsIENsb2NrDQorI2RlZmluZSBBVDkxQ19QQTdfTlBDUzAxICAgICAgICAgIChBVDkxQ19QSU9fUEE3KSAvLyAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAxDQorI2RlZmluZSBBVDkxQ19QSU9fUEE4ICAgICAgICAgICAgICgxIDw8ICA4KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTgNCisjZGVmaW5lIEFUOTFDX1BBOF9SVFMxICAgICAgICAgICAgKEFUOTFDX1BJT19QQTgpIC8vICBVU0FSVCAxIFJlYWR5IFRvIFNlbmQNCisjZGVmaW5lIEFUOTFDX1BBOF9OUENTMDIgICAgICAgICAgKEFUOTFDX1BJT19QQTgpIC8vICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDINCisjZGVmaW5lIEFUOTFDX1BJT19QQTkgICAgICAgICAgICAgKDEgPDwgIDkpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBOQ0KKyNkZWZpbmUgQVQ5MUNfUEE5X0NUUzEgICAgICAgICAgICAoQVQ5MUNfUElPX1BBOSkgLy8gIFVTQVJUIDEgQ2xlYXIgVG8gU2VuZA0KKyNkZWZpbmUgQVQ5MUNfUEE5X05QQ1MwMyAgICAgICAgICAoQVQ5MUNfUElPX1BBOSkgLy8gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMCAgICAgICAgICAgICAoMSA8PCAgMCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIwDQorI2RlZmluZSBBVDkxQ19QQjBfRVRYQ0tfRVJFRkNLICAgIChBVDkxQ19QSU9fUEIwKSAvLyAgRXRoZXJuZXQgTUFDIFRyYW5zbWl0IENsb2NrL1JlZmVyZW5jZSBDbG9jaw0KKyNkZWZpbmUgQVQ5MUNfUEIwX1BDSzAgICAgICAgICAgICAoQVQ5MUNfUElPX1BCMCkgLy8gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDANCisjZGVmaW5lIEFUOTFDX1BJT19QQjEgICAgICAgICAgICAgKDEgPDwgIDEpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMQ0KKyNkZWZpbmUgQVQ5MUNfUEIxX0VUWEVOICAgICAgICAgICAoQVQ5MUNfUElPX1BCMSkgLy8gIEV0aGVybmV0IE1BQyBUcmFuc21pdCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1BJT19QQjEwICAgICAgICAgICAgKDEgPDwgMTApIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMTANCisjZGVmaW5lIEFUOTFDX1BCMTBfRVRYMiAgICAgICAgICAgKEFUOTFDX1BJT19QQjEwKSAvLyAgRXRoZXJuZXQgTUFDIFRyYW5zbWl0IERhdGEgMg0KKyNkZWZpbmUgQVQ5MUNfUEIxMF9OUENTMTEgICAgICAgICAoQVQ5MUNfUElPX1BCMTApIC8vICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDENCisjZGVmaW5lIEFUOTFDX1BJT19QQjExICAgICAgICAgICAgKDEgPDwgMTEpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMTENCisjZGVmaW5lIEFUOTFDX1BCMTFfRVRYMyAgICAgICAgICAgKEFUOTFDX1BJT19QQjExKSAvLyAgRXRoZXJuZXQgTUFDIFRyYW5zbWl0IERhdGEgMw0KKyNkZWZpbmUgQVQ5MUNfUEIxMV9OUENTMTIgICAgICAgICAoQVQ5MUNfUElPX1BCMTEpIC8vICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDINCisjZGVmaW5lIEFUOTFDX1BJT19QQjEyICAgICAgICAgICAgKDEgPDwgMTIpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMTINCisjZGVmaW5lIEFUOTFDX1BCMTJfRVRYRVIgICAgICAgICAgKEFUOTFDX1BJT19QQjEyKSAvLyAgRXRoZXJuZXQgTUFDIFRyYW5zbWlrdCBDb2RpbmcgRXJyb3INCisjZGVmaW5lIEFUOTFDX1BCMTJfVENMSzAgICAgICAgICAgKEFUOTFDX1BJT19QQjEyKSAvLyAgVGltZXIgQ291bnRlciAwIGV4dGVybmFsIGNsb2NrIGlucHV0DQorI2RlZmluZSBBVDkxQ19QSU9fUEIxMyAgICAgICAgICAgICgxIDw8IDEzKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjEzDQorI2RlZmluZSBBVDkxQ19QQjEzX0VSWDIgICAgICAgICAgIChBVDkxQ19QSU9fUEIxMykgLy8gIEV0aGVybmV0IE1BQyBSZWNlaXZlIERhdGEgMg0KKyNkZWZpbmUgQVQ5MUNfUEIxM19OUENTMDEgICAgICAgICAoQVQ5MUNfUElPX1BCMTMpIC8vICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDENCisjZGVmaW5lIEFUOTFDX1BJT19QQjE0ICAgICAgICAgICAgKDEgPDwgMTQpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMTQNCisjZGVmaW5lIEFUOTFDX1BCMTRfRVJYMyAgICAgICAgICAgKEFUOTFDX1BJT19QQjE0KSAvLyAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgRGF0YSAzDQorI2RlZmluZSBBVDkxQ19QQjE0X05QQ1MwMiAgICAgICAgIChBVDkxQ19QSU9fUEIxNCkgLy8gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMTUgICAgICAgICAgICAoMSA8PCAxNSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIxNQ0KKyNkZWZpbmUgQVQ5MUNfUEIxNV9FUlhEViAgICAgICAgICAoQVQ5MUNfUElPX1BCMTUpIC8vICBFdGhlcm5ldCBNQUMgUmVjZWl2ZSBEYXRhIFZhbGlkDQorI2RlZmluZSBBVDkxQ19QSU9fUEIxNiAgICAgICAgICAgICgxIDw8IDE2KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjE2DQorI2RlZmluZSBBVDkxQ19QQjE2X0VDT0wgICAgICAgICAgIChBVDkxQ19QSU9fUEIxNikgLy8gIEV0aGVybmV0IE1BQyBDb2xsaXNpb24gRGV0ZWN0ZWQNCisjZGVmaW5lIEFUOTFDX1BCMTZfTlBDUzEzICAgICAgICAgKEFUOTFDX1BJT19QQjE2KSAvLyAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzDQorI2RlZmluZSBBVDkxQ19QSU9fUEIxNyAgICAgICAgICAgICgxIDw8IDE3KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjE3DQorI2RlZmluZSBBVDkxQ19QQjE3X0VSWENLICAgICAgICAgIChBVDkxQ19QSU9fUEIxNykgLy8gIEV0aGVybmV0IE1BQyBSZWNlaXZlIENsb2NrDQorI2RlZmluZSBBVDkxQ19QQjE3X05QQ1MwMyAgICAgICAgIChBVDkxQ19QSU9fUEIxNykgLy8gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMTggICAgICAgICAgICAoMSA8PCAxOCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIxOA0KKyNkZWZpbmUgQVQ5MUNfUEIxOF9FRjEwMCAgICAgICAgICAoQVQ5MUNfUElPX1BCMTgpIC8vICBFdGhlcm5ldCBNQUMgRm9yY2UgMTAwIE1iaXRzL3NlYw0KKyNkZWZpbmUgQVQ5MUNfUEIxOF9BRFRSRyAgICAgICAgICAoQVQ5MUNfUElPX1BCMTgpIC8vICBBREMgRXh0ZXJuYWwgVHJpZ2dlcg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMTkgICAgICAgICAgICAoMSA8PCAxOSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIxOQ0KKyNkZWZpbmUgQVQ5MUNfUEIxOV9QV00wICAgICAgICAgICAoQVQ5MUNfUElPX1BCMTkpIC8vICBQV00gQ2hhbm5lbCAwDQorI2RlZmluZSBBVDkxQ19QQjE5X1RDTEsxICAgICAgICAgIChBVDkxQ19QSU9fUEIxOSkgLy8gIFRpbWVyIENvdW50ZXIgMSBleHRlcm5hbCBjbG9jayBpbnB1dA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMiAgICAgICAgICAgICAoMSA8PCAgMikgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIyDQorI2RlZmluZSBBVDkxQ19QQjJfRVRYMCAgICAgICAgICAgIChBVDkxQ19QSU9fUEIyKSAvLyAgRXRoZXJuZXQgTUFDIFRyYW5zbWl0IERhdGEgMA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMjAgICAgICAgICAgICAoMSA8PCAyMCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIyMA0KKyNkZWZpbmUgQVQ5MUNfUEIyMF9QV00xICAgICAgICAgICAoQVQ5MUNfUElPX1BCMjApIC8vICBQV00gQ2hhbm5lbCAxDQorI2RlZmluZSBBVDkxQ19QQjIwX1BDSzAgICAgICAgICAgIChBVDkxQ19QSU9fUEIyMCkgLy8gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDANCisjZGVmaW5lIEFUOTFDX1BJT19QQjIxICAgICAgICAgICAgKDEgPDwgMjEpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMjENCisjZGVmaW5lIEFUOTFDX1BCMjFfUFdNMiAgICAgICAgICAgKEFUOTFDX1BJT19QQjIxKSAvLyAgUFdNIENoYW5uZWwgMg0KKyNkZWZpbmUgQVQ5MUNfUEIyMV9QQ0sxICAgICAgICAgICAoQVQ5MUNfUElPX1BCMjEpIC8vICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAxDQorI2RlZmluZSBBVDkxQ19QSU9fUEIyMiAgICAgICAgICAgICgxIDw8IDIyKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjIyDQorI2RlZmluZSBBVDkxQ19QQjIyX1BXTTMgICAgICAgICAgIChBVDkxQ19QSU9fUEIyMikgLy8gIFBXTSBDaGFubmVsIDMNCisjZGVmaW5lIEFUOTFDX1BCMjJfUENLMiAgICAgICAgICAgKEFUOTFDX1BJT19QQjIyKSAvLyAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMjMgICAgICAgICAgICAoMSA8PCAyMykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIyMw0KKyNkZWZpbmUgQVQ5MUNfUEIyM19USU9BMCAgICAgICAgICAoQVQ5MUNfUElPX1BCMjMpIC8vICBUaW1lciBDb3VudGVyIDAgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQQ0KKyNkZWZpbmUgQVQ5MUNfUEIyM19EQ0QxICAgICAgICAgICAoQVQ5MUNfUElPX1BCMjMpIC8vICBVU0FSVCAxIERhdGEgQ2FycmllciBEZXRlY3QNCisjZGVmaW5lIEFUOTFDX1BJT19QQjI0ICAgICAgICAgICAgKDEgPDwgMjQpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMjQNCisjZGVmaW5lIEFUOTFDX1BCMjRfVElPQjAgICAgICAgICAgKEFUOTFDX1BJT19QQjI0KSAvLyAgVGltZXIgQ291bnRlciAwIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEINCisjZGVmaW5lIEFUOTFDX1BCMjRfRFNSMSAgICAgICAgICAgKEFUOTFDX1BJT19QQjI0KSAvLyAgVVNBUlQgMSBEYXRhIFNldCByZWFkeQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMjUgICAgICAgICAgICAoMSA8PCAyNSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIyNQ0KKyNkZWZpbmUgQVQ5MUNfUEIyNV9USU9BMSAgICAgICAgICAoQVQ5MUNfUElPX1BCMjUpIC8vICBUaW1lciBDb3VudGVyIDEgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQQ0KKyNkZWZpbmUgQVQ5MUNfUEIyNV9EVFIxICAgICAgICAgICAoQVQ5MUNfUElPX1BCMjUpIC8vICBVU0FSVCAxIERhdGEgVGVybWluYWwgcmVhZHkNCisjZGVmaW5lIEFUOTFDX1BJT19QQjI2ICAgICAgICAgICAgKDEgPDwgMjYpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMjYNCisjZGVmaW5lIEFUOTFDX1BCMjZfVElPQjEgICAgICAgICAgKEFUOTFDX1BJT19QQjI2KSAvLyAgVGltZXIgQ291bnRlciAxIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEINCisjZGVmaW5lIEFUOTFDX1BCMjZfUkkxICAgICAgICAgICAgKEFUOTFDX1BJT19QQjI2KSAvLyAgVVNBUlQgMSBSaW5nIEluZGljYXRvcg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMjcgICAgICAgICAgICAoMSA8PCAyNykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIyNw0KKyNkZWZpbmUgQVQ5MUNfUEIyN19USU9BMiAgICAgICAgICAoQVQ5MUNfUElPX1BCMjcpIC8vICBUaW1lciBDb3VudGVyIDIgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQQ0KKyNkZWZpbmUgQVQ5MUNfUEIyN19QV00wICAgICAgICAgICAoQVQ5MUNfUElPX1BCMjcpIC8vICBQV00gQ2hhbm5lbCAwDQorI2RlZmluZSBBVDkxQ19QSU9fUEIyOCAgICAgICAgICAgICgxIDw8IDI4KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjI4DQorI2RlZmluZSBBVDkxQ19QQjI4X1RJT0IyICAgICAgICAgIChBVDkxQ19QSU9fUEIyOCkgLy8gIFRpbWVyIENvdW50ZXIgMiBNdWx0aXB1cnBvc2UgVGltZXIgSS9PIFBpbiBCDQorI2RlZmluZSBBVDkxQ19QQjI4X1BXTTEgICAgICAgICAgIChBVDkxQ19QSU9fUEIyOCkgLy8gIFBXTSBDaGFubmVsIDENCisjZGVmaW5lIEFUOTFDX1BJT19QQjI5ICAgICAgICAgICAgKDEgPDwgMjkpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMjkNCisjZGVmaW5lIEFUOTFDX1BCMjlfUENLMSAgICAgICAgICAgKEFUOTFDX1BJT19QQjI5KSAvLyAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMQ0KKyNkZWZpbmUgQVQ5MUNfUEIyOV9QV00yICAgICAgICAgICAoQVQ5MUNfUElPX1BCMjkpIC8vICBQV00gQ2hhbm5lbCAyDQorI2RlZmluZSBBVDkxQ19QSU9fUEIzICAgICAgICAgICAgICgxIDw8ICAzKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjMNCisjZGVmaW5lIEFUOTFDX1BCM19FVFgxICAgICAgICAgICAgKEFUOTFDX1BJT19QQjMpIC8vICBFdGhlcm5ldCBNQUMgVHJhbnNtaXQgRGF0YSAxDQorI2RlZmluZSBBVDkxQ19QSU9fUEIzMCAgICAgICAgICAgICgxIDw8IDMwKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjMwDQorI2RlZmluZSBBVDkxQ19QQjMwX1BDSzIgICAgICAgICAgIChBVDkxQ19QSU9fUEIzMCkgLy8gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDINCisjZGVmaW5lIEFUOTFDX1BCMzBfUFdNMyAgICAgICAgICAgKEFUOTFDX1BJT19QQjMwKSAvLyAgUFdNIENoYW5uZWwgMw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCNCAgICAgICAgICAgICAoMSA8PCAgNCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEI0DQorI2RlZmluZSBBVDkxQ19QQjRfRUNSU19FQ1JTRFYgICAgIChBVDkxQ19QSU9fUEI0KSAvLyAgRXRoZXJuZXQgTUFDIENhcnJpZXIgU2Vuc2UvQ2FycmllciBTZW5zZSBhbmQgRGF0YSBWYWxpZA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCNSAgICAgICAgICAgICAoMSA8PCAgNSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEI1DQorI2RlZmluZSBBVDkxQ19QQjVfRVJYMCAgICAgICAgICAgIChBVDkxQ19QSU9fUEI1KSAvLyAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgRGF0YSAwDQorI2RlZmluZSBBVDkxQ19QSU9fUEI2ICAgICAgICAgICAgICgxIDw8ICA2KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjYNCisjZGVmaW5lIEFUOTFDX1BCNl9FUlgxICAgICAgICAgICAgKEFUOTFDX1BJT19QQjYpIC8vICBFdGhlcm5ldCBNQUMgUmVjZWl2ZSBEYXRhIDENCisjZGVmaW5lIEFUOTFDX1BJT19QQjcgICAgICAgICAgICAgKDEgPDwgIDcpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCNw0KKyNkZWZpbmUgQVQ5MUNfUEI3X0VSWEVSICAgICAgICAgICAoQVQ5MUNfUElPX1BCNykgLy8gIEV0aGVybmV0IE1BQyBSZWNlaXZlIEVycm9yDQorI2RlZmluZSBBVDkxQ19QSU9fUEI4ICAgICAgICAgICAgICgxIDw8ICA4KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjgNCisjZGVmaW5lIEFUOTFDX1BCOF9FTURDICAgICAgICAgICAgKEFUOTFDX1BJT19QQjgpIC8vICBFdGhlcm5ldCBNQUMgTWFuYWdlbWVudCBEYXRhIENsb2NrDQorI2RlZmluZSBBVDkxQ19QSU9fUEI5ICAgICAgICAgICAgICgxIDw8ICA5KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjkNCisjZGVmaW5lIEFUOTFDX1BCOV9FTURJTyAgICAgICAgICAgKEFUOTFDX1BJT19QQjkpIC8vICBFdGhlcm5ldCBNQUMgTWFuYWdlbWVudCBEYXRhIElucHV0L091dHB1dA0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgICBQRVJJUEhFUkFMIElEIERFRklOSVRJT05TIEZPUiBBVDkxU0FNN1gxMjggKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfRklRICAgICAgICAgICAgKCAwICkgIC8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChGSVEpICovDQotI2RlZmluZSBBVDkxQ19JRF9TWVMgICAgICAgICAgICAoIDEgKSAgLyogU3lzdGVtIFBlcmlwaGVyYWwgKi8NCi0jZGVmaW5lIEFUOTFDX0lEX1BJT0EgICAgICAgICAgICggMiApICAvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEEgKi8NCi0jZGVmaW5lIEFUOTFDX0lEX1BJT0IgICAgICAgICAgICggMyApICAvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEIgKi8NCi0jZGVmaW5lIEFUOTFDX0lEX1NQSTAgICAgICAgICAgICggNCApICAvKiBTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgMCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfU1BJMSAgICAgICAgICAgKCA1ICkgIC8qIFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSAxICovDQotI2RlZmluZSBBVDkxQ19JRF9VUzAgICAgICAgICAgICAoIDYgKSAgLyogVVNBUlQgMCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfVVMxICAgICAgICAgICAgKCA3ICkgIC8qIFVTQVJUIDEgKi8NCi0jZGVmaW5lIEFUOTFDX0lEX1NTQyAgICAgICAgICAgICggOCApICAvKiBTZXJpYWwgU3luY2hyb25vdXMgQ29udHJvbGxlciAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfVFdJICAgICAgICAgICAgKCA5ICkgIC8qIFR3by1XaXJlIEludGVyZmFjZSAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfUFdNQyAgICAgICAgICAgKCAxMCApIC8qIFBXTSBDb250cm9sbGVyICovDQotI2RlZmluZSBBVDkxQ19JRF9VRFAgICAgICAgICAgICAoIDExICkgLyogVVNCIERldmljZSBQb3J0ICovDQotI2RlZmluZSBBVDkxQ19JRF9UQzAgICAgICAgICAgICAoIDEyICkgLyogVGltZXIgQ291bnRlciAwICovDQotI2RlZmluZSBBVDkxQ19JRF9UQzEgICAgICAgICAgICAoIDEzICkgLyogVGltZXIgQ291bnRlciAxICovDQotI2RlZmluZSBBVDkxQ19JRF9UQzIgICAgICAgICAgICAoIDE0ICkgLyogVGltZXIgQ291bnRlciAyICovDQotI2RlZmluZSBBVDkxQ19JRF9DQU4gICAgICAgICAgICAoIDE1ICkgLyogQ29udHJvbCBBcmVhIE5ldHdvcmsgQ29udHJvbGxlciAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfRU1BQyAgICAgICAgICAgKCAxNiApIC8qIEV0aGVybmV0IE1BQyAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfQURDICAgICAgICAgICAgKCAxNyApIC8qIEFuYWxvZy10by1EaWdpdGFsIENvbnZlcnRlciAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfQUVTICAgICAgICAgICAgKCAxOCApIC8qIEFkdmFuY2VkIEVuY3J5cHRpb24gU3RhbmRhcmQgMTI4LWJpdCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfVERFUyAgICAgICAgICAgKCAxOSApIC8qIFRyaXBsZSBEYXRhIEVuY3J5cHRpb24gU3RhbmRhcmQgKi8NCi0jZGVmaW5lIEFUOTFDX0lEXzIwX1Jlc2VydmVkICAgICggMjAgKSAvKiBSZXNlcnZlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfMjFfUmVzZXJ2ZWQgICAgKCAyMSApIC8qIFJlc2VydmVkICovDQotI2RlZmluZSBBVDkxQ19JRF8yMl9SZXNlcnZlZCAgICAoIDIyICkgLyogUmVzZXJ2ZWQgKi8NCi0jZGVmaW5lIEFUOTFDX0lEXzIzX1Jlc2VydmVkICAgICggMjMgKSAvKiBSZXNlcnZlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfMjRfUmVzZXJ2ZWQgICAgKCAyNCApIC8qIFJlc2VydmVkICovDQotI2RlZmluZSBBVDkxQ19JRF8yNV9SZXNlcnZlZCAgICAoIDI1ICkgLyogUmVzZXJ2ZWQgKi8NCi0jZGVmaW5lIEFUOTFDX0lEXzI2X1Jlc2VydmVkICAgICggMjYgKSAvKiBSZXNlcnZlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfMjdfUmVzZXJ2ZWQgICAgKCAyNyApIC8qIFJlc2VydmVkICovDQotI2RlZmluZSBBVDkxQ19JRF8yOF9SZXNlcnZlZCAgICAoIDI4ICkgLyogUmVzZXJ2ZWQgKi8NCi0jZGVmaW5lIEFUOTFDX0lEXzI5X1Jlc2VydmVkICAgICggMjkgKSAvKiBSZXNlcnZlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfSVJRMCAgICAgICAgICAgKCAzMCApIC8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChJUlEwKSAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfSVJRMSAgICAgICAgICAgKCAzMSApIC8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChJUlExKSAqLw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgICBQRVJJUEhFUkFMIElEIERFRklOSVRJT05TIEZPUiBBVDkxU0FNN1gxMjgNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyNkZWZpbmUgQVQ5MUNfSURfRklRICAgICAgICAgICAgICAoIDApIC8vIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChGSVEpDQorI2RlZmluZSBBVDkxQ19JRF9TWVMgICAgICAgICAgICAgICggMSkgLy8gU3lzdGVtIFBlcmlwaGVyYWwNCisjZGVmaW5lIEFUOTFDX0lEX1BJT0EgICAgICAgICAgICAgKCAyKSAvLyBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEENCisjZGVmaW5lIEFUOTFDX0lEX1BJT0IgICAgICAgICAgICAgKCAzKSAvLyBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEINCisjZGVmaW5lIEFUOTFDX0lEX1NQSTAgICAgICAgICAgICAgKCA0KSAvLyBTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgMA0KKyNkZWZpbmUgQVQ5MUNfSURfU1BJMSAgICAgICAgICAgICAoIDUpIC8vIFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSAxDQorI2RlZmluZSBBVDkxQ19JRF9VUzAgICAgICAgICAgICAgICggNikgLy8gVVNBUlQgMA0KKyNkZWZpbmUgQVQ5MUNfSURfVVMxICAgICAgICAgICAgICAoIDcpIC8vIFVTQVJUIDENCisjZGVmaW5lIEFUOTFDX0lEX1NTQyAgICAgICAgICAgICAgKCA4KSAvLyBTZXJpYWwgU3luY2hyb25vdXMgQ29udHJvbGxlcg0KKyNkZWZpbmUgQVQ5MUNfSURfVFdJICAgICAgICAgICAgICAoIDkpIC8vIFR3by1XaXJlIEludGVyZmFjZQ0KKyNkZWZpbmUgQVQ5MUNfSURfUFdNQyAgICAgICAgICAgICAoMTApIC8vIFBXTSBDb250cm9sbGVyDQorI2RlZmluZSBBVDkxQ19JRF9VRFAgICAgICAgICAgICAgICgxMSkgLy8gVVNCIERldmljZSBQb3J0DQorI2RlZmluZSBBVDkxQ19JRF9UQzAgICAgICAgICAgICAgICgxMikgLy8gVGltZXIgQ291bnRlciAwDQorI2RlZmluZSBBVDkxQ19JRF9UQzEgICAgICAgICAgICAgICgxMykgLy8gVGltZXIgQ291bnRlciAxDQorI2RlZmluZSBBVDkxQ19JRF9UQzIgICAgICAgICAgICAgICgxNCkgLy8gVGltZXIgQ291bnRlciAyDQorI2RlZmluZSBBVDkxQ19JRF9DQU4gICAgICAgICAgICAgICgxNSkgLy8gQ29udHJvbCBBcmVhIE5ldHdvcmsgQ29udHJvbGxlcg0KKyNkZWZpbmUgQVQ5MUNfSURfRU1BQyAgICAgICAgICAgICAoMTYpIC8vIEV0aGVybmV0IE1BQw0KKyNkZWZpbmUgQVQ5MUNfSURfQURDICAgICAgICAgICAgICAoMTcpIC8vIEFuYWxvZy10by1EaWdpdGFsIENvbnZlcnRlcg0KKyNkZWZpbmUgQVQ5MUNfSURfQUVTICAgICAgICAgICAgICAoMTgpIC8vIEFkdmFuY2VkIEVuY3J5cHRpb24gU3RhbmRhcmQgMTI4LWJpdA0KKyNkZWZpbmUgQVQ5MUNfSURfVERFUyAgICAgICAgICAgICAoMTkpIC8vIFRyaXBsZSBEYXRhIEVuY3J5cHRpb24gU3RhbmRhcmQNCisjZGVmaW5lIEFUOTFDX0lEXzIwX1Jlc2VydmVkICAgICAgKDIwKSAvLyBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfSURfMjFfUmVzZXJ2ZWQgICAgICAoMjEpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yMl9SZXNlcnZlZCAgICAgICgyMikgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzIzX1Jlc2VydmVkICAgICAgKDIzKSAvLyBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfSURfMjRfUmVzZXJ2ZWQgICAgICAoMjQpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yNV9SZXNlcnZlZCAgICAgICgyNSkgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzI2X1Jlc2VydmVkICAgICAgKDI2KSAvLyBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfSURfMjdfUmVzZXJ2ZWQgICAgICAoMjcpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yOF9SZXNlcnZlZCAgICAgICgyOCkgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzI5X1Jlc2VydmVkICAgICAgKDI5KSAvLyBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfSURfSVJRMCAgICAgICAgICAgICAoMzApIC8vIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChJUlEwKQ0KKyNkZWZpbmUgQVQ5MUNfSURfSVJRMSAgICAgICAgICAgICAoMzEpIC8vIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChJUlExKQ0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgICBCQVNFIEFERFJFU1MgREVGSU5JVElPTlMgRk9SIEFUOTFTQU03WDEyOCAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1NZUyAgICAgICAgICggMHhGRkZGRjAwMCApICAvKiAoU1lTKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfQUlDICAgICAgICAgKCAweEZGRkZGMDAwICkgIC8qIChBSUMpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfREJHVSAgICAoIDB4RkZGRkYzMDAgKSAgLyogKFBEQ19EQkdVKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfREJHVSAgICAgICAgKCAweEZGRkZGMjAwICkgIC8qIChEQkdVKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfUElPQSAgICAgICAgKCAweEZGRkZGNDAwICkgIC8qIChQSU9BKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfUElPQiAgICAgICAgKCAweEZGRkZGNjAwICkgIC8qIChQSU9CKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfQ0tHUiAgICAgICAgKCAweEZGRkZGQzIwICkgIC8qIChDS0dSKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfUE1DICAgICAgICAgKCAweEZGRkZGQzAwICkgIC8qIChQTUMpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9SU1RDICAgICAgICAoIDB4RkZGRkZEMDAgKSAgLyogKFJTVEMpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9SVFRDICAgICAgICAoIDB4RkZGRkZEMjAgKSAgLyogKFJUVEMpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9QSVRDICAgICAgICAoIDB4RkZGRkZEMzAgKSAgLyogKFBJVEMpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9XRFRDICAgICAgICAoIDB4RkZGRkZENDAgKSAgLyogKFdEVEMpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9WUkVHICAgICAgICAoIDB4RkZGRkZENjAgKSAgLyogKFZSRUcpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9NQyAgICAgICAgICAoIDB4RkZGRkZGMDAgKSAgLyogKE1DKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfUERDX1NQSTEgICAgKCAweEZGRkU0MTAwICkgIC8qIChQRENfU1BJMSkgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1NQSTEgICAgICAgICggMHhGRkZFNDAwMCApICAvKiAoU1BJMSkgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19TUEkwICAgICggMHhGRkZFMDEwMCApICAvKiAoUERDX1NQSTApIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9TUEkwICAgICAgICAoIDB4RkZGRTAwMDAgKSAgLyogKFNQSTApIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfVVMxICAgICAoIDB4RkZGQzQxMDAgKSAgLyogKFBEQ19VUzEpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9VUzEgICAgICAgICAoIDB4RkZGQzQwMDAgKSAgLyogKFVTMSkgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19VUzAgICAgICggMHhGRkZDMDEwMCApICAvKiAoUERDX1VTMCkgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1VTMCAgICAgICAgICggMHhGRkZDMDAwMCApICAvKiAoVVMwKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfUERDX1NTQyAgICAgKCAweEZGRkQ0MTAwICkgIC8qIChQRENfU1NDKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfU1NDICAgICAgICAgKCAweEZGRkQ0MDAwICkgIC8qIChTU0MpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9UV0kgICAgICAgICAoIDB4RkZGQjgwMDAgKSAgLyogKFRXSSkgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1BXTUNfQ0gzICAgICggMHhGRkZDQzI2MCApICAvKiAoUFdNQ19DSDMpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9QV01DX0NIMiAgICAoIDB4RkZGQ0MyNDAgKSAgLyogKFBXTUNfQ0gyKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfUFdNQ19DSDEgICAgKCAweEZGRkNDMjIwICkgIC8qIChQV01DX0NIMSkgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1BXTUNfQ0gwICAgICggMHhGRkZDQzIwMCApICAvKiAoUFdNQ19DSDApIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9QV01DICAgICAgICAoIDB4RkZGQ0MwMDAgKSAgLyogKFBXTUMpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9VRFAgICAgICAgICAoIDB4RkZGQjAwMDAgKSAgLyogKFVEUCkgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1RDMCAgICAgICAgICggMHhGRkZBMDAwMCApICAvKiAoVEMwKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfVEMxICAgICAgICAgKCAweEZGRkEwMDQwICkgIC8qIChUQzEpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9UQzIgICAgICAgICAoIDB4RkZGQTAwODAgKSAgLyogKFRDMikgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1RDQiAgICAgICAgICggMHhGRkZBMDAwMCApICAvKiAoVENCKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfQ0FOX01CMCAgICAgKCAweEZGRkQwMjAwICkgIC8qIChDQU5fTUIwKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfQ0FOX01CMSAgICAgKCAweEZGRkQwMjIwICkgIC8qIChDQU5fTUIxKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfQ0FOX01CMiAgICAgKCAweEZGRkQwMjQwICkgIC8qIChDQU5fTUIyKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfQ0FOX01CMyAgICAgKCAweEZGRkQwMjYwICkgIC8qIChDQU5fTUIzKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfQ0FOX01CNCAgICAgKCAweEZGRkQwMjgwICkgIC8qIChDQU5fTUI0KSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfQ0FOX01CNSAgICAgKCAweEZGRkQwMkEwICkgIC8qIChDQU5fTUI1KSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfQ0FOX01CNiAgICAgKCAweEZGRkQwMkMwICkgIC8qIChDQU5fTUI2KSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfQ0FOX01CNyAgICAgKCAweEZGRkQwMkUwICkgIC8qIChDQU5fTUI3KSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfQ0FOICAgICAgICAgKCAweEZGRkQwMDAwICkgIC8qIChDQU4pIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9FTUFDICAgICAgICAoIDB4RkZGREMwMDAgKSAgLyogKEVNQUMpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfQURDICAgICAoIDB4RkZGRDgxMDAgKSAgLyogKFBEQ19BREMpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9BREMgICAgICAgICAoIDB4RkZGRDgwMDAgKSAgLyogKEFEQykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19BRVMgICAgICggMHhGRkZBNDEwMCApICAvKiAoUERDX0FFUykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX0FFUyAgICAgICAgICggMHhGRkZBNDAwMCApICAvKiAoQUVTKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfUERDX1RERVMgICAgKCAweEZGRkE4MTAwICkgIC8qIChQRENfVERFUykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1RERVMgICAgICAgICggMHhGRkZBODAwMCApICAvKiAoVERFUykgQmFzZSBBZGRyZXNzICovDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgIEJBU0UgQUREUkVTUyBERUZJTklUSU9OUyBGT1IgQVQ5MVNBTTdYMTI4DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisjZGVmaW5lIEFUOTFDX0JBU0VfU1lTICAgICAgICAgICAgKDB4RkZGRkYwMDApIC8vIChTWVMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9BSUMgICAgICAgICAgICAoMHhGRkZGRjAwMCkgLy8gKEFJQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19EQkdVICAgICAgICgweEZGRkZGMzAwKSAvLyAoUERDX0RCR1UpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9EQkdVICAgICAgICAgICAoMHhGRkZGRjIwMCkgLy8gKERCR1UpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QSU9BICAgICAgICAgICAoMHhGRkZGRjQwMCkgLy8gKFBJT0EpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QSU9CICAgICAgICAgICAoMHhGRkZGRjYwMCkgLy8gKFBJT0IpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DS0dSICAgICAgICAgICAoMHhGRkZGRkMyMCkgLy8gKENLR1IpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QTUMgICAgICAgICAgICAoMHhGRkZGRkMwMCkgLy8gKFBNQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1JTVEMgICAgICAgICAgICgweEZGRkZGRDAwKSAvLyAoUlNUQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1JUVEMgICAgICAgICAgICgweEZGRkZGRDIwKSAvLyAoUlRUQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BJVEMgICAgICAgICAgICgweEZGRkZGRDMwKSAvLyAoUElUQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1dEVEMgICAgICAgICAgICgweEZGRkZGRDQwKSAvLyAoV0RUQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1ZSRUcgICAgICAgICAgICgweEZGRkZGRDYwKSAvLyAoVlJFRykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX01DICAgICAgICAgICAgICgweEZGRkZGRjAwKSAvLyAoTUMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfU1BJMSAgICAgICAoMHhGRkZFNDEwMCkgLy8gKFBEQ19TUEkxKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfU1BJMSAgICAgICAgICAgKDB4RkZGRTQwMDApIC8vIChTUEkxKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUERDX1NQSTAgICAgICAgKDB4RkZGRTAxMDApIC8vIChQRENfU1BJMCkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1NQSTAgICAgICAgICAgICgweEZGRkUwMDAwKSAvLyAoU1BJMCkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19VUzEgICAgICAgICgweEZGRkM0MTAwKSAvLyAoUERDX1VTMSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1VTMSAgICAgICAgICAgICgweEZGRkM0MDAwKSAvLyAoVVMxKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUERDX1VTMCAgICAgICAgKDB4RkZGQzAxMDApIC8vIChQRENfVVMwKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfVVMwICAgICAgICAgICAgKDB4RkZGQzAwMDApIC8vIChVUzApIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfU1NDICAgICAgICAoMHhGRkZENDEwMCkgLy8gKFBEQ19TU0MpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9TU0MgICAgICAgICAgICAoMHhGRkZENDAwMCkgLy8gKFNTQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1RXSSAgICAgICAgICAgICgweEZGRkI4MDAwKSAvLyAoVFdJKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUFdNQ19DSDMgICAgICAgKDB4RkZGQ0MyNjApIC8vIChQV01DX0NIMykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BXTUNfQ0gyICAgICAgICgweEZGRkNDMjQwKSAvLyAoUFdNQ19DSDIpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QV01DX0NIMSAgICAgICAoMHhGRkZDQzIyMCkgLy8gKFBXTUNfQ0gxKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUFdNQ19DSDAgICAgICAgKDB4RkZGQ0MyMDApIC8vIChQV01DX0NIMCkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BXTUMgICAgICAgICAgICgweEZGRkNDMDAwKSAvLyAoUFdNQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1VEUCAgICAgICAgICAgICgweEZGRkIwMDAwKSAvLyAoVURQKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfVEMwICAgICAgICAgICAgKDB4RkZGQTAwMDApIC8vIChUQzApIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9UQzEgICAgICAgICAgICAoMHhGRkZBMDA0MCkgLy8gKFRDMSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1RDMiAgICAgICAgICAgICgweEZGRkEwMDgwKSAvLyAoVEMyKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfVENCICAgICAgICAgICAgKDB4RkZGQTAwMDApIC8vIChUQ0IpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUIwICAgICAgICAoMHhGRkZEMDIwMCkgLy8gKENBTl9NQjApIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUIxICAgICAgICAoMHhGRkZEMDIyMCkgLy8gKENBTl9NQjEpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUIyICAgICAgICAoMHhGRkZEMDI0MCkgLy8gKENBTl9NQjIpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUIzICAgICAgICAoMHhGRkZEMDI2MCkgLy8gKENBTl9NQjMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUI0ICAgICAgICAoMHhGRkZEMDI4MCkgLy8gKENBTl9NQjQpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUI1ICAgICAgICAoMHhGRkZEMDJBMCkgLy8gKENBTl9NQjUpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUI2ICAgICAgICAoMHhGRkZEMDJDMCkgLy8gKENBTl9NQjYpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUI3ICAgICAgICAoMHhGRkZEMDJFMCkgLy8gKENBTl9NQjcpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DQU4gICAgICAgICAgICAoMHhGRkZEMDAwMCkgLy8gKENBTikgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0VNQUMgICAgICAgICAgICgweEZGRkRDMDAwKSAvLyAoRU1BQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19BREMgICAgICAgICgweEZGRkQ4MTAwKSAvLyAoUERDX0FEQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0FEQyAgICAgICAgICAgICgweEZGRkQ4MDAwKSAvLyAoQURDKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUERDX0FFUyAgICAgICAgKDB4RkZGQTQxMDApIC8vIChQRENfQUVTKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfQUVTICAgICAgICAgICAgKDB4RkZGQTQwMDApIC8vIChBRVMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfVERFUyAgICAgICAoMHhGRkZBODEwMCkgLy8gKFBEQ19UREVTKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfVERFUyAgICAgICAgICAgKDB4RkZGQTgwMDApIC8vIChUREVTKSBCYXNlIEFkZHJlc3MNCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICAgTUVNT1JZIE1BUFBJTkcgREVGSU5JVElPTlMgRk9SIEFUOTFTQU03WDEyOCAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotI2RlZmluZSBBVDkxQ19JU1JBTSAgICAgICAgICAoIDB4MDAyMDAwMDAgKSAgICAvKiBJbnRlcm5hbCBTUkFNIGJhc2UgYWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfSVNSQU1fU0laRSAgICAgKCAweDAwMDA4MDAwICkgICAgLyogSW50ZXJuYWwgU1JBTSBzaXplIGluIGJ5dGUgKDMyIEtieXRlKSAqLw0KLSNkZWZpbmUgQVQ5MUNfSUZMQVNIICAgICAgICAgKCAweDAwMTAwMDAwICkgICAgLyogSW50ZXJuYWwgUk9NIGJhc2UgYWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfSUZMQVNIX1NJWkUgICAgKCAweDAwMDIwMDAwICkgICAgLyogSW50ZXJuYWwgUk9NIHNpemUgaW4gYnl0ZSAoMTI4IEtieXRlKSAqLw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgICBNRU1PUlkgTUFQUElORyBERUZJTklUSU9OUyBGT1IgQVQ5MVNBTTdYMTI4DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisjZGVmaW5lIEFUOTFDX0lTUkFNCSAgICAgICAgICAgICAgKDB4MDAyMDAwMDApIC8vIEludGVybmFsIFNSQU0gYmFzZSBhZGRyZXNzDQorI2RlZmluZSBBVDkxQ19JU1JBTV9TSVpFCSAgICAgICAgICgweDAwMDA4MDAwKSAvLyBJbnRlcm5hbCBTUkFNIHNpemUgaW4gYnl0ZSAoMzIgS2J5dGUpDQorI2RlZmluZSBBVDkxQ19JRkxBU0gJICAgICAgICAgICAgICgweDAwMTAwMDAwKSAvLyBJbnRlcm5hbCBST00gYmFzZSBhZGRyZXNzDQorI2RlZmluZSBBVDkxQ19JRkxBU0hfU0laRQkgICAgICAgICgweDAwMDIwMDAwKSAvLyBJbnRlcm5hbCBST00gc2l6ZSBpbiBieXRlICgxMjggS2J5dGUpDQorDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvSUFSL0F0bWVsU0FNN1M2NC9BVDkxU0FNN1gyNTYuaCBiL3BvcnRhYmxlL0lBUi9BdG1lbFNBTTdTNjQvQVQ5MVNBTTdYMjU2LmgKaW5kZXggYWE5NTg0Yy4uNmI3M2Y4YSAxMDA2NDQKLS0tIGEvcG9ydGFibGUvSUFSL0F0bWVsU0FNN1M2NC9BVDkxU0FNN1gyNTYuaAorKysgYi9wb3J0YWJsZS9JQVIvQXRtZWxTQU03UzY0L0FUOTFTQU03WDI1Ni5oCkBAIC0xLDI3NDMgKzEsMjcxNSBAQAotLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiAgICAgICAgICBBVE1FTCBNaWNyb2NvbnRyb2xsZXIgU29mdHdhcmUgU3VwcG9ydCAgLSAgUk9VU1NFVCAgLSAqLw0KLS8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyogIERJU0NMQUlNRVI6ICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFUTUVMICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SICovDQotLyogIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgKi8NCi0vKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVCBBUkUgKi8NCi0vKiAgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVRNRUwgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgKi8NCi0vKiAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCAqLw0KLS8qICBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgKi8NCi0vKiAgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiAqLw0KLS8qICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyAqLw0KLS8qICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsICovDQotLyogIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuICovDQotLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiBGaWxlIE5hbWUgICAgICAgICAgIDogQVQ5MVNBTTdYMjU2LmggKi8NCi0vKiBPYmplY3QgICAgICAgICAgICAgIDogQVQ5MVNBTTdYMjU2IGRlZmluaXRpb25zICovDQotLyogR2VuZXJhdGVkICAgICAgICAgICA6IEFUOTEgU1cgQXBwbGljYXRpb24gR3JvdXAgIDA1LzIwLzIwMDUgKDE2OjIyOjI5KSAqLw0KLS8qICovDQotLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9BVDkxU0FNN1gyNTYucGwvMS4xMS9UdWUgTWF5IDEwIDEyOjE1OjMyIDIwMDUvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvU1lTX1NBTTdYLnBsLzEuMy9UdWUgRmViICAxIDE3OjAxOjQzIDIwMDUvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvTUNfU0FNN1gucGwvMS4yL0ZyaSBNYXkgMjAgMTQ6MTM6MDQgMjAwNS8vICovDQotLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9QTUNfU0FNN1gucGwvMS40L1R1ZSBGZWIgIDggMTM6NTg6MTAgMjAwNS8vICovDQotLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9SU1RDX1NBTTdYLnBsLzEuMS9UdWUgRmViICAxIDE2OjE2OjI2IDIwMDUvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvVURQX1NBTTdYLnBsLzEuMS9UdWUgTWF5IDEwIDExOjM1OjM1IDIwMDUvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvUFdNX1NBTTdYLnBsLzEuMS9UdWUgTWF5IDEwIDExOjUzOjA3IDIwMDUvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvQUlDXzYwNzVCLnBsLzEuMy9GcmkgTWF5IDIwIDE0OjAxOjMwIDIwMDUvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvUElPXzYwNTdBLnBsLzEuMi9UaHUgRmViICAzIDEwOjE4OjI4IDIwMDUvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvUlRUQ182MDgxQS5wbC8xLjIvVHVlIE5vdiAgOSAxNDo0Mzo1OCAyMDA0Ly8gKi8NCi0vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL1BJVENfNjA3OUEucGwvMS4yL1R1ZSBOb3YgIDkgMTQ6NDM6NTYgMjAwNC8vICovDQotLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9XRFRDXzYwODBBLnBsLzEuMy9UdWUgTm92ICA5IDE0OjQ0OjAwIDIwMDQvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvVlJFR182MDg1Qi5wbC8xLjEvVHVlIEZlYiAgMSAxNjowNTo0OCAyMDA1Ly8gKi8NCi0vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL1BEQ182MDc0Qy5wbC8xLjIvVGh1IEZlYiAgMyAwODo0ODo1NCAyMDA1Ly8gKi8NCi0vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL0RCR1VfNjA1OUQucGwvMS4xL01vbiBKYW4gMzEgMTM6MTU6MzIgMjAwNS8vICovDQotLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9TUElfNjA4OEQucGwvMS4zL0ZyaSBNYXkgMjAgMTQ6MDg6NTkgMjAwNS8vICovDQotLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9VU182MDg5Qy5wbC8xLjEvTW9uIEp1bCAxMiAxODoyMzoyNiAyMDA0Ly8gKi8NCi0vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL1NTQ182MDc4QS5wbC8xLjEvVHVlIEp1bCAxMyAwNzo0NTo0MCAyMDA0Ly8gKi8NCi0vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL1RXSV82MDYxQS5wbC8xLjEvVHVlIEp1bCAxMyAwNzozODowNiAyMDA0Ly8gKi8NCi0vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL1RDXzYwODJBLnBsLzEuNy9GcmkgTWFyIDExIDEyOjUyOjE3IDIwMDUvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvQ0FOXzYwMTlCLnBsLzEuMS9UdWUgTWFyICA4IDEyOjQyOjIyIDIwMDUvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvRU1BQ0JfNjExOUEucGwvMS41L1RodSBGZWIgIDMgMTU6NTI6MDQgMjAwNS8vICovDQotLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9BRENfNjA1MUMucGwvMS4xL0ZyaSBPY3QgMTcgMDk6MTI6MzggMjAwMy8vICovDQotLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9BRVNfNjE0OUEucGwvMS4xMC9Nb24gRmViICA3IDA5OjQ0OjI1IDIwMDUvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvREVTM182MTUwQS5wbC8xLjEvTW9uIEphbiAxNyAwODozNDozMSAyMDA1Ly8gKi8NCi0vKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKy8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8gICAgICAgICAgQVRNRUwgTWljcm9jb250cm9sbGVyIFNvZnR3YXJlIFN1cHBvcnQgIC0gIFJPVVNTRVQgIC0NCisvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vICBESVNDTEFJTUVSOiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVE1FTCAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUg0KKy8vICBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GDQorLy8gIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQgQVJFDQorLy8gIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFUTUVMIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsDQorLy8gIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QNCisvLyAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsDQorLy8gIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YNCisvLyAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcNCisvLyAgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLA0KKy8vICBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKy8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8gRmlsZSBOYW1lICAgICAgICAgICA6IEFUOTFTQU03WDI1Ni5oDQorLy8gT2JqZWN0ICAgICAgICAgICAgICA6IEFUOTFTQU03WDI1NiBkZWZpbml0aW9ucw0KKy8vIEdlbmVyYXRlZCAgICAgICAgICAgOiBBVDkxIFNXIEFwcGxpY2F0aW9uIEdyb3VwICAwNS8yMC8yMDA1ICgxNjoyMjoyOSkNCisvLyANCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL0FUOTFTQU03WDI1Ni5wbC8xLjExL1R1ZSBNYXkgMTAgMTI6MTU6MzIgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9TWVNfU0FNN1gucGwvMS4zL1R1ZSBGZWIgIDEgMTc6MDE6NDMgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9NQ19TQU03WC5wbC8xLjIvRnJpIE1heSAyMCAxNDoxMzowNCAyMDA1Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1BNQ19TQU03WC5wbC8xLjQvVHVlIEZlYiAgOCAxMzo1ODoxMCAyMDA1Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1JTVENfU0FNN1gucGwvMS4xL1R1ZSBGZWIgIDEgMTY6MTY6MjYgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9VRFBfU0FNN1gucGwvMS4xL1R1ZSBNYXkgMTAgMTE6MzU6MzUgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9QV01fU0FNN1gucGwvMS4xL1R1ZSBNYXkgMTAgMTE6NTM6MDcgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9BSUNfNjA3NUIucGwvMS4zL0ZyaSBNYXkgMjAgMTQ6MDE6MzAgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9QSU9fNjA1N0EucGwvMS4yL1RodSBGZWIgIDMgMTA6MTg6MjggMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9SVFRDXzYwODFBLnBsLzEuMi9UdWUgTm92ICA5IDE0OjQzOjU4IDIwMDQvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvUElUQ182MDc5QS5wbC8xLjIvVHVlIE5vdiAgOSAxNDo0Mzo1NiAyMDA0Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1dEVENfNjA4MEEucGwvMS4zL1R1ZSBOb3YgIDkgMTQ6NDQ6MDAgMjAwNC8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9WUkVHXzYwODVCLnBsLzEuMS9UdWUgRmViICAxIDE2OjA1OjQ4IDIwMDUvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvUERDXzYwNzRDLnBsLzEuMi9UaHUgRmViICAzIDA4OjQ4OjU0IDIwMDUvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvREJHVV82MDU5RC5wbC8xLjEvTW9uIEphbiAzMSAxMzoxNTozMiAyMDA1Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1NQSV82MDg4RC5wbC8xLjMvRnJpIE1heSAyMCAxNDowODo1OSAyMDA1Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1VTXzYwODlDLnBsLzEuMS9Nb24gSnVsIDEyIDE4OjIzOjI2IDIwMDQvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvU1NDXzYwNzhBLnBsLzEuMS9UdWUgSnVsIDEzIDA3OjQ1OjQwIDIwMDQvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvVFdJXzYwNjFBLnBsLzEuMS9UdWUgSnVsIDEzIDA3OjM4OjA2IDIwMDQvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvVENfNjA4MkEucGwvMS43L0ZyaSBNYXIgMTEgMTI6NTI6MTcgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9DQU5fNjAxOUIucGwvMS4xL1R1ZSBNYXIgIDggMTI6NDI6MjIgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9FTUFDQl82MTE5QS5wbC8xLjUvVGh1IEZlYiAgMyAxNTo1MjowNCAyMDA1Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL0FEQ182MDUxQy5wbC8xLjEvRnJpIE9jdCAxNyAwOToxMjozOCAyMDAzLy8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL0FFU182MTQ5QS5wbC8xLjEwL01vbiBGZWIgIDcgMDk6NDQ6MjUgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9ERVMzXzYxNTBBLnBsLzEuMS9Nb24gSmFuIDE3IDA4OjM0OjMxIDIwMDUvLw0KKy8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogDQogI2lmbmRlZiBBVDkxU0FNN1gyNTZfSA0KICNkZWZpbmUgQVQ5MVNBTTdYMjU2X0gNCiANCi10eXBlZGVmIHZvbGF0aWxlIHVuc2lnbmVkIGludCBBVDkxX1JFRzsgLyogSGFyZHdhcmUgcmVnaXN0ZXIgZGVmaW5pdGlvbiAqLw0KK3R5cGVkZWYgdm9sYXRpbGUgdW5zaWduZWQgaW50IEFUOTFfUkVHOy8vIEhhcmR3YXJlIHJlZ2lzdGVyIGRlZmluaXRpb24NCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFN5c3RlbSBQZXJpcGhlcmFscyAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotdHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1NZUw0KLXsNCi0gICAgQVQ5MV9SRUcgQUlDX1NNUlsgMzIgXTsgICAgIC8qIFNvdXJjZSBNb2RlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFJQ19TVlJbIDMyIF07ICAgICAvKiBTb3VyY2UgVmVjdG9yIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFJQ19JVlI7ICAgICAgICAgICAvKiBJUlEgVmVjdG9yIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFJQ19GVlI7ICAgICAgICAgICAvKiBGSVEgVmVjdG9yIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFJQ19JU1I7ICAgICAgICAgICAvKiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFJQ19JUFI7ICAgICAgICAgICAvKiBJbnRlcnJ1cHQgUGVuZGluZyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBSUNfSU1SOyAgICAgICAgICAgLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUlDX0NJU1I7ICAgICAgICAgIC8qIENvcmUgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDBbIDIgXTsgICAgLyogKi8NCi0gICAgQVQ5MV9SRUcgQUlDX0lFQ1I7ICAgICAgICAgIC8qIEludGVycnVwdCBFbmFibGUgQ29tbWFuZCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBSUNfSURDUjsgICAgICAgICAgLyogSW50ZXJydXB0IERpc2FibGUgQ29tbWFuZCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBSUNfSUNDUjsgICAgICAgICAgLyogSW50ZXJydXB0IENsZWFyIENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUlDX0lTQ1I7ICAgICAgICAgIC8qIEludGVycnVwdCBTZXQgQ29tbWFuZCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBSUNfRU9JQ1I7ICAgICAgICAgLyogRW5kIG9mIEludGVycnVwdCBDb21tYW5kIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFJQ19TUFU7ICAgICAgICAgICAvKiBTcHVyaW91cyBWZWN0b3IgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUlDX0RDUjsgICAgICAgICAgIC8qIERlYnVnIENvbnRyb2wgUmVnaXN0ZXIgKFByb3RlY3QpICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMVsgMSBdOyAgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBBSUNfRkZFUjsgICAgICAgICAgLyogRmFzdCBGb3JjaW5nIEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBSUNfRkZEUjsgICAgICAgICAgLyogRmFzdCBGb3JjaW5nIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUlDX0ZGU1I7ICAgICAgICAgIC8qIEZhc3QgRm9yY2luZyBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQyWyA0NSBdOyAgIC8qICovDQotICAgIEFUOTFfUkVHIERCR1VfQ1I7ICAgICAgICAgICAvKiBDb250cm9sIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfTVI7ICAgICAgICAgICAvKiBNb2RlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfSUVSOyAgICAgICAgICAvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfSURSOyAgICAgICAgICAvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX0lNUjsgICAgICAgICAgLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9DU1I7ICAgICAgICAgIC8qIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfUkhSOyAgICAgICAgICAvKiBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfVEhSOyAgICAgICAgICAvKiBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfQlJHUjsgICAgICAgICAvKiBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkM1sgNyBdOyAgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX0NJRFI7ICAgICAgICAgLyogQ2hpcCBJRCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX0VYSUQ7ICAgICAgICAgLyogQ2hpcCBJRCBFeHRlbnNpb24gUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9GTlRSOyAgICAgICAgIC8qIEZvcmNlIE5UUlNUIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkNFsgNDUgXTsgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX1JQUjsgICAgICAgICAgLyogUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfUkNSOyAgICAgICAgICAvKiBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9UUFI7ICAgICAgICAgIC8qIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9UQ1I7ICAgICAgICAgIC8qIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9STlBSOyAgICAgICAgIC8qIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfUk5DUjsgICAgICAgICAvKiBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX1ROUFI7ICAgICAgICAgLyogVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfVE5DUjsgICAgICAgICAvKiBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9QVENSOyAgICAgICAgIC8qIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfUFRTUjsgICAgICAgICAvKiBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkNVsgNTQgXTsgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBQSU9BX1BFUjsgICAgICAgICAgLyogUElPIEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9BX1BEUjsgICAgICAgICAgLyogUElPIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQV9QU1I7ICAgICAgICAgIC8qIFBJTyBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQ2WyAxIF07ICAgIC8qICovDQotICAgIEFUOTFfUkVHIFBJT0FfT0VSOyAgICAgICAgICAvKiBPdXRwdXQgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0FfT0RSOyAgICAgICAgICAvKiBPdXRwdXQgRGlzYWJsZSBSZWdpc3RlcnIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQV9PU1I7ICAgICAgICAgIC8qIE91dHB1dCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQ3WyAxIF07ICAgIC8qICovDQotICAgIEFUOTFfUkVHIFBJT0FfSUZFUjsgICAgICAgICAvKiBJbnB1dCBGaWx0ZXIgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0FfSUZEUjsgICAgICAgICAvKiBJbnB1dCBGaWx0ZXIgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9BX0lGU1I7ICAgICAgICAgLyogSW5wdXQgRmlsdGVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDhbIDEgXTsgICAgLyogKi8NCi0gICAgQVQ5MV9SRUcgUElPQV9TT0RSOyAgICAgICAgIC8qIFNldCBPdXRwdXQgRGF0YSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9BX0NPRFI7ICAgICAgICAgLyogQ2xlYXIgT3V0cHV0IERhdGEgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQV9PRFNSOyAgICAgICAgIC8qIE91dHB1dCBEYXRhIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9BX1BEU1I7ICAgICAgICAgLyogUGluIERhdGEgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0FfSUVSOyAgICAgICAgICAvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0FfSURSOyAgICAgICAgICAvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9BX0lNUjsgICAgICAgICAgLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQV9JU1I7ICAgICAgICAgIC8qIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQV9NREVSOyAgICAgICAgIC8qIE11bHRpLWRyaXZlciBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQV9NRERSOyAgICAgICAgIC8qIE11bHRpLWRyaXZlciBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0FfTURTUjsgICAgICAgICAvKiBNdWx0aS1kcml2ZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkOVsgMSBdOyAgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBQSU9BX1BQVURSOyAgICAgICAgLyogUHVsbC11cCBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0FfUFBVRVI7ICAgICAgICAvKiBQdWxsLXVwIEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9BX1BQVVNSOyAgICAgICAgLyogUHVsbC11cCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQxMFsgMSBdOyAgIC8qICovDQotICAgIEFUOTFfUkVHIFBJT0FfQVNSOyAgICAgICAgICAvKiBTZWxlY3QgQSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9BX0JTUjsgICAgICAgICAgLyogU2VsZWN0IEIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQV9BQlNSOyAgICAgICAgIC8qIEFCIFNlbGVjdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQxMVsgOSBdOyAgIC8qICovDQotICAgIEFUOTFfUkVHIFBJT0FfT1dFUjsgICAgICAgICAvKiBPdXRwdXQgV3JpdGUgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0FfT1dEUjsgICAgICAgICAvKiBPdXRwdXQgV3JpdGUgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9BX09XU1I7ICAgICAgICAgLyogT3V0cHV0IFdyaXRlIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDEyWyA4NSBdOyAgLyogKi8NCi0gICAgQVQ5MV9SRUcgUElPQl9QRVI7ICAgICAgICAgIC8qIFBJTyBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQl9QRFI7ICAgICAgICAgIC8qIFBJTyBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0JfUFNSOyAgICAgICAgICAvKiBQSU8gU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMTNbIDEgXTsgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBQSU9CX09FUjsgICAgICAgICAgLyogT3V0cHV0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9CX09EUjsgICAgICAgICAgLyogT3V0cHV0IERpc2FibGUgUmVnaXN0ZXJyICovDQotICAgIEFUOTFfUkVHIFBJT0JfT1NSOyAgICAgICAgICAvKiBPdXRwdXQgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMTRbIDEgXTsgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBQSU9CX0lGRVI7ICAgICAgICAgLyogSW5wdXQgRmlsdGVyIEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9CX0lGRFI7ICAgICAgICAgLyogSW5wdXQgRmlsdGVyIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQl9JRlNSOyAgICAgICAgIC8qIElucHV0IEZpbHRlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQxNVsgMSBdOyAgIC8qICovDQotICAgIEFUOTFfUkVHIFBJT0JfU09EUjsgICAgICAgICAvKiBTZXQgT3V0cHV0IERhdGEgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQl9DT0RSOyAgICAgICAgIC8qIENsZWFyIE91dHB1dCBEYXRhIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0JfT0RTUjsgICAgICAgICAvKiBPdXRwdXQgRGF0YSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQl9QRFNSOyAgICAgICAgIC8qIFBpbiBEYXRhIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9CX0lFUjsgICAgICAgICAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9CX0lEUjsgICAgICAgICAgLyogSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQl9JTVI7ICAgICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0JfSVNSOyAgICAgICAgICAvKiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0JfTURFUjsgICAgICAgICAvKiBNdWx0aS1kcml2ZXIgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0JfTUREUjsgICAgICAgICAvKiBNdWx0aS1kcml2ZXIgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9CX01EU1I7ICAgICAgICAgLyogTXVsdGktZHJpdmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDE2WyAxIF07ICAgLyogKi8NCi0gICAgQVQ5MV9SRUcgUElPQl9QUFVEUjsgICAgICAgIC8qIFB1bGwtdXAgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9CX1BQVUVSOyAgICAgICAgLyogUHVsbC11cCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQl9QUFVTUjsgICAgICAgIC8qIFB1bGwtdXAgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMTdbIDEgXTsgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBQSU9CX0FTUjsgICAgICAgICAgLyogU2VsZWN0IEEgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQl9CU1I7ICAgICAgICAgIC8qIFNlbGVjdCBCIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT0JfQUJTUjsgICAgICAgICAvKiBBQiBTZWxlY3QgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMThbIDkgXTsgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBQSU9CX09XRVI7ICAgICAgICAgLyogT3V0cHV0IFdyaXRlIEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9CX09XRFI7ICAgICAgICAgLyogT3V0cHV0IFdyaXRlIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPQl9PV1NSOyAgICAgICAgIC8qIE91dHB1dCBXcml0ZSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQxOVsgMzQxIF07IC8qICovDQotICAgIEFUOTFfUkVHIFBNQ19TQ0VSOyAgICAgICAgICAvKiBTeXN0ZW0gQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBNQ19TQ0RSOyAgICAgICAgICAvKiBTeXN0ZW0gQ2xvY2sgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQTUNfU0NTUjsgICAgICAgICAgLyogU3lzdGVtIENsb2NrIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDIwWyAxIF07ICAgLyogKi8NCi0gICAgQVQ5MV9SRUcgUE1DX1BDRVI7ICAgICAgICAgIC8qIFBlcmlwaGVyYWwgQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBNQ19QQ0RSOyAgICAgICAgICAvKiBQZXJpcGhlcmFsIENsb2NrIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUE1DX1BDU1I7ICAgICAgICAgIC8qIFBlcmlwaGVyYWwgQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMjFbIDEgXTsgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBQTUNfTU9SOyAgICAgICAgICAgLyogTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBNQ19NQ0ZSOyAgICAgICAgICAvKiBNYWluIENsb2NrICBGcmVxdWVuY3kgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQyMlsgMSBdOyAgIC8qICovDQotICAgIEFUOTFfUkVHIFBNQ19QTExSOyAgICAgICAgICAvKiBQTEwgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUE1DX01DS1I7ICAgICAgICAgIC8qIE1hc3RlciBDbG9jayBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDIzWyAzIF07ICAgLyogKi8NCi0gICAgQVQ5MV9SRUcgUE1DX1BDS1JbIDQgXTsgICAgIC8qIFByb2dyYW1tYWJsZSBDbG9jayBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDI0WyA0IF07ICAgLyogKi8NCi0gICAgQVQ5MV9SRUcgUE1DX0lFUjsgICAgICAgICAgIC8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUE1DX0lEUjsgICAgICAgICAgIC8qIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBNQ19TUjsgICAgICAgICAgICAvKiBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUE1DX0lNUjsgICAgICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMjVbIDM2IF07ICAvKiAqLw0KLSAgICBBVDkxX1JFRyBSU1RDX1JDUjsgICAgICAgICAgLyogUmVzZXQgQ29udHJvbCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSU1RDX1JTUjsgICAgICAgICAgLyogUmVzZXQgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJTVENfUk1SOyAgICAgICAgICAvKiBSZXNldCBNb2RlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMjZbIDUgXTsgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBSVFRDX1JUTVI7ICAgICAgICAgLyogUmVhbC10aW1lIE1vZGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUlRUQ19SVEFSOyAgICAgICAgIC8qIFJlYWwtdGltZSBBbGFybSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSVFRDX1JUVlI7ICAgICAgICAgLyogUmVhbC10aW1lIFZhbHVlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJUVENfUlRTUjsgICAgICAgICAvKiBSZWFsLXRpbWUgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJVENfUElNUjsgICAgICAgICAvKiBQZXJpb2QgSW50ZXJ2YWwgTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSVRDX1BJU1I7ICAgICAgICAgLyogUGVyaW9kIEludGVydmFsIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSVRDX1BJVlI7ICAgICAgICAgLyogUGVyaW9kIEludGVydmFsIFZhbHVlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJVENfUElJUjsgICAgICAgICAvKiBQZXJpb2QgSW50ZXJ2YWwgSW1hZ2UgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgV0RUQ19XRENSOyAgICAgICAgIC8qIFdhdGNoZG9nIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgV0RUQ19XRE1SOyAgICAgICAgIC8qIFdhdGNoZG9nIE1vZGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgV0RUQ19XRFNSOyAgICAgICAgIC8qIFdhdGNoZG9nIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDI3WyA1IF07ICAgLyogKi8NCi0gICAgQVQ5MV9SRUcgVlJFR19NUjsgICAgICAgICAgIC8qIFZvbHRhZ2UgUmVndWxhdG9yIE1vZGUgUmVnaXN0ZXIgKi8NCi19IEFUOTFTX1NZUywgKiBBVDkxUFNfU1lTOw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgU3lzdGVtIFBlcmlwaGVyYWxzDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfU1lTIHsNCisJQVQ5MV9SRUcJIEFJQ19TTVJbMzJdOyAJLy8gU291cmNlIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19TVlJbMzJdOyAJLy8gU291cmNlIFZlY3RvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0lWUjsgCS8vIElSUSBWZWN0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19GVlI7IAkvLyBGSVEgVmVjdG9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfSVNSOyAJLy8gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0lQUjsgCS8vIEludGVycnVwdCBQZW5kaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19DSVNSOyAJLy8gQ29yZSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbMl07IAkvLyANCisJQVQ5MV9SRUcJIEFJQ19JRUNSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBDb21tYW5kIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfSURDUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIENvbW1hbmQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19JQ0NSOyAJLy8gSW50ZXJydXB0IENsZWFyIENvbW1hbmQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19JU0NSOyAJLy8gSW50ZXJydXB0IFNldCBDb21tYW5kIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfRU9JQ1I7IAkvLyBFbmQgb2YgSW50ZXJydXB0IENvbW1hbmQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19TUFU7IAkvLyBTcHVyaW91cyBWZWN0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19EQ1I7IAkvLyBEZWJ1ZyBDb250cm9sIFJlZ2lzdGVyIChQcm90ZWN0KQ0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBBSUNfRkZFUjsgCS8vIEZhc3QgRm9yY2luZyBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19GRkRSOyAJLy8gRmFzdCBGb3JjaW5nIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19GRlNSOyAJLy8gRmFzdCBGb3JjaW5nIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQyWzQ1XTsgCS8vIA0KKwlBVDkxX1JFRwkgREJHVV9DUjsgCS8vIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfTVI7IAkvLyBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX0lFUjsgCS8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfQ1NSOyAJLy8gQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfUkhSOyAJLy8gUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9USFI7IAkvLyBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX0JSR1I7IAkvLyBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDNbN107IAkvLyANCisJQVQ5MV9SRUcJIERCR1VfQ0lEUjsgCS8vIENoaXAgSUQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfRVhJRDsgCS8vIENoaXAgSUQgRXh0ZW5zaW9uIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX0ZOVFI7IAkvLyBGb3JjZSBOVFJTVCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQ0WzQ1XTsgCS8vIA0KKwlBVDkxX1JFRwkgREJHVV9SUFI7IAkvLyBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfUkNSOyAJLy8gUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1RQUjsgCS8vIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfVENSOyAJLy8gVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9STlBSOyAJLy8gUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfUk5DUjsgCS8vIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1ROUFI7IAkvLyBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfVE5DUjsgCS8vIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9QVENSOyAJLy8gUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfUFRTUjsgCS8vIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkNVs1NF07IAkvLyANCisJQVQ5MV9SRUcJIFBJT0FfUEVSOyAJLy8gUElPIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9QRFI7IAkvLyBQSU8gRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9QU1I7IAkvLyBQSU8gU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDZbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT0FfT0VSOyAJLy8gT3V0cHV0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9PRFI7IAkvLyBPdXRwdXQgRGlzYWJsZSBSZWdpc3RlcnINCisJQVQ5MV9SRUcJIFBJT0FfT1NSOyAJLy8gT3V0cHV0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQ3WzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9BX0lGRVI7IAkvLyBJbnB1dCBGaWx0ZXIgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX0lGRFI7IAkvLyBJbnB1dCBGaWx0ZXIgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9JRlNSOyAJLy8gSW5wdXQgRmlsdGVyIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQ4WzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9BX1NPRFI7IAkvLyBTZXQgT3V0cHV0IERhdGEgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0FfQ09EUjsgCS8vIENsZWFyIE91dHB1dCBEYXRhIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX09EU1I7IAkvLyBPdXRwdXQgRGF0YSBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0FfUERTUjsgCS8vIFBpbiBEYXRhIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX0lEUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX0lTUjsgCS8vIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0FfTURFUjsgCS8vIE11bHRpLWRyaXZlciBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0FfTUREUjsgCS8vIE11bHRpLWRyaXZlciBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX01EU1I7IAkvLyBNdWx0aS1kcml2ZXIgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDlbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT0FfUFBVRFI7IAkvLyBQdWxsLXVwIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0FfUFBVRVI7IAkvLyBQdWxsLXVwIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9QUFVTUjsgCS8vIFB1bGwtdXAgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDEwWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9BX0FTUjsgCS8vIFNlbGVjdCBBIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX0JTUjsgCS8vIFNlbGVjdCBCIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX0FCU1I7IAkvLyBBQiBTZWxlY3QgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDExWzldOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9BX09XRVI7IAkvLyBPdXRwdXQgV3JpdGUgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9BX09XRFI7IAkvLyBPdXRwdXQgV3JpdGUgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQV9PV1NSOyAJLy8gT3V0cHV0IFdyaXRlIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxMls4NV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT0JfUEVSOyAJLy8gUElPIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9QRFI7IAkvLyBQSU8gRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9QU1I7IAkvLyBQSU8gU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDEzWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9CX09FUjsgCS8vIE91dHB1dCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfT0RSOyAJLy8gT3V0cHV0IERpc2FibGUgUmVnaXN0ZXJyDQorCUFUOTFfUkVHCSBQSU9CX09TUjsgCS8vIE91dHB1dCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMTRbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT0JfSUZFUjsgCS8vIElucHV0IEZpbHRlciBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfSUZEUjsgCS8vIElucHV0IEZpbHRlciBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX0lGU1I7IAkvLyBJbnB1dCBGaWx0ZXIgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDE1WzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9CX1NPRFI7IAkvLyBTZXQgT3V0cHV0IERhdGEgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfQ09EUjsgCS8vIENsZWFyIE91dHB1dCBEYXRhIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX09EU1I7IAkvLyBPdXRwdXQgRGF0YSBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfUERTUjsgCS8vIFBpbiBEYXRhIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX0lEUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX0lTUjsgCS8vIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfTURFUjsgCS8vIE11bHRpLWRyaXZlciBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfTUREUjsgCS8vIE11bHRpLWRyaXZlciBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX01EU1I7IAkvLyBNdWx0aS1kcml2ZXIgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDE2WzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQSU9CX1BQVURSOyAJLy8gUHVsbC11cCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9CX1BQVUVSOyAJLy8gUHVsbC11cCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfUFBVU1I7IAkvLyBQdWxsLXVwIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxN1sxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUElPQl9BU1I7IAkvLyBTZWxlY3QgQSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9CU1I7IAkvLyBTZWxlY3QgQiBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9BQlNSOyAJLy8gQUIgU2VsZWN0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxOFs5XTsgCS8vIA0KKwlBVDkxX1JFRwkgUElPQl9PV0VSOyAJLy8gT3V0cHV0IFdyaXRlIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPQl9PV0RSOyAJLy8gT3V0cHV0IFdyaXRlIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT0JfT1dTUjsgCS8vIE91dHB1dCBXcml0ZSBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMTlbMzQxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUE1DX1NDRVI7IAkvLyBTeXN0ZW0gQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfU0NEUjsgCS8vIFN5c3RlbSBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfU0NTUjsgCS8vIFN5c3RlbSBDbG9jayBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMjBbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBNQ19QQ0VSOyAJLy8gUGVyaXBoZXJhbCBDbG9jayBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19QQ0RSOyAJLy8gUGVyaXBoZXJhbCBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfUENTUjsgCS8vIFBlcmlwaGVyYWwgQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDIxWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBQTUNfTU9SOyAJLy8gTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfTUNGUjsgCS8vIE1haW4gQ2xvY2sgIEZyZXF1ZW5jeSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQyMlsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUE1DX1BMTFI7IAkvLyBQTEwgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19NQ0tSOyAJLy8gTWFzdGVyIENsb2NrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDIzWzNdOyAJLy8gDQorCUFUOTFfUkVHCSBQTUNfUENLUls0XTsgCS8vIFByb2dyYW1tYWJsZSBDbG9jayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQyNFs0XTsgCS8vIA0KKwlBVDkxX1JFRwkgUE1DX0lFUjsgCS8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUE1DX1NSOyAJLy8gU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMjVbMzZdOyAJLy8gDQorCUFUOTFfUkVHCSBSU1RDX1JDUjsgCS8vIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJTVENfUlNSOyAJLy8gUmVzZXQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSU1RDX1JNUjsgCS8vIFJlc2V0IE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMjZbNV07IAkvLyANCisJQVQ5MV9SRUcJIFJUVENfUlRNUjsgCS8vIFJlYWwtdGltZSBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSVFRDX1JUQVI7IAkvLyBSZWFsLXRpbWUgQWxhcm0gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJUVENfUlRWUjsgCS8vIFJlYWwtdGltZSBWYWx1ZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUlRUQ19SVFNSOyAJLy8gUmVhbC10aW1lIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElUQ19QSU1SOyAJLy8gUGVyaW9kIEludGVydmFsIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJVENfUElTUjsgCS8vIFBlcmlvZCBJbnRlcnZhbCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJVENfUElWUjsgCS8vIFBlcmlvZCBJbnRlcnZhbCBWYWx1ZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElUQ19QSUlSOyAJLy8gUGVyaW9kIEludGVydmFsIEltYWdlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBXRFRDX1dEQ1I7IAkvLyBXYXRjaGRvZyBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBXRFRDX1dETVI7IAkvLyBXYXRjaGRvZyBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBXRFRDX1dEU1I7IAkvLyBXYXRjaGRvZyBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMjdbNV07IAkvLyANCisJQVQ5MV9SRUcJIFZSRUdfTVI7IAkvLyBWb2x0YWdlIFJlZ3VsYXRvciBNb2RlIFJlZ2lzdGVyDQorfSBBVDkxU19TWVMsICpBVDkxUFNfU1lTOw0KIA0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLXR5cGVkZWYgc3RydWN0IF9BVDkxU19BSUMNCi17DQotICAgIEFUOTFfUkVHIEFJQ19TTVJbIDMyIF07ICAvKiBTb3VyY2UgTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBSUNfU1ZSWyAzMiBdOyAgLyogU291cmNlIFZlY3RvciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBSUNfSVZSOyAgICAgICAgLyogSVJRIFZlY3RvciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBSUNfRlZSOyAgICAgICAgLyogRklRIFZlY3RvciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBSUNfSVNSOyAgICAgICAgLyogSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBSUNfSVBSOyAgICAgICAgLyogSW50ZXJydXB0IFBlbmRpbmcgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUlDX0lNUjsgICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFJQ19DSVNSOyAgICAgICAvKiBDb3JlIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQwWyAyIF07IC8qICovDQotICAgIEFUOTFfUkVHIEFJQ19JRUNSOyAgICAgICAvKiBJbnRlcnJ1cHQgRW5hYmxlIENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUlDX0lEQ1I7ICAgICAgIC8qIEludGVycnVwdCBEaXNhYmxlIENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUlDX0lDQ1I7ICAgICAgIC8qIEludGVycnVwdCBDbGVhciBDb21tYW5kIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFJQ19JU0NSOyAgICAgICAvKiBJbnRlcnJ1cHQgU2V0IENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUlDX0VPSUNSOyAgICAgIC8qIEVuZCBvZiBJbnRlcnJ1cHQgQ29tbWFuZCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBSUNfU1BVOyAgICAgICAgLyogU3B1cmlvdXMgVmVjdG9yIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFJQ19EQ1I7ICAgICAgICAvKiBEZWJ1ZyBDb250cm9sIFJlZ2lzdGVyIChQcm90ZWN0KSAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDFbIDEgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgQUlDX0ZGRVI7ICAgICAgIC8qIEZhc3QgRm9yY2luZyBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUlDX0ZGRFI7ICAgICAgIC8qIEZhc3QgRm9yY2luZyBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFJQ19GRlNSOyAgICAgICAvKiBGYXN0IEZvcmNpbmcgU3RhdHVzIFJlZ2lzdGVyICovDQotfSBBVDkxU19BSUMsICogQVQ5MVBTX0FJQzsNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfQUlDIHsNCisJQVQ5MV9SRUcJIEFJQ19TTVJbMzJdOyAJLy8gU291cmNlIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19TVlJbMzJdOyAJLy8gU291cmNlIFZlY3RvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0lWUjsgCS8vIElSUSBWZWN0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19GVlI7IAkvLyBGSVEgVmVjdG9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfSVNSOyAJLy8gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUlDX0lQUjsgCS8vIEludGVycnVwdCBQZW5kaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19DSVNSOyAJLy8gQ29yZSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbMl07IAkvLyANCisJQVQ5MV9SRUcJIEFJQ19JRUNSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBDb21tYW5kIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfSURDUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIENvbW1hbmQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19JQ0NSOyAJLy8gSW50ZXJydXB0IENsZWFyIENvbW1hbmQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19JU0NSOyAJLy8gSW50ZXJydXB0IFNldCBDb21tYW5kIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBSUNfRU9JQ1I7IAkvLyBFbmQgb2YgSW50ZXJydXB0IENvbW1hbmQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19TUFU7IAkvLyBTcHVyaW91cyBWZWN0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19EQ1I7IAkvLyBEZWJ1ZyBDb250cm9sIFJlZ2lzdGVyIChQcm90ZWN0KQ0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBBSUNfRkZFUjsgCS8vIEZhc3QgRm9yY2luZyBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19GRkRSOyAJLy8gRmFzdCBGb3JjaW5nIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFJQ19GRlNSOyAJLy8gRmFzdCBGb3JjaW5nIFN0YXR1cyBSZWdpc3Rlcg0KK30gQVQ5MVNfQUlDLCAqQVQ5MVBTX0FJQzsNCiANCi0vKiAtLS0tLS0tLSBBSUNfU01SIDogKEFJQyBPZmZzZXQ6IDB4MCkgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX1BSSU9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDcgPDwgMCApIC8qIChBSUMpIFByaW9yaXR5IExldmVsICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUlDX1BSSU9SX0xPV0VTVCAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCApICAgICAgLyogKEFJQykgTG93ZXN0IHByaW9yaXR5IGxldmVsICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUlDX1BSSU9SX0hJR0hFU1QgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NyApICAgICAgLyogKEFJQykgSGlnaGVzdCBwcmlvcml0eSBsZXZlbCAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX1NSQ1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgNSApIC8qIChBSUMpIEludGVycnVwdCBTb3VyY2UgVHlwZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FJQ19TUkNUWVBFX0lOVF9ISUdIX0xFVkVMICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgNSApIC8qIChBSUMpIEludGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBIaWdoLWxldmVsIFNlbnNpdGl2ZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FJQ19TUkNUWVBFX0VYVF9MT1dfTEVWRUwgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgNSApIC8qIChBSUMpIEV4dGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBMb3ctbGV2ZWwgU2Vuc2l0aXZlICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUlDX1NSQ1RZUEVfSU5UX1BPU0lUSVZFX0VER0UgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA1ICkgLyogKEFJQykgSW50ZXJuYWwgU291cmNlcyBDb2RlIExhYmVsIFBvc2l0aXZlIEVkZ2UgdHJpZ2dlcmVkICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUlDX1NSQ1RZUEVfRVhUX05FR0FUSVZFX0VER0UgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA1ICkgLyogKEFJQykgRXh0ZXJuYWwgU291cmNlcyBDb2RlIExhYmVsIE5lZ2F0aXZlIEVkZ2UgdHJpZ2dlcmVkICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUlDX1NSQ1RZUEVfSElHSF9MRVZFTCAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCA1ICkgLyogKEFJQykgSW50ZXJuYWwgT3IgRXh0ZXJuYWwgU291cmNlcyBDb2RlIExhYmVsIEhpZ2gtbGV2ZWwgU2Vuc2l0aXZlICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUlDX1NSQ1RZUEVfUE9TSVRJVkVfRURHRSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCA1ICkgLyogKEFJQykgSW50ZXJuYWwgT3IgRXh0ZXJuYWwgU291cmNlcyBDb2RlIExhYmVsIFBvc2l0aXZlIEVkZ2UgdHJpZ2dlcmVkICovDQotLyogLS0tLS0tLS0gQUlDX0NJU1IgOiAoQUlDIE9mZnNldDogMHgxMTQpIEFJQyBDb3JlIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19ORklRICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAvKiAoQUlDKSBORklRIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX05JUlEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApIC8qIChBSUMpIE5JUlEgU3RhdHVzICovDQotLyogLS0tLS0tLS0gQUlDX0RDUiA6IChBSUMgT2Zmc2V0OiAweDEzOCkgQUlDIERlYnVnIENvbnRyb2wgUmVnaXN0ZXIgKFByb3RlY3QpIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19BSUNfRENSX1BST1QgICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgLyogKEFJQykgUHJvdGVjdGlvbiBNb2RlICovDQotI2RlZmluZSBBVDkxQ19BSUNfRENSX0dNU0sgICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgLyogKEFJQykgR2VuZXJhbCBNYXNrICovDQorLy8gLS0tLS0tLS0gQUlDX1NNUiA6IChBSUMgT2Zmc2V0OiAweDApIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BSUNfUFJJT1IgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAgMCkgLy8gKEFJQykgUHJpb3JpdHkgTGV2ZWwNCisjZGVmaW5lIAlBVDkxQ19BSUNfUFJJT1JfTE9XRVNUICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCkgLy8gKEFJQykgTG93ZXN0IHByaW9yaXR5IGxldmVsDQorI2RlZmluZSAJQVQ5MUNfQUlDX1BSSU9SX0hJR0hFU1QgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDcpIC8vIChBSUMpIEhpZ2hlc3QgcHJpb3JpdHkgbGV2ZWwNCisjZGVmaW5lIEFUOTFDX0FJQ19TUkNUWVBFICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA1KSAvLyAoQUlDKSBJbnRlcnJ1cHQgU291cmNlIFR5cGUNCisjZGVmaW5lIAlBVDkxQ19BSUNfU1JDVFlQRV9JTlRfSElHSF9MRVZFTCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA1KSAvLyAoQUlDKSBJbnRlcm5hbCBTb3VyY2VzIENvZGUgTGFiZWwgSGlnaC1sZXZlbCBTZW5zaXRpdmUNCisjZGVmaW5lIAlBVDkxQ19BSUNfU1JDVFlQRV9FWFRfTE9XX0xFVkVMICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA1KSAvLyAoQUlDKSBFeHRlcm5hbCBTb3VyY2VzIENvZGUgTGFiZWwgTG93LWxldmVsIFNlbnNpdGl2ZQ0KKyNkZWZpbmUgCUFUOTFDX0FJQ19TUkNUWVBFX0lOVF9QT1NJVElWRV9FREdFICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChBSUMpIEludGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBQb3NpdGl2ZSBFZGdlIHRyaWdnZXJlZA0KKyNkZWZpbmUgCUFUOTFDX0FJQ19TUkNUWVBFX0VYVF9ORUdBVElWRV9FREdFICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChBSUMpIEV4dGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBOZWdhdGl2ZSBFZGdlIHRyaWdnZXJlZA0KKyNkZWZpbmUgCUFUOTFDX0FJQ19TUkNUWVBFX0hJR0hfTEVWRUwgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDUpIC8vIChBSUMpIEludGVybmFsIE9yIEV4dGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBIaWdoLWxldmVsIFNlbnNpdGl2ZQ0KKyNkZWZpbmUgCUFUOTFDX0FJQ19TUkNUWVBFX1BPU0lUSVZFX0VER0UgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDUpIC8vIChBSUMpIEludGVybmFsIE9yIEV4dGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBQb3NpdGl2ZSBFZGdlIHRyaWdnZXJlZA0KKy8vIC0tLS0tLS0tIEFJQ19DSVNSIDogKEFJQyBPZmZzZXQ6IDB4MTE0KSBBSUMgQ29yZSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQUlDX05GSVEgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChBSUMpIE5GSVEgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19BSUNfTklSUSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKEFJQykgTklSUSBTdGF0dXMNCisvLyAtLS0tLS0tLSBBSUNfRENSIDogKEFJQyBPZmZzZXQ6IDB4MTM4KSBBSUMgRGVidWcgQ29udHJvbCBSZWdpc3RlciAoUHJvdGVjdCkgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BSUNfRENSX1BST1QgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKEFJQykgUHJvdGVjdGlvbiBNb2RlDQorI2RlZmluZSBBVDkxQ19BSUNfRENSX0dNU0sgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKEFJQykgR2VuZXJhbCBNYXNrDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQZXJpcGhlcmFsIERNQSBDb250cm9sbGVyICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfUERDDQotew0KLSAgICBBVDkxX1JFRyBQRENfUlBSOyAgLyogUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBEQ19SQ1I7ICAvKiBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUERDX1RQUjsgIC8qIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUERDX1RDUjsgIC8qIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUERDX1JOUFI7IC8qIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBEQ19STkNSOyAvKiBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQRENfVE5QUjsgLyogVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBEQ19UTkNSOyAvKiBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUERDX1BUQ1I7IC8qIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBEQ19QVFNSOyAvKiBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotfSBBVDkxU19QREMsICogQVQ5MVBTX1BEQzsNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFBlcmlwaGVyYWwgRE1BIENvbnRyb2xsZXINCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19QREMgew0KKwlBVDkxX1JFRwkgUERDX1JQUjsgCS8vIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUERDX1JDUjsgCS8vIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUERDX1RQUjsgCS8vIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBEQ19UQ1I7IAkvLyBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQRENfUk5QUjsgCS8vIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQRENfUk5DUjsgCS8vIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQRENfVE5QUjsgCS8vIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUERDX1ROQ1I7IAkvLyBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBEQ19QVENSOyAJLy8gUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBEQ19QVFNSOyAJLy8gUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KK30gQVQ5MVNfUERDLCAqQVQ5MVBTX1BEQzsNCiANCi0vKiAtLS0tLS0tLSBQRENfUFRDUiA6IChQREMgT2Zmc2V0OiAweDIwKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfUERDX1JYVEVOICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAvKiAoUERDKSBSZWNlaXZlciBUcmFuc2ZlciBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1BEQ19SWFRESVMgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgLyogKFBEQykgUmVjZWl2ZXIgVHJhbnNmZXIgRGlzYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfUERDX1RYVEVOICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDggKSAvKiAoUERDKSBUcmFuc21pdHRlciBUcmFuc2ZlciBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1BEQ19UWFRESVMgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA5ICkgLyogKFBEQykgVHJhbnNtaXR0ZXIgVHJhbnNmZXIgRGlzYWJsZSAqLw0KLS8qIC0tLS0tLS0tIFBEQ19QVFNSIDogKFBEQyBPZmZzZXQ6IDB4MjQpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCisvLyAtLS0tLS0tLSBQRENfUFRDUiA6IChQREMgT2Zmc2V0OiAweDIwKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BEQ19SWFRFTiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoUERDKSBSZWNlaXZlciBUcmFuc2ZlciBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1BEQ19SWFRESVMgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoUERDKSBSZWNlaXZlciBUcmFuc2ZlciBEaXNhYmxlDQorI2RlZmluZSBBVDkxQ19QRENfVFhURU4gICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFBEQykgVHJhbnNtaXR0ZXIgVHJhbnNmZXIgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19QRENfVFhURElTICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLy8gKFBEQykgVHJhbnNtaXR0ZXIgVHJhbnNmZXIgRGlzYWJsZQ0KKy8vIC0tLS0tLS0tIFBEQ19QVFNSIDogKFBEQyBPZmZzZXQ6IDB4MjQpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBEZWJ1ZyBVbml0ICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfREJHVQ0KLXsNCi0gICAgQVQ5MV9SRUcgREJHVV9DUjsgICAgICAgICAvKiBDb250cm9sIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfTVI7ICAgICAgICAgLyogTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX0lFUjsgICAgICAgIC8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9JRFI7ICAgICAgICAvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX0lNUjsgICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfQ1NSOyAgICAgICAgLyogQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9SSFI7ICAgICAgICAvKiBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfVEhSOyAgICAgICAgLyogVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX0JSR1I7ICAgICAgIC8qIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQwWyA3IF07ICAvKiAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX0NJRFI7ICAgICAgIC8qIENoaXAgSUQgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9FWElEOyAgICAgICAvKiBDaGlwIElEIEV4dGVuc2lvbiBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX0ZOVFI7ICAgICAgIC8qIEZvcmNlIE5UUlNUIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMVsgNDUgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9SUFI7ICAgICAgICAvKiBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9SQ1I7ICAgICAgICAvKiBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9UUFI7ICAgICAgICAvKiBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfVENSOyAgICAgICAgLyogVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX1JOUFI7ICAgICAgIC8qIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIERCR1VfUk5DUjsgICAgICAgLyogUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9UTlBSOyAgICAgICAvKiBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9UTkNSOyAgICAgICAvKiBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgREJHVV9QVENSOyAgICAgICAvKiBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBEQkdVX1BUU1I7ICAgICAgIC8qIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi19IEFUOTFTX0RCR1UsICogQVQ5MVBTX0RCR1U7DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBEZWJ1ZyBVbml0DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfREJHVSB7DQorCUFUOTFfUkVHCSBEQkdVX0NSOyAJLy8gQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9NUjsgCS8vIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9DU1I7IAkvLyBDaGFubmVsIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9SSFI7IAkvLyBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1RIUjsgCS8vIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfQlJHUjsgCS8vIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFs3XTsgCS8vIA0KKwlBVDkxX1JFRwkgREJHVV9DSURSOyAJLy8gQ2hpcCBJRCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9FWElEOyAJLy8gQ2hpcCBJRCBFeHRlbnNpb24gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfRk5UUjsgCS8vIEZvcmNlIE5UUlNUIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbNDVdOyAJLy8gDQorCUFUOTFfUkVHCSBEQkdVX1JQUjsgCS8vIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9SQ1I7IAkvLyBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfVFBSOyAJLy8gVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9UQ1I7IAkvLyBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1JOUFI7IAkvLyBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9STkNSOyAJLy8gUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIERCR1VfVE5QUjsgCS8vIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9UTkNSOyAJLy8gVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBEQkdVX1BUQ1I7IAkvLyBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgREJHVV9QVFNSOyAJLy8gUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KK30gQVQ5MVNfREJHVSwgKkFUOTFQU19EQkdVOw0KIA0KLS8qIC0tLS0tLS0tIERCR1VfQ1IgOiAoREJHVSBPZmZzZXQ6IDB4MCkgRGVidWcgVW5pdCBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19VU19SU1RSWCAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyICkgIC8qIChEQkdVKSBSZXNldCBSZWNlaXZlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfUlNUVFggICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMyApICAvKiAoREJHVSkgUmVzZXQgVHJhbnNtaXR0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1JYRU4gICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDQgKSAgLyogKERCR1UpIFJlY2VpdmVyIEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfUlhESVMgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNSApICAvKiAoREJHVSkgUmVjZWl2ZXIgRGlzYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfVFhFTiAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNiApICAvKiAoREJHVSkgVHJhbnNtaXR0ZXIgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19VU19UWERJUyAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA3ICkgIC8qIChEQkdVKSBUcmFuc21pdHRlciBEaXNhYmxlICovDQotI2RlZmluZSBBVDkxQ19VU19SU1RTVEEgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgIC8qIChEQkdVKSBSZXNldCBTdGF0dXMgQml0cyAqLw0KLS8qIC0tLS0tLS0tIERCR1VfTVIgOiAoREJHVSBPZmZzZXQ6IDB4NCkgRGVidWcgVW5pdCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19VU19QQVIgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NyA8PCA5ICkgIC8qIChEQkdVKSBQYXJpdHkgdHlwZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX1BBUl9FVkVOICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgOSApICAvKiAoREJHVSkgRXZlbiBQYXJpdHkgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19QQVJfT0REICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDkgKSAgLyogKERCR1UpIE9kZCBQYXJpdHkgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19QQVJfU1BBQ0UgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDkgKSAgLyogKERCR1UpIFBhcml0eSBmb3JjZWQgdG8gMCAoU3BhY2UpICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfUEFSX01BUksgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCA5ICkgIC8qIChEQkdVKSBQYXJpdHkgZm9yY2VkIHRvIDEgKE1hcmspICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfUEFSX05PTkUgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NCA8PCA5ICkgIC8qIChEQkdVKSBObyBQYXJpdHkgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19QQVJfTVVMVElfRFJPUCAgICAoICggdW5zaWduZWQgaW50ICkgMHg2IDw8IDkgKSAgLyogKERCR1UpIE11bHRpLWRyb3AgbW9kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfQ0hNT0RFICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTQgKSAvKiAoREJHVSkgQ2hhbm5lbCBNb2RlICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfQ0hNT0RFX05PUk1BTCAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAxNCApIC8qIChEQkdVKSBOb3JtYWwgTW9kZTogVGhlIFVTQVJUIGNoYW5uZWwgb3BlcmF0ZXMgYXMgYW4gUlgvVFggVVNBUlQuICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfQ0hNT0RFX0FVVE8gICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNCApIC8qIChEQkdVKSBBdXRvbWF0aWMgRWNobzogUmVjZWl2ZXIgRGF0YSBJbnB1dCBpcyBjb25uZWN0ZWQgdG8gdGhlIFRYRCBwaW4uICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfQ0hNT0RFX0xPQ0FMICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCAxNCApIC8qIChEQkdVKSBMb2NhbCBMb29wYmFjazogVHJhbnNtaXR0ZXIgT3V0cHV0IFNpZ25hbCBpcyBjb25uZWN0ZWQgdG8gUmVjZWl2ZXIgSW5wdXQgU2lnbmFsLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX0NITU9ERV9SRU1PVEUgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTQgKSAvKiAoREJHVSkgUmVtb3RlIExvb3BiYWNrOiBSWEQgcGluIGlzIGludGVybmFsbHkgY29ubmVjdGVkIHRvIFRYRCBwaW4uICovDQotLyogLS0tLS0tLS0gREJHVV9JRVIgOiAoREJHVSBPZmZzZXQ6IDB4OCkgRGVidWcgVW5pdCBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19VU19SWFJEWSAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgIC8qIChEQkdVKSBSWFJEWSBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1RYUkRZICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEgKSAgLyogKERCR1UpIFRYUkRZIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfRU5EUlggICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMyApICAvKiAoREJHVSkgRW5kIG9mIFJlY2VpdmUgVHJhbnNmZXIgSW50ZXJydXB0ICovDQotI2RlZmluZSBBVDkxQ19VU19FTkRUWCAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA0ICkgIC8qIChEQkdVKSBFbmQgb2YgVHJhbnNtaXQgSW50ZXJydXB0ICovDQotI2RlZmluZSBBVDkxQ19VU19PVlJFICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA1ICkgIC8qIChEQkdVKSBPdmVycnVuIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfRlJBTUUgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNiApICAvKiAoREJHVSkgRnJhbWluZyBFcnJvciBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1BBUkUgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDcgKSAgLyogKERCR1UpIFBhcml0eSBFcnJvciBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1RYRU1QVFkgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDkgKSAgLyogKERCR1UpIFRYRU1QVFkgSW50ZXJydXB0ICovDQotI2RlZmluZSBBVDkxQ19VU19UWEJVRkUgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMSApIC8qIChEQkdVKSBUWEJVRkUgSW50ZXJydXB0ICovDQotI2RlZmluZSBBVDkxQ19VU19SWEJVRkYgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMiApIC8qIChEQkdVKSBSWEJVRkYgSW50ZXJydXB0ICovDQotI2RlZmluZSBBVDkxQ19VU19DT01NX1RYICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzMCApIC8qIChEQkdVKSBDT01NX1RYIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfQ09NTV9SWCAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMzEgKSAvKiAoREJHVSkgQ09NTV9SWCBJbnRlcnJ1cHQgKi8NCi0vKiAtLS0tLS0tLSBEQkdVX0lEUiA6IChEQkdVIE9mZnNldDogMHhjKSBEZWJ1ZyBVbml0IEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gREJHVV9JTVIgOiAoREJHVSBPZmZzZXQ6IDB4MTApIERlYnVnIFVuaXQgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBEQkdVX0NTUiA6IChEQkdVIE9mZnNldDogMHgxNCkgRGVidWcgVW5pdCBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIERCR1VfRk5UUiA6IChEQkdVIE9mZnNldDogMHg0OCkgRGVidWcgVW5pdCBGT1JDRV9OVFJTVCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfRk9SQ0VfTlRSU1QgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgLyogKERCR1UpIEZvcmNlIE5UUlNUIGluIEpUQUcgKi8NCisvLyAtLS0tLS0tLSBEQkdVX0NSIDogKERCR1UgT2Zmc2V0OiAweDApIERlYnVnIFVuaXQgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VTX1JTVFJYICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoREJHVSkgUmVzZXQgUmVjZWl2ZXINCisjZGVmaW5lIEFUOTFDX1VTX1JTVFRYICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoREJHVSkgUmVzZXQgVHJhbnNtaXR0ZXINCisjZGVmaW5lIEFUOTFDX1VTX1JYRU4gICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoREJHVSkgUmVjZWl2ZXIgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19VU19SWERJUyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKERCR1UpIFJlY2VpdmVyIERpc2FibGUNCisjZGVmaW5lIEFUOTFDX1VTX1RYRU4gICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoREJHVSkgVHJhbnNtaXR0ZXIgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19VU19UWERJUyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKERCR1UpIFRyYW5zbWl0dGVyIERpc2FibGUNCisjZGVmaW5lIEFUOTFDX1VTX1JTVFNUQSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoREJHVSkgUmVzZXQgU3RhdHVzIEJpdHMNCisvLyAtLS0tLS0tLSBEQkdVX01SIDogKERCR1UgT2Zmc2V0OiAweDQpIERlYnVnIFVuaXQgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VTX1BBUiAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8ICA5KSAvLyAoREJHVSkgUGFyaXR5IHR5cGUNCisjZGVmaW5lIAlBVDkxQ19VU19QQVJfRVZFTiAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgOSkgLy8gKERCR1UpIEV2ZW4gUGFyaXR5DQorI2RlZmluZSAJQVQ5MUNfVVNfUEFSX09ERCAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChEQkdVKSBPZGQgUGFyaXR5DQorI2RlZmluZSAJQVQ5MUNfVVNfUEFSX1NQQUNFICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDkpIC8vIChEQkdVKSBQYXJpdHkgZm9yY2VkIHRvIDAgKFNwYWNlKQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1BBUl9NQVJLICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA5KSAvLyAoREJHVSkgUGFyaXR5IGZvcmNlZCB0byAxIChNYXJrKQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1BBUl9OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg0IDw8ICA5KSAvLyAoREJHVSkgTm8gUGFyaXR5DQorI2RlZmluZSAJQVQ5MUNfVVNfUEFSX01VTFRJX0RST1AgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDYgPDwgIDkpIC8vIChEQkdVKSBNdWx0aS1kcm9wIG1vZGUNCisjZGVmaW5lIEFUOTFDX1VTX0NITU9ERSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE0KSAvLyAoREJHVSkgQ2hhbm5lbCBNb2RlDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0hNT0RFX05PUk1BTCAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMTQpIC8vIChEQkdVKSBOb3JtYWwgTW9kZTogVGhlIFVTQVJUIGNoYW5uZWwgb3BlcmF0ZXMgYXMgYW4gUlgvVFggVVNBUlQuDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0hNT0RFX0FVVE8gICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTQpIC8vIChEQkdVKSBBdXRvbWF0aWMgRWNobzogUmVjZWl2ZXIgRGF0YSBJbnB1dCBpcyBjb25uZWN0ZWQgdG8gdGhlIFRYRCBwaW4uDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0hNT0RFX0xPQ0FMICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMTQpIC8vIChEQkdVKSBMb2NhbCBMb29wYmFjazogVHJhbnNtaXR0ZXIgT3V0cHV0IFNpZ25hbCBpcyBjb25uZWN0ZWQgdG8gUmVjZWl2ZXIgSW5wdXQgU2lnbmFsLg0KKyNkZWZpbmUgCUFUOTFDX1VTX0NITU9ERV9SRU1PVEUgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE0KSAvLyAoREJHVSkgUmVtb3RlIExvb3BiYWNrOiBSWEQgcGluIGlzIGludGVybmFsbHkgY29ubmVjdGVkIHRvIFRYRCBwaW4uDQorLy8gLS0tLS0tLS0gREJHVV9JRVIgOiAoREJHVSBPZmZzZXQ6IDB4OCkgRGVidWcgVW5pdCBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVVNfUlhSRFkgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChEQkdVKSBSWFJEWSBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX1RYUkRZICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoREJHVSkgVFhSRFkgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19FTkRSWCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKERCR1UpIEVuZCBvZiBSZWNlaXZlIFRyYW5zZmVyIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfRU5EVFggICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChEQkdVKSBFbmQgb2YgVHJhbnNtaXQgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19PVlJFICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKERCR1UpIE92ZXJydW4gSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19GUkFNRSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLy8gKERCR1UpIEZyYW1pbmcgRXJyb3IgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19QQVJFICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKERCR1UpIFBhcml0eSBFcnJvciBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX1RYRU1QVFkgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvLyAoREJHVSkgVFhFTVBUWSBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX1RYQlVGRSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDExKSAvLyAoREJHVSkgVFhCVUZFIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfUlhCVUZGICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8vIChEQkdVKSBSWEJVRkYgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19DT01NX1RYICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAzMCkgLy8gKERCR1UpIENPTU1fVFggSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19DT01NX1JYICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAzMSkgLy8gKERCR1UpIENPTU1fUlggSW50ZXJydXB0DQorLy8gLS0tLS0tLS0gREJHVV9JRFIgOiAoREJHVSBPZmZzZXQ6IDB4YykgRGVidWcgVW5pdCBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBEQkdVX0lNUiA6IChEQkdVIE9mZnNldDogMHgxMCkgRGVidWcgVW5pdCBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBEQkdVX0NTUiA6IChEQkdVIE9mZnNldDogMHgxNCkgRGVidWcgVW5pdCBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBEQkdVX0ZOVFIgOiAoREJHVSBPZmZzZXQ6IDB4NDgpIERlYnVnIFVuaXQgRk9SQ0VfTlRSU1QgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VU19GT1JDRV9OVFJTVCAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKERCR1UpIEZvcmNlIE5UUlNUIGluIEpUQUcNCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFBhcmFsbGVsIElucHV0IE91dHB1dCBDb250cm9sZXIgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLXR5cGVkZWYgc3RydWN0IF9BVDkxU19QSU8NCi17DQotICAgIEFUOTFfUkVHIFBJT19QRVI7ICAgICAgICAvKiBQSU8gRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT19QRFI7ICAgICAgICAvKiBQSU8gRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9fUFNSOyAgICAgICAgLyogUElPIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDBbIDEgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgUElPX09FUjsgICAgICAgIC8qIE91dHB1dCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPX09EUjsgICAgICAgIC8qIE91dHB1dCBEaXNhYmxlIFJlZ2lzdGVyciAqLw0KLSAgICBBVDkxX1JFRyBQSU9fT1NSOyAgICAgICAgLyogT3V0cHV0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDFbIDEgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgUElPX0lGRVI7ICAgICAgIC8qIElucHV0IEZpbHRlciBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPX0lGRFI7ICAgICAgIC8qIElucHV0IEZpbHRlciBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT19JRlNSOyAgICAgICAvKiBJbnB1dCBGaWx0ZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMlsgMSBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBQSU9fU09EUjsgICAgICAgLyogU2V0IE91dHB1dCBEYXRhIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT19DT0RSOyAgICAgICAvKiBDbGVhciBPdXRwdXQgRGF0YSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9fT0RTUjsgICAgICAgLyogT3V0cHV0IERhdGEgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT19QRFNSOyAgICAgICAvKiBQaW4gRGF0YSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPX0lFUjsgICAgICAgIC8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPX0lEUjsgICAgICAgIC8qIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT19JTVI7ICAgICAgICAvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9fSVNSOyAgICAgICAgLyogSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9fTURFUjsgICAgICAgLyogTXVsdGktZHJpdmVyIEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9fTUREUjsgICAgICAgLyogTXVsdGktZHJpdmVyIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPX01EU1I7ICAgICAgIC8qIE11bHRpLWRyaXZlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQzWyAxIF07IC8qICovDQotICAgIEFUOTFfUkVHIFBJT19QUFVEUjsgICAgICAvKiBQdWxsLXVwIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPX1BQVUVSOyAgICAgIC8qIFB1bGwtdXAgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT19QUFVTUjsgICAgICAvKiBQdWxsLXVwIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDRbIDEgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgUElPX0FTUjsgICAgICAgIC8qIFNlbGVjdCBBIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT19CU1I7ICAgICAgICAvKiBTZWxlY3QgQiBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSU9fQUJTUjsgICAgICAgLyogQUIgU2VsZWN0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDVbIDkgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgUElPX09XRVI7ICAgICAgIC8qIE91dHB1dCBXcml0ZSBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElPX09XRFI7ICAgICAgIC8qIE91dHB1dCBXcml0ZSBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBJT19PV1NSOyAgICAgICAvKiBPdXRwdXQgV3JpdGUgU3RhdHVzIFJlZ2lzdGVyICovDQotfSBBVDkxU19QSU8sICogQVQ5MVBTX1BJTzsNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFBhcmFsbGVsIElucHV0IE91dHB1dCBDb250cm9sZXINCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19QSU8gew0KKwlBVDkxX1JFRwkgUElPX1BFUjsgCS8vIFBJTyBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19QRFI7IAkvLyBQSU8gRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX1BTUjsgCS8vIFBJTyBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUElPX09FUjsgCS8vIE91dHB1dCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19PRFI7IAkvLyBPdXRwdXQgRGlzYWJsZSBSZWdpc3RlcnINCisJQVQ5MV9SRUcJIFBJT19PU1I7IAkvLyBPdXRwdXQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT19JRkVSOyAJLy8gSW5wdXQgRmlsdGVyIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX0lGRFI7IAkvLyBJbnB1dCBGaWx0ZXIgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX0lGU1I7IAkvLyBJbnB1dCBGaWx0ZXIgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDJbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT19TT0RSOyAJLy8gU2V0IE91dHB1dCBEYXRhIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fQ09EUjsgCS8vIENsZWFyIE91dHB1dCBEYXRhIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fT0RTUjsgCS8vIE91dHB1dCBEYXRhIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX1BEU1I7IAkvLyBQaW4gRGF0YSBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX0lTUjsgCS8vIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19NREVSOyAJLy8gTXVsdGktZHJpdmVyIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX01ERFI7IAkvLyBNdWx0aS1kcml2ZXIgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX01EU1I7IAkvLyBNdWx0aS1kcml2ZXIgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDNbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT19QUFVEUjsgCS8vIFB1bGwtdXAgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX1BQVUVSOyAJLy8gUHVsbC11cCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJT19QUFVTUjsgCS8vIFB1bGwtdXAgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDRbMV07IAkvLyANCisJQVQ5MV9SRUcJIFBJT19BU1I7IAkvLyBTZWxlY3QgQSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElPX0JTUjsgCS8vIFNlbGVjdCBCIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fQUJTUjsgCS8vIEFCIFNlbGVjdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkNVs5XTsgCS8vIA0KKwlBVDkxX1JFRwkgUElPX09XRVI7IAkvLyBPdXRwdXQgV3JpdGUgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fT1dEUjsgCS8vIE91dHB1dCBXcml0ZSBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQSU9fT1dTUjsgCS8vIE91dHB1dCBXcml0ZSBTdGF0dXMgUmVnaXN0ZXINCit9IEFUOTFTX1BJTywgKkFUOTFQU19QSU87DQogDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBDbG9jayBHZW5lcmF0b3IgQ29udHJvbGVyICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfQ0tHUg0KLXsNCi0gICAgQVQ5MV9SRUcgQ0tHUl9NT1I7ICAgICAgIC8qIE1haW4gT3NjaWxsYXRvciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBDS0dSX01DRlI7ICAgICAgLyogTWFpbiBDbG9jayAgRnJlcXVlbmN5IFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMFsgMSBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBDS0dSX1BMTFI7ICAgICAgLyogUExMIFJlZ2lzdGVyICovDQotfSBBVDkxU19DS0dSLCAqIEFUOTFQU19DS0dSOw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQ2xvY2sgR2VuZXJhdG9yIENvbnRyb2xlcg0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX0NLR1Igew0KKwlBVDkxX1JFRwkgQ0tHUl9NT1I7IAkvLyBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIENLR1JfTUNGUjsgCS8vIE1haW4gQ2xvY2sgIEZyZXF1ZW5jeSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBDS0dSX1BMTFI7IAkvLyBQTEwgUmVnaXN0ZXINCit9IEFUOTFTX0NLR1IsICpBVDkxUFNfQ0tHUjsNCiANCi0vKiAtLS0tLS0tLSBDS0dSX01PUiA6IChDS0dSIE9mZnNldDogMHgwKSBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0NLR1JfTU9TQ0VOICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgICAgLyogKENLR1IpIE1haW4gT3NjaWxsYXRvciBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX0NLR1JfT1NDQllQQVNTICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgICAgLyogKENLR1IpIE1haW4gT3NjaWxsYXRvciBCeXBhc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0NLR1JfT1NDT1VOVCAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RkYgPDwgOCApICAgLyogKENLR1IpIE1haW4gT3NjaWxsYXRvciBTdGFydC11cCBUaW1lICovDQotLyogLS0tLS0tLS0gQ0tHUl9NQ0ZSIDogKENLR1IgT2Zmc2V0OiAweDQpIE1haW4gQ2xvY2sgRnJlcXVlbmN5IFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19DS0dSX01BSU5GICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGRkYgPDwgMCApIC8qIChDS0dSKSBNYWluIENsb2NrIEZyZXF1ZW5jeSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0tHUl9NQUlOUkRZICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE2ICkgICAvKiAoQ0tHUikgTWFpbiBDbG9jayBSZWFkeSAqLw0KLS8qIC0tLS0tLS0tIENLR1JfUExMUiA6IChDS0dSIE9mZnNldDogMHhjKSBQTEwgQiBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0tHUl9ESVYgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRiA8PCAwICkgICAvKiAoQ0tHUikgRGl2aWRlciBTZWxlY3RlZCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0NLR1JfRElWXzAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwICkgICAgICAgICAvKiAoQ0tHUikgRGl2aWRlciBvdXRwdXQgaXMgMCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0NLR1JfRElWX0JZUEFTUyAgICAoICggdW5zaWduZWQgaW50ICkgMHgxICkgICAgICAgICAvKiAoQ0tHUikgRGl2aWRlciBpcyBieXBhc3NlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0tHUl9QTExDT1VOVCAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzRiA8PCA4ICkgICAvKiAoQ0tHUikgUExMIENvdW50ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NLR1JfT1VUICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAxNCApICAgLyogKENLR1IpIFBMTCBPdXRwdXQgRnJlcXVlbmN5IFJhbmdlICovDQotI2RlZmluZSAgICAgQVQ5MUNfQ0tHUl9PVVRfMCAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMTQgKSAgIC8qIChDS0dSKSBQbGVhc2UgcmVmZXIgdG8gdGhlIFBMTCBkYXRhc2hlZXQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19DS0dSX09VVF8xICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNCApICAgLyogKENLR1IpIFBsZWFzZSByZWZlciB0byB0aGUgUExMIGRhdGFzaGVldCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0NLR1JfT1VUXzIgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDE0ICkgICAvKiAoQ0tHUikgUGxlYXNlIHJlZmVyIHRvIHRoZSBQTEwgZGF0YXNoZWV0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfQ0tHUl9PVVRfMyAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTQgKSAgIC8qIChDS0dSKSBQbGVhc2UgcmVmZXIgdG8gdGhlIFBMTCBkYXRhc2hlZXQgKi8NCi0jZGVmaW5lIEFUOTFDX0NLR1JfTVVMICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4N0ZGIDw8IDE2ICkgLyogKENLR1IpIFBMTCBNdWx0aXBsaWVyICovDQotI2RlZmluZSBBVDkxQ19DS0dSX1VTQkRJViAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMjggKSAgIC8qIChDS0dSKSBEaXZpZGVyIGZvciBVU0IgQ2xvY2tzICovDQotI2RlZmluZSAgICAgQVQ5MUNfQ0tHUl9VU0JESVZfMCAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMjggKSAgIC8qIChDS0dSKSBEaXZpZGVyIG91dHB1dCBpcyBQTEwgY2xvY2sgb3V0cHV0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfQ0tHUl9VU0JESVZfMSAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjggKSAgIC8qIChDS0dSKSBEaXZpZGVyIG91dHB1dCBpcyBQTEwgY2xvY2sgb3V0cHV0IGRpdmlkZWQgYnkgMiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0NLR1JfVVNCRElWXzIgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDI4ICkgICAvKiAoQ0tHUikgRGl2aWRlciBvdXRwdXQgaXMgUExMIGNsb2NrIG91dHB1dCBkaXZpZGVkIGJ5IDQgKi8NCisvLyAtLS0tLS0tLSBDS0dSX01PUiA6IChDS0dSIE9mZnNldDogMHgwKSBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DS0dSX01PU0NFTiAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKENLR1IpIE1haW4gT3NjaWxsYXRvciBFbmFibGUNCisjZGVmaW5lIEFUOTFDX0NLR1JfT1NDQllQQVNTICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoQ0tHUikgTWFpbiBPc2NpbGxhdG9yIEJ5cGFzcw0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9PU0NPVU5UICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8ICA4KSAvLyAoQ0tHUikgTWFpbiBPc2NpbGxhdG9yIFN0YXJ0LXVwIFRpbWUNCisvLyAtLS0tLS0tLSBDS0dSX01DRlIgOiAoQ0tHUiBPZmZzZXQ6IDB4NCkgTWFpbiBDbG9jayBGcmVxdWVuY3kgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DS0dSX01BSU5GICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGRiA8PCAgMCkgLy8gKENLR1IpIE1haW4gQ2xvY2sgRnJlcXVlbmN5DQorI2RlZmluZSBBVDkxQ19DS0dSX01BSU5SRFkgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKENLR1IpIE1haW4gQ2xvY2sgUmVhZHkNCisvLyAtLS0tLS0tLSBDS0dSX1BMTFIgOiAoQ0tHUiBPZmZzZXQ6IDB4YykgUExMIEIgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DS0dSX0RJViAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgIDApIC8vIChDS0dSKSBEaXZpZGVyIFNlbGVjdGVkDQorI2RlZmluZSAJQVQ5MUNfQ0tHUl9ESVZfMCAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCkgLy8gKENLR1IpIERpdmlkZXIgb3V0cHV0IGlzIDANCisjZGVmaW5lIAlBVDkxQ19DS0dSX0RJVl9CWVBBU1MgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxKSAvLyAoQ0tHUikgRGl2aWRlciBpcyBieXBhc3NlZA0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9QTExDT1VOVCAgICgodW5zaWduZWQgaW50KSAweDNGIDw8ICA4KSAvLyAoQ0tHUikgUExMIENvdW50ZXINCisjZGVmaW5lIEFUOTFDX0NLR1JfT1VUICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE0KSAvLyAoQ0tHUikgUExMIE91dHB1dCBGcmVxdWVuY3kgUmFuZ2UNCisjZGVmaW5lIAlBVDkxQ19DS0dSX09VVF8wICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDE0KSAvLyAoQ0tHUikgUGxlYXNlIHJlZmVyIHRvIHRoZSBQTEwgZGF0YXNoZWV0DQorI2RlZmluZSAJQVQ5MUNfQ0tHUl9PVVRfMSAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNCkgLy8gKENLR1IpIFBsZWFzZSByZWZlciB0byB0aGUgUExMIGRhdGFzaGVldA0KKyNkZWZpbmUgCUFUOTFDX0NLR1JfT1VUXzIgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMTQpIC8vIChDS0dSKSBQbGVhc2UgcmVmZXIgdG8gdGhlIFBMTCBkYXRhc2hlZXQNCisjZGVmaW5lIAlBVDkxQ19DS0dSX09VVF8zICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE0KSAvLyAoQ0tHUikgUGxlYXNlIHJlZmVyIHRvIHRoZSBQTEwgZGF0YXNoZWV0DQorI2RlZmluZSBBVDkxQ19DS0dSX01VTCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4N0ZGIDw8IDE2KSAvLyAoQ0tHUikgUExMIE11bHRpcGxpZXINCisjZGVmaW5lIEFUOTFDX0NLR1JfVVNCRElWICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDI4KSAvLyAoQ0tHUikgRGl2aWRlciBmb3IgVVNCIENsb2Nrcw0KKyNkZWZpbmUgCUFUOTFDX0NLR1JfVVNCRElWXzAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMjgpIC8vIChDS0dSKSBEaXZpZGVyIG91dHB1dCBpcyBQTEwgY2xvY2sgb3V0cHV0DQorI2RlZmluZSAJQVQ5MUNfQ0tHUl9VU0JESVZfMSAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyOCkgLy8gKENLR1IpIERpdmlkZXIgb3V0cHV0IGlzIFBMTCBjbG9jayBvdXRwdXQgZGl2aWRlZCBieSAyDQorI2RlZmluZSAJQVQ5MUNfQ0tHUl9VU0JESVZfMiAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAyOCkgLy8gKENLR1IpIERpdmlkZXIgb3V0cHV0IGlzIFBMTCBjbG9jayBvdXRwdXQgZGl2aWRlZCBieSA0DQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQb3dlciBNYW5hZ2VtZW50IENvbnRyb2xlciAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotdHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1BNQw0KLXsNCi0gICAgQVQ5MV9SRUcgUE1DX1NDRVI7ICAgICAgIC8qIFN5c3RlbSBDbG9jayBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUE1DX1NDRFI7ICAgICAgIC8qIFN5c3RlbSBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBNQ19TQ1NSOyAgICAgICAvKiBTeXN0ZW0gQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMFsgMSBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBQTUNfUENFUjsgICAgICAgLyogUGVyaXBoZXJhbCBDbG9jayBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUE1DX1BDRFI7ICAgICAgIC8qIFBlcmlwaGVyYWwgQ2xvY2sgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQTUNfUENTUjsgICAgICAgLyogUGVyaXBoZXJhbCBDbG9jayBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQxWyAxIF07IC8qICovDQotICAgIEFUOTFfUkVHIFBNQ19NT1I7ICAgICAgICAvKiBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUE1DX01DRlI7ICAgICAgIC8qIE1haW4gQ2xvY2sgIEZyZXF1ZW5jeSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDJbIDEgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgUE1DX1BMTFI7ICAgICAgIC8qIFBMTCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQTUNfTUNLUjsgICAgICAgLyogTWFzdGVyIENsb2NrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkM1sgMyBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBQTUNfUENLUlsgNCBdOyAgLyogUHJvZ3JhbW1hYmxlIENsb2NrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkNFsgNCBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBQTUNfSUVSOyAgICAgICAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQTUNfSURSOyAgICAgICAgLyogSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUE1DX1NSOyAgICAgICAgIC8qIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQTUNfSU1SOyAgICAgICAgLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi19IEFUOTFTX1BNQywgKiBBVDkxUFNfUE1DOw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUG93ZXIgTWFuYWdlbWVudCBDb250cm9sZXINCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19QTUMgew0KKwlBVDkxX1JFRwkgUE1DX1NDRVI7IAkvLyBTeXN0ZW0gQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfU0NEUjsgCS8vIFN5c3RlbSBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfU0NTUjsgCS8vIFN5c3RlbSBDbG9jayBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUE1DX1BDRVI7IAkvLyBQZXJpcGhlcmFsIENsb2NrIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUE1DX1BDRFI7IAkvLyBQZXJpcGhlcmFsIENsb2NrIERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19QQ1NSOyAJLy8gUGVyaXBoZXJhbCBDbG9jayBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMVsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUE1DX01PUjsgCS8vIE1haW4gT3NjaWxsYXRvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUE1DX01DRlI7IAkvLyBNYWluIENsb2NrICBGcmVxdWVuY3kgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMlsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgUE1DX1BMTFI7IAkvLyBQTEwgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19NQ0tSOyAJLy8gTWFzdGVyIENsb2NrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDNbM107IAkvLyANCisJQVQ5MV9SRUcJIFBNQ19QQ0tSWzRdOyAJLy8gUHJvZ3JhbW1hYmxlIENsb2NrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDRbNF07IAkvLyANCisJQVQ5MV9SRUcJIFBNQ19JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQTUNfSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBNQ19TUjsgCS8vIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUE1DX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorfSBBVDkxU19QTUMsICpBVDkxUFNfUE1DOw0KIA0KLS8qIC0tLS0tLS0tIFBNQ19TQ0VSIDogKFBNQyBPZmZzZXQ6IDB4MCkgU3lzdGVtIENsb2NrIEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDSyAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgIC8qIChQTUMpIFByb2Nlc3NvciBDbG9jayAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1VEUCAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA3ICkgIC8qIChQTUMpIFVTQiBEZXZpY2UgUG9ydCBDbG9jayAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDSzAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgIC8qIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19QQ0sxICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOSApICAvKiAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0ICovDQotI2RlZmluZSBBVDkxQ19QTUNfUENLMiAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEwICkgLyogKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDSzMgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMSApIC8qIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgKi8NCi0vKiAtLS0tLS0tLSBQTUNfU0NEUiA6IChQTUMgT2Zmc2V0OiAweDQpIFN5c3RlbSBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gUE1DX1NDU1IgOiAoUE1DIE9mZnNldDogMHg4KSBTeXN0ZW0gQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQ0tHUl9NT1IgOiAoUE1DIE9mZnNldDogMHgyMCkgTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQ0tHUl9NQ0ZSIDogKFBNQyBPZmZzZXQ6IDB4MjQpIE1haW4gQ2xvY2sgRnJlcXVlbmN5IFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQ0tHUl9QTExSIDogKFBNQyBPZmZzZXQ6IDB4MmMpIFBMTCBCIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gUE1DX01DS1IgOiAoUE1DIE9mZnNldDogMHgzMCkgTWFzdGVyIENsb2NrIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19QTUNfQ1NTICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDAgKSAvKiAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgU2VsZWN0aW9uICovDQotI2RlZmluZSAgICAgQVQ5MUNfUE1DX0NTU19TTE9XX0NMSyAgICAoICggdW5zaWduZWQgaW50ICkgMHgwICkgICAgICAvKiAoUE1DKSBTbG93IENsb2NrIGlzIHNlbGVjdGVkICovDQotI2RlZmluZSAgICAgQVQ5MUNfUE1DX0NTU19NQUlOX0NMSyAgICAoICggdW5zaWduZWQgaW50ICkgMHgxICkgICAgICAvKiAoUE1DKSBNYWluIENsb2NrIGlzIHNlbGVjdGVkICovDQotI2RlZmluZSAgICAgQVQ5MUNfUE1DX0NTU19QTExfQ0xLICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzICkgICAgICAvKiAoUE1DKSBDbG9jayBmcm9tIFBMTCBpcyBzZWxlY3RlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1BSRVMgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NyA8PCAyICkgLyogKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIFByZXNjYWxlciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1BNQ19QUkVTX0NMSyAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAyICkgLyogKFBNQykgU2VsZWN0ZWQgY2xvY2sgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19QTUNfUFJFU19DTEtfMiAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMiApIC8qIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgMiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1BNQ19QUkVTX0NMS180ICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCAyICkgLyogKFBNQykgU2VsZWN0ZWQgY2xvY2sgZGl2aWRlZCBieSA0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfUE1DX1BSRVNfQ0xLXzggICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDIgKSAvKiAoUE1DKSBTZWxlY3RlZCBjbG9jayBkaXZpZGVkIGJ5IDggKi8NCi0jZGVmaW5lICAgICBBVDkxQ19QTUNfUFJFU19DTEtfMTYgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDQgPDwgMiApIC8qIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgMTYgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19QTUNfUFJFU19DTEtfMzIgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDUgPDwgMiApIC8qIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgMzIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19QTUNfUFJFU19DTEtfNjQgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDYgPDwgMiApIC8qIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgNjQgKi8NCi0vKiAtLS0tLS0tLSBQTUNfUENLUiA6IChQTUMgT2Zmc2V0OiAweDQwKSBQcm9ncmFtbWFibGUgQ2xvY2sgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBQTUNfSUVSIDogKFBNQyBPZmZzZXQ6IDB4NjApIFBNQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19QTUNfTU9TQ1MgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgLyogKFBNQykgTU9TQyBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzayAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX0xPQ0sgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyICkgIC8qIChQTUMpIFBMTCBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzayAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX01DS1JEWSAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzICkgIC8qIChQTUMpIE1DS19SRFkgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sgKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19QQ0swUkRZICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOCApICAvKiAoUE1DKSBQQ0swX1JEWSBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzayAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDSzFSRFkgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA5ICkgIC8qIChQTUMpIFBDSzFfUkRZIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrICovDQotI2RlZmluZSBBVDkxQ19QTUNfUENLMlJEWSAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEwICkgLyogKFBNQykgUENLMl9SRFkgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sgKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19QQ0szUkRZICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTEgKSAvKiAoUE1DKSBQQ0szX1JEWSBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzayAqLw0KLS8qIC0tLS0tLS0tIFBNQ19JRFIgOiAoUE1DIE9mZnNldDogMHg2NCkgUE1DIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gUE1DX1NSIDogKFBNQyBPZmZzZXQ6IDB4NjgpIFBNQyBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBQTUNfSU1SIDogKFBNQyBPZmZzZXQ6IDB4NmMpIFBNQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSAqLw0KKy8vIC0tLS0tLS0tIFBNQ19TQ0VSIDogKFBNQyBPZmZzZXQ6IDB4MCkgU3lzdGVtIENsb2NrIEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0sgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoUE1DKSBQcm9jZXNzb3IgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BNQ19VRFAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoUE1DKSBVU0IgRGV2aWNlIFBvcnQgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0swICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0DQorI2RlZmluZSBBVDkxQ19QTUNfUENLMSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLy8gKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dA0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDSzIgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQNCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0szICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDExKSAvLyAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0DQorLy8gLS0tLS0tLS0gUE1DX1NDRFIgOiAoUE1DIE9mZnNldDogMHg0KSBTeXN0ZW0gQ2xvY2sgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQTUNfU0NTUiA6IChQTUMgT2Zmc2V0OiAweDgpIFN5c3RlbSBDbG9jayBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQ0tHUl9NT1IgOiAoUE1DIE9mZnNldDogMHgyMCkgTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIENLR1JfTUNGUiA6IChQTUMgT2Zmc2V0OiAweDI0KSBNYWluIENsb2NrIEZyZXF1ZW5jeSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBDS0dSX1BMTFIgOiAoUE1DIE9mZnNldDogMHgyYykgUExMIEIgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUE1DX01DS1IgOiAoUE1DIE9mZnNldDogMHgzMCkgTWFzdGVyIENsb2NrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUE1DX0NTUyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDApIC8vIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19QTUNfQ1NTX1NMT1dfQ0xLICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDApIC8vIChQTUMpIFNsb3cgQ2xvY2sgaXMgc2VsZWN0ZWQNCisjZGVmaW5lIAlBVDkxQ19QTUNfQ1NTX01BSU5fQ0xLICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEpIC8vIChQTUMpIE1haW4gQ2xvY2sgaXMgc2VsZWN0ZWQNCisjZGVmaW5lIAlBVDkxQ19QTUNfQ1NTX1BMTF9DTEsgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMpIC8vIChQTUMpIENsb2NrIGZyb20gUExMIGlzIHNlbGVjdGVkDQorI2RlZmluZSBBVDkxQ19QTUNfUFJFUyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAgMikgLy8gKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIFByZXNjYWxlcg0KKyNkZWZpbmUgCUFUOTFDX1BNQ19QUkVTX0NMSyAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDIpIC8vIChQTUMpIFNlbGVjdGVkIGNsb2NrDQorI2RlZmluZSAJQVQ5MUNfUE1DX1BSRVNfQ0xLXzIgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFBNQykgU2VsZWN0ZWQgY2xvY2sgZGl2aWRlZCBieSAyDQorI2RlZmluZSAJQVQ5MUNfUE1DX1BSRVNfQ0xLXzQgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgMikgLy8gKFBNQykgU2VsZWN0ZWQgY2xvY2sgZGl2aWRlZCBieSA0DQorI2RlZmluZSAJQVQ5MUNfUE1DX1BSRVNfQ0xLXzggICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgMikgLy8gKFBNQykgU2VsZWN0ZWQgY2xvY2sgZGl2aWRlZCBieSA4DQorI2RlZmluZSAJQVQ5MUNfUE1DX1BSRVNfQ0xLXzE2ICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NCA8PCAgMikgLy8gKFBNQykgU2VsZWN0ZWQgY2xvY2sgZGl2aWRlZCBieSAxNg0KKyNkZWZpbmUgCUFUOTFDX1BNQ19QUkVTX0NMS18zMiAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDUgPDwgIDIpIC8vIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgMzINCisjZGVmaW5lIAlBVDkxQ19QTUNfUFJFU19DTEtfNjQgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg2IDw8ICAyKSAvLyAoUE1DKSBTZWxlY3RlZCBjbG9jayBkaXZpZGVkIGJ5IDY0DQorLy8gLS0tLS0tLS0gUE1DX1BDS1IgOiAoUE1DIE9mZnNldDogMHg0MCkgUHJvZ3JhbW1hYmxlIENsb2NrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFBNQ19JRVIgOiAoUE1DIE9mZnNldDogMHg2MCkgUE1DIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QTUNfTU9TQ1MgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFBNQykgTU9TQyBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzaw0KKyNkZWZpbmUgQVQ5MUNfUE1DX0xPQ0sgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChQTUMpIFBMTCBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzaw0KKyNkZWZpbmUgQVQ5MUNfUE1DX01DS1JEWSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChQTUMpIE1DS19SRFkgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sNCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0swUkRZICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoUE1DKSBQQ0swX1JEWSBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzaw0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDSzFSRFkgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChQTUMpIFBDSzFfUkRZIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrDQorI2RlZmluZSBBVDkxQ19QTUNfUENLMlJEWSAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLy8gKFBNQykgUENLMl9SRFkgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sNCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0szUkRZICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDExKSAvLyAoUE1DKSBQQ0szX1JEWSBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzaw0KKy8vIC0tLS0tLS0tIFBNQ19JRFIgOiAoUE1DIE9mZnNldDogMHg2NCkgUE1DIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFBNQ19TUiA6IChQTUMgT2Zmc2V0OiAweDY4KSBQTUMgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFBNQ19JTVIgOiAoUE1DIE9mZnNldDogMHg2YykgUE1DIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUmVzZXQgQ29udHJvbGxlciBJbnRlcmZhY2UgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLXR5cGVkZWYgc3RydWN0IF9BVDkxU19SU1RDDQotew0KLSAgICBBVDkxX1JFRyBSU1RDX1JDUjsgLyogUmVzZXQgQ29udHJvbCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSU1RDX1JTUjsgLyogUmVzZXQgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJTVENfUk1SOyAvKiBSZXNldCBNb2RlIFJlZ2lzdGVyICovDQotfSBBVDkxU19SU1RDLCAqIEFUOTFQU19SU1RDOw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUmVzZXQgQ29udHJvbGxlciBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19SU1RDIHsNCisJQVQ5MV9SRUcJIFJTVENfUkNSOyAJLy8gUmVzZXQgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUlNUQ19SU1I7IAkvLyBSZXNldCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJTVENfUk1SOyAJLy8gUmVzZXQgTW9kZSBSZWdpc3Rlcg0KK30gQVQ5MVNfUlNUQywgKkFUOTFQU19SU1RDOw0KIA0KLS8qIC0tLS0tLS0tIFJTVENfUkNSIDogKFJTVEMgT2Zmc2V0OiAweDApIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1JTVENfUFJPQ1JTVCAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgIC8qIChSU1RDKSBQcm9jZXNzb3IgUmVzZXQgKi8NCi0jZGVmaW5lIEFUOTFDX1JTVENfUEVSUlNUICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAgIC8qIChSU1RDKSBQZXJpcGhlcmFsIFJlc2V0ICovDQotI2RlZmluZSBBVDkxQ19SU1RDX0VYVFJTVCAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzICkgICAvKiAoUlNUQykgRXh0ZXJuYWwgUmVzZXQgKi8NCi0jZGVmaW5lIEFUOTFDX1JTVENfS0VZICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRiA8PCAyNCApIC8qIChSU1RDKSBQYXNzd29yZCAqLw0KLS8qIC0tLS0tLS0tIFJTVENfUlNSIDogKFJTVEMgT2Zmc2V0OiAweDQpIFJlc2V0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfUlNUQ19VUlNUUyAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgLyogKFJTVEMpIFVzZXIgUmVzZXQgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19SU1RDX0JPRFNUUyAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgICAvKiAoUlNUQykgQnJvd25vdXQgRGV0ZWN0aW9uIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfUlNUQ19SU1RUWVAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDcgPDwgOCApICAgLyogKFJTVEMpIFJlc2V0IFR5cGUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19SU1RDX1JTVFRZUF9QT1dFUlVQICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDggKSAgIC8qIChSU1RDKSBQb3dlci11cCBSZXNldC4gVkREQ09SRSByaXNpbmcuICovDQotI2RlZmluZSAgICAgQVQ5MUNfUlNUQ19SU1RUWVBfV0FLRVVQICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgICAvKiAoUlNUQykgV2FrZVVwIFJlc2V0LiBWRERDT1JFIHJpc2luZy4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19SU1RDX1JTVFRZUF9XQVRDSERPRyAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDggKSAgIC8qIChSU1RDKSBXYXRjaGRvZyBSZXNldC4gV2F0Y2hkb2cgb3ZlcmZsb3cgb2NjdXJlZC4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19SU1RDX1JTVFRZUF9TT0ZUV0FSRSAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDggKSAgIC8qIChSU1RDKSBTb2Z0d2FyZSBSZXNldC4gUHJvY2Vzc29yIHJlc2V0IHJlcXVpcmVkIGJ5IHRoZSBzb2Z0d2FyZS4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19SU1RDX1JTVFRZUF9VU0VSICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg0IDw8IDggKSAgIC8qIChSU1RDKSBVc2VyIFJlc2V0LiBOUlNUIHBpbiBkZXRlY3RlZCBsb3cuICovDQotI2RlZmluZSAgICAgQVQ5MUNfUlNUQ19SU1RUWVBfQlJPV05PVVQgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NSA8PCA4ICkgICAvKiAoUlNUQykgQnJvd25vdXQgUmVzZXQgb2NjdXJlZC4gKi8NCi0jZGVmaW5lIEFUOTFDX1JTVENfTlJTVEwgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE2ICkgIC8qIChSU1RDKSBOUlNUIHBpbiBsZXZlbCAqLw0KLSNkZWZpbmUgQVQ5MUNfUlNUQ19TUkNNUCAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTcgKSAgLyogKFJTVEMpIFNvZnR3YXJlIFJlc2V0IENvbW1hbmQgaW4gUHJvZ3Jlc3MuICovDQotLyogLS0tLS0tLS0gUlNUQ19STVIgOiAoUlNUQyBPZmZzZXQ6IDB4OCkgUmVzZXQgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfUlNUQ19VUlNURU4gICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgLyogKFJTVEMpIFVzZXIgUmVzZXQgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19SU1RDX1VSU1RJRU4gICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA0ICkgICAvKiAoUlNUQykgVXNlciBSZXNldCBJbnRlcnJ1cHQgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19SU1RDX0VSU1RMICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RiA8PCA4ICkgICAvKiAoUlNUQykgVXNlciBSZXNldCBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1JTVENfQk9ESUVOICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE2ICkgIC8qIChSU1RDKSBCcm93bm91dCBEZXRlY3Rpb24gSW50ZXJydXB0IEVuYWJsZSAqLw0KKy8vIC0tLS0tLS0tIFJTVENfUkNSIDogKFJTVEMgT2Zmc2V0OiAweDApIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19SU1RDX1BST0NSU1QgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFJTVEMpIFByb2Nlc3NvciBSZXNldA0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19QRVJSU1QgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChSU1RDKSBQZXJpcGhlcmFsIFJlc2V0DQorI2RlZmluZSBBVDkxQ19SU1RDX0VYVFJTVCAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKFJTVEMpIEV4dGVybmFsIFJlc2V0DQorI2RlZmluZSBBVDkxQ19SU1RDX0tFWSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgMjQpIC8vIChSU1RDKSBQYXNzd29yZA0KKy8vIC0tLS0tLS0tIFJTVENfUlNSIDogKFJTVEMgT2Zmc2V0OiAweDQpIFJlc2V0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1JTVENfVVJTVFMgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoUlNUQykgVXNlciBSZXNldCBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX1JTVENfQk9EU1RTICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoUlNUQykgQnJvd25vdXQgRGV0ZWN0aW9uIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19SU1RUWVAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgIDgpIC8vIChSU1RDKSBSZXNldCBUeXBlDQorI2RlZmluZSAJQVQ5MUNfUlNUQ19SU1RUWVBfUE9XRVJVUCAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgOCkgLy8gKFJTVEMpIFBvd2VyLXVwIFJlc2V0LiBWRERDT1JFIHJpc2luZy4NCisjZGVmaW5lIAlBVDkxQ19SU1RDX1JTVFRZUF9XQUtFVVAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoUlNUQykgV2FrZVVwIFJlc2V0LiBWRERDT1JFIHJpc2luZy4NCisjZGVmaW5lIAlBVDkxQ19SU1RDX1JTVFRZUF9XQVRDSERPRyAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA4KSAvLyAoUlNUQykgV2F0Y2hkb2cgUmVzZXQuIFdhdGNoZG9nIG92ZXJmbG93IG9jY3VyZWQuDQorI2RlZmluZSAJQVQ5MUNfUlNUQ19SU1RUWVBfU09GVFdBUkUgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKFJTVEMpIFNvZnR3YXJlIFJlc2V0LiBQcm9jZXNzb3IgcmVzZXQgcmVxdWlyZWQgYnkgdGhlIHNvZnR3YXJlLg0KKyNkZWZpbmUgCUFUOTFDX1JTVENfUlNUVFlQX1VTRVIgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDQgPDwgIDgpIC8vIChSU1RDKSBVc2VyIFJlc2V0LiBOUlNUIHBpbiBkZXRlY3RlZCBsb3cuDQorI2RlZmluZSAJQVQ5MUNfUlNUQ19SU1RUWVBfQlJPV05PVVQgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NSA8PCAgOCkgLy8gKFJTVEMpIEJyb3dub3V0IFJlc2V0IG9jY3VyZWQuDQorI2RlZmluZSBBVDkxQ19SU1RDX05SU1RMICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKFJTVEMpIE5SU1QgcGluIGxldmVsDQorI2RlZmluZSBBVDkxQ19SU1RDX1NSQ01QICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNykgLy8gKFJTVEMpIFNvZnR3YXJlIFJlc2V0IENvbW1hbmQgaW4gUHJvZ3Jlc3MuDQorLy8gLS0tLS0tLS0gUlNUQ19STVIgOiAoUlNUQyBPZmZzZXQ6IDB4OCkgUmVzZXQgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1JTVENfVVJTVEVOICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoUlNUQykgVXNlciBSZXNldCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1JTVENfVVJTVElFTiAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoUlNUQykgVXNlciBSZXNldCBJbnRlcnJ1cHQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19SU1RDX0VSU1RMICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAgOCkgLy8gKFJTVEMpIFVzZXIgUmVzZXQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19SU1RDX0JPRElFTiAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKFJTVEMpIEJyb3dub3V0IERldGVjdGlvbiBJbnRlcnJ1cHQgRW5hYmxlDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBSZWFsIFRpbWUgVGltZXIgQ29udHJvbGxlciBJbnRlcmZhY2UgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLXR5cGVkZWYgc3RydWN0IF9BVDkxU19SVFRDDQotew0KLSAgICBBVDkxX1JFRyBSVFRDX1JUTVI7IC8qIFJlYWwtdGltZSBNb2RlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJUVENfUlRBUjsgLyogUmVhbC10aW1lIEFsYXJtIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJUVENfUlRWUjsgLyogUmVhbC10aW1lIFZhbHVlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJUVENfUlRTUjsgLyogUmVhbC10aW1lIFN0YXR1cyBSZWdpc3RlciAqLw0KLX0gQVQ5MVNfUlRUQywgKiBBVDkxUFNfUlRUQzsNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFJlYWwgVGltZSBUaW1lciBDb250cm9sbGVyIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1JUVEMgew0KKwlBVDkxX1JFRwkgUlRUQ19SVE1SOyAJLy8gUmVhbC10aW1lIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJUVENfUlRBUjsgCS8vIFJlYWwtdGltZSBBbGFybSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUlRUQ19SVFZSOyAJLy8gUmVhbC10aW1lIFZhbHVlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSVFRDX1JUU1I7IAkvLyBSZWFsLXRpbWUgU3RhdHVzIFJlZ2lzdGVyDQorfSBBVDkxU19SVFRDLCAqQVQ5MVBTX1JUVEM7DQogDQotLyogLS0tLS0tLS0gUlRUQ19SVE1SIDogKFJUVEMgT2Zmc2V0OiAweDApIFJlYWwtdGltZSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19SVFRDX1JUUFJFUyAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRkZGIDw8IDAgKSAvKiAoUlRUQykgUmVhbC10aW1lIFRpbWVyIFByZXNjYWxlciBWYWx1ZSAqLw0KLSNkZWZpbmUgQVQ5MUNfUlRUQ19BTE1JRU4gICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNiApICAgLyogKFJUVEMpIEFsYXJtIEludGVycnVwdCBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1JUVENfUlRUSU5DSUVOICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTcgKSAgIC8qIChSVFRDKSBSZWFsIFRpbWUgVGltZXIgSW5jcmVtZW50IEludGVycnVwdCBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1JUVENfUlRUUlNUICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTggKSAgIC8qIChSVFRDKSBSZWFsIFRpbWUgVGltZXIgUmVzdGFydCAqLw0KLS8qIC0tLS0tLS0tIFJUVENfUlRBUiA6IChSVFRDIE9mZnNldDogMHg0KSBSZWFsLXRpbWUgQWxhcm0gUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1JUVENfQUxNViAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMCApICAgIC8qIChSVFRDKSBBbGFybSBWYWx1ZSAqLw0KLS8qIC0tLS0tLS0tIFJUVENfUlRWUiA6IChSVFRDIE9mZnNldDogMHg4KSBDdXJyZW50IFJlYWwtdGltZSBWYWx1ZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfUlRUQ19DUlRWICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAwICkgICAgLyogKFJUVEMpIEN1cnJlbnQgUmVhbC10aW1lIFZhbHVlICovDQotLyogLS0tLS0tLS0gUlRUQ19SVFNSIDogKFJUVEMgT2Zmc2V0OiAweGMpIFJlYWwtdGltZSBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1JUVENfQUxNUyAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgIC8qIChSVFRDKSBSZWFsLXRpbWUgQWxhcm0gU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19SVFRDX1JUVElOQyAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEgKSAgICAvKiAoUlRUQykgUmVhbC10aW1lIFRpbWVyIEluY3JlbWVudCAqLw0KKy8vIC0tLS0tLS0tIFJUVENfUlRNUiA6IChSVFRDIE9mZnNldDogMHgwKSBSZWFsLXRpbWUgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1JUVENfUlRQUkVTICAgICAoKHVuc2lnbmVkIGludCkgMHhGRkZGIDw8ICAwKSAvLyAoUlRUQykgUmVhbC10aW1lIFRpbWVyIFByZXNjYWxlciBWYWx1ZQ0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19BTE1JRU4gICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChSVFRDKSBBbGFybSBJbnRlcnJ1cHQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19SVFRDX1JUVElOQ0lFTiAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNykgLy8gKFJUVEMpIFJlYWwgVGltZSBUaW1lciBJbmNyZW1lbnQgSW50ZXJydXB0IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19SVFRSU1QgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTgpIC8vIChSVFRDKSBSZWFsIFRpbWUgVGltZXIgUmVzdGFydA0KKy8vIC0tLS0tLS0tIFJUVENfUlRBUiA6IChSVFRDIE9mZnNldDogMHg0KSBSZWFsLXRpbWUgQWxhcm0gUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19SVFRDX0FMTVYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgMCkgLy8gKFJUVEMpIEFsYXJtIFZhbHVlDQorLy8gLS0tLS0tLS0gUlRUQ19SVFZSIDogKFJUVEMgT2Zmc2V0OiAweDgpIEN1cnJlbnQgUmVhbC10aW1lIFZhbHVlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19DUlRWICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDApIC8vIChSVFRDKSBDdXJyZW50IFJlYWwtdGltZSBWYWx1ZQ0KKy8vIC0tLS0tLS0tIFJUVENfUlRTUiA6IChSVFRDIE9mZnNldDogMHhjKSBSZWFsLXRpbWUgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19BTE1TICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChSVFRDKSBSZWFsLXRpbWUgQWxhcm0gU3RhdHVzDQorI2RlZmluZSBBVDkxQ19SVFRDX1JUVElOQyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFJUVEMpIFJlYWwtdGltZSBUaW1lciBJbmNyZW1lbnQNCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFBlcmlvZGljIEludGVydmFsIFRpbWVyIENvbnRyb2xsZXIgSW50ZXJmYWNlICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfUElUQw0KLXsNCi0gICAgQVQ5MV9SRUcgUElUQ19QSU1SOyAvKiBQZXJpb2QgSW50ZXJ2YWwgTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQSVRDX1BJU1I7IC8qIFBlcmlvZCBJbnRlcnZhbCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElUQ19QSVZSOyAvKiBQZXJpb2QgSW50ZXJ2YWwgVmFsdWUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUElUQ19QSUlSOyAvKiBQZXJpb2QgSW50ZXJ2YWwgSW1hZ2UgUmVnaXN0ZXIgKi8NCi19IEFUOTFTX1BJVEMsICogQVQ5MVBTX1BJVEM7DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQZXJpb2RpYyBJbnRlcnZhbCBUaW1lciBDb250cm9sbGVyIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1BJVEMgew0KKwlBVDkxX1JFRwkgUElUQ19QSU1SOyAJLy8gUGVyaW9kIEludGVydmFsIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJVENfUElTUjsgCS8vIFBlcmlvZCBJbnRlcnZhbCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBJVENfUElWUjsgCS8vIFBlcmlvZCBJbnRlcnZhbCBWYWx1ZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUElUQ19QSUlSOyAJLy8gUGVyaW9kIEludGVydmFsIEltYWdlIFJlZ2lzdGVyDQorfSBBVDkxU19QSVRDLCAqQVQ5MVBTX1BJVEM7DQogDQotLyogLS0tLS0tLS0gUElUQ19QSU1SIDogKFBJVEMgT2Zmc2V0OiAweDApIFBlcmlvZGljIEludGVydmFsIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1BJVENfUElWICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGRkZGIDw8IDAgKSAvKiAoUElUQykgUGVyaW9kaWMgSW50ZXJ2YWwgVmFsdWUgKi8NCi0jZGVmaW5lIEFUOTFDX1BJVENfUElURU4gICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjQgKSAgICAvKiAoUElUQykgUGVyaW9kaWMgSW50ZXJ2YWwgVGltZXIgRW5hYmxlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfUElUQ19QSVRJRU4gICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyNSApICAgIC8qIChQSVRDKSBQZXJpb2RpYyBJbnRlcnZhbCBUaW1lciBJbnRlcnJ1cHQgRW5hYmxlICovDQotLyogLS0tLS0tLS0gUElUQ19QSVNSIDogKFBJVEMgT2Zmc2V0OiAweDQpIFBlcmlvZGljIEludGVydmFsIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElUQ19QSVRTICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgICAgIC8qIChQSVRDKSBQZXJpb2RpYyBJbnRlcnZhbCBUaW1lciBTdGF0dXMgKi8NCi0vKiAtLS0tLS0tLSBQSVRDX1BJVlIgOiAoUElUQyBPZmZzZXQ6IDB4OCkgUGVyaW9kaWMgSW50ZXJ2YWwgVmFsdWUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1BJVENfQ1BJViAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGRkZGIDw8IDAgKSAvKiAoUElUQykgQ3VycmVudCBQZXJpb2RpYyBJbnRlcnZhbCBWYWx1ZSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElUQ19QSUNOVCAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RkZGIDw8IDIwICkgIC8qIChQSVRDKSBQZXJpb2RpYyBJbnRlcnZhbCBDb3VudGVyICovDQotLyogLS0tLS0tLS0gUElUQ19QSUlSIDogKFBJVEMgT2Zmc2V0OiAweGMpIFBlcmlvZGljIEludGVydmFsIEltYWdlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQorLy8gLS0tLS0tLS0gUElUQ19QSU1SIDogKFBJVEMgT2Zmc2V0OiAweDApIFBlcmlvZGljIEludGVydmFsIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QSVRDX1BJViAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGRkYgPDwgIDApIC8vIChQSVRDKSBQZXJpb2RpYyBJbnRlcnZhbCBWYWx1ZQ0KKyNkZWZpbmUgQVQ5MUNfUElUQ19QSVRFTiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjQpIC8vIChQSVRDKSBQZXJpb2RpYyBJbnRlcnZhbCBUaW1lciBFbmFibGVkDQorI2RlZmluZSBBVDkxQ19QSVRDX1BJVElFTiAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNSkgLy8gKFBJVEMpIFBlcmlvZGljIEludGVydmFsIFRpbWVyIEludGVycnVwdCBFbmFibGUNCisvLyAtLS0tLS0tLSBQSVRDX1BJU1IgOiAoUElUQyBPZmZzZXQ6IDB4NCkgUGVyaW9kaWMgSW50ZXJ2YWwgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUElUQ19QSVRTICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChQSVRDKSBQZXJpb2RpYyBJbnRlcnZhbCBUaW1lciBTdGF0dXMNCisvLyAtLS0tLS0tLSBQSVRDX1BJVlIgOiAoUElUQyBPZmZzZXQ6IDB4OCkgUGVyaW9kaWMgSW50ZXJ2YWwgVmFsdWUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QSVRDX0NQSVYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGRkYgPDwgIDApIC8vIChQSVRDKSBDdXJyZW50IFBlcmlvZGljIEludGVydmFsIFZhbHVlDQorI2RlZmluZSBBVDkxQ19QSVRDX1BJQ05UICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGIDw8IDIwKSAvLyAoUElUQykgUGVyaW9kaWMgSW50ZXJ2YWwgQ291bnRlcg0KKy8vIC0tLS0tLS0tIFBJVENfUElJUiA6IChQSVRDIE9mZnNldDogMHhjKSBQZXJpb2RpYyBJbnRlcnZhbCBJbWFnZSBSZWdpc3RlciAtLS0tLS0tLSANCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFdhdGNoZG9nIFRpbWVyIENvbnRyb2xsZXIgSW50ZXJmYWNlICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfV0RUQw0KLXsNCi0gICAgQVQ5MV9SRUcgV0RUQ19XRENSOyAvKiBXYXRjaGRvZyBDb250cm9sIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFdEVENfV0RNUjsgLyogV2F0Y2hkb2cgTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBXRFRDX1dEU1I7IC8qIFdhdGNoZG9nIFN0YXR1cyBSZWdpc3RlciAqLw0KLX0gQVQ5MVNfV0RUQywgKiBBVDkxUFNfV0RUQzsNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFdhdGNoZG9nIFRpbWVyIENvbnRyb2xsZXIgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfV0RUQyB7DQorCUFUOTFfUkVHCSBXRFRDX1dEQ1I7IAkvLyBXYXRjaGRvZyBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBXRFRDX1dETVI7IAkvLyBXYXRjaGRvZyBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBXRFRDX1dEU1I7IAkvLyBXYXRjaGRvZyBTdGF0dXMgUmVnaXN0ZXINCit9IEFUOTFTX1dEVEMsICpBVDkxUFNfV0RUQzsNCiANCi0vKiAtLS0tLS0tLSBXRFRDX1dEQ1IgOiAoV0RUQyBPZmZzZXQ6IDB4MCkgUGVyaW9kaWMgSW50ZXJ2YWwgSW1hZ2UgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1dEVENfV0RSU1RUICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgIC8qIChXRFRDKSBXYXRjaGRvZyBSZXN0YXJ0ICovDQotI2RlZmluZSBBVDkxQ19XRFRDX0tFWSAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRiA8PCAyNCApICAvKiAoV0RUQykgV2F0Y2hkb2cgS0VZIFBhc3N3b3JkICovDQotLyogLS0tLS0tLS0gV0RUQ19XRE1SIDogKFdEVEMgT2Zmc2V0OiAweDQpIFdhdGNoZG9nIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1dEVENfV0RWICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGRiA8PCAwICkgIC8qIChXRFRDKSBXYXRjaGRvZyBUaW1lciBSZXN0YXJ0ICovDQotI2RlZmluZSBBVDkxQ19XRFRDX1dERklFTiAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEyICkgICAvKiAoV0RUQykgV2F0Y2hkb2cgRmF1bHQgSW50ZXJydXB0IEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfV0RUQ19XRFJTVEVOICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMyApICAgLyogKFdEVEMpIFdhdGNoZG9nIFJlc2V0IEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfV0RUQ19XRFJQUk9DICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNCApICAgLyogKFdEVEMpIFdhdGNoZG9nIFRpbWVyIFJlc3RhcnQgKi8NCi0jZGVmaW5lIEFUOTFDX1dEVENfV0RESVMgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTUgKSAgIC8qIChXRFRDKSBXYXRjaGRvZyBEaXNhYmxlICovDQotI2RlZmluZSBBVDkxQ19XRFRDX1dERCAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRkYgPDwgMTYgKSAvKiAoV0RUQykgV2F0Y2hkb2cgRGVsdGEgVmFsdWUgKi8NCi0jZGVmaW5lIEFUOTFDX1dEVENfV0REQkdITFQgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjggKSAgIC8qIChXRFRDKSBXYXRjaGRvZyBEZWJ1ZyBIYWx0ICovDQotI2RlZmluZSBBVDkxQ19XRFRDX1dESURMRUhMVCAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDI5ICkgICAvKiAoV0RUQykgV2F0Y2hkb2cgSWRsZSBIYWx0ICovDQotLyogLS0tLS0tLS0gV0RUQ19XRFNSIDogKFdEVEMgT2Zmc2V0OiAweDgpIFdhdGNoZG9nIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfV0RUQ19XRFVORiAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgICAgLyogKFdEVEMpIFdhdGNoZG9nIFVuZGVyZmxvdyAqLw0KLSNkZWZpbmUgQVQ5MUNfV0RUQ19XREVSUiAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgICAgLyogKFdEVEMpIFdhdGNoZG9nIEVycm9yICovDQorLy8gLS0tLS0tLS0gV0RUQ19XRENSIDogKFdEVEMgT2Zmc2V0OiAweDApIFBlcmlvZGljIEludGVydmFsIEltYWdlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRFJTVFQgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChXRFRDKSBXYXRjaGRvZyBSZXN0YXJ0DQorI2RlZmluZSBBVDkxQ19XRFRDX0tFWSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgMjQpIC8vIChXRFRDKSBXYXRjaGRvZyBLRVkgUGFzc3dvcmQNCisvLyAtLS0tLS0tLSBXRFRDX1dETVIgOiAoV0RUQyBPZmZzZXQ6IDB4NCkgV2F0Y2hkb2cgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1dEVENfV0RWICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRkYgPDwgIDApIC8vIChXRFRDKSBXYXRjaGRvZyBUaW1lciBSZXN0YXJ0DQorI2RlZmluZSBBVDkxQ19XRFRDX1dERklFTiAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLy8gKFdEVEMpIFdhdGNoZG9nIEZhdWx0IEludGVycnVwdCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1dEVENfV0RSU1RFTiAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEzKSAvLyAoV0RUQykgV2F0Y2hkb2cgUmVzZXQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19XRFRDX1dEUlBST0MgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNCkgLy8gKFdEVEMpIFdhdGNoZG9nIFRpbWVyIFJlc3RhcnQNCisjZGVmaW5lIEFUOTFDX1dEVENfV0RESVMgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE1KSAvLyAoV0RUQykgV2F0Y2hkb2cgRGlzYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XREQgICAgICAgICgodW5zaWduZWQgaW50KSAweEZGRiA8PCAxNikgLy8gKFdEVEMpIFdhdGNoZG9nIERlbHRhIFZhbHVlDQorI2RlZmluZSBBVDkxQ19XRFRDX1dEREJHSExUICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyOCkgLy8gKFdEVEMpIFdhdGNoZG9nIERlYnVnIEhhbHQNCisjZGVmaW5lIEFUOTFDX1dEVENfV0RJRExFSExUICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI5KSAvLyAoV0RUQykgV2F0Y2hkb2cgSWRsZSBIYWx0DQorLy8gLS0tLS0tLS0gV0RUQ19XRFNSIDogKFdEVEMgT2Zmc2V0OiAweDgpIFdhdGNoZG9nIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1dEVENfV0RVTkYgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoV0RUQykgV2F0Y2hkb2cgVW5kZXJmbG93DQorI2RlZmluZSBBVDkxQ19XRFRDX1dERVJSICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFdEVEMpIFdhdGNoZG9nIEVycm9yDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBWb2x0YWdlIFJlZ3VsYXRvciBNb2RlIENvbnRyb2xsZXIgSW50ZXJmYWNlICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfVlJFRw0KLXsNCi0gICAgQVQ5MV9SRUcgVlJFR19NUjsgLyogVm9sdGFnZSBSZWd1bGF0b3IgTW9kZSBSZWdpc3RlciAqLw0KLX0gQVQ5MVNfVlJFRywgKiBBVDkxUFNfVlJFRzsNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFZvbHRhZ2UgUmVndWxhdG9yIE1vZGUgQ29udHJvbGxlciBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19WUkVHIHsNCisJQVQ5MV9SRUcJIFZSRUdfTVI7IAkvLyBWb2x0YWdlIFJlZ3VsYXRvciBNb2RlIFJlZ2lzdGVyDQorfSBBVDkxU19WUkVHLCAqQVQ5MVBTX1ZSRUc7DQogDQotLyogLS0tLS0tLS0gVlJFR19NUiA6IChWUkVHIE9mZnNldDogMHgwKSBWb2x0YWdlIFJlZ3VsYXRvciBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19WUkVHX1BTVERCWSAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAvKiAoVlJFRykgVm9sdGFnZSBSZWd1bGF0b3IgUG93ZXIgU3RhbmRieSBNb2RlICovDQorLy8gLS0tLS0tLS0gVlJFR19NUiA6IChWUkVHIE9mZnNldDogMHgwKSBWb2x0YWdlIFJlZ3VsYXRvciBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVlJFR19QU1REQlkgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChWUkVHKSBWb2x0YWdlIFJlZ3VsYXRvciBQb3dlciBTdGFuZGJ5IE1vZGUNCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIE1lbW9yeSBDb250cm9sbGVyIEludGVyZmFjZSAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotdHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX01DDQotew0KLSAgICBBVDkxX1JFRyBNQ19SQ1I7ICAgICAgICAgIC8qIE1DIFJlbWFwIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgTUNfQVNSOyAgICAgICAgICAvKiBNQyBBYm9ydCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgTUNfQUFTUjsgICAgICAgICAvKiBNQyBBYm9ydCBBZGRyZXNzIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDBbIDIxIF07IC8qICovDQotICAgIEFUOTFfUkVHIE1DX0ZNUjsgICAgICAgICAgLyogTUMgRmxhc2ggTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBNQ19GQ1I7ICAgICAgICAgIC8qIE1DIEZsYXNoIENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgTUNfRlNSOyAgICAgICAgICAvKiBNQyBGbGFzaCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi19IEFUOTFTX01DLCAqIEFUOTFQU19NQzsNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIE1lbW9yeSBDb250cm9sbGVyIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX01DIHsNCisJQVQ5MV9SRUcJIE1DX1JDUjsgCS8vIE1DIFJlbWFwIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIE1DX0FTUjsgCS8vIE1DIEFib3J0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgTUNfQUFTUjsgCS8vIE1DIEFib3J0IEFkZHJlc3MgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbMjFdOyAJLy8gDQorCUFUOTFfUkVHCSBNQ19GTVI7IAkvLyBNQyBGbGFzaCBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBNQ19GQ1I7IAkvLyBNQyBGbGFzaCBDb21tYW5kIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBNQ19GU1I7IAkvLyBNQyBGbGFzaCBTdGF0dXMgUmVnaXN0ZXINCit9IEFUOTFTX01DLCAqQVQ5MVBTX01DOw0KIA0KLS8qIC0tLS0tLS0tIE1DX1JDUiA6IChNQyBPZmZzZXQ6IDB4MCkgTUMgUmVtYXAgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfUkNCICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgIC8qIChNQykgUmVtYXAgQ29tbWFuZCBCaXQgKi8NCi0vKiAtLS0tLS0tLSBNQ19BU1IgOiAoTUMgT2Zmc2V0OiAweDQpIE1DIEFib3J0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfVU5EQUREICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgIC8qIChNQykgVW5kZWZpbmVkIEFkZGVzcyBBYm9ydCBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX01JU0FERCAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgICAvKiAoTUMpIE1pc2FsaWduZWQgQWRkZXNzIEFib3J0IFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfQUJUU1ogICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDggKSAgIC8qIChNQykgQWJvcnQgU2l6ZSBTdGF0dXMgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19NQ19BQlRTWl9CWVRFICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCA4ICkgICAvKiAoTUMpIEJ5dGUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19NQ19BQlRTWl9IV09SRCAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgICAvKiAoTUMpIEhhbGYtd29yZCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX01DX0FCVFNaX1dPUkQgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDggKSAgIC8qIChNQykgV29yZCAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfQUJUVFlQICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDEwICkgIC8qIChNQykgQWJvcnQgVHlwZSBTdGF0dXMgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19NQ19BQlRUWVBfREFUQVIgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAxMCApICAvKiAoTUMpIERhdGEgUmVhZCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX01DX0FCVFRZUF9EQVRBVyAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEwICkgIC8qIChNQykgRGF0YSBXcml0ZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX01DX0FCVFRZUF9GRVRDSCAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDEwICkgIC8qIChNQykgQ29kZSBGZXRjaCAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTVNUMCAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE2ICkgIC8qIChNQykgTWFzdGVyIDAgQWJvcnQgU291cmNlICovDQotI2RlZmluZSBBVDkxQ19NQ19NU1QxICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTcgKSAgLyogKE1DKSBNYXN0ZXIgMSBBYm9ydCBTb3VyY2UgKi8NCi0jZGVmaW5lIEFUOTFDX01DX1NWTVNUMCAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyNCApICAvKiAoTUMpIFNhdmVkIE1hc3RlciAwIEFib3J0IFNvdXJjZSAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfU1ZNU1QxICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDI1ICkgIC8qIChNQykgU2F2ZWQgTWFzdGVyIDEgQWJvcnQgU291cmNlICovDQotLyogLS0tLS0tLS0gTUNfRk1SIDogKE1DIE9mZnNldDogMHg2MCkgTUMgRmxhc2ggTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfRlJEWSAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgIC8qIChNQykgRmxhc2ggUmVhZHkgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0xPQ0tFICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyICkgICAvKiAoTUMpIExvY2sgRXJyb3IgKi8NCi0jZGVmaW5lIEFUOTFDX01DX1BST0dFICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzICkgICAvKiAoTUMpIFByb2dyYW1taW5nIEVycm9yICovDQotI2RlZmluZSBBVDkxQ19NQ19ORUJQICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNyApICAgLyogKE1DKSBObyBFcmFzZSBCZWZvcmUgUHJvZ3JhbW1pbmcgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0ZXUyAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCA4ICkgICAvKiAoTUMpIEZsYXNoIFdhaXQgU3RhdGUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19NQ19GV1NfMEZXUyAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCA4ICkgICAvKiAoTUMpIDEgY3ljbGUgZm9yIFJlYWQsIDIgZm9yIFdyaXRlIG9wZXJhdGlvbnMgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19NQ19GV1NfMUZXUyAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgICAvKiAoTUMpIDIgY3ljbGVzIGZvciBSZWFkLCAzIGZvciBXcml0ZSBvcGVyYXRpb25zICovDQotI2RlZmluZSAgICAgQVQ5MUNfTUNfRldTXzJGV1MgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgOCApICAgLyogKE1DKSAzIGN5Y2xlcyBmb3IgUmVhZCwgNCBmb3IgV3JpdGUgb3BlcmF0aW9ucyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX01DX0ZXU18zRldTICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDggKSAgIC8qIChNQykgNCBjeWNsZXMgZm9yIFJlYWQsIDQgZm9yIFdyaXRlIG9wZXJhdGlvbnMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0ZNQ04gICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RkYgPDwgMTYgKSAvKiAoTUMpIEZsYXNoIE1pY3Jvc2Vjb25kIEN5Y2xlIE51bWJlciAqLw0KLS8qIC0tLS0tLS0tIE1DX0ZDUiA6IChNQyBPZmZzZXQ6IDB4NjQpIE1DIEZsYXNoIENvbW1hbmQgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX01DX0ZDTUQgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RiA8PCAwICkgICAvKiAoTUMpIEZsYXNoIENvbW1hbmQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19NQ19GQ01EX1NUQVJUX1BST0cgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSApICAgICAgICAvKiAoTUMpIFN0YXJ0cyB0aGUgcHJvZ3JhbW1pbmcgb2YgdGggZXBhZ2Ugc3BlY2lmaWVkIGJ5IFBBR0VOLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX01DX0ZDTURfTE9DSyAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyICkgICAgICAgIC8qIChNQykgU3RhcnRzIGEgbG9jayBzZXF1ZW5jZSBvZiB0aGUgc2VjdG9yIGRlZmluZWQgYnkgdGhlIGJpdHMgNCB0byA3IG9mIHRoZSBmaWVsZCBQQUdFTi4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19NQ19GQ01EX1BST0dfQU5EX0xPQ0sgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyApICAgICAgICAvKiAoTUMpIFRoZSBsb2NrIHNlcXVlbmNlIGF1dG9tYXRpY2FsbHkgaGFwcGVucyBhZnRlciB0aGUgcHJvZ3JhbW1pbmcgc2VxdWVuY2UgaXMgY29tcGxldGVkLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX01DX0ZDTURfVU5MT0NLICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg0ICkgICAgICAgIC8qIChNQykgU3RhcnRzIGFuIHVubG9jayBzZXF1ZW5jZSBvZiB0aGUgc2VjdG9yIGRlZmluZWQgYnkgdGhlIGJpdHMgNCB0byA3IG9mIHRoZSBmaWVsZCBQQUdFTi4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19NQ19GQ01EX0VSQVNFX0FMTCAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4OCApICAgICAgICAvKiAoTUMpIFN0YXJ0cyB0aGUgZXJhc2Ugb2YgdGhlIGVudGlyZSBmbGFzaC5JZiBhdCBsZWFzdCBhIHBhZ2UgaXMgbG9ja2VkLCB0aGUgY29tbWFuZCBpcyBjYW5jZWxsZWQuICovDQotI2RlZmluZSAgICAgQVQ5MUNfTUNfRkNNRF9TRVRfR1BfTlZNICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEIgKSAgICAgICAgLyogKE1DKSBTZXQgR2VuZXJhbCBQdXJwb3NlIE5WTSBiaXRzLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX01DX0ZDTURfQ0xSX0dQX05WTSAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhEICkgICAgICAgIC8qIChNQykgQ2xlYXIgR2VuZXJhbCBQdXJwb3NlIE5WTSBiaXRzLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX01DX0ZDTURfU0VUX1NFQ1VSSVRZICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGICkgICAgICAgIC8qIChNQykgU2V0IFNlY3VyaXR5IEJpdC4gKi8NCi0jZGVmaW5lIEFUOTFDX01DX1BBR0VOICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4M0ZGIDw8IDggKSAvKiAoTUMpIFBhZ2UgTnVtYmVyICovDQotI2RlZmluZSBBVDkxQ19NQ19LRVkgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGIDw8IDI0ICkgLyogKE1DKSBXcml0aW5nIFByb3RlY3QgS2V5ICovDQotLyogLS0tLS0tLS0gTUNfRlNSIDogKE1DIE9mZnNldDogMHg2OCkgTUMgRmxhc2ggQ29tbWFuZCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfU0VDVVJJVFkgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDQgKSAgIC8qIChNQykgU2VjdXJpdHkgQml0IFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfR1BOVk0wICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDggKSAgIC8qIChNQykgU2VjdG9yIDAgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0dQTlZNMSAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA5ICkgICAvKiAoTUMpIFNlY3RvciAxIExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19HUE5WTTIgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTAgKSAgLyogKE1DKSBTZWN0b3IgMiBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfR1BOVk0zICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDExICkgIC8qIChNQykgU2VjdG9yIDMgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0dQTlZNNCAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMiApICAvKiAoTUMpIFNlY3RvciA0IExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19HUE5WTTUgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTMgKSAgLyogKE1DKSBTZWN0b3IgNSBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfR1BOVk02ICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE0ICkgIC8qIChNQykgU2VjdG9yIDYgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0dQTlZNNyAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNSApICAvKiAoTUMpIFNlY3RvciA3IExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19MT0NLUzAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTYgKSAgLyogKE1DKSBTZWN0b3IgMCBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE3ICkgIC8qIChNQykgU2VjdG9yIDEgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0xPQ0tTMiAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxOCApICAvKiAoTUMpIFNlY3RvciAyIExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19MT0NLUzMgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTkgKSAgLyogKE1DKSBTZWN0b3IgMyBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTE9DS1M0ICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIwICkgIC8qIChNQykgU2VjdG9yIDQgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0xPQ0tTNSAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyMSApICAvKiAoTUMpIFNlY3RvciA1IExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19MT0NLUzYgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjIgKSAgLyogKE1DKSBTZWN0b3IgNiBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTE9DS1M3ICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIzICkgIC8qIChNQykgU2VjdG9yIDcgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0xPQ0tTOCAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyNCApICAvKiAoTUMpIFNlY3RvciA4IExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19MT0NLUzkgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjUgKSAgLyogKE1DKSBTZWN0b3IgOSBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxMCAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDI2ICkgIC8qIChNQykgU2VjdG9yIDEwIExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19MT0NLUzExICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjcgKSAgLyogKE1DKSBTZWN0b3IgMTEgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0xPQ0tTMTIgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyOCApICAvKiAoTUMpIFNlY3RvciAxMiBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxMyAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDI5ICkgIC8qIChNQykgU2VjdG9yIDEzIExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19MT0NLUzE0ICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMzAgKSAgLyogKE1DKSBTZWN0b3IgMTQgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0xPQ0tTMTUgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzMSApICAvKiAoTUMpIFNlY3RvciAxNSBMb2NrIFN0YXR1cyAqLw0KKy8vIC0tLS0tLS0tIE1DX1JDUiA6IChNQyBPZmZzZXQ6IDB4MCkgTUMgUmVtYXAgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX01DX1JDQiAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoTUMpIFJlbWFwIENvbW1hbmQgQml0DQorLy8gLS0tLS0tLS0gTUNfQVNSIDogKE1DIE9mZnNldDogMHg0KSBNQyBBYm9ydCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19NQ19VTkRBREQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKE1DKSBVbmRlZmluZWQgQWRkZXNzIEFib3J0IFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTUlTQUREICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChNQykgTWlzYWxpZ25lZCBBZGRlc3MgQWJvcnQgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19BQlRTWiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKE1DKSBBYm9ydCBTaXplIFN0YXR1cw0KKyNkZWZpbmUgCUFUOTFDX01DX0FCVFNaX0JZVEUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDgpIC8vIChNQykgQnl0ZQ0KKyNkZWZpbmUgCUFUOTFDX01DX0FCVFNaX0hXT1JEICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChNQykgSGFsZi13b3JkDQorI2RlZmluZSAJQVQ5MUNfTUNfQUJUU1pfV09SRCAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgOCkgLy8gKE1DKSBXb3JkDQorI2RlZmluZSBBVDkxQ19NQ19BQlRUWVAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxMCkgLy8gKE1DKSBBYm9ydCBUeXBlIFN0YXR1cw0KKyNkZWZpbmUgCUFUOTFDX01DX0FCVFRZUF9EQVRBUiAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDEwKSAvLyAoTUMpIERhdGEgUmVhZA0KKyNkZWZpbmUgCUFUOTFDX01DX0FCVFRZUF9EQVRBVyAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEwKSAvLyAoTUMpIERhdGEgV3JpdGUNCisjZGVmaW5lIAlBVDkxQ19NQ19BQlRUWVBfRkVUQ0ggICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxMCkgLy8gKE1DKSBDb2RlIEZldGNoDQorI2RlZmluZSBBVDkxQ19NQ19NU1QwICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKE1DKSBNYXN0ZXIgMCBBYm9ydCBTb3VyY2UNCisjZGVmaW5lIEFUOTFDX01DX01TVDEgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE3KSAvLyAoTUMpIE1hc3RlciAxIEFib3J0IFNvdXJjZQ0KKyNkZWZpbmUgQVQ5MUNfTUNfU1ZNU1QwICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjQpIC8vIChNQykgU2F2ZWQgTWFzdGVyIDAgQWJvcnQgU291cmNlDQorI2RlZmluZSBBVDkxQ19NQ19TVk1TVDEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNSkgLy8gKE1DKSBTYXZlZCBNYXN0ZXIgMSBBYm9ydCBTb3VyY2UNCisvLyAtLS0tLS0tLSBNQ19GTVIgOiAoTUMgT2Zmc2V0OiAweDYwKSBNQyBGbGFzaCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfTUNfRlJEWSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChNQykgRmxhc2ggUmVhZHkNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tFICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoTUMpIExvY2sgRXJyb3INCisjZGVmaW5lIEFUOTFDX01DX1BST0dFICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoTUMpIFByb2dyYW1taW5nIEVycm9yDQorI2RlZmluZSBBVDkxQ19NQ19ORUJQICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKE1DKSBObyBFcmFzZSBCZWZvcmUgUHJvZ3JhbW1pbmcNCisjZGVmaW5lIEFUOTFDX01DX0ZXUyAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA4KSAvLyAoTUMpIEZsYXNoIFdhaXQgU3RhdGUNCisjZGVmaW5lIAlBVDkxQ19NQ19GV1NfMEZXUyAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgOCkgLy8gKE1DKSAxIGN5Y2xlIGZvciBSZWFkLCAyIGZvciBXcml0ZSBvcGVyYXRpb25zDQorI2RlZmluZSAJQVQ5MUNfTUNfRldTXzFGV1MgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChNQykgMiBjeWNsZXMgZm9yIFJlYWQsIDMgZm9yIFdyaXRlIG9wZXJhdGlvbnMNCisjZGVmaW5lIAlBVDkxQ19NQ19GV1NfMkZXUyAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgOCkgLy8gKE1DKSAzIGN5Y2xlcyBmb3IgUmVhZCwgNCBmb3IgV3JpdGUgb3BlcmF0aW9ucw0KKyNkZWZpbmUgCUFUOTFDX01DX0ZXU18zRldTICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA4KSAvLyAoTUMpIDQgY3ljbGVzIGZvciBSZWFkLCA0IGZvciBXcml0ZSBvcGVyYXRpb25zDQorI2RlZmluZSBBVDkxQ19NQ19GTUNOICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgMTYpIC8vIChNQykgRmxhc2ggTWljcm9zZWNvbmQgQ3ljbGUgTnVtYmVyDQorLy8gLS0tLS0tLS0gTUNfRkNSIDogKE1DIE9mZnNldDogMHg2NCkgTUMgRmxhc2ggQ29tbWFuZCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX01DX0ZDTUQgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8ICAwKSAvLyAoTUMpIEZsYXNoIENvbW1hbmQNCisjZGVmaW5lIAlBVDkxQ19NQ19GQ01EX1NUQVJUX1BST0cgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEpIC8vIChNQykgU3RhcnRzIHRoZSBwcm9ncmFtbWluZyBvZiB0aCBlcGFnZSBzcGVjaWZpZWQgYnkgUEFHRU4uDQorI2RlZmluZSAJQVQ5MUNfTUNfRkNNRF9MT0NLICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyKSAvLyAoTUMpIFN0YXJ0cyBhIGxvY2sgc2VxdWVuY2Ugb2YgdGhlIHNlY3RvciBkZWZpbmVkIGJ5IHRoZSBiaXRzIDQgdG8gNyBvZiB0aGUgZmllbGQgUEFHRU4uDQorI2RlZmluZSAJQVQ5MUNfTUNfRkNNRF9QUk9HX0FORF9MT0NLICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzKSAvLyAoTUMpIFRoZSBsb2NrIHNlcXVlbmNlIGF1dG9tYXRpY2FsbHkgaGFwcGVucyBhZnRlciB0aGUgcHJvZ3JhbW1pbmcgc2VxdWVuY2UgaXMgY29tcGxldGVkLg0KKyNkZWZpbmUgCUFUOTFDX01DX0ZDTURfVU5MT0NLICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NCkgLy8gKE1DKSBTdGFydHMgYW4gdW5sb2NrIHNlcXVlbmNlIG9mIHRoZSBzZWN0b3IgZGVmaW5lZCBieSB0aGUgYml0cyA0IHRvIDcgb2YgdGhlIGZpZWxkIFBBR0VOLg0KKyNkZWZpbmUgCUFUOTFDX01DX0ZDTURfRVJBU0VfQUxMICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4OCkgLy8gKE1DKSBTdGFydHMgdGhlIGVyYXNlIG9mIHRoZSBlbnRpcmUgZmxhc2guSWYgYXQgbGVhc3QgYSBwYWdlIGlzIGxvY2tlZCwgdGhlIGNvbW1hbmQgaXMgY2FuY2VsbGVkLg0KKyNkZWZpbmUgCUFUOTFDX01DX0ZDTURfU0VUX0dQX05WTSAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4QikgLy8gKE1DKSBTZXQgR2VuZXJhbCBQdXJwb3NlIE5WTSBiaXRzLg0KKyNkZWZpbmUgCUFUOTFDX01DX0ZDTURfQ0xSX0dQX05WTSAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RCkgLy8gKE1DKSBDbGVhciBHZW5lcmFsIFB1cnBvc2UgTlZNIGJpdHMuDQorI2RlZmluZSAJQVQ5MUNfTUNfRkNNRF9TRVRfU0VDVVJJVFkgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGKSAvLyAoTUMpIFNldCBTZWN1cml0eSBCaXQuDQorI2RlZmluZSBBVDkxQ19NQ19QQUdFTiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4M0ZGIDw8ICA4KSAvLyAoTUMpIFBhZ2UgTnVtYmVyDQorI2RlZmluZSBBVDkxQ19NQ19LRVkgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgMjQpIC8vIChNQykgV3JpdGluZyBQcm90ZWN0IEtleQ0KKy8vIC0tLS0tLS0tIE1DX0ZTUiA6IChNQyBPZmZzZXQ6IDB4NjgpIE1DIEZsYXNoIENvbW1hbmQgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19NQ19TRUNVUklUWSAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKE1DKSBTZWN1cml0eSBCaXQgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19HUE5WTTAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKE1DKSBTZWN0b3IgMCBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfR1BOVk0xICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChNQykgU2VjdG9yIDEgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0dQTlZNMiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEwKSAvLyAoTUMpIFNlY3RvciAyIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19HUE5WTTMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMSkgLy8gKE1DKSBTZWN0b3IgMyBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfR1BOVk00ICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8vIChNQykgU2VjdG9yIDQgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0dQTlZNNSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEzKSAvLyAoTUMpIFNlY3RvciA1IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19HUE5WTTYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNCkgLy8gKE1DKSBTZWN0b3IgNiBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfR1BOVk03ICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTUpIC8vIChNQykgU2VjdG9yIDcgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTMCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoTUMpIFNlY3RvciAwIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNykgLy8gKE1DKSBTZWN0b3IgMSBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MyICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTgpIC8vIChNQykgU2VjdG9yIDIgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTMyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE5KSAvLyAoTUMpIFNlY3RvciAzIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMCkgLy8gKE1DKSBTZWN0b3IgNCBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1M1ICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjEpIC8vIChNQykgU2VjdG9yIDUgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTNiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIyKSAvLyAoTUMpIFNlY3RvciA2IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzcgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMykgLy8gKE1DKSBTZWN0b3IgNyBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1M4ICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjQpIC8vIChNQykgU2VjdG9yIDggTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTOSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI1KSAvLyAoTUMpIFNlY3RvciA5IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzEwICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNikgLy8gKE1DKSBTZWN0b3IgMTAgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTMTEgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI3KSAvLyAoTUMpIFNlY3RvciAxMSBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxMiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjgpIC8vIChNQykgU2VjdG9yIDEyIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzEzICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyOSkgLy8gKE1DKSBTZWN0b3IgMTMgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTMTQgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDMwKSAvLyAoTUMpIFNlY3RvciAxNCBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxNSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMzEpIC8vIChNQykgU2VjdG9yIDE1IExvY2sgU3RhdHVzDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBTZXJpYWwgUGFyYWxsZWwgSW50ZXJmYWNlICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfU1BJDQotew0KLSAgICBBVDkxX1JFRyBTUElfQ1I7ICAgICAgICAgIC8qIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1BJX01SOyAgICAgICAgICAvKiBNb2RlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNQSV9SRFI7ICAgICAgICAgLyogUmVjZWl2ZSBEYXRhIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNQSV9URFI7ICAgICAgICAgLyogVHJhbnNtaXQgRGF0YSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTUElfU1I7ICAgICAgICAgIC8qIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTUElfSUVSOyAgICAgICAgIC8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1BJX0lEUjsgICAgICAgICAvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTUElfSU1SOyAgICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMFsgNCBdOyAgLyogKi8NCi0gICAgQVQ5MV9SRUcgU1BJX0NTUlsgNCBdOyAgICAvKiBDaGlwIFNlbGVjdCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDFbIDQ4IF07IC8qICovDQotICAgIEFUOTFfUkVHIFNQSV9SUFI7ICAgICAgICAgLyogUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNQSV9SQ1I7ICAgICAgICAgLyogUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNQSV9UUFI7ICAgICAgICAgLyogVHJhbnNtaXQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTUElfVENSOyAgICAgICAgIC8qIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1BJX1JOUFI7ICAgICAgICAvKiBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTUElfUk5DUjsgICAgICAgIC8qIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNQSV9UTlBSOyAgICAgICAgLyogVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNQSV9UTkNSOyAgICAgICAgLyogVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNQSV9QVENSOyAgICAgICAgLyogUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1BJX1BUU1I7ICAgICAgICAvKiBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotfSBBVDkxU19TUEksICogQVQ5MVBTX1NQSTsNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFNlcmlhbCBQYXJhbGxlbCBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19TUEkgew0KKwlBVDkxX1JFRwkgU1BJX0NSOyAJLy8gQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX01SOyAJLy8gTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX1JEUjsgCS8vIFJlY2VpdmUgRGF0YSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX1REUjsgCS8vIFRyYW5zbWl0IERhdGEgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9TUjsgCS8vIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX0lFUjsgCS8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbNF07IAkvLyANCisJQVQ5MV9SRUcJIFNQSV9DU1JbNF07IAkvLyBDaGlwIFNlbGVjdCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzQ4XTsgCS8vIA0KKwlBVDkxX1JFRwkgU1BJX1JQUjsgCS8vIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX1JDUjsgCS8vIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX1RQUjsgCS8vIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9UQ1I7IAkvLyBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTUElfUk5QUjsgCS8vIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTUElfUk5DUjsgCS8vIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTUElfVE5QUjsgCS8vIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1BJX1ROQ1I7IAkvLyBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9QVENSOyAJLy8gUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNQSV9QVFNSOyAJLy8gUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KK30gQVQ5MVNfU1BJLCAqQVQ5MVBTX1NQSTsNCiANCi0vKiAtLS0tLS0tLSBTUElfQ1IgOiAoU1BJIE9mZnNldDogMHgwKSBTUEkgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX1NQSUVOICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgICAvKiAoU1BJKSBTUEkgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19TUElfU1BJRElTICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAgIC8qIChTUEkpIFNQSSBEaXNhYmxlICovDQotI2RlZmluZSBBVDkxQ19TUElfU1dSU1QgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNyApICAgIC8qIChTUEkpIFNQSSBTb2Z0d2FyZSByZXNldCAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX0xBU1RYRkVSICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDI0ICkgICAvKiAoU1BJKSBTUEkgTGFzdCBUcmFuc2ZlciAqLw0KLS8qIC0tLS0tLS0tIFNQSV9NUiA6IChTUEkgT2Zmc2V0OiAweDQpIFNQSSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19TUElfTVNUUiAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgIC8qIChTUEkpIE1hc3Rlci9TbGF2ZSBNb2RlICovDQotI2RlZmluZSBBVDkxQ19TUElfUFMgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAgIC8qIChTUEkpIFBlcmlwaGVyYWwgU2VsZWN0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1BJX1BTX0ZJWEVEICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMSApICAgIC8qIChTUEkpIEZpeGVkIFBlcmlwaGVyYWwgU2VsZWN0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1BJX1BTX1ZBUklBQkxFICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAgIC8qIChTUEkpIFZhcmlhYmxlIFBlcmlwaGVyYWwgU2VsZWN0ICovDQotI2RlZmluZSBBVDkxQ19TUElfUENTREVDICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMiApICAgIC8qIChTUEkpIENoaXAgU2VsZWN0IERlY29kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX0ZESVYgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDMgKSAgICAvKiAoU1BJKSBDbG9jayBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9NT0RGRElTICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA0ICkgICAgLyogKFNQSSkgTW9kZSBGYXVsdCBEZXRlY3Rpb24gKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9MTEIgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA3ICkgICAgLyogKFNQSSkgQ2xvY2sgU2VsZWN0aW9uICovDQotI2RlZmluZSBBVDkxQ19TUElfUENTICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEYgPDwgMTYgKSAgIC8qIChTUEkpIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9ETFlCQ1MgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RkYgPDwgMjQgKSAgLyogKFNQSSkgRGVsYXkgQmV0d2VlbiBDaGlwIFNlbGVjdHMgKi8NCi0vKiAtLS0tLS0tLSBTUElfUkRSIDogKFNQSSBPZmZzZXQ6IDB4OCkgUmVjZWl2ZSBEYXRhIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19TUElfUkQgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGRkYgPDwgMCApIC8qIChTUEkpIFJlY2VpdmUgRGF0YSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX1JQQ1MgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGIDw8IDE2ICkgICAvKiAoU1BJKSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IFN0YXR1cyAqLw0KLS8qIC0tLS0tLS0tIFNQSV9URFIgOiAoU1BJIE9mZnNldDogMHhjKSBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19TUElfVEQgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGRkYgPDwgMCApIC8qIChTUEkpIFRyYW5zbWl0IERhdGEgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9UUENTICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RiA8PCAxNiApICAgLyogKFNQSSkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCBTdGF0dXMgKi8NCi0vKiAtLS0tLS0tLSBTUElfU1IgOiAoU1BJIE9mZnNldDogMHgxMCkgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19TUElfUkRSRiAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgIC8qIChTUEkpIFJlY2VpdmUgRGF0YSBSZWdpc3RlciBGdWxsICovDQotI2RlZmluZSBBVDkxQ19TUElfVERSRSAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAgIC8qIChTUEkpIFRyYW5zbWl0IERhdGEgUmVnaXN0ZXIgRW1wdHkgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9NT0RGICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyICkgICAgLyogKFNQSSkgTW9kZSBGYXVsdCBFcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX09WUkVTICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDMgKSAgICAvKiAoU1BJKSBPdmVycnVuIEVycm9yIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX0VORFJYICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDQgKSAgICAvKiAoU1BJKSBFbmQgb2YgUmVjZWl2ZXIgVHJhbnNmZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9FTkRUWCAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA1ICkgICAgLyogKFNQSSkgRW5kIG9mIFJlY2VpdmVyIFRyYW5zZmVyICovDQotI2RlZmluZSBBVDkxQ19TUElfUlhCVUZGICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNiApICAgIC8qIChTUEkpIFJYQlVGRiBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9UWEJVRkUgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA3ICkgICAgLyogKFNQSSkgVFhCVUZFIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX05TU1IgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDggKSAgICAvKiAoU1BJKSBOU1NSIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX1RYRU1QVFkgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDkgKSAgICAvKiAoU1BJKSBUWEVNUFRZIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX1NQSUVOUyAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE2ICkgICAvKiAoU1BJKSBFbmFibGUgU3RhdHVzICovDQotLyogLS0tLS0tLS0gU1BJX0lFUiA6IChTUEkgT2Zmc2V0OiAweDE0KSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gU1BJX0lEUiA6IChTUEkgT2Zmc2V0OiAweDE4KSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFNQSV9JTVIgOiAoU1BJIE9mZnNldDogMHgxYykgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBTUElfQ1NSIDogKFNQSSBPZmZzZXQ6IDB4MzApIENoaXAgU2VsZWN0IFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19TUElfQ1BPTCAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgICAvKiAoU1BJKSBDbG9jayBQb2xhcml0eSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX05DUEhBICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAgLyogKFNQSSkgQ2xvY2sgUGhhc2UgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9DU0FBVCAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDMgKSAgIC8qIChTUEkpIENoaXAgU2VsZWN0IEFjdGl2ZSBBZnRlciBUcmFuc2ZlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX0JJVFMgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEYgPDwgNCApICAgLyogKFNQSSkgQml0cyBQZXIgVHJhbnNmZXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TUElfQklUU184ICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDQgKSAgIC8qIChTUEkpIDggQml0cyBQZXIgdHJhbnNmZXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TUElfQklUU185ICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDQgKSAgIC8qIChTUEkpIDkgQml0cyBQZXIgdHJhbnNmZXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TUElfQklUU18xMCAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDQgKSAgIC8qIChTUEkpIDEwIEJpdHMgUGVyIHRyYW5zZmVyICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1BJX0JJVFNfMTEgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCA0ICkgICAvKiAoU1BJKSAxMSBCaXRzIFBlciB0cmFuc2ZlciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NQSV9CSVRTXzEyICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDQgPDwgNCApICAgLyogKFNQSSkgMTIgQml0cyBQZXIgdHJhbnNmZXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TUElfQklUU18xMyAgICAoICggdW5zaWduZWQgaW50ICkgMHg1IDw8IDQgKSAgIC8qIChTUEkpIDEzIEJpdHMgUGVyIHRyYW5zZmVyICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1BJX0JJVFNfMTQgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NiA8PCA0ICkgICAvKiAoU1BJKSAxNCBCaXRzIFBlciB0cmFuc2ZlciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NQSV9CSVRTXzE1ICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDcgPDwgNCApICAgLyogKFNQSSkgMTUgQml0cyBQZXIgdHJhbnNmZXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TUElfQklUU18xNiAgICAoICggdW5zaWduZWQgaW50ICkgMHg4IDw8IDQgKSAgIC8qIChTUEkpIDE2IEJpdHMgUGVyIHRyYW5zZmVyICovDQotI2RlZmluZSBBVDkxQ19TUElfU0NCUiAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RkYgPDwgOCApICAvKiAoU1BJKSBTZXJpYWwgQ2xvY2sgQmF1ZCBSYXRlICovDQotI2RlZmluZSBBVDkxQ19TUElfRExZQlMgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RkYgPDwgMTYgKSAvKiAoU1BJKSBEZWxheSBCZWZvcmUgU1BDSyAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX0RMWUJDVCAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGIDw8IDI0ICkgLyogKFNQSSkgRGVsYXkgQmV0d2VlbiBDb25zZWN1dGl2ZSBUcmFuc2ZlcnMgKi8NCisvLyAtLS0tLS0tLSBTUElfQ1IgOiAoU1BJIE9mZnNldDogMHgwKSBTUEkgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NQSV9TUElFTiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoU1BJKSBTUEkgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19TUElfU1BJRElTICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFNQSSkgU1BJIERpc2FibGUNCisjZGVmaW5lIEFUOTFDX1NQSV9TV1JTVCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoU1BJKSBTUEkgU29mdHdhcmUgcmVzZXQNCisjZGVmaW5lIEFUOTFDX1NQSV9MQVNUWEZFUiAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI0KSAvLyAoU1BJKSBTUEkgTGFzdCBUcmFuc2Zlcg0KKy8vIC0tLS0tLS0tIFNQSV9NUiA6IChTUEkgT2Zmc2V0OiAweDQpIFNQSSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1BJX01TVFIgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChTUEkpIE1hc3Rlci9TbGF2ZSBNb2RlDQorI2RlZmluZSBBVDkxQ19TUElfUFMgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFNQSSkgUGVyaXBoZXJhbCBTZWxlY3QNCisjZGVmaW5lIAlBVDkxQ19TUElfUFNfRklYRUQgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgMSkgLy8gKFNQSSkgRml4ZWQgUGVyaXBoZXJhbCBTZWxlY3QNCisjZGVmaW5lIAlBVDkxQ19TUElfUFNfVkFSSUFCTEUgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFNQSSkgVmFyaWFibGUgUGVyaXBoZXJhbCBTZWxlY3QNCisjZGVmaW5lIEFUOTFDX1NQSV9QQ1NERUMgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoU1BJKSBDaGlwIFNlbGVjdCBEZWNvZGUNCisjZGVmaW5lIEFUOTFDX1NQSV9GRElWICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoU1BJKSBDbG9jayBTZWxlY3Rpb24NCisjZGVmaW5lIEFUOTFDX1NQSV9NT0RGRElTICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoU1BJKSBNb2RlIEZhdWx0IERldGVjdGlvbg0KKyNkZWZpbmUgQVQ5MUNfU1BJX0xMQiAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChTUEkpIENsb2NrIFNlbGVjdGlvbg0KKyNkZWZpbmUgQVQ5MUNfU1BJX1BDUyAgICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgMTYpIC8vIChTUEkpIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QNCisjZGVmaW5lIEFUOTFDX1NQSV9ETFlCQ1MgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRiA8PCAyNCkgLy8gKFNQSSkgRGVsYXkgQmV0d2VlbiBDaGlwIFNlbGVjdHMNCisvLyAtLS0tLS0tLSBTUElfUkRSIDogKFNQSSBPZmZzZXQ6IDB4OCkgUmVjZWl2ZSBEYXRhIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1BJX1JEICAgICAgICAgICgodW5zaWduZWQgaW50KSAweEZGRkYgPDwgIDApIC8vIChTUEkpIFJlY2VpdmUgRGF0YQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX1JQQ1MgICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgMTYpIC8vIChTUEkpIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgU3RhdHVzDQorLy8gLS0tLS0tLS0gU1BJX1REUiA6IChTUEkgT2Zmc2V0OiAweGMpIFRyYW5zbWl0IERhdGEgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TUElfVEQgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGRiA8PCAgMCkgLy8gKFNQSSkgVHJhbnNtaXQgRGF0YQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX1RQQ1MgICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgMTYpIC8vIChTUEkpIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgU3RhdHVzDQorLy8gLS0tLS0tLS0gU1BJX1NSIDogKFNQSSBPZmZzZXQ6IDB4MTApIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NQSV9SRFJGICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoU1BJKSBSZWNlaXZlIERhdGEgUmVnaXN0ZXIgRnVsbA0KKyNkZWZpbmUgQVQ5MUNfU1BJX1REUkUgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChTUEkpIFRyYW5zbWl0IERhdGEgUmVnaXN0ZXIgRW1wdHkNCisjZGVmaW5lIEFUOTFDX1NQSV9NT0RGICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoU1BJKSBNb2RlIEZhdWx0IEVycm9yDQorI2RlZmluZSBBVDkxQ19TUElfT1ZSRVMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKFNQSSkgT3ZlcnJ1biBFcnJvciBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX1NQSV9FTkRSWCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoU1BJKSBFbmQgb2YgUmVjZWl2ZXIgVHJhbnNmZXINCisjZGVmaW5lIEFUOTFDX1NQSV9FTkRUWCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoU1BJKSBFbmQgb2YgUmVjZWl2ZXIgVHJhbnNmZXINCisjZGVmaW5lIEFUOTFDX1NQSV9SWEJVRkYgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoU1BJKSBSWEJVRkYgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19TUElfVFhCVUZFICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKFNQSSkgVFhCVUZFIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfU1BJX05TU1IgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChTUEkpIE5TU1IgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19TUElfVFhFTVBUWSAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLy8gKFNQSSkgVFhFTVBUWSBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1NQSV9TUElFTlMgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoU1BJKSBFbmFibGUgU3RhdHVzDQorLy8gLS0tLS0tLS0gU1BJX0lFUiA6IChTUEkgT2Zmc2V0OiAweDE0KSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFNQSV9JRFIgOiAoU1BJIE9mZnNldDogMHgxOCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gU1BJX0lNUiA6IChTUEkgT2Zmc2V0OiAweDFjKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBTUElfQ1NSIDogKFNQSSBPZmZzZXQ6IDB4MzApIENoaXAgU2VsZWN0IFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1BJX0NQT0wgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChTUEkpIENsb2NrIFBvbGFyaXR5DQorI2RlZmluZSBBVDkxQ19TUElfTkNQSEEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFNQSSkgQ2xvY2sgUGhhc2UNCisjZGVmaW5lIEFUOTFDX1NQSV9DU0FBVCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoU1BJKSBDaGlwIFNlbGVjdCBBY3RpdmUgQWZ0ZXIgVHJhbnNmZXINCisjZGVmaW5lIEFUOTFDX1NQSV9CSVRTICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8ICA0KSAvLyAoU1BJKSBCaXRzIFBlciBUcmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NQSV9CSVRTXzggICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDQpIC8vIChTUEkpIDggQml0cyBQZXIgdHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TUElfQklUU185ICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoU1BJKSA5IEJpdHMgUGVyIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1BJX0JJVFNfMTAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgNCkgLy8gKFNQSSkgMTAgQml0cyBQZXIgdHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TUElfQklUU18xMSAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA0KSAvLyAoU1BJKSAxMSBCaXRzIFBlciB0cmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NQSV9CSVRTXzEyICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDQgPDwgIDQpIC8vIChTUEkpIDEyIEJpdHMgUGVyIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1BJX0JJVFNfMTMgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NSA8PCAgNCkgLy8gKFNQSSkgMTMgQml0cyBQZXIgdHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TUElfQklUU18xNCAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg2IDw8ICA0KSAvLyAoU1BJKSAxNCBCaXRzIFBlciB0cmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NQSV9CSVRTXzE1ICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgIDQpIC8vIChTUEkpIDE1IEJpdHMgUGVyIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1BJX0JJVFNfMTYgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4OCA8PCAgNCkgLy8gKFNQSSkgMTYgQml0cyBQZXIgdHJhbnNmZXINCisjZGVmaW5lIEFUOTFDX1NQSV9TQ0JSICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRiA8PCAgOCkgLy8gKFNQSSkgU2VyaWFsIENsb2NrIEJhdWQgUmF0ZQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX0RMWUJTICAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8IDE2KSAvLyAoU1BJKSBEZWxheSBCZWZvcmUgU1BDSw0KKyNkZWZpbmUgQVQ5MUNfU1BJX0RMWUJDVCAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8IDI0KSAvLyAoU1BJKSBEZWxheSBCZXR3ZWVuIENvbnNlY3V0aXZlIFRyYW5zZmVycw0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVXNhcnQgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLXR5cGVkZWYgc3RydWN0IF9BVDkxU19VU0FSVA0KLXsNCi0gICAgQVQ5MV9SRUcgVVNfQ1I7ICAgICAgICAgICAvKiBDb250cm9sIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFVTX01SOyAgICAgICAgICAgLyogTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBVU19JRVI7ICAgICAgICAgIC8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVVNfSURSOyAgICAgICAgICAvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBVU19JTVI7ICAgICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFVTX0NTUjsgICAgICAgICAgLyogQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVVNfUkhSOyAgICAgICAgICAvKiBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFVTX1RIUjsgICAgICAgICAgLyogVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBVU19CUkdSOyAgICAgICAgIC8qIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVVNfUlRPUjsgICAgICAgICAvKiBSZWNlaXZlciBUaW1lLW91dCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBVU19UVEdSOyAgICAgICAgIC8qIFRyYW5zbWl0dGVyIFRpbWUtZ3VhcmQgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQwWyA1IF07ICAvKiAqLw0KLSAgICBBVDkxX1JFRyBVU19GSURJOyAgICAgICAgIC8qIEZJX0RJX1JhdGlvIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFVTX05FUjsgICAgICAgICAgLyogTmIgRXJyb3JzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMVsgMSBdOyAgLyogKi8NCi0gICAgQVQ5MV9SRUcgVVNfSUY7ICAgICAgICAgICAvKiBJUkRBX0ZJTFRFUiBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDJbIDQ0IF07IC8qICovDQotICAgIEFUOTFfUkVHIFVTX1JQUjsgICAgICAgICAgLyogUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFVTX1JDUjsgICAgICAgICAgLyogUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFVTX1RQUjsgICAgICAgICAgLyogVHJhbnNtaXQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBVU19UQ1I7ICAgICAgICAgIC8qIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVVNfUk5QUjsgICAgICAgICAvKiBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBVU19STkNSOyAgICAgICAgIC8qIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFVTX1ROUFI7ICAgICAgICAgLyogVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFVTX1ROQ1I7ICAgICAgICAgLyogVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFVTX1BUQ1I7ICAgICAgICAgLyogUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVVNfUFRTUjsgICAgICAgICAvKiBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotfSBBVDkxU19VU0FSVCwgKiBBVDkxUFNfVVNBUlQ7DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBVc2FydA0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1VTQVJUIHsNCisJQVQ5MV9SRUcJIFVTX0NSOyAJLy8gQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfTVI7IAkvLyBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX0NTUjsgCS8vIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19SSFI7IAkvLyBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19USFI7IAkvLyBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19CUkdSOyAJLy8gQmF1ZCBSYXRlIEdlbmVyYXRvciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfUlRPUjsgCS8vIFJlY2VpdmVyIFRpbWUtb3V0IFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19UVEdSOyAJLy8gVHJhbnNtaXR0ZXIgVGltZS1ndWFyZCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzVdOyAJLy8gDQorCUFUOTFfUkVHCSBVU19GSURJOyAJLy8gRklfRElfUmF0aW8gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX05FUjsgCS8vIE5iIEVycm9ycyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBVU19JRjsgCS8vIElSREFfRklMVEVSIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDJbNDRdOyAJLy8gDQorCUFUOTFfUkVHCSBVU19SUFI7IAkvLyBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX1JDUjsgCS8vIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfVFBSOyAJLy8gVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfVENSOyAJLy8gVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfUk5QUjsgCS8vIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVU19STkNSOyAJLy8gUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX1ROUFI7IAkvLyBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX1ROQ1I7IAkvLyBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVTX1BUQ1I7IAkvLyBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVVNfUFRTUjsgCS8vIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCit9IEFUOTFTX1VTQVJULCAqQVQ5MVBTX1VTQVJUOw0KIA0KLS8qIC0tLS0tLS0tIFVTX0NSIDogKFVTQVJUIE9mZnNldDogMHgwKSBEZWJ1ZyBVbml0IENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1NUVEJSSyAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOSApICAvKiAoVVNBUlQpIFN0YXJ0IEJyZWFrICovDQotI2RlZmluZSBBVDkxQ19VU19TVFBCUksgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEwICkgLyogKFVTQVJUKSBTdG9wIEJyZWFrICovDQotI2RlZmluZSBBVDkxQ19VU19TVFRUTyAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDExICkgLyogKFVTQVJUKSBTdGFydCBUaW1lLW91dCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfU0VOREEgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMiApIC8qIChVU0FSVCkgU2VuZCBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19VU19SU1RJVCAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEzICkgLyogKFVTQVJUKSBSZXNldCBJdGVyYXRpb25zICovDQotI2RlZmluZSBBVDkxQ19VU19SU1ROQUNLICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE0ICkgLyogKFVTQVJUKSBSZXNldCBOb24gQWNrbm93bGVkZ2UgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1JFVFRPICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTUgKSAvKiAoVVNBUlQpIFJlYXJtIFRpbWUtb3V0ICovDQotI2RlZmluZSBBVDkxQ19VU19EVFJFTiAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE2ICkgLyogKFVTQVJUKSBEYXRhIFRlcm1pbmFsIHJlYWR5IEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfRFRSRElTICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNyApIC8qIChVU0FSVCkgRGF0YSBUZXJtaW5hbCByZWFkeSBEaXNhYmxlICovDQotI2RlZmluZSBBVDkxQ19VU19SVFNFTiAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE4ICkgLyogKFVTQVJUKSBSZXF1ZXN0IHRvIFNlbmQgZW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19VU19SVFNESVMgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE5ICkgLyogKFVTQVJUKSBSZXF1ZXN0IHRvIFNlbmQgRGlzYWJsZSAqLw0KLS8qIC0tLS0tLS0tIFVTX01SIDogKFVTQVJUIE9mZnNldDogMHg0KSBEZWJ1ZyBVbml0IE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1VTTU9ERSAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEYgPDwgMCApICAvKiAoVVNBUlQpIFVzYXJ0IG1vZGUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19VU01PREVfTk9STUFMICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgKSAgICAgICAvKiAoVVNBUlQpIE5vcm1hbCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX1VTTU9ERV9SUzQ4NSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSApICAgICAgIC8qIChVU0FSVCkgUlM0ODUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19VU01PREVfSFdIU0ggICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgKSAgICAgICAvKiAoVVNBUlQpIEhhcmR3YXJlIEhhbmRzaGFraW5nICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfVVNNT0RFX01PREVNICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzICkgICAgICAgLyogKFVTQVJUKSBNb2RlbSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX1VTTU9ERV9JU083ODE2XzAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NCApICAgICAgIC8qIChVU0FSVCkgSVNPNzgxNiBwcm90b2NvbDogVCA9IDAgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19VU01PREVfSVNPNzgxNl8xICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDYgKSAgICAgICAvKiAoVVNBUlQpIElTTzc4MTYgcHJvdG9jb2w6IFQgPSAxICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfVVNNT0RFX0lSREEgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg4ICkgICAgICAgLyogKFVTQVJUKSBJckRBICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfVVNNT0RFX1NXSFNIICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhDICkgICAgICAgLyogKFVTQVJUKSBTb2Z0d2FyZSBIYW5kc2hha2luZyAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfQ0xLUyAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCA0ICkgIC8qIChVU0FSVCkgQ2xvY2sgU2VsZWN0aW9uIChCYXVkIFJhdGUgZ2VuZXJhdG9yIElucHV0IENsb2NrICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfQ0xLU19DTE9DSyAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDQgKSAgLyogKFVTQVJUKSBDbG9jayAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX0NMS1NfRkRJVjEgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA0ICkgIC8qIChVU0FSVCkgZmRpdjEgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19DTEtTX1NMT1cgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgNCApICAvKiAoVVNBUlQpIHNsb3dfY2xvY2sgKEFSTSkgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19DTEtTX0VYVCAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgNCApICAvKiAoVVNBUlQpIEV4dGVybmFsIChTQ0spICovDQotI2RlZmluZSBBVDkxQ19VU19DSFJMICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDYgKSAgLyogKFVTQVJUKSBDbG9jayBTZWxlY3Rpb24gKEJhdWQgUmF0ZSBnZW5lcmF0b3IgSW5wdXQgQ2xvY2sgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19DSFJMXzVfQklUUyAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgNiApICAvKiAoVVNBUlQpIENoYXJhY3RlciBMZW5ndGg6IDUgYml0cyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX0NIUkxfNl9CSVRTICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA2ICkgIC8qIChVU0FSVCkgQ2hhcmFjdGVyIExlbmd0aDogNiBiaXRzICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfQ0hSTF83X0JJVFMgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDYgKSAgLyogKFVTQVJUKSBDaGFyYWN0ZXIgTGVuZ3RoOiA3IGJpdHMgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19DSFJMXzhfQklUUyAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgNiApICAvKiAoVVNBUlQpIENoYXJhY3RlciBMZW5ndGg6IDggYml0cyAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfU1lOQyAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgIC8qIChVU0FSVCkgU3luY2hyb25vdXMgTW9kZSBTZWxlY3QgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX05CU1RPUCAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTIgKSAvKiAoVVNBUlQpIE51bWJlciBvZiBTdG9wIGJpdHMgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19OQlNUT1BfMV9CSVQgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMTIgKSAvKiAoVVNBUlQpIDEgc3RvcCBiaXQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19OQlNUT1BfMTVfQklUICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTIgKSAvKiAoVVNBUlQpIEFzeW5jaHJvbm91cyAoU1lOQz0wKSAyIHN0b3AgYml0cyBTeW5jaHJvbm91cyAoU1lOQz0xKSAyIHN0b3AgYml0cyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX05CU1RPUF8yX0JJVCAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCAxMiApIC8qIChVU0FSVCkgMiBzdG9wIGJpdHMgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX01TQkYgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTYgKSAvKiAoVVNBUlQpIEJpdCBPcmRlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfTU9ERTkgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNyApIC8qIChVU0FSVCkgOS1iaXQgQ2hhcmFjdGVyIGxlbmd0aCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfQ0tMTyAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxOCApIC8qIChVU0FSVCkgQ2xvY2sgT3V0cHV0IFNlbGVjdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfT1ZFUiAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxOSApIC8qIChVU0FSVCkgT3ZlciBTYW1wbGluZyBNb2RlICovDQotI2RlZmluZSBBVDkxQ19VU19JTkFDSyAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIwICkgLyogKFVTQVJUKSBJbmhpYml0IE5vbiBBY2tub3dsZWRnZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfRFNOQUNLICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyMSApIC8qIChVU0FSVCkgRGlzYWJsZSBTdWNjZXNzaXZlIE5BQ0sgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX01BWF9JVEVSICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjQgKSAvKiAoVVNBUlQpIE51bWJlciBvZiBSZXBldGl0aW9ucyAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfRklMVEVSICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyOCApIC8qIChVU0FSVCkgUmVjZWl2ZSBMaW5lIEZpbHRlciAqLw0KLS8qIC0tLS0tLS0tIFVTX0lFUiA6IChVU0FSVCBPZmZzZXQ6IDB4OCkgRGVidWcgVW5pdCBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19VU19SWEJSSyAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAgLyogKFVTQVJUKSBCcmVhayBSZWNlaXZlZC9FbmQgb2YgQnJlYWsgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1RJTUVPVVQgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOCApICAvKiAoVVNBUlQpIFJlY2VpdmVyIFRpbWUtb3V0ICovDQotI2RlZmluZSBBVDkxQ19VU19JVEVSQVRJT04gICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEwICkgLyogKFVTQVJUKSBNYXggbnVtYmVyIG9mIFJlcGV0aXRpb25zIFJlYWNoZWQgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX05BQ0sgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTMgKSAvKiAoVVNBUlQpIE5vbiBBY2tub3dsZWRnZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfUklJQyAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNiApIC8qIChVU0FSVCkgUmluZyBJTmRpY2F0b3IgSW5wdXQgQ2hhbmdlIEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX0RTUklDICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTcgKSAvKiAoVVNBUlQpIERhdGEgU2V0IFJlYWR5IElucHV0IENoYW5nZSBGbGFnICovDQotI2RlZmluZSBBVDkxQ19VU19EQ0RJQyAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE4ICkgLyogKFVTQVJUKSBEYXRhIENhcnJpZXIgRmxhZyAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfQ1RTSUMgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxOSApIC8qIChVU0FSVCkgQ2xlYXIgVG8gU2VuZCBJbnB1dCBDaGFuZ2UgRmxhZyAqLw0KLS8qIC0tLS0tLS0tIFVTX0lEUiA6IChVU0FSVCBPZmZzZXQ6IDB4YykgRGVidWcgVW5pdCBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFVTX0lNUiA6IChVU0FSVCBPZmZzZXQ6IDB4MTApIERlYnVnIFVuaXQgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBVU19DU1IgOiAoVVNBUlQgT2Zmc2V0OiAweDE0KSBEZWJ1ZyBVbml0IENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19VU19SSSAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyMCApICAgLyogKFVTQVJUKSBJbWFnZSBvZiBSSSBJbnB1dCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfRFNSICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjEgKSAgIC8qIChVU0FSVCkgSW1hZ2Ugb2YgRFNSIElucHV0ICovDQotI2RlZmluZSBBVDkxQ19VU19EQ0QgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyMiApICAgLyogKFVTQVJUKSBJbWFnZSBvZiBEQ0QgSW5wdXQgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX0NUUyAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIzICkgICAvKiAoVVNBUlQpIEltYWdlIG9mIENUUyBJbnB1dCAqLw0KKy8vIC0tLS0tLS0tIFVTX0NSIDogKFVTQVJUIE9mZnNldDogMHgwKSBEZWJ1ZyBVbml0IENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VU19TVFRCUksgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLy8gKFVTQVJUKSBTdGFydCBCcmVhaw0KKyNkZWZpbmUgQVQ5MUNfVVNfU1RQQlJLICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChVU0FSVCkgU3RvcCBCcmVhaw0KKyNkZWZpbmUgQVQ5MUNfVVNfU1RUVE8gICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTEpIC8vIChVU0FSVCkgU3RhcnQgVGltZS1vdXQNCisjZGVmaW5lIEFUOTFDX1VTX1NFTkRBICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvLyAoVVNBUlQpIFNlbmQgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfVVNfUlNUSVQgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTMpIC8vIChVU0FSVCkgUmVzZXQgSXRlcmF0aW9ucw0KKyNkZWZpbmUgQVQ5MUNfVVNfUlNUTkFDSyAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTQpIC8vIChVU0FSVCkgUmVzZXQgTm9uIEFja25vd2xlZGdlDQorI2RlZmluZSBBVDkxQ19VU19SRVRUTyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNSkgLy8gKFVTQVJUKSBSZWFybSBUaW1lLW91dA0KKyNkZWZpbmUgQVQ5MUNfVVNfRFRSRU4gICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChVU0FSVCkgRGF0YSBUZXJtaW5hbCByZWFkeSBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1VTX0RUUkRJUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE3KSAvLyAoVVNBUlQpIERhdGEgVGVybWluYWwgcmVhZHkgRGlzYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfUlRTRU4gICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTgpIC8vIChVU0FSVCkgUmVxdWVzdCB0byBTZW5kIGVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfUlRTRElTICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTkpIC8vIChVU0FSVCkgUmVxdWVzdCB0byBTZW5kIERpc2FibGUNCisvLyAtLS0tLS0tLSBVU19NUiA6IChVU0FSVCBPZmZzZXQ6IDB4NCkgRGVidWcgVW5pdCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVVNfVVNNT0RFICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgIDApIC8vIChVU0FSVCkgVXNhcnQgbW9kZQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1VTTU9ERV9OT1JNQUwgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwKSAvLyAoVVNBUlQpIE5vcm1hbA0KKyNkZWZpbmUgCUFUOTFDX1VTX1VTTU9ERV9SUzQ4NSAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxKSAvLyAoVVNBUlQpIFJTNDg1DQorI2RlZmluZSAJQVQ5MUNfVVNfVVNNT0RFX0hXSFNIICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIpIC8vIChVU0FSVCkgSGFyZHdhcmUgSGFuZHNoYWtpbmcNCisjZGVmaW5lIAlBVDkxQ19VU19VU01PREVfTU9ERU0gICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MykgLy8gKFVTQVJUKSBNb2RlbQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1VTTU9ERV9JU083ODE2XzAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg0KSAvLyAoVVNBUlQpIElTTzc4MTYgcHJvdG9jb2w6IFQgPSAwDQorI2RlZmluZSAJQVQ5MUNfVVNfVVNNT0RFX0lTTzc4MTZfMSAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDYpIC8vIChVU0FSVCkgSVNPNzgxNiBwcm90b2NvbDogVCA9IDENCisjZGVmaW5lIAlBVDkxQ19VU19VU01PREVfSVJEQSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4OCkgLy8gKFVTQVJUKSBJckRBDQorI2RlZmluZSAJQVQ5MUNfVVNfVVNNT0RFX1NXSFNIICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweEMpIC8vIChVU0FSVCkgU29mdHdhcmUgSGFuZHNoYWtpbmcNCisjZGVmaW5lIEFUOTFDX1VTX0NMS1MgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA0KSAvLyAoVVNBUlQpIENsb2NrIFNlbGVjdGlvbiAoQmF1ZCBSYXRlIGdlbmVyYXRvciBJbnB1dCBDbG9jaw0KKyNkZWZpbmUgCUFUOTFDX1VTX0NMS1NfQ0xPQ0sgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgNCkgLy8gKFVTQVJUKSBDbG9jaw0KKyNkZWZpbmUgCUFUOTFDX1VTX0NMS1NfRkRJVjEgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFVTQVJUKSBmZGl2MQ0KKyNkZWZpbmUgCUFUOTFDX1VTX0NMS1NfU0xPVyAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgNCkgLy8gKFVTQVJUKSBzbG93X2Nsb2NrIChBUk0pDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0xLU19FWFQgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA0KSAvLyAoVVNBUlQpIEV4dGVybmFsIChTQ0spDQorI2RlZmluZSBBVDkxQ19VU19DSFJMICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgNikgLy8gKFVTQVJUKSBDbG9jayBTZWxlY3Rpb24gKEJhdWQgUmF0ZSBnZW5lcmF0b3IgSW5wdXQgQ2xvY2sNCisjZGVmaW5lIAlBVDkxQ19VU19DSFJMXzVfQklUUyAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDYpIC8vIChVU0FSVCkgQ2hhcmFjdGVyIExlbmd0aDogNSBiaXRzDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0hSTF82X0JJVFMgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoVVNBUlQpIENoYXJhY3RlciBMZW5ndGg6IDYgYml0cw0KKyNkZWZpbmUgCUFUOTFDX1VTX0NIUkxfN19CSVRTICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgNikgLy8gKFVTQVJUKSBDaGFyYWN0ZXIgTGVuZ3RoOiA3IGJpdHMNCisjZGVmaW5lIAlBVDkxQ19VU19DSFJMXzhfQklUUyAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDYpIC8vIChVU0FSVCkgQ2hhcmFjdGVyIExlbmd0aDogOCBiaXRzDQorI2RlZmluZSBBVDkxQ19VU19TWU5DICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFVTQVJUKSBTeW5jaHJvbm91cyBNb2RlIFNlbGVjdA0KKyNkZWZpbmUgQVQ5MUNfVVNfTkJTVE9QICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTIpIC8vIChVU0FSVCkgTnVtYmVyIG9mIFN0b3AgYml0cw0KKyNkZWZpbmUgCUFUOTFDX1VTX05CU1RPUF8xX0JJVCAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDEyKSAvLyAoVVNBUlQpIDEgc3RvcCBiaXQNCisjZGVmaW5lIAlBVDkxQ19VU19OQlNUT1BfMTVfQklUICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLy8gKFVTQVJUKSBBc3luY2hyb25vdXMgKFNZTkM9MCkgMiBzdG9wIGJpdHMgU3luY2hyb25vdXMgKFNZTkM9MSkgMiBzdG9wIGJpdHMNCisjZGVmaW5lIAlBVDkxQ19VU19OQlNUT1BfMl9CSVQgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxMikgLy8gKFVTQVJUKSAyIHN0b3AgYml0cw0KKyNkZWZpbmUgQVQ5MUNfVVNfTVNCRiAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChVU0FSVCkgQml0IE9yZGVyDQorI2RlZmluZSBBVDkxQ19VU19NT0RFOSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNykgLy8gKFVTQVJUKSA5LWJpdCBDaGFyYWN0ZXIgbGVuZ3RoDQorI2RlZmluZSBBVDkxQ19VU19DS0xPICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOCkgLy8gKFVTQVJUKSBDbG9jayBPdXRwdXQgU2VsZWN0DQorI2RlZmluZSBBVDkxQ19VU19PVkVSICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOSkgLy8gKFVTQVJUKSBPdmVyIFNhbXBsaW5nIE1vZGUNCisjZGVmaW5lIEFUOTFDX1VTX0lOQUNLICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIwKSAvLyAoVVNBUlQpIEluaGliaXQgTm9uIEFja25vd2xlZGdlDQorI2RlZmluZSBBVDkxQ19VU19EU05BQ0sgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMSkgLy8gKFVTQVJUKSBEaXNhYmxlIFN1Y2Nlc3NpdmUgTkFDSw0KKyNkZWZpbmUgQVQ5MUNfVVNfTUFYX0lURVIgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjQpIC8vIChVU0FSVCkgTnVtYmVyIG9mIFJlcGV0aXRpb25zDQorI2RlZmluZSBBVDkxQ19VU19GSUxURVIgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyOCkgLy8gKFVTQVJUKSBSZWNlaXZlIExpbmUgRmlsdGVyDQorLy8gLS0tLS0tLS0gVVNfSUVSIDogKFVTQVJUIE9mZnNldDogMHg4KSBEZWJ1ZyBVbml0IEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VU19SWEJSSyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFVTQVJUKSBCcmVhayBSZWNlaXZlZC9FbmQgb2YgQnJlYWsNCisjZGVmaW5lIEFUOTFDX1VTX1RJTUVPVVQgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoVVNBUlQpIFJlY2VpdmVyIFRpbWUtb3V0DQorI2RlZmluZSBBVDkxQ19VU19JVEVSQVRJT04gICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLy8gKFVTQVJUKSBNYXggbnVtYmVyIG9mIFJlcGV0aXRpb25zIFJlYWNoZWQNCisjZGVmaW5lIEFUOTFDX1VTX05BQ0sgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEzKSAvLyAoVVNBUlQpIE5vbiBBY2tub3dsZWRnZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfUklJQyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChVU0FSVCkgUmluZyBJTmRpY2F0b3IgSW5wdXQgQ2hhbmdlIEZsYWcNCisjZGVmaW5lIEFUOTFDX1VTX0RTUklDICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE3KSAvLyAoVVNBUlQpIERhdGEgU2V0IFJlYWR5IElucHV0IENoYW5nZSBGbGFnDQorI2RlZmluZSBBVDkxQ19VU19EQ0RJQyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOCkgLy8gKFVTQVJUKSBEYXRhIENhcnJpZXIgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfVVNfQ1RTSUMgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTkpIC8vIChVU0FSVCkgQ2xlYXIgVG8gU2VuZCBJbnB1dCBDaGFuZ2UgRmxhZw0KKy8vIC0tLS0tLS0tIFVTX0lEUiA6IChVU0FSVCBPZmZzZXQ6IDB4YykgRGVidWcgVW5pdCBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBVU19JTVIgOiAoVVNBUlQgT2Zmc2V0OiAweDEwKSBEZWJ1ZyBVbml0IEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFVTX0NTUiA6IChVU0FSVCBPZmZzZXQ6IDB4MTQpIERlYnVnIFVuaXQgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VU19SSSAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMCkgLy8gKFVTQVJUKSBJbWFnZSBvZiBSSSBJbnB1dA0KKyNkZWZpbmUgQVQ5MUNfVVNfRFNSICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjEpIC8vIChVU0FSVCkgSW1hZ2Ugb2YgRFNSIElucHV0DQorI2RlZmluZSBBVDkxQ19VU19EQ0QgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMikgLy8gKFVTQVJUKSBJbWFnZSBvZiBEQ0QgSW5wdXQNCisjZGVmaW5lIEFUOTFDX1VTX0NUUyAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIzKSAvLyAoVVNBUlQpIEltYWdlIG9mIENUUyBJbnB1dA0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgU3luY2hyb25vdXMgU2VyaWFsIENvbnRyb2xsZXIgSW50ZXJmYWNlICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfU1NDDQotew0KLSAgICBBVDkxX1JFRyBTU0NfQ1I7ICAgICAgICAgIC8qIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1NDX0NNUjsgICAgICAgICAvKiBDbG9jayBNb2RlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMFsgMiBdOyAgLyogKi8NCi0gICAgQVQ5MV9SRUcgU1NDX1JDTVI7ICAgICAgICAvKiBSZWNlaXZlIENsb2NrIE1vZGVSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTU0NfUkZNUjsgICAgICAgIC8qIFJlY2VpdmUgRnJhbWUgTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTU0NfVENNUjsgICAgICAgIC8qIFRyYW5zbWl0IENsb2NrIE1vZGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1NDX1RGTVI7ICAgICAgICAvKiBUcmFuc21pdCBGcmFtZSBNb2RlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNTQ19SSFI7ICAgICAgICAgLyogUmVjZWl2ZSBIb2xkaW5nIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNTQ19USFI7ICAgICAgICAgLyogVHJhbnNtaXQgSG9sZGluZyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDFbIDIgXTsgIC8qICovDQotICAgIEFUOTFfUkVHIFNTQ19SU0hSOyAgICAgICAgLyogUmVjZWl2ZSBTeW5jIEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1NDX1RTSFI7ICAgICAgICAvKiBUcmFuc21pdCBTeW5jIEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQyWyAyIF07ICAvKiAqLw0KLSAgICBBVDkxX1JFRyBTU0NfU1I7ICAgICAgICAgIC8qIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTU0NfSUVSOyAgICAgICAgIC8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1NDX0lEUjsgICAgICAgICAvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTU0NfSU1SOyAgICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkM1sgNDQgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgU1NDX1JQUjsgICAgICAgICAvKiBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1NDX1JDUjsgICAgICAgICAvKiBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1NDX1RQUjsgICAgICAgICAvKiBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNTQ19UQ1I7ICAgICAgICAgLyogVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTU0NfUk5QUjsgICAgICAgIC8qIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFNTQ19STkNSOyAgICAgICAgLyogUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1NDX1ROUFI7ICAgICAgICAvKiBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1NDX1ROQ1I7ICAgICAgICAvKiBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgU1NDX1BUQ1I7ICAgICAgICAvKiBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBTU0NfUFRTUjsgICAgICAgIC8qIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi19IEFUOTFTX1NTQywgKiBBVDkxUFNfU1NDOw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgU3luY2hyb25vdXMgU2VyaWFsIENvbnRyb2xsZXIgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfU1NDIHsNCisJQVQ5MV9SRUcJIFNTQ19DUjsgCS8vIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19DTVI7IAkvLyBDbG9jayBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbMl07IAkvLyANCisJQVQ5MV9SRUcJIFNTQ19SQ01SOyAJLy8gUmVjZWl2ZSBDbG9jayBNb2RlUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19SRk1SOyAJLy8gUmVjZWl2ZSBGcmFtZSBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfVENNUjsgCS8vIFRyYW5zbWl0IENsb2NrIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19URk1SOyAJLy8gVHJhbnNtaXQgRnJhbWUgTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1JIUjsgCS8vIFJlY2VpdmUgSG9sZGluZyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1RIUjsgCS8vIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMVsyXTsgCS8vIA0KKwlBVDkxX1JFRwkgU1NDX1JTSFI7IAkvLyBSZWNlaXZlIFN5bmMgSG9sZGluZyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1RTSFI7IAkvLyBUcmFuc21pdCBTeW5jIEhvbGRpbmcgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMlsyXTsgCS8vIA0KKwlBVDkxX1JFRwkgU1NDX1NSOyAJLy8gU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX0lEUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfSU1SOyAJLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkM1s0NF07IAkvLyANCisJQVQ5MV9SRUcJIFNTQ19SUFI7IAkvLyBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19SQ1I7IAkvLyBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19UUFI7IAkvLyBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfVENSOyAJLy8gVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1JOUFI7IAkvLyBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1JOQ1I7IAkvLyBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgU1NDX1ROUFI7IAkvLyBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFNTQ19UTkNSOyAJLy8gVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfUFRDUjsgCS8vIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBTU0NfUFRTUjsgCS8vIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCit9IEFUOTFTX1NTQywgKkFUOTFQU19TU0M7DQogDQotLyogLS0tLS0tLS0gU1NDX0NSIDogKFNTQyBPZmZzZXQ6IDB4MCkgU1NDIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19SWEVOICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgLyogKFNTQykgUmVjZWl2ZSBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19SWERJUyAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAgLyogKFNTQykgUmVjZWl2ZSBEaXNhYmxlICovDQotI2RlZmluZSBBVDkxQ19TU0NfVFhFTiAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDggKSAgIC8qIChTU0MpIFRyYW5zbWl0IEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1RYRElTICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA5ICkgICAvKiAoU1NDKSBUcmFuc21pdCBEaXNhYmxlICovDQotI2RlZmluZSBBVDkxQ19TU0NfU1dSU1QgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE1ICkgIC8qIChTU0MpIFNvZnR3YXJlIFJlc2V0ICovDQotLyogLS0tLS0tLS0gU1NDX1JDTVIgOiAoU1NDIE9mZnNldDogMHgxMCkgU1NDIFJlY2VpdmUgQ2xvY2sgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0NLUyAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAwICkgICAvKiAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19DS1NfRElWICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCApICAgICAgICAvKiAoU1NDKSBEaXZpZGVkIENsb2NrICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX0NLU19USyAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxICkgICAgICAgIC8qIChTU0MpIFRLIENsb2NrIHNpZ25hbCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19DS1NfUksgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiApICAgICAgICAvKiAoU1NDKSBSSyBwaW4gKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19DS08gICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDcgPDwgMiApICAgLyogKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBPdXRwdXQgTW9kZSBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfQ0tPX05PTkUgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMiApICAgLyogKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBPdXRwdXQgTW9kZTogTm9uZSBSSyBwaW46IElucHV0LW9ubHkgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfQ0tPX0NPTlRJTk9VUyAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMiApICAgLyogKFNTQykgQ29udGludW91cyBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIFJLIHBpbjogT3V0cHV0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX0NLT19EQVRBX1RYICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDIgKSAgIC8qIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgb25seSBkdXJpbmcgZGF0YSB0cmFuc2ZlcnMgUksgcGluOiBPdXRwdXQgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19DS0kgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNSApICAgLyogKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBJbnZlcnNpb24gKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19TVEFSVCAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEYgPDwgOCApICAgLyogKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBTdGFydCBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfU1RBUlRfQ09OVElOT1VTICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgOCApICAgLyogKFNTQykgQ29udGludW91cywgYXMgc29vbiBhcyB0aGUgcmVjZWl2ZXIgaXMgZW5hYmxlZCwgYW5kIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBlbmQgb2YgdHJhbnNmZXIgb2YgdGhlIHByZXZpb3VzIGRhdGEuICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX1NUQVJUX1RYICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDggKSAgIC8qIChTU0MpIFRyYW5zbWl0L1JlY2VpdmUgc3RhcnQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfU1RBUlRfTE9XX1JGICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgOCApICAgLyogKFNTQykgRGV0ZWN0aW9uIG9mIGEgbG93IGxldmVsIG9uIFJGIGlucHV0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX1NUQVJUX0hJR0hfUkYgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDggKSAgIC8qIChTU0MpIERldGVjdGlvbiBvZiBhIGhpZ2ggbGV2ZWwgb24gUkYgaW5wdXQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfU1RBUlRfRkFMTF9SRiAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDQgPDwgOCApICAgLyogKFNTQykgRGV0ZWN0aW9uIG9mIGEgZmFsbGluZyBlZGdlIG9uIFJGIGlucHV0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX1NUQVJUX1JJU0VfUkYgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg1IDw8IDggKSAgIC8qIChTU0MpIERldGVjdGlvbiBvZiBhIHJpc2luZyBlZGdlIG9uIFJGIGlucHV0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX1NUQVJUX0xFVkVMX1JGICAgICAoICggdW5zaWduZWQgaW50ICkgMHg2IDw8IDggKSAgIC8qIChTU0MpIERldGVjdGlvbiBvZiBhbnkgbGV2ZWwgY2hhbmdlIG9uIFJGIGlucHV0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX1NUQVJUX0VER0VfUkYgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg3IDw8IDggKSAgIC8qIChTU0MpIERldGVjdGlvbiBvZiBhbnkgZWRnZSBvbiBSRiBpbnB1dCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19TVEFSVF8wICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4OCA8PCA4ICkgICAvKiAoU1NDKSBDb21wYXJlIDAgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19TVFRETFkgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGIDw8IDE2ICkgLyogKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBTdGFydCBEZWxheSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1BFUklPRCAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RkYgPDwgMjQgKSAvKiAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IFBlcmlvZCBEaXZpZGVyIFNlbGVjdGlvbiAqLw0KLS8qIC0tLS0tLS0tIFNTQ19SRk1SIDogKFNTQyBPZmZzZXQ6IDB4MTQpIFNTQyBSZWNlaXZlIEZyYW1lIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19EQVRMRU4gICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDFGIDw8IDAgKSAgLyogKFNTQykgRGF0YSBMZW5ndGggKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19MT09QICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNSApICAgLyogKFNTQykgTG9vcCBNb2RlICovDQotI2RlZmluZSBBVDkxQ19TU0NfTVNCRiAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDcgKSAgIC8qIChTU0MpIE1vc3QgU2lnbmlmaWNhbnQgQml0IEZpcnN0ICovDQotI2RlZmluZSBBVDkxQ19TU0NfREFUTkIgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGIDw8IDggKSAgIC8qIChTU0MpIERhdGEgTnVtYmVyIHBlciBGcmFtZSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0ZTTEVOICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RiA8PCAxNiApICAvKiAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgbGVuZ3RoICovDQotI2RlZmluZSBBVDkxQ19TU0NfRlNPUyAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg3IDw8IDIwICkgIC8qIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBPdXRwdXQgU2VsZWN0aW9uICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX0ZTT1NfTk9ORSAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDIwICkgIC8qIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IE5vbmUgUksgcGluIElucHV0LW9ubHkgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfRlNPU19ORUdBVElWRSAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjAgKSAgLyogKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogTmVnYXRpdmUgUHVsc2UgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfRlNPU19QT1NJVElWRSAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgMjAgKSAgLyogKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogUG9zaXRpdmUgUHVsc2UgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfRlNPU19MT1cgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMjAgKSAgLyogKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogRHJpdmVyIExvdyBkdXJpbmcgZGF0YSB0cmFuc2ZlciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19GU09TX0hJR0ggICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NCA8PCAyMCApICAvKiAoU1NDKSBTZWxlY3RlZCBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgU2lnbmFsOiBEcml2ZXIgSGlnaCBkdXJpbmcgZGF0YSB0cmFuc2ZlciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19GU09TX1RPR0dMRSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NSA8PCAyMCApICAvKiAoU1NDKSBTZWxlY3RlZCBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgU2lnbmFsOiBUb2dnbGluZyBhdCBlYWNoIHN0YXJ0IG9mIGRhdGEgdHJhbnNmZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19GU0VER0UgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjQgKSAgLyogKFNTQykgRnJhbWUgU3luYyBFZGdlIERldGVjdGlvbiAqLw0KLS8qIC0tLS0tLS0tIFNTQ19UQ01SIDogKFNTQyBPZmZzZXQ6IDB4MTgpIFNTQyBUcmFuc21pdCBDbG9jayBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gU1NDX1RGTVIgOiAoU1NDIE9mZnNldDogMHgxYykgU1NDIFRyYW5zbWl0IEZyYW1lIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19EQVRERUYgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNSApICAvKiAoU1NDKSBEYXRhIERlZmF1bHQgVmFsdWUgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19GU0RFTiAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjMgKSAvKiAoU1NDKSBGcmFtZSBTeW5jIERhdGEgRW5hYmxlICovDQotLyogLS0tLS0tLS0gU1NDX1NSIDogKFNTQyBPZmZzZXQ6IDB4NDApIFNTQyBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19UWFJEWSAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAvKiAoU1NDKSBUcmFuc21pdCBSZWFkeSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1RYRU1QVFkgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgIC8qIChTU0MpIFRyYW5zbWl0IEVtcHR5ICovDQotI2RlZmluZSBBVDkxQ19TU0NfRU5EVFggICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAgLyogKFNTQykgRW5kIE9mIFRyYW5zbWlzc2lvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1RYQlVGRSAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzICkgIC8qIChTU0MpIFRyYW5zbWl0IEJ1ZmZlciBFbXB0eSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1JYUkRZICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA0ICkgIC8qIChTU0MpIFJlY2VpdmUgUmVhZHkgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19PVlJVTiAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNSApICAvKiAoU1NDKSBSZWNlaXZlIE92ZXJydW4gKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19FTkRSWCAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNiApICAvKiAoU1NDKSBFbmQgb2YgUmVjZXB0aW9uICovDQotI2RlZmluZSBBVDkxQ19TU0NfUlhCVUZGICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDcgKSAgLyogKFNTQykgUmVjZWl2ZSBCdWZmZXIgRnVsbCAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1RYU1lOICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMCApIC8qIChTU0MpIFRyYW5zbWl0IFN5bmMgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19SWFNZTiAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTEgKSAvKiAoU1NDKSBSZWNlaXZlIFN5bmMgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19UWEVOQSAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTYgKSAvKiAoU1NDKSBUcmFuc21pdCBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19SWEVOQSAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTcgKSAvKiAoU1NDKSBSZWNlaXZlIEVuYWJsZSAqLw0KLS8qIC0tLS0tLS0tIFNTQ19JRVIgOiAoU1NDIE9mZnNldDogMHg0NCkgU1NDIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBTU0NfSURSIDogKFNTQyBPZmZzZXQ6IDB4NDgpIFNTQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFNTQ19JTVIgOiAoU1NDIE9mZnNldDogMHg0YykgU1NDIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tICovDQorLy8gLS0tLS0tLS0gU1NDX0NSIDogKFNTQyBPZmZzZXQ6IDB4MCkgU1NDIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TU0NfUlhFTiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFNTQykgUmVjZWl2ZSBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1NTQ19SWERJUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoU1NDKSBSZWNlaXZlIERpc2FibGUNCisjZGVmaW5lIEFUOTFDX1NTQ19UWEVOICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoU1NDKSBUcmFuc21pdCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1NTQ19UWERJUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvLyAoU1NDKSBUcmFuc21pdCBEaXNhYmxlDQorI2RlZmluZSBBVDkxQ19TU0NfU1dSU1QgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNSkgLy8gKFNTQykgU29mdHdhcmUgUmVzZXQNCisvLyAtLS0tLS0tLSBTU0NfUkNNUiA6IChTU0MgT2Zmc2V0OiAweDEwKSBTU0MgUmVjZWl2ZSBDbG9jayBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1NDX0NLUyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDApIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfU1NDX0NLU19ESVYgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwKSAvLyAoU1NDKSBEaXZpZGVkIENsb2NrDQorI2RlZmluZSAJQVQ5MUNfU1NDX0NLU19USyAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxKSAvLyAoU1NDKSBUSyBDbG9jayBzaWduYWwNCisjZGVmaW5lIAlBVDkxQ19TU0NfQ0tTX1JLICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIpIC8vIChTU0MpIFJLIHBpbg0KKyNkZWZpbmUgQVQ5MUNfU1NDX0NLTyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgIDIpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgT3V0cHV0IE1vZGUgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfU1NDX0NLT19OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICAyKSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIE91dHB1dCBNb2RlOiBOb25lIFJLIHBpbjogSW5wdXQtb25seQ0KKyNkZWZpbmUgCUFUOTFDX1NTQ19DS09fQ09OVElOT1VTICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFNTQykgQ29udGludW91cyBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIFJLIHBpbjogT3V0cHV0DQorI2RlZmluZSAJQVQ5MUNfU1NDX0NLT19EQVRBX1RYICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICAyKSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIG9ubHkgZHVyaW5nIGRhdGEgdHJhbnNmZXJzIFJLIHBpbjogT3V0cHV0DQorI2RlZmluZSBBVDkxQ19TU0NfQ0tJICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBJbnZlcnNpb24NCisjZGVmaW5lIEFUOTFDX1NTQ19TVEFSVCAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8ICA4KSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IFN0YXJ0IFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1NTQ19TVEFSVF9DT05USU5PVVMgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA4KSAvLyAoU1NDKSBDb250aW51b3VzLCBhcyBzb29uIGFzIHRoZSByZWNlaXZlciBpcyBlbmFibGVkLCBhbmQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGVuZCBvZiB0cmFuc2ZlciBvZiB0aGUgcHJldmlvdXMgZGF0YS4NCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfVFggICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFNTQykgVHJhbnNtaXQvUmVjZWl2ZSBzdGFydA0KKyNkZWZpbmUgCUFUOTFDX1NTQ19TVEFSVF9MT1dfUkYgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA4KSAvLyAoU1NDKSBEZXRlY3Rpb24gb2YgYSBsb3cgbGV2ZWwgb24gUkYgaW5wdXQNCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfSElHSF9SRiAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKFNTQykgRGV0ZWN0aW9uIG9mIGEgaGlnaCBsZXZlbCBvbiBSRiBpbnB1dA0KKyNkZWZpbmUgCUFUOTFDX1NTQ19TVEFSVF9GQUxMX1JGICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg0IDw8ICA4KSAvLyAoU1NDKSBEZXRlY3Rpb24gb2YgYSBmYWxsaW5nIGVkZ2Ugb24gUkYgaW5wdXQNCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfUklTRV9SRiAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NSA8PCAgOCkgLy8gKFNTQykgRGV0ZWN0aW9uIG9mIGEgcmlzaW5nIGVkZ2Ugb24gUkYgaW5wdXQNCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfTEVWRUxfUkYgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NiA8PCAgOCkgLy8gKFNTQykgRGV0ZWN0aW9uIG9mIGFueSBsZXZlbCBjaGFuZ2Ugb24gUkYgaW5wdXQNCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfRURHRV9SRiAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAgOCkgLy8gKFNTQykgRGV0ZWN0aW9uIG9mIGFueSBlZGdlIG9uIFJGIGlucHV0DQorI2RlZmluZSAJQVQ5MUNfU1NDX1NUQVJUXzAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDggPDwgIDgpIC8vIChTU0MpIENvbXBhcmUgMA0KKyNkZWZpbmUgQVQ5MUNfU1NDX1NUVERMWSAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8IDE2KSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IFN0YXJ0IERlbGF5DQorI2RlZmluZSBBVDkxQ19TU0NfUEVSSU9EICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgMjQpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgUGVyaW9kIERpdmlkZXIgU2VsZWN0aW9uDQorLy8gLS0tLS0tLS0gU1NDX1JGTVIgOiAoU1NDIE9mZnNldDogMHgxNCkgU1NDIFJlY2VpdmUgRnJhbWUgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NTQ19EQVRMRU4gICAgICAoKHVuc2lnbmVkIGludCkgMHgxRiA8PCAgMCkgLy8gKFNTQykgRGF0YSBMZW5ndGgNCisjZGVmaW5lIEFUOTFDX1NTQ19MT09QICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoU1NDKSBMb29wIE1vZGUNCisjZGVmaW5lIEFUOTFDX1NTQ19NU0JGICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoU1NDKSBNb3N0IFNpZ25pZmljYW50IEJpdCBGaXJzdA0KKyNkZWZpbmUgQVQ5MUNfU1NDX0RBVE5CICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgIDgpIC8vIChTU0MpIERhdGEgTnVtYmVyIHBlciBGcmFtZQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX0ZTTEVOICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgMTYpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBsZW5ndGgNCisjZGVmaW5lIEFUOTFDX1NTQ19GU09TICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8IDIwKSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgT3V0cHV0IFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1NTQ19GU09TX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMjApIC8vIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IE5vbmUgUksgcGluIElucHV0LW9ubHkNCisjZGVmaW5lIAlBVDkxQ19TU0NfRlNPU19ORUdBVElWRSAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIwKSAvLyAoU1NDKSBTZWxlY3RlZCBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgU2lnbmFsOiBOZWdhdGl2ZSBQdWxzZQ0KKyNkZWZpbmUgCUFUOTFDX1NTQ19GU09TX1BPU0lUSVZFICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMjApIC8vIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IFBvc2l0aXZlIFB1bHNlDQorI2RlZmluZSAJQVQ5MUNfU1NDX0ZTT1NfTE9XICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyMCkgLy8gKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogRHJpdmVyIExvdyBkdXJpbmcgZGF0YSB0cmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NTQ19GU09TX0hJR0ggICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDQgPDwgMjApIC8vIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IERyaXZlciBIaWdoIGR1cmluZyBkYXRhIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1NDX0ZTT1NfVE9HR0xFICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NSA8PCAyMCkgLy8gKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogVG9nZ2xpbmcgYXQgZWFjaCBzdGFydCBvZiBkYXRhIHRyYW5zZmVyDQorI2RlZmluZSBBVDkxQ19TU0NfRlNFREdFICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNCkgLy8gKFNTQykgRnJhbWUgU3luYyBFZGdlIERldGVjdGlvbg0KKy8vIC0tLS0tLS0tIFNTQ19UQ01SIDogKFNTQyBPZmZzZXQ6IDB4MTgpIFNTQyBUcmFuc21pdCBDbG9jayBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFNTQ19URk1SIDogKFNTQyBPZmZzZXQ6IDB4MWMpIFNTQyBUcmFuc21pdCBGcmFtZSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1NDX0RBVERFRiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChTU0MpIERhdGEgRGVmYXVsdCBWYWx1ZQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX0ZTREVOICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjMpIC8vIChTU0MpIEZyYW1lIFN5bmMgRGF0YSBFbmFibGUNCisvLyAtLS0tLS0tLSBTU0NfU1IgOiAoU1NDIE9mZnNldDogMHg0MCkgU1NDIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NTQ19UWFJEWSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoU1NDKSBUcmFuc21pdCBSZWFkeQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RYRU1QVFkgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChTU0MpIFRyYW5zbWl0IEVtcHR5DQorI2RlZmluZSBBVDkxQ19TU0NfRU5EVFggICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFNTQykgRW5kIE9mIFRyYW5zbWlzc2lvbg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RYQlVGRSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChTU0MpIFRyYW5zbWl0IEJ1ZmZlciBFbXB0eQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JYUkRZICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChTU0MpIFJlY2VpdmUgUmVhZHkNCisjZGVmaW5lIEFUOTFDX1NTQ19PVlJVTiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoU1NDKSBSZWNlaXZlIE92ZXJydW4NCisjZGVmaW5lIEFUOTFDX1NTQ19FTkRSWCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoU1NDKSBFbmQgb2YgUmVjZXB0aW9uDQorI2RlZmluZSBBVDkxQ19TU0NfUlhCVUZGICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKFNTQykgUmVjZWl2ZSBCdWZmZXIgRnVsbA0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RYU1lOICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChTU0MpIFRyYW5zbWl0IFN5bmMNCisjZGVmaW5lIEFUOTFDX1NTQ19SWFNZTiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDExKSAvLyAoU1NDKSBSZWNlaXZlIFN5bmMNCisjZGVmaW5lIEFUOTFDX1NTQ19UWEVOQSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoU1NDKSBUcmFuc21pdCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1NTQ19SWEVOQSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE3KSAvLyAoU1NDKSBSZWNlaXZlIEVuYWJsZQ0KKy8vIC0tLS0tLS0tIFNTQ19JRVIgOiAoU1NDIE9mZnNldDogMHg0NCkgU1NDIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gU1NDX0lEUiA6IChTU0MgT2Zmc2V0OiAweDQ4KSBTU0MgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gU1NDX0lNUiA6IChTU0MgT2Zmc2V0OiAweDRjKSBTU0MgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBUd28td2lyZSBJbnRlcmZhY2UgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLXR5cGVkZWYgc3RydWN0IF9BVDkxU19UV0kNCi17DQotICAgIEFUOTFfUkVHIFRXSV9DUjsgICAgICAgICAvKiBDb250cm9sIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFRXSV9NTVI7ICAgICAgICAvKiBNYXN0ZXIgTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDBbIDEgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgVFdJX0lBRFI7ICAgICAgIC8qIEludGVybmFsIEFkZHJlc3MgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVFdJX0NXR1I7ICAgICAgIC8qIENsb2NrIFdhdmVmb3JtIEdlbmVyYXRvciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDFbIDMgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgVFdJX1NSOyAgICAgICAgIC8qIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBUV0lfSUVSOyAgICAgICAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBUV0lfSURSOyAgICAgICAgLyogSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVFdJX0lNUjsgICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFRXSV9SSFI7ICAgICAgICAvKiBSZWNlaXZlIEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVFdJX1RIUjsgICAgICAgIC8qIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi19IEFUOTFTX1RXSSwgKiBBVDkxUFNfVFdJOw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVHdvLXdpcmUgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfVFdJIHsNCisJQVQ5MV9SRUcJIFRXSV9DUjsgCS8vIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRXSV9NTVI7IAkvLyBNYXN0ZXIgTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBUV0lfSUFEUjsgCS8vIEludGVybmFsIEFkZHJlc3MgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRXSV9DV0dSOyAJLy8gQ2xvY2sgV2F2ZWZvcm0gR2VuZXJhdG9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbM107IAkvLyANCisJQVQ5MV9SRUcJIFRXSV9TUjsgCS8vIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVFdJX0lFUjsgCS8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRXSV9JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVFdJX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUV0lfUkhSOyAJLy8gUmVjZWl2ZSBIb2xkaW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUV0lfVEhSOyAJLy8gVHJhbnNtaXQgSG9sZGluZyBSZWdpc3Rlcg0KK30gQVQ5MVNfVFdJLCAqQVQ5MVBTX1RXSTsNCiANCi0vKiAtLS0tLS0tLSBUV0lfQ1IgOiAoVFdJIE9mZnNldDogMHgwKSBUV0kgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX1NUQVJUICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgLyogKFRXSSkgU2VuZCBhIFNUQVJUIENvbmRpdGlvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX1NUT1AgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAgLyogKFRXSSkgU2VuZCBhIFNUT1AgQ29uZGl0aW9uICovDQotI2RlZmluZSBBVDkxQ19UV0lfTVNFTiAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyICkgICAvKiAoVFdJKSBUV0kgTWFzdGVyIFRyYW5zZmVyIEVuYWJsZWQgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9NU0RJUyAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDMgKSAgIC8qIChUV0kpIFRXSSBNYXN0ZXIgVHJhbnNmZXIgRGlzYWJsZWQgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9TV1JTVCAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDcgKSAgIC8qIChUV0kpIFNvZnR3YXJlIFJlc2V0ICovDQotLyogLS0tLS0tLS0gVFdJX01NUiA6IChUV0kgT2Zmc2V0OiAweDQpIFRXSSBNYXN0ZXIgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX0lBRFJTWiAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgOCApICAgLyogKFRXSSkgSW50ZXJuYWwgRGV2aWNlIEFkZHJlc3MgU2l6ZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RXSV9JQURSU1pfTk8gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgOCApICAgLyogKFRXSSkgTm8gaW50ZXJuYWwgZGV2aWNlIGFkZHJlc3MgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UV0lfSUFEUlNaXzFfQllURSAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDggKSAgIC8qIChUV0kpIE9uZS1ieXRlIGludGVybmFsIGRldmljZSBhZGRyZXNzICovDQotI2RlZmluZSAgICAgQVQ5MUNfVFdJX0lBRFJTWl8yX0JZVEUgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCA4ICkgICAvKiAoVFdJKSBUd28tYnl0ZSBpbnRlcm5hbCBkZXZpY2UgYWRkcmVzcyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RXSV9JQURSU1pfM19CWVRFICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgOCApICAgLyogKFRXSSkgVGhyZWUtYnl0ZSBpbnRlcm5hbCBkZXZpY2UgYWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX01SRUFEICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTIgKSAgLyogKFRXSSkgTWFzdGVyIFJlYWQgRGlyZWN0aW9uICovDQotI2RlZmluZSBBVDkxQ19UV0lfREFEUiAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4N0YgPDwgMTYgKSAvKiAoVFdJKSBEZXZpY2UgQWRkcmVzcyAqLw0KLS8qIC0tLS0tLS0tIFRXSV9DV0dSIDogKFRXSSBPZmZzZXQ6IDB4MTApIFRXSSBDbG9jayBXYXZlZm9ybSBHZW5lcmF0b3IgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9DTERJViAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRiA8PCAwICkgIC8qIChUV0kpIENsb2NrIExvdyBEaXZpZGVyICovDQotI2RlZmluZSBBVDkxQ19UV0lfQ0hESVYgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RkYgPDwgOCApICAvKiAoVFdJKSBDbG9jayBIaWdoIERpdmlkZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9DS0RJViAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg3IDw8IDE2ICkgIC8qIChUV0kpIENsb2NrIERpdmlkZXIgKi8NCi0vKiAtLS0tLS0tLSBUV0lfU1IgOiAoVFdJIE9mZnNldDogMHgyMCkgVFdJIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX1RYQ09NUCAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgLyogKFRXSSkgVHJhbnNtaXNzaW9uIENvbXBsZXRlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX1JYUkRZICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAgLyogKFRXSSkgUmVjZWl2ZSBob2xkaW5nIHJlZ2lzdGVyIFJlYURZICovDQotI2RlZmluZSBBVDkxQ19UV0lfVFhSRFkgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyICkgICAvKiAoVFdJKSBUcmFuc21pdCBob2xkaW5nIHJlZ2lzdGVyIFJlYURZICovDQotI2RlZmluZSBBVDkxQ19UV0lfT1ZSRSAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA2ICkgICAvKiAoVFdJKSBPdmVycnVuIEVycm9yICovDQotI2RlZmluZSBBVDkxQ19UV0lfVU5SRSAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA3ICkgICAvKiAoVFdJKSBVbmRlcnJ1biBFcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX05BQ0sgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOCApICAgLyogKFRXSSkgTm90IEFja25vd2xlZGdlZCAqLw0KLS8qIC0tLS0tLS0tIFRXSV9JRVIgOiAoVFdJIE9mZnNldDogMHgyNCkgVFdJIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBUV0lfSURSIDogKFRXSSBPZmZzZXQ6IDB4MjgpIFRXSSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFRXSV9JTVIgOiAoVFdJIE9mZnNldDogMHgyYykgVFdJIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tICovDQorLy8gLS0tLS0tLS0gVFdJX0NSIDogKFRXSSBPZmZzZXQ6IDB4MCkgVFdJIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UV0lfU1RBUlQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFRXSSkgU2VuZCBhIFNUQVJUIENvbmRpdGlvbg0KKyNkZWZpbmUgQVQ5MUNfVFdJX1NUT1AgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChUV0kpIFNlbmQgYSBTVE9QIENvbmRpdGlvbg0KKyNkZWZpbmUgQVQ5MUNfVFdJX01TRU4gICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChUV0kpIFRXSSBNYXN0ZXIgVHJhbnNmZXIgRW5hYmxlZA0KKyNkZWZpbmUgQVQ5MUNfVFdJX01TRElTICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChUV0kpIFRXSSBNYXN0ZXIgVHJhbnNmZXIgRGlzYWJsZWQNCisjZGVmaW5lIEFUOTFDX1RXSV9TV1JTVCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoVFdJKSBTb2Z0d2FyZSBSZXNldA0KKy8vIC0tLS0tLS0tIFRXSV9NTVIgOiAoVFdJIE9mZnNldDogMHg0KSBUV0kgTWFzdGVyIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UV0lfSUFEUlNaICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKFRXSSkgSW50ZXJuYWwgRGV2aWNlIEFkZHJlc3MgU2l6ZQ0KKyNkZWZpbmUgCUFUOTFDX1RXSV9JQURSU1pfTk8gICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgOCkgLy8gKFRXSSkgTm8gaW50ZXJuYWwgZGV2aWNlIGFkZHJlc3MNCisjZGVmaW5lIAlBVDkxQ19UV0lfSUFEUlNaXzFfQllURSAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChUV0kpIE9uZS1ieXRlIGludGVybmFsIGRldmljZSBhZGRyZXNzDQorI2RlZmluZSAJQVQ5MUNfVFdJX0lBRFJTWl8yX0JZVEUgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA4KSAvLyAoVFdJKSBUd28tYnl0ZSBpbnRlcm5hbCBkZXZpY2UgYWRkcmVzcw0KKyNkZWZpbmUgCUFUOTFDX1RXSV9JQURSU1pfM19CWVRFICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKFRXSSkgVGhyZWUtYnl0ZSBpbnRlcm5hbCBkZXZpY2UgYWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfVFdJX01SRUFEICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8vIChUV0kpIE1hc3RlciBSZWFkIERpcmVjdGlvbg0KKyNkZWZpbmUgQVQ5MUNfVFdJX0RBRFIgICAgICAgICgodW5zaWduZWQgaW50KSAweDdGIDw8IDE2KSAvLyAoVFdJKSBEZXZpY2UgQWRkcmVzcw0KKy8vIC0tLS0tLS0tIFRXSV9DV0dSIDogKFRXSSBPZmZzZXQ6IDB4MTApIFRXSSBDbG9jayBXYXZlZm9ybSBHZW5lcmF0b3IgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UV0lfQ0xESVYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgIDApIC8vIChUV0kpIENsb2NrIExvdyBEaXZpZGVyDQorI2RlZmluZSBBVDkxQ19UV0lfQ0hESVYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgIDgpIC8vIChUV0kpIENsb2NrIEhpZ2ggRGl2aWRlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX0NLRElWICAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgMTYpIC8vIChUV0kpIENsb2NrIERpdmlkZXINCisvLyAtLS0tLS0tLSBUV0lfU1IgOiAoVFdJIE9mZnNldDogMHgyMCkgVFdJIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RXSV9UWENPTVAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoVFdJKSBUcmFuc21pc3Npb24gQ29tcGxldGVkDQorI2RlZmluZSBBVDkxQ19UV0lfUlhSRFkgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFRXSSkgUmVjZWl2ZSBob2xkaW5nIHJlZ2lzdGVyIFJlYURZDQorI2RlZmluZSBBVDkxQ19UV0lfVFhSRFkgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFRXSSkgVHJhbnNtaXQgaG9sZGluZyByZWdpc3RlciBSZWFEWQ0KKyNkZWZpbmUgQVQ5MUNfVFdJX09WUkUgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChUV0kpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX1RXSV9VTlJFICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoVFdJKSBVbmRlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX05BQ0sgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChUV0kpIE5vdCBBY2tub3dsZWRnZWQNCisvLyAtLS0tLS0tLSBUV0lfSUVSIDogKFRXSSBPZmZzZXQ6IDB4MjQpIFRXSSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFRXSV9JRFIgOiAoVFdJIE9mZnNldDogMHgyOCkgVFdJIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFRXSV9JTVIgOiAoVFdJIE9mZnNldDogMHgyYykgVFdJIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUFdNQyBDaGFubmVsIEludGVyZmFjZSAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotdHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1BXTUNfQ0gNCi17DQotICAgIEFUOTFfUkVHIFBXTUNfQ01SOyAgICAgICAgICAgLyogQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBXTUNfQ0RUWVI7ICAgICAgICAgLyogQ2hhbm5lbCBEdXR5IEN5Y2xlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBXTUNfQ1BSRFI7ICAgICAgICAgLyogQ2hhbm5lbCBQZXJpb2QgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUFdNQ19DQ05UUjsgICAgICAgICAvKiBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUFdNQ19DVVBEUjsgICAgICAgICAvKiBDaGFubmVsIFVwZGF0ZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBQV01DX1Jlc2VydmVkWyAzIF07IC8qIFJlc2VydmVkICovDQotfSBBVDkxU19QV01DX0NILCAqIEFUOTFQU19QV01DX0NIOw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUFdNQyBDaGFubmVsIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1BXTUNfQ0ggew0KKwlBVDkxX1JFRwkgUFdNQ19DTVI7IAkvLyBDaGFubmVsIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBXTUNfQ0RUWVI7IAkvLyBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBXTUNfQ1BSRFI7IAkvLyBDaGFubmVsIFBlcmlvZCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUFdNQ19DQ05UUjsgCS8vIENoYW5uZWwgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUFdNQ19DVVBEUjsgCS8vIENoYW5uZWwgVXBkYXRlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQV01DX1Jlc2VydmVkWzNdOyAJLy8gUmVzZXJ2ZWQNCit9IEFUOTFTX1BXTUNfQ0gsICpBVDkxUFNfUFdNQ19DSDsNCiANCi0vKiAtLS0tLS0tLSBQV01DX0NNUiA6IChQV01DX0NIIE9mZnNldDogMHgwKSBQV01DIENoYW5uZWwgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DUFJFICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEYgPDwgMCApICAvKiAoUFdNQ19DSCkgQ2hhbm5lbCBQcmUtc2NhbGVyIDogUFdNQ19DTEt4ICovDQotI2RlZmluZSAgICAgQVQ5MUNfUFdNQ19DUFJFX01DSyAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCApICAgICAgIC8qIChQV01DX0NIKSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1BXTUNfQ1BSRV9NQ0tBICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEIgKSAgICAgICAvKiAoUFdNQ19DSCkgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19QV01DX0NQUkVfTUNLQiAgICAoICggdW5zaWduZWQgaW50ICkgMHhDICkgICAgICAgLyogKFBXTUNfQ0gpICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NBTEcgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgIC8qIChQV01DX0NIKSBDaGFubmVsIEFsaWdubWVudCAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DUE9MICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOSApICAvKiAoUFdNQ19DSCkgQ2hhbm5lbCBQb2xhcml0eSAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DUEQgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTAgKSAvKiAoUFdNQ19DSCkgQ2hhbm5lbCBVcGRhdGUgUGVyaW9kICovDQotLyogLS0tLS0tLS0gUFdNQ19DRFRZUiA6IChQV01DX0NIIE9mZnNldDogMHg0KSBQV01DIENoYW5uZWwgRHV0eSBDeWNsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DRFRZICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMCApICAvKiAoUFdNQ19DSCkgQ2hhbm5lbCBEdXR5IEN5Y2xlICovDQotLyogLS0tLS0tLS0gUFdNQ19DUFJEUiA6IChQV01DX0NIIE9mZnNldDogMHg4KSBQV01DIENoYW5uZWwgUGVyaW9kIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NQUkQgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAwICkgIC8qIChQV01DX0NIKSBDaGFubmVsIFBlcmlvZCAqLw0KLS8qIC0tLS0tLS0tIFBXTUNfQ0NOVFIgOiAoUFdNQ19DSCBPZmZzZXQ6IDB4YykgUFdNQyBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0NOVCAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDAgKSAgLyogKFBXTUNfQ0gpIENoYW5uZWwgQ291bnRlciAqLw0KLS8qIC0tLS0tLS0tIFBXTUNfQ1VQRFIgOiAoUFdNQ19DSCBPZmZzZXQ6IDB4MTApIFBXTUMgQ2hhbm5lbCBVcGRhdGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ1VQRCAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDAgKSAgLyogKFBXTUNfQ0gpIENoYW5uZWwgVXBkYXRlICovDQorLy8gLS0tLS0tLS0gUFdNQ19DTVIgOiAoUFdNQ19DSCBPZmZzZXQ6IDB4MCkgUFdNQyBDaGFubmVsIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QV01DX0NQUkUgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAgMCkgLy8gKFBXTUNfQ0gpIENoYW5uZWwgUHJlLXNjYWxlciA6IFBXTUNfQ0xLeA0KKyNkZWZpbmUgCUFUOTFDX1BXTUNfQ1BSRV9NQ0sgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwKSAvLyAoUFdNQ19DSCkgDQorI2RlZmluZSAJQVQ5MUNfUFdNQ19DUFJFX01DS0EgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweEIpIC8vIChQV01DX0NIKSANCisjZGVmaW5lIAlBVDkxQ19QV01DX0NQUkVfTUNLQiAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4QykgLy8gKFBXTUNfQ0gpIA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DQUxHICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChQV01DX0NIKSBDaGFubmVsIEFsaWdubWVudA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DUE9MICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChQV01DX0NIKSBDaGFubmVsIFBvbGFyaXR5DQorI2RlZmluZSBBVDkxQ19QV01DX0NQRCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLy8gKFBXTUNfQ0gpIENoYW5uZWwgVXBkYXRlIFBlcmlvZA0KKy8vIC0tLS0tLS0tIFBXTUNfQ0RUWVIgOiAoUFdNQ19DSCBPZmZzZXQ6IDB4NCkgUFdNQyBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QV01DX0NEVFkgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgMCkgLy8gKFBXTUNfQ0gpIENoYW5uZWwgRHV0eSBDeWNsZQ0KKy8vIC0tLS0tLS0tIFBXTUNfQ1BSRFIgOiAoUFdNQ19DSCBPZmZzZXQ6IDB4OCkgUFdNQyBDaGFubmVsIFBlcmlvZCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ1BSRCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICAwKSAvLyAoUFdNQ19DSCkgQ2hhbm5lbCBQZXJpb2QNCisvLyAtLS0tLS0tLSBQV01DX0NDTlRSIDogKFBXTUNfQ0ggT2Zmc2V0OiAweGMpIFBXTUMgQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DQ05UICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDApIC8vIChQV01DX0NIKSBDaGFubmVsIENvdW50ZXINCisvLyAtLS0tLS0tLSBQV01DX0NVUERSIDogKFBXTUNfQ0ggT2Zmc2V0OiAweDEwKSBQV01DIENoYW5uZWwgVXBkYXRlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DVVBEICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDApIC8vIChQV01DX0NIKSBDaGFubmVsIFVwZGF0ZQ0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUHVsc2UgV2lkdGggTW9kdWxhdGlvbiBDb250cm9sbGVyIEludGVyZmFjZSAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotdHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1BXTUMNCi17DQotICAgIEFUOTFfUkVHIFBXTUNfTVI7ICAgICAgICAgICAvKiBQV01DIE1vZGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUFdNQ19FTkE7ICAgICAgICAgIC8qIFBXTUMgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBXTUNfRElTOyAgICAgICAgICAvKiBQV01DIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUFdNQ19TUjsgICAgICAgICAgIC8qIFBXTUMgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFBXTUNfSUVSOyAgICAgICAgICAvKiBQV01DIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUFdNQ19JRFI7ICAgICAgICAgIC8qIFBXTUMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUFdNQ19JTVI7ICAgICAgICAgIC8qIFBXTUMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUFdNQ19JU1I7ICAgICAgICAgIC8qIFBXTUMgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDBbIDU1IF07ICAgLyogKi8NCi0gICAgQVQ5MV9SRUcgUFdNQ19WUjsgICAgICAgICAgIC8qIFBXTUMgVmVyc2lvbiBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDFbIDY0IF07ICAgLyogKi8NCi0gICAgQVQ5MVNfUFdNQ19DSCBQV01DX0NIWyA0IF07IC8qIFBXTUMgQ2hhbm5lbCAqLw0KLX0gQVQ5MVNfUFdNQywgKiBBVDkxUFNfUFdNQzsNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFB1bHNlIFdpZHRoIE1vZHVsYXRpb24gQ29udHJvbGxlciBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19QV01DIHsNCisJQVQ5MV9SRUcJIFBXTUNfTVI7IAkvLyBQV01DIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBXTUNfRU5BOyAJLy8gUFdNQyBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBXTUNfRElTOyAJLy8gUFdNQyBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQV01DX1NSOyAJLy8gUFdNQyBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBXTUNfSUVSOyAJLy8gUFdNQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBQV01DX0lEUjsgCS8vIFBXTUMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFBXTUNfSU1SOyAJLy8gUFdNQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUFdNQ19JU1I7IAkvLyBQV01DIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFs1NV07IAkvLyANCisJQVQ5MV9SRUcJIFBXTUNfVlI7IAkvLyBQV01DIFZlcnNpb24gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMVs2NF07IAkvLyANCisJQVQ5MVNfUFdNQ19DSAkgUFdNQ19DSFs0XTsgCS8vIFBXTUMgQ2hhbm5lbA0KK30gQVQ5MVNfUFdNQywgKkFUOTFQU19QV01DOw0KIA0KLS8qIC0tLS0tLS0tIFBXTUNfTVIgOiAoUFdNQyBPZmZzZXQ6IDB4MCkgUFdNQyBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19QV01DX0RJVkEgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRiA8PCAwICkgIC8qIChQV01DKSBDTEtBIGRpdmlkZSBmYWN0b3IuICovDQotI2RlZmluZSBBVDkxQ19QV01DX1BSRUEgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGIDw8IDggKSAgIC8qIChQV01DKSBEaXZpZGVyIElucHV0IENsb2NrIFByZXNjYWxlciBBICovDQotI2RlZmluZSAgICAgQVQ5MUNfUFdNQ19QUkVBX01DSyAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDggKSAgIC8qIChQV01DKSAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19ESVZCICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RkYgPDwgMTYgKSAvKiAoUFdNQykgQ0xLQiBkaXZpZGUgZmFjdG9yLiAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19QUkVCICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RiA8PCAyNCApICAvKiAoUFdNQykgRGl2aWRlciBJbnB1dCBDbG9jayBQcmVzY2FsZXIgQiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1BXTUNfUFJFQl9NQ0sgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAyNCApICAvKiAoUFdNQykgKi8NCi0vKiAtLS0tLS0tLSBQV01DX0VOQSA6IChQV01DIE9mZnNldDogMHg0KSBQV01DIEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSElEMCAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgICAvKiAoUFdNQykgQ2hhbm5lbCBJRCAwICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NISUQxICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEgKSAgIC8qIChQV01DKSBDaGFubmVsIElEIDEgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0hJRDIgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMiApICAgLyogKFBXTUMpIENoYW5uZWwgSUQgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSElEMyAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzICkgICAvKiAoUFdNQykgQ2hhbm5lbCBJRCAzICovDQotLyogLS0tLS0tLS0gUFdNQ19ESVMgOiAoUFdNQyBPZmZzZXQ6IDB4OCkgUFdNQyBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gUFdNQ19TUiA6IChQV01DIE9mZnNldDogMHhjKSBQV01DIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFBXTUNfSUVSIDogKFBXTUMgT2Zmc2V0OiAweDEwKSBQV01DIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBQV01DX0lEUiA6IChQV01DIE9mZnNldDogMHgxNCkgUFdNQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFBXTUNfSU1SIDogKFBXTUMgT2Zmc2V0OiAweDE4KSBQV01DIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gUFdNQ19JU1IgOiAoUFdNQyBPZmZzZXQ6IDB4MWMpIFBXTUMgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KKy8vIC0tLS0tLS0tIFBXTUNfTVIgOiAoUFdNQyBPZmZzZXQ6IDB4MCkgUFdNQyBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19ESVZBICAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8ICAwKSAvLyAoUFdNQykgQ0xLQSBkaXZpZGUgZmFjdG9yLg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19QUkVBICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgIDgpIC8vIChQV01DKSBEaXZpZGVyIElucHV0IENsb2NrIFByZXNjYWxlciBBDQorI2RlZmluZSAJQVQ5MUNfUFdNQ19QUkVBX01DSyAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDgpIC8vIChQV01DKSANCisjZGVmaW5lIEFUOTFDX1BXTUNfRElWQiAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRiA8PCAxNikgLy8gKFBXTUMpIENMS0IgZGl2aWRlIGZhY3Rvci4NCisjZGVmaW5lIEFUOTFDX1BXTUNfUFJFQiAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8IDI0KSAvLyAoUFdNQykgRGl2aWRlciBJbnB1dCBDbG9jayBQcmVzY2FsZXIgQg0KKyNkZWZpbmUgCUFUOTFDX1BXTUNfUFJFQl9NQ0sgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDI0KSAvLyAoUFdNQykgDQorLy8gLS0tLS0tLS0gUFdNQ19FTkEgOiAoUFdNQyBPZmZzZXQ6IDB4NCkgUFdNQyBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QV01DX0NISUQwICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFBXTUMpIENoYW5uZWwgSUQgMA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSElEMSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChQV01DKSBDaGFubmVsIElEIDENCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0hJRDIgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoUFdNQykgQ2hhbm5lbCBJRCAyDQorI2RlZmluZSBBVDkxQ19QV01DX0NISUQzICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKFBXTUMpIENoYW5uZWwgSUQgMw0KKy8vIC0tLS0tLS0tIFBXTUNfRElTIDogKFBXTUMgT2Zmc2V0OiAweDgpIFBXTUMgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQV01DX1NSIDogKFBXTUMgT2Zmc2V0OiAweGMpIFBXTUMgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFBXTUNfSUVSIDogKFBXTUMgT2Zmc2V0OiAweDEwKSBQV01DIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUFdNQ19JRFIgOiAoUFdNQyBPZmZzZXQ6IDB4MTQpIFBXTUMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUFdNQ19JTVIgOiAoUFdNQyBPZmZzZXQ6IDB4MTgpIFBXTUMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUFdNQ19JU1IgOiAoUFdNQyBPZmZzZXQ6IDB4MWMpIFBXTUMgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFVTQiBEZXZpY2UgSW50ZXJmYWNlICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfVURQDQotew0KLSAgICBBVDkxX1JFRyBVRFBfTlVNOyAgICAgICAgLyogRnJhbWUgTnVtYmVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFVEUF9HTEJTVEFURTsgICAvKiBHbG9iYWwgU3RhdGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVURQX0ZBRERSOyAgICAgIC8qIEZ1bmN0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQwWyAxIF07IC8qICovDQotICAgIEFUOTFfUkVHIFVEUF9JRVI7ICAgICAgICAvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFVEUF9JRFI7ICAgICAgICAvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBVRFBfSU1SOyAgICAgICAgLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVURQX0lTUjsgICAgICAgIC8qIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVURQX0lDUjsgICAgICAgIC8qIEludGVycnVwdCBDbGVhciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDFbIDEgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgVURQX1JTVEVQOyAgICAgIC8qIFJlc2V0IEVuZHBvaW50IFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMlsgMSBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBVRFBfQ1NSWyA2IF07ICAgLyogRW5kcG9pbnQgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkM1sgMiBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBVRFBfRkRSWyA2IF07ICAgLyogRW5kcG9pbnQgRklGTyBEYXRhIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkNFsgMyBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBVRFBfVFhWQzsgICAgICAgLyogVHJhbnNjZWl2ZXIgQ29udHJvbCBSZWdpc3RlciAqLw0KLX0gQVQ5MVNfVURQLCAqIEFUOTFQU19VRFA7DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBVU0IgRGV2aWNlIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1VEUCB7DQorCUFUOTFfUkVHCSBVRFBfTlVNOyAJLy8gRnJhbWUgTnVtYmVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVRFBfR0xCU1RBVEU7IAkvLyBHbG9iYWwgU3RhdGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVEUF9GQUREUjsgCS8vIEZ1bmN0aW9uIEFkZHJlc3MgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFsxXTsgCS8vIA0KKwlBVDkxX1JFRwkgVURQX0lFUjsgCS8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFVEUF9JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVURQX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBVRFBfSVNSOyAJLy8gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVURQX0lDUjsgCS8vIEludGVycnVwdCBDbGVhciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBVRFBfUlNURVA7IAkvLyBSZXNldCBFbmRwb2ludCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQyWzFdOyAJLy8gDQorCUFUOTFfUkVHCSBVRFBfQ1NSWzZdOyAJLy8gRW5kcG9pbnQgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDNbMl07IAkvLyANCisJQVQ5MV9SRUcJIFVEUF9GRFJbNl07IAkvLyBFbmRwb2ludCBGSUZPIERhdGEgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkNFszXTsgCS8vIA0KKwlBVDkxX1JFRwkgVURQX1RYVkM7IAkvLyBUcmFuc2NlaXZlciBDb250cm9sIFJlZ2lzdGVyDQorfSBBVDkxU19VRFAsICpBVDkxUFNfVURQOw0KIA0KLS8qIC0tLS0tLS0tIFVEUF9GUk1fTlVNIDogKFVEUCBPZmZzZXQ6IDB4MCkgVVNCIEZyYW1lIE51bWJlciBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0ZSTV9OVU0gICAgKCAoIHVuc2lnbmVkIGludCApIDB4N0ZGIDw8IDAgKSAvKiAoVURQKSBGcmFtZSBOdW1iZXIgYXMgRGVmaW5lZCBpbiB0aGUgUGFja2V0IEZpZWxkIEZvcm1hdHMgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9GUk1fRVJSICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTYgKSAgLyogKFVEUCkgRnJhbWUgRXJyb3IgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9GUk1fT0sgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTcgKSAgLyogKFVEUCkgRnJhbWUgT0sgKi8NCi0vKiAtLS0tLS0tLSBVRFBfR0xCX1NUQVRFIDogKFVEUCBPZmZzZXQ6IDB4NCkgVVNCIEdsb2JhbCBTdGF0ZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0ZBRERFTiAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgICAvKiAoVURQKSBGdW5jdGlvbiBBZGRyZXNzIEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0NPTkZHICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgICAvKiAoVURQKSBDb25maWd1cmVkICovDQotI2RlZmluZSBBVDkxQ19VRFBfRVNSICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAgIC8qIChVRFApIEVuYWJsZSBTZW5kIFJlc3VtZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX1JTTUlOUFIgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzICkgICAvKiAoVURQKSBBIFJlc3VtZSBIYXMgQmVlbiBTZW50IHRvIHRoZSBIb3N0ICovDQotI2RlZmluZSBBVDkxQ19VRFBfUk1XVVBFICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDQgKSAgIC8qIChVRFApIFJlbW90ZSBXYWtlIFVwIEVuYWJsZSAqLw0KLS8qIC0tLS0tLS0tIFVEUF9GQUREUiA6IChVRFAgT2Zmc2V0OiAweDgpIFVTQiBGdW5jdGlvbiBBZGRyZXNzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19VRFBfRkFERCAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRiA8PCAwICkgIC8qIChVRFApIEZ1bmN0aW9uIEFkZHJlc3MgVmFsdWUgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9GRU4gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOCApICAgLyogKFVEUCkgRnVuY3Rpb24gRW5hYmxlICovDQotLyogLS0tLS0tLS0gVURQX0lFUiA6IChVRFAgT2Zmc2V0OiAweDEwKSBVU0IgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UMCAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgICAvKiAoVURQKSBFbmRwb2ludCAwIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UMSAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgICAvKiAoVURQKSBFbmRwb2ludCAwIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UMiAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyICkgICAvKiAoVURQKSBFbmRwb2ludCAyIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UMyAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzICkgICAvKiAoVURQKSBFbmRwb2ludCAzIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UNCAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA0ICkgICAvKiAoVURQKSBFbmRwb2ludCA0IEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UNSAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA1ICkgICAvKiAoVURQKSBFbmRwb2ludCA1IEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX1JYU1VTUCAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgICAvKiAoVURQKSBVU0IgU3VzcGVuZCBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9SWFJTTSAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOSApICAgLyogKFVEUCkgVVNCIFJlc3VtZSBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FWFRSU00gICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTAgKSAgLyogKFVEUCkgVVNCIEV4dGVybmFsIFJlc3VtZSBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9TT0ZJTlQgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTEgKSAgLyogKFVEUCkgVVNCIFN0YXJ0IE9mIGZyYW1lIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX1dBS0VVUCAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMyApICAvKiAoVURQKSBVU0IgUmVzdW1lIEludGVycnVwdCAqLw0KLS8qIC0tLS0tLS0tIFVEUF9JRFIgOiAoVURQIE9mZnNldDogMHgxNCkgVVNCIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gVURQX0lNUiA6IChVRFAgT2Zmc2V0OiAweDE4KSBVU0IgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBVRFBfSVNSIDogKFVEUCBPZmZzZXQ6IDB4MWMpIFVTQiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19VRFBfRU5EQlVTUkVTICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEyICkgLyogKFVEUCkgVVNCIEVuZCBPZiBCdXMgUmVzZXQgSW50ZXJydXB0ICovDQotLyogLS0tLS0tLS0gVURQX0lDUiA6IChVRFAgT2Zmc2V0OiAweDIwKSBVU0IgSW50ZXJydXB0IENsZWFyIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gVURQX1JTVF9FUCA6IChVRFAgT2Zmc2V0OiAweDI4KSBVU0IgUmVzZXQgRW5kcG9pbnQgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUDAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgIC8qIChVRFApIFJlc2V0IEVuZHBvaW50IDAgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUDEgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAgIC8qIChVRFApIFJlc2V0IEVuZHBvaW50IDEgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUDIgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMiApICAgIC8qIChVRFApIFJlc2V0IEVuZHBvaW50IDIgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUDMgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMyApICAgIC8qIChVRFApIFJlc2V0IEVuZHBvaW50IDMgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUDQgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNCApICAgIC8qIChVRFApIFJlc2V0IEVuZHBvaW50IDQgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUDUgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNSApICAgIC8qIChVRFApIFJlc2V0IEVuZHBvaW50IDUgKi8NCi0vKiAtLS0tLS0tLSBVRFBfQ1NSIDogKFVEUCBPZmZzZXQ6IDB4MzApIFVTQiBFbmRwb2ludCBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9UWENPTVAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgIC8qIChVRFApIEdlbmVyYXRlcyBhbiBJTiBwYWNrZXQgd2l0aCBkYXRhIHByZXZpb3VzbHkgd3JpdHRlbiBpbiB0aGUgRFBSICovDQotI2RlZmluZSBBVDkxQ19VRFBfUlhfREFUQV9CSzAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEgKSAgICAvKiAoVURQKSBSZWNlaXZlIERhdGEgQmFuayAwICovDQotI2RlZmluZSBBVDkxQ19VRFBfUlhTRVRVUCAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAgICAvKiAoVURQKSBTZW5kcyBTVEFMTCB0byB0aGUgSG9zdCAoQ29udHJvbCBlbmRwb2ludHMpICovDQotI2RlZmluZSBBVDkxQ19VRFBfSVNPRVJST1IgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDMgKSAgICAvKiAoVURQKSBJc29jaHJvbm91cyBlcnJvciAoSXNvY2hyb25vdXMgZW5kcG9pbnRzKSAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX1RYUEtUUkRZICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA0ICkgICAgLyogKFVEUCkgVHJhbnNtaXQgUGFja2V0IFJlYWR5ICovDQotI2RlZmluZSBBVDkxQ19VRFBfRk9SQ0VTVEFMTCAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDUgKSAgICAvKiAoVURQKSBGb3JjZSBTdGFsbCAodXNlZCBieSBDb250cm9sLCBCdWxrIGFuZCBJc29jaHJvbm91cyBlbmRwb2ludHMpLiAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX1JYX0RBVEFfQksxICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA2ICkgICAgLyogKFVEUCkgUmVjZWl2ZSBEYXRhIEJhbmsgMSAob25seSB1c2VkIGJ5IGVuZHBvaW50cyB3aXRoIHBpbmctcG9uZyBhdHRyaWJ1dGVzKS4gKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9ESVIgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNyApICAgIC8qIChVRFApIFRyYW5zZmVyIERpcmVjdGlvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0VQVFlQRSAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NyA8PCA4ICkgICAgLyogKFVEUCkgRW5kcG9pbnQgdHlwZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VEUF9FUFRZUEVfQ1RSTCAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCA4ICkgICAgLyogKFVEUCkgQ29udHJvbCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VEUF9FUFRZUEVfSVNPX09VVCAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgICAgLyogKFVEUCkgSXNvY2hyb25vdXMgT1VUICovDQotI2RlZmluZSAgICAgQVQ5MUNfVURQX0VQVFlQRV9CVUxLX09VVCAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDggKSAgICAvKiAoVURQKSBCdWxrIE9VVCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VEUF9FUFRZUEVfSU5UX09VVCAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCA4ICkgICAgLyogKFVEUCkgSW50ZXJydXB0IE9VVCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VEUF9FUFRZUEVfSVNPX0lOICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NSA8PCA4ICkgICAgLyogKFVEUCkgSXNvY2hyb25vdXMgSU4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VRFBfRVBUWVBFX0JVTEtfSU4gICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDYgPDwgOCApICAgIC8qIChVRFApIEJ1bGsgSU4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VRFBfRVBUWVBFX0lOVF9JTiAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDcgPDwgOCApICAgIC8qIChVRFApIEludGVycnVwdCBJTiAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0RUR0xFICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMSApICAgLyogKFVEUCkgRGF0YSBUb2dnbGUgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUEVEUyAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTUgKSAgIC8qIChVRFApIEVuZHBvaW50IEVuYWJsZSBEaXNhYmxlICovDQotI2RlZmluZSBBVDkxQ19VRFBfUlhCWVRFQ05UICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg3RkYgPDwgMTYgKSAvKiAoVURQKSBOdW1iZXIgT2YgQnl0ZXMgQXZhaWxhYmxlIGluIHRoZSBGSUZPICovDQotLyogLS0tLS0tLS0gVURQX1RYVkMgOiAoVURQIE9mZnNldDogMHg3NCkgVHJhbnNjZWl2ZXIgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX1RYVkRJUyAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgICAgLyogKFVEUCkgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9QVU9OICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOSApICAgIC8qIChVRFApIFB1bGwtdXAgT04gKi8NCisvLyAtLS0tLS0tLSBVRFBfRlJNX05VTSA6IChVRFAgT2Zmc2V0OiAweDApIFVTQiBGcmFtZSBOdW1iZXIgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VRFBfRlJNX05VTSAgICAgKCh1bnNpZ25lZCBpbnQpIDB4N0ZGIDw8ICAwKSAvLyAoVURQKSBGcmFtZSBOdW1iZXIgYXMgRGVmaW5lZCBpbiB0aGUgUGFja2V0IEZpZWxkIEZvcm1hdHMNCisjZGVmaW5lIEFUOTFDX1VEUF9GUk1fRVJSICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoVURQKSBGcmFtZSBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZSTV9PSyAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTcpIC8vIChVRFApIEZyYW1lIE9LDQorLy8gLS0tLS0tLS0gVURQX0dMQl9TVEFURSA6IChVRFAgT2Zmc2V0OiAweDQpIFVTQiBHbG9iYWwgU3RhdGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VRFBfRkFEREVOICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFVEUCkgRnVuY3Rpb24gQWRkcmVzcyBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1VEUF9DT05GRyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoVURQKSBDb25maWd1cmVkDQorI2RlZmluZSBBVDkxQ19VRFBfRVNSICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFVEUCkgRW5hYmxlIFNlbmQgUmVzdW1lDQorI2RlZmluZSBBVDkxQ19VRFBfUlNNSU5QUiAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKFVEUCkgQSBSZXN1bWUgSGFzIEJlZW4gU2VudCB0byB0aGUgSG9zdA0KKyNkZWZpbmUgQVQ5MUNfVURQX1JNV1VQRSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChVRFApIFJlbW90ZSBXYWtlIFVwIEVuYWJsZQ0KKy8vIC0tLS0tLS0tIFVEUF9GQUREUiA6IChVRFAgT2Zmc2V0OiAweDgpIFVTQiBGdW5jdGlvbiBBZGRyZXNzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZBREQgICAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8ICAwKSAvLyAoVURQKSBGdW5jdGlvbiBBZGRyZXNzIFZhbHVlDQorI2RlZmluZSBBVDkxQ19VRFBfRkVOICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFVEUCkgRnVuY3Rpb24gRW5hYmxlDQorLy8gLS0tLS0tLS0gVURQX0lFUiA6IChVRFAgT2Zmc2V0OiAweDEwKSBVU0IgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VEUF9FUElOVDAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoVURQKSBFbmRwb2ludCAwIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UMSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChVRFApIEVuZHBvaW50IDAgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfRVBJTlQyICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFVEUCkgRW5kcG9pbnQgMiBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9FUElOVDMgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoVURQKSBFbmRwb2ludCAzIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UNCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChVRFApIEVuZHBvaW50IDQgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfRVBJTlQ1ICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKFVEUCkgRW5kcG9pbnQgNSBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9SWFNVU1AgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoVURQKSBVU0IgU3VzcGVuZCBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9SWFJTTSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvLyAoVURQKSBVU0IgUmVzdW1lIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VYVFJTTSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChVRFApIFVTQiBFeHRlcm5hbCBSZXN1bWUgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VRFBfU09GSU5UICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMSkgLy8gKFVEUCkgVVNCIFN0YXJ0IE9mIGZyYW1lIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX1dBS0VVUCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTMpIC8vIChVRFApIFVTQiBSZXN1bWUgSW50ZXJydXB0DQorLy8gLS0tLS0tLS0gVURQX0lEUiA6IChVRFAgT2Zmc2V0OiAweDE0KSBVU0IgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVURQX0lNUiA6IChVRFAgT2Zmc2V0OiAweDE4KSBVU0IgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVURQX0lTUiA6IChVRFAgT2Zmc2V0OiAweDFjKSBVU0IgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VEUF9FTkRCVVNSRVMgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvLyAoVURQKSBVU0IgRW5kIE9mIEJ1cyBSZXNldCBJbnRlcnJ1cHQNCisvLyAtLS0tLS0tLSBVRFBfSUNSIDogKFVEUCBPZmZzZXQ6IDB4MjApIFVTQiBJbnRlcnJ1cHQgQ2xlYXIgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVURQX1JTVF9FUCA6IChVRFAgT2Zmc2V0OiAweDI4KSBVU0IgUmVzZXQgRW5kcG9pbnQgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VRFBfRVAwICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFVEUCkgUmVzZXQgRW5kcG9pbnQgMA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQMSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChVRFApIFJlc2V0IEVuZHBvaW50IDENCisjZGVmaW5lIEFUOTFDX1VEUF9FUDIgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoVURQKSBSZXNldCBFbmRwb2ludCAyDQorI2RlZmluZSBBVDkxQ19VRFBfRVAzICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKFVEUCkgUmVzZXQgRW5kcG9pbnQgMw0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQNCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChVRFApIFJlc2V0IEVuZHBvaW50IDQNCisjZGVmaW5lIEFUOTFDX1VEUF9FUDUgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoVURQKSBSZXNldCBFbmRwb2ludCA1DQorLy8gLS0tLS0tLS0gVURQX0NTUiA6IChVRFAgT2Zmc2V0OiAweDMwKSBVU0IgRW5kcG9pbnQgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVURQX1RYQ09NUCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChVRFApIEdlbmVyYXRlcyBhbiBJTiBwYWNrZXQgd2l0aCBkYXRhIHByZXZpb3VzbHkgd3JpdHRlbiBpbiB0aGUgRFBSDQorI2RlZmluZSBBVDkxQ19VRFBfUlhfREFUQV9CSzAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFVEUCkgUmVjZWl2ZSBEYXRhIEJhbmsgMA0KKyNkZWZpbmUgQVQ5MUNfVURQX1JYU0VUVVAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8vIChVRFApIFNlbmRzIFNUQUxMIHRvIHRoZSBIb3N0IChDb250cm9sIGVuZHBvaW50cykNCisjZGVmaW5lIEFUOTFDX1VEUF9JU09FUlJPUiAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoVURQKSBJc29jaHJvbm91cyBlcnJvciAoSXNvY2hyb25vdXMgZW5kcG9pbnRzKQ0KKyNkZWZpbmUgQVQ5MUNfVURQX1RYUEtUUkRZICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChVRFApIFRyYW5zbWl0IFBhY2tldCBSZWFkeQ0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZPUkNFU1RBTEwgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChVRFApIEZvcmNlIFN0YWxsICh1c2VkIGJ5IENvbnRyb2wsIEJ1bGsgYW5kIElzb2Nocm9ub3VzIGVuZHBvaW50cykuDQorI2RlZmluZSBBVDkxQ19VRFBfUlhfREFUQV9CSzEgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLy8gKFVEUCkgUmVjZWl2ZSBEYXRhIEJhbmsgMSAob25seSB1c2VkIGJ5IGVuZHBvaW50cyB3aXRoIHBpbmctcG9uZyBhdHRyaWJ1dGVzKS4NCisjZGVmaW5lIEFUOTFDX1VEUF9ESVIgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoVURQKSBUcmFuc2ZlciBEaXJlY3Rpb24NCisjZGVmaW5lIEFUOTFDX1VEUF9FUFRZUEUgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8ICA4KSAvLyAoVURQKSBFbmRwb2ludCB0eXBlDQorI2RlZmluZSAJQVQ5MUNfVURQX0VQVFlQRV9DVFJMICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICA4KSAvLyAoVURQKSBDb250cm9sDQorI2RlZmluZSAJQVQ5MUNfVURQX0VQVFlQRV9JU09fT1VUICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoVURQKSBJc29jaHJvbm91cyBPVVQNCisjZGVmaW5lIAlBVDkxQ19VRFBfRVBUWVBFX0JVTEtfT1VUICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDgpIC8vIChVRFApIEJ1bGsgT1VUDQorI2RlZmluZSAJQVQ5MUNfVURQX0VQVFlQRV9JTlRfT1VUICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA4KSAvLyAoVURQKSBJbnRlcnJ1cHQgT1VUDQorI2RlZmluZSAJQVQ5MUNfVURQX0VQVFlQRV9JU09fSU4gICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg1IDw8ICA4KSAvLyAoVURQKSBJc29jaHJvbm91cyBJTg0KKyNkZWZpbmUgCUFUOTFDX1VEUF9FUFRZUEVfQlVMS19JTiAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NiA8PCAgOCkgLy8gKFVEUCkgQnVsayBJTg0KKyNkZWZpbmUgCUFUOTFDX1VEUF9FUFRZUEVfSU5UX0lOICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAgOCkgLy8gKFVEUCkgSW50ZXJydXB0IElODQorI2RlZmluZSBBVDkxQ19VRFBfRFRHTEUgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMSkgLy8gKFVEUCkgRGF0YSBUb2dnbGUNCisjZGVmaW5lIEFUOTFDX1VEUF9FUEVEUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE1KSAvLyAoVURQKSBFbmRwb2ludCBFbmFibGUgRGlzYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVURQX1JYQllURUNOVCAgICgodW5zaWduZWQgaW50KSAweDdGRiA8PCAxNikgLy8gKFVEUCkgTnVtYmVyIE9mIEJ5dGVzIEF2YWlsYWJsZSBpbiB0aGUgRklGTw0KKy8vIC0tLS0tLS0tIFVEUF9UWFZDIDogKFVEUCBPZmZzZXQ6IDB4NzQpIFRyYW5zY2VpdmVyIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VRFBfVFhWRElTICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFVEUCkgDQorI2RlZmluZSBBVDkxQ19VRFBfUFVPTiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLy8gKFVEUCkgUHVsbC11cCBPTg0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVGltZXIgQ291bnRlciBDaGFubmVsIEludGVyZmFjZSAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotdHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1RDDQotew0KLSAgICBBVDkxX1JFRyBUQ19DQ1I7ICAgICAgICAgLyogQ2hhbm5lbCBDb250cm9sIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFRDX0NNUjsgICAgICAgICAvKiBDaGFubmVsIE1vZGUgUmVnaXN0ZXIgKENhcHR1cmUgTW9kZSAvIFdhdmVmb3JtIE1vZGUpICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMFsgMiBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBUQ19DVjsgICAgICAgICAgLyogQ291bnRlciBWYWx1ZSAqLw0KLSAgICBBVDkxX1JFRyBUQ19SQTsgICAgICAgICAgLyogUmVnaXN0ZXIgQSAqLw0KLSAgICBBVDkxX1JFRyBUQ19SQjsgICAgICAgICAgLyogUmVnaXN0ZXIgQiAqLw0KLSAgICBBVDkxX1JFRyBUQ19SQzsgICAgICAgICAgLyogUmVnaXN0ZXIgQyAqLw0KLSAgICBBVDkxX1JFRyBUQ19TUjsgICAgICAgICAgLyogU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFRDX0lFUjsgICAgICAgICAvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFRDX0lEUjsgICAgICAgICAvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBUQ19JTVI7ICAgICAgICAgLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi19IEFUOTFTX1RDLCAqIEFUOTFQU19UQzsNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFRpbWVyIENvdW50ZXIgQ2hhbm5lbCBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19UQyB7DQorCUFUOTFfUkVHCSBUQ19DQ1I7IAkvLyBDaGFubmVsIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRDX0NNUjsgCS8vIENoYW5uZWwgTW9kZSBSZWdpc3RlciAoQ2FwdHVyZSBNb2RlIC8gV2F2ZWZvcm0gTW9kZSkNCisJQVQ5MV9SRUcJIFJlc2VydmVkMFsyXTsgCS8vIA0KKwlBVDkxX1JFRwkgVENfQ1Y7IAkvLyBDb3VudGVyIFZhbHVlDQorCUFUOTFfUkVHCSBUQ19SQTsgCS8vIFJlZ2lzdGVyIEENCisJQVQ5MV9SRUcJIFRDX1JCOyAJLy8gUmVnaXN0ZXIgQg0KKwlBVDkxX1JFRwkgVENfUkM7IAkvLyBSZWdpc3RlciBDDQorCUFUOTFfUkVHCSBUQ19TUjsgCS8vIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVENfSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVENfSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRDX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorfSBBVDkxU19UQywgKkFUOTFQU19UQzsNCiANCi0vKiAtLS0tLS0tLSBUQ19DQ1IgOiAoVEMgT2Zmc2V0OiAweDApIFRDIENoYW5uZWwgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQ0xLRU4gICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgLyogKFRDKSBDb3VudGVyIENsb2NrIEVuYWJsZSBDb21tYW5kICovDQotI2RlZmluZSBBVDkxQ19UQ19DTEtESVMgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAvKiAoVEMpIENvdW50ZXIgQ2xvY2sgRGlzYWJsZSBDb21tYW5kICovDQotI2RlZmluZSBBVDkxQ19UQ19TV1RSRyAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMiApICAvKiAoVEMpIFNvZnR3YXJlIFRyaWdnZXIgQ29tbWFuZCAqLw0KLS8qIC0tLS0tLS0tIFRDX0NNUiA6IChUQyBPZmZzZXQ6IDB4NCkgVEMgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyOiBDYXB0dXJlIE1vZGUgLyBXYXZlZm9ybSBNb2RlIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19UQ19DTEtTICAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDcgPDwgMCApICAvKiAoVEMpIENsb2NrIFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0NMS1NfVElNRVJfRElWMV9DTE9DSyAgICAoICggdW5zaWduZWQgaW50ICkgMHgwICkgICAgICAgLyogKFRDKSBDbG9jayBzZWxlY3RlZDogVElNRVJfRElWMV9DTE9DSyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0NMS1NfVElNRVJfRElWMl9DTE9DSyAgICAoICggdW5zaWduZWQgaW50ICkgMHgxICkgICAgICAgLyogKFRDKSBDbG9jayBzZWxlY3RlZDogVElNRVJfRElWMl9DTE9DSyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0NMS1NfVElNRVJfRElWM19DTE9DSyAgICAoICggdW5zaWduZWQgaW50ICkgMHgyICkgICAgICAgLyogKFRDKSBDbG9jayBzZWxlY3RlZDogVElNRVJfRElWM19DTE9DSyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0NMS1NfVElNRVJfRElWNF9DTE9DSyAgICAoICggdW5zaWduZWQgaW50ICkgMHgzICkgICAgICAgLyogKFRDKSBDbG9jayBzZWxlY3RlZDogVElNRVJfRElWNF9DTE9DSyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0NMS1NfVElNRVJfRElWNV9DTE9DSyAgICAoICggdW5zaWduZWQgaW50ICkgMHg0ICkgICAgICAgLyogKFRDKSBDbG9jayBzZWxlY3RlZDogVElNRVJfRElWNV9DTE9DSyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0NMS1NfWEMwICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg1ICkgICAgICAgLyogKFRDKSBDbG9jayBzZWxlY3RlZDogWEMwICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQ0xLU19YQzEgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDYgKSAgICAgICAvKiAoVEMpIENsb2NrIHNlbGVjdGVkOiBYQzEgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19DTEtTX1hDMiAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NyApICAgICAgIC8qIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFhDMiAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQ0xLSSAgICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDMgKSAgLyogKFRDKSBDbG9jayBJbnZlcnQgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0JVUlNUICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCA0ICkgIC8qIChUQykgQnVyc3QgU2lnbmFsIFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JVUlNUX05PTkUgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDQgKSAgLyogKFRDKSBUaGUgY2xvY2sgaXMgbm90IGdhdGVkIGJ5IGFuIGV4dGVybmFsIHNpZ25hbCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JVUlNUX1hDMCAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDQgKSAgLyogKFRDKSBYQzAgaXMgQU5EZWQgd2l0aCB0aGUgc2VsZWN0ZWQgY2xvY2sgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19CVVJTVF9YQzEgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCA0ICkgIC8qIChUQykgWEMxIGlzIEFORGVkIHdpdGggdGhlIHNlbGVjdGVkIGNsb2NrICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQlVSU1RfWEMyICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgNCApICAvKiAoVEMpIFhDMiBpcyBBTkRlZCB3aXRoIHRoZSBzZWxlY3RlZCBjbG9jayAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQ1BDU1RPUCAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDYgKSAgLyogKFRDKSBDb3VudGVyIENsb2NrIFN0b3BwZWQgd2l0aCBSQyBDb21wYXJlICovDQotI2RlZmluZSBBVDkxQ19UQ19MREJTVE9QICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNiApICAvKiAoVEMpIENvdW50ZXIgQ2xvY2sgU3RvcHBlZCB3aXRoIFJCIExvYWRpbmcgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0NQQ0RJUyAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA3ICkgIC8qIChUQykgQ291bnRlciBDbG9jayBEaXNhYmxlIHdpdGggUkMgQ29tcGFyZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfTERCRElTICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDcgKSAgLyogKFRDKSBDb3VudGVyIENsb2NrIERpc2FibGVkIHdpdGggUkIgTG9hZGluZyAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfRVRSR0VERyAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDggKSAgLyogKFRDKSBFeHRlcm5hbCBUcmlnZ2VyIEVkZ2UgU2VsZWN0aW9uICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfRVRSR0VER19OT05FICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgOCApICAvKiAoVEMpIEVkZ2U6IE5vbmUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19FVFJHRURHX1JJU0lORyAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgIC8qIChUQykgRWRnZTogcmlzaW5nIGVkZ2UgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19FVFJHRURHX0ZBTExJTkcgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCA4ICkgIC8qIChUQykgRWRnZTogZmFsbGluZyBlZGdlICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfRVRSR0VER19CT1RIICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgOCApICAvKiAoVEMpIEVkZ2U6IGVhY2ggZWRnZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfRUVWVEVERyAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDggKSAgLyogKFRDKSBFeHRlcm5hbCBFdmVudCBFZGdlIFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0VFVlRFREdfTk9ORSAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDggKSAgLyogKFRDKSBFZGdlOiBOb25lICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfRUVWVEVER19SSVNJTkcgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOCApICAvKiAoVEMpIEVkZ2U6IHJpc2luZyBlZGdlICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfRUVWVEVER19GQUxMSU5HICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgOCApICAvKiAoVEMpIEVkZ2U6IGZhbGxpbmcgZWRnZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0VFVlRFREdfQk9USCAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDggKSAgLyogKFRDKSBFZGdlOiBlYWNoIGVkZ2UgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0VFVlQgICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAxMCApIC8qIChUQykgRXh0ZXJuYWwgRXZlbnQgIFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0VFVlRfVElPQiAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDEwICkgLyogKFRDKSBTaWduYWwgc2VsZWN0ZWQgYXMgZXh0ZXJuYWwgZXZlbnQ6IFRJT0IgVElPQiBkaXJlY3Rpb246IGlucHV0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfRUVWVF9YQzAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTAgKSAvKiAoVEMpIFNpZ25hbCBzZWxlY3RlZCBhcyBleHRlcm5hbCBldmVudDogWEMwIFRJT0IgZGlyZWN0aW9uOiBvdXRwdXQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19FRVZUX1hDMSAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCAxMCApIC8qIChUQykgU2lnbmFsIHNlbGVjdGVkIGFzIGV4dGVybmFsIGV2ZW50OiBYQzEgVElPQiBkaXJlY3Rpb246IG91dHB1dCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0VFVlRfWEMyICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDEwICkgLyogKFRDKSBTaWduYWwgc2VsZWN0ZWQgYXMgZXh0ZXJuYWwgZXZlbnQ6IFhDMiBUSU9CIGRpcmVjdGlvbjogb3V0cHV0ICovDQotI2RlZmluZSBBVDkxQ19UQ19BQkVUUkcgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTAgKSAvKiAoVEMpIFRJT0Egb3IgVElPQiBFeHRlcm5hbCBUcmlnZ2VyIFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfRU5FVFJHICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEyICkgLyogKFRDKSBFeHRlcm5hbCBFdmVudCBUcmlnZ2VyIGVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfV0FWRVNFTCAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDEzICkgLyogKFRDKSBXYXZlZm9ybSAgU2VsZWN0aW9uICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfV0FWRVNFTF9VUCAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMTMgKSAvKiAoVEMpIFVQIG1vZGUgd2l0aG91dCBhdG9tYXRpYyB0cmlnZ2VyIG9uIFJDIENvbXBhcmUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19XQVZFU0VMX1VQRE9XTiAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMyApIC8qIChUQykgVVBET1dOIG1vZGUgd2l0aG91dCBhdXRvbWF0aWMgdHJpZ2dlciBvbiBSQyBDb21wYXJlICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfV0FWRVNFTF9VUF9BVVRPICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgMTMgKSAvKiAoVEMpIFVQIG1vZGUgd2l0aCBhdXRvbWF0aWMgdHJpZ2dlciBvbiBSQyBDb21wYXJlICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfV0FWRVNFTF9VUERPV05fQVVUTyAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTMgKSAvKiAoVEMpIFVQRE9XTiBtb2RlIHdpdGggYXV0b21hdGljIHRyaWdnZXIgb24gUkMgQ29tcGFyZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQ1BDVFJHICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE0ICkgLyogKFRDKSBSQyBDb21wYXJlIFRyaWdnZXIgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19UQ19XQVZFICAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTUgKSAvKiAoVEMpICovDQotI2RlZmluZSBBVDkxQ19UQ19BQ1BBICAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTYgKSAvKiAoVEMpIFJBIENvbXBhcmUgRWZmZWN0IG9uIFRJT0EgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19BQ1BBX05PTkUgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAxNiApIC8qIChUQykgRWZmZWN0OiBub25lICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQUNQQV9TRVQgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTYgKSAvKiAoVEMpIEVmZmVjdDogc2V0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQUNQQV9DTEVBUiAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgMTYgKSAvKiAoVEMpIEVmZmVjdDogY2xlYXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19BQ1BBX1RPR0dMRSAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAxNiApIC8qIChUQykgRWZmZWN0OiB0b2dnbGUgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0xEUkEgICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAxNiApIC8qIChUQykgUkEgTG9hZGluZyBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19MRFJBX05PTkUgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAxNiApIC8qIChUQykgRWRnZTogTm9uZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0xEUkFfUklTSU5HICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE2ICkgLyogKFRDKSBFZGdlOiByaXNpbmcgZWRnZSBvZiBUSU9BICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfTERSQV9GQUxMSU5HICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgMTYgKSAvKiAoVEMpIEVkZ2U6IGZhbGxpbmcgZWRnZSBvZiBUSU9BICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfTERSQV9CT1RIICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTYgKSAvKiAoVEMpIEVkZ2U6IGVhY2ggZWRnZSBvZiBUSU9BICovDQotI2RlZmluZSBBVDkxQ19UQ19BQ1BDICAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTggKSAvKiAoVEMpIFJDIENvbXBhcmUgRWZmZWN0IG9uIFRJT0EgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19BQ1BDX05PTkUgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAxOCApIC8qIChUQykgRWZmZWN0OiBub25lICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQUNQQ19TRVQgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTggKSAvKiAoVEMpIEVmZmVjdDogc2V0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQUNQQ19DTEVBUiAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgMTggKSAvKiAoVEMpIEVmZmVjdDogY2xlYXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19BQ1BDX1RPR0dMRSAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAxOCApIC8qIChUQykgRWZmZWN0OiB0b2dnbGUgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0xEUkIgICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAxOCApIC8qIChUQykgUkIgTG9hZGluZyBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19MRFJCX05PTkUgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAxOCApIC8qIChUQykgRWRnZTogTm9uZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0xEUkJfUklTSU5HICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE4ICkgLyogKFRDKSBFZGdlOiByaXNpbmcgZWRnZSBvZiBUSU9BICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfTERSQl9GQUxMSU5HICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgMTggKSAvKiAoVEMpIEVkZ2U6IGZhbGxpbmcgZWRnZSBvZiBUSU9BICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfTERSQl9CT1RIICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTggKSAvKiAoVEMpIEVkZ2U6IGVhY2ggZWRnZSBvZiBUSU9BICovDQotI2RlZmluZSBBVDkxQ19UQ19BRUVWVCAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMjAgKSAvKiAoVEMpIEV4dGVybmFsIEV2ZW50IEVmZmVjdCBvbiBUSU9BICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQUVFVlRfTk9ORSAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMjAgKSAvKiAoVEMpIEVmZmVjdDogbm9uZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0FFRVZUX1NFVCAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIwICkgLyogKFRDKSBFZmZlY3Q6IHNldCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0FFRVZUX0NMRUFSICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDIwICkgLyogKFRDKSBFZmZlY3Q6IGNsZWFyICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQUVFVlRfVE9HR0xFICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMjAgKSAvKiAoVEMpIEVmZmVjdDogdG9nZ2xlICovDQotI2RlZmluZSBBVDkxQ19UQ19BU1dUUkcgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMjIgKSAvKiAoVEMpIFNvZnR3YXJlIFRyaWdnZXIgRWZmZWN0IG9uIFRJT0EgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19BU1dUUkdfTk9ORSAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAyMiApIC8qIChUQykgRWZmZWN0OiBub25lICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQVNXVFJHX1NFVCAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjIgKSAvKiAoVEMpIEVmZmVjdDogc2V0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQVNXVFJHX0NMRUFSICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgMjIgKSAvKiAoVEMpIEVmZmVjdDogY2xlYXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19BU1dUUkdfVE9HR0xFICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAyMiApIC8qIChUQykgRWZmZWN0OiB0b2dnbGUgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0JDUEIgICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAyNCApIC8qIChUQykgUkIgQ29tcGFyZSBFZmZlY3Qgb24gVElPQiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JDUEJfTk9ORSAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDI0ICkgLyogKFRDKSBFZmZlY3Q6IG5vbmUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19CQ1BCX1NFVCAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyNCApIC8qIChUQykgRWZmZWN0OiBzZXQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19CQ1BCX0NMRUFSICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCAyNCApIC8qIChUQykgRWZmZWN0OiBjbGVhciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JDUEJfVE9HR0xFICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDI0ICkgLyogKFRDKSBFZmZlY3Q6IHRvZ2dsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQkNQQyAgICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDI2ICkgLyogKFRDKSBSQyBDb21wYXJlIEVmZmVjdCBvbiBUSU9CICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQkNQQ19OT05FICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMjYgKSAvKiAoVEMpIEVmZmVjdDogbm9uZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JDUENfU0VUICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDI2ICkgLyogKFRDKSBFZmZlY3Q6IHNldCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JDUENfQ0xFQVIgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDI2ICkgLyogKFRDKSBFZmZlY3Q6IGNsZWFyICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQkNQQ19UT0dHTEUgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMjYgKSAvKiAoVEMpIEVmZmVjdDogdG9nZ2xlICovDQotI2RlZmluZSBBVDkxQ19UQ19CRUVWVCAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMjggKSAvKiAoVEMpIEV4dGVybmFsIEV2ZW50IEVmZmVjdCBvbiBUSU9CICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQkVFVlRfTk9ORSAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMjggKSAvKiAoVEMpIEVmZmVjdDogbm9uZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JFRVZUX1NFVCAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDI4ICkgLyogKFRDKSBFZmZlY3Q6IHNldCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JFRVZUX0NMRUFSICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDI4ICkgLyogKFRDKSBFZmZlY3Q6IGNsZWFyICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQkVFVlRfVE9HR0xFICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMjggKSAvKiAoVEMpIEVmZmVjdDogdG9nZ2xlICovDQotI2RlZmluZSBBVDkxQ19UQ19CU1dUUkcgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMzAgKSAvKiAoVEMpIFNvZnR3YXJlIFRyaWdnZXIgRWZmZWN0IG9uIFRJT0IgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19CU1dUUkdfTk9ORSAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAzMCApIC8qIChUQykgRWZmZWN0OiBub25lICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQlNXVFJHX1NFVCAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMzAgKSAvKiAoVEMpIEVmZmVjdDogc2V0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQlNXVFJHX0NMRUFSICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgMzAgKSAvKiAoVEMpIEVmZmVjdDogY2xlYXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19CU1dUUkdfVE9HR0xFICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAzMCApIC8qIChUQykgRWZmZWN0OiB0b2dnbGUgKi8NCi0vKiAtLS0tLS0tLSBUQ19TUiA6IChUQyBPZmZzZXQ6IDB4MjApIFRDIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19UQ19DT1ZGUyAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAvKiAoVEMpIENvdW50ZXIgT3ZlcmZsb3cgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0xPVlJTICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgIC8qIChUQykgTG9hZCBPdmVycnVuICovDQotI2RlZmluZSBBVDkxQ19UQ19DUEFTICAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMiApICAvKiAoVEMpIFJBIENvbXBhcmUgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0NQQlMgICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzICkgIC8qIChUQykgUkIgQ29tcGFyZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQ1BDUyAgICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDQgKSAgLyogKFRDKSBSQyBDb21wYXJlICovDQotI2RlZmluZSBBVDkxQ19UQ19MRFJBUyAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNSApICAvKiAoVEMpIFJBIExvYWRpbmcgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0xEUkJTICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA2ICkgIC8qIChUQykgUkIgTG9hZGluZyAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfRVRSR1MgICAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDcgKSAgLyogKFRDKSBFeHRlcm5hbCBUcmlnZ2VyICovDQotI2RlZmluZSBBVDkxQ19UQ19DTEtTVEEgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTYgKSAvKiAoVEMpIENsb2NrIEVuYWJsaW5nICovDQotI2RlZmluZSBBVDkxQ19UQ19NVElPQSAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTcgKSAvKiAoVEMpIFRJT0EgTWlycm9yICovDQotI2RlZmluZSBBVDkxQ19UQ19NVElPQiAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTggKSAvKiAoVEMpIFRJT0EgTWlycm9yICovDQotLyogLS0tLS0tLS0gVENfSUVSIDogKFRDIE9mZnNldDogMHgyNCkgVEMgQ2hhbm5lbCBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gVENfSURSIDogKFRDIE9mZnNldDogMHgyOCkgVEMgQ2hhbm5lbCBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFRDX0lNUiA6IChUQyBPZmZzZXQ6IDB4MmMpIFRDIENoYW5uZWwgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCisvLyAtLS0tLS0tLSBUQ19DQ1IgOiAoVEMgT2Zmc2V0OiAweDApIFRDIENoYW5uZWwgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RDX0NMS0VOICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoVEMpIENvdW50ZXIgQ2xvY2sgRW5hYmxlIENvbW1hbmQNCisjZGVmaW5lIEFUOTFDX1RDX0NMS0RJUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoVEMpIENvdW50ZXIgQ2xvY2sgRGlzYWJsZSBDb21tYW5kDQorI2RlZmluZSBBVDkxQ19UQ19TV1RSRyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFRDKSBTb2Z0d2FyZSBUcmlnZ2VyIENvbW1hbmQNCisvLyAtLS0tLS0tLSBUQ19DTVIgOiAoVEMgT2Zmc2V0OiAweDQpIFRDIENoYW5uZWwgTW9kZSBSZWdpc3RlcjogQ2FwdHVyZSBNb2RlIC8gV2F2ZWZvcm0gTW9kZSAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RDX0NMS1MgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8ICAwKSAvLyAoVEMpIENsb2NrIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDX0NMS1NfVElNRVJfRElWMV9DTE9DSyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCkgLy8gKFRDKSBDbG9jayBzZWxlY3RlZDogVElNRVJfRElWMV9DTE9DSw0KKyNkZWZpbmUgCUFUOTFDX1RDX0NMS1NfVElNRVJfRElWMl9DTE9DSyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSkgLy8gKFRDKSBDbG9jayBzZWxlY3RlZDogVElNRVJfRElWMl9DTE9DSw0KKyNkZWZpbmUgCUFUOTFDX1RDX0NMS1NfVElNRVJfRElWM19DTE9DSyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MikgLy8gKFRDKSBDbG9jayBzZWxlY3RlZDogVElNRVJfRElWM19DTE9DSw0KKyNkZWZpbmUgCUFUOTFDX1RDX0NMS1NfVElNRVJfRElWNF9DTE9DSyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MykgLy8gKFRDKSBDbG9jayBzZWxlY3RlZDogVElNRVJfRElWNF9DTE9DSw0KKyNkZWZpbmUgCUFUOTFDX1RDX0NMS1NfVElNRVJfRElWNV9DTE9DSyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NCkgLy8gKFRDKSBDbG9jayBzZWxlY3RlZDogVElNRVJfRElWNV9DTE9DSw0KKyNkZWZpbmUgCUFUOTFDX1RDX0NMS1NfWEMwICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NSkgLy8gKFRDKSBDbG9jayBzZWxlY3RlZDogWEMwDQorI2RlZmluZSAJQVQ5MUNfVENfQ0xLU19YQzEgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg2KSAvLyAoVEMpIENsb2NrIHNlbGVjdGVkOiBYQzENCisjZGVmaW5lIAlBVDkxQ19UQ19DTEtTX1hDMiAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDcpIC8vIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFhDMg0KKyNkZWZpbmUgQVQ5MUNfVENfQ0xLSSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChUQykgQ2xvY2sgSW52ZXJ0DQorI2RlZmluZSBBVDkxQ19UQ19CVVJTVCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgNCkgLy8gKFRDKSBCdXJzdCBTaWduYWwgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfVENfQlVSU1RfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgNCkgLy8gKFRDKSBUaGUgY2xvY2sgaXMgbm90IGdhdGVkIGJ5IGFuIGV4dGVybmFsIHNpZ25hbA0KKyNkZWZpbmUgCUFUOTFDX1RDX0JVUlNUX1hDMCAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChUQykgWEMwIGlzIEFORGVkIHdpdGggdGhlIHNlbGVjdGVkIGNsb2NrDQorI2RlZmluZSAJQVQ5MUNfVENfQlVSU1RfWEMxICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgNCkgLy8gKFRDKSBYQzEgaXMgQU5EZWQgd2l0aCB0aGUgc2VsZWN0ZWQgY2xvY2sNCisjZGVmaW5lIAlBVDkxQ19UQ19CVVJTVF9YQzIgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA0KSAvLyAoVEMpIFhDMiBpcyBBTkRlZCB3aXRoIHRoZSBzZWxlY3RlZCBjbG9jaw0KKyNkZWZpbmUgQVQ5MUNfVENfQ1BDU1RPUCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChUQykgQ291bnRlciBDbG9jayBTdG9wcGVkIHdpdGggUkMgQ29tcGFyZQ0KKyNkZWZpbmUgQVQ5MUNfVENfTERCU1RPUCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChUQykgQ291bnRlciBDbG9jayBTdG9wcGVkIHdpdGggUkIgTG9hZGluZw0KKyNkZWZpbmUgQVQ5MUNfVENfQ1BDRElTICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChUQykgQ291bnRlciBDbG9jayBEaXNhYmxlIHdpdGggUkMgQ29tcGFyZQ0KKyNkZWZpbmUgQVQ5MUNfVENfTERCRElTICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChUQykgQ291bnRlciBDbG9jayBEaXNhYmxlZCB3aXRoIFJCIExvYWRpbmcNCisjZGVmaW5lIEFUOTFDX1RDX0VUUkdFREcgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICA4KSAvLyAoVEMpIEV4dGVybmFsIFRyaWdnZXIgRWRnZSBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ19FVFJHRURHX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDgpIC8vIChUQykgRWRnZTogTm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0VUUkdFREdfUklTSU5HICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKFRDKSBFZGdlOiByaXNpbmcgZWRnZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0VUUkdFREdfRkFMTElORyAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgOCkgLy8gKFRDKSBFZGdlOiBmYWxsaW5nIGVkZ2UNCisjZGVmaW5lIAlBVDkxQ19UQ19FVFJHRURHX0JPVEggICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDgpIC8vIChUQykgRWRnZTogZWFjaCBlZGdlDQorI2RlZmluZSBBVDkxQ19UQ19FRVZURURHICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKFRDKSBFeHRlcm5hbCBFdmVudCBFZGdlIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDX0VFVlRFREdfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgOCkgLy8gKFRDKSBFZGdlOiBOb25lDQorI2RlZmluZSAJQVQ5MUNfVENfRUVWVEVER19SSVNJTkcgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoVEMpIEVkZ2U6IHJpc2luZyBlZGdlDQorI2RlZmluZSAJQVQ5MUNfVENfRUVWVEVER19GQUxMSU5HICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA4KSAvLyAoVEMpIEVkZ2U6IGZhbGxpbmcgZWRnZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0VFVlRFREdfQk9USCAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKFRDKSBFZGdlOiBlYWNoIGVkZ2UNCisjZGVmaW5lIEFUOTFDX1RDX0VFVlQgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDEwKSAvLyAoVEMpIEV4dGVybmFsIEV2ZW50ICBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ19FRVZUX1RJT0IgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMTApIC8vIChUQykgU2lnbmFsIHNlbGVjdGVkIGFzIGV4dGVybmFsIGV2ZW50OiBUSU9CIFRJT0IgZGlyZWN0aW9uOiBpbnB1dA0KKyNkZWZpbmUgCUFUOTFDX1RDX0VFVlRfWEMwICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLy8gKFRDKSBTaWduYWwgc2VsZWN0ZWQgYXMgZXh0ZXJuYWwgZXZlbnQ6IFhDMCBUSU9CIGRpcmVjdGlvbjogb3V0cHV0DQorI2RlZmluZSAJQVQ5MUNfVENfRUVWVF9YQzEgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDEwKSAvLyAoVEMpIFNpZ25hbCBzZWxlY3RlZCBhcyBleHRlcm5hbCBldmVudDogWEMxIFRJT0IgZGlyZWN0aW9uOiBvdXRwdXQNCisjZGVmaW5lIAlBVDkxQ19UQ19FRVZUX1hDMiAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTApIC8vIChUQykgU2lnbmFsIHNlbGVjdGVkIGFzIGV4dGVybmFsIGV2ZW50OiBYQzIgVElPQiBkaXJlY3Rpb246IG91dHB1dA0KKyNkZWZpbmUgQVQ5MUNfVENfQUJFVFJHICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChUQykgVElPQSBvciBUSU9CIEV4dGVybmFsIFRyaWdnZXIgU2VsZWN0aW9uDQorI2RlZmluZSBBVDkxQ19UQ19FTkVUUkcgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLy8gKFRDKSBFeHRlcm5hbCBFdmVudCBUcmlnZ2VyIGVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVENfV0FWRVNFTCAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTMpIC8vIChUQykgV2F2ZWZvcm0gIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDX1dBVkVTRUxfVVAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAxMykgLy8gKFRDKSBVUCBtb2RlIHdpdGhvdXQgYXRvbWF0aWMgdHJpZ2dlciBvbiBSQyBDb21wYXJlDQorI2RlZmluZSAJQVQ5MUNfVENfV0FWRVNFTF9VUERPV04gICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEzKSAvLyAoVEMpIFVQRE9XTiBtb2RlIHdpdGhvdXQgYXV0b21hdGljIHRyaWdnZXIgb24gUkMgQ29tcGFyZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX1dBVkVTRUxfVVBfQVVUTyAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxMykgLy8gKFRDKSBVUCBtb2RlIHdpdGggYXV0b21hdGljIHRyaWdnZXIgb24gUkMgQ29tcGFyZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX1dBVkVTRUxfVVBET1dOX0FVVE8gICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxMykgLy8gKFRDKSBVUERPV04gbW9kZSB3aXRoIGF1dG9tYXRpYyB0cmlnZ2VyIG9uIFJDIENvbXBhcmUNCisjZGVmaW5lIEFUOTFDX1RDX0NQQ1RSRyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE0KSAvLyAoVEMpIFJDIENvbXBhcmUgVHJpZ2dlciBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1RDX1dBVkUgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE1KSAvLyAoVEMpIA0KKyNkZWZpbmUgQVQ5MUNfVENfQUNQQSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTYpIC8vIChUQykgUkEgQ29tcGFyZSBFZmZlY3Qgb24gVElPQQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0FDUEFfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAxNikgLy8gKFRDKSBFZmZlY3Q6IG5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19BQ1BBX1NFVCAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChUQykgRWZmZWN0OiBzZXQNCisjZGVmaW5lIAlBVDkxQ19UQ19BQ1BBX0NMRUFSICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMTYpIC8vIChUQykgRWZmZWN0OiBjbGVhcg0KKyNkZWZpbmUgCUFUOTFDX1RDX0FDUEFfVE9HR0xFICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxNikgLy8gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KKyNkZWZpbmUgQVQ5MUNfVENfTERSQSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTYpIC8vIChUQykgUkEgTG9hZGluZyBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ19MRFJBX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMTYpIC8vIChUQykgRWRnZTogTm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0xEUkFfUklTSU5HICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKFRDKSBFZGdlOiByaXNpbmcgZWRnZSBvZiBUSU9BDQorI2RlZmluZSAJQVQ5MUNfVENfTERSQV9GQUxMSU5HICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDE2KSAvLyAoVEMpIEVkZ2U6IGZhbGxpbmcgZWRnZSBvZiBUSU9BDQorI2RlZmluZSAJQVQ5MUNfVENfTERSQV9CT1RIICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE2KSAvLyAoVEMpIEVkZ2U6IGVhY2ggZWRnZSBvZiBUSU9BDQorI2RlZmluZSBBVDkxQ19UQ19BQ1BDICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxOCkgLy8gKFRDKSBSQyBDb21wYXJlIEVmZmVjdCBvbiBUSU9BDQorI2RlZmluZSAJQVQ5MUNfVENfQUNQQ19OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDE4KSAvLyAoVEMpIEVmZmVjdDogbm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0FDUENfU0VUICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOCkgLy8gKFRDKSBFZmZlY3Q6IHNldA0KKyNkZWZpbmUgCUFUOTFDX1RDX0FDUENfQ0xFQVIgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxOCkgLy8gKFRDKSBFZmZlY3Q6IGNsZWFyDQorI2RlZmluZSAJQVQ5MUNfVENfQUNQQ19UT0dHTEUgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE4KSAvLyAoVEMpIEVmZmVjdDogdG9nZ2xlDQorI2RlZmluZSBBVDkxQ19UQ19MRFJCICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxOCkgLy8gKFRDKSBSQiBMb2FkaW5nIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDX0xEUkJfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAxOCkgLy8gKFRDKSBFZGdlOiBOb25lDQorI2RlZmluZSAJQVQ5MUNfVENfTERSQl9SSVNJTkcgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE4KSAvLyAoVEMpIEVkZ2U6IHJpc2luZyBlZGdlIG9mIFRJT0ENCisjZGVmaW5lIAlBVDkxQ19UQ19MRFJCX0ZBTExJTkcgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMTgpIC8vIChUQykgRWRnZTogZmFsbGluZyBlZGdlIG9mIFRJT0ENCisjZGVmaW5lIAlBVDkxQ19UQ19MRFJCX0JPVEggICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTgpIC8vIChUQykgRWRnZTogZWFjaCBlZGdlIG9mIFRJT0ENCisjZGVmaW5lIEFUOTFDX1RDX0FFRVZUICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDIwKSAvLyAoVEMpIEV4dGVybmFsIEV2ZW50IEVmZmVjdCBvbiBUSU9BDQorI2RlZmluZSAJQVQ5MUNfVENfQUVFVlRfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAyMCkgLy8gKFRDKSBFZmZlY3Q6IG5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19BRUVWVF9TRVQgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIwKSAvLyAoVEMpIEVmZmVjdDogc2V0DQorI2RlZmluZSAJQVQ5MUNfVENfQUVFVlRfQ0xFQVIgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAyMCkgLy8gKFRDKSBFZmZlY3Q6IGNsZWFyDQorI2RlZmluZSAJQVQ5MUNfVENfQUVFVlRfVE9HR0xFICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyMCkgLy8gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KKyNkZWZpbmUgQVQ5MUNfVENfQVNXVFJHICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMjIpIC8vIChUQykgU29mdHdhcmUgVHJpZ2dlciBFZmZlY3Qgb24gVElPQQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0FTV1RSR19OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDIyKSAvLyAoVEMpIEVmZmVjdDogbm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0FTV1RSR19TRVQgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIyKSAvLyAoVEMpIEVmZmVjdDogc2V0DQorI2RlZmluZSAJQVQ5MUNfVENfQVNXVFJHX0NMRUFSICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMjIpIC8vIChUQykgRWZmZWN0OiBjbGVhcg0KKyNkZWZpbmUgCUFUOTFDX1RDX0FTV1RSR19UT0dHTEUgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDIyKSAvLyAoVEMpIEVmZmVjdDogdG9nZ2xlDQorI2RlZmluZSBBVDkxQ19UQ19CQ1BCICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyNCkgLy8gKFRDKSBSQiBDb21wYXJlIEVmZmVjdCBvbiBUSU9CDQorI2RlZmluZSAJQVQ5MUNfVENfQkNQQl9OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDI0KSAvLyAoVEMpIEVmZmVjdDogbm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0JDUEJfU0VUICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNCkgLy8gKFRDKSBFZmZlY3Q6IHNldA0KKyNkZWZpbmUgCUFUOTFDX1RDX0JDUEJfQ0xFQVIgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAyNCkgLy8gKFRDKSBFZmZlY3Q6IGNsZWFyDQorI2RlZmluZSAJQVQ5MUNfVENfQkNQQl9UT0dHTEUgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDI0KSAvLyAoVEMpIEVmZmVjdDogdG9nZ2xlDQorI2RlZmluZSBBVDkxQ19UQ19CQ1BDICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyNikgLy8gKFRDKSBSQyBDb21wYXJlIEVmZmVjdCBvbiBUSU9CDQorI2RlZmluZSAJQVQ5MUNfVENfQkNQQ19OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDI2KSAvLyAoVEMpIEVmZmVjdDogbm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0JDUENfU0VUICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNikgLy8gKFRDKSBFZmZlY3Q6IHNldA0KKyNkZWZpbmUgCUFUOTFDX1RDX0JDUENfQ0xFQVIgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAyNikgLy8gKFRDKSBFZmZlY3Q6IGNsZWFyDQorI2RlZmluZSAJQVQ5MUNfVENfQkNQQ19UT0dHTEUgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDI2KSAvLyAoVEMpIEVmZmVjdDogdG9nZ2xlDQorI2RlZmluZSBBVDkxQ19UQ19CRUVWVCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyOCkgLy8gKFRDKSBFeHRlcm5hbCBFdmVudCBFZmZlY3Qgb24gVElPQg0KKyNkZWZpbmUgCUFUOTFDX1RDX0JFRVZUX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMjgpIC8vIChUQykgRWZmZWN0OiBub25lDQorI2RlZmluZSAJQVQ5MUNfVENfQkVFVlRfU0VUICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyOCkgLy8gKFRDKSBFZmZlY3Q6IHNldA0KKyNkZWZpbmUgCUFUOTFDX1RDX0JFRVZUX0NMRUFSICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMjgpIC8vIChUQykgRWZmZWN0OiBjbGVhcg0KKyNkZWZpbmUgCUFUOTFDX1RDX0JFRVZUX1RPR0dMRSAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMjgpIC8vIChUQykgRWZmZWN0OiB0b2dnbGUNCisjZGVmaW5lIEFUOTFDX1RDX0JTV1RSRyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDMwKSAvLyAoVEMpIFNvZnR3YXJlIFRyaWdnZXIgRWZmZWN0IG9uIFRJT0INCisjZGVmaW5lIAlBVDkxQ19UQ19CU1dUUkdfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAzMCkgLy8gKFRDKSBFZmZlY3Q6IG5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19CU1dUUkdfU0VUICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAzMCkgLy8gKFRDKSBFZmZlY3Q6IHNldA0KKyNkZWZpbmUgCUFUOTFDX1RDX0JTV1RSR19DTEVBUiAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDMwKSAvLyAoVEMpIEVmZmVjdDogY2xlYXINCisjZGVmaW5lIAlBVDkxQ19UQ19CU1dUUkdfVE9HR0xFICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAzMCkgLy8gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KKy8vIC0tLS0tLS0tIFRDX1NSIDogKFRDIE9mZnNldDogMHgyMCkgVEMgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UQ19DT1ZGUyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFRDKSBDb3VudGVyIE92ZXJmbG93DQorI2RlZmluZSBBVDkxQ19UQ19MT1ZSUyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKFRDKSBMb2FkIE92ZXJydW4NCisjZGVmaW5lIEFUOTFDX1RDX0NQQVMgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoVEMpIFJBIENvbXBhcmUNCisjZGVmaW5lIEFUOTFDX1RDX0NQQlMgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoVEMpIFJCIENvbXBhcmUNCisjZGVmaW5lIEFUOTFDX1RDX0NQQ1MgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoVEMpIFJDIENvbXBhcmUNCisjZGVmaW5lIEFUOTFDX1RDX0xEUkFTICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoVEMpIFJBIExvYWRpbmcNCisjZGVmaW5lIEFUOTFDX1RDX0xEUkJTICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoVEMpIFJCIExvYWRpbmcNCisjZGVmaW5lIEFUOTFDX1RDX0VUUkdTICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoVEMpIEV4dGVybmFsIFRyaWdnZXINCisjZGVmaW5lIEFUOTFDX1RDX0NMS1NUQSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoVEMpIENsb2NrIEVuYWJsaW5nDQorI2RlZmluZSBBVDkxQ19UQ19NVElPQSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNykgLy8gKFRDKSBUSU9BIE1pcnJvcg0KKyNkZWZpbmUgQVQ5MUNfVENfTVRJT0IgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTgpIC8vIChUQykgVElPQSBNaXJyb3INCisvLyAtLS0tLS0tLSBUQ19JRVIgOiAoVEMgT2Zmc2V0OiAweDI0KSBUQyBDaGFubmVsIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVENfSURSIDogKFRDIE9mZnNldDogMHgyOCkgVEMgQ2hhbm5lbCBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBUQ19JTVIgOiAoVEMgT2Zmc2V0OiAweDJjKSBUQyBDaGFubmVsIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVGltZXIgQ291bnRlciBJbnRlcmZhY2UgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLXR5cGVkZWYgc3RydWN0IF9BVDkxU19UQ0INCi17DQotICAgIEFUOTFTX1RDIFRDQl9UQzA7ICAgICAgICAvKiBUQyBDaGFubmVsIDAgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQwWyA0IF07IC8qICovDQotICAgIEFUOTFTX1RDIFRDQl9UQzE7ICAgICAgICAvKiBUQyBDaGFubmVsIDEgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQxWyA0IF07IC8qICovDQotICAgIEFUOTFTX1RDIFRDQl9UQzI7ICAgICAgICAvKiBUQyBDaGFubmVsIDIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQyWyA0IF07IC8qICovDQotICAgIEFUOTFfUkVHIFRDQl9CQ1I7ICAgICAgICAvKiBUQyBCbG9jayBDb250cm9sIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFRDQl9CTVI7ICAgICAgICAvKiBUQyBCbG9jayBNb2RlIFJlZ2lzdGVyICovDQotfSBBVDkxU19UQ0IsICogQVQ5MVBTX1RDQjsNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFRpbWVyIENvdW50ZXIgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfVENCIHsNCisJQVQ5MVNfVEMJIFRDQl9UQzA7IAkvLyBUQyBDaGFubmVsIDANCisJQVQ5MV9SRUcJIFJlc2VydmVkMFs0XTsgCS8vIA0KKwlBVDkxU19UQwkgVENCX1RDMTsgCS8vIFRDIENoYW5uZWwgMQ0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzRdOyAJLy8gDQorCUFUOTFTX1RDCSBUQ0JfVEMyOyAJLy8gVEMgQ2hhbm5lbCAyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDJbNF07IAkvLyANCisJQVQ5MV9SRUcJIFRDQl9CQ1I7IAkvLyBUQyBCbG9jayBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUQ0JfQk1SOyAJLy8gVEMgQmxvY2sgTW9kZSBSZWdpc3Rlcg0KK30gQVQ5MVNfVENCLCAqQVQ5MVBTX1RDQjsNCiANCi0vKiAtLS0tLS0tLSBUQ0JfQkNSIDogKFRDQiBPZmZzZXQ6IDB4YzApIFRDIEJsb2NrIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1RDQl9TWU5DICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAvKiAoVENCKSBTeW5jaHJvIENvbW1hbmQgKi8NCi0vKiAtLS0tLS0tLSBUQ0JfQk1SIDogKFRDQiBPZmZzZXQ6IDB4YzQpIFRDIEJsb2NrIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1RDQl9UQzBYQzBTICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDAgKSAvKiAoVENCKSBFeHRlcm5hbCBDbG9jayBTaWduYWwgMCBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ0JfVEMwWEMwU19UQ0xLMCAgICAoICggdW5zaWduZWQgaW50ICkgMHgwICkgICAgICAvKiAoVENCKSBUQ0xLMCBjb25uZWN0ZWQgdG8gWEMwICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENCX1RDMFhDMFNfTk9ORSAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSApICAgICAgLyogKFRDQikgTm9uZSBzaWduYWwgY29ubmVjdGVkIHRvIFhDMCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDQl9UQzBYQzBTX1RJT0ExICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgKSAgICAgIC8qIChUQ0IpIFRJT0ExIGNvbm5lY3RlZCB0byBYQzAgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ0JfVEMwWEMwU19USU9BMiAgICAoICggdW5zaWduZWQgaW50ICkgMHgzICkgICAgICAvKiAoVENCKSBUSU9BMiBjb25uZWN0ZWQgdG8gWEMwICovDQotI2RlZmluZSBBVDkxQ19UQ0JfVEMxWEMxUyAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAyICkgLyogKFRDQikgRXh0ZXJuYWwgQ2xvY2sgU2lnbmFsIDEgU2VsZWN0aW9uICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENCX1RDMVhDMVNfVENMSzEgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAyICkgLyogKFRDQikgVENMSzEgY29ubmVjdGVkIHRvIFhDMSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDQl9UQzFYQzFTX05PTkUgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMiApIC8qIChUQ0IpIE5vbmUgc2lnbmFsIGNvbm5lY3RlZCB0byBYQzEgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ0JfVEMxWEMxU19USU9BMCAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDIgKSAvKiAoVENCKSBUSU9BMCBjb25uZWN0ZWQgdG8gWEMxICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENCX1RDMVhDMVNfVElPQTIgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAyICkgLyogKFRDQikgVElPQTIgY29ubmVjdGVkIHRvIFhDMSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENCX1RDMlhDMlMgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgNCApIC8qIChUQ0IpIEV4dGVybmFsIENsb2NrIFNpZ25hbCAyIFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDQl9UQzJYQzJTX1RDTEsyICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgNCApIC8qIChUQ0IpIFRDTEsyIGNvbm5lY3RlZCB0byBYQzIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ0JfVEMyWEMyU19OT05FICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDQgKSAvKiAoVENCKSBOb25lIHNpZ25hbCBjb25uZWN0ZWQgdG8gWEMyICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENCX1RDMlhDMlNfVElPQTAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCA0ICkgLyogKFRDQikgVElPQTAgY29ubmVjdGVkIHRvIFhDMiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDQl9UQzJYQzJTX1RJT0ExICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgNCApIC8qIChUQ0IpIFRJT0EyIGNvbm5lY3RlZCB0byBYQzIgKi8NCisvLyAtLS0tLS0tLSBUQ0JfQkNSIDogKFRDQiBPZmZzZXQ6IDB4YzApIFRDIEJsb2NrIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UQ0JfU1lOQyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFRDQikgU3luY2hybyBDb21tYW5kDQorLy8gLS0tLS0tLS0gVENCX0JNUiA6IChUQ0IgT2Zmc2V0OiAweGM0KSBUQyBCbG9jayBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVENCX1RDMFhDMFMgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDApIC8vIChUQ0IpIEV4dGVybmFsIENsb2NrIFNpZ25hbCAwIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzBYQzBTX1RDTEswICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDApIC8vIChUQ0IpIFRDTEswIGNvbm5lY3RlZCB0byBYQzANCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMwWEMwU19OT05FICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxKSAvLyAoVENCKSBOb25lIHNpZ25hbCBjb25uZWN0ZWQgdG8gWEMwDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMFhDMFNfVElPQTEgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MikgLy8gKFRDQikgVElPQTEgY29ubmVjdGVkIHRvIFhDMA0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzBYQzBTX1RJT0EyICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMpIC8vIChUQ0IpIFRJT0EyIGNvbm5lY3RlZCB0byBYQzANCisjZGVmaW5lIEFUOTFDX1RDQl9UQzFYQzFTICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICAyKSAvLyAoVENCKSBFeHRlcm5hbCBDbG9jayBTaWduYWwgMSBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMxWEMxU19UQ0xLMSAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8ICAyKSAvLyAoVENCKSBUQ0xLMSBjb25uZWN0ZWQgdG8gWEMxDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMVhDMVNfTk9ORSAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFRDQikgTm9uZSBzaWduYWwgY29ubmVjdGVkIHRvIFhDMQ0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzFYQzFTX1RJT0EwICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDIpIC8vIChUQ0IpIFRJT0EwIGNvbm5lY3RlZCB0byBYQzENCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMxWEMxU19USU9BMiAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8ICAyKSAvLyAoVENCKSBUSU9BMiBjb25uZWN0ZWQgdG8gWEMxDQorI2RlZmluZSBBVDkxQ19UQ0JfVEMyWEMyUyAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgNCkgLy8gKFRDQikgRXh0ZXJuYWwgQ2xvY2sgU2lnbmFsIDIgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMlhDMlNfVENMSzIgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgNCkgLy8gKFRDQikgVENMSzIgY29ubmVjdGVkIHRvIFhDMg0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzJYQzJTX05PTkUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChUQ0IpIE5vbmUgc2lnbmFsIGNvbm5lY3RlZCB0byBYQzINCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMyWEMyU19USU9BMCAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA0KSAvLyAoVENCKSBUSU9BMCBjb25uZWN0ZWQgdG8gWEMyDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMlhDMlNfVElPQTEgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgNCkgLy8gKFRDQikgVElPQTIgY29ubmVjdGVkIHRvIFhDMg0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQ29udHJvbCBBcmVhIE5ldHdvcmsgTWFpbEJveCBJbnRlcmZhY2UgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLXR5cGVkZWYgc3RydWN0IF9BVDkxU19DQU5fTUINCi17DQotICAgIEFUOTFfUkVHIENBTl9NQl9NTVI7ICAvKiBNYWlsQm94IE1vZGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQ0FOX01CX01BTTsgIC8qIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIENBTl9NQl9NSUQ7ICAvKiBNYWlsQm94IElEIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIENBTl9NQl9NRklEOyAvKiBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBDQU5fTUJfTVNSOyAgLyogTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQ0FOX01CX01ETDsgIC8qIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQ0FOX01CX01ESDsgIC8qIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIENBTl9NQl9NQ1I7ICAvKiBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXIgKi8NCi19IEFUOTFTX0NBTl9NQiwgKiBBVDkxUFNfQ0FOX01COw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQ29udHJvbCBBcmVhIE5ldHdvcmsgTWFpbEJveCBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KK3R5cGVkZWYgc3RydWN0IF9BVDkxU19DQU5fTUIgew0KKwlBVDkxX1JFRwkgQ0FOX01CX01NUjsgCS8vIE1haWxCb3ggTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0FOX01CX01BTTsgCS8vIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBDQU5fTUJfTUlEOyAJLy8gTWFpbEJveCBJRCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0FOX01CX01GSUQ7IAkvLyBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0FOX01CX01TUjsgCS8vIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBDQU5fTUJfTURMOyAJLy8gTWFpbEJveCBEYXRhIExvdyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0FOX01CX01ESDsgCS8vIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBDQU5fTUJfTUNSOyAJLy8gTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyDQorfSBBVDkxU19DQU5fTUIsICpBVDkxUFNfQ0FOX01COw0KIA0KLS8qIC0tLS0tLS0tIENBTl9NTVIgOiAoQ0FOX01CIE9mZnNldDogMHgwKSBDQU4gTWVzc2FnZSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19DQU5fTVRJTUVNQVJLICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRkZGIDw8IDAgKSAgLyogKENBTl9NQikgTWFpbGJveCBUaW1lbWFyayAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1BSSU9SICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RiA8PCAxNiApICAgIC8qIChDQU5fTUIpIE1haWxib3ggUHJpb3JpdHkgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NT1QgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDcgPDwgMjQgKSAgICAvKiAoQ0FOX01CKSBNYWlsYm94IE9iamVjdCBUeXBlICovDQotI2RlZmluZSAgICAgQVQ5MUNfQ0FOX01PVF9ESVMgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDI0ICkgICAgLyogKENBTl9NQikgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19DQU5fTU9UX1JYICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjQgKSAgICAvKiAoQ0FOX01CKSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0NBTl9NT1RfUlhPVkVSV1JJVEUgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCAyNCApICAgIC8qIChDQU5fTUIpICovDQotI2RlZmluZSAgICAgQVQ5MUNfQ0FOX01PVF9UWCAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDI0ICkgICAgLyogKENBTl9NQikgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19DQU5fTU9UX0NPTlNVTUVSICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDQgPDwgMjQgKSAgICAvKiAoQ0FOX01CKSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0NBTl9NT1RfUFJPRFVDRVIgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NSA8PCAyNCApICAgIC8qIChDQU5fTUIpICovDQotLyogLS0tLS0tLS0gQ0FOX01BTSA6IChDQU5fTUIgT2Zmc2V0OiAweDQpIENBTiBNZXNzYWdlIEFjY2VwdGFuY2UgTWFzayBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01JRHZCICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4M0ZGRkYgPDwgMCApIC8qIChDQU5fTUIpIENvbXBsZW1lbnRhcnkgYml0cyBmb3IgaWRlbnRpZmllciBpbiBleHRlbmRlZCBtb2RlICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUlEdkEgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg3RkYgPDwgMTggKSAgLyogKENBTl9NQikgSWRlbnRpZmllciBmb3Igc3RhbmRhcmQgZnJhbWUgbW9kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01JREUgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyOSApICAgIC8qIChDQU5fTUIpIElkZW50aWZpZXIgVmVyc2lvbiAqLw0KLS8qIC0tLS0tLS0tIENBTl9NSUQgOiAoQ0FOX01CIE9mZnNldDogMHg4KSBDQU4gTWVzc2FnZSBJRCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIENBTl9NRklEIDogKENBTl9NQiBPZmZzZXQ6IDB4YykgQ0FOIE1lc3NhZ2UgRmFtaWx5IElEIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQ0FOX01TUiA6IChDQU5fTUIgT2Zmc2V0OiAweDEwKSBDQU4gTWVzc2FnZSBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NVElNRVNUQU1QICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGRkYgPDwgMCApIC8qIChDQU5fTUIpIFRpbWVyIFZhbHVlICovDQotI2RlZmluZSBBVDkxQ19DQU5fTURMQyAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGIDw8IDE2ICkgICAvKiAoQ0FOX01CKSBNYWlsYm94IERhdGEgTGVuZ3RoIENvZGUgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NUlRSICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjAgKSAgIC8qIChDQU5fTUIpIE1haWxib3ggUmVtb3RlIFRyYW5zbWlzc2lvbiBSZXF1ZXN0ICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUFCVCAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIyICkgICAvKiAoQ0FOX01CKSBNYWlsYm94IE1lc3NhZ2UgQWJvcnQgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NUkRZICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjMgKSAgIC8qIChDQU5fTUIpIE1haWxib3ggUmVhZHkgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NTUkgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjQgKSAgIC8qIChDQU5fTUIpIE1haWxib3ggTWVzc2FnZSBJZ25vcmVkICovDQotLyogLS0tLS0tLS0gQ0FOX01ETCA6IChDQU5fTUIgT2Zmc2V0OiAweDE0KSBDQU4gTWVzc2FnZSBEYXRhIExvdyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIENBTl9NREggOiAoQ0FOX01CIE9mZnNldDogMHgxOCkgQ0FOIE1lc3NhZ2UgRGF0YSBIaWdoIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQ0FOX01DUiA6IChDQU5fTUIgT2Zmc2V0OiAweDFjKSBDQU4gTWVzc2FnZSBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUFDUiAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIyICkgLyogKENBTl9NQikgQWJvcnQgUmVxdWVzdCBmb3IgTWFpbGJveCAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01UQ1IgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyMyApIC8qIChDQU5fTUIpIE1haWxib3ggVHJhbnNmZXIgQ29tbWFuZCAqLw0KKy8vIC0tLS0tLS0tIENBTl9NTVIgOiAoQ0FOX01CIE9mZnNldDogMHgwKSBDQU4gTWVzc2FnZSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01USU1FTUFSSyAgICgodW5zaWduZWQgaW50KSAweEZGRkYgPDwgIDApIC8vIChDQU5fTUIpIE1haWxib3ggVGltZW1hcmsNCisjZGVmaW5lIEFUOTFDX0NBTl9QUklPUiAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8IDE2KSAvLyAoQ0FOX01CKSBNYWlsYm94IFByaW9yaXR5DQorI2RlZmluZSBBVDkxQ19DQU5fTU9UICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAyNCkgLy8gKENBTl9NQikgTWFpbGJveCBPYmplY3QgVHlwZQ0KKyNkZWZpbmUgCUFUOTFDX0NBTl9NT1RfRElTICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAyNCkgLy8gKENBTl9NQikgDQorI2RlZmluZSAJQVQ5MUNfQ0FOX01PVF9SWCAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI0KSAvLyAoQ0FOX01CKSANCisjZGVmaW5lIAlBVDkxQ19DQU5fTU9UX1JYT1ZFUldSSVRFICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMjQpIC8vIChDQU5fTUIpIA0KKyNkZWZpbmUgCUFUOTFDX0NBTl9NT1RfVFggICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyNCkgLy8gKENBTl9NQikgDQorI2RlZmluZSAJQVQ5MUNfQ0FOX01PVF9DT05TVU1FUiAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg0IDw8IDI0KSAvLyAoQ0FOX01CKSANCisjZGVmaW5lIAlBVDkxQ19DQU5fTU9UX1BST0RVQ0VSICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDUgPDwgMjQpIC8vIChDQU5fTUIpIA0KKy8vIC0tLS0tLS0tIENBTl9NQU0gOiAoQ0FOX01CIE9mZnNldDogMHg0KSBDQU4gTWVzc2FnZSBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DQU5fTUlEdkIgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4M0ZGRkYgPDwgIDApIC8vIChDQU5fTUIpIENvbXBsZW1lbnRhcnkgYml0cyBmb3IgaWRlbnRpZmllciBpbiBleHRlbmRlZCBtb2RlDQorI2RlZmluZSBBVDkxQ19DQU5fTUlEdkEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4N0ZGIDw8IDE4KSAvLyAoQ0FOX01CKSBJZGVudGlmaWVyIGZvciBzdGFuZGFyZCBmcmFtZSBtb2RlDQorI2RlZmluZSBBVDkxQ19DQU5fTUlERSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyOSkgLy8gKENBTl9NQikgSWRlbnRpZmllciBWZXJzaW9uDQorLy8gLS0tLS0tLS0gQ0FOX01JRCA6IChDQU5fTUIgT2Zmc2V0OiAweDgpIENBTiBNZXNzYWdlIElEIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIENBTl9NRklEIDogKENBTl9NQiBPZmZzZXQ6IDB4YykgQ0FOIE1lc3NhZ2UgRmFtaWx5IElEIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIENBTl9NU1IgOiAoQ0FOX01CIE9mZnNldDogMHgxMCkgQ0FOIE1lc3NhZ2UgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01USU1FU1RBTVAgICgodW5zaWduZWQgaW50KSAweEZGRkYgPDwgIDApIC8vIChDQU5fTUIpIFRpbWVyIFZhbHVlDQorI2RlZmluZSBBVDkxQ19DQU5fTURMQyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RiA8PCAxNikgLy8gKENBTl9NQikgTWFpbGJveCBEYXRhIExlbmd0aCBDb2RlDQorI2RlZmluZSBBVDkxQ19DQU5fTVJUUiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMCkgLy8gKENBTl9NQikgTWFpbGJveCBSZW1vdGUgVHJhbnNtaXNzaW9uIFJlcXVlc3QNCisjZGVmaW5lIEFUOTFDX0NBTl9NQUJUICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIyKSAvLyAoQ0FOX01CKSBNYWlsYm94IE1lc3NhZ2UgQWJvcnQNCisjZGVmaW5lIEFUOTFDX0NBTl9NUkRZICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIzKSAvLyAoQ0FOX01CKSBNYWlsYm94IFJlYWR5DQorI2RlZmluZSBBVDkxQ19DQU5fTU1JICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNCkgLy8gKENBTl9NQikgTWFpbGJveCBNZXNzYWdlIElnbm9yZWQNCisvLyAtLS0tLS0tLSBDQU5fTURMIDogKENBTl9NQiBPZmZzZXQ6IDB4MTQpIENBTiBNZXNzYWdlIERhdGEgTG93IFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIENBTl9NREggOiAoQ0FOX01CIE9mZnNldDogMHgxOCkgQ0FOIE1lc3NhZ2UgRGF0YSBIaWdoIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIENBTl9NQ1IgOiAoQ0FOX01CIE9mZnNldDogMHgxYykgQ0FOIE1lc3NhZ2UgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0NBTl9NQUNSICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIyKSAvLyAoQ0FOX01CKSBBYm9ydCBSZXF1ZXN0IGZvciBNYWlsYm94DQorI2RlZmluZSBBVDkxQ19DQU5fTVRDUiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMykgLy8gKENBTl9NQikgTWFpbGJveCBUcmFuc2ZlciBDb21tYW5kDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBDb250cm9sIEFyZWEgTmV0d29yayBJbnRlcmZhY2UgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLXR5cGVkZWYgc3RydWN0IF9BVDkxU19DQU4NCi17DQotICAgIEFUOTFfUkVHIENBTl9NUjsgICAgICAgICAgLyogTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBDQU5fSUVSOyAgICAgICAgIC8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQ0FOX0lEUjsgICAgICAgICAvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBDQU5fSU1SOyAgICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIENBTl9TUjsgICAgICAgICAgLyogU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIENBTl9CUjsgICAgICAgICAgLyogQmF1ZHJhdGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQ0FOX1RJTTsgICAgICAgICAvKiBUaW1lciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBDQU5fVElNRVNUUDsgICAgIC8qIFRpbWUgU3RhbXAgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQ0FOX0VDUjsgICAgICAgICAvKiBFcnJvciBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIENBTl9UQ1I7ICAgICAgICAgLyogVHJhbnNmZXIgQ29tbWFuZCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBDQU5fQUNSOyAgICAgICAgIC8qIEFib3J0IENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQwWyA1MiBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBDQU5fVlI7ICAgICAgICAgIC8qIFZlcnNpb24gUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQxWyA2NCBdOyAvKiAqLw0KLSAgICBBVDkxU19DQU5fTUIgQ0FOX01CMDsgICAgIC8qIENBTiBNYWlsYm94IDAgKi8NCi0gICAgQVQ5MVNfQ0FOX01CIENBTl9NQjE7ICAgICAvKiBDQU4gTWFpbGJveCAxICovDQotICAgIEFUOTFTX0NBTl9NQiBDQU5fTUIyOyAgICAgLyogQ0FOIE1haWxib3ggMiAqLw0KLSAgICBBVDkxU19DQU5fTUIgQ0FOX01CMzsgICAgIC8qIENBTiBNYWlsYm94IDMgKi8NCi0gICAgQVQ5MVNfQ0FOX01CIENBTl9NQjQ7ICAgICAvKiBDQU4gTWFpbGJveCA0ICovDQotICAgIEFUOTFTX0NBTl9NQiBDQU5fTUI1OyAgICAgLyogQ0FOIE1haWxib3ggNSAqLw0KLSAgICBBVDkxU19DQU5fTUIgQ0FOX01CNjsgICAgIC8qIENBTiBNYWlsYm94IDYgKi8NCi0gICAgQVQ5MVNfQ0FOX01CIENBTl9NQjc7ICAgICAvKiBDQU4gTWFpbGJveCA3ICovDQotICAgIEFUOTFTX0NBTl9NQiBDQU5fTUI4OyAgICAgLyogQ0FOIE1haWxib3ggOCAqLw0KLSAgICBBVDkxU19DQU5fTUIgQ0FOX01COTsgICAgIC8qIENBTiBNYWlsYm94IDkgKi8NCi0gICAgQVQ5MVNfQ0FOX01CIENBTl9NQjEwOyAgICAvKiBDQU4gTWFpbGJveCAxMCAqLw0KLSAgICBBVDkxU19DQU5fTUIgQ0FOX01CMTE7ICAgIC8qIENBTiBNYWlsYm94IDExICovDQotICAgIEFUOTFTX0NBTl9NQiBDQU5fTUIxMjsgICAgLyogQ0FOIE1haWxib3ggMTIgKi8NCi0gICAgQVQ5MVNfQ0FOX01CIENBTl9NQjEzOyAgICAvKiBDQU4gTWFpbGJveCAxMyAqLw0KLSAgICBBVDkxU19DQU5fTUIgQ0FOX01CMTQ7ICAgIC8qIENBTiBNYWlsYm94IDE0ICovDQotICAgIEFUOTFTX0NBTl9NQiBDQU5fTUIxNTsgICAgLyogQ0FOIE1haWxib3ggMTUgKi8NCi19IEFUOTFTX0NBTiwgKiBBVDkxUFNfQ0FOOw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQ29udHJvbCBBcmVhIE5ldHdvcmsgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfQ0FOIHsNCisJQVQ5MV9SRUcJIENBTl9NUjsgCS8vIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIENBTl9JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBDQU5fSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIENBTl9JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0FOX1NSOyAJLy8gU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBDQU5fQlI7IAkvLyBCYXVkcmF0ZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0FOX1RJTTsgCS8vIFRpbWVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBDQU5fVElNRVNUUDsgCS8vIFRpbWUgU3RhbXAgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIENBTl9FQ1I7IAkvLyBFcnJvciBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBDQU5fVENSOyAJLy8gVHJhbnNmZXIgQ29tbWFuZCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQ0FOX0FDUjsgCS8vIEFib3J0IENvbW1hbmQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFs1Ml07IAkvLyANCisJQVQ5MV9SRUcJIENBTl9WUjsgCS8vIFZlcnNpb24gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMVs2NF07IAkvLyANCisJQVQ5MVNfQ0FOX01CCSBDQU5fTUIwOyAJLy8gQ0FOIE1haWxib3ggMA0KKwlBVDkxU19DQU5fTUIJIENBTl9NQjE7IAkvLyBDQU4gTWFpbGJveCAxDQorCUFUOTFTX0NBTl9NQgkgQ0FOX01CMjsgCS8vIENBTiBNYWlsYm94IDINCisJQVQ5MVNfQ0FOX01CCSBDQU5fTUIzOyAJLy8gQ0FOIE1haWxib3ggMw0KKwlBVDkxU19DQU5fTUIJIENBTl9NQjQ7IAkvLyBDQU4gTWFpbGJveCA0DQorCUFUOTFTX0NBTl9NQgkgQ0FOX01CNTsgCS8vIENBTiBNYWlsYm94IDUNCisJQVQ5MVNfQ0FOX01CCSBDQU5fTUI2OyAJLy8gQ0FOIE1haWxib3ggNg0KKwlBVDkxU19DQU5fTUIJIENBTl9NQjc7IAkvLyBDQU4gTWFpbGJveCA3DQorCUFUOTFTX0NBTl9NQgkgQ0FOX01CODsgCS8vIENBTiBNYWlsYm94IDgNCisJQVQ5MVNfQ0FOX01CCSBDQU5fTUI5OyAJLy8gQ0FOIE1haWxib3ggOQ0KKwlBVDkxU19DQU5fTUIJIENBTl9NQjEwOyAJLy8gQ0FOIE1haWxib3ggMTANCisJQVQ5MVNfQ0FOX01CCSBDQU5fTUIxMTsgCS8vIENBTiBNYWlsYm94IDExDQorCUFUOTFTX0NBTl9NQgkgQ0FOX01CMTI7IAkvLyBDQU4gTWFpbGJveCAxMg0KKwlBVDkxU19DQU5fTUIJIENBTl9NQjEzOyAJLy8gQ0FOIE1haWxib3ggMTMNCisJQVQ5MVNfQ0FOX01CCSBDQU5fTUIxNDsgCS8vIENBTiBNYWlsYm94IDE0DQorCUFUOTFTX0NBTl9NQgkgQ0FOX01CMTU7IAkvLyBDQU4gTWFpbGJveCAxNQ0KK30gQVQ5MVNfQ0FOLCAqQVQ5MVBTX0NBTjsNCiANCi0vKiAtLS0tLS0tLSBDQU5fTVIgOiAoQ0FOIE9mZnNldDogMHgwKSBDQU4gTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX0NBTkVOICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgLyogKENBTikgQ0FOIENvbnRyb2xsZXIgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19DQU5fTFBNICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAvKiAoQ0FOKSBEaXNhYmxlL0VuYWJsZSBMb3cgUG93ZXIgTW9kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX0FCTSAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAgLyogKENBTikgRGlzYWJsZS9FbmFibGUgQXV0b2JhdWQvTGlzdGVuIE1vZGUgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9PVkwgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzICkgIC8qIChDQU4pIERpc2FibGUvRW5hYmxlIE92ZXJsb2FkIEZyYW1lICovDQotI2RlZmluZSBBVDkxQ19DQU5fVEVPRiAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNCApICAvKiAoQ0FOKSBUaW1lIFN0YW1wIG1lc3NhZ2VzIGF0IGVhY2ggZW5kIG9mIEZyYW1lICovDQotI2RlZmluZSBBVDkxQ19DQU5fVFRNICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNSApICAvKiAoQ0FOKSBEaXNhYmxlL0VuYWJsZSBUaW1lIFRyaWdnZXIgTW9kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1RJTUZSWiAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDYgKSAgLyogKENBTikgRW5hYmxlIFRpbWVyIEZyZWV6ZSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX0RSUFQgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDcgKSAgLyogKENBTikgRGlzYWJsZSBSZXBlYXQgKi8NCi0vKiAtLS0tLS0tLSBDQU5fSUVSIDogKENBTiBPZmZzZXQ6IDB4NCkgQ0FOIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgIC8qIChDQU4pIE1haWxib3ggMCBGbGFnICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIxICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAvKiAoQ0FOKSBNYWlsYm94IDEgRmxhZyAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMiAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAgLyogKENBTikgTWFpbGJveCAyIEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjMgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzICkgIC8qIChDQU4pIE1haWxib3ggMyBGbGFnICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI0ICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNCApICAvKiAoQ0FOKSBNYWlsYm94IDQgRmxhZyAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CNSAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDUgKSAgLyogKENBTikgTWFpbGJveCA1IEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjYgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA2ICkgIC8qIChDQU4pIE1haWxib3ggNiBGbGFnICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI3ICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNyApICAvKiAoQ0FOKSBNYWlsYm94IDcgRmxhZyAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01COCAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDggKSAgLyogKENBTikgTWFpbGJveCA4IEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjkgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA5ICkgIC8qIChDQU4pIE1haWxib3ggOSBGbGFnICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIxMCAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTAgKSAvKiAoQ0FOKSBNYWlsYm94IDEwIEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjExICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMSApIC8qIChDQU4pIE1haWxib3ggMTEgRmxhZyAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMTIgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEyICkgLyogKENBTikgTWFpbGJveCAxMiBGbGFnICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIxMyAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTMgKSAvKiAoQ0FOKSBNYWlsYm94IDEzIEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjE0ICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNCApIC8qIChDQU4pIE1haWxib3ggMTQgRmxhZyAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMTUgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE1ICkgLyogKENBTikgTWFpbGJveCAxNSBGbGFnICovDQotI2RlZmluZSBBVDkxQ19DQU5fRVJSQSAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTYgKSAvKiAoQ0FOKSBFcnJvciBBY3RpdmUgTW9kZSBGbGFnICovDQotI2RlZmluZSBBVDkxQ19DQU5fV0FSTiAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTcgKSAvKiAoQ0FOKSBXYXJuaW5nIExpbWl0IEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9FUlJQICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxOCApIC8qIChDQU4pIEVycm9yIFBhc3NpdmUgTW9kZSBGbGFnICovDQotI2RlZmluZSBBVDkxQ19DQU5fQk9GRiAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTkgKSAvKiAoQ0FOKSBCdXMgT2ZmIE1vZGUgRmxhZyAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1NMRUVQICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIwICkgLyogKENBTikgU2xlZXAgRmxhZyAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1dBS0VVUCAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIxICkgLyogKENBTikgV2FrZXVwIEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9UT1ZGICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyMiApIC8qIChDQU4pIFRpbWVyIE92ZXJmbG93IEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9UU1RQICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyMyApIC8qIChDQU4pIFRpbWVzdGFtcCBGbGFnICovDQotI2RlZmluZSBBVDkxQ19DQU5fQ0VSUiAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjQgKSAvKiAoQ0FOKSBDUkMgRXJyb3IgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9TRVJSICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyNSApIC8qIChDQU4pIFN0dWZmaW5nIEVycm9yICovDQotI2RlZmluZSBBVDkxQ19DQU5fQUVSUiAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMjYgKSAvKiAoQ0FOKSBBY2tub3dsZWRnbWVudCBFcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX0ZFUlIgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDI3ICkgLyogKENBTikgRm9ybSBFcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX0JFUlIgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDI4ICkgLyogKENBTikgQml0IEVycm9yICovDQotLyogLS0tLS0tLS0gQ0FOX0lEUiA6IChDQU4gT2Zmc2V0OiAweDgpIENBTiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIENBTl9JTVIgOiAoQ0FOIE9mZnNldDogMHhjKSBDQU4gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBDQU5fU1IgOiAoQ0FOIE9mZnNldDogMHgxMCkgQ0FOIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1JCU1kgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDI5ICkgICAvKiAoQ0FOKSBSZWNlaXZlciBCdXN5ICovDQotI2RlZmluZSBBVDkxQ19DQU5fVEJTWSAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMzAgKSAgIC8qIChDQU4pIFRyYW5zbWl0dGVyIEJ1c3kgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9PVkxZICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzMSApICAgLyogKENBTikgT3ZlcmxvYWQgQnVzeSAqLw0KLS8qIC0tLS0tLS0tIENBTl9CUiA6IChDQU4gT2Zmc2V0OiAweDE0KSBDQU4gQmF1ZHJhdGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9QSEFTRTIgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NyA8PCAwICkgICAgLyogKENBTikgUGhhc2UgMiBzZWdtZW50ICovDQotI2RlZmluZSBBVDkxQ19DQU5fUEhBU0UxICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDcgPDwgNCApICAgIC8qIChDQU4pIFBoYXNlIDEgc2VnbWVudCAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1BST1BBRyAgICAoICggdW5zaWduZWQgaW50ICkgMHg3IDw8IDggKSAgICAvKiAoQ0FOKSBQcm9ncmFtbWF0aW9uIHRpbWUgc2VnbWVudCAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1NZTkMgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDEyICkgICAvKiAoQ0FOKSBSZS1zeW5jaHJvbml6YXRpb24ganVtcCB3aWR0aCBzZWdtZW50ICovDQotI2RlZmluZSBBVDkxQ19DQU5fQlJQICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDdGIDw8IDE2ICkgIC8qIChDQU4pIEJhdWRyYXRlIFByZXNjYWxlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1NNUCAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDI0ICkgICAvKiAoQ0FOKSBTYW1wbGluZyBtb2RlICovDQotLyogLS0tLS0tLS0gQ0FOX1RJTSA6IChDQU4gT2Zmc2V0OiAweDE4KSBDQU4gVGltZXIgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9USU1FUiAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RkZGRiA8PCAwICkgLyogKENBTikgVGltZXIgZmllbGQgKi8NCi0vKiAtLS0tLS0tLSBDQU5fVElNRVNUUCA6IChDQU4gT2Zmc2V0OiAweDFjKSBDQU4gVGltZXN0YW1wIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQ0FOX0VDUiA6IChDQU4gT2Zmc2V0OiAweDIwKSBDQU4gRXJyb3IgQ291bnRlciBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1JFQyAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRiA8PCAwICkgIC8qIChDQU4pIFJlY2VpdmUgRXJyb3IgQ291bnRlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1RFQyAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRiA8PCAxNiApIC8qIChDQU4pIFRyYW5zbWl0IEVycm9yIENvdW50ZXIgKi8NCi0vKiAtLS0tLS0tLSBDQU5fVENSIDogKENBTiBPZmZzZXQ6IDB4MjQpIENBTiBUcmFuc2ZlciBDb21tYW5kIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19DQU5fVElNUlNUICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMzEgKSAgLyogKENBTikgVGltZXIgUmVzZXQgRmllbGQgKi8NCi0vKiAtLS0tLS0tLSBDQU5fQUNSIDogKENBTiBPZmZzZXQ6IDB4MjgpIENBTiBBYm9ydCBDb21tYW5kIFJlZ2lzdGVyIC0tLS0tLS0tICovDQorLy8gLS0tLS0tLS0gQ0FOX01SIDogKENBTiBPZmZzZXQ6IDB4MCkgQ0FOIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DQU5fQ0FORU4gICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKENBTikgQ0FOIENvbnRyb2xsZXIgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19DQU5fTFBNICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKENBTikgRGlzYWJsZS9FbmFibGUgTG93IFBvd2VyIE1vZGUNCisjZGVmaW5lIEFUOTFDX0NBTl9BQk0gICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoQ0FOKSBEaXNhYmxlL0VuYWJsZSBBdXRvYmF1ZC9MaXN0ZW4gTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX09WTCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChDQU4pIERpc2FibGUvRW5hYmxlIE92ZXJsb2FkIEZyYW1lDQorI2RlZmluZSBBVDkxQ19DQU5fVEVPRiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKENBTikgVGltZSBTdGFtcCBtZXNzYWdlcyBhdCBlYWNoIGVuZCBvZiBGcmFtZQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1RUTSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChDQU4pIERpc2FibGUvRW5hYmxlIFRpbWUgVHJpZ2dlciBNb2RlDQorI2RlZmluZSBBVDkxQ19DQU5fVElNRlJaICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLy8gKENBTikgRW5hYmxlIFRpbWVyIEZyZWV6ZQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0RSUFQgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChDQU4pIERpc2FibGUgUmVwZWF0DQorLy8gLS0tLS0tLS0gQ0FOX0lFUiA6IChDQU4gT2Zmc2V0OiAweDQpIENBTiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChDQU4pIE1haWxib3ggMCBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKENBTikgTWFpbGJveCAxIEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9NQjIgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoQ0FOKSBNYWlsYm94IDIgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMyAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChDQU4pIE1haWxib3ggMyBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUI0ICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKENBTikgTWFpbGJveCA0IEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9NQjUgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoQ0FOKSBNYWlsYm94IDUgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNiAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChDQU4pIE1haWxib3ggNiBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUI3ICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKENBTikgTWFpbGJveCA3IEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9NQjggICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoQ0FOKSBNYWlsYm94IDggRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01COSAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChDQU4pIE1haWxib3ggOSBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxMCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMCkgLy8gKENBTikgTWFpbGJveCAxMCBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxMSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMSkgLy8gKENBTikgTWFpbGJveCAxMSBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxMiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLy8gKENBTikgTWFpbGJveCAxMiBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxMyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMykgLy8gKENBTikgTWFpbGJveCAxMyBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxNCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNCkgLy8gKENBTikgTWFpbGJveCAxNCBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxNSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNSkgLy8gKENBTikgTWFpbGJveCAxNSBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fRVJSQSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKENBTikgRXJyb3IgQWN0aXZlIE1vZGUgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1dBUk4gICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTcpIC8vIChDQU4pIFdhcm5pbmcgTGltaXQgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0VSUlAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTgpIC8vIChDQU4pIEVycm9yIFBhc3NpdmUgTW9kZSBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fQk9GRiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOSkgLy8gKENBTikgQnVzIE9mZiBNb2RlIEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9TTEVFUCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIwKSAvLyAoQ0FOKSBTbGVlcCBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fV0FLRVVQICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMSkgLy8gKENBTikgV2FrZXVwIEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9UT1ZGICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDIyKSAvLyAoQ0FOKSBUaW1lciBPdmVyZmxvdyBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fVFNUUCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyMykgLy8gKENBTikgVGltZXN0YW1wIEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9DRVJSICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI0KSAvLyAoQ0FOKSBDUkMgRXJyb3INCisjZGVmaW5lIEFUOTFDX0NBTl9TRVJSICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI1KSAvLyAoQ0FOKSBTdHVmZmluZyBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0FFUlIgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjYpIC8vIChDQU4pIEFja25vd2xlZGdtZW50IEVycm9yDQorI2RlZmluZSBBVDkxQ19DQU5fRkVSUiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAyNykgLy8gKENBTikgRm9ybSBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0JFUlIgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjgpIC8vIChDQU4pIEJpdCBFcnJvcg0KKy8vIC0tLS0tLS0tIENBTl9JRFIgOiAoQ0FOIE9mZnNldDogMHg4KSBDQU4gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQ0FOX0lNUiA6IChDQU4gT2Zmc2V0OiAweGMpIENBTiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBDQU5fU1IgOiAoQ0FOIE9mZnNldDogMHgxMCkgQ0FOIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0NBTl9SQlNZICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI5KSAvLyAoQ0FOKSBSZWNlaXZlciBCdXN5DQorI2RlZmluZSBBVDkxQ19DQU5fVEJTWSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAzMCkgLy8gKENBTikgVHJhbnNtaXR0ZXIgQnVzeQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX09WTFkgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMzEpIC8vIChDQU4pIE92ZXJsb2FkIEJ1c3kNCisvLyAtLS0tLS0tLSBDQU5fQlIgOiAoQ0FOIE9mZnNldDogMHgxNCkgQ0FOIEJhdWRyYXRlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1BIQVNFMiAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgIDApIC8vIChDQU4pIFBoYXNlIDIgc2VnbWVudA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1BIQVNFMSAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgIDQpIC8vIChDQU4pIFBoYXNlIDEgc2VnbWVudA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1BST1BBRyAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgIDgpIC8vIChDQU4pIFByb2dyYW1tYXRpb24gdGltZSBzZWdtZW50DQorI2RlZmluZSBBVDkxQ19DQU5fU1lOQyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxMikgLy8gKENBTikgUmUtc3luY2hyb25pemF0aW9uIGp1bXAgd2lkdGggc2VnbWVudA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0JSUCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDdGIDw8IDE2KSAvLyAoQ0FOKSBCYXVkcmF0ZSBQcmVzY2FsZXINCisjZGVmaW5lIEFUOTFDX0NBTl9TTVAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDI0KSAvLyAoQ0FOKSBTYW1wbGluZyBtb2RlDQorLy8gLS0tLS0tLS0gQ0FOX1RJTSA6IChDQU4gT2Zmc2V0OiAweDE4KSBDQU4gVGltZXIgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DQU5fVElNRVIgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGRiA8PCAgMCkgLy8gKENBTikgVGltZXIgZmllbGQNCisvLyAtLS0tLS0tLSBDQU5fVElNRVNUUCA6IChDQU4gT2Zmc2V0OiAweDFjKSBDQU4gVGltZXN0YW1wIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIENBTl9FQ1IgOiAoQ0FOIE9mZnNldDogMHgyMCkgQ0FOIEVycm9yIENvdW50ZXIgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DQU5fUkVDICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkYgPDwgIDApIC8vIChDQU4pIFJlY2VpdmUgRXJyb3IgQ291bnRlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1RFQyAgICAgICAgICgodW5zaWduZWQgaW50KSAweEZGIDw8IDE2KSAvLyAoQ0FOKSBUcmFuc21pdCBFcnJvciBDb3VudGVyDQorLy8gLS0tLS0tLS0gQ0FOX1RDUiA6IChDQU4gT2Zmc2V0OiAweDI0KSBDQU4gVHJhbnNmZXIgQ29tbWFuZCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0NBTl9USU1SU1QgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDMxKSAvLyAoQ0FOKSBUaW1lciBSZXNldCBGaWVsZA0KKy8vIC0tLS0tLS0tIENBTl9BQ1IgOiAoQ0FOIE9mZnNldDogMHgyOCkgQ0FOIEFib3J0IENvbW1hbmQgUmVnaXN0ZXIgLS0tLS0tLS0gDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBFdGhlcm5ldCBNQUMgMTAvMTAwICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi10eXBlZGVmIHN0cnVjdCBfQVQ5MVNfRU1BQw0KLXsNCi0gICAgQVQ5MV9SRUcgRU1BQ19OQ1I7ICAgICAgICAvKiBOZXR3b3JrIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19OQ0ZHUjsgICAgICAvKiBOZXR3b3JrIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19OU1I7ICAgICAgICAvKiBOZXR3b3JrIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDBbIDIgXTsgIC8qICovDQotICAgIEFUOTFfUkVHIEVNQUNfVFNSOyAgICAgICAgLyogVHJhbnNtaXQgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfUkJRUDsgICAgICAgLyogUmVjZWl2ZSBCdWZmZXIgUXVldWUgUG9pbnRlciAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX1RCUVA7ICAgICAgIC8qIFRyYW5zbWl0IEJ1ZmZlciBRdWV1ZSBQb2ludGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfUlNSOyAgICAgICAgLyogUmVjZWl2ZSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19JU1I7ICAgICAgICAvKiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfSUVSOyAgICAgICAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX0lEUjsgICAgICAgIC8qIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfSU1SOyAgICAgICAgLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19NQU47ICAgICAgICAvKiBQSFkgTWFpbnRlbmFuY2UgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19QVFI7ICAgICAgICAvKiBQYXVzZSBUaW1lIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfUEZSOyAgICAgICAgLyogUGF1c2UgRnJhbWVzIHJlY2VpdmVkIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfRlRPOyAgICAgICAgLyogRnJhbWVzIFRyYW5zbWl0dGVkIE9LIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfU0NGOyAgICAgICAgLyogU2luZ2xlIENvbGxpc2lvbiBGcmFtZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX01DRjsgICAgICAgIC8qIE11bHRpcGxlIENvbGxpc2lvbiBGcmFtZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX0ZSTzsgICAgICAgIC8qIEZyYW1lcyBSZWNlaXZlZCBPSyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX0ZDU0U7ICAgICAgIC8qIEZyYW1lIENoZWNrIFNlcXVlbmNlIEVycm9yIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfQUxFOyAgICAgICAgLyogQWxpZ25tZW50IEVycm9yIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfRFRGOyAgICAgICAgLyogRGVmZXJyZWQgVHJhbnNtaXNzaW9uIEZyYW1lIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfTENPTDsgICAgICAgLyogTGF0ZSBDb2xsaXNpb24gUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19FQ09MOyAgICAgICAvKiBFeGNlc3NpdmUgQ29sbGlzaW9uIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfVFVORDsgICAgICAgLyogVHJhbnNtaXQgVW5kZXJydW4gRXJyb3IgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19DU0U7ICAgICAgICAvKiBDYXJyaWVyIFNlbnNlIEVycm9yIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfUlJFOyAgICAgICAgLyogUmVjZWl2ZSBSZXNzb3VyY2UgRXJyb3IgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19ST1Y7ICAgICAgICAvKiBSZWNlaXZlIE92ZXJydW4gRXJyb3JzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfUlNFOyAgICAgICAgLyogUmVjZWl2ZSBTeW1ib2wgRXJyb3JzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfRUxFOyAgICAgICAgLyogRXhjZXNzaXZlIExlbmd0aCBFcnJvcnMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19SSkE7ICAgICAgICAvKiBSZWNlaXZlIEphYmJlcnMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19VU0Y7ICAgICAgICAvKiBVbmRlcnNpemUgRnJhbWVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfU1RFOyAgICAgICAgLyogU1FFIFRlc3QgRXJyb3IgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19STEU7ICAgICAgICAvKiBSZWNlaXZlIExlbmd0aCBGaWVsZCBNaXNtYXRjaCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX1RQRjsgICAgICAgIC8qIFRyYW5zbWl0dGVkIFBhdXNlIEZyYW1lcyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX0hSQjsgICAgICAgIC8qIEhhc2ggQWRkcmVzcyBCb3R0b21bMzE6MF0gKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19IUlQ7ICAgICAgICAvKiBIYXNoIEFkZHJlc3MgVG9wWzYzOjMyXSAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX1NBMUw7ICAgICAgIC8qIFNwZWNpZmljIEFkZHJlc3MgMSBCb3R0b20sIEZpcnN0IDQgYnl0ZXMgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19TQTFIOyAgICAgICAvKiBTcGVjaWZpYyBBZGRyZXNzIDEgVG9wLCBMYXN0IDIgYnl0ZXMgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19TQTJMOyAgICAgICAvKiBTcGVjaWZpYyBBZGRyZXNzIDIgQm90dG9tLCBGaXJzdCA0IGJ5dGVzICovDQotICAgIEFUOTFfUkVHIEVNQUNfU0EySDsgICAgICAgLyogU3BlY2lmaWMgQWRkcmVzcyAyIFRvcCwgTGFzdCAyIGJ5dGVzICovDQotICAgIEFUOTFfUkVHIEVNQUNfU0EzTDsgICAgICAgLyogU3BlY2lmaWMgQWRkcmVzcyAzIEJvdHRvbSwgRmlyc3QgNCBieXRlcyAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX1NBM0g7ICAgICAgIC8qIFNwZWNpZmljIEFkZHJlc3MgMyBUb3AsIExhc3QgMiBieXRlcyAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX1NBNEw7ICAgICAgIC8qIFNwZWNpZmljIEFkZHJlc3MgNCBCb3R0b20sIEZpcnN0IDQgYnl0ZXMgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19TQTRIOyAgICAgICAvKiBTcGVjaWZpYyBBZGRyZXNzIDQgVG9wLCBMYXN0IDIgYnl0ZXMgKi8NCi0gICAgQVQ5MV9SRUcgRU1BQ19USUQ7ICAgICAgICAvKiBUeXBlIElEIENoZWNraW5nIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfVFBROyAgICAgICAgLyogVHJhbnNtaXQgUGF1c2UgUXVhbnR1bSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX1VTUklPOyAgICAgIC8qIFVTRVIgSW5wdXQvT3V0cHV0IFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEVNQUNfV09MOyAgICAgICAgLyogV2FrZSBPbiBMQU4gUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgUmVzZXJ2ZWQxWyAxMyBdOyAvKiAqLw0KLSAgICBBVDkxX1JFRyBFTUFDX1JFVjsgICAgICAgIC8qIFJldmlzaW9uIFJlZ2lzdGVyICovDQotfSBBVDkxU19FTUFDLCAqIEFUOTFQU19FTUFDOw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgRXRoZXJuZXQgTUFDIDEwLzEwMA0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX0VNQUMgew0KKwlBVDkxX1JFRwkgRU1BQ19OQ1I7IAkvLyBOZXR3b3JrIENvbnRyb2wgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfTkNGR1I7IAkvLyBOZXR3b3JrIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfTlNSOyAJLy8gTmV0d29yayBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFsyXTsgCS8vIA0KKwlBVDkxX1JFRwkgRU1BQ19UU1I7IAkvLyBUcmFuc21pdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfUkJRUDsgCS8vIFJlY2VpdmUgQnVmZmVyIFF1ZXVlIFBvaW50ZXINCisJQVQ5MV9SRUcJIEVNQUNfVEJRUDsgCS8vIFRyYW5zbWl0IEJ1ZmZlciBRdWV1ZSBQb2ludGVyDQorCUFUOTFfUkVHCSBFTUFDX1JTUjsgCS8vIFJlY2VpdmUgU3RhdHVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX0lTUjsgCS8vIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfSUVSOyAJLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19JRFI7IAkvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19NQU47IAkvLyBQSFkgTWFpbnRlbmFuY2UgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfUFRSOyAJLy8gUGF1c2UgVGltZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19QRlI7IAkvLyBQYXVzZSBGcmFtZXMgcmVjZWl2ZWQgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfRlRPOyAJLy8gRnJhbWVzIFRyYW5zbWl0dGVkIE9LIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX1NDRjsgCS8vIFNpbmdsZSBDb2xsaXNpb24gRnJhbWUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfTUNGOyAJLy8gTXVsdGlwbGUgQ29sbGlzaW9uIEZyYW1lIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX0ZSTzsgCS8vIEZyYW1lcyBSZWNlaXZlZCBPSyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19GQ1NFOyAJLy8gRnJhbWUgQ2hlY2sgU2VxdWVuY2UgRXJyb3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfQUxFOyAJLy8gQWxpZ25tZW50IEVycm9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX0RURjsgCS8vIERlZmVycmVkIFRyYW5zbWlzc2lvbiBGcmFtZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19MQ09MOyAJLy8gTGF0ZSBDb2xsaXNpb24gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfRUNPTDsgCS8vIEV4Y2Vzc2l2ZSBDb2xsaXNpb24gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfVFVORDsgCS8vIFRyYW5zbWl0IFVuZGVycnVuIEVycm9yIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX0NTRTsgCS8vIENhcnJpZXIgU2Vuc2UgRXJyb3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfUlJFOyAJLy8gUmVjZWl2ZSBSZXNzb3VyY2UgRXJyb3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfUk9WOyAJLy8gUmVjZWl2ZSBPdmVycnVuIEVycm9ycyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19SU0U7IAkvLyBSZWNlaXZlIFN5bWJvbCBFcnJvcnMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfRUxFOyAJLy8gRXhjZXNzaXZlIExlbmd0aCBFcnJvcnMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfUkpBOyAJLy8gUmVjZWl2ZSBKYWJiZXJzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX1VTRjsgCS8vIFVuZGVyc2l6ZSBGcmFtZXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfU1RFOyAJLy8gU1FFIFRlc3QgRXJyb3IgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfUkxFOyAJLy8gUmVjZWl2ZSBMZW5ndGggRmllbGQgTWlzbWF0Y2ggUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfVFBGOyAJLy8gVHJhbnNtaXR0ZWQgUGF1c2UgRnJhbWVzIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX0hSQjsgCS8vIEhhc2ggQWRkcmVzcyBCb3R0b21bMzE6MF0NCisJQVQ5MV9SRUcJIEVNQUNfSFJUOyAJLy8gSGFzaCBBZGRyZXNzIFRvcFs2MzozMl0NCisJQVQ5MV9SRUcJIEVNQUNfU0ExTDsgCS8vIFNwZWNpZmljIEFkZHJlc3MgMSBCb3R0b20sIEZpcnN0IDQgYnl0ZXMNCisJQVQ5MV9SRUcJIEVNQUNfU0ExSDsgCS8vIFNwZWNpZmljIEFkZHJlc3MgMSBUb3AsIExhc3QgMiBieXRlcw0KKwlBVDkxX1JFRwkgRU1BQ19TQTJMOyAJLy8gU3BlY2lmaWMgQWRkcmVzcyAyIEJvdHRvbSwgRmlyc3QgNCBieXRlcw0KKwlBVDkxX1JFRwkgRU1BQ19TQTJIOyAJLy8gU3BlY2lmaWMgQWRkcmVzcyAyIFRvcCwgTGFzdCAyIGJ5dGVzDQorCUFUOTFfUkVHCSBFTUFDX1NBM0w7IAkvLyBTcGVjaWZpYyBBZGRyZXNzIDMgQm90dG9tLCBGaXJzdCA0IGJ5dGVzDQorCUFUOTFfUkVHCSBFTUFDX1NBM0g7IAkvLyBTcGVjaWZpYyBBZGRyZXNzIDMgVG9wLCBMYXN0IDIgYnl0ZXMNCisJQVQ5MV9SRUcJIEVNQUNfU0E0TDsgCS8vIFNwZWNpZmljIEFkZHJlc3MgNCBCb3R0b20sIEZpcnN0IDQgYnl0ZXMNCisJQVQ5MV9SRUcJIEVNQUNfU0E0SDsgCS8vIFNwZWNpZmljIEFkZHJlc3MgNCBUb3AsIExhc3QgMiBieXRlcw0KKwlBVDkxX1JFRwkgRU1BQ19USUQ7IAkvLyBUeXBlIElEIENoZWNraW5nIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBFTUFDX1RQUTsgCS8vIFRyYW5zbWl0IFBhdXNlIFF1YW50dW0gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEVNQUNfVVNSSU87IAkvLyBVU0VSIElucHV0L091dHB1dCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgRU1BQ19XT0w7IAkvLyBXYWtlIE9uIExBTiBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzEzXTsgCS8vIA0KKwlBVDkxX1JFRwkgRU1BQ19SRVY7IAkvLyBSZXZpc2lvbiBSZWdpc3Rlcg0KK30gQVQ5MVNfRU1BQywgKkFUOTFQU19FTUFDOw0KIA0KLS8qIC0tLS0tLS0tIEVNQUNfTkNSIDogKEVNQUMgT2Zmc2V0OiAweDApICAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19MQiAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgLyogKEVNQUMpIExvb3BiYWNrLiBPcHRpb25hbC4gV2hlbiBzZXQsIGxvb3BiYWNrIHNpZ25hbCBpcyBhdCBoaWdoIGxldmVsLiAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19MTEIgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEgKSAgLyogKEVNQUMpIExvb3BiYWNrIGxvY2FsLiAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19SRSAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAgLyogKEVNQUMpIFJlY2VpdmUgZW5hYmxlLiAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19URSAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDMgKSAgLyogKEVNQUMpIFRyYW5zbWl0IGVuYWJsZS4gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfTVBFICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA0ICkgIC8qIChFTUFDKSBNYW5hZ2VtZW50IHBvcnQgZW5hYmxlLiAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19DTFJTVEFUICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDUgKSAgLyogKEVNQUMpIENsZWFyIHN0YXRpc3RpY3MgcmVnaXN0ZXJzLiAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19JTkNTVEFUICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDYgKSAgLyogKEVNQUMpIEluY3JlbWVudCBzdGF0aXN0aWNzIHJlZ2lzdGVycy4gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfV0VTVEFUICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA3ICkgIC8qIChFTUFDKSBXcml0ZSBlbmFibGUgZm9yIHN0YXRpc3RpY3MgcmVnaXN0ZXJzLiAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19CUCAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDggKSAgLyogKEVNQUMpIEJhY2sgcHJlc3N1cmUuICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1RTVEFSVCAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgOSApICAvKiAoRU1BQykgU3RhcnQgVHJhbnNtaXNzaW9uLiAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19USEFMVCAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEwICkgLyogKEVNQUMpIFRyYW5zbWlzc2lvbiBIYWx0LiAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19UUEZSICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDExICkgLyogKEVNQUMpIFRyYW5zbWl0IHBhdXNlIGZyYW1lICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1RaUSAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTIgKSAvKiAoRU1BQykgVHJhbnNtaXQgemVybyBxdWFudHVtIHBhdXNlIGZyYW1lICovDQotLyogLS0tLS0tLS0gRU1BQ19OQ0ZHUiA6IChFTUFDIE9mZnNldDogMHg0KSBOZXR3b3JrIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfU1BEICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgIC8qIChFTUFDKSBTcGVlZC4gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfRkQgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgIC8qIChFTUFDKSBGdWxsIGR1cGxleC4gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfSkZSQU1FICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzICkgIC8qIChFTUFDKSBKdW1ibyBGcmFtZXMuICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0NBRiAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNCApICAvKiAoRU1BQykgQ29weSBhbGwgZnJhbWVzLiAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19OQkMgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDUgKSAgLyogKEVNQUMpIE5vIGJyb2FkY2FzdC4gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfTVRJICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA2ICkgIC8qIChFTUFDKSBNdWx0aWNhc3QgaGFzaCBldmVudCBlbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfVU5JICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA3ICkgIC8qIChFTUFDKSBVbmljYXN0IGhhc2ggZW5hYmxlLiAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19CSUcgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDggKSAgLyogKEVNQUMpIFJlY2VpdmUgMTUyMiBieXRlcy4gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfRUFFICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA5ICkgIC8qIChFTUFDKSBFeHRlcm5hbCBhZGRyZXNzIG1hdGNoIGVuYWJsZS4gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfQ0xLICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAxMCApIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0VNQUNfQ0xLX0hDTEtfOCAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDEwICkgLyogKEVNQUMpIEhDTEsgZGl2aWRlZCBieSA4ICovDQotI2RlZmluZSAgICAgQVQ5MUNfRU1BQ19DTEtfSENMS18xNiAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTAgKSAvKiAoRU1BQykgSENMSyBkaXZpZGVkIGJ5IDE2ICovDQotI2RlZmluZSAgICAgQVQ5MUNfRU1BQ19DTEtfSENMS18zMiAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgMTAgKSAvKiAoRU1BQykgSENMSyBkaXZpZGVkIGJ5IDMyICovDQotI2RlZmluZSAgICAgQVQ5MUNfRU1BQ19DTEtfSENMS182NCAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTAgKSAvKiAoRU1BQykgSENMSyBkaXZpZGVkIGJ5IDY0ICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1JUWSAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTIgKSAvKiAoRU1BQykgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfUEFFICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMyApIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19SQk9GICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDE0ICkgLyogKEVNQUMpICovDQotI2RlZmluZSAgICAgQVQ5MUNfRU1BQ19SQk9GX09GRlNFVF8wICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMTQgKSAvKiAoRU1BQykgbm8gb2Zmc2V0IGZyb20gc3RhcnQgb2YgcmVjZWl2ZSBidWZmZXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19FTUFDX1JCT0ZfT0ZGU0VUXzEgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNCApIC8qIChFTUFDKSBvbmUgYnl0ZSBvZmZzZXQgZnJvbSBzdGFydCBvZiByZWNlaXZlIGJ1ZmZlciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0VNQUNfUkJPRl9PRkZTRVRfMiAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDE0ICkgLyogKEVNQUMpIHR3byBieXRlcyBvZmZzZXQgZnJvbSBzdGFydCBvZiByZWNlaXZlIGJ1ZmZlciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0VNQUNfUkJPRl9PRkZTRVRfMyAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDE0ICkgLyogKEVNQUMpIHRocmVlIGJ5dGVzIG9mZnNldCBmcm9tIHN0YXJ0IG9mIHJlY2VpdmUgYnVmZmVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1JMQ0UgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTYgKSAvKiAoRU1BQykgUmVjZWl2ZSBMZW5ndGggZmllbGQgQ2hlY2tpbmcgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0RSRkNTICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTcgKSAvKiAoRU1BQykgRGlzY2FyZCBSZWNlaXZlIEZDUyAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19FRlJIRCAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE4ICkgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0lSWEZDUyAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTkgKSAvKiAoRU1BQykgSWdub3JlIFJYIEZDUyAqLw0KLS8qIC0tLS0tLS0tIEVNQUNfTlNSIDogKEVNQUMgT2Zmc2V0OiAweDgpIE5ldHdvcmsgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0xJTktSICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAvKiAoRU1BQykgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfTURJTyAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19JRExFICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAgLyogKEVNQUMpICovDQotLyogLS0tLS0tLS0gRU1BQ19UU1IgOiAoRU1BQyBPZmZzZXQ6IDB4MTQpIFRyYW5zbWl0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19VQlIgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0NPTCAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAvKiAoRU1BQykgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfUkxFUyAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyICkgIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19UR08gICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDMgKSAgLyogKEVNQUMpIFRyYW5zbWl0IEdvICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0JFWCAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNCApICAvKiAoRU1BQykgQnVmZmVycyBleGhhdXN0ZWQgbWlkIGZyYW1lICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0NPTVAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNSApICAvKiAoRU1BQykgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfVU5EICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA2ICkgIC8qIChFTUFDKSAqLw0KLS8qIC0tLS0tLS0tIEVNQUNfUlNSIDogKEVNQUMgT2Zmc2V0OiAweDIwKSBSZWNlaXZlIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19CTkEgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1JFQyAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMSApICAvKiAoRU1BQykgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfT1ZSICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyICkgIC8qIChFTUFDKSAqLw0KLS8qIC0tLS0tLS0tIEVNQUNfSVNSIDogKEVNQUMgT2Zmc2V0OiAweDI0KSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19FTUFDX01GRCAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAvKiAoRU1BQykgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfUkNPTVAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19SWFVCUiAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1RYVUJSICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMyApICAvKiAoRU1BQykgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfVFVORFIgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA0ICkgIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19STEVYICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDUgKSAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1RYRVJSICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNiApICAvKiAoRU1BQykgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfVENPTVAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA3ICkgIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19MSU5LICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDkgKSAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1JPVlIgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTAgKSAvKiAoRU1BQykgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfSFJFU1AgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMSApIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19QRlJFICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEyICkgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1BUWiAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTMgKSAvKiAoRU1BQykgKi8NCi0vKiAtLS0tLS0tLSBFTUFDX0lFUiA6IChFTUFDIE9mZnNldDogMHgyOCkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIEVNQUNfSURSIDogKEVNQUMgT2Zmc2V0OiAweDJjKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIEVNQUNfSU1SIDogKEVNQUMgT2Zmc2V0OiAweDMwKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIEVNQUNfTUFOIDogKEVNQUMgT2Zmc2V0OiAweDM0KSBQSFkgTWFpbnRlbmFuY2UgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfREFUQSAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGRkZGIDw8IDAgKSAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0NPREUgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAxNiApICAgIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19SRUdBICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDFGIDw8IDE4ICkgICAvKiAoRU1BQykgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfUEhZQSAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxRiA8PCAyMyApICAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1JXICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAyOCApICAgIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19TT0YgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMzAgKSAgICAvKiAoRU1BQykgKi8NCi0vKiAtLS0tLS0tLSBFTUFDX1VTUklPIDogKEVNQUMgT2Zmc2V0OiAweGMwKSBVU0VSIElucHV0IE91dHB1dCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19STUlJICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgICAvKiAoRU1BQykgUmVkdWNlIE1JSSAqLw0KLS8qIC0tLS0tLS0tIEVNQUNfV09MIDogKEVNQUMgT2Zmc2V0OiAweGM0KSBXYWtlIE9uIExBTiBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19JUCAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGRkYgPDwgMCApICAvKiAoRU1BQykgQVJQIHJlcXVlc3QgSVAgYWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19NQUcgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTYgKSAgICAvKiAoRU1BQykgTWFnaWMgcGFja2V0IGV2ZW50IGVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19BUlAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTcgKSAgICAvKiAoRU1BQykgQVJQIHJlcXVlc3QgZXZlbnQgZW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1NBMSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxOCApICAgIC8qIChFTUFDKSBTcGVjaWZpYyBhZGRyZXNzIHJlZ2lzdGVyIDEgZXZlbnQgZW5hYmxlICovDQotLyogLS0tLS0tLS0gRU1BQ19SRVYgOiAoRU1BQyBPZmZzZXQ6IDB4ZmMpIFJldmlzaW9uIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1JFVlJFRiAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4RkZGRiA8PCAwICkgIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19QQVJUUkVGICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEZGRkYgPDwgMTYgKSAvKiAoRU1BQykgKi8NCisvLyAtLS0tLS0tLSBFTUFDX05DUiA6IChFTUFDIE9mZnNldDogMHgwKSAgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19FTUFDX0xCICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKEVNQUMpIExvb3BiYWNrLiBPcHRpb25hbC4gV2hlbiBzZXQsIGxvb3BiYWNrIHNpZ25hbCBpcyBhdCBoaWdoIGxldmVsLg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19MTEIgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChFTUFDKSBMb29wYmFjayBsb2NhbC4gDQorI2RlZmluZSBBVDkxQ19FTUFDX1JFICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKEVNQUMpIFJlY2VpdmUgZW5hYmxlLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfVEUgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoRU1BQykgVHJhbnNtaXQgZW5hYmxlLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfTVBFICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoRU1BQykgTWFuYWdlbWVudCBwb3J0IGVuYWJsZS4gDQorI2RlZmluZSBBVDkxQ19FTUFDX0NMUlNUQVQgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKEVNQUMpIENsZWFyIHN0YXRpc3RpY3MgcmVnaXN0ZXJzLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfSU5DU1RBVCAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoRU1BQykgSW5jcmVtZW50IHN0YXRpc3RpY3MgcmVnaXN0ZXJzLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfV0VTVEFUICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoRU1BQykgV3JpdGUgZW5hYmxlIGZvciBzdGF0aXN0aWNzIHJlZ2lzdGVycy4gDQorI2RlZmluZSBBVDkxQ19FTUFDX0JQICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKEVNQUMpIEJhY2sgcHJlc3N1cmUuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19UU1RBUlQgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChFTUFDKSBTdGFydCBUcmFuc21pc3Npb24uIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19USEFMVCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChFTUFDKSBUcmFuc21pc3Npb24gSGFsdC4gDQorI2RlZmluZSBBVDkxQ19FTUFDX1RQRlIgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMSkgLy8gKEVNQUMpIFRyYW5zbWl0IHBhdXNlIGZyYW1lIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19UWlEgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8vIChFTUFDKSBUcmFuc21pdCB6ZXJvIHF1YW50dW0gcGF1c2UgZnJhbWUNCisvLyAtLS0tLS0tLSBFTUFDX05DRkdSIDogKEVNQUMgT2Zmc2V0OiAweDQpIE5ldHdvcmsgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0VNQUNfU1BEICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoRU1BQykgU3BlZWQuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19GRCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChFTUFDKSBGdWxsIGR1cGxleC4gDQorI2RlZmluZSBBVDkxQ19FTUFDX0pGUkFNRSAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKEVNQUMpIEp1bWJvIEZyYW1lcy4gDQorI2RlZmluZSBBVDkxQ19FTUFDX0NBRiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKEVNQUMpIENvcHkgYWxsIGZyYW1lcy4gDQorI2RlZmluZSBBVDkxQ19FTUFDX05CQyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKEVNQUMpIE5vIGJyb2FkY2FzdC4gDQorI2RlZmluZSBBVDkxQ19FTUFDX01USSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLy8gKEVNQUMpIE11bHRpY2FzdCBoYXNoIGV2ZW50IGVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19VTkkgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChFTUFDKSBVbmljYXN0IGhhc2ggZW5hYmxlLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfQklHICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoRU1BQykgUmVjZWl2ZSAxNTIyIGJ5dGVzLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfRUFFICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA5KSAvLyAoRU1BQykgRXh0ZXJuYWwgYWRkcmVzcyBtYXRjaCBlbmFibGUuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19DTEsgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTApIC8vIChFTUFDKSANCisjZGVmaW5lIAlBVDkxQ19FTUFDX0NMS19IQ0xLXzggICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDEwKSAvLyAoRU1BQykgSENMSyBkaXZpZGVkIGJ5IDgNCisjZGVmaW5lIAlBVDkxQ19FTUFDX0NMS19IQ0xLXzE2ICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEwKSAvLyAoRU1BQykgSENMSyBkaXZpZGVkIGJ5IDE2DQorI2RlZmluZSAJQVQ5MUNfRU1BQ19DTEtfSENMS18zMiAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAxMCkgLy8gKEVNQUMpIEhDTEsgZGl2aWRlZCBieSAzMg0KKyNkZWZpbmUgCUFUOTFDX0VNQUNfQ0xLX0hDTEtfNjQgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTApIC8vIChFTUFDKSBIQ0xLIGRpdmlkZWQgYnkgNjQNCisjZGVmaW5lIEFUOTFDX0VNQUNfUlRZICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1BBRSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMykgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SQk9GICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTQpIC8vIChFTUFDKSANCisjZGVmaW5lIAlBVDkxQ19FTUFDX1JCT0ZfT0ZGU0VUXzAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAxNCkgLy8gKEVNQUMpIG5vIG9mZnNldCBmcm9tIHN0YXJ0IG9mIHJlY2VpdmUgYnVmZmVyDQorI2RlZmluZSAJQVQ5MUNfRU1BQ19SQk9GX09GRlNFVF8xICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTQpIC8vIChFTUFDKSBvbmUgYnl0ZSBvZmZzZXQgZnJvbSBzdGFydCBvZiByZWNlaXZlIGJ1ZmZlcg0KKyNkZWZpbmUgCUFUOTFDX0VNQUNfUkJPRl9PRkZTRVRfMiAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDE0KSAvLyAoRU1BQykgdHdvIGJ5dGVzIG9mZnNldCBmcm9tIHN0YXJ0IG9mIHJlY2VpdmUgYnVmZmVyDQorI2RlZmluZSAJQVQ5MUNfRU1BQ19SQk9GX09GRlNFVF8zICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTQpIC8vIChFTUFDKSB0aHJlZSBieXRlcyBvZmZzZXQgZnJvbSBzdGFydCBvZiByZWNlaXZlIGJ1ZmZlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19STENFICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChFTUFDKSBSZWNlaXZlIExlbmd0aCBmaWVsZCBDaGVja2luZyBFbmFibGUNCisjZGVmaW5lIEFUOTFDX0VNQUNfRFJGQ1MgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE3KSAvLyAoRU1BQykgRGlzY2FyZCBSZWNlaXZlIEZDUw0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19FRlJIRCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTgpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfSVJYRkNTICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE5KSAvLyAoRU1BQykgSWdub3JlIFJYIEZDUw0KKy8vIC0tLS0tLS0tIEVNQUNfTlNSIDogKEVNQUMgT2Zmc2V0OiAweDgpIE5ldHdvcmsgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19MSU5LUiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfTURJTyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX0lETEUgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKEVNQUMpIA0KKy8vIC0tLS0tLS0tIEVNQUNfVFNSIDogKEVNQUMgT2Zmc2V0OiAweDE0KSBUcmFuc21pdCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19FTUFDX1VCUiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19DT0wgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUkxFUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1RHTyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKEVNQUMpIFRyYW5zbWl0IEdvDQorI2RlZmluZSBBVDkxQ19FTUFDX0JFWCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKEVNQUMpIEJ1ZmZlcnMgZXhoYXVzdGVkIG1pZCBmcmFtZQ0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19DT01QICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfVU5EICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoRU1BQykgDQorLy8gLS0tLS0tLS0gRU1BQ19SU1IgOiAoRU1BQyBPZmZzZXQ6IDB4MjApIFJlY2VpdmUgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19CTkEgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUkVDICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX09WUiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKEVNQUMpIA0KKy8vIC0tLS0tLS0tIEVNQUNfSVNSIDogKEVNQUMgT2Zmc2V0OiAweDI0KSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19NRkQgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUkNPTVAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1JYVUJSICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19UWFVCUiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfVFVORFIgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1JMRVggICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19UWEVSUiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDYpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfVENPTVAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX0xJTksgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOSkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19ST1ZSICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTApIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfSFJFU1AgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDExKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1BGUkUgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19QVFogICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTMpIC8vIChFTUFDKSANCisvLyAtLS0tLS0tLSBFTUFDX0lFUiA6IChFTUFDIE9mZnNldDogMHgyOCkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBFTUFDX0lEUiA6IChFTUFDIE9mZnNldDogMHgyYykgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gRU1BQ19JTVIgOiAoRU1BQyBPZmZzZXQ6IDB4MzApIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEVNQUNfTUFOIDogKEVNQUMgT2Zmc2V0OiAweDM0KSBQSFkgTWFpbnRlbmFuY2UgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19FTUFDX0RBVEEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4RkZGRiA8PCAgMCkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19DT0RFICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTYpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUkVHQSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxRiA8PCAxOCkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19QSFlBICAgICAgICgodW5zaWduZWQgaW50KSAweDFGIDw8IDIzKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1JXICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAyOCkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TT0YgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMzApIC8vIChFTUFDKSANCisvLyAtLS0tLS0tLSBFTUFDX1VTUklPIDogKEVNQUMgT2Zmc2V0OiAweGMwKSBVU0VSIElucHV0IE91dHB1dCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUk1JSSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoRU1BQykgUmVkdWNlIE1JSQ0KKy8vIC0tLS0tLS0tIEVNQUNfV09MIDogKEVNQUMgT2Zmc2V0OiAweGM0KSBXYWtlIE9uIExBTiBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0VNQUNfSVAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRkZGIDw8ICAwKSAvLyAoRU1BQykgQVJQIHJlcXVlc3QgSVAgYWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19NQUcgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChFTUFDKSBNYWdpYyBwYWNrZXQgZXZlbnQgZW5hYmxlDQorI2RlZmluZSBBVDkxQ19FTUFDX0FSUCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNykgLy8gKEVNQUMpIEFSUCByZXF1ZXN0IGV2ZW50IGVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TQTEgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTgpIC8vIChFTUFDKSBTcGVjaWZpYyBhZGRyZXNzIHJlZ2lzdGVyIDEgZXZlbnQgZW5hYmxlDQorLy8gLS0tLS0tLS0gRU1BQ19SRVYgOiAoRU1BQyBPZmZzZXQ6IDB4ZmMpIFJldmlzaW9uIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SRVZSRUYgICAgICgodW5zaWduZWQgaW50KSAweEZGRkYgPDwgIDApIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUEFSVFJFRiAgICAoKHVuc2lnbmVkIGludCkgMHhGRkZGIDw8IDE2KSAvLyAoRU1BQykgDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBBbmFsb2cgdG8gRGlnaXRhbCBDb252ZXJ0b3IgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLXR5cGVkZWYgc3RydWN0IF9BVDkxU19BREMNCi17DQotICAgIEFUOTFfUkVHIEFEQ19DUjsgICAgICAgICAgLyogQURDIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQURDX01SOyAgICAgICAgICAvKiBBREMgTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDBbIDIgXTsgIC8qICovDQotICAgIEFUOTFfUkVHIEFEQ19DSEVSOyAgICAgICAgLyogQURDIENoYW5uZWwgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFEQ19DSERSOyAgICAgICAgLyogQURDIENoYW5uZWwgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBRENfQ0hTUjsgICAgICAgIC8qIEFEQyBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBRENfU1I7ICAgICAgICAgIC8qIEFEQyBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQURDX0xDRFI7ICAgICAgICAvKiBBREMgTGFzdCBDb252ZXJ0ZWQgRGF0YSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBRENfSUVSOyAgICAgICAgIC8qIEFEQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFEQ19JRFI7ICAgICAgICAgLyogQURDIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFEQ19JTVI7ICAgICAgICAgLyogQURDIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFEQ19DRFIwOyAgICAgICAgLyogQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAwICovDQotICAgIEFUOTFfUkVHIEFEQ19DRFIxOyAgICAgICAgLyogQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAxICovDQotICAgIEFUOTFfUkVHIEFEQ19DRFIyOyAgICAgICAgLyogQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAyICovDQotICAgIEFUOTFfUkVHIEFEQ19DRFIzOyAgICAgICAgLyogQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAzICovDQotICAgIEFUOTFfUkVHIEFEQ19DRFI0OyAgICAgICAgLyogQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA0ICovDQotICAgIEFUOTFfUkVHIEFEQ19DRFI1OyAgICAgICAgLyogQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA1ICovDQotICAgIEFUOTFfUkVHIEFEQ19DRFI2OyAgICAgICAgLyogQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA2ICovDQotICAgIEFUOTFfUkVHIEFEQ19DRFI3OyAgICAgICAgLyogQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA3ICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMVsgNDQgXTsgLyogKi8NCi0gICAgQVQ5MV9SRUcgQURDX1JQUjsgICAgICAgICAvKiBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQURDX1JDUjsgICAgICAgICAvKiBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQURDX1RQUjsgICAgICAgICAvKiBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFEQ19UQ1I7ICAgICAgICAgLyogVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBRENfUk5QUjsgICAgICAgIC8qIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFEQ19STkNSOyAgICAgICAgLyogUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQURDX1ROUFI7ICAgICAgICAvKiBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQURDX1ROQ1I7ICAgICAgICAvKiBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQURDX1BUQ1I7ICAgICAgICAvKiBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBRENfUFRTUjsgICAgICAgIC8qIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi19IEFUOTFTX0FEQywgKiBBVDkxUFNfQURDOw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQW5hbG9nIHRvIERpZ2l0YWwgQ29udmVydG9yDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfQURDIHsNCisJQVQ5MV9SRUcJIEFEQ19DUjsgCS8vIEFEQyBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfTVI7IAkvLyBBREMgTW9kZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzJdOyAJLy8gDQorCUFUOTFfUkVHCSBBRENfQ0hFUjsgCS8vIEFEQyBDaGFubmVsIEVuYWJsZSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX0NIRFI7IAkvLyBBREMgQ2hhbm5lbCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfQ0hTUjsgCS8vIEFEQyBDaGFubmVsIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX1NSOyAJLy8gQURDIFN0YXR1cyBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX0xDRFI7IAkvLyBBREMgTGFzdCBDb252ZXJ0ZWQgRGF0YSBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX0lFUjsgCS8vIEFEQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfSURSOyAJLy8gQURDIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfSU1SOyAJLy8gQURDIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfQ0RSMDsgCS8vIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMA0KKwlBVDkxX1JFRwkgQURDX0NEUjE7IAkvLyBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDENCisJQVQ5MV9SRUcJIEFEQ19DRFIyOyAJLy8gQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAyDQorCUFUOTFfUkVHCSBBRENfQ0RSMzsgCS8vIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMw0KKwlBVDkxX1JFRwkgQURDX0NEUjQ7IAkvLyBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDQNCisJQVQ5MV9SRUcJIEFEQ19DRFI1OyAJLy8gQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA1DQorCUFUOTFfUkVHCSBBRENfQ0RSNjsgCS8vIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNg0KKwlBVDkxX1JFRwkgQURDX0NEUjc7IAkvLyBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDcNCisJQVQ5MV9SRUcJIFJlc2VydmVkMVs0NF07IAkvLyANCisJQVQ5MV9SRUcJIEFEQ19SUFI7IAkvLyBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19SQ1I7IAkvLyBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19UUFI7IAkvLyBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfVENSOyAJLy8gVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX1JOUFI7IAkvLyBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX1JOQ1I7IAkvLyBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQURDX1ROUFI7IAkvLyBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFEQ19UTkNSOyAJLy8gVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfUFRDUjsgCS8vIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRENfUFRTUjsgCS8vIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCit9IEFUOTFTX0FEQywgKkFUOTFQU19BREM7DQogDQotLyogLS0tLS0tLS0gQURDX0NSIDogKEFEQyBPZmZzZXQ6IDB4MCkgQURDIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19TV1JTVCAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgICAvKiAoQURDKSBTb2Z0d2FyZSBSZXNldCAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1NUQVJUICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEgKSAgIC8qIChBREMpIFN0YXJ0IENvbnZlcnNpb24gKi8NCi0vKiAtLS0tLS0tLSBBRENfTVIgOiAoQURDIE9mZnNldDogMHg0KSBBREMgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1RSR0VOICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgIC8qIChBREMpIFRyaWdnZXIgRW5hYmxlICovDQotI2RlZmluZSAgICAgQVQ5MUNfQURDX1RSR0VOX0RJUyAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgKSAgICAgICAgLyogKEFEQykgSHJhZHdhcmUgdHJpZ2dlcnMgYXJlIGRpc2FibGVkLiBTdGFydGluZyBhIGNvbnZlcnNpb24gaXMgb25seSBwb3NzaWJsZSBieSBzb2Z0d2FyZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FEQ19UUkdFTl9FTiAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxICkgICAgICAgIC8qIChBREMpIEhhcmR3YXJlIHRyaWdnZXIgc2VsZWN0ZWQgYnkgVFJHU0VMIGZpZWxkIGlzIGVuYWJsZWQuICovDQotI2RlZmluZSBBVDkxQ19BRENfVFJHU0VMICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDcgPDwgMSApICAgLyogKEFEQykgVHJpZ2dlciBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRENfVFJHU0VMX1RJT0EwICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAxICkgICAvKiAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPMCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FEQ19UUkdTRUxfVElPQTEgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEgKSAgIC8qIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IFRJQU8xICovDQotI2RlZmluZSAgICAgQVQ5MUNfQURDX1RSR1NFTF9USU9BMiAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgMSApICAgLyogKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gVElBTzIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRENfVFJHU0VMX1RJT0EzICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAxICkgICAvKiAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPMyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FEQ19UUkdTRUxfVElPQTQgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg0IDw8IDEgKSAgIC8qIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IFRJQU80ICovDQotI2RlZmluZSAgICAgQVQ5MUNfQURDX1RSR1NFTF9USU9BNSAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDUgPDwgMSApICAgLyogKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gVElBTzUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRENfVFJHU0VMX0VYVCAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NiA8PCAxICkgICAvKiAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBFeHRlcm5hbCBUcmlnZ2VyICovDQotI2RlZmluZSBBVDkxQ19BRENfTE9XUkVTICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNCApICAgLyogKEFEQykgUmVzb2x1dGlvbi4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRENfTE9XUkVTXzEwX0JJVCAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCA0ICkgICAvKiAoQURDKSAxMC1iaXQgcmVzb2x1dGlvbiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FEQ19MT1dSRVNfOF9CSVQgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDQgKSAgIC8qIChBREMpIDgtYml0IHJlc29sdXRpb24gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19TTEVFUCAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA1ICkgICAvKiAoQURDKSBTbGVlcCBNb2RlICovDQotI2RlZmluZSAgICAgQVQ5MUNfQURDX1NMRUVQX05PUk1BTF9NT0RFICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgNSApICAgLyogKEFEQykgTm9ybWFsIE1vZGUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRENfU0xFRVBfTU9ERSAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA1ICkgICAvKiAoQURDKSBTbGVlcCBNb2RlICovDQotI2RlZmluZSBBVDkxQ19BRENfUFJFU0NBTCAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDNGIDw8IDggKSAgLyogKEFEQykgUHJlc2NhbGVyIHJhdGUgc2VsZWN0aW9uICovDQotI2RlZmluZSBBVDkxQ19BRENfU1RBUlRVUCAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDFGIDw8IDE2ICkgLyogKEFEQykgU3RhcnR1cCBUaW1lICovDQotI2RlZmluZSBBVDkxQ19BRENfU0hUSU0gICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweEYgPDwgMjQgKSAgLyogKEFEQykgU2FtcGxlICYgSG9sZCBUaW1lICovDQotLyogLS0tLS0tLS0gICAgIEFEQ19DSEVSIDogKEFEQyBPZmZzZXQ6IDB4MTApIEFEQyBDaGFubmVsIEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NIMCAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgIC8qIChBREMpIENoYW5uZWwgMCAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NIMSAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEgKSAgIC8qIChBREMpIENoYW5uZWwgMSAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NIMiAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAgIC8qIChBREMpIENoYW5uZWwgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NIMyAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDMgKSAgIC8qIChBREMpIENoYW5uZWwgMyAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NINCAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDQgKSAgIC8qIChBREMpIENoYW5uZWwgNCAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NINSAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDUgKSAgIC8qIChBREMpIENoYW5uZWwgNSAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NINiAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDYgKSAgIC8qIChBREMpIENoYW5uZWwgNiAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NINyAgICAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDcgKSAgIC8qIChBREMpIENoYW5uZWwgNyAqLw0KLS8qIC0tLS0tLS0tICAgICBBRENfQ0hEUiA6IChBREMgT2Zmc2V0OiAweDE0KSBBREMgQ2hhbm5lbCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gICAgIEFEQ19DSFNSIDogKEFEQyBPZmZzZXQ6IDB4MTgpIEFEQyBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIEFEQ19TUiA6IChBREMgT2Zmc2V0OiAweDFjKSBBREMgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19BRENfRU9DMCAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAgLyogKEFEQykgRW5kIG9mIENvbnZlcnNpb24gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19FT0MxICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgICAvKiAoQURDKSBFbmQgb2YgQ29udmVyc2lvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0VPQzIgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDIgKSAgIC8qIChBREMpIEVuZCBvZiBDb252ZXJzaW9uICovDQotI2RlZmluZSBBVDkxQ19BRENfRU9DMyAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMyApICAgLyogKEFEQykgRW5kIG9mIENvbnZlcnNpb24gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19FT0M0ICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA0ICkgICAvKiAoQURDKSBFbmQgb2YgQ29udmVyc2lvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0VPQzUgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDUgKSAgIC8qIChBREMpIEVuZCBvZiBDb252ZXJzaW9uICovDQotI2RlZmluZSBBVDkxQ19BRENfRU9DNiAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNiApICAgLyogKEFEQykgRW5kIG9mIENvbnZlcnNpb24gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19FT0M3ICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA3ICkgICAvKiAoQURDKSBFbmQgb2YgQ29udmVyc2lvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX09WUkUwICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDggKSAgIC8qIChBREMpIE92ZXJydW4gRXJyb3IgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19PVlJFMSAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA5ICkgICAvKiAoQURDKSBPdmVycnVuIEVycm9yICovDQotI2RlZmluZSBBVDkxQ19BRENfT1ZSRTIgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTAgKSAgLyogKEFEQykgT3ZlcnJ1biBFcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX09WUkUzICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDExICkgIC8qIChBREMpIE92ZXJydW4gRXJyb3IgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19PVlJFNCAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMiApICAvKiAoQURDKSBPdmVycnVuIEVycm9yICovDQotI2RlZmluZSBBVDkxQ19BRENfT1ZSRTUgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTMgKSAgLyogKEFEQykgT3ZlcnJ1biBFcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX09WUkU2ICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE0ICkgIC8qIChBREMpIE92ZXJydW4gRXJyb3IgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19PVlJFNyAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNSApICAvKiAoQURDKSBPdmVycnVuIEVycm9yICovDQotI2RlZmluZSBBVDkxQ19BRENfRFJEWSAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTYgKSAgLyogKEFEQykgRGF0YSBSZWFkeSAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0dPVlJFICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE3ICkgIC8qIChBREMpIEdlbmVyYWwgT3ZlcnJ1biAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0VORFJYICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE4ICkgIC8qIChBREMpIEVuZCBvZiBSZWNlaXZlciBUcmFuc2ZlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1JYQlVGRiAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE5ICkgIC8qIChBREMpIFJYQlVGRiBJbnRlcnJ1cHQgKi8NCi0vKiAtLS0tLS0tLSBBRENfTENEUiA6IChBREMgT2Zmc2V0OiAweDIwKSBBREMgTGFzdCBDb252ZXJ0ZWQgRGF0YSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0xEQVRBICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzRkYgPDwgMCApIC8qIChBREMpIExhc3QgRGF0YSBDb252ZXJ0ZWQgKi8NCi0vKiAtLS0tLS0tLSBBRENfSUVSIDogKEFEQyBPZmZzZXQ6IDB4MjQpIEFEQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQURDX0lEUiA6IChBREMgT2Zmc2V0OiAweDI4KSBBREMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBBRENfSU1SIDogKEFEQyBPZmZzZXQ6IDB4MmMpIEFEQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIEFEQ19DRFIwIDogKEFEQyBPZmZzZXQ6IDB4MzApIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMCAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0RBVEEgICAgKCAoIHVuc2lnbmVkIGludCApIDB4M0ZGIDw8IDAgKSAgLyogKEFEQykgQ29udmVydGVkIERhdGEgKi8NCi0vKiAtLS0tLS0tLSBBRENfQ0RSMSA6IChBREMgT2Zmc2V0OiAweDM0KSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDEgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBBRENfQ0RSMiA6IChBREMgT2Zmc2V0OiAweDM4KSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBBRENfQ0RSMyA6IChBREMgT2Zmc2V0OiAweDNjKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDMgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBBRENfQ0RSNCA6IChBREMgT2Zmc2V0OiAweDQwKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDQgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBBRENfQ0RSNSA6IChBREMgT2Zmc2V0OiAweDQ0KSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDUgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBBRENfQ0RSNiA6IChBREMgT2Zmc2V0OiAweDQ4KSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDYgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBBRENfQ0RSNyA6IChBREMgT2Zmc2V0OiAweDRjKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDcgLS0tLS0tLS0gKi8NCisvLyAtLS0tLS0tLSBBRENfQ1IgOiAoQURDIE9mZnNldDogMHgwKSBBREMgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FEQ19TV1JTVCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoQURDKSBTb2Z0d2FyZSBSZXNldA0KKyNkZWZpbmUgQVQ5MUNfQURDX1NUQVJUICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChBREMpIFN0YXJ0IENvbnZlcnNpb24NCisvLyAtLS0tLS0tLSBBRENfTVIgOiAoQURDIE9mZnNldDogMHg0KSBBREMgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FEQ19UUkdFTiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoQURDKSBUcmlnZ2VyIEVuYWJsZQ0KKyNkZWZpbmUgCUFUOTFDX0FEQ19UUkdFTl9ESVMgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwKSAvLyAoQURDKSBIcmFkd2FyZSB0cmlnZ2VycyBhcmUgZGlzYWJsZWQuIFN0YXJ0aW5nIGEgY29udmVyc2lvbiBpcyBvbmx5IHBvc3NpYmxlIGJ5IHNvZnR3YXJlDQorI2RlZmluZSAJQVQ5MUNfQURDX1RSR0VOX0VOICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEpIC8vIChBREMpIEhhcmR3YXJlIHRyaWdnZXIgc2VsZWN0ZWQgYnkgVFJHU0VMIGZpZWxkIGlzIGVuYWJsZWQuDQorI2RlZmluZSBBVDkxQ19BRENfVFJHU0VMICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NyA8PCAgMSkgLy8gKEFEQykgVHJpZ2dlciBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19BRENfVFJHU0VMX1RJT0EwICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDEpIC8vIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IFRJQU8wDQorI2RlZmluZSAJQVQ5MUNfQURDX1RSR1NFTF9USU9BMSAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAxKSAvLyAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPMQ0KKyNkZWZpbmUgCUFUOTFDX0FEQ19UUkdTRUxfVElPQTIgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MiA8PCAgMSkgLy8gKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gVElBTzINCisjZGVmaW5lIAlBVDkxQ19BRENfVFJHU0VMX1RJT0EzICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgIDEpIC8vIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IFRJQU8zDQorI2RlZmluZSAJQVQ5MUNfQURDX1RSR1NFTF9USU9BNCAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg0IDw8ICAxKSAvLyAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPNA0KKyNkZWZpbmUgCUFUOTFDX0FEQ19UUkdTRUxfVElPQTUgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NSA8PCAgMSkgLy8gKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gVElBTzUNCisjZGVmaW5lIAlBVDkxQ19BRENfVFJHU0VMX0VYVCAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDYgPDwgIDEpIC8vIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IEV4dGVybmFsIFRyaWdnZXINCisjZGVmaW5lIEFUOTFDX0FEQ19MT1dSRVMgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA0KSAvLyAoQURDKSBSZXNvbHV0aW9uLg0KKyNkZWZpbmUgCUFUOTFDX0FEQ19MT1dSRVNfMTBfQklUICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgNCkgLy8gKEFEQykgMTAtYml0IHJlc29sdXRpb24NCisjZGVmaW5lIAlBVDkxQ19BRENfTE9XUkVTXzhfQklUICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChBREMpIDgtYml0IHJlc29sdXRpb24NCisjZGVmaW5lIEFUOTFDX0FEQ19TTEVFUCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA1KSAvLyAoQURDKSBTbGVlcCBNb2RlDQorI2RlZmluZSAJQVQ5MUNfQURDX1NMRUVQX05PUk1BTF9NT0RFICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDUpIC8vIChBREMpIE5vcm1hbCBNb2RlDQorI2RlZmluZSAJQVQ5MUNfQURDX1NMRUVQX01PREUgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8vIChBREMpIFNsZWVwIE1vZGUNCisjZGVmaW5lIEFUOTFDX0FEQ19QUkVTQ0FMICAgICAoKHVuc2lnbmVkIGludCkgMHgzRiA8PCAgOCkgLy8gKEFEQykgUHJlc2NhbGVyIHJhdGUgc2VsZWN0aW9uDQorI2RlZmluZSBBVDkxQ19BRENfU1RBUlRVUCAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MUYgPDwgMTYpIC8vIChBREMpIFN0YXJ0dXAgVGltZQ0KKyNkZWZpbmUgQVQ5MUNfQURDX1NIVElNICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgMjQpIC8vIChBREMpIFNhbXBsZSAmIEhvbGQgVGltZQ0KKy8vIC0tLS0tLS0tIAlBRENfQ0hFUiA6IChBREMgT2Zmc2V0OiAweDEwKSBBREMgQ2hhbm5lbCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BRENfQ0gwICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKEFEQykgQ2hhbm5lbCAwDQorI2RlZmluZSBBVDkxQ19BRENfQ0gxICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLy8gKEFEQykgQ2hhbm5lbCAxDQorI2RlZmluZSBBVDkxQ19BRENfQ0gyICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKEFEQykgQ2hhbm5lbCAyDQorI2RlZmluZSBBVDkxQ19BRENfQ0gzICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKEFEQykgQ2hhbm5lbCAzDQorI2RlZmluZSBBVDkxQ19BRENfQ0g0ICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKEFEQykgQ2hhbm5lbCA0DQorI2RlZmluZSBBVDkxQ19BRENfQ0g1ICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKEFEQykgQ2hhbm5lbCA1DQorI2RlZmluZSBBVDkxQ19BRENfQ0g2ICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNikgLy8gKEFEQykgQ2hhbm5lbCA2DQorI2RlZmluZSBBVDkxQ19BRENfQ0g3ICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNykgLy8gKEFEQykgQ2hhbm5lbCA3DQorLy8gLS0tLS0tLS0gCUFEQ19DSERSIDogKEFEQyBPZmZzZXQ6IDB4MTQpIEFEQyBDaGFubmVsIERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gCUFEQ19DSFNSIDogKEFEQyBPZmZzZXQ6IDB4MTgpIEFEQyBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRENfU1IgOiAoQURDIE9mZnNldDogMHgxYykgQURDIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FEQ19FT0MwICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoQURDKSBFbmQgb2YgQ29udmVyc2lvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX0VPQzEgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19BRENfRU9DMiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKEFEQykgRW5kIG9mIENvbnZlcnNpb24NCisjZGVmaW5lIEFUOTFDX0FEQ19FT0MzICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAzKSAvLyAoQURDKSBFbmQgb2YgQ29udmVyc2lvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX0VPQzQgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8vIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19BRENfRU9DNSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNSkgLy8gKEFEQykgRW5kIG9mIENvbnZlcnNpb24NCisjZGVmaW5lIEFUOTFDX0FEQ19FT0M2ICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvLyAoQURDKSBFbmQgb2YgQ29udmVyc2lvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX0VPQzcgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDcpIC8vIChBREMpIEVuZCBvZiBDb252ZXJzaW9uDQorI2RlZmluZSBBVDkxQ19BRENfT1ZSRTAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKEFEQykgT3ZlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQURDX09WUkUxICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDkpIC8vIChBREMpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX0FEQ19PVlJFMiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEwKSAvLyAoQURDKSBPdmVycnVuIEVycm9yDQorI2RlZmluZSBBVDkxQ19BRENfT1ZSRTMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMSkgLy8gKEFEQykgT3ZlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQURDX09WUkU0ICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTIpIC8vIChBREMpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX0FEQ19PVlJFNSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEzKSAvLyAoQURDKSBPdmVycnVuIEVycm9yDQorI2RlZmluZSBBVDkxQ19BRENfT1ZSRTYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNCkgLy8gKEFEQykgT3ZlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQURDX09WUkU3ICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTUpIC8vIChBREMpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX0FEQ19EUkRZICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoQURDKSBEYXRhIFJlYWR5DQorI2RlZmluZSBBVDkxQ19BRENfR09WUkUgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNykgLy8gKEFEQykgR2VuZXJhbCBPdmVycnVuDQorI2RlZmluZSBBVDkxQ19BRENfRU5EUlggICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOCkgLy8gKEFEQykgRW5kIG9mIFJlY2VpdmVyIFRyYW5zZmVyDQorI2RlZmluZSBBVDkxQ19BRENfUlhCVUZGICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxOSkgLy8gKEFEQykgUlhCVUZGIEludGVycnVwdA0KKy8vIC0tLS0tLS0tIEFEQ19MQ0RSIDogKEFEQyBPZmZzZXQ6IDB4MjApIEFEQyBMYXN0IENvbnZlcnRlZCBEYXRhIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQURDX0xEQVRBICAgICAgICgodW5zaWduZWQgaW50KSAweDNGRiA8PCAgMCkgLy8gKEFEQykgTGFzdCBEYXRhIENvbnZlcnRlZA0KKy8vIC0tLS0tLS0tIEFEQ19JRVIgOiAoQURDIE9mZnNldDogMHgyNCkgQURDIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX0lEUiA6IChBREMgT2Zmc2V0OiAweDI4KSBBREMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX0lNUiA6IChBREMgT2Zmc2V0OiAweDJjKSBBREMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX0NEUjAgOiAoQURDIE9mZnNldDogMHgzMCkgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAwIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQURDX0RBVEEgICAgICAgICgodW5zaWduZWQgaW50KSAweDNGRiA8PCAgMCkgLy8gKEFEQykgQ29udmVydGVkIERhdGENCisvLyAtLS0tLS0tLSBBRENfQ0RSMSA6IChBREMgT2Zmc2V0OiAweDM0KSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDEgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX0NEUjIgOiAoQURDIE9mZnNldDogMHgzOCkgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19DRFIzIDogKEFEQyBPZmZzZXQ6IDB4M2MpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMyAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRENfQ0RSNCA6IChBREMgT2Zmc2V0OiAweDQwKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDQgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX0NEUjUgOiAoQURDIE9mZnNldDogMHg0NCkgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA1IC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19DRFI2IDogKEFEQyBPZmZzZXQ6IDB4NDgpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNiAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRENfQ0RSNyA6IChBREMgT2Zmc2V0OiAweDRjKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDcgLS0tLS0tLS0gDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBBZHZhbmNlZCAgRW5jcnlwdGlvbiBTdGFuZGFyZCAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotdHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX0FFUw0KLXsNCi0gICAgQVQ5MV9SRUcgQUVTX0NSOyAgICAgICAgICAgLyogQ29udHJvbCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBRVNfTVI7ICAgICAgICAgICAvKiBNb2RlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMFsgMiBdOyAgIC8qICovDQotICAgIEFUOTFfUkVHIEFFU19JRVI7ICAgICAgICAgIC8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUVTX0lEUjsgICAgICAgICAgLyogSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUVTX0lNUjsgICAgICAgICAgLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUVTX0lTUjsgICAgICAgICAgLyogSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBRVNfS0VZV3hSWyA0IF07ICAvKiBLZXkgV29yZCB4IFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMVsgNCBdOyAgIC8qICovDQotICAgIEFUOTFfUkVHIEFFU19JREFUQXhSWyA0IF07IC8qIElucHV0IERhdGEgeCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBRVNfT0RBVEF4UlsgNCBdOyAvKiBPdXRwdXQgRGF0YSB4IFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFFU19JVnhSWyA0IF07ICAgIC8qIEluaXRpYWxpemF0aW9uIFZlY3RvciB4IFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMlsgMzUgXTsgIC8qICovDQotICAgIEFUOTFfUkVHIEFFU19WUjsgICAgICAgICAgIC8qIEFFUyBWZXJzaW9uIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFFU19SUFI7ICAgICAgICAgIC8qIFJlY2VpdmUgUG9pbnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBRVNfUkNSOyAgICAgICAgICAvKiBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUVTX1RQUjsgICAgICAgICAgLyogVHJhbnNtaXQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBRVNfVENSOyAgICAgICAgICAvKiBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFFU19STlBSOyAgICAgICAgIC8qIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFFU19STkNSOyAgICAgICAgIC8qIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIEFFU19UTlBSOyAgICAgICAgIC8qIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBBRVNfVE5DUjsgICAgICAgICAvKiBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUVTX1BUQ1I7ICAgICAgICAgLyogUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgQUVTX1BUU1I7ICAgICAgICAgLyogUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLX0gQVQ5MVNfQUVTLCAqIEFUOTFQU19BRVM7DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBBZHZhbmNlZCAgRW5jcnlwdGlvbiBTdGFuZGFyZA0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQordHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX0FFUyB7DQorCUFUOTFfUkVHCSBBRVNfQ1I7IAkvLyBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRVNfTVI7IAkvLyBNb2RlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDBbMl07IAkvLyANCisJQVQ5MV9SRUcJIEFFU19JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRVNfSURSOyAJLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFFU19JTVI7IAkvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUVTX0lTUjsgCS8vIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFFU19LRVlXeFJbNF07IAkvLyBLZXkgV29yZCB4IFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDFbNF07IAkvLyANCisJQVQ5MV9SRUcJIEFFU19JREFUQXhSWzRdOyAJLy8gSW5wdXQgRGF0YSB4IFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRVNfT0RBVEF4Uls0XTsgCS8vIE91dHB1dCBEYXRhIHggUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFFU19JVnhSWzRdOyAJLy8gSW5pdGlhbGl6YXRpb24gVmVjdG9yIHggUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMlszNV07IAkvLyANCisJQVQ5MV9SRUcJIEFFU19WUjsgCS8vIEFFUyBWZXJzaW9uIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRVNfUlBSOyAJLy8gUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRVNfUkNSOyAJLy8gUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRVNfVFBSOyAJLy8gVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUVTX1RDUjsgCS8vIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFFU19STlBSOyAJLy8gUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFFU19STkNSOyAJLy8gUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIEFFU19UTlBSOyAJLy8gVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBBRVNfVE5DUjsgCS8vIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUVTX1BUQ1I7IAkvLyBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgQUVTX1BUU1I7IAkvLyBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorfSBBVDkxU19BRVMsICpBVDkxUFNfQUVTOw0KIA0KLS8qIC0tLS0tLS0tIEFFU19DUiA6IChBRVMgT2Zmc2V0OiAweDApIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19TVEFSVCAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgICAvKiAoQUVTKSBTdGFydHMgUHJvY2Vzc2luZyAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX1NXUlNUICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDggKSAgIC8qIChBRVMpIFNvZnR3YXJlIFJlc2V0ICovDQotI2RlZmluZSBBVDkxQ19BRVNfTE9BRFNFRUQgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTYgKSAgLyogKEFFUykgUmFuZG9tIE51bWJlciBHZW5lcmF0b3IgU2VlZCBMb2FkaW5nICovDQotLyogLS0tLS0tLS0gQUVTX01SIDogKEFFUyBPZmZzZXQ6IDB4NCkgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX0NJUEhFUiAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgIC8qIChBRVMpIFByb2Nlc3NpbmcgTW9kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX1BST0NETFkgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGIDw8IDQgKSAgIC8qIChBRVMpIFByb2Nlc3NpbmcgRGVsYXkgKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19TTU9EICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCA4ICkgICAvKiAoQUVTKSBTdGFydCBNb2RlICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUVTX1NNT0RfTUFOVUFMICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgOCApICAgLyogKEFFUykgTWFudWFsIE1vZGU6IFRoZSBTVEFSVCBiaXQgaW4gcmVnaXN0ZXIgQUVTX0NSIG11c3QgYmUgc2V0IHRvIGJlZ2luIGVuY3J5cHRpb24gb3IgZGVjcnlwdGlvbi4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfU01PRF9BVVRPICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgICAvKiAoQUVTKSBBdXRvIE1vZGU6IG5vIGFjdGlvbiBpbiBBRVNfQ1IgaXMgbmVjZXNzYXJ5IChjZiBkYXRhc2hlZXQpLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FFU19TTU9EX1BEQyAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDggKSAgIC8qIChBRVMpIFBEQyBNb2RlIChjZiBkYXRhc2hlZXQpLiAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX09QTU9EICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg3IDw8IDEyICkgIC8qIChBRVMpIE9wZXJhdGlvbiBNb2RlICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUVTX09QTU9EX0VDQiAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMTIgKSAgLyogKEFFUykgRUNCIEVsZWN0cm9uaWMgQ29kZUJvb2sgbW9kZS4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfT1BNT0RfQ0JDICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxMiApICAvKiAoQUVTKSBDQkMgQ2lwaGVyIEJsb2NrIENoYWluaW5nIG1vZGUuICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUVTX09QTU9EX09GQiAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgMTIgKSAgLyogKEFFUykgT0ZCIE91dHB1dCBGZWVkYmFjayBtb2RlLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FFU19PUE1PRF9DRkIgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDEyICkgIC8qIChBRVMpIENGQiBDaXBoZXIgRmVlZGJhY2sgbW9kZS4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfT1BNT0RfQ1RSICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NCA8PCAxMiApICAvKiAoQUVTKSBDVFIgQ291bnRlciBtb2RlLiAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX0xPRCAgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE1ICkgIC8qIChBRVMpIExhc3QgT3V0cHV0IERhdGEgTW9kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX0NGQlMgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg3IDw8IDE2ICkgIC8qIChBRVMpIENpcGhlciBGZWVkYmFjayBEYXRhIFNpemUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfQ0ZCU18xMjhfQklUICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MCA8PCAxNiApICAvKiAoQUVTKSAxMjgtYml0LiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FFU19DRkJTXzY0X0JJVCAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDE2ICkgIC8qIChBRVMpIDY0LWJpdC4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfQ0ZCU18zMl9CSVQgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCAxNiApICAvKiAoQUVTKSAzMi1iaXQuICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUVTX0NGQlNfMTZfQklUICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTYgKSAgLyogKEFFUykgMTYtYml0LiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FFU19DRkJTXzhfQklUICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHg0IDw8IDE2ICkgIC8qIChBRVMpIDgtYml0LiAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX0NLRVkgICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHhGIDw8IDIwICkgIC8qIChBRVMpIENvdW50ZXJtZWFzdXJlIEtleSAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX0NUWVBFICAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxRiA8PCAyNCApIC8qIChBRVMpIENvdW50ZXJtZWFzdXJlIFR5cGUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfQ1RZUEVfVFlQRTFfRU4gICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAyNCApICAvKiAoQUVTKSBDb3VudGVybWVhc3VyZSB0eXBlIDEgaXMgZW5hYmxlZC4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfQ1RZUEVfVFlQRTJfRU4gICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCAyNCApICAvKiAoQUVTKSBDb3VudGVybWVhc3VyZSB0eXBlIDIgaXMgZW5hYmxlZC4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfQ1RZUEVfVFlQRTNfRU4gICAgKCAoIHVuc2lnbmVkIGludCApIDB4NCA8PCAyNCApICAvKiAoQUVTKSBDb3VudGVybWVhc3VyZSB0eXBlIDMgaXMgZW5hYmxlZC4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfQ1RZUEVfVFlQRTRfRU4gICAgKCAoIHVuc2lnbmVkIGludCApIDB4OCA8PCAyNCApICAvKiAoQUVTKSBDb3VudGVybWVhc3VyZSB0eXBlIDQgaXMgZW5hYmxlZC4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfQ1RZUEVfVFlQRTVfRU4gICAgKCAoIHVuc2lnbmVkIGludCApIDB4MTAgPDwgMjQgKSAvKiAoQUVTKSBDb3VudGVybWVhc3VyZSB0eXBlIDUgaXMgZW5hYmxlZC4gKi8NCi0vKiAtLS0tLS0tLSBBRVNfSUVSIDogKEFFUyBPZmZzZXQ6IDB4MTApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19EQVRSRFkgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAwICkgICAvKiAoQUVTKSBEQVRSRFkgKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19FTkRSWCAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgICAvKiAoQUVTKSBQREMgUmVhZCBCdWZmZXIgRW5kICovDQotI2RlZmluZSBBVDkxQ19BRVNfRU5EVFggICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMiApICAgLyogKEFFUykgUERDIFdyaXRlIEJ1ZmZlciBFbmQgKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19SWEJVRkYgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAzICkgICAvKiAoQUVTKSBQREMgUmVhZCBCdWZmZXIgRnVsbCAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX1RYQlVGRSAgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDQgKSAgIC8qIChBRVMpIFBEQyBXcml0ZSBCdWZmZXIgRW1wdHkgKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19VUkFEICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgICAvKiAoQUVTKSBVbnNwZWNpZmllZCBSZWdpc3RlciBBY2Nlc3MgRGV0ZWN0aW9uICovDQotLyogLS0tLS0tLS0gQUVTX0lEUiA6IChBRVMgT2Zmc2V0OiAweDE0KSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIEFFU19JTVIgOiAoQUVTIE9mZnNldDogMHgxOCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBBRVNfSVNSIDogKEFFUyBPZmZzZXQ6IDB4MWMpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19VUkFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NyA8PCAxMiApIC8qIChBRVMpIFVuc3BlY2lmaWVkIFJlZ2lzdGVyIEFjY2VzcyBUeXBlIFN0YXR1cyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FFU19VUkFUX0lOX0RBVF9XUklURV9EQVRQUk9DICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDEyICkgLyogKEFFUykgSW5wdXQgZGF0YSByZWdpc3RlciB3cml0dGVuIGR1cmluZyB0aGUgZGF0YSBwcm9jZXNzaW5nIGluIFBEQyBtb2RlLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FFU19VUkFUX09VVF9EQVRfUkVBRF9EQVRQUk9DICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEyICkgLyogKEFFUykgT3V0cHV0IGRhdGEgcmVnaXN0ZXIgcmVhZCBkdXJpbmcgdGhlIGRhdGEgcHJvY2Vzc2luZy4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfVVJBVF9NT0RFUkVHX1dSSVRFX0RBVFBST0MgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCAxMiApIC8qIChBRVMpIE1vZGUgcmVnaXN0ZXIgd3JpdHRlbiBkdXJpbmcgdGhlIGRhdGEgcHJvY2Vzc2luZy4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfVVJBVF9PVVRfREFUX1JFQURfU1VCS0VZICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAxMiApIC8qIChBRVMpIE91dHB1dCBkYXRhIHJlZ2lzdGVyIHJlYWQgZHVyaW5nIHRoZSBzdWIta2V5cyBnZW5lcmF0aW9uLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FFU19VUkFUX01PREVSRUdfV1JJVEVfU1VCS0VZICAgICAoICggdW5zaWduZWQgaW50ICkgMHg0IDw8IDEyICkgLyogKEFFUykgTW9kZSByZWdpc3RlciB3cml0dGVuIGR1cmluZyB0aGUgc3ViLWtleXMgZ2VuZXJhdGlvbi4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfVVJBVF9XT19SRUdfUkVBRCAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NSA8PCAxMiApIC8qIChBRVMpIFdyaXRlLW9ubHkgcmVnaXN0ZXIgcmVhZCBhY2Nlc3MuICovDQorLy8gLS0tLS0tLS0gQUVTX0NSIDogKEFFUyBPZmZzZXQ6IDB4MCkgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FFU19TVEFSVCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoQUVTKSBTdGFydHMgUHJvY2Vzc2luZw0KKyNkZWZpbmUgQVQ5MUNfQUVTX1NXUlNUICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChBRVMpIFNvZnR3YXJlIFJlc2V0DQorI2RlZmluZSBBVDkxQ19BRVNfTE9BRFNFRUQgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxNikgLy8gKEFFUykgUmFuZG9tIE51bWJlciBHZW5lcmF0b3IgU2VlZCBMb2FkaW5nDQorLy8gLS0tLS0tLS0gQUVTX01SIDogKEFFUyBPZmZzZXQ6IDB4NCkgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FFU19DSVBIRVIgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoQUVTKSBQcm9jZXNzaW5nIE1vZGUNCisjZGVmaW5lIEFUOTFDX0FFU19QUk9DRExZICAgICAoKHVuc2lnbmVkIGludCkgMHhGIDw8ICA0KSAvLyAoQUVTKSBQcm9jZXNzaW5nIERlbGF5DQorI2RlZmluZSBBVDkxQ19BRVNfU01PRCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKEFFUykgU3RhcnQgTW9kZQ0KKyNkZWZpbmUgCUFUOTFDX0FFU19TTU9EX01BTlVBTCAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgIDgpIC8vIChBRVMpIE1hbnVhbCBNb2RlOiBUaGUgU1RBUlQgYml0IGluIHJlZ2lzdGVyIEFFU19DUiBtdXN0IGJlIHNldCB0byBiZWdpbiBlbmNyeXB0aW9uIG9yIGRlY3J5cHRpb24uDQorI2RlZmluZSAJQVQ5MUNfQUVTX1NNT0RfQVVUTyAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgOCkgLy8gKEFFUykgQXV0byBNb2RlOiBubyBhY3Rpb24gaW4gQUVTX0NSIGlzIG5lY2Vzc2FyeSAoY2YgZGF0YXNoZWV0KS4NCisjZGVmaW5lIAlBVDkxQ19BRVNfU01PRF9QREMgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8ICA4KSAvLyAoQUVTKSBQREMgTW9kZSAoY2YgZGF0YXNoZWV0KS4NCisjZGVmaW5lIEFUOTFDX0FFU19PUE1PRCAgICAgICAoKHVuc2lnbmVkIGludCkgMHg3IDw8IDEyKSAvLyAoQUVTKSBPcGVyYXRpb24gTW9kZQ0KKyNkZWZpbmUgCUFUOTFDX0FFU19PUE1PRF9FQ0IgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDEyKSAvLyAoQUVTKSBFQ0IgRWxlY3Ryb25pYyBDb2RlQm9vayBtb2RlLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19PUE1PRF9DQkMgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvLyAoQUVTKSBDQkMgQ2lwaGVyIEJsb2NrIENoYWluaW5nIG1vZGUuDQorI2RlZmluZSAJQVQ5MUNfQUVTX09QTU9EX09GQiAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMTIpIC8vIChBRVMpIE9GQiBPdXRwdXQgRmVlZGJhY2sgbW9kZS4NCisjZGVmaW5lIAlBVDkxQ19BRVNfT1BNT0RfQ0ZCICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxMikgLy8gKEFFUykgQ0ZCIENpcGhlciBGZWVkYmFjayBtb2RlLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19PUE1PRF9DVFIgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg0IDw8IDEyKSAvLyAoQUVTKSBDVFIgQ291bnRlciBtb2RlLg0KKyNkZWZpbmUgQVQ5MUNfQUVTX0xPRCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTUpIC8vIChBRVMpIExhc3QgT3V0cHV0IERhdGEgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfQUVTX0NGQlMgICAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgMTYpIC8vIChBRVMpIENpcGhlciBGZWVkYmFjayBEYXRhIFNpemUNCisjZGVmaW5lIAlBVDkxQ19BRVNfQ0ZCU18xMjhfQklUICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDE2KSAvLyAoQUVTKSAxMjgtYml0Lg0KKyNkZWZpbmUgCUFUOTFDX0FFU19DRkJTXzY0X0JJVCAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTYpIC8vIChBRVMpIDY0LWJpdC4NCisjZGVmaW5lIAlBVDkxQ19BRVNfQ0ZCU18zMl9CSVQgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDE2KSAvLyAoQUVTKSAzMi1iaXQuDQorI2RlZmluZSAJQVQ5MUNfQUVTX0NGQlNfMTZfQklUICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxNikgLy8gKEFFUykgMTYtYml0Lg0KKyNkZWZpbmUgCUFUOTFDX0FFU19DRkJTXzhfQklUICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDQgPDwgMTYpIC8vIChBRVMpIDgtYml0Lg0KKyNkZWZpbmUgQVQ5MUNfQUVTX0NLRVkgICAgICAgICgodW5zaWduZWQgaW50KSAweEYgPDwgMjApIC8vIChBRVMpIENvdW50ZXJtZWFzdXJlIEtleQ0KKyNkZWZpbmUgQVQ5MUNfQUVTX0NUWVBFICAgICAgICgodW5zaWduZWQgaW50KSAweDFGIDw8IDI0KSAvLyAoQUVTKSBDb3VudGVybWVhc3VyZSBUeXBlDQorI2RlZmluZSAJQVQ5MUNfQUVTX0NUWVBFX1RZUEUxX0VOICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMjQpIC8vIChBRVMpIENvdW50ZXJtZWFzdXJlIHR5cGUgMSBpcyBlbmFibGVkLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19DVFlQRV9UWVBFMl9FTiAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDI0KSAvLyAoQUVTKSBDb3VudGVybWVhc3VyZSB0eXBlIDIgaXMgZW5hYmxlZC4NCisjZGVmaW5lIAlBVDkxQ19BRVNfQ1RZUEVfVFlQRTNfRU4gICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4NCA8PCAyNCkgLy8gKEFFUykgQ291bnRlcm1lYXN1cmUgdHlwZSAzIGlzIGVuYWJsZWQuDQorI2RlZmluZSAJQVQ5MUNfQUVTX0NUWVBFX1RZUEU0X0VOICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDggPDwgMjQpIC8vIChBRVMpIENvdW50ZXJtZWFzdXJlIHR5cGUgNCBpcyBlbmFibGVkLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19DVFlQRV9UWVBFNV9FTiAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxMCA8PCAyNCkgLy8gKEFFUykgQ291bnRlcm1lYXN1cmUgdHlwZSA1IGlzIGVuYWJsZWQuDQorLy8gLS0tLS0tLS0gQUVTX0lFUiA6IChBRVMgT2Zmc2V0OiAweDEwKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQUVTX0RBVFJEWSAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDApIC8vIChBRVMpIERBVFJEWQ0KKyNkZWZpbmUgQVQ5MUNfQUVTX0VORFJYICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChBRVMpIFBEQyBSZWFkIEJ1ZmZlciBFbmQNCisjZGVmaW5lIEFUOTFDX0FFU19FTkRUWCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAyKSAvLyAoQUVTKSBQREMgV3JpdGUgQnVmZmVyIEVuZA0KKyNkZWZpbmUgQVQ5MUNfQUVTX1JYQlVGRiAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDMpIC8vIChBRVMpIFBEQyBSZWFkIEJ1ZmZlciBGdWxsDQorI2RlZmluZSBBVDkxQ19BRVNfVFhCVUZFICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKEFFUykgUERDIFdyaXRlIEJ1ZmZlciBFbXB0eQ0KKyNkZWZpbmUgQVQ5MUNfQUVTX1VSQUQgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8vIChBRVMpIFVuc3BlY2lmaWVkIFJlZ2lzdGVyIEFjY2VzcyBEZXRlY3Rpb24NCisvLyAtLS0tLS0tLSBBRVNfSURSIDogKEFFUyBPZmZzZXQ6IDB4MTQpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFFU19JTVIgOiAoQUVTIE9mZnNldDogMHgxOCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQUVTX0lTUiA6IChBRVMgT2Zmc2V0OiAweDFjKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQUVTX1VSQVQgICAgICAgICgodW5zaWduZWQgaW50KSAweDcgPDwgMTIpIC8vIChBRVMpIFVuc3BlY2lmaWVkIFJlZ2lzdGVyIEFjY2VzcyBUeXBlIFN0YXR1cw0KKyNkZWZpbmUgCUFUOTFDX0FFU19VUkFUX0lOX0RBVF9XUklURV9EQVRQUk9DICgodW5zaWduZWQgaW50KSAweDAgPDwgMTIpIC8vIChBRVMpIElucHV0IGRhdGEgcmVnaXN0ZXIgd3JpdHRlbiBkdXJpbmcgdGhlIGRhdGEgcHJvY2Vzc2luZyBpbiBQREMgbW9kZS4NCisjZGVmaW5lIAlBVDkxQ19BRVNfVVJBVF9PVVRfREFUX1JFQURfREFUUFJPQyAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvLyAoQUVTKSBPdXRwdXQgZGF0YSByZWdpc3RlciByZWFkIGR1cmluZyB0aGUgZGF0YSBwcm9jZXNzaW5nLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19VUkFUX01PREVSRUdfV1JJVEVfREFUUFJPQyAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDEyKSAvLyAoQUVTKSBNb2RlIHJlZ2lzdGVyIHdyaXR0ZW4gZHVyaW5nIHRoZSBkYXRhIHByb2Nlc3NpbmcuDQorI2RlZmluZSAJQVQ5MUNfQUVTX1VSQVRfT1VUX0RBVF9SRUFEX1NVQktFWSAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxMikgLy8gKEFFUykgT3V0cHV0IGRhdGEgcmVnaXN0ZXIgcmVhZCBkdXJpbmcgdGhlIHN1Yi1rZXlzIGdlbmVyYXRpb24uDQorI2RlZmluZSAJQVQ5MUNfQUVTX1VSQVRfTU9ERVJFR19XUklURV9TVUJLRVkgKCh1bnNpZ25lZCBpbnQpIDB4NCA8PCAxMikgLy8gKEFFUykgTW9kZSByZWdpc3RlciB3cml0dGVuIGR1cmluZyB0aGUgc3ViLWtleXMgZ2VuZXJhdGlvbi4NCisjZGVmaW5lIAlBVDkxQ19BRVNfVVJBVF9XT19SRUdfUkVBRCAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHg1IDw8IDEyKSAvLyAoQUVTKSBXcml0ZS1vbmx5IHJlZ2lzdGVyIHJlYWQgYWNjZXNzLg0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVHJpcGxlIERhdGEgRW5jcnlwdGlvbiBTdGFuZGFyZCAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotdHlwZWRlZiBzdHJ1Y3QgX0FUOTFTX1RERVMNCi17DQotICAgIEFUOTFfUkVHIFRERVNfQ1I7ICAgICAgICAgICAvKiBDb250cm9sIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFRERVNfTVI7ICAgICAgICAgICAvKiBNb2RlIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMFsgMiBdOyAgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBUREVTX0lFUjsgICAgICAgICAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBUREVTX0lEUjsgICAgICAgICAgLyogSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVERFU19JTVI7ICAgICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFRERVNfSVNSOyAgICAgICAgICAvKiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFRERVNfS0VZMVd4UlsgMiBdOyAvKiBLZXkgMSBXb3JkIHggUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVERFU19LRVkyV3hSWyAyIF07IC8qIEtleSAyIFdvcmQgeCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBUREVTX0tFWTNXeFJbIDIgXTsgLyogS2V5IDMgV29yZCB4IFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMVsgMiBdOyAgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBUREVTX0lEQVRBeFJbIDIgXTsgLyogSW5wdXQgRGF0YSB4IFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkMlsgMiBdOyAgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBUREVTX09EQVRBeFJbIDIgXTsgLyogT3V0cHV0IERhdGEgeCBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBSZXNlcnZlZDNbIDIgXTsgICAgLyogKi8NCi0gICAgQVQ5MV9SRUcgVERFU19JVnhSWyAyIF07ICAgIC8qIEluaXRpYWxpemF0aW9uIFZlY3RvciB4IFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFJlc2VydmVkNFsgMzcgXTsgICAvKiAqLw0KLSAgICBBVDkxX1JFRyBUREVTX1ZSOyAgICAgICAgICAgLyogVERFUyBWZXJzaW9uIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFRERVNfUlBSOyAgICAgICAgICAvKiBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVERFU19SQ1I7ICAgICAgICAgIC8qIFJlY2VpdmUgQ291bnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBUREVTX1RQUjsgICAgICAgICAgLyogVHJhbnNtaXQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBUREVTX1RDUjsgICAgICAgICAgLyogVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBUREVTX1JOUFI7ICAgICAgICAgLyogUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVERFU19STkNSOyAgICAgICAgIC8qIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotICAgIEFUOTFfUkVHIFRERVNfVE5QUjsgICAgICAgICAvKiBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVERFU19UTkNSOyAgICAgICAgIC8qIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSAgICBBVDkxX1JFRyBUREVTX1BUQ1I7ICAgICAgICAgLyogUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MV9SRUcgVERFU19QVFNSOyAgICAgICAgIC8qIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi19IEFUOTFTX1RERVMsICogQVQ5MVBTX1RERVM7DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBUcmlwbGUgRGF0YSBFbmNyeXB0aW9uIFN0YW5kYXJkDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCit0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfVERFUyB7DQorCUFUOTFfUkVHCSBUREVTX0NSOyAJLy8gQ29udHJvbCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVERFU19NUjsgCS8vIE1vZGUgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMFsyXTsgCS8vIA0KKwlBVDkxX1JFRwkgVERFU19JRVI7IAkvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUREVTX0lEUjsgCS8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUREVTX0lNUjsgCS8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUREVTX0lTUjsgCS8vIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRERVNfS0VZMVd4UlsyXTsgCS8vIEtleSAxIFdvcmQgeCBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVERFU19LRVkyV3hSWzJdOyAJLy8gS2V5IDIgV29yZCB4IFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUREVTX0tFWTNXeFJbMl07IAkvLyBLZXkgMyBXb3JkIHggUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkMVsyXTsgCS8vIA0KKwlBVDkxX1JFRwkgVERFU19JREFUQXhSWzJdOyAJLy8gSW5wdXQgRGF0YSB4IFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBSZXNlcnZlZDJbMl07IAkvLyANCisJQVQ5MV9SRUcJIFRERVNfT0RBVEF4UlsyXTsgCS8vIE91dHB1dCBEYXRhIHggUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkM1syXTsgCS8vIA0KKwlBVDkxX1JFRwkgVERFU19JVnhSWzJdOyAJLy8gSW5pdGlhbGl6YXRpb24gVmVjdG9yIHggUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFJlc2VydmVkNFszN107IAkvLyANCisJQVQ5MV9SRUcJIFRERVNfVlI7IAkvLyBUREVTIFZlcnNpb24gUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRERVNfUlBSOyAJLy8gUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUREVTX1JDUjsgCS8vIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVERFU19UUFI7IAkvLyBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUREVTX1RDUjsgCS8vIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRERVNfUk5QUjsgCS8vIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUREVTX1JOQ1I7IAkvLyBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKwlBVDkxX1JFRwkgVERFU19UTlBSOyAJLy8gVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUREVTX1ROQ1I7IAkvLyBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisJQVQ5MV9SRUcJIFRERVNfUFRDUjsgCS8vIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorCUFUOTFfUkVHCSBUREVTX1BUU1I7IAkvLyBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorfSBBVDkxU19UREVTLCAqQVQ5MVBTX1RERVM7DQogDQotLyogLS0tLS0tLS0gVERFU19DUiA6IChUREVTIE9mZnNldDogMHgwKSBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19UREVTX1NUQVJUICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgLyogKFRERVMpIFN0YXJ0cyBQcm9jZXNzaW5nICovDQotI2RlZmluZSBBVDkxQ19UREVTX1NXUlNUICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDggKSAgLyogKFRERVMpIFNvZnR3YXJlIFJlc2V0ICovDQotLyogLS0tLS0tLS0gVERFU19NUiA6IChUREVTIE9mZnNldDogMHg0KSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19UREVTX0NJUEhFUiAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDAgKSAgLyogKFRERVMpIFByb2Nlc3NpbmcgTW9kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19UREVTTU9EICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxICkgIC8qIChUREVTKSBTaW5nbGUgb3IgVHJpcGxlIERFUyBNb2RlICovDQotI2RlZmluZSBBVDkxQ19UREVTX0tFWU1PRCAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDQgKSAgLyogKFRERVMpIEtleSBNb2RlICovDQotI2RlZmluZSBBVDkxQ19UREVTX1NNT0QgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDggKSAgLyogKFRERVMpIFN0YXJ0IE1vZGUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UREVTX1NNT0RfTUFOVUFMICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgOCApICAvKiAoVERFUykgTWFudWFsIE1vZGU6IFRoZSBTVEFSVCBiaXQgaW4gcmVnaXN0ZXIgVERFU19DUiBtdXN0IGJlIHNldCB0byBiZWdpbiBlbmNyeXB0aW9uIG9yIGRlY3J5cHRpb24uICovDQotI2RlZmluZSAgICAgQVQ5MUNfVERFU19TTU9EX0FVVE8gICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDggKSAgLyogKFRERVMpIEF1dG8gTW9kZTogbm8gYWN0aW9uIGluIFRERVNfQ1IgaXMgbmVjZXNzYXJ5IChjZiBkYXRhc2hlZXQpLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RERVNfU01PRF9QREMgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCA4ICkgIC8qIChUREVTKSBQREMgTW9kZSAoY2YgZGF0YXNoZWV0KS4gKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfT1BNT0QgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTIgKSAvKiAoVERFUykgT3BlcmF0aW9uIE1vZGUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UREVTX09QTU9EX0VDQiAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMTIgKSAvKiAoVERFUykgRUNCIEVsZWN0cm9uaWMgQ29kZUJvb2sgbW9kZS4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UREVTX09QTU9EX0NCQyAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTIgKSAvKiAoVERFUykgQ0JDIENpcGhlciBCbG9jayBDaGFpbmluZyBtb2RlLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RERVNfT1BNT0RfT0ZCICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MiA8PCAxMiApIC8qIChUREVTKSBPRkIgT3V0cHV0IEZlZWRiYWNrIG1vZGUuICovDQotI2RlZmluZSAgICAgQVQ5MUNfVERFU19PUE1PRF9DRkIgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDEyICkgLyogKFRERVMpIENGQiBDaXBoZXIgRmVlZGJhY2sgbW9kZS4gKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfTE9EICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTUgKSAvKiAoVERFUykgTGFzdCBPdXRwdXQgRGF0YSBNb2RlICovDQotI2RlZmluZSBBVDkxQ19UREVTX0NGQlMgICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgzIDw8IDE2ICkgLyogKFRERVMpIENpcGhlciBGZWVkYmFjayBEYXRhIFNpemUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UREVTX0NGQlNfNjRfQklUICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAgPDwgMTYgKSAvKiAoVERFUykgNjQtYml0LiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RERVNfQ0ZCU18zMl9CSVQgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCAxNiApIC8qIChUREVTKSAzMi1iaXQuICovDQotI2RlZmluZSAgICAgQVQ5MUNfVERFU19DRkJTXzE2X0JJVCAgICAoICggdW5zaWduZWQgaW50ICkgMHgyIDw8IDE2ICkgLyogKFRERVMpIDE2LWJpdC4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UREVTX0NGQlNfOF9CSVQgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTYgKSAvKiAoVERFUykgOC1iaXQuICovDQotLyogLS0tLS0tLS0gVERFU19JRVIgOiAoVERFUyBPZmZzZXQ6IDB4MTApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfREFUUkRZICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMCApICAvKiAoVERFUykgREFUUkRZICovDQotI2RlZmluZSBBVDkxQ19UREVTX0VORFJYICAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMHgxIDw8IDEgKSAgLyogKFRERVMpIFBEQyBSZWFkIEJ1ZmZlciBFbmQgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfRU5EVFggICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMiApICAvKiAoVERFUykgUERDIFdyaXRlIEJ1ZmZlciBFbmQgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfUlhCVUZGICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMyApICAvKiAoVERFUykgUERDIFJlYWQgQnVmZmVyIEZ1bGwgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfVFhCVUZFICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgNCApICAvKiAoVERFUykgUERDIFdyaXRlIEJ1ZmZlciBFbXB0eSAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19VUkFEICAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MSA8PCA4ICkgIC8qIChUREVTKSBVbnNwZWNpZmllZCBSZWdpc3RlciBBY2Nlc3MgRGV0ZWN0aW9uICovDQotLyogLS0tLS0tLS0gVERFU19JRFIgOiAoVERFUyBPZmZzZXQ6IDB4MTQpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gVERFU19JTVIgOiAoVERFUyBPZmZzZXQ6IDB4MTgpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gVERFU19JU1IgOiAoVERFUyBPZmZzZXQ6IDB4MWMpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfVVJBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDMgPDwgMTIgKSAvKiAoVERFUykgVW5zcGVjaWZpZWQgUmVnaXN0ZXIgQWNjZXNzIFR5cGUgU3RhdHVzICovDQotI2RlZmluZSAgICAgQVQ5MUNfVERFU19VUkFUX0lOX0RBVF9XUklURV9EQVRQUk9DICAgICAoICggdW5zaWduZWQgaW50ICkgMHgwIDw8IDEyICkgLyogKFRERVMpIElucHV0IGRhdGEgcmVnaXN0ZXIgd3JpdHRlbiBkdXJpbmcgdGhlIGRhdGEgcHJvY2Vzc2luZyBpbiBQREMgbW9kZS4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UREVTX1VSQVRfT1VUX0RBVF9SRUFEX0RBVFBST0MgICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDEgPDwgMTIgKSAvKiAoVERFUykgT3V0cHV0IGRhdGEgcmVnaXN0ZXIgcmVhZCBkdXJpbmcgdGhlIGRhdGEgcHJvY2Vzc2luZy4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UREVTX1VSQVRfTU9ERVJFR19XUklURV9EQVRQUk9DICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDIgPDwgMTIgKSAvKiAoVERFUykgTW9kZSByZWdpc3RlciB3cml0dGVuIGR1cmluZyB0aGUgZGF0YSBwcm9jZXNzaW5nLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RERVNfVVJBVF9XT19SRUdfUkVBRCAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MyA8PCAxMiApIC8qIChUREVTKSBXcml0ZS1vbmx5IHJlZ2lzdGVyIHJlYWQgYWNjZXNzLiAqLw0KKy8vIC0tLS0tLS0tIFRERVNfQ1IgOiAoVERFUyBPZmZzZXQ6IDB4MCkgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RERVNfU1RBUlQgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICAwKSAvLyAoVERFUykgU3RhcnRzIFByb2Nlc3NpbmcNCisjZGVmaW5lIEFUOTFDX1RERVNfU1dSU1QgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoVERFUykgU29mdHdhcmUgUmVzZXQNCisvLyAtLS0tLS0tLSBUREVTX01SIDogKFRERVMgT2Zmc2V0OiAweDQpIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UREVTX0NJUEhFUiAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFRERVMpIFByb2Nlc3NpbmcgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfVERFU19UREVTTU9EICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChUREVTKSBTaW5nbGUgb3IgVHJpcGxlIERFUyBNb2RlDQorI2RlZmluZSBBVDkxQ19UREVTX0tFWU1PRCAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFRERVMpIEtleSBNb2RlDQorI2RlZmluZSBBVDkxQ19UREVTX1NNT0QgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAgOCkgLy8gKFRERVMpIFN0YXJ0IE1vZGUNCisjZGVmaW5lIAlBVDkxQ19UREVTX1NNT0RfTUFOVUFMICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MCA8PCAgOCkgLy8gKFRERVMpIE1hbnVhbCBNb2RlOiBUaGUgU1RBUlQgYml0IGluIHJlZ2lzdGVyIFRERVNfQ1IgbXVzdCBiZSBzZXQgdG8gYmVnaW4gZW5jcnlwdGlvbiBvciBkZWNyeXB0aW9uLg0KKyNkZWZpbmUgCUFUOTFDX1RERVNfU01PRF9BVVRPICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoVERFUykgQXV0byBNb2RlOiBubyBhY3Rpb24gaW4gVERFU19DUiBpcyBuZWNlc3NhcnkgKGNmIGRhdGFzaGVldCkuDQorI2RlZmluZSAJQVQ5MUNfVERFU19TTU9EX1BEQyAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgIDgpIC8vIChUREVTKSBQREMgTW9kZSAoY2YgZGF0YXNoZWV0KS4NCisjZGVmaW5lIEFUOTFDX1RERVNfT1BNT0QgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDEyKSAvLyAoVERFUykgT3BlcmF0aW9uIE1vZGUNCisjZGVmaW5lIAlBVDkxQ19UREVTX09QTU9EX0VDQiAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDAgPDwgMTIpIC8vIChUREVTKSBFQ0IgRWxlY3Ryb25pYyBDb2RlQm9vayBtb2RlLg0KKyNkZWZpbmUgCUFUOTFDX1RERVNfT1BNT0RfQ0JDICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAxMikgLy8gKFRERVMpIENCQyBDaXBoZXIgQmxvY2sgQ2hhaW5pbmcgbW9kZS4NCisjZGVmaW5lIAlBVDkxQ19UREVTX09QTU9EX09GQiAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDIgPDwgMTIpIC8vIChUREVTKSBPRkIgT3V0cHV0IEZlZWRiYWNrIG1vZGUuDQorI2RlZmluZSAJQVQ5MUNfVERFU19PUE1PRF9DRkIgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDEyKSAvLyAoVERFUykgQ0ZCIENpcGhlciBGZWVkYmFjayBtb2RlLg0KKyNkZWZpbmUgQVQ5MUNfVERFU19MT0QgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTUpIC8vIChUREVTKSBMYXN0IE91dHB1dCBEYXRhIE1vZGUNCisjZGVmaW5lIEFUOTFDX1RERVNfQ0ZCUyAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE2KSAvLyAoVERFUykgQ2lwaGVyIEZlZWRiYWNrIERhdGEgU2l6ZQ0KKyNkZWZpbmUgCUFUOTFDX1RERVNfQ0ZCU182NF9CSVQgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDE2KSAvLyAoVERFUykgNjQtYml0Lg0KKyNkZWZpbmUgCUFUOTFDX1RERVNfQ0ZCU18zMl9CSVQgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDE2KSAvLyAoVERFUykgMzItYml0Lg0KKyNkZWZpbmUgCUFUOTFDX1RERVNfQ0ZCU18xNl9CSVQgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDE2KSAvLyAoVERFUykgMTYtYml0Lg0KKyNkZWZpbmUgCUFUOTFDX1RERVNfQ0ZCU184X0JJVCAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgzIDw8IDE2KSAvLyAoVERFUykgOC1iaXQuDQorLy8gLS0tLS0tLS0gVERFU19JRVIgOiAoVERFUyBPZmZzZXQ6IDB4MTApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UREVTX0RBVFJEWSAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLy8gKFRERVMpIERBVFJEWQ0KKyNkZWZpbmUgQVQ5MUNfVERFU19FTkRSWCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8vIChUREVTKSBQREMgUmVhZCBCdWZmZXIgRW5kDQorI2RlZmluZSBBVDkxQ19UREVTX0VORFRYICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMikgLy8gKFRERVMpIFBEQyBXcml0ZSBCdWZmZXIgRW5kDQorI2RlZmluZSBBVDkxQ19UREVTX1JYQlVGRiAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMykgLy8gKFRERVMpIFBEQyBSZWFkIEJ1ZmZlciBGdWxsDQorI2RlZmluZSBBVDkxQ19UREVTX1RYQlVGRSAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLy8gKFRERVMpIFBEQyBXcml0ZSBCdWZmZXIgRW1wdHkNCisjZGVmaW5lIEFUOTFDX1RERVNfVVJBRCAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA4KSAvLyAoVERFUykgVW5zcGVjaWZpZWQgUmVnaXN0ZXIgQWNjZXNzIERldGVjdGlvbg0KKy8vIC0tLS0tLS0tIFRERVNfSURSIDogKFRERVMgT2Zmc2V0OiAweDE0KSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBUREVTX0lNUiA6IChUREVTIE9mZnNldDogMHgxOCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVERFU19JU1IgOiAoVERFUyBPZmZzZXQ6IDB4MWMpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UREVTX1VSQVQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MyA8PCAxMikgLy8gKFRERVMpIFVuc3BlY2lmaWVkIFJlZ2lzdGVyIEFjY2VzcyBUeXBlIFN0YXR1cw0KKyNkZWZpbmUgCUFUOTFDX1RERVNfVVJBVF9JTl9EQVRfV1JJVEVfREFUUFJPQyAoKHVuc2lnbmVkIGludCkgMHgwIDw8IDEyKSAvLyAoVERFUykgSW5wdXQgZGF0YSByZWdpc3RlciB3cml0dGVuIGR1cmluZyB0aGUgZGF0YSBwcm9jZXNzaW5nIGluIFBEQyBtb2RlLg0KKyNkZWZpbmUgCUFUOTFDX1RERVNfVVJBVF9PVVRfREFUX1JFQURfREFUUFJPQyAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEyKSAvLyAoVERFUykgT3V0cHV0IGRhdGEgcmVnaXN0ZXIgcmVhZCBkdXJpbmcgdGhlIGRhdGEgcHJvY2Vzc2luZy4NCisjZGVmaW5lIAlBVDkxQ19UREVTX1VSQVRfTU9ERVJFR19XUklURV9EQVRQUk9DICgodW5zaWduZWQgaW50KSAweDIgPDwgMTIpIC8vIChUREVTKSBNb2RlIHJlZ2lzdGVyIHdyaXR0ZW4gZHVyaW5nIHRoZSBkYXRhIHByb2Nlc3NpbmcuDQorI2RlZmluZSAJQVQ5MUNfVERFU19VUkFUX1dPX1JFR19SRUFEICAgICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTIpIC8vIChUREVTKSBXcml0ZS1vbmx5IHJlZ2lzdGVyIHJlYWQgYWNjZXNzLg0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgICBSRUdJU1RFUiBBRERSRVNTIERFRklOSVRJT04gRk9SIEFUOTFTQU03WDI1NiAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBTWVMgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBBSUMgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19BSUNfSVZSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYxMDAgKSAvKiAoQUlDKSBJUlEgVmVjdG9yIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BSUNfU01SICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYwMDAgKSAvKiAoQUlDKSBTb3VyY2UgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX0ZWUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMTA0ICkgLyogKEFJQykgRklRIFZlY3RvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX0RDUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMTM4ICkgLyogKEFJQykgRGVidWcgQ29udHJvbCBSZWdpc3RlciAoUHJvdGVjdCkgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19FT0lDUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjEzMCApIC8qIChBSUMpIEVuZCBvZiBJbnRlcnJ1cHQgQ29tbWFuZCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX1NWUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMDgwICkgLyogKEFJQykgU291cmNlIFZlY3RvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX0ZGU1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMTQ4ICkgLyogKEFJQykgRmFzdCBGb3JjaW5nIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX0lDQ1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMTI4ICkgLyogKEFJQykgSW50ZXJydXB0IENsZWFyIENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19JU1IgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjEwOCApIC8qIChBSUMpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19JTVIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjExMCApIC8qIChBSUMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BSUNfSVBSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYxMEMgKSAvKiAoQUlDKSBJbnRlcnJ1cHQgUGVuZGluZyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX0ZGRVIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMTQwICkgLyogKEFJQykgRmFzdCBGb3JjaW5nIEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX0lFQ1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMTIwICkgLyogKEFJQykgSW50ZXJydXB0IEVuYWJsZSBDb21tYW5kIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BSUNfSVNDUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYxMkMgKSAvKiAoQUlDKSBJbnRlcnJ1cHQgU2V0IENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19GRkRSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjE0NCApIC8qIChBSUMpIEZhc3QgRm9yY2luZyBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BSUNfQ0lTUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYxMTQgKSAvKiAoQUlDKSBDb3JlIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19JRENSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjEyNCApIC8qIChBSUMpIEludGVycnVwdCBEaXNhYmxlIENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19TUFUgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjEzNCApIC8qIChBSUMpIFNwdXJpb3VzIFZlY3RvciBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX0RCR1UgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19EQkdVX1RDUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYzMEMgKSAvKiAoUERDX0RCR1UpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfUk5QUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjMxMCApIC8qIChQRENfREJHVSkgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfVE5QUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjMxOCApIC8qIChQRENfREJHVSkgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19EQkdVX1RQUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYzMDggKSAvKiAoUERDX0RCR1UpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfUlBSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjMwMCApIC8qIChQRENfREJHVSkgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19EQkdVX1JDUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYzMDQgKSAvKiAoUERDX0RCR1UpIFJlY2VpdmUgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9STkNSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMzE0ICkgLyogKFBEQ19EQkdVKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9QVENSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMzIwICkgLyogKFBEQ19EQkdVKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9QVFNSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMzI0ICkgLyogKFBEQ19EQkdVKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19EQkdVX1ROQ1IgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYzMUMgKSAvKiAoUERDX0RCR1UpIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgREJHVSBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfRVhJRCAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjI0NCApIC8qIChEQkdVKSBDaGlwIElEIEV4dGVuc2lvbiBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9CUkdSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMjIwICkgLyogKERCR1UpIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfSURSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjIwQyApIC8qIChEQkdVKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9DU1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMjE0ICkgLyogKERCR1UpIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19EQkdVX0NJRFIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYyNDAgKSAvKiAoREJHVSkgQ2hpcCBJRCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9NUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMjA0ICkgLyogKERCR1UpIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfSU1SICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjIxMCApIC8qIChEQkdVKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9DUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMjAwICkgLyogKERCR1UpIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfRk5UUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjI0OCApIC8qIChEQkdVKSBGb3JjZSBOVFJTVCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9USFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGMjFDICkgLyogKERCR1UpIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfUkhSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjIxOCApIC8qIChEQkdVKSBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19EQkdVX0lFUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkYyMDggKSAvKiAoREJHVSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUElPQSBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfT0RSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjQxNCApIC8qIChQSU9BKSBPdXRwdXQgRGlzYWJsZSBSZWdpc3RlcnIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfU09EUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjQzMCApIC8qIChQSU9BKSBTZXQgT3V0cHV0IERhdGEgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfSVNSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjQ0QyApIC8qIChQSU9BKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX0FCU1IgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY0NzggKSAvKiAoUElPQSkgQUIgU2VsZWN0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9JRVIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNDQwICkgLyogKFBJT0EpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfUFBVRFIgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjQ2MCApIC8qIChQSU9BKSBQdWxsLXVwIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfSU1SICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjQ0OCApIC8qIChQSU9BKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9QRVIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNDAwICkgLyogKFBJT0EpIFBJTyBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfSUZEUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjQyNCApIC8qIChQSU9BKSBJbnB1dCBGaWx0ZXIgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9PV0RSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNEE0ICkgLyogKFBJT0EpIE91dHB1dCBXcml0ZSBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX01EU1IgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY0NTggKSAvKiAoUElPQSkgTXVsdGktZHJpdmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9JRFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNDQ0ICkgLyogKFBJT0EpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX09EU1IgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY0MzggKSAvKiAoUElPQSkgT3V0cHV0IERhdGEgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX1BQVVNSICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY0NjggKSAvKiAoUElPQSkgUHVsbC11cCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfT1dTUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjRBOCApIC8qIChQSU9BKSBPdXRwdXQgV3JpdGUgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX0JTUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY0NzQgKSAvKiAoUElPQSkgU2VsZWN0IEIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfT1dFUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjRBMCApIC8qIChQSU9BKSBPdXRwdXQgV3JpdGUgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX0lGRVIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY0MjAgKSAvKiAoUElPQSkgSW5wdXQgRmlsdGVyIEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9QRFNSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNDNDICkgLyogKFBJT0EpIFBpbiBEYXRhIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9QUFVFUiAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNDY0ICkgLyogKFBJT0EpIFB1bGwtdXAgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX09TUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY0MTggKSAvKiAoUElPQSkgT3V0cHV0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9BU1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNDcwICkgLyogKFBJT0EpIFNlbGVjdCBBIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX01ERFIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY0NTQgKSAvKiAoUElPQSkgTXVsdGktZHJpdmVyIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfQ09EUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjQzNCApIC8qIChQSU9BKSBDbGVhciBPdXRwdXQgRGF0YSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9NREVSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNDUwICkgLyogKFBJT0EpIE11bHRpLWRyaXZlciBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfUERSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjQwNCApIC8qIChQSU9BKSBQSU8gRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9JRlNSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNDI4ICkgLyogKFBJT0EpIElucHV0IEZpbHRlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfT0VSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjQxMCApIC8qIChQSU9BKSBPdXRwdXQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX1BTUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY0MDggKSAvKiAoUElPQSkgUElPIFN0YXR1cyBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUElPQiBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0JfT1dEUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjZBNCApIC8qIChQSU9CKSBPdXRwdXQgV3JpdGUgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9NREVSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNjUwICkgLyogKFBJT0IpIE11bHRpLWRyaXZlciBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0JfUFBVU1IgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjY2OCApIC8qIChQSU9CKSBQdWxsLXVwIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9JTVIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNjQ4ICkgLyogKFBJT0IpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX0FTUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY2NzAgKSAvKiAoUElPQikgU2VsZWN0IEEgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0JfUFBVRFIgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjY2MCApIC8qIChQSU9CKSBQdWxsLXVwIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0JfUFNSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjYwOCApIC8qIChQSU9CKSBQSU8gU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX0lFUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY2NDAgKSAvKiAoUElPQikgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9DT0RSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNjM0ICkgLyogKFBJT0IpIENsZWFyIE91dHB1dCBEYXRhIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX09XRVIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY2QTAgKSAvKiAoUElPQikgT3V0cHV0IFdyaXRlIEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9BQlNSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNjc4ICkgLyogKFBJT0IpIEFCIFNlbGVjdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0JfSUZEUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjYyNCApIC8qIChQSU9CKSBJbnB1dCBGaWx0ZXIgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9QRFNSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNjNDICkgLyogKFBJT0IpIFBpbiBEYXRhIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9JRFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNjQ0ICkgLyogKFBJT0IpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX09XU1IgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY2QTggKSAvKiAoUElPQikgT3V0cHV0IFdyaXRlIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9QRFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNjA0ICkgLyogKFBJT0IpIFBJTyBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX09EUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY2MTQgKSAvKiAoUElPQikgT3V0cHV0IERpc2FibGUgUmVnaXN0ZXJyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX0lGU1IgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY2MjggKSAvKiAoUElPQikgSW5wdXQgRmlsdGVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9QUFVFUiAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNjY0ICkgLyogKFBJT0IpIFB1bGwtdXAgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX1NPRFIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY2MzAgKSAvKiAoUElPQikgU2V0IE91dHB1dCBEYXRhIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX0lTUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY2NEMgKSAvKiAoUElPQikgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9PRFNSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNjM4ICkgLyogKFBJT0IpIE91dHB1dCBEYXRhIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9PU1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNjE4ICkgLyogKFBJT0IpIE91dHB1dCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0JfTURTUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjY1OCApIC8qIChQSU9CKSBNdWx0aS1kcml2ZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX0lGRVIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY2MjAgKSAvKiAoUElPQikgSW5wdXQgRmlsdGVyIEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9CU1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGNjc0ICkgLyogKFBJT0IpIFNlbGVjdCBCIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX01ERFIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY2NTQgKSAvKiAoUElPQikgTXVsdGktZHJpdmVyIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0JfT0VSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRjYxMCApIC8qIChQSU9CKSBPdXRwdXQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX1BFUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkY2MDAgKSAvKiAoUElPQikgUElPIEVuYWJsZSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0tHUiBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX0NLR1JfTU9SICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkMyMCApIC8qIChDS0dSKSBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NLR1JfUExMUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkMyQyApIC8qIChDS0dSKSBQTEwgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NLR1JfTUNGUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkMyNCApIC8qIChDS0dSKSBNYWluIENsb2NrICBGcmVxdWVuY3kgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBNQyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19JRFIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkM2NCApIC8qIChQTUMpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QTUNfTU9SICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZDMjAgKSAvKiAoUE1DKSBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19QTExSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkMyQyApIC8qIChQTUMpIFBMTCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDRVIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGQzEwICkgLyogKFBNQykgUGVyaXBoZXJhbCBDbG9jayBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19QQ0tSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkM0MCApIC8qIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX01DS1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGQzMwICkgLyogKFBNQykgTWFzdGVyIENsb2NrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QTUNfU0NEUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZDMDQgKSAvKiAoUE1DKSBTeXN0ZW0gQ2xvY2sgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDRFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGQzE0ICkgLyogKFBNQykgUGVyaXBoZXJhbCBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QTUNfU0NTUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZDMDggKSAvKiAoUE1DKSBTeXN0ZW0gQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QTUNfUENTUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZDMTggKSAvKiAoUE1DKSBQZXJpcGhlcmFsIENsb2NrIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX01DRlIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGQzI0ICkgLyogKFBNQykgTWFpbiBDbG9jayAgRnJlcXVlbmN5IFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QTUNfU0NFUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZDMDAgKSAvKiAoUE1DKSBTeXN0ZW0gQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QTUNfSU1SICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZDNkMgKSAvKiAoUE1DKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX0lFUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGQzYwICkgLyogKFBNQykgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1NSICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGQzY4ICkgLyogKFBNQykgU3RhdHVzIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBSU1RDIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfUlNUQ19SQ1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGRDAwICkgLyogKFJTVEMpIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1JTVENfUk1SICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkQwOCApIC8qIChSU1RDKSBSZXNldCBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19SU1RDX1JTUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZEMDQgKSAvKiAoUlNUQykgUmVzZXQgU3RhdHVzIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBSVFRDIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfUlRUQ19SVFNSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGRDJDICkgLyogKFJUVEMpIFJlYWwtdGltZSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1JUVENfUlRNUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkQyMCApIC8qIChSVFRDKSBSZWFsLXRpbWUgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUlRUQ19SVFZSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGRDI4ICkgLyogKFJUVEMpIFJlYWwtdGltZSBWYWx1ZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUlRUQ19SVEFSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGRDI0ICkgLyogKFJUVEMpIFJlYWwtdGltZSBBbGFybSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUElUQyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1BJVENfUElWUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkQzOCApIC8qIChQSVRDKSBQZXJpb2QgSW50ZXJ2YWwgVmFsdWUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJVENfUElTUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkQzNCApIC8qIChQSVRDKSBQZXJpb2QgSW50ZXJ2YWwgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSVRDX1BJSVIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZEM0MgKSAvKiAoUElUQykgUGVyaW9kIEludGVydmFsIEltYWdlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSVRDX1BJTVIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZEMzAgKSAvKiAoUElUQykgUGVyaW9kIEludGVydmFsIE1vZGUgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFdEVEMgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19XRFRDX1dEQ1IgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZENDAgKSAvKiAoV0RUQykgV2F0Y2hkb2cgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfV0RUQ19XRFNSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGRDQ4ICkgLyogKFdEVEMpIFdhdGNoZG9nIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfV0RUQ19XRE1SICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGRDQ0ICkgLyogKFdEVEMpIFdhdGNoZG9nIE1vZGUgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFZSRUcgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19WUkVHX01SICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZENjAgKSAvKiAoVlJFRykgVm9sdGFnZSBSZWd1bGF0b3IgTW9kZSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgTUMgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19NQ19BU1IgICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZGMDQgKSAvKiAoTUMpIE1DIEFib3J0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfUkNSICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkZGRjAwICkgLyogKE1DKSBNQyBSZW1hcCBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19NQ19GQ1IgICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZGNjQgKSAvKiAoTUMpIE1DIEZsYXNoIENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0FBU1IgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkYwOCApIC8qIChNQykgTUMgQWJvcnQgQWRkcmVzcyBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0ZTUiAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZGRkY2OCApIC8qIChNQykgTUMgRmxhc2ggU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19NQ19GTVIgICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRkZGNjAgKSAvKiAoTUMpIE1DIEZsYXNoIE1vZGUgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19TUEkxIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMV9QVENSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkU0MTIwICkgLyogKFBEQ19TUEkxKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMV9SUFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkU0MTAwICkgLyogKFBEQ19TUEkxKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTFfVE5DUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZFNDExQyApIC8qIChQRENfU1BJMSkgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkxX1RQUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTQxMDggKSAvKiAoUERDX1NQSTEpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTFfVE5QUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZFNDExOCApIC8qIChQRENfU1BJMSkgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkxX1RDUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTQxMEMgKSAvKiAoUERDX1NQSTEpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTFfUkNSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZFNDEwNCApIC8qIChQRENfU1BJMSkgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkxX1JOUFIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTQxMTAgKSAvKiAoUERDX1NQSTEpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkxX1JOQ1IgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTQxMTQgKSAvKiAoUERDX1NQSTEpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkxX1BUU1IgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTQxMjQgKSAvKiAoUERDX1NQSTEpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFNQSTEgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19TUEkxX0lNUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTQwMUMgKSAvKiAoU1BJMSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTFfSUVSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZFNDAxNCApIC8qIChTUEkxKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkxX01SICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTQwMDQgKSAvKiAoU1BJMSkgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMV9SRFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkU0MDA4ICkgLyogKFNQSTEpIFJlY2VpdmUgRGF0YSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMV9JRFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkU0MDE4ICkgLyogKFNQSTEpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkxX1NSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTQwMTAgKSAvKiAoU1BJMSkgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkxX1REUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTQwMEMgKSAvKiAoU1BJMSkgVHJhbnNtaXQgRGF0YSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMV9DUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkU0MDAwICkgLyogKFNQSTEpIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTFfQ1NSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZFNDAzMCApIC8qIChTUEkxKSBDaGlwIFNlbGVjdCBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX1NQSTAgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19TUEkwX1BUQ1IgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTAxMjAgKSAvKiAoUERDX1NQSTApIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkwX1RQUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTAxMDggKSAvKiAoUERDX1NQSTApIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTBfVENSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZFMDEwQyApIC8qIChQRENfU1BJMCkgVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMF9SQ1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkUwMTA0ICkgLyogKFBEQ19TUEkwKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTBfUFRTUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZFMDEyNCApIC8qIChQRENfU1BJMCkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMF9STlBSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkUwMTEwICkgLyogKFBEQ19TUEkwKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMF9SUFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkUwMTAwICkgLyogKFBEQ19TUEkwKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTBfVE5DUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZFMDExQyApIC8qIChQRENfU1BJMCkgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkwX1JOQ1IgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTAxMTQgKSAvKiAoUERDX1NQSTApIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkwX1ROUFIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTAxMTggKSAvKiAoUERDX1NQSTApIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgU1BJMCBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTBfSUVSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZFMDAxNCApIC8qIChTUEkwKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkwX1NSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTAwMTAgKSAvKiAoU1BJMCkgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkwX0lEUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTAwMTggKSAvKiAoU1BJMCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTBfQ1IgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZFMDAwMCApIC8qIChTUEkwKSBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkwX01SICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTAwMDQgKSAvKiAoU1BJMCkgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMF9JTVIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkUwMDFDICkgLyogKFNQSTApIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkwX1REUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRTAwMEMgKSAvKiAoU1BJMCkgVHJhbnNtaXQgRGF0YSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMF9SRFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkUwMDA4ICkgLyogKFNQSTApIFJlY2VpdmUgRGF0YSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMF9DU1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkUwMDMwICkgLyogKFNQSTApIENoaXAgU2VsZWN0IFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfVVMxIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1JOQ1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkM0MTE0ICkgLyogKFBEQ19VUzEpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfUFRDUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzQxMjAgKSAvKiAoUERDX1VTMSkgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMV9UQ1IgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDNDEwQyApIC8qIChQRENfVVMxKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfUFRTUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzQxMjQgKSAvKiAoUERDX1VTMSkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1ROUFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkM0MTE4ICkgLyogKFBEQ19VUzEpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1JDUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkM0MTA0ICkgLyogKFBEQ19VUzEpIFJlY2VpdmUgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1JOUFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkM0MTEwICkgLyogKFBEQ19VUzEpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfUlBSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzQxMDAgKSAvKiAoUERDX1VTMSkgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfVE5DUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzQxMUMgKSAvKiAoUERDX1VTMSkgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfVFBSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzQxMDggKSAvKiAoUERDX1VTMSkgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVVMxIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX0lGICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkM0MDRDICkgLyogKFVTMSkgSVJEQV9GSUxURVIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMV9ORVIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDNDA0NCApIC8qIChVUzEpIE5iIEVycm9ycyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1JUT1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkM0MDI0ICkgLyogKFVTMSkgUmVjZWl2ZXIgVGltZS1vdXQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMV9DU1IgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDNDAxNCApIC8qIChVUzEpIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfSURSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzQwMEMgKSAvKiAoVVMxKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX0lFUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkM0MDA4ICkgLyogKFVTMSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1RIUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkM0MDFDICkgLyogKFVTMSkgVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1RUR1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkM0MDI4ICkgLyogKFVTMSkgVHJhbnNtaXR0ZXIgVGltZS1ndWFyZCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1JIUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkM0MDE4ICkgLyogKFVTMSkgUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX0JSR1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkM0MDIwICkgLyogKFVTMSkgQmF1ZCBSYXRlIEdlbmVyYXRvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX0lNUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkM0MDEwICkgLyogKFVTMSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMV9GSURJICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDNDA0MCApIC8qIChVUzEpIEZJX0RJX1JhdGlvIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfQ1IgICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzQwMDAgKSAvKiAoVVMxKSBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfTVIgICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzQwMDQgKSAvKiAoVVMxKSBNb2RlIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfVVMwIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX1ROUFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkMwMTE4ICkgLyogKFBEQ19VUzApIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX1JOUFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkMwMTEwICkgLyogKFBEQ19VUzApIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzBfVENSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzAxMEMgKSAvKiAoUERDX1VTMCkgVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX1BUQ1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkMwMTIwICkgLyogKFBEQ19VUzApIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzBfUFRTUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzAxMjQgKSAvKiAoUERDX1VTMCkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX1ROQ1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkMwMTFDICkgLyogKFBEQ19VUzApIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX1RQUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkMwMTA4ICkgLyogKFBEQ19VUzApIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9SQ1IgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDMDEwNCApIC8qIChQRENfVVMwKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9SUFIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDMDEwMCApIC8qIChQRENfVVMwKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9STkNSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDMDExNCApIC8qIChQRENfVVMwKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVVMwIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX0JSR1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkMwMDIwICkgLyogKFVTMCkgQmF1ZCBSYXRlIEdlbmVyYXRvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX05FUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkMwMDQ0ICkgLyogKFVTMCkgTmIgRXJyb3JzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzBfQ1IgICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzAwMDAgKSAvKiAoVVMwKSBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzBfSU1SICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzAwMTAgKSAvKiAoVVMwKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX0ZJREkgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkMwMDQwICkgLyogKFVTMCkgRklfRElfUmF0aW8gUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9UVEdSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDMDAyOCApIC8qIChVUzApIFRyYW5zbWl0dGVyIFRpbWUtZ3VhcmQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9NUiAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDMDAwNCApIC8qIChVUzApIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9SVE9SICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDMDAyNCApIC8qIChVUzApIFJlY2VpdmVyIFRpbWUtb3V0IFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzBfQ1NSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzAwMTQgKSAvKiAoVVMwKSBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX1JIUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkMwMDE4ICkgLyogKFVTMCkgUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX0lEUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkMwMDBDICkgLyogKFVTMCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9USFIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDMDAxQyApIC8qIChVUzApIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9JRiAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDMDA0QyApIC8qIChVUzApIElSREFfRklMVEVSIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzBfSUVSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQzAwMDggKSAvKiAoVVMwKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfU1NDIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1ROQ1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ0MTFDICkgLyogKFBEQ19TU0MpIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1JQUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ0MTAwICkgLyogKFBEQ19TU0MpIFJlY2VpdmUgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1JOQ1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ0MTE0ICkgLyogKFBEQ19TU0MpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfVFBSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDQxMDggKSAvKiAoUERDX1NTQykgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1BUQ1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ0MTIwICkgLyogKFBEQ19TU0MpIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfVENSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDQxMEMgKSAvKiAoUERDX1NTQykgVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1JDUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ0MTA0ICkgLyogKFBEQ19TU0MpIFJlY2VpdmUgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1JOUFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ0MTEwICkgLyogKFBEQ19TU0MpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfVE5QUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDQxMTggKSAvKiAoUERDX1NTQykgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfUFRTUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDQxMjQgKSAvKiAoUERDX1NTQykgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgU1NDIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1JIUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ0MDIwICkgLyogKFNTQykgUmVjZWl2ZSBIb2xkaW5nIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfUlNIUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDQwMzAgKSAvKiAoU1NDKSBSZWNlaXZlIFN5bmMgSG9sZGluZyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1RGTVIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ0MDFDICkgLyogKFNTQykgVHJhbnNtaXQgRnJhbWUgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0lEUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ0MDQ4ICkgLyogKFNTQykgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19USFIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZENDAyNCApIC8qIChTU0MpIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19SQ01SICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZENDAxMCApIC8qIChTU0MpIFJlY2VpdmUgQ2xvY2sgTW9kZVJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfSUVSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDQwNDQgKSAvKiAoU1NDKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfVFNIUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDQwMzQgKSAvKiAoU1NDKSBUcmFuc21pdCBTeW5jIEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19TUiAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZENDA0MCApIC8qIChTU0MpIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0NNUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ0MDA0ICkgLyogKFNTQykgQ2xvY2sgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1RDTVIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ0MDE4ICkgLyogKFNTQykgVHJhbnNtaXQgQ2xvY2sgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0NSICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ0MDAwICkgLyogKFNTQykgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0lNUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ0MDRDICkgLyogKFNTQykgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19SRk1SICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZENDAxNCApIC8qIChTU0MpIFJlY2VpdmUgRnJhbWUgTW9kZSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVFdJIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX0lFUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkI4MDI0ICkgLyogKFRXSSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX0NSICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkI4MDAwICkgLyogKFRXSSkgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX1NSICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkI4MDIwICkgLyogKFRXSSkgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UV0lfSU1SICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQjgwMkMgKSAvKiAoVFdJKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX1RIUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkI4MDM0ICkgLyogKFRXSSkgVHJhbnNtaXQgSG9sZGluZyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX0lEUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkI4MDI4ICkgLyogKFRXSSkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9JQURSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZCODAwQyApIC8qIChUV0kpIEludGVybmFsIEFkZHJlc3MgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9NTVIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZCODAwNCApIC8qIChUV0kpIE1hc3RlciBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UV0lfQ1dHUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQjgwMTAgKSAvKiAoVFdJKSBDbG9jayBXYXZlZm9ybSBHZW5lcmF0b3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9SSFIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZCODAzMCApIC8qIChUV0kpIFJlY2VpdmUgSG9sZGluZyBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUFdNQ19DSDMgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NIM19DVVBEUiAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQ0MyNzAgKSAvKiAoUFdNQ19DSDMpIENoYW5uZWwgVXBkYXRlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NIM19SZXNlcnZlZCAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQ0MyNzQgKSAvKiAoUFdNQ19DSDMpIFJlc2VydmVkICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NIM19DUFJEUiAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQ0MyNjggKSAvKiAoUFdNQ19DSDMpIENoYW5uZWwgUGVyaW9kIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NIM19DRFRZUiAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQ0MyNjQgKSAvKiAoUFdNQ19DSDMpIENoYW5uZWwgRHV0eSBDeWNsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDNfQ0NOVFIgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMjZDICkgLyogKFBXTUNfQ0gzKSBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0gzX0NNUiAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzI2MCApIC8qIChQV01DX0NIMykgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQV01DX0NIMiBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0gyX1Jlc2VydmVkICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzI1NCApIC8qIChQV01DX0NIMikgUmVzZXJ2ZWQgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0gyX0NNUiAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzI0MCApIC8qIChQV01DX0NIMikgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NIMl9DQ05UUiAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQ0MyNEMgKSAvKiAoUFdNQ19DSDIpIENoYW5uZWwgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDJfQ1BSRFIgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMjQ4ICkgLyogKFBXTUNfQ0gyKSBDaGFubmVsIFBlcmlvZCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDJfQ1VQRFIgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMjUwICkgLyogKFBXTUNfQ0gyKSBDaGFubmVsIFVwZGF0ZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDJfQ0RUWVIgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMjQ0ICkgLyogKFBXTUNfQ0gyKSBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBXTUNfQ0gxIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDFfUmVzZXJ2ZWQgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMjM0ICkgLyogKFBXTUNfQ0gxKSBSZXNlcnZlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDFfQ1VQRFIgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMjMwICkgLyogKFBXTUNfQ0gxKSBDaGFubmVsIFVwZGF0ZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDFfQ1BSRFIgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMjI4ICkgLyogKFBXTUNfQ0gxKSBDaGFubmVsIFBlcmlvZCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDFfQ0NOVFIgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMjJDICkgLyogKFBXTUNfQ0gxKSBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0gxX0NEVFlSICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzIyNCApIC8qIChQV01DX0NIMSkgQ2hhbm5lbCBEdXR5IEN5Y2xlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NIMV9DTVIgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQ0MyMjAgKSAvKiAoUFdNQ19DSDEpIENoYW5uZWwgTW9kZSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUFdNQ19DSDAgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NIMF9SZXNlcnZlZCAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQ0MyMTQgKSAvKiAoUFdNQ19DSDApIFJlc2VydmVkICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NIMF9DUFJEUiAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQ0MyMDggKSAvKiAoUFdNQ19DSDApIENoYW5uZWwgUGVyaW9kIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NIMF9DRFRZUiAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQ0MyMDQgKSAvKiAoUFdNQ19DSDApIENoYW5uZWwgRHV0eSBDeWNsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDBfQ01SICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMjAwICkgLyogKFBXTUNfQ0gwKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0gwX0NVUERSICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzIxMCApIC8qIChQV01DX0NIMCkgQ2hhbm5lbCBVcGRhdGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0gwX0NDTlRSICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzIwQyApIC8qIChQV01DX0NIMCkgQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQV01DIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19JRFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMDE0ICkgLyogKFBXTUMpIFBXTUMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfRElTICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzAwOCApIC8qIChQV01DKSBQV01DIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfSUVSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzAxMCApIC8qIChQV01DKSBQV01DIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfVlIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzBGQyApIC8qIChQV01DKSBQV01DIFZlcnNpb24gUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfSVNSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzAxQyApIC8qIChQV01DKSBQV01DIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfU1IgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzAwQyApIC8qIChQV01DKSBQV01DIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19JTVIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkNDMDE4ICkgLyogKFBXTUMpIFBXTUMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfTVIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzAwMCApIC8qIChQV01DKSBQV01DIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfRU5BICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZDQzAwNCApIC8qIChQV01DKSBQV01DIEVuYWJsZSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVURQIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0lNUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkIwMDE4ICkgLyogKFVEUCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9GQUREUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZCMDAwOCApIC8qIChVRFApIEZ1bmN0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9OVU0gICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZCMDAwMCApIC8qIChVRFApIEZyYW1lIE51bWJlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0ZEUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkIwMDUwICkgLyogKFVEUCkgRW5kcG9pbnQgRklGTyBEYXRhIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VRFBfSVNSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQjAwMUMgKSAvKiAoVURQKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VRFBfQ1NSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQjAwMzAgKSAvKiAoVURQKSBFbmRwb2ludCBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9JRFIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZCMDAxNCApIC8qIChVRFApIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VRFBfSUNSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQjAwMjAgKSAvKiAoVURQKSBJbnRlcnJ1cHQgQ2xlYXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9SU1RFUCAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZCMDAyOCApIC8qIChVRFApIFJlc2V0IEVuZHBvaW50IFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VRFBfVFhWQyAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQjAwNzQgKSAvKiAoVURQKSBUcmFuc2NlaXZlciBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VRFBfR0xCU1RBVEUgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQjAwMDQgKSAvKiAoVURQKSBHbG9iYWwgU3RhdGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9JRVIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZCMDAxMCApIC8qIChVRFApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRDMCBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1RDMF9TUiAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDAyMCApIC8qIChUQzApIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMwX1JDICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMDFDICkgLyogKFRDMCkgUmVnaXN0ZXIgQyAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMwX1JCICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMDE4ICkgLyogKFRDMCkgUmVnaXN0ZXIgQiAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMwX0NDUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMDAwICkgLyogKFRDMCkgQ2hhbm5lbCBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UQzBfQ01SICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTAwMDQgKSAvKiAoVEMwKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXIgKENhcHR1cmUgTW9kZSAvIFdhdmVmb3JtIE1vZGUpICovDQotI2RlZmluZSBBVDkxQ19UQzBfSUVSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTAwMjQgKSAvKiAoVEMwKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UQzBfUkEgICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTAwMTQgKSAvKiAoVEMwKSBSZWdpc3RlciBBICovDQotI2RlZmluZSBBVDkxQ19UQzBfSURSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTAwMjggKSAvKiAoVEMwKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMwX0NWICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMDEwICkgLyogKFRDMCkgQ291bnRlciBWYWx1ZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMwX0lNUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMDJDICkgLyogKFRDMCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRDMSBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1RDMV9SQiAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDA1OCApIC8qIChUQzEpIFJlZ2lzdGVyIEIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMV9DQ1IgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDA0MCApIC8qIChUQzEpIENoYW5uZWwgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMxX0lFUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMDY0ICkgLyogKFRDMSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMxX0lEUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMDY4ICkgLyogKFRDMSkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMV9TUiAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDA2MCApIC8qIChUQzEpIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMxX0NNUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMDQ0ICkgLyogKFRDMSkgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyIChDYXB0dXJlIE1vZGUgLyBXYXZlZm9ybSBNb2RlKSAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMxX1JBICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMDU0ICkgLyogKFRDMSkgUmVnaXN0ZXIgQSAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMxX1JDICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMDVDICkgLyogKFRDMSkgUmVnaXN0ZXIgQyAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMxX0lNUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMDZDICkgLyogKFRDMSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMV9DViAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDA1MCApIC8qIChUQzEpIENvdW50ZXIgVmFsdWUgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRDMiBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1RDMl9DTVIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDA4NCApIC8qIChUQzIpIENoYW5uZWwgTW9kZSBSZWdpc3RlciAoQ2FwdHVyZSBNb2RlIC8gV2F2ZWZvcm0gTW9kZSkgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMl9DQ1IgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDA4MCApIC8qIChUQzIpIENoYW5uZWwgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMyX0NWICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMDkwICkgLyogKFRDMikgQ291bnRlciBWYWx1ZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMyX1JBICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMDk0ICkgLyogKFRDMikgUmVnaXN0ZXIgQSAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMyX1JCICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMDk4ICkgLyogKFRDMikgUmVnaXN0ZXIgQiAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMyX0lEUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkEwMEE4ICkgLyogKFRDMikgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMl9JTVIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDBBQyApIC8qIChUQzIpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UQzJfUkMgICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTAwOUMgKSAvKiAoVEMyKSBSZWdpc3RlciBDICovDQotI2RlZmluZSBBVDkxQ19UQzJfSUVSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTAwQTQgKSAvKiAoVEMyKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UQzJfU1IgICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTAwQTAgKSAvKiAoVEMyKSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRDQiBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1RDQl9CTVIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDBDNCApIC8qIChUQ0IpIFRDIEJsb2NrIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDQl9CQ1IgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBMDBDMCApIC8qIChUQ0IpIFRDIEJsb2NrIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENBTl9NQjAgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIwX01ETCAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyMTQgKSAvKiAoQ0FOX01CMCkgTWFpbEJveCBEYXRhIExvdyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMF9NQU0gICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjA0ICkgLyogKENBTl9NQjApIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIwX01DUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyMUMgKSAvKiAoQ0FOX01CMCkgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIwX01JRCAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyMDggKSAvKiAoQ0FOX01CMCkgTWFpbEJveCBJRCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMF9NU1IgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjEwICkgLyogKENBTl9NQjApIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIwX01GSUQgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyMEMgKSAvKiAoQ0FOX01CMCkgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjBfTURIICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDIxOCApIC8qIChDQU5fTUIwKSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMF9NTVIgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjAwICkgLyogKENBTl9NQjApIE1haWxCb3ggTW9kZSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CMSBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjFfTURMICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDIzNCApIC8qIChDQU5fTUIxKSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIxX01JRCAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyMjggKSAvKiAoQ0FOX01CMSkgTWFpbEJveCBJRCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMV9NTVIgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjIwICkgLyogKENBTl9NQjEpIE1haWxCb3ggTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMV9NU1IgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjMwICkgLyogKENBTl9NQjEpIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIxX01BTSAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyMjQgKSAvKiAoQ0FOX01CMSkgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjFfTURIICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDIzOCApIC8qIChDQU5fTUIxKSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMV9NQ1IgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjNDICkgLyogKENBTl9NQjEpIE1haWxCb3ggQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMV9NRklEICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjJDICkgLyogKENBTl9NQjEpIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU5fTUIyIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NQ1IgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjVDICkgLyogKENBTl9NQjIpIE1haWxCb3ggQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NREggICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjU4ICkgLyogKENBTl9NQjIpIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIyX01JRCAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyNDggKSAvKiAoQ0FOX01CMikgTWFpbEJveCBJRCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NREwgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjU0ICkgLyogKENBTl9NQjIpIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjJfTU1SICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDI0MCApIC8qIChDQU5fTUIyKSBNYWlsQm94IE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjJfTUFNICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDI0NCApIC8qIChDQU5fTUIyKSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NRklEICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjRDICkgLyogKENBTl9NQjIpIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIyX01TUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyNTAgKSAvKiAoQ0FOX01CMikgTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENBTl9NQjMgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIzX01GSUQgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyNkMgKSAvKiAoQ0FOX01CMykgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjNfTUFNICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDI2NCApIC8qIChDQU5fTUIzKSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CM19NSUQgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjY4ICkgLyogKENBTl9NQjMpIE1haWxCb3ggSUQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjNfTUNSICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDI3QyApIC8qIChDQU5fTUIzKSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjNfTU1SICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDI2MCApIC8qIChDQU5fTUIzKSBNYWlsQm94IE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjNfTVNSICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDI3MCApIC8qIChDQU5fTUIzKSBNYWlsQm94IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CM19NREwgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjc0ICkgLyogKENBTl9NQjMpIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjNfTURIICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDI3OCApIC8qIChDQU5fTUIzKSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CNCBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjRfTUlEICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDI4OCApIC8qIChDQU5fTUI0KSBNYWlsQm94IElEIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI0X01NUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyODAgKSAvKiAoQ0FOX01CNCkgTWFpbEJveCBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI0X01ESCAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyOTggKSAvKiAoQ0FOX01CNCkgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjRfTUZJRCAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDI4QyApIC8qIChDQU5fTUI0KSBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CNF9NU1IgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjkwICkgLyogKENBTl9NQjQpIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI0X01DUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyOUMgKSAvKiAoQ0FOX01CNCkgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI0X01ETCAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyOTQgKSAvKiAoQ0FOX01CNCkgTWFpbEJveCBEYXRhIExvdyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CNF9NQU0gICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMjg0ICkgLyogKENBTl9NQjQpIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU5fTUI1IHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CNV9NU1IgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMkIwICkgLyogKENBTl9NQjUpIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI1X01DUiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyQkMgKSAvKiAoQ0FOX01CNSkgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI1X01GSUQgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyQUMgKSAvKiAoQ0FOX01CNSkgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjVfTURIICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDJCOCApIC8qIChDQU5fTUI1KSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CNV9NSUQgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMkE4ICkgLyogKENBTl9NQjUpIE1haWxCb3ggSUQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjVfTU1SICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDJBMCApIC8qIChDQU5fTUI1KSBNYWlsQm94IE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjVfTURMICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDJCNCApIC8qIChDQU5fTUI1KSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI1X01BTSAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyQTQgKSAvKiAoQ0FOX01CNSkgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENBTl9NQjYgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI2X01GSUQgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyQ0MgKSAvKiAoQ0FOX01CNikgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjZfTUlEICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDJDOCApIC8qIChDQU5fTUI2KSBNYWlsQm94IElEIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI2X01BTSAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyQzQgKSAvKiAoQ0FOX01CNikgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjZfTVNSICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDJEMCApIC8qIChDQU5fTUI2KSBNYWlsQm94IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CNl9NREwgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMkQ0ICkgLyogKENBTl9NQjYpIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjZfTUNSICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDJEQyApIC8qIChDQU5fTUI2KSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjZfTURIICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDJEOCApIC8qIChDQU5fTUI2KSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CNl9NTVIgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMkMwICkgLyogKENBTl9NQjYpIE1haWxCb3ggTW9kZSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CNyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjdfTUNSICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDJGQyApIC8qIChDQU5fTUI3KSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjdfTURIICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDJGOCApIC8qIChDQU5fTUI3KSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CN19NRklEICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMkVDICkgLyogKENBTl9NQjcpIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI3X01ETCAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAyRjQgKSAvKiAoQ0FOX01CNykgTWFpbEJveCBEYXRhIExvdyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CN19NSUQgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMkU4ICkgLyogKENBTl9NQjcpIE1haWxCb3ggSUQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjdfTU1SICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDJFMCApIC8qIChDQU5fTUI3KSBNYWlsQm94IE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjdfTUFNICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDJFNCApIC8qIChDQU5fTUI3KSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CN19NU1IgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMkYwICkgLyogKENBTl9NQjcpIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU4gcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19DQU5fVENSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAwMjQgKSAvKiAoQ0FOKSBUcmFuc2ZlciBDb21tYW5kIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fSU1SICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAwMEMgKSAvKiAoQ0FOKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX0lFUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMDA0ICkgLyogKENBTikgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX0VDUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMDIwICkgLyogKENBTikgRXJyb3IgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1RJTUVTVFAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMDFDICkgLyogKENBTikgVGltZSBTdGFtcCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01SICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMDAwICkgLyogKENBTikgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX0lEUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQwMDA4ICkgLyogKENBTikgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9BQ1IgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDAyOCApIC8qIChDQU4pIEFib3J0IENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9USU0gICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDAxOCApIC8qIChDQU4pIFRpbWVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fU1IgICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAwMTAgKSAvKiAoQ0FOKSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9CUiAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEMDAxNCApIC8qIChDQU4pIEJhdWRyYXRlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fVlIgICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDAwRkMgKSAvKiAoQ0FOKSBWZXJzaW9uIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBFTUFDIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19JU1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDI0ICkgLyogKEVNQUMpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfU0E0SCAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzBCNCApIC8qIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDQgVG9wLCBMYXN0IDIgYnl0ZXMgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfU0ExTCAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzA5OCApIC8qIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDEgQm90dG9tLCBGaXJzdCA0IGJ5dGVzICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0VMRSAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGREMwNzggKSAvKiAoRU1BQykgRXhjZXNzaXZlIExlbmd0aCBFcnJvcnMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfTENPTCAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzA1QyApIC8qIChFTUFDKSBMYXRlIENvbGxpc2lvbiBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19STEUgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDg4ICkgLyogKEVNQUMpIFJlY2VpdmUgTGVuZ3RoIEZpZWxkIE1pc21hdGNoIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1dPTCAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGREMwQzQgKSAvKiAoRU1BQykgV2FrZSBPbiBMQU4gUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfRFRGICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzA1OCApIC8qIChFTUFDKSBEZWZlcnJlZCBUcmFuc21pc3Npb24gRnJhbWUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfVFVORCAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzA2NCApIC8qIChFTUFDKSBUcmFuc21pdCBVbmRlcnJ1biBFcnJvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19OQ1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDAwICkgLyogKEVNQUMpIE5ldHdvcmsgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19TQTRMICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMEIwICkgLyogKEVNQUMpIFNwZWNpZmljIEFkZHJlc3MgNCBCb3R0b20sIEZpcnN0IDQgYnl0ZXMgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfUlNSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzAyMCApIC8qIChFTUFDKSBSZWNlaXZlIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19TQTNMICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMEE4ICkgLyogKEVNQUMpIFNwZWNpZmljIEFkZHJlc3MgMyBCb3R0b20sIEZpcnN0IDQgYnl0ZXMgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfVFNSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzAxNCApIC8qIChFTUFDKSBUcmFuc21pdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfSURSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzAyQyApIC8qIChFTUFDKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19SU0UgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDc0ICkgLyogKEVNQUMpIFJlY2VpdmUgU3ltYm9sIEVycm9ycyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19FQ09MICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDYwICkgLyogKEVNQUMpIEV4Y2Vzc2l2ZSBDb2xsaXNpb24gUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfVElEICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzBCOCApIC8qIChFTUFDKSBUeXBlIElEIENoZWNraW5nIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0hSQiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGREMwOTAgKSAvKiAoRU1BQykgSGFzaCBBZGRyZXNzIEJvdHRvbVszMTowXSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19UQlFQICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDFDICkgLyogKEVNQUMpIFRyYW5zbWl0IEJ1ZmZlciBRdWV1ZSBQb2ludGVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1VTUklPICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGREMwQzAgKSAvKiAoRU1BQykgVVNFUiBJbnB1dC9PdXRwdXQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfUFRSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzAzOCApIC8qIChFTUFDKSBQYXVzZSBUaW1lIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1NBMkggICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGREMwQTQgKSAvKiAoRU1BQykgU3BlY2lmaWMgQWRkcmVzcyAyIFRvcCwgTGFzdCAyIGJ5dGVzICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1JPViAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGREMwNzAgKSAvKiAoRU1BQykgUmVjZWl2ZSBPdmVycnVuIEVycm9ycyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19BTEUgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDU0ICkgLyogKEVNQUMpIEFsaWdubWVudCBFcnJvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19SSkEgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDdDICkgLyogKEVNQUMpIFJlY2VpdmUgSmFiYmVycyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19SQlFQICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDE4ICkgLyogKEVNQUMpIFJlY2VpdmUgQnVmZmVyIFF1ZXVlIFBvaW50ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfVFBGICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzA4QyApIC8qIChFTUFDKSBUcmFuc21pdHRlZCBQYXVzZSBGcmFtZXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfTkNGR1IgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzAwNCApIC8qIChFTUFDKSBOZXR3b3JrIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfSFJUICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzA5NCApIC8qIChFTUFDKSBIYXNoIEFkZHJlc3MgVG9wWzYzOjMyXSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19VU0YgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDgwICkgLyogKEVNQUMpIFVuZGVyc2l6ZSBGcmFtZXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfRkNTRSAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzA1MCApIC8qIChFTUFDKSBGcmFtZSBDaGVjayBTZXF1ZW5jZSBFcnJvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19UUFEgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMEJDICkgLyogKEVNQUMpIFRyYW5zbWl0IFBhdXNlIFF1YW50dW0gUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfTUFOICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzAzNCApIC8qIChFTUFDKSBQSFkgTWFpbnRlbmFuY2UgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfRlRPICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzA0MCApIC8qIChFTUFDKSBGcmFtZXMgVHJhbnNtaXR0ZWQgT0sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfUkVWICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzBGQyApIC8qIChFTUFDKSBSZXZpc2lvbiBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19JTVIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDMwICkgLyogKEVNQUMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1NDRiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGREMwNDQgKSAvKiAoRU1BQykgU2luZ2xlIENvbGxpc2lvbiBGcmFtZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19QRlIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDNDICkgLyogKEVNQUMpIFBhdXNlIEZyYW1lcyByZWNlaXZlZCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19NQ0YgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDQ4ICkgLyogKEVNQUMpIE11bHRpcGxlIENvbGxpc2lvbiBGcmFtZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19OU1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDA4ICkgLyogKEVNQUMpIE5ldHdvcmsgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1NBMkwgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGREMwQTAgKSAvKiAoRU1BQykgU3BlY2lmaWMgQWRkcmVzcyAyIEJvdHRvbSwgRmlyc3QgNCBieXRlcyAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19GUk8gICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDRDICkgLyogKEVNQUMpIEZyYW1lcyBSZWNlaXZlZCBPSyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19JRVIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkRDMDI4ICkgLyogKEVNQUMpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfU0ExSCAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzA5QyApIC8qIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDEgVG9wLCBMYXN0IDIgYnl0ZXMgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfQ1NFICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzA2OCApIC8qIChFTUFDKSBDYXJyaWVyIFNlbnNlIEVycm9yIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1NBM0ggICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGREMwQUMgKSAvKiAoRU1BQykgU3BlY2lmaWMgQWRkcmVzcyAzIFRvcCwgTGFzdCAyIGJ5dGVzICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1JSRSAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGREMwNkMgKSAvKiAoRU1BQykgUmVjZWl2ZSBSZXNzb3VyY2UgRXJyb3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfU1RFICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEQzA4NCApIC8qIChFTUFDKSBTUUUgVGVzdCBFcnJvciBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX0FEQyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19QVFNSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEODEyNCApIC8qIChQRENfQURDKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRENfUFRDUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDgxMjAgKSAvKiAoUERDX0FEQykgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19UTlBSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEODExOCApIC8qIChQRENfQURDKSBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19UTkNSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEODExQyApIC8qIChQRENfQURDKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19STlBSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEODExMCApIC8qIChQRENfQURDKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1JOQ1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ4MTE0ICkgLyogKFBEQ19BREMpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRENfUlBSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDgxMDAgKSAvKiAoUERDX0FEQykgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRENfVENSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDgxMEMgKSAvKiAoUERDX0FEQykgVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1RQUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ4MTA4ICkgLyogKFBEQ19BREMpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19SQ1IgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEODEwNCApIC8qIChQRENfQURDKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIEFEQyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DRFIyICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEODAzOCApIC8qIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NEUjMgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ4MDNDICkgLyogKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAzICovDQotI2RlZmluZSBBVDkxQ19BRENfQ0RSMCAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDgwMzAgKSAvKiAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDAgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DRFI1ICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEODA0NCApIC8qIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNSAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NIRFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ4MDE0ICkgLyogKEFEQykgQURDIENoYW5uZWwgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1NSICAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ4MDFDICkgLyogKEFEQykgQURDIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NEUjQgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ4MDQwICkgLyogKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA0ICovDQotI2RlZmluZSBBVDkxQ19BRENfQ0RSMSAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDgwMzQgKSAvKiAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDEgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19MQ0RSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEODAyMCApIC8qIChBREMpIEFEQyBMYXN0IENvbnZlcnRlZCBEYXRhIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRENfSURSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDgwMjggKSAvKiAoQURDKSBBREMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DUiAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEODAwMCApIC8qIChBREMpIEFEQyBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRENfQ0RSNyAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDgwNEMgKSAvKiAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDcgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DRFI2ICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEODA0OCApIC8qIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNiAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0lFUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ4MDI0ICkgLyogKEFEQykgQURDIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DSEVSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZEODAxMCApIC8qIChBREMpIEFEQyBDaGFubmVsIEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NIU1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ4MDE4ICkgLyogKEFEQykgQURDIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRENfTVIgICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGRDgwMDQgKSAvKiAoQURDKSBBREMgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0lNUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkQ4MDJDICkgLyogKEFEQykgQURDIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfQUVTIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX1RQUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE0MTA4ICkgLyogKFBEQ19BRVMpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19QVENSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBNDEyMCApIC8qIChQRENfQUVTKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX1JOUFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE0MTEwICkgLyogKFBEQ19BRVMpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRVNfVE5DUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTQxMUMgKSAvKiAoUERDX0FFUykgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRVNfVENSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTQxMEMgKSAvKiAoUERDX0FFUykgVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX1JDUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE0MTA0ICkgLyogKFBEQ19BRVMpIFJlY2VpdmUgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX1JOQ1IgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE0MTE0ICkgLyogKFBEQ19BRVMpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRVNfVE5QUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTQxMTggKSAvKiAoUERDX0FFUykgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRVNfUlBSICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTQxMDAgKSAvKiAoUERDX0FFUykgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRVNfUFRTUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTQxMjQgKSAvKiAoUERDX0FFUykgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQUVTIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX0lWeFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE0MDYwICkgLyogKEFFUykgSW5pdGlhbGl6YXRpb24gVmVjdG9yIHggUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19NUiAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBNDAwNCApIC8qIChBRVMpIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19WUiAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBNDBGQyApIC8qIChBRVMpIEFFUyBWZXJzaW9uIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRVNfT0RBVEF4UiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTQwNTAgKSAvKiAoQUVTKSBPdXRwdXQgRGF0YSB4IFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRVNfSURBVEF4UiAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTQwNDAgKSAvKiAoQUVTKSBJbnB1dCBEYXRhIHggUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19DUiAgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBNDAwMCApIC8qIChBRVMpIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19JRFIgICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBNDAxNCApIC8qIChBRVMpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRVNfSU1SICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTQwMTggKSAvKiAoQUVTKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX0lFUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE0MDEwICkgLyogKEFFUykgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX0tFWVd4UiAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE0MDIwICkgLyogKEFFUykgS2V5IFdvcmQgeCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX0lTUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE0MDFDICkgLyogKEFFUykgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX1RERVMgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19UREVTX1JOQ1IgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTgxMTQgKSAvKiAoUERDX1RERVMpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UREVTX1RDUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTgxMEMgKSAvKiAoUERDX1RERVMpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfUkNSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBODEwNCApIC8qIChQRENfVERFUykgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UREVTX1ROUFIgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTgxMTggKSAvKiAoUERDX1RERVMpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19STlBSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE4MTEwICkgLyogKFBEQ19UREVTKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19SUFIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE4MTAwICkgLyogKFBEQ19UREVTKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfVE5DUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBODExQyApIC8qIChQRENfVERFUykgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UREVTX1RQUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTgxMDggKSAvKiAoUERDX1RERVMpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfUFRTUiAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBODEyNCApIC8qIChQRENfVERFUykgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19QVENSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE4MTIwICkgLyogKFBEQ19UREVTKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVERFUyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfS0VZMld4UiAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBODAyOCApIC8qIChUREVTKSBLZXkgMiBXb3JkIHggUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfS0VZM1d4UiAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBODAzMCApIC8qIChUREVTKSBLZXkgMyBXb3JkIHggUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfSURSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBODAxNCApIC8qIChUREVTKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19WUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE4MEZDICkgLyogKFRERVMpIFRERVMgVmVyc2lvbiBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19JVnhSICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE4MDYwICkgLyogKFRERVMpIEluaXRpYWxpemF0aW9uIFZlY3RvciB4IFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UREVTX09EQVRBeFIgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTgwNTAgKSAvKiAoVERFUykgT3V0cHV0IERhdGEgeCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19JTVIgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE4MDE4ICkgLyogKFRERVMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UREVTX01SICAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTgwMDQgKSAvKiAoVERFUykgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19DUiAgICAgICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE4MDAwICkgLyogKFRERVMpIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfSUVSICAgICAgICAgICAgICggKCBBVDkxX1JFRyAqICkgMHhGRkZBODAxMCApIC8qIChUREVTKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UREVTX0lTUiAgICAgICAgICAgICAoICggQVQ5MV9SRUcgKiApIDB4RkZGQTgwMUMgKSAvKiAoVERFUykgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19JREFUQXhSICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE4MDQwICkgLyogKFRERVMpIElucHV0IERhdGEgeCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19LRVkxV3hSICAgICAgICAgKCAoIEFUOTFfUkVHICogKSAweEZGRkE4MDIwICkgLyogKFRERVMpIEtleSAxIFdvcmQgeCBSZWdpc3RlciAqLw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgICBSRUdJU1RFUiBBRERSRVNTIERFRklOSVRJT04gRk9SIEFUOTFTQU03WDI1Ng0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBTWVMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQUlDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0FJQ19JVlIgICAoKEFUOTFfUkVHICopIAkweEZGRkZGMTAwKSAvLyAoQUlDKSBJUlEgVmVjdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfU01SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjAwMCkgLy8gKEFJQykgU291cmNlIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19GVlIgICAoKEFUOTFfUkVHICopIAkweEZGRkZGMTA0KSAvLyAoQUlDKSBGSVEgVmVjdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfRENSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjEzOCkgLy8gKEFJQykgRGVidWcgQ29udHJvbCBSZWdpc3RlciAoUHJvdGVjdCkNCisjZGVmaW5lIEFUOTFDX0FJQ19FT0lDUiAoKEFUOTFfUkVHICopIAkweEZGRkZGMTMwKSAvLyAoQUlDKSBFbmQgb2YgSW50ZXJydXB0IENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19TVlIgICAoKEFUOTFfUkVHICopIAkweEZGRkZGMDgwKSAvLyAoQUlDKSBTb3VyY2UgVmVjdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfRkZTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjE0OCkgLy8gKEFJQykgRmFzdCBGb3JjaW5nIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0lDQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYxMjgpIC8vIChBSUMpIEludGVycnVwdCBDbGVhciBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfSVNSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjEwOCkgLy8gKEFJQykgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0lNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYxMTApIC8vIChBSUMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfSVBSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjEwQykgLy8gKEFJQykgSW50ZXJydXB0IFBlbmRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19GRkVSICAoKEFUOTFfUkVHICopIAkweEZGRkZGMTQwKSAvLyAoQUlDKSBGYXN0IEZvcmNpbmcgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfSUVDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjEyMCkgLy8gKEFJQykgSW50ZXJydXB0IEVuYWJsZSBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfSVNDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjEyQykgLy8gKEFJQykgSW50ZXJydXB0IFNldCBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfRkZEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjE0NCkgLy8gKEFJQykgRmFzdCBGb3JjaW5nIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19DSVNSICAoKEFUOTFfUkVHICopIAkweEZGRkZGMTE0KSAvLyAoQUlDKSBDb3JlIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19JRENSICAoKEFUOTFfUkVHICopIAkweEZGRkZGMTI0KSAvLyAoQUlDKSBJbnRlcnJ1cHQgRGlzYWJsZSBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfU1BVICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjEzNCkgLy8gKEFJQykgU3B1cmlvdXMgVmVjdG9yIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfREJHVSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19EQkdVX1RDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjMwQykgLy8gKFBEQ19EQkdVKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1JOUFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjMxMCkgLy8gKFBEQ19EQkdVKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9UTlBSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYzMTgpIC8vIChQRENfREJHVSkgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1RQUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjMwOCkgLy8gKFBEQ19EQkdVKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1JQUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjMwMCkgLy8gKFBEQ19EQkdVKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfUkNSICAoKEFUOTFfUkVHICopIAkweEZGRkZGMzA0KSAvLyAoUERDX0RCR1UpIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9STkNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYzMTQpIC8vIChQRENfREJHVSkgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfUFRDUiAoKEFUOTFfUkVHICopIAkweEZGRkZGMzIwKSAvLyAoUERDX0RCR1UpIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1BUU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjMyNCkgLy8gKFBEQ19EQkdVKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1ROQ1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjMxQykgLy8gKFBEQ19EQkdVKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIERCR1UgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfREJHVV9FWElEICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYyNDQpIC8vIChEQkdVKSBDaGlwIElEIEV4dGVuc2lvbiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9CUkdSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYyMjApIC8vIChEQkdVKSBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX0lEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjIwQykgLy8gKERCR1UpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX0NTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjIxNCkgLy8gKERCR1UpIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX0NJRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjI0MCkgLy8gKERCR1UpIENoaXAgSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkZGMjA0KSAvLyAoREJHVSkgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9JTVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYyMTApIC8vIChEQkdVKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9DUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYyMDApIC8vIChEQkdVKSBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX0ZOVFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjI0OCkgLy8gKERCR1UpIEZvcmNlIE5UUlNUIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1RIUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjIxQykgLy8gKERCR1UpIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfUkhSICAoKEFUOTFfUkVHICopIAkweEZGRkZGMjE4KSAvLyAoREJHVSkgUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9JRVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkYyMDgpIC8vIChEQkdVKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQSU9BIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1BJT0FfT0RSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNDE0KSAvLyAoUElPQSkgT3V0cHV0IERpc2FibGUgUmVnaXN0ZXJyDQorI2RlZmluZSBBVDkxQ19QSU9BX1NPRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQzMCkgLy8gKFBJT0EpIFNldCBPdXRwdXQgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9JU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0NEMpIC8vIChQSU9BKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0FCU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQ3OCkgLy8gKFBJT0EpIEFCIFNlbGVjdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfSUVSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNDQwKSAvLyAoUElPQSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9QUFVEUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNDYwKSAvLyAoUElPQSkgUHVsbC11cCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0lNUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQ0OCkgLy8gKFBJT0EpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX1BFUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQwMCkgLy8gKFBJT0EpIFBJTyBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfSUZEUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNDI0KSAvLyAoUElPQSkgSW5wdXQgRmlsdGVyIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfT1dEUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNEE0KSAvLyAoUElPQSkgT3V0cHV0IFdyaXRlIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfTURTUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNDU4KSAvLyAoUElPQSkgTXVsdGktZHJpdmVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9JRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0NDQpIC8vIChQSU9BKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9PRFNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0MzgpIC8vIChQSU9BKSBPdXRwdXQgRGF0YSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfUFBVU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQ2OCkgLy8gKFBJT0EpIFB1bGwtdXAgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX09XU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjRBOCkgLy8gKFBJT0EpIE91dHB1dCBXcml0ZSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfQlNSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNDc0KSAvLyAoUElPQSkgU2VsZWN0IEIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfT1dFUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNEEwKSAvLyAoUElPQSkgT3V0cHV0IFdyaXRlIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9JRkVSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0MjApIC8vIChQSU9BKSBJbnB1dCBGaWx0ZXIgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX1BEU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQzQykgLy8gKFBJT0EpIFBpbiBEYXRhIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9QUFVFUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNDY0KSAvLyAoUElPQSkgUHVsbC11cCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfT1NSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNDE4KSAvLyAoUElPQSkgT3V0cHV0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9BU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0NzApIC8vIChQSU9BKSBTZWxlY3QgQSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9NRERSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0NTQpIC8vIChQSU9BKSBNdWx0aS1kcml2ZXIgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9DT0RSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0MzQpIC8vIChQSU9BKSBDbGVhciBPdXRwdXQgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9NREVSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0NTApIC8vIChQSU9BKSBNdWx0aS1kcml2ZXIgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX1BEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQwNCkgLy8gKFBJT0EpIFBJTyBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0lGU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjQyOCkgLy8gKFBJT0EpIElucHV0IEZpbHRlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfT0VSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNDEwKSAvLyAoUElPQSkgT3V0cHV0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9QU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY0MDgpIC8vIChQSU9BKSBQSU8gU3RhdHVzIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQSU9CIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1BJT0JfT1dEUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNkE0KSAvLyAoUElPQikgT3V0cHV0IFdyaXRlIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfTURFUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNjUwKSAvLyAoUElPQikgTXVsdGktZHJpdmVyIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9QUFVTUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNjY4KSAvLyAoUElPQikgUHVsbC11cCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfSU1SICAoKEFUOTFfUkVHICopIAkweEZGRkZGNjQ4KSAvLyAoUElPQikgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfQVNSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNjcwKSAvLyAoUElPQikgU2VsZWN0IEEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfUFBVRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjY2MCkgLy8gKFBJT0IpIFB1bGwtdXAgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9QU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2MDgpIC8vIChQSU9CKSBQSU8gU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX0lFUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjY0MCkgLy8gKFBJT0IpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfQ09EUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNjM0KSAvLyAoUElPQikgQ2xlYXIgT3V0cHV0IERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfT1dFUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNkEwKSAvLyAoUElPQikgT3V0cHV0IFdyaXRlIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9BQlNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2NzgpIC8vIChQSU9CKSBBQiBTZWxlY3QgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX0lGRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjYyNCkgLy8gKFBJT0IpIElucHV0IEZpbHRlciBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX1BEU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjYzQykgLy8gKFBJT0IpIFBpbiBEYXRhIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9JRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2NDQpIC8vIChQSU9CKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9PV1NSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2QTgpIC8vIChQSU9CKSBPdXRwdXQgV3JpdGUgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX1BEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjYwNCkgLy8gKFBJT0IpIFBJTyBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX09EUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjYxNCkgLy8gKFBJT0IpIE91dHB1dCBEaXNhYmxlIFJlZ2lzdGVycg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9JRlNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2MjgpIC8vIChQSU9CKSBJbnB1dCBGaWx0ZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX1BQVUVSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2NjQpIC8vIChQSU9CKSBQdWxsLXVwIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9TT0RSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2MzApIC8vIChQSU9CKSBTZXQgT3V0cHV0IERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfSVNSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNjRDKSAvLyAoUElPQikgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9PRFNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2MzgpIC8vIChQSU9CKSBPdXRwdXQgRGF0YSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfT1NSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNjE4KSAvLyAoUElPQikgT3V0cHV0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9NRFNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2NTgpIC8vIChQSU9CKSBNdWx0aS1kcml2ZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX0lGRVIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRjYyMCkgLy8gKFBJT0IpIElucHV0IEZpbHRlciBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfQlNSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNjc0KSAvLyAoUElPQikgU2VsZWN0IEIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfTUREUiAoKEFUOTFfUkVHICopIAkweEZGRkZGNjU0KSAvLyAoUElPQikgTXVsdGktZHJpdmVyIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfT0VSICAoKEFUOTFfUkVHICopIAkweEZGRkZGNjEwKSAvLyAoUElPQikgT3V0cHV0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9QRVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkY2MDApIC8vIChQSU9CKSBQSU8gRW5hYmxlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDS0dSIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0NLR1JfTU9SICAoKEFUOTFfUkVHICopIAkweEZGRkZGQzIwKSAvLyAoQ0tHUikgTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DS0dSX1BMTFIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkMyQykgLy8gKENLR1IpIFBMTCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9NQ0ZSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDMjQpIC8vIChDS0dSKSBNYWluIENsb2NrICBGcmVxdWVuY3kgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBNQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19QTUNfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkM2NCkgLy8gKFBNQykgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19NT1IgICAoKEFUOTFfUkVHICopIAkweEZGRkZGQzIwKSAvLyAoUE1DKSBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19QTExSICAoKEFUOTFfUkVHICopIAkweEZGRkZGQzJDKSAvLyAoUE1DKSBQTEwgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0VSICAoKEFUOTFfUkVHICopIAkweEZGRkZGQzEwKSAvLyAoUE1DKSBQZXJpcGhlcmFsIENsb2NrIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDS1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDNDApIC8vIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX01DS1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDMzApIC8vIChQTUMpIE1hc3RlciBDbG9jayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX1NDRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDMDQpIC8vIChQTUMpIFN5c3RlbSBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfUENEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkMxNCkgLy8gKFBNQykgUGVyaXBoZXJhbCBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfU0NTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkMwOCkgLy8gKFBNQykgU3lzdGVtIENsb2NrIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDMTgpIC8vIChQTUMpIFBlcmlwaGVyYWwgQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfTUNGUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkMyNCkgLy8gKFBNQykgTWFpbiBDbG9jayAgRnJlcXVlbmN5IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfU0NFUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkMwMCkgLy8gKFBNQykgU3lzdGVtIENsb2NrIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX0lNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDNkMpIC8vIChQTUMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfSUVSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkM2MCkgLy8gKFBNQykgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX1NSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZDNjgpIC8vIChQTUMpIFN0YXR1cyBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUlNUQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19SU1RDX1JDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkQwMCkgLy8gKFJTVEMpIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1JTVENfUk1SICAoKEFUOTFfUkVHICopIAkweEZGRkZGRDA4KSAvLyAoUlNUQykgUmVzZXQgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19SU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZEMDQpIC8vIChSU1RDKSBSZXNldCBTdGF0dXMgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFJUVEMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19SVFNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZEMkMpIC8vIChSVFRDKSBSZWFsLXRpbWUgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19SVFRDX1JUTVIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkQyMCkgLy8gKFJUVEMpIFJlYWwtdGltZSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19SVFRDX1JUVlIgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkQyOCkgLy8gKFJUVEMpIFJlYWwtdGltZSBWYWx1ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19SVEFSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZEMjQpIC8vIChSVFRDKSBSZWFsLXRpbWUgQWxhcm0gUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBJVEMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUElUQ19QSVZSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZEMzgpIC8vIChQSVRDKSBQZXJpb2QgSW50ZXJ2YWwgVmFsdWUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJVENfUElTUiAoKEFUOTFfUkVHICopIAkweEZGRkZGRDM0KSAvLyAoUElUQykgUGVyaW9kIEludGVydmFsIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElUQ19QSUlSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZEM0MpIC8vIChQSVRDKSBQZXJpb2QgSW50ZXJ2YWwgSW1hZ2UgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJVENfUElNUiAoKEFUOTFfUkVHICopIAkweEZGRkZGRDMwKSAvLyAoUElUQykgUGVyaW9kIEludGVydmFsIE1vZGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFdEVEMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRENSICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZENDApIC8vIChXRFRDKSBXYXRjaGRvZyBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19XRFRDX1dEU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkQ0OCkgLy8gKFdEVEMpIFdhdGNoZG9nIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRE1SICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZENDQpIC8vIChXRFRDKSBXYXRjaGRvZyBNb2RlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBWUkVHIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1ZSRUdfTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkZGRDYwKSAvLyAoVlJFRykgVm9sdGFnZSBSZWd1bGF0b3IgTW9kZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgTUMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfTUNfQVNSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZGMDQpIC8vIChNQykgTUMgQWJvcnQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19NQ19SQ1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkYwMCkgLy8gKE1DKSBNQyBSZW1hcCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19NQ19GQ1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkY2NCkgLy8gKE1DKSBNQyBGbGFzaCBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19NQ19BQVNSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkYwOCkgLy8gKE1DKSBNQyBBYm9ydCBBZGRyZXNzIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfTUNfRlNSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRkZGNjgpIC8vIChNQykgTUMgRmxhc2ggU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19NQ19GTVIgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZGRkY2MCkgLy8gKE1DKSBNQyBGbGFzaCBNb2RlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfU1BJMSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19TUEkxX1BUQ1IgKChBVDkxX1JFRyAqKSAJMHhGRkZFNDEyMCkgLy8gKFBEQ19TUEkxKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9SUFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQxMDApIC8vIChQRENfU1BJMSkgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX1ROQ1IgKChBVDkxX1JFRyAqKSAJMHhGRkZFNDExQykgLy8gKFBEQ19TUEkxKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfVFBSICAoKEFUOTFfUkVHICopIAkweEZGRkU0MTA4KSAvLyAoUERDX1NQSTEpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfVE5QUiAoKEFUOTFfUkVHICopIAkweEZGRkU0MTE4KSAvLyAoUERDX1NQSTEpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9UQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQxMEMpIC8vIChQRENfU1BJMSkgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9SQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQxMDQpIC8vIChQRENfU1BJMSkgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX1JOUFIgKChBVDkxX1JFRyAqKSAJMHhGRkZFNDExMCkgLy8gKFBEQ19TUEkxKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9STkNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQxMTQpIC8vIChQRENfU1BJMSkgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfUFRTUiAoKEFUOTFfUkVHICopIAkweEZGRkU0MTI0KSAvLyAoUERDX1NQSTEpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFNQSTEgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9JTVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQwMUMpIC8vIChTUEkxKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9JRVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQwMTQpIC8vIChTUEkxKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX01SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZFNDAwNCkgLy8gKFNQSTEpIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfUkRSICAoKEFUOTFfUkVHICopIAkweEZGRkU0MDA4KSAvLyAoU1BJMSkgUmVjZWl2ZSBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX0lEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFNDAxOCkgLy8gKFNQSTEpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX1NSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZFNDAxMCkgLy8gKFNQSTEpIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9URFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTQwMEMpIC8vIChTUEkxKSBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX0NSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZFNDAwMCkgLy8gKFNQSTEpIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfQ1NSICAoKEFUOTFfUkVHICopIAkweEZGRkU0MDMwKSAvLyAoU1BJMSkgQ2hpcCBTZWxlY3QgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19TUEkwIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1NQSTBfUFRDUiAoKEFUOTFfUkVHICopIAkweEZGRkUwMTIwKSAvLyAoUERDX1NQSTApIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1RQUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDEwOCkgLy8gKFBEQ19TUEkwKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1RDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDEwQykgLy8gKFBEQ19TUEkwKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1JDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDEwNCkgLy8gKFBEQ19TUEkwKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfUFRTUiAoKEFUOTFfUkVHICopIAkweEZGRkUwMTI0KSAvLyAoUERDX1NQSTApIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfUk5QUiAoKEFUOTFfUkVHICopIAkweEZGRkUwMTEwKSAvLyAoUERDX1NQSTApIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1JQUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDEwMCkgLy8gKFBEQ19TUEkwKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfVE5DUiAoKEFUOTFfUkVHICopIAkweEZGRkUwMTFDKSAvLyAoUERDX1NQSTApIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9STkNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAxMTQpIC8vIChQRENfU1BJMCkgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfVE5QUiAoKEFUOTFfUkVHICopIAkweEZGRkUwMTE4KSAvLyAoUERDX1NQSTApIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgU1BJMCBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19TUEkwX0lFUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDAxNCkgLy8gKFNQSTApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfU1IgICAoKEFUOTFfUkVHICopIAkweEZGRkUwMDEwKSAvLyAoU1BJMCkgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX0lEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDAxOCkgLy8gKFNQSTApIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX0NSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDAwMCkgLy8gKFNQSTApIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkUwMDA0KSAvLyAoU1BJMCkgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9JTVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAwMUMpIC8vIChTUEkwKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9URFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAwMEMpIC8vIChTUEkwKSBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1JEUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZFMDAwOCkgLy8gKFNQSTApIFJlY2VpdmUgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9DU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRTAwMzApIC8vIChTUEkwKSBDaGlwIFNlbGVjdCBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX1VTMSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19VUzFfUk5DUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDExNCkgLy8gKFBEQ19VUzEpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfUFRDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDEyMCkgLy8gKFBEQ19VUzEpIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfVENSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDEwQykgLy8gKFBEQ19VUzEpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9QVFNSICAoKEFUOTFfUkVHICopIAkweEZGRkM0MTI0KSAvLyAoUERDX1VTMSkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1ROUFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQxMTgpIC8vIChQRENfVVMxKSBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9SQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkM0MTA0KSAvLyAoUERDX1VTMSkgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfUk5QUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDExMCkgLy8gKFBEQ19VUzEpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfUlBSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDEwMCkgLy8gKFBEQ19VUzEpIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1ROQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQxMUMpIC8vIChQRENfVVMxKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9UUFIgICAoKEFUOTFfUkVHICopIAkweEZGRkM0MTA4KSAvLyAoUERDX1VTMSkgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVVMxIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1VTMV9JRiAgICAoKEFUOTFfUkVHICopIAkweEZGRkM0MDRDKSAvLyAoVVMxKSBJUkRBX0ZJTFRFUiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX05FUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQwNDQpIC8vIChVUzEpIE5iIEVycm9ycyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1JUT1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQwMjQpIC8vIChVUzEpIFJlY2VpdmVyIFRpbWUtb3V0IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfQ1NSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDAxNCkgLy8gKFVTMSkgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9JRFIgICAoKEFUOTFfUkVHICopIAkweEZGRkM0MDBDKSAvLyAoVVMxKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX0lFUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQwMDgpIC8vIChVUzEpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9USFIgICAoKEFUOTFfUkVHICopIAkweEZGRkM0MDFDKSAvLyAoVVMxKSBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfVFRHUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDAyOCkgLy8gKFVTMSkgVHJhbnNtaXR0ZXIgVGltZS1ndWFyZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1JIUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQwMTgpIC8vIChVUzEpIFJlY2VpdmVyIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9CUkdSICAoKEFUOTFfUkVHICopIAkweEZGRkM0MDIwKSAvLyAoVVMxKSBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfSU1SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDNDAxMCkgLy8gKFVTMSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9GSURJICAoKEFUOTFfUkVHICopIAkweEZGRkM0MDQwKSAvLyAoVVMxKSBGSV9ESV9SYXRpbyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX0NSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzQwMDApIC8vIChVUzEpIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9NUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkM0MDA0KSAvLyAoVVMxKSBNb2RlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfVVMwIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1VTMF9UTlBSICAoKEFUOTFfUkVHICopIAkweEZGRkMwMTE4KSAvLyAoUERDX1VTMCkgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfUk5QUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDExMCkgLy8gKFBEQ19VUzApIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfVENSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDEwQykgLy8gKFBEQ19VUzApIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9QVENSICAoKEFUOTFfUkVHICopIAkweEZGRkMwMTIwKSAvLyAoUERDX1VTMCkgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9QVFNSICAoKEFUOTFfUkVHICopIAkweEZGRkMwMTI0KSAvLyAoUERDX1VTMCkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1ROQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAxMUMpIC8vIChQRENfVVMwKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9UUFIgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMTA4KSAvLyAoUERDX1VTMCkgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1JDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAxMDQpIC8vIChQRENfVVMwKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9SUFIgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMTAwKSAvLyAoUERDX1VTMCkgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfUk5DUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDExNCkgLy8gKFBEQ19VUzApIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBVUzAgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVVMwX0JSR1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAwMjApIC8vIChVUzApIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9ORVIgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDQ0KSAvLyAoVVMwKSBOYiBFcnJvcnMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9DUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDAwKSAvLyAoVVMwKSBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfSU1SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDAxMCkgLy8gKFVTMCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9GSURJICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDQwKSAvLyAoVVMwKSBGSV9ESV9SYXRpbyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1RUR1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAwMjgpIC8vIChVUzApIFRyYW5zbWl0dGVyIFRpbWUtZ3VhcmQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9NUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDA0KSAvLyAoVVMwKSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfUlRPUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDMDAyNCkgLy8gKFVTMCkgUmVjZWl2ZXIgVGltZS1vdXQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9DU1IgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDE0KSAvLyAoVVMwKSBDaGFubmVsIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1JIUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAwMTgpIC8vIChVUzApIFJlY2VpdmVyIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9JRFIgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDBDKSAvLyAoVVMwKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1RIUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAwMUMpIC8vIChVUzApIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9JRiAgICAoKEFUOTFfUkVHICopIAkweEZGRkMwMDRDKSAvLyAoVVMwKSBJUkRBX0ZJTFRFUiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX0lFUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQzAwMDgpIC8vIChVUzApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19TU0MgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfU1NDX1ROQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQxMUMpIC8vIChQRENfU1NDKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19SUFIgICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MTAwKSAvLyAoUERDX1NTQykgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUk5DUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDExNCkgLy8gKFBEQ19TU0MpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfVFBSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDEwOCkgLy8gKFBEQ19TU0MpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19QVENSICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MTIwKSAvLyAoUERDX1NTQykgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19UQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MTBDKSAvLyAoUERDX1NTQykgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQxMDQpIC8vIChQRENfU1NDKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19STlBSICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MTEwKSAvLyAoUERDX1NTQykgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19UTlBSICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MTE4KSAvLyAoUERDX1NTQykgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUFRTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDEyNCkgLy8gKFBEQ19TU0MpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFNTQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19TU0NfUkhSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDAyMCkgLy8gKFNTQykgUmVjZWl2ZSBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUlNIUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDAzMCkgLy8gKFNTQykgUmVjZWl2ZSBTeW5jIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19URk1SICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MDFDKSAvLyAoU1NDKSBUcmFuc21pdCBGcmFtZSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDA0OCkgLy8gKFNTQykgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19USFIgICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MDI0KSAvLyAoU1NDKSBUcmFuc21pdCBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUkNNUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDAxMCkgLy8gKFNTQykgUmVjZWl2ZSBDbG9jayBNb2RlUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19JRVIgICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MDQ0KSAvLyAoU1NDKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfVFNIUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDAzNCkgLy8gKFNTQykgVHJhbnNtaXQgU3luYyBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfU1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDA0MCkgLy8gKFNTQykgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfQ01SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDAwNCkgLy8gKFNTQykgQ2xvY2sgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RDTVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDQwMTgpIC8vIChTU0MpIFRyYW5zbWl0IENsb2NrIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19DUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MDAwKSAvLyAoU1NDKSBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfSU1SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZENDA0QykgLy8gKFNTQykgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19SRk1SICAoKEFUOTFfUkVHICopIAkweEZGRkQ0MDE0KSAvLyAoU1NDKSBSZWNlaXZlIEZyYW1lIE1vZGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRXSSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19UV0lfSUVSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZCODAyNCkgLy8gKFRXSSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX0NSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjgwMDApIC8vIChUV0kpIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9TUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkI4MDIwKSAvLyAoVFdJKSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9JTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkI4MDJDKSAvLyAoVFdJKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX1RIUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjgwMzQpIC8vIChUV0kpIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9JRFIgICAoKEFUOTFfUkVHICopIAkweEZGRkI4MDI4KSAvLyAoVFdJKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX0lBRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjgwMEMpIC8vIChUV0kpIEludGVybmFsIEFkZHJlc3MgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9NTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkI4MDA0KSAvLyAoVFdJKSBNYXN0ZXIgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX0NXR1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjgwMTApIC8vIChUV0kpIENsb2NrIFdhdmVmb3JtIEdlbmVyYXRvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX1JIUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjgwMzApIC8vIChUV0kpIFJlY2VpdmUgSG9sZGluZyBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUFdNQ19DSDMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDNfQ1VQRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzI3MCkgLy8gKFBXTUNfQ0gzKSBDaGFubmVsIFVwZGF0ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDNfUmVzZXJ2ZWQgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzI3NCkgLy8gKFBXTUNfQ0gzKSBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDNfQ1BSRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzI2OCkgLy8gKFBXTUNfQ0gzKSBDaGFubmVsIFBlcmlvZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDNfQ0RUWVIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzI2NCkgLy8gKFBXTUNfQ0gzKSBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gzX0NDTlRSICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyNkMpIC8vIChQV01DX0NIMykgQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIM19DTVIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzI2MCkgLy8gKFBXTUNfQ0gzKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBXTUNfQ0gyIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gyX1Jlc2VydmVkICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyNTQpIC8vIChQV01DX0NIMikgUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gyX0NNUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjQwKSAvLyAoUFdNQ19DSDIpIENoYW5uZWwgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDJfQ0NOVFIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzI0QykgLy8gKFBXTUNfQ0gyKSBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gyX0NQUkRSICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyNDgpIC8vIChQV01DX0NIMikgQ2hhbm5lbCBQZXJpb2QgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gyX0NVUERSICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyNTApIC8vIChQV01DX0NIMikgQ2hhbm5lbCBVcGRhdGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gyX0NEVFlSICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MyNDQpIC8vIChQV01DX0NIMikgQ2hhbm5lbCBEdXR5IEN5Y2xlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQV01DX0NIMSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMV9SZXNlcnZlZCAoKEFUOTFfUkVHICopIAkweEZGRkNDMjM0KSAvLyAoUFdNQ19DSDEpIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMV9DVVBEUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjMwKSAvLyAoUFdNQ19DSDEpIENoYW5uZWwgVXBkYXRlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMV9DUFJEUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjI4KSAvLyAoUFdNQ19DSDEpIENoYW5uZWwgUGVyaW9kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMV9DQ05UUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjJDKSAvLyAoUFdNQ19DSDEpIENoYW5uZWwgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDFfQ0RUWVIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzIyNCkgLy8gKFBXTUNfQ0gxKSBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gxX0NNUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjIwKSAvLyAoUFdNQ19DSDEpIENoYW5uZWwgTW9kZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUFdNQ19DSDAgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDBfUmVzZXJ2ZWQgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzIxNCkgLy8gKFBXTUNfQ0gwKSBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDBfQ1BSRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzIwOCkgLy8gKFBXTUNfQ0gwKSBDaGFubmVsIFBlcmlvZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDBfQ0RUWVIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzIwNCkgLy8gKFBXTUNfQ0gwKSBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gwX0NNUiAoKEFUOTFfUkVHICopIAkweEZGRkNDMjAwKSAvLyAoUFdNQ19DSDApIENoYW5uZWwgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDBfQ1VQRFIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzIxMCkgLy8gKFBXTUNfQ0gwKSBDaGFubmVsIFVwZGF0ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDBfQ0NOVFIgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzIwQykgLy8gKFBXTUNfQ0gwKSBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBXTUMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19JRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MwMTQpIC8vIChQV01DKSBQV01DIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0RJUyAgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzAwOCkgLy8gKFBXTUMpIFBXTUMgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19JRVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MwMTApIC8vIChQV01DKSBQV01DIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfVlIgICAoKEFUOTFfUkVHICopIAkweEZGRkNDMEZDKSAvLyAoUFdNQykgUFdNQyBWZXJzaW9uIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0lTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzAxQykgLy8gKFBXTUMpIFBXTUMgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19TUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MwMEMpIC8vIChQV01DKSBQV01DIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19JTVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MwMTgpIC8vIChQV01DKSBQV01DIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX01SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZDQzAwMCkgLy8gKFBXTUMpIFBXTUMgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19FTkEgICgoQVQ5MV9SRUcgKikgCTB4RkZGQ0MwMDQpIC8vIChQV01DKSBQV01DIEVuYWJsZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVURQIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1VEUF9JTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkIwMDE4KSAvLyAoVURQKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZBRERSICgoQVQ5MV9SRUcgKikgCTB4RkZGQjAwMDgpIC8vIChVRFApIEZ1bmN0aW9uIEFkZHJlc3MgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9OVU0gICAoKEFUOTFfUkVHICopIAkweEZGRkIwMDAwKSAvLyAoVURQKSBGcmFtZSBOdW1iZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9GRFIgICAoKEFUOTFfUkVHICopIAkweEZGRkIwMDUwKSAvLyAoVURQKSBFbmRwb2ludCBGSUZPIERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9JU1IgICAoKEFUOTFfUkVHICopIAkweEZGRkIwMDFDKSAvLyAoVURQKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfQ1NSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZCMDAzMCkgLy8gKFVEUCkgRW5kcG9pbnQgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZCMDAxNCkgLy8gKFVEUCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9JQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkIwMDIwKSAvLyAoVURQKSBJbnRlcnJ1cHQgQ2xlYXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9SU1RFUCAoKEFUOTFfUkVHICopIAkweEZGRkIwMDI4KSAvLyAoVURQKSBSZXNldCBFbmRwb2ludCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVURQX1RYVkMgICgoQVQ5MV9SRUcgKikgCTB4RkZGQjAwNzQpIC8vIChVRFApIFRyYW5zY2VpdmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9HTEJTVEFURSAoKEFUOTFfUkVHICopIAkweEZGRkIwMDA0KSAvLyAoVURQKSBHbG9iYWwgU3RhdGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9JRVIgICAoKEFUOTFfUkVHICopIAkweEZGRkIwMDEwKSAvLyAoVURQKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBUQzAgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVEMwX1NSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwMjApIC8vIChUQzApIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMwX1JDICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwMUMpIC8vIChUQzApIFJlZ2lzdGVyIEMNCisjZGVmaW5lIEFUOTFDX1RDMF9SQiAgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDE4KSAvLyAoVEMwKSBSZWdpc3RlciBCDQorI2RlZmluZSBBVDkxQ19UQzBfQ0NSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDAwMCkgLy8gKFRDMCkgQ2hhbm5lbCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzBfQ01SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDAwNCkgLy8gKFRDMCkgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyIChDYXB0dXJlIE1vZGUgLyBXYXZlZm9ybSBNb2RlKQ0KKyNkZWZpbmUgQVQ5MUNfVEMwX0lFUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwMjQpIC8vIChUQzApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMF9SQSAgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDE0KSAvLyAoVEMwKSBSZWdpc3RlciBBDQorI2RlZmluZSBBVDkxQ19UQzBfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDAyOCkgLy8gKFRDMCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMF9DViAgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDEwKSAvLyAoVEMwKSBDb3VudGVyIFZhbHVlDQorI2RlZmluZSBBVDkxQ19UQzBfSU1SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDAyQykgLy8gKFRDMCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRDMSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19UQzFfUkIgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDA1OCkgLy8gKFRDMSkgUmVnaXN0ZXIgQg0KKyNkZWZpbmUgQVQ5MUNfVEMxX0NDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwNDApIC8vIChUQzEpIENoYW5uZWwgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMxX0lFUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwNjQpIC8vIChUQzEpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMV9JRFIgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDY4KSAvLyAoVEMxKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMxX1NSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwNjApIC8vIChUQzEpIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMxX0NNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwNDQpIC8vIChUQzEpIENoYW5uZWwgTW9kZSBSZWdpc3RlciAoQ2FwdHVyZSBNb2RlIC8gV2F2ZWZvcm0gTW9kZSkNCisjZGVmaW5lIEFUOTFDX1RDMV9SQSAgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDU0KSAvLyAoVEMxKSBSZWdpc3RlciBBDQorI2RlZmluZSBBVDkxQ19UQzFfUkMgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDA1QykgLy8gKFRDMSkgUmVnaXN0ZXIgQw0KKyNkZWZpbmUgQVQ5MUNfVEMxX0lNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwNkMpIC8vIChUQzEpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzFfQ1YgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDA1MCkgLy8gKFRDMSkgQ291bnRlciBWYWx1ZQ0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVEMyIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1RDMl9DTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDg0KSAvLyAoVEMyKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXIgKENhcHR1cmUgTW9kZSAvIFdhdmVmb3JtIE1vZGUpDQorI2RlZmluZSBBVDkxQ19UQzJfQ0NSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDA4MCkgLy8gKFRDMikgQ2hhbm5lbCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzJfQ1YgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDA5MCkgLy8gKFRDMikgQ291bnRlciBWYWx1ZQ0KKyNkZWZpbmUgQVQ5MUNfVEMyX1JBICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwOTQpIC8vIChUQzIpIFJlZ2lzdGVyIEENCisjZGVmaW5lIEFUOTFDX1RDMl9SQiAgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMDk4KSAvLyAoVEMyKSBSZWdpc3RlciBCDQorI2RlZmluZSBBVDkxQ19UQzJfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDBBOCkgLy8gKFRDMikgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMl9JTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMEFDKSAvLyAoVEMyKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMyX1JDICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwOUMpIC8vIChUQzIpIFJlZ2lzdGVyIEMNCisjZGVmaW5lIEFUOTFDX1RDMl9JRVIgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMEE0KSAvLyAoVEMyKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzJfU1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBMDBBMCkgLy8gKFRDMikgU3RhdHVzIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBUQ0IgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVENCX0JNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTAwQzQpIC8vIChUQ0IpIFRDIEJsb2NrIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDQl9CQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkEwMEMwKSAvLyAoVENCKSBUQyBCbG9jayBDb250cm9sIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU5fTUIwIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0NBTl9NQjBfTURMICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyMTQpIC8vIChDQU5fTUIwKSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIwX01BTSAoKEFUOTFfUkVHICopIAkweEZGRkQwMjA0KSAvLyAoQ0FOX01CMCkgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjBfTUNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyMUMpIC8vIChDQU5fTUIwKSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjBfTUlEICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyMDgpIC8vIChDQU5fTUIwKSBNYWlsQm94IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIwX01TUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMjEwKSAvLyAoQ0FOX01CMCkgTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjBfTUZJRCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjBDKSAvLyAoQ0FOX01CMCkgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjBfTURIICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyMTgpIC8vIChDQU5fTUIwKSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMF9NTVIgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDIwMCkgLy8gKENBTl9NQjApIE1haWxCb3ggTW9kZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CMSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxX01ETCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjM0KSAvLyAoQ0FOX01CMSkgTWFpbEJveCBEYXRhIExvdyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMV9NSUQgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDIyOCkgLy8gKENBTl9NQjEpIE1haWxCb3ggSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjFfTU1SICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyMjApIC8vIChDQU5fTUIxKSBNYWlsQm94IE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjFfTVNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyMzApIC8vIChDQU5fTUIxKSBNYWlsQm94IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMV9NQU0gKChBVDkxX1JFRyAqKSAJMHhGRkZEMDIyNCkgLy8gKENBTl9NQjEpIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxX01ESCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjM4KSAvLyAoQ0FOX01CMSkgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjFfTUNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyM0MpIC8vIChDQU5fTUIxKSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjFfTUZJRCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjJDKSAvLyAoQ0FOX01CMSkgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENBTl9NQjIgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NQ1IgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI1QykgLy8gKENBTl9NQjIpIE1haWxCb3ggQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NREggKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI1OCkgLy8gKENBTl9NQjIpIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIyX01JRCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjQ4KSAvLyAoQ0FOX01CMikgTWFpbEJveCBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NREwgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI1NCkgLy8gKENBTl9NQjIpIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjJfTU1SICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyNDApIC8vIChDQU5fTUIyKSBNYWlsQm94IE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjJfTUFNICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyNDQpIC8vIChDQU5fTUIyKSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NRklEICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyNEMpIC8vIChDQU5fTUIyKSBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI1MCkgLy8gKENBTl9NQjIpIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU5fTUIzIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0NBTl9NQjNfTUZJRCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjZDKSAvLyAoQ0FOX01CMykgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjNfTUFNICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyNjQpIC8vIChDQU5fTUIzKSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CM19NSUQgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI2OCkgLy8gKENBTl9NQjMpIE1haWxCb3ggSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjNfTUNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyN0MpIC8vIChDQU5fTUIzKSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjNfTU1SICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyNjApIC8vIChDQU5fTUIzKSBNYWlsQm94IE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjNfTVNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyNzApIC8vIChDQU5fTUIzKSBNYWlsQm94IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CM19NREwgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI3NCkgLy8gKENBTl9NQjMpIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjNfTURIICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyNzgpIC8vIChDQU5fTUIzKSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CNCBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19DQU5fTUI0X01JRCAoKEFUOTFfUkVHICopIAkweEZGRkQwMjg4KSAvLyAoQ0FOX01CNCkgTWFpbEJveCBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNF9NTVIgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI4MCkgLy8gKENBTl9NQjQpIE1haWxCb3ggTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNF9NREggKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI5OCkgLy8gKENBTl9NQjQpIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI0X01GSUQgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDI4QykgLy8gKENBTl9NQjQpIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI0X01TUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMjkwKSAvLyAoQ0FOX01CNCkgTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjRfTUNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyOUMpIC8vIChDQU5fTUI0KSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjRfTURMICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyOTQpIC8vIChDQU5fTUI0KSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI0X01BTSAoKEFUOTFfUkVHICopIAkweEZGRkQwMjg0KSAvLyAoQ0FOX01CNCkgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENBTl9NQjUgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNV9NU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJCMCkgLy8gKENBTl9NQjUpIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI1X01DUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMkJDKSAvLyAoQ0FOX01CNSkgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI1X01GSUQgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJBQykgLy8gKENBTl9NQjUpIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI1X01ESCAoKEFUOTFfUkVHICopIAkweEZGRkQwMkI4KSAvLyAoQ0FOX01CNSkgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjVfTUlEICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyQTgpIC8vIChDQU5fTUI1KSBNYWlsQm94IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI1X01NUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMkEwKSAvLyAoQ0FOX01CNSkgTWFpbEJveCBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI1X01ETCAoKEFUOTFfUkVHICopIAkweEZGRkQwMkI0KSAvLyAoQ0FOX01CNSkgTWFpbEJveCBEYXRhIExvdyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNV9NQU0gKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJBNCkgLy8gKENBTl9NQjUpIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU5fTUI2IHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0NBTl9NQjZfTUZJRCAoKEFUOTFfUkVHICopIAkweEZGRkQwMkNDKSAvLyAoQ0FOX01CNikgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjZfTUlEICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyQzgpIC8vIChDQU5fTUI2KSBNYWlsQm94IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI2X01BTSAoKEFUOTFfUkVHICopIAkweEZGRkQwMkM0KSAvLyAoQ0FOX01CNikgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjZfTVNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyRDApIC8vIChDQU5fTUI2KSBNYWlsQm94IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNl9NREwgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJENCkgLy8gKENBTl9NQjYpIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjZfTUNSICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyREMpIC8vIChDQU5fTUI2KSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjZfTURIICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyRDgpIC8vIChDQU5fTUI2KSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNl9NTVIgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJDMCkgLy8gKENBTl9NQjYpIE1haWxCb3ggTW9kZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CNyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19DQU5fTUI3X01DUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMkZDKSAvLyAoQ0FOX01CNykgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI3X01ESCAoKEFUOTFfUkVHICopIAkweEZGRkQwMkY4KSAvLyAoQ0FOX01CNykgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjdfTUZJRCAoKEFUOTFfUkVHICopIAkweEZGRkQwMkVDKSAvLyAoQ0FOX01CNykgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjdfTURMICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAyRjQpIC8vIChDQU5fTUI3KSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI3X01JRCAoKEFUOTFfUkVHICopIAkweEZGRkQwMkU4KSAvLyAoQ0FOX01CNykgTWFpbEJveCBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CN19NTVIgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJFMCkgLy8gKENBTl9NQjcpIE1haWxCb3ggTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CN19NQU0gKChBVDkxX1JFRyAqKSAJMHhGRkZEMDJFNCkgLy8gKENBTl9NQjcpIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI3X01TUiAoKEFUOTFfUkVHICopIAkweEZGRkQwMkYwKSAvLyAoQ0FOX01CNykgTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENBTiBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19DQU5fVENSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDAyNCkgLy8gKENBTikgVHJhbnNmZXIgQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0lNUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAwMEMpIC8vIChDQU4pIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fSUVSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDAwNCkgLy8gKENBTikgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0VDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAwMjApIC8vIChDQU4pIEVycm9yIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9USU1FU1RQICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAwMUMpIC8vIChDQU4pIFRpbWUgU3RhbXAgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkQwMDAwKSAvLyAoQ0FOKSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDAwOCkgLy8gKENBTikgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9BQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkQwMDI4KSAvLyAoQ0FOKSBBYm9ydCBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fVElNICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEMDAxOCkgLy8gKENBTikgVGltZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9TUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkQwMDEwKSAvLyAoQ0FOKSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9CUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkQwMDE0KSAvLyAoQ0FOKSBCYXVkcmF0ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1ZSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDAwRkMpIC8vIChDQU4pIFZlcnNpb24gUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIEVNQUMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19JU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwMjQpIC8vIChFTUFDKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1NBNEggKChBVDkxX1JFRyAqKSAJMHhGRkZEQzBCNCkgLy8gKEVNQUMpIFNwZWNpZmljIEFkZHJlc3MgNCBUb3AsIExhc3QgMiBieXRlcw0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TQTFMICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwOTgpIC8vIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDEgQm90dG9tLCBGaXJzdCA0IGJ5dGVzDQorI2RlZmluZSBBVDkxQ19FTUFDX0VMRSAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA3OCkgLy8gKEVNQUMpIEV4Y2Vzc2l2ZSBMZW5ndGggRXJyb3JzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX0xDT0wgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA1QykgLy8gKEVNQUMpIExhdGUgQ29sbGlzaW9uIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1JMRSAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA4OCkgLy8gKEVNQUMpIFJlY2VpdmUgTGVuZ3RoIEZpZWxkIE1pc21hdGNoIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1dPTCAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzBDNCkgLy8gKEVNQUMpIFdha2UgT24gTEFOIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX0RURiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA1OCkgLy8gKEVNQUMpIERlZmVycmVkIFRyYW5zbWlzc2lvbiBGcmFtZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19UVU5EICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwNjQpIC8vIChFTUFDKSBUcmFuc21pdCBVbmRlcnJ1biBFcnJvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19OQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwMDApIC8vIChFTUFDKSBOZXR3b3JrIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfU0E0TCAoKEFUOTFfUkVHICopIAkweEZGRkRDMEIwKSAvLyAoRU1BQykgU3BlY2lmaWMgQWRkcmVzcyA0IEJvdHRvbSwgRmlyc3QgNCBieXRlcw0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwMjApIC8vIChFTUFDKSBSZWNlaXZlIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TQTNMICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwQTgpIC8vIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDMgQm90dG9tLCBGaXJzdCA0IGJ5dGVzDQorI2RlZmluZSBBVDkxQ19FTUFDX1RTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzAxNCkgLy8gKEVNQUMpIFRyYW5zbWl0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19JRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwMkMpIC8vIChFTUFDKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SU0UgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwNzQpIC8vIChFTUFDKSBSZWNlaXZlIFN5bWJvbCBFcnJvcnMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfRUNPTCAoKEFUOTFfUkVHICopIAkweEZGRkRDMDYwKSAvLyAoRU1BQykgRXhjZXNzaXZlIENvbGxpc2lvbiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19USUQgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwQjgpIC8vIChFTUFDKSBUeXBlIElEIENoZWNraW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX0hSQiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA5MCkgLy8gKEVNQUMpIEhhc2ggQWRkcmVzcyBCb3R0b21bMzE6MF0NCisjZGVmaW5lIEFUOTFDX0VNQUNfVEJRUCAoKEFUOTFfUkVHICopIAkweEZGRkRDMDFDKSAvLyAoRU1BQykgVHJhbnNtaXQgQnVmZmVyIFF1ZXVlIFBvaW50ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfVVNSSU8gKChBVDkxX1JFRyAqKSAJMHhGRkZEQzBDMCkgLy8gKEVNQUMpIFVTRVIgSW5wdXQvT3V0cHV0IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1BUUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzAzOCkgLy8gKEVNQUMpIFBhdXNlIFRpbWUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfU0EySCAoKEFUOTFfUkVHICopIAkweEZGRkRDMEE0KSAvLyAoRU1BQykgU3BlY2lmaWMgQWRkcmVzcyAyIFRvcCwgTGFzdCAyIGJ5dGVzDQorI2RlZmluZSBBVDkxQ19FTUFDX1JPViAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA3MCkgLy8gKEVNQUMpIFJlY2VpdmUgT3ZlcnJ1biBFcnJvcnMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfQUxFICAoKEFUOTFfUkVHICopIAkweEZGRkRDMDU0KSAvLyAoRU1BQykgQWxpZ25tZW50IEVycm9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1JKQSAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA3QykgLy8gKEVNQUMpIFJlY2VpdmUgSmFiYmVycyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SQlFQICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwMTgpIC8vIChFTUFDKSBSZWNlaXZlIEJ1ZmZlciBRdWV1ZSBQb2ludGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1RQRiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA4QykgLy8gKEVNQUMpIFRyYW5zbWl0dGVkIFBhdXNlIEZyYW1lcyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19OQ0ZHUiAoKEFUOTFfUkVHICopIAkweEZGRkRDMDA0KSAvLyAoRU1BQykgTmV0d29yayBDb25maWd1cmF0aW9uIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX0hSVCAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA5NCkgLy8gKEVNQUMpIEhhc2ggQWRkcmVzcyBUb3BbNjM6MzJdDQorI2RlZmluZSBBVDkxQ19FTUFDX1VTRiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA4MCkgLy8gKEVNQUMpIFVuZGVyc2l6ZSBGcmFtZXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfRkNTRSAoKEFUOTFfUkVHICopIAkweEZGRkRDMDUwKSAvLyAoRU1BQykgRnJhbWUgQ2hlY2sgU2VxdWVuY2UgRXJyb3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfVFBRICAoKEFUOTFfUkVHICopIAkweEZGRkRDMEJDKSAvLyAoRU1BQykgVHJhbnNtaXQgUGF1c2UgUXVhbnR1bSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19NQU4gICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwMzQpIC8vIChFTUFDKSBQSFkgTWFpbnRlbmFuY2UgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfRlRPICAoKEFUOTFfUkVHICopIAkweEZGRkRDMDQwKSAvLyAoRU1BQykgRnJhbWVzIFRyYW5zbWl0dGVkIE9LIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1JFViAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzBGQykgLy8gKEVNQUMpIFJldmlzaW9uIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX0lNUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzAzMCkgLy8gKEVNQUMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1NDRiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA0NCkgLy8gKEVNQUMpIFNpbmdsZSBDb2xsaXNpb24gRnJhbWUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfUEZSICAoKEFUOTFfUkVHICopIAkweEZGRkRDMDNDKSAvLyAoRU1BQykgUGF1c2UgRnJhbWVzIHJlY2VpdmVkIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX01DRiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA0OCkgLy8gKEVNQUMpIE11bHRpcGxlIENvbGxpc2lvbiBGcmFtZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19OU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwMDgpIC8vIChFTUFDKSBOZXR3b3JrIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TQTJMICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwQTApIC8vIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDIgQm90dG9tLCBGaXJzdCA0IGJ5dGVzDQorI2RlZmluZSBBVDkxQ19FTUFDX0ZSTyAgKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA0QykgLy8gKEVNQUMpIEZyYW1lcyBSZWNlaXZlZCBPSyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19JRVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwMjgpIC8vIChFTUFDKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1NBMUggKChBVDkxX1JFRyAqKSAJMHhGRkZEQzA5QykgLy8gKEVNQUMpIFNwZWNpZmljIEFkZHJlc3MgMSBUb3AsIExhc3QgMiBieXRlcw0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19DU0UgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwNjgpIC8vIChFTUFDKSBDYXJyaWVyIFNlbnNlIEVycm9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1NBM0ggKChBVDkxX1JFRyAqKSAJMHhGRkZEQzBBQykgLy8gKEVNQUMpIFNwZWNpZmljIEFkZHJlc3MgMyBUb3AsIExhc3QgMiBieXRlcw0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SUkUgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwNkMpIC8vIChFTUFDKSBSZWNlaXZlIFJlc3NvdXJjZSBFcnJvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TVEUgICgoQVQ5MV9SRUcgKikgCTB4RkZGREMwODQpIC8vIChFTUFDKSBTUUUgVGVzdCBFcnJvciBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX0FEQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19BRENfUFRTUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODEyNCkgLy8gKFBEQ19BREMpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19QVENSICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MTIwKSAvLyAoUERDX0FEQykgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19UTlBSICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MTE4KSAvLyAoUERDX0FEQykgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfVE5DUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODExQykgLy8gKFBEQ19BREMpIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1JOUFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgxMTApIC8vIChQRENfQURDKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1JOQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgxMTQpIC8vIChQRENfQURDKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1JQUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgxMDApIC8vIChQRENfQURDKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19UQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MTBDKSAvLyAoUERDX0FEQykgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1RQUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgxMDgpIC8vIChQRENfQURDKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfUkNSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODEwNCkgLy8gKFBEQ19BREMpIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQURDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0FEQ19DRFIyICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDM4KSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDINCisjZGVmaW5lIEFUOTFDX0FEQ19DRFIzICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDNDKSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDMNCisjZGVmaW5lIEFUOTFDX0FEQ19DRFIwICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDMwKSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDANCisjZGVmaW5lIEFUOTFDX0FEQ19DRFI1ICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDQ0KSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDUNCisjZGVmaW5lIEFUOTFDX0FEQ19DSERSICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDE0KSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfU1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODAxQykgLy8gKEFEQykgQURDIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX0NEUjQgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwNDApIC8vIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNA0KKyNkZWZpbmUgQVQ5MUNfQURDX0NEUjEgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwMzQpIC8vIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMQ0KKyNkZWZpbmUgQVQ5MUNfQURDX0xDRFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwMjApIC8vIChBREMpIEFEQyBMYXN0IENvbnZlcnRlZCBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODAyOCkgLy8gKEFEQykgQURDIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfQ1IgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODAwMCkgLy8gKEFEQykgQURDIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19DRFI3ICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDRDKSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDcNCisjZGVmaW5lIEFUOTFDX0FEQ19DRFI2ICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDQ4KSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDYNCisjZGVmaW5lIEFUOTFDX0FEQ19JRVIgICAoKEFUOTFfUkVHICopIAkweEZGRkQ4MDI0KSAvLyAoQURDKSBBREMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX0NIRVIgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwMTApIC8vIChBREMpIEFEQyBDaGFubmVsIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX0NIU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwMTgpIC8vIChBREMpIEFEQyBDaGFubmVsIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX01SICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGRDgwMDQpIC8vIChBREMpIEFEQyBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfSU1SICAgKChBVDkxX1JFRyAqKSAJMHhGRkZEODAyQykgLy8gKEFEQykgQURDIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfQUVTIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0FFU19UUFIgICAoKEFUOTFfUkVHICopIAkweEZGRkE0MTA4KSAvLyAoUERDX0FFUykgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX1BUQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQxMjApIC8vIChQRENfQUVTKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX1JOUFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQxMTApIC8vIChQRENfQUVTKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX1ROQ1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQxMUMpIC8vIChQRENfQUVTKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19UQ1IgICAoKEFUOTFfUkVHICopIAkweEZGRkE0MTBDKSAvLyAoUERDX0FFUykgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX1JDUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQxMDQpIC8vIChQRENfQUVTKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19STkNSICAoKEFUOTFfUkVHICopIAkweEZGRkE0MTE0KSAvLyAoUERDX0FFUykgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19UTlBSICAoKEFUOTFfUkVHICopIAkweEZGRkE0MTE4KSAvLyAoUERDX0FFUykgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfUlBSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBNDEwMCkgLy8gKFBEQ19BRVMpIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX1BUU1IgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQxMjQpIC8vIChQRENfQUVTKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBBRVMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQUVTX0lWeFIgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQwNjApIC8vIChBRVMpIEluaXRpYWxpemF0aW9uIFZlY3RvciB4IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfTVIgICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBNDAwNCkgLy8gKEFFUykgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX1ZSICAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQwRkMpIC8vIChBRVMpIEFFUyBWZXJzaW9uIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfT0RBVEF4UiAoKEFUOTFfUkVHICopIAkweEZGRkE0MDUwKSAvLyAoQUVTKSBPdXRwdXQgRGF0YSB4IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfSURBVEF4UiAoKEFUOTFfUkVHICopIAkweEZGRkE0MDQwKSAvLyAoQUVTKSBJbnB1dCBEYXRhIHggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19DUiAgICAoKEFUOTFfUkVHICopIAkweEZGRkE0MDAwKSAvLyAoQUVTKSBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfSURSICAgKChBVDkxX1JFRyAqKSAJMHhGRkZBNDAxNCkgLy8gKEFFUykgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19JTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkE0MDE4KSAvLyAoQUVTKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX0lFUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQwMTApIC8vIChBRVMpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19LRVlXeFIgKChBVDkxX1JFRyAqKSAJMHhGRkZBNDAyMCkgLy8gKEFFUykgS2V5IFdvcmQgeCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX0lTUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTQwMUMpIC8vIChBRVMpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19UREVTIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1RERVNfUk5DUiAoKEFUOTFfUkVHICopIAkweEZGRkE4MTE0KSAvLyAoUERDX1RERVMpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX1RDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZBODEwQykgLy8gKFBEQ19UREVTKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX1JDUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZBODEwNCkgLy8gKFBEQ19UREVTKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfVE5QUiAoKEFUOTFfUkVHICopIAkweEZGRkE4MTE4KSAvLyAoUERDX1RERVMpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19STlBSICgoQVQ5MV9SRUcgKikgCTB4RkZGQTgxMTApIC8vIChQRENfVERFUykgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfUlBSICAoKEFUOTFfUkVHICopIAkweEZGRkE4MTAwKSAvLyAoUERDX1RERVMpIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19UTkNSICgoQVQ5MV9SRUcgKikgCTB4RkZGQTgxMUMpIC8vIChQRENfVERFUykgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX1RQUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZBODEwOCkgLy8gKFBEQ19UREVTKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX1BUU1IgKChBVDkxX1JFRyAqKSAJMHhGRkZBODEyNCkgLy8gKFBEQ19UREVTKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX1BUQ1IgKChBVDkxX1JFRyAqKSAJMHhGRkZBODEyMCkgLy8gKFBEQ19UREVTKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVERFUyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19UREVTX0tFWTJXeFIgKChBVDkxX1JFRyAqKSAJMHhGRkZBODAyOCkgLy8gKFRERVMpIEtleSAyIFdvcmQgeCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19LRVkzV3hSICgoQVQ5MV9SRUcgKikgCTB4RkZGQTgwMzApIC8vIChUREVTKSBLZXkgMyBXb3JkIHggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfSURSICAoKEFUOTFfUkVHICopIAkweEZGRkE4MDE0KSAvLyAoVERFUykgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfVlIgICAoKEFUOTFfUkVHICopIAkweEZGRkE4MEZDKSAvLyAoVERFUykgVERFUyBWZXJzaW9uIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX0lWeFIgKChBVDkxX1JFRyAqKSAJMHhGRkZBODA2MCkgLy8gKFRERVMpIEluaXRpYWxpemF0aW9uIFZlY3RvciB4IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX09EQVRBeFIgKChBVDkxX1JFRyAqKSAJMHhGRkZBODA1MCkgLy8gKFRERVMpIE91dHB1dCBEYXRhIHggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfSU1SICAoKEFUOTFfUkVHICopIAkweEZGRkE4MDE4KSAvLyAoVERFUykgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfTVIgICAoKEFUOTFfUkVHICopIAkweEZGRkE4MDA0KSAvLyAoVERFUykgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19DUiAgICgoQVQ5MV9SRUcgKikgCTB4RkZGQTgwMDApIC8vIChUREVTKSBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX0lFUiAgKChBVDkxX1JFRyAqKSAJMHhGRkZBODAxMCkgLy8gKFRERVMpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfSVNSICAoKEFUOTFfUkVHICopIAkweEZGRkE4MDFDKSAvLyAoVERFUykgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19JREFUQXhSICgoQVQ5MV9SRUcgKikgCTB4RkZGQTgwNDApIC8vIChUREVTKSBJbnB1dCBEYXRhIHggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfS0VZMVd4UiAoKEFUOTFfUkVHICopIAkweEZGRkE4MDIwKSAvLyAoVERFUykgS2V5IDEgV29yZCB4IFJlZ2lzdGVyDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgIFBJTyBERUZJTklUSU9OUyBGT1IgQVQ5MVNBTTdYMjU2ICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMCApICAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEEwICovDQotI2RlZmluZSBBVDkxQ19QQTBfUlhEMCAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEEwICkgIC8qICBVU0FSVCAwIFJlY2VpdmUgRGF0YSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMSAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAxICkgICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTEgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMV9UWEQwICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTEgKSAgLyogIFVTQVJUIDAgVHJhbnNtaXQgRGF0YSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMTAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAxMCApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTEwICovDQotI2RlZmluZSBBVDkxQ19QQTEwX1RXRCAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEExMCApIC8qICBUV0kgVHdvLXdpcmUgU2VyaWFsIERhdGEgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTExICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMTEgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEExMSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEExMV9UV0NLICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMTEgKSAvKiAgVFdJIFR3by13aXJlIFNlcmlhbCBDbG9jayAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMTIgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAxMiApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTEyICovDQotI2RlZmluZSBBVDkxQ19QQTEyX05QQ1MwMCAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEExMiApIC8qICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDAgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTEzICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMTMgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEExMyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEExM19OUENTMDEgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMTMgKSAvKiAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAxICovDQotI2RlZmluZSBBVDkxQ19QQTEzX1BDSzEgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEExMyApIC8qICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAxICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEExNCAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDE0ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMTQgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMTRfTlBDUzAyICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTE0ICkgLyogIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEExNF9JUlExICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMTQgKSAvKiAgRXh0ZXJuYWwgSW50ZXJydXB0IDEgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTE1ICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMTUgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEExNSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEExNV9OUENTMDMgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMTUgKSAvKiAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzICovDQotI2RlZmluZSBBVDkxQ19QQTE1X1RDTEsyICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEExNSApIC8qICBUaW1lciBDb3VudGVyIDIgZXh0ZXJuYWwgY2xvY2sgaW5wdXQgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTE2ICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMTYgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEExNiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEExNl9NSVNPMCAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMTYgKSAvKiAgU1BJIDAgTWFzdGVyIEluIFNsYXZlICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEExNyAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDE3ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMTcgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMTdfTU9TSTAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTE3ICkgLyogIFNQSSAwIE1hc3RlciBPdXQgU2xhdmUgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTE4ICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMTggKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEExOCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEExOF9TUENLMCAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMTggKSAvKiAgU1BJIDAgU2VyaWFsIENsb2NrICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEExOSAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDE5ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMTkgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMTlfQ0FOUlggICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTE5ICkgLyogIENBTiBSZWNlaXZlICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEEyICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDIgKSAgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyX1NDSzAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMiApICAvKiAgVVNBUlQgMCBTZXJpYWwgQ2xvY2sgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMl9OUENTMTEgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTIgKSAgLyogIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMjAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAyMCApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTIwICovDQotI2RlZmluZSBBVDkxQ19QQTIwX0NBTlRYICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEEyMCApIC8qICBDQU4gVHJhbnNtaXQgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTIxICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMjEgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEEyMSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyMV9URiAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMjEgKSAvKiAgU1NDIFRyYW5zbWl0IEZyYW1lIFN5bmMgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjFfTlBDUzEwICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTIxICkgLyogIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMCAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMjIgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAyMiApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTIyICovDQotI2RlZmluZSBBVDkxQ19QQTIyX1RLICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEEyMiApIC8qICBTU0MgVHJhbnNtaXQgQ2xvY2sgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjJfU1BDSzEgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTIyICkgLyogIFNQSSAxIFNlcmlhbCBDbG9jayAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMjMgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAyMyApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTIzICovDQotI2RlZmluZSBBVDkxQ19QQTIzX1REICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEEyMyApIC8qICBTU0MgVHJhbnNtaXQgZGF0YSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyM19NT1NJMSAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMjMgKSAvKiAgU1BJIDEgTWFzdGVyIE91dCBTbGF2ZSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMjQgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAyNCApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTI0ICovDQotI2RlZmluZSBBVDkxQ19QQTI0X1JEICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEEyNCApIC8qICBTU0MgUmVjZWl2ZSBEYXRhICovDQotI2RlZmluZSBBVDkxQ19QQTI0X01JU08xICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEEyNCApIC8qICBTUEkgMSBNYXN0ZXIgSW4gU2xhdmUgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTI1ICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMjUgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEEyNSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyNV9SSyAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMjUgKSAvKiAgU1NDIFJlY2VpdmUgQ2xvY2sgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjVfTlBDUzExICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTI1ICkgLyogIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMjYgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAyNiApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTI2ICovDQotI2RlZmluZSBBVDkxQ19QQTI2X1JGICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEEyNiApIC8qICBTU0MgUmVjZWl2ZSBGcmFtZSBTeW5jICovDQotI2RlZmluZSBBVDkxQ19QQTI2X05QQ1MxMiAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEEyNiApIC8qICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTI3ICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMjcgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEEyNyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyN19EUlhEICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMjcgKSAvKiAgREJHVSBEZWJ1ZyBSZWNlaXZlIERhdGEgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjdfUENLMyAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTI3ICkgLyogIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDMgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTI4ICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMjggKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEEyOCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyOF9EVFhEICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMjggKSAvKiAgREJHVSBEZWJ1ZyBUcmFuc21pdCBEYXRhICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEEyOSAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDI5ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMjkgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjlfRklRICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTI5ICkgLyogIEFJQyBGYXN0IEludGVycnVwdCBJbnB1dCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyOV9OUENTMTMgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMjkgKSAvKiAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEEzICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDMgKSAgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEzX1JUUzAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMyApICAvKiAgVVNBUlQgMCBSZWFkeSBUbyBTZW5kICovDQotI2RlZmluZSBBVDkxQ19QQTNfTlBDUzEyICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEEzICkgIC8qICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTMwICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMzAgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEEzMCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEzMF9JUlEwICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBMzAgKSAvKiAgRXh0ZXJuYWwgSW50ZXJydXB0IDAgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMzBfUENLMiAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTMwICkgLyogIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTQgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgNCApICAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEE0ICovDQotI2RlZmluZSBBVDkxQ19QQTRfQ1RTMCAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEE0ICkgIC8qICBVU0FSVCAwIENsZWFyIFRvIFNlbmQgKi8NCi0jZGVmaW5lIEFUOTFDX1BBNF9OUENTMTMgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTQgKSAgLyogIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMyAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBNSAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCA1ICkgICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTUgKi8NCi0jZGVmaW5lIEFUOTFDX1BBNV9SWEQxICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTUgKSAgLyogIFVTQVJUIDEgUmVjZWl2ZSBEYXRhICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEE2ICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDYgKSAgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBNiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEE2X1RYRDEgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBNiApICAvKiAgVVNBUlQgMSBUcmFuc21pdCBEYXRhICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEE3ICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDcgKSAgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBNyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEE3X1NDSzEgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBNyApICAvKiAgVVNBUlQgMSBTZXJpYWwgQ2xvY2sgKi8NCi0jZGVmaW5lIEFUOTFDX1BBN19OUENTMDEgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTcgKSAgLyogIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBOCAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCA4ICkgICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTggKi8NCi0jZGVmaW5lIEFUOTFDX1BBOF9SVFMxICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQTggKSAgLyogIFVTQVJUIDEgUmVhZHkgVG8gU2VuZCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEE4X05QQ1MwMiAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBOCApICAvKiAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAyICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEE5ICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDkgKSAgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBOSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEE5X0NUUzEgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BBOSApICAvKiAgVVNBUlQgMSBDbGVhciBUbyBTZW5kICovDQotI2RlZmluZSBBVDkxQ19QQTlfTlBDUzAzICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEE5ICkgIC8qICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjAgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMCApICAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIwICovDQotI2RlZmluZSBBVDkxQ19QQjBfRVRYQ0tfRVJFRkNLICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIwICkgIC8qICBFdGhlcm5ldCBNQUMgVHJhbnNtaXQgQ2xvY2svUmVmZXJlbmNlIENsb2NrICovDQotI2RlZmluZSBBVDkxQ19QQjBfUENLMCAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIwICkgIC8qICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAwICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEIxICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDEgKSAgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxX0VUWEVOICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMSApICAvKiAgRXRoZXJuZXQgTUFDIFRyYW5zbWl0IEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BCMTAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAxMCApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQjEwICovDQotI2RlZmluZSBBVDkxQ19QQjEwX0VUWDIgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIxMCApIC8qICBFdGhlcm5ldCBNQUMgVHJhbnNtaXQgRGF0YSAyICovDQotI2RlZmluZSBBVDkxQ19QQjEwX05QQ1MxMSAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIxMCApIC8qICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDEgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjExICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMTEgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIxMSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxMV9FVFgzICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMTEgKSAvKiAgRXRoZXJuZXQgTUFDIFRyYW5zbWl0IERhdGEgMyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxMV9OUENTMTIgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMTEgKSAvKiAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAyICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEIxMiAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDEyICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMTIgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMTJfRVRYRVIgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjEyICkgLyogIEV0aGVybmV0IE1BQyBUcmFuc21pa3QgQ29kaW5nIEVycm9yICovDQotI2RlZmluZSBBVDkxQ19QQjEyX1RDTEswICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIxMiApIC8qICBUaW1lciBDb3VudGVyIDAgZXh0ZXJuYWwgY2xvY2sgaW5wdXQgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjEzICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMTMgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIxMyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxM19FUlgyICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMTMgKSAvKiAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgRGF0YSAyICovDQotI2RlZmluZSBBVDkxQ19QQjEzX05QQ1MwMSAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIxMyApIC8qICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDEgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjE0ICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMTQgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIxNCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxNF9FUlgzICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMTQgKSAvKiAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgRGF0YSAzICovDQotI2RlZmluZSBBVDkxQ19QQjE0X05QQ1MwMiAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIxNCApIC8qICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjE1ICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMTUgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIxNSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxNV9FUlhEViAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMTUgKSAvKiAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgRGF0YSBWYWxpZCAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BCMTYgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAxNiApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQjE2ICovDQotI2RlZmluZSBBVDkxQ19QQjE2X0VDT0wgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIxNiApIC8qICBFdGhlcm5ldCBNQUMgQ29sbGlzaW9uIERldGVjdGVkICovDQotI2RlZmluZSBBVDkxQ19QQjE2X05QQ1MxMyAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIxNiApIC8qICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjE3ICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMTcgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIxNyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxN19FUlhDSyAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMTcgKSAvKiAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgQ2xvY2sgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMTdfTlBDUzAzICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjE3ICkgLyogIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMyAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BCMTggICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAxOCApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQjE4ICovDQotI2RlZmluZSBBVDkxQ19QQjE4X0VGMTAwICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIxOCApIC8qICBFdGhlcm5ldCBNQUMgRm9yY2UgMTAwIE1iaXRzL3NlYyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxOF9BRFRSRyAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMTggKSAvKiAgQURDIEV4dGVybmFsIFRyaWdnZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjE5ICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMTkgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIxOSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxOV9QV00wICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMTkgKSAvKiAgUFdNIENoYW5uZWwgMCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxOV9UQ0xLMSAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMTkgKSAvKiAgVGltZXIgQ291bnRlciAxIGV4dGVybmFsIGNsb2NrIGlucHV0ICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEIyICAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDIgKSAgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIyX0VUWDAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMiApICAvKiAgRXRoZXJuZXQgTUFDIFRyYW5zbWl0IERhdGEgMCAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BCMjAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAyMCApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQjIwICovDQotI2RlZmluZSBBVDkxQ19QQjIwX1BXTTEgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIyMCApIC8qICBQV00gQ2hhbm5lbCAxICovDQotI2RlZmluZSBBVDkxQ19QQjIwX1BDSzAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIyMCApIC8qICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAwICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEIyMSAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDIxICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMjEgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMjFfUFdNMiAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjIxICkgLyogIFBXTSBDaGFubmVsIDIgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMjFfUENLMSAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjIxICkgLyogIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDEgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjIyICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMjIgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIyMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIyMl9QV00zICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMjIgKSAvKiAgUFdNIENoYW5uZWwgMyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIyMl9QQ0syICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMjIgKSAvKiAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BCMjMgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAyMyApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQjIzICovDQotI2RlZmluZSBBVDkxQ19QQjIzX1RJT0EwICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIyMyApIC8qICBUaW1lciBDb3VudGVyIDAgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIyM19EQ0QxICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMjMgKSAvKiAgVVNBUlQgMSBEYXRhIENhcnJpZXIgRGV0ZWN0ICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEIyNCAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDI0ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMjQgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMjRfVElPQjAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjI0ICkgLyogIFRpbWVyIENvdW50ZXIgMCBNdWx0aXB1cnBvc2UgVGltZXIgSS9PIFBpbiBCICovDQotI2RlZmluZSBBVDkxQ19QQjI0X0RTUjEgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIyNCApIC8qICBVU0FSVCAxIERhdGEgU2V0IHJlYWR5ICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEIyNSAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IDI1ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMjUgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMjVfVElPQTEgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjI1ICkgLyogIFRpbWVyIENvdW50ZXIgMSBNdWx0aXB1cnBvc2UgVGltZXIgSS9PIFBpbiBBICovDQotI2RlZmluZSBBVDkxQ19QQjI1X0RUUjEgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEIyNSApIC8qICBVU0FSVCAxIERhdGEgVGVybWluYWwgcmVhZHkgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjI2ICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMjYgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIyNiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIyNl9USU9CMSAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMjYgKSAvKiAgVGltZXIgQ291bnRlciAxIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEIgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMjZfUkkxICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjI2ICkgLyogIFVTQVJUIDEgUmluZyBJbmRpY2F0b3IgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjI3ICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMjcgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIyNyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIyN19USU9BMiAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMjcgKSAvKiAgVGltZXIgQ291bnRlciAyIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEEgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMjdfUFdNMCAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjI3ICkgLyogIFBXTSBDaGFubmVsIDAgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjI4ICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMjggKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIyOCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIyOF9USU9CMiAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMjggKSAvKiAgVGltZXIgQ291bnRlciAyIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEIgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMjhfUFdNMSAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjI4ICkgLyogIFBXTSBDaGFubmVsIDEgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjI5ICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMjkgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIyOSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIyOV9QQ0sxICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMjkgKSAvKiAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIyOV9QV00yICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMjkgKSAvKiAgUFdNIENoYW5uZWwgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BCMyAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCAzICkgICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQjMgKi8NCi0jZGVmaW5lIEFUOTFDX1BCM19FVFgxICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjMgKSAgLyogIEV0aGVybmV0IE1BQyBUcmFuc21pdCBEYXRhIDEgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjMwICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgMzAgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIzMCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIzMF9QQ0syICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMzAgKSAvKiAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIzMF9QV00zICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUElPX1BCMzAgKSAvKiAgUFdNIENoYW5uZWwgMyAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BCNCAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCA0ICkgICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQjQgKi8NCi0jZGVmaW5lIEFUOTFDX1BCNF9FQ1JTX0VDUlNEViAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjQgKSAgLyogIEV0aGVybmV0IE1BQyBDYXJyaWVyIFNlbnNlL0NhcnJpZXIgU2Vuc2UgYW5kIERhdGEgVmFsaWQgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjUgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgNSApICAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEI1ICovDQotI2RlZmluZSBBVDkxQ19QQjVfRVJYMCAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEI1ICkgIC8qICBFdGhlcm5ldCBNQUMgUmVjZWl2ZSBEYXRhIDAgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjYgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgNiApICAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEI2ICovDQotI2RlZmluZSBBVDkxQ19QQjZfRVJYMSAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEI2ICkgIC8qICBFdGhlcm5ldCBNQUMgUmVjZWl2ZSBEYXRhIDEgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjcgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgNyApICAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEI3ICovDQotI2RlZmluZSBBVDkxQ19QQjdfRVJYRVIgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEI3ICkgIC8qICBFdGhlcm5ldCBNQUMgUmVjZWl2ZSBFcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BCOCAgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCA4ICkgICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQjggKi8NCi0jZGVmaW5lIEFUOTFDX1BCOF9FTURDICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BJT19QQjggKSAgLyogIEV0aGVybmV0IE1BQyBNYW5hZ2VtZW50IERhdGEgQ2xvY2sgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjkgICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgOSApICAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEI5ICovDQotI2RlZmluZSBBVDkxQ19QQjlfRU1ESU8gICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QSU9fUEI5ICkgIC8qICBFdGhlcm5ldCBNQUMgTWFuYWdlbWVudCBEYXRhIElucHV0L091dHB1dCAqLw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgICBQSU8gREVGSU5JVElPTlMgRk9SIEFUOTFTQU03WDI1Ng0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorI2RlZmluZSBBVDkxQ19QSU9fUEEwICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgMCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEwDQorI2RlZmluZSBBVDkxQ19QQTBfUlhEMCAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTApIC8vICBVU0FSVCAwIFJlY2VpdmUgRGF0YQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDEpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMQ0KKyNkZWZpbmUgQVQ5MUNfUEExX1RYRDAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExKSAvLyAgVVNBUlQgMCBUcmFuc21pdCBEYXRhDQorI2RlZmluZSBBVDkxQ19QSU9fUEExMCAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxMCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExMA0KKyNkZWZpbmUgQVQ5MUNfUEExMF9UV0QgICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMTApIC8vICBUV0kgVHdvLXdpcmUgU2VyaWFsIERhdGENCisjZGVmaW5lIEFUOTFDX1BJT19QQTExICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDExKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTExDQorI2RlZmluZSBBVDkxQ19QQTExX1RXQ0sgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExMSkgLy8gIFRXSSBUd28td2lyZSBTZXJpYWwgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BJT19QQTEyICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDEyKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTEyDQorI2RlZmluZSBBVDkxQ19QQTEyX05QQ1MwMCAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExMikgLy8gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMTMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTMpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMTMNCisjZGVmaW5lIEFUOTFDX1BBMTNfTlBDUzAxICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTEzKSAvLyAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAxDQorI2RlZmluZSBBVDkxQ19QQTEzX1BDSzEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExMykgLy8gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDENCisjZGVmaW5lIEFUOTFDX1BJT19QQTE0ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDE0KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTE0DQorI2RlZmluZSBBVDkxQ19QQTE0X05QQ1MwMiAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExNCkgLy8gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMg0KKyNkZWZpbmUgQVQ5MUNfUEExNF9JUlExICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMTQpIC8vICBFeHRlcm5hbCBJbnRlcnJ1cHQgMQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMTUgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTUpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMTUNCisjZGVmaW5lIEFUOTFDX1BBMTVfTlBDUzAzICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTE1KSAvLyAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzDQorI2RlZmluZSBBVDkxQ19QQTE1X1RDTEsyICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExNSkgLy8gIFRpbWVyIENvdW50ZXIgMiBleHRlcm5hbCBjbG9jayBpbnB1dA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMTYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTYpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMTYNCisjZGVmaW5lIEFUOTFDX1BBMTZfTUlTTzAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTE2KSAvLyAgU1BJIDAgTWFzdGVyIEluIFNsYXZlDQorI2RlZmluZSBBVDkxQ19QSU9fUEExNyAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxNykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExNw0KKyNkZWZpbmUgQVQ5MUNfUEExN19NT1NJMCAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMTcpIC8vICBTUEkgMCBNYXN0ZXIgT3V0IFNsYXZlDQorI2RlZmluZSBBVDkxQ19QSU9fUEExOCAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxOCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExOA0KKyNkZWZpbmUgQVQ5MUNfUEExOF9TUENLMCAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMTgpIC8vICBTUEkgMCBTZXJpYWwgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BJT19QQTE5ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDE5KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTE5DQorI2RlZmluZSBBVDkxQ19QQTE5X0NBTlJYICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEExOSkgLy8gIENBTiBSZWNlaXZlDQorI2RlZmluZSBBVDkxQ19QSU9fUEEyICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgMikgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEyDQorI2RlZmluZSBBVDkxQ19QQTJfU0NLMCAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTIpIC8vICBVU0FSVCAwIFNlcmlhbCBDbG9jaw0KKyNkZWZpbmUgQVQ5MUNfUEEyX05QQ1MxMSAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyKSAvLyAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAxDQorI2RlZmluZSBBVDkxQ19QSU9fUEEyMCAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAyMCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEyMA0KKyNkZWZpbmUgQVQ5MUNfUEEyMF9DQU5UWCAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjApIC8vICBDQU4gVHJhbnNtaXQNCisjZGVmaW5lIEFUOTFDX1BJT19QQTIxICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDIxKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTIxDQorI2RlZmluZSBBVDkxQ19QQTIxX1RGICAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyMSkgLy8gIFNTQyBUcmFuc21pdCBGcmFtZSBTeW5jDQorI2RlZmluZSBBVDkxQ19QQTIxX05QQ1MxMCAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyMSkgLy8gIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMjIgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjIpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjINCisjZGVmaW5lIEFUOTFDX1BBMjJfVEsgICAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTIyKSAvLyAgU1NDIFRyYW5zbWl0IENsb2NrDQorI2RlZmluZSBBVDkxQ19QQTIyX1NQQ0sxICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyMikgLy8gIFNQSSAxIFNlcmlhbCBDbG9jaw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMjMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjMpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjMNCisjZGVmaW5lIEFUOTFDX1BBMjNfVEQgICAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTIzKSAvLyAgU1NDIFRyYW5zbWl0IGRhdGENCisjZGVmaW5lIEFUOTFDX1BBMjNfTU9TSTEgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTIzKSAvLyAgU1BJIDEgTWFzdGVyIE91dCBTbGF2ZQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMjQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjQpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjQNCisjZGVmaW5lIEFUOTFDX1BBMjRfUkQgICAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTI0KSAvLyAgU1NDIFJlY2VpdmUgRGF0YQ0KKyNkZWZpbmUgQVQ5MUNfUEEyNF9NSVNPMSAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjQpIC8vICBTUEkgMSBNYXN0ZXIgSW4gU2xhdmUNCisjZGVmaW5lIEFUOTFDX1BJT19QQTI1ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDI1KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTI1DQorI2RlZmluZSBBVDkxQ19QQTI1X1JLICAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyNSkgLy8gIFNTQyBSZWNlaXZlIENsb2NrDQorI2RlZmluZSBBVDkxQ19QQTI1X05QQ1MxMSAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyNSkgLy8gIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMjYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjYpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjYNCisjZGVmaW5lIEFUOTFDX1BBMjZfUkYgICAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTI2KSAvLyAgU1NDIFJlY2VpdmUgRnJhbWUgU3luYw0KKyNkZWZpbmUgQVQ5MUNfUEEyNl9OUENTMTIgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBMjYpIC8vICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDINCisjZGVmaW5lIEFUOTFDX1BJT19QQTI3ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDI3KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTI3DQorI2RlZmluZSBBVDkxQ19QQTI3X0RSWEQgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyNykgLy8gIERCR1UgRGVidWcgUmVjZWl2ZSBEYXRhDQorI2RlZmluZSBBVDkxQ19QQTI3X1BDSzMgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyNykgLy8gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDMNCisjZGVmaW5lIEFUOTFDX1BJT19QQTI4ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDI4KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTI4DQorI2RlZmluZSBBVDkxQ19QQTI4X0RUWEQgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyOCkgLy8gIERCR1UgRGVidWcgVHJhbnNtaXQgRGF0YQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMjkgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjkpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjkNCisjZGVmaW5lIEFUOTFDX1BBMjlfRklRICAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTI5KSAvLyAgQUlDIEZhc3QgSW50ZXJydXB0IElucHV0DQorI2RlZmluZSBBVDkxQ19QQTI5X05QQ1MxMyAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEyOSkgLy8gIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMyAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDMpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMw0KKyNkZWZpbmUgQVQ5MUNfUEEzX1JUUzAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEzKSAvLyAgVVNBUlQgMCBSZWFkeSBUbyBTZW5kDQorI2RlZmluZSBBVDkxQ19QQTNfTlBDUzEyICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTMpIC8vICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDINCisjZGVmaW5lIEFUOTFDX1BJT19QQTMwICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDMwKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTMwDQorI2RlZmluZSBBVDkxQ19QQTMwX0lSUTAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEzMCkgLy8gIEV4dGVybmFsIEludGVycnVwdCAwDQorI2RlZmluZSBBVDkxQ19QQTMwX1BDSzIgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEEzMCkgLy8gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDINCisjZGVmaW5lIEFUOTFDX1BJT19QQTQgICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICA0KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTQNCisjZGVmaW5lIEFUOTFDX1BBNF9DVFMwICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBNCkgLy8gIFVTQVJUIDAgQ2xlYXIgVG8gU2VuZA0KKyNkZWZpbmUgQVQ5MUNfUEE0X05QQ1MxMyAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEE0KSAvLyAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzDQorI2RlZmluZSBBVDkxQ19QSU9fUEE1ICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgNSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEE1DQorI2RlZmluZSBBVDkxQ19QQTVfUlhEMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTUpIC8vICBVU0FSVCAxIFJlY2VpdmUgRGF0YQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBNiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDYpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBNg0KKyNkZWZpbmUgQVQ5MUNfUEE2X1RYRDEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEE2KSAvLyAgVVNBUlQgMSBUcmFuc21pdCBEYXRhDQorI2RlZmluZSBBVDkxQ19QSU9fUEE3ICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgNykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEE3DQorI2RlZmluZSBBVDkxQ19QQTdfU0NLMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTcpIC8vICBVU0FSVCAxIFNlcmlhbCBDbG9jaw0KKyNkZWZpbmUgQVQ5MUNfUEE3X05QQ1MwMSAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEE3KSAvLyAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAxDQorI2RlZmluZSBBVDkxQ19QSU9fUEE4ICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgOCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEE4DQorI2RlZmluZSBBVDkxQ19QQThfUlRTMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTgpIC8vICBVU0FSVCAxIFJlYWR5IFRvIFNlbmQNCisjZGVmaW5lIEFUOTFDX1BBOF9OUENTMDIgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BBOCkgLy8gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBOSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDkpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBOQ0KKyNkZWZpbmUgQVQ5MUNfUEE5X0NUUzEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEE5KSAvLyAgVVNBUlQgMSBDbGVhciBUbyBTZW5kDQorI2RlZmluZSBBVDkxQ19QQTlfTlBDUzAzICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQTkpIC8vICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMNCisjZGVmaW5lIEFUOTFDX1BJT19QQjAgICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICAwKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjANCisjZGVmaW5lIEFUOTFDX1BCMF9FVFhDS19FUkVGQ0sgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjApIC8vICBFdGhlcm5ldCBNQUMgVHJhbnNtaXQgQ2xvY2svUmVmZXJlbmNlIENsb2NrDQorI2RlZmluZSBBVDkxQ19QQjBfUENLMCAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjApIC8vICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAwDQorI2RlZmluZSBBVDkxQ19QSU9fUEIxICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgMSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIxDQorI2RlZmluZSBBVDkxQ19QQjFfRVRYRU4gICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjEpIC8vICBFdGhlcm5ldCBNQUMgVHJhbnNtaXQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19QSU9fUEIxMCAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAxMCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIxMA0KKyNkZWZpbmUgQVQ5MUNfUEIxMF9FVFgyICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMTApIC8vICBFdGhlcm5ldCBNQUMgVHJhbnNtaXQgRGF0YSAyDQorI2RlZmluZSBBVDkxQ19QQjEwX05QQ1MxMSAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxMCkgLy8gIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMTEgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTEpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMTENCisjZGVmaW5lIEFUOTFDX1BCMTFfRVRYMyAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjExKSAvLyAgRXRoZXJuZXQgTUFDIFRyYW5zbWl0IERhdGEgMw0KKyNkZWZpbmUgQVQ5MUNfUEIxMV9OUENTMTIgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMTEpIC8vICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDINCisjZGVmaW5lIEFUOTFDX1BJT19QQjEyICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDEyKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjEyDQorI2RlZmluZSBBVDkxQ19QQjEyX0VUWEVSICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxMikgLy8gIEV0aGVybmV0IE1BQyBUcmFuc21pa3QgQ29kaW5nIEVycm9yDQorI2RlZmluZSBBVDkxQ19QQjEyX1RDTEswICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxMikgLy8gIFRpbWVyIENvdW50ZXIgMCBleHRlcm5hbCBjbG9jayBpbnB1dA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMTMgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTMpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMTMNCisjZGVmaW5lIEFUOTFDX1BCMTNfRVJYMiAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjEzKSAvLyAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgRGF0YSAyDQorI2RlZmluZSBBVDkxQ19QQjEzX05QQ1MwMSAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxMykgLy8gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMTQgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTQpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMTQNCisjZGVmaW5lIEFUOTFDX1BCMTRfRVJYMyAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjE0KSAvLyAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgRGF0YSAzDQorI2RlZmluZSBBVDkxQ19QQjE0X05QQ1MwMiAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxNCkgLy8gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMTUgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTUpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMTUNCisjZGVmaW5lIEFUOTFDX1BCMTVfRVJYRFYgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjE1KSAvLyAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgRGF0YSBWYWxpZA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMTYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTYpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMTYNCisjZGVmaW5lIEFUOTFDX1BCMTZfRUNPTCAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjE2KSAvLyAgRXRoZXJuZXQgTUFDIENvbGxpc2lvbiBEZXRlY3RlZA0KKyNkZWZpbmUgQVQ5MUNfUEIxNl9OUENTMTMgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMTYpIC8vICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMNCisjZGVmaW5lIEFUOTFDX1BJT19QQjE3ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDE3KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjE3DQorI2RlZmluZSBBVDkxQ19QQjE3X0VSWENLICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxNykgLy8gIEV0aGVybmV0IE1BQyBSZWNlaXZlIENsb2NrDQorI2RlZmluZSBBVDkxQ19QQjE3X05QQ1MwMyAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxNykgLy8gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMTggICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMTgpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMTgNCisjZGVmaW5lIEFUOTFDX1BCMThfRUYxMDAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjE4KSAvLyAgRXRoZXJuZXQgTUFDIEZvcmNlIDEwMCBNYml0cy9zZWMNCisjZGVmaW5lIEFUOTFDX1BCMThfQURUUkcgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjE4KSAvLyAgQURDIEV4dGVybmFsIFRyaWdnZXINCisjZGVmaW5lIEFUOTFDX1BJT19QQjE5ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDE5KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjE5DQorI2RlZmluZSBBVDkxQ19QQjE5X1BXTTAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIxOSkgLy8gIFBXTSBDaGFubmVsIDANCisjZGVmaW5lIEFUOTFDX1BCMTlfVENMSzEgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjE5KSAvLyAgVGltZXIgQ291bnRlciAxIGV4dGVybmFsIGNsb2NrIGlucHV0DQorI2RlZmluZSBBVDkxQ19QSU9fUEIyICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgMikgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIyDQorI2RlZmluZSBBVDkxQ19QQjJfRVRYMCAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjIpIC8vICBFdGhlcm5ldCBNQUMgVHJhbnNtaXQgRGF0YSAwDQorI2RlZmluZSBBVDkxQ19QSU9fUEIyMCAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAyMCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIyMA0KKyNkZWZpbmUgQVQ5MUNfUEIyMF9QV00xICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMjApIC8vICBQV00gQ2hhbm5lbCAxDQorI2RlZmluZSBBVDkxQ19QQjIwX1BDSzAgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyMCkgLy8gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDANCisjZGVmaW5lIEFUOTFDX1BJT19QQjIxICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDIxKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjIxDQorI2RlZmluZSBBVDkxQ19QQjIxX1BXTTIgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyMSkgLy8gIFBXTSBDaGFubmVsIDINCisjZGVmaW5lIEFUOTFDX1BCMjFfUENLMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjIxKSAvLyAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMjIgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjIpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMjINCisjZGVmaW5lIEFUOTFDX1BCMjJfUFdNMyAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjIyKSAvLyAgUFdNIENoYW5uZWwgMw0KKyNkZWZpbmUgQVQ5MUNfUEIyMl9QQ0syICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMjIpIC8vICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAyDQorI2RlZmluZSBBVDkxQ19QSU9fUEIyMyAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAyMykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIyMw0KKyNkZWZpbmUgQVQ5MUNfUEIyM19USU9BMCAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMjMpIC8vICBUaW1lciBDb3VudGVyIDAgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQQ0KKyNkZWZpbmUgQVQ5MUNfUEIyM19EQ0QxICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMjMpIC8vICBVU0FSVCAxIERhdGEgQ2FycmllciBEZXRlY3QNCisjZGVmaW5lIEFUOTFDX1BJT19QQjI0ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDI0KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjI0DQorI2RlZmluZSBBVDkxQ19QQjI0X1RJT0IwICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyNCkgLy8gIFRpbWVyIENvdW50ZXIgMCBNdWx0aXB1cnBvc2UgVGltZXIgSS9PIFBpbiBCDQorI2RlZmluZSBBVDkxQ19QQjI0X0RTUjEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyNCkgLy8gIFVTQVJUIDEgRGF0YSBTZXQgcmVhZHkNCisjZGVmaW5lIEFUOTFDX1BJT19QQjI1ICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8IDI1KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjI1DQorI2RlZmluZSBBVDkxQ19QQjI1X1RJT0ExICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyNSkgLy8gIFRpbWVyIENvdW50ZXIgMSBNdWx0aXB1cnBvc2UgVGltZXIgSS9PIFBpbiBBDQorI2RlZmluZSBBVDkxQ19QQjI1X0RUUjEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIyNSkgLy8gIFVTQVJUIDEgRGF0YSBUZXJtaW5hbCByZWFkeQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMjYgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjYpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMjYNCisjZGVmaW5lIEFUOTFDX1BCMjZfVElPQjEgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjI2KSAvLyAgVGltZXIgQ291bnRlciAxIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEINCisjZGVmaW5lIEFUOTFDX1BCMjZfUkkxICAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjI2KSAvLyAgVVNBUlQgMSBSaW5nIEluZGljYXRvcg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMjcgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjcpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMjcNCisjZGVmaW5lIEFUOTFDX1BCMjdfVElPQTIgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjI3KSAvLyAgVGltZXIgQ291bnRlciAyIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEENCisjZGVmaW5lIEFUOTFDX1BCMjdfUFdNMCAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjI3KSAvLyAgUFdNIENoYW5uZWwgMA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMjggICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjgpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMjgNCisjZGVmaW5lIEFUOTFDX1BCMjhfVElPQjIgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjI4KSAvLyAgVGltZXIgQ291bnRlciAyIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEINCisjZGVmaW5lIEFUOTFDX1BCMjhfUFdNMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjI4KSAvLyAgUFdNIENoYW5uZWwgMQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMjkgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjkpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMjkNCisjZGVmaW5lIEFUOTFDX1BCMjlfUENLMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjI5KSAvLyAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMQ0KKyNkZWZpbmUgQVQ5MUNfUEIyOV9QV00yICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMjkpIC8vICBQV00gQ2hhbm5lbCAyDQorI2RlZmluZSBBVDkxQ19QSU9fUEIzICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgMykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIzDQorI2RlZmluZSBBVDkxQ19QQjNfRVRYMSAgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjMpIC8vICBFdGhlcm5ldCBNQUMgVHJhbnNtaXQgRGF0YSAxDQorI2RlZmluZSBBVDkxQ19QSU9fUEIzMCAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAzMCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIzMA0KKyNkZWZpbmUgQVQ5MUNfUEIzMF9QQ0syICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCMzApIC8vICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAyDQorI2RlZmluZSBBVDkxQ19QQjMwX1BXTTMgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEIzMCkgLy8gIFBXTSBDaGFubmVsIDMNCisjZGVmaW5lIEFUOTFDX1BJT19QQjQgICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICA0KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjQNCisjZGVmaW5lIEFUOTFDX1BCNF9FQ1JTX0VDUlNEViAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCNCkgLy8gIEV0aGVybmV0IE1BQyBDYXJyaWVyIFNlbnNlL0NhcnJpZXIgU2Vuc2UgYW5kIERhdGEgVmFsaWQNCisjZGVmaW5lIEFUOTFDX1BJT19QQjUgICAgICAgICgodW5zaWduZWQgaW50KSAxIDw8ICA1KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjUNCisjZGVmaW5lIEFUOTFDX1BCNV9FUlgwICAgICAoKHVuc2lnbmVkIGludCkgQVQ5MUNfUElPX1BCNSkgLy8gIEV0aGVybmV0IE1BQyBSZWNlaXZlIERhdGEgMA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCNiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDYpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCNg0KKyNkZWZpbmUgQVQ5MUNfUEI2X0VSWDEgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEI2KSAvLyAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgRGF0YSAxDQorI2RlZmluZSBBVDkxQ19QSU9fUEI3ICAgICAgICAoKHVuc2lnbmVkIGludCkgMSA8PCAgNykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEI3DQorI2RlZmluZSBBVDkxQ19QQjdfRVJYRVIgICAgKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BJT19QQjcpIC8vICBFdGhlcm5ldCBNQUMgUmVjZWl2ZSBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCOCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDgpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCOA0KKyNkZWZpbmUgQVQ5MUNfUEI4X0VNREMgICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEI4KSAvLyAgRXRoZXJuZXQgTUFDIE1hbmFnZW1lbnQgRGF0YSBDbG9jaw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCOSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDEgPDwgIDkpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCOQ0KKyNkZWZpbmUgQVQ5MUNfUEI5X0VNRElPICAgICgodW5zaWduZWQgaW50KSBBVDkxQ19QSU9fUEI5KSAvLyAgRXRoZXJuZXQgTUFDIE1hbmFnZW1lbnQgRGF0YSBJbnB1dC9PdXRwdXQNCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICAgUEVSSVBIRVJBTCBJRCBERUZJTklUSU9OUyBGT1IgQVQ5MVNBTTdYMjU2ICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0jZGVmaW5lIEFUOTFDX0lEX0ZJUSAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAwICkgIC8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChGSVEpICovDQotI2RlZmluZSBBVDkxQ19JRF9TWVMgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSApICAvKiBTeXN0ZW0gUGVyaXBoZXJhbCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfUElPQSAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDIgKSAgLyogUGFyYWxsZWwgSU8gQ29udHJvbGxlciBBICovDQotI2RlZmluZSBBVDkxQ19JRF9QSU9CICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMyApICAvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEIgKi8NCi0jZGVmaW5lIEFUOTFDX0lEX1NQSTAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSA0ICkgIC8qIFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSAwICovDQotI2RlZmluZSBBVDkxQ19JRF9TUEkxICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgNSApICAvKiBTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgMSAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfVVMwICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDYgKSAgLyogVVNBUlQgMCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfVVMxICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDcgKSAgLyogVVNBUlQgMSAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfU1NDICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDggKSAgLyogU2VyaWFsIFN5bmNocm9ub3VzIENvbnRyb2xsZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0lEX1RXSSAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSA5ICkgIC8qIFR3by1XaXJlIEludGVyZmFjZSAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfUFdNQyAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEwICkgLyogUFdNIENvbnRyb2xsZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0lEX1VEUCAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxMSApIC8qIFVTQiBEZXZpY2UgUG9ydCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfVEMwICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEyICkgLyogVGltZXIgQ291bnRlciAwICovDQotI2RlZmluZSBBVDkxQ19JRF9UQzEgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMTMgKSAvKiBUaW1lciBDb3VudGVyIDEgKi8NCi0jZGVmaW5lIEFUOTFDX0lEX1RDMiAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxNCApIC8qIFRpbWVyIENvdW50ZXIgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfQ0FOICAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDE1ICkgLyogQ29udHJvbCBBcmVhIE5ldHdvcmsgQ29udHJvbGxlciAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfRU1BQyAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDE2ICkgLyogRXRoZXJuZXQgTUFDICovDQotI2RlZmluZSBBVDkxQ19JRF9BREMgICAgICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMTcgKSAvKiBBbmFsb2ctdG8tRGlnaXRhbCBDb252ZXJ0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0lEX0FFUyAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxOCApIC8qIEFkdmFuY2VkIEVuY3J5cHRpb24gU3RhbmRhcmQgMTI4LWJpdCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfVERFUyAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDE5ICkgLyogVHJpcGxlIERhdGEgRW5jcnlwdGlvbiBTdGFuZGFyZCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfMjBfUmVzZXJ2ZWQgICAgKCAoIHVuc2lnbmVkIGludCApIDIwICkgLyogUmVzZXJ2ZWQgKi8NCi0jZGVmaW5lIEFUOTFDX0lEXzIxX1Jlc2VydmVkICAgICggKCB1bnNpZ25lZCBpbnQgKSAyMSApIC8qIFJlc2VydmVkICovDQotI2RlZmluZSBBVDkxQ19JRF8yMl9SZXNlcnZlZCAgICAoICggdW5zaWduZWQgaW50ICkgMjIgKSAvKiBSZXNlcnZlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfMjNfUmVzZXJ2ZWQgICAgKCAoIHVuc2lnbmVkIGludCApIDIzICkgLyogUmVzZXJ2ZWQgKi8NCi0jZGVmaW5lIEFUOTFDX0lEXzI0X1Jlc2VydmVkICAgICggKCB1bnNpZ25lZCBpbnQgKSAyNCApIC8qIFJlc2VydmVkICovDQotI2RlZmluZSBBVDkxQ19JRF8yNV9SZXNlcnZlZCAgICAoICggdW5zaWduZWQgaW50ICkgMjUgKSAvKiBSZXNlcnZlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfMjZfUmVzZXJ2ZWQgICAgKCAoIHVuc2lnbmVkIGludCApIDI2ICkgLyogUmVzZXJ2ZWQgKi8NCi0jZGVmaW5lIEFUOTFDX0lEXzI3X1Jlc2VydmVkICAgICggKCB1bnNpZ25lZCBpbnQgKSAyNyApIC8qIFJlc2VydmVkICovDQotI2RlZmluZSBBVDkxQ19JRF8yOF9SZXNlcnZlZCAgICAoICggdW5zaWduZWQgaW50ICkgMjggKSAvKiBSZXNlcnZlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfMjlfUmVzZXJ2ZWQgICAgKCAoIHVuc2lnbmVkIGludCApIDI5ICkgLyogUmVzZXJ2ZWQgKi8NCi0jZGVmaW5lIEFUOTFDX0lEX0lSUTAgICAgICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAzMCApIC8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChJUlEwKSAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfSVJRMSAgICAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDMxICkgLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKElSUTEpICovDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgIFBFUklQSEVSQUwgSUQgREVGSU5JVElPTlMgRk9SIEFUOTFTQU03WDI1Ng0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorI2RlZmluZSBBVDkxQ19JRF9GSVEgICAgKCh1bnNpZ25lZCBpbnQpICAwKSAvLyBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoRklRKQ0KKyNkZWZpbmUgQVQ5MUNfSURfU1lTICAgICgodW5zaWduZWQgaW50KSAgMSkgLy8gU3lzdGVtIFBlcmlwaGVyYWwNCisjZGVmaW5lIEFUOTFDX0lEX1BJT0EgICAoKHVuc2lnbmVkIGludCkgIDIpIC8vIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgQQ0KKyNkZWZpbmUgQVQ5MUNfSURfUElPQiAgICgodW5zaWduZWQgaW50KSAgMykgLy8gUGFyYWxsZWwgSU8gQ29udHJvbGxlciBCDQorI2RlZmluZSBBVDkxQ19JRF9TUEkwICAgKCh1bnNpZ25lZCBpbnQpICA0KSAvLyBTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgMA0KKyNkZWZpbmUgQVQ5MUNfSURfU1BJMSAgICgodW5zaWduZWQgaW50KSAgNSkgLy8gU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlIDENCisjZGVmaW5lIEFUOTFDX0lEX1VTMCAgICAoKHVuc2lnbmVkIGludCkgIDYpIC8vIFVTQVJUIDANCisjZGVmaW5lIEFUOTFDX0lEX1VTMSAgICAoKHVuc2lnbmVkIGludCkgIDcpIC8vIFVTQVJUIDENCisjZGVmaW5lIEFUOTFDX0lEX1NTQyAgICAoKHVuc2lnbmVkIGludCkgIDgpIC8vIFNlcmlhbCBTeW5jaHJvbm91cyBDb250cm9sbGVyDQorI2RlZmluZSBBVDkxQ19JRF9UV0kgICAgKCh1bnNpZ25lZCBpbnQpICA5KSAvLyBUd28tV2lyZSBJbnRlcmZhY2UNCisjZGVmaW5lIEFUOTFDX0lEX1BXTUMgICAoKHVuc2lnbmVkIGludCkgMTApIC8vIFBXTSBDb250cm9sbGVyDQorI2RlZmluZSBBVDkxQ19JRF9VRFAgICAgKCh1bnNpZ25lZCBpbnQpIDExKSAvLyBVU0IgRGV2aWNlIFBvcnQNCisjZGVmaW5lIEFUOTFDX0lEX1RDMCAgICAoKHVuc2lnbmVkIGludCkgMTIpIC8vIFRpbWVyIENvdW50ZXIgMA0KKyNkZWZpbmUgQVQ5MUNfSURfVEMxICAgICgodW5zaWduZWQgaW50KSAxMykgLy8gVGltZXIgQ291bnRlciAxDQorI2RlZmluZSBBVDkxQ19JRF9UQzIgICAgKCh1bnNpZ25lZCBpbnQpIDE0KSAvLyBUaW1lciBDb3VudGVyIDINCisjZGVmaW5lIEFUOTFDX0lEX0NBTiAgICAoKHVuc2lnbmVkIGludCkgMTUpIC8vIENvbnRyb2wgQXJlYSBOZXR3b3JrIENvbnRyb2xsZXINCisjZGVmaW5lIEFUOTFDX0lEX0VNQUMgICAoKHVuc2lnbmVkIGludCkgMTYpIC8vIEV0aGVybmV0IE1BQw0KKyNkZWZpbmUgQVQ5MUNfSURfQURDICAgICgodW5zaWduZWQgaW50KSAxNykgLy8gQW5hbG9nLXRvLURpZ2l0YWwgQ29udmVydGVyDQorI2RlZmluZSBBVDkxQ19JRF9BRVMgICAgKCh1bnNpZ25lZCBpbnQpIDE4KSAvLyBBZHZhbmNlZCBFbmNyeXB0aW9uIFN0YW5kYXJkIDEyOC1iaXQNCisjZGVmaW5lIEFUOTFDX0lEX1RERVMgICAoKHVuc2lnbmVkIGludCkgMTkpIC8vIFRyaXBsZSBEYXRhIEVuY3J5cHRpb24gU3RhbmRhcmQNCisjZGVmaW5lIEFUOTFDX0lEXzIwX1Jlc2VydmVkICgodW5zaWduZWQgaW50KSAyMCkgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzIxX1Jlc2VydmVkICgodW5zaWduZWQgaW50KSAyMSkgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzIyX1Jlc2VydmVkICgodW5zaWduZWQgaW50KSAyMikgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzIzX1Jlc2VydmVkICgodW5zaWduZWQgaW50KSAyMykgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzI0X1Jlc2VydmVkICgodW5zaWduZWQgaW50KSAyNCkgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzI1X1Jlc2VydmVkICgodW5zaWduZWQgaW50KSAyNSkgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzI2X1Jlc2VydmVkICgodW5zaWduZWQgaW50KSAyNikgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzI3X1Jlc2VydmVkICgodW5zaWduZWQgaW50KSAyNykgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzI4X1Jlc2VydmVkICgodW5zaWduZWQgaW50KSAyOCkgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzI5X1Jlc2VydmVkICgodW5zaWduZWQgaW50KSAyOSkgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEX0lSUTAgICAoKHVuc2lnbmVkIGludCkgMzApIC8vIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChJUlEwKQ0KKyNkZWZpbmUgQVQ5MUNfSURfSVJRMSAgICgodW5zaWduZWQgaW50KSAzMSkgLy8gQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKElSUTEpDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgIEJBU0UgQUREUkVTUyBERUZJTklUSU9OUyBGT1IgQVQ5MVNBTTdYMjU2ICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfU1lTICAgICAgICAgKCAoIEFUOTFQU19TWVMgKSAweEZGRkZGMDAwICkgICAgIC8qIChTWVMpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9BSUMgICAgICAgICAoICggQVQ5MVBTX0FJQyApIDB4RkZGRkYwMDAgKSAgICAgLyogKEFJQykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19EQkdVICAgICggKCBBVDkxUFNfUERDICkgMHhGRkZGRjMwMCApICAgICAvKiAoUERDX0RCR1UpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9EQkdVICAgICAgICAoICggQVQ5MVBTX0RCR1UgKSAweEZGRkZGMjAwICkgICAgLyogKERCR1UpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9QSU9BICAgICAgICAoICggQVQ5MVBTX1BJTyApIDB4RkZGRkY0MDAgKSAgICAgLyogKFBJT0EpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9QSU9CICAgICAgICAoICggQVQ5MVBTX1BJTyApIDB4RkZGRkY2MDAgKSAgICAgLyogKFBJT0IpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9DS0dSICAgICAgICAoICggQVQ5MVBTX0NLR1IgKSAweEZGRkZGQzIwICkgICAgLyogKENLR1IpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9QTUMgICAgICAgICAoICggQVQ5MVBTX1BNQyApIDB4RkZGRkZDMDAgKSAgICAgLyogKFBNQykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1JTVEMgICAgICAgICggKCBBVDkxUFNfUlNUQyApIDB4RkZGRkZEMDAgKSAgICAvKiAoUlNUQykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1JUVEMgICAgICAgICggKCBBVDkxUFNfUlRUQyApIDB4RkZGRkZEMjAgKSAgICAvKiAoUlRUQykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1BJVEMgICAgICAgICggKCBBVDkxUFNfUElUQyApIDB4RkZGRkZEMzAgKSAgICAvKiAoUElUQykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1dEVEMgICAgICAgICggKCBBVDkxUFNfV0RUQyApIDB4RkZGRkZENDAgKSAgICAvKiAoV0RUQykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1ZSRUcgICAgICAgICggKCBBVDkxUFNfVlJFRyApIDB4RkZGRkZENjAgKSAgICAvKiAoVlJFRykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX01DICAgICAgICAgICggKCBBVDkxUFNfTUMgKSAweEZGRkZGRjAwICkgICAgICAvKiAoTUMpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfU1BJMSAgICAoICggQVQ5MVBTX1BEQyApIDB4RkZGRTQxMDAgKSAgICAgLyogKFBEQ19TUEkxKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfU1BJMSAgICAgICAgKCAoIEFUOTFQU19TUEkgKSAweEZGRkU0MDAwICkgICAgIC8qIChTUEkxKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfUERDX1NQSTAgICAgKCAoIEFUOTFQU19QREMgKSAweEZGRkUwMTAwICkgICAgIC8qIChQRENfU1BJMCkgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1NQSTAgICAgICAgICggKCBBVDkxUFNfU1BJICkgMHhGRkZFMDAwMCApICAgICAvKiAoU1BJMCkgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19VUzEgICAgICggKCBBVDkxUFNfUERDICkgMHhGRkZDNDEwMCApICAgICAvKiAoUERDX1VTMSkgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1VTMSAgICAgICAgICggKCBBVDkxUFNfVVNBUlQgKSAweEZGRkM0MDAwICkgICAvKiAoVVMxKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfUERDX1VTMCAgICAgKCAoIEFUOTFQU19QREMgKSAweEZGRkMwMTAwICkgICAgIC8qIChQRENfVVMwKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfVVMwICAgICAgICAgKCAoIEFUOTFQU19VU0FSVCApIDB4RkZGQzAwMDAgKSAgIC8qIChVUzApIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfU1NDICAgICAoICggQVQ5MVBTX1BEQyApIDB4RkZGRDQxMDAgKSAgICAgLyogKFBEQ19TU0MpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9TU0MgICAgICAgICAoICggQVQ5MVBTX1NTQyApIDB4RkZGRDQwMDAgKSAgICAgLyogKFNTQykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1RXSSAgICAgICAgICggKCBBVDkxUFNfVFdJICkgMHhGRkZCODAwMCApICAgICAvKiAoVFdJKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfUFdNQ19DSDMgICAgKCAoIEFUOTFQU19QV01DX0NIICkgMHhGRkZDQzI2MCApIC8qIChQV01DX0NIMykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1BXTUNfQ0gyICAgICggKCBBVDkxUFNfUFdNQ19DSCApIDB4RkZGQ0MyNDAgKSAvKiAoUFdNQ19DSDIpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9QV01DX0NIMSAgICAoICggQVQ5MVBTX1BXTUNfQ0ggKSAweEZGRkNDMjIwICkgLyogKFBXTUNfQ0gxKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfUFdNQ19DSDAgICAgKCAoIEFUOTFQU19QV01DX0NIICkgMHhGRkZDQzIwMCApIC8qIChQV01DX0NIMCkgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1BXTUMgICAgICAgICggKCBBVDkxUFNfUFdNQyApIDB4RkZGQ0MwMDAgKSAgICAvKiAoUFdNQykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1VEUCAgICAgICAgICggKCBBVDkxUFNfVURQICkgMHhGRkZCMDAwMCApICAgICAvKiAoVURQKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfVEMwICAgICAgICAgKCAoIEFUOTFQU19UQyApIDB4RkZGQTAwMDAgKSAgICAgIC8qIChUQzApIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9UQzEgICAgICAgICAoICggQVQ5MVBTX1RDICkgMHhGRkZBMDA0MCApICAgICAgLyogKFRDMSkgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1RDMiAgICAgICAgICggKCBBVDkxUFNfVEMgKSAweEZGRkEwMDgwICkgICAgICAvKiAoVEMyKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfVENCICAgICAgICAgKCAoIEFUOTFQU19UQ0IgKSAweEZGRkEwMDAwICkgICAgIC8qIChUQ0IpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUIwICAgICAoICggQVQ5MVBTX0NBTl9NQiApIDB4RkZGRDAyMDAgKSAgLyogKENBTl9NQjApIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUIxICAgICAoICggQVQ5MVBTX0NBTl9NQiApIDB4RkZGRDAyMjAgKSAgLyogKENBTl9NQjEpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUIyICAgICAoICggQVQ5MVBTX0NBTl9NQiApIDB4RkZGRDAyNDAgKSAgLyogKENBTl9NQjIpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUIzICAgICAoICggQVQ5MVBTX0NBTl9NQiApIDB4RkZGRDAyNjAgKSAgLyogKENBTl9NQjMpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUI0ICAgICAoICggQVQ5MVBTX0NBTl9NQiApIDB4RkZGRDAyODAgKSAgLyogKENBTl9NQjQpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUI1ICAgICAoICggQVQ5MVBTX0NBTl9NQiApIDB4RkZGRDAyQTAgKSAgLyogKENBTl9NQjUpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUI2ICAgICAoICggQVQ5MVBTX0NBTl9NQiApIDB4RkZGRDAyQzAgKSAgLyogKENBTl9NQjYpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUI3ICAgICAoICggQVQ5MVBTX0NBTl9NQiApIDB4RkZGRDAyRTAgKSAgLyogKENBTl9NQjcpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9DQU4gICAgICAgICAoICggQVQ5MVBTX0NBTiApIDB4RkZGRDAwMDAgKSAgICAgLyogKENBTikgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX0VNQUMgICAgICAgICggKCBBVDkxUFNfRU1BQyApIDB4RkZGREMwMDAgKSAgICAvKiAoRU1BQykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19BREMgICAgICggKCBBVDkxUFNfUERDICkgMHhGRkZEODEwMCApICAgICAvKiAoUERDX0FEQykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX0FEQyAgICAgICAgICggKCBBVDkxUFNfQURDICkgMHhGRkZEODAwMCApICAgICAvKiAoQURDKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfUERDX0FFUyAgICAgKCAoIEFUOTFQU19QREMgKSAweEZGRkE0MTAwICkgICAgIC8qIChQRENfQUVTKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfQUVTICAgICAgICAgKCAoIEFUOTFQU19BRVMgKSAweEZGRkE0MDAwICkgICAgIC8qIChBRVMpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfVERFUyAgICAoICggQVQ5MVBTX1BEQyApIDB4RkZGQTgxMDAgKSAgICAgLyogKFBEQ19UREVTKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfVERFUyAgICAgICAgKCAoIEFUOTFQU19UREVTICkgMHhGRkZBODAwMCApICAgIC8qIChUREVTKSBCYXNlIEFkZHJlc3MgKi8NCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICAgQkFTRSBBRERSRVNTIERFRklOSVRJT05TIEZPUiBBVDkxU0FNN1gyNTYNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9TWVMgICAgICAgKChBVDkxUFNfU1lTKSAJMHhGRkZGRjAwMCkgLy8gKFNZUykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0FJQyAgICAgICAoKEFUOTFQU19BSUMpIAkweEZGRkZGMDAwKSAvLyAoQUlDKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUERDX0RCR1UgICgoQVQ5MVBTX1BEQykgCTB4RkZGRkYzMDApIC8vIChQRENfREJHVSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0RCR1UgICAgICAoKEFUOTFQU19EQkdVKSAJMHhGRkZGRjIwMCkgLy8gKERCR1UpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QSU9BICAgICAgKChBVDkxUFNfUElPKSAJMHhGRkZGRjQwMCkgLy8gKFBJT0EpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QSU9CICAgICAgKChBVDkxUFNfUElPKSAJMHhGRkZGRjYwMCkgLy8gKFBJT0IpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DS0dSICAgICAgKChBVDkxUFNfQ0tHUikgCTB4RkZGRkZDMjApIC8vIChDS0dSKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUE1DICAgICAgICgoQVQ5MVBTX1BNQykgCTB4RkZGRkZDMDApIC8vIChQTUMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9SU1RDICAgICAgKChBVDkxUFNfUlNUQykgCTB4RkZGRkZEMDApIC8vIChSU1RDKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUlRUQyAgICAgICgoQVQ5MVBTX1JUVEMpIAkweEZGRkZGRDIwKSAvLyAoUlRUQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BJVEMgICAgICAoKEFUOTFQU19QSVRDKSAJMHhGRkZGRkQzMCkgLy8gKFBJVEMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9XRFRDICAgICAgKChBVDkxUFNfV0RUQykgCTB4RkZGRkZENDApIC8vIChXRFRDKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfVlJFRyAgICAgICgoQVQ5MVBTX1ZSRUcpIAkweEZGRkZGRDYwKSAvLyAoVlJFRykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX01DICAgICAgICAoKEFUOTFQU19NQykgCTB4RkZGRkZGMDApIC8vIChNQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19TUEkxICAoKEFUOTFQU19QREMpIAkweEZGRkU0MTAwKSAvLyAoUERDX1NQSTEpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9TUEkxICAgICAgKChBVDkxUFNfU1BJKSAJMHhGRkZFNDAwMCkgLy8gKFNQSTEpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfU1BJMCAgKChBVDkxUFNfUERDKSAJMHhGRkZFMDEwMCkgLy8gKFBEQ19TUEkwKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfU1BJMCAgICAgICgoQVQ5MVBTX1NQSSkgCTB4RkZGRTAwMDApIC8vIChTUEkwKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUERDX1VTMSAgICgoQVQ5MVBTX1BEQykgCTB4RkZGQzQxMDApIC8vIChQRENfVVMxKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfVVMxICAgICAgICgoQVQ5MVBTX1VTQVJUKSAJMHhGRkZDNDAwMCkgLy8gKFVTMSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19VUzAgICAoKEFUOTFQU19QREMpIAkweEZGRkMwMTAwKSAvLyAoUERDX1VTMCkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1VTMCAgICAgICAoKEFUOTFQU19VU0FSVCkgCTB4RkZGQzAwMDApIC8vIChVUzApIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfU1NDICAgKChBVDkxUFNfUERDKSAJMHhGRkZENDEwMCkgLy8gKFBEQ19TU0MpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9TU0MgICAgICAgKChBVDkxUFNfU1NDKSAJMHhGRkZENDAwMCkgLy8gKFNTQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1RXSSAgICAgICAoKEFUOTFQU19UV0kpIAkweEZGRkI4MDAwKSAvLyAoVFdJKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUFdNQ19DSDMgICgoQVQ5MVBTX1BXTUNfQ0gpIAkweEZGRkNDMjYwKSAvLyAoUFdNQ19DSDMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QV01DX0NIMiAgKChBVDkxUFNfUFdNQ19DSCkgCTB4RkZGQ0MyNDApIC8vIChQV01DX0NIMikgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BXTUNfQ0gxICAoKEFUOTFQU19QV01DX0NIKSAJMHhGRkZDQzIyMCkgLy8gKFBXTUNfQ0gxKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUFdNQ19DSDAgICgoQVQ5MVBTX1BXTUNfQ0gpIAkweEZGRkNDMjAwKSAvLyAoUFdNQ19DSDApIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QV01DICAgICAgKChBVDkxUFNfUFdNQykgCTB4RkZGQ0MwMDApIC8vIChQV01DKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfVURQICAgICAgICgoQVQ5MVBTX1VEUCkgCTB4RkZGQjAwMDApIC8vIChVRFApIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9UQzAgICAgICAgKChBVDkxUFNfVEMpIAkweEZGRkEwMDAwKSAvLyAoVEMwKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfVEMxICAgICAgICgoQVQ5MVBTX1RDKSAJMHhGRkZBMDA0MCkgLy8gKFRDMSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1RDMiAgICAgICAoKEFUOTFQU19UQykgCTB4RkZGQTAwODApIC8vIChUQzIpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9UQ0IgICAgICAgKChBVDkxUFNfVENCKSAJMHhGRkZBMDAwMCkgLy8gKFRDQikgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0NBTl9NQjAgICAoKEFUOTFQU19DQU5fTUIpIAkweEZGRkQwMjAwKSAvLyAoQ0FOX01CMCkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0NBTl9NQjEgICAoKEFUOTFQU19DQU5fTUIpIAkweEZGRkQwMjIwKSAvLyAoQ0FOX01CMSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0NBTl9NQjIgICAoKEFUOTFQU19DQU5fTUIpIAkweEZGRkQwMjQwKSAvLyAoQ0FOX01CMikgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0NBTl9NQjMgICAoKEFUOTFQU19DQU5fTUIpIAkweEZGRkQwMjYwKSAvLyAoQ0FOX01CMykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0NBTl9NQjQgICAoKEFUOTFQU19DQU5fTUIpIAkweEZGRkQwMjgwKSAvLyAoQ0FOX01CNCkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0NBTl9NQjUgICAoKEFUOTFQU19DQU5fTUIpIAkweEZGRkQwMkEwKSAvLyAoQ0FOX01CNSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0NBTl9NQjYgICAoKEFUOTFQU19DQU5fTUIpIAkweEZGRkQwMkMwKSAvLyAoQ0FOX01CNikgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0NBTl9NQjcgICAoKEFUOTFQU19DQU5fTUIpIAkweEZGRkQwMkUwKSAvLyAoQ0FOX01CNykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0NBTiAgICAgICAoKEFUOTFQU19DQU4pIAkweEZGRkQwMDAwKSAvLyAoQ0FOKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfRU1BQyAgICAgICgoQVQ5MVBTX0VNQUMpIAkweEZGRkRDMDAwKSAvLyAoRU1BQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19BREMgICAoKEFUOTFQU19QREMpIAkweEZGRkQ4MTAwKSAvLyAoUERDX0FEQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0FEQyAgICAgICAoKEFUOTFQU19BREMpIAkweEZGRkQ4MDAwKSAvLyAoQURDKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUERDX0FFUyAgICgoQVQ5MVBTX1BEQykgCTB4RkZGQTQxMDApIC8vIChQRENfQUVTKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfQUVTICAgICAgICgoQVQ5MVBTX0FFUykgCTB4RkZGQTQwMDApIC8vIChBRVMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfVERFUyAgKChBVDkxUFNfUERDKSAJMHhGRkZBODEwMCkgLy8gKFBEQ19UREVTKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfVERFUyAgICAgICgoQVQ5MVBTX1RERVMpIAkweEZGRkE4MDAwKSAvLyAoVERFUykgQmFzZSBBZGRyZXNzDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgIE1FTU9SWSBNQVBQSU5HIERFRklOSVRJT05TIEZPUiBBVDkxU0FNN1gyNTYgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLSNkZWZpbmUgQVQ5MUNfSVNSQU0gICAgICAgICAgKCAoIGNoYXIgKiApIDB4MDAyMDAwMDAgKSAgICAgICAvKiBJbnRlcm5hbCBTUkFNIGJhc2UgYWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfSVNSQU1fU0laRSAgICAgKCAoIHVuc2lnbmVkIGludCApIDB4MDAwMTAwMDAgKSAvKiBJbnRlcm5hbCBTUkFNIHNpemUgaW4gYnl0ZSAoNjQgS2J5dGUpICovDQotI2RlZmluZSBBVDkxQ19JRkxBU0ggICAgICAgICAoICggY2hhciAqICkgMHgwMDEwMDAwMCApICAgICAgIC8qIEludGVybmFsIFJPTSBiYXNlIGFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0lGTEFTSF9TSVpFICAgICggKCB1bnNpZ25lZCBpbnQgKSAweDAwMDQwMDAwICkgLyogSW50ZXJuYWwgUk9NIHNpemUgaW4gYnl0ZSAoMjU2IEtieXRlKSAqLw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgICBNRU1PUlkgTUFQUElORyBERUZJTklUSU9OUyBGT1IgQVQ5MVNBTTdYMjU2DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisjZGVmaW5lIEFUOTFDX0lTUkFNCSAoKGNoYXIgKikgCTB4MDAyMDAwMDApIC8vIEludGVybmFsIFNSQU0gYmFzZSBhZGRyZXNzDQorI2RlZmluZSBBVDkxQ19JU1JBTV9TSVpFCSAoKHVuc2lnbmVkIGludCkgMHgwMDAxMDAwMCkgLy8gSW50ZXJuYWwgU1JBTSBzaXplIGluIGJ5dGUgKDY0IEtieXRlKQ0KKyNkZWZpbmUgQVQ5MUNfSUZMQVNICSAoKGNoYXIgKikgCTB4MDAxMDAwMDApIC8vIEludGVybmFsIFJPTSBiYXNlIGFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0lGTEFTSF9TSVpFCSAoKHVuc2lnbmVkIGludCkgMHgwMDA0MDAwMCkgLy8gSW50ZXJuYWwgUk9NIHNpemUgaW4gYnl0ZSAoMjU2IEtieXRlKQ0KIA0KLSNlbmRpZiAvKiBpZm5kZWYgQVQ5MVNBTTdYMjU2X0ggKi8NCisjZW5kaWYNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9JQVIvQXRtZWxTQU03UzY0L0FUOTFTQU03WDI1Nl9pbmMuaCBiL3BvcnRhYmxlL0lBUi9BdG1lbFNBTTdTNjQvQVQ5MVNBTTdYMjU2X2luYy5oCmluZGV4IGU1MGJkODIuLjViOGRmZTggMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0lBUi9BdG1lbFNBTTdTNjQvQVQ5MVNBTTdYMjU2X2luYy5oCisrKyBiL3BvcnRhYmxlL0lBUi9BdG1lbFNBTTdTNjQvQVQ5MVNBTTdYMjU2X2luYy5oCkBAIC0xLDI0NDQgKzEsMjQ0NiBAQAotLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiAgICAgICAgICBBVE1FTCBNaWNyb2NvbnRyb2xsZXIgU29mdHdhcmUgU3VwcG9ydCAgLSAgUk9VU1NFVCAgLSAqLw0KLS8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyogIERJU0NMQUlNRVI6ICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFUTUVMICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SICovDQotLyogIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgKi8NCi0vKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVCBBUkUgKi8NCi0vKiAgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVRNRUwgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgKi8NCi0vKiAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCAqLw0KLS8qICBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgKi8NCi0vKiAgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiAqLw0KLS8qICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyAqLw0KLS8qICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsICovDQotLyogIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuICovDQotLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiBGaWxlIE5hbWUgICAgICAgICAgIDogQVQ5MVNBTTdYMjU2LmggKi8NCi0vKiBPYmplY3QgICAgICAgICAgICAgIDogQVQ5MVNBTTdYMjU2IGRlZmluaXRpb25zICovDQotLyogR2VuZXJhdGVkICAgICAgICAgICA6IEFUOTEgU1cgQXBwbGljYXRpb24gR3JvdXAgIDA1LzIwLzIwMDUgKDE2OjIyOjI5KSAqLw0KLS8qICovDQotLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9BVDkxU0FNN1gyNTYucGwvMS4xMS9UdWUgTWF5IDEwIDEyOjE1OjMyIDIwMDUvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvU1lTX1NBTTdYLnBsLzEuMy9UdWUgRmViICAxIDE3OjAxOjQzIDIwMDUvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvTUNfU0FNN1gucGwvMS4yL0ZyaSBNYXkgMjAgMTQ6MTM6MDQgMjAwNS8vICovDQotLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9QTUNfU0FNN1gucGwvMS40L1R1ZSBGZWIgIDggMTM6NTg6MTAgMjAwNS8vICovDQotLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9SU1RDX1NBTTdYLnBsLzEuMS9UdWUgRmViICAxIDE2OjE2OjI2IDIwMDUvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvVURQX1NBTTdYLnBsLzEuMS9UdWUgTWF5IDEwIDExOjM1OjM1IDIwMDUvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvUFdNX1NBTTdYLnBsLzEuMS9UdWUgTWF5IDEwIDExOjUzOjA3IDIwMDUvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvQUlDXzYwNzVCLnBsLzEuMy9GcmkgTWF5IDIwIDE0OjAxOjMwIDIwMDUvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvUElPXzYwNTdBLnBsLzEuMi9UaHUgRmViICAzIDEwOjE4OjI4IDIwMDUvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvUlRUQ182MDgxQS5wbC8xLjIvVHVlIE5vdiAgOSAxNDo0Mzo1OCAyMDA0Ly8gKi8NCi0vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL1BJVENfNjA3OUEucGwvMS4yL1R1ZSBOb3YgIDkgMTQ6NDM6NTYgMjAwNC8vICovDQotLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9XRFRDXzYwODBBLnBsLzEuMy9UdWUgTm92ICA5IDE0OjQ0OjAwIDIwMDQvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvVlJFR182MDg1Qi5wbC8xLjEvVHVlIEZlYiAgMSAxNjowNTo0OCAyMDA1Ly8gKi8NCi0vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL1BEQ182MDc0Qy5wbC8xLjIvVGh1IEZlYiAgMyAwODo0ODo1NCAyMDA1Ly8gKi8NCi0vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL0RCR1VfNjA1OUQucGwvMS4xL01vbiBKYW4gMzEgMTM6MTU6MzIgMjAwNS8vICovDQotLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9TUElfNjA4OEQucGwvMS4zL0ZyaSBNYXkgMjAgMTQ6MDg6NTkgMjAwNS8vICovDQotLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9VU182MDg5Qy5wbC8xLjEvTW9uIEp1bCAxMiAxODoyMzoyNiAyMDA0Ly8gKi8NCi0vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL1NTQ182MDc4QS5wbC8xLjEvVHVlIEp1bCAxMyAwNzo0NTo0MCAyMDA0Ly8gKi8NCi0vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL1RXSV82MDYxQS5wbC8xLjEvVHVlIEp1bCAxMyAwNzozODowNiAyMDA0Ly8gKi8NCi0vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL1RDXzYwODJBLnBsLzEuNy9GcmkgTWFyIDExIDEyOjUyOjE3IDIwMDUvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvQ0FOXzYwMTlCLnBsLzEuMS9UdWUgTWFyICA4IDEyOjQyOjIyIDIwMDUvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvRU1BQ0JfNjExOUEucGwvMS41L1RodSBGZWIgIDMgMTU6NTI6MDQgMjAwNS8vICovDQotLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9BRENfNjA1MUMucGwvMS4xL0ZyaSBPY3QgMTcgMDk6MTI6MzggMjAwMy8vICovDQotLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9BRVNfNjE0OUEucGwvMS4xMC9Nb24gRmViICA3IDA5OjQ0OjI1IDIwMDUvLyAqLw0KLS8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvREVTM182MTUwQS5wbC8xLjEvTW9uIEphbiAxNyAwODozNDozMSAyMDA1Ly8gKi8NCi0vKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKy8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8gICAgICAgICAgQVRNRUwgTWljcm9jb250cm9sbGVyIFNvZnR3YXJlIFN1cHBvcnQgIC0gIFJPVVNTRVQgIC0NCisvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vICBESVNDTEFJTUVSOiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVE1FTCAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUg0KKy8vICBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GDQorLy8gIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQgQVJFDQorLy8gIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFUTUVMIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsDQorLy8gIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QNCisvLyAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsDQorLy8gIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YNCisvLyAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcNCisvLyAgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLA0KKy8vICBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKy8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8gRmlsZSBOYW1lICAgICAgICAgICA6IEFUOTFTQU03WDI1Ni5oDQorLy8gT2JqZWN0ICAgICAgICAgICAgICA6IEFUOTFTQU03WDI1NiBkZWZpbml0aW9ucw0KKy8vIEdlbmVyYXRlZCAgICAgICAgICAgOiBBVDkxIFNXIEFwcGxpY2F0aW9uIEdyb3VwICAwNS8yMC8yMDA1ICgxNjoyMjoyOSkNCisvLyANCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL0FUOTFTQU03WDI1Ni5wbC8xLjExL1R1ZSBNYXkgMTAgMTI6MTU6MzIgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9TWVNfU0FNN1gucGwvMS4zL1R1ZSBGZWIgIDEgMTc6MDE6NDMgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9NQ19TQU03WC5wbC8xLjIvRnJpIE1heSAyMCAxNDoxMzowNCAyMDA1Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1BNQ19TQU03WC5wbC8xLjQvVHVlIEZlYiAgOCAxMzo1ODoxMCAyMDA1Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1JTVENfU0FNN1gucGwvMS4xL1R1ZSBGZWIgIDEgMTY6MTY6MjYgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9VRFBfU0FNN1gucGwvMS4xL1R1ZSBNYXkgMTAgMTE6MzU6MzUgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9QV01fU0FNN1gucGwvMS4xL1R1ZSBNYXkgMTAgMTE6NTM6MDcgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9BSUNfNjA3NUIucGwvMS4zL0ZyaSBNYXkgMjAgMTQ6MDE6MzAgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9QSU9fNjA1N0EucGwvMS4yL1RodSBGZWIgIDMgMTA6MTg6MjggMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9SVFRDXzYwODFBLnBsLzEuMi9UdWUgTm92ICA5IDE0OjQzOjU4IDIwMDQvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvUElUQ182MDc5QS5wbC8xLjIvVHVlIE5vdiAgOSAxNDo0Mzo1NiAyMDA0Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1dEVENfNjA4MEEucGwvMS4zL1R1ZSBOb3YgIDkgMTQ6NDQ6MDAgMjAwNC8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9WUkVHXzYwODVCLnBsLzEuMS9UdWUgRmViICAxIDE2OjA1OjQ4IDIwMDUvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvUERDXzYwNzRDLnBsLzEuMi9UaHUgRmViICAzIDA4OjQ4OjU0IDIwMDUvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvREJHVV82MDU5RC5wbC8xLjEvTW9uIEphbiAzMSAxMzoxNTozMiAyMDA1Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1NQSV82MDg4RC5wbC8xLjMvRnJpIE1heSAyMCAxNDowODo1OSAyMDA1Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL1VTXzYwODlDLnBsLzEuMS9Nb24gSnVsIDEyIDE4OjIzOjI2IDIwMDQvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvU1NDXzYwNzhBLnBsLzEuMS9UdWUgSnVsIDEzIDA3OjQ1OjQwIDIwMDQvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvVFdJXzYwNjFBLnBsLzEuMS9UdWUgSnVsIDEzIDA3OjM4OjA2IDIwMDQvLw0KKy8vIENWUyBSZWZlcmVuY2UgICAgICAgOiAvVENfNjA4MkEucGwvMS43L0ZyaSBNYXIgMTEgMTI6NTI6MTcgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9DQU5fNjAxOUIucGwvMS4xL1R1ZSBNYXIgIDggMTI6NDI6MjIgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9FTUFDQl82MTE5QS5wbC8xLjUvVGh1IEZlYiAgMyAxNTo1MjowNCAyMDA1Ly8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL0FEQ182MDUxQy5wbC8xLjEvRnJpIE9jdCAxNyAwOToxMjozOCAyMDAzLy8NCisvLyBDVlMgUmVmZXJlbmNlICAgICAgIDogL0FFU182MTQ5QS5wbC8xLjEwL01vbiBGZWIgIDcgMDk6NDQ6MjUgMjAwNS8vDQorLy8gQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9ERVMzXzYxNTBBLnBsLzEuMS9Nb24gSmFuIDE3IDA4OjM0OjMxIDIwMDUvLw0KKy8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogDQotLyogSGFyZHdhcmUgcmVnaXN0ZXIgZGVmaW5pdGlvbiAqLw0KKy8vIEhhcmR3YXJlIHJlZ2lzdGVyIGRlZmluaXRpb24NCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFN5c3RlbSBQZXJpcGhlcmFscyAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBTeXN0ZW0gUGVyaXBoZXJhbHMNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfQUlDIHN0cnVjdHVyZSAqKiogKi8NCi0jZGVmaW5lIEFJQ19TTVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDAgKSAgICAgICAgLyogU291cmNlIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFJQ19TVlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDEyOCApICAgICAgLyogU291cmNlIFZlY3RvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQUlDX0lWUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMjU2ICkgICAgICAvKiBJUlEgVmVjdG9yIFJlZ2lzdGVyICovDQotI2RlZmluZSBBSUNfRlZSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAyNjAgKSAgICAgIC8qIEZJUSBWZWN0b3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFJQ19JU1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDI2NCApICAgICAgLyogSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQUlDX0lQUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMjY4ICkgICAgICAvKiBJbnRlcnJ1cHQgUGVuZGluZyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQUlDX0lNUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMjcyICkgICAgICAvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQUlDX0NJU1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMjc2ICkgICAgICAvKiBDb3JlIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFJQ19JRUNSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDI4OCApICAgICAgLyogSW50ZXJydXB0IEVuYWJsZSBDb21tYW5kIFJlZ2lzdGVyICovDQotI2RlZmluZSBBSUNfSURDUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAyOTIgKSAgICAgIC8qIEludGVycnVwdCBEaXNhYmxlIENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFJQ19JQ0NSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDI5NiApICAgICAgLyogSW50ZXJydXB0IENsZWFyIENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFJQ19JU0NSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDMwMCApICAgICAgLyogSW50ZXJydXB0IFNldCBDb21tYW5kIFJlZ2lzdGVyICovDQotI2RlZmluZSBBSUNfRU9JQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAzMDQgKSAgICAgIC8qIEVuZCBvZiBJbnRlcnJ1cHQgQ29tbWFuZCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQUlDX1NQVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMzA4ICkgICAgICAvKiBTcHVyaW91cyBWZWN0b3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFJQ19EQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDMxMiApICAgICAgLyogRGVidWcgQ29udHJvbCBSZWdpc3RlciAoUHJvdGVjdCkgKi8NCi0jZGVmaW5lIEFJQ19GRkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDMyMCApICAgICAgLyogRmFzdCBGb3JjaW5nIEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQUlDX0ZGRFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMzI0ICkgICAgICAvKiBGYXN0IEZvcmNpbmcgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQUlDX0ZGU1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMzI4ICkgICAgICAvKiBGYXN0IEZvcmNpbmcgU3RhdHVzIFJlZ2lzdGVyICovDQotLyogLS0tLS0tLS0gQUlDX1NNUiA6IChBSUMgT2Zmc2V0OiAweDApIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19QUklPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDB4NyA8PCAwICkgLyogKEFJQykgUHJpb3JpdHkgTGV2ZWwgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BSUNfUFJJT1JfTE9XRVNUICAgICAgICAgICAgICAgICAoIDB4MCApICAgICAgLyogKEFJQykgTG93ZXN0IHByaW9yaXR5IGxldmVsICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUlDX1BSSU9SX0hJR0hFU1QgICAgICAgICAgICAgICAgKCAweDcgKSAgICAgIC8qIChBSUMpIEhpZ2hlc3QgcHJpb3JpdHkgbGV2ZWwgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19TUkNUWVBFICAgICAgICAgICAgICAgICAgICAgICAgICAoIDB4MyA8PCA1ICkgLyogKEFJQykgSW50ZXJydXB0IFNvdXJjZSBUeXBlICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUlDX1NSQ1RZUEVfSU5UX0hJR0hfTEVWRUwgICAgICAgKCAweDAgPDwgNSApIC8qIChBSUMpIEludGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBIaWdoLWxldmVsIFNlbnNpdGl2ZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FJQ19TUkNUWVBFX0VYVF9MT1dfTEVWRUwgICAgICAgICggMHgwIDw8IDUgKSAvKiAoQUlDKSBFeHRlcm5hbCBTb3VyY2VzIENvZGUgTGFiZWwgTG93LWxldmVsIFNlbnNpdGl2ZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FJQ19TUkNUWVBFX0lOVF9QT1NJVElWRV9FREdFICAgICggMHgxIDw8IDUgKSAvKiAoQUlDKSBJbnRlcm5hbCBTb3VyY2VzIENvZGUgTGFiZWwgUG9zaXRpdmUgRWRnZSB0cmlnZ2VyZWQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BSUNfU1JDVFlQRV9FWFRfTkVHQVRJVkVfRURHRSAgICAoIDB4MSA8PCA1ICkgLyogKEFJQykgRXh0ZXJuYWwgU291cmNlcyBDb2RlIExhYmVsIE5lZ2F0aXZlIEVkZ2UgdHJpZ2dlcmVkICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUlDX1NSQ1RZUEVfSElHSF9MRVZFTCAgICAgICAgICAgKCAweDIgPDwgNSApIC8qIChBSUMpIEludGVybmFsIE9yIEV4dGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBIaWdoLWxldmVsIFNlbnNpdGl2ZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FJQ19TUkNUWVBFX1BPU0lUSVZFX0VER0UgICAgICAgICggMHgzIDw8IDUgKSAvKiAoQUlDKSBJbnRlcm5hbCBPciBFeHRlcm5hbCBTb3VyY2VzIENvZGUgTGFiZWwgUG9zaXRpdmUgRWRnZSB0cmlnZ2VyZWQgKi8NCi0vKiAtLS0tLS0tLSBBSUNfQ0lTUiA6IChBSUMgT2Zmc2V0OiAweDExNCkgQUlDIENvcmUgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX05GSVEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDAgKSAvKiAoQUlDKSBORklRIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX05JUlEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDEgKSAvKiAoQUlDKSBOSVJRIFN0YXR1cyAqLw0KLS8qIC0tLS0tLS0tIEFJQ19EQ1IgOiAoQUlDIE9mZnNldDogMHgxMzgpIEFJQyBEZWJ1ZyBDb250cm9sIFJlZ2lzdGVyIChQcm90ZWN0KSAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX0RDUl9QUk9UICAgICAgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDAgKSAvKiAoQUlDKSBQcm90ZWN0aW9uIE1vZGUgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19EQ1JfR01TSyAgICAgICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxICkgLyogKEFJQykgR2VuZXJhbCBNYXNrICovDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlcg0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19BSUMgc3RydWN0dXJlICoqKg0KKyNkZWZpbmUgQUlDX1NNUiAgICAgICAgICggMCkgLy8gU291cmNlIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFJQ19TVlIgICAgICAgICAoMTI4KSAvLyBTb3VyY2UgVmVjdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBSUNfSVZSICAgICAgICAgKDI1NikgLy8gSVJRIFZlY3RvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQUlDX0ZWUiAgICAgICAgICgyNjApIC8vIEZJUSBWZWN0b3IgUmVnaXN0ZXINCisjZGVmaW5lIEFJQ19JU1IgICAgICAgICAoMjY0KSAvLyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBSUNfSVBSICAgICAgICAgKDI2OCkgLy8gSW50ZXJydXB0IFBlbmRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFJQ19JTVIgICAgICAgICAoMjcyKSAvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQUlDX0NJU1IgICAgICAgICgyNzYpIC8vIENvcmUgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQUlDX0lFQ1IgICAgICAgICgyODgpIC8vIEludGVycnVwdCBFbmFibGUgQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQUlDX0lEQ1IgICAgICAgICgyOTIpIC8vIEludGVycnVwdCBEaXNhYmxlIENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIEFJQ19JQ0NSICAgICAgICAoMjk2KSAvLyBJbnRlcnJ1cHQgQ2xlYXIgQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQUlDX0lTQ1IgICAgICAgICgzMDApIC8vIEludGVycnVwdCBTZXQgQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQUlDX0VPSUNSICAgICAgICgzMDQpIC8vIEVuZCBvZiBJbnRlcnJ1cHQgQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQUlDX1NQVSAgICAgICAgICgzMDgpIC8vIFNwdXJpb3VzIFZlY3RvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQUlDX0RDUiAgICAgICAgICgzMTIpIC8vIERlYnVnIENvbnRyb2wgUmVnaXN0ZXIgKFByb3RlY3QpDQorI2RlZmluZSBBSUNfRkZFUiAgICAgICAgKDMyMCkgLy8gRmFzdCBGb3JjaW5nIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQUlDX0ZGRFIgICAgICAgICgzMjQpIC8vIEZhc3QgRm9yY2luZyBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBSUNfRkZTUiAgICAgICAgKDMyOCkgLy8gRmFzdCBGb3JjaW5nIFN0YXR1cyBSZWdpc3Rlcg0KKy8vIC0tLS0tLS0tIEFJQ19TTVIgOiAoQUlDIE9mZnNldDogMHgwKSBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQUlDX1BSSU9SICAgICAgICAgICAoMHg3IDw8ICAwKSAvLyAoQUlDKSBQcmlvcml0eSBMZXZlbA0KKyNkZWZpbmUgCUFUOTFDX0FJQ19QUklPUl9MT1dFU1QgICAgICAgICAgICAgICAoMHgwKSAvLyAoQUlDKSBMb3dlc3QgcHJpb3JpdHkgbGV2ZWwNCisjZGVmaW5lIAlBVDkxQ19BSUNfUFJJT1JfSElHSEVTVCAgICAgICAgICAgICAgKDB4NykgLy8gKEFJQykgSGlnaGVzdCBwcmlvcml0eSBsZXZlbA0KKyNkZWZpbmUgQVQ5MUNfQUlDX1NSQ1RZUEUgICAgICAgICAoMHgzIDw8ICA1KSAvLyAoQUlDKSBJbnRlcnJ1cHQgU291cmNlIFR5cGUNCisjZGVmaW5lIAlBVDkxQ19BSUNfU1JDVFlQRV9JTlRfSElHSF9MRVZFTCAgICAgICAoMHgwIDw8ICA1KSAvLyAoQUlDKSBJbnRlcm5hbCBTb3VyY2VzIENvZGUgTGFiZWwgSGlnaC1sZXZlbCBTZW5zaXRpdmUNCisjZGVmaW5lIAlBVDkxQ19BSUNfU1JDVFlQRV9FWFRfTE9XX0xFVkVMICAgICAgICAoMHgwIDw8ICA1KSAvLyAoQUlDKSBFeHRlcm5hbCBTb3VyY2VzIENvZGUgTGFiZWwgTG93LWxldmVsIFNlbnNpdGl2ZQ0KKyNkZWZpbmUgCUFUOTFDX0FJQ19TUkNUWVBFX0lOVF9QT1NJVElWRV9FREdFICAgICgweDEgPDwgIDUpIC8vIChBSUMpIEludGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBQb3NpdGl2ZSBFZGdlIHRyaWdnZXJlZA0KKyNkZWZpbmUgCUFUOTFDX0FJQ19TUkNUWVBFX0VYVF9ORUdBVElWRV9FREdFICAgICgweDEgPDwgIDUpIC8vIChBSUMpIEV4dGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBOZWdhdGl2ZSBFZGdlIHRyaWdnZXJlZA0KKyNkZWZpbmUgCUFUOTFDX0FJQ19TUkNUWVBFX0hJR0hfTEVWRUwgICAgICAgICAgICgweDIgPDwgIDUpIC8vIChBSUMpIEludGVybmFsIE9yIEV4dGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBIaWdoLWxldmVsIFNlbnNpdGl2ZQ0KKyNkZWZpbmUgCUFUOTFDX0FJQ19TUkNUWVBFX1BPU0lUSVZFX0VER0UgICAgICAgICgweDMgPDwgIDUpIC8vIChBSUMpIEludGVybmFsIE9yIEV4dGVybmFsIFNvdXJjZXMgQ29kZSBMYWJlbCBQb3NpdGl2ZSBFZGdlIHRyaWdnZXJlZA0KKy8vIC0tLS0tLS0tIEFJQ19DSVNSIDogKEFJQyBPZmZzZXQ6IDB4MTE0KSBBSUMgQ29yZSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQUlDX05GSVEgICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoQUlDKSBORklRIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfQUlDX05JUlEgICAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoQUlDKSBOSVJRIFN0YXR1cw0KKy8vIC0tLS0tLS0tIEFJQ19EQ1IgOiAoQUlDIE9mZnNldDogMHgxMzgpIEFJQyBEZWJ1ZyBDb250cm9sIFJlZ2lzdGVyIChQcm90ZWN0KSAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FJQ19EQ1JfUFJPVCAgICAgICAgKDB4MSA8PCAgMCkgLy8gKEFJQykgUHJvdGVjdGlvbiBNb2RlDQorI2RlZmluZSBBVDkxQ19BSUNfRENSX0dNU0sgICAgICAgICgweDEgPDwgIDEpIC8vIChBSUMpIEdlbmVyYWwgTWFzaw0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUGVyaXBoZXJhbCBETUEgQ29udHJvbGxlciAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19QREMgc3RydWN0dXJlICoqKiAqLw0KLSNkZWZpbmUgUERDX1JQUiAgICAgICAgICAgICAoIDAgKSAgICAgICAgLyogUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBQRENfUkNSICAgICAgICAgICAgICggNCApICAgICAgICAvKiBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBEQ19UUFIgICAgICAgICAgICAgKCA4ICkgICAgICAgIC8qIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBEQ19UQ1IgICAgICAgICAgICAgKCAxMiApICAgICAgIC8qIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBEQ19STlBSICAgICAgICAgICAgKCAxNiApICAgICAgIC8qIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBQRENfUk5DUiAgICAgICAgICAgICggMjAgKSAgICAgICAvKiBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUERDX1ROUFIgICAgICAgICAgICAoIDI0ICkgICAgICAgLyogVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBQRENfVE5DUiAgICAgICAgICAgICggMjggKSAgICAgICAvKiBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBEQ19QVENSICAgICAgICAgICAgKCAzMiApICAgICAgIC8qIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBQRENfUFRTUiAgICAgICAgICAgICggMzYgKSAgICAgICAvKiBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotLyogLS0tLS0tLS0gUERDX1BUQ1IgOiAoUERDIE9mZnNldDogMHgyMCkgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1BEQ19SWFRFTiAgICAgKCAweDEgPDwgMCApIC8qIChQREMpIFJlY2VpdmVyIFRyYW5zZmVyIEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfUERDX1JYVERJUyAgICAoIDB4MSA8PCAxICkgLyogKFBEQykgUmVjZWl2ZXIgVHJhbnNmZXIgRGlzYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfUERDX1RYVEVOICAgICAoIDB4MSA8PCA4ICkgLyogKFBEQykgVHJhbnNtaXR0ZXIgVHJhbnNmZXIgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19QRENfVFhURElTICAgICggMHgxIDw8IDkgKSAvKiAoUERDKSBUcmFuc21pdHRlciBUcmFuc2ZlciBEaXNhYmxlICovDQotLyogLS0tLS0tLS0gUERDX1BUU1IgOiAoUERDIE9mZnNldDogMHgyNCkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUGVyaXBoZXJhbCBETUEgQ29udHJvbGxlcg0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19QREMgc3RydWN0dXJlICoqKg0KKyNkZWZpbmUgUERDX1JQUiAgICAgICAgICggMCkgLy8gUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBQRENfUkNSICAgICAgICAgKCA0KSAvLyBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFBEQ19UUFIgICAgICAgICAoIDgpIC8vIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFBEQ19UQ1IgICAgICAgICAoMTIpIC8vIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFBEQ19STlBSICAgICAgICAoMTYpIC8vIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBQRENfUk5DUiAgICAgICAgKDIwKSAvLyBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgUERDX1ROUFIgICAgICAgICgyNCkgLy8gVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBQRENfVE5DUiAgICAgICAgKDI4KSAvLyBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFBEQ19QVENSICAgICAgICAoMzIpIC8vIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBQRENfUFRTUiAgICAgICAgKDM2KSAvLyBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorLy8gLS0tLS0tLS0gUERDX1BUQ1IgOiAoUERDIE9mZnNldDogMHgyMCkgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QRENfUlhURU4gICAgICAgICAgICgweDEgPDwgIDApIC8vIChQREMpIFJlY2VpdmVyIFRyYW5zZmVyIEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfUERDX1JYVERJUyAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoUERDKSBSZWNlaXZlciBUcmFuc2ZlciBEaXNhYmxlDQorI2RlZmluZSBBVDkxQ19QRENfVFhURU4gICAgICAgICAgICgweDEgPDwgIDgpIC8vIChQREMpIFRyYW5zbWl0dGVyIFRyYW5zZmVyIEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfUERDX1RYVERJUyAgICAgICAgICAoMHgxIDw8ICA5KSAvLyAoUERDKSBUcmFuc21pdHRlciBUcmFuc2ZlciBEaXNhYmxlDQorLy8gLS0tLS0tLS0gUERDX1BUU1IgOiAoUERDIE9mZnNldDogMHgyNCkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIERlYnVnIFVuaXQgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfREJHVSBzdHJ1Y3R1cmUgKioqICovDQotI2RlZmluZSBEQkdVX0NSICAgICAgICAgICAgICAgICAgICAgICAgKCAwICkgICAgICAgICAvKiBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBEQkdVX01SICAgICAgICAgICAgICAgICAgICAgICAgKCA0ICkgICAgICAgICAvKiBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBEQkdVX0lFUiAgICAgICAgICAgICAgICAgICAgICAgKCA4ICkgICAgICAgICAvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBEQkdVX0lEUiAgICAgICAgICAgICAgICAgICAgICAgKCAxMiApICAgICAgICAvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgREJHVV9JTVIgICAgICAgICAgICAgICAgICAgICAgICggMTYgKSAgICAgICAgLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIERCR1VfQ1NSICAgICAgICAgICAgICAgICAgICAgICAoIDIwICkgICAgICAgIC8qIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBEQkdVX1JIUiAgICAgICAgICAgICAgICAgICAgICAgKCAyNCApICAgICAgICAvKiBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyICovDQotI2RlZmluZSBEQkdVX1RIUiAgICAgICAgICAgICAgICAgICAgICAgKCAyOCApICAgICAgICAvKiBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyICovDQotI2RlZmluZSBEQkdVX0JSR1IgICAgICAgICAgICAgICAgICAgICAgKCAzMiApICAgICAgICAvKiBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyICovDQotI2RlZmluZSBEQkdVX0NJRFIgICAgICAgICAgICAgICAgICAgICAgKCA2NCApICAgICAgICAvKiBDaGlwIElEIFJlZ2lzdGVyICovDQotI2RlZmluZSBEQkdVX0VYSUQgICAgICAgICAgICAgICAgICAgICAgKCA2OCApICAgICAgICAvKiBDaGlwIElEIEV4dGVuc2lvbiBSZWdpc3RlciAqLw0KLSNkZWZpbmUgREJHVV9GTlRSICAgICAgICAgICAgICAgICAgICAgICggNzIgKSAgICAgICAgLyogRm9yY2UgTlRSU1QgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIERCR1VfUlBSICAgICAgICAgICAgICAgICAgICAgICAoIDI1NiApICAgICAgIC8qIFJlY2VpdmUgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgREJHVV9SQ1IgICAgICAgICAgICAgICAgICAgICAgICggMjYwICkgICAgICAgLyogUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBEQkdVX1RQUiAgICAgICAgICAgICAgICAgICAgICAgKCAyNjQgKSAgICAgICAvKiBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBEQkdVX1RDUiAgICAgICAgICAgICAgICAgICAgICAgKCAyNjggKSAgICAgICAvKiBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBEQkdVX1JOUFIgICAgICAgICAgICAgICAgICAgICAgKCAyNzIgKSAgICAgICAvKiBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgREJHVV9STkNSICAgICAgICAgICAgICAgICAgICAgICggMjc2ICkgICAgICAgLyogUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIERCR1VfVE5QUiAgICAgICAgICAgICAgICAgICAgICAoIDI4MCApICAgICAgIC8qIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgREJHVV9UTkNSICAgICAgICAgICAgICAgICAgICAgICggMjg0ICkgICAgICAgLyogVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBEQkdVX1BUQ1IgICAgICAgICAgICAgICAgICAgICAgKCAyODggKSAgICAgICAvKiBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgREJHVV9QVFNSICAgICAgICAgICAgICAgICAgICAgICggMjkyICkgICAgICAgLyogUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLS8qIC0tLS0tLS0tIERCR1VfQ1IgOiAoREJHVSBPZmZzZXQ6IDB4MCkgRGVidWcgVW5pdCBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19VU19SU1RSWCAgICAgICAgICAgICAgICAgKCAweDEgPDwgMiApICAvKiAoREJHVSkgUmVzZXQgUmVjZWl2ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1JTVFRYICAgICAgICAgICAgICAgICAoIDB4MSA8PCAzICkgIC8qIChEQkdVKSBSZXNldCBUcmFuc21pdHRlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfUlhFTiAgICAgICAgICAgICAgICAgICggMHgxIDw8IDQgKSAgLyogKERCR1UpIFJlY2VpdmVyIEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfUlhESVMgICAgICAgICAgICAgICAgICggMHgxIDw8IDUgKSAgLyogKERCR1UpIFJlY2VpdmVyIERpc2FibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1RYRU4gICAgICAgICAgICAgICAgICAoIDB4MSA8PCA2ICkgIC8qIChEQkdVKSBUcmFuc21pdHRlciBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1RYRElTICAgICAgICAgICAgICAgICAoIDB4MSA8PCA3ICkgIC8qIChEQkdVKSBUcmFuc21pdHRlciBEaXNhYmxlICovDQotI2RlZmluZSBBVDkxQ19VU19SU1RTVEEgICAgICAgICAgICAgICAgKCAweDEgPDwgOCApICAvKiAoREJHVSkgUmVzZXQgU3RhdHVzIEJpdHMgKi8NCi0vKiAtLS0tLS0tLSBEQkdVX01SIDogKERCR1UgT2Zmc2V0OiAweDQpIERlYnVnIFVuaXQgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfUEFSICAgICAgICAgICAgICAgICAgICggMHg3IDw8IDkgKSAgLyogKERCR1UpIFBhcml0eSB0eXBlICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfUEFSX0VWRU4gICAgICAgICAgKCAweDAgPDwgOSApICAvKiAoREJHVSkgRXZlbiBQYXJpdHkgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19QQVJfT0REICAgICAgICAgICAoIDB4MSA8PCA5ICkgIC8qIChEQkdVKSBPZGQgUGFyaXR5ICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfUEFSX1NQQUNFICAgICAgICAgKCAweDIgPDwgOSApICAvKiAoREJHVSkgUGFyaXR5IGZvcmNlZCB0byAwIChTcGFjZSkgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19QQVJfTUFSSyAgICAgICAgICAoIDB4MyA8PCA5ICkgIC8qIChEQkdVKSBQYXJpdHkgZm9yY2VkIHRvIDEgKE1hcmspICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfUEFSX05PTkUgICAgICAgICAgKCAweDQgPDwgOSApICAvKiAoREJHVSkgTm8gUGFyaXR5ICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfUEFSX01VTFRJX0RST1AgICAgKCAweDYgPDwgOSApICAvKiAoREJHVSkgTXVsdGktZHJvcCBtb2RlICovDQotI2RlZmluZSBBVDkxQ19VU19DSE1PREUgICAgICAgICAgICAgICAgKCAweDMgPDwgMTQgKSAvKiAoREJHVSkgQ2hhbm5lbCBNb2RlICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfQ0hNT0RFX05PUk1BTCAgICAgKCAweDAgPDwgMTQgKSAvKiAoREJHVSkgTm9ybWFsIE1vZGU6IFRoZSBVU0FSVCBjaGFubmVsIG9wZXJhdGVzIGFzIGFuIFJYL1RYIFVTQVJULiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX0NITU9ERV9BVVRPICAgICAgICggMHgxIDw8IDE0ICkgLyogKERCR1UpIEF1dG9tYXRpYyBFY2hvOiBSZWNlaXZlciBEYXRhIElucHV0IGlzIGNvbm5lY3RlZCB0byB0aGUgVFhEIHBpbi4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19DSE1PREVfTE9DQUwgICAgICAoIDB4MiA8PCAxNCApIC8qIChEQkdVKSBMb2NhbCBMb29wYmFjazogVHJhbnNtaXR0ZXIgT3V0cHV0IFNpZ25hbCBpcyBjb25uZWN0ZWQgdG8gUmVjZWl2ZXIgSW5wdXQgU2lnbmFsLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX0NITU9ERV9SRU1PVEUgICAgICggMHgzIDw8IDE0ICkgLyogKERCR1UpIFJlbW90ZSBMb29wYmFjazogUlhEIHBpbiBpcyBpbnRlcm5hbGx5IGNvbm5lY3RlZCB0byBUWEQgcGluLiAqLw0KLS8qIC0tLS0tLS0tIERCR1VfSUVSIDogKERCR1UgT2Zmc2V0OiAweDgpIERlYnVnIFVuaXQgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfUlhSRFkgICAgICAgICAgICAgICAgICggMHgxIDw8IDAgKSAgLyogKERCR1UpIFJYUkRZIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfVFhSRFkgICAgICAgICAgICAgICAgICggMHgxIDw8IDEgKSAgLyogKERCR1UpIFRYUkRZIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfRU5EUlggICAgICAgICAgICAgICAgICggMHgxIDw8IDMgKSAgLyogKERCR1UpIEVuZCBvZiBSZWNlaXZlIFRyYW5zZmVyIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfRU5EVFggICAgICAgICAgICAgICAgICggMHgxIDw8IDQgKSAgLyogKERCR1UpIEVuZCBvZiBUcmFuc21pdCBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX09WUkUgICAgICAgICAgICAgICAgICAoIDB4MSA8PCA1ICkgIC8qIChEQkdVKSBPdmVycnVuIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfRlJBTUUgICAgICAgICAgICAgICAgICggMHgxIDw8IDYgKSAgLyogKERCR1UpIEZyYW1pbmcgRXJyb3IgSW50ZXJydXB0ICovDQotI2RlZmluZSBBVDkxQ19VU19QQVJFICAgICAgICAgICAgICAgICAgKCAweDEgPDwgNyApICAvKiAoREJHVSkgUGFyaXR5IEVycm9yIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfVFhFTVBUWSAgICAgICAgICAgICAgICggMHgxIDw8IDkgKSAgLyogKERCR1UpIFRYRU1QVFkgSW50ZXJydXB0ICovDQotI2RlZmluZSBBVDkxQ19VU19UWEJVRkUgICAgICAgICAgICAgICAgKCAweDEgPDwgMTEgKSAvKiAoREJHVSkgVFhCVUZFIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfUlhCVUZGICAgICAgICAgICAgICAgICggMHgxIDw8IDEyICkgLyogKERCR1UpIFJYQlVGRiBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX0NPTU1fVFggICAgICAgICAgICAgICAoIDB4MSA8PCAzMCApIC8qIChEQkdVKSBDT01NX1RYIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfQ09NTV9SWCAgICAgICAgICAgICAgICggMHgxIDw8IDMxICkgLyogKERCR1UpIENPTU1fUlggSW50ZXJydXB0ICovDQotLyogLS0tLS0tLS0gREJHVV9JRFIgOiAoREJHVSBPZmZzZXQ6IDB4YykgRGVidWcgVW5pdCBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIERCR1VfSU1SIDogKERCR1UgT2Zmc2V0OiAweDEwKSBEZWJ1ZyBVbml0IEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gREJHVV9DU1IgOiAoREJHVSBPZmZzZXQ6IDB4MTQpIERlYnVnIFVuaXQgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBEQkdVX0ZOVFIgOiAoREJHVSBPZmZzZXQ6IDB4NDgpIERlYnVnIFVuaXQgRk9SQ0VfTlRSU1QgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1VTX0ZPUkNFX05UUlNUICAgICggMHgxIDw8IDAgKSAgLyogKERCR1UpIEZvcmNlIE5UUlNUIGluIEpUQUcgKi8NCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIERlYnVnIFVuaXQNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfREJHVSBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBEQkdVX0NSICAgICAgICAgKCAwKSAvLyBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBEQkdVX01SICAgICAgICAgKCA0KSAvLyBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBEQkdVX0lFUiAgICAgICAgKCA4KSAvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBEQkdVX0lEUiAgICAgICAgKDEyKSAvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgREJHVV9JTVIgICAgICAgICgxNikgLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIERCR1VfQ1NSICAgICAgICAoMjApIC8vIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBEQkdVX1JIUiAgICAgICAgKDI0KSAvLyBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBEQkdVX1RIUiAgICAgICAgKDI4KSAvLyBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBEQkdVX0JSR1IgICAgICAgKDMyKSAvLyBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBEQkdVX0NJRFIgICAgICAgKDY0KSAvLyBDaGlwIElEIFJlZ2lzdGVyDQorI2RlZmluZSBEQkdVX0VYSUQgICAgICAgKDY4KSAvLyBDaGlwIElEIEV4dGVuc2lvbiBSZWdpc3Rlcg0KKyNkZWZpbmUgREJHVV9GTlRSICAgICAgICg3MikgLy8gRm9yY2UgTlRSU1QgUmVnaXN0ZXINCisjZGVmaW5lIERCR1VfUlBSICAgICAgICAoMjU2KSAvLyBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIERCR1VfUkNSICAgICAgICAoMjYwKSAvLyBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIERCR1VfVFBSICAgICAgICAoMjY0KSAvLyBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBEQkdVX1RDUiAgICAgICAgKDI2OCkgLy8gVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgREJHVV9STlBSICAgICAgICgyNzIpIC8vIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBEQkdVX1JOQ1IgICAgICAgKDI3NikgLy8gUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIERCR1VfVE5QUiAgICAgICAoMjgwKSAvLyBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIERCR1VfVE5DUiAgICAgICAoMjg0KSAvLyBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIERCR1VfUFRDUiAgICAgICAoMjg4KSAvLyBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgREJHVV9QVFNSICAgICAgICgyOTIpIC8vIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisvLyAtLS0tLS0tLSBEQkdVX0NSIDogKERCR1UgT2Zmc2V0OiAweDApIERlYnVnIFVuaXQgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VTX1JTVFJYICAgICAgICAgICAgKDB4MSA8PCAgMikgLy8gKERCR1UpIFJlc2V0IFJlY2VpdmVyDQorI2RlZmluZSBBVDkxQ19VU19SU1RUWCAgICAgICAgICAgICgweDEgPDwgIDMpIC8vIChEQkdVKSBSZXNldCBUcmFuc21pdHRlcg0KKyNkZWZpbmUgQVQ5MUNfVVNfUlhFTiAgICAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoREJHVSkgUmVjZWl2ZXIgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19VU19SWERJUyAgICAgICAgICAgICgweDEgPDwgIDUpIC8vIChEQkdVKSBSZWNlaXZlciBEaXNhYmxlDQorI2RlZmluZSBBVDkxQ19VU19UWEVOICAgICAgICAgICAgICgweDEgPDwgIDYpIC8vIChEQkdVKSBUcmFuc21pdHRlciBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1VTX1RYRElTICAgICAgICAgICAgKDB4MSA8PCAgNykgLy8gKERCR1UpIFRyYW5zbWl0dGVyIERpc2FibGUNCisjZGVmaW5lIEFUOTFDX1VTX1JTVFNUQSAgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKERCR1UpIFJlc2V0IFN0YXR1cyBCaXRzDQorLy8gLS0tLS0tLS0gREJHVV9NUiA6IChEQkdVIE9mZnNldDogMHg0KSBEZWJ1ZyBVbml0IE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VU19QQVIgICAgICAgICAgICAgICgweDcgPDwgIDkpIC8vIChEQkdVKSBQYXJpdHkgdHlwZQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1BBUl9FVkVOICAgICAgICAgICAgICAgICAoMHgwIDw8ICA5KSAvLyAoREJHVSkgRXZlbiBQYXJpdHkNCisjZGVmaW5lIAlBVDkxQ19VU19QQVJfT0REICAgICAgICAgICAgICAgICAgKDB4MSA8PCAgOSkgLy8gKERCR1UpIE9kZCBQYXJpdHkNCisjZGVmaW5lIAlBVDkxQ19VU19QQVJfU1BBQ0UgICAgICAgICAgICAgICAgKDB4MiA8PCAgOSkgLy8gKERCR1UpIFBhcml0eSBmb3JjZWQgdG8gMCAoU3BhY2UpDQorI2RlZmluZSAJQVQ5MUNfVVNfUEFSX01BUksgICAgICAgICAgICAgICAgICgweDMgPDwgIDkpIC8vIChEQkdVKSBQYXJpdHkgZm9yY2VkIHRvIDEgKE1hcmspDQorI2RlZmluZSAJQVQ5MUNfVVNfUEFSX05PTkUgICAgICAgICAgICAgICAgICgweDQgPDwgIDkpIC8vIChEQkdVKSBObyBQYXJpdHkNCisjZGVmaW5lIAlBVDkxQ19VU19QQVJfTVVMVElfRFJPUCAgICAgICAgICAgKDB4NiA8PCAgOSkgLy8gKERCR1UpIE11bHRpLWRyb3AgbW9kZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfQ0hNT0RFICAgICAgICAgICAoMHgzIDw8IDE0KSAvLyAoREJHVSkgQ2hhbm5lbCBNb2RlDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0hNT0RFX05PUk1BTCAgICAgICAgICAgICAgICgweDAgPDwgMTQpIC8vIChEQkdVKSBOb3JtYWwgTW9kZTogVGhlIFVTQVJUIGNoYW5uZWwgb3BlcmF0ZXMgYXMgYW4gUlgvVFggVVNBUlQuDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0hNT0RFX0FVVE8gICAgICAgICAgICAgICAgICgweDEgPDwgMTQpIC8vIChEQkdVKSBBdXRvbWF0aWMgRWNobzogUmVjZWl2ZXIgRGF0YSBJbnB1dCBpcyBjb25uZWN0ZWQgdG8gdGhlIFRYRCBwaW4uDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0hNT0RFX0xPQ0FMICAgICAgICAgICAgICAgICgweDIgPDwgMTQpIC8vIChEQkdVKSBMb2NhbCBMb29wYmFjazogVHJhbnNtaXR0ZXIgT3V0cHV0IFNpZ25hbCBpcyBjb25uZWN0ZWQgdG8gUmVjZWl2ZXIgSW5wdXQgU2lnbmFsLg0KKyNkZWZpbmUgCUFUOTFDX1VTX0NITU9ERV9SRU1PVEUgICAgICAgICAgICAgICAoMHgzIDw8IDE0KSAvLyAoREJHVSkgUmVtb3RlIExvb3BiYWNrOiBSWEQgcGluIGlzIGludGVybmFsbHkgY29ubmVjdGVkIHRvIFRYRCBwaW4uDQorLy8gLS0tLS0tLS0gREJHVV9JRVIgOiAoREJHVSBPZmZzZXQ6IDB4OCkgRGVidWcgVW5pdCBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVVNfUlhSRFkgICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoREJHVSkgUlhSRFkgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19UWFJEWSAgICAgICAgICAgICgweDEgPDwgIDEpIC8vIChEQkdVKSBUWFJEWSBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX0VORFJYICAgICAgICAgICAgKDB4MSA8PCAgMykgLy8gKERCR1UpIEVuZCBvZiBSZWNlaXZlIFRyYW5zZmVyIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfRU5EVFggICAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoREJHVSkgRW5kIG9mIFRyYW5zbWl0IEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfT1ZSRSAgICAgICAgICAgICAoMHgxIDw8ICA1KSAvLyAoREJHVSkgT3ZlcnJ1biBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX0ZSQU1FICAgICAgICAgICAgKDB4MSA8PCAgNikgLy8gKERCR1UpIEZyYW1pbmcgRXJyb3IgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19QQVJFICAgICAgICAgICAgICgweDEgPDwgIDcpIC8vIChEQkdVKSBQYXJpdHkgRXJyb3IgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19VU19UWEVNUFRZICAgICAgICAgICgweDEgPDwgIDkpIC8vIChEQkdVKSBUWEVNUFRZIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfVFhCVUZFICAgICAgICAgICAoMHgxIDw8IDExKSAvLyAoREJHVSkgVFhCVUZFIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfUlhCVUZGICAgICAgICAgICAoMHgxIDw8IDEyKSAvLyAoREJHVSkgUlhCVUZGIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVVNfQ09NTV9UWCAgICAgICAgICAoMHgxIDw8IDMwKSAvLyAoREJHVSkgQ09NTV9UWCBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VTX0NPTU1fUlggICAgICAgICAgKDB4MSA8PCAzMSkgLy8gKERCR1UpIENPTU1fUlggSW50ZXJydXB0DQorLy8gLS0tLS0tLS0gREJHVV9JRFIgOiAoREJHVSBPZmZzZXQ6IDB4YykgRGVidWcgVW5pdCBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBEQkdVX0lNUiA6IChEQkdVIE9mZnNldDogMHgxMCkgRGVidWcgVW5pdCBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBEQkdVX0NTUiA6IChEQkdVIE9mZnNldDogMHgxNCkgRGVidWcgVW5pdCBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBEQkdVX0ZOVFIgOiAoREJHVSBPZmZzZXQ6IDB4NDgpIERlYnVnIFVuaXQgRk9SQ0VfTlRSU1QgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VU19GT1JDRV9OVFJTVCAgICAgICgweDEgPDwgIDApIC8vIChEQkdVKSBGb3JjZSBOVFJTVCBpbiBKVEFHDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQYXJhbGxlbCBJbnB1dCBPdXRwdXQgQ29udHJvbGVyICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1BJTyBzdHJ1Y3R1cmUgKioqICovDQotI2RlZmluZSBQSU9fUEVSICAgICAgKCAwICkgICAvKiBQSU8gRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBQSU9fUERSICAgICAgKCA0ICkgICAvKiBQSU8gRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUElPX1BTUiAgICAgICggOCApICAgLyogUElPIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUElPX09FUiAgICAgICggMTYgKSAgLyogT3V0cHV0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUElPX09EUiAgICAgICggMjAgKSAgLyogT3V0cHV0IERpc2FibGUgUmVnaXN0ZXJyICovDQotI2RlZmluZSBQSU9fT1NSICAgICAgKCAyNCApICAvKiBPdXRwdXQgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBQSU9fSUZFUiAgICAgKCAzMiApICAvKiBJbnB1dCBGaWx0ZXIgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBQSU9fSUZEUiAgICAgKCAzNiApICAvKiBJbnB1dCBGaWx0ZXIgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUElPX0lGU1IgICAgICggNDAgKSAgLyogSW5wdXQgRmlsdGVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUElPX1NPRFIgICAgICggNDggKSAgLyogU2V0IE91dHB1dCBEYXRhIFJlZ2lzdGVyICovDQotI2RlZmluZSBQSU9fQ09EUiAgICAgKCA1MiApICAvKiBDbGVhciBPdXRwdXQgRGF0YSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUElPX09EU1IgICAgICggNTYgKSAgLyogT3V0cHV0IERhdGEgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBQSU9fUERTUiAgICAgKCA2MCApICAvKiBQaW4gRGF0YSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBJT19JRVIgICAgICAoIDY0ICkgIC8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBJT19JRFIgICAgICAoIDY4ICkgIC8qIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBQSU9fSU1SICAgICAgKCA3MiApICAvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUElPX0lTUiAgICAgICggNzYgKSAgLyogSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUElPX01ERVIgICAgICggODAgKSAgLyogTXVsdGktZHJpdmVyIEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUElPX01ERFIgICAgICggODQgKSAgLyogTXVsdGktZHJpdmVyIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBJT19NRFNSICAgICAoIDg4ICkgIC8qIE11bHRpLWRyaXZlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBJT19QUFVEUiAgICAoIDk2ICkgIC8qIFB1bGwtdXAgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUElPX1BQVUVSICAgICggMTAwICkgLyogUHVsbC11cCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBJT19QUFVTUiAgICAoIDEwNCApIC8qIFB1bGwtdXAgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBQSU9fQVNSICAgICAgKCAxMTIgKSAvKiBTZWxlY3QgQSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUElPX0JTUiAgICAgICggMTE2ICkgLyogU2VsZWN0IEIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBJT19BQlNSICAgICAoIDEyMCApIC8qIEFCIFNlbGVjdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBJT19PV0VSICAgICAoIDE2MCApIC8qIE91dHB1dCBXcml0ZSBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBJT19PV0RSICAgICAoIDE2NCApIC8qIE91dHB1dCBXcml0ZSBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBQSU9fT1dTUiAgICAgKCAxNjggKSAvKiBPdXRwdXQgV3JpdGUgU3RhdHVzIFJlZ2lzdGVyICovDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQYXJhbGxlbCBJbnB1dCBPdXRwdXQgQ29udHJvbGVyDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1BJTyBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBQSU9fUEVSICAgICAgICAgKCAwKSAvLyBQSU8gRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBQSU9fUERSICAgICAgICAgKCA0KSAvLyBQSU8gRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX1BTUiAgICAgICAgICggOCkgLy8gUElPIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX09FUiAgICAgICAgICgxNikgLy8gT3V0cHV0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX09EUiAgICAgICAgICgyMCkgLy8gT3V0cHV0IERpc2FibGUgUmVnaXN0ZXJyDQorI2RlZmluZSBQSU9fT1NSICAgICAgICAgKDI0KSAvLyBPdXRwdXQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBQSU9fSUZFUiAgICAgICAgKDMyKSAvLyBJbnB1dCBGaWx0ZXIgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBQSU9fSUZEUiAgICAgICAgKDM2KSAvLyBJbnB1dCBGaWx0ZXIgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX0lGU1IgICAgICAgICg0MCkgLy8gSW5wdXQgRmlsdGVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX1NPRFIgICAgICAgICg0OCkgLy8gU2V0IE91dHB1dCBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBQSU9fQ09EUiAgICAgICAgKDUyKSAvLyBDbGVhciBPdXRwdXQgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX09EU1IgICAgICAgICg1NikgLy8gT3V0cHV0IERhdGEgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBQSU9fUERTUiAgICAgICAgKDYwKSAvLyBQaW4gRGF0YSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFBJT19JRVIgICAgICAgICAoNjQpIC8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFBJT19JRFIgICAgICAgICAoNjgpIC8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBQSU9fSU1SICAgICAgICAgKDcyKSAvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX0lTUiAgICAgICAgICg3NikgLy8gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX01ERVIgICAgICAgICg4MCkgLy8gTXVsdGktZHJpdmVyIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX01ERFIgICAgICAgICg4NCkgLy8gTXVsdGktZHJpdmVyIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIFBJT19NRFNSICAgICAgICAoODgpIC8vIE11bHRpLWRyaXZlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFBJT19QUFVEUiAgICAgICAoOTYpIC8vIFB1bGwtdXAgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX1BQVUVSICAgICAgICgxMDApIC8vIFB1bGwtdXAgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBQSU9fUFBVU1IgICAgICAgKDEwNCkgLy8gUHVsbC11cCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFBJT19BU1IgICAgICAgICAoMTEyKSAvLyBTZWxlY3QgQSBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX0JTUiAgICAgICAgICgxMTYpIC8vIFNlbGVjdCBCIFJlZ2lzdGVyDQorI2RlZmluZSBQSU9fQUJTUiAgICAgICAgKDEyMCkgLy8gQUIgU2VsZWN0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX09XRVIgICAgICAgICgxNjApIC8vIE91dHB1dCBXcml0ZSBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFBJT19PV0RSICAgICAgICAoMTY0KSAvLyBPdXRwdXQgV3JpdGUgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUElPX09XU1IgICAgICAgICgxNjgpIC8vIE91dHB1dCBXcml0ZSBTdGF0dXMgUmVnaXN0ZXINCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIENsb2NrIEdlbmVyYXRvciBDb250cm9sZXIgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfQ0tHUiBzdHJ1Y3R1cmUgKioqICovDQotI2RlZmluZSBDS0dSX01PUiAgICAgICAgICAgICAgICAgICAgICggMCApICAgICAgICAgICAvKiBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIENLR1JfTUNGUiAgICAgICAgICAgICAgICAgICAgKCA0ICkgICAgICAgICAgIC8qIE1haW4gQ2xvY2sgIEZyZXF1ZW5jeSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQ0tHUl9QTExSICAgICAgICAgICAgICAgICAgICAoIDEyICkgICAgICAgICAgLyogUExMIFJlZ2lzdGVyICovDQotLyogLS0tLS0tLS0gQ0tHUl9NT1IgOiAoQ0tHUiBPZmZzZXQ6IDB4MCkgTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19DS0dSX01PU0NFTiAgICAgICAgICAgICggMHgxIDw8IDAgKSAgICAvKiAoQ0tHUikgTWFpbiBPc2NpbGxhdG9yIEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0tHUl9PU0NCWVBBU1MgICAgICAgICAoIDB4MSA8PCAxICkgICAgLyogKENLR1IpIE1haW4gT3NjaWxsYXRvciBCeXBhc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0NLR1JfT1NDT1VOVCAgICAgICAgICAgKCAweEZGIDw8IDggKSAgIC8qIChDS0dSKSBNYWluIE9zY2lsbGF0b3IgU3RhcnQtdXAgVGltZSAqLw0KLS8qIC0tLS0tLS0tIENLR1JfTUNGUiA6IChDS0dSIE9mZnNldDogMHg0KSBNYWluIENsb2NrIEZyZXF1ZW5jeSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0tHUl9NQUlORiAgICAgICAgICAgICAoIDB4RkZGRiA8PCAwICkgLyogKENLR1IpIE1haW4gQ2xvY2sgRnJlcXVlbmN5ICovDQotI2RlZmluZSBBVDkxQ19DS0dSX01BSU5SRFkgICAgICAgICAgICggMHgxIDw8IDE2ICkgICAvKiAoQ0tHUikgTWFpbiBDbG9jayBSZWFkeSAqLw0KLS8qIC0tLS0tLS0tIENLR1JfUExMUiA6IChDS0dSIE9mZnNldDogMHhjKSBQTEwgQiBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0tHUl9ESVYgICAgICAgICAgICAgICAoIDB4RkYgPDwgMCApICAgLyogKENLR1IpIERpdmlkZXIgU2VsZWN0ZWQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19DS0dSX0RJVl8wICAgICAgICAgKCAweDAgKSAgICAgICAgIC8qIChDS0dSKSBEaXZpZGVyIG91dHB1dCBpcyAwICovDQotI2RlZmluZSAgICAgQVQ5MUNfQ0tHUl9ESVZfQllQQVNTICAgICggMHgxICkgICAgICAgICAvKiAoQ0tHUikgRGl2aWRlciBpcyBieXBhc3NlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0tHUl9QTExDT1VOVCAgICAgICAgICAoIDB4M0YgPDwgOCApICAgLyogKENLR1IpIFBMTCBDb3VudGVyICovDQotI2RlZmluZSBBVDkxQ19DS0dSX09VVCAgICAgICAgICAgICAgICggMHgzIDw8IDE0ICkgICAvKiAoQ0tHUikgUExMIE91dHB1dCBGcmVxdWVuY3kgUmFuZ2UgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19DS0dSX09VVF8wICAgICAgICAgKCAweDAgPDwgMTQgKSAgIC8qIChDS0dSKSBQbGVhc2UgcmVmZXIgdG8gdGhlIFBMTCBkYXRhc2hlZXQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19DS0dSX09VVF8xICAgICAgICAgKCAweDEgPDwgMTQgKSAgIC8qIChDS0dSKSBQbGVhc2UgcmVmZXIgdG8gdGhlIFBMTCBkYXRhc2hlZXQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19DS0dSX09VVF8yICAgICAgICAgKCAweDIgPDwgMTQgKSAgIC8qIChDS0dSKSBQbGVhc2UgcmVmZXIgdG8gdGhlIFBMTCBkYXRhc2hlZXQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19DS0dSX09VVF8zICAgICAgICAgKCAweDMgPDwgMTQgKSAgIC8qIChDS0dSKSBQbGVhc2UgcmVmZXIgdG8gdGhlIFBMTCBkYXRhc2hlZXQgKi8NCi0jZGVmaW5lIEFUOTFDX0NLR1JfTVVMICAgICAgICAgICAgICAgKCAweDdGRiA8PCAxNiApIC8qIChDS0dSKSBQTEwgTXVsdGlwbGllciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0tHUl9VU0JESVYgICAgICAgICAgICAoIDB4MyA8PCAyOCApICAgLyogKENLR1IpIERpdmlkZXIgZm9yIFVTQiBDbG9ja3MgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19DS0dSX1VTQkRJVl8wICAgICAgKCAweDAgPDwgMjggKSAgIC8qIChDS0dSKSBEaXZpZGVyIG91dHB1dCBpcyBQTEwgY2xvY2sgb3V0cHV0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfQ0tHUl9VU0JESVZfMSAgICAgICggMHgxIDw8IDI4ICkgICAvKiAoQ0tHUikgRGl2aWRlciBvdXRwdXQgaXMgUExMIGNsb2NrIG91dHB1dCBkaXZpZGVkIGJ5IDIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19DS0dSX1VTQkRJVl8yICAgICAgKCAweDIgPDwgMjggKSAgIC8qIChDS0dSKSBEaXZpZGVyIG91dHB1dCBpcyBQTEwgY2xvY2sgb3V0cHV0IGRpdmlkZWQgYnkgNCAqLw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQ2xvY2sgR2VuZXJhdG9yIENvbnRyb2xlcg0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19DS0dSIHN0cnVjdHVyZSAqKioNCisjZGVmaW5lIENLR1JfTU9SICAgICAgICAoIDApIC8vIE1haW4gT3NjaWxsYXRvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQ0tHUl9NQ0ZSICAgICAgICggNCkgLy8gTWFpbiBDbG9jayAgRnJlcXVlbmN5IFJlZ2lzdGVyDQorI2RlZmluZSBDS0dSX1BMTFIgICAgICAgKDEyKSAvLyBQTEwgUmVnaXN0ZXINCisvLyAtLS0tLS0tLSBDS0dSX01PUiA6IChDS0dSIE9mZnNldDogMHgwKSBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DS0dSX01PU0NFTiAgICAgICAgICgweDEgPDwgIDApIC8vIChDS0dSKSBNYWluIE9zY2lsbGF0b3IgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19DS0dSX09TQ0JZUEFTUyAgICAgICgweDEgPDwgIDEpIC8vIChDS0dSKSBNYWluIE9zY2lsbGF0b3IgQnlwYXNzDQorI2RlZmluZSBBVDkxQ19DS0dSX09TQ09VTlQgICAgICAgICgweEZGIDw8ICA4KSAvLyAoQ0tHUikgTWFpbiBPc2NpbGxhdG9yIFN0YXJ0LXVwIFRpbWUNCisvLyAtLS0tLS0tLSBDS0dSX01DRlIgOiAoQ0tHUiBPZmZzZXQ6IDB4NCkgTWFpbiBDbG9jayBGcmVxdWVuY3kgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DS0dSX01BSU5GICAgICAgICAgICgweEZGRkYgPDwgIDApIC8vIChDS0dSKSBNYWluIENsb2NrIEZyZXF1ZW5jeQ0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9NQUlOUkRZICAgICAgICAoMHgxIDw8IDE2KSAvLyAoQ0tHUikgTWFpbiBDbG9jayBSZWFkeQ0KKy8vIC0tLS0tLS0tIENLR1JfUExMUiA6IChDS0dSIE9mZnNldDogMHhjKSBQTEwgQiBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0NLR1JfRElWICAgICAgICAgICAgKDB4RkYgPDwgIDApIC8vIChDS0dSKSBEaXZpZGVyIFNlbGVjdGVkDQorI2RlZmluZSAJQVQ5MUNfQ0tHUl9ESVZfMCAgICAgICAgICAgICAgICAgICAgKDB4MCkgLy8gKENLR1IpIERpdmlkZXIgb3V0cHV0IGlzIDANCisjZGVmaW5lIAlBVDkxQ19DS0dSX0RJVl9CWVBBU1MgICAgICAgICAgICAgICAoMHgxKSAvLyAoQ0tHUikgRGl2aWRlciBpcyBieXBhc3NlZA0KKyNkZWZpbmUgQVQ5MUNfQ0tHUl9QTExDT1VOVCAgICAgICAoMHgzRiA8PCAgOCkgLy8gKENLR1IpIFBMTCBDb3VudGVyDQorI2RlZmluZSBBVDkxQ19DS0dSX09VVCAgICAgICAgICAgICgweDMgPDwgMTQpIC8vIChDS0dSKSBQTEwgT3V0cHV0IEZyZXF1ZW5jeSBSYW5nZQ0KKyNkZWZpbmUgCUFUOTFDX0NLR1JfT1VUXzAgICAgICAgICAgICAgICAgICAgICgweDAgPDwgMTQpIC8vIChDS0dSKSBQbGVhc2UgcmVmZXIgdG8gdGhlIFBMTCBkYXRhc2hlZXQNCisjZGVmaW5lIAlBVDkxQ19DS0dSX09VVF8xICAgICAgICAgICAgICAgICAgICAoMHgxIDw8IDE0KSAvLyAoQ0tHUikgUGxlYXNlIHJlZmVyIHRvIHRoZSBQTEwgZGF0YXNoZWV0DQorI2RlZmluZSAJQVQ5MUNfQ0tHUl9PVVRfMiAgICAgICAgICAgICAgICAgICAgKDB4MiA8PCAxNCkgLy8gKENLR1IpIFBsZWFzZSByZWZlciB0byB0aGUgUExMIGRhdGFzaGVldA0KKyNkZWZpbmUgCUFUOTFDX0NLR1JfT1VUXzMgICAgICAgICAgICAgICAgICAgICgweDMgPDwgMTQpIC8vIChDS0dSKSBQbGVhc2UgcmVmZXIgdG8gdGhlIFBMTCBkYXRhc2hlZXQNCisjZGVmaW5lIEFUOTFDX0NLR1JfTVVMICAgICAgICAgICAgKDB4N0ZGIDw8IDE2KSAvLyAoQ0tHUikgUExMIE11bHRpcGxpZXINCisjZGVmaW5lIEFUOTFDX0NLR1JfVVNCRElWICAgICAgICAgKDB4MyA8PCAyOCkgLy8gKENLR1IpIERpdmlkZXIgZm9yIFVTQiBDbG9ja3MNCisjZGVmaW5lIAlBVDkxQ19DS0dSX1VTQkRJVl8wICAgICAgICAgICAgICAgICAgICAoMHgwIDw8IDI4KSAvLyAoQ0tHUikgRGl2aWRlciBvdXRwdXQgaXMgUExMIGNsb2NrIG91dHB1dA0KKyNkZWZpbmUgCUFUOTFDX0NLR1JfVVNCRElWXzEgICAgICAgICAgICAgICAgICAgICgweDEgPDwgMjgpIC8vIChDS0dSKSBEaXZpZGVyIG91dHB1dCBpcyBQTEwgY2xvY2sgb3V0cHV0IGRpdmlkZWQgYnkgMg0KKyNkZWZpbmUgCUFUOTFDX0NLR1JfVVNCRElWXzIgICAgICAgICAgICAgICAgICAgICgweDIgPDwgMjgpIC8vIChDS0dSKSBEaXZpZGVyIG91dHB1dCBpcyBQTEwgY2xvY2sgb3V0cHV0IGRpdmlkZWQgYnkgNA0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUG93ZXIgTWFuYWdlbWVudCBDb250cm9sZXIgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfUE1DIHN0cnVjdHVyZSAqKiogKi8NCi0jZGVmaW5lIFBNQ19TQ0VSICAgICAgICAgICggMCApICAgICAgICAgLyogU3lzdGVtIENsb2NrIEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUE1DX1NDRFIgICAgICAgICAgKCA0ICkgICAgICAgICAvKiBTeXN0ZW0gQ2xvY2sgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUE1DX1NDU1IgICAgICAgICAgKCA4ICkgICAgICAgICAvKiBTeXN0ZW0gQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBQTUNfUENFUiAgICAgICAgICAoIDE2ICkgICAgICAgIC8qIFBlcmlwaGVyYWwgQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBQTUNfUENEUiAgICAgICAgICAoIDIwICkgICAgICAgIC8qIFBlcmlwaGVyYWwgQ2xvY2sgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUE1DX1BDU1IgICAgICAgICAgKCAyNCApICAgICAgICAvKiBQZXJpcGhlcmFsIENsb2NrIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUE1DX01PUiAgICAgICAgICAgKCAzMiApICAgICAgICAvKiBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBNQ19NQ0ZSICAgICAgICAgICggMzYgKSAgICAgICAgLyogTWFpbiBDbG9jayAgRnJlcXVlbmN5IFJlZ2lzdGVyICovDQotI2RlZmluZSBQTUNfUExMUiAgICAgICAgICAoIDQ0ICkgICAgICAgIC8qIFBMTCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUE1DX01DS1IgICAgICAgICAgKCA0OCApICAgICAgICAvKiBNYXN0ZXIgQ2xvY2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBNQ19QQ0tSICAgICAgICAgICggNjQgKSAgICAgICAgLyogUHJvZ3JhbW1hYmxlIENsb2NrIFJlZ2lzdGVyICovDQotI2RlZmluZSBQTUNfSUVSICAgICAgICAgICAoIDk2ICkgICAgICAgIC8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBNQ19JRFIgICAgICAgICAgICggMTAwICkgICAgICAgLyogSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBNQ19TUiAgICAgICAgICAgICggMTA0ICkgICAgICAgLyogU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBQTUNfSU1SICAgICAgICAgICAoIDEwOCApICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotLyogLS0tLS0tLS0gUE1DX1NDRVIgOiAoUE1DIE9mZnNldDogMHgwKSBTeXN0ZW0gQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19QTUNfUENLICAgICAoIDB4MSA8PCAwICkgIC8qIChQTUMpIFByb2Nlc3NvciBDbG9jayAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1VEUCAgICAgKCAweDEgPDwgNyApICAvKiAoUE1DKSBVU0IgRGV2aWNlIFBvcnQgQ2xvY2sgKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19QQ0swICAgICggMHgxIDw8IDggKSAgLyogKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDSzEgICAgKCAweDEgPDwgOSApICAvKiAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0ICovDQotI2RlZmluZSBBVDkxQ19QTUNfUENLMiAgICAoIDB4MSA8PCAxMCApIC8qIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19QQ0szICAgICggMHgxIDw8IDExICkgLyogKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAqLw0KLS8qIC0tLS0tLS0tIFBNQ19TQ0RSIDogKFBNQyBPZmZzZXQ6IDB4NCkgU3lzdGVtIENsb2NrIERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBQTUNfU0NTUiA6IChQTUMgT2Zmc2V0OiAweDgpIFN5c3RlbSBDbG9jayBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBDS0dSX01PUiA6IChQTUMgT2Zmc2V0OiAweDIwKSBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBDS0dSX01DRlIgOiAoUE1DIE9mZnNldDogMHgyNCkgTWFpbiBDbG9jayBGcmVxdWVuY3kgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBDS0dSX1BMTFIgOiAoUE1DIE9mZnNldDogMHgyYykgUExMIEIgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBQTUNfTUNLUiA6IChQTUMgT2Zmc2V0OiAweDMwKSBNYXN0ZXIgQ2xvY2sgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19DU1MgICAgICAgICAgICAgICAgICggMHgzIDw8IDAgKSAvKiAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgU2VsZWN0aW9uICovDQotI2RlZmluZSAgICAgQVQ5MUNfUE1DX0NTU19TTE9XX0NMSyAgICAoIDB4MCApICAgICAgLyogKFBNQykgU2xvdyBDbG9jayBpcyBzZWxlY3RlZCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1BNQ19DU1NfTUFJTl9DTEsgICAgKCAweDEgKSAgICAgIC8qIChQTUMpIE1haW4gQ2xvY2sgaXMgc2VsZWN0ZWQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19QTUNfQ1NTX1BMTF9DTEsgICAgICggMHgzICkgICAgICAvKiAoUE1DKSBDbG9jayBmcm9tIFBMTCBpcyBzZWxlY3RlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1BSRVMgICAgICAgICAgICAgICAgKCAweDcgPDwgMiApIC8qIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBQcmVzY2FsZXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19QTUNfUFJFU19DTEsgICAgICAgICggMHgwIDw8IDIgKSAvKiAoUE1DKSBTZWxlY3RlZCBjbG9jayAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1BNQ19QUkVTX0NMS18yICAgICAgKCAweDEgPDwgMiApIC8qIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgMiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1BNQ19QUkVTX0NMS180ICAgICAgKCAweDIgPDwgMiApIC8qIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgNCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1BNQ19QUkVTX0NMS184ICAgICAgKCAweDMgPDwgMiApIC8qIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgOCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1BNQ19QUkVTX0NMS18xNiAgICAgKCAweDQgPDwgMiApIC8qIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgMTYgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19QTUNfUFJFU19DTEtfMzIgICAgICggMHg1IDw8IDIgKSAvKiAoUE1DKSBTZWxlY3RlZCBjbG9jayBkaXZpZGVkIGJ5IDMyICovDQotI2RlZmluZSAgICAgQVQ5MUNfUE1DX1BSRVNfQ0xLXzY0ICAgICAoIDB4NiA8PCAyICkgLyogKFBNQykgU2VsZWN0ZWQgY2xvY2sgZGl2aWRlZCBieSA2NCAqLw0KLS8qIC0tLS0tLS0tIFBNQ19QQ0tSIDogKFBNQyBPZmZzZXQ6IDB4NDApIFByb2dyYW1tYWJsZSBDbG9jayBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFBNQ19JRVIgOiAoUE1DIE9mZnNldDogMHg2MCkgUE1DIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19NT1NDUyAgICAgICAgICAgICAgICggMHgxIDw8IDAgKSAgLyogKFBNQykgTU9TQyBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzayAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX0xPQ0sgICAgICAgICAgICAgICAgKCAweDEgPDwgMiApICAvKiAoUE1DKSBQTEwgU3RhdHVzL0VuYWJsZS9EaXNhYmxlL01hc2sgKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19NQ0tSRFkgICAgICAgICAgICAgICggMHgxIDw8IDMgKSAgLyogKFBNQykgTUNLX1JEWSBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzayAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDSzBSRFkgICAgICAgICAgICAgKCAweDEgPDwgOCApICAvKiAoUE1DKSBQQ0swX1JEWSBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzayAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDSzFSRFkgICAgICAgICAgICAgKCAweDEgPDwgOSApICAvKiAoUE1DKSBQQ0sxX1JEWSBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzayAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDSzJSRFkgICAgICAgICAgICAgKCAweDEgPDwgMTAgKSAvKiAoUE1DKSBQQ0syX1JEWSBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzayAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDSzNSRFkgICAgICAgICAgICAgKCAweDEgPDwgMTEgKSAvKiAoUE1DKSBQQ0szX1JEWSBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzayAqLw0KLS8qIC0tLS0tLS0tIFBNQ19JRFIgOiAoUE1DIE9mZnNldDogMHg2NCkgUE1DIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gUE1DX1NSIDogKFBNQyBPZmZzZXQ6IDB4NjgpIFBNQyBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBQTUNfSU1SIDogKFBNQyBPZmZzZXQ6IDB4NmMpIFBNQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSAqLw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUG93ZXIgTWFuYWdlbWVudCBDb250cm9sZXINCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfUE1DIHN0cnVjdHVyZSAqKioNCisjZGVmaW5lIFBNQ19TQ0VSICAgICAgICAoIDApIC8vIFN5c3RlbSBDbG9jayBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFBNQ19TQ0RSICAgICAgICAoIDQpIC8vIFN5c3RlbSBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBQTUNfU0NTUiAgICAgICAgKCA4KSAvLyBTeXN0ZW0gQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBQTUNfUENFUiAgICAgICAgKDE2KSAvLyBQZXJpcGhlcmFsIENsb2NrIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUE1DX1BDRFIgICAgICAgICgyMCkgLy8gUGVyaXBoZXJhbCBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBQTUNfUENTUiAgICAgICAgKDI0KSAvLyBQZXJpcGhlcmFsIENsb2NrIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgUE1DX01PUiAgICAgICAgICgzMikgLy8gTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBQTUNfTUNGUiAgICAgICAgKDM2KSAvLyBNYWluIENsb2NrICBGcmVxdWVuY3kgUmVnaXN0ZXINCisjZGVmaW5lIFBNQ19QTExSICAgICAgICAoNDQpIC8vIFBMTCBSZWdpc3Rlcg0KKyNkZWZpbmUgUE1DX01DS1IgICAgICAgICg0OCkgLy8gTWFzdGVyIENsb2NrIFJlZ2lzdGVyDQorI2RlZmluZSBQTUNfUENLUiAgICAgICAgKDY0KSAvLyBQcm9ncmFtbWFibGUgQ2xvY2sgUmVnaXN0ZXINCisjZGVmaW5lIFBNQ19JRVIgICAgICAgICAoOTYpIC8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFBNQ19JRFIgICAgICAgICAoMTAwKSAvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUE1DX1NSICAgICAgICAgICgxMDQpIC8vIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgUE1DX0lNUiAgICAgICAgICgxMDgpIC8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorLy8gLS0tLS0tLS0gUE1DX1NDRVIgOiAoUE1DIE9mZnNldDogMHgwKSBTeXN0ZW0gQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDSyAgICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoUE1DKSBQcm9jZXNzb3IgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BNQ19VRFAgICAgICAgICAgICAgKDB4MSA8PCAgNykgLy8gKFBNQykgVVNCIERldmljZSBQb3J0IENsb2NrDQorI2RlZmluZSBBVDkxQ19QTUNfUENLMCAgICAgICAgICAgICgweDEgPDwgIDgpIC8vIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQNCisjZGVmaW5lIEFUOTFDX1BNQ19QQ0sxICAgICAgICAgICAgKDB4MSA8PCAgOSkgLy8gKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dA0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDSzIgICAgICAgICAgICAoMHgxIDw8IDEwKSAvLyAoUE1DKSBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0DQorI2RlZmluZSBBVDkxQ19QTUNfUENLMyAgICAgICAgICAgICgweDEgPDwgMTEpIC8vIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQNCisvLyAtLS0tLS0tLSBQTUNfU0NEUiA6IChQTUMgT2Zmc2V0OiAweDQpIFN5c3RlbSBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFBNQ19TQ1NSIDogKFBNQyBPZmZzZXQ6IDB4OCkgU3lzdGVtIENsb2NrIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBDS0dSX01PUiA6IChQTUMgT2Zmc2V0OiAweDIwKSBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQ0tHUl9NQ0ZSIDogKFBNQyBPZmZzZXQ6IDB4MjQpIE1haW4gQ2xvY2sgRnJlcXVlbmN5IFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIENLR1JfUExMUiA6IChQTUMgT2Zmc2V0OiAweDJjKSBQTEwgQiBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQTUNfTUNLUiA6IChQTUMgT2Zmc2V0OiAweDMwKSBNYXN0ZXIgQ2xvY2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QTUNfQ1NTICAgICAgICAgICAgICgweDMgPDwgIDApIC8vIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19QTUNfQ1NTX1NMT1dfQ0xLICAgICAgICAgICAgICgweDApIC8vIChQTUMpIFNsb3cgQ2xvY2sgaXMgc2VsZWN0ZWQNCisjZGVmaW5lIAlBVDkxQ19QTUNfQ1NTX01BSU5fQ0xLICAgICAgICAgICAgICgweDEpIC8vIChQTUMpIE1haW4gQ2xvY2sgaXMgc2VsZWN0ZWQNCisjZGVmaW5lIAlBVDkxQ19QTUNfQ1NTX1BMTF9DTEsgICAgICAgICAgICAgICgweDMpIC8vIChQTUMpIENsb2NrIGZyb20gUExMIGlzIHNlbGVjdGVkDQorI2RlZmluZSBBVDkxQ19QTUNfUFJFUyAgICAgICAgICAgICgweDcgPDwgIDIpIC8vIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBQcmVzY2FsZXINCisjZGVmaW5lIAlBVDkxQ19QTUNfUFJFU19DTEsgICAgICAgICAgICAgICAgICAoMHgwIDw8ICAyKSAvLyAoUE1DKSBTZWxlY3RlZCBjbG9jaw0KKyNkZWZpbmUgCUFUOTFDX1BNQ19QUkVTX0NMS18yICAgICAgICAgICAgICAgICgweDEgPDwgIDIpIC8vIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgMg0KKyNkZWZpbmUgCUFUOTFDX1BNQ19QUkVTX0NMS180ICAgICAgICAgICAgICAgICgweDIgPDwgIDIpIC8vIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgNA0KKyNkZWZpbmUgCUFUOTFDX1BNQ19QUkVTX0NMS184ICAgICAgICAgICAgICAgICgweDMgPDwgIDIpIC8vIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgOA0KKyNkZWZpbmUgCUFUOTFDX1BNQ19QUkVTX0NMS18xNiAgICAgICAgICAgICAgICgweDQgPDwgIDIpIC8vIChQTUMpIFNlbGVjdGVkIGNsb2NrIGRpdmlkZWQgYnkgMTYNCisjZGVmaW5lIAlBVDkxQ19QTUNfUFJFU19DTEtfMzIgICAgICAgICAgICAgICAoMHg1IDw8ICAyKSAvLyAoUE1DKSBTZWxlY3RlZCBjbG9jayBkaXZpZGVkIGJ5IDMyDQorI2RlZmluZSAJQVQ5MUNfUE1DX1BSRVNfQ0xLXzY0ICAgICAgICAgICAgICAgKDB4NiA8PCAgMikgLy8gKFBNQykgU2VsZWN0ZWQgY2xvY2sgZGl2aWRlZCBieSA2NA0KKy8vIC0tLS0tLS0tIFBNQ19QQ0tSIDogKFBNQyBPZmZzZXQ6IDB4NDApIFByb2dyYW1tYWJsZSBDbG9jayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQTUNfSUVSIDogKFBNQyBPZmZzZXQ6IDB4NjApIFBNQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUE1DX01PU0NTICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoUE1DKSBNT1NDIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrDQorI2RlZmluZSBBVDkxQ19QTUNfTE9DSyAgICAgICAgICAgICgweDEgPDwgIDIpIC8vIChQTUMpIFBMTCBTdGF0dXMvRW5hYmxlL0Rpc2FibGUvTWFzaw0KKyNkZWZpbmUgQVQ5MUNfUE1DX01DS1JEWSAgICAgICAgICAoMHgxIDw8ICAzKSAvLyAoUE1DKSBNQ0tfUkRZIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrDQorI2RlZmluZSBBVDkxQ19QTUNfUENLMFJEWSAgICAgICAgICgweDEgPDwgIDgpIC8vIChQTUMpIFBDSzBfUkRZIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrDQorI2RlZmluZSBBVDkxQ19QTUNfUENLMVJEWSAgICAgICAgICgweDEgPDwgIDkpIC8vIChQTUMpIFBDSzFfUkRZIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrDQorI2RlZmluZSBBVDkxQ19QTUNfUENLMlJEWSAgICAgICAgICgweDEgPDwgMTApIC8vIChQTUMpIFBDSzJfUkRZIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrDQorI2RlZmluZSBBVDkxQ19QTUNfUENLM1JEWSAgICAgICAgICgweDEgPDwgMTEpIC8vIChQTUMpIFBDSzNfUkRZIFN0YXR1cy9FbmFibGUvRGlzYWJsZS9NYXNrDQorLy8gLS0tLS0tLS0gUE1DX0lEUiA6IChQTUMgT2Zmc2V0OiAweDY0KSBQTUMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUE1DX1NSIDogKFBNQyBPZmZzZXQ6IDB4NjgpIFBNQyBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUE1DX0lNUiA6IChQTUMgT2Zmc2V0OiAweDZjKSBQTUMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBSZXNldCBDb250cm9sbGVyIEludGVyZmFjZSAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19SU1RDIHN0cnVjdHVyZSAqKiogKi8NCi0jZGVmaW5lIFJTVENfUkNSICAgICAgICAgICAgICAgICAgICAgICAgICAoIDAgKSAgICAgICAgICAvKiBSZXNldCBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBSU1RDX1JTUiAgICAgICAgICAgICAgICAgICAgICAgICAgKCA0ICkgICAgICAgICAgLyogUmVzZXQgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBSU1RDX1JNUiAgICAgICAgICAgICAgICAgICAgICAgICAgKCA4ICkgICAgICAgICAgLyogUmVzZXQgTW9kZSBSZWdpc3RlciAqLw0KLS8qIC0tLS0tLS0tIFJTVENfUkNSIDogKFJTVEMgT2Zmc2V0OiAweDApIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1JTVENfUFJPQ1JTVCAgICAgICAgICAgICAgICAoIDB4MSA8PCAwICkgICAvKiAoUlNUQykgUHJvY2Vzc29yIFJlc2V0ICovDQotI2RlZmluZSBBVDkxQ19SU1RDX1BFUlJTVCAgICAgICAgICAgICAgICAgKCAweDEgPDwgMiApICAgLyogKFJTVEMpIFBlcmlwaGVyYWwgUmVzZXQgKi8NCi0jZGVmaW5lIEFUOTFDX1JTVENfRVhUUlNUICAgICAgICAgICAgICAgICAoIDB4MSA8PCAzICkgICAvKiAoUlNUQykgRXh0ZXJuYWwgUmVzZXQgKi8NCi0jZGVmaW5lIEFUOTFDX1JTVENfS0VZICAgICAgICAgICAgICAgICAgICAoIDB4RkYgPDwgMjQgKSAvKiAoUlNUQykgUGFzc3dvcmQgKi8NCi0vKiAtLS0tLS0tLSBSU1RDX1JTUiA6IChSU1RDIE9mZnNldDogMHg0KSBSZXNldCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1JTVENfVVJTVFMgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAwICkgICAvKiAoUlNUQykgVXNlciBSZXNldCBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX1JTVENfQk9EU1RTICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxICkgICAvKiAoUlNUQykgQnJvd25vdXQgRGV0ZWN0aW9uIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfUlNUQ19SU1RUWVAgICAgICAgICAgICAgICAgICggMHg3IDw8IDggKSAgIC8qIChSU1RDKSBSZXNldCBUeXBlICovDQotI2RlZmluZSAgICAgQVQ5MUNfUlNUQ19SU1RUWVBfUE9XRVJVUCAgICAgKCAweDAgPDwgOCApICAgLyogKFJTVEMpIFBvd2VyLXVwIFJlc2V0LiBWRERDT1JFIHJpc2luZy4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19SU1RDX1JTVFRZUF9XQUtFVVAgICAgICAoIDB4MSA8PCA4ICkgICAvKiAoUlNUQykgV2FrZVVwIFJlc2V0LiBWRERDT1JFIHJpc2luZy4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19SU1RDX1JTVFRZUF9XQVRDSERPRyAgICAoIDB4MiA8PCA4ICkgICAvKiAoUlNUQykgV2F0Y2hkb2cgUmVzZXQuIFdhdGNoZG9nIG92ZXJmbG93IG9jY3VyZWQuICovDQotI2RlZmluZSAgICAgQVQ5MUNfUlNUQ19SU1RUWVBfU09GVFdBUkUgICAgKCAweDMgPDwgOCApICAgLyogKFJTVEMpIFNvZnR3YXJlIFJlc2V0LiBQcm9jZXNzb3IgcmVzZXQgcmVxdWlyZWQgYnkgdGhlIHNvZnR3YXJlLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1JTVENfUlNUVFlQX1VTRVIgICAgICAgICggMHg0IDw8IDggKSAgIC8qIChSU1RDKSBVc2VyIFJlc2V0LiBOUlNUIHBpbiBkZXRlY3RlZCBsb3cuICovDQotI2RlZmluZSAgICAgQVQ5MUNfUlNUQ19SU1RUWVBfQlJPV05PVVQgICAgKCAweDUgPDwgOCApICAgLyogKFJTVEMpIEJyb3dub3V0IFJlc2V0IG9jY3VyZWQuICovDQotI2RlZmluZSBBVDkxQ19SU1RDX05SU1RMICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTYgKSAgLyogKFJTVEMpIE5SU1QgcGluIGxldmVsICovDQotI2RlZmluZSBBVDkxQ19SU1RDX1NSQ01QICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTcgKSAgLyogKFJTVEMpIFNvZnR3YXJlIFJlc2V0IENvbW1hbmQgaW4gUHJvZ3Jlc3MuICovDQotLyogLS0tLS0tLS0gUlNUQ19STVIgOiAoUlNUQyBPZmZzZXQ6IDB4OCkgUmVzZXQgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfUlNUQ19VUlNURU4gICAgICAgICAgICAgICAgICggMHgxIDw8IDAgKSAgIC8qIChSU1RDKSBVc2VyIFJlc2V0IEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfUlNUQ19VUlNUSUVOICAgICAgICAgICAgICAgICggMHgxIDw8IDQgKSAgIC8qIChSU1RDKSBVc2VyIFJlc2V0IEludGVycnVwdCBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1JTVENfRVJTVEwgICAgICAgICAgICAgICAgICAoIDB4RiA8PCA4ICkgICAvKiAoUlNUQykgVXNlciBSZXNldCBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1JTVENfQk9ESUVOICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxNiApICAvKiAoUlNUQykgQnJvd25vdXQgRGV0ZWN0aW9uIEludGVycnVwdCBFbmFibGUgKi8NCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFJlc2V0IENvbnRyb2xsZXIgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1JTVEMgc3RydWN0dXJlICoqKg0KKyNkZWZpbmUgUlNUQ19SQ1IgICAgICAgICggMCkgLy8gUmVzZXQgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgUlNUQ19SU1IgICAgICAgICggNCkgLy8gUmVzZXQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBSU1RDX1JNUiAgICAgICAgKCA4KSAvLyBSZXNldCBNb2RlIFJlZ2lzdGVyDQorLy8gLS0tLS0tLS0gUlNUQ19SQ1IgOiAoUlNUQyBPZmZzZXQ6IDB4MCkgUmVzZXQgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1JTVENfUFJPQ1JTVCAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFJTVEMpIFByb2Nlc3NvciBSZXNldA0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19QRVJSU1QgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoUlNUQykgUGVyaXBoZXJhbCBSZXNldA0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19FWFRSU1QgICAgICAgICAoMHgxIDw8ICAzKSAvLyAoUlNUQykgRXh0ZXJuYWwgUmVzZXQNCisjZGVmaW5lIEFUOTFDX1JTVENfS0VZICAgICAgICAgICAgKDB4RkYgPDwgMjQpIC8vIChSU1RDKSBQYXNzd29yZA0KKy8vIC0tLS0tLS0tIFJTVENfUlNSIDogKFJTVEMgT2Zmc2V0OiAweDQpIFJlc2V0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1JTVENfVVJTVFMgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFJTVEMpIFVzZXIgUmVzZXQgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19SU1RDX0JPRFNUUyAgICAgICAgICgweDEgPDwgIDEpIC8vIChSU1RDKSBCcm93bm91dCBEZXRlY3Rpb24gU3RhdHVzDQorI2RlZmluZSBBVDkxQ19SU1RDX1JTVFRZUCAgICAgICAgICgweDcgPDwgIDgpIC8vIChSU1RDKSBSZXNldCBUeXBlDQorI2RlZmluZSAJQVQ5MUNfUlNUQ19SU1RUWVBfUE9XRVJVUCAgICAgICAgICAgICAgKDB4MCA8PCAgOCkgLy8gKFJTVEMpIFBvd2VyLXVwIFJlc2V0LiBWRERDT1JFIHJpc2luZy4NCisjZGVmaW5lIAlBVDkxQ19SU1RDX1JTVFRZUF9XQUtFVVAgICAgICAgICAgICAgICAoMHgxIDw8ICA4KSAvLyAoUlNUQykgV2FrZVVwIFJlc2V0LiBWRERDT1JFIHJpc2luZy4NCisjZGVmaW5lIAlBVDkxQ19SU1RDX1JTVFRZUF9XQVRDSERPRyAgICAgICAgICAgICAoMHgyIDw8ICA4KSAvLyAoUlNUQykgV2F0Y2hkb2cgUmVzZXQuIFdhdGNoZG9nIG92ZXJmbG93IG9jY3VyZWQuDQorI2RlZmluZSAJQVQ5MUNfUlNUQ19SU1RUWVBfU09GVFdBUkUgICAgICAgICAgICAgKDB4MyA8PCAgOCkgLy8gKFJTVEMpIFNvZnR3YXJlIFJlc2V0LiBQcm9jZXNzb3IgcmVzZXQgcmVxdWlyZWQgYnkgdGhlIHNvZnR3YXJlLg0KKyNkZWZpbmUgCUFUOTFDX1JTVENfUlNUVFlQX1VTRVIgICAgICAgICAgICAgICAgICgweDQgPDwgIDgpIC8vIChSU1RDKSBVc2VyIFJlc2V0LiBOUlNUIHBpbiBkZXRlY3RlZCBsb3cuDQorI2RlZmluZSAJQVQ5MUNfUlNUQ19SU1RUWVBfQlJPV05PVVQgICAgICAgICAgICAgKDB4NSA8PCAgOCkgLy8gKFJTVEMpIEJyb3dub3V0IFJlc2V0IG9jY3VyZWQuDQorI2RlZmluZSBBVDkxQ19SU1RDX05SU1RMICAgICAgICAgICgweDEgPDwgMTYpIC8vIChSU1RDKSBOUlNUIHBpbiBsZXZlbA0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19TUkNNUCAgICAgICAgICAoMHgxIDw8IDE3KSAvLyAoUlNUQykgU29mdHdhcmUgUmVzZXQgQ29tbWFuZCBpbiBQcm9ncmVzcy4NCisvLyAtLS0tLS0tLSBSU1RDX1JNUiA6IChSU1RDIE9mZnNldDogMHg4KSBSZXNldCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19VUlNURU4gICAgICAgICAoMHgxIDw8ICAwKSAvLyAoUlNUQykgVXNlciBSZXNldCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1JTVENfVVJTVElFTiAgICAgICAgKDB4MSA8PCAgNCkgLy8gKFJTVEMpIFVzZXIgUmVzZXQgSW50ZXJydXB0IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19FUlNUTCAgICAgICAgICAoMHhGIDw8ICA4KSAvLyAoUlNUQykgVXNlciBSZXNldCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1JTVENfQk9ESUVOICAgICAgICAgKDB4MSA8PCAxNikgLy8gKFJTVEMpIEJyb3dub3V0IERldGVjdGlvbiBJbnRlcnJ1cHQgRW5hYmxlDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBSZWFsIFRpbWUgVGltZXIgQ29udHJvbGxlciBJbnRlcmZhY2UgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfUlRUQyBzdHJ1Y3R1cmUgKioqICovDQotI2RlZmluZSBSVFRDX1JUTVIgICAgICAgICAgICAgICAoIDAgKSAgICAgICAgICAgLyogUmVhbC10aW1lIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFJUVENfUlRBUiAgICAgICAgICAgICAgICggNCApICAgICAgICAgICAvKiBSZWFsLXRpbWUgQWxhcm0gUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFJUVENfUlRWUiAgICAgICAgICAgICAgICggOCApICAgICAgICAgICAvKiBSZWFsLXRpbWUgVmFsdWUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFJUVENfUlRTUiAgICAgICAgICAgICAgICggMTIgKSAgICAgICAgICAvKiBSZWFsLXRpbWUgU3RhdHVzIFJlZ2lzdGVyICovDQotLyogLS0tLS0tLS0gUlRUQ19SVE1SIDogKFJUVEMgT2Zmc2V0OiAweDApIFJlYWwtdGltZSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19SVFRDX1JUUFJFUyAgICAgICAoIDB4RkZGRiA8PCAwICkgLyogKFJUVEMpIFJlYWwtdGltZSBUaW1lciBQcmVzY2FsZXIgVmFsdWUgKi8NCi0jZGVmaW5lIEFUOTFDX1JUVENfQUxNSUVOICAgICAgICggMHgxIDw8IDE2ICkgICAvKiAoUlRUQykgQWxhcm0gSW50ZXJydXB0IEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfUlRUQ19SVFRJTkNJRU4gICAgKCAweDEgPDwgMTcgKSAgIC8qIChSVFRDKSBSZWFsIFRpbWUgVGltZXIgSW5jcmVtZW50IEludGVycnVwdCBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1JUVENfUlRUUlNUICAgICAgICggMHgxIDw8IDE4ICkgICAvKiAoUlRUQykgUmVhbCBUaW1lIFRpbWVyIFJlc3RhcnQgKi8NCi0vKiAtLS0tLS0tLSBSVFRDX1JUQVIgOiAoUlRUQyBPZmZzZXQ6IDB4NCkgUmVhbC10aW1lIEFsYXJtIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19SVFRDX0FMTVYgICAgICAgICAoIDB4MCA8PCAwICkgICAgLyogKFJUVEMpIEFsYXJtIFZhbHVlICovDQotLyogLS0tLS0tLS0gUlRUQ19SVFZSIDogKFJUVEMgT2Zmc2V0OiAweDgpIEN1cnJlbnQgUmVhbC10aW1lIFZhbHVlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19SVFRDX0NSVFYgICAgICAgICAoIDB4MCA8PCAwICkgICAgLyogKFJUVEMpIEN1cnJlbnQgUmVhbC10aW1lIFZhbHVlICovDQotLyogLS0tLS0tLS0gUlRUQ19SVFNSIDogKFJUVEMgT2Zmc2V0OiAweGMpIFJlYWwtdGltZSBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1JUVENfQUxNUyAgICAgICAgICggMHgxIDw8IDAgKSAgICAvKiAoUlRUQykgUmVhbC10aW1lIEFsYXJtIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfUlRUQ19SVFRJTkMgICAgICAgKCAweDEgPDwgMSApICAgIC8qIChSVFRDKSBSZWFsLXRpbWUgVGltZXIgSW5jcmVtZW50ICovDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBSZWFsIFRpbWUgVGltZXIgQ29udHJvbGxlciBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfUlRUQyBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBSVFRDX1JUTVIgICAgICAgKCAwKSAvLyBSZWFsLXRpbWUgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUlRUQ19SVEFSICAgICAgICggNCkgLy8gUmVhbC10aW1lIEFsYXJtIFJlZ2lzdGVyDQorI2RlZmluZSBSVFRDX1JUVlIgICAgICAgKCA4KSAvLyBSZWFsLXRpbWUgVmFsdWUgUmVnaXN0ZXINCisjZGVmaW5lIFJUVENfUlRTUiAgICAgICAoMTIpIC8vIFJlYWwtdGltZSBTdGF0dXMgUmVnaXN0ZXINCisvLyAtLS0tLS0tLSBSVFRDX1JUTVIgOiAoUlRUQyBPZmZzZXQ6IDB4MCkgUmVhbC10aW1lIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19SVFRDX1JUUFJFUyAgICAgICAgICgweEZGRkYgPDwgIDApIC8vIChSVFRDKSBSZWFsLXRpbWUgVGltZXIgUHJlc2NhbGVyIFZhbHVlDQorI2RlZmluZSBBVDkxQ19SVFRDX0FMTUlFTiAgICAgICAgICgweDEgPDwgMTYpIC8vIChSVFRDKSBBbGFybSBJbnRlcnJ1cHQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19SVFRDX1JUVElOQ0lFTiAgICAgICgweDEgPDwgMTcpIC8vIChSVFRDKSBSZWFsIFRpbWUgVGltZXIgSW5jcmVtZW50IEludGVycnVwdCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1JUVENfUlRUUlNUICAgICAgICAgKDB4MSA8PCAxOCkgLy8gKFJUVEMpIFJlYWwgVGltZSBUaW1lciBSZXN0YXJ0DQorLy8gLS0tLS0tLS0gUlRUQ19SVEFSIDogKFJUVEMgT2Zmc2V0OiAweDQpIFJlYWwtdGltZSBBbGFybSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1JUVENfQUxNViAgICAgICAgICAgKDB4MCA8PCAgMCkgLy8gKFJUVEMpIEFsYXJtIFZhbHVlDQorLy8gLS0tLS0tLS0gUlRUQ19SVFZSIDogKFJUVEMgT2Zmc2V0OiAweDgpIEN1cnJlbnQgUmVhbC10aW1lIFZhbHVlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUlRUQ19DUlRWICAgICAgICAgICAoMHgwIDw8ICAwKSAvLyAoUlRUQykgQ3VycmVudCBSZWFsLXRpbWUgVmFsdWUNCisvLyAtLS0tLS0tLSBSVFRDX1JUU1IgOiAoUlRUQyBPZmZzZXQ6IDB4YykgUmVhbC10aW1lIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1JUVENfQUxNUyAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFJUVEMpIFJlYWwtdGltZSBBbGFybSBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX1JUVENfUlRUSU5DICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKFJUVEMpIFJlYWwtdGltZSBUaW1lciBJbmNyZW1lbnQNCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFBlcmlvZGljIEludGVydmFsIFRpbWVyIENvbnRyb2xsZXIgSW50ZXJmYWNlICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1BJVEMgc3RydWN0dXJlICoqKiAqLw0KLSNkZWZpbmUgUElUQ19QSU1SICAgICAgICAgICAgKCAwICkgICAgICAgICAgICAvKiBQZXJpb2QgSW50ZXJ2YWwgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUElUQ19QSVNSICAgICAgICAgICAgKCA0ICkgICAgICAgICAgICAvKiBQZXJpb2QgSW50ZXJ2YWwgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBQSVRDX1BJVlIgICAgICAgICAgICAoIDggKSAgICAgICAgICAgIC8qIFBlcmlvZCBJbnRlcnZhbCBWYWx1ZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUElUQ19QSUlSICAgICAgICAgICAgKCAxMiApICAgICAgICAgICAvKiBQZXJpb2QgSW50ZXJ2YWwgSW1hZ2UgUmVnaXN0ZXIgKi8NCi0vKiAtLS0tLS0tLSBQSVRDX1BJTVIgOiAoUElUQyBPZmZzZXQ6IDB4MCkgUGVyaW9kaWMgSW50ZXJ2YWwgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElUQ19QSVYgICAgICAgKCAweEZGRkZGIDw8IDAgKSAvKiAoUElUQykgUGVyaW9kaWMgSW50ZXJ2YWwgVmFsdWUgKi8NCi0jZGVmaW5lIEFUOTFDX1BJVENfUElURU4gICAgICggMHgxIDw8IDI0ICkgICAgLyogKFBJVEMpIFBlcmlvZGljIEludGVydmFsIFRpbWVyIEVuYWJsZWQgKi8NCi0jZGVmaW5lIEFUOTFDX1BJVENfUElUSUVOICAgICggMHgxIDw8IDI1ICkgICAgLyogKFBJVEMpIFBlcmlvZGljIEludGVydmFsIFRpbWVyIEludGVycnVwdCBFbmFibGUgKi8NCi0vKiAtLS0tLS0tLSBQSVRDX1BJU1IgOiAoUElUQyBPZmZzZXQ6IDB4NCkgUGVyaW9kaWMgSW50ZXJ2YWwgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19QSVRDX1BJVFMgICAgICAoIDB4MSA8PCAwICkgICAgIC8qIChQSVRDKSBQZXJpb2RpYyBJbnRlcnZhbCBUaW1lciBTdGF0dXMgKi8NCi0vKiAtLS0tLS0tLSBQSVRDX1BJVlIgOiAoUElUQyBPZmZzZXQ6IDB4OCkgUGVyaW9kaWMgSW50ZXJ2YWwgVmFsdWUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1BJVENfQ1BJViAgICAgICggMHhGRkZGRiA8PCAwICkgLyogKFBJVEMpIEN1cnJlbnQgUGVyaW9kaWMgSW50ZXJ2YWwgVmFsdWUgKi8NCi0jZGVmaW5lIEFUOTFDX1BJVENfUElDTlQgICAgICggMHhGRkYgPDwgMjAgKSAgLyogKFBJVEMpIFBlcmlvZGljIEludGVydmFsIENvdW50ZXIgKi8NCi0vKiAtLS0tLS0tLSBQSVRDX1BJSVIgOiAoUElUQyBPZmZzZXQ6IDB4YykgUGVyaW9kaWMgSW50ZXJ2YWwgSW1hZ2UgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFBlcmlvZGljIEludGVydmFsIFRpbWVyIENvbnRyb2xsZXIgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1BJVEMgc3RydWN0dXJlICoqKg0KKyNkZWZpbmUgUElUQ19QSU1SICAgICAgICggMCkgLy8gUGVyaW9kIEludGVydmFsIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIFBJVENfUElTUiAgICAgICAoIDQpIC8vIFBlcmlvZCBJbnRlcnZhbCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFBJVENfUElWUiAgICAgICAoIDgpIC8vIFBlcmlvZCBJbnRlcnZhbCBWYWx1ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUElUQ19QSUlSICAgICAgICgxMikgLy8gUGVyaW9kIEludGVydmFsIEltYWdlIFJlZ2lzdGVyDQorLy8gLS0tLS0tLS0gUElUQ19QSU1SIDogKFBJVEMgT2Zmc2V0OiAweDApIFBlcmlvZGljIEludGVydmFsIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QSVRDX1BJViAgICAgICAgICAgICgweEZGRkZGIDw8ICAwKSAvLyAoUElUQykgUGVyaW9kaWMgSW50ZXJ2YWwgVmFsdWUNCisjZGVmaW5lIEFUOTFDX1BJVENfUElURU4gICAgICAgICAgKDB4MSA8PCAyNCkgLy8gKFBJVEMpIFBlcmlvZGljIEludGVydmFsIFRpbWVyIEVuYWJsZWQNCisjZGVmaW5lIEFUOTFDX1BJVENfUElUSUVOICAgICAgICAgKDB4MSA8PCAyNSkgLy8gKFBJVEMpIFBlcmlvZGljIEludGVydmFsIFRpbWVyIEludGVycnVwdCBFbmFibGUNCisvLyAtLS0tLS0tLSBQSVRDX1BJU1IgOiAoUElUQyBPZmZzZXQ6IDB4NCkgUGVyaW9kaWMgSW50ZXJ2YWwgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUElUQ19QSVRTICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoUElUQykgUGVyaW9kaWMgSW50ZXJ2YWwgVGltZXIgU3RhdHVzDQorLy8gLS0tLS0tLS0gUElUQ19QSVZSIDogKFBJVEMgT2Zmc2V0OiAweDgpIFBlcmlvZGljIEludGVydmFsIFZhbHVlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUElUQ19DUElWICAgICAgICAgICAoMHhGRkZGRiA8PCAgMCkgLy8gKFBJVEMpIEN1cnJlbnQgUGVyaW9kaWMgSW50ZXJ2YWwgVmFsdWUNCisjZGVmaW5lIEFUOTFDX1BJVENfUElDTlQgICAgICAgICAgKDB4RkZGIDw8IDIwKSAvLyAoUElUQykgUGVyaW9kaWMgSW50ZXJ2YWwgQ291bnRlcg0KKy8vIC0tLS0tLS0tIFBJVENfUElJUiA6IChQSVRDIE9mZnNldDogMHhjKSBQZXJpb2RpYyBJbnRlcnZhbCBJbWFnZSBSZWdpc3RlciAtLS0tLS0tLSANCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFdhdGNoZG9nIFRpbWVyIENvbnRyb2xsZXIgSW50ZXJmYWNlICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1dEVEMgc3RydWN0dXJlICoqKiAqLw0KLSNkZWZpbmUgV0RUQ19XRENSICAgICAgICAgICAgICAgKCAwICkgICAgICAgICAgIC8qIFdhdGNoZG9nIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFdEVENfV0RNUiAgICAgICAgICAgICAgICggNCApICAgICAgICAgICAvKiBXYXRjaGRvZyBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBXRFRDX1dEU1IgICAgICAgICAgICAgICAoIDggKSAgICAgICAgICAgLyogV2F0Y2hkb2cgU3RhdHVzIFJlZ2lzdGVyICovDQotLyogLS0tLS0tLS0gV0RUQ19XRENSIDogKFdEVEMgT2Zmc2V0OiAweDApIFBlcmlvZGljIEludGVydmFsIEltYWdlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19XRFRDX1dEUlNUVCAgICAgICAoIDB4MSA8PCAwICkgICAgLyogKFdEVEMpIFdhdGNoZG9nIFJlc3RhcnQgKi8NCi0jZGVmaW5lIEFUOTFDX1dEVENfS0VZICAgICAgICAgICggMHhGRiA8PCAyNCApICAvKiAoV0RUQykgV2F0Y2hkb2cgS0VZIFBhc3N3b3JkICovDQotLyogLS0tLS0tLS0gV0RUQ19XRE1SIDogKFdEVEMgT2Zmc2V0OiAweDQpIFdhdGNoZG9nIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1dEVENfV0RWICAgICAgICAgICggMHhGRkYgPDwgMCApICAvKiAoV0RUQykgV2F0Y2hkb2cgVGltZXIgUmVzdGFydCAqLw0KLSNkZWZpbmUgQVQ5MUNfV0RUQ19XREZJRU4gICAgICAgKCAweDEgPDwgMTIgKSAgIC8qIChXRFRDKSBXYXRjaGRvZyBGYXVsdCBJbnRlcnJ1cHQgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19XRFRDX1dEUlNURU4gICAgICAoIDB4MSA8PCAxMyApICAgLyogKFdEVEMpIFdhdGNoZG9nIFJlc2V0IEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfV0RUQ19XRFJQUk9DICAgICAgKCAweDEgPDwgMTQgKSAgIC8qIChXRFRDKSBXYXRjaGRvZyBUaW1lciBSZXN0YXJ0ICovDQotI2RlZmluZSBBVDkxQ19XRFRDX1dERElTICAgICAgICAoIDB4MSA8PCAxNSApICAgLyogKFdEVEMpIFdhdGNoZG9nIERpc2FibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1dEVENfV0REICAgICAgICAgICggMHhGRkYgPDwgMTYgKSAvKiAoV0RUQykgV2F0Y2hkb2cgRGVsdGEgVmFsdWUgKi8NCi0jZGVmaW5lIEFUOTFDX1dEVENfV0REQkdITFQgICAgICggMHgxIDw8IDI4ICkgICAvKiAoV0RUQykgV2F0Y2hkb2cgRGVidWcgSGFsdCAqLw0KLSNkZWZpbmUgQVQ5MUNfV0RUQ19XRElETEVITFQgICAgKCAweDEgPDwgMjkgKSAgIC8qIChXRFRDKSBXYXRjaGRvZyBJZGxlIEhhbHQgKi8NCi0vKiAtLS0tLS0tLSBXRFRDX1dEU1IgOiAoV0RUQyBPZmZzZXQ6IDB4OCkgV2F0Y2hkb2cgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19XRFRDX1dEVU5GICAgICAgICAoIDB4MSA8PCAwICkgICAgLyogKFdEVEMpIFdhdGNoZG9nIFVuZGVyZmxvdyAqLw0KLSNkZWZpbmUgQVQ5MUNfV0RUQ19XREVSUiAgICAgICAgKCAweDEgPDwgMSApICAgIC8qIChXRFRDKSBXYXRjaGRvZyBFcnJvciAqLw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgV2F0Y2hkb2cgVGltZXIgQ29udHJvbGxlciBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfV0RUQyBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBXRFRDX1dEQ1IgICAgICAgKCAwKSAvLyBXYXRjaGRvZyBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBXRFRDX1dETVIgICAgICAgKCA0KSAvLyBXYXRjaGRvZyBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBXRFRDX1dEU1IgICAgICAgKCA4KSAvLyBXYXRjaGRvZyBTdGF0dXMgUmVnaXN0ZXINCisvLyAtLS0tLS0tLSBXRFRDX1dEQ1IgOiAoV0RUQyBPZmZzZXQ6IDB4MCkgUGVyaW9kaWMgSW50ZXJ2YWwgSW1hZ2UgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19XRFRDX1dEUlNUVCAgICAgICAgICgweDEgPDwgIDApIC8vIChXRFRDKSBXYXRjaGRvZyBSZXN0YXJ0DQorI2RlZmluZSBBVDkxQ19XRFRDX0tFWSAgICAgICAgICAgICgweEZGIDw8IDI0KSAvLyAoV0RUQykgV2F0Y2hkb2cgS0VZIFBhc3N3b3JkDQorLy8gLS0tLS0tLS0gV0RUQ19XRE1SIDogKFdEVEMgT2Zmc2V0OiAweDQpIFdhdGNoZG9nIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19XRFRDX1dEViAgICAgICAgICAgICgweEZGRiA8PCAgMCkgLy8gKFdEVEMpIFdhdGNoZG9nIFRpbWVyIFJlc3RhcnQNCisjZGVmaW5lIEFUOTFDX1dEVENfV0RGSUVOICAgICAgICAgKDB4MSA8PCAxMikgLy8gKFdEVEMpIFdhdGNoZG9nIEZhdWx0IEludGVycnVwdCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1dEVENfV0RSU1RFTiAgICAgICAgKDB4MSA8PCAxMykgLy8gKFdEVEMpIFdhdGNoZG9nIFJlc2V0IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRFJQUk9DICAgICAgICAoMHgxIDw8IDE0KSAvLyAoV0RUQykgV2F0Y2hkb2cgVGltZXIgUmVzdGFydA0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRERJUyAgICAgICAgICAoMHgxIDw8IDE1KSAvLyAoV0RUQykgV2F0Y2hkb2cgRGlzYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XREQgICAgICAgICAgICAoMHhGRkYgPDwgMTYpIC8vIChXRFRDKSBXYXRjaGRvZyBEZWx0YSBWYWx1ZQ0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRERCR0hMVCAgICAgICAoMHgxIDw8IDI4KSAvLyAoV0RUQykgV2F0Y2hkb2cgRGVidWcgSGFsdA0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRElETEVITFQgICAgICAoMHgxIDw8IDI5KSAvLyAoV0RUQykgV2F0Y2hkb2cgSWRsZSBIYWx0DQorLy8gLS0tLS0tLS0gV0RUQ19XRFNSIDogKFdEVEMgT2Zmc2V0OiAweDgpIFdhdGNoZG9nIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1dEVENfV0RVTkYgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFdEVEMpIFdhdGNoZG9nIFVuZGVyZmxvdw0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XREVSUiAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoV0RUQykgV2F0Y2hkb2cgRXJyb3INCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFZvbHRhZ2UgUmVndWxhdG9yIE1vZGUgQ29udHJvbGxlciBJbnRlcmZhY2UgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfVlJFRyBzdHJ1Y3R1cmUgKioqICovDQotI2RlZmluZSBWUkVHX01SICAgICAgICAgICAgICAoIDAgKSAgICAgICAgLyogVm9sdGFnZSBSZWd1bGF0b3IgTW9kZSBSZWdpc3RlciAqLw0KLS8qIC0tLS0tLS0tIFZSRUdfTVIgOiAoVlJFRyBPZmZzZXQ6IDB4MCkgVm9sdGFnZSBSZWd1bGF0b3IgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVlJFR19QU1REQlkgICAgKCAweDEgPDwgMCApIC8qIChWUkVHKSBWb2x0YWdlIFJlZ3VsYXRvciBQb3dlciBTdGFuZGJ5IE1vZGUgKi8NCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFZvbHRhZ2UgUmVndWxhdG9yIE1vZGUgQ29udHJvbGxlciBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfVlJFRyBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBWUkVHX01SICAgICAgICAgKCAwKSAvLyBWb2x0YWdlIFJlZ3VsYXRvciBNb2RlIFJlZ2lzdGVyDQorLy8gLS0tLS0tLS0gVlJFR19NUiA6IChWUkVHIE9mZnNldDogMHgwKSBWb2x0YWdlIFJlZ3VsYXRvciBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVlJFR19QU1REQlkgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoVlJFRykgVm9sdGFnZSBSZWd1bGF0b3IgUG93ZXIgU3RhbmRieSBNb2RlDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBNZW1vcnkgQ29udHJvbGxlciBJbnRlcmZhY2UgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfTUMgc3RydWN0dXJlICoqKiAqLw0KLSNkZWZpbmUgTUNfUkNSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDAgKSAgICAgICAgICAvKiBNQyBSZW1hcCBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBNQ19BU1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggNCApICAgICAgICAgIC8qIE1DIEFib3J0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgTUNfQUFTUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDggKSAgICAgICAgICAvKiBNQyBBYm9ydCBBZGRyZXNzIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgTUNfRk1SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDk2ICkgICAgICAgICAvKiBNQyBGbGFzaCBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBNQ19GQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMTAwICkgICAgICAgIC8qIE1DIEZsYXNoIENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIE1DX0ZTUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAxMDQgKSAgICAgICAgLyogTUMgRmxhc2ggU3RhdHVzIFJlZ2lzdGVyICovDQotLyogLS0tLS0tLS0gTUNfUkNSIDogKE1DIE9mZnNldDogMHgwKSBNQyBSZW1hcCBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19NQ19SQ0IgICAgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDAgKSAgIC8qIChNQykgUmVtYXAgQ29tbWFuZCBCaXQgKi8NCi0vKiAtLS0tLS0tLSBNQ19BU1IgOiAoTUMgT2Zmc2V0OiAweDQpIE1DIEFib3J0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfVU5EQUREICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAwICkgICAvKiAoTUMpIFVuZGVmaW5lZCBBZGRlc3MgQWJvcnQgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19NSVNBREQgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDEgKSAgIC8qIChNQykgTWlzYWxpZ25lZCBBZGRlc3MgQWJvcnQgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19BQlRTWiAgICAgICAgICAgICAgICAgICAgICggMHgzIDw8IDggKSAgIC8qIChNQykgQWJvcnQgU2l6ZSBTdGF0dXMgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19NQ19BQlRTWl9CWVRFICAgICAgICAgICAgKCAweDAgPDwgOCApICAgLyogKE1DKSBCeXRlICovDQotI2RlZmluZSAgICAgQVQ5MUNfTUNfQUJUU1pfSFdPUkQgICAgICAgICAgICggMHgxIDw8IDggKSAgIC8qIChNQykgSGFsZi13b3JkICovDQotI2RlZmluZSAgICAgQVQ5MUNfTUNfQUJUU1pfV09SRCAgICAgICAgICAgICggMHgyIDw8IDggKSAgIC8qIChNQykgV29yZCAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfQUJUVFlQICAgICAgICAgICAgICAgICAgICAoIDB4MyA8PCAxMCApICAvKiAoTUMpIEFib3J0IFR5cGUgU3RhdHVzICovDQotI2RlZmluZSAgICAgQVQ5MUNfTUNfQUJUVFlQX0RBVEFSICAgICAgICAgICggMHgwIDw8IDEwICkgIC8qIChNQykgRGF0YSBSZWFkICovDQotI2RlZmluZSAgICAgQVQ5MUNfTUNfQUJUVFlQX0RBVEFXICAgICAgICAgICggMHgxIDw8IDEwICkgIC8qIChNQykgRGF0YSBXcml0ZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX01DX0FCVFRZUF9GRVRDSCAgICAgICAgICAoIDB4MiA8PCAxMCApICAvKiAoTUMpIENvZGUgRmV0Y2ggKi8NCi0jZGVmaW5lIEFUOTFDX01DX01TVDAgICAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTYgKSAgLyogKE1DKSBNYXN0ZXIgMCBBYm9ydCBTb3VyY2UgKi8NCi0jZGVmaW5lIEFUOTFDX01DX01TVDEgICAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTcgKSAgLyogKE1DKSBNYXN0ZXIgMSBBYm9ydCBTb3VyY2UgKi8NCi0jZGVmaW5lIEFUOTFDX01DX1NWTVNUMCAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMjQgKSAgLyogKE1DKSBTYXZlZCBNYXN0ZXIgMCBBYm9ydCBTb3VyY2UgKi8NCi0jZGVmaW5lIEFUOTFDX01DX1NWTVNUMSAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMjUgKSAgLyogKE1DKSBTYXZlZCBNYXN0ZXIgMSBBYm9ydCBTb3VyY2UgKi8NCi0vKiAtLS0tLS0tLSBNQ19GTVIgOiAoTUMgT2Zmc2V0OiAweDYwKSBNQyBGbGFzaCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19NQ19GUkRZICAgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDAgKSAgIC8qIChNQykgRmxhc2ggUmVhZHkgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0xPQ0tFICAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMiApICAgLyogKE1DKSBMb2NrIEVycm9yICovDQotI2RlZmluZSBBVDkxQ19NQ19QUk9HRSAgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDMgKSAgIC8qIChNQykgUHJvZ3JhbW1pbmcgRXJyb3IgKi8NCi0jZGVmaW5lIEFUOTFDX01DX05FQlAgICAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgNyApICAgLyogKE1DKSBObyBFcmFzZSBCZWZvcmUgUHJvZ3JhbW1pbmcgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0ZXUyAgICAgICAgICAgICAgICAgICAgICAgKCAweDMgPDwgOCApICAgLyogKE1DKSBGbGFzaCBXYWl0IFN0YXRlICovDQotI2RlZmluZSAgICAgQVQ5MUNfTUNfRldTXzBGV1MgICAgICAgICAgICAgICggMHgwIDw8IDggKSAgIC8qIChNQykgMSBjeWNsZSBmb3IgUmVhZCwgMiBmb3IgV3JpdGUgb3BlcmF0aW9ucyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX01DX0ZXU18xRldTICAgICAgICAgICAgICAoIDB4MSA8PCA4ICkgICAvKiAoTUMpIDIgY3ljbGVzIGZvciBSZWFkLCAzIGZvciBXcml0ZSBvcGVyYXRpb25zICovDQotI2RlZmluZSAgICAgQVQ5MUNfTUNfRldTXzJGV1MgICAgICAgICAgICAgICggMHgyIDw8IDggKSAgIC8qIChNQykgMyBjeWNsZXMgZm9yIFJlYWQsIDQgZm9yIFdyaXRlIG9wZXJhdGlvbnMgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19NQ19GV1NfM0ZXUyAgICAgICAgICAgICAgKCAweDMgPDwgOCApICAgLyogKE1DKSA0IGN5Y2xlcyBmb3IgUmVhZCwgNCBmb3IgV3JpdGUgb3BlcmF0aW9ucyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfRk1DTiAgICAgICAgICAgICAgICAgICAgICAoIDB4RkYgPDwgMTYgKSAvKiAoTUMpIEZsYXNoIE1pY3Jvc2Vjb25kIEN5Y2xlIE51bWJlciAqLw0KLS8qIC0tLS0tLS0tIE1DX0ZDUiA6IChNQyBPZmZzZXQ6IDB4NjQpIE1DIEZsYXNoIENvbW1hbmQgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX01DX0ZDTUQgICAgICAgICAgICAgICAgICAgICAgKCAweEYgPDwgMCApICAgLyogKE1DKSBGbGFzaCBDb21tYW5kICovDQotI2RlZmluZSAgICAgQVQ5MUNfTUNfRkNNRF9TVEFSVF9QUk9HICAgICAgICggMHgxICkgICAgICAgIC8qIChNQykgU3RhcnRzIHRoZSBwcm9ncmFtbWluZyBvZiB0aCBlcGFnZSBzcGVjaWZpZWQgYnkgUEFHRU4uICovDQotI2RlZmluZSAgICAgQVQ5MUNfTUNfRkNNRF9MT0NLICAgICAgICAgICAgICggMHgyICkgICAgICAgIC8qIChNQykgU3RhcnRzIGEgbG9jayBzZXF1ZW5jZSBvZiB0aGUgc2VjdG9yIGRlZmluZWQgYnkgdGhlIGJpdHMgNCB0byA3IG9mIHRoZSBmaWVsZCBQQUdFTi4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19NQ19GQ01EX1BST0dfQU5EX0xPQ0sgICAgKCAweDMgKSAgICAgICAgLyogKE1DKSBUaGUgbG9jayBzZXF1ZW5jZSBhdXRvbWF0aWNhbGx5IGhhcHBlbnMgYWZ0ZXIgdGhlIHByb2dyYW1taW5nIHNlcXVlbmNlIGlzIGNvbXBsZXRlZC4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19NQ19GQ01EX1VOTE9DSyAgICAgICAgICAgKCAweDQgKSAgICAgICAgLyogKE1DKSBTdGFydHMgYW4gdW5sb2NrIHNlcXVlbmNlIG9mIHRoZSBzZWN0b3IgZGVmaW5lZCBieSB0aGUgYml0cyA0IHRvIDcgb2YgdGhlIGZpZWxkIFBBR0VOLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX01DX0ZDTURfRVJBU0VfQUxMICAgICAgICAoIDB4OCApICAgICAgICAvKiAoTUMpIFN0YXJ0cyB0aGUgZXJhc2Ugb2YgdGhlIGVudGlyZSBmbGFzaC5JZiBhdCBsZWFzdCBhIHBhZ2UgaXMgbG9ja2VkLCB0aGUgY29tbWFuZCBpcyBjYW5jZWxsZWQuICovDQotI2RlZmluZSAgICAgQVQ5MUNfTUNfRkNNRF9TRVRfR1BfTlZNICAgICAgICggMHhCICkgICAgICAgIC8qIChNQykgU2V0IEdlbmVyYWwgUHVycG9zZSBOVk0gYml0cy4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19NQ19GQ01EX0NMUl9HUF9OVk0gICAgICAgKCAweEQgKSAgICAgICAgLyogKE1DKSBDbGVhciBHZW5lcmFsIFB1cnBvc2UgTlZNIGJpdHMuICovDQotI2RlZmluZSAgICAgQVQ5MUNfTUNfRkNNRF9TRVRfU0VDVVJJVFkgICAgICggMHhGICkgICAgICAgIC8qIChNQykgU2V0IFNlY3VyaXR5IEJpdC4gKi8NCi0jZGVmaW5lIEFUOTFDX01DX1BBR0VOICAgICAgICAgICAgICAgICAgICAgKCAweDNGRiA8PCA4ICkgLyogKE1DKSBQYWdlIE51bWJlciAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfS0VZICAgICAgICAgICAgICAgICAgICAgICAoIDB4RkYgPDwgMjQgKSAvKiAoTUMpIFdyaXRpbmcgUHJvdGVjdCBLZXkgKi8NCi0vKiAtLS0tLS0tLSBNQ19GU1IgOiAoTUMgT2Zmc2V0OiAweDY4KSBNQyBGbGFzaCBDb21tYW5kIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19NQ19TRUNVUklUWSAgICAgICAgICAgICAgICAgICggMHgxIDw8IDQgKSAgIC8qIChNQykgU2VjdXJpdHkgQml0IFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfR1BOVk0wICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCA4ICkgICAvKiAoTUMpIFNlY3RvciAwIExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19HUE5WTTEgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDkgKSAgIC8qIChNQykgU2VjdG9yIDEgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0dQTlZNMiAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTAgKSAgLyogKE1DKSBTZWN0b3IgMiBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfR1BOVk0zICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxMSApICAvKiAoTUMpIFNlY3RvciAzIExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19HUE5WTTQgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDEyICkgIC8qIChNQykgU2VjdG9yIDQgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0dQTlZNNSAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTMgKSAgLyogKE1DKSBTZWN0b3IgNSBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfR1BOVk02ICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxNCApICAvKiAoTUMpIFNlY3RvciA2IExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19HUE5WTTcgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDE1ICkgIC8qIChNQykgU2VjdG9yIDcgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0xPQ0tTMCAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTYgKSAgLyogKE1DKSBTZWN0b3IgMCBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxNyApICAvKiAoTUMpIFNlY3RvciAxIExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19MT0NLUzIgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDE4ICkgIC8qIChNQykgU2VjdG9yIDIgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0xPQ0tTMyAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTkgKSAgLyogKE1DKSBTZWN0b3IgMyBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTE9DS1M0ICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAyMCApICAvKiAoTUMpIFNlY3RvciA0IExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19MT0NLUzUgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDIxICkgIC8qIChNQykgU2VjdG9yIDUgTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0xPQ0tTNiAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMjIgKSAgLyogKE1DKSBTZWN0b3IgNiBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTE9DS1M3ICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAyMyApICAvKiAoTUMpIFNlY3RvciA3IExvY2sgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19NQ19MT0NLUzggICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDI0ICkgIC8qIChNQykgU2VjdG9yIDggTG9jayBTdGF0dXMgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0xPQ0tTOSAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMjUgKSAgLyogKE1DKSBTZWN0b3IgOSBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxMCAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAyNiApICAvKiAoTUMpIFNlY3RvciAxMCBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxMSAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAyNyApICAvKiAoTUMpIFNlY3RvciAxMSBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxMiAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAyOCApICAvKiAoTUMpIFNlY3RvciAxMiBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxMyAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAyOSApICAvKiAoTUMpIFNlY3RvciAxMyBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxNCAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAzMCApICAvKiAoTUMpIFNlY3RvciAxNCBMb2NrIFN0YXR1cyAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MxNSAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAzMSApICAvKiAoTUMpIFNlY3RvciAxNSBMb2NrIFN0YXR1cyAqLw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgTWVtb3J5IENvbnRyb2xsZXIgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX01DIHN0cnVjdHVyZSAqKioNCisjZGVmaW5lIE1DX1JDUiAgICAgICAgICAoIDApIC8vIE1DIFJlbWFwIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIE1DX0FTUiAgICAgICAgICAoIDQpIC8vIE1DIEFib3J0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgTUNfQUFTUiAgICAgICAgICggOCkgLy8gTUMgQWJvcnQgQWRkcmVzcyBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIE1DX0ZNUiAgICAgICAgICAoOTYpIC8vIE1DIEZsYXNoIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIE1DX0ZDUiAgICAgICAgICAoMTAwKSAvLyBNQyBGbGFzaCBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBNQ19GU1IgICAgICAgICAgKDEwNCkgLy8gTUMgRmxhc2ggU3RhdHVzIFJlZ2lzdGVyDQorLy8gLS0tLS0tLS0gTUNfUkNSIDogKE1DIE9mZnNldDogMHgwKSBNQyBSZW1hcCBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfTUNfUkNCICAgICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoTUMpIFJlbWFwIENvbW1hbmQgQml0DQorLy8gLS0tLS0tLS0gTUNfQVNSIDogKE1DIE9mZnNldDogMHg0KSBNQyBBYm9ydCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19NQ19VTkRBREQgICAgICAgICAgICgweDEgPDwgIDApIC8vIChNQykgVW5kZWZpbmVkIEFkZGVzcyBBYm9ydCBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX01JU0FERCAgICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKE1DKSBNaXNhbGlnbmVkIEFkZGVzcyBBYm9ydCBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0FCVFNaICAgICAgICAgICAgKDB4MyA8PCAgOCkgLy8gKE1DKSBBYm9ydCBTaXplIFN0YXR1cw0KKyNkZWZpbmUgCUFUOTFDX01DX0FCVFNaX0JZVEUgICAgICAgICAgICAgICAgICgweDAgPDwgIDgpIC8vIChNQykgQnl0ZQ0KKyNkZWZpbmUgCUFUOTFDX01DX0FCVFNaX0hXT1JEICAgICAgICAgICAgICAgICgweDEgPDwgIDgpIC8vIChNQykgSGFsZi13b3JkDQorI2RlZmluZSAJQVQ5MUNfTUNfQUJUU1pfV09SRCAgICAgICAgICAgICAgICAgKDB4MiA8PCAgOCkgLy8gKE1DKSBXb3JkDQorI2RlZmluZSBBVDkxQ19NQ19BQlRUWVAgICAgICAgICAgICgweDMgPDwgMTApIC8vIChNQykgQWJvcnQgVHlwZSBTdGF0dXMNCisjZGVmaW5lIAlBVDkxQ19NQ19BQlRUWVBfREFUQVIgICAgICAgICAgICAgICAgKDB4MCA8PCAxMCkgLy8gKE1DKSBEYXRhIFJlYWQNCisjZGVmaW5lIAlBVDkxQ19NQ19BQlRUWVBfREFUQVcgICAgICAgICAgICAgICAgKDB4MSA8PCAxMCkgLy8gKE1DKSBEYXRhIFdyaXRlDQorI2RlZmluZSAJQVQ5MUNfTUNfQUJUVFlQX0ZFVENIICAgICAgICAgICAgICAgICgweDIgPDwgMTApIC8vIChNQykgQ29kZSBGZXRjaA0KKyNkZWZpbmUgQVQ5MUNfTUNfTVNUMCAgICAgICAgICAgICAoMHgxIDw8IDE2KSAvLyAoTUMpIE1hc3RlciAwIEFib3J0IFNvdXJjZQ0KKyNkZWZpbmUgQVQ5MUNfTUNfTVNUMSAgICAgICAgICAgICAoMHgxIDw8IDE3KSAvLyAoTUMpIE1hc3RlciAxIEFib3J0IFNvdXJjZQ0KKyNkZWZpbmUgQVQ5MUNfTUNfU1ZNU1QwICAgICAgICAgICAoMHgxIDw8IDI0KSAvLyAoTUMpIFNhdmVkIE1hc3RlciAwIEFib3J0IFNvdXJjZQ0KKyNkZWZpbmUgQVQ5MUNfTUNfU1ZNU1QxICAgICAgICAgICAoMHgxIDw8IDI1KSAvLyAoTUMpIFNhdmVkIE1hc3RlciAxIEFib3J0IFNvdXJjZQ0KKy8vIC0tLS0tLS0tIE1DX0ZNUiA6IChNQyBPZmZzZXQ6IDB4NjApIE1DIEZsYXNoIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19NQ19GUkRZICAgICAgICAgICAgICgweDEgPDwgIDApIC8vIChNQykgRmxhc2ggUmVhZHkNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tFICAgICAgICAgICAgKDB4MSA8PCAgMikgLy8gKE1DKSBMb2NrIEVycm9yDQorI2RlZmluZSBBVDkxQ19NQ19QUk9HRSAgICAgICAgICAgICgweDEgPDwgIDMpIC8vIChNQykgUHJvZ3JhbW1pbmcgRXJyb3INCisjZGVmaW5lIEFUOTFDX01DX05FQlAgICAgICAgICAgICAgKDB4MSA8PCAgNykgLy8gKE1DKSBObyBFcmFzZSBCZWZvcmUgUHJvZ3JhbW1pbmcNCisjZGVmaW5lIEFUOTFDX01DX0ZXUyAgICAgICAgICAgICAgKDB4MyA8PCAgOCkgLy8gKE1DKSBGbGFzaCBXYWl0IFN0YXRlDQorI2RlZmluZSAJQVQ5MUNfTUNfRldTXzBGV1MgICAgICAgICAgICAgICAgICgweDAgPDwgIDgpIC8vIChNQykgMSBjeWNsZSBmb3IgUmVhZCwgMiBmb3IgV3JpdGUgb3BlcmF0aW9ucw0KKyNkZWZpbmUgCUFUOTFDX01DX0ZXU18xRldTICAgICAgICAgICAgICAgICAoMHgxIDw8ICA4KSAvLyAoTUMpIDIgY3ljbGVzIGZvciBSZWFkLCAzIGZvciBXcml0ZSBvcGVyYXRpb25zDQorI2RlZmluZSAJQVQ5MUNfTUNfRldTXzJGV1MgICAgICAgICAgICAgICAgICgweDIgPDwgIDgpIC8vIChNQykgMyBjeWNsZXMgZm9yIFJlYWQsIDQgZm9yIFdyaXRlIG9wZXJhdGlvbnMNCisjZGVmaW5lIAlBVDkxQ19NQ19GV1NfM0ZXUyAgICAgICAgICAgICAgICAgKDB4MyA8PCAgOCkgLy8gKE1DKSA0IGN5Y2xlcyBmb3IgUmVhZCwgNCBmb3IgV3JpdGUgb3BlcmF0aW9ucw0KKyNkZWZpbmUgQVQ5MUNfTUNfRk1DTiAgICAgICAgICAgICAoMHhGRiA8PCAxNikgLy8gKE1DKSBGbGFzaCBNaWNyb3NlY29uZCBDeWNsZSBOdW1iZXINCisvLyAtLS0tLS0tLSBNQ19GQ1IgOiAoTUMgT2Zmc2V0OiAweDY0KSBNQyBGbGFzaCBDb21tYW5kIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfTUNfRkNNRCAgICAgICAgICAgICAoMHhGIDw8ICAwKSAvLyAoTUMpIEZsYXNoIENvbW1hbmQNCisjZGVmaW5lIAlBVDkxQ19NQ19GQ01EX1NUQVJUX1BST0cgICAgICAgICAgICgweDEpIC8vIChNQykgU3RhcnRzIHRoZSBwcm9ncmFtbWluZyBvZiB0aCBlcGFnZSBzcGVjaWZpZWQgYnkgUEFHRU4uDQorI2RlZmluZSAJQVQ5MUNfTUNfRkNNRF9MT0NLICAgICAgICAgICAgICAgICAoMHgyKSAvLyAoTUMpIFN0YXJ0cyBhIGxvY2sgc2VxdWVuY2Ugb2YgdGhlIHNlY3RvciBkZWZpbmVkIGJ5IHRoZSBiaXRzIDQgdG8gNyBvZiB0aGUgZmllbGQgUEFHRU4uDQorI2RlZmluZSAJQVQ5MUNfTUNfRkNNRF9QUk9HX0FORF9MT0NLICAgICAgICAoMHgzKSAvLyAoTUMpIFRoZSBsb2NrIHNlcXVlbmNlIGF1dG9tYXRpY2FsbHkgaGFwcGVucyBhZnRlciB0aGUgcHJvZ3JhbW1pbmcgc2VxdWVuY2UgaXMgY29tcGxldGVkLg0KKyNkZWZpbmUgCUFUOTFDX01DX0ZDTURfVU5MT0NLICAgICAgICAgICAgICAgKDB4NCkgLy8gKE1DKSBTdGFydHMgYW4gdW5sb2NrIHNlcXVlbmNlIG9mIHRoZSBzZWN0b3IgZGVmaW5lZCBieSB0aGUgYml0cyA0IHRvIDcgb2YgdGhlIGZpZWxkIFBBR0VOLg0KKyNkZWZpbmUgCUFUOTFDX01DX0ZDTURfRVJBU0VfQUxMICAgICAgICAgICAgKDB4OCkgLy8gKE1DKSBTdGFydHMgdGhlIGVyYXNlIG9mIHRoZSBlbnRpcmUgZmxhc2guSWYgYXQgbGVhc3QgYSBwYWdlIGlzIGxvY2tlZCwgdGhlIGNvbW1hbmQgaXMgY2FuY2VsbGVkLg0KKyNkZWZpbmUgCUFUOTFDX01DX0ZDTURfU0VUX0dQX05WTSAgICAgICAgICAgKDB4QikgLy8gKE1DKSBTZXQgR2VuZXJhbCBQdXJwb3NlIE5WTSBiaXRzLg0KKyNkZWZpbmUgCUFUOTFDX01DX0ZDTURfQ0xSX0dQX05WTSAgICAgICAgICAgKDB4RCkgLy8gKE1DKSBDbGVhciBHZW5lcmFsIFB1cnBvc2UgTlZNIGJpdHMuDQorI2RlZmluZSAJQVQ5MUNfTUNfRkNNRF9TRVRfU0VDVVJJVFkgICAgICAgICAoMHhGKSAvLyAoTUMpIFNldCBTZWN1cml0eSBCaXQuDQorI2RlZmluZSBBVDkxQ19NQ19QQUdFTiAgICAgICAgICAgICgweDNGRiA8PCAgOCkgLy8gKE1DKSBQYWdlIE51bWJlcg0KKyNkZWZpbmUgQVQ5MUNfTUNfS0VZICAgICAgICAgICAgICAoMHhGRiA8PCAyNCkgLy8gKE1DKSBXcml0aW5nIFByb3RlY3QgS2V5DQorLy8gLS0tLS0tLS0gTUNfRlNSIDogKE1DIE9mZnNldDogMHg2OCkgTUMgRmxhc2ggQ29tbWFuZCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX01DX1NFQ1VSSVRZICAgICAgICAgKDB4MSA8PCAgNCkgLy8gKE1DKSBTZWN1cml0eSBCaXQgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19HUE5WTTAgICAgICAgICAgICgweDEgPDwgIDgpIC8vIChNQykgU2VjdG9yIDAgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0dQTlZNMSAgICAgICAgICAgKDB4MSA8PCAgOSkgLy8gKE1DKSBTZWN0b3IgMSBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfR1BOVk0yICAgICAgICAgICAoMHgxIDw8IDEwKSAvLyAoTUMpIFNlY3RvciAyIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19HUE5WTTMgICAgICAgICAgICgweDEgPDwgMTEpIC8vIChNQykgU2VjdG9yIDMgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0dQTlZNNCAgICAgICAgICAgKDB4MSA8PCAxMikgLy8gKE1DKSBTZWN0b3IgNCBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfR1BOVk01ICAgICAgICAgICAoMHgxIDw8IDEzKSAvLyAoTUMpIFNlY3RvciA1IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19HUE5WTTYgICAgICAgICAgICgweDEgPDwgMTQpIC8vIChNQykgU2VjdG9yIDYgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0dQTlZNNyAgICAgICAgICAgKDB4MSA8PCAxNSkgLy8gKE1DKSBTZWN0b3IgNyBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MwICAgICAgICAgICAoMHgxIDw8IDE2KSAvLyAoTUMpIFNlY3RvciAwIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzEgICAgICAgICAgICgweDEgPDwgMTcpIC8vIChNQykgU2VjdG9yIDEgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTMiAgICAgICAgICAgKDB4MSA8PCAxOCkgLy8gKE1DKSBTZWN0b3IgMiBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1MzICAgICAgICAgICAoMHgxIDw8IDE5KSAvLyAoTUMpIFNlY3RvciAzIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzQgICAgICAgICAgICgweDEgPDwgMjApIC8vIChNQykgU2VjdG9yIDQgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTNSAgICAgICAgICAgKDB4MSA8PCAyMSkgLy8gKE1DKSBTZWN0b3IgNSBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1M2ICAgICAgICAgICAoMHgxIDw8IDIyKSAvLyAoTUMpIFNlY3RvciA2IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzcgICAgICAgICAgICgweDEgPDwgMjMpIC8vIChNQykgU2VjdG9yIDcgTG9jayBTdGF0dXMNCisjZGVmaW5lIEFUOTFDX01DX0xPQ0tTOCAgICAgICAgICAgKDB4MSA8PCAyNCkgLy8gKE1DKSBTZWN0b3IgOCBMb2NrIFN0YXR1cw0KKyNkZWZpbmUgQVQ5MUNfTUNfTE9DS1M5ICAgICAgICAgICAoMHgxIDw8IDI1KSAvLyAoTUMpIFNlY3RvciA5IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzEwICAgICAgICAgICgweDEgPDwgMjYpIC8vIChNQykgU2VjdG9yIDEwIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzExICAgICAgICAgICgweDEgPDwgMjcpIC8vIChNQykgU2VjdG9yIDExIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzEyICAgICAgICAgICgweDEgPDwgMjgpIC8vIChNQykgU2VjdG9yIDEyIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzEzICAgICAgICAgICgweDEgPDwgMjkpIC8vIChNQykgU2VjdG9yIDEzIExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzE0ICAgICAgICAgICgweDEgPDwgMzApIC8vIChNQykgU2VjdG9yIDE0IExvY2sgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19NQ19MT0NLUzE1ICAgICAgICAgICgweDEgPDwgMzEpIC8vIChNQykgU2VjdG9yIDE1IExvY2sgU3RhdHVzDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBTZXJpYWwgUGFyYWxsZWwgSW50ZXJmYWNlICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1NQSSBzdHJ1Y3R1cmUgKioqICovDQotI2RlZmluZSBTUElfQ1IgICAgICAgICAgICAgICAgICAgICAgICggMCApICAgICAgICAgICAvKiBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBTUElfTVIgICAgICAgICAgICAgICAgICAgICAgICggNCApICAgICAgICAgICAvKiBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBTUElfUkRSICAgICAgICAgICAgICAgICAgICAgICggOCApICAgICAgICAgICAvKiBSZWNlaXZlIERhdGEgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNQSV9URFIgICAgICAgICAgICAgICAgICAgICAgKCAxMiApICAgICAgICAgIC8qIFRyYW5zbWl0IERhdGEgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNQSV9TUiAgICAgICAgICAgICAgICAgICAgICAgKCAxNiApICAgICAgICAgIC8qIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1BJX0lFUiAgICAgICAgICAgICAgICAgICAgICAoIDIwICkgICAgICAgICAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1BJX0lEUiAgICAgICAgICAgICAgICAgICAgICAoIDI0ICkgICAgICAgICAgLyogSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNQSV9JTVIgICAgICAgICAgICAgICAgICAgICAgKCAyOCApICAgICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBTUElfQ1NSICAgICAgICAgICAgICAgICAgICAgICggNDggKSAgICAgICAgICAvKiBDaGlwIFNlbGVjdCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1BJX1JQUiAgICAgICAgICAgICAgICAgICAgICAoIDI1NiApICAgICAgICAgLyogUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBTUElfUkNSICAgICAgICAgICAgICAgICAgICAgICggMjYwICkgICAgICAgICAvKiBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNQSV9UUFIgICAgICAgICAgICAgICAgICAgICAgKCAyNjQgKSAgICAgICAgIC8qIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNQSV9UQ1IgICAgICAgICAgICAgICAgICAgICAgKCAyNjggKSAgICAgICAgIC8qIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNQSV9STlBSICAgICAgICAgICAgICAgICAgICAgKCAyNzIgKSAgICAgICAgIC8qIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBTUElfUk5DUiAgICAgICAgICAgICAgICAgICAgICggMjc2ICkgICAgICAgICAvKiBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1BJX1ROUFIgICAgICAgICAgICAgICAgICAgICAoIDI4MCApICAgICAgICAgLyogVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBTUElfVE5DUiAgICAgICAgICAgICAgICAgICAgICggMjg0ICkgICAgICAgICAvKiBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNQSV9QVENSICAgICAgICAgICAgICAgICAgICAgKCAyODggKSAgICAgICAgIC8qIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBTUElfUFRTUiAgICAgICAgICAgICAgICAgICAgICggMjkyICkgICAgICAgICAvKiBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotLyogLS0tLS0tLS0gU1BJX0NSIDogKFNQSSBPZmZzZXQ6IDB4MCkgU1BJIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9TUElFTiAgICAgICAgICAgICAgKCAweDEgPDwgMCApICAgIC8qIChTUEkpIFNQSSBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9TUElESVMgICAgICAgICAgICAgKCAweDEgPDwgMSApICAgIC8qIChTUEkpIFNQSSBEaXNhYmxlICovDQotI2RlZmluZSBBVDkxQ19TUElfU1dSU1QgICAgICAgICAgICAgICggMHgxIDw8IDcgKSAgICAvKiAoU1BJKSBTUEkgU29mdHdhcmUgcmVzZXQgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9MQVNUWEZFUiAgICAgICAgICAgKCAweDEgPDwgMjQgKSAgIC8qIChTUEkpIFNQSSBMYXN0IFRyYW5zZmVyICovDQotLyogLS0tLS0tLS0gU1BJX01SIDogKFNQSSBPZmZzZXQ6IDB4NCkgU1BJIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9NU1RSICAgICAgICAgICAgICAgKCAweDEgPDwgMCApICAgIC8qIChTUEkpIE1hc3Rlci9TbGF2ZSBNb2RlICovDQotI2RlZmluZSBBVDkxQ19TUElfUFMgICAgICAgICAgICAgICAgICggMHgxIDw8IDEgKSAgICAvKiAoU1BJKSBQZXJpcGhlcmFsIFNlbGVjdCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NQSV9QU19GSVhFRCAgICAgICAoIDB4MCA8PCAxICkgICAgLyogKFNQSSkgRml4ZWQgUGVyaXBoZXJhbCBTZWxlY3QgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TUElfUFNfVkFSSUFCTEUgICAgKCAweDEgPDwgMSApICAgIC8qIChTUEkpIFZhcmlhYmxlIFBlcmlwaGVyYWwgU2VsZWN0ICovDQotI2RlZmluZSBBVDkxQ19TUElfUENTREVDICAgICAgICAgICAgICggMHgxIDw8IDIgKSAgICAvKiAoU1BJKSBDaGlwIFNlbGVjdCBEZWNvZGUgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9GRElWICAgICAgICAgICAgICAgKCAweDEgPDwgMyApICAgIC8qIChTUEkpIENsb2NrIFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX01PREZESVMgICAgICAgICAgICAoIDB4MSA8PCA0ICkgICAgLyogKFNQSSkgTW9kZSBGYXVsdCBEZXRlY3Rpb24gKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9MTEIgICAgICAgICAgICAgICAgKCAweDEgPDwgNyApICAgIC8qIChTUEkpIENsb2NrIFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX1BDUyAgICAgICAgICAgICAgICAoIDB4RiA8PCAxNiApICAgLyogKFNQSSkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX0RMWUJDUyAgICAgICAgICAgICAoIDB4RkYgPDwgMjQgKSAgLyogKFNQSSkgRGVsYXkgQmV0d2VlbiBDaGlwIFNlbGVjdHMgKi8NCi0vKiAtLS0tLS0tLSBTUElfUkRSIDogKFNQSSBPZmZzZXQ6IDB4OCkgUmVjZWl2ZSBEYXRhIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19TUElfUkQgICAgICAgICAgICAgICAgICggMHhGRkZGIDw8IDAgKSAvKiAoU1BJKSBSZWNlaXZlIERhdGEgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9SUENTICAgICAgICAgICAgICAgKCAweEYgPDwgMTYgKSAgIC8qIChTUEkpIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgU3RhdHVzICovDQotLyogLS0tLS0tLS0gU1BJX1REUiA6IChTUEkgT2Zmc2V0OiAweGMpIFRyYW5zbWl0IERhdGEgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9URCAgICAgICAgICAgICAgICAgKCAweEZGRkYgPDwgMCApIC8qIChTUEkpIFRyYW5zbWl0IERhdGEgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9UUENTICAgICAgICAgICAgICAgKCAweEYgPDwgMTYgKSAgIC8qIChTUEkpIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgU3RhdHVzICovDQotLyogLS0tLS0tLS0gU1BJX1NSIDogKFNQSSBPZmZzZXQ6IDB4MTApIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX1JEUkYgICAgICAgICAgICAgICAoIDB4MSA8PCAwICkgICAgLyogKFNQSSkgUmVjZWl2ZSBEYXRhIFJlZ2lzdGVyIEZ1bGwgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9URFJFICAgICAgICAgICAgICAgKCAweDEgPDwgMSApICAgIC8qIChTUEkpIFRyYW5zbWl0IERhdGEgUmVnaXN0ZXIgRW1wdHkgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9NT0RGICAgICAgICAgICAgICAgKCAweDEgPDwgMiApICAgIC8qIChTUEkpIE1vZGUgRmF1bHQgRXJyb3IgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9PVlJFUyAgICAgICAgICAgICAgKCAweDEgPDwgMyApICAgIC8qIChTUEkpIE92ZXJydW4gRXJyb3IgU3RhdHVzICovDQotI2RlZmluZSBBVDkxQ19TUElfRU5EUlggICAgICAgICAgICAgICggMHgxIDw8IDQgKSAgICAvKiAoU1BJKSBFbmQgb2YgUmVjZWl2ZXIgVHJhbnNmZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9FTkRUWCAgICAgICAgICAgICAgKCAweDEgPDwgNSApICAgIC8qIChTUEkpIEVuZCBvZiBSZWNlaXZlciBUcmFuc2ZlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX1JYQlVGRiAgICAgICAgICAgICAoIDB4MSA8PCA2ICkgICAgLyogKFNQSSkgUlhCVUZGIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX1RYQlVGRSAgICAgICAgICAgICAoIDB4MSA8PCA3ICkgICAgLyogKFNQSSkgVFhCVUZFIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX05TU1IgICAgICAgICAgICAgICAoIDB4MSA8PCA4ICkgICAgLyogKFNQSSkgTlNTUiBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9UWEVNUFRZICAgICAgICAgICAgKCAweDEgPDwgOSApICAgIC8qIChTUEkpIFRYRU1QVFkgSW50ZXJydXB0ICovDQotI2RlZmluZSBBVDkxQ19TUElfU1BJRU5TICAgICAgICAgICAgICggMHgxIDw8IDE2ICkgICAvKiAoU1BJKSBFbmFibGUgU3RhdHVzICovDQotLyogLS0tLS0tLS0gU1BJX0lFUiA6IChTUEkgT2Zmc2V0OiAweDE0KSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gU1BJX0lEUiA6IChTUEkgT2Zmc2V0OiAweDE4KSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFNQSV9JTVIgOiAoU1BJIE9mZnNldDogMHgxYykgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBTUElfQ1NSIDogKFNQSSBPZmZzZXQ6IDB4MzApIENoaXAgU2VsZWN0IFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19TUElfQ1BPTCAgICAgICAgICAgKCAweDEgPDwgMCApICAgLyogKFNQSSkgQ2xvY2sgUG9sYXJpdHkgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9OQ1BIQSAgICAgICAgICAoIDB4MSA8PCAxICkgICAvKiAoU1BJKSBDbG9jayBQaGFzZSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX0NTQUFUICAgICAgICAgICggMHgxIDw8IDMgKSAgIC8qIChTUEkpIENoaXAgU2VsZWN0IEFjdGl2ZSBBZnRlciBUcmFuc2ZlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX0JJVFMgICAgICAgICAgICggMHhGIDw8IDQgKSAgIC8qIChTUEkpIEJpdHMgUGVyIFRyYW5zZmVyICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1BJX0JJVFNfOCAgICAgKCAweDAgPDwgNCApICAgLyogKFNQSSkgOCBCaXRzIFBlciB0cmFuc2ZlciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NQSV9CSVRTXzkgICAgICggMHgxIDw8IDQgKSAgIC8qIChTUEkpIDkgQml0cyBQZXIgdHJhbnNmZXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TUElfQklUU18xMCAgICAoIDB4MiA8PCA0ICkgICAvKiAoU1BJKSAxMCBCaXRzIFBlciB0cmFuc2ZlciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NQSV9CSVRTXzExICAgICggMHgzIDw8IDQgKSAgIC8qIChTUEkpIDExIEJpdHMgUGVyIHRyYW5zZmVyICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1BJX0JJVFNfMTIgICAgKCAweDQgPDwgNCApICAgLyogKFNQSSkgMTIgQml0cyBQZXIgdHJhbnNmZXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TUElfQklUU18xMyAgICAoIDB4NSA8PCA0ICkgICAvKiAoU1BJKSAxMyBCaXRzIFBlciB0cmFuc2ZlciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NQSV9CSVRTXzE0ICAgICggMHg2IDw8IDQgKSAgIC8qIChTUEkpIDE0IEJpdHMgUGVyIHRyYW5zZmVyICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1BJX0JJVFNfMTUgICAgKCAweDcgPDwgNCApICAgLyogKFNQSSkgMTUgQml0cyBQZXIgdHJhbnNmZXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TUElfQklUU18xNiAgICAoIDB4OCA8PCA0ICkgICAvKiAoU1BJKSAxNiBCaXRzIFBlciB0cmFuc2ZlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX1NDQlIgICAgICAgICAgICggMHhGRiA8PCA4ICkgIC8qIChTUEkpIFNlcmlhbCBDbG9jayBCYXVkIFJhdGUgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSV9ETFlCUyAgICAgICAgICAoIDB4RkYgPDwgMTYgKSAvKiAoU1BJKSBEZWxheSBCZWZvcmUgU1BDSyAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJX0RMWUJDVCAgICAgICAgICggMHhGRiA8PCAyNCApIC8qIChTUEkpIERlbGF5IEJldHdlZW4gQ29uc2VjdXRpdmUgVHJhbnNmZXJzICovDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBTZXJpYWwgUGFyYWxsZWwgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1NQSSBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBTUElfQ1IgICAgICAgICAgKCAwKSAvLyBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBTUElfTVIgICAgICAgICAgKCA0KSAvLyBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBTUElfUkRSICAgICAgICAgKCA4KSAvLyBSZWNlaXZlIERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIFNQSV9URFIgICAgICAgICAoMTIpIC8vIFRyYW5zbWl0IERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIFNQSV9TUiAgICAgICAgICAoMTYpIC8vIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgU1BJX0lFUiAgICAgICAgICgyMCkgLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1BJX0lEUiAgICAgICAgICgyNCkgLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIFNQSV9JTVIgICAgICAgICAoMjgpIC8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBTUElfQ1NSICAgICAgICAgKDQ4KSAvLyBDaGlwIFNlbGVjdCBSZWdpc3Rlcg0KKyNkZWZpbmUgU1BJX1JQUiAgICAgICAgICgyNTYpIC8vIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgU1BJX1JDUiAgICAgICAgICgyNjApIC8vIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgU1BJX1RQUiAgICAgICAgICgyNjQpIC8vIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFNQSV9UQ1IgICAgICAgICAoMjY4KSAvLyBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBTUElfUk5QUiAgICAgICAgKDI3MikgLy8gUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFNQSV9STkNSICAgICAgICAoMjc2KSAvLyBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgU1BJX1ROUFIgICAgICAgICgyODApIC8vIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgU1BJX1ROQ1IgICAgICAgICgyODQpIC8vIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgU1BJX1BUQ1IgICAgICAgICgyODgpIC8vIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBTUElfUFRTUiAgICAgICAgKDI5MikgLy8gUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKy8vIC0tLS0tLS0tIFNQSV9DUiA6IChTUEkgT2Zmc2V0OiAweDApIFNQSSBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1BJX1NQSUVOICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoU1BJKSBTUEkgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19TUElfU1BJRElTICAgICAgICAgICgweDEgPDwgIDEpIC8vIChTUEkpIFNQSSBEaXNhYmxlDQorI2RlZmluZSBBVDkxQ19TUElfU1dSU1QgICAgICAgICAgICgweDEgPDwgIDcpIC8vIChTUEkpIFNQSSBTb2Z0d2FyZSByZXNldA0KKyNkZWZpbmUgQVQ5MUNfU1BJX0xBU1RYRkVSICAgICAgICAoMHgxIDw8IDI0KSAvLyAoU1BJKSBTUEkgTGFzdCBUcmFuc2Zlcg0KKy8vIC0tLS0tLS0tIFNQSV9NUiA6IChTUEkgT2Zmc2V0OiAweDQpIFNQSSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1BJX01TVFIgICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoU1BJKSBNYXN0ZXIvU2xhdmUgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX1BTICAgICAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoU1BJKSBQZXJpcGhlcmFsIFNlbGVjdA0KKyNkZWZpbmUgCUFUOTFDX1NQSV9QU19GSVhFRCAgICAgICAgICAgICAgICAoMHgwIDw8ICAxKSAvLyAoU1BJKSBGaXhlZCBQZXJpcGhlcmFsIFNlbGVjdA0KKyNkZWZpbmUgCUFUOTFDX1NQSV9QU19WQVJJQUJMRSAgICAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoU1BJKSBWYXJpYWJsZSBQZXJpcGhlcmFsIFNlbGVjdA0KKyNkZWZpbmUgQVQ5MUNfU1BJX1BDU0RFQyAgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoU1BJKSBDaGlwIFNlbGVjdCBEZWNvZGUNCisjZGVmaW5lIEFUOTFDX1NQSV9GRElWICAgICAgICAgICAgKDB4MSA8PCAgMykgLy8gKFNQSSkgQ2xvY2sgU2VsZWN0aW9uDQorI2RlZmluZSBBVDkxQ19TUElfTU9ERkRJUyAgICAgICAgICgweDEgPDwgIDQpIC8vIChTUEkpIE1vZGUgRmF1bHQgRGV0ZWN0aW9uDQorI2RlZmluZSBBVDkxQ19TUElfTExCICAgICAgICAgICAgICgweDEgPDwgIDcpIC8vIChTUEkpIENsb2NrIFNlbGVjdGlvbg0KKyNkZWZpbmUgQVQ5MUNfU1BJX1BDUyAgICAgICAgICAgICAoMHhGIDw8IDE2KSAvLyAoU1BJKSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0DQorI2RlZmluZSBBVDkxQ19TUElfRExZQkNTICAgICAgICAgICgweEZGIDw8IDI0KSAvLyAoU1BJKSBEZWxheSBCZXR3ZWVuIENoaXAgU2VsZWN0cw0KKy8vIC0tLS0tLS0tIFNQSV9SRFIgOiAoU1BJIE9mZnNldDogMHg4KSBSZWNlaXZlIERhdGEgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TUElfUkQgICAgICAgICAgICAgICgweEZGRkYgPDwgIDApIC8vIChTUEkpIFJlY2VpdmUgRGF0YQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX1JQQ1MgICAgICAgICAgICAoMHhGIDw8IDE2KSAvLyAoU1BJKSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IFN0YXR1cw0KKy8vIC0tLS0tLS0tIFNQSV9URFIgOiAoU1BJIE9mZnNldDogMHhjKSBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1BJX1REICAgICAgICAgICAgICAoMHhGRkZGIDw8ICAwKSAvLyAoU1BJKSBUcmFuc21pdCBEYXRhDQorI2RlZmluZSBBVDkxQ19TUElfVFBDUyAgICAgICAgICAgICgweEYgPDwgMTYpIC8vIChTUEkpIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgU3RhdHVzDQorLy8gLS0tLS0tLS0gU1BJX1NSIDogKFNQSSBPZmZzZXQ6IDB4MTApIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NQSV9SRFJGICAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFNQSSkgUmVjZWl2ZSBEYXRhIFJlZ2lzdGVyIEZ1bGwNCisjZGVmaW5lIEFUOTFDX1NQSV9URFJFICAgICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKFNQSSkgVHJhbnNtaXQgRGF0YSBSZWdpc3RlciBFbXB0eQ0KKyNkZWZpbmUgQVQ5MUNfU1BJX01PREYgICAgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoU1BJKSBNb2RlIEZhdWx0IEVycm9yDQorI2RlZmluZSBBVDkxQ19TUElfT1ZSRVMgICAgICAgICAgICgweDEgPDwgIDMpIC8vIChTUEkpIE92ZXJydW4gRXJyb3IgU3RhdHVzDQorI2RlZmluZSBBVDkxQ19TUElfRU5EUlggICAgICAgICAgICgweDEgPDwgIDQpIC8vIChTUEkpIEVuZCBvZiBSZWNlaXZlciBUcmFuc2Zlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJX0VORFRYICAgICAgICAgICAoMHgxIDw8ICA1KSAvLyAoU1BJKSBFbmQgb2YgUmVjZWl2ZXIgVHJhbnNmZXINCisjZGVmaW5lIEFUOTFDX1NQSV9SWEJVRkYgICAgICAgICAgKDB4MSA8PCAgNikgLy8gKFNQSSkgUlhCVUZGIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfU1BJX1RYQlVGRSAgICAgICAgICAoMHgxIDw8ICA3KSAvLyAoU1BJKSBUWEJVRkUgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19TUElfTlNTUiAgICAgICAgICAgICgweDEgPDwgIDgpIC8vIChTUEkpIE5TU1IgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19TUElfVFhFTVBUWSAgICAgICAgICgweDEgPDwgIDkpIC8vIChTUEkpIFRYRU1QVFkgSW50ZXJydXB0DQorI2RlZmluZSBBVDkxQ19TUElfU1BJRU5TICAgICAgICAgICgweDEgPDwgMTYpIC8vIChTUEkpIEVuYWJsZSBTdGF0dXMNCisvLyAtLS0tLS0tLSBTUElfSUVSIDogKFNQSSBPZmZzZXQ6IDB4MTQpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gU1BJX0lEUiA6IChTUEkgT2Zmc2V0OiAweDE4KSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBTUElfSU1SIDogKFNQSSBPZmZzZXQ6IDB4MWMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFNQSV9DU1IgOiAoU1BJIE9mZnNldDogMHgzMCkgQ2hpcCBTZWxlY3QgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19TUElfQ1BPTCAgICAgICAgICAgICgweDEgPDwgIDApIC8vIChTUEkpIENsb2NrIFBvbGFyaXR5DQorI2RlZmluZSBBVDkxQ19TUElfTkNQSEEgICAgICAgICAgICgweDEgPDwgIDEpIC8vIChTUEkpIENsb2NrIFBoYXNlDQorI2RlZmluZSBBVDkxQ19TUElfQ1NBQVQgICAgICAgICAgICgweDEgPDwgIDMpIC8vIChTUEkpIENoaXAgU2VsZWN0IEFjdGl2ZSBBZnRlciBUcmFuc2Zlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJX0JJVFMgICAgICAgICAgICAoMHhGIDw8ICA0KSAvLyAoU1BJKSBCaXRzIFBlciBUcmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NQSV9CSVRTXzggICAgICAgICAgICAgICAgICAgICgweDAgPDwgIDQpIC8vIChTUEkpIDggQml0cyBQZXIgdHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TUElfQklUU185ICAgICAgICAgICAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoU1BJKSA5IEJpdHMgUGVyIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1BJX0JJVFNfMTAgICAgICAgICAgICAgICAgICAgKDB4MiA8PCAgNCkgLy8gKFNQSSkgMTAgQml0cyBQZXIgdHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TUElfQklUU18xMSAgICAgICAgICAgICAgICAgICAoMHgzIDw8ICA0KSAvLyAoU1BJKSAxMSBCaXRzIFBlciB0cmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NQSV9CSVRTXzEyICAgICAgICAgICAgICAgICAgICgweDQgPDwgIDQpIC8vIChTUEkpIDEyIEJpdHMgUGVyIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1BJX0JJVFNfMTMgICAgICAgICAgICAgICAgICAgKDB4NSA8PCAgNCkgLy8gKFNQSSkgMTMgQml0cyBQZXIgdHJhbnNmZXINCisjZGVmaW5lIAlBVDkxQ19TUElfQklUU18xNCAgICAgICAgICAgICAgICAgICAoMHg2IDw8ICA0KSAvLyAoU1BJKSAxNCBCaXRzIFBlciB0cmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NQSV9CSVRTXzE1ICAgICAgICAgICAgICAgICAgICgweDcgPDwgIDQpIC8vIChTUEkpIDE1IEJpdHMgUGVyIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1BJX0JJVFNfMTYgICAgICAgICAgICAgICAgICAgKDB4OCA8PCAgNCkgLy8gKFNQSSkgMTYgQml0cyBQZXIgdHJhbnNmZXINCisjZGVmaW5lIEFUOTFDX1NQSV9TQ0JSICAgICAgICAgICAgKDB4RkYgPDwgIDgpIC8vIChTUEkpIFNlcmlhbCBDbG9jayBCYXVkIFJhdGUNCisjZGVmaW5lIEFUOTFDX1NQSV9ETFlCUyAgICAgICAgICAgKDB4RkYgPDwgMTYpIC8vIChTUEkpIERlbGF5IEJlZm9yZSBTUENLDQorI2RlZmluZSBBVDkxQ19TUElfRExZQkNUICAgICAgICAgICgweEZGIDw8IDI0KSAvLyAoU1BJKSBEZWxheSBCZXR3ZWVuIENvbnNlY3V0aXZlIFRyYW5zZmVycw0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVXNhcnQgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfVVNBUlQgc3RydWN0dXJlICoqKiAqLw0KLSNkZWZpbmUgVVNfQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAwICkgICAgICAgICAvKiBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBVU19NUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDQgKSAgICAgICAgIC8qIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFVTX0lFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICggOCApICAgICAgICAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVVNfSURSICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAxMiApICAgICAgICAvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVVNfSU1SICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAxNiApICAgICAgICAvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVVNfQ1NSICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAyMCApICAgICAgICAvKiBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVVNfUkhSICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAyNCApICAgICAgICAvKiBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyICovDQotI2RlZmluZSBVU19USFIgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDI4ICkgICAgICAgIC8qIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFVTX0JSR1IgICAgICAgICAgICAgICAgICAgICAgICAgICggMzIgKSAgICAgICAgLyogQmF1ZCBSYXRlIEdlbmVyYXRvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVVNfUlRPUiAgICAgICAgICAgICAgICAgICAgICAgICAgKCAzNiApICAgICAgICAvKiBSZWNlaXZlciBUaW1lLW91dCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVVNfVFRHUiAgICAgICAgICAgICAgICAgICAgICAgICAgKCA0MCApICAgICAgICAvKiBUcmFuc21pdHRlciBUaW1lLWd1YXJkIFJlZ2lzdGVyICovDQotI2RlZmluZSBVU19GSURJICAgICAgICAgICAgICAgICAgICAgICAgICAoIDY0ICkgICAgICAgIC8qIEZJX0RJX1JhdGlvIFJlZ2lzdGVyICovDQotI2RlZmluZSBVU19ORVIgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDY4ICkgICAgICAgIC8qIE5iIEVycm9ycyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVVNfSUYgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCA3NiApICAgICAgICAvKiBJUkRBX0ZJTFRFUiBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVVNfUlBSICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAyNTYgKSAgICAgICAvKiBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFVTX1JDUiAgICAgICAgICAgICAgICAgICAgICAgICAgICggMjYwICkgICAgICAgLyogUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBVU19UUFIgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDI2NCApICAgICAgIC8qIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFVTX1RDUiAgICAgICAgICAgICAgICAgICAgICAgICAgICggMjY4ICkgICAgICAgLyogVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVVNfUk5QUiAgICAgICAgICAgICAgICAgICAgICAgICAgKCAyNzIgKSAgICAgICAvKiBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVVNfUk5DUiAgICAgICAgICAgICAgICAgICAgICAgICAgKCAyNzYgKSAgICAgICAvKiBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVVNfVE5QUiAgICAgICAgICAgICAgICAgICAgICAgICAgKCAyODAgKSAgICAgICAvKiBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFVTX1ROQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICggMjg0ICkgICAgICAgLyogVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBVU19QVENSICAgICAgICAgICAgICAgICAgICAgICAgICAoIDI4OCApICAgICAgIC8qIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBVU19QVFNSICAgICAgICAgICAgICAgICAgICAgICAgICAoIDI5MiApICAgICAgIC8qIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0vKiAtLS0tLS0tLSBVU19DUiA6IChVU0FSVCBPZmZzZXQ6IDB4MCkgRGVidWcgVW5pdCBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19VU19TVFRCUksgICAgICAgICAgICAgICAgICAoIDB4MSA8PCA5ICkgIC8qIChVU0FSVCkgU3RhcnQgQnJlYWsgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1NUUEJSSyAgICAgICAgICAgICAgICAgICggMHgxIDw8IDEwICkgLyogKFVTQVJUKSBTdG9wIEJyZWFrICovDQotI2RlZmluZSBBVDkxQ19VU19TVFRUTyAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxMSApIC8qIChVU0FSVCkgU3RhcnQgVGltZS1vdXQgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1NFTkRBICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDEyICkgLyogKFVTQVJUKSBTZW5kIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1JTVElUICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDEzICkgLyogKFVTQVJUKSBSZXNldCBJdGVyYXRpb25zICovDQotI2RlZmluZSBBVDkxQ19VU19SU1ROQUNLICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxNCApIC8qIChVU0FSVCkgUmVzZXQgTm9uIEFja25vd2xlZGdlICovDQotI2RlZmluZSBBVDkxQ19VU19SRVRUTyAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxNSApIC8qIChVU0FSVCkgUmVhcm0gVGltZS1vdXQgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX0RUUkVOICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDE2ICkgLyogKFVTQVJUKSBEYXRhIFRlcm1pbmFsIHJlYWR5IEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfRFRSRElTICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTcgKSAvKiAoVVNBUlQpIERhdGEgVGVybWluYWwgcmVhZHkgRGlzYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfUlRTRU4gICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTggKSAvKiAoVVNBUlQpIFJlcXVlc3QgdG8gU2VuZCBlbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1JUU0RJUyAgICAgICAgICAgICAgICAgICggMHgxIDw8IDE5ICkgLyogKFVTQVJUKSBSZXF1ZXN0IHRvIFNlbmQgRGlzYWJsZSAqLw0KLS8qIC0tLS0tLS0tIFVTX01SIDogKFVTQVJUIE9mZnNldDogMHg0KSBEZWJ1ZyBVbml0IE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1VTTU9ERSAgICAgICAgICAgICAgICAgICggMHhGIDw8IDAgKSAgLyogKFVTQVJUKSBVc2FydCBtb2RlICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfVVNNT0RFX05PUk1BTCAgICAgICAoIDB4MCApICAgICAgIC8qIChVU0FSVCkgTm9ybWFsICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfVVNNT0RFX1JTNDg1ICAgICAgICAoIDB4MSApICAgICAgIC8qIChVU0FSVCkgUlM0ODUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19VU01PREVfSFdIU0ggICAgICAgICggMHgyICkgICAgICAgLyogKFVTQVJUKSBIYXJkd2FyZSBIYW5kc2hha2luZyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX1VTTU9ERV9NT0RFTSAgICAgICAgKCAweDMgKSAgICAgICAvKiAoVVNBUlQpIE1vZGVtICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfVVNNT0RFX0lTTzc4MTZfMCAgICAoIDB4NCApICAgICAgIC8qIChVU0FSVCkgSVNPNzgxNiBwcm90b2NvbDogVCA9IDAgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19VU01PREVfSVNPNzgxNl8xICAgICggMHg2ICkgICAgICAgLyogKFVTQVJUKSBJU083ODE2IHByb3RvY29sOiBUID0gMSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX1VTTU9ERV9JUkRBICAgICAgICAgKCAweDggKSAgICAgICAvKiAoVVNBUlQpIElyREEgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19VU01PREVfU1dIU0ggICAgICAgICggMHhDICkgICAgICAgLyogKFVTQVJUKSBTb2Z0d2FyZSBIYW5kc2hha2luZyAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfQ0xLUyAgICAgICAgICAgICAgICAgICAgKCAweDMgPDwgNCApICAvKiAoVVNBUlQpIENsb2NrIFNlbGVjdGlvbiAoQmF1ZCBSYXRlIGdlbmVyYXRvciBJbnB1dCBDbG9jayAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1VTX0NMS1NfQ0xPQ0sgICAgICAgICAgKCAweDAgPDwgNCApICAvKiAoVVNBUlQpIENsb2NrICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfQ0xLU19GRElWMSAgICAgICAgICAoIDB4MSA8PCA0ICkgIC8qIChVU0FSVCkgZmRpdjEgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19DTEtTX1NMT1cgICAgICAgICAgICggMHgyIDw8IDQgKSAgLyogKFVTQVJUKSBzbG93X2Nsb2NrIChBUk0pICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfQ0xLU19FWFQgICAgICAgICAgICAoIDB4MyA8PCA0ICkgIC8qIChVU0FSVCkgRXh0ZXJuYWwgKFNDSykgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX0NIUkwgICAgICAgICAgICAgICAgICAgICggMHgzIDw8IDYgKSAgLyogKFVTQVJUKSBDbG9jayBTZWxlY3Rpb24gKEJhdWQgUmF0ZSBnZW5lcmF0b3IgSW5wdXQgQ2xvY2sgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19DSFJMXzVfQklUUyAgICAgICAgICggMHgwIDw8IDYgKSAgLyogKFVTQVJUKSBDaGFyYWN0ZXIgTGVuZ3RoOiA1IGJpdHMgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19DSFJMXzZfQklUUyAgICAgICAgICggMHgxIDw8IDYgKSAgLyogKFVTQVJUKSBDaGFyYWN0ZXIgTGVuZ3RoOiA2IGJpdHMgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19DSFJMXzdfQklUUyAgICAgICAgICggMHgyIDw8IDYgKSAgLyogKFVTQVJUKSBDaGFyYWN0ZXIgTGVuZ3RoOiA3IGJpdHMgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19DSFJMXzhfQklUUyAgICAgICAgICggMHgzIDw8IDYgKSAgLyogKFVTQVJUKSBDaGFyYWN0ZXIgTGVuZ3RoOiA4IGJpdHMgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1NZTkMgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDggKSAgLyogKFVTQVJUKSBTeW5jaHJvbm91cyBNb2RlIFNlbGVjdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfTkJTVE9QICAgICAgICAgICAgICAgICAgKCAweDMgPDwgMTIgKSAvKiAoVVNBUlQpIE51bWJlciBvZiBTdG9wIGJpdHMgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VU19OQlNUT1BfMV9CSVQgICAgICAgICggMHgwIDw8IDEyICkgLyogKFVTQVJUKSAxIHN0b3AgYml0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfTkJTVE9QXzE1X0JJVCAgICAgICAoIDB4MSA8PCAxMiApIC8qIChVU0FSVCkgQXN5bmNocm9ub3VzIChTWU5DPTApIDIgc3RvcCBiaXRzIFN5bmNocm9ub3VzIChTWU5DPTEpIDIgc3RvcCBiaXRzICovDQotI2RlZmluZSAgICAgQVQ5MUNfVVNfTkJTVE9QXzJfQklUICAgICAgICAoIDB4MiA8PCAxMiApIC8qIChVU0FSVCkgMiBzdG9wIGJpdHMgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX01TQkYgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDE2ICkgLyogKFVTQVJUKSBCaXQgT3JkZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX01PREU5ICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDE3ICkgLyogKFVTQVJUKSA5LWJpdCBDaGFyYWN0ZXIgbGVuZ3RoICovDQotI2RlZmluZSBBVDkxQ19VU19DS0xPICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxOCApIC8qIChVU0FSVCkgQ2xvY2sgT3V0cHV0IFNlbGVjdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfT1ZFUiAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTkgKSAvKiAoVVNBUlQpIE92ZXIgU2FtcGxpbmcgTW9kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfSU5BQ0sgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMjAgKSAvKiAoVVNBUlQpIEluaGliaXQgTm9uIEFja25vd2xlZGdlICovDQotI2RlZmluZSBBVDkxQ19VU19EU05BQ0sgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAyMSApIC8qIChVU0FSVCkgRGlzYWJsZSBTdWNjZXNzaXZlIE5BQ0sgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX01BWF9JVEVSICAgICAgICAgICAgICAgICggMHgxIDw8IDI0ICkgLyogKFVTQVJUKSBOdW1iZXIgb2YgUmVwZXRpdGlvbnMgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX0ZJTFRFUiAgICAgICAgICAgICAgICAgICggMHgxIDw8IDI4ICkgLyogKFVTQVJUKSBSZWNlaXZlIExpbmUgRmlsdGVyICovDQotLyogLS0tLS0tLS0gVVNfSUVSIDogKFVTQVJUIE9mZnNldDogMHg4KSBEZWJ1ZyBVbml0IEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1JYQlJLICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDIgKSAgLyogKFVTQVJUKSBCcmVhayBSZWNlaXZlZC9FbmQgb2YgQnJlYWsgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1RJTUVPVVQgICAgICAgICAgICAgICAgICggMHgxIDw8IDggKSAgLyogKFVTQVJUKSBSZWNlaXZlciBUaW1lLW91dCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfSVRFUkFUSU9OICAgICAgICAgICAgICAgKCAweDEgPDwgMTAgKSAvKiAoVVNBUlQpIE1heCBudW1iZXIgb2YgUmVwZXRpdGlvbnMgUmVhY2hlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfTkFDSyAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTMgKSAvKiAoVVNBUlQpIE5vbiBBY2tub3dsZWRnZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfUklJQyAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTYgKSAvKiAoVVNBUlQpIFJpbmcgSU5kaWNhdG9yIElucHV0IENoYW5nZSBGbGFnICovDQotI2RlZmluZSBBVDkxQ19VU19EU1JJQyAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxNyApIC8qIChVU0FSVCkgRGF0YSBTZXQgUmVhZHkgSW5wdXQgQ2hhbmdlIEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX0RDRElDICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDE4ICkgLyogKFVTQVJUKSBEYXRhIENhcnJpZXIgRmxhZyAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfQ1RTSUMgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTkgKSAvKiAoVVNBUlQpIENsZWFyIFRvIFNlbmQgSW5wdXQgQ2hhbmdlIEZsYWcgKi8NCi0vKiAtLS0tLS0tLSBVU19JRFIgOiAoVVNBUlQgT2Zmc2V0OiAweGMpIERlYnVnIFVuaXQgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBVU19JTVIgOiAoVVNBUlQgT2Zmc2V0OiAweDEwKSBEZWJ1ZyBVbml0IEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gVVNfQ1NSIDogKFVTQVJUIE9mZnNldDogMHgxNCkgRGVidWcgVW5pdCBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfUkkgICAgICggMHgxIDw8IDIwICkgICAgICAgICAvKiAoVVNBUlQpIEltYWdlIG9mIFJJIElucHV0ICovDQotI2RlZmluZSBBVDkxQ19VU19EU1IgICAgKCAweDEgPDwgMjEgKSAgICAgICAgIC8qIChVU0FSVCkgSW1hZ2Ugb2YgRFNSIElucHV0ICovDQotI2RlZmluZSBBVDkxQ19VU19EQ0QgICAgKCAweDEgPDwgMjIgKSAgICAgICAgIC8qIChVU0FSVCkgSW1hZ2Ugb2YgRENEIElucHV0ICovDQotI2RlZmluZSBBVDkxQ19VU19DVFMgICAgKCAweDEgPDwgMjMgKSAgICAgICAgIC8qIChVU0FSVCkgSW1hZ2Ugb2YgQ1RTIElucHV0ICovDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBVc2FydA0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19VU0FSVCBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBVU19DUiAgICAgICAgICAgKCAwKSAvLyBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBVU19NUiAgICAgICAgICAgKCA0KSAvLyBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBVU19JRVIgICAgICAgICAgKCA4KSAvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBVU19JRFIgICAgICAgICAgKDEyKSAvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgVVNfSU1SICAgICAgICAgICgxNikgLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIFVTX0NTUiAgICAgICAgICAoMjApIC8vIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBVU19SSFIgICAgICAgICAgKDI0KSAvLyBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBVU19USFIgICAgICAgICAgKDI4KSAvLyBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBVU19CUkdSICAgICAgICAgKDMyKSAvLyBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBVU19SVE9SICAgICAgICAgKDM2KSAvLyBSZWNlaXZlciBUaW1lLW91dCBSZWdpc3Rlcg0KKyNkZWZpbmUgVVNfVFRHUiAgICAgICAgICg0MCkgLy8gVHJhbnNtaXR0ZXIgVGltZS1ndWFyZCBSZWdpc3Rlcg0KKyNkZWZpbmUgVVNfRklESSAgICAgICAgICg2NCkgLy8gRklfRElfUmF0aW8gUmVnaXN0ZXINCisjZGVmaW5lIFVTX05FUiAgICAgICAgICAoNjgpIC8vIE5iIEVycm9ycyBSZWdpc3Rlcg0KKyNkZWZpbmUgVVNfSUYgICAgICAgICAgICg3NikgLy8gSVJEQV9GSUxURVIgUmVnaXN0ZXINCisjZGVmaW5lIFVTX1JQUiAgICAgICAgICAoMjU2KSAvLyBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFVTX1JDUiAgICAgICAgICAoMjYwKSAvLyBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFVTX1RQUiAgICAgICAgICAoMjY0KSAvLyBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBVU19UQ1IgICAgICAgICAgKDI2OCkgLy8gVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgVVNfUk5QUiAgICAgICAgICgyNzIpIC8vIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBVU19STkNSICAgICAgICAgKDI3NikgLy8gUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFVTX1ROUFIgICAgICAgICAoMjgwKSAvLyBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFVTX1ROQ1IgICAgICAgICAoMjg0KSAvLyBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFVTX1BUQ1IgICAgICAgICAoMjg4KSAvLyBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgVVNfUFRTUiAgICAgICAgICgyOTIpIC8vIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisvLyAtLS0tLS0tLSBVU19DUiA6IChVU0FSVCBPZmZzZXQ6IDB4MCkgRGVidWcgVW5pdCBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVVNfU1RUQlJLICAgICAgICAgICAoMHgxIDw8ICA5KSAvLyAoVVNBUlQpIFN0YXJ0IEJyZWFrDQorI2RlZmluZSBBVDkxQ19VU19TVFBCUksgICAgICAgICAgICgweDEgPDwgMTApIC8vIChVU0FSVCkgU3RvcCBCcmVhaw0KKyNkZWZpbmUgQVQ5MUNfVVNfU1RUVE8gICAgICAgICAgICAoMHgxIDw8IDExKSAvLyAoVVNBUlQpIFN0YXJ0IFRpbWUtb3V0DQorI2RlZmluZSBBVDkxQ19VU19TRU5EQSAgICAgICAgICAgICgweDEgPDwgMTIpIC8vIChVU0FSVCkgU2VuZCBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19VU19SU1RJVCAgICAgICAgICAgICgweDEgPDwgMTMpIC8vIChVU0FSVCkgUmVzZXQgSXRlcmF0aW9ucw0KKyNkZWZpbmUgQVQ5MUNfVVNfUlNUTkFDSyAgICAgICAgICAoMHgxIDw8IDE0KSAvLyAoVVNBUlQpIFJlc2V0IE5vbiBBY2tub3dsZWRnZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfUkVUVE8gICAgICAgICAgICAoMHgxIDw8IDE1KSAvLyAoVVNBUlQpIFJlYXJtIFRpbWUtb3V0DQorI2RlZmluZSBBVDkxQ19VU19EVFJFTiAgICAgICAgICAgICgweDEgPDwgMTYpIC8vIChVU0FSVCkgRGF0YSBUZXJtaW5hbCByZWFkeSBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1VTX0RUUkRJUyAgICAgICAgICAgKDB4MSA8PCAxNykgLy8gKFVTQVJUKSBEYXRhIFRlcm1pbmFsIHJlYWR5IERpc2FibGUNCisjZGVmaW5lIEFUOTFDX1VTX1JUU0VOICAgICAgICAgICAgKDB4MSA8PCAxOCkgLy8gKFVTQVJUKSBSZXF1ZXN0IHRvIFNlbmQgZW5hYmxlDQorI2RlZmluZSBBVDkxQ19VU19SVFNESVMgICAgICAgICAgICgweDEgPDwgMTkpIC8vIChVU0FSVCkgUmVxdWVzdCB0byBTZW5kIERpc2FibGUNCisvLyAtLS0tLS0tLSBVU19NUiA6IChVU0FSVCBPZmZzZXQ6IDB4NCkgRGVidWcgVW5pdCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVVNfVVNNT0RFICAgICAgICAgICAoMHhGIDw8ICAwKSAvLyAoVVNBUlQpIFVzYXJ0IG1vZGUNCisjZGVmaW5lIAlBVDkxQ19VU19VU01PREVfTk9STUFMICAgICAgICAgICAgICAgKDB4MCkgLy8gKFVTQVJUKSBOb3JtYWwNCisjZGVmaW5lIAlBVDkxQ19VU19VU01PREVfUlM0ODUgICAgICAgICAgICAgICAgKDB4MSkgLy8gKFVTQVJUKSBSUzQ4NQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1VTTU9ERV9IV0hTSCAgICAgICAgICAgICAgICAoMHgyKSAvLyAoVVNBUlQpIEhhcmR3YXJlIEhhbmRzaGFraW5nDQorI2RlZmluZSAJQVQ5MUNfVVNfVVNNT0RFX01PREVNICAgICAgICAgICAgICAgICgweDMpIC8vIChVU0FSVCkgTW9kZW0NCisjZGVmaW5lIAlBVDkxQ19VU19VU01PREVfSVNPNzgxNl8wICAgICAgICAgICAgKDB4NCkgLy8gKFVTQVJUKSBJU083ODE2IHByb3RvY29sOiBUID0gMA0KKyNkZWZpbmUgCUFUOTFDX1VTX1VTTU9ERV9JU083ODE2XzEgICAgICAgICAgICAoMHg2KSAvLyAoVVNBUlQpIElTTzc4MTYgcHJvdG9jb2w6IFQgPSAxDQorI2RlZmluZSAJQVQ5MUNfVVNfVVNNT0RFX0lSREEgICAgICAgICAgICAgICAgICgweDgpIC8vIChVU0FSVCkgSXJEQQ0KKyNkZWZpbmUgCUFUOTFDX1VTX1VTTU9ERV9TV0hTSCAgICAgICAgICAgICAgICAoMHhDKSAvLyAoVVNBUlQpIFNvZnR3YXJlIEhhbmRzaGFraW5nDQorI2RlZmluZSBBVDkxQ19VU19DTEtTICAgICAgICAgICAgICgweDMgPDwgIDQpIC8vIChVU0FSVCkgQ2xvY2sgU2VsZWN0aW9uIChCYXVkIFJhdGUgZ2VuZXJhdG9yIElucHV0IENsb2NrDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0xLU19DTE9DSyAgICAgICAgICAgICAgICAoMHgwIDw8ICA0KSAvLyAoVVNBUlQpIENsb2NrDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0xLU19GRElWMSAgICAgICAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoVVNBUlQpIGZkaXYxDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0xLU19TTE9XICAgICAgICAgICAgICAgICAoMHgyIDw8ICA0KSAvLyAoVVNBUlQpIHNsb3dfY2xvY2sgKEFSTSkNCisjZGVmaW5lIAlBVDkxQ19VU19DTEtTX0VYVCAgICAgICAgICAgICAgICAgICgweDMgPDwgIDQpIC8vIChVU0FSVCkgRXh0ZXJuYWwgKFNDSykNCisjZGVmaW5lIEFUOTFDX1VTX0NIUkwgICAgICAgICAgICAgKDB4MyA8PCAgNikgLy8gKFVTQVJUKSBDbG9jayBTZWxlY3Rpb24gKEJhdWQgUmF0ZSBnZW5lcmF0b3IgSW5wdXQgQ2xvY2sNCisjZGVmaW5lIAlBVDkxQ19VU19DSFJMXzVfQklUUyAgICAgICAgICAgICAgICgweDAgPDwgIDYpIC8vIChVU0FSVCkgQ2hhcmFjdGVyIExlbmd0aDogNSBiaXRzDQorI2RlZmluZSAJQVQ5MUNfVVNfQ0hSTF82X0JJVFMgICAgICAgICAgICAgICAoMHgxIDw8ICA2KSAvLyAoVVNBUlQpIENoYXJhY3RlciBMZW5ndGg6IDYgYml0cw0KKyNkZWZpbmUgCUFUOTFDX1VTX0NIUkxfN19CSVRTICAgICAgICAgICAgICAgKDB4MiA8PCAgNikgLy8gKFVTQVJUKSBDaGFyYWN0ZXIgTGVuZ3RoOiA3IGJpdHMNCisjZGVmaW5lIAlBVDkxQ19VU19DSFJMXzhfQklUUyAgICAgICAgICAgICAgICgweDMgPDwgIDYpIC8vIChVU0FSVCkgQ2hhcmFjdGVyIExlbmd0aDogOCBiaXRzDQorI2RlZmluZSBBVDkxQ19VU19TWU5DICAgICAgICAgICAgICgweDEgPDwgIDgpIC8vIChVU0FSVCkgU3luY2hyb25vdXMgTW9kZSBTZWxlY3QNCisjZGVmaW5lIEFUOTFDX1VTX05CU1RPUCAgICAgICAgICAgKDB4MyA8PCAxMikgLy8gKFVTQVJUKSBOdW1iZXIgb2YgU3RvcCBiaXRzDQorI2RlZmluZSAJQVQ5MUNfVVNfTkJTVE9QXzFfQklUICAgICAgICAgICAgICAgICgweDAgPDwgMTIpIC8vIChVU0FSVCkgMSBzdG9wIGJpdA0KKyNkZWZpbmUgCUFUOTFDX1VTX05CU1RPUF8xNV9CSVQgICAgICAgICAgICAgICAoMHgxIDw8IDEyKSAvLyAoVVNBUlQpIEFzeW5jaHJvbm91cyAoU1lOQz0wKSAyIHN0b3AgYml0cyBTeW5jaHJvbm91cyAoU1lOQz0xKSAyIHN0b3AgYml0cw0KKyNkZWZpbmUgCUFUOTFDX1VTX05CU1RPUF8yX0JJVCAgICAgICAgICAgICAgICAoMHgyIDw8IDEyKSAvLyAoVVNBUlQpIDIgc3RvcCBiaXRzDQorI2RlZmluZSBBVDkxQ19VU19NU0JGICAgICAgICAgICAgICgweDEgPDwgMTYpIC8vIChVU0FSVCkgQml0IE9yZGVyDQorI2RlZmluZSBBVDkxQ19VU19NT0RFOSAgICAgICAgICAgICgweDEgPDwgMTcpIC8vIChVU0FSVCkgOS1iaXQgQ2hhcmFjdGVyIGxlbmd0aA0KKyNkZWZpbmUgQVQ5MUNfVVNfQ0tMTyAgICAgICAgICAgICAoMHgxIDw8IDE4KSAvLyAoVVNBUlQpIENsb2NrIE91dHB1dCBTZWxlY3QNCisjZGVmaW5lIEFUOTFDX1VTX09WRVIgICAgICAgICAgICAgKDB4MSA8PCAxOSkgLy8gKFVTQVJUKSBPdmVyIFNhbXBsaW5nIE1vZGUNCisjZGVmaW5lIEFUOTFDX1VTX0lOQUNLICAgICAgICAgICAgKDB4MSA8PCAyMCkgLy8gKFVTQVJUKSBJbmhpYml0IE5vbiBBY2tub3dsZWRnZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfRFNOQUNLICAgICAgICAgICAoMHgxIDw8IDIxKSAvLyAoVVNBUlQpIERpc2FibGUgU3VjY2Vzc2l2ZSBOQUNLDQorI2RlZmluZSBBVDkxQ19VU19NQVhfSVRFUiAgICAgICAgICgweDEgPDwgMjQpIC8vIChVU0FSVCkgTnVtYmVyIG9mIFJlcGV0aXRpb25zDQorI2RlZmluZSBBVDkxQ19VU19GSUxURVIgICAgICAgICAgICgweDEgPDwgMjgpIC8vIChVU0FSVCkgUmVjZWl2ZSBMaW5lIEZpbHRlcg0KKy8vIC0tLS0tLS0tIFVTX0lFUiA6IChVU0FSVCBPZmZzZXQ6IDB4OCkgRGVidWcgVW5pdCBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVVNfUlhCUksgICAgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoVVNBUlQpIEJyZWFrIFJlY2VpdmVkL0VuZCBvZiBCcmVhaw0KKyNkZWZpbmUgQVQ5MUNfVVNfVElNRU9VVCAgICAgICAgICAoMHgxIDw8ICA4KSAvLyAoVVNBUlQpIFJlY2VpdmVyIFRpbWUtb3V0DQorI2RlZmluZSBBVDkxQ19VU19JVEVSQVRJT04gICAgICAgICgweDEgPDwgMTApIC8vIChVU0FSVCkgTWF4IG51bWJlciBvZiBSZXBldGl0aW9ucyBSZWFjaGVkDQorI2RlZmluZSBBVDkxQ19VU19OQUNLICAgICAgICAgICAgICgweDEgPDwgMTMpIC8vIChVU0FSVCkgTm9uIEFja25vd2xlZGdlDQorI2RlZmluZSBBVDkxQ19VU19SSUlDICAgICAgICAgICAgICgweDEgPDwgMTYpIC8vIChVU0FSVCkgUmluZyBJTmRpY2F0b3IgSW5wdXQgQ2hhbmdlIEZsYWcNCisjZGVmaW5lIEFUOTFDX1VTX0RTUklDICAgICAgICAgICAgKDB4MSA8PCAxNykgLy8gKFVTQVJUKSBEYXRhIFNldCBSZWFkeSBJbnB1dCBDaGFuZ2UgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfVVNfRENESUMgICAgICAgICAgICAoMHgxIDw8IDE4KSAvLyAoVVNBUlQpIERhdGEgQ2FycmllciBGbGFnDQorI2RlZmluZSBBVDkxQ19VU19DVFNJQyAgICAgICAgICAgICgweDEgPDwgMTkpIC8vIChVU0FSVCkgQ2xlYXIgVG8gU2VuZCBJbnB1dCBDaGFuZ2UgRmxhZw0KKy8vIC0tLS0tLS0tIFVTX0lEUiA6IChVU0FSVCBPZmZzZXQ6IDB4YykgRGVidWcgVW5pdCBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBVU19JTVIgOiAoVVNBUlQgT2Zmc2V0OiAweDEwKSBEZWJ1ZyBVbml0IEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFVTX0NTUiA6IChVU0FSVCBPZmZzZXQ6IDB4MTQpIERlYnVnIFVuaXQgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VU19SSSAgICAgICAgICAgICAgICgweDEgPDwgMjApIC8vIChVU0FSVCkgSW1hZ2Ugb2YgUkkgSW5wdXQNCisjZGVmaW5lIEFUOTFDX1VTX0RTUiAgICAgICAgICAgICAgKDB4MSA8PCAyMSkgLy8gKFVTQVJUKSBJbWFnZSBvZiBEU1IgSW5wdXQNCisjZGVmaW5lIEFUOTFDX1VTX0RDRCAgICAgICAgICAgICAgKDB4MSA8PCAyMikgLy8gKFVTQVJUKSBJbWFnZSBvZiBEQ0QgSW5wdXQNCisjZGVmaW5lIEFUOTFDX1VTX0NUUyAgICAgICAgICAgICAgKDB4MSA8PCAyMykgLy8gKFVTQVJUKSBJbWFnZSBvZiBDVFMgSW5wdXQNCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFN5bmNocm9ub3VzIFNlcmlhbCBDb250cm9sbGVyIEludGVyZmFjZSAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19TU0Mgc3RydWN0dXJlICoqKiAqLw0KLSNkZWZpbmUgU1NDX0NSICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAwICkgICAgICAgICAgLyogQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1NDX0NNUiAgICAgICAgICAgICAgICAgICAgICAgICAgKCA0ICkgICAgICAgICAgLyogQ2xvY2sgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1NDX1JDTVIgICAgICAgICAgICAgICAgICAgICAgICAgKCAxNiApICAgICAgICAgLyogUmVjZWl2ZSBDbG9jayBNb2RlUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNTQ19SRk1SICAgICAgICAgICAgICAgICAgICAgICAgICggMjAgKSAgICAgICAgIC8qIFJlY2VpdmUgRnJhbWUgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1NDX1RDTVIgICAgICAgICAgICAgICAgICAgICAgICAgKCAyNCApICAgICAgICAgLyogVHJhbnNtaXQgQ2xvY2sgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1NDX1RGTVIgICAgICAgICAgICAgICAgICAgICAgICAgKCAyOCApICAgICAgICAgLyogVHJhbnNtaXQgRnJhbWUgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1NDX1JIUiAgICAgICAgICAgICAgICAgICAgICAgICAgKCAzMiApICAgICAgICAgLyogUmVjZWl2ZSBIb2xkaW5nIFJlZ2lzdGVyICovDQotI2RlZmluZSBTU0NfVEhSICAgICAgICAgICAgICAgICAgICAgICAgICAoIDM2ICkgICAgICAgICAvKiBUcmFuc21pdCBIb2xkaW5nIFJlZ2lzdGVyICovDQotI2RlZmluZSBTU0NfUlNIUiAgICAgICAgICAgICAgICAgICAgICAgICAoIDQ4ICkgICAgICAgICAvKiBSZWNlaXZlIFN5bmMgSG9sZGluZyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1NDX1RTSFIgICAgICAgICAgICAgICAgICAgICAgICAgKCA1MiApICAgICAgICAgLyogVHJhbnNtaXQgU3luYyBIb2xkaW5nIFJlZ2lzdGVyICovDQotI2RlZmluZSBTU0NfU1IgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDY0ICkgICAgICAgICAvKiBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNTQ19JRVIgICAgICAgICAgICAgICAgICAgICAgICAgICggNjggKSAgICAgICAgIC8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNTQ19JRFIgICAgICAgICAgICAgICAgICAgICAgICAgICggNzIgKSAgICAgICAgIC8qIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBTU0NfSU1SICAgICAgICAgICAgICAgICAgICAgICAgICAoIDc2ICkgICAgICAgICAvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1NDX1JQUiAgICAgICAgICAgICAgICAgICAgICAgICAgKCAyNTYgKSAgICAgICAgLyogUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBTU0NfUkNSICAgICAgICAgICAgICAgICAgICAgICAgICAoIDI2MCApICAgICAgICAvKiBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNTQ19UUFIgICAgICAgICAgICAgICAgICAgICAgICAgICggMjY0ICkgICAgICAgIC8qIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNTQ19UQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICggMjY4ICkgICAgICAgIC8qIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNTQ19STlBSICAgICAgICAgICAgICAgICAgICAgICAgICggMjcyICkgICAgICAgIC8qIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBTU0NfUk5DUiAgICAgICAgICAgICAgICAgICAgICAgICAoIDI3NiApICAgICAgICAvKiBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgU1NDX1ROUFIgICAgICAgICAgICAgICAgICAgICAgICAgKCAyODAgKSAgICAgICAgLyogVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBTU0NfVE5DUiAgICAgICAgICAgICAgICAgICAgICAgICAoIDI4NCApICAgICAgICAvKiBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFNTQ19QVENSICAgICAgICAgICAgICAgICAgICAgICAgICggMjg4ICkgICAgICAgIC8qIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBTU0NfUFRTUiAgICAgICAgICAgICAgICAgICAgICAgICAoIDI5MiApICAgICAgICAvKiBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotLyogLS0tLS0tLS0gU1NDX0NSIDogKFNTQyBPZmZzZXQ6IDB4MCkgU1NDIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19SWEVOICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDAgKSAgIC8qIChTU0MpIFJlY2VpdmUgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19TU0NfUlhESVMgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxICkgICAvKiAoU1NDKSBSZWNlaXZlIERpc2FibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19UWEVOICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDggKSAgIC8qIChTU0MpIFRyYW5zbWl0IEVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1RYRElTICAgICAgICAgICAgICAgICAgKCAweDEgPDwgOSApICAgLyogKFNTQykgVHJhbnNtaXQgRGlzYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1NXUlNUICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTUgKSAgLyogKFNTQykgU29mdHdhcmUgUmVzZXQgKi8NCi0vKiAtLS0tLS0tLSBTU0NfUkNNUiA6IChTU0MgT2Zmc2V0OiAweDEwKSBTU0MgUmVjZWl2ZSBDbG9jayBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19TU0NfQ0tTICAgICAgICAgICAgICAgICAgICAoIDB4MyA8PCAwICkgICAvKiAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19DS1NfRElWICAgICAgICAgICAgKCAweDAgKSAgICAgICAgLyogKFNTQykgRGl2aWRlZCBDbG9jayAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19DS1NfVEsgICAgICAgICAgICAgKCAweDEgKSAgICAgICAgLyogKFNTQykgVEsgQ2xvY2sgc2lnbmFsICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX0NLU19SSyAgICAgICAgICAgICAoIDB4MiApICAgICAgICAvKiAoU1NDKSBSSyBwaW4gKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19DS08gICAgICAgICAgICAgICAgICAgICggMHg3IDw8IDIgKSAgIC8qIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgT3V0cHV0IE1vZGUgU2VsZWN0aW9uICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX0NLT19OT05FICAgICAgICAgICAoIDB4MCA8PCAyICkgICAvKiAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIE91dHB1dCBNb2RlOiBOb25lIFJLIHBpbjogSW5wdXQtb25seSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19DS09fQ09OVElOT1VTICAgICAgKCAweDEgPDwgMiApICAgLyogKFNTQykgQ29udGludW91cyBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIFJLIHBpbjogT3V0cHV0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX0NLT19EQVRBX1RYICAgICAgICAoIDB4MiA8PCAyICkgICAvKiAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIG9ubHkgZHVyaW5nIGRhdGEgdHJhbnNmZXJzIFJLIHBpbjogT3V0cHV0ICovDQotI2RlZmluZSBBVDkxQ19TU0NfQ0tJICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCA1ICkgICAvKiAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIEludmVyc2lvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1NUQVJUICAgICAgICAgICAgICAgICAgKCAweEYgPDwgOCApICAgLyogKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBTdGFydCBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfU1RBUlRfQ09OVElOT1VTICAgICggMHgwIDw8IDggKSAgIC8qIChTU0MpIENvbnRpbnVvdXMsIGFzIHNvb24gYXMgdGhlIHJlY2VpdmVyIGlzIGVuYWJsZWQsIGFuZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgZW5kIG9mIHRyYW5zZmVyIG9mIHRoZSBwcmV2aW91cyBkYXRhLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19TVEFSVF9UWCAgICAgICAgICAgKCAweDEgPDwgOCApICAgLyogKFNTQykgVHJhbnNtaXQvUmVjZWl2ZSBzdGFydCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19TVEFSVF9MT1dfUkYgICAgICAgKCAweDIgPDwgOCApICAgLyogKFNTQykgRGV0ZWN0aW9uIG9mIGEgbG93IGxldmVsIG9uIFJGIGlucHV0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX1NUQVJUX0hJR0hfUkYgICAgICAoIDB4MyA8PCA4ICkgICAvKiAoU1NDKSBEZXRlY3Rpb24gb2YgYSBoaWdoIGxldmVsIG9uIFJGIGlucHV0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX1NUQVJUX0ZBTExfUkYgICAgICAoIDB4NCA8PCA4ICkgICAvKiAoU1NDKSBEZXRlY3Rpb24gb2YgYSBmYWxsaW5nIGVkZ2Ugb24gUkYgaW5wdXQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfU1RBUlRfUklTRV9SRiAgICAgICggMHg1IDw8IDggKSAgIC8qIChTU0MpIERldGVjdGlvbiBvZiBhIHJpc2luZyBlZGdlIG9uIFJGIGlucHV0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX1NUQVJUX0xFVkVMX1JGICAgICAoIDB4NiA8PCA4ICkgICAvKiAoU1NDKSBEZXRlY3Rpb24gb2YgYW55IGxldmVsIGNoYW5nZSBvbiBSRiBpbnB1dCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19TVEFSVF9FREdFX1JGICAgICAgKCAweDcgPDwgOCApICAgLyogKFNTQykgRGV0ZWN0aW9uIG9mIGFueSBlZGdlIG9uIFJGIGlucHV0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX1NUQVJUXzAgICAgICAgICAgICAoIDB4OCA8PCA4ICkgICAvKiAoU1NDKSBDb21wYXJlIDAgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19TVFRETFkgICAgICAgICAgICAgICAgICggMHhGRiA8PCAxNiApIC8qIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgU3RhcnQgRGVsYXkgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19QRVJJT0QgICAgICAgICAgICAgICAgICggMHhGRiA8PCAyNCApIC8qIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgUGVyaW9kIERpdmlkZXIgU2VsZWN0aW9uICovDQotLyogLS0tLS0tLS0gU1NDX1JGTVIgOiAoU1NDIE9mZnNldDogMHgxNCkgU1NDIFJlY2VpdmUgRnJhbWUgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0RBVExFTiAgICAgICAgICAgICAgICAgKCAweDFGIDw8IDAgKSAgLyogKFNTQykgRGF0YSBMZW5ndGggKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19MT09QICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDUgKSAgIC8qIChTU0MpIExvb3AgTW9kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX01TQkYgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgNyApICAgLyogKFNTQykgTW9zdCBTaWduaWZpY2FudCBCaXQgRmlyc3QgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19EQVROQiAgICAgICAgICAgICAgICAgICggMHhGIDw8IDggKSAgIC8qIChTU0MpIERhdGEgTnVtYmVyIHBlciBGcmFtZSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0ZTTEVOICAgICAgICAgICAgICAgICAgKCAweEYgPDwgMTYgKSAgLyogKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIGxlbmd0aCAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0ZTT1MgICAgICAgICAgICAgICAgICAgKCAweDcgPDwgMjAgKSAgLyogKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIE91dHB1dCBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfRlNPU19OT05FICAgICAgICAgICggMHgwIDw8IDIwICkgIC8qIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IE5vbmUgUksgcGluIElucHV0LW9ubHkgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfRlNPU19ORUdBVElWRSAgICAgICggMHgxIDw8IDIwICkgIC8qIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IE5lZ2F0aXZlIFB1bHNlICovDQotI2RlZmluZSAgICAgQVQ5MUNfU1NDX0ZTT1NfUE9TSVRJVkUgICAgICAoIDB4MiA8PCAyMCApICAvKiAoU1NDKSBTZWxlY3RlZCBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgU2lnbmFsOiBQb3NpdGl2ZSBQdWxzZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19GU09TX0xPVyAgICAgICAgICAgKCAweDMgPDwgMjAgKSAgLyogKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogRHJpdmVyIExvdyBkdXJpbmcgZGF0YSB0cmFuc2ZlciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1NTQ19GU09TX0hJR0ggICAgICAgICAgKCAweDQgPDwgMjAgKSAgLyogKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogRHJpdmVyIEhpZ2ggZHVyaW5nIGRhdGEgdHJhbnNmZXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19TU0NfRlNPU19UT0dHTEUgICAgICAgICggMHg1IDw8IDIwICkgIC8qIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IFRvZ2dsaW5nIGF0IGVhY2ggc3RhcnQgb2YgZGF0YSB0cmFuc2ZlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0ZTRURHRSAgICAgICAgICAgICAgICAgKCAweDEgPDwgMjQgKSAgLyogKFNTQykgRnJhbWUgU3luYyBFZGdlIERldGVjdGlvbiAqLw0KLS8qIC0tLS0tLS0tIFNTQ19UQ01SIDogKFNTQyBPZmZzZXQ6IDB4MTgpIFNTQyBUcmFuc21pdCBDbG9jayBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gU1NDX1RGTVIgOiAoU1NDIE9mZnNldDogMHgxYykgU1NDIFRyYW5zbWl0IEZyYW1lIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19EQVRERUYgICAgICAgICAgICAgICAgICggMHgxIDw8IDUgKSAgLyogKFNTQykgRGF0YSBEZWZhdWx0IFZhbHVlICovDQotI2RlZmluZSBBVDkxQ19TU0NfRlNERU4gICAgICAgICAgICAgICAgICAoIDB4MSA8PCAyMyApIC8qIChTU0MpIEZyYW1lIFN5bmMgRGF0YSBFbmFibGUgKi8NCi0vKiAtLS0tLS0tLSBTU0NfU1IgOiAoU1NDIE9mZnNldDogMHg0MCkgU1NDIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1RYUkRZICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMCApICAvKiAoU1NDKSBUcmFuc21pdCBSZWFkeSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1RYRU1QVFkgICAgICAgICAgICAgICAgKCAweDEgPDwgMSApICAvKiAoU1NDKSBUcmFuc21pdCBFbXB0eSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0VORFRYICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMiApICAvKiAoU1NDKSBFbmQgT2YgVHJhbnNtaXNzaW9uICovDQotI2RlZmluZSBBVDkxQ19TU0NfVFhCVUZFICAgICAgICAgICAgICAgICAoIDB4MSA8PCAzICkgIC8qIChTU0MpIFRyYW5zbWl0IEJ1ZmZlciBFbXB0eSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1JYUkRZICAgICAgICAgICAgICAgICAgKCAweDEgPDwgNCApICAvKiAoU1NDKSBSZWNlaXZlIFJlYWR5ICovDQotI2RlZmluZSBBVDkxQ19TU0NfT1ZSVU4gICAgICAgICAgICAgICAgICAoIDB4MSA8PCA1ICkgIC8qIChTU0MpIFJlY2VpdmUgT3ZlcnJ1biAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0VORFJYICAgICAgICAgICAgICAgICAgKCAweDEgPDwgNiApICAvKiAoU1NDKSBFbmQgb2YgUmVjZXB0aW9uICovDQotI2RlZmluZSBBVDkxQ19TU0NfUlhCVUZGICAgICAgICAgICAgICAgICAoIDB4MSA8PCA3ICkgIC8qIChTU0MpIFJlY2VpdmUgQnVmZmVyIEZ1bGwgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19UWFNZTiAgICAgICAgICAgICAgICAgICggMHgxIDw8IDEwICkgLyogKFNTQykgVHJhbnNtaXQgU3luYyAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1JYU1lOICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTEgKSAvKiAoU1NDKSBSZWNlaXZlIFN5bmMgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19UWEVOQSAgICAgICAgICAgICAgICAgICggMHgxIDw8IDE2ICkgLyogKFNTQykgVHJhbnNtaXQgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19TU0NfUlhFTkEgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxNyApIC8qIChTU0MpIFJlY2VpdmUgRW5hYmxlICovDQotLyogLS0tLS0tLS0gU1NDX0lFUiA6IChTU0MgT2Zmc2V0OiAweDQ0KSBTU0MgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFNTQ19JRFIgOiAoU1NDIE9mZnNldDogMHg0OCkgU1NDIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gU1NDX0lNUiA6IChTU0MgT2Zmc2V0OiAweDRjKSBTU0MgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFN5bmNocm9ub3VzIFNlcmlhbCBDb250cm9sbGVyIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19TU0Mgc3RydWN0dXJlICoqKg0KKyNkZWZpbmUgU1NDX0NSICAgICAgICAgICggMCkgLy8gQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX0NNUiAgICAgICAgICggNCkgLy8gQ2xvY2sgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX1JDTVIgICAgICAgICgxNikgLy8gUmVjZWl2ZSBDbG9jayBNb2RlUmVnaXN0ZXINCisjZGVmaW5lIFNTQ19SRk1SICAgICAgICAoMjApIC8vIFJlY2VpdmUgRnJhbWUgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX1RDTVIgICAgICAgICgyNCkgLy8gVHJhbnNtaXQgQ2xvY2sgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX1RGTVIgICAgICAgICgyOCkgLy8gVHJhbnNtaXQgRnJhbWUgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX1JIUiAgICAgICAgICgzMikgLy8gUmVjZWl2ZSBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBTU0NfVEhSICAgICAgICAgKDM2KSAvLyBUcmFuc21pdCBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBTU0NfUlNIUiAgICAgICAgKDQ4KSAvLyBSZWNlaXZlIFN5bmMgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX1RTSFIgICAgICAgICg1MikgLy8gVHJhbnNtaXQgU3luYyBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBTU0NfU1IgICAgICAgICAgKDY0KSAvLyBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFNTQ19JRVIgICAgICAgICAoNjgpIC8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFNTQ19JRFIgICAgICAgICAoNzIpIC8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBTU0NfSU1SICAgICAgICAgKDc2KSAvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX1JQUiAgICAgICAgICgyNTYpIC8vIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX1JDUiAgICAgICAgICgyNjApIC8vIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX1RQUiAgICAgICAgICgyNjQpIC8vIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFNTQ19UQ1IgICAgICAgICAoMjY4KSAvLyBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBTU0NfUk5QUiAgICAgICAgKDI3MikgLy8gUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFNTQ19STkNSICAgICAgICAoMjc2KSAvLyBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX1ROUFIgICAgICAgICgyODApIC8vIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX1ROQ1IgICAgICAgICgyODQpIC8vIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgU1NDX1BUQ1IgICAgICAgICgyODgpIC8vIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBTU0NfUFRTUiAgICAgICAgKDI5MikgLy8gUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKy8vIC0tLS0tLS0tIFNTQ19DUiA6IChTU0MgT2Zmc2V0OiAweDApIFNTQyBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JYRU4gICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoU1NDKSBSZWNlaXZlIEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JYRElTICAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoU1NDKSBSZWNlaXZlIERpc2FibGUNCisjZGVmaW5lIEFUOTFDX1NTQ19UWEVOICAgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKFNTQykgVHJhbnNtaXQgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19TU0NfVFhESVMgICAgICAgICAgICgweDEgPDwgIDkpIC8vIChTU0MpIFRyYW5zbWl0IERpc2FibGUNCisjZGVmaW5lIEFUOTFDX1NTQ19TV1JTVCAgICAgICAgICAgKDB4MSA8PCAxNSkgLy8gKFNTQykgU29mdHdhcmUgUmVzZXQNCisvLyAtLS0tLS0tLSBTU0NfUkNNUiA6IChTU0MgT2Zmc2V0OiAweDEwKSBTU0MgUmVjZWl2ZSBDbG9jayBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfU1NDX0NLUyAgICAgICAgICAgICAoMHgzIDw8ICAwKSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IENsb2NrIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1NTQ19DS1NfRElWICAgICAgICAgICAgICAgICAgKDB4MCkgLy8gKFNTQykgRGl2aWRlZCBDbG9jaw0KKyNkZWZpbmUgCUFUOTFDX1NTQ19DS1NfVEsgICAgICAgICAgICAgICAgICAgKDB4MSkgLy8gKFNTQykgVEsgQ2xvY2sgc2lnbmFsDQorI2RlZmluZSAJQVQ5MUNfU1NDX0NLU19SSyAgICAgICAgICAgICAgICAgICAoMHgyKSAvLyAoU1NDKSBSSyBwaW4NCisjZGVmaW5lIEFUOTFDX1NTQ19DS08gICAgICAgICAgICAgKDB4NyA8PCAgMikgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBPdXRwdXQgTW9kZSBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19TU0NfQ0tPX05PTkUgICAgICAgICAgICAgICAgICgweDAgPDwgIDIpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgT3V0cHV0IE1vZGU6IE5vbmUgUksgcGluOiBJbnB1dC1vbmx5DQorI2RlZmluZSAJQVQ5MUNfU1NDX0NLT19DT05USU5PVVMgICAgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoU1NDKSBDb250aW51b3VzIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgUksgcGluOiBPdXRwdXQNCisjZGVmaW5lIAlBVDkxQ19TU0NfQ0tPX0RBVEFfVFggICAgICAgICAgICAgICgweDIgPDwgIDIpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgQ2xvY2sgb25seSBkdXJpbmcgZGF0YSB0cmFuc2ZlcnMgUksgcGluOiBPdXRwdXQNCisjZGVmaW5lIEFUOTFDX1NTQ19DS0kgICAgICAgICAgICAgKDB4MSA8PCAgNSkgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBDbG9jayBJbnZlcnNpb24NCisjZGVmaW5lIEFUOTFDX1NTQ19TVEFSVCAgICAgICAgICAgKDB4RiA8PCAgOCkgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBTdGFydCBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfQ09OVElOT1VTICAgICAgICAgICAgKDB4MCA8PCAgOCkgLy8gKFNTQykgQ29udGludW91cywgYXMgc29vbiBhcyB0aGUgcmVjZWl2ZXIgaXMgZW5hYmxlZCwgYW5kIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBlbmQgb2YgdHJhbnNmZXIgb2YgdGhlIHByZXZpb3VzIGRhdGEuDQorI2RlZmluZSAJQVQ5MUNfU1NDX1NUQVJUX1RYICAgICAgICAgICAgICAgICAgICgweDEgPDwgIDgpIC8vIChTU0MpIFRyYW5zbWl0L1JlY2VpdmUgc3RhcnQNCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfTE9XX1JGICAgICAgICAgICAgICAgKDB4MiA8PCAgOCkgLy8gKFNTQykgRGV0ZWN0aW9uIG9mIGEgbG93IGxldmVsIG9uIFJGIGlucHV0DQorI2RlZmluZSAJQVQ5MUNfU1NDX1NUQVJUX0hJR0hfUkYgICAgICAgICAgICAgICgweDMgPDwgIDgpIC8vIChTU0MpIERldGVjdGlvbiBvZiBhIGhpZ2ggbGV2ZWwgb24gUkYgaW5wdXQNCisjZGVmaW5lIAlBVDkxQ19TU0NfU1RBUlRfRkFMTF9SRiAgICAgICAgICAgICAgKDB4NCA8PCAgOCkgLy8gKFNTQykgRGV0ZWN0aW9uIG9mIGEgZmFsbGluZyBlZGdlIG9uIFJGIGlucHV0DQorI2RlZmluZSAJQVQ5MUNfU1NDX1NUQVJUX1JJU0VfUkYgICAgICAgICAgICAgICgweDUgPDwgIDgpIC8vIChTU0MpIERldGVjdGlvbiBvZiBhIHJpc2luZyBlZGdlIG9uIFJGIGlucHV0DQorI2RlZmluZSAJQVQ5MUNfU1NDX1NUQVJUX0xFVkVMX1JGICAgICAgICAgICAgICgweDYgPDwgIDgpIC8vIChTU0MpIERldGVjdGlvbiBvZiBhbnkgbGV2ZWwgY2hhbmdlIG9uIFJGIGlucHV0DQorI2RlZmluZSAJQVQ5MUNfU1NDX1NUQVJUX0VER0VfUkYgICAgICAgICAgICAgICgweDcgPDwgIDgpIC8vIChTU0MpIERldGVjdGlvbiBvZiBhbnkgZWRnZSBvbiBSRiBpbnB1dA0KKyNkZWZpbmUgCUFUOTFDX1NTQ19TVEFSVF8wICAgICAgICAgICAgICAgICAgICAoMHg4IDw8ICA4KSAvLyAoU1NDKSBDb21wYXJlIDANCisjZGVmaW5lIEFUOTFDX1NTQ19TVFRETFkgICAgICAgICAgKDB4RkYgPDwgMTYpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgU3RhcnQgRGVsYXkNCisjZGVmaW5lIEFUOTFDX1NTQ19QRVJJT0QgICAgICAgICAgKDB4RkYgPDwgMjQpIC8vIChTU0MpIFJlY2VpdmUvVHJhbnNtaXQgUGVyaW9kIERpdmlkZXIgU2VsZWN0aW9uDQorLy8gLS0tLS0tLS0gU1NDX1JGTVIgOiAoU1NDIE9mZnNldDogMHgxNCkgU1NDIFJlY2VpdmUgRnJhbWUgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NTQ19EQVRMRU4gICAgICAgICAgKDB4MUYgPDwgIDApIC8vIChTU0MpIERhdGEgTGVuZ3RoDQorI2RlZmluZSBBVDkxQ19TU0NfTE9PUCAgICAgICAgICAgICgweDEgPDwgIDUpIC8vIChTU0MpIExvb3AgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX01TQkYgICAgICAgICAgICAoMHgxIDw8ICA3KSAvLyAoU1NDKSBNb3N0IFNpZ25pZmljYW50IEJpdCBGaXJzdA0KKyNkZWZpbmUgQVQ5MUNfU1NDX0RBVE5CICAgICAgICAgICAoMHhGIDw8ICA4KSAvLyAoU1NDKSBEYXRhIE51bWJlciBwZXIgRnJhbWUNCisjZGVmaW5lIEFUOTFDX1NTQ19GU0xFTiAgICAgICAgICAgKDB4RiA8PCAxNikgLy8gKFNTQykgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIGxlbmd0aA0KKyNkZWZpbmUgQVQ5MUNfU1NDX0ZTT1MgICAgICAgICAgICAoMHg3IDw8IDIwKSAvLyAoU1NDKSBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgT3V0cHV0IFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1NTQ19GU09TX05PTkUgICAgICAgICAgICAgICAgICgweDAgPDwgMjApIC8vIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IE5vbmUgUksgcGluIElucHV0LW9ubHkNCisjZGVmaW5lIAlBVDkxQ19TU0NfRlNPU19ORUdBVElWRSAgICAgICAgICAgICAoMHgxIDw8IDIwKSAvLyAoU1NDKSBTZWxlY3RlZCBSZWNlaXZlL1RyYW5zbWl0IEZyYW1lIFN5bmMgU2lnbmFsOiBOZWdhdGl2ZSBQdWxzZQ0KKyNkZWZpbmUgCUFUOTFDX1NTQ19GU09TX1BPU0lUSVZFICAgICAgICAgICAgICgweDIgPDwgMjApIC8vIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IFBvc2l0aXZlIFB1bHNlDQorI2RlZmluZSAJQVQ5MUNfU1NDX0ZTT1NfTE9XICAgICAgICAgICAgICAgICAgKDB4MyA8PCAyMCkgLy8gKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogRHJpdmVyIExvdyBkdXJpbmcgZGF0YSB0cmFuc2Zlcg0KKyNkZWZpbmUgCUFUOTFDX1NTQ19GU09TX0hJR0ggICAgICAgICAgICAgICAgICgweDQgPDwgMjApIC8vIChTU0MpIFNlbGVjdGVkIFJlY2VpdmUvVHJhbnNtaXQgRnJhbWUgU3luYyBTaWduYWw6IERyaXZlciBIaWdoIGR1cmluZyBkYXRhIHRyYW5zZmVyDQorI2RlZmluZSAJQVQ5MUNfU1NDX0ZTT1NfVE9HR0xFICAgICAgICAgICAgICAgKDB4NSA8PCAyMCkgLy8gKFNTQykgU2VsZWN0ZWQgUmVjZWl2ZS9UcmFuc21pdCBGcmFtZSBTeW5jIFNpZ25hbDogVG9nZ2xpbmcgYXQgZWFjaCBzdGFydCBvZiBkYXRhIHRyYW5zZmVyDQorI2RlZmluZSBBVDkxQ19TU0NfRlNFREdFICAgICAgICAgICgweDEgPDwgMjQpIC8vIChTU0MpIEZyYW1lIFN5bmMgRWRnZSBEZXRlY3Rpb24NCisvLyAtLS0tLS0tLSBTU0NfVENNUiA6IChTU0MgT2Zmc2V0OiAweDE4KSBTU0MgVHJhbnNtaXQgQ2xvY2sgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBTU0NfVEZNUiA6IChTU0MgT2Zmc2V0OiAweDFjKSBTU0MgVHJhbnNtaXQgRnJhbWUgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NTQ19EQVRERUYgICAgICAgICAgKDB4MSA8PCAgNSkgLy8gKFNTQykgRGF0YSBEZWZhdWx0IFZhbHVlDQorI2RlZmluZSBBVDkxQ19TU0NfRlNERU4gICAgICAgICAgICgweDEgPDwgMjMpIC8vIChTU0MpIEZyYW1lIFN5bmMgRGF0YSBFbmFibGUNCisvLyAtLS0tLS0tLSBTU0NfU1IgOiAoU1NDIE9mZnNldDogMHg0MCkgU1NDIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1NTQ19UWFJEWSAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFNTQykgVHJhbnNtaXQgUmVhZHkNCisjZGVmaW5lIEFUOTFDX1NTQ19UWEVNUFRZICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKFNTQykgVHJhbnNtaXQgRW1wdHkNCisjZGVmaW5lIEFUOTFDX1NTQ19FTkRUWCAgICAgICAgICAgKDB4MSA8PCAgMikgLy8gKFNTQykgRW5kIE9mIFRyYW5zbWlzc2lvbg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RYQlVGRSAgICAgICAgICAoMHgxIDw8ICAzKSAvLyAoU1NDKSBUcmFuc21pdCBCdWZmZXIgRW1wdHkNCisjZGVmaW5lIEFUOTFDX1NTQ19SWFJEWSAgICAgICAgICAgKDB4MSA8PCAgNCkgLy8gKFNTQykgUmVjZWl2ZSBSZWFkeQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX09WUlVOICAgICAgICAgICAoMHgxIDw8ICA1KSAvLyAoU1NDKSBSZWNlaXZlIE92ZXJydW4NCisjZGVmaW5lIEFUOTFDX1NTQ19FTkRSWCAgICAgICAgICAgKDB4MSA8PCAgNikgLy8gKFNTQykgRW5kIG9mIFJlY2VwdGlvbg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JYQlVGRiAgICAgICAgICAoMHgxIDw8ICA3KSAvLyAoU1NDKSBSZWNlaXZlIEJ1ZmZlciBGdWxsDQorI2RlZmluZSBBVDkxQ19TU0NfVFhTWU4gICAgICAgICAgICgweDEgPDwgMTApIC8vIChTU0MpIFRyYW5zbWl0IFN5bmMNCisjZGVmaW5lIEFUOTFDX1NTQ19SWFNZTiAgICAgICAgICAgKDB4MSA8PCAxMSkgLy8gKFNTQykgUmVjZWl2ZSBTeW5jDQorI2RlZmluZSBBVDkxQ19TU0NfVFhFTkEgICAgICAgICAgICgweDEgPDwgMTYpIC8vIChTU0MpIFRyYW5zbWl0IEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JYRU5BICAgICAgICAgICAoMHgxIDw8IDE3KSAvLyAoU1NDKSBSZWNlaXZlIEVuYWJsZQ0KKy8vIC0tLS0tLS0tIFNTQ19JRVIgOiAoU1NDIE9mZnNldDogMHg0NCkgU1NDIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gU1NDX0lEUiA6IChTU0MgT2Zmc2V0OiAweDQ4KSBTU0MgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gU1NDX0lNUiA6IChTU0MgT2Zmc2V0OiAweDRjKSBTU0MgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBUd28td2lyZSBJbnRlcmZhY2UgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfVFdJIHN0cnVjdHVyZSAqKiogKi8NCi0jZGVmaW5lIFRXSV9DUiAgICAgICAgICAgICAgICAgICAgICAgICAoIDAgKSAgICAgICAgICAvKiBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBUV0lfTU1SICAgICAgICAgICAgICAgICAgICAgICAgKCA0ICkgICAgICAgICAgLyogTWFzdGVyIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFRXSV9JQURSICAgICAgICAgICAgICAgICAgICAgICAoIDEyICkgICAgICAgICAvKiBJbnRlcm5hbCBBZGRyZXNzIFJlZ2lzdGVyICovDQotI2RlZmluZSBUV0lfQ1dHUiAgICAgICAgICAgICAgICAgICAgICAgKCAxNiApICAgICAgICAgLyogQ2xvY2sgV2F2ZWZvcm0gR2VuZXJhdG9yIFJlZ2lzdGVyICovDQotI2RlZmluZSBUV0lfU1IgICAgICAgICAgICAgICAgICAgICAgICAgKCAzMiApICAgICAgICAgLyogU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBUV0lfSUVSICAgICAgICAgICAgICAgICAgICAgICAgKCAzNiApICAgICAgICAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVFdJX0lEUiAgICAgICAgICAgICAgICAgICAgICAgICggNDAgKSAgICAgICAgIC8qIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBUV0lfSU1SICAgICAgICAgICAgICAgICAgICAgICAgKCA0NCApICAgICAgICAgLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFRXSV9SSFIgICAgICAgICAgICAgICAgICAgICAgICAoIDQ4ICkgICAgICAgICAvKiBSZWNlaXZlIEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFRXSV9USFIgICAgICAgICAgICAgICAgICAgICAgICAoIDUyICkgICAgICAgICAvKiBUcmFuc21pdCBIb2xkaW5nIFJlZ2lzdGVyICovDQotLyogLS0tLS0tLS0gVFdJX0NSIDogKFRXSSBPZmZzZXQ6IDB4MCkgVFdJIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9TVEFSVCAgICAgICAgICAgICAgICAoIDB4MSA8PCAwICkgICAvKiAoVFdJKSBTZW5kIGEgU1RBUlQgQ29uZGl0aW9uICovDQotI2RlZmluZSBBVDkxQ19UV0lfU1RPUCAgICAgICAgICAgICAgICAgKCAweDEgPDwgMSApICAgLyogKFRXSSkgU2VuZCBhIFNUT1AgQ29uZGl0aW9uICovDQotI2RlZmluZSBBVDkxQ19UV0lfTVNFTiAgICAgICAgICAgICAgICAgKCAweDEgPDwgMiApICAgLyogKFRXSSkgVFdJIE1hc3RlciBUcmFuc2ZlciBFbmFibGVkICovDQotI2RlZmluZSBBVDkxQ19UV0lfTVNESVMgICAgICAgICAgICAgICAgKCAweDEgPDwgMyApICAgLyogKFRXSSkgVFdJIE1hc3RlciBUcmFuc2ZlciBEaXNhYmxlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX1NXUlNUICAgICAgICAgICAgICAgICggMHgxIDw8IDcgKSAgIC8qIChUV0kpIFNvZnR3YXJlIFJlc2V0ICovDQotLyogLS0tLS0tLS0gVFdJX01NUiA6IChUV0kgT2Zmc2V0OiAweDQpIFRXSSBNYXN0ZXIgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX0lBRFJTWiAgICAgICAgICAgICAgICggMHgzIDw8IDggKSAgIC8qIChUV0kpIEludGVybmFsIERldmljZSBBZGRyZXNzIFNpemUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UV0lfSUFEUlNaX05PICAgICAgICAoIDB4MCA8PCA4ICkgICAvKiAoVFdJKSBObyBpbnRlcm5hbCBkZXZpY2UgYWRkcmVzcyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RXSV9JQURSU1pfMV9CWVRFICAgICggMHgxIDw8IDggKSAgIC8qIChUV0kpIE9uZS1ieXRlIGludGVybmFsIGRldmljZSBhZGRyZXNzICovDQotI2RlZmluZSAgICAgQVQ5MUNfVFdJX0lBRFJTWl8yX0JZVEUgICAgKCAweDIgPDwgOCApICAgLyogKFRXSSkgVHdvLWJ5dGUgaW50ZXJuYWwgZGV2aWNlIGFkZHJlc3MgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UV0lfSUFEUlNaXzNfQllURSAgICAoIDB4MyA8PCA4ICkgICAvKiAoVFdJKSBUaHJlZS1ieXRlIGludGVybmFsIGRldmljZSBhZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19UV0lfTVJFQUQgICAgICAgICAgICAgICAgKCAweDEgPDwgMTIgKSAgLyogKFRXSSkgTWFzdGVyIFJlYWQgRGlyZWN0aW9uICovDQotI2RlZmluZSBBVDkxQ19UV0lfREFEUiAgICAgICAgICAgICAgICAgKCAweDdGIDw8IDE2ICkgLyogKFRXSSkgRGV2aWNlIEFkZHJlc3MgKi8NCi0vKiAtLS0tLS0tLSBUV0lfQ1dHUiA6IChUV0kgT2Zmc2V0OiAweDEwKSBUV0kgQ2xvY2sgV2F2ZWZvcm0gR2VuZXJhdG9yIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19UV0lfQ0xESVYgICAgICAgICAgICAgICAgKCAweEZGIDw8IDAgKSAgLyogKFRXSSkgQ2xvY2sgTG93IERpdmlkZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9DSERJViAgICAgICAgICAgICAgICAoIDB4RkYgPDwgOCApICAvKiAoVFdJKSBDbG9jayBIaWdoIERpdmlkZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9DS0RJViAgICAgICAgICAgICAgICAoIDB4NyA8PCAxNiApICAvKiAoVFdJKSBDbG9jayBEaXZpZGVyICovDQotLyogLS0tLS0tLS0gVFdJX1NSIDogKFRXSSBPZmZzZXQ6IDB4MjApIFRXSSBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9UWENPTVAgICAgICAgICAgICAgICAoIDB4MSA8PCAwICkgICAvKiAoVFdJKSBUcmFuc21pc3Npb24gQ29tcGxldGVkICovDQotI2RlZmluZSBBVDkxQ19UV0lfUlhSRFkgICAgICAgICAgICAgICAgKCAweDEgPDwgMSApICAgLyogKFRXSSkgUmVjZWl2ZSBob2xkaW5nIHJlZ2lzdGVyIFJlYURZICovDQotI2RlZmluZSBBVDkxQ19UV0lfVFhSRFkgICAgICAgICAgICAgICAgKCAweDEgPDwgMiApICAgLyogKFRXSSkgVHJhbnNtaXQgaG9sZGluZyByZWdpc3RlciBSZWFEWSAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX09WUkUgICAgICAgICAgICAgICAgICggMHgxIDw8IDYgKSAgIC8qIChUV0kpIE92ZXJydW4gRXJyb3IgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9VTlJFICAgICAgICAgICAgICAgICAoIDB4MSA8PCA3ICkgICAvKiAoVFdJKSBVbmRlcnJ1biBFcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX05BQ0sgICAgICAgICAgICAgICAgICggMHgxIDw8IDggKSAgIC8qIChUV0kpIE5vdCBBY2tub3dsZWRnZWQgKi8NCi0vKiAtLS0tLS0tLSBUV0lfSUVSIDogKFRXSSBPZmZzZXQ6IDB4MjQpIFRXSSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gVFdJX0lEUiA6IChUV0kgT2Zmc2V0OiAweDI4KSBUV0kgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBUV0lfSU1SIDogKFRXSSBPZmZzZXQ6IDB4MmMpIFRXSSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSAqLw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVHdvLXdpcmUgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1RXSSBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBUV0lfQ1IgICAgICAgICAgKCAwKSAvLyBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBUV0lfTU1SICAgICAgICAgKCA0KSAvLyBNYXN0ZXIgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgVFdJX0lBRFIgICAgICAgICgxMikgLy8gSW50ZXJuYWwgQWRkcmVzcyBSZWdpc3Rlcg0KKyNkZWZpbmUgVFdJX0NXR1IgICAgICAgICgxNikgLy8gQ2xvY2sgV2F2ZWZvcm0gR2VuZXJhdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBUV0lfU1IgICAgICAgICAgKDMyKSAvLyBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFRXSV9JRVIgICAgICAgICAoMzYpIC8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFRXSV9JRFIgICAgICAgICAoNDApIC8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBUV0lfSU1SICAgICAgICAgKDQ0KSAvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgVFdJX1JIUiAgICAgICAgICg0OCkgLy8gUmVjZWl2ZSBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBUV0lfVEhSICAgICAgICAgKDUyKSAvLyBUcmFuc21pdCBIb2xkaW5nIFJlZ2lzdGVyDQorLy8gLS0tLS0tLS0gVFdJX0NSIDogKFRXSSBPZmZzZXQ6IDB4MCkgVFdJIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UV0lfU1RBUlQgICAgICAgICAgICgweDEgPDwgIDApIC8vIChUV0kpIFNlbmQgYSBTVEFSVCBDb25kaXRpb24NCisjZGVmaW5lIEFUOTFDX1RXSV9TVE9QICAgICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKFRXSSkgU2VuZCBhIFNUT1AgQ29uZGl0aW9uDQorI2RlZmluZSBBVDkxQ19UV0lfTVNFTiAgICAgICAgICAgICgweDEgPDwgIDIpIC8vIChUV0kpIFRXSSBNYXN0ZXIgVHJhbnNmZXIgRW5hYmxlZA0KKyNkZWZpbmUgQVQ5MUNfVFdJX01TRElTICAgICAgICAgICAoMHgxIDw8ICAzKSAvLyAoVFdJKSBUV0kgTWFzdGVyIFRyYW5zZmVyIERpc2FibGVkDQorI2RlZmluZSBBVDkxQ19UV0lfU1dSU1QgICAgICAgICAgICgweDEgPDwgIDcpIC8vIChUV0kpIFNvZnR3YXJlIFJlc2V0DQorLy8gLS0tLS0tLS0gVFdJX01NUiA6IChUV0kgT2Zmc2V0OiAweDQpIFRXSSBNYXN0ZXIgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RXSV9JQURSU1ogICAgICAgICAgKDB4MyA8PCAgOCkgLy8gKFRXSSkgSW50ZXJuYWwgRGV2aWNlIEFkZHJlc3MgU2l6ZQ0KKyNkZWZpbmUgCUFUOTFDX1RXSV9JQURSU1pfTk8gICAgICAgICAgICAgICAgICAgKDB4MCA8PCAgOCkgLy8gKFRXSSkgTm8gaW50ZXJuYWwgZGV2aWNlIGFkZHJlc3MNCisjZGVmaW5lIAlBVDkxQ19UV0lfSUFEUlNaXzFfQllURSAgICAgICAgICAgICAgICgweDEgPDwgIDgpIC8vIChUV0kpIE9uZS1ieXRlIGludGVybmFsIGRldmljZSBhZGRyZXNzDQorI2RlZmluZSAJQVQ5MUNfVFdJX0lBRFJTWl8yX0JZVEUgICAgICAgICAgICAgICAoMHgyIDw8ICA4KSAvLyAoVFdJKSBUd28tYnl0ZSBpbnRlcm5hbCBkZXZpY2UgYWRkcmVzcw0KKyNkZWZpbmUgCUFUOTFDX1RXSV9JQURSU1pfM19CWVRFICAgICAgICAgICAgICAgKDB4MyA8PCAgOCkgLy8gKFRXSSkgVGhyZWUtYnl0ZSBpbnRlcm5hbCBkZXZpY2UgYWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfVFdJX01SRUFEICAgICAgICAgICAoMHgxIDw8IDEyKSAvLyAoVFdJKSBNYXN0ZXIgUmVhZCBEaXJlY3Rpb24NCisjZGVmaW5lIEFUOTFDX1RXSV9EQURSICAgICAgICAgICAgKDB4N0YgPDwgMTYpIC8vIChUV0kpIERldmljZSBBZGRyZXNzDQorLy8gLS0tLS0tLS0gVFdJX0NXR1IgOiAoVFdJIE9mZnNldDogMHgxMCkgVFdJIENsb2NrIFdhdmVmb3JtIEdlbmVyYXRvciBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RXSV9DTERJViAgICAgICAgICAgKDB4RkYgPDwgIDApIC8vIChUV0kpIENsb2NrIExvdyBEaXZpZGVyDQorI2RlZmluZSBBVDkxQ19UV0lfQ0hESVYgICAgICAgICAgICgweEZGIDw8ICA4KSAvLyAoVFdJKSBDbG9jayBIaWdoIERpdmlkZXINCisjZGVmaW5lIEFUOTFDX1RXSV9DS0RJViAgICAgICAgICAgKDB4NyA8PCAxNikgLy8gKFRXSSkgQ2xvY2sgRGl2aWRlcg0KKy8vIC0tLS0tLS0tIFRXSV9TUiA6IChUV0kgT2Zmc2V0OiAweDIwKSBUV0kgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVFdJX1RYQ09NUCAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoVFdJKSBUcmFuc21pc3Npb24gQ29tcGxldGVkDQorI2RlZmluZSBBVDkxQ19UV0lfUlhSRFkgICAgICAgICAgICgweDEgPDwgIDEpIC8vIChUV0kpIFJlY2VpdmUgaG9sZGluZyByZWdpc3RlciBSZWFEWQ0KKyNkZWZpbmUgQVQ5MUNfVFdJX1RYUkRZICAgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoVFdJKSBUcmFuc21pdCBob2xkaW5nIHJlZ2lzdGVyIFJlYURZDQorI2RlZmluZSBBVDkxQ19UV0lfT1ZSRSAgICAgICAgICAgICgweDEgPDwgIDYpIC8vIChUV0kpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX1RXSV9VTlJFICAgICAgICAgICAgKDB4MSA8PCAgNykgLy8gKFRXSSkgVW5kZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX1RXSV9OQUNLICAgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKFRXSSkgTm90IEFja25vd2xlZGdlZA0KKy8vIC0tLS0tLS0tIFRXSV9JRVIgOiAoVFdJIE9mZnNldDogMHgyNCkgVFdJIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVFdJX0lEUiA6IChUV0kgT2Zmc2V0OiAweDI4KSBUV0kgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVFdJX0lNUiA6IChUV0kgT2Zmc2V0OiAweDJjKSBUV0kgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQV01DIENoYW5uZWwgSW50ZXJmYWNlICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1BXTUNfQ0ggc3RydWN0dXJlICoqKiAqLw0KLSNkZWZpbmUgUFdNQ19DTVIgICAgICAgICAgICAgICAgICAgICggMCApICAgICAgICAgLyogQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBQV01DX0NEVFlSICAgICAgICAgICAgICAgICAgKCA0ICkgICAgICAgICAvKiBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBXTUNfQ1BSRFIgICAgICAgICAgICAgICAgICAoIDggKSAgICAgICAgIC8qIENoYW5uZWwgUGVyaW9kIFJlZ2lzdGVyICovDQotI2RlZmluZSBQV01DX0NDTlRSICAgICAgICAgICAgICAgICAgKCAxMiApICAgICAgICAvKiBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBXTUNfQ1VQRFIgICAgICAgICAgICAgICAgICAoIDE2ICkgICAgICAgIC8qIENoYW5uZWwgVXBkYXRlIFJlZ2lzdGVyICovDQotI2RlZmluZSBQV01DX1Jlc2VydmVkICAgICAgICAgICAgICAgKCAyMCApICAgICAgICAvKiBSZXNlcnZlZCAqLw0KLS8qIC0tLS0tLS0tIFBXTUNfQ01SIDogKFBXTUNfQ0ggT2Zmc2V0OiAweDApIFBXTUMgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NQUkUgICAgICAgICAgICAgKCAweEYgPDwgMCApICAvKiAoUFdNQ19DSCkgQ2hhbm5lbCBQcmUtc2NhbGVyIDogUFdNQ19DTEt4ICovDQotI2RlZmluZSAgICAgQVQ5MUNfUFdNQ19DUFJFX01DSyAgICAgKCAweDAgKSAgICAgICAvKiAoUFdNQ19DSCkgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19QV01DX0NQUkVfTUNLQSAgICAoIDB4QiApICAgICAgIC8qIChQV01DX0NIKSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1BXTUNfQ1BSRV9NQ0tCICAgICggMHhDICkgICAgICAgLyogKFBXTUNfQ0gpICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NBTEcgICAgICAgICAgICAgKCAweDEgPDwgOCApICAvKiAoUFdNQ19DSCkgQ2hhbm5lbCBBbGlnbm1lbnQgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ1BPTCAgICAgICAgICAgICAoIDB4MSA8PCA5ICkgIC8qIChQV01DX0NIKSBDaGFubmVsIFBvbGFyaXR5ICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NQRCAgICAgICAgICAgICAgKCAweDEgPDwgMTAgKSAvKiAoUFdNQ19DSCkgQ2hhbm5lbCBVcGRhdGUgUGVyaW9kICovDQotLyogLS0tLS0tLS0gUFdNQ19DRFRZUiA6IChQV01DX0NIIE9mZnNldDogMHg0KSBQV01DIENoYW5uZWwgRHV0eSBDeWNsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DRFRZICAgICAgICAgICAgICggMHgwIDw8IDAgKSAgLyogKFBXTUNfQ0gpIENoYW5uZWwgRHV0eSBDeWNsZSAqLw0KLS8qIC0tLS0tLS0tIFBXTUNfQ1BSRFIgOiAoUFdNQ19DSCBPZmZzZXQ6IDB4OCkgUFdNQyBDaGFubmVsIFBlcmlvZCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DUFJEICAgICAgICAgICAgICggMHgwIDw8IDAgKSAgLyogKFBXTUNfQ0gpIENoYW5uZWwgUGVyaW9kICovDQotLyogLS0tLS0tLS0gUFdNQ19DQ05UUiA6IChQV01DX0NIIE9mZnNldDogMHhjKSBQV01DIENoYW5uZWwgQ291bnRlciBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DQ05UICAgICAgICAgICAgICggMHgwIDw8IDAgKSAgLyogKFBXTUNfQ0gpIENoYW5uZWwgQ291bnRlciAqLw0KLS8qIC0tLS0tLS0tIFBXTUNfQ1VQRFIgOiAoUFdNQ19DSCBPZmZzZXQ6IDB4MTApIFBXTUMgQ2hhbm5lbCBVcGRhdGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ1VQRCAgICAgICAgICAgICAoIDB4MCA8PCAwICkgIC8qIChQV01DX0NIKSBDaGFubmVsIFVwZGF0ZSAqLw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgUFdNQyBDaGFubmVsIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19QV01DX0NIIHN0cnVjdHVyZSAqKioNCisjZGVmaW5lIFBXTUNfQ01SICAgICAgICAoIDApIC8vIENoYW5uZWwgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUFdNQ19DRFRZUiAgICAgICggNCkgLy8gQ2hhbm5lbCBEdXR5IEN5Y2xlIFJlZ2lzdGVyDQorI2RlZmluZSBQV01DX0NQUkRSICAgICAgKCA4KSAvLyBDaGFubmVsIFBlcmlvZCBSZWdpc3Rlcg0KKyNkZWZpbmUgUFdNQ19DQ05UUiAgICAgICgxMikgLy8gQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBQV01DX0NVUERSICAgICAgKDE2KSAvLyBDaGFubmVsIFVwZGF0ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUFdNQ19SZXNlcnZlZCAgICgyMCkgLy8gUmVzZXJ2ZWQNCisvLyAtLS0tLS0tLSBQV01DX0NNUiA6IChQV01DX0NIIE9mZnNldDogMHgwKSBQV01DIENoYW5uZWwgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ1BSRSAgICAgICAgICAgKDB4RiA8PCAgMCkgLy8gKFBXTUNfQ0gpIENoYW5uZWwgUHJlLXNjYWxlciA6IFBXTUNfQ0xLeA0KKyNkZWZpbmUgCUFUOTFDX1BXTUNfQ1BSRV9NQ0sgICAgICAgICAgICAgICAgICAoMHgwKSAvLyAoUFdNQ19DSCkgDQorI2RlZmluZSAJQVQ5MUNfUFdNQ19DUFJFX01DS0EgICAgICAgICAgICAgICAgICgweEIpIC8vIChQV01DX0NIKSANCisjZGVmaW5lIAlBVDkxQ19QV01DX0NQUkVfTUNLQiAgICAgICAgICAgICAgICAgKDB4QykgLy8gKFBXTUNfQ0gpIA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DQUxHICAgICAgICAgICAoMHgxIDw8ICA4KSAvLyAoUFdNQ19DSCkgQ2hhbm5lbCBBbGlnbm1lbnQNCisjZGVmaW5lIEFUOTFDX1BXTUNfQ1BPTCAgICAgICAgICAgKDB4MSA8PCAgOSkgLy8gKFBXTUNfQ0gpIENoYW5uZWwgUG9sYXJpdHkNCisjZGVmaW5lIEFUOTFDX1BXTUNfQ1BEICAgICAgICAgICAgKDB4MSA8PCAxMCkgLy8gKFBXTUNfQ0gpIENoYW5uZWwgVXBkYXRlIFBlcmlvZA0KKy8vIC0tLS0tLS0tIFBXTUNfQ0RUWVIgOiAoUFdNQ19DSCBPZmZzZXQ6IDB4NCkgUFdNQyBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QV01DX0NEVFkgICAgICAgICAgICgweDAgPDwgIDApIC8vIChQV01DX0NIKSBDaGFubmVsIER1dHkgQ3ljbGUNCisvLyAtLS0tLS0tLSBQV01DX0NQUkRSIDogKFBXTUNfQ0ggT2Zmc2V0OiAweDgpIFBXTUMgQ2hhbm5lbCBQZXJpb2QgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QV01DX0NQUkQgICAgICAgICAgICgweDAgPDwgIDApIC8vIChQV01DX0NIKSBDaGFubmVsIFBlcmlvZA0KKy8vIC0tLS0tLS0tIFBXTUNfQ0NOVFIgOiAoUFdNQ19DSCBPZmZzZXQ6IDB4YykgUFdNQyBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19QV01DX0NDTlQgICAgICAgICAgICgweDAgPDwgIDApIC8vIChQV01DX0NIKSBDaGFubmVsIENvdW50ZXINCisvLyAtLS0tLS0tLSBQV01DX0NVUERSIDogKFBXTUNfQ0ggT2Zmc2V0OiAweDEwKSBQV01DIENoYW5uZWwgVXBkYXRlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DVVBEICAgICAgICAgICAoMHgwIDw8ICAwKSAvLyAoUFdNQ19DSCkgQ2hhbm5lbCBVcGRhdGUNCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFB1bHNlIFdpZHRoIE1vZHVsYXRpb24gQ29udHJvbGxlciBJbnRlcmZhY2UgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfUFdNQyBzdHJ1Y3R1cmUgKioqICovDQotI2RlZmluZSBQV01DX01SICAgICAgICAgICAgICAgICAgICAoIDAgKSAgICAgICAgICAvKiBQV01DIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBXTUNfRU5BICAgICAgICAgICAgICAgICAgICggNCApICAgICAgICAgIC8qIFBXTUMgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBQV01DX0RJUyAgICAgICAgICAgICAgICAgICAoIDggKSAgICAgICAgICAvKiBQV01DIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBXTUNfU1IgICAgICAgICAgICAgICAgICAgICggMTIgKSAgICAgICAgIC8qIFBXTUMgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBQV01DX0lFUiAgICAgICAgICAgICAgICAgICAoIDE2ICkgICAgICAgICAvKiBQV01DIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBXTUNfSURSICAgICAgICAgICAgICAgICAgICggMjAgKSAgICAgICAgIC8qIFBXTUMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBXTUNfSU1SICAgICAgICAgICAgICAgICAgICggMjQgKSAgICAgICAgIC8qIFBXTUMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFBXTUNfSVNSICAgICAgICAgICAgICAgICAgICggMjggKSAgICAgICAgIC8qIFBXTUMgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgUFdNQ19WUiAgICAgICAgICAgICAgICAgICAgKCAyNTIgKSAgICAgICAgLyogUFdNQyBWZXJzaW9uIFJlZ2lzdGVyICovDQotI2RlZmluZSBQV01DX0NIICAgICAgICAgICAgICAgICAgICAoIDUxMiApICAgICAgICAvKiBQV01DIENoYW5uZWwgKi8NCi0vKiAtLS0tLS0tLSBQV01DX01SIDogKFBXTUMgT2Zmc2V0OiAweDApIFBXTUMgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19ESVZBICAgICAgICAgICAgKCAweEZGIDw8IDAgKSAgLyogKFBXTUMpIENMS0EgZGl2aWRlIGZhY3Rvci4gKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfUFJFQSAgICAgICAgICAgICggMHhGIDw8IDggKSAgIC8qIChQV01DKSBEaXZpZGVyIElucHV0IENsb2NrIFByZXNjYWxlciBBICovDQotI2RlZmluZSAgICAgQVQ5MUNfUFdNQ19QUkVBX01DSyAgICAoIDB4MCA8PCA4ICkgICAvKiAoUFdNQykgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfRElWQiAgICAgICAgICAgICggMHhGRiA8PCAxNiApIC8qIChQV01DKSBDTEtCIGRpdmlkZSBmYWN0b3IuICovDQotI2RlZmluZSBBVDkxQ19QV01DX1BSRUIgICAgICAgICAgICAoIDB4RiA8PCAyNCApICAvKiAoUFdNQykgRGl2aWRlciBJbnB1dCBDbG9jayBQcmVzY2FsZXIgQiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1BXTUNfUFJFQl9NQ0sgICAgKCAweDAgPDwgMjQgKSAgLyogKFBXTUMpICovDQotLyogLS0tLS0tLS0gUFdNQ19FTkEgOiAoUFdNQyBPZmZzZXQ6IDB4NCkgUFdNQyBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0hJRDAgICAgICAgICAgICggMHgxIDw8IDAgKSAgIC8qIChQV01DKSBDaGFubmVsIElEIDAgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0hJRDEgICAgICAgICAgICggMHgxIDw8IDEgKSAgIC8qIChQV01DKSBDaGFubmVsIElEIDEgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0hJRDIgICAgICAgICAgICggMHgxIDw8IDIgKSAgIC8qIChQV01DKSBDaGFubmVsIElEIDIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0hJRDMgICAgICAgICAgICggMHgxIDw8IDMgKSAgIC8qIChQV01DKSBDaGFubmVsIElEIDMgKi8NCi0vKiAtLS0tLS0tLSBQV01DX0RJUyA6IChQV01DIE9mZnNldDogMHg4KSBQV01DIERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBQV01DX1NSIDogKFBXTUMgT2Zmc2V0OiAweGMpIFBXTUMgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gUFdNQ19JRVIgOiAoUFdNQyBPZmZzZXQ6IDB4MTApIFBXTUMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFBXTUNfSURSIDogKFBXTUMgT2Zmc2V0OiAweDE0KSBQV01DIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gUFdNQ19JTVIgOiAoUFdNQyBPZmZzZXQ6IDB4MTgpIFBXTUMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBQV01DX0lTUiA6IChQV01DIE9mZnNldDogMHgxYykgUFdNQyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBQdWxzZSBXaWR0aCBNb2R1bGF0aW9uIENvbnRyb2xsZXIgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1BXTUMgc3RydWN0dXJlICoqKg0KKyNkZWZpbmUgUFdNQ19NUiAgICAgICAgICggMCkgLy8gUFdNQyBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBQV01DX0VOQSAgICAgICAgKCA0KSAvLyBQV01DIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgUFdNQ19ESVMgICAgICAgICggOCkgLy8gUFdNQyBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBQV01DX1NSICAgICAgICAgKDEyKSAvLyBQV01DIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgUFdNQ19JRVIgICAgICAgICgxNikgLy8gUFdNQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBQV01DX0lEUiAgICAgICAgKDIwKSAvLyBQV01DIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBQV01DX0lNUiAgICAgICAgKDI0KSAvLyBQV01DIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBQV01DX0lTUiAgICAgICAgKDI4KSAvLyBQV01DIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIFBXTUNfVlIgICAgICAgICAoMjUyKSAvLyBQV01DIFZlcnNpb24gUmVnaXN0ZXINCisjZGVmaW5lIFBXTUNfQ0ggICAgICAgICAoNTEyKSAvLyBQV01DIENoYW5uZWwNCisvLyAtLS0tLS0tLSBQV01DX01SIDogKFBXTUMgT2Zmc2V0OiAweDApIFBXTUMgTW9kZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BXTUNfRElWQSAgICAgICAgICAgKDB4RkYgPDwgIDApIC8vIChQV01DKSBDTEtBIGRpdmlkZSBmYWN0b3IuDQorI2RlZmluZSBBVDkxQ19QV01DX1BSRUEgICAgICAgICAgICgweEYgPDwgIDgpIC8vIChQV01DKSBEaXZpZGVyIElucHV0IENsb2NrIFByZXNjYWxlciBBDQorI2RlZmluZSAJQVQ5MUNfUFdNQ19QUkVBX01DSyAgICAgICAgICAgICAgICAgICgweDAgPDwgIDgpIC8vIChQV01DKSANCisjZGVmaW5lIEFUOTFDX1BXTUNfRElWQiAgICAgICAgICAgKDB4RkYgPDwgMTYpIC8vIChQV01DKSBDTEtCIGRpdmlkZSBmYWN0b3IuDQorI2RlZmluZSBBVDkxQ19QV01DX1BSRUIgICAgICAgICAgICgweEYgPDwgMjQpIC8vIChQV01DKSBEaXZpZGVyIElucHV0IENsb2NrIFByZXNjYWxlciBCDQorI2RlZmluZSAJQVQ5MUNfUFdNQ19QUkVCX01DSyAgICAgICAgICAgICAgICAgICgweDAgPDwgMjQpIC8vIChQV01DKSANCisvLyAtLS0tLS0tLSBQV01DX0VOQSA6IChQV01DIE9mZnNldDogMHg0KSBQV01DIEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0hJRDAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFBXTUMpIENoYW5uZWwgSUQgMA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSElEMSAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoUFdNQykgQ2hhbm5lbCBJRCAxDQorI2RlZmluZSBBVDkxQ19QV01DX0NISUQyICAgICAgICAgICgweDEgPDwgIDIpIC8vIChQV01DKSBDaGFubmVsIElEIDINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0hJRDMgICAgICAgICAgKDB4MSA8PCAgMykgLy8gKFBXTUMpIENoYW5uZWwgSUQgMw0KKy8vIC0tLS0tLS0tIFBXTUNfRElTIDogKFBXTUMgT2Zmc2V0OiAweDgpIFBXTUMgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBQV01DX1NSIDogKFBXTUMgT2Zmc2V0OiAweGMpIFBXTUMgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFBXTUNfSUVSIDogKFBXTUMgT2Zmc2V0OiAweDEwKSBQV01DIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUFdNQ19JRFIgOiAoUFdNQyBPZmZzZXQ6IDB4MTQpIFBXTUMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUFdNQ19JTVIgOiAoUFdNQyBPZmZzZXQ6IDB4MTgpIFBXTUMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gUFdNQ19JU1IgOiAoUFdNQyBPZmZzZXQ6IDB4MWMpIFBXTUMgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFVTQiBEZXZpY2UgSW50ZXJmYWNlICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1VEUCBzdHJ1Y3R1cmUgKioqICovDQotI2RlZmluZSBVRFBfTlVNICAgICAgICAgICAgICAoIDAgKSAgICAgICAgICAvKiBGcmFtZSBOdW1iZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFVEUF9HTEJTVEFURSAgICAgICAgICggNCApICAgICAgICAgIC8qIEdsb2JhbCBTdGF0ZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVURQX0ZBRERSICAgICAgICAgICAgKCA4ICkgICAgICAgICAgLyogRnVuY3Rpb24gQWRkcmVzcyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVURQX0lFUiAgICAgICAgICAgICAgKCAxNiApICAgICAgICAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVURQX0lEUiAgICAgICAgICAgICAgKCAyMCApICAgICAgICAgLyogSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFVEUF9JTVIgICAgICAgICAgICAgICggMjQgKSAgICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBVRFBfSVNSICAgICAgICAgICAgICAoIDI4ICkgICAgICAgICAvKiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBVRFBfSUNSICAgICAgICAgICAgICAoIDMyICkgICAgICAgICAvKiBJbnRlcnJ1cHQgQ2xlYXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFVEUF9SU1RFUCAgICAgICAgICAgICggNDAgKSAgICAgICAgIC8qIFJlc2V0IEVuZHBvaW50IFJlZ2lzdGVyICovDQotI2RlZmluZSBVRFBfQ1NSICAgICAgICAgICAgICAoIDQ4ICkgICAgICAgICAvKiBFbmRwb2ludCBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFVEUF9GRFIgICAgICAgICAgICAgICggODAgKSAgICAgICAgIC8qIEVuZHBvaW50IEZJRk8gRGF0YSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVURQX1RYVkMgICAgICAgICAgICAgKCAxMTYgKSAgICAgICAgLyogVHJhbnNjZWl2ZXIgQ29udHJvbCBSZWdpc3RlciAqLw0KLS8qIC0tLS0tLS0tIFVEUF9GUk1fTlVNIDogKFVEUCBPZmZzZXQ6IDB4MCkgVVNCIEZyYW1lIE51bWJlciBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0ZSTV9OVU0gICAgKCAweDdGRiA8PCAwICkgLyogKFVEUCkgRnJhbWUgTnVtYmVyIGFzIERlZmluZWQgaW4gdGhlIFBhY2tldCBGaWVsZCBGb3JtYXRzICovDQotI2RlZmluZSBBVDkxQ19VRFBfRlJNX0VSUiAgICAoIDB4MSA8PCAxNiApICAvKiAoVURQKSBGcmFtZSBFcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0ZSTV9PSyAgICAgKCAweDEgPDwgMTcgKSAgLyogKFVEUCkgRnJhbWUgT0sgKi8NCi0vKiAtLS0tLS0tLSBVRFBfR0xCX1NUQVRFIDogKFVEUCBPZmZzZXQ6IDB4NCkgVVNCIEdsb2JhbCBTdGF0ZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0ZBRERFTiAgICAgKCAweDEgPDwgMCApICAgLyogKFVEUCkgRnVuY3Rpb24gQWRkcmVzcyBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9DT05GRyAgICAgICggMHgxIDw8IDEgKSAgIC8qIChVRFApIENvbmZpZ3VyZWQgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FU1IgICAgICAgICggMHgxIDw8IDIgKSAgIC8qIChVRFApIEVuYWJsZSBTZW5kIFJlc3VtZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX1JTTUlOUFIgICAgKCAweDEgPDwgMyApICAgLyogKFVEUCkgQSBSZXN1bWUgSGFzIEJlZW4gU2VudCB0byB0aGUgSG9zdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX1JNV1VQRSAgICAgKCAweDEgPDwgNCApICAgLyogKFVEUCkgUmVtb3RlIFdha2UgVXAgRW5hYmxlICovDQotLyogLS0tLS0tLS0gVURQX0ZBRERSIDogKFVEUCBPZmZzZXQ6IDB4OCkgVVNCIEZ1bmN0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9GQUREICAgICAgICggMHhGRiA8PCAwICkgIC8qIChVRFApIEZ1bmN0aW9uIEFkZHJlc3MgVmFsdWUgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9GRU4gICAgICAgICggMHgxIDw8IDggKSAgIC8qIChVRFApIEZ1bmN0aW9uIEVuYWJsZSAqLw0KLS8qIC0tLS0tLS0tIFVEUF9JRVIgOiAoVURQIE9mZnNldDogMHgxMCkgVVNCIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUElOVDAgICAgICggMHgxIDw8IDAgKSAgIC8qIChVRFApIEVuZHBvaW50IDAgSW50ZXJydXB0ICovDQotI2RlZmluZSBBVDkxQ19VRFBfRVBJTlQxICAgICAoIDB4MSA8PCAxICkgICAvKiAoVURQKSBFbmRwb2ludCAwIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UMiAgICAgKCAweDEgPDwgMiApICAgLyogKFVEUCkgRW5kcG9pbnQgMiBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUElOVDMgICAgICggMHgxIDw8IDMgKSAgIC8qIChVRFApIEVuZHBvaW50IDMgSW50ZXJydXB0ICovDQotI2RlZmluZSBBVDkxQ19VRFBfRVBJTlQ0ICAgICAoIDB4MSA8PCA0ICkgICAvKiAoVURQKSBFbmRwb2ludCA0IEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UNSAgICAgKCAweDEgPDwgNSApICAgLyogKFVEUCkgRW5kcG9pbnQgNSBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9SWFNVU1AgICAgICggMHgxIDw8IDggKSAgIC8qIChVRFApIFVTQiBTdXNwZW5kIEludGVycnVwdCAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX1JYUlNNICAgICAgKCAweDEgPDwgOSApICAgLyogKFVEUCkgVVNCIFJlc3VtZSBJbnRlcnJ1cHQgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FWFRSU00gICAgICggMHgxIDw8IDEwICkgIC8qIChVRFApIFVTQiBFeHRlcm5hbCBSZXN1bWUgSW50ZXJydXB0ICovDQotI2RlZmluZSBBVDkxQ19VRFBfU09GSU5UICAgICAoIDB4MSA8PCAxMSApICAvKiAoVURQKSBVU0IgU3RhcnQgT2YgZnJhbWUgSW50ZXJydXB0ICovDQotI2RlZmluZSBBVDkxQ19VRFBfV0FLRVVQICAgICAoIDB4MSA8PCAxMyApICAvKiAoVURQKSBVU0IgUmVzdW1lIEludGVycnVwdCAqLw0KLS8qIC0tLS0tLS0tIFVEUF9JRFIgOiAoVURQIE9mZnNldDogMHgxNCkgVVNCIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gVURQX0lNUiA6IChVRFAgT2Zmc2V0OiAweDE4KSBVU0IgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBVRFBfSVNSIDogKFVEUCBPZmZzZXQ6IDB4MWMpIFVTQiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19VRFBfRU5EQlVTUkVTICAgICAgICAgICAgICAoIDB4MSA8PCAxMiApIC8qIChVRFApIFVTQiBFbmQgT2YgQnVzIFJlc2V0IEludGVycnVwdCAqLw0KLS8qIC0tLS0tLS0tIFVEUF9JQ1IgOiAoVURQIE9mZnNldDogMHgyMCkgVVNCIEludGVycnVwdCBDbGVhciBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIFVEUF9SU1RfRVAgOiAoVURQIE9mZnNldDogMHgyOCkgVVNCIFJlc2V0IEVuZHBvaW50IFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19VRFBfRVAwICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAwICkgICAgLyogKFVEUCkgUmVzZXQgRW5kcG9pbnQgMCAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0VQMSAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMSApICAgIC8qIChVRFApIFJlc2V0IEVuZHBvaW50IDEgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUDIgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDIgKSAgICAvKiAoVURQKSBSZXNldCBFbmRwb2ludCAyICovDQotI2RlZmluZSBBVDkxQ19VRFBfRVAzICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAzICkgICAgLyogKFVEUCkgUmVzZXQgRW5kcG9pbnQgMyAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0VQNCAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgNCApICAgIC8qIChVRFApIFJlc2V0IEVuZHBvaW50IDQgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUDUgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDUgKSAgICAvKiAoVURQKSBSZXNldCBFbmRwb2ludCA1ICovDQotLyogLS0tLS0tLS0gVURQX0NTUiA6IChVRFAgT2Zmc2V0OiAweDMwKSBVU0IgRW5kcG9pbnQgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19VRFBfVFhDT01QICAgICAgICAgICAgICAgICAoIDB4MSA8PCAwICkgICAgLyogKFVEUCkgR2VuZXJhdGVzIGFuIElOIHBhY2tldCB3aXRoIGRhdGEgcHJldmlvdXNseSB3cml0dGVuIGluIHRoZSBEUFIgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9SWF9EQVRBX0JLMCAgICAgICAgICAgICggMHgxIDw8IDEgKSAgICAvKiAoVURQKSBSZWNlaXZlIERhdGEgQmFuayAwICovDQotI2RlZmluZSBBVDkxQ19VRFBfUlhTRVRVUCAgICAgICAgICAgICAgICAoIDB4MSA8PCAyICkgICAgLyogKFVEUCkgU2VuZHMgU1RBTEwgdG8gdGhlIEhvc3QgKENvbnRyb2wgZW5kcG9pbnRzKSAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0lTT0VSUk9SICAgICAgICAgICAgICAgKCAweDEgPDwgMyApICAgIC8qIChVRFApIElzb2Nocm9ub3VzIGVycm9yIChJc29jaHJvbm91cyBlbmRwb2ludHMpICovDQotI2RlZmluZSBBVDkxQ19VRFBfVFhQS1RSRFkgICAgICAgICAgICAgICAoIDB4MSA8PCA0ICkgICAgLyogKFVEUCkgVHJhbnNtaXQgUGFja2V0IFJlYWR5ICovDQotI2RlZmluZSBBVDkxQ19VRFBfRk9SQ0VTVEFMTCAgICAgICAgICAgICAoIDB4MSA8PCA1ICkgICAgLyogKFVEUCkgRm9yY2UgU3RhbGwgKHVzZWQgYnkgQ29udHJvbCwgQnVsayBhbmQgSXNvY2hyb25vdXMgZW5kcG9pbnRzKS4gKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9SWF9EQVRBX0JLMSAgICAgICAgICAgICggMHgxIDw8IDYgKSAgICAvKiAoVURQKSBSZWNlaXZlIERhdGEgQmFuayAxIChvbmx5IHVzZWQgYnkgZW5kcG9pbnRzIHdpdGggcGluZy1wb25nIGF0dHJpYnV0ZXMpLiAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0RJUiAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgNyApICAgIC8qIChVRFApIFRyYW5zZmVyIERpcmVjdGlvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0VQVFlQRSAgICAgICAgICAgICAgICAgKCAweDcgPDwgOCApICAgIC8qIChVRFApIEVuZHBvaW50IHR5cGUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VRFBfRVBUWVBFX0NUUkwgICAgICAgICggMHgwIDw8IDggKSAgICAvKiAoVURQKSBDb250cm9sICovDQotI2RlZmluZSAgICAgQVQ5MUNfVURQX0VQVFlQRV9JU09fT1VUICAgICAoIDB4MSA8PCA4ICkgICAgLyogKFVEUCkgSXNvY2hyb25vdXMgT1VUICovDQotI2RlZmluZSAgICAgQVQ5MUNfVURQX0VQVFlQRV9CVUxLX09VVCAgICAoIDB4MiA8PCA4ICkgICAgLyogKFVEUCkgQnVsayBPVVQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VRFBfRVBUWVBFX0lOVF9PVVQgICAgICggMHgzIDw8IDggKSAgICAvKiAoVURQKSBJbnRlcnJ1cHQgT1VUICovDQotI2RlZmluZSAgICAgQVQ5MUNfVURQX0VQVFlQRV9JU09fSU4gICAgICAoIDB4NSA8PCA4ICkgICAgLyogKFVEUCkgSXNvY2hyb25vdXMgSU4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19VRFBfRVBUWVBFX0JVTEtfSU4gICAgICggMHg2IDw8IDggKSAgICAvKiAoVURQKSBCdWxrIElOICovDQotI2RlZmluZSAgICAgQVQ5MUNfVURQX0VQVFlQRV9JTlRfSU4gICAgICAoIDB4NyA8PCA4ICkgICAgLyogKFVEUCkgSW50ZXJydXB0IElOICovDQotI2RlZmluZSBBVDkxQ19VRFBfRFRHTEUgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxMSApICAgLyogKFVEUCkgRGF0YSBUb2dnbGUgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9FUEVEUyAgICAgICAgICAgICAgICAgICggMHgxIDw8IDE1ICkgICAvKiAoVURQKSBFbmRwb2ludCBFbmFibGUgRGlzYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX1JYQllURUNOVCAgICAgICAgICAgICAgKCAweDdGRiA8PCAxNiApIC8qIChVRFApIE51bWJlciBPZiBCeXRlcyBBdmFpbGFibGUgaW4gdGhlIEZJRk8gKi8NCi0vKiAtLS0tLS0tLSBVRFBfVFhWQyA6IChVRFAgT2Zmc2V0OiAweDc0KSBUcmFuc2NlaXZlciBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19VRFBfVFhWRElTICAgICAgICAgICAgICAgICAoIDB4MSA8PCA4ICkgICAgLyogKFVEUCkgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9QVU9OICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDkgKSAgICAvKiAoVURQKSBQdWxsLXVwIE9OICovDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBVU0IgRGV2aWNlIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19VRFAgc3RydWN0dXJlICoqKg0KKyNkZWZpbmUgVURQX05VTSAgICAgICAgICggMCkgLy8gRnJhbWUgTnVtYmVyIFJlZ2lzdGVyDQorI2RlZmluZSBVRFBfR0xCU1RBVEUgICAgKCA0KSAvLyBHbG9iYWwgU3RhdGUgUmVnaXN0ZXINCisjZGVmaW5lIFVEUF9GQUREUiAgICAgICAoIDgpIC8vIEZ1bmN0aW9uIEFkZHJlc3MgUmVnaXN0ZXINCisjZGVmaW5lIFVEUF9JRVIgICAgICAgICAoMTYpIC8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIFVEUF9JRFIgICAgICAgICAoMjApIC8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBVRFBfSU1SICAgICAgICAgKDI0KSAvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgVURQX0lTUiAgICAgICAgICgyOCkgLy8gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgVURQX0lDUiAgICAgICAgICgzMikgLy8gSW50ZXJydXB0IENsZWFyIFJlZ2lzdGVyDQorI2RlZmluZSBVRFBfUlNURVAgICAgICAgKDQwKSAvLyBSZXNldCBFbmRwb2ludCBSZWdpc3Rlcg0KKyNkZWZpbmUgVURQX0NTUiAgICAgICAgICg0OCkgLy8gRW5kcG9pbnQgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBVRFBfRkRSICAgICAgICAgKDgwKSAvLyBFbmRwb2ludCBGSUZPIERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIFVEUF9UWFZDICAgICAgICAoMTE2KSAvLyBUcmFuc2NlaXZlciBDb250cm9sIFJlZ2lzdGVyDQorLy8gLS0tLS0tLS0gVURQX0ZSTV9OVU0gOiAoVURQIE9mZnNldDogMHgwKSBVU0IgRnJhbWUgTnVtYmVyIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZSTV9OVU0gICAgICAgICAoMHg3RkYgPDwgIDApIC8vIChVRFApIEZyYW1lIE51bWJlciBhcyBEZWZpbmVkIGluIHRoZSBQYWNrZXQgRmllbGQgRm9ybWF0cw0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZSTV9FUlIgICAgICAgICAoMHgxIDw8IDE2KSAvLyAoVURQKSBGcmFtZSBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZSTV9PSyAgICAgICAgICAoMHgxIDw8IDE3KSAvLyAoVURQKSBGcmFtZSBPSw0KKy8vIC0tLS0tLS0tIFVEUF9HTEJfU1RBVEUgOiAoVURQIE9mZnNldDogMHg0KSBVU0IgR2xvYmFsIFN0YXRlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZBRERFTiAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoVURQKSBGdW5jdGlvbiBBZGRyZXNzIEVuYWJsZQ0KKyNkZWZpbmUgQVQ5MUNfVURQX0NPTkZHICAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoVURQKSBDb25maWd1cmVkDQorI2RlZmluZSBBVDkxQ19VRFBfRVNSICAgICAgICAgICAgICgweDEgPDwgIDIpIC8vIChVRFApIEVuYWJsZSBTZW5kIFJlc3VtZQ0KKyNkZWZpbmUgQVQ5MUNfVURQX1JTTUlOUFIgICAgICAgICAoMHgxIDw8ICAzKSAvLyAoVURQKSBBIFJlc3VtZSBIYXMgQmVlbiBTZW50IHRvIHRoZSBIb3N0DQorI2RlZmluZSBBVDkxQ19VRFBfUk1XVVBFICAgICAgICAgICgweDEgPDwgIDQpIC8vIChVRFApIFJlbW90ZSBXYWtlIFVwIEVuYWJsZQ0KKy8vIC0tLS0tLS0tIFVEUF9GQUREUiA6IChVRFAgT2Zmc2V0OiAweDgpIFVTQiBGdW5jdGlvbiBBZGRyZXNzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZBREQgICAgICAgICAgICAoMHhGRiA8PCAgMCkgLy8gKFVEUCkgRnVuY3Rpb24gQWRkcmVzcyBWYWx1ZQ0KKyNkZWZpbmUgQVQ5MUNfVURQX0ZFTiAgICAgICAgICAgICAoMHgxIDw8ICA4KSAvLyAoVURQKSBGdW5jdGlvbiBFbmFibGUNCisvLyAtLS0tLS0tLSBVRFBfSUVSIDogKFVEUCBPZmZzZXQ6IDB4MTApIFVTQiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UMCAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoVURQKSBFbmRwb2ludCAwIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UMSAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoVURQKSBFbmRwb2ludCAwIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UMiAgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoVURQKSBFbmRwb2ludCAyIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UMyAgICAgICAgICAoMHgxIDw8ICAzKSAvLyAoVURQKSBFbmRwb2ludCAzIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UNCAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoVURQKSBFbmRwb2ludCA0IEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQSU5UNSAgICAgICAgICAoMHgxIDw8ICA1KSAvLyAoVURQKSBFbmRwb2ludCA1IEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX1JYU1VTUCAgICAgICAgICAoMHgxIDw8ICA4KSAvLyAoVURQKSBVU0IgU3VzcGVuZCBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9SWFJTTSAgICAgICAgICAgKDB4MSA8PCAgOSkgLy8gKFVEUCkgVVNCIFJlc3VtZSBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9FWFRSU00gICAgICAgICAgKDB4MSA8PCAxMCkgLy8gKFVEUCkgVVNCIEV4dGVybmFsIFJlc3VtZSBJbnRlcnJ1cHQNCisjZGVmaW5lIEFUOTFDX1VEUF9TT0ZJTlQgICAgICAgICAgKDB4MSA8PCAxMSkgLy8gKFVEUCkgVVNCIFN0YXJ0IE9mIGZyYW1lIEludGVycnVwdA0KKyNkZWZpbmUgQVQ5MUNfVURQX1dBS0VVUCAgICAgICAgICAoMHgxIDw8IDEzKSAvLyAoVURQKSBVU0IgUmVzdW1lIEludGVycnVwdA0KKy8vIC0tLS0tLS0tIFVEUF9JRFIgOiAoVURQIE9mZnNldDogMHgxNCkgVVNCIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFVEUF9JTVIgOiAoVURQIE9mZnNldDogMHgxOCkgVVNCIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFVEUF9JU1IgOiAoVURQIE9mZnNldDogMHgxYykgVVNCIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VRFBfRU5EQlVTUkVTICAgICAgICgweDEgPDwgMTIpIC8vIChVRFApIFVTQiBFbmQgT2YgQnVzIFJlc2V0IEludGVycnVwdA0KKy8vIC0tLS0tLS0tIFVEUF9JQ1IgOiAoVURQIE9mZnNldDogMHgyMCkgVVNCIEludGVycnVwdCBDbGVhciBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBVRFBfUlNUX0VQIDogKFVEUCBPZmZzZXQ6IDB4MjgpIFVTQiBSZXNldCBFbmRwb2ludCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VEUF9FUDAgICAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFVEUCkgUmVzZXQgRW5kcG9pbnQgMA0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQMSAgICAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoVURQKSBSZXNldCBFbmRwb2ludCAxDQorI2RlZmluZSBBVDkxQ19VRFBfRVAyICAgICAgICAgICAgICgweDEgPDwgIDIpIC8vIChVRFApIFJlc2V0IEVuZHBvaW50IDINCisjZGVmaW5lIEFUOTFDX1VEUF9FUDMgICAgICAgICAgICAgKDB4MSA8PCAgMykgLy8gKFVEUCkgUmVzZXQgRW5kcG9pbnQgMw0KKyNkZWZpbmUgQVQ5MUNfVURQX0VQNCAgICAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoVURQKSBSZXNldCBFbmRwb2ludCA0DQorI2RlZmluZSBBVDkxQ19VRFBfRVA1ICAgICAgICAgICAgICgweDEgPDwgIDUpIC8vIChVRFApIFJlc2V0IEVuZHBvaW50IDUNCisvLyAtLS0tLS0tLSBVRFBfQ1NSIDogKFVEUCBPZmZzZXQ6IDB4MzApIFVTQiBFbmRwb2ludCBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19VRFBfVFhDT01QICAgICAgICAgICgweDEgPDwgIDApIC8vIChVRFApIEdlbmVyYXRlcyBhbiBJTiBwYWNrZXQgd2l0aCBkYXRhIHByZXZpb3VzbHkgd3JpdHRlbiBpbiB0aGUgRFBSDQorI2RlZmluZSBBVDkxQ19VRFBfUlhfREFUQV9CSzAgICAgICgweDEgPDwgIDEpIC8vIChVRFApIFJlY2VpdmUgRGF0YSBCYW5rIDANCisjZGVmaW5lIEFUOTFDX1VEUF9SWFNFVFVQICAgICAgICAgKDB4MSA8PCAgMikgLy8gKFVEUCkgU2VuZHMgU1RBTEwgdG8gdGhlIEhvc3QgKENvbnRyb2wgZW5kcG9pbnRzKQ0KKyNkZWZpbmUgQVQ5MUNfVURQX0lTT0VSUk9SICAgICAgICAoMHgxIDw8ICAzKSAvLyAoVURQKSBJc29jaHJvbm91cyBlcnJvciAoSXNvY2hyb25vdXMgZW5kcG9pbnRzKQ0KKyNkZWZpbmUgQVQ5MUNfVURQX1RYUEtUUkRZICAgICAgICAoMHgxIDw8ICA0KSAvLyAoVURQKSBUcmFuc21pdCBQYWNrZXQgUmVhZHkNCisjZGVmaW5lIEFUOTFDX1VEUF9GT1JDRVNUQUxMICAgICAgKDB4MSA8PCAgNSkgLy8gKFVEUCkgRm9yY2UgU3RhbGwgKHVzZWQgYnkgQ29udHJvbCwgQnVsayBhbmQgSXNvY2hyb25vdXMgZW5kcG9pbnRzKS4NCisjZGVmaW5lIEFUOTFDX1VEUF9SWF9EQVRBX0JLMSAgICAgKDB4MSA8PCAgNikgLy8gKFVEUCkgUmVjZWl2ZSBEYXRhIEJhbmsgMSAob25seSB1c2VkIGJ5IGVuZHBvaW50cyB3aXRoIHBpbmctcG9uZyBhdHRyaWJ1dGVzKS4NCisjZGVmaW5lIEFUOTFDX1VEUF9ESVIgICAgICAgICAgICAgKDB4MSA8PCAgNykgLy8gKFVEUCkgVHJhbnNmZXIgRGlyZWN0aW9uDQorI2RlZmluZSBBVDkxQ19VRFBfRVBUWVBFICAgICAgICAgICgweDcgPDwgIDgpIC8vIChVRFApIEVuZHBvaW50IHR5cGUNCisjZGVmaW5lIAlBVDkxQ19VRFBfRVBUWVBFX0NUUkwgICAgICAgICAgICAgICAgICgweDAgPDwgIDgpIC8vIChVRFApIENvbnRyb2wNCisjZGVmaW5lIAlBVDkxQ19VRFBfRVBUWVBFX0lTT19PVVQgICAgICAgICAgICAgICgweDEgPDwgIDgpIC8vIChVRFApIElzb2Nocm9ub3VzIE9VVA0KKyNkZWZpbmUgCUFUOTFDX1VEUF9FUFRZUEVfQlVMS19PVVQgICAgICAgICAgICAgKDB4MiA8PCAgOCkgLy8gKFVEUCkgQnVsayBPVVQNCisjZGVmaW5lIAlBVDkxQ19VRFBfRVBUWVBFX0lOVF9PVVQgICAgICAgICAgICAgICgweDMgPDwgIDgpIC8vIChVRFApIEludGVycnVwdCBPVVQNCisjZGVmaW5lIAlBVDkxQ19VRFBfRVBUWVBFX0lTT19JTiAgICAgICAgICAgICAgICgweDUgPDwgIDgpIC8vIChVRFApIElzb2Nocm9ub3VzIElODQorI2RlZmluZSAJQVQ5MUNfVURQX0VQVFlQRV9CVUxLX0lOICAgICAgICAgICAgICAoMHg2IDw8ICA4KSAvLyAoVURQKSBCdWxrIElODQorI2RlZmluZSAJQVQ5MUNfVURQX0VQVFlQRV9JTlRfSU4gICAgICAgICAgICAgICAoMHg3IDw8ICA4KSAvLyAoVURQKSBJbnRlcnJ1cHQgSU4NCisjZGVmaW5lIEFUOTFDX1VEUF9EVEdMRSAgICAgICAgICAgKDB4MSA8PCAxMSkgLy8gKFVEUCkgRGF0YSBUb2dnbGUNCisjZGVmaW5lIEFUOTFDX1VEUF9FUEVEUyAgICAgICAgICAgKDB4MSA8PCAxNSkgLy8gKFVEUCkgRW5kcG9pbnQgRW5hYmxlIERpc2FibGUNCisjZGVmaW5lIEFUOTFDX1VEUF9SWEJZVEVDTlQgICAgICAgKDB4N0ZGIDw8IDE2KSAvLyAoVURQKSBOdW1iZXIgT2YgQnl0ZXMgQXZhaWxhYmxlIGluIHRoZSBGSUZPDQorLy8gLS0tLS0tLS0gVURQX1RYVkMgOiAoVURQIE9mZnNldDogMHg3NCkgVHJhbnNjZWl2ZXIgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1VEUF9UWFZESVMgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKFVEUCkgDQorI2RlZmluZSBBVDkxQ19VRFBfUFVPTiAgICAgICAgICAgICgweDEgPDwgIDkpIC8vIChVRFApIFB1bGwtdXAgT04NCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFRpbWVyIENvdW50ZXIgQ2hhbm5lbCBJbnRlcmZhY2UgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfVEMgc3RydWN0dXJlICoqKiAqLw0KLSNkZWZpbmUgVENfQ0NSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDAgKSAgICAgICAgIC8qIENoYW5uZWwgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVENfQ01SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDQgKSAgICAgICAgIC8qIENoYW5uZWwgTW9kZSBSZWdpc3RlciAoQ2FwdHVyZSBNb2RlIC8gV2F2ZWZvcm0gTW9kZSkgKi8NCi0jZGVmaW5lIFRDX0NWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAxNiApICAgICAgICAvKiBDb3VudGVyIFZhbHVlICovDQotI2RlZmluZSBUQ19SQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMjAgKSAgICAgICAgLyogUmVnaXN0ZXIgQSAqLw0KLSNkZWZpbmUgVENfUkIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDI0ICkgICAgICAgIC8qIFJlZ2lzdGVyIEIgKi8NCi0jZGVmaW5lIFRDX1JDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAyOCApICAgICAgICAvKiBSZWdpc3RlciBDICovDQotI2RlZmluZSBUQ19TUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMzIgKSAgICAgICAgLyogU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBUQ19JRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMzYgKSAgICAgICAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVENfSURSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDQwICkgICAgICAgIC8qIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBUQ19JTVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggNDQgKSAgICAgICAgLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0vKiAtLS0tLS0tLSBUQ19DQ1IgOiAoVEMgT2Zmc2V0OiAweDApIFRDIENoYW5uZWwgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQ0xLRU4gICAgICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAwICkgIC8qIChUQykgQ291bnRlciBDbG9jayBFbmFibGUgQ29tbWFuZCAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQ0xLRElTICAgICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxICkgIC8qIChUQykgQ291bnRlciBDbG9jayBEaXNhYmxlIENvbW1hbmQgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX1NXVFJHICAgICAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMiApICAvKiAoVEMpIFNvZnR3YXJlIFRyaWdnZXIgQ29tbWFuZCAqLw0KLS8qIC0tLS0tLS0tIFRDX0NNUiA6IChUQyBPZmZzZXQ6IDB4NCkgVEMgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyOiBDYXB0dXJlIE1vZGUgLyBXYXZlZm9ybSBNb2RlIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19UQ19DTEtTICAgICAgICAgICAgICAgICAgICAgICAgICggMHg3IDw8IDAgKSAgLyogKFRDKSBDbG9jayBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjFfQ0xPQ0sgICAgKCAweDAgKSAgICAgICAvKiAoVEMpIENsb2NrIHNlbGVjdGVkOiBUSU1FUl9ESVYxX0NMT0NLICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQ0xLU19USU1FUl9ESVYyX0NMT0NLICAgICggMHgxICkgICAgICAgLyogKFRDKSBDbG9jayBzZWxlY3RlZDogVElNRVJfRElWMl9DTE9DSyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0NMS1NfVElNRVJfRElWM19DTE9DSyAgICAoIDB4MiApICAgICAgIC8qIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFRJTUVSX0RJVjNfQ0xPQ0sgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19DTEtTX1RJTUVSX0RJVjRfQ0xPQ0sgICAgKCAweDMgKSAgICAgICAvKiAoVEMpIENsb2NrIHNlbGVjdGVkOiBUSU1FUl9ESVY0X0NMT0NLICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQ0xLU19USU1FUl9ESVY1X0NMT0NLICAgICggMHg0ICkgICAgICAgLyogKFRDKSBDbG9jayBzZWxlY3RlZDogVElNRVJfRElWNV9DTE9DSyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0NMS1NfWEMwICAgICAgICAgICAgICAgICAoIDB4NSApICAgICAgIC8qIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFhDMCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0NMS1NfWEMxICAgICAgICAgICAgICAgICAoIDB4NiApICAgICAgIC8qIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFhDMSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0NMS1NfWEMyICAgICAgICAgICAgICAgICAoIDB4NyApICAgICAgIC8qIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFhDMiAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQ0xLSSAgICAgICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAzICkgIC8qIChUQykgQ2xvY2sgSW52ZXJ0ICovDQotI2RlZmluZSBBVDkxQ19UQ19CVVJTVCAgICAgICAgICAgICAgICAgICAgICAgICggMHgzIDw8IDQgKSAgLyogKFRDKSBCdXJzdCBTaWduYWwgU2VsZWN0aW9uICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQlVSU1RfTk9ORSAgICAgICAgICAgICAgICggMHgwIDw8IDQgKSAgLyogKFRDKSBUaGUgY2xvY2sgaXMgbm90IGdhdGVkIGJ5IGFuIGV4dGVybmFsIHNpZ25hbCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JVUlNUX1hDMCAgICAgICAgICAgICAgICAoIDB4MSA8PCA0ICkgIC8qIChUQykgWEMwIGlzIEFORGVkIHdpdGggdGhlIHNlbGVjdGVkIGNsb2NrICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQlVSU1RfWEMxICAgICAgICAgICAgICAgICggMHgyIDw8IDQgKSAgLyogKFRDKSBYQzEgaXMgQU5EZWQgd2l0aCB0aGUgc2VsZWN0ZWQgY2xvY2sgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19CVVJTVF9YQzIgICAgICAgICAgICAgICAgKCAweDMgPDwgNCApICAvKiAoVEMpIFhDMiBpcyBBTkRlZCB3aXRoIHRoZSBzZWxlY3RlZCBjbG9jayAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQ1BDU1RPUCAgICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCA2ICkgIC8qIChUQykgQ291bnRlciBDbG9jayBTdG9wcGVkIHdpdGggUkMgQ29tcGFyZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfTERCU1RPUCAgICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCA2ICkgIC8qIChUQykgQ291bnRlciBDbG9jayBTdG9wcGVkIHdpdGggUkIgTG9hZGluZyAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQ1BDRElTICAgICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCA3ICkgIC8qIChUQykgQ291bnRlciBDbG9jayBEaXNhYmxlIHdpdGggUkMgQ29tcGFyZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfTERCRElTICAgICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCA3ICkgIC8qIChUQykgQ291bnRlciBDbG9jayBEaXNhYmxlZCB3aXRoIFJCIExvYWRpbmcgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0VUUkdFREcgICAgICAgICAgICAgICAgICAgICAgKCAweDMgPDwgOCApICAvKiAoVEMpIEV4dGVybmFsIFRyaWdnZXIgRWRnZSBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19FVFJHRURHX05PTkUgICAgICAgICAgICAgKCAweDAgPDwgOCApICAvKiAoVEMpIEVkZ2U6IE5vbmUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19FVFJHRURHX1JJU0lORyAgICAgICAgICAgKCAweDEgPDwgOCApICAvKiAoVEMpIEVkZ2U6IHJpc2luZyBlZGdlICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfRVRSR0VER19GQUxMSU5HICAgICAgICAgICggMHgyIDw8IDggKSAgLyogKFRDKSBFZGdlOiBmYWxsaW5nIGVkZ2UgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19FVFJHRURHX0JPVEggICAgICAgICAgICAgKCAweDMgPDwgOCApICAvKiAoVEMpIEVkZ2U6IGVhY2ggZWRnZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfRUVWVEVERyAgICAgICAgICAgICAgICAgICAgICAoIDB4MyA8PCA4ICkgIC8qIChUQykgRXh0ZXJuYWwgRXZlbnQgRWRnZSBTZWxlY3Rpb24gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19FRVZURURHX05PTkUgICAgICAgICAgICAgKCAweDAgPDwgOCApICAvKiAoVEMpIEVkZ2U6IE5vbmUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19FRVZURURHX1JJU0lORyAgICAgICAgICAgKCAweDEgPDwgOCApICAvKiAoVEMpIEVkZ2U6IHJpc2luZyBlZGdlICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfRUVWVEVER19GQUxMSU5HICAgICAgICAgICggMHgyIDw8IDggKSAgLyogKFRDKSBFZGdlOiBmYWxsaW5nIGVkZ2UgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19FRVZURURHX0JPVEggICAgICAgICAgICAgKCAweDMgPDwgOCApICAvKiAoVEMpIEVkZ2U6IGVhY2ggZWRnZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfRUVWVCAgICAgICAgICAgICAgICAgICAgICAgICAoIDB4MyA8PCAxMCApIC8qIChUQykgRXh0ZXJuYWwgRXZlbnQgIFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0VFVlRfVElPQiAgICAgICAgICAgICAgICAoIDB4MCA8PCAxMCApIC8qIChUQykgU2lnbmFsIHNlbGVjdGVkIGFzIGV4dGVybmFsIGV2ZW50OiBUSU9CIFRJT0IgZGlyZWN0aW9uOiBpbnB1dCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0VFVlRfWEMwICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxMCApIC8qIChUQykgU2lnbmFsIHNlbGVjdGVkIGFzIGV4dGVybmFsIGV2ZW50OiBYQzAgVElPQiBkaXJlY3Rpb246IG91dHB1dCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0VFVlRfWEMxICAgICAgICAgICAgICAgICAoIDB4MiA8PCAxMCApIC8qIChUQykgU2lnbmFsIHNlbGVjdGVkIGFzIGV4dGVybmFsIGV2ZW50OiBYQzEgVElPQiBkaXJlY3Rpb246IG91dHB1dCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0VFVlRfWEMyICAgICAgICAgICAgICAgICAoIDB4MyA8PCAxMCApIC8qIChUQykgU2lnbmFsIHNlbGVjdGVkIGFzIGV4dGVybmFsIGV2ZW50OiBYQzIgVElPQiBkaXJlY3Rpb246IG91dHB1dCAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQUJFVFJHICAgICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxMCApIC8qIChUQykgVElPQSBvciBUSU9CIEV4dGVybmFsIFRyaWdnZXIgU2VsZWN0aW9uICovDQotI2RlZmluZSBBVDkxQ19UQ19FTkVUUkcgICAgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDEyICkgLyogKFRDKSBFeHRlcm5hbCBFdmVudCBUcmlnZ2VyIGVuYWJsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfV0FWRVNFTCAgICAgICAgICAgICAgICAgICAgICAoIDB4MyA8PCAxMyApIC8qIChUQykgV2F2ZWZvcm0gIFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX1dBVkVTRUxfVVAgICAgICAgICAgICAgICAoIDB4MCA8PCAxMyApIC8qIChUQykgVVAgbW9kZSB3aXRob3V0IGF0b21hdGljIHRyaWdnZXIgb24gUkMgQ29tcGFyZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX1dBVkVTRUxfVVBET1dOICAgICAgICAgICAoIDB4MSA8PCAxMyApIC8qIChUQykgVVBET1dOIG1vZGUgd2l0aG91dCBhdXRvbWF0aWMgdHJpZ2dlciBvbiBSQyBDb21wYXJlICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfV0FWRVNFTF9VUF9BVVRPICAgICAgICAgICggMHgyIDw8IDEzICkgLyogKFRDKSBVUCBtb2RlIHdpdGggYXV0b21hdGljIHRyaWdnZXIgb24gUkMgQ29tcGFyZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX1dBVkVTRUxfVVBET1dOX0FVVE8gICAgICAoIDB4MyA8PCAxMyApIC8qIChUQykgVVBET1dOIG1vZGUgd2l0aCBhdXRvbWF0aWMgdHJpZ2dlciBvbiBSQyBDb21wYXJlICovDQotI2RlZmluZSBBVDkxQ19UQ19DUENUUkcgICAgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDE0ICkgLyogKFRDKSBSQyBDb21wYXJlIFRyaWdnZXIgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19UQ19XQVZFICAgICAgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDE1ICkgLyogKFRDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQUNQQSAgICAgICAgICAgICAgICAgICAgICAgICAoIDB4MyA8PCAxNiApIC8qIChUQykgUkEgQ29tcGFyZSBFZmZlY3Qgb24gVElPQSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0FDUEFfTk9ORSAgICAgICAgICAgICAgICAoIDB4MCA8PCAxNiApIC8qIChUQykgRWZmZWN0OiBub25lICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQUNQQV9TRVQgICAgICAgICAgICAgICAgICggMHgxIDw8IDE2ICkgLyogKFRDKSBFZmZlY3Q6IHNldCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0FDUEFfQ0xFQVIgICAgICAgICAgICAgICAoIDB4MiA8PCAxNiApIC8qIChUQykgRWZmZWN0OiBjbGVhciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0FDUEFfVE9HR0xFICAgICAgICAgICAgICAoIDB4MyA8PCAxNiApIC8qIChUQykgRWZmZWN0OiB0b2dnbGUgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0xEUkEgICAgICAgICAgICAgICAgICAgICAgICAgKCAweDMgPDwgMTYgKSAvKiAoVEMpIFJBIExvYWRpbmcgU2VsZWN0aW9uICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfTERSQV9OT05FICAgICAgICAgICAgICAgICggMHgwIDw8IDE2ICkgLyogKFRDKSBFZGdlOiBOb25lICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfTERSQV9SSVNJTkcgICAgICAgICAgICAgICggMHgxIDw8IDE2ICkgLyogKFRDKSBFZGdlOiByaXNpbmcgZWRnZSBvZiBUSU9BICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfTERSQV9GQUxMSU5HICAgICAgICAgICAgICggMHgyIDw8IDE2ICkgLyogKFRDKSBFZGdlOiBmYWxsaW5nIGVkZ2Ugb2YgVElPQSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0xEUkFfQk9USCAgICAgICAgICAgICAgICAoIDB4MyA8PCAxNiApIC8qIChUQykgRWRnZTogZWFjaCBlZGdlIG9mIFRJT0EgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0FDUEMgICAgICAgICAgICAgICAgICAgICAgICAgKCAweDMgPDwgMTggKSAvKiAoVEMpIFJDIENvbXBhcmUgRWZmZWN0IG9uIFRJT0EgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19BQ1BDX05PTkUgICAgICAgICAgICAgICAgKCAweDAgPDwgMTggKSAvKiAoVEMpIEVmZmVjdDogbm9uZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0FDUENfU0VUICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxOCApIC8qIChUQykgRWZmZWN0OiBzZXQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19BQ1BDX0NMRUFSICAgICAgICAgICAgICAgKCAweDIgPDwgMTggKSAvKiAoVEMpIEVmZmVjdDogY2xlYXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19BQ1BDX1RPR0dMRSAgICAgICAgICAgICAgKCAweDMgPDwgMTggKSAvKiAoVEMpIEVmZmVjdDogdG9nZ2xlICovDQotI2RlZmluZSBBVDkxQ19UQ19MRFJCICAgICAgICAgICAgICAgICAgICAgICAgICggMHgzIDw8IDE4ICkgLyogKFRDKSBSQiBMb2FkaW5nIFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0xEUkJfTk9ORSAgICAgICAgICAgICAgICAoIDB4MCA8PCAxOCApIC8qIChUQykgRWRnZTogTm9uZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0xEUkJfUklTSU5HICAgICAgICAgICAgICAoIDB4MSA8PCAxOCApIC8qIChUQykgRWRnZTogcmlzaW5nIGVkZ2Ugb2YgVElPQSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0xEUkJfRkFMTElORyAgICAgICAgICAgICAoIDB4MiA8PCAxOCApIC8qIChUQykgRWRnZTogZmFsbGluZyBlZGdlIG9mIFRJT0EgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19MRFJCX0JPVEggICAgICAgICAgICAgICAgKCAweDMgPDwgMTggKSAvKiAoVEMpIEVkZ2U6IGVhY2ggZWRnZSBvZiBUSU9BICovDQotI2RlZmluZSBBVDkxQ19UQ19BRUVWVCAgICAgICAgICAgICAgICAgICAgICAgICggMHgzIDw8IDIwICkgLyogKFRDKSBFeHRlcm5hbCBFdmVudCBFZmZlY3Qgb24gVElPQSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0FFRVZUX05PTkUgICAgICAgICAgICAgICAoIDB4MCA8PCAyMCApIC8qIChUQykgRWZmZWN0OiBub25lICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQUVFVlRfU0VUICAgICAgICAgICAgICAgICggMHgxIDw8IDIwICkgLyogKFRDKSBFZmZlY3Q6IHNldCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0FFRVZUX0NMRUFSICAgICAgICAgICAgICAoIDB4MiA8PCAyMCApIC8qIChUQykgRWZmZWN0OiBjbGVhciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0FFRVZUX1RPR0dMRSAgICAgICAgICAgICAoIDB4MyA8PCAyMCApIC8qIChUQykgRWZmZWN0OiB0b2dnbGUgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0FTV1RSRyAgICAgICAgICAgICAgICAgICAgICAgKCAweDMgPDwgMjIgKSAvKiAoVEMpIFNvZnR3YXJlIFRyaWdnZXIgRWZmZWN0IG9uIFRJT0EgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19BU1dUUkdfTk9ORSAgICAgICAgICAgICAgKCAweDAgPDwgMjIgKSAvKiAoVEMpIEVmZmVjdDogbm9uZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0FTV1RSR19TRVQgICAgICAgICAgICAgICAoIDB4MSA8PCAyMiApIC8qIChUQykgRWZmZWN0OiBzZXQgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19BU1dUUkdfQ0xFQVIgICAgICAgICAgICAgKCAweDIgPDwgMjIgKSAvKiAoVEMpIEVmZmVjdDogY2xlYXIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19BU1dUUkdfVE9HR0xFICAgICAgICAgICAgKCAweDMgPDwgMjIgKSAvKiAoVEMpIEVmZmVjdDogdG9nZ2xlICovDQotI2RlZmluZSBBVDkxQ19UQ19CQ1BCICAgICAgICAgICAgICAgICAgICAgICAgICggMHgzIDw8IDI0ICkgLyogKFRDKSBSQiBDb21wYXJlIEVmZmVjdCBvbiBUSU9CICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQkNQQl9OT05FICAgICAgICAgICAgICAgICggMHgwIDw8IDI0ICkgLyogKFRDKSBFZmZlY3Q6IG5vbmUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19CQ1BCX1NFVCAgICAgICAgICAgICAgICAgKCAweDEgPDwgMjQgKSAvKiAoVEMpIEVmZmVjdDogc2V0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQkNQQl9DTEVBUiAgICAgICAgICAgICAgICggMHgyIDw8IDI0ICkgLyogKFRDKSBFZmZlY3Q6IGNsZWFyICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQkNQQl9UT0dHTEUgICAgICAgICAgICAgICggMHgzIDw8IDI0ICkgLyogKFRDKSBFZmZlY3Q6IHRvZ2dsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQkNQQyAgICAgICAgICAgICAgICAgICAgICAgICAoIDB4MyA8PCAyNiApIC8qIChUQykgUkMgQ29tcGFyZSBFZmZlY3Qgb24gVElPQiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JDUENfTk9ORSAgICAgICAgICAgICAgICAoIDB4MCA8PCAyNiApIC8qIChUQykgRWZmZWN0OiBub25lICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQkNQQ19TRVQgICAgICAgICAgICAgICAgICggMHgxIDw8IDI2ICkgLyogKFRDKSBFZmZlY3Q6IHNldCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JDUENfQ0xFQVIgICAgICAgICAgICAgICAoIDB4MiA8PCAyNiApIC8qIChUQykgRWZmZWN0OiBjbGVhciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JDUENfVE9HR0xFICAgICAgICAgICAgICAoIDB4MyA8PCAyNiApIC8qIChUQykgRWZmZWN0OiB0b2dnbGUgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0JFRVZUICAgICAgICAgICAgICAgICAgICAgICAgKCAweDMgPDwgMjggKSAvKiAoVEMpIEV4dGVybmFsIEV2ZW50IEVmZmVjdCBvbiBUSU9CICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQkVFVlRfTk9ORSAgICAgICAgICAgICAgICggMHgwIDw8IDI4ICkgLyogKFRDKSBFZmZlY3Q6IG5vbmUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ19CRUVWVF9TRVQgICAgICAgICAgICAgICAgKCAweDEgPDwgMjggKSAvKiAoVEMpIEVmZmVjdDogc2V0ICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQkVFVlRfQ0xFQVIgICAgICAgICAgICAgICggMHgyIDw8IDI4ICkgLyogKFRDKSBFZmZlY3Q6IGNsZWFyICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQkVFVlRfVE9HR0xFICAgICAgICAgICAgICggMHgzIDw8IDI4ICkgLyogKFRDKSBFZmZlY3Q6IHRvZ2dsZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfQlNXVFJHICAgICAgICAgICAgICAgICAgICAgICAoIDB4MyA8PCAzMCApIC8qIChUQykgU29mdHdhcmUgVHJpZ2dlciBFZmZlY3Qgb24gVElPQiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JTV1RSR19OT05FICAgICAgICAgICAgICAoIDB4MCA8PCAzMCApIC8qIChUQykgRWZmZWN0OiBub25lICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENfQlNXVFJHX1NFVCAgICAgICAgICAgICAgICggMHgxIDw8IDMwICkgLyogKFRDKSBFZmZlY3Q6IHNldCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JTV1RSR19DTEVBUiAgICAgICAgICAgICAoIDB4MiA8PCAzMCApIC8qIChUQykgRWZmZWN0OiBjbGVhciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDX0JTV1RSR19UT0dHTEUgICAgICAgICAgICAoIDB4MyA8PCAzMCApIC8qIChUQykgRWZmZWN0OiB0b2dnbGUgKi8NCi0vKiAtLS0tLS0tLSBUQ19TUiA6IChUQyBPZmZzZXQ6IDB4MjApIFRDIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19UQ19DT1ZGUyAgICAgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDAgKSAgLyogKFRDKSBDb3VudGVyIE92ZXJmbG93ICovDQotI2RlZmluZSBBVDkxQ19UQ19MT1ZSUyAgICAgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDEgKSAgLyogKFRDKSBMb2FkIE92ZXJydW4gKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0NQQVMgICAgICAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMiApICAvKiAoVEMpIFJBIENvbXBhcmUgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0NQQlMgICAgICAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMyApICAvKiAoVEMpIFJCIENvbXBhcmUgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0NQQ1MgICAgICAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgNCApICAvKiAoVEMpIFJDIENvbXBhcmUgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0xEUkFTICAgICAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgNSApICAvKiAoVEMpIFJBIExvYWRpbmcgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0xEUkJTICAgICAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgNiApICAvKiAoVEMpIFJCIExvYWRpbmcgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0VUUkdTICAgICAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgNyApICAvKiAoVEMpIEV4dGVybmFsIFRyaWdnZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDX0NMS1NUQSAgICAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMTYgKSAvKiAoVEMpIENsb2NrIEVuYWJsaW5nICovDQotI2RlZmluZSBBVDkxQ19UQ19NVElPQSAgICAgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDE3ICkgLyogKFRDKSBUSU9BIE1pcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfVENfTVRJT0IgICAgICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxOCApIC8qIChUQykgVElPQSBNaXJyb3IgKi8NCi0vKiAtLS0tLS0tLSBUQ19JRVIgOiAoVEMgT2Zmc2V0OiAweDI0KSBUQyBDaGFubmVsIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBUQ19JRFIgOiAoVEMgT2Zmc2V0OiAweDI4KSBUQyBDaGFubmVsIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gVENfSU1SIDogKFRDIE9mZnNldDogMHgyYykgVEMgQ2hhbm5lbCBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSAqLw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgVGltZXIgQ291bnRlciBDaGFubmVsIEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19UQyBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBUQ19DQ1IgICAgICAgICAgKCAwKSAvLyBDaGFubmVsIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIFRDX0NNUiAgICAgICAgICAoIDQpIC8vIENoYW5uZWwgTW9kZSBSZWdpc3RlciAoQ2FwdHVyZSBNb2RlIC8gV2F2ZWZvcm0gTW9kZSkNCisjZGVmaW5lIFRDX0NWICAgICAgICAgICAoMTYpIC8vIENvdW50ZXIgVmFsdWUNCisjZGVmaW5lIFRDX1JBICAgICAgICAgICAoMjApIC8vIFJlZ2lzdGVyIEENCisjZGVmaW5lIFRDX1JCICAgICAgICAgICAoMjQpIC8vIFJlZ2lzdGVyIEINCisjZGVmaW5lIFRDX1JDICAgICAgICAgICAoMjgpIC8vIFJlZ2lzdGVyIEMNCisjZGVmaW5lIFRDX1NSICAgICAgICAgICAoMzIpIC8vIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgVENfSUVSICAgICAgICAgICgzNikgLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgVENfSURSICAgICAgICAgICg0MCkgLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIFRDX0lNUiAgICAgICAgICAoNDQpIC8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorLy8gLS0tLS0tLS0gVENfQ0NSIDogKFRDIE9mZnNldDogMHgwKSBUQyBDaGFubmVsIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UQ19DTEtFTiAgICAgICAgICAgICgweDEgPDwgIDApIC8vIChUQykgQ291bnRlciBDbG9jayBFbmFibGUgQ29tbWFuZA0KKyNkZWZpbmUgQVQ5MUNfVENfQ0xLRElTICAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoVEMpIENvdW50ZXIgQ2xvY2sgRGlzYWJsZSBDb21tYW5kDQorI2RlZmluZSBBVDkxQ19UQ19TV1RSRyAgICAgICAgICAgICgweDEgPDwgIDIpIC8vIChUQykgU29mdHdhcmUgVHJpZ2dlciBDb21tYW5kDQorLy8gLS0tLS0tLS0gVENfQ01SIDogKFRDIE9mZnNldDogMHg0KSBUQyBDaGFubmVsIE1vZGUgUmVnaXN0ZXI6IENhcHR1cmUgTW9kZSAvIFdhdmVmb3JtIE1vZGUgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UQ19DTEtTICAgICAgICAgICAgICgweDcgPDwgIDApIC8vIChUQykgQ2xvY2sgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfVENfQ0xLU19USU1FUl9ESVYxX0NMT0NLICAgICAoMHgwKSAvLyAoVEMpIENsb2NrIHNlbGVjdGVkOiBUSU1FUl9ESVYxX0NMT0NLDQorI2RlZmluZSAJQVQ5MUNfVENfQ0xLU19USU1FUl9ESVYyX0NMT0NLICAgICAoMHgxKSAvLyAoVEMpIENsb2NrIHNlbGVjdGVkOiBUSU1FUl9ESVYyX0NMT0NLDQorI2RlZmluZSAJQVQ5MUNfVENfQ0xLU19USU1FUl9ESVYzX0NMT0NLICAgICAoMHgyKSAvLyAoVEMpIENsb2NrIHNlbGVjdGVkOiBUSU1FUl9ESVYzX0NMT0NLDQorI2RlZmluZSAJQVQ5MUNfVENfQ0xLU19USU1FUl9ESVY0X0NMT0NLICAgICAoMHgzKSAvLyAoVEMpIENsb2NrIHNlbGVjdGVkOiBUSU1FUl9ESVY0X0NMT0NLDQorI2RlZmluZSAJQVQ5MUNfVENfQ0xLU19USU1FUl9ESVY1X0NMT0NLICAgICAoMHg0KSAvLyAoVEMpIENsb2NrIHNlbGVjdGVkOiBUSU1FUl9ESVY1X0NMT0NLDQorI2RlZmluZSAJQVQ5MUNfVENfQ0xLU19YQzAgICAgICAgICAgICAgICAgICAoMHg1KSAvLyAoVEMpIENsb2NrIHNlbGVjdGVkOiBYQzANCisjZGVmaW5lIAlBVDkxQ19UQ19DTEtTX1hDMSAgICAgICAgICAgICAgICAgICgweDYpIC8vIChUQykgQ2xvY2sgc2VsZWN0ZWQ6IFhDMQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0NMS1NfWEMyICAgICAgICAgICAgICAgICAgKDB4NykgLy8gKFRDKSBDbG9jayBzZWxlY3RlZDogWEMyDQorI2RlZmluZSBBVDkxQ19UQ19DTEtJICAgICAgICAgICAgICgweDEgPDwgIDMpIC8vIChUQykgQ2xvY2sgSW52ZXJ0DQorI2RlZmluZSBBVDkxQ19UQ19CVVJTVCAgICAgICAgICAgICgweDMgPDwgIDQpIC8vIChUQykgQnVyc3QgU2lnbmFsIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDX0JVUlNUX05PTkUgICAgICAgICAgICAgICAgICgweDAgPDwgIDQpIC8vIChUQykgVGhlIGNsb2NrIGlzIG5vdCBnYXRlZCBieSBhbiBleHRlcm5hbCBzaWduYWwNCisjZGVmaW5lIAlBVDkxQ19UQ19CVVJTVF9YQzAgICAgICAgICAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoVEMpIFhDMCBpcyBBTkRlZCB3aXRoIHRoZSBzZWxlY3RlZCBjbG9jaw0KKyNkZWZpbmUgCUFUOTFDX1RDX0JVUlNUX1hDMSAgICAgICAgICAgICAgICAgICgweDIgPDwgIDQpIC8vIChUQykgWEMxIGlzIEFORGVkIHdpdGggdGhlIHNlbGVjdGVkIGNsb2NrDQorI2RlZmluZSAJQVQ5MUNfVENfQlVSU1RfWEMyICAgICAgICAgICAgICAgICAgKDB4MyA8PCAgNCkgLy8gKFRDKSBYQzIgaXMgQU5EZWQgd2l0aCB0aGUgc2VsZWN0ZWQgY2xvY2sNCisjZGVmaW5lIEFUOTFDX1RDX0NQQ1NUT1AgICAgICAgICAgKDB4MSA8PCAgNikgLy8gKFRDKSBDb3VudGVyIENsb2NrIFN0b3BwZWQgd2l0aCBSQyBDb21wYXJlDQorI2RlZmluZSBBVDkxQ19UQ19MREJTVE9QICAgICAgICAgICgweDEgPDwgIDYpIC8vIChUQykgQ291bnRlciBDbG9jayBTdG9wcGVkIHdpdGggUkIgTG9hZGluZw0KKyNkZWZpbmUgQVQ5MUNfVENfQ1BDRElTICAgICAgICAgICAoMHgxIDw8ICA3KSAvLyAoVEMpIENvdW50ZXIgQ2xvY2sgRGlzYWJsZSB3aXRoIFJDIENvbXBhcmUNCisjZGVmaW5lIEFUOTFDX1RDX0xEQkRJUyAgICAgICAgICAgKDB4MSA8PCAgNykgLy8gKFRDKSBDb3VudGVyIENsb2NrIERpc2FibGVkIHdpdGggUkIgTG9hZGluZw0KKyNkZWZpbmUgQVQ5MUNfVENfRVRSR0VERyAgICAgICAgICAoMHgzIDw8ICA4KSAvLyAoVEMpIEV4dGVybmFsIFRyaWdnZXIgRWRnZSBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ19FVFJHRURHX05PTkUgICAgICAgICAgICAgICAgICgweDAgPDwgIDgpIC8vIChUQykgRWRnZTogTm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0VUUkdFREdfUklTSU5HICAgICAgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKFRDKSBFZGdlOiByaXNpbmcgZWRnZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0VUUkdFREdfRkFMTElORyAgICAgICAgICAgICAgKDB4MiA8PCAgOCkgLy8gKFRDKSBFZGdlOiBmYWxsaW5nIGVkZ2UNCisjZGVmaW5lIAlBVDkxQ19UQ19FVFJHRURHX0JPVEggICAgICAgICAgICAgICAgICgweDMgPDwgIDgpIC8vIChUQykgRWRnZTogZWFjaCBlZGdlDQorI2RlZmluZSBBVDkxQ19UQ19FRVZURURHICAgICAgICAgICgweDMgPDwgIDgpIC8vIChUQykgRXh0ZXJuYWwgRXZlbnQgRWRnZSBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ19FRVZURURHX05PTkUgICAgICAgICAgICAgICAgICgweDAgPDwgIDgpIC8vIChUQykgRWRnZTogTm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0VFVlRFREdfUklTSU5HICAgICAgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKFRDKSBFZGdlOiByaXNpbmcgZWRnZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0VFVlRFREdfRkFMTElORyAgICAgICAgICAgICAgKDB4MiA8PCAgOCkgLy8gKFRDKSBFZGdlOiBmYWxsaW5nIGVkZ2UNCisjZGVmaW5lIAlBVDkxQ19UQ19FRVZURURHX0JPVEggICAgICAgICAgICAgICAgICgweDMgPDwgIDgpIC8vIChUQykgRWRnZTogZWFjaCBlZGdlDQorI2RlZmluZSBBVDkxQ19UQ19FRVZUICAgICAgICAgICAgICgweDMgPDwgMTApIC8vIChUQykgRXh0ZXJuYWwgRXZlbnQgIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDX0VFVlRfVElPQiAgICAgICAgICAgICAgICAgKDB4MCA8PCAxMCkgLy8gKFRDKSBTaWduYWwgc2VsZWN0ZWQgYXMgZXh0ZXJuYWwgZXZlbnQ6IFRJT0IgVElPQiBkaXJlY3Rpb246IGlucHV0DQorI2RlZmluZSAJQVQ5MUNfVENfRUVWVF9YQzAgICAgICAgICAgICAgICAgICAoMHgxIDw8IDEwKSAvLyAoVEMpIFNpZ25hbCBzZWxlY3RlZCBhcyBleHRlcm5hbCBldmVudDogWEMwIFRJT0IgZGlyZWN0aW9uOiBvdXRwdXQNCisjZGVmaW5lIAlBVDkxQ19UQ19FRVZUX1hDMSAgICAgICAgICAgICAgICAgICgweDIgPDwgMTApIC8vIChUQykgU2lnbmFsIHNlbGVjdGVkIGFzIGV4dGVybmFsIGV2ZW50OiBYQzEgVElPQiBkaXJlY3Rpb246IG91dHB1dA0KKyNkZWZpbmUgCUFUOTFDX1RDX0VFVlRfWEMyICAgICAgICAgICAgICAgICAgKDB4MyA8PCAxMCkgLy8gKFRDKSBTaWduYWwgc2VsZWN0ZWQgYXMgZXh0ZXJuYWwgZXZlbnQ6IFhDMiBUSU9CIGRpcmVjdGlvbjogb3V0cHV0DQorI2RlZmluZSBBVDkxQ19UQ19BQkVUUkcgICAgICAgICAgICgweDEgPDwgMTApIC8vIChUQykgVElPQSBvciBUSU9CIEV4dGVybmFsIFRyaWdnZXIgU2VsZWN0aW9uDQorI2RlZmluZSBBVDkxQ19UQ19FTkVUUkcgICAgICAgICAgICgweDEgPDwgMTIpIC8vIChUQykgRXh0ZXJuYWwgRXZlbnQgVHJpZ2dlciBlbmFibGUNCisjZGVmaW5lIEFUOTFDX1RDX1dBVkVTRUwgICAgICAgICAgKDB4MyA8PCAxMykgLy8gKFRDKSBXYXZlZm9ybSAgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfVENfV0FWRVNFTF9VUCAgICAgICAgICAgICAgICAgICAoMHgwIDw8IDEzKSAvLyAoVEMpIFVQIG1vZGUgd2l0aG91dCBhdG9tYXRpYyB0cmlnZ2VyIG9uIFJDIENvbXBhcmUNCisjZGVmaW5lIAlBVDkxQ19UQ19XQVZFU0VMX1VQRE9XTiAgICAgICAgICAgICAgICgweDEgPDwgMTMpIC8vIChUQykgVVBET1dOIG1vZGUgd2l0aG91dCBhdXRvbWF0aWMgdHJpZ2dlciBvbiBSQyBDb21wYXJlDQorI2RlZmluZSAJQVQ5MUNfVENfV0FWRVNFTF9VUF9BVVRPICAgICAgICAgICAgICAoMHgyIDw8IDEzKSAvLyAoVEMpIFVQIG1vZGUgd2l0aCBhdXRvbWF0aWMgdHJpZ2dlciBvbiBSQyBDb21wYXJlDQorI2RlZmluZSAJQVQ5MUNfVENfV0FWRVNFTF9VUERPV05fQVVUTyAgICAgICAgICAoMHgzIDw8IDEzKSAvLyAoVEMpIFVQRE9XTiBtb2RlIHdpdGggYXV0b21hdGljIHRyaWdnZXIgb24gUkMgQ29tcGFyZQ0KKyNkZWZpbmUgQVQ5MUNfVENfQ1BDVFJHICAgICAgICAgICAoMHgxIDw8IDE0KSAvLyAoVEMpIFJDIENvbXBhcmUgVHJpZ2dlciBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1RDX1dBVkUgICAgICAgICAgICAgKDB4MSA8PCAxNSkgLy8gKFRDKSANCisjZGVmaW5lIEFUOTFDX1RDX0FDUEEgICAgICAgICAgICAgKDB4MyA8PCAxNikgLy8gKFRDKSBSQSBDb21wYXJlIEVmZmVjdCBvbiBUSU9BDQorI2RlZmluZSAJQVQ5MUNfVENfQUNQQV9OT05FICAgICAgICAgICAgICAgICAoMHgwIDw8IDE2KSAvLyAoVEMpIEVmZmVjdDogbm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0FDUEFfU0VUICAgICAgICAgICAgICAgICAgKDB4MSA8PCAxNikgLy8gKFRDKSBFZmZlY3Q6IHNldA0KKyNkZWZpbmUgCUFUOTFDX1RDX0FDUEFfQ0xFQVIgICAgICAgICAgICAgICAgKDB4MiA8PCAxNikgLy8gKFRDKSBFZmZlY3Q6IGNsZWFyDQorI2RlZmluZSAJQVQ5MUNfVENfQUNQQV9UT0dHTEUgICAgICAgICAgICAgICAoMHgzIDw8IDE2KSAvLyAoVEMpIEVmZmVjdDogdG9nZ2xlDQorI2RlZmluZSBBVDkxQ19UQ19MRFJBICAgICAgICAgICAgICgweDMgPDwgMTYpIC8vIChUQykgUkEgTG9hZGluZyBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ19MRFJBX05PTkUgICAgICAgICAgICAgICAgICgweDAgPDwgMTYpIC8vIChUQykgRWRnZTogTm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0xEUkFfUklTSU5HICAgICAgICAgICAgICAgKDB4MSA8PCAxNikgLy8gKFRDKSBFZGdlOiByaXNpbmcgZWRnZSBvZiBUSU9BDQorI2RlZmluZSAJQVQ5MUNfVENfTERSQV9GQUxMSU5HICAgICAgICAgICAgICAoMHgyIDw8IDE2KSAvLyAoVEMpIEVkZ2U6IGZhbGxpbmcgZWRnZSBvZiBUSU9BDQorI2RlZmluZSAJQVQ5MUNfVENfTERSQV9CT1RIICAgICAgICAgICAgICAgICAoMHgzIDw8IDE2KSAvLyAoVEMpIEVkZ2U6IGVhY2ggZWRnZSBvZiBUSU9BDQorI2RlZmluZSBBVDkxQ19UQ19BQ1BDICAgICAgICAgICAgICgweDMgPDwgMTgpIC8vIChUQykgUkMgQ29tcGFyZSBFZmZlY3Qgb24gVElPQQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0FDUENfTk9ORSAgICAgICAgICAgICAgICAgKDB4MCA8PCAxOCkgLy8gKFRDKSBFZmZlY3Q6IG5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19BQ1BDX1NFVCAgICAgICAgICAgICAgICAgICgweDEgPDwgMTgpIC8vIChUQykgRWZmZWN0OiBzZXQNCisjZGVmaW5lIAlBVDkxQ19UQ19BQ1BDX0NMRUFSICAgICAgICAgICAgICAgICgweDIgPDwgMTgpIC8vIChUQykgRWZmZWN0OiBjbGVhcg0KKyNkZWZpbmUgCUFUOTFDX1RDX0FDUENfVE9HR0xFICAgICAgICAgICAgICAgKDB4MyA8PCAxOCkgLy8gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KKyNkZWZpbmUgQVQ5MUNfVENfTERSQiAgICAgICAgICAgICAoMHgzIDw8IDE4KSAvLyAoVEMpIFJCIExvYWRpbmcgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfVENfTERSQl9OT05FICAgICAgICAgICAgICAgICAoMHgwIDw8IDE4KSAvLyAoVEMpIEVkZ2U6IE5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19MRFJCX1JJU0lORyAgICAgICAgICAgICAgICgweDEgPDwgMTgpIC8vIChUQykgRWRnZTogcmlzaW5nIGVkZ2Ugb2YgVElPQQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0xEUkJfRkFMTElORyAgICAgICAgICAgICAgKDB4MiA8PCAxOCkgLy8gKFRDKSBFZGdlOiBmYWxsaW5nIGVkZ2Ugb2YgVElPQQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0xEUkJfQk9USCAgICAgICAgICAgICAgICAgKDB4MyA8PCAxOCkgLy8gKFRDKSBFZGdlOiBlYWNoIGVkZ2Ugb2YgVElPQQ0KKyNkZWZpbmUgQVQ5MUNfVENfQUVFVlQgICAgICAgICAgICAoMHgzIDw8IDIwKSAvLyAoVEMpIEV4dGVybmFsIEV2ZW50IEVmZmVjdCBvbiBUSU9BDQorI2RlZmluZSAJQVQ5MUNfVENfQUVFVlRfTk9ORSAgICAgICAgICAgICAgICAgKDB4MCA8PCAyMCkgLy8gKFRDKSBFZmZlY3Q6IG5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19BRUVWVF9TRVQgICAgICAgICAgICAgICAgICAoMHgxIDw8IDIwKSAvLyAoVEMpIEVmZmVjdDogc2V0DQorI2RlZmluZSAJQVQ5MUNfVENfQUVFVlRfQ0xFQVIgICAgICAgICAgICAgICAgKDB4MiA8PCAyMCkgLy8gKFRDKSBFZmZlY3Q6IGNsZWFyDQorI2RlZmluZSAJQVQ5MUNfVENfQUVFVlRfVE9HR0xFICAgICAgICAgICAgICAgKDB4MyA8PCAyMCkgLy8gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KKyNkZWZpbmUgQVQ5MUNfVENfQVNXVFJHICAgICAgICAgICAoMHgzIDw8IDIyKSAvLyAoVEMpIFNvZnR3YXJlIFRyaWdnZXIgRWZmZWN0IG9uIFRJT0ENCisjZGVmaW5lIAlBVDkxQ19UQ19BU1dUUkdfTk9ORSAgICAgICAgICAgICAgICAgKDB4MCA8PCAyMikgLy8gKFRDKSBFZmZlY3Q6IG5vbmUNCisjZGVmaW5lIAlBVDkxQ19UQ19BU1dUUkdfU0VUICAgICAgICAgICAgICAgICAgKDB4MSA8PCAyMikgLy8gKFRDKSBFZmZlY3Q6IHNldA0KKyNkZWZpbmUgCUFUOTFDX1RDX0FTV1RSR19DTEVBUiAgICAgICAgICAgICAgICAoMHgyIDw8IDIyKSAvLyAoVEMpIEVmZmVjdDogY2xlYXINCisjZGVmaW5lIAlBVDkxQ19UQ19BU1dUUkdfVE9HR0xFICAgICAgICAgICAgICAgKDB4MyA8PCAyMikgLy8gKFRDKSBFZmZlY3Q6IHRvZ2dsZQ0KKyNkZWZpbmUgQVQ5MUNfVENfQkNQQiAgICAgICAgICAgICAoMHgzIDw8IDI0KSAvLyAoVEMpIFJCIENvbXBhcmUgRWZmZWN0IG9uIFRJT0INCisjZGVmaW5lIAlBVDkxQ19UQ19CQ1BCX05PTkUgICAgICAgICAgICAgICAgICgweDAgPDwgMjQpIC8vIChUQykgRWZmZWN0OiBub25lDQorI2RlZmluZSAJQVQ5MUNfVENfQkNQQl9TRVQgICAgICAgICAgICAgICAgICAoMHgxIDw8IDI0KSAvLyAoVEMpIEVmZmVjdDogc2V0DQorI2RlZmluZSAJQVQ5MUNfVENfQkNQQl9DTEVBUiAgICAgICAgICAgICAgICAoMHgyIDw8IDI0KSAvLyAoVEMpIEVmZmVjdDogY2xlYXINCisjZGVmaW5lIAlBVDkxQ19UQ19CQ1BCX1RPR0dMRSAgICAgICAgICAgICAgICgweDMgPDwgMjQpIC8vIChUQykgRWZmZWN0OiB0b2dnbGUNCisjZGVmaW5lIEFUOTFDX1RDX0JDUEMgICAgICAgICAgICAgKDB4MyA8PCAyNikgLy8gKFRDKSBSQyBDb21wYXJlIEVmZmVjdCBvbiBUSU9CDQorI2RlZmluZSAJQVQ5MUNfVENfQkNQQ19OT05FICAgICAgICAgICAgICAgICAoMHgwIDw8IDI2KSAvLyAoVEMpIEVmZmVjdDogbm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0JDUENfU0VUICAgICAgICAgICAgICAgICAgKDB4MSA8PCAyNikgLy8gKFRDKSBFZmZlY3Q6IHNldA0KKyNkZWZpbmUgCUFUOTFDX1RDX0JDUENfQ0xFQVIgICAgICAgICAgICAgICAgKDB4MiA8PCAyNikgLy8gKFRDKSBFZmZlY3Q6IGNsZWFyDQorI2RlZmluZSAJQVQ5MUNfVENfQkNQQ19UT0dHTEUgICAgICAgICAgICAgICAoMHgzIDw8IDI2KSAvLyAoVEMpIEVmZmVjdDogdG9nZ2xlDQorI2RlZmluZSBBVDkxQ19UQ19CRUVWVCAgICAgICAgICAgICgweDMgPDwgMjgpIC8vIChUQykgRXh0ZXJuYWwgRXZlbnQgRWZmZWN0IG9uIFRJT0INCisjZGVmaW5lIAlBVDkxQ19UQ19CRUVWVF9OT05FICAgICAgICAgICAgICAgICAoMHgwIDw8IDI4KSAvLyAoVEMpIEVmZmVjdDogbm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0JFRVZUX1NFVCAgICAgICAgICAgICAgICAgICgweDEgPDwgMjgpIC8vIChUQykgRWZmZWN0OiBzZXQNCisjZGVmaW5lIAlBVDkxQ19UQ19CRUVWVF9DTEVBUiAgICAgICAgICAgICAgICAoMHgyIDw8IDI4KSAvLyAoVEMpIEVmZmVjdDogY2xlYXINCisjZGVmaW5lIAlBVDkxQ19UQ19CRUVWVF9UT0dHTEUgICAgICAgICAgICAgICAoMHgzIDw8IDI4KSAvLyAoVEMpIEVmZmVjdDogdG9nZ2xlDQorI2RlZmluZSBBVDkxQ19UQ19CU1dUUkcgICAgICAgICAgICgweDMgPDwgMzApIC8vIChUQykgU29mdHdhcmUgVHJpZ2dlciBFZmZlY3Qgb24gVElPQg0KKyNkZWZpbmUgCUFUOTFDX1RDX0JTV1RSR19OT05FICAgICAgICAgICAgICAgICAoMHgwIDw8IDMwKSAvLyAoVEMpIEVmZmVjdDogbm9uZQ0KKyNkZWZpbmUgCUFUOTFDX1RDX0JTV1RSR19TRVQgICAgICAgICAgICAgICAgICAoMHgxIDw8IDMwKSAvLyAoVEMpIEVmZmVjdDogc2V0DQorI2RlZmluZSAJQVQ5MUNfVENfQlNXVFJHX0NMRUFSICAgICAgICAgICAgICAgICgweDIgPDwgMzApIC8vIChUQykgRWZmZWN0OiBjbGVhcg0KKyNkZWZpbmUgCUFUOTFDX1RDX0JTV1RSR19UT0dHTEUgICAgICAgICAgICAgICAoMHgzIDw8IDMwKSAvLyAoVEMpIEVmZmVjdDogdG9nZ2xlDQorLy8gLS0tLS0tLS0gVENfU1IgOiAoVEMgT2Zmc2V0OiAweDIwKSBUQyBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RDX0NPVkZTICAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFRDKSBDb3VudGVyIE92ZXJmbG93DQorI2RlZmluZSBBVDkxQ19UQ19MT1ZSUyAgICAgICAgICAgICgweDEgPDwgIDEpIC8vIChUQykgTG9hZCBPdmVycnVuDQorI2RlZmluZSBBVDkxQ19UQ19DUEFTICAgICAgICAgICAgICgweDEgPDwgIDIpIC8vIChUQykgUkEgQ29tcGFyZQ0KKyNkZWZpbmUgQVQ5MUNfVENfQ1BCUyAgICAgICAgICAgICAoMHgxIDw8ICAzKSAvLyAoVEMpIFJCIENvbXBhcmUNCisjZGVmaW5lIEFUOTFDX1RDX0NQQ1MgICAgICAgICAgICAgKDB4MSA8PCAgNCkgLy8gKFRDKSBSQyBDb21wYXJlDQorI2RlZmluZSBBVDkxQ19UQ19MRFJBUyAgICAgICAgICAgICgweDEgPDwgIDUpIC8vIChUQykgUkEgTG9hZGluZw0KKyNkZWZpbmUgQVQ5MUNfVENfTERSQlMgICAgICAgICAgICAoMHgxIDw8ICA2KSAvLyAoVEMpIFJCIExvYWRpbmcNCisjZGVmaW5lIEFUOTFDX1RDX0VUUkdTICAgICAgICAgICAgKDB4MSA8PCAgNykgLy8gKFRDKSBFeHRlcm5hbCBUcmlnZ2VyDQorI2RlZmluZSBBVDkxQ19UQ19DTEtTVEEgICAgICAgICAgICgweDEgPDwgMTYpIC8vIChUQykgQ2xvY2sgRW5hYmxpbmcNCisjZGVmaW5lIEFUOTFDX1RDX01USU9BICAgICAgICAgICAgKDB4MSA8PCAxNykgLy8gKFRDKSBUSU9BIE1pcnJvcg0KKyNkZWZpbmUgQVQ5MUNfVENfTVRJT0IgICAgICAgICAgICAoMHgxIDw8IDE4KSAvLyAoVEMpIFRJT0EgTWlycm9yDQorLy8gLS0tLS0tLS0gVENfSUVSIDogKFRDIE9mZnNldDogMHgyNCkgVEMgQ2hhbm5lbCBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFRDX0lEUiA6IChUQyBPZmZzZXQ6IDB4MjgpIFRDIENoYW5uZWwgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gVENfSU1SIDogKFRDIE9mZnNldDogMHgyYykgVEMgQ2hhbm5lbCBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFRpbWVyIENvdW50ZXIgSW50ZXJmYWNlICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1RDQiBzdHJ1Y3R1cmUgKioqICovDQotI2RlZmluZSBUQ0JfVEMwICAgICAgICAgICAgICAgICAgICAgICAgKCAwICkgICAgICAgIC8qIFRDIENoYW5uZWwgMCAqLw0KLSNkZWZpbmUgVENCX1RDMSAgICAgICAgICAgICAgICAgICAgICAgICggNjQgKSAgICAgICAvKiBUQyBDaGFubmVsIDEgKi8NCi0jZGVmaW5lIFRDQl9UQzIgICAgICAgICAgICAgICAgICAgICAgICAoIDEyOCApICAgICAgLyogVEMgQ2hhbm5lbCAyICovDQotI2RlZmluZSBUQ0JfQkNSICAgICAgICAgICAgICAgICAgICAgICAgKCAxOTIgKSAgICAgIC8qIFRDIEJsb2NrIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFRDQl9CTVIgICAgICAgICAgICAgICAgICAgICAgICAoIDE5NiApICAgICAgLyogVEMgQmxvY2sgTW9kZSBSZWdpc3RlciAqLw0KLS8qIC0tLS0tLS0tIFRDQl9CQ1IgOiAoVENCIE9mZnNldDogMHhjMCkgVEMgQmxvY2sgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVENCX1NZTkMgICAgICAgICAgICAgICAgICggMHgxIDw8IDAgKSAvKiAoVENCKSBTeW5jaHJvIENvbW1hbmQgKi8NCi0vKiAtLS0tLS0tLSBUQ0JfQk1SIDogKFRDQiBPZmZzZXQ6IDB4YzQpIFRDIEJsb2NrIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1RDQl9UQzBYQzBTICAgICAgICAgICAgICAoIDB4MyA8PCAwICkgLyogKFRDQikgRXh0ZXJuYWwgQ2xvY2sgU2lnbmFsIDAgU2VsZWN0aW9uICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENCX1RDMFhDMFNfVENMSzAgICAgKCAweDAgKSAgICAgIC8qIChUQ0IpIFRDTEswIGNvbm5lY3RlZCB0byBYQzAgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ0JfVEMwWEMwU19OT05FICAgICAoIDB4MSApICAgICAgLyogKFRDQikgTm9uZSBzaWduYWwgY29ubmVjdGVkIHRvIFhDMCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDQl9UQzBYQzBTX1RJT0ExICAgICggMHgyICkgICAgICAvKiAoVENCKSBUSU9BMSBjb25uZWN0ZWQgdG8gWEMwICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENCX1RDMFhDMFNfVElPQTIgICAgKCAweDMgKSAgICAgIC8qIChUQ0IpIFRJT0EyIGNvbm5lY3RlZCB0byBYQzAgKi8NCi0jZGVmaW5lIEFUOTFDX1RDQl9UQzFYQzFTICAgICAgICAgICAgICAoIDB4MyA8PCAyICkgLyogKFRDQikgRXh0ZXJuYWwgQ2xvY2sgU2lnbmFsIDEgU2VsZWN0aW9uICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENCX1RDMVhDMVNfVENMSzEgICAgKCAweDAgPDwgMiApIC8qIChUQ0IpIFRDTEsxIGNvbm5lY3RlZCB0byBYQzEgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ0JfVEMxWEMxU19OT05FICAgICAoIDB4MSA8PCAyICkgLyogKFRDQikgTm9uZSBzaWduYWwgY29ubmVjdGVkIHRvIFhDMSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDQl9UQzFYQzFTX1RJT0EwICAgICggMHgyIDw8IDIgKSAvKiAoVENCKSBUSU9BMCBjb25uZWN0ZWQgdG8gWEMxICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENCX1RDMVhDMVNfVElPQTIgICAgKCAweDMgPDwgMiApIC8qIChUQ0IpIFRJT0EyIGNvbm5lY3RlZCB0byBYQzEgKi8NCi0jZGVmaW5lIEFUOTFDX1RDQl9UQzJYQzJTICAgICAgICAgICAgICAoIDB4MyA8PCA0ICkgLyogKFRDQikgRXh0ZXJuYWwgQ2xvY2sgU2lnbmFsIDIgU2VsZWN0aW9uICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENCX1RDMlhDMlNfVENMSzIgICAgKCAweDAgPDwgNCApIC8qIChUQ0IpIFRDTEsyIGNvbm5lY3RlZCB0byBYQzIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UQ0JfVEMyWEMyU19OT05FICAgICAoIDB4MSA8PCA0ICkgLyogKFRDQikgTm9uZSBzaWduYWwgY29ubmVjdGVkIHRvIFhDMiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RDQl9UQzJYQzJTX1RJT0EwICAgICggMHgyIDw8IDQgKSAvKiAoVENCKSBUSU9BMCBjb25uZWN0ZWQgdG8gWEMyICovDQotI2RlZmluZSAgICAgQVQ5MUNfVENCX1RDMlhDMlNfVElPQTEgICAgKCAweDMgPDwgNCApIC8qIChUQ0IpIFRJT0EyIGNvbm5lY3RlZCB0byBYQzIgKi8NCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFRpbWVyIENvdW50ZXIgSW50ZXJmYWNlDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1RDQiBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBUQ0JfVEMwICAgICAgICAgKCAwKSAvLyBUQyBDaGFubmVsIDANCisjZGVmaW5lIFRDQl9UQzEgICAgICAgICAoNjQpIC8vIFRDIENoYW5uZWwgMQ0KKyNkZWZpbmUgVENCX1RDMiAgICAgICAgICgxMjgpIC8vIFRDIENoYW5uZWwgMg0KKyNkZWZpbmUgVENCX0JDUiAgICAgICAgICgxOTIpIC8vIFRDIEJsb2NrIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIFRDQl9CTVIgICAgICAgICAoMTk2KSAvLyBUQyBCbG9jayBNb2RlIFJlZ2lzdGVyDQorLy8gLS0tLS0tLS0gVENCX0JDUiA6IChUQ0IgT2Zmc2V0OiAweGMwKSBUQyBCbG9jayBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVENCX1NZTkMgICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoVENCKSBTeW5jaHJvIENvbW1hbmQNCisvLyAtLS0tLS0tLSBUQ0JfQk1SIDogKFRDQiBPZmZzZXQ6IDB4YzQpIFRDIEJsb2NrIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19UQ0JfVEMwWEMwUyAgICAgICAgICgweDMgPDwgIDApIC8vIChUQ0IpIEV4dGVybmFsIENsb2NrIFNpZ25hbCAwIFNlbGVjdGlvbg0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzBYQzBTX1RDTEswICAgICAgICAgICAgICAgICgweDApIC8vIChUQ0IpIFRDTEswIGNvbm5lY3RlZCB0byBYQzANCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMwWEMwU19OT05FICAgICAgICAgICAgICAgICAoMHgxKSAvLyAoVENCKSBOb25lIHNpZ25hbCBjb25uZWN0ZWQgdG8gWEMwDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMFhDMFNfVElPQTEgICAgICAgICAgICAgICAgKDB4MikgLy8gKFRDQikgVElPQTEgY29ubmVjdGVkIHRvIFhDMA0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzBYQzBTX1RJT0EyICAgICAgICAgICAgICAgICgweDMpIC8vIChUQ0IpIFRJT0EyIGNvbm5lY3RlZCB0byBYQzANCisjZGVmaW5lIEFUOTFDX1RDQl9UQzFYQzFTICAgICAgICAgKDB4MyA8PCAgMikgLy8gKFRDQikgRXh0ZXJuYWwgQ2xvY2sgU2lnbmFsIDEgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMVhDMVNfVENMSzEgICAgICAgICAgICAgICAgKDB4MCA8PCAgMikgLy8gKFRDQikgVENMSzEgY29ubmVjdGVkIHRvIFhDMQ0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzFYQzFTX05PTkUgICAgICAgICAgICAgICAgICgweDEgPDwgIDIpIC8vIChUQ0IpIE5vbmUgc2lnbmFsIGNvbm5lY3RlZCB0byBYQzENCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMxWEMxU19USU9BMCAgICAgICAgICAgICAgICAoMHgyIDw8ICAyKSAvLyAoVENCKSBUSU9BMCBjb25uZWN0ZWQgdG8gWEMxDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMVhDMVNfVElPQTIgICAgICAgICAgICAgICAgKDB4MyA8PCAgMikgLy8gKFRDQikgVElPQTIgY29ubmVjdGVkIHRvIFhDMQ0KKyNkZWZpbmUgQVQ5MUNfVENCX1RDMlhDMlMgICAgICAgICAoMHgzIDw8ICA0KSAvLyAoVENCKSBFeHRlcm5hbCBDbG9jayBTaWduYWwgMiBTZWxlY3Rpb24NCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMyWEMyU19UQ0xLMiAgICAgICAgICAgICAgICAoMHgwIDw8ICA0KSAvLyAoVENCKSBUQ0xLMiBjb25uZWN0ZWQgdG8gWEMyDQorI2RlZmluZSAJQVQ5MUNfVENCX1RDMlhDMlNfTk9ORSAgICAgICAgICAgICAgICAgKDB4MSA8PCAgNCkgLy8gKFRDQikgTm9uZSBzaWduYWwgY29ubmVjdGVkIHRvIFhDMg0KKyNkZWZpbmUgCUFUOTFDX1RDQl9UQzJYQzJTX1RJT0EwICAgICAgICAgICAgICAgICgweDIgPDwgIDQpIC8vIChUQ0IpIFRJT0EwIGNvbm5lY3RlZCB0byBYQzINCisjZGVmaW5lIAlBVDkxQ19UQ0JfVEMyWEMyU19USU9BMSAgICAgICAgICAgICAgICAoMHgzIDw8ICA0KSAvLyAoVENCKSBUSU9BMiBjb25uZWN0ZWQgdG8gWEMyDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBDb250cm9sIEFyZWEgTmV0d29yayBNYWlsQm94IEludGVyZmFjZSAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19DQU5fTUIgc3RydWN0dXJlICoqKiAqLw0KLSNkZWZpbmUgQ0FOX01CX01NUiAgICAgICAgICAgICAgICAgICAgICAgKCAwICkgICAgICAgICAgICAvKiBNYWlsQm94IE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIENBTl9NQl9NQU0gICAgICAgICAgICAgICAgICAgICAgICggNCApICAgICAgICAgICAgLyogTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIENBTl9NQl9NSUQgICAgICAgICAgICAgICAgICAgICAgICggOCApICAgICAgICAgICAgLyogTWFpbEJveCBJRCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQ0FOX01CX01GSUQgICAgICAgICAgICAgICAgICAgICAgKCAxMiApICAgICAgICAgICAvKiBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQ0FOX01CX01TUiAgICAgICAgICAgICAgICAgICAgICAgKCAxNiApICAgICAgICAgICAvKiBNYWlsQm94IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQ0FOX01CX01ETCAgICAgICAgICAgICAgICAgICAgICAgKCAyMCApICAgICAgICAgICAvKiBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyICovDQotI2RlZmluZSBDQU5fTUJfTURIICAgICAgICAgICAgICAgICAgICAgICAoIDI0ICkgICAgICAgICAgIC8qIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyICovDQotI2RlZmluZSBDQU5fTUJfTUNSICAgICAgICAgICAgICAgICAgICAgICAoIDI4ICkgICAgICAgICAgIC8qIE1haWxCb3ggQ29udHJvbCBSZWdpc3RlciAqLw0KLS8qIC0tLS0tLS0tIENBTl9NTVIgOiAoQ0FOX01CIE9mZnNldDogMHgwKSBDQU4gTWVzc2FnZSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19DQU5fTVRJTUVNQVJLICAgICAgICAgICAgICAoIDB4RkZGRiA8PCAwICkgIC8qIChDQU5fTUIpIE1haWxib3ggVGltZW1hcmsgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9QUklPUiAgICAgICAgICAgICAgICAgICggMHhGIDw8IDE2ICkgICAgLyogKENBTl9NQikgTWFpbGJveCBQcmlvcml0eSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01PVCAgICAgICAgICAgICAgICAgICAgKCAweDcgPDwgMjQgKSAgICAvKiAoQ0FOX01CKSBNYWlsYm94IE9iamVjdCBUeXBlICovDQotI2RlZmluZSAgICAgQVQ5MUNfQ0FOX01PVF9ESVMgICAgICAgICAgICAoIDB4MCA8PCAyNCApICAgIC8qIChDQU5fTUIpICovDQotI2RlZmluZSAgICAgQVQ5MUNfQ0FOX01PVF9SWCAgICAgICAgICAgICAoIDB4MSA8PCAyNCApICAgIC8qIChDQU5fTUIpICovDQotI2RlZmluZSAgICAgQVQ5MUNfQ0FOX01PVF9SWE9WRVJXUklURSAgICAoIDB4MiA8PCAyNCApICAgIC8qIChDQU5fTUIpICovDQotI2RlZmluZSAgICAgQVQ5MUNfQ0FOX01PVF9UWCAgICAgICAgICAgICAoIDB4MyA8PCAyNCApICAgIC8qIChDQU5fTUIpICovDQotI2RlZmluZSAgICAgQVQ5MUNfQ0FOX01PVF9DT05TVU1FUiAgICAgICAoIDB4NCA8PCAyNCApICAgIC8qIChDQU5fTUIpICovDQotI2RlZmluZSAgICAgQVQ5MUNfQ0FOX01PVF9QUk9EVUNFUiAgICAgICAoIDB4NSA8PCAyNCApICAgIC8qIChDQU5fTUIpICovDQotLyogLS0tLS0tLS0gQ0FOX01BTSA6IChDQU5fTUIgT2Zmc2V0OiAweDQpIENBTiBNZXNzYWdlIEFjY2VwdGFuY2UgTWFzayBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01JRHZCICAgICAgICAgICAgICAgICAgKCAweDNGRkZGIDw8IDAgKSAvKiAoQ0FOX01CKSBDb21wbGVtZW50YXJ5IGJpdHMgZm9yIGlkZW50aWZpZXIgaW4gZXh0ZW5kZWQgbW9kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01JRHZBICAgICAgICAgICAgICAgICAgKCAweDdGRiA8PCAxOCApICAvKiAoQ0FOX01CKSBJZGVudGlmaWVyIGZvciBzdGFuZGFyZCBmcmFtZSBtb2RlICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUlERSAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAyOSApICAgIC8qIChDQU5fTUIpIElkZW50aWZpZXIgVmVyc2lvbiAqLw0KLS8qIC0tLS0tLS0tIENBTl9NSUQgOiAoQ0FOX01CIE9mZnNldDogMHg4KSBDQU4gTWVzc2FnZSBJRCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIENBTl9NRklEIDogKENBTl9NQiBPZmZzZXQ6IDB4YykgQ0FOIE1lc3NhZ2UgRmFtaWx5IElEIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQ0FOX01TUiA6IChDQU5fTUIgT2Zmc2V0OiAweDEwKSBDQU4gTWVzc2FnZSBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NVElNRVNUQU1QICAgICggMHhGRkZGIDw8IDAgKSAvKiAoQ0FOX01CKSBUaW1lciBWYWx1ZSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01ETEMgICAgICAgICAgKCAweEYgPDwgMTYgKSAgIC8qIChDQU5fTUIpIE1haWxib3ggRGF0YSBMZW5ndGggQ29kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01SVFIgICAgICAgICAgKCAweDEgPDwgMjAgKSAgIC8qIChDQU5fTUIpIE1haWxib3ggUmVtb3RlIFRyYW5zbWlzc2lvbiBSZXF1ZXN0ICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUFCVCAgICAgICAgICAoIDB4MSA8PCAyMiApICAgLyogKENBTl9NQikgTWFpbGJveCBNZXNzYWdlIEFib3J0ICovDQotI2RlZmluZSBBVDkxQ19DQU5fTVJEWSAgICAgICAgICAoIDB4MSA8PCAyMyApICAgLyogKENBTl9NQikgTWFpbGJveCBSZWFkeSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01NSSAgICAgICAgICAgKCAweDEgPDwgMjQgKSAgIC8qIChDQU5fTUIpIE1haWxib3ggTWVzc2FnZSBJZ25vcmVkICovDQotLyogLS0tLS0tLS0gQ0FOX01ETCA6IChDQU5fTUIgT2Zmc2V0OiAweDE0KSBDQU4gTWVzc2FnZSBEYXRhIExvdyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIENBTl9NREggOiAoQ0FOX01CIE9mZnNldDogMHgxOCkgQ0FOIE1lc3NhZ2UgRGF0YSBIaWdoIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQ0FOX01DUiA6IChDQU5fTUIgT2Zmc2V0OiAweDFjKSBDQU4gTWVzc2FnZSBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUFDUiAgICAoIDB4MSA8PCAyMiApICAgICAgIC8qIChDQU5fTUIpIEFib3J0IFJlcXVlc3QgZm9yIE1haWxib3ggKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NVENSICAgICggMHgxIDw8IDIzICkgICAgICAgLyogKENBTl9NQikgTWFpbGJveCBUcmFuc2ZlciBDb21tYW5kICovDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBDb250cm9sIEFyZWEgTmV0d29yayBNYWlsQm94IEludGVyZmFjZQ0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19DQU5fTUIgc3RydWN0dXJlICoqKg0KKyNkZWZpbmUgQ0FOX01CX01NUiAgICAgICggMCkgLy8gTWFpbEJveCBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBDQU5fTUJfTUFNICAgICAgKCA0KSAvLyBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQ0FOX01CX01JRCAgICAgICggOCkgLy8gTWFpbEJveCBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQ0FOX01CX01GSUQgICAgICgxMikgLy8gTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXINCisjZGVmaW5lIENBTl9NQl9NU1IgICAgICAoMTYpIC8vIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBDQU5fTUJfTURMICAgICAgKDIwKSAvLyBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyDQorI2RlZmluZSBDQU5fTUJfTURIICAgICAgKDI0KSAvLyBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3Rlcg0KKyNkZWZpbmUgQ0FOX01CX01DUiAgICAgICgyOCkgLy8gTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyDQorLy8gLS0tLS0tLS0gQ0FOX01NUiA6IChDQU5fTUIgT2Zmc2V0OiAweDApIENBTiBNZXNzYWdlIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DQU5fTVRJTUVNQVJLICAgICAgICgweEZGRkYgPDwgIDApIC8vIChDQU5fTUIpIE1haWxib3ggVGltZW1hcmsNCisjZGVmaW5lIEFUOTFDX0NBTl9QUklPUiAgICAgICAgICAgKDB4RiA8PCAxNikgLy8gKENBTl9NQikgTWFpbGJveCBQcmlvcml0eQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01PVCAgICAgICAgICAgICAoMHg3IDw8IDI0KSAvLyAoQ0FOX01CKSBNYWlsYm94IE9iamVjdCBUeXBlDQorI2RlZmluZSAJQVQ5MUNfQ0FOX01PVF9ESVMgICAgICAgICAgICAgICAgICAoMHgwIDw8IDI0KSAvLyAoQ0FOX01CKSANCisjZGVmaW5lIAlBVDkxQ19DQU5fTU9UX1JYICAgICAgICAgICAgICAgICAgICgweDEgPDwgMjQpIC8vIChDQU5fTUIpIA0KKyNkZWZpbmUgCUFUOTFDX0NBTl9NT1RfUlhPVkVSV1JJVEUgICAgICAgICAgKDB4MiA8PCAyNCkgLy8gKENBTl9NQikgDQorI2RlZmluZSAJQVQ5MUNfQ0FOX01PVF9UWCAgICAgICAgICAgICAgICAgICAoMHgzIDw8IDI0KSAvLyAoQ0FOX01CKSANCisjZGVmaW5lIAlBVDkxQ19DQU5fTU9UX0NPTlNVTUVSICAgICAgICAgICAgICgweDQgPDwgMjQpIC8vIChDQU5fTUIpIA0KKyNkZWZpbmUgCUFUOTFDX0NBTl9NT1RfUFJPRFVDRVIgICAgICAgICAgICAgKDB4NSA8PCAyNCkgLy8gKENBTl9NQikgDQorLy8gLS0tLS0tLS0gQ0FOX01BTSA6IChDQU5fTUIgT2Zmc2V0OiAweDQpIENBTiBNZXNzYWdlIEFjY2VwdGFuY2UgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0NBTl9NSUR2QiAgICAgICAgICAgKDB4M0ZGRkYgPDwgIDApIC8vIChDQU5fTUIpIENvbXBsZW1lbnRhcnkgYml0cyBmb3IgaWRlbnRpZmllciBpbiBleHRlbmRlZCBtb2RlDQorI2RlZmluZSBBVDkxQ19DQU5fTUlEdkEgICAgICAgICAgICgweDdGRiA8PCAxOCkgLy8gKENBTl9NQikgSWRlbnRpZmllciBmb3Igc3RhbmRhcmQgZnJhbWUgbW9kZQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01JREUgICAgICAgICAgICAoMHgxIDw8IDI5KSAvLyAoQ0FOX01CKSBJZGVudGlmaWVyIFZlcnNpb24NCisvLyAtLS0tLS0tLSBDQU5fTUlEIDogKENBTl9NQiBPZmZzZXQ6IDB4OCkgQ0FOIE1lc3NhZ2UgSUQgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQ0FOX01GSUQgOiAoQ0FOX01CIE9mZnNldDogMHhjKSBDQU4gTWVzc2FnZSBGYW1pbHkgSUQgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQ0FOX01TUiA6IChDQU5fTUIgT2Zmc2V0OiAweDEwKSBDQU4gTWVzc2FnZSBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DQU5fTVRJTUVTVEFNUCAgICAgICgweEZGRkYgPDwgIDApIC8vIChDQU5fTUIpIFRpbWVyIFZhbHVlDQorI2RlZmluZSBBVDkxQ19DQU5fTURMQyAgICAgICAgICAgICgweEYgPDwgMTYpIC8vIChDQU5fTUIpIE1haWxib3ggRGF0YSBMZW5ndGggQ29kZQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01SVFIgICAgICAgICAgICAoMHgxIDw8IDIwKSAvLyAoQ0FOX01CKSBNYWlsYm94IFJlbW90ZSBUcmFuc21pc3Npb24gUmVxdWVzdA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01BQlQgICAgICAgICAgICAoMHgxIDw8IDIyKSAvLyAoQ0FOX01CKSBNYWlsYm94IE1lc3NhZ2UgQWJvcnQNCisjZGVmaW5lIEFUOTFDX0NBTl9NUkRZICAgICAgICAgICAgKDB4MSA8PCAyMykgLy8gKENBTl9NQikgTWFpbGJveCBSZWFkeQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01NSSAgICAgICAgICAgICAoMHgxIDw8IDI0KSAvLyAoQ0FOX01CKSBNYWlsYm94IE1lc3NhZ2UgSWdub3JlZA0KKy8vIC0tLS0tLS0tIENBTl9NREwgOiAoQ0FOX01CIE9mZnNldDogMHgxNCkgQ0FOIE1lc3NhZ2UgRGF0YSBMb3cgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQ0FOX01ESCA6IChDQU5fTUIgT2Zmc2V0OiAweDE4KSBDQU4gTWVzc2FnZSBEYXRhIEhpZ2ggUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQ0FOX01DUiA6IChDQU5fTUIgT2Zmc2V0OiAweDFjKSBDQU4gTWVzc2FnZSBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01BQ1IgICAgICAgICAgICAoMHgxIDw8IDIyKSAvLyAoQ0FOX01CKSBBYm9ydCBSZXF1ZXN0IGZvciBNYWlsYm94DQorI2RlZmluZSBBVDkxQ19DQU5fTVRDUiAgICAgICAgICAgICgweDEgPDwgMjMpIC8vIChDQU5fTUIpIE1haWxib3ggVHJhbnNmZXIgQ29tbWFuZA0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQ29udHJvbCBBcmVhIE5ldHdvcmsgSW50ZXJmYWNlICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX0NBTiBzdHJ1Y3R1cmUgKioqICovDQotI2RlZmluZSBDQU5fTVIgICAgICAgICAgICAgICggMCApICAgICAgICAgLyogTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQ0FOX0lFUiAgICAgICAgICAgICAoIDQgKSAgICAgICAgIC8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIENBTl9JRFIgICAgICAgICAgICAgKCA4ICkgICAgICAgICAvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQ0FOX0lNUiAgICAgICAgICAgICAoIDEyICkgICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBDQU5fU1IgICAgICAgICAgICAgICggMTYgKSAgICAgICAgLyogU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBDQU5fQlIgICAgICAgICAgICAgICggMjAgKSAgICAgICAgLyogQmF1ZHJhdGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIENBTl9USU0gICAgICAgICAgICAgKCAyNCApICAgICAgICAvKiBUaW1lciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQ0FOX1RJTUVTVFAgICAgICAgICAoIDI4ICkgICAgICAgIC8qIFRpbWUgU3RhbXAgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIENBTl9FQ1IgICAgICAgICAgICAgKCAzMiApICAgICAgICAvKiBFcnJvciBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBDQU5fVENSICAgICAgICAgICAgICggMzYgKSAgICAgICAgLyogVHJhbnNmZXIgQ29tbWFuZCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQ0FOX0FDUiAgICAgICAgICAgICAoIDQwICkgICAgICAgIC8qIEFib3J0IENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIENBTl9WUiAgICAgICAgICAgICAgKCAyNTIgKSAgICAgICAvKiBWZXJzaW9uIFJlZ2lzdGVyICovDQotI2RlZmluZSBDQU5fTUIwICAgICAgICAgICAgICggNTEyICkgICAgICAgLyogQ0FOIE1haWxib3ggMCAqLw0KLSNkZWZpbmUgQ0FOX01CMSAgICAgICAgICAgICAoIDU0NCApICAgICAgIC8qIENBTiBNYWlsYm94IDEgKi8NCi0jZGVmaW5lIENBTl9NQjIgICAgICAgICAgICAgKCA1NzYgKSAgICAgICAvKiBDQU4gTWFpbGJveCAyICovDQotI2RlZmluZSBDQU5fTUIzICAgICAgICAgICAgICggNjA4ICkgICAgICAgLyogQ0FOIE1haWxib3ggMyAqLw0KLSNkZWZpbmUgQ0FOX01CNCAgICAgICAgICAgICAoIDY0MCApICAgICAgIC8qIENBTiBNYWlsYm94IDQgKi8NCi0jZGVmaW5lIENBTl9NQjUgICAgICAgICAgICAgKCA2NzIgKSAgICAgICAvKiBDQU4gTWFpbGJveCA1ICovDQotI2RlZmluZSBDQU5fTUI2ICAgICAgICAgICAgICggNzA0ICkgICAgICAgLyogQ0FOIE1haWxib3ggNiAqLw0KLSNkZWZpbmUgQ0FOX01CNyAgICAgICAgICAgICAoIDczNiApICAgICAgIC8qIENBTiBNYWlsYm94IDcgKi8NCi0jZGVmaW5lIENBTl9NQjggICAgICAgICAgICAgKCA3NjggKSAgICAgICAvKiBDQU4gTWFpbGJveCA4ICovDQotI2RlZmluZSBDQU5fTUI5ICAgICAgICAgICAgICggODAwICkgICAgICAgLyogQ0FOIE1haWxib3ggOSAqLw0KLSNkZWZpbmUgQ0FOX01CMTAgICAgICAgICAgICAoIDgzMiApICAgICAgIC8qIENBTiBNYWlsYm94IDEwICovDQotI2RlZmluZSBDQU5fTUIxMSAgICAgICAgICAgICggODY0ICkgICAgICAgLyogQ0FOIE1haWxib3ggMTEgKi8NCi0jZGVmaW5lIENBTl9NQjEyICAgICAgICAgICAgKCA4OTYgKSAgICAgICAvKiBDQU4gTWFpbGJveCAxMiAqLw0KLSNkZWZpbmUgQ0FOX01CMTMgICAgICAgICAgICAoIDkyOCApICAgICAgIC8qIENBTiBNYWlsYm94IDEzICovDQotI2RlZmluZSBDQU5fTUIxNCAgICAgICAgICAgICggOTYwICkgICAgICAgLyogQ0FOIE1haWxib3ggMTQgKi8NCi0jZGVmaW5lIENBTl9NQjE1ICAgICAgICAgICAgKCA5OTIgKSAgICAgICAvKiBDQU4gTWFpbGJveCAxNSAqLw0KLS8qIC0tLS0tLS0tIENBTl9NUiA6IChDQU4gT2Zmc2V0OiAweDApIENBTiBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19DQU5fQ0FORU4gICAgICggMHgxIDw8IDAgKSAgLyogKENBTikgQ0FOIENvbnRyb2xsZXIgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19DQU5fTFBNICAgICAgICggMHgxIDw8IDEgKSAgLyogKENBTikgRGlzYWJsZS9FbmFibGUgTG93IFBvd2VyIE1vZGUgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9BQk0gICAgICAgKCAweDEgPDwgMiApICAvKiAoQ0FOKSBEaXNhYmxlL0VuYWJsZSBBdXRvYmF1ZC9MaXN0ZW4gTW9kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX09WTCAgICAgICAoIDB4MSA8PCAzICkgIC8qIChDQU4pIERpc2FibGUvRW5hYmxlIE92ZXJsb2FkIEZyYW1lICovDQotI2RlZmluZSBBVDkxQ19DQU5fVEVPRiAgICAgICggMHgxIDw8IDQgKSAgLyogKENBTikgVGltZSBTdGFtcCBtZXNzYWdlcyBhdCBlYWNoIGVuZCBvZiBGcmFtZSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1RUTSAgICAgICAoIDB4MSA8PCA1ICkgIC8qIChDQU4pIERpc2FibGUvRW5hYmxlIFRpbWUgVHJpZ2dlciBNb2RlICovDQotI2RlZmluZSBBVDkxQ19DQU5fVElNRlJaICAgICggMHgxIDw8IDYgKSAgLyogKENBTikgRW5hYmxlIFRpbWVyIEZyZWV6ZSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX0RSUFQgICAgICAoIDB4MSA8PCA3ICkgIC8qIChDQU4pIERpc2FibGUgUmVwZWF0ICovDQotLyogLS0tLS0tLS0gQ0FOX0lFUiA6IChDQU4gT2Zmc2V0OiAweDQpIENBTiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIwICAgICAgICggMHgxIDw8IDAgKSAgLyogKENBTikgTWFpbGJveCAwIEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjEgICAgICAgKCAweDEgPDwgMSApICAvKiAoQ0FOKSBNYWlsYm94IDEgRmxhZyAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMiAgICAgICAoIDB4MSA8PCAyICkgIC8qIChDQU4pIE1haWxib3ggMiBGbGFnICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIzICAgICAgICggMHgxIDw8IDMgKSAgLyogKENBTikgTWFpbGJveCAzIEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjQgICAgICAgKCAweDEgPDwgNCApICAvKiAoQ0FOKSBNYWlsYm94IDQgRmxhZyAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CNSAgICAgICAoIDB4MSA8PCA1ICkgIC8qIChDQU4pIE1haWxib3ggNSBGbGFnICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI2ICAgICAgICggMHgxIDw8IDYgKSAgLyogKENBTikgTWFpbGJveCA2IEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjcgICAgICAgKCAweDEgPDwgNyApICAvKiAoQ0FOKSBNYWlsYm94IDcgRmxhZyAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01COCAgICAgICAoIDB4MSA8PCA4ICkgIC8qIChDQU4pIE1haWxib3ggOCBGbGFnICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI5ICAgICAgICggMHgxIDw8IDkgKSAgLyogKENBTikgTWFpbGJveCA5IEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjEwICAgICAgKCAweDEgPDwgMTAgKSAvKiAoQ0FOKSBNYWlsYm94IDEwIEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjExICAgICAgKCAweDEgPDwgMTEgKSAvKiAoQ0FOKSBNYWlsYm94IDExIEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjEyICAgICAgKCAweDEgPDwgMTIgKSAvKiAoQ0FOKSBNYWlsYm94IDEyIEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjEzICAgICAgKCAweDEgPDwgMTMgKSAvKiAoQ0FOKSBNYWlsYm94IDEzIEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjE0ICAgICAgKCAweDEgPDwgMTQgKSAvKiAoQ0FOKSBNYWlsYm94IDE0IEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjE1ICAgICAgKCAweDEgPDwgMTUgKSAvKiAoQ0FOKSBNYWlsYm94IDE1IEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9FUlJBICAgICAgKCAweDEgPDwgMTYgKSAvKiAoQ0FOKSBFcnJvciBBY3RpdmUgTW9kZSBGbGFnICovDQotI2RlZmluZSBBVDkxQ19DQU5fV0FSTiAgICAgICggMHgxIDw8IDE3ICkgLyogKENBTikgV2FybmluZyBMaW1pdCBGbGFnICovDQotI2RlZmluZSBBVDkxQ19DQU5fRVJSUCAgICAgICggMHgxIDw8IDE4ICkgLyogKENBTikgRXJyb3IgUGFzc2l2ZSBNb2RlIEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9CT0ZGICAgICAgKCAweDEgPDwgMTkgKSAvKiAoQ0FOKSBCdXMgT2ZmIE1vZGUgRmxhZyAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1NMRUVQICAgICAoIDB4MSA8PCAyMCApIC8qIChDQU4pIFNsZWVwIEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9XQUtFVVAgICAgKCAweDEgPDwgMjEgKSAvKiAoQ0FOKSBXYWtldXAgRmxhZyAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1RPVkYgICAgICAoIDB4MSA8PCAyMiApIC8qIChDQU4pIFRpbWVyIE92ZXJmbG93IEZsYWcgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9UU1RQICAgICAgKCAweDEgPDwgMjMgKSAvKiAoQ0FOKSBUaW1lc3RhbXAgRmxhZyAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX0NFUlIgICAgICAoIDB4MSA8PCAyNCApIC8qIChDQU4pIENSQyBFcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1NFUlIgICAgICAoIDB4MSA8PCAyNSApIC8qIChDQU4pIFN0dWZmaW5nIEVycm9yICovDQotI2RlZmluZSBBVDkxQ19DQU5fQUVSUiAgICAgICggMHgxIDw8IDI2ICkgLyogKENBTikgQWNrbm93bGVkZ21lbnQgRXJyb3IgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9GRVJSICAgICAgKCAweDEgPDwgMjcgKSAvKiAoQ0FOKSBGb3JtIEVycm9yICovDQotI2RlZmluZSBBVDkxQ19DQU5fQkVSUiAgICAgICggMHgxIDw8IDI4ICkgLyogKENBTikgQml0IEVycm9yICovDQotLyogLS0tLS0tLS0gQ0FOX0lEUiA6IChDQU4gT2Zmc2V0OiAweDgpIENBTiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIENBTl9JTVIgOiAoQ0FOIE9mZnNldDogMHhjKSBDQU4gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBDQU5fU1IgOiAoQ0FOIE9mZnNldDogMHgxMCkgQ0FOIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1JCU1kgICAgICAoIDB4MSA8PCAyOSApICAgICAvKiAoQ0FOKSBSZWNlaXZlciBCdXN5ICovDQotI2RlZmluZSBBVDkxQ19DQU5fVEJTWSAgICAgICggMHgxIDw8IDMwICkgICAgIC8qIChDQU4pIFRyYW5zbWl0dGVyIEJ1c3kgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9PVkxZICAgICAgKCAweDEgPDwgMzEgKSAgICAgLyogKENBTikgT3ZlcmxvYWQgQnVzeSAqLw0KLS8qIC0tLS0tLS0tIENBTl9CUiA6IChDQU4gT2Zmc2V0OiAweDE0KSBDQU4gQmF1ZHJhdGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9QSEFTRTIgICAgKCAweDcgPDwgMCApICAgICAgLyogKENBTikgUGhhc2UgMiBzZWdtZW50ICovDQotI2RlZmluZSBBVDkxQ19DQU5fUEhBU0UxICAgICggMHg3IDw8IDQgKSAgICAgIC8qIChDQU4pIFBoYXNlIDEgc2VnbWVudCAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1BST1BBRyAgICAoIDB4NyA8PCA4ICkgICAgICAvKiAoQ0FOKSBQcm9ncmFtbWF0aW9uIHRpbWUgc2VnbWVudCAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1NZTkMgICAgICAoIDB4MyA8PCAxMiApICAgICAvKiAoQ0FOKSBSZS1zeW5jaHJvbml6YXRpb24ganVtcCB3aWR0aCBzZWdtZW50ICovDQotI2RlZmluZSBBVDkxQ19DQU5fQlJQICAgICAgICggMHg3RiA8PCAxNiApICAgIC8qIChDQU4pIEJhdWRyYXRlIFByZXNjYWxlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1NNUCAgICAgICAoIDB4MSA8PCAyNCApICAgICAvKiAoQ0FOKSBTYW1wbGluZyBtb2RlICovDQotLyogLS0tLS0tLS0gQ0FOX1RJTSA6IChDQU4gT2Zmc2V0OiAweDE4KSBDQU4gVGltZXIgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9USU1FUiAgICAgKCAweEZGRkYgPDwgMCApICAgLyogKENBTikgVGltZXIgZmllbGQgKi8NCi0vKiAtLS0tLS0tLSBDQU5fVElNRVNUUCA6IChDQU4gT2Zmc2V0OiAweDFjKSBDQU4gVGltZXN0YW1wIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQ0FOX0VDUiA6IChDQU4gT2Zmc2V0OiAweDIwKSBDQU4gRXJyb3IgQ291bnRlciBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1JFQyAgICAgICAoIDB4RkYgPDwgMCApICAgICAvKiAoQ0FOKSBSZWNlaXZlIEVycm9yIENvdW50ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9URUMgICAgICAgKCAweEZGIDw8IDE2ICkgICAgLyogKENBTikgVHJhbnNtaXQgRXJyb3IgQ291bnRlciAqLw0KLS8qIC0tLS0tLS0tIENBTl9UQ1IgOiAoQ0FOIE9mZnNldDogMHgyNCkgQ0FOIFRyYW5zZmVyIENvbW1hbmQgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9USU1SU1QgICAgKCAweDEgPDwgMzEgKSAgICAgLyogKENBTikgVGltZXIgUmVzZXQgRmllbGQgKi8NCi0vKiAtLS0tLS0tLSBDQU5fQUNSIDogKENBTiBPZmZzZXQ6IDB4MjgpIENBTiBBYm9ydCBDb21tYW5kIFJlZ2lzdGVyIC0tLS0tLS0tICovDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBDb250cm9sIEFyZWEgTmV0d29yayBJbnRlcmZhY2UNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfQ0FOIHN0cnVjdHVyZSAqKioNCisjZGVmaW5lIENBTl9NUiAgICAgICAgICAoIDApIC8vIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIENBTl9JRVIgICAgICAgICAoIDQpIC8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIENBTl9JRFIgICAgICAgICAoIDgpIC8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBDQU5fSU1SICAgICAgICAgKDEyKSAvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQ0FOX1NSICAgICAgICAgICgxNikgLy8gU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBDQU5fQlIgICAgICAgICAgKDIwKSAvLyBCYXVkcmF0ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQ0FOX1RJTSAgICAgICAgICgyNCkgLy8gVGltZXIgUmVnaXN0ZXINCisjZGVmaW5lIENBTl9USU1FU1RQICAgICAoMjgpIC8vIFRpbWUgU3RhbXAgUmVnaXN0ZXINCisjZGVmaW5lIENBTl9FQ1IgICAgICAgICAoMzIpIC8vIEVycm9yIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIENBTl9UQ1IgICAgICAgICAoMzYpIC8vIFRyYW5zZmVyIENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIENBTl9BQ1IgICAgICAgICAoNDApIC8vIEFib3J0IENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIENBTl9WUiAgICAgICAgICAoMjUyKSAvLyBWZXJzaW9uIFJlZ2lzdGVyDQorI2RlZmluZSBDQU5fTUIwICAgICAgICAgKDUxMikgLy8gQ0FOIE1haWxib3ggMA0KKyNkZWZpbmUgQ0FOX01CMSAgICAgICAgICg1NDQpIC8vIENBTiBNYWlsYm94IDENCisjZGVmaW5lIENBTl9NQjIgICAgICAgICAoNTc2KSAvLyBDQU4gTWFpbGJveCAyDQorI2RlZmluZSBDQU5fTUIzICAgICAgICAgKDYwOCkgLy8gQ0FOIE1haWxib3ggMw0KKyNkZWZpbmUgQ0FOX01CNCAgICAgICAgICg2NDApIC8vIENBTiBNYWlsYm94IDQNCisjZGVmaW5lIENBTl9NQjUgICAgICAgICAoNjcyKSAvLyBDQU4gTWFpbGJveCA1DQorI2RlZmluZSBDQU5fTUI2ICAgICAgICAgKDcwNCkgLy8gQ0FOIE1haWxib3ggNg0KKyNkZWZpbmUgQ0FOX01CNyAgICAgICAgICg3MzYpIC8vIENBTiBNYWlsYm94IDcNCisjZGVmaW5lIENBTl9NQjggICAgICAgICAoNzY4KSAvLyBDQU4gTWFpbGJveCA4DQorI2RlZmluZSBDQU5fTUI5ICAgICAgICAgKDgwMCkgLy8gQ0FOIE1haWxib3ggOQ0KKyNkZWZpbmUgQ0FOX01CMTAgICAgICAgICg4MzIpIC8vIENBTiBNYWlsYm94IDEwDQorI2RlZmluZSBDQU5fTUIxMSAgICAgICAgKDg2NCkgLy8gQ0FOIE1haWxib3ggMTENCisjZGVmaW5lIENBTl9NQjEyICAgICAgICAoODk2KSAvLyBDQU4gTWFpbGJveCAxMg0KKyNkZWZpbmUgQ0FOX01CMTMgICAgICAgICg5MjgpIC8vIENBTiBNYWlsYm94IDEzDQorI2RlZmluZSBDQU5fTUIxNCAgICAgICAgKDk2MCkgLy8gQ0FOIE1haWxib3ggMTQNCisjZGVmaW5lIENBTl9NQjE1ICAgICAgICAoOTkyKSAvLyBDQU4gTWFpbGJveCAxNQ0KKy8vIC0tLS0tLS0tIENBTl9NUiA6IChDQU4gT2Zmc2V0OiAweDApIENBTiBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0NBTkVOICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoQ0FOKSBDQU4gQ29udHJvbGxlciBFbmFibGUNCisjZGVmaW5lIEFUOTFDX0NBTl9MUE0gICAgICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKENBTikgRGlzYWJsZS9FbmFibGUgTG93IFBvd2VyIE1vZGUNCisjZGVmaW5lIEFUOTFDX0NBTl9BQk0gICAgICAgICAgICAgKDB4MSA8PCAgMikgLy8gKENBTikgRGlzYWJsZS9FbmFibGUgQXV0b2JhdWQvTGlzdGVuIE1vZGUNCisjZGVmaW5lIEFUOTFDX0NBTl9PVkwgICAgICAgICAgICAgKDB4MSA8PCAgMykgLy8gKENBTikgRGlzYWJsZS9FbmFibGUgT3ZlcmxvYWQgRnJhbWUNCisjZGVmaW5lIEFUOTFDX0NBTl9URU9GICAgICAgICAgICAgKDB4MSA8PCAgNCkgLy8gKENBTikgVGltZSBTdGFtcCBtZXNzYWdlcyBhdCBlYWNoIGVuZCBvZiBGcmFtZQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1RUTSAgICAgICAgICAgICAoMHgxIDw8ICA1KSAvLyAoQ0FOKSBEaXNhYmxlL0VuYWJsZSBUaW1lIFRyaWdnZXIgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1RJTUZSWiAgICAgICAgICAoMHgxIDw8ICA2KSAvLyAoQ0FOKSBFbmFibGUgVGltZXIgRnJlZXplDQorI2RlZmluZSBBVDkxQ19DQU5fRFJQVCAgICAgICAgICAgICgweDEgPDwgIDcpIC8vIChDQU4pIERpc2FibGUgUmVwZWF0DQorLy8gLS0tLS0tLS0gQ0FOX0lFUiA6IChDQU4gT2Zmc2V0OiAweDQpIENBTiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMCAgICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoQ0FOKSBNYWlsYm94IDAgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMSAgICAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoQ0FOKSBNYWlsYm94IDEgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMiAgICAgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoQ0FOKSBNYWlsYm94IDIgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMyAgICAgICAgICAgICAoMHgxIDw8ICAzKSAvLyAoQ0FOKSBNYWlsYm94IDMgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNCAgICAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoQ0FOKSBNYWlsYm94IDQgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNSAgICAgICAgICAgICAoMHgxIDw8ICA1KSAvLyAoQ0FOKSBNYWlsYm94IDUgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNiAgICAgICAgICAgICAoMHgxIDw8ICA2KSAvLyAoQ0FOKSBNYWlsYm94IDYgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNyAgICAgICAgICAgICAoMHgxIDw8ICA3KSAvLyAoQ0FOKSBNYWlsYm94IDcgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01COCAgICAgICAgICAgICAoMHgxIDw8ICA4KSAvLyAoQ0FOKSBNYWlsYm94IDggRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01COSAgICAgICAgICAgICAoMHgxIDw8ICA5KSAvLyAoQ0FOKSBNYWlsYm94IDkgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMTAgICAgICAgICAgICAoMHgxIDw8IDEwKSAvLyAoQ0FOKSBNYWlsYm94IDEwIEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9NQjExICAgICAgICAgICAgKDB4MSA8PCAxMSkgLy8gKENBTikgTWFpbGJveCAxMSBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxMiAgICAgICAgICAgICgweDEgPDwgMTIpIC8vIChDQU4pIE1haWxib3ggMTIgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMTMgICAgICAgICAgICAoMHgxIDw8IDEzKSAvLyAoQ0FOKSBNYWlsYm94IDEzIEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9NQjE0ICAgICAgICAgICAgKDB4MSA8PCAxNCkgLy8gKENBTikgTWFpbGJveCAxNCBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxNSAgICAgICAgICAgICgweDEgPDwgMTUpIC8vIChDQU4pIE1haWxib3ggMTUgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0VSUkEgICAgICAgICAgICAoMHgxIDw8IDE2KSAvLyAoQ0FOKSBFcnJvciBBY3RpdmUgTW9kZSBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fV0FSTiAgICAgICAgICAgICgweDEgPDwgMTcpIC8vIChDQU4pIFdhcm5pbmcgTGltaXQgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0VSUlAgICAgICAgICAgICAoMHgxIDw8IDE4KSAvLyAoQ0FOKSBFcnJvciBQYXNzaXZlIE1vZGUgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0JPRkYgICAgICAgICAgICAoMHgxIDw8IDE5KSAvLyAoQ0FOKSBCdXMgT2ZmIE1vZGUgRmxhZw0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1NMRUVQICAgICAgICAgICAoMHgxIDw8IDIwKSAvLyAoQ0FOKSBTbGVlcCBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fV0FLRVVQICAgICAgICAgICgweDEgPDwgMjEpIC8vIChDQU4pIFdha2V1cCBGbGFnDQorI2RlZmluZSBBVDkxQ19DQU5fVE9WRiAgICAgICAgICAgICgweDEgPDwgMjIpIC8vIChDQU4pIFRpbWVyIE92ZXJmbG93IEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9UU1RQICAgICAgICAgICAgKDB4MSA8PCAyMykgLy8gKENBTikgVGltZXN0YW1wIEZsYWcNCisjZGVmaW5lIEFUOTFDX0NBTl9DRVJSICAgICAgICAgICAgKDB4MSA8PCAyNCkgLy8gKENBTikgQ1JDIEVycm9yDQorI2RlZmluZSBBVDkxQ19DQU5fU0VSUiAgICAgICAgICAgICgweDEgPDwgMjUpIC8vIChDQU4pIFN0dWZmaW5nIEVycm9yDQorI2RlZmluZSBBVDkxQ19DQU5fQUVSUiAgICAgICAgICAgICgweDEgPDwgMjYpIC8vIChDQU4pIEFja25vd2xlZGdtZW50IEVycm9yDQorI2RlZmluZSBBVDkxQ19DQU5fRkVSUiAgICAgICAgICAgICgweDEgPDwgMjcpIC8vIChDQU4pIEZvcm0gRXJyb3INCisjZGVmaW5lIEFUOTFDX0NBTl9CRVJSICAgICAgICAgICAgKDB4MSA8PCAyOCkgLy8gKENBTikgQml0IEVycm9yDQorLy8gLS0tLS0tLS0gQ0FOX0lEUiA6IChDQU4gT2Zmc2V0OiAweDgpIENBTiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBDQU5fSU1SIDogKENBTiBPZmZzZXQ6IDB4YykgQ0FOIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIENBTl9TUiA6IChDQU4gT2Zmc2V0OiAweDEwKSBDQU4gU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1JCU1kgICAgICAgICAgICAoMHgxIDw8IDI5KSAvLyAoQ0FOKSBSZWNlaXZlciBCdXN5DQorI2RlZmluZSBBVDkxQ19DQU5fVEJTWSAgICAgICAgICAgICgweDEgPDwgMzApIC8vIChDQU4pIFRyYW5zbWl0dGVyIEJ1c3kNCisjZGVmaW5lIEFUOTFDX0NBTl9PVkxZICAgICAgICAgICAgKDB4MSA8PCAzMSkgLy8gKENBTikgT3ZlcmxvYWQgQnVzeQ0KKy8vIC0tLS0tLS0tIENBTl9CUiA6IChDQU4gT2Zmc2V0OiAweDE0KSBDQU4gQmF1ZHJhdGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DQU5fUEhBU0UyICAgICAgICAgICgweDcgPDwgIDApIC8vIChDQU4pIFBoYXNlIDIgc2VnbWVudA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1BIQVNFMSAgICAgICAgICAoMHg3IDw8ICA0KSAvLyAoQ0FOKSBQaGFzZSAxIHNlZ21lbnQNCisjZGVmaW5lIEFUOTFDX0NBTl9QUk9QQUcgICAgICAgICAgKDB4NyA8PCAgOCkgLy8gKENBTikgUHJvZ3JhbW1hdGlvbiB0aW1lIHNlZ21lbnQNCisjZGVmaW5lIEFUOTFDX0NBTl9TWU5DICAgICAgICAgICAgKDB4MyA8PCAxMikgLy8gKENBTikgUmUtc3luY2hyb25pemF0aW9uIGp1bXAgd2lkdGggc2VnbWVudA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0JSUCAgICAgICAgICAgICAoMHg3RiA8PCAxNikgLy8gKENBTikgQmF1ZHJhdGUgUHJlc2NhbGVyDQorI2RlZmluZSBBVDkxQ19DQU5fU01QICAgICAgICAgICAgICgweDEgPDwgMjQpIC8vIChDQU4pIFNhbXBsaW5nIG1vZGUNCisvLyAtLS0tLS0tLSBDQU5fVElNIDogKENBTiBPZmZzZXQ6IDB4MTgpIENBTiBUaW1lciBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0NBTl9USU1FUiAgICAgICAgICAgKDB4RkZGRiA8PCAgMCkgLy8gKENBTikgVGltZXIgZmllbGQNCisvLyAtLS0tLS0tLSBDQU5fVElNRVNUUCA6IChDQU4gT2Zmc2V0OiAweDFjKSBDQU4gVGltZXN0YW1wIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIENBTl9FQ1IgOiAoQ0FOIE9mZnNldDogMHgyMCkgQ0FOIEVycm9yIENvdW50ZXIgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19DQU5fUkVDICAgICAgICAgICAgICgweEZGIDw8ICAwKSAvLyAoQ0FOKSBSZWNlaXZlIEVycm9yIENvdW50ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9URUMgICAgICAgICAgICAgKDB4RkYgPDwgMTYpIC8vIChDQU4pIFRyYW5zbWl0IEVycm9yIENvdW50ZXINCisvLyAtLS0tLS0tLSBDQU5fVENSIDogKENBTiBPZmZzZXQ6IDB4MjQpIENBTiBUcmFuc2ZlciBDb21tYW5kIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1RJTVJTVCAgICAgICAgICAoMHgxIDw8IDMxKSAvLyAoQ0FOKSBUaW1lciBSZXNldCBGaWVsZA0KKy8vIC0tLS0tLS0tIENBTl9BQ1IgOiAoQ0FOIE9mZnNldDogMHgyOCkgQ0FOIEFib3J0IENvbW1hbmQgUmVnaXN0ZXIgLS0tLS0tLS0gDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBFdGhlcm5ldCBNQUMgMTAvMTAwICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX0VNQUMgc3RydWN0dXJlICoqKiAqLw0KLSNkZWZpbmUgRU1BQ19OQ1IgICAgICAgICAgICAgICAgICAgICAgICAoIDAgKSAgICAgICAgIC8qIE5ldHdvcmsgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgRU1BQ19OQ0ZHUiAgICAgICAgICAgICAgICAgICAgICAoIDQgKSAgICAgICAgIC8qIE5ldHdvcmsgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLw0KLSNkZWZpbmUgRU1BQ19OU1IgICAgICAgICAgICAgICAgICAgICAgICAoIDggKSAgICAgICAgIC8qIE5ldHdvcmsgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBFTUFDX1RTUiAgICAgICAgICAgICAgICAgICAgICAgICggMjAgKSAgICAgICAgLyogVHJhbnNtaXQgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBFTUFDX1JCUVAgICAgICAgICAgICAgICAgICAgICAgICggMjQgKSAgICAgICAgLyogUmVjZWl2ZSBCdWZmZXIgUXVldWUgUG9pbnRlciAqLw0KLSNkZWZpbmUgRU1BQ19UQlFQICAgICAgICAgICAgICAgICAgICAgICAoIDI4ICkgICAgICAgIC8qIFRyYW5zbWl0IEJ1ZmZlciBRdWV1ZSBQb2ludGVyICovDQotI2RlZmluZSBFTUFDX1JTUiAgICAgICAgICAgICAgICAgICAgICAgICggMzIgKSAgICAgICAgLyogUmVjZWl2ZSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEVNQUNfSVNSICAgICAgICAgICAgICAgICAgICAgICAgKCAzNiApICAgICAgICAvKiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBFTUFDX0lFUiAgICAgICAgICAgICAgICAgICAgICAgICggNDAgKSAgICAgICAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgRU1BQ19JRFIgICAgICAgICAgICAgICAgICAgICAgICAoIDQ0ICkgICAgICAgIC8qIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBFTUFDX0lNUiAgICAgICAgICAgICAgICAgICAgICAgICggNDggKSAgICAgICAgLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEVNQUNfTUFOICAgICAgICAgICAgICAgICAgICAgICAgKCA1MiApICAgICAgICAvKiBQSFkgTWFpbnRlbmFuY2UgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEVNQUNfUFRSICAgICAgICAgICAgICAgICAgICAgICAgKCA1NiApICAgICAgICAvKiBQYXVzZSBUaW1lIFJlZ2lzdGVyICovDQotI2RlZmluZSBFTUFDX1BGUiAgICAgICAgICAgICAgICAgICAgICAgICggNjAgKSAgICAgICAgLyogUGF1c2UgRnJhbWVzIHJlY2VpdmVkIFJlZ2lzdGVyICovDQotI2RlZmluZSBFTUFDX0ZUTyAgICAgICAgICAgICAgICAgICAgICAgICggNjQgKSAgICAgICAgLyogRnJhbWVzIFRyYW5zbWl0dGVkIE9LIFJlZ2lzdGVyICovDQotI2RlZmluZSBFTUFDX1NDRiAgICAgICAgICAgICAgICAgICAgICAgICggNjggKSAgICAgICAgLyogU2luZ2xlIENvbGxpc2lvbiBGcmFtZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgRU1BQ19NQ0YgICAgICAgICAgICAgICAgICAgICAgICAoIDcyICkgICAgICAgIC8qIE11bHRpcGxlIENvbGxpc2lvbiBGcmFtZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgRU1BQ19GUk8gICAgICAgICAgICAgICAgICAgICAgICAoIDc2ICkgICAgICAgIC8qIEZyYW1lcyBSZWNlaXZlZCBPSyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgRU1BQ19GQ1NFICAgICAgICAgICAgICAgICAgICAgICAoIDgwICkgICAgICAgIC8qIEZyYW1lIENoZWNrIFNlcXVlbmNlIEVycm9yIFJlZ2lzdGVyICovDQotI2RlZmluZSBFTUFDX0FMRSAgICAgICAgICAgICAgICAgICAgICAgICggODQgKSAgICAgICAgLyogQWxpZ25tZW50IEVycm9yIFJlZ2lzdGVyICovDQotI2RlZmluZSBFTUFDX0RURiAgICAgICAgICAgICAgICAgICAgICAgICggODggKSAgICAgICAgLyogRGVmZXJyZWQgVHJhbnNtaXNzaW9uIEZyYW1lIFJlZ2lzdGVyICovDQotI2RlZmluZSBFTUFDX0xDT0wgICAgICAgICAgICAgICAgICAgICAgICggOTIgKSAgICAgICAgLyogTGF0ZSBDb2xsaXNpb24gUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEVNQUNfRUNPTCAgICAgICAgICAgICAgICAgICAgICAgKCA5NiApICAgICAgICAvKiBFeGNlc3NpdmUgQ29sbGlzaW9uIFJlZ2lzdGVyICovDQotI2RlZmluZSBFTUFDX1RVTkQgICAgICAgICAgICAgICAgICAgICAgICggMTAwICkgICAgICAgLyogVHJhbnNtaXQgVW5kZXJydW4gRXJyb3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEVNQUNfQ1NFICAgICAgICAgICAgICAgICAgICAgICAgKCAxMDQgKSAgICAgICAvKiBDYXJyaWVyIFNlbnNlIEVycm9yIFJlZ2lzdGVyICovDQotI2RlZmluZSBFTUFDX1JSRSAgICAgICAgICAgICAgICAgICAgICAgICggMTA4ICkgICAgICAgLyogUmVjZWl2ZSBSZXNzb3VyY2UgRXJyb3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEVNQUNfUk9WICAgICAgICAgICAgICAgICAgICAgICAgKCAxMTIgKSAgICAgICAvKiBSZWNlaXZlIE92ZXJydW4gRXJyb3JzIFJlZ2lzdGVyICovDQotI2RlZmluZSBFTUFDX1JTRSAgICAgICAgICAgICAgICAgICAgICAgICggMTE2ICkgICAgICAgLyogUmVjZWl2ZSBTeW1ib2wgRXJyb3JzIFJlZ2lzdGVyICovDQotI2RlZmluZSBFTUFDX0VMRSAgICAgICAgICAgICAgICAgICAgICAgICggMTIwICkgICAgICAgLyogRXhjZXNzaXZlIExlbmd0aCBFcnJvcnMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEVNQUNfUkpBICAgICAgICAgICAgICAgICAgICAgICAgKCAxMjQgKSAgICAgICAvKiBSZWNlaXZlIEphYmJlcnMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEVNQUNfVVNGICAgICAgICAgICAgICAgICAgICAgICAgKCAxMjggKSAgICAgICAvKiBVbmRlcnNpemUgRnJhbWVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBFTUFDX1NURSAgICAgICAgICAgICAgICAgICAgICAgICggMTMyICkgICAgICAgLyogU1FFIFRlc3QgRXJyb3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEVNQUNfUkxFICAgICAgICAgICAgICAgICAgICAgICAgKCAxMzYgKSAgICAgICAvKiBSZWNlaXZlIExlbmd0aCBGaWVsZCBNaXNtYXRjaCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgRU1BQ19UUEYgICAgICAgICAgICAgICAgICAgICAgICAoIDE0MCApICAgICAgIC8qIFRyYW5zbWl0dGVkIFBhdXNlIEZyYW1lcyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgRU1BQ19IUkIgICAgICAgICAgICAgICAgICAgICAgICAoIDE0NCApICAgICAgIC8qIEhhc2ggQWRkcmVzcyBCb3R0b21bMzE6MF0gKi8NCi0jZGVmaW5lIEVNQUNfSFJUICAgICAgICAgICAgICAgICAgICAgICAgKCAxNDggKSAgICAgICAvKiBIYXNoIEFkZHJlc3MgVG9wWzYzOjMyXSAqLw0KLSNkZWZpbmUgRU1BQ19TQTFMICAgICAgICAgICAgICAgICAgICAgICAoIDE1MiApICAgICAgIC8qIFNwZWNpZmljIEFkZHJlc3MgMSBCb3R0b20sIEZpcnN0IDQgYnl0ZXMgKi8NCi0jZGVmaW5lIEVNQUNfU0ExSCAgICAgICAgICAgICAgICAgICAgICAgKCAxNTYgKSAgICAgICAvKiBTcGVjaWZpYyBBZGRyZXNzIDEgVG9wLCBMYXN0IDIgYnl0ZXMgKi8NCi0jZGVmaW5lIEVNQUNfU0EyTCAgICAgICAgICAgICAgICAgICAgICAgKCAxNjAgKSAgICAgICAvKiBTcGVjaWZpYyBBZGRyZXNzIDIgQm90dG9tLCBGaXJzdCA0IGJ5dGVzICovDQotI2RlZmluZSBFTUFDX1NBMkggICAgICAgICAgICAgICAgICAgICAgICggMTY0ICkgICAgICAgLyogU3BlY2lmaWMgQWRkcmVzcyAyIFRvcCwgTGFzdCAyIGJ5dGVzICovDQotI2RlZmluZSBFTUFDX1NBM0wgICAgICAgICAgICAgICAgICAgICAgICggMTY4ICkgICAgICAgLyogU3BlY2lmaWMgQWRkcmVzcyAzIEJvdHRvbSwgRmlyc3QgNCBieXRlcyAqLw0KLSNkZWZpbmUgRU1BQ19TQTNIICAgICAgICAgICAgICAgICAgICAgICAoIDE3MiApICAgICAgIC8qIFNwZWNpZmljIEFkZHJlc3MgMyBUb3AsIExhc3QgMiBieXRlcyAqLw0KLSNkZWZpbmUgRU1BQ19TQTRMICAgICAgICAgICAgICAgICAgICAgICAoIDE3NiApICAgICAgIC8qIFNwZWNpZmljIEFkZHJlc3MgNCBCb3R0b20sIEZpcnN0IDQgYnl0ZXMgKi8NCi0jZGVmaW5lIEVNQUNfU0E0SCAgICAgICAgICAgICAgICAgICAgICAgKCAxODAgKSAgICAgICAvKiBTcGVjaWZpYyBBZGRyZXNzIDQgVG9wLCBMYXN0IDIgYnl0ZXMgKi8NCi0jZGVmaW5lIEVNQUNfVElEICAgICAgICAgICAgICAgICAgICAgICAgKCAxODQgKSAgICAgICAvKiBUeXBlIElEIENoZWNraW5nIFJlZ2lzdGVyICovDQotI2RlZmluZSBFTUFDX1RQUSAgICAgICAgICAgICAgICAgICAgICAgICggMTg4ICkgICAgICAgLyogVHJhbnNtaXQgUGF1c2UgUXVhbnR1bSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgRU1BQ19VU1JJTyAgICAgICAgICAgICAgICAgICAgICAoIDE5MiApICAgICAgIC8qIFVTRVIgSW5wdXQvT3V0cHV0IFJlZ2lzdGVyICovDQotI2RlZmluZSBFTUFDX1dPTCAgICAgICAgICAgICAgICAgICAgICAgICggMTk2ICkgICAgICAgLyogV2FrZSBPbiBMQU4gUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEVNQUNfUkVWICAgICAgICAgICAgICAgICAgICAgICAgKCAyNTIgKSAgICAgICAvKiBSZXZpc2lvbiBSZWdpc3RlciAqLw0KLS8qIC0tLS0tLS0tIEVNQUNfTkNSIDogKEVNQUMgT2Zmc2V0OiAweDApICAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19MQiAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAwICkgIC8qIChFTUFDKSBMb29wYmFjay4gT3B0aW9uYWwuIFdoZW4gc2V0LCBsb29wYmFjayBzaWduYWwgaXMgYXQgaGlnaCBsZXZlbC4gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfTExCICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMSApICAvKiAoRU1BQykgTG9vcGJhY2sgbG9jYWwuICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1JFICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDIgKSAgLyogKEVNQUMpIFJlY2VpdmUgZW5hYmxlLiAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19URSAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAzICkgIC8qIChFTUFDKSBUcmFuc21pdCBlbmFibGUuICovDQotI2RlZmluZSBBVDkxQ19FTUFDX01QRSAgICAgICAgICAgICAgICAgICggMHgxIDw8IDQgKSAgLyogKEVNQUMpIE1hbmFnZW1lbnQgcG9ydCBlbmFibGUuICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0NMUlNUQVQgICAgICAgICAgICAgICggMHgxIDw8IDUgKSAgLyogKEVNQUMpIENsZWFyIHN0YXRpc3RpY3MgcmVnaXN0ZXJzLiAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19JTkNTVEFUICAgICAgICAgICAgICAoIDB4MSA8PCA2ICkgIC8qIChFTUFDKSBJbmNyZW1lbnQgc3RhdGlzdGljcyByZWdpc3RlcnMuICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1dFU1RBVCAgICAgICAgICAgICAgICggMHgxIDw8IDcgKSAgLyogKEVNQUMpIFdyaXRlIGVuYWJsZSBmb3Igc3RhdGlzdGljcyByZWdpc3RlcnMuICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0JQICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDggKSAgLyogKEVNQUMpIEJhY2sgcHJlc3N1cmUuICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1RTVEFSVCAgICAgICAgICAgICAgICggMHgxIDw8IDkgKSAgLyogKEVNQUMpIFN0YXJ0IFRyYW5zbWlzc2lvbi4gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfVEhBTFQgICAgICAgICAgICAgICAgKCAweDEgPDwgMTAgKSAvKiAoRU1BQykgVHJhbnNtaXNzaW9uIEhhbHQuICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1RQRlIgICAgICAgICAgICAgICAgICggMHgxIDw8IDExICkgLyogKEVNQUMpIFRyYW5zbWl0IHBhdXNlIGZyYW1lICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1RaUSAgICAgICAgICAgICAgICAgICggMHgxIDw8IDEyICkgLyogKEVNQUMpIFRyYW5zbWl0IHplcm8gcXVhbnR1bSBwYXVzZSBmcmFtZSAqLw0KLS8qIC0tLS0tLS0tIEVNQUNfTkNGR1IgOiAoRU1BQyBPZmZzZXQ6IDB4NCkgTmV0d29yayBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1NQRCAgICAgICAgICAgICAgICAgICggMHgxIDw8IDAgKSAgLyogKEVNQUMpIFNwZWVkLiAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19GRCAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxICkgIC8qIChFTUFDKSBGdWxsIGR1cGxleC4gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfSkZSQU1FICAgICAgICAgICAgICAgKCAweDEgPDwgMyApICAvKiAoRU1BQykgSnVtYm8gRnJhbWVzLiAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19DQUYgICAgICAgICAgICAgICAgICAoIDB4MSA8PCA0ICkgIC8qIChFTUFDKSBDb3B5IGFsbCBmcmFtZXMuICovDQotI2RlZmluZSBBVDkxQ19FTUFDX05CQyAgICAgICAgICAgICAgICAgICggMHgxIDw8IDUgKSAgLyogKEVNQUMpIE5vIGJyb2FkY2FzdC4gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfTVRJICAgICAgICAgICAgICAgICAgKCAweDEgPDwgNiApICAvKiAoRU1BQykgTXVsdGljYXN0IGhhc2ggZXZlbnQgZW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1VOSSAgICAgICAgICAgICAgICAgICggMHgxIDw8IDcgKSAgLyogKEVNQUMpIFVuaWNhc3QgaGFzaCBlbmFibGUuICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0JJRyAgICAgICAgICAgICAgICAgICggMHgxIDw8IDggKSAgLyogKEVNQUMpIFJlY2VpdmUgMTUyMiBieXRlcy4gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfRUFFICAgICAgICAgICAgICAgICAgKCAweDEgPDwgOSApICAvKiAoRU1BQykgRXh0ZXJuYWwgYWRkcmVzcyBtYXRjaCBlbmFibGUuICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0NMSyAgICAgICAgICAgICAgICAgICggMHgzIDw8IDEwICkgLyogKEVNQUMpICovDQotI2RlZmluZSAgICAgQVQ5MUNfRU1BQ19DTEtfSENMS184ICAgICAgICggMHgwIDw8IDEwICkgLyogKEVNQUMpIEhDTEsgZGl2aWRlZCBieSA4ICovDQotI2RlZmluZSAgICAgQVQ5MUNfRU1BQ19DTEtfSENMS18xNiAgICAgICggMHgxIDw8IDEwICkgLyogKEVNQUMpIEhDTEsgZGl2aWRlZCBieSAxNiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0VNQUNfQ0xLX0hDTEtfMzIgICAgICAoIDB4MiA8PCAxMCApIC8qIChFTUFDKSBIQ0xLIGRpdmlkZWQgYnkgMzIgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19FTUFDX0NMS19IQ0xLXzY0ICAgICAgKCAweDMgPDwgMTAgKSAvKiAoRU1BQykgSENMSyBkaXZpZGVkIGJ5IDY0ICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1JUWSAgICAgICAgICAgICAgICAgICggMHgxIDw8IDEyICkgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1BBRSAgICAgICAgICAgICAgICAgICggMHgxIDw8IDEzICkgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1JCT0YgICAgICAgICAgICAgICAgICggMHgzIDw8IDE0ICkgLyogKEVNQUMpICovDQotI2RlZmluZSAgICAgQVQ5MUNfRU1BQ19SQk9GX09GRlNFVF8wICAgICggMHgwIDw8IDE0ICkgLyogKEVNQUMpIG5vIG9mZnNldCBmcm9tIHN0YXJ0IG9mIHJlY2VpdmUgYnVmZmVyICovDQotI2RlZmluZSAgICAgQVQ5MUNfRU1BQ19SQk9GX09GRlNFVF8xICAgICggMHgxIDw8IDE0ICkgLyogKEVNQUMpIG9uZSBieXRlIG9mZnNldCBmcm9tIHN0YXJ0IG9mIHJlY2VpdmUgYnVmZmVyICovDQotI2RlZmluZSAgICAgQVQ5MUNfRU1BQ19SQk9GX09GRlNFVF8yICAgICggMHgyIDw8IDE0ICkgLyogKEVNQUMpIHR3byBieXRlcyBvZmZzZXQgZnJvbSBzdGFydCBvZiByZWNlaXZlIGJ1ZmZlciAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0VNQUNfUkJPRl9PRkZTRVRfMyAgICAoIDB4MyA8PCAxNCApIC8qIChFTUFDKSB0aHJlZSBieXRlcyBvZmZzZXQgZnJvbSBzdGFydCBvZiByZWNlaXZlIGJ1ZmZlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19STENFICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxNiApIC8qIChFTUFDKSBSZWNlaXZlIExlbmd0aCBmaWVsZCBDaGVja2luZyBFbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfRFJGQ1MgICAgICAgICAgICAgICAgKCAweDEgPDwgMTcgKSAvKiAoRU1BQykgRGlzY2FyZCBSZWNlaXZlIEZDUyAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19FRlJIRCAgICAgICAgICAgICAgICAoIDB4MSA8PCAxOCApIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19JUlhGQ1MgICAgICAgICAgICAgICAoIDB4MSA8PCAxOSApIC8qIChFTUFDKSBJZ25vcmUgUlggRkNTICovDQotLyogLS0tLS0tLS0gRU1BQ19OU1IgOiAoRU1BQyBPZmZzZXQ6IDB4OCkgTmV0d29yayBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfTElOS1IgICAgICAgICAgICAgICAgKCAweDEgPDwgMCApICAvKiAoRU1BQykgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfTURJTyAgICAgICAgICAgICAgICAgKCAweDEgPDwgMSApICAvKiAoRU1BQykgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfSURMRSAgICAgICAgICAgICAgICAgKCAweDEgPDwgMiApICAvKiAoRU1BQykgKi8NCi0vKiAtLS0tLS0tLSBFTUFDX1RTUiA6IChFTUFDIE9mZnNldDogMHgxNCkgVHJhbnNtaXQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1VCUiAgICAgICAgICAgICAgICAgICggMHgxIDw8IDAgKSAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0NPTCAgICAgICAgICAgICAgICAgICggMHgxIDw8IDEgKSAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1JMRVMgICAgICAgICAgICAgICAgICggMHgxIDw8IDIgKSAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1RHTyAgICAgICAgICAgICAgICAgICggMHgxIDw8IDMgKSAgLyogKEVNQUMpIFRyYW5zbWl0IEdvICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0JFWCAgICAgICAgICAgICAgICAgICggMHgxIDw8IDQgKSAgLyogKEVNQUMpIEJ1ZmZlcnMgZXhoYXVzdGVkIG1pZCBmcmFtZSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19DT01QICAgICAgICAgICAgICAgICAoIDB4MSA8PCA1ICkgIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19VTkQgICAgICAgICAgICAgICAgICAoIDB4MSA8PCA2ICkgIC8qIChFTUFDKSAqLw0KLS8qIC0tLS0tLS0tIEVNQUNfUlNSIDogKEVNQUMgT2Zmc2V0OiAweDIwKSBSZWNlaXZlIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19CTkEgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAwICkgIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19SRUMgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxICkgIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19PVlIgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAyICkgIC8qIChFTUFDKSAqLw0KLS8qIC0tLS0tLS0tIEVNQUNfSVNSIDogKEVNQUMgT2Zmc2V0OiAweDI0KSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19FTUFDX01GRCAgICAgICAgICAgICAgICAgICggMHgxIDw8IDAgKSAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1JDT01QICAgICAgICAgICAgICAgICggMHgxIDw8IDEgKSAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1JYVUJSICAgICAgICAgICAgICAgICggMHgxIDw8IDIgKSAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1RYVUJSICAgICAgICAgICAgICAgICggMHgxIDw8IDMgKSAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1RVTkRSICAgICAgICAgICAgICAgICggMHgxIDw8IDQgKSAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1JMRVggICAgICAgICAgICAgICAgICggMHgxIDw8IDUgKSAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1RYRVJSICAgICAgICAgICAgICAgICggMHgxIDw8IDYgKSAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1RDT01QICAgICAgICAgICAgICAgICggMHgxIDw8IDcgKSAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0xJTksgICAgICAgICAgICAgICAgICggMHgxIDw8IDkgKSAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1JPVlIgICAgICAgICAgICAgICAgICggMHgxIDw8IDEwICkgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0hSRVNQICAgICAgICAgICAgICAgICggMHgxIDw8IDExICkgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1BGUkUgICAgICAgICAgICAgICAgICggMHgxIDw8IDEyICkgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1BUWiAgICAgICAgICAgICAgICAgICggMHgxIDw8IDEzICkgLyogKEVNQUMpICovDQotLyogLS0tLS0tLS0gRU1BQ19JRVIgOiAoRU1BQyBPZmZzZXQ6IDB4MjgpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBFTUFDX0lEUiA6IChFTUFDIE9mZnNldDogMHgyYykgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBFTUFDX0lNUiA6IChFTUFDIE9mZnNldDogMHgzMCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBFTUFDX01BTiA6IChFTUFDIE9mZnNldDogMHgzNCkgUEhZIE1haW50ZW5hbmNlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0RBVEEgICAgICAgKCAweEZGRkYgPDwgMCApICAvKiAoRU1BQykgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfQ09ERSAgICAgICAoIDB4MyA8PCAxNiApICAgIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19SRUdBICAgICAgICggMHgxRiA8PCAxOCApICAgLyogKEVNQUMpICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1BIWUEgICAgICAgKCAweDFGIDw8IDIzICkgICAvKiAoRU1BQykgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfUlcgICAgICAgICAoIDB4MyA8PCAyOCApICAgIC8qIChFTUFDKSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19TT0YgICAgICAgICggMHgzIDw8IDMwICkgICAgLyogKEVNQUMpICovDQotLyogLS0tLS0tLS0gRU1BQ19VU1JJTyA6IChFTUFDIE9mZnNldDogMHhjMCkgVVNFUiBJbnB1dCBPdXRwdXQgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfUk1JSSAgICAgICAoIDB4MSA8PCAwICkgICAgIC8qIChFTUFDKSBSZWR1Y2UgTUlJICovDQotLyogLS0tLS0tLS0gRU1BQ19XT0wgOiAoRU1BQyBPZmZzZXQ6IDB4YzQpIFdha2UgT24gTEFOIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0lQICAgICAgICAgKCAweEZGRkYgPDwgMCApICAvKiAoRU1BQykgQVJQIHJlcXVlc3QgSVAgYWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19NQUcgICAgICAgICggMHgxIDw8IDE2ICkgICAgLyogKEVNQUMpIE1hZ2ljIHBhY2tldCBldmVudCBlbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfQVJQICAgICAgICAoIDB4MSA8PCAxNyApICAgIC8qIChFTUFDKSBBUlAgcmVxdWVzdCBldmVudCBlbmFibGUgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfU0ExICAgICAgICAoIDB4MSA8PCAxOCApICAgIC8qIChFTUFDKSBTcGVjaWZpYyBhZGRyZXNzIHJlZ2lzdGVyIDEgZXZlbnQgZW5hYmxlICovDQotLyogLS0tLS0tLS0gRU1BQ19SRVYgOiAoRU1BQyBPZmZzZXQ6IDB4ZmMpIFJldmlzaW9uIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1JFVlJFRiAgICAgKCAweEZGRkYgPDwgMCApICAvKiAoRU1BQykgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfUEFSVFJFRiAgICAoIDB4RkZGRiA8PCAxNiApIC8qIChFTUFDKSAqLw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgRXRoZXJuZXQgTUFDIDEwLzEwMA0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19FTUFDIHN0cnVjdHVyZSAqKioNCisjZGVmaW5lIEVNQUNfTkNSICAgICAgICAoIDApIC8vIE5ldHdvcmsgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgRU1BQ19OQ0ZHUiAgICAgICggNCkgLy8gTmV0d29yayBDb25maWd1cmF0aW9uIFJlZ2lzdGVyDQorI2RlZmluZSBFTUFDX05TUiAgICAgICAgKCA4KSAvLyBOZXR3b3JrIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgRU1BQ19UU1IgICAgICAgICgyMCkgLy8gVHJhbnNtaXQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBFTUFDX1JCUVAgICAgICAgKDI0KSAvLyBSZWNlaXZlIEJ1ZmZlciBRdWV1ZSBQb2ludGVyDQorI2RlZmluZSBFTUFDX1RCUVAgICAgICAgKDI4KSAvLyBUcmFuc21pdCBCdWZmZXIgUXVldWUgUG9pbnRlcg0KKyNkZWZpbmUgRU1BQ19SU1IgICAgICAgICgzMikgLy8gUmVjZWl2ZSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEVNQUNfSVNSICAgICAgICAoMzYpIC8vIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEVNQUNfSUVSICAgICAgICAoNDApIC8vIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEVNQUNfSURSICAgICAgICAoNDQpIC8vIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBFTUFDX0lNUiAgICAgICAgKDQ4KSAvLyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgRU1BQ19NQU4gICAgICAgICg1MikgLy8gUEhZIE1haW50ZW5hbmNlIFJlZ2lzdGVyDQorI2RlZmluZSBFTUFDX1BUUiAgICAgICAgKDU2KSAvLyBQYXVzZSBUaW1lIFJlZ2lzdGVyDQorI2RlZmluZSBFTUFDX1BGUiAgICAgICAgKDYwKSAvLyBQYXVzZSBGcmFtZXMgcmVjZWl2ZWQgUmVnaXN0ZXINCisjZGVmaW5lIEVNQUNfRlRPICAgICAgICAoNjQpIC8vIEZyYW1lcyBUcmFuc21pdHRlZCBPSyBSZWdpc3Rlcg0KKyNkZWZpbmUgRU1BQ19TQ0YgICAgICAgICg2OCkgLy8gU2luZ2xlIENvbGxpc2lvbiBGcmFtZSBSZWdpc3Rlcg0KKyNkZWZpbmUgRU1BQ19NQ0YgICAgICAgICg3MikgLy8gTXVsdGlwbGUgQ29sbGlzaW9uIEZyYW1lIFJlZ2lzdGVyDQorI2RlZmluZSBFTUFDX0ZSTyAgICAgICAgKDc2KSAvLyBGcmFtZXMgUmVjZWl2ZWQgT0sgUmVnaXN0ZXINCisjZGVmaW5lIEVNQUNfRkNTRSAgICAgICAoODApIC8vIEZyYW1lIENoZWNrIFNlcXVlbmNlIEVycm9yIFJlZ2lzdGVyDQorI2RlZmluZSBFTUFDX0FMRSAgICAgICAgKDg0KSAvLyBBbGlnbm1lbnQgRXJyb3IgUmVnaXN0ZXINCisjZGVmaW5lIEVNQUNfRFRGICAgICAgICAoODgpIC8vIERlZmVycmVkIFRyYW5zbWlzc2lvbiBGcmFtZSBSZWdpc3Rlcg0KKyNkZWZpbmUgRU1BQ19MQ09MICAgICAgICg5MikgLy8gTGF0ZSBDb2xsaXNpb24gUmVnaXN0ZXINCisjZGVmaW5lIEVNQUNfRUNPTCAgICAgICAoOTYpIC8vIEV4Y2Vzc2l2ZSBDb2xsaXNpb24gUmVnaXN0ZXINCisjZGVmaW5lIEVNQUNfVFVORCAgICAgICAoMTAwKSAvLyBUcmFuc21pdCBVbmRlcnJ1biBFcnJvciBSZWdpc3Rlcg0KKyNkZWZpbmUgRU1BQ19DU0UgICAgICAgICgxMDQpIC8vIENhcnJpZXIgU2Vuc2UgRXJyb3IgUmVnaXN0ZXINCisjZGVmaW5lIEVNQUNfUlJFICAgICAgICAoMTA4KSAvLyBSZWNlaXZlIFJlc3NvdXJjZSBFcnJvciBSZWdpc3Rlcg0KKyNkZWZpbmUgRU1BQ19ST1YgICAgICAgICgxMTIpIC8vIFJlY2VpdmUgT3ZlcnJ1biBFcnJvcnMgUmVnaXN0ZXINCisjZGVmaW5lIEVNQUNfUlNFICAgICAgICAoMTE2KSAvLyBSZWNlaXZlIFN5bWJvbCBFcnJvcnMgUmVnaXN0ZXINCisjZGVmaW5lIEVNQUNfRUxFICAgICAgICAoMTIwKSAvLyBFeGNlc3NpdmUgTGVuZ3RoIEVycm9ycyBSZWdpc3Rlcg0KKyNkZWZpbmUgRU1BQ19SSkEgICAgICAgICgxMjQpIC8vIFJlY2VpdmUgSmFiYmVycyBSZWdpc3Rlcg0KKyNkZWZpbmUgRU1BQ19VU0YgICAgICAgICgxMjgpIC8vIFVuZGVyc2l6ZSBGcmFtZXMgUmVnaXN0ZXINCisjZGVmaW5lIEVNQUNfU1RFICAgICAgICAoMTMyKSAvLyBTUUUgVGVzdCBFcnJvciBSZWdpc3Rlcg0KKyNkZWZpbmUgRU1BQ19STEUgICAgICAgICgxMzYpIC8vIFJlY2VpdmUgTGVuZ3RoIEZpZWxkIE1pc21hdGNoIFJlZ2lzdGVyDQorI2RlZmluZSBFTUFDX1RQRiAgICAgICAgKDE0MCkgLy8gVHJhbnNtaXR0ZWQgUGF1c2UgRnJhbWVzIFJlZ2lzdGVyDQorI2RlZmluZSBFTUFDX0hSQiAgICAgICAgKDE0NCkgLy8gSGFzaCBBZGRyZXNzIEJvdHRvbVszMTowXQ0KKyNkZWZpbmUgRU1BQ19IUlQgICAgICAgICgxNDgpIC8vIEhhc2ggQWRkcmVzcyBUb3BbNjM6MzJdDQorI2RlZmluZSBFTUFDX1NBMUwgICAgICAgKDE1MikgLy8gU3BlY2lmaWMgQWRkcmVzcyAxIEJvdHRvbSwgRmlyc3QgNCBieXRlcw0KKyNkZWZpbmUgRU1BQ19TQTFIICAgICAgICgxNTYpIC8vIFNwZWNpZmljIEFkZHJlc3MgMSBUb3AsIExhc3QgMiBieXRlcw0KKyNkZWZpbmUgRU1BQ19TQTJMICAgICAgICgxNjApIC8vIFNwZWNpZmljIEFkZHJlc3MgMiBCb3R0b20sIEZpcnN0IDQgYnl0ZXMNCisjZGVmaW5lIEVNQUNfU0EySCAgICAgICAoMTY0KSAvLyBTcGVjaWZpYyBBZGRyZXNzIDIgVG9wLCBMYXN0IDIgYnl0ZXMNCisjZGVmaW5lIEVNQUNfU0EzTCAgICAgICAoMTY4KSAvLyBTcGVjaWZpYyBBZGRyZXNzIDMgQm90dG9tLCBGaXJzdCA0IGJ5dGVzDQorI2RlZmluZSBFTUFDX1NBM0ggICAgICAgKDE3MikgLy8gU3BlY2lmaWMgQWRkcmVzcyAzIFRvcCwgTGFzdCAyIGJ5dGVzDQorI2RlZmluZSBFTUFDX1NBNEwgICAgICAgKDE3NikgLy8gU3BlY2lmaWMgQWRkcmVzcyA0IEJvdHRvbSwgRmlyc3QgNCBieXRlcw0KKyNkZWZpbmUgRU1BQ19TQTRIICAgICAgICgxODApIC8vIFNwZWNpZmljIEFkZHJlc3MgNCBUb3AsIExhc3QgMiBieXRlcw0KKyNkZWZpbmUgRU1BQ19USUQgICAgICAgICgxODQpIC8vIFR5cGUgSUQgQ2hlY2tpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEVNQUNfVFBRICAgICAgICAoMTg4KSAvLyBUcmFuc21pdCBQYXVzZSBRdWFudHVtIFJlZ2lzdGVyDQorI2RlZmluZSBFTUFDX1VTUklPICAgICAgKDE5MikgLy8gVVNFUiBJbnB1dC9PdXRwdXQgUmVnaXN0ZXINCisjZGVmaW5lIEVNQUNfV09MICAgICAgICAoMTk2KSAvLyBXYWtlIE9uIExBTiBSZWdpc3Rlcg0KKyNkZWZpbmUgRU1BQ19SRVYgICAgICAgICgyNTIpIC8vIFJldmlzaW9uIFJlZ2lzdGVyDQorLy8gLS0tLS0tLS0gRU1BQ19OQ1IgOiAoRU1BQyBPZmZzZXQ6IDB4MCkgIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19MQiAgICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoRU1BQykgTG9vcGJhY2suIE9wdGlvbmFsLiBXaGVuIHNldCwgbG9vcGJhY2sgc2lnbmFsIGlzIGF0IGhpZ2ggbGV2ZWwuDQorI2RlZmluZSBBVDkxQ19FTUFDX0xMQiAgICAgICAgICAgICgweDEgPDwgIDEpIC8vIChFTUFDKSBMb29wYmFjayBsb2NhbC4gDQorI2RlZmluZSBBVDkxQ19FTUFDX1JFICAgICAgICAgICAgICgweDEgPDwgIDIpIC8vIChFTUFDKSBSZWNlaXZlIGVuYWJsZS4gDQorI2RlZmluZSBBVDkxQ19FTUFDX1RFICAgICAgICAgICAgICgweDEgPDwgIDMpIC8vIChFTUFDKSBUcmFuc21pdCBlbmFibGUuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19NUEUgICAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoRU1BQykgTWFuYWdlbWVudCBwb3J0IGVuYWJsZS4gDQorI2RlZmluZSBBVDkxQ19FTUFDX0NMUlNUQVQgICAgICAgICgweDEgPDwgIDUpIC8vIChFTUFDKSBDbGVhciBzdGF0aXN0aWNzIHJlZ2lzdGVycy4gDQorI2RlZmluZSBBVDkxQ19FTUFDX0lOQ1NUQVQgICAgICAgICgweDEgPDwgIDYpIC8vIChFTUFDKSBJbmNyZW1lbnQgc3RhdGlzdGljcyByZWdpc3RlcnMuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19XRVNUQVQgICAgICAgICAoMHgxIDw8ICA3KSAvLyAoRU1BQykgV3JpdGUgZW5hYmxlIGZvciBzdGF0aXN0aWNzIHJlZ2lzdGVycy4gDQorI2RlZmluZSBBVDkxQ19FTUFDX0JQICAgICAgICAgICAgICgweDEgPDwgIDgpIC8vIChFTUFDKSBCYWNrIHByZXNzdXJlLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfVFNUQVJUICAgICAgICAgKDB4MSA8PCAgOSkgLy8gKEVNQUMpIFN0YXJ0IFRyYW5zbWlzc2lvbi4gDQorI2RlZmluZSBBVDkxQ19FTUFDX1RIQUxUICAgICAgICAgICgweDEgPDwgMTApIC8vIChFTUFDKSBUcmFuc21pc3Npb24gSGFsdC4gDQorI2RlZmluZSBBVDkxQ19FTUFDX1RQRlIgICAgICAgICAgICgweDEgPDwgMTEpIC8vIChFTUFDKSBUcmFuc21pdCBwYXVzZSBmcmFtZSANCisjZGVmaW5lIEFUOTFDX0VNQUNfVFpRICAgICAgICAgICAgKDB4MSA8PCAxMikgLy8gKEVNQUMpIFRyYW5zbWl0IHplcm8gcXVhbnR1bSBwYXVzZSBmcmFtZQ0KKy8vIC0tLS0tLS0tIEVNQUNfTkNGR1IgOiAoRU1BQyBPZmZzZXQ6IDB4NCkgTmV0d29yayBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TUEQgICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoRU1BQykgU3BlZWQuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19GRCAgICAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoRU1BQykgRnVsbCBkdXBsZXguIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19KRlJBTUUgICAgICAgICAoMHgxIDw8ICAzKSAvLyAoRU1BQykgSnVtYm8gRnJhbWVzLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfQ0FGICAgICAgICAgICAgKDB4MSA8PCAgNCkgLy8gKEVNQUMpIENvcHkgYWxsIGZyYW1lcy4gDQorI2RlZmluZSBBVDkxQ19FTUFDX05CQyAgICAgICAgICAgICgweDEgPDwgIDUpIC8vIChFTUFDKSBObyBicm9hZGNhc3QuIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19NVEkgICAgICAgICAgICAoMHgxIDw8ICA2KSAvLyAoRU1BQykgTXVsdGljYXN0IGhhc2ggZXZlbnQgZW5hYmxlDQorI2RlZmluZSBBVDkxQ19FTUFDX1VOSSAgICAgICAgICAgICgweDEgPDwgIDcpIC8vIChFTUFDKSBVbmljYXN0IGhhc2ggZW5hYmxlLiANCisjZGVmaW5lIEFUOTFDX0VNQUNfQklHICAgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKEVNQUMpIFJlY2VpdmUgMTUyMiBieXRlcy4gDQorI2RlZmluZSBBVDkxQ19FTUFDX0VBRSAgICAgICAgICAgICgweDEgPDwgIDkpIC8vIChFTUFDKSBFeHRlcm5hbCBhZGRyZXNzIG1hdGNoIGVuYWJsZS4gDQorI2RlZmluZSBBVDkxQ19FTUFDX0NMSyAgICAgICAgICAgICgweDMgPDwgMTApIC8vIChFTUFDKSANCisjZGVmaW5lIAlBVDkxQ19FTUFDX0NMS19IQ0xLXzggICAgICAgICAgICAgICAoMHgwIDw8IDEwKSAvLyAoRU1BQykgSENMSyBkaXZpZGVkIGJ5IDgNCisjZGVmaW5lIAlBVDkxQ19FTUFDX0NMS19IQ0xLXzE2ICAgICAgICAgICAgICAoMHgxIDw8IDEwKSAvLyAoRU1BQykgSENMSyBkaXZpZGVkIGJ5IDE2DQorI2RlZmluZSAJQVQ5MUNfRU1BQ19DTEtfSENMS18zMiAgICAgICAgICAgICAgKDB4MiA8PCAxMCkgLy8gKEVNQUMpIEhDTEsgZGl2aWRlZCBieSAzMg0KKyNkZWZpbmUgCUFUOTFDX0VNQUNfQ0xLX0hDTEtfNjQgICAgICAgICAgICAgICgweDMgPDwgMTApIC8vIChFTUFDKSBIQ0xLIGRpdmlkZWQgYnkgNjQNCisjZGVmaW5lIEFUOTFDX0VNQUNfUlRZICAgICAgICAgICAgKDB4MSA8PCAxMikgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19QQUUgICAgICAgICAgICAoMHgxIDw8IDEzKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1JCT0YgICAgICAgICAgICgweDMgPDwgMTQpIC8vIChFTUFDKSANCisjZGVmaW5lIAlBVDkxQ19FTUFDX1JCT0ZfT0ZGU0VUXzAgICAgICAgICAgICAgKDB4MCA8PCAxNCkgLy8gKEVNQUMpIG5vIG9mZnNldCBmcm9tIHN0YXJ0IG9mIHJlY2VpdmUgYnVmZmVyDQorI2RlZmluZSAJQVQ5MUNfRU1BQ19SQk9GX09GRlNFVF8xICAgICAgICAgICAgICgweDEgPDwgMTQpIC8vIChFTUFDKSBvbmUgYnl0ZSBvZmZzZXQgZnJvbSBzdGFydCBvZiByZWNlaXZlIGJ1ZmZlcg0KKyNkZWZpbmUgCUFUOTFDX0VNQUNfUkJPRl9PRkZTRVRfMiAgICAgICAgICAgICAoMHgyIDw8IDE0KSAvLyAoRU1BQykgdHdvIGJ5dGVzIG9mZnNldCBmcm9tIHN0YXJ0IG9mIHJlY2VpdmUgYnVmZmVyDQorI2RlZmluZSAJQVQ5MUNfRU1BQ19SQk9GX09GRlNFVF8zICAgICAgICAgICAgICgweDMgPDwgMTQpIC8vIChFTUFDKSB0aHJlZSBieXRlcyBvZmZzZXQgZnJvbSBzdGFydCBvZiByZWNlaXZlIGJ1ZmZlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19STENFICAgICAgICAgICAoMHgxIDw8IDE2KSAvLyAoRU1BQykgUmVjZWl2ZSBMZW5ndGggZmllbGQgQ2hlY2tpbmcgRW5hYmxlDQorI2RlZmluZSBBVDkxQ19FTUFDX0RSRkNTICAgICAgICAgICgweDEgPDwgMTcpIC8vIChFTUFDKSBEaXNjYXJkIFJlY2VpdmUgRkNTDQorI2RlZmluZSBBVDkxQ19FTUFDX0VGUkhEICAgICAgICAgICgweDEgPDwgMTgpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfSVJYRkNTICAgICAgICAgKDB4MSA8PCAxOSkgLy8gKEVNQUMpIElnbm9yZSBSWCBGQ1MNCisvLyAtLS0tLS0tLSBFTUFDX05TUiA6IChFTUFDIE9mZnNldDogMHg4KSBOZXR3b3JrIFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0VNQUNfTElOS1IgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19NRElPICAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX0lETEUgICAgICAgICAgICgweDEgPDwgIDIpIC8vIChFTUFDKSANCisvLyAtLS0tLS0tLSBFTUFDX1RTUiA6IChFTUFDIE9mZnNldDogMHgxNCkgVHJhbnNtaXQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19VQlIgICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX0NPTCAgICAgICAgICAgICgweDEgPDwgIDEpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUkxFUyAgICAgICAgICAgKDB4MSA8PCAgMikgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19UR08gICAgICAgICAgICAoMHgxIDw8ICAzKSAvLyAoRU1BQykgVHJhbnNtaXQgR28NCisjZGVmaW5lIEFUOTFDX0VNQUNfQkVYICAgICAgICAgICAgKDB4MSA8PCAgNCkgLy8gKEVNQUMpIEJ1ZmZlcnMgZXhoYXVzdGVkIG1pZCBmcmFtZQ0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19DT01QICAgICAgICAgICAoMHgxIDw8ICA1KSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1VORCAgICAgICAgICAgICgweDEgPDwgIDYpIC8vIChFTUFDKSANCisvLyAtLS0tLS0tLSBFTUFDX1JTUiA6IChFTUFDIE9mZnNldDogMHgyMCkgUmVjZWl2ZSBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19FTUFDX0JOQSAgICAgICAgICAgICgweDEgPDwgIDApIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUkVDICAgICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19PVlIgICAgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoRU1BQykgDQorLy8gLS0tLS0tLS0gRU1BQ19JU1IgOiAoRU1BQyBPZmZzZXQ6IDB4MjQpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19FTUFDX01GRCAgICAgICAgICAgICgweDEgPDwgIDApIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUkNPTVAgICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SWFVCUiAgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1RYVUJSICAgICAgICAgICgweDEgPDwgIDMpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfVFVORFIgICAgICAgICAgKDB4MSA8PCAgNCkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19STEVYICAgICAgICAgICAoMHgxIDw8ICA1KSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1RYRVJSICAgICAgICAgICgweDEgPDwgIDYpIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfVENPTVAgICAgICAgICAgKDB4MSA8PCAgNykgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19MSU5LICAgICAgICAgICAoMHgxIDw8ICA5KSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1JPVlIgICAgICAgICAgICgweDEgPDwgMTApIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfSFJFU1AgICAgICAgICAgKDB4MSA8PCAxMSkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19QRlJFICAgICAgICAgICAoMHgxIDw8IDEyKSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1BUWiAgICAgICAgICAgICgweDEgPDwgMTMpIC8vIChFTUFDKSANCisvLyAtLS0tLS0tLSBFTUFDX0lFUiA6IChFTUFDIE9mZnNldDogMHgyOCkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBFTUFDX0lEUiA6IChFTUFDIE9mZnNldDogMHgyYykgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gRU1BQ19JTVIgOiAoRU1BQyBPZmZzZXQ6IDB4MzApIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEVNQUNfTUFOIDogKEVNQUMgT2Zmc2V0OiAweDM0KSBQSFkgTWFpbnRlbmFuY2UgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19FTUFDX0RBVEEgICAgICAgICAgICgweEZGRkYgPDwgIDApIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfQ09ERSAgICAgICAgICAgKDB4MyA8PCAxNikgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SRUdBICAgICAgICAgICAoMHgxRiA8PCAxOCkgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19QSFlBICAgICAgICAgICAoMHgxRiA8PCAyMykgLy8gKEVNQUMpIA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SVyAgICAgICAgICAgICAoMHgzIDw8IDI4KSAvLyAoRU1BQykgDQorI2RlZmluZSBBVDkxQ19FTUFDX1NPRiAgICAgICAgICAgICgweDMgPDwgMzApIC8vIChFTUFDKSANCisvLyAtLS0tLS0tLSBFTUFDX1VTUklPIDogKEVNQUMgT2Zmc2V0OiAweGMwKSBVU0VSIElucHV0IE91dHB1dCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUk1JSSAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKEVNQUMpIFJlZHVjZSBNSUkNCisvLyAtLS0tLS0tLSBFTUFDX1dPTCA6IChFTUFDIE9mZnNldDogMHhjNCkgV2FrZSBPbiBMQU4gUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19FTUFDX0lQICAgICAgICAgICAgICgweEZGRkYgPDwgIDApIC8vIChFTUFDKSBBUlAgcmVxdWVzdCBJUCBhZGRyZXNzDQorI2RlZmluZSBBVDkxQ19FTUFDX01BRyAgICAgICAgICAgICgweDEgPDwgMTYpIC8vIChFTUFDKSBNYWdpYyBwYWNrZXQgZXZlbnQgZW5hYmxlDQorI2RlZmluZSBBVDkxQ19FTUFDX0FSUCAgICAgICAgICAgICgweDEgPDwgMTcpIC8vIChFTUFDKSBBUlAgcmVxdWVzdCBldmVudCBlbmFibGUNCisjZGVmaW5lIEFUOTFDX0VNQUNfU0ExICAgICAgICAgICAgKDB4MSA8PCAxOCkgLy8gKEVNQUMpIFNwZWNpZmljIGFkZHJlc3MgcmVnaXN0ZXIgMSBldmVudCBlbmFibGUNCisvLyAtLS0tLS0tLSBFTUFDX1JFViA6IChFTUFDIE9mZnNldDogMHhmYykgUmV2aXNpb24gUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19FTUFDX1JFVlJFRiAgICAgICAgICgweEZGRkYgPDwgIDApIC8vIChFTUFDKSANCisjZGVmaW5lIEFUOTFDX0VNQUNfUEFSVFJFRiAgICAgICAgKDB4RkZGRiA8PCAxNikgLy8gKEVNQUMpIA0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBERUZJTklUSU9OICBGT1IgQW5hbG9nIHRvIERpZ2l0YWwgQ29udmVydG9yICovDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX0FEQyBzdHJ1Y3R1cmUgKioqICovDQotI2RlZmluZSBBRENfQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMCApICAgICAgICAgIC8qIEFEQyBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBRENfTVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggNCApICAgICAgICAgIC8qIEFEQyBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBRENfQ0hFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICggMTYgKSAgICAgICAgIC8qIEFEQyBDaGFubmVsIEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQURDX0NIRFIgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDIwICkgICAgICAgICAvKiBBREMgQ2hhbm5lbCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBRENfQ0hTUiAgICAgICAgICAgICAgICAgICAgICAgICAgICggMjQgKSAgICAgICAgIC8qIEFEQyBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQURDX1NSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDI4ICkgICAgICAgICAvKiBBREMgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBRENfTENEUiAgICAgICAgICAgICAgICAgICAgICAgICAgICggMzIgKSAgICAgICAgIC8qIEFEQyBMYXN0IENvbnZlcnRlZCBEYXRhIFJlZ2lzdGVyICovDQotI2RlZmluZSBBRENfSUVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMzYgKSAgICAgICAgIC8qIEFEQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBRENfSURSICAgICAgICAgICAgICAgICAgICAgICAgICAgICggNDAgKSAgICAgICAgIC8qIEFEQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQURDX0lNUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDQ0ICkgICAgICAgICAvKiBBREMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFEQ19DRFIwICAgICAgICAgICAgICAgICAgICAgICAgICAgKCA0OCApICAgICAgICAgLyogQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAwICovDQotI2RlZmluZSBBRENfQ0RSMSAgICAgICAgICAgICAgICAgICAgICAgICAgICggNTIgKSAgICAgICAgIC8qIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMSAqLw0KLSNkZWZpbmUgQURDX0NEUjIgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDU2ICkgICAgICAgICAvKiBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDIgKi8NCi0jZGVmaW5lIEFEQ19DRFIzICAgICAgICAgICAgICAgICAgICAgICAgICAgKCA2MCApICAgICAgICAgLyogQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAzICovDQotI2RlZmluZSBBRENfQ0RSNCAgICAgICAgICAgICAgICAgICAgICAgICAgICggNjQgKSAgICAgICAgIC8qIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNCAqLw0KLSNkZWZpbmUgQURDX0NEUjUgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDY4ICkgICAgICAgICAvKiBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDUgKi8NCi0jZGVmaW5lIEFEQ19DRFI2ICAgICAgICAgICAgICAgICAgICAgICAgICAgKCA3MiApICAgICAgICAgLyogQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA2ICovDQotI2RlZmluZSBBRENfQ0RSNyAgICAgICAgICAgICAgICAgICAgICAgICAgICggNzYgKSAgICAgICAgIC8qIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNyAqLw0KLSNkZWZpbmUgQURDX1JQUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDI1NiApICAgICAgICAvKiBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFEQ19SQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAyNjAgKSAgICAgICAgLyogUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBRENfVFBSICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMjY0ICkgICAgICAgIC8qIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFEQ19UQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAyNjggKSAgICAgICAgLyogVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQURDX1JOUFIgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDI3MiApICAgICAgICAvKiBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQURDX1JOQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDI3NiApICAgICAgICAvKiBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQURDX1ROUFIgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDI4MCApICAgICAgICAvKiBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFEQ19UTkNSICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAyODQgKSAgICAgICAgLyogVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBRENfUFRDUiAgICAgICAgICAgICAgICAgICAgICAgICAgICggMjg4ICkgICAgICAgIC8qIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBRENfUFRTUiAgICAgICAgICAgICAgICAgICAgICAgICAgICggMjkyICkgICAgICAgIC8qIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0vKiAtLS0tLS0tLSBBRENfQ1IgOiAoQURDIE9mZnNldDogMHgwKSBBREMgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1NXUlNUICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAwICkgICAvKiAoQURDKSBTb2Z0d2FyZSBSZXNldCAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1NUQVJUICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxICkgICAvKiAoQURDKSBTdGFydCBDb252ZXJzaW9uICovDQotLyogLS0tLS0tLS0gQURDX01SIDogKEFEQyBPZmZzZXQ6IDB4NCkgQURDIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19UUkdFTiAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMCApICAgLyogKEFEQykgVHJpZ2dlciBFbmFibGUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRENfVFJHRU5fRElTICAgICAgICAgICAgKCAweDAgKSAgICAgICAgLyogKEFEQykgSHJhZHdhcmUgdHJpZ2dlcnMgYXJlIGRpc2FibGVkLiBTdGFydGluZyBhIGNvbnZlcnNpb24gaXMgb25seSBwb3NzaWJsZSBieSBzb2Z0d2FyZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FEQ19UUkdFTl9FTiAgICAgICAgICAgICAoIDB4MSApICAgICAgICAvKiAoQURDKSBIYXJkd2FyZSB0cmlnZ2VyIHNlbGVjdGVkIGJ5IFRSR1NFTCBmaWVsZCBpcyBlbmFibGVkLiAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1RSR1NFTCAgICAgICAgICAgICAgICAgICAoIDB4NyA8PCAxICkgICAvKiAoQURDKSBUcmlnZ2VyIFNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FEQ19UUkdTRUxfVElPQTAgICAgICAgICAoIDB4MCA8PCAxICkgICAvKiAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPMCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FEQ19UUkdTRUxfVElPQTEgICAgICAgICAoIDB4MSA8PCAxICkgICAvKiAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPMSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FEQ19UUkdTRUxfVElPQTIgICAgICAgICAoIDB4MiA8PCAxICkgICAvKiAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPMiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FEQ19UUkdTRUxfVElPQTMgICAgICAgICAoIDB4MyA8PCAxICkgICAvKiAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPMyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FEQ19UUkdTRUxfVElPQTQgICAgICAgICAoIDB4NCA8PCAxICkgICAvKiAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPNCAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FEQ19UUkdTRUxfVElPQTUgICAgICAgICAoIDB4NSA8PCAxICkgICAvKiAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPNSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FEQ19UUkdTRUxfRVhUICAgICAgICAgICAoIDB4NiA8PCAxICkgICAvKiAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBFeHRlcm5hbCBUcmlnZ2VyICovDQotI2RlZmluZSBBVDkxQ19BRENfTE9XUkVTICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDQgKSAgIC8qIChBREMpIFJlc29sdXRpb24uICovDQotI2RlZmluZSAgICAgQVQ5MUNfQURDX0xPV1JFU18xMF9CSVQgICAgICAgICggMHgwIDw8IDQgKSAgIC8qIChBREMpIDEwLWJpdCByZXNvbHV0aW9uICovDQotI2RlZmluZSAgICAgQVQ5MUNfQURDX0xPV1JFU184X0JJVCAgICAgICAgICggMHgxIDw8IDQgKSAgIC8qIChBREMpIDgtYml0IHJlc29sdXRpb24gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19TTEVFUCAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgNSApICAgLyogKEFEQykgU2xlZXAgTW9kZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FEQ19TTEVFUF9OT1JNQUxfTU9ERSAgICAoIDB4MCA8PCA1ICkgICAvKiAoQURDKSBOb3JtYWwgTW9kZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FEQ19TTEVFUF9NT0RFICAgICAgICAgICAoIDB4MSA8PCA1ICkgICAvKiAoQURDKSBTbGVlcCBNb2RlICovDQotI2RlZmluZSBBVDkxQ19BRENfUFJFU0NBTCAgICAgICAgICAgICAgICAgICggMHgzRiA8PCA4ICkgIC8qIChBREMpIFByZXNjYWxlciByYXRlIHNlbGVjdGlvbiAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1NUQVJUVVAgICAgICAgICAgICAgICAgICAoIDB4MUYgPDwgMTYgKSAvKiAoQURDKSBTdGFydHVwIFRpbWUgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19TSFRJTSAgICAgICAgICAgICAgICAgICAgKCAweEYgPDwgMjQgKSAgLyogKEFEQykgU2FtcGxlICYgSG9sZCBUaW1lICovDQotLyogLS0tLS0tLS0gICAgIEFEQ19DSEVSIDogKEFEQyBPZmZzZXQ6IDB4MTApIEFEQyBDaGFubmVsIEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NIMCAgICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAwICkgICAvKiAoQURDKSBDaGFubmVsIDAgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DSDEgICAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgMSApICAgLyogKEFEQykgQ2hhbm5lbCAxICovDQotI2RlZmluZSBBVDkxQ19BRENfQ0gyICAgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDIgKSAgIC8qIChBREMpIENoYW5uZWwgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NIMyAgICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCAzICkgICAvKiAoQURDKSBDaGFubmVsIDMgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DSDQgICAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgNCApICAgLyogKEFEQykgQ2hhbm5lbCA0ICovDQotI2RlZmluZSBBVDkxQ19BRENfQ0g1ICAgICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDUgKSAgIC8qIChBREMpIENoYW5uZWwgNSAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NINiAgICAgICAgICAgICAgICAgICAgICAoIDB4MSA8PCA2ICkgICAvKiAoQURDKSBDaGFubmVsIDYgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DSDcgICAgICAgICAgICAgICAgICAgICAgKCAweDEgPDwgNyApICAgLyogKEFEQykgQ2hhbm5lbCA3ICovDQotLyogLS0tLS0tLS0gICAgIEFEQ19DSERSIDogKEFEQyBPZmZzZXQ6IDB4MTQpIEFEQyBDaGFubmVsIERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSAgICAgQURDX0NIU1IgOiAoQURDIE9mZnNldDogMHgxOCkgQURDIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQURDX1NSIDogKEFEQyBPZmZzZXQ6IDB4MWMpIEFEQyBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19FT0MwICAgICAgKCAweDEgPDwgMCApICAgICAgLyogKEFEQykgRW5kIG9mIENvbnZlcnNpb24gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19FT0MxICAgICAgKCAweDEgPDwgMSApICAgICAgLyogKEFEQykgRW5kIG9mIENvbnZlcnNpb24gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19FT0MyICAgICAgKCAweDEgPDwgMiApICAgICAgLyogKEFEQykgRW5kIG9mIENvbnZlcnNpb24gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19FT0MzICAgICAgKCAweDEgPDwgMyApICAgICAgLyogKEFEQykgRW5kIG9mIENvbnZlcnNpb24gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19FT0M0ICAgICAgKCAweDEgPDwgNCApICAgICAgLyogKEFEQykgRW5kIG9mIENvbnZlcnNpb24gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19FT0M1ICAgICAgKCAweDEgPDwgNSApICAgICAgLyogKEFEQykgRW5kIG9mIENvbnZlcnNpb24gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19FT0M2ICAgICAgKCAweDEgPDwgNiApICAgICAgLyogKEFEQykgRW5kIG9mIENvbnZlcnNpb24gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19FT0M3ICAgICAgKCAweDEgPDwgNyApICAgICAgLyogKEFEQykgRW5kIG9mIENvbnZlcnNpb24gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19PVlJFMCAgICAgKCAweDEgPDwgOCApICAgICAgLyogKEFEQykgT3ZlcnJ1biBFcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX09WUkUxICAgICAoIDB4MSA8PCA5ICkgICAgICAvKiAoQURDKSBPdmVycnVuIEVycm9yICovDQotI2RlZmluZSBBVDkxQ19BRENfT1ZSRTIgICAgICggMHgxIDw8IDEwICkgICAgIC8qIChBREMpIE92ZXJydW4gRXJyb3IgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19PVlJFMyAgICAgKCAweDEgPDwgMTEgKSAgICAgLyogKEFEQykgT3ZlcnJ1biBFcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX09WUkU0ICAgICAoIDB4MSA8PCAxMiApICAgICAvKiAoQURDKSBPdmVycnVuIEVycm9yICovDQotI2RlZmluZSBBVDkxQ19BRENfT1ZSRTUgICAgICggMHgxIDw8IDEzICkgICAgIC8qIChBREMpIE92ZXJydW4gRXJyb3IgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19PVlJFNiAgICAgKCAweDEgPDwgMTQgKSAgICAgLyogKEFEQykgT3ZlcnJ1biBFcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX09WUkU3ICAgICAoIDB4MSA8PCAxNSApICAgICAvKiAoQURDKSBPdmVycnVuIEVycm9yICovDQotI2RlZmluZSBBVDkxQ19BRENfRFJEWSAgICAgICggMHgxIDw8IDE2ICkgICAgIC8qIChBREMpIERhdGEgUmVhZHkgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19HT1ZSRSAgICAgKCAweDEgPDwgMTcgKSAgICAgLyogKEFEQykgR2VuZXJhbCBPdmVycnVuICovDQotI2RlZmluZSBBVDkxQ19BRENfRU5EUlggICAgICggMHgxIDw8IDE4ICkgICAgIC8qIChBREMpIEVuZCBvZiBSZWNlaXZlciBUcmFuc2ZlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1JYQlVGRiAgICAoIDB4MSA8PCAxOSApICAgICAvKiAoQURDKSBSWEJVRkYgSW50ZXJydXB0ICovDQotLyogLS0tLS0tLS0gQURDX0xDRFIgOiAoQURDIE9mZnNldDogMHgyMCkgQURDIExhc3QgQ29udmVydGVkIERhdGEgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19MREFUQSAgICAgKCAweDNGRiA8PCAwICkgICAgLyogKEFEQykgTGFzdCBEYXRhIENvbnZlcnRlZCAqLw0KLS8qIC0tLS0tLS0tIEFEQ19JRVIgOiAoQURDIE9mZnNldDogMHgyNCkgQURDIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBBRENfSURSIDogKEFEQyBPZmZzZXQ6IDB4MjgpIEFEQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLS8qIC0tLS0tLS0tIEFEQ19JTVIgOiAoQURDIE9mZnNldDogMHgyYykgQURDIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQURDX0NEUjAgOiAoQURDIE9mZnNldDogMHgzMCkgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAwIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19BRENfREFUQSAgICAoIDB4M0ZGIDw8IDAgKSAgICAgICAgLyogKEFEQykgQ29udmVydGVkIERhdGEgKi8NCi0vKiAtLS0tLS0tLSBBRENfQ0RSMSA6IChBREMgT2Zmc2V0OiAweDM0KSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDEgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBBRENfQ0RSMiA6IChBREMgT2Zmc2V0OiAweDM4KSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBBRENfQ0RSMyA6IChBREMgT2Zmc2V0OiAweDNjKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDMgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBBRENfQ0RSNCA6IChBREMgT2Zmc2V0OiAweDQwKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDQgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBBRENfQ0RSNSA6IChBREMgT2Zmc2V0OiAweDQ0KSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDUgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBBRENfQ0RSNiA6IChBREMgT2Zmc2V0OiAweDQ4KSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDYgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBBRENfQ0RSNyA6IChBREMgT2Zmc2V0OiAweDRjKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDcgLS0tLS0tLS0gKi8NCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIEFuYWxvZyB0byBEaWdpdGFsIENvbnZlcnRvcg0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19BREMgc3RydWN0dXJlICoqKg0KKyNkZWZpbmUgQURDX0NSICAgICAgICAgICggMCkgLy8gQURDIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFEQ19NUiAgICAgICAgICAoIDQpIC8vIEFEQyBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBRENfQ0hFUiAgICAgICAgKDE2KSAvLyBBREMgQ2hhbm5lbCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFEQ19DSERSICAgICAgICAoMjApIC8vIEFEQyBDaGFubmVsIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFEQ19DSFNSICAgICAgICAoMjQpIC8vIEFEQyBDaGFubmVsIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQURDX1NSICAgICAgICAgICgyOCkgLy8gQURDIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQURDX0xDRFIgICAgICAgICgzMikgLy8gQURDIExhc3QgQ29udmVydGVkIERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIEFEQ19JRVIgICAgICAgICAoMzYpIC8vIEFEQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBRENfSURSICAgICAgICAgKDQwKSAvLyBBREMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFEQ19JTVIgICAgICAgICAoNDQpIC8vIEFEQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQURDX0NEUjAgICAgICAgICg0OCkgLy8gQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAwDQorI2RlZmluZSBBRENfQ0RSMSAgICAgICAgKDUyKSAvLyBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDENCisjZGVmaW5lIEFEQ19DRFIyICAgICAgICAoNTYpIC8vIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMg0KKyNkZWZpbmUgQURDX0NEUjMgICAgICAgICg2MCkgLy8gQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAzDQorI2RlZmluZSBBRENfQ0RSNCAgICAgICAgKDY0KSAvLyBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDQNCisjZGVmaW5lIEFEQ19DRFI1ICAgICAgICAoNjgpIC8vIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNQ0KKyNkZWZpbmUgQURDX0NEUjYgICAgICAgICg3MikgLy8gQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA2DQorI2RlZmluZSBBRENfQ0RSNyAgICAgICAgKDc2KSAvLyBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDcNCisjZGVmaW5lIEFEQ19SUFIgICAgICAgICAoMjU2KSAvLyBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFEQ19SQ1IgICAgICAgICAoMjYwKSAvLyBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFEQ19UUFIgICAgICAgICAoMjY0KSAvLyBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBRENfVENSICAgICAgICAgKDI2OCkgLy8gVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQURDX1JOUFIgICAgICAgICgyNzIpIC8vIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBRENfUk5DUiAgICAgICAgKDI3NikgLy8gUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFEQ19UTlBSICAgICAgICAoMjgwKSAvLyBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFEQ19UTkNSICAgICAgICAoMjg0KSAvLyBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFEQ19QVENSICAgICAgICAoMjg4KSAvLyBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQURDX1BUU1IgICAgICAgICgyOTIpIC8vIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisvLyAtLS0tLS0tLSBBRENfQ1IgOiAoQURDIE9mZnNldDogMHgwKSBBREMgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FEQ19TV1JTVCAgICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKEFEQykgU29mdHdhcmUgUmVzZXQNCisjZGVmaW5lIEFUOTFDX0FEQ19TVEFSVCAgICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKEFEQykgU3RhcnQgQ29udmVyc2lvbg0KKy8vIC0tLS0tLS0tIEFEQ19NUiA6IChBREMgT2Zmc2V0OiAweDQpIEFEQyBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQURDX1RSR0VOICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoQURDKSBUcmlnZ2VyIEVuYWJsZQ0KKyNkZWZpbmUgCUFUOTFDX0FEQ19UUkdFTl9ESVMgICAgICAgICAgICAgICAgICAoMHgwKSAvLyAoQURDKSBIcmFkd2FyZSB0cmlnZ2VycyBhcmUgZGlzYWJsZWQuIFN0YXJ0aW5nIGEgY29udmVyc2lvbiBpcyBvbmx5IHBvc3NpYmxlIGJ5IHNvZnR3YXJlDQorI2RlZmluZSAJQVQ5MUNfQURDX1RSR0VOX0VOICAgICAgICAgICAgICAgICAgICgweDEpIC8vIChBREMpIEhhcmR3YXJlIHRyaWdnZXIgc2VsZWN0ZWQgYnkgVFJHU0VMIGZpZWxkIGlzIGVuYWJsZWQuDQorI2RlZmluZSBBVDkxQ19BRENfVFJHU0VMICAgICAgICAgICgweDcgPDwgIDEpIC8vIChBREMpIFRyaWdnZXIgU2VsZWN0aW9uDQorI2RlZmluZSAJQVQ5MUNfQURDX1RSR1NFTF9USU9BMCAgICAgICAgICAgICAgICAoMHgwIDw8ICAxKSAvLyAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPMA0KKyNkZWZpbmUgCUFUOTFDX0FEQ19UUkdTRUxfVElPQTEgICAgICAgICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gVElBTzENCisjZGVmaW5lIAlBVDkxQ19BRENfVFJHU0VMX1RJT0EyICAgICAgICAgICAgICAgICgweDIgPDwgIDEpIC8vIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IFRJQU8yDQorI2RlZmluZSAJQVQ5MUNfQURDX1RSR1NFTF9USU9BMyAgICAgICAgICAgICAgICAoMHgzIDw8ICAxKSAvLyAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBUSUFPMw0KKyNkZWZpbmUgCUFUOTFDX0FEQ19UUkdTRUxfVElPQTQgICAgICAgICAgICAgICAgKDB4NCA8PCAgMSkgLy8gKEFEQykgU2VsZWN0ZWQgVFJHU0VMID0gVElBTzQNCisjZGVmaW5lIAlBVDkxQ19BRENfVFJHU0VMX1RJT0E1ICAgICAgICAgICAgICAgICgweDUgPDwgIDEpIC8vIChBREMpIFNlbGVjdGVkIFRSR1NFTCA9IFRJQU81DQorI2RlZmluZSAJQVQ5MUNfQURDX1RSR1NFTF9FWFQgICAgICAgICAgICAgICAgICAoMHg2IDw8ICAxKSAvLyAoQURDKSBTZWxlY3RlZCBUUkdTRUwgPSBFeHRlcm5hbCBUcmlnZ2VyDQorI2RlZmluZSBBVDkxQ19BRENfTE9XUkVTICAgICAgICAgICgweDEgPDwgIDQpIC8vIChBREMpIFJlc29sdXRpb24uDQorI2RlZmluZSAJQVQ5MUNfQURDX0xPV1JFU18xMF9CSVQgICAgICAgICAgICAgICAoMHgwIDw8ICA0KSAvLyAoQURDKSAxMC1iaXQgcmVzb2x1dGlvbg0KKyNkZWZpbmUgCUFUOTFDX0FEQ19MT1dSRVNfOF9CSVQgICAgICAgICAgICAgICAgKDB4MSA8PCAgNCkgLy8gKEFEQykgOC1iaXQgcmVzb2x1dGlvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX1NMRUVQICAgICAgICAgICAoMHgxIDw8ICA1KSAvLyAoQURDKSBTbGVlcCBNb2RlDQorI2RlZmluZSAJQVQ5MUNfQURDX1NMRUVQX05PUk1BTF9NT0RFICAgICAgICAgICgweDAgPDwgIDUpIC8vIChBREMpIE5vcm1hbCBNb2RlDQorI2RlZmluZSAJQVQ5MUNfQURDX1NMRUVQX01PREUgICAgICAgICAgICAgICAgICgweDEgPDwgIDUpIC8vIChBREMpIFNsZWVwIE1vZGUNCisjZGVmaW5lIEFUOTFDX0FEQ19QUkVTQ0FMICAgICAgICAgKDB4M0YgPDwgIDgpIC8vIChBREMpIFByZXNjYWxlciByYXRlIHNlbGVjdGlvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX1NUQVJUVVAgICAgICAgICAoMHgxRiA8PCAxNikgLy8gKEFEQykgU3RhcnR1cCBUaW1lDQorI2RlZmluZSBBVDkxQ19BRENfU0hUSU0gICAgICAgICAgICgweEYgPDwgMjQpIC8vIChBREMpIFNhbXBsZSAmIEhvbGQgVGltZQ0KKy8vIC0tLS0tLS0tIAlBRENfQ0hFUiA6IChBREMgT2Zmc2V0OiAweDEwKSBBREMgQ2hhbm5lbCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BRENfQ0gwICAgICAgICAgICAgICgweDEgPDwgIDApIC8vIChBREMpIENoYW5uZWwgMA0KKyNkZWZpbmUgQVQ5MUNfQURDX0NIMSAgICAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoQURDKSBDaGFubmVsIDENCisjZGVmaW5lIEFUOTFDX0FEQ19DSDIgICAgICAgICAgICAgKDB4MSA8PCAgMikgLy8gKEFEQykgQ2hhbm5lbCAyDQorI2RlZmluZSBBVDkxQ19BRENfQ0gzICAgICAgICAgICAgICgweDEgPDwgIDMpIC8vIChBREMpIENoYW5uZWwgMw0KKyNkZWZpbmUgQVQ5MUNfQURDX0NINCAgICAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoQURDKSBDaGFubmVsIDQNCisjZGVmaW5lIEFUOTFDX0FEQ19DSDUgICAgICAgICAgICAgKDB4MSA8PCAgNSkgLy8gKEFEQykgQ2hhbm5lbCA1DQorI2RlZmluZSBBVDkxQ19BRENfQ0g2ICAgICAgICAgICAgICgweDEgPDwgIDYpIC8vIChBREMpIENoYW5uZWwgNg0KKyNkZWZpbmUgQVQ5MUNfQURDX0NINyAgICAgICAgICAgICAoMHgxIDw8ICA3KSAvLyAoQURDKSBDaGFubmVsIDcNCisvLyAtLS0tLS0tLSAJQURDX0NIRFIgOiAoQURDIE9mZnNldDogMHgxNCkgQURDIENoYW5uZWwgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSAJQURDX0NIU1IgOiAoQURDIE9mZnNldDogMHgxOCkgQURDIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19TUiA6IChBREMgT2Zmc2V0OiAweDFjKSBBREMgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQURDX0VPQzAgICAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoQURDKSBFbmQgb2YgQ29udmVyc2lvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX0VPQzEgICAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoQURDKSBFbmQgb2YgQ29udmVyc2lvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX0VPQzIgICAgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoQURDKSBFbmQgb2YgQ29udmVyc2lvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX0VPQzMgICAgICAgICAgICAoMHgxIDw8ICAzKSAvLyAoQURDKSBFbmQgb2YgQ29udmVyc2lvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX0VPQzQgICAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoQURDKSBFbmQgb2YgQ29udmVyc2lvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX0VPQzUgICAgICAgICAgICAoMHgxIDw8ICA1KSAvLyAoQURDKSBFbmQgb2YgQ29udmVyc2lvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX0VPQzYgICAgICAgICAgICAoMHgxIDw8ICA2KSAvLyAoQURDKSBFbmQgb2YgQ29udmVyc2lvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX0VPQzcgICAgICAgICAgICAoMHgxIDw8ICA3KSAvLyAoQURDKSBFbmQgb2YgQ29udmVyc2lvbg0KKyNkZWZpbmUgQVQ5MUNfQURDX09WUkUwICAgICAgICAgICAoMHgxIDw8ICA4KSAvLyAoQURDKSBPdmVycnVuIEVycm9yDQorI2RlZmluZSBBVDkxQ19BRENfT1ZSRTEgICAgICAgICAgICgweDEgPDwgIDkpIC8vIChBREMpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX0FEQ19PVlJFMiAgICAgICAgICAgKDB4MSA8PCAxMCkgLy8gKEFEQykgT3ZlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQURDX09WUkUzICAgICAgICAgICAoMHgxIDw8IDExKSAvLyAoQURDKSBPdmVycnVuIEVycm9yDQorI2RlZmluZSBBVDkxQ19BRENfT1ZSRTQgICAgICAgICAgICgweDEgPDwgMTIpIC8vIChBREMpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX0FEQ19PVlJFNSAgICAgICAgICAgKDB4MSA8PCAxMykgLy8gKEFEQykgT3ZlcnJ1biBFcnJvcg0KKyNkZWZpbmUgQVQ5MUNfQURDX09WUkU2ICAgICAgICAgICAoMHgxIDw8IDE0KSAvLyAoQURDKSBPdmVycnVuIEVycm9yDQorI2RlZmluZSBBVDkxQ19BRENfT1ZSRTcgICAgICAgICAgICgweDEgPDwgMTUpIC8vIChBREMpIE92ZXJydW4gRXJyb3INCisjZGVmaW5lIEFUOTFDX0FEQ19EUkRZICAgICAgICAgICAgKDB4MSA8PCAxNikgLy8gKEFEQykgRGF0YSBSZWFkeQ0KKyNkZWZpbmUgQVQ5MUNfQURDX0dPVlJFICAgICAgICAgICAoMHgxIDw8IDE3KSAvLyAoQURDKSBHZW5lcmFsIE92ZXJydW4NCisjZGVmaW5lIEFUOTFDX0FEQ19FTkRSWCAgICAgICAgICAgKDB4MSA8PCAxOCkgLy8gKEFEQykgRW5kIG9mIFJlY2VpdmVyIFRyYW5zZmVyDQorI2RlZmluZSBBVDkxQ19BRENfUlhCVUZGICAgICAgICAgICgweDEgPDwgMTkpIC8vIChBREMpIFJYQlVGRiBJbnRlcnJ1cHQNCisvLyAtLS0tLS0tLSBBRENfTENEUiA6IChBREMgT2Zmc2V0OiAweDIwKSBBREMgTGFzdCBDb252ZXJ0ZWQgRGF0YSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX0FEQ19MREFUQSAgICAgICAgICAgKDB4M0ZGIDw8ICAwKSAvLyAoQURDKSBMYXN0IERhdGEgQ29udmVydGVkDQorLy8gLS0tLS0tLS0gQURDX0lFUiA6IChBREMgT2Zmc2V0OiAweDI0KSBBREMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRENfSURSIDogKEFEQyBPZmZzZXQ6IDB4MjgpIEFEQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRENfSU1SIDogKEFEQyBPZmZzZXQ6IDB4MmMpIEFEQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRENfQ0RSMCA6IChBREMgT2Zmc2V0OiAweDMwKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDAgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BRENfREFUQSAgICAgICAgICAgICgweDNGRiA8PCAgMCkgLy8gKEFEQykgQ29udmVydGVkIERhdGENCisvLyAtLS0tLS0tLSBBRENfQ0RSMSA6IChBREMgT2Zmc2V0OiAweDM0KSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDEgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX0NEUjIgOiAoQURDIE9mZnNldDogMHgzOCkgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19DRFIzIDogKEFEQyBPZmZzZXQ6IDB4M2MpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMyAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRENfQ0RSNCA6IChBREMgT2Zmc2V0OiAweDQwKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDQgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQURDX0NEUjUgOiAoQURDIE9mZnNldDogMHg0NCkgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA1IC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFEQ19DRFI2IDogKEFEQyBPZmZzZXQ6IDB4NDgpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNiAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBBRENfQ0RSNyA6IChBREMgT2Zmc2V0OiAweDRjKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDcgLS0tLS0tLS0gDQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBBZHZhbmNlZCAgRW5jcnlwdGlvbiBTdGFuZGFyZCAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogKioqIFJlZ2lzdGVyIG9mZnNldCBpbiBBVDkxU19BRVMgc3RydWN0dXJlICoqKiAqLw0KLSNkZWZpbmUgQUVTX0NSICAgICAgICAgICAgICAgICAgICAgICAgICAoIDAgKSAgICAgICAgICAvKiBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBRVNfTVIgICAgICAgICAgICAgICAgICAgICAgICAgICggNCApICAgICAgICAgIC8qIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFFU19JRVIgICAgICAgICAgICAgICAgICAgICAgICAgKCAxNiApICAgICAgICAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQUVTX0lEUiAgICAgICAgICAgICAgICAgICAgICAgICAoIDIwICkgICAgICAgICAvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQUVTX0lNUiAgICAgICAgICAgICAgICAgICAgICAgICAoIDI0ICkgICAgICAgICAvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQUVTX0lTUiAgICAgICAgICAgICAgICAgICAgICAgICAoIDI4ICkgICAgICAgICAvKiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBRVNfS0VZV3hSICAgICAgICAgICAgICAgICAgICAgICggMzIgKSAgICAgICAgIC8qIEtleSBXb3JkIHggUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFFU19JREFUQXhSICAgICAgICAgICAgICAgICAgICAgKCA2NCApICAgICAgICAgLyogSW5wdXQgRGF0YSB4IFJlZ2lzdGVyICovDQotI2RlZmluZSBBRVNfT0RBVEF4UiAgICAgICAgICAgICAgICAgICAgICggODAgKSAgICAgICAgIC8qIE91dHB1dCBEYXRhIHggUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFFU19JVnhSICAgICAgICAgICAgICAgICAgICAgICAgKCA5NiApICAgICAgICAgLyogSW5pdGlhbGl6YXRpb24gVmVjdG9yIHggUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFFU19WUiAgICAgICAgICAgICAgICAgICAgICAgICAgKCAyNTIgKSAgICAgICAgLyogQUVTIFZlcnNpb24gUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFFU19SUFIgICAgICAgICAgICAgICAgICAgICAgICAgKCAyNTYgKSAgICAgICAgLyogUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBRVNfUkNSICAgICAgICAgICAgICAgICAgICAgICAgICggMjYwICkgICAgICAgIC8qIFJlY2VpdmUgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQUVTX1RQUiAgICAgICAgICAgICAgICAgICAgICAgICAoIDI2NCApICAgICAgICAvKiBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBRVNfVENSICAgICAgICAgICAgICAgICAgICAgICAgICggMjY4ICkgICAgICAgIC8qIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFFU19STlBSICAgICAgICAgICAgICAgICAgICAgICAgKCAyNzIgKSAgICAgICAgLyogUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFFU19STkNSICAgICAgICAgICAgICAgICAgICAgICAgKCAyNzYgKSAgICAgICAgLyogUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFFU19UTlBSICAgICAgICAgICAgICAgICAgICAgICAgKCAyODAgKSAgICAgICAgLyogVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBRVNfVE5DUiAgICAgICAgICAgICAgICAgICAgICAgICggMjg0ICkgICAgICAgIC8qIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQUVTX1BUQ1IgICAgICAgICAgICAgICAgICAgICAgICAoIDI4OCApICAgICAgICAvKiBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQUVTX1BUU1IgICAgICAgICAgICAgICAgICAgICAgICAoIDI5MiApICAgICAgICAvKiBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotLyogLS0tLS0tLS0gQUVTX0NSIDogKEFFUyBPZmZzZXQ6IDB4MCkgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX1NUQVJUICAgICAgICAgICAgICAgICAoIDB4MSA8PCAwICkgICAvKiAoQUVTKSBTdGFydHMgUHJvY2Vzc2luZyAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX1NXUlNUICAgICAgICAgICAgICAgICAoIDB4MSA8PCA4ICkgICAvKiAoQUVTKSBTb2Z0d2FyZSBSZXNldCAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX0xPQURTRUVEICAgICAgICAgICAgICAoIDB4MSA8PCAxNiApICAvKiAoQUVTKSBSYW5kb20gTnVtYmVyIEdlbmVyYXRvciBTZWVkIExvYWRpbmcgKi8NCi0vKiAtLS0tLS0tLSBBRVNfTVIgOiAoQUVTIE9mZnNldDogMHg0KSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19BRVNfQ0lQSEVSICAgICAgICAgICAgICAgICggMHgxIDw8IDAgKSAgIC8qIChBRVMpIFByb2Nlc3NpbmcgTW9kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX1BST0NETFkgICAgICAgICAgICAgICAoIDB4RiA8PCA0ICkgICAvKiAoQUVTKSBQcm9jZXNzaW5nIERlbGF5ICovDQotI2RlZmluZSBBVDkxQ19BRVNfU01PRCAgICAgICAgICAgICAgICAgICggMHgzIDw8IDggKSAgIC8qIChBRVMpIFN0YXJ0IE1vZGUgKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfU01PRF9NQU5VQUwgICAgICAgKCAweDAgPDwgOCApICAgLyogKEFFUykgTWFudWFsIE1vZGU6IFRoZSBTVEFSVCBiaXQgaW4gcmVnaXN0ZXIgQUVTX0NSIG11c3QgYmUgc2V0IHRvIGJlZ2luIGVuY3J5cHRpb24gb3IgZGVjcnlwdGlvbi4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfU01PRF9BVVRPICAgICAgICAgKCAweDEgPDwgOCApICAgLyogKEFFUykgQXV0byBNb2RlOiBubyBhY3Rpb24gaW4gQUVTX0NSIGlzIG5lY2Vzc2FyeSAoY2YgZGF0YXNoZWV0KS4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfU01PRF9QREMgICAgICAgICAgKCAweDIgPDwgOCApICAgLyogKEFFUykgUERDIE1vZGUgKGNmIGRhdGFzaGVldCkuICovDQotI2RlZmluZSBBVDkxQ19BRVNfT1BNT0QgICAgICAgICAgICAgICAgICggMHg3IDw8IDEyICkgIC8qIChBRVMpIE9wZXJhdGlvbiBNb2RlICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUVTX09QTU9EX0VDQiAgICAgICAgICggMHgwIDw8IDEyICkgIC8qIChBRVMpIEVDQiBFbGVjdHJvbmljIENvZGVCb29rIG1vZGUuICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUVTX09QTU9EX0NCQyAgICAgICAgICggMHgxIDw8IDEyICkgIC8qIChBRVMpIENCQyBDaXBoZXIgQmxvY2sgQ2hhaW5pbmcgbW9kZS4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfT1BNT0RfT0ZCICAgICAgICAgKCAweDIgPDwgMTIgKSAgLyogKEFFUykgT0ZCIE91dHB1dCBGZWVkYmFjayBtb2RlLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FFU19PUE1PRF9DRkIgICAgICAgICAoIDB4MyA8PCAxMiApICAvKiAoQUVTKSBDRkIgQ2lwaGVyIEZlZWRiYWNrIG1vZGUuICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUVTX09QTU9EX0NUUiAgICAgICAgICggMHg0IDw8IDEyICkgIC8qIChBRVMpIENUUiBDb3VudGVyIG1vZGUuICovDQotI2RlZmluZSBBVDkxQ19BRVNfTE9EICAgICAgICAgICAgICAgICAgICggMHgxIDw8IDE1ICkgIC8qIChBRVMpIExhc3QgT3V0cHV0IERhdGEgTW9kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX0NGQlMgICAgICAgICAgICAgICAgICAoIDB4NyA8PCAxNiApICAvKiAoQUVTKSBDaXBoZXIgRmVlZGJhY2sgRGF0YSBTaXplICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUVTX0NGQlNfMTI4X0JJVCAgICAgICggMHgwIDw8IDE2ICkgIC8qIChBRVMpIDEyOC1iaXQuICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUVTX0NGQlNfNjRfQklUICAgICAgICggMHgxIDw8IDE2ICkgIC8qIChBRVMpIDY0LWJpdC4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfQ0ZCU18zMl9CSVQgICAgICAgKCAweDIgPDwgMTYgKSAgLyogKEFFUykgMzItYml0LiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FFU19DRkJTXzE2X0JJVCAgICAgICAoIDB4MyA8PCAxNiApICAvKiAoQUVTKSAxNi1iaXQuICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUVTX0NGQlNfOF9CSVQgICAgICAgICggMHg0IDw8IDE2ICkgIC8qIChBRVMpIDgtYml0LiAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX0NLRVkgICAgICAgICAgICAgICAgICAoIDB4RiA8PCAyMCApICAvKiAoQUVTKSBDb3VudGVybWVhc3VyZSBLZXkgKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19DVFlQRSAgICAgICAgICAgICAgICAgKCAweDFGIDw8IDI0ICkgLyogKEFFUykgQ291bnRlcm1lYXN1cmUgVHlwZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FFU19DVFlQRV9UWVBFMV9FTiAgICAoIDB4MSA8PCAyNCApICAvKiAoQUVTKSBDb3VudGVybWVhc3VyZSB0eXBlIDEgaXMgZW5hYmxlZC4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfQ1RZUEVfVFlQRTJfRU4gICAgKCAweDIgPDwgMjQgKSAgLyogKEFFUykgQ291bnRlcm1lYXN1cmUgdHlwZSAyIGlzIGVuYWJsZWQuICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUVTX0NUWVBFX1RZUEUzX0VOICAgICggMHg0IDw8IDI0ICkgIC8qIChBRVMpIENvdW50ZXJtZWFzdXJlIHR5cGUgMyBpcyBlbmFibGVkLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FFU19DVFlQRV9UWVBFNF9FTiAgICAoIDB4OCA8PCAyNCApICAvKiAoQUVTKSBDb3VudGVybWVhc3VyZSB0eXBlIDQgaXMgZW5hYmxlZC4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19BRVNfQ1RZUEVfVFlQRTVfRU4gICAgKCAweDEwIDw8IDI0ICkgLyogKEFFUykgQ291bnRlcm1lYXN1cmUgdHlwZSA1IGlzIGVuYWJsZWQuICovDQotLyogLS0tLS0tLS0gQUVTX0lFUiA6IChBRVMgT2Zmc2V0OiAweDEwKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19BRVNfREFUUkRZICAgICAgICAgICAgICAgICggMHgxIDw8IDAgKSAgIC8qIChBRVMpIERBVFJEWSAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX0VORFJYICAgICAgICAgICAgICAgICAoIDB4MSA8PCAxICkgICAvKiAoQUVTKSBQREMgUmVhZCBCdWZmZXIgRW5kICovDQotI2RlZmluZSBBVDkxQ19BRVNfRU5EVFggICAgICAgICAgICAgICAgICggMHgxIDw8IDIgKSAgIC8qIChBRVMpIFBEQyBXcml0ZSBCdWZmZXIgRW5kICovDQotI2RlZmluZSBBVDkxQ19BRVNfUlhCVUZGICAgICAgICAgICAgICAgICggMHgxIDw8IDMgKSAgIC8qIChBRVMpIFBEQyBSZWFkIEJ1ZmZlciBGdWxsICovDQotI2RlZmluZSBBVDkxQ19BRVNfVFhCVUZFICAgICAgICAgICAgICAgICggMHgxIDw8IDQgKSAgIC8qIChBRVMpIFBEQyBXcml0ZSBCdWZmZXIgRW1wdHkgKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19VUkFEICAgICAgICAgICAgICAgICAgKCAweDEgPDwgOCApICAgLyogKEFFUykgVW5zcGVjaWZpZWQgUmVnaXN0ZXIgQWNjZXNzIERldGVjdGlvbiAqLw0KLS8qIC0tLS0tLS0tIEFFU19JRFIgOiAoQUVTIE9mZnNldDogMHgxNCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0vKiAtLS0tLS0tLSBBRVNfSU1SIDogKEFFUyBPZmZzZXQ6IDB4MTgpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gQUVTX0lTUiA6IChBRVMgT2Zmc2V0OiAweDFjKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19BRVNfVVJBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMHg3IDw8IDEyICkgLyogKEFFUykgVW5zcGVjaWZpZWQgUmVnaXN0ZXIgQWNjZXNzIFR5cGUgU3RhdHVzICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUVTX1VSQVRfSU5fREFUX1dSSVRFX0RBVFBST0MgICAgICggMHgwIDw8IDEyICkgLyogKEFFUykgSW5wdXQgZGF0YSByZWdpc3RlciB3cml0dGVuIGR1cmluZyB0aGUgZGF0YSBwcm9jZXNzaW5nIGluIFBEQyBtb2RlLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FFU19VUkFUX09VVF9EQVRfUkVBRF9EQVRQUk9DICAgICAoIDB4MSA8PCAxMiApIC8qIChBRVMpIE91dHB1dCBkYXRhIHJlZ2lzdGVyIHJlYWQgZHVyaW5nIHRoZSBkYXRhIHByb2Nlc3NpbmcuICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUVTX1VSQVRfTU9ERVJFR19XUklURV9EQVRQUk9DICAgICggMHgyIDw8IDEyICkgLyogKEFFUykgTW9kZSByZWdpc3RlciB3cml0dGVuIGR1cmluZyB0aGUgZGF0YSBwcm9jZXNzaW5nLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FFU19VUkFUX09VVF9EQVRfUkVBRF9TVUJLRVkgICAgICAoIDB4MyA8PCAxMiApIC8qIChBRVMpIE91dHB1dCBkYXRhIHJlZ2lzdGVyIHJlYWQgZHVyaW5nIHRoZSBzdWIta2V5cyBnZW5lcmF0aW9uLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX0FFU19VUkFUX01PREVSRUdfV1JJVEVfU1VCS0VZICAgICAoIDB4NCA8PCAxMiApIC8qIChBRVMpIE1vZGUgcmVnaXN0ZXIgd3JpdHRlbiBkdXJpbmcgdGhlIHN1Yi1rZXlzIGdlbmVyYXRpb24uICovDQotI2RlZmluZSAgICAgQVQ5MUNfQUVTX1VSQVRfV09fUkVHX1JFQUQgICAgICAgICAgICAgICggMHg1IDw8IDEyICkgLyogKEFFUykgV3JpdGUtb25seSByZWdpc3RlciByZWFkIGFjY2Vzcy4gKi8NCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIEFkdmFuY2VkICBFbmNyeXB0aW9uIFN0YW5kYXJkDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX0FFUyBzdHJ1Y3R1cmUgKioqDQorI2RlZmluZSBBRVNfQ1IgICAgICAgICAgKCAwKSAvLyBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBRVNfTVIgICAgICAgICAgKCA0KSAvLyBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBRVNfSUVSICAgICAgICAgKDE2KSAvLyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBRVNfSURSICAgICAgICAgKDIwKSAvLyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQUVTX0lNUiAgICAgICAgICgyNCkgLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFFU19JU1IgICAgICAgICAoMjgpIC8vIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFFU19LRVlXeFIgICAgICAoMzIpIC8vIEtleSBXb3JkIHggUmVnaXN0ZXINCisjZGVmaW5lIEFFU19JREFUQXhSICAgICAoNjQpIC8vIElucHV0IERhdGEgeCBSZWdpc3Rlcg0KKyNkZWZpbmUgQUVTX09EQVRBeFIgICAgICg4MCkgLy8gT3V0cHV0IERhdGEgeCBSZWdpc3Rlcg0KKyNkZWZpbmUgQUVTX0lWeFIgICAgICAgICg5NikgLy8gSW5pdGlhbGl6YXRpb24gVmVjdG9yIHggUmVnaXN0ZXINCisjZGVmaW5lIEFFU19WUiAgICAgICAgICAoMjUyKSAvLyBBRVMgVmVyc2lvbiBSZWdpc3Rlcg0KKyNkZWZpbmUgQUVTX1JQUiAgICAgICAgICgyNTYpIC8vIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQUVTX1JDUiAgICAgICAgICgyNjApIC8vIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQUVTX1RQUiAgICAgICAgICgyNjQpIC8vIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFFU19UQ1IgICAgICAgICAoMjY4KSAvLyBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBRVNfUk5QUiAgICAgICAgKDI3MikgLy8gUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFFU19STkNSICAgICAgICAoMjc2KSAvLyBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQUVTX1ROUFIgICAgICAgICgyODApIC8vIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQUVTX1ROQ1IgICAgICAgICgyODQpIC8vIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQUVTX1BUQ1IgICAgICAgICgyODgpIC8vIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBRVNfUFRTUiAgICAgICAgKDI5MikgLy8gUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKy8vIC0tLS0tLS0tIEFFU19DUiA6IChBRVMgT2Zmc2V0OiAweDApIENvbnRyb2wgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BRVNfU1RBUlQgICAgICAgICAgICgweDEgPDwgIDApIC8vIChBRVMpIFN0YXJ0cyBQcm9jZXNzaW5nDQorI2RlZmluZSBBVDkxQ19BRVNfU1dSU1QgICAgICAgICAgICgweDEgPDwgIDgpIC8vIChBRVMpIFNvZnR3YXJlIFJlc2V0DQorI2RlZmluZSBBVDkxQ19BRVNfTE9BRFNFRUQgICAgICAgICgweDEgPDwgMTYpIC8vIChBRVMpIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yIFNlZWQgTG9hZGluZw0KKy8vIC0tLS0tLS0tIEFFU19NUiA6IChBRVMgT2Zmc2V0OiAweDQpIE1vZGUgUmVnaXN0ZXIgLS0tLS0tLS0gDQorI2RlZmluZSBBVDkxQ19BRVNfQ0lQSEVSICAgICAgICAgICgweDEgPDwgIDApIC8vIChBRVMpIFByb2Nlc3NpbmcgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfQUVTX1BST0NETFkgICAgICAgICAoMHhGIDw8ICA0KSAvLyAoQUVTKSBQcm9jZXNzaW5nIERlbGF5DQorI2RlZmluZSBBVDkxQ19BRVNfU01PRCAgICAgICAgICAgICgweDMgPDwgIDgpIC8vIChBRVMpIFN0YXJ0IE1vZGUNCisjZGVmaW5lIAlBVDkxQ19BRVNfU01PRF9NQU5VQUwgICAgICAgICAgICAgICAoMHgwIDw8ICA4KSAvLyAoQUVTKSBNYW51YWwgTW9kZTogVGhlIFNUQVJUIGJpdCBpbiByZWdpc3RlciBBRVNfQ1IgbXVzdCBiZSBzZXQgdG8gYmVnaW4gZW5jcnlwdGlvbiBvciBkZWNyeXB0aW9uLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19TTU9EX0FVVE8gICAgICAgICAgICAgICAgICgweDEgPDwgIDgpIC8vIChBRVMpIEF1dG8gTW9kZTogbm8gYWN0aW9uIGluIEFFU19DUiBpcyBuZWNlc3NhcnkgKGNmIGRhdGFzaGVldCkuDQorI2RlZmluZSAJQVQ5MUNfQUVTX1NNT0RfUERDICAgICAgICAgICAgICAgICAgKDB4MiA8PCAgOCkgLy8gKEFFUykgUERDIE1vZGUgKGNmIGRhdGFzaGVldCkuDQorI2RlZmluZSBBVDkxQ19BRVNfT1BNT0QgICAgICAgICAgICgweDcgPDwgMTIpIC8vIChBRVMpIE9wZXJhdGlvbiBNb2RlDQorI2RlZmluZSAJQVQ5MUNfQUVTX09QTU9EX0VDQiAgICAgICAgICAgICAgICAgICgweDAgPDwgMTIpIC8vIChBRVMpIEVDQiBFbGVjdHJvbmljIENvZGVCb29rIG1vZGUuDQorI2RlZmluZSAJQVQ5MUNfQUVTX09QTU9EX0NCQyAgICAgICAgICAgICAgICAgICgweDEgPDwgMTIpIC8vIChBRVMpIENCQyBDaXBoZXIgQmxvY2sgQ2hhaW5pbmcgbW9kZS4NCisjZGVmaW5lIAlBVDkxQ19BRVNfT1BNT0RfT0ZCICAgICAgICAgICAgICAgICAgKDB4MiA8PCAxMikgLy8gKEFFUykgT0ZCIE91dHB1dCBGZWVkYmFjayBtb2RlLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19PUE1PRF9DRkIgICAgICAgICAgICAgICAgICAoMHgzIDw8IDEyKSAvLyAoQUVTKSBDRkIgQ2lwaGVyIEZlZWRiYWNrIG1vZGUuDQorI2RlZmluZSAJQVQ5MUNfQUVTX09QTU9EX0NUUiAgICAgICAgICAgICAgICAgICgweDQgPDwgMTIpIC8vIChBRVMpIENUUiBDb3VudGVyIG1vZGUuDQorI2RlZmluZSBBVDkxQ19BRVNfTE9EICAgICAgICAgICAgICgweDEgPDwgMTUpIC8vIChBRVMpIExhc3QgT3V0cHV0IERhdGEgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfQUVTX0NGQlMgICAgICAgICAgICAoMHg3IDw8IDE2KSAvLyAoQUVTKSBDaXBoZXIgRmVlZGJhY2sgRGF0YSBTaXplDQorI2RlZmluZSAJQVQ5MUNfQUVTX0NGQlNfMTI4X0JJVCAgICAgICAgICAgICAgKDB4MCA8PCAxNikgLy8gKEFFUykgMTI4LWJpdC4NCisjZGVmaW5lIAlBVDkxQ19BRVNfQ0ZCU182NF9CSVQgICAgICAgICAgICAgICAoMHgxIDw8IDE2KSAvLyAoQUVTKSA2NC1iaXQuDQorI2RlZmluZSAJQVQ5MUNfQUVTX0NGQlNfMzJfQklUICAgICAgICAgICAgICAgKDB4MiA8PCAxNikgLy8gKEFFUykgMzItYml0Lg0KKyNkZWZpbmUgCUFUOTFDX0FFU19DRkJTXzE2X0JJVCAgICAgICAgICAgICAgICgweDMgPDwgMTYpIC8vIChBRVMpIDE2LWJpdC4NCisjZGVmaW5lIAlBVDkxQ19BRVNfQ0ZCU184X0JJVCAgICAgICAgICAgICAgICAoMHg0IDw8IDE2KSAvLyAoQUVTKSA4LWJpdC4NCisjZGVmaW5lIEFUOTFDX0FFU19DS0VZICAgICAgICAgICAgKDB4RiA8PCAyMCkgLy8gKEFFUykgQ291bnRlcm1lYXN1cmUgS2V5DQorI2RlZmluZSBBVDkxQ19BRVNfQ1RZUEUgICAgICAgICAgICgweDFGIDw8IDI0KSAvLyAoQUVTKSBDb3VudGVybWVhc3VyZSBUeXBlDQorI2RlZmluZSAJQVQ5MUNfQUVTX0NUWVBFX1RZUEUxX0VOICAgICAgICAgICAgICgweDEgPDwgMjQpIC8vIChBRVMpIENvdW50ZXJtZWFzdXJlIHR5cGUgMSBpcyBlbmFibGVkLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19DVFlQRV9UWVBFMl9FTiAgICAgICAgICAgICAoMHgyIDw8IDI0KSAvLyAoQUVTKSBDb3VudGVybWVhc3VyZSB0eXBlIDIgaXMgZW5hYmxlZC4NCisjZGVmaW5lIAlBVDkxQ19BRVNfQ1RZUEVfVFlQRTNfRU4gICAgICAgICAgICAgKDB4NCA8PCAyNCkgLy8gKEFFUykgQ291bnRlcm1lYXN1cmUgdHlwZSAzIGlzIGVuYWJsZWQuDQorI2RlZmluZSAJQVQ5MUNfQUVTX0NUWVBFX1RZUEU0X0VOICAgICAgICAgICAgICgweDggPDwgMjQpIC8vIChBRVMpIENvdW50ZXJtZWFzdXJlIHR5cGUgNCBpcyBlbmFibGVkLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19DVFlQRV9UWVBFNV9FTiAgICAgICAgICAgICAoMHgxMCA8PCAyNCkgLy8gKEFFUykgQ291bnRlcm1lYXN1cmUgdHlwZSA1IGlzIGVuYWJsZWQuDQorLy8gLS0tLS0tLS0gQUVTX0lFUiA6IChBRVMgT2Zmc2V0OiAweDEwKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQUVTX0RBVFJEWSAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoQUVTKSBEQVRSRFkNCisjZGVmaW5lIEFUOTFDX0FFU19FTkRSWCAgICAgICAgICAgKDB4MSA8PCAgMSkgLy8gKEFFUykgUERDIFJlYWQgQnVmZmVyIEVuZA0KKyNkZWZpbmUgQVQ5MUNfQUVTX0VORFRYICAgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoQUVTKSBQREMgV3JpdGUgQnVmZmVyIEVuZA0KKyNkZWZpbmUgQVQ5MUNfQUVTX1JYQlVGRiAgICAgICAgICAoMHgxIDw8ICAzKSAvLyAoQUVTKSBQREMgUmVhZCBCdWZmZXIgRnVsbA0KKyNkZWZpbmUgQVQ5MUNfQUVTX1RYQlVGRSAgICAgICAgICAoMHgxIDw8ICA0KSAvLyAoQUVTKSBQREMgV3JpdGUgQnVmZmVyIEVtcHR5DQorI2RlZmluZSBBVDkxQ19BRVNfVVJBRCAgICAgICAgICAgICgweDEgPDwgIDgpIC8vIChBRVMpIFVuc3BlY2lmaWVkIFJlZ2lzdGVyIEFjY2VzcyBEZXRlY3Rpb24NCisvLyAtLS0tLS0tLSBBRVNfSURSIDogKEFFUyBPZmZzZXQ6IDB4MTQpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIEFFU19JTVIgOiAoQUVTIE9mZnNldDogMHgxOCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLS0tLS0tLS0gDQorLy8gLS0tLS0tLS0gQUVTX0lTUiA6IChBRVMgT2Zmc2V0OiAweDFjKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfQUVTX1VSQVQgICAgICAgICAgICAoMHg3IDw8IDEyKSAvLyAoQUVTKSBVbnNwZWNpZmllZCBSZWdpc3RlciBBY2Nlc3MgVHlwZSBTdGF0dXMNCisjZGVmaW5lIAlBVDkxQ19BRVNfVVJBVF9JTl9EQVRfV1JJVEVfREFUUFJPQyAoMHgwIDw8IDEyKSAvLyAoQUVTKSBJbnB1dCBkYXRhIHJlZ2lzdGVyIHdyaXR0ZW4gZHVyaW5nIHRoZSBkYXRhIHByb2Nlc3NpbmcgaW4gUERDIG1vZGUuDQorI2RlZmluZSAJQVQ5MUNfQUVTX1VSQVRfT1VUX0RBVF9SRUFEX0RBVFBST0MgKDB4MSA8PCAxMikgLy8gKEFFUykgT3V0cHV0IGRhdGEgcmVnaXN0ZXIgcmVhZCBkdXJpbmcgdGhlIGRhdGEgcHJvY2Vzc2luZy4NCisjZGVmaW5lIAlBVDkxQ19BRVNfVVJBVF9NT0RFUkVHX1dSSVRFX0RBVFBST0MgKDB4MiA8PCAxMikgLy8gKEFFUykgTW9kZSByZWdpc3RlciB3cml0dGVuIGR1cmluZyB0aGUgZGF0YSBwcm9jZXNzaW5nLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19VUkFUX09VVF9EQVRfUkVBRF9TVUJLRVkgICgweDMgPDwgMTIpIC8vIChBRVMpIE91dHB1dCBkYXRhIHJlZ2lzdGVyIHJlYWQgZHVyaW5nIHRoZSBzdWIta2V5cyBnZW5lcmF0aW9uLg0KKyNkZWZpbmUgCUFUOTFDX0FFU19VUkFUX01PREVSRUdfV1JJVEVfU1VCS0VZICgweDQgPDwgMTIpIC8vIChBRVMpIE1vZGUgcmVnaXN0ZXIgd3JpdHRlbiBkdXJpbmcgdGhlIHN1Yi1rZXlzIGdlbmVyYXRpb24uDQorI2RlZmluZSAJQVQ5MUNfQUVTX1VSQVRfV09fUkVHX1JFQUQgICAgICAgICAgKDB4NSA8PCAxMikgLy8gKEFFUykgV3JpdGUtb25seSByZWdpc3RlciByZWFkIGFjY2Vzcy4NCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgREVGSU5JVElPTiAgRk9SIFRyaXBsZSBEYXRhIEVuY3J5cHRpb24gU3RhbmRhcmQgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICoqKiBSZWdpc3RlciBvZmZzZXQgaW4gQVQ5MVNfVERFUyBzdHJ1Y3R1cmUgKioqICovDQotI2RlZmluZSBUREVTX0NSICAgICAgICAgICAgICAgICAgICAgICAoIDAgKSAgICAgICAgIC8qIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFRERVNfTVIgICAgICAgICAgICAgICAgICAgICAgICggNCApICAgICAgICAgLyogTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVERFU19JRVIgICAgICAgICAgICAgICAgICAgICAgKCAxNiApICAgICAgICAvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBUREVTX0lEUiAgICAgICAgICAgICAgICAgICAgICAoIDIwICkgICAgICAgIC8qIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBUREVTX0lNUiAgICAgICAgICAgICAgICAgICAgICAoIDI0ICkgICAgICAgIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBUREVTX0lTUiAgICAgICAgICAgICAgICAgICAgICAoIDI4ICkgICAgICAgIC8qIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFRERVNfS0VZMVd4UiAgICAgICAgICAgICAgICAgICggMzIgKSAgICAgICAgLyogS2V5IDEgV29yZCB4IFJlZ2lzdGVyICovDQotI2RlZmluZSBUREVTX0tFWTJXeFIgICAgICAgICAgICAgICAgICAoIDQwICkgICAgICAgIC8qIEtleSAyIFdvcmQgeCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVERFU19LRVkzV3hSICAgICAgICAgICAgICAgICAgKCA0OCApICAgICAgICAvKiBLZXkgMyBXb3JkIHggUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFRERVNfSURBVEF4UiAgICAgICAgICAgICAgICAgICggNjQgKSAgICAgICAgLyogSW5wdXQgRGF0YSB4IFJlZ2lzdGVyICovDQotI2RlZmluZSBUREVTX09EQVRBeFIgICAgICAgICAgICAgICAgICAoIDgwICkgICAgICAgIC8qIE91dHB1dCBEYXRhIHggUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFRERVNfSVZ4UiAgICAgICAgICAgICAgICAgICAgICggOTYgKSAgICAgICAgLyogSW5pdGlhbGl6YXRpb24gVmVjdG9yIHggUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFRERVNfVlIgICAgICAgICAgICAgICAgICAgICAgICggMjUyICkgICAgICAgLyogVERFUyBWZXJzaW9uIFJlZ2lzdGVyICovDQotI2RlZmluZSBUREVTX1JQUiAgICAgICAgICAgICAgICAgICAgICAoIDI1NiApICAgICAgIC8qIFJlY2VpdmUgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVERFU19SQ1IgICAgICAgICAgICAgICAgICAgICAgKCAyNjAgKSAgICAgICAvKiBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFRERVNfVFBSICAgICAgICAgICAgICAgICAgICAgICggMjY0ICkgICAgICAgLyogVHJhbnNtaXQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVERFU19UQ1IgICAgICAgICAgICAgICAgICAgICAgKCAyNjggKSAgICAgICAvKiBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBUREVTX1JOUFIgICAgICAgICAgICAgICAgICAgICAoIDI3MiApICAgICAgIC8qIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBUREVTX1JOQ1IgICAgICAgICAgICAgICAgICAgICAoIDI3NiApICAgICAgIC8qIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBUREVTX1ROUFIgICAgICAgICAgICAgICAgICAgICAoIDI4MCApICAgICAgIC8qIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgVERFU19UTkNSICAgICAgICAgICAgICAgICAgICAgKCAyODQgKSAgICAgICAvKiBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFRERVNfUFRDUiAgICAgICAgICAgICAgICAgICAgICggMjg4ICkgICAgICAgLyogUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIFRERVNfUFRTUiAgICAgICAgICAgICAgICAgICAgICggMjkyICkgICAgICAgLyogUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLS8qIC0tLS0tLS0tIFRERVNfQ1IgOiAoVERFUyBPZmZzZXQ6IDB4MCkgQ29udHJvbCBSZWdpc3RlciAtLS0tLS0tLSAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19TVEFSVCAgICAgICAgICAgICAgKCAweDEgPDwgMCApICAvKiAoVERFUykgU3RhcnRzIFByb2Nlc3NpbmcgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfU1dSU1QgICAgICAgICAgICAgICggMHgxIDw8IDggKSAgLyogKFRERVMpIFNvZnR3YXJlIFJlc2V0ICovDQotLyogLS0tLS0tLS0gVERFU19NUiA6IChUREVTIE9mZnNldDogMHg0KSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotI2RlZmluZSBBVDkxQ19UREVTX0NJUEhFUiAgICAgICAgICAgICAoIDB4MSA8PCAwICkgIC8qIChUREVTKSBQcm9jZXNzaW5nIE1vZGUgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfVERFU01PRCAgICAgICAgICAgICggMHgxIDw8IDEgKSAgLyogKFRERVMpIFNpbmdsZSBvciBUcmlwbGUgREVTIE1vZGUgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfS0VZTU9EICAgICAgICAgICAgICggMHgxIDw8IDQgKSAgLyogKFRERVMpIEtleSBNb2RlICovDQotI2RlZmluZSBBVDkxQ19UREVTX1NNT0QgICAgICAgICAgICAgICAoIDB4MyA8PCA4ICkgIC8qIChUREVTKSBTdGFydCBNb2RlICovDQotI2RlZmluZSAgICAgQVQ5MUNfVERFU19TTU9EX01BTlVBTCAgICAoIDB4MCA8PCA4ICkgIC8qIChUREVTKSBNYW51YWwgTW9kZTogVGhlIFNUQVJUIGJpdCBpbiByZWdpc3RlciBUREVTX0NSIG11c3QgYmUgc2V0IHRvIGJlZ2luIGVuY3J5cHRpb24gb3IgZGVjcnlwdGlvbi4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UREVTX1NNT0RfQVVUTyAgICAgICggMHgxIDw8IDggKSAgLyogKFRERVMpIEF1dG8gTW9kZTogbm8gYWN0aW9uIGluIFRERVNfQ1IgaXMgbmVjZXNzYXJ5IChjZiBkYXRhc2hlZXQpLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RERVNfU01PRF9QREMgICAgICAgKCAweDIgPDwgOCApICAvKiAoVERFUykgUERDIE1vZGUgKGNmIGRhdGFzaGVldCkuICovDQotI2RlZmluZSBBVDkxQ19UREVTX09QTU9EICAgICAgICAgICAgICAoIDB4MyA8PCAxMiApIC8qIChUREVTKSBPcGVyYXRpb24gTW9kZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RERVNfT1BNT0RfRUNCICAgICAgKCAweDAgPDwgMTIgKSAvKiAoVERFUykgRUNCIEVsZWN0cm9uaWMgQ29kZUJvb2sgbW9kZS4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UREVTX09QTU9EX0NCQyAgICAgICggMHgxIDw8IDEyICkgLyogKFRERVMpIENCQyBDaXBoZXIgQmxvY2sgQ2hhaW5pbmcgbW9kZS4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UREVTX09QTU9EX09GQiAgICAgICggMHgyIDw8IDEyICkgLyogKFRERVMpIE9GQiBPdXRwdXQgRmVlZGJhY2sgbW9kZS4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UREVTX09QTU9EX0NGQiAgICAgICggMHgzIDw8IDEyICkgLyogKFRERVMpIENGQiBDaXBoZXIgRmVlZGJhY2sgbW9kZS4gKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfTE9EICAgICAgICAgICAgICAgICggMHgxIDw8IDE1ICkgLyogKFRERVMpIExhc3QgT3V0cHV0IERhdGEgTW9kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19DRkJTICAgICAgICAgICAgICAgKCAweDMgPDwgMTYgKSAvKiAoVERFUykgQ2lwaGVyIEZlZWRiYWNrIERhdGEgU2l6ZSAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RERVNfQ0ZCU182NF9CSVQgICAgKCAweDAgPDwgMTYgKSAvKiAoVERFUykgNjQtYml0LiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RERVNfQ0ZCU18zMl9CSVQgICAgKCAweDEgPDwgMTYgKSAvKiAoVERFUykgMzItYml0LiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RERVNfQ0ZCU18xNl9CSVQgICAgKCAweDIgPDwgMTYgKSAvKiAoVERFUykgMTYtYml0LiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RERVNfQ0ZCU184X0JJVCAgICAgKCAweDMgPDwgMTYgKSAvKiAoVERFUykgOC1iaXQuICovDQotLyogLS0tLS0tLS0gVERFU19JRVIgOiAoVERFUyBPZmZzZXQ6IDB4MTApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfREFUUkRZICAgICAgICAgICAgICggMHgxIDw8IDAgKSAgLyogKFRERVMpIERBVFJEWSAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19FTkRSWCAgICAgICAgICAgICAgKCAweDEgPDwgMSApICAvKiAoVERFUykgUERDIFJlYWQgQnVmZmVyIEVuZCAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19FTkRUWCAgICAgICAgICAgICAgKCAweDEgPDwgMiApICAvKiAoVERFUykgUERDIFdyaXRlIEJ1ZmZlciBFbmQgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfUlhCVUZGICAgICAgICAgICAgICggMHgxIDw8IDMgKSAgLyogKFRERVMpIFBEQyBSZWFkIEJ1ZmZlciBGdWxsICovDQotI2RlZmluZSBBVDkxQ19UREVTX1RYQlVGRSAgICAgICAgICAgICAoIDB4MSA8PCA0ICkgIC8qIChUREVTKSBQREMgV3JpdGUgQnVmZmVyIEVtcHR5ICovDQotI2RlZmluZSBBVDkxQ19UREVTX1VSQUQgICAgICAgICAgICAgICAoIDB4MSA8PCA4ICkgIC8qIChUREVTKSBVbnNwZWNpZmllZCBSZWdpc3RlciBBY2Nlc3MgRGV0ZWN0aW9uICovDQotLyogLS0tLS0tLS0gVERFU19JRFIgOiAoVERFUyBPZmZzZXQ6IDB4MTQpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gVERFU19JTVIgOiAoVERFUyBPZmZzZXQ6IDB4MTgpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tICovDQotLyogLS0tLS0tLS0gVERFU19JU1IgOiAoVERFUyBPZmZzZXQ6IDB4MWMpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgLS0tLS0tLS0gKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfVVJBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMHgzIDw8IDEyICkgLyogKFRERVMpIFVuc3BlY2lmaWVkIFJlZ2lzdGVyIEFjY2VzcyBUeXBlIFN0YXR1cyAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RERVNfVVJBVF9JTl9EQVRfV1JJVEVfREFUUFJPQyAgICAgKCAweDAgPDwgMTIgKSAvKiAoVERFUykgSW5wdXQgZGF0YSByZWdpc3RlciB3cml0dGVuIGR1cmluZyB0aGUgZGF0YSBwcm9jZXNzaW5nIGluIFBEQyBtb2RlLiAqLw0KLSNkZWZpbmUgICAgIEFUOTFDX1RERVNfVVJBVF9PVVRfREFUX1JFQURfREFUUFJPQyAgICAgKCAweDEgPDwgMTIgKSAvKiAoVERFUykgT3V0cHV0IGRhdGEgcmVnaXN0ZXIgcmVhZCBkdXJpbmcgdGhlIGRhdGEgcHJvY2Vzc2luZy4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UREVTX1VSQVRfTU9ERVJFR19XUklURV9EQVRQUk9DICAgICggMHgyIDw8IDEyICkgLyogKFRERVMpIE1vZGUgcmVnaXN0ZXIgd3JpdHRlbiBkdXJpbmcgdGhlIGRhdGEgcHJvY2Vzc2luZy4gKi8NCi0jZGVmaW5lICAgICBBVDkxQ19UREVTX1VSQVRfV09fUkVHX1JFQUQgICAgICAgICAgICAgICggMHgzIDw8IDEyICkgLyogKFRERVMpIFdyaXRlLW9ubHkgcmVnaXN0ZXIgcmVhZCBhY2Nlc3MuICovDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIERFRklOSVRJT04gIEZPUiBUcmlwbGUgRGF0YSBFbmNyeXB0aW9uIFN0YW5kYXJkDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAqKiogUmVnaXN0ZXIgb2Zmc2V0IGluIEFUOTFTX1RERVMgc3RydWN0dXJlICoqKg0KKyNkZWZpbmUgVERFU19DUiAgICAgICAgICggMCkgLy8gQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgVERFU19NUiAgICAgICAgICggNCkgLy8gTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgVERFU19JRVIgICAgICAgICgxNikgLy8gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgVERFU19JRFIgICAgICAgICgyMCkgLy8gSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIFRERVNfSU1SICAgICAgICAoMjQpIC8vIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBUREVTX0lTUiAgICAgICAgKDI4KSAvLyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBUREVTX0tFWTFXeFIgICAgKDMyKSAvLyBLZXkgMSBXb3JkIHggUmVnaXN0ZXINCisjZGVmaW5lIFRERVNfS0VZMld4UiAgICAoNDApIC8vIEtleSAyIFdvcmQgeCBSZWdpc3Rlcg0KKyNkZWZpbmUgVERFU19LRVkzV3hSICAgICg0OCkgLy8gS2V5IDMgV29yZCB4IFJlZ2lzdGVyDQorI2RlZmluZSBUREVTX0lEQVRBeFIgICAgKDY0KSAvLyBJbnB1dCBEYXRhIHggUmVnaXN0ZXINCisjZGVmaW5lIFRERVNfT0RBVEF4UiAgICAoODApIC8vIE91dHB1dCBEYXRhIHggUmVnaXN0ZXINCisjZGVmaW5lIFRERVNfSVZ4UiAgICAgICAoOTYpIC8vIEluaXRpYWxpemF0aW9uIFZlY3RvciB4IFJlZ2lzdGVyDQorI2RlZmluZSBUREVTX1ZSICAgICAgICAgKDI1MikgLy8gVERFUyBWZXJzaW9uIFJlZ2lzdGVyDQorI2RlZmluZSBUREVTX1JQUiAgICAgICAgKDI1NikgLy8gUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBUREVTX1JDUiAgICAgICAgKDI2MCkgLy8gUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBUREVTX1RQUiAgICAgICAgKDI2NCkgLy8gVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgVERFU19UQ1IgICAgICAgICgyNjgpIC8vIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIFRERVNfUk5QUiAgICAgICAoMjcyKSAvLyBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgVERFU19STkNSICAgICAgICgyNzYpIC8vIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBUREVTX1ROUFIgICAgICAgKDI4MCkgLy8gVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBUREVTX1ROQ1IgICAgICAgKDI4NCkgLy8gVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBUREVTX1BUQ1IgICAgICAgKDI4OCkgLy8gUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIFRERVNfUFRTUiAgICAgICAoMjkyKSAvLyBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorLy8gLS0tLS0tLS0gVERFU19DUiA6IChUREVTIE9mZnNldDogMHgwKSBDb250cm9sIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVERFU19TVEFSVCAgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoVERFUykgU3RhcnRzIFByb2Nlc3NpbmcNCisjZGVmaW5lIEFUOTFDX1RERVNfU1dSU1QgICAgICAgICAgKDB4MSA8PCAgOCkgLy8gKFRERVMpIFNvZnR3YXJlIFJlc2V0DQorLy8gLS0tLS0tLS0gVERFU19NUiA6IChUREVTIE9mZnNldDogMHg0KSBNb2RlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKyNkZWZpbmUgQVQ5MUNfVERFU19DSVBIRVIgICAgICAgICAoMHgxIDw8ICAwKSAvLyAoVERFUykgUHJvY2Vzc2luZyBNb2RlDQorI2RlZmluZSBBVDkxQ19UREVTX1RERVNNT0QgICAgICAgICgweDEgPDwgIDEpIC8vIChUREVTKSBTaW5nbGUgb3IgVHJpcGxlIERFUyBNb2RlDQorI2RlZmluZSBBVDkxQ19UREVTX0tFWU1PRCAgICAgICAgICgweDEgPDwgIDQpIC8vIChUREVTKSBLZXkgTW9kZQ0KKyNkZWZpbmUgQVQ5MUNfVERFU19TTU9EICAgICAgICAgICAoMHgzIDw8ICA4KSAvLyAoVERFUykgU3RhcnQgTW9kZQ0KKyNkZWZpbmUgCUFUOTFDX1RERVNfU01PRF9NQU5VQUwgICAgICAgICAgICAgICAoMHgwIDw8ICA4KSAvLyAoVERFUykgTWFudWFsIE1vZGU6IFRoZSBTVEFSVCBiaXQgaW4gcmVnaXN0ZXIgVERFU19DUiBtdXN0IGJlIHNldCB0byBiZWdpbiBlbmNyeXB0aW9uIG9yIGRlY3J5cHRpb24uDQorI2RlZmluZSAJQVQ5MUNfVERFU19TTU9EX0FVVE8gICAgICAgICAgICAgICAgICgweDEgPDwgIDgpIC8vIChUREVTKSBBdXRvIE1vZGU6IG5vIGFjdGlvbiBpbiBUREVTX0NSIGlzIG5lY2Vzc2FyeSAoY2YgZGF0YXNoZWV0KS4NCisjZGVmaW5lIAlBVDkxQ19UREVTX1NNT0RfUERDICAgICAgICAgICAgICAgICAgKDB4MiA8PCAgOCkgLy8gKFRERVMpIFBEQyBNb2RlIChjZiBkYXRhc2hlZXQpLg0KKyNkZWZpbmUgQVQ5MUNfVERFU19PUE1PRCAgICAgICAgICAoMHgzIDw8IDEyKSAvLyAoVERFUykgT3BlcmF0aW9uIE1vZGUNCisjZGVmaW5lIAlBVDkxQ19UREVTX09QTU9EX0VDQiAgICAgICAgICAgICAgICAgICgweDAgPDwgMTIpIC8vIChUREVTKSBFQ0IgRWxlY3Ryb25pYyBDb2RlQm9vayBtb2RlLg0KKyNkZWZpbmUgCUFUOTFDX1RERVNfT1BNT0RfQ0JDICAgICAgICAgICAgICAgICAgKDB4MSA8PCAxMikgLy8gKFRERVMpIENCQyBDaXBoZXIgQmxvY2sgQ2hhaW5pbmcgbW9kZS4NCisjZGVmaW5lIAlBVDkxQ19UREVTX09QTU9EX09GQiAgICAgICAgICAgICAgICAgICgweDIgPDwgMTIpIC8vIChUREVTKSBPRkIgT3V0cHV0IEZlZWRiYWNrIG1vZGUuDQorI2RlZmluZSAJQVQ5MUNfVERFU19PUE1PRF9DRkIgICAgICAgICAgICAgICAgICAoMHgzIDw8IDEyKSAvLyAoVERFUykgQ0ZCIENpcGhlciBGZWVkYmFjayBtb2RlLg0KKyNkZWZpbmUgQVQ5MUNfVERFU19MT0QgICAgICAgICAgICAoMHgxIDw8IDE1KSAvLyAoVERFUykgTGFzdCBPdXRwdXQgRGF0YSBNb2RlDQorI2RlZmluZSBBVDkxQ19UREVTX0NGQlMgICAgICAgICAgICgweDMgPDwgMTYpIC8vIChUREVTKSBDaXBoZXIgRmVlZGJhY2sgRGF0YSBTaXplDQorI2RlZmluZSAJQVQ5MUNfVERFU19DRkJTXzY0X0JJVCAgICAgICAgICAgICAgICgweDAgPDwgMTYpIC8vIChUREVTKSA2NC1iaXQuDQorI2RlZmluZSAJQVQ5MUNfVERFU19DRkJTXzMyX0JJVCAgICAgICAgICAgICAgICgweDEgPDwgMTYpIC8vIChUREVTKSAzMi1iaXQuDQorI2RlZmluZSAJQVQ5MUNfVERFU19DRkJTXzE2X0JJVCAgICAgICAgICAgICAgICgweDIgPDwgMTYpIC8vIChUREVTKSAxNi1iaXQuDQorI2RlZmluZSAJQVQ5MUNfVERFU19DRkJTXzhfQklUICAgICAgICAgICAgICAgICgweDMgPDwgMTYpIC8vIChUREVTKSA4LWJpdC4NCisvLyAtLS0tLS0tLSBUREVTX0lFUiA6IChUREVTIE9mZnNldDogMHgxMCkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RERVNfREFUUkRZICAgICAgICAgKDB4MSA8PCAgMCkgLy8gKFRERVMpIERBVFJEWQ0KKyNkZWZpbmUgQVQ5MUNfVERFU19FTkRSWCAgICAgICAgICAoMHgxIDw8ICAxKSAvLyAoVERFUykgUERDIFJlYWQgQnVmZmVyIEVuZA0KKyNkZWZpbmUgQVQ5MUNfVERFU19FTkRUWCAgICAgICAgICAoMHgxIDw8ICAyKSAvLyAoVERFUykgUERDIFdyaXRlIEJ1ZmZlciBFbmQNCisjZGVmaW5lIEFUOTFDX1RERVNfUlhCVUZGICAgICAgICAgKDB4MSA8PCAgMykgLy8gKFRERVMpIFBEQyBSZWFkIEJ1ZmZlciBGdWxsDQorI2RlZmluZSBBVDkxQ19UREVTX1RYQlVGRSAgICAgICAgICgweDEgPDwgIDQpIC8vIChUREVTKSBQREMgV3JpdGUgQnVmZmVyIEVtcHR5DQorI2RlZmluZSBBVDkxQ19UREVTX1VSQUQgICAgICAgICAgICgweDEgPDwgIDgpIC8vIChUREVTKSBVbnNwZWNpZmllZCBSZWdpc3RlciBBY2Nlc3MgRGV0ZWN0aW9uDQorLy8gLS0tLS0tLS0gVERFU19JRFIgOiAoVERFUyBPZmZzZXQ6IDB4MTQpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyIC0tLS0tLS0tIA0KKy8vIC0tLS0tLS0tIFRERVNfSU1SIDogKFRERVMgT2Zmc2V0OiAweDE4KSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtLS0tLS0tLSANCisvLyAtLS0tLS0tLSBUREVTX0lTUiA6IChUREVTIE9mZnNldDogMHgxYykgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAtLS0tLS0tLSANCisjZGVmaW5lIEFUOTFDX1RERVNfVVJBVCAgICAgICAgICAgKDB4MyA8PCAxMikgLy8gKFRERVMpIFVuc3BlY2lmaWVkIFJlZ2lzdGVyIEFjY2VzcyBUeXBlIFN0YXR1cw0KKyNkZWZpbmUgCUFUOTFDX1RERVNfVVJBVF9JTl9EQVRfV1JJVEVfREFUUFJPQyAoMHgwIDw8IDEyKSAvLyAoVERFUykgSW5wdXQgZGF0YSByZWdpc3RlciB3cml0dGVuIGR1cmluZyB0aGUgZGF0YSBwcm9jZXNzaW5nIGluIFBEQyBtb2RlLg0KKyNkZWZpbmUgCUFUOTFDX1RERVNfVVJBVF9PVVRfREFUX1JFQURfREFUUFJPQyAoMHgxIDw8IDEyKSAvLyAoVERFUykgT3V0cHV0IGRhdGEgcmVnaXN0ZXIgcmVhZCBkdXJpbmcgdGhlIGRhdGEgcHJvY2Vzc2luZy4NCisjZGVmaW5lIAlBVDkxQ19UREVTX1VSQVRfTU9ERVJFR19XUklURV9EQVRQUk9DICgweDIgPDwgMTIpIC8vIChUREVTKSBNb2RlIHJlZ2lzdGVyIHdyaXR0ZW4gZHVyaW5nIHRoZSBkYXRhIHByb2Nlc3NpbmcuDQorI2RlZmluZSAJQVQ5MUNfVERFU19VUkFUX1dPX1JFR19SRUFEICAgICAgICAgICgweDMgPDwgMTIpIC8vIChUREVTKSBXcml0ZS1vbmx5IHJlZ2lzdGVyIHJlYWQgYWNjZXNzLg0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgICBSRUdJU1RFUiBBRERSRVNTIERFRklOSVRJT04gRk9SIEFUOTFTQU03WDI1NiAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBTWVMgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBBSUMgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19BSUNfSVZSICAgICAgICAgICAgICAoIDB4RkZGRkYxMDAgKSAvKiAoQUlDKSBJUlEgVmVjdG9yIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BSUNfU01SICAgICAgICAgICAgICAoIDB4RkZGRkYwMDAgKSAvKiAoQUlDKSBTb3VyY2UgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX0ZWUiAgICAgICAgICAgICAgKCAweEZGRkZGMTA0ICkgLyogKEFJQykgRklRIFZlY3RvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX0RDUiAgICAgICAgICAgICAgKCAweEZGRkZGMTM4ICkgLyogKEFJQykgRGVidWcgQ29udHJvbCBSZWdpc3RlciAoUHJvdGVjdCkgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19FT0lDUiAgICAgICAgICAgICggMHhGRkZGRjEzMCApIC8qIChBSUMpIEVuZCBvZiBJbnRlcnJ1cHQgQ29tbWFuZCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX1NWUiAgICAgICAgICAgICAgKCAweEZGRkZGMDgwICkgLyogKEFJQykgU291cmNlIFZlY3RvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX0ZGU1IgICAgICAgICAgICAgKCAweEZGRkZGMTQ4ICkgLyogKEFJQykgRmFzdCBGb3JjaW5nIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX0lDQ1IgICAgICAgICAgICAgKCAweEZGRkZGMTI4ICkgLyogKEFJQykgSW50ZXJydXB0IENsZWFyIENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19JU1IgICAgICAgICAgICAgICggMHhGRkZGRjEwOCApIC8qIChBSUMpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19JTVIgICAgICAgICAgICAgICggMHhGRkZGRjExMCApIC8qIChBSUMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BSUNfSVBSICAgICAgICAgICAgICAoIDB4RkZGRkYxMEMgKSAvKiAoQUlDKSBJbnRlcnJ1cHQgUGVuZGluZyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX0ZGRVIgICAgICAgICAgICAgKCAweEZGRkZGMTQwICkgLyogKEFJQykgRmFzdCBGb3JjaW5nIEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX0lFQ1IgICAgICAgICAgICAgKCAweEZGRkZGMTIwICkgLyogKEFJQykgSW50ZXJydXB0IEVuYWJsZSBDb21tYW5kIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BSUNfSVNDUiAgICAgICAgICAgICAoIDB4RkZGRkYxMkMgKSAvKiAoQUlDKSBJbnRlcnJ1cHQgU2V0IENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19GRkRSICAgICAgICAgICAgICggMHhGRkZGRjE0NCApIC8qIChBSUMpIEZhc3QgRm9yY2luZyBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BSUNfQ0lTUiAgICAgICAgICAgICAoIDB4RkZGRkYxMTQgKSAvKiAoQUlDKSBDb3JlIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19JRENSICAgICAgICAgICAgICggMHhGRkZGRjEyNCApIC8qIChBSUMpIEludGVycnVwdCBEaXNhYmxlIENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FJQ19TUFUgICAgICAgICAgICAgICggMHhGRkZGRjEzNCApIC8qIChBSUMpIFNwdXJpb3VzIFZlY3RvciBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX0RCR1UgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19EQkdVX1RDUiAgICAgICAgICAgICAoIDB4RkZGRkYzMEMgKSAvKiAoUERDX0RCR1UpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfUk5QUiAgICAgICAgICAgICggMHhGRkZGRjMxMCApIC8qIChQRENfREJHVSkgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfVE5QUiAgICAgICAgICAgICggMHhGRkZGRjMxOCApIC8qIChQRENfREJHVSkgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19EQkdVX1RQUiAgICAgICAgICAgICAoIDB4RkZGRkYzMDggKSAvKiAoUERDX0RCR1UpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfUlBSICAgICAgICAgICAgICggMHhGRkZGRjMwMCApIC8qIChQRENfREJHVSkgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19EQkdVX1JDUiAgICAgICAgICAgICAoIDB4RkZGRkYzMDQgKSAvKiAoUERDX0RCR1UpIFJlY2VpdmUgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9STkNSICAgICAgICAgICAgKCAweEZGRkZGMzE0ICkgLyogKFBEQ19EQkdVKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9QVENSICAgICAgICAgICAgKCAweEZGRkZGMzIwICkgLyogKFBEQ19EQkdVKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9QVFNSICAgICAgICAgICAgKCAweEZGRkZGMzI0ICkgLyogKFBEQ19EQkdVKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19EQkdVX1ROQ1IgICAgICAgICAgICAoIDB4RkZGRkYzMUMgKSAvKiAoUERDX0RCR1UpIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgREJHVSBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfRVhJRCAgICAgICAgICAgICggMHhGRkZGRjI0NCApIC8qIChEQkdVKSBDaGlwIElEIEV4dGVuc2lvbiBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9CUkdSICAgICAgICAgICAgKCAweEZGRkZGMjIwICkgLyogKERCR1UpIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfSURSICAgICAgICAgICAgICggMHhGRkZGRjIwQyApIC8qIChEQkdVKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9DU1IgICAgICAgICAgICAgKCAweEZGRkZGMjE0ICkgLyogKERCR1UpIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19EQkdVX0NJRFIgICAgICAgICAgICAoIDB4RkZGRkYyNDAgKSAvKiAoREJHVSkgQ2hpcCBJRCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9NUiAgICAgICAgICAgICAgKCAweEZGRkZGMjA0ICkgLyogKERCR1UpIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfSU1SICAgICAgICAgICAgICggMHhGRkZGRjIxMCApIC8qIChEQkdVKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9DUiAgICAgICAgICAgICAgKCAweEZGRkZGMjAwICkgLyogKERCR1UpIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfRk5UUiAgICAgICAgICAgICggMHhGRkZGRjI0OCApIC8qIChEQkdVKSBGb3JjZSBOVFJTVCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfREJHVV9USFIgICAgICAgICAgICAgKCAweEZGRkZGMjFDICkgLyogKERCR1UpIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0RCR1VfUkhSICAgICAgICAgICAgICggMHhGRkZGRjIxOCApIC8qIChEQkdVKSBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19EQkdVX0lFUiAgICAgICAgICAgICAoIDB4RkZGRkYyMDggKSAvKiAoREJHVSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUElPQSBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfT0RSICAgICAgICAgICAgICggMHhGRkZGRjQxNCApIC8qIChQSU9BKSBPdXRwdXQgRGlzYWJsZSBSZWdpc3RlcnIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfU09EUiAgICAgICAgICAgICggMHhGRkZGRjQzMCApIC8qIChQSU9BKSBTZXQgT3V0cHV0IERhdGEgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfSVNSICAgICAgICAgICAgICggMHhGRkZGRjQ0QyApIC8qIChQSU9BKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX0FCU1IgICAgICAgICAgICAoIDB4RkZGRkY0NzggKSAvKiAoUElPQSkgQUIgU2VsZWN0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9JRVIgICAgICAgICAgICAgKCAweEZGRkZGNDQwICkgLyogKFBJT0EpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfUFBVRFIgICAgICAgICAgICggMHhGRkZGRjQ2MCApIC8qIChQSU9BKSBQdWxsLXVwIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfSU1SICAgICAgICAgICAgICggMHhGRkZGRjQ0OCApIC8qIChQSU9BKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9QRVIgICAgICAgICAgICAgKCAweEZGRkZGNDAwICkgLyogKFBJT0EpIFBJTyBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfSUZEUiAgICAgICAgICAgICggMHhGRkZGRjQyNCApIC8qIChQSU9BKSBJbnB1dCBGaWx0ZXIgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9PV0RSICAgICAgICAgICAgKCAweEZGRkZGNEE0ICkgLyogKFBJT0EpIE91dHB1dCBXcml0ZSBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX01EU1IgICAgICAgICAgICAoIDB4RkZGRkY0NTggKSAvKiAoUElPQSkgTXVsdGktZHJpdmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9JRFIgICAgICAgICAgICAgKCAweEZGRkZGNDQ0ICkgLyogKFBJT0EpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX09EU1IgICAgICAgICAgICAoIDB4RkZGRkY0MzggKSAvKiAoUElPQSkgT3V0cHV0IERhdGEgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX1BQVVNSICAgICAgICAgICAoIDB4RkZGRkY0NjggKSAvKiAoUElPQSkgUHVsbC11cCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfT1dTUiAgICAgICAgICAgICggMHhGRkZGRjRBOCApIC8qIChQSU9BKSBPdXRwdXQgV3JpdGUgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX0JTUiAgICAgICAgICAgICAoIDB4RkZGRkY0NzQgKSAvKiAoUElPQSkgU2VsZWN0IEIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfT1dFUiAgICAgICAgICAgICggMHhGRkZGRjRBMCApIC8qIChQSU9BKSBPdXRwdXQgV3JpdGUgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX0lGRVIgICAgICAgICAgICAoIDB4RkZGRkY0MjAgKSAvKiAoUElPQSkgSW5wdXQgRmlsdGVyIEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9QRFNSICAgICAgICAgICAgKCAweEZGRkZGNDNDICkgLyogKFBJT0EpIFBpbiBEYXRhIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9QUFVFUiAgICAgICAgICAgKCAweEZGRkZGNDY0ICkgLyogKFBJT0EpIFB1bGwtdXAgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX09TUiAgICAgICAgICAgICAoIDB4RkZGRkY0MTggKSAvKiAoUElPQSkgT3V0cHV0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9BU1IgICAgICAgICAgICAgKCAweEZGRkZGNDcwICkgLyogKFBJT0EpIFNlbGVjdCBBIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX01ERFIgICAgICAgICAgICAoIDB4RkZGRkY0NTQgKSAvKiAoUElPQSkgTXVsdGktZHJpdmVyIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfQ09EUiAgICAgICAgICAgICggMHhGRkZGRjQzNCApIC8qIChQSU9BKSBDbGVhciBPdXRwdXQgRGF0YSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9NREVSICAgICAgICAgICAgKCAweEZGRkZGNDUwICkgLyogKFBJT0EpIE11bHRpLWRyaXZlciBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfUERSICAgICAgICAgICAgICggMHhGRkZGRjQwNCApIC8qIChQSU9BKSBQSU8gRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQV9JRlNSICAgICAgICAgICAgKCAweEZGRkZGNDI4ICkgLyogKFBJT0EpIElucHV0IEZpbHRlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0FfT0VSICAgICAgICAgICAgICggMHhGRkZGRjQxMCApIC8qIChQSU9BKSBPdXRwdXQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9BX1BTUiAgICAgICAgICAgICAoIDB4RkZGRkY0MDggKSAvKiAoUElPQSkgUElPIFN0YXR1cyBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUElPQiBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0JfT1dEUiAgICAgICAgICAgICggMHhGRkZGRjZBNCApIC8qIChQSU9CKSBPdXRwdXQgV3JpdGUgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9NREVSICAgICAgICAgICAgKCAweEZGRkZGNjUwICkgLyogKFBJT0IpIE11bHRpLWRyaXZlciBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0JfUFBVU1IgICAgICAgICAgICggMHhGRkZGRjY2OCApIC8qIChQSU9CKSBQdWxsLXVwIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9JTVIgICAgICAgICAgICAgKCAweEZGRkZGNjQ4ICkgLyogKFBJT0IpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX0FTUiAgICAgICAgICAgICAoIDB4RkZGRkY2NzAgKSAvKiAoUElPQikgU2VsZWN0IEEgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0JfUFBVRFIgICAgICAgICAgICggMHhGRkZGRjY2MCApIC8qIChQSU9CKSBQdWxsLXVwIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0JfUFNSICAgICAgICAgICAgICggMHhGRkZGRjYwOCApIC8qIChQSU9CKSBQSU8gU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX0lFUiAgICAgICAgICAgICAoIDB4RkZGRkY2NDAgKSAvKiAoUElPQikgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9DT0RSICAgICAgICAgICAgKCAweEZGRkZGNjM0ICkgLyogKFBJT0IpIENsZWFyIE91dHB1dCBEYXRhIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX09XRVIgICAgICAgICAgICAoIDB4RkZGRkY2QTAgKSAvKiAoUElPQikgT3V0cHV0IFdyaXRlIEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9BQlNSICAgICAgICAgICAgKCAweEZGRkZGNjc4ICkgLyogKFBJT0IpIEFCIFNlbGVjdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0JfSUZEUiAgICAgICAgICAgICggMHhGRkZGRjYyNCApIC8qIChQSU9CKSBJbnB1dCBGaWx0ZXIgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9QRFNSICAgICAgICAgICAgKCAweEZGRkZGNjNDICkgLyogKFBJT0IpIFBpbiBEYXRhIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9JRFIgICAgICAgICAgICAgKCAweEZGRkZGNjQ0ICkgLyogKFBJT0IpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX09XU1IgICAgICAgICAgICAoIDB4RkZGRkY2QTggKSAvKiAoUElPQikgT3V0cHV0IFdyaXRlIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9QRFIgICAgICAgICAgICAgKCAweEZGRkZGNjA0ICkgLyogKFBJT0IpIFBJTyBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX09EUiAgICAgICAgICAgICAoIDB4RkZGRkY2MTQgKSAvKiAoUElPQikgT3V0cHV0IERpc2FibGUgUmVnaXN0ZXJyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX0lGU1IgICAgICAgICAgICAoIDB4RkZGRkY2MjggKSAvKiAoUElPQikgSW5wdXQgRmlsdGVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9QUFVFUiAgICAgICAgICAgKCAweEZGRkZGNjY0ICkgLyogKFBJT0IpIFB1bGwtdXAgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX1NPRFIgICAgICAgICAgICAoIDB4RkZGRkY2MzAgKSAvKiAoUElPQikgU2V0IE91dHB1dCBEYXRhIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX0lTUiAgICAgICAgICAgICAoIDB4RkZGRkY2NEMgKSAvKiAoUElPQikgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9PRFNSICAgICAgICAgICAgKCAweEZGRkZGNjM4ICkgLyogKFBJT0IpIE91dHB1dCBEYXRhIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9PU1IgICAgICAgICAgICAgKCAweEZGRkZGNjE4ICkgLyogKFBJT0IpIE91dHB1dCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0JfTURTUiAgICAgICAgICAgICggMHhGRkZGRjY1OCApIC8qIChQSU9CKSBNdWx0aS1kcml2ZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX0lGRVIgICAgICAgICAgICAoIDB4RkZGRkY2MjAgKSAvKiAoUElPQikgSW5wdXQgRmlsdGVyIEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPQl9CU1IgICAgICAgICAgICAgKCAweEZGRkZGNjc0ICkgLyogKFBJT0IpIFNlbGVjdCBCIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX01ERFIgICAgICAgICAgICAoIDB4RkZGRkY2NTQgKSAvKiAoUElPQikgTXVsdGktZHJpdmVyIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT0JfT0VSICAgICAgICAgICAgICggMHhGRkZGRjYxMCApIC8qIChQSU9CKSBPdXRwdXQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSU9CX1BFUiAgICAgICAgICAgICAoIDB4RkZGRkY2MDAgKSAvKiAoUElPQikgUElPIEVuYWJsZSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0tHUiBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX0NLR1JfTU9SICAgICAgICAgICAgICggMHhGRkZGRkMyMCApIC8qIChDS0dSKSBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NLR1JfUExMUiAgICAgICAgICAgICggMHhGRkZGRkMyQyApIC8qIChDS0dSKSBQTEwgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NLR1JfTUNGUiAgICAgICAgICAgICggMHhGRkZGRkMyNCApIC8qIChDS0dSKSBNYWluIENsb2NrICBGcmVxdWVuY3kgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBNQyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19JRFIgICAgICAgICAgICAgICggMHhGRkZGRkM2NCApIC8qIChQTUMpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QTUNfTU9SICAgICAgICAgICAgICAoIDB4RkZGRkZDMjAgKSAvKiAoUE1DKSBNYWluIE9zY2lsbGF0b3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19QTExSICAgICAgICAgICAgICggMHhGRkZGRkMyQyApIC8qIChQTUMpIFBMTCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDRVIgICAgICAgICAgICAgKCAweEZGRkZGQzEwICkgLyogKFBNQykgUGVyaXBoZXJhbCBDbG9jayBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BNQ19QQ0tSICAgICAgICAgICAgICggMHhGRkZGRkM0MCApIC8qIChQTUMpIFByb2dyYW1tYWJsZSBDbG9jayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX01DS1IgICAgICAgICAgICAgKCAweEZGRkZGQzMwICkgLyogKFBNQykgTWFzdGVyIENsb2NrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QTUNfU0NEUiAgICAgICAgICAgICAoIDB4RkZGRkZDMDQgKSAvKiAoUE1DKSBTeXN0ZW0gQ2xvY2sgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1BDRFIgICAgICAgICAgICAgKCAweEZGRkZGQzE0ICkgLyogKFBNQykgUGVyaXBoZXJhbCBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QTUNfU0NTUiAgICAgICAgICAgICAoIDB4RkZGRkZDMDggKSAvKiAoUE1DKSBTeXN0ZW0gQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QTUNfUENTUiAgICAgICAgICAgICAoIDB4RkZGRkZDMTggKSAvKiAoUE1DKSBQZXJpcGhlcmFsIENsb2NrIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX01DRlIgICAgICAgICAgICAgKCAweEZGRkZGQzI0ICkgLyogKFBNQykgTWFpbiBDbG9jayAgRnJlcXVlbmN5IFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QTUNfU0NFUiAgICAgICAgICAgICAoIDB4RkZGRkZDMDAgKSAvKiAoUE1DKSBTeXN0ZW0gQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QTUNfSU1SICAgICAgICAgICAgICAoIDB4RkZGRkZDNkMgKSAvKiAoUE1DKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX0lFUiAgICAgICAgICAgICAgKCAweEZGRkZGQzYwICkgLyogKFBNQykgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUE1DX1NSICAgICAgICAgICAgICAgKCAweEZGRkZGQzY4ICkgLyogKFBNQykgU3RhdHVzIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBSU1RDIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfUlNUQ19SQ1IgICAgICAgICAgICAgKCAweEZGRkZGRDAwICkgLyogKFJTVEMpIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1JTVENfUk1SICAgICAgICAgICAgICggMHhGRkZGRkQwOCApIC8qIChSU1RDKSBSZXNldCBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19SU1RDX1JTUiAgICAgICAgICAgICAoIDB4RkZGRkZEMDQgKSAvKiAoUlNUQykgUmVzZXQgU3RhdHVzIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBSVFRDIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfUlRUQ19SVFNSICAgICAgICAgICAgKCAweEZGRkZGRDJDICkgLyogKFJUVEMpIFJlYWwtdGltZSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1JUVENfUlRNUiAgICAgICAgICAgICggMHhGRkZGRkQyMCApIC8qIChSVFRDKSBSZWFsLXRpbWUgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUlRUQ19SVFZSICAgICAgICAgICAgKCAweEZGRkZGRDI4ICkgLyogKFJUVEMpIFJlYWwtdGltZSBWYWx1ZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUlRUQ19SVEFSICAgICAgICAgICAgKCAweEZGRkZGRDI0ICkgLyogKFJUVEMpIFJlYWwtdGltZSBBbGFybSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUElUQyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1BJVENfUElWUiAgICAgICAgICAgICggMHhGRkZGRkQzOCApIC8qIChQSVRDKSBQZXJpb2QgSW50ZXJ2YWwgVmFsdWUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJVENfUElTUiAgICAgICAgICAgICggMHhGRkZGRkQzNCApIC8qIChQSVRDKSBQZXJpb2QgSW50ZXJ2YWwgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSVRDX1BJSVIgICAgICAgICAgICAoIDB4RkZGRkZEM0MgKSAvKiAoUElUQykgUGVyaW9kIEludGVydmFsIEltYWdlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QSVRDX1BJTVIgICAgICAgICAgICAoIDB4RkZGRkZEMzAgKSAvKiAoUElUQykgUGVyaW9kIEludGVydmFsIE1vZGUgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFdEVEMgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19XRFRDX1dEQ1IgICAgICAgICAgICAoIDB4RkZGRkZENDAgKSAvKiAoV0RUQykgV2F0Y2hkb2cgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfV0RUQ19XRFNSICAgICAgICAgICAgKCAweEZGRkZGRDQ4ICkgLyogKFdEVEMpIFdhdGNoZG9nIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfV0RUQ19XRE1SICAgICAgICAgICAgKCAweEZGRkZGRDQ0ICkgLyogKFdEVEMpIFdhdGNoZG9nIE1vZGUgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFZSRUcgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19WUkVHX01SICAgICAgICAgICAgICAoIDB4RkZGRkZENjAgKSAvKiAoVlJFRykgVm9sdGFnZSBSZWd1bGF0b3IgTW9kZSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgTUMgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19NQ19BU1IgICAgICAgICAgICAgICAoIDB4RkZGRkZGMDQgKSAvKiAoTUMpIE1DIEFib3J0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfTUNfUkNSICAgICAgICAgICAgICAgKCAweEZGRkZGRjAwICkgLyogKE1DKSBNQyBSZW1hcCBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19NQ19GQ1IgICAgICAgICAgICAgICAoIDB4RkZGRkZGNjQgKSAvKiAoTUMpIE1DIEZsYXNoIENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0FBU1IgICAgICAgICAgICAgICggMHhGRkZGRkYwOCApIC8qIChNQykgTUMgQWJvcnQgQWRkcmVzcyBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX01DX0ZTUiAgICAgICAgICAgICAgICggMHhGRkZGRkY2OCApIC8qIChNQykgTUMgRmxhc2ggU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19NQ19GTVIgICAgICAgICAgICAgICAoIDB4RkZGRkZGNjAgKSAvKiAoTUMpIE1DIEZsYXNoIE1vZGUgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19TUEkxIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMV9QVENSICAgICAgICAgICAgKCAweEZGRkU0MTIwICkgLyogKFBEQ19TUEkxKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMV9SUFIgICAgICAgICAgICAgKCAweEZGRkU0MTAwICkgLyogKFBEQ19TUEkxKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTFfVE5DUiAgICAgICAgICAgICggMHhGRkZFNDExQyApIC8qIChQRENfU1BJMSkgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkxX1RQUiAgICAgICAgICAgICAoIDB4RkZGRTQxMDggKSAvKiAoUERDX1NQSTEpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTFfVE5QUiAgICAgICAgICAgICggMHhGRkZFNDExOCApIC8qIChQRENfU1BJMSkgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkxX1RDUiAgICAgICAgICAgICAoIDB4RkZGRTQxMEMgKSAvKiAoUERDX1NQSTEpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTFfUkNSICAgICAgICAgICAgICggMHhGRkZFNDEwNCApIC8qIChQRENfU1BJMSkgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkxX1JOUFIgICAgICAgICAgICAoIDB4RkZGRTQxMTAgKSAvKiAoUERDX1NQSTEpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkxX1JOQ1IgICAgICAgICAgICAoIDB4RkZGRTQxMTQgKSAvKiAoUERDX1NQSTEpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkxX1BUU1IgICAgICAgICAgICAoIDB4RkZGRTQxMjQgKSAvKiAoUERDX1NQSTEpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFNQSTEgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19TUEkxX0lNUiAgICAgICAgICAgICAoIDB4RkZGRTQwMUMgKSAvKiAoU1BJMSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTFfSUVSICAgICAgICAgICAgICggMHhGRkZFNDAxNCApIC8qIChTUEkxKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkxX01SICAgICAgICAgICAgICAoIDB4RkZGRTQwMDQgKSAvKiAoU1BJMSkgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMV9SRFIgICAgICAgICAgICAgKCAweEZGRkU0MDA4ICkgLyogKFNQSTEpIFJlY2VpdmUgRGF0YSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMV9JRFIgICAgICAgICAgICAgKCAweEZGRkU0MDE4ICkgLyogKFNQSTEpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkxX1NSICAgICAgICAgICAgICAoIDB4RkZGRTQwMTAgKSAvKiAoU1BJMSkgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkxX1REUiAgICAgICAgICAgICAoIDB4RkZGRTQwMEMgKSAvKiAoU1BJMSkgVHJhbnNtaXQgRGF0YSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMV9DUiAgICAgICAgICAgICAgKCAweEZGRkU0MDAwICkgLyogKFNQSTEpIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTFfQ1NSICAgICAgICAgICAgICggMHhGRkZFNDAzMCApIC8qIChTUEkxKSBDaGlwIFNlbGVjdCBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX1NQSTAgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19TUEkwX1BUQ1IgICAgICAgICAgICAoIDB4RkZGRTAxMjAgKSAvKiAoUERDX1NQSTApIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkwX1RQUiAgICAgICAgICAgICAoIDB4RkZGRTAxMDggKSAvKiAoUERDX1NQSTApIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTBfVENSICAgICAgICAgICAgICggMHhGRkZFMDEwQyApIC8qIChQRENfU1BJMCkgVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMF9SQ1IgICAgICAgICAgICAgKCAweEZGRkUwMTA0ICkgLyogKFBEQ19TUEkwKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTBfUFRTUiAgICAgICAgICAgICggMHhGRkZFMDEyNCApIC8qIChQRENfU1BJMCkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMF9STlBSICAgICAgICAgICAgKCAweEZGRkUwMTEwICkgLyogKFBEQ19TUEkwKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMF9SUFIgICAgICAgICAgICAgKCAweEZGRkUwMTAwICkgLyogKFBEQ19TUEkwKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTBfVE5DUiAgICAgICAgICAgICggMHhGRkZFMDExQyApIC8qIChQRENfU1BJMCkgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkwX1JOQ1IgICAgICAgICAgICAoIDB4RkZGRTAxMTQgKSAvKiAoUERDX1NQSTApIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkwX1ROUFIgICAgICAgICAgICAoIDB4RkZGRTAxMTggKSAvKiAoUERDX1NQSTApIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgU1BJMCBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTBfSUVSICAgICAgICAgICAgICggMHhGRkZFMDAxNCApIC8qIChTUEkwKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkwX1NSICAgICAgICAgICAgICAoIDB4RkZGRTAwMTAgKSAvKiAoU1BJMCkgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkwX0lEUiAgICAgICAgICAgICAoIDB4RkZGRTAwMTggKSAvKiAoU1BJMCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NQSTBfQ1IgICAgICAgICAgICAgICggMHhGRkZFMDAwMCApIC8qIChTUEkwKSBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkwX01SICAgICAgICAgICAgICAoIDB4RkZGRTAwMDQgKSAvKiAoU1BJMCkgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMF9JTVIgICAgICAgICAgICAgKCAweEZGRkUwMDFDICkgLyogKFNQSTApIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TUEkwX1REUiAgICAgICAgICAgICAoIDB4RkZGRTAwMEMgKSAvKiAoU1BJMCkgVHJhbnNtaXQgRGF0YSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMF9SRFIgICAgICAgICAgICAgKCAweEZGRkUwMDA4ICkgLyogKFNQSTApIFJlY2VpdmUgRGF0YSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1BJMF9DU1IgICAgICAgICAgICAgKCAweEZGRkUwMDMwICkgLyogKFNQSTApIENoaXAgU2VsZWN0IFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfVVMxIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1JOQ1IgICAgICAgICAgICAgKCAweEZGRkM0MTE0ICkgLyogKFBEQ19VUzEpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfUFRDUiAgICAgICAgICAgICAoIDB4RkZGQzQxMjAgKSAvKiAoUERDX1VTMSkgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMV9UQ1IgICAgICAgICAgICAgICggMHhGRkZDNDEwQyApIC8qIChQRENfVVMxKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfUFRTUiAgICAgICAgICAgICAoIDB4RkZGQzQxMjQgKSAvKiAoUERDX1VTMSkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1ROUFIgICAgICAgICAgICAgKCAweEZGRkM0MTE4ICkgLyogKFBEQ19VUzEpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1JDUiAgICAgICAgICAgICAgKCAweEZGRkM0MTA0ICkgLyogKFBEQ19VUzEpIFJlY2VpdmUgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1JOUFIgICAgICAgICAgICAgKCAweEZGRkM0MTEwICkgLyogKFBEQ19VUzEpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfUlBSICAgICAgICAgICAgICAoIDB4RkZGQzQxMDAgKSAvKiAoUERDX1VTMSkgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfVE5DUiAgICAgICAgICAgICAoIDB4RkZGQzQxMUMgKSAvKiAoUERDX1VTMSkgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfVFBSICAgICAgICAgICAgICAoIDB4RkZGQzQxMDggKSAvKiAoUERDX1VTMSkgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVVMxIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX0lGICAgICAgICAgICAgICAgKCAweEZGRkM0MDRDICkgLyogKFVTMSkgSVJEQV9GSUxURVIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMV9ORVIgICAgICAgICAgICAgICggMHhGRkZDNDA0NCApIC8qIChVUzEpIE5iIEVycm9ycyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1JUT1IgICAgICAgICAgICAgKCAweEZGRkM0MDI0ICkgLyogKFVTMSkgUmVjZWl2ZXIgVGltZS1vdXQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMV9DU1IgICAgICAgICAgICAgICggMHhGRkZDNDAxNCApIC8qIChVUzEpIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfSURSICAgICAgICAgICAgICAoIDB4RkZGQzQwMEMgKSAvKiAoVVMxKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX0lFUiAgICAgICAgICAgICAgKCAweEZGRkM0MDA4ICkgLyogKFVTMSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1RIUiAgICAgICAgICAgICAgKCAweEZGRkM0MDFDICkgLyogKFVTMSkgVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1RUR1IgICAgICAgICAgICAgKCAweEZGRkM0MDI4ICkgLyogKFVTMSkgVHJhbnNtaXR0ZXIgVGltZS1ndWFyZCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX1JIUiAgICAgICAgICAgICAgKCAweEZGRkM0MDE4ICkgLyogKFVTMSkgUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX0JSR1IgICAgICAgICAgICAgKCAweEZGRkM0MDIwICkgLyogKFVTMSkgQmF1ZCBSYXRlIEdlbmVyYXRvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMxX0lNUiAgICAgICAgICAgICAgKCAweEZGRkM0MDEwICkgLyogKFVTMSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMV9GSURJICAgICAgICAgICAgICggMHhGRkZDNDA0MCApIC8qIChVUzEpIEZJX0RJX1JhdGlvIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfQ1IgICAgICAgICAgICAgICAoIDB4RkZGQzQwMDAgKSAvKiAoVVMxKSBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzFfTVIgICAgICAgICAgICAgICAoIDB4RkZGQzQwMDQgKSAvKiAoVVMxKSBNb2RlIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfVVMwIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX1ROUFIgICAgICAgICAgICAgKCAweEZGRkMwMTE4ICkgLyogKFBEQ19VUzApIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX1JOUFIgICAgICAgICAgICAgKCAweEZGRkMwMTEwICkgLyogKFBEQ19VUzApIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzBfVENSICAgICAgICAgICAgICAoIDB4RkZGQzAxMEMgKSAvKiAoUERDX1VTMCkgVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX1BUQ1IgICAgICAgICAgICAgKCAweEZGRkMwMTIwICkgLyogKFBEQ19VUzApIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzBfUFRTUiAgICAgICAgICAgICAoIDB4RkZGQzAxMjQgKSAvKiAoUERDX1VTMCkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX1ROQ1IgICAgICAgICAgICAgKCAweEZGRkMwMTFDICkgLyogKFBEQ19VUzApIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX1RQUiAgICAgICAgICAgICAgKCAweEZGRkMwMTA4ICkgLyogKFBEQ19VUzApIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9SQ1IgICAgICAgICAgICAgICggMHhGRkZDMDEwNCApIC8qIChQRENfVVMwKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9SUFIgICAgICAgICAgICAgICggMHhGRkZDMDEwMCApIC8qIChQRENfVVMwKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9STkNSICAgICAgICAgICAgICggMHhGRkZDMDExNCApIC8qIChQRENfVVMwKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVVMwIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX0JSR1IgICAgICAgICAgICAgKCAweEZGRkMwMDIwICkgLyogKFVTMCkgQmF1ZCBSYXRlIEdlbmVyYXRvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX05FUiAgICAgICAgICAgICAgKCAweEZGRkMwMDQ0ICkgLyogKFVTMCkgTmIgRXJyb3JzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzBfQ1IgICAgICAgICAgICAgICAoIDB4RkZGQzAwMDAgKSAvKiAoVVMwKSBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzBfSU1SICAgICAgICAgICAgICAoIDB4RkZGQzAwMTAgKSAvKiAoVVMwKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX0ZJREkgICAgICAgICAgICAgKCAweEZGRkMwMDQwICkgLyogKFVTMCkgRklfRElfUmF0aW8gUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9UVEdSICAgICAgICAgICAgICggMHhGRkZDMDAyOCApIC8qIChVUzApIFRyYW5zbWl0dGVyIFRpbWUtZ3VhcmQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9NUiAgICAgICAgICAgICAgICggMHhGRkZDMDAwNCApIC8qIChVUzApIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9SVE9SICAgICAgICAgICAgICggMHhGRkZDMDAyNCApIC8qIChVUzApIFJlY2VpdmVyIFRpbWUtb3V0IFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzBfQ1NSICAgICAgICAgICAgICAoIDB4RkZGQzAwMTQgKSAvKiAoVVMwKSBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX1JIUiAgICAgICAgICAgICAgKCAweEZGRkMwMDE4ICkgLyogKFVTMCkgUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVVMwX0lEUiAgICAgICAgICAgICAgKCAweEZGRkMwMDBDICkgLyogKFVTMCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9USFIgICAgICAgICAgICAgICggMHhGRkZDMDAxQyApIC8qIChVUzApIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VTMF9JRiAgICAgICAgICAgICAgICggMHhGRkZDMDA0QyApIC8qIChVUzApIElSREFfRklMVEVSIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VUzBfSUVSICAgICAgICAgICAgICAoIDB4RkZGQzAwMDggKSAvKiAoVVMwKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfU1NDIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1ROQ1IgICAgICAgICAgICAgKCAweEZGRkQ0MTFDICkgLyogKFBEQ19TU0MpIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1JQUiAgICAgICAgICAgICAgKCAweEZGRkQ0MTAwICkgLyogKFBEQ19TU0MpIFJlY2VpdmUgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1JOQ1IgICAgICAgICAgICAgKCAweEZGRkQ0MTE0ICkgLyogKFBEQ19TU0MpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfVFBSICAgICAgICAgICAgICAoIDB4RkZGRDQxMDggKSAvKiAoUERDX1NTQykgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1BUQ1IgICAgICAgICAgICAgKCAweEZGRkQ0MTIwICkgLyogKFBEQ19TU0MpIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfVENSICAgICAgICAgICAgICAoIDB4RkZGRDQxMEMgKSAvKiAoUERDX1NTQykgVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1JDUiAgICAgICAgICAgICAgKCAweEZGRkQ0MTA0ICkgLyogKFBEQ19TU0MpIFJlY2VpdmUgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1JOUFIgICAgICAgICAgICAgKCAweEZGRkQ0MTEwICkgLyogKFBEQ19TU0MpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfVE5QUiAgICAgICAgICAgICAoIDB4RkZGRDQxMTggKSAvKiAoUERDX1NTQykgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfUFRTUiAgICAgICAgICAgICAoIDB4RkZGRDQxMjQgKSAvKiAoUERDX1NTQykgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgU1NDIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1JIUiAgICAgICAgICAgICAgKCAweEZGRkQ0MDIwICkgLyogKFNTQykgUmVjZWl2ZSBIb2xkaW5nIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfUlNIUiAgICAgICAgICAgICAoIDB4RkZGRDQwMzAgKSAvKiAoU1NDKSBSZWNlaXZlIFN5bmMgSG9sZGluZyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1RGTVIgICAgICAgICAgICAgKCAweEZGRkQ0MDFDICkgLyogKFNTQykgVHJhbnNtaXQgRnJhbWUgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0lEUiAgICAgICAgICAgICAgKCAweEZGRkQ0MDQ4ICkgLyogKFNTQykgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19USFIgICAgICAgICAgICAgICggMHhGRkZENDAyNCApIC8qIChTU0MpIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19SQ01SICAgICAgICAgICAgICggMHhGRkZENDAxMCApIC8qIChTU0MpIFJlY2VpdmUgQ2xvY2sgTW9kZVJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfSUVSICAgICAgICAgICAgICAoIDB4RkZGRDQwNDQgKSAvKiAoU1NDKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19TU0NfVFNIUiAgICAgICAgICAgICAoIDB4RkZGRDQwMzQgKSAvKiAoU1NDKSBUcmFuc21pdCBTeW5jIEhvbGRpbmcgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19TUiAgICAgICAgICAgICAgICggMHhGRkZENDA0MCApIC8qIChTU0MpIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0NNUiAgICAgICAgICAgICAgKCAweEZGRkQ0MDA0ICkgLyogKFNTQykgQ2xvY2sgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX1RDTVIgICAgICAgICAgICAgKCAweEZGRkQ0MDE4ICkgLyogKFNTQykgVHJhbnNtaXQgQ2xvY2sgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0NSICAgICAgICAgICAgICAgKCAweEZGRkQ0MDAwICkgLyogKFNTQykgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfU1NDX0lNUiAgICAgICAgICAgICAgKCAweEZGRkQ0MDRDICkgLyogKFNTQykgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1NTQ19SRk1SICAgICAgICAgICAgICggMHhGRkZENDAxNCApIC8qIChTU0MpIFJlY2VpdmUgRnJhbWUgTW9kZSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVFdJIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX0lFUiAgICAgICAgICAgICAgKCAweEZGRkI4MDI0ICkgLyogKFRXSSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX0NSICAgICAgICAgICAgICAgKCAweEZGRkI4MDAwICkgLyogKFRXSSkgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX1NSICAgICAgICAgICAgICAgKCAweEZGRkI4MDIwICkgLyogKFRXSSkgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UV0lfSU1SICAgICAgICAgICAgICAoIDB4RkZGQjgwMkMgKSAvKiAoVFdJKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX1RIUiAgICAgICAgICAgICAgKCAweEZGRkI4MDM0ICkgLyogKFRXSSkgVHJhbnNtaXQgSG9sZGluZyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVFdJX0lEUiAgICAgICAgICAgICAgKCAweEZGRkI4MDI4ICkgLyogKFRXSSkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9JQURSICAgICAgICAgICAgICggMHhGRkZCODAwQyApIC8qIChUV0kpIEludGVybmFsIEFkZHJlc3MgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9NTVIgICAgICAgICAgICAgICggMHhGRkZCODAwNCApIC8qIChUV0kpIE1hc3RlciBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UV0lfQ1dHUiAgICAgICAgICAgICAoIDB4RkZGQjgwMTAgKSAvKiAoVFdJKSBDbG9jayBXYXZlZm9ybSBHZW5lcmF0b3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RXSV9SSFIgICAgICAgICAgICAgICggMHhGRkZCODAzMCApIC8qIChUV0kpIFJlY2VpdmUgSG9sZGluZyBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUFdNQ19DSDMgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NIM19DVVBEUiAgICAgICAoIDB4RkZGQ0MyNzAgKSAvKiAoUFdNQ19DSDMpIENoYW5uZWwgVXBkYXRlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NIM19SZXNlcnZlZCAgICAoIDB4RkZGQ0MyNzQgKSAvKiAoUFdNQ19DSDMpIFJlc2VydmVkICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NIM19DUFJEUiAgICAgICAoIDB4RkZGQ0MyNjggKSAvKiAoUFdNQ19DSDMpIENoYW5uZWwgUGVyaW9kIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NIM19DRFRZUiAgICAgICAoIDB4RkZGQ0MyNjQgKSAvKiAoUFdNQ19DSDMpIENoYW5uZWwgRHV0eSBDeWNsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDNfQ0NOVFIgICAgICAgKCAweEZGRkNDMjZDICkgLyogKFBXTUNfQ0gzKSBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0gzX0NNUiAgICAgICAgICggMHhGRkZDQzI2MCApIC8qIChQV01DX0NIMykgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQV01DX0NIMiBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0gyX1Jlc2VydmVkICAgICggMHhGRkZDQzI1NCApIC8qIChQV01DX0NIMikgUmVzZXJ2ZWQgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0gyX0NNUiAgICAgICAgICggMHhGRkZDQzI0MCApIC8qIChQV01DX0NIMikgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NIMl9DQ05UUiAgICAgICAoIDB4RkZGQ0MyNEMgKSAvKiAoUFdNQ19DSDIpIENoYW5uZWwgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDJfQ1BSRFIgICAgICAgKCAweEZGRkNDMjQ4ICkgLyogKFBXTUNfQ0gyKSBDaGFubmVsIFBlcmlvZCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDJfQ1VQRFIgICAgICAgKCAweEZGRkNDMjUwICkgLyogKFBXTUNfQ0gyKSBDaGFubmVsIFVwZGF0ZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDJfQ0RUWVIgICAgICAgKCAweEZGRkNDMjQ0ICkgLyogKFBXTUNfQ0gyKSBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBXTUNfQ0gxIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDFfUmVzZXJ2ZWQgICAgKCAweEZGRkNDMjM0ICkgLyogKFBXTUNfQ0gxKSBSZXNlcnZlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDFfQ1VQRFIgICAgICAgKCAweEZGRkNDMjMwICkgLyogKFBXTUNfQ0gxKSBDaGFubmVsIFVwZGF0ZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDFfQ1BSRFIgICAgICAgKCAweEZGRkNDMjI4ICkgLyogKFBXTUNfQ0gxKSBDaGFubmVsIFBlcmlvZCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDFfQ0NOVFIgICAgICAgKCAweEZGRkNDMjJDICkgLyogKFBXTUNfQ0gxKSBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0gxX0NEVFlSICAgICAgICggMHhGRkZDQzIyNCApIC8qIChQV01DX0NIMSkgQ2hhbm5lbCBEdXR5IEN5Y2xlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NIMV9DTVIgICAgICAgICAoIDB4RkZGQ0MyMjAgKSAvKiAoUFdNQ19DSDEpIENoYW5uZWwgTW9kZSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUFdNQ19DSDAgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NIMF9SZXNlcnZlZCAgICAoIDB4RkZGQ0MyMTQgKSAvKiAoUFdNQ19DSDApIFJlc2VydmVkICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NIMF9DUFJEUiAgICAgICAoIDB4RkZGQ0MyMDggKSAvKiAoUFdNQ19DSDApIENoYW5uZWwgUGVyaW9kIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19QV01DX0NIMF9DRFRZUiAgICAgICAoIDB4RkZGQ0MyMDQgKSAvKiAoUFdNQ19DSDApIENoYW5uZWwgRHV0eSBDeWNsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19DSDBfQ01SICAgICAgICAgKCAweEZGRkNDMjAwICkgLyogKFBXTUNfQ0gwKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0gwX0NVUERSICAgICAgICggMHhGRkZDQzIxMCApIC8qIChQV01DX0NIMCkgQ2hhbm5lbCBVcGRhdGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfQ0gwX0NDTlRSICAgICAgICggMHhGRkZDQzIwQyApIC8qIChQV01DX0NIMCkgQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQV01DIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19JRFIgICAgICAgICAgICAgKCAweEZGRkNDMDE0ICkgLyogKFBXTUMpIFBXTUMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfRElTICAgICAgICAgICAgICggMHhGRkZDQzAwOCApIC8qIChQV01DKSBQV01DIERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfSUVSICAgICAgICAgICAgICggMHhGRkZDQzAxMCApIC8qIChQV01DKSBQV01DIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfVlIgICAgICAgICAgICAgICggMHhGRkZDQzBGQyApIC8qIChQV01DKSBQV01DIFZlcnNpb24gUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfSVNSICAgICAgICAgICAgICggMHhGRkZDQzAxQyApIC8qIChQV01DKSBQV01DIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfU1IgICAgICAgICAgICAgICggMHhGRkZDQzAwQyApIC8qIChQV01DKSBQV01DIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfUFdNQ19JTVIgICAgICAgICAgICAgKCAweEZGRkNDMDE4ICkgLyogKFBXTUMpIFBXTUMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfTVIgICAgICAgICAgICAgICggMHhGRkZDQzAwMCApIC8qIChQV01DKSBQV01DIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1BXTUNfRU5BICAgICAgICAgICAgICggMHhGRkZDQzAwNCApIC8qIChQV01DKSBQV01DIEVuYWJsZSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVURQIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0lNUiAgICAgICAgICAgICAgKCAweEZGRkIwMDE4ICkgLyogKFVEUCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9GQUREUiAgICAgICAgICAgICggMHhGRkZCMDAwOCApIC8qIChVRFApIEZ1bmN0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9OVU0gICAgICAgICAgICAgICggMHhGRkZCMDAwMCApIC8qIChVRFApIEZyYW1lIE51bWJlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVURQX0ZEUiAgICAgICAgICAgICAgKCAweEZGRkIwMDUwICkgLyogKFVEUCkgRW5kcG9pbnQgRklGTyBEYXRhIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VRFBfSVNSICAgICAgICAgICAgICAoIDB4RkZGQjAwMUMgKSAvKiAoVURQKSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VRFBfQ1NSICAgICAgICAgICAgICAoIDB4RkZGQjAwMzAgKSAvKiAoVURQKSBFbmRwb2ludCBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9JRFIgICAgICAgICAgICAgICggMHhGRkZCMDAxNCApIC8qIChVRFApIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VRFBfSUNSICAgICAgICAgICAgICAoIDB4RkZGQjAwMjAgKSAvKiAoVURQKSBJbnRlcnJ1cHQgQ2xlYXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9SU1RFUCAgICAgICAgICAgICggMHhGRkZCMDAyOCApIC8qIChVRFApIFJlc2V0IEVuZHBvaW50IFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VRFBfVFhWQyAgICAgICAgICAgICAoIDB4RkZGQjAwNzQgKSAvKiAoVURQKSBUcmFuc2NlaXZlciBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19VRFBfR0xCU1RBVEUgICAgICAgICAoIDB4RkZGQjAwMDQgKSAvKiAoVURQKSBHbG9iYWwgU3RhdGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1VEUF9JRVIgICAgICAgICAgICAgICggMHhGRkZCMDAxMCApIC8qIChVRFApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRDMCBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1RDMF9TUiAgICAgICAgICAgICAgICggMHhGRkZBMDAyMCApIC8qIChUQzApIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMwX1JDICAgICAgICAgICAgICAgKCAweEZGRkEwMDFDICkgLyogKFRDMCkgUmVnaXN0ZXIgQyAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMwX1JCICAgICAgICAgICAgICAgKCAweEZGRkEwMDE4ICkgLyogKFRDMCkgUmVnaXN0ZXIgQiAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMwX0NDUiAgICAgICAgICAgICAgKCAweEZGRkEwMDAwICkgLyogKFRDMCkgQ2hhbm5lbCBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UQzBfQ01SICAgICAgICAgICAgICAoIDB4RkZGQTAwMDQgKSAvKiAoVEMwKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXIgKENhcHR1cmUgTW9kZSAvIFdhdmVmb3JtIE1vZGUpICovDQotI2RlZmluZSBBVDkxQ19UQzBfSUVSICAgICAgICAgICAgICAoIDB4RkZGQTAwMjQgKSAvKiAoVEMwKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UQzBfUkEgICAgICAgICAgICAgICAoIDB4RkZGQTAwMTQgKSAvKiAoVEMwKSBSZWdpc3RlciBBICovDQotI2RlZmluZSBBVDkxQ19UQzBfSURSICAgICAgICAgICAgICAoIDB4RkZGQTAwMjggKSAvKiAoVEMwKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMwX0NWICAgICAgICAgICAgICAgKCAweEZGRkEwMDEwICkgLyogKFRDMCkgQ291bnRlciBWYWx1ZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMwX0lNUiAgICAgICAgICAgICAgKCAweEZGRkEwMDJDICkgLyogKFRDMCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRDMSBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1RDMV9SQiAgICAgICAgICAgICAgICggMHhGRkZBMDA1OCApIC8qIChUQzEpIFJlZ2lzdGVyIEIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMV9DQ1IgICAgICAgICAgICAgICggMHhGRkZBMDA0MCApIC8qIChUQzEpIENoYW5uZWwgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMxX0lFUiAgICAgICAgICAgICAgKCAweEZGRkEwMDY0ICkgLyogKFRDMSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMxX0lEUiAgICAgICAgICAgICAgKCAweEZGRkEwMDY4ICkgLyogKFRDMSkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMV9TUiAgICAgICAgICAgICAgICggMHhGRkZBMDA2MCApIC8qIChUQzEpIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMxX0NNUiAgICAgICAgICAgICAgKCAweEZGRkEwMDQ0ICkgLyogKFRDMSkgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyIChDYXB0dXJlIE1vZGUgLyBXYXZlZm9ybSBNb2RlKSAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMxX1JBICAgICAgICAgICAgICAgKCAweEZGRkEwMDU0ICkgLyogKFRDMSkgUmVnaXN0ZXIgQSAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMxX1JDICAgICAgICAgICAgICAgKCAweEZGRkEwMDVDICkgLyogKFRDMSkgUmVnaXN0ZXIgQyAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMxX0lNUiAgICAgICAgICAgICAgKCAweEZGRkEwMDZDICkgLyogKFRDMSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMV9DViAgICAgICAgICAgICAgICggMHhGRkZBMDA1MCApIC8qIChUQzEpIENvdW50ZXIgVmFsdWUgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRDMiBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1RDMl9DTVIgICAgICAgICAgICAgICggMHhGRkZBMDA4NCApIC8qIChUQzIpIENoYW5uZWwgTW9kZSBSZWdpc3RlciAoQ2FwdHVyZSBNb2RlIC8gV2F2ZWZvcm0gTW9kZSkgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMl9DQ1IgICAgICAgICAgICAgICggMHhGRkZBMDA4MCApIC8qIChUQzIpIENoYW5uZWwgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMyX0NWICAgICAgICAgICAgICAgKCAweEZGRkEwMDkwICkgLyogKFRDMikgQ291bnRlciBWYWx1ZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMyX1JBICAgICAgICAgICAgICAgKCAweEZGRkEwMDk0ICkgLyogKFRDMikgUmVnaXN0ZXIgQSAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMyX1JCICAgICAgICAgICAgICAgKCAweEZGRkEwMDk4ICkgLyogKFRDMikgUmVnaXN0ZXIgQiAqLw0KLSNkZWZpbmUgQVQ5MUNfVEMyX0lEUiAgICAgICAgICAgICAgKCAweEZGRkEwMEE4ICkgLyogKFRDMikgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDMl9JTVIgICAgICAgICAgICAgICggMHhGRkZBMDBBQyApIC8qIChUQzIpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UQzJfUkMgICAgICAgICAgICAgICAoIDB4RkZGQTAwOUMgKSAvKiAoVEMyKSBSZWdpc3RlciBDICovDQotI2RlZmluZSBBVDkxQ19UQzJfSUVSICAgICAgICAgICAgICAoIDB4RkZGQTAwQTQgKSAvKiAoVEMyKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UQzJfU1IgICAgICAgICAgICAgICAoIDB4RkZGQTAwQTAgKSAvKiAoVEMyKSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRDQiBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1RDQl9CTVIgICAgICAgICAgICAgICggMHhGRkZBMDBDNCApIC8qIChUQ0IpIFRDIEJsb2NrIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RDQl9CQ1IgICAgICAgICAgICAgICggMHhGRkZBMDBDMCApIC8qIChUQ0IpIFRDIEJsb2NrIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENBTl9NQjAgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIwX01ETCAgICAgICAgICAoIDB4RkZGRDAyMTQgKSAvKiAoQ0FOX01CMCkgTWFpbEJveCBEYXRhIExvdyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMF9NQU0gICAgICAgICAgKCAweEZGRkQwMjA0ICkgLyogKENBTl9NQjApIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIwX01DUiAgICAgICAgICAoIDB4RkZGRDAyMUMgKSAvKiAoQ0FOX01CMCkgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIwX01JRCAgICAgICAgICAoIDB4RkZGRDAyMDggKSAvKiAoQ0FOX01CMCkgTWFpbEJveCBJRCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMF9NU1IgICAgICAgICAgKCAweEZGRkQwMjEwICkgLyogKENBTl9NQjApIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIwX01GSUQgICAgICAgICAoIDB4RkZGRDAyMEMgKSAvKiAoQ0FOX01CMCkgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjBfTURIICAgICAgICAgICggMHhGRkZEMDIxOCApIC8qIChDQU5fTUIwKSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMF9NTVIgICAgICAgICAgKCAweEZGRkQwMjAwICkgLyogKENBTl9NQjApIE1haWxCb3ggTW9kZSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CMSBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjFfTURMICAgICAgICAgICggMHhGRkZEMDIzNCApIC8qIChDQU5fTUIxKSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIxX01JRCAgICAgICAgICAoIDB4RkZGRDAyMjggKSAvKiAoQ0FOX01CMSkgTWFpbEJveCBJRCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMV9NTVIgICAgICAgICAgKCAweEZGRkQwMjIwICkgLyogKENBTl9NQjEpIE1haWxCb3ggTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMV9NU1IgICAgICAgICAgKCAweEZGRkQwMjMwICkgLyogKENBTl9NQjEpIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIxX01BTSAgICAgICAgICAoIDB4RkZGRDAyMjQgKSAvKiAoQ0FOX01CMSkgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjFfTURIICAgICAgICAgICggMHhGRkZEMDIzOCApIC8qIChDQU5fTUIxKSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMV9NQ1IgICAgICAgICAgKCAweEZGRkQwMjNDICkgLyogKENBTl9NQjEpIE1haWxCb3ggQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMV9NRklEICAgICAgICAgKCAweEZGRkQwMjJDICkgLyogKENBTl9NQjEpIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU5fTUIyIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NQ1IgICAgICAgICAgKCAweEZGRkQwMjVDICkgLyogKENBTl9NQjIpIE1haWxCb3ggQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NREggICAgICAgICAgKCAweEZGRkQwMjU4ICkgLyogKENBTl9NQjIpIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIyX01JRCAgICAgICAgICAoIDB4RkZGRDAyNDggKSAvKiAoQ0FOX01CMikgTWFpbEJveCBJRCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NREwgICAgICAgICAgKCAweEZGRkQwMjU0ICkgLyogKENBTl9NQjIpIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjJfTU1SICAgICAgICAgICggMHhGRkZEMDI0MCApIC8qIChDQU5fTUIyKSBNYWlsQm94IE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjJfTUFNICAgICAgICAgICggMHhGRkZEMDI0NCApIC8qIChDQU5fTUIyKSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NRklEICAgICAgICAgKCAweEZGRkQwMjRDICkgLyogKENBTl9NQjIpIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIyX01TUiAgICAgICAgICAoIDB4RkZGRDAyNTAgKSAvKiAoQ0FOX01CMikgTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENBTl9NQjMgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUIzX01GSUQgICAgICAgICAoIDB4RkZGRDAyNkMgKSAvKiAoQ0FOX01CMykgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjNfTUFNICAgICAgICAgICggMHhGRkZEMDI2NCApIC8qIChDQU5fTUIzKSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CM19NSUQgICAgICAgICAgKCAweEZGRkQwMjY4ICkgLyogKENBTl9NQjMpIE1haWxCb3ggSUQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjNfTUNSICAgICAgICAgICggMHhGRkZEMDI3QyApIC8qIChDQU5fTUIzKSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjNfTU1SICAgICAgICAgICggMHhGRkZEMDI2MCApIC8qIChDQU5fTUIzKSBNYWlsQm94IE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjNfTVNSICAgICAgICAgICggMHhGRkZEMDI3MCApIC8qIChDQU5fTUIzKSBNYWlsQm94IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CM19NREwgICAgICAgICAgKCAweEZGRkQwMjc0ICkgLyogKENBTl9NQjMpIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjNfTURIICAgICAgICAgICggMHhGRkZEMDI3OCApIC8qIChDQU5fTUIzKSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CNCBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjRfTUlEICAgICAgICAgICggMHhGRkZEMDI4OCApIC8qIChDQU5fTUI0KSBNYWlsQm94IElEIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI0X01NUiAgICAgICAgICAoIDB4RkZGRDAyODAgKSAvKiAoQ0FOX01CNCkgTWFpbEJveCBNb2RlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI0X01ESCAgICAgICAgICAoIDB4RkZGRDAyOTggKSAvKiAoQ0FOX01CNCkgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjRfTUZJRCAgICAgICAgICggMHhGRkZEMDI4QyApIC8qIChDQU5fTUI0KSBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CNF9NU1IgICAgICAgICAgKCAweEZGRkQwMjkwICkgLyogKENBTl9NQjQpIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI0X01DUiAgICAgICAgICAoIDB4RkZGRDAyOUMgKSAvKiAoQ0FOX01CNCkgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI0X01ETCAgICAgICAgICAoIDB4RkZGRDAyOTQgKSAvKiAoQ0FOX01CNCkgTWFpbEJveCBEYXRhIExvdyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CNF9NQU0gICAgICAgICAgKCAweEZGRkQwMjg0ICkgLyogKENBTl9NQjQpIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU5fTUI1IHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CNV9NU1IgICAgICAgICAgKCAweEZGRkQwMkIwICkgLyogKENBTl9NQjUpIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI1X01DUiAgICAgICAgICAoIDB4RkZGRDAyQkMgKSAvKiAoQ0FOX01CNSkgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI1X01GSUQgICAgICAgICAoIDB4RkZGRDAyQUMgKSAvKiAoQ0FOX01CNSkgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjVfTURIICAgICAgICAgICggMHhGRkZEMDJCOCApIC8qIChDQU5fTUI1KSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CNV9NSUQgICAgICAgICAgKCAweEZGRkQwMkE4ICkgLyogKENBTl9NQjUpIE1haWxCb3ggSUQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjVfTU1SICAgICAgICAgICggMHhGRkZEMDJBMCApIC8qIChDQU5fTUI1KSBNYWlsQm94IE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjVfTURMICAgICAgICAgICggMHhGRkZEMDJCNCApIC8qIChDQU5fTUI1KSBNYWlsQm94IERhdGEgTG93IFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI1X01BTSAgICAgICAgICAoIDB4RkZGRDAyQTQgKSAvKiAoQ0FOX01CNSkgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIENBTl9NQjYgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI2X01GSUQgICAgICAgICAoIDB4RkZGRDAyQ0MgKSAvKiAoQ0FOX01CNikgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjZfTUlEICAgICAgICAgICggMHhGRkZEMDJDOCApIC8qIChDQU5fTUI2KSBNYWlsQm94IElEIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI2X01BTSAgICAgICAgICAoIDB4RkZGRDAyQzQgKSAvKiAoQ0FOX01CNikgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjZfTVNSICAgICAgICAgICggMHhGRkZEMDJEMCApIC8qIChDQU5fTUI2KSBNYWlsQm94IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CNl9NREwgICAgICAgICAgKCAweEZGRkQwMkQ0ICkgLyogKENBTl9NQjYpIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjZfTUNSICAgICAgICAgICggMHhGRkZEMDJEQyApIC8qIChDQU5fTUI2KSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjZfTURIICAgICAgICAgICggMHhGRkZEMDJEOCApIC8qIChDQU5fTUI2KSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CNl9NTVIgICAgICAgICAgKCAweEZGRkQwMkMwICkgLyogKENBTl9NQjYpIE1haWxCb3ggTW9kZSBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CNyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjdfTUNSICAgICAgICAgICggMHhGRkZEMDJGQyApIC8qIChDQU5fTUI3KSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjdfTURIICAgICAgICAgICggMHhGRkZEMDJGOCApIC8qIChDQU5fTUI3KSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CN19NRklEICAgICAgICAgKCAweEZGRkQwMkVDICkgLyogKENBTl9NQjcpIE1haWxCb3ggRmFtaWx5IElEIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fTUI3X01ETCAgICAgICAgICAoIDB4RkZGRDAyRjQgKSAvKiAoQ0FOX01CNykgTWFpbEJveCBEYXRhIExvdyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CN19NSUQgICAgICAgICAgKCAweEZGRkQwMkU4ICkgLyogKENBTl9NQjcpIE1haWxCb3ggSUQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjdfTU1SICAgICAgICAgICggMHhGRkZEMDJFMCApIC8qIChDQU5fTUI3KSBNYWlsQm94IE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9NQjdfTUFNICAgICAgICAgICggMHhGRkZEMDJFNCApIC8qIChDQU5fTUI3KSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01CN19NU1IgICAgICAgICAgKCAweEZGRkQwMkYwICkgLyogKENBTl9NQjcpIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBDQU4gcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19DQU5fVENSICAgICAgICAgICAgICAoIDB4RkZGRDAwMjQgKSAvKiAoQ0FOKSBUcmFuc2ZlciBDb21tYW5kIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fSU1SICAgICAgICAgICAgICAoIDB4RkZGRDAwMEMgKSAvKiAoQ0FOKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX0lFUiAgICAgICAgICAgICAgKCAweEZGRkQwMDA0ICkgLyogKENBTikgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX0VDUiAgICAgICAgICAgICAgKCAweEZGRkQwMDIwICkgLyogKENBTikgRXJyb3IgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX1RJTUVTVFAgICAgICAgICAgKCAweEZGRkQwMDFDICkgLyogKENBTikgVGltZSBTdGFtcCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX01SICAgICAgICAgICAgICAgKCAweEZGRkQwMDAwICkgLyogKENBTikgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQ0FOX0lEUiAgICAgICAgICAgICAgKCAweEZGRkQwMDA4ICkgLyogKENBTikgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9BQ1IgICAgICAgICAgICAgICggMHhGRkZEMDAyOCApIC8qIChDQU4pIEFib3J0IENvbW1hbmQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9USU0gICAgICAgICAgICAgICggMHhGRkZEMDAxOCApIC8qIChDQU4pIFRpbWVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fU1IgICAgICAgICAgICAgICAoIDB4RkZGRDAwMTAgKSAvKiAoQ0FOKSBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0NBTl9CUiAgICAgICAgICAgICAgICggMHhGRkZEMDAxNCApIC8qIChDQU4pIEJhdWRyYXRlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19DQU5fVlIgICAgICAgICAgICAgICAoIDB4RkZGRDAwRkMgKSAvKiAoQ0FOKSBWZXJzaW9uIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBFTUFDIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19JU1IgICAgICAgICAgICAgKCAweEZGRkRDMDI0ICkgLyogKEVNQUMpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfU0E0SCAgICAgICAgICAgICggMHhGRkZEQzBCNCApIC8qIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDQgVG9wLCBMYXN0IDIgYnl0ZXMgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfU0ExTCAgICAgICAgICAgICggMHhGRkZEQzA5OCApIC8qIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDEgQm90dG9tLCBGaXJzdCA0IGJ5dGVzICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0VMRSAgICAgICAgICAgICAoIDB4RkZGREMwNzggKSAvKiAoRU1BQykgRXhjZXNzaXZlIExlbmd0aCBFcnJvcnMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfTENPTCAgICAgICAgICAgICggMHhGRkZEQzA1QyApIC8qIChFTUFDKSBMYXRlIENvbGxpc2lvbiBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19STEUgICAgICAgICAgICAgKCAweEZGRkRDMDg4ICkgLyogKEVNQUMpIFJlY2VpdmUgTGVuZ3RoIEZpZWxkIE1pc21hdGNoIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1dPTCAgICAgICAgICAgICAoIDB4RkZGREMwQzQgKSAvKiAoRU1BQykgV2FrZSBPbiBMQU4gUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfRFRGICAgICAgICAgICAgICggMHhGRkZEQzA1OCApIC8qIChFTUFDKSBEZWZlcnJlZCBUcmFuc21pc3Npb24gRnJhbWUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfVFVORCAgICAgICAgICAgICggMHhGRkZEQzA2NCApIC8qIChFTUFDKSBUcmFuc21pdCBVbmRlcnJ1biBFcnJvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19OQ1IgICAgICAgICAgICAgKCAweEZGRkRDMDAwICkgLyogKEVNQUMpIE5ldHdvcmsgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19TQTRMICAgICAgICAgICAgKCAweEZGRkRDMEIwICkgLyogKEVNQUMpIFNwZWNpZmljIEFkZHJlc3MgNCBCb3R0b20sIEZpcnN0IDQgYnl0ZXMgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfUlNSICAgICAgICAgICAgICggMHhGRkZEQzAyMCApIC8qIChFTUFDKSBSZWNlaXZlIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19TQTNMICAgICAgICAgICAgKCAweEZGRkRDMEE4ICkgLyogKEVNQUMpIFNwZWNpZmljIEFkZHJlc3MgMyBCb3R0b20sIEZpcnN0IDQgYnl0ZXMgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfVFNSICAgICAgICAgICAgICggMHhGRkZEQzAxNCApIC8qIChFTUFDKSBUcmFuc21pdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfSURSICAgICAgICAgICAgICggMHhGRkZEQzAyQyApIC8qIChFTUFDKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19SU0UgICAgICAgICAgICAgKCAweEZGRkRDMDc0ICkgLyogKEVNQUMpIFJlY2VpdmUgU3ltYm9sIEVycm9ycyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19FQ09MICAgICAgICAgICAgKCAweEZGRkRDMDYwICkgLyogKEVNQUMpIEV4Y2Vzc2l2ZSBDb2xsaXNpb24gUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfVElEICAgICAgICAgICAgICggMHhGRkZEQzBCOCApIC8qIChFTUFDKSBUeXBlIElEIENoZWNraW5nIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX0hSQiAgICAgICAgICAgICAoIDB4RkZGREMwOTAgKSAvKiAoRU1BQykgSGFzaCBBZGRyZXNzIEJvdHRvbVszMTowXSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19UQlFQICAgICAgICAgICAgKCAweEZGRkRDMDFDICkgLyogKEVNQUMpIFRyYW5zbWl0IEJ1ZmZlciBRdWV1ZSBQb2ludGVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1VTUklPICAgICAgICAgICAoIDB4RkZGREMwQzAgKSAvKiAoRU1BQykgVVNFUiBJbnB1dC9PdXRwdXQgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfUFRSICAgICAgICAgICAgICggMHhGRkZEQzAzOCApIC8qIChFTUFDKSBQYXVzZSBUaW1lIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1NBMkggICAgICAgICAgICAoIDB4RkZGREMwQTQgKSAvKiAoRU1BQykgU3BlY2lmaWMgQWRkcmVzcyAyIFRvcCwgTGFzdCAyIGJ5dGVzICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1JPViAgICAgICAgICAgICAoIDB4RkZGREMwNzAgKSAvKiAoRU1BQykgUmVjZWl2ZSBPdmVycnVuIEVycm9ycyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19BTEUgICAgICAgICAgICAgKCAweEZGRkRDMDU0ICkgLyogKEVNQUMpIEFsaWdubWVudCBFcnJvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19SSkEgICAgICAgICAgICAgKCAweEZGRkRDMDdDICkgLyogKEVNQUMpIFJlY2VpdmUgSmFiYmVycyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19SQlFQICAgICAgICAgICAgKCAweEZGRkRDMDE4ICkgLyogKEVNQUMpIFJlY2VpdmUgQnVmZmVyIFF1ZXVlIFBvaW50ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfVFBGICAgICAgICAgICAgICggMHhGRkZEQzA4QyApIC8qIChFTUFDKSBUcmFuc21pdHRlZCBQYXVzZSBGcmFtZXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfTkNGR1IgICAgICAgICAgICggMHhGRkZEQzAwNCApIC8qIChFTUFDKSBOZXR3b3JrIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfSFJUICAgICAgICAgICAgICggMHhGRkZEQzA5NCApIC8qIChFTUFDKSBIYXNoIEFkZHJlc3MgVG9wWzYzOjMyXSAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19VU0YgICAgICAgICAgICAgKCAweEZGRkRDMDgwICkgLyogKEVNQUMpIFVuZGVyc2l6ZSBGcmFtZXMgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfRkNTRSAgICAgICAgICAgICggMHhGRkZEQzA1MCApIC8qIChFTUFDKSBGcmFtZSBDaGVjayBTZXF1ZW5jZSBFcnJvciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19UUFEgICAgICAgICAgICAgKCAweEZGRkRDMEJDICkgLyogKEVNQUMpIFRyYW5zbWl0IFBhdXNlIFF1YW50dW0gUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfTUFOICAgICAgICAgICAgICggMHhGRkZEQzAzNCApIC8qIChFTUFDKSBQSFkgTWFpbnRlbmFuY2UgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfRlRPICAgICAgICAgICAgICggMHhGRkZEQzA0MCApIC8qIChFTUFDKSBGcmFtZXMgVHJhbnNtaXR0ZWQgT0sgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfUkVWICAgICAgICAgICAgICggMHhGRkZEQzBGQyApIC8qIChFTUFDKSBSZXZpc2lvbiBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19JTVIgICAgICAgICAgICAgKCAweEZGRkRDMDMwICkgLyogKEVNQUMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1NDRiAgICAgICAgICAgICAoIDB4RkZGREMwNDQgKSAvKiAoRU1BQykgU2luZ2xlIENvbGxpc2lvbiBGcmFtZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19QRlIgICAgICAgICAgICAgKCAweEZGRkRDMDNDICkgLyogKEVNQUMpIFBhdXNlIEZyYW1lcyByZWNlaXZlZCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19NQ0YgICAgICAgICAgICAgKCAweEZGRkRDMDQ4ICkgLyogKEVNQUMpIE11bHRpcGxlIENvbGxpc2lvbiBGcmFtZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19OU1IgICAgICAgICAgICAgKCAweEZGRkRDMDA4ICkgLyogKEVNQUMpIE5ldHdvcmsgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1NBMkwgICAgICAgICAgICAoIDB4RkZGREMwQTAgKSAvKiAoRU1BQykgU3BlY2lmaWMgQWRkcmVzcyAyIEJvdHRvbSwgRmlyc3QgNCBieXRlcyAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19GUk8gICAgICAgICAgICAgKCAweEZGRkRDMDRDICkgLyogKEVNQUMpIEZyYW1lcyBSZWNlaXZlZCBPSyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfRU1BQ19JRVIgICAgICAgICAgICAgKCAweEZGRkRDMDI4ICkgLyogKEVNQUMpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfU0ExSCAgICAgICAgICAgICggMHhGRkZEQzA5QyApIC8qIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDEgVG9wLCBMYXN0IDIgYnl0ZXMgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfQ1NFICAgICAgICAgICAgICggMHhGRkZEQzA2OCApIC8qIChFTUFDKSBDYXJyaWVyIFNlbnNlIEVycm9yIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1NBM0ggICAgICAgICAgICAoIDB4RkZGREMwQUMgKSAvKiAoRU1BQykgU3BlY2lmaWMgQWRkcmVzcyAzIFRvcCwgTGFzdCAyIGJ5dGVzICovDQotI2RlZmluZSBBVDkxQ19FTUFDX1JSRSAgICAgICAgICAgICAoIDB4RkZGREMwNkMgKSAvKiAoRU1BQykgUmVjZWl2ZSBSZXNzb3VyY2UgRXJyb3IgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0VNQUNfU1RFICAgICAgICAgICAgICggMHhGRkZEQzA4NCApIC8qIChFTUFDKSBTUUUgVGVzdCBFcnJvciBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX0FEQyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19QVFNSICAgICAgICAgICAgICggMHhGRkZEODEyNCApIC8qIChQRENfQURDKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRENfUFRDUiAgICAgICAgICAgICAoIDB4RkZGRDgxMjAgKSAvKiAoUERDX0FEQykgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19UTlBSICAgICAgICAgICAgICggMHhGRkZEODExOCApIC8qIChQRENfQURDKSBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19UTkNSICAgICAgICAgICAgICggMHhGRkZEODExQyApIC8qIChQRENfQURDKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19STlBSICAgICAgICAgICAgICggMHhGRkZEODExMCApIC8qIChQRENfQURDKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1JOQ1IgICAgICAgICAgICAgKCAweEZGRkQ4MTE0ICkgLyogKFBEQ19BREMpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRENfUlBSICAgICAgICAgICAgICAoIDB4RkZGRDgxMDAgKSAvKiAoUERDX0FEQykgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRENfVENSICAgICAgICAgICAgICAoIDB4RkZGRDgxMEMgKSAvKiAoUERDX0FEQykgVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1RQUiAgICAgICAgICAgICAgKCAweEZGRkQ4MTA4ICkgLyogKFBEQ19BREMpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19SQ1IgICAgICAgICAgICAgICggMHhGRkZEODEwNCApIC8qIChQRENfQURDKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0vKiA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIEFEQyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DRFIyICAgICAgICAgICAgICggMHhGRkZEODAzOCApIC8qIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NEUjMgICAgICAgICAgICAgKCAweEZGRkQ4MDNDICkgLyogKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAzICovDQotI2RlZmluZSBBVDkxQ19BRENfQ0RSMCAgICAgICAgICAgICAoIDB4RkZGRDgwMzAgKSAvKiAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDAgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DRFI1ICAgICAgICAgICAgICggMHhGRkZEODA0NCApIC8qIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNSAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NIRFIgICAgICAgICAgICAgKCAweEZGRkQ4MDE0ICkgLyogKEFEQykgQURDIENoYW5uZWwgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX1NSICAgICAgICAgICAgICAgKCAweEZGRkQ4MDFDICkgLyogKEFEQykgQURDIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NEUjQgICAgICAgICAgICAgKCAweEZGRkQ4MDQwICkgLyogKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA0ICovDQotI2RlZmluZSBBVDkxQ19BRENfQ0RSMSAgICAgICAgICAgICAoIDB4RkZGRDgwMzQgKSAvKiAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDEgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19MQ0RSICAgICAgICAgICAgICggMHhGRkZEODAyMCApIC8qIChBREMpIEFEQyBMYXN0IENvbnZlcnRlZCBEYXRhIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRENfSURSICAgICAgICAgICAgICAoIDB4RkZGRDgwMjggKSAvKiAoQURDKSBBREMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DUiAgICAgICAgICAgICAgICggMHhGRkZEODAwMCApIC8qIChBREMpIEFEQyBDb250cm9sIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRENfQ0RSNyAgICAgICAgICAgICAoIDB4RkZGRDgwNEMgKSAvKiAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDcgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DRFI2ICAgICAgICAgICAgICggMHhGRkZEODA0OCApIC8qIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNiAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0lFUiAgICAgICAgICAgICAgKCAweEZGRkQ4MDI0ICkgLyogKEFEQykgQURDIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FEQ19DSEVSICAgICAgICAgICAgICggMHhGRkZEODAxMCApIC8qIChBREMpIEFEQyBDaGFubmVsIEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0NIU1IgICAgICAgICAgICAgKCAweEZGRkQ4MDE4ICkgLyogKEFEQykgQURDIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRENfTVIgICAgICAgICAgICAgICAoIDB4RkZGRDgwMDQgKSAvKiAoQURDKSBBREMgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQURDX0lNUiAgICAgICAgICAgICAgKCAweEZGRkQ4MDJDICkgLyogKEFEQykgQURDIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotLyogPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfQUVTIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX1RQUiAgICAgICAgICAgICAgKCAweEZGRkE0MTA4ICkgLyogKFBEQ19BRVMpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19QVENSICAgICAgICAgICAgICggMHhGRkZBNDEyMCApIC8qIChQRENfQUVTKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX1JOUFIgICAgICAgICAgICAgKCAweEZGRkE0MTEwICkgLyogKFBEQ19BRVMpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRVNfVE5DUiAgICAgICAgICAgICAoIDB4RkZGQTQxMUMgKSAvKiAoUERDX0FFUykgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRVNfVENSICAgICAgICAgICAgICAoIDB4RkZGQTQxMEMgKSAvKiAoUERDX0FFUykgVHJhbnNtaXQgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX1JDUiAgICAgICAgICAgICAgKCAweEZGRkE0MTA0ICkgLyogKFBEQ19BRVMpIFJlY2VpdmUgQ291bnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX1JOQ1IgICAgICAgICAgICAgKCAweEZGRkE0MTE0ICkgLyogKFBEQ19BRVMpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRVNfVE5QUiAgICAgICAgICAgICAoIDB4RkZGQTQxMTggKSAvKiAoUERDX0FFUykgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRVNfUlBSICAgICAgICAgICAgICAoIDB4RkZGQTQxMDAgKSAvKiAoUERDX0FFUykgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRVNfUFRTUiAgICAgICAgICAgICAoIDB4RkZGQTQxMjQgKSAvKiAoUERDX0FFUykgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQUVTIHBlcmlwaGVyYWwgPT09PT09PT09PSAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX0lWeFIgICAgICAgICAgICAgKCAweEZGRkE0MDYwICkgLyogKEFFUykgSW5pdGlhbGl6YXRpb24gVmVjdG9yIHggUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19NUiAgICAgICAgICAgICAgICggMHhGRkZBNDAwNCApIC8qIChBRVMpIE1vZGUgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19WUiAgICAgICAgICAgICAgICggMHhGRkZBNDBGQyApIC8qIChBRVMpIEFFUyBWZXJzaW9uIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRVNfT0RBVEF4UiAgICAgICAgICAoIDB4RkZGQTQwNTAgKSAvKiAoQUVTKSBPdXRwdXQgRGF0YSB4IFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRVNfSURBVEF4UiAgICAgICAgICAoIDB4RkZGQTQwNDAgKSAvKiAoQUVTKSBJbnB1dCBEYXRhIHggUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19DUiAgICAgICAgICAgICAgICggMHhGRkZBNDAwMCApIC8qIChBRVMpIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX0FFU19JRFIgICAgICAgICAgICAgICggMHhGRkZBNDAxNCApIC8qIChBRVMpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19BRVNfSU1SICAgICAgICAgICAgICAoIDB4RkZGQTQwMTggKSAvKiAoQUVTKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX0lFUiAgICAgICAgICAgICAgKCAweEZGRkE0MDEwICkgLyogKEFFUykgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX0tFWVd4UiAgICAgICAgICAgKCAweEZGRkE0MDIwICkgLyogKEFFUykgS2V5IFdvcmQgeCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfQUVTX0lTUiAgICAgICAgICAgICAgKCAweEZGRkE0MDFDICkgLyogKEFFUykgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX1RERVMgcGVyaXBoZXJhbCA9PT09PT09PT09ICovDQotI2RlZmluZSBBVDkxQ19UREVTX1JOQ1IgICAgICAgICAgICAoIDB4RkZGQTgxMTQgKSAvKiAoUERDX1RERVMpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UREVTX1RDUiAgICAgICAgICAgICAoIDB4RkZGQTgxMEMgKSAvKiAoUERDX1RERVMpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfUkNSICAgICAgICAgICAgICggMHhGRkZBODEwNCApIC8qIChQRENfVERFUykgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UREVTX1ROUFIgICAgICAgICAgICAoIDB4RkZGQTgxMTggKSAvKiAoUERDX1RERVMpIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19STlBSICAgICAgICAgICAgKCAweEZGRkE4MTEwICkgLyogKFBEQ19UREVTKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19SUFIgICAgICAgICAgICAgKCAweEZGRkE4MTAwICkgLyogKFBEQ19UREVTKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfVE5DUiAgICAgICAgICAgICggMHhGRkZBODExQyApIC8qIChQRENfVERFUykgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UREVTX1RQUiAgICAgICAgICAgICAoIDB4RkZGQTgxMDggKSAvKiAoUERDX1RERVMpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfUFRTUiAgICAgICAgICAgICggMHhGRkZBODEyNCApIC8qIChQRENfVERFUykgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19QVENSICAgICAgICAgICAgKCAweEZGRkE4MTIwICkgLyogKFBEQ19UREVTKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3RlciAqLw0KLS8qID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVERFUyBwZXJpcGhlcmFsID09PT09PT09PT0gKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfS0VZMld4UiAgICAgICAgICggMHhGRkZBODAyOCApIC8qIChUREVTKSBLZXkgMiBXb3JkIHggUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfS0VZM1d4UiAgICAgICAgICggMHhGRkZBODAzMCApIC8qIChUREVTKSBLZXkgMyBXb3JkIHggUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfSURSICAgICAgICAgICAgICggMHhGRkZBODAxNCApIC8qIChUREVTKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19WUiAgICAgICAgICAgICAgKCAweEZGRkE4MEZDICkgLyogKFRERVMpIFRERVMgVmVyc2lvbiBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19JVnhSICAgICAgICAgICAgKCAweEZGRkE4MDYwICkgLyogKFRERVMpIEluaXRpYWxpemF0aW9uIFZlY3RvciB4IFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UREVTX09EQVRBeFIgICAgICAgICAoIDB4RkZGQTgwNTAgKSAvKiAoVERFUykgT3V0cHV0IERhdGEgeCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19JTVIgICAgICAgICAgICAgKCAweEZGRkE4MDE4ICkgLyogKFRERVMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UREVTX01SICAgICAgICAgICAgICAoIDB4RkZGQTgwMDQgKSAvKiAoVERFUykgTW9kZSBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19DUiAgICAgICAgICAgICAgKCAweEZGRkE4MDAwICkgLyogKFRERVMpIENvbnRyb2wgUmVnaXN0ZXIgKi8NCi0jZGVmaW5lIEFUOTFDX1RERVNfSUVSICAgICAgICAgICAgICggMHhGRkZBODAxMCApIC8qIChUREVTKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovDQotI2RlZmluZSBBVDkxQ19UREVTX0lTUiAgICAgICAgICAgICAoIDB4RkZGQTgwMUMgKSAvKiAoVERFUykgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19JREFUQXhSICAgICAgICAgKCAweEZGRkE4MDQwICkgLyogKFRERVMpIElucHV0IERhdGEgeCBSZWdpc3RlciAqLw0KLSNkZWZpbmUgQVQ5MUNfVERFU19LRVkxV3hSICAgICAgICAgKCAweEZGRkE4MDIwICkgLyogKFRERVMpIEtleSAxIFdvcmQgeCBSZWdpc3RlciAqLw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgICBSRUdJU1RFUiBBRERSRVNTIERFRklOSVRJT04gRk9SIEFUOTFTQU03WDI1Ng0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBTWVMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQUlDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0FJQ19JVlIgICAgICAgICAgICAgKDB4RkZGRkYxMDApIC8vIChBSUMpIElSUSBWZWN0b3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19TTVIgICAgICAgICAgICAgKDB4RkZGRkYwMDApIC8vIChBSUMpIFNvdXJjZSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfRlZSICAgICAgICAgICAgICgweEZGRkZGMTA0KSAvLyAoQUlDKSBGSVEgVmVjdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfRENSICAgICAgICAgICAgICgweEZGRkZGMTM4KSAvLyAoQUlDKSBEZWJ1ZyBDb250cm9sIFJlZ2lzdGVyIChQcm90ZWN0KQ0KKyNkZWZpbmUgQVQ5MUNfQUlDX0VPSUNSICAgICAgICAgICAoMHhGRkZGRjEzMCkgLy8gKEFJQykgRW5kIG9mIEludGVycnVwdCBDb21tYW5kIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfU1ZSICAgICAgICAgICAgICgweEZGRkZGMDgwKSAvLyAoQUlDKSBTb3VyY2UgVmVjdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfRkZTUiAgICAgICAgICAgICgweEZGRkZGMTQ4KSAvLyAoQUlDKSBGYXN0IEZvcmNpbmcgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfSUNDUiAgICAgICAgICAgICgweEZGRkZGMTI4KSAvLyAoQUlDKSBJbnRlcnJ1cHQgQ2xlYXIgQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0lTUiAgICAgICAgICAgICAoMHhGRkZGRjEwOCkgLy8gKEFJQykgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0lNUiAgICAgICAgICAgICAoMHhGRkZGRjExMCkgLy8gKEFJQykgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19JUFIgICAgICAgICAgICAgKDB4RkZGRkYxMEMpIC8vIChBSUMpIEludGVycnVwdCBQZW5kaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfRkZFUiAgICAgICAgICAgICgweEZGRkZGMTQwKSAvLyAoQUlDKSBGYXN0IEZvcmNpbmcgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BSUNfSUVDUiAgICAgICAgICAgICgweEZGRkZGMTIwKSAvLyAoQUlDKSBJbnRlcnJ1cHQgRW5hYmxlIENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19JU0NSICAgICAgICAgICAgKDB4RkZGRkYxMkMpIC8vIChBSUMpIEludGVycnVwdCBTZXQgQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0ZGRFIgICAgICAgICAgICAoMHhGRkZGRjE0NCkgLy8gKEFJQykgRmFzdCBGb3JjaW5nIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FJQ19DSVNSICAgICAgICAgICAgKDB4RkZGRkYxMTQpIC8vIChBSUMpIENvcmUgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX0lEQ1IgICAgICAgICAgICAoMHhGRkZGRjEyNCkgLy8gKEFJQykgSW50ZXJydXB0IERpc2FibGUgQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUlDX1NQVSAgICAgICAgICAgICAoMHhGRkZGRjEzNCkgLy8gKEFJQykgU3B1cmlvdXMgVmVjdG9yIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfREJHVSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19EQkdVX1RDUiAgICAgICAgICAgICgweEZGRkZGMzBDKSAvLyAoUERDX0RCR1UpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfUk5QUiAgICAgICAgICAgKDB4RkZGRkYzMTApIC8vIChQRENfREJHVSkgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfVE5QUiAgICAgICAgICAgKDB4RkZGRkYzMTgpIC8vIChQRENfREJHVSkgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1RQUiAgICAgICAgICAgICgweEZGRkZGMzA4KSAvLyAoUERDX0RCR1UpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfUlBSICAgICAgICAgICAgKDB4RkZGRkYzMDApIC8vIChQRENfREJHVSkgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1JDUiAgICAgICAgICAgICgweEZGRkZGMzA0KSAvLyAoUERDX0RCR1UpIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9STkNSICAgICAgICAgICAoMHhGRkZGRjMxNCkgLy8gKFBEQ19EQkdVKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9QVENSICAgICAgICAgICAoMHhGRkZGRjMyMCkgLy8gKFBEQ19EQkdVKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9QVFNSICAgICAgICAgICAoMHhGRkZGRjMyNCkgLy8gKFBEQ19EQkdVKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1ROQ1IgICAgICAgICAgICgweEZGRkZGMzFDKSAvLyAoUERDX0RCR1UpIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgREJHVSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19EQkdVX0VYSUQgICAgICAgICAgICgweEZGRkZGMjQ0KSAvLyAoREJHVSkgQ2hpcCBJRCBFeHRlbnNpb24gUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfQlJHUiAgICAgICAgICAgKDB4RkZGRkYyMjApIC8vIChEQkdVKSBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX0lEUiAgICAgICAgICAgICgweEZGRkZGMjBDKSAvLyAoREJHVSkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfQ1NSICAgICAgICAgICAgKDB4RkZGRkYyMTQpIC8vIChEQkdVKSBDaGFubmVsIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9DSURSICAgICAgICAgICAoMHhGRkZGRjI0MCkgLy8gKERCR1UpIENoaXAgSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfTVIgICAgICAgICAgICAgKDB4RkZGRkYyMDQpIC8vIChEQkdVKSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX0lNUiAgICAgICAgICAgICgweEZGRkZGMjEwKSAvLyAoREJHVSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfQ1IgICAgICAgICAgICAgKDB4RkZGRkYyMDApIC8vIChEQkdVKSBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX0ZOVFIgICAgICAgICAgICgweEZGRkZGMjQ4KSAvLyAoREJHVSkgRm9yY2UgTlRSU1QgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0RCR1VfVEhSICAgICAgICAgICAgKDB4RkZGRkYyMUMpIC8vIChEQkdVKSBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19EQkdVX1JIUiAgICAgICAgICAgICgweEZGRkZGMjE4KSAvLyAoREJHVSkgUmVjZWl2ZXIgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfREJHVV9JRVIgICAgICAgICAgICAoMHhGRkZGRjIwOCkgLy8gKERCR1UpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBJT0EgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUElPQV9PRFIgICAgICAgICAgICAoMHhGRkZGRjQxNCkgLy8gKFBJT0EpIE91dHB1dCBEaXNhYmxlIFJlZ2lzdGVycg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9TT0RSICAgICAgICAgICAoMHhGRkZGRjQzMCkgLy8gKFBJT0EpIFNldCBPdXRwdXQgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9JU1IgICAgICAgICAgICAoMHhGRkZGRjQ0QykgLy8gKFBJT0EpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfQUJTUiAgICAgICAgICAgKDB4RkZGRkY0NzgpIC8vIChQSU9BKSBBQiBTZWxlY3QgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0lFUiAgICAgICAgICAgICgweEZGRkZGNDQwKSAvLyAoUElPQSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9QUFVEUiAgICAgICAgICAoMHhGRkZGRjQ2MCkgLy8gKFBJT0EpIFB1bGwtdXAgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9JTVIgICAgICAgICAgICAoMHhGRkZGRjQ0OCkgLy8gKFBJT0EpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX1BFUiAgICAgICAgICAgICgweEZGRkZGNDAwKSAvLyAoUElPQSkgUElPIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9JRkRSICAgICAgICAgICAoMHhGRkZGRjQyNCkgLy8gKFBJT0EpIElucHV0IEZpbHRlciBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX09XRFIgICAgICAgICAgICgweEZGRkZGNEE0KSAvLyAoUElPQSkgT3V0cHV0IFdyaXRlIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfTURTUiAgICAgICAgICAgKDB4RkZGRkY0NTgpIC8vIChQSU9BKSBNdWx0aS1kcml2ZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0lEUiAgICAgICAgICAgICgweEZGRkZGNDQ0KSAvLyAoUElPQSkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfT0RTUiAgICAgICAgICAgKDB4RkZGRkY0MzgpIC8vIChQSU9BKSBPdXRwdXQgRGF0YSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfUFBVU1IgICAgICAgICAgKDB4RkZGRkY0NjgpIC8vIChQSU9BKSBQdWxsLXVwIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9PV1NSICAgICAgICAgICAoMHhGRkZGRjRBOCkgLy8gKFBJT0EpIE91dHB1dCBXcml0ZSBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfQlNSICAgICAgICAgICAgKDB4RkZGRkY0NzQpIC8vIChQSU9BKSBTZWxlY3QgQiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9PV0VSICAgICAgICAgICAoMHhGRkZGRjRBMCkgLy8gKFBJT0EpIE91dHB1dCBXcml0ZSBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfSUZFUiAgICAgICAgICAgKDB4RkZGRkY0MjApIC8vIChQSU9BKSBJbnB1dCBGaWx0ZXIgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX1BEU1IgICAgICAgICAgICgweEZGRkZGNDNDKSAvLyAoUElPQSkgUGluIERhdGEgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX1BQVUVSICAgICAgICAgICgweEZGRkZGNDY0KSAvLyAoUElPQSkgUHVsbC11cCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfT1NSICAgICAgICAgICAgKDB4RkZGRkY0MTgpIC8vIChQSU9BKSBPdXRwdXQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0FTUiAgICAgICAgICAgICgweEZGRkZGNDcwKSAvLyAoUElPQSkgU2VsZWN0IEEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfTUREUiAgICAgICAgICAgKDB4RkZGRkY0NTQpIC8vIChQSU9BKSBNdWx0aS1kcml2ZXIgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9DT0RSICAgICAgICAgICAoMHhGRkZGRjQzNCkgLy8gKFBJT0EpIENsZWFyIE91dHB1dCBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX01ERVIgICAgICAgICAgICgweEZGRkZGNDUwKSAvLyAoUElPQSkgTXVsdGktZHJpdmVyIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9QRFIgICAgICAgICAgICAoMHhGRkZGRjQwNCkgLy8gKFBJT0EpIFBJTyBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9BX0lGU1IgICAgICAgICAgICgweEZGRkZGNDI4KSAvLyAoUElPQSkgSW5wdXQgRmlsdGVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQV9PRVIgICAgICAgICAgICAoMHhGRkZGRjQxMCkgLy8gKFBJT0EpIE91dHB1dCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0FfUFNSICAgICAgICAgICAgKDB4RkZGRkY0MDgpIC8vIChQSU9BKSBQSU8gU3RhdHVzIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQSU9CIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1BJT0JfT1dEUiAgICAgICAgICAgKDB4RkZGRkY2QTQpIC8vIChQSU9CKSBPdXRwdXQgV3JpdGUgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9NREVSICAgICAgICAgICAoMHhGRkZGRjY1MCkgLy8gKFBJT0IpIE11bHRpLWRyaXZlciBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfUFBVU1IgICAgICAgICAgKDB4RkZGRkY2NjgpIC8vIChQSU9CKSBQdWxsLXVwIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9JTVIgICAgICAgICAgICAoMHhGRkZGRjY0OCkgLy8gKFBJT0IpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX0FTUiAgICAgICAgICAgICgweEZGRkZGNjcwKSAvLyAoUElPQikgU2VsZWN0IEEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfUFBVRFIgICAgICAgICAgKDB4RkZGRkY2NjApIC8vIChQSU9CKSBQdWxsLXVwIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfUFNSICAgICAgICAgICAgKDB4RkZGRkY2MDgpIC8vIChQSU9CKSBQSU8gU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX0lFUiAgICAgICAgICAgICgweEZGRkZGNjQwKSAvLyAoUElPQikgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9DT0RSICAgICAgICAgICAoMHhGRkZGRjYzNCkgLy8gKFBJT0IpIENsZWFyIE91dHB1dCBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX09XRVIgICAgICAgICAgICgweEZGRkZGNkEwKSAvLyAoUElPQikgT3V0cHV0IFdyaXRlIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9BQlNSICAgICAgICAgICAoMHhGRkZGRjY3OCkgLy8gKFBJT0IpIEFCIFNlbGVjdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfSUZEUiAgICAgICAgICAgKDB4RkZGRkY2MjQpIC8vIChQSU9CKSBJbnB1dCBGaWx0ZXIgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9QRFNSICAgICAgICAgICAoMHhGRkZGRjYzQykgLy8gKFBJT0IpIFBpbiBEYXRhIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9JRFIgICAgICAgICAgICAoMHhGRkZGRjY0NCkgLy8gKFBJT0IpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX09XU1IgICAgICAgICAgICgweEZGRkZGNkE4KSAvLyAoUElPQikgT3V0cHV0IFdyaXRlIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9QRFIgICAgICAgICAgICAoMHhGRkZGRjYwNCkgLy8gKFBJT0IpIFBJTyBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX09EUiAgICAgICAgICAgICgweEZGRkZGNjE0KSAvLyAoUElPQikgT3V0cHV0IERpc2FibGUgUmVnaXN0ZXJyDQorI2RlZmluZSBBVDkxQ19QSU9CX0lGU1IgICAgICAgICAgICgweEZGRkZGNjI4KSAvLyAoUElPQikgSW5wdXQgRmlsdGVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9QUFVFUiAgICAgICAgICAoMHhGRkZGRjY2NCkgLy8gKFBJT0IpIFB1bGwtdXAgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX1NPRFIgICAgICAgICAgICgweEZGRkZGNjMwKSAvLyAoUElPQikgU2V0IE91dHB1dCBEYXRhIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX0lTUiAgICAgICAgICAgICgweEZGRkZGNjRDKSAvLyAoUElPQikgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9PRFNSICAgICAgICAgICAoMHhGRkZGRjYzOCkgLy8gKFBJT0IpIE91dHB1dCBEYXRhIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9PU1IgICAgICAgICAgICAoMHhGRkZGRjYxOCkgLy8gKFBJT0IpIE91dHB1dCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfTURTUiAgICAgICAgICAgKDB4RkZGRkY2NTgpIC8vIChQSU9CKSBNdWx0aS1kcml2ZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX0lGRVIgICAgICAgICAgICgweEZGRkZGNjIwKSAvLyAoUElPQikgSW5wdXQgRmlsdGVyIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElPQl9CU1IgICAgICAgICAgICAoMHhGRkZGRjY3NCkgLy8gKFBJT0IpIFNlbGVjdCBCIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX01ERFIgICAgICAgICAgICgweEZGRkZGNjU0KSAvLyAoUElPQikgTXVsdGktZHJpdmVyIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJT0JfT0VSICAgICAgICAgICAgKDB4RkZGRkY2MTApIC8vIChQSU9CKSBPdXRwdXQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QSU9CX1BFUiAgICAgICAgICAgICgweEZGRkZGNjAwKSAvLyAoUElPQikgUElPIEVuYWJsZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0tHUiBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19DS0dSX01PUiAgICAgICAgICAgICgweEZGRkZGQzIwKSAvLyAoQ0tHUikgTWFpbiBPc2NpbGxhdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DS0dSX1BMTFIgICAgICAgICAgICgweEZGRkZGQzJDKSAvLyAoQ0tHUikgUExMIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DS0dSX01DRlIgICAgICAgICAgICgweEZGRkZGQzI0KSAvLyAoQ0tHUikgTWFpbiBDbG9jayAgRnJlcXVlbmN5IFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQTUMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUE1DX0lEUiAgICAgICAgICAgICAoMHhGRkZGRkM2NCkgLy8gKFBNQykgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19NT1IgICAgICAgICAgICAgKDB4RkZGRkZDMjApIC8vIChQTUMpIE1haW4gT3NjaWxsYXRvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BMTFIgICAgICAgICAgICAoMHhGRkZGRkMyQykgLy8gKFBNQykgUExMIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfUENFUiAgICAgICAgICAgICgweEZGRkZGQzEwKSAvLyAoUE1DKSBQZXJpcGhlcmFsIENsb2NrIEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUE1DX1BDS1IgICAgICAgICAgICAoMHhGRkZGRkM0MCkgLy8gKFBNQykgUHJvZ3JhbW1hYmxlIENsb2NrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfTUNLUiAgICAgICAgICAgICgweEZGRkZGQzMwKSAvLyAoUE1DKSBNYXN0ZXIgQ2xvY2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19TQ0RSICAgICAgICAgICAgKDB4RkZGRkZDMDQpIC8vIChQTUMpIFN5c3RlbSBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfUENEUiAgICAgICAgICAgICgweEZGRkZGQzE0KSAvLyAoUE1DKSBQZXJpcGhlcmFsIENsb2NrIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19TQ1NSICAgICAgICAgICAgKDB4RkZGRkZDMDgpIC8vIChQTUMpIFN5c3RlbSBDbG9jayBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19QQ1NSICAgICAgICAgICAgKDB4RkZGRkZDMTgpIC8vIChQTUMpIFBlcmlwaGVyYWwgQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfTUNGUiAgICAgICAgICAgICgweEZGRkZGQzI0KSAvLyAoUE1DKSBNYWluIENsb2NrICBGcmVxdWVuY3kgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19TQ0VSICAgICAgICAgICAgKDB4RkZGRkZDMDApIC8vIChQTUMpIFN5c3RlbSBDbG9jayBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BNQ19JTVIgICAgICAgICAgICAgKDB4RkZGRkZDNkMpIC8vIChQTUMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfSUVSICAgICAgICAgICAgICgweEZGRkZGQzYwKSAvLyAoUE1DKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QTUNfU1IgICAgICAgICAgICAgICgweEZGRkZGQzY4KSAvLyAoUE1DKSBTdGF0dXMgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFJTVEMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUlNUQ19SQ1IgICAgICAgICAgICAoMHhGRkZGRkQwMCkgLy8gKFJTVEMpIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1JTVENfUk1SICAgICAgICAgICAgKDB4RkZGRkZEMDgpIC8vIChSU1RDKSBSZXNldCBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19SU1RDX1JTUiAgICAgICAgICAgICgweEZGRkZGRDA0KSAvLyAoUlNUQykgUmVzZXQgU3RhdHVzIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBSVFRDIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1JUVENfUlRTUiAgICAgICAgICAgKDB4RkZGRkZEMkMpIC8vIChSVFRDKSBSZWFsLXRpbWUgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19SVFRDX1JUTVIgICAgICAgICAgICgweEZGRkZGRDIwKSAvLyAoUlRUQykgUmVhbC10aW1lIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1JUVENfUlRWUiAgICAgICAgICAgKDB4RkZGRkZEMjgpIC8vIChSVFRDKSBSZWFsLXRpbWUgVmFsdWUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1JUVENfUlRBUiAgICAgICAgICAgKDB4RkZGRkZEMjQpIC8vIChSVFRDKSBSZWFsLXRpbWUgQWxhcm0gUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBJVEMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUElUQ19QSVZSICAgICAgICAgICAoMHhGRkZGRkQzOCkgLy8gKFBJVEMpIFBlcmlvZCBJbnRlcnZhbCBWYWx1ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUElUQ19QSVNSICAgICAgICAgICAoMHhGRkZGRkQzNCkgLy8gKFBJVEMpIFBlcmlvZCBJbnRlcnZhbCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJVENfUElJUiAgICAgICAgICAgKDB4RkZGRkZEM0MpIC8vIChQSVRDKSBQZXJpb2QgSW50ZXJ2YWwgSW1hZ2UgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BJVENfUElNUiAgICAgICAgICAgKDB4RkZGRkZEMzApIC8vIChQSVRDKSBQZXJpb2QgSW50ZXJ2YWwgTW9kZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgV0RUQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19XRFRDX1dEQ1IgICAgICAgICAgICgweEZGRkZGRDQwKSAvLyAoV0RUQykgV2F0Y2hkb2cgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRFNSICAgICAgICAgICAoMHhGRkZGRkQ0OCkgLy8gKFdEVEMpIFdhdGNoZG9nIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfV0RUQ19XRE1SICAgICAgICAgICAoMHhGRkZGRkQ0NCkgLy8gKFdEVEMpIFdhdGNoZG9nIE1vZGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFZSRUcgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVlJFR19NUiAgICAgICAgICAgICAoMHhGRkZGRkQ2MCkgLy8gKFZSRUcpIFZvbHRhZ2UgUmVndWxhdG9yIE1vZGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIE1DIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX01DX0FTUiAgICAgICAgICAgICAgKDB4RkZGRkZGMDQpIC8vIChNQykgTUMgQWJvcnQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19NQ19SQ1IgICAgICAgICAgICAgICgweEZGRkZGRjAwKSAvLyAoTUMpIE1DIFJlbWFwIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX01DX0ZDUiAgICAgICAgICAgICAgKDB4RkZGRkZGNjQpIC8vIChNQykgTUMgRmxhc2ggQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfTUNfQUFTUiAgICAgICAgICAgICAoMHhGRkZGRkYwOCkgLy8gKE1DKSBNQyBBYm9ydCBBZGRyZXNzIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfTUNfRlNSICAgICAgICAgICAgICAoMHhGRkZGRkY2OCkgLy8gKE1DKSBNQyBGbGFzaCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX01DX0ZNUiAgICAgICAgICAgICAgKDB4RkZGRkZGNjApIC8vIChNQykgTUMgRmxhc2ggTW9kZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX1NQSTEgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9QVENSICAgICAgICAgICAoMHhGRkZFNDEyMCkgLy8gKFBEQ19TUEkxKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9SUFIgICAgICAgICAgICAoMHhGRkZFNDEwMCkgLy8gKFBEQ19TUEkxKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfVE5DUiAgICAgICAgICAgKDB4RkZGRTQxMUMpIC8vIChQRENfU1BJMSkgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX1RQUiAgICAgICAgICAgICgweEZGRkU0MTA4KSAvLyAoUERDX1NQSTEpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfVE5QUiAgICAgICAgICAgKDB4RkZGRTQxMTgpIC8vIChQRENfU1BJMSkgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX1RDUiAgICAgICAgICAgICgweEZGRkU0MTBDKSAvLyAoUERDX1NQSTEpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfUkNSICAgICAgICAgICAgKDB4RkZGRTQxMDQpIC8vIChQRENfU1BJMSkgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX1JOUFIgICAgICAgICAgICgweEZGRkU0MTEwKSAvLyAoUERDX1NQSTEpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX1JOQ1IgICAgICAgICAgICgweEZGRkU0MTE0KSAvLyAoUERDX1NQSTEpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX1BUU1IgICAgICAgICAgICgweEZGRkU0MTI0KSAvLyAoUERDX1NQSTEpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFNQSTEgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9JTVIgICAgICAgICAgICAoMHhGRkZFNDAxQykgLy8gKFNQSTEpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX0lFUiAgICAgICAgICAgICgweEZGRkU0MDE0KSAvLyAoU1BJMSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9NUiAgICAgICAgICAgICAoMHhGRkZFNDAwNCkgLy8gKFNQSTEpIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfUkRSICAgICAgICAgICAgKDB4RkZGRTQwMDgpIC8vIChTUEkxKSBSZWNlaXZlIERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfSURSICAgICAgICAgICAgKDB4RkZGRTQwMTgpIC8vIChTUEkxKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9TUiAgICAgICAgICAgICAoMHhGRkZFNDAxMCkgLy8gKFNQSTEpIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMV9URFIgICAgICAgICAgICAoMHhGRkZFNDAwQykgLy8gKFNQSTEpIFRyYW5zbWl0IERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTFfQ1IgICAgICAgICAgICAgKDB4RkZGRTQwMDApIC8vIChTUEkxKSBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkxX0NTUiAgICAgICAgICAgICgweEZGRkU0MDMwKSAvLyAoU1BJMSkgQ2hpcCBTZWxlY3QgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19TUEkwIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1NQSTBfUFRDUiAgICAgICAgICAgKDB4RkZGRTAxMjApIC8vIChQRENfU1BJMCkgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfVFBSICAgICAgICAgICAgKDB4RkZGRTAxMDgpIC8vIChQRENfU1BJMCkgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9UQ1IgICAgICAgICAgICAoMHhGRkZFMDEwQykgLy8gKFBEQ19TUEkwKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1JDUiAgICAgICAgICAgICgweEZGRkUwMTA0KSAvLyAoUERDX1NQSTApIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9QVFNSICAgICAgICAgICAoMHhGRkZFMDEyNCkgLy8gKFBEQ19TUEkwKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1JOUFIgICAgICAgICAgICgweEZGRkUwMTEwKSAvLyAoUERDX1NQSTApIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1JQUiAgICAgICAgICAgICgweEZGRkUwMTAwKSAvLyAoUERDX1NQSTApIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9UTkNSICAgICAgICAgICAoMHhGRkZFMDExQykgLy8gKFBEQ19TUEkwKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfUk5DUiAgICAgICAgICAgKDB4RkZGRTAxMTQpIC8vIChQRENfU1BJMCkgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfVE5QUiAgICAgICAgICAgKDB4RkZGRTAxMTgpIC8vIChQRENfU1BJMCkgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBTUEkwIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1NQSTBfSUVSICAgICAgICAgICAgKDB4RkZGRTAwMTQpIC8vIChTUEkwKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1NSICAgICAgICAgICAgICgweEZGRkUwMDEwKSAvLyAoU1BJMCkgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX0lEUiAgICAgICAgICAgICgweEZGRkUwMDE4KSAvLyAoU1BJMCkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NQSTBfQ1IgICAgICAgICAgICAgKDB4RkZGRTAwMDApIC8vIChTUEkwKSBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX01SICAgICAgICAgICAgICgweEZGRkUwMDA0KSAvLyAoU1BJMCkgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9JTVIgICAgICAgICAgICAoMHhGRkZFMDAxQykgLy8gKFNQSTApIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TUEkwX1REUiAgICAgICAgICAgICgweEZGRkUwMDBDKSAvLyAoU1BJMCkgVHJhbnNtaXQgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9SRFIgICAgICAgICAgICAoMHhGRkZFMDAwOCkgLy8gKFNQSTApIFJlY2VpdmUgRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1BJMF9DU1IgICAgICAgICAgICAoMHhGRkZFMDAzMCkgLy8gKFNQSTApIENoaXAgU2VsZWN0IFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBQRENfVVMxIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1VTMV9STkNSICAgICAgICAgICAgKDB4RkZGQzQxMTQpIC8vIChQRENfVVMxKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1BUQ1IgICAgICAgICAgICAoMHhGRkZDNDEyMCkgLy8gKFBEQ19VUzEpIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfVENSICAgICAgICAgICAgICgweEZGRkM0MTBDKSAvLyAoUERDX1VTMSkgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1BUU1IgICAgICAgICAgICAoMHhGRkZDNDEyNCkgLy8gKFBEQ19VUzEpIFBEQyBUcmFuc2ZlciBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9UTlBSICAgICAgICAgICAgKDB4RkZGQzQxMTgpIC8vIChQRENfVVMxKSBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9SQ1IgICAgICAgICAgICAgKDB4RkZGQzQxMDQpIC8vIChQRENfVVMxKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9STlBSICAgICAgICAgICAgKDB4RkZGQzQxMTApIC8vIChQRENfVVMxKSBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1JQUiAgICAgICAgICAgICAoMHhGRkZDNDEwMCkgLy8gKFBEQ19VUzEpIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1ROQ1IgICAgICAgICAgICAoMHhGRkZDNDExQykgLy8gKFBEQ19VUzEpIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX1RQUiAgICAgICAgICAgICAoMHhGRkZDNDEwOCkgLy8gKFBEQ19VUzEpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFVTMSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19VUzFfSUYgICAgICAgICAgICAgICgweEZGRkM0MDRDKSAvLyAoVVMxKSBJUkRBX0ZJTFRFUiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX05FUiAgICAgICAgICAgICAoMHhGRkZDNDA0NCkgLy8gKFVTMSkgTmIgRXJyb3JzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfUlRPUiAgICAgICAgICAgICgweEZGRkM0MDI0KSAvLyAoVVMxKSBSZWNlaXZlciBUaW1lLW91dCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX0NTUiAgICAgICAgICAgICAoMHhGRkZDNDAxNCkgLy8gKFVTMSkgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9JRFIgICAgICAgICAgICAgKDB4RkZGQzQwMEMpIC8vIChVUzEpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfSUVSICAgICAgICAgICAgICgweEZGRkM0MDA4KSAvLyAoVVMxKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfVEhSICAgICAgICAgICAgICgweEZGRkM0MDFDKSAvLyAoVVMxKSBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfVFRHUiAgICAgICAgICAgICgweEZGRkM0MDI4KSAvLyAoVVMxKSBUcmFuc21pdHRlciBUaW1lLWd1YXJkIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfUkhSICAgICAgICAgICAgICgweEZGRkM0MDE4KSAvLyAoVVMxKSBSZWNlaXZlciBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfQlJHUiAgICAgICAgICAgICgweEZGRkM0MDIwKSAvLyAoVVMxKSBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzFfSU1SICAgICAgICAgICAgICgweEZGRkM0MDEwKSAvLyAoVVMxKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMxX0ZJREkgICAgICAgICAgICAoMHhGRkZDNDA0MCkgLy8gKFVTMSkgRklfRElfUmF0aW8gUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9DUiAgICAgICAgICAgICAgKDB4RkZGQzQwMDApIC8vIChVUzEpIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMV9NUiAgICAgICAgICAgICAgKDB4RkZGQzQwMDQpIC8vIChVUzEpIE1vZGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19VUzAgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVVMwX1ROUFIgICAgICAgICAgICAoMHhGRkZDMDExOCkgLy8gKFBEQ19VUzApIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1JOUFIgICAgICAgICAgICAoMHhGRkZDMDExMCkgLy8gKFBEQ19VUzApIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfVENSICAgICAgICAgICAgICgweEZGRkMwMTBDKSAvLyAoUERDX1VTMCkgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1BUQ1IgICAgICAgICAgICAoMHhGRkZDMDEyMCkgLy8gKFBEQ19VUzApIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfUFRTUiAgICAgICAgICAgICgweEZGRkMwMTI0KSAvLyAoUERDX1VTMCkgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1ROQ1IgICAgICAgICAgICAoMHhGRkZDMDExQykgLy8gKFBEQ19VUzApIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX1RQUiAgICAgICAgICAgICAoMHhGRkZDMDEwOCkgLy8gKFBEQ19VUzApIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9SQ1IgICAgICAgICAgICAgKDB4RkZGQzAxMDQpIC8vIChQRENfVVMwKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9SUFIgICAgICAgICAgICAgKDB4RkZGQzAxMDApIC8vIChQRENfVVMwKSBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9STkNSICAgICAgICAgICAgKDB4RkZGQzAxMTQpIC8vIChQRENfVVMwKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVVMwIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1VTMF9CUkdSICAgICAgICAgICAgKDB4RkZGQzAwMjApIC8vIChVUzApIEJhdWQgUmF0ZSBHZW5lcmF0b3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9ORVIgICAgICAgICAgICAgKDB4RkZGQzAwNDQpIC8vIChVUzApIE5iIEVycm9ycyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX0NSICAgICAgICAgICAgICAoMHhGRkZDMDAwMCkgLy8gKFVTMCkgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX0lNUiAgICAgICAgICAgICAoMHhGRkZDMDAxMCkgLy8gKFVTMCkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9GSURJICAgICAgICAgICAgKDB4RkZGQzAwNDApIC8vIChVUzApIEZJX0RJX1JhdGlvIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfVFRHUiAgICAgICAgICAgICgweEZGRkMwMDI4KSAvLyAoVVMwKSBUcmFuc21pdHRlciBUaW1lLWd1YXJkIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfTVIgICAgICAgICAgICAgICgweEZGRkMwMDA0KSAvLyAoVVMwKSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfUlRPUiAgICAgICAgICAgICgweEZGRkMwMDI0KSAvLyAoVVMwKSBSZWNlaXZlciBUaW1lLW91dCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX0NTUiAgICAgICAgICAgICAoMHhGRkZDMDAxNCkgLy8gKFVTMCkgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9SSFIgICAgICAgICAgICAgKDB4RkZGQzAwMTgpIC8vIChVUzApIFJlY2VpdmVyIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VTMF9JRFIgICAgICAgICAgICAgKDB4RkZGQzAwMEMpIC8vIChVUzApIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfVEhSICAgICAgICAgICAgICgweEZGRkMwMDFDKSAvLyAoVVMwKSBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VUzBfSUYgICAgICAgICAgICAgICgweEZGRkMwMDRDKSAvLyAoVVMwKSBJUkRBX0ZJTFRFUiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVVMwX0lFUiAgICAgICAgICAgICAoMHhGRkZDMDAwOCkgLy8gKFVTMCkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX1NTQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19TU0NfVE5DUiAgICAgICAgICAgICgweEZGRkQ0MTFDKSAvLyAoUERDX1NTQykgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUlBSICAgICAgICAgICAgICgweEZGRkQ0MTAwKSAvLyAoUERDX1NTQykgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUk5DUiAgICAgICAgICAgICgweEZGRkQ0MTE0KSAvLyAoUERDX1NTQykgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19UUFIgICAgICAgICAgICAgKDB4RkZGRDQxMDgpIC8vIChQRENfU1NDKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUFRDUiAgICAgICAgICAgICgweEZGRkQ0MTIwKSAvLyAoUERDX1NTQykgUERDIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19UQ1IgICAgICAgICAgICAgKDB4RkZGRDQxMEMpIC8vIChQRENfU1NDKSBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUkNSICAgICAgICAgICAgICgweEZGRkQ0MTA0KSAvLyAoUERDX1NTQykgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUk5QUiAgICAgICAgICAgICgweEZGRkQ0MTEwKSAvLyAoUERDX1NTQykgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19UTlBSICAgICAgICAgICAgKDB4RkZGRDQxMTgpIC8vIChQRENfU1NDKSBUcmFuc21pdCBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19QVFNSICAgICAgICAgICAgKDB4RkZGRDQxMjQpIC8vIChQRENfU1NDKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBTU0MgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfU1NDX1JIUiAgICAgICAgICAgICAoMHhGRkZENDAyMCkgLy8gKFNTQykgUmVjZWl2ZSBIb2xkaW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfUlNIUiAgICAgICAgICAgICgweEZGRkQ0MDMwKSAvLyAoU1NDKSBSZWNlaXZlIFN5bmMgSG9sZGluZyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RGTVIgICAgICAgICAgICAoMHhGRkZENDAxQykgLy8gKFNTQykgVHJhbnNtaXQgRnJhbWUgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX0lEUiAgICAgICAgICAgICAoMHhGRkZENDA0OCkgLy8gKFNTQykgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19USFIgICAgICAgICAgICAgKDB4RkZGRDQwMjQpIC8vIChTU0MpIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19SQ01SICAgICAgICAgICAgKDB4RkZGRDQwMTApIC8vIChTU0MpIFJlY2VpdmUgQ2xvY2sgTW9kZVJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfSUVSICAgICAgICAgICAgICgweEZGRkQ0MDQ0KSAvLyAoU1NDKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19TU0NfVFNIUiAgICAgICAgICAgICgweEZGRkQ0MDM0KSAvLyAoU1NDKSBUcmFuc21pdCBTeW5jIEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19TUiAgICAgICAgICAgICAgKDB4RkZGRDQwNDApIC8vIChTU0MpIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX0NNUiAgICAgICAgICAgICAoMHhGRkZENDAwNCkgLy8gKFNTQykgQ2xvY2sgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX1RDTVIgICAgICAgICAgICAoMHhGRkZENDAxOCkgLy8gKFNTQykgVHJhbnNtaXQgQ2xvY2sgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX0NSICAgICAgICAgICAgICAoMHhGRkZENDAwMCkgLy8gKFNTQykgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfU1NDX0lNUiAgICAgICAgICAgICAoMHhGRkZENDA0QykgLy8gKFNTQykgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1NTQ19SRk1SICAgICAgICAgICAgKDB4RkZGRDQwMTQpIC8vIChTU0MpIFJlY2VpdmUgRnJhbWUgTW9kZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVFdJIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1RXSV9JRVIgICAgICAgICAgICAgKDB4RkZGQjgwMjQpIC8vIChUV0kpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9DUiAgICAgICAgICAgICAgKDB4RkZGQjgwMDApIC8vIChUV0kpIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9TUiAgICAgICAgICAgICAgKDB4RkZGQjgwMjApIC8vIChUV0kpIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX0lNUiAgICAgICAgICAgICAoMHhGRkZCODAyQykgLy8gKFRXSSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9USFIgICAgICAgICAgICAgKDB4RkZGQjgwMzQpIC8vIChUV0kpIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RXSV9JRFIgICAgICAgICAgICAgKDB4RkZGQjgwMjgpIC8vIChUV0kpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UV0lfSUFEUiAgICAgICAgICAgICgweEZGRkI4MDBDKSAvLyAoVFdJKSBJbnRlcm5hbCBBZGRyZXNzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UV0lfTU1SICAgICAgICAgICAgICgweEZGRkI4MDA0KSAvLyAoVFdJKSBNYXN0ZXIgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVFdJX0NXR1IgICAgICAgICAgICAoMHhGRkZCODAxMCkgLy8gKFRXSSkgQ2xvY2sgV2F2ZWZvcm0gR2VuZXJhdG9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UV0lfUkhSICAgICAgICAgICAgICgweEZGRkI4MDMwKSAvLyAoVFdJKSBSZWNlaXZlIEhvbGRpbmcgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBXTUNfQ0gzIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gzX0NVUERSICAgICAgKDB4RkZGQ0MyNzApIC8vIChQV01DX0NIMykgQ2hhbm5lbCBVcGRhdGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gzX1Jlc2VydmVkICAgKDB4RkZGQ0MyNzQpIC8vIChQV01DX0NIMykgUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gzX0NQUkRSICAgICAgKDB4RkZGQ0MyNjgpIC8vIChQV01DX0NIMykgQ2hhbm5lbCBQZXJpb2QgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gzX0NEVFlSICAgICAgKDB4RkZGQ0MyNjQpIC8vIChQV01DX0NIMykgQ2hhbm5lbCBEdXR5IEN5Y2xlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIM19DQ05UUiAgICAgICgweEZGRkNDMjZDKSAvLyAoUFdNQ19DSDMpIENoYW5uZWwgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDNfQ01SICAgICAgICAoMHhGRkZDQzI2MCkgLy8gKFBXTUNfQ0gzKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBXTUNfQ0gyIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gyX1Jlc2VydmVkICAgKDB4RkZGQ0MyNTQpIC8vIChQV01DX0NIMikgUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gyX0NNUiAgICAgICAgKDB4RkZGQ0MyNDApIC8vIChQV01DX0NIMikgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMl9DQ05UUiAgICAgICgweEZGRkNDMjRDKSAvLyAoUFdNQ19DSDIpIENoYW5uZWwgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDJfQ1BSRFIgICAgICAoMHhGRkZDQzI0OCkgLy8gKFBXTUNfQ0gyKSBDaGFubmVsIFBlcmlvZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDJfQ1VQRFIgICAgICAoMHhGRkZDQzI1MCkgLy8gKFBXTUNfQ0gyKSBDaGFubmVsIFVwZGF0ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDJfQ0RUWVIgICAgICAoMHhGRkZDQzI0NCkgLy8gKFBXTUNfQ0gyKSBDaGFubmVsIER1dHkgQ3ljbGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBXTUNfQ0gxIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gxX1Jlc2VydmVkICAgKDB4RkZGQ0MyMzQpIC8vIChQV01DX0NIMSkgUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gxX0NVUERSICAgICAgKDB4RkZGQ0MyMzApIC8vIChQV01DX0NIMSkgQ2hhbm5lbCBVcGRhdGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gxX0NQUkRSICAgICAgKDB4RkZGQ0MyMjgpIC8vIChQV01DX0NIMSkgQ2hhbm5lbCBQZXJpb2QgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gxX0NDTlRSICAgICAgKDB4RkZGQ0MyMkMpIC8vIChQV01DX0NIMSkgQ2hhbm5lbCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMV9DRFRZUiAgICAgICgweEZGRkNDMjI0KSAvLyAoUFdNQ19DSDEpIENoYW5uZWwgRHV0eSBDeWNsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDFfQ01SICAgICAgICAoMHhGRkZDQzIyMCkgLy8gKFBXTUNfQ0gxKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBXTUNfQ0gwIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gwX1Jlc2VydmVkICAgKDB4RkZGQ0MyMTQpIC8vIChQV01DX0NIMCkgUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gwX0NQUkRSICAgICAgKDB4RkZGQ0MyMDgpIC8vIChQV01DX0NIMCkgQ2hhbm5lbCBQZXJpb2QgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfQ0gwX0NEVFlSICAgICAgKDB4RkZGQ0MyMDQpIC8vIChQV01DX0NIMCkgQ2hhbm5lbCBEdXR5IEN5Y2xlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19QV01DX0NIMF9DTVIgICAgICAgICgweEZGRkNDMjAwKSAvLyAoUFdNQ19DSDApIENoYW5uZWwgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDBfQ1VQRFIgICAgICAoMHhGRkZDQzIxMCkgLy8gKFBXTUNfQ0gwKSBDaGFubmVsIFVwZGF0ZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19DSDBfQ0NOVFIgICAgICAoMHhGRkZDQzIwQykgLy8gKFBXTUNfQ0gwKSBDaGFubmVsIENvdW50ZXIgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBXTUMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19JRFIgICAgICAgICAgICAoMHhGRkZDQzAxNCkgLy8gKFBXTUMpIFBXTUMgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfRElTICAgICAgICAgICAgKDB4RkZGQ0MwMDgpIC8vIChQV01DKSBQV01DIERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfSUVSICAgICAgICAgICAgKDB4RkZGQ0MwMTApIC8vIChQV01DKSBQV01DIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfVlIgICAgICAgICAgICAgKDB4RkZGQ0MwRkMpIC8vIChQV01DKSBQV01DIFZlcnNpb24gUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfSVNSICAgICAgICAgICAgKDB4RkZGQ0MwMUMpIC8vIChQV01DKSBQV01DIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfU1IgICAgICAgICAgICAgKDB4RkZGQ0MwMEMpIC8vIChQV01DKSBQV01DIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfUFdNQ19JTVIgICAgICAgICAgICAoMHhGRkZDQzAxOCkgLy8gKFBXTUMpIFBXTUMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfTVIgICAgICAgICAgICAgKDB4RkZGQ0MwMDApIC8vIChQV01DKSBQV01DIE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1BXTUNfRU5BICAgICAgICAgICAgKDB4RkZGQ0MwMDQpIC8vIChQV01DKSBQV01DIEVuYWJsZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVURQIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1VEUF9JTVIgICAgICAgICAgICAgKDB4RkZGQjAwMTgpIC8vIChVRFApIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfRkFERFIgICAgICAgICAgICgweEZGRkIwMDA4KSAvLyAoVURQKSBGdW5jdGlvbiBBZGRyZXNzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfTlVNICAgICAgICAgICAgICgweEZGRkIwMDAwKSAvLyAoVURQKSBGcmFtZSBOdW1iZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1VEUF9GRFIgICAgICAgICAgICAgKDB4RkZGQjAwNTApIC8vIChVRFApIEVuZHBvaW50IEZJRk8gRGF0YSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVURQX0lTUiAgICAgICAgICAgICAoMHhGRkZCMDAxQykgLy8gKFVEUCkgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVURQX0NTUiAgICAgICAgICAgICAoMHhGRkZCMDAzMCkgLy8gKFVEUCkgRW5kcG9pbnQgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfSURSICAgICAgICAgICAgICgweEZGRkIwMDE0KSAvLyAoVURQKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVURQX0lDUiAgICAgICAgICAgICAoMHhGRkZCMDAyMCkgLy8gKFVEUCkgSW50ZXJydXB0IENsZWFyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfUlNURVAgICAgICAgICAgICgweEZGRkIwMDI4KSAvLyAoVURQKSBSZXNldCBFbmRwb2ludCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVURQX1RYVkMgICAgICAgICAgICAoMHhGRkZCMDA3NCkgLy8gKFVEUCkgVHJhbnNjZWl2ZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVURQX0dMQlNUQVRFICAgICAgICAoMHhGRkZCMDAwNCkgLy8gKFVEUCkgR2xvYmFsIFN0YXRlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19VRFBfSUVSICAgICAgICAgICAgICgweEZGRkIwMDEwKSAvLyAoVURQKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBUQzAgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVEMwX1NSICAgICAgICAgICAgICAoMHhGRkZBMDAyMCkgLy8gKFRDMCkgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzBfUkMgICAgICAgICAgICAgICgweEZGRkEwMDFDKSAvLyAoVEMwKSBSZWdpc3RlciBDDQorI2RlZmluZSBBVDkxQ19UQzBfUkIgICAgICAgICAgICAgICgweEZGRkEwMDE4KSAvLyAoVEMwKSBSZWdpc3RlciBCDQorI2RlZmluZSBBVDkxQ19UQzBfQ0NSICAgICAgICAgICAgICgweEZGRkEwMDAwKSAvLyAoVEMwKSBDaGFubmVsIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMF9DTVIgICAgICAgICAgICAgKDB4RkZGQTAwMDQpIC8vIChUQzApIENoYW5uZWwgTW9kZSBSZWdpc3RlciAoQ2FwdHVyZSBNb2RlIC8gV2F2ZWZvcm0gTW9kZSkNCisjZGVmaW5lIEFUOTFDX1RDMF9JRVIgICAgICAgICAgICAgKDB4RkZGQTAwMjQpIC8vIChUQzApIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMF9SQSAgICAgICAgICAgICAgKDB4RkZGQTAwMTQpIC8vIChUQzApIFJlZ2lzdGVyIEENCisjZGVmaW5lIEFUOTFDX1RDMF9JRFIgICAgICAgICAgICAgKDB4RkZGQTAwMjgpIC8vIChUQzApIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzBfQ1YgICAgICAgICAgICAgICgweEZGRkEwMDEwKSAvLyAoVEMwKSBDb3VudGVyIFZhbHVlDQorI2RlZmluZSBBVDkxQ19UQzBfSU1SICAgICAgICAgICAgICgweEZGRkEwMDJDKSAvLyAoVEMwKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgVEMxIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1RDMV9SQiAgICAgICAgICAgICAgKDB4RkZGQTAwNTgpIC8vIChUQzEpIFJlZ2lzdGVyIEINCisjZGVmaW5lIEFUOTFDX1RDMV9DQ1IgICAgICAgICAgICAgKDB4RkZGQTAwNDApIC8vIChUQzEpIENoYW5uZWwgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMxX0lFUiAgICAgICAgICAgICAoMHhGRkZBMDA2NCkgLy8gKFRDMSkgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMxX0lEUiAgICAgICAgICAgICAoMHhGRkZBMDA2OCkgLy8gKFRDMSkgSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMV9TUiAgICAgICAgICAgICAgKDB4RkZGQTAwNjApIC8vIChUQzEpIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMxX0NNUiAgICAgICAgICAgICAoMHhGRkZBMDA0NCkgLy8gKFRDMSkgQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyIChDYXB0dXJlIE1vZGUgLyBXYXZlZm9ybSBNb2RlKQ0KKyNkZWZpbmUgQVQ5MUNfVEMxX1JBICAgICAgICAgICAgICAoMHhGRkZBMDA1NCkgLy8gKFRDMSkgUmVnaXN0ZXIgQQ0KKyNkZWZpbmUgQVQ5MUNfVEMxX1JDICAgICAgICAgICAgICAoMHhGRkZBMDA1QykgLy8gKFRDMSkgUmVnaXN0ZXIgQw0KKyNkZWZpbmUgQVQ5MUNfVEMxX0lNUiAgICAgICAgICAgICAoMHhGRkZBMDA2QykgLy8gKFRDMSkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMV9DViAgICAgICAgICAgICAgKDB4RkZGQTAwNTApIC8vIChUQzEpIENvdW50ZXIgVmFsdWUNCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFRDMiBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19UQzJfQ01SICAgICAgICAgICAgICgweEZGRkEwMDg0KSAvLyAoVEMyKSBDaGFubmVsIE1vZGUgUmVnaXN0ZXIgKENhcHR1cmUgTW9kZSAvIFdhdmVmb3JtIE1vZGUpDQorI2RlZmluZSBBVDkxQ19UQzJfQ0NSICAgICAgICAgICAgICgweEZGRkEwMDgwKSAvLyAoVEMyKSBDaGFubmVsIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RDMl9DViAgICAgICAgICAgICAgKDB4RkZGQTAwOTApIC8vIChUQzIpIENvdW50ZXIgVmFsdWUNCisjZGVmaW5lIEFUOTFDX1RDMl9SQSAgICAgICAgICAgICAgKDB4RkZGQTAwOTQpIC8vIChUQzIpIFJlZ2lzdGVyIEENCisjZGVmaW5lIEFUOTFDX1RDMl9SQiAgICAgICAgICAgICAgKDB4RkZGQTAwOTgpIC8vIChUQzIpIFJlZ2lzdGVyIEINCisjZGVmaW5lIEFUOTFDX1RDMl9JRFIgICAgICAgICAgICAgKDB4RkZGQTAwQTgpIC8vIChUQzIpIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UQzJfSU1SICAgICAgICAgICAgICgweEZGRkEwMEFDKSAvLyAoVEMyKSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMyX1JDICAgICAgICAgICAgICAoMHhGRkZBMDA5QykgLy8gKFRDMikgUmVnaXN0ZXIgQw0KKyNkZWZpbmUgQVQ5MUNfVEMyX0lFUiAgICAgICAgICAgICAoMHhGRkZBMDBBNCkgLy8gKFRDMikgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVEMyX1NSICAgICAgICAgICAgICAoMHhGRkZBMDBBMCkgLy8gKFRDMikgU3RhdHVzIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBUQ0IgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfVENCX0JNUiAgICAgICAgICAgICAoMHhGRkZBMDBDNCkgLy8gKFRDQikgVEMgQmxvY2sgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVENCX0JDUiAgICAgICAgICAgICAoMHhGRkZBMDBDMCkgLy8gKFRDQikgVEMgQmxvY2sgQ29udHJvbCBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CMCBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19DQU5fTUIwX01ETCAgICAgICAgICgweEZGRkQwMjE0KSAvLyAoQ0FOX01CMCkgTWFpbEJveCBEYXRhIExvdyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMF9NQU0gICAgICAgICAoMHhGRkZEMDIwNCkgLy8gKENBTl9NQjApIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIwX01DUiAgICAgICAgICgweEZGRkQwMjFDKSAvLyAoQ0FOX01CMCkgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIwX01JRCAgICAgICAgICgweEZGRkQwMjA4KSAvLyAoQ0FOX01CMCkgTWFpbEJveCBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMF9NU1IgICAgICAgICAoMHhGRkZEMDIxMCkgLy8gKENBTl9NQjApIE1haWxCb3ggU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIwX01GSUQgICAgICAgICgweEZGRkQwMjBDKSAvLyAoQ0FOX01CMCkgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjBfTURIICAgICAgICAgKDB4RkZGRDAyMTgpIC8vIChDQU5fTUIwKSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMF9NTVIgICAgICAgICAoMHhGRkZEMDIwMCkgLy8gKENBTl9NQjApIE1haWxCb3ggTW9kZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CMSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxX01ETCAgICAgICAgICgweEZGRkQwMjM0KSAvLyAoQ0FOX01CMSkgTWFpbEJveCBEYXRhIExvdyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMV9NSUQgICAgICAgICAoMHhGRkZEMDIyOCkgLy8gKENBTl9NQjEpIE1haWxCb3ggSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjFfTU1SICAgICAgICAgKDB4RkZGRDAyMjApIC8vIChDQU5fTUIxKSBNYWlsQm94IE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjFfTVNSICAgICAgICAgKDB4RkZGRDAyMzApIC8vIChDQU5fTUIxKSBNYWlsQm94IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMV9NQU0gICAgICAgICAoMHhGRkZEMDIyNCkgLy8gKENBTl9NQjEpIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIxX01ESCAgICAgICAgICgweEZGRkQwMjM4KSAvLyAoQ0FOX01CMSkgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjFfTUNSICAgICAgICAgKDB4RkZGRDAyM0MpIC8vIChDQU5fTUIxKSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjFfTUZJRCAgICAgICAgKDB4RkZGRDAyMkMpIC8vIChDQU5fTUIxKSBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CMiBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19DQU5fTUIyX01DUiAgICAgICAgICgweEZGRkQwMjVDKSAvLyAoQ0FOX01CMikgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIyX01ESCAgICAgICAgICgweEZGRkQwMjU4KSAvLyAoQ0FOX01CMikgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjJfTUlEICAgICAgICAgKDB4RkZGRDAyNDgpIC8vIChDQU5fTUIyKSBNYWlsQm94IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIyX01ETCAgICAgICAgICgweEZGRkQwMjU0KSAvLyAoQ0FOX01CMikgTWFpbEJveCBEYXRhIExvdyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NTVIgICAgICAgICAoMHhGRkZEMDI0MCkgLy8gKENBTl9NQjIpIE1haWxCb3ggTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CMl9NQU0gICAgICAgICAoMHhGRkZEMDI0NCkgLy8gKENBTl9NQjIpIE1haWxCb3ggQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUIyX01GSUQgICAgICAgICgweEZGRkQwMjRDKSAvLyAoQ0FOX01CMikgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjJfTVNSICAgICAgICAgKDB4RkZGRDAyNTApIC8vIChDQU5fTUIyKSBNYWlsQm94IFN0YXR1cyBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CMyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19DQU5fTUIzX01GSUQgICAgICAgICgweEZGRkQwMjZDKSAvLyAoQ0FOX01CMykgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjNfTUFNICAgICAgICAgKDB4RkZGRDAyNjQpIC8vIChDQU5fTUIzKSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CM19NSUQgICAgICAgICAoMHhGRkZEMDI2OCkgLy8gKENBTl9NQjMpIE1haWxCb3ggSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjNfTUNSICAgICAgICAgKDB4RkZGRDAyN0MpIC8vIChDQU5fTUIzKSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjNfTU1SICAgICAgICAgKDB4RkZGRDAyNjApIC8vIChDQU5fTUIzKSBNYWlsQm94IE1vZGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjNfTVNSICAgICAgICAgKDB4RkZGRDAyNzApIC8vIChDQU5fTUIzKSBNYWlsQm94IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CM19NREwgICAgICAgICAoMHhGRkZEMDI3NCkgLy8gKENBTl9NQjMpIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjNfTURIICAgICAgICAgKDB4RkZGRDAyNzgpIC8vIChDQU5fTUIzKSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CNCBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19DQU5fTUI0X01JRCAgICAgICAgICgweEZGRkQwMjg4KSAvLyAoQ0FOX01CNCkgTWFpbEJveCBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNF9NTVIgICAgICAgICAoMHhGRkZEMDI4MCkgLy8gKENBTl9NQjQpIE1haWxCb3ggTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNF9NREggICAgICAgICAoMHhGRkZEMDI5OCkgLy8gKENBTl9NQjQpIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI0X01GSUQgICAgICAgICgweEZGRkQwMjhDKSAvLyAoQ0FOX01CNCkgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjRfTVNSICAgICAgICAgKDB4RkZGRDAyOTApIC8vIChDQU5fTUI0KSBNYWlsQm94IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNF9NQ1IgICAgICAgICAoMHhGRkZEMDI5QykgLy8gKENBTl9NQjQpIE1haWxCb3ggQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNF9NREwgICAgICAgICAoMHhGRkZEMDI5NCkgLy8gKENBTl9NQjQpIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjRfTUFNICAgICAgICAgKDB4RkZGRDAyODQpIC8vIChDQU5fTUI0KSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CNSBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19DQU5fTUI1X01TUiAgICAgICAgICgweEZGRkQwMkIwKSAvLyAoQ0FOX01CNSkgTWFpbEJveCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjVfTUNSICAgICAgICAgKDB4RkZGRDAyQkMpIC8vIChDQU5fTUI1KSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjVfTUZJRCAgICAgICAgKDB4RkZGRDAyQUMpIC8vIChDQU5fTUI1KSBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNV9NREggICAgICAgICAoMHhGRkZEMDJCOCkgLy8gKENBTl9NQjUpIE1haWxCb3ggRGF0YSBIaWdoIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI1X01JRCAgICAgICAgICgweEZGRkQwMkE4KSAvLyAoQ0FOX01CNSkgTWFpbEJveCBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNV9NTVIgICAgICAgICAoMHhGRkZEMDJBMCkgLy8gKENBTl9NQjUpIE1haWxCb3ggTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNV9NREwgICAgICAgICAoMHhGRkZEMDJCNCkgLy8gKENBTl9NQjUpIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjVfTUFNICAgICAgICAgKDB4RkZGRDAyQTQpIC8vIChDQU5fTUI1KSBNYWlsQm94IEFjY2VwdGFuY2UgTWFzayBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CNiBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19DQU5fTUI2X01GSUQgICAgICAgICgweEZGRkQwMkNDKSAvLyAoQ0FOX01CNikgTWFpbEJveCBGYW1pbHkgSUQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjZfTUlEICAgICAgICAgKDB4RkZGRDAyQzgpIC8vIChDQU5fTUI2KSBNYWlsQm94IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI2X01BTSAgICAgICAgICgweEZGRkQwMkM0KSAvLyAoQ0FOX01CNikgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjZfTVNSICAgICAgICAgKDB4RkZGRDAyRDApIC8vIChDQU5fTUI2KSBNYWlsQm94IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNl9NREwgICAgICAgICAoMHhGRkZEMDJENCkgLy8gKENBTl9NQjYpIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjZfTUNSICAgICAgICAgKDB4RkZGRDAyREMpIC8vIChDQU5fTUI2KSBNYWlsQm94IENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjZfTURIICAgICAgICAgKDB4RkZGRDAyRDgpIC8vIChDQU5fTUI2KSBNYWlsQm94IERhdGEgSGlnaCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CNl9NTVIgICAgICAgICAoMHhGRkZEMDJDMCkgLy8gKENBTl9NQjYpIE1haWxCb3ggTW9kZSBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOX01CNyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19DQU5fTUI3X01DUiAgICAgICAgICgweEZGRkQwMkZDKSAvLyAoQ0FOX01CNykgTWFpbEJveCBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI3X01ESCAgICAgICAgICgweEZGRkQwMkY4KSAvLyAoQ0FOX01CNykgTWFpbEJveCBEYXRhIEhpZ2ggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjdfTUZJRCAgICAgICAgKDB4RkZGRDAyRUMpIC8vIChDQU5fTUI3KSBNYWlsQm94IEZhbWlseSBJRCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX01CN19NREwgICAgICAgICAoMHhGRkZEMDJGNCkgLy8gKENBTl9NQjcpIE1haWxCb3ggRGF0YSBMb3cgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjdfTUlEICAgICAgICAgKDB4RkZGRDAyRTgpIC8vIChDQU5fTUI3KSBNYWlsQm94IElEIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI3X01NUiAgICAgICAgICgweEZGRkQwMkUwKSAvLyAoQ0FOX01CNykgTWFpbEJveCBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTUI3X01BTSAgICAgICAgICgweEZGRkQwMkU0KSAvLyAoQ0FOX01CNykgTWFpbEJveCBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9NQjdfTVNSICAgICAgICAgKDB4RkZGRDAyRjApIC8vIChDQU5fTUI3KSBNYWlsQm94IFN0YXR1cyBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQ0FOIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0NBTl9UQ1IgICAgICAgICAgICAgKDB4RkZGRDAwMjQpIC8vIChDQU4pIFRyYW5zZmVyIENvbW1hbmQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9JTVIgICAgICAgICAgICAgKDB4RkZGRDAwMEMpIC8vIChDQU4pIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fSUVSICAgICAgICAgICAgICgweEZGRkQwMDA0KSAvLyAoQ0FOKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fRUNSICAgICAgICAgICAgICgweEZGRkQwMDIwKSAvLyAoQ0FOKSBFcnJvciBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fVElNRVNUUCAgICAgICAgICgweEZGRkQwMDFDKSAvLyAoQ0FOKSBUaW1lIFN0YW1wIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fTVIgICAgICAgICAgICAgICgweEZGRkQwMDAwKSAvLyAoQ0FOKSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19DQU5fSURSICAgICAgICAgICAgICgweEZGRkQwMDA4KSAvLyAoQ0FOKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0FDUiAgICAgICAgICAgICAoMHhGRkZEMDAyOCkgLy8gKENBTikgQWJvcnQgQ29tbWFuZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX1RJTSAgICAgICAgICAgICAoMHhGRkZEMDAxOCkgLy8gKENBTikgVGltZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9TUiAgICAgICAgICAgICAgKDB4RkZGRDAwMTApIC8vIChDQU4pIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQ0FOX0JSICAgICAgICAgICAgICAoMHhGRkZEMDAxNCkgLy8gKENBTikgQmF1ZHJhdGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0NBTl9WUiAgICAgICAgICAgICAgKDB4RkZGRDAwRkMpIC8vIChDQU4pIFZlcnNpb24gUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIEVNQUMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19JU1IgICAgICAgICAgICAoMHhGRkZEQzAyNCkgLy8gKEVNQUMpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfU0E0SCAgICAgICAgICAgKDB4RkZGREMwQjQpIC8vIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDQgVG9wLCBMYXN0IDIgYnl0ZXMNCisjZGVmaW5lIEFUOTFDX0VNQUNfU0ExTCAgICAgICAgICAgKDB4RkZGREMwOTgpIC8vIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDEgQm90dG9tLCBGaXJzdCA0IGJ5dGVzDQorI2RlZmluZSBBVDkxQ19FTUFDX0VMRSAgICAgICAgICAgICgweEZGRkRDMDc4KSAvLyAoRU1BQykgRXhjZXNzaXZlIExlbmd0aCBFcnJvcnMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfTENPTCAgICAgICAgICAgKDB4RkZGREMwNUMpIC8vIChFTUFDKSBMYXRlIENvbGxpc2lvbiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19STEUgICAgICAgICAgICAoMHhGRkZEQzA4OCkgLy8gKEVNQUMpIFJlY2VpdmUgTGVuZ3RoIEZpZWxkIE1pc21hdGNoIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1dPTCAgICAgICAgICAgICgweEZGRkRDMEM0KSAvLyAoRU1BQykgV2FrZSBPbiBMQU4gUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfRFRGICAgICAgICAgICAgKDB4RkZGREMwNTgpIC8vIChFTUFDKSBEZWZlcnJlZCBUcmFuc21pc3Npb24gRnJhbWUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfVFVORCAgICAgICAgICAgKDB4RkZGREMwNjQpIC8vIChFTUFDKSBUcmFuc21pdCBVbmRlcnJ1biBFcnJvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19OQ1IgICAgICAgICAgICAoMHhGRkZEQzAwMCkgLy8gKEVNQUMpIE5ldHdvcmsgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TQTRMICAgICAgICAgICAoMHhGRkZEQzBCMCkgLy8gKEVNQUMpIFNwZWNpZmljIEFkZHJlc3MgNCBCb3R0b20sIEZpcnN0IDQgYnl0ZXMNCisjZGVmaW5lIEFUOTFDX0VNQUNfUlNSICAgICAgICAgICAgKDB4RkZGREMwMjApIC8vIChFTUFDKSBSZWNlaXZlIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19TQTNMICAgICAgICAgICAoMHhGRkZEQzBBOCkgLy8gKEVNQUMpIFNwZWNpZmljIEFkZHJlc3MgMyBCb3R0b20sIEZpcnN0IDQgYnl0ZXMNCisjZGVmaW5lIEFUOTFDX0VNQUNfVFNSICAgICAgICAgICAgKDB4RkZGREMwMTQpIC8vIChFTUFDKSBUcmFuc21pdCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfSURSICAgICAgICAgICAgKDB4RkZGREMwMkMpIC8vIChFTUFDKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SU0UgICAgICAgICAgICAoMHhGRkZEQzA3NCkgLy8gKEVNQUMpIFJlY2VpdmUgU3ltYm9sIEVycm9ycyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19FQ09MICAgICAgICAgICAoMHhGRkZEQzA2MCkgLy8gKEVNQUMpIEV4Y2Vzc2l2ZSBDb2xsaXNpb24gUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfVElEICAgICAgICAgICAgKDB4RkZGREMwQjgpIC8vIChFTUFDKSBUeXBlIElEIENoZWNraW5nIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX0hSQiAgICAgICAgICAgICgweEZGRkRDMDkwKSAvLyAoRU1BQykgSGFzaCBBZGRyZXNzIEJvdHRvbVszMTowXQ0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19UQlFQICAgICAgICAgICAoMHhGRkZEQzAxQykgLy8gKEVNQUMpIFRyYW5zbWl0IEJ1ZmZlciBRdWV1ZSBQb2ludGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1VTUklPICAgICAgICAgICgweEZGRkRDMEMwKSAvLyAoRU1BQykgVVNFUiBJbnB1dC9PdXRwdXQgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfUFRSICAgICAgICAgICAgKDB4RkZGREMwMzgpIC8vIChFTUFDKSBQYXVzZSBUaW1lIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1NBMkggICAgICAgICAgICgweEZGRkRDMEE0KSAvLyAoRU1BQykgU3BlY2lmaWMgQWRkcmVzcyAyIFRvcCwgTGFzdCAyIGJ5dGVzDQorI2RlZmluZSBBVDkxQ19FTUFDX1JPViAgICAgICAgICAgICgweEZGRkRDMDcwKSAvLyAoRU1BQykgUmVjZWl2ZSBPdmVycnVuIEVycm9ycyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19BTEUgICAgICAgICAgICAoMHhGRkZEQzA1NCkgLy8gKEVNQUMpIEFsaWdubWVudCBFcnJvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SSkEgICAgICAgICAgICAoMHhGRkZEQzA3QykgLy8gKEVNQUMpIFJlY2VpdmUgSmFiYmVycyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19SQlFQICAgICAgICAgICAoMHhGRkZEQzAxOCkgLy8gKEVNQUMpIFJlY2VpdmUgQnVmZmVyIFF1ZXVlIFBvaW50ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfVFBGICAgICAgICAgICAgKDB4RkZGREMwOEMpIC8vIChFTUFDKSBUcmFuc21pdHRlZCBQYXVzZSBGcmFtZXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfTkNGR1IgICAgICAgICAgKDB4RkZGREMwMDQpIC8vIChFTUFDKSBOZXR3b3JrIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfSFJUICAgICAgICAgICAgKDB4RkZGREMwOTQpIC8vIChFTUFDKSBIYXNoIEFkZHJlc3MgVG9wWzYzOjMyXQ0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19VU0YgICAgICAgICAgICAoMHhGRkZEQzA4MCkgLy8gKEVNQUMpIFVuZGVyc2l6ZSBGcmFtZXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfRkNTRSAgICAgICAgICAgKDB4RkZGREMwNTApIC8vIChFTUFDKSBGcmFtZSBDaGVjayBTZXF1ZW5jZSBFcnJvciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19UUFEgICAgICAgICAgICAoMHhGRkZEQzBCQykgLy8gKEVNQUMpIFRyYW5zbWl0IFBhdXNlIFF1YW50dW0gUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfTUFOICAgICAgICAgICAgKDB4RkZGREMwMzQpIC8vIChFTUFDKSBQSFkgTWFpbnRlbmFuY2UgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfRlRPICAgICAgICAgICAgKDB4RkZGREMwNDApIC8vIChFTUFDKSBGcmFtZXMgVHJhbnNtaXR0ZWQgT0sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfUkVWICAgICAgICAgICAgKDB4RkZGREMwRkMpIC8vIChFTUFDKSBSZXZpc2lvbiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19JTVIgICAgICAgICAgICAoMHhGRkZEQzAzMCkgLy8gKEVNQUMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1NDRiAgICAgICAgICAgICgweEZGRkRDMDQ0KSAvLyAoRU1BQykgU2luZ2xlIENvbGxpc2lvbiBGcmFtZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19QRlIgICAgICAgICAgICAoMHhGRkZEQzAzQykgLy8gKEVNQUMpIFBhdXNlIEZyYW1lcyByZWNlaXZlZCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19NQ0YgICAgICAgICAgICAoMHhGRkZEQzA0OCkgLy8gKEVNQUMpIE11bHRpcGxlIENvbGxpc2lvbiBGcmFtZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19OU1IgICAgICAgICAgICAoMHhGRkZEQzAwOCkgLy8gKEVNQUMpIE5ldHdvcmsgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1NBMkwgICAgICAgICAgICgweEZGRkRDMEEwKSAvLyAoRU1BQykgU3BlY2lmaWMgQWRkcmVzcyAyIEJvdHRvbSwgRmlyc3QgNCBieXRlcw0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19GUk8gICAgICAgICAgICAoMHhGRkZEQzA0QykgLy8gKEVNQUMpIEZyYW1lcyBSZWNlaXZlZCBPSyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfRU1BQ19JRVIgICAgICAgICAgICAoMHhGRkZEQzAyOCkgLy8gKEVNQUMpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfU0ExSCAgICAgICAgICAgKDB4RkZGREMwOUMpIC8vIChFTUFDKSBTcGVjaWZpYyBBZGRyZXNzIDEgVG9wLCBMYXN0IDIgYnl0ZXMNCisjZGVmaW5lIEFUOTFDX0VNQUNfQ1NFICAgICAgICAgICAgKDB4RkZGREMwNjgpIC8vIChFTUFDKSBDYXJyaWVyIFNlbnNlIEVycm9yIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19FTUFDX1NBM0ggICAgICAgICAgICgweEZGRkRDMEFDKSAvLyAoRU1BQykgU3BlY2lmaWMgQWRkcmVzcyAzIFRvcCwgTGFzdCAyIGJ5dGVzDQorI2RlZmluZSBBVDkxQ19FTUFDX1JSRSAgICAgICAgICAgICgweEZGRkRDMDZDKSAvLyAoRU1BQykgUmVjZWl2ZSBSZXNzb3VyY2UgRXJyb3IgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0VNQUNfU1RFICAgICAgICAgICAgKDB4RkZGREMwODQpIC8vIChFTUFDKSBTUUUgVGVzdCBFcnJvciBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgUERDX0FEQyBwZXJpcGhlcmFsID09PT09PT09PT0gDQorI2RlZmluZSBBVDkxQ19BRENfUFRTUiAgICAgICAgICAgICgweEZGRkQ4MTI0KSAvLyAoUERDX0FEQykgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1BUQ1IgICAgICAgICAgICAoMHhGRkZEODEyMCkgLy8gKFBEQ19BREMpIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfVE5QUiAgICAgICAgICAgICgweEZGRkQ4MTE4KSAvLyAoUERDX0FEQykgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfVE5DUiAgICAgICAgICAgICgweEZGRkQ4MTFDKSAvLyAoUERDX0FEQykgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfUk5QUiAgICAgICAgICAgICgweEZGRkQ4MTEwKSAvLyAoUERDX0FEQykgUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19STkNSICAgICAgICAgICAgKDB4RkZGRDgxMTQpIC8vIChQRENfQURDKSBSZWNlaXZlIE5leHQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1JQUiAgICAgICAgICAgICAoMHhGRkZEODEwMCkgLy8gKFBEQ19BREMpIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX1RDUiAgICAgICAgICAgICAoMHhGRkZEODEwQykgLy8gKFBEQ19BREMpIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19UUFIgICAgICAgICAgICAgKDB4RkZGRDgxMDgpIC8vIChQRENfQURDKSBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfUkNSICAgICAgICAgICAgICgweEZGRkQ4MTA0KSAvLyAoUERDX0FEQykgUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBBREMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQURDX0NEUjIgICAgICAgICAgICAoMHhGRkZEODAzOCkgLy8gKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciAyDQorI2RlZmluZSBBVDkxQ19BRENfQ0RSMyAgICAgICAgICAgICgweEZGRkQ4MDNDKSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDMNCisjZGVmaW5lIEFUOTFDX0FEQ19DRFIwICAgICAgICAgICAgKDB4RkZGRDgwMzApIC8vIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMA0KKyNkZWZpbmUgQVQ5MUNfQURDX0NEUjUgICAgICAgICAgICAoMHhGRkZEODA0NCkgLy8gKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA1DQorI2RlZmluZSBBVDkxQ19BRENfQ0hEUiAgICAgICAgICAgICgweEZGRkQ4MDE0KSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEaXNhYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfU1IgICAgICAgICAgICAgICgweEZGRkQ4MDFDKSAvLyAoQURDKSBBREMgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfQ0RSNCAgICAgICAgICAgICgweEZGRkQ4MDQwKSAvLyAoQURDKSBBREMgQ2hhbm5lbCBEYXRhIFJlZ2lzdGVyIDQNCisjZGVmaW5lIEFUOTFDX0FEQ19DRFIxICAgICAgICAgICAgKDB4RkZGRDgwMzQpIC8vIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgMQ0KKyNkZWZpbmUgQVQ5MUNfQURDX0xDRFIgICAgICAgICAgICAoMHhGRkZEODAyMCkgLy8gKEFEQykgQURDIExhc3QgQ29udmVydGVkIERhdGEgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19JRFIgICAgICAgICAgICAgKDB4RkZGRDgwMjgpIC8vIChBREMpIEFEQyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX0NSICAgICAgICAgICAgICAoMHhGRkZEODAwMCkgLy8gKEFEQykgQURDIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19DRFI3ICAgICAgICAgICAgKDB4RkZGRDgwNEMpIC8vIChBREMpIEFEQyBDaGFubmVsIERhdGEgUmVnaXN0ZXIgNw0KKyNkZWZpbmUgQVQ5MUNfQURDX0NEUjYgICAgICAgICAgICAoMHhGRkZEODA0OCkgLy8gKEFEQykgQURDIENoYW5uZWwgRGF0YSBSZWdpc3RlciA2DQorI2RlZmluZSBBVDkxQ19BRENfSUVSICAgICAgICAgICAgICgweEZGRkQ4MDI0KSAvLyAoQURDKSBBREMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQURDX0NIRVIgICAgICAgICAgICAoMHhGRkZEODAxMCkgLy8gKEFEQykgQURDIENoYW5uZWwgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfQ0hTUiAgICAgICAgICAgICgweEZGRkQ4MDE4KSAvLyAoQURDKSBBREMgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FEQ19NUiAgICAgICAgICAgICAgKDB4RkZGRDgwMDQpIC8vIChBREMpIEFEQyBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRENfSU1SICAgICAgICAgICAgICgweEZGRkQ4MDJDKSAvLyAoQURDKSBBREMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19BRVMgcGVyaXBoZXJhbCA9PT09PT09PT09IA0KKyNkZWZpbmUgQVQ5MUNfQUVTX1RQUiAgICAgICAgICAgICAoMHhGRkZBNDEwOCkgLy8gKFBEQ19BRVMpIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19QVENSICAgICAgICAgICAgKDB4RkZGQTQxMjApIC8vIChQRENfQUVTKSBQREMgVHJhbnNmZXIgQ29udHJvbCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX1JOUFIgICAgICAgICAgICAoMHhGRkZBNDExMCkgLy8gKFBEQ19BRVMpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfVE5DUiAgICAgICAgICAgICgweEZGRkE0MTFDKSAvLyAoUERDX0FFUykgVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfVENSICAgICAgICAgICAgICgweEZGRkE0MTBDKSAvLyAoUERDX0FFUykgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX1JDUiAgICAgICAgICAgICAoMHhGRkZBNDEwNCkgLy8gKFBEQ19BRVMpIFJlY2VpdmUgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX1JOQ1IgICAgICAgICAgICAoMHhGRkZBNDExNCkgLy8gKFBEQ19BRVMpIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfVE5QUiAgICAgICAgICAgICgweEZGRkE0MTE4KSAvLyAoUERDX0FFUykgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfUlBSICAgICAgICAgICAgICgweEZGRkE0MTAwKSAvLyAoUERDX0FFUykgUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfUFRTUiAgICAgICAgICAgICgweEZGRkE0MTI0KSAvLyAoUERDX0FFUykgUERDIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3Rlcg0KKy8vID09PT09PT09PT0gUmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgQUVTIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX0FFU19JVnhSICAgICAgICAgICAgKDB4RkZGQTQwNjApIC8vIChBRVMpIEluaXRpYWxpemF0aW9uIFZlY3RvciB4IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfTVIgICAgICAgICAgICAgICgweEZGRkE0MDA0KSAvLyAoQUVTKSBNb2RlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfVlIgICAgICAgICAgICAgICgweEZGRkE0MEZDKSAvLyAoQUVTKSBBRVMgVmVyc2lvbiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX09EQVRBeFIgICAgICAgICAoMHhGRkZBNDA1MCkgLy8gKEFFUykgT3V0cHV0IERhdGEgeCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX0lEQVRBeFIgICAgICAgICAoMHhGRkZBNDA0MCkgLy8gKEFFUykgSW5wdXQgRGF0YSB4IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfQ1IgICAgICAgICAgICAgICgweEZGRkE0MDAwKSAvLyAoQUVTKSBDb250cm9sIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19BRVNfSURSICAgICAgICAgICAgICgweEZGRkE0MDE0KSAvLyAoQUVTKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfQUVTX0lNUiAgICAgICAgICAgICAoMHhGRkZBNDAxOCkgLy8gKEFFUykgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19JRVIgICAgICAgICAgICAgKDB4RkZGQTQwMTApIC8vIChBRVMpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19LRVlXeFIgICAgICAgICAgKDB4RkZGQTQwMjApIC8vIChBRVMpIEtleSBXb3JkIHggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX0FFU19JU1IgICAgICAgICAgICAgKDB4RkZGQTQwMUMpIC8vIChBRVMpIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXINCisvLyA9PT09PT09PT09IFJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIFBEQ19UREVTIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1RERVNfUk5DUiAgICAgICAgICAgKDB4RkZGQTgxMTQpIC8vIChQRENfVERFUykgUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfVENSICAgICAgICAgICAgKDB4RkZGQTgxMEMpIC8vIChQRENfVERFUykgVHJhbnNtaXQgQ291bnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19SQ1IgICAgICAgICAgICAoMHhGRkZBODEwNCkgLy8gKFBEQ19UREVTKSBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfVE5QUiAgICAgICAgICAgKDB4RkZGQTgxMTgpIC8vIChQRENfVERFUykgVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX1JOUFIgICAgICAgICAgICgweEZGRkE4MTEwKSAvLyAoUERDX1RERVMpIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX1JQUiAgICAgICAgICAgICgweEZGRkE4MTAwKSAvLyAoUERDX1RERVMpIFJlY2VpdmUgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19UTkNSICAgICAgICAgICAoMHhGRkZBODExQykgLy8gKFBEQ19UREVTKSBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfVFBSICAgICAgICAgICAgKDB4RkZGQTgxMDgpIC8vIChQRENfVERFUykgVHJhbnNtaXQgUG9pbnRlciBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19QVFNSICAgICAgICAgICAoMHhGRkZBODEyNCkgLy8gKFBEQ19UREVTKSBQREMgVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX1BUQ1IgICAgICAgICAgICgweEZGRkE4MTIwKSAvLyAoUERDX1RERVMpIFBEQyBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyDQorLy8gPT09PT09PT09PSBSZWdpc3RlciBkZWZpbml0aW9uIGZvciBUREVTIHBlcmlwaGVyYWwgPT09PT09PT09PSANCisjZGVmaW5lIEFUOTFDX1RERVNfS0VZMld4UiAgICAgICAgKDB4RkZGQTgwMjgpIC8vIChUREVTKSBLZXkgMiBXb3JkIHggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfS0VZM1d4UiAgICAgICAgKDB4RkZGQTgwMzApIC8vIChUREVTKSBLZXkgMyBXb3JkIHggUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfSURSICAgICAgICAgICAgKDB4RkZGQTgwMTQpIC8vIChUREVTKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19WUiAgICAgICAgICAgICAoMHhGRkZBODBGQykgLy8gKFRERVMpIFRERVMgVmVyc2lvbiBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19JVnhSICAgICAgICAgICAoMHhGRkZBODA2MCkgLy8gKFRERVMpIEluaXRpYWxpemF0aW9uIFZlY3RvciB4IFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX09EQVRBeFIgICAgICAgICgweEZGRkE4MDUwKSAvLyAoVERFUykgT3V0cHV0IERhdGEgeCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19JTVIgICAgICAgICAgICAoMHhGRkZBODAxOCkgLy8gKFRERVMpIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX01SICAgICAgICAgICAgICgweEZGRkE4MDA0KSAvLyAoVERFUykgTW9kZSBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19DUiAgICAgICAgICAgICAoMHhGRkZBODAwMCkgLy8gKFRERVMpIENvbnRyb2wgUmVnaXN0ZXINCisjZGVmaW5lIEFUOTFDX1RERVNfSUVSICAgICAgICAgICAgKDB4RkZGQTgwMTApIC8vIChUREVTKSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyDQorI2RlZmluZSBBVDkxQ19UREVTX0lTUiAgICAgICAgICAgICgweEZGRkE4MDFDKSAvLyAoVERFUykgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19JREFUQXhSICAgICAgICAoMHhGRkZBODA0MCkgLy8gKFRERVMpIElucHV0IERhdGEgeCBSZWdpc3Rlcg0KKyNkZWZpbmUgQVQ5MUNfVERFU19LRVkxV3hSICAgICAgICAoMHhGRkZBODAyMCkgLy8gKFRERVMpIEtleSAxIFdvcmQgeCBSZWdpc3Rlcg0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgICBQSU8gREVGSU5JVElPTlMgRk9SIEFUOTFTQU03WDI1NiAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEEwICAgICAgICAgICAgICggMSA8PCAwICkgICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTAgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMF9SWEQwICAgICAgICAgICAgKCBBVDkxQ19QSU9fUEEwICkgIC8qICBVU0FSVCAwIFJlY2VpdmUgRGF0YSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMSAgICAgICAgICAgICAoIDEgPDwgMSApICAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEExICovDQotI2RlZmluZSBBVDkxQ19QQTFfVFhEMCAgICAgICAgICAgICggQVQ5MUNfUElPX1BBMSApICAvKiAgVVNBUlQgMCBUcmFuc21pdCBEYXRhICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEExMCAgICAgICAgICAgICggMSA8PCAxMCApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTEwICovDQotI2RlZmluZSBBVDkxQ19QQTEwX1RXRCAgICAgICAgICAgICggQVQ5MUNfUElPX1BBMTAgKSAvKiAgVFdJIFR3by13aXJlIFNlcmlhbCBEYXRhICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEExMSAgICAgICAgICAgICggMSA8PCAxMSApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTExICovDQotI2RlZmluZSBBVDkxQ19QQTExX1RXQ0sgICAgICAgICAgICggQVQ5MUNfUElPX1BBMTEgKSAvKiAgVFdJIFR3by13aXJlIFNlcmlhbCBDbG9jayAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMTIgICAgICAgICAgICAoIDEgPDwgMTIgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEExMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEExMl9OUENTMDAgICAgICAgICAoIEFUOTFDX1BJT19QQTEyICkgLyogIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMCAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMTMgICAgICAgICAgICAoIDEgPDwgMTMgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEExMyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEExM19OUENTMDEgICAgICAgICAoIEFUOTFDX1BJT19QQTEzICkgLyogIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEExM19QQ0sxICAgICAgICAgICAoIEFUOTFDX1BJT19QQTEzICkgLyogIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDEgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTE0ICAgICAgICAgICAgKCAxIDw8IDE0ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMTQgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMTRfTlBDUzAyICAgICAgICAgKCBBVDkxQ19QSU9fUEExNCApIC8qICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDIgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMTRfSVJRMSAgICAgICAgICAgKCBBVDkxQ19QSU9fUEExNCApIC8qICBFeHRlcm5hbCBJbnRlcnJ1cHQgMSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMTUgICAgICAgICAgICAoIDEgPDwgMTUgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEExNSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEExNV9OUENTMDMgICAgICAgICAoIEFUOTFDX1BJT19QQTE1ICkgLyogIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEExNV9UQ0xLMiAgICAgICAgICAoIEFUOTFDX1BJT19QQTE1ICkgLyogIFRpbWVyIENvdW50ZXIgMiBleHRlcm5hbCBjbG9jayBpbnB1dCAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMTYgICAgICAgICAgICAoIDEgPDwgMTYgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEExNiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEExNl9NSVNPMCAgICAgICAgICAoIEFUOTFDX1BJT19QQTE2ICkgLyogIFNQSSAwIE1hc3RlciBJbiBTbGF2ZSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMTcgICAgICAgICAgICAoIDEgPDwgMTcgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEExNyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEExN19NT1NJMCAgICAgICAgICAoIEFUOTFDX1BJT19QQTE3ICkgLyogIFNQSSAwIE1hc3RlciBPdXQgU2xhdmUgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTE4ICAgICAgICAgICAgKCAxIDw8IDE4ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMTggKi8NCi0jZGVmaW5lIEFUOTFDX1BBMThfU1BDSzAgICAgICAgICAgKCBBVDkxQ19QSU9fUEExOCApIC8qICBTUEkgMCBTZXJpYWwgQ2xvY2sgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTE5ICAgICAgICAgICAgKCAxIDw8IDE5ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMTkgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMTlfQ0FOUlggICAgICAgICAgKCBBVDkxQ19QSU9fUEExOSApIC8qICBDQU4gUmVjZWl2ZSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMiAgICAgICAgICAgICAoIDEgPDwgMiApICAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEEyICovDQotI2RlZmluZSBBVDkxQ19QQTJfU0NLMCAgICAgICAgICAgICggQVQ5MUNfUElPX1BBMiApICAvKiAgVVNBUlQgMCBTZXJpYWwgQ2xvY2sgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMl9OUENTMTEgICAgICAgICAgKCBBVDkxQ19QSU9fUEEyICkgIC8qICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDEgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTIwICAgICAgICAgICAgKCAxIDw8IDIwICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMjAgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjBfQ0FOVFggICAgICAgICAgKCBBVDkxQ19QSU9fUEEyMCApIC8qICBDQU4gVHJhbnNtaXQgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTIxICAgICAgICAgICAgKCAxIDw8IDIxICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMjEgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjFfVEYgICAgICAgICAgICAgKCBBVDkxQ19QSU9fUEEyMSApIC8qICBTU0MgVHJhbnNtaXQgRnJhbWUgU3luYyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyMV9OUENTMTAgICAgICAgICAoIEFUOTFDX1BJT19QQTIxICkgLyogIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMCAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMjIgICAgICAgICAgICAoIDEgPDwgMjIgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEEyMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyMl9USyAgICAgICAgICAgICAoIEFUOTFDX1BJT19QQTIyICkgLyogIFNTQyBUcmFuc21pdCBDbG9jayAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyMl9TUENLMSAgICAgICAgICAoIEFUOTFDX1BJT19QQTIyICkgLyogIFNQSSAxIFNlcmlhbCBDbG9jayAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMjMgICAgICAgICAgICAoIDEgPDwgMjMgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEEyMyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyM19URCAgICAgICAgICAgICAoIEFUOTFDX1BJT19QQTIzICkgLyogIFNTQyBUcmFuc21pdCBkYXRhICovDQotI2RlZmluZSBBVDkxQ19QQTIzX01PU0kxICAgICAgICAgICggQVQ5MUNfUElPX1BBMjMgKSAvKiAgU1BJIDEgTWFzdGVyIE91dCBTbGF2ZSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMjQgICAgICAgICAgICAoIDEgPDwgMjQgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEEyNCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyNF9SRCAgICAgICAgICAgICAoIEFUOTFDX1BJT19QQTI0ICkgLyogIFNTQyBSZWNlaXZlIERhdGEgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjRfTUlTTzEgICAgICAgICAgKCBBVDkxQ19QSU9fUEEyNCApIC8qICBTUEkgMSBNYXN0ZXIgSW4gU2xhdmUgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTI1ICAgICAgICAgICAgKCAxIDw8IDI1ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMjUgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjVfUksgICAgICAgICAgICAgKCBBVDkxQ19QSU9fUEEyNSApIC8qICBTU0MgUmVjZWl2ZSBDbG9jayAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyNV9OUENTMTEgICAgICAgICAoIEFUOTFDX1BJT19QQTI1ICkgLyogIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMjYgICAgICAgICAgICAoIDEgPDwgMjYgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEEyNiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyNl9SRiAgICAgICAgICAgICAoIEFUOTFDX1BJT19QQTI2ICkgLyogIFNTQyBSZWNlaXZlIEZyYW1lIFN5bmMgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjZfTlBDUzEyICAgICAgICAgKCBBVDkxQ19QSU9fUEEyNiApIC8qICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTI3ICAgICAgICAgICAgKCAxIDw8IDI3ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMjcgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjdfRFJYRCAgICAgICAgICAgKCBBVDkxQ19QSU9fUEEyNyApIC8qICBEQkdVIERlYnVnIFJlY2VpdmUgRGF0YSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEyN19QQ0szICAgICAgICAgICAoIEFUOTFDX1BJT19QQTI3ICkgLyogIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDMgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTI4ICAgICAgICAgICAgKCAxIDw8IDI4ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMjggKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjhfRFRYRCAgICAgICAgICAgKCBBVDkxQ19QSU9fUEEyOCApIC8qICBEQkdVIERlYnVnIFRyYW5zbWl0IERhdGEgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTI5ICAgICAgICAgICAgKCAxIDw8IDI5ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMjkgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjlfRklRICAgICAgICAgICAgKCBBVDkxQ19QSU9fUEEyOSApIC8qICBBSUMgRmFzdCBJbnRlcnJ1cHQgSW5wdXQgKi8NCi0jZGVmaW5lIEFUOTFDX1BBMjlfTlBDUzEzICAgICAgICAgKCBBVDkxQ19QSU9fUEEyOSApIC8qICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQTMgICAgICAgICAgICAgKCAxIDw8IDMgKSAgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBBMyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEzX1JUUzAgICAgICAgICAgICAoIEFUOTFDX1BJT19QQTMgKSAgLyogIFVTQVJUIDAgUmVhZHkgVG8gU2VuZCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEzX05QQ1MxMiAgICAgICAgICAoIEFUOTFDX1BJT19QQTMgKSAgLyogIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBMzAgICAgICAgICAgICAoIDEgPDwgMzAgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEEzMCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEEzMF9JUlEwICAgICAgICAgICAoIEFUOTFDX1BJT19QQTMwICkgLyogIEV4dGVybmFsIEludGVycnVwdCAwICovDQotI2RlZmluZSBBVDkxQ19QQTMwX1BDSzIgICAgICAgICAgICggQVQ5MUNfUElPX1BBMzAgKSAvKiAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBNCAgICAgICAgICAgICAoIDEgPDwgNCApICAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEE0ICovDQotI2RlZmluZSBBVDkxQ19QQTRfQ1RTMCAgICAgICAgICAgICggQVQ5MUNfUElPX1BBNCApICAvKiAgVVNBUlQgMCBDbGVhciBUbyBTZW5kICovDQotI2RlZmluZSBBVDkxQ19QQTRfTlBDUzEzICAgICAgICAgICggQVQ5MUNfUElPX1BBNCApICAvKiAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEE1ICAgICAgICAgICAgICggMSA8PCA1ICkgICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTUgKi8NCi0jZGVmaW5lIEFUOTFDX1BBNV9SWEQxICAgICAgICAgICAgKCBBVDkxQ19QSU9fUEE1ICkgIC8qICBVU0FSVCAxIFJlY2VpdmUgRGF0YSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBNiAgICAgICAgICAgICAoIDEgPDwgNiApICAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEE2ICovDQotI2RlZmluZSBBVDkxQ19QQTZfVFhEMSAgICAgICAgICAgICggQVQ5MUNfUElPX1BBNiApICAvKiAgVVNBUlQgMSBUcmFuc21pdCBEYXRhICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEE3ICAgICAgICAgICAgICggMSA8PCA3ICkgICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTcgKi8NCi0jZGVmaW5lIEFUOTFDX1BBN19TQ0sxICAgICAgICAgICAgKCBBVDkxQ19QSU9fUEE3ICkgIC8qICBVU0FSVCAxIFNlcmlhbCBDbG9jayAqLw0KLSNkZWZpbmUgQVQ5MUNfUEE3X05QQ1MwMSAgICAgICAgICAoIEFUOTFDX1BJT19QQTcgKSAgLyogIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BBOCAgICAgICAgICAgICAoIDEgPDwgOCApICAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEE4ICovDQotI2RlZmluZSBBVDkxQ19QQThfUlRTMSAgICAgICAgICAgICggQVQ5MUNfUElPX1BBOCApICAvKiAgVVNBUlQgMSBSZWFkeSBUbyBTZW5kICovDQotI2RlZmluZSBBVDkxQ19QQThfTlBDUzAyICAgICAgICAgICggQVQ5MUNfUElPX1BBOCApICAvKiAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAyICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEE5ICAgICAgICAgICAgICggMSA8PCA5ICkgICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQTkgKi8NCi0jZGVmaW5lIEFUOTFDX1BBOV9DVFMxICAgICAgICAgICAgKCBBVDkxQ19QSU9fUEE5ICkgIC8qICBVU0FSVCAxIENsZWFyIFRvIFNlbmQgKi8NCi0jZGVmaW5lIEFUOTFDX1BBOV9OUENTMDMgICAgICAgICAgKCBBVDkxQ19QSU9fUEE5ICkgIC8qICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjAgICAgICAgICAgICAgKCAxIDw8IDAgKSAgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIwX0VUWENLX0VSRUZDSyAgICAoIEFUOTFDX1BJT19QQjAgKSAgLyogIEV0aGVybmV0IE1BQyBUcmFuc21pdCBDbG9jay9SZWZlcmVuY2UgQ2xvY2sgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMF9QQ0swICAgICAgICAgICAgKCBBVDkxQ19QSU9fUEIwICkgIC8qICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAwICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEIxICAgICAgICAgICAgICggMSA8PCAxICkgICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQjEgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMV9FVFhFTiAgICAgICAgICAgKCBBVDkxQ19QSU9fUEIxICkgIC8qICBFdGhlcm5ldCBNQUMgVHJhbnNtaXQgRW5hYmxlICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEIxMCAgICAgICAgICAgICggMSA8PCAxMCApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQjEwICovDQotI2RlZmluZSBBVDkxQ19QQjEwX0VUWDIgICAgICAgICAgICggQVQ5MUNfUElPX1BCMTAgKSAvKiAgRXRoZXJuZXQgTUFDIFRyYW5zbWl0IERhdGEgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxMF9OUENTMTEgICAgICAgICAoIEFUOTFDX1BJT19QQjEwICkgLyogIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BCMTEgICAgICAgICAgICAoIDEgPDwgMTEgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIxMSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxMV9FVFgzICAgICAgICAgICAoIEFUOTFDX1BJT19QQjExICkgLyogIEV0aGVybmV0IE1BQyBUcmFuc21pdCBEYXRhIDMgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMTFfTlBDUzEyICAgICAgICAgKCBBVDkxQ19QSU9fUEIxMSApIC8qICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDIgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjEyICAgICAgICAgICAgKCAxIDw8IDEyICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMTIgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMTJfRVRYRVIgICAgICAgICAgKCBBVDkxQ19QSU9fUEIxMiApIC8qICBFdGhlcm5ldCBNQUMgVHJhbnNtaWt0IENvZGluZyBFcnJvciAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxMl9UQ0xLMCAgICAgICAgICAoIEFUOTFDX1BJT19QQjEyICkgLyogIFRpbWVyIENvdW50ZXIgMCBleHRlcm5hbCBjbG9jayBpbnB1dCAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BCMTMgICAgICAgICAgICAoIDEgPDwgMTMgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIxMyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxM19FUlgyICAgICAgICAgICAoIEFUOTFDX1BJT19QQjEzICkgLyogIEV0aGVybmV0IE1BQyBSZWNlaXZlIERhdGEgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxM19OUENTMDEgICAgICAgICAoIEFUOTFDX1BJT19QQjEzICkgLyogIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BCMTQgICAgICAgICAgICAoIDEgPDwgMTQgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIxNCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxNF9FUlgzICAgICAgICAgICAoIEFUOTFDX1BJT19QQjE0ICkgLyogIEV0aGVybmV0IE1BQyBSZWNlaXZlIERhdGEgMyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxNF9OUENTMDIgICAgICAgICAoIEFUOTFDX1BJT19QQjE0ICkgLyogIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BCMTUgICAgICAgICAgICAoIDEgPDwgMTUgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIxNSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxNV9FUlhEViAgICAgICAgICAoIEFUOTFDX1BJT19QQjE1ICkgLyogIEV0aGVybmV0IE1BQyBSZWNlaXZlIERhdGEgVmFsaWQgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjE2ICAgICAgICAgICAgKCAxIDw8IDE2ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMTYgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMTZfRUNPTCAgICAgICAgICAgKCBBVDkxQ19QSU9fUEIxNiApIC8qICBFdGhlcm5ldCBNQUMgQ29sbGlzaW9uIERldGVjdGVkICovDQotI2RlZmluZSBBVDkxQ19QQjE2X05QQ1MxMyAgICAgICAgICggQVQ5MUNfUElPX1BCMTYgKSAvKiAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEIxNyAgICAgICAgICAgICggMSA8PCAxNyApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQjE3ICovDQotI2RlZmluZSBBVDkxQ19QQjE3X0VSWENLICAgICAgICAgICggQVQ5MUNfUElPX1BCMTcgKSAvKiAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgQ2xvY2sgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMTdfTlBDUzAzICAgICAgICAgKCBBVDkxQ19QSU9fUEIxNyApIC8qICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjE4ICAgICAgICAgICAgKCAxIDw8IDE4ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMTggKi8NCi0jZGVmaW5lIEFUOTFDX1BCMThfRUYxMDAgICAgICAgICAgKCBBVDkxQ19QSU9fUEIxOCApIC8qICBFdGhlcm5ldCBNQUMgRm9yY2UgMTAwIE1iaXRzL3NlYyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxOF9BRFRSRyAgICAgICAgICAoIEFUOTFDX1BJT19QQjE4ICkgLyogIEFEQyBFeHRlcm5hbCBUcmlnZ2VyICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEIxOSAgICAgICAgICAgICggMSA8PCAxOSApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQjE5ICovDQotI2RlZmluZSBBVDkxQ19QQjE5X1BXTTAgICAgICAgICAgICggQVQ5MUNfUElPX1BCMTkgKSAvKiAgUFdNIENoYW5uZWwgMCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIxOV9UQ0xLMSAgICAgICAgICAoIEFUOTFDX1BJT19QQjE5ICkgLyogIFRpbWVyIENvdW50ZXIgMSBleHRlcm5hbCBjbG9jayBpbnB1dCAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BCMiAgICAgICAgICAgICAoIDEgPDwgMiApICAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIyICovDQotI2RlZmluZSBBVDkxQ19QQjJfRVRYMCAgICAgICAgICAgICggQVQ5MUNfUElPX1BCMiApICAvKiAgRXRoZXJuZXQgTUFDIFRyYW5zbWl0IERhdGEgMCAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BCMjAgICAgICAgICAgICAoIDEgPDwgMjAgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIyMCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIyMF9QV00xICAgICAgICAgICAoIEFUOTFDX1BJT19QQjIwICkgLyogIFBXTSBDaGFubmVsIDEgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMjBfUENLMCAgICAgICAgICAgKCBBVDkxQ19QSU9fUEIyMCApIC8qICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAwICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEIyMSAgICAgICAgICAgICggMSA8PCAyMSApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQjIxICovDQotI2RlZmluZSBBVDkxQ19QQjIxX1BXTTIgICAgICAgICAgICggQVQ5MUNfUElPX1BCMjEgKSAvKiAgUFdNIENoYW5uZWwgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIyMV9QQ0sxICAgICAgICAgICAoIEFUOTFDX1BJT19QQjIxICkgLyogIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDEgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjIyICAgICAgICAgICAgKCAxIDw8IDIyICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMjIgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMjJfUFdNMyAgICAgICAgICAgKCBBVDkxQ19QSU9fUEIyMiApIC8qICBQV00gQ2hhbm5lbCAzICovDQotI2RlZmluZSBBVDkxQ19QQjIyX1BDSzIgICAgICAgICAgICggQVQ5MUNfUElPX1BCMjIgKSAvKiAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BCMjMgICAgICAgICAgICAoIDEgPDwgMjMgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIyMyAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIyM19USU9BMCAgICAgICAgICAoIEFUOTFDX1BJT19QQjIzICkgLyogIFRpbWVyIENvdW50ZXIgMCBNdWx0aXB1cnBvc2UgVGltZXIgSS9PIFBpbiBBICovDQotI2RlZmluZSBBVDkxQ19QQjIzX0RDRDEgICAgICAgICAgICggQVQ5MUNfUElPX1BCMjMgKSAvKiAgVVNBUlQgMSBEYXRhIENhcnJpZXIgRGV0ZWN0ICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEIyNCAgICAgICAgICAgICggMSA8PCAyNCApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQjI0ICovDQotI2RlZmluZSBBVDkxQ19QQjI0X1RJT0IwICAgICAgICAgICggQVQ5MUNfUElPX1BCMjQgKSAvKiAgVGltZXIgQ291bnRlciAwIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEIgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMjRfRFNSMSAgICAgICAgICAgKCBBVDkxQ19QSU9fUEIyNCApIC8qICBVU0FSVCAxIERhdGEgU2V0IHJlYWR5ICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEIyNSAgICAgICAgICAgICggMSA8PCAyNSApICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQjI1ICovDQotI2RlZmluZSBBVDkxQ19QQjI1X1RJT0ExICAgICAgICAgICggQVQ5MUNfUElPX1BCMjUgKSAvKiAgVGltZXIgQ291bnRlciAxIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEEgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMjVfRFRSMSAgICAgICAgICAgKCBBVDkxQ19QSU9fUEIyNSApIC8qICBVU0FSVCAxIERhdGEgVGVybWluYWwgcmVhZHkgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjI2ICAgICAgICAgICAgKCAxIDw8IDI2ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMjYgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMjZfVElPQjEgICAgICAgICAgKCBBVDkxQ19QSU9fUEIyNiApIC8qICBUaW1lciBDb3VudGVyIDEgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIyNl9SSTEgICAgICAgICAgICAoIEFUOTFDX1BJT19QQjI2ICkgLyogIFVTQVJUIDEgUmluZyBJbmRpY2F0b3IgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjI3ICAgICAgICAgICAgKCAxIDw8IDI3ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMjcgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMjdfVElPQTIgICAgICAgICAgKCBBVDkxQ19QSU9fUEIyNyApIC8qICBUaW1lciBDb3VudGVyIDIgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIyN19QV00wICAgICAgICAgICAoIEFUOTFDX1BJT19QQjI3ICkgLyogIFBXTSBDaGFubmVsIDAgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjI4ICAgICAgICAgICAgKCAxIDw8IDI4ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMjggKi8NCi0jZGVmaW5lIEFUOTFDX1BCMjhfVElPQjIgICAgICAgICAgKCBBVDkxQ19QSU9fUEIyOCApIC8qICBUaW1lciBDb3VudGVyIDIgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIyOF9QV00xICAgICAgICAgICAoIEFUOTFDX1BJT19QQjI4ICkgLyogIFBXTSBDaGFubmVsIDEgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjI5ICAgICAgICAgICAgKCAxIDw8IDI5ICkgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCMjkgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMjlfUENLMSAgICAgICAgICAgKCBBVDkxQ19QSU9fUEIyOSApIC8qICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAxICovDQotI2RlZmluZSBBVDkxQ19QQjI5X1BXTTIgICAgICAgICAgICggQVQ5MUNfUElPX1BCMjkgKSAvKiAgUFdNIENoYW5uZWwgMiAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BCMyAgICAgICAgICAgICAoIDEgPDwgMyApICAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIzICovDQotI2RlZmluZSBBVDkxQ19QQjNfRVRYMSAgICAgICAgICAgICggQVQ5MUNfUElPX1BCMyApICAvKiAgRXRoZXJuZXQgTUFDIFRyYW5zbWl0IERhdGEgMSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BCMzAgICAgICAgICAgICAoIDEgPDwgMzAgKSAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEIzMCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEIzMF9QQ0syICAgICAgICAgICAoIEFUOTFDX1BJT19QQjMwICkgLyogIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDIgKi8NCi0jZGVmaW5lIEFUOTFDX1BCMzBfUFdNMyAgICAgICAgICAgKCBBVDkxQ19QSU9fUEIzMCApIC8qICBQV00gQ2hhbm5lbCAzICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEI0ICAgICAgICAgICAgICggMSA8PCA0ICkgICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQjQgKi8NCi0jZGVmaW5lIEFUOTFDX1BCNF9FQ1JTX0VDUlNEViAgICAgKCBBVDkxQ19QSU9fUEI0ICkgIC8qICBFdGhlcm5ldCBNQUMgQ2FycmllciBTZW5zZS9DYXJyaWVyIFNlbnNlIGFuZCBEYXRhIFZhbGlkICovDQotI2RlZmluZSBBVDkxQ19QSU9fUEI1ICAgICAgICAgICAgICggMSA8PCA1ICkgICAgICAgICAvKiBQaW4gQ29udHJvbGxlZCBieSBQQjUgKi8NCi0jZGVmaW5lIEFUOTFDX1BCNV9FUlgwICAgICAgICAgICAgKCBBVDkxQ19QSU9fUEI1ICkgIC8qICBFdGhlcm5ldCBNQUMgUmVjZWl2ZSBEYXRhIDAgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjYgICAgICAgICAgICAgKCAxIDw8IDYgKSAgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCNiAqLw0KLSNkZWZpbmUgQVQ5MUNfUEI2X0VSWDEgICAgICAgICAgICAoIEFUOTFDX1BJT19QQjYgKSAgLyogIEV0aGVybmV0IE1BQyBSZWNlaXZlIERhdGEgMSAqLw0KLSNkZWZpbmUgQVQ5MUNfUElPX1BCNyAgICAgICAgICAgICAoIDEgPDwgNyApICAgICAgICAgLyogUGluIENvbnRyb2xsZWQgYnkgUEI3ICovDQotI2RlZmluZSBBVDkxQ19QQjdfRVJYRVIgICAgICAgICAgICggQVQ5MUNfUElPX1BCNyApICAvKiAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgRXJyb3IgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjggICAgICAgICAgICAgKCAxIDw8IDggKSAgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCOCAqLw0KLSNkZWZpbmUgQVQ5MUNfUEI4X0VNREMgICAgICAgICAgICAoIEFUOTFDX1BJT19QQjggKSAgLyogIEV0aGVybmV0IE1BQyBNYW5hZ2VtZW50IERhdGEgQ2xvY2sgKi8NCi0jZGVmaW5lIEFUOTFDX1BJT19QQjkgICAgICAgICAgICAgKCAxIDw8IDkgKSAgICAgICAgIC8qIFBpbiBDb250cm9sbGVkIGJ5IFBCOSAqLw0KLSNkZWZpbmUgQVQ5MUNfUEI5X0VNRElPICAgICAgICAgICAoIEFUOTFDX1BJT19QQjkgKSAgLyogIEV0aGVybmV0IE1BQyBNYW5hZ2VtZW50IERhdGEgSW5wdXQvT3V0cHV0ICovDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgIFBJTyBERUZJTklUSU9OUyBGT1IgQVQ5MVNBTTdYMjU2DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisjZGVmaW5lIEFUOTFDX1BJT19QQTAgICAgICAgICAgICAgKDEgPDwgIDApIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMA0KKyNkZWZpbmUgQVQ5MUNfUEEwX1JYRDAgICAgICAgICAgICAoQVQ5MUNfUElPX1BBMCkgLy8gIFVTQVJUIDAgUmVjZWl2ZSBEYXRhDQorI2RlZmluZSBBVDkxQ19QSU9fUEExICAgICAgICAgICAgICgxIDw8ICAxKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTENCisjZGVmaW5lIEFUOTFDX1BBMV9UWEQwICAgICAgICAgICAgKEFUOTFDX1BJT19QQTEpIC8vICBVU0FSVCAwIFRyYW5zbWl0IERhdGENCisjZGVmaW5lIEFUOTFDX1BJT19QQTEwICAgICAgICAgICAgKDEgPDwgMTApIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMTANCisjZGVmaW5lIEFUOTFDX1BBMTBfVFdEICAgICAgICAgICAgKEFUOTFDX1BJT19QQTEwKSAvLyAgVFdJIFR3by13aXJlIFNlcmlhbCBEYXRhDQorI2RlZmluZSBBVDkxQ19QSU9fUEExMSAgICAgICAgICAgICgxIDw8IDExKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTExDQorI2RlZmluZSBBVDkxQ19QQTExX1RXQ0sgICAgICAgICAgIChBVDkxQ19QSU9fUEExMSkgLy8gIFRXSSBUd28td2lyZSBTZXJpYWwgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BJT19QQTEyICAgICAgICAgICAgKDEgPDwgMTIpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMTINCisjZGVmaW5lIEFUOTFDX1BBMTJfTlBDUzAwICAgICAgICAgKEFUOTFDX1BJT19QQTEyKSAvLyAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAwDQorI2RlZmluZSBBVDkxQ19QSU9fUEExMyAgICAgICAgICAgICgxIDw8IDEzKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTEzDQorI2RlZmluZSBBVDkxQ19QQTEzX05QQ1MwMSAgICAgICAgIChBVDkxQ19QSU9fUEExMykgLy8gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMQ0KKyNkZWZpbmUgQVQ5MUNfUEExM19QQ0sxICAgICAgICAgICAoQVQ5MUNfUElPX1BBMTMpIC8vICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAxDQorI2RlZmluZSBBVDkxQ19QSU9fUEExNCAgICAgICAgICAgICgxIDw8IDE0KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTE0DQorI2RlZmluZSBBVDkxQ19QQTE0X05QQ1MwMiAgICAgICAgIChBVDkxQ19QSU9fUEExNCkgLy8gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMg0KKyNkZWZpbmUgQVQ5MUNfUEExNF9JUlExICAgICAgICAgICAoQVQ5MUNfUElPX1BBMTQpIC8vICBFeHRlcm5hbCBJbnRlcnJ1cHQgMQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMTUgICAgICAgICAgICAoMSA8PCAxNSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExNQ0KKyNkZWZpbmUgQVQ5MUNfUEExNV9OUENTMDMgICAgICAgICAoQVQ5MUNfUElPX1BBMTUpIC8vICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMNCisjZGVmaW5lIEFUOTFDX1BBMTVfVENMSzIgICAgICAgICAgKEFUOTFDX1BJT19QQTE1KSAvLyAgVGltZXIgQ291bnRlciAyIGV4dGVybmFsIGNsb2NrIGlucHV0DQorI2RlZmluZSBBVDkxQ19QSU9fUEExNiAgICAgICAgICAgICgxIDw8IDE2KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTE2DQorI2RlZmluZSBBVDkxQ19QQTE2X01JU08wICAgICAgICAgIChBVDkxQ19QSU9fUEExNikgLy8gIFNQSSAwIE1hc3RlciBJbiBTbGF2ZQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMTcgICAgICAgICAgICAoMSA8PCAxNykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExNw0KKyNkZWZpbmUgQVQ5MUNfUEExN19NT1NJMCAgICAgICAgICAoQVQ5MUNfUElPX1BBMTcpIC8vICBTUEkgMCBNYXN0ZXIgT3V0IFNsYXZlDQorI2RlZmluZSBBVDkxQ19QSU9fUEExOCAgICAgICAgICAgICgxIDw8IDE4KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTE4DQorI2RlZmluZSBBVDkxQ19QQTE4X1NQQ0swICAgICAgICAgIChBVDkxQ19QSU9fUEExOCkgLy8gIFNQSSAwIFNlcmlhbCBDbG9jaw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMTkgICAgICAgICAgICAoMSA8PCAxOSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEExOQ0KKyNkZWZpbmUgQVQ5MUNfUEExOV9DQU5SWCAgICAgICAgICAoQVQ5MUNfUElPX1BBMTkpIC8vICBDQU4gUmVjZWl2ZQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMiAgICAgICAgICAgICAoMSA8PCAgMikgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEyDQorI2RlZmluZSBBVDkxQ19QQTJfU0NLMCAgICAgICAgICAgIChBVDkxQ19QSU9fUEEyKSAvLyAgVVNBUlQgMCBTZXJpYWwgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BBMl9OUENTMTEgICAgICAgICAgKEFUOTFDX1BJT19QQTIpIC8vICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDENCisjZGVmaW5lIEFUOTFDX1BJT19QQTIwICAgICAgICAgICAgKDEgPDwgMjApIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjANCisjZGVmaW5lIEFUOTFDX1BBMjBfQ0FOVFggICAgICAgICAgKEFUOTFDX1BJT19QQTIwKSAvLyAgQ0FOIFRyYW5zbWl0DQorI2RlZmluZSBBVDkxQ19QSU9fUEEyMSAgICAgICAgICAgICgxIDw8IDIxKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTIxDQorI2RlZmluZSBBVDkxQ19QQTIxX1RGICAgICAgICAgICAgIChBVDkxQ19QSU9fUEEyMSkgLy8gIFNTQyBUcmFuc21pdCBGcmFtZSBTeW5jDQorI2RlZmluZSBBVDkxQ19QQTIxX05QQ1MxMCAgICAgICAgIChBVDkxQ19QSU9fUEEyMSkgLy8gIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMjIgICAgICAgICAgICAoMSA8PCAyMikgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEyMg0KKyNkZWZpbmUgQVQ5MUNfUEEyMl9USyAgICAgICAgICAgICAoQVQ5MUNfUElPX1BBMjIpIC8vICBTU0MgVHJhbnNtaXQgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BBMjJfU1BDSzEgICAgICAgICAgKEFUOTFDX1BJT19QQTIyKSAvLyAgU1BJIDEgU2VyaWFsIENsb2NrDQorI2RlZmluZSBBVDkxQ19QSU9fUEEyMyAgICAgICAgICAgICgxIDw8IDIzKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTIzDQorI2RlZmluZSBBVDkxQ19QQTIzX1REICAgICAgICAgICAgIChBVDkxQ19QSU9fUEEyMykgLy8gIFNTQyBUcmFuc21pdCBkYXRhDQorI2RlZmluZSBBVDkxQ19QQTIzX01PU0kxICAgICAgICAgIChBVDkxQ19QSU9fUEEyMykgLy8gIFNQSSAxIE1hc3RlciBPdXQgU2xhdmUNCisjZGVmaW5lIEFUOTFDX1BJT19QQTI0ICAgICAgICAgICAgKDEgPDwgMjQpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjQNCisjZGVmaW5lIEFUOTFDX1BBMjRfUkQgICAgICAgICAgICAgKEFUOTFDX1BJT19QQTI0KSAvLyAgU1NDIFJlY2VpdmUgRGF0YQ0KKyNkZWZpbmUgQVQ5MUNfUEEyNF9NSVNPMSAgICAgICAgICAoQVQ5MUNfUElPX1BBMjQpIC8vICBTUEkgMSBNYXN0ZXIgSW4gU2xhdmUNCisjZGVmaW5lIEFUOTFDX1BJT19QQTI1ICAgICAgICAgICAgKDEgPDwgMjUpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjUNCisjZGVmaW5lIEFUOTFDX1BBMjVfUksgICAgICAgICAgICAgKEFUOTFDX1BJT19QQTI1KSAvLyAgU1NDIFJlY2VpdmUgQ2xvY2sNCisjZGVmaW5lIEFUOTFDX1BBMjVfTlBDUzExICAgICAgICAgKEFUOTFDX1BJT19QQTI1KSAvLyAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAxDQorI2RlZmluZSBBVDkxQ19QSU9fUEEyNiAgICAgICAgICAgICgxIDw8IDI2KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTI2DQorI2RlZmluZSBBVDkxQ19QQTI2X1JGICAgICAgICAgICAgIChBVDkxQ19QSU9fUEEyNikgLy8gIFNTQyBSZWNlaXZlIEZyYW1lIFN5bmMNCisjZGVmaW5lIEFUOTFDX1BBMjZfTlBDUzEyICAgICAgICAgKEFUOTFDX1BJT19QQTI2KSAvLyAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAyDQorI2RlZmluZSBBVDkxQ19QSU9fUEEyNyAgICAgICAgICAgICgxIDw8IDI3KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTI3DQorI2RlZmluZSBBVDkxQ19QQTI3X0RSWEQgICAgICAgICAgIChBVDkxQ19QSU9fUEEyNykgLy8gIERCR1UgRGVidWcgUmVjZWl2ZSBEYXRhDQorI2RlZmluZSBBVDkxQ19QQTI3X1BDSzMgICAgICAgICAgIChBVDkxQ19QSU9fUEEyNykgLy8gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDMNCisjZGVmaW5lIEFUOTFDX1BJT19QQTI4ICAgICAgICAgICAgKDEgPDwgMjgpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMjgNCisjZGVmaW5lIEFUOTFDX1BBMjhfRFRYRCAgICAgICAgICAgKEFUOTFDX1BJT19QQTI4KSAvLyAgREJHVSBEZWJ1ZyBUcmFuc21pdCBEYXRhDQorI2RlZmluZSBBVDkxQ19QSU9fUEEyOSAgICAgICAgICAgICgxIDw8IDI5KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTI5DQorI2RlZmluZSBBVDkxQ19QQTI5X0ZJUSAgICAgICAgICAgIChBVDkxQ19QSU9fUEEyOSkgLy8gIEFJQyBGYXN0IEludGVycnVwdCBJbnB1dA0KKyNkZWZpbmUgQVQ5MUNfUEEyOV9OUENTMTMgICAgICAgICAoQVQ5MUNfUElPX1BBMjkpIC8vICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMNCisjZGVmaW5lIEFUOTFDX1BJT19QQTMgICAgICAgICAgICAgKDEgPDwgIDMpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBMw0KKyNkZWZpbmUgQVQ5MUNfUEEzX1JUUzAgICAgICAgICAgICAoQVQ5MUNfUElPX1BBMykgLy8gIFVTQVJUIDAgUmVhZHkgVG8gU2VuZA0KKyNkZWZpbmUgQVQ5MUNfUEEzX05QQ1MxMiAgICAgICAgICAoQVQ5MUNfUElPX1BBMykgLy8gIFNQSSAxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BBMzAgICAgICAgICAgICAoMSA8PCAzMCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEEzMA0KKyNkZWZpbmUgQVQ5MUNfUEEzMF9JUlEwICAgICAgICAgICAoQVQ5MUNfUElPX1BBMzApIC8vICBFeHRlcm5hbCBJbnRlcnJ1cHQgMA0KKyNkZWZpbmUgQVQ5MUNfUEEzMF9QQ0syICAgICAgICAgICAoQVQ5MUNfUElPX1BBMzApIC8vICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAyDQorI2RlZmluZSBBVDkxQ19QSU9fUEE0ICAgICAgICAgICAgICgxIDw8ICA0KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTQNCisjZGVmaW5lIEFUOTFDX1BBNF9DVFMwICAgICAgICAgICAgKEFUOTFDX1BJT19QQTQpIC8vICBVU0FSVCAwIENsZWFyIFRvIFNlbmQNCisjZGVmaW5lIEFUOTFDX1BBNF9OUENTMTMgICAgICAgICAgKEFUOTFDX1BJT19QQTQpIC8vICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMNCisjZGVmaW5lIEFUOTFDX1BJT19QQTUgICAgICAgICAgICAgKDEgPDwgIDUpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBNQ0KKyNkZWZpbmUgQVQ5MUNfUEE1X1JYRDEgICAgICAgICAgICAoQVQ5MUNfUElPX1BBNSkgLy8gIFVTQVJUIDEgUmVjZWl2ZSBEYXRhDQorI2RlZmluZSBBVDkxQ19QSU9fUEE2ICAgICAgICAgICAgICgxIDw8ICA2KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTYNCisjZGVmaW5lIEFUOTFDX1BBNl9UWEQxICAgICAgICAgICAgKEFUOTFDX1BJT19QQTYpIC8vICBVU0FSVCAxIFRyYW5zbWl0IERhdGENCisjZGVmaW5lIEFUOTFDX1BJT19QQTcgICAgICAgICAgICAgKDEgPDwgIDcpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBNw0KKyNkZWZpbmUgQVQ5MUNfUEE3X1NDSzEgICAgICAgICAgICAoQVQ5MUNfUElPX1BBNykgLy8gIFVTQVJUIDEgU2VyaWFsIENsb2NrDQorI2RlZmluZSBBVDkxQ19QQTdfTlBDUzAxICAgICAgICAgIChBVDkxQ19QSU9fUEE3KSAvLyAgU1BJIDAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAxDQorI2RlZmluZSBBVDkxQ19QSU9fUEE4ICAgICAgICAgICAgICgxIDw8ICA4KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQTgNCisjZGVmaW5lIEFUOTFDX1BBOF9SVFMxICAgICAgICAgICAgKEFUOTFDX1BJT19QQTgpIC8vICBVU0FSVCAxIFJlYWR5IFRvIFNlbmQNCisjZGVmaW5lIEFUOTFDX1BBOF9OUENTMDIgICAgICAgICAgKEFUOTFDX1BJT19QQTgpIC8vICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDINCisjZGVmaW5lIEFUOTFDX1BJT19QQTkgICAgICAgICAgICAgKDEgPDwgIDkpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBBOQ0KKyNkZWZpbmUgQVQ5MUNfUEE5X0NUUzEgICAgICAgICAgICAoQVQ5MUNfUElPX1BBOSkgLy8gIFVTQVJUIDEgQ2xlYXIgVG8gU2VuZA0KKyNkZWZpbmUgQVQ5MUNfUEE5X05QQ1MwMyAgICAgICAgICAoQVQ5MUNfUElPX1BBOSkgLy8gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMCAgICAgICAgICAgICAoMSA8PCAgMCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIwDQorI2RlZmluZSBBVDkxQ19QQjBfRVRYQ0tfRVJFRkNLICAgIChBVDkxQ19QSU9fUEIwKSAvLyAgRXRoZXJuZXQgTUFDIFRyYW5zbWl0IENsb2NrL1JlZmVyZW5jZSBDbG9jaw0KKyNkZWZpbmUgQVQ5MUNfUEIwX1BDSzAgICAgICAgICAgICAoQVQ5MUNfUElPX1BCMCkgLy8gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDANCisjZGVmaW5lIEFUOTFDX1BJT19QQjEgICAgICAgICAgICAgKDEgPDwgIDEpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMQ0KKyNkZWZpbmUgQVQ5MUNfUEIxX0VUWEVOICAgICAgICAgICAoQVQ5MUNfUElPX1BCMSkgLy8gIEV0aGVybmV0IE1BQyBUcmFuc21pdCBFbmFibGUNCisjZGVmaW5lIEFUOTFDX1BJT19QQjEwICAgICAgICAgICAgKDEgPDwgMTApIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMTANCisjZGVmaW5lIEFUOTFDX1BCMTBfRVRYMiAgICAgICAgICAgKEFUOTFDX1BJT19QQjEwKSAvLyAgRXRoZXJuZXQgTUFDIFRyYW5zbWl0IERhdGEgMg0KKyNkZWZpbmUgQVQ5MUNfUEIxMF9OUENTMTEgICAgICAgICAoQVQ5MUNfUElPX1BCMTApIC8vICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDENCisjZGVmaW5lIEFUOTFDX1BJT19QQjExICAgICAgICAgICAgKDEgPDwgMTEpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMTENCisjZGVmaW5lIEFUOTFDX1BCMTFfRVRYMyAgICAgICAgICAgKEFUOTFDX1BJT19QQjExKSAvLyAgRXRoZXJuZXQgTUFDIFRyYW5zbWl0IERhdGEgMw0KKyNkZWZpbmUgQVQ5MUNfUEIxMV9OUENTMTIgICAgICAgICAoQVQ5MUNfUElPX1BCMTEpIC8vICBTUEkgMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDINCisjZGVmaW5lIEFUOTFDX1BJT19QQjEyICAgICAgICAgICAgKDEgPDwgMTIpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMTINCisjZGVmaW5lIEFUOTFDX1BCMTJfRVRYRVIgICAgICAgICAgKEFUOTFDX1BJT19QQjEyKSAvLyAgRXRoZXJuZXQgTUFDIFRyYW5zbWlrdCBDb2RpbmcgRXJyb3INCisjZGVmaW5lIEFUOTFDX1BCMTJfVENMSzAgICAgICAgICAgKEFUOTFDX1BJT19QQjEyKSAvLyAgVGltZXIgQ291bnRlciAwIGV4dGVybmFsIGNsb2NrIGlucHV0DQorI2RlZmluZSBBVDkxQ19QSU9fUEIxMyAgICAgICAgICAgICgxIDw8IDEzKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjEzDQorI2RlZmluZSBBVDkxQ19QQjEzX0VSWDIgICAgICAgICAgIChBVDkxQ19QSU9fUEIxMykgLy8gIEV0aGVybmV0IE1BQyBSZWNlaXZlIERhdGEgMg0KKyNkZWZpbmUgQVQ5MUNfUEIxM19OUENTMDEgICAgICAgICAoQVQ5MUNfUElPX1BCMTMpIC8vICBTUEkgMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDENCisjZGVmaW5lIEFUOTFDX1BJT19QQjE0ICAgICAgICAgICAgKDEgPDwgMTQpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMTQNCisjZGVmaW5lIEFUOTFDX1BCMTRfRVJYMyAgICAgICAgICAgKEFUOTFDX1BJT19QQjE0KSAvLyAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgRGF0YSAzDQorI2RlZmluZSBBVDkxQ19QQjE0X05QQ1MwMiAgICAgICAgIChBVDkxQ19QSU9fUEIxNCkgLy8gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMTUgICAgICAgICAgICAoMSA8PCAxNSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIxNQ0KKyNkZWZpbmUgQVQ5MUNfUEIxNV9FUlhEViAgICAgICAgICAoQVQ5MUNfUElPX1BCMTUpIC8vICBFdGhlcm5ldCBNQUMgUmVjZWl2ZSBEYXRhIFZhbGlkDQorI2RlZmluZSBBVDkxQ19QSU9fUEIxNiAgICAgICAgICAgICgxIDw8IDE2KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjE2DQorI2RlZmluZSBBVDkxQ19QQjE2X0VDT0wgICAgICAgICAgIChBVDkxQ19QSU9fUEIxNikgLy8gIEV0aGVybmV0IE1BQyBDb2xsaXNpb24gRGV0ZWN0ZWQNCisjZGVmaW5lIEFUOTFDX1BCMTZfTlBDUzEzICAgICAgICAgKEFUOTFDX1BJT19QQjE2KSAvLyAgU1BJIDEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzDQorI2RlZmluZSBBVDkxQ19QSU9fUEIxNyAgICAgICAgICAgICgxIDw8IDE3KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjE3DQorI2RlZmluZSBBVDkxQ19QQjE3X0VSWENLICAgICAgICAgIChBVDkxQ19QSU9fUEIxNykgLy8gIEV0aGVybmV0IE1BQyBSZWNlaXZlIENsb2NrDQorI2RlZmluZSBBVDkxQ19QQjE3X05QQ1MwMyAgICAgICAgIChBVDkxQ19QSU9fUEIxNykgLy8gIFNQSSAwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMTggICAgICAgICAgICAoMSA8PCAxOCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIxOA0KKyNkZWZpbmUgQVQ5MUNfUEIxOF9FRjEwMCAgICAgICAgICAoQVQ5MUNfUElPX1BCMTgpIC8vICBFdGhlcm5ldCBNQUMgRm9yY2UgMTAwIE1iaXRzL3NlYw0KKyNkZWZpbmUgQVQ5MUNfUEIxOF9BRFRSRyAgICAgICAgICAoQVQ5MUNfUElPX1BCMTgpIC8vICBBREMgRXh0ZXJuYWwgVHJpZ2dlcg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMTkgICAgICAgICAgICAoMSA8PCAxOSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIxOQ0KKyNkZWZpbmUgQVQ5MUNfUEIxOV9QV00wICAgICAgICAgICAoQVQ5MUNfUElPX1BCMTkpIC8vICBQV00gQ2hhbm5lbCAwDQorI2RlZmluZSBBVDkxQ19QQjE5X1RDTEsxICAgICAgICAgIChBVDkxQ19QSU9fUEIxOSkgLy8gIFRpbWVyIENvdW50ZXIgMSBleHRlcm5hbCBjbG9jayBpbnB1dA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMiAgICAgICAgICAgICAoMSA8PCAgMikgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIyDQorI2RlZmluZSBBVDkxQ19QQjJfRVRYMCAgICAgICAgICAgIChBVDkxQ19QSU9fUEIyKSAvLyAgRXRoZXJuZXQgTUFDIFRyYW5zbWl0IERhdGEgMA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMjAgICAgICAgICAgICAoMSA8PCAyMCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIyMA0KKyNkZWZpbmUgQVQ5MUNfUEIyMF9QV00xICAgICAgICAgICAoQVQ5MUNfUElPX1BCMjApIC8vICBQV00gQ2hhbm5lbCAxDQorI2RlZmluZSBBVDkxQ19QQjIwX1BDSzAgICAgICAgICAgIChBVDkxQ19QSU9fUEIyMCkgLy8gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDANCisjZGVmaW5lIEFUOTFDX1BJT19QQjIxICAgICAgICAgICAgKDEgPDwgMjEpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMjENCisjZGVmaW5lIEFUOTFDX1BCMjFfUFdNMiAgICAgICAgICAgKEFUOTFDX1BJT19QQjIxKSAvLyAgUFdNIENoYW5uZWwgMg0KKyNkZWZpbmUgQVQ5MUNfUEIyMV9QQ0sxICAgICAgICAgICAoQVQ5MUNfUElPX1BCMjEpIC8vICBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAxDQorI2RlZmluZSBBVDkxQ19QSU9fUEIyMiAgICAgICAgICAgICgxIDw8IDIyKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjIyDQorI2RlZmluZSBBVDkxQ19QQjIyX1BXTTMgICAgICAgICAgIChBVDkxQ19QSU9fUEIyMikgLy8gIFBXTSBDaGFubmVsIDMNCisjZGVmaW5lIEFUOTFDX1BCMjJfUENLMiAgICAgICAgICAgKEFUOTFDX1BJT19QQjIyKSAvLyAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMjMgICAgICAgICAgICAoMSA8PCAyMykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIyMw0KKyNkZWZpbmUgQVQ5MUNfUEIyM19USU9BMCAgICAgICAgICAoQVQ5MUNfUElPX1BCMjMpIC8vICBUaW1lciBDb3VudGVyIDAgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQQ0KKyNkZWZpbmUgQVQ5MUNfUEIyM19EQ0QxICAgICAgICAgICAoQVQ5MUNfUElPX1BCMjMpIC8vICBVU0FSVCAxIERhdGEgQ2FycmllciBEZXRlY3QNCisjZGVmaW5lIEFUOTFDX1BJT19QQjI0ICAgICAgICAgICAgKDEgPDwgMjQpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMjQNCisjZGVmaW5lIEFUOTFDX1BCMjRfVElPQjAgICAgICAgICAgKEFUOTFDX1BJT19QQjI0KSAvLyAgVGltZXIgQ291bnRlciAwIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEINCisjZGVmaW5lIEFUOTFDX1BCMjRfRFNSMSAgICAgICAgICAgKEFUOTFDX1BJT19QQjI0KSAvLyAgVVNBUlQgMSBEYXRhIFNldCByZWFkeQ0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMjUgICAgICAgICAgICAoMSA8PCAyNSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIyNQ0KKyNkZWZpbmUgQVQ5MUNfUEIyNV9USU9BMSAgICAgICAgICAoQVQ5MUNfUElPX1BCMjUpIC8vICBUaW1lciBDb3VudGVyIDEgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQQ0KKyNkZWZpbmUgQVQ5MUNfUEIyNV9EVFIxICAgICAgICAgICAoQVQ5MUNfUElPX1BCMjUpIC8vICBVU0FSVCAxIERhdGEgVGVybWluYWwgcmVhZHkNCisjZGVmaW5lIEFUOTFDX1BJT19QQjI2ICAgICAgICAgICAgKDEgPDwgMjYpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMjYNCisjZGVmaW5lIEFUOTFDX1BCMjZfVElPQjEgICAgICAgICAgKEFUOTFDX1BJT19QQjI2KSAvLyAgVGltZXIgQ291bnRlciAxIE11bHRpcHVycG9zZSBUaW1lciBJL08gUGluIEINCisjZGVmaW5lIEFUOTFDX1BCMjZfUkkxICAgICAgICAgICAgKEFUOTFDX1BJT19QQjI2KSAvLyAgVVNBUlQgMSBSaW5nIEluZGljYXRvcg0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCMjcgICAgICAgICAgICAoMSA8PCAyNykgLy8gUGluIENvbnRyb2xsZWQgYnkgUEIyNw0KKyNkZWZpbmUgQVQ5MUNfUEIyN19USU9BMiAgICAgICAgICAoQVQ5MUNfUElPX1BCMjcpIC8vICBUaW1lciBDb3VudGVyIDIgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQQ0KKyNkZWZpbmUgQVQ5MUNfUEIyN19QV00wICAgICAgICAgICAoQVQ5MUNfUElPX1BCMjcpIC8vICBQV00gQ2hhbm5lbCAwDQorI2RlZmluZSBBVDkxQ19QSU9fUEIyOCAgICAgICAgICAgICgxIDw8IDI4KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjI4DQorI2RlZmluZSBBVDkxQ19QQjI4X1RJT0IyICAgICAgICAgIChBVDkxQ19QSU9fUEIyOCkgLy8gIFRpbWVyIENvdW50ZXIgMiBNdWx0aXB1cnBvc2UgVGltZXIgSS9PIFBpbiBCDQorI2RlZmluZSBBVDkxQ19QQjI4X1BXTTEgICAgICAgICAgIChBVDkxQ19QSU9fUEIyOCkgLy8gIFBXTSBDaGFubmVsIDENCisjZGVmaW5lIEFUOTFDX1BJT19QQjI5ICAgICAgICAgICAgKDEgPDwgMjkpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCMjkNCisjZGVmaW5lIEFUOTFDX1BCMjlfUENLMSAgICAgICAgICAgKEFUOTFDX1BJT19QQjI5KSAvLyAgUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMQ0KKyNkZWZpbmUgQVQ5MUNfUEIyOV9QV00yICAgICAgICAgICAoQVQ5MUNfUElPX1BCMjkpIC8vICBQV00gQ2hhbm5lbCAyDQorI2RlZmluZSBBVDkxQ19QSU9fUEIzICAgICAgICAgICAgICgxIDw8ICAzKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjMNCisjZGVmaW5lIEFUOTFDX1BCM19FVFgxICAgICAgICAgICAgKEFUOTFDX1BJT19QQjMpIC8vICBFdGhlcm5ldCBNQUMgVHJhbnNtaXQgRGF0YSAxDQorI2RlZmluZSBBVDkxQ19QSU9fUEIzMCAgICAgICAgICAgICgxIDw8IDMwKSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjMwDQorI2RlZmluZSBBVDkxQ19QQjMwX1BDSzIgICAgICAgICAgIChBVDkxQ19QSU9fUEIzMCkgLy8gIFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDINCisjZGVmaW5lIEFUOTFDX1BCMzBfUFdNMyAgICAgICAgICAgKEFUOTFDX1BJT19QQjMwKSAvLyAgUFdNIENoYW5uZWwgMw0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCNCAgICAgICAgICAgICAoMSA8PCAgNCkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEI0DQorI2RlZmluZSBBVDkxQ19QQjRfRUNSU19FQ1JTRFYgICAgIChBVDkxQ19QSU9fUEI0KSAvLyAgRXRoZXJuZXQgTUFDIENhcnJpZXIgU2Vuc2UvQ2FycmllciBTZW5zZSBhbmQgRGF0YSBWYWxpZA0KKyNkZWZpbmUgQVQ5MUNfUElPX1BCNSAgICAgICAgICAgICAoMSA8PCAgNSkgLy8gUGluIENvbnRyb2xsZWQgYnkgUEI1DQorI2RlZmluZSBBVDkxQ19QQjVfRVJYMCAgICAgICAgICAgIChBVDkxQ19QSU9fUEI1KSAvLyAgRXRoZXJuZXQgTUFDIFJlY2VpdmUgRGF0YSAwDQorI2RlZmluZSBBVDkxQ19QSU9fUEI2ICAgICAgICAgICAgICgxIDw8ICA2KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjYNCisjZGVmaW5lIEFUOTFDX1BCNl9FUlgxICAgICAgICAgICAgKEFUOTFDX1BJT19QQjYpIC8vICBFdGhlcm5ldCBNQUMgUmVjZWl2ZSBEYXRhIDENCisjZGVmaW5lIEFUOTFDX1BJT19QQjcgICAgICAgICAgICAgKDEgPDwgIDcpIC8vIFBpbiBDb250cm9sbGVkIGJ5IFBCNw0KKyNkZWZpbmUgQVQ5MUNfUEI3X0VSWEVSICAgICAgICAgICAoQVQ5MUNfUElPX1BCNykgLy8gIEV0aGVybmV0IE1BQyBSZWNlaXZlIEVycm9yDQorI2RlZmluZSBBVDkxQ19QSU9fUEI4ICAgICAgICAgICAgICgxIDw8ICA4KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjgNCisjZGVmaW5lIEFUOTFDX1BCOF9FTURDICAgICAgICAgICAgKEFUOTFDX1BJT19QQjgpIC8vICBFdGhlcm5ldCBNQUMgTWFuYWdlbWVudCBEYXRhIENsb2NrDQorI2RlZmluZSBBVDkxQ19QSU9fUEI5ICAgICAgICAgICAgICgxIDw8ICA5KSAvLyBQaW4gQ29udHJvbGxlZCBieSBQQjkNCisjZGVmaW5lIEFUOTFDX1BCOV9FTURJTyAgICAgICAgICAgKEFUOTFDX1BJT19QQjkpIC8vICBFdGhlcm5ldCBNQUMgTWFuYWdlbWVudCBEYXRhIElucHV0L091dHB1dA0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgICBQRVJJUEhFUkFMIElEIERFRklOSVRJT05TIEZPUiBBVDkxU0FNN1gyNTYgKi8NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfRklRICAgICAgICAgICAgKCAwICkgIC8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChGSVEpICovDQotI2RlZmluZSBBVDkxQ19JRF9TWVMgICAgICAgICAgICAoIDEgKSAgLyogU3lzdGVtIFBlcmlwaGVyYWwgKi8NCi0jZGVmaW5lIEFUOTFDX0lEX1BJT0EgICAgICAgICAgICggMiApICAvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEEgKi8NCi0jZGVmaW5lIEFUOTFDX0lEX1BJT0IgICAgICAgICAgICggMyApICAvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEIgKi8NCi0jZGVmaW5lIEFUOTFDX0lEX1NQSTAgICAgICAgICAgICggNCApICAvKiBTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgMCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfU1BJMSAgICAgICAgICAgKCA1ICkgIC8qIFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSAxICovDQotI2RlZmluZSBBVDkxQ19JRF9VUzAgICAgICAgICAgICAoIDYgKSAgLyogVVNBUlQgMCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfVVMxICAgICAgICAgICAgKCA3ICkgIC8qIFVTQVJUIDEgKi8NCi0jZGVmaW5lIEFUOTFDX0lEX1NTQyAgICAgICAgICAgICggOCApICAvKiBTZXJpYWwgU3luY2hyb25vdXMgQ29udHJvbGxlciAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfVFdJICAgICAgICAgICAgKCA5ICkgIC8qIFR3by1XaXJlIEludGVyZmFjZSAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfUFdNQyAgICAgICAgICAgKCAxMCApIC8qIFBXTSBDb250cm9sbGVyICovDQotI2RlZmluZSBBVDkxQ19JRF9VRFAgICAgICAgICAgICAoIDExICkgLyogVVNCIERldmljZSBQb3J0ICovDQotI2RlZmluZSBBVDkxQ19JRF9UQzAgICAgICAgICAgICAoIDEyICkgLyogVGltZXIgQ291bnRlciAwICovDQotI2RlZmluZSBBVDkxQ19JRF9UQzEgICAgICAgICAgICAoIDEzICkgLyogVGltZXIgQ291bnRlciAxICovDQotI2RlZmluZSBBVDkxQ19JRF9UQzIgICAgICAgICAgICAoIDE0ICkgLyogVGltZXIgQ291bnRlciAyICovDQotI2RlZmluZSBBVDkxQ19JRF9DQU4gICAgICAgICAgICAoIDE1ICkgLyogQ29udHJvbCBBcmVhIE5ldHdvcmsgQ29udHJvbGxlciAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfRU1BQyAgICAgICAgICAgKCAxNiApIC8qIEV0aGVybmV0IE1BQyAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfQURDICAgICAgICAgICAgKCAxNyApIC8qIEFuYWxvZy10by1EaWdpdGFsIENvbnZlcnRlciAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfQUVTICAgICAgICAgICAgKCAxOCApIC8qIEFkdmFuY2VkIEVuY3J5cHRpb24gU3RhbmRhcmQgMTI4LWJpdCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfVERFUyAgICAgICAgICAgKCAxOSApIC8qIFRyaXBsZSBEYXRhIEVuY3J5cHRpb24gU3RhbmRhcmQgKi8NCi0jZGVmaW5lIEFUOTFDX0lEXzIwX1Jlc2VydmVkICAgICggMjAgKSAvKiBSZXNlcnZlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfMjFfUmVzZXJ2ZWQgICAgKCAyMSApIC8qIFJlc2VydmVkICovDQotI2RlZmluZSBBVDkxQ19JRF8yMl9SZXNlcnZlZCAgICAoIDIyICkgLyogUmVzZXJ2ZWQgKi8NCi0jZGVmaW5lIEFUOTFDX0lEXzIzX1Jlc2VydmVkICAgICggMjMgKSAvKiBSZXNlcnZlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfMjRfUmVzZXJ2ZWQgICAgKCAyNCApIC8qIFJlc2VydmVkICovDQotI2RlZmluZSBBVDkxQ19JRF8yNV9SZXNlcnZlZCAgICAoIDI1ICkgLyogUmVzZXJ2ZWQgKi8NCi0jZGVmaW5lIEFUOTFDX0lEXzI2X1Jlc2VydmVkICAgICggMjYgKSAvKiBSZXNlcnZlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfMjdfUmVzZXJ2ZWQgICAgKCAyNyApIC8qIFJlc2VydmVkICovDQotI2RlZmluZSBBVDkxQ19JRF8yOF9SZXNlcnZlZCAgICAoIDI4ICkgLyogUmVzZXJ2ZWQgKi8NCi0jZGVmaW5lIEFUOTFDX0lEXzI5X1Jlc2VydmVkICAgICggMjkgKSAvKiBSZXNlcnZlZCAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfSVJRMCAgICAgICAgICAgKCAzMCApIC8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChJUlEwKSAqLw0KLSNkZWZpbmUgQVQ5MUNfSURfSVJRMSAgICAgICAgICAgKCAzMSApIC8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChJUlExKSAqLw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgICBQRVJJUEhFUkFMIElEIERFRklOSVRJT05TIEZPUiBBVDkxU0FNN1gyNTYNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyNkZWZpbmUgQVQ5MUNfSURfRklRICAgICAgICAgICAgICAoIDApIC8vIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChGSVEpDQorI2RlZmluZSBBVDkxQ19JRF9TWVMgICAgICAgICAgICAgICggMSkgLy8gU3lzdGVtIFBlcmlwaGVyYWwNCisjZGVmaW5lIEFUOTFDX0lEX1BJT0EgICAgICAgICAgICAgKCAyKSAvLyBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEENCisjZGVmaW5lIEFUOTFDX0lEX1BJT0IgICAgICAgICAgICAgKCAzKSAvLyBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEINCisjZGVmaW5lIEFUOTFDX0lEX1NQSTAgICAgICAgICAgICAgKCA0KSAvLyBTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgMA0KKyNkZWZpbmUgQVQ5MUNfSURfU1BJMSAgICAgICAgICAgICAoIDUpIC8vIFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSAxDQorI2RlZmluZSBBVDkxQ19JRF9VUzAgICAgICAgICAgICAgICggNikgLy8gVVNBUlQgMA0KKyNkZWZpbmUgQVQ5MUNfSURfVVMxICAgICAgICAgICAgICAoIDcpIC8vIFVTQVJUIDENCisjZGVmaW5lIEFUOTFDX0lEX1NTQyAgICAgICAgICAgICAgKCA4KSAvLyBTZXJpYWwgU3luY2hyb25vdXMgQ29udHJvbGxlcg0KKyNkZWZpbmUgQVQ5MUNfSURfVFdJICAgICAgICAgICAgICAoIDkpIC8vIFR3by1XaXJlIEludGVyZmFjZQ0KKyNkZWZpbmUgQVQ5MUNfSURfUFdNQyAgICAgICAgICAgICAoMTApIC8vIFBXTSBDb250cm9sbGVyDQorI2RlZmluZSBBVDkxQ19JRF9VRFAgICAgICAgICAgICAgICgxMSkgLy8gVVNCIERldmljZSBQb3J0DQorI2RlZmluZSBBVDkxQ19JRF9UQzAgICAgICAgICAgICAgICgxMikgLy8gVGltZXIgQ291bnRlciAwDQorI2RlZmluZSBBVDkxQ19JRF9UQzEgICAgICAgICAgICAgICgxMykgLy8gVGltZXIgQ291bnRlciAxDQorI2RlZmluZSBBVDkxQ19JRF9UQzIgICAgICAgICAgICAgICgxNCkgLy8gVGltZXIgQ291bnRlciAyDQorI2RlZmluZSBBVDkxQ19JRF9DQU4gICAgICAgICAgICAgICgxNSkgLy8gQ29udHJvbCBBcmVhIE5ldHdvcmsgQ29udHJvbGxlcg0KKyNkZWZpbmUgQVQ5MUNfSURfRU1BQyAgICAgICAgICAgICAoMTYpIC8vIEV0aGVybmV0IE1BQw0KKyNkZWZpbmUgQVQ5MUNfSURfQURDICAgICAgICAgICAgICAoMTcpIC8vIEFuYWxvZy10by1EaWdpdGFsIENvbnZlcnRlcg0KKyNkZWZpbmUgQVQ5MUNfSURfQUVTICAgICAgICAgICAgICAoMTgpIC8vIEFkdmFuY2VkIEVuY3J5cHRpb24gU3RhbmRhcmQgMTI4LWJpdA0KKyNkZWZpbmUgQVQ5MUNfSURfVERFUyAgICAgICAgICAgICAoMTkpIC8vIFRyaXBsZSBEYXRhIEVuY3J5cHRpb24gU3RhbmRhcmQNCisjZGVmaW5lIEFUOTFDX0lEXzIwX1Jlc2VydmVkICAgICAgKDIwKSAvLyBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfSURfMjFfUmVzZXJ2ZWQgICAgICAoMjEpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yMl9SZXNlcnZlZCAgICAgICgyMikgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzIzX1Jlc2VydmVkICAgICAgKDIzKSAvLyBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfSURfMjRfUmVzZXJ2ZWQgICAgICAoMjQpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yNV9SZXNlcnZlZCAgICAgICgyNSkgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzI2X1Jlc2VydmVkICAgICAgKDI2KSAvLyBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfSURfMjdfUmVzZXJ2ZWQgICAgICAoMjcpIC8vIFJlc2VydmVkDQorI2RlZmluZSBBVDkxQ19JRF8yOF9SZXNlcnZlZCAgICAgICgyOCkgLy8gUmVzZXJ2ZWQNCisjZGVmaW5lIEFUOTFDX0lEXzI5X1Jlc2VydmVkICAgICAgKDI5KSAvLyBSZXNlcnZlZA0KKyNkZWZpbmUgQVQ5MUNfSURfSVJRMCAgICAgICAgICAgICAoMzApIC8vIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChJUlEwKQ0KKyNkZWZpbmUgQVQ5MUNfSURfSVJRMSAgICAgICAgICAgICAoMzEpIC8vIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChJUlExKQ0KIA0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyogICAgICAgICAgICAgICBCQVNFIEFERFJFU1MgREVGSU5JVElPTlMgRk9SIEFUOTFTQU03WDI1NiAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1NZUyAgICAgICAgICggMHhGRkZGRjAwMCApICAvKiAoU1lTKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfQUlDICAgICAgICAgKCAweEZGRkZGMDAwICkgIC8qIChBSUMpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfREJHVSAgICAoIDB4RkZGRkYzMDAgKSAgLyogKFBEQ19EQkdVKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfREJHVSAgICAgICAgKCAweEZGRkZGMjAwICkgIC8qIChEQkdVKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfUElPQSAgICAgICAgKCAweEZGRkZGNDAwICkgIC8qIChQSU9BKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfUElPQiAgICAgICAgKCAweEZGRkZGNjAwICkgIC8qIChQSU9CKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfQ0tHUiAgICAgICAgKCAweEZGRkZGQzIwICkgIC8qIChDS0dSKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfUE1DICAgICAgICAgKCAweEZGRkZGQzAwICkgIC8qIChQTUMpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9SU1RDICAgICAgICAoIDB4RkZGRkZEMDAgKSAgLyogKFJTVEMpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9SVFRDICAgICAgICAoIDB4RkZGRkZEMjAgKSAgLyogKFJUVEMpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9QSVRDICAgICAgICAoIDB4RkZGRkZEMzAgKSAgLyogKFBJVEMpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9XRFRDICAgICAgICAoIDB4RkZGRkZENDAgKSAgLyogKFdEVEMpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9WUkVHICAgICAgICAoIDB4RkZGRkZENjAgKSAgLyogKFZSRUcpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9NQyAgICAgICAgICAoIDB4RkZGRkZGMDAgKSAgLyogKE1DKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfUERDX1NQSTEgICAgKCAweEZGRkU0MTAwICkgIC8qIChQRENfU1BJMSkgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1NQSTEgICAgICAgICggMHhGRkZFNDAwMCApICAvKiAoU1BJMSkgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19TUEkwICAgICggMHhGRkZFMDEwMCApICAvKiAoUERDX1NQSTApIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9TUEkwICAgICAgICAoIDB4RkZGRTAwMDAgKSAgLyogKFNQSTApIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfVVMxICAgICAoIDB4RkZGQzQxMDAgKSAgLyogKFBEQ19VUzEpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9VUzEgICAgICAgICAoIDB4RkZGQzQwMDAgKSAgLyogKFVTMSkgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19VUzAgICAgICggMHhGRkZDMDEwMCApICAvKiAoUERDX1VTMCkgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1VTMCAgICAgICAgICggMHhGRkZDMDAwMCApICAvKiAoVVMwKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfUERDX1NTQyAgICAgKCAweEZGRkQ0MTAwICkgIC8qIChQRENfU1NDKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfU1NDICAgICAgICAgKCAweEZGRkQ0MDAwICkgIC8qIChTU0MpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9UV0kgICAgICAgICAoIDB4RkZGQjgwMDAgKSAgLyogKFRXSSkgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1BXTUNfQ0gzICAgICggMHhGRkZDQzI2MCApICAvKiAoUFdNQ19DSDMpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9QV01DX0NIMiAgICAoIDB4RkZGQ0MyNDAgKSAgLyogKFBXTUNfQ0gyKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfUFdNQ19DSDEgICAgKCAweEZGRkNDMjIwICkgIC8qIChQV01DX0NIMSkgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1BXTUNfQ0gwICAgICggMHhGRkZDQzIwMCApICAvKiAoUFdNQ19DSDApIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9QV01DICAgICAgICAoIDB4RkZGQ0MwMDAgKSAgLyogKFBXTUMpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9VRFAgICAgICAgICAoIDB4RkZGQjAwMDAgKSAgLyogKFVEUCkgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1RDMCAgICAgICAgICggMHhGRkZBMDAwMCApICAvKiAoVEMwKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfVEMxICAgICAgICAgKCAweEZGRkEwMDQwICkgIC8qIChUQzEpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9UQzIgICAgICAgICAoIDB4RkZGQTAwODAgKSAgLyogKFRDMikgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1RDQiAgICAgICAgICggMHhGRkZBMDAwMCApICAvKiAoVENCKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfQ0FOX01CMCAgICAgKCAweEZGRkQwMjAwICkgIC8qIChDQU5fTUIwKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfQ0FOX01CMSAgICAgKCAweEZGRkQwMjIwICkgIC8qIChDQU5fTUIxKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfQ0FOX01CMiAgICAgKCAweEZGRkQwMjQwICkgIC8qIChDQU5fTUIyKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfQ0FOX01CMyAgICAgKCAweEZGRkQwMjYwICkgIC8qIChDQU5fTUIzKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfQ0FOX01CNCAgICAgKCAweEZGRkQwMjgwICkgIC8qIChDQU5fTUI0KSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfQ0FOX01CNSAgICAgKCAweEZGRkQwMkEwICkgIC8qIChDQU5fTUI1KSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfQ0FOX01CNiAgICAgKCAweEZGRkQwMkMwICkgIC8qIChDQU5fTUI2KSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfQ0FOX01CNyAgICAgKCAweEZGRkQwMkUwICkgIC8qIChDQU5fTUI3KSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfQ0FOICAgICAgICAgKCAweEZGRkQwMDAwICkgIC8qIChDQU4pIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9FTUFDICAgICAgICAoIDB4RkZGREMwMDAgKSAgLyogKEVNQUMpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfQURDICAgICAoIDB4RkZGRDgxMDAgKSAgLyogKFBEQ19BREMpIEJhc2UgQWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfQkFTRV9BREMgICAgICAgICAoIDB4RkZGRDgwMDAgKSAgLyogKEFEQykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19BRVMgICAgICggMHhGRkZBNDEwMCApICAvKiAoUERDX0FFUykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX0FFUyAgICAgICAgICggMHhGRkZBNDAwMCApICAvKiAoQUVTKSBCYXNlIEFkZHJlc3MgKi8NCi0jZGVmaW5lIEFUOTFDX0JBU0VfUERDX1RERVMgICAgKCAweEZGRkE4MTAwICkgIC8qIChQRENfVERFUykgQmFzZSBBZGRyZXNzICovDQotI2RlZmluZSBBVDkxQ19CQVNFX1RERVMgICAgICAgICggMHhGRkZBODAwMCApICAvKiAoVERFUykgQmFzZSBBZGRyZXNzICovDQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLyAgICAgICAgICAgICAgIEJBU0UgQUREUkVTUyBERUZJTklUSU9OUyBGT1IgQVQ5MVNBTTdYMjU2DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisjZGVmaW5lIEFUOTFDX0JBU0VfU1lTICAgICAgICAgICAgKDB4RkZGRkYwMDApIC8vIChTWVMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9BSUMgICAgICAgICAgICAoMHhGRkZGRjAwMCkgLy8gKEFJQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19EQkdVICAgICAgICgweEZGRkZGMzAwKSAvLyAoUERDX0RCR1UpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9EQkdVICAgICAgICAgICAoMHhGRkZGRjIwMCkgLy8gKERCR1UpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QSU9BICAgICAgICAgICAoMHhGRkZGRjQwMCkgLy8gKFBJT0EpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QSU9CICAgICAgICAgICAoMHhGRkZGRjYwMCkgLy8gKFBJT0IpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DS0dSICAgICAgICAgICAoMHhGRkZGRkMyMCkgLy8gKENLR1IpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QTUMgICAgICAgICAgICAoMHhGRkZGRkMwMCkgLy8gKFBNQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1JTVEMgICAgICAgICAgICgweEZGRkZGRDAwKSAvLyAoUlNUQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1JUVEMgICAgICAgICAgICgweEZGRkZGRDIwKSAvLyAoUlRUQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BJVEMgICAgICAgICAgICgweEZGRkZGRDMwKSAvLyAoUElUQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1dEVEMgICAgICAgICAgICgweEZGRkZGRDQwKSAvLyAoV0RUQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1ZSRUcgICAgICAgICAgICgweEZGRkZGRDYwKSAvLyAoVlJFRykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX01DICAgICAgICAgICAgICgweEZGRkZGRjAwKSAvLyAoTUMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfU1BJMSAgICAgICAoMHhGRkZFNDEwMCkgLy8gKFBEQ19TUEkxKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfU1BJMSAgICAgICAgICAgKDB4RkZGRTQwMDApIC8vIChTUEkxKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUERDX1NQSTAgICAgICAgKDB4RkZGRTAxMDApIC8vIChQRENfU1BJMCkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1NQSTAgICAgICAgICAgICgweEZGRkUwMDAwKSAvLyAoU1BJMCkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19VUzEgICAgICAgICgweEZGRkM0MTAwKSAvLyAoUERDX1VTMSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1VTMSAgICAgICAgICAgICgweEZGRkM0MDAwKSAvLyAoVVMxKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUERDX1VTMCAgICAgICAgKDB4RkZGQzAxMDApIC8vIChQRENfVVMwKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfVVMwICAgICAgICAgICAgKDB4RkZGQzAwMDApIC8vIChVUzApIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfU1NDICAgICAgICAoMHhGRkZENDEwMCkgLy8gKFBEQ19TU0MpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9TU0MgICAgICAgICAgICAoMHhGRkZENDAwMCkgLy8gKFNTQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1RXSSAgICAgICAgICAgICgweEZGRkI4MDAwKSAvLyAoVFdJKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUFdNQ19DSDMgICAgICAgKDB4RkZGQ0MyNjApIC8vIChQV01DX0NIMykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BXTUNfQ0gyICAgICAgICgweEZGRkNDMjQwKSAvLyAoUFdNQ19DSDIpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QV01DX0NIMSAgICAgICAoMHhGRkZDQzIyMCkgLy8gKFBXTUNfQ0gxKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUFdNQ19DSDAgICAgICAgKDB4RkZGQ0MyMDApIC8vIChQV01DX0NIMCkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BXTUMgICAgICAgICAgICgweEZGRkNDMDAwKSAvLyAoUFdNQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1VEUCAgICAgICAgICAgICgweEZGRkIwMDAwKSAvLyAoVURQKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfVEMwICAgICAgICAgICAgKDB4RkZGQTAwMDApIC8vIChUQzApIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9UQzEgICAgICAgICAgICAoMHhGRkZBMDA0MCkgLy8gKFRDMSkgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1RDMiAgICAgICAgICAgICgweEZGRkEwMDgwKSAvLyAoVEMyKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfVENCICAgICAgICAgICAgKDB4RkZGQTAwMDApIC8vIChUQ0IpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUIwICAgICAgICAoMHhGRkZEMDIwMCkgLy8gKENBTl9NQjApIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUIxICAgICAgICAoMHhGRkZEMDIyMCkgLy8gKENBTl9NQjEpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUIyICAgICAgICAoMHhGRkZEMDI0MCkgLy8gKENBTl9NQjIpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUIzICAgICAgICAoMHhGRkZEMDI2MCkgLy8gKENBTl9NQjMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUI0ICAgICAgICAoMHhGRkZEMDI4MCkgLy8gKENBTl9NQjQpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUI1ICAgICAgICAoMHhGRkZEMDJBMCkgLy8gKENBTl9NQjUpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUI2ICAgICAgICAoMHhGRkZEMDJDMCkgLy8gKENBTl9NQjYpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DQU5fTUI3ICAgICAgICAoMHhGRkZEMDJFMCkgLy8gKENBTl9NQjcpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9DQU4gICAgICAgICAgICAoMHhGRkZEMDAwMCkgLy8gKENBTikgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0VNQUMgICAgICAgICAgICgweEZGRkRDMDAwKSAvLyAoRU1BQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX1BEQ19BREMgICAgICAgICgweEZGRkQ4MTAwKSAvLyAoUERDX0FEQykgQmFzZSBBZGRyZXNzDQorI2RlZmluZSBBVDkxQ19CQVNFX0FEQyAgICAgICAgICAgICgweEZGRkQ4MDAwKSAvLyAoQURDKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfUERDX0FFUyAgICAgICAgKDB4RkZGQTQxMDApIC8vIChQRENfQUVTKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfQUVTICAgICAgICAgICAgKDB4RkZGQTQwMDApIC8vIChBRVMpIEJhc2UgQWRkcmVzcw0KKyNkZWZpbmUgQVQ5MUNfQkFTRV9QRENfVERFUyAgICAgICAoMHhGRkZBODEwMCkgLy8gKFBEQ19UREVTKSBCYXNlIEFkZHJlc3MNCisjZGVmaW5lIEFUOTFDX0JBU0VfVERFUyAgICAgICAgICAgKDB4RkZGQTgwMDApIC8vIChUREVTKSBCYXNlIEFkZHJlc3MNCiANCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qICAgICAgICAgICAgICAgTUVNT1JZIE1BUFBJTkcgREVGSU5JVElPTlMgRk9SIEFUOTFTQU03WDI1NiAqLw0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotI2RlZmluZSBBVDkxQ19JU1JBTSAgICAgICAgICAoIDB4MDAyMDAwMDAgKSAgICAvKiBJbnRlcm5hbCBTUkFNIGJhc2UgYWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfSVNSQU1fU0laRSAgICAgKCAweDAwMDEwMDAwICkgICAgLyogSW50ZXJuYWwgU1JBTSBzaXplIGluIGJ5dGUgKDY0IEtieXRlKSAqLw0KLSNkZWZpbmUgQVQ5MUNfSUZMQVNIICAgICAgICAgKCAweDAwMTAwMDAwICkgICAgLyogSW50ZXJuYWwgUk9NIGJhc2UgYWRkcmVzcyAqLw0KLSNkZWZpbmUgQVQ5MUNfSUZMQVNIX1NJWkUgICAgKCAweDAwMDQwMDAwICkgICAgLyogSW50ZXJuYWwgUk9NIHNpemUgaW4gYnl0ZSAoMjU2IEtieXRlKSAqLw0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8gICAgICAgICAgICAgICBNRU1PUlkgTUFQUElORyBERUZJTklUSU9OUyBGT1IgQVQ5MVNBTTdYMjU2DQorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisjZGVmaW5lIEFUOTFDX0lTUkFNCSAgICAgICAgICAgICAgKDB4MDAyMDAwMDApIC8vIEludGVybmFsIFNSQU0gYmFzZSBhZGRyZXNzDQorI2RlZmluZSBBVDkxQ19JU1JBTV9TSVpFCSAgICAgICAgICgweDAwMDEwMDAwKSAvLyBJbnRlcm5hbCBTUkFNIHNpemUgaW4gYnl0ZSAoNjQgS2J5dGUpDQorI2RlZmluZSBBVDkxQ19JRkxBU0gJICAgICAgICAgICAgICgweDAwMTAwMDAwKSAvLyBJbnRlcm5hbCBST00gYmFzZSBhZGRyZXNzDQorI2RlZmluZSBBVDkxQ19JRkxBU0hfU0laRQkgICAgICAgICgweDAwMDQwMDAwKSAvLyBJbnRlcm5hbCBST00gc2l6ZSBpbiBieXRlICgyNTYgS2J5dGUpDQorDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvSUFSL0F0bWVsU0FNN1M2NC9JU1JfU3VwcG9ydC5oIGIvcG9ydGFibGUvSUFSL0F0bWVsU0FNN1M2NC9JU1JfU3VwcG9ydC5oCmluZGV4IDcyZjRiMTUuLjM2MGZmZjYgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0lBUi9BdG1lbFNBTTdTNjQvSVNSX1N1cHBvcnQuaAorKysgYi9wb3J0YWJsZS9JQVIvQXRtZWxTQU03UzY0L0lTUl9TdXBwb3J0LmgKQEAgLTEsMTIzICsxLDEwNSBAQAotOyAvKg0KLSAgICogOyAqIEZyZWVSVE9TIEtlcm5lbCBWMTAuMy4xDQotICAgKiA7ICogQ29weXJpZ2h0IChDKSAyMDIwIEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuICBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICogOyAqDQotICAgKiA7ICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZg0KLSAgICogOyAqIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluDQotICAgKiA7ICogdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bw0KLSAgICogOyAqIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mDQotICAgKiA7ICogdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLA0KLSAgICogOyAqIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOg0KLSAgICogOyAqDQotICAgKiA7ICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsDQotICAgKiA7ICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4NCi0gICAqIDsgKg0KLSAgICogOyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SDQotICAgKiA7ICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MNCi0gICAqIDsgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1INCi0gICAqIDsgKiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVINCi0gICAqIDsgKiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTg0KLSAgICogOyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuDQotICAgKiA7ICoNCi0gICAqIDsgKiBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZw0KLSAgICogOyAqIGh0dHA6Ly9hd3MuYW1hem9uLmNvbS9mcmVlcnRvcw0KLSAgICogOyAqDQotICAgKiA7ICogMSB0YWIgPT0gNCBzcGFjZXMhDQotICAgKiA7ICovDQorOy8qDQorOyAqIEZyZWVSVE9TIEtlcm5lbCBWMTAuMy4xDQorOyAqIENvcHlyaWdodCAoQykgMjAyMCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCis7ICoNCis7ICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZg0KKzsgKiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbg0KKzsgKiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvDQorOyAqIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mDQorOyAqIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywNCis7ICogc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6DQorOyAqDQorOyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbA0KKzsgKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLg0KKzsgKg0KKzsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUg0KKzsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUw0KKzsgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1INCis7ICogQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSDQorOyAqIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElODQorOyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuDQorOyAqDQorOyAqIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnDQorOyAqIGh0dHA6Ly9hd3MuYW1hem9uLmNvbS9mcmVlcnRvcw0KKzsgKg0KKzsgKiAxIHRhYiA9PSA0IHNwYWNlcyENCis7ICovDQogDQotRVhURVJOIHB4Q3VycmVudFRDQg0KLUVYVEVSTiB1bENyaXRpY2FsTmVzdGluZw0KKwlFWFRFUk4gcHhDdXJyZW50VENCDQorCUVYVEVSTiB1bENyaXRpY2FsTmVzdGluZw0KIA0KLTsNCi1Db250ZXh0IHNhdmUgYW5kIHJlc3RvcmUgbWFjcm8gZGVmaW5pdGlvbnMNCi07DQorOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ow0KKzsgQ29udGV4dCBzYXZlIGFuZCByZXN0b3JlIG1hY3JvIGRlZmluaXRpb25zDQorOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ow0KIA0KIHBvcnRTQVZFX0NPTlRFWFQgTUFDUk8NCiANCi07DQotUHVzaCBSMCBhcyB3ZSBhcmUgZ29pbmcgdG8gdXNlIHRoZSByZWdpc3Rlci4NCi0gICBTVE1EQiBTUCAhLCB7IFIwIH0NCisJOyBQdXNoIFIwIGFzIHdlIGFyZSBnb2luZyB0byB1c2UgdGhlIHJlZ2lzdGVyLg0KKwlTVE1EQglTUCEsIHtSMH0NCiANCi07DQotU2V0IFIwIHRvIHBvaW50IHRvIHRoZSB0YXNrIHN0YWNrIHBvaW50ZXIuDQotICAgU1RNREIgU1AsIHsgU1AgfSBeDQotTk9QDQotU1VCIFNQLCBTUCwgIyA0DQotTERNSUEgU1AgISwgeyBSMCB9DQorCTsgU2V0IFIwIHRvIHBvaW50IHRvIHRoZSB0YXNrIHN0YWNrIHBvaW50ZXIuDQorCVNUTURCCVNQLCB7U1B9Xg0KKwlOT1ANCisJU1VCCQlTUCwgU1AsICM0DQorCUxETUlBCVNQISwge1IwfQ0KIA0KLTsNCi1QdXNoIHRoZSByZXR1cm4gYWRkcmVzcyBvbnRvIHRoZSBzdGFjay4NCi0gICAgICAgICAgU1RNREIgUjAgISwgeyBMUiB9DQorCTsgUHVzaCB0aGUgcmV0dXJuIGFkZHJlc3Mgb250byB0aGUgc3RhY2suDQorCVNUTURCCVIwISwge0xSfQ0KIA0KLTsNCisJOyBOb3cgd2UgaGF2ZSBzYXZlZCBMUiB3ZSBjYW4gdXNlIGl0IGluc3RlYWQgb2YgUjAuDQorCU1PVgkJTFIsIFIwDQogDQotTm93IHdlIGhhdmUgc2F2ZWQgTFIgd2UgY2FuIHVzZSBpdCBpbnN0ZWFkIG9mIFIwLg0KLSAgIE1PViBMUiwgUjANCisJOyBQb3AgUjAgc28gd2UgY2FuIHNhdmUgaXQgb250byB0aGUgc3lzdGVtIG1vZGUgc3RhY2suDQorCUxETUlBCVNQISwge1IwfQ0KIA0KLTsNCi1Qb3AgUjAgc28gd2UgY2FuIHNhdmUgaXQgb250byB0aGUgc3lzdGVtIG1vZGUgc3RhY2suDQotICAgTERNSUEgU1AgISwgeyBSMCB9DQorCTsgUHVzaCBhbGwgdGhlIHN5c3RlbSBtb2RlIHJlZ2lzdGVycyBvbnRvIHRoZSB0YXNrIHN0YWNrLg0KKwlTVE1EQglMUiwge1IwLUxSfV4NCisJTk9QDQorCVNVQgkJTFIsIExSLCAjNjANCiANCi07DQotUHVzaCBhbGwgdGhlIHN5c3RlbSBtb2RlIHJlZ2lzdGVycyBvbnRvIHRoZSB0YXNrIHN0YWNrLg0KLSAgIFNUTURCIExSLCB7IFIwIC0gTFIgfSBeDQotTk9QDQotU1VCIExSLCBMUiwgIyA2MA0KKwk7IFB1c2ggdGhlIFNQU1Igb250byB0aGUgdGFzayBzdGFjay4NCisJTVJTCQlSMCwgU1BTUg0KKwlTVE1EQglMUiEsIHtSMH0NCiANCi07DQotUHVzaCB0aGUgU1BTUiBvbnRvIHRoZSB0YXNrIHN0YWNrLg0KLSAgIE1SUyBSMCwgU1BTUg0KLVNUTURCIExSICEsIHsgUjAgfQ0KKwlMRFIJCVIwLCA9dWxDcml0aWNhbE5lc3RpbmcNCisJTERSCQlSMCwgW1IwXQ0KKwlTVE1EQglMUiEsIHtSMH0NCiANCi1MRFIgUjAsID0gdWxDcml0aWNhbE5lc3RpbmcNCi0gICAgICAgICAgTERSIFIwLCBbIFIwIF0NCi1TVE1EQiBMUiAhLCB7IFIwIH0NCisJOyBTdG9yZSB0aGUgbmV3IHRvcCBvZiBzdGFjayBmb3IgdGhlIHRhc2suDQorCUxEUgkJUjEsID1weEN1cnJlbnRUQ0INCisJTERSCQlSMCwgW1IxXQ0KKwlTVFIJCUxSLCBbUjBdDQogDQotOw0KLVN0b3JlIHRoZSBuZXcgdG9wIG9mIHN0YWNrIGZvciB0aGUgdGFzay4NCi0gICBMRFIgUjEsID0gcHhDdXJyZW50VENCDQotICAgICAgICAgICAgIExEUiBSMCwgWyBSMSBdDQotU1RSIExSLCBbIFIwIF0NCi0NCi1FTkRNDQorCUVORE0NCiANCiANCiBwb3J0UkVTVE9SRV9DT05URVhUIE1BQ1JPDQogDQotOw0KLVNldCB0aGUgTFIgdG8gdGhlIHRhc2sgc3RhY2suDQotICAgTERSIFIxLCA9IHB4Q3VycmVudFRDQg0KLSAgICAgICAgICAgICBMRFIgUjAsIFsgUjEgXQ0KLUxEUiBMUiwgWyBSMCBdDQorCTsgU2V0IHRoZSBMUiB0byB0aGUgdGFzayBzdGFjay4NCisJTERSCQlSMSwgPXB4Q3VycmVudFRDQg0KKwlMRFIJCVIwLCBbUjFdDQorCUxEUgkJTFIsIFtSMF0NCiANCi07DQotVGhlIGNyaXRpY2FsIG5lc3RpbmcgZGVwdGggaXMgdGhlIGZpcnN0IGl0ZW0gb24gdGhlIHN0YWNrLg0KLSAgIDsNCi1Mb2FkIGl0IGludG8gdGhlIHVsQ3JpdGljYWxOZXN0aW5nIHZhcmlhYmxlLg0KLSAgIExEUiBSMCwgPSB1bENyaXRpY2FsTmVzdGluZw0KLSAgICAgICAgICAgICBMRE1GRCBMUiAhLCB7IFIxIH0NCi1TVFIgUjEsIFsgUjAgXQ0KKwk7IFRoZSBjcml0aWNhbCBuZXN0aW5nIGRlcHRoIGlzIHRoZSBmaXJzdCBpdGVtIG9uIHRoZSBzdGFjay4NCisJOyBMb2FkIGl0IGludG8gdGhlIHVsQ3JpdGljYWxOZXN0aW5nIHZhcmlhYmxlLg0KKwlMRFIJCVIwLCA9dWxDcml0aWNhbE5lc3RpbmcNCisJTERNRkQJTFIhLCB7UjF9DQorCVNUUgkJUjEsIFtSMF0NCiANCi07DQotR2V0IHRoZSBTUFNSIGZyb20gdGhlIHN0YWNrLg0KLSAgIExETUZEIExSICEsIHsgUjAgfQ0KLU1TUiBTUFNSX2N4c2YsIFIwDQorCTsgR2V0IHRoZSBTUFNSIGZyb20gdGhlIHN0YWNrLg0KKwlMRE1GRAlMUiEsIHtSMH0NCisJTVNSCQlTUFNSX2N4c2YsIFIwDQogDQotOw0KLVJlc3RvcmUgYWxsIHN5c3RlbSBtb2RlIHJlZ2lzdGVycyBmb3IgdGhlIHRhc2suDQotICAgTERNRkQgTFIsIHsgUjAgLSBSMTQgfSBeDQotTk9QDQorCTsgUmVzdG9yZSBhbGwgc3lzdGVtIG1vZGUgcmVnaXN0ZXJzIGZvciB0aGUgdGFzay4NCisJTERNRkQJTFIsIHtSMC1SMTR9Xg0KKwlOT1ANCiANCi07DQotUmVzdG9yZSB0aGUgcmV0dXJuIGFkZHJlc3MuDQotICAgICAgICAgIExEUiBMUiwgWyBMUiwgIyArIDYwIF0NCisJOyBSZXN0b3JlIHRoZSByZXR1cm4gYWRkcmVzcy4NCisJTERSCQlMUiwgW0xSLCAjKzYwXQ0KIA0KLTsNCisJOyBBbmQgcmV0dXJuIC0gY29ycmVjdGluZyB0aGUgb2Zmc2V0IGluIHRoZSBMUiB0byBvYnRhaW4gdGhlDQorCTsgY29ycmVjdCBhZGRyZXNzLg0KKwlTVUJTCVBDLCBMUiwgIzQNCiANCi1BbmQgcmV0dXJuIC1jb3JyZWN0aW5nIHRoZSBvZmZzZXQgaW4gdGhlIExSIHRvIG9idGFpbiB0aGUNCi07DQorCUVORE0NCiANCi1jb3JyZWN0IGFkZHJlc3MuDQotICAgU1VCUyBQQywgTFIsICMgNA0KLQ0KLUVORE0NCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9JQVIvQXRtZWxTQU03UzY0L2xpYl9BVDkxU0FNN1M2NC5oIGIvcG9ydGFibGUvSUFSL0F0bWVsU0FNN1M2NC9saWJfQVQ5MVNBTTdTNjQuaAppbmRleCBlYWEyMzAxLi45ZDAxMmM0IDEwMDY0NAotLS0gYS9wb3J0YWJsZS9JQVIvQXRtZWxTQU03UzY0L2xpYl9BVDkxU0FNN1M2NC5oCisrKyBiL3BvcnRhYmxlL0lBUi9BdG1lbFNBTTdTNjQvbGliX0FUOTFTQU03UzY0LmgKQEAgLTEsMzExMyArMSwzMjY1IEBACi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqICAgICAgICAgQVRNRUwgTWljcm9jb250cm9sbGVyIFNvZnR3YXJlIFN1cHBvcnQgIC0gIFJPVVNTRVQgIC0gKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFRoZSBzb2Z0d2FyZSBpcyBkZWxpdmVyZWQgIkFTIElTIiB3aXRob3V0IHdhcnJhbnR5IG9yIGNvbmRpdGlvbiBvZiBhbnkgKi8NCi0vKioga2luZCwgZWl0aGVyIGV4cHJlc3MsIGltcGxpZWQgb3Igc3RhdHV0b3J5LiBUaGlzIGluY2x1ZGVzIHdpdGhvdXQgKi8NCi0vKiogbGltaXRhdGlvbiBhbnkgd2FycmFudHkgb3IgY29uZGl0aW9uIHdpdGggcmVzcGVjdCB0byBtZXJjaGFudGFiaWxpdHkgb3IgKi8NCi0vKiogZml0bmVzcyBmb3IgYW55IHBhcnRpY3VsYXIgcHVycG9zZSwgb3IgYWdhaW5zdCB0aGUgaW5mcmluZ2VtZW50cyBvZiAqLw0KLS8qKiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9mIG90aGVycy4gKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIEZpbGUgTmFtZSAgICAgICAgICAgOiBsaWJfQVQ5MVNBTTdTNjQuaCAqLw0KLS8qKiBPYmplY3QgICAgICAgICAgICAgIDogQVQ5MVNBTTdTNjQgaW5saW5lZCBmdW5jdGlvbnMgKi8NCi0vKiogR2VuZXJhdGVkICAgICAgICAgICA6IEFUOTEgU1cgQXBwbGljYXRpb24gR3JvdXAgIDA3LzE2LzIwMDQgKDA3OjQzOjA5KSAqLw0KLS8qKiAqLw0KLS8qKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9NQ19TQU0uaC8xLjMvVGh1IE1hciAyNSAxNToxOToxNCAyMDA0Ly8gKi8NCi0vKiogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfcGRjXzEzNjNkLmgvMS4yL1dlZCBGZWIgMTkgMDk6MjU6MjIgMjAwMy8vICovDQotLyoqIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX2RiZ3UuaC8xLjEvRnJpIEphbiAzMSAxMjoxODo0MCAyMDAzLy8gKi8NCi0vKiogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfc3NjLmgvMS40L0ZyaSBKYW4gMzEgMTI6MTk6MjAgMjAwMy8vICovDQotLyoqIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3NwaTIuaC8xLjEvTW9uIEF1ZyAyNSAxMzoyMzo1MiAyMDAzLy8gKi8NCi0vKiogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfUFdNX1NBTS5oLzEuMy9UaHUgSmFuIDIyIDEwOjEwOjUwIDIwMDQvLyAqLw0KLS8qKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl90Y18xNzUzYi5oLzEuMS9GcmkgSmFuIDMxIDEyOjIwOjAyIDIwMDMvLyAqLw0KLS8qKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9wbWNfU0FNLmgvMS42L1R1ZSBBcHIgMjcgMTM6NTM6NTIgMjAwNC8vICovDQotLyoqIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX2FkYy5oLzEuNi9GcmkgT2N0IDE3IDA4OjEyOjM4IDIwMDMvLyAqLw0KLS8qKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9waW8uaC8xLjMvRnJpIEphbiAzMSAxMjoxODo1NiAyMDAzLy8gKi8NCi0vKiogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfdHdpLmgvMS4yL0ZyaSBKYW4gMzEgMTI6MTk6MzggMjAwMy8vICovDQotLyoqIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3VzYXJ0LmgvMS41L1RodSBOb3YgMjEgMTY6MDE6NTQgMjAwMi8vICovDQotLyoqIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3VkcC5oLzEuMy9GcmkgSmFuIDMxIDEyOjE5OjQ4IDIwMDMvLyAqLw0KLS8qKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9haWMuaC8xLjMvRnJpIEp1bCAxMiAwNzo0NjoxMiAyMDAyLy8gKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiAgICAgICAgIEFUTUVMIE1pY3JvY29udHJvbGxlciBTb2Z0d2FyZSBTdXBwb3J0ICAtICBST1VTU0VUICAtDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBUaGUgc29mdHdhcmUgaXMgZGVsaXZlcmVkICJBUyBJUyIgd2l0aG91dCB3YXJyYW50eSBvciBjb25kaXRpb24gb2YgYW55DQorLy8qIGtpbmQsIGVpdGhlciBleHByZXNzLCBpbXBsaWVkIG9yIHN0YXR1dG9yeS4gVGhpcyBpbmNsdWRlcyB3aXRob3V0DQorLy8qIGxpbWl0YXRpb24gYW55IHdhcnJhbnR5IG9yIGNvbmRpdGlvbiB3aXRoIHJlc3BlY3QgdG8gbWVyY2hhbnRhYmlsaXR5IG9yDQorLy8qIGZpdG5lc3MgZm9yIGFueSBwYXJ0aWN1bGFyIHB1cnBvc2UsIG9yIGFnYWluc3QgdGhlIGluZnJpbmdlbWVudHMgb2YNCisvLyogaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiBvdGhlcnMuDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBGaWxlIE5hbWUgICAgICAgICAgIDogbGliX0FUOTFTQU03UzY0LmgNCisvLyogT2JqZWN0ICAgICAgICAgICAgICA6IEFUOTFTQU03UzY0IGlubGluZWQgZnVuY3Rpb25zDQorLy8qIEdlbmVyYXRlZCAgICAgICAgICAgOiBBVDkxIFNXIEFwcGxpY2F0aW9uIEdyb3VwICAwNy8xNi8yMDA0ICgwNzo0MzowOSkNCisvLyoNCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfTUNfU0FNLmgvMS4zL1RodSBNYXIgMjUgMTU6MTk6MTQgMjAwNC8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3BkY18xMzYzZC5oLzEuMi9XZWQgRmViIDE5IDA5OjI1OjIyIDIwMDMvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9kYmd1LmgvMS4xL0ZyaSBKYW4gMzEgMTI6MTg6NDAgMjAwMy8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3NzYy5oLzEuNC9GcmkgSmFuIDMxIDEyOjE5OjIwIDIwMDMvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9zcGkyLmgvMS4xL01vbiBBdWcgMjUgMTM6MjM6NTIgMjAwMy8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX1BXTV9TQU0uaC8xLjMvVGh1IEphbiAyMiAxMDoxMDo1MCAyMDA0Ly8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfdGNfMTc1M2IuaC8xLjEvRnJpIEphbiAzMSAxMjoyMDowMiAyMDAzLy8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfcG1jX1NBTS5oLzEuNi9UdWUgQXByIDI3IDEzOjUzOjUyIDIwMDQvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9hZGMuaC8xLjYvRnJpIE9jdCAxNyAwODoxMjozOCAyMDAzLy8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfcGlvLmgvMS4zL0ZyaSBKYW4gMzEgMTI6MTg6NTYgMjAwMy8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3R3aS5oLzEuMi9GcmkgSmFuIDMxIDEyOjE5OjM4IDIwMDMvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl91c2FydC5oLzEuNS9UaHUgTm92IDIxIDE2OjAxOjU0IDIwMDIvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl91ZHAuaC8xLjMvRnJpIEphbiAzMSAxMjoxOTo0OCAyMDAzLy8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfYWljLmgvMS4zL0ZyaSBKdWwgMTIgMDc6NDY6MTIgMjAwMi8vDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIA0KICNpZm5kZWYgbGliX0FUOTFTQU03UzY0X0gNCiAjZGVmaW5lIGxpYl9BVDkxU0FNN1M2NF9IDQogDQogLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0qICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBNQw0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgTUMNCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KIA0KLSNkZWZpbmUgQVQ5MUNfTUNfQ09SUkVDVF9LRVkgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NUEgPDwgMjQgKSAvKiAoTUMpIENvcnJlY3QgUHJvdGVjdCBLZXkgKi8NCisjZGVmaW5lIEFUOTFDX01DX0NPUlJFQ1RfS0VZICAoKHVuc2lnbmVkIGludCkgMHg1QSA8PCAyNCkgLy8gKE1DKSBDb3JyZWN0IFByb3RlY3QgS2V5DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfTUNfUmVtYXAgKi8NCi0vKiogXGJyaWVmIE1ha2UgUmVtYXAgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9NQ19SZW1hcCggdm9pZCApIC8qICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfTUNfUmVtYXANCisvLyogXGJyaWVmIE1ha2UgUmVtYXANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9NQ19SZW1hcCAodm9pZCkgICAgIC8vICANCiB7DQotICAgIEFUOTFQU19NQyBwTUMgPSAoIEFUOTFQU19NQyApIEFUOTFDX0JBU0VfTUM7DQotDQorICAgIEFUOTFQU19NQyBwTUMgPSAoQVQ5MVBTX01DKSBBVDkxQ19CQVNFX01DOw0KKyAgICANCiAgICAgcE1DLT5NQ19SQ1IgPSBBVDkxQ19NQ19SQ0I7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX01DX0VGQ19DZmdNb2RlUmVnICovDQotLyoqIFxicmllZiBDb25maWd1cmUgdGhlIEVGQyBNb2RlIFJlZ2lzdGVyIG9mIHRoZSBNQyBjb250cm9sbGVyICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfTUNfRUZDX0NmZ01vZGVSZWcoIEFUOTFQU19NQyBwTUMsICAgICAgLyogcG9pbnRlciB0byBhIE1DIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbW9kZSApIC8qIG1vZGUgcmVnaXN0ZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9NQ19FRkNfQ2ZnTW9kZVJlZw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIHRoZSBFRkMgTW9kZSBSZWdpc3RlciBvZiB0aGUgTUMgY29udHJvbGxlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX01DX0VGQ19DZmdNb2RlUmVnICgNCisJQVQ5MVBTX01DIHBNQywgLy8gcG9pbnRlciB0byBhIE1DIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IG1vZGUpICAgICAgICAvLyBtb2RlIHJlZ2lzdGVyIA0KIHsNCi0gICAgLyogV3JpdGUgdG8gdGhlIEZNUiByZWdpc3RlciAqLw0KLSAgICBwTUMtPk1DX0ZNUiA9IG1vZGU7DQorCS8vIFdyaXRlIHRvIHRoZSBGTVIgcmVnaXN0ZXINCisJcE1DLT5NQ19GTVIgPSBtb2RlOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9NQ19FRkNfR2V0TW9kZVJlZyAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIE1DIEVGQyBNb2RlIFJlZ3NpdGVyICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9NQ19FRkNfR2V0TW9kZVJlZyggQVQ5MVBTX01DIHBNQyApIC8qIHBvaW50ZXIgdG8gYSBNQyBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfTUNfRUZDX0dldE1vZGVSZWcNCisvLyogXGJyaWVmIFJldHVybiBNQyBFRkMgTW9kZSBSZWdzaXRlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfTUNfRUZDX0dldE1vZGVSZWcoDQorCUFUOTFQU19NQyBwTUMpIC8vIHBvaW50ZXIgdG8gYSBNQyBjb250cm9sbGVyDQogew0KLSAgICByZXR1cm4gcE1DLT5NQ19GTVI7DQorCXJldHVybiBwTUMtPk1DX0ZNUjsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfTUNfRUZDX0NvbXB1dGVGTUNOICovDQotLyoqIFxicmllZiBSZXR1cm4gTUMgRUZDIE1vZGUgUmVnc2l0ZXIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX01DX0VGQ19Db21wdXRlRk1DTiggaW50IG1hc3Rlcl9jbG9jayApIC8qIG1hc3RlciBjbG9jayBpbiBIeiAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX01DX0VGQ19Db21wdXRlRk1DTg0KKy8vKiBcYnJpZWYgUmV0dXJuIE1DIEVGQyBNb2RlIFJlZ3NpdGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9NQ19FRkNfQ29tcHV0ZUZNQ04oDQorCWludCBtYXN0ZXJfY2xvY2spIC8vIG1hc3RlciBjbG9jayBpbiBIeg0KIHsNCi0gICAgcmV0dXJuKCBtYXN0ZXJfY2xvY2sgLyAxMDAwMDAwICsgMiApOw0KKwlyZXR1cm4gKG1hc3Rlcl9jbG9jay8xMDAwMDAwICsyKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfTUNfRUZDX1BlcmZvcm1DbWQgKi8NCi0vKiogXGJyaWVmIFBlcmZvcm0gRUZDIENvbW1hbmQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9NQ19FRkNfUGVyZm9ybUNtZCggQVQ5MVBTX01DIHBNQywgLyogcG9pbnRlciB0byBhIE1DIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdHJhbnNmZXJfY21kICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9NQ19FRkNfUGVyZm9ybUNtZA0KKy8vKiBcYnJpZWYgUGVyZm9ybSBFRkMgQ29tbWFuZA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX01DX0VGQ19QZXJmb3JtQ21kICgNCisJQVQ5MVBTX01DIHBNQywgLy8gcG9pbnRlciB0byBhIE1DIGNvbnRyb2xsZXINCisgICAgdW5zaWduZWQgaW50IHRyYW5zZmVyX2NtZCkNCiB7DQotICAgIHBNQy0+TUNfRkNSID0gdHJhbnNmZXJfY21kOw0KKwlwTUMtPk1DX0ZDUiA9IHRyYW5zZmVyX2NtZDsJDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX01DX0VGQ19HZXRTdGF0dXMgKi8NCi0vKiogXGJyaWVmIFJldHVybiBNQyBFRkMgU3RhdHVzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9NQ19FRkNfR2V0U3RhdHVzKCBBVDkxUFNfTUMgcE1DICkgLyogcG9pbnRlciB0byBhIE1DIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9NQ19FRkNfR2V0U3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gTUMgRUZDIFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfTUNfRUZDX0dldFN0YXR1cygNCisJQVQ5MVBTX01DIHBNQykgLy8gcG9pbnRlciB0byBhIE1DIGNvbnRyb2xsZXINCiB7DQotICAgIHJldHVybiBwTUMtPk1DX0ZTUjsNCisJcmV0dXJuIHBNQy0+TUNfRlNSOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9NQ19FRkNfSXNJbnRlcnJ1cHRNYXNrZWQgKi8NCi0vKiogXGJyaWVmIFRlc3QgaWYgRUZDIE1DIEludGVycnVwdCBpcyBNYXNrZWQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX01DX0VGQ19Jc0ludGVycnVwdE1hc2tlZCggQVQ5MVBTX01DIHBNQywgICAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgTUMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9NQ19FRkNfSXNJbnRlcnJ1cHRNYXNrZWQNCisvLyogXGJyaWVmIFRlc3QgaWYgRUZDIE1DIEludGVycnVwdCBpcyBNYXNrZWQgDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9NQ19FRkNfSXNJbnRlcnJ1cHRNYXNrZWQoDQorICAgICAgICBBVDkxUFNfTUMgcE1DLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBNQyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCiB7DQotICAgIHJldHVybiggQVQ5MUZfTUNfRUZDX0dldE1vZGVSZWcoIHBNQyApICYgZmxhZyApOw0KKwlyZXR1cm4gKEFUOTFGX01DX0VGQ19HZXRNb2RlUmVnKHBNQykgJiBmbGFnKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfTUNfRUZDX0lzSW50ZXJydXB0U2V0ICovDQotLyoqIFxicmllZiBUZXN0IGlmIEVGQyBNQyBJbnRlcnJ1cHQgaXMgU2V0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9NQ19FRkNfSXNJbnRlcnJ1cHRTZXQoIEFUOTFQU19NQyBwTUMsICAgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIE1DIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfTUNfRUZDX0lzSW50ZXJydXB0U2V0DQorLy8qIFxicmllZiBUZXN0IGlmIEVGQyBNQyBJbnRlcnJ1cHQgaXMgU2V0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9NQ19FRkNfSXNJbnRlcnJ1cHRTZXQoDQorICAgICAgICBBVDkxUFNfTUMgcE1DLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBNQyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCiB7DQotICAgIHJldHVybiggQVQ5MUZfTUNfRUZDX0dldFN0YXR1cyggcE1DICkgJiBmbGFnICk7DQorCXJldHVybiAoQVQ5MUZfTUNfRUZDX0dldFN0YXR1cyhwTUMpICYgZmxhZyk7DQogfQ0KIA0KIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotKiAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgUERDDQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QRENfU2V0TmV4dFJ4ICovDQotLyoqIFxicmllZiBTZXQgdGhlIG5leHQgcmVjZWl2ZSB0cmFuc2ZlciBkZXNjcmlwdG9yICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUERDX1NldE5leHRSeCggQVQ5MVBTX1BEQyBwUERDLCAgICAgLyogXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBhZGRyZXNzLCAgICAgIC8qIFxhcmcgYWRkcmVzcyB0byB0aGUgbmV4dCBibG9jIHRvIGJlIHJlY2VpdmVkICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYnl0ZXMgKSAvKiBcYXJnIG51bWJlciBvZiBieXRlcyB0byBiZSByZWNlaXZlZCAqLw0KKyAgICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFBEQw0KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUERDX1NldE5leHRSeA0KKy8vKiBcYnJpZWYgU2V0IHRoZSBuZXh0IHJlY2VpdmUgdHJhbnNmZXIgZGVzY3JpcHRvcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BEQ19TZXROZXh0UnggKA0KKwlBVDkxUFNfUERDIHBQREMsICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlcg0KKwljaGFyICphZGRyZXNzLCAgICAgICAvLyBcYXJnIGFkZHJlc3MgdG8gdGhlIG5leHQgYmxvYyB0byBiZSByZWNlaXZlZA0KKwl1bnNpZ25lZCBpbnQgYnl0ZXMpICAvLyBcYXJnIG51bWJlciBvZiBieXRlcyB0byBiZSByZWNlaXZlZA0KIHsNCi0gICAgcFBEQy0+UERDX1JOUFIgPSAoIHVuc2lnbmVkIGludCApIGFkZHJlc3M7DQotICAgIHBQREMtPlBEQ19STkNSID0gYnl0ZXM7DQorCXBQREMtPlBEQ19STlBSID0gKHVuc2lnbmVkIGludCkgYWRkcmVzczsNCisJcFBEQy0+UERDX1JOQ1IgPSBieXRlczsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUERDX1NldE5leHRUeCAqLw0KLS8qKiBcYnJpZWYgU2V0IHRoZSBuZXh0IHRyYW5zbWl0IHRyYW5zZmVyIGRlc2NyaXB0b3IgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QRENfU2V0TmV4dFR4KCBBVDkxUFNfUERDIHBQREMsICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqIGFkZHJlc3MsICAgICAgLyogXGFyZyBhZGRyZXNzIHRvIHRoZSBuZXh0IGJsb2MgdG8gYmUgdHJhbnNtaXR0ZWQgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBieXRlcyApIC8qIFxhcmcgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHRyYW5zbWl0dGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUERDX1NldE5leHRUeA0KKy8vKiBcYnJpZWYgU2V0IHRoZSBuZXh0IHRyYW5zbWl0IHRyYW5zZmVyIGRlc2NyaXB0b3INCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QRENfU2V0TmV4dFR4ICgNCisJQVQ5MVBTX1BEQyBwUERDLCAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlcg0KKwljaGFyICphZGRyZXNzLCAgICAgICAgIC8vIFxhcmcgYWRkcmVzcyB0byB0aGUgbmV4dCBibG9jIHRvIGJlIHRyYW5zbWl0dGVkDQorCXVuc2lnbmVkIGludCBieXRlcykgICAgLy8gXGFyZyBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgdHJhbnNtaXR0ZWQNCiB7DQotICAgIHBQREMtPlBEQ19UTlBSID0gKCB1bnNpZ25lZCBpbnQgKSBhZGRyZXNzOw0KLSAgICBwUERDLT5QRENfVE5DUiA9IGJ5dGVzOw0KKwlwUERDLT5QRENfVE5QUiA9ICh1bnNpZ25lZCBpbnQpIGFkZHJlc3M7DQorCXBQREMtPlBEQ19UTkNSID0gYnl0ZXM7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BEQ19TZXRSeCAqLw0KLS8qKiBcYnJpZWYgU2V0IHRoZSByZWNlaXZlIHRyYW5zZmVyIGRlc2NyaXB0b3IgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QRENfU2V0UngoIEFUOTFQU19QREMgcFBEQywgICAgIC8qIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBhZGRyZXNzLCAgICAgIC8qIFxhcmcgYWRkcmVzcyB0byB0aGUgbmV4dCBibG9jIHRvIGJlIHJlY2VpdmVkICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBieXRlcyApIC8qIFxhcmcgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHJlY2VpdmVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUERDX1NldFJ4DQorLy8qIFxicmllZiBTZXQgdGhlIHJlY2VpdmUgdHJhbnNmZXIgZGVzY3JpcHRvcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BEQ19TZXRSeCAoDQorCUFUOTFQU19QREMgcFBEQywgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXINCisJY2hhciAqYWRkcmVzcywgICAgICAgICAvLyBcYXJnIGFkZHJlc3MgdG8gdGhlIG5leHQgYmxvYyB0byBiZSByZWNlaXZlZA0KKwl1bnNpZ25lZCBpbnQgYnl0ZXMpICAgIC8vIFxhcmcgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHJlY2VpdmVkDQogew0KLSAgICBwUERDLT5QRENfUlBSID0gKCB1bnNpZ25lZCBpbnQgKSBhZGRyZXNzOw0KLSAgICBwUERDLT5QRENfUkNSID0gYnl0ZXM7DQorCXBQREMtPlBEQ19SUFIgPSAodW5zaWduZWQgaW50KSBhZGRyZXNzOw0KKwlwUERDLT5QRENfUkNSID0gYnl0ZXM7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BEQ19TZXRUeCAqLw0KLS8qKiBcYnJpZWYgU2V0IHRoZSB0cmFuc21pdCB0cmFuc2ZlciBkZXNjcmlwdG9yICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUERDX1NldFR4KCBBVDkxUFNfUERDIHBQREMsICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICogYWRkcmVzcywgICAgICAvKiBcYXJnIGFkZHJlc3MgdG8gdGhlIG5leHQgYmxvYyB0byBiZSB0cmFuc21pdHRlZCAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYnl0ZXMgKSAvKiBcYXJnIG51bWJlciBvZiBieXRlcyB0byBiZSB0cmFuc21pdHRlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BEQ19TZXRUeA0KKy8vKiBcYnJpZWYgU2V0IHRoZSB0cmFuc21pdCB0cmFuc2ZlciBkZXNjcmlwdG9yDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUERDX1NldFR4ICgNCisJQVQ5MVBTX1BEQyBwUERDLCAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlcg0KKwljaGFyICphZGRyZXNzLCAgICAgICAgIC8vIFxhcmcgYWRkcmVzcyB0byB0aGUgbmV4dCBibG9jIHRvIGJlIHRyYW5zbWl0dGVkDQorCXVuc2lnbmVkIGludCBieXRlcykgICAgLy8gXGFyZyBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgdHJhbnNtaXR0ZWQNCiB7DQotICAgIHBQREMtPlBEQ19UUFIgPSAoIHVuc2lnbmVkIGludCApIGFkZHJlc3M7DQotICAgIHBQREMtPlBEQ19UQ1IgPSBieXRlczsNCisJcFBEQy0+UERDX1RQUiA9ICh1bnNpZ25lZCBpbnQpIGFkZHJlc3M7DQorCXBQREMtPlBEQ19UQ1IgPSBieXRlczsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUERDX0VuYWJsZVR4ICovDQotLyoqIFxicmllZiBFbmFibGUgdHJhbnNtaXQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QRENfRW5hYmxlVHgoIEFUOTFQU19QREMgcFBEQyApIC8qIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUERDX0VuYWJsZVR4DQorLy8qIFxicmllZiBFbmFibGUgdHJhbnNtaXQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QRENfRW5hYmxlVHggKA0KKwlBVDkxUFNfUERDIHBQREMgKSAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlcg0KIHsNCi0gICAgcFBEQy0+UERDX1BUQ1IgPSBBVDkxQ19QRENfVFhURU47DQorCXBQREMtPlBEQ19QVENSID0gQVQ5MUNfUERDX1RYVEVOOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QRENfRW5hYmxlUnggKi8NCi0vKiogXGJyaWVmIEVuYWJsZSByZWNlaXZlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUERDX0VuYWJsZVJ4KCBBVDkxUFNfUERDIHBQREMgKSAvKiBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BEQ19FbmFibGVSeA0KKy8vKiBcYnJpZWYgRW5hYmxlIHJlY2VpdmUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QRENfRW5hYmxlUnggKA0KKwlBVDkxUFNfUERDIHBQREMgKSAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlcg0KIHsNCi0gICAgcFBEQy0+UERDX1BUQ1IgPSBBVDkxQ19QRENfUlhURU47DQorCXBQREMtPlBEQ19QVENSID0gQVQ5MUNfUERDX1JYVEVOOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QRENfRGlzYWJsZVR4ICovDQotLyoqIFxicmllZiBEaXNhYmxlIHRyYW5zbWl0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUERDX0Rpc2FibGVUeCggQVQ5MVBTX1BEQyBwUERDICkgLyogXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QRENfRGlzYWJsZVR4DQorLy8qIFxicmllZiBEaXNhYmxlIHRyYW5zbWl0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUERDX0Rpc2FibGVUeCAoDQorCUFUOTFQU19QREMgcFBEQyApICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyDQogew0KLSAgICBwUERDLT5QRENfUFRDUiA9IEFUOTFDX1BEQ19UWFRESVM7DQorCXBQREMtPlBEQ19QVENSID0gQVQ5MUNfUERDX1RYVERJUzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUERDX0Rpc2FibGVSeCAqLw0KLS8qKiBcYnJpZWYgRGlzYWJsZSByZWNlaXZlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUERDX0Rpc2FibGVSeCggQVQ5MVBTX1BEQyBwUERDICkgLyogXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QRENfRGlzYWJsZVJ4DQorLy8qIFxicmllZiBEaXNhYmxlIHJlY2VpdmUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QRENfRGlzYWJsZVJ4ICgNCisJQVQ5MVBTX1BEQyBwUERDICkgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXINCiB7DQotICAgIHBQREMtPlBEQ19QVENSID0gQVQ5MUNfUERDX1JYVERJUzsNCisJcFBEQy0+UERDX1BUQ1IgPSBBVDkxQ19QRENfUlhURElTOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QRENfSXNUeEVtcHR5ICovDQotLyoqIFxicmllZiBUZXN0IGlmIHRoZSBjdXJyZW50IHRyYW5zZmVyIGRlc2NyaXB0b3IgaGFzIGJlZW4gc2VudCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSBpbnQgQVQ5MUZfUERDX0lzVHhFbXB0eSggLyogXHJldHVybiByZXR1cm4gMSBpZiB0cmFuc2ZlciBpcyBjb21wbGV0ZSAqLw0KLSAgICBBVDkxUFNfUERDIHBQREMgKSAgICAgICAgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BEQ19Jc1R4RW1wdHkNCisvLyogXGJyaWVmIFRlc3QgaWYgdGhlIGN1cnJlbnQgdHJhbnNmZXIgZGVzY3JpcHRvciBoYXMgYmVlbiBzZW50DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9QRENfSXNUeEVtcHR5ICggLy8gXHJldHVybiByZXR1cm4gMSBpZiB0cmFuc2ZlciBpcyBjb21wbGV0ZQ0KKwlBVDkxUFNfUERDIHBQREMgKSAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlcg0KIHsNCi0gICAgcmV0dXJuICEoIHBQREMtPlBEQ19UQ1IgKTsNCisJcmV0dXJuICEocFBEQy0+UERDX1RDUik7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BEQ19Jc05leHRUeEVtcHR5ICovDQotLyoqIFxicmllZiBUZXN0IGlmIHRoZSBuZXh0IHRyYW5zZmVyIGRlc2NyaXB0b3IgaGFzIGJlZW4gbW92ZWQgdG8gdGhlIGN1cnJlbnQgdGQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgaW50IEFUOTFGX1BEQ19Jc05leHRUeEVtcHR5KCAvKiBccmV0dXJuIHJldHVybiAxIGlmIHRyYW5zZmVyIGlzIGNvbXBsZXRlICovDQotICAgIEFUOTFQU19QREMgcFBEQyApICAgICAgICAgICAgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BEQ19Jc05leHRUeEVtcHR5DQorLy8qIFxicmllZiBUZXN0IGlmIHRoZSBuZXh0IHRyYW5zZmVyIGRlc2NyaXB0b3IgaGFzIGJlZW4gbW92ZWQgdG8gdGhlIGN1cnJlbnQgdGQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1BEQ19Jc05leHRUeEVtcHR5ICggLy8gXHJldHVybiByZXR1cm4gMSBpZiB0cmFuc2ZlciBpcyBjb21wbGV0ZQ0KKwlBVDkxUFNfUERDIHBQREMgKSAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlcg0KIHsNCi0gICAgcmV0dXJuICEoIHBQREMtPlBEQ19UTkNSICk7DQorCXJldHVybiAhKHBQREMtPlBEQ19UTkNSKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUERDX0lzUnhFbXB0eSAqLw0KLS8qKiBcYnJpZWYgVGVzdCBpZiB0aGUgY3VycmVudCB0cmFuc2ZlciBkZXNjcmlwdG9yIGhhcyBiZWVuIGZpbGxlZCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSBpbnQgQVQ5MUZfUERDX0lzUnhFbXB0eSggLyogXHJldHVybiByZXR1cm4gMSBpZiB0cmFuc2ZlciBpcyBjb21wbGV0ZSAqLw0KLSAgICBBVDkxUFNfUERDIHBQREMgKSAgICAgICAgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BEQ19Jc1J4RW1wdHkNCisvLyogXGJyaWVmIFRlc3QgaWYgdGhlIGN1cnJlbnQgdHJhbnNmZXIgZGVzY3JpcHRvciBoYXMgYmVlbiBmaWxsZWQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1BEQ19Jc1J4RW1wdHkgKCAvLyBccmV0dXJuIHJldHVybiAxIGlmIHRyYW5zZmVyIGlzIGNvbXBsZXRlDQorCUFUOTFQU19QREMgcFBEQyApICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyDQogew0KLSAgICByZXR1cm4gISggcFBEQy0+UERDX1JDUiApOw0KKwlyZXR1cm4gIShwUERDLT5QRENfUkNSKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUERDX0lzTmV4dFJ4RW1wdHkgKi8NCi0vKiogXGJyaWVmIFRlc3QgaWYgdGhlIG5leHQgdHJhbnNmZXIgZGVzY3JpcHRvciBoYXMgYmVlbiBtb3ZlZCB0byB0aGUgY3VycmVudCB0ZCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSBpbnQgQVQ5MUZfUERDX0lzTmV4dFJ4RW1wdHkoIC8qIFxyZXR1cm4gcmV0dXJuIDEgaWYgdHJhbnNmZXIgaXMgY29tcGxldGUgKi8NCi0gICAgQVQ5MVBTX1BEQyBwUERDICkgICAgICAgICAgICAgICAgIC8qIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUERDX0lzTmV4dFJ4RW1wdHkNCisvLyogXGJyaWVmIFRlc3QgaWYgdGhlIG5leHQgdHJhbnNmZXIgZGVzY3JpcHRvciBoYXMgYmVlbiBtb3ZlZCB0byB0aGUgY3VycmVudCB0ZA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfUERDX0lzTmV4dFJ4RW1wdHkgKCAvLyBccmV0dXJuIHJldHVybiAxIGlmIHRyYW5zZmVyIGlzIGNvbXBsZXRlDQorCUFUOTFQU19QREMgcFBEQyApICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyDQogew0KLSAgICByZXR1cm4gISggcFBEQy0+UERDX1JOQ1IgKTsNCisJcmV0dXJuICEocFBEQy0+UERDX1JOQ1IpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QRENfT3BlbiAqLw0KLS8qKiBcYnJpZWYgT3BlbiBQREM6IGRpc2FibGUgVFggYW5kIFJYIHJlc2V0IHRyYW5zZmVyIGRlc2NyaXB0b3JzLCByZS1lbmFibGUgUlggYW5kIFRYICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUERDX09wZW4oIEFUOTFQU19QREMgcFBEQyApIC8qIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUERDX09wZW4NCisvLyogXGJyaWVmIE9wZW4gUERDOiBkaXNhYmxlIFRYIGFuZCBSWCByZXNldCB0cmFuc2ZlciBkZXNjcmlwdG9ycywgcmUtZW5hYmxlIFJYIGFuZCBUWA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BEQ19PcGVuICgNCisJQVQ5MVBTX1BEQyBwUERDKSAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlcg0KIHsNCi0gICAgLyoqIERpc2FibGUgdGhlIFJYIGFuZCBUWCBQREMgdHJhbnNmZXIgcmVxdWVzdHMgKi8NCi0gICAgQVQ5MUZfUERDX0Rpc2FibGVSeCggcFBEQyApOw0KLSAgICBBVDkxRl9QRENfRGlzYWJsZVR4KCBwUERDICk7DQorICAgIC8vKiBEaXNhYmxlIHRoZSBSWCBhbmQgVFggUERDIHRyYW5zZmVyIHJlcXVlc3RzDQorCUFUOTFGX1BEQ19EaXNhYmxlUngocFBEQyk7DQorCUFUOTFGX1BEQ19EaXNhYmxlVHgocFBEQyk7DQogDQotICAgIC8qKiBSZXNldCBhbGwgQ291bnRlciByZWdpc3RlciBOZXh0IGJ1ZmZlciBmaXJzdCAqLw0KLSAgICBBVDkxRl9QRENfU2V0TmV4dFR4KCBwUERDLCAoIGNoYXIgKiApIDAsIDAgKTsNCi0gICAgQVQ5MUZfUERDX1NldE5leHRSeCggcFBEQywgKCBjaGFyICogKSAwLCAwICk7DQotICAgIEFUOTFGX1BEQ19TZXRUeCggcFBEQywgKCBjaGFyICogKSAwLCAwICk7DQotICAgIEFUOTFGX1BEQ19TZXRSeCggcFBEQywgKCBjaGFyICogKSAwLCAwICk7DQorCS8vKiBSZXNldCBhbGwgQ291bnRlciByZWdpc3RlciBOZXh0IGJ1ZmZlciBmaXJzdA0KKwlBVDkxRl9QRENfU2V0TmV4dFR4KHBQREMsIChjaGFyICopIDAsIDApOw0KKwlBVDkxRl9QRENfU2V0TmV4dFJ4KHBQREMsIChjaGFyICopIDAsIDApOw0KKwlBVDkxRl9QRENfU2V0VHgocFBEQywgKGNoYXIgKikgMCwgMCk7DQorCUFUOTFGX1BEQ19TZXRSeChwUERDLCAoY2hhciAqKSAwLCAwKTsNCiANCi0gICAgLyoqIEVuYWJsZSB0aGUgUlggYW5kIFRYIFBEQyB0cmFuc2ZlciByZXF1ZXN0cyAqLw0KLSAgICBBVDkxRl9QRENfRW5hYmxlUngoIHBQREMgKTsNCi0gICAgQVQ5MUZfUERDX0VuYWJsZVR4KCBwUERDICk7DQorICAgIC8vKiBFbmFibGUgdGhlIFJYIGFuZCBUWCBQREMgdHJhbnNmZXIgcmVxdWVzdHMNCisJQVQ5MUZfUERDX0VuYWJsZVJ4KHBQREMpOw0KKwlBVDkxRl9QRENfRW5hYmxlVHgocFBEQyk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BEQ19DbG9zZSAqLw0KLS8qKiBcYnJpZWYgQ2xvc2UgUERDOiBkaXNhYmxlIFRYIGFuZCBSWCByZXNldCB0cmFuc2ZlciBkZXNjcmlwdG9ycyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BEQ19DbG9zZSggQVQ5MVBTX1BEQyBwUERDICkgLyogXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QRENfQ2xvc2UNCisvLyogXGJyaWVmIENsb3NlIFBEQzogZGlzYWJsZSBUWCBhbmQgUlggcmVzZXQgdHJhbnNmZXIgZGVzY3JpcHRvcnMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QRENfQ2xvc2UgKA0KKwlBVDkxUFNfUERDIHBQREMpICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyDQogew0KLSAgICAvKiogRGlzYWJsZSB0aGUgUlggYW5kIFRYIFBEQyB0cmFuc2ZlciByZXF1ZXN0cyAqLw0KLSAgICBBVDkxRl9QRENfRGlzYWJsZVJ4KCBwUERDICk7DQotICAgIEFUOTFGX1BEQ19EaXNhYmxlVHgoIHBQREMgKTsNCisgICAgLy8qIERpc2FibGUgdGhlIFJYIGFuZCBUWCBQREMgdHJhbnNmZXIgcmVxdWVzdHMNCisJQVQ5MUZfUERDX0Rpc2FibGVSeChwUERDKTsNCisJQVQ5MUZfUERDX0Rpc2FibGVUeChwUERDKTsNCiANCi0gICAgLyoqIFJlc2V0IGFsbCBDb3VudGVyIHJlZ2lzdGVyIE5leHQgYnVmZmVyIGZpcnN0ICovDQotICAgIEFUOTFGX1BEQ19TZXROZXh0VHgoIHBQREMsICggY2hhciAqICkgMCwgMCApOw0KLSAgICBBVDkxRl9QRENfU2V0TmV4dFJ4KCBwUERDLCAoIGNoYXIgKiApIDAsIDAgKTsNCi0gICAgQVQ5MUZfUERDX1NldFR4KCBwUERDLCAoIGNoYXIgKiApIDAsIDAgKTsNCi0gICAgQVQ5MUZfUERDX1NldFJ4KCBwUERDLCAoIGNoYXIgKiApIDAsIDAgKTsNCisJLy8qIFJlc2V0IGFsbCBDb3VudGVyIHJlZ2lzdGVyIE5leHQgYnVmZmVyIGZpcnN0DQorCUFUOTFGX1BEQ19TZXROZXh0VHgocFBEQywgKGNoYXIgKikgMCwgMCk7DQorCUFUOTFGX1BEQ19TZXROZXh0UngocFBEQywgKGNoYXIgKikgMCwgMCk7DQorCUFUOTFGX1BEQ19TZXRUeChwUERDLCAoY2hhciAqKSAwLCAwKTsNCisJQVQ5MUZfUERDX1NldFJ4KHBQREMsIChjaGFyICopIDAsIDApOw0KKw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QRENfU2VuZEZyYW1lICovDQotLyoqIFxicmllZiBDbG9zZSBQREM6IGRpc2FibGUgVFggYW5kIFJYIHJlc2V0IHRyYW5zZmVyIGRlc2NyaXB0b3JzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QRENfU2VuZEZyYW1lKCBBVDkxUFNfUERDIHBQREMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBwQnVmZmVyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3pCdWZmZXIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBwTmV4dEJ1ZmZlciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHN6TmV4dEJ1ZmZlciApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUERDX1NlbmRGcmFtZQ0KKy8vKiBcYnJpZWYgQ2xvc2UgUERDOiBkaXNhYmxlIFRYIGFuZCBSWCByZXNldCB0cmFuc2ZlciBkZXNjcmlwdG9ycw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUERDX1NlbmRGcmFtZSgNCisJQVQ5MVBTX1BEQyBwUERDLA0KKwljaGFyICpwQnVmZmVyLA0KKwl1bnNpZ25lZCBpbnQgc3pCdWZmZXIsDQorCWNoYXIgKnBOZXh0QnVmZmVyLA0KKwl1bnNpZ25lZCBpbnQgc3pOZXh0QnVmZmVyICkNCiB7DQotICAgIGlmKCBBVDkxRl9QRENfSXNUeEVtcHR5KCBwUERDICkgKQ0KLSAgICB7DQotICAgICAgICAvKiogQnVmZmVyIGFuZCBuZXh0IGJ1ZmZlciBjYW4gYmUgaW5pdGlhbGl6ZWQgKi8NCi0gICAgICAgIEFUOTFGX1BEQ19TZXRUeCggcFBEQywgcEJ1ZmZlciwgc3pCdWZmZXIgKTsNCi0gICAgICAgIEFUOTFGX1BEQ19TZXROZXh0VHgoIHBQREMsIHBOZXh0QnVmZmVyLCBzek5leHRCdWZmZXIgKTsNCi0gICAgICAgIHJldHVybiAyOw0KLSAgICB9DQotICAgIGVsc2UgaWYoIEFUOTFGX1BEQ19Jc05leHRUeEVtcHR5KCBwUERDICkgKQ0KLSAgICB7DQotICAgICAgICAvKiogT25seSBvbmUgYnVmZmVyIGNhbiBiZSBpbml0aWFsaXplZCAqLw0KLSAgICAgICAgQVQ5MUZfUERDX1NldE5leHRUeCggcFBEQywgcEJ1ZmZlciwgc3pCdWZmZXIgKTsNCi0gICAgICAgIHJldHVybiAxOw0KLSAgICB9DQotICAgIGVsc2UNCi0gICAgew0KLSAgICAgICAgLyoqIEFsbCBidWZmZXIgYXJlIGluIHVzZS4uLiAqLw0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCisJaWYgKEFUOTFGX1BEQ19Jc1R4RW1wdHkocFBEQykpIHsNCisJCS8vKiBCdWZmZXIgYW5kIG5leHQgYnVmZmVyIGNhbiBiZSBpbml0aWFsaXplZA0KKwkJQVQ5MUZfUERDX1NldFR4KHBQREMsIHBCdWZmZXIsIHN6QnVmZmVyKTsNCisJCUFUOTFGX1BEQ19TZXROZXh0VHgocFBEQywgcE5leHRCdWZmZXIsIHN6TmV4dEJ1ZmZlcik7DQorCQlyZXR1cm4gMjsNCisJfQ0KKwllbHNlIGlmIChBVDkxRl9QRENfSXNOZXh0VHhFbXB0eShwUERDKSkgew0KKwkJLy8qIE9ubHkgb25lIGJ1ZmZlciBjYW4gYmUgaW5pdGlhbGl6ZWQNCisJCUFUOTFGX1BEQ19TZXROZXh0VHgocFBEQywgcEJ1ZmZlciwgc3pCdWZmZXIpOw0KKwkJcmV0dXJuIDE7DQorCX0NCisJZWxzZSB7DQorCQkvLyogQWxsIGJ1ZmZlciBhcmUgaW4gdXNlLi4uDQorCQlyZXR1cm4gMDsNCisJfQ0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QRENfUmVjZWl2ZUZyYW1lICovDQotLyoqIFxicmllZiBDbG9zZSBQREM6IGRpc2FibGUgVFggYW5kIFJYIHJlc2V0IHRyYW5zZmVyIGRlc2NyaXB0b3JzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QRENfUmVjZWl2ZUZyYW1lKCBBVDkxUFNfUERDIHBQREMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBwQnVmZmVyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3pCdWZmZXIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBwTmV4dEJ1ZmZlciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHN6TmV4dEJ1ZmZlciApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUERDX1JlY2VpdmVGcmFtZQ0KKy8vKiBcYnJpZWYgQ2xvc2UgUERDOiBkaXNhYmxlIFRYIGFuZCBSWCByZXNldCB0cmFuc2ZlciBkZXNjcmlwdG9ycw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUERDX1JlY2VpdmVGcmFtZSAoDQorCUFUOTFQU19QREMgcFBEQywNCisJY2hhciAqcEJ1ZmZlciwNCisJdW5zaWduZWQgaW50IHN6QnVmZmVyLA0KKwljaGFyICpwTmV4dEJ1ZmZlciwNCisJdW5zaWduZWQgaW50IHN6TmV4dEJ1ZmZlciApDQogew0KLSAgICBpZiggQVQ5MUZfUERDX0lzUnhFbXB0eSggcFBEQyApICkNCi0gICAgew0KLSAgICAgICAgLyoqIEJ1ZmZlciBhbmQgbmV4dCBidWZmZXIgY2FuIGJlIGluaXRpYWxpemVkICovDQotICAgICAgICBBVDkxRl9QRENfU2V0UngoIHBQREMsIHBCdWZmZXIsIHN6QnVmZmVyICk7DQotICAgICAgICBBVDkxRl9QRENfU2V0TmV4dFJ4KCBwUERDLCBwTmV4dEJ1ZmZlciwgc3pOZXh0QnVmZmVyICk7DQotICAgICAgICByZXR1cm4gMjsNCi0gICAgfQ0KLSAgICBlbHNlIGlmKCBBVDkxRl9QRENfSXNOZXh0UnhFbXB0eSggcFBEQyApICkNCi0gICAgew0KLSAgICAgICAgLyoqIE9ubHkgb25lIGJ1ZmZlciBjYW4gYmUgaW5pdGlhbGl6ZWQgKi8NCi0gICAgICAgIEFUOTFGX1BEQ19TZXROZXh0UngoIHBQREMsIHBCdWZmZXIsIHN6QnVmZmVyICk7DQotICAgICAgICByZXR1cm4gMTsNCi0gICAgfQ0KLSAgICBlbHNlDQotICAgIHsNCi0gICAgICAgIC8qKiBBbGwgYnVmZmVyIGFyZSBpbiB1c2UuLi4gKi8NCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQorCWlmIChBVDkxRl9QRENfSXNSeEVtcHR5KHBQREMpKSB7DQorCQkvLyogQnVmZmVyIGFuZCBuZXh0IGJ1ZmZlciBjYW4gYmUgaW5pdGlhbGl6ZWQNCisJCUFUOTFGX1BEQ19TZXRSeChwUERDLCBwQnVmZmVyLCBzekJ1ZmZlcik7DQorCQlBVDkxRl9QRENfU2V0TmV4dFJ4KHBQREMsIHBOZXh0QnVmZmVyLCBzek5leHRCdWZmZXIpOw0KKwkJcmV0dXJuIDI7DQorCX0NCisJZWxzZSBpZiAoQVQ5MUZfUERDX0lzTmV4dFJ4RW1wdHkocFBEQykpIHsNCisJCS8vKiBPbmx5IG9uZSBidWZmZXIgY2FuIGJlIGluaXRpYWxpemVkDQorCQlBVDkxRl9QRENfU2V0TmV4dFJ4KHBQREMsIHBCdWZmZXIsIHN6QnVmZmVyKTsNCisJCXJldHVybiAxOw0KKwl9DQorCWVsc2Ugew0KKwkJLy8qIEFsbCBidWZmZXIgYXJlIGluIHVzZS4uLg0KKwkJcmV0dXJuIDA7DQorCX0NCit9DQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBEQkdVDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9EQkdVX0ludGVycnVwdEVuYWJsZQ0KKy8vKiBcYnJpZWYgRW5hYmxlIERCR1UgSW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfREJHVV9JbnRlcnJ1cHRFbmFibGUoDQorICAgICAgICBBVDkxUFNfREJHVSBwRGJndSwgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgREJHVSBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZGJndSBpbnRlcnJ1cHQgdG8gYmUgZW5hYmxlZA0KK3sNCisgICAgICAgIHBEYmd1LT5EQkdVX0lFUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0RCR1VfSW50ZXJydXB0RGlzYWJsZQ0KKy8vKiBcYnJpZWYgRGlzYWJsZSBEQkdVIEludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0RCR1VfSW50ZXJydXB0RGlzYWJsZSgNCisgICAgICAgIEFUOTFQU19EQkdVIHBEYmd1LCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBEQkdVIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBkYmd1IGludGVycnVwdCB0byBiZSBkaXNhYmxlZA0KK3sNCisgICAgICAgIHBEYmd1LT5EQkdVX0lEUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0RCR1VfR2V0SW50ZXJydXB0TWFza1N0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIERCR1UgSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9EQkdVX0dldEludGVycnVwdE1hc2tTdGF0dXMoIC8vIFxyZXR1cm4gREJHVSBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisgICAgICAgIEFUOTFQU19EQkdVIHBEYmd1KSAvLyBcYXJnICBwb2ludGVyIHRvIGEgREJHVSBjb250cm9sbGVyDQorew0KKyAgICAgICAgcmV0dXJuIHBEYmd1LT5EQkdVX0lNUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfREJHVV9Jc0ludGVycnVwdE1hc2tlZA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBEQkdVIEludGVycnVwdCBpcyBNYXNrZWQgDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9EQkdVX0lzSW50ZXJydXB0TWFza2VkKA0KKyAgICAgICAgQVQ5MVBTX0RCR1UgcERiZ3UsICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIERCR1UgY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQorew0KKyAgICAgICAgcmV0dXJuIChBVDkxRl9EQkdVX0dldEludGVycnVwdE1hc2tTdGF0dXMocERiZ3UpICYgZmxhZyk7DQogfQ0KIA0KIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotKiAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgREJHVQ0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfREJHVV9JbnRlcnJ1cHRFbmFibGUgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBEQkdVIEludGVycnVwdCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0RCR1VfSW50ZXJydXB0RW5hYmxlKCBBVDkxUFNfREJHVSBwRGJndSwgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBEQkdVIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIGRiZ3UgaW50ZXJydXB0IHRvIGJlIGVuYWJsZWQgKi8NCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBTU0MNCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKy8vKiBEZWZpbmUgdGhlIHN0YW5kYXJkIEkyUyBtb2RlIGNvbmZpZ3VyYXRpb24NCisNCisvLyogQ29uZmlndXJhdGlvbiB0byBzZXQgaW4gdGhlIFNTQyBUcmFuc21pdCBDbG9jayBNb2RlIFJlZ2lzdGVyDQorLy8qIFBhcmFtZXRlcnMgOiAgbmJfYml0X2J5X3Nsb3QgOiA4LCAxNiBvciAzMiBiaXRzDQorLy8qIAkJCSAgbmJfc2xvdF9ieV9mcmFtZSA6IG51bWJlciBvZiBjaGFubmVscw0KKyNkZWZpbmUgQVQ5MUNfSTJTX0FTWV9NQVNURVJfVFhfU0VUVElORyhuYl9iaXRfYnlfc2xvdCwgbmJfc2xvdF9ieV9mcmFtZSkoICtcDQorCQkJCQkJCQkJICAgQVQ5MUNfU1NDX0NLU19ESVYgICArXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCSAgIEFUOTFDX1NTQ19DS09fQ09OVElOT1VTICAgICAgK1wNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkgICBBVDkxQ19TU0NfQ0tHX05PTkUgICAgK1wNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19TU0NfU1RBUlRfRkFMTF9SRiArXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCSAgIEFUOTFDX1NTQ19TVFRPVVQgICtcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJICAgKCgxPDwxNikgJiBBVDkxQ19TU0NfU1RURExZKSArXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCSAgICgoKChuYl9iaXRfYnlfc2xvdCpuYl9zbG90X2J5X2ZyYW1lKS8yKS0xKSA8PDI0KSkNCisNCisNCisvLyogQ29uZmlndXJhdGlvbiB0byBzZXQgaW4gdGhlIFNTQyBUcmFuc21pdCBGcmFtZSBNb2RlIFJlZ2lzdGVyDQorLy8qIFBhcmFtZXRlcnMgOiBuYl9iaXRfYnlfc2xvdCA6IDgsIDE2IG9yIDMyIGJpdHMNCisvLyogCQkJIG5iX3Nsb3RfYnlfZnJhbWUgOiBudW1iZXIgb2YgY2hhbm5lbHMNCisjZGVmaW5lIEFUOTFDX0kyU19BU1lfVFhfRlJBTUVfU0VUVElORyhuYl9iaXRfYnlfc2xvdCwgbmJfc2xvdF9ieV9mcmFtZSkoICtcDQorCQkJCQkJCQkJKG5iX2JpdF9ieV9zbG90LTEpICArXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCUFUOTFDX1NTQ19NU0JGICAgK1wNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkoKChuYl9zbG90X2J5X2ZyYW1lLTEpPDw4KSAmIEFUOTFDX1NTQ19EQVROQikgICtcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJKCgobmJfYml0X2J5X3Nsb3QtMSk8PDE2KSAmIEFUOTFDX1NTQ19GU0xFTikgK1wNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQlBVDkxQ19TU0NfRlNPU19ORUdBVElWRSkNCisNCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TU0NfU2V0QmF1ZHJhdGUNCisvLyogXGJyaWVmIFNldCB0aGUgYmF1ZHJhdGUgYWNjb3JkaW5nIHRvIHRoZSBDUFUgY2xvY2sNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TU0NfU2V0QmF1ZHJhdGUgKA0KKyAgICAgICAgQVQ5MVBTX1NTQyBwU1NDLCAgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgU1NDIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBtYWluQ2xvY2ssIC8vIFxhcmcgcGVyaXBoZXJhbCBjbG9jaw0KKyAgICAgICAgdW5zaWduZWQgaW50IHNwZWVkKSAgICAgLy8gXGFyZyBTU0MgYmF1ZHJhdGUNCiB7DQotICAgIHBEYmd1LT5EQkdVX0lFUiA9IGZsYWc7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0RCR1VfSW50ZXJydXB0RGlzYWJsZSAqLw0KLS8qKiBcYnJpZWYgRGlzYWJsZSBEQkdVIEludGVycnVwdCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0RCR1VfSW50ZXJydXB0RGlzYWJsZSggQVQ5MVBTX0RCR1UgcERiZ3UsICAvKiBcYXJnICBwb2ludGVyIHRvIGEgREJHVSBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgZGJndSBpbnRlcnJ1cHQgdG8gYmUgZGlzYWJsZWQgKi8NCi17DQotICAgIHBEYmd1LT5EQkdVX0lEUiA9IGZsYWc7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0RCR1VfR2V0SW50ZXJydXB0TWFza1N0YXR1cyAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIERCR1UgSW50ZXJydXB0IE1hc2sgU3RhdHVzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9EQkdVX0dldEludGVycnVwdE1hc2tTdGF0dXMoIC8qIFxyZXR1cm4gREJHVSBJbnRlcnJ1cHQgTWFzayBTdGF0dXMgKi8NCi0gICAgQVQ5MVBTX0RCR1UgcERiZ3UgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgREJHVSBjb250cm9sbGVyICovDQotew0KLSAgICByZXR1cm4gcERiZ3UtPkRCR1VfSU1SOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9EQkdVX0lzSW50ZXJydXB0TWFza2VkICovDQotLyoqIFxicmllZiBUZXN0IGlmIERCR1UgSW50ZXJydXB0IGlzIE1hc2tlZCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSBpbnQgQVQ5MUZfREJHVV9Jc0ludGVycnVwdE1hc2tlZCggQVQ5MVBTX0RCR1UgcERiZ3UsICAvKiBcYXJnICBwb2ludGVyIHRvIGEgREJHVSBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQgKi8NCi17DQotICAgIHJldHVybiggQVQ5MUZfREJHVV9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCBwRGJndSApICYgZmxhZyApOw0KLX0NCi0NCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSogICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFNTQw0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyoqIERlZmluZSB0aGUgc3RhbmRhcmQgSTJTIG1vZGUgY29uZmlndXJhdGlvbiAqLw0KLQ0KLS8qKiBDb25maWd1cmF0aW9uIHRvIHNldCBpbiB0aGUgU1NDIFRyYW5zbWl0IENsb2NrIE1vZGUgUmVnaXN0ZXIgKi8NCi0vKiogUGFyYW1ldGVycyA6ICBuYl9iaXRfYnlfc2xvdCA6IDgsIDE2IG9yIDMyIGJpdHMgKi8NCi0vKiogICAgICAgICAgICAgICBuYl9zbG90X2J5X2ZyYW1lIDogbnVtYmVyIG9mIGNoYW5uZWxzICovDQotI2RlZmluZSBBVDkxQ19JMlNfQVNZX01BU1RFUl9UWF9TRVRUSU5HKCBuYl9iaXRfYnlfc2xvdCwgbmJfc2xvdF9ieV9mcmFtZSApIFwNCi0gICAgKCArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgIEFUOTFDX1NTQ19DS1NfRElWICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgQVQ5MUNfU1NDX0NLT19DT05USU5PVVMgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICBBVDkxQ19TU0NfQ0tHX05PTkUgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgIEFUOTFDX1NTQ19TVEFSVF9GQUxMX1JGICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgQVQ5MUNfU1NDX1NUVE9VVCArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAoICggMSA8PCAxNiApICYgQVQ5MUNfU1NDX1NUVERMWSApICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICggKCAoICggbmJfYml0X2J5X3Nsb3QgKiBuYl9zbG90X2J5X2ZyYW1lICkgLyAyICkgLSAxICkgPDwgMjQgKSApDQotDQotDQotLyoqIENvbmZpZ3VyYXRpb24gdG8gc2V0IGluIHRoZSBTU0MgVHJhbnNtaXQgRnJhbWUgTW9kZSBSZWdpc3RlciAqLw0KLS8qKiBQYXJhbWV0ZXJzIDogbmJfYml0X2J5X3Nsb3QgOiA4LCAxNiBvciAzMiBiaXRzICovDQotLyoqICAgICAgICAgICAgICBuYl9zbG90X2J5X2ZyYW1lIDogbnVtYmVyIG9mIGNoYW5uZWxzICovDQotI2RlZmluZSBBVDkxQ19JMlNfQVNZX1RYX0ZSQU1FX1NFVFRJTkcoIG5iX2JpdF9ieV9zbG90LCBuYl9zbG90X2J5X2ZyYW1lICkgXA0KLSAgICAoICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAoIG5iX2JpdF9ieV9zbG90IC0gMSApICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgQVQ5MUNfU1NDX01TQkYgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICggKCAoIG5iX3Nsb3RfYnlfZnJhbWUgLSAxICkgPDwgOCApICYgQVQ5MUNfU1NDX0RBVE5CICkgKyAgICAgICAgICAgIFwNCi0gICAgICAoICggKCBuYl9iaXRfYnlfc2xvdCAtIDEgKSA8PCAxNiApICYgQVQ5MUNfU1NDX0ZTTEVOICkgKyAgICAgICAgICAgICBcDQotICAgICAgQVQ5MUNfU1NDX0ZTT1NfTkVHQVRJVkUgKQ0KLQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1NTQ19TZXRCYXVkcmF0ZSAqLw0KLS8qKiBcYnJpZWYgU2V0IHRoZSBiYXVkcmF0ZSBhY2NvcmRpbmcgdG8gdGhlIENQVSBjbG9jayAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1NTQ19TZXRCYXVkcmF0ZSggQVQ5MVBTX1NTQyBwU1NDLCAgICAgICAgLyogXGFyZyBwb2ludGVyIHRvIGEgU1NDIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1haW5DbG9jaywgLyogXGFyZyBwZXJpcGhlcmFsIGNsb2NrICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzcGVlZCApICAgIC8qIFxhcmcgU1NDIGJhdWRyYXRlICovDQotew0KLSAgICB1bnNpZ25lZCBpbnQgYmF1ZF92YWx1ZTsNCi0NCi0gICAgLyoqIERlZmluZSB0aGUgYmF1ZCByYXRlIGRpdmlzb3IgcmVnaXN0ZXIgKi8NCi0gICAgaWYoIHNwZWVkID09IDAgKQ0KLSAgICB7DQotICAgICAgICBiYXVkX3ZhbHVlID0gMDsNCi0gICAgfQ0KLSAgICBlbHNlDQotICAgIHsNCi0gICAgICAgIGJhdWRfdmFsdWUgPSAoIHVuc2lnbmVkIGludCApICggbWFpbkNsb2NrICogMTAgKSAvICggMiAqIHNwZWVkICk7DQotDQotICAgICAgICBpZiggKCBiYXVkX3ZhbHVlICUgMTAgKSA+PSA1ICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBiYXVkX3ZhbHVlID0gKCBiYXVkX3ZhbHVlIC8gMTAgKSArIDE7DQotICAgICAgICB9DQorICAgICAgICB1bnNpZ25lZCBpbnQgYmF1ZF92YWx1ZTsNCisgICAgICAgIC8vKiBEZWZpbmUgdGhlIGJhdWQgcmF0ZSBkaXZpc29yIHJlZ2lzdGVyDQorICAgICAgICBpZiAoc3BlZWQgPT0gMCkNCisgICAgICAgICAgIGJhdWRfdmFsdWUgPSAwOw0KICAgICAgICAgZWxzZQ0KICAgICAgICAgew0KLSAgICAgICAgICAgIGJhdWRfdmFsdWUgLz0gMTA7DQorICAgICAgICAgICBiYXVkX3ZhbHVlID0gKHVuc2lnbmVkIGludCkgKG1haW5DbG9jayAqIDEwKS8oMipzcGVlZCk7DQorICAgICAgICAgICBpZiAoKGJhdWRfdmFsdWUgJSAxMCkgPj0gNSkNCisgICAgICAgICAgICAgICAgICBiYXVkX3ZhbHVlID0gKGJhdWRfdmFsdWUgLyAxMCkgKyAxOw0KKyAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgICAgICAgIGJhdWRfdmFsdWUgLz0gMTA7DQogICAgICAgICB9DQotICAgIH0NCiANCi0gICAgcFNTQy0+U1NDX0NNUiA9IGJhdWRfdmFsdWU7DQorICAgICAgICBwU1NDLT5TU0NfQ01SID0gYmF1ZF92YWx1ZTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1NDX0NvbmZpZ3VyZSAqLw0KLS8qKiBcYnJpZWYgQ29uZmlndXJlIFNTQyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1NTQ19Db25maWd1cmUoIEFUOTFQU19TU0MgcFNTQywgICAgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBTU0MgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHN5c3RfY2xvY2ssIC8qIFxhcmcgU3lzdGVtIENsb2NrIEZyZXF1ZW5jeSAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJhdWRfcmF0ZSwgIC8qIFxhcmcgRXhwZWN0ZWQgQmF1ZCBSYXRlIEZyZXF1ZW5jeSAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNsb2NrX3J4LCAgIC8qIFxhcmcgUmVjZWl2ZXIgQ2xvY2sgUGFyYW1ldGVycyAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1vZGVfcngsICAgIC8qIFxhcmcgbW9kZSBSZWdpc3RlciB0byBiZSBwcm9ncmFtbWVkICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY2xvY2tfdHgsICAgLyogXGFyZyBUcmFuc21pdHRlciBDbG9jayBQYXJhbWV0ZXJzICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbW9kZV90eCApICAgLyogXGFyZyBtb2RlIFJlZ2lzdGVyIHRvIGJlIHByb2dyYW1tZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TU0NfQ29uZmlndXJlDQorLy8qIFxicmllZiBDb25maWd1cmUgU1NDDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1NDX0NvbmZpZ3VyZSAoDQorICAgICAgICAgICAgIEFUOTFQU19TU0MgcFNTQywgICAgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgU1NDIGNvbnRyb2xsZXINCisgICAgICAgICAgICAgdW5zaWduZWQgaW50IHN5c3RfY2xvY2ssICAvLyBcYXJnIFN5c3RlbSBDbG9jayBGcmVxdWVuY3kNCisgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJhdWRfcmF0ZSwgICAvLyBcYXJnIEV4cGVjdGVkIEJhdWQgUmF0ZSBGcmVxdWVuY3kNCisgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNsb2NrX3J4LCAgICAvLyBcYXJnIFJlY2VpdmVyIENsb2NrIFBhcmFtZXRlcnMNCisgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1vZGVfcngsICAgICAvLyBcYXJnIG1vZGUgUmVnaXN0ZXIgdG8gYmUgcHJvZ3JhbW1lZA0KKyAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY2xvY2tfdHgsICAgIC8vIFxhcmcgVHJhbnNtaXR0ZXIgQ2xvY2sgUGFyYW1ldGVycw0KKyAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbW9kZV90eCkgICAgIC8vIFxhcmcgbW9kZSBSZWdpc3RlciB0byBiZSBwcm9ncmFtbWVkDQogew0KLSAgICAvKiogRGlzYWJsZSBpbnRlcnJ1cHRzICovDQotICAgIHBTU0MtPlNTQ19JRFIgPSAoIHVuc2lnbmVkIGludCApIC0xOw0KKyAgICAvLyogRGlzYWJsZSBpbnRlcnJ1cHRzDQorCXBTU0MtPlNTQ19JRFIgPSAodW5zaWduZWQgaW50KSAtMTsNCiANCi0gICAgLyoqIFJlc2V0IHJlY2VpdmVyIGFuZCB0cmFuc21pdHRlciAqLw0KLSAgICBwU1NDLT5TU0NfQ1IgPSBBVDkxQ19TU0NfU1dSU1QgfCBBVDkxQ19TU0NfUlhESVMgfCBBVDkxQ19TU0NfVFhESVM7DQorICAgIC8vKiBSZXNldCByZWNlaXZlciBhbmQgdHJhbnNtaXR0ZXINCisJcFNTQy0+U1NDX0NSID0gQVQ5MUNfU1NDX1NXUlNUIHwgQVQ5MUNfU1NDX1JYRElTIHwgQVQ5MUNfU1NDX1RYRElTIDsNCiANCi0gICAgLyoqIERlZmluZSB0aGUgQ2xvY2sgTW9kZSBSZWdpc3RlciAqLw0KLSAgICBBVDkxRl9TU0NfU2V0QmF1ZHJhdGUoIHBTU0MsIHN5c3RfY2xvY2ssIGJhdWRfcmF0ZSApOw0KKyAgICAvLyogRGVmaW5lIHRoZSBDbG9jayBNb2RlIFJlZ2lzdGVyDQorCUFUOTFGX1NTQ19TZXRCYXVkcmF0ZShwU1NDLCBzeXN0X2Nsb2NrLCBiYXVkX3JhdGUpOw0KIA0KLSAgICAvKiogV3JpdGUgdGhlIFJlY2VpdmUgQ2xvY2sgTW9kZSBSZWdpc3RlciAqLw0KLSAgICBwU1NDLT5TU0NfUkNNUiA9IGNsb2NrX3J4Ow0KKyAgICAgLy8qIFdyaXRlIHRoZSBSZWNlaXZlIENsb2NrIE1vZGUgUmVnaXN0ZXINCisJcFNTQy0+U1NDX1JDTVIgPSAgY2xvY2tfcng7DQogDQotICAgIC8qKiBXcml0ZSB0aGUgVHJhbnNtaXQgQ2xvY2sgTW9kZSBSZWdpc3RlciAqLw0KLSAgICBwU1NDLT5TU0NfVENNUiA9IGNsb2NrX3R4Ow0KKyAgICAgLy8qIFdyaXRlIHRoZSBUcmFuc21pdCBDbG9jayBNb2RlIFJlZ2lzdGVyDQorCXBTU0MtPlNTQ19UQ01SID0gIGNsb2NrX3R4Ow0KIA0KLSAgICAvKiogV3JpdGUgdGhlIFJlY2VpdmUgRnJhbWUgTW9kZSBSZWdpc3RlciAqLw0KLSAgICBwU1NDLT5TU0NfUkZNUiA9IG1vZGVfcng7DQorICAgICAvLyogV3JpdGUgdGhlIFJlY2VpdmUgRnJhbWUgTW9kZSBSZWdpc3Rlcg0KKwlwU1NDLT5TU0NfUkZNUiA9ICBtb2RlX3J4Ow0KIA0KLSAgICAvKiogV3JpdGUgdGhlIFRyYW5zbWl0IEZyYW1lIE1vZGUgUmVnaXN0ZXIgKi8NCi0gICAgcFNTQy0+U1NDX1RGTVIgPSBtb2RlX3R4Ow0KKyAgICAgLy8qIFdyaXRlIHRoZSBUcmFuc21pdCBGcmFtZSBNb2RlIFJlZ2lzdGVyDQorCXBTU0MtPlNTQ19URk1SID0gIG1vZGVfdHg7DQogDQotICAgIC8qKiBDbGVhciBUcmFuc21pdCBhbmQgUmVjZWl2ZSBDb3VudGVycyAqLw0KLSAgICBBVDkxRl9QRENfT3BlbiggKCBBVDkxUFNfUERDICkgJiggcFNTQy0+U1NDX1JQUiApICk7DQorICAgIC8vKiBDbGVhciBUcmFuc21pdCBhbmQgUmVjZWl2ZSBDb3VudGVycw0KKwlBVDkxRl9QRENfT3BlbigoQVQ5MVBTX1BEQykgJihwU1NDLT5TU0NfUlBSKSk7DQorDQorDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1NTQ19FbmFibGVSeCAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIHJlY2VpdmluZyBkYXRhcyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1NTQ19FbmFibGVSeCggQVQ5MVBTX1NTQyBwU1NDICkgLyogXGFyZyBwb2ludGVyIHRvIGEgU1NDIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TU0NfRW5hYmxlUngNCisvLyogXGJyaWVmIEVuYWJsZSByZWNlaXZpbmcgZGF0YXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TU0NfRW5hYmxlUnggKA0KKwlBVDkxUFNfU1NDIHBTU0MpICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBTU0MgY29udHJvbGxlcg0KIHsNCi0gICAgLyoqIEVuYWJsZSByZWNlaXZlciAqLw0KKyAgICAvLyogRW5hYmxlIHJlY2VpdmVyDQogICAgIHBTU0MtPlNTQ19DUiA9IEFUOTFDX1NTQ19SWEVOOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9TU0NfRGlzYWJsZVJ4ICovDQotLyoqIFxicmllZiBEaXNhYmxlIHJlY2VpdmluZyBkYXRhcyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1NTQ19EaXNhYmxlUngoIEFUOTFQU19TU0MgcFNTQyApIC8qIFxhcmcgcG9pbnRlciB0byBhIFNTQyBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1NDX0Rpc2FibGVSeA0KKy8vKiBcYnJpZWYgRGlzYWJsZSByZWNlaXZpbmcgZGF0YXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TU0NfRGlzYWJsZVJ4ICgNCisJQVQ5MVBTX1NTQyBwU1NDKSAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgU1NDIGNvbnRyb2xsZXINCiB7DQotICAgIC8qKiBEaXNhYmxlIHJlY2VpdmVyICovDQorICAgIC8vKiBEaXNhYmxlIHJlY2VpdmVyDQogICAgIHBTU0MtPlNTQ19DUiA9IEFUOTFDX1NTQ19SWERJUzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1NDX0VuYWJsZVR4ICovDQotLyoqIFxicmllZiBFbmFibGUgc2VuZGluZyBkYXRhcyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1NTQ19FbmFibGVUeCggQVQ5MVBTX1NTQyBwU1NDICkgLyogXGFyZyBwb2ludGVyIHRvIGEgU1NDIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TU0NfRW5hYmxlVHgNCisvLyogXGJyaWVmIEVuYWJsZSBzZW5kaW5nIGRhdGFzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1NDX0VuYWJsZVR4ICgNCisJQVQ5MVBTX1NTQyBwU1NDKSAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgU1NDIGNvbnRyb2xsZXINCiB7DQotICAgIC8qKiBFbmFibGUgIHRyYW5zbWl0dGVyICovDQorICAgIC8vKiBFbmFibGUgIHRyYW5zbWl0dGVyDQogICAgIHBTU0MtPlNTQ19DUiA9IEFUOTFDX1NTQ19UWEVOOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9TU0NfRGlzYWJsZVR4ICovDQotLyoqIFxicmllZiBEaXNhYmxlIHNlbmRpbmcgZGF0YXMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9TU0NfRGlzYWJsZVR4KCBBVDkxUFNfU1NDIHBTU0MgKSAvKiBcYXJnIHBvaW50ZXIgdG8gYSBTU0MgY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NTQ19EaXNhYmxlVHgNCisvLyogXGJyaWVmIERpc2FibGUgc2VuZGluZyBkYXRhcw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NTQ19EaXNhYmxlVHggKA0KKwlBVDkxUFNfU1NDIHBTU0MpICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBTU0MgY29udHJvbGxlcg0KIHsNCi0gICAgLyoqIERpc2FibGUgIHRyYW5zbWl0dGVyICovDQorICAgIC8vKiBEaXNhYmxlICB0cmFuc21pdHRlcg0KICAgICBwU1NDLT5TU0NfQ1IgPSBBVDkxQ19TU0NfVFhESVM7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1NTQ19FbmFibGVJdCAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIFNTQyBJVCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1NTQ19FbmFibGVJdCggQVQ5MVBTX1NTQyBwU1NDLCAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBTU0MgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgSVQgdG8gYmUgZW5hYmxlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NTQ19FbmFibGVJdA0KKy8vKiBcYnJpZWYgRW5hYmxlIFNTQyBJVA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NTQ19FbmFibGVJdCAoDQorCUFUOTFQU19TU0MgcFNTQywgLy8gXGFyZyBwb2ludGVyIHRvIGEgU1NDIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpICAgLy8gXGFyZyBJVCB0byBiZSBlbmFibGVkDQogew0KLSAgICAvKiogV3JpdGUgdG8gdGhlIElFUiByZWdpc3RlciAqLw0KLSAgICBwU1NDLT5TU0NfSUVSID0gZmxhZzsNCisJLy8qIFdyaXRlIHRvIHRoZSBJRVIgcmVnaXN0ZXINCisJcFNTQy0+U1NDX0lFUiA9IGZsYWc7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1NTQ19EaXNhYmxlSXQgKi8NCi0vKiogXGJyaWVmIERpc2FibGUgU1NDIElUICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfU1NDX0Rpc2FibGVJdCggQVQ5MVBTX1NTQyBwU1NDLCAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBTU0MgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnIElUIHRvIGJlIGRpc2FibGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1NDX0Rpc2FibGVJdA0KKy8vKiBcYnJpZWYgRGlzYWJsZSBTU0MgSVQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TU0NfRGlzYWJsZUl0ICgNCisJQVQ5MVBTX1NTQyBwU1NDLCAvLyBcYXJnIHBvaW50ZXIgdG8gYSBTU0MgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgICAvLyBcYXJnIElUIHRvIGJlIGRpc2FibGVkDQogew0KLSAgICAvKiogV3JpdGUgdG8gdGhlIElEUiByZWdpc3RlciAqLw0KLSAgICBwU1NDLT5TU0NfSURSID0gZmxhZzsNCisJLy8qIFdyaXRlIHRvIHRoZSBJRFIgcmVnaXN0ZXINCisJcFNTQy0+U1NDX0lEUiA9IGZsYWc7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1NTQ19SZWNlaXZlRnJhbWUgKi8NCi0vKiogXGJyaWVmIFJldHVybiAyIGlmIFBEQyBoYXMgYmVlbiBpbml0aWFsaXplZCB3aXRoIEJ1ZmZlciBhbmQgTmV4dCBCdWZmZXIsIDEgaWYgUERDIGhhcyBiZWVuIGluaXRpYWxpemVkIHdpdGggTmV4dCBCdWZmZXIsIDAgaWYgUERDIGlzIGJ1c3kgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1NTQ19SZWNlaXZlRnJhbWUoIEFUOTFQU19TU0MgcFNTQywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqIHBCdWZmZXIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzekJ1ZmZlciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqIHBOZXh0QnVmZmVyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3pOZXh0QnVmZmVyICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TU0NfUmVjZWl2ZUZyYW1lDQorLy8qIFxicmllZiBSZXR1cm4gMiBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgd2l0aCBCdWZmZXIgYW5kIE5leHQgQnVmZmVyLCAxIGlmIFBEQyBoYXMgYmVlbiBpbml0aWFsaXplZCB3aXRoIE5leHQgQnVmZmVyLCAwIGlmIFBEQyBpcyBidXN5DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9TU0NfUmVjZWl2ZUZyYW1lICgNCisJQVQ5MVBTX1NTQyBwU1NDLA0KKwljaGFyICpwQnVmZmVyLA0KKwl1bnNpZ25lZCBpbnQgc3pCdWZmZXIsDQorCWNoYXIgKnBOZXh0QnVmZmVyLA0KKwl1bnNpZ25lZCBpbnQgc3pOZXh0QnVmZmVyICkNCiB7DQotICAgIHJldHVybiBBVDkxRl9QRENfUmVjZWl2ZUZyYW1lKA0KLSAgICAgICAgKCBBVDkxUFNfUERDICkgJiggcFNTQy0+U1NDX1JQUiApLA0KLSAgICAgICAgcEJ1ZmZlciwNCi0gICAgICAgIHN6QnVmZmVyLA0KLSAgICAgICAgcE5leHRCdWZmZXIsDQotICAgICAgICBzek5leHRCdWZmZXIgKTsNCisJcmV0dXJuIEFUOTFGX1BEQ19SZWNlaXZlRnJhbWUoDQorCQkoQVQ5MVBTX1BEQykgJihwU1NDLT5TU0NfUlBSKSwNCisJCXBCdWZmZXIsDQorCQlzekJ1ZmZlciwNCisJCXBOZXh0QnVmZmVyLA0KKwkJc3pOZXh0QnVmZmVyKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1NDX1NlbmRGcmFtZSAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIDIgaWYgUERDIGhhcyBiZWVuIGluaXRpYWxpemVkIHdpdGggQnVmZmVyIGFuZCBOZXh0IEJ1ZmZlciwgMSBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgd2l0aCBOZXh0IEJ1ZmZlciwgMCBpZiBQREMgaXMgYnVzeSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfU1NDX1NlbmRGcmFtZSggQVQ5MVBTX1NTQyBwU1NDLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICogcEJ1ZmZlciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHN6QnVmZmVyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICogcE5leHRCdWZmZXIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzek5leHRCdWZmZXIgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NTQ19TZW5kRnJhbWUNCisvLyogXGJyaWVmIFJldHVybiAyIGlmIFBEQyBoYXMgYmVlbiBpbml0aWFsaXplZCB3aXRoIEJ1ZmZlciBhbmQgTmV4dCBCdWZmZXIsIDEgaWYgUERDIGhhcyBiZWVuIGluaXRpYWxpemVkIHdpdGggTmV4dCBCdWZmZXIsIDAgaWYgUERDIGlzIGJ1c3kNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1NTQ19TZW5kRnJhbWUoDQorCUFUOTFQU19TU0MgcFNTQywNCisJY2hhciAqcEJ1ZmZlciwNCisJdW5zaWduZWQgaW50IHN6QnVmZmVyLA0KKwljaGFyICpwTmV4dEJ1ZmZlciwNCisJdW5zaWduZWQgaW50IHN6TmV4dEJ1ZmZlciApDQogew0KLSAgICByZXR1cm4gQVQ5MUZfUERDX1NlbmRGcmFtZSgNCi0gICAgICAgICggQVQ5MVBTX1BEQyApICYoIHBTU0MtPlNTQ19SUFIgKSwNCi0gICAgICAgIHBCdWZmZXIsDQotICAgICAgICBzekJ1ZmZlciwNCi0gICAgICAgIHBOZXh0QnVmZmVyLA0KLSAgICAgICAgc3pOZXh0QnVmZmVyICk7DQorCXJldHVybiBBVDkxRl9QRENfU2VuZEZyYW1lKA0KKwkJKEFUOTFQU19QREMpICYocFNTQy0+U1NDX1JQUiksDQorCQlwQnVmZmVyLA0KKwkJc3pCdWZmZXIsDQorCQlwTmV4dEJ1ZmZlciwNCisJCXN6TmV4dEJ1ZmZlcik7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1NTQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzICovDQotLyoqIFxicmllZiBSZXR1cm4gU1NDIEludGVycnVwdCBNYXNrIFN0YXR1cyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfU1NDX0dldEludGVycnVwdE1hc2tTdGF0dXMoIC8qIFxyZXR1cm4gU1NDIEludGVycnVwdCBNYXNrIFN0YXR1cyAqLw0KLSAgICBBVDkxUFNfU1NDIHBTc2MgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFNTQyBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1NDX0dldEludGVycnVwdE1hc2tTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBTU0MgSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9TU0NfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLy8gXHJldHVybiBTU0MgSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorICAgICAgICBBVDkxUFNfU1NDIHBTc2MpIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBTU0MgY29udHJvbGxlcg0KIHsNCi0gICAgcmV0dXJuIHBTc2MtPlNTQ19JTVI7DQorICAgICAgICByZXR1cm4gcFNzYy0+U1NDX0lNUjsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1NDX0lzSW50ZXJydXB0TWFza2VkICovDQotLyoqIFxicmllZiBUZXN0IGlmIFNTQyBJbnRlcnJ1cHQgaXMgTWFza2VkICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIGludCBBVDkxRl9TU0NfSXNJbnRlcnJ1cHRNYXNrZWQoIEFUOTFQU19TU0MgcFNzYywgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFNTQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NTQ19Jc0ludGVycnVwdE1hc2tlZA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBTU0MgSW50ZXJydXB0IGlzIE1hc2tlZCANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1NTQ19Jc0ludGVycnVwdE1hc2tlZCgNCisgICAgICAgIEFUOTFQU19TU0MgcFNzYywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgU1NDIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KIHsNCi0gICAgcmV0dXJuKCBBVDkxRl9TU0NfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggcFNzYyApICYgZmxhZyApOw0KKyAgICAgICAgcmV0dXJuIChBVDkxRl9TU0NfR2V0SW50ZXJydXB0TWFza1N0YXR1cyhwU3NjKSAmIGZsYWcpOw0KIH0NCiANCiAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSogICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFNQSQ0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1BJX09wZW4gKi8NCi0vKiogXGJyaWVmIE9wZW4gYSBTUEkgUG9ydCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfU1BJX09wZW4oIGNvbnN0IHVuc2lnbmVkIGludCBudWxsICkgLyogXGFyZyAqLw0KKyAgICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFNQSQ0KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1BJX09wZW4NCisvLyogXGJyaWVmIE9wZW4gYSBTUEkgUG9ydA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfU1BJX09wZW4gKA0KKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IG51bGwpICAvLyBcYXJnDQogew0KLSAgICAvKiBOT1QgREVGSU5FRCBBVCBUSElTIE1PTUVOVCAqLw0KLSAgICByZXR1cm4oIDAgKTsNCisgICAgICAgIC8qIE5PVCBERUZJTkVEIEFUIFRISVMgTU9NRU5UICovDQorICAgICAgICByZXR1cm4gKCAwICk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1NQSV9DZmdDcyAqLw0KLS8qKiBcYnJpZWYgQ29uZmlndXJlIFNQSSBjaGlwIHNlbGVjdCByZWdpc3RlciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1NQSV9DZmdDcyggQVQ5MVBTX1NQSSBwU1BJLCAvKiBwb2ludGVyIHRvIGEgU1BJIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNzLCAgICAgICAgICAvKiBTUEkgY3MgbnVtYmVyICgwIHRvIDMpICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2YWwgKSAgICAgICAgLyogIGNoaXAgc2VsZWN0IHJlZ2lzdGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1BJX0NmZ0NzDQorLy8qIFxicmllZiBDb25maWd1cmUgU1BJIGNoaXAgc2VsZWN0IHJlZ2lzdGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1BJX0NmZ0NzICgNCisJQVQ5MVBTX1NQSSBwU1BJLCAgICAgLy8gcG9pbnRlciB0byBhIFNQSSBjb250cm9sbGVyDQorCWludCBjcywgICAgIC8vIFNQSSBjcyBudW1iZXIgKDAgdG8gMykNCisgCWludCB2YWwpICAgLy8gIGNoaXAgc2VsZWN0IHJlZ2lzdGVyDQogew0KLSAgICAvKiogV3JpdGUgdG8gdGhlIENTUiByZWdpc3RlciAqLw0KLSAgICAqKCBwU1BJLT5TUElfQ1NSICsgY3MgKSA9IHZhbDsNCisJLy8qIFdyaXRlIHRvIHRoZSBDU1IgcmVnaXN0ZXINCisJKihwU1BJLT5TUElfQ1NSICsgY3MpID0gdmFsOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9TUElfRW5hYmxlSXQgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBTUEkgaW50ZXJydXB0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfU1BJX0VuYWJsZUl0KCBBVDkxUFNfU1BJIHBTUEksICAgIC8qIHBvaW50ZXIgdG8gYSBTUEkgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIElUIHRvIGJlIGVuYWJsZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUElfRW5hYmxlSXQNCisvLyogXGJyaWVmIEVuYWJsZSBTUEkgaW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1BJX0VuYWJsZUl0ICgNCisJQVQ5MVBTX1NQSSBwU1BJLCAgICAgLy8gcG9pbnRlciB0byBhIFNQSSBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAgIC8vIElUIHRvIGJlIGVuYWJsZWQNCiB7DQotICAgIC8qKiBXcml0ZSB0byB0aGUgSUVSIHJlZ2lzdGVyICovDQotICAgIHBTUEktPlNQSV9JRVIgPSBmbGFnOw0KKwkvLyogV3JpdGUgdG8gdGhlIElFUiByZWdpc3Rlcg0KKwlwU1BJLT5TUElfSUVSID0gZmxhZzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1BJX0Rpc2FibGVJdCAqLw0KLS8qKiBcYnJpZWYgRGlzYWJsZSBTUEkgaW50ZXJydXB0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfU1BJX0Rpc2FibGVJdCggQVQ5MVBTX1NQSSBwU1BJLCAgICAvKiBwb2ludGVyIHRvIGEgU1BJIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogSVQgdG8gYmUgZGlzYWJsZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUElfRGlzYWJsZUl0DQorLy8qIFxicmllZiBEaXNhYmxlIFNQSSBpbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TUElfRGlzYWJsZUl0ICgNCisJQVQ5MVBTX1NQSSBwU1BJLCAvLyBwb2ludGVyIHRvIGEgU1BJIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpIC8vIElUIHRvIGJlIGRpc2FibGVkDQogew0KLSAgICAvKiogV3JpdGUgdG8gdGhlIElEUiByZWdpc3RlciAqLw0KLSAgICBwU1BJLT5TUElfSURSID0gZmxhZzsNCisJLy8qIFdyaXRlIHRvIHRoZSBJRFIgcmVnaXN0ZXINCisJcFNQSS0+U1BJX0lEUiA9IGZsYWc7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1NQSV9SZXNldCAqLw0KLS8qKiBcYnJpZWYgUmVzZXQgdGhlIFNQSSBjb250cm9sbGVyICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfU1BJX1Jlc2V0KCBBVDkxUFNfU1BJIHBTUEkgLyogcG9pbnRlciB0byBhIFNQSSBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUElfUmVzZXQNCisvLyogXGJyaWVmIFJlc2V0IHRoZSBTUEkgY29udHJvbGxlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NQSV9SZXNldCAoDQorCUFUOTFQU19TUEkgcFNQSSAvLyBwb2ludGVyIHRvIGEgU1BJIGNvbnRyb2xsZXINCisJKQ0KIHsNCi0gICAgLyoqIFdyaXRlIHRvIHRoZSBDUiByZWdpc3RlciAqLw0KLSAgICBwU1BJLT5TUElfQ1IgPSBBVDkxQ19TUElfU1dSU1Q7DQorCS8vKiBXcml0ZSB0byB0aGUgQ1IgcmVnaXN0ZXINCisJcFNQSS0+U1BJX0NSID0gQVQ5MUNfU1BJX1NXUlNUOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9TUElfRW5hYmxlICovDQotLyoqIFxicmllZiBFbmFibGUgdGhlIFNQSSBjb250cm9sbGVyICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfU1BJX0VuYWJsZSggQVQ5MVBTX1NQSSBwU1BJIC8qIHBvaW50ZXIgdG8gYSBTUEkgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSV9FbmFibGUNCisvLyogXGJyaWVmIEVuYWJsZSB0aGUgU1BJIGNvbnRyb2xsZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TUElfRW5hYmxlICgNCisJQVQ5MVBTX1NQSSBwU1BJIC8vIHBvaW50ZXIgdG8gYSBTUEkgY29udHJvbGxlcg0KKwkpDQogew0KLSAgICAvKiogV3JpdGUgdG8gdGhlIENSIHJlZ2lzdGVyICovDQotICAgIHBTUEktPlNQSV9DUiA9IEFUOTFDX1NQSV9TUElFTjsNCisJLy8qIFdyaXRlIHRvIHRoZSBDUiByZWdpc3Rlcg0KKwlwU1BJLT5TUElfQ1IgPSBBVDkxQ19TUElfU1BJRU47DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1NQSV9EaXNhYmxlICovDQotLyoqIFxicmllZiBEaXNhYmxlIHRoZSBTUEkgY29udHJvbGxlciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1NQSV9EaXNhYmxlKCBBVDkxUFNfU1BJIHBTUEkgLyogcG9pbnRlciB0byBhIFNQSSBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSV9EaXNhYmxlDQorLy8qIFxicmllZiBEaXNhYmxlIHRoZSBTUEkgY29udHJvbGxlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NQSV9EaXNhYmxlICgNCisJQVQ5MVBTX1NQSSBwU1BJIC8vIHBvaW50ZXIgdG8gYSBTUEkgY29udHJvbGxlcg0KKwkpDQogew0KLSAgICAvKiogV3JpdGUgdG8gdGhlIENSIHJlZ2lzdGVyICovDQorCS8vKiBXcml0ZSB0byB0aGUgQ1IgcmVnaXN0ZXINCisJcFNQSS0+U1BJX0NSID0gQVQ5MUNfU1BJX1NQSURJUzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1BJX0NmZ01vZGUNCisvLyogXGJyaWVmIEVuYWJsZSB0aGUgU1BJIGNvbnRyb2xsZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TUElfQ2ZnTW9kZSAoDQorCUFUOTFQU19TUEkgcFNQSSwgLy8gcG9pbnRlciB0byBhIFNQSSBjb250cm9sbGVyDQorCWludCBtb2RlKSAgICAgICAgLy8gbW9kZSByZWdpc3RlciANCit7DQorCS8vKiBXcml0ZSB0byB0aGUgTVIgcmVnaXN0ZXINCisJcFNQSS0+U1BJX01SID0gbW9kZTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1BJX0NmZ1BDUw0KKy8vKiBcYnJpZWYgU3dpdGNoIHRvIHRoZSBjb3JyZWN0IFBDUyBvZiBTUEkgTW9kZSBSZWdpc3RlciA6IEZpeGVkIFBlcmlwaGVyYWwgU2VsZWN0ZWQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TUElfQ2ZnUENTICgNCisJQVQ5MVBTX1NQSSBwU1BJLCAvLyBwb2ludGVyIHRvIGEgU1BJIGNvbnRyb2xsZXINCisJY2hhciBQQ1NfRGV2aWNlKSAvLyBQQ1Mgb2YgdGhlIERldmljZQ0KK3sJDQorIAkvLyogV3JpdGUgdG8gdGhlIE1SIHJlZ2lzdGVyDQorCXBTUEktPlNQSV9NUiAmPSAweEZGRjBGRkZGOw0KKwlwU1BJLT5TUElfTVIgfD0gKCAoUENTX0RldmljZTw8MTYpICYgQVQ5MUNfU1BJX1BDUyApOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUElfUmVjZWl2ZUZyYW1lDQorLy8qIFxicmllZiBSZXR1cm4gMiBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgd2l0aCBCdWZmZXIgYW5kIE5leHQgQnVmZmVyLCAxIGlmIFBEQyBoYXMgYmVlbiBpbml0aWFsaXphZWQgd2l0aCBOZXh0IEJ1ZmZlciwgMCBpZiBQREMgaXMgYnVzeQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfU1BJX1JlY2VpdmVGcmFtZSAoDQorCUFUOTFQU19TUEkgcFNQSSwNCisJY2hhciAqcEJ1ZmZlciwNCisJdW5zaWduZWQgaW50IHN6QnVmZmVyLA0KKwljaGFyICpwTmV4dEJ1ZmZlciwNCisJdW5zaWduZWQgaW50IHN6TmV4dEJ1ZmZlciApDQorew0KKwlyZXR1cm4gQVQ5MUZfUERDX1JlY2VpdmVGcmFtZSgNCisJCShBVDkxUFNfUERDKSAmKHBTUEktPlNQSV9SUFIpLA0KKwkJcEJ1ZmZlciwNCisJCXN6QnVmZmVyLA0KKwkJcE5leHRCdWZmZXIsDQorCQlzek5leHRCdWZmZXIpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUElfU2VuZEZyYW1lDQorLy8qIFxicmllZiBSZXR1cm4gMiBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgd2l0aCBCdWZmZXIgYW5kIE5leHQgQnVmZmVyLCAxIGlmIFBEQyBoYXMgYmVlbiBpbml0aWFsaXphZWQgd2l0aCBOZXh0IEJ1ZmZlciwgMCBpZiBQREMgaXMgYlNQSXkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1NQSV9TZW5kRnJhbWUoDQorCUFUOTFQU19TUEkgcFNQSSwNCisJY2hhciAqcEJ1ZmZlciwNCisJdW5zaWduZWQgaW50IHN6QnVmZmVyLA0KKwljaGFyICpwTmV4dEJ1ZmZlciwNCisJdW5zaWduZWQgaW50IHN6TmV4dEJ1ZmZlciApDQorew0KKwlyZXR1cm4gQVQ5MUZfUERDX1NlbmRGcmFtZSgNCisJCShBVDkxUFNfUERDKSAmKHBTUEktPlNQSV9SUFIpLA0KKwkJcEJ1ZmZlciwNCisJCXN6QnVmZmVyLA0KKwkJcE5leHRCdWZmZXIsDQorCQlzek5leHRCdWZmZXIpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUElfQ2xvc2UNCisvLyogXGJyaWVmIENsb3NlIFNQSTogZGlzYWJsZSBJVCBkaXNhYmxlIHRyYW5zZmVydCwgY2xvc2UgUERDDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1BJX0Nsb3NlICgNCisJQVQ5MVBTX1NQSSBwU1BJKSAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgU1BJIGNvbnRyb2xsZXINCit7DQorICAgIC8vKiBSZXNldCBhbGwgdGhlIENoaXAgU2VsZWN0IHJlZ2lzdGVyDQorICAgIHBTUEktPlNQSV9DU1JbMF0gPSAwIDsNCisgICAgcFNQSS0+U1BJX0NTUlsxXSA9IDAgOw0KKyAgICBwU1BJLT5TUElfQ1NSWzJdID0gMCA7DQorICAgIHBTUEktPlNQSV9DU1JbM10gPSAwIDsNCisNCisgICAgLy8qIFJlc2V0IHRoZSBTUEkgbW9kZQ0KKyAgICBwU1BJLT5TUElfTVIgPSAwICA7DQorDQorICAgIC8vKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzDQorICAgIHBTUEktPlNQSV9JRFIgPSAweEZGRkZGRkZGIDsNCisNCisgICAgLy8qIEFib3J0IHRoZSBQZXJpcGhlcmFsIERhdGEgVHJhbnNmZXJzDQorICAgIEFUOTFGX1BEQ19DbG9zZSgoQVQ5MVBTX1BEQykgJihwU1BJLT5TUElfUlBSKSk7DQorDQorICAgIC8vKiBEaXNhYmxlIHJlY2VpdmVyIGFuZCB0cmFuc21pdHRlciBhbmQgc3RvcCBhbnkgYWN0aXZpdHkgaW1tZWRpYXRlbHkNCiAgICAgcFNQSS0+U1BJX0NSID0gQVQ5MUNfU1BJX1NQSURJUzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1BJX0NmZ01vZGUgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSB0aGUgU1BJIGNvbnRyb2xsZXIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9TUElfQ2ZnTW9kZSggQVQ5MVBTX1NQSSBwU1BJLCAvKiBwb2ludGVyIHRvIGEgU1BJIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSApICAgICAgIC8qIG1vZGUgcmVnaXN0ZXIgKi8NCi17DQotICAgIC8qKiBXcml0ZSB0byB0aGUgTVIgcmVnaXN0ZXIgKi8NCi0gICAgcFNQSS0+U1BJX01SID0gbW9kZTsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1BJX0NmZ1BDUyAqLw0KLS8qKiBcYnJpZWYgU3dpdGNoIHRvIHRoZSBjb3JyZWN0IFBDUyBvZiBTUEkgTW9kZSBSZWdpc3RlciA6IEZpeGVkIFBlcmlwaGVyYWwgU2VsZWN0ZWQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9TUElfQ2ZnUENTKCBBVDkxUFNfU1BJIHBTUEksICAvKiBwb2ludGVyIHRvIGEgU1BJIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgUENTX0RldmljZSApIC8qIFBDUyBvZiB0aGUgRGV2aWNlICovDQotew0KLSAgICAvKiogV3JpdGUgdG8gdGhlIE1SIHJlZ2lzdGVyICovDQotICAgIHBTUEktPlNQSV9NUiAmPSAweEZGRjBGRkZGOw0KLSAgICBwU1BJLT5TUElfTVIgfD0gKCAoIFBDU19EZXZpY2UgPDwgMTYgKSAmIEFUOTFDX1NQSV9QQ1MgKTsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1BJX1JlY2VpdmVGcmFtZSAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIDIgaWYgUERDIGhhcyBiZWVuIGluaXRpYWxpemVkIHdpdGggQnVmZmVyIGFuZCBOZXh0IEJ1ZmZlciwgMSBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6YWVkIHdpdGggTmV4dCBCdWZmZXIsIDAgaWYgUERDIGlzIGJ1c3kgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1NQSV9SZWNlaXZlRnJhbWUoIEFUOTFQU19TUEkgcFNQSSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqIHBCdWZmZXIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzekJ1ZmZlciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqIHBOZXh0QnVmZmVyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3pOZXh0QnVmZmVyICkNCi17DQotICAgIHJldHVybiBBVDkxRl9QRENfUmVjZWl2ZUZyYW1lKA0KLSAgICAgICAgKCBBVDkxUFNfUERDICkgJiggcFNQSS0+U1BJX1JQUiApLA0KLSAgICAgICAgcEJ1ZmZlciwNCi0gICAgICAgIHN6QnVmZmVyLA0KLSAgICAgICAgcE5leHRCdWZmZXIsDQotICAgICAgICBzek5leHRCdWZmZXIgKTsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1BJX1NlbmRGcmFtZSAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIDIgaWYgUERDIGhhcyBiZWVuIGluaXRpYWxpemVkIHdpdGggQnVmZmVyIGFuZCBOZXh0IEJ1ZmZlciwgMSBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6YWVkIHdpdGggTmV4dCBCdWZmZXIsIDAgaWYgUERDIGlzIGJTUEl5ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9TUElfU2VuZEZyYW1lKCBBVDkxUFNfU1BJIHBTUEksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBwQnVmZmVyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3pCdWZmZXIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBwTmV4dEJ1ZmZlciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHN6TmV4dEJ1ZmZlciApDQotew0KLSAgICByZXR1cm4gQVQ5MUZfUERDX1NlbmRGcmFtZSgNCi0gICAgICAgICggQVQ5MVBTX1BEQyApICYoIHBTUEktPlNQSV9SUFIgKSwNCi0gICAgICAgIHBCdWZmZXIsDQotICAgICAgICBzekJ1ZmZlciwNCi0gICAgICAgIHBOZXh0QnVmZmVyLA0KLSAgICAgICAgc3pOZXh0QnVmZmVyICk7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1NQSV9DbG9zZSAqLw0KLS8qKiBcYnJpZWYgQ2xvc2UgU1BJOiBkaXNhYmxlIElUIGRpc2FibGUgdHJhbnNmZXJ0LCBjbG9zZSBQREMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9TUElfQ2xvc2UoIEFUOTFQU19TUEkgcFNQSSApIC8qIFxhcmcgcG9pbnRlciB0byBhIFNQSSBjb250cm9sbGVyICovDQotew0KLSAgICAvKiogUmVzZXQgYWxsIHRoZSBDaGlwIFNlbGVjdCByZWdpc3RlciAqLw0KLSAgICBwU1BJLT5TUElfQ1NSWyAwIF0gPSAwOw0KLSAgICBwU1BJLT5TUElfQ1NSWyAxIF0gPSAwOw0KLSAgICBwU1BJLT5TUElfQ1NSWyAyIF0gPSAwOw0KLSAgICBwU1BJLT5TUElfQ1NSWyAzIF0gPSAwOw0KLQ0KLSAgICAvKiogUmVzZXQgdGhlIFNQSSBtb2RlICovDQotICAgIHBTUEktPlNQSV9NUiA9IDA7DQotDQotICAgIC8qKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICovDQotICAgIHBTUEktPlNQSV9JRFIgPSAweEZGRkZGRkZGOw0KLQ0KLSAgICAvKiogQWJvcnQgdGhlIFBlcmlwaGVyYWwgRGF0YSBUcmFuc2ZlcnMgKi8NCi0gICAgQVQ5MUZfUERDX0Nsb3NlKCAoIEFUOTFQU19QREMgKSAmKCBwU1BJLT5TUElfUlBSICkgKTsNCi0NCi0gICAgLyoqIERpc2FibGUgcmVjZWl2ZXIgYW5kIHRyYW5zbWl0dGVyIGFuZCBzdG9wIGFueSBhY3Rpdml0eSBpbW1lZGlhdGVseSAqLw0KLSAgICBwU1BJLT5TUElfQ1IgPSBBVDkxQ19TUElfU1BJRElTOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9TUElfUHV0Q2hhciAqLw0KLS8qKiBcYnJpZWYgU2VuZCBhIGNoYXJhY3Rlcixkb2VzIG5vdCBjaGVjayBpZiByZWFkeSB0byBzZW5kICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfU1BJX1B1dENoYXIoIEFUOTFQU19TUEkgcFNQSSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY2hhcmFjdGVyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjc19udW1iZXIgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSV9QdXRDaGFyDQorLy8qIFxicmllZiBTZW5kIGEgY2hhcmFjdGVyLGRvZXMgbm90IGNoZWNrIGlmIHJlYWR5IHRvIHNlbmQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TUElfUHV0Q2hhciAoDQorCUFUOTFQU19TUEkgcFNQSSwNCisJdW5zaWduZWQgaW50IGNoYXJhY3RlciwNCisgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNzX251bWJlciApDQogew0KICAgICB1bnNpZ25lZCBpbnQgdmFsdWVfZm9yX2NzOw0KLQ0KLSAgICB2YWx1ZV9mb3JfY3MgPSAoIH4oIDEgPDwgY3NfbnVtYmVyICkgKSAmIDB4RjsgLypQbGFjZSBhIHplcm8gYW1vbmcgYSA0IE9ORXMgbnVtYmVyICovDQotICAgIHBTUEktPlNQSV9URFIgPSAoIGNoYXJhY3RlciAmIDB4RkZGRiApIHwgKCB2YWx1ZV9mb3JfY3MgPDwgMTYgKTsNCisgICAgdmFsdWVfZm9yX2NzID0gKH4oMSA8PCBjc19udW1iZXIpKSAmIDB4RjsgIC8vUGxhY2UgYSB6ZXJvIGFtb25nIGEgNCBPTkVzIG51bWJlcg0KKyAgICBwU1BJLT5TUElfVERSID0gKGNoYXJhY3RlciAmIDB4RkZGRikgfCAodmFsdWVfZm9yX2NzIDw8IDE2KTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1BJX0dldENoYXIgKi8NCi0vKiogXGJyaWVmIFJlY2VpdmUgYSBjaGFyYWN0ZXIsZG9lcyBub3QgY2hlY2sgaWYgYSBjaGFyYWN0ZXIgaXMgYXZhaWxhYmxlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIGludCBBVDkxRl9TUElfR2V0Q2hhciggY29uc3QgQVQ5MVBTX1NQSSBwU1BJICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUElfR2V0Q2hhcg0KKy8vKiBcYnJpZWYgUmVjZWl2ZSBhIGNoYXJhY3Rlcixkb2VzIG5vdCBjaGVjayBpZiBhIGNoYXJhY3RlciBpcyBhdmFpbGFibGUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1NQSV9HZXRDaGFyICgNCisJY29uc3QgQVQ5MVBTX1NQSSBwU1BJKQ0KIHsNCi0gICAgcmV0dXJuKCAoIHBTUEktPlNQSV9SRFIgKSAmIDB4RkZGRiApOw0KKyAgICByZXR1cm4oKHBTUEktPlNQSV9SRFIpICYgMHhGRkZGKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1BJX0dldEludGVycnVwdE1hc2tTdGF0dXMgKi8NCi0vKiogXGJyaWVmIFJldHVybiBTUEkgSW50ZXJydXB0IE1hc2sgU3RhdHVzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9TUElfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLyogXHJldHVybiBTUEkgSW50ZXJydXB0IE1hc2sgU3RhdHVzICovDQotICAgIEFUOTFQU19TUEkgcFNwaSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgU1BJIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUElfR2V0SW50ZXJydXB0TWFza1N0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFNQSSBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1NQSV9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCAvLyBccmV0dXJuIFNQSSBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisgICAgICAgIEFUOTFQU19TUEkgcFNwaSkgLy8gXGFyZyAgcG9pbnRlciB0byBhIFNQSSBjb250cm9sbGVyDQogew0KLSAgICByZXR1cm4gcFNwaS0+U1BJX0lNUjsNCisgICAgICAgIHJldHVybiBwU3BpLT5TUElfSU1SOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9TUElfSXNJbnRlcnJ1cHRNYXNrZWQgKi8NCi0vKiogXGJyaWVmIFRlc3QgaWYgU1BJIEludGVycnVwdCBpcyBNYXNrZWQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgaW50IEFUOTFGX1NQSV9Jc0ludGVycnVwdE1hc2tlZCggQVQ5MVBTX1NQSSBwU3BpLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgU1BJIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1BJX0lzSW50ZXJydXB0TWFza2VkDQorLy8qIFxicmllZiBUZXN0IGlmIFNQSSBJbnRlcnJ1cHQgaXMgTWFza2VkIA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfU1BJX0lzSW50ZXJydXB0TWFza2VkKA0KKyAgICAgICAgQVQ5MVBTX1NQSSBwU3BpLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBTUEkgY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQogew0KLSAgICByZXR1cm4oIEFUOTFGX1NQSV9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCBwU3BpICkgJiBmbGFnICk7DQorICAgICAgICByZXR1cm4gKEFUOTFGX1NQSV9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKHBTcGkpICYgZmxhZyk7DQogfQ0KIA0KIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotKiAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgUFdNQw0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUFdNX0dldFN0YXR1cyAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIFBXTSBJbnRlcnJ1cHQgU3RhdHVzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QV01DX0dldFN0YXR1cyggLyogXHJldHVybiBQV00gSW50ZXJydXB0IFN0YXR1cyAqLw0KLSAgICBBVDkxUFNfUFdNQyBwUFdNICkgICAgICAgICAgICAgICAgICAgICAgLyogcG9pbnRlciB0byBhIFBXTSBjb250cm9sbGVyICovDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgUFdNQw0KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUFdNX0dldFN0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFBXTSBJbnRlcnJ1cHQgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QV01DX0dldFN0YXR1cyggLy8gXHJldHVybiBQV00gSW50ZXJydXB0IFN0YXR1cw0KKwlBVDkxUFNfUFdNQyBwUFdNKSAvLyBwb2ludGVyIHRvIGEgUFdNIGNvbnRyb2xsZXINCiB7DQotICAgIHJldHVybiBwUFdNLT5QV01DX1NSOw0KKwlyZXR1cm4gcFBXTS0+UFdNQ19TUjsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUFdNX0ludGVycnVwdEVuYWJsZSAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIFBXTSBJbnRlcnJ1cHQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QV01DX0ludGVycnVwdEVuYWJsZSggQVQ5MVBTX1BXTUMgcFB3bSwgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUFdNIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIFBXTSBpbnRlcnJ1cHQgdG8gYmUgZW5hYmxlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BXTV9JbnRlcnJ1cHRFbmFibGUNCisvLyogXGJyaWVmIEVuYWJsZSBQV00gSW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUFdNQ19JbnRlcnJ1cHRFbmFibGUoDQorICAgICAgICBBVDkxUFNfUFdNQyBwUHdtLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQV00gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIFBXTSBpbnRlcnJ1cHQgdG8gYmUgZW5hYmxlZA0KIHsNCi0gICAgcFB3bS0+UFdNQ19JRVIgPSBmbGFnOw0KKyAgICAgICAgcFB3bS0+UFdNQ19JRVIgPSBmbGFnOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QV01fSW50ZXJydXB0RGlzYWJsZSAqLw0KLS8qKiBcYnJpZWYgRGlzYWJsZSBQV00gSW50ZXJydXB0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUFdNQ19JbnRlcnJ1cHREaXNhYmxlKCBBVDkxUFNfUFdNQyBwUHdtLCAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQV00gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIFBXTSBpbnRlcnJ1cHQgdG8gYmUgZGlzYWJsZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QV01fSW50ZXJydXB0RGlzYWJsZQ0KKy8vKiBcYnJpZWYgRGlzYWJsZSBQV00gSW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUFdNQ19JbnRlcnJ1cHREaXNhYmxlKA0KKyAgICAgICAgQVQ5MVBTX1BXTUMgcFB3bSwgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUFdNIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBQV00gaW50ZXJydXB0IHRvIGJlIGRpc2FibGVkDQogew0KLSAgICBwUHdtLT5QV01DX0lEUiA9IGZsYWc7DQorICAgICAgICBwUHdtLT5QV01DX0lEUiA9IGZsYWc7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BXTV9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzICovDQotLyoqIFxicmllZiBSZXR1cm4gUFdNIEludGVycnVwdCBNYXNrIFN0YXR1cyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUFdNQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCAvKiBccmV0dXJuIFBXTSBJbnRlcnJ1cHQgTWFzayBTdGF0dXMgKi8NCi0gICAgQVQ5MVBTX1BXTUMgcFB3bSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUFdNIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QV01fR2V0SW50ZXJydXB0TWFza1N0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFBXTSBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BXTUNfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLy8gXHJldHVybiBQV00gSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorICAgICAgICBBVDkxUFNfUFdNQyBwUHdtKSAvLyBcYXJnICBwb2ludGVyIHRvIGEgUFdNIGNvbnRyb2xsZXINCiB7DQotICAgIHJldHVybiBwUHdtLT5QV01DX0lNUjsNCisgICAgICAgIHJldHVybiBwUHdtLT5QV01DX0lNUjsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUFdNX0lzSW50ZXJydXB0TWFza2VkICovDQotLyoqIFxicmllZiBUZXN0IGlmIFBXTSBJbnRlcnJ1cHQgaXMgTWFza2VkICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QV01DX0lzSW50ZXJydXB0TWFza2VkKCBBVDkxUFNfUFdNQyBwUFdNLCAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQV00gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUFdNX0lzSW50ZXJydXB0TWFza2VkDQorLy8qIFxicmllZiBUZXN0IGlmIFBXTSBJbnRlcnJ1cHQgaXMgTWFza2VkDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QV01DX0lzSW50ZXJydXB0TWFza2VkKA0KKyAgICAgICAgQVQ5MVBTX1BXTUMgcFBXTSwgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUFdNIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KIHsNCi0gICAgcmV0dXJuKCBBVDkxRl9QV01DX0dldEludGVycnVwdE1hc2tTdGF0dXMoIHBQV00gKSAmIGZsYWcgKTsNCisJcmV0dXJuIChBVDkxRl9QV01DX0dldEludGVycnVwdE1hc2tTdGF0dXMocFBXTSkgJiBmbGFnKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUFdNX0lzU3RhdHVzU2V0ICovDQotLyoqIFxicmllZiBUZXN0IGlmIFBXTSBJbnRlcnJ1cHQgaXMgU2V0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QV01DX0lzU3RhdHVzU2V0KCBBVDkxUFNfUFdNQyBwUFdNLCAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQV00gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUFdNX0lzU3RhdHVzU2V0DQorLy8qIFxicmllZiBUZXN0IGlmIFBXTSBJbnRlcnJ1cHQgaXMgU2V0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QV01DX0lzU3RhdHVzU2V0KA0KKyAgICAgICAgQVQ5MVBTX1BXTUMgcFBXTSwgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUFdNIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KIHsNCi0gICAgcmV0dXJuKCBBVDkxRl9QV01DX0dldFN0YXR1cyggcFBXTSApICYgZmxhZyApOw0KKwlyZXR1cm4gKEFUOTFGX1BXTUNfR2V0U3RhdHVzKHBQV00pICYgZmxhZyk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BXTV9DZmdDaGFubmVsICovDQotLyoqIFxicmllZiBUZXN0IGlmIFBXTSBJbnRlcnJ1cHQgaXMgU2V0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUFdNQ19DZmdDaGFubmVsKCBBVDkxUFNfUFdNQyBwUFdNLCAgICAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUFdNIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNoYW5uZWxJZCwgLyogXGFyZyBQV00gY2hhbm5lbCBJRCAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbW9kZSwgICAgICAvKiBcYXJnICBQV00gbW9kZSAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcGVyaW9kLCAgICAvKiBcYXJnIFBXTSBwZXJpb2QgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGR1dHkgKSAgICAgLyogXGFyZyBQV00gZHV0eSBjeWNsZSAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BXTV9DZmdDaGFubmVsDQorLy8qIFxicmllZiBUZXN0IGlmIFBXTSBJbnRlcnJ1cHQgaXMgU2V0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUFdNQ19DZmdDaGFubmVsKA0KKyAgICAgICAgQVQ5MVBTX1BXTUMgcFBXTSwgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUFdNIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBjaGFubmVsSWQsIC8vIFxhcmcgUFdNIGNoYW5uZWwgSUQNCisgICAgICAgIHVuc2lnbmVkIGludCBtb2RlLCAvLyBcYXJnICBQV00gbW9kZQ0KKyAgICAgICAgdW5zaWduZWQgaW50IHBlcmlvZCwgLy8gXGFyZyBQV00gcGVyaW9kDQorICAgICAgICB1bnNpZ25lZCBpbnQgZHV0eSkgLy8gXGFyZyBQV00gZHV0eSBjeWNsZQ0KIHsNCi0gICAgcFBXTS0+UFdNQ19DSFsgY2hhbm5lbElkIF0uUFdNQ19DTVIgPSBtb2RlOw0KLSAgICBwUFdNLT5QV01DX0NIWyBjaGFubmVsSWQgXS5QV01DX0NEVFlSID0gZHV0eTsNCi0gICAgcFBXTS0+UFdNQ19DSFsgY2hhbm5lbElkIF0uUFdNQ19DUFJEUiA9IHBlcmlvZDsNCisJcFBXTS0+UFdNQ19DSFtjaGFubmVsSWRdLlBXTUNfQ01SID0gbW9kZTsNCisJcFBXTS0+UFdNQ19DSFtjaGFubmVsSWRdLlBXTUNfQ0RUWVIgPSBkdXR5Ow0KKwlwUFdNLT5QV01DX0NIW2NoYW5uZWxJZF0uUFdNQ19DUFJEUiA9IHBlcmlvZDsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUFdNX1N0YXJ0Q2hhbm5lbCAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIGNoYW5uZWwgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QV01DX1N0YXJ0Q2hhbm5lbCggQVQ5MVBTX1BXTUMgcFBXTSwgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUFdNIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIENoYW5uZWxzIElEcyB0byBiZSBlbmFibGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUFdNX1N0YXJ0Q2hhbm5lbA0KKy8vKiBcYnJpZWYgRW5hYmxlIGNoYW5uZWwNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QV01DX1N0YXJ0Q2hhbm5lbCgNCisgICAgICAgIEFUOTFQU19QV01DIHBQV00sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBXTSBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgQ2hhbm5lbHMgSURzIHRvIGJlIGVuYWJsZWQNCiB7DQotICAgIHBQV00tPlBXTUNfRU5BID0gZmxhZzsNCisJcFBXTS0+UFdNQ19FTkEgPSBmbGFnOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QV01fU3RvcENoYW5uZWwgKi8NCi0vKiogXGJyaWVmIERpc2FibGUgY2hhbm5lbCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BXTUNfU3RvcENoYW5uZWwoIEFUOTFQU19QV01DIHBQV00sICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBXTSBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIENoYW5uZWxzIElEcyB0byBiZSBlbmFibGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUFdNX1N0b3BDaGFubmVsDQorLy8qIFxicmllZiBEaXNhYmxlIGNoYW5uZWwNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QV01DX1N0b3BDaGFubmVsKA0KKyAgICAgICAgQVQ5MVBTX1BXTUMgcFBXTSwgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUFdNIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBDaGFubmVscyBJRHMgdG8gYmUgZW5hYmxlZA0KIHsNCi0gICAgcFBXTS0+UFdNQ19ESVMgPSBmbGFnOw0KKwlwUFdNLT5QV01DX0RJUyA9IGZsYWc7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BXTV9VcGRhdGVDaGFubmVsICovDQotLyoqIFxicmllZiBVcGRhdGUgUGVyaW9kIG9yIER1dHkgQ3ljbGUgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QV01DX1VwZGF0ZUNoYW5uZWwoIEFUOTFQU19QV01DIHBQV00sICAgICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQV00gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY2hhbm5lbElkLCAvKiBcYXJnIFBXTSBjaGFubmVsIElEICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB1cGRhdGUgKSAgIC8qIFxhcmcgIENoYW5uZWxzIElEcyB0byBiZSBlbmFibGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUFdNX1VwZGF0ZUNoYW5uZWwNCisvLyogXGJyaWVmIFVwZGF0ZSBQZXJpb2Qgb3IgRHV0eSBDeWNsZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BXTUNfVXBkYXRlQ2hhbm5lbCgNCisgICAgICAgIEFUOTFQU19QV01DIHBQV00sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBXTSBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgY2hhbm5lbElkLCAvLyBcYXJnIFBXTSBjaGFubmVsIElEDQorICAgICAgICB1bnNpZ25lZCBpbnQgdXBkYXRlKSAvLyBcYXJnICBDaGFubmVscyBJRHMgdG8gYmUgZW5hYmxlZA0KIHsNCi0gICAgcFBXTS0+UFdNQ19DSFsgY2hhbm5lbElkIF0uUFdNQ19DVVBEUiA9IHVwZGF0ZTsNCisJcFBXTS0+UFdNQ19DSFtjaGFubmVsSWRdLlBXTUNfQ1VQRFIgPSB1cGRhdGU7DQogfQ0KIA0KIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotKiAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgVEMNCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1RDX0ludGVycnVwdEVuYWJsZSAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIFRDIEludGVycnVwdCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1RDX0ludGVycnVwdEVuYWJsZSggQVQ5MVBTX1RDIHBUYywgICAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgVEMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIFRDIGludGVycnVwdCB0byBiZSBlbmFibGVkICovDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgVEMNCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RDX0ludGVycnVwdEVuYWJsZQ0KKy8vKiBcYnJpZWYgRW5hYmxlIFRDIEludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1RDX0ludGVycnVwdEVuYWJsZSgNCisgICAgICAgIEFUOTFQU19UQyBwVGMsICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFRDIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBUQyBpbnRlcnJ1cHQgdG8gYmUgZW5hYmxlZA0KIHsNCi0gICAgcFRjLT5UQ19JRVIgPSBmbGFnOw0KKyAgICAgICAgcFRjLT5UQ19JRVIgPSBmbGFnOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9UQ19JbnRlcnJ1cHREaXNhYmxlICovDQotLyoqIFxicmllZiBEaXNhYmxlIFRDIEludGVycnVwdCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1RDX0ludGVycnVwdERpc2FibGUoIEFUOTFQU19UQyBwVGMsICAgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFRDIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgVEMgaW50ZXJydXB0IHRvIGJlIGRpc2FibGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVENfSW50ZXJydXB0RGlzYWJsZQ0KKy8vKiBcYnJpZWYgRGlzYWJsZSBUQyBJbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UQ19JbnRlcnJ1cHREaXNhYmxlKA0KKyAgICAgICAgQVQ5MVBTX1RDIHBUYywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgVEMgY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIFRDIGludGVycnVwdCB0byBiZSBkaXNhYmxlZA0KIHsNCi0gICAgcFRjLT5UQ19JRFIgPSBmbGFnOw0KKyAgICAgICAgcFRjLT5UQ19JRFIgPSBmbGFnOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9UQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzICovDQotLyoqIFxicmllZiBSZXR1cm4gVEMgSW50ZXJydXB0IE1hc2sgU3RhdHVzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9UQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCAvKiBccmV0dXJuIFRDIEludGVycnVwdCBNYXNrIFN0YXR1cyAqLw0KLSAgICBBVDkxUFNfVEMgcFRjICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgVEMgY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RDX0dldEludGVycnVwdE1hc2tTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBUQyBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1RDX0dldEludGVycnVwdE1hc2tTdGF0dXMoIC8vIFxyZXR1cm4gVEMgSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorICAgICAgICBBVDkxUFNfVEMgcFRjKSAvLyBcYXJnICBwb2ludGVyIHRvIGEgVEMgY29udHJvbGxlcg0KIHsNCi0gICAgcmV0dXJuIHBUYy0+VENfSU1SOw0KKyAgICAgICAgcmV0dXJuIHBUYy0+VENfSU1SOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9UQ19Jc0ludGVycnVwdE1hc2tlZCAqLw0KLS8qKiBcYnJpZWYgVGVzdCBpZiBUQyBJbnRlcnJ1cHQgaXMgTWFza2VkICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIGludCBBVDkxRl9UQ19Jc0ludGVycnVwdE1hc2tlZCggQVQ5MVBTX1RDIHBUYywgICAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgVEMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RDX0lzSW50ZXJydXB0TWFza2VkDQorLy8qIFxicmllZiBUZXN0IGlmIFRDIEludGVycnVwdCBpcyBNYXNrZWQgDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9UQ19Jc0ludGVycnVwdE1hc2tlZCgNCisgICAgICAgIEFUOTFQU19UQyBwVGMsICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFRDIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KIHsNCi0gICAgcmV0dXJuKCBBVDkxRl9UQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCBwVGMgKSAmIGZsYWcgKTsNCisgICAgICAgIHJldHVybiAoQVQ5MUZfVENfR2V0SW50ZXJydXB0TWFza1N0YXR1cyhwVGMpICYgZmxhZyk7DQogfQ0KIA0KIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotKiAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgUE1DDQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QTUNfQ2ZnU3lzQ2xrRW5hYmxlUmVnICovDQotLyoqIFxicmllZiBDb25maWd1cmUgdGhlIFN5c3RlbSBDbG9jayBFbmFibGUgUmVnaXN0ZXIgb2YgdGhlIFBNQyBjb250cm9sbGVyICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0NmZ1N5c0Nsa0VuYWJsZVJlZyggQVQ5MVBTX1BNQyBwUE1DLCAvKiBcYXJnIHBvaW50ZXIgdG8gUE1DIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtb2RlICkNCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBQTUMNCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19DZmdTeXNDbGtFbmFibGVSZWcNCisvLyogXGJyaWVmIENvbmZpZ3VyZSB0aGUgU3lzdGVtIENsb2NrIEVuYWJsZSBSZWdpc3RlciBvZiB0aGUgUE1DIGNvbnRyb2xsZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QTUNfQ2ZnU3lzQ2xrRW5hYmxlUmVnICgNCisJQVQ5MVBTX1BNQyBwUE1DLCAvLyBcYXJnIHBvaW50ZXIgdG8gUE1DIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IG1vZGUpDQogew0KLSAgICAvKiogV3JpdGUgdG8gdGhlIFNDRVIgcmVnaXN0ZXIgKi8NCi0gICAgcFBNQy0+UE1DX1NDRVIgPSBtb2RlOw0KKwkvLyogV3JpdGUgdG8gdGhlIFNDRVIgcmVnaXN0ZXINCisJcFBNQy0+UE1DX1NDRVIgPSBtb2RlOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QTUNfQ2ZnU3lzQ2xrRGlzYWJsZVJlZyAqLw0KLS8qKiBcYnJpZWYgQ29uZmlndXJlIHRoZSBTeXN0ZW0gQ2xvY2sgRGlzYWJsZSBSZWdpc3RlciBvZiB0aGUgUE1DIGNvbnRyb2xsZXIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QTUNfQ2ZnU3lzQ2xrRGlzYWJsZVJlZyggQVQ5MVBTX1BNQyBwUE1DLCAvKiBcYXJnIHBvaW50ZXIgdG8gUE1DIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbW9kZSApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUE1DX0NmZ1N5c0Nsa0Rpc2FibGVSZWcNCisvLyogXGJyaWVmIENvbmZpZ3VyZSB0aGUgU3lzdGVtIENsb2NrIERpc2FibGUgUmVnaXN0ZXIgb2YgdGhlIFBNQyBjb250cm9sbGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0NmZ1N5c0Nsa0Rpc2FibGVSZWcgKA0KKwlBVDkxUFNfUE1DIHBQTUMsIC8vIFxhcmcgcG9pbnRlciB0byBQTUMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgbW9kZSkNCiB7DQotICAgIC8qKiBXcml0ZSB0byB0aGUgU0NEUiByZWdpc3RlciAqLw0KLSAgICBwUE1DLT5QTUNfU0NEUiA9IG1vZGU7DQorCS8vKiBXcml0ZSB0byB0aGUgU0NEUiByZWdpc3Rlcg0KKwlwUE1DLT5QTUNfU0NEUiA9IG1vZGU7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BNQ19HZXRTeXNDbGtTdGF0dXNSZWcgKi8NCi0vKiogXGJyaWVmIFJldHVybiB0aGUgU3lzdGVtIENsb2NrIFN0YXR1cyBSZWdpc3RlciBvZiB0aGUgUE1DIGNvbnRyb2xsZXIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BNQ19HZXRTeXNDbGtTdGF0dXNSZWcoIEFUOTFQU19QTUMgcFBNQyAvKiBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19HZXRTeXNDbGtTdGF0dXNSZWcNCisvLyogXGJyaWVmIFJldHVybiB0aGUgU3lzdGVtIENsb2NrIFN0YXR1cyBSZWdpc3RlciBvZiB0aGUgUE1DIGNvbnRyb2xsZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BNQ19HZXRTeXNDbGtTdGF0dXNSZWcgKA0KKwlBVDkxUFNfUE1DIHBQTUMgLy8gcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyDQorCSkNCiB7DQotICAgIHJldHVybiBwUE1DLT5QTUNfU0NTUjsNCisJcmV0dXJuIHBQTUMtPlBNQ19TQ1NSOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2sgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBwZXJpcGhlcmFsIGNsb2NrICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKCBBVDkxUFNfUE1DIHBQTUMsICAgICAgICAgLyogXGFyZyBwb2ludGVyIHRvIFBNQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwZXJpcGhJZHMgKSAvKiBcYXJnIElEcyBvZiBwZXJpcGhlcmFscyB0byBlbmFibGUgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2sNCisvLyogXGJyaWVmIEVuYWJsZSBwZXJpcGhlcmFsIGNsb2NrDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrICgNCisJQVQ5MVBTX1BNQyBwUE1DLCAvLyBcYXJnIHBvaW50ZXIgdG8gUE1DIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IHBlcmlwaElkcykgIC8vIFxhcmcgSURzIG9mIHBlcmlwaGVyYWxzIHRvIGVuYWJsZQ0KIHsNCi0gICAgcFBNQy0+UE1DX1BDRVIgPSBwZXJpcGhJZHM7DQorCXBQTUMtPlBNQ19QQ0VSID0gcGVyaXBoSWRzOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QTUNfRGlzYWJsZVBlcmlwaENsb2NrICovDQotLyoqIFxicmllZiBEaXNhYmxlIHBlcmlwaGVyYWwgY2xvY2sgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QTUNfRGlzYWJsZVBlcmlwaENsb2NrKCBBVDkxUFNfUE1DIHBQTUMsICAgICAgICAgLyogXGFyZyBwb2ludGVyIHRvIFBNQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcGVyaXBoSWRzICkgLyogXGFyZyBJRHMgb2YgcGVyaXBoZXJhbHMgdG8gZW5hYmxlICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUE1DX0Rpc2FibGVQZXJpcGhDbG9jaw0KKy8vKiBcYnJpZWYgRGlzYWJsZSBwZXJpcGhlcmFsIGNsb2NrDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0Rpc2FibGVQZXJpcGhDbG9jayAoDQorCUFUOTFQU19QTUMgcFBNQywgLy8gXGFyZyBwb2ludGVyIHRvIFBNQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBwZXJpcGhJZHMpICAvLyBcYXJnIElEcyBvZiBwZXJpcGhlcmFscyB0byBlbmFibGUNCiB7DQotICAgIHBQTUMtPlBNQ19QQ0RSID0gcGVyaXBoSWRzOw0KKwlwUE1DLT5QTUNfUENEUiA9IHBlcmlwaElkczsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUE1DX0dldFBlcmlwaENsb2NrICovDQotLyoqIFxicmllZiBHZXQgcGVyaXBoZXJhbCBjbG9jayBzdGF0dXMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BNQ19HZXRQZXJpcGhDbG9jayggQVQ5MVBTX1BNQyBwUE1DICkgLyogXGFyZyBwb2ludGVyIHRvIFBNQyBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUE1DX0dldFBlcmlwaENsb2NrDQorLy8qIFxicmllZiBHZXQgcGVyaXBoZXJhbCBjbG9jayBzdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BNQ19HZXRQZXJpcGhDbG9jayAoDQorCUFUOTFQU19QTUMgcFBNQykgLy8gXGFyZyBwb2ludGVyIHRvIFBNQyBjb250cm9sbGVyDQogew0KLSAgICByZXR1cm4gcFBNQy0+UE1DX1BDU1I7DQorCXJldHVybiBwUE1DLT5QTUNfUENTUjsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQ0tHUl9DZmdNYWluT3NjaWxsYXRvclJlZyAqLw0KLS8qKiBcYnJpZWYgQ2ZnIHRoZSBtYWluIG9zY2lsbGF0b3IgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9DS0dSX0NmZ01haW5Pc2NpbGxhdG9yUmVnKCBBVDkxUFNfQ0tHUiBwQ0tHUiwgLyogXGFyZyBwb2ludGVyIHRvIENLR1IgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1vZGUgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NLR1JfQ2ZnTWFpbk9zY2lsbGF0b3JSZWcNCisvLyogXGJyaWVmIENmZyB0aGUgbWFpbiBvc2NpbGxhdG9yDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQ0tHUl9DZmdNYWluT3NjaWxsYXRvclJlZyAoDQorCUFUOTFQU19DS0dSIHBDS0dSLCAvLyBcYXJnIHBvaW50ZXIgdG8gQ0tHUiBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBtb2RlKQ0KIHsNCi0gICAgcENLR1ItPkNLR1JfTU9SID0gbW9kZTsNCisJcENLR1ItPkNLR1JfTU9SID0gbW9kZTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQ0tHUl9HZXRNYWluT3NjaWxsYXRvclJlZyAqLw0KLS8qKiBcYnJpZWYgQ2ZnIHRoZSBtYWluIG9zY2lsbGF0b3IgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NLR1JfR2V0TWFpbk9zY2lsbGF0b3JSZWcoIEFUOTFQU19DS0dSIHBDS0dSICkgLyogXGFyZyBwb2ludGVyIHRvIENLR1IgY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NLR1JfR2V0TWFpbk9zY2lsbGF0b3JSZWcNCisvLyogXGJyaWVmIENmZyB0aGUgbWFpbiBvc2NpbGxhdG9yDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DS0dSX0dldE1haW5Pc2NpbGxhdG9yUmVnICgNCisJQVQ5MVBTX0NLR1IgcENLR1IpIC8vIFxhcmcgcG9pbnRlciB0byBDS0dSIGNvbnRyb2xsZXINCiB7DQotICAgIHJldHVybiBwQ0tHUi0+Q0tHUl9NT1I7DQorCXJldHVybiBwQ0tHUi0+Q0tHUl9NT1I7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0NLR1JfRW5hYmxlTWFpbk9zY2lsbGF0b3IgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSB0aGUgbWFpbiBvc2NpbGxhdG9yICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQ0tHUl9FbmFibGVNYWluT3NjaWxsYXRvciggQVQ5MVBTX0NLR1IgcENLR1IgKSAvKiBcYXJnIHBvaW50ZXIgdG8gQ0tHUiBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0tHUl9FbmFibGVNYWluT3NjaWxsYXRvcg0KKy8vKiBcYnJpZWYgRW5hYmxlIHRoZSBtYWluIG9zY2lsbGF0b3INCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9DS0dSX0VuYWJsZU1haW5Pc2NpbGxhdG9yKA0KKwlBVDkxUFNfQ0tHUiBwQ0tHUikgLy8gXGFyZyBwb2ludGVyIHRvIENLR1IgY29udHJvbGxlcg0KIHsNCi0gICAgcENLR1ItPkNLR1JfTU9SIHw9IEFUOTFDX0NLR1JfTU9TQ0VOOw0KKwlwQ0tHUi0+Q0tHUl9NT1IgfD0gQVQ5MUNfQ0tHUl9NT1NDRU47DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0NLR1JfRGlzYWJsZU1haW5Pc2NpbGxhdG9yICovDQotLyoqIFxicmllZiBEaXNhYmxlIHRoZSBtYWluIG9zY2lsbGF0b3IgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9DS0dSX0Rpc2FibGVNYWluT3NjaWxsYXRvciggQVQ5MVBTX0NLR1IgcENLR1IgKSAvKiBcYXJnIHBvaW50ZXIgdG8gQ0tHUiBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0tHUl9EaXNhYmxlTWFpbk9zY2lsbGF0b3INCisvLyogXGJyaWVmIERpc2FibGUgdGhlIG1haW4gb3NjaWxsYXRvcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0NLR1JfRGlzYWJsZU1haW5Pc2NpbGxhdG9yICgNCisJQVQ5MVBTX0NLR1IgcENLR1IpIC8vIFxhcmcgcG9pbnRlciB0byBDS0dSIGNvbnRyb2xsZXINCiB7DQotICAgIHBDS0dSLT5DS0dSX01PUiAmPSB+QVQ5MUNfQ0tHUl9NT1NDRU47DQorCXBDS0dSLT5DS0dSX01PUiAmPSB+QVQ5MUNfQ0tHUl9NT1NDRU47DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0NLR1JfQ2ZnTWFpbk9zY1N0YXJ0VXBUaW1lICovDQotLyoqIFxicmllZiBDZmcgTU9SIFJlZ2lzdGVyIGFjY29yZGluZyB0byB0aGUgbWFpbiBvc2Mgc3RhcnR1cCB0aW1lICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQ0tHUl9DZmdNYWluT3NjU3RhcnRVcFRpbWUoIEFUOTFQU19DS0dSIHBDS0dSLCAgICAgICAgIC8qIFxhcmcgcG9pbnRlciB0byBDS0dSIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3RhcnR1cF90aW1lLCAvKiBcYXJnIG1haW4gb3NjIHN0YXJ0dXAgdGltZSBpbiBtaWNyb3NlY29uZCAodXMpICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNsb3dDbG9jayApICAgLyogXGFyZyBzbG93Q2xvY2sgaW4gSHogKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DS0dSX0NmZ01haW5Pc2NTdGFydFVwVGltZQ0KKy8vKiBcYnJpZWYgQ2ZnIE1PUiBSZWdpc3RlciBhY2NvcmRpbmcgdG8gdGhlIG1haW4gb3NjIHN0YXJ0dXAgdGltZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0NLR1JfQ2ZnTWFpbk9zY1N0YXJ0VXBUaW1lICgNCisJQVQ5MVBTX0NLR1IgcENLR1IsIC8vIFxhcmcgcG9pbnRlciB0byBDS0dSIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IHN0YXJ0dXBfdGltZSwgIC8vIFxhcmcgbWFpbiBvc2Mgc3RhcnR1cCB0aW1lIGluIG1pY3Jvc2Vjb25kICh1cykNCisJdW5zaWduZWQgaW50IHNsb3dDbG9jaykgIC8vIFxhcmcgc2xvd0Nsb2NrIGluIEh6DQogew0KLSAgICBwQ0tHUi0+Q0tHUl9NT1IgJj0gfkFUOTFDX0NLR1JfT1NDT1VOVDsNCi0gICAgcENLR1ItPkNLR1JfTU9SIHw9ICggKCBzbG93Q2xvY2sgKiBzdGFydHVwX3RpbWUgKSAvICggOCAqIDEwMDAwMDAgKSApIDw8IDg7DQorCXBDS0dSLT5DS0dSX01PUiAmPSB+QVQ5MUNfQ0tHUl9PU0NPVU5UOw0KKwlwQ0tHUi0+Q0tHUl9NT1IgfD0gKChzbG93Q2xvY2sgKiBzdGFydHVwX3RpbWUpLyg4KjEwMDAwMDApKSA8PCA4Ow0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9DS0dSX0dldE1haW5DbG9ja0ZyZXFSZWcgKi8NCi0vKiogXGJyaWVmIENmZyB0aGUgbWFpbiBvc2NpbGxhdG9yICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DS0dSX0dldE1haW5DbG9ja0ZyZXFSZWcoIEFUOTFQU19DS0dSIHBDS0dSICkgLyogXGFyZyBwb2ludGVyIHRvIENLR1IgY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NLR1JfR2V0TWFpbkNsb2NrRnJlcVJlZw0KKy8vKiBcYnJpZWYgQ2ZnIHRoZSBtYWluIG9zY2lsbGF0b3INCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NLR1JfR2V0TWFpbkNsb2NrRnJlcVJlZyAoDQorCUFUOTFQU19DS0dSIHBDS0dSKSAvLyBcYXJnIHBvaW50ZXIgdG8gQ0tHUiBjb250cm9sbGVyDQogew0KLSAgICByZXR1cm4gcENLR1ItPkNLR1JfTUNGUjsNCisJcmV0dXJuIHBDS0dSLT5DS0dSX01DRlI7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0NLR1JfR2V0TWFpbkNsb2NrICovDQotLyoqIFxicmllZiBSZXR1cm4gTWFpbiBjbG9jayBpbiBIeiAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0tHUl9HZXRNYWluQ2xvY2soIEFUOTFQU19DS0dSIHBDS0dSLCAgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gQ0tHUiBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2xvd0Nsb2NrICkgLyogXGFyZyBzbG93Q2xvY2sgaW4gSHogKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DS0dSX0dldE1haW5DbG9jaw0KKy8vKiBcYnJpZWYgUmV0dXJuIE1haW4gY2xvY2sgaW4gSHoNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NLR1JfR2V0TWFpbkNsb2NrICgNCisJQVQ5MVBTX0NLR1IgcENLR1IsIC8vIFxhcmcgcG9pbnRlciB0byBDS0dSIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IHNsb3dDbG9jaykgIC8vIFxhcmcgc2xvd0Nsb2NrIGluIEh6DQogew0KLSAgICByZXR1cm4gKCAoIHBDS0dSLT5DS0dSX01DRlIgJiBBVDkxQ19DS0dSX01BSU5GICkgKiBzbG93Q2xvY2sgKSA+PiA0Ow0KKwlyZXR1cm4gKChwQ0tHUi0+Q0tHUl9NQ0ZSICAmIEFUOTFDX0NLR1JfTUFJTkYpICogc2xvd0Nsb2NrKSA+PiA0Ow0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QTUNfQ2ZnTUNLUmVnICovDQotLyoqIFxicmllZiBDZmcgTWFzdGVyIENsb2NrIFJlZ2lzdGVyICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0NmZ01DS1JlZyggQVQ5MVBTX1BNQyBwUE1DLCAvKiBcYXJnIHBvaW50ZXIgdG8gUE1DIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtb2RlICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfQ2ZnTUNLUmVnDQorLy8qIFxicmllZiBDZmcgTWFzdGVyIENsb2NrIFJlZ2lzdGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0NmZ01DS1JlZyAoDQorCUFUOTFQU19QTUMgcFBNQywgLy8gXGFyZyBwb2ludGVyIHRvIFBNQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBtb2RlKQ0KIHsNCi0gICAgcFBNQy0+UE1DX01DS1IgPSBtb2RlOw0KKwlwUE1DLT5QTUNfTUNLUiA9IG1vZGU7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BNQ19HZXRNQ0tSZWcgKi8NCi0vKiogXGJyaWVmIFJldHVybiBNYXN0ZXIgQ2xvY2sgUmVnaXN0ZXIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BNQ19HZXRNQ0tSZWcoIEFUOTFQU19QTUMgcFBNQyApIC8qIFxhcmcgcG9pbnRlciB0byBQTUMgY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19HZXRNQ0tSZWcNCisvLyogXGJyaWVmIFJldHVybiBNYXN0ZXIgQ2xvY2sgUmVnaXN0ZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BNQ19HZXRNQ0tSZWcoDQorCUFUOTFQU19QTUMgcFBNQykgLy8gXGFyZyBwb2ludGVyIHRvIFBNQyBjb250cm9sbGVyDQogew0KLSAgICByZXR1cm4gcFBNQy0+UE1DX01DS1I7DQorCXJldHVybiBwUE1DLT5QTUNfTUNLUjsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QTUNfR2V0TWFzdGVyQ2xvY2sgKi8NCi0vKiogXGJyaWVmIFJldHVybiBtYXN0ZXIgY2xvY2sgaW4gSHogd2hpY2ggY29ycmVwb25kcyB0byBwcm9jZXNzb3IgY2xvY2sgZm9yIEFSTTcgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUE1DX0dldE1hc3RlckNsb2NrKCBBVDkxUFNfUE1DIHBQTUMsICAgICAgICAgLyogXGFyZyBwb2ludGVyIHRvIFBNQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MVBTX0NLR1IgcENLR1IsICAgICAgIC8qIFxhcmcgcG9pbnRlciB0byBDS0dSIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2xvd0Nsb2NrICkgLyogXGFyZyBzbG93Q2xvY2sgaW4gSHogKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19HZXRNYXN0ZXJDbG9jaw0KKy8vKiBcYnJpZWYgUmV0dXJuIG1hc3RlciBjbG9jayBpbiBIeiB3aGljaCBjb3JyZXBvbmRzIHRvIHByb2Nlc3NvciBjbG9jayBmb3IgQVJNNw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QTUNfR2V0TWFzdGVyQ2xvY2sgKA0KKwlBVDkxUFNfUE1DIHBQTUMsIC8vIFxhcmcgcG9pbnRlciB0byBQTUMgY29udHJvbGxlcg0KKwlBVDkxUFNfQ0tHUiBwQ0tHUiwgLy8gXGFyZyBwb2ludGVyIHRvIENLR1IgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgc2xvd0Nsb2NrKSAgLy8gXGFyZyBzbG93Q2xvY2sgaW4gSHoNCiB7DQotICAgIHVuc2lnbmVkIGludCByZWcgPSBwUE1DLT5QTUNfTUNLUjsNCi0gICAgdW5zaWduZWQgaW50IHByZXNjYWxlciA9ICggMSA8PCAoICggcmVnICYgQVQ5MUNfUE1DX1BSRVMgKSA+PiAyICkgKTsNCi0gICAgdW5zaWduZWQgaW50IHBsbERpdmlkZXIsIHBsbE11bHRpcGxpZXI7DQorCXVuc2lnbmVkIGludCByZWcgPSBwUE1DLT5QTUNfTUNLUjsNCisJdW5zaWduZWQgaW50IHByZXNjYWxlciA9ICgxIDw8ICgocmVnICYgQVQ5MUNfUE1DX1BSRVMpID4+IDIpKTsNCisJdW5zaWduZWQgaW50IHBsbERpdmlkZXIsIHBsbE11bHRpcGxpZXI7DQogDQotICAgIHN3aXRjaCggcmVnICYgQVQ5MUNfUE1DX0NTUyApDQotICAgIHsNCi0gICAgICAgIGNhc2UgQVQ5MUNfUE1DX0NTU19TTE9XX0NMSzogLyogU2xvdyBjbG9jayBzZWxlY3RlZCAqLw0KLSAgICAgICAgICAgIHJldHVybiBzbG93Q2xvY2sgLyBwcmVzY2FsZXI7DQotDQotICAgICAgICBjYXNlIEFUOTFDX1BNQ19DU1NfTUFJTl9DTEs6IC8qIE1haW4gY2xvY2sgaXMgc2VsZWN0ZWQgKi8NCi0gICAgICAgICAgICByZXR1cm4gQVQ5MUZfQ0tHUl9HZXRNYWluQ2xvY2soIHBDS0dSLCBzbG93Q2xvY2sgKSAvIHByZXNjYWxlcjsNCi0NCi0gICAgICAgIGNhc2UgQVQ5MUNfUE1DX0NTU19QTExfQ0xLOiAvKiBQTExCIGNsb2NrIGlzIHNlbGVjdGVkICovDQotICAgICAgICAgICAgcmVnID0gcENLR1ItPkNLR1JfUExMUjsNCi0gICAgICAgICAgICBwbGxEaXZpZGVyID0gKCByZWcgJiBBVDkxQ19DS0dSX0RJViApOw0KLSAgICAgICAgICAgIHBsbE11bHRpcGxpZXIgPSAoICggcmVnICYgQVQ5MUNfQ0tHUl9NVUwgKSA+PiAxNiApICsgMTsNCi0gICAgICAgICAgICByZXR1cm4gQVQ5MUZfQ0tHUl9HZXRNYWluQ2xvY2soIHBDS0dSLCBzbG93Q2xvY2sgKSAvIHBsbERpdmlkZXIgKiBwbGxNdWx0aXBsaWVyIC8gcHJlc2NhbGVyOw0KLSAgICB9DQotDQotICAgIHJldHVybiAwOw0KKwlzd2l0Y2ggKHJlZyAmIEFUOTFDX1BNQ19DU1MpIHsNCisJCWNhc2UgQVQ5MUNfUE1DX0NTU19TTE9XX0NMSzogLy8gU2xvdyBjbG9jayBzZWxlY3RlZA0KKwkJCXJldHVybiBzbG93Q2xvY2sgLyBwcmVzY2FsZXI7DQorCQljYXNlIEFUOTFDX1BNQ19DU1NfTUFJTl9DTEs6IC8vIE1haW4gY2xvY2sgaXMgc2VsZWN0ZWQNCisJCQlyZXR1cm4gQVQ5MUZfQ0tHUl9HZXRNYWluQ2xvY2socENLR1IsIHNsb3dDbG9jaykgLyBwcmVzY2FsZXI7DQorCQljYXNlIEFUOTFDX1BNQ19DU1NfUExMX0NMSzogLy8gUExMQiBjbG9jayBpcyBzZWxlY3RlZA0KKwkJCXJlZyA9IHBDS0dSLT5DS0dSX1BMTFI7DQorCQkJcGxsRGl2aWRlciAgICA9IChyZWcgICYgQVQ5MUNfQ0tHUl9ESVYpOw0KKwkJCXBsbE11bHRpcGxpZXIgPSAoKHJlZyAgJiBBVDkxQ19DS0dSX01VTCkgPj4gMTYpICsgMTsNCisJCQlyZXR1cm4gQVQ5MUZfQ0tHUl9HZXRNYWluQ2xvY2socENLR1IsIHNsb3dDbG9jaykgLyBwbGxEaXZpZGVyICogcGxsTXVsdGlwbGllciAvIHByZXNjYWxlcjsNCisJfQ0KKwlyZXR1cm4gMDsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUE1DX0VuYWJsZVBDSyAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIHBlcmlwaGVyYWwgY2xvY2sgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QTUNfRW5hYmxlUENLKCBBVDkxUFNfUE1DIHBQTUMsICAvKiBcYXJnIHBvaW50ZXIgdG8gUE1DIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwY2ssIC8qIFxhcmcgUGVyaXBoZXJhbCBjbG9jayBpZGVudGlmaWVyIDAgLi4gNyAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1vZGUgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19FbmFibGVQQ0sNCisvLyogXGJyaWVmIEVuYWJsZSBwZXJpcGhlcmFsIGNsb2NrDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0VuYWJsZVBDSyAoDQorCUFUOTFQU19QTUMgcFBNQywgLy8gXGFyZyBwb2ludGVyIHRvIFBNQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBwY2ssICAvLyBcYXJnIFBlcmlwaGVyYWwgY2xvY2sgaWRlbnRpZmllciAwIC4uIDcNCisJdW5zaWduZWQgaW50IG1vZGUpDQogew0KLSAgICBwUE1DLT5QTUNfUENLUlsgcGNrIF0gPSBtb2RlOw0KLSAgICBwUE1DLT5QTUNfU0NFUiA9ICggMSA8PCBwY2sgKSA8PCA4Ow0KKwlwUE1DLT5QTUNfUENLUltwY2tdID0gbW9kZTsNCisJcFBNQy0+UE1DX1NDRVIgPSAoMSA8PCBwY2spIDw8IDg7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BNQ19EaXNhYmxlUENLICovDQotLyoqIFxicmllZiBFbmFibGUgcGVyaXBoZXJhbCBjbG9jayAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BNQ19EaXNhYmxlUENLKCBBVDkxUFNfUE1DIHBQTUMsICAgLyogXGFyZyBwb2ludGVyIHRvIFBNQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHBjayApIC8qIFxhcmcgUGVyaXBoZXJhbCBjbG9jayBpZGVudGlmaWVyIDAgLi4gNyAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19EaXNhYmxlUENLDQorLy8qIFxicmllZiBFbmFibGUgcGVyaXBoZXJhbCBjbG9jaw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BNQ19EaXNhYmxlUENLICgNCisJQVQ5MVBTX1BNQyBwUE1DLCAvLyBcYXJnIHBvaW50ZXIgdG8gUE1DIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IHBjaykgIC8vIFxhcmcgUGVyaXBoZXJhbCBjbG9jayBpZGVudGlmaWVyIDAgLi4gNw0KIHsNCi0gICAgcFBNQy0+UE1DX1NDRFIgPSAoIDEgPDwgcGNrICkgPDwgODsNCisJcFBNQy0+UE1DX1NDRFIgPSAoMSA8PCBwY2spIDw8IDg7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BNQ19FbmFibGVJdCAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIFBNQyBpbnRlcnJ1cHQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QTUNfRW5hYmxlSXQoIEFUOTFQU19QTUMgcFBNQywgICAgLyogcG9pbnRlciB0byBhIFBNQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogSVQgdG8gYmUgZW5hYmxlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19FbmFibGVJdA0KKy8vKiBcYnJpZWYgRW5hYmxlIFBNQyBpbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QTUNfRW5hYmxlSXQgKA0KKwlBVDkxUFNfUE1DIHBQTUMsICAgICAvLyBwb2ludGVyIHRvIGEgUE1DIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpICAgLy8gSVQgdG8gYmUgZW5hYmxlZA0KIHsNCi0gICAgLyoqIFdyaXRlIHRvIHRoZSBJRVIgcmVnaXN0ZXIgKi8NCi0gICAgcFBNQy0+UE1DX0lFUiA9IGZsYWc7DQorCS8vKiBXcml0ZSB0byB0aGUgSUVSIHJlZ2lzdGVyDQorCXBQTUMtPlBNQ19JRVIgPSBmbGFnOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QTUNfRGlzYWJsZUl0ICovDQotLyoqIFxicmllZiBEaXNhYmxlIFBNQyBpbnRlcnJ1cHQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QTUNfRGlzYWJsZUl0KCBBVDkxUFNfUE1DIHBQTUMsICAgIC8qIHBvaW50ZXIgdG8gYSBQTUMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBJVCB0byBiZSBkaXNhYmxlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19EaXNhYmxlSXQNCisvLyogXGJyaWVmIERpc2FibGUgUE1DIGludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BNQ19EaXNhYmxlSXQgKA0KKwlBVDkxUFNfUE1DIHBQTUMsIC8vIHBvaW50ZXIgdG8gYSBQTUMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgLy8gSVQgdG8gYmUgZGlzYWJsZWQNCiB7DQotICAgIC8qKiBXcml0ZSB0byB0aGUgSURSIHJlZ2lzdGVyICovDQotICAgIHBQTUMtPlBNQ19JRFIgPSBmbGFnOw0KKwkvLyogV3JpdGUgdG8gdGhlIElEUiByZWdpc3Rlcg0KKwlwUE1DLT5QTUNfSURSID0gZmxhZzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUE1DX0dldFN0YXR1cyAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIFBNQyBJbnRlcnJ1cHQgU3RhdHVzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QTUNfR2V0U3RhdHVzKCAvKiBccmV0dXJuIFBNQyBJbnRlcnJ1cHQgU3RhdHVzICovDQotICAgIEFUOTFQU19QTUMgcFBNQyApICAgICAgICAgICAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gYSBQTUMgY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19HZXRTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBQTUMgSW50ZXJydXB0IFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUE1DX0dldFN0YXR1cyggLy8gXHJldHVybiBQTUMgSW50ZXJydXB0IFN0YXR1cw0KKwlBVDkxUFNfUE1DIHBQTUMpIC8vIHBvaW50ZXIgdG8gYSBQTUMgY29udHJvbGxlcg0KIHsNCi0gICAgcmV0dXJuIHBQTUMtPlBNQ19TUjsNCisJcmV0dXJuIHBQTUMtPlBNQ19TUjsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUE1DX0dldEludGVycnVwdE1hc2tTdGF0dXMgKi8NCi0vKiogXGJyaWVmIFJldHVybiBQTUMgSW50ZXJydXB0IE1hc2sgU3RhdHVzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QTUNfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLyogXHJldHVybiBQTUMgSW50ZXJydXB0IE1hc2sgU3RhdHVzICovDQotICAgIEFUOTFQU19QTUMgcFBNQyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIGEgUE1DIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfR2V0SW50ZXJydXB0TWFza1N0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFBNQyBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BNQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCAvLyBccmV0dXJuIFBNQyBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisJQVQ5MVBTX1BNQyBwUE1DKSAvLyBwb2ludGVyIHRvIGEgUE1DIGNvbnRyb2xsZXINCiB7DQotICAgIHJldHVybiBwUE1DLT5QTUNfSU1SOw0KKwlyZXR1cm4gcFBNQy0+UE1DX0lNUjsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUE1DX0lzSW50ZXJydXB0TWFza2VkICovDQotLyoqIFxicmllZiBUZXN0IGlmIFBNQyBJbnRlcnJ1cHQgaXMgTWFza2VkICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QTUNfSXNJbnRlcnJ1cHRNYXNrZWQoIEFUOTFQU19QTUMgcFBNQywgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBNQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19Jc0ludGVycnVwdE1hc2tlZA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBQTUMgSW50ZXJydXB0IGlzIE1hc2tlZA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUE1DX0lzSW50ZXJydXB0TWFza2VkKA0KKyAgICAgICAgQVQ5MVBTX1BNQyBwUE1DLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQTUMgY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQogew0KLSAgICByZXR1cm4oIEFUOTFGX1BNQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCBwUE1DICkgJiBmbGFnICk7DQorCXJldHVybiAoQVQ5MUZfUE1DX0dldEludGVycnVwdE1hc2tTdGF0dXMocFBNQykgJiBmbGFnKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUE1DX0lzU3RhdHVzU2V0ICovDQotLyoqIFxicmllZiBUZXN0IGlmIFBNQyBTdGF0dXMgaXMgU2V0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QTUNfSXNTdGF0dXNTZXQoIEFUOTFQU19QTUMgcFBNQywgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBNQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19Jc1N0YXR1c1NldA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBQTUMgU3RhdHVzIGlzIFNldA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUE1DX0lzU3RhdHVzU2V0KA0KKyAgICAgICAgQVQ5MVBTX1BNQyBwUE1DLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQTUMgY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQogew0KLSAgICByZXR1cm4oIEFUOTFGX1BNQ19HZXRTdGF0dXMoIHBQTUMgKSAmIGZsYWcgKTsNCi19IC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICAqICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIEFEQw0KLSAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BRENfRW5hYmxlSXQgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBBREMgaW50ZXJydXB0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQURDX0VuYWJsZUl0KCBBVDkxUFNfQURDIHBBREMsICAgIC8qIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIElUIHRvIGJlIGVuYWJsZWQgKi8NCisJcmV0dXJuIChBVDkxRl9QTUNfR2V0U3RhdHVzKHBQTUMpICYgZmxhZyk7DQorfS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgQURDDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfRW5hYmxlSXQNCisvLyogXGJyaWVmIEVuYWJsZSBBREMgaW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQURDX0VuYWJsZUl0ICgNCisJQVQ5MVBTX0FEQyBwQURDLCAgICAgLy8gcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAgIC8vIElUIHRvIGJlIGVuYWJsZWQNCiB7DQotICAgIC8qKiBXcml0ZSB0byB0aGUgSUVSIHJlZ2lzdGVyICovDQotICAgIHBBREMtPkFEQ19JRVIgPSBmbGFnOw0KKwkvLyogV3JpdGUgdG8gdGhlIElFUiByZWdpc3Rlcg0KKwlwQURDLT5BRENfSUVSID0gZmxhZzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQURDX0Rpc2FibGVJdCAqLw0KLS8qKiBcYnJpZWYgRGlzYWJsZSBBREMgaW50ZXJydXB0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQURDX0Rpc2FibGVJdCggQVQ5MVBTX0FEQyBwQURDLCAgICAvKiBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogSVQgdG8gYmUgZGlzYWJsZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfRGlzYWJsZUl0DQorLy8qIFxicmllZiBEaXNhYmxlIEFEQyBpbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BRENfRGlzYWJsZUl0ICgNCisJQVQ5MVBTX0FEQyBwQURDLCAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpIC8vIElUIHRvIGJlIGRpc2FibGVkDQogew0KLSAgICAvKiogV3JpdGUgdG8gdGhlIElEUiByZWdpc3RlciAqLw0KLSAgICBwQURDLT5BRENfSURSID0gZmxhZzsNCisJLy8qIFdyaXRlIHRvIHRoZSBJRFIgcmVnaXN0ZXINCisJcEFEQy0+QURDX0lEUiA9IGZsYWc7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FEQ19HZXRTdGF0dXMgKi8NCi0vKiogXGJyaWVmIFJldHVybiBBREMgSW50ZXJydXB0IFN0YXR1cyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQURDX0dldFN0YXR1cyggLyogXHJldHVybiBBREMgSW50ZXJydXB0IFN0YXR1cyAqLw0KLSAgICBBVDkxUFNfQURDIHBBREMgKSAgICAgICAgICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfR2V0U3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gQURDIEludGVycnVwdCBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRTdGF0dXMoIC8vIFxyZXR1cm4gQURDIEludGVycnVwdCBTdGF0dXMNCisJQVQ5MVBTX0FEQyBwQURDKSAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCiB7DQotICAgIHJldHVybiBwQURDLT5BRENfU1I7DQorCXJldHVybiBwQURDLT5BRENfU1I7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FEQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzICovDQotLyoqIFxicmllZiBSZXR1cm4gQURDIEludGVycnVwdCBNYXNrIFN0YXR1cyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQURDX0dldEludGVycnVwdE1hc2tTdGF0dXMoIC8qIFxyZXR1cm4gQURDIEludGVycnVwdCBNYXNrIFN0YXR1cyAqLw0KLSAgICBBVDkxUFNfQURDIHBBREMgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0dldEludGVycnVwdE1hc2tTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBBREMgSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLy8gXHJldHVybiBBREMgSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorCUFUOTFQU19BREMgcEFEQykgLy8gcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQogew0KLSAgICByZXR1cm4gcEFEQy0+QURDX0lNUjsNCisJcmV0dXJuIHBBREMtPkFEQ19JTVI7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FEQ19Jc0ludGVycnVwdE1hc2tlZCAqLw0KLS8qKiBcYnJpZWYgVGVzdCBpZiBBREMgSW50ZXJydXB0IGlzIE1hc2tlZCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQURDX0lzSW50ZXJydXB0TWFza2VkKCBBVDkxUFNfQURDIHBBREMsICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfSXNJbnRlcnJ1cHRNYXNrZWQNCisvLyogXGJyaWVmIFRlc3QgaWYgQURDIEludGVycnVwdCBpcyBNYXNrZWQgDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfSXNJbnRlcnJ1cHRNYXNrZWQoDQorICAgICAgICBBVDkxUFNfQURDIHBBREMsICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCiB7DQotICAgIHJldHVybiggQVQ5MUZfQURDX0dldEludGVycnVwdE1hc2tTdGF0dXMoIHBBREMgKSAmIGZsYWcgKTsNCisJcmV0dXJuIChBVDkxRl9BRENfR2V0SW50ZXJydXB0TWFza1N0YXR1cyhwQURDKSAmIGZsYWcpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BRENfSXNTdGF0dXNTZXQgKi8NCi0vKiogXGJyaWVmIFRlc3QgaWYgQURDIFN0YXR1cyBpcyBTZXQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19Jc1N0YXR1c1NldCggQVQ5MVBTX0FEQyBwQURDLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0lzU3RhdHVzU2V0DQorLy8qIFxicmllZiBUZXN0IGlmIEFEQyBTdGF0dXMgaXMgU2V0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfSXNTdGF0dXNTZXQoDQorICAgICAgICBBVDkxUFNfQURDIHBBREMsICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCiB7DQotICAgIHJldHVybiggQVQ5MUZfQURDX0dldFN0YXR1cyggcEFEQyApICYgZmxhZyApOw0KKwlyZXR1cm4gKEFUOTFGX0FEQ19HZXRTdGF0dXMocEFEQykgJiBmbGFnKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQURDX0NmZ01vZGVSZWcgKi8NCi0vKiogXGJyaWVmIENvbmZpZ3VyZSB0aGUgTW9kZSBSZWdpc3RlciBvZiB0aGUgQURDIGNvbnRyb2xsZXIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9BRENfQ2ZnTW9kZVJlZyggQVQ5MVBTX0FEQyBwQURDLCAgICAvKiBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbW9kZSApIC8qIG1vZGUgcmVnaXN0ZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfQ2ZnTW9kZVJlZw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIHRoZSBNb2RlIFJlZ2lzdGVyIG9mIHRoZSBBREMgY29udHJvbGxlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FEQ19DZmdNb2RlUmVnICgNCisJQVQ5MVBTX0FEQyBwQURDLCAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IG1vZGUpICAgICAgICAvLyBtb2RlIHJlZ2lzdGVyIA0KIHsNCi0gICAgLyoqIFdyaXRlIHRvIHRoZSBNUiByZWdpc3RlciAqLw0KLSAgICBwQURDLT5BRENfTVIgPSBtb2RlOw0KKwkvLyogV3JpdGUgdG8gdGhlIE1SIHJlZ2lzdGVyDQorCXBBREMtPkFEQ19NUiA9IG1vZGU7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FEQ19HZXRNb2RlUmVnICovDQotLyoqIFxicmllZiBSZXR1cm4gdGhlIE1vZGUgUmVnaXN0ZXIgb2YgdGhlIEFEQyBjb250cm9sbGVyIHZhbHVlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0TW9kZVJlZyggQVQ5MVBTX0FEQyBwQURDIC8qIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FEQ19HZXRNb2RlUmVnDQorLy8qIFxicmllZiBSZXR1cm4gdGhlIE1vZGUgUmVnaXN0ZXIgb2YgdGhlIEFEQyBjb250cm9sbGVyIHZhbHVlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0TW9kZVJlZyAoDQorCUFUOTFQU19BREMgcEFEQyAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJKQ0KIHsNCi0gICAgcmV0dXJuIHBBREMtPkFEQ19NUjsNCisJcmV0dXJuIHBBREMtPkFEQ19NUjsJDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FEQ19DZmdUaW1pbmdzICovDQotLyoqIFxicmllZiBDb25maWd1cmUgdGhlIGRpZmZlcmVudCBuZWNlc3NhcnkgdGltaW5ncyBvZiB0aGUgQURDIGNvbnRyb2xsZXIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9BRENfQ2ZnVGltaW5ncyggQVQ5MVBTX0FEQyBwQURDLCAgICAgICAgICAgICAgICAgICAgLyogcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1ja19jbG9jaywgICAgICAgICAgICAgLyogaW4gTUh6ICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGFkY19jbG9jaywgICAgICAgICAgICAgLyogaW4gTUh6ICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHN0YXJ0dXBfdGltZSwgICAgICAgICAgLyogaW4gdXMgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlX2FuZF9ob2xkX3RpbWUgKSAvKiBpbiBucyAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FEQ19DZmdUaW1pbmdzDQorLy8qIFxicmllZiBDb25maWd1cmUgdGhlIGRpZmZlcmVudCBuZWNlc3NhcnkgdGltaW5ncyBvZiB0aGUgQURDIGNvbnRyb2xsZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BRENfQ2ZnVGltaW5ncyAoDQorCUFUOTFQU19BREMgcEFEQywgLy8gcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBtY2tfY2xvY2ssIC8vIGluIE1IeiANCisJdW5zaWduZWQgaW50IGFkY19jbG9jaywgLy8gaW4gTUh6IA0KKwl1bnNpZ25lZCBpbnQgc3RhcnR1cF90aW1lLCAvLyBpbiB1cyANCisJdW5zaWduZWQgaW50IHNhbXBsZV9hbmRfaG9sZF90aW1lKQkvLyBpbiBucyAgDQogew0KLSAgICB1bnNpZ25lZCBpbnQgcHJlc2NhbCwgc3RhcnR1cCwgc2h0aW07DQotDQotICAgIHByZXNjYWwgPSBtY2tfY2xvY2sgLyAoIDIgKiBhZGNfY2xvY2sgKSAtIDE7DQotICAgIHN0YXJ0dXAgPSBhZGNfY2xvY2sgKiBzdGFydHVwX3RpbWUgLyA4IC0gMTsNCi0gICAgc2h0aW0gPSBhZGNfY2xvY2sgKiBzYW1wbGVfYW5kX2hvbGRfdGltZSAvIDEwMDAgLSAxOw0KLQ0KLSAgICAvKiogV3JpdGUgdG8gdGhlIE1SIHJlZ2lzdGVyICovDQotICAgIHBBREMtPkFEQ19NUiA9ICggKCBwcmVzY2FsIDw8IDggKSAmIEFUOTFDX0FEQ19QUkVTQ0FMICkgfCAoICggc3RhcnR1cCA8PCAxNiApICYgQVQ5MUNfQURDX1NUQVJUVVAgKSB8ICggKCBzaHRpbSA8PCAyNCApICYgQVQ5MUNfQURDX1NIVElNICk7DQorCXVuc2lnbmVkIGludCBwcmVzY2FsLHN0YXJ0dXAsc2h0aW07DQorCQ0KKwlwcmVzY2FsID0gbWNrX2Nsb2NrLygyKmFkY19jbG9jaykgLSAxOw0KKwlzdGFydHVwID0gYWRjX2Nsb2NrKnN0YXJ0dXBfdGltZS84IC0gMTsNCisJc2h0aW0gPSBhZGNfY2xvY2sqc2FtcGxlX2FuZF9ob2xkX3RpbWUvMTAwMCAtIDE7DQorCQ0KKwkvLyogV3JpdGUgdG8gdGhlIE1SIHJlZ2lzdGVyDQorCXBBREMtPkFEQ19NUiA9ICggKHByZXNjYWw8PDgpICYgQVQ5MUNfQURDX1BSRVNDQUwpIHwgKCAoc3RhcnR1cDw8MTYpICYgQVQ5MUNfQURDX1NUQVJUVVApIHwgKCAoc2h0aW08PDI0KSAmIEFUOTFDX0FEQ19TSFRJTSk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FEQ19FbmFibGVDaGFubmVsICovDQotLyoqIFxicmllZiBSZXR1cm4gQURDIFRpbWVyIFJlZ2lzdGVyIFZhbHVlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQURDX0VuYWJsZUNoYW5uZWwoIEFUOTFQU19BREMgcEFEQywgICAgICAgLyogcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNoYW5uZWwgKSAvKiBtb2RlIHJlZ2lzdGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0VuYWJsZUNoYW5uZWwNCisvLyogXGJyaWVmIFJldHVybiBBREMgVGltZXIgUmVnaXN0ZXIgVmFsdWUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BRENfRW5hYmxlQ2hhbm5lbCAoDQorCUFUOTFQU19BREMgcEFEQywgLy8gcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBjaGFubmVsKSAgICAgICAgLy8gbW9kZSByZWdpc3RlciANCiB7DQotICAgIC8qKiBXcml0ZSB0byB0aGUgQ0hFUiByZWdpc3RlciAqLw0KLSAgICBwQURDLT5BRENfQ0hFUiA9IGNoYW5uZWw7DQorCS8vKiBXcml0ZSB0byB0aGUgQ0hFUiByZWdpc3Rlcg0KKwlwQURDLT5BRENfQ0hFUiA9IGNoYW5uZWw7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FEQ19EaXNhYmxlQ2hhbm5lbCAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIEFEQyBUaW1lciBSZWdpc3RlciBWYWx1ZSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0FEQ19EaXNhYmxlQ2hhbm5lbCggQVQ5MVBTX0FEQyBwQURDLCAgICAgICAvKiBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNoYW5uZWwgKSAvKiBtb2RlIHJlZ2lzdGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0Rpc2FibGVDaGFubmVsDQorLy8qIFxicmllZiBSZXR1cm4gQURDIFRpbWVyIFJlZ2lzdGVyIFZhbHVlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQURDX0Rpc2FibGVDaGFubmVsICgNCisJQVQ5MVBTX0FEQyBwQURDLCAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGNoYW5uZWwpICAgICAgICAvLyBtb2RlIHJlZ2lzdGVyIA0KIHsNCi0gICAgLyoqIFdyaXRlIHRvIHRoZSBDSERSIHJlZ2lzdGVyICovDQotICAgIHBBREMtPkFEQ19DSERSID0gY2hhbm5lbDsNCisJLy8qIFdyaXRlIHRvIHRoZSBDSERSIHJlZ2lzdGVyDQorCXBBREMtPkFEQ19DSERSID0gY2hhbm5lbDsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQURDX0dldENoYW5uZWxTdGF0dXMgKi8NCi0vKiogXGJyaWVmIFJldHVybiBBREMgVGltZXIgUmVnaXN0ZXIgVmFsdWUgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRDaGFubmVsU3RhdHVzKCBBVDkxUFNfQURDIHBBREMgLyogcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0dldENoYW5uZWxTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBBREMgVGltZXIgUmVnaXN0ZXIgVmFsdWUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRDaGFubmVsU3RhdHVzICgNCisJQVQ5MVBTX0FEQyBwQURDIC8vIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlcg0KKwkpDQogew0KLSAgICByZXR1cm4gcEFEQy0+QURDX0NIU1I7DQorCXJldHVybiBwQURDLT5BRENfQ0hTUjsJDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FEQ19TdGFydENvbnZlcnNpb24gKi8NCi0vKiogXGJyaWVmIFNvZnR3YXJlIHJlcXVlc3QgZm9yIGEgYW5hbG9nIHRvIGRpZ2l0YWwgY29udmVyc2lvbiAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0FEQ19TdGFydENvbnZlcnNpb24oIEFUOTFQU19BREMgcEFEQyAvKiBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfU3RhcnRDb252ZXJzaW9uDQorLy8qIFxicmllZiBTb2Z0d2FyZSByZXF1ZXN0IGZvciBhIGFuYWxvZyB0byBkaWdpdGFsIGNvbnZlcnNpb24gDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQURDX1N0YXJ0Q29udmVyc2lvbiAoDQorCUFUOTFQU19BREMgcEFEQyAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJKQ0KIHsNCi0gICAgcEFEQy0+QURDX0NSID0gQVQ5MUNfQURDX1NUQVJUOw0KKwlwQURDLT5BRENfQ1IgPSBBVDkxQ19BRENfU1RBUlQ7CQ0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BRENfU29mdFJlc2V0ICovDQotLyoqIFxicmllZiBTb2Z0d2FyZSByZXNldCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0FEQ19Tb2Z0UmVzZXQoIEFUOTFQU19BREMgcEFEQyAvKiBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfU29mdFJlc2V0DQorLy8qIFxicmllZiBTb2Z0d2FyZSByZXNldA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FEQ19Tb2Z0UmVzZXQgKA0KKwlBVDkxUFNfQURDIHBBREMgLy8gcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorCSkNCiB7DQotICAgIHBBREMtPkFEQ19DUiA9IEFUOTFDX0FEQ19TV1JTVDsNCisJcEFEQy0+QURDX0NSID0gQVQ5MUNfQURDX1NXUlNUOwkNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQURDX0dldExhc3RDb252ZXJ0ZWREYXRhICovDQotLyoqIFxicmllZiBSZXR1cm4gdGhlIExhc3QgQ29udmVydGVkIERhdGEgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRMYXN0Q29udmVydGVkRGF0YSggQVQ5MVBTX0FEQyBwQURDIC8qIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfR2V0TGFzdENvbnZlcnRlZERhdGENCisvLyogXGJyaWVmIFJldHVybiB0aGUgTGFzdCBDb252ZXJ0ZWQgRGF0YQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQURDX0dldExhc3RDb252ZXJ0ZWREYXRhICgNCisJQVQ5MVBTX0FEQyBwQURDIC8vIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlcg0KKwkpDQogew0KLSAgICByZXR1cm4gcEFEQy0+QURDX0xDRFI7DQorCXJldHVybiBwQURDLT5BRENfTENEUjsJDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0gwICovDQotLyoqIFxicmllZiBSZXR1cm4gdGhlIENoYW5uZWwgMCBDb252ZXJ0ZWQgRGF0YSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDAoIEFUOTFQU19BREMgcEFEQyAvKiBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNIMA0KKy8vKiBcYnJpZWYgUmV0dXJuIHRoZSBDaGFubmVsIDAgQ29udmVydGVkIERhdGENCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0gwICgNCisJQVQ5MVBTX0FEQyBwQURDIC8vIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlcg0KKwkpDQogew0KLSAgICByZXR1cm4gcEFEQy0+QURDX0NEUjA7DQorCXJldHVybiBwQURDLT5BRENfQ0RSMDsJDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0gxICovDQotLyoqIFxicmllZiBSZXR1cm4gdGhlIENoYW5uZWwgMSBDb252ZXJ0ZWQgRGF0YSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDEoIEFUOTFQU19BREMgcEFEQyAvKiBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNIMQ0KKy8vKiBcYnJpZWYgUmV0dXJuIHRoZSBDaGFubmVsIDEgQ29udmVydGVkIERhdGENCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0gxICgNCisJQVQ5MVBTX0FEQyBwQURDIC8vIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlcg0KKwkpDQogew0KLSAgICByZXR1cm4gcEFEQy0+QURDX0NEUjE7DQorCXJldHVybiBwQURDLT5BRENfQ0RSMTsJDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0gyICovDQotLyoqIFxicmllZiBSZXR1cm4gdGhlIENoYW5uZWwgMiBDb252ZXJ0ZWQgRGF0YSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDIoIEFUOTFQU19BREMgcEFEQyAvKiBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNIMg0KKy8vKiBcYnJpZWYgUmV0dXJuIHRoZSBDaGFubmVsIDIgQ29udmVydGVkIERhdGENCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0gyICgNCisJQVQ5MVBTX0FEQyBwQURDIC8vIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlcg0KKwkpDQogew0KLSAgICByZXR1cm4gcEFEQy0+QURDX0NEUjI7DQorCXJldHVybiBwQURDLT5BRENfQ0RSMjsJDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0gzICovDQotLyoqIFxicmllZiBSZXR1cm4gdGhlIENoYW5uZWwgMyBDb252ZXJ0ZWQgRGF0YSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDMoIEFUOTFQU19BREMgcEFEQyAvKiBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNIMw0KKy8vKiBcYnJpZWYgUmV0dXJuIHRoZSBDaGFubmVsIDMgQ29udmVydGVkIERhdGENCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0gzICgNCisJQVQ5MVBTX0FEQyBwQURDIC8vIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlcg0KKwkpDQogew0KLSAgICByZXR1cm4gcEFEQy0+QURDX0NEUjM7DQorCXJldHVybiBwQURDLT5BRENfQ0RSMzsJDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0g0ICovDQotLyoqIFxicmllZiBSZXR1cm4gdGhlIENoYW5uZWwgNCBDb252ZXJ0ZWQgRGF0YSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDQoIEFUOTFQU19BREMgcEFEQyAvKiBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNINA0KKy8vKiBcYnJpZWYgUmV0dXJuIHRoZSBDaGFubmVsIDQgQ29udmVydGVkIERhdGENCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0g0ICgNCisJQVQ5MVBTX0FEQyBwQURDIC8vIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlcg0KKwkpDQogew0KLSAgICByZXR1cm4gcEFEQy0+QURDX0NEUjQ7DQorCXJldHVybiBwQURDLT5BRENfQ0RSNDsJDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0g1ICovDQotLyoqIFxicmllZiBSZXR1cm4gdGhlIENoYW5uZWwgNSBDb252ZXJ0ZWQgRGF0YSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDUoIEFUOTFQU19BREMgcEFEQyAvKiBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNINQ0KKy8vKiBcYnJpZWYgUmV0dXJuIHRoZSBDaGFubmVsIDUgQ29udmVydGVkIERhdGENCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0g1ICgNCisJQVQ5MVBTX0FEQyBwQURDIC8vIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlcg0KKwkpDQogew0KLSAgICByZXR1cm4gcEFEQy0+QURDX0NEUjU7DQorCXJldHVybiBwQURDLT5BRENfQ0RSNTsJDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0g2ICovDQotLyoqIFxicmllZiBSZXR1cm4gdGhlIENoYW5uZWwgNiBDb252ZXJ0ZWQgRGF0YSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDYoIEFUOTFQU19BREMgcEFEQyAvKiBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNINg0KKy8vKiBcYnJpZWYgUmV0dXJuIHRoZSBDaGFubmVsIDYgQ29udmVydGVkIERhdGENCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0g2ICgNCisJQVQ5MVBTX0FEQyBwQURDIC8vIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlcg0KKwkpDQogew0KLSAgICByZXR1cm4gcEFEQy0+QURDX0NEUjY7DQorCXJldHVybiBwQURDLT5BRENfQ0RSNjsJDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0g3ICovDQotLyoqIFxicmllZiBSZXR1cm4gdGhlIENoYW5uZWwgNyBDb252ZXJ0ZWQgRGF0YSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDcoIEFUOTFQU19BREMgcEFEQyAvKiBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNINw0KKy8vKiBcYnJpZWYgUmV0dXJuIHRoZSBDaGFubmVsIDcgQ29udmVydGVkIERhdGENCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0g3ICgNCisJQVQ5MVBTX0FEQyBwQURDIC8vIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlcg0KKwkpDQogew0KLSAgICByZXR1cm4gcEFEQy0+QURDX0NEUjc7DQorCXJldHVybiBwQURDLT5BRENfQ0RSNzsJDQogfQ0KIA0KIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotKiAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgUElPDQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fQ2ZnUGVyaXBoICovDQotLyoqIFxicmllZiBFbmFibGUgcGlucyB0byBiZSBkcml2ZWQgYnkgcGVyaXBoZXJhbCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BJT19DZmdQZXJpcGgoIEFUOTFQU19QSU8gcFBpbywgICAgICAgICAgICAgLyogXGFyZyBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwZXJpcGhBRW5hYmxlLCAgLyogXGFyZyBQRVJJUEggQSB0byBlbmFibGUgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwZXJpcGhCRW5hYmxlICkgLyogXGFyZyBQRVJJUEggQiB0byBlbmFibGUgKi8NCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBQSU8NCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19DZmdQZXJpcGgNCisvLyogXGJyaWVmIEVuYWJsZSBwaW5zIHRvIGJlIGRyaXZlZCBieSBwZXJpcGhlcmFsDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJQVQ5MVBTX1BJTyBwUGlvLCAgICAgICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgcGVyaXBoQUVuYWJsZSwgIC8vIFxhcmcgUEVSSVBIIEEgdG8gZW5hYmxlDQorCXVuc2lnbmVkIGludCBwZXJpcGhCRW5hYmxlKSAgLy8gXGFyZyBQRVJJUEggQiB0byBlbmFibGUNCiANCiB7DQotICAgIHBQaW8tPlBJT19BU1IgPSBwZXJpcGhBRW5hYmxlOw0KLSAgICBwUGlvLT5QSU9fQlNSID0gcGVyaXBoQkVuYWJsZTsNCi0gICAgcFBpby0+UElPX1BEUiA9ICggcGVyaXBoQUVuYWJsZSB8IHBlcmlwaEJFbmFibGUgKTsgLyogU2V0IGluIFBlcmlwaCBtb2RlICovDQorCXBQaW8tPlBJT19BU1IgPSBwZXJpcGhBRW5hYmxlOw0KKwlwUGlvLT5QSU9fQlNSID0gcGVyaXBoQkVuYWJsZTsNCisJcFBpby0+UElPX1BEUiA9IChwZXJpcGhBRW5hYmxlIHwgcGVyaXBoQkVuYWJsZSk7IC8vIFNldCBpbiBQZXJpcGggbW9kZQ0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fQ2ZnT3V0cHV0ICovDQotLyoqIFxicmllZiBFbmFibGUgUElPIGluIG91dHB1dCBtb2RlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUElPX0NmZ091dHB1dCggQVQ5MVBTX1BJTyBwUGlvLCAgICAgICAgIC8qIFxhcmcgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcGlvRW5hYmxlICkgLyogXGFyZyBQSU8gdG8gYmUgZW5hYmxlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19DZmdPdXRwdXQNCisvLyogXGJyaWVmIEVuYWJsZSBQSU8gaW4gb3V0cHV0IG1vZGUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fQ2ZnT3V0cHV0KA0KKwlBVDkxUFNfUElPIHBQaW8sICAgICAgICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBwaW9FbmFibGUpICAgICAgLy8gXGFyZyBQSU8gdG8gYmUgZW5hYmxlZA0KIHsNCi0gICAgcFBpby0+UElPX1BFUiA9IHBpb0VuYWJsZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZXQgaW4gUElPIG1vZGUgKi8NCi0gICAgcFBpby0+UElPX09FUiA9IHBpb0VuYWJsZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb25maWd1cmUgaW4gT3V0cHV0ICovDQorCXBQaW8tPlBJT19QRVIgPSBwaW9FbmFibGU7IC8vIFNldCBpbiBQSU8gbW9kZQ0KKwlwUGlvLT5QSU9fT0VSID0gcGlvRW5hYmxlOyAvLyBDb25maWd1cmUgaW4gT3V0cHV0DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19DZmdJbnB1dCAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIFBJTyBpbiBpbnB1dCBtb2RlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUElPX0NmZ0lucHV0KCBBVDkxUFNfUElPIHBQaW8sICAgICAgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaW5wdXRFbmFibGUgKSAvKiBcYXJnIFBJTyB0byBiZSBlbmFibGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0NmZ0lucHV0DQorLy8qIFxicmllZiBFbmFibGUgUElPIGluIGlucHV0IG1vZGUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fQ2ZnSW5wdXQoDQorCUFUOTFQU19QSU8gcFBpbywgICAgICAgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGlucHV0RW5hYmxlKSAgICAgIC8vIFxhcmcgUElPIHRvIGJlIGVuYWJsZWQNCiB7DQotICAgIC8qIERpc2FibGUgb3V0cHV0ICovDQotICAgIHBQaW8tPlBJT19PRFIgPSBpbnB1dEVuYWJsZTsNCi0gICAgcFBpby0+UElPX1BFUiA9IGlucHV0RW5hYmxlOw0KKwkvLyBEaXNhYmxlIG91dHB1dA0KKwlwUGlvLT5QSU9fT0RSICA9IGlucHV0RW5hYmxlOw0KKwlwUGlvLT5QSU9fUEVSICA9IGlucHV0RW5hYmxlOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fQ2ZnT3BlbmRyYWluICovDQotLyoqIFxicmllZiBDb25maWd1cmUgUElPIGluIG9wZW4gZHJhaW4gKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fQ2ZnT3BlbmRyYWluKCBBVDkxUFNfUElPIHBQaW8sICAgICAgICAgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG11bHRpRHJ2RW5hYmxlICkgLyogXGFyZyBwaW8gdG8gYmUgY29uZmlndXJlZCBpbiBvcGVuIGRyYWluICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0NmZ09wZW5kcmFpbg0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBpbiBvcGVuIGRyYWluDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX0NmZ09wZW5kcmFpbigNCisJQVQ5MVBTX1BJTyBwUGlvLCAgICAgICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgbXVsdGlEcnZFbmFibGUpIC8vIFxhcmcgcGlvIHRvIGJlIGNvbmZpZ3VyZWQgaW4gb3BlbiBkcmFpbg0KIHsNCi0gICAgLyogQ29uZmlndXJlIHRoZSBtdWx0aS1kcml2ZSBvcHRpb24gKi8NCi0gICAgcFBpby0+UElPX01ERFIgPSB+bXVsdGlEcnZFbmFibGU7DQotICAgIHBQaW8tPlBJT19NREVSID0gbXVsdGlEcnZFbmFibGU7DQorCS8vIENvbmZpZ3VyZSB0aGUgbXVsdGktZHJpdmUgb3B0aW9uDQorCXBQaW8tPlBJT19NRERSID0gfm11bHRpRHJ2RW5hYmxlOw0KKwlwUGlvLT5QSU9fTURFUiA9IG11bHRpRHJ2RW5hYmxlOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fQ2ZnUHVsbHVwICovDQotLyoqIFxicmllZiBFbmFibGUgcHVsbHVwIG9uIFBJTyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BJT19DZmdQdWxsdXAoIEFUOTFQU19QSU8gcFBpbywgICAgICAgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHB1bGx1cEVuYWJsZSApIC8qIFxhcmcgZW5hYmxlIHB1bGx1cCBvbiBQSU8gKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fQ2ZnUHVsbHVwDQorLy8qIFxicmllZiBFbmFibGUgcHVsbHVwIG9uIFBJTw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19DZmdQdWxsdXAoDQorCUFUOTFQU19QSU8gcFBpbywgICAgICAgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IHB1bGx1cEVuYWJsZSkgICAvLyBcYXJnIGVuYWJsZSBwdWxsdXAgb24gUElPDQogew0KLSAgICAvKiBDb25uZWN0IG9yIG5vdCBQdWxsdXAgKi8NCi0gICAgcFBpby0+UElPX1BQVURSID0gfnB1bGx1cEVuYWJsZTsNCi0gICAgcFBpby0+UElPX1BQVUVSID0gcHVsbHVwRW5hYmxlOw0KKwkJLy8gQ29ubmVjdCBvciBub3QgUHVsbHVwDQorCXBQaW8tPlBJT19QUFVEUiA9IH5wdWxsdXBFbmFibGU7DQorCXBQaW8tPlBJT19QUFVFUiA9IHB1bGx1cEVuYWJsZTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX0NmZ0RpcmVjdERyaXZlICovDQotLyoqIFxicmllZiBFbmFibGUgZGlyZWN0IGRyaXZlIG9uIFBJTyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BJT19DZmdEaXJlY3REcml2ZSggQVQ5MVBTX1BJTyBwUGlvLCAgICAgICAgICAgLyogXGFyZyBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGRpcmVjdERyaXZlICkgLyogXGFyZyBQSU8gdG8gYmUgY29uZmlndXJlZCB3aXRoIGRpcmVjdCBkcml2ZSAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19DZmdEaXJlY3REcml2ZQ0KKy8vKiBcYnJpZWYgRW5hYmxlIGRpcmVjdCBkcml2ZSBvbiBQSU8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fQ2ZnRGlyZWN0RHJpdmUoDQorCUFUOTFQU19QSU8gcFBpbywgICAgICAgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGRpcmVjdERyaXZlKSAgICAvLyBcYXJnIFBJTyB0byBiZSBjb25maWd1cmVkIHdpdGggZGlyZWN0IGRyaXZlDQogDQogew0KLSAgICAvKiBDb25maWd1cmUgdGhlIERpcmVjdCBEcml2ZSAqLw0KLSAgICBwUGlvLT5QSU9fT1dEUiA9IH5kaXJlY3REcml2ZTsNCi0gICAgcFBpby0+UElPX09XRVIgPSBkaXJlY3REcml2ZTsNCisJLy8gQ29uZmlndXJlIHRoZSBEaXJlY3QgRHJpdmUNCisJcFBpby0+UElPX09XRFIgID0gfmRpcmVjdERyaXZlOw0KKwlwUGlvLT5QSU9fT1dFUiAgPSBkaXJlY3REcml2ZTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX0NmZ0lucHV0RmlsdGVyICovDQotLyoqIFxicmllZiBFbmFibGUgaW5wdXQgZmlsdGVyIG9uIGlucHV0IFBJTyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BJT19DZmdJbnB1dEZpbHRlciggQVQ5MVBTX1BJTyBwUGlvLCAgICAgICAgICAgLyogXGFyZyBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGlucHV0RmlsdGVyICkgLyogXGFyZyBQSU8gdG8gYmUgY29uZmlndXJlZCB3aXRoIGlucHV0IGZpbHRlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19DZmdJbnB1dEZpbHRlcg0KKy8vKiBcYnJpZWYgRW5hYmxlIGlucHV0IGZpbHRlciBvbiBpbnB1dCBQSU8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fQ2ZnSW5wdXRGaWx0ZXIoDQorCUFUOTFQU19QSU8gcFBpbywgICAgICAgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGlucHV0RmlsdGVyKSAgICAvLyBcYXJnIFBJTyB0byBiZSBjb25maWd1cmVkIHdpdGggaW5wdXQgZmlsdGVyDQogDQogew0KLSAgICAvKiBDb25maWd1cmUgdGhlIERpcmVjdCBEcml2ZSAqLw0KLSAgICBwUGlvLT5QSU9fSUZEUiA9IH5pbnB1dEZpbHRlcjsNCi0gICAgcFBpby0+UElPX0lGRVIgPSBpbnB1dEZpbHRlcjsNCisJLy8gQ29uZmlndXJlIHRoZSBEaXJlY3QgRHJpdmUNCisJcFBpby0+UElPX0lGRFIgID0gfmlucHV0RmlsdGVyOw0KKwlwUGlvLT5QSU9fSUZFUiAgPSBpbnB1dEZpbHRlcjsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX0dldElucHV0ICovDQotLyoqIFxicmllZiBSZXR1cm4gUElPIGlucHV0IHZhbHVlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSU9fR2V0SW5wdXQoIC8qIFxyZXR1cm4gUElPIGlucHV0ICovDQotICAgIEFUOTFQU19QSU8gcFBpbyApICAgICAgICAgICAgICAgICAgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0dldElucHV0DQorLy8qIFxicmllZiBSZXR1cm4gUElPIGlucHV0IHZhbHVlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSU9fR2V0SW5wdXQoIC8vIFxyZXR1cm4gUElPIGlucHV0DQorCUFUOTFQU19QSU8gcFBpbykgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQogew0KLSAgICByZXR1cm4gcFBpby0+UElPX1BEU1I7DQorCXJldHVybiBwUGlvLT5QSU9fUERTUjsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX0lzSW5wdXRTZXQgKi8NCi0vKiogXGJyaWVmIFRlc3QgaWYgUElPIGlzIGlucHV0IGZsYWcgaXMgYWN0aXZlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIGludCBBVDkxRl9QSU9fSXNJbnB1dFNldCggQVQ5MVBTX1BJTyBwUGlvLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fSXNJbnB1dFNldA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBQSU8gaXMgaW5wdXQgZmxhZyBpcyBhY3RpdmUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1BJT19Jc0lucHV0U2V0KA0KKwlBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KIHsNCi0gICAgcmV0dXJuKCBBVDkxRl9QSU9fR2V0SW5wdXQoIHBQaW8gKSAmIGZsYWcgKTsNCisJcmV0dXJuIChBVDkxRl9QSU9fR2V0SW5wdXQocFBpbykgJiBmbGFnKTsNCiB9DQogDQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX1NldE91dHB1dCAqLw0KLS8qKiBcYnJpZWYgU2V0IHRvIDEgb3V0cHV0IFBJTyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BJT19TZXRPdXRwdXQoIEFUOTFQU19QSU8gcFBpbywgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIG91dHB1dCB0byBiZSBzZXQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fU2V0T3V0cHV0DQorLy8qIFxicmllZiBTZXQgdG8gMSBvdXRwdXQgUElPDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX1NldE91dHB1dCgNCisJQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgb3V0cHV0IHRvIGJlIHNldA0KIHsNCi0gICAgcFBpby0+UElPX1NPRFIgPSBmbGFnOw0KKwlwUGlvLT5QSU9fU09EUiA9IGZsYWc7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19DbGVhck91dHB1dCAqLw0KLS8qKiBcYnJpZWYgU2V0IHRvIDAgb3V0cHV0IFBJTyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BJT19DbGVhck91dHB1dCggQVQ5MVBTX1BJTyBwUGlvLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBvdXRwdXQgdG8gYmUgY2xlYXJlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19DbGVhck91dHB1dA0KKy8vKiBcYnJpZWYgU2V0IHRvIDAgb3V0cHV0IFBJTw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19DbGVhck91dHB1dCgNCisJQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgb3V0cHV0IHRvIGJlIGNsZWFyZWQNCiB7DQotICAgIHBQaW8tPlBJT19DT0RSID0gZmxhZzsNCisJcFBpby0+UElPX0NPRFIgPSBmbGFnOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fRm9yY2VPdXRwdXQgKi8NCi0vKiogXGJyaWVmIEZvcmNlIG91dHB1dCB3aGVuIERpcmVjdCBkcml2ZSBvcHRpb24gaXMgZW5hYmxlZCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BJT19Gb3JjZU91dHB1dCggQVQ5MVBTX1BJTyBwUGlvLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBvdXRwdXQgdG8gYmUgZm9yY2VkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0ZvcmNlT3V0cHV0DQorLy8qIFxicmllZiBGb3JjZSBvdXRwdXQgd2hlbiBEaXJlY3QgZHJpdmUgb3B0aW9uIGlzIGVuYWJsZWQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fRm9yY2VPdXRwdXQoDQorCUFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIG91dHB1dCB0byBiZSBmb3JjZWQNCiB7DQotICAgIHBQaW8tPlBJT19PRFNSID0gZmxhZzsNCisJcFBpby0+UElPX09EU1IgPSBmbGFnOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fRW5hYmxlICovDQotLyoqIFxicmllZiBFbmFibGUgUElPICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUElPX0VuYWJsZSggQVQ5MVBTX1BJTyBwUGlvLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgcGlvIHRvIGJlIGVuYWJsZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fRW5hYmxlDQorLy8qIFxicmllZiBFbmFibGUgUElPDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX0VuYWJsZSgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBwaW8gdG8gYmUgZW5hYmxlZCANCiB7DQotICAgIHBQaW8tPlBJT19QRVIgPSBmbGFnOw0KKyAgICAgICAgcFBpby0+UElPX1BFUiA9IGZsYWc7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19EaXNhYmxlICovDQotLyoqIFxicmllZiBEaXNhYmxlIFBJTyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BJT19EaXNhYmxlKCBBVDkxUFNfUElPIHBQaW8sICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgcGlvIHRvIGJlIGRpc2FibGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0Rpc2FibGUNCisvLyogXGJyaWVmIERpc2FibGUgUElPDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX0Rpc2FibGUoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgcGlvIHRvIGJlIGRpc2FibGVkIA0KIHsNCi0gICAgcFBpby0+UElPX1BEUiA9IGZsYWc7DQorICAgICAgICBwUGlvLT5QSU9fUERSID0gZmxhZzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX0dldFN0YXR1cyAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIFBJTyBTdGF0dXMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJT19HZXRTdGF0dXMoIC8qIFxyZXR1cm4gUElPIFN0YXR1cyAqLw0KLSAgICBBVDkxUFNfUElPIHBQaW8gKSAgICAgICAgICAgICAgICAgICAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fR2V0U3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gUElPIFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElPX0dldFN0YXR1cyggLy8gXHJldHVybiBQSU8gU3RhdHVzDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8pIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KIHsNCi0gICAgcmV0dXJuIHBQaW8tPlBJT19QU1I7DQorICAgICAgICByZXR1cm4gcFBpby0+UElPX1BTUjsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX0lzU2V0ICovDQotLyoqIFxicmllZiBUZXN0IGlmIFBJTyBpcyBTZXQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgaW50IEFUOTFGX1BJT19Jc1NldCggQVQ5MVBTX1BJTyBwUGlvLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0lzU2V0DQorLy8qIFxicmllZiBUZXN0IGlmIFBJTyBpcyBTZXQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1BJT19Jc1NldCgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KIHsNCi0gICAgcmV0dXJuKCBBVDkxRl9QSU9fR2V0U3RhdHVzKCBwUGlvICkgJiBmbGFnICk7DQorICAgICAgICByZXR1cm4gKEFUOTFGX1BJT19HZXRTdGF0dXMocFBpbykgJiBmbGFnKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX091dHB1dEVuYWJsZSAqLw0KLS8qKiBcYnJpZWYgT3V0cHV0IEVuYWJsZSBQSU8gKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fT3V0cHV0RW5hYmxlKCBBVDkxUFNfUElPIHBQaW8sICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBwaW8gb3V0cHV0IHRvIGJlIGVuYWJsZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fT3V0cHV0RW5hYmxlDQorLy8qIFxicmllZiBPdXRwdXQgRW5hYmxlIFBJTw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19PdXRwdXRFbmFibGUoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgcGlvIG91dHB1dCB0byBiZSBlbmFibGVkDQogew0KLSAgICBwUGlvLT5QSU9fT0VSID0gZmxhZzsNCisgICAgICAgIHBQaW8tPlBJT19PRVIgPSBmbGFnOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fT3V0cHV0RGlzYWJsZSAqLw0KLS8qKiBcYnJpZWYgT3V0cHV0IEVuYWJsZSBQSU8gKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fT3V0cHV0RGlzYWJsZSggQVQ5MVBTX1BJTyBwUGlvLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIHBpbyBvdXRwdXQgdG8gYmUgZGlzYWJsZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fT3V0cHV0RGlzYWJsZQ0KKy8vKiBcYnJpZWYgT3V0cHV0IEVuYWJsZSBQSU8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fT3V0cHV0RGlzYWJsZSgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBwaW8gb3V0cHV0IHRvIGJlIGRpc2FibGVkDQogew0KLSAgICBwUGlvLT5QSU9fT0RSID0gZmxhZzsNCisgICAgICAgIHBQaW8tPlBJT19PRFIgPSBmbGFnOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fR2V0T3V0cHV0U3RhdHVzICovDQotLyoqIFxicmllZiBSZXR1cm4gUElPIE91dHB1dCBTdGF0dXMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJT19HZXRPdXRwdXRTdGF0dXMoIC8qIFxyZXR1cm4gUElPIE91dHB1dCBTdGF0dXMgKi8NCi0gICAgQVQ5MVBTX1BJTyBwUGlvICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0dldE91dHB1dFN0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFBJTyBPdXRwdXQgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSU9fR2V0T3V0cHV0U3RhdHVzKCAvLyBccmV0dXJuIFBJTyBPdXRwdXQgU3RhdHVzDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8pIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KIHsNCi0gICAgcmV0dXJuIHBQaW8tPlBJT19PU1I7DQorICAgICAgICByZXR1cm4gcFBpby0+UElPX09TUjsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX0lzT3VwdXRTZXQgKi8NCi0vKiogXGJyaWVmIFRlc3QgaWYgUElPIE91dHB1dCBpcyBTZXQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgaW50IEFUOTFGX1BJT19Jc091dHB1dFNldCggQVQ5MVBTX1BJTyBwUGlvLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0lzT3VwdXRTZXQNCisvLyogXGJyaWVmIFRlc3QgaWYgUElPIE91dHB1dCBpcyBTZXQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1BJT19Jc091dHB1dFNldCgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KIHsNCi0gICAgcmV0dXJuKCBBVDkxRl9QSU9fR2V0T3V0cHV0U3RhdHVzKCBwUGlvICkgJiBmbGFnICk7DQorICAgICAgICByZXR1cm4gKEFUOTFGX1BJT19HZXRPdXRwdXRTdGF0dXMocFBpbykgJiBmbGFnKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX0lucHV0RmlsdGVyRW5hYmxlICovDQotLyoqIFxicmllZiBJbnB1dCBGaWx0ZXIgRW5hYmxlIFBJTyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BJT19JbnB1dEZpbHRlckVuYWJsZSggQVQ5MVBTX1BJTyBwUGlvLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBwaW8gaW5wdXQgZmlsdGVyIHRvIGJlIGVuYWJsZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fSW5wdXRGaWx0ZXJFbmFibGUNCisvLyogXGJyaWVmIElucHV0IEZpbHRlciBFbmFibGUgUElPDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX0lucHV0RmlsdGVyRW5hYmxlKA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIHBpbyBpbnB1dCBmaWx0ZXIgdG8gYmUgZW5hYmxlZA0KIHsNCi0gICAgcFBpby0+UElPX0lGRVIgPSBmbGFnOw0KKyAgICAgICAgcFBpby0+UElPX0lGRVIgPSBmbGFnOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fSW5wdXRGaWx0ZXJEaXNhYmxlICovDQotLyoqIFxicmllZiBJbnB1dCBGaWx0ZXIgRGlzYWJsZSBQSU8gKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fSW5wdXRGaWx0ZXJEaXNhYmxlKCBBVDkxUFNfUElPIHBQaW8sICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBwaW8gaW5wdXQgZmlsdGVyIHRvIGJlIGRpc2FibGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0lucHV0RmlsdGVyRGlzYWJsZQ0KKy8vKiBcYnJpZWYgSW5wdXQgRmlsdGVyIERpc2FibGUgUElPDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX0lucHV0RmlsdGVyRGlzYWJsZSgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBwaW8gaW5wdXQgZmlsdGVyIHRvIGJlIGRpc2FibGVkDQogew0KLSAgICBwUGlvLT5QSU9fSUZEUiA9IGZsYWc7DQorICAgICAgICBwUGlvLT5QSU9fSUZEUiA9IGZsYWc7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19HZXRJbnB1dEZpbHRlclN0YXR1cyAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIFBJTyBJbnB1dCBGaWx0ZXIgU3RhdHVzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSU9fR2V0SW5wdXRGaWx0ZXJTdGF0dXMoIC8qIFxyZXR1cm4gUElPIElucHV0IEZpbHRlciBTdGF0dXMgKi8NCi0gICAgQVQ5MVBTX1BJTyBwUGlvICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fR2V0SW5wdXRGaWx0ZXJTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBQSU8gSW5wdXQgRmlsdGVyIFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElPX0dldElucHV0RmlsdGVyU3RhdHVzKCAvLyBccmV0dXJuIFBJTyBJbnB1dCBGaWx0ZXIgU3RhdHVzDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8pIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KIHsNCi0gICAgcmV0dXJuIHBQaW8tPlBJT19JRlNSOw0KKyAgICAgICAgcmV0dXJuIHBQaW8tPlBJT19JRlNSOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fSXNJbnB1dEZpbHRlclNldCAqLw0KLS8qKiBcYnJpZWYgVGVzdCBpZiBQSU8gSW5wdXQgZmlsdGVyIGlzIFNldCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSBpbnQgQVQ5MUZfUElPX0lzSW5wdXRGaWx0ZXJTZXQoIEFUOTFQU19QSU8gcFBpbywgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0lzSW5wdXRGaWx0ZXJTZXQNCisvLyogXGJyaWVmIFRlc3QgaWYgUElPIElucHV0IGZpbHRlciBpcyBTZXQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1BJT19Jc0lucHV0RmlsdGVyU2V0KA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQogew0KLSAgICByZXR1cm4oIEFUOTFGX1BJT19HZXRJbnB1dEZpbHRlclN0YXR1cyggcFBpbyApICYgZmxhZyApOw0KKyAgICAgICAgcmV0dXJuIChBVDkxRl9QSU9fR2V0SW5wdXRGaWx0ZXJTdGF0dXMocFBpbykgJiBmbGFnKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX0dldE91dHB1dERhdGFTdGF0dXMgKi8NCi0vKiogXGJyaWVmIFJldHVybiBQSU8gT3V0cHV0IERhdGEgU3RhdHVzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSU9fR2V0T3V0cHV0RGF0YVN0YXR1cyggLyogXHJldHVybiBQSU8gT3V0cHV0IERhdGEgU3RhdHVzICovDQotICAgIEFUOTFQU19QSU8gcFBpbyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fR2V0T3V0cHV0RGF0YVN0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFBJTyBPdXRwdXQgRGF0YSBTdGF0dXMgDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSU9fR2V0T3V0cHV0RGF0YVN0YXR1cyggLy8gXHJldHVybiBQSU8gT3V0cHV0IERhdGEgU3RhdHVzIA0KKwlBVDkxUFNfUElPIHBQaW8pIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KIHsNCi0gICAgcmV0dXJuIHBQaW8tPlBJT19PRFNSOw0KKyAgICAgICAgcmV0dXJuIHBQaW8tPlBJT19PRFNSOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fSW50ZXJydXB0RW5hYmxlICovDQotLyoqIFxicmllZiBFbmFibGUgUElPIEludGVycnVwdCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BJT19JbnRlcnJ1cHRFbmFibGUoIEFUOTFQU19QSU8gcFBpbywgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIHBpbyBpbnRlcnJ1cHQgdG8gYmUgZW5hYmxlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19JbnRlcnJ1cHRFbmFibGUNCisvLyogXGJyaWVmIEVuYWJsZSBQSU8gSW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX0ludGVycnVwdEVuYWJsZSgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBwaW8gaW50ZXJydXB0IHRvIGJlIGVuYWJsZWQNCiB7DQotICAgIHBQaW8tPlBJT19JRVIgPSBmbGFnOw0KKyAgICAgICAgcFBpby0+UElPX0lFUiA9IGZsYWc7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19JbnRlcnJ1cHREaXNhYmxlICovDQotLyoqIFxicmllZiBEaXNhYmxlIFBJTyBJbnRlcnJ1cHQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fSW50ZXJydXB0RGlzYWJsZSggQVQ5MVBTX1BJTyBwUGlvLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIHBpbyBpbnRlcnJ1cHQgdG8gYmUgZGlzYWJsZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fSW50ZXJydXB0RGlzYWJsZQ0KKy8vKiBcYnJpZWYgRGlzYWJsZSBQSU8gSW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX0ludGVycnVwdERpc2FibGUoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgcGlvIGludGVycnVwdCB0byBiZSBkaXNhYmxlZA0KIHsNCi0gICAgcFBpby0+UElPX0lEUiA9IGZsYWc7DQorICAgICAgICBwUGlvLT5QSU9fSURSID0gZmxhZzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX0dldEludGVycnVwdE1hc2tTdGF0dXMgKi8NCi0vKiogXGJyaWVmIFJldHVybiBQSU8gSW50ZXJydXB0IE1hc2sgU3RhdHVzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSU9fR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLyogXHJldHVybiBQSU8gSW50ZXJydXB0IE1hc2sgU3RhdHVzICovDQotICAgIEFUOTFQU19QSU8gcFBpbyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fR2V0SW50ZXJydXB0TWFza1N0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFBJTyBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJT19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCAvLyBccmV0dXJuIFBJTyBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbykgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQogew0KLSAgICByZXR1cm4gcFBpby0+UElPX0lNUjsNCisgICAgICAgIHJldHVybiBwUGlvLT5QSU9fSU1SOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fR2V0SW50ZXJydXB0U3RhdHVzICovDQotLyoqIFxicmllZiBSZXR1cm4gUElPIEludGVycnVwdCBTdGF0dXMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJT19HZXRJbnRlcnJ1cHRTdGF0dXMoIC8qIFxyZXR1cm4gUElPIEludGVycnVwdCBTdGF0dXMgKi8NCi0gICAgQVQ5MVBTX1BJTyBwUGlvICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0dldEludGVycnVwdFN0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFBJTyBJbnRlcnJ1cHQgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSU9fR2V0SW50ZXJydXB0U3RhdHVzKCAvLyBccmV0dXJuIFBJTyBJbnRlcnJ1cHQgU3RhdHVzDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8pIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KIHsNCi0gICAgcmV0dXJuIHBQaW8tPlBJT19JU1I7DQorICAgICAgICByZXR1cm4gcFBpby0+UElPX0lTUjsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX0lzSW50ZXJydXB0TWFza2VkICovDQotLyoqIFxicmllZiBUZXN0IGlmIFBJTyBJbnRlcnJ1cHQgaXMgTWFza2VkICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIGludCBBVDkxRl9QSU9fSXNJbnRlcnJ1cHRNYXNrZWQoIEFUOTFQU19QSU8gcFBpbywgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19Jc0ludGVycnVwdE1hc2tlZA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBQSU8gSW50ZXJydXB0IGlzIE1hc2tlZCANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1BJT19Jc0ludGVycnVwdE1hc2tlZCgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KIHsNCi0gICAgcmV0dXJuKCBBVDkxRl9QSU9fR2V0SW50ZXJydXB0TWFza1N0YXR1cyggcFBpbyApICYgZmxhZyApOw0KKyAgICAgICAgcmV0dXJuIChBVDkxRl9QSU9fR2V0SW50ZXJydXB0TWFza1N0YXR1cyhwUGlvKSAmIGZsYWcpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fSXNJbnRlcnJ1cHRTZXQgKi8NCi0vKiogXGJyaWVmIFRlc3QgaWYgUElPIEludGVycnVwdCBpcyBTZXQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgaW50IEFUOTFGX1BJT19Jc0ludGVycnVwdFNldCggQVQ5MVBTX1BJTyBwUGlvLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0lzSW50ZXJydXB0U2V0DQorLy8qIFxicmllZiBUZXN0IGlmIFBJTyBJbnRlcnJ1cHQgaXMgU2V0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9QSU9fSXNJbnRlcnJ1cHRTZXQoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCiB7DQotICAgIHJldHVybiggQVQ5MUZfUElPX0dldEludGVycnVwdFN0YXR1cyggcFBpbyApICYgZmxhZyApOw0KKyAgICAgICAgcmV0dXJuIChBVDkxRl9QSU9fR2V0SW50ZXJydXB0U3RhdHVzKHBQaW8pICYgZmxhZyk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19NdWx0aURyaXZlckVuYWJsZSAqLw0KLS8qKiBcYnJpZWYgTXVsdGkgRHJpdmVyIEVuYWJsZSBQSU8gKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fTXVsdGlEcml2ZXJFbmFibGUoIEFUOTFQU19QSU8gcFBpbywgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgcGlvIHRvIGJlIGVuYWJsZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fTXVsdGlEcml2ZXJFbmFibGUNCisvLyogXGJyaWVmIE11bHRpIERyaXZlciBFbmFibGUgUElPDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX011bHRpRHJpdmVyRW5hYmxlKA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIHBpbyB0byBiZSBlbmFibGVkDQogew0KLSAgICBwUGlvLT5QSU9fTURFUiA9IGZsYWc7DQorICAgICAgICBwUGlvLT5QSU9fTURFUiA9IGZsYWc7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19NdWx0aURyaXZlckRpc2FibGUgKi8NCi0vKiogXGJyaWVmIE11bHRpIERyaXZlciBEaXNhYmxlIFBJTyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BJT19NdWx0aURyaXZlckRpc2FibGUoIEFUOTFQU19QSU8gcFBpbywgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIHBpbyB0byBiZSBkaXNhYmxlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19NdWx0aURyaXZlckRpc2FibGUNCisvLyogXGJyaWVmIE11bHRpIERyaXZlciBEaXNhYmxlIFBJTw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19NdWx0aURyaXZlckRpc2FibGUoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgcGlvIHRvIGJlIGRpc2FibGVkDQogew0KLSAgICBwUGlvLT5QSU9fTUREUiA9IGZsYWc7DQorICAgICAgICBwUGlvLT5QSU9fTUREUiA9IGZsYWc7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19HZXRNdWx0aURyaXZlclN0YXR1cyAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIFBJTyBNdWx0aSBEcml2ZXIgU3RhdHVzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSU9fR2V0TXVsdGlEcml2ZXJTdGF0dXMoIC8qIFxyZXR1cm4gUElPIE11bHRpIERyaXZlciBTdGF0dXMgKi8NCi0gICAgQVQ5MVBTX1BJTyBwUGlvICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fR2V0TXVsdGlEcml2ZXJTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBQSU8gTXVsdGkgRHJpdmVyIFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElPX0dldE11bHRpRHJpdmVyU3RhdHVzKCAvLyBccmV0dXJuIFBJTyBNdWx0aSBEcml2ZXIgU3RhdHVzDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8pIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KIHsNCi0gICAgcmV0dXJuIHBQaW8tPlBJT19NRFNSOw0KKyAgICAgICAgcmV0dXJuIHBQaW8tPlBJT19NRFNSOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fSXNNdWx0aURyaXZlclNldCAqLw0KLS8qKiBcYnJpZWYgVGVzdCBpZiBQSU8gTXVsdGlEcml2ZXIgaXMgU2V0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIGludCBBVDkxRl9QSU9fSXNNdWx0aURyaXZlclNldCggQVQ5MVBTX1BJTyBwUGlvLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fSXNNdWx0aURyaXZlclNldA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBQSU8gTXVsdGlEcml2ZXIgaXMgU2V0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9QSU9fSXNNdWx0aURyaXZlclNldCgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KIHsNCi0gICAgcmV0dXJuKCBBVDkxRl9QSU9fR2V0TXVsdGlEcml2ZXJTdGF0dXMoIHBQaW8gKSAmIGZsYWcgKTsNCisgICAgICAgIHJldHVybiAoQVQ5MUZfUElPX0dldE11bHRpRHJpdmVyU3RhdHVzKHBQaW8pICYgZmxhZyk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19BX1JlZ2lzdGVyU2VsZWN0aW9uICovDQotLyoqIFxicmllZiBQSU8gQSBSZWdpc3RlciBTZWxlY3Rpb24gKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fQV9SZWdpc3RlclNlbGVjdGlvbiggQVQ5MVBTX1BJTyBwUGlvLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIHBpbyBBIHJlZ2lzdGVyIHNlbGVjdGlvbiAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19BX1JlZ2lzdGVyU2VsZWN0aW9uDQorLy8qIFxicmllZiBQSU8gQSBSZWdpc3RlciBTZWxlY3Rpb24gDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX0FfUmVnaXN0ZXJTZWxlY3Rpb24oDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgcGlvIEEgcmVnaXN0ZXIgc2VsZWN0aW9uDQogew0KLSAgICBwUGlvLT5QSU9fQVNSID0gZmxhZzsNCisgICAgICAgIHBQaW8tPlBJT19BU1IgPSBmbGFnOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fQl9SZWdpc3RlclNlbGVjdGlvbiAqLw0KLS8qKiBcYnJpZWYgUElPIEIgUmVnaXN0ZXIgU2VsZWN0aW9uICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUElPX0JfUmVnaXN0ZXJTZWxlY3Rpb24oIEFUOTFQU19QSU8gcFBpbywgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBwaW8gQiByZWdpc3RlciBzZWxlY3Rpb24gKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fQl9SZWdpc3RlclNlbGVjdGlvbg0KKy8vKiBcYnJpZWYgUElPIEIgUmVnaXN0ZXIgU2VsZWN0aW9uIA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19CX1JlZ2lzdGVyU2VsZWN0aW9uKA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIHBpbyBCIHJlZ2lzdGVyIHNlbGVjdGlvbiANCiB7DQotICAgIHBQaW8tPlBJT19CU1IgPSBmbGFnOw0KKyAgICAgICAgcFBpby0+UElPX0JTUiA9IGZsYWc7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19HZXRfQUJfUmVnaXN0ZXJTdGF0dXMgKi8NCi0vKiogXGJyaWVmIFJldHVybiBQSU8gSW50ZXJydXB0IFN0YXR1cyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElPX0dldF9BQl9SZWdpc3RlclN0YXR1cyggLyogXHJldHVybiBQSU8gQUIgUmVnaXN0ZXIgU3RhdHVzICovDQotICAgIEFUOTFQU19QSU8gcFBpbyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19HZXRfQUJfUmVnaXN0ZXJTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBQSU8gSW50ZXJydXB0IFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElPX0dldF9BQl9SZWdpc3RlclN0YXR1cyggLy8gXHJldHVybiBQSU8gQUIgUmVnaXN0ZXIgU3RhdHVzDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8pIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KIHsNCi0gICAgcmV0dXJuIHBQaW8tPlBJT19BQlNSOw0KKyAgICAgICAgcmV0dXJuIHBQaW8tPlBJT19BQlNSOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fSXNBQl9SZWdpc3RlclNldCAqLw0KLS8qKiBcYnJpZWYgVGVzdCBpZiBQSU8gQUIgUmVnaXN0ZXIgaXMgU2V0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIGludCBBVDkxRl9QSU9fSXNBQl9SZWdpc3RlclNldCggQVQ5MVBTX1BJTyBwUGlvLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fSXNBQl9SZWdpc3RlclNldA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBQSU8gQUIgUmVnaXN0ZXIgaXMgU2V0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9QSU9fSXNBQl9SZWdpc3RlclNldCgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KIHsNCi0gICAgcmV0dXJuKCBBVDkxRl9QSU9fR2V0X0FCX1JlZ2lzdGVyU3RhdHVzKCBwUGlvICkgJiBmbGFnICk7DQorICAgICAgICByZXR1cm4gKEFUOTFGX1BJT19HZXRfQUJfUmVnaXN0ZXJTdGF0dXMocFBpbykgJiBmbGFnKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX091dHB1dFdyaXRlRW5hYmxlICovDQotLyoqIFxicmllZiBPdXRwdXQgV3JpdGUgRW5hYmxlIFBJTyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BJT19PdXRwdXRXcml0ZUVuYWJsZSggQVQ5MVBTX1BJTyBwUGlvLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBwaW8gb3V0cHV0IHdyaXRlIHRvIGJlIGVuYWJsZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fT3V0cHV0V3JpdGVFbmFibGUNCisvLyogXGJyaWVmIE91dHB1dCBXcml0ZSBFbmFibGUgUElPDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX091dHB1dFdyaXRlRW5hYmxlKA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIHBpbyBvdXRwdXQgd3JpdGUgdG8gYmUgZW5hYmxlZA0KIHsNCi0gICAgcFBpby0+UElPX09XRVIgPSBmbGFnOw0KKyAgICAgICAgcFBpby0+UElPX09XRVIgPSBmbGFnOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fT3V0cHV0V3JpdGVEaXNhYmxlICovDQotLyoqIFxicmllZiBPdXRwdXQgV3JpdGUgRGlzYWJsZSBQSU8gKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fT3V0cHV0V3JpdGVEaXNhYmxlKCBBVDkxUFNfUElPIHBQaW8sICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBwaW8gb3V0cHV0IHdyaXRlIHRvIGJlIGRpc2FibGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX091dHB1dFdyaXRlRGlzYWJsZQ0KKy8vKiBcYnJpZWYgT3V0cHV0IFdyaXRlIERpc2FibGUgUElPDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX091dHB1dFdyaXRlRGlzYWJsZSgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBwaW8gb3V0cHV0IHdyaXRlIHRvIGJlIGRpc2FibGVkDQogew0KLSAgICBwUGlvLT5QSU9fT1dEUiA9IGZsYWc7DQorICAgICAgICBwUGlvLT5QSU9fT1dEUiA9IGZsYWc7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19HZXRPdXRwdXRXcml0ZVN0YXR1cyAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIFBJTyBPdXRwdXQgV3JpdGUgU3RhdHVzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSU9fR2V0T3V0cHV0V3JpdGVTdGF0dXMoIC8qIFxyZXR1cm4gUElPIE91dHB1dCBXcml0ZSBTdGF0dXMgKi8NCi0gICAgQVQ5MVBTX1BJTyBwUGlvICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fR2V0T3V0cHV0V3JpdGVTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBQSU8gT3V0cHV0IFdyaXRlIFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElPX0dldE91dHB1dFdyaXRlU3RhdHVzKCAvLyBccmV0dXJuIFBJTyBPdXRwdXQgV3JpdGUgU3RhdHVzDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8pIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KIHsNCi0gICAgcmV0dXJuIHBQaW8tPlBJT19PV1NSOw0KKyAgICAgICAgcmV0dXJuIHBQaW8tPlBJT19PV1NSOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fSXNPdXRwdXRXcml0ZVNldCAqLw0KLS8qKiBcYnJpZWYgVGVzdCBpZiBQSU8gT3V0cHV0V3JpdGUgaXMgU2V0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIGludCBBVDkxRl9QSU9fSXNPdXRwdXRXcml0ZVNldCggQVQ5MVBTX1BJTyBwUGlvLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fSXNPdXRwdXRXcml0ZVNldA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBQSU8gT3V0cHV0V3JpdGUgaXMgU2V0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9QSU9fSXNPdXRwdXRXcml0ZVNldCgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KIHsNCi0gICAgcmV0dXJuKCBBVDkxRl9QSU9fR2V0T3V0cHV0V3JpdGVTdGF0dXMoIHBQaW8gKSAmIGZsYWcgKTsNCisgICAgICAgIHJldHVybiAoQVQ5MUZfUElPX0dldE91dHB1dFdyaXRlU3RhdHVzKHBQaW8pICYgZmxhZyk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19HZXRDZmdQdWxsdXAgKi8NCi0vKiogXGJyaWVmIFJldHVybiBQSU8gQ29uZmlndXJhdGlvbiBQdWxsdXAgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJT19HZXRDZmdQdWxsdXAoIC8qIFxyZXR1cm4gUElPIENvbmZpZ3VyYXRpb24gUHVsbHVwICovDQotICAgIEFUOTFQU19QSU8gcFBpbyApICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19HZXRDZmdQdWxsdXANCisvLyogXGJyaWVmIFJldHVybiBQSU8gQ29uZmlndXJhdGlvbiBQdWxsdXANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJT19HZXRDZmdQdWxsdXAoIC8vIFxyZXR1cm4gUElPIENvbmZpZ3VyYXRpb24gUHVsbHVwIA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvKSAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCiB7DQotICAgIHJldHVybiBwUGlvLT5QSU9fUFBVU1I7DQorICAgICAgICByZXR1cm4gcFBpby0+UElPX1BQVVNSOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fSXNPdXRwdXREYXRhU3RhdHVzU2V0ICovDQotLyoqIFxicmllZiBUZXN0IGlmIFBJTyBPdXRwdXQgRGF0YSBTdGF0dXMgaXMgU2V0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIGludCBBVDkxRl9QSU9fSXNPdXRwdXREYXRhU3RhdHVzU2V0KCBBVDkxUFNfUElPIHBQaW8sICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0lzT3V0cHV0RGF0YVN0YXR1c1NldA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBQSU8gT3V0cHV0IERhdGEgU3RhdHVzIGlzIFNldCANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1BJT19Jc091dHB1dERhdGFTdGF0dXNTZXQoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCiB7DQotICAgIHJldHVybiggQVQ5MUZfUElPX0dldE91dHB1dERhdGFTdGF0dXMoIHBQaW8gKSAmIGZsYWcgKTsNCisgICAgICAgIHJldHVybiAoQVQ5MUZfUElPX0dldE91dHB1dERhdGFTdGF0dXMocFBpbykgJiBmbGFnKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX0lzQ2ZnUHVsbHVwU3RhdHVzU2V0ICovDQotLyoqIFxicmllZiBUZXN0IGlmIFBJTyBDb25maWd1cmF0aW9uIFB1bGx1cCBTdGF0dXMgaXMgU2V0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIGludCBBVDkxRl9QSU9fSXNDZmdQdWxsdXBTdGF0dXNTZXQoIEFUOTFQU19QSU8gcFBpbywgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19Jc0NmZ1B1bGx1cFN0YXR1c1NldA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBQSU8gQ29uZmlndXJhdGlvbiBQdWxsdXAgU3RhdHVzIGlzIFNldA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfUElPX0lzQ2ZnUHVsbHVwU3RhdHVzU2V0KA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQogew0KLSAgICByZXR1cm4oIH5BVDkxRl9QSU9fR2V0Q2ZnUHVsbHVwKCBwUGlvICkgJiBmbGFnICk7DQorICAgICAgICByZXR1cm4gKH5BVDkxRl9QSU9fR2V0Q2ZnUHVsbHVwKHBQaW8pICYgZmxhZyk7DQogfQ0KIA0KIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotKiAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgVFdJDQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9UV0lfRW5hYmxlSXQgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBUV0kgSVQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9UV0lfRW5hYmxlSXQoIEFUOTFQU19UV0kgcFRXSSwgICAgLyogXGFyZyBwb2ludGVyIHRvIGEgVFdJIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnIElUIHRvIGJlIGVuYWJsZWQgKi8NCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBUV0kNCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RXSV9FbmFibGVJdA0KKy8vKiBcYnJpZWYgRW5hYmxlIFRXSSBJVA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1RXSV9FbmFibGVJdCAoDQorCUFUOTFQU19UV0kgcFRXSSwgLy8gXGFyZyBwb2ludGVyIHRvIGEgVFdJIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpICAgLy8gXGFyZyBJVCB0byBiZSBlbmFibGVkDQogew0KLSAgICAvKiogV3JpdGUgdG8gdGhlIElFUiByZWdpc3RlciAqLw0KLSAgICBwVFdJLT5UV0lfSUVSID0gZmxhZzsNCisJLy8qIFdyaXRlIHRvIHRoZSBJRVIgcmVnaXN0ZXINCisJcFRXSS0+VFdJX0lFUiA9IGZsYWc7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1RXSV9EaXNhYmxlSXQgKi8NCi0vKiogXGJyaWVmIERpc2FibGUgVFdJIElUICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVFdJX0Rpc2FibGVJdCggQVQ5MVBTX1RXSSBwVFdJLCAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBUV0kgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnIElUIHRvIGJlIGRpc2FibGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVFdJX0Rpc2FibGVJdA0KKy8vKiBcYnJpZWYgRGlzYWJsZSBUV0kgSVQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UV0lfRGlzYWJsZUl0ICgNCisJQVQ5MVBTX1RXSSBwVFdJLCAvLyBcYXJnIHBvaW50ZXIgdG8gYSBUV0kgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgICAvLyBcYXJnIElUIHRvIGJlIGRpc2FibGVkDQogew0KLSAgICAvKiogV3JpdGUgdG8gdGhlIElEUiByZWdpc3RlciAqLw0KLSAgICBwVFdJLT5UV0lfSURSID0gZmxhZzsNCisJLy8qIFdyaXRlIHRvIHRoZSBJRFIgcmVnaXN0ZXINCisJcFRXSS0+VFdJX0lEUiA9IGZsYWc7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1RXSV9Db25maWd1cmUgKi8NCi0vKiogXGJyaWVmIENvbmZpZ3VyZSBUV0kgaW4gbWFzdGVyIG1vZGUgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9UV0lfQ29uZmlndXJlKCBBVDkxUFNfVFdJIHBUV0kgKSAvKiBcYXJnIHBvaW50ZXIgdG8gYSBUV0kgY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RXSV9Db25maWd1cmUNCisvLyogXGJyaWVmIENvbmZpZ3VyZSBUV0kgaW4gbWFzdGVyIG1vZGUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UV0lfQ29uZmlndXJlICggQVQ5MVBTX1RXSSBwVFdJICkgICAgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVFdJIGNvbnRyb2xsZXINCiB7DQotICAgIC8qKiBEaXNhYmxlIGludGVycnVwdHMgKi8NCi0gICAgcFRXSS0+VFdJX0lEUiA9ICggdW5zaWduZWQgaW50ICkgLTE7DQorICAgIC8vKiBEaXNhYmxlIGludGVycnVwdHMNCisJcFRXSS0+VFdJX0lEUiA9ICh1bnNpZ25lZCBpbnQpIC0xOw0KIA0KLSAgICAvKiogUmVzZXQgcGVyaXBoZXJhbCAqLw0KLSAgICBwVFdJLT5UV0lfQ1IgPSBBVDkxQ19UV0lfU1dSU1Q7DQorICAgIC8vKiBSZXNldCBwZXJpcGhlcmFsDQorCXBUV0ktPlRXSV9DUiA9IEFUOTFDX1RXSV9TV1JTVDsNCiANCi0gICAgLyoqIFNldCBNYXN0ZXIgbW9kZSAqLw0KLSAgICBwVFdJLT5UV0lfQ1IgPSBBVDkxQ19UV0lfTVNFTiB8IEFUOTFDX1RXSV9TVkRJUzsNCisJLy8qIFNldCBNYXN0ZXIgbW9kZQ0KKwlwVFdJLT5UV0lfQ1IgPSBBVDkxQ19UV0lfTVNFTiB8IEFUOTFDX1RXSV9TVkRJUzsNCisNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVFdJX0dldEludGVycnVwdE1hc2tTdGF0dXMgKi8NCi0vKiogXGJyaWVmIFJldHVybiBUV0kgSW50ZXJydXB0IE1hc2sgU3RhdHVzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9UV0lfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLyogXHJldHVybiBUV0kgSW50ZXJydXB0IE1hc2sgU3RhdHVzICovDQotICAgIEFUOTFQU19UV0kgcFR3aSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgVFdJIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UV0lfR2V0SW50ZXJydXB0TWFza1N0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFRXSSBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1RXSV9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCAvLyBccmV0dXJuIFRXSSBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisgICAgICAgIEFUOTFQU19UV0kgcFR3aSkgLy8gXGFyZyAgcG9pbnRlciB0byBhIFRXSSBjb250cm9sbGVyDQogew0KLSAgICByZXR1cm4gcFR3aS0+VFdJX0lNUjsNCisgICAgICAgIHJldHVybiBwVHdpLT5UV0lfSU1SOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9UV0lfSXNJbnRlcnJ1cHRNYXNrZWQgKi8NCi0vKiogXGJyaWVmIFRlc3QgaWYgVFdJIEludGVycnVwdCBpcyBNYXNrZWQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgaW50IEFUOTFGX1RXSV9Jc0ludGVycnVwdE1hc2tlZCggQVQ5MVBTX1RXSSBwVHdpLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgVFdJIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVFdJX0lzSW50ZXJydXB0TWFza2VkDQorLy8qIFxicmllZiBUZXN0IGlmIFRXSSBJbnRlcnJ1cHQgaXMgTWFza2VkIA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfVFdJX0lzSW50ZXJydXB0TWFza2VkKA0KKyAgICAgICAgQVQ5MVBTX1RXSSBwVHdpLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBUV0kgY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQogew0KLSAgICByZXR1cm4oIEFUOTFGX1RXSV9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCBwVHdpICkgJiBmbGFnICk7DQorICAgICAgICByZXR1cm4gKEFUOTFGX1RXSV9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKHBUd2kpICYgZmxhZyk7DQogfQ0KIA0KIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotKiAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgVVNBUlQNCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VTX0JhdWRyYXRlICovDQotLyoqIFxicmllZiBDYWxjdWxhdGUgdGhlIGJhdWRyYXRlICovDQotLyoqIFN0YW5kYXJkIEFzeW5jaHJvbm91cyBNb2RlIDogOCBiaXRzICwgMSBzdG9wICwgbm8gcGFyaXR5ICovDQotI2RlZmluZSBBVDkxQ19VU19BU1lOQ19NT0RFICAgIFwNCi0gICAgKCBBVDkxQ19VU19VU01PREVfTk9STUFMICsgXA0KLSAgICAgIEFUOTFDX1VTX05CU1RPUF8xX0JJVCArICBcDQotICAgICAgQVQ5MUNfVVNfUEFSX05PTkUgKyAgICAgIFwNCi0gICAgICBBVDkxQ19VU19DSFJMXzhfQklUUyArICAgXA0KLSAgICAgIEFUOTFDX1VTX0NMS1NfQ0xPQ0sgKQ0KKyAgICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFVTQVJUDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19CYXVkcmF0ZQ0KKy8vKiBcYnJpZWYgQ2FsY3VsYXRlIHRoZSBiYXVkcmF0ZQ0KKy8vKiBTdGFuZGFyZCBBc3luY2hyb25vdXMgTW9kZSA6IDggYml0cyAsIDEgc3RvcCAsIG5vIHBhcml0eQ0KKyNkZWZpbmUgQVQ5MUNfVVNfQVNZTkNfTU9ERSAoIEFUOTFDX1VTX1VTTU9ERV9OT1JNQUwgKyBcDQorICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfTkJTVE9QXzFfQklUICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX1BBUl9OT05FICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX0NIUkxfOF9CSVRTICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX0NMS1NfQ0xPQ0sgKQ0KIA0KLS8qKiBTdGFuZGFyZCBFeHRlcm5hbCBBc3luY2hyb25vdXMgTW9kZSA6IDggYml0cyAsIDEgc3RvcCAsIG5vIHBhcml0eSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfQVNZTkNfU0NLX01PREUgXA0KLSAgICAoIEFUOTFDX1VTX1VTTU9ERV9OT1JNQUwgKyAgXA0KLSAgICAgIEFUOTFDX1VTX05CU1RPUF8xX0JJVCArICAgXA0KLSAgICAgIEFUOTFDX1VTX1BBUl9OT05FICsgICAgICAgXA0KLSAgICAgIEFUOTFDX1VTX0NIUkxfOF9CSVRTICsgICAgXA0KLSAgICAgIEFUOTFDX1VTX0NMS1NfRVhUICkNCisvLyogU3RhbmRhcmQgRXh0ZXJuYWwgQXN5bmNocm9ub3VzIE1vZGUgOiA4IGJpdHMgLCAxIHN0b3AgLCBubyBwYXJpdHkNCisjZGVmaW5lIEFUOTFDX1VTX0FTWU5DX1NDS19NT0RFICggQVQ5MUNfVVNfVVNNT0RFX05PUk1BTCArIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfTkJTVE9QXzFfQklUICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19QQVJfTk9ORSArIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfQ0hSTF84X0JJVFMgKyBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX0NMS1NfRVhUICkNCiANCi0vKiogU3RhbmRhcmQgU3luY2hyb25vdXMgTW9kZSA6IDggYml0cyAsIDEgc3RvcCAsIG5vIHBhcml0eSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfU1lOQ19NT0RFICAgICBcDQotICAgICggQVQ5MUNfVVNfU1lOQyArICAgICAgICAgIFwNCi0gICAgICBBVDkxQ19VU19VU01PREVfTk9STUFMICsgXA0KLSAgICAgIEFUOTFDX1VTX05CU1RPUF8xX0JJVCArICBcDQotICAgICAgQVQ5MUNfVVNfUEFSX05PTkUgKyAgICAgIFwNCi0gICAgICBBVDkxQ19VU19DSFJMXzhfQklUUyArICAgXA0KLSAgICAgIEFUOTFDX1VTX0NMS1NfQ0xPQ0sgKQ0KKy8vKiBTdGFuZGFyZCBTeW5jaHJvbm91cyBNb2RlIDogOCBiaXRzICwgMSBzdG9wICwgbm8gcGFyaXR5DQorI2RlZmluZSBBVDkxQ19VU19TWU5DX01PREUgKCBBVDkxQ19VU19TWU5DICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfVVNNT0RFX05PUk1BTCArIFwNCisgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX05CU1RPUF8xX0JJVCArIFwNCisgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX1BBUl9OT05FICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfQ0hSTF84X0JJVFMgKyBcDQorICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19DTEtTX0NMT0NLICkNCiANCi0vKiogU0NLIHVzZWQgTGFiZWwgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX1NDS19VU0VEICAgICggQVQ5MUNfVVNfQ0tMTyB8IEFUOTFDX1VTX0NMS1NfRVhUICkNCisvLyogU0NLIHVzZWQgTGFiZWwNCisjZGVmaW5lIEFUOTFDX1VTX1NDS19VU0VEIChBVDkxQ19VU19DS0xPIHwgQVQ5MUNfVVNfQ0xLU19FWFQpDQogDQotLyoqIFN0YW5kYXJkIElTTyBUPTAgTW9kZSA6IDggYml0cyAsIDEgc3RvcCAsIHBhcml0eSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfSVNPX1JFQURFUl9NT0RFICBcDQotICAgICggQVQ5MUNfVVNfVVNNT0RFX0lTTzc4MTZfMCArIFwNCi0gICAgICBBVDkxQ19VU19DTEtTX0NMT0NLICsgICAgICAgXA0KLSAgICAgIEFUOTFDX1VTX05CU1RPUF8xX0JJVCArICAgICBcDQotICAgICAgQVQ5MUNfVVNfUEFSX0VWRU4gKyAgICAgICAgIFwNCi0gICAgICBBVDkxQ19VU19DSFJMXzhfQklUUyArICAgICAgXA0KLSAgICAgIEFUOTFDX1VTX0NLTE8gKyAgICAgICAgICAgICBcDQotICAgICAgQVQ5MUNfVVNfT1ZFUiApDQorLy8qIFN0YW5kYXJkIElTTyBUPTAgTW9kZSA6IDggYml0cyAsIDEgc3RvcCAsIHBhcml0eQ0KKyNkZWZpbmUgQVQ5MUNfVVNfSVNPX1JFQURFUl9NT0RFICggQVQ5MUNfVVNfVVNNT0RFX0lTTzc4MTZfMCArIFwNCisJCQkJCSAgIAkJIEFUOTFDX1VTX0NMS1NfQ0xPQ0sgK1wNCisgICAgICAgICAgICAgICAgICAgICAgIAkJIEFUOTFDX1VTX05CU1RPUF8xX0JJVCArIFwNCisgICAgICAgICAgICAgICAgICAgICAgIAkJIEFUOTFDX1VTX1BBUl9FVkVOICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgCQkgQVQ5MUNfVVNfQ0hSTF84X0JJVFMgKyBcDQorICAgICAgICAgICAgICAgICAgICAgICAJCSBBVDkxQ19VU19DS0xPICtcDQorICAgICAgICAgICAgICAgICAgICAgICAJCSBBVDkxQ19VU19PVkVSKQ0KIA0KLS8qKiBTdGFuZGFyZCBJUkRBIG1vZGUgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX0FTWU5DX0lSREFfTU9ERSBcDQotICAgICggQVQ5MUNfVVNfVVNNT0RFX0lSREEgKyAgICAgXA0KLSAgICAgIEFUOTFDX1VTX05CU1RPUF8xX0JJVCArICAgIFwNCi0gICAgICBBVDkxQ19VU19QQVJfTk9ORSArICAgICAgICBcDQotICAgICAgQVQ5MUNfVVNfQ0hSTF84X0JJVFMgKyAgICAgXA0KLSAgICAgIEFUOTFDX1VTX0NMS1NfQ0xPQ0sgKQ0KKy8vKiBTdGFuZGFyZCBJUkRBIG1vZGUNCisjZGVmaW5lIEFUOTFDX1VTX0FTWU5DX0lSREFfTU9ERSAoICBBVDkxQ19VU19VU01PREVfSVJEQSArIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfTkJTVE9QXzFfQklUICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19QQVJfTk9ORSArIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfQ0hSTF84X0JJVFMgKyBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX0NMS1NfQ0xPQ0sgKQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VTX0JhdWRyYXRlICovDQotLyoqIFxicmllZiBDYWx1Y3VsYXRlIGJhdWRfdmFsdWUgYWNjb3JkaW5nIHRvIHRoZSBtYWluIGNsb2NrIGFuZCB0aGUgYmF1ZCByYXRlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9VU19CYXVkcmF0ZSggY29uc3QgdW5zaWduZWQgaW50IG1haW5fY2xvY2ssIC8qIFxhcmcgcGVyaXBoZXJhbCBjbG9jayAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGJhdWRfcmF0ZSApIC8qIFxhcmcgVUFSVCBiYXVkcmF0ZSAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX0JhdWRyYXRlDQorLy8qIFxicmllZiBDYWx1Y3VsYXRlIGJhdWRfdmFsdWUgYWNjb3JkaW5nIHRvIHRoZSBtYWluIGNsb2NrIGFuZCB0aGUgYmF1ZCByYXRlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9VU19CYXVkcmF0ZSAoDQorCWNvbnN0IHVuc2lnbmVkIGludCBtYWluX2Nsb2NrLCAvLyBcYXJnIHBlcmlwaGVyYWwgY2xvY2sNCisJY29uc3QgdW5zaWduZWQgaW50IGJhdWRfcmF0ZSkgIC8vIFxhcmcgVUFSVCBiYXVkcmF0ZQ0KIHsNCi0gICAgdW5zaWduZWQgaW50IGJhdWRfdmFsdWUgPSAoICggbWFpbl9jbG9jayAqIDEwICkgLyAoIGJhdWRfcmF0ZSAqIDE2ICkgKTsNCi0NCi0gICAgaWYoICggYmF1ZF92YWx1ZSAlIDEwICkgPj0gNSApDQotICAgIHsNCi0gICAgICAgIGJhdWRfdmFsdWUgPSAoIGJhdWRfdmFsdWUgLyAxMCApICsgMTsNCi0gICAgfQ0KLSAgICBlbHNlDQotICAgIHsNCi0gICAgICAgIGJhdWRfdmFsdWUgLz0gMTA7DQotICAgIH0NCi0NCi0gICAgcmV0dXJuIGJhdWRfdmFsdWU7DQorCXVuc2lnbmVkIGludCBiYXVkX3ZhbHVlID0gKChtYWluX2Nsb2NrKjEwKS8oYmF1ZF9yYXRlICogMTYpKTsNCisJaWYgKChiYXVkX3ZhbHVlICUgMTApID49IDUpDQorCQliYXVkX3ZhbHVlID0gKGJhdWRfdmFsdWUgLyAxMCkgKyAxOw0KKwllbHNlDQorCQliYXVkX3ZhbHVlIC89IDEwOw0KKwlyZXR1cm4gYmF1ZF92YWx1ZTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVVNfU2V0QmF1ZHJhdGUgKi8NCi0vKiogXGJyaWVmIFNldCB0aGUgYmF1ZHJhdGUgYWNjb3JkaW5nIHRvIHRoZSBDUFUgY2xvY2sgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9VU19TZXRCYXVkcmF0ZSggQVQ5MVBTX1VTQVJUIHBVU0FSVCwgICAgLyogXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtYWluQ2xvY2ssIC8qIFxhcmcgcGVyaXBoZXJhbCBjbG9jayAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzcGVlZCApICAgIC8qIFxhcmcgVUFSVCBiYXVkcmF0ZSAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX1NldEJhdWRyYXRlDQorLy8qIFxicmllZiBTZXQgdGhlIGJhdWRyYXRlIGFjY29yZGluZyB0byB0aGUgQ1BVIGNsb2NrDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVVNfU2V0QmF1ZHJhdGUgKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJULCAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBtYWluQ2xvY2ssIC8vIFxhcmcgcGVyaXBoZXJhbCBjbG9jaw0KKwl1bnNpZ25lZCBpbnQgc3BlZWQpICAgICAvLyBcYXJnIFVBUlQgYmF1ZHJhdGUNCiB7DQotICAgIC8qKiBEZWZpbmUgdGhlIGJhdWQgcmF0ZSBkaXZpc29yIHJlZ2lzdGVyICovDQotICAgIHBVU0FSVC0+VVNfQlJHUiA9IEFUOTFGX1VTX0JhdWRyYXRlKCBtYWluQ2xvY2ssIHNwZWVkICk7DQorCS8vKiBEZWZpbmUgdGhlIGJhdWQgcmF0ZSBkaXZpc29yIHJlZ2lzdGVyDQorCXBVU0FSVC0+VVNfQlJHUiA9IEFUOTFGX1VTX0JhdWRyYXRlKG1haW5DbG9jaywgc3BlZWQpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9VU19TZXRUaW1lZ3VhcmQgKi8NCi0vKiogXGJyaWVmIFNldCBVU0FSVCB0aW1lZ3VhcmQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9VU19TZXRUaW1lZ3VhcmQoIEFUOTFQU19VU0FSVCBwVVNBUlQsICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB0aW1lZ3VhcmQgKSAvKiBcYXJnIHRpbWVndWFyZCB2YWx1ZSAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX1NldFRpbWVndWFyZA0KKy8vKiBcYnJpZWYgU2V0IFVTQVJUIHRpbWVndWFyZA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VTX1NldFRpbWVndWFyZCAoDQorCUFUOTFQU19VU0FSVCBwVVNBUlQsICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IHRpbWVndWFyZCkgLy8gXGFyZyB0aW1lZ3VhcmQgdmFsdWUNCiB7DQotICAgIC8qKiBXcml0ZSB0aGUgVGltZWd1YXJkIFJlZ2lzdGVyICovDQotICAgIHBVU0FSVC0+VVNfVFRHUiA9IHRpbWVndWFyZDsNCisJLy8qIFdyaXRlIHRoZSBUaW1lZ3VhcmQgUmVnaXN0ZXINCisJcFVTQVJULT5VU19UVEdSID0gdGltZWd1YXJkIDsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVVNfRW5hYmxlSXQgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBVU0FSVCBJVCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1VTX0VuYWJsZUl0KCBBVDkxUFNfVVNBUlQgcFVTQVJULCAvKiBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAgLyogXGFyZyBJVCB0byBiZSBlbmFibGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfRW5hYmxlSXQNCisvLyogXGJyaWVmIEVuYWJsZSBVU0FSVCBJVA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VTX0VuYWJsZUl0ICgNCisJQVQ5MVBTX1VTQVJUIHBVU0FSVCwgLy8gXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgICAvLyBcYXJnIElUIHRvIGJlIGVuYWJsZWQNCiB7DQotICAgIC8qKiBXcml0ZSB0byB0aGUgSUVSIHJlZ2lzdGVyICovDQotICAgIHBVU0FSVC0+VVNfSUVSID0gZmxhZzsNCisJLy8qIFdyaXRlIHRvIHRoZSBJRVIgcmVnaXN0ZXINCisJcFVTQVJULT5VU19JRVIgPSBmbGFnOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9VU19EaXNhYmxlSXQgKi8NCi0vKiogXGJyaWVmIERpc2FibGUgVVNBUlQgSVQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9VU19EaXNhYmxlSXQoIEFUOTFQU19VU0FSVCBwVVNBUlQsIC8qIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAgLyogXGFyZyBJVCB0byBiZSBkaXNhYmxlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX0Rpc2FibGVJdA0KKy8vKiBcYnJpZWYgRGlzYWJsZSBVU0FSVCBJVA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VTX0Rpc2FibGVJdCAoDQorCUFUOTFQU19VU0FSVCBwVVNBUlQsIC8vIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpICAgLy8gXGFyZyBJVCB0byBiZSBkaXNhYmxlZA0KIHsNCi0gICAgLyoqIFdyaXRlIHRvIHRoZSBJRVIgcmVnaXN0ZXIgKi8NCi0gICAgcFVTQVJULT5VU19JRFIgPSBmbGFnOw0KKwkvLyogV3JpdGUgdG8gdGhlIElFUiByZWdpc3Rlcg0KKwlwVVNBUlQtPlVTX0lEUiA9IGZsYWc7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VTX0NvbmZpZ3VyZSAqLw0KLS8qKiBcYnJpZWYgQ29uZmlndXJlIFVTQVJUICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVVNfQ29uZmlndXJlKCBBVDkxUFNfVVNBUlQgcFVTQVJULCAgICAgLyogXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbWFpbkNsb2NrLCAgLyogXGFyZyBwZXJpcGhlcmFsIGNsb2NrICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtb2RlLCAgICAgICAvKiBcYXJnIG1vZGUgUmVnaXN0ZXIgdG8gYmUgcHJvZ3JhbW1lZCAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYmF1ZFJhdGUsICAgLyogXGFyZyBiYXVkcmF0ZSB0byBiZSBwcm9ncmFtbWVkICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB0aW1lZ3VhcmQgKSAvKiBcYXJnIHRpbWVndWFyZCB0byBiZSBwcm9ncmFtbWVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfQ29uZmlndXJlDQorLy8qIFxicmllZiBDb25maWd1cmUgVVNBUlQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VU19Db25maWd1cmUgKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJULCAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgbWFpbkNsb2NrLCAgLy8gXGFyZyBwZXJpcGhlcmFsIGNsb2NrDQorCXVuc2lnbmVkIGludCBtb2RlICwgICAgICAvLyBcYXJnIG1vZGUgUmVnaXN0ZXIgdG8gYmUgcHJvZ3JhbW1lZA0KKwl1bnNpZ25lZCBpbnQgYmF1ZFJhdGUgLCAgLy8gXGFyZyBiYXVkcmF0ZSB0byBiZSBwcm9ncmFtbWVkDQorCXVuc2lnbmVkIGludCB0aW1lZ3VhcmQgKSAvLyBcYXJnIHRpbWVndWFyZCB0byBiZSBwcm9ncmFtbWVkDQogew0KLSAgICAvKiogRGlzYWJsZSBpbnRlcnJ1cHRzICovDQotICAgIHBVU0FSVC0+VVNfSURSID0gKCB1bnNpZ25lZCBpbnQgKSAtMTsNCisgICAgLy8qIERpc2FibGUgaW50ZXJydXB0cw0KKyAgICBwVVNBUlQtPlVTX0lEUiA9ICh1bnNpZ25lZCBpbnQpIC0xOw0KIA0KLSAgICAvKiogUmVzZXQgcmVjZWl2ZXIgYW5kIHRyYW5zbWl0dGVyICovDQotICAgIHBVU0FSVC0+VVNfQ1IgPSBBVDkxQ19VU19SU1RSWCB8IEFUOTFDX1VTX1JTVFRYIHwgQVQ5MUNfVVNfUlhESVMgfCBBVDkxQ19VU19UWERJUzsNCisgICAgLy8qIFJlc2V0IHJlY2VpdmVyIGFuZCB0cmFuc21pdHRlcg0KKyAgICBwVVNBUlQtPlVTX0NSID0gQVQ5MUNfVVNfUlNUUlggfCBBVDkxQ19VU19SU1RUWCB8IEFUOTFDX1VTX1JYRElTIHwgQVQ5MUNfVVNfVFhESVMgOw0KIA0KLSAgICAvKiogRGVmaW5lIHRoZSBiYXVkIHJhdGUgZGl2aXNvciByZWdpc3RlciAqLw0KLSAgICBBVDkxRl9VU19TZXRCYXVkcmF0ZSggcFVTQVJULCBtYWluQ2xvY2ssIGJhdWRSYXRlICk7DQorCS8vKiBEZWZpbmUgdGhlIGJhdWQgcmF0ZSBkaXZpc29yIHJlZ2lzdGVyDQorCUFUOTFGX1VTX1NldEJhdWRyYXRlKHBVU0FSVCwgbWFpbkNsb2NrLCBiYXVkUmF0ZSk7DQogDQotICAgIC8qKiBXcml0ZSB0aGUgVGltZWd1YXJkIFJlZ2lzdGVyICovDQotICAgIEFUOTFGX1VTX1NldFRpbWVndWFyZCggcFVTQVJULCB0aW1lZ3VhcmQgKTsNCisJLy8qIFdyaXRlIHRoZSBUaW1lZ3VhcmQgUmVnaXN0ZXINCisJQVQ5MUZfVVNfU2V0VGltZWd1YXJkKHBVU0FSVCwgdGltZWd1YXJkKTsNCiANCi0gICAgLyoqIENsZWFyIFRyYW5zbWl0IGFuZCBSZWNlaXZlIENvdW50ZXJzICovDQotICAgIEFUOTFGX1BEQ19PcGVuKCAoIEFUOTFQU19QREMgKSAmKCBwVVNBUlQtPlVTX1JQUiApICk7DQorICAgIC8vKiBDbGVhciBUcmFuc21pdCBhbmQgUmVjZWl2ZSBDb3VudGVycw0KKyAgICBBVDkxRl9QRENfT3BlbigoQVQ5MVBTX1BEQykgJihwVVNBUlQtPlVTX1JQUikpOw0KIA0KLSAgICAvKiogRGVmaW5lIHRoZSBVU0FSVCBtb2RlICovDQotICAgIHBVU0FSVC0+VVNfTVIgPSBtb2RlOw0KKyAgICAvLyogRGVmaW5lIHRoZSBVU0FSVCBtb2RlDQorICAgIHBVU0FSVC0+VVNfTVIgPSBtb2RlICA7DQorDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VTX0VuYWJsZVJ4ICovDQotLyoqIFxicmllZiBFbmFibGUgcmVjZWl2aW5nIGNoYXJhY3RlcnMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9VU19FbmFibGVSeCggQVQ5MVBTX1VTQVJUIHBVU0FSVCApIC8qIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19FbmFibGVSeA0KKy8vKiBcYnJpZWYgRW5hYmxlIHJlY2VpdmluZyBjaGFyYWN0ZXJzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVVNfRW5hYmxlUnggKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJUKSAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlcg0KIHsNCi0gICAgLyoqIEVuYWJsZSByZWNlaXZlciAqLw0KKyAgICAvLyogRW5hYmxlIHJlY2VpdmVyDQogICAgIHBVU0FSVC0+VVNfQ1IgPSBBVDkxQ19VU19SWEVOOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9VU19FbmFibGVUeCAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIHNlbmRpbmcgY2hhcmFjdGVycyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1VTX0VuYWJsZVR4KCBBVDkxUFNfVVNBUlQgcFVTQVJUICkgLyogXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX0VuYWJsZVR4DQorLy8qIFxicmllZiBFbmFibGUgc2VuZGluZyBjaGFyYWN0ZXJzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVVNfRW5hYmxlVHggKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJUKSAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlcg0KIHsNCi0gICAgLyoqIEVuYWJsZSAgdHJhbnNtaXR0ZXIgKi8NCisgICAgLy8qIEVuYWJsZSAgdHJhbnNtaXR0ZXINCiAgICAgcFVTQVJULT5VU19DUiA9IEFUOTFDX1VTX1RYRU47DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VTX1Jlc2V0UnggKi8NCi0vKiogXGJyaWVmIFJlc2V0IFJlY2VpdmVyIGFuZCByZS1lbmFibGUgaXQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9VU19SZXNldFJ4KCBBVDkxUFNfVVNBUlQgcFVTQVJUICkgLyogXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX1Jlc2V0UngNCisvLyogXGJyaWVmIFJlc2V0IFJlY2VpdmVyIGFuZCByZS1lbmFibGUgaXQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VU19SZXNldFJ4ICgNCisJQVQ5MVBTX1VTQVJUIHBVU0FSVCkgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXINCiB7DQotICAgIC8qKiBSZXNldCByZWNlaXZlciAqLw0KLSAgICBwVVNBUlQtPlVTX0NSID0gQVQ5MUNfVVNfUlNUUlg7DQotICAgIC8qKiBSZS1FbmFibGUgcmVjZWl2ZXIgKi8NCisJLy8qIFJlc2V0IHJlY2VpdmVyDQorCXBVU0FSVC0+VVNfQ1IgPSBBVDkxQ19VU19SU1RSWDsNCisgICAgLy8qIFJlLUVuYWJsZSByZWNlaXZlcg0KICAgICBwVVNBUlQtPlVTX0NSID0gQVQ5MUNfVVNfUlhFTjsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVVNfUmVzZXRUeCAqLw0KLS8qKiBcYnJpZWYgUmVzZXQgVHJhbnNtaXR0ZXIgYW5kIHJlLWVuYWJsZSBpdCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1VTX1Jlc2V0VHgoIEFUOTFQU19VU0FSVCBwVVNBUlQgKSAvKiBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfUmVzZXRUeA0KKy8vKiBcYnJpZWYgUmVzZXQgVHJhbnNtaXR0ZXIgYW5kIHJlLWVuYWJsZSBpdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VTX1Jlc2V0VHggKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJUKSAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlcg0KIHsNCi0gICAgLyoqIFJlc2V0IHRyYW5zbWl0dGVyICovDQotICAgIHBVU0FSVC0+VVNfQ1IgPSBBVDkxQ19VU19SU1RUWDsNCi0gICAgLyoqIEVuYWJsZSB0cmFuc21pdHRlciAqLw0KKwkvLyogUmVzZXQgdHJhbnNtaXR0ZXINCisJcFVTQVJULT5VU19DUiA9IEFUOTFDX1VTX1JTVFRYOw0KKyAgICAvLyogRW5hYmxlIHRyYW5zbWl0dGVyDQogICAgIHBVU0FSVC0+VVNfQ1IgPSBBVDkxQ19VU19UWEVOOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9VU19EaXNhYmxlUnggKi8NCi0vKiogXGJyaWVmIERpc2FibGUgUmVjZWl2ZXIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9VU19EaXNhYmxlUngoIEFUOTFQU19VU0FSVCBwVVNBUlQgKSAvKiBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfRGlzYWJsZVJ4DQorLy8qIFxicmllZiBEaXNhYmxlIFJlY2VpdmVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVVNfRGlzYWJsZVJ4ICgNCisJQVQ5MVBTX1VTQVJUIHBVU0FSVCkgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXINCiB7DQotICAgIC8qKiBEaXNhYmxlIHJlY2VpdmVyICovDQorICAgIC8vKiBEaXNhYmxlIHJlY2VpdmVyDQogICAgIHBVU0FSVC0+VVNfQ1IgPSBBVDkxQ19VU19SWERJUzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVVNfRGlzYWJsZVR4ICovDQotLyoqIFxicmllZiBEaXNhYmxlIFRyYW5zbWl0dGVyICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVVNfRGlzYWJsZVR4KCBBVDkxUFNfVVNBUlQgcFVTQVJUICkgLyogXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX0Rpc2FibGVUeA0KKy8vKiBcYnJpZWYgRGlzYWJsZSBUcmFuc21pdHRlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VTX0Rpc2FibGVUeCAoDQorCUFUOTFQU19VU0FSVCBwVVNBUlQpICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyDQogew0KLSAgICAvKiogRGlzYWJsZSB0cmFuc21pdHRlciAqLw0KKyAgICAvLyogRGlzYWJsZSB0cmFuc21pdHRlcg0KICAgICBwVVNBUlQtPlVTX0NSID0gQVQ5MUNfVVNfVFhESVM7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VTX0Nsb3NlICovDQotLyoqIFxicmllZiBDbG9zZSBVU0FSVDogZGlzYWJsZSBJVCBkaXNhYmxlIHJlY2VpdmVyIGFuZCB0cmFuc21pdHRlciwgY2xvc2UgUERDICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVVNfQ2xvc2UoIEFUOTFQU19VU0FSVCBwVVNBUlQgKSAvKiBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfQ2xvc2UNCisvLyogXGJyaWVmIENsb3NlIFVTQVJUOiBkaXNhYmxlIElUIGRpc2FibGUgcmVjZWl2ZXIgYW5kIHRyYW5zbWl0dGVyLCBjbG9zZSBQREMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VU19DbG9zZSAoDQorCUFUOTFQU19VU0FSVCBwVVNBUlQpICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyDQogew0KLSAgICAvKiogUmVzZXQgdGhlIGJhdWQgcmF0ZSBkaXZpc29yIHJlZ2lzdGVyICovDQotICAgIHBVU0FSVC0+VVNfQlJHUiA9IDA7DQorICAgIC8vKiBSZXNldCB0aGUgYmF1ZCByYXRlIGRpdmlzb3IgcmVnaXN0ZXINCisgICAgcFVTQVJULT5VU19CUkdSID0gMCA7DQogDQotICAgIC8qKiBSZXNldCB0aGUgVVNBUlQgbW9kZSAqLw0KLSAgICBwVVNBUlQtPlVTX01SID0gMDsNCisgICAgLy8qIFJlc2V0IHRoZSBVU0FSVCBtb2RlDQorICAgIHBVU0FSVC0+VVNfTVIgPSAwICA7DQogDQotICAgIC8qKiBSZXNldCB0aGUgVGltZWd1YXJkIFJlZ2lzdGVyICovDQorICAgIC8vKiBSZXNldCB0aGUgVGltZWd1YXJkIFJlZ2lzdGVyDQogICAgIHBVU0FSVC0+VVNfVFRHUiA9IDA7DQogDQotICAgIC8qKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICovDQotICAgIHBVU0FSVC0+VVNfSURSID0gMHhGRkZGRkZGRjsNCisgICAgLy8qIERpc2FibGUgYWxsIGludGVycnVwdHMNCisgICAgcFVTQVJULT5VU19JRFIgPSAweEZGRkZGRkZGIDsNCiANCi0gICAgLyoqIEFib3J0IHRoZSBQZXJpcGhlcmFsIERhdGEgVHJhbnNmZXJzICovDQotICAgIEFUOTFGX1BEQ19DbG9zZSggKCBBVDkxUFNfUERDICkgJiggcFVTQVJULT5VU19SUFIgKSApOw0KKyAgICAvLyogQWJvcnQgdGhlIFBlcmlwaGVyYWwgRGF0YSBUcmFuc2ZlcnMNCisgICAgQVQ5MUZfUERDX0Nsb3NlKChBVDkxUFNfUERDKSAmKHBVU0FSVC0+VVNfUlBSKSk7DQogDQotICAgIC8qKiBEaXNhYmxlIHJlY2VpdmVyIGFuZCB0cmFuc21pdHRlciBhbmQgc3RvcCBhbnkgYWN0aXZpdHkgaW1tZWRpYXRlbHkgKi8NCi0gICAgcFVTQVJULT5VU19DUiA9IEFUOTFDX1VTX1RYRElTIHwgQVQ5MUNfVVNfUlhESVMgfCBBVDkxQ19VU19SU1RUWCB8IEFUOTFDX1VTX1JTVFJYOw0KKyAgICAvLyogRGlzYWJsZSByZWNlaXZlciBhbmQgdHJhbnNtaXR0ZXIgYW5kIHN0b3AgYW55IGFjdGl2aXR5IGltbWVkaWF0ZWx5DQorICAgIHBVU0FSVC0+VVNfQ1IgPSBBVDkxQ19VU19UWERJUyB8IEFUOTFDX1VTX1JYRElTIHwgQVQ5MUNfVVNfUlNUVFggfCBBVDkxQ19VU19SU1RSWCA7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VTX1R4UmVhZHkgKi8NCi0vKiogXGJyaWVmIFJldHVybiAxIGlmIGEgY2hhcmFjdGVyIGNhbiBiZSB3cml0dGVuIGluIFVTX1RIUiAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVVNfVHhSZWFkeSggQVQ5MVBTX1VTQVJUIHBVU0FSVCApIC8qIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19UeFJlYWR5DQorLy8qIFxicmllZiBSZXR1cm4gMSBpZiBhIGNoYXJhY3RlciBjYW4gYmUgd3JpdHRlbiBpbiBVU19USFINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1VTX1R4UmVhZHkgKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJUICkgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXINCiB7DQotICAgIHJldHVybiggcFVTQVJULT5VU19DU1IgJiBBVDkxQ19VU19UWFJEWSApOw0KKyAgICByZXR1cm4gKHBVU0FSVC0+VVNfQ1NSICYgQVQ5MUNfVVNfVFhSRFkpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9VU19SeFJlYWR5ICovDQotLyoqIFxicmllZiBSZXR1cm4gMSBpZiBhIGNoYXJhY3RlciBjYW4gYmUgcmVhZCBpbiBVU19SSFIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1VTX1J4UmVhZHkoIEFUOTFQU19VU0FSVCBwVVNBUlQgKSAvKiBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfUnhSZWFkeQ0KKy8vKiBcYnJpZWYgUmV0dXJuIDEgaWYgYSBjaGFyYWN0ZXIgY2FuIGJlIHJlYWQgaW4gVVNfUkhSDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9VU19SeFJlYWR5ICgNCisJQVQ5MVBTX1VTQVJUIHBVU0FSVCApICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyDQogew0KLSAgICByZXR1cm4oIHBVU0FSVC0+VVNfQ1NSICYgQVQ5MUNfVVNfUlhSRFkgKTsNCisgICAgcmV0dXJuIChwVVNBUlQtPlVTX0NTUiAmIEFUOTFDX1VTX1JYUkRZKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVVNfRXJyb3IgKi8NCi0vKiogXGJyaWVmIFJldHVybiB0aGUgZXJyb3IgZmxhZyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVVNfRXJyb3IoIEFUOTFQU19VU0FSVCBwVVNBUlQgKSAvKiBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfRXJyb3INCisvLyogXGJyaWVmIFJldHVybiB0aGUgZXJyb3IgZmxhZw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVVNfRXJyb3IgKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJUICkgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXINCiB7DQotICAgIHJldHVybiggcFVTQVJULT5VU19DU1IgJg0KLSAgICAgICAgICAgICggQVQ5MUNfVVNfT1ZSRSB8ICAgIC8qIE92ZXJydW4gZXJyb3IgKi8NCi0gICAgICAgICAgICAgIEFUOTFDX1VTX0ZSQU1FIHwgICAvKiBGcmFtaW5nIGVycm9yICovDQotICAgICAgICAgICAgICBBVDkxQ19VU19QQVJFICkgKTsgLyogUGFyaXR5IGVycm9yICovDQorICAgIHJldHVybiAocFVTQVJULT5VU19DU1IgJg0KKyAgICAJKEFUOTFDX1VTX09WUkUgfCAgLy8gT3ZlcnJ1biBlcnJvcg0KKyAgICAJIEFUOTFDX1VTX0ZSQU1FIHwgLy8gRnJhbWluZyBlcnJvcg0KKyAgICAJIEFUOTFDX1VTX1BBUkUpKTsgIC8vIFBhcml0eSBlcnJvcg0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9VU19QdXRDaGFyICovDQotLyoqIFxicmllZiBTZW5kIGEgY2hhcmFjdGVyLGRvZXMgbm90IGNoZWNrIGlmIHJlYWR5IHRvIHNlbmQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9VU19QdXRDaGFyKCBBVDkxUFNfVVNBUlQgcFVTQVJULA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNoYXJhY3RlciApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfUHV0Q2hhcg0KKy8vKiBcYnJpZWYgU2VuZCBhIGNoYXJhY3Rlcixkb2VzIG5vdCBjaGVjayBpZiByZWFkeSB0byBzZW5kDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVVNfUHV0Q2hhciAoDQorCUFUOTFQU19VU0FSVCBwVVNBUlQsDQorCWludCBjaGFyYWN0ZXIgKQ0KIHsNCi0gICAgcFVTQVJULT5VU19USFIgPSAoIGNoYXJhY3RlciAmIDB4MUZGICk7DQorICAgIHBVU0FSVC0+VVNfVEhSID0gKGNoYXJhY3RlciAmIDB4MUZGKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVVNfR2V0Q2hhciAqLw0KLS8qKiBcYnJpZWYgUmVjZWl2ZSBhIGNoYXJhY3Rlcixkb2VzIG5vdCBjaGVjayBpZiBhIGNoYXJhY3RlciBpcyBhdmFpbGFibGUgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgaW50IEFUOTFGX1VTX0dldENoYXIoIGNvbnN0IEFUOTFQU19VU0FSVCBwVVNBUlQgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX0dldENoYXINCisvLyogXGJyaWVmIFJlY2VpdmUgYSBjaGFyYWN0ZXIsZG9lcyBub3QgY2hlY2sgaWYgYSBjaGFyYWN0ZXIgaXMgYXZhaWxhYmxlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9VU19HZXRDaGFyICgNCisJY29uc3QgQVQ5MVBTX1VTQVJUIHBVU0FSVCkNCiB7DQotICAgIHJldHVybiggKCBwVVNBUlQtPlVTX1JIUiApICYgMHgxRkYgKTsNCisgICAgcmV0dXJuKChwVVNBUlQtPlVTX1JIUikgJiAweDFGRik7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VTX1NlbmRGcmFtZSAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIDIgaWYgUERDIGhhcyBiZWVuIGluaXRpYWxpemVkIHdpdGggQnVmZmVyIGFuZCBOZXh0IEJ1ZmZlciwgMSBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6YWVkIHdpdGggTmV4dCBCdWZmZXIsIDAgaWYgUERDIGlzIGJ1c3kgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1VTX1NlbmRGcmFtZSggQVQ5MVBTX1VTQVJUIHBVU0FSVCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICogcEJ1ZmZlciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3pCdWZmZXIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqIHBOZXh0QnVmZmVyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzek5leHRCdWZmZXIgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX1NlbmRGcmFtZQ0KKy8vKiBcYnJpZWYgUmV0dXJuIDIgaWYgUERDIGhhcyBiZWVuIGluaXRpYWxpemVkIHdpdGggQnVmZmVyIGFuZCBOZXh0IEJ1ZmZlciwgMSBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6YWVkIHdpdGggTmV4dCBCdWZmZXIsIDAgaWYgUERDIGlzIGJ1c3kNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1VTX1NlbmRGcmFtZSgNCisJQVQ5MVBTX1VTQVJUIHBVU0FSVCwNCisJY2hhciAqcEJ1ZmZlciwNCisJdW5zaWduZWQgaW50IHN6QnVmZmVyLA0KKwljaGFyICpwTmV4dEJ1ZmZlciwNCisJdW5zaWduZWQgaW50IHN6TmV4dEJ1ZmZlciApDQogew0KLSAgICByZXR1cm4gQVQ5MUZfUERDX1NlbmRGcmFtZSgNCi0gICAgICAgICggQVQ5MVBTX1BEQyApICYoIHBVU0FSVC0+VVNfUlBSICksDQotICAgICAgICBwQnVmZmVyLA0KLSAgICAgICAgc3pCdWZmZXIsDQotICAgICAgICBwTmV4dEJ1ZmZlciwNCi0gICAgICAgIHN6TmV4dEJ1ZmZlciApOw0KKwlyZXR1cm4gQVQ5MUZfUERDX1NlbmRGcmFtZSgNCisJCShBVDkxUFNfUERDKSAmKHBVU0FSVC0+VVNfUlBSKSwNCisJCXBCdWZmZXIsDQorCQlzekJ1ZmZlciwNCisJCXBOZXh0QnVmZmVyLA0KKwkJc3pOZXh0QnVmZmVyKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVVNfUmVjZWl2ZUZyYW1lICovDQotLyoqIFxicmllZiBSZXR1cm4gMiBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgd2l0aCBCdWZmZXIgYW5kIE5leHQgQnVmZmVyLCAxIGlmIFBEQyBoYXMgYmVlbiBpbml0aWFsaXphZWQgd2l0aCBOZXh0IEJ1ZmZlciwgMCBpZiBQREMgaXMgYnVzeSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVVNfUmVjZWl2ZUZyYW1lKCBBVDkxUFNfVVNBUlQgcFVTQVJULA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBwQnVmZmVyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzekJ1ZmZlciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICogcE5leHRCdWZmZXIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHN6TmV4dEJ1ZmZlciApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfUmVjZWl2ZUZyYW1lDQorLy8qIFxicmllZiBSZXR1cm4gMiBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgd2l0aCBCdWZmZXIgYW5kIE5leHQgQnVmZmVyLCAxIGlmIFBEQyBoYXMgYmVlbiBpbml0aWFsaXphZWQgd2l0aCBOZXh0IEJ1ZmZlciwgMCBpZiBQREMgaXMgYnVzeQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVVNfUmVjZWl2ZUZyYW1lICgNCisJQVQ5MVBTX1VTQVJUIHBVU0FSVCwNCisJY2hhciAqcEJ1ZmZlciwNCisJdW5zaWduZWQgaW50IHN6QnVmZmVyLA0KKwljaGFyICpwTmV4dEJ1ZmZlciwNCisJdW5zaWduZWQgaW50IHN6TmV4dEJ1ZmZlciApDQogew0KLSAgICByZXR1cm4gQVQ5MUZfUERDX1JlY2VpdmVGcmFtZSgNCi0gICAgICAgICggQVQ5MVBTX1BEQyApICYoIHBVU0FSVC0+VVNfUlBSICksDQotICAgICAgICBwQnVmZmVyLA0KLSAgICAgICAgc3pCdWZmZXIsDQotICAgICAgICBwTmV4dEJ1ZmZlciwNCi0gICAgICAgIHN6TmV4dEJ1ZmZlciApOw0KKwlyZXR1cm4gQVQ5MUZfUERDX1JlY2VpdmVGcmFtZSgNCisJCShBVDkxUFNfUERDKSAmKHBVU0FSVC0+VVNfUlBSKSwNCisJCXBCdWZmZXIsDQorCQlzekJ1ZmZlciwNCisJCXBOZXh0QnVmZmVyLA0KKwkJc3pOZXh0QnVmZmVyKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVVNfU2V0SXJkYUZpbHRlciAqLw0KLS8qKiBcYnJpZWYgU2V0IHRoZSB2YWx1ZSBvZiBJckRhIGZpbHRlciB0cmVnaXN0ZXIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9VU19TZXRJcmRhRmlsdGVyKCBBVDkxUFNfVVNBUlQgcFVTQVJULA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciB2YWx1ZSApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfU2V0SXJkYUZpbHRlcg0KKy8vKiBcYnJpZWYgU2V0IHRoZSB2YWx1ZSBvZiBJckRhIGZpbHRlciB0cmVnaXN0ZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VU19TZXRJcmRhRmlsdGVyICgNCisJQVQ5MVBTX1VTQVJUIHBVU0FSVCwNCisJdW5zaWduZWQgY2hhciB2YWx1ZQ0KKykNCiB7DQotICAgIHBVU0FSVC0+VVNfSUYgPSB2YWx1ZTsNCisJcFVTQVJULT5VU19JRiA9IHZhbHVlOw0KIH0NCiANCiAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSogICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFVEUA0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVURQX0VuYWJsZUl0ICovDQotLyoqIFxicmllZiBFbmFibGUgVURQIElUICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVURQX0VuYWJsZUl0KCBBVDkxUFNfVURQIHBVRFAsICAgIC8qIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyBJVCB0byBiZSBlbmFibGVkICovDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgVURQDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfRW5hYmxlSXQNCisvLyogXGJyaWVmIEVuYWJsZSBVRFAgSVQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfRW5hYmxlSXQgKA0KKwlBVDkxUFNfVURQIHBVRFAsICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgICAvLyBcYXJnIElUIHRvIGJlIGVuYWJsZWQNCiB7DQotICAgIC8qKiBXcml0ZSB0byB0aGUgSUVSIHJlZ2lzdGVyICovDQotICAgIHBVRFAtPlVEUF9JRVIgPSBmbGFnOw0KKwkvLyogV3JpdGUgdG8gdGhlIElFUiByZWdpc3Rlcg0KKwlwVURQLT5VRFBfSUVSID0gZmxhZzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVURQX0Rpc2FibGVJdCAqLw0KLS8qKiBcYnJpZWYgRGlzYWJsZSBVRFAgSVQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfRGlzYWJsZUl0KCBBVDkxUFNfVURQIHBVRFAsICAgIC8qIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgSVQgdG8gYmUgZGlzYWJsZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfRGlzYWJsZUl0DQorLy8qIFxicmllZiBEaXNhYmxlIFVEUCBJVA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VEUF9EaXNhYmxlSXQgKA0KKwlBVDkxUFNfVURQIHBVRFAsICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgICAvLyBcYXJnIElUIHRvIGJlIGRpc2FibGVkDQogew0KLSAgICAvKiogV3JpdGUgdG8gdGhlIElEUiByZWdpc3RlciAqLw0KLSAgICBwVURQLT5VRFBfSURSID0gZmxhZzsNCisJLy8qIFdyaXRlIHRvIHRoZSBJRFIgcmVnaXN0ZXINCisJcFVEUC0+VURQX0lEUiA9IGZsYWc7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VEUF9TZXRBZGRyZXNzICovDQotLyoqIFxicmllZiBTZXQgVURQIGZ1bmN0aW9uYWwgYWRkcmVzcyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1VEUF9TZXRBZGRyZXNzKCBBVDkxUFNfVURQIHBVRFAsICAgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYWRkcmVzcyApIC8qIFxhcmcgbmV3IFVEUCBhZGRyZXNzICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVURQX1NldEFkZHJlc3MNCisvLyogXGJyaWVmIFNldCBVRFAgZnVuY3Rpb25hbCBhZGRyZXNzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVURQX1NldEFkZHJlc3MgKA0KKwlBVDkxUFNfVURQIHBVRFAsICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGFkZHJlc3MpICAgLy8gXGFyZyBuZXcgVURQIGFkZHJlc3MNCiB7DQotICAgIHBVRFAtPlVEUF9GQUREUiA9ICggQVQ5MUNfVURQX0ZFTiB8IGFkZHJlc3MgKTsNCisJcFVEUC0+VURQX0ZBRERSID0gKEFUOTFDX1VEUF9GRU4gfCBhZGRyZXNzKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVURQX0VuYWJsZUVwICovDQotLyoqIFxicmllZiBFbmFibGUgRW5kcG9pbnQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfRW5hYmxlRXAoIEFUOTFQU19VRFAgcFVEUCwgICAgLyogXGFyZyBwb2ludGVyIHRvIGEgVURQIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnIGVuZHBvaW50cyB0byBiZSBlbmFibGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVURQX0VuYWJsZUVwDQorLy8qIFxicmllZiBFbmFibGUgRW5kcG9pbnQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfRW5hYmxlRXAgKA0KKwlBVDkxUFNfVURQIHBVRFAsICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgICAvLyBcYXJnIGVuZHBvaW50cyB0byBiZSBlbmFibGVkDQogew0KLSAgICBwVURQLT5VRFBfR0xCU1RBVEUgfD0gZmxhZzsNCisJcFVEUC0+VURQX0dMQlNUQVRFICB8PSBmbGFnOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9VRFBfRGlzYWJsZUVwICovDQotLyoqIFxicmllZiBFbmFibGUgRW5kcG9pbnQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfRGlzYWJsZUVwKCBBVDkxUFNfVURQIHBVRFAsICAgIC8qIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgZW5kcG9pbnRzIHRvIGJlIGVuYWJsZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfRGlzYWJsZUVwDQorLy8qIFxicmllZiBFbmFibGUgRW5kcG9pbnQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfRGlzYWJsZUVwICgNCisJQVQ5MVBTX1VEUCBwVURQLCAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVURQIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpICAgLy8gXGFyZyBlbmRwb2ludHMgdG8gYmUgZW5hYmxlZA0KIHsNCi0gICAgcFVEUC0+VURQX0dMQlNUQVRFICY9IH4oIGZsYWcgKTsNCisJcFVEUC0+VURQX0dMQlNUQVRFICAmPSB+KGZsYWcpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9VRFBfU2V0U3RhdGUgKi8NCi0vKiogXGJyaWVmIFNldCBVRFAgRGV2aWNlIHN0YXRlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVURQX1NldFN0YXRlKCBBVDkxUFNfVURQIHBVRFAsICAgIC8qIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyBuZXcgVURQIGFkZHJlc3MgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfU2V0U3RhdGUNCisvLyogXGJyaWVmIFNldCBVRFAgRGV2aWNlIHN0YXRlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVURQX1NldFN0YXRlICgNCisJQVQ5MVBTX1VEUCBwVURQLCAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVURQIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpICAgLy8gXGFyZyBuZXcgVURQIGFkZHJlc3MNCiB7DQotICAgIHBVRFAtPlVEUF9HTEJTVEFURSAmPSB+KCBBVDkxQ19VRFBfRkFEREVOIHwgQVQ5MUNfVURQX0NPTkZHICk7DQotICAgIHBVRFAtPlVEUF9HTEJTVEFURSB8PSBmbGFnOw0KKwlwVURQLT5VRFBfR0xCU1RBVEUgICY9IH4oQVQ5MUNfVURQX0ZBRERFTiB8IEFUOTFDX1VEUF9DT05GRyk7DQorCXBVRFAtPlVEUF9HTEJTVEFURSAgfD0gZmxhZzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVURQX0dldFN0YXRlICovDQotLyoqIFxicmllZiByZXR1cm4gVURQIERldmljZSBzdGF0ZSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVURQX0dldFN0YXRlKCAvKiBccmV0dXJuIHRoZSBVRFAgZGV2aWNlIHN0YXRlICovDQotICAgIEFUOTFQU19VRFAgcFVEUCApICAgICAgICAgICAgICAgICAgICAgLyogXGFyZyBwb2ludGVyIHRvIGEgVURQIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfR2V0U3RhdGUNCisvLyogXGJyaWVmIHJldHVybiBVRFAgRGV2aWNlIHN0YXRlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9VRFBfR2V0U3RhdGUgKCAvLyBccmV0dXJuIHRoZSBVRFAgZGV2aWNlIHN0YXRlDQorCUFUOTFQU19VRFAgcFVEUCkgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyDQogew0KLSAgICByZXR1cm4oIHBVRFAtPlVEUF9HTEJTVEFURSAmICggQVQ5MUNfVURQX0ZBRERFTiB8IEFUOTFDX1VEUF9DT05GRyApICk7DQorCXJldHVybiAocFVEUC0+VURQX0dMQlNUQVRFICAmIChBVDkxQ19VRFBfRkFEREVOIHwgQVQ5MUNfVURQX0NPTkZHKSk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VEUF9SZXNldEVwICovDQotLyoqIFxicmllZiBSZXNldCBVRFAgZW5kcG9pbnQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfUmVzZXRFcCggLyogXHJldHVybiB0aGUgVURQIGRldmljZSBzdGF0ZSAqLw0KLSAgICBBVDkxUFNfVURQIHBVRFAsICAgICAgICAgICAgIC8qIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyICovDQotICAgIHVuc2lnbmVkIGludCBmbGFnICkgICAgICAgICAgLyogXGFyZyBFbmRwb2ludHMgdG8gYmUgcmVzZXQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfUmVzZXRFcA0KKy8vKiBcYnJpZWYgUmVzZXQgVURQIGVuZHBvaW50DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVURQX1Jlc2V0RXAgKCAvLyBccmV0dXJuIHRoZSBVRFAgZGV2aWNlIHN0YXRlDQorCUFUOTFQU19VRFAgcFVEUCwgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAgIC8vIFxhcmcgRW5kcG9pbnRzIHRvIGJlIHJlc2V0DQogew0KLSAgICBwVURQLT5VRFBfUlNURVAgPSBmbGFnOw0KKwlwVURQLT5VRFBfUlNURVAgPSBmbGFnOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9VRFBfRXBTdGFsbCAqLw0KLS8qKiBcYnJpZWYgRW5kcG9pbnQgd2lsbCBTVEFMTCByZXF1ZXN0cyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1VEUF9FcFN0YWxsKCBBVDkxUFNfVURQIHBVRFAsICAgICAgICAgLyogXGFyZyBwb2ludGVyIHRvIGEgVURQIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGVuZHBvaW50ICkgLyogXGFyZyBlbmRwb2ludCBudW1iZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfRXBTdGFsbA0KKy8vKiBcYnJpZWYgRW5kcG9pbnQgd2lsbCBTVEFMTCByZXF1ZXN0cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VEUF9FcFN0YWxsKA0KKwlBVDkxUFNfVURQIHBVRFAsICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGVuZHBvaW50KSAgIC8vIFxhcmcgZW5kcG9pbnQgbnVtYmVyDQogew0KLSAgICBwVURQLT5VRFBfQ1NSWyBlbmRwb2ludCBdIHw9IEFUOTFDX1VEUF9GT1JDRVNUQUxMOw0KKwlwVURQLT5VRFBfQ1NSW2VuZHBvaW50XSB8PSBBVDkxQ19VRFBfRk9SQ0VTVEFMTDsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVURQX0VwV3JpdGUgKi8NCi0vKiogXGJyaWVmIFdyaXRlIHZhbHVlIGluIHRoZSBEUFIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfRXBXcml0ZSggQVQ5MVBTX1VEUCBwVURQLCAgICAgICAgLyogXGFyZyBwb2ludGVyIHRvIGEgVURQIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGVuZHBvaW50LCAvKiBcYXJnIGVuZHBvaW50IG51bWJlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgdmFsdWUgKSAgIC8qIFxhcmcgdmFsdWUgdG8gYmUgd3JpdHRlbiBpbiB0aGUgRFBSICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVURQX0VwV3JpdGUNCisvLyogXGJyaWVmIFdyaXRlIHZhbHVlIGluIHRoZSBEUFINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfRXBXcml0ZSgNCisJQVQ5MVBTX1VEUCBwVURQLCAgICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGNoYXIgZW5kcG9pbnQsICAvLyBcYXJnIGVuZHBvaW50IG51bWJlcg0KKwl1bnNpZ25lZCBjaGFyIHZhbHVlKSAgICAgLy8gXGFyZyB2YWx1ZSB0byBiZSB3cml0dGVuIGluIHRoZSBEUFINCiB7DQotICAgIHBVRFAtPlVEUF9GRFJbIGVuZHBvaW50IF0gPSB2YWx1ZTsNCisJcFVEUC0+VURQX0ZEUltlbmRwb2ludF0gPSB2YWx1ZTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVURQX0VwUmVhZCAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIHZhbHVlIGZyb20gdGhlIERQUiAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVURQX0VwUmVhZCggQVQ5MVBTX1VEUCBwVURQLCAgICAgICAgIC8qIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgZW5kcG9pbnQgKSAvKiBcYXJnIGVuZHBvaW50IG51bWJlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VEUF9FcFJlYWQNCisvLyogXGJyaWVmIFJldHVybiB2YWx1ZSBmcm9tIHRoZSBEUFINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1VEUF9FcFJlYWQoDQorCUFUOTFQU19VRFAgcFVEUCwgICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGVuZHBvaW50KSAgLy8gXGFyZyBlbmRwb2ludCBudW1iZXINCiB7DQotICAgIHJldHVybiBwVURQLT5VRFBfRkRSWyBlbmRwb2ludCBdOw0KKwlyZXR1cm4gcFVEUC0+VURQX0ZEUltlbmRwb2ludF07DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VEUF9FcEVuZE9mV3IgKi8NCi0vKiogXGJyaWVmIE5vdGlmeSB0aGUgVURQIHRoYXQgdmFsdWVzIGluIERQUiBhcmUgcmVhZHkgdG8gYmUgc2VudCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1VEUF9FcEVuZE9mV3IoIEFUOTFQU19VRFAgcFVEUCwgICAgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBlbmRwb2ludCApIC8qIFxhcmcgZW5kcG9pbnQgbnVtYmVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVURQX0VwRW5kT2ZXcg0KKy8vKiBcYnJpZWYgTm90aWZ5IHRoZSBVRFAgdGhhdCB2YWx1ZXMgaW4gRFBSIGFyZSByZWFkeSB0byBiZSBzZW50DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVURQX0VwRW5kT2ZXcigNCisJQVQ5MVBTX1VEUCBwVURQLCAgICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGNoYXIgZW5kcG9pbnQpICAvLyBcYXJnIGVuZHBvaW50IG51bWJlcg0KIHsNCi0gICAgcFVEUC0+VURQX0NTUlsgZW5kcG9pbnQgXSB8PSBBVDkxQ19VRFBfVFhQS1RSRFk7DQorCXBVRFAtPlVEUF9DU1JbZW5kcG9pbnRdIHw9IEFUOTFDX1VEUF9UWFBLVFJEWTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVURQX0VwQ2xlYXIgKi8NCi0vKiogXGJyaWVmIENsZWFyIGZsYWcgaW4gdGhlIGVuZHBvaW50IENTUiByZWdpc3RlciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1VEUF9FcENsZWFyKCBBVDkxUFNfVURQIHBVRFAsICAgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgZW5kcG9pbnQsIC8qIFxhcmcgZW5kcG9pbnQgbnVtYmVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAgICAgLyogXGFyZyBmbGFnIHRvIGJlIGNsZWFyZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfRXBDbGVhcg0KKy8vKiBcYnJpZWYgQ2xlYXIgZmxhZyBpbiB0aGUgZW5kcG9pbnQgQ1NSIHJlZ2lzdGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVURQX0VwQ2xlYXIoDQorCUFUOTFQU19VRFAgcFVEUCwgICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGVuZHBvaW50LCAgLy8gXGFyZyBlbmRwb2ludCBudW1iZXINCisJdW5zaWduZWQgaW50IGZsYWcpICAgICAgIC8vIFxhcmcgZmxhZyB0byBiZSBjbGVhcmVkDQogew0KLSAgICBwVURQLT5VRFBfQ1NSWyBlbmRwb2ludCBdICY9IH4oIGZsYWcgKTsNCisJcFVEUC0+VURQX0NTUltlbmRwb2ludF0gJj0gfihmbGFnKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVURQX0VwU2V0ICovDQotLyoqIFxicmllZiBTZXQgZmxhZyBpbiB0aGUgZW5kcG9pbnQgQ1NSIHJlZ2lzdGVyICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVURQX0VwU2V0KCBBVDkxUFNfVURQIHBVRFAsICAgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGVuZHBvaW50LCAvKiBcYXJnIGVuZHBvaW50IG51bWJlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApICAgICAvKiBcYXJnIGZsYWcgdG8gYmUgY2xlYXJlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VEUF9FcFNldA0KKy8vKiBcYnJpZWYgU2V0IGZsYWcgaW4gdGhlIGVuZHBvaW50IENTUiByZWdpc3Rlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VEUF9FcFNldCgNCisJQVQ5MVBTX1VEUCBwVURQLCAgICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGNoYXIgZW5kcG9pbnQsICAvLyBcYXJnIGVuZHBvaW50IG51bWJlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgICAgICAgLy8gXGFyZyBmbGFnIHRvIGJlIGNsZWFyZWQNCiB7DQotICAgIHBVRFAtPlVEUF9DU1JbIGVuZHBvaW50IF0gfD0gZmxhZzsNCisJcFVEUC0+VURQX0NTUltlbmRwb2ludF0gfD0gZmxhZzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVURQX0VwU3RhdHVzICovDQotLyoqIFxicmllZiBSZXR1cm4gdGhlIGVuZHBvaW50IENTUiByZWdpc3RlciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVURQX0VwU3RhdHVzKCBBVDkxUFNfVURQIHBVRFAsICAgICAgICAgLyogXGFyZyBwb2ludGVyIHRvIGEgVURQIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGVuZHBvaW50ICkgLyogXGFyZyBlbmRwb2ludCBudW1iZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfRXBTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiB0aGUgZW5kcG9pbnQgQ1NSIHJlZ2lzdGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9VRFBfRXBTdGF0dXMoDQorCUFUOTFQU19VRFAgcFVEUCwgICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGVuZHBvaW50KSAgLy8gXGFyZyBlbmRwb2ludCBudW1iZXINCiB7DQotICAgIHJldHVybiBwVURQLT5VRFBfQ1NSWyBlbmRwb2ludCBdOw0KKwlyZXR1cm4gcFVEUC0+VURQX0NTUltlbmRwb2ludF07DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VEUF9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzICovDQotLyoqIFxicmllZiBSZXR1cm4gVURQIEludGVycnVwdCBNYXNrIFN0YXR1cyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVURQX0dldEludGVycnVwdE1hc2tTdGF0dXMoIC8qIFxyZXR1cm4gVURQIEludGVycnVwdCBNYXNrIFN0YXR1cyAqLw0KLSAgICBBVDkxUFNfVURQIHBVZHAgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVURQX0dldEludGVycnVwdE1hc2tTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBVRFAgSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9VRFBfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLy8gXHJldHVybiBVRFAgSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorICAgICAgICBBVDkxUFNfVURQIHBVZHApIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlcg0KIHsNCi0gICAgcmV0dXJuIHBVZHAtPlVEUF9JTVI7DQorICAgICAgICByZXR1cm4gcFVkcC0+VURQX0lNUjsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVURQX0lzSW50ZXJydXB0TWFza2VkICovDQotLyoqIFxicmllZiBUZXN0IGlmIFVEUCBJbnRlcnJ1cHQgaXMgTWFza2VkICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIGludCBBVDkxRl9VRFBfSXNJbnRlcnJ1cHRNYXNrZWQoIEFUOTFQU19VRFAgcFVkcCwgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VEUF9Jc0ludGVycnVwdE1hc2tlZA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBVRFAgSW50ZXJydXB0IGlzIE1hc2tlZCANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1VEUF9Jc0ludGVycnVwdE1hc2tlZCgNCisgICAgICAgIEFUOTFQU19VRFAgcFVkcCwgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgVURQIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KIHsNCi0gICAgcmV0dXJuKCBBVDkxRl9VRFBfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggcFVkcCApICYgZmxhZyApOw0KKyAgICAgICAgcmV0dXJuIChBVDkxRl9VRFBfR2V0SW50ZXJydXB0TWFza1N0YXR1cyhwVWRwKSAmIGZsYWcpOw0KIH0NCiANCiAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSogICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIEFJQw0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotI2RlZmluZSBBVDkxQ19BSUNfQlJBTkNIX09QQ09ERSAgICAoICggdm9pZCAoICogKSgpICkgMHhFNTFGRkYyMCApIC8qIGxkciwgcGMsIFtwYywgIy0mRjIwXSAqLw0KKyAgICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIEFJQw0KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorI2RlZmluZSBBVDkxQ19BSUNfQlJBTkNIX09QQ09ERSAoKHZvaWQgKCopICgpKSAweEU1MUZGRjIwKSAvLyBsZHIsIHBjLCBbcGMsICMtJkYyMF0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BSUNfQ29uZmlndXJlSXQgKi8NCi0vKiogXGJyaWVmIEludGVycnVwdCBIYW5kbGVyIEluaXRpYWxpemF0aW9uICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BSUNfQ29uZmlndXJlSXQoIEFUOTFQU19BSUMgcEFpYywgICAgICAgICAgICAgICAgLyogXGFyZyBwb2ludGVyIHRvIHRoZSBBSUMgcmVnaXN0ZXJzICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGlycV9pZCwgICAgICAgICAgICAvKiBcYXJnIGludGVycnVwdCBudW1iZXIgdG8gaW5pdGlhbGl6ZSAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwcmlvcml0eSwgICAgICAgICAgLyogXGFyZyBwcmlvcml0eSB0byBnaXZlIHRvIHRoZSBpbnRlcnJ1cHQgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3JjX3R5cGUsICAgICAgICAgIC8qIFxhcmcgYWN0aXZhdGlvbiBhbmQgc2Vuc2Ugb2YgYWN0aXZhdGlvbiAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCAqIG5ld0hhbmRsZXIgKSggdm9pZCApICkgLyogXGFyZyBhZGRyZXNzIG9mIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FJQ19Db25maWd1cmVJdA0KKy8vKiBcYnJpZWYgSW50ZXJydXB0IEhhbmRsZXIgSW5pdGlhbGl6YXRpb24NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FJQ19Db25maWd1cmVJdCAoDQorCUFUOTFQU19BSUMgcEFpYywgIC8vIFxhcmcgcG9pbnRlciB0byB0aGUgQUlDIHJlZ2lzdGVycw0KKwl1bnNpZ25lZCBpbnQgaXJxX2lkLCAgICAgLy8gXGFyZyBpbnRlcnJ1cHQgbnVtYmVyIHRvIGluaXRpYWxpemUNCisJdW5zaWduZWQgaW50IHByaW9yaXR5LCAgIC8vIFxhcmcgcHJpb3JpdHkgdG8gZ2l2ZSB0byB0aGUgaW50ZXJydXB0DQorCXVuc2lnbmVkIGludCBzcmNfdHlwZSwgICAvLyBcYXJnIGFjdGl2YXRpb24gYW5kIHNlbnNlIG9mIGFjdGl2YXRpb24NCisJdm9pZCAoKm5ld0hhbmRsZXIpICh2b2lkKSApIC8vIFxhcmcgYWRkcmVzcyBvZiB0aGUgaW50ZXJydXB0IGhhbmRsZXINCiB7DQotICAgIHVuc2lnbmVkIGludCBvbGRIYW5kbGVyOw0KLSAgICB1bnNpZ25lZCBpbnQgbWFzazsNCisJdW5zaWduZWQgaW50IG9sZEhhbmRsZXI7DQorICAgIHVuc2lnbmVkIGludCBtYXNrIDsNCiANCi0gICAgb2xkSGFuZGxlciA9IHBBaWMtPkFJQ19TVlJbIGlycV9pZCBdOw0KKyAgICBvbGRIYW5kbGVyID0gcEFpYy0+QUlDX1NWUltpcnFfaWRdOw0KIA0KLSAgICBtYXNrID0gMHgxIDw8IGlycV9pZDsNCi0gICAgLyoqIERpc2FibGUgdGhlIGludGVycnVwdCBvbiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIgKi8NCi0gICAgcEFpYy0+QUlDX0lEQ1IgPSBtYXNrOw0KLSAgICAvKiogU2F2ZSB0aGUgaW50ZXJydXB0IGhhbmRsZXIgcm91dGluZSBwb2ludGVyIGFuZCB0aGUgaW50ZXJydXB0IHByaW9yaXR5ICovDQotICAgIHBBaWMtPkFJQ19TVlJbIGlycV9pZCBdID0gKCB1bnNpZ25lZCBpbnQgKSBuZXdIYW5kbGVyOw0KLSAgICAvKiogU3RvcmUgdGhlIFNvdXJjZSBNb2RlIFJlZ2lzdGVyICovDQotICAgIHBBaWMtPkFJQ19TTVJbIGlycV9pZCBdID0gc3JjX3R5cGUgfCBwcmlvcml0eTsNCi0gICAgLyoqIENsZWFyIHRoZSBpbnRlcnJ1cHQgb24gdGhlIGludGVycnVwdCBjb250cm9sbGVyICovDQotICAgIHBBaWMtPkFJQ19JQ0NSID0gbWFzazsNCisgICAgbWFzayA9IDB4MSA8PCBpcnFfaWQgOw0KKyAgICAvLyogRGlzYWJsZSB0aGUgaW50ZXJydXB0IG9uIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlcg0KKyAgICBwQWljLT5BSUNfSURDUiA9IG1hc2sgOw0KKyAgICAvLyogU2F2ZSB0aGUgaW50ZXJydXB0IGhhbmRsZXIgcm91dGluZSBwb2ludGVyIGFuZCB0aGUgaW50ZXJydXB0IHByaW9yaXR5DQorICAgIHBBaWMtPkFJQ19TVlJbaXJxX2lkXSA9ICh1bnNpZ25lZCBpbnQpIG5ld0hhbmRsZXIgOw0KKyAgICAvLyogU3RvcmUgdGhlIFNvdXJjZSBNb2RlIFJlZ2lzdGVyDQorICAgIHBBaWMtPkFJQ19TTVJbaXJxX2lkXSA9IHNyY190eXBlIHwgcHJpb3JpdHkgIDsNCisgICAgLy8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgb24gdGhlIGludGVycnVwdCBjb250cm9sbGVyDQorICAgIHBBaWMtPkFJQ19JQ0NSID0gbWFzayA7DQogDQotICAgIHJldHVybiBvbGRIYW5kbGVyOw0KKwlyZXR1cm4gb2xkSGFuZGxlcjsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQUlDX0VuYWJsZUl0ICovDQotLyoqIFxicmllZiBFbmFibGUgY29ycmVzcG9uZGluZyBJVCBudW1iZXIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9BSUNfRW5hYmxlSXQoIEFUOTFQU19BSUMgcEFpYywgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gdGhlIEFJQyByZWdpc3RlcnMgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGlycV9pZCApIC8qIFxhcmcgaW50ZXJydXB0IG51bWJlciB0byBpbml0aWFsaXplICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUlDX0VuYWJsZUl0DQorLy8qIFxicmllZiBFbmFibGUgY29ycmVzcG9uZGluZyBJVCBudW1iZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BSUNfRW5hYmxlSXQgKA0KKwlBVDkxUFNfQUlDIHBBaWMsICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIHRoZSBBSUMgcmVnaXN0ZXJzDQorCXVuc2lnbmVkIGludCBpcnFfaWQgKSAvLyBcYXJnIGludGVycnVwdCBudW1iZXIgdG8gaW5pdGlhbGl6ZQ0KIHsNCi0gICAgLyoqIEVuYWJsZSB0aGUgaW50ZXJydXB0IG9uIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciAqLw0KLSAgICBwQWljLT5BSUNfSUVDUiA9IDB4MSA8PCBpcnFfaWQ7DQorICAgIC8vKiBFbmFibGUgdGhlIGludGVycnVwdCBvbiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXINCisgICAgcEFpYy0+QUlDX0lFQ1IgPSAweDEgPDwgaXJxX2lkIDsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQUlDX0Rpc2FibGVJdCAqLw0KLS8qKiBcYnJpZWYgRGlzYWJsZSBjb3JyZXNwb25kaW5nIElUIG51bWJlciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0FJQ19EaXNhYmxlSXQoIEFUOTFQU19BSUMgcEFpYywgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gdGhlIEFJQyByZWdpc3RlcnMgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpcnFfaWQgKSAvKiBcYXJnIGludGVycnVwdCBudW1iZXIgdG8gaW5pdGlhbGl6ZSAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FJQ19EaXNhYmxlSXQNCisvLyogXGJyaWVmIERpc2FibGUgY29ycmVzcG9uZGluZyBJVCBudW1iZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BSUNfRGlzYWJsZUl0ICgNCisJQVQ5MVBTX0FJQyBwQWljLCAgICAgIC8vIFxhcmcgcG9pbnRlciB0byB0aGUgQUlDIHJlZ2lzdGVycw0KKwl1bnNpZ25lZCBpbnQgaXJxX2lkICkgLy8gXGFyZyBpbnRlcnJ1cHQgbnVtYmVyIHRvIGluaXRpYWxpemUNCiB7DQogICAgIHVuc2lnbmVkIGludCBtYXNrID0gMHgxIDw8IGlycV9pZDsNCi0NCi0gICAgLyoqIERpc2FibGUgdGhlIGludGVycnVwdCBvbiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIgKi8NCi0gICAgcEFpYy0+QUlDX0lEQ1IgPSBtYXNrOw0KLSAgICAvKiogQ2xlYXIgdGhlIGludGVycnVwdCBvbiB0aGUgSW50ZXJydXB0IENvbnRyb2xsZXIgKCBpZiBvbmUgaXMgcGVuZGluZyApICovDQotICAgIHBBaWMtPkFJQ19JQ0NSID0gbWFzazsNCisgICAgLy8qIERpc2FibGUgdGhlIGludGVycnVwdCBvbiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXINCisgICAgcEFpYy0+QUlDX0lEQ1IgPSBtYXNrIDsNCisgICAgLy8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgb24gdGhlIEludGVycnVwdCBDb250cm9sbGVyICggaWYgb25lIGlzIHBlbmRpbmcgKQ0KKyAgICBwQWljLT5BSUNfSUNDUiA9IG1hc2sgOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BSUNfQ2xlYXJJdCAqLw0KLS8qKiBcYnJpZWYgQ2xlYXIgY29ycmVzcG9uZGluZyBJVCBudW1iZXIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9BSUNfQ2xlYXJJdCggQVQ5MVBTX0FJQyBwQWljLCAgICAgIC8qIFxhcmcgcG9pbnRlciB0byB0aGUgQUlDIHJlZ2lzdGVycyAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpcnFfaWQgKSAvKiBcYXJnIGludGVycnVwdCBudW1iZXIgdG8gaW5pdGlhbGl6ZSAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FJQ19DbGVhckl0DQorLy8qIFxicmllZiBDbGVhciBjb3JyZXNwb25kaW5nIElUIG51bWJlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FJQ19DbGVhckl0ICgNCisJQVQ5MVBTX0FJQyBwQWljLCAgICAgLy8gXGFyZyBwb2ludGVyIHRvIHRoZSBBSUMgcmVnaXN0ZXJzDQorCXVuc2lnbmVkIGludCBpcnFfaWQpIC8vIFxhcmcgaW50ZXJydXB0IG51bWJlciB0byBpbml0aWFsaXplDQogew0KLSAgICAvKiogQ2xlYXIgdGhlIGludGVycnVwdCBvbiB0aGUgSW50ZXJydXB0IENvbnRyb2xsZXIgKCBpZiBvbmUgaXMgcGVuZGluZyApICovDQotICAgIHBBaWMtPkFJQ19JQ0NSID0gKCAweDEgPDwgaXJxX2lkICk7DQorICAgIC8vKiBDbGVhciB0aGUgaW50ZXJydXB0IG9uIHRoZSBJbnRlcnJ1cHQgQ29udHJvbGxlciAoIGlmIG9uZSBpcyBwZW5kaW5nICkNCisgICAgcEFpYy0+QUlDX0lDQ1IgPSAoMHgxIDw8IGlycV9pZCk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FJQ19BY2tub3dsZWRnZUl0ICovDQotLyoqIFxicmllZiBBY2tub3dsZWRnZSBjb3JyZXNwb25kaW5nIElUIG51bWJlciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0FJQ19BY2tub3dsZWRnZUl0KCBBVDkxUFNfQUlDIHBBaWMgKSAvKiBcYXJnIHBvaW50ZXIgdG8gdGhlIEFJQyByZWdpc3RlcnMgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BSUNfQWNrbm93bGVkZ2VJdA0KKy8vKiBcYnJpZWYgQWNrbm93bGVkZ2UgY29ycmVzcG9uZGluZyBJVCBudW1iZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BSUNfQWNrbm93bGVkZ2VJdCAoDQorCUFUOTFQU19BSUMgcEFpYykgICAgIC8vIFxhcmcgcG9pbnRlciB0byB0aGUgQUlDIHJlZ2lzdGVycw0KIHsNCiAgICAgcEFpYy0+QUlDX0VPSUNSID0gcEFpYy0+QUlDX0VPSUNSOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BSUNfU2V0RXhjZXB0aW9uVmVjdG9yICovDQotLyoqIFxicmllZiBDb25maWd1cmUgdmVjdG9yIGhhbmRsZXIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FJQ19TZXRFeGNlcHRpb25WZWN0b3IoIHVuc2lnbmVkIGludCAqIHBWZWN0b3IsIC8qIFxhcmcgcG9pbnRlciB0byB0aGUgQUlDIHJlZ2lzdGVycyAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICggKiBIYW5kbGVyICkoKSApICAvKiBcYXJnIEludGVycnVwdCBIYW5kbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUlDX1NldEV4Y2VwdGlvblZlY3Rvcg0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIHZlY3RvciBoYW5kbGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCAgQVQ5MUZfQUlDX1NldEV4Y2VwdGlvblZlY3RvciAoDQorCXVuc2lnbmVkIGludCAqcFZlY3RvciwgLy8gXGFyZyBwb2ludGVyIHRvIHRoZSBBSUMgcmVnaXN0ZXJzDQorCXZvaWQgKCpIYW5kbGVyKSAoKSApICAgLy8gXGFyZyBJbnRlcnJ1cHQgSGFuZGxlcg0KIHsNCi0gICAgdW5zaWduZWQgaW50IG9sZFZlY3RvciA9ICpwVmVjdG9yOw0KKwl1bnNpZ25lZCBpbnQgb2xkVmVjdG9yID0gKnBWZWN0b3I7DQogDQotICAgIGlmKCAoIHVuc2lnbmVkIGludCApIEhhbmRsZXIgPT0gKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19BSUNfQlJBTkNIX09QQ09ERSApDQotICAgIHsNCi0gICAgICAgICpwVmVjdG9yID0gKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19BSUNfQlJBTkNIX09QQ09ERTsNCi0gICAgfQ0KLSAgICBlbHNlDQotICAgIHsNCi0gICAgICAgICpwVmVjdG9yID0gKCAoICggKCAoIHVuc2lnbmVkIGludCApIEhhbmRsZXIgKSAtICggKCB1bnNpZ25lZCBpbnQgKSBwVmVjdG9yICkgLSAweDggKSA+PiAyICkgJiAweDAwRkZGRkZGICkgfCAweEVBMDAwMDAwOw0KLSAgICB9DQorCWlmICgodW5zaWduZWQgaW50KSBIYW5kbGVyID09ICh1bnNpZ25lZCBpbnQpIEFUOTFDX0FJQ19CUkFOQ0hfT1BDT0RFKQ0KKwkJKnBWZWN0b3IgPSAodW5zaWduZWQgaW50KSBBVDkxQ19BSUNfQlJBTkNIX09QQ09ERTsNCisJZWxzZQ0KKwkJKnBWZWN0b3IgPSAoKCgoKHVuc2lnbmVkIGludCkgSGFuZGxlcikgLSAoKHVuc2lnbmVkIGludCkgcFZlY3RvcikgLSAweDgpID4+IDIpICYgMHgwMEZGRkZGRikgfCAweEVBMDAwMDAwOw0KIA0KLSAgICByZXR1cm4gb2xkVmVjdG9yOw0KKwlyZXR1cm4gb2xkVmVjdG9yOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BSUNfVHJpZyAqLw0KLS8qKiBcYnJpZWYgVHJpZyBhbiBJVCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0FJQ19UcmlnKCBBVDkxUFNfQUlDIHBBaWMsICAgICAgLyogXGFyZyBwb2ludGVyIHRvIHRoZSBBSUMgcmVnaXN0ZXJzICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGlycV9pZCApIC8qIFxhcmcgaW50ZXJydXB0IG51bWJlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FJQ19UcmlnDQorLy8qIFxicmllZiBUcmlnIGFuIElUDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgIEFUOTFGX0FJQ19UcmlnICgNCisJQVQ5MVBTX0FJQyBwQWljLCAgICAgLy8gXGFyZyBwb2ludGVyIHRvIHRoZSBBSUMgcmVnaXN0ZXJzDQorCXVuc2lnbmVkIGludCBpcnFfaWQpIC8vIFxhcmcgaW50ZXJydXB0IG51bWJlcg0KIHsNCi0gICAgcEFpYy0+QUlDX0lTQ1IgPSAoIDB4MSA8PCBpcnFfaWQgKTsNCisJcEFpYy0+QUlDX0lTQ1IgPSAoMHgxIDw8IGlycV9pZCkgOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BSUNfSXNBY3RpdmUgKi8NCi0vKiogXGJyaWVmIFRlc3QgaWYgYW4gSVQgaXMgYWN0aXZlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BSUNfSXNBY3RpdmUoIEFUOTFQU19BSUMgcEFpYywgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gdGhlIEFJQyByZWdpc3RlcnMgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaXJxX2lkICkgLyogXGFyZyBJbnRlcnJ1cHQgTnVtYmVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUlDX0lzQWN0aXZlDQorLy8qIFxicmllZiBUZXN0IGlmIGFuIElUIGlzIGFjdGl2ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgIEFUOTFGX0FJQ19Jc0FjdGl2ZSAoDQorCUFUOTFQU19BSUMgcEFpYywgICAgIC8vIFxhcmcgcG9pbnRlciB0byB0aGUgQUlDIHJlZ2lzdGVycw0KKwl1bnNpZ25lZCBpbnQgaXJxX2lkKSAvLyBcYXJnIEludGVycnVwdCBOdW1iZXINCiB7DQotICAgIHJldHVybiggcEFpYy0+QUlDX0lTUiAmICggMHgxIDw8IGlycV9pZCApICk7DQorCXJldHVybiAocEFpYy0+QUlDX0lTUiAmICgweDEgPDwgaXJxX2lkKSk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FJQ19Jc1BlbmRpbmcgKi8NCi0vKiogXGJyaWVmIFRlc3QgaWYgYW4gSVQgaXMgcGVuZGluZyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQUlDX0lzUGVuZGluZyggQVQ5MVBTX0FJQyBwQWljLCAgICAgIC8qIFxhcmcgcG9pbnRlciB0byB0aGUgQUlDIHJlZ2lzdGVycyAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaXJxX2lkICkgLyogXGFyZyBJbnRlcnJ1cHQgTnVtYmVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUlDX0lzUGVuZGluZw0KKy8vKiBcYnJpZWYgVGVzdCBpZiBhbiBJVCBpcyBwZW5kaW5nDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCAgQVQ5MUZfQUlDX0lzUGVuZGluZyAoDQorCUFUOTFQU19BSUMgcEFpYywgICAgIC8vIFxhcmcgcG9pbnRlciB0byB0aGUgQUlDIHJlZ2lzdGVycw0KKwl1bnNpZ25lZCBpbnQgaXJxX2lkKSAvLyBcYXJnIEludGVycnVwdCBOdW1iZXINCiB7DQotICAgIHJldHVybiggcEFpYy0+QUlDX0lQUiAmICggMHgxIDw8IGlycV9pZCApICk7DQorCXJldHVybiAocEFpYy0+QUlDX0lQUiAmICgweDEgPDwgaXJxX2lkKSk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FJQ19PcGVuICovDQotLyoqIFxicmllZiBTZXQgZXhjZXB0aW9uIHZlY3RvcnMgYW5kIEFJQyByZWdpc3RlcnMgdG8gZGVmYXVsdCB2YWx1ZXMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9BSUNfT3BlbiggQVQ5MVBTX0FJQyBwQWljLCAgICAgICAgICAgICAgLyogXGFyZyBwb2ludGVyIHRvIHRoZSBBSUMgcmVnaXN0ZXJzICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoICogSXJxSGFuZGxlciApKCksICAgICAgLyogXGFyZyBEZWZhdWx0IElSUSB2ZWN0b3IgZXhjZXB0aW9uICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoICogRmlxSGFuZGxlciApKCksICAgICAgLyogXGFyZyBEZWZhdWx0IEZJUSB2ZWN0b3IgZXhjZXB0aW9uICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoICogRGVmYXVsdEhhbmRsZXIgKSgpLCAgLyogXGFyZyBEZWZhdWx0IEhhbmRsZXIgc2V0IGluIElTUiAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCAqIFNwdXJpb3VzSGFuZGxlciApKCksIC8qIFxhcmcgRGVmYXVsdCBTcHVyaW91cyBIYW5kbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHByb3RlY3RNb2RlICkgICAgLyogXGFyZyBEZWJ1ZyBDb250cm9sIFJlZ2lzdGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUlDX09wZW4NCisvLyogXGJyaWVmIFNldCBleGNlcHRpb24gdmVjdG9ycyBhbmQgQUlDIHJlZ2lzdGVycyB0byBkZWZhdWx0IHZhbHVlcw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FJQ19PcGVuKA0KKwlBVDkxUFNfQUlDIHBBaWMsICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gdGhlIEFJQyByZWdpc3RlcnMNCisJdm9pZCAoKklycUhhbmRsZXIpICgpLCAgLy8gXGFyZyBEZWZhdWx0IElSUSB2ZWN0b3IgZXhjZXB0aW9uDQorCXZvaWQgKCpGaXFIYW5kbGVyKSAoKSwgIC8vIFxhcmcgRGVmYXVsdCBGSVEgdmVjdG9yIGV4Y2VwdGlvbg0KKwl2b2lkICgqRGVmYXVsdEhhbmRsZXIpICAoKSwgLy8gXGFyZyBEZWZhdWx0IEhhbmRsZXIgc2V0IGluIElTUg0KKwl2b2lkICgqU3B1cmlvdXNIYW5kbGVyKSAoKSwgLy8gXGFyZyBEZWZhdWx0IFNwdXJpb3VzIEhhbmRsZXINCisJdW5zaWduZWQgaW50IHByb3RlY3RNb2RlKSAgIC8vIFxhcmcgRGVidWcgQ29udHJvbCBSZWdpc3Rlcg0KIHsNCi0gICAgaW50IGk7DQorCWludCBpOw0KIA0KLSAgICAvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzIGFuZCBzZXQgSVZSIHRvIHRoZSBkZWZhdWx0IGhhbmRsZXIgKi8NCi0gICAgZm9yKCBpID0gMDsgaSA8IDMyOyArK2kgKQ0KLSAgICB7DQotICAgICAgICBBVDkxRl9BSUNfRGlzYWJsZUl0KCBwQWljLCBpICk7DQotICAgICAgICBBVDkxRl9BSUNfQ29uZmlndXJlSXQoIHBBaWMsIGksIEFUOTFDX0FJQ19QUklPUl9MT1dFU1QsIEFUOTFDX0FJQ19TUkNUWVBFX0lOVF9MRVZFTF9TRU5TSVRJVkUsIERlZmF1bHRIYW5kbGVyICk7DQotICAgIH0NCisJLy8gRGlzYWJsZSBhbGwgaW50ZXJydXB0cyBhbmQgc2V0IElWUiB0byB0aGUgZGVmYXVsdCBoYW5kbGVyDQorCWZvciAoaSA9IDA7IGkgPCAzMjsgKytpKSB7DQorCQlBVDkxRl9BSUNfRGlzYWJsZUl0KHBBaWMsIGkpOw0KKwkJQVQ5MUZfQUlDX0NvbmZpZ3VyZUl0KHBBaWMsIGksIEFUOTFDX0FJQ19QUklPUl9MT1dFU1QsIEFUOTFDX0FJQ19TUkNUWVBFX0lOVF9MRVZFTF9TRU5TSVRJVkUsIERlZmF1bHRIYW5kbGVyKTsNCisJfQ0KIA0KLSAgICAvKiBTZXQgdGhlIElSUSBleGNlcHRpb24gdmVjdG9yICovDQotICAgIEFUOTFGX0FJQ19TZXRFeGNlcHRpb25WZWN0b3IoICggdW5zaWduZWQgaW50ICogKSAweDE4LCBJcnFIYW5kbGVyICk7DQotICAgIC8qIFNldCB0aGUgRmFzdCBJbnRlcnJ1cHQgZXhjZXB0aW9uIHZlY3RvciAqLw0KLSAgICBBVDkxRl9BSUNfU2V0RXhjZXB0aW9uVmVjdG9yKCAoIHVuc2lnbmVkIGludCAqICkgMHgxQywgRmlxSGFuZGxlciApOw0KKwkvLyBTZXQgdGhlIElSUSBleGNlcHRpb24gdmVjdG9yDQorCUFUOTFGX0FJQ19TZXRFeGNlcHRpb25WZWN0b3IoKHVuc2lnbmVkIGludCAqKSAweDE4LCBJcnFIYW5kbGVyKTsNCisJLy8gU2V0IHRoZSBGYXN0IEludGVycnVwdCBleGNlcHRpb24gdmVjdG9yDQorCUFUOTFGX0FJQ19TZXRFeGNlcHRpb25WZWN0b3IoKHVuc2lnbmVkIGludCAqKSAweDFDLCBGaXFIYW5kbGVyKTsNCiANCi0gICAgcEFpYy0+QUlDX1NQVSA9ICggdW5zaWduZWQgaW50ICkgU3B1cmlvdXNIYW5kbGVyOw0KLSAgICBwQWljLT5BSUNfRENSID0gcHJvdGVjdE1vZGU7DQorCXBBaWMtPkFJQ19TUFUgPSAodW5zaWduZWQgaW50KSBTcHVyaW91c0hhbmRsZXI7DQorCXBBaWMtPkFJQ19EQ1IgPSBwcm90ZWN0TW9kZTsNCiB9DQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfTUNfQ2ZnUE1DICovDQotLyoqIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBNQyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX01DX0NmZ1BNQyggdm9pZCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfTUNfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBNQw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX01DX0NmZ1BNQyAodm9pZCkNCiB7DQotICAgIEFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCi0gICAgICAgIEFUOTFDX0JBU0VfUE1DLCAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IEFUOTFDX0lEX1NZUyApICk7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1NZUykpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9EQkdVX0NmZ1BNQyAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgREJHVSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0RCR1VfQ2ZnUE1DKCB2b2lkICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9EQkdVX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgREJHVQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0RCR1VfQ2ZnUE1DICh2b2lkKQ0KIHsNCi0gICAgQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QTUMsIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgQVQ5MUNfSURfU1lTICkgKTsNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfU1lTKSk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0RCR1VfQ2ZnUElPICovDQotLyoqIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIERCR1Ugc2lnbmFscyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0RCR1VfQ2ZnUElPKCB2b2lkICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9EQkdVX0NmZ1BJTw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBEQkdVIHNpZ25hbHMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9EQkdVX0NmZ1BJTyAodm9pZCkNCiB7DQotICAgIC8qIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUgKi8NCi0gICAgQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCi0gICAgICAgIEFUOTFDX0JBU0VfUElPQSwgICAgICAgICAgICAgICAgICAgICAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTEwX0RUWEQgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEE5X0RSWEQgKSwgLyogUGVyaXBoZXJhbCBBICovDQotICAgICAgICAwICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUGVyaXBoZXJhbCBCICovDQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQSwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEExMF9EVFhEICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBOV9EUlhEICAgICksIC8vIFBlcmlwaGVyYWwgQQ0KKwkJMCk7IC8vIFBlcmlwaGVyYWwgQg0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QV01DX0NIM19DZmdQSU8gKi8NCi0vKiogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgUFdNQ19DSDMgc2lnbmFscyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BXTUNfQ0gzX0NmZ1BJTyggdm9pZCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUFdNQ19DSDNfQ2ZnUElPDQorLy8qIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFBXTUNfQ0gzIHNpZ25hbHMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QV01DX0NIM19DZmdQSU8gKHZvaWQpDQogew0KLSAgICAvKiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlICovDQotICAgIEFUOTFGX1BJT19DZmdQZXJpcGgoDQotICAgICAgICBBVDkxQ19CQVNFX1BJT0EsICAgICAgICAgICAgICAgICAgICAgICAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBlcmlwaGVyYWwgQSAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMTRfUFdNMyApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTdfUFdNMyApICk7IC8qIFBlcmlwaGVyYWwgQiAqLw0KKwkvLyBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlDQorCUFUOTFGX1BJT19DZmdQZXJpcGgoDQorCQlBVDkxQ19CQVNFX1BJT0EsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJMCwgLy8gUGVyaXBoZXJhbCBBDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEExNF9QV00zICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBN19QV00zICAgICkpOyAvLyBQZXJpcGhlcmFsIEINCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUFdNQ19DSDJfQ2ZnUElPICovDQotLyoqIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFBXTUNfQ0gyIHNpZ25hbHMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QV01DX0NIMl9DZmdQSU8oIHZvaWQgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BXTUNfQ0gyX0NmZ1BJTw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBQV01DX0NIMiBzaWduYWxzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUFdNQ19DSDJfQ2ZnUElPICh2b2lkKQ0KIHsNCi0gICAgLyogQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZSAqLw0KLSAgICBBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QSU9BLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMl9QV00yICksICAgIC8qIFBlcmlwaGVyYWwgQSAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMjVfUFdNMiApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTEzX1BXTTIgKSApOyAvKiBQZXJpcGhlcmFsIEIgKi8NCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9BLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTJfUFdNMiAgICApLCAvLyBQZXJpcGhlcmFsIEENCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTI1X1BXTTIgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEExM19QV00yICAgICkpOyAvLyBQZXJpcGhlcmFsIEINCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUFdNQ19DSDFfQ2ZnUElPICovDQotLyoqIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFBXTUNfQ0gxIHNpZ25hbHMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QV01DX0NIMV9DZmdQSU8oIHZvaWQgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BXTUNfQ0gxX0NmZ1BJTw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBQV01DX0NIMSBzaWduYWxzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUFdNQ19DSDFfQ2ZnUElPICh2b2lkKQ0KIHsNCi0gICAgLyogQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZSAqLw0KLSAgICBBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QSU9BLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMV9QV00xICksICAgIC8qIFBlcmlwaGVyYWwgQSAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMjRfUFdNMSApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTEyX1BXTTEgKSApOyAvKiBQZXJpcGhlcmFsIEIgKi8NCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9BLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTFfUFdNMSAgICApLCAvLyBQZXJpcGhlcmFsIEENCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTI0X1BXTTEgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEExMl9QV00xICAgICkpOyAvLyBQZXJpcGhlcmFsIEINCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUFdNQ19DSDBfQ2ZnUElPICovDQotLyoqIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFBXTUNfQ0gwIHNpZ25hbHMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QV01DX0NIMF9DZmdQSU8oIHZvaWQgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BXTUNfQ0gwX0NmZ1BJTw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBQV01DX0NIMCBzaWduYWxzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUFdNQ19DSDBfQ2ZnUElPICh2b2lkKQ0KIHsNCi0gICAgLyogQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZSAqLw0KLSAgICBBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QSU9BLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMF9QV00wICksICAgIC8qIFBlcmlwaGVyYWwgQSAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMjNfUFdNMCApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTExX1BXTTAgKSApOyAvKiBQZXJpcGhlcmFsIEIgKi8NCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9BLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTBfUFdNMCAgICApLCAvLyBQZXJpcGhlcmFsIEENCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTIzX1BXTTAgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEExMV9QV00wICAgICkpOyAvLyBQZXJpcGhlcmFsIEINCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1NDX0NmZ1BNQyAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgU1NDICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfU1NDX0NmZ1BNQyggdm9pZCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1NDX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgU1NDDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1NDX0NmZ1BNQyAodm9pZCkNCiB7DQotICAgIEFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCi0gICAgICAgIEFUOTFDX0JBU0VfUE1DLCAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IEFUOTFDX0lEX1NTQyApICk7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1NTQykpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9TU0NfQ2ZnUElPICovDQotLyoqIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFNTQyBzaWduYWxzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfU1NDX0NmZ1BJTyggdm9pZCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1NDX0NmZ1BJTw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBTU0Mgc2lnbmFscw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NTQ19DZmdQSU8gKHZvaWQpDQogew0KLSAgICAvKiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlICovDQotICAgIEFUOTFGX1BJT19DZmdQZXJpcGgoDQotICAgICAgICBBVDkxQ19CQVNFX1BJT0EsIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMTdfVEQgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEExNV9URiApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTE5X1JLICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMThfUkQgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEEyMF9SRiApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTE2X1RLICksIC8qIFBlcmlwaGVyYWwgQSAqLw0KLSAgICAgICAgMCApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUGVyaXBoZXJhbCBCICovDQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQSwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEExN19URCAgICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMTVfVEYgICAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTE5X1JLICAgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEExOF9SRCAgICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMjBfUkYgICAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTE2X1RLICAgICAgKSwgLy8gUGVyaXBoZXJhbCBBDQorCQkwKTsgLy8gUGVyaXBoZXJhbCBCDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1NQSV9DZmdQTUMgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFNQSSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1NQSV9DZmdQTUMoIHZvaWQgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSV9DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFNQSQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NQSV9DZmdQTUMgKHZvaWQpDQogew0KLSAgICBBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQotICAgICAgICBBVDkxQ19CQVNFX1BNQywgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCBBVDkxQ19JRF9TUEkgKSApOw0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9TUEkpKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1BJX0NmZ1BJTyAqLw0KLS8qKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBTUEkgc2lnbmFscyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1NQSV9DZmdQSU8oIHZvaWQgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSV9DZmdQSU8NCisvLyogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgU1BJIHNpZ25hbHMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TUElfQ2ZnUElPICh2b2lkKQ0KIHsNCi0gICAgLyogQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZSAqLw0KLSAgICBBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QSU9BLCAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTExX05QQ1MwICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMTNfTU9TSSApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTMxX05QQ1MxICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMTJfTUlTTyApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTE0X1NQQ0sgKSwgLyogUGVyaXBoZXJhbCBBICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEE5X05QQ1MxICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMzBfTlBDUzIgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEExMF9OUENTMiApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTIyX05QQ1MzICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBM19OUENTMyApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTVfTlBDUzMgKSApOyAvKiBQZXJpcGhlcmFsIEIgKi8NCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9BLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTExX05QQ1MwICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEExM19NT1NJICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMzFfTlBDUzEgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTEyX01JU08gICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEExNF9TUENLICAgICksIC8vIFBlcmlwaGVyYWwgQQ0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBOV9OUENTMSAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMzBfTlBDUzIgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTEwX05QQ1MyICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyMl9OUENTMyAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBM19OUENTMyAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBNV9OUENTMyAgICkpOyAvLyBQZXJpcGhlcmFsIEINCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUFdNQ19DZmdQTUMgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFBXTUMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QV01DX0NmZ1BNQyggdm9pZCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUFdNQ19DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFBXTUMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QV01DX0NmZ1BNQyAodm9pZCkNCiB7DQotICAgIEFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCi0gICAgICAgIEFUOTFDX0JBU0VfUE1DLCAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IEFUOTFDX0lEX1BXTUMgKSApOw0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9QV01DKSk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1RDMl9DZmdQTUMgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFRDMiAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1RDMl9DZmdQTUMoIHZvaWQgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RDMl9DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFRDMg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1RDMl9DZmdQTUMgKHZvaWQpDQogew0KLSAgICBBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQotICAgICAgICBBVDkxQ19CQVNFX1BNQywgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCBBVDkxQ19JRF9UQzIgKSApOw0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9UQzIpKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVEMyX0NmZ1BJTyAqLw0KLS8qKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBUQzIgc2lnbmFscyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1RDMl9DZmdQSU8oIHZvaWQgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RDMl9DZmdQSU8NCisvLyogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgVEMyIHNpZ25hbHMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UQzJfQ2ZnUElPICh2b2lkKQ0KIHsNCi0gICAgLyogQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZSAqLw0KLSAgICBBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QSU9BLCAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgIDAsICAgICAgICAgICAgICAgLyogUGVyaXBoZXJhbCBBICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEEyNl9USU9BMiApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTI3X1RJT0IyICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMjlfVENMSzIgKSApOyAvKiBQZXJpcGhlcmFsIEIgKi8NCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9BLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCTAsIC8vIFBlcmlwaGVyYWwgQQ0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMjZfVElPQTIgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTI3X1RJT0IyICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyOV9UQ0xLMiAgICkpOyAvLyBQZXJpcGhlcmFsIEINCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVEMxX0NmZ1BNQyAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgVEMxICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVEMxX0NmZ1BNQyggdm9pZCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVEMxX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgVEMxDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVEMxX0NmZ1BNQyAodm9pZCkNCiB7DQotICAgIEFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCi0gICAgICAgIEFUOTFDX0JBU0VfUE1DLCAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IEFUOTFDX0lEX1RDMSApICk7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1RDMSkpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9UQzFfQ2ZnUElPICovDQotLyoqIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFRDMSBzaWduYWxzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVEMxX0NmZ1BJTyggdm9pZCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVEMxX0NmZ1BJTw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBUQzEgc2lnbmFscw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1RDMV9DZmdQSU8gKHZvaWQpDQogew0KLSAgICAvKiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlICovDQotICAgIEFUOTFGX1BJT19DZmdQZXJpcGgoDQotICAgICAgICBBVDkxQ19CQVNFX1BJT0EsIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgMCwgICAgICAgICAgICAgICAvKiBQZXJpcGhlcmFsIEEgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTE1X1RJT0ExICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMTZfVElPQjEgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEEyOF9UQ0xLMSApICk7IC8qIFBlcmlwaGVyYWwgQiAqLw0KKwkvLyBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlDQorCUFUOTFGX1BJT19DZmdQZXJpcGgoDQorCQlBVDkxQ19CQVNFX1BJT0EsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJMCwgLy8gUGVyaXBoZXJhbCBBDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEExNV9USU9BMSAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMTZfVElPQjEgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTI4X1RDTEsxICAgKSk7IC8vIFBlcmlwaGVyYWwgQg0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9UQzBfQ2ZnUE1DICovDQotLyoqIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBUQzAgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9UQzBfQ2ZnUE1DKCB2b2lkICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UQzBfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBUQzANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UQzBfQ2ZnUE1DICh2b2lkKQ0KIHsNCi0gICAgQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QTUMsIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgQVQ5MUNfSURfVEMwICkgKTsNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfVEMwKSk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1RDMF9DZmdQSU8gKi8NCi0vKiogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgVEMwIHNpZ25hbHMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9UQzBfQ2ZnUElPKCB2b2lkICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UQzBfQ2ZnUElPDQorLy8qIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFRDMCBzaWduYWxzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVEMwX0NmZ1BJTyAodm9pZCkNCiB7DQotICAgIC8qIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUgKi8NCi0gICAgQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCi0gICAgICAgIEFUOTFDX0JBU0VfUElPQSwgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAwLCAgICAgICAgICAgICAgIC8qIFBlcmlwaGVyYWwgQSAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMF9USU9BMCApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTFfVElPQjAgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEE0X1RDTEswICkgKTsgLyogUGVyaXBoZXJhbCBCICovDQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQSwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkwLCAvLyBQZXJpcGhlcmFsIEENCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTBfVElPQTAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTFfVElPQjAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTRfVENMSzAgICApKTsgLy8gUGVyaXBoZXJhbCBCDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BNQ19DZmdQTUMgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFBNQyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BNQ19DZmdQTUMoIHZvaWQgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFBNQw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BNQ19DZmdQTUMgKHZvaWQpDQogew0KLSAgICBBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQotICAgICAgICBBVDkxQ19CQVNFX1BNQywgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCBBVDkxQ19JRF9TWVMgKSApOw0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9TWVMpKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUE1DX0NmZ1BJTyAqLw0KLS8qKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBQTUMgc2lnbmFscyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BNQ19DZmdQSU8oIHZvaWQgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19DZmdQSU8NCisvLyogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgUE1DIHNpZ25hbHMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QTUNfQ2ZnUElPICh2b2lkKQ0KIHsNCi0gICAgLyogQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZSAqLw0KLSAgICBBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QSU9BLCAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgIDAsICAgICAgICAgICAgICAgLyogUGVyaXBoZXJhbCBBICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEExN19QQ0sxICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMjFfUENLMSApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTMxX1BDSzIgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEExOF9QQ0syICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBNl9QQ0swICkgKTsgLyogUGVyaXBoZXJhbCBCICovDQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQSwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkwLCAvLyBQZXJpcGhlcmFsIEENCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTE3X1BDSzEgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyMV9QQ0sxICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMzFfUENLMiAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTE4X1BDSzIgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEE2X1BDSzAgICAgKSk7IC8vIFBlcmlwaGVyYWwgQg0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BRENfQ2ZnUE1DICovDQotLyoqIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBBREMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9BRENfQ2ZnUE1DKCB2b2lkICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBBREMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BRENfQ2ZnUE1DICh2b2lkKQ0KIHsNCi0gICAgQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QTUMsIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgQVQ5MUNfSURfQURDICkgKTsNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfQURDKSk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FEQ19DZmdQSU8gKi8NCi0vKiogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgQURDIHNpZ25hbHMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9BRENfQ2ZnUElPKCB2b2lkICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfQ2ZnUElPDQorLy8qIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIEFEQyBzaWduYWxzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQURDX0NmZ1BJTyAodm9pZCkNCiB7DQotICAgIC8qIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUgKi8NCi0gICAgQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCi0gICAgICAgIEFUOTFDX0JBU0VfUElPQSwgICAgICAgICAgICAgICAgICAgICAgICAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQZXJpcGhlcmFsIEEgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQThfQURUUkcgKSApOyAvKiBQZXJpcGhlcmFsIEIgKi8NCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9BLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCTAsIC8vIFBlcmlwaGVyYWwgQQ0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBOF9BRFRSRyAgICkpOyAvLyBQZXJpcGhlcmFsIEINCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPQV9DZmdQTUMgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFBJT0EgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9BX0NmZ1BNQyggdm9pZCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPQV9DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFBJT0ENCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9BX0NmZ1BNQyAodm9pZCkNCiB7DQotICAgIEFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCi0gICAgICAgIEFUOTFDX0JBU0VfUE1DLCAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IEFUOTFDX0lEX1BJT0EgKSApOw0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9QSU9BKSk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1RXSV9DZmdQTUMgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFRXSSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1RXSV9DZmdQTUMoIHZvaWQgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RXSV9DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFRXSQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1RXSV9DZmdQTUMgKHZvaWQpDQogew0KLSAgICBBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQotICAgICAgICBBVDkxQ19CQVNFX1BNQywgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCBBVDkxQ19JRF9UV0kgKSApOw0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9UV0kpKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVFdJX0NmZ1BJTyAqLw0KLS8qKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBUV0kgc2lnbmFscyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1RXSV9DZmdQSU8oIHZvaWQgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RXSV9DZmdQSU8NCisvLyogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgVFdJIHNpZ25hbHMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UV0lfQ2ZnUElPICh2b2lkKQ0KIHsNCi0gICAgLyogQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZSAqLw0KLSAgICBBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QSU9BLCAgICAgICAgICAgICAgICAgICAgIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBM19UV0QgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEE0X1RXQ0sgKSwgLyogUGVyaXBoZXJhbCBBICovDQotICAgICAgICAwICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUGVyaXBoZXJhbCBCICovDQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQSwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEzX1RXRCAgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEE0X1RXQ0sgICAgKSwgLy8gUGVyaXBoZXJhbCBBDQorCQkwKTsgLy8gUGVyaXBoZXJhbCBCDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VTMV9DZmdQTUMgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFVTMSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1VTMV9DZmdQTUMoIHZvaWQgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTMV9DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFVTMQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VTMV9DZmdQTUMgKHZvaWQpDQogew0KLSAgICBBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQotICAgICAgICBBVDkxQ19CQVNFX1BNQywgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCBBVDkxQ19JRF9VUzEgKSApOw0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9VUzEpKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVVMxX0NmZ1BJTyAqLw0KLS8qKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBVUzEgc2lnbmFscyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1VTMV9DZmdQSU8oIHZvaWQgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTMV9DZmdQSU8NCisvLyogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgVVMxIHNpZ25hbHMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VUzFfQ2ZnUElPICh2b2lkKQ0KIHsNCi0gICAgLyogQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZSAqLw0KLSAgICBBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QSU9BLCAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTIxX1JYRDEgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEEyN19EVFIxICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMjZfRENEMSApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTIyX1RYRDEgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEEyNF9SVFMxICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMjNfU0NLMSApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTI4X0RTUjEgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEEyOV9SSTEgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEEyNV9DVFMxICksIC8qIFBlcmlwaGVyYWwgQSAqLw0KLSAgICAgICAgMCApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQZXJpcGhlcmFsIEIgKi8NCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9BLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTIxX1JYRDEgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyN19EVFIxICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMjZfRENEMSAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTIyX1RYRDEgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyNF9SVFMxICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMjNfU0NLMSAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTI4X0RTUjEgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyOV9SSTEgICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMjVfQ1RTMSAgICApLCAvLyBQZXJpcGhlcmFsIEENCisJCTApOyAvLyBQZXJpcGhlcmFsIEINCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVVMwX0NmZ1BNQyAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgVVMwICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVVMwX0NmZ1BNQyggdm9pZCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVMwX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgVVMwDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVVMwX0NmZ1BNQyAodm9pZCkNCiB7DQotICAgIEFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCi0gICAgICAgIEFUOTFDX0JBU0VfUE1DLCAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IEFUOTFDX0lEX1VTMCApICk7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1VTMCkpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9VUzBfQ2ZnUElPICovDQotLyoqIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFVTMCBzaWduYWxzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVVMwX0NmZ1BJTyggdm9pZCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVMwX0NmZ1BJTw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBVUzAgc2lnbmFscw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VTMF9DZmdQSU8gKHZvaWQpDQogew0KLSAgICAvKiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlICovDQotICAgIEFUOTFGX1BJT19DZmdQZXJpcGgoDQotICAgICAgICBBVDkxQ19CQVNFX1BJT0EsIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBNV9SWEQwICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBNl9UWEQwICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBN19SVFMwICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBOF9DVFMwICksICAgLyogUGVyaXBoZXJhbCBBICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEEyX1NDSzAgKSApOyAvKiBQZXJpcGhlcmFsIEIgKi8NCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9BLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTVfUlhEMCAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTZfVFhEMCAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTdfUlRTMCAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQThfQ1RTMCAgICApLCAvLyBQZXJpcGhlcmFsIEENCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTJfU0NLMCAgICApKTsgLy8gUGVyaXBoZXJhbCBCDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VEUF9DZmdQTUMgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFVEUCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1VEUF9DZmdQTUMoIHZvaWQgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VEUF9DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFVEUA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VEUF9DZmdQTUMgKHZvaWQpDQogew0KLSAgICBBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQotICAgICAgICBBVDkxQ19CQVNFX1BNQywgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCBBVDkxQ19JRF9VRFAgKSApOw0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9VRFApKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQUlDX0NmZ1BNQyAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgQUlDICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQUlDX0NmZ1BNQyggdm9pZCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUlDX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgQUlDDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQUlDX0NmZ1BNQyAodm9pZCkNCiB7DQotICAgIEFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCi0gICAgICAgIEFUOTFDX0JBU0VfUE1DLCAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IEFUOTFDX0lEX0lSUTAgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCBBVDkxQ19JRF9GSVEgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCBBVDkxQ19JRF9JUlExICkgKTsNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfSVJRMCkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfRklRKSB8DQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9JUlExKSk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FJQ19DZmdQSU8gKi8NCi0vKiogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgQUlDIHNpZ25hbHMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9BSUNfQ2ZnUElPKCB2b2lkICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BSUNfQ2ZnUElPDQorLy8qIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIEFJQyBzaWduYWxzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQUlDX0NmZ1BJTyAodm9pZCkNCiB7DQotICAgIC8qIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUgKi8NCi0gICAgQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCi0gICAgICAgIEFUOTFDX0JBU0VfUElPQSwgICAgICAgICAgICAgICAgICAgICAgIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMzBfSVJRMSApLCAgLyogUGVyaXBoZXJhbCBBICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEEyMF9JUlEwICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMTlfRklRICkgKTsgLyogUGVyaXBoZXJhbCBCICovDQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQSwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEzMF9JUlExICAgICksIC8vIFBlcmlwaGVyYWwgQQ0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMjBfSVJRMCAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTE5X0ZJUSAgICAgKSk7IC8vIFBlcmlwaGVyYWwgQg0KIH0NCiANCiAjZW5kaWYgLy8gbGliX0FUOTFTQU03UzY0X0gNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9JQVIvQXRtZWxTQU03UzY0L2xpYl9BVDkxU0FNN1gxMjguaCBiL3BvcnRhYmxlL0lBUi9BdG1lbFNBTTdTNjQvbGliX0FUOTFTQU03WDEyOC5oCmluZGV4IDNiMmJkZjAuLjgwNWEyYmMgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0lBUi9BdG1lbFNBTTdTNjQvbGliX0FUOTFTQU03WDEyOC5oCisrKyBiL3BvcnRhYmxlL0lBUi9BdG1lbFNBTTdTNjQvbGliX0FUOTFTQU03WDEyOC5oCkBAIC0xLDQzMzIgKzEsNDU1OCBAQAotLyoqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogICAgICAgICBBVE1FTCBNaWNyb2NvbnRyb2xsZXIgU29mdHdhcmUgU3VwcG9ydCAgLSAgUk9VU1NFVCAgLSAqLw0KLS8qKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIERJU0NMQUlNRVI6ICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFUTUVMICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SICovDQotLyoqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgKi8NCi0vKiogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVCBBUkUgKi8NCi0vKiogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVRNRUwgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgKi8NCi0vKiogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCAqLw0KLS8qKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgKi8NCi0vKiogT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiAqLw0KLS8qKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyAqLw0KLS8qKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsICovDQotLyoqIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuICovDQotLyoqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogRmlsZSBOYW1lICAgICAgICAgICA6IGxpYl9BVDkxU0FNN1gxMjguaCAqLw0KLS8qKiBPYmplY3QgICAgICAgICAgICAgIDogQVQ5MVNBTTdYMTI4IGlubGluZWQgZnVuY3Rpb25zICovDQotLyoqIEdlbmVyYXRlZCAgICAgICAgICAgOiBBVDkxIFNXIEFwcGxpY2F0aW9uIEdyb3VwICAwNS8yMC8yMDA1ICgxNjoyMjoyMykgKi8NCi0vKiogKi8NCi0vKiogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfZGJndS5oLzEuMS9GcmkgSmFuIDMxIDEyOjE4OjQwIDIwMDMvLyAqLw0KLS8qKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9wbWNfU0FNN1guaC8xLjEvVHVlIEZlYiAgMSAwODozMjoxMCAyMDA1Ly8gKi8NCi0vKiogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfVlJFR182MDg1Qi5oLzEuMS9UdWUgRmViICAxIDE2OjIwOjQ3IDIwMDUvLyAqLw0KLS8qKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9yc3RjXzYwOThBLmgvMS4xL1dlZCBPY3QgIDYgMTA6Mzk6MjAgMjAwNC8vICovDQotLyoqIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3NzYy5oLzEuNC9GcmkgSmFuIDMxIDEyOjE5OjIwIDIwMDMvLyAqLw0KLS8qKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl93ZHRjXzYwODBBLmgvMS4xL1dlZCBPY3QgIDYgMTA6Mzg6MzAgMjAwNC8vICovDQotLyoqIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3VzYXJ0LmgvMS41L1RodSBOb3YgMjEgMTY6MDE6NTQgMjAwMi8vICovDQotLyoqIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3NwaTIuaC8xLjEvTW9uIEF1ZyAyNSAxNDoyMzo1MiAyMDAzLy8gKi8NCi0vKiogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfcGl0Y182MDc5QS5oLzEuMi9UdWUgTm92ICA5IDE0OjQzOjU2IDIwMDQvLyAqLw0KLS8qKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9haWNfNjA3NWIuaC8xLjEvRnJpIE1heSAyMCAxNDowMToxOSAyMDA1Ly8gKi8NCi0vKiogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfYWVzXzYxNDlhLmgvMS4xL01vbiBKYW4gMTcgMDc6NDM6MDkgMjAwNS8vICovDQotLyoqIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3R3aS5oLzEuMy9Nb24gSnVsIDE5IDE0OjI3OjU4IDIwMDQvLyAqLw0KLS8qKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9hZGMuaC8xLjYvRnJpIE9jdCAxNyAwOToxMjozOCAyMDAzLy8gKi8NCi0vKiogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfcnR0Y182MDgxQS5oLzEuMS9XZWQgT2N0ICA2IDEwOjM5OjM4IDIwMDQvLyAqLw0KLS8qKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl91ZHAuaC8xLjQvV2VkIEZlYiAxNiAwODozOTozNCAyMDA1Ly8gKi8NCi0vKiogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfZGVzM182MTUwYS5oLzEuMS9Nb24gSmFuIDE3IDA5OjE5OjE5IDIwMDUvLyAqLw0KLS8qKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl90Y18xNzUzYi5oLzEuMS9GcmkgSmFuIDMxIDEyOjIwOjAyIDIwMDMvLyAqLw0KLS8qKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9NQ19TQU03WC5oLzEuMS9UaHUgTWFyIDI1IDE1OjE5OjE0IDIwMDQvLyAqLw0KLS8qKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9waW8uaC8xLjMvRnJpIEphbiAzMSAxMjoxODo1NiAyMDAzLy8gKi8NCi0vKiogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfY2FuX0FUOTEuaC8xLjQvRnJpIE9jdCAxNyAwOToxMjo1MCAyMDAzLy8gKi8NCi0vKiogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfUFdNX1NBTS5oLzEuMy9UaHUgSmFuIDIyIDEwOjEwOjUwIDIwMDQvLyAqLw0KLS8qKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9wZGMuaC8xLjIvVHVlIEp1bCAgMiAxMzoyOTo0MCAyMDAyLy8gKi8NCi0vKiogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKy8vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qICAgICAgICAgQVRNRUwgTWljcm9jb250cm9sbGVyIFNvZnR3YXJlIFN1cHBvcnQgIC0gIFJPVVNTRVQgIC0NCisvLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBESVNDTEFJTUVSOiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVE1FTCAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUg0KKy8vKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GDQorLy8qIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQgQVJFDQorLy8qIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFUTUVMIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsDQorLy8qIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QNCisvLyogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsDQorLy8qIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YNCisvLyogTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcNCisvLyogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLA0KKy8vKiBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKy8vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIEZpbGUgTmFtZSAgICAgICAgICAgOiBsaWJfQVQ5MVNBTTdYMTI4LmgNCisvLyogT2JqZWN0ICAgICAgICAgICAgICA6IEFUOTFTQU03WDEyOCBpbmxpbmVkIGZ1bmN0aW9ucw0KKy8vKiBHZW5lcmF0ZWQgICAgICAgICAgIDogQVQ5MSBTVyBBcHBsaWNhdGlvbiBHcm91cCAgMDUvMjAvMjAwNSAoMTY6MjI6MjMpDQorLy8qDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX2RiZ3UuaC8xLjEvRnJpIEphbiAzMSAxMjoxODo0MCAyMDAzLy8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfcG1jX1NBTTdYLmgvMS4xL1R1ZSBGZWIgIDEgMDg6MzI6MTAgMjAwNS8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX1ZSRUdfNjA4NUIuaC8xLjEvVHVlIEZlYiAgMSAxNjoyMDo0NyAyMDA1Ly8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfcnN0Y182MDk4QS5oLzEuMS9XZWQgT2N0ICA2IDEwOjM5OjIwIDIwMDQvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9zc2MuaC8xLjQvRnJpIEphbiAzMSAxMjoxOToyMCAyMDAzLy8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfd2R0Y182MDgwQS5oLzEuMS9XZWQgT2N0ICA2IDEwOjM4OjMwIDIwMDQvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl91c2FydC5oLzEuNS9UaHUgTm92IDIxIDE2OjAxOjU0IDIwMDIvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9zcGkyLmgvMS4xL01vbiBBdWcgMjUgMTQ6MjM6NTIgMjAwMy8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3BpdGNfNjA3OUEuaC8xLjIvVHVlIE5vdiAgOSAxNDo0Mzo1NiAyMDA0Ly8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfYWljXzYwNzViLmgvMS4xL0ZyaSBNYXkgMjAgMTQ6MDE6MTkgMjAwNS8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX2Flc182MTQ5YS5oLzEuMS9Nb24gSmFuIDE3IDA3OjQzOjA5IDIwMDUvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl90d2kuaC8xLjMvTW9uIEp1bCAxOSAxNDoyNzo1OCAyMDA0Ly8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfYWRjLmgvMS42L0ZyaSBPY3QgMTcgMDk6MTI6MzggMjAwMy8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3J0dGNfNjA4MUEuaC8xLjEvV2VkIE9jdCAgNiAxMDozOTozOCAyMDA0Ly8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfdWRwLmgvMS40L1dlZCBGZWIgMTYgMDg6Mzk6MzQgMjAwNS8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX2RlczNfNjE1MGEuaC8xLjEvTW9uIEphbiAxNyAwOToxOToxOSAyMDA1Ly8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfdGNfMTc1M2IuaC8xLjEvRnJpIEphbiAzMSAxMjoyMDowMiAyMDAzLy8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfTUNfU0FNN1guaC8xLjEvVGh1IE1hciAyNSAxNToxOToxNCAyMDA0Ly8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfcGlvLmgvMS4zL0ZyaSBKYW4gMzEgMTI6MTg6NTYgMjAwMy8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX2Nhbl9BVDkxLmgvMS40L0ZyaSBPY3QgMTcgMDk6MTI6NTAgMjAwMy8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX1BXTV9TQU0uaC8xLjMvVGh1IEphbiAyMiAxMDoxMDo1MCAyMDA0Ly8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfcGRjLmgvMS4yL1R1ZSBKdWwgIDIgMTM6Mjk6NDAgMjAwMi8vDQorLy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiANCiAjaWZuZGVmIGxpYl9BVDkxU0FNN1gxMjhfSA0KICNkZWZpbmUgbGliX0FUOTFTQU03WDEyOF9IDQogDQogLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0qICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBBSUMNCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLSNkZWZpbmUgQVQ5MUNfQUlDX0JSQU5DSF9PUENPREUgICAgKCAoIHZvaWQgKCAqICkoKSApIDB4RTUxRkZGMjAgKSAvKiBsZHIsIHBjLCBbcGMsICMtJkYyMF0gKi8NCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBBSUMNCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKyNkZWZpbmUgQVQ5MUNfQUlDX0JSQU5DSF9PUENPREUgKCh2b2lkICgqKSAoKSkgMHhFNTFGRkYyMCkgLy8gbGRyLCBwYywgW3BjLCAjLSZGMjBdDQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQUlDX0NvbmZpZ3VyZUl0ICovDQotLyoqIFxicmllZiBJbnRlcnJ1cHQgSGFuZGxlciBJbml0aWFsaXphdGlvbiAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQUlDX0NvbmZpZ3VyZUl0KCBBVDkxUFNfQUlDIHBBaWMsICAgICAgICAgICAgICAgIC8qIFxhcmcgcG9pbnRlciB0byB0aGUgQUlDIHJlZ2lzdGVycyAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpcnFfaWQsICAgICAgICAgICAgLyogXGFyZyBpbnRlcnJ1cHQgbnVtYmVyIHRvIGluaXRpYWxpemUgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcHJpb3JpdHksICAgICAgICAgIC8qIFxhcmcgcHJpb3JpdHkgdG8gZ2l2ZSB0byB0aGUgaW50ZXJydXB0ICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNyY190eXBlLCAgICAgICAgICAvKiBcYXJnIGFjdGl2YXRpb24gYW5kIHNlbnNlIG9mIGFjdGl2YXRpb24gKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICggKiBuZXdIYW5kbGVyICkoIHZvaWQgKSApIC8qIFxhcmcgYWRkcmVzcyBvZiB0aGUgaW50ZXJydXB0IGhhbmRsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BSUNfQ29uZmlndXJlSXQNCisvLyogXGJyaWVmIEludGVycnVwdCBIYW5kbGVyIEluaXRpYWxpemF0aW9uDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BSUNfQ29uZmlndXJlSXQgKA0KKwlBVDkxUFNfQUlDIHBBaWMsICAvLyBcYXJnIHBvaW50ZXIgdG8gdGhlIEFJQyByZWdpc3RlcnMNCisJdW5zaWduZWQgaW50IGlycV9pZCwgICAgIC8vIFxhcmcgaW50ZXJydXB0IG51bWJlciB0byBpbml0aWFsaXplDQorCXVuc2lnbmVkIGludCBwcmlvcml0eSwgICAvLyBcYXJnIHByaW9yaXR5IHRvIGdpdmUgdG8gdGhlIGludGVycnVwdA0KKwl1bnNpZ25lZCBpbnQgc3JjX3R5cGUsICAgLy8gXGFyZyBhY3RpdmF0aW9uIGFuZCBzZW5zZSBvZiBhY3RpdmF0aW9uDQorCXZvaWQgKCpuZXdIYW5kbGVyKSAodm9pZCkgKSAvLyBcYXJnIGFkZHJlc3Mgb2YgdGhlIGludGVycnVwdCBoYW5kbGVyDQogew0KLSAgICB1bnNpZ25lZCBpbnQgb2xkSGFuZGxlcjsNCi0gICAgdW5zaWduZWQgaW50IG1hc2s7DQorCXVuc2lnbmVkIGludCBvbGRIYW5kbGVyOw0KKyAgICB1bnNpZ25lZCBpbnQgbWFzayA7DQogDQotICAgIG9sZEhhbmRsZXIgPSBwQWljLT5BSUNfU1ZSWyBpcnFfaWQgXTsNCisgICAgb2xkSGFuZGxlciA9IHBBaWMtPkFJQ19TVlJbaXJxX2lkXTsNCiANCi0gICAgbWFzayA9IDB4MSA8PCBpcnFfaWQ7DQotICAgIC8qKiBEaXNhYmxlIHRoZSBpbnRlcnJ1cHQgb24gdGhlIGludGVycnVwdCBjb250cm9sbGVyICovDQotICAgIHBBaWMtPkFJQ19JRENSID0gbWFzazsNCi0gICAgLyoqIFNhdmUgdGhlIGludGVycnVwdCBoYW5kbGVyIHJvdXRpbmUgcG9pbnRlciBhbmQgdGhlIGludGVycnVwdCBwcmlvcml0eSAqLw0KLSAgICBwQWljLT5BSUNfU1ZSWyBpcnFfaWQgXSA9ICggdW5zaWduZWQgaW50ICkgbmV3SGFuZGxlcjsNCi0gICAgLyoqIFN0b3JlIHRoZSBTb3VyY2UgTW9kZSBSZWdpc3RlciAqLw0KLSAgICBwQWljLT5BSUNfU01SWyBpcnFfaWQgXSA9IHNyY190eXBlIHwgcHJpb3JpdHk7DQotICAgIC8qKiBDbGVhciB0aGUgaW50ZXJydXB0IG9uIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciAqLw0KLSAgICBwQWljLT5BSUNfSUNDUiA9IG1hc2s7DQorICAgIG1hc2sgPSAweDEgPDwgaXJxX2lkIDsNCisgICAgLy8qIERpc2FibGUgdGhlIGludGVycnVwdCBvbiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXINCisgICAgcEFpYy0+QUlDX0lEQ1IgPSBtYXNrIDsNCisgICAgLy8qIFNhdmUgdGhlIGludGVycnVwdCBoYW5kbGVyIHJvdXRpbmUgcG9pbnRlciBhbmQgdGhlIGludGVycnVwdCBwcmlvcml0eQ0KKyAgICBwQWljLT5BSUNfU1ZSW2lycV9pZF0gPSAodW5zaWduZWQgaW50KSBuZXdIYW5kbGVyIDsNCisgICAgLy8qIFN0b3JlIHRoZSBTb3VyY2UgTW9kZSBSZWdpc3Rlcg0KKyAgICBwQWljLT5BSUNfU01SW2lycV9pZF0gPSBzcmNfdHlwZSB8IHByaW9yaXR5ICA7DQorICAgIC8vKiBDbGVhciB0aGUgaW50ZXJydXB0IG9uIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlcg0KKyAgICBwQWljLT5BSUNfSUNDUiA9IG1hc2sgOw0KIA0KLSAgICByZXR1cm4gb2xkSGFuZGxlcjsNCisJcmV0dXJuIG9sZEhhbmRsZXI7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FJQ19FbmFibGVJdCAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIGNvcnJlc3BvbmRpbmcgSVQgbnVtYmVyICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQUlDX0VuYWJsZUl0KCBBVDkxUFNfQUlDIHBBaWMsICAgICAgLyogXGFyZyBwb2ludGVyIHRvIHRoZSBBSUMgcmVnaXN0ZXJzICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpcnFfaWQgKSAvKiBcYXJnIGludGVycnVwdCBudW1iZXIgdG8gaW5pdGlhbGl6ZSAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FJQ19FbmFibGVJdA0KKy8vKiBcYnJpZWYgRW5hYmxlIGNvcnJlc3BvbmRpbmcgSVQgbnVtYmVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQUlDX0VuYWJsZUl0ICgNCisJQVQ5MVBTX0FJQyBwQWljLCAgICAgIC8vIFxhcmcgcG9pbnRlciB0byB0aGUgQUlDIHJlZ2lzdGVycw0KKwl1bnNpZ25lZCBpbnQgaXJxX2lkICkgLy8gXGFyZyBpbnRlcnJ1cHQgbnVtYmVyIHRvIGluaXRpYWxpemUNCiB7DQotICAgIC8qKiBFbmFibGUgdGhlIGludGVycnVwdCBvbiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIgKi8NCi0gICAgcEFpYy0+QUlDX0lFQ1IgPSAweDEgPDwgaXJxX2lkOw0KKyAgICAvLyogRW5hYmxlIHRoZSBpbnRlcnJ1cHQgb24gdGhlIGludGVycnVwdCBjb250cm9sbGVyDQorICAgIHBBaWMtPkFJQ19JRUNSID0gMHgxIDw8IGlycV9pZCA7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FJQ19EaXNhYmxlSXQgKi8NCi0vKiogXGJyaWVmIERpc2FibGUgY29ycmVzcG9uZGluZyBJVCBudW1iZXIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9BSUNfRGlzYWJsZUl0KCBBVDkxUFNfQUlDIHBBaWMsICAgICAgLyogXGFyZyBwb2ludGVyIHRvIHRoZSBBSUMgcmVnaXN0ZXJzICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaXJxX2lkICkgLyogXGFyZyBpbnRlcnJ1cHQgbnVtYmVyIHRvIGluaXRpYWxpemUgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BSUNfRGlzYWJsZUl0DQorLy8qIFxicmllZiBEaXNhYmxlIGNvcnJlc3BvbmRpbmcgSVQgbnVtYmVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQUlDX0Rpc2FibGVJdCAoDQorCUFUOTFQU19BSUMgcEFpYywgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gdGhlIEFJQyByZWdpc3RlcnMNCisJdW5zaWduZWQgaW50IGlycV9pZCApIC8vIFxhcmcgaW50ZXJydXB0IG51bWJlciB0byBpbml0aWFsaXplDQogew0KICAgICB1bnNpZ25lZCBpbnQgbWFzayA9IDB4MSA8PCBpcnFfaWQ7DQotDQotICAgIC8qKiBEaXNhYmxlIHRoZSBpbnRlcnJ1cHQgb24gdGhlIGludGVycnVwdCBjb250cm9sbGVyICovDQotICAgIHBBaWMtPkFJQ19JRENSID0gbWFzazsNCi0gICAgLyoqIENsZWFyIHRoZSBpbnRlcnJ1cHQgb24gdGhlIEludGVycnVwdCBDb250cm9sbGVyICggaWYgb25lIGlzIHBlbmRpbmcgKSAqLw0KLSAgICBwQWljLT5BSUNfSUNDUiA9IG1hc2s7DQorICAgIC8vKiBEaXNhYmxlIHRoZSBpbnRlcnJ1cHQgb24gdGhlIGludGVycnVwdCBjb250cm9sbGVyDQorICAgIHBBaWMtPkFJQ19JRENSID0gbWFzayA7DQorICAgIC8vKiBDbGVhciB0aGUgaW50ZXJydXB0IG9uIHRoZSBJbnRlcnJ1cHQgQ29udHJvbGxlciAoIGlmIG9uZSBpcyBwZW5kaW5nICkNCisgICAgcEFpYy0+QUlDX0lDQ1IgPSBtYXNrIDsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQUlDX0NsZWFySXQgKi8NCi0vKiogXGJyaWVmIENsZWFyIGNvcnJlc3BvbmRpbmcgSVQgbnVtYmVyICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQUlDX0NsZWFySXQoIEFUOTFQU19BSUMgcEFpYywgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gdGhlIEFJQyByZWdpc3RlcnMgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaXJxX2lkICkgLyogXGFyZyBpbnRlcnJ1cHQgbnVtYmVyIHRvIGluaXRpYWxpemUgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BSUNfQ2xlYXJJdA0KKy8vKiBcYnJpZWYgQ2xlYXIgY29ycmVzcG9uZGluZyBJVCBudW1iZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BSUNfQ2xlYXJJdCAoDQorCUFUOTFQU19BSUMgcEFpYywgICAgIC8vIFxhcmcgcG9pbnRlciB0byB0aGUgQUlDIHJlZ2lzdGVycw0KKwl1bnNpZ25lZCBpbnQgaXJxX2lkKSAvLyBcYXJnIGludGVycnVwdCBudW1iZXIgdG8gaW5pdGlhbGl6ZQ0KIHsNCi0gICAgLyoqIENsZWFyIHRoZSBpbnRlcnJ1cHQgb24gdGhlIEludGVycnVwdCBDb250cm9sbGVyICggaWYgb25lIGlzIHBlbmRpbmcgKSAqLw0KLSAgICBwQWljLT5BSUNfSUNDUiA9ICggMHgxIDw8IGlycV9pZCApOw0KKyAgICAvLyogQ2xlYXIgdGhlIGludGVycnVwdCBvbiB0aGUgSW50ZXJydXB0IENvbnRyb2xsZXIgKCBpZiBvbmUgaXMgcGVuZGluZyApDQorICAgIHBBaWMtPkFJQ19JQ0NSID0gKDB4MSA8PCBpcnFfaWQpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BSUNfQWNrbm93bGVkZ2VJdCAqLw0KLS8qKiBcYnJpZWYgQWNrbm93bGVkZ2UgY29ycmVzcG9uZGluZyBJVCBudW1iZXIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9BSUNfQWNrbm93bGVkZ2VJdCggQVQ5MVBTX0FJQyBwQWljICkgLyogXGFyZyBwb2ludGVyIHRvIHRoZSBBSUMgcmVnaXN0ZXJzICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUlDX0Fja25vd2xlZGdlSXQNCisvLyogXGJyaWVmIEFja25vd2xlZGdlIGNvcnJlc3BvbmRpbmcgSVQgbnVtYmVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQUlDX0Fja25vd2xlZGdlSXQgKA0KKwlBVDkxUFNfQUlDIHBBaWMpICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gdGhlIEFJQyByZWdpc3RlcnMNCiB7DQogICAgIHBBaWMtPkFJQ19FT0lDUiA9IHBBaWMtPkFJQ19FT0lDUjsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQUlDX1NldEV4Y2VwdGlvblZlY3RvciAqLw0KLS8qKiBcYnJpZWYgQ29uZmlndXJlIHZlY3RvciBoYW5kbGVyICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BSUNfU2V0RXhjZXB0aW9uVmVjdG9yKCB1bnNpZ25lZCBpbnQgKiBwVmVjdG9yLCAvKiBcYXJnIHBvaW50ZXIgdG8gdGhlIEFJQyByZWdpc3RlcnMgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoICogSGFuZGxlciApKCkgKSAgLyogXGFyZyBJbnRlcnJ1cHQgSGFuZGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FJQ19TZXRFeGNlcHRpb25WZWN0b3INCisvLyogXGJyaWVmIENvbmZpZ3VyZSB2ZWN0b3IgaGFuZGxlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgIEFUOTFGX0FJQ19TZXRFeGNlcHRpb25WZWN0b3IgKA0KKwl1bnNpZ25lZCBpbnQgKnBWZWN0b3IsIC8vIFxhcmcgcG9pbnRlciB0byB0aGUgQUlDIHJlZ2lzdGVycw0KKwl2b2lkICgqSGFuZGxlcikgKCkgKSAgIC8vIFxhcmcgSW50ZXJydXB0IEhhbmRsZXINCiB7DQotICAgIHVuc2lnbmVkIGludCBvbGRWZWN0b3IgPSAqcFZlY3RvcjsNCisJdW5zaWduZWQgaW50IG9sZFZlY3RvciA9ICpwVmVjdG9yOw0KIA0KLSAgICBpZiggKCB1bnNpZ25lZCBpbnQgKSBIYW5kbGVyID09ICggdW5zaWduZWQgaW50ICkgQVQ5MUNfQUlDX0JSQU5DSF9PUENPREUgKQ0KLSAgICB7DQotICAgICAgICAqcFZlY3RvciA9ICggdW5zaWduZWQgaW50ICkgQVQ5MUNfQUlDX0JSQU5DSF9PUENPREU7DQotICAgIH0NCi0gICAgZWxzZQ0KLSAgICB7DQotICAgICAgICAqcFZlY3RvciA9ICggKCAoICggKCB1bnNpZ25lZCBpbnQgKSBIYW5kbGVyICkgLSAoICggdW5zaWduZWQgaW50ICkgcFZlY3RvciApIC0gMHg4ICkgPj4gMiApICYgMHgwMEZGRkZGRiApIHwgMHhFQTAwMDAwMDsNCi0gICAgfQ0KKwlpZiAoKHVuc2lnbmVkIGludCkgSGFuZGxlciA9PSAodW5zaWduZWQgaW50KSBBVDkxQ19BSUNfQlJBTkNIX09QQ09ERSkNCisJCSpwVmVjdG9yID0gKHVuc2lnbmVkIGludCkgQVQ5MUNfQUlDX0JSQU5DSF9PUENPREU7DQorCWVsc2UNCisJCSpwVmVjdG9yID0gKCgoKCh1bnNpZ25lZCBpbnQpIEhhbmRsZXIpIC0gKCh1bnNpZ25lZCBpbnQpIHBWZWN0b3IpIC0gMHg4KSA+PiAyKSAmIDB4MDBGRkZGRkYpIHwgMHhFQTAwMDAwMDsNCiANCi0gICAgcmV0dXJuIG9sZFZlY3RvcjsNCisJcmV0dXJuIG9sZFZlY3RvcjsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQUlDX1RyaWcgKi8NCi0vKiogXGJyaWVmIFRyaWcgYW4gSVQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9BSUNfVHJpZyggQVQ5MVBTX0FJQyBwQWljLCAgICAgIC8qIFxhcmcgcG9pbnRlciB0byB0aGUgQUlDIHJlZ2lzdGVycyAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpcnFfaWQgKSAvKiBcYXJnIGludGVycnVwdCBudW1iZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BSUNfVHJpZw0KKy8vKiBcYnJpZWYgVHJpZyBhbiBJVA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkICBBVDkxRl9BSUNfVHJpZyAoDQorCUFUOTFQU19BSUMgcEFpYywgICAgIC8vIFxhcmcgcG9pbnRlciB0byB0aGUgQUlDIHJlZ2lzdGVycw0KKwl1bnNpZ25lZCBpbnQgaXJxX2lkKSAvLyBcYXJnIGludGVycnVwdCBudW1iZXINCiB7DQotICAgIHBBaWMtPkFJQ19JU0NSID0gKCAweDEgPDwgaXJxX2lkICk7DQorCXBBaWMtPkFJQ19JU0NSID0gKDB4MSA8PCBpcnFfaWQpIDsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQUlDX0lzQWN0aXZlICovDQotLyoqIFxicmllZiBUZXN0IGlmIGFuIElUIGlzIGFjdGl2ZSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQUlDX0lzQWN0aXZlKCBBVDkxUFNfQUlDIHBBaWMsICAgICAgLyogXGFyZyBwb2ludGVyIHRvIHRoZSBBSUMgcmVnaXN0ZXJzICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGlycV9pZCApIC8qIFxhcmcgSW50ZXJydXB0IE51bWJlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FJQ19Jc0FjdGl2ZQ0KKy8vKiBcYnJpZWYgVGVzdCBpZiBhbiBJVCBpcyBhY3RpdmUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50ICBBVDkxRl9BSUNfSXNBY3RpdmUgKA0KKwlBVDkxUFNfQUlDIHBBaWMsICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gdGhlIEFJQyByZWdpc3RlcnMNCisJdW5zaWduZWQgaW50IGlycV9pZCkgLy8gXGFyZyBJbnRlcnJ1cHQgTnVtYmVyDQogew0KLSAgICByZXR1cm4oIHBBaWMtPkFJQ19JU1IgJiAoIDB4MSA8PCBpcnFfaWQgKSApOw0KKwlyZXR1cm4gKHBBaWMtPkFJQ19JU1IgJiAoMHgxIDw8IGlycV9pZCkpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BSUNfSXNQZW5kaW5nICovDQotLyoqIFxicmllZiBUZXN0IGlmIGFuIElUIGlzIHBlbmRpbmcgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FJQ19Jc1BlbmRpbmcoIEFUOTFQU19BSUMgcEFpYywgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gdGhlIEFJQyByZWdpc3RlcnMgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGlycV9pZCApIC8qIFxhcmcgSW50ZXJydXB0IE51bWJlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FJQ19Jc1BlbmRpbmcNCisvLyogXGJyaWVmIFRlc3QgaWYgYW4gSVQgaXMgcGVuZGluZw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgIEFUOTFGX0FJQ19Jc1BlbmRpbmcgKA0KKwlBVDkxUFNfQUlDIHBBaWMsICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gdGhlIEFJQyByZWdpc3RlcnMNCisJdW5zaWduZWQgaW50IGlycV9pZCkgLy8gXGFyZyBJbnRlcnJ1cHQgTnVtYmVyDQogew0KLSAgICByZXR1cm4oIHBBaWMtPkFJQ19JUFIgJiAoIDB4MSA8PCBpcnFfaWQgKSApOw0KKwlyZXR1cm4gKHBBaWMtPkFJQ19JUFIgJiAoMHgxIDw8IGlycV9pZCkpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BSUNfT3BlbiAqLw0KLS8qKiBcYnJpZWYgU2V0IGV4Y2VwdGlvbiB2ZWN0b3JzIGFuZCBBSUMgcmVnaXN0ZXJzIHRvIGRlZmF1bHQgdmFsdWVzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQUlDX09wZW4oIEFUOTFQU19BSUMgcEFpYywgICAgICAgICAgICAgIC8qIFxhcmcgcG9pbnRlciB0byB0aGUgQUlDIHJlZ2lzdGVycyAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCAqIElycUhhbmRsZXIgKSgpLCAgICAgIC8qIFxhcmcgRGVmYXVsdCBJUlEgdmVjdG9yIGV4Y2VwdGlvbiAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCAqIEZpcUhhbmRsZXIgKSgpLCAgICAgIC8qIFxhcmcgRGVmYXVsdCBGSVEgdmVjdG9yIGV4Y2VwdGlvbiAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCAqIERlZmF1bHRIYW5kbGVyICkoKSwgIC8qIFxhcmcgRGVmYXVsdCBIYW5kbGVyIHNldCBpbiBJU1IgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICggKiBTcHVyaW91c0hhbmRsZXIgKSgpLCAvKiBcYXJnIERlZmF1bHQgU3B1cmlvdXMgSGFuZGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwcm90ZWN0TW9kZSApICAgIC8qIFxhcmcgRGVidWcgQ29udHJvbCBSZWdpc3RlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FJQ19PcGVuDQorLy8qIFxicmllZiBTZXQgZXhjZXB0aW9uIHZlY3RvcnMgYW5kIEFJQyByZWdpc3RlcnMgdG8gZGVmYXVsdCB2YWx1ZXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BSUNfT3BlbigNCisJQVQ5MVBTX0FJQyBwQWljLCAgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIHRoZSBBSUMgcmVnaXN0ZXJzDQorCXZvaWQgKCpJcnFIYW5kbGVyKSAoKSwgIC8vIFxhcmcgRGVmYXVsdCBJUlEgdmVjdG9yIGV4Y2VwdGlvbg0KKwl2b2lkICgqRmlxSGFuZGxlcikgKCksICAvLyBcYXJnIERlZmF1bHQgRklRIHZlY3RvciBleGNlcHRpb24NCisJdm9pZCAoKkRlZmF1bHRIYW5kbGVyKSAgKCksIC8vIFxhcmcgRGVmYXVsdCBIYW5kbGVyIHNldCBpbiBJU1INCisJdm9pZCAoKlNwdXJpb3VzSGFuZGxlcikgKCksIC8vIFxhcmcgRGVmYXVsdCBTcHVyaW91cyBIYW5kbGVyDQorCXVuc2lnbmVkIGludCBwcm90ZWN0TW9kZSkgICAvLyBcYXJnIERlYnVnIENvbnRyb2wgUmVnaXN0ZXINCiB7DQotICAgIGludCBpOw0KKwlpbnQgaTsNCiANCi0gICAgLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cyBhbmQgc2V0IElWUiB0byB0aGUgZGVmYXVsdCBoYW5kbGVyICovDQotICAgIGZvciggaSA9IDA7IGkgPCAzMjsgKytpICkNCi0gICAgew0KLSAgICAgICAgQVQ5MUZfQUlDX0Rpc2FibGVJdCggcEFpYywgaSApOw0KLSAgICAgICAgQVQ5MUZfQUlDX0NvbmZpZ3VyZUl0KCBwQWljLCBpLCBBVDkxQ19BSUNfUFJJT1JfTE9XRVNULCBBVDkxQ19BSUNfU1JDVFlQRV9ISUdIX0xFVkVMLCBEZWZhdWx0SGFuZGxlciApOw0KLSAgICB9DQorCS8vIERpc2FibGUgYWxsIGludGVycnVwdHMgYW5kIHNldCBJVlIgdG8gdGhlIGRlZmF1bHQgaGFuZGxlcg0KKwlmb3IgKGkgPSAwOyBpIDwgMzI7ICsraSkgew0KKwkJQVQ5MUZfQUlDX0Rpc2FibGVJdChwQWljLCBpKTsNCisJCUFUOTFGX0FJQ19Db25maWd1cmVJdChwQWljLCBpLCBBVDkxQ19BSUNfUFJJT1JfTE9XRVNULCBBVDkxQ19BSUNfU1JDVFlQRV9ISUdIX0xFVkVMLCBEZWZhdWx0SGFuZGxlcik7DQorCX0NCiANCi0gICAgLyogU2V0IHRoZSBJUlEgZXhjZXB0aW9uIHZlY3RvciAqLw0KLSAgICBBVDkxRl9BSUNfU2V0RXhjZXB0aW9uVmVjdG9yKCAoIHVuc2lnbmVkIGludCAqICkgMHgxOCwgSXJxSGFuZGxlciApOw0KLSAgICAvKiBTZXQgdGhlIEZhc3QgSW50ZXJydXB0IGV4Y2VwdGlvbiB2ZWN0b3IgKi8NCi0gICAgQVQ5MUZfQUlDX1NldEV4Y2VwdGlvblZlY3RvciggKCB1bnNpZ25lZCBpbnQgKiApIDB4MUMsIEZpcUhhbmRsZXIgKTsNCisJLy8gU2V0IHRoZSBJUlEgZXhjZXB0aW9uIHZlY3Rvcg0KKwlBVDkxRl9BSUNfU2V0RXhjZXB0aW9uVmVjdG9yKCh1bnNpZ25lZCBpbnQgKikgMHgxOCwgSXJxSGFuZGxlcik7DQorCS8vIFNldCB0aGUgRmFzdCBJbnRlcnJ1cHQgZXhjZXB0aW9uIHZlY3Rvcg0KKwlBVDkxRl9BSUNfU2V0RXhjZXB0aW9uVmVjdG9yKCh1bnNpZ25lZCBpbnQgKikgMHgxQywgRmlxSGFuZGxlcik7DQogDQotICAgIHBBaWMtPkFJQ19TUFUgPSAoIHVuc2lnbmVkIGludCApIFNwdXJpb3VzSGFuZGxlcjsNCi0gICAgcEFpYy0+QUlDX0RDUiA9IHByb3RlY3RNb2RlOw0KKwlwQWljLT5BSUNfU1BVID0gKHVuc2lnbmVkIGludCkgU3B1cmlvdXNIYW5kbGVyOw0KKwlwQWljLT5BSUNfRENSID0gcHJvdGVjdE1vZGU7DQorfQ0KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgUERDDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QRENfU2V0TmV4dFJ4DQorLy8qIFxicmllZiBTZXQgdGhlIG5leHQgcmVjZWl2ZSB0cmFuc2ZlciBkZXNjcmlwdG9yDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUERDX1NldE5leHRSeCAoDQorCUFUOTFQU19QREMgcFBEQywgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyDQorCWNoYXIgKmFkZHJlc3MsICAgICAgIC8vIFxhcmcgYWRkcmVzcyB0byB0aGUgbmV4dCBibG9jIHRvIGJlIHJlY2VpdmVkDQorCXVuc2lnbmVkIGludCBieXRlcykgIC8vIFxhcmcgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHJlY2VpdmVkDQorew0KKwlwUERDLT5QRENfUk5QUiA9ICh1bnNpZ25lZCBpbnQpIGFkZHJlc3M7DQorCXBQREMtPlBEQ19STkNSID0gYnl0ZXM7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BEQ19TZXROZXh0VHgNCisvLyogXGJyaWVmIFNldCB0aGUgbmV4dCB0cmFuc21pdCB0cmFuc2ZlciBkZXNjcmlwdG9yDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUERDX1NldE5leHRUeCAoDQorCUFUOTFQU19QREMgcFBEQywgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXINCisJY2hhciAqYWRkcmVzcywgICAgICAgICAvLyBcYXJnIGFkZHJlc3MgdG8gdGhlIG5leHQgYmxvYyB0byBiZSB0cmFuc21pdHRlZA0KKwl1bnNpZ25lZCBpbnQgYnl0ZXMpICAgIC8vIFxhcmcgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHRyYW5zbWl0dGVkDQorew0KKwlwUERDLT5QRENfVE5QUiA9ICh1bnNpZ25lZCBpbnQpIGFkZHJlc3M7DQorCXBQREMtPlBEQ19UTkNSID0gYnl0ZXM7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BEQ19TZXRSeA0KKy8vKiBcYnJpZWYgU2V0IHRoZSByZWNlaXZlIHRyYW5zZmVyIGRlc2NyaXB0b3INCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QRENfU2V0UnggKA0KKwlBVDkxUFNfUERDIHBQREMsICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyDQorCWNoYXIgKmFkZHJlc3MsICAgICAgICAgLy8gXGFyZyBhZGRyZXNzIHRvIHRoZSBuZXh0IGJsb2MgdG8gYmUgcmVjZWl2ZWQNCisJdW5zaWduZWQgaW50IGJ5dGVzKSAgICAvLyBcYXJnIG51bWJlciBvZiBieXRlcyB0byBiZSByZWNlaXZlZA0KK3sNCisJcFBEQy0+UERDX1JQUiA9ICh1bnNpZ25lZCBpbnQpIGFkZHJlc3M7DQorCXBQREMtPlBEQ19SQ1IgPSBieXRlczsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUERDX1NldFR4DQorLy8qIFxicmllZiBTZXQgdGhlIHRyYW5zbWl0IHRyYW5zZmVyIGRlc2NyaXB0b3INCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QRENfU2V0VHggKA0KKwlBVDkxUFNfUERDIHBQREMsICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyDQorCWNoYXIgKmFkZHJlc3MsICAgICAgICAgLy8gXGFyZyBhZGRyZXNzIHRvIHRoZSBuZXh0IGJsb2MgdG8gYmUgdHJhbnNtaXR0ZWQNCisJdW5zaWduZWQgaW50IGJ5dGVzKSAgICAvLyBcYXJnIG51bWJlciBvZiBieXRlcyB0byBiZSB0cmFuc21pdHRlZA0KK3sNCisJcFBEQy0+UERDX1RQUiA9ICh1bnNpZ25lZCBpbnQpIGFkZHJlc3M7DQorCXBQREMtPlBEQ19UQ1IgPSBieXRlczsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUERDX0VuYWJsZVR4DQorLy8qIFxicmllZiBFbmFibGUgdHJhbnNtaXQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QRENfRW5hYmxlVHggKA0KKwlBVDkxUFNfUERDIHBQREMgKSAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlcg0KK3sNCisJcFBEQy0+UERDX1BUQ1IgPSBBVDkxQ19QRENfVFhURU47DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BEQ19FbmFibGVSeA0KKy8vKiBcYnJpZWYgRW5hYmxlIHJlY2VpdmUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QRENfRW5hYmxlUnggKA0KKwlBVDkxUFNfUERDIHBQREMgKSAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlcg0KK3sNCisJcFBEQy0+UERDX1BUQ1IgPSBBVDkxQ19QRENfUlhURU47DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BEQ19EaXNhYmxlVHgNCisvLyogXGJyaWVmIERpc2FibGUgdHJhbnNtaXQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QRENfRGlzYWJsZVR4ICgNCisJQVQ5MVBTX1BEQyBwUERDICkgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXINCit7DQorCXBQREMtPlBEQ19QVENSID0gQVQ5MUNfUERDX1RYVERJUzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUERDX0Rpc2FibGVSeA0KKy8vKiBcYnJpZWYgRGlzYWJsZSByZWNlaXZlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUERDX0Rpc2FibGVSeCAoDQorCUFUOTFQU19QREMgcFBEQyApICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyDQorew0KKwlwUERDLT5QRENfUFRDUiA9IEFUOTFDX1BEQ19SWFRESVM7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BEQ19Jc1R4RW1wdHkNCisvLyogXGJyaWVmIFRlc3QgaWYgdGhlIGN1cnJlbnQgdHJhbnNmZXIgZGVzY3JpcHRvciBoYXMgYmVlbiBzZW50DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9QRENfSXNUeEVtcHR5ICggLy8gXHJldHVybiByZXR1cm4gMSBpZiB0cmFuc2ZlciBpcyBjb21wbGV0ZQ0KKwlBVDkxUFNfUERDIHBQREMgKSAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlcg0KK3sNCisJcmV0dXJuICEocFBEQy0+UERDX1RDUik7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BEQ19Jc05leHRUeEVtcHR5DQorLy8qIFxicmllZiBUZXN0IGlmIHRoZSBuZXh0IHRyYW5zZmVyIGRlc2NyaXB0b3IgaGFzIGJlZW4gbW92ZWQgdG8gdGhlIGN1cnJlbnQgdGQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1BEQ19Jc05leHRUeEVtcHR5ICggLy8gXHJldHVybiByZXR1cm4gMSBpZiB0cmFuc2ZlciBpcyBjb21wbGV0ZQ0KKwlBVDkxUFNfUERDIHBQREMgKSAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlcg0KK3sNCisJcmV0dXJuICEocFBEQy0+UERDX1ROQ1IpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QRENfSXNSeEVtcHR5DQorLy8qIFxicmllZiBUZXN0IGlmIHRoZSBjdXJyZW50IHRyYW5zZmVyIGRlc2NyaXB0b3IgaGFzIGJlZW4gZmlsbGVkDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9QRENfSXNSeEVtcHR5ICggLy8gXHJldHVybiByZXR1cm4gMSBpZiB0cmFuc2ZlciBpcyBjb21wbGV0ZQ0KKwlBVDkxUFNfUERDIHBQREMgKSAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlcg0KK3sNCisJcmV0dXJuICEocFBEQy0+UERDX1JDUik7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BEQ19Jc05leHRSeEVtcHR5DQorLy8qIFxicmllZiBUZXN0IGlmIHRoZSBuZXh0IHRyYW5zZmVyIGRlc2NyaXB0b3IgaGFzIGJlZW4gbW92ZWQgdG8gdGhlIGN1cnJlbnQgdGQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1BEQ19Jc05leHRSeEVtcHR5ICggLy8gXHJldHVybiByZXR1cm4gMSBpZiB0cmFuc2ZlciBpcyBjb21wbGV0ZQ0KKwlBVDkxUFNfUERDIHBQREMgKSAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlcg0KK3sNCisJcmV0dXJuICEocFBEQy0+UERDX1JOQ1IpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QRENfT3Blbg0KKy8vKiBcYnJpZWYgT3BlbiBQREM6IGRpc2FibGUgVFggYW5kIFJYIHJlc2V0IHRyYW5zZmVyIGRlc2NyaXB0b3JzLCByZS1lbmFibGUgUlggYW5kIFRYDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUERDX09wZW4gKA0KKwlBVDkxUFNfUERDIHBQREMpICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyDQorew0KKyAgICAvLyogRGlzYWJsZSB0aGUgUlggYW5kIFRYIFBEQyB0cmFuc2ZlciByZXF1ZXN0cw0KKwlBVDkxRl9QRENfRGlzYWJsZVJ4KHBQREMpOw0KKwlBVDkxRl9QRENfRGlzYWJsZVR4KHBQREMpOw0KKw0KKwkvLyogUmVzZXQgYWxsIENvdW50ZXIgcmVnaXN0ZXIgTmV4dCBidWZmZXIgZmlyc3QNCisJQVQ5MUZfUERDX1NldE5leHRUeChwUERDLCAoY2hhciAqKSAwLCAwKTsNCisJQVQ5MUZfUERDX1NldE5leHRSeChwUERDLCAoY2hhciAqKSAwLCAwKTsNCisJQVQ5MUZfUERDX1NldFR4KHBQREMsIChjaGFyICopIDAsIDApOw0KKwlBVDkxRl9QRENfU2V0UngocFBEQywgKGNoYXIgKikgMCwgMCk7DQorDQorICAgIC8vKiBFbmFibGUgdGhlIFJYIGFuZCBUWCBQREMgdHJhbnNmZXIgcmVxdWVzdHMNCisJQVQ5MUZfUERDX0VuYWJsZVJ4KHBQREMpOw0KKwlBVDkxRl9QRENfRW5hYmxlVHgocFBEQyk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BEQ19DbG9zZQ0KKy8vKiBcYnJpZWYgQ2xvc2UgUERDOiBkaXNhYmxlIFRYIGFuZCBSWCByZXNldCB0cmFuc2ZlciBkZXNjcmlwdG9ycw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BEQ19DbG9zZSAoDQorCUFUOTFQU19QREMgcFBEQykgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXINCit7DQorICAgIC8vKiBEaXNhYmxlIHRoZSBSWCBhbmQgVFggUERDIHRyYW5zZmVyIHJlcXVlc3RzDQorCUFUOTFGX1BEQ19EaXNhYmxlUngocFBEQyk7DQorCUFUOTFGX1BEQ19EaXNhYmxlVHgocFBEQyk7DQorDQorCS8vKiBSZXNldCBhbGwgQ291bnRlciByZWdpc3RlciBOZXh0IGJ1ZmZlciBmaXJzdA0KKwlBVDkxRl9QRENfU2V0TmV4dFR4KHBQREMsIChjaGFyICopIDAsIDApOw0KKwlBVDkxRl9QRENfU2V0TmV4dFJ4KHBQREMsIChjaGFyICopIDAsIDApOw0KKwlBVDkxRl9QRENfU2V0VHgocFBEQywgKGNoYXIgKikgMCwgMCk7DQorCUFUOTFGX1BEQ19TZXRSeChwUERDLCAoY2hhciAqKSAwLCAwKTsNCisNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUERDX1NlbmRGcmFtZQ0KKy8vKiBcYnJpZWYgQ2xvc2UgUERDOiBkaXNhYmxlIFRYIGFuZCBSWCByZXNldCB0cmFuc2ZlciBkZXNjcmlwdG9ycw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUERDX1NlbmRGcmFtZSgNCisJQVQ5MVBTX1BEQyBwUERDLA0KKwljaGFyICpwQnVmZmVyLA0KKwl1bnNpZ25lZCBpbnQgc3pCdWZmZXIsDQorCWNoYXIgKnBOZXh0QnVmZmVyLA0KKwl1bnNpZ25lZCBpbnQgc3pOZXh0QnVmZmVyICkNCit7DQorCWlmIChBVDkxRl9QRENfSXNUeEVtcHR5KHBQREMpKSB7DQorCQkvLyogQnVmZmVyIGFuZCBuZXh0IGJ1ZmZlciBjYW4gYmUgaW5pdGlhbGl6ZWQNCisJCUFUOTFGX1BEQ19TZXRUeChwUERDLCBwQnVmZmVyLCBzekJ1ZmZlcik7DQorCQlBVDkxRl9QRENfU2V0TmV4dFR4KHBQREMsIHBOZXh0QnVmZmVyLCBzek5leHRCdWZmZXIpOw0KKwkJcmV0dXJuIDI7DQorCX0NCisJZWxzZSBpZiAoQVQ5MUZfUERDX0lzTmV4dFR4RW1wdHkocFBEQykpIHsNCisJCS8vKiBPbmx5IG9uZSBidWZmZXIgY2FuIGJlIGluaXRpYWxpemVkDQorCQlBVDkxRl9QRENfU2V0TmV4dFR4KHBQREMsIHBCdWZmZXIsIHN6QnVmZmVyKTsNCisJCXJldHVybiAxOw0KKwl9DQorCWVsc2Ugew0KKwkJLy8qIEFsbCBidWZmZXIgYXJlIGluIHVzZS4uLg0KKwkJcmV0dXJuIDA7DQorCX0NCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUERDX1JlY2VpdmVGcmFtZQ0KKy8vKiBcYnJpZWYgQ2xvc2UgUERDOiBkaXNhYmxlIFRYIGFuZCBSWCByZXNldCB0cmFuc2ZlciBkZXNjcmlwdG9ycw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUERDX1JlY2VpdmVGcmFtZSAoDQorCUFUOTFQU19QREMgcFBEQywNCisJY2hhciAqcEJ1ZmZlciwNCisJdW5zaWduZWQgaW50IHN6QnVmZmVyLA0KKwljaGFyICpwTmV4dEJ1ZmZlciwNCisJdW5zaWduZWQgaW50IHN6TmV4dEJ1ZmZlciApDQorew0KKwlpZiAoQVQ5MUZfUERDX0lzUnhFbXB0eShwUERDKSkgew0KKwkJLy8qIEJ1ZmZlciBhbmQgbmV4dCBidWZmZXIgY2FuIGJlIGluaXRpYWxpemVkDQorCQlBVDkxRl9QRENfU2V0UngocFBEQywgcEJ1ZmZlciwgc3pCdWZmZXIpOw0KKwkJQVQ5MUZfUERDX1NldE5leHRSeChwUERDLCBwTmV4dEJ1ZmZlciwgc3pOZXh0QnVmZmVyKTsNCisJCXJldHVybiAyOw0KKwl9DQorCWVsc2UgaWYgKEFUOTFGX1BEQ19Jc05leHRSeEVtcHR5KHBQREMpKSB7DQorCQkvLyogT25seSBvbmUgYnVmZmVyIGNhbiBiZSBpbml0aWFsaXplZA0KKwkJQVQ5MUZfUERDX1NldE5leHRSeChwUERDLCBwQnVmZmVyLCBzekJ1ZmZlcik7DQorCQlyZXR1cm4gMTsNCisJfQ0KKwllbHNlIHsNCisJCS8vKiBBbGwgYnVmZmVyIGFyZSBpbiB1c2UuLi4NCisJCXJldHVybiAwOw0KKwl9DQorfQ0KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgREJHVQ0KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfREJHVV9JbnRlcnJ1cHRFbmFibGUNCisvLyogXGJyaWVmIEVuYWJsZSBEQkdVIEludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0RCR1VfSW50ZXJydXB0RW5hYmxlKA0KKyAgICAgICAgQVQ5MVBTX0RCR1UgcERiZ3UsICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIERCR1UgY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGRiZ3UgaW50ZXJydXB0IHRvIGJlIGVuYWJsZWQNCit7DQorICAgICAgICBwRGJndS0+REJHVV9JRVIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9EQkdVX0ludGVycnVwdERpc2FibGUNCisvLyogXGJyaWVmIERpc2FibGUgREJHVSBJbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9EQkdVX0ludGVycnVwdERpc2FibGUoDQorICAgICAgICBBVDkxUFNfREJHVSBwRGJndSwgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgREJHVSBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZGJndSBpbnRlcnJ1cHQgdG8gYmUgZGlzYWJsZWQNCit7DQorICAgICAgICBwRGJndS0+REJHVV9JRFIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9EQkdVX0dldEludGVycnVwdE1hc2tTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBEQkdVIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfREJHVV9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCAvLyBccmV0dXJuIERCR1UgSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorICAgICAgICBBVDkxUFNfREJHVSBwRGJndSkgLy8gXGFyZyAgcG9pbnRlciB0byBhIERCR1UgY29udHJvbGxlcg0KK3sNCisgICAgICAgIHJldHVybiBwRGJndS0+REJHVV9JTVI7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0RCR1VfSXNJbnRlcnJ1cHRNYXNrZWQNCisvLyogXGJyaWVmIFRlc3QgaWYgREJHVSBJbnRlcnJ1cHQgaXMgTWFza2VkIA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfREJHVV9Jc0ludGVycnVwdE1hc2tlZCgNCisgICAgICAgIEFUOTFQU19EQkdVIHBEYmd1LCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBEQkdVIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisgICAgICAgIHJldHVybiAoQVQ5MUZfREJHVV9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKHBEYmd1KSAmIGZsYWcpOw0KIH0NCiANCiAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSogICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFBEQw0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUERDX1NldE5leHRSeCAqLw0KLS8qKiBcYnJpZWYgU2V0IHRoZSBuZXh0IHJlY2VpdmUgdHJhbnNmZXIgZGVzY3JpcHRvciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BEQ19TZXROZXh0UngoIEFUOTFQU19QREMgcFBEQywgICAgIC8qIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICogYWRkcmVzcywgICAgICAvKiBcYXJnIGFkZHJlc3MgdG8gdGhlIG5leHQgYmxvYyB0byBiZSByZWNlaXZlZCAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJ5dGVzICkgLyogXGFyZyBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgcmVjZWl2ZWQgKi8NCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBQSU8NCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19DZmdQZXJpcGgNCisvLyogXGJyaWVmIEVuYWJsZSBwaW5zIHRvIGJlIGRyaXZlZCBieSBwZXJpcGhlcmFsDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJQVQ5MVBTX1BJTyBwUGlvLCAgICAgICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgcGVyaXBoQUVuYWJsZSwgIC8vIFxhcmcgUEVSSVBIIEEgdG8gZW5hYmxlDQorCXVuc2lnbmVkIGludCBwZXJpcGhCRW5hYmxlKSAgLy8gXGFyZyBQRVJJUEggQiB0byBlbmFibGUNCisNCiB7DQotICAgIHBQREMtPlBEQ19STlBSID0gKCB1bnNpZ25lZCBpbnQgKSBhZGRyZXNzOw0KLSAgICBwUERDLT5QRENfUk5DUiA9IGJ5dGVzOw0KKwlwUGlvLT5QSU9fQVNSID0gcGVyaXBoQUVuYWJsZTsNCisJcFBpby0+UElPX0JTUiA9IHBlcmlwaEJFbmFibGU7DQorCXBQaW8tPlBJT19QRFIgPSAocGVyaXBoQUVuYWJsZSB8IHBlcmlwaEJFbmFibGUpOyAvLyBTZXQgaW4gUGVyaXBoIG1vZGUNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUERDX1NldE5leHRUeCAqLw0KLS8qKiBcYnJpZWYgU2V0IHRoZSBuZXh0IHRyYW5zbWl0IHRyYW5zZmVyIGRlc2NyaXB0b3IgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QRENfU2V0TmV4dFR4KCBBVDkxUFNfUERDIHBQREMsICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqIGFkZHJlc3MsICAgICAgLyogXGFyZyBhZGRyZXNzIHRvIHRoZSBuZXh0IGJsb2MgdG8gYmUgdHJhbnNtaXR0ZWQgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBieXRlcyApIC8qIFxhcmcgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHRyYW5zbWl0dGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0NmZ091dHB1dA0KKy8vKiBcYnJpZWYgRW5hYmxlIFBJTyBpbiBvdXRwdXQgbW9kZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19DZmdPdXRwdXQoDQorCUFUOTFQU19QSU8gcFBpbywgICAgICAgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IHBpb0VuYWJsZSkgICAgICAvLyBcYXJnIFBJTyB0byBiZSBlbmFibGVkDQogew0KLSAgICBwUERDLT5QRENfVE5QUiA9ICggdW5zaWduZWQgaW50ICkgYWRkcmVzczsNCi0gICAgcFBEQy0+UERDX1ROQ1IgPSBieXRlczsNCisJcFBpby0+UElPX1BFUiA9IHBpb0VuYWJsZTsgLy8gU2V0IGluIFBJTyBtb2RlDQorCXBQaW8tPlBJT19PRVIgPSBwaW9FbmFibGU7IC8vIENvbmZpZ3VyZSBpbiBPdXRwdXQNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUERDX1NldFJ4ICovDQotLyoqIFxicmllZiBTZXQgdGhlIHJlY2VpdmUgdHJhbnNmZXIgZGVzY3JpcHRvciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BEQ19TZXRSeCggQVQ5MVBTX1BEQyBwUERDLCAgICAgLyogXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqIGFkZHJlc3MsICAgICAgLyogXGFyZyBhZGRyZXNzIHRvIHRoZSBuZXh0IGJsb2MgdG8gYmUgcmVjZWl2ZWQgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJ5dGVzICkgLyogXGFyZyBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgcmVjZWl2ZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fQ2ZnSW5wdXQNCisvLyogXGJyaWVmIEVuYWJsZSBQSU8gaW4gaW5wdXQgbW9kZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19DZmdJbnB1dCgNCisJQVQ5MVBTX1BJTyBwUGlvLCAgICAgICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgaW5wdXRFbmFibGUpICAgICAgLy8gXGFyZyBQSU8gdG8gYmUgZW5hYmxlZA0KIHsNCi0gICAgcFBEQy0+UERDX1JQUiA9ICggdW5zaWduZWQgaW50ICkgYWRkcmVzczsNCi0gICAgcFBEQy0+UERDX1JDUiA9IGJ5dGVzOw0KKwkvLyBEaXNhYmxlIG91dHB1dA0KKwlwUGlvLT5QSU9fT0RSICA9IGlucHV0RW5hYmxlOw0KKwlwUGlvLT5QSU9fUEVSICA9IGlucHV0RW5hYmxlOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QRENfU2V0VHggKi8NCi0vKiogXGJyaWVmIFNldCB0aGUgdHJhbnNtaXQgdHJhbnNmZXIgZGVzY3JpcHRvciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BEQ19TZXRUeCggQVQ5MVBTX1BEQyBwUERDLCAgICAgLyogXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqIGFkZHJlc3MsICAgICAgLyogXGFyZyBhZGRyZXNzIHRvIHRoZSBuZXh0IGJsb2MgdG8gYmUgdHJhbnNtaXR0ZWQgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJ5dGVzICkgLyogXGFyZyBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgdHJhbnNtaXR0ZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fQ2ZnT3BlbmRyYWluDQorLy8qIFxicmllZiBDb25maWd1cmUgUElPIGluIG9wZW4gZHJhaW4NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fQ2ZnT3BlbmRyYWluKA0KKwlBVDkxUFNfUElPIHBQaW8sICAgICAgICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBtdWx0aURydkVuYWJsZSkgLy8gXGFyZyBwaW8gdG8gYmUgY29uZmlndXJlZCBpbiBvcGVuIGRyYWluDQogew0KLSAgICBwUERDLT5QRENfVFBSID0gKCB1bnNpZ25lZCBpbnQgKSBhZGRyZXNzOw0KLSAgICBwUERDLT5QRENfVENSID0gYnl0ZXM7DQorCS8vIENvbmZpZ3VyZSB0aGUgbXVsdGktZHJpdmUgb3B0aW9uDQorCXBQaW8tPlBJT19NRERSID0gfm11bHRpRHJ2RW5hYmxlOw0KKwlwUGlvLT5QSU9fTURFUiA9IG11bHRpRHJ2RW5hYmxlOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QRENfRW5hYmxlVHggKi8NCi0vKiogXGJyaWVmIEVuYWJsZSB0cmFuc21pdCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BEQ19FbmFibGVUeCggQVQ5MVBTX1BEQyBwUERDICkgLyogXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fQ2ZnUHVsbHVwDQorLy8qIFxicmllZiBFbmFibGUgcHVsbHVwIG9uIFBJTw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19DZmdQdWxsdXAoDQorCUFUOTFQU19QSU8gcFBpbywgICAgICAgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IHB1bGx1cEVuYWJsZSkgICAvLyBcYXJnIGVuYWJsZSBwdWxsdXAgb24gUElPDQogew0KLSAgICBwUERDLT5QRENfUFRDUiA9IEFUOTFDX1BEQ19UWFRFTjsNCisJCS8vIENvbm5lY3Qgb3Igbm90IFB1bGx1cA0KKwlwUGlvLT5QSU9fUFBVRFIgPSB+cHVsbHVwRW5hYmxlOw0KKwlwUGlvLT5QSU9fUFBVRVIgPSBwdWxsdXBFbmFibGU7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BEQ19FbmFibGVSeCAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIHJlY2VpdmUgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QRENfRW5hYmxlUngoIEFUOTFQU19QREMgcFBEQyApIC8qIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0NmZ0RpcmVjdERyaXZlDQorLy8qIFxicmllZiBFbmFibGUgZGlyZWN0IGRyaXZlIG9uIFBJTw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19DZmdEaXJlY3REcml2ZSgNCisJQVQ5MVBTX1BJTyBwUGlvLCAgICAgICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZGlyZWN0RHJpdmUpICAgIC8vIFxhcmcgUElPIHRvIGJlIGNvbmZpZ3VyZWQgd2l0aCBkaXJlY3QgZHJpdmUNCisNCiB7DQotICAgIHBQREMtPlBEQ19QVENSID0gQVQ5MUNfUERDX1JYVEVOOw0KKwkvLyBDb25maWd1cmUgdGhlIERpcmVjdCBEcml2ZQ0KKwlwUGlvLT5QSU9fT1dEUiAgPSB+ZGlyZWN0RHJpdmU7DQorCXBQaW8tPlBJT19PV0VSICA9IGRpcmVjdERyaXZlOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QRENfRGlzYWJsZVR4ICovDQotLyoqIFxicmllZiBEaXNhYmxlIHRyYW5zbWl0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUERDX0Rpc2FibGVUeCggQVQ5MVBTX1BEQyBwUERDICkgLyogXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fQ2ZnSW5wdXRGaWx0ZXINCisvLyogXGJyaWVmIEVuYWJsZSBpbnB1dCBmaWx0ZXIgb24gaW5wdXQgUElPDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX0NmZ0lucHV0RmlsdGVyKA0KKwlBVDkxUFNfUElPIHBQaW8sICAgICAgICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBpbnB1dEZpbHRlcikgICAgLy8gXGFyZyBQSU8gdG8gYmUgY29uZmlndXJlZCB3aXRoIGlucHV0IGZpbHRlcg0KKw0KIHsNCi0gICAgcFBEQy0+UERDX1BUQ1IgPSBBVDkxQ19QRENfVFhURElTOw0KKwkvLyBDb25maWd1cmUgdGhlIERpcmVjdCBEcml2ZQ0KKwlwUGlvLT5QSU9fSUZEUiAgPSB+aW5wdXRGaWx0ZXI7DQorCXBQaW8tPlBJT19JRkVSICA9IGlucHV0RmlsdGVyOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QRENfRGlzYWJsZVJ4ICovDQotLyoqIFxicmllZiBEaXNhYmxlIHJlY2VpdmUgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QRENfRGlzYWJsZVJ4KCBBVDkxUFNfUERDIHBQREMgKSAvKiBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19HZXRJbnB1dA0KKy8vKiBcYnJpZWYgUmV0dXJuIFBJTyBpbnB1dCB2YWx1ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElPX0dldElucHV0KCAvLyBccmV0dXJuIFBJTyBpbnB1dA0KKwlBVDkxUFNfUElPIHBQaW8pIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KIHsNCi0gICAgcFBEQy0+UERDX1BUQ1IgPSBBVDkxQ19QRENfUlhURElTOw0KKwlyZXR1cm4gcFBpby0+UElPX1BEU1I7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BEQ19Jc1R4RW1wdHkgKi8NCi0vKiogXGJyaWVmIFRlc3QgaWYgdGhlIGN1cnJlbnQgdHJhbnNmZXIgZGVzY3JpcHRvciBoYXMgYmVlbiBzZW50ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIGludCBBVDkxRl9QRENfSXNUeEVtcHR5KCAvKiBccmV0dXJuIHJldHVybiAxIGlmIHRyYW5zZmVyIGlzIGNvbXBsZXRlICovDQotICAgIEFUOTFQU19QREMgcFBEQyApICAgICAgICAgICAgIC8qIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0lzSW5wdXRTZXQNCisvLyogXGJyaWVmIFRlc3QgaWYgUElPIGlzIGlucHV0IGZsYWcgaXMgYWN0aXZlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9QSU9fSXNJbnB1dFNldCgNCisJQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCiB7DQotICAgIHJldHVybiAhKCBwUERDLT5QRENfVENSICk7DQorCXJldHVybiAoQVQ5MUZfUElPX0dldElucHV0KHBQaW8pICYgZmxhZyk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BEQ19Jc05leHRUeEVtcHR5ICovDQotLyoqIFxicmllZiBUZXN0IGlmIHRoZSBuZXh0IHRyYW5zZmVyIGRlc2NyaXB0b3IgaGFzIGJlZW4gbW92ZWQgdG8gdGhlIGN1cnJlbnQgdGQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgaW50IEFUOTFGX1BEQ19Jc05leHRUeEVtcHR5KCAvKiBccmV0dXJuIHJldHVybiAxIGlmIHRyYW5zZmVyIGlzIGNvbXBsZXRlICovDQotICAgIEFUOTFQU19QREMgcFBEQyApICAgICAgICAgICAgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlciAqLw0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19TZXRPdXRwdXQNCisvLyogXGJyaWVmIFNldCB0byAxIG91dHB1dCBQSU8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fU2V0T3V0cHV0KA0KKwlBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBvdXRwdXQgdG8gYmUgc2V0DQogew0KLSAgICByZXR1cm4gISggcFBEQy0+UERDX1ROQ1IgKTsNCisJcFBpby0+UElPX1NPRFIgPSBmbGFnOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QRENfSXNSeEVtcHR5ICovDQotLyoqIFxicmllZiBUZXN0IGlmIHRoZSBjdXJyZW50IHRyYW5zZmVyIGRlc2NyaXB0b3IgaGFzIGJlZW4gZmlsbGVkICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIGludCBBVDkxRl9QRENfSXNSeEVtcHR5KCAvKiBccmV0dXJuIHJldHVybiAxIGlmIHRyYW5zZmVyIGlzIGNvbXBsZXRlICovDQotICAgIEFUOTFQU19QREMgcFBEQyApICAgICAgICAgICAgIC8qIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0NsZWFyT3V0cHV0DQorLy8qIFxicmllZiBTZXQgdG8gMCBvdXRwdXQgUElPDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX0NsZWFyT3V0cHV0KA0KKwlBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBvdXRwdXQgdG8gYmUgY2xlYXJlZA0KIHsNCi0gICAgcmV0dXJuICEoIHBQREMtPlBEQ19SQ1IgKTsNCisJcFBpby0+UElPX0NPRFIgPSBmbGFnOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QRENfSXNOZXh0UnhFbXB0eSAqLw0KLS8qKiBcYnJpZWYgVGVzdCBpZiB0aGUgbmV4dCB0cmFuc2ZlciBkZXNjcmlwdG9yIGhhcyBiZWVuIG1vdmVkIHRvIHRoZSBjdXJyZW50IHRkICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIGludCBBVDkxRl9QRENfSXNOZXh0UnhFbXB0eSggLyogXHJldHVybiByZXR1cm4gMSBpZiB0cmFuc2ZlciBpcyBjb21wbGV0ZSAqLw0KLSAgICBBVDkxUFNfUERDIHBQREMgKSAgICAgICAgICAgICAgICAgLyogXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fRm9yY2VPdXRwdXQNCisvLyogXGJyaWVmIEZvcmNlIG91dHB1dCB3aGVuIERpcmVjdCBkcml2ZSBvcHRpb24gaXMgZW5hYmxlZA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19Gb3JjZU91dHB1dCgNCisJQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgb3V0cHV0IHRvIGJlIGZvcmNlZA0KIHsNCi0gICAgcmV0dXJuICEoIHBQREMtPlBEQ19STkNSICk7DQorCXBQaW8tPlBJT19PRFNSID0gZmxhZzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUERDX09wZW4gKi8NCi0vKiogXGJyaWVmIE9wZW4gUERDOiBkaXNhYmxlIFRYIGFuZCBSWCByZXNldCB0cmFuc2ZlciBkZXNjcmlwdG9ycywgcmUtZW5hYmxlIFJYIGFuZCBUWCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BEQ19PcGVuKCBBVDkxUFNfUERDIHBQREMgKSAvKiBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19FbmFibGUNCisvLyogXGJyaWVmIEVuYWJsZSBQSU8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fRW5hYmxlKA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIHBpbyB0byBiZSBlbmFibGVkIA0KIHsNCi0gICAgLyoqIERpc2FibGUgdGhlIFJYIGFuZCBUWCBQREMgdHJhbnNmZXIgcmVxdWVzdHMgKi8NCi0gICAgQVQ5MUZfUERDX0Rpc2FibGVSeCggcFBEQyApOw0KLSAgICBBVDkxRl9QRENfRGlzYWJsZVR4KCBwUERDICk7DQotDQotICAgIC8qKiBSZXNldCBhbGwgQ291bnRlciByZWdpc3RlciBOZXh0IGJ1ZmZlciBmaXJzdCAqLw0KLSAgICBBVDkxRl9QRENfU2V0TmV4dFR4KCBwUERDLCAoIGNoYXIgKiApIDAsIDAgKTsNCi0gICAgQVQ5MUZfUERDX1NldE5leHRSeCggcFBEQywgKCBjaGFyICogKSAwLCAwICk7DQotICAgIEFUOTFGX1BEQ19TZXRUeCggcFBEQywgKCBjaGFyICogKSAwLCAwICk7DQotICAgIEFUOTFGX1BEQ19TZXRSeCggcFBEQywgKCBjaGFyICogKSAwLCAwICk7DQotDQotICAgIC8qKiBFbmFibGUgdGhlIFJYIGFuZCBUWCBQREMgdHJhbnNmZXIgcmVxdWVzdHMgKi8NCi0gICAgQVQ5MUZfUERDX0VuYWJsZVJ4KCBwUERDICk7DQotICAgIEFUOTFGX1BEQ19FbmFibGVUeCggcFBEQyApOw0KKyAgICAgICAgcFBpby0+UElPX1BFUiA9IGZsYWc7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BEQ19DbG9zZSAqLw0KLS8qKiBcYnJpZWYgQ2xvc2UgUERDOiBkaXNhYmxlIFRYIGFuZCBSWCByZXNldCB0cmFuc2ZlciBkZXNjcmlwdG9ycyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BEQ19DbG9zZSggQVQ5MVBTX1BEQyBwUERDICkgLyogXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fRGlzYWJsZQ0KKy8vKiBcYnJpZWYgRGlzYWJsZSBQSU8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fRGlzYWJsZSgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBwaW8gdG8gYmUgZGlzYWJsZWQgDQogew0KLSAgICAvKiogRGlzYWJsZSB0aGUgUlggYW5kIFRYIFBEQyB0cmFuc2ZlciByZXF1ZXN0cyAqLw0KLSAgICBBVDkxRl9QRENfRGlzYWJsZVJ4KCBwUERDICk7DQotICAgIEFUOTFGX1BEQ19EaXNhYmxlVHgoIHBQREMgKTsNCi0NCi0gICAgLyoqIFJlc2V0IGFsbCBDb3VudGVyIHJlZ2lzdGVyIE5leHQgYnVmZmVyIGZpcnN0ICovDQotICAgIEFUOTFGX1BEQ19TZXROZXh0VHgoIHBQREMsICggY2hhciAqICkgMCwgMCApOw0KLSAgICBBVDkxRl9QRENfU2V0TmV4dFJ4KCBwUERDLCAoIGNoYXIgKiApIDAsIDAgKTsNCi0gICAgQVQ5MUZfUERDX1NldFR4KCBwUERDLCAoIGNoYXIgKiApIDAsIDAgKTsNCi0gICAgQVQ5MUZfUERDX1NldFJ4KCBwUERDLCAoIGNoYXIgKiApIDAsIDAgKTsNCisgICAgICAgIHBQaW8tPlBJT19QRFIgPSBmbGFnOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QRENfU2VuZEZyYW1lICovDQotLyoqIFxicmllZiBDbG9zZSBQREM6IGRpc2FibGUgVFggYW5kIFJYIHJlc2V0IHRyYW5zZmVyIGRlc2NyaXB0b3JzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QRENfU2VuZEZyYW1lKCBBVDkxUFNfUERDIHBQREMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBwQnVmZmVyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3pCdWZmZXIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBwTmV4dEJ1ZmZlciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHN6TmV4dEJ1ZmZlciApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0dldFN0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFBJTyBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJT19HZXRTdGF0dXMoIC8vIFxyZXR1cm4gUElPIFN0YXR1cw0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvKSAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCiB7DQotICAgIGlmKCBBVDkxRl9QRENfSXNUeEVtcHR5KCBwUERDICkgKQ0KLSAgICB7DQotICAgICAgICAvKiogQnVmZmVyIGFuZCBuZXh0IGJ1ZmZlciBjYW4gYmUgaW5pdGlhbGl6ZWQgKi8NCi0gICAgICAgIEFUOTFGX1BEQ19TZXRUeCggcFBEQywgcEJ1ZmZlciwgc3pCdWZmZXIgKTsNCi0gICAgICAgIEFUOTFGX1BEQ19TZXROZXh0VHgoIHBQREMsIHBOZXh0QnVmZmVyLCBzek5leHRCdWZmZXIgKTsNCi0gICAgICAgIHJldHVybiAyOw0KLSAgICB9DQotICAgIGVsc2UgaWYoIEFUOTFGX1BEQ19Jc05leHRUeEVtcHR5KCBwUERDICkgKQ0KLSAgICB7DQotICAgICAgICAvKiogT25seSBvbmUgYnVmZmVyIGNhbiBiZSBpbml0aWFsaXplZCAqLw0KLSAgICAgICAgQVQ5MUZfUERDX1NldE5leHRUeCggcFBEQywgcEJ1ZmZlciwgc3pCdWZmZXIgKTsNCi0gICAgICAgIHJldHVybiAxOw0KLSAgICB9DQotICAgIGVsc2UNCi0gICAgew0KLSAgICAgICAgLyoqIEFsbCBidWZmZXIgYXJlIGluIHVzZS4uLiAqLw0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCisgICAgICAgIHJldHVybiBwUGlvLT5QSU9fUFNSOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QRENfUmVjZWl2ZUZyYW1lICovDQotLyoqIFxicmllZiBDbG9zZSBQREM6IGRpc2FibGUgVFggYW5kIFJYIHJlc2V0IHRyYW5zZmVyIGRlc2NyaXB0b3JzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QRENfUmVjZWl2ZUZyYW1lKCBBVDkxUFNfUERDIHBQREMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBwQnVmZmVyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3pCdWZmZXIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBwTmV4dEJ1ZmZlciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHN6TmV4dEJ1ZmZlciApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0lzU2V0DQorLy8qIFxicmllZiBUZXN0IGlmIFBJTyBpcyBTZXQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1BJT19Jc1NldCgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KIHsNCi0gICAgaWYoIEFUOTFGX1BEQ19Jc1J4RW1wdHkoIHBQREMgKSApDQotICAgIHsNCi0gICAgICAgIC8qKiBCdWZmZXIgYW5kIG5leHQgYnVmZmVyIGNhbiBiZSBpbml0aWFsaXplZCAqLw0KLSAgICAgICAgQVQ5MUZfUERDX1NldFJ4KCBwUERDLCBwQnVmZmVyLCBzekJ1ZmZlciApOw0KLSAgICAgICAgQVQ5MUZfUERDX1NldE5leHRSeCggcFBEQywgcE5leHRCdWZmZXIsIHN6TmV4dEJ1ZmZlciApOw0KLSAgICAgICAgcmV0dXJuIDI7DQotICAgIH0NCi0gICAgZWxzZSBpZiggQVQ5MUZfUERDX0lzTmV4dFJ4RW1wdHkoIHBQREMgKSApDQotICAgIHsNCi0gICAgICAgIC8qKiBPbmx5IG9uZSBidWZmZXIgY2FuIGJlIGluaXRpYWxpemVkICovDQotICAgICAgICBBVDkxRl9QRENfU2V0TmV4dFJ4KCBwUERDLCBwQnVmZmVyLCBzekJ1ZmZlciApOw0KLSAgICAgICAgcmV0dXJuIDE7DQotICAgIH0NCi0gICAgZWxzZQ0KLSAgICB7DQotICAgICAgICAvKiogQWxsIGJ1ZmZlciBhcmUgaW4gdXNlLi4uICovDQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KKyAgICAgICAgcmV0dXJuIChBVDkxRl9QSU9fR2V0U3RhdHVzKHBQaW8pICYgZmxhZyk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19PdXRwdXRFbmFibGUNCisvLyogXGJyaWVmIE91dHB1dCBFbmFibGUgUElPDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX091dHB1dEVuYWJsZSgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBwaW8gb3V0cHV0IHRvIGJlIGVuYWJsZWQNCit7DQorICAgICAgICBwUGlvLT5QSU9fT0VSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX091dHB1dERpc2FibGUNCisvLyogXGJyaWVmIE91dHB1dCBFbmFibGUgUElPDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX091dHB1dERpc2FibGUoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgcGlvIG91dHB1dCB0byBiZSBkaXNhYmxlZA0KK3sNCisgICAgICAgIHBQaW8tPlBJT19PRFIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fR2V0T3V0cHV0U3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gUElPIE91dHB1dCBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJT19HZXRPdXRwdXRTdGF0dXMoIC8vIFxyZXR1cm4gUElPIE91dHB1dCBTdGF0dXMNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbykgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorew0KKyAgICAgICAgcmV0dXJuIHBQaW8tPlBJT19PU1I7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19Jc091cHV0U2V0DQorLy8qIFxicmllZiBUZXN0IGlmIFBJTyBPdXRwdXQgaXMgU2V0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9QSU9fSXNPdXRwdXRTZXQoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorICAgICAgICByZXR1cm4gKEFUOTFGX1BJT19HZXRPdXRwdXRTdGF0dXMocFBpbykgJiBmbGFnKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0lucHV0RmlsdGVyRW5hYmxlDQorLy8qIFxicmllZiBJbnB1dCBGaWx0ZXIgRW5hYmxlIFBJTw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19JbnB1dEZpbHRlckVuYWJsZSgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBwaW8gaW5wdXQgZmlsdGVyIHRvIGJlIGVuYWJsZWQNCit7DQorICAgICAgICBwUGlvLT5QSU9fSUZFUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19JbnB1dEZpbHRlckRpc2FibGUNCisvLyogXGJyaWVmIElucHV0IEZpbHRlciBEaXNhYmxlIFBJTw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19JbnB1dEZpbHRlckRpc2FibGUoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgcGlvIGlucHV0IGZpbHRlciB0byBiZSBkaXNhYmxlZA0KK3sNCisgICAgICAgIHBQaW8tPlBJT19JRkRSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0dldElucHV0RmlsdGVyU3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gUElPIElucHV0IEZpbHRlciBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJT19HZXRJbnB1dEZpbHRlclN0YXR1cyggLy8gXHJldHVybiBQSU8gSW5wdXQgRmlsdGVyIFN0YXR1cw0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvKSAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCit7DQorICAgICAgICByZXR1cm4gcFBpby0+UElPX0lGU1I7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19Jc0lucHV0RmlsdGVyU2V0DQorLy8qIFxicmllZiBUZXN0IGlmIFBJTyBJbnB1dCBmaWx0ZXIgaXMgU2V0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9QSU9fSXNJbnB1dEZpbHRlclNldCgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisgICAgICAgIHJldHVybiAoQVQ5MUZfUElPX0dldElucHV0RmlsdGVyU3RhdHVzKHBQaW8pICYgZmxhZyk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19HZXRPdXRwdXREYXRhU3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gUElPIE91dHB1dCBEYXRhIFN0YXR1cyANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJT19HZXRPdXRwdXREYXRhU3RhdHVzKCAvLyBccmV0dXJuIFBJTyBPdXRwdXQgRGF0YSBTdGF0dXMgDQorCUFUOTFQU19QSU8gcFBpbykgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorew0KKyAgICAgICAgcmV0dXJuIHBQaW8tPlBJT19PRFNSOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fSW50ZXJydXB0RW5hYmxlDQorLy8qIFxicmllZiBFbmFibGUgUElPIEludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19JbnRlcnJ1cHRFbmFibGUoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgcGlvIGludGVycnVwdCB0byBiZSBlbmFibGVkDQorew0KKyAgICAgICAgcFBpby0+UElPX0lFUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19JbnRlcnJ1cHREaXNhYmxlDQorLy8qIFxicmllZiBEaXNhYmxlIFBJTyBJbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fSW50ZXJydXB0RGlzYWJsZSgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBwaW8gaW50ZXJydXB0IHRvIGJlIGRpc2FibGVkDQorew0KKyAgICAgICAgcFBpby0+UElPX0lEUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gUElPIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElPX0dldEludGVycnVwdE1hc2tTdGF0dXMoIC8vIFxyZXR1cm4gUElPIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvKSAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCit7DQorICAgICAgICByZXR1cm4gcFBpby0+UElPX0lNUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0dldEludGVycnVwdFN0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFBJTyBJbnRlcnJ1cHQgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSU9fR2V0SW50ZXJydXB0U3RhdHVzKCAvLyBccmV0dXJuIFBJTyBJbnRlcnJ1cHQgU3RhdHVzDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8pIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KK3sNCisgICAgICAgIHJldHVybiBwUGlvLT5QSU9fSVNSOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fSXNJbnRlcnJ1cHRNYXNrZWQNCisvLyogXGJyaWVmIFRlc3QgaWYgUElPIEludGVycnVwdCBpcyBNYXNrZWQgDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9QSU9fSXNJbnRlcnJ1cHRNYXNrZWQoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorICAgICAgICByZXR1cm4gKEFUOTFGX1BJT19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKHBQaW8pICYgZmxhZyk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19Jc0ludGVycnVwdFNldA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBQSU8gSW50ZXJydXB0IGlzIFNldA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfUElPX0lzSW50ZXJydXB0U2V0KA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQorew0KKyAgICAgICAgcmV0dXJuIChBVDkxRl9QSU9fR2V0SW50ZXJydXB0U3RhdHVzKHBQaW8pICYgZmxhZyk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19NdWx0aURyaXZlckVuYWJsZQ0KKy8vKiBcYnJpZWYgTXVsdGkgRHJpdmVyIEVuYWJsZSBQSU8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fTXVsdGlEcml2ZXJFbmFibGUoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgcGlvIHRvIGJlIGVuYWJsZWQNCit7DQorICAgICAgICBwUGlvLT5QSU9fTURFUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19NdWx0aURyaXZlckRpc2FibGUNCisvLyogXGJyaWVmIE11bHRpIERyaXZlciBEaXNhYmxlIFBJTw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19NdWx0aURyaXZlckRpc2FibGUoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgcGlvIHRvIGJlIGRpc2FibGVkDQorew0KKyAgICAgICAgcFBpby0+UElPX01ERFIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fR2V0TXVsdGlEcml2ZXJTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBQSU8gTXVsdGkgRHJpdmVyIFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElPX0dldE11bHRpRHJpdmVyU3RhdHVzKCAvLyBccmV0dXJuIFBJTyBNdWx0aSBEcml2ZXIgU3RhdHVzDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8pIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KK3sNCisgICAgICAgIHJldHVybiBwUGlvLT5QSU9fTURTUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0lzTXVsdGlEcml2ZXJTZXQNCisvLyogXGJyaWVmIFRlc3QgaWYgUElPIE11bHRpRHJpdmVyIGlzIFNldA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfUElPX0lzTXVsdGlEcml2ZXJTZXQoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorICAgICAgICByZXR1cm4gKEFUOTFGX1BJT19HZXRNdWx0aURyaXZlclN0YXR1cyhwUGlvKSAmIGZsYWcpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fQV9SZWdpc3RlclNlbGVjdGlvbg0KKy8vKiBcYnJpZWYgUElPIEEgUmVnaXN0ZXIgU2VsZWN0aW9uIA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19BX1JlZ2lzdGVyU2VsZWN0aW9uKA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIHBpbyBBIHJlZ2lzdGVyIHNlbGVjdGlvbg0KK3sNCisgICAgICAgIHBQaW8tPlBJT19BU1IgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fQl9SZWdpc3RlclNlbGVjdGlvbg0KKy8vKiBcYnJpZWYgUElPIEIgUmVnaXN0ZXIgU2VsZWN0aW9uIA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19CX1JlZ2lzdGVyU2VsZWN0aW9uKA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIHBpbyBCIHJlZ2lzdGVyIHNlbGVjdGlvbiANCit7DQorICAgICAgICBwUGlvLT5QSU9fQlNSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0dldF9BQl9SZWdpc3RlclN0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFBJTyBJbnRlcnJ1cHQgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSU9fR2V0X0FCX1JlZ2lzdGVyU3RhdHVzKCAvLyBccmV0dXJuIFBJTyBBQiBSZWdpc3RlciBTdGF0dXMNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbykgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorew0KKyAgICAgICAgcmV0dXJuIHBQaW8tPlBJT19BQlNSOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fSXNBQl9SZWdpc3RlclNldA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBQSU8gQUIgUmVnaXN0ZXIgaXMgU2V0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9QSU9fSXNBQl9SZWdpc3RlclNldCgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisgICAgICAgIHJldHVybiAoQVQ5MUZfUElPX0dldF9BQl9SZWdpc3RlclN0YXR1cyhwUGlvKSAmIGZsYWcpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fT3V0cHV0V3JpdGVFbmFibGUNCisvLyogXGJyaWVmIE91dHB1dCBXcml0ZSBFbmFibGUgUElPDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX091dHB1dFdyaXRlRW5hYmxlKA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIHBpbyBvdXRwdXQgd3JpdGUgdG8gYmUgZW5hYmxlZA0KK3sNCisgICAgICAgIHBQaW8tPlBJT19PV0VSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX091dHB1dFdyaXRlRGlzYWJsZQ0KKy8vKiBcYnJpZWYgT3V0cHV0IFdyaXRlIERpc2FibGUgUElPDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX091dHB1dFdyaXRlRGlzYWJsZSgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBwaW8gb3V0cHV0IHdyaXRlIHRvIGJlIGRpc2FibGVkDQorew0KKyAgICAgICAgcFBpby0+UElPX09XRFIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fR2V0T3V0cHV0V3JpdGVTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBQSU8gT3V0cHV0IFdyaXRlIFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElPX0dldE91dHB1dFdyaXRlU3RhdHVzKCAvLyBccmV0dXJuIFBJTyBPdXRwdXQgV3JpdGUgU3RhdHVzDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8pIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KK3sNCisgICAgICAgIHJldHVybiBwUGlvLT5QSU9fT1dTUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0lzT3V0cHV0V3JpdGVTZXQNCisvLyogXGJyaWVmIFRlc3QgaWYgUElPIE91dHB1dFdyaXRlIGlzIFNldA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfUElPX0lzT3V0cHV0V3JpdGVTZXQoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorICAgICAgICByZXR1cm4gKEFUOTFGX1BJT19HZXRPdXRwdXRXcml0ZVN0YXR1cyhwUGlvKSAmIGZsYWcpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fR2V0Q2ZnUHVsbHVwDQorLy8qIFxicmllZiBSZXR1cm4gUElPIENvbmZpZ3VyYXRpb24gUHVsbHVwDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSU9fR2V0Q2ZnUHVsbHVwKCAvLyBccmV0dXJuIFBJTyBDb25maWd1cmF0aW9uIFB1bGx1cCANCisgICAgICAgIEFUOTFQU19QSU8gcFBpbykgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorew0KKyAgICAgICAgcmV0dXJuIHBQaW8tPlBJT19QUFVTUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0lzT3V0cHV0RGF0YVN0YXR1c1NldA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBQSU8gT3V0cHV0IERhdGEgU3RhdHVzIGlzIFNldCANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1BJT19Jc091dHB1dERhdGFTdGF0dXNTZXQoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorICAgICAgICByZXR1cm4gKEFUOTFGX1BJT19HZXRPdXRwdXREYXRhU3RhdHVzKHBQaW8pICYgZmxhZyk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19Jc0NmZ1B1bGx1cFN0YXR1c1NldA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBQSU8gQ29uZmlndXJhdGlvbiBQdWxsdXAgU3RhdHVzIGlzIFNldA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfUElPX0lzQ2ZnUHVsbHVwU3RhdHVzU2V0KA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQorew0KKyAgICAgICAgcmV0dXJuICh+QVQ5MUZfUElPX0dldENmZ1B1bGx1cChwUGlvKSAmIGZsYWcpOw0KIH0NCiANCiAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSogICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIERCR1UNCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0RCR1VfSW50ZXJydXB0RW5hYmxlICovDQotLyoqIFxicmllZiBFbmFibGUgREJHVSBJbnRlcnJ1cHQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9EQkdVX0ludGVycnVwdEVuYWJsZSggQVQ5MVBTX0RCR1UgcERiZ3UsICAvKiBcYXJnICBwb2ludGVyIHRvIGEgREJHVSBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBkYmd1IGludGVycnVwdCB0byBiZSBlbmFibGVkICovDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgUE1DDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfQ2ZnU3lzQ2xrRW5hYmxlUmVnDQorLy8qIFxicmllZiBDb25maWd1cmUgdGhlIFN5c3RlbSBDbG9jayBFbmFibGUgUmVnaXN0ZXIgb2YgdGhlIFBNQyBjb250cm9sbGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0NmZ1N5c0Nsa0VuYWJsZVJlZyAoDQorCUFUOTFQU19QTUMgcFBNQywgLy8gXGFyZyBwb2ludGVyIHRvIFBNQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBtb2RlKQ0KIHsNCi0gICAgcERiZ3UtPkRCR1VfSUVSID0gZmxhZzsNCisJLy8qIFdyaXRlIHRvIHRoZSBTQ0VSIHJlZ2lzdGVyDQorCXBQTUMtPlBNQ19TQ0VSID0gbW9kZTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfREJHVV9JbnRlcnJ1cHREaXNhYmxlICovDQotLyoqIFxicmllZiBEaXNhYmxlIERCR1UgSW50ZXJydXB0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfREJHVV9JbnRlcnJ1cHREaXNhYmxlKCBBVDkxUFNfREJHVSBwRGJndSwgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBEQkdVIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBkYmd1IGludGVycnVwdCB0byBiZSBkaXNhYmxlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19DZmdTeXNDbGtEaXNhYmxlUmVnDQorLy8qIFxicmllZiBDb25maWd1cmUgdGhlIFN5c3RlbSBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyIG9mIHRoZSBQTUMgY29udHJvbGxlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BNQ19DZmdTeXNDbGtEaXNhYmxlUmVnICgNCisJQVQ5MVBTX1BNQyBwUE1DLCAvLyBcYXJnIHBvaW50ZXIgdG8gUE1DIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IG1vZGUpDQogew0KLSAgICBwRGJndS0+REJHVV9JRFIgPSBmbGFnOw0KKwkvLyogV3JpdGUgdG8gdGhlIFNDRFIgcmVnaXN0ZXINCisJcFBNQy0+UE1DX1NDRFIgPSBtb2RlOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9EQkdVX0dldEludGVycnVwdE1hc2tTdGF0dXMgKi8NCi0vKiogXGJyaWVmIFJldHVybiBEQkdVIEludGVycnVwdCBNYXNrIFN0YXR1cyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfREJHVV9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCAvKiBccmV0dXJuIERCR1UgSW50ZXJydXB0IE1hc2sgU3RhdHVzICovDQotICAgIEFUOTFQU19EQkdVIHBEYmd1ICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIERCR1UgY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19HZXRTeXNDbGtTdGF0dXNSZWcNCisvLyogXGJyaWVmIFJldHVybiB0aGUgU3lzdGVtIENsb2NrIFN0YXR1cyBSZWdpc3RlciBvZiB0aGUgUE1DIGNvbnRyb2xsZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BNQ19HZXRTeXNDbGtTdGF0dXNSZWcgKA0KKwlBVDkxUFNfUE1DIHBQTUMgLy8gcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyDQorCSkNCiB7DQotICAgIHJldHVybiBwRGJndS0+REJHVV9JTVI7DQorCXJldHVybiBwUE1DLT5QTUNfU0NTUjsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfREJHVV9Jc0ludGVycnVwdE1hc2tlZCAqLw0KLS8qKiBcYnJpZWYgVGVzdCBpZiBEQkdVIEludGVycnVwdCBpcyBNYXNrZWQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgaW50IEFUOTFGX0RCR1VfSXNJbnRlcnJ1cHRNYXNrZWQoIEFUOTFQU19EQkdVIHBEYmd1LCAgLyogXGFyZyAgcG9pbnRlciB0byBhIERCR1UgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrDQorLy8qIFxicmllZiBFbmFibGUgcGVyaXBoZXJhbCBjbG9jaw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jayAoDQorCUFUOTFQU19QTUMgcFBNQywgLy8gXGFyZyBwb2ludGVyIHRvIFBNQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBwZXJpcGhJZHMpICAvLyBcYXJnIElEcyBvZiBwZXJpcGhlcmFscyB0byBlbmFibGUNCiB7DQotICAgIHJldHVybiggQVQ5MUZfREJHVV9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCBwRGJndSApICYgZmxhZyApOw0KKwlwUE1DLT5QTUNfUENFUiA9IHBlcmlwaElkczsNCiB9DQogDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUE1DX0Rpc2FibGVQZXJpcGhDbG9jaw0KKy8vKiBcYnJpZWYgRGlzYWJsZSBwZXJpcGhlcmFsIGNsb2NrDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0Rpc2FibGVQZXJpcGhDbG9jayAoDQorCUFUOTFQU19QTUMgcFBNQywgLy8gXGFyZyBwb2ludGVyIHRvIFBNQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBwZXJpcGhJZHMpICAvLyBcYXJnIElEcyBvZiBwZXJpcGhlcmFscyB0byBlbmFibGUNCit7DQorCXBQTUMtPlBNQ19QQ0RSID0gcGVyaXBoSWRzOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfR2V0UGVyaXBoQ2xvY2sNCisvLyogXGJyaWVmIEdldCBwZXJpcGhlcmFsIGNsb2NrIHN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUE1DX0dldFBlcmlwaENsb2NrICgNCisJQVQ5MVBTX1BNQyBwUE1DKSAvLyBcYXJnIHBvaW50ZXIgdG8gUE1DIGNvbnRyb2xsZXINCit7DQorCXJldHVybiBwUE1DLT5QTUNfUENTUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0tHUl9DZmdNYWluT3NjaWxsYXRvclJlZw0KKy8vKiBcYnJpZWYgQ2ZnIHRoZSBtYWluIG9zY2lsbGF0b3INCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9DS0dSX0NmZ01haW5Pc2NpbGxhdG9yUmVnICgNCisJQVQ5MVBTX0NLR1IgcENLR1IsIC8vIFxhcmcgcG9pbnRlciB0byBDS0dSIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IG1vZGUpDQorew0KKwlwQ0tHUi0+Q0tHUl9NT1IgPSBtb2RlOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DS0dSX0dldE1haW5Pc2NpbGxhdG9yUmVnDQorLy8qIFxicmllZiBDZmcgdGhlIG1haW4gb3NjaWxsYXRvcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0tHUl9HZXRNYWluT3NjaWxsYXRvclJlZyAoDQorCUFUOTFQU19DS0dSIHBDS0dSKSAvLyBcYXJnIHBvaW50ZXIgdG8gQ0tHUiBjb250cm9sbGVyDQorew0KKwlyZXR1cm4gcENLR1ItPkNLR1JfTU9SOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DS0dSX0VuYWJsZU1haW5Pc2NpbGxhdG9yDQorLy8qIFxicmllZiBFbmFibGUgdGhlIG1haW4gb3NjaWxsYXRvcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0NLR1JfRW5hYmxlTWFpbk9zY2lsbGF0b3IoDQorCUFUOTFQU19DS0dSIHBDS0dSKSAvLyBcYXJnIHBvaW50ZXIgdG8gQ0tHUiBjb250cm9sbGVyDQorew0KKwlwQ0tHUi0+Q0tHUl9NT1IgfD0gQVQ5MUNfQ0tHUl9NT1NDRU47DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NLR1JfRGlzYWJsZU1haW5Pc2NpbGxhdG9yDQorLy8qIFxicmllZiBEaXNhYmxlIHRoZSBtYWluIG9zY2lsbGF0b3INCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9DS0dSX0Rpc2FibGVNYWluT3NjaWxsYXRvciAoDQorCUFUOTFQU19DS0dSIHBDS0dSKSAvLyBcYXJnIHBvaW50ZXIgdG8gQ0tHUiBjb250cm9sbGVyDQorew0KKwlwQ0tHUi0+Q0tHUl9NT1IgJj0gfkFUOTFDX0NLR1JfTU9TQ0VOOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DS0dSX0NmZ01haW5Pc2NTdGFydFVwVGltZQ0KKy8vKiBcYnJpZWYgQ2ZnIE1PUiBSZWdpc3RlciBhY2NvcmRpbmcgdG8gdGhlIG1haW4gb3NjIHN0YXJ0dXAgdGltZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0NLR1JfQ2ZnTWFpbk9zY1N0YXJ0VXBUaW1lICgNCisJQVQ5MVBTX0NLR1IgcENLR1IsIC8vIFxhcmcgcG9pbnRlciB0byBDS0dSIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IHN0YXJ0dXBfdGltZSwgIC8vIFxhcmcgbWFpbiBvc2Mgc3RhcnR1cCB0aW1lIGluIG1pY3Jvc2Vjb25kICh1cykNCisJdW5zaWduZWQgaW50IHNsb3dDbG9jaykgIC8vIFxhcmcgc2xvd0Nsb2NrIGluIEh6DQorew0KKwlwQ0tHUi0+Q0tHUl9NT1IgJj0gfkFUOTFDX0NLR1JfT1NDT1VOVDsNCisJcENLR1ItPkNLR1JfTU9SIHw9ICgoc2xvd0Nsb2NrICogc3RhcnR1cF90aW1lKS8oOCoxMDAwMDAwKSkgPDwgODsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0tHUl9HZXRNYWluQ2xvY2tGcmVxUmVnDQorLy8qIFxicmllZiBDZmcgdGhlIG1haW4gb3NjaWxsYXRvcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0tHUl9HZXRNYWluQ2xvY2tGcmVxUmVnICgNCisJQVQ5MVBTX0NLR1IgcENLR1IpIC8vIFxhcmcgcG9pbnRlciB0byBDS0dSIGNvbnRyb2xsZXINCit7DQorCXJldHVybiBwQ0tHUi0+Q0tHUl9NQ0ZSOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DS0dSX0dldE1haW5DbG9jaw0KKy8vKiBcYnJpZWYgUmV0dXJuIE1haW4gY2xvY2sgaW4gSHoNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NLR1JfR2V0TWFpbkNsb2NrICgNCisJQVQ5MVBTX0NLR1IgcENLR1IsIC8vIFxhcmcgcG9pbnRlciB0byBDS0dSIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IHNsb3dDbG9jaykgIC8vIFxhcmcgc2xvd0Nsb2NrIGluIEh6DQorew0KKwlyZXR1cm4gKChwQ0tHUi0+Q0tHUl9NQ0ZSICAmIEFUOTFDX0NLR1JfTUFJTkYpICogc2xvd0Nsb2NrKSA+PiA0Ow0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfQ2ZnTUNLUmVnDQorLy8qIFxicmllZiBDZmcgTWFzdGVyIENsb2NrIFJlZ2lzdGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0NmZ01DS1JlZyAoDQorCUFUOTFQU19QTUMgcFBNQywgLy8gXGFyZyBwb2ludGVyIHRvIFBNQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBtb2RlKQ0KK3sNCisJcFBNQy0+UE1DX01DS1IgPSBtb2RlOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfR2V0TUNLUmVnDQorLy8qIFxicmllZiBSZXR1cm4gTWFzdGVyIENsb2NrIFJlZ2lzdGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QTUNfR2V0TUNLUmVnKA0KKwlBVDkxUFNfUE1DIHBQTUMpIC8vIFxhcmcgcG9pbnRlciB0byBQTUMgY29udHJvbGxlcg0KK3sNCisJcmV0dXJuIHBQTUMtPlBNQ19NQ0tSOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19HZXRNYXN0ZXJDbG9jaw0KKy8vKiBcYnJpZWYgUmV0dXJuIG1hc3RlciBjbG9jayBpbiBIeiB3aGljaCBjb3JyZXBvbmRzIHRvIHByb2Nlc3NvciBjbG9jayBmb3IgQVJNNw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QTUNfR2V0TWFzdGVyQ2xvY2sgKA0KKwlBVDkxUFNfUE1DIHBQTUMsIC8vIFxhcmcgcG9pbnRlciB0byBQTUMgY29udHJvbGxlcg0KKwlBVDkxUFNfQ0tHUiBwQ0tHUiwgLy8gXGFyZyBwb2ludGVyIHRvIENLR1IgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgc2xvd0Nsb2NrKSAgLy8gXGFyZyBzbG93Q2xvY2sgaW4gSHoNCit7DQorCXVuc2lnbmVkIGludCByZWcgPSBwUE1DLT5QTUNfTUNLUjsNCisJdW5zaWduZWQgaW50IHByZXNjYWxlciA9ICgxIDw8ICgocmVnICYgQVQ5MUNfUE1DX1BSRVMpID4+IDIpKTsNCisJdW5zaWduZWQgaW50IHBsbERpdmlkZXIsIHBsbE11bHRpcGxpZXI7DQorDQorCXN3aXRjaCAocmVnICYgQVQ5MUNfUE1DX0NTUykgew0KKwkJY2FzZSBBVDkxQ19QTUNfQ1NTX1NMT1dfQ0xLOiAvLyBTbG93IGNsb2NrIHNlbGVjdGVkDQorCQkJcmV0dXJuIHNsb3dDbG9jayAvIHByZXNjYWxlcjsNCisJCWNhc2UgQVQ5MUNfUE1DX0NTU19NQUlOX0NMSzogLy8gTWFpbiBjbG9jayBpcyBzZWxlY3RlZA0KKwkJCXJldHVybiBBVDkxRl9DS0dSX0dldE1haW5DbG9jayhwQ0tHUiwgc2xvd0Nsb2NrKSAvIHByZXNjYWxlcjsNCisJCWNhc2UgQVQ5MUNfUE1DX0NTU19QTExfQ0xLOiAvLyBQTExCIGNsb2NrIGlzIHNlbGVjdGVkDQorCQkJcmVnID0gcENLR1ItPkNLR1JfUExMUjsNCisJCQlwbGxEaXZpZGVyICAgID0gKHJlZyAgJiBBVDkxQ19DS0dSX0RJVik7DQorCQkJcGxsTXVsdGlwbGllciA9ICgocmVnICAmIEFUOTFDX0NLR1JfTVVMKSA+PiAxNikgKyAxOw0KKwkJCXJldHVybiBBVDkxRl9DS0dSX0dldE1haW5DbG9jayhwQ0tHUiwgc2xvd0Nsb2NrKSAvIHBsbERpdmlkZXIgKiBwbGxNdWx0aXBsaWVyIC8gcHJlc2NhbGVyOw0KKwl9DQorCXJldHVybiAwOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfRW5hYmxlUENLDQorLy8qIFxicmllZiBFbmFibGUgcGVyaXBoZXJhbCBjbG9jaw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BNQ19FbmFibGVQQ0sgKA0KKwlBVDkxUFNfUE1DIHBQTUMsIC8vIFxhcmcgcG9pbnRlciB0byBQTUMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgcGNrLCAgLy8gXGFyZyBQZXJpcGhlcmFsIGNsb2NrIGlkZW50aWZpZXIgMCAuLiA3DQorCXVuc2lnbmVkIGludCBtb2RlKQ0KK3sNCisJcFBNQy0+UE1DX1BDS1JbcGNrXSA9IG1vZGU7DQorCXBQTUMtPlBNQ19TQ0VSID0gKDEgPDwgcGNrKSA8PCA4Ow0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfRGlzYWJsZVBDSw0KKy8vKiBcYnJpZWYgRW5hYmxlIHBlcmlwaGVyYWwgY2xvY2sNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QTUNfRGlzYWJsZVBDSyAoDQorCUFUOTFQU19QTUMgcFBNQywgLy8gXGFyZyBwb2ludGVyIHRvIFBNQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBwY2spICAvLyBcYXJnIFBlcmlwaGVyYWwgY2xvY2sgaWRlbnRpZmllciAwIC4uIDcNCit7DQorCXBQTUMtPlBNQ19TQ0RSID0gKDEgPDwgcGNrKSA8PCA4Ow0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfRW5hYmxlSXQNCisvLyogXGJyaWVmIEVuYWJsZSBQTUMgaW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0VuYWJsZUl0ICgNCisJQVQ5MVBTX1BNQyBwUE1DLCAgICAgLy8gcG9pbnRlciB0byBhIFBNQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAgIC8vIElUIHRvIGJlIGVuYWJsZWQNCit7DQorCS8vKiBXcml0ZSB0byB0aGUgSUVSIHJlZ2lzdGVyDQorCXBQTUMtPlBNQ19JRVIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfRGlzYWJsZUl0DQorLy8qIFxicmllZiBEaXNhYmxlIFBNQyBpbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QTUNfRGlzYWJsZUl0ICgNCisJQVQ5MVBTX1BNQyBwUE1DLCAvLyBwb2ludGVyIHRvIGEgUE1DIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpIC8vIElUIHRvIGJlIGRpc2FibGVkDQorew0KKwkvLyogV3JpdGUgdG8gdGhlIElEUiByZWdpc3Rlcg0KKwlwUE1DLT5QTUNfSURSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUE1DX0dldFN0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFBNQyBJbnRlcnJ1cHQgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QTUNfR2V0U3RhdHVzKCAvLyBccmV0dXJuIFBNQyBJbnRlcnJ1cHQgU3RhdHVzDQorCUFUOTFQU19QTUMgcFBNQykgLy8gcG9pbnRlciB0byBhIFBNQyBjb250cm9sbGVyDQorew0KKwlyZXR1cm4gcFBNQy0+UE1DX1NSOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfR2V0SW50ZXJydXB0TWFza1N0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFBNQyBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BNQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCAvLyBccmV0dXJuIFBNQyBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisJQVQ5MVBTX1BNQyBwUE1DKSAvLyBwb2ludGVyIHRvIGEgUE1DIGNvbnRyb2xsZXINCit7DQorCXJldHVybiBwUE1DLT5QTUNfSU1SOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfSXNJbnRlcnJ1cHRNYXNrZWQNCisvLyogXGJyaWVmIFRlc3QgaWYgUE1DIEludGVycnVwdCBpcyBNYXNrZWQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BNQ19Jc0ludGVycnVwdE1hc2tlZCgNCisgICAgICAgIEFUOTFQU19QTUMgcFBNQywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUE1DIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisJcmV0dXJuIChBVDkxRl9QTUNfR2V0SW50ZXJydXB0TWFza1N0YXR1cyhwUE1DKSAmIGZsYWcpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfSXNTdGF0dXNTZXQNCisvLyogXGJyaWVmIFRlc3QgaWYgUE1DIFN0YXR1cyBpcyBTZXQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BNQ19Jc1N0YXR1c1NldCgNCisgICAgICAgIEFUOTFQU19QTUMgcFBNQywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUE1DIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisJcmV0dXJuIChBVDkxRl9QTUNfR2V0U3RhdHVzKHBQTUMpICYgZmxhZyk7DQorfS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgUlNUQw0KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUlNUU29mdFJlc2V0DQorLy8qIFxicmllZiBTdGFydCBTb2Z0d2FyZSBSZXNldA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1JTVFNvZnRSZXNldCgNCisgICAgICAgIEFUOTFQU19SU1RDIHBSU1RDLA0KKyAgICAgICAgdW5zaWduZWQgaW50IHJlc2V0KQ0KK3sNCisJcFJTVEMtPlJTVENfUkNSID0gKDB4QTUwMDAwMDAgfCByZXNldCk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1JTVFNldE1vZGUNCisvLyogXGJyaWVmIFNldCBSZXNldCBNb2RlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUlNUU2V0TW9kZSgNCisgICAgICAgIEFUOTFQU19SU1RDIHBSU1RDLA0KKyAgICAgICAgdW5zaWduZWQgaW50IG1vZGUpDQorew0KKwlwUlNUQy0+UlNUQ19STVIgPSAoMHhBNTAwMDAwMCB8IG1vZGUpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9SU1RHZXRNb2RlDQorLy8qIFxicmllZiBHZXQgUmVzZXQgTW9kZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUlNUR2V0TW9kZSgNCisgICAgICAgIEFUOTFQU19SU1RDIHBSU1RDKQ0KK3sNCisJcmV0dXJuIChwUlNUQy0+UlNUQ19STVIpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9SU1RHZXRTdGF0dXMNCisvLyogXGJyaWVmIEdldCBSZXNldCBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1JTVEdldFN0YXR1cygNCisgICAgICAgIEFUOTFQU19SU1RDIHBSU1RDKQ0KK3sNCisJcmV0dXJuIChwUlNUQy0+UlNUQ19SU1IpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9SU1RJc1NvZnRSc3RBY3RpdmUNCisvLyogXGJyaWVmIFJldHVybiAhPTAgaWYgc29mdHdhcmUgcmVzZXQgaXMgc3RpbGwgbm90IGNvbXBsZXRlZA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUlNUSXNTb2Z0UnN0QWN0aXZlKA0KKyAgICAgICAgQVQ5MVBTX1JTVEMgcFJTVEMpDQorew0KKwlyZXR1cm4gKChwUlNUQy0+UlNUQ19SU1IpICYgQVQ5MUNfUlNUQ19TUkNNUCk7DQorfQ0KIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotKiAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgUElPDQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fQ2ZnUGVyaXBoICovDQotLyoqIFxicmllZiBFbmFibGUgcGlucyB0byBiZSBkcml2ZWQgYnkgcGVyaXBoZXJhbCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BJT19DZmdQZXJpcGgoIEFUOTFQU19QSU8gcFBpbywgICAgICAgICAgICAgLyogXGFyZyBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwZXJpcGhBRW5hYmxlLCAgLyogXGFyZyBQRVJJUEggQSB0byBlbmFibGUgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwZXJpcGhCRW5hYmxlICkgLyogXGFyZyBQRVJJUEggQiB0byBlbmFibGUgKi8NCi0NCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBSVFRDDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgIEFUOTFGX1NldFJUVF9UaW1lQmFzZSgpDQorLy8qIFxicmllZiAgU2V0IHRoZSBSVFQgcHJlc2NhbGVyIGFjY29yZGluZyB0byB0aGUgVGltZUJhc2UgaW4gbXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9SVFRTZXRUaW1lQmFzZSgNCisgICAgICAgIEFUOTFQU19SVFRDIHBSVFRDLCANCisgICAgICAgIHVuc2lnbmVkIGludCBtcykNCiB7DQotICAgIHBQaW8tPlBJT19BU1IgPSBwZXJpcGhBRW5hYmxlOw0KLSAgICBwUGlvLT5QSU9fQlNSID0gcGVyaXBoQkVuYWJsZTsNCi0gICAgcFBpby0+UElPX1BEUiA9ICggcGVyaXBoQUVuYWJsZSB8IHBlcmlwaEJFbmFibGUgKTsgLyogU2V0IGluIFBlcmlwaCBtb2RlICovDQorCWlmIChtcyA+IDIwMDApDQorCQlyZXR1cm4gMTsgICAvLyBBVDkxQ19USU1FX09VVF9PRl9SQU5HRQ0KKwlwUlRUQy0+UlRUQ19SVE1SICY9IH4weEZGRkY7CQ0KKwlwUlRUQy0+UlRUQ19SVE1SIHw9ICgoKG1zIDw8IDE1KSAvMTAwMCkgJiAweEZGRkYpOwkNCisJcmV0dXJuIDA7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19DZmdPdXRwdXQgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBQSU8gaW4gb3V0cHV0IG1vZGUgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fQ2ZnT3V0cHV0KCBBVDkxUFNfUElPIHBQaW8sICAgICAgICAgLyogXGFyZyBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwaW9FbmFibGUgKSAvKiBcYXJnIFBJTyB0byBiZSBlbmFibGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgICBBVDkxRl9SVFRTZXRQcmVzY2FsZXIoKQ0KKy8vKiBcYnJpZWYgIFNldCB0aGUgbmV3IHByZXNjYWxlciB2YWx1ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1JUVFNldFByZXNjYWxlcigNCisgICAgICAgIEFUOTFQU19SVFRDIHBSVFRDLCANCisgICAgICAgIHVuc2lnbmVkIGludCBydHByZXMpDQogew0KLSAgICBwUGlvLT5QSU9fUEVSID0gcGlvRW5hYmxlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNldCBpbiBQSU8gbW9kZSAqLw0KLSAgICBwUGlvLT5QSU9fT0VSID0gcGlvRW5hYmxlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbmZpZ3VyZSBpbiBPdXRwdXQgKi8NCisJcFJUVEMtPlJUVENfUlRNUiAmPSB+MHhGRkZGOwkNCisJcFJUVEMtPlJUVENfUlRNUiB8PSAocnRwcmVzICYgMHhGRkZGKTsJDQorCXJldHVybiAocFJUVEMtPlJUVENfUlRNUik7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19DZmdJbnB1dCAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIFBJTyBpbiBpbnB1dCBtb2RlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUElPX0NmZ0lucHV0KCBBVDkxUFNfUElPIHBQaW8sICAgICAgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaW5wdXRFbmFibGUgKSAvKiBcYXJnIFBJTyB0byBiZSBlbmFibGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgICBBVDkxRl9SVFRSZXN0YXJ0KCkNCisvLyogXGJyaWVmICBSZXN0YXJ0IHRoZSBSVFQgcHJlc2NhbGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1JUVFJlc3RhcnQoDQorICAgICAgICBBVDkxUFNfUlRUQyBwUlRUQykNCiB7DQotICAgIC8qIERpc2FibGUgb3V0cHV0ICovDQotICAgIHBQaW8tPlBJT19PRFIgPSBpbnB1dEVuYWJsZTsNCi0gICAgcFBpby0+UElPX1BFUiA9IGlucHV0RW5hYmxlOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fQ2ZnT3BlbmRyYWluICovDQotLyoqIFxicmllZiBDb25maWd1cmUgUElPIGluIG9wZW4gZHJhaW4gKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fQ2ZnT3BlbmRyYWluKCBBVDkxUFNfUElPIHBQaW8sICAgICAgICAgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG11bHRpRHJ2RW5hYmxlICkgLyogXGFyZyBwaW8gdG8gYmUgY29uZmlndXJlZCBpbiBvcGVuIGRyYWluICovDQotew0KLSAgICAvKiBDb25maWd1cmUgdGhlIG11bHRpLWRyaXZlIG9wdGlvbiAqLw0KLSAgICBwUGlvLT5QSU9fTUREUiA9IH5tdWx0aURydkVuYWJsZTsNCi0gICAgcFBpby0+UElPX01ERVIgPSBtdWx0aURydkVuYWJsZTsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX0NmZ1B1bGx1cCAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIHB1bGx1cCBvbiBQSU8gKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fQ2ZnUHVsbHVwKCBBVDkxUFNfUElPIHBQaW8sICAgICAgICAgICAgLyogXGFyZyBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwdWxsdXBFbmFibGUgKSAvKiBcYXJnIGVuYWJsZSBwdWxsdXAgb24gUElPICovDQotew0KLSAgICAvKiBDb25uZWN0IG9yIG5vdCBQdWxsdXAgKi8NCi0gICAgcFBpby0+UElPX1BQVURSID0gfnB1bGx1cEVuYWJsZTsNCi0gICAgcFBpby0+UElPX1BQVUVSID0gcHVsbHVwRW5hYmxlOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fQ2ZnRGlyZWN0RHJpdmUgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBkaXJlY3QgZHJpdmUgb24gUElPICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUElPX0NmZ0RpcmVjdERyaXZlKCBBVDkxUFNfUElPIHBQaW8sICAgICAgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZGlyZWN0RHJpdmUgKSAvKiBcYXJnIFBJTyB0byBiZSBjb25maWd1cmVkIHdpdGggZGlyZWN0IGRyaXZlICovDQotDQotew0KLSAgICAvKiBDb25maWd1cmUgdGhlIERpcmVjdCBEcml2ZSAqLw0KLSAgICBwUGlvLT5QSU9fT1dEUiA9IH5kaXJlY3REcml2ZTsNCi0gICAgcFBpby0+UElPX09XRVIgPSBkaXJlY3REcml2ZTsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX0NmZ0lucHV0RmlsdGVyICovDQotLyoqIFxicmllZiBFbmFibGUgaW5wdXQgZmlsdGVyIG9uIGlucHV0IFBJTyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BJT19DZmdJbnB1dEZpbHRlciggQVQ5MVBTX1BJTyBwUGlvLCAgICAgICAgICAgLyogXGFyZyBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGlucHV0RmlsdGVyICkgLyogXGFyZyBQSU8gdG8gYmUgY29uZmlndXJlZCB3aXRoIGlucHV0IGZpbHRlciAqLw0KLQ0KLXsNCi0gICAgLyogQ29uZmlndXJlIHRoZSBEaXJlY3QgRHJpdmUgKi8NCi0gICAgcFBpby0+UElPX0lGRFIgPSB+aW5wdXRGaWx0ZXI7DQotICAgIHBQaW8tPlBJT19JRkVSID0gaW5wdXRGaWx0ZXI7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19HZXRJbnB1dCAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIFBJTyBpbnB1dCB2YWx1ZSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElPX0dldElucHV0KCAvKiBccmV0dXJuIFBJTyBpbnB1dCAqLw0KLSAgICBBVDkxUFNfUElPIHBQaW8gKSAgICAgICAgICAgICAgICAgICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLXsNCi0gICAgcmV0dXJuIHBQaW8tPlBJT19QRFNSOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fSXNJbnB1dFNldCAqLw0KLS8qKiBcYnJpZWYgVGVzdCBpZiBQSU8gaXMgaW5wdXQgZmxhZyBpcyBhY3RpdmUgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgaW50IEFUOTFGX1BJT19Jc0lucHV0U2V0KCBBVDkxUFNfUElPIHBQaW8sICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZCAqLw0KLXsNCi0gICAgcmV0dXJuKCBBVDkxRl9QSU9fR2V0SW5wdXQoIHBQaW8gKSAmIGZsYWcgKTsNCisJcFJUVEMtPlJUVENfUlRNUiB8PSBBVDkxQ19SVFRDX1JUVFJTVDsJDQogfQ0KIA0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19TZXRPdXRwdXQgKi8NCi0vKiogXGJyaWVmIFNldCB0byAxIG91dHB1dCBQSU8gKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fU2V0T3V0cHV0KCBBVDkxUFNfUElPIHBQaW8sICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBvdXRwdXQgdG8gYmUgc2V0ICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgICBBVDkxRl9SVFRfU2V0QWxhcm1JTlQoKQ0KKy8vKiBcYnJpZWYgIEVuYWJsZSBSVFQgQWxhcm0gSW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1JUVFNldEFsYXJtSU5UKA0KKyAgICAgICAgQVQ5MVBTX1JUVEMgcFJUVEMpDQogew0KLSAgICBwUGlvLT5QSU9fU09EUiA9IGZsYWc7DQorCXBSVFRDLT5SVFRDX1JUTVIgfD0gQVQ5MUNfUlRUQ19BTE1JRU47DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19DbGVhck91dHB1dCAqLw0KLS8qKiBcYnJpZWYgU2V0IHRvIDAgb3V0cHV0IFBJTyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BJT19DbGVhck91dHB1dCggQVQ5MVBTX1BJTyBwUGlvLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBvdXRwdXQgdG8gYmUgY2xlYXJlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICAgQVQ5MUZfUlRUX0NsZWFyQWxhcm1JTlQoKQ0KKy8vKiBcYnJpZWYgIERpc2FibGUgUlRUIEFsYXJtIEludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9SVFRDbGVhckFsYXJtSU5UKA0KKyAgICAgICAgQVQ5MVBTX1JUVEMgcFJUVEMpDQogew0KLSAgICBwUGlvLT5QSU9fQ09EUiA9IGZsYWc7DQorCXBSVFRDLT5SVFRDX1JUTVIgJj0gfkFUOTFDX1JUVENfQUxNSUVOOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fRm9yY2VPdXRwdXQgKi8NCi0vKiogXGJyaWVmIEZvcmNlIG91dHB1dCB3aGVuIERpcmVjdCBkcml2ZSBvcHRpb24gaXMgZW5hYmxlZCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BJT19Gb3JjZU91dHB1dCggQVQ5MVBTX1BJTyBwUGlvLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBvdXRwdXQgdG8gYmUgZm9yY2VkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgICBBVDkxRl9SVFRfU2V0UnR0SW5jSU5UKCkNCisvLyogXGJyaWVmICBFbmFibGUgUlRUIElOQyBJbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUlRUU2V0UnR0SW5jSU5UKA0KKyAgICAgICAgQVQ5MVBTX1JUVEMgcFJUVEMpDQogew0KLSAgICBwUGlvLT5QSU9fT0RTUiA9IGZsYWc7DQorCXBSVFRDLT5SVFRDX1JUTVIgfD0gQVQ5MUNfUlRUQ19SVFRJTkNJRU47DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19FbmFibGUgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBQSU8gKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fRW5hYmxlKCBBVDkxUFNfUElPIHBQaW8sICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBwaW8gdG8gYmUgZW5hYmxlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICAgQVQ5MUZfUlRUX0NsZWFyUnR0SW5jSU5UKCkNCisvLyogXGJyaWVmICBEaXNhYmxlIFJUVCBJTkMgSW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1JUVENsZWFyUnR0SW5jSU5UKA0KKyAgICAgICAgQVQ5MVBTX1JUVEMgcFJUVEMpDQogew0KLSAgICBwUGlvLT5QSU9fUEVSID0gZmxhZzsNCisJcFJUVEMtPlJUVENfUlRNUiAmPSB+QVQ5MUNfUlRUQ19SVFRJTkNJRU47DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19EaXNhYmxlICovDQotLyoqIFxicmllZiBEaXNhYmxlIFBJTyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BJT19EaXNhYmxlKCBBVDkxUFNfUElPIHBQaW8sICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgcGlvIHRvIGJlIGRpc2FibGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgICBBVDkxRl9SVFRfU2V0QWxhcm1WYWx1ZSgpDQorLy8qIFxicmllZiAgU2V0IFJUVCBBbGFybSBWYWx1ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9SVFRTZXRBbGFybVZhbHVlKA0KKyAgICAgICAgQVQ5MVBTX1JUVEMgcFJUVEMsIHVuc2lnbmVkIGludCBhbGFybSkNCiB7DQotICAgIHBQaW8tPlBJT19QRFIgPSBmbGFnOw0KKwlwUlRUQy0+UlRUQ19SVEFSID0gYWxhcm07DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19HZXRTdGF0dXMgKi8NCi0vKiogXGJyaWVmIFJldHVybiBQSU8gU3RhdHVzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSU9fR2V0U3RhdHVzKCAvKiBccmV0dXJuIFBJTyBTdGF0dXMgKi8NCi0gICAgQVQ5MVBTX1BJTyBwUGlvICkgICAgICAgICAgICAgICAgICAgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgICBBVDkxRl9SVFRfR2V0QWxhcm1WYWx1ZSgpDQorLy8qIFxicmllZiAgR2V0IFJUVCBBbGFybSBWYWx1ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1JUVEdldEFsYXJtVmFsdWUoDQorICAgICAgICBBVDkxUFNfUlRUQyBwUlRUQykNCiB7DQotICAgIHJldHVybiBwUGlvLT5QSU9fUFNSOw0KKwlyZXR1cm4ocFJUVEMtPlJUVENfUlRBUik7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19Jc1NldCAqLw0KLS8qKiBcYnJpZWYgVGVzdCBpZiBQSU8gaXMgU2V0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIGludCBBVDkxRl9QSU9fSXNTZXQoIEFUOTFQU19QSU8gcFBpbywgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICAgQVQ5MUZfUlRUR2V0U3RhdHVzKCkNCisvLyogXGJyaWVmICBSZWFkIHRoZSBSVFQgc3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUlRUR2V0U3RhdHVzKA0KKyAgICAgICAgQVQ5MVBTX1JUVEMgcFJUVEMpDQogew0KLSAgICByZXR1cm4oIEFUOTFGX1BJT19HZXRTdGF0dXMoIHBQaW8gKSAmIGZsYWcgKTsNCisJcmV0dXJuKHBSVFRDLT5SVFRDX1JUU1IpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fT3V0cHV0RW5hYmxlICovDQotLyoqIFxicmllZiBPdXRwdXQgRW5hYmxlIFBJTyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BJT19PdXRwdXRFbmFibGUoIEFUOTFQU19QSU8gcFBpbywgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIHBpbyBvdXRwdXQgdG8gYmUgZW5hYmxlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICAgQVQ5MUZfUlRUX1JlYWRWYWx1ZSgpDQorLy8qIFxicmllZiAgUmVhZCB0aGUgUlRUIHZhbHVlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUlRUUmVhZFZhbHVlKA0KKyAgICAgICAgQVQ5MVBTX1JUVEMgcFJUVEMpDQogew0KLSAgICBwUGlvLT5QSU9fT0VSID0gZmxhZzsNCisgICAgICAgIHJlZ2lzdGVyIHZvbGF0aWxlIHVuc2lnbmVkIGludCB2YWwxLHZhbDI7DQorCWRvDQorCXsNCisJCXZhbDEgPSBwUlRUQy0+UlRUQ19SVFZSOw0KKwkJdmFsMiA9IHBSVFRDLT5SVFRDX1JUVlI7DQorCX0JDQorCXdoaWxlKHZhbDEgIT0gdmFsMik7DQorCXJldHVybih2YWwxKTsNCiB9DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX091dHB1dERpc2FibGUgKi8NCi0vKiogXGJyaWVmIE91dHB1dCBFbmFibGUgUElPICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUElPX091dHB1dERpc2FibGUoIEFUOTFQU19QSU8gcFBpbywgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBwaW8gb3V0cHV0IHRvIGJlIGRpc2FibGVkICovDQotew0KLSAgICBwUGlvLT5QSU9fT0RSID0gZmxhZzsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX0dldE91dHB1dFN0YXR1cyAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIFBJTyBPdXRwdXQgU3RhdHVzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSU9fR2V0T3V0cHV0U3RhdHVzKCAvKiBccmV0dXJuIFBJTyBPdXRwdXQgU3RhdHVzICovDQotICAgIEFUOTFQU19QSU8gcFBpbyApICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLXsNCi0gICAgcmV0dXJuIHBQaW8tPlBJT19PU1I7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19Jc091cHV0U2V0ICovDQotLyoqIFxicmllZiBUZXN0IGlmIFBJTyBPdXRwdXQgaXMgU2V0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIGludCBBVDkxRl9QSU9fSXNPdXRwdXRTZXQoIEFUOTFQU19QSU8gcFBpbywgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZCAqLw0KLXsNCi0gICAgcmV0dXJuKCBBVDkxRl9QSU9fR2V0T3V0cHV0U3RhdHVzKCBwUGlvICkgJiBmbGFnICk7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19JbnB1dEZpbHRlckVuYWJsZSAqLw0KLS8qKiBcYnJpZWYgSW5wdXQgRmlsdGVyIEVuYWJsZSBQSU8gKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fSW5wdXRGaWx0ZXJFbmFibGUoIEFUOTFQU19QSU8gcFBpbywgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgcGlvIGlucHV0IGZpbHRlciB0byBiZSBlbmFibGVkICovDQotew0KLSAgICBwUGlvLT5QSU9fSUZFUiA9IGZsYWc7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19JbnB1dEZpbHRlckRpc2FibGUgKi8NCi0vKiogXGJyaWVmIElucHV0IEZpbHRlciBEaXNhYmxlIFBJTyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BJT19JbnB1dEZpbHRlckRpc2FibGUoIEFUOTFQU19QSU8gcFBpbywgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIHBpbyBpbnB1dCBmaWx0ZXIgdG8gYmUgZGlzYWJsZWQgKi8NCi17DQotICAgIHBQaW8tPlBJT19JRkRSID0gZmxhZzsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX0dldElucHV0RmlsdGVyU3RhdHVzICovDQotLyoqIFxicmllZiBSZXR1cm4gUElPIElucHV0IEZpbHRlciBTdGF0dXMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJT19HZXRJbnB1dEZpbHRlclN0YXR1cyggLyogXHJldHVybiBQSU8gSW5wdXQgRmlsdGVyIFN0YXR1cyAqLw0KLSAgICBBVDkxUFNfUElPIHBQaW8gKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLXsNCi0gICAgcmV0dXJuIHBQaW8tPlBJT19JRlNSOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fSXNJbnB1dEZpbHRlclNldCAqLw0KLS8qKiBcYnJpZWYgVGVzdCBpZiBQSU8gSW5wdXQgZmlsdGVyIGlzIFNldCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSBpbnQgQVQ5MUZfUElPX0lzSW5wdXRGaWx0ZXJTZXQoIEFUOTFQU19QSU8gcFBpbywgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkICovDQotew0KLSAgICByZXR1cm4oIEFUOTFGX1BJT19HZXRJbnB1dEZpbHRlclN0YXR1cyggcFBpbyApICYgZmxhZyApOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fR2V0T3V0cHV0RGF0YVN0YXR1cyAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIFBJTyBPdXRwdXQgRGF0YSBTdGF0dXMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJT19HZXRPdXRwdXREYXRhU3RhdHVzKCAvKiBccmV0dXJuIFBJTyBPdXRwdXQgRGF0YSBTdGF0dXMgKi8NCi0gICAgQVQ5MVBTX1BJTyBwUGlvICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLXsNCi0gICAgcmV0dXJuIHBQaW8tPlBJT19PRFNSOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fSW50ZXJydXB0RW5hYmxlICovDQotLyoqIFxicmllZiBFbmFibGUgUElPIEludGVycnVwdCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BJT19JbnRlcnJ1cHRFbmFibGUoIEFUOTFQU19QSU8gcFBpbywgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIHBpbyBpbnRlcnJ1cHQgdG8gYmUgZW5hYmxlZCAqLw0KLXsNCi0gICAgcFBpby0+UElPX0lFUiA9IGZsYWc7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19JbnRlcnJ1cHREaXNhYmxlICovDQotLyoqIFxicmllZiBEaXNhYmxlIFBJTyBJbnRlcnJ1cHQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fSW50ZXJydXB0RGlzYWJsZSggQVQ5MVBTX1BJTyBwUGlvLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIHBpbyBpbnRlcnJ1cHQgdG8gYmUgZGlzYWJsZWQgKi8NCi17DQotICAgIHBQaW8tPlBJT19JRFIgPSBmbGFnOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fR2V0SW50ZXJydXB0TWFza1N0YXR1cyAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIFBJTyBJbnRlcnJ1cHQgTWFzayBTdGF0dXMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJT19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCAvKiBccmV0dXJuIFBJTyBJbnRlcnJ1cHQgTWFzayBTdGF0dXMgKi8NCi0gICAgQVQ5MVBTX1BJTyBwUGlvICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLXsNCi0gICAgcmV0dXJuIHBQaW8tPlBJT19JTVI7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19HZXRJbnRlcnJ1cHRTdGF0dXMgKi8NCi0vKiogXGJyaWVmIFJldHVybiBQSU8gSW50ZXJydXB0IFN0YXR1cyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElPX0dldEludGVycnVwdFN0YXR1cyggLyogXHJldHVybiBQSU8gSW50ZXJydXB0IFN0YXR1cyAqLw0KLSAgICBBVDkxUFNfUElPIHBQaW8gKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi17DQotICAgIHJldHVybiBwUGlvLT5QSU9fSVNSOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fSXNJbnRlcnJ1cHRNYXNrZWQgKi8NCi0vKiogXGJyaWVmIFRlc3QgaWYgUElPIEludGVycnVwdCBpcyBNYXNrZWQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgaW50IEFUOTFGX1BJT19Jc0ludGVycnVwdE1hc2tlZCggQVQ5MVBTX1BJTyBwUGlvLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkICovDQotew0KLSAgICByZXR1cm4oIEFUOTFGX1BJT19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCBwUGlvICkgJiBmbGFnICk7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19Jc0ludGVycnVwdFNldCAqLw0KLS8qKiBcYnJpZWYgVGVzdCBpZiBQSU8gSW50ZXJydXB0IGlzIFNldCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSBpbnQgQVQ5MUZfUElPX0lzSW50ZXJydXB0U2V0KCBBVDkxUFNfUElPIHBQaW8sICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQgKi8NCi17DQotICAgIHJldHVybiggQVQ5MUZfUElPX0dldEludGVycnVwdFN0YXR1cyggcFBpbyApICYgZmxhZyApOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fTXVsdGlEcml2ZXJFbmFibGUgKi8NCi0vKiogXGJyaWVmIE11bHRpIERyaXZlciBFbmFibGUgUElPICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUElPX011bHRpRHJpdmVyRW5hYmxlKCBBVDkxUFNfUElPIHBQaW8sICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIHBpbyB0byBiZSBlbmFibGVkICovDQotew0KLSAgICBwUGlvLT5QSU9fTURFUiA9IGZsYWc7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19NdWx0aURyaXZlckRpc2FibGUgKi8NCi0vKiogXGJyaWVmIE11bHRpIERyaXZlciBEaXNhYmxlIFBJTyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BJT19NdWx0aURyaXZlckRpc2FibGUoIEFUOTFQU19QSU8gcFBpbywgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIHBpbyB0byBiZSBkaXNhYmxlZCAqLw0KLXsNCi0gICAgcFBpby0+UElPX01ERFIgPSBmbGFnOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fR2V0TXVsdGlEcml2ZXJTdGF0dXMgKi8NCi0vKiogXGJyaWVmIFJldHVybiBQSU8gTXVsdGkgRHJpdmVyIFN0YXR1cyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElPX0dldE11bHRpRHJpdmVyU3RhdHVzKCAvKiBccmV0dXJuIFBJTyBNdWx0aSBEcml2ZXIgU3RhdHVzICovDQotICAgIEFUOTFQU19QSU8gcFBpbyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyICovDQotew0KLSAgICByZXR1cm4gcFBpby0+UElPX01EU1I7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19Jc011bHRpRHJpdmVyU2V0ICovDQotLyoqIFxicmllZiBUZXN0IGlmIFBJTyBNdWx0aURyaXZlciBpcyBTZXQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgaW50IEFUOTFGX1BJT19Jc011bHRpRHJpdmVyU2V0KCBBVDkxUFNfUElPIHBQaW8sICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZCAqLw0KLXsNCi0gICAgcmV0dXJuKCBBVDkxRl9QSU9fR2V0TXVsdGlEcml2ZXJTdGF0dXMoIHBQaW8gKSAmIGZsYWcgKTsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX0FfUmVnaXN0ZXJTZWxlY3Rpb24gKi8NCi0vKiogXGJyaWVmIFBJTyBBIFJlZ2lzdGVyIFNlbGVjdGlvbiAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BJT19BX1JlZ2lzdGVyU2VsZWN0aW9uKCBBVDkxUFNfUElPIHBQaW8sICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgcGlvIEEgcmVnaXN0ZXIgc2VsZWN0aW9uICovDQotew0KLSAgICBwUGlvLT5QSU9fQVNSID0gZmxhZzsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX0JfUmVnaXN0ZXJTZWxlY3Rpb24gKi8NCi0vKiogXGJyaWVmIFBJTyBCIFJlZ2lzdGVyIFNlbGVjdGlvbiAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BJT19CX1JlZ2lzdGVyU2VsZWN0aW9uKCBBVDkxUFNfUElPIHBQaW8sICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgcGlvIEIgcmVnaXN0ZXIgc2VsZWN0aW9uICovDQotew0KLSAgICBwUGlvLT5QSU9fQlNSID0gZmxhZzsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX0dldF9BQl9SZWdpc3RlclN0YXR1cyAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIFBJTyBJbnRlcnJ1cHQgU3RhdHVzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSU9fR2V0X0FCX1JlZ2lzdGVyU3RhdHVzKCAvKiBccmV0dXJuIFBJTyBBQiBSZWdpc3RlciBTdGF0dXMgKi8NCi0gICAgQVQ5MVBTX1BJTyBwUGlvICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyICovDQotew0KLSAgICByZXR1cm4gcFBpby0+UElPX0FCU1I7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19Jc0FCX1JlZ2lzdGVyU2V0ICovDQotLyoqIFxicmllZiBUZXN0IGlmIFBJTyBBQiBSZWdpc3RlciBpcyBTZXQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgaW50IEFUOTFGX1BJT19Jc0FCX1JlZ2lzdGVyU2V0KCBBVDkxUFNfUElPIHBQaW8sICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZCAqLw0KLXsNCi0gICAgcmV0dXJuKCBBVDkxRl9QSU9fR2V0X0FCX1JlZ2lzdGVyU3RhdHVzKCBwUGlvICkgJiBmbGFnICk7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19PdXRwdXRXcml0ZUVuYWJsZSAqLw0KLS8qKiBcYnJpZWYgT3V0cHV0IFdyaXRlIEVuYWJsZSBQSU8gKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fT3V0cHV0V3JpdGVFbmFibGUoIEFUOTFQU19QSU8gcFBpbywgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgcGlvIG91dHB1dCB3cml0ZSB0byBiZSBlbmFibGVkICovDQotew0KLSAgICBwUGlvLT5QSU9fT1dFUiA9IGZsYWc7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19PdXRwdXRXcml0ZURpc2FibGUgKi8NCi0vKiogXGJyaWVmIE91dHB1dCBXcml0ZSBEaXNhYmxlIFBJTyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BJT19PdXRwdXRXcml0ZURpc2FibGUoIEFUOTFQU19QSU8gcFBpbywgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIHBpbyBvdXRwdXQgd3JpdGUgdG8gYmUgZGlzYWJsZWQgKi8NCi17DQotICAgIHBQaW8tPlBJT19PV0RSID0gZmxhZzsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX0dldE91dHB1dFdyaXRlU3RhdHVzICovDQotLyoqIFxicmllZiBSZXR1cm4gUElPIE91dHB1dCBXcml0ZSBTdGF0dXMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJT19HZXRPdXRwdXRXcml0ZVN0YXR1cyggLyogXHJldHVybiBQSU8gT3V0cHV0IFdyaXRlIFN0YXR1cyAqLw0KLSAgICBBVDkxUFNfUElPIHBQaW8gKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLXsNCi0gICAgcmV0dXJuIHBQaW8tPlBJT19PV1NSOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fSXNPdXRwdXRXcml0ZVNldCAqLw0KLS8qKiBcYnJpZWYgVGVzdCBpZiBQSU8gT3V0cHV0V3JpdGUgaXMgU2V0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIGludCBBVDkxRl9QSU9fSXNPdXRwdXRXcml0ZVNldCggQVQ5MVBTX1BJTyBwUGlvLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQgKi8NCi17DQotICAgIHJldHVybiggQVQ5MUZfUElPX0dldE91dHB1dFdyaXRlU3RhdHVzKCBwUGlvICkgJiBmbGFnICk7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19HZXRDZmdQdWxsdXAgKi8NCi0vKiogXGJyaWVmIFJldHVybiBQSU8gQ29uZmlndXJhdGlvbiBQdWxsdXAgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJT19HZXRDZmdQdWxsdXAoIC8qIFxyZXR1cm4gUElPIENvbmZpZ3VyYXRpb24gUHVsbHVwICovDQotICAgIEFUOTFQU19QSU8gcFBpbyApICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLXsNCi0gICAgcmV0dXJuIHBQaW8tPlBJT19QUFVTUjsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX0lzT3V0cHV0RGF0YVN0YXR1c1NldCAqLw0KLS8qKiBcYnJpZWYgVGVzdCBpZiBQSU8gT3V0cHV0IERhdGEgU3RhdHVzIGlzIFNldCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSBpbnQgQVQ5MUZfUElPX0lzT3V0cHV0RGF0YVN0YXR1c1NldCggQVQ5MVBTX1BJTyBwUGlvLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZCAqLw0KLXsNCi0gICAgcmV0dXJuKCBBVDkxRl9QSU9fR2V0T3V0cHV0RGF0YVN0YXR1cyggcFBpbyApICYgZmxhZyApOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fSXNDZmdQdWxsdXBTdGF0dXNTZXQgKi8NCi0vKiogXGJyaWVmIFRlc3QgaWYgUElPIENvbmZpZ3VyYXRpb24gUHVsbHVwIFN0YXR1cyBpcyBTZXQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgaW50IEFUOTFGX1BJT19Jc0NmZ1B1bGx1cFN0YXR1c1NldCggQVQ5MVBTX1BJTyBwUGlvLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkICovDQotew0KLSAgICByZXR1cm4oIH5BVDkxRl9QSU9fR2V0Q2ZnUHVsbHVwKCBwUGlvICkgJiBmbGFnICk7DQotfQ0KLQ0KIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotKiAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgUE1DDQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QTUNfQ2ZnU3lzQ2xrRW5hYmxlUmVnICovDQotLyoqIFxicmllZiBDb25maWd1cmUgdGhlIFN5c3RlbSBDbG9jayBFbmFibGUgUmVnaXN0ZXIgb2YgdGhlIFBNQyBjb250cm9sbGVyICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0NmZ1N5c0Nsa0VuYWJsZVJlZyggQVQ5MVBTX1BNQyBwUE1DLCAvKiBcYXJnIHBvaW50ZXIgdG8gUE1DIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtb2RlICkNCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBQSVRDDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSVRJbml0DQorLy8qIFxicmllZiBTeXN0ZW0gdGltZXIgaW5pdCA6IHBlcmlvZCBpbiC1c2Vjb25kLCBzeXN0ZW0gY2xvY2sgZnJlcSBpbiBNSHoNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSVRJbml0KA0KKyAgICAgICAgQVQ5MVBTX1BJVEMgcFBJVEMsDQorICAgICAgICB1bnNpZ25lZCBpbnQgcGVyaW9kLA0KKyAgICAgICAgdW5zaWduZWQgaW50IHBpdF9mcmVxdWVuY3kpDQogew0KLSAgICAvKiogV3JpdGUgdG8gdGhlIFNDRVIgcmVnaXN0ZXIgKi8NCi0gICAgcFBNQy0+UE1DX1NDRVIgPSBtb2RlOw0KKwlwUElUQy0+UElUQ19QSU1SID0gcGVyaW9kPyAocGVyaW9kICogcGl0X2ZyZXF1ZW5jeSArIDgpID4+IDQgOiAwOyAvLyArOCB0byBhdm9pZCAlMTAgYW5kIC8xMA0KKwlwUElUQy0+UElUQ19QSU1SIHw9IEFUOTFDX1BJVENfUElURU47CSANCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUE1DX0NmZ1N5c0Nsa0Rpc2FibGVSZWcgKi8NCi0vKiogXGJyaWVmIENvbmZpZ3VyZSB0aGUgU3lzdGVtIENsb2NrIERpc2FibGUgUmVnaXN0ZXIgb2YgdGhlIFBNQyBjb250cm9sbGVyICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0NmZ1N5c0Nsa0Rpc2FibGVSZWcoIEFUOTFQU19QTUMgcFBNQywgLyogXGFyZyBwb2ludGVyIHRvIFBNQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1vZGUgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJVFNldFBJVg0KKy8vKiBcYnJpZWYgU2V0IHRoZSBQSVQgUGVyaW9kaWMgSW50ZXJ2YWwgVmFsdWUgDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElUU2V0UElWKA0KKyAgICAgICAgQVQ5MVBTX1BJVEMgcFBJVEMsDQorICAgICAgICB1bnNpZ25lZCBpbnQgcGl2KQ0KIHsNCi0gICAgLyoqIFdyaXRlIHRvIHRoZSBTQ0RSIHJlZ2lzdGVyICovDQotICAgIHBQTUMtPlBNQ19TQ0RSID0gbW9kZTsNCisJcFBJVEMtPlBJVENfUElNUiA9IHBpdiB8IChwUElUQy0+UElUQ19QSU1SICYgKEFUOTFDX1BJVENfUElURU4gfCBBVDkxQ19QSVRDX1BJVElFTikpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QTUNfR2V0U3lzQ2xrU3RhdHVzUmVnICovDQotLyoqIFxicmllZiBSZXR1cm4gdGhlIFN5c3RlbSBDbG9jayBTdGF0dXMgUmVnaXN0ZXIgb2YgdGhlIFBNQyBjb250cm9sbGVyICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QTUNfR2V0U3lzQ2xrU3RhdHVzUmVnKCBBVDkxUFNfUE1DIHBQTUMgLyogcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSVRFbmFibGVJbnQNCisvLyogXGJyaWVmIEVuYWJsZSBQSVQgcGVyaW9kaWMgaW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElURW5hYmxlSW50KA0KKyAgICAgICAgQVQ5MVBTX1BJVEMgcFBJVEMpDQogew0KLSAgICByZXR1cm4gcFBNQy0+UE1DX1NDU1I7DQorCXBQSVRDLT5QSVRDX1BJTVIgfD0gQVQ5MUNfUElUQ19QSVRJRU47CSANCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrICovDQotLyoqIFxicmllZiBFbmFibGUgcGVyaXBoZXJhbCBjbG9jayAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jayggQVQ5MVBTX1BNQyBwUE1DLCAgICAgICAgIC8qIFxhcmcgcG9pbnRlciB0byBQTUMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcGVyaXBoSWRzICkgLyogXGFyZyBJRHMgb2YgcGVyaXBoZXJhbHMgdG8gZW5hYmxlICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElURGlzYWJsZUludA0KKy8vKiBcYnJpZWYgRGlzYWJsZSBQSVQgcGVyaW9kaWMgaW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElURGlzYWJsZUludCgNCisgICAgICAgIEFUOTFQU19QSVRDIHBQSVRDKQ0KIHsNCi0gICAgcFBNQy0+UE1DX1BDRVIgPSBwZXJpcGhJZHM7DQorCXBQSVRDLT5QSVRDX1BJTVIgJj0gfkFUOTFDX1BJVENfUElUSUVOOwkgDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BNQ19EaXNhYmxlUGVyaXBoQ2xvY2sgKi8NCi0vKiogXGJyaWVmIERpc2FibGUgcGVyaXBoZXJhbCBjbG9jayAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BNQ19EaXNhYmxlUGVyaXBoQ2xvY2soIEFUOTFQU19QTUMgcFBNQywgICAgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gUE1DIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwZXJpcGhJZHMgKSAvKiBcYXJnIElEcyBvZiBwZXJpcGhlcmFscyB0byBlbmFibGUgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSVRHZXRNb2RlDQorLy8qIFxicmllZiBSZWFkIFBJVCBtb2RlIHJlZ2lzdGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSVRHZXRNb2RlKA0KKyAgICAgICAgQVQ5MVBTX1BJVEMgcFBJVEMpDQogew0KLSAgICBwUE1DLT5QTUNfUENEUiA9IHBlcmlwaElkczsNCisJcmV0dXJuKHBQSVRDLT5QSVRDX1BJTVIpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QTUNfR2V0UGVyaXBoQ2xvY2sgKi8NCi0vKiogXGJyaWVmIEdldCBwZXJpcGhlcmFsIGNsb2NrIHN0YXR1cyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUE1DX0dldFBlcmlwaENsb2NrKCBBVDkxUFNfUE1DIHBQTUMgKSAvKiBcYXJnIHBvaW50ZXIgdG8gUE1DIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSVRHZXRTdGF0dXMNCisvLyogXGJyaWVmIFJlYWQgUElUIHN0YXR1cyByZWdpc3Rlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElUR2V0U3RhdHVzKA0KKyAgICAgICAgQVQ5MVBTX1BJVEMgcFBJVEMpDQogew0KLSAgICByZXR1cm4gcFBNQy0+UE1DX1BDU1I7DQorCXJldHVybihwUElUQy0+UElUQ19QSVNSKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQ0tHUl9DZmdNYWluT3NjaWxsYXRvclJlZyAqLw0KLS8qKiBcYnJpZWYgQ2ZnIHRoZSBtYWluIG9zY2lsbGF0b3IgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9DS0dSX0NmZ01haW5Pc2NpbGxhdG9yUmVnKCBBVDkxUFNfQ0tHUiBwQ0tHUiwgLyogXGFyZyBwb2ludGVyIHRvIENLR1IgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1vZGUgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJVEdldFBJSVINCisvLyogXGJyaWVmIFJlYWQgUElUIENQSVYgYW5kIFBJQ05UIHdpdGhvdXQgcmVzc2V0dGluZyB0aGUgY291bnRlcnMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJVEdldFBJSVIoDQorICAgICAgICBBVDkxUFNfUElUQyBwUElUQykNCiB7DQotICAgIHBDS0dSLT5DS0dSX01PUiA9IG1vZGU7DQorCXJldHVybihwUElUQy0+UElUQ19QSUlSKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQ0tHUl9HZXRNYWluT3NjaWxsYXRvclJlZyAqLw0KLS8qKiBcYnJpZWYgQ2ZnIHRoZSBtYWluIG9zY2lsbGF0b3IgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NLR1JfR2V0TWFpbk9zY2lsbGF0b3JSZWcoIEFUOTFQU19DS0dSIHBDS0dSICkgLyogXGFyZyBwb2ludGVyIHRvIENLR1IgY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJVEdldFBJVlINCisvLyogXGJyaWVmIFJlYWQgU3lzdGVtIHRpbWVyIENQSVYgYW5kIFBJQ05UIHdpdGhvdXQgcmVzc2V0dGluZyB0aGUgY291bnRlcnMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJVEdldFBJVlIoDQorICAgICAgICBBVDkxUFNfUElUQyBwUElUQykNCiB7DQotICAgIHJldHVybiBwQ0tHUi0+Q0tHUl9NT1I7DQorCXJldHVybihwUElUQy0+UElUQ19QSVZSKTsNCiB9DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQ0tHUl9FbmFibGVNYWluT3NjaWxsYXRvciAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIHRoZSBtYWluIG9zY2lsbGF0b3IgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9DS0dSX0VuYWJsZU1haW5Pc2NpbGxhdG9yKCBBVDkxUFNfQ0tHUiBwQ0tHUiApIC8qIFxhcmcgcG9pbnRlciB0byBDS0dSIGNvbnRyb2xsZXIgKi8NCi17DQotICAgIHBDS0dSLT5DS0dSX01PUiB8PSBBVDkxQ19DS0dSX01PU0NFTjsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQ0tHUl9EaXNhYmxlTWFpbk9zY2lsbGF0b3IgKi8NCi0vKiogXGJyaWVmIERpc2FibGUgdGhlIG1haW4gb3NjaWxsYXRvciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0NLR1JfRGlzYWJsZU1haW5Pc2NpbGxhdG9yKCBBVDkxUFNfQ0tHUiBwQ0tHUiApIC8qIFxhcmcgcG9pbnRlciB0byBDS0dSIGNvbnRyb2xsZXIgKi8NCi17DQotICAgIHBDS0dSLT5DS0dSX01PUiAmPSB+QVQ5MUNfQ0tHUl9NT1NDRU47DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0NLR1JfQ2ZnTWFpbk9zY1N0YXJ0VXBUaW1lICovDQotLyoqIFxicmllZiBDZmcgTU9SIFJlZ2lzdGVyIGFjY29yZGluZyB0byB0aGUgbWFpbiBvc2Mgc3RhcnR1cCB0aW1lICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQ0tHUl9DZmdNYWluT3NjU3RhcnRVcFRpbWUoIEFUOTFQU19DS0dSIHBDS0dSLCAgICAgICAgIC8qIFxhcmcgcG9pbnRlciB0byBDS0dSIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3RhcnR1cF90aW1lLCAvKiBcYXJnIG1haW4gb3NjIHN0YXJ0dXAgdGltZSBpbiBtaWNyb3NlY29uZCAodXMpICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNsb3dDbG9jayApICAgLyogXGFyZyBzbG93Q2xvY2sgaW4gSHogKi8NCi17DQotICAgIHBDS0dSLT5DS0dSX01PUiAmPSB+QVQ5MUNfQ0tHUl9PU0NPVU5UOw0KLSAgICBwQ0tHUi0+Q0tHUl9NT1IgfD0gKCAoIHNsb3dDbG9jayAqIHN0YXJ0dXBfdGltZSApIC8gKCA4ICogMTAwMDAwMCApICkgPDwgODsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQ0tHUl9HZXRNYWluQ2xvY2tGcmVxUmVnICovDQotLyoqIFxicmllZiBDZmcgdGhlIG1haW4gb3NjaWxsYXRvciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0tHUl9HZXRNYWluQ2xvY2tGcmVxUmVnKCBBVDkxUFNfQ0tHUiBwQ0tHUiApIC8qIFxhcmcgcG9pbnRlciB0byBDS0dSIGNvbnRyb2xsZXIgKi8NCi17DQotICAgIHJldHVybiBwQ0tHUi0+Q0tHUl9NQ0ZSOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9DS0dSX0dldE1haW5DbG9jayAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIE1haW4gY2xvY2sgaW4gSHogKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NLR1JfR2V0TWFpbkNsb2NrKCBBVDkxUFNfQ0tHUiBwQ0tHUiwgICAgICAgLyogXGFyZyBwb2ludGVyIHRvIENLR1IgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNsb3dDbG9jayApIC8qIFxhcmcgc2xvd0Nsb2NrIGluIEh6ICovDQotew0KLSAgICByZXR1cm4gKCAoIHBDS0dSLT5DS0dSX01DRlIgJiBBVDkxQ19DS0dSX01BSU5GICkgKiBzbG93Q2xvY2sgKSA+PiA0Ow0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QTUNfQ2ZnTUNLUmVnICovDQotLyoqIFxicmllZiBDZmcgTWFzdGVyIENsb2NrIFJlZ2lzdGVyICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0NmZ01DS1JlZyggQVQ5MVBTX1BNQyBwUE1DLCAvKiBcYXJnIHBvaW50ZXIgdG8gUE1DIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtb2RlICkNCi17DQotICAgIHBQTUMtPlBNQ19NQ0tSID0gbW9kZTsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUE1DX0dldE1DS1JlZyAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIE1hc3RlciBDbG9jayBSZWdpc3RlciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUE1DX0dldE1DS1JlZyggQVQ5MVBTX1BNQyBwUE1DICkgLyogXGFyZyBwb2ludGVyIHRvIFBNQyBjb250cm9sbGVyICovDQotew0KLSAgICByZXR1cm4gcFBNQy0+UE1DX01DS1I7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUE1DX0dldE1hc3RlckNsb2NrICovDQotLyoqIFxicmllZiBSZXR1cm4gbWFzdGVyIGNsb2NrIGluIEh6IHdoaWNoIGNvcnJlcG9uZHMgdG8gcHJvY2Vzc29yIGNsb2NrIGZvciBBUk03ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BNQ19HZXRNYXN0ZXJDbG9jayggQVQ5MVBTX1BNQyBwUE1DLCAgICAgICAgIC8qIFxhcmcgcG9pbnRlciB0byBQTUMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFQU19DS0dSIHBDS0dSLCAgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gQ0tHUiBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNsb3dDbG9jayApIC8qIFxhcmcgc2xvd0Nsb2NrIGluIEh6ICovDQotew0KLSAgICB1bnNpZ25lZCBpbnQgcmVnID0gcFBNQy0+UE1DX01DS1I7DQotICAgIHVuc2lnbmVkIGludCBwcmVzY2FsZXIgPSAoIDEgPDwgKCAoIHJlZyAmIEFUOTFDX1BNQ19QUkVTICkgPj4gMiApICk7DQotICAgIHVuc2lnbmVkIGludCBwbGxEaXZpZGVyLCBwbGxNdWx0aXBsaWVyOw0KLQ0KLSAgICBzd2l0Y2goIHJlZyAmIEFUOTFDX1BNQ19DU1MgKQ0KLSAgICB7DQotICAgICAgICBjYXNlIEFUOTFDX1BNQ19DU1NfU0xPV19DTEs6IC8qIFNsb3cgY2xvY2sgc2VsZWN0ZWQgKi8NCi0gICAgICAgICAgICByZXR1cm4gc2xvd0Nsb2NrIC8gcHJlc2NhbGVyOw0KLQ0KLSAgICAgICAgY2FzZSBBVDkxQ19QTUNfQ1NTX01BSU5fQ0xLOiAvKiBNYWluIGNsb2NrIGlzIHNlbGVjdGVkICovDQotICAgICAgICAgICAgcmV0dXJuIEFUOTFGX0NLR1JfR2V0TWFpbkNsb2NrKCBwQ0tHUiwgc2xvd0Nsb2NrICkgLyBwcmVzY2FsZXI7DQotDQotICAgICAgICBjYXNlIEFUOTFDX1BNQ19DU1NfUExMX0NMSzogLyogUExMQiBjbG9jayBpcyBzZWxlY3RlZCAqLw0KLSAgICAgICAgICAgIHJlZyA9IHBDS0dSLT5DS0dSX1BMTFI7DQotICAgICAgICAgICAgcGxsRGl2aWRlciA9ICggcmVnICYgQVQ5MUNfQ0tHUl9ESVYgKTsNCi0gICAgICAgICAgICBwbGxNdWx0aXBsaWVyID0gKCAoIHJlZyAmIEFUOTFDX0NLR1JfTVVMICkgPj4gMTYgKSArIDE7DQotICAgICAgICAgICAgcmV0dXJuIEFUOTFGX0NLR1JfR2V0TWFpbkNsb2NrKCBwQ0tHUiwgc2xvd0Nsb2NrICkgLyBwbGxEaXZpZGVyICogcGxsTXVsdGlwbGllciAvIHByZXNjYWxlcjsNCi0gICAgfQ0KLQ0KLSAgICByZXR1cm4gMDsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUE1DX0VuYWJsZVBDSyAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIHBlcmlwaGVyYWwgY2xvY2sgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QTUNfRW5hYmxlUENLKCBBVDkxUFNfUE1DIHBQTUMsICAvKiBcYXJnIHBvaW50ZXIgdG8gUE1DIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwY2ssIC8qIFxhcmcgUGVyaXBoZXJhbCBjbG9jayBpZGVudGlmaWVyIDAgLi4gNyAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1vZGUgKQ0KLXsNCi0gICAgcFBNQy0+UE1DX1BDS1JbIHBjayBdID0gbW9kZTsNCi0gICAgcFBNQy0+UE1DX1NDRVIgPSAoIDEgPDwgcGNrICkgPDwgODsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUE1DX0Rpc2FibGVQQ0sgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBwZXJpcGhlcmFsIGNsb2NrICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0Rpc2FibGVQQ0soIEFUOTFQU19QTUMgcFBNQywgICAvKiBcYXJnIHBvaW50ZXIgdG8gUE1DIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcGNrICkgLyogXGFyZyBQZXJpcGhlcmFsIGNsb2NrIGlkZW50aWZpZXIgMCAuLiA3ICovDQotew0KLSAgICBwUE1DLT5QTUNfU0NEUiA9ICggMSA8PCBwY2sgKSA8PCA4Ow0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QTUNfRW5hYmxlSXQgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBQTUMgaW50ZXJydXB0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0VuYWJsZUl0KCBBVDkxUFNfUE1DIHBQTUMsICAgIC8qIHBvaW50ZXIgdG8gYSBQTUMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIElUIHRvIGJlIGVuYWJsZWQgKi8NCi17DQotICAgIC8qKiBXcml0ZSB0byB0aGUgSUVSIHJlZ2lzdGVyICovDQotICAgIHBQTUMtPlBNQ19JRVIgPSBmbGFnOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QTUNfRGlzYWJsZUl0ICovDQotLyoqIFxicmllZiBEaXNhYmxlIFBNQyBpbnRlcnJ1cHQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QTUNfRGlzYWJsZUl0KCBBVDkxUFNfUE1DIHBQTUMsICAgIC8qIHBvaW50ZXIgdG8gYSBQTUMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBJVCB0byBiZSBkaXNhYmxlZCAqLw0KLXsNCi0gICAgLyoqIFdyaXRlIHRvIHRoZSBJRFIgcmVnaXN0ZXIgKi8NCi0gICAgcFBNQy0+UE1DX0lEUiA9IGZsYWc7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BNQ19HZXRTdGF0dXMgKi8NCi0vKiogXGJyaWVmIFJldHVybiBQTUMgSW50ZXJydXB0IFN0YXR1cyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUE1DX0dldFN0YXR1cyggLyogXHJldHVybiBQTUMgSW50ZXJydXB0IFN0YXR1cyAqLw0KLSAgICBBVDkxUFNfUE1DIHBQTUMgKSAgICAgICAgICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIGEgUE1DIGNvbnRyb2xsZXIgKi8NCi17DQotICAgIHJldHVybiBwUE1DLT5QTUNfU1I7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BNQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzICovDQotLyoqIFxicmllZiBSZXR1cm4gUE1DIEludGVycnVwdCBNYXNrIFN0YXR1cyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUE1DX0dldEludGVycnVwdE1hc2tTdGF0dXMoIC8qIFxyZXR1cm4gUE1DIEludGVycnVwdCBNYXNrIFN0YXR1cyAqLw0KLSAgICBBVDkxUFNfUE1DIHBQTUMgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcG9pbnRlciB0byBhIFBNQyBjb250cm9sbGVyICovDQotew0KLSAgICByZXR1cm4gcFBNQy0+UE1DX0lNUjsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUE1DX0lzSW50ZXJydXB0TWFza2VkICovDQotLyoqIFxicmllZiBUZXN0IGlmIFBNQyBJbnRlcnJ1cHQgaXMgTWFza2VkICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QTUNfSXNJbnRlcnJ1cHRNYXNrZWQoIEFUOTFQU19QTUMgcFBNQywgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBNQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZCAqLw0KLXsNCi0gICAgcmV0dXJuKCBBVDkxRl9QTUNfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggcFBNQyApICYgZmxhZyApOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QTUNfSXNTdGF0dXNTZXQgKi8NCi0vKiogXGJyaWVmIFRlc3QgaWYgUE1DIFN0YXR1cyBpcyBTZXQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BNQ19Jc1N0YXR1c1NldCggQVQ5MVBTX1BNQyBwUE1DLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUE1DIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkICovDQotew0KLSAgICByZXR1cm4oIEFUOTFGX1BNQ19HZXRTdGF0dXMoIHBQTUMgKSAmIGZsYWcgKTsNCi19IC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICAqICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFJTVEMNCi0gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUlNUU29mdFJlc2V0ICovDQotLyoqIFxicmllZiBTdGFydCBTb2Z0d2FyZSBSZXNldCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1JTVFNvZnRSZXNldCggQVQ5MVBTX1JTVEMgcFJTVEMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCByZXNldCApDQotew0KLSAgICBwUlNUQy0+UlNUQ19SQ1IgPSAoIDB4QTUwMDAwMDAgfCByZXNldCApOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9SU1RTZXRNb2RlICovDQotLyoqIFxicmllZiBTZXQgUmVzZXQgTW9kZSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1JTVFNldE1vZGUoIEFUOTFQU19SU1RDIHBSU1RDLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1vZGUgKQ0KLXsNCi0gICAgcFJTVEMtPlJTVENfUk1SID0gKCAweEE1MDAwMDAwIHwgbW9kZSApOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9SU1RHZXRNb2RlICovDQotLyoqIFxicmllZiBHZXQgUmVzZXQgTW9kZSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUlNUR2V0TW9kZSggQVQ5MVBTX1JTVEMgcFJTVEMgKQ0KLXsNCi0gICAgcmV0dXJuKCBwUlNUQy0+UlNUQ19STVIgKTsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUlNUR2V0U3RhdHVzICovDQotLyoqIFxicmllZiBHZXQgUmVzZXQgU3RhdHVzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9SU1RHZXRTdGF0dXMoIEFUOTFQU19SU1RDIHBSU1RDICkNCi17DQotICAgIHJldHVybiggcFJTVEMtPlJTVENfUlNSICk7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1JTVElzU29mdFJzdEFjdGl2ZSAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuICE9MCBpZiBzb2Z0d2FyZSByZXNldCBpcyBzdGlsbCBub3QgY29tcGxldGVkICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9SU1RJc1NvZnRSc3RBY3RpdmUoIEFUOTFQU19SU1RDIHBSU1RDICkNCi17DQotICAgIHJldHVybiggKCBwUlNUQy0+UlNUQ19SU1IgKSAmIEFUOTFDX1JTVENfU1JDTVAgKTsNCi19DQotDQogLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0qICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBSVFRDDQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgIEFUOTFGX1NldFJUVF9UaW1lQmFzZSgpICovDQotLyoqIFxicmllZiAgU2V0IHRoZSBSVFQgcHJlc2NhbGVyIGFjY29yZGluZyB0byB0aGUgVGltZUJhc2UgaW4gbXMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9SVFRTZXRUaW1lQmFzZSggQVQ5MVBTX1JUVEMgcFJUVEMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbXMgKQ0KKyAgICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFdEVEMNCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1dEVFNldE1vZGUNCisvLyogXGJyaWVmIFNldCBXYXRjaGRvZyBNb2RlIFJlZ2lzdGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfV0RUU2V0TW9kZSgNCisgICAgICAgIEFUOTFQU19XRFRDIHBXRFRDLA0KKyAgICAgICAgdW5zaWduZWQgaW50IE1vZGUpDQogew0KLSAgICBpZiggbXMgPiAyMDAwICkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIDE7IC8qIEFUOTFDX1RJTUVfT1VUX09GX1JBTkdFICovDQotICAgIH0NCi0NCi0gICAgcFJUVEMtPlJUVENfUlRNUiAmPSB+MHhGRkZGOw0KLSAgICBwUlRUQy0+UlRUQ19SVE1SIHw9ICggKCAoIG1zIDw8IDE1ICkgLyAxMDAwICkgJiAweEZGRkYgKTsNCi0gICAgcmV0dXJuIDA7DQorCXBXRFRDLT5XRFRDX1dETVIgPSBNb2RlOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgIEFUOTFGX1JUVFNldFByZXNjYWxlcigpICovDQotLyoqIFxicmllZiAgU2V0IHRoZSBuZXcgcHJlc2NhbGVyIHZhbHVlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUlRUU2V0UHJlc2NhbGVyKCBBVDkxUFNfUlRUQyBwUlRUQywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcnRwcmVzICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9XRFRSZXN0YXJ0DQorLy8qIFxicmllZiBSZXN0YXJ0IFdhdGNoZG9nDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfV0RUUmVzdGFydCgNCisgICAgICAgIEFUOTFQU19XRFRDIHBXRFRDKQ0KIHsNCi0gICAgcFJUVEMtPlJUVENfUlRNUiAmPSB+MHhGRkZGOw0KLSAgICBwUlRUQy0+UlRUQ19SVE1SIHw9ICggcnRwcmVzICYgMHhGRkZGICk7DQotICAgIHJldHVybiggcFJUVEMtPlJUVENfUlRNUiApOw0KKwlwV0RUQy0+V0RUQ19XRENSID0gMHhBNTAwMDAwMTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgICBBVDkxRl9SVFRSZXN0YXJ0KCkgKi8NCi0vKiogXGJyaWVmICBSZXN0YXJ0IHRoZSBSVFQgcHJlc2NhbGVyICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1JUVFJlc3RhcnQoIEFUOTFQU19SVFRDIHBSVFRDICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9XRFRTR2V0dGF0dXMNCisvLyogXGJyaWVmIEdldCBXYXRjaGRvZyBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1dEVFNHZXR0YXR1cygNCisgICAgICAgIEFUOTFQU19XRFRDIHBXRFRDKQ0KIHsNCi0gICAgcFJUVEMtPlJUVENfUlRNUiB8PSBBVDkxQ19SVFRDX1JUVFJTVDsNCisJcmV0dXJuKHBXRFRDLT5XRFRDX1dEU1IgJiAweDMpOw0KIH0NCiANCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgIEFUOTFGX1JUVF9TZXRBbGFybUlOVCgpICovDQotLyoqIFxicmllZiAgRW5hYmxlIFJUVCBBbGFybSBJbnRlcnJ1cHQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUlRUU2V0QWxhcm1JTlQoIEFUOTFQU19SVFRDIHBSVFRDICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9XRFRHZXRQZXJpb2QNCisvLyogXGJyaWVmIFRyYW5zbGF0ZSBtcyBpbnRvIFdhdGNoZG9nIENvbXBhdGlibGUgdmFsdWUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1dEVEdldFBlcmlvZCh1bnNpZ25lZCBpbnQgbXMpDQogew0KLSAgICBwUlRUQy0+UlRUQ19SVE1SIHw9IEFUOTFDX1JUVENfQUxNSUVOOw0KKwlpZiAoKG1zIDwgNCkgfHwgKG1zID4gMTYwMDApKQ0KKwkJcmV0dXJuIDA7DQorCXJldHVybigobXMgPDwgOCkgLyAxMDAwKTsNCiB9DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgICBBVDkxRl9SVFRfQ2xlYXJBbGFybUlOVCgpICovDQotLyoqIFxicmllZiAgRGlzYWJsZSBSVFQgQWxhcm0gSW50ZXJydXB0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1JUVENsZWFyQWxhcm1JTlQoIEFUOTFQU19SVFRDIHBSVFRDICkNCi17DQotICAgIHBSVFRDLT5SVFRDX1JUTVIgJj0gfkFUOTFDX1JUVENfQUxNSUVOOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgIEFUOTFGX1JUVF9TZXRSdHRJbmNJTlQoKSAqLw0KLS8qKiBcYnJpZWYgIEVuYWJsZSBSVFQgSU5DIEludGVycnVwdCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9SVFRTZXRSdHRJbmNJTlQoIEFUOTFQU19SVFRDIHBSVFRDICkNCi17DQotICAgIHBSVFRDLT5SVFRDX1JUTVIgfD0gQVQ5MUNfUlRUQ19SVFRJTkNJRU47DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICAgQVQ5MUZfUlRUX0NsZWFyUnR0SW5jSU5UKCkgKi8NCi0vKiogXGJyaWVmICBEaXNhYmxlIFJUVCBJTkMgSW50ZXJydXB0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1JUVENsZWFyUnR0SW5jSU5UKCBBVDkxUFNfUlRUQyBwUlRUQyApDQotew0KLSAgICBwUlRUQy0+UlRUQ19SVE1SICY9IH5BVDkxQ19SVFRDX1JUVElOQ0lFTjsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgICBBVDkxRl9SVFRfU2V0QWxhcm1WYWx1ZSgpICovDQotLyoqIFxicmllZiAgU2V0IFJUVCBBbGFybSBWYWx1ZSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9SVFRTZXRBbGFybVZhbHVlKCBBVDkxUFNfUlRUQyBwUlRUQywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBhbGFybSApDQotew0KLSAgICBwUlRUQy0+UlRUQ19SVEFSID0gYWxhcm07DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICAgQVQ5MUZfUlRUX0dldEFsYXJtVmFsdWUoKSAqLw0KLS8qKiBcYnJpZWYgIEdldCBSVFQgQWxhcm0gVmFsdWUgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9SVFRHZXRBbGFybVZhbHVlKCBBVDkxUFNfUlRUQyBwUlRUQyApDQotew0KLSAgICByZXR1cm4oIHBSVFRDLT5SVFRDX1JUQVIgKTsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgICBBVDkxRl9SVFRHZXRTdGF0dXMoKSAqLw0KLS8qKiBcYnJpZWYgIFJlYWQgdGhlIFJUVCBzdGF0dXMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9SVFRHZXRTdGF0dXMoIEFUOTFQU19SVFRDIHBSVFRDICkNCi17DQotICAgIHJldHVybiggcFJUVEMtPlJUVENfUlRTUiApOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgIEFUOTFGX1JUVF9SZWFkVmFsdWUoKSAqLw0KLS8qKiBcYnJpZWYgIFJlYWQgdGhlIFJUVCB2YWx1ZSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1JUVFJlYWRWYWx1ZSggQVQ5MVBTX1JUVEMgcFJUVEMgKQ0KLXsNCi0gICAgcmVnaXN0ZXIgdm9sYXRpbGUgdW5zaWduZWQgaW50IHZhbDEsIHZhbDI7DQotDQotICAgIGRvDQotICAgIHsNCi0gICAgICAgIHZhbDEgPSBwUlRUQy0+UlRUQ19SVFZSOw0KLSAgICAgICAgdmFsMiA9IHBSVFRDLT5SVFRDX1JUVlI7DQotICAgIH0NCi0gICAgd2hpbGUoIHZhbDEgIT0gdmFsMiApOw0KLQ0KLSAgICByZXR1cm4oIHZhbDEgKTsNCi19DQotDQogLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0qICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBQSVRDDQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSVRJbml0ICovDQotLyoqIFxicmllZiBTeXN0ZW0gdGltZXIgaW5pdCA6IHBlcmlvZCBpbiC1c2Vjb25kLCBzeXN0ZW0gY2xvY2sgZnJlcSBpbiBNSHogKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QSVRJbml0KCBBVDkxUFNfUElUQyBwUElUQywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwZXJpb2QsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcGl0X2ZyZXF1ZW5jeSApDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgVlJFRw0KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVlJFR19FbmFibGVfTG93UG93ZXJNb2RlDQorLy8qIFxicmllZiBFbmFibGUgVlJFRyBMb3cgUG93ZXIgTW9kZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1ZSRUdfRW5hYmxlX0xvd1Bvd2VyTW9kZSgNCisgICAgICAgIEFUOTFQU19WUkVHIHBWUkVHKQ0KIHsNCi0gICAgcFBJVEMtPlBJVENfUElNUiA9IHBlcmlvZCA/ICggcGVyaW9kICogcGl0X2ZyZXF1ZW5jeSArIDggKSA+PiA0IDogMDsgLyogKzggdG8gYXZvaWQgJTEwIGFuZCAvMTAgKi8NCi0gICAgcFBJVEMtPlBJVENfUElNUiB8PSBBVDkxQ19QSVRDX1BJVEVOOw0KKwlwVlJFRy0+VlJFR19NUiB8PSBBVDkxQ19WUkVHX1BTVERCWTsJIA0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSVRTZXRQSVYgKi8NCi0vKiogXGJyaWVmIFNldCB0aGUgUElUIFBlcmlvZGljIEludGVydmFsIFZhbHVlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUElUU2V0UElWKCBBVDkxUFNfUElUQyBwUElUQywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHBpdiApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVlJFR19EaXNhYmxlX0xvd1Bvd2VyTW9kZQ0KKy8vKiBcYnJpZWYgRGlzYWJsZSBWUkVHIExvdyBQb3dlciBNb2RlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVlJFR19EaXNhYmxlX0xvd1Bvd2VyTW9kZSgNCisgICAgICAgIEFUOTFQU19WUkVHIHBWUkVHKQ0KIHsNCi0gICAgcFBJVEMtPlBJVENfUElNUiA9IHBpdiB8ICggcFBJVEMtPlBJVENfUElNUiAmICggQVQ5MUNfUElUQ19QSVRFTiB8IEFUOTFDX1BJVENfUElUSUVOICkgKTsNCi19DQorCXBWUkVHLT5WUkVHX01SICY9IH5BVDkxQ19WUkVHX1BTVERCWTsJIA0KK30vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIE1DDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSVRFbmFibGVJbnQgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBQSVQgcGVyaW9kaWMgaW50ZXJydXB0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUElURW5hYmxlSW50KCBBVDkxUFNfUElUQyBwUElUQyApDQorI2RlZmluZSBBVDkxQ19NQ19DT1JSRUNUX0tFWSAgKCh1bnNpZ25lZCBpbnQpIDB4NUEgPDwgMjQpIC8vIChNQykgQ29ycmVjdCBQcm90ZWN0IEtleQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX01DX1JlbWFwDQorLy8qIFxicmllZiBNYWtlIFJlbWFwDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfTUNfUmVtYXAgKHZvaWQpICAgICAvLyAgDQogew0KLSAgICBwUElUQy0+UElUQ19QSU1SIHw9IEFUOTFDX1BJVENfUElUSUVOOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSVREaXNhYmxlSW50ICovDQotLyoqIFxicmllZiBEaXNhYmxlIFBJVCBwZXJpb2RpYyBpbnRlcnJ1cHQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QSVREaXNhYmxlSW50KCBBVDkxUFNfUElUQyBwUElUQyApDQotew0KLSAgICBwUElUQy0+UElUQ19QSU1SICY9IH5BVDkxQ19QSVRDX1BJVElFTjsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElUR2V0TW9kZSAqLw0KLS8qKiBcYnJpZWYgUmVhZCBQSVQgbW9kZSByZWdpc3RlciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElUR2V0TW9kZSggQVQ5MVBTX1BJVEMgcFBJVEMgKQ0KLXsNCi0gICAgcmV0dXJuKCBwUElUQy0+UElUQ19QSU1SICk7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJVEdldFN0YXR1cyAqLw0KLS8qKiBcYnJpZWYgUmVhZCBQSVQgc3RhdHVzIHJlZ2lzdGVyICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSVRHZXRTdGF0dXMoIEFUOTFQU19QSVRDIHBQSVRDICkNCi17DQotICAgIHJldHVybiggcFBJVEMtPlBJVENfUElTUiApOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSVRHZXRQSUlSICovDQotLyoqIFxicmllZiBSZWFkIFBJVCBDUElWIGFuZCBQSUNOVCB3aXRob3V0IHJlc3NldHRpbmcgdGhlIGNvdW50ZXJzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSVRHZXRQSUlSKCBBVDkxUFNfUElUQyBwUElUQyApDQotew0KLSAgICByZXR1cm4oIHBQSVRDLT5QSVRDX1BJSVIgKTsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElUR2V0UElWUiAqLw0KLS8qKiBcYnJpZWYgUmVhZCBTeXN0ZW0gdGltZXIgQ1BJViBhbmQgUElDTlQgd2l0aG91dCByZXNzZXR0aW5nIHRoZSBjb3VudGVycyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElUR2V0UElWUiggQVQ5MVBTX1BJVEMgcFBJVEMgKQ0KLXsNCi0gICAgcmV0dXJuKCBwUElUQy0+UElUQ19QSVZSICk7DQotfQ0KLQ0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotKiAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgV0RUQw0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfV0RUU2V0TW9kZSAqLw0KLS8qKiBcYnJpZWYgU2V0IFdhdGNoZG9nIE1vZGUgUmVnaXN0ZXIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9XRFRTZXRNb2RlKCBBVDkxUFNfV0RUQyBwV0RUQywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBNb2RlICkNCi17DQotICAgIHBXRFRDLT5XRFRDX1dETVIgPSBNb2RlOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9XRFRSZXN0YXJ0ICovDQotLyoqIFxicmllZiBSZXN0YXJ0IFdhdGNoZG9nICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfV0RUUmVzdGFydCggQVQ5MVBTX1dEVEMgcFdEVEMgKQ0KLXsNCi0gICAgcFdEVEMtPldEVENfV0RDUiA9IDB4QTUwMDAwMDE7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1dEVFNHZXR0YXR1cyAqLw0KLS8qKiBcYnJpZWYgR2V0IFdhdGNoZG9nIFN0YXR1cyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfV0RUU0dldHRhdHVzKCBBVDkxUFNfV0RUQyBwV0RUQyApDQotew0KLSAgICByZXR1cm4oIHBXRFRDLT5XRFRDX1dEU1IgJiAweDMgKTsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfV0RUR2V0UGVyaW9kICovDQotLyoqIFxicmllZiBUcmFuc2xhdGUgbXMgaW50byBXYXRjaGRvZyBDb21wYXRpYmxlIHZhbHVlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9XRFRHZXRQZXJpb2QoIHVuc2lnbmVkIGludCBtcyApDQotew0KLSAgICBpZiggKCBtcyA8IDQgKSB8fCAoIG1zID4gMTYwMDAgKSApDQotICAgIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotDQotICAgIHJldHVybiggKCBtcyA8PCA4ICkgLyAxMDAwICk7DQotfQ0KLQ0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotKiAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgVlJFRw0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVlJFR19FbmFibGVfTG93UG93ZXJNb2RlICovDQotLyoqIFxicmllZiBFbmFibGUgVlJFRyBMb3cgUG93ZXIgTW9kZSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1ZSRUdfRW5hYmxlX0xvd1Bvd2VyTW9kZSggQVQ5MVBTX1ZSRUcgcFZSRUcgKQ0KLXsNCi0gICAgcFZSRUctPlZSRUdfTVIgfD0gQVQ5MUNfVlJFR19QU1REQlk7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1ZSRUdfRGlzYWJsZV9Mb3dQb3dlck1vZGUgKi8NCi0vKiogXGJyaWVmIERpc2FibGUgVlJFRyBMb3cgUG93ZXIgTW9kZSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1ZSRUdfRGlzYWJsZV9Mb3dQb3dlck1vZGUoIEFUOTFQU19WUkVHIHBWUkVHICkNCi17DQotICAgIHBWUkVHLT5WUkVHX01SICY9IH5BVDkxQ19WUkVHX1BTVERCWTsNCi19IC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICAqICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIE1DDQotICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLQ0KLSNkZWZpbmUgQVQ5MUNfTUNfQ09SUkVDVF9LRVkgICAgKCAoIHVuc2lnbmVkIGludCApIDB4NUEgPDwgMjQgKSAvKiAoTUMpIENvcnJlY3QgUHJvdGVjdCBLZXkgKi8NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9NQ19SZW1hcCAqLw0KLS8qKiBcYnJpZWYgTWFrZSBSZW1hcCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX01DX1JlbWFwKCB2b2lkICkgLyogKi8NCi17DQotICAgIEFUOTFQU19NQyBwTUMgPSAoIEFUOTFQU19NQyApIEFUOTFDX0JBU0VfTUM7DQotDQorICAgIEFUOTFQU19NQyBwTUMgPSAoQVQ5MVBTX01DKSBBVDkxQ19CQVNFX01DOw0KKyAgICANCiAgICAgcE1DLT5NQ19SQ1IgPSBBVDkxQ19NQ19SQ0I7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX01DX0VGQ19DZmdNb2RlUmVnICovDQotLyoqIFxicmllZiBDb25maWd1cmUgdGhlIEVGQyBNb2RlIFJlZ2lzdGVyIG9mIHRoZSBNQyBjb250cm9sbGVyICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfTUNfRUZDX0NmZ01vZGVSZWcoIEFUOTFQU19NQyBwTUMsICAgICAgLyogcG9pbnRlciB0byBhIE1DIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbW9kZSApIC8qIG1vZGUgcmVnaXN0ZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9NQ19FRkNfQ2ZnTW9kZVJlZw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIHRoZSBFRkMgTW9kZSBSZWdpc3RlciBvZiB0aGUgTUMgY29udHJvbGxlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX01DX0VGQ19DZmdNb2RlUmVnICgNCisJQVQ5MVBTX01DIHBNQywgLy8gcG9pbnRlciB0byBhIE1DIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IG1vZGUpICAgICAgICAvLyBtb2RlIHJlZ2lzdGVyIA0KIHsNCi0gICAgLyogV3JpdGUgdG8gdGhlIEZNUiByZWdpc3RlciAqLw0KLSAgICBwTUMtPk1DX0ZNUiA9IG1vZGU7DQorCS8vIFdyaXRlIHRvIHRoZSBGTVIgcmVnaXN0ZXINCisJcE1DLT5NQ19GTVIgPSBtb2RlOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9NQ19FRkNfR2V0TW9kZVJlZyAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIE1DIEVGQyBNb2RlIFJlZ3NpdGVyICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9NQ19FRkNfR2V0TW9kZVJlZyggQVQ5MVBTX01DIHBNQyApIC8qIHBvaW50ZXIgdG8gYSBNQyBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfTUNfRUZDX0dldE1vZGVSZWcNCisvLyogXGJyaWVmIFJldHVybiBNQyBFRkMgTW9kZSBSZWdzaXRlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfTUNfRUZDX0dldE1vZGVSZWcoDQorCUFUOTFQU19NQyBwTUMpIC8vIHBvaW50ZXIgdG8gYSBNQyBjb250cm9sbGVyDQogew0KLSAgICByZXR1cm4gcE1DLT5NQ19GTVI7DQorCXJldHVybiBwTUMtPk1DX0ZNUjsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfTUNfRUZDX0NvbXB1dGVGTUNOICovDQotLyoqIFxicmllZiBSZXR1cm4gTUMgRUZDIE1vZGUgUmVnc2l0ZXIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX01DX0VGQ19Db21wdXRlRk1DTiggaW50IG1hc3Rlcl9jbG9jayApIC8qIG1hc3RlciBjbG9jayBpbiBIeiAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX01DX0VGQ19Db21wdXRlRk1DTg0KKy8vKiBcYnJpZWYgUmV0dXJuIE1DIEVGQyBNb2RlIFJlZ3NpdGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9NQ19FRkNfQ29tcHV0ZUZNQ04oDQorCWludCBtYXN0ZXJfY2xvY2spIC8vIG1hc3RlciBjbG9jayBpbiBIeg0KIHsNCi0gICAgcmV0dXJuKCBtYXN0ZXJfY2xvY2sgLyAxMDAwMDAwICsgMiApOw0KKwlyZXR1cm4gKG1hc3Rlcl9jbG9jay8xMDAwMDAwICsyKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfTUNfRUZDX1BlcmZvcm1DbWQgKi8NCi0vKiogXGJyaWVmIFBlcmZvcm0gRUZDIENvbW1hbmQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9NQ19FRkNfUGVyZm9ybUNtZCggQVQ5MVBTX01DIHBNQywgLyogcG9pbnRlciB0byBhIE1DIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdHJhbnNmZXJfY21kICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9NQ19FRkNfUGVyZm9ybUNtZA0KKy8vKiBcYnJpZWYgUGVyZm9ybSBFRkMgQ29tbWFuZA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX01DX0VGQ19QZXJmb3JtQ21kICgNCisJQVQ5MVBTX01DIHBNQywgLy8gcG9pbnRlciB0byBhIE1DIGNvbnRyb2xsZXINCisgICAgdW5zaWduZWQgaW50IHRyYW5zZmVyX2NtZCkNCiB7DQotICAgIHBNQy0+TUNfRkNSID0gdHJhbnNmZXJfY21kOw0KKwlwTUMtPk1DX0ZDUiA9IHRyYW5zZmVyX2NtZDsJDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX01DX0VGQ19HZXRTdGF0dXMgKi8NCi0vKiogXGJyaWVmIFJldHVybiBNQyBFRkMgU3RhdHVzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9NQ19FRkNfR2V0U3RhdHVzKCBBVDkxUFNfTUMgcE1DICkgLyogcG9pbnRlciB0byBhIE1DIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9NQ19FRkNfR2V0U3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gTUMgRUZDIFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfTUNfRUZDX0dldFN0YXR1cygNCisJQVQ5MVBTX01DIHBNQykgLy8gcG9pbnRlciB0byBhIE1DIGNvbnRyb2xsZXINCiB7DQotICAgIHJldHVybiBwTUMtPk1DX0ZTUjsNCisJcmV0dXJuIHBNQy0+TUNfRlNSOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9NQ19FRkNfSXNJbnRlcnJ1cHRNYXNrZWQgKi8NCi0vKiogXGJyaWVmIFRlc3QgaWYgRUZDIE1DIEludGVycnVwdCBpcyBNYXNrZWQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX01DX0VGQ19Jc0ludGVycnVwdE1hc2tlZCggQVQ5MVBTX01DIHBNQywgICAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgTUMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9NQ19FRkNfSXNJbnRlcnJ1cHRNYXNrZWQNCisvLyogXGJyaWVmIFRlc3QgaWYgRUZDIE1DIEludGVycnVwdCBpcyBNYXNrZWQgDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9NQ19FRkNfSXNJbnRlcnJ1cHRNYXNrZWQoDQorICAgICAgICBBVDkxUFNfTUMgcE1DLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBNQyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCiB7DQotICAgIHJldHVybiggQVQ5MUZfTUNfRUZDX0dldE1vZGVSZWcoIHBNQyApICYgZmxhZyApOw0KKwlyZXR1cm4gKEFUOTFGX01DX0VGQ19HZXRNb2RlUmVnKHBNQykgJiBmbGFnKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfTUNfRUZDX0lzSW50ZXJydXB0U2V0ICovDQotLyoqIFxicmllZiBUZXN0IGlmIEVGQyBNQyBJbnRlcnJ1cHQgaXMgU2V0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9NQ19FRkNfSXNJbnRlcnJ1cHRTZXQoIEFUOTFQU19NQyBwTUMsICAgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIE1DIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfTUNfRUZDX0lzSW50ZXJydXB0U2V0DQorLy8qIFxicmllZiBUZXN0IGlmIEVGQyBNQyBJbnRlcnJ1cHQgaXMgU2V0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9NQ19FRkNfSXNJbnRlcnJ1cHRTZXQoDQorICAgICAgICBBVDkxUFNfTUMgcE1DLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBNQyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCiB7DQotICAgIHJldHVybiggQVQ5MUZfTUNfRUZDX0dldFN0YXR1cyggcE1DICkgJiBmbGFnICk7DQorCXJldHVybiAoQVQ5MUZfTUNfRUZDX0dldFN0YXR1cyhwTUMpICYgZmxhZyk7DQogfQ0KIA0KIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotKiAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgU1BJDQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9TUElfT3BlbiAqLw0KLS8qKiBcYnJpZWYgT3BlbiBhIFNQSSBQb3J0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9TUElfT3BlbiggY29uc3QgdW5zaWduZWQgaW50IG51bGwgKSAvKiBcYXJnICovDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgU1BJDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUElfT3Blbg0KKy8vKiBcYnJpZWYgT3BlbiBhIFNQSSBQb3J0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9TUElfT3BlbiAoDQorICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbnVsbCkgIC8vIFxhcmcNCiB7DQotICAgIC8qIE5PVCBERUZJTkVEIEFUIFRISVMgTU9NRU5UICovDQotICAgIHJldHVybiggMCApOw0KKyAgICAgICAgLyogTk9UIERFRklORUQgQVQgVEhJUyBNT01FTlQgKi8NCisgICAgICAgIHJldHVybiAoIDAgKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1BJX0NmZ0NzICovDQotLyoqIFxicmllZiBDb25maWd1cmUgU1BJIGNoaXAgc2VsZWN0IHJlZ2lzdGVyICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfU1BJX0NmZ0NzKCBBVDkxUFNfU1BJIHBTUEksIC8qIHBvaW50ZXIgdG8gYSBTUEkgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY3MsICAgICAgICAgIC8qIFNQSSBjcyBudW1iZXIgKDAgdG8gMykgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZhbCApICAgICAgICAvKiAgY2hpcCBzZWxlY3QgcmVnaXN0ZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUElfQ2ZnQ3MNCisvLyogXGJyaWVmIENvbmZpZ3VyZSBTUEkgY2hpcCBzZWxlY3QgcmVnaXN0ZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TUElfQ2ZnQ3MgKA0KKwlBVDkxUFNfU1BJIHBTUEksICAgICAvLyBwb2ludGVyIHRvIGEgU1BJIGNvbnRyb2xsZXINCisJaW50IGNzLCAgICAgLy8gU1BJIGNzIG51bWJlciAoMCB0byAzKQ0KKyAJaW50IHZhbCkgICAvLyAgY2hpcCBzZWxlY3QgcmVnaXN0ZXINCiB7DQotICAgIC8qKiBXcml0ZSB0byB0aGUgQ1NSIHJlZ2lzdGVyICovDQotICAgICooIHBTUEktPlNQSV9DU1IgKyBjcyApID0gdmFsOw0KKwkvLyogV3JpdGUgdG8gdGhlIENTUiByZWdpc3Rlcg0KKwkqKHBTUEktPlNQSV9DU1IgKyBjcykgPSB2YWw7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1NQSV9FbmFibGVJdCAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIFNQSSBpbnRlcnJ1cHQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9TUElfRW5hYmxlSXQoIEFUOTFQU19TUEkgcFNQSSwgICAgLyogcG9pbnRlciB0byBhIFNQSSBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogSVQgdG8gYmUgZW5hYmxlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSV9FbmFibGVJdA0KKy8vKiBcYnJpZWYgRW5hYmxlIFNQSSBpbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TUElfRW5hYmxlSXQgKA0KKwlBVDkxUFNfU1BJIHBTUEksICAgICAvLyBwb2ludGVyIHRvIGEgU1BJIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpICAgLy8gSVQgdG8gYmUgZW5hYmxlZA0KIHsNCi0gICAgLyoqIFdyaXRlIHRvIHRoZSBJRVIgcmVnaXN0ZXIgKi8NCi0gICAgcFNQSS0+U1BJX0lFUiA9IGZsYWc7DQorCS8vKiBXcml0ZSB0byB0aGUgSUVSIHJlZ2lzdGVyDQorCXBTUEktPlNQSV9JRVIgPSBmbGFnOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9TUElfRGlzYWJsZUl0ICovDQotLyoqIFxicmllZiBEaXNhYmxlIFNQSSBpbnRlcnJ1cHQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9TUElfRGlzYWJsZUl0KCBBVDkxUFNfU1BJIHBTUEksICAgIC8qIHBvaW50ZXIgdG8gYSBTUEkgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBJVCB0byBiZSBkaXNhYmxlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSV9EaXNhYmxlSXQNCisvLyogXGJyaWVmIERpc2FibGUgU1BJIGludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NQSV9EaXNhYmxlSXQgKA0KKwlBVDkxUFNfU1BJIHBTUEksIC8vIHBvaW50ZXIgdG8gYSBTUEkgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgLy8gSVQgdG8gYmUgZGlzYWJsZWQNCiB7DQotICAgIC8qKiBXcml0ZSB0byB0aGUgSURSIHJlZ2lzdGVyICovDQotICAgIHBTUEktPlNQSV9JRFIgPSBmbGFnOw0KKwkvLyogV3JpdGUgdG8gdGhlIElEUiByZWdpc3Rlcg0KKwlwU1BJLT5TUElfSURSID0gZmxhZzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1BJX1Jlc2V0ICovDQotLyoqIFxicmllZiBSZXNldCB0aGUgU1BJIGNvbnRyb2xsZXIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9TUElfUmVzZXQoIEFUOTFQU19TUEkgcFNQSSAvKiBwb2ludGVyIHRvIGEgU1BJIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSV9SZXNldA0KKy8vKiBcYnJpZWYgUmVzZXQgdGhlIFNQSSBjb250cm9sbGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1BJX1Jlc2V0ICgNCisJQVQ5MVBTX1NQSSBwU1BJIC8vIHBvaW50ZXIgdG8gYSBTUEkgY29udHJvbGxlcg0KKwkpDQogew0KLSAgICAvKiogV3JpdGUgdG8gdGhlIENSIHJlZ2lzdGVyICovDQotICAgIHBTUEktPlNQSV9DUiA9IEFUOTFDX1NQSV9TV1JTVDsNCisJLy8qIFdyaXRlIHRvIHRoZSBDUiByZWdpc3Rlcg0KKwlwU1BJLT5TUElfQ1IgPSBBVDkxQ19TUElfU1dSU1Q7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1NQSV9FbmFibGUgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSB0aGUgU1BJIGNvbnRyb2xsZXIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9TUElfRW5hYmxlKCBBVDkxUFNfU1BJIHBTUEkgLyogcG9pbnRlciB0byBhIFNQSSBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1BJX0VuYWJsZQ0KKy8vKiBcYnJpZWYgRW5hYmxlIHRoZSBTUEkgY29udHJvbGxlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NQSV9FbmFibGUgKA0KKwlBVDkxUFNfU1BJIHBTUEkgLy8gcG9pbnRlciB0byBhIFNQSSBjb250cm9sbGVyDQorCSkNCiB7DQotICAgIC8qKiBXcml0ZSB0byB0aGUgQ1IgcmVnaXN0ZXIgKi8NCi0gICAgcFNQSS0+U1BJX0NSID0gQVQ5MUNfU1BJX1NQSUVOOw0KKwkvLyogV3JpdGUgdG8gdGhlIENSIHJlZ2lzdGVyDQorCXBTUEktPlNQSV9DUiA9IEFUOTFDX1NQSV9TUElFTjsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1BJX0Rpc2FibGUgKi8NCi0vKiogXGJyaWVmIERpc2FibGUgdGhlIFNQSSBjb250cm9sbGVyICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfU1BJX0Rpc2FibGUoIEFUOTFQU19TUEkgcFNQSSAvKiBwb2ludGVyIHRvIGEgU1BJIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1BJX0Rpc2FibGUNCisvLyogXGJyaWVmIERpc2FibGUgdGhlIFNQSSBjb250cm9sbGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1BJX0Rpc2FibGUgKA0KKwlBVDkxUFNfU1BJIHBTUEkgLy8gcG9pbnRlciB0byBhIFNQSSBjb250cm9sbGVyDQorCSkNCiB7DQotICAgIC8qKiBXcml0ZSB0byB0aGUgQ1IgcmVnaXN0ZXIgKi8NCisJLy8qIFdyaXRlIHRvIHRoZSBDUiByZWdpc3Rlcg0KKwlwU1BJLT5TUElfQ1IgPSBBVDkxQ19TUElfU1BJRElTOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUElfQ2ZnTW9kZQ0KKy8vKiBcYnJpZWYgRW5hYmxlIHRoZSBTUEkgY29udHJvbGxlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NQSV9DZmdNb2RlICgNCisJQVQ5MVBTX1NQSSBwU1BJLCAvLyBwb2ludGVyIHRvIGEgU1BJIGNvbnRyb2xsZXINCisJaW50IG1vZGUpICAgICAgICAvLyBtb2RlIHJlZ2lzdGVyIA0KK3sNCisJLy8qIFdyaXRlIHRvIHRoZSBNUiByZWdpc3Rlcg0KKwlwU1BJLT5TUElfTVIgPSBtb2RlOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUElfQ2ZnUENTDQorLy8qIFxicmllZiBTd2l0Y2ggdG8gdGhlIGNvcnJlY3QgUENTIG9mIFNQSSBNb2RlIFJlZ2lzdGVyIDogRml4ZWQgUGVyaXBoZXJhbCBTZWxlY3RlZA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NQSV9DZmdQQ1MgKA0KKwlBVDkxUFNfU1BJIHBTUEksIC8vIHBvaW50ZXIgdG8gYSBTUEkgY29udHJvbGxlcg0KKwljaGFyIFBDU19EZXZpY2UpIC8vIFBDUyBvZiB0aGUgRGV2aWNlDQorewkNCisgCS8vKiBXcml0ZSB0byB0aGUgTVIgcmVnaXN0ZXINCisJcFNQSS0+U1BJX01SICY9IDB4RkZGMEZGRkY7DQorCXBTUEktPlNQSV9NUiB8PSAoIChQQ1NfRGV2aWNlPDwxNikgJiBBVDkxQ19TUElfUENTICk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSV9SZWNlaXZlRnJhbWUNCisvLyogXGJyaWVmIFJldHVybiAyIGlmIFBEQyBoYXMgYmVlbiBpbml0aWFsaXplZCB3aXRoIEJ1ZmZlciBhbmQgTmV4dCBCdWZmZXIsIDEgaWYgUERDIGhhcyBiZWVuIGluaXRpYWxpemFlZCB3aXRoIE5leHQgQnVmZmVyLCAwIGlmIFBEQyBpcyBidXN5DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9TUElfUmVjZWl2ZUZyYW1lICgNCisJQVQ5MVBTX1NQSSBwU1BJLA0KKwljaGFyICpwQnVmZmVyLA0KKwl1bnNpZ25lZCBpbnQgc3pCdWZmZXIsDQorCWNoYXIgKnBOZXh0QnVmZmVyLA0KKwl1bnNpZ25lZCBpbnQgc3pOZXh0QnVmZmVyICkNCit7DQorCXJldHVybiBBVDkxRl9QRENfUmVjZWl2ZUZyYW1lKA0KKwkJKEFUOTFQU19QREMpICYocFNQSS0+U1BJX1JQUiksDQorCQlwQnVmZmVyLA0KKwkJc3pCdWZmZXIsDQorCQlwTmV4dEJ1ZmZlciwNCisJCXN6TmV4dEJ1ZmZlcik7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSV9TZW5kRnJhbWUNCisvLyogXGJyaWVmIFJldHVybiAyIGlmIFBEQyBoYXMgYmVlbiBpbml0aWFsaXplZCB3aXRoIEJ1ZmZlciBhbmQgTmV4dCBCdWZmZXIsIDEgaWYgUERDIGhhcyBiZWVuIGluaXRpYWxpemFlZCB3aXRoIE5leHQgQnVmZmVyLCAwIGlmIFBEQyBpcyBiU1BJeQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfU1BJX1NlbmRGcmFtZSgNCisJQVQ5MVBTX1NQSSBwU1BJLA0KKwljaGFyICpwQnVmZmVyLA0KKwl1bnNpZ25lZCBpbnQgc3pCdWZmZXIsDQorCWNoYXIgKnBOZXh0QnVmZmVyLA0KKwl1bnNpZ25lZCBpbnQgc3pOZXh0QnVmZmVyICkNCit7DQorCXJldHVybiBBVDkxRl9QRENfU2VuZEZyYW1lKA0KKwkJKEFUOTFQU19QREMpICYocFNQSS0+U1BJX1JQUiksDQorCQlwQnVmZmVyLA0KKwkJc3pCdWZmZXIsDQorCQlwTmV4dEJ1ZmZlciwNCisJCXN6TmV4dEJ1ZmZlcik7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSV9DbG9zZQ0KKy8vKiBcYnJpZWYgQ2xvc2UgU1BJOiBkaXNhYmxlIElUIGRpc2FibGUgdHJhbnNmZXJ0LCBjbG9zZSBQREMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TUElfQ2xvc2UgKA0KKwlBVDkxUFNfU1BJIHBTUEkpICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBTUEkgY29udHJvbGxlcg0KK3sNCisgICAgLy8qIFJlc2V0IGFsbCB0aGUgQ2hpcCBTZWxlY3QgcmVnaXN0ZXINCisgICAgcFNQSS0+U1BJX0NTUlswXSA9IDAgOw0KKyAgICBwU1BJLT5TUElfQ1NSWzFdID0gMCA7DQorICAgIHBTUEktPlNQSV9DU1JbMl0gPSAwIDsNCisgICAgcFNQSS0+U1BJX0NTUlszXSA9IDAgOw0KKw0KKyAgICAvLyogUmVzZXQgdGhlIFNQSSBtb2RlDQorICAgIHBTUEktPlNQSV9NUiA9IDAgIDsNCisNCisgICAgLy8qIERpc2FibGUgYWxsIGludGVycnVwdHMNCisgICAgcFNQSS0+U1BJX0lEUiA9IDB4RkZGRkZGRkYgOw0KKw0KKyAgICAvLyogQWJvcnQgdGhlIFBlcmlwaGVyYWwgRGF0YSBUcmFuc2ZlcnMNCisgICAgQVQ5MUZfUERDX0Nsb3NlKChBVDkxUFNfUERDKSAmKHBTUEktPlNQSV9SUFIpKTsNCisNCisgICAgLy8qIERpc2FibGUgcmVjZWl2ZXIgYW5kIHRyYW5zbWl0dGVyIGFuZCBzdG9wIGFueSBhY3Rpdml0eSBpbW1lZGlhdGVseQ0KICAgICBwU1BJLT5TUElfQ1IgPSBBVDkxQ19TUElfU1BJRElTOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9TUElfQ2ZnTW9kZSAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIHRoZSBTUEkgY29udHJvbGxlciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1NQSV9DZmdNb2RlKCBBVDkxUFNfU1BJIHBTUEksIC8qIHBvaW50ZXIgdG8gYSBTUEkgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtb2RlICkgICAgICAgLyogbW9kZSByZWdpc3RlciAqLw0KLXsNCi0gICAgLyoqIFdyaXRlIHRvIHRoZSBNUiByZWdpc3RlciAqLw0KLSAgICBwU1BJLT5TUElfTVIgPSBtb2RlOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9TUElfQ2ZnUENTICovDQotLyoqIFxicmllZiBTd2l0Y2ggdG8gdGhlIGNvcnJlY3QgUENTIG9mIFNQSSBNb2RlIFJlZ2lzdGVyIDogRml4ZWQgUGVyaXBoZXJhbCBTZWxlY3RlZCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1NQSV9DZmdQQ1MoIEFUOTFQU19TUEkgcFNQSSwgIC8qIHBvaW50ZXIgdG8gYSBTUEkgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBQQ1NfRGV2aWNlICkgLyogUENTIG9mIHRoZSBEZXZpY2UgKi8NCi17DQotICAgIC8qKiBXcml0ZSB0byB0aGUgTVIgcmVnaXN0ZXIgKi8NCi0gICAgcFNQSS0+U1BJX01SICY9IDB4RkZGMEZGRkY7DQotICAgIHBTUEktPlNQSV9NUiB8PSAoICggUENTX0RldmljZSA8PCAxNiApICYgQVQ5MUNfU1BJX1BDUyApOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9TUElfUmVjZWl2ZUZyYW1lICovDQotLyoqIFxicmllZiBSZXR1cm4gMiBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgd2l0aCBCdWZmZXIgYW5kIE5leHQgQnVmZmVyLCAxIGlmIFBEQyBoYXMgYmVlbiBpbml0aWFsaXphZWQgd2l0aCBOZXh0IEJ1ZmZlciwgMCBpZiBQREMgaXMgYnVzeSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfU1BJX1JlY2VpdmVGcmFtZSggQVQ5MVBTX1NQSSBwU1BJLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICogcEJ1ZmZlciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHN6QnVmZmVyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICogcE5leHRCdWZmZXIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzek5leHRCdWZmZXIgKQ0KLXsNCi0gICAgcmV0dXJuIEFUOTFGX1BEQ19SZWNlaXZlRnJhbWUoDQotICAgICAgICAoIEFUOTFQU19QREMgKSAmKCBwU1BJLT5TUElfUlBSICksDQotICAgICAgICBwQnVmZmVyLA0KLSAgICAgICAgc3pCdWZmZXIsDQotICAgICAgICBwTmV4dEJ1ZmZlciwNCi0gICAgICAgIHN6TmV4dEJ1ZmZlciApOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9TUElfU2VuZEZyYW1lICovDQotLyoqIFxicmllZiBSZXR1cm4gMiBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgd2l0aCBCdWZmZXIgYW5kIE5leHQgQnVmZmVyLCAxIGlmIFBEQyBoYXMgYmVlbiBpbml0aWFsaXphZWQgd2l0aCBOZXh0IEJ1ZmZlciwgMCBpZiBQREMgaXMgYlNQSXkgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1NQSV9TZW5kRnJhbWUoIEFUOTFQU19TUEkgcFNQSSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqIHBCdWZmZXIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzekJ1ZmZlciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqIHBOZXh0QnVmZmVyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3pOZXh0QnVmZmVyICkNCi17DQotICAgIHJldHVybiBBVDkxRl9QRENfU2VuZEZyYW1lKA0KLSAgICAgICAgKCBBVDkxUFNfUERDICkgJiggcFNQSS0+U1BJX1JQUiApLA0KLSAgICAgICAgcEJ1ZmZlciwNCi0gICAgICAgIHN6QnVmZmVyLA0KLSAgICAgICAgcE5leHRCdWZmZXIsDQotICAgICAgICBzek5leHRCdWZmZXIgKTsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1BJX0Nsb3NlICovDQotLyoqIFxicmllZiBDbG9zZSBTUEk6IGRpc2FibGUgSVQgZGlzYWJsZSB0cmFuc2ZlcnQsIGNsb3NlIFBEQyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1NQSV9DbG9zZSggQVQ5MVBTX1NQSSBwU1BJICkgLyogXGFyZyBwb2ludGVyIHRvIGEgU1BJIGNvbnRyb2xsZXIgKi8NCi17DQotICAgIC8qKiBSZXNldCBhbGwgdGhlIENoaXAgU2VsZWN0IHJlZ2lzdGVyICovDQotICAgIHBTUEktPlNQSV9DU1JbIDAgXSA9IDA7DQotICAgIHBTUEktPlNQSV9DU1JbIDEgXSA9IDA7DQotICAgIHBTUEktPlNQSV9DU1JbIDIgXSA9IDA7DQotICAgIHBTUEktPlNQSV9DU1JbIDMgXSA9IDA7DQotDQotICAgIC8qKiBSZXNldCB0aGUgU1BJIG1vZGUgKi8NCi0gICAgcFNQSS0+U1BJX01SID0gMDsNCi0NCi0gICAgLyoqIERpc2FibGUgYWxsIGludGVycnVwdHMgKi8NCi0gICAgcFNQSS0+U1BJX0lEUiA9IDB4RkZGRkZGRkY7DQotDQotICAgIC8qKiBBYm9ydCB0aGUgUGVyaXBoZXJhbCBEYXRhIFRyYW5zZmVycyAqLw0KLSAgICBBVDkxRl9QRENfQ2xvc2UoICggQVQ5MVBTX1BEQyApICYoIHBTUEktPlNQSV9SUFIgKSApOw0KLQ0KLSAgICAvKiogRGlzYWJsZSByZWNlaXZlciBhbmQgdHJhbnNtaXR0ZXIgYW5kIHN0b3AgYW55IGFjdGl2aXR5IGltbWVkaWF0ZWx5ICovDQotICAgIHBTUEktPlNQSV9DUiA9IEFUOTFDX1NQSV9TUElESVM7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1NQSV9QdXRDaGFyICovDQotLyoqIFxicmllZiBTZW5kIGEgY2hhcmFjdGVyLGRvZXMgbm90IGNoZWNrIGlmIHJlYWR5IHRvIHNlbmQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9TUElfUHV0Q2hhciggQVQ5MVBTX1NQSSBwU1BJLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjaGFyYWN0ZXIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNzX251bWJlciApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1BJX1B1dENoYXINCisvLyogXGJyaWVmIFNlbmQgYSBjaGFyYWN0ZXIsZG9lcyBub3QgY2hlY2sgaWYgcmVhZHkgdG8gc2VuZA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NQSV9QdXRDaGFyICgNCisJQVQ5MVBTX1NQSSBwU1BJLA0KKwl1bnNpZ25lZCBpbnQgY2hhcmFjdGVyLA0KKyAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY3NfbnVtYmVyICkNCiB7DQogICAgIHVuc2lnbmVkIGludCB2YWx1ZV9mb3JfY3M7DQotDQotICAgIHZhbHVlX2Zvcl9jcyA9ICggfiggMSA8PCBjc19udW1iZXIgKSApICYgMHhGOyAvKlBsYWNlIGEgemVybyBhbW9uZyBhIDQgT05FcyBudW1iZXIgKi8NCi0gICAgcFNQSS0+U1BJX1REUiA9ICggY2hhcmFjdGVyICYgMHhGRkZGICkgfCAoIHZhbHVlX2Zvcl9jcyA8PCAxNiApOw0KKyAgICB2YWx1ZV9mb3JfY3MgPSAofigxIDw8IGNzX251bWJlcikpICYgMHhGOyAgLy9QbGFjZSBhIHplcm8gYW1vbmcgYSA0IE9ORXMgbnVtYmVyDQorICAgIHBTUEktPlNQSV9URFIgPSAoY2hhcmFjdGVyICYgMHhGRkZGKSB8ICh2YWx1ZV9mb3JfY3MgPDwgMTYpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9TUElfR2V0Q2hhciAqLw0KLS8qKiBcYnJpZWYgUmVjZWl2ZSBhIGNoYXJhY3Rlcixkb2VzIG5vdCBjaGVjayBpZiBhIGNoYXJhY3RlciBpcyBhdmFpbGFibGUgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgaW50IEFUOTFGX1NQSV9HZXRDaGFyKCBjb25zdCBBVDkxUFNfU1BJIHBTUEkgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSV9HZXRDaGFyDQorLy8qIFxicmllZiBSZWNlaXZlIGEgY2hhcmFjdGVyLGRvZXMgbm90IGNoZWNrIGlmIGEgY2hhcmFjdGVyIGlzIGF2YWlsYWJsZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfU1BJX0dldENoYXIgKA0KKwljb25zdCBBVDkxUFNfU1BJIHBTUEkpDQogew0KLSAgICByZXR1cm4oICggcFNQSS0+U1BJX1JEUiApICYgMHhGRkZGICk7DQorICAgIHJldHVybigocFNQSS0+U1BJX1JEUikgJiAweEZGRkYpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9TUElfR2V0SW50ZXJydXB0TWFza1N0YXR1cyAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIFNQSSBJbnRlcnJ1cHQgTWFzayBTdGF0dXMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1NQSV9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCAvKiBccmV0dXJuIFNQSSBJbnRlcnJ1cHQgTWFzayBTdGF0dXMgKi8NCi0gICAgQVQ5MVBTX1NQSSBwU3BpICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBTUEkgY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSV9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gU1BJIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfU1BJX0dldEludGVycnVwdE1hc2tTdGF0dXMoIC8vIFxyZXR1cm4gU1BJIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKyAgICAgICAgQVQ5MVBTX1NQSSBwU3BpKSAvLyBcYXJnICBwb2ludGVyIHRvIGEgU1BJIGNvbnRyb2xsZXINCiB7DQotICAgIHJldHVybiBwU3BpLT5TUElfSU1SOw0KKyAgICAgICAgcmV0dXJuIHBTcGktPlNQSV9JTVI7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1NQSV9Jc0ludGVycnVwdE1hc2tlZCAqLw0KLS8qKiBcYnJpZWYgVGVzdCBpZiBTUEkgSW50ZXJydXB0IGlzIE1hc2tlZCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSBpbnQgQVQ5MUZfU1BJX0lzSW50ZXJydXB0TWFza2VkKCBBVDkxUFNfU1BJIHBTcGksICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBTUEkgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUElfSXNJbnRlcnJ1cHRNYXNrZWQNCisvLyogXGJyaWVmIFRlc3QgaWYgU1BJIEludGVycnVwdCBpcyBNYXNrZWQgDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9TUElfSXNJbnRlcnJ1cHRNYXNrZWQoDQorICAgICAgICBBVDkxUFNfU1BJIHBTcGksICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFNQSSBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCiB7DQotICAgIHJldHVybiggQVQ5MUZfU1BJX0dldEludGVycnVwdE1hc2tTdGF0dXMoIHBTcGkgKSAmIGZsYWcgKTsNCisgICAgICAgIHJldHVybiAoQVQ5MUZfU1BJX0dldEludGVycnVwdE1hc2tTdGF0dXMocFNwaSkgJiBmbGFnKTsNCiB9DQogDQogLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0qICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBVU0FSVA0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVVNfQmF1ZHJhdGUgKi8NCi0vKiogXGJyaWVmIENhbGN1bGF0ZSB0aGUgYmF1ZHJhdGUgKi8NCi0vKiogU3RhbmRhcmQgQXN5bmNocm9ub3VzIE1vZGUgOiA4IGJpdHMgLCAxIHN0b3AgLCBubyBwYXJpdHkgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX0FTWU5DX01PREUgICAgXA0KLSAgICAoIEFUOTFDX1VTX1VTTU9ERV9OT1JNQUwgKyBcDQotICAgICAgQVQ5MUNfVVNfTkJTVE9QXzFfQklUICsgIFwNCi0gICAgICBBVDkxQ19VU19QQVJfTk9ORSArICAgICAgXA0KLSAgICAgIEFUOTFDX1VTX0NIUkxfOF9CSVRTICsgICBcDQotICAgICAgQVQ5MUNfVVNfQ0xLU19DTE9DSyApDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgVVNBUlQNCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX0JhdWRyYXRlDQorLy8qIFxicmllZiBDYWxjdWxhdGUgdGhlIGJhdWRyYXRlDQorLy8qIFN0YW5kYXJkIEFzeW5jaHJvbm91cyBNb2RlIDogOCBiaXRzICwgMSBzdG9wICwgbm8gcGFyaXR5DQorI2RlZmluZSBBVDkxQ19VU19BU1lOQ19NT0RFICggQVQ5MUNfVVNfVVNNT0RFX05PUk1BTCArIFwNCisgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19OQlNUT1BfMV9CSVQgKyBcDQorICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfUEFSX05PTkUgKyBcDQorICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfQ0hSTF84X0JJVFMgKyBcDQorICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfQ0xLU19DTE9DSyApDQogDQotLyoqIFN0YW5kYXJkIEV4dGVybmFsIEFzeW5jaHJvbm91cyBNb2RlIDogOCBiaXRzICwgMSBzdG9wICwgbm8gcGFyaXR5ICovDQotI2RlZmluZSBBVDkxQ19VU19BU1lOQ19TQ0tfTU9ERSBcDQotICAgICggQVQ5MUNfVVNfVVNNT0RFX05PUk1BTCArICBcDQotICAgICAgQVQ5MUNfVVNfTkJTVE9QXzFfQklUICsgICBcDQotICAgICAgQVQ5MUNfVVNfUEFSX05PTkUgKyAgICAgICBcDQotICAgICAgQVQ5MUNfVVNfQ0hSTF84X0JJVFMgKyAgICBcDQotICAgICAgQVQ5MUNfVVNfQ0xLU19FWFQgKQ0KKy8vKiBTdGFuZGFyZCBFeHRlcm5hbCBBc3luY2hyb25vdXMgTW9kZSA6IDggYml0cyAsIDEgc3RvcCAsIG5vIHBhcml0eQ0KKyNkZWZpbmUgQVQ5MUNfVVNfQVNZTkNfU0NLX01PREUgKCBBVDkxQ19VU19VU01PREVfTk9STUFMICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19OQlNUT1BfMV9CSVQgKyBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX1BBUl9OT05FICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19DSFJMXzhfQklUUyArIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfQ0xLU19FWFQgKQ0KIA0KLS8qKiBTdGFuZGFyZCBTeW5jaHJvbm91cyBNb2RlIDogOCBiaXRzICwgMSBzdG9wICwgbm8gcGFyaXR5ICovDQotI2RlZmluZSBBVDkxQ19VU19TWU5DX01PREUgICAgIFwNCi0gICAgKCBBVDkxQ19VU19TWU5DICsgICAgICAgICAgXA0KLSAgICAgIEFUOTFDX1VTX1VTTU9ERV9OT1JNQUwgKyBcDQotICAgICAgQVQ5MUNfVVNfTkJTVE9QXzFfQklUICsgIFwNCi0gICAgICBBVDkxQ19VU19QQVJfTk9ORSArICAgICAgXA0KLSAgICAgIEFUOTFDX1VTX0NIUkxfOF9CSVRTICsgICBcDQotICAgICAgQVQ5MUNfVVNfQ0xLU19DTE9DSyApDQorLy8qIFN0YW5kYXJkIFN5bmNocm9ub3VzIE1vZGUgOiA4IGJpdHMgLCAxIHN0b3AgLCBubyBwYXJpdHkNCisjZGVmaW5lIEFUOTFDX1VTX1NZTkNfTU9ERSAoIEFUOTFDX1VTX1NZTkMgKyBcDQorICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19VU01PREVfTk9STUFMICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfTkJTVE9QXzFfQklUICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfUEFSX05PTkUgKyBcDQorICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19DSFJMXzhfQklUUyArIFwNCisgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX0NMS1NfQ0xPQ0sgKQ0KIA0KLS8qKiBTQ0sgdXNlZCBMYWJlbCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfU0NLX1VTRUQgICAgKCBBVDkxQ19VU19DS0xPIHwgQVQ5MUNfVVNfQ0xLU19FWFQgKQ0KKy8vKiBTQ0sgdXNlZCBMYWJlbA0KKyNkZWZpbmUgQVQ5MUNfVVNfU0NLX1VTRUQgKEFUOTFDX1VTX0NLTE8gfCBBVDkxQ19VU19DTEtTX0VYVCkNCiANCi0vKiogU3RhbmRhcmQgSVNPIFQ9MCBNb2RlIDogOCBiaXRzICwgMSBzdG9wICwgcGFyaXR5ICovDQotI2RlZmluZSBBVDkxQ19VU19JU09fUkVBREVSX01PREUgIFwNCi0gICAgKCBBVDkxQ19VU19VU01PREVfSVNPNzgxNl8wICsgXA0KLSAgICAgIEFUOTFDX1VTX0NMS1NfQ0xPQ0sgKyAgICAgICBcDQotICAgICAgQVQ5MUNfVVNfTkJTVE9QXzFfQklUICsgICAgIFwNCi0gICAgICBBVDkxQ19VU19QQVJfRVZFTiArICAgICAgICAgXA0KLSAgICAgIEFUOTFDX1VTX0NIUkxfOF9CSVRTICsgICAgICBcDQotICAgICAgQVQ5MUNfVVNfQ0tMTyArICAgICAgICAgICAgIFwNCi0gICAgICBBVDkxQ19VU19PVkVSICkNCisvLyogU3RhbmRhcmQgSVNPIFQ9MCBNb2RlIDogOCBiaXRzICwgMSBzdG9wICwgcGFyaXR5DQorI2RlZmluZSBBVDkxQ19VU19JU09fUkVBREVSX01PREUgKCBBVDkxQ19VU19VU01PREVfSVNPNzgxNl8wICsgXA0KKwkJCQkJICAgCQkgQVQ5MUNfVVNfQ0xLU19DTE9DSyArXA0KKyAgICAgICAgICAgICAgICAgICAgICAgCQkgQVQ5MUNfVVNfTkJTVE9QXzFfQklUICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgCQkgQVQ5MUNfVVNfUEFSX0VWRU4gKyBcDQorICAgICAgICAgICAgICAgICAgICAgICAJCSBBVDkxQ19VU19DSFJMXzhfQklUUyArIFwNCisgICAgICAgICAgICAgICAgICAgICAgIAkJIEFUOTFDX1VTX0NLTE8gK1wNCisgICAgICAgICAgICAgICAgICAgICAgIAkJIEFUOTFDX1VTX09WRVIpDQogDQotLyoqIFN0YW5kYXJkIElSREEgbW9kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfQVNZTkNfSVJEQV9NT0RFIFwNCi0gICAgKCBBVDkxQ19VU19VU01PREVfSVJEQSArICAgICBcDQotICAgICAgQVQ5MUNfVVNfTkJTVE9QXzFfQklUICsgICAgXA0KLSAgICAgIEFUOTFDX1VTX1BBUl9OT05FICsgICAgICAgIFwNCi0gICAgICBBVDkxQ19VU19DSFJMXzhfQklUUyArICAgICBcDQotICAgICAgQVQ5MUNfVVNfQ0xLU19DTE9DSyApDQorLy8qIFN0YW5kYXJkIElSREEgbW9kZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfQVNZTkNfSVJEQV9NT0RFICggIEFUOTFDX1VTX1VTTU9ERV9JUkRBICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19OQlNUT1BfMV9CSVQgKyBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX1BBUl9OT05FICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19DSFJMXzhfQklUUyArIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfQ0xLU19DTE9DSyApDQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVVNfQmF1ZHJhdGUgKi8NCi0vKiogXGJyaWVmIENhbHVjdWxhdGUgYmF1ZF92YWx1ZSBhY2NvcmRpbmcgdG8gdGhlIG1haW4gY2xvY2sgYW5kIHRoZSBiYXVkIHJhdGUgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1VTX0JhdWRyYXRlKCBjb25zdCB1bnNpZ25lZCBpbnQgbWFpbl9jbG9jaywgLyogXGFyZyBwZXJpcGhlcmFsIGNsb2NrICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgYmF1ZF9yYXRlICkgLyogXGFyZyBVQVJUIGJhdWRyYXRlICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfQmF1ZHJhdGUNCisvLyogXGJyaWVmIENhbHVjdWxhdGUgYmF1ZF92YWx1ZSBhY2NvcmRpbmcgdG8gdGhlIG1haW4gY2xvY2sgYW5kIHRoZSBiYXVkIHJhdGUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1VTX0JhdWRyYXRlICgNCisJY29uc3QgdW5zaWduZWQgaW50IG1haW5fY2xvY2ssIC8vIFxhcmcgcGVyaXBoZXJhbCBjbG9jaw0KKwljb25zdCB1bnNpZ25lZCBpbnQgYmF1ZF9yYXRlKSAgLy8gXGFyZyBVQVJUIGJhdWRyYXRlDQogew0KLSAgICB1bnNpZ25lZCBpbnQgYmF1ZF92YWx1ZSA9ICggKCBtYWluX2Nsb2NrICogMTAgKSAvICggYmF1ZF9yYXRlICogMTYgKSApOw0KLQ0KLSAgICBpZiggKCBiYXVkX3ZhbHVlICUgMTAgKSA+PSA1ICkNCi0gICAgew0KLSAgICAgICAgYmF1ZF92YWx1ZSA9ICggYmF1ZF92YWx1ZSAvIDEwICkgKyAxOw0KLSAgICB9DQotICAgIGVsc2UNCi0gICAgew0KLSAgICAgICAgYmF1ZF92YWx1ZSAvPSAxMDsNCi0gICAgfQ0KLQ0KLSAgICByZXR1cm4gYmF1ZF92YWx1ZTsNCisJdW5zaWduZWQgaW50IGJhdWRfdmFsdWUgPSAoKG1haW5fY2xvY2sqMTApLyhiYXVkX3JhdGUgKiAxNikpOw0KKwlpZiAoKGJhdWRfdmFsdWUgJSAxMCkgPj0gNSkNCisJCWJhdWRfdmFsdWUgPSAoYmF1ZF92YWx1ZSAvIDEwKSArIDE7DQorCWVsc2UNCisJCWJhdWRfdmFsdWUgLz0gMTA7DQorCXJldHVybiBiYXVkX3ZhbHVlOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9VU19TZXRCYXVkcmF0ZSAqLw0KLS8qKiBcYnJpZWYgU2V0IHRoZSBiYXVkcmF0ZSBhY2NvcmRpbmcgdG8gdGhlIENQVSBjbG9jayAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1VTX1NldEJhdWRyYXRlKCBBVDkxUFNfVVNBUlQgcFVTQVJULCAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1haW5DbG9jaywgLyogXGFyZyBwZXJpcGhlcmFsIGNsb2NrICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNwZWVkICkgICAgLyogXGFyZyBVQVJUIGJhdWRyYXRlICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfU2V0QmF1ZHJhdGUNCisvLyogXGJyaWVmIFNldCB0aGUgYmF1ZHJhdGUgYWNjb3JkaW5nIHRvIHRoZSBDUFUgY2xvY2sNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VU19TZXRCYXVkcmF0ZSAoDQorCUFUOTFQU19VU0FSVCBwVVNBUlQsICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IG1haW5DbG9jaywgLy8gXGFyZyBwZXJpcGhlcmFsIGNsb2NrDQorCXVuc2lnbmVkIGludCBzcGVlZCkgICAgIC8vIFxhcmcgVUFSVCBiYXVkcmF0ZQ0KIHsNCi0gICAgLyoqIERlZmluZSB0aGUgYmF1ZCByYXRlIGRpdmlzb3IgcmVnaXN0ZXIgKi8NCi0gICAgcFVTQVJULT5VU19CUkdSID0gQVQ5MUZfVVNfQmF1ZHJhdGUoIG1haW5DbG9jaywgc3BlZWQgKTsNCisJLy8qIERlZmluZSB0aGUgYmF1ZCByYXRlIGRpdmlzb3IgcmVnaXN0ZXINCisJcFVTQVJULT5VU19CUkdSID0gQVQ5MUZfVVNfQmF1ZHJhdGUobWFpbkNsb2NrLCBzcGVlZCk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VTX1NldFRpbWVndWFyZCAqLw0KLS8qKiBcYnJpZWYgU2V0IFVTQVJUIHRpbWVndWFyZCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1VTX1NldFRpbWVndWFyZCggQVQ5MVBTX1VTQVJUIHBVU0FSVCwgICAgIC8qIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHRpbWVndWFyZCApIC8qIFxhcmcgdGltZWd1YXJkIHZhbHVlICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfU2V0VGltZWd1YXJkDQorLy8qIFxicmllZiBTZXQgVVNBUlQgdGltZWd1YXJkDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVVNfU2V0VGltZWd1YXJkICgNCisJQVQ5MVBTX1VTQVJUIHBVU0FSVCwgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgdGltZWd1YXJkKSAvLyBcYXJnIHRpbWVndWFyZCB2YWx1ZQ0KIHsNCi0gICAgLyoqIFdyaXRlIHRoZSBUaW1lZ3VhcmQgUmVnaXN0ZXIgKi8NCi0gICAgcFVTQVJULT5VU19UVEdSID0gdGltZWd1YXJkOw0KKwkvLyogV3JpdGUgdGhlIFRpbWVndWFyZCBSZWdpc3Rlcg0KKwlwVVNBUlQtPlVTX1RUR1IgPSB0aW1lZ3VhcmQgOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9VU19FbmFibGVJdCAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIFVTQVJUIElUICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVVNfRW5hYmxlSXQoIEFUOTFQU19VU0FSVCBwVVNBUlQsIC8qIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApICAvKiBcYXJnIElUIHRvIGJlIGVuYWJsZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19FbmFibGVJdA0KKy8vKiBcYnJpZWYgRW5hYmxlIFVTQVJUIElUDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVVNfRW5hYmxlSXQgKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJULCAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAgIC8vIFxhcmcgSVQgdG8gYmUgZW5hYmxlZA0KIHsNCi0gICAgLyoqIFdyaXRlIHRvIHRoZSBJRVIgcmVnaXN0ZXIgKi8NCi0gICAgcFVTQVJULT5VU19JRVIgPSBmbGFnOw0KKwkvLyogV3JpdGUgdG8gdGhlIElFUiByZWdpc3Rlcg0KKwlwVVNBUlQtPlVTX0lFUiA9IGZsYWc7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VTX0Rpc2FibGVJdCAqLw0KLS8qKiBcYnJpZWYgRGlzYWJsZSBVU0FSVCBJVCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1VTX0Rpc2FibGVJdCggQVQ5MVBTX1VTQVJUIHBVU0FSVCwgLyogXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApICAvKiBcYXJnIElUIHRvIGJlIGRpc2FibGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfRGlzYWJsZUl0DQorLy8qIFxicmllZiBEaXNhYmxlIFVTQVJUIElUDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVVNfRGlzYWJsZUl0ICgNCisJQVQ5MVBTX1VTQVJUIHBVU0FSVCwgLy8gXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgICAvLyBcYXJnIElUIHRvIGJlIGRpc2FibGVkDQogew0KLSAgICAvKiogV3JpdGUgdG8gdGhlIElFUiByZWdpc3RlciAqLw0KLSAgICBwVVNBUlQtPlVTX0lEUiA9IGZsYWc7DQorCS8vKiBXcml0ZSB0byB0aGUgSUVSIHJlZ2lzdGVyDQorCXBVU0FSVC0+VVNfSURSID0gZmxhZzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVVNfQ29uZmlndXJlICovDQotLyoqIFxicmllZiBDb25maWd1cmUgVVNBUlQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9VU19Db25maWd1cmUoIEFUOTFQU19VU0FSVCBwVVNBUlQsICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtYWluQ2xvY2ssICAvKiBcYXJnIHBlcmlwaGVyYWwgY2xvY2sgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1vZGUsICAgICAgIC8qIFxhcmcgbW9kZSBSZWdpc3RlciB0byBiZSBwcm9ncmFtbWVkICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBiYXVkUmF0ZSwgICAvKiBcYXJnIGJhdWRyYXRlIHRvIGJlIHByb2dyYW1tZWQgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHRpbWVndWFyZCApIC8qIFxhcmcgdGltZWd1YXJkIHRvIGJlIHByb2dyYW1tZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19Db25maWd1cmUNCisvLyogXGJyaWVmIENvbmZpZ3VyZSBVU0FSVA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VTX0NvbmZpZ3VyZSAoDQorCUFUOTFQU19VU0FSVCBwVVNBUlQsICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBtYWluQ2xvY2ssICAvLyBcYXJnIHBlcmlwaGVyYWwgY2xvY2sNCisJdW5zaWduZWQgaW50IG1vZGUgLCAgICAgIC8vIFxhcmcgbW9kZSBSZWdpc3RlciB0byBiZSBwcm9ncmFtbWVkDQorCXVuc2lnbmVkIGludCBiYXVkUmF0ZSAsICAvLyBcYXJnIGJhdWRyYXRlIHRvIGJlIHByb2dyYW1tZWQNCisJdW5zaWduZWQgaW50IHRpbWVndWFyZCApIC8vIFxhcmcgdGltZWd1YXJkIHRvIGJlIHByb2dyYW1tZWQNCiB7DQotICAgIC8qKiBEaXNhYmxlIGludGVycnVwdHMgKi8NCi0gICAgcFVTQVJULT5VU19JRFIgPSAoIHVuc2lnbmVkIGludCApIC0xOw0KKyAgICAvLyogRGlzYWJsZSBpbnRlcnJ1cHRzDQorICAgIHBVU0FSVC0+VVNfSURSID0gKHVuc2lnbmVkIGludCkgLTE7DQogDQotICAgIC8qKiBSZXNldCByZWNlaXZlciBhbmQgdHJhbnNtaXR0ZXIgKi8NCi0gICAgcFVTQVJULT5VU19DUiA9IEFUOTFDX1VTX1JTVFJYIHwgQVQ5MUNfVVNfUlNUVFggfCBBVDkxQ19VU19SWERJUyB8IEFUOTFDX1VTX1RYRElTOw0KKyAgICAvLyogUmVzZXQgcmVjZWl2ZXIgYW5kIHRyYW5zbWl0dGVyDQorICAgIHBVU0FSVC0+VVNfQ1IgPSBBVDkxQ19VU19SU1RSWCB8IEFUOTFDX1VTX1JTVFRYIHwgQVQ5MUNfVVNfUlhESVMgfCBBVDkxQ19VU19UWERJUyA7DQogDQotICAgIC8qKiBEZWZpbmUgdGhlIGJhdWQgcmF0ZSBkaXZpc29yIHJlZ2lzdGVyICovDQotICAgIEFUOTFGX1VTX1NldEJhdWRyYXRlKCBwVVNBUlQsIG1haW5DbG9jaywgYmF1ZFJhdGUgKTsNCisJLy8qIERlZmluZSB0aGUgYmF1ZCByYXRlIGRpdmlzb3IgcmVnaXN0ZXINCisJQVQ5MUZfVVNfU2V0QmF1ZHJhdGUocFVTQVJULCBtYWluQ2xvY2ssIGJhdWRSYXRlKTsNCiANCi0gICAgLyoqIFdyaXRlIHRoZSBUaW1lZ3VhcmQgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MUZfVVNfU2V0VGltZWd1YXJkKCBwVVNBUlQsIHRpbWVndWFyZCApOw0KKwkvLyogV3JpdGUgdGhlIFRpbWVndWFyZCBSZWdpc3Rlcg0KKwlBVDkxRl9VU19TZXRUaW1lZ3VhcmQocFVTQVJULCB0aW1lZ3VhcmQpOw0KIA0KLSAgICAvKiogQ2xlYXIgVHJhbnNtaXQgYW5kIFJlY2VpdmUgQ291bnRlcnMgKi8NCi0gICAgQVQ5MUZfUERDX09wZW4oICggQVQ5MVBTX1BEQyApICYoIHBVU0FSVC0+VVNfUlBSICkgKTsNCisgICAgLy8qIENsZWFyIFRyYW5zbWl0IGFuZCBSZWNlaXZlIENvdW50ZXJzDQorICAgIEFUOTFGX1BEQ19PcGVuKChBVDkxUFNfUERDKSAmKHBVU0FSVC0+VVNfUlBSKSk7DQogDQotICAgIC8qKiBEZWZpbmUgdGhlIFVTQVJUIG1vZGUgKi8NCi0gICAgcFVTQVJULT5VU19NUiA9IG1vZGU7DQorICAgIC8vKiBEZWZpbmUgdGhlIFVTQVJUIG1vZGUNCisgICAgcFVTQVJULT5VU19NUiA9IG1vZGUgIDsNCisNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVVNfRW5hYmxlUnggKi8NCi0vKiogXGJyaWVmIEVuYWJsZSByZWNlaXZpbmcgY2hhcmFjdGVycyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1VTX0VuYWJsZVJ4KCBBVDkxUFNfVVNBUlQgcFVTQVJUICkgLyogXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX0VuYWJsZVJ4DQorLy8qIFxicmllZiBFbmFibGUgcmVjZWl2aW5nIGNoYXJhY3RlcnMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VU19FbmFibGVSeCAoDQorCUFUOTFQU19VU0FSVCBwVVNBUlQpICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyDQogew0KLSAgICAvKiogRW5hYmxlIHJlY2VpdmVyICovDQorICAgIC8vKiBFbmFibGUgcmVjZWl2ZXINCiAgICAgcFVTQVJULT5VU19DUiA9IEFUOTFDX1VTX1JYRU47DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VTX0VuYWJsZVR4ICovDQotLyoqIFxicmllZiBFbmFibGUgc2VuZGluZyBjaGFyYWN0ZXJzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVVNfRW5hYmxlVHgoIEFUOTFQU19VU0FSVCBwVVNBUlQgKSAvKiBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfRW5hYmxlVHgNCisvLyogXGJyaWVmIEVuYWJsZSBzZW5kaW5nIGNoYXJhY3RlcnMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VU19FbmFibGVUeCAoDQorCUFUOTFQU19VU0FSVCBwVVNBUlQpICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyDQogew0KLSAgICAvKiogRW5hYmxlICB0cmFuc21pdHRlciAqLw0KKyAgICAvLyogRW5hYmxlICB0cmFuc21pdHRlcg0KICAgICBwVVNBUlQtPlVTX0NSID0gQVQ5MUNfVVNfVFhFTjsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVVNfUmVzZXRSeCAqLw0KLS8qKiBcYnJpZWYgUmVzZXQgUmVjZWl2ZXIgYW5kIHJlLWVuYWJsZSBpdCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1VTX1Jlc2V0UngoIEFUOTFQU19VU0FSVCBwVVNBUlQgKSAvKiBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfUmVzZXRSeA0KKy8vKiBcYnJpZWYgUmVzZXQgUmVjZWl2ZXIgYW5kIHJlLWVuYWJsZSBpdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VTX1Jlc2V0UnggKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJUKSAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlcg0KIHsNCi0gICAgLyoqIFJlc2V0IHJlY2VpdmVyICovDQotICAgIHBVU0FSVC0+VVNfQ1IgPSBBVDkxQ19VU19SU1RSWDsNCi0gICAgLyoqIFJlLUVuYWJsZSByZWNlaXZlciAqLw0KKwkvLyogUmVzZXQgcmVjZWl2ZXINCisJcFVTQVJULT5VU19DUiA9IEFUOTFDX1VTX1JTVFJYOw0KKyAgICAvLyogUmUtRW5hYmxlIHJlY2VpdmVyDQogICAgIHBVU0FSVC0+VVNfQ1IgPSBBVDkxQ19VU19SWEVOOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9VU19SZXNldFR4ICovDQotLyoqIFxicmllZiBSZXNldCBUcmFuc21pdHRlciBhbmQgcmUtZW5hYmxlIGl0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVVNfUmVzZXRUeCggQVQ5MVBTX1VTQVJUIHBVU0FSVCApIC8qIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19SZXNldFR4DQorLy8qIFxicmllZiBSZXNldCBUcmFuc21pdHRlciBhbmQgcmUtZW5hYmxlIGl0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVVNfUmVzZXRUeCAoDQorCUFUOTFQU19VU0FSVCBwVVNBUlQpICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyDQogew0KLSAgICAvKiogUmVzZXQgdHJhbnNtaXR0ZXIgKi8NCi0gICAgcFVTQVJULT5VU19DUiA9IEFUOTFDX1VTX1JTVFRYOw0KLSAgICAvKiogRW5hYmxlIHRyYW5zbWl0dGVyICovDQorCS8vKiBSZXNldCB0cmFuc21pdHRlcg0KKwlwVVNBUlQtPlVTX0NSID0gQVQ5MUNfVVNfUlNUVFg7DQorICAgIC8vKiBFbmFibGUgdHJhbnNtaXR0ZXINCiAgICAgcFVTQVJULT5VU19DUiA9IEFUOTFDX1VTX1RYRU47DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VTX0Rpc2FibGVSeCAqLw0KLS8qKiBcYnJpZWYgRGlzYWJsZSBSZWNlaXZlciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1VTX0Rpc2FibGVSeCggQVQ5MVBTX1VTQVJUIHBVU0FSVCApIC8qIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19EaXNhYmxlUngNCisvLyogXGJyaWVmIERpc2FibGUgUmVjZWl2ZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VU19EaXNhYmxlUnggKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJUKSAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlcg0KIHsNCi0gICAgLyoqIERpc2FibGUgcmVjZWl2ZXIgKi8NCisgICAgLy8qIERpc2FibGUgcmVjZWl2ZXINCiAgICAgcFVTQVJULT5VU19DUiA9IEFUOTFDX1VTX1JYRElTOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9VU19EaXNhYmxlVHggKi8NCi0vKiogXGJyaWVmIERpc2FibGUgVHJhbnNtaXR0ZXIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9VU19EaXNhYmxlVHgoIEFUOTFQU19VU0FSVCBwVVNBUlQgKSAvKiBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfRGlzYWJsZVR4DQorLy8qIFxicmllZiBEaXNhYmxlIFRyYW5zbWl0dGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVVNfRGlzYWJsZVR4ICgNCisJQVQ5MVBTX1VTQVJUIHBVU0FSVCkgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXINCiB7DQotICAgIC8qKiBEaXNhYmxlIHRyYW5zbWl0dGVyICovDQorICAgIC8vKiBEaXNhYmxlIHRyYW5zbWl0dGVyDQogICAgIHBVU0FSVC0+VVNfQ1IgPSBBVDkxQ19VU19UWERJUzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVVNfQ2xvc2UgKi8NCi0vKiogXGJyaWVmIENsb3NlIFVTQVJUOiBkaXNhYmxlIElUIGRpc2FibGUgcmVjZWl2ZXIgYW5kIHRyYW5zbWl0dGVyLCBjbG9zZSBQREMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9VU19DbG9zZSggQVQ5MVBTX1VTQVJUIHBVU0FSVCApIC8qIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19DbG9zZQ0KKy8vKiBcYnJpZWYgQ2xvc2UgVVNBUlQ6IGRpc2FibGUgSVQgZGlzYWJsZSByZWNlaXZlciBhbmQgdHJhbnNtaXR0ZXIsIGNsb3NlIFBEQw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VTX0Nsb3NlICgNCisJQVQ5MVBTX1VTQVJUIHBVU0FSVCkgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXINCiB7DQotICAgIC8qKiBSZXNldCB0aGUgYmF1ZCByYXRlIGRpdmlzb3IgcmVnaXN0ZXIgKi8NCi0gICAgcFVTQVJULT5VU19CUkdSID0gMDsNCisgICAgLy8qIFJlc2V0IHRoZSBiYXVkIHJhdGUgZGl2aXNvciByZWdpc3Rlcg0KKyAgICBwVVNBUlQtPlVTX0JSR1IgPSAwIDsNCiANCi0gICAgLyoqIFJlc2V0IHRoZSBVU0FSVCBtb2RlICovDQotICAgIHBVU0FSVC0+VVNfTVIgPSAwOw0KKyAgICAvLyogUmVzZXQgdGhlIFVTQVJUIG1vZGUNCisgICAgcFVTQVJULT5VU19NUiA9IDAgIDsNCiANCi0gICAgLyoqIFJlc2V0IHRoZSBUaW1lZ3VhcmQgUmVnaXN0ZXIgKi8NCisgICAgLy8qIFJlc2V0IHRoZSBUaW1lZ3VhcmQgUmVnaXN0ZXINCiAgICAgcFVTQVJULT5VU19UVEdSID0gMDsNCiANCi0gICAgLyoqIERpc2FibGUgYWxsIGludGVycnVwdHMgKi8NCi0gICAgcFVTQVJULT5VU19JRFIgPSAweEZGRkZGRkZGOw0KKyAgICAvLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cw0KKyAgICBwVVNBUlQtPlVTX0lEUiA9IDB4RkZGRkZGRkYgOw0KIA0KLSAgICAvKiogQWJvcnQgdGhlIFBlcmlwaGVyYWwgRGF0YSBUcmFuc2ZlcnMgKi8NCi0gICAgQVQ5MUZfUERDX0Nsb3NlKCAoIEFUOTFQU19QREMgKSAmKCBwVVNBUlQtPlVTX1JQUiApICk7DQorICAgIC8vKiBBYm9ydCB0aGUgUGVyaXBoZXJhbCBEYXRhIFRyYW5zZmVycw0KKyAgICBBVDkxRl9QRENfQ2xvc2UoKEFUOTFQU19QREMpICYocFVTQVJULT5VU19SUFIpKTsNCiANCi0gICAgLyoqIERpc2FibGUgcmVjZWl2ZXIgYW5kIHRyYW5zbWl0dGVyIGFuZCBzdG9wIGFueSBhY3Rpdml0eSBpbW1lZGlhdGVseSAqLw0KLSAgICBwVVNBUlQtPlVTX0NSID0gQVQ5MUNfVVNfVFhESVMgfCBBVDkxQ19VU19SWERJUyB8IEFUOTFDX1VTX1JTVFRYIHwgQVQ5MUNfVVNfUlNUUlg7DQorICAgIC8vKiBEaXNhYmxlIHJlY2VpdmVyIGFuZCB0cmFuc21pdHRlciBhbmQgc3RvcCBhbnkgYWN0aXZpdHkgaW1tZWRpYXRlbHkNCisgICAgcFVTQVJULT5VU19DUiA9IEFUOTFDX1VTX1RYRElTIHwgQVQ5MUNfVVNfUlhESVMgfCBBVDkxQ19VU19SU1RUWCB8IEFUOTFDX1VTX1JTVFJYIDsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVVNfVHhSZWFkeSAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIDEgaWYgYSBjaGFyYWN0ZXIgY2FuIGJlIHdyaXR0ZW4gaW4gVVNfVEhSICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9VU19UeFJlYWR5KCBBVDkxUFNfVVNBUlQgcFVTQVJUICkgLyogXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX1R4UmVhZHkNCisvLyogXGJyaWVmIFJldHVybiAxIGlmIGEgY2hhcmFjdGVyIGNhbiBiZSB3cml0dGVuIGluIFVTX1RIUg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVVNfVHhSZWFkeSAoDQorCUFUOTFQU19VU0FSVCBwVVNBUlQgKSAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlcg0KIHsNCi0gICAgcmV0dXJuKCBwVVNBUlQtPlVTX0NTUiAmIEFUOTFDX1VTX1RYUkRZICk7DQorICAgIHJldHVybiAocFVTQVJULT5VU19DU1IgJiBBVDkxQ19VU19UWFJEWSk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VTX1J4UmVhZHkgKi8NCi0vKiogXGJyaWVmIFJldHVybiAxIGlmIGEgY2hhcmFjdGVyIGNhbiBiZSByZWFkIGluIFVTX1JIUiAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVVNfUnhSZWFkeSggQVQ5MVBTX1VTQVJUIHBVU0FSVCApIC8qIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19SeFJlYWR5DQorLy8qIFxicmllZiBSZXR1cm4gMSBpZiBhIGNoYXJhY3RlciBjYW4gYmUgcmVhZCBpbiBVU19SSFINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1VTX1J4UmVhZHkgKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJUICkgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXINCiB7DQotICAgIHJldHVybiggcFVTQVJULT5VU19DU1IgJiBBVDkxQ19VU19SWFJEWSApOw0KKyAgICByZXR1cm4gKHBVU0FSVC0+VVNfQ1NSICYgQVQ5MUNfVVNfUlhSRFkpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9VU19FcnJvciAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIHRoZSBlcnJvciBmbGFnICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9VU19FcnJvciggQVQ5MVBTX1VTQVJUIHBVU0FSVCApIC8qIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19FcnJvcg0KKy8vKiBcYnJpZWYgUmV0dXJuIHRoZSBlcnJvciBmbGFnDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9VU19FcnJvciAoDQorCUFUOTFQU19VU0FSVCBwVVNBUlQgKSAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlcg0KIHsNCi0gICAgcmV0dXJuKCBwVVNBUlQtPlVTX0NTUiAmDQotICAgICAgICAgICAgKCBBVDkxQ19VU19PVlJFIHwgICAgLyogT3ZlcnJ1biBlcnJvciAqLw0KLSAgICAgICAgICAgICAgQVQ5MUNfVVNfRlJBTUUgfCAgIC8qIEZyYW1pbmcgZXJyb3IgKi8NCi0gICAgICAgICAgICAgIEFUOTFDX1VTX1BBUkUgKSApOyAvKiBQYXJpdHkgZXJyb3IgKi8NCisgICAgcmV0dXJuIChwVVNBUlQtPlVTX0NTUiAmDQorICAgIAkoQVQ5MUNfVVNfT1ZSRSB8ICAvLyBPdmVycnVuIGVycm9yDQorICAgIAkgQVQ5MUNfVVNfRlJBTUUgfCAvLyBGcmFtaW5nIGVycm9yDQorICAgIAkgQVQ5MUNfVVNfUEFSRSkpOyAgLy8gUGFyaXR5IGVycm9yDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VTX1B1dENoYXIgKi8NCi0vKiogXGJyaWVmIFNlbmQgYSBjaGFyYWN0ZXIsZG9lcyBub3QgY2hlY2sgaWYgcmVhZHkgdG8gc2VuZCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1VTX1B1dENoYXIoIEFUOTFQU19VU0FSVCBwVVNBUlQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2hhcmFjdGVyICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19QdXRDaGFyDQorLy8qIFxicmllZiBTZW5kIGEgY2hhcmFjdGVyLGRvZXMgbm90IGNoZWNrIGlmIHJlYWR5IHRvIHNlbmQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VU19QdXRDaGFyICgNCisJQVQ5MVBTX1VTQVJUIHBVU0FSVCwNCisJaW50IGNoYXJhY3RlciApDQogew0KLSAgICBwVVNBUlQtPlVTX1RIUiA9ICggY2hhcmFjdGVyICYgMHgxRkYgKTsNCisgICAgcFVTQVJULT5VU19USFIgPSAoY2hhcmFjdGVyICYgMHgxRkYpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9VU19HZXRDaGFyICovDQotLyoqIFxicmllZiBSZWNlaXZlIGEgY2hhcmFjdGVyLGRvZXMgbm90IGNoZWNrIGlmIGEgY2hhcmFjdGVyIGlzIGF2YWlsYWJsZSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSBpbnQgQVQ5MUZfVVNfR2V0Q2hhciggY29uc3QgQVQ5MVBTX1VTQVJUIHBVU0FSVCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfR2V0Q2hhcg0KKy8vKiBcYnJpZWYgUmVjZWl2ZSBhIGNoYXJhY3Rlcixkb2VzIG5vdCBjaGVjayBpZiBhIGNoYXJhY3RlciBpcyBhdmFpbGFibGUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1VTX0dldENoYXIgKA0KKwljb25zdCBBVDkxUFNfVVNBUlQgcFVTQVJUKQ0KIHsNCi0gICAgcmV0dXJuKCAoIHBVU0FSVC0+VVNfUkhSICkgJiAweDFGRiApOw0KKyAgICByZXR1cm4oKHBVU0FSVC0+VVNfUkhSKSAmIDB4MUZGKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVVNfU2VuZEZyYW1lICovDQotLyoqIFxicmllZiBSZXR1cm4gMiBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgd2l0aCBCdWZmZXIgYW5kIE5leHQgQnVmZmVyLCAxIGlmIFBEQyBoYXMgYmVlbiBpbml0aWFsaXphZWQgd2l0aCBOZXh0IEJ1ZmZlciwgMCBpZiBQREMgaXMgYnVzeSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVVNfU2VuZEZyYW1lKCBBVDkxUFNfVVNBUlQgcFVTQVJULA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBwQnVmZmVyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzekJ1ZmZlciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICogcE5leHRCdWZmZXIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHN6TmV4dEJ1ZmZlciApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfU2VuZEZyYW1lDQorLy8qIFxicmllZiBSZXR1cm4gMiBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgd2l0aCBCdWZmZXIgYW5kIE5leHQgQnVmZmVyLCAxIGlmIFBEQyBoYXMgYmVlbiBpbml0aWFsaXphZWQgd2l0aCBOZXh0IEJ1ZmZlciwgMCBpZiBQREMgaXMgYnVzeQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVVNfU2VuZEZyYW1lKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJULA0KKwljaGFyICpwQnVmZmVyLA0KKwl1bnNpZ25lZCBpbnQgc3pCdWZmZXIsDQorCWNoYXIgKnBOZXh0QnVmZmVyLA0KKwl1bnNpZ25lZCBpbnQgc3pOZXh0QnVmZmVyICkNCiB7DQotICAgIHJldHVybiBBVDkxRl9QRENfU2VuZEZyYW1lKA0KLSAgICAgICAgKCBBVDkxUFNfUERDICkgJiggcFVTQVJULT5VU19SUFIgKSwNCi0gICAgICAgIHBCdWZmZXIsDQotICAgICAgICBzekJ1ZmZlciwNCi0gICAgICAgIHBOZXh0QnVmZmVyLA0KLSAgICAgICAgc3pOZXh0QnVmZmVyICk7DQorCXJldHVybiBBVDkxRl9QRENfU2VuZEZyYW1lKA0KKwkJKEFUOTFQU19QREMpICYocFVTQVJULT5VU19SUFIpLA0KKwkJcEJ1ZmZlciwNCisJCXN6QnVmZmVyLA0KKwkJcE5leHRCdWZmZXIsDQorCQlzek5leHRCdWZmZXIpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9VU19SZWNlaXZlRnJhbWUgKi8NCi0vKiogXGJyaWVmIFJldHVybiAyIGlmIFBEQyBoYXMgYmVlbiBpbml0aWFsaXplZCB3aXRoIEJ1ZmZlciBhbmQgTmV4dCBCdWZmZXIsIDEgaWYgUERDIGhhcyBiZWVuIGluaXRpYWxpemFlZCB3aXRoIE5leHQgQnVmZmVyLCAwIGlmIFBEQyBpcyBidXN5ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9VU19SZWNlaXZlRnJhbWUoIEFUOTFQU19VU0FSVCBwVVNBUlQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqIHBCdWZmZXIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHN6QnVmZmVyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBwTmV4dEJ1ZmZlciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3pOZXh0QnVmZmVyICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19SZWNlaXZlRnJhbWUNCisvLyogXGJyaWVmIFJldHVybiAyIGlmIFBEQyBoYXMgYmVlbiBpbml0aWFsaXplZCB3aXRoIEJ1ZmZlciBhbmQgTmV4dCBCdWZmZXIsIDEgaWYgUERDIGhhcyBiZWVuIGluaXRpYWxpemFlZCB3aXRoIE5leHQgQnVmZmVyLCAwIGlmIFBEQyBpcyBidXN5DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9VU19SZWNlaXZlRnJhbWUgKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJULA0KKwljaGFyICpwQnVmZmVyLA0KKwl1bnNpZ25lZCBpbnQgc3pCdWZmZXIsDQorCWNoYXIgKnBOZXh0QnVmZmVyLA0KKwl1bnNpZ25lZCBpbnQgc3pOZXh0QnVmZmVyICkNCiB7DQotICAgIHJldHVybiBBVDkxRl9QRENfUmVjZWl2ZUZyYW1lKA0KLSAgICAgICAgKCBBVDkxUFNfUERDICkgJiggcFVTQVJULT5VU19SUFIgKSwNCi0gICAgICAgIHBCdWZmZXIsDQotICAgICAgICBzekJ1ZmZlciwNCi0gICAgICAgIHBOZXh0QnVmZmVyLA0KLSAgICAgICAgc3pOZXh0QnVmZmVyICk7DQorCXJldHVybiBBVDkxRl9QRENfUmVjZWl2ZUZyYW1lKA0KKwkJKEFUOTFQU19QREMpICYocFVTQVJULT5VU19SUFIpLA0KKwkJcEJ1ZmZlciwNCisJCXN6QnVmZmVyLA0KKwkJcE5leHRCdWZmZXIsDQorCQlzek5leHRCdWZmZXIpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9VU19TZXRJcmRhRmlsdGVyICovDQotLyoqIFxicmllZiBTZXQgdGhlIHZhbHVlIG9mIElyRGEgZmlsdGVyIHRyZWdpc3RlciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1VTX1NldElyZGFGaWx0ZXIoIEFUOTFQU19VU0FSVCBwVVNBUlQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHZhbHVlICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19TZXRJcmRhRmlsdGVyDQorLy8qIFxicmllZiBTZXQgdGhlIHZhbHVlIG9mIElyRGEgZmlsdGVyIHRyZWdpc3Rlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VTX1NldElyZGFGaWx0ZXIgKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJULA0KKwl1bnNpZ25lZCBjaGFyIHZhbHVlDQorKQ0KIHsNCi0gICAgcFVTQVJULT5VU19JRiA9IHZhbHVlOw0KKwlwVVNBUlQtPlVTX0lGID0gdmFsdWU7DQogfQ0KIA0KIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotKiAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgU1NDDQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiogRGVmaW5lIHRoZSBzdGFuZGFyZCBJMlMgbW9kZSBjb25maWd1cmF0aW9uICovDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgU1NDDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisvLyogRGVmaW5lIHRoZSBzdGFuZGFyZCBJMlMgbW9kZSBjb25maWd1cmF0aW9uDQogDQotLyoqIENvbmZpZ3VyYXRpb24gdG8gc2V0IGluIHRoZSBTU0MgVHJhbnNtaXQgQ2xvY2sgTW9kZSBSZWdpc3RlciAqLw0KLS8qKiBQYXJhbWV0ZXJzIDogIG5iX2JpdF9ieV9zbG90IDogOCwgMTYgb3IgMzIgYml0cyAqLw0KLS8qKiAgICAgICAgICAgICAgIG5iX3Nsb3RfYnlfZnJhbWUgOiBudW1iZXIgb2YgY2hhbm5lbHMgKi8NCi0jZGVmaW5lIEFUOTFDX0kyU19BU1lfTUFTVEVSX1RYX1NFVFRJTkcoIG5iX2JpdF9ieV9zbG90LCBuYl9zbG90X2J5X2ZyYW1lICkgXA0KLSAgICAoICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgQVQ5MUNfU1NDX0NLU19ESVYgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICBBVDkxQ19TU0NfQ0tPX0NPTlRJTk9VUyArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgIEFUOTFDX1NTQ19DS0dfTk9ORSArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgQVQ5MUNfU1NDX1NUQVJUX0ZBTExfUkYgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICBBVDkxQ19TU0NfU1RUT1VUICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICggKCAxIDw8IDE2ICkgJiBBVDkxQ19TU0NfU1RURExZICkgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgKCAoICggKCBuYl9iaXRfYnlfc2xvdCAqIG5iX3Nsb3RfYnlfZnJhbWUgKSAvIDIgKSAtIDEgKSA8PCAyNCApICkNCisvLyogQ29uZmlndXJhdGlvbiB0byBzZXQgaW4gdGhlIFNTQyBUcmFuc21pdCBDbG9jayBNb2RlIFJlZ2lzdGVyDQorLy8qIFBhcmFtZXRlcnMgOiAgbmJfYml0X2J5X3Nsb3QgOiA4LCAxNiBvciAzMiBiaXRzDQorLy8qIAkJCSAgbmJfc2xvdF9ieV9mcmFtZSA6IG51bWJlciBvZiBjaGFubmVscw0KKyNkZWZpbmUgQVQ5MUNfSTJTX0FTWV9NQVNURVJfVFhfU0VUVElORyhuYl9iaXRfYnlfc2xvdCwgbmJfc2xvdF9ieV9mcmFtZSkoICtcDQorCQkJCQkJCQkJICAgQVQ5MUNfU1NDX0NLU19ESVYgICArXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCSAgIEFUOTFDX1NTQ19DS09fQ09OVElOT1VTICAgICAgK1wNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkgICBBVDkxQ19TU0NfQ0tHX05PTkUgICAgK1wNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19TU0NfU1RBUlRfRkFMTF9SRiArXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCSAgIEFUOTFDX1NTQ19TVFRPVVQgICtcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJICAgKCgxPDwxNikgJiBBVDkxQ19TU0NfU1RURExZKSArXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCSAgICgoKChuYl9iaXRfYnlfc2xvdCpuYl9zbG90X2J5X2ZyYW1lKS8yKS0xKSA8PDI0KSkNCiANCiANCi0vKiogQ29uZmlndXJhdGlvbiB0byBzZXQgaW4gdGhlIFNTQyBUcmFuc21pdCBGcmFtZSBNb2RlIFJlZ2lzdGVyICovDQotLyoqIFBhcmFtZXRlcnMgOiBuYl9iaXRfYnlfc2xvdCA6IDgsIDE2IG9yIDMyIGJpdHMgKi8NCi0vKiogICAgICAgICAgICAgIG5iX3Nsb3RfYnlfZnJhbWUgOiBudW1iZXIgb2YgY2hhbm5lbHMgKi8NCi0jZGVmaW5lIEFUOTFDX0kyU19BU1lfVFhfRlJBTUVfU0VUVElORyggbmJfYml0X2J5X3Nsb3QsIG5iX3Nsb3RfYnlfZnJhbWUgKSBcDQotICAgICggKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICggbmJfYml0X2J5X3Nsb3QgLSAxICkgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICBBVDkxQ19TU0NfTVNCRiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgKCAoICggbmJfc2xvdF9ieV9mcmFtZSAtIDEgKSA8PCA4ICkgJiBBVDkxQ19TU0NfREFUTkIgKSArICAgICAgICAgICAgXA0KLSAgICAgICggKCAoIG5iX2JpdF9ieV9zbG90IC0gMSApIDw8IDE2ICkgJiBBVDkxQ19TU0NfRlNMRU4gKSArICAgICAgICAgICAgIFwNCi0gICAgICBBVDkxQ19TU0NfRlNPU19ORUdBVElWRSApDQorLy8qIENvbmZpZ3VyYXRpb24gdG8gc2V0IGluIHRoZSBTU0MgVHJhbnNtaXQgRnJhbWUgTW9kZSBSZWdpc3Rlcg0KKy8vKiBQYXJhbWV0ZXJzIDogbmJfYml0X2J5X3Nsb3QgOiA4LCAxNiBvciAzMiBiaXRzDQorLy8qIAkJCSBuYl9zbG90X2J5X2ZyYW1lIDogbnVtYmVyIG9mIGNoYW5uZWxzDQorI2RlZmluZSBBVDkxQ19JMlNfQVNZX1RYX0ZSQU1FX1NFVFRJTkcobmJfYml0X2J5X3Nsb3QsIG5iX3Nsb3RfYnlfZnJhbWUpKCArXA0KKwkJCQkJCQkJCShuYl9iaXRfYnlfc2xvdC0xKSAgK1wNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQlBVDkxQ19TU0NfTVNCRiAgICtcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJKCgobmJfc2xvdF9ieV9mcmFtZS0xKTw8OCkgJiBBVDkxQ19TU0NfREFUTkIpICArXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCSgoKG5iX2JpdF9ieV9zbG90LTEpPDwxNikgJiBBVDkxQ19TU0NfRlNMRU4pICtcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJQVQ5MUNfU1NDX0ZTT1NfTkVHQVRJVkUpDQogDQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1NDX1NldEJhdWRyYXRlICovDQotLyoqIFxicmllZiBTZXQgdGhlIGJhdWRyYXRlIGFjY29yZGluZyB0byB0aGUgQ1BVIGNsb2NrICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfU1NDX1NldEJhdWRyYXRlKCBBVDkxUFNfU1NDIHBTU0MsICAgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBTU0MgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbWFpbkNsb2NrLCAvKiBcYXJnIHBlcmlwaGVyYWwgY2xvY2sgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNwZWVkICkgICAgLyogXGFyZyBTU0MgYmF1ZHJhdGUgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TU0NfU2V0QmF1ZHJhdGUNCisvLyogXGJyaWVmIFNldCB0aGUgYmF1ZHJhdGUgYWNjb3JkaW5nIHRvIHRoZSBDUFUgY2xvY2sNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TU0NfU2V0QmF1ZHJhdGUgKA0KKyAgICAgICAgQVQ5MVBTX1NTQyBwU1NDLCAgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgU1NDIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBtYWluQ2xvY2ssIC8vIFxhcmcgcGVyaXBoZXJhbCBjbG9jaw0KKyAgICAgICAgdW5zaWduZWQgaW50IHNwZWVkKSAgICAgLy8gXGFyZyBTU0MgYmF1ZHJhdGUNCiB7DQotICAgIHVuc2lnbmVkIGludCBiYXVkX3ZhbHVlOw0KLQ0KLSAgICAvKiogRGVmaW5lIHRoZSBiYXVkIHJhdGUgZGl2aXNvciByZWdpc3RlciAqLw0KLSAgICBpZiggc3BlZWQgPT0gMCApDQotICAgIHsNCi0gICAgICAgIGJhdWRfdmFsdWUgPSAwOw0KLSAgICB9DQotICAgIGVsc2UNCi0gICAgew0KLSAgICAgICAgYmF1ZF92YWx1ZSA9ICggdW5zaWduZWQgaW50ICkgKCBtYWluQ2xvY2sgKiAxMCApIC8gKCAyICogc3BlZWQgKTsNCi0NCi0gICAgICAgIGlmKCAoIGJhdWRfdmFsdWUgJSAxMCApID49IDUgKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGJhdWRfdmFsdWUgPSAoIGJhdWRfdmFsdWUgLyAxMCApICsgMTsNCi0gICAgICAgIH0NCisgICAgICAgIHVuc2lnbmVkIGludCBiYXVkX3ZhbHVlOw0KKyAgICAgICAgLy8qIERlZmluZSB0aGUgYmF1ZCByYXRlIGRpdmlzb3IgcmVnaXN0ZXINCisgICAgICAgIGlmIChzcGVlZCA9PSAwKQ0KKyAgICAgICAgICAgYmF1ZF92YWx1ZSA9IDA7DQogICAgICAgICBlbHNlDQogICAgICAgICB7DQotICAgICAgICAgICAgYmF1ZF92YWx1ZSAvPSAxMDsNCisgICAgICAgICAgIGJhdWRfdmFsdWUgPSAodW5zaWduZWQgaW50KSAobWFpbkNsb2NrICogMTApLygyKnNwZWVkKTsNCisgICAgICAgICAgIGlmICgoYmF1ZF92YWx1ZSAlIDEwKSA+PSA1KQ0KKyAgICAgICAgICAgICAgICAgIGJhdWRfdmFsdWUgPSAoYmF1ZF92YWx1ZSAvIDEwKSArIDE7DQorICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgICAgICAgYmF1ZF92YWx1ZSAvPSAxMDsNCiAgICAgICAgIH0NCi0gICAgfQ0KIA0KLSAgICBwU1NDLT5TU0NfQ01SID0gYmF1ZF92YWx1ZTsNCisgICAgICAgIHBTU0MtPlNTQ19DTVIgPSBiYXVkX3ZhbHVlOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9TU0NfQ29uZmlndXJlICovDQotLyoqIFxicmllZiBDb25maWd1cmUgU1NDICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfU1NDX0NvbmZpZ3VyZSggQVQ5MVBTX1NTQyBwU1NDLCAgICAgICAgIC8qIFxhcmcgcG9pbnRlciB0byBhIFNTQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3lzdF9jbG9jaywgLyogXGFyZyBTeXN0ZW0gQ2xvY2sgRnJlcXVlbmN5ICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYmF1ZF9yYXRlLCAgLyogXGFyZyBFeHBlY3RlZCBCYXVkIFJhdGUgRnJlcXVlbmN5ICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY2xvY2tfcngsICAgLyogXGFyZyBSZWNlaXZlciBDbG9jayBQYXJhbWV0ZXJzICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbW9kZV9yeCwgICAgLyogXGFyZyBtb2RlIFJlZ2lzdGVyIHRvIGJlIHByb2dyYW1tZWQgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjbG9ja190eCwgICAvKiBcYXJnIFRyYW5zbWl0dGVyIENsb2NrIFBhcmFtZXRlcnMgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtb2RlX3R4ICkgICAvKiBcYXJnIG1vZGUgUmVnaXN0ZXIgdG8gYmUgcHJvZ3JhbW1lZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NTQ19Db25maWd1cmUNCisvLyogXGJyaWVmIENvbmZpZ3VyZSBTU0MNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TU0NfQ29uZmlndXJlICgNCisgICAgICAgICAgICAgQVQ5MVBTX1NTQyBwU1NDLCAgICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBTU0MgY29udHJvbGxlcg0KKyAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3lzdF9jbG9jaywgIC8vIFxhcmcgU3lzdGVtIENsb2NrIEZyZXF1ZW5jeQ0KKyAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYmF1ZF9yYXRlLCAgIC8vIFxhcmcgRXhwZWN0ZWQgQmF1ZCBSYXRlIEZyZXF1ZW5jeQ0KKyAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY2xvY2tfcngsICAgIC8vIFxhcmcgUmVjZWl2ZXIgQ2xvY2sgUGFyYW1ldGVycw0KKyAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbW9kZV9yeCwgICAgIC8vIFxhcmcgbW9kZSBSZWdpc3RlciB0byBiZSBwcm9ncmFtbWVkDQorICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjbG9ja190eCwgICAgLy8gXGFyZyBUcmFuc21pdHRlciBDbG9jayBQYXJhbWV0ZXJzDQorICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtb2RlX3R4KSAgICAgLy8gXGFyZyBtb2RlIFJlZ2lzdGVyIHRvIGJlIHByb2dyYW1tZWQNCiB7DQotICAgIC8qKiBEaXNhYmxlIGludGVycnVwdHMgKi8NCi0gICAgcFNTQy0+U1NDX0lEUiA9ICggdW5zaWduZWQgaW50ICkgLTE7DQorICAgIC8vKiBEaXNhYmxlIGludGVycnVwdHMNCisJcFNTQy0+U1NDX0lEUiA9ICh1bnNpZ25lZCBpbnQpIC0xOw0KIA0KLSAgICAvKiogUmVzZXQgcmVjZWl2ZXIgYW5kIHRyYW5zbWl0dGVyICovDQotICAgIHBTU0MtPlNTQ19DUiA9IEFUOTFDX1NTQ19TV1JTVCB8IEFUOTFDX1NTQ19SWERJUyB8IEFUOTFDX1NTQ19UWERJUzsNCisgICAgLy8qIFJlc2V0IHJlY2VpdmVyIGFuZCB0cmFuc21pdHRlcg0KKwlwU1NDLT5TU0NfQ1IgPSBBVDkxQ19TU0NfU1dSU1QgfCBBVDkxQ19TU0NfUlhESVMgfCBBVDkxQ19TU0NfVFhESVMgOw0KIA0KLSAgICAvKiogRGVmaW5lIHRoZSBDbG9jayBNb2RlIFJlZ2lzdGVyICovDQotICAgIEFUOTFGX1NTQ19TZXRCYXVkcmF0ZSggcFNTQywgc3lzdF9jbG9jaywgYmF1ZF9yYXRlICk7DQorICAgIC8vKiBEZWZpbmUgdGhlIENsb2NrIE1vZGUgUmVnaXN0ZXINCisJQVQ5MUZfU1NDX1NldEJhdWRyYXRlKHBTU0MsIHN5c3RfY2xvY2ssIGJhdWRfcmF0ZSk7DQogDQotICAgIC8qKiBXcml0ZSB0aGUgUmVjZWl2ZSBDbG9jayBNb2RlIFJlZ2lzdGVyICovDQotICAgIHBTU0MtPlNTQ19SQ01SID0gY2xvY2tfcng7DQorICAgICAvLyogV3JpdGUgdGhlIFJlY2VpdmUgQ2xvY2sgTW9kZSBSZWdpc3Rlcg0KKwlwU1NDLT5TU0NfUkNNUiA9ICBjbG9ja19yeDsNCiANCi0gICAgLyoqIFdyaXRlIHRoZSBUcmFuc21pdCBDbG9jayBNb2RlIFJlZ2lzdGVyICovDQotICAgIHBTU0MtPlNTQ19UQ01SID0gY2xvY2tfdHg7DQorICAgICAvLyogV3JpdGUgdGhlIFRyYW5zbWl0IENsb2NrIE1vZGUgUmVnaXN0ZXINCisJcFNTQy0+U1NDX1RDTVIgPSAgY2xvY2tfdHg7DQogDQotICAgIC8qKiBXcml0ZSB0aGUgUmVjZWl2ZSBGcmFtZSBNb2RlIFJlZ2lzdGVyICovDQotICAgIHBTU0MtPlNTQ19SRk1SID0gbW9kZV9yeDsNCisgICAgIC8vKiBXcml0ZSB0aGUgUmVjZWl2ZSBGcmFtZSBNb2RlIFJlZ2lzdGVyDQorCXBTU0MtPlNTQ19SRk1SID0gIG1vZGVfcng7DQogDQotICAgIC8qKiBXcml0ZSB0aGUgVHJhbnNtaXQgRnJhbWUgTW9kZSBSZWdpc3RlciAqLw0KLSAgICBwU1NDLT5TU0NfVEZNUiA9IG1vZGVfdHg7DQorICAgICAvLyogV3JpdGUgdGhlIFRyYW5zbWl0IEZyYW1lIE1vZGUgUmVnaXN0ZXINCisJcFNTQy0+U1NDX1RGTVIgPSAgbW9kZV90eDsNCiANCi0gICAgLyoqIENsZWFyIFRyYW5zbWl0IGFuZCBSZWNlaXZlIENvdW50ZXJzICovDQotICAgIEFUOTFGX1BEQ19PcGVuKCAoIEFUOTFQU19QREMgKSAmKCBwU1NDLT5TU0NfUlBSICkgKTsNCisgICAgLy8qIENsZWFyIFRyYW5zbWl0IGFuZCBSZWNlaXZlIENvdW50ZXJzDQorCUFUOTFGX1BEQ19PcGVuKChBVDkxUFNfUERDKSAmKHBTU0MtPlNTQ19SUFIpKTsNCisNCisNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1NDX0VuYWJsZVJ4ICovDQotLyoqIFxicmllZiBFbmFibGUgcmVjZWl2aW5nIGRhdGFzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfU1NDX0VuYWJsZVJ4KCBBVDkxUFNfU1NDIHBTU0MgKSAvKiBcYXJnIHBvaW50ZXIgdG8gYSBTU0MgY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NTQ19FbmFibGVSeA0KKy8vKiBcYnJpZWYgRW5hYmxlIHJlY2VpdmluZyBkYXRhcw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NTQ19FbmFibGVSeCAoDQorCUFUOTFQU19TU0MgcFNTQykgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFNTQyBjb250cm9sbGVyDQogew0KLSAgICAvKiogRW5hYmxlIHJlY2VpdmVyICovDQorICAgIC8vKiBFbmFibGUgcmVjZWl2ZXINCiAgICAgcFNTQy0+U1NDX0NSID0gQVQ5MUNfU1NDX1JYRU47DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1NTQ19EaXNhYmxlUnggKi8NCi0vKiogXGJyaWVmIERpc2FibGUgcmVjZWl2aW5nIGRhdGFzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfU1NDX0Rpc2FibGVSeCggQVQ5MVBTX1NTQyBwU1NDICkgLyogXGFyZyBwb2ludGVyIHRvIGEgU1NDIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TU0NfRGlzYWJsZVJ4DQorLy8qIFxicmllZiBEaXNhYmxlIHJlY2VpdmluZyBkYXRhcw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NTQ19EaXNhYmxlUnggKA0KKwlBVDkxUFNfU1NDIHBTU0MpICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBTU0MgY29udHJvbGxlcg0KIHsNCi0gICAgLyoqIERpc2FibGUgcmVjZWl2ZXIgKi8NCisgICAgLy8qIERpc2FibGUgcmVjZWl2ZXINCiAgICAgcFNTQy0+U1NDX0NSID0gQVQ5MUNfU1NDX1JYRElTOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9TU0NfRW5hYmxlVHggKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBzZW5kaW5nIGRhdGFzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfU1NDX0VuYWJsZVR4KCBBVDkxUFNfU1NDIHBTU0MgKSAvKiBcYXJnIHBvaW50ZXIgdG8gYSBTU0MgY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NTQ19FbmFibGVUeA0KKy8vKiBcYnJpZWYgRW5hYmxlIHNlbmRpbmcgZGF0YXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TU0NfRW5hYmxlVHggKA0KKwlBVDkxUFNfU1NDIHBTU0MpICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBTU0MgY29udHJvbGxlcg0KIHsNCi0gICAgLyoqIEVuYWJsZSAgdHJhbnNtaXR0ZXIgKi8NCisgICAgLy8qIEVuYWJsZSAgdHJhbnNtaXR0ZXINCiAgICAgcFNTQy0+U1NDX0NSID0gQVQ5MUNfU1NDX1RYRU47DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1NTQ19EaXNhYmxlVHggKi8NCi0vKiogXGJyaWVmIERpc2FibGUgc2VuZGluZyBkYXRhcyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1NTQ19EaXNhYmxlVHgoIEFUOTFQU19TU0MgcFNTQyApIC8qIFxhcmcgcG9pbnRlciB0byBhIFNTQyBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1NDX0Rpc2FibGVUeA0KKy8vKiBcYnJpZWYgRGlzYWJsZSBzZW5kaW5nIGRhdGFzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1NDX0Rpc2FibGVUeCAoDQorCUFUOTFQU19TU0MgcFNTQykgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFNTQyBjb250cm9sbGVyDQogew0KLSAgICAvKiogRGlzYWJsZSAgdHJhbnNtaXR0ZXIgKi8NCisgICAgLy8qIERpc2FibGUgIHRyYW5zbWl0dGVyDQogICAgIHBTU0MtPlNTQ19DUiA9IEFUOTFDX1NTQ19UWERJUzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1NDX0VuYWJsZUl0ICovDQotLyoqIFxicmllZiBFbmFibGUgU1NDIElUICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfU1NDX0VuYWJsZUl0KCBBVDkxUFNfU1NDIHBTU0MsICAgIC8qIFxhcmcgcG9pbnRlciB0byBhIFNTQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyBJVCB0byBiZSBlbmFibGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1NDX0VuYWJsZUl0DQorLy8qIFxicmllZiBFbmFibGUgU1NDIElUDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1NDX0VuYWJsZUl0ICgNCisJQVQ5MVBTX1NTQyBwU1NDLCAvLyBcYXJnIHBvaW50ZXIgdG8gYSBTU0MgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgICAvLyBcYXJnIElUIHRvIGJlIGVuYWJsZWQNCiB7DQotICAgIC8qKiBXcml0ZSB0byB0aGUgSUVSIHJlZ2lzdGVyICovDQotICAgIHBTU0MtPlNTQ19JRVIgPSBmbGFnOw0KKwkvLyogV3JpdGUgdG8gdGhlIElFUiByZWdpc3Rlcg0KKwlwU1NDLT5TU0NfSUVSID0gZmxhZzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1NDX0Rpc2FibGVJdCAqLw0KLS8qKiBcYnJpZWYgRGlzYWJsZSBTU0MgSVQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9TU0NfRGlzYWJsZUl0KCBBVDkxUFNfU1NDIHBTU0MsICAgIC8qIFxhcmcgcG9pbnRlciB0byBhIFNTQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgSVQgdG8gYmUgZGlzYWJsZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TU0NfRGlzYWJsZUl0DQorLy8qIFxicmllZiBEaXNhYmxlIFNTQyBJVA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NTQ19EaXNhYmxlSXQgKA0KKwlBVDkxUFNfU1NDIHBTU0MsIC8vIFxhcmcgcG9pbnRlciB0byBhIFNTQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAgIC8vIFxhcmcgSVQgdG8gYmUgZGlzYWJsZWQNCiB7DQotICAgIC8qKiBXcml0ZSB0byB0aGUgSURSIHJlZ2lzdGVyICovDQotICAgIHBTU0MtPlNTQ19JRFIgPSBmbGFnOw0KKwkvLyogV3JpdGUgdG8gdGhlIElEUiByZWdpc3Rlcg0KKwlwU1NDLT5TU0NfSURSID0gZmxhZzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1NDX1JlY2VpdmVGcmFtZSAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIDIgaWYgUERDIGhhcyBiZWVuIGluaXRpYWxpemVkIHdpdGggQnVmZmVyIGFuZCBOZXh0IEJ1ZmZlciwgMSBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgd2l0aCBOZXh0IEJ1ZmZlciwgMCBpZiBQREMgaXMgYnVzeSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfU1NDX1JlY2VpdmVGcmFtZSggQVQ5MVBTX1NTQyBwU1NDLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICogcEJ1ZmZlciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHN6QnVmZmVyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICogcE5leHRCdWZmZXIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzek5leHRCdWZmZXIgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NTQ19SZWNlaXZlRnJhbWUNCisvLyogXGJyaWVmIFJldHVybiAyIGlmIFBEQyBoYXMgYmVlbiBpbml0aWFsaXplZCB3aXRoIEJ1ZmZlciBhbmQgTmV4dCBCdWZmZXIsIDEgaWYgUERDIGhhcyBiZWVuIGluaXRpYWxpemVkIHdpdGggTmV4dCBCdWZmZXIsIDAgaWYgUERDIGlzIGJ1c3kNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1NTQ19SZWNlaXZlRnJhbWUgKA0KKwlBVDkxUFNfU1NDIHBTU0MsDQorCWNoYXIgKnBCdWZmZXIsDQorCXVuc2lnbmVkIGludCBzekJ1ZmZlciwNCisJY2hhciAqcE5leHRCdWZmZXIsDQorCXVuc2lnbmVkIGludCBzek5leHRCdWZmZXIgKQ0KIHsNCi0gICAgcmV0dXJuIEFUOTFGX1BEQ19SZWNlaXZlRnJhbWUoDQotICAgICAgICAoIEFUOTFQU19QREMgKSAmKCBwU1NDLT5TU0NfUlBSICksDQotICAgICAgICBwQnVmZmVyLA0KLSAgICAgICAgc3pCdWZmZXIsDQotICAgICAgICBwTmV4dEJ1ZmZlciwNCi0gICAgICAgIHN6TmV4dEJ1ZmZlciApOw0KKwlyZXR1cm4gQVQ5MUZfUERDX1JlY2VpdmVGcmFtZSgNCisJCShBVDkxUFNfUERDKSAmKHBTU0MtPlNTQ19SUFIpLA0KKwkJcEJ1ZmZlciwNCisJCXN6QnVmZmVyLA0KKwkJcE5leHRCdWZmZXIsDQorCQlzek5leHRCdWZmZXIpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9TU0NfU2VuZEZyYW1lICovDQotLyoqIFxicmllZiBSZXR1cm4gMiBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgd2l0aCBCdWZmZXIgYW5kIE5leHQgQnVmZmVyLCAxIGlmIFBEQyBoYXMgYmVlbiBpbml0aWFsaXplZCB3aXRoIE5leHQgQnVmZmVyLCAwIGlmIFBEQyBpcyBidXN5ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9TU0NfU2VuZEZyYW1lKCBBVDkxUFNfU1NDIHBTU0MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBwQnVmZmVyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3pCdWZmZXIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBwTmV4dEJ1ZmZlciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHN6TmV4dEJ1ZmZlciApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1NDX1NlbmRGcmFtZQ0KKy8vKiBcYnJpZWYgUmV0dXJuIDIgaWYgUERDIGhhcyBiZWVuIGluaXRpYWxpemVkIHdpdGggQnVmZmVyIGFuZCBOZXh0IEJ1ZmZlciwgMSBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgd2l0aCBOZXh0IEJ1ZmZlciwgMCBpZiBQREMgaXMgYnVzeQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfU1NDX1NlbmRGcmFtZSgNCisJQVQ5MVBTX1NTQyBwU1NDLA0KKwljaGFyICpwQnVmZmVyLA0KKwl1bnNpZ25lZCBpbnQgc3pCdWZmZXIsDQorCWNoYXIgKnBOZXh0QnVmZmVyLA0KKwl1bnNpZ25lZCBpbnQgc3pOZXh0QnVmZmVyICkNCiB7DQotICAgIHJldHVybiBBVDkxRl9QRENfU2VuZEZyYW1lKA0KLSAgICAgICAgKCBBVDkxUFNfUERDICkgJiggcFNTQy0+U1NDX1JQUiApLA0KLSAgICAgICAgcEJ1ZmZlciwNCi0gICAgICAgIHN6QnVmZmVyLA0KLSAgICAgICAgcE5leHRCdWZmZXIsDQotICAgICAgICBzek5leHRCdWZmZXIgKTsNCisJcmV0dXJuIEFUOTFGX1BEQ19TZW5kRnJhbWUoDQorCQkoQVQ5MVBTX1BEQykgJihwU1NDLT5TU0NfUlBSKSwNCisJCXBCdWZmZXIsDQorCQlzekJ1ZmZlciwNCisJCXBOZXh0QnVmZmVyLA0KKwkJc3pOZXh0QnVmZmVyKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1NDX0dldEludGVycnVwdE1hc2tTdGF0dXMgKi8NCi0vKiogXGJyaWVmIFJldHVybiBTU0MgSW50ZXJydXB0IE1hc2sgU3RhdHVzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9TU0NfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLyogXHJldHVybiBTU0MgSW50ZXJydXB0IE1hc2sgU3RhdHVzICovDQotICAgIEFUOTFQU19TU0MgcFNzYyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgU1NDIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TU0NfR2V0SW50ZXJydXB0TWFza1N0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFNTQyBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1NTQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCAvLyBccmV0dXJuIFNTQyBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisgICAgICAgIEFUOTFQU19TU0MgcFNzYykgLy8gXGFyZyAgcG9pbnRlciB0byBhIFNTQyBjb250cm9sbGVyDQogew0KLSAgICByZXR1cm4gcFNzYy0+U1NDX0lNUjsNCisgICAgICAgIHJldHVybiBwU3NjLT5TU0NfSU1SOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9TU0NfSXNJbnRlcnJ1cHRNYXNrZWQgKi8NCi0vKiogXGJyaWVmIFRlc3QgaWYgU1NDIEludGVycnVwdCBpcyBNYXNrZWQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgaW50IEFUOTFGX1NTQ19Jc0ludGVycnVwdE1hc2tlZCggQVQ5MVBTX1NTQyBwU3NjLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgU1NDIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1NDX0lzSW50ZXJydXB0TWFza2VkDQorLy8qIFxicmllZiBUZXN0IGlmIFNTQyBJbnRlcnJ1cHQgaXMgTWFza2VkIA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfU1NDX0lzSW50ZXJydXB0TWFza2VkKA0KKyAgICAgICAgQVQ5MVBTX1NTQyBwU3NjLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBTU0MgY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQogew0KLSAgICByZXR1cm4oIEFUOTFGX1NTQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCBwU3NjICkgJiBmbGFnICk7DQorICAgICAgICByZXR1cm4gKEFUOTFGX1NTQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKHBTc2MpICYgZmxhZyk7DQogfQ0KIA0KIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotKiAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgVFdJDQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9UV0lfRW5hYmxlSXQgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBUV0kgSVQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9UV0lfRW5hYmxlSXQoIEFUOTFQU19UV0kgcFRXSSwgICAgLyogXGFyZyBwb2ludGVyIHRvIGEgVFdJIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnIElUIHRvIGJlIGVuYWJsZWQgKi8NCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBUV0kNCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RXSV9FbmFibGVJdA0KKy8vKiBcYnJpZWYgRW5hYmxlIFRXSSBJVA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1RXSV9FbmFibGVJdCAoDQorCUFUOTFQU19UV0kgcFRXSSwgLy8gXGFyZyBwb2ludGVyIHRvIGEgVFdJIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpICAgLy8gXGFyZyBJVCB0byBiZSBlbmFibGVkDQogew0KLSAgICAvKiogV3JpdGUgdG8gdGhlIElFUiByZWdpc3RlciAqLw0KLSAgICBwVFdJLT5UV0lfSUVSID0gZmxhZzsNCisJLy8qIFdyaXRlIHRvIHRoZSBJRVIgcmVnaXN0ZXINCisJcFRXSS0+VFdJX0lFUiA9IGZsYWc7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1RXSV9EaXNhYmxlSXQgKi8NCi0vKiogXGJyaWVmIERpc2FibGUgVFdJIElUICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVFdJX0Rpc2FibGVJdCggQVQ5MVBTX1RXSSBwVFdJLCAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBUV0kgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnIElUIHRvIGJlIGRpc2FibGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVFdJX0Rpc2FibGVJdA0KKy8vKiBcYnJpZWYgRGlzYWJsZSBUV0kgSVQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UV0lfRGlzYWJsZUl0ICgNCisJQVQ5MVBTX1RXSSBwVFdJLCAvLyBcYXJnIHBvaW50ZXIgdG8gYSBUV0kgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgICAvLyBcYXJnIElUIHRvIGJlIGRpc2FibGVkDQogew0KLSAgICAvKiogV3JpdGUgdG8gdGhlIElEUiByZWdpc3RlciAqLw0KLSAgICBwVFdJLT5UV0lfSURSID0gZmxhZzsNCisJLy8qIFdyaXRlIHRvIHRoZSBJRFIgcmVnaXN0ZXINCisJcFRXSS0+VFdJX0lEUiA9IGZsYWc7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1RXSV9Db25maWd1cmUgKi8NCi0vKiogXGJyaWVmIENvbmZpZ3VyZSBUV0kgaW4gbWFzdGVyIG1vZGUgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9UV0lfQ29uZmlndXJlKCBBVDkxUFNfVFdJIHBUV0kgKSAvKiBcYXJnIHBvaW50ZXIgdG8gYSBUV0kgY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RXSV9Db25maWd1cmUNCisvLyogXGJyaWVmIENvbmZpZ3VyZSBUV0kgaW4gbWFzdGVyIG1vZGUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UV0lfQ29uZmlndXJlICggQVQ5MVBTX1RXSSBwVFdJICkgICAgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVFdJIGNvbnRyb2xsZXINCiB7DQotICAgIC8qKiBEaXNhYmxlIGludGVycnVwdHMgKi8NCi0gICAgcFRXSS0+VFdJX0lEUiA9ICggdW5zaWduZWQgaW50ICkgLTE7DQorICAgIC8vKiBEaXNhYmxlIGludGVycnVwdHMNCisJcFRXSS0+VFdJX0lEUiA9ICh1bnNpZ25lZCBpbnQpIC0xOw0KIA0KLSAgICAvKiogUmVzZXQgcGVyaXBoZXJhbCAqLw0KLSAgICBwVFdJLT5UV0lfQ1IgPSBBVDkxQ19UV0lfU1dSU1Q7DQorICAgIC8vKiBSZXNldCBwZXJpcGhlcmFsDQorCXBUV0ktPlRXSV9DUiA9IEFUOTFDX1RXSV9TV1JTVDsNCiANCi0gICAgLyoqIFNldCBNYXN0ZXIgbW9kZSAqLw0KLSAgICBwVFdJLT5UV0lfQ1IgPSBBVDkxQ19UV0lfTVNFTjsNCisJLy8qIFNldCBNYXN0ZXIgbW9kZQ0KKwlwVFdJLT5UV0lfQ1IgPSBBVDkxQ19UV0lfTVNFTjsNCisNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVFdJX0dldEludGVycnVwdE1hc2tTdGF0dXMgKi8NCi0vKiogXGJyaWVmIFJldHVybiBUV0kgSW50ZXJydXB0IE1hc2sgU3RhdHVzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9UV0lfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLyogXHJldHVybiBUV0kgSW50ZXJydXB0IE1hc2sgU3RhdHVzICovDQotICAgIEFUOTFQU19UV0kgcFR3aSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgVFdJIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UV0lfR2V0SW50ZXJydXB0TWFza1N0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFRXSSBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1RXSV9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCAvLyBccmV0dXJuIFRXSSBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisgICAgICAgIEFUOTFQU19UV0kgcFR3aSkgLy8gXGFyZyAgcG9pbnRlciB0byBhIFRXSSBjb250cm9sbGVyDQogew0KLSAgICByZXR1cm4gcFR3aS0+VFdJX0lNUjsNCisgICAgICAgIHJldHVybiBwVHdpLT5UV0lfSU1SOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9UV0lfSXNJbnRlcnJ1cHRNYXNrZWQgKi8NCi0vKiogXGJyaWVmIFRlc3QgaWYgVFdJIEludGVycnVwdCBpcyBNYXNrZWQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgaW50IEFUOTFGX1RXSV9Jc0ludGVycnVwdE1hc2tlZCggQVQ5MVBTX1RXSSBwVHdpLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgVFdJIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVFdJX0lzSW50ZXJydXB0TWFza2VkDQorLy8qIFxicmllZiBUZXN0IGlmIFRXSSBJbnRlcnJ1cHQgaXMgTWFza2VkIA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfVFdJX0lzSW50ZXJydXB0TWFza2VkKA0KKyAgICAgICAgQVQ5MVBTX1RXSSBwVHdpLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBUV0kgY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQogew0KLSAgICByZXR1cm4oIEFUOTFGX1RXSV9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCBwVHdpICkgJiBmbGFnICk7DQorICAgICAgICByZXR1cm4gKEFUOTFGX1RXSV9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKHBUd2kpICYgZmxhZyk7DQogfQ0KIA0KIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotKiAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgUFdNQw0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUFdNX0dldFN0YXR1cyAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIFBXTSBJbnRlcnJ1cHQgU3RhdHVzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QV01DX0dldFN0YXR1cyggLyogXHJldHVybiBQV00gSW50ZXJydXB0IFN0YXR1cyAqLw0KLSAgICBBVDkxUFNfUFdNQyBwUFdNICkgICAgICAgICAgICAgICAgICAgICAgLyogcG9pbnRlciB0byBhIFBXTSBjb250cm9sbGVyICovDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgUFdNQw0KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUFdNX0dldFN0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFBXTSBJbnRlcnJ1cHQgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QV01DX0dldFN0YXR1cyggLy8gXHJldHVybiBQV00gSW50ZXJydXB0IFN0YXR1cw0KKwlBVDkxUFNfUFdNQyBwUFdNKSAvLyBwb2ludGVyIHRvIGEgUFdNIGNvbnRyb2xsZXINCiB7DQotICAgIHJldHVybiBwUFdNLT5QV01DX1NSOw0KKwlyZXR1cm4gcFBXTS0+UFdNQ19TUjsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUFdNX0ludGVycnVwdEVuYWJsZSAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIFBXTSBJbnRlcnJ1cHQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QV01DX0ludGVycnVwdEVuYWJsZSggQVQ5MVBTX1BXTUMgcFB3bSwgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUFdNIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIFBXTSBpbnRlcnJ1cHQgdG8gYmUgZW5hYmxlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BXTV9JbnRlcnJ1cHRFbmFibGUNCisvLyogXGJyaWVmIEVuYWJsZSBQV00gSW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUFdNQ19JbnRlcnJ1cHRFbmFibGUoDQorICAgICAgICBBVDkxUFNfUFdNQyBwUHdtLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQV00gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIFBXTSBpbnRlcnJ1cHQgdG8gYmUgZW5hYmxlZA0KIHsNCi0gICAgcFB3bS0+UFdNQ19JRVIgPSBmbGFnOw0KKyAgICAgICAgcFB3bS0+UFdNQ19JRVIgPSBmbGFnOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QV01fSW50ZXJydXB0RGlzYWJsZSAqLw0KLS8qKiBcYnJpZWYgRGlzYWJsZSBQV00gSW50ZXJydXB0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUFdNQ19JbnRlcnJ1cHREaXNhYmxlKCBBVDkxUFNfUFdNQyBwUHdtLCAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQV00gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIFBXTSBpbnRlcnJ1cHQgdG8gYmUgZGlzYWJsZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QV01fSW50ZXJydXB0RGlzYWJsZQ0KKy8vKiBcYnJpZWYgRGlzYWJsZSBQV00gSW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUFdNQ19JbnRlcnJ1cHREaXNhYmxlKA0KKyAgICAgICAgQVQ5MVBTX1BXTUMgcFB3bSwgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUFdNIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBQV00gaW50ZXJydXB0IHRvIGJlIGRpc2FibGVkDQogew0KLSAgICBwUHdtLT5QV01DX0lEUiA9IGZsYWc7DQorICAgICAgICBwUHdtLT5QV01DX0lEUiA9IGZsYWc7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BXTV9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzICovDQotLyoqIFxicmllZiBSZXR1cm4gUFdNIEludGVycnVwdCBNYXNrIFN0YXR1cyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUFdNQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCAvKiBccmV0dXJuIFBXTSBJbnRlcnJ1cHQgTWFzayBTdGF0dXMgKi8NCi0gICAgQVQ5MVBTX1BXTUMgcFB3bSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUFdNIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QV01fR2V0SW50ZXJydXB0TWFza1N0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFBXTSBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BXTUNfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLy8gXHJldHVybiBQV00gSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorICAgICAgICBBVDkxUFNfUFdNQyBwUHdtKSAvLyBcYXJnICBwb2ludGVyIHRvIGEgUFdNIGNvbnRyb2xsZXINCiB7DQotICAgIHJldHVybiBwUHdtLT5QV01DX0lNUjsNCisgICAgICAgIHJldHVybiBwUHdtLT5QV01DX0lNUjsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUFdNX0lzSW50ZXJydXB0TWFza2VkICovDQotLyoqIFxicmllZiBUZXN0IGlmIFBXTSBJbnRlcnJ1cHQgaXMgTWFza2VkICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QV01DX0lzSW50ZXJydXB0TWFza2VkKCBBVDkxUFNfUFdNQyBwUFdNLCAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQV00gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUFdNX0lzSW50ZXJydXB0TWFza2VkDQorLy8qIFxicmllZiBUZXN0IGlmIFBXTSBJbnRlcnJ1cHQgaXMgTWFza2VkDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QV01DX0lzSW50ZXJydXB0TWFza2VkKA0KKyAgICAgICAgQVQ5MVBTX1BXTUMgcFBXTSwgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUFdNIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KIHsNCi0gICAgcmV0dXJuKCBBVDkxRl9QV01DX0dldEludGVycnVwdE1hc2tTdGF0dXMoIHBQV00gKSAmIGZsYWcgKTsNCisJcmV0dXJuIChBVDkxRl9QV01DX0dldEludGVycnVwdE1hc2tTdGF0dXMocFBXTSkgJiBmbGFnKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUFdNX0lzU3RhdHVzU2V0ICovDQotLyoqIFxicmllZiBUZXN0IGlmIFBXTSBJbnRlcnJ1cHQgaXMgU2V0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QV01DX0lzU3RhdHVzU2V0KCBBVDkxUFNfUFdNQyBwUFdNLCAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQV00gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUFdNX0lzU3RhdHVzU2V0DQorLy8qIFxicmllZiBUZXN0IGlmIFBXTSBJbnRlcnJ1cHQgaXMgU2V0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QV01DX0lzU3RhdHVzU2V0KA0KKyAgICAgICAgQVQ5MVBTX1BXTUMgcFBXTSwgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUFdNIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KIHsNCi0gICAgcmV0dXJuKCBBVDkxRl9QV01DX0dldFN0YXR1cyggcFBXTSApICYgZmxhZyApOw0KKwlyZXR1cm4gKEFUOTFGX1BXTUNfR2V0U3RhdHVzKHBQV00pICYgZmxhZyk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BXTV9DZmdDaGFubmVsICovDQotLyoqIFxicmllZiBUZXN0IGlmIFBXTSBJbnRlcnJ1cHQgaXMgU2V0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUFdNQ19DZmdDaGFubmVsKCBBVDkxUFNfUFdNQyBwUFdNLCAgICAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUFdNIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNoYW5uZWxJZCwgLyogXGFyZyBQV00gY2hhbm5lbCBJRCAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbW9kZSwgICAgICAvKiBcYXJnICBQV00gbW9kZSAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcGVyaW9kLCAgICAvKiBcYXJnIFBXTSBwZXJpb2QgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGR1dHkgKSAgICAgLyogXGFyZyBQV00gZHV0eSBjeWNsZSAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BXTV9DZmdDaGFubmVsDQorLy8qIFxicmllZiBUZXN0IGlmIFBXTSBJbnRlcnJ1cHQgaXMgU2V0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUFdNQ19DZmdDaGFubmVsKA0KKyAgICAgICAgQVQ5MVBTX1BXTUMgcFBXTSwgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUFdNIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBjaGFubmVsSWQsIC8vIFxhcmcgUFdNIGNoYW5uZWwgSUQNCisgICAgICAgIHVuc2lnbmVkIGludCBtb2RlLCAvLyBcYXJnICBQV00gbW9kZQ0KKyAgICAgICAgdW5zaWduZWQgaW50IHBlcmlvZCwgLy8gXGFyZyBQV00gcGVyaW9kDQorICAgICAgICB1bnNpZ25lZCBpbnQgZHV0eSkgLy8gXGFyZyBQV00gZHV0eSBjeWNsZQ0KIHsNCi0gICAgcFBXTS0+UFdNQ19DSFsgY2hhbm5lbElkIF0uUFdNQ19DTVIgPSBtb2RlOw0KLSAgICBwUFdNLT5QV01DX0NIWyBjaGFubmVsSWQgXS5QV01DX0NEVFlSID0gZHV0eTsNCi0gICAgcFBXTS0+UFdNQ19DSFsgY2hhbm5lbElkIF0uUFdNQ19DUFJEUiA9IHBlcmlvZDsNCisJcFBXTS0+UFdNQ19DSFtjaGFubmVsSWRdLlBXTUNfQ01SID0gbW9kZTsNCisJcFBXTS0+UFdNQ19DSFtjaGFubmVsSWRdLlBXTUNfQ0RUWVIgPSBkdXR5Ow0KKwlwUFdNLT5QV01DX0NIW2NoYW5uZWxJZF0uUFdNQ19DUFJEUiA9IHBlcmlvZDsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUFdNX1N0YXJ0Q2hhbm5lbCAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIGNoYW5uZWwgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QV01DX1N0YXJ0Q2hhbm5lbCggQVQ5MVBTX1BXTUMgcFBXTSwgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUFdNIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIENoYW5uZWxzIElEcyB0byBiZSBlbmFibGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUFdNX1N0YXJ0Q2hhbm5lbA0KKy8vKiBcYnJpZWYgRW5hYmxlIGNoYW5uZWwNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QV01DX1N0YXJ0Q2hhbm5lbCgNCisgICAgICAgIEFUOTFQU19QV01DIHBQV00sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBXTSBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgQ2hhbm5lbHMgSURzIHRvIGJlIGVuYWJsZWQNCiB7DQotICAgIHBQV00tPlBXTUNfRU5BID0gZmxhZzsNCisJcFBXTS0+UFdNQ19FTkEgPSBmbGFnOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QV01fU3RvcENoYW5uZWwgKi8NCi0vKiogXGJyaWVmIERpc2FibGUgY2hhbm5lbCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BXTUNfU3RvcENoYW5uZWwoIEFUOTFQU19QV01DIHBQV00sICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBXTSBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIENoYW5uZWxzIElEcyB0byBiZSBlbmFibGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUFdNX1N0b3BDaGFubmVsDQorLy8qIFxicmllZiBEaXNhYmxlIGNoYW5uZWwNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QV01DX1N0b3BDaGFubmVsKA0KKyAgICAgICAgQVQ5MVBTX1BXTUMgcFBXTSwgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUFdNIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBDaGFubmVscyBJRHMgdG8gYmUgZW5hYmxlZA0KIHsNCi0gICAgcFBXTS0+UFdNQ19ESVMgPSBmbGFnOw0KKwlwUFdNLT5QV01DX0RJUyA9IGZsYWc7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BXTV9VcGRhdGVDaGFubmVsICovDQotLyoqIFxicmllZiBVcGRhdGUgUGVyaW9kIG9yIER1dHkgQ3ljbGUgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QV01DX1VwZGF0ZUNoYW5uZWwoIEFUOTFQU19QV01DIHBQV00sICAgICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQV00gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY2hhbm5lbElkLCAvKiBcYXJnIFBXTSBjaGFubmVsIElEICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB1cGRhdGUgKSAgIC8qIFxhcmcgIENoYW5uZWxzIElEcyB0byBiZSBlbmFibGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUFdNX1VwZGF0ZUNoYW5uZWwNCisvLyogXGJyaWVmIFVwZGF0ZSBQZXJpb2Qgb3IgRHV0eSBDeWNsZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BXTUNfVXBkYXRlQ2hhbm5lbCgNCisgICAgICAgIEFUOTFQU19QV01DIHBQV00sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBXTSBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgY2hhbm5lbElkLCAvLyBcYXJnIFBXTSBjaGFubmVsIElEDQorICAgICAgICB1bnNpZ25lZCBpbnQgdXBkYXRlKSAvLyBcYXJnICBDaGFubmVscyBJRHMgdG8gYmUgZW5hYmxlZA0KIHsNCi0gICAgcFBXTS0+UFdNQ19DSFsgY2hhbm5lbElkIF0uUFdNQ19DVVBEUiA9IHVwZGF0ZTsNCisJcFBXTS0+UFdNQ19DSFtjaGFubmVsSWRdLlBXTUNfQ1VQRFIgPSB1cGRhdGU7DQogfQ0KIA0KIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotKiAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgVURQDQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9VRFBfRW5hYmxlSXQgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBVRFAgSVQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfRW5hYmxlSXQoIEFUOTFQU19VRFAgcFVEUCwgICAgLyogXGFyZyBwb2ludGVyIHRvIGEgVURQIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnIElUIHRvIGJlIGVuYWJsZWQgKi8NCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBVRFANCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VEUF9FbmFibGVJdA0KKy8vKiBcYnJpZWYgRW5hYmxlIFVEUCBJVA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VEUF9FbmFibGVJdCAoDQorCUFUOTFQU19VRFAgcFVEUCwgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAgIC8vIFxhcmcgSVQgdG8gYmUgZW5hYmxlZA0KIHsNCi0gICAgLyoqIFdyaXRlIHRvIHRoZSBJRVIgcmVnaXN0ZXIgKi8NCi0gICAgcFVEUC0+VURQX0lFUiA9IGZsYWc7DQorCS8vKiBXcml0ZSB0byB0aGUgSUVSIHJlZ2lzdGVyDQorCXBVRFAtPlVEUF9JRVIgPSBmbGFnOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9VRFBfRGlzYWJsZUl0ICovDQotLyoqIFxicmllZiBEaXNhYmxlIFVEUCBJVCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1VEUF9EaXNhYmxlSXQoIEFUOTFQU19VRFAgcFVEUCwgICAgLyogXGFyZyBwb2ludGVyIHRvIGEgVURQIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyBJVCB0byBiZSBkaXNhYmxlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VEUF9EaXNhYmxlSXQNCisvLyogXGJyaWVmIERpc2FibGUgVURQIElUDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVURQX0Rpc2FibGVJdCAoDQorCUFUOTFQU19VRFAgcFVEUCwgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAgIC8vIFxhcmcgSVQgdG8gYmUgZGlzYWJsZWQNCiB7DQotICAgIC8qKiBXcml0ZSB0byB0aGUgSURSIHJlZ2lzdGVyICovDQotICAgIHBVRFAtPlVEUF9JRFIgPSBmbGFnOw0KKwkvLyogV3JpdGUgdG8gdGhlIElEUiByZWdpc3Rlcg0KKwlwVURQLT5VRFBfSURSID0gZmxhZzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVURQX1NldEFkZHJlc3MgKi8NCi0vKiogXGJyaWVmIFNldCBVRFAgZnVuY3Rpb25hbCBhZGRyZXNzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVURQX1NldEFkZHJlc3MoIEFUOTFQU19VRFAgcFVEUCwgICAgICAgIC8qIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBhZGRyZXNzICkgLyogXGFyZyBuZXcgVURQIGFkZHJlc3MgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfU2V0QWRkcmVzcw0KKy8vKiBcYnJpZWYgU2V0IFVEUCBmdW5jdGlvbmFsIGFkZHJlc3MNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfU2V0QWRkcmVzcyAoDQorCUFUOTFQU19VRFAgcFVEUCwgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGNoYXIgYWRkcmVzcykgICAvLyBcYXJnIG5ldyBVRFAgYWRkcmVzcw0KIHsNCi0gICAgcFVEUC0+VURQX0ZBRERSID0gKCBBVDkxQ19VRFBfRkVOIHwgYWRkcmVzcyApOw0KKwlwVURQLT5VRFBfRkFERFIgPSAoQVQ5MUNfVURQX0ZFTiB8IGFkZHJlc3MpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9VRFBfRW5hYmxlRXAgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBFbmRwb2ludCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1VEUF9FbmFibGVFcCggQVQ5MVBTX1VEUCBwVURQLCAgICAgICAgIC8qIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgZW5kcG9pbnQgKSAvKiBcYXJnIGVuZHBvaW50IG51bWJlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VEUF9FbmFibGVFcA0KKy8vKiBcYnJpZWYgRW5hYmxlIEVuZHBvaW50DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVURQX0VuYWJsZUVwICgNCisJQVQ5MVBTX1VEUCBwVURQLCAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVURQIGNvbnRyb2xsZXINCisJdW5zaWduZWQgY2hhciBlbmRwb2ludCkgICAvLyBcYXJnIGVuZHBvaW50IG51bWJlcg0KIHsNCi0gICAgcFVEUC0+VURQX0NTUlsgZW5kcG9pbnQgXSB8PSBBVDkxQ19VRFBfRVBFRFM7DQorCXBVRFAtPlVEUF9DU1JbZW5kcG9pbnRdIHw9IEFUOTFDX1VEUF9FUEVEUzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVURQX0Rpc2FibGVFcCAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIEVuZHBvaW50ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVURQX0Rpc2FibGVFcCggQVQ5MVBTX1VEUCBwVURQLCAgICAgICAgIC8qIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGVuZHBvaW50ICkgLyogXGFyZyBlbmRwb2ludCBudW1iZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfRGlzYWJsZUVwDQorLy8qIFxicmllZiBFbmFibGUgRW5kcG9pbnQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfRGlzYWJsZUVwICgNCisJQVQ5MVBTX1VEUCBwVURQLCAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVURQIGNvbnRyb2xsZXINCisJdW5zaWduZWQgY2hhciBlbmRwb2ludCkgICAvLyBcYXJnIGVuZHBvaW50IG51bWJlcg0KIHsNCi0gICAgcFVEUC0+VURQX0NTUlsgZW5kcG9pbnQgXSAmPSB+QVQ5MUNfVURQX0VQRURTOw0KKwlwVURQLT5VRFBfQ1NSW2VuZHBvaW50XSAmPSB+QVQ5MUNfVURQX0VQRURTOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9VRFBfU2V0U3RhdGUgKi8NCi0vKiogXGJyaWVmIFNldCBVRFAgRGV2aWNlIHN0YXRlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVURQX1NldFN0YXRlKCBBVDkxUFNfVURQIHBVRFAsICAgIC8qIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyBuZXcgVURQIGFkZHJlc3MgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfU2V0U3RhdGUNCisvLyogXGJyaWVmIFNldCBVRFAgRGV2aWNlIHN0YXRlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVURQX1NldFN0YXRlICgNCisJQVQ5MVBTX1VEUCBwVURQLCAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVURQIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpICAgLy8gXGFyZyBuZXcgVURQIGFkZHJlc3MNCiB7DQotICAgIHBVRFAtPlVEUF9HTEJTVEFURSAmPSB+KCBBVDkxQ19VRFBfRkFEREVOIHwgQVQ5MUNfVURQX0NPTkZHICk7DQotICAgIHBVRFAtPlVEUF9HTEJTVEFURSB8PSBmbGFnOw0KKwlwVURQLT5VRFBfR0xCU1RBVEUgICY9IH4oQVQ5MUNfVURQX0ZBRERFTiB8IEFUOTFDX1VEUF9DT05GRyk7DQorCXBVRFAtPlVEUF9HTEJTVEFURSAgfD0gZmxhZzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVURQX0dldFN0YXRlICovDQotLyoqIFxicmllZiByZXR1cm4gVURQIERldmljZSBzdGF0ZSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVURQX0dldFN0YXRlKCAvKiBccmV0dXJuIHRoZSBVRFAgZGV2aWNlIHN0YXRlICovDQotICAgIEFUOTFQU19VRFAgcFVEUCApICAgICAgICAgICAgICAgICAgICAgLyogXGFyZyBwb2ludGVyIHRvIGEgVURQIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfR2V0U3RhdGUNCisvLyogXGJyaWVmIHJldHVybiBVRFAgRGV2aWNlIHN0YXRlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9VRFBfR2V0U3RhdGUgKCAvLyBccmV0dXJuIHRoZSBVRFAgZGV2aWNlIHN0YXRlDQorCUFUOTFQU19VRFAgcFVEUCkgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyDQogew0KLSAgICByZXR1cm4oIHBVRFAtPlVEUF9HTEJTVEFURSAmICggQVQ5MUNfVURQX0ZBRERFTiB8IEFUOTFDX1VEUF9DT05GRyApICk7DQorCXJldHVybiAocFVEUC0+VURQX0dMQlNUQVRFICAmIChBVDkxQ19VRFBfRkFEREVOIHwgQVQ5MUNfVURQX0NPTkZHKSk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VEUF9SZXNldEVwICovDQotLyoqIFxicmllZiBSZXNldCBVRFAgZW5kcG9pbnQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfUmVzZXRFcCggLyogXHJldHVybiB0aGUgVURQIGRldmljZSBzdGF0ZSAqLw0KLSAgICBBVDkxUFNfVURQIHBVRFAsICAgICAgICAgICAgIC8qIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyICovDQotICAgIHVuc2lnbmVkIGludCBmbGFnICkgICAgICAgICAgLyogXGFyZyBFbmRwb2ludHMgdG8gYmUgcmVzZXQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfUmVzZXRFcA0KKy8vKiBcYnJpZWYgUmVzZXQgVURQIGVuZHBvaW50DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVURQX1Jlc2V0RXAgKCAvLyBccmV0dXJuIHRoZSBVRFAgZGV2aWNlIHN0YXRlDQorCUFUOTFQU19VRFAgcFVEUCwgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAgIC8vIFxhcmcgRW5kcG9pbnRzIHRvIGJlIHJlc2V0DQogew0KLSAgICBwVURQLT5VRFBfUlNURVAgPSBmbGFnOw0KLSAgICBwVURQLT5VRFBfUlNURVAgPSAwOw0KKwlwVURQLT5VRFBfUlNURVAgPSBmbGFnOw0KKwlwVURQLT5VRFBfUlNURVAgPSAwOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9VRFBfRXBTdGFsbCAqLw0KLS8qKiBcYnJpZWYgRW5kcG9pbnQgd2lsbCBTVEFMTCByZXF1ZXN0cyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1VEUF9FcFN0YWxsKCBBVDkxUFNfVURQIHBVRFAsICAgICAgICAgLyogXGFyZyBwb2ludGVyIHRvIGEgVURQIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGVuZHBvaW50ICkgLyogXGFyZyBlbmRwb2ludCBudW1iZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfRXBTdGFsbA0KKy8vKiBcYnJpZWYgRW5kcG9pbnQgd2lsbCBTVEFMTCByZXF1ZXN0cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VEUF9FcFN0YWxsKA0KKwlBVDkxUFNfVURQIHBVRFAsICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGVuZHBvaW50KSAgIC8vIFxhcmcgZW5kcG9pbnQgbnVtYmVyDQogew0KLSAgICBwVURQLT5VRFBfQ1NSWyBlbmRwb2ludCBdIHw9IEFUOTFDX1VEUF9GT1JDRVNUQUxMOw0KKwlwVURQLT5VRFBfQ1NSW2VuZHBvaW50XSB8PSBBVDkxQ19VRFBfRk9SQ0VTVEFMTDsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVURQX0VwV3JpdGUgKi8NCi0vKiogXGJyaWVmIFdyaXRlIHZhbHVlIGluIHRoZSBEUFIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfRXBXcml0ZSggQVQ5MVBTX1VEUCBwVURQLCAgICAgICAgLyogXGFyZyBwb2ludGVyIHRvIGEgVURQIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGVuZHBvaW50LCAvKiBcYXJnIGVuZHBvaW50IG51bWJlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgdmFsdWUgKSAgIC8qIFxhcmcgdmFsdWUgdG8gYmUgd3JpdHRlbiBpbiB0aGUgRFBSICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVURQX0VwV3JpdGUNCisvLyogXGJyaWVmIFdyaXRlIHZhbHVlIGluIHRoZSBEUFINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfRXBXcml0ZSgNCisJQVQ5MVBTX1VEUCBwVURQLCAgICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGNoYXIgZW5kcG9pbnQsICAvLyBcYXJnIGVuZHBvaW50IG51bWJlcg0KKwl1bnNpZ25lZCBjaGFyIHZhbHVlKSAgICAgLy8gXGFyZyB2YWx1ZSB0byBiZSB3cml0dGVuIGluIHRoZSBEUFINCiB7DQotICAgIHBVRFAtPlVEUF9GRFJbIGVuZHBvaW50IF0gPSB2YWx1ZTsNCisJcFVEUC0+VURQX0ZEUltlbmRwb2ludF0gPSB2YWx1ZTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVURQX0VwUmVhZCAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIHZhbHVlIGZyb20gdGhlIERQUiAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVURQX0VwUmVhZCggQVQ5MVBTX1VEUCBwVURQLCAgICAgICAgIC8qIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgZW5kcG9pbnQgKSAvKiBcYXJnIGVuZHBvaW50IG51bWJlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VEUF9FcFJlYWQNCisvLyogXGJyaWVmIFJldHVybiB2YWx1ZSBmcm9tIHRoZSBEUFINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1VEUF9FcFJlYWQoDQorCUFUOTFQU19VRFAgcFVEUCwgICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGVuZHBvaW50KSAgLy8gXGFyZyBlbmRwb2ludCBudW1iZXINCiB7DQotICAgIHJldHVybiBwVURQLT5VRFBfRkRSWyBlbmRwb2ludCBdOw0KKwlyZXR1cm4gcFVEUC0+VURQX0ZEUltlbmRwb2ludF07DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VEUF9FcEVuZE9mV3IgKi8NCi0vKiogXGJyaWVmIE5vdGlmeSB0aGUgVURQIHRoYXQgdmFsdWVzIGluIERQUiBhcmUgcmVhZHkgdG8gYmUgc2VudCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1VEUF9FcEVuZE9mV3IoIEFUOTFQU19VRFAgcFVEUCwgICAgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBlbmRwb2ludCApIC8qIFxhcmcgZW5kcG9pbnQgbnVtYmVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVURQX0VwRW5kT2ZXcg0KKy8vKiBcYnJpZWYgTm90aWZ5IHRoZSBVRFAgdGhhdCB2YWx1ZXMgaW4gRFBSIGFyZSByZWFkeSB0byBiZSBzZW50DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVURQX0VwRW5kT2ZXcigNCisJQVQ5MVBTX1VEUCBwVURQLCAgICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGNoYXIgZW5kcG9pbnQpICAvLyBcYXJnIGVuZHBvaW50IG51bWJlcg0KIHsNCi0gICAgcFVEUC0+VURQX0NTUlsgZW5kcG9pbnQgXSB8PSBBVDkxQ19VRFBfVFhQS1RSRFk7DQorCXBVRFAtPlVEUF9DU1JbZW5kcG9pbnRdIHw9IEFUOTFDX1VEUF9UWFBLVFJEWTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVURQX0VwQ2xlYXIgKi8NCi0vKiogXGJyaWVmIENsZWFyIGZsYWcgaW4gdGhlIGVuZHBvaW50IENTUiByZWdpc3RlciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1VEUF9FcENsZWFyKCBBVDkxUFNfVURQIHBVRFAsICAgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgZW5kcG9pbnQsIC8qIFxhcmcgZW5kcG9pbnQgbnVtYmVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAgICAgLyogXGFyZyBmbGFnIHRvIGJlIGNsZWFyZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfRXBDbGVhcg0KKy8vKiBcYnJpZWYgQ2xlYXIgZmxhZyBpbiB0aGUgZW5kcG9pbnQgQ1NSIHJlZ2lzdGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVURQX0VwQ2xlYXIoDQorCUFUOTFQU19VRFAgcFVEUCwgICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGVuZHBvaW50LCAgLy8gXGFyZyBlbmRwb2ludCBudW1iZXINCisJdW5zaWduZWQgaW50IGZsYWcpICAgICAgIC8vIFxhcmcgZmxhZyB0byBiZSBjbGVhcmVkDQogew0KLSAgICBwVURQLT5VRFBfQ1NSWyBlbmRwb2ludCBdICY9IH4oIGZsYWcgKTsNCisJcFVEUC0+VURQX0NTUltlbmRwb2ludF0gJj0gfihmbGFnKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVURQX0VwU2V0ICovDQotLyoqIFxicmllZiBTZXQgZmxhZyBpbiB0aGUgZW5kcG9pbnQgQ1NSIHJlZ2lzdGVyICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVURQX0VwU2V0KCBBVDkxUFNfVURQIHBVRFAsICAgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGVuZHBvaW50LCAvKiBcYXJnIGVuZHBvaW50IG51bWJlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApICAgICAvKiBcYXJnIGZsYWcgdG8gYmUgY2xlYXJlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VEUF9FcFNldA0KKy8vKiBcYnJpZWYgU2V0IGZsYWcgaW4gdGhlIGVuZHBvaW50IENTUiByZWdpc3Rlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VEUF9FcFNldCgNCisJQVQ5MVBTX1VEUCBwVURQLCAgICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGNoYXIgZW5kcG9pbnQsICAvLyBcYXJnIGVuZHBvaW50IG51bWJlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgICAgICAgLy8gXGFyZyBmbGFnIHRvIGJlIGNsZWFyZWQNCiB7DQotICAgIHBVRFAtPlVEUF9DU1JbIGVuZHBvaW50IF0gfD0gZmxhZzsNCisJcFVEUC0+VURQX0NTUltlbmRwb2ludF0gfD0gZmxhZzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVURQX0VwU3RhdHVzICovDQotLyoqIFxicmllZiBSZXR1cm4gdGhlIGVuZHBvaW50IENTUiByZWdpc3RlciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVURQX0VwU3RhdHVzKCBBVDkxUFNfVURQIHBVRFAsICAgICAgICAgLyogXGFyZyBwb2ludGVyIHRvIGEgVURQIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGVuZHBvaW50ICkgLyogXGFyZyBlbmRwb2ludCBudW1iZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfRXBTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiB0aGUgZW5kcG9pbnQgQ1NSIHJlZ2lzdGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9VRFBfRXBTdGF0dXMoDQorCUFUOTFQU19VRFAgcFVEUCwgICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGVuZHBvaW50KSAgLy8gXGFyZyBlbmRwb2ludCBudW1iZXINCiB7DQotICAgIHJldHVybiBwVURQLT5VRFBfQ1NSWyBlbmRwb2ludCBdOw0KKwlyZXR1cm4gcFVEUC0+VURQX0NTUltlbmRwb2ludF07DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VEUF9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzICovDQotLyoqIFxicmllZiBSZXR1cm4gVURQIEludGVycnVwdCBNYXNrIFN0YXR1cyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVURQX0dldEludGVycnVwdE1hc2tTdGF0dXMoIC8qIFxyZXR1cm4gVURQIEludGVycnVwdCBNYXNrIFN0YXR1cyAqLw0KLSAgICBBVDkxUFNfVURQIHBVZHAgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVURQX0dldEludGVycnVwdE1hc2tTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBVRFAgSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9VRFBfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLy8gXHJldHVybiBVRFAgSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorICAgICAgICBBVDkxUFNfVURQIHBVZHApIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlcg0KIHsNCi0gICAgcmV0dXJuIHBVZHAtPlVEUF9JTVI7DQorICAgICAgICByZXR1cm4gcFVkcC0+VURQX0lNUjsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVURQX0lzSW50ZXJydXB0TWFza2VkICovDQotLyoqIFxicmllZiBUZXN0IGlmIFVEUCBJbnRlcnJ1cHQgaXMgTWFza2VkICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIGludCBBVDkxRl9VRFBfSXNJbnRlcnJ1cHRNYXNrZWQoIEFUOTFQU19VRFAgcFVkcCwgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VEUF9Jc0ludGVycnVwdE1hc2tlZA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBVRFAgSW50ZXJydXB0IGlzIE1hc2tlZCANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1VEUF9Jc0ludGVycnVwdE1hc2tlZCgNCisgICAgICAgIEFUOTFQU19VRFAgcFVkcCwgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgVURQIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KIHsNCi0gICAgcmV0dXJuKCBBVDkxRl9VRFBfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggcFVkcCApICYgZmxhZyApOw0KKyAgICAgICAgcmV0dXJuIChBVDkxRl9VRFBfR2V0SW50ZXJydXB0TWFza1N0YXR1cyhwVWRwKSAmIGZsYWcpOw0KIH0NCiANCiAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSogICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFRDDQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9UQ19JbnRlcnJ1cHRFbmFibGUgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBUQyBJbnRlcnJ1cHQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9UQ19JbnRlcnJ1cHRFbmFibGUoIEFUOTFQU19UQyBwVGMsICAgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFRDIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBUQyBpbnRlcnJ1cHQgdG8gYmUgZW5hYmxlZCAqLw0KKyAgICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFRDDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UQ19JbnRlcnJ1cHRFbmFibGUNCisvLyogXGJyaWVmIEVuYWJsZSBUQyBJbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UQ19JbnRlcnJ1cHRFbmFibGUoDQorICAgICAgICBBVDkxUFNfVEMgcFRjLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBUQyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgVEMgaW50ZXJydXB0IHRvIGJlIGVuYWJsZWQNCiB7DQotICAgIHBUYy0+VENfSUVSID0gZmxhZzsNCisgICAgICAgIHBUYy0+VENfSUVSID0gZmxhZzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVENfSW50ZXJydXB0RGlzYWJsZSAqLw0KLS8qKiBcYnJpZWYgRGlzYWJsZSBUQyBJbnRlcnJ1cHQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9UQ19JbnRlcnJ1cHREaXNhYmxlKCBBVDkxUFNfVEMgcFRjLCAgICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBUQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIFRDIGludGVycnVwdCB0byBiZSBkaXNhYmxlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RDX0ludGVycnVwdERpc2FibGUNCisvLyogXGJyaWVmIERpc2FibGUgVEMgSW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVENfSW50ZXJydXB0RGlzYWJsZSgNCisgICAgICAgIEFUOTFQU19UQyBwVGMsICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFRDIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBUQyBpbnRlcnJ1cHQgdG8gYmUgZGlzYWJsZWQNCiB7DQotICAgIHBUYy0+VENfSURSID0gZmxhZzsNCisgICAgICAgIHBUYy0+VENfSURSID0gZmxhZzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVENfR2V0SW50ZXJydXB0TWFza1N0YXR1cyAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIFRDIEludGVycnVwdCBNYXNrIFN0YXR1cyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVENfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLyogXHJldHVybiBUQyBJbnRlcnJ1cHQgTWFzayBTdGF0dXMgKi8NCi0gICAgQVQ5MVBTX1RDIHBUYyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFRDIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gVEMgSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9UQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCAvLyBccmV0dXJuIFRDIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKyAgICAgICAgQVQ5MVBTX1RDIHBUYykgLy8gXGFyZyAgcG9pbnRlciB0byBhIFRDIGNvbnRyb2xsZXINCiB7DQotICAgIHJldHVybiBwVGMtPlRDX0lNUjsNCisgICAgICAgIHJldHVybiBwVGMtPlRDX0lNUjsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVENfSXNJbnRlcnJ1cHRNYXNrZWQgKi8NCi0vKiogXGJyaWVmIFRlc3QgaWYgVEMgSW50ZXJydXB0IGlzIE1hc2tlZCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSBpbnQgQVQ5MUZfVENfSXNJbnRlcnJ1cHRNYXNrZWQoIEFUOTFQU19UQyBwVGMsICAgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFRDIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UQ19Jc0ludGVycnVwdE1hc2tlZA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBUQyBJbnRlcnJ1cHQgaXMgTWFza2VkIA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfVENfSXNJbnRlcnJ1cHRNYXNrZWQoDQorICAgICAgICBBVDkxUFNfVEMgcFRjLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBUQyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCiB7DQotICAgIHJldHVybiggQVQ5MUZfVENfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggcFRjICkgJiBmbGFnICk7DQorICAgICAgICByZXR1cm4gKEFUOTFGX1RDX0dldEludGVycnVwdE1hc2tTdGF0dXMocFRjKSAmIGZsYWcpOw0KIH0NCiANCiAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSogICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIENBTg0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotI2RlZmluZSBTVEFOREFSRF9GT1JNQVQgICAgMA0KLSNkZWZpbmUgRVhURU5ERURfRk9STUFUICAgIDENCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBDQU4NCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKyNkZWZpbmUJU1RBTkRBUkRfRk9STUFUIDANCisjZGVmaW5lCUVYVEVOREVEX0ZPUk1BVCAxDQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfSW5pdE1haWxib3hSZWdpc3RlcnMoKSAqLw0KLS8qKiBcYnJpZWYgQ29uZmlndXJlIHRoZSBjb3JyZXNwb25kaW5nIG1haWxib3ggKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9Jbml0TWFpbGJveFJlZ2lzdGVycyggQVQ5MVBTX0NBTl9NQiBDQU5fTWFpbGJveCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZV9yZWcsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFjY2VwdGFuY2VfbWFza19yZWcsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlkX3JlZywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGF0YV9sb3dfcmVnLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkYXRhX2hpZ2hfcmVnLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb250cm9sX3JlZyApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfSW5pdE1haWxib3hSZWdpc3RlcnMoKQ0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIHRoZSBjb3JyZXNwb25kaW5nIG1haWxib3gNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9Jbml0TWFpbGJveFJlZ2lzdGVycyhBVDkxUFNfQ0FOX01CCUNBTl9NYWlsYm94LA0KKwkJCQkJCQkJaW50ICAJCQltb2RlX3JlZywNCisJCQkJCQkJCWludCAJCQlhY2NlcHRhbmNlX21hc2tfcmVnLA0KKwkJCQkJCQkJaW50ICAJCQlpZF9yZWcsDQorCQkJCQkJCQlpbnQgIAkJCWRhdGFfbG93X3JlZywNCisJCQkJCQkJCWludCAgCQkJZGF0YV9oaWdoX3JlZywNCisJCQkJCQkJCWludCAgCQkJY29udHJvbF9yZWcpDQogew0KLSAgICBDQU5fTWFpbGJveC0+Q0FOX01CX01DUiA9IDB4MDsNCi0gICAgQ0FOX01haWxib3gtPkNBTl9NQl9NTVIgPSBtb2RlX3JlZzsNCi0gICAgQ0FOX01haWxib3gtPkNBTl9NQl9NQU0gPSBhY2NlcHRhbmNlX21hc2tfcmVnOw0KLSAgICBDQU5fTWFpbGJveC0+Q0FOX01CX01JRCA9IGlkX3JlZzsNCi0gICAgQ0FOX01haWxib3gtPkNBTl9NQl9NREwgPSBkYXRhX2xvd19yZWc7DQotICAgIENBTl9NYWlsYm94LT5DQU5fTUJfTURIID0gZGF0YV9oaWdoX3JlZzsNCi0gICAgQ0FOX01haWxib3gtPkNBTl9NQl9NQ1IgPSBjb250cm9sX3JlZzsNCisJQ0FOX01haWxib3gtPkNBTl9NQl9NQ1IgCT0gMHgwOw0KKwlDQU5fTWFpbGJveC0+Q0FOX01CX01NUiAJPSBtb2RlX3JlZzsNCisJQ0FOX01haWxib3gtPkNBTl9NQl9NQU0gCT0gYWNjZXB0YW5jZV9tYXNrX3JlZzsNCisJQ0FOX01haWxib3gtPkNBTl9NQl9NSUQgCT0gaWRfcmVnOw0KKwlDQU5fTWFpbGJveC0+Q0FOX01CX01ETCAJPSBkYXRhX2xvd19yZWc7IAkJDQorCUNBTl9NYWlsYm94LT5DQU5fTUJfTURIIAk9IGRhdGFfaGlnaF9yZWc7DQorCUNBTl9NYWlsYm94LT5DQU5fTUJfTUNSIAk9IGNvbnRyb2xfcmVnOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9FbmFibGVDQU4oKSAqLw0KLS8qKiBcYnJpZWYgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9FbmFibGVDQU4oIEFUOTFQU19DQU4gcENBTiApIC8qIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0VuYWJsZUNBTigpDQorLy8qIFxicmllZiANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9FbmFibGVDQU4oDQorCUFUOTFQU19DQU4gcENBTikgICAgIC8vIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlcg0KIHsNCi0gICAgcENBTi0+Q0FOX01SIHw9IEFUOTFDX0NBTl9DQU5FTjsNCisJcENBTi0+Q0FOX01SIHw9IEFUOTFDX0NBTl9DQU5FTjsNCiANCi0gICAgLyogV2FpdCBmb3IgV0FLRVVQIGZsYWcgcmFpc2luZyA8PT4gMTEtcmVjZXNzaXZlLWJpdCB3ZXJlIHNjYW5uZWQgYnkgdGhlIHRyYW5zY2VpdmVyICovDQotICAgIHdoaWxlKCAoIHBDQU4tPkNBTl9TUiAmIEFUOTFDX0NBTl9XQUtFVVAgKSAhPSBBVDkxQ19DQU5fV0FLRVVQICkNCi0gICAgew0KLSAgICB9DQorCS8vIFdhaXQgZm9yIFdBS0VVUCBmbGFnIHJhaXNpbmcgPD0+IDExLXJlY2Vzc2l2ZS1iaXQgd2VyZSBzY2FubmVkIGJ5IHRoZSB0cmFuc2NlaXZlcg0KKwl3aGlsZSggKHBDQU4tPkNBTl9TUiAmIEFUOTFDX0NBTl9XQUtFVVApICE9IEFUOTFDX0NBTl9XQUtFVVAgKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfRGlzYWJsZUNBTigpICovDQotLyoqIFxicmllZiAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0Rpc2FibGVDQU4oIEFUOTFQU19DQU4gcENBTiApIC8qIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0Rpc2FibGVDQU4oKQ0KKy8vKiBcYnJpZWYgDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfRGlzYWJsZUNBTigNCisJQVQ5MVBTX0NBTiBwQ0FOKSAgICAgLy8gcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyDQogew0KLSAgICBwQ0FOLT5DQU5fTVIgJj0gfkFUOTFDX0NBTl9DQU5FTjsNCisJcENBTi0+Q0FOX01SICY9IH5BVDkxQ19DQU5fQ0FORU47DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0NBTl9FbmFibGVJdCAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIENBTiBpbnRlcnJ1cHQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9DQU5fRW5hYmxlSXQoIEFUOTFQU19DQU4gcENBTiwgICAgLyogcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogSVQgdG8gYmUgZW5hYmxlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9FbmFibGVJdA0KKy8vKiBcYnJpZWYgRW5hYmxlIENBTiBpbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9DQU5fRW5hYmxlSXQgKA0KKwlBVDkxUFNfQ0FOIHBDQU4sICAgICAvLyBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpICAgLy8gSVQgdG8gYmUgZW5hYmxlZA0KIHsNCi0gICAgLyoqIFdyaXRlIHRvIHRoZSBJRVIgcmVnaXN0ZXIgKi8NCi0gICAgcENBTi0+Q0FOX0lFUiA9IGZsYWc7DQorCS8vKiBXcml0ZSB0byB0aGUgSUVSIHJlZ2lzdGVyDQorCXBDQU4tPkNBTl9JRVIgPSBmbGFnOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9DQU5fRGlzYWJsZUl0ICovDQotLyoqIFxicmllZiBEaXNhYmxlIENBTiBpbnRlcnJ1cHQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9DQU5fRGlzYWJsZUl0KCBBVDkxUFNfQ0FOIHBDQU4sICAgIC8qIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBJVCB0byBiZSBkaXNhYmxlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9EaXNhYmxlSXQNCisvLyogXGJyaWVmIERpc2FibGUgQ0FOIGludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0NBTl9EaXNhYmxlSXQgKA0KKwlBVDkxUFNfQ0FOIHBDQU4sIC8vIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgLy8gSVQgdG8gYmUgZGlzYWJsZWQNCiB7DQotICAgIC8qKiBXcml0ZSB0byB0aGUgSURSIHJlZ2lzdGVyICovDQotICAgIHBDQU4tPkNBTl9JRFIgPSBmbGFnOw0KKwkvLyogV3JpdGUgdG8gdGhlIElEUiByZWdpc3Rlcg0KKwlwQ0FOLT5DQU5fSURSID0gZmxhZzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQ0FOX0dldFN0YXR1cyAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIENBTiBJbnRlcnJ1cHQgU3RhdHVzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fR2V0U3RhdHVzKCAvKiBccmV0dXJuIENBTiBJbnRlcnJ1cHQgU3RhdHVzICovDQotICAgIEFUOTFQU19DQU4gcENBTiApICAgICAgICAgICAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9HZXRTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBDQU4gSW50ZXJydXB0IFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0FOX0dldFN0YXR1cyggLy8gXHJldHVybiBDQU4gSW50ZXJydXB0IFN0YXR1cw0KKwlBVDkxUFNfQ0FOIHBDQU4pIC8vIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlcg0KIHsNCi0gICAgcmV0dXJuIHBDQU4tPkNBTl9TUjsNCisJcmV0dXJuIHBDQU4tPkNBTl9TUjsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQ0FOX0dldEludGVycnVwdE1hc2tTdGF0dXMgKi8NCi0vKiogXGJyaWVmIFJldHVybiBDQU4gSW50ZXJydXB0IE1hc2sgU3RhdHVzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLyogXHJldHVybiBDQU4gSW50ZXJydXB0IE1hc2sgU3RhdHVzICovDQotICAgIEFUOTFQU19DQU4gcENBTiApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fR2V0SW50ZXJydXB0TWFza1N0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIENBTiBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NBTl9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCAvLyBccmV0dXJuIENBTiBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisJQVQ5MVBTX0NBTiBwQ0FOKSAvLyBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXINCiB7DQotICAgIHJldHVybiBwQ0FOLT5DQU5fSU1SOw0KKwlyZXR1cm4gcENBTi0+Q0FOX0lNUjsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQ0FOX0lzSW50ZXJydXB0TWFza2VkICovDQotLyoqIFxicmllZiBUZXN0IGlmIENBTiBJbnRlcnJ1cHQgaXMgTWFza2VkICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fSXNJbnRlcnJ1cHRNYXNrZWQoIEFUOTFQU19DQU4gcENBTiwgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9Jc0ludGVycnVwdE1hc2tlZA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBDQU4gSW50ZXJydXB0IGlzIE1hc2tlZCANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NBTl9Jc0ludGVycnVwdE1hc2tlZCgNCisgICAgICAgIEFUOTFQU19DQU4gcENBTiwgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KIHsNCi0gICAgcmV0dXJuKCBBVDkxRl9DQU5fR2V0SW50ZXJydXB0TWFza1N0YXR1cyggcENBTiApICYgZmxhZyApOw0KKwlyZXR1cm4gKEFUOTFGX0NBTl9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKHBDQU4pICYgZmxhZyk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0NBTl9Jc1N0YXR1c1NldCAqLw0KLS8qKiBcYnJpZWYgVGVzdCBpZiBDQU4gSW50ZXJydXB0IGlzIFNldCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0FOX0lzU3RhdHVzU2V0KCBBVDkxUFNfQ0FOIHBDQU4sICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fSXNTdGF0dXNTZXQNCisvLyogXGJyaWVmIFRlc3QgaWYgQ0FOIEludGVycnVwdCBpcyBTZXQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NBTl9Jc1N0YXR1c1NldCgNCisgICAgICAgIEFUOTFQU19DQU4gcENBTiwgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KIHsNCi0gICAgcmV0dXJuKCBBVDkxRl9DQU5fR2V0U3RhdHVzKCBwQ0FOICkgJiBmbGFnICk7DQorCXJldHVybiAoQVQ5MUZfQ0FOX0dldFN0YXR1cyhwQ0FOKSAmIGZsYWcpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9DQU5fQ2ZnTW9kZVJlZyAqLw0KLS8qKiBcYnJpZWYgQ29uZmlndXJlIHRoZSBNb2RlIFJlZ2lzdGVyIG9mIHRoZSBDQU4gY29udHJvbGxlciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0NBTl9DZmdNb2RlUmVnKCBBVDkxUFNfQ0FOIHBDQU4sICAgIC8qIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtb2RlICkgLyogbW9kZSByZWdpc3RlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9DZmdNb2RlUmVnDQorLy8qIFxicmllZiBDb25maWd1cmUgdGhlIE1vZGUgUmVnaXN0ZXIgb2YgdGhlIENBTiBjb250cm9sbGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQ0FOX0NmZ01vZGVSZWcgKA0KKwlBVDkxUFNfQ0FOIHBDQU4sIC8vIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgbW9kZSkgICAgICAgIC8vIG1vZGUgcmVnaXN0ZXIgDQogew0KLSAgICAvKiogV3JpdGUgdG8gdGhlIE1SIHJlZ2lzdGVyICovDQotICAgIHBDQU4tPkNBTl9NUiA9IG1vZGU7DQorCS8vKiBXcml0ZSB0byB0aGUgTVIgcmVnaXN0ZXINCisJcENBTi0+Q0FOX01SID0gbW9kZTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQ0FOX0dldE1vZGVSZWcgKi8NCi0vKiogXGJyaWVmIFJldHVybiB0aGUgTW9kZSBSZWdpc3RlciBvZiB0aGUgQ0FOIGNvbnRyb2xsZXIgdmFsdWUgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NBTl9HZXRNb2RlUmVnKCBBVDkxUFNfQ0FOIHBDQU4gLyogcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0dldE1vZGVSZWcNCisvLyogXGJyaWVmIFJldHVybiB0aGUgTW9kZSBSZWdpc3RlciBvZiB0aGUgQ0FOIGNvbnRyb2xsZXIgdmFsdWUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NBTl9HZXRNb2RlUmVnICgNCisJQVQ5MVBTX0NBTiBwQ0FOIC8vIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlcg0KKwkpDQogew0KLSAgICByZXR1cm4gcENBTi0+Q0FOX01SOw0KKwlyZXR1cm4gcENBTi0+Q0FOX01SOwkNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQ0FOX0NmZ0JhdWRyYXRlUmVnICovDQotLyoqIFxicmllZiBDb25maWd1cmUgdGhlIEJhdWRyYXRlIG9mIHRoZSBDQU4gY29udHJvbGxlciBmb3IgdGhlIG5ldHdvcmsgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9DQU5fQ2ZnQmF1ZHJhdGVSZWcoIEFUOTFQU19DQU4gcENBTiwgLyogcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBiYXVkcmF0ZV9jZmcgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9DZmdCYXVkcmF0ZVJlZw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIHRoZSBCYXVkcmF0ZSBvZiB0aGUgQ0FOIGNvbnRyb2xsZXIgZm9yIHRoZSBuZXR3b3JrDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQ0FOX0NmZ0JhdWRyYXRlUmVnICgNCisJQVQ5MVBTX0NBTiBwQ0FOLCAvLyBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGJhdWRyYXRlX2NmZykNCiB7DQotICAgIC8qKiBXcml0ZSB0byB0aGUgQlIgcmVnaXN0ZXIgKi8NCi0gICAgcENBTi0+Q0FOX0JSID0gYmF1ZHJhdGVfY2ZnOw0KKwkvLyogV3JpdGUgdG8gdGhlIEJSIHJlZ2lzdGVyDQorCXBDQU4tPkNBTl9CUiA9IGJhdWRyYXRlX2NmZzsJDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0NBTl9HZXRCYXVkcmF0ZSAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIHRoZSBCYXVkcmF0ZSBvZiB0aGUgQ0FOIGNvbnRyb2xsZXIgZm9yIHRoZSBuZXR3b3JrIHZhbHVlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fR2V0QmF1ZHJhdGUoIEFUOTFQU19DQU4gcENBTiAvKiBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0dldEJhdWRyYXRlDQorLy8qIFxicmllZiBSZXR1cm4gdGhlIEJhdWRyYXRlIG9mIHRoZSBDQU4gY29udHJvbGxlciBmb3IgdGhlIG5ldHdvcmsgdmFsdWUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NBTl9HZXRCYXVkcmF0ZSAoDQorCUFUOTFQU19DQU4gcENBTiAvLyBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXINCisJKQ0KIHsNCi0gICAgcmV0dXJuIHBDQU4tPkNBTl9CUjsNCisJcmV0dXJuIHBDQU4tPkNBTl9CUjsJDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0NBTl9HZXRJbnRlcm5hbENvdW50ZXIgKi8NCi0vKiogXGJyaWVmIFJldHVybiBDQU4gVGltZXIgUmVnc2l0ZXIgVmFsdWUgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NBTl9HZXRJbnRlcm5hbENvdW50ZXIoIEFUOTFQU19DQU4gcENBTiAvKiBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9HZXRJbnRlcm5hbENvdW50ZXINCisvLyogXGJyaWVmIFJldHVybiBDQU4gVGltZXIgUmVnc2l0ZXIgVmFsdWUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NBTl9HZXRJbnRlcm5hbENvdW50ZXIgKA0KKwlBVDkxUFNfQ0FOIHBDQU4gLy8gcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyDQorCSkNCiB7DQotICAgIHJldHVybiBwQ0FOLT5DQU5fVElNOw0KKwlyZXR1cm4gcENBTi0+Q0FOX1RJTTsJDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0NBTl9HZXRUaW1lc3RhbXAgKi8NCi0vKiogXGJyaWVmIFJldHVybiBDQU4gVGltZXN0YW1wIFJlZ2lzdGVyIFZhbHVlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fR2V0VGltZXN0YW1wKCBBVDkxUFNfQ0FOIHBDQU4gLyogcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fR2V0VGltZXN0YW1wDQorLy8qIFxicmllZiBSZXR1cm4gQ0FOIFRpbWVzdGFtcCBSZWdpc3RlciBWYWx1ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0FOX0dldFRpbWVzdGFtcCAoDQorCUFUOTFQU19DQU4gcENBTiAvLyBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXINCisJKQ0KIHsNCi0gICAgcmV0dXJuIHBDQU4tPkNBTl9USU1FU1RQOw0KKwlyZXR1cm4gcENBTi0+Q0FOX1RJTUVTVFA7CQ0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9DQU5fR2V0RXJyb3JDb3VudGVyICovDQotLyoqIFxicmllZiBSZXR1cm4gQ0FOIEVycm9yIENvdW50ZXIgUmVnaXN0ZXIgVmFsdWUgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NBTl9HZXRFcnJvckNvdW50ZXIoIEFUOTFQU19DQU4gcENBTiAvKiBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9HZXRFcnJvckNvdW50ZXINCisvLyogXGJyaWVmIFJldHVybiBDQU4gRXJyb3IgQ291bnRlciBSZWdpc3RlciBWYWx1ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0FOX0dldEVycm9yQ291bnRlciAoDQorCUFUOTFQU19DQU4gcENBTiAvLyBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXINCisJKQ0KIHsNCi0gICAgcmV0dXJuIHBDQU4tPkNBTl9FQ1I7DQorCXJldHVybiBwQ0FOLT5DQU5fRUNSOwkNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQ0FOX0luaXRUcmFuc2ZlclJlcXVlc3QgKi8NCi0vKiogXGJyaWVmIFJlcXVlc3QgZm9yIGEgdHJhbnNmZXIgb24gdGhlIGNvcnJlc3BvbmRpbmcgbWFpbGJveGVzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQ0FOX0luaXRUcmFuc2ZlclJlcXVlc3QoIEFUOTFQU19DQU4gcENBTiwgLyogcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHRyYW5zZmVyX2NtZCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0luaXRUcmFuc2ZlclJlcXVlc3QNCisvLyogXGJyaWVmIFJlcXVlc3QgZm9yIGEgdHJhbnNmZXIgb24gdGhlIGNvcnJlc3BvbmRpbmcgbWFpbGJveGVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQ0FOX0luaXRUcmFuc2ZlclJlcXVlc3QgKA0KKwlBVDkxUFNfQ0FOIHBDQU4sIC8vIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlcg0KKyAgICB1bnNpZ25lZCBpbnQgdHJhbnNmZXJfY21kKQ0KIHsNCi0gICAgcENBTi0+Q0FOX1RDUiA9IHRyYW5zZmVyX2NtZDsNCisJcENBTi0+Q0FOX1RDUiA9IHRyYW5zZmVyX2NtZDsJDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0NBTl9Jbml0QWJvcnRSZXF1ZXN0ICovDQotLyoqIFxicmllZiBBYm9ydCB0aGUgY29ycmVzcG9uZGluZyBtYWlsYm94ZXMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9DQU5fSW5pdEFib3J0UmVxdWVzdCggQVQ5MVBTX0NBTiBwQ0FOLCAvKiBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYWJvcnRfY21kICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fSW5pdEFib3J0UmVxdWVzdA0KKy8vKiBcYnJpZWYgQWJvcnQgdGhlIGNvcnJlc3BvbmRpbmcgbWFpbGJveGVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQ0FOX0luaXRBYm9ydFJlcXVlc3QgKA0KKwlBVDkxUFNfQ0FOIHBDQU4sIC8vIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlcg0KKyAgICB1bnNpZ25lZCBpbnQgYWJvcnRfY21kKQ0KIHsNCi0gICAgcENBTi0+Q0FOX0FDUiA9IGFib3J0X2NtZDsNCisJcENBTi0+Q0FOX0FDUiA9IGFib3J0X2NtZDsJDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0NBTl9DZmdNZXNzYWdlTW9kZVJlZyAqLw0KLS8qKiBcYnJpZWYgUHJvZ3JhbSB0aGUgTWVzc2FnZSBNb2RlIFJlZ2lzdGVyICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQ0FOX0NmZ01lc3NhZ2VNb2RlUmVnKCBBVDkxUFNfQ0FOX01CIENBTl9NYWlsYm94LCAvKiBwb2ludGVyIHRvIGEgQ0FOIE1haWxib3ggKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1vZGUgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9DZmdNZXNzYWdlTW9kZVJlZw0KKy8vKiBcYnJpZWYgUHJvZ3JhbSB0aGUgTWVzc2FnZSBNb2RlIFJlZ2lzdGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQ0FOX0NmZ01lc3NhZ2VNb2RlUmVnICgNCisJQVQ5MVBTX0NBTl9NQglDQU5fTWFpbGJveCwgLy8gcG9pbnRlciB0byBhIENBTiBNYWlsYm94DQorICAgIHVuc2lnbmVkIGludCBtb2RlKQ0KIHsNCi0gICAgQ0FOX01haWxib3gtPkNBTl9NQl9NTVIgPSBtb2RlOw0KKwlDQU5fTWFpbGJveC0+Q0FOX01CX01NUiA9IG1vZGU7CQ0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9DQU5fR2V0TWVzc2FnZU1vZGVSZWcgKi8NCi0vKiogXGJyaWVmIFJldHVybiB0aGUgTWVzc2FnZSBNb2RlIFJlZ2lzdGVyICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fR2V0TWVzc2FnZU1vZGVSZWcoIEFUOTFQU19DQU5fTUIgQ0FOX01haWxib3ggKSAvKiBwb2ludGVyIHRvIGEgQ0FOIE1haWxib3ggKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fR2V0TWVzc2FnZU1vZGVSZWcNCisvLyogXGJyaWVmIFJldHVybiB0aGUgTWVzc2FnZSBNb2RlIFJlZ2lzdGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fR2V0TWVzc2FnZU1vZGVSZWcgKA0KKwlBVDkxUFNfQ0FOX01CCUNBTl9NYWlsYm94KSAvLyBwb2ludGVyIHRvIGEgQ0FOIE1haWxib3gNCiB7DQotICAgIHJldHVybiBDQU5fTWFpbGJveC0+Q0FOX01CX01NUjsNCisJcmV0dXJuIENBTl9NYWlsYm94LT5DQU5fTUJfTU1SOwkNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQ0FOX0NmZ01lc3NhZ2VJRFJlZyAqLw0KLS8qKiBcYnJpZWYgUHJvZ3JhbSB0aGUgTWVzc2FnZSBJRCBSZWdpc3RlciAqLw0KLS8qKiBcYnJpZWYgVmVyc2lvbiA9PSAwIGZvciBTdGFuZGFyZCBtZXNzc2FnZSwgVmVyc2lvbiA9PSAxIGZvciBFeHRlbmRlZCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0NBTl9DZmdNZXNzYWdlSURSZWcoIEFUOTFQU19DQU5fTUIgQ0FOX01haWxib3gsIC8qIHBvaW50ZXIgdG8gYSBDQU4gTWFpbGJveCAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGlkLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciB2ZXJzaW9uICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fQ2ZnTWVzc2FnZUlEUmVnDQorLy8qIFxicmllZiBQcm9ncmFtIHRoZSBNZXNzYWdlIElEIFJlZ2lzdGVyDQorLy8qIFxicmllZiBWZXJzaW9uID09IDAgZm9yIFN0YW5kYXJkIG1lc3NzYWdlLCBWZXJzaW9uID09IDEgZm9yIEV4dGVuZGVkICANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9DQU5fQ2ZnTWVzc2FnZUlEUmVnICgNCisJQVQ5MVBTX0NBTl9NQglDQU5fTWFpbGJveCwgLy8gcG9pbnRlciB0byBhIENBTiBNYWlsYm94DQorICAgIHVuc2lnbmVkIGludCBpZCwNCisgICAgdW5zaWduZWQgY2hhciB2ZXJzaW9uKQ0KIHsNCi0gICAgaWYoIHZlcnNpb24gPT0gMCApIC8qIElEdkEgU3RhbmRhcmQgRm9ybWF0ICovDQotICAgIHsNCi0gICAgICAgIENBTl9NYWlsYm94LT5DQU5fTUJfTUlEID0gaWQgPDwgMTg7DQotICAgIH0NCi0gICAgZWxzZSAvKiBJRHZCIEV4dGVuZGVkIEZvcm1hdCAqLw0KLSAgICB7DQotICAgICAgICBDQU5fTWFpbGJveC0+Q0FOX01CX01JRCA9IGlkIHwgKCAxIDw8IDI5ICk7IC8qIHNldCBNSURFIGJpdCAqLw0KLSAgICB9DQorCWlmKHZlcnNpb249PTApCS8vIElEdkEgU3RhbmRhcmQgRm9ybWF0DQorCQlDQU5fTWFpbGJveC0+Q0FOX01CX01JRCA9IGlkPDwxODsNCisJZWxzZQkvLyBJRHZCIEV4dGVuZGVkIEZvcm1hdA0KKwkJQ0FOX01haWxib3gtPkNBTl9NQl9NSUQgPSBpZCB8ICgxPDwyOSk7CS8vIHNldCBNSURFIGJpdA0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9DQU5fR2V0TWVzc2FnZUlEUmVnICovDQotLyoqIFxicmllZiBSZXR1cm4gdGhlIE1lc3NhZ2UgSUQgUmVnaXN0ZXIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NBTl9HZXRNZXNzYWdlSURSZWcoIEFUOTFQU19DQU5fTUIgQ0FOX01haWxib3ggKSAvKiBwb2ludGVyIHRvIGEgQ0FOIE1haWxib3ggKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fR2V0TWVzc2FnZUlEUmVnDQorLy8qIFxicmllZiBSZXR1cm4gdGhlIE1lc3NhZ2UgSUQgUmVnaXN0ZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NBTl9HZXRNZXNzYWdlSURSZWcgKA0KKwlBVDkxUFNfQ0FOX01CCUNBTl9NYWlsYm94KSAvLyBwb2ludGVyIHRvIGEgQ0FOIE1haWxib3gNCiB7DQotICAgIHJldHVybiBDQU5fTWFpbGJveC0+Q0FOX01CX01JRDsNCisJcmV0dXJuIENBTl9NYWlsYm94LT5DQU5fTUJfTUlEOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9DQU5fQ2ZnTWVzc2FnZUFjY2VwdGFuY2VNYXNrUmVnICovDQotLyoqIFxicmllZiBQcm9ncmFtIHRoZSBNZXNzYWdlIEFjY2VwdGFuY2UgTWFzayBSZWdpc3RlciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0NBTl9DZmdNZXNzYWdlQWNjZXB0YW5jZU1hc2tSZWcoIEFUOTFQU19DQU5fTUIgQ0FOX01haWxib3gsIC8qIHBvaW50ZXIgdG8gYSBDQU4gTWFpbGJveCAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1hc2sgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9DZmdNZXNzYWdlQWNjZXB0YW5jZU1hc2tSZWcNCisvLyogXGJyaWVmIFByb2dyYW0gdGhlIE1lc3NhZ2UgQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQ0FOX0NmZ01lc3NhZ2VBY2NlcHRhbmNlTWFza1JlZyAoDQorCUFUOTFQU19DQU5fTUIJQ0FOX01haWxib3gsIC8vIHBvaW50ZXIgdG8gYSBDQU4gTWFpbGJveA0KKyAgICB1bnNpZ25lZCBpbnQgbWFzaykNCiB7DQotICAgIENBTl9NYWlsYm94LT5DQU5fTUJfTUFNID0gbWFzazsNCisJQ0FOX01haWxib3gtPkNBTl9NQl9NQU0gPSBtYXNrOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9DQU5fR2V0TWVzc2FnZUFjY2VwdGFuY2VNYXNrUmVnICovDQotLyoqIFxicmllZiBSZXR1cm4gdGhlIE1lc3NhZ2UgQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fR2V0TWVzc2FnZUFjY2VwdGFuY2VNYXNrUmVnKCBBVDkxUFNfQ0FOX01CIENBTl9NYWlsYm94ICkgLyogcG9pbnRlciB0byBhIENBTiBNYWlsYm94ICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0dldE1lc3NhZ2VBY2NlcHRhbmNlTWFza1JlZw0KKy8vKiBcYnJpZWYgUmV0dXJuIHRoZSBNZXNzYWdlIEFjY2VwdGFuY2UgTWFzayBSZWdpc3Rlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0FOX0dldE1lc3NhZ2VBY2NlcHRhbmNlTWFza1JlZyAoDQorCUFUOTFQU19DQU5fTUIJQ0FOX01haWxib3gpIC8vIHBvaW50ZXIgdG8gYSBDQU4gTWFpbGJveA0KIHsNCi0gICAgcmV0dXJuIENBTl9NYWlsYm94LT5DQU5fTUJfTUFNOw0KKwlyZXR1cm4gQ0FOX01haWxib3gtPkNBTl9NQl9NQU07DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0NBTl9HZXRGYW1pbHlJRCAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIHRoZSBNZXNzYWdlIElEIFJlZ2lzdGVyICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fR2V0RmFtaWx5SUQoIEFUOTFQU19DQU5fTUIgQ0FOX01haWxib3ggKSAvKiBwb2ludGVyIHRvIGEgQ0FOIE1haWxib3ggKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fR2V0RmFtaWx5SUQNCisvLyogXGJyaWVmIFJldHVybiB0aGUgTWVzc2FnZSBJRCBSZWdpc3Rlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0FOX0dldEZhbWlseUlEICgNCisJQVQ5MVBTX0NBTl9NQglDQU5fTWFpbGJveCkgLy8gcG9pbnRlciB0byBhIENBTiBNYWlsYm94DQogew0KLSAgICByZXR1cm4gQ0FOX01haWxib3gtPkNBTl9NQl9NRklEOw0KKwlyZXR1cm4gQ0FOX01haWxib3gtPkNBTl9NQl9NRklEOwkNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQ0FOX0NmZ01lc3NhZ2VDdHJsICovDQotLyoqIFxicmllZiBSZXF1ZXN0IGFuZCBjb25maWcgZm9yIGEgdHJhbnNmZXIgb24gdGhlIGNvcnJlc3BvbmRpbmcgbWFpbGJveCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0NBTl9DZmdNZXNzYWdlQ3RybFJlZyggQVQ5MVBTX0NBTl9NQiBDQU5fTWFpbGJveCwgLyogcG9pbnRlciB0byBhIENBTiBNYWlsYm94ICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtZXNzYWdlX2N0cmxfY21kICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fQ2ZnTWVzc2FnZUN0cmwNCisvLyogXGJyaWVmIFJlcXVlc3QgYW5kIGNvbmZpZyBmb3IgYSB0cmFuc2ZlciBvbiB0aGUgY29ycmVzcG9uZGluZyBtYWlsYm94DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQ0FOX0NmZ01lc3NhZ2VDdHJsUmVnICgNCisJQVQ5MVBTX0NBTl9NQglDQU5fTWFpbGJveCwgLy8gcG9pbnRlciB0byBhIENBTiBNYWlsYm94DQorICAgIHVuc2lnbmVkIGludCBtZXNzYWdlX2N0cmxfY21kKQ0KIHsNCi0gICAgQ0FOX01haWxib3gtPkNBTl9NQl9NQ1IgPSBtZXNzYWdlX2N0cmxfY21kOw0KKwlDQU5fTWFpbGJveC0+Q0FOX01CX01DUiA9IG1lc3NhZ2VfY3RybF9jbWQ7CQ0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9DQU5fR2V0TWVzc2FnZVN0YXR1cyAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIENBTiBNYWlsYm94IFN0YXR1cyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0FOX0dldE1lc3NhZ2VTdGF0dXMoIEFUOTFQU19DQU5fTUIgQ0FOX01haWxib3ggKSAvKiBwb2ludGVyIHRvIGEgQ0FOIE1haWxib3ggKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fR2V0TWVzc2FnZVN0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIENBTiBNYWlsYm94IFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0FOX0dldE1lc3NhZ2VTdGF0dXMgKA0KKwlBVDkxUFNfQ0FOX01CCUNBTl9NYWlsYm94KSAvLyBwb2ludGVyIHRvIGEgQ0FOIE1haWxib3gNCiB7DQotICAgIHJldHVybiBDQU5fTWFpbGJveC0+Q0FOX01CX01TUjsNCisJcmV0dXJuIENBTl9NYWlsYm94LT5DQU5fTUJfTVNSOwkNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQ0FOX0NmZ01lc3NhZ2VEYXRhTG93ICovDQotLyoqIFxicmllZiBQcm9ncmFtIGRhdGEgbG93IHZhbHVlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQ0FOX0NmZ01lc3NhZ2VEYXRhTG93KCBBVDkxUFNfQ0FOX01CIENBTl9NYWlsYm94LCAvKiBwb2ludGVyIHRvIGEgQ0FOIE1haWxib3ggKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGRhdGEgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9DZmdNZXNzYWdlRGF0YUxvdw0KKy8vKiBcYnJpZWYgUHJvZ3JhbSBkYXRhIGxvdyB2YWx1ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0NBTl9DZmdNZXNzYWdlRGF0YUxvdyAoDQorCUFUOTFQU19DQU5fTUIJQ0FOX01haWxib3gsIC8vIHBvaW50ZXIgdG8gYSBDQU4gTWFpbGJveA0KKyAgICB1bnNpZ25lZCBpbnQgZGF0YSkNCiB7DQotICAgIENBTl9NYWlsYm94LT5DQU5fTUJfTURMID0gZGF0YTsNCisJQ0FOX01haWxib3gtPkNBTl9NQl9NREwgPSBkYXRhOwkNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQ0FOX0dldE1lc3NhZ2VEYXRhTG93ICovDQotLyoqIFxicmllZiBSZXR1cm4gZGF0YSBsb3cgdmFsdWUgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NBTl9HZXRNZXNzYWdlRGF0YUxvdyggQVQ5MVBTX0NBTl9NQiBDQU5fTWFpbGJveCApIC8qIHBvaW50ZXIgdG8gYSBDQU4gTWFpbGJveCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9HZXRNZXNzYWdlRGF0YUxvdw0KKy8vKiBcYnJpZWYgUmV0dXJuIGRhdGEgbG93IHZhbHVlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fR2V0TWVzc2FnZURhdGFMb3cgKA0KKwlBVDkxUFNfQ0FOX01CCUNBTl9NYWlsYm94KSAvLyBwb2ludGVyIHRvIGEgQ0FOIE1haWxib3gNCiB7DQotICAgIHJldHVybiBDQU5fTWFpbGJveC0+Q0FOX01CX01ETDsNCisJcmV0dXJuIENBTl9NYWlsYm94LT5DQU5fTUJfTURMOwkNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQ0FOX0NmZ01lc3NhZ2VEYXRhSGlnaCAqLw0KLS8qKiBcYnJpZWYgUHJvZ3JhbSBkYXRhIGhpZ2ggdmFsdWUgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9DQU5fQ2ZnTWVzc2FnZURhdGFIaWdoKCBBVDkxUFNfQ0FOX01CIENBTl9NYWlsYm94LCAvKiBwb2ludGVyIHRvIGEgQ0FOIE1haWxib3ggKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBkYXRhICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fQ2ZnTWVzc2FnZURhdGFIaWdoDQorLy8qIFxicmllZiBQcm9ncmFtIGRhdGEgaGlnaCB2YWx1ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0NBTl9DZmdNZXNzYWdlRGF0YUhpZ2ggKA0KKwlBVDkxUFNfQ0FOX01CCUNBTl9NYWlsYm94LCAvLyBwb2ludGVyIHRvIGEgQ0FOIE1haWxib3gNCisgICAgdW5zaWduZWQgaW50IGRhdGEpDQogew0KLSAgICBDQU5fTWFpbGJveC0+Q0FOX01CX01ESCA9IGRhdGE7DQorCUNBTl9NYWlsYm94LT5DQU5fTUJfTURIID0gZGF0YTsJDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0NBTl9HZXRNZXNzYWdlRGF0YUhpZ2ggKi8NCi0vKiogXGJyaWVmIFJldHVybiBkYXRhIGhpZ2ggdmFsdWUgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NBTl9HZXRNZXNzYWdlRGF0YUhpZ2goIEFUOTFQU19DQU5fTUIgQ0FOX01haWxib3ggKSAvKiBwb2ludGVyIHRvIGEgQ0FOIE1haWxib3ggKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fR2V0TWVzc2FnZURhdGFIaWdoDQorLy8qIFxicmllZiBSZXR1cm4gZGF0YSBoaWdoIHZhbHVlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fR2V0TWVzc2FnZURhdGFIaWdoICgNCisJQVQ5MVBTX0NBTl9NQglDQU5fTWFpbGJveCkgLy8gcG9pbnRlciB0byBhIENBTiBNYWlsYm94DQogew0KLSAgICByZXR1cm4gQ0FOX01haWxib3gtPkNBTl9NQl9NREg7DQorCXJldHVybiBDQU5fTWFpbGJveC0+Q0FOX01CX01ESDsJDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0NBTl9PcGVuICovDQotLyoqIFxicmllZiBPcGVuIGEgQ0FOIFBvcnQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NBTl9PcGVuKCBjb25zdCB1bnNpZ25lZCBpbnQgbnVsbCApIC8qIFxhcmcgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fT3Blbg0KKy8vKiBcYnJpZWYgT3BlbiBhIENBTiBQb3J0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fT3BlbiAoDQorICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbnVsbCkgIC8vIFxhcmcNCiB7DQotICAgIC8qIE5PVCBERUZJTkVEIEFUIFRISVMgTU9NRU5UICovDQotICAgIHJldHVybiggMCApOw0KKyAgICAgICAgLyogTk9UIERFRklORUQgQVQgVEhJUyBNT01FTlQgKi8NCisgICAgICAgIHJldHVybiAoIDAgKTsNCit9DQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBBREMNCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FEQ19FbmFibGVJdA0KKy8vKiBcYnJpZWYgRW5hYmxlIEFEQyBpbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BRENfRW5hYmxlSXQgKA0KKwlBVDkxUFNfQURDIHBBREMsICAgICAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpICAgLy8gSVQgdG8gYmUgZW5hYmxlZA0KK3sNCisJLy8qIFdyaXRlIHRvIHRoZSBJRVIgcmVnaXN0ZXINCisJcEFEQy0+QURDX0lFUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FEQ19EaXNhYmxlSXQNCisvLyogXGJyaWVmIERpc2FibGUgQURDIGludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FEQ19EaXNhYmxlSXQgKA0KKwlBVDkxUFNfQURDIHBBREMsIC8vIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgLy8gSVQgdG8gYmUgZGlzYWJsZWQNCit7DQorCS8vKiBXcml0ZSB0byB0aGUgSURSIHJlZ2lzdGVyDQorCXBBREMtPkFEQ19JRFIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfR2V0U3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gQURDIEludGVycnVwdCBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRTdGF0dXMoIC8vIFxyZXR1cm4gQURDIEludGVycnVwdCBTdGF0dXMNCisJQVQ5MVBTX0FEQyBwQURDKSAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCit7DQorCXJldHVybiBwQURDLT5BRENfU1I7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FEQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gQURDIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQURDX0dldEludGVycnVwdE1hc2tTdGF0dXMoIC8vIFxyZXR1cm4gQURDIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKwlBVDkxUFNfQURDIHBBREMpIC8vIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlcg0KK3sNCisJcmV0dXJuIHBBREMtPkFEQ19JTVI7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FEQ19Jc0ludGVycnVwdE1hc2tlZA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBBREMgSW50ZXJydXB0IGlzIE1hc2tlZCANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19Jc0ludGVycnVwdE1hc2tlZCgNCisgICAgICAgIEFUOTFQU19BREMgcEFEQywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisJcmV0dXJuIChBVDkxRl9BRENfR2V0SW50ZXJydXB0TWFza1N0YXR1cyhwQURDKSAmIGZsYWcpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfSXNTdGF0dXNTZXQNCisvLyogXGJyaWVmIFRlc3QgaWYgQURDIFN0YXR1cyBpcyBTZXQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19Jc1N0YXR1c1NldCgNCisgICAgICAgIEFUOTFQU19BREMgcEFEQywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisJcmV0dXJuIChBVDkxRl9BRENfR2V0U3RhdHVzKHBBREMpICYgZmxhZyk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FEQ19DZmdNb2RlUmVnDQorLy8qIFxicmllZiBDb25maWd1cmUgdGhlIE1vZGUgUmVnaXN0ZXIgb2YgdGhlIEFEQyBjb250cm9sbGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQURDX0NmZ01vZGVSZWcgKA0KKwlBVDkxUFNfQURDIHBBREMsIC8vIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgbW9kZSkgICAgICAgIC8vIG1vZGUgcmVnaXN0ZXIgDQorew0KKwkvLyogV3JpdGUgdG8gdGhlIE1SIHJlZ2lzdGVyDQorCXBBREMtPkFEQ19NUiA9IG1vZGU7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FEQ19HZXRNb2RlUmVnDQorLy8qIFxicmllZiBSZXR1cm4gdGhlIE1vZGUgUmVnaXN0ZXIgb2YgdGhlIEFEQyBjb250cm9sbGVyIHZhbHVlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0TW9kZVJlZyAoDQorCUFUOTFQU19BREMgcEFEQyAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcmV0dXJuIHBBREMtPkFEQ19NUjsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FEQ19DZmdUaW1pbmdzDQorLy8qIFxicmllZiBDb25maWd1cmUgdGhlIGRpZmZlcmVudCBuZWNlc3NhcnkgdGltaW5ncyBvZiB0aGUgQURDIGNvbnRyb2xsZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BRENfQ2ZnVGltaW5ncyAoDQorCUFUOTFQU19BREMgcEFEQywgLy8gcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBtY2tfY2xvY2ssIC8vIGluIE1IeiANCisJdW5zaWduZWQgaW50IGFkY19jbG9jaywgLy8gaW4gTUh6IA0KKwl1bnNpZ25lZCBpbnQgc3RhcnR1cF90aW1lLCAvLyBpbiB1cyANCisJdW5zaWduZWQgaW50IHNhbXBsZV9hbmRfaG9sZF90aW1lKQkvLyBpbiBucyAgDQorew0KKwl1bnNpZ25lZCBpbnQgcHJlc2NhbCxzdGFydHVwLHNodGltOw0KKwkNCisJcHJlc2NhbCA9IG1ja19jbG9jay8oMiphZGNfY2xvY2spIC0gMTsNCisJc3RhcnR1cCA9IGFkY19jbG9jaypzdGFydHVwX3RpbWUvOCAtIDE7DQorCXNodGltID0gYWRjX2Nsb2NrKnNhbXBsZV9hbmRfaG9sZF90aW1lLzEwMDAgLSAxOw0KKwkNCisJLy8qIFdyaXRlIHRvIHRoZSBNUiByZWdpc3Rlcg0KKwlwQURDLT5BRENfTVIgPSAoIChwcmVzY2FsPDw4KSAmIEFUOTFDX0FEQ19QUkVTQ0FMKSB8ICggKHN0YXJ0dXA8PDE2KSAmIEFUOTFDX0FEQ19TVEFSVFVQKSB8ICggKHNodGltPDwyNCkgJiBBVDkxQ19BRENfU0hUSU0pOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfRW5hYmxlQ2hhbm5lbA0KKy8vKiBcYnJpZWYgUmV0dXJuIEFEQyBUaW1lciBSZWdpc3RlciBWYWx1ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FEQ19FbmFibGVDaGFubmVsICgNCisJQVQ5MVBTX0FEQyBwQURDLCAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGNoYW5uZWwpICAgICAgICAvLyBtb2RlIHJlZ2lzdGVyIA0KK3sNCisJLy8qIFdyaXRlIHRvIHRoZSBDSEVSIHJlZ2lzdGVyDQorCXBBREMtPkFEQ19DSEVSID0gY2hhbm5lbDsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0Rpc2FibGVDaGFubmVsDQorLy8qIFxicmllZiBSZXR1cm4gQURDIFRpbWVyIFJlZ2lzdGVyIFZhbHVlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQURDX0Rpc2FibGVDaGFubmVsICgNCisJQVQ5MVBTX0FEQyBwQURDLCAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGNoYW5uZWwpICAgICAgICAvLyBtb2RlIHJlZ2lzdGVyIA0KK3sNCisJLy8qIFdyaXRlIHRvIHRoZSBDSERSIHJlZ2lzdGVyDQorCXBBREMtPkFEQ19DSERSID0gY2hhbm5lbDsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0dldENoYW5uZWxTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBBREMgVGltZXIgUmVnaXN0ZXIgVmFsdWUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRDaGFubmVsU3RhdHVzICgNCisJQVQ5MVBTX0FEQyBwQURDIC8vIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlcg0KKwkpDQorew0KKwlyZXR1cm4gcEFEQy0+QURDX0NIU1I7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfU3RhcnRDb252ZXJzaW9uDQorLy8qIFxicmllZiBTb2Z0d2FyZSByZXF1ZXN0IGZvciBhIGFuYWxvZyB0byBkaWdpdGFsIGNvbnZlcnNpb24gDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQURDX1N0YXJ0Q29udmVyc2lvbiAoDQorCUFUOTFQU19BREMgcEFEQyAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcEFEQy0+QURDX0NSID0gQVQ5MUNfQURDX1NUQVJUOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX1NvZnRSZXNldA0KKy8vKiBcYnJpZWYgU29mdHdhcmUgcmVzZXQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BRENfU29mdFJlc2V0ICgNCisJQVQ5MVBTX0FEQyBwQURDIC8vIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlcg0KKwkpDQorew0KKwlwQURDLT5BRENfQ1IgPSBBVDkxQ19BRENfU1dSU1Q7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfR2V0TGFzdENvbnZlcnRlZERhdGENCisvLyogXGJyaWVmIFJldHVybiB0aGUgTGFzdCBDb252ZXJ0ZWQgRGF0YQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQURDX0dldExhc3RDb252ZXJ0ZWREYXRhICgNCisJQVQ5MVBTX0FEQyBwQURDIC8vIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlcg0KKwkpDQorew0KKwlyZXR1cm4gcEFEQy0+QURDX0xDRFI7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNIMA0KKy8vKiBcYnJpZWYgUmV0dXJuIHRoZSBDaGFubmVsIDAgQ29udmVydGVkIERhdGENCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0gwICgNCisJQVQ5MVBTX0FEQyBwQURDIC8vIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlcg0KKwkpDQorew0KKwlyZXR1cm4gcEFEQy0+QURDX0NEUjA7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNIMQ0KKy8vKiBcYnJpZWYgUmV0dXJuIHRoZSBDaGFubmVsIDEgQ29udmVydGVkIERhdGENCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0gxICgNCisJQVQ5MVBTX0FEQyBwQURDIC8vIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlcg0KKwkpDQorew0KKwlyZXR1cm4gcEFEQy0+QURDX0NEUjE7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNIMg0KKy8vKiBcYnJpZWYgUmV0dXJuIHRoZSBDaGFubmVsIDIgQ29udmVydGVkIERhdGENCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0gyICgNCisJQVQ5MVBTX0FEQyBwQURDIC8vIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlcg0KKwkpDQorew0KKwlyZXR1cm4gcEFEQy0+QURDX0NEUjI7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNIMw0KKy8vKiBcYnJpZWYgUmV0dXJuIHRoZSBDaGFubmVsIDMgQ29udmVydGVkIERhdGENCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0gzICgNCisJQVQ5MVBTX0FEQyBwQURDIC8vIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlcg0KKwkpDQorew0KKwlyZXR1cm4gcEFEQy0+QURDX0NEUjM7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNINA0KKy8vKiBcYnJpZWYgUmV0dXJuIHRoZSBDaGFubmVsIDQgQ29udmVydGVkIERhdGENCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0g0ICgNCisJQVQ5MVBTX0FEQyBwQURDIC8vIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlcg0KKwkpDQorew0KKwlyZXR1cm4gcEFEQy0+QURDX0NEUjQ7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNINQ0KKy8vKiBcYnJpZWYgUmV0dXJuIHRoZSBDaGFubmVsIDUgQ29udmVydGVkIERhdGENCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0g1ICgNCisJQVQ5MVBTX0FEQyBwQURDIC8vIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlcg0KKwkpDQorew0KKwlyZXR1cm4gcEFEQy0+QURDX0NEUjU7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNINg0KKy8vKiBcYnJpZWYgUmV0dXJuIHRoZSBDaGFubmVsIDYgQ29udmVydGVkIERhdGENCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0g2ICgNCisJQVQ5MVBTX0FEQyBwQURDIC8vIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlcg0KKwkpDQorew0KKwlyZXR1cm4gcEFEQy0+QURDX0NEUjY7CQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNINw0KKy8vKiBcYnJpZWYgUmV0dXJuIHRoZSBDaGFubmVsIDcgQ29udmVydGVkIERhdGENCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0g3ICgNCisJQVQ5MVBTX0FEQyBwQURDIC8vIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlcg0KKwkpDQorew0KKwlyZXR1cm4gcEFEQy0+QURDX0NEUjc7CQ0KIH0NCiANCiAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSogICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIEFEQw0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQURDX0VuYWJsZUl0ICovDQotLyoqIFxicmllZiBFbmFibGUgQURDIGludGVycnVwdCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0FEQ19FbmFibGVJdCggQVQ5MVBTX0FEQyBwQURDLCAgICAvKiBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBJVCB0byBiZSBlbmFibGVkICovDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgQUVTDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRVNfRW5hYmxlSXQNCisvLyogXGJyaWVmIEVuYWJsZSBBRVMgaW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQUVTX0VuYWJsZUl0ICgNCisJQVQ5MVBTX0FFUyBwQUVTLCAgICAgLy8gcG9pbnRlciB0byBhIEFFUyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAgIC8vIElUIHRvIGJlIGVuYWJsZWQNCiB7DQotICAgIC8qKiBXcml0ZSB0byB0aGUgSUVSIHJlZ2lzdGVyICovDQotICAgIHBBREMtPkFEQ19JRVIgPSBmbGFnOw0KKwkvLyogV3JpdGUgdG8gdGhlIElFUiByZWdpc3Rlcg0KKwlwQUVTLT5BRVNfSUVSID0gZmxhZzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQURDX0Rpc2FibGVJdCAqLw0KLS8qKiBcYnJpZWYgRGlzYWJsZSBBREMgaW50ZXJydXB0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQURDX0Rpc2FibGVJdCggQVQ5MVBTX0FEQyBwQURDLCAgICAvKiBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogSVQgdG8gYmUgZGlzYWJsZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRVNfRGlzYWJsZUl0DQorLy8qIFxicmllZiBEaXNhYmxlIEFFUyBpbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BRVNfRGlzYWJsZUl0ICgNCisJQVQ5MVBTX0FFUyBwQUVTLCAvLyBwb2ludGVyIHRvIGEgQUVTIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpIC8vIElUIHRvIGJlIGRpc2FibGVkDQogew0KLSAgICAvKiogV3JpdGUgdG8gdGhlIElEUiByZWdpc3RlciAqLw0KLSAgICBwQURDLT5BRENfSURSID0gZmxhZzsNCisJLy8qIFdyaXRlIHRvIHRoZSBJRFIgcmVnaXN0ZXINCisJcEFFUy0+QUVTX0lEUiA9IGZsYWc7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FEQ19HZXRTdGF0dXMgKi8NCi0vKiogXGJyaWVmIFJldHVybiBBREMgSW50ZXJydXB0IFN0YXR1cyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQURDX0dldFN0YXR1cyggLyogXHJldHVybiBBREMgSW50ZXJydXB0IFN0YXR1cyAqLw0KLSAgICBBVDkxUFNfQURDIHBBREMgKSAgICAgICAgICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRVNfR2V0U3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gQUVTIEludGVycnVwdCBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FFU19HZXRTdGF0dXMoIC8vIFxyZXR1cm4gQUVTIEludGVycnVwdCBTdGF0dXMNCisJQVQ5MVBTX0FFUyBwQUVTKSAvLyBwb2ludGVyIHRvIGEgQUVTIGNvbnRyb2xsZXINCiB7DQotICAgIHJldHVybiBwQURDLT5BRENfU1I7DQorCXJldHVybiBwQUVTLT5BRVNfSVNSOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BRENfR2V0SW50ZXJydXB0TWFza1N0YXR1cyAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIEFEQyBJbnRlcnJ1cHQgTWFzayBTdGF0dXMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCAvKiBccmV0dXJuIEFEQyBJbnRlcnJ1cHQgTWFzayBTdGF0dXMgKi8NCi0gICAgQVQ5MVBTX0FEQyBwQURDICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FFU19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gQUVTIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQUVTX0dldEludGVycnVwdE1hc2tTdGF0dXMoIC8vIFxyZXR1cm4gQUVTIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKwlBVDkxUFNfQUVTIHBBRVMpIC8vIHBvaW50ZXIgdG8gYSBBRVMgY29udHJvbGxlcg0KIHsNCi0gICAgcmV0dXJuIHBBREMtPkFEQ19JTVI7DQorCXJldHVybiBwQUVTLT5BRVNfSU1SOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BRENfSXNJbnRlcnJ1cHRNYXNrZWQgKi8NCi0vKiogXGJyaWVmIFRlc3QgaWYgQURDIEludGVycnVwdCBpcyBNYXNrZWQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19Jc0ludGVycnVwdE1hc2tlZCggQVQ5MVBTX0FEQyBwQURDLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUVTX0lzSW50ZXJydXB0TWFza2VkDQorLy8qIFxicmllZiBUZXN0IGlmIEFFUyBJbnRlcnJ1cHQgaXMgTWFza2VkIA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQUVTX0lzSW50ZXJydXB0TWFza2VkKA0KKyAgICAgICAgQVQ5MVBTX0FFUyBwQUVTLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBBRVMgY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQogew0KLSAgICByZXR1cm4oIEFUOTFGX0FEQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCBwQURDICkgJiBmbGFnICk7DQorCXJldHVybiAoQVQ5MUZfQUVTX0dldEludGVycnVwdE1hc2tTdGF0dXMocEFFUykgJiBmbGFnKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQURDX0lzU3RhdHVzU2V0ICovDQotLyoqIFxicmllZiBUZXN0IGlmIEFEQyBTdGF0dXMgaXMgU2V0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfSXNTdGF0dXNTZXQoIEFUOTFQU19BREMgcEFEQywgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FFU19Jc1N0YXR1c1NldA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBBRVMgU3RhdHVzIGlzIFNldA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQUVTX0lzU3RhdHVzU2V0KA0KKyAgICAgICAgQVQ5MVBTX0FFUyBwQUVTLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBBRVMgY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQogew0KLSAgICByZXR1cm4oIEFUOTFGX0FEQ19HZXRTdGF0dXMoIHBBREMgKSAmIGZsYWcgKTsNCisJcmV0dXJuIChBVDkxRl9BRVNfR2V0U3RhdHVzKHBBRVMpICYgZmxhZyk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FEQ19DZmdNb2RlUmVnICovDQotLyoqIFxicmllZiBDb25maWd1cmUgdGhlIE1vZGUgUmVnaXN0ZXIgb2YgdGhlIEFEQyBjb250cm9sbGVyICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQURDX0NmZ01vZGVSZWcoIEFUOTFQU19BREMgcEFEQywgICAgLyogcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1vZGUgKSAvKiBtb2RlIHJlZ2lzdGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUVTX0NmZ01vZGVSZWcNCisvLyogXGJyaWVmIENvbmZpZ3VyZSB0aGUgTW9kZSBSZWdpc3RlciBvZiB0aGUgQUVTIGNvbnRyb2xsZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BRVNfQ2ZnTW9kZVJlZyAoDQorCUFUOTFQU19BRVMgcEFFUywgLy8gcG9pbnRlciB0byBhIEFFUyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBtb2RlKSAgICAgICAgLy8gbW9kZSByZWdpc3RlciANCiB7DQotICAgIC8qKiBXcml0ZSB0byB0aGUgTVIgcmVnaXN0ZXIgKi8NCi0gICAgcEFEQy0+QURDX01SID0gbW9kZTsNCisJLy8qIFdyaXRlIHRvIHRoZSBNUiByZWdpc3Rlcg0KKwlwQUVTLT5BRVNfTVIgPSBtb2RlOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BRENfR2V0TW9kZVJlZyAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIHRoZSBNb2RlIFJlZ2lzdGVyIG9mIHRoZSBBREMgY29udHJvbGxlciB2YWx1ZSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQURDX0dldE1vZGVSZWcoIEFUOTFQU19BREMgcEFEQyAvKiBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRVNfR2V0TW9kZVJlZw0KKy8vKiBcYnJpZWYgUmV0dXJuIHRoZSBNb2RlIFJlZ2lzdGVyIG9mIHRoZSBBRVMgY29udHJvbGxlciB2YWx1ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQUVTX0dldE1vZGVSZWcgKA0KKwlBVDkxUFNfQUVTIHBBRVMgLy8gcG9pbnRlciB0byBhIEFFUyBjb250cm9sbGVyDQorCSkNCiB7DQotICAgIHJldHVybiBwQURDLT5BRENfTVI7DQorCXJldHVybiBwQUVTLT5BRVNfTVI7CQ0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BRENfQ2ZnVGltaW5ncyAqLw0KLS8qKiBcYnJpZWYgQ29uZmlndXJlIHRoZSBkaWZmZXJlbnQgbmVjZXNzYXJ5IHRpbWluZ3Mgb2YgdGhlIEFEQyBjb250cm9sbGVyICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQURDX0NmZ1RpbWluZ3MoIEFUOTFQU19BREMgcEFEQywgICAgICAgICAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtY2tfY2xvY2ssICAgICAgICAgICAgIC8qIGluIE1IeiAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBhZGNfY2xvY2ssICAgICAgICAgICAgIC8qIGluIE1IeiAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzdGFydHVwX3RpbWUsICAgICAgICAgIC8qIGluIHVzICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZV9hbmRfaG9sZF90aW1lICkgLyogaW4gbnMgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRVNfU3RhcnRQcm9jZXNzaW5nDQorLy8qIFxicmllZiBTdGFydCBFbmNyeXB0aW9uIG9yIERlY3J5cHRpb24NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BRVNfU3RhcnRQcm9jZXNzaW5nICgNCisJQVQ5MVBTX0FFUyBwQUVTIC8vIHBvaW50ZXIgdG8gYSBBRVMgY29udHJvbGxlcg0KKwkpDQogew0KLSAgICB1bnNpZ25lZCBpbnQgcHJlc2NhbCwgc3RhcnR1cCwgc2h0aW07DQotDQotICAgIHByZXNjYWwgPSBtY2tfY2xvY2sgLyAoIDIgKiBhZGNfY2xvY2sgKSAtIDE7DQotICAgIHN0YXJ0dXAgPSBhZGNfY2xvY2sgKiBzdGFydHVwX3RpbWUgLyA4IC0gMTsNCi0gICAgc2h0aW0gPSBhZGNfY2xvY2sgKiBzYW1wbGVfYW5kX2hvbGRfdGltZSAvIDEwMDAgLSAxOw0KLQ0KLSAgICAvKiogV3JpdGUgdG8gdGhlIE1SIHJlZ2lzdGVyICovDQotICAgIHBBREMtPkFEQ19NUiA9ICggKCBwcmVzY2FsIDw8IDggKSAmIEFUOTFDX0FEQ19QUkVTQ0FMICkgfCAoICggc3RhcnR1cCA8PCAxNiApICYgQVQ5MUNfQURDX1NUQVJUVVAgKSB8ICggKCBzaHRpbSA8PCAyNCApICYgQVQ5MUNfQURDX1NIVElNICk7DQorCXBBRVMtPkFFU19DUiA9IEFUOTFDX0FFU19TVEFSVDsJDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FEQ19FbmFibGVDaGFubmVsICovDQotLyoqIFxicmllZiBSZXR1cm4gQURDIFRpbWVyIFJlZ2lzdGVyIFZhbHVlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQURDX0VuYWJsZUNoYW5uZWwoIEFUOTFQU19BREMgcEFEQywgICAgICAgLyogcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNoYW5uZWwgKSAvKiBtb2RlIHJlZ2lzdGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUVTX1NvZnRSZXNldA0KKy8vKiBcYnJpZWYgUmVzZXQgQUVTDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQUVTX1NvZnRSZXNldCAoDQorCUFUOTFQU19BRVMgcEFFUyAvLyBwb2ludGVyIHRvIGEgQUVTIGNvbnRyb2xsZXINCisJKQ0KIHsNCi0gICAgLyoqIFdyaXRlIHRvIHRoZSBDSEVSIHJlZ2lzdGVyICovDQotICAgIHBBREMtPkFEQ19DSEVSID0gY2hhbm5lbDsNCisJcEFFUy0+QUVTX0NSID0gQVQ5MUNfQUVTX1NXUlNUOwkNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQURDX0Rpc2FibGVDaGFubmVsICovDQotLyoqIFxicmllZiBSZXR1cm4gQURDIFRpbWVyIFJlZ2lzdGVyIFZhbHVlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQURDX0Rpc2FibGVDaGFubmVsKCBBVDkxUFNfQURDIHBBREMsICAgICAgIC8qIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY2hhbm5lbCApIC8qIG1vZGUgcmVnaXN0ZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRVNfTG9hZE5ld1NlZWQNCisvLyogXGJyaWVmIExvYWQgTmV3IFNlZWQgaW4gdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQUVTX0xvYWROZXdTZWVkICgNCisJQVQ5MVBTX0FFUyBwQUVTIC8vIHBvaW50ZXIgdG8gYSBBRVMgY29udHJvbGxlcg0KKwkpDQogew0KLSAgICAvKiogV3JpdGUgdG8gdGhlIENIRFIgcmVnaXN0ZXIgKi8NCi0gICAgcEFEQy0+QURDX0NIRFIgPSBjaGFubmVsOw0KKwlwQUVTLT5BRVNfQ1IgPSBBVDkxQ19BRVNfTE9BRFNFRUQ7CQ0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BRENfR2V0Q2hhbm5lbFN0YXR1cyAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIEFEQyBUaW1lciBSZWdpc3RlciBWYWx1ZSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQURDX0dldENoYW5uZWxTdGF0dXMoIEFUOTFQU19BREMgcEFEQyAvKiBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRVNfU2V0Q3J5cHRvS2V5DQorLy8qIFxicmllZiBTZXQgQ3J5cHRvZ3JhcGhpYyBLZXkgeA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FFU19TZXRDcnlwdG9LZXkgKA0KKwlBVDkxUFNfQUVTIHBBRVMsIC8vIHBvaW50ZXIgdG8gYSBBRVMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGluZGV4LA0KKwl1bnNpZ25lZCBpbnQga2V5d29yZA0KKwkpDQogew0KLSAgICByZXR1cm4gcEFEQy0+QURDX0NIU1I7DQorCXBBRVMtPkFFU19LRVlXeFJbaW5kZXhdID0ga2V5d29yZDsJDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FEQ19TdGFydENvbnZlcnNpb24gKi8NCi0vKiogXGJyaWVmIFNvZnR3YXJlIHJlcXVlc3QgZm9yIGEgYW5hbG9nIHRvIGRpZ2l0YWwgY29udmVyc2lvbiAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0FEQ19TdGFydENvbnZlcnNpb24oIEFUOTFQU19BREMgcEFEQyAvKiBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRVNfSW5wdXREYXRhDQorLy8qIFxicmllZiBTZXQgSW5wdXQgRGF0YSB4DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQUVTX0lucHV0RGF0YSAoDQorCUFUOTFQU19BRVMgcEFFUywgLy8gcG9pbnRlciB0byBhIEFFUyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGNoYXIgaW5kZXgsDQorCXVuc2lnbmVkIGludCBpbmRhdGENCisJKQ0KIHsNCi0gICAgcEFEQy0+QURDX0NSID0gQVQ5MUNfQURDX1NUQVJUOw0KKwlwQUVTLT5BRVNfSURBVEF4UltpbmRleF0gPSBpbmRhdGE7CQ0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BRENfU29mdFJlc2V0ICovDQotLyoqIFxicmllZiBTb2Z0d2FyZSByZXNldCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0FEQ19Tb2Z0UmVzZXQoIEFUOTFQU19BREMgcEFEQyAvKiBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRVNfR2V0T3V0cHV0RGF0YQ0KKy8vKiBcYnJpZWYgR2V0IE91dHB1dCBEYXRhIHgNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FFU19HZXRPdXRwdXREYXRhICgNCisJQVQ5MVBTX0FFUyBwQUVTLCAvLyBwb2ludGVyIHRvIGEgQUVTIGNvbnRyb2xsZXINCisJdW5zaWduZWQgY2hhciBpbmRleA0KKwkpDQogew0KLSAgICBwQURDLT5BRENfQ1IgPSBBVDkxQ19BRENfU1dSU1Q7DQorCXJldHVybiBwQUVTLT5BRVNfT0RBVEF4UltpbmRleF07CQ0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BRENfR2V0TGFzdENvbnZlcnRlZERhdGEgKi8NCi0vKiogXGJyaWVmIFJldHVybiB0aGUgTGFzdCBDb252ZXJ0ZWQgRGF0YSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQURDX0dldExhc3RDb252ZXJ0ZWREYXRhKCBBVDkxUFNfQURDIHBBREMgLyogcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FFU19TZXRJbml0aWFsaXphdGlvblZlY3Rvcg0KKy8vKiBcYnJpZWYgU2V0IEluaXRpYWxpemF0aW9uIFZlY3RvciAob3IgQ291bnRlcikgeA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FFU19TZXRJbml0aWFsaXphdGlvblZlY3RvciAoDQorCUFUOTFQU19BRVMgcEFFUywgLy8gcG9pbnRlciB0byBhIEFFUyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGNoYXIgaW5kZXgsDQorCXVuc2lnbmVkIGludCBpbml0dmVjdG9yDQorCSkNCiB7DQotICAgIHJldHVybiBwQURDLT5BRENfTENEUjsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDAgKi8NCi0vKiogXGJyaWVmIFJldHVybiB0aGUgQ2hhbm5lbCAwIENvbnZlcnRlZCBEYXRhICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNIMCggQVQ5MVBTX0FEQyBwQURDIC8qIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KLXsNCi0gICAgcmV0dXJuIHBBREMtPkFEQ19DRFIwOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNIMSAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIHRoZSBDaGFubmVsIDEgQ29udmVydGVkIERhdGEgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0gxKCBBVDkxUFNfQURDIHBBREMgLyogcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQotew0KLSAgICByZXR1cm4gcEFEQy0+QURDX0NEUjE7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0gyICovDQotLyoqIFxicmllZiBSZXR1cm4gdGhlIENoYW5uZWwgMiBDb252ZXJ0ZWQgRGF0YSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDIoIEFUOTFQU19BREMgcEFEQyAvKiBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCi17DQotICAgIHJldHVybiBwQURDLT5BRENfQ0RSMjsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDMgKi8NCi0vKiogXGJyaWVmIFJldHVybiB0aGUgQ2hhbm5lbCAzIENvbnZlcnRlZCBEYXRhICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNIMyggQVQ5MVBTX0FEQyBwQURDIC8qIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KLXsNCi0gICAgcmV0dXJuIHBBREMtPkFEQ19DRFIzOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNINCAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIHRoZSBDaGFubmVsIDQgQ29udmVydGVkIERhdGEgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0g0KCBBVDkxUFNfQURDIHBBREMgLyogcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQotew0KLSAgICByZXR1cm4gcEFEQy0+QURDX0NEUjQ7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0g1ICovDQotLyoqIFxicmllZiBSZXR1cm4gdGhlIENoYW5uZWwgNSBDb252ZXJ0ZWQgRGF0YSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDUoIEFUOTFQU19BREMgcEFEQyAvKiBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCi17DQotICAgIHJldHVybiBwQURDLT5BRENfQ0RSNTsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDYgKi8NCi0vKiogXGJyaWVmIFJldHVybiB0aGUgQ2hhbm5lbCA2IENvbnZlcnRlZCBEYXRhICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNINiggQVQ5MVBTX0FEQyBwQURDIC8qIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KLXsNCi0gICAgcmV0dXJuIHBBREMtPkFEQ19DRFI2Ow0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNINyAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIHRoZSBDaGFubmVsIDcgQ29udmVydGVkIERhdGEgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0g3KCBBVDkxUFNfQURDIHBBREMgLyogcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQotew0KLSAgICByZXR1cm4gcEFEQy0+QURDX0NEUjc7DQorCXBBRVMtPkFFU19JVnhSW2luZGV4XSA9IGluaXR2ZWN0b3I7CQ0KIH0NCiANCiAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSogICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIEFFUw0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQUVTX0VuYWJsZUl0ICovDQotLyoqIFxicmllZiBFbmFibGUgQUVTIGludGVycnVwdCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0FFU19FbmFibGVJdCggQVQ5MVBTX0FFUyBwQUVTLCAgICAvKiBwb2ludGVyIHRvIGEgQUVTIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBJVCB0byBiZSBlbmFibGVkICovDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgVERFUw0KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVERFU19FbmFibGVJdA0KKy8vKiBcYnJpZWYgRW5hYmxlIFRERVMgaW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVERFU19FbmFibGVJdCAoDQorCUFUOTFQU19UREVTIHBUREVTLCAgICAgLy8gcG9pbnRlciB0byBhIFRERVMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgICAvLyBJVCB0byBiZSBlbmFibGVkDQogew0KLSAgICAvKiogV3JpdGUgdG8gdGhlIElFUiByZWdpc3RlciAqLw0KLSAgICBwQUVTLT5BRVNfSUVSID0gZmxhZzsNCisJLy8qIFdyaXRlIHRvIHRoZSBJRVIgcmVnaXN0ZXINCisJcFRERVMtPlRERVNfSUVSID0gZmxhZzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQUVTX0Rpc2FibGVJdCAqLw0KLS8qKiBcYnJpZWYgRGlzYWJsZSBBRVMgaW50ZXJydXB0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQUVTX0Rpc2FibGVJdCggQVQ5MVBTX0FFUyBwQUVTLCAgICAvKiBwb2ludGVyIHRvIGEgQUVTIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogSVQgdG8gYmUgZGlzYWJsZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UREVTX0Rpc2FibGVJdA0KKy8vKiBcYnJpZWYgRGlzYWJsZSBUREVTIGludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1RERVNfRGlzYWJsZUl0ICgNCisJQVQ5MVBTX1RERVMgcFRERVMsIC8vIHBvaW50ZXIgdG8gYSBUREVTIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpIC8vIElUIHRvIGJlIGRpc2FibGVkDQogew0KLSAgICAvKiogV3JpdGUgdG8gdGhlIElEUiByZWdpc3RlciAqLw0KLSAgICBwQUVTLT5BRVNfSURSID0gZmxhZzsNCisJLy8qIFdyaXRlIHRvIHRoZSBJRFIgcmVnaXN0ZXINCisJcFRERVMtPlRERVNfSURSID0gZmxhZzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQUVTX0dldFN0YXR1cyAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIEFFUyBJbnRlcnJ1cHQgU3RhdHVzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRVNfR2V0U3RhdHVzKCAvKiBccmV0dXJuIEFFUyBJbnRlcnJ1cHQgU3RhdHVzICovDQotICAgIEFUOTFQU19BRVMgcEFFUyApICAgICAgICAgICAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gYSBBRVMgY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RERVNfR2V0U3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gVERFUyBJbnRlcnJ1cHQgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9UREVTX0dldFN0YXR1cyggLy8gXHJldHVybiBUREVTIEludGVycnVwdCBTdGF0dXMNCisJQVQ5MVBTX1RERVMgcFRERVMpIC8vIHBvaW50ZXIgdG8gYSBUREVTIGNvbnRyb2xsZXINCiB7DQotICAgIHJldHVybiBwQUVTLT5BRVNfSVNSOw0KKwlyZXR1cm4gcFRERVMtPlRERVNfSVNSOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BRVNfR2V0SW50ZXJydXB0TWFza1N0YXR1cyAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIEFFUyBJbnRlcnJ1cHQgTWFzayBTdGF0dXMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FFU19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCAvKiBccmV0dXJuIEFFUyBJbnRlcnJ1cHQgTWFzayBTdGF0dXMgKi8NCi0gICAgQVQ5MVBTX0FFUyBwQUVTICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gYSBBRVMgY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RERVNfR2V0SW50ZXJydXB0TWFza1N0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFRERVMgSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9UREVTX0dldEludGVycnVwdE1hc2tTdGF0dXMoIC8vIFxyZXR1cm4gVERFUyBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisJQVQ5MVBTX1RERVMgcFRERVMpIC8vIHBvaW50ZXIgdG8gYSBUREVTIGNvbnRyb2xsZXINCiB7DQotICAgIHJldHVybiBwQUVTLT5BRVNfSU1SOw0KKwlyZXR1cm4gcFRERVMtPlRERVNfSU1SOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BRVNfSXNJbnRlcnJ1cHRNYXNrZWQgKi8NCi0vKiogXGJyaWVmIFRlc3QgaWYgQUVTIEludGVycnVwdCBpcyBNYXNrZWQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FFU19Jc0ludGVycnVwdE1hc2tlZCggQVQ5MVBTX0FFUyBwQUVTLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgQUVTIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVERFU19Jc0ludGVycnVwdE1hc2tlZA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBUREVTIEludGVycnVwdCBpcyBNYXNrZWQgDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9UREVTX0lzSW50ZXJydXB0TWFza2VkKA0KKyAgICAgICAgQVQ5MVBTX1RERVMgcFRERVMsICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFRERVMgY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQogew0KLSAgICByZXR1cm4oIEFUOTFGX0FFU19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCBwQUVTICkgJiBmbGFnICk7DQorCXJldHVybiAoQVQ5MUZfVERFU19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKHBUREVTKSAmIGZsYWcpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BRVNfSXNTdGF0dXNTZXQgKi8NCi0vKiogXGJyaWVmIFRlc3QgaWYgQUVTIFN0YXR1cyBpcyBTZXQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FFU19Jc1N0YXR1c1NldCggQVQ5MVBTX0FFUyBwQUVTLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgQUVTIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVERFU19Jc1N0YXR1c1NldA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBUREVTIFN0YXR1cyBpcyBTZXQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1RERVNfSXNTdGF0dXNTZXQoDQorICAgICAgICBBVDkxUFNfVERFUyBwVERFUywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgVERFUyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCiB7DQotICAgIHJldHVybiggQVQ5MUZfQUVTX0dldFN0YXR1cyggcEFFUyApICYgZmxhZyApOw0KKwlyZXR1cm4gKEFUOTFGX1RERVNfR2V0U3RhdHVzKHBUREVTKSAmIGZsYWcpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BRVNfQ2ZnTW9kZVJlZyAqLw0KLS8qKiBcYnJpZWYgQ29uZmlndXJlIHRoZSBNb2RlIFJlZ2lzdGVyIG9mIHRoZSBBRVMgY29udHJvbGxlciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0FFU19DZmdNb2RlUmVnKCBBVDkxUFNfQUVTIHBBRVMsICAgIC8qIHBvaW50ZXIgdG8gYSBBRVMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtb2RlICkgLyogbW9kZSByZWdpc3RlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RERVNfQ2ZnTW9kZVJlZw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIHRoZSBNb2RlIFJlZ2lzdGVyIG9mIHRoZSBUREVTIGNvbnRyb2xsZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UREVTX0NmZ01vZGVSZWcgKA0KKwlBVDkxUFNfVERFUyBwVERFUywgLy8gcG9pbnRlciB0byBhIFRERVMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgbW9kZSkgICAgICAgIC8vIG1vZGUgcmVnaXN0ZXIgDQogew0KLSAgICAvKiogV3JpdGUgdG8gdGhlIE1SIHJlZ2lzdGVyICovDQotICAgIHBBRVMtPkFFU19NUiA9IG1vZGU7DQorCS8vKiBXcml0ZSB0byB0aGUgTVIgcmVnaXN0ZXINCisJcFRERVMtPlRERVNfTVIgPSBtb2RlOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BRVNfR2V0TW9kZVJlZyAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIHRoZSBNb2RlIFJlZ2lzdGVyIG9mIHRoZSBBRVMgY29udHJvbGxlciB2YWx1ZSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQUVTX0dldE1vZGVSZWcoIEFUOTFQU19BRVMgcEFFUyAvKiBwb2ludGVyIHRvIGEgQUVTIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UREVTX0dldE1vZGVSZWcNCisvLyogXGJyaWVmIFJldHVybiB0aGUgTW9kZSBSZWdpc3RlciBvZiB0aGUgVERFUyBjb250cm9sbGVyIHZhbHVlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9UREVTX0dldE1vZGVSZWcgKA0KKwlBVDkxUFNfVERFUyBwVERFUyAvLyBwb2ludGVyIHRvIGEgVERFUyBjb250cm9sbGVyDQorCSkNCiB7DQotICAgIHJldHVybiBwQUVTLT5BRVNfTVI7DQorCXJldHVybiBwVERFUy0+VERFU19NUjsJDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FFU19TdGFydFByb2Nlc3NpbmcgKi8NCi0vKiogXGJyaWVmIFN0YXJ0IEVuY3J5cHRpb24gb3IgRGVjcnlwdGlvbiAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0FFU19TdGFydFByb2Nlc3NpbmcoIEFUOTFQU19BRVMgcEFFUyAvKiBwb2ludGVyIHRvIGEgQUVTIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UREVTX1N0YXJ0UHJvY2Vzc2luZw0KKy8vKiBcYnJpZWYgU3RhcnQgRW5jcnlwdGlvbiBvciBEZWNyeXB0aW9uDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVERFU19TdGFydFByb2Nlc3NpbmcgKA0KKwlBVDkxUFNfVERFUyBwVERFUyAvLyBwb2ludGVyIHRvIGEgVERFUyBjb250cm9sbGVyDQorCSkNCiB7DQotICAgIHBBRVMtPkFFU19DUiA9IEFUOTFDX0FFU19TVEFSVDsNCisJcFRERVMtPlRERVNfQ1IgPSBBVDkxQ19UREVTX1NUQVJUOwkNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQUVTX1NvZnRSZXNldCAqLw0KLS8qKiBcYnJpZWYgUmVzZXQgQUVTICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQUVTX1NvZnRSZXNldCggQVQ5MVBTX0FFUyBwQUVTIC8qIHBvaW50ZXIgdG8gYSBBRVMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RERVNfU29mdFJlc2V0DQorLy8qIFxicmllZiBSZXNldCBUREVTDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVERFU19Tb2Z0UmVzZXQgKA0KKwlBVDkxUFNfVERFUyBwVERFUyAvLyBwb2ludGVyIHRvIGEgVERFUyBjb250cm9sbGVyDQorCSkNCiB7DQotICAgIHBBRVMtPkFFU19DUiA9IEFUOTFDX0FFU19TV1JTVDsNCisJcFRERVMtPlRERVNfQ1IgPSBBVDkxQ19UREVTX1NXUlNUOwkNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQUVTX0xvYWROZXdTZWVkICovDQotLyoqIFxicmllZiBMb2FkIE5ldyBTZWVkIGluIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0FFU19Mb2FkTmV3U2VlZCggQVQ5MVBTX0FFUyBwQUVTIC8qIHBvaW50ZXIgdG8gYSBBRVMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVERFU19TZXRDcnlwdG9LZXkxDQorLy8qIFxicmllZiBTZXQgQ3J5cHRvZ3JhcGhpYyBLZXkgMSBXb3JkIHgNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UREVTX1NldENyeXB0b0tleTEgKA0KKwlBVDkxUFNfVERFUyBwVERFUywgLy8gcG9pbnRlciB0byBhIFRERVMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGluZGV4LA0KKwl1bnNpZ25lZCBpbnQga2V5d29yZA0KKwkpDQogew0KLSAgICBwQUVTLT5BRVNfQ1IgPSBBVDkxQ19BRVNfTE9BRFNFRUQ7DQorCXBUREVTLT5UREVTX0tFWTFXeFJbaW5kZXhdID0ga2V5d29yZDsJDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FFU19TZXRDcnlwdG9LZXkgKi8NCi0vKiogXGJyaWVmIFNldCBDcnlwdG9ncmFwaGljIEtleSB4ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQUVTX1NldENyeXB0b0tleSggQVQ5MVBTX0FFUyBwQUVTLCAvKiBwb2ludGVyIHRvIGEgQUVTIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgaW5kZXgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQga2V5d29yZCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVERFU19TZXRDcnlwdG9LZXkyDQorLy8qIFxicmllZiBTZXQgQ3J5cHRvZ3JhcGhpYyBLZXkgMiBXb3JkIHgNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UREVTX1NldENyeXB0b0tleTIgKA0KKwlBVDkxUFNfVERFUyBwVERFUywgLy8gcG9pbnRlciB0byBhIFRERVMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGluZGV4LA0KKwl1bnNpZ25lZCBpbnQga2V5d29yZA0KKwkpDQogew0KLSAgICBwQUVTLT5BRVNfS0VZV3hSWyBpbmRleCBdID0ga2V5d29yZDsNCisJcFRERVMtPlRERVNfS0VZMld4UltpbmRleF0gPSBrZXl3b3JkOwkNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQUVTX0lucHV0RGF0YSAqLw0KLS8qKiBcYnJpZWYgU2V0IElucHV0IERhdGEgeCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0FFU19JbnB1dERhdGEoIEFUOTFQU19BRVMgcEFFUywgLyogcG9pbnRlciB0byBhIEFFUyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGluZGV4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGluZGF0YSApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVERFU19TZXRDcnlwdG9LZXkzDQorLy8qIFxicmllZiBTZXQgQ3J5cHRvZ3JhcGhpYyBLZXkgMyBXb3JkIHgNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UREVTX1NldENyeXB0b0tleTMgKA0KKwlBVDkxUFNfVERFUyBwVERFUywgLy8gcG9pbnRlciB0byBhIFRERVMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGluZGV4LA0KKwl1bnNpZ25lZCBpbnQga2V5d29yZA0KKwkpDQogew0KLSAgICBwQUVTLT5BRVNfSURBVEF4UlsgaW5kZXggXSA9IGluZGF0YTsNCisJcFRERVMtPlRERVNfS0VZM1d4UltpbmRleF0gPSBrZXl3b3JkOwkNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQUVTX0dldE91dHB1dERhdGEgKi8NCi0vKiogXGJyaWVmIEdldCBPdXRwdXQgRGF0YSB4ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRVNfR2V0T3V0cHV0RGF0YSggQVQ5MVBTX0FFUyBwQUVTLCAvKiBwb2ludGVyIHRvIGEgQUVTIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgaW5kZXggKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RERVNfSW5wdXREYXRhDQorLy8qIFxicmllZiBTZXQgSW5wdXQgRGF0YSB4DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVERFU19JbnB1dERhdGEgKA0KKwlBVDkxUFNfVERFUyBwVERFUywgLy8gcG9pbnRlciB0byBhIFRERVMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGluZGV4LA0KKwl1bnNpZ25lZCBpbnQgaW5kYXRhDQorCSkNCiB7DQotICAgIHJldHVybiBwQUVTLT5BRVNfT0RBVEF4UlsgaW5kZXggXTsNCisJcFRERVMtPlRERVNfSURBVEF4UltpbmRleF0gPSBpbmRhdGE7CQ0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BRVNfU2V0SW5pdGlhbGl6YXRpb25WZWN0b3IgKi8NCi0vKiogXGJyaWVmIFNldCBJbml0aWFsaXphdGlvbiBWZWN0b3IgKG9yIENvdW50ZXIpIHggKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9BRVNfU2V0SW5pdGlhbGl6YXRpb25WZWN0b3IoIEFUOTFQU19BRVMgcEFFUywgLyogcG9pbnRlciB0byBhIEFFUyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgaW5kZXgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbml0dmVjdG9yICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UREVTX0dldE91dHB1dERhdGENCisvLyogXGJyaWVmIEdldCBPdXRwdXQgRGF0YSB4DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9UREVTX0dldE91dHB1dERhdGEgKA0KKwlBVDkxUFNfVERFUyBwVERFUywgLy8gcG9pbnRlciB0byBhIFRERVMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGluZGV4DQorCSkNCiB7DQotICAgIHBBRVMtPkFFU19JVnhSWyBpbmRleCBdID0gaW5pdHZlY3RvcjsNCisJcmV0dXJuIHBUREVTLT5UREVTX09EQVRBeFJbaW5kZXhdOwkNCiB9DQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0qICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBUREVTDQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9UREVTX0VuYWJsZUl0ICovDQotLyoqIFxicmllZiBFbmFibGUgVERFUyBpbnRlcnJ1cHQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9UREVTX0VuYWJsZUl0KCBBVDkxUFNfVERFUyBwVERFUywgIC8qIHBvaW50ZXIgdG8gYSBUREVTIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogSVQgdG8gYmUgZW5hYmxlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RERVNfU2V0SW5pdGlhbGl6YXRpb25WZWN0b3INCisvLyogXGJyaWVmIFNldCBJbml0aWFsaXphdGlvbiBWZWN0b3IgeA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1RERVNfU2V0SW5pdGlhbGl6YXRpb25WZWN0b3IgKA0KKwlBVDkxUFNfVERFUyBwVERFUywgLy8gcG9pbnRlciB0byBhIFRERVMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGluZGV4LA0KKwl1bnNpZ25lZCBpbnQgaW5pdHZlY3Rvcg0KKwkpDQogew0KLSAgICAvKiogV3JpdGUgdG8gdGhlIElFUiByZWdpc3RlciAqLw0KLSAgICBwVERFUy0+VERFU19JRVIgPSBmbGFnOw0KKwlwVERFUy0+VERFU19JVnhSW2luZGV4XSA9IGluaXR2ZWN0b3I7CQ0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9UREVTX0Rpc2FibGVJdCAqLw0KLS8qKiBcYnJpZWYgRGlzYWJsZSBUREVTIGludGVycnVwdCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1RERVNfRGlzYWJsZUl0KCBBVDkxUFNfVERFUyBwVERFUywgIC8qIHBvaW50ZXIgdG8gYSBUREVTIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIElUIHRvIGJlIGRpc2FibGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfREJHVV9DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIERCR1UNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9EQkdVX0NmZ1BNQyAodm9pZCkNCiB7DQotICAgIC8qKiBXcml0ZSB0byB0aGUgSURSIHJlZ2lzdGVyICovDQotICAgIHBUREVTLT5UREVTX0lEUiA9IGZsYWc7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1NZUykpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9UREVTX0dldFN0YXR1cyAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIFRERVMgSW50ZXJydXB0IFN0YXR1cyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVERFU19HZXRTdGF0dXMoIC8qIFxyZXR1cm4gVERFUyBJbnRlcnJ1cHQgU3RhdHVzICovDQotICAgIEFUOTFQU19UREVTIHBUREVTICkgICAgICAgICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIGEgVERFUyBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfREJHVV9DZmdQSU8NCisvLyogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgREJHVSBzaWduYWxzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfREJHVV9DZmdQSU8gKHZvaWQpDQogew0KLSAgICByZXR1cm4gcFRERVMtPlRERVNfSVNSOw0KKwkvLyBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlDQorCUFUOTFGX1BJT19DZmdQZXJpcGgoDQorCQlBVDkxQ19CQVNFX1BJT0EsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMjdfRFJYRCAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTI4X0RUWEQgICAgKSwgLy8gUGVyaXBoZXJhbCBBDQorCQkwKTsgLy8gUGVyaXBoZXJhbCBCDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1RERVNfR2V0SW50ZXJydXB0TWFza1N0YXR1cyAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIFRERVMgSW50ZXJydXB0IE1hc2sgU3RhdHVzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9UREVTX0dldEludGVycnVwdE1hc2tTdGF0dXMoIC8qIFxyZXR1cm4gVERFUyBJbnRlcnJ1cHQgTWFzayBTdGF0dXMgKi8NCi0gICAgQVQ5MVBTX1RERVMgcFRERVMgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIGEgVERFUyBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUE1DX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgUE1DDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0NmZ1BNQyAodm9pZCkNCiB7DQotICAgIHJldHVybiBwVERFUy0+VERFU19JTVI7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1NZUykpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9UREVTX0lzSW50ZXJydXB0TWFza2VkICovDQotLyoqIFxicmllZiBUZXN0IGlmIFRERVMgSW50ZXJydXB0IGlzIE1hc2tlZCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVERFU19Jc0ludGVycnVwdE1hc2tlZCggQVQ5MVBTX1RERVMgcFRERVMsICAvKiBcYXJnICBwb2ludGVyIHRvIGEgVERFUyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfQ2ZnUElPDQorLy8qIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFBNQyBzaWduYWxzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0NmZ1BJTyAodm9pZCkNCiB7DQotICAgIHJldHVybiggQVQ5MUZfVERFU19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCBwVERFUyApICYgZmxhZyApOw0KKwkvLyBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlDQorCUFUOTFGX1BJT19DZmdQZXJpcGgoDQorCQlBVDkxQ19CQVNFX1BJT0IsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMzBfUENLMiAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjI5X1BDSzEgICAgKSwgLy8gUGVyaXBoZXJhbCBBDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIyMF9QQ0swICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMF9QQ0swICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMjJfUENLMiAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjIxX1BDSzEgICAgKSk7IC8vIFBlcmlwaGVyYWwgQg0KKwkvLyBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlDQorCUFUOTFGX1BJT19DZmdQZXJpcGgoDQorCQlBVDkxQ19CQVNFX1BJT0EsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJMCwgLy8gUGVyaXBoZXJhbCBBDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEzMF9QQ0syICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMTNfUENLMSAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTI3X1BDSzMgICAgKSk7IC8vIFBlcmlwaGVyYWwgQg0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9UREVTX0lzU3RhdHVzU2V0ICovDQotLyoqIFxicmllZiBUZXN0IGlmIFRERVMgU3RhdHVzIGlzIFNldCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVERFU19Jc1N0YXR1c1NldCggQVQ5MVBTX1RERVMgcFRERVMsICAvKiBcYXJnICBwb2ludGVyIHRvIGEgVERFUyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9WUkVHX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgVlJFRw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1ZSRUdfQ2ZnUE1DICh2b2lkKQ0KIHsNCi0gICAgcmV0dXJuKCBBVDkxRl9UREVTX0dldFN0YXR1cyggcFRERVMgKSAmIGZsYWcgKTsNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfU1lTKSk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1RERVNfQ2ZnTW9kZVJlZyAqLw0KLS8qKiBcYnJpZWYgQ29uZmlndXJlIHRoZSBNb2RlIFJlZ2lzdGVyIG9mIHRoZSBUREVTIGNvbnRyb2xsZXIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9UREVTX0NmZ01vZGVSZWcoIEFUOTFQU19UREVTIHBUREVTLCAgLyogcG9pbnRlciB0byBhIFRERVMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbW9kZSApIC8qIG1vZGUgcmVnaXN0ZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9SU1RDX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgUlNUQw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1JTVENfQ2ZnUE1DICh2b2lkKQ0KIHsNCi0gICAgLyoqIFdyaXRlIHRvIHRoZSBNUiByZWdpc3RlciAqLw0KLSAgICBwVERFUy0+VERFU19NUiA9IG1vZGU7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1NZUykpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9UREVTX0dldE1vZGVSZWcgKi8NCi0vKiogXGJyaWVmIFJldHVybiB0aGUgTW9kZSBSZWdpc3RlciBvZiB0aGUgVERFUyBjb250cm9sbGVyIHZhbHVlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9UREVTX0dldE1vZGVSZWcoIEFUOTFQU19UREVTIHBUREVTIC8qIHBvaW50ZXIgdG8gYSBUREVTIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1NDX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgU1NDDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1NDX0NmZ1BNQyAodm9pZCkNCiB7DQotICAgIHJldHVybiBwVERFUy0+VERFU19NUjsNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfU1NDKSk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1RERVNfU3RhcnRQcm9jZXNzaW5nICovDQotLyoqIFxicmllZiBTdGFydCBFbmNyeXB0aW9uIG9yIERlY3J5cHRpb24gKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9UREVTX1N0YXJ0UHJvY2Vzc2luZyggQVQ5MVBTX1RERVMgcFRERVMgLyogcG9pbnRlciB0byBhIFRERVMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TU0NfQ2ZnUElPDQorLy8qIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFNTQyBzaWduYWxzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1NDX0NmZ1BJTyAodm9pZCkNCiB7DQotICAgIHBUREVTLT5UREVTX0NSID0gQVQ5MUNfVERFU19TVEFSVDsNCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9BLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTI1X1JLICAgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyMl9USyAgICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMjFfVEYgICAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTI0X1JEICAgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyNl9SRiAgICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMjNfVEQgICAgICApLCAvLyBQZXJpcGhlcmFsIEENCisJCTApOyAvLyBQZXJpcGhlcmFsIEINCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVERFU19Tb2Z0UmVzZXQgKi8NCi0vKiogXGJyaWVmIFJlc2V0IFRERVMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9UREVTX1NvZnRSZXNldCggQVQ5MVBTX1RERVMgcFRERVMgLyogcG9pbnRlciB0byBhIFRERVMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9XRFRDX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgV0RUQw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1dEVENfQ2ZnUE1DICh2b2lkKQ0KIHsNCi0gICAgcFRERVMtPlRERVNfQ1IgPSBBVDkxQ19UREVTX1NXUlNUOw0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9TWVMpKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVERFU19TZXRDcnlwdG9LZXkxICovDQotLyoqIFxicmllZiBTZXQgQ3J5cHRvZ3JhcGhpYyBLZXkgMSBXb3JkIHggKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9UREVTX1NldENyeXB0b0tleTEoIEFUOTFQU19UREVTIHBUREVTLCAvKiBwb2ludGVyIHRvIGEgVERFUyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgaW5kZXgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBrZXl3b3JkICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VUzFfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBVUzENCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VUzFfQ2ZnUE1DICh2b2lkKQ0KIHsNCi0gICAgcFRERVMtPlRERVNfS0VZMVd4UlsgaW5kZXggXSA9IGtleXdvcmQ7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1VTMSkpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9UREVTX1NldENyeXB0b0tleTIgKi8NCi0vKiogXGJyaWVmIFNldCBDcnlwdG9ncmFwaGljIEtleSAyIFdvcmQgeCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1RERVNfU2V0Q3J5cHRvS2V5MiggQVQ5MVBTX1RERVMgcFRERVMsIC8qIHBvaW50ZXIgdG8gYSBUREVTIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBpbmRleCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGtleXdvcmQgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTMV9DZmdQSU8NCisvLyogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgVVMxIHNpZ25hbHMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VUzFfQ2ZnUElPICh2b2lkKQ0KIHsNCi0gICAgcFRERVMtPlRERVNfS0VZMld4UlsgaW5kZXggXSA9IGtleXdvcmQ7DQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQiwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkwLCAvLyBQZXJpcGhlcmFsIEENCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjI2X1JJMSAgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIyNF9EU1IxICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMjNfRENEMSAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjI1X0RUUjEgICAgKSk7IC8vIFBlcmlwaGVyYWwgQg0KKwkvLyBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlDQorCUFUOTFGX1BJT19DZmdQZXJpcGgoDQorCQlBVDkxQ19CQVNFX1BJT0EsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBN19TQ0sxICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBOF9SVFMxICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBNl9UWEQxICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBNV9SWEQxICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBOV9DVFMxICAgICksIC8vIFBlcmlwaGVyYWwgQQ0KKwkJMCk7IC8vIFBlcmlwaGVyYWwgQg0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9UREVTX1NldENyeXB0b0tleTMgKi8NCi0vKiogXGJyaWVmIFNldCBDcnlwdG9ncmFwaGljIEtleSAzIFdvcmQgeCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1RERVNfU2V0Q3J5cHRvS2V5MyggQVQ5MVBTX1RERVMgcFRERVMsIC8qIHBvaW50ZXIgdG8gYSBUREVTIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBpbmRleCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGtleXdvcmQgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTMF9DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFVTMA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VTMF9DZmdQTUMgKHZvaWQpDQogew0KLSAgICBwVERFUy0+VERFU19LRVkzV3hSWyBpbmRleCBdID0ga2V5d29yZDsNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfVVMwKSk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1RERVNfSW5wdXREYXRhICovDQotLyoqIFxicmllZiBTZXQgSW5wdXQgRGF0YSB4ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVERFU19JbnB1dERhdGEoIEFUOTFQU19UREVTIHBUREVTLCAvKiBwb2ludGVyIHRvIGEgVERFUyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBpbmRleCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaW5kYXRhICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VUzBfQ2ZnUElPDQorLy8qIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFVTMCBzaWduYWxzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVVMwX0NmZ1BJTyAodm9pZCkNCiB7DQotICAgIHBUREVTLT5UREVTX0lEQVRBeFJbIGluZGV4IF0gPSBpbmRhdGE7DQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQSwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEwX1JYRDAgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEE0X0NUUzAgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEzX1JUUzAgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyX1NDSzAgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEExX1RYRDAgICAgKSwgLy8gUGVyaXBoZXJhbCBBDQorCQkwKTsgLy8gUGVyaXBoZXJhbCBCDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1RERVNfR2V0T3V0cHV0RGF0YSAqLw0KLS8qKiBcYnJpZWYgR2V0IE91dHB1dCBEYXRhIHggKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1RERVNfR2V0T3V0cHV0RGF0YSggQVQ5MVBTX1RERVMgcFRERVMsIC8qIHBvaW50ZXIgdG8gYSBUREVTIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGluZGV4ICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUEkxX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgU1BJMQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NQSTFfQ2ZnUE1DICh2b2lkKQ0KIHsNCi0gICAgcmV0dXJuIHBUREVTLT5UREVTX09EQVRBeFJbIGluZGV4IF07DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1NQSTEpKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVERFU19TZXRJbml0aWFsaXphdGlvblZlY3RvciAqLw0KLS8qKiBcYnJpZWYgU2V0IEluaXRpYWxpemF0aW9uIFZlY3RvciB4ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVERFU19TZXRJbml0aWFsaXphdGlvblZlY3RvciggQVQ5MVBTX1RERVMgcFRERVMsIC8qIHBvaW50ZXIgdG8gYSBUREVTIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgaW5kZXgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaW5pdHZlY3RvciApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1BJMV9DZmdQSU8NCisvLyogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgU1BJMSBzaWduYWxzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1BJMV9DZmdQSU8gKHZvaWQpDQogew0KLSAgICBwVERFUy0+VERFU19JVnhSWyBpbmRleCBdID0gaW5pdHZlY3RvcjsNCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9CLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCTAsIC8vIFBlcmlwaGVyYWwgQQ0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMTZfTlBDUzEzICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjEwX05QQ1MxMSAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIxMV9OUENTMTIgICkpOyAvLyBQZXJpcGhlcmFsIEINCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9BLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCTAsIC8vIFBlcmlwaGVyYWwgQQ0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBNF9OUENTMTMgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMjlfTlBDUzEzICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTIxX05QQ1MxMCAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyMl9TUENLMSAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMjVfTlBDUzExICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTJfTlBDUzExICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTI0X01JU08xICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEzX05QQ1MxMiAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyNl9OUENTMTIgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMjNfTU9TSTEgICApKTsgLy8gUGVyaXBoZXJhbCBCDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0RCR1VfQ2ZnUE1DICovDQotLyoqIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBEQkdVICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfREJHVV9DZmdQTUMoIHZvaWQgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSTBfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBTUEkwDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1BJMF9DZmdQTUMgKHZvaWQpDQogew0KLSAgICBBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQotICAgICAgICBBVDkxQ19CQVNFX1BNQywgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCBBVDkxQ19JRF9TWVMgKSApOw0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9TUEkwKSk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0RCR1VfQ2ZnUElPICovDQotLyoqIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIERCR1Ugc2lnbmFscyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0RCR1VfQ2ZnUElPKCB2b2lkICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUEkwX0NmZ1BJTw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBTUEkwIHNpZ25hbHMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TUEkwX0NmZ1BJTyAodm9pZCkNCiB7DQotICAgIC8qIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUgKi8NCi0gICAgQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCi0gICAgICAgIEFUOTFDX0JBU0VfUElPQSwgICAgICAgICAgICAgICAgICAgICAgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEEyN19EUlhEICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMjhfRFRYRCApLCAvKiBQZXJpcGhlcmFsIEEgKi8NCi0gICAgICAgIDAgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUGVyaXBoZXJhbCBCICovDQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQiwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkwLCAvLyBQZXJpcGhlcmFsIEENCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjEzX05QQ1MwMSAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIxN19OUENTMDMgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMTRfTlBDUzAyICApKTsgLy8gUGVyaXBoZXJhbCBCDQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQSwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEExNl9NSVNPMCAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMTNfTlBDUzAxICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTE1X05QQ1MwMyAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEExN19NT1NJMCAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMThfU1BDSzAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTE0X05QQ1MwMiAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEExMl9OUENTMDAgICksIC8vIFBlcmlwaGVyYWwgQQ0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBN19OUENTMDEgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBOV9OUENTMDMgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBOF9OUENTMDIgICkpOyAvLyBQZXJpcGhlcmFsIEINCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUE1DX0NmZ1BNQyAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgUE1DICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0NmZ1BNQyggdm9pZCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElUQ19DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFBJVEMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSVRDX0NmZ1BNQyAodm9pZCkNCiB7DQotICAgIEFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCi0gICAgICAgIEFUOTFDX0JBU0VfUE1DLCAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IEFUOTFDX0lEX1NZUyApICk7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1NZUykpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QTUNfQ2ZnUElPICovDQotLyoqIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFBNQyBzaWduYWxzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0NmZ1BJTyggdm9pZCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUlDX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgQUlDDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQUlDX0NmZ1BNQyAodm9pZCkNCiB7DQotICAgIC8qIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUgKi8NCi0gICAgQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCi0gICAgICAgIEFUOTFDX0JBU0VfUElPQiwgICAgICAgICAgICAgICAgICAgICAgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEIzMF9QQ0syICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BCMjlfUENLMSApLCAvKiBQZXJpcGhlcmFsIEEgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQjIwX1BDSzAgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEIwX1BDSzAgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEIyMl9QQ0syICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BCMjFfUENLMSApICk7IC8qIFBlcmlwaGVyYWwgQiAqLw0KLSAgICAvKiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlICovDQotICAgIEFUOTFGX1BJT19DZmdQZXJpcGgoDQotICAgICAgICBBVDkxQ19CQVNFX1BJT0EsIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgMCwgICAgICAgICAgICAgICAvKiBQZXJpcGhlcmFsIEEgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTMwX1BDSzIgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEExM19QQ0sxICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMjdfUENLMyApICk7IC8qIFBlcmlwaGVyYWwgQiAqLw0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9GSVEpIHwNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX0lSUTApIHwNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX0lSUTEpKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVlJFR19DZmdQTUMgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFZSRUcgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9WUkVHX0NmZ1BNQyggdm9pZCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUlDX0NmZ1BJTw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBBSUMgc2lnbmFscw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FJQ19DZmdQSU8gKHZvaWQpDQogew0KLSAgICBBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQotICAgICAgICBBVDkxQ19CQVNFX1BNQywgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCBBVDkxQ19JRF9TWVMgKSApOw0KKwkvLyBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlDQorCUFUOTFGX1BJT19DZmdQZXJpcGgoDQorCQlBVDkxQ19CQVNFX1BJT0EsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMzBfSVJRMCAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTI5X0ZJUSAgICAgKSwgLy8gUGVyaXBoZXJhbCBBDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEExNF9JUlExICAgICkpOyAvLyBQZXJpcGhlcmFsIEINCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUlNUQ19DZmdQTUMgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFJTVEMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9SU1RDX0NmZ1BNQyggdm9pZCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUVTX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgQUVTDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQUVTX0NmZ1BNQyAodm9pZCkNCiB7DQotICAgIEFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCi0gICAgICAgIEFUOTFDX0JBU0VfUE1DLCAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IEFUOTFDX0lEX1NZUyApICk7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX0FFUykpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9TU0NfQ2ZnUE1DICovDQotLyoqIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBTU0MgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9TU0NfQ2ZnUE1DKCB2b2lkICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UV0lfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBUV0kNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UV0lfQ2ZnUE1DICh2b2lkKQ0KIHsNCi0gICAgQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QTUMsIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgQVQ5MUNfSURfU1NDICkgKTsNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfVFdJKSk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1NTQ19DZmdQSU8gKi8NCi0vKiogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgU1NDIHNpZ25hbHMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9TU0NfQ2ZnUElPKCB2b2lkICkNCi17DQotICAgIC8qIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUgKi8NCi0gICAgQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCi0gICAgICAgIEFUOTFDX0JBU0VfUElPQSwgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEEyNV9SSyApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTIyX1RLICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMjFfVEYgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEEyNF9SRCApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTI2X1JGICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMjNfVEQgKSwgLyogUGVyaXBoZXJhbCBBICovDQotICAgICAgICAwICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQZXJpcGhlcmFsIEIgKi8NCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfV0RUQ19DZmdQTUMgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFdEVEMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9XRFRDX0NmZ1BNQyggdm9pZCApDQotew0KLSAgICBBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQotICAgICAgICBBVDkxQ19CQVNFX1BNQywgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCBBVDkxQ19JRF9TWVMgKSApOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9VUzFfQ2ZnUE1DICovDQotLyoqIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBVUzEgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9VUzFfQ2ZnUE1DKCB2b2lkICkNCi17DQotICAgIEFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCi0gICAgICAgIEFUOTFDX0JBU0VfUE1DLCAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IEFUOTFDX0lEX1VTMSApICk7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VTMV9DZmdQSU8gKi8NCi0vKiogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgVVMxIHNpZ25hbHMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9VUzFfQ2ZnUElPKCB2b2lkICkNCi17DQotICAgIC8qIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUgKi8NCi0gICAgQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCi0gICAgICAgIEFUOTFDX0JBU0VfUElPQiwgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAwLCAgICAgICAgICAgICAgIC8qIFBlcmlwaGVyYWwgQSAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BCMjZfUkkxICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BCMjRfRFNSMSApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQjIzX0RDRDEgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEIyNV9EVFIxICkgKTsgLyogUGVyaXBoZXJhbCBCICovDQotICAgIC8qIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUgKi8NCi0gICAgQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCi0gICAgICAgIEFUOTFDX0JBU0VfUElPQSwgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEE3X1NDSzEgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEE4X1JUUzEgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEE2X1RYRDEgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEE1X1JYRDEgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEE5X0NUUzEgKSwgLyogUGVyaXBoZXJhbCBBICovDQotICAgICAgICAwICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUGVyaXBoZXJhbCBCICovDQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VTMF9DZmdQTUMgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFVTMCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1VTMF9DZmdQTUMoIHZvaWQgKQ0KLXsNCi0gICAgQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QTUMsIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgQVQ5MUNfSURfVVMwICkgKTsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVVMwX0NmZ1BJTyAqLw0KLS8qKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBVUzAgc2lnbmFscyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1VTMF9DZmdQSU8oIHZvaWQgKQ0KLXsNCi0gICAgLyogQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZSAqLw0KLSAgICBBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QSU9BLCAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTBfUlhEMCApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTRfQ1RTMCApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTNfUlRTMCApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTJfU0NLMCApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTFfVFhEMCApLCAvKiBQZXJpcGhlcmFsIEEgKi8NCi0gICAgICAgIDAgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQZXJpcGhlcmFsIEIgKi8NCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1BJMV9DZmdQTUMgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFNQSTEgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9TUEkxX0NmZ1BNQyggdm9pZCApDQotew0KLSAgICBBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQotICAgICAgICBBVDkxQ19CQVNFX1BNQywgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCBBVDkxQ19JRF9TUEkxICkgKTsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1BJMV9DZmdQSU8gKi8NCi0vKiogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgU1BJMSBzaWduYWxzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfU1BJMV9DZmdQSU8oIHZvaWQgKQ0KLXsNCi0gICAgLyogQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZSAqLw0KLSAgICBBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QSU9CLCAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgIDAsICAgICAgICAgICAgICAgLyogUGVyaXBoZXJhbCBBICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEIxNl9OUENTMTMgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEIxMF9OUENTMTEgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEIxMV9OUENTMTIgKSApOyAvKiBQZXJpcGhlcmFsIEIgKi8NCi0gICAgLyogQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZSAqLw0KLSAgICBBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QSU9BLCAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgIDAsICAgICAgICAgICAgICAgLyogUGVyaXBoZXJhbCBBICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEE0X05QQ1MxMyApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTI5X05QQ1MxMyApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTIxX05QQ1MxMCApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTIyX1NQQ0sxICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMjVfTlBDUzExICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMl9OUENTMTEgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEEyNF9NSVNPMSApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTNfTlBDUzEyICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMjZfTlBDUzEyICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMjNfTU9TSTEgKSApOyAvKiBQZXJpcGhlcmFsIEIgKi8NCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1BJMF9DZmdQTUMgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFNQSTAgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9TUEkwX0NmZ1BNQyggdm9pZCApDQotew0KLSAgICBBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQotICAgICAgICBBVDkxQ19CQVNFX1BNQywgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCBBVDkxQ19JRF9TUEkwICkgKTsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1BJMF9DZmdQSU8gKi8NCi0vKiogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgU1BJMCBzaWduYWxzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfU1BJMF9DZmdQSU8oIHZvaWQgKQ0KLXsNCi0gICAgLyogQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZSAqLw0KLSAgICBBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QSU9CLCAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgIDAsICAgICAgICAgICAgICAgLyogUGVyaXBoZXJhbCBBICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEIxM19OUENTMDEgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEIxN19OUENTMDMgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEIxNF9OUENTMDIgKSApOyAvKiBQZXJpcGhlcmFsIEIgKi8NCi0gICAgLyogQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZSAqLw0KLSAgICBBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QSU9BLCAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTE2X01JU08wICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMTNfTlBDUzAxICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMTVfTlBDUzAzICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMTdfTU9TSTAgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEExOF9TUENLMCApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTE0X05QQ1MwMiApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTEyX05QQ1MwMCApLCAvKiBQZXJpcGhlcmFsIEEgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTdfTlBDUzAxICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBOV9OUENTMDMgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEE4X05QQ1MwMiApICk7IC8qIFBlcmlwaGVyYWwgQiAqLw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSVRDX0NmZ1BNQyAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgUElUQyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BJVENfQ2ZnUE1DKCB2b2lkICkNCi17DQotICAgIEFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCi0gICAgICAgIEFUOTFDX0JBU0VfUE1DLCAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IEFUOTFDX0lEX1NZUyApICk7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FJQ19DZmdQTUMgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIEFJQyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0FJQ19DZmdQTUMoIHZvaWQgKQ0KLXsNCi0gICAgQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QTUMsIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgQVQ5MUNfSURfRklRICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgQVQ5MUNfSURfSVJRMCApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IEFUOTFDX0lEX0lSUTEgKSApOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BSUNfQ2ZnUElPICovDQotLyoqIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIEFJQyBzaWduYWxzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQUlDX0NmZ1BJTyggdm9pZCApDQotew0KLSAgICAvKiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlICovDQotICAgIEFUOTFGX1BJT19DZmdQZXJpcGgoDQotICAgICAgICBBVDkxQ19CQVNFX1BJT0EsICAgICAgICAgICAgICAgICAgICAgICAgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEEzMF9JUlEwICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMjlfRklRICksICAgIC8qIFBlcmlwaGVyYWwgQSAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMTRfSVJRMSApICk7IC8qIFBlcmlwaGVyYWwgQiAqLw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BRVNfQ2ZnUE1DICovDQotLyoqIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBBRVMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9BRVNfQ2ZnUE1DKCB2b2lkICkNCi17DQotICAgIEFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCi0gICAgICAgIEFUOTFDX0JBU0VfUE1DLCAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IEFUOTFDX0lEX0FFUyApICk7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1RXSV9DZmdQTUMgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFRXSSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1RXSV9DZmdQTUMoIHZvaWQgKQ0KLXsNCi0gICAgQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QTUMsIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgQVQ5MUNfSURfVFdJICkgKTsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVFdJX0NmZ1BJTyAqLw0KLS8qKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBUV0kgc2lnbmFscyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1RXSV9DZmdQSU8oIHZvaWQgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RXSV9DZmdQSU8NCisvLyogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgVFdJIHNpZ25hbHMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UV0lfQ2ZnUElPICh2b2lkKQ0KIHsNCi0gICAgLyogQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZSAqLw0KLSAgICBBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QSU9BLCAgICAgICAgICAgICAgICAgICAgIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMTFfVFdDSyApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTEwX1RXRCApLCAvKiBQZXJpcGhlcmFsIEEgKi8NCi0gICAgICAgIDAgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQZXJpcGhlcmFsIEIgKi8NCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9BLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTExX1RXQ0sgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEExMF9UV0QgICAgICksIC8vIFBlcmlwaGVyYWwgQQ0KKwkJMCk7IC8vIFBlcmlwaGVyYWwgQg0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BRENfQ2ZnUE1DICovDQotLyoqIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBBREMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9BRENfQ2ZnUE1DKCB2b2lkICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBBREMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BRENfQ2ZnUE1DICh2b2lkKQ0KIHsNCi0gICAgQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QTUMsIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgQVQ5MUNfSURfQURDICkgKTsNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfQURDKSk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FEQ19DZmdQSU8gKi8NCi0vKiogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgQURDIHNpZ25hbHMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9BRENfQ2ZnUElPKCB2b2lkICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfQ2ZnUElPDQorLy8qIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIEFEQyBzaWduYWxzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQURDX0NmZ1BJTyAodm9pZCkNCiB7DQotICAgIC8qIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUgKi8NCi0gICAgQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCi0gICAgICAgIEFUOTFDX0JBU0VfUElPQiwgICAgICAgICAgICAgICAgICAgICAgICAgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBlcmlwaGVyYWwgQSAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BCMThfQURUUkcgKSApOyAvKiBQZXJpcGhlcmFsIEIgKi8NCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9CLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCTAsIC8vIFBlcmlwaGVyYWwgQQ0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMThfQURUUkcgICApKTsgLy8gUGVyaXBoZXJhbCBCDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BXTUNfQ0gzX0NmZ1BJTyAqLw0KLS8qKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBQV01DX0NIMyBzaWduYWxzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUFdNQ19DSDNfQ2ZnUElPKCB2b2lkICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QV01DX0NIM19DZmdQSU8NCisvLyogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgUFdNQ19DSDMgc2lnbmFscw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BXTUNfQ0gzX0NmZ1BJTyAodm9pZCkNCiB7DQotICAgIC8qIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUgKi8NCi0gICAgQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCi0gICAgICAgIEFUOTFDX0JBU0VfUElPQiwgICAgICAgICAgICAgICAgICAgICAgICAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQjIyX1BXTTMgKSwgICAvKiBQZXJpcGhlcmFsIEEgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQjMwX1BXTTMgKSApOyAvKiBQZXJpcGhlcmFsIEIgKi8NCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9CLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjIyX1BXTTMgICAgKSwgLy8gUGVyaXBoZXJhbCBBDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIzMF9QV00zICAgICkpOyAvLyBQZXJpcGhlcmFsIEINCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUFdNQ19DSDJfQ2ZnUElPICovDQotLyoqIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFBXTUNfQ0gyIHNpZ25hbHMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QV01DX0NIMl9DZmdQSU8oIHZvaWQgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BXTUNfQ0gyX0NmZ1BJTw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBQV01DX0NIMiBzaWduYWxzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUFdNQ19DSDJfQ2ZnUElPICh2b2lkKQ0KIHsNCi0gICAgLyogQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZSAqLw0KLSAgICBBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QSU9CLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BCMjFfUFdNMiApLCAgIC8qIFBlcmlwaGVyYWwgQSAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BCMjlfUFdNMiApICk7IC8qIFBlcmlwaGVyYWwgQiAqLw0KKwkvLyBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlDQorCUFUOTFGX1BJT19DZmdQZXJpcGgoDQorCQlBVDkxQ19CQVNFX1BJT0IsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMjFfUFdNMiAgICApLCAvLyBQZXJpcGhlcmFsIEENCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjI5X1BXTTIgICAgKSk7IC8vIFBlcmlwaGVyYWwgQg0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QV01DX0NIMV9DZmdQSU8gKi8NCi0vKiogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgUFdNQ19DSDEgc2lnbmFscyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BXTUNfQ0gxX0NmZ1BJTyggdm9pZCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUFdNQ19DSDFfQ2ZnUElPDQorLy8qIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFBXTUNfQ0gxIHNpZ25hbHMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QV01DX0NIMV9DZmdQSU8gKHZvaWQpDQogew0KLSAgICAvKiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlICovDQotICAgIEFUOTFGX1BJT19DZmdQZXJpcGgoDQotICAgICAgICBBVDkxQ19CQVNFX1BJT0IsICAgICAgICAgICAgICAgICAgICAgICAgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEIyMF9QV00xICksICAgLyogUGVyaXBoZXJhbCBBICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEIyOF9QV00xICkgKTsgLyogUGVyaXBoZXJhbCBCICovDQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQiwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIyMF9QV00xICAgICksIC8vIFBlcmlwaGVyYWwgQQ0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMjhfUFdNMSAgICApKTsgLy8gUGVyaXBoZXJhbCBCDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BXTUNfQ0gwX0NmZ1BJTyAqLw0KLS8qKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBQV01DX0NIMCBzaWduYWxzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUFdNQ19DSDBfQ2ZnUElPKCB2b2lkICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QV01DX0NIMF9DZmdQSU8NCisvLyogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgUFdNQ19DSDAgc2lnbmFscw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BXTUNfQ0gwX0NmZ1BJTyAodm9pZCkNCiB7DQotICAgIC8qIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUgKi8NCi0gICAgQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCi0gICAgICAgIEFUOTFDX0JBU0VfUElPQiwgICAgICAgICAgICAgICAgICAgICAgICAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQjE5X1BXTTAgKSwgICAvKiBQZXJpcGhlcmFsIEEgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQjI3X1BXTTAgKSApOyAvKiBQZXJpcGhlcmFsIEIgKi8NCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9CLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjE5X1BXTTAgICAgKSwgLy8gUGVyaXBoZXJhbCBBDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIyN19QV00wICAgICkpOyAvLyBQZXJpcGhlcmFsIEINCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUlRUQ19DZmdQTUMgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFJUVEMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9SVFRDX0NmZ1BNQyggdm9pZCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUlRUQ19DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFJUVEMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9SVFRDX0NmZ1BNQyAodm9pZCkNCiB7DQotICAgIEFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCi0gICAgICAgIEFUOTFDX0JBU0VfUE1DLCAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IEFUOTFDX0lEX1NZUyApICk7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1NZUykpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9VRFBfQ2ZnUE1DICovDQotLyoqIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBVRFAgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfQ2ZnUE1DKCB2b2lkICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBVRFANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfQ2ZnUE1DICh2b2lkKQ0KIHsNCi0gICAgQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QTUMsIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgQVQ5MUNfSURfVURQICkgKTsNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfVURQKSk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1RERVNfQ2ZnUE1DICovDQotLyoqIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBUREVTICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVERFU19DZmdQTUMoIHZvaWQgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RERVNfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBUREVTDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVERFU19DZmdQTUMgKHZvaWQpDQogew0KLSAgICBBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQotICAgICAgICBBVDkxQ19CQVNFX1BNQywgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCBBVDkxQ19JRF9UREVTICkgKTsNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfVERFUykpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9FTUFDX0NmZ1BNQyAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgRU1BQyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0VNQUNfQ2ZnUE1DKCB2b2lkICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9FTUFDX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgRU1BQw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0VNQUNfQ2ZnUE1DICh2b2lkKQ0KIHsNCi0gICAgQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QTUMsIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgQVQ5MUNfSURfRU1BQyApICk7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX0VNQUMpKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfRU1BQ19DZmdQSU8gKi8NCi0vKiogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgRU1BQyBzaWduYWxzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfRU1BQ19DZmdQSU8oIHZvaWQgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0VNQUNfQ2ZnUElPDQorLy8qIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIEVNQUMgc2lnbmFscw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0VNQUNfQ2ZnUElPICh2b2lkKQ0KIHsNCi0gICAgLyogQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZSAqLw0KLSAgICBBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QSU9CLCAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQjJfRVRYMCApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQjEyX0VUWEVSICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BCMTZfRUNPTCApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQjExX0VUWDMgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEI2X0VSWDEgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEIxNV9FUlhEViApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQjEzX0VSWDIgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEIzX0VUWDEgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEI4X0VNREMgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEI1X0VSWDAgKSB8DQotICAgICAgICAvKigodW5zaWduZWQgaW50KSBBVDkxQ19QQjE4X0VGMTAwICAgKSB8ICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEIxNF9FUlgzICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BCNF9FQ1JTX0VDUlNEViApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQjFfRVRYRU4gKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEIxMF9FVFgyICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BCMF9FVFhDS19FUkVGQ0sgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEI5X0VNRElPICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BCN19FUlhFUiApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQjE3X0VSWENLICksIC8qIFBlcmlwaGVyYWwgQSAqLw0KLSAgICAgICAgMCApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUGVyaXBoZXJhbCBCICovDQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQiwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIyX0VUWDAgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIxMl9FVFhFUiAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMTZfRUNPTCAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjExX0VUWDMgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEI2X0VSWDEgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIxNV9FUlhEViAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMTNfRVJYMiAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjNfRVRYMSAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjhfRU1EQyAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjVfRVJYMCAgICApIHwNCisJCS8vKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMThfRUYxMDAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjE0X0VSWDMgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEI0X0VDUlNfRUNSU0RWKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIxX0VUWEVOICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIxMF9FVFgyICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMF9FVFhDS19FUkVGQ0spIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjlfRU1ESU8gICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjdfRVJYRVIgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjE3X0VSWENLICAgKSwgLy8gUGVyaXBoZXJhbCBBDQorCQkwKTsgLy8gUGVyaXBoZXJhbCBCDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1RDMF9DZmdQTUMgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFRDMCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1RDMF9DZmdQTUMoIHZvaWQgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RDMF9DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFRDMA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1RDMF9DZmdQTUMgKHZvaWQpDQogew0KLSAgICBBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQotICAgICAgICBBVDkxQ19CQVNFX1BNQywgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCBBVDkxQ19JRF9UQzAgKSApOw0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9UQzApKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVEMwX0NmZ1BJTyAqLw0KLS8qKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBUQzAgc2lnbmFscyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1RDMF9DZmdQSU8oIHZvaWQgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RDMF9DZmdQSU8NCisvLyogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgVEMwIHNpZ25hbHMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UQzBfQ2ZnUElPICh2b2lkKQ0KIHsNCi0gICAgLyogQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZSAqLw0KLSAgICBBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QSU9CLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQjIzX1RJT0EwICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BCMjRfVElPQjAgKSwgICAvKiBQZXJpcGhlcmFsIEEgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQjEyX1RDTEswICkgKTsgLyogUGVyaXBoZXJhbCBCICovDQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQiwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIyM19USU9BMCAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMjRfVElPQjAgICApLCAvLyBQZXJpcGhlcmFsIEENCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjEyX1RDTEswICAgKSk7IC8vIFBlcmlwaGVyYWwgQg0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9UQzFfQ2ZnUE1DICovDQotLyoqIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBUQzEgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9UQzFfQ2ZnUE1DKCB2b2lkICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UQzFfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBUQzENCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UQzFfQ2ZnUE1DICh2b2lkKQ0KIHsNCi0gICAgQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QTUMsIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgQVQ5MUNfSURfVEMxICkgKTsNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfVEMxKSk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1RDMV9DZmdQSU8gKi8NCi0vKiogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgVEMxIHNpZ25hbHMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9UQzFfQ2ZnUElPKCB2b2lkICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UQzFfQ2ZnUElPDQorLy8qIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFRDMSBzaWduYWxzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVEMxX0NmZ1BJTyAodm9pZCkNCiB7DQotICAgIC8qIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUgKi8NCi0gICAgQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCi0gICAgICAgIEFUOTFDX0JBU0VfUElPQiwgICAgICAgICAgICAgICAgICAgICAgICAgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEIyNV9USU9BMSApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQjI2X1RJT0IxICksICAgLyogUGVyaXBoZXJhbCBBICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEIxOV9UQ0xLMSApICk7IC8qIFBlcmlwaGVyYWwgQiAqLw0KKwkvLyBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlDQorCUFUOTFGX1BJT19DZmdQZXJpcGgoDQorCQlBVDkxQ19CQVNFX1BJT0IsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMjVfVElPQTEgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjI2X1RJT0IxICAgKSwgLy8gUGVyaXBoZXJhbCBBDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIxOV9UQ0xLMSAgICkpOyAvLyBQZXJpcGhlcmFsIEINCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVEMyX0NmZ1BNQyAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgVEMyICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVEMyX0NmZ1BNQyggdm9pZCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVEMyX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgVEMyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVEMyX0NmZ1BNQyAodm9pZCkNCiB7DQotICAgIEFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCi0gICAgICAgIEFUOTFDX0JBU0VfUE1DLCAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IEFUOTFDX0lEX1RDMiApICk7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1RDMikpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9UQzJfQ2ZnUElPICovDQotLyoqIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFRDMiBzaWduYWxzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVEMyX0NmZ1BJTyggdm9pZCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVEMyX0NmZ1BJTw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBUQzIgc2lnbmFscw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1RDMl9DZmdQSU8gKHZvaWQpDQogew0KLSAgICAvKiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlICovDQotICAgIEFUOTFGX1BJT19DZmdQZXJpcGgoDQotICAgICAgICBBVDkxQ19CQVNFX1BJT0IsICAgICAgICAgICAgICAgICAgICAgICAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQjI4X1RJT0IyICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BCMjdfVElPQTIgKSwgLyogUGVyaXBoZXJhbCBBICovDQotICAgICAgICAwICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQZXJpcGhlcmFsIEIgKi8NCi0gICAgLyogQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZSAqLw0KLSAgICBBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QSU9BLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUGVyaXBoZXJhbCBBICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEExNV9UQ0xLMiApICk7IC8qIFBlcmlwaGVyYWwgQiAqLw0KKwkvLyBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlDQorCUFUOTFGX1BJT19DZmdQZXJpcGgoDQorCQlBVDkxQ19CQVNFX1BJT0IsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMjhfVElPQjIgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjI3X1RJT0EyICAgKSwgLy8gUGVyaXBoZXJhbCBBDQorCQkwKTsgLy8gUGVyaXBoZXJhbCBCDQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQSwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkwLCAvLyBQZXJpcGhlcmFsIEENCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTE1X1RDTEsyICAgKSk7IC8vIFBlcmlwaGVyYWwgQg0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9NQ19DZmdQTUMgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIE1DICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfTUNfQ2ZnUE1DKCB2b2lkICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9NQ19DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIE1DDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfTUNfQ2ZnUE1DICh2b2lkKQ0KIHsNCi0gICAgQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QTUMsIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgQVQ5MUNfSURfU1lTICkgKTsNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfU1lTKSk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT0FfQ2ZnUE1DICovDQotLyoqIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBQSU9BICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUElPQV9DZmdQTUMoIHZvaWQgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT0FfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBQSU9BDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPQV9DZmdQTUMgKHZvaWQpDQogew0KLSAgICBBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQotICAgICAgICBBVDkxQ19CQVNFX1BNQywgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCBBVDkxQ19JRF9QSU9BICkgKTsNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfUElPQSkpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9CX0NmZ1BNQyAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgUElPQiAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BJT0JfQ2ZnUE1DKCB2b2lkICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9CX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgUElPQg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT0JfQ2ZnUE1DICh2b2lkKQ0KIHsNCi0gICAgQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QTUMsIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgQVQ5MUNfSURfUElPQiApICk7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1BJT0IpKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQ0FOX0NmZ1BNQyAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgQ0FOICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQ0FOX0NmZ1BNQyggdm9pZCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgQ0FODQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQ0FOX0NmZ1BNQyAodm9pZCkNCiB7DQotICAgIEFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCi0gICAgICAgIEFUOTFDX0JBU0VfUE1DLCAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IEFUOTFDX0lEX0NBTiApICk7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX0NBTikpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9DQU5fQ2ZnUElPICovDQotLyoqIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIENBTiBzaWduYWxzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQ0FOX0NmZ1BJTyggdm9pZCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0NmZ1BJTw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBDQU4gc2lnbmFscw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0NBTl9DZmdQSU8gKHZvaWQpDQogew0KLSAgICAvKiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlICovDQotICAgIEFUOTFGX1BJT19DZmdQZXJpcGgoDQotICAgICAgICBBVDkxQ19CQVNFX1BJT0EsICAgICAgICAgICAgICAgICAgICAgICAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTIwX0NBTlRYICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMTlfQ0FOUlggKSwgLyogUGVyaXBoZXJhbCBBICovDQotICAgICAgICAwICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQZXJpcGhlcmFsIEIgKi8NCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9BLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTIwX0NBTlRYICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEExOV9DQU5SWCAgICksIC8vIFBlcmlwaGVyYWwgQQ0KKwkJMCk7IC8vIFBlcmlwaGVyYWwgQg0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QV01DX0NmZ1BNQyAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgUFdNQyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BXTUNfQ2ZnUE1DKCB2b2lkICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QV01DX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgUFdNQw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BXTUNfQ2ZnUE1DICh2b2lkKQ0KIHsNCi0gICAgQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QTUMsIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgQVQ5MUNfSURfUFdNQyApICk7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1BXTUMpKTsNCiB9DQogDQogI2VuZGlmIC8vIGxpYl9BVDkxU0FNN1gxMjhfSA0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0lBUi9BdG1lbFNBTTdTNjQvbGliX0FUOTFTQU03WDI1Ni5oIGIvcG9ydGFibGUvSUFSL0F0bWVsU0FNN1M2NC9saWJfQVQ5MVNBTTdYMjU2LmgKaW5kZXggM2M0ZmQ3ZC4uMDJlZTkwMCAxMDA2NDQKLS0tIGEvcG9ydGFibGUvSUFSL0F0bWVsU0FNN1M2NC9saWJfQVQ5MVNBTTdYMjU2LmgKKysrIGIvcG9ydGFibGUvSUFSL0F0bWVsU0FNN1M2NC9saWJfQVQ5MVNBTTdYMjU2LmgKQEAgLTEsNDMzMiArMSw0NTU4IEBACi0vKiogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiAgICAgICAgIEFUTUVMIE1pY3JvY29udHJvbGxlciBTb2Z0d2FyZSBTdXBwb3J0ICAtICBST1VTU0VUICAtICovDQotLyoqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogRElTQ0xBSU1FUjogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVRNRUwgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgKi8NCi0vKiogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiAqLw0KLS8qKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5UIEFSRSAqLw0KLS8qKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBVE1FTCBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCAqLw0KLS8qKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UICovDQotLyoqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCAqLw0KLS8qKiBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GICovDQotLyoqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HICovDQotLyoqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgKi8NCi0vKiogRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gKi8NCi0vKiogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBGaWxlIE5hbWUgICAgICAgICAgIDogbGliX0FUOTFTQU03WDI1Ni5oICovDQotLyoqIE9iamVjdCAgICAgICAgICAgICAgOiBBVDkxU0FNN1gyNTYgaW5saW5lZCBmdW5jdGlvbnMgKi8NCi0vKiogR2VuZXJhdGVkICAgICAgICAgICA6IEFUOTEgU1cgQXBwbGljYXRpb24gR3JvdXAgIDA1LzIwLzIwMDUgKDE2OjIyOjI5KSAqLw0KLS8qKiAqLw0KLS8qKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9kYmd1LmgvMS4xL0ZyaSBKYW4gMzEgMTI6MTg6NDAgMjAwMy8vICovDQotLyoqIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3BtY19TQU03WC5oLzEuMS9UdWUgRmViICAxIDA4OjMyOjEwIDIwMDUvLyAqLw0KLS8qKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9WUkVHXzYwODVCLmgvMS4xL1R1ZSBGZWIgIDEgMTY6MjA6NDcgMjAwNS8vICovDQotLyoqIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3JzdGNfNjA5OEEuaC8xLjEvV2VkIE9jdCAgNiAxMDozOToyMCAyMDA0Ly8gKi8NCi0vKiogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfc3NjLmgvMS40L0ZyaSBKYW4gMzEgMTI6MTk6MjAgMjAwMy8vICovDQotLyoqIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3dkdGNfNjA4MEEuaC8xLjEvV2VkIE9jdCAgNiAxMDozODozMCAyMDA0Ly8gKi8NCi0vKiogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfdXNhcnQuaC8xLjUvVGh1IE5vdiAyMSAxNjowMTo1NCAyMDAyLy8gKi8NCi0vKiogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfc3BpMi5oLzEuMS9Nb24gQXVnIDI1IDE0OjIzOjUyIDIwMDMvLyAqLw0KLS8qKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9waXRjXzYwNzlBLmgvMS4yL1R1ZSBOb3YgIDkgMTQ6NDM6NTYgMjAwNC8vICovDQotLyoqIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX2FpY182MDc1Yi5oLzEuMS9GcmkgTWF5IDIwIDE0OjAxOjE5IDIwMDUvLyAqLw0KLS8qKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9hZXNfNjE0OWEuaC8xLjEvTW9uIEphbiAxNyAwNzo0MzowOSAyMDA1Ly8gKi8NCi0vKiogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfdHdpLmgvMS4zL01vbiBKdWwgMTkgMTQ6Mjc6NTggMjAwNC8vICovDQotLyoqIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX2FkYy5oLzEuNi9GcmkgT2N0IDE3IDA5OjEyOjM4IDIwMDMvLyAqLw0KLS8qKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9ydHRjXzYwODFBLmgvMS4xL1dlZCBPY3QgIDYgMTA6Mzk6MzggMjAwNC8vICovDQotLyoqIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3VkcC5oLzEuNC9XZWQgRmViIDE2IDA4OjM5OjM0IDIwMDUvLyAqLw0KLS8qKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9kZXMzXzYxNTBhLmgvMS4xL01vbiBKYW4gMTcgMDk6MTk6MTkgMjAwNS8vICovDQotLyoqIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3RjXzE3NTNiLmgvMS4xL0ZyaSBKYW4gMzEgMTI6MjA6MDIgMjAwMy8vICovDQotLyoqIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX01DX1NBTTdYLmgvMS4xL1RodSBNYXIgMjUgMTU6MTk6MTQgMjAwNC8vICovDQotLyoqIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3Bpby5oLzEuMy9GcmkgSmFuIDMxIDEyOjE4OjU2IDIwMDMvLyAqLw0KLS8qKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9jYW5fQVQ5MS5oLzEuNC9GcmkgT2N0IDE3IDA5OjEyOjUwIDIwMDMvLyAqLw0KLS8qKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9QV01fU0FNLmgvMS4zL1RodSBKYW4gMjIgMTA6MTA6NTAgMjAwNC8vICovDQotLyoqIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3BkYy5oLzEuMi9UdWUgSnVsICAyIDEzOjI5OjQwIDIwMDIvLyAqLw0KLS8qKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorLy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogICAgICAgICBBVE1FTCBNaWNyb2NvbnRyb2xsZXIgU29mdHdhcmUgU3VwcG9ydCAgLSAgUk9VU1NFVCAgLQ0KKy8vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIERJU0NMQUlNRVI6ICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFUTUVMICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SDQorLy8qIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YNCisvLyogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVCBBUkUNCisvLyogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVRNRUwgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwNCisvLyogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVA0KKy8vKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwNCisvLyogT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRg0KKy8vKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORw0KKy8vKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsDQorLy8qIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorLy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogRmlsZSBOYW1lICAgICAgICAgICA6IGxpYl9BVDkxU0FNN1gyNTYuaA0KKy8vKiBPYmplY3QgICAgICAgICAgICAgIDogQVQ5MVNBTTdYMjU2IGlubGluZWQgZnVuY3Rpb25zDQorLy8qIEdlbmVyYXRlZCAgICAgICAgICAgOiBBVDkxIFNXIEFwcGxpY2F0aW9uIEdyb3VwICAwNS8yMC8yMDA1ICgxNjoyMjoyOSkNCisvLyoNCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfZGJndS5oLzEuMS9GcmkgSmFuIDMxIDEyOjE4OjQwIDIwMDMvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9wbWNfU0FNN1guaC8xLjEvVHVlIEZlYiAgMSAwODozMjoxMCAyMDA1Ly8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfVlJFR182MDg1Qi5oLzEuMS9UdWUgRmViICAxIDE2OjIwOjQ3IDIwMDUvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9yc3RjXzYwOThBLmgvMS4xL1dlZCBPY3QgIDYgMTA6Mzk6MjAgMjAwNC8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3NzYy5oLzEuNC9GcmkgSmFuIDMxIDEyOjE5OjIwIDIwMDMvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl93ZHRjXzYwODBBLmgvMS4xL1dlZCBPY3QgIDYgMTA6Mzg6MzAgMjAwNC8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3VzYXJ0LmgvMS41L1RodSBOb3YgMjEgMTY6MDE6NTQgMjAwMi8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3NwaTIuaC8xLjEvTW9uIEF1ZyAyNSAxNDoyMzo1MiAyMDAzLy8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfcGl0Y182MDc5QS5oLzEuMi9UdWUgTm92ICA5IDE0OjQzOjU2IDIwMDQvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9haWNfNjA3NWIuaC8xLjEvRnJpIE1heSAyMCAxNDowMToxOSAyMDA1Ly8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfYWVzXzYxNDlhLmgvMS4xL01vbiBKYW4gMTcgMDc6NDM6MDkgMjAwNS8vDQorLy8qIENWUyBSZWZlcmVuY2UgICAgICAgOiAvbGliX3R3aS5oLzEuMy9Nb24gSnVsIDE5IDE0OjI3OjU4IDIwMDQvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9hZGMuaC8xLjYvRnJpIE9jdCAxNyAwOToxMjozOCAyMDAzLy8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfcnR0Y182MDgxQS5oLzEuMS9XZWQgT2N0ICA2IDEwOjM5OjM4IDIwMDQvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl91ZHAuaC8xLjQvV2VkIEZlYiAxNiAwODozOTozNCAyMDA1Ly8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfZGVzM182MTUwYS5oLzEuMS9Nb24gSmFuIDE3IDA5OjE5OjE5IDIwMDUvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl90Y18xNzUzYi5oLzEuMS9GcmkgSmFuIDMxIDEyOjIwOjAyIDIwMDMvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9NQ19TQU03WC5oLzEuMS9UaHUgTWFyIDI1IDE1OjE5OjE0IDIwMDQvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9waW8uaC8xLjMvRnJpIEphbiAzMSAxMjoxODo1NiAyMDAzLy8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfY2FuX0FUOTEuaC8xLjQvRnJpIE9jdCAxNyAwOToxMjo1MCAyMDAzLy8NCisvLyogQ1ZTIFJlZmVyZW5jZSAgICAgICA6IC9saWJfUFdNX1NBTS5oLzEuMy9UaHUgSmFuIDIyIDEwOjEwOjUwIDIwMDQvLw0KKy8vKiBDVlMgUmVmZXJlbmNlICAgICAgIDogL2xpYl9wZGMuaC8xLjIvVHVlIEp1bCAgMiAxMzoyOTo0MCAyMDAyLy8NCisvLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIA0KICNpZm5kZWYgbGliX0FUOTFTQU03WDI1Nl9IDQogI2RlZmluZSBsaWJfQVQ5MVNBTTdYMjU2X0gNCiANCiAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSogICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIEFJQw0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotI2RlZmluZSBBVDkxQ19BSUNfQlJBTkNIX09QQ09ERSAgICAoICggdm9pZCAoICogKSgpICkgMHhFNTFGRkYyMCApIC8qIGxkciwgcGMsIFtwYywgIy0mRjIwXSAqLw0KKyAgICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIEFJQw0KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorI2RlZmluZSBBVDkxQ19BSUNfQlJBTkNIX09QQ09ERSAoKHZvaWQgKCopICgpKSAweEU1MUZGRjIwKSAvLyBsZHIsIHBjLCBbcGMsICMtJkYyMF0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BSUNfQ29uZmlndXJlSXQgKi8NCi0vKiogXGJyaWVmIEludGVycnVwdCBIYW5kbGVyIEluaXRpYWxpemF0aW9uICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BSUNfQ29uZmlndXJlSXQoIEFUOTFQU19BSUMgcEFpYywgICAgICAgICAgICAgICAgLyogXGFyZyBwb2ludGVyIHRvIHRoZSBBSUMgcmVnaXN0ZXJzICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGlycV9pZCwgICAgICAgICAgICAvKiBcYXJnIGludGVycnVwdCBudW1iZXIgdG8gaW5pdGlhbGl6ZSAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwcmlvcml0eSwgICAgICAgICAgLyogXGFyZyBwcmlvcml0eSB0byBnaXZlIHRvIHRoZSBpbnRlcnJ1cHQgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3JjX3R5cGUsICAgICAgICAgIC8qIFxhcmcgYWN0aXZhdGlvbiBhbmQgc2Vuc2Ugb2YgYWN0aXZhdGlvbiAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCAqIG5ld0hhbmRsZXIgKSggdm9pZCApICkgLyogXGFyZyBhZGRyZXNzIG9mIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FJQ19Db25maWd1cmVJdA0KKy8vKiBcYnJpZWYgSW50ZXJydXB0IEhhbmRsZXIgSW5pdGlhbGl6YXRpb24NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FJQ19Db25maWd1cmVJdCAoDQorCUFUOTFQU19BSUMgcEFpYywgIC8vIFxhcmcgcG9pbnRlciB0byB0aGUgQUlDIHJlZ2lzdGVycw0KKwl1bnNpZ25lZCBpbnQgaXJxX2lkLCAgICAgLy8gXGFyZyBpbnRlcnJ1cHQgbnVtYmVyIHRvIGluaXRpYWxpemUNCisJdW5zaWduZWQgaW50IHByaW9yaXR5LCAgIC8vIFxhcmcgcHJpb3JpdHkgdG8gZ2l2ZSB0byB0aGUgaW50ZXJydXB0DQorCXVuc2lnbmVkIGludCBzcmNfdHlwZSwgICAvLyBcYXJnIGFjdGl2YXRpb24gYW5kIHNlbnNlIG9mIGFjdGl2YXRpb24NCisJdm9pZCAoKm5ld0hhbmRsZXIpICh2b2lkKSApIC8vIFxhcmcgYWRkcmVzcyBvZiB0aGUgaW50ZXJydXB0IGhhbmRsZXINCiB7DQotICAgIHVuc2lnbmVkIGludCBvbGRIYW5kbGVyOw0KLSAgICB1bnNpZ25lZCBpbnQgbWFzazsNCisJdW5zaWduZWQgaW50IG9sZEhhbmRsZXI7DQorICAgIHVuc2lnbmVkIGludCBtYXNrIDsNCiANCi0gICAgb2xkSGFuZGxlciA9IHBBaWMtPkFJQ19TVlJbIGlycV9pZCBdOw0KKyAgICBvbGRIYW5kbGVyID0gcEFpYy0+QUlDX1NWUltpcnFfaWRdOw0KIA0KLSAgICBtYXNrID0gMHgxIDw8IGlycV9pZDsNCi0gICAgLyoqIERpc2FibGUgdGhlIGludGVycnVwdCBvbiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIgKi8NCi0gICAgcEFpYy0+QUlDX0lEQ1IgPSBtYXNrOw0KLSAgICAvKiogU2F2ZSB0aGUgaW50ZXJydXB0IGhhbmRsZXIgcm91dGluZSBwb2ludGVyIGFuZCB0aGUgaW50ZXJydXB0IHByaW9yaXR5ICovDQotICAgIHBBaWMtPkFJQ19TVlJbIGlycV9pZCBdID0gKCB1bnNpZ25lZCBpbnQgKSBuZXdIYW5kbGVyOw0KLSAgICAvKiogU3RvcmUgdGhlIFNvdXJjZSBNb2RlIFJlZ2lzdGVyICovDQotICAgIHBBaWMtPkFJQ19TTVJbIGlycV9pZCBdID0gc3JjX3R5cGUgfCBwcmlvcml0eTsNCi0gICAgLyoqIENsZWFyIHRoZSBpbnRlcnJ1cHQgb24gdGhlIGludGVycnVwdCBjb250cm9sbGVyICovDQotICAgIHBBaWMtPkFJQ19JQ0NSID0gbWFzazsNCisgICAgbWFzayA9IDB4MSA8PCBpcnFfaWQgOw0KKyAgICAvLyogRGlzYWJsZSB0aGUgaW50ZXJydXB0IG9uIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlcg0KKyAgICBwQWljLT5BSUNfSURDUiA9IG1hc2sgOw0KKyAgICAvLyogU2F2ZSB0aGUgaW50ZXJydXB0IGhhbmRsZXIgcm91dGluZSBwb2ludGVyIGFuZCB0aGUgaW50ZXJydXB0IHByaW9yaXR5DQorICAgIHBBaWMtPkFJQ19TVlJbaXJxX2lkXSA9ICh1bnNpZ25lZCBpbnQpIG5ld0hhbmRsZXIgOw0KKyAgICAvLyogU3RvcmUgdGhlIFNvdXJjZSBNb2RlIFJlZ2lzdGVyDQorICAgIHBBaWMtPkFJQ19TTVJbaXJxX2lkXSA9IHNyY190eXBlIHwgcHJpb3JpdHkgIDsNCisgICAgLy8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgb24gdGhlIGludGVycnVwdCBjb250cm9sbGVyDQorICAgIHBBaWMtPkFJQ19JQ0NSID0gbWFzayA7DQogDQotICAgIHJldHVybiBvbGRIYW5kbGVyOw0KKwlyZXR1cm4gb2xkSGFuZGxlcjsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQUlDX0VuYWJsZUl0ICovDQotLyoqIFxicmllZiBFbmFibGUgY29ycmVzcG9uZGluZyBJVCBudW1iZXIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9BSUNfRW5hYmxlSXQoIEFUOTFQU19BSUMgcEFpYywgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gdGhlIEFJQyByZWdpc3RlcnMgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGlycV9pZCApIC8qIFxhcmcgaW50ZXJydXB0IG51bWJlciB0byBpbml0aWFsaXplICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUlDX0VuYWJsZUl0DQorLy8qIFxicmllZiBFbmFibGUgY29ycmVzcG9uZGluZyBJVCBudW1iZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BSUNfRW5hYmxlSXQgKA0KKwlBVDkxUFNfQUlDIHBBaWMsICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIHRoZSBBSUMgcmVnaXN0ZXJzDQorCXVuc2lnbmVkIGludCBpcnFfaWQgKSAvLyBcYXJnIGludGVycnVwdCBudW1iZXIgdG8gaW5pdGlhbGl6ZQ0KIHsNCi0gICAgLyoqIEVuYWJsZSB0aGUgaW50ZXJydXB0IG9uIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciAqLw0KLSAgICBwQWljLT5BSUNfSUVDUiA9IDB4MSA8PCBpcnFfaWQ7DQorICAgIC8vKiBFbmFibGUgdGhlIGludGVycnVwdCBvbiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXINCisgICAgcEFpYy0+QUlDX0lFQ1IgPSAweDEgPDwgaXJxX2lkIDsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQUlDX0Rpc2FibGVJdCAqLw0KLS8qKiBcYnJpZWYgRGlzYWJsZSBjb3JyZXNwb25kaW5nIElUIG51bWJlciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0FJQ19EaXNhYmxlSXQoIEFUOTFQU19BSUMgcEFpYywgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gdGhlIEFJQyByZWdpc3RlcnMgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpcnFfaWQgKSAvKiBcYXJnIGludGVycnVwdCBudW1iZXIgdG8gaW5pdGlhbGl6ZSAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FJQ19EaXNhYmxlSXQNCisvLyogXGJyaWVmIERpc2FibGUgY29ycmVzcG9uZGluZyBJVCBudW1iZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BSUNfRGlzYWJsZUl0ICgNCisJQVQ5MVBTX0FJQyBwQWljLCAgICAgIC8vIFxhcmcgcG9pbnRlciB0byB0aGUgQUlDIHJlZ2lzdGVycw0KKwl1bnNpZ25lZCBpbnQgaXJxX2lkICkgLy8gXGFyZyBpbnRlcnJ1cHQgbnVtYmVyIHRvIGluaXRpYWxpemUNCiB7DQogICAgIHVuc2lnbmVkIGludCBtYXNrID0gMHgxIDw8IGlycV9pZDsNCi0NCi0gICAgLyoqIERpc2FibGUgdGhlIGludGVycnVwdCBvbiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIgKi8NCi0gICAgcEFpYy0+QUlDX0lEQ1IgPSBtYXNrOw0KLSAgICAvKiogQ2xlYXIgdGhlIGludGVycnVwdCBvbiB0aGUgSW50ZXJydXB0IENvbnRyb2xsZXIgKCBpZiBvbmUgaXMgcGVuZGluZyApICovDQotICAgIHBBaWMtPkFJQ19JQ0NSID0gbWFzazsNCisgICAgLy8qIERpc2FibGUgdGhlIGludGVycnVwdCBvbiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXINCisgICAgcEFpYy0+QUlDX0lEQ1IgPSBtYXNrIDsNCisgICAgLy8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgb24gdGhlIEludGVycnVwdCBDb250cm9sbGVyICggaWYgb25lIGlzIHBlbmRpbmcgKQ0KKyAgICBwQWljLT5BSUNfSUNDUiA9IG1hc2sgOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BSUNfQ2xlYXJJdCAqLw0KLS8qKiBcYnJpZWYgQ2xlYXIgY29ycmVzcG9uZGluZyBJVCBudW1iZXIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9BSUNfQ2xlYXJJdCggQVQ5MVBTX0FJQyBwQWljLCAgICAgIC8qIFxhcmcgcG9pbnRlciB0byB0aGUgQUlDIHJlZ2lzdGVycyAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpcnFfaWQgKSAvKiBcYXJnIGludGVycnVwdCBudW1iZXIgdG8gaW5pdGlhbGl6ZSAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FJQ19DbGVhckl0DQorLy8qIFxicmllZiBDbGVhciBjb3JyZXNwb25kaW5nIElUIG51bWJlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FJQ19DbGVhckl0ICgNCisJQVQ5MVBTX0FJQyBwQWljLCAgICAgLy8gXGFyZyBwb2ludGVyIHRvIHRoZSBBSUMgcmVnaXN0ZXJzDQorCXVuc2lnbmVkIGludCBpcnFfaWQpIC8vIFxhcmcgaW50ZXJydXB0IG51bWJlciB0byBpbml0aWFsaXplDQogew0KLSAgICAvKiogQ2xlYXIgdGhlIGludGVycnVwdCBvbiB0aGUgSW50ZXJydXB0IENvbnRyb2xsZXIgKCBpZiBvbmUgaXMgcGVuZGluZyApICovDQotICAgIHBBaWMtPkFJQ19JQ0NSID0gKCAweDEgPDwgaXJxX2lkICk7DQorICAgIC8vKiBDbGVhciB0aGUgaW50ZXJydXB0IG9uIHRoZSBJbnRlcnJ1cHQgQ29udHJvbGxlciAoIGlmIG9uZSBpcyBwZW5kaW5nICkNCisgICAgcEFpYy0+QUlDX0lDQ1IgPSAoMHgxIDw8IGlycV9pZCk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FJQ19BY2tub3dsZWRnZUl0ICovDQotLyoqIFxicmllZiBBY2tub3dsZWRnZSBjb3JyZXNwb25kaW5nIElUIG51bWJlciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0FJQ19BY2tub3dsZWRnZUl0KCBBVDkxUFNfQUlDIHBBaWMgKSAvKiBcYXJnIHBvaW50ZXIgdG8gdGhlIEFJQyByZWdpc3RlcnMgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BSUNfQWNrbm93bGVkZ2VJdA0KKy8vKiBcYnJpZWYgQWNrbm93bGVkZ2UgY29ycmVzcG9uZGluZyBJVCBudW1iZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BSUNfQWNrbm93bGVkZ2VJdCAoDQorCUFUOTFQU19BSUMgcEFpYykgICAgIC8vIFxhcmcgcG9pbnRlciB0byB0aGUgQUlDIHJlZ2lzdGVycw0KIHsNCiAgICAgcEFpYy0+QUlDX0VPSUNSID0gcEFpYy0+QUlDX0VPSUNSOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BSUNfU2V0RXhjZXB0aW9uVmVjdG9yICovDQotLyoqIFxicmllZiBDb25maWd1cmUgdmVjdG9yIGhhbmRsZXIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FJQ19TZXRFeGNlcHRpb25WZWN0b3IoIHVuc2lnbmVkIGludCAqIHBWZWN0b3IsIC8qIFxhcmcgcG9pbnRlciB0byB0aGUgQUlDIHJlZ2lzdGVycyAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICggKiBIYW5kbGVyICkoKSApICAvKiBcYXJnIEludGVycnVwdCBIYW5kbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUlDX1NldEV4Y2VwdGlvblZlY3Rvcg0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIHZlY3RvciBoYW5kbGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCAgQVQ5MUZfQUlDX1NldEV4Y2VwdGlvblZlY3RvciAoDQorCXVuc2lnbmVkIGludCAqcFZlY3RvciwgLy8gXGFyZyBwb2ludGVyIHRvIHRoZSBBSUMgcmVnaXN0ZXJzDQorCXZvaWQgKCpIYW5kbGVyKSAoKSApICAgLy8gXGFyZyBJbnRlcnJ1cHQgSGFuZGxlcg0KIHsNCi0gICAgdW5zaWduZWQgaW50IG9sZFZlY3RvciA9ICpwVmVjdG9yOw0KKwl1bnNpZ25lZCBpbnQgb2xkVmVjdG9yID0gKnBWZWN0b3I7DQogDQotICAgIGlmKCAoIHVuc2lnbmVkIGludCApIEhhbmRsZXIgPT0gKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19BSUNfQlJBTkNIX09QQ09ERSApDQotICAgIHsNCi0gICAgICAgICpwVmVjdG9yID0gKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19BSUNfQlJBTkNIX09QQ09ERTsNCi0gICAgfQ0KLSAgICBlbHNlDQotICAgIHsNCi0gICAgICAgICpwVmVjdG9yID0gKCAoICggKCAoIHVuc2lnbmVkIGludCApIEhhbmRsZXIgKSAtICggKCB1bnNpZ25lZCBpbnQgKSBwVmVjdG9yICkgLSAweDggKSA+PiAyICkgJiAweDAwRkZGRkZGICkgfCAweEVBMDAwMDAwOw0KLSAgICB9DQorCWlmICgodW5zaWduZWQgaW50KSBIYW5kbGVyID09ICh1bnNpZ25lZCBpbnQpIEFUOTFDX0FJQ19CUkFOQ0hfT1BDT0RFKQ0KKwkJKnBWZWN0b3IgPSAodW5zaWduZWQgaW50KSBBVDkxQ19BSUNfQlJBTkNIX09QQ09ERTsNCisJZWxzZQ0KKwkJKnBWZWN0b3IgPSAoKCgoKHVuc2lnbmVkIGludCkgSGFuZGxlcikgLSAoKHVuc2lnbmVkIGludCkgcFZlY3RvcikgLSAweDgpID4+IDIpICYgMHgwMEZGRkZGRikgfCAweEVBMDAwMDAwOw0KIA0KLSAgICByZXR1cm4gb2xkVmVjdG9yOw0KKwlyZXR1cm4gb2xkVmVjdG9yOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BSUNfVHJpZyAqLw0KLS8qKiBcYnJpZWYgVHJpZyBhbiBJVCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0FJQ19UcmlnKCBBVDkxUFNfQUlDIHBBaWMsICAgICAgLyogXGFyZyBwb2ludGVyIHRvIHRoZSBBSUMgcmVnaXN0ZXJzICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGlycV9pZCApIC8qIFxhcmcgaW50ZXJydXB0IG51bWJlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FJQ19UcmlnDQorLy8qIFxicmllZiBUcmlnIGFuIElUDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgIEFUOTFGX0FJQ19UcmlnICgNCisJQVQ5MVBTX0FJQyBwQWljLCAgICAgLy8gXGFyZyBwb2ludGVyIHRvIHRoZSBBSUMgcmVnaXN0ZXJzDQorCXVuc2lnbmVkIGludCBpcnFfaWQpIC8vIFxhcmcgaW50ZXJydXB0IG51bWJlcg0KIHsNCi0gICAgcEFpYy0+QUlDX0lTQ1IgPSAoIDB4MSA8PCBpcnFfaWQgKTsNCisJcEFpYy0+QUlDX0lTQ1IgPSAoMHgxIDw8IGlycV9pZCkgOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BSUNfSXNBY3RpdmUgKi8NCi0vKiogXGJyaWVmIFRlc3QgaWYgYW4gSVQgaXMgYWN0aXZlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BSUNfSXNBY3RpdmUoIEFUOTFQU19BSUMgcEFpYywgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gdGhlIEFJQyByZWdpc3RlcnMgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaXJxX2lkICkgLyogXGFyZyBJbnRlcnJ1cHQgTnVtYmVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUlDX0lzQWN0aXZlDQorLy8qIFxicmllZiBUZXN0IGlmIGFuIElUIGlzIGFjdGl2ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgIEFUOTFGX0FJQ19Jc0FjdGl2ZSAoDQorCUFUOTFQU19BSUMgcEFpYywgICAgIC8vIFxhcmcgcG9pbnRlciB0byB0aGUgQUlDIHJlZ2lzdGVycw0KKwl1bnNpZ25lZCBpbnQgaXJxX2lkKSAvLyBcYXJnIEludGVycnVwdCBOdW1iZXINCiB7DQotICAgIHJldHVybiggcEFpYy0+QUlDX0lTUiAmICggMHgxIDw8IGlycV9pZCApICk7DQorCXJldHVybiAocEFpYy0+QUlDX0lTUiAmICgweDEgPDwgaXJxX2lkKSk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FJQ19Jc1BlbmRpbmcgKi8NCi0vKiogXGJyaWVmIFRlc3QgaWYgYW4gSVQgaXMgcGVuZGluZyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQUlDX0lzUGVuZGluZyggQVQ5MVBTX0FJQyBwQWljLCAgICAgIC8qIFxhcmcgcG9pbnRlciB0byB0aGUgQUlDIHJlZ2lzdGVycyAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaXJxX2lkICkgLyogXGFyZyBJbnRlcnJ1cHQgTnVtYmVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUlDX0lzUGVuZGluZw0KKy8vKiBcYnJpZWYgVGVzdCBpZiBhbiBJVCBpcyBwZW5kaW5nDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCAgQVQ5MUZfQUlDX0lzUGVuZGluZyAoDQorCUFUOTFQU19BSUMgcEFpYywgICAgIC8vIFxhcmcgcG9pbnRlciB0byB0aGUgQUlDIHJlZ2lzdGVycw0KKwl1bnNpZ25lZCBpbnQgaXJxX2lkKSAvLyBcYXJnIEludGVycnVwdCBOdW1iZXINCiB7DQotICAgIHJldHVybiggcEFpYy0+QUlDX0lQUiAmICggMHgxIDw8IGlycV9pZCApICk7DQorCXJldHVybiAocEFpYy0+QUlDX0lQUiAmICgweDEgPDwgaXJxX2lkKSk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FJQ19PcGVuICovDQotLyoqIFxicmllZiBTZXQgZXhjZXB0aW9uIHZlY3RvcnMgYW5kIEFJQyByZWdpc3RlcnMgdG8gZGVmYXVsdCB2YWx1ZXMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9BSUNfT3BlbiggQVQ5MVBTX0FJQyBwQWljLCAgICAgICAgICAgICAgLyogXGFyZyBwb2ludGVyIHRvIHRoZSBBSUMgcmVnaXN0ZXJzICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoICogSXJxSGFuZGxlciApKCksICAgICAgLyogXGFyZyBEZWZhdWx0IElSUSB2ZWN0b3IgZXhjZXB0aW9uICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoICogRmlxSGFuZGxlciApKCksICAgICAgLyogXGFyZyBEZWZhdWx0IEZJUSB2ZWN0b3IgZXhjZXB0aW9uICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoICogRGVmYXVsdEhhbmRsZXIgKSgpLCAgLyogXGFyZyBEZWZhdWx0IEhhbmRsZXIgc2V0IGluIElTUiAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCAqIFNwdXJpb3VzSGFuZGxlciApKCksIC8qIFxhcmcgRGVmYXVsdCBTcHVyaW91cyBIYW5kbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHByb3RlY3RNb2RlICkgICAgLyogXGFyZyBEZWJ1ZyBDb250cm9sIFJlZ2lzdGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUlDX09wZW4NCisvLyogXGJyaWVmIFNldCBleGNlcHRpb24gdmVjdG9ycyBhbmQgQUlDIHJlZ2lzdGVycyB0byBkZWZhdWx0IHZhbHVlcw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FJQ19PcGVuKA0KKwlBVDkxUFNfQUlDIHBBaWMsICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gdGhlIEFJQyByZWdpc3RlcnMNCisJdm9pZCAoKklycUhhbmRsZXIpICgpLCAgLy8gXGFyZyBEZWZhdWx0IElSUSB2ZWN0b3IgZXhjZXB0aW9uDQorCXZvaWQgKCpGaXFIYW5kbGVyKSAoKSwgIC8vIFxhcmcgRGVmYXVsdCBGSVEgdmVjdG9yIGV4Y2VwdGlvbg0KKwl2b2lkICgqRGVmYXVsdEhhbmRsZXIpICAoKSwgLy8gXGFyZyBEZWZhdWx0IEhhbmRsZXIgc2V0IGluIElTUg0KKwl2b2lkICgqU3B1cmlvdXNIYW5kbGVyKSAoKSwgLy8gXGFyZyBEZWZhdWx0IFNwdXJpb3VzIEhhbmRsZXINCisJdW5zaWduZWQgaW50IHByb3RlY3RNb2RlKSAgIC8vIFxhcmcgRGVidWcgQ29udHJvbCBSZWdpc3Rlcg0KIHsNCi0gICAgaW50IGk7DQorCWludCBpOw0KIA0KLSAgICAvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzIGFuZCBzZXQgSVZSIHRvIHRoZSBkZWZhdWx0IGhhbmRsZXIgKi8NCi0gICAgZm9yKCBpID0gMDsgaSA8IDMyOyArK2kgKQ0KLSAgICB7DQotICAgICAgICBBVDkxRl9BSUNfRGlzYWJsZUl0KCBwQWljLCBpICk7DQotICAgICAgICBBVDkxRl9BSUNfQ29uZmlndXJlSXQoIHBBaWMsIGksIEFUOTFDX0FJQ19QUklPUl9MT1dFU1QsIEFUOTFDX0FJQ19TUkNUWVBFX0hJR0hfTEVWRUwsIERlZmF1bHRIYW5kbGVyICk7DQotICAgIH0NCisJLy8gRGlzYWJsZSBhbGwgaW50ZXJydXB0cyBhbmQgc2V0IElWUiB0byB0aGUgZGVmYXVsdCBoYW5kbGVyDQorCWZvciAoaSA9IDA7IGkgPCAzMjsgKytpKSB7DQorCQlBVDkxRl9BSUNfRGlzYWJsZUl0KHBBaWMsIGkpOw0KKwkJQVQ5MUZfQUlDX0NvbmZpZ3VyZUl0KHBBaWMsIGksIEFUOTFDX0FJQ19QUklPUl9MT1dFU1QsIEFUOTFDX0FJQ19TUkNUWVBFX0hJR0hfTEVWRUwsIERlZmF1bHRIYW5kbGVyKTsNCisJfQ0KIA0KLSAgICAvKiBTZXQgdGhlIElSUSBleGNlcHRpb24gdmVjdG9yICovDQotICAgIEFUOTFGX0FJQ19TZXRFeGNlcHRpb25WZWN0b3IoICggdW5zaWduZWQgaW50ICogKSAweDE4LCBJcnFIYW5kbGVyICk7DQotICAgIC8qIFNldCB0aGUgRmFzdCBJbnRlcnJ1cHQgZXhjZXB0aW9uIHZlY3RvciAqLw0KLSAgICBBVDkxRl9BSUNfU2V0RXhjZXB0aW9uVmVjdG9yKCAoIHVuc2lnbmVkIGludCAqICkgMHgxQywgRmlxSGFuZGxlciApOw0KKwkvLyBTZXQgdGhlIElSUSBleGNlcHRpb24gdmVjdG9yDQorCUFUOTFGX0FJQ19TZXRFeGNlcHRpb25WZWN0b3IoKHVuc2lnbmVkIGludCAqKSAweDE4LCBJcnFIYW5kbGVyKTsNCisJLy8gU2V0IHRoZSBGYXN0IEludGVycnVwdCBleGNlcHRpb24gdmVjdG9yDQorCUFUOTFGX0FJQ19TZXRFeGNlcHRpb25WZWN0b3IoKHVuc2lnbmVkIGludCAqKSAweDFDLCBGaXFIYW5kbGVyKTsNCiANCi0gICAgcEFpYy0+QUlDX1NQVSA9ICggdW5zaWduZWQgaW50ICkgU3B1cmlvdXNIYW5kbGVyOw0KLSAgICBwQWljLT5BSUNfRENSID0gcHJvdGVjdE1vZGU7DQorCXBBaWMtPkFJQ19TUFUgPSAodW5zaWduZWQgaW50KSBTcHVyaW91c0hhbmRsZXI7DQorCXBBaWMtPkFJQ19EQ1IgPSBwcm90ZWN0TW9kZTsNCit9DQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBQREMNCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BEQ19TZXROZXh0UngNCisvLyogXGJyaWVmIFNldCB0aGUgbmV4dCByZWNlaXZlIHRyYW5zZmVyIGRlc2NyaXB0b3INCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QRENfU2V0TmV4dFJ4ICgNCisJQVQ5MVBTX1BEQyBwUERDLCAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXINCisJY2hhciAqYWRkcmVzcywgICAgICAgLy8gXGFyZyBhZGRyZXNzIHRvIHRoZSBuZXh0IGJsb2MgdG8gYmUgcmVjZWl2ZWQNCisJdW5zaWduZWQgaW50IGJ5dGVzKSAgLy8gXGFyZyBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgcmVjZWl2ZWQNCit7DQorCXBQREMtPlBEQ19STlBSID0gKHVuc2lnbmVkIGludCkgYWRkcmVzczsNCisJcFBEQy0+UERDX1JOQ1IgPSBieXRlczsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUERDX1NldE5leHRUeA0KKy8vKiBcYnJpZWYgU2V0IHRoZSBuZXh0IHRyYW5zbWl0IHRyYW5zZmVyIGRlc2NyaXB0b3INCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QRENfU2V0TmV4dFR4ICgNCisJQVQ5MVBTX1BEQyBwUERDLCAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlcg0KKwljaGFyICphZGRyZXNzLCAgICAgICAgIC8vIFxhcmcgYWRkcmVzcyB0byB0aGUgbmV4dCBibG9jIHRvIGJlIHRyYW5zbWl0dGVkDQorCXVuc2lnbmVkIGludCBieXRlcykgICAgLy8gXGFyZyBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgdHJhbnNtaXR0ZWQNCit7DQorCXBQREMtPlBEQ19UTlBSID0gKHVuc2lnbmVkIGludCkgYWRkcmVzczsNCisJcFBEQy0+UERDX1ROQ1IgPSBieXRlczsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUERDX1NldFJ4DQorLy8qIFxicmllZiBTZXQgdGhlIHJlY2VpdmUgdHJhbnNmZXIgZGVzY3JpcHRvcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BEQ19TZXRSeCAoDQorCUFUOTFQU19QREMgcFBEQywgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXINCisJY2hhciAqYWRkcmVzcywgICAgICAgICAvLyBcYXJnIGFkZHJlc3MgdG8gdGhlIG5leHQgYmxvYyB0byBiZSByZWNlaXZlZA0KKwl1bnNpZ25lZCBpbnQgYnl0ZXMpICAgIC8vIFxhcmcgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHJlY2VpdmVkDQorew0KKwlwUERDLT5QRENfUlBSID0gKHVuc2lnbmVkIGludCkgYWRkcmVzczsNCisJcFBEQy0+UERDX1JDUiA9IGJ5dGVzOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QRENfU2V0VHgNCisvLyogXGJyaWVmIFNldCB0aGUgdHJhbnNtaXQgdHJhbnNmZXIgZGVzY3JpcHRvcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BEQ19TZXRUeCAoDQorCUFUOTFQU19QREMgcFBEQywgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXINCisJY2hhciAqYWRkcmVzcywgICAgICAgICAvLyBcYXJnIGFkZHJlc3MgdG8gdGhlIG5leHQgYmxvYyB0byBiZSB0cmFuc21pdHRlZA0KKwl1bnNpZ25lZCBpbnQgYnl0ZXMpICAgIC8vIFxhcmcgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHRyYW5zbWl0dGVkDQorew0KKwlwUERDLT5QRENfVFBSID0gKHVuc2lnbmVkIGludCkgYWRkcmVzczsNCisJcFBEQy0+UERDX1RDUiA9IGJ5dGVzOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QRENfRW5hYmxlVHgNCisvLyogXGJyaWVmIEVuYWJsZSB0cmFuc21pdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BEQ19FbmFibGVUeCAoDQorCUFUOTFQU19QREMgcFBEQyApICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyDQorew0KKwlwUERDLT5QRENfUFRDUiA9IEFUOTFDX1BEQ19UWFRFTjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUERDX0VuYWJsZVJ4DQorLy8qIFxicmllZiBFbmFibGUgcmVjZWl2ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BEQ19FbmFibGVSeCAoDQorCUFUOTFQU19QREMgcFBEQyApICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyDQorew0KKwlwUERDLT5QRENfUFRDUiA9IEFUOTFDX1BEQ19SWFRFTjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUERDX0Rpc2FibGVUeA0KKy8vKiBcYnJpZWYgRGlzYWJsZSB0cmFuc21pdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BEQ19EaXNhYmxlVHggKA0KKwlBVDkxUFNfUERDIHBQREMgKSAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlcg0KK3sNCisJcFBEQy0+UERDX1BUQ1IgPSBBVDkxQ19QRENfVFhURElTOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QRENfRGlzYWJsZVJ4DQorLy8qIFxicmllZiBEaXNhYmxlIHJlY2VpdmUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QRENfRGlzYWJsZVJ4ICgNCisJQVQ5MVBTX1BEQyBwUERDICkgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXINCit7DQorCXBQREMtPlBEQ19QVENSID0gQVQ5MUNfUERDX1JYVERJUzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUERDX0lzVHhFbXB0eQ0KKy8vKiBcYnJpZWYgVGVzdCBpZiB0aGUgY3VycmVudCB0cmFuc2ZlciBkZXNjcmlwdG9yIGhhcyBiZWVuIHNlbnQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1BEQ19Jc1R4RW1wdHkgKCAvLyBccmV0dXJuIHJldHVybiAxIGlmIHRyYW5zZmVyIGlzIGNvbXBsZXRlDQorCUFUOTFQU19QREMgcFBEQyApICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyDQorew0KKwlyZXR1cm4gIShwUERDLT5QRENfVENSKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUERDX0lzTmV4dFR4RW1wdHkNCisvLyogXGJyaWVmIFRlc3QgaWYgdGhlIG5leHQgdHJhbnNmZXIgZGVzY3JpcHRvciBoYXMgYmVlbiBtb3ZlZCB0byB0aGUgY3VycmVudCB0ZA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfUERDX0lzTmV4dFR4RW1wdHkgKCAvLyBccmV0dXJuIHJldHVybiAxIGlmIHRyYW5zZmVyIGlzIGNvbXBsZXRlDQorCUFUOTFQU19QREMgcFBEQyApICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyDQorew0KKwlyZXR1cm4gIShwUERDLT5QRENfVE5DUik7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BEQ19Jc1J4RW1wdHkNCisvLyogXGJyaWVmIFRlc3QgaWYgdGhlIGN1cnJlbnQgdHJhbnNmZXIgZGVzY3JpcHRvciBoYXMgYmVlbiBmaWxsZWQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1BEQ19Jc1J4RW1wdHkgKCAvLyBccmV0dXJuIHJldHVybiAxIGlmIHRyYW5zZmVyIGlzIGNvbXBsZXRlDQorCUFUOTFQU19QREMgcFBEQyApICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyDQorew0KKwlyZXR1cm4gIShwUERDLT5QRENfUkNSKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUERDX0lzTmV4dFJ4RW1wdHkNCisvLyogXGJyaWVmIFRlc3QgaWYgdGhlIG5leHQgdHJhbnNmZXIgZGVzY3JpcHRvciBoYXMgYmVlbiBtb3ZlZCB0byB0aGUgY3VycmVudCB0ZA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfUERDX0lzTmV4dFJ4RW1wdHkgKCAvLyBccmV0dXJuIHJldHVybiAxIGlmIHRyYW5zZmVyIGlzIGNvbXBsZXRlDQorCUFUOTFQU19QREMgcFBEQyApICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyDQorew0KKwlyZXR1cm4gIShwUERDLT5QRENfUk5DUik7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BEQ19PcGVuDQorLy8qIFxicmllZiBPcGVuIFBEQzogZGlzYWJsZSBUWCBhbmQgUlggcmVzZXQgdHJhbnNmZXIgZGVzY3JpcHRvcnMsIHJlLWVuYWJsZSBSWCBhbmQgVFgNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QRENfT3BlbiAoDQorCUFUOTFQU19QREMgcFBEQykgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXINCit7DQorICAgIC8vKiBEaXNhYmxlIHRoZSBSWCBhbmQgVFggUERDIHRyYW5zZmVyIHJlcXVlc3RzDQorCUFUOTFGX1BEQ19EaXNhYmxlUngocFBEQyk7DQorCUFUOTFGX1BEQ19EaXNhYmxlVHgocFBEQyk7DQorDQorCS8vKiBSZXNldCBhbGwgQ291bnRlciByZWdpc3RlciBOZXh0IGJ1ZmZlciBmaXJzdA0KKwlBVDkxRl9QRENfU2V0TmV4dFR4KHBQREMsIChjaGFyICopIDAsIDApOw0KKwlBVDkxRl9QRENfU2V0TmV4dFJ4KHBQREMsIChjaGFyICopIDAsIDApOw0KKwlBVDkxRl9QRENfU2V0VHgocFBEQywgKGNoYXIgKikgMCwgMCk7DQorCUFUOTFGX1BEQ19TZXRSeChwUERDLCAoY2hhciAqKSAwLCAwKTsNCisNCisgICAgLy8qIEVuYWJsZSB0aGUgUlggYW5kIFRYIFBEQyB0cmFuc2ZlciByZXF1ZXN0cw0KKwlBVDkxRl9QRENfRW5hYmxlUngocFBEQyk7DQorCUFUOTFGX1BEQ19FbmFibGVUeChwUERDKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUERDX0Nsb3NlDQorLy8qIFxicmllZiBDbG9zZSBQREM6IGRpc2FibGUgVFggYW5kIFJYIHJlc2V0IHRyYW5zZmVyIGRlc2NyaXB0b3JzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUERDX0Nsb3NlICgNCisJQVQ5MVBTX1BEQyBwUERDKSAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlcg0KK3sNCisgICAgLy8qIERpc2FibGUgdGhlIFJYIGFuZCBUWCBQREMgdHJhbnNmZXIgcmVxdWVzdHMNCisJQVQ5MUZfUERDX0Rpc2FibGVSeChwUERDKTsNCisJQVQ5MUZfUERDX0Rpc2FibGVUeChwUERDKTsNCisNCisJLy8qIFJlc2V0IGFsbCBDb3VudGVyIHJlZ2lzdGVyIE5leHQgYnVmZmVyIGZpcnN0DQorCUFUOTFGX1BEQ19TZXROZXh0VHgocFBEQywgKGNoYXIgKikgMCwgMCk7DQorCUFUOTFGX1BEQ19TZXROZXh0UngocFBEQywgKGNoYXIgKikgMCwgMCk7DQorCUFUOTFGX1BEQ19TZXRUeChwUERDLCAoY2hhciAqKSAwLCAwKTsNCisJQVQ5MUZfUERDX1NldFJ4KHBQREMsIChjaGFyICopIDAsIDApOw0KKw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QRENfU2VuZEZyYW1lDQorLy8qIFxicmllZiBDbG9zZSBQREM6IGRpc2FibGUgVFggYW5kIFJYIHJlc2V0IHRyYW5zZmVyIGRlc2NyaXB0b3JzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QRENfU2VuZEZyYW1lKA0KKwlBVDkxUFNfUERDIHBQREMsDQorCWNoYXIgKnBCdWZmZXIsDQorCXVuc2lnbmVkIGludCBzekJ1ZmZlciwNCisJY2hhciAqcE5leHRCdWZmZXIsDQorCXVuc2lnbmVkIGludCBzek5leHRCdWZmZXIgKQ0KK3sNCisJaWYgKEFUOTFGX1BEQ19Jc1R4RW1wdHkocFBEQykpIHsNCisJCS8vKiBCdWZmZXIgYW5kIG5leHQgYnVmZmVyIGNhbiBiZSBpbml0aWFsaXplZA0KKwkJQVQ5MUZfUERDX1NldFR4KHBQREMsIHBCdWZmZXIsIHN6QnVmZmVyKTsNCisJCUFUOTFGX1BEQ19TZXROZXh0VHgocFBEQywgcE5leHRCdWZmZXIsIHN6TmV4dEJ1ZmZlcik7DQorCQlyZXR1cm4gMjsNCisJfQ0KKwllbHNlIGlmIChBVDkxRl9QRENfSXNOZXh0VHhFbXB0eShwUERDKSkgew0KKwkJLy8qIE9ubHkgb25lIGJ1ZmZlciBjYW4gYmUgaW5pdGlhbGl6ZWQNCisJCUFUOTFGX1BEQ19TZXROZXh0VHgocFBEQywgcEJ1ZmZlciwgc3pCdWZmZXIpOw0KKwkJcmV0dXJuIDE7DQorCX0NCisJZWxzZSB7DQorCQkvLyogQWxsIGJ1ZmZlciBhcmUgaW4gdXNlLi4uDQorCQlyZXR1cm4gMDsNCisJfQ0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QRENfUmVjZWl2ZUZyYW1lDQorLy8qIFxicmllZiBDbG9zZSBQREM6IGRpc2FibGUgVFggYW5kIFJYIHJlc2V0IHRyYW5zZmVyIGRlc2NyaXB0b3JzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QRENfUmVjZWl2ZUZyYW1lICgNCisJQVQ5MVBTX1BEQyBwUERDLA0KKwljaGFyICpwQnVmZmVyLA0KKwl1bnNpZ25lZCBpbnQgc3pCdWZmZXIsDQorCWNoYXIgKnBOZXh0QnVmZmVyLA0KKwl1bnNpZ25lZCBpbnQgc3pOZXh0QnVmZmVyICkNCit7DQorCWlmIChBVDkxRl9QRENfSXNSeEVtcHR5KHBQREMpKSB7DQorCQkvLyogQnVmZmVyIGFuZCBuZXh0IGJ1ZmZlciBjYW4gYmUgaW5pdGlhbGl6ZWQNCisJCUFUOTFGX1BEQ19TZXRSeChwUERDLCBwQnVmZmVyLCBzekJ1ZmZlcik7DQorCQlBVDkxRl9QRENfU2V0TmV4dFJ4KHBQREMsIHBOZXh0QnVmZmVyLCBzek5leHRCdWZmZXIpOw0KKwkJcmV0dXJuIDI7DQorCX0NCisJZWxzZSBpZiAoQVQ5MUZfUERDX0lzTmV4dFJ4RW1wdHkocFBEQykpIHsNCisJCS8vKiBPbmx5IG9uZSBidWZmZXIgY2FuIGJlIGluaXRpYWxpemVkDQorCQlBVDkxRl9QRENfU2V0TmV4dFJ4KHBQREMsIHBCdWZmZXIsIHN6QnVmZmVyKTsNCisJCXJldHVybiAxOw0KKwl9DQorCWVsc2Ugew0KKwkJLy8qIEFsbCBidWZmZXIgYXJlIGluIHVzZS4uLg0KKwkJcmV0dXJuIDA7DQorCX0NCit9DQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBEQkdVDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9EQkdVX0ludGVycnVwdEVuYWJsZQ0KKy8vKiBcYnJpZWYgRW5hYmxlIERCR1UgSW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfREJHVV9JbnRlcnJ1cHRFbmFibGUoDQorICAgICAgICBBVDkxUFNfREJHVSBwRGJndSwgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgREJHVSBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZGJndSBpbnRlcnJ1cHQgdG8gYmUgZW5hYmxlZA0KK3sNCisgICAgICAgIHBEYmd1LT5EQkdVX0lFUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0RCR1VfSW50ZXJydXB0RGlzYWJsZQ0KKy8vKiBcYnJpZWYgRGlzYWJsZSBEQkdVIEludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0RCR1VfSW50ZXJydXB0RGlzYWJsZSgNCisgICAgICAgIEFUOTFQU19EQkdVIHBEYmd1LCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBEQkdVIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBkYmd1IGludGVycnVwdCB0byBiZSBkaXNhYmxlZA0KK3sNCisgICAgICAgIHBEYmd1LT5EQkdVX0lEUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0RCR1VfR2V0SW50ZXJydXB0TWFza1N0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIERCR1UgSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9EQkdVX0dldEludGVycnVwdE1hc2tTdGF0dXMoIC8vIFxyZXR1cm4gREJHVSBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisgICAgICAgIEFUOTFQU19EQkdVIHBEYmd1KSAvLyBcYXJnICBwb2ludGVyIHRvIGEgREJHVSBjb250cm9sbGVyDQorew0KKyAgICAgICAgcmV0dXJuIHBEYmd1LT5EQkdVX0lNUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfREJHVV9Jc0ludGVycnVwdE1hc2tlZA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBEQkdVIEludGVycnVwdCBpcyBNYXNrZWQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX0RCR1VfSXNJbnRlcnJ1cHRNYXNrZWQoDQorICAgICAgICBBVDkxUFNfREJHVSBwRGJndSwgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgREJHVSBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorICAgICAgICByZXR1cm4gKEFUOTFGX0RCR1VfR2V0SW50ZXJydXB0TWFza1N0YXR1cyhwRGJndSkgJiBmbGFnKTsNCiB9DQogDQogLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0qICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBQREMNCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BEQ19TZXROZXh0UnggKi8NCi0vKiogXGJyaWVmIFNldCB0aGUgbmV4dCByZWNlaXZlIHRyYW5zZmVyIGRlc2NyaXB0b3IgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QRENfU2V0TmV4dFJ4KCBBVDkxUFNfUERDIHBQREMsICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqIGFkZHJlc3MsICAgICAgLyogXGFyZyBhZGRyZXNzIHRvIHRoZSBuZXh0IGJsb2MgdG8gYmUgcmVjZWl2ZWQgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBieXRlcyApIC8qIFxhcmcgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHJlY2VpdmVkICovDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgUElPDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fQ2ZnUGVyaXBoDQorLy8qIFxicmllZiBFbmFibGUgcGlucyB0byBiZSBkcml2ZWQgYnkgcGVyaXBoZXJhbA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19DZmdQZXJpcGgoDQorCUFUOTFQU19QSU8gcFBpbywgICAgICAgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IHBlcmlwaEFFbmFibGUsICAvLyBcYXJnIFBFUklQSCBBIHRvIGVuYWJsZQ0KKwl1bnNpZ25lZCBpbnQgcGVyaXBoQkVuYWJsZSkgIC8vIFxhcmcgUEVSSVBIIEIgdG8gZW5hYmxlDQorDQogew0KLSAgICBwUERDLT5QRENfUk5QUiA9ICggdW5zaWduZWQgaW50ICkgYWRkcmVzczsNCi0gICAgcFBEQy0+UERDX1JOQ1IgPSBieXRlczsNCisJcFBpby0+UElPX0FTUiA9IHBlcmlwaEFFbmFibGU7DQorCXBQaW8tPlBJT19CU1IgPSBwZXJpcGhCRW5hYmxlOw0KKwlwUGlvLT5QSU9fUERSID0gKHBlcmlwaEFFbmFibGUgfCBwZXJpcGhCRW5hYmxlKTsgLy8gU2V0IGluIFBlcmlwaCBtb2RlDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BEQ19TZXROZXh0VHggKi8NCi0vKiogXGJyaWVmIFNldCB0aGUgbmV4dCB0cmFuc21pdCB0cmFuc2ZlciBkZXNjcmlwdG9yICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUERDX1NldE5leHRUeCggQVQ5MVBTX1BEQyBwUERDLCAgICAgLyogXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBhZGRyZXNzLCAgICAgIC8qIFxhcmcgYWRkcmVzcyB0byB0aGUgbmV4dCBibG9jIHRvIGJlIHRyYW5zbWl0dGVkICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYnl0ZXMgKSAvKiBcYXJnIG51bWJlciBvZiBieXRlcyB0byBiZSB0cmFuc21pdHRlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19DZmdPdXRwdXQNCisvLyogXGJyaWVmIEVuYWJsZSBQSU8gaW4gb3V0cHV0IG1vZGUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fQ2ZnT3V0cHV0KA0KKwlBVDkxUFNfUElPIHBQaW8sICAgICAgICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBwaW9FbmFibGUpICAgICAgLy8gXGFyZyBQSU8gdG8gYmUgZW5hYmxlZA0KIHsNCi0gICAgcFBEQy0+UERDX1ROUFIgPSAoIHVuc2lnbmVkIGludCApIGFkZHJlc3M7DQotICAgIHBQREMtPlBEQ19UTkNSID0gYnl0ZXM7DQorCXBQaW8tPlBJT19QRVIgPSBwaW9FbmFibGU7IC8vIFNldCBpbiBQSU8gbW9kZQ0KKwlwUGlvLT5QSU9fT0VSID0gcGlvRW5hYmxlOyAvLyBDb25maWd1cmUgaW4gT3V0cHV0DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BEQ19TZXRSeCAqLw0KLS8qKiBcYnJpZWYgU2V0IHRoZSByZWNlaXZlIHRyYW5zZmVyIGRlc2NyaXB0b3IgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QRENfU2V0UngoIEFUOTFQU19QREMgcFBEQywgICAgIC8qIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBhZGRyZXNzLCAgICAgIC8qIFxhcmcgYWRkcmVzcyB0byB0aGUgbmV4dCBibG9jIHRvIGJlIHJlY2VpdmVkICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBieXRlcyApIC8qIFxhcmcgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHJlY2VpdmVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0NmZ0lucHV0DQorLy8qIFxicmllZiBFbmFibGUgUElPIGluIGlucHV0IG1vZGUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fQ2ZnSW5wdXQoDQorCUFUOTFQU19QSU8gcFBpbywgICAgICAgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGlucHV0RW5hYmxlKSAgICAgIC8vIFxhcmcgUElPIHRvIGJlIGVuYWJsZWQNCiB7DQotICAgIHBQREMtPlBEQ19SUFIgPSAoIHVuc2lnbmVkIGludCApIGFkZHJlc3M7DQotICAgIHBQREMtPlBEQ19SQ1IgPSBieXRlczsNCisJLy8gRGlzYWJsZSBvdXRwdXQNCisJcFBpby0+UElPX09EUiAgPSBpbnB1dEVuYWJsZTsNCisJcFBpby0+UElPX1BFUiAgPSBpbnB1dEVuYWJsZTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUERDX1NldFR4ICovDQotLyoqIFxicmllZiBTZXQgdGhlIHRyYW5zbWl0IHRyYW5zZmVyIGRlc2NyaXB0b3IgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QRENfU2V0VHgoIEFUOTFQU19QREMgcFBEQywgICAgIC8qIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBhZGRyZXNzLCAgICAgIC8qIFxhcmcgYWRkcmVzcyB0byB0aGUgbmV4dCBibG9jIHRvIGJlIHRyYW5zbWl0dGVkICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBieXRlcyApIC8qIFxhcmcgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHRyYW5zbWl0dGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0NmZ09wZW5kcmFpbg0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBpbiBvcGVuIGRyYWluDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX0NmZ09wZW5kcmFpbigNCisJQVQ5MVBTX1BJTyBwUGlvLCAgICAgICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgbXVsdGlEcnZFbmFibGUpIC8vIFxhcmcgcGlvIHRvIGJlIGNvbmZpZ3VyZWQgaW4gb3BlbiBkcmFpbg0KIHsNCi0gICAgcFBEQy0+UERDX1RQUiA9ICggdW5zaWduZWQgaW50ICkgYWRkcmVzczsNCi0gICAgcFBEQy0+UERDX1RDUiA9IGJ5dGVzOw0KKwkvLyBDb25maWd1cmUgdGhlIG11bHRpLWRyaXZlIG9wdGlvbg0KKwlwUGlvLT5QSU9fTUREUiA9IH5tdWx0aURydkVuYWJsZTsNCisJcFBpby0+UElPX01ERVIgPSBtdWx0aURydkVuYWJsZTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUERDX0VuYWJsZVR4ICovDQotLyoqIFxicmllZiBFbmFibGUgdHJhbnNtaXQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QRENfRW5hYmxlVHgoIEFUOTFQU19QREMgcFBEQyApIC8qIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0NmZ1B1bGx1cA0KKy8vKiBcYnJpZWYgRW5hYmxlIHB1bGx1cCBvbiBQSU8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fQ2ZnUHVsbHVwKA0KKwlBVDkxUFNfUElPIHBQaW8sICAgICAgICAgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBwdWxsdXBFbmFibGUpICAgLy8gXGFyZyBlbmFibGUgcHVsbHVwIG9uIFBJTw0KIHsNCi0gICAgcFBEQy0+UERDX1BUQ1IgPSBBVDkxQ19QRENfVFhURU47DQorCQkvLyBDb25uZWN0IG9yIG5vdCBQdWxsdXANCisJcFBpby0+UElPX1BQVURSID0gfnB1bGx1cEVuYWJsZTsNCisJcFBpby0+UElPX1BQVUVSID0gcHVsbHVwRW5hYmxlOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QRENfRW5hYmxlUnggKi8NCi0vKiogXGJyaWVmIEVuYWJsZSByZWNlaXZlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUERDX0VuYWJsZVJ4KCBBVDkxUFNfUERDIHBQREMgKSAvKiBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19DZmdEaXJlY3REcml2ZQ0KKy8vKiBcYnJpZWYgRW5hYmxlIGRpcmVjdCBkcml2ZSBvbiBQSU8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fQ2ZnRGlyZWN0RHJpdmUoDQorCUFUOTFQU19QSU8gcFBpbywgICAgICAgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGRpcmVjdERyaXZlKSAgICAvLyBcYXJnIFBJTyB0byBiZSBjb25maWd1cmVkIHdpdGggZGlyZWN0IGRyaXZlDQorDQogew0KLSAgICBwUERDLT5QRENfUFRDUiA9IEFUOTFDX1BEQ19SWFRFTjsNCisJLy8gQ29uZmlndXJlIHRoZSBEaXJlY3QgRHJpdmUNCisJcFBpby0+UElPX09XRFIgID0gfmRpcmVjdERyaXZlOw0KKwlwUGlvLT5QSU9fT1dFUiAgPSBkaXJlY3REcml2ZTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUERDX0Rpc2FibGVUeCAqLw0KLS8qKiBcYnJpZWYgRGlzYWJsZSB0cmFuc21pdCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BEQ19EaXNhYmxlVHgoIEFUOTFQU19QREMgcFBEQyApIC8qIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0NmZ0lucHV0RmlsdGVyDQorLy8qIFxicmllZiBFbmFibGUgaW5wdXQgZmlsdGVyIG9uIGlucHV0IFBJTw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19DZmdJbnB1dEZpbHRlcigNCisJQVQ5MVBTX1BJTyBwUGlvLCAgICAgICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgaW5wdXRGaWx0ZXIpICAgIC8vIFxhcmcgUElPIHRvIGJlIGNvbmZpZ3VyZWQgd2l0aCBpbnB1dCBmaWx0ZXINCisNCiB7DQotICAgIHBQREMtPlBEQ19QVENSID0gQVQ5MUNfUERDX1RYVERJUzsNCisJLy8gQ29uZmlndXJlIHRoZSBEaXJlY3QgRHJpdmUNCisJcFBpby0+UElPX0lGRFIgID0gfmlucHV0RmlsdGVyOw0KKwlwUGlvLT5QSU9fSUZFUiAgPSBpbnB1dEZpbHRlcjsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUERDX0Rpc2FibGVSeCAqLw0KLS8qKiBcYnJpZWYgRGlzYWJsZSByZWNlaXZlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUERDX0Rpc2FibGVSeCggQVQ5MVBTX1BEQyBwUERDICkgLyogXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fR2V0SW5wdXQNCisvLyogXGJyaWVmIFJldHVybiBQSU8gaW5wdXQgdmFsdWUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJT19HZXRJbnB1dCggLy8gXHJldHVybiBQSU8gaW5wdXQNCisJQVQ5MVBTX1BJTyBwUGlvKSAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCiB7DQotICAgIHBQREMtPlBEQ19QVENSID0gQVQ5MUNfUERDX1JYVERJUzsNCisJcmV0dXJuIHBQaW8tPlBJT19QRFNSOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QRENfSXNUeEVtcHR5ICovDQotLyoqIFxicmllZiBUZXN0IGlmIHRoZSBjdXJyZW50IHRyYW5zZmVyIGRlc2NyaXB0b3IgaGFzIGJlZW4gc2VudCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSBpbnQgQVQ5MUZfUERDX0lzVHhFbXB0eSggLyogXHJldHVybiByZXR1cm4gMSBpZiB0cmFuc2ZlciBpcyBjb21wbGV0ZSAqLw0KLSAgICBBVDkxUFNfUERDIHBQREMgKSAgICAgICAgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19Jc0lucHV0U2V0DQorLy8qIFxicmllZiBUZXN0IGlmIFBJTyBpcyBpbnB1dCBmbGFnIGlzIGFjdGl2ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfUElPX0lzSW5wdXRTZXQoDQorCUFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQogew0KLSAgICByZXR1cm4gISggcFBEQy0+UERDX1RDUiApOw0KKwlyZXR1cm4gKEFUOTFGX1BJT19HZXRJbnB1dChwUGlvKSAmIGZsYWcpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QRENfSXNOZXh0VHhFbXB0eSAqLw0KLS8qKiBcYnJpZWYgVGVzdCBpZiB0aGUgbmV4dCB0cmFuc2ZlciBkZXNjcmlwdG9yIGhhcyBiZWVuIG1vdmVkIHRvIHRoZSBjdXJyZW50IHRkICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIGludCBBVDkxRl9QRENfSXNOZXh0VHhFbXB0eSggLyogXHJldHVybiByZXR1cm4gMSBpZiB0cmFuc2ZlciBpcyBjb21wbGV0ZSAqLw0KLSAgICBBVDkxUFNfUERDIHBQREMgKSAgICAgICAgICAgICAgICAgLyogXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXIgKi8NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fU2V0T3V0cHV0DQorLy8qIFxicmllZiBTZXQgdG8gMSBvdXRwdXQgUElPDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX1NldE91dHB1dCgNCisJQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgb3V0cHV0IHRvIGJlIHNldA0KIHsNCi0gICAgcmV0dXJuICEoIHBQREMtPlBEQ19UTkNSICk7DQorCXBQaW8tPlBJT19TT0RSID0gZmxhZzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUERDX0lzUnhFbXB0eSAqLw0KLS8qKiBcYnJpZWYgVGVzdCBpZiB0aGUgY3VycmVudCB0cmFuc2ZlciBkZXNjcmlwdG9yIGhhcyBiZWVuIGZpbGxlZCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSBpbnQgQVQ5MUZfUERDX0lzUnhFbXB0eSggLyogXHJldHVybiByZXR1cm4gMSBpZiB0cmFuc2ZlciBpcyBjb21wbGV0ZSAqLw0KLSAgICBBVDkxUFNfUERDIHBQREMgKSAgICAgICAgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBQREMgY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19DbGVhck91dHB1dA0KKy8vKiBcYnJpZWYgU2V0IHRvIDAgb3V0cHV0IFBJTw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19DbGVhck91dHB1dCgNCisJQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgb3V0cHV0IHRvIGJlIGNsZWFyZWQNCiB7DQotICAgIHJldHVybiAhKCBwUERDLT5QRENfUkNSICk7DQorCXBQaW8tPlBJT19DT0RSID0gZmxhZzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUERDX0lzTmV4dFJ4RW1wdHkgKi8NCi0vKiogXGJyaWVmIFRlc3QgaWYgdGhlIG5leHQgdHJhbnNmZXIgZGVzY3JpcHRvciBoYXMgYmVlbiBtb3ZlZCB0byB0aGUgY3VycmVudCB0ZCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSBpbnQgQVQ5MUZfUERDX0lzTmV4dFJ4RW1wdHkoIC8qIFxyZXR1cm4gcmV0dXJuIDEgaWYgdHJhbnNmZXIgaXMgY29tcGxldGUgKi8NCi0gICAgQVQ5MVBTX1BEQyBwUERDICkgICAgICAgICAgICAgICAgIC8qIFxhcmcgcG9pbnRlciB0byBhIFBEQyBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0ZvcmNlT3V0cHV0DQorLy8qIFxicmllZiBGb3JjZSBvdXRwdXQgd2hlbiBEaXJlY3QgZHJpdmUgb3B0aW9uIGlzIGVuYWJsZWQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fRm9yY2VPdXRwdXQoDQorCUFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIG91dHB1dCB0byBiZSBmb3JjZWQNCiB7DQotICAgIHJldHVybiAhKCBwUERDLT5QRENfUk5DUiApOw0KKwlwUGlvLT5QSU9fT0RTUiA9IGZsYWc7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BEQ19PcGVuICovDQotLyoqIFxicmllZiBPcGVuIFBEQzogZGlzYWJsZSBUWCBhbmQgUlggcmVzZXQgdHJhbnNmZXIgZGVzY3JpcHRvcnMsIHJlLWVuYWJsZSBSWCBhbmQgVFggKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QRENfT3BlbiggQVQ5MVBTX1BEQyBwUERDICkgLyogXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fRW5hYmxlDQorLy8qIFxicmllZiBFbmFibGUgUElPDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX0VuYWJsZSgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBwaW8gdG8gYmUgZW5hYmxlZA0KIHsNCi0gICAgLyoqIERpc2FibGUgdGhlIFJYIGFuZCBUWCBQREMgdHJhbnNmZXIgcmVxdWVzdHMgKi8NCi0gICAgQVQ5MUZfUERDX0Rpc2FibGVSeCggcFBEQyApOw0KLSAgICBBVDkxRl9QRENfRGlzYWJsZVR4KCBwUERDICk7DQotDQotICAgIC8qKiBSZXNldCBhbGwgQ291bnRlciByZWdpc3RlciBOZXh0IGJ1ZmZlciBmaXJzdCAqLw0KLSAgICBBVDkxRl9QRENfU2V0TmV4dFR4KCBwUERDLCAoIGNoYXIgKiApIDAsIDAgKTsNCi0gICAgQVQ5MUZfUERDX1NldE5leHRSeCggcFBEQywgKCBjaGFyICogKSAwLCAwICk7DQotICAgIEFUOTFGX1BEQ19TZXRUeCggcFBEQywgKCBjaGFyICogKSAwLCAwICk7DQotICAgIEFUOTFGX1BEQ19TZXRSeCggcFBEQywgKCBjaGFyICogKSAwLCAwICk7DQotDQotICAgIC8qKiBFbmFibGUgdGhlIFJYIGFuZCBUWCBQREMgdHJhbnNmZXIgcmVxdWVzdHMgKi8NCi0gICAgQVQ5MUZfUERDX0VuYWJsZVJ4KCBwUERDICk7DQotICAgIEFUOTFGX1BEQ19FbmFibGVUeCggcFBEQyApOw0KKyAgICAgICAgcFBpby0+UElPX1BFUiA9IGZsYWc7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BEQ19DbG9zZSAqLw0KLS8qKiBcYnJpZWYgQ2xvc2UgUERDOiBkaXNhYmxlIFRYIGFuZCBSWCByZXNldCB0cmFuc2ZlciBkZXNjcmlwdG9ycyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BEQ19DbG9zZSggQVQ5MVBTX1BEQyBwUERDICkgLyogXGFyZyBwb2ludGVyIHRvIGEgUERDIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fRGlzYWJsZQ0KKy8vKiBcYnJpZWYgRGlzYWJsZSBQSU8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fRGlzYWJsZSgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBwaW8gdG8gYmUgZGlzYWJsZWQNCiB7DQotICAgIC8qKiBEaXNhYmxlIHRoZSBSWCBhbmQgVFggUERDIHRyYW5zZmVyIHJlcXVlc3RzICovDQotICAgIEFUOTFGX1BEQ19EaXNhYmxlUngoIHBQREMgKTsNCi0gICAgQVQ5MUZfUERDX0Rpc2FibGVUeCggcFBEQyApOw0KLQ0KLSAgICAvKiogUmVzZXQgYWxsIENvdW50ZXIgcmVnaXN0ZXIgTmV4dCBidWZmZXIgZmlyc3QgKi8NCi0gICAgQVQ5MUZfUERDX1NldE5leHRUeCggcFBEQywgKCBjaGFyICogKSAwLCAwICk7DQotICAgIEFUOTFGX1BEQ19TZXROZXh0UngoIHBQREMsICggY2hhciAqICkgMCwgMCApOw0KLSAgICBBVDkxRl9QRENfU2V0VHgoIHBQREMsICggY2hhciAqICkgMCwgMCApOw0KLSAgICBBVDkxRl9QRENfU2V0UngoIHBQREMsICggY2hhciAqICkgMCwgMCApOw0KKyAgICAgICAgcFBpby0+UElPX1BEUiA9IGZsYWc7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BEQ19TZW5kRnJhbWUgKi8NCi0vKiogXGJyaWVmIENsb3NlIFBEQzogZGlzYWJsZSBUWCBhbmQgUlggcmVzZXQgdHJhbnNmZXIgZGVzY3JpcHRvcnMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BEQ19TZW5kRnJhbWUoIEFUOTFQU19QREMgcFBEQywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqIHBCdWZmZXIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzekJ1ZmZlciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqIHBOZXh0QnVmZmVyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3pOZXh0QnVmZmVyICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fR2V0U3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gUElPIFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElPX0dldFN0YXR1cyggLy8gXHJldHVybiBQSU8gU3RhdHVzDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8pIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KIHsNCi0gICAgaWYoIEFUOTFGX1BEQ19Jc1R4RW1wdHkoIHBQREMgKSApDQotICAgIHsNCi0gICAgICAgIC8qKiBCdWZmZXIgYW5kIG5leHQgYnVmZmVyIGNhbiBiZSBpbml0aWFsaXplZCAqLw0KLSAgICAgICAgQVQ5MUZfUERDX1NldFR4KCBwUERDLCBwQnVmZmVyLCBzekJ1ZmZlciApOw0KLSAgICAgICAgQVQ5MUZfUERDX1NldE5leHRUeCggcFBEQywgcE5leHRCdWZmZXIsIHN6TmV4dEJ1ZmZlciApOw0KLSAgICAgICAgcmV0dXJuIDI7DQotICAgIH0NCi0gICAgZWxzZSBpZiggQVQ5MUZfUERDX0lzTmV4dFR4RW1wdHkoIHBQREMgKSApDQotICAgIHsNCi0gICAgICAgIC8qKiBPbmx5IG9uZSBidWZmZXIgY2FuIGJlIGluaXRpYWxpemVkICovDQotICAgICAgICBBVDkxRl9QRENfU2V0TmV4dFR4KCBwUERDLCBwQnVmZmVyLCBzekJ1ZmZlciApOw0KLSAgICAgICAgcmV0dXJuIDE7DQotICAgIH0NCi0gICAgZWxzZQ0KLSAgICB7DQotICAgICAgICAvKiogQWxsIGJ1ZmZlciBhcmUgaW4gdXNlLi4uICovDQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KKyAgICAgICAgcmV0dXJuIHBQaW8tPlBJT19QU1I7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BEQ19SZWNlaXZlRnJhbWUgKi8NCi0vKiogXGJyaWVmIENsb3NlIFBEQzogZGlzYWJsZSBUWCBhbmQgUlggcmVzZXQgdHJhbnNmZXIgZGVzY3JpcHRvcnMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BEQ19SZWNlaXZlRnJhbWUoIEFUOTFQU19QREMgcFBEQywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqIHBCdWZmZXIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzekJ1ZmZlciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqIHBOZXh0QnVmZmVyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3pOZXh0QnVmZmVyICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fSXNTZXQNCisvLyogXGJyaWVmIFRlc3QgaWYgUElPIGlzIFNldA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfUElPX0lzU2V0KA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQogew0KLSAgICBpZiggQVQ5MUZfUERDX0lzUnhFbXB0eSggcFBEQyApICkNCi0gICAgew0KLSAgICAgICAgLyoqIEJ1ZmZlciBhbmQgbmV4dCBidWZmZXIgY2FuIGJlIGluaXRpYWxpemVkICovDQotICAgICAgICBBVDkxRl9QRENfU2V0UngoIHBQREMsIHBCdWZmZXIsIHN6QnVmZmVyICk7DQotICAgICAgICBBVDkxRl9QRENfU2V0TmV4dFJ4KCBwUERDLCBwTmV4dEJ1ZmZlciwgc3pOZXh0QnVmZmVyICk7DQotICAgICAgICByZXR1cm4gMjsNCi0gICAgfQ0KLSAgICBlbHNlIGlmKCBBVDkxRl9QRENfSXNOZXh0UnhFbXB0eSggcFBEQyApICkNCi0gICAgew0KLSAgICAgICAgLyoqIE9ubHkgb25lIGJ1ZmZlciBjYW4gYmUgaW5pdGlhbGl6ZWQgKi8NCi0gICAgICAgIEFUOTFGX1BEQ19TZXROZXh0UngoIHBQREMsIHBCdWZmZXIsIHN6QnVmZmVyICk7DQotICAgICAgICByZXR1cm4gMTsNCi0gICAgfQ0KLSAgICBlbHNlDQotICAgIHsNCi0gICAgICAgIC8qKiBBbGwgYnVmZmVyIGFyZSBpbiB1c2UuLi4gKi8NCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQorICAgICAgICByZXR1cm4gKEFUOTFGX1BJT19HZXRTdGF0dXMocFBpbykgJiBmbGFnKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX091dHB1dEVuYWJsZQ0KKy8vKiBcYnJpZWYgT3V0cHV0IEVuYWJsZSBQSU8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fT3V0cHV0RW5hYmxlKA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIHBpbyBvdXRwdXQgdG8gYmUgZW5hYmxlZA0KK3sNCisgICAgICAgIHBQaW8tPlBJT19PRVIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fT3V0cHV0RGlzYWJsZQ0KKy8vKiBcYnJpZWYgT3V0cHV0IEVuYWJsZSBQSU8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fT3V0cHV0RGlzYWJsZSgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBwaW8gb3V0cHV0IHRvIGJlIGRpc2FibGVkDQorew0KKyAgICAgICAgcFBpby0+UElPX09EUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19HZXRPdXRwdXRTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBQSU8gT3V0cHV0IFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElPX0dldE91dHB1dFN0YXR1cyggLy8gXHJldHVybiBQSU8gT3V0cHV0IFN0YXR1cw0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvKSAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCit7DQorICAgICAgICByZXR1cm4gcFBpby0+UElPX09TUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0lzT3VwdXRTZXQNCisvLyogXGJyaWVmIFRlc3QgaWYgUElPIE91dHB1dCBpcyBTZXQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1BJT19Jc091dHB1dFNldCgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisgICAgICAgIHJldHVybiAoQVQ5MUZfUElPX0dldE91dHB1dFN0YXR1cyhwUGlvKSAmIGZsYWcpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fSW5wdXRGaWx0ZXJFbmFibGUNCisvLyogXGJyaWVmIElucHV0IEZpbHRlciBFbmFibGUgUElPDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX0lucHV0RmlsdGVyRW5hYmxlKA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIHBpbyBpbnB1dCBmaWx0ZXIgdG8gYmUgZW5hYmxlZA0KK3sNCisgICAgICAgIHBQaW8tPlBJT19JRkVSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0lucHV0RmlsdGVyRGlzYWJsZQ0KKy8vKiBcYnJpZWYgSW5wdXQgRmlsdGVyIERpc2FibGUgUElPDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX0lucHV0RmlsdGVyRGlzYWJsZSgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBwaW8gaW5wdXQgZmlsdGVyIHRvIGJlIGRpc2FibGVkDQorew0KKyAgICAgICAgcFBpby0+UElPX0lGRFIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fR2V0SW5wdXRGaWx0ZXJTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBQSU8gSW5wdXQgRmlsdGVyIFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElPX0dldElucHV0RmlsdGVyU3RhdHVzKCAvLyBccmV0dXJuIFBJTyBJbnB1dCBGaWx0ZXIgU3RhdHVzDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8pIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KK3sNCisgICAgICAgIHJldHVybiBwUGlvLT5QSU9fSUZTUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0lzSW5wdXRGaWx0ZXJTZXQNCisvLyogXGJyaWVmIFRlc3QgaWYgUElPIElucHV0IGZpbHRlciBpcyBTZXQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1BJT19Jc0lucHV0RmlsdGVyU2V0KA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQorew0KKyAgICAgICAgcmV0dXJuIChBVDkxRl9QSU9fR2V0SW5wdXRGaWx0ZXJTdGF0dXMocFBpbykgJiBmbGFnKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0dldE91dHB1dERhdGFTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBQSU8gT3V0cHV0IERhdGEgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSU9fR2V0T3V0cHV0RGF0YVN0YXR1cyggLy8gXHJldHVybiBQSU8gT3V0cHV0IERhdGEgU3RhdHVzDQorCUFUOTFQU19QSU8gcFBpbykgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorew0KKyAgICAgICAgcmV0dXJuIHBQaW8tPlBJT19PRFNSOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fSW50ZXJydXB0RW5hYmxlDQorLy8qIFxicmllZiBFbmFibGUgUElPIEludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19JbnRlcnJ1cHRFbmFibGUoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgcGlvIGludGVycnVwdCB0byBiZSBlbmFibGVkDQorew0KKyAgICAgICAgcFBpby0+UElPX0lFUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19JbnRlcnJ1cHREaXNhYmxlDQorLy8qIFxicmllZiBEaXNhYmxlIFBJTyBJbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fSW50ZXJydXB0RGlzYWJsZSgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBwaW8gaW50ZXJydXB0IHRvIGJlIGRpc2FibGVkDQorew0KKyAgICAgICAgcFBpby0+UElPX0lEUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gUElPIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElPX0dldEludGVycnVwdE1hc2tTdGF0dXMoIC8vIFxyZXR1cm4gUElPIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvKSAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCit7DQorICAgICAgICByZXR1cm4gcFBpby0+UElPX0lNUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0dldEludGVycnVwdFN0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFBJTyBJbnRlcnJ1cHQgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSU9fR2V0SW50ZXJydXB0U3RhdHVzKCAvLyBccmV0dXJuIFBJTyBJbnRlcnJ1cHQgU3RhdHVzDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8pIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KK3sNCisgICAgICAgIHJldHVybiBwUGlvLT5QSU9fSVNSOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fSXNJbnRlcnJ1cHRNYXNrZWQNCisvLyogXGJyaWVmIFRlc3QgaWYgUElPIEludGVycnVwdCBpcyBNYXNrZWQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1BJT19Jc0ludGVycnVwdE1hc2tlZCgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisgICAgICAgIHJldHVybiAoQVQ5MUZfUElPX0dldEludGVycnVwdE1hc2tTdGF0dXMocFBpbykgJiBmbGFnKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0lzSW50ZXJydXB0U2V0DQorLy8qIFxicmllZiBUZXN0IGlmIFBJTyBJbnRlcnJ1cHQgaXMgU2V0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9QSU9fSXNJbnRlcnJ1cHRTZXQoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorICAgICAgICByZXR1cm4gKEFUOTFGX1BJT19HZXRJbnRlcnJ1cHRTdGF0dXMocFBpbykgJiBmbGFnKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX011bHRpRHJpdmVyRW5hYmxlDQorLy8qIFxicmllZiBNdWx0aSBEcml2ZXIgRW5hYmxlIFBJTw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19NdWx0aURyaXZlckVuYWJsZSgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBwaW8gdG8gYmUgZW5hYmxlZA0KK3sNCisgICAgICAgIHBQaW8tPlBJT19NREVSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX011bHRpRHJpdmVyRGlzYWJsZQ0KKy8vKiBcYnJpZWYgTXVsdGkgRHJpdmVyIERpc2FibGUgUElPDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPX011bHRpRHJpdmVyRGlzYWJsZSgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBwaW8gdG8gYmUgZGlzYWJsZWQNCit7DQorICAgICAgICBwUGlvLT5QSU9fTUREUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19HZXRNdWx0aURyaXZlclN0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFBJTyBNdWx0aSBEcml2ZXIgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSU9fR2V0TXVsdGlEcml2ZXJTdGF0dXMoIC8vIFxyZXR1cm4gUElPIE11bHRpIERyaXZlciBTdGF0dXMNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbykgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorew0KKyAgICAgICAgcmV0dXJuIHBQaW8tPlBJT19NRFNSOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fSXNNdWx0aURyaXZlclNldA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBQSU8gTXVsdGlEcml2ZXIgaXMgU2V0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9QSU9fSXNNdWx0aURyaXZlclNldCgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisgICAgICAgIHJldHVybiAoQVQ5MUZfUElPX0dldE11bHRpRHJpdmVyU3RhdHVzKHBQaW8pICYgZmxhZyk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19BX1JlZ2lzdGVyU2VsZWN0aW9uDQorLy8qIFxicmllZiBQSU8gQSBSZWdpc3RlciBTZWxlY3Rpb24NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fQV9SZWdpc3RlclNlbGVjdGlvbigNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBwaW8gQSByZWdpc3RlciBzZWxlY3Rpb24NCit7DQorICAgICAgICBwUGlvLT5QSU9fQVNSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElPX0JfUmVnaXN0ZXJTZWxlY3Rpb24NCisvLyogXGJyaWVmIFBJTyBCIFJlZ2lzdGVyIFNlbGVjdGlvbg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT19CX1JlZ2lzdGVyU2VsZWN0aW9uKA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIHBpbyBCIHJlZ2lzdGVyIHNlbGVjdGlvbg0KK3sNCisgICAgICAgIHBQaW8tPlBJT19CU1IgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fR2V0X0FCX1JlZ2lzdGVyU3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gUElPIEludGVycnVwdCBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJT19HZXRfQUJfUmVnaXN0ZXJTdGF0dXMoIC8vIFxyZXR1cm4gUElPIEFCIFJlZ2lzdGVyIFN0YXR1cw0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvKSAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCit7DQorICAgICAgICByZXR1cm4gcFBpby0+UElPX0FCU1I7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19Jc0FCX1JlZ2lzdGVyU2V0DQorLy8qIFxicmllZiBUZXN0IGlmIFBJTyBBQiBSZWdpc3RlciBpcyBTZXQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1BJT19Jc0FCX1JlZ2lzdGVyU2V0KA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQorew0KKyAgICAgICAgcmV0dXJuIChBVDkxRl9QSU9fR2V0X0FCX1JlZ2lzdGVyU3RhdHVzKHBQaW8pICYgZmxhZyk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19PdXRwdXRXcml0ZUVuYWJsZQ0KKy8vKiBcYnJpZWYgT3V0cHV0IFdyaXRlIEVuYWJsZSBQSU8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fT3V0cHV0V3JpdGVFbmFibGUoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgcGlvIG91dHB1dCB3cml0ZSB0byBiZSBlbmFibGVkDQorew0KKyAgICAgICAgcFBpby0+UElPX09XRVIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fT3V0cHV0V3JpdGVEaXNhYmxlDQorLy8qIFxicmllZiBPdXRwdXQgV3JpdGUgRGlzYWJsZSBQSU8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fT3V0cHV0V3JpdGVEaXNhYmxlKA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIHBpbyBvdXRwdXQgd3JpdGUgdG8gYmUgZGlzYWJsZWQNCit7DQorICAgICAgICBwUGlvLT5QSU9fT1dEUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19HZXRPdXRwdXRXcml0ZVN0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFBJTyBPdXRwdXQgV3JpdGUgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSU9fR2V0T3V0cHV0V3JpdGVTdGF0dXMoIC8vIFxyZXR1cm4gUElPIE91dHB1dCBXcml0ZSBTdGF0dXMNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbykgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorew0KKyAgICAgICAgcmV0dXJuIHBQaW8tPlBJT19PV1NSOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9fSXNPdXRwdXRXcml0ZVNldA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBQSU8gT3V0cHV0V3JpdGUgaXMgU2V0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9QSU9fSXNPdXRwdXRXcml0ZVNldCgNCisgICAgICAgIEFUOTFQU19QSU8gcFBpbywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisgICAgICAgIHJldHVybiAoQVQ5MUZfUElPX0dldE91dHB1dFdyaXRlU3RhdHVzKHBQaW8pICYgZmxhZyk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19HZXRDZmdQdWxsdXANCisvLyogXGJyaWVmIFJldHVybiBQSU8gQ29uZmlndXJhdGlvbiBQdWxsdXANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJT19HZXRDZmdQdWxsdXAoIC8vIFxyZXR1cm4gUElPIENvbmZpZ3VyYXRpb24gUHVsbHVwDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8pIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KK3sNCisgICAgICAgIHJldHVybiBwUGlvLT5QSU9fUFBVU1I7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19Jc091dHB1dERhdGFTdGF0dXNTZXQNCisvLyogXGJyaWVmIFRlc3QgaWYgUElPIE91dHB1dCBEYXRhIFN0YXR1cyBpcyBTZXQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1BJT19Jc091dHB1dERhdGFTdGF0dXNTZXQoDQorICAgICAgICBBVDkxUFNfUElPIHBQaW8sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorICAgICAgICByZXR1cm4gKEFUOTFGX1BJT19HZXRPdXRwdXREYXRhU3RhdHVzKHBQaW8pICYgZmxhZyk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT19Jc0NmZ1B1bGx1cFN0YXR1c1NldA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBQSU8gQ29uZmlndXJhdGlvbiBQdWxsdXAgU3RhdHVzIGlzIFNldA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSBpbnQgQVQ5MUZfUElPX0lzQ2ZnUHVsbHVwU3RhdHVzU2V0KA0KKyAgICAgICAgQVQ5MVBTX1BJTyBwUGlvLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQorew0KKyAgICAgICAgcmV0dXJuICh+QVQ5MUZfUElPX0dldENmZ1B1bGx1cChwUGlvKSAmIGZsYWcpOw0KIH0NCiANCiAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSogICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIERCR1UNCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0RCR1VfSW50ZXJydXB0RW5hYmxlICovDQotLyoqIFxicmllZiBFbmFibGUgREJHVSBJbnRlcnJ1cHQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9EQkdVX0ludGVycnVwdEVuYWJsZSggQVQ5MVBTX0RCR1UgcERiZ3UsICAvKiBcYXJnICBwb2ludGVyIHRvIGEgREJHVSBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBkYmd1IGludGVycnVwdCB0byBiZSBlbmFibGVkICovDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgUE1DDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfQ2ZnU3lzQ2xrRW5hYmxlUmVnDQorLy8qIFxicmllZiBDb25maWd1cmUgdGhlIFN5c3RlbSBDbG9jayBFbmFibGUgUmVnaXN0ZXIgb2YgdGhlIFBNQyBjb250cm9sbGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0NmZ1N5c0Nsa0VuYWJsZVJlZyAoDQorCUFUOTFQU19QTUMgcFBNQywgLy8gXGFyZyBwb2ludGVyIHRvIFBNQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBtb2RlKQ0KIHsNCi0gICAgcERiZ3UtPkRCR1VfSUVSID0gZmxhZzsNCisJLy8qIFdyaXRlIHRvIHRoZSBTQ0VSIHJlZ2lzdGVyDQorCXBQTUMtPlBNQ19TQ0VSID0gbW9kZTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfREJHVV9JbnRlcnJ1cHREaXNhYmxlICovDQotLyoqIFxicmllZiBEaXNhYmxlIERCR1UgSW50ZXJydXB0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfREJHVV9JbnRlcnJ1cHREaXNhYmxlKCBBVDkxUFNfREJHVSBwRGJndSwgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBEQkdVIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBkYmd1IGludGVycnVwdCB0byBiZSBkaXNhYmxlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19DZmdTeXNDbGtEaXNhYmxlUmVnDQorLy8qIFxicmllZiBDb25maWd1cmUgdGhlIFN5c3RlbSBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyIG9mIHRoZSBQTUMgY29udHJvbGxlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BNQ19DZmdTeXNDbGtEaXNhYmxlUmVnICgNCisJQVQ5MVBTX1BNQyBwUE1DLCAvLyBcYXJnIHBvaW50ZXIgdG8gUE1DIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IG1vZGUpDQogew0KLSAgICBwRGJndS0+REJHVV9JRFIgPSBmbGFnOw0KKwkvLyogV3JpdGUgdG8gdGhlIFNDRFIgcmVnaXN0ZXINCisJcFBNQy0+UE1DX1NDRFIgPSBtb2RlOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9EQkdVX0dldEludGVycnVwdE1hc2tTdGF0dXMgKi8NCi0vKiogXGJyaWVmIFJldHVybiBEQkdVIEludGVycnVwdCBNYXNrIFN0YXR1cyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfREJHVV9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCAvKiBccmV0dXJuIERCR1UgSW50ZXJydXB0IE1hc2sgU3RhdHVzICovDQotICAgIEFUOTFQU19EQkdVIHBEYmd1ICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIERCR1UgY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19HZXRTeXNDbGtTdGF0dXNSZWcNCisvLyogXGJyaWVmIFJldHVybiB0aGUgU3lzdGVtIENsb2NrIFN0YXR1cyBSZWdpc3RlciBvZiB0aGUgUE1DIGNvbnRyb2xsZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BNQ19HZXRTeXNDbGtTdGF0dXNSZWcgKA0KKwlBVDkxUFNfUE1DIHBQTUMgLy8gcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyDQorCSkNCiB7DQotICAgIHJldHVybiBwRGJndS0+REJHVV9JTVI7DQorCXJldHVybiBwUE1DLT5QTUNfU0NTUjsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfREJHVV9Jc0ludGVycnVwdE1hc2tlZCAqLw0KLS8qKiBcYnJpZWYgVGVzdCBpZiBEQkdVIEludGVycnVwdCBpcyBNYXNrZWQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgaW50IEFUOTFGX0RCR1VfSXNJbnRlcnJ1cHRNYXNrZWQoIEFUOTFQU19EQkdVIHBEYmd1LCAgLyogXGFyZyAgcG9pbnRlciB0byBhIERCR1UgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrDQorLy8qIFxicmllZiBFbmFibGUgcGVyaXBoZXJhbCBjbG9jaw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jayAoDQorCUFUOTFQU19QTUMgcFBNQywgLy8gXGFyZyBwb2ludGVyIHRvIFBNQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBwZXJpcGhJZHMpICAvLyBcYXJnIElEcyBvZiBwZXJpcGhlcmFscyB0byBlbmFibGUNCiB7DQotICAgIHJldHVybiggQVQ5MUZfREJHVV9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCBwRGJndSApICYgZmxhZyApOw0KKwlwUE1DLT5QTUNfUENFUiA9IHBlcmlwaElkczsNCiB9DQogDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUE1DX0Rpc2FibGVQZXJpcGhDbG9jaw0KKy8vKiBcYnJpZWYgRGlzYWJsZSBwZXJpcGhlcmFsIGNsb2NrDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0Rpc2FibGVQZXJpcGhDbG9jayAoDQorCUFUOTFQU19QTUMgcFBNQywgLy8gXGFyZyBwb2ludGVyIHRvIFBNQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBwZXJpcGhJZHMpICAvLyBcYXJnIElEcyBvZiBwZXJpcGhlcmFscyB0byBlbmFibGUNCit7DQorCXBQTUMtPlBNQ19QQ0RSID0gcGVyaXBoSWRzOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfR2V0UGVyaXBoQ2xvY2sNCisvLyogXGJyaWVmIEdldCBwZXJpcGhlcmFsIGNsb2NrIHN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUE1DX0dldFBlcmlwaENsb2NrICgNCisJQVQ5MVBTX1BNQyBwUE1DKSAvLyBcYXJnIHBvaW50ZXIgdG8gUE1DIGNvbnRyb2xsZXINCit7DQorCXJldHVybiBwUE1DLT5QTUNfUENTUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0tHUl9DZmdNYWluT3NjaWxsYXRvclJlZw0KKy8vKiBcYnJpZWYgQ2ZnIHRoZSBtYWluIG9zY2lsbGF0b3INCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9DS0dSX0NmZ01haW5Pc2NpbGxhdG9yUmVnICgNCisJQVQ5MVBTX0NLR1IgcENLR1IsIC8vIFxhcmcgcG9pbnRlciB0byBDS0dSIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IG1vZGUpDQorew0KKwlwQ0tHUi0+Q0tHUl9NT1IgPSBtb2RlOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DS0dSX0dldE1haW5Pc2NpbGxhdG9yUmVnDQorLy8qIFxicmllZiBDZmcgdGhlIG1haW4gb3NjaWxsYXRvcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0tHUl9HZXRNYWluT3NjaWxsYXRvclJlZyAoDQorCUFUOTFQU19DS0dSIHBDS0dSKSAvLyBcYXJnIHBvaW50ZXIgdG8gQ0tHUiBjb250cm9sbGVyDQorew0KKwlyZXR1cm4gcENLR1ItPkNLR1JfTU9SOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DS0dSX0VuYWJsZU1haW5Pc2NpbGxhdG9yDQorLy8qIFxicmllZiBFbmFibGUgdGhlIG1haW4gb3NjaWxsYXRvcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0NLR1JfRW5hYmxlTWFpbk9zY2lsbGF0b3IoDQorCUFUOTFQU19DS0dSIHBDS0dSKSAvLyBcYXJnIHBvaW50ZXIgdG8gQ0tHUiBjb250cm9sbGVyDQorew0KKwlwQ0tHUi0+Q0tHUl9NT1IgfD0gQVQ5MUNfQ0tHUl9NT1NDRU47DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NLR1JfRGlzYWJsZU1haW5Pc2NpbGxhdG9yDQorLy8qIFxicmllZiBEaXNhYmxlIHRoZSBtYWluIG9zY2lsbGF0b3INCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9DS0dSX0Rpc2FibGVNYWluT3NjaWxsYXRvciAoDQorCUFUOTFQU19DS0dSIHBDS0dSKSAvLyBcYXJnIHBvaW50ZXIgdG8gQ0tHUiBjb250cm9sbGVyDQorew0KKwlwQ0tHUi0+Q0tHUl9NT1IgJj0gfkFUOTFDX0NLR1JfTU9TQ0VOOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DS0dSX0NmZ01haW5Pc2NTdGFydFVwVGltZQ0KKy8vKiBcYnJpZWYgQ2ZnIE1PUiBSZWdpc3RlciBhY2NvcmRpbmcgdG8gdGhlIG1haW4gb3NjIHN0YXJ0dXAgdGltZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0NLR1JfQ2ZnTWFpbk9zY1N0YXJ0VXBUaW1lICgNCisJQVQ5MVBTX0NLR1IgcENLR1IsIC8vIFxhcmcgcG9pbnRlciB0byBDS0dSIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IHN0YXJ0dXBfdGltZSwgIC8vIFxhcmcgbWFpbiBvc2Mgc3RhcnR1cCB0aW1lIGluIG1pY3Jvc2Vjb25kICh1cykNCisJdW5zaWduZWQgaW50IHNsb3dDbG9jaykgIC8vIFxhcmcgc2xvd0Nsb2NrIGluIEh6DQorew0KKwlwQ0tHUi0+Q0tHUl9NT1IgJj0gfkFUOTFDX0NLR1JfT1NDT1VOVDsNCisJcENLR1ItPkNLR1JfTU9SIHw9ICgoc2xvd0Nsb2NrICogc3RhcnR1cF90aW1lKS8oOCoxMDAwMDAwKSkgPDwgODsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0tHUl9HZXRNYWluQ2xvY2tGcmVxUmVnDQorLy8qIFxicmllZiBDZmcgdGhlIG1haW4gb3NjaWxsYXRvcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0tHUl9HZXRNYWluQ2xvY2tGcmVxUmVnICgNCisJQVQ5MVBTX0NLR1IgcENLR1IpIC8vIFxhcmcgcG9pbnRlciB0byBDS0dSIGNvbnRyb2xsZXINCit7DQorCXJldHVybiBwQ0tHUi0+Q0tHUl9NQ0ZSOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DS0dSX0dldE1haW5DbG9jaw0KKy8vKiBcYnJpZWYgUmV0dXJuIE1haW4gY2xvY2sgaW4gSHoNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NLR1JfR2V0TWFpbkNsb2NrICgNCisJQVQ5MVBTX0NLR1IgcENLR1IsIC8vIFxhcmcgcG9pbnRlciB0byBDS0dSIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IHNsb3dDbG9jaykgIC8vIFxhcmcgc2xvd0Nsb2NrIGluIEh6DQorew0KKwlyZXR1cm4gKChwQ0tHUi0+Q0tHUl9NQ0ZSICAmIEFUOTFDX0NLR1JfTUFJTkYpICogc2xvd0Nsb2NrKSA+PiA0Ow0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfQ2ZnTUNLUmVnDQorLy8qIFxicmllZiBDZmcgTWFzdGVyIENsb2NrIFJlZ2lzdGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0NmZ01DS1JlZyAoDQorCUFUOTFQU19QTUMgcFBNQywgLy8gXGFyZyBwb2ludGVyIHRvIFBNQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBtb2RlKQ0KK3sNCisJcFBNQy0+UE1DX01DS1IgPSBtb2RlOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfR2V0TUNLUmVnDQorLy8qIFxicmllZiBSZXR1cm4gTWFzdGVyIENsb2NrIFJlZ2lzdGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QTUNfR2V0TUNLUmVnKA0KKwlBVDkxUFNfUE1DIHBQTUMpIC8vIFxhcmcgcG9pbnRlciB0byBQTUMgY29udHJvbGxlcg0KK3sNCisJcmV0dXJuIHBQTUMtPlBNQ19NQ0tSOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BNQ19HZXRNYXN0ZXJDbG9jaw0KKy8vKiBcYnJpZWYgUmV0dXJuIG1hc3RlciBjbG9jayBpbiBIeiB3aGljaCBjb3JyZXBvbmRzIHRvIHByb2Nlc3NvciBjbG9jayBmb3IgQVJNNw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QTUNfR2V0TWFzdGVyQ2xvY2sgKA0KKwlBVDkxUFNfUE1DIHBQTUMsIC8vIFxhcmcgcG9pbnRlciB0byBQTUMgY29udHJvbGxlcg0KKwlBVDkxUFNfQ0tHUiBwQ0tHUiwgLy8gXGFyZyBwb2ludGVyIHRvIENLR1IgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgc2xvd0Nsb2NrKSAgLy8gXGFyZyBzbG93Q2xvY2sgaW4gSHoNCit7DQorCXVuc2lnbmVkIGludCByZWcgPSBwUE1DLT5QTUNfTUNLUjsNCisJdW5zaWduZWQgaW50IHByZXNjYWxlciA9ICgxIDw8ICgocmVnICYgQVQ5MUNfUE1DX1BSRVMpID4+IDIpKTsNCisJdW5zaWduZWQgaW50IHBsbERpdmlkZXIsIHBsbE11bHRpcGxpZXI7DQorDQorCXN3aXRjaCAocmVnICYgQVQ5MUNfUE1DX0NTUykgew0KKwkJY2FzZSBBVDkxQ19QTUNfQ1NTX1NMT1dfQ0xLOiAvLyBTbG93IGNsb2NrIHNlbGVjdGVkDQorCQkJcmV0dXJuIHNsb3dDbG9jayAvIHByZXNjYWxlcjsNCisJCWNhc2UgQVQ5MUNfUE1DX0NTU19NQUlOX0NMSzogLy8gTWFpbiBjbG9jayBpcyBzZWxlY3RlZA0KKwkJCXJldHVybiBBVDkxRl9DS0dSX0dldE1haW5DbG9jayhwQ0tHUiwgc2xvd0Nsb2NrKSAvIHByZXNjYWxlcjsNCisJCWNhc2UgQVQ5MUNfUE1DX0NTU19QTExfQ0xLOiAvLyBQTExCIGNsb2NrIGlzIHNlbGVjdGVkDQorCQkJcmVnID0gcENLR1ItPkNLR1JfUExMUjsNCisJCQlwbGxEaXZpZGVyICAgID0gKHJlZyAgJiBBVDkxQ19DS0dSX0RJVik7DQorCQkJcGxsTXVsdGlwbGllciA9ICgocmVnICAmIEFUOTFDX0NLR1JfTVVMKSA+PiAxNikgKyAxOw0KKwkJCXJldHVybiBBVDkxRl9DS0dSX0dldE1haW5DbG9jayhwQ0tHUiwgc2xvd0Nsb2NrKSAvIHBsbERpdmlkZXIgKiBwbGxNdWx0aXBsaWVyIC8gcHJlc2NhbGVyOw0KKwl9DQorCXJldHVybiAwOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfRW5hYmxlUENLDQorLy8qIFxicmllZiBFbmFibGUgcGVyaXBoZXJhbCBjbG9jaw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BNQ19FbmFibGVQQ0sgKA0KKwlBVDkxUFNfUE1DIHBQTUMsIC8vIFxhcmcgcG9pbnRlciB0byBQTUMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgcGNrLCAgLy8gXGFyZyBQZXJpcGhlcmFsIGNsb2NrIGlkZW50aWZpZXIgMCAuLiA3DQorCXVuc2lnbmVkIGludCBtb2RlKQ0KK3sNCisJcFBNQy0+UE1DX1BDS1JbcGNrXSA9IG1vZGU7DQorCXBQTUMtPlBNQ19TQ0VSID0gKDEgPDwgcGNrKSA8PCA4Ow0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfRGlzYWJsZVBDSw0KKy8vKiBcYnJpZWYgRW5hYmxlIHBlcmlwaGVyYWwgY2xvY2sNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QTUNfRGlzYWJsZVBDSyAoDQorCUFUOTFQU19QTUMgcFBNQywgLy8gXGFyZyBwb2ludGVyIHRvIFBNQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBwY2spICAvLyBcYXJnIFBlcmlwaGVyYWwgY2xvY2sgaWRlbnRpZmllciAwIC4uIDcNCit7DQorCXBQTUMtPlBNQ19TQ0RSID0gKDEgPDwgcGNrKSA8PCA4Ow0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfRW5hYmxlSXQNCisvLyogXGJyaWVmIEVuYWJsZSBQTUMgaW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0VuYWJsZUl0ICgNCisJQVQ5MVBTX1BNQyBwUE1DLCAgICAgLy8gcG9pbnRlciB0byBhIFBNQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAgIC8vIElUIHRvIGJlIGVuYWJsZWQNCit7DQorCS8vKiBXcml0ZSB0byB0aGUgSUVSIHJlZ2lzdGVyDQorCXBQTUMtPlBNQ19JRVIgPSBmbGFnOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfRGlzYWJsZUl0DQorLy8qIFxicmllZiBEaXNhYmxlIFBNQyBpbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QTUNfRGlzYWJsZUl0ICgNCisJQVQ5MVBTX1BNQyBwUE1DLCAvLyBwb2ludGVyIHRvIGEgUE1DIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpIC8vIElUIHRvIGJlIGRpc2FibGVkDQorew0KKwkvLyogV3JpdGUgdG8gdGhlIElEUiByZWdpc3Rlcg0KKwlwUE1DLT5QTUNfSURSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUE1DX0dldFN0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFBNQyBJbnRlcnJ1cHQgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QTUNfR2V0U3RhdHVzKCAvLyBccmV0dXJuIFBNQyBJbnRlcnJ1cHQgU3RhdHVzDQorCUFUOTFQU19QTUMgcFBNQykgLy8gcG9pbnRlciB0byBhIFBNQyBjb250cm9sbGVyDQorew0KKwlyZXR1cm4gcFBNQy0+UE1DX1NSOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfR2V0SW50ZXJydXB0TWFza1N0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFBNQyBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BNQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCAvLyBccmV0dXJuIFBNQyBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisJQVQ5MVBTX1BNQyBwUE1DKSAvLyBwb2ludGVyIHRvIGEgUE1DIGNvbnRyb2xsZXINCit7DQorCXJldHVybiBwUE1DLT5QTUNfSU1SOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfSXNJbnRlcnJ1cHRNYXNrZWQNCisvLyogXGJyaWVmIFRlc3QgaWYgUE1DIEludGVycnVwdCBpcyBNYXNrZWQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BNQ19Jc0ludGVycnVwdE1hc2tlZCgNCisgICAgICAgIEFUOTFQU19QTUMgcFBNQywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUE1DIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisJcmV0dXJuIChBVDkxRl9QTUNfR2V0SW50ZXJydXB0TWFza1N0YXR1cyhwUE1DKSAmIGZsYWcpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfSXNTdGF0dXNTZXQNCisvLyogXGJyaWVmIFRlc3QgaWYgUE1DIFN0YXR1cyBpcyBTZXQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BNQ19Jc1N0YXR1c1NldCgNCisgICAgICAgIEFUOTFQU19QTUMgcFBNQywgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUE1DIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KK3sNCisJcmV0dXJuIChBVDkxRl9QTUNfR2V0U3RhdHVzKHBQTUMpICYgZmxhZyk7DQorfS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgUlNUQw0KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUlNUU29mdFJlc2V0DQorLy8qIFxicmllZiBTdGFydCBTb2Z0d2FyZSBSZXNldA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1JTVFNvZnRSZXNldCgNCisgICAgICAgIEFUOTFQU19SU1RDIHBSU1RDLA0KKyAgICAgICAgdW5zaWduZWQgaW50IHJlc2V0KQ0KK3sNCisJcFJTVEMtPlJTVENfUkNSID0gKDB4QTUwMDAwMDAgfCByZXNldCk7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1JTVFNldE1vZGUNCisvLyogXGJyaWVmIFNldCBSZXNldCBNb2RlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUlNUU2V0TW9kZSgNCisgICAgICAgIEFUOTFQU19SU1RDIHBSU1RDLA0KKyAgICAgICAgdW5zaWduZWQgaW50IG1vZGUpDQorew0KKwlwUlNUQy0+UlNUQ19STVIgPSAoMHhBNTAwMDAwMCB8IG1vZGUpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9SU1RHZXRNb2RlDQorLy8qIFxicmllZiBHZXQgUmVzZXQgTW9kZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUlNUR2V0TW9kZSgNCisgICAgICAgIEFUOTFQU19SU1RDIHBSU1RDKQ0KK3sNCisJcmV0dXJuIChwUlNUQy0+UlNUQ19STVIpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9SU1RHZXRTdGF0dXMNCisvLyogXGJyaWVmIEdldCBSZXNldCBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1JTVEdldFN0YXR1cygNCisgICAgICAgIEFUOTFQU19SU1RDIHBSU1RDKQ0KK3sNCisJcmV0dXJuIChwUlNUQy0+UlNUQ19SU1IpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9SU1RJc1NvZnRSc3RBY3RpdmUNCisvLyogXGJyaWVmIFJldHVybiAhPTAgaWYgc29mdHdhcmUgcmVzZXQgaXMgc3RpbGwgbm90IGNvbXBsZXRlZA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUlNUSXNTb2Z0UnN0QWN0aXZlKA0KKyAgICAgICAgQVQ5MVBTX1JTVEMgcFJTVEMpDQorew0KKwlyZXR1cm4gKChwUlNUQy0+UlNUQ19SU1IpICYgQVQ5MUNfUlNUQ19TUkNNUCk7DQorfQ0KIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotKiAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgUElPDQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fQ2ZnUGVyaXBoICovDQotLyoqIFxicmllZiBFbmFibGUgcGlucyB0byBiZSBkcml2ZWQgYnkgcGVyaXBoZXJhbCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BJT19DZmdQZXJpcGgoIEFUOTFQU19QSU8gcFBpbywgICAgICAgICAgICAgLyogXGFyZyBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwZXJpcGhBRW5hYmxlLCAgLyogXGFyZyBQRVJJUEggQSB0byBlbmFibGUgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwZXJpcGhCRW5hYmxlICkgLyogXGFyZyBQRVJJUEggQiB0byBlbmFibGUgKi8NCi0NCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBSVFRDDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgIEFUOTFGX1NldFJUVF9UaW1lQmFzZSgpDQorLy8qIFxicmllZiAgU2V0IHRoZSBSVFQgcHJlc2NhbGVyIGFjY29yZGluZyB0byB0aGUgVGltZUJhc2UgaW4gbXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9SVFRTZXRUaW1lQmFzZSgNCisgICAgICAgIEFUOTFQU19SVFRDIHBSVFRDLA0KKyAgICAgICAgdW5zaWduZWQgaW50IG1zKQ0KIHsNCi0gICAgcFBpby0+UElPX0FTUiA9IHBlcmlwaEFFbmFibGU7DQotICAgIHBQaW8tPlBJT19CU1IgPSBwZXJpcGhCRW5hYmxlOw0KLSAgICBwUGlvLT5QSU9fUERSID0gKCBwZXJpcGhBRW5hYmxlIHwgcGVyaXBoQkVuYWJsZSApOyAvKiBTZXQgaW4gUGVyaXBoIG1vZGUgKi8NCisJaWYgKG1zID4gMjAwMCkNCisJCXJldHVybiAxOyAgIC8vIEFUOTFDX1RJTUVfT1VUX09GX1JBTkdFDQorCXBSVFRDLT5SVFRDX1JUTVIgJj0gfjB4RkZGRjsJDQorCXBSVFRDLT5SVFRDX1JUTVIgfD0gKCgobXMgPDwgMTUpIC8xMDAwKSAmIDB4RkZGRik7CQ0KKwlyZXR1cm4gMDsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX0NmZ091dHB1dCAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIFBJTyBpbiBvdXRwdXQgbW9kZSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BJT19DZmdPdXRwdXQoIEFUOTFQU19QSU8gcFBpbywgICAgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHBpb0VuYWJsZSApIC8qIFxhcmcgUElPIHRvIGJlIGVuYWJsZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgIEFUOTFGX1JUVFNldFByZXNjYWxlcigpDQorLy8qIFxicmllZiAgU2V0IHRoZSBuZXcgcHJlc2NhbGVyIHZhbHVlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUlRUU2V0UHJlc2NhbGVyKA0KKyAgICAgICAgQVQ5MVBTX1JUVEMgcFJUVEMsDQorICAgICAgICB1bnNpZ25lZCBpbnQgcnRwcmVzKQ0KIHsNCi0gICAgcFBpby0+UElPX1BFUiA9IHBpb0VuYWJsZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZXQgaW4gUElPIG1vZGUgKi8NCi0gICAgcFBpby0+UElPX09FUiA9IHBpb0VuYWJsZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb25maWd1cmUgaW4gT3V0cHV0ICovDQorCXBSVFRDLT5SVFRDX1JUTVIgJj0gfjB4RkZGRjsJDQorCXBSVFRDLT5SVFRDX1JUTVIgfD0gKHJ0cHJlcyAmIDB4RkZGRik7CQ0KKwlyZXR1cm4gKHBSVFRDLT5SVFRDX1JUTVIpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fQ2ZnSW5wdXQgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBQSU8gaW4gaW5wdXQgbW9kZSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BJT19DZmdJbnB1dCggQVQ5MVBTX1BJTyBwUGlvLCAgICAgICAgICAgLyogXGFyZyBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGlucHV0RW5hYmxlICkgLyogXGFyZyBQSU8gdG8gYmUgZW5hYmxlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICAgQVQ5MUZfUlRUUmVzdGFydCgpDQorLy8qIFxicmllZiAgUmVzdGFydCB0aGUgUlRUIHByZXNjYWxlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9SVFRSZXN0YXJ0KA0KKyAgICAgICAgQVQ5MVBTX1JUVEMgcFJUVEMpDQogew0KLSAgICAvKiBEaXNhYmxlIG91dHB1dCAqLw0KLSAgICBwUGlvLT5QSU9fT0RSID0gaW5wdXRFbmFibGU7DQotICAgIHBQaW8tPlBJT19QRVIgPSBpbnB1dEVuYWJsZTsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX0NmZ09wZW5kcmFpbiAqLw0KLS8qKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBpbiBvcGVuIGRyYWluICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUElPX0NmZ09wZW5kcmFpbiggQVQ5MVBTX1BJTyBwUGlvLCAgICAgICAgICAgICAgLyogXGFyZyBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtdWx0aURydkVuYWJsZSApIC8qIFxhcmcgcGlvIHRvIGJlIGNvbmZpZ3VyZWQgaW4gb3BlbiBkcmFpbiAqLw0KLXsNCi0gICAgLyogQ29uZmlndXJlIHRoZSBtdWx0aS1kcml2ZSBvcHRpb24gKi8NCi0gICAgcFBpby0+UElPX01ERFIgPSB+bXVsdGlEcnZFbmFibGU7DQotICAgIHBQaW8tPlBJT19NREVSID0gbXVsdGlEcnZFbmFibGU7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19DZmdQdWxsdXAgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBwdWxsdXAgb24gUElPICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUElPX0NmZ1B1bGx1cCggQVQ5MVBTX1BJTyBwUGlvLCAgICAgICAgICAgIC8qIFxhcmcgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcHVsbHVwRW5hYmxlICkgLyogXGFyZyBlbmFibGUgcHVsbHVwIG9uIFBJTyAqLw0KLXsNCi0gICAgLyogQ29ubmVjdCBvciBub3QgUHVsbHVwICovDQotICAgIHBQaW8tPlBJT19QUFVEUiA9IH5wdWxsdXBFbmFibGU7DQotICAgIHBQaW8tPlBJT19QUFVFUiA9IHB1bGx1cEVuYWJsZTsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX0NmZ0RpcmVjdERyaXZlICovDQotLyoqIFxicmllZiBFbmFibGUgZGlyZWN0IGRyaXZlIG9uIFBJTyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BJT19DZmdEaXJlY3REcml2ZSggQVQ5MVBTX1BJTyBwUGlvLCAgICAgICAgICAgLyogXGFyZyBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGRpcmVjdERyaXZlICkgLyogXGFyZyBQSU8gdG8gYmUgY29uZmlndXJlZCB3aXRoIGRpcmVjdCBkcml2ZSAqLw0KLQ0KLXsNCi0gICAgLyogQ29uZmlndXJlIHRoZSBEaXJlY3QgRHJpdmUgKi8NCi0gICAgcFBpby0+UElPX09XRFIgPSB+ZGlyZWN0RHJpdmU7DQotICAgIHBQaW8tPlBJT19PV0VSID0gZGlyZWN0RHJpdmU7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19DZmdJbnB1dEZpbHRlciAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIGlucHV0IGZpbHRlciBvbiBpbnB1dCBQSU8gKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fQ2ZnSW5wdXRGaWx0ZXIoIEFUOTFQU19QSU8gcFBpbywgICAgICAgICAgIC8qIFxhcmcgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbnB1dEZpbHRlciApIC8qIFxhcmcgUElPIHRvIGJlIGNvbmZpZ3VyZWQgd2l0aCBpbnB1dCBmaWx0ZXIgKi8NCi0NCi17DQotICAgIC8qIENvbmZpZ3VyZSB0aGUgRGlyZWN0IERyaXZlICovDQotICAgIHBQaW8tPlBJT19JRkRSID0gfmlucHV0RmlsdGVyOw0KLSAgICBwUGlvLT5QSU9fSUZFUiA9IGlucHV0RmlsdGVyOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fR2V0SW5wdXQgKi8NCi0vKiogXGJyaWVmIFJldHVybiBQSU8gaW5wdXQgdmFsdWUgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJT19HZXRJbnB1dCggLyogXHJldHVybiBQSU8gaW5wdXQgKi8NCi0gICAgQVQ5MVBTX1BJTyBwUGlvICkgICAgICAgICAgICAgICAgICAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi17DQotICAgIHJldHVybiBwUGlvLT5QSU9fUERTUjsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX0lzSW5wdXRTZXQgKi8NCi0vKiogXGJyaWVmIFRlc3QgaWYgUElPIGlzIGlucHV0IGZsYWcgaXMgYWN0aXZlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIGludCBBVDkxRl9QSU9fSXNJbnB1dFNldCggQVQ5MVBTX1BJTyBwUGlvLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQgKi8NCi17DQotICAgIHJldHVybiggQVQ5MUZfUElPX0dldElucHV0KCBwUGlvICkgJiBmbGFnICk7DQorCXBSVFRDLT5SVFRDX1JUTVIgfD0gQVQ5MUNfUlRUQ19SVFRSU1Q7CQ0KIH0NCiANCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fU2V0T3V0cHV0ICovDQotLyoqIFxicmllZiBTZXQgdG8gMSBvdXRwdXQgUElPICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUElPX1NldE91dHB1dCggQVQ5MVBTX1BJTyBwUGlvLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgb3V0cHV0IHRvIGJlIHNldCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICAgQVQ5MUZfUlRUX1NldEFsYXJtSU5UKCkNCisvLyogXGJyaWVmICBFbmFibGUgUlRUIEFsYXJtIEludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9SVFRTZXRBbGFybUlOVCgNCisgICAgICAgIEFUOTFQU19SVFRDIHBSVFRDKQ0KIHsNCi0gICAgcFBpby0+UElPX1NPRFIgPSBmbGFnOw0KKwlwUlRUQy0+UlRUQ19SVE1SIHw9IEFUOTFDX1JUVENfQUxNSUVOOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fQ2xlYXJPdXRwdXQgKi8NCi0vKiogXGJyaWVmIFNldCB0byAwIG91dHB1dCBQSU8gKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fQ2xlYXJPdXRwdXQoIEFUOTFQU19QSU8gcFBpbywgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgb3V0cHV0IHRvIGJlIGNsZWFyZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgIEFUOTFGX1JUVF9DbGVhckFsYXJtSU5UKCkNCisvLyogXGJyaWVmICBEaXNhYmxlIFJUVCBBbGFybSBJbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUlRUQ2xlYXJBbGFybUlOVCgNCisgICAgICAgIEFUOTFQU19SVFRDIHBSVFRDKQ0KIHsNCi0gICAgcFBpby0+UElPX0NPRFIgPSBmbGFnOw0KKwlwUlRUQy0+UlRUQ19SVE1SICY9IH5BVDkxQ19SVFRDX0FMTUlFTjsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX0ZvcmNlT3V0cHV0ICovDQotLyoqIFxicmllZiBGb3JjZSBvdXRwdXQgd2hlbiBEaXJlY3QgZHJpdmUgb3B0aW9uIGlzIGVuYWJsZWQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fRm9yY2VPdXRwdXQoIEFUOTFQU19QSU8gcFBpbywgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgb3V0cHV0IHRvIGJlIGZvcmNlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICAgQVQ5MUZfUlRUX1NldFJ0dEluY0lOVCgpDQorLy8qIFxicmllZiAgRW5hYmxlIFJUVCBJTkMgSW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1JUVFNldFJ0dEluY0lOVCgNCisgICAgICAgIEFUOTFQU19SVFRDIHBSVFRDKQ0KIHsNCi0gICAgcFBpby0+UElPX09EU1IgPSBmbGFnOw0KKwlwUlRUQy0+UlRUQ19SVE1SIHw9IEFUOTFDX1JUVENfUlRUSU5DSUVOOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fRW5hYmxlICovDQotLyoqIFxicmllZiBFbmFibGUgUElPICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUElPX0VuYWJsZSggQVQ5MVBTX1BJTyBwUGlvLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgcGlvIHRvIGJlIGVuYWJsZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgIEFUOTFGX1JUVF9DbGVhclJ0dEluY0lOVCgpDQorLy8qIFxicmllZiAgRGlzYWJsZSBSVFQgSU5DIEludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9SVFRDbGVhclJ0dEluY0lOVCgNCisgICAgICAgIEFUOTFQU19SVFRDIHBSVFRDKQ0KIHsNCi0gICAgcFBpby0+UElPX1BFUiA9IGZsYWc7DQorCXBSVFRDLT5SVFRDX1JUTVIgJj0gfkFUOTFDX1JUVENfUlRUSU5DSUVOOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fRGlzYWJsZSAqLw0KLS8qKiBcYnJpZWYgRGlzYWJsZSBQSU8gKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fRGlzYWJsZSggQVQ5MVBTX1BJTyBwUGlvLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIHBpbyB0byBiZSBkaXNhYmxlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICAgQVQ5MUZfUlRUX1NldEFsYXJtVmFsdWUoKQ0KKy8vKiBcYnJpZWYgIFNldCBSVFQgQWxhcm0gVmFsdWUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUlRUU2V0QWxhcm1WYWx1ZSgNCisgICAgICAgIEFUOTFQU19SVFRDIHBSVFRDLCB1bnNpZ25lZCBpbnQgYWxhcm0pDQogew0KLSAgICBwUGlvLT5QSU9fUERSID0gZmxhZzsNCisJcFJUVEMtPlJUVENfUlRBUiA9IGFsYXJtOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fR2V0U3RhdHVzICovDQotLyoqIFxicmllZiBSZXR1cm4gUElPIFN0YXR1cyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElPX0dldFN0YXR1cyggLyogXHJldHVybiBQSU8gU3RhdHVzICovDQotICAgIEFUOTFQU19QSU8gcFBpbyApICAgICAgICAgICAgICAgICAgICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICAgQVQ5MUZfUlRUX0dldEFsYXJtVmFsdWUoKQ0KKy8vKiBcYnJpZWYgIEdldCBSVFQgQWxhcm0gVmFsdWUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9SVFRHZXRBbGFybVZhbHVlKA0KKyAgICAgICAgQVQ5MVBTX1JUVEMgcFJUVEMpDQogew0KLSAgICByZXR1cm4gcFBpby0+UElPX1BTUjsNCisJcmV0dXJuKHBSVFRDLT5SVFRDX1JUQVIpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fSXNTZXQgKi8NCi0vKiogXGJyaWVmIFRlc3QgaWYgUElPIGlzIFNldCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSBpbnQgQVQ5MUZfUElPX0lzU2V0KCBBVDkxUFNfUElPIHBQaW8sICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgIEFUOTFGX1JUVEdldFN0YXR1cygpDQorLy8qIFxicmllZiAgUmVhZCB0aGUgUlRUIHN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1JUVEdldFN0YXR1cygNCisgICAgICAgIEFUOTFQU19SVFRDIHBSVFRDKQ0KIHsNCi0gICAgcmV0dXJuKCBBVDkxRl9QSU9fR2V0U3RhdHVzKCBwUGlvICkgJiBmbGFnICk7DQorCXJldHVybihwUlRUQy0+UlRUQ19SVFNSKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX091dHB1dEVuYWJsZSAqLw0KLS8qKiBcYnJpZWYgT3V0cHV0IEVuYWJsZSBQSU8gKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fT3V0cHV0RW5hYmxlKCBBVDkxUFNfUElPIHBQaW8sICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBwaW8gb3V0cHV0IHRvIGJlIGVuYWJsZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgIEFUOTFGX1JUVF9SZWFkVmFsdWUoKQ0KKy8vKiBcYnJpZWYgIFJlYWQgdGhlIFJUVCB2YWx1ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1JUVFJlYWRWYWx1ZSgNCisgICAgICAgIEFUOTFQU19SVFRDIHBSVFRDKQ0KIHsNCi0gICAgcFBpby0+UElPX09FUiA9IGZsYWc7DQorICAgICAgICByZWdpc3RlciB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgdmFsMSx2YWwyOw0KKwlkbw0KKwl7DQorCQl2YWwxID0gcFJUVEMtPlJUVENfUlRWUjsNCisJCXZhbDIgPSBwUlRUQy0+UlRUQ19SVFZSOw0KKwl9CQ0KKwl3aGlsZSh2YWwxICE9IHZhbDIpOw0KKwlyZXR1cm4odmFsMSk7DQogfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19PdXRwdXREaXNhYmxlICovDQotLyoqIFxicmllZiBPdXRwdXQgRW5hYmxlIFBJTyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BJT19PdXRwdXREaXNhYmxlKCBBVDkxUFNfUElPIHBQaW8sICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgcGlvIG91dHB1dCB0byBiZSBkaXNhYmxlZCAqLw0KLXsNCi0gICAgcFBpby0+UElPX09EUiA9IGZsYWc7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19HZXRPdXRwdXRTdGF0dXMgKi8NCi0vKiogXGJyaWVmIFJldHVybiBQSU8gT3V0cHV0IFN0YXR1cyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElPX0dldE91dHB1dFN0YXR1cyggLyogXHJldHVybiBQSU8gT3V0cHV0IFN0YXR1cyAqLw0KLSAgICBBVDkxUFNfUElPIHBQaW8gKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi17DQotICAgIHJldHVybiBwUGlvLT5QSU9fT1NSOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fSXNPdXB1dFNldCAqLw0KLS8qKiBcYnJpZWYgVGVzdCBpZiBQSU8gT3V0cHV0IGlzIFNldCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSBpbnQgQVQ5MUZfUElPX0lzT3V0cHV0U2V0KCBBVDkxUFNfUElPIHBQaW8sICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQgKi8NCi17DQotICAgIHJldHVybiggQVQ5MUZfUElPX0dldE91dHB1dFN0YXR1cyggcFBpbyApICYgZmxhZyApOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fSW5wdXRGaWx0ZXJFbmFibGUgKi8NCi0vKiogXGJyaWVmIElucHV0IEZpbHRlciBFbmFibGUgUElPICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUElPX0lucHV0RmlsdGVyRW5hYmxlKCBBVDkxUFNfUElPIHBQaW8sICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIHBpbyBpbnB1dCBmaWx0ZXIgdG8gYmUgZW5hYmxlZCAqLw0KLXsNCi0gICAgcFBpby0+UElPX0lGRVIgPSBmbGFnOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fSW5wdXRGaWx0ZXJEaXNhYmxlICovDQotLyoqIFxicmllZiBJbnB1dCBGaWx0ZXIgRGlzYWJsZSBQSU8gKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fSW5wdXRGaWx0ZXJEaXNhYmxlKCBBVDkxUFNfUElPIHBQaW8sICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBwaW8gaW5wdXQgZmlsdGVyIHRvIGJlIGRpc2FibGVkICovDQotew0KLSAgICBwUGlvLT5QSU9fSUZEUiA9IGZsYWc7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19HZXRJbnB1dEZpbHRlclN0YXR1cyAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIFBJTyBJbnB1dCBGaWx0ZXIgU3RhdHVzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSU9fR2V0SW5wdXRGaWx0ZXJTdGF0dXMoIC8qIFxyZXR1cm4gUElPIElucHV0IEZpbHRlciBTdGF0dXMgKi8NCi0gICAgQVQ5MVBTX1BJTyBwUGlvICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi17DQotICAgIHJldHVybiBwUGlvLT5QSU9fSUZTUjsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX0lzSW5wdXRGaWx0ZXJTZXQgKi8NCi0vKiogXGJyaWVmIFRlc3QgaWYgUElPIElucHV0IGZpbHRlciBpcyBTZXQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgaW50IEFUOTFGX1BJT19Jc0lucHV0RmlsdGVyU2V0KCBBVDkxUFNfUElPIHBQaW8sICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZCAqLw0KLXsNCi0gICAgcmV0dXJuKCBBVDkxRl9QSU9fR2V0SW5wdXRGaWx0ZXJTdGF0dXMoIHBQaW8gKSAmIGZsYWcgKTsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX0dldE91dHB1dERhdGFTdGF0dXMgKi8NCi0vKiogXGJyaWVmIFJldHVybiBQSU8gT3V0cHV0IERhdGEgU3RhdHVzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSU9fR2V0T3V0cHV0RGF0YVN0YXR1cyggLyogXHJldHVybiBQSU8gT3V0cHV0IERhdGEgU3RhdHVzICovDQotICAgIEFUOTFQU19QSU8gcFBpbyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi17DQotICAgIHJldHVybiBwUGlvLT5QSU9fT0RTUjsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX0ludGVycnVwdEVuYWJsZSAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIFBJTyBJbnRlcnJ1cHQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fSW50ZXJydXB0RW5hYmxlKCBBVDkxUFNfUElPIHBQaW8sICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBwaW8gaW50ZXJydXB0IHRvIGJlIGVuYWJsZWQgKi8NCi17DQotICAgIHBQaW8tPlBJT19JRVIgPSBmbGFnOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fSW50ZXJydXB0RGlzYWJsZSAqLw0KLS8qKiBcYnJpZWYgRGlzYWJsZSBQSU8gSW50ZXJydXB0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUElPX0ludGVycnVwdERpc2FibGUoIEFUOTFQU19QSU8gcFBpbywgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBwaW8gaW50ZXJydXB0IHRvIGJlIGRpc2FibGVkICovDQotew0KLSAgICBwUGlvLT5QSU9fSURSID0gZmxhZzsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX0dldEludGVycnVwdE1hc2tTdGF0dXMgKi8NCi0vKiogXGJyaWVmIFJldHVybiBQSU8gSW50ZXJydXB0IE1hc2sgU3RhdHVzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSU9fR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLyogXHJldHVybiBQSU8gSW50ZXJydXB0IE1hc2sgU3RhdHVzICovDQotICAgIEFUOTFQU19QSU8gcFBpbyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi17DQotICAgIHJldHVybiBwUGlvLT5QSU9fSU1SOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fR2V0SW50ZXJydXB0U3RhdHVzICovDQotLyoqIFxicmllZiBSZXR1cm4gUElPIEludGVycnVwdCBTdGF0dXMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJT19HZXRJbnRlcnJ1cHRTdGF0dXMoIC8qIFxyZXR1cm4gUElPIEludGVycnVwdCBTdGF0dXMgKi8NCi0gICAgQVQ5MVBTX1BJTyBwUGlvICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyICovDQotew0KLSAgICByZXR1cm4gcFBpby0+UElPX0lTUjsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX0lzSW50ZXJydXB0TWFza2VkICovDQotLyoqIFxicmllZiBUZXN0IGlmIFBJTyBJbnRlcnJ1cHQgaXMgTWFza2VkICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIGludCBBVDkxRl9QSU9fSXNJbnRlcnJ1cHRNYXNrZWQoIEFUOTFQU19QSU8gcFBpbywgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZCAqLw0KLXsNCi0gICAgcmV0dXJuKCBBVDkxRl9QSU9fR2V0SW50ZXJydXB0TWFza1N0YXR1cyggcFBpbyApICYgZmxhZyApOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fSXNJbnRlcnJ1cHRTZXQgKi8NCi0vKiogXGJyaWVmIFRlc3QgaWYgUElPIEludGVycnVwdCBpcyBTZXQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgaW50IEFUOTFGX1BJT19Jc0ludGVycnVwdFNldCggQVQ5MVBTX1BJTyBwUGlvLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkICovDQotew0KLSAgICByZXR1cm4oIEFUOTFGX1BJT19HZXRJbnRlcnJ1cHRTdGF0dXMoIHBQaW8gKSAmIGZsYWcgKTsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX011bHRpRHJpdmVyRW5hYmxlICovDQotLyoqIFxicmllZiBNdWx0aSBEcml2ZXIgRW5hYmxlIFBJTyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BJT19NdWx0aURyaXZlckVuYWJsZSggQVQ5MVBTX1BJTyBwUGlvLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBwaW8gdG8gYmUgZW5hYmxlZCAqLw0KLXsNCi0gICAgcFBpby0+UElPX01ERVIgPSBmbGFnOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fTXVsdGlEcml2ZXJEaXNhYmxlICovDQotLyoqIFxicmllZiBNdWx0aSBEcml2ZXIgRGlzYWJsZSBQSU8gKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fTXVsdGlEcml2ZXJEaXNhYmxlKCBBVDkxUFNfUElPIHBQaW8sICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBwaW8gdG8gYmUgZGlzYWJsZWQgKi8NCi17DQotICAgIHBQaW8tPlBJT19NRERSID0gZmxhZzsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX0dldE11bHRpRHJpdmVyU3RhdHVzICovDQotLyoqIFxicmllZiBSZXR1cm4gUElPIE11bHRpIERyaXZlciBTdGF0dXMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJT19HZXRNdWx0aURyaXZlclN0YXR1cyggLyogXHJldHVybiBQSU8gTXVsdGkgRHJpdmVyIFN0YXR1cyAqLw0KLSAgICBBVDkxUFNfUElPIHBQaW8gKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLXsNCi0gICAgcmV0dXJuIHBQaW8tPlBJT19NRFNSOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fSXNNdWx0aURyaXZlclNldCAqLw0KLS8qKiBcYnJpZWYgVGVzdCBpZiBQSU8gTXVsdGlEcml2ZXIgaXMgU2V0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIGludCBBVDkxRl9QSU9fSXNNdWx0aURyaXZlclNldCggQVQ5MVBTX1BJTyBwUGlvLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQgKi8NCi17DQotICAgIHJldHVybiggQVQ5MUZfUElPX0dldE11bHRpRHJpdmVyU3RhdHVzKCBwUGlvICkgJiBmbGFnICk7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19BX1JlZ2lzdGVyU2VsZWN0aW9uICovDQotLyoqIFxicmllZiBQSU8gQSBSZWdpc3RlciBTZWxlY3Rpb24gKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fQV9SZWdpc3RlclNlbGVjdGlvbiggQVQ5MVBTX1BJTyBwUGlvLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIHBpbyBBIHJlZ2lzdGVyIHNlbGVjdGlvbiAqLw0KLXsNCi0gICAgcFBpby0+UElPX0FTUiA9IGZsYWc7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19CX1JlZ2lzdGVyU2VsZWN0aW9uICovDQotLyoqIFxicmllZiBQSU8gQiBSZWdpc3RlciBTZWxlY3Rpb24gKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fQl9SZWdpc3RlclNlbGVjdGlvbiggQVQ5MVBTX1BJTyBwUGlvLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIHBpbyBCIHJlZ2lzdGVyIHNlbGVjdGlvbiAqLw0KLXsNCi0gICAgcFBpby0+UElPX0JTUiA9IGZsYWc7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19HZXRfQUJfUmVnaXN0ZXJTdGF0dXMgKi8NCi0vKiogXGJyaWVmIFJldHVybiBQSU8gSW50ZXJydXB0IFN0YXR1cyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElPX0dldF9BQl9SZWdpc3RlclN0YXR1cyggLyogXHJldHVybiBQSU8gQUIgUmVnaXN0ZXIgU3RhdHVzICovDQotICAgIEFUOTFQU19QSU8gcFBpbyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLXsNCi0gICAgcmV0dXJuIHBQaW8tPlBJT19BQlNSOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fSXNBQl9SZWdpc3RlclNldCAqLw0KLS8qKiBcYnJpZWYgVGVzdCBpZiBQSU8gQUIgUmVnaXN0ZXIgaXMgU2V0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIGludCBBVDkxRl9QSU9fSXNBQl9SZWdpc3RlclNldCggQVQ5MVBTX1BJTyBwUGlvLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQgKi8NCi17DQotICAgIHJldHVybiggQVQ5MUZfUElPX0dldF9BQl9SZWdpc3RlclN0YXR1cyggcFBpbyApICYgZmxhZyApOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fT3V0cHV0V3JpdGVFbmFibGUgKi8NCi0vKiogXGJyaWVmIE91dHB1dCBXcml0ZSBFbmFibGUgUElPICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUElPX091dHB1dFdyaXRlRW5hYmxlKCBBVDkxUFNfUElPIHBQaW8sICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIHBpbyBvdXRwdXQgd3JpdGUgdG8gYmUgZW5hYmxlZCAqLw0KLXsNCi0gICAgcFBpby0+UElPX09XRVIgPSBmbGFnOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fT3V0cHV0V3JpdGVEaXNhYmxlICovDQotLyoqIFxicmllZiBPdXRwdXQgV3JpdGUgRGlzYWJsZSBQSU8gKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QSU9fT3V0cHV0V3JpdGVEaXNhYmxlKCBBVDkxUFNfUElPIHBQaW8sICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQSU8gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBwaW8gb3V0cHV0IHdyaXRlIHRvIGJlIGRpc2FibGVkICovDQotew0KLSAgICBwUGlvLT5QSU9fT1dEUiA9IGZsYWc7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19HZXRPdXRwdXRXcml0ZVN0YXR1cyAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIFBJTyBPdXRwdXQgV3JpdGUgU3RhdHVzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSU9fR2V0T3V0cHV0V3JpdGVTdGF0dXMoIC8qIFxyZXR1cm4gUElPIE91dHB1dCBXcml0ZSBTdGF0dXMgKi8NCi0gICAgQVQ5MVBTX1BJTyBwUGlvICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi17DQotICAgIHJldHVybiBwUGlvLT5QSU9fT1dTUjsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX0lzT3V0cHV0V3JpdGVTZXQgKi8NCi0vKiogXGJyaWVmIFRlc3QgaWYgUElPIE91dHB1dFdyaXRlIGlzIFNldCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSBpbnQgQVQ5MUZfUElPX0lzT3V0cHV0V3JpdGVTZXQoIEFUOTFQU19QSU8gcFBpbywgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkICovDQotew0KLSAgICByZXR1cm4oIEFUOTFGX1BJT19HZXRPdXRwdXRXcml0ZVN0YXR1cyggcFBpbyApICYgZmxhZyApOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9fR2V0Q2ZnUHVsbHVwICovDQotLyoqIFxicmllZiBSZXR1cm4gUElPIENvbmZpZ3VyYXRpb24gUHVsbHVwICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSU9fR2V0Q2ZnUHVsbHVwKCAvKiBccmV0dXJuIFBJTyBDb25maWd1cmF0aW9uIFB1bGx1cCAqLw0KLSAgICBBVDkxUFNfUElPIHBQaW8gKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUElPIGNvbnRyb2xsZXIgKi8NCi17DQotICAgIHJldHVybiBwUGlvLT5QSU9fUFBVU1I7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT19Jc091dHB1dERhdGFTdGF0dXNTZXQgKi8NCi0vKiogXGJyaWVmIFRlc3QgaWYgUElPIE91dHB1dCBEYXRhIFN0YXR1cyBpcyBTZXQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgaW50IEFUOTFGX1BJT19Jc091dHB1dERhdGFTdGF0dXNTZXQoIEFUOTFQU19QSU8gcFBpbywgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQgKi8NCi17DQotICAgIHJldHVybiggQVQ5MUZfUElPX0dldE91dHB1dERhdGFTdGF0dXMoIHBQaW8gKSAmIGZsYWcgKTsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElPX0lzQ2ZnUHVsbHVwU3RhdHVzU2V0ICovDQotLyoqIFxicmllZiBUZXN0IGlmIFBJTyBDb25maWd1cmF0aW9uIFB1bGx1cCBTdGF0dXMgaXMgU2V0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIGludCBBVDkxRl9QSU9fSXNDZmdQdWxsdXBTdGF0dXNTZXQoIEFUOTFQU19QSU8gcFBpbywgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBJTyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZCAqLw0KLXsNCi0gICAgcmV0dXJuKCB+QVQ5MUZfUElPX0dldENmZ1B1bGx1cCggcFBpbyApICYgZmxhZyApOw0KLX0NCi0NCiAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSogICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFBNQw0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUE1DX0NmZ1N5c0Nsa0VuYWJsZVJlZyAqLw0KLS8qKiBcYnJpZWYgQ29uZmlndXJlIHRoZSBTeXN0ZW0gQ2xvY2sgRW5hYmxlIFJlZ2lzdGVyIG9mIHRoZSBQTUMgY29udHJvbGxlciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BNQ19DZmdTeXNDbGtFbmFibGVSZWcoIEFUOTFQU19QTUMgcFBNQywgLyogXGFyZyBwb2ludGVyIHRvIFBNQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbW9kZSApDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgUElUQw0KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElUSW5pdA0KKy8vKiBcYnJpZWYgU3lzdGVtIHRpbWVyIGluaXQgOiBwZXJpb2QgaW4gtXNlY29uZCwgc3lzdGVtIGNsb2NrIGZyZXEgaW4gTUh6DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElUSW5pdCgNCisgICAgICAgIEFUOTFQU19QSVRDIHBQSVRDLA0KKyAgICAgICAgdW5zaWduZWQgaW50IHBlcmlvZCwNCisgICAgICAgIHVuc2lnbmVkIGludCBwaXRfZnJlcXVlbmN5KQ0KIHsNCi0gICAgLyoqIFdyaXRlIHRvIHRoZSBTQ0VSIHJlZ2lzdGVyICovDQotICAgIHBQTUMtPlBNQ19TQ0VSID0gbW9kZTsNCisJcFBJVEMtPlBJVENfUElNUiA9IHBlcmlvZD8gKHBlcmlvZCAqIHBpdF9mcmVxdWVuY3kgKyA4KSA+PiA0IDogMDsgLy8gKzggdG8gYXZvaWQgJTEwIGFuZCAvMTANCisJcFBJVEMtPlBJVENfUElNUiB8PSBBVDkxQ19QSVRDX1BJVEVOOwkNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUE1DX0NmZ1N5c0Nsa0Rpc2FibGVSZWcgKi8NCi0vKiogXGJyaWVmIENvbmZpZ3VyZSB0aGUgU3lzdGVtIENsb2NrIERpc2FibGUgUmVnaXN0ZXIgb2YgdGhlIFBNQyBjb250cm9sbGVyICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0NmZ1N5c0Nsa0Rpc2FibGVSZWcoIEFUOTFQU19QTUMgcFBNQywgLyogXGFyZyBwb2ludGVyIHRvIFBNQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1vZGUgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJVFNldFBJVg0KKy8vKiBcYnJpZWYgU2V0IHRoZSBQSVQgUGVyaW9kaWMgSW50ZXJ2YWwgVmFsdWUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSVRTZXRQSVYoDQorICAgICAgICBBVDkxUFNfUElUQyBwUElUQywNCisgICAgICAgIHVuc2lnbmVkIGludCBwaXYpDQogew0KLSAgICAvKiogV3JpdGUgdG8gdGhlIFNDRFIgcmVnaXN0ZXIgKi8NCi0gICAgcFBNQy0+UE1DX1NDRFIgPSBtb2RlOw0KKwlwUElUQy0+UElUQ19QSU1SID0gcGl2IHwgKHBQSVRDLT5QSVRDX1BJTVIgJiAoQVQ5MUNfUElUQ19QSVRFTiB8IEFUOTFDX1BJVENfUElUSUVOKSk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BNQ19HZXRTeXNDbGtTdGF0dXNSZWcgKi8NCi0vKiogXGJyaWVmIFJldHVybiB0aGUgU3lzdGVtIENsb2NrIFN0YXR1cyBSZWdpc3RlciBvZiB0aGUgUE1DIGNvbnRyb2xsZXIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BNQ19HZXRTeXNDbGtTdGF0dXNSZWcoIEFUOTFQU19QTUMgcFBNQyAvKiBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJVEVuYWJsZUludA0KKy8vKiBcYnJpZWYgRW5hYmxlIFBJVCBwZXJpb2RpYyBpbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSVRFbmFibGVJbnQoDQorICAgICAgICBBVDkxUFNfUElUQyBwUElUQykNCiB7DQotICAgIHJldHVybiBwUE1DLT5QTUNfU0NTUjsNCisJcFBJVEMtPlBJVENfUElNUiB8PSBBVDkxQ19QSVRDX1BJVElFTjsJDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jayAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIHBlcmlwaGVyYWwgY2xvY2sgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soIEFUOTFQU19QTUMgcFBNQywgICAgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gUE1DIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHBlcmlwaElkcyApIC8qIFxhcmcgSURzIG9mIHBlcmlwaGVyYWxzIHRvIGVuYWJsZSAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJVERpc2FibGVJbnQNCisvLyogXGJyaWVmIERpc2FibGUgUElUIHBlcmlvZGljIGludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJVERpc2FibGVJbnQoDQorICAgICAgICBBVDkxUFNfUElUQyBwUElUQykNCiB7DQotICAgIHBQTUMtPlBNQ19QQ0VSID0gcGVyaXBoSWRzOw0KKwlwUElUQy0+UElUQ19QSU1SICY9IH5BVDkxQ19QSVRDX1BJVElFTjsJDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BNQ19EaXNhYmxlUGVyaXBoQ2xvY2sgKi8NCi0vKiogXGJyaWVmIERpc2FibGUgcGVyaXBoZXJhbCBjbG9jayAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BNQ19EaXNhYmxlUGVyaXBoQ2xvY2soIEFUOTFQU19QTUMgcFBNQywgICAgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gUE1DIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwZXJpcGhJZHMgKSAvKiBcYXJnIElEcyBvZiBwZXJpcGhlcmFscyB0byBlbmFibGUgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSVRHZXRNb2RlDQorLy8qIFxicmllZiBSZWFkIFBJVCBtb2RlIHJlZ2lzdGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSVRHZXRNb2RlKA0KKyAgICAgICAgQVQ5MVBTX1BJVEMgcFBJVEMpDQogew0KLSAgICBwUE1DLT5QTUNfUENEUiA9IHBlcmlwaElkczsNCisJcmV0dXJuKHBQSVRDLT5QSVRDX1BJTVIpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QTUNfR2V0UGVyaXBoQ2xvY2sgKi8NCi0vKiogXGJyaWVmIEdldCBwZXJpcGhlcmFsIGNsb2NrIHN0YXR1cyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUE1DX0dldFBlcmlwaENsb2NrKCBBVDkxUFNfUE1DIHBQTUMgKSAvKiBcYXJnIHBvaW50ZXIgdG8gUE1DIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSVRHZXRTdGF0dXMNCisvLyogXGJyaWVmIFJlYWQgUElUIHN0YXR1cyByZWdpc3Rlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUElUR2V0U3RhdHVzKA0KKyAgICAgICAgQVQ5MVBTX1BJVEMgcFBJVEMpDQogew0KLSAgICByZXR1cm4gcFBNQy0+UE1DX1BDU1I7DQorCXJldHVybihwUElUQy0+UElUQ19QSVNSKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQ0tHUl9DZmdNYWluT3NjaWxsYXRvclJlZyAqLw0KLS8qKiBcYnJpZWYgQ2ZnIHRoZSBtYWluIG9zY2lsbGF0b3IgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9DS0dSX0NmZ01haW5Pc2NpbGxhdG9yUmVnKCBBVDkxUFNfQ0tHUiBwQ0tHUiwgLyogXGFyZyBwb2ludGVyIHRvIENLR1IgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1vZGUgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJVEdldFBJSVINCisvLyogXGJyaWVmIFJlYWQgUElUIENQSVYgYW5kIFBJQ05UIHdpdGhvdXQgcmVzc2V0dGluZyB0aGUgY291bnRlcnMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJVEdldFBJSVIoDQorICAgICAgICBBVDkxUFNfUElUQyBwUElUQykNCiB7DQotICAgIHBDS0dSLT5DS0dSX01PUiA9IG1vZGU7DQorCXJldHVybihwUElUQy0+UElUQ19QSUlSKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQ0tHUl9HZXRNYWluT3NjaWxsYXRvclJlZyAqLw0KLS8qKiBcYnJpZWYgQ2ZnIHRoZSBtYWluIG9zY2lsbGF0b3IgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NLR1JfR2V0TWFpbk9zY2lsbGF0b3JSZWcoIEFUOTFQU19DS0dSIHBDS0dSICkgLyogXGFyZyBwb2ludGVyIHRvIENLR1IgY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJVEdldFBJVlINCisvLyogXGJyaWVmIFJlYWQgU3lzdGVtIHRpbWVyIENQSVYgYW5kIFBJQ05UIHdpdGhvdXQgcmVzc2V0dGluZyB0aGUgY291bnRlcnMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJVEdldFBJVlIoDQorICAgICAgICBBVDkxUFNfUElUQyBwUElUQykNCiB7DQotICAgIHJldHVybiBwQ0tHUi0+Q0tHUl9NT1I7DQorCXJldHVybihwUElUQy0+UElUQ19QSVZSKTsNCiB9DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQ0tHUl9FbmFibGVNYWluT3NjaWxsYXRvciAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIHRoZSBtYWluIG9zY2lsbGF0b3IgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9DS0dSX0VuYWJsZU1haW5Pc2NpbGxhdG9yKCBBVDkxUFNfQ0tHUiBwQ0tHUiApIC8qIFxhcmcgcG9pbnRlciB0byBDS0dSIGNvbnRyb2xsZXIgKi8NCi17DQotICAgIHBDS0dSLT5DS0dSX01PUiB8PSBBVDkxQ19DS0dSX01PU0NFTjsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQ0tHUl9EaXNhYmxlTWFpbk9zY2lsbGF0b3IgKi8NCi0vKiogXGJyaWVmIERpc2FibGUgdGhlIG1haW4gb3NjaWxsYXRvciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0NLR1JfRGlzYWJsZU1haW5Pc2NpbGxhdG9yKCBBVDkxUFNfQ0tHUiBwQ0tHUiApIC8qIFxhcmcgcG9pbnRlciB0byBDS0dSIGNvbnRyb2xsZXIgKi8NCi17DQotICAgIHBDS0dSLT5DS0dSX01PUiAmPSB+QVQ5MUNfQ0tHUl9NT1NDRU47DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0NLR1JfQ2ZnTWFpbk9zY1N0YXJ0VXBUaW1lICovDQotLyoqIFxicmllZiBDZmcgTU9SIFJlZ2lzdGVyIGFjY29yZGluZyB0byB0aGUgbWFpbiBvc2Mgc3RhcnR1cCB0aW1lICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQ0tHUl9DZmdNYWluT3NjU3RhcnRVcFRpbWUoIEFUOTFQU19DS0dSIHBDS0dSLCAgICAgICAgIC8qIFxhcmcgcG9pbnRlciB0byBDS0dSIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3RhcnR1cF90aW1lLCAvKiBcYXJnIG1haW4gb3NjIHN0YXJ0dXAgdGltZSBpbiBtaWNyb3NlY29uZCAodXMpICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNsb3dDbG9jayApICAgLyogXGFyZyBzbG93Q2xvY2sgaW4gSHogKi8NCi17DQotICAgIHBDS0dSLT5DS0dSX01PUiAmPSB+QVQ5MUNfQ0tHUl9PU0NPVU5UOw0KLSAgICBwQ0tHUi0+Q0tHUl9NT1IgfD0gKCAoIHNsb3dDbG9jayAqIHN0YXJ0dXBfdGltZSApIC8gKCA4ICogMTAwMDAwMCApICkgPDwgODsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQ0tHUl9HZXRNYWluQ2xvY2tGcmVxUmVnICovDQotLyoqIFxicmllZiBDZmcgdGhlIG1haW4gb3NjaWxsYXRvciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0tHUl9HZXRNYWluQ2xvY2tGcmVxUmVnKCBBVDkxUFNfQ0tHUiBwQ0tHUiApIC8qIFxhcmcgcG9pbnRlciB0byBDS0dSIGNvbnRyb2xsZXIgKi8NCi17DQotICAgIHJldHVybiBwQ0tHUi0+Q0tHUl9NQ0ZSOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9DS0dSX0dldE1haW5DbG9jayAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIE1haW4gY2xvY2sgaW4gSHogKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NLR1JfR2V0TWFpbkNsb2NrKCBBVDkxUFNfQ0tHUiBwQ0tHUiwgICAgICAgLyogXGFyZyBwb2ludGVyIHRvIENLR1IgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNsb3dDbG9jayApIC8qIFxhcmcgc2xvd0Nsb2NrIGluIEh6ICovDQotew0KLSAgICByZXR1cm4gKCAoIHBDS0dSLT5DS0dSX01DRlIgJiBBVDkxQ19DS0dSX01BSU5GICkgKiBzbG93Q2xvY2sgKSA+PiA0Ow0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QTUNfQ2ZnTUNLUmVnICovDQotLyoqIFxicmllZiBDZmcgTWFzdGVyIENsb2NrIFJlZ2lzdGVyICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0NmZ01DS1JlZyggQVQ5MVBTX1BNQyBwUE1DLCAvKiBcYXJnIHBvaW50ZXIgdG8gUE1DIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtb2RlICkNCi17DQotICAgIHBQTUMtPlBNQ19NQ0tSID0gbW9kZTsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUE1DX0dldE1DS1JlZyAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIE1hc3RlciBDbG9jayBSZWdpc3RlciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUE1DX0dldE1DS1JlZyggQVQ5MVBTX1BNQyBwUE1DICkgLyogXGFyZyBwb2ludGVyIHRvIFBNQyBjb250cm9sbGVyICovDQotew0KLSAgICByZXR1cm4gcFBNQy0+UE1DX01DS1I7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUE1DX0dldE1hc3RlckNsb2NrICovDQotLyoqIFxicmllZiBSZXR1cm4gbWFzdGVyIGNsb2NrIGluIEh6IHdoaWNoIGNvcnJlcG9uZHMgdG8gcHJvY2Vzc29yIGNsb2NrIGZvciBBUk03ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BNQ19HZXRNYXN0ZXJDbG9jayggQVQ5MVBTX1BNQyBwUE1DLCAgICAgICAgIC8qIFxhcmcgcG9pbnRlciB0byBQTUMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFQU19DS0dSIHBDS0dSLCAgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gQ0tHUiBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNsb3dDbG9jayApIC8qIFxhcmcgc2xvd0Nsb2NrIGluIEh6ICovDQotew0KLSAgICB1bnNpZ25lZCBpbnQgcmVnID0gcFBNQy0+UE1DX01DS1I7DQotICAgIHVuc2lnbmVkIGludCBwcmVzY2FsZXIgPSAoIDEgPDwgKCAoIHJlZyAmIEFUOTFDX1BNQ19QUkVTICkgPj4gMiApICk7DQotICAgIHVuc2lnbmVkIGludCBwbGxEaXZpZGVyLCBwbGxNdWx0aXBsaWVyOw0KLQ0KLSAgICBzd2l0Y2goIHJlZyAmIEFUOTFDX1BNQ19DU1MgKQ0KLSAgICB7DQotICAgICAgICBjYXNlIEFUOTFDX1BNQ19DU1NfU0xPV19DTEs6IC8qIFNsb3cgY2xvY2sgc2VsZWN0ZWQgKi8NCi0gICAgICAgICAgICByZXR1cm4gc2xvd0Nsb2NrIC8gcHJlc2NhbGVyOw0KLQ0KLSAgICAgICAgY2FzZSBBVDkxQ19QTUNfQ1NTX01BSU5fQ0xLOiAvKiBNYWluIGNsb2NrIGlzIHNlbGVjdGVkICovDQotICAgICAgICAgICAgcmV0dXJuIEFUOTFGX0NLR1JfR2V0TWFpbkNsb2NrKCBwQ0tHUiwgc2xvd0Nsb2NrICkgLyBwcmVzY2FsZXI7DQotDQotICAgICAgICBjYXNlIEFUOTFDX1BNQ19DU1NfUExMX0NMSzogLyogUExMQiBjbG9jayBpcyBzZWxlY3RlZCAqLw0KLSAgICAgICAgICAgIHJlZyA9IHBDS0dSLT5DS0dSX1BMTFI7DQotICAgICAgICAgICAgcGxsRGl2aWRlciA9ICggcmVnICYgQVQ5MUNfQ0tHUl9ESVYgKTsNCi0gICAgICAgICAgICBwbGxNdWx0aXBsaWVyID0gKCAoIHJlZyAmIEFUOTFDX0NLR1JfTVVMICkgPj4gMTYgKSArIDE7DQotICAgICAgICAgICAgcmV0dXJuIEFUOTFGX0NLR1JfR2V0TWFpbkNsb2NrKCBwQ0tHUiwgc2xvd0Nsb2NrICkgLyBwbGxEaXZpZGVyICogcGxsTXVsdGlwbGllciAvIHByZXNjYWxlcjsNCi0gICAgfQ0KLQ0KLSAgICByZXR1cm4gMDsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUE1DX0VuYWJsZVBDSyAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIHBlcmlwaGVyYWwgY2xvY2sgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QTUNfRW5hYmxlUENLKCBBVDkxUFNfUE1DIHBQTUMsICAvKiBcYXJnIHBvaW50ZXIgdG8gUE1DIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwY2ssIC8qIFxhcmcgUGVyaXBoZXJhbCBjbG9jayBpZGVudGlmaWVyIDAgLi4gNyAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1vZGUgKQ0KLXsNCi0gICAgcFBNQy0+UE1DX1BDS1JbIHBjayBdID0gbW9kZTsNCi0gICAgcFBNQy0+UE1DX1NDRVIgPSAoIDEgPDwgcGNrICkgPDwgODsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUE1DX0Rpc2FibGVQQ0sgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBwZXJpcGhlcmFsIGNsb2NrICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0Rpc2FibGVQQ0soIEFUOTFQU19QTUMgcFBNQywgICAvKiBcYXJnIHBvaW50ZXIgdG8gUE1DIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcGNrICkgLyogXGFyZyBQZXJpcGhlcmFsIGNsb2NrIGlkZW50aWZpZXIgMCAuLiA3ICovDQotew0KLSAgICBwUE1DLT5QTUNfU0NEUiA9ICggMSA8PCBwY2sgKSA8PCA4Ow0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QTUNfRW5hYmxlSXQgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBQTUMgaW50ZXJydXB0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0VuYWJsZUl0KCBBVDkxUFNfUE1DIHBQTUMsICAgIC8qIHBvaW50ZXIgdG8gYSBQTUMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIElUIHRvIGJlIGVuYWJsZWQgKi8NCi17DQotICAgIC8qKiBXcml0ZSB0byB0aGUgSUVSIHJlZ2lzdGVyICovDQotICAgIHBQTUMtPlBNQ19JRVIgPSBmbGFnOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QTUNfRGlzYWJsZUl0ICovDQotLyoqIFxicmllZiBEaXNhYmxlIFBNQyBpbnRlcnJ1cHQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QTUNfRGlzYWJsZUl0KCBBVDkxUFNfUE1DIHBQTUMsICAgIC8qIHBvaW50ZXIgdG8gYSBQTUMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBJVCB0byBiZSBkaXNhYmxlZCAqLw0KLXsNCi0gICAgLyoqIFdyaXRlIHRvIHRoZSBJRFIgcmVnaXN0ZXIgKi8NCi0gICAgcFBNQy0+UE1DX0lEUiA9IGZsYWc7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BNQ19HZXRTdGF0dXMgKi8NCi0vKiogXGJyaWVmIFJldHVybiBQTUMgSW50ZXJydXB0IFN0YXR1cyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUE1DX0dldFN0YXR1cyggLyogXHJldHVybiBQTUMgSW50ZXJydXB0IFN0YXR1cyAqLw0KLSAgICBBVDkxUFNfUE1DIHBQTUMgKSAgICAgICAgICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIGEgUE1DIGNvbnRyb2xsZXIgKi8NCi17DQotICAgIHJldHVybiBwUE1DLT5QTUNfU1I7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BNQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzICovDQotLyoqIFxicmllZiBSZXR1cm4gUE1DIEludGVycnVwdCBNYXNrIFN0YXR1cyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUE1DX0dldEludGVycnVwdE1hc2tTdGF0dXMoIC8qIFxyZXR1cm4gUE1DIEludGVycnVwdCBNYXNrIFN0YXR1cyAqLw0KLSAgICBBVDkxUFNfUE1DIHBQTUMgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcG9pbnRlciB0byBhIFBNQyBjb250cm9sbGVyICovDQotew0KLSAgICByZXR1cm4gcFBNQy0+UE1DX0lNUjsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUE1DX0lzSW50ZXJydXB0TWFza2VkICovDQotLyoqIFxicmllZiBUZXN0IGlmIFBNQyBJbnRlcnJ1cHQgaXMgTWFza2VkICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QTUNfSXNJbnRlcnJ1cHRNYXNrZWQoIEFUOTFQU19QTUMgcFBNQywgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBNQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZCAqLw0KLXsNCi0gICAgcmV0dXJuKCBBVDkxRl9QTUNfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggcFBNQyApICYgZmxhZyApOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QTUNfSXNTdGF0dXNTZXQgKi8NCi0vKiogXGJyaWVmIFRlc3QgaWYgUE1DIFN0YXR1cyBpcyBTZXQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BNQ19Jc1N0YXR1c1NldCggQVQ5MVBTX1BNQyBwUE1DLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUE1DIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkICovDQotew0KLSAgICByZXR1cm4oIEFUOTFGX1BNQ19HZXRTdGF0dXMoIHBQTUMgKSAmIGZsYWcgKTsNCi19IC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICAqICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFJTVEMNCi0gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUlNUU29mdFJlc2V0ICovDQotLyoqIFxicmllZiBTdGFydCBTb2Z0d2FyZSBSZXNldCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1JTVFNvZnRSZXNldCggQVQ5MVBTX1JTVEMgcFJTVEMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCByZXNldCApDQotew0KLSAgICBwUlNUQy0+UlNUQ19SQ1IgPSAoIDB4QTUwMDAwMDAgfCByZXNldCApOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9SU1RTZXRNb2RlICovDQotLyoqIFxicmllZiBTZXQgUmVzZXQgTW9kZSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1JTVFNldE1vZGUoIEFUOTFQU19SU1RDIHBSU1RDLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1vZGUgKQ0KLXsNCi0gICAgcFJTVEMtPlJTVENfUk1SID0gKCAweEE1MDAwMDAwIHwgbW9kZSApOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9SU1RHZXRNb2RlICovDQotLyoqIFxicmllZiBHZXQgUmVzZXQgTW9kZSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUlNUR2V0TW9kZSggQVQ5MVBTX1JTVEMgcFJTVEMgKQ0KLXsNCi0gICAgcmV0dXJuKCBwUlNUQy0+UlNUQ19STVIgKTsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUlNUR2V0U3RhdHVzICovDQotLyoqIFxicmllZiBHZXQgUmVzZXQgU3RhdHVzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9SU1RHZXRTdGF0dXMoIEFUOTFQU19SU1RDIHBSU1RDICkNCi17DQotICAgIHJldHVybiggcFJTVEMtPlJTVENfUlNSICk7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1JTVElzU29mdFJzdEFjdGl2ZSAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuICE9MCBpZiBzb2Z0d2FyZSByZXNldCBpcyBzdGlsbCBub3QgY29tcGxldGVkICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9SU1RJc1NvZnRSc3RBY3RpdmUoIEFUOTFQU19SU1RDIHBSU1RDICkNCi17DQotICAgIHJldHVybiggKCBwUlNUQy0+UlNUQ19SU1IgKSAmIEFUOTFDX1JTVENfU1JDTVAgKTsNCi19DQotDQogLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0qICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBSVFRDDQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgIEFUOTFGX1NldFJUVF9UaW1lQmFzZSgpICovDQotLyoqIFxicmllZiAgU2V0IHRoZSBSVFQgcHJlc2NhbGVyIGFjY29yZGluZyB0byB0aGUgVGltZUJhc2UgaW4gbXMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9SVFRTZXRUaW1lQmFzZSggQVQ5MVBTX1JUVEMgcFJUVEMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbXMgKQ0KKyAgICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFdEVEMNCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1dEVFNldE1vZGUNCisvLyogXGJyaWVmIFNldCBXYXRjaGRvZyBNb2RlIFJlZ2lzdGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfV0RUU2V0TW9kZSgNCisgICAgICAgIEFUOTFQU19XRFRDIHBXRFRDLA0KKyAgICAgICAgdW5zaWduZWQgaW50IE1vZGUpDQogew0KLSAgICBpZiggbXMgPiAyMDAwICkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIDE7IC8qIEFUOTFDX1RJTUVfT1VUX09GX1JBTkdFICovDQotICAgIH0NCi0NCi0gICAgcFJUVEMtPlJUVENfUlRNUiAmPSB+MHhGRkZGOw0KLSAgICBwUlRUQy0+UlRUQ19SVE1SIHw9ICggKCAoIG1zIDw8IDE1ICkgLyAxMDAwICkgJiAweEZGRkYgKTsNCi0gICAgcmV0dXJuIDA7DQorCXBXRFRDLT5XRFRDX1dETVIgPSBNb2RlOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgIEFUOTFGX1JUVFNldFByZXNjYWxlcigpICovDQotLyoqIFxicmllZiAgU2V0IHRoZSBuZXcgcHJlc2NhbGVyIHZhbHVlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUlRUU2V0UHJlc2NhbGVyKCBBVDkxUFNfUlRUQyBwUlRUQywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcnRwcmVzICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9XRFRSZXN0YXJ0DQorLy8qIFxicmllZiBSZXN0YXJ0IFdhdGNoZG9nDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfV0RUUmVzdGFydCgNCisgICAgICAgIEFUOTFQU19XRFRDIHBXRFRDKQ0KIHsNCi0gICAgcFJUVEMtPlJUVENfUlRNUiAmPSB+MHhGRkZGOw0KLSAgICBwUlRUQy0+UlRUQ19SVE1SIHw9ICggcnRwcmVzICYgMHhGRkZGICk7DQotICAgIHJldHVybiggcFJUVEMtPlJUVENfUlRNUiApOw0KKwlwV0RUQy0+V0RUQ19XRENSID0gMHhBNTAwMDAwMTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgICBBVDkxRl9SVFRSZXN0YXJ0KCkgKi8NCi0vKiogXGJyaWVmICBSZXN0YXJ0IHRoZSBSVFQgcHJlc2NhbGVyICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1JUVFJlc3RhcnQoIEFUOTFQU19SVFRDIHBSVFRDICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9XRFRTR2V0dGF0dXMNCisvLyogXGJyaWVmIEdldCBXYXRjaGRvZyBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1dEVFNHZXR0YXR1cygNCisgICAgICAgIEFUOTFQU19XRFRDIHBXRFRDKQ0KIHsNCi0gICAgcFJUVEMtPlJUVENfUlRNUiB8PSBBVDkxQ19SVFRDX1JUVFJTVDsNCisJcmV0dXJuKHBXRFRDLT5XRFRDX1dEU1IgJiAweDMpOw0KIH0NCiANCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgIEFUOTFGX1JUVF9TZXRBbGFybUlOVCgpICovDQotLyoqIFxicmllZiAgRW5hYmxlIFJUVCBBbGFybSBJbnRlcnJ1cHQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUlRUU2V0QWxhcm1JTlQoIEFUOTFQU19SVFRDIHBSVFRDICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9XRFRHZXRQZXJpb2QNCisvLyogXGJyaWVmIFRyYW5zbGF0ZSBtcyBpbnRvIFdhdGNoZG9nIENvbXBhdGlibGUgdmFsdWUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1dEVEdldFBlcmlvZCh1bnNpZ25lZCBpbnQgbXMpDQogew0KLSAgICBwUlRUQy0+UlRUQ19SVE1SIHw9IEFUOTFDX1JUVENfQUxNSUVOOw0KKwlpZiAoKG1zIDwgNCkgfHwgKG1zID4gMTYwMDApKQ0KKwkJcmV0dXJuIDA7DQorCXJldHVybigobXMgPDwgOCkgLyAxMDAwKTsNCiB9DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgICBBVDkxRl9SVFRfQ2xlYXJBbGFybUlOVCgpICovDQotLyoqIFxicmllZiAgRGlzYWJsZSBSVFQgQWxhcm0gSW50ZXJydXB0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1JUVENsZWFyQWxhcm1JTlQoIEFUOTFQU19SVFRDIHBSVFRDICkNCi17DQotICAgIHBSVFRDLT5SVFRDX1JUTVIgJj0gfkFUOTFDX1JUVENfQUxNSUVOOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgIEFUOTFGX1JUVF9TZXRSdHRJbmNJTlQoKSAqLw0KLS8qKiBcYnJpZWYgIEVuYWJsZSBSVFQgSU5DIEludGVycnVwdCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9SVFRTZXRSdHRJbmNJTlQoIEFUOTFQU19SVFRDIHBSVFRDICkNCi17DQotICAgIHBSVFRDLT5SVFRDX1JUTVIgfD0gQVQ5MUNfUlRUQ19SVFRJTkNJRU47DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICAgQVQ5MUZfUlRUX0NsZWFyUnR0SW5jSU5UKCkgKi8NCi0vKiogXGJyaWVmICBEaXNhYmxlIFJUVCBJTkMgSW50ZXJydXB0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1JUVENsZWFyUnR0SW5jSU5UKCBBVDkxUFNfUlRUQyBwUlRUQyApDQotew0KLSAgICBwUlRUQy0+UlRUQ19SVE1SICY9IH5BVDkxQ19SVFRDX1JUVElOQ0lFTjsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgICBBVDkxRl9SVFRfU2V0QWxhcm1WYWx1ZSgpICovDQotLyoqIFxicmllZiAgU2V0IFJUVCBBbGFybSBWYWx1ZSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9SVFRTZXRBbGFybVZhbHVlKCBBVDkxUFNfUlRUQyBwUlRUQywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBhbGFybSApDQotew0KLSAgICBwUlRUQy0+UlRUQ19SVEFSID0gYWxhcm07DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICAgQVQ5MUZfUlRUX0dldEFsYXJtVmFsdWUoKSAqLw0KLS8qKiBcYnJpZWYgIEdldCBSVFQgQWxhcm0gVmFsdWUgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9SVFRHZXRBbGFybVZhbHVlKCBBVDkxUFNfUlRUQyBwUlRUQyApDQotew0KLSAgICByZXR1cm4oIHBSVFRDLT5SVFRDX1JUQVIgKTsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgICBBVDkxRl9SVFRHZXRTdGF0dXMoKSAqLw0KLS8qKiBcYnJpZWYgIFJlYWQgdGhlIFJUVCBzdGF0dXMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9SVFRHZXRTdGF0dXMoIEFUOTFQU19SVFRDIHBSVFRDICkNCi17DQotICAgIHJldHVybiggcFJUVEMtPlJUVENfUlRTUiApOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgIEFUOTFGX1JUVF9SZWFkVmFsdWUoKSAqLw0KLS8qKiBcYnJpZWYgIFJlYWQgdGhlIFJUVCB2YWx1ZSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1JUVFJlYWRWYWx1ZSggQVQ5MVBTX1JUVEMgcFJUVEMgKQ0KLXsNCi0gICAgcmVnaXN0ZXIgdm9sYXRpbGUgdW5zaWduZWQgaW50IHZhbDEsIHZhbDI7DQotDQotICAgIGRvDQotICAgIHsNCi0gICAgICAgIHZhbDEgPSBwUlRUQy0+UlRUQ19SVFZSOw0KLSAgICAgICAgdmFsMiA9IHBSVFRDLT5SVFRDX1JUVlI7DQotICAgIH0NCi0gICAgd2hpbGUoIHZhbDEgIT0gdmFsMiApOw0KLQ0KLSAgICByZXR1cm4oIHZhbDEgKTsNCi19DQotDQogLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0qICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBQSVRDDQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSVRJbml0ICovDQotLyoqIFxicmllZiBTeXN0ZW0gdGltZXIgaW5pdCA6IHBlcmlvZCBpbiC1c2Vjb25kLCBzeXN0ZW0gY2xvY2sgZnJlcSBpbiBNSHogKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QSVRJbml0KCBBVDkxUFNfUElUQyBwUElUQywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwZXJpb2QsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcGl0X2ZyZXF1ZW5jeSApDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgVlJFRw0KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVlJFR19FbmFibGVfTG93UG93ZXJNb2RlDQorLy8qIFxicmllZiBFbmFibGUgVlJFRyBMb3cgUG93ZXIgTW9kZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1ZSRUdfRW5hYmxlX0xvd1Bvd2VyTW9kZSgNCisgICAgICAgIEFUOTFQU19WUkVHIHBWUkVHKQ0KIHsNCi0gICAgcFBJVEMtPlBJVENfUElNUiA9IHBlcmlvZCA/ICggcGVyaW9kICogcGl0X2ZyZXF1ZW5jeSArIDggKSA+PiA0IDogMDsgLyogKzggdG8gYXZvaWQgJTEwIGFuZCAvMTAgKi8NCi0gICAgcFBJVEMtPlBJVENfUElNUiB8PSBBVDkxQ19QSVRDX1BJVEVOOw0KKwlwVlJFRy0+VlJFR19NUiB8PSBBVDkxQ19WUkVHX1BTVERCWTsJDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJVFNldFBJViAqLw0KLS8qKiBcYnJpZWYgU2V0IHRoZSBQSVQgUGVyaW9kaWMgSW50ZXJ2YWwgVmFsdWUgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QSVRTZXRQSVYoIEFUOTFQU19QSVRDIHBQSVRDLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcGl2ICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9WUkVHX0Rpc2FibGVfTG93UG93ZXJNb2RlDQorLy8qIFxicmllZiBEaXNhYmxlIFZSRUcgTG93IFBvd2VyIE1vZGUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9WUkVHX0Rpc2FibGVfTG93UG93ZXJNb2RlKA0KKyAgICAgICAgQVQ5MVBTX1ZSRUcgcFZSRUcpDQogew0KLSAgICBwUElUQy0+UElUQ19QSU1SID0gcGl2IHwgKCBwUElUQy0+UElUQ19QSU1SICYgKCBBVDkxQ19QSVRDX1BJVEVOIHwgQVQ5MUNfUElUQ19QSVRJRU4gKSApOw0KLX0NCisJcFZSRUctPlZSRUdfTVIgJj0gfkFUOTFDX1ZSRUdfUFNUREJZOwkNCit9LyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBNQw0KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElURW5hYmxlSW50ICovDQotLyoqIFxicmllZiBFbmFibGUgUElUIHBlcmlvZGljIGludGVycnVwdCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BJVEVuYWJsZUludCggQVQ5MVBTX1BJVEMgcFBJVEMgKQ0KKyNkZWZpbmUgQVQ5MUNfTUNfQ09SUkVDVF9LRVkgICgodW5zaWduZWQgaW50KSAweDVBIDw8IDI0KSAvLyAoTUMpIENvcnJlY3QgUHJvdGVjdCBLZXkNCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9NQ19SZW1hcA0KKy8vKiBcYnJpZWYgTWFrZSBSZW1hcA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX01DX1JlbWFwICh2b2lkKSAgICAgLy8NCiB7DQotICAgIHBQSVRDLT5QSVRDX1BJTVIgfD0gQVQ5MUNfUElUQ19QSVRJRU47DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJVERpc2FibGVJbnQgKi8NCi0vKiogXGJyaWVmIERpc2FibGUgUElUIHBlcmlvZGljIGludGVycnVwdCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BJVERpc2FibGVJbnQoIEFUOTFQU19QSVRDIHBQSVRDICkNCi17DQotICAgIHBQSVRDLT5QSVRDX1BJTVIgJj0gfkFUOTFDX1BJVENfUElUSUVOOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSVRHZXRNb2RlICovDQotLyoqIFxicmllZiBSZWFkIFBJVCBtb2RlIHJlZ2lzdGVyICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSVRHZXRNb2RlKCBBVDkxUFNfUElUQyBwUElUQyApDQotew0KLSAgICByZXR1cm4oIHBQSVRDLT5QSVRDX1BJTVIgKTsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUElUR2V0U3RhdHVzICovDQotLyoqIFxicmllZiBSZWFkIFBJVCBzdGF0dXMgcmVnaXN0ZXIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJVEdldFN0YXR1cyggQVQ5MVBTX1BJVEMgcFBJVEMgKQ0KLXsNCi0gICAgcmV0dXJuKCBwUElUQy0+UElUQ19QSVNSICk7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJVEdldFBJSVIgKi8NCi0vKiogXGJyaWVmIFJlYWQgUElUIENQSVYgYW5kIFBJQ05UIHdpdGhvdXQgcmVzc2V0dGluZyB0aGUgY291bnRlcnMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BJVEdldFBJSVIoIEFUOTFQU19QSVRDIHBQSVRDICkNCi17DQotICAgIHJldHVybiggcFBJVEMtPlBJVENfUElJUiApOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSVRHZXRQSVZSICovDQotLyoqIFxicmllZiBSZWFkIFN5c3RlbSB0aW1lciBDUElWIGFuZCBQSUNOVCB3aXRob3V0IHJlc3NldHRpbmcgdGhlIGNvdW50ZXJzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QSVRHZXRQSVZSKCBBVDkxUFNfUElUQyBwUElUQyApDQotew0KLSAgICByZXR1cm4oIHBQSVRDLT5QSVRDX1BJVlIgKTsNCi19DQotDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0qICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBXRFRDDQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9XRFRTZXRNb2RlICovDQotLyoqIFxicmllZiBTZXQgV2F0Y2hkb2cgTW9kZSBSZWdpc3RlciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1dEVFNldE1vZGUoIEFUOTFQU19XRFRDIHBXRFRDLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IE1vZGUgKQ0KLXsNCi0gICAgcFdEVEMtPldEVENfV0RNUiA9IE1vZGU7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1dEVFJlc3RhcnQgKi8NCi0vKiogXGJyaWVmIFJlc3RhcnQgV2F0Y2hkb2cgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9XRFRSZXN0YXJ0KCBBVDkxUFNfV0RUQyBwV0RUQyApDQotew0KLSAgICBwV0RUQy0+V0RUQ19XRENSID0gMHhBNTAwMDAwMTsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfV0RUU0dldHRhdHVzICovDQotLyoqIFxicmllZiBHZXQgV2F0Y2hkb2cgU3RhdHVzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9XRFRTR2V0dGF0dXMoIEFUOTFQU19XRFRDIHBXRFRDICkNCi17DQotICAgIHJldHVybiggcFdEVEMtPldEVENfV0RTUiAmIDB4MyApOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9XRFRHZXRQZXJpb2QgKi8NCi0vKiogXGJyaWVmIFRyYW5zbGF0ZSBtcyBpbnRvIFdhdGNoZG9nIENvbXBhdGlibGUgdmFsdWUgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1dEVEdldFBlcmlvZCggdW5zaWduZWQgaW50IG1zICkNCi17DQotICAgIGlmKCAoIG1zIDwgNCApIHx8ICggbXMgPiAxNjAwMCApICkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0NCi0gICAgcmV0dXJuKCAoIG1zIDw8IDggKSAvIDEwMDAgKTsNCi19DQotDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0qICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBWUkVHDQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9WUkVHX0VuYWJsZV9Mb3dQb3dlck1vZGUgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBWUkVHIExvdyBQb3dlciBNb2RlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVlJFR19FbmFibGVfTG93UG93ZXJNb2RlKCBBVDkxUFNfVlJFRyBwVlJFRyApDQotew0KLSAgICBwVlJFRy0+VlJFR19NUiB8PSBBVDkxQ19WUkVHX1BTVERCWTsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVlJFR19EaXNhYmxlX0xvd1Bvd2VyTW9kZSAqLw0KLS8qKiBcYnJpZWYgRGlzYWJsZSBWUkVHIExvdyBQb3dlciBNb2RlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVlJFR19EaXNhYmxlX0xvd1Bvd2VyTW9kZSggQVQ5MVBTX1ZSRUcgcFZSRUcgKQ0KLXsNCi0gICAgcFZSRUctPlZSRUdfTVIgJj0gfkFUOTFDX1ZSRUdfUFNUREJZOw0KLX0gLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gICogICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgTUMNCi0gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotDQotI2RlZmluZSBBVDkxQ19NQ19DT1JSRUNUX0tFWSAgICAoICggdW5zaWduZWQgaW50ICkgMHg1QSA8PCAyNCApIC8qIChNQykgQ29ycmVjdCBQcm90ZWN0IEtleSAqLw0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX01DX1JlbWFwICovDQotLyoqIFxicmllZiBNYWtlIFJlbWFwICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfTUNfUmVtYXAoIHZvaWQgKSAvKiAqLw0KLXsNCi0gICAgQVQ5MVBTX01DIHBNQyA9ICggQVQ5MVBTX01DICkgQVQ5MUNfQkFTRV9NQzsNCisgICAgQVQ5MVBTX01DIHBNQyA9IChBVDkxUFNfTUMpIEFUOTFDX0JBU0VfTUM7DQogDQogICAgIHBNQy0+TUNfUkNSID0gQVQ5MUNfTUNfUkNCOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9NQ19FRkNfQ2ZnTW9kZVJlZyAqLw0KLS8qKiBcYnJpZWYgQ29uZmlndXJlIHRoZSBFRkMgTW9kZSBSZWdpc3RlciBvZiB0aGUgTUMgY29udHJvbGxlciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX01DX0VGQ19DZmdNb2RlUmVnKCBBVDkxUFNfTUMgcE1DLCAgICAgIC8qIHBvaW50ZXIgdG8gYSBNQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1vZGUgKSAvKiBtb2RlIHJlZ2lzdGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfTUNfRUZDX0NmZ01vZGVSZWcNCisvLyogXGJyaWVmIENvbmZpZ3VyZSB0aGUgRUZDIE1vZGUgUmVnaXN0ZXIgb2YgdGhlIE1DIGNvbnRyb2xsZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9NQ19FRkNfQ2ZnTW9kZVJlZyAoDQorCUFUOTFQU19NQyBwTUMsIC8vIHBvaW50ZXIgdG8gYSBNQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBtb2RlKSAgICAgICAgLy8gbW9kZSByZWdpc3Rlcg0KIHsNCi0gICAgLyogV3JpdGUgdG8gdGhlIEZNUiByZWdpc3RlciAqLw0KLSAgICBwTUMtPk1DX0ZNUiA9IG1vZGU7DQorCS8vIFdyaXRlIHRvIHRoZSBGTVIgcmVnaXN0ZXINCisJcE1DLT5NQ19GTVIgPSBtb2RlOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9NQ19FRkNfR2V0TW9kZVJlZyAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIE1DIEVGQyBNb2RlIFJlZ3NpdGVyICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9NQ19FRkNfR2V0TW9kZVJlZyggQVQ5MVBTX01DIHBNQyApIC8qIHBvaW50ZXIgdG8gYSBNQyBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfTUNfRUZDX0dldE1vZGVSZWcNCisvLyogXGJyaWVmIFJldHVybiBNQyBFRkMgTW9kZSBSZWdzaXRlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfTUNfRUZDX0dldE1vZGVSZWcoDQorCUFUOTFQU19NQyBwTUMpIC8vIHBvaW50ZXIgdG8gYSBNQyBjb250cm9sbGVyDQogew0KLSAgICByZXR1cm4gcE1DLT5NQ19GTVI7DQorCXJldHVybiBwTUMtPk1DX0ZNUjsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfTUNfRUZDX0NvbXB1dGVGTUNOICovDQotLyoqIFxicmllZiBSZXR1cm4gTUMgRUZDIE1vZGUgUmVnc2l0ZXIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX01DX0VGQ19Db21wdXRlRk1DTiggaW50IG1hc3Rlcl9jbG9jayApIC8qIG1hc3RlciBjbG9jayBpbiBIeiAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX01DX0VGQ19Db21wdXRlRk1DTg0KKy8vKiBcYnJpZWYgUmV0dXJuIE1DIEVGQyBNb2RlIFJlZ3NpdGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9NQ19FRkNfQ29tcHV0ZUZNQ04oDQorCWludCBtYXN0ZXJfY2xvY2spIC8vIG1hc3RlciBjbG9jayBpbiBIeg0KIHsNCi0gICAgcmV0dXJuKCBtYXN0ZXJfY2xvY2sgLyAxMDAwMDAwICsgMiApOw0KKwlyZXR1cm4gKG1hc3Rlcl9jbG9jay8xMDAwMDAwICsyKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfTUNfRUZDX1BlcmZvcm1DbWQgKi8NCi0vKiogXGJyaWVmIFBlcmZvcm0gRUZDIENvbW1hbmQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9NQ19FRkNfUGVyZm9ybUNtZCggQVQ5MVBTX01DIHBNQywgLyogcG9pbnRlciB0byBhIE1DIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdHJhbnNmZXJfY21kICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9NQ19FRkNfUGVyZm9ybUNtZA0KKy8vKiBcYnJpZWYgUGVyZm9ybSBFRkMgQ29tbWFuZA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX01DX0VGQ19QZXJmb3JtQ21kICgNCisJQVQ5MVBTX01DIHBNQywgLy8gcG9pbnRlciB0byBhIE1DIGNvbnRyb2xsZXINCisgICAgdW5zaWduZWQgaW50IHRyYW5zZmVyX2NtZCkNCiB7DQotICAgIHBNQy0+TUNfRkNSID0gdHJhbnNmZXJfY21kOw0KKwlwTUMtPk1DX0ZDUiA9IHRyYW5zZmVyX2NtZDsJDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX01DX0VGQ19HZXRTdGF0dXMgKi8NCi0vKiogXGJyaWVmIFJldHVybiBNQyBFRkMgU3RhdHVzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9NQ19FRkNfR2V0U3RhdHVzKCBBVDkxUFNfTUMgcE1DICkgLyogcG9pbnRlciB0byBhIE1DIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9NQ19FRkNfR2V0U3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gTUMgRUZDIFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfTUNfRUZDX0dldFN0YXR1cygNCisJQVQ5MVBTX01DIHBNQykgLy8gcG9pbnRlciB0byBhIE1DIGNvbnRyb2xsZXINCiB7DQotICAgIHJldHVybiBwTUMtPk1DX0ZTUjsNCisJcmV0dXJuIHBNQy0+TUNfRlNSOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9NQ19FRkNfSXNJbnRlcnJ1cHRNYXNrZWQgKi8NCi0vKiogXGJyaWVmIFRlc3QgaWYgRUZDIE1DIEludGVycnVwdCBpcyBNYXNrZWQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX01DX0VGQ19Jc0ludGVycnVwdE1hc2tlZCggQVQ5MVBTX01DIHBNQywgICAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgTUMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9NQ19FRkNfSXNJbnRlcnJ1cHRNYXNrZWQNCisvLyogXGJyaWVmIFRlc3QgaWYgRUZDIE1DIEludGVycnVwdCBpcyBNYXNrZWQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX01DX0VGQ19Jc0ludGVycnVwdE1hc2tlZCgNCisgICAgICAgIEFUOTFQU19NQyBwTUMsICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIE1DIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KIHsNCi0gICAgcmV0dXJuKCBBVDkxRl9NQ19FRkNfR2V0TW9kZVJlZyggcE1DICkgJiBmbGFnICk7DQorCXJldHVybiAoQVQ5MUZfTUNfRUZDX0dldE1vZGVSZWcocE1DKSAmIGZsYWcpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9NQ19FRkNfSXNJbnRlcnJ1cHRTZXQgKi8NCi0vKiogXGJyaWVmIFRlc3QgaWYgRUZDIE1DIEludGVycnVwdCBpcyBTZXQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX01DX0VGQ19Jc0ludGVycnVwdFNldCggQVQ5MVBTX01DIHBNQywgICAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgTUMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9NQ19FRkNfSXNJbnRlcnJ1cHRTZXQNCisvLyogXGJyaWVmIFRlc3QgaWYgRUZDIE1DIEludGVycnVwdCBpcyBTZXQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX01DX0VGQ19Jc0ludGVycnVwdFNldCgNCisgICAgICAgIEFUOTFQU19NQyBwTUMsICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIE1DIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KIHsNCi0gICAgcmV0dXJuKCBBVDkxRl9NQ19FRkNfR2V0U3RhdHVzKCBwTUMgKSAmIGZsYWcgKTsNCisJcmV0dXJuIChBVDkxRl9NQ19FRkNfR2V0U3RhdHVzKHBNQykgJiBmbGFnKTsNCiB9DQogDQogLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0qICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBTUEkNCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1NQSV9PcGVuICovDQotLyoqIFxicmllZiBPcGVuIGEgU1BJIFBvcnQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1NQSV9PcGVuKCBjb25zdCB1bnNpZ25lZCBpbnQgbnVsbCApIC8qIFxhcmcgKi8NCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBTUEkNCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSV9PcGVuDQorLy8qIFxicmllZiBPcGVuIGEgU1BJIFBvcnQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1NQSV9PcGVuICgNCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBudWxsKSAgLy8gXGFyZw0KIHsNCi0gICAgLyogTk9UIERFRklORUQgQVQgVEhJUyBNT01FTlQgKi8NCi0gICAgcmV0dXJuKCAwICk7DQorICAgICAgICAvKiBOT1QgREVGSU5FRCBBVCBUSElTIE1PTUVOVCAqLw0KKyAgICAgICAgcmV0dXJuICggMCApOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9TUElfQ2ZnQ3MgKi8NCi0vKiogXGJyaWVmIENvbmZpZ3VyZSBTUEkgY2hpcCBzZWxlY3QgcmVnaXN0ZXIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9TUElfQ2ZnQ3MoIEFUOTFQU19TUEkgcFNQSSwgLyogcG9pbnRlciB0byBhIFNQSSBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjcywgICAgICAgICAgLyogU1BJIGNzIG51bWJlciAoMCB0byAzKSAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmFsICkgICAgICAgIC8qICBjaGlwIHNlbGVjdCByZWdpc3RlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSV9DZmdDcw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFNQSSBjaGlwIHNlbGVjdCByZWdpc3Rlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NQSV9DZmdDcyAoDQorCUFUOTFQU19TUEkgcFNQSSwgICAgIC8vIHBvaW50ZXIgdG8gYSBTUEkgY29udHJvbGxlcg0KKwlpbnQgY3MsICAgICAvLyBTUEkgY3MgbnVtYmVyICgwIHRvIDMpDQorIAlpbnQgdmFsKSAgIC8vICBjaGlwIHNlbGVjdCByZWdpc3Rlcg0KIHsNCi0gICAgLyoqIFdyaXRlIHRvIHRoZSBDU1IgcmVnaXN0ZXIgKi8NCi0gICAgKiggcFNQSS0+U1BJX0NTUiArIGNzICkgPSB2YWw7DQorCS8vKiBXcml0ZSB0byB0aGUgQ1NSIHJlZ2lzdGVyDQorCSoocFNQSS0+U1BJX0NTUiArIGNzKSA9IHZhbDsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1BJX0VuYWJsZUl0ICovDQotLyoqIFxicmllZiBFbmFibGUgU1BJIGludGVycnVwdCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1NQSV9FbmFibGVJdCggQVQ5MVBTX1NQSSBwU1BJLCAgICAvKiBwb2ludGVyIHRvIGEgU1BJIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBJVCB0byBiZSBlbmFibGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1BJX0VuYWJsZUl0DQorLy8qIFxicmllZiBFbmFibGUgU1BJIGludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NQSV9FbmFibGVJdCAoDQorCUFUOTFQU19TUEkgcFNQSSwgICAgIC8vIHBvaW50ZXIgdG8gYSBTUEkgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgICAvLyBJVCB0byBiZSBlbmFibGVkDQogew0KLSAgICAvKiogV3JpdGUgdG8gdGhlIElFUiByZWdpc3RlciAqLw0KLSAgICBwU1BJLT5TUElfSUVSID0gZmxhZzsNCisJLy8qIFdyaXRlIHRvIHRoZSBJRVIgcmVnaXN0ZXINCisJcFNQSS0+U1BJX0lFUiA9IGZsYWc7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1NQSV9EaXNhYmxlSXQgKi8NCi0vKiogXGJyaWVmIERpc2FibGUgU1BJIGludGVycnVwdCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1NQSV9EaXNhYmxlSXQoIEFUOTFQU19TUEkgcFNQSSwgICAgLyogcG9pbnRlciB0byBhIFNQSSBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIElUIHRvIGJlIGRpc2FibGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1BJX0Rpc2FibGVJdA0KKy8vKiBcYnJpZWYgRGlzYWJsZSBTUEkgaW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1BJX0Rpc2FibGVJdCAoDQorCUFUOTFQU19TUEkgcFNQSSwgLy8gcG9pbnRlciB0byBhIFNQSSBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAvLyBJVCB0byBiZSBkaXNhYmxlZA0KIHsNCi0gICAgLyoqIFdyaXRlIHRvIHRoZSBJRFIgcmVnaXN0ZXIgKi8NCi0gICAgcFNQSS0+U1BJX0lEUiA9IGZsYWc7DQorCS8vKiBXcml0ZSB0byB0aGUgSURSIHJlZ2lzdGVyDQorCXBTUEktPlNQSV9JRFIgPSBmbGFnOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9TUElfUmVzZXQgKi8NCi0vKiogXGJyaWVmIFJlc2V0IHRoZSBTUEkgY29udHJvbGxlciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1NQSV9SZXNldCggQVQ5MVBTX1NQSSBwU1BJIC8qIHBvaW50ZXIgdG8gYSBTUEkgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1BJX1Jlc2V0DQorLy8qIFxicmllZiBSZXNldCB0aGUgU1BJIGNvbnRyb2xsZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TUElfUmVzZXQgKA0KKwlBVDkxUFNfU1BJIHBTUEkgLy8gcG9pbnRlciB0byBhIFNQSSBjb250cm9sbGVyDQorCSkNCiB7DQotICAgIC8qKiBXcml0ZSB0byB0aGUgQ1IgcmVnaXN0ZXIgKi8NCi0gICAgcFNQSS0+U1BJX0NSID0gQVQ5MUNfU1BJX1NXUlNUOw0KKwkvLyogV3JpdGUgdG8gdGhlIENSIHJlZ2lzdGVyDQorCXBTUEktPlNQSV9DUiA9IEFUOTFDX1NQSV9TV1JTVDsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1BJX0VuYWJsZSAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIHRoZSBTUEkgY29udHJvbGxlciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1NQSV9FbmFibGUoIEFUOTFQU19TUEkgcFNQSSAvKiBwb2ludGVyIHRvIGEgU1BJIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUElfRW5hYmxlDQorLy8qIFxicmllZiBFbmFibGUgdGhlIFNQSSBjb250cm9sbGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1BJX0VuYWJsZSAoDQorCUFUOTFQU19TUEkgcFNQSSAvLyBwb2ludGVyIHRvIGEgU1BJIGNvbnRyb2xsZXINCisJKQ0KIHsNCi0gICAgLyoqIFdyaXRlIHRvIHRoZSBDUiByZWdpc3RlciAqLw0KLSAgICBwU1BJLT5TUElfQ1IgPSBBVDkxQ19TUElfU1BJRU47DQorCS8vKiBXcml0ZSB0byB0aGUgQ1IgcmVnaXN0ZXINCisJcFNQSS0+U1BJX0NSID0gQVQ5MUNfU1BJX1NQSUVOOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9TUElfRGlzYWJsZSAqLw0KLS8qKiBcYnJpZWYgRGlzYWJsZSB0aGUgU1BJIGNvbnRyb2xsZXIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9TUElfRGlzYWJsZSggQVQ5MVBTX1NQSSBwU1BJIC8qIHBvaW50ZXIgdG8gYSBTUEkgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUElfRGlzYWJsZQ0KKy8vKiBcYnJpZWYgRGlzYWJsZSB0aGUgU1BJIGNvbnRyb2xsZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TUElfRGlzYWJsZSAoDQorCUFUOTFQU19TUEkgcFNQSSAvLyBwb2ludGVyIHRvIGEgU1BJIGNvbnRyb2xsZXINCisJKQ0KIHsNCi0gICAgLyoqIFdyaXRlIHRvIHRoZSBDUiByZWdpc3RlciAqLw0KKwkvLyogV3JpdGUgdG8gdGhlIENSIHJlZ2lzdGVyDQorCXBTUEktPlNQSV9DUiA9IEFUOTFDX1NQSV9TUElESVM7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSV9DZmdNb2RlDQorLy8qIFxicmllZiBFbmFibGUgdGhlIFNQSSBjb250cm9sbGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1BJX0NmZ01vZGUgKA0KKwlBVDkxUFNfU1BJIHBTUEksIC8vIHBvaW50ZXIgdG8gYSBTUEkgY29udHJvbGxlcg0KKwlpbnQgbW9kZSkgICAgICAgIC8vIG1vZGUgcmVnaXN0ZXINCit7DQorCS8vKiBXcml0ZSB0byB0aGUgTVIgcmVnaXN0ZXINCisJcFNQSS0+U1BJX01SID0gbW9kZTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1BJX0NmZ1BDUw0KKy8vKiBcYnJpZWYgU3dpdGNoIHRvIHRoZSBjb3JyZWN0IFBDUyBvZiBTUEkgTW9kZSBSZWdpc3RlciA6IEZpeGVkIFBlcmlwaGVyYWwgU2VsZWN0ZWQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TUElfQ2ZnUENTICgNCisJQVQ5MVBTX1NQSSBwU1BJLCAvLyBwb2ludGVyIHRvIGEgU1BJIGNvbnRyb2xsZXINCisJY2hhciBQQ1NfRGV2aWNlKSAvLyBQQ1Mgb2YgdGhlIERldmljZQ0KK3sJDQorIAkvLyogV3JpdGUgdG8gdGhlIE1SIHJlZ2lzdGVyDQorCXBTUEktPlNQSV9NUiAmPSAweEZGRjBGRkZGOw0KKwlwU1BJLT5TUElfTVIgfD0gKCAoUENTX0RldmljZTw8MTYpICYgQVQ5MUNfU1BJX1BDUyApOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUElfUmVjZWl2ZUZyYW1lDQorLy8qIFxicmllZiBSZXR1cm4gMiBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgd2l0aCBCdWZmZXIgYW5kIE5leHQgQnVmZmVyLCAxIGlmIFBEQyBoYXMgYmVlbiBpbml0aWFsaXphZWQgd2l0aCBOZXh0IEJ1ZmZlciwgMCBpZiBQREMgaXMgYnVzeQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfU1BJX1JlY2VpdmVGcmFtZSAoDQorCUFUOTFQU19TUEkgcFNQSSwNCisJY2hhciAqcEJ1ZmZlciwNCisJdW5zaWduZWQgaW50IHN6QnVmZmVyLA0KKwljaGFyICpwTmV4dEJ1ZmZlciwNCisJdW5zaWduZWQgaW50IHN6TmV4dEJ1ZmZlciApDQorew0KKwlyZXR1cm4gQVQ5MUZfUERDX1JlY2VpdmVGcmFtZSgNCisJCShBVDkxUFNfUERDKSAmKHBTUEktPlNQSV9SUFIpLA0KKwkJcEJ1ZmZlciwNCisJCXN6QnVmZmVyLA0KKwkJcE5leHRCdWZmZXIsDQorCQlzek5leHRCdWZmZXIpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUElfU2VuZEZyYW1lDQorLy8qIFxicmllZiBSZXR1cm4gMiBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgd2l0aCBCdWZmZXIgYW5kIE5leHQgQnVmZmVyLCAxIGlmIFBEQyBoYXMgYmVlbiBpbml0aWFsaXphZWQgd2l0aCBOZXh0IEJ1ZmZlciwgMCBpZiBQREMgaXMgYlNQSXkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1NQSV9TZW5kRnJhbWUoDQorCUFUOTFQU19TUEkgcFNQSSwNCisJY2hhciAqcEJ1ZmZlciwNCisJdW5zaWduZWQgaW50IHN6QnVmZmVyLA0KKwljaGFyICpwTmV4dEJ1ZmZlciwNCisJdW5zaWduZWQgaW50IHN6TmV4dEJ1ZmZlciApDQorew0KKwlyZXR1cm4gQVQ5MUZfUERDX1NlbmRGcmFtZSgNCisJCShBVDkxUFNfUERDKSAmKHBTUEktPlNQSV9SUFIpLA0KKwkJcEJ1ZmZlciwNCisJCXN6QnVmZmVyLA0KKwkJcE5leHRCdWZmZXIsDQorCQlzek5leHRCdWZmZXIpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUElfQ2xvc2UNCisvLyogXGJyaWVmIENsb3NlIFNQSTogZGlzYWJsZSBJVCBkaXNhYmxlIHRyYW5zZmVydCwgY2xvc2UgUERDDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1BJX0Nsb3NlICgNCisJQVQ5MVBTX1NQSSBwU1BJKSAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgU1BJIGNvbnRyb2xsZXINCit7DQorICAgIC8vKiBSZXNldCBhbGwgdGhlIENoaXAgU2VsZWN0IHJlZ2lzdGVyDQorICAgIHBTUEktPlNQSV9DU1JbMF0gPSAwIDsNCisgICAgcFNQSS0+U1BJX0NTUlsxXSA9IDAgOw0KKyAgICBwU1BJLT5TUElfQ1NSWzJdID0gMCA7DQorICAgIHBTUEktPlNQSV9DU1JbM10gPSAwIDsNCisNCisgICAgLy8qIFJlc2V0IHRoZSBTUEkgbW9kZQ0KKyAgICBwU1BJLT5TUElfTVIgPSAwICA7DQorDQorICAgIC8vKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzDQorICAgIHBTUEktPlNQSV9JRFIgPSAweEZGRkZGRkZGIDsNCisNCisgICAgLy8qIEFib3J0IHRoZSBQZXJpcGhlcmFsIERhdGEgVHJhbnNmZXJzDQorICAgIEFUOTFGX1BEQ19DbG9zZSgoQVQ5MVBTX1BEQykgJihwU1BJLT5TUElfUlBSKSk7DQorDQorICAgIC8vKiBEaXNhYmxlIHJlY2VpdmVyIGFuZCB0cmFuc21pdHRlciBhbmQgc3RvcCBhbnkgYWN0aXZpdHkgaW1tZWRpYXRlbHkNCiAgICAgcFNQSS0+U1BJX0NSID0gQVQ5MUNfU1BJX1NQSURJUzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1BJX0NmZ01vZGUgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSB0aGUgU1BJIGNvbnRyb2xsZXIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9TUElfQ2ZnTW9kZSggQVQ5MVBTX1NQSSBwU1BJLCAvKiBwb2ludGVyIHRvIGEgU1BJIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSApICAgICAgIC8qIG1vZGUgcmVnaXN0ZXIgKi8NCi17DQotICAgIC8qKiBXcml0ZSB0byB0aGUgTVIgcmVnaXN0ZXIgKi8NCi0gICAgcFNQSS0+U1BJX01SID0gbW9kZTsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1BJX0NmZ1BDUyAqLw0KLS8qKiBcYnJpZWYgU3dpdGNoIHRvIHRoZSBjb3JyZWN0IFBDUyBvZiBTUEkgTW9kZSBSZWdpc3RlciA6IEZpeGVkIFBlcmlwaGVyYWwgU2VsZWN0ZWQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9TUElfQ2ZnUENTKCBBVDkxUFNfU1BJIHBTUEksICAvKiBwb2ludGVyIHRvIGEgU1BJIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgUENTX0RldmljZSApIC8qIFBDUyBvZiB0aGUgRGV2aWNlICovDQotew0KLSAgICAvKiogV3JpdGUgdG8gdGhlIE1SIHJlZ2lzdGVyICovDQotICAgIHBTUEktPlNQSV9NUiAmPSAweEZGRjBGRkZGOw0KLSAgICBwU1BJLT5TUElfTVIgfD0gKCAoIFBDU19EZXZpY2UgPDwgMTYgKSAmIEFUOTFDX1NQSV9QQ1MgKTsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1BJX1JlY2VpdmVGcmFtZSAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIDIgaWYgUERDIGhhcyBiZWVuIGluaXRpYWxpemVkIHdpdGggQnVmZmVyIGFuZCBOZXh0IEJ1ZmZlciwgMSBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6YWVkIHdpdGggTmV4dCBCdWZmZXIsIDAgaWYgUERDIGlzIGJ1c3kgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1NQSV9SZWNlaXZlRnJhbWUoIEFUOTFQU19TUEkgcFNQSSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqIHBCdWZmZXIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzekJ1ZmZlciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqIHBOZXh0QnVmZmVyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3pOZXh0QnVmZmVyICkNCi17DQotICAgIHJldHVybiBBVDkxRl9QRENfUmVjZWl2ZUZyYW1lKA0KLSAgICAgICAgKCBBVDkxUFNfUERDICkgJiggcFNQSS0+U1BJX1JQUiApLA0KLSAgICAgICAgcEJ1ZmZlciwNCi0gICAgICAgIHN6QnVmZmVyLA0KLSAgICAgICAgcE5leHRCdWZmZXIsDQotICAgICAgICBzek5leHRCdWZmZXIgKTsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1BJX1NlbmRGcmFtZSAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIDIgaWYgUERDIGhhcyBiZWVuIGluaXRpYWxpemVkIHdpdGggQnVmZmVyIGFuZCBOZXh0IEJ1ZmZlciwgMSBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6YWVkIHdpdGggTmV4dCBCdWZmZXIsIDAgaWYgUERDIGlzIGJTUEl5ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9TUElfU2VuZEZyYW1lKCBBVDkxUFNfU1BJIHBTUEksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBwQnVmZmVyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3pCdWZmZXIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBwTmV4dEJ1ZmZlciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHN6TmV4dEJ1ZmZlciApDQotew0KLSAgICByZXR1cm4gQVQ5MUZfUERDX1NlbmRGcmFtZSgNCi0gICAgICAgICggQVQ5MVBTX1BEQyApICYoIHBTUEktPlNQSV9SUFIgKSwNCi0gICAgICAgIHBCdWZmZXIsDQotICAgICAgICBzekJ1ZmZlciwNCi0gICAgICAgIHBOZXh0QnVmZmVyLA0KLSAgICAgICAgc3pOZXh0QnVmZmVyICk7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1NQSV9DbG9zZSAqLw0KLS8qKiBcYnJpZWYgQ2xvc2UgU1BJOiBkaXNhYmxlIElUIGRpc2FibGUgdHJhbnNmZXJ0LCBjbG9zZSBQREMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9TUElfQ2xvc2UoIEFUOTFQU19TUEkgcFNQSSApIC8qIFxhcmcgcG9pbnRlciB0byBhIFNQSSBjb250cm9sbGVyICovDQotew0KLSAgICAvKiogUmVzZXQgYWxsIHRoZSBDaGlwIFNlbGVjdCByZWdpc3RlciAqLw0KLSAgICBwU1BJLT5TUElfQ1NSWyAwIF0gPSAwOw0KLSAgICBwU1BJLT5TUElfQ1NSWyAxIF0gPSAwOw0KLSAgICBwU1BJLT5TUElfQ1NSWyAyIF0gPSAwOw0KLSAgICBwU1BJLT5TUElfQ1NSWyAzIF0gPSAwOw0KLQ0KLSAgICAvKiogUmVzZXQgdGhlIFNQSSBtb2RlICovDQotICAgIHBTUEktPlNQSV9NUiA9IDA7DQotDQotICAgIC8qKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICovDQotICAgIHBTUEktPlNQSV9JRFIgPSAweEZGRkZGRkZGOw0KLQ0KLSAgICAvKiogQWJvcnQgdGhlIFBlcmlwaGVyYWwgRGF0YSBUcmFuc2ZlcnMgKi8NCi0gICAgQVQ5MUZfUERDX0Nsb3NlKCAoIEFUOTFQU19QREMgKSAmKCBwU1BJLT5TUElfUlBSICkgKTsNCi0NCi0gICAgLyoqIERpc2FibGUgcmVjZWl2ZXIgYW5kIHRyYW5zbWl0dGVyIGFuZCBzdG9wIGFueSBhY3Rpdml0eSBpbW1lZGlhdGVseSAqLw0KLSAgICBwU1BJLT5TUElfQ1IgPSBBVDkxQ19TUElfU1BJRElTOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9TUElfUHV0Q2hhciAqLw0KLS8qKiBcYnJpZWYgU2VuZCBhIGNoYXJhY3Rlcixkb2VzIG5vdCBjaGVjayBpZiByZWFkeSB0byBzZW5kICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfU1BJX1B1dENoYXIoIEFUOTFQU19TUEkgcFNQSSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY2hhcmFjdGVyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjc19udW1iZXIgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSV9QdXRDaGFyDQorLy8qIFxicmllZiBTZW5kIGEgY2hhcmFjdGVyLGRvZXMgbm90IGNoZWNrIGlmIHJlYWR5IHRvIHNlbmQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TUElfUHV0Q2hhciAoDQorCUFUOTFQU19TUEkgcFNQSSwNCisJdW5zaWduZWQgaW50IGNoYXJhY3RlciwNCisgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNzX251bWJlciApDQogew0KICAgICB1bnNpZ25lZCBpbnQgdmFsdWVfZm9yX2NzOw0KLQ0KLSAgICB2YWx1ZV9mb3JfY3MgPSAoIH4oIDEgPDwgY3NfbnVtYmVyICkgKSAmIDB4RjsgLypQbGFjZSBhIHplcm8gYW1vbmcgYSA0IE9ORXMgbnVtYmVyICovDQotICAgIHBTUEktPlNQSV9URFIgPSAoIGNoYXJhY3RlciAmIDB4RkZGRiApIHwgKCB2YWx1ZV9mb3JfY3MgPDwgMTYgKTsNCisgICAgdmFsdWVfZm9yX2NzID0gKH4oMSA8PCBjc19udW1iZXIpKSAmIDB4RjsgIC8vUGxhY2UgYSB6ZXJvIGFtb25nIGEgNCBPTkVzIG51bWJlcg0KKyAgICBwU1BJLT5TUElfVERSID0gKGNoYXJhY3RlciAmIDB4RkZGRikgfCAodmFsdWVfZm9yX2NzIDw8IDE2KTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1BJX0dldENoYXIgKi8NCi0vKiogXGJyaWVmIFJlY2VpdmUgYSBjaGFyYWN0ZXIsZG9lcyBub3QgY2hlY2sgaWYgYSBjaGFyYWN0ZXIgaXMgYXZhaWxhYmxlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIGludCBBVDkxRl9TUElfR2V0Q2hhciggY29uc3QgQVQ5MVBTX1NQSSBwU1BJICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUElfR2V0Q2hhcg0KKy8vKiBcYnJpZWYgUmVjZWl2ZSBhIGNoYXJhY3Rlcixkb2VzIG5vdCBjaGVjayBpZiBhIGNoYXJhY3RlciBpcyBhdmFpbGFibGUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1NQSV9HZXRDaGFyICgNCisJY29uc3QgQVQ5MVBTX1NQSSBwU1BJKQ0KIHsNCi0gICAgcmV0dXJuKCAoIHBTUEktPlNQSV9SRFIgKSAmIDB4RkZGRiApOw0KKyAgICByZXR1cm4oKHBTUEktPlNQSV9SRFIpICYgMHhGRkZGKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1BJX0dldEludGVycnVwdE1hc2tTdGF0dXMgKi8NCi0vKiogXGJyaWVmIFJldHVybiBTUEkgSW50ZXJydXB0IE1hc2sgU3RhdHVzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9TUElfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLyogXHJldHVybiBTUEkgSW50ZXJydXB0IE1hc2sgU3RhdHVzICovDQotICAgIEFUOTFQU19TUEkgcFNwaSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgU1BJIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUElfR2V0SW50ZXJydXB0TWFza1N0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFNQSSBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1NQSV9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCAvLyBccmV0dXJuIFNQSSBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisgICAgICAgIEFUOTFQU19TUEkgcFNwaSkgLy8gXGFyZyAgcG9pbnRlciB0byBhIFNQSSBjb250cm9sbGVyDQogew0KLSAgICByZXR1cm4gcFNwaS0+U1BJX0lNUjsNCisgICAgICAgIHJldHVybiBwU3BpLT5TUElfSU1SOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9TUElfSXNJbnRlcnJ1cHRNYXNrZWQgKi8NCi0vKiogXGJyaWVmIFRlc3QgaWYgU1BJIEludGVycnVwdCBpcyBNYXNrZWQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgaW50IEFUOTFGX1NQSV9Jc0ludGVycnVwdE1hc2tlZCggQVQ5MVBTX1NQSSBwU3BpLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgU1BJIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1BJX0lzSW50ZXJydXB0TWFza2VkDQorLy8qIFxicmllZiBUZXN0IGlmIFNQSSBJbnRlcnJ1cHQgaXMgTWFza2VkDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9TUElfSXNJbnRlcnJ1cHRNYXNrZWQoDQorICAgICAgICBBVDkxUFNfU1BJIHBTcGksICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFNQSSBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCiB7DQotICAgIHJldHVybiggQVQ5MUZfU1BJX0dldEludGVycnVwdE1hc2tTdGF0dXMoIHBTcGkgKSAmIGZsYWcgKTsNCisgICAgICAgIHJldHVybiAoQVQ5MUZfU1BJX0dldEludGVycnVwdE1hc2tTdGF0dXMocFNwaSkgJiBmbGFnKTsNCiB9DQogDQogLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0qICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBVU0FSVA0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVVNfQmF1ZHJhdGUgKi8NCi0vKiogXGJyaWVmIENhbGN1bGF0ZSB0aGUgYmF1ZHJhdGUgKi8NCi0vKiogU3RhbmRhcmQgQXN5bmNocm9ub3VzIE1vZGUgOiA4IGJpdHMgLCAxIHN0b3AgLCBubyBwYXJpdHkgKi8NCi0jZGVmaW5lIEFUOTFDX1VTX0FTWU5DX01PREUgICAgXA0KLSAgICAoIEFUOTFDX1VTX1VTTU9ERV9OT1JNQUwgKyBcDQotICAgICAgQVQ5MUNfVVNfTkJTVE9QXzFfQklUICsgIFwNCi0gICAgICBBVDkxQ19VU19QQVJfTk9ORSArICAgICAgXA0KLSAgICAgIEFUOTFDX1VTX0NIUkxfOF9CSVRTICsgICBcDQotICAgICAgQVQ5MUNfVVNfQ0xLU19DTE9DSyApDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgVVNBUlQNCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX0JhdWRyYXRlDQorLy8qIFxicmllZiBDYWxjdWxhdGUgdGhlIGJhdWRyYXRlDQorLy8qIFN0YW5kYXJkIEFzeW5jaHJvbm91cyBNb2RlIDogOCBiaXRzICwgMSBzdG9wICwgbm8gcGFyaXR5DQorI2RlZmluZSBBVDkxQ19VU19BU1lOQ19NT0RFICggQVQ5MUNfVVNfVVNNT0RFX05PUk1BTCArIFwNCisgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19OQlNUT1BfMV9CSVQgKyBcDQorICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfUEFSX05PTkUgKyBcDQorICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfQ0hSTF84X0JJVFMgKyBcDQorICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfQ0xLU19DTE9DSyApDQogDQotLyoqIFN0YW5kYXJkIEV4dGVybmFsIEFzeW5jaHJvbm91cyBNb2RlIDogOCBiaXRzICwgMSBzdG9wICwgbm8gcGFyaXR5ICovDQotI2RlZmluZSBBVDkxQ19VU19BU1lOQ19TQ0tfTU9ERSBcDQotICAgICggQVQ5MUNfVVNfVVNNT0RFX05PUk1BTCArICBcDQotICAgICAgQVQ5MUNfVVNfTkJTVE9QXzFfQklUICsgICBcDQotICAgICAgQVQ5MUNfVVNfUEFSX05PTkUgKyAgICAgICBcDQotICAgICAgQVQ5MUNfVVNfQ0hSTF84X0JJVFMgKyAgICBcDQotICAgICAgQVQ5MUNfVVNfQ0xLU19FWFQgKQ0KKy8vKiBTdGFuZGFyZCBFeHRlcm5hbCBBc3luY2hyb25vdXMgTW9kZSA6IDggYml0cyAsIDEgc3RvcCAsIG5vIHBhcml0eQ0KKyNkZWZpbmUgQVQ5MUNfVVNfQVNZTkNfU0NLX01PREUgKCBBVDkxQ19VU19VU01PREVfTk9STUFMICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19OQlNUT1BfMV9CSVQgKyBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX1BBUl9OT05FICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19DSFJMXzhfQklUUyArIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfQ0xLU19FWFQgKQ0KIA0KLS8qKiBTdGFuZGFyZCBTeW5jaHJvbm91cyBNb2RlIDogOCBiaXRzICwgMSBzdG9wICwgbm8gcGFyaXR5ICovDQotI2RlZmluZSBBVDkxQ19VU19TWU5DX01PREUgICAgIFwNCi0gICAgKCBBVDkxQ19VU19TWU5DICsgICAgICAgICAgXA0KLSAgICAgIEFUOTFDX1VTX1VTTU9ERV9OT1JNQUwgKyBcDQotICAgICAgQVQ5MUNfVVNfTkJTVE9QXzFfQklUICsgIFwNCi0gICAgICBBVDkxQ19VU19QQVJfTk9ORSArICAgICAgXA0KLSAgICAgIEFUOTFDX1VTX0NIUkxfOF9CSVRTICsgICBcDQotICAgICAgQVQ5MUNfVVNfQ0xLU19DTE9DSyApDQorLy8qIFN0YW5kYXJkIFN5bmNocm9ub3VzIE1vZGUgOiA4IGJpdHMgLCAxIHN0b3AgLCBubyBwYXJpdHkNCisjZGVmaW5lIEFUOTFDX1VTX1NZTkNfTU9ERSAoIEFUOTFDX1VTX1NZTkMgKyBcDQorICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19VU01PREVfTk9STUFMICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfTkJTVE9QXzFfQklUICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfUEFSX05PTkUgKyBcDQorICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19DSFJMXzhfQklUUyArIFwNCisgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX0NMS1NfQ0xPQ0sgKQ0KIA0KLS8qKiBTQ0sgdXNlZCBMYWJlbCAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfU0NLX1VTRUQgICAgKCBBVDkxQ19VU19DS0xPIHwgQVQ5MUNfVVNfQ0xLU19FWFQgKQ0KKy8vKiBTQ0sgdXNlZCBMYWJlbA0KKyNkZWZpbmUgQVQ5MUNfVVNfU0NLX1VTRUQgKEFUOTFDX1VTX0NLTE8gfCBBVDkxQ19VU19DTEtTX0VYVCkNCiANCi0vKiogU3RhbmRhcmQgSVNPIFQ9MCBNb2RlIDogOCBiaXRzICwgMSBzdG9wICwgcGFyaXR5ICovDQotI2RlZmluZSBBVDkxQ19VU19JU09fUkVBREVSX01PREUgIFwNCi0gICAgKCBBVDkxQ19VU19VU01PREVfSVNPNzgxNl8wICsgXA0KLSAgICAgIEFUOTFDX1VTX0NMS1NfQ0xPQ0sgKyAgICAgICBcDQotICAgICAgQVQ5MUNfVVNfTkJTVE9QXzFfQklUICsgICAgIFwNCi0gICAgICBBVDkxQ19VU19QQVJfRVZFTiArICAgICAgICAgXA0KLSAgICAgIEFUOTFDX1VTX0NIUkxfOF9CSVRTICsgICAgICBcDQotICAgICAgQVQ5MUNfVVNfQ0tMTyArICAgICAgICAgICAgIFwNCi0gICAgICBBVDkxQ19VU19PVkVSICkNCisvLyogU3RhbmRhcmQgSVNPIFQ9MCBNb2RlIDogOCBiaXRzICwgMSBzdG9wICwgcGFyaXR5DQorI2RlZmluZSBBVDkxQ19VU19JU09fUkVBREVSX01PREUgKCBBVDkxQ19VU19VU01PREVfSVNPNzgxNl8wICsgXA0KKwkJCQkJICAgCQkgQVQ5MUNfVVNfQ0xLU19DTE9DSyArXA0KKyAgICAgICAgICAgICAgICAgICAgICAgCQkgQVQ5MUNfVVNfTkJTVE9QXzFfQklUICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgCQkgQVQ5MUNfVVNfUEFSX0VWRU4gKyBcDQorICAgICAgICAgICAgICAgICAgICAgICAJCSBBVDkxQ19VU19DSFJMXzhfQklUUyArIFwNCisgICAgICAgICAgICAgICAgICAgICAgIAkJIEFUOTFDX1VTX0NLTE8gK1wNCisgICAgICAgICAgICAgICAgICAgICAgIAkJIEFUOTFDX1VTX09WRVIpDQogDQotLyoqIFN0YW5kYXJkIElSREEgbW9kZSAqLw0KLSNkZWZpbmUgQVQ5MUNfVVNfQVNZTkNfSVJEQV9NT0RFIFwNCi0gICAgKCBBVDkxQ19VU19VU01PREVfSVJEQSArICAgICBcDQotICAgICAgQVQ5MUNfVVNfTkJTVE9QXzFfQklUICsgICAgXA0KLSAgICAgIEFUOTFDX1VTX1BBUl9OT05FICsgICAgICAgIFwNCi0gICAgICBBVDkxQ19VU19DSFJMXzhfQklUUyArICAgICBcDQotICAgICAgQVQ5MUNfVVNfQ0xLU19DTE9DSyApDQorLy8qIFN0YW5kYXJkIElSREEgbW9kZQ0KKyNkZWZpbmUgQVQ5MUNfVVNfQVNZTkNfSVJEQV9NT0RFICggIEFUOTFDX1VTX1VTTU9ERV9JUkRBICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19OQlNUT1BfMV9CSVQgKyBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUOTFDX1VTX1BBUl9OT05FICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19VU19DSFJMXzhfQklUUyArIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVVNfQ0xLU19DTE9DSyApDQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVVNfQmF1ZHJhdGUgKi8NCi0vKiogXGJyaWVmIENhbHVjdWxhdGUgYmF1ZF92YWx1ZSBhY2NvcmRpbmcgdG8gdGhlIG1haW4gY2xvY2sgYW5kIHRoZSBiYXVkIHJhdGUgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1VTX0JhdWRyYXRlKCBjb25zdCB1bnNpZ25lZCBpbnQgbWFpbl9jbG9jaywgLyogXGFyZyBwZXJpcGhlcmFsIGNsb2NrICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgYmF1ZF9yYXRlICkgLyogXGFyZyBVQVJUIGJhdWRyYXRlICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfQmF1ZHJhdGUNCisvLyogXGJyaWVmIENhbHVjdWxhdGUgYmF1ZF92YWx1ZSBhY2NvcmRpbmcgdG8gdGhlIG1haW4gY2xvY2sgYW5kIHRoZSBiYXVkIHJhdGUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1VTX0JhdWRyYXRlICgNCisJY29uc3QgdW5zaWduZWQgaW50IG1haW5fY2xvY2ssIC8vIFxhcmcgcGVyaXBoZXJhbCBjbG9jaw0KKwljb25zdCB1bnNpZ25lZCBpbnQgYmF1ZF9yYXRlKSAgLy8gXGFyZyBVQVJUIGJhdWRyYXRlDQogew0KLSAgICB1bnNpZ25lZCBpbnQgYmF1ZF92YWx1ZSA9ICggKCBtYWluX2Nsb2NrICogMTAgKSAvICggYmF1ZF9yYXRlICogMTYgKSApOw0KLQ0KLSAgICBpZiggKCBiYXVkX3ZhbHVlICUgMTAgKSA+PSA1ICkNCi0gICAgew0KLSAgICAgICAgYmF1ZF92YWx1ZSA9ICggYmF1ZF92YWx1ZSAvIDEwICkgKyAxOw0KLSAgICB9DQotICAgIGVsc2UNCi0gICAgew0KLSAgICAgICAgYmF1ZF92YWx1ZSAvPSAxMDsNCi0gICAgfQ0KLQ0KLSAgICByZXR1cm4gYmF1ZF92YWx1ZTsNCisJdW5zaWduZWQgaW50IGJhdWRfdmFsdWUgPSAoKG1haW5fY2xvY2sqMTApLyhiYXVkX3JhdGUgKiAxNikpOw0KKwlpZiAoKGJhdWRfdmFsdWUgJSAxMCkgPj0gNSkNCisJCWJhdWRfdmFsdWUgPSAoYmF1ZF92YWx1ZSAvIDEwKSArIDE7DQorCWVsc2UNCisJCWJhdWRfdmFsdWUgLz0gMTA7DQorCXJldHVybiBiYXVkX3ZhbHVlOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9VU19TZXRCYXVkcmF0ZSAqLw0KLS8qKiBcYnJpZWYgU2V0IHRoZSBiYXVkcmF0ZSBhY2NvcmRpbmcgdG8gdGhlIENQVSBjbG9jayAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1VTX1NldEJhdWRyYXRlKCBBVDkxUFNfVVNBUlQgcFVTQVJULCAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1haW5DbG9jaywgLyogXGFyZyBwZXJpcGhlcmFsIGNsb2NrICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNwZWVkICkgICAgLyogXGFyZyBVQVJUIGJhdWRyYXRlICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfU2V0QmF1ZHJhdGUNCisvLyogXGJyaWVmIFNldCB0aGUgYmF1ZHJhdGUgYWNjb3JkaW5nIHRvIHRoZSBDUFUgY2xvY2sNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VU19TZXRCYXVkcmF0ZSAoDQorCUFUOTFQU19VU0FSVCBwVVNBUlQsICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IG1haW5DbG9jaywgLy8gXGFyZyBwZXJpcGhlcmFsIGNsb2NrDQorCXVuc2lnbmVkIGludCBzcGVlZCkgICAgIC8vIFxhcmcgVUFSVCBiYXVkcmF0ZQ0KIHsNCi0gICAgLyoqIERlZmluZSB0aGUgYmF1ZCByYXRlIGRpdmlzb3IgcmVnaXN0ZXIgKi8NCi0gICAgcFVTQVJULT5VU19CUkdSID0gQVQ5MUZfVVNfQmF1ZHJhdGUoIG1haW5DbG9jaywgc3BlZWQgKTsNCisJLy8qIERlZmluZSB0aGUgYmF1ZCByYXRlIGRpdmlzb3IgcmVnaXN0ZXINCisJcFVTQVJULT5VU19CUkdSID0gQVQ5MUZfVVNfQmF1ZHJhdGUobWFpbkNsb2NrLCBzcGVlZCk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VTX1NldFRpbWVndWFyZCAqLw0KLS8qKiBcYnJpZWYgU2V0IFVTQVJUIHRpbWVndWFyZCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1VTX1NldFRpbWVndWFyZCggQVQ5MVBTX1VTQVJUIHBVU0FSVCwgICAgIC8qIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHRpbWVndWFyZCApIC8qIFxhcmcgdGltZWd1YXJkIHZhbHVlICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfU2V0VGltZWd1YXJkDQorLy8qIFxicmllZiBTZXQgVVNBUlQgdGltZWd1YXJkDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVVNfU2V0VGltZWd1YXJkICgNCisJQVQ5MVBTX1VTQVJUIHBVU0FSVCwgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgdGltZWd1YXJkKSAvLyBcYXJnIHRpbWVndWFyZCB2YWx1ZQ0KIHsNCi0gICAgLyoqIFdyaXRlIHRoZSBUaW1lZ3VhcmQgUmVnaXN0ZXIgKi8NCi0gICAgcFVTQVJULT5VU19UVEdSID0gdGltZWd1YXJkOw0KKwkvLyogV3JpdGUgdGhlIFRpbWVndWFyZCBSZWdpc3Rlcg0KKwlwVVNBUlQtPlVTX1RUR1IgPSB0aW1lZ3VhcmQgOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9VU19FbmFibGVJdCAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIFVTQVJUIElUICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVVNfRW5hYmxlSXQoIEFUOTFQU19VU0FSVCBwVVNBUlQsIC8qIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApICAvKiBcYXJnIElUIHRvIGJlIGVuYWJsZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19FbmFibGVJdA0KKy8vKiBcYnJpZWYgRW5hYmxlIFVTQVJUIElUDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVVNfRW5hYmxlSXQgKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJULCAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAgIC8vIFxhcmcgSVQgdG8gYmUgZW5hYmxlZA0KIHsNCi0gICAgLyoqIFdyaXRlIHRvIHRoZSBJRVIgcmVnaXN0ZXIgKi8NCi0gICAgcFVTQVJULT5VU19JRVIgPSBmbGFnOw0KKwkvLyogV3JpdGUgdG8gdGhlIElFUiByZWdpc3Rlcg0KKwlwVVNBUlQtPlVTX0lFUiA9IGZsYWc7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VTX0Rpc2FibGVJdCAqLw0KLS8qKiBcYnJpZWYgRGlzYWJsZSBVU0FSVCBJVCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1VTX0Rpc2FibGVJdCggQVQ5MVBTX1VTQVJUIHBVU0FSVCwgLyogXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApICAvKiBcYXJnIElUIHRvIGJlIGRpc2FibGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfRGlzYWJsZUl0DQorLy8qIFxicmllZiBEaXNhYmxlIFVTQVJUIElUDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVVNfRGlzYWJsZUl0ICgNCisJQVQ5MVBTX1VTQVJUIHBVU0FSVCwgLy8gXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgICAvLyBcYXJnIElUIHRvIGJlIGRpc2FibGVkDQogew0KLSAgICAvKiogV3JpdGUgdG8gdGhlIElFUiByZWdpc3RlciAqLw0KLSAgICBwVVNBUlQtPlVTX0lEUiA9IGZsYWc7DQorCS8vKiBXcml0ZSB0byB0aGUgSUVSIHJlZ2lzdGVyDQorCXBVU0FSVC0+VVNfSURSID0gZmxhZzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVVNfQ29uZmlndXJlICovDQotLyoqIFxicmllZiBDb25maWd1cmUgVVNBUlQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9VU19Db25maWd1cmUoIEFUOTFQU19VU0FSVCBwVVNBUlQsICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtYWluQ2xvY2ssICAvKiBcYXJnIHBlcmlwaGVyYWwgY2xvY2sgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1vZGUsICAgICAgIC8qIFxhcmcgbW9kZSBSZWdpc3RlciB0byBiZSBwcm9ncmFtbWVkICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBiYXVkUmF0ZSwgICAvKiBcYXJnIGJhdWRyYXRlIHRvIGJlIHByb2dyYW1tZWQgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHRpbWVndWFyZCApIC8qIFxhcmcgdGltZWd1YXJkIHRvIGJlIHByb2dyYW1tZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19Db25maWd1cmUNCisvLyogXGJyaWVmIENvbmZpZ3VyZSBVU0FSVA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VTX0NvbmZpZ3VyZSAoDQorCUFUOTFQU19VU0FSVCBwVVNBUlQsICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBtYWluQ2xvY2ssICAvLyBcYXJnIHBlcmlwaGVyYWwgY2xvY2sNCisJdW5zaWduZWQgaW50IG1vZGUgLCAgICAgIC8vIFxhcmcgbW9kZSBSZWdpc3RlciB0byBiZSBwcm9ncmFtbWVkDQorCXVuc2lnbmVkIGludCBiYXVkUmF0ZSAsICAvLyBcYXJnIGJhdWRyYXRlIHRvIGJlIHByb2dyYW1tZWQNCisJdW5zaWduZWQgaW50IHRpbWVndWFyZCApIC8vIFxhcmcgdGltZWd1YXJkIHRvIGJlIHByb2dyYW1tZWQNCiB7DQotICAgIC8qKiBEaXNhYmxlIGludGVycnVwdHMgKi8NCi0gICAgcFVTQVJULT5VU19JRFIgPSAoIHVuc2lnbmVkIGludCApIC0xOw0KKyAgICAvLyogRGlzYWJsZSBpbnRlcnJ1cHRzDQorICAgIHBVU0FSVC0+VVNfSURSID0gKHVuc2lnbmVkIGludCkgLTE7DQogDQotICAgIC8qKiBSZXNldCByZWNlaXZlciBhbmQgdHJhbnNtaXR0ZXIgKi8NCi0gICAgcFVTQVJULT5VU19DUiA9IEFUOTFDX1VTX1JTVFJYIHwgQVQ5MUNfVVNfUlNUVFggfCBBVDkxQ19VU19SWERJUyB8IEFUOTFDX1VTX1RYRElTOw0KKyAgICAvLyogUmVzZXQgcmVjZWl2ZXIgYW5kIHRyYW5zbWl0dGVyDQorICAgIHBVU0FSVC0+VVNfQ1IgPSBBVDkxQ19VU19SU1RSWCB8IEFUOTFDX1VTX1JTVFRYIHwgQVQ5MUNfVVNfUlhESVMgfCBBVDkxQ19VU19UWERJUyA7DQogDQotICAgIC8qKiBEZWZpbmUgdGhlIGJhdWQgcmF0ZSBkaXZpc29yIHJlZ2lzdGVyICovDQotICAgIEFUOTFGX1VTX1NldEJhdWRyYXRlKCBwVVNBUlQsIG1haW5DbG9jaywgYmF1ZFJhdGUgKTsNCisJLy8qIERlZmluZSB0aGUgYmF1ZCByYXRlIGRpdmlzb3IgcmVnaXN0ZXINCisJQVQ5MUZfVVNfU2V0QmF1ZHJhdGUocFVTQVJULCBtYWluQ2xvY2ssIGJhdWRSYXRlKTsNCiANCi0gICAgLyoqIFdyaXRlIHRoZSBUaW1lZ3VhcmQgUmVnaXN0ZXIgKi8NCi0gICAgQVQ5MUZfVVNfU2V0VGltZWd1YXJkKCBwVVNBUlQsIHRpbWVndWFyZCApOw0KKwkvLyogV3JpdGUgdGhlIFRpbWVndWFyZCBSZWdpc3Rlcg0KKwlBVDkxRl9VU19TZXRUaW1lZ3VhcmQocFVTQVJULCB0aW1lZ3VhcmQpOw0KIA0KLSAgICAvKiogQ2xlYXIgVHJhbnNtaXQgYW5kIFJlY2VpdmUgQ291bnRlcnMgKi8NCi0gICAgQVQ5MUZfUERDX09wZW4oICggQVQ5MVBTX1BEQyApICYoIHBVU0FSVC0+VVNfUlBSICkgKTsNCisgICAgLy8qIENsZWFyIFRyYW5zbWl0IGFuZCBSZWNlaXZlIENvdW50ZXJzDQorICAgIEFUOTFGX1BEQ19PcGVuKChBVDkxUFNfUERDKSAmKHBVU0FSVC0+VVNfUlBSKSk7DQogDQotICAgIC8qKiBEZWZpbmUgdGhlIFVTQVJUIG1vZGUgKi8NCi0gICAgcFVTQVJULT5VU19NUiA9IG1vZGU7DQorICAgIC8vKiBEZWZpbmUgdGhlIFVTQVJUIG1vZGUNCisgICAgcFVTQVJULT5VU19NUiA9IG1vZGUgIDsNCisNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVVNfRW5hYmxlUnggKi8NCi0vKiogXGJyaWVmIEVuYWJsZSByZWNlaXZpbmcgY2hhcmFjdGVycyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1VTX0VuYWJsZVJ4KCBBVDkxUFNfVVNBUlQgcFVTQVJUICkgLyogXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX0VuYWJsZVJ4DQorLy8qIFxicmllZiBFbmFibGUgcmVjZWl2aW5nIGNoYXJhY3RlcnMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VU19FbmFibGVSeCAoDQorCUFUOTFQU19VU0FSVCBwVVNBUlQpICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyDQogew0KLSAgICAvKiogRW5hYmxlIHJlY2VpdmVyICovDQorICAgIC8vKiBFbmFibGUgcmVjZWl2ZXINCiAgICAgcFVTQVJULT5VU19DUiA9IEFUOTFDX1VTX1JYRU47DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VTX0VuYWJsZVR4ICovDQotLyoqIFxicmllZiBFbmFibGUgc2VuZGluZyBjaGFyYWN0ZXJzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVVNfRW5hYmxlVHgoIEFUOTFQU19VU0FSVCBwVVNBUlQgKSAvKiBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfRW5hYmxlVHgNCisvLyogXGJyaWVmIEVuYWJsZSBzZW5kaW5nIGNoYXJhY3RlcnMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VU19FbmFibGVUeCAoDQorCUFUOTFQU19VU0FSVCBwVVNBUlQpICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyDQogew0KLSAgICAvKiogRW5hYmxlICB0cmFuc21pdHRlciAqLw0KKyAgICAvLyogRW5hYmxlICB0cmFuc21pdHRlcg0KICAgICBwVVNBUlQtPlVTX0NSID0gQVQ5MUNfVVNfVFhFTjsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVVNfUmVzZXRSeCAqLw0KLS8qKiBcYnJpZWYgUmVzZXQgUmVjZWl2ZXIgYW5kIHJlLWVuYWJsZSBpdCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1VTX1Jlc2V0UngoIEFUOTFQU19VU0FSVCBwVVNBUlQgKSAvKiBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfUmVzZXRSeA0KKy8vKiBcYnJpZWYgUmVzZXQgUmVjZWl2ZXIgYW5kIHJlLWVuYWJsZSBpdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VTX1Jlc2V0UnggKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJUKSAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlcg0KIHsNCi0gICAgLyoqIFJlc2V0IHJlY2VpdmVyICovDQotICAgIHBVU0FSVC0+VVNfQ1IgPSBBVDkxQ19VU19SU1RSWDsNCi0gICAgLyoqIFJlLUVuYWJsZSByZWNlaXZlciAqLw0KKwkvLyogUmVzZXQgcmVjZWl2ZXINCisJcFVTQVJULT5VU19DUiA9IEFUOTFDX1VTX1JTVFJYOw0KKyAgICAvLyogUmUtRW5hYmxlIHJlY2VpdmVyDQogICAgIHBVU0FSVC0+VVNfQ1IgPSBBVDkxQ19VU19SWEVOOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9VU19SZXNldFR4ICovDQotLyoqIFxicmllZiBSZXNldCBUcmFuc21pdHRlciBhbmQgcmUtZW5hYmxlIGl0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVVNfUmVzZXRUeCggQVQ5MVBTX1VTQVJUIHBVU0FSVCApIC8qIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19SZXNldFR4DQorLy8qIFxicmllZiBSZXNldCBUcmFuc21pdHRlciBhbmQgcmUtZW5hYmxlIGl0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVVNfUmVzZXRUeCAoDQorCUFUOTFQU19VU0FSVCBwVVNBUlQpICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyDQogew0KLSAgICAvKiogUmVzZXQgdHJhbnNtaXR0ZXIgKi8NCi0gICAgcFVTQVJULT5VU19DUiA9IEFUOTFDX1VTX1JTVFRYOw0KLSAgICAvKiogRW5hYmxlIHRyYW5zbWl0dGVyICovDQorCS8vKiBSZXNldCB0cmFuc21pdHRlcg0KKwlwVVNBUlQtPlVTX0NSID0gQVQ5MUNfVVNfUlNUVFg7DQorICAgIC8vKiBFbmFibGUgdHJhbnNtaXR0ZXINCiAgICAgcFVTQVJULT5VU19DUiA9IEFUOTFDX1VTX1RYRU47DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VTX0Rpc2FibGVSeCAqLw0KLS8qKiBcYnJpZWYgRGlzYWJsZSBSZWNlaXZlciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1VTX0Rpc2FibGVSeCggQVQ5MVBTX1VTQVJUIHBVU0FSVCApIC8qIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19EaXNhYmxlUngNCisvLyogXGJyaWVmIERpc2FibGUgUmVjZWl2ZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VU19EaXNhYmxlUnggKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJUKSAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlcg0KIHsNCi0gICAgLyoqIERpc2FibGUgcmVjZWl2ZXIgKi8NCisgICAgLy8qIERpc2FibGUgcmVjZWl2ZXINCiAgICAgcFVTQVJULT5VU19DUiA9IEFUOTFDX1VTX1JYRElTOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9VU19EaXNhYmxlVHggKi8NCi0vKiogXGJyaWVmIERpc2FibGUgVHJhbnNtaXR0ZXIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9VU19EaXNhYmxlVHgoIEFUOTFQU19VU0FSVCBwVVNBUlQgKSAvKiBcYXJnIHBvaW50ZXIgdG8gYSBVU0FSVCBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfRGlzYWJsZVR4DQorLy8qIFxicmllZiBEaXNhYmxlIFRyYW5zbWl0dGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVVNfRGlzYWJsZVR4ICgNCisJQVQ5MVBTX1VTQVJUIHBVU0FSVCkgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXINCiB7DQotICAgIC8qKiBEaXNhYmxlIHRyYW5zbWl0dGVyICovDQorICAgIC8vKiBEaXNhYmxlIHRyYW5zbWl0dGVyDQogICAgIHBVU0FSVC0+VVNfQ1IgPSBBVDkxQ19VU19UWERJUzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVVNfQ2xvc2UgKi8NCi0vKiogXGJyaWVmIENsb3NlIFVTQVJUOiBkaXNhYmxlIElUIGRpc2FibGUgcmVjZWl2ZXIgYW5kIHRyYW5zbWl0dGVyLCBjbG9zZSBQREMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9VU19DbG9zZSggQVQ5MVBTX1VTQVJUIHBVU0FSVCApIC8qIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19DbG9zZQ0KKy8vKiBcYnJpZWYgQ2xvc2UgVVNBUlQ6IGRpc2FibGUgSVQgZGlzYWJsZSByZWNlaXZlciBhbmQgdHJhbnNtaXR0ZXIsIGNsb3NlIFBEQw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VTX0Nsb3NlICgNCisJQVQ5MVBTX1VTQVJUIHBVU0FSVCkgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXINCiB7DQotICAgIC8qKiBSZXNldCB0aGUgYmF1ZCByYXRlIGRpdmlzb3IgcmVnaXN0ZXIgKi8NCi0gICAgcFVTQVJULT5VU19CUkdSID0gMDsNCisgICAgLy8qIFJlc2V0IHRoZSBiYXVkIHJhdGUgZGl2aXNvciByZWdpc3Rlcg0KKyAgICBwVVNBUlQtPlVTX0JSR1IgPSAwIDsNCiANCi0gICAgLyoqIFJlc2V0IHRoZSBVU0FSVCBtb2RlICovDQotICAgIHBVU0FSVC0+VVNfTVIgPSAwOw0KKyAgICAvLyogUmVzZXQgdGhlIFVTQVJUIG1vZGUNCisgICAgcFVTQVJULT5VU19NUiA9IDAgIDsNCiANCi0gICAgLyoqIFJlc2V0IHRoZSBUaW1lZ3VhcmQgUmVnaXN0ZXIgKi8NCisgICAgLy8qIFJlc2V0IHRoZSBUaW1lZ3VhcmQgUmVnaXN0ZXINCiAgICAgcFVTQVJULT5VU19UVEdSID0gMDsNCiANCi0gICAgLyoqIERpc2FibGUgYWxsIGludGVycnVwdHMgKi8NCi0gICAgcFVTQVJULT5VU19JRFIgPSAweEZGRkZGRkZGOw0KKyAgICAvLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cw0KKyAgICBwVVNBUlQtPlVTX0lEUiA9IDB4RkZGRkZGRkYgOw0KIA0KLSAgICAvKiogQWJvcnQgdGhlIFBlcmlwaGVyYWwgRGF0YSBUcmFuc2ZlcnMgKi8NCi0gICAgQVQ5MUZfUERDX0Nsb3NlKCAoIEFUOTFQU19QREMgKSAmKCBwVVNBUlQtPlVTX1JQUiApICk7DQorICAgIC8vKiBBYm9ydCB0aGUgUGVyaXBoZXJhbCBEYXRhIFRyYW5zZmVycw0KKyAgICBBVDkxRl9QRENfQ2xvc2UoKEFUOTFQU19QREMpICYocFVTQVJULT5VU19SUFIpKTsNCiANCi0gICAgLyoqIERpc2FibGUgcmVjZWl2ZXIgYW5kIHRyYW5zbWl0dGVyIGFuZCBzdG9wIGFueSBhY3Rpdml0eSBpbW1lZGlhdGVseSAqLw0KLSAgICBwVVNBUlQtPlVTX0NSID0gQVQ5MUNfVVNfVFhESVMgfCBBVDkxQ19VU19SWERJUyB8IEFUOTFDX1VTX1JTVFRYIHwgQVQ5MUNfVVNfUlNUUlg7DQorICAgIC8vKiBEaXNhYmxlIHJlY2VpdmVyIGFuZCB0cmFuc21pdHRlciBhbmQgc3RvcCBhbnkgYWN0aXZpdHkgaW1tZWRpYXRlbHkNCisgICAgcFVTQVJULT5VU19DUiA9IEFUOTFDX1VTX1RYRElTIHwgQVQ5MUNfVVNfUlhESVMgfCBBVDkxQ19VU19SU1RUWCB8IEFUOTFDX1VTX1JTVFJYIDsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVVNfVHhSZWFkeSAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIDEgaWYgYSBjaGFyYWN0ZXIgY2FuIGJlIHdyaXR0ZW4gaW4gVVNfVEhSICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9VU19UeFJlYWR5KCBBVDkxUFNfVVNBUlQgcFVTQVJUICkgLyogXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTX1R4UmVhZHkNCisvLyogXGJyaWVmIFJldHVybiAxIGlmIGEgY2hhcmFjdGVyIGNhbiBiZSB3cml0dGVuIGluIFVTX1RIUg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVVNfVHhSZWFkeSAoDQorCUFUOTFQU19VU0FSVCBwVVNBUlQgKSAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlcg0KIHsNCi0gICAgcmV0dXJuKCBwVVNBUlQtPlVTX0NTUiAmIEFUOTFDX1VTX1RYUkRZICk7DQorICAgIHJldHVybiAocFVTQVJULT5VU19DU1IgJiBBVDkxQ19VU19UWFJEWSk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VTX1J4UmVhZHkgKi8NCi0vKiogXGJyaWVmIFJldHVybiAxIGlmIGEgY2hhcmFjdGVyIGNhbiBiZSByZWFkIGluIFVTX1JIUiAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVVNfUnhSZWFkeSggQVQ5MVBTX1VTQVJUIHBVU0FSVCApIC8qIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19SeFJlYWR5DQorLy8qIFxicmllZiBSZXR1cm4gMSBpZiBhIGNoYXJhY3RlciBjYW4gYmUgcmVhZCBpbiBVU19SSFINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1VTX1J4UmVhZHkgKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJUICkgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXINCiB7DQotICAgIHJldHVybiggcFVTQVJULT5VU19DU1IgJiBBVDkxQ19VU19SWFJEWSApOw0KKyAgICByZXR1cm4gKHBVU0FSVC0+VVNfQ1NSICYgQVQ5MUNfVVNfUlhSRFkpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9VU19FcnJvciAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIHRoZSBlcnJvciBmbGFnICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9VU19FcnJvciggQVQ5MVBTX1VTQVJUIHBVU0FSVCApIC8qIFxhcmcgcG9pbnRlciB0byBhIFVTQVJUIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19FcnJvcg0KKy8vKiBcYnJpZWYgUmV0dXJuIHRoZSBlcnJvciBmbGFnDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9VU19FcnJvciAoDQorCUFUOTFQU19VU0FSVCBwVVNBUlQgKSAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVVNBUlQgY29udHJvbGxlcg0KIHsNCi0gICAgcmV0dXJuKCBwVVNBUlQtPlVTX0NTUiAmDQotICAgICAgICAgICAgKCBBVDkxQ19VU19PVlJFIHwgICAgLyogT3ZlcnJ1biBlcnJvciAqLw0KLSAgICAgICAgICAgICAgQVQ5MUNfVVNfRlJBTUUgfCAgIC8qIEZyYW1pbmcgZXJyb3IgKi8NCi0gICAgICAgICAgICAgIEFUOTFDX1VTX1BBUkUgKSApOyAvKiBQYXJpdHkgZXJyb3IgKi8NCisgICAgcmV0dXJuIChwVVNBUlQtPlVTX0NTUiAmDQorICAgIAkoQVQ5MUNfVVNfT1ZSRSB8ICAvLyBPdmVycnVuIGVycm9yDQorICAgIAkgQVQ5MUNfVVNfRlJBTUUgfCAvLyBGcmFtaW5nIGVycm9yDQorICAgIAkgQVQ5MUNfVVNfUEFSRSkpOyAgLy8gUGFyaXR5IGVycm9yDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VTX1B1dENoYXIgKi8NCi0vKiogXGJyaWVmIFNlbmQgYSBjaGFyYWN0ZXIsZG9lcyBub3QgY2hlY2sgaWYgcmVhZHkgdG8gc2VuZCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1VTX1B1dENoYXIoIEFUOTFQU19VU0FSVCBwVVNBUlQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2hhcmFjdGVyICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19QdXRDaGFyDQorLy8qIFxicmllZiBTZW5kIGEgY2hhcmFjdGVyLGRvZXMgbm90IGNoZWNrIGlmIHJlYWR5IHRvIHNlbmQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VU19QdXRDaGFyICgNCisJQVQ5MVBTX1VTQVJUIHBVU0FSVCwNCisJaW50IGNoYXJhY3RlciApDQogew0KLSAgICBwVVNBUlQtPlVTX1RIUiA9ICggY2hhcmFjdGVyICYgMHgxRkYgKTsNCisgICAgcFVTQVJULT5VU19USFIgPSAoY2hhcmFjdGVyICYgMHgxRkYpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9VU19HZXRDaGFyICovDQotLyoqIFxicmllZiBSZWNlaXZlIGEgY2hhcmFjdGVyLGRvZXMgbm90IGNoZWNrIGlmIGEgY2hhcmFjdGVyIGlzIGF2YWlsYWJsZSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSBpbnQgQVQ5MUZfVVNfR2V0Q2hhciggY29uc3QgQVQ5MVBTX1VTQVJUIHBVU0FSVCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfR2V0Q2hhcg0KKy8vKiBcYnJpZWYgUmVjZWl2ZSBhIGNoYXJhY3Rlcixkb2VzIG5vdCBjaGVjayBpZiBhIGNoYXJhY3RlciBpcyBhdmFpbGFibGUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1VTX0dldENoYXIgKA0KKwljb25zdCBBVDkxUFNfVVNBUlQgcFVTQVJUKQ0KIHsNCi0gICAgcmV0dXJuKCAoIHBVU0FSVC0+VVNfUkhSICkgJiAweDFGRiApOw0KKyAgICByZXR1cm4oKHBVU0FSVC0+VVNfUkhSKSAmIDB4MUZGKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVVNfU2VuZEZyYW1lICovDQotLyoqIFxicmllZiBSZXR1cm4gMiBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgd2l0aCBCdWZmZXIgYW5kIE5leHQgQnVmZmVyLCAxIGlmIFBEQyBoYXMgYmVlbiBpbml0aWFsaXphZWQgd2l0aCBOZXh0IEJ1ZmZlciwgMCBpZiBQREMgaXMgYnVzeSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVVNfU2VuZEZyYW1lKCBBVDkxUFNfVVNBUlQgcFVTQVJULA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBwQnVmZmVyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzekJ1ZmZlciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICogcE5leHRCdWZmZXIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHN6TmV4dEJ1ZmZlciApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVVNfU2VuZEZyYW1lDQorLy8qIFxicmllZiBSZXR1cm4gMiBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgd2l0aCBCdWZmZXIgYW5kIE5leHQgQnVmZmVyLCAxIGlmIFBEQyBoYXMgYmVlbiBpbml0aWFsaXphZWQgd2l0aCBOZXh0IEJ1ZmZlciwgMCBpZiBQREMgaXMgYnVzeQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVVNfU2VuZEZyYW1lKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJULA0KKwljaGFyICpwQnVmZmVyLA0KKwl1bnNpZ25lZCBpbnQgc3pCdWZmZXIsDQorCWNoYXIgKnBOZXh0QnVmZmVyLA0KKwl1bnNpZ25lZCBpbnQgc3pOZXh0QnVmZmVyICkNCiB7DQotICAgIHJldHVybiBBVDkxRl9QRENfU2VuZEZyYW1lKA0KLSAgICAgICAgKCBBVDkxUFNfUERDICkgJiggcFVTQVJULT5VU19SUFIgKSwNCi0gICAgICAgIHBCdWZmZXIsDQotICAgICAgICBzekJ1ZmZlciwNCi0gICAgICAgIHBOZXh0QnVmZmVyLA0KLSAgICAgICAgc3pOZXh0QnVmZmVyICk7DQorCXJldHVybiBBVDkxRl9QRENfU2VuZEZyYW1lKA0KKwkJKEFUOTFQU19QREMpICYocFVTQVJULT5VU19SUFIpLA0KKwkJcEJ1ZmZlciwNCisJCXN6QnVmZmVyLA0KKwkJcE5leHRCdWZmZXIsDQorCQlzek5leHRCdWZmZXIpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9VU19SZWNlaXZlRnJhbWUgKi8NCi0vKiogXGJyaWVmIFJldHVybiAyIGlmIFBEQyBoYXMgYmVlbiBpbml0aWFsaXplZCB3aXRoIEJ1ZmZlciBhbmQgTmV4dCBCdWZmZXIsIDEgaWYgUERDIGhhcyBiZWVuIGluaXRpYWxpemFlZCB3aXRoIE5leHQgQnVmZmVyLCAwIGlmIFBEQyBpcyBidXN5ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9VU19SZWNlaXZlRnJhbWUoIEFUOTFQU19VU0FSVCBwVVNBUlQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqIHBCdWZmZXIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHN6QnVmZmVyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBwTmV4dEJ1ZmZlciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3pOZXh0QnVmZmVyICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19SZWNlaXZlRnJhbWUNCisvLyogXGJyaWVmIFJldHVybiAyIGlmIFBEQyBoYXMgYmVlbiBpbml0aWFsaXplZCB3aXRoIEJ1ZmZlciBhbmQgTmV4dCBCdWZmZXIsIDEgaWYgUERDIGhhcyBiZWVuIGluaXRpYWxpemFlZCB3aXRoIE5leHQgQnVmZmVyLCAwIGlmIFBEQyBpcyBidXN5DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9VU19SZWNlaXZlRnJhbWUgKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJULA0KKwljaGFyICpwQnVmZmVyLA0KKwl1bnNpZ25lZCBpbnQgc3pCdWZmZXIsDQorCWNoYXIgKnBOZXh0QnVmZmVyLA0KKwl1bnNpZ25lZCBpbnQgc3pOZXh0QnVmZmVyICkNCiB7DQotICAgIHJldHVybiBBVDkxRl9QRENfUmVjZWl2ZUZyYW1lKA0KLSAgICAgICAgKCBBVDkxUFNfUERDICkgJiggcFVTQVJULT5VU19SUFIgKSwNCi0gICAgICAgIHBCdWZmZXIsDQotICAgICAgICBzekJ1ZmZlciwNCi0gICAgICAgIHBOZXh0QnVmZmVyLA0KLSAgICAgICAgc3pOZXh0QnVmZmVyICk7DQorCXJldHVybiBBVDkxRl9QRENfUmVjZWl2ZUZyYW1lKA0KKwkJKEFUOTFQU19QREMpICYocFVTQVJULT5VU19SUFIpLA0KKwkJcEJ1ZmZlciwNCisJCXN6QnVmZmVyLA0KKwkJcE5leHRCdWZmZXIsDQorCQlzek5leHRCdWZmZXIpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9VU19TZXRJcmRhRmlsdGVyICovDQotLyoqIFxicmllZiBTZXQgdGhlIHZhbHVlIG9mIElyRGEgZmlsdGVyIHRyZWdpc3RlciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1VTX1NldElyZGFGaWx0ZXIoIEFUOTFQU19VU0FSVCBwVVNBUlQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHZhbHVlICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VU19TZXRJcmRhRmlsdGVyDQorLy8qIFxicmllZiBTZXQgdGhlIHZhbHVlIG9mIElyRGEgZmlsdGVyIHRyZWdpc3Rlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VTX1NldElyZGFGaWx0ZXIgKA0KKwlBVDkxUFNfVVNBUlQgcFVTQVJULA0KKwl1bnNpZ25lZCBjaGFyIHZhbHVlDQorKQ0KIHsNCi0gICAgcFVTQVJULT5VU19JRiA9IHZhbHVlOw0KKwlwVVNBUlQtPlVTX0lGID0gdmFsdWU7DQogfQ0KIA0KIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotKiAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgU1NDDQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiogRGVmaW5lIHRoZSBzdGFuZGFyZCBJMlMgbW9kZSBjb25maWd1cmF0aW9uICovDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgU1NDDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisvLyogRGVmaW5lIHRoZSBzdGFuZGFyZCBJMlMgbW9kZSBjb25maWd1cmF0aW9uDQogDQotLyoqIENvbmZpZ3VyYXRpb24gdG8gc2V0IGluIHRoZSBTU0MgVHJhbnNtaXQgQ2xvY2sgTW9kZSBSZWdpc3RlciAqLw0KLS8qKiBQYXJhbWV0ZXJzIDogIG5iX2JpdF9ieV9zbG90IDogOCwgMTYgb3IgMzIgYml0cyAqLw0KLS8qKiAgICAgICAgICAgICAgIG5iX3Nsb3RfYnlfZnJhbWUgOiBudW1iZXIgb2YgY2hhbm5lbHMgKi8NCi0jZGVmaW5lIEFUOTFDX0kyU19BU1lfTUFTVEVSX1RYX1NFVFRJTkcoIG5iX2JpdF9ieV9zbG90LCBuYl9zbG90X2J5X2ZyYW1lICkgXA0KLSAgICAoICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgQVQ5MUNfU1NDX0NLU19ESVYgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICBBVDkxQ19TU0NfQ0tPX0NPTlRJTk9VUyArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgIEFUOTFDX1NTQ19DS0dfTk9ORSArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgQVQ5MUNfU1NDX1NUQVJUX0ZBTExfUkYgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICBBVDkxQ19TU0NfU1RUT1VUICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICggKCAxIDw8IDE2ICkgJiBBVDkxQ19TU0NfU1RURExZICkgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgKCAoICggKCBuYl9iaXRfYnlfc2xvdCAqIG5iX3Nsb3RfYnlfZnJhbWUgKSAvIDIgKSAtIDEgKSA8PCAyNCApICkNCisvLyogQ29uZmlndXJhdGlvbiB0byBzZXQgaW4gdGhlIFNTQyBUcmFuc21pdCBDbG9jayBNb2RlIFJlZ2lzdGVyDQorLy8qIFBhcmFtZXRlcnMgOiAgbmJfYml0X2J5X3Nsb3QgOiA4LCAxNiBvciAzMiBiaXRzDQorLy8qIAkJCSAgbmJfc2xvdF9ieV9mcmFtZSA6IG51bWJlciBvZiBjaGFubmVscw0KKyNkZWZpbmUgQVQ5MUNfSTJTX0FTWV9NQVNURVJfVFhfU0VUVElORyhuYl9iaXRfYnlfc2xvdCwgbmJfc2xvdF9ieV9mcmFtZSkoICtcDQorCQkJCQkJCQkJICAgQVQ5MUNfU1NDX0NLU19ESVYgICArXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCSAgIEFUOTFDX1NTQ19DS09fQ09OVElOT1VTICAgICAgK1wNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkgICBBVDkxQ19TU0NfQ0tHX05PTkUgICAgK1wNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVDkxQ19TU0NfU1RBUlRfRkFMTF9SRiArXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCSAgIEFUOTFDX1NTQ19TVFRPVVQgICtcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJICAgKCgxPDwxNikgJiBBVDkxQ19TU0NfU1RURExZKSArXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCSAgICgoKChuYl9iaXRfYnlfc2xvdCpuYl9zbG90X2J5X2ZyYW1lKS8yKS0xKSA8PDI0KSkNCiANCiANCi0vKiogQ29uZmlndXJhdGlvbiB0byBzZXQgaW4gdGhlIFNTQyBUcmFuc21pdCBGcmFtZSBNb2RlIFJlZ2lzdGVyICovDQotLyoqIFBhcmFtZXRlcnMgOiBuYl9iaXRfYnlfc2xvdCA6IDgsIDE2IG9yIDMyIGJpdHMgKi8NCi0vKiogICAgICAgICAgICAgIG5iX3Nsb3RfYnlfZnJhbWUgOiBudW1iZXIgb2YgY2hhbm5lbHMgKi8NCi0jZGVmaW5lIEFUOTFDX0kyU19BU1lfVFhfRlJBTUVfU0VUVElORyggbmJfYml0X2J5X3Nsb3QsIG5iX3Nsb3RfYnlfZnJhbWUgKSBcDQotICAgICggKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICggbmJfYml0X2J5X3Nsb3QgLSAxICkgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICBBVDkxQ19TU0NfTVNCRiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgKCAoICggbmJfc2xvdF9ieV9mcmFtZSAtIDEgKSA8PCA4ICkgJiBBVDkxQ19TU0NfREFUTkIgKSArICAgICAgICAgICAgXA0KLSAgICAgICggKCAoIG5iX2JpdF9ieV9zbG90IC0gMSApIDw8IDE2ICkgJiBBVDkxQ19TU0NfRlNMRU4gKSArICAgICAgICAgICAgIFwNCi0gICAgICBBVDkxQ19TU0NfRlNPU19ORUdBVElWRSApDQorLy8qIENvbmZpZ3VyYXRpb24gdG8gc2V0IGluIHRoZSBTU0MgVHJhbnNtaXQgRnJhbWUgTW9kZSBSZWdpc3Rlcg0KKy8vKiBQYXJhbWV0ZXJzIDogbmJfYml0X2J5X3Nsb3QgOiA4LCAxNiBvciAzMiBiaXRzDQorLy8qIAkJCSBuYl9zbG90X2J5X2ZyYW1lIDogbnVtYmVyIG9mIGNoYW5uZWxzDQorI2RlZmluZSBBVDkxQ19JMlNfQVNZX1RYX0ZSQU1FX1NFVFRJTkcobmJfYml0X2J5X3Nsb3QsIG5iX3Nsb3RfYnlfZnJhbWUpKCArXA0KKwkJCQkJCQkJCShuYl9iaXRfYnlfc2xvdC0xKSAgK1wNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQlBVDkxQ19TU0NfTVNCRiAgICtcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJKCgobmJfc2xvdF9ieV9mcmFtZS0xKTw8OCkgJiBBVDkxQ19TU0NfREFUTkIpICArXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCSgoKG5iX2JpdF9ieV9zbG90LTEpPDwxNikgJiBBVDkxQ19TU0NfRlNMRU4pICtcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJQVQ5MUNfU1NDX0ZTT1NfTkVHQVRJVkUpDQogDQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1NDX1NldEJhdWRyYXRlICovDQotLyoqIFxicmllZiBTZXQgdGhlIGJhdWRyYXRlIGFjY29yZGluZyB0byB0aGUgQ1BVIGNsb2NrICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfU1NDX1NldEJhdWRyYXRlKCBBVDkxUFNfU1NDIHBTU0MsICAgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBTU0MgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbWFpbkNsb2NrLCAvKiBcYXJnIHBlcmlwaGVyYWwgY2xvY2sgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNwZWVkICkgICAgLyogXGFyZyBTU0MgYmF1ZHJhdGUgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TU0NfU2V0QmF1ZHJhdGUNCisvLyogXGJyaWVmIFNldCB0aGUgYmF1ZHJhdGUgYWNjb3JkaW5nIHRvIHRoZSBDUFUgY2xvY2sNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TU0NfU2V0QmF1ZHJhdGUgKA0KKyAgICAgICAgQVQ5MVBTX1NTQyBwU1NDLCAgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgU1NDIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBtYWluQ2xvY2ssIC8vIFxhcmcgcGVyaXBoZXJhbCBjbG9jaw0KKyAgICAgICAgdW5zaWduZWQgaW50IHNwZWVkKSAgICAgLy8gXGFyZyBTU0MgYmF1ZHJhdGUNCiB7DQotICAgIHVuc2lnbmVkIGludCBiYXVkX3ZhbHVlOw0KLQ0KLSAgICAvKiogRGVmaW5lIHRoZSBiYXVkIHJhdGUgZGl2aXNvciByZWdpc3RlciAqLw0KLSAgICBpZiggc3BlZWQgPT0gMCApDQotICAgIHsNCi0gICAgICAgIGJhdWRfdmFsdWUgPSAwOw0KLSAgICB9DQotICAgIGVsc2UNCi0gICAgew0KLSAgICAgICAgYmF1ZF92YWx1ZSA9ICggdW5zaWduZWQgaW50ICkgKCBtYWluQ2xvY2sgKiAxMCApIC8gKCAyICogc3BlZWQgKTsNCi0NCi0gICAgICAgIGlmKCAoIGJhdWRfdmFsdWUgJSAxMCApID49IDUgKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGJhdWRfdmFsdWUgPSAoIGJhdWRfdmFsdWUgLyAxMCApICsgMTsNCi0gICAgICAgIH0NCisgICAgICAgIHVuc2lnbmVkIGludCBiYXVkX3ZhbHVlOw0KKyAgICAgICAgLy8qIERlZmluZSB0aGUgYmF1ZCByYXRlIGRpdmlzb3IgcmVnaXN0ZXINCisgICAgICAgIGlmIChzcGVlZCA9PSAwKQ0KKyAgICAgICAgICAgYmF1ZF92YWx1ZSA9IDA7DQogICAgICAgICBlbHNlDQogICAgICAgICB7DQotICAgICAgICAgICAgYmF1ZF92YWx1ZSAvPSAxMDsNCisgICAgICAgICAgIGJhdWRfdmFsdWUgPSAodW5zaWduZWQgaW50KSAobWFpbkNsb2NrICogMTApLygyKnNwZWVkKTsNCisgICAgICAgICAgIGlmICgoYmF1ZF92YWx1ZSAlIDEwKSA+PSA1KQ0KKyAgICAgICAgICAgICAgICAgIGJhdWRfdmFsdWUgPSAoYmF1ZF92YWx1ZSAvIDEwKSArIDE7DQorICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgICAgICAgYmF1ZF92YWx1ZSAvPSAxMDsNCiAgICAgICAgIH0NCi0gICAgfQ0KIA0KLSAgICBwU1NDLT5TU0NfQ01SID0gYmF1ZF92YWx1ZTsNCisgICAgICAgIHBTU0MtPlNTQ19DTVIgPSBiYXVkX3ZhbHVlOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9TU0NfQ29uZmlndXJlICovDQotLyoqIFxicmllZiBDb25maWd1cmUgU1NDICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfU1NDX0NvbmZpZ3VyZSggQVQ5MVBTX1NTQyBwU1NDLCAgICAgICAgIC8qIFxhcmcgcG9pbnRlciB0byBhIFNTQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3lzdF9jbG9jaywgLyogXGFyZyBTeXN0ZW0gQ2xvY2sgRnJlcXVlbmN5ICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYmF1ZF9yYXRlLCAgLyogXGFyZyBFeHBlY3RlZCBCYXVkIFJhdGUgRnJlcXVlbmN5ICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY2xvY2tfcngsICAgLyogXGFyZyBSZWNlaXZlciBDbG9jayBQYXJhbWV0ZXJzICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbW9kZV9yeCwgICAgLyogXGFyZyBtb2RlIFJlZ2lzdGVyIHRvIGJlIHByb2dyYW1tZWQgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjbG9ja190eCwgICAvKiBcYXJnIFRyYW5zbWl0dGVyIENsb2NrIFBhcmFtZXRlcnMgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtb2RlX3R4ICkgICAvKiBcYXJnIG1vZGUgUmVnaXN0ZXIgdG8gYmUgcHJvZ3JhbW1lZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NTQ19Db25maWd1cmUNCisvLyogXGJyaWVmIENvbmZpZ3VyZSBTU0MNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TU0NfQ29uZmlndXJlICgNCisgICAgICAgICAgICAgQVQ5MVBTX1NTQyBwU1NDLCAgICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBTU0MgY29udHJvbGxlcg0KKyAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3lzdF9jbG9jaywgIC8vIFxhcmcgU3lzdGVtIENsb2NrIEZyZXF1ZW5jeQ0KKyAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYmF1ZF9yYXRlLCAgIC8vIFxhcmcgRXhwZWN0ZWQgQmF1ZCBSYXRlIEZyZXF1ZW5jeQ0KKyAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY2xvY2tfcngsICAgIC8vIFxhcmcgUmVjZWl2ZXIgQ2xvY2sgUGFyYW1ldGVycw0KKyAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbW9kZV9yeCwgICAgIC8vIFxhcmcgbW9kZSBSZWdpc3RlciB0byBiZSBwcm9ncmFtbWVkDQorICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjbG9ja190eCwgICAgLy8gXGFyZyBUcmFuc21pdHRlciBDbG9jayBQYXJhbWV0ZXJzDQorICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtb2RlX3R4KSAgICAgLy8gXGFyZyBtb2RlIFJlZ2lzdGVyIHRvIGJlIHByb2dyYW1tZWQNCiB7DQotICAgIC8qKiBEaXNhYmxlIGludGVycnVwdHMgKi8NCi0gICAgcFNTQy0+U1NDX0lEUiA9ICggdW5zaWduZWQgaW50ICkgLTE7DQorICAgIC8vKiBEaXNhYmxlIGludGVycnVwdHMNCisJcFNTQy0+U1NDX0lEUiA9ICh1bnNpZ25lZCBpbnQpIC0xOw0KIA0KLSAgICAvKiogUmVzZXQgcmVjZWl2ZXIgYW5kIHRyYW5zbWl0dGVyICovDQotICAgIHBTU0MtPlNTQ19DUiA9IEFUOTFDX1NTQ19TV1JTVCB8IEFUOTFDX1NTQ19SWERJUyB8IEFUOTFDX1NTQ19UWERJUzsNCisgICAgLy8qIFJlc2V0IHJlY2VpdmVyIGFuZCB0cmFuc21pdHRlcg0KKwlwU1NDLT5TU0NfQ1IgPSBBVDkxQ19TU0NfU1dSU1QgfCBBVDkxQ19TU0NfUlhESVMgfCBBVDkxQ19TU0NfVFhESVMgOw0KIA0KLSAgICAvKiogRGVmaW5lIHRoZSBDbG9jayBNb2RlIFJlZ2lzdGVyICovDQotICAgIEFUOTFGX1NTQ19TZXRCYXVkcmF0ZSggcFNTQywgc3lzdF9jbG9jaywgYmF1ZF9yYXRlICk7DQorICAgIC8vKiBEZWZpbmUgdGhlIENsb2NrIE1vZGUgUmVnaXN0ZXINCisJQVQ5MUZfU1NDX1NldEJhdWRyYXRlKHBTU0MsIHN5c3RfY2xvY2ssIGJhdWRfcmF0ZSk7DQogDQotICAgIC8qKiBXcml0ZSB0aGUgUmVjZWl2ZSBDbG9jayBNb2RlIFJlZ2lzdGVyICovDQotICAgIHBTU0MtPlNTQ19SQ01SID0gY2xvY2tfcng7DQorICAgICAvLyogV3JpdGUgdGhlIFJlY2VpdmUgQ2xvY2sgTW9kZSBSZWdpc3Rlcg0KKwlwU1NDLT5TU0NfUkNNUiA9ICBjbG9ja19yeDsNCiANCi0gICAgLyoqIFdyaXRlIHRoZSBUcmFuc21pdCBDbG9jayBNb2RlIFJlZ2lzdGVyICovDQotICAgIHBTU0MtPlNTQ19UQ01SID0gY2xvY2tfdHg7DQorICAgICAvLyogV3JpdGUgdGhlIFRyYW5zbWl0IENsb2NrIE1vZGUgUmVnaXN0ZXINCisJcFNTQy0+U1NDX1RDTVIgPSAgY2xvY2tfdHg7DQogDQotICAgIC8qKiBXcml0ZSB0aGUgUmVjZWl2ZSBGcmFtZSBNb2RlIFJlZ2lzdGVyICovDQotICAgIHBTU0MtPlNTQ19SRk1SID0gbW9kZV9yeDsNCisgICAgIC8vKiBXcml0ZSB0aGUgUmVjZWl2ZSBGcmFtZSBNb2RlIFJlZ2lzdGVyDQorCXBTU0MtPlNTQ19SRk1SID0gIG1vZGVfcng7DQogDQotICAgIC8qKiBXcml0ZSB0aGUgVHJhbnNtaXQgRnJhbWUgTW9kZSBSZWdpc3RlciAqLw0KLSAgICBwU1NDLT5TU0NfVEZNUiA9IG1vZGVfdHg7DQorICAgICAvLyogV3JpdGUgdGhlIFRyYW5zbWl0IEZyYW1lIE1vZGUgUmVnaXN0ZXINCisJcFNTQy0+U1NDX1RGTVIgPSAgbW9kZV90eDsNCiANCi0gICAgLyoqIENsZWFyIFRyYW5zbWl0IGFuZCBSZWNlaXZlIENvdW50ZXJzICovDQotICAgIEFUOTFGX1BEQ19PcGVuKCAoIEFUOTFQU19QREMgKSAmKCBwU1NDLT5TU0NfUlBSICkgKTsNCisgICAgLy8qIENsZWFyIFRyYW5zbWl0IGFuZCBSZWNlaXZlIENvdW50ZXJzDQorCUFUOTFGX1BEQ19PcGVuKChBVDkxUFNfUERDKSAmKHBTU0MtPlNTQ19SUFIpKTsNCisNCisNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1NDX0VuYWJsZVJ4ICovDQotLyoqIFxicmllZiBFbmFibGUgcmVjZWl2aW5nIGRhdGFzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfU1NDX0VuYWJsZVJ4KCBBVDkxUFNfU1NDIHBTU0MgKSAvKiBcYXJnIHBvaW50ZXIgdG8gYSBTU0MgY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NTQ19FbmFibGVSeA0KKy8vKiBcYnJpZWYgRW5hYmxlIHJlY2VpdmluZyBkYXRhcw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NTQ19FbmFibGVSeCAoDQorCUFUOTFQU19TU0MgcFNTQykgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFNTQyBjb250cm9sbGVyDQogew0KLSAgICAvKiogRW5hYmxlIHJlY2VpdmVyICovDQorICAgIC8vKiBFbmFibGUgcmVjZWl2ZXINCiAgICAgcFNTQy0+U1NDX0NSID0gQVQ5MUNfU1NDX1JYRU47DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1NTQ19EaXNhYmxlUnggKi8NCi0vKiogXGJyaWVmIERpc2FibGUgcmVjZWl2aW5nIGRhdGFzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfU1NDX0Rpc2FibGVSeCggQVQ5MVBTX1NTQyBwU1NDICkgLyogXGFyZyBwb2ludGVyIHRvIGEgU1NDIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TU0NfRGlzYWJsZVJ4DQorLy8qIFxicmllZiBEaXNhYmxlIHJlY2VpdmluZyBkYXRhcw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NTQ19EaXNhYmxlUnggKA0KKwlBVDkxUFNfU1NDIHBTU0MpICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBTU0MgY29udHJvbGxlcg0KIHsNCi0gICAgLyoqIERpc2FibGUgcmVjZWl2ZXIgKi8NCisgICAgLy8qIERpc2FibGUgcmVjZWl2ZXINCiAgICAgcFNTQy0+U1NDX0NSID0gQVQ5MUNfU1NDX1JYRElTOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9TU0NfRW5hYmxlVHggKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBzZW5kaW5nIGRhdGFzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfU1NDX0VuYWJsZVR4KCBBVDkxUFNfU1NDIHBTU0MgKSAvKiBcYXJnIHBvaW50ZXIgdG8gYSBTU0MgY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NTQ19FbmFibGVUeA0KKy8vKiBcYnJpZWYgRW5hYmxlIHNlbmRpbmcgZGF0YXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TU0NfRW5hYmxlVHggKA0KKwlBVDkxUFNfU1NDIHBTU0MpICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBTU0MgY29udHJvbGxlcg0KIHsNCi0gICAgLyoqIEVuYWJsZSAgdHJhbnNtaXR0ZXIgKi8NCisgICAgLy8qIEVuYWJsZSAgdHJhbnNtaXR0ZXINCiAgICAgcFNTQy0+U1NDX0NSID0gQVQ5MUNfU1NDX1RYRU47DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1NTQ19EaXNhYmxlVHggKi8NCi0vKiogXGJyaWVmIERpc2FibGUgc2VuZGluZyBkYXRhcyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1NTQ19EaXNhYmxlVHgoIEFUOTFQU19TU0MgcFNTQyApIC8qIFxhcmcgcG9pbnRlciB0byBhIFNTQyBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1NDX0Rpc2FibGVUeA0KKy8vKiBcYnJpZWYgRGlzYWJsZSBzZW5kaW5nIGRhdGFzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1NDX0Rpc2FibGVUeCAoDQorCUFUOTFQU19TU0MgcFNTQykgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFNTQyBjb250cm9sbGVyDQogew0KLSAgICAvKiogRGlzYWJsZSAgdHJhbnNtaXR0ZXIgKi8NCisgICAgLy8qIERpc2FibGUgIHRyYW5zbWl0dGVyDQogICAgIHBTU0MtPlNTQ19DUiA9IEFUOTFDX1NTQ19UWERJUzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1NDX0VuYWJsZUl0ICovDQotLyoqIFxicmllZiBFbmFibGUgU1NDIElUICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfU1NDX0VuYWJsZUl0KCBBVDkxUFNfU1NDIHBTU0MsICAgIC8qIFxhcmcgcG9pbnRlciB0byBhIFNTQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyBJVCB0byBiZSBlbmFibGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1NDX0VuYWJsZUl0DQorLy8qIFxicmllZiBFbmFibGUgU1NDIElUDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1NDX0VuYWJsZUl0ICgNCisJQVQ5MVBTX1NTQyBwU1NDLCAvLyBcYXJnIHBvaW50ZXIgdG8gYSBTU0MgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgICAvLyBcYXJnIElUIHRvIGJlIGVuYWJsZWQNCiB7DQotICAgIC8qKiBXcml0ZSB0byB0aGUgSUVSIHJlZ2lzdGVyICovDQotICAgIHBTU0MtPlNTQ19JRVIgPSBmbGFnOw0KKwkvLyogV3JpdGUgdG8gdGhlIElFUiByZWdpc3Rlcg0KKwlwU1NDLT5TU0NfSUVSID0gZmxhZzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1NDX0Rpc2FibGVJdCAqLw0KLS8qKiBcYnJpZWYgRGlzYWJsZSBTU0MgSVQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9TU0NfRGlzYWJsZUl0KCBBVDkxUFNfU1NDIHBTU0MsICAgIC8qIFxhcmcgcG9pbnRlciB0byBhIFNTQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgSVQgdG8gYmUgZGlzYWJsZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TU0NfRGlzYWJsZUl0DQorLy8qIFxicmllZiBEaXNhYmxlIFNTQyBJVA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NTQ19EaXNhYmxlSXQgKA0KKwlBVDkxUFNfU1NDIHBTU0MsIC8vIFxhcmcgcG9pbnRlciB0byBhIFNTQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAgIC8vIFxhcmcgSVQgdG8gYmUgZGlzYWJsZWQNCiB7DQotICAgIC8qKiBXcml0ZSB0byB0aGUgSURSIHJlZ2lzdGVyICovDQotICAgIHBTU0MtPlNTQ19JRFIgPSBmbGFnOw0KKwkvLyogV3JpdGUgdG8gdGhlIElEUiByZWdpc3Rlcg0KKwlwU1NDLT5TU0NfSURSID0gZmxhZzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1NDX1JlY2VpdmVGcmFtZSAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIDIgaWYgUERDIGhhcyBiZWVuIGluaXRpYWxpemVkIHdpdGggQnVmZmVyIGFuZCBOZXh0IEJ1ZmZlciwgMSBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgd2l0aCBOZXh0IEJ1ZmZlciwgMCBpZiBQREMgaXMgYnVzeSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfU1NDX1JlY2VpdmVGcmFtZSggQVQ5MVBTX1NTQyBwU1NDLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICogcEJ1ZmZlciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHN6QnVmZmVyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICogcE5leHRCdWZmZXIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzek5leHRCdWZmZXIgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NTQ19SZWNlaXZlRnJhbWUNCisvLyogXGJyaWVmIFJldHVybiAyIGlmIFBEQyBoYXMgYmVlbiBpbml0aWFsaXplZCB3aXRoIEJ1ZmZlciBhbmQgTmV4dCBCdWZmZXIsIDEgaWYgUERDIGhhcyBiZWVuIGluaXRpYWxpemVkIHdpdGggTmV4dCBCdWZmZXIsIDAgaWYgUERDIGlzIGJ1c3kNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1NTQ19SZWNlaXZlRnJhbWUgKA0KKwlBVDkxUFNfU1NDIHBTU0MsDQorCWNoYXIgKnBCdWZmZXIsDQorCXVuc2lnbmVkIGludCBzekJ1ZmZlciwNCisJY2hhciAqcE5leHRCdWZmZXIsDQorCXVuc2lnbmVkIGludCBzek5leHRCdWZmZXIgKQ0KIHsNCi0gICAgcmV0dXJuIEFUOTFGX1BEQ19SZWNlaXZlRnJhbWUoDQotICAgICAgICAoIEFUOTFQU19QREMgKSAmKCBwU1NDLT5TU0NfUlBSICksDQotICAgICAgICBwQnVmZmVyLA0KLSAgICAgICAgc3pCdWZmZXIsDQotICAgICAgICBwTmV4dEJ1ZmZlciwNCi0gICAgICAgIHN6TmV4dEJ1ZmZlciApOw0KKwlyZXR1cm4gQVQ5MUZfUERDX1JlY2VpdmVGcmFtZSgNCisJCShBVDkxUFNfUERDKSAmKHBTU0MtPlNTQ19SUFIpLA0KKwkJcEJ1ZmZlciwNCisJCXN6QnVmZmVyLA0KKwkJcE5leHRCdWZmZXIsDQorCQlzek5leHRCdWZmZXIpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9TU0NfU2VuZEZyYW1lICovDQotLyoqIFxicmllZiBSZXR1cm4gMiBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgd2l0aCBCdWZmZXIgYW5kIE5leHQgQnVmZmVyLCAxIGlmIFBEQyBoYXMgYmVlbiBpbml0aWFsaXplZCB3aXRoIE5leHQgQnVmZmVyLCAwIGlmIFBEQyBpcyBidXN5ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9TU0NfU2VuZEZyYW1lKCBBVDkxUFNfU1NDIHBTU0MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBwQnVmZmVyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3pCdWZmZXIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBwTmV4dEJ1ZmZlciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHN6TmV4dEJ1ZmZlciApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1NDX1NlbmRGcmFtZQ0KKy8vKiBcYnJpZWYgUmV0dXJuIDIgaWYgUERDIGhhcyBiZWVuIGluaXRpYWxpemVkIHdpdGggQnVmZmVyIGFuZCBOZXh0IEJ1ZmZlciwgMSBpZiBQREMgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgd2l0aCBOZXh0IEJ1ZmZlciwgMCBpZiBQREMgaXMgYnVzeQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfU1NDX1NlbmRGcmFtZSgNCisJQVQ5MVBTX1NTQyBwU1NDLA0KKwljaGFyICpwQnVmZmVyLA0KKwl1bnNpZ25lZCBpbnQgc3pCdWZmZXIsDQorCWNoYXIgKnBOZXh0QnVmZmVyLA0KKwl1bnNpZ25lZCBpbnQgc3pOZXh0QnVmZmVyICkNCiB7DQotICAgIHJldHVybiBBVDkxRl9QRENfU2VuZEZyYW1lKA0KLSAgICAgICAgKCBBVDkxUFNfUERDICkgJiggcFNTQy0+U1NDX1JQUiApLA0KLSAgICAgICAgcEJ1ZmZlciwNCi0gICAgICAgIHN6QnVmZmVyLA0KLSAgICAgICAgcE5leHRCdWZmZXIsDQotICAgICAgICBzek5leHRCdWZmZXIgKTsNCisJcmV0dXJuIEFUOTFGX1BEQ19TZW5kRnJhbWUoDQorCQkoQVQ5MVBTX1BEQykgJihwU1NDLT5TU0NfUlBSKSwNCisJCXBCdWZmZXIsDQorCQlzekJ1ZmZlciwNCisJCXBOZXh0QnVmZmVyLA0KKwkJc3pOZXh0QnVmZmVyKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1NDX0dldEludGVycnVwdE1hc2tTdGF0dXMgKi8NCi0vKiogXGJyaWVmIFJldHVybiBTU0MgSW50ZXJydXB0IE1hc2sgU3RhdHVzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9TU0NfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLyogXHJldHVybiBTU0MgSW50ZXJydXB0IE1hc2sgU3RhdHVzICovDQotICAgIEFUOTFQU19TU0MgcFNzYyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgU1NDIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TU0NfR2V0SW50ZXJydXB0TWFza1N0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIFNTQyBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1NTQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCAvLyBccmV0dXJuIFNTQyBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisgICAgICAgIEFUOTFQU19TU0MgcFNzYykgLy8gXGFyZyAgcG9pbnRlciB0byBhIFNTQyBjb250cm9sbGVyDQogew0KLSAgICByZXR1cm4gcFNzYy0+U1NDX0lNUjsNCisgICAgICAgIHJldHVybiBwU3NjLT5TU0NfSU1SOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9TU0NfSXNJbnRlcnJ1cHRNYXNrZWQgKi8NCi0vKiogXGJyaWVmIFRlc3QgaWYgU1NDIEludGVycnVwdCBpcyBNYXNrZWQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgaW50IEFUOTFGX1NTQ19Jc0ludGVycnVwdE1hc2tlZCggQVQ5MVBTX1NTQyBwU3NjLCAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgU1NDIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1NDX0lzSW50ZXJydXB0TWFza2VkDQorLy8qIFxicmllZiBUZXN0IGlmIFNTQyBJbnRlcnJ1cHQgaXMgTWFza2VkDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9TU0NfSXNJbnRlcnJ1cHRNYXNrZWQoDQorICAgICAgICBBVDkxUFNfU1NDIHBTc2MsICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFNTQyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCiB7DQotICAgIHJldHVybiggQVQ5MUZfU1NDX0dldEludGVycnVwdE1hc2tTdGF0dXMoIHBTc2MgKSAmIGZsYWcgKTsNCisgICAgICAgIHJldHVybiAoQVQ5MUZfU1NDX0dldEludGVycnVwdE1hc2tTdGF0dXMocFNzYykgJiBmbGFnKTsNCiB9DQogDQogLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0qICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBUV0kNCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1RXSV9FbmFibGVJdCAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIFRXSSBJVCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1RXSV9FbmFibGVJdCggQVQ5MVBTX1RXSSBwVFdJLCAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBUV0kgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgSVQgdG8gYmUgZW5hYmxlZCAqLw0KKyAgICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFRXSQ0KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVFdJX0VuYWJsZUl0DQorLy8qIFxicmllZiBFbmFibGUgVFdJIElUDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVFdJX0VuYWJsZUl0ICgNCisJQVQ5MVBTX1RXSSBwVFdJLCAvLyBcYXJnIHBvaW50ZXIgdG8gYSBUV0kgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgICAvLyBcYXJnIElUIHRvIGJlIGVuYWJsZWQNCiB7DQotICAgIC8qKiBXcml0ZSB0byB0aGUgSUVSIHJlZ2lzdGVyICovDQotICAgIHBUV0ktPlRXSV9JRVIgPSBmbGFnOw0KKwkvLyogV3JpdGUgdG8gdGhlIElFUiByZWdpc3Rlcg0KKwlwVFdJLT5UV0lfSUVSID0gZmxhZzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVFdJX0Rpc2FibGVJdCAqLw0KLS8qKiBcYnJpZWYgRGlzYWJsZSBUV0kgSVQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9UV0lfRGlzYWJsZUl0KCBBVDkxUFNfVFdJIHBUV0ksICAgIC8qIFxhcmcgcG9pbnRlciB0byBhIFRXSSBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgSVQgdG8gYmUgZGlzYWJsZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UV0lfRGlzYWJsZUl0DQorLy8qIFxicmllZiBEaXNhYmxlIFRXSSBJVA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1RXSV9EaXNhYmxlSXQgKA0KKwlBVDkxUFNfVFdJIHBUV0ksIC8vIFxhcmcgcG9pbnRlciB0byBhIFRXSSBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAgIC8vIFxhcmcgSVQgdG8gYmUgZGlzYWJsZWQNCiB7DQotICAgIC8qKiBXcml0ZSB0byB0aGUgSURSIHJlZ2lzdGVyICovDQotICAgIHBUV0ktPlRXSV9JRFIgPSBmbGFnOw0KKwkvLyogV3JpdGUgdG8gdGhlIElEUiByZWdpc3Rlcg0KKwlwVFdJLT5UV0lfSURSID0gZmxhZzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVFdJX0NvbmZpZ3VyZSAqLw0KLS8qKiBcYnJpZWYgQ29uZmlndXJlIFRXSSBpbiBtYXN0ZXIgbW9kZSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1RXSV9Db25maWd1cmUoIEFUOTFQU19UV0kgcFRXSSApIC8qIFxhcmcgcG9pbnRlciB0byBhIFRXSSBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVFdJX0NvbmZpZ3VyZQ0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFRXSSBpbiBtYXN0ZXIgbW9kZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1RXSV9Db25maWd1cmUgKCBBVDkxUFNfVFdJIHBUV0kgKSAgICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBUV0kgY29udHJvbGxlcg0KIHsNCi0gICAgLyoqIERpc2FibGUgaW50ZXJydXB0cyAqLw0KLSAgICBwVFdJLT5UV0lfSURSID0gKCB1bnNpZ25lZCBpbnQgKSAtMTsNCisgICAgLy8qIERpc2FibGUgaW50ZXJydXB0cw0KKwlwVFdJLT5UV0lfSURSID0gKHVuc2lnbmVkIGludCkgLTE7DQogDQotICAgIC8qKiBSZXNldCBwZXJpcGhlcmFsICovDQotICAgIHBUV0ktPlRXSV9DUiA9IEFUOTFDX1RXSV9TV1JTVDsNCisgICAgLy8qIFJlc2V0IHBlcmlwaGVyYWwNCisJcFRXSS0+VFdJX0NSID0gQVQ5MUNfVFdJX1NXUlNUOw0KIA0KLSAgICAvKiogU2V0IE1hc3RlciBtb2RlICovDQotICAgIHBUV0ktPlRXSV9DUiA9IEFUOTFDX1RXSV9NU0VOOw0KKwkvLyogU2V0IE1hc3RlciBtb2RlDQorCXBUV0ktPlRXSV9DUiA9IEFUOTFDX1RXSV9NU0VOOw0KKw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9UV0lfR2V0SW50ZXJydXB0TWFza1N0YXR1cyAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIFRXSSBJbnRlcnJ1cHQgTWFzayBTdGF0dXMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1RXSV9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCAvKiBccmV0dXJuIFRXSSBJbnRlcnJ1cHQgTWFzayBTdGF0dXMgKi8NCi0gICAgQVQ5MVBTX1RXSSBwVHdpICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBUV0kgY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RXSV9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gVFdJIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVFdJX0dldEludGVycnVwdE1hc2tTdGF0dXMoIC8vIFxyZXR1cm4gVFdJIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKyAgICAgICAgQVQ5MVBTX1RXSSBwVHdpKSAvLyBcYXJnICBwb2ludGVyIHRvIGEgVFdJIGNvbnRyb2xsZXINCiB7DQotICAgIHJldHVybiBwVHdpLT5UV0lfSU1SOw0KKyAgICAgICAgcmV0dXJuIHBUd2ktPlRXSV9JTVI7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1RXSV9Jc0ludGVycnVwdE1hc2tlZCAqLw0KLS8qKiBcYnJpZWYgVGVzdCBpZiBUV0kgSW50ZXJydXB0IGlzIE1hc2tlZCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSBpbnQgQVQ5MUZfVFdJX0lzSW50ZXJydXB0TWFza2VkKCBBVDkxUFNfVFdJIHBUd2ksICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBUV0kgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UV0lfSXNJbnRlcnJ1cHRNYXNrZWQNCisvLyogXGJyaWVmIFRlc3QgaWYgVFdJIEludGVycnVwdCBpcyBNYXNrZWQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1RXSV9Jc0ludGVycnVwdE1hc2tlZCgNCisgICAgICAgIEFUOTFQU19UV0kgcFR3aSwgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgVFdJIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KIHsNCi0gICAgcmV0dXJuKCBBVDkxRl9UV0lfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggcFR3aSApICYgZmxhZyApOw0KKyAgICAgICAgcmV0dXJuIChBVDkxRl9UV0lfR2V0SW50ZXJydXB0TWFza1N0YXR1cyhwVHdpKSAmIGZsYWcpOw0KIH0NCiANCiAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSogICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFBXTUMNCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BXTV9HZXRTdGF0dXMgKi8NCi0vKiogXGJyaWVmIFJldHVybiBQV00gSW50ZXJydXB0IFN0YXR1cyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUFdNQ19HZXRTdGF0dXMoIC8qIFxyZXR1cm4gUFdNIEludGVycnVwdCBTdGF0dXMgKi8NCi0gICAgQVQ5MVBTX1BXTUMgcFBXTSApICAgICAgICAgICAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gYSBQV00gY29udHJvbGxlciAqLw0KKyAgICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFBXTUMNCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BXTV9HZXRTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBQV00gSW50ZXJydXB0IFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUFdNQ19HZXRTdGF0dXMoIC8vIFxyZXR1cm4gUFdNIEludGVycnVwdCBTdGF0dXMNCisJQVQ5MVBTX1BXTUMgcFBXTSkgLy8gcG9pbnRlciB0byBhIFBXTSBjb250cm9sbGVyDQogew0KLSAgICByZXR1cm4gcFBXTS0+UFdNQ19TUjsNCisJcmV0dXJuIHBQV00tPlBXTUNfU1I7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BXTV9JbnRlcnJ1cHRFbmFibGUgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBQV00gSW50ZXJydXB0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUFdNQ19JbnRlcnJ1cHRFbmFibGUoIEFUOTFQU19QV01DIHBQd20sICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBXTSBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBQV00gaW50ZXJydXB0IHRvIGJlIGVuYWJsZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QV01fSW50ZXJydXB0RW5hYmxlDQorLy8qIFxicmllZiBFbmFibGUgUFdNIEludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BXTUNfSW50ZXJydXB0RW5hYmxlKA0KKyAgICAgICAgQVQ5MVBTX1BXTUMgcFB3bSwgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgUFdNIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBQV00gaW50ZXJydXB0IHRvIGJlIGVuYWJsZWQNCiB7DQotICAgIHBQd20tPlBXTUNfSUVSID0gZmxhZzsNCisgICAgICAgIHBQd20tPlBXTUNfSUVSID0gZmxhZzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUFdNX0ludGVycnVwdERpc2FibGUgKi8NCi0vKiogXGJyaWVmIERpc2FibGUgUFdNIEludGVycnVwdCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BXTUNfSW50ZXJydXB0RGlzYWJsZSggQVQ5MVBTX1BXTUMgcFB3bSwgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUFdNIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBQV00gaW50ZXJydXB0IHRvIGJlIGRpc2FibGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUFdNX0ludGVycnVwdERpc2FibGUNCisvLyogXGJyaWVmIERpc2FibGUgUFdNIEludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BXTUNfSW50ZXJydXB0RGlzYWJsZSgNCisgICAgICAgIEFUOTFQU19QV01DIHBQd20sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBXTSBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgUFdNIGludGVycnVwdCB0byBiZSBkaXNhYmxlZA0KIHsNCi0gICAgcFB3bS0+UFdNQ19JRFIgPSBmbGFnOw0KKyAgICAgICAgcFB3bS0+UFdNQ19JRFIgPSBmbGFnOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QV01fR2V0SW50ZXJydXB0TWFza1N0YXR1cyAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIFBXTSBJbnRlcnJ1cHQgTWFzayBTdGF0dXMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1BXTUNfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLyogXHJldHVybiBQV00gSW50ZXJydXB0IE1hc2sgU3RhdHVzICovDQotICAgIEFUOTFQU19QV01DIHBQd20gKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBXTSBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUFdNX0dldEludGVycnVwdE1hc2tTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBQV00gSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9QV01DX0dldEludGVycnVwdE1hc2tTdGF0dXMoIC8vIFxyZXR1cm4gUFdNIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKyAgICAgICAgQVQ5MVBTX1BXTUMgcFB3bSkgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBXTSBjb250cm9sbGVyDQogew0KLSAgICByZXR1cm4gcFB3bS0+UFdNQ19JTVI7DQorICAgICAgICByZXR1cm4gcFB3bS0+UFdNQ19JTVI7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BXTV9Jc0ludGVycnVwdE1hc2tlZCAqLw0KLS8qKiBcYnJpZWYgVGVzdCBpZiBQV00gSW50ZXJydXB0IGlzIE1hc2tlZCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUFdNQ19Jc0ludGVycnVwdE1hc2tlZCggQVQ5MVBTX1BXTUMgcFBXTSwgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUFdNIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BXTV9Jc0ludGVycnVwdE1hc2tlZA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBQV00gSW50ZXJydXB0IGlzIE1hc2tlZA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUFdNQ19Jc0ludGVycnVwdE1hc2tlZCgNCisgICAgICAgIEFUOTFQU19QV01DIHBQV00sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBXTSBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCiB7DQotICAgIHJldHVybiggQVQ5MUZfUFdNQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCBwUFdNICkgJiBmbGFnICk7DQorCXJldHVybiAoQVQ5MUZfUFdNQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKHBQV00pICYgZmxhZyk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BXTV9Jc1N0YXR1c1NldCAqLw0KLS8qKiBcYnJpZWYgVGVzdCBpZiBQV00gSW50ZXJydXB0IGlzIFNldCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUFdNQ19Jc1N0YXR1c1NldCggQVQ5MVBTX1BXTUMgcFBXTSwgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUFdNIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BXTV9Jc1N0YXR1c1NldA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBQV00gSW50ZXJydXB0IGlzIFNldA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfUFdNQ19Jc1N0YXR1c1NldCgNCisgICAgICAgIEFUOTFQU19QV01DIHBQV00sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBXTSBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCiB7DQotICAgIHJldHVybiggQVQ5MUZfUFdNQ19HZXRTdGF0dXMoIHBQV00gKSAmIGZsYWcgKTsNCisJcmV0dXJuIChBVDkxRl9QV01DX0dldFN0YXR1cyhwUFdNKSAmIGZsYWcpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QV01fQ2ZnQ2hhbm5lbCAqLw0KLS8qKiBcYnJpZWYgVGVzdCBpZiBQV00gSW50ZXJydXB0IGlzIFNldCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BXTUNfQ2ZnQ2hhbm5lbCggQVQ5MVBTX1BXTUMgcFBXTSwgICAgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBXTSBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjaGFubmVsSWQsIC8qIFxhcmcgUFdNIGNoYW5uZWwgSUQgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1vZGUsICAgICAgLyogXGFyZyAgUFdNIG1vZGUgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHBlcmlvZCwgICAgLyogXGFyZyBQV00gcGVyaW9kICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBkdXR5ICkgICAgIC8qIFxhcmcgUFdNIGR1dHkgY3ljbGUgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QV01fQ2ZnQ2hhbm5lbA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBQV00gSW50ZXJydXB0IGlzIFNldA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BXTUNfQ2ZnQ2hhbm5lbCgNCisgICAgICAgIEFUOTFQU19QV01DIHBQV00sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBXTSBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgY2hhbm5lbElkLCAvLyBcYXJnIFBXTSBjaGFubmVsIElEDQorICAgICAgICB1bnNpZ25lZCBpbnQgbW9kZSwgLy8gXGFyZyAgUFdNIG1vZGUNCisgICAgICAgIHVuc2lnbmVkIGludCBwZXJpb2QsIC8vIFxhcmcgUFdNIHBlcmlvZA0KKyAgICAgICAgdW5zaWduZWQgaW50IGR1dHkpIC8vIFxhcmcgUFdNIGR1dHkgY3ljbGUNCiB7DQotICAgIHBQV00tPlBXTUNfQ0hbIGNoYW5uZWxJZCBdLlBXTUNfQ01SID0gbW9kZTsNCi0gICAgcFBXTS0+UFdNQ19DSFsgY2hhbm5lbElkIF0uUFdNQ19DRFRZUiA9IGR1dHk7DQotICAgIHBQV00tPlBXTUNfQ0hbIGNoYW5uZWxJZCBdLlBXTUNfQ1BSRFIgPSBwZXJpb2Q7DQorCXBQV00tPlBXTUNfQ0hbY2hhbm5lbElkXS5QV01DX0NNUiA9IG1vZGU7DQorCXBQV00tPlBXTUNfQ0hbY2hhbm5lbElkXS5QV01DX0NEVFlSID0gZHV0eTsNCisJcFBXTS0+UFdNQ19DSFtjaGFubmVsSWRdLlBXTUNfQ1BSRFIgPSBwZXJpb2Q7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BXTV9TdGFydENoYW5uZWwgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBjaGFubmVsICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUFdNQ19TdGFydENoYW5uZWwoIEFUOTFQU19QV01DIHBQV00sICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFBXTSBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBDaGFubmVscyBJRHMgdG8gYmUgZW5hYmxlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BXTV9TdGFydENoYW5uZWwNCisvLyogXGJyaWVmIEVuYWJsZSBjaGFubmVsDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUFdNQ19TdGFydENoYW5uZWwoDQorICAgICAgICBBVDkxUFNfUFdNQyBwUFdNLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQV00gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIENoYW5uZWxzIElEcyB0byBiZSBlbmFibGVkDQogew0KLSAgICBwUFdNLT5QV01DX0VOQSA9IGZsYWc7DQorCXBQV00tPlBXTUNfRU5BID0gZmxhZzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUFdNX1N0b3BDaGFubmVsICovDQotLyoqIFxicmllZiBEaXNhYmxlIGNoYW5uZWwgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QV01DX1N0b3BDaGFubmVsKCBBVDkxUFNfUFdNQyBwUFdNLCAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBQV00gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBDaGFubmVscyBJRHMgdG8gYmUgZW5hYmxlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BXTV9TdG9wQ2hhbm5lbA0KKy8vKiBcYnJpZWYgRGlzYWJsZSBjaGFubmVsDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUFdNQ19TdG9wQ2hhbm5lbCgNCisgICAgICAgIEFUOTFQU19QV01DIHBQV00sICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFBXTSBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgQ2hhbm5lbHMgSURzIHRvIGJlIGVuYWJsZWQNCiB7DQotICAgIHBQV00tPlBXTUNfRElTID0gZmxhZzsNCisJcFBXTS0+UFdNQ19ESVMgPSBmbGFnOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QV01fVXBkYXRlQ2hhbm5lbCAqLw0KLS8qKiBcYnJpZWYgVXBkYXRlIFBlcmlvZCBvciBEdXR5IEN5Y2xlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUFdNQ19VcGRhdGVDaGFubmVsKCBBVDkxUFNfUFdNQyBwUFdNLCAgICAgICAvKiBcYXJnICBwb2ludGVyIHRvIGEgUFdNIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNoYW5uZWxJZCwgLyogXGFyZyBQV00gY2hhbm5lbCBJRCAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdXBkYXRlICkgICAvKiBcYXJnICBDaGFubmVscyBJRHMgdG8gYmUgZW5hYmxlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BXTV9VcGRhdGVDaGFubmVsDQorLy8qIFxicmllZiBVcGRhdGUgUGVyaW9kIG9yIER1dHkgQ3ljbGUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QV01DX1VwZGF0ZUNoYW5uZWwoDQorICAgICAgICBBVDkxUFNfUFdNQyBwUFdNLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBQV00gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGNoYW5uZWxJZCwgLy8gXGFyZyBQV00gY2hhbm5lbCBJRA0KKyAgICAgICAgdW5zaWduZWQgaW50IHVwZGF0ZSkgLy8gXGFyZyAgQ2hhbm5lbHMgSURzIHRvIGJlIGVuYWJsZWQNCiB7DQotICAgIHBQV00tPlBXTUNfQ0hbIGNoYW5uZWxJZCBdLlBXTUNfQ1VQRFIgPSB1cGRhdGU7DQorCXBQV00tPlBXTUNfQ0hbY2hhbm5lbElkXS5QV01DX0NVUERSID0gdXBkYXRlOw0KIH0NCiANCiAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSogICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFVEUA0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVURQX0VuYWJsZUl0ICovDQotLyoqIFxicmllZiBFbmFibGUgVURQIElUICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVURQX0VuYWJsZUl0KCBBVDkxUFNfVURQIHBVRFAsICAgIC8qIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyBJVCB0byBiZSBlbmFibGVkICovDQorICAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgVURQDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfRW5hYmxlSXQNCisvLyogXGJyaWVmIEVuYWJsZSBVRFAgSVQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfRW5hYmxlSXQgKA0KKwlBVDkxUFNfVURQIHBVRFAsICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgICAvLyBcYXJnIElUIHRvIGJlIGVuYWJsZWQNCiB7DQotICAgIC8qKiBXcml0ZSB0byB0aGUgSUVSIHJlZ2lzdGVyICovDQotICAgIHBVRFAtPlVEUF9JRVIgPSBmbGFnOw0KKwkvLyogV3JpdGUgdG8gdGhlIElFUiByZWdpc3Rlcg0KKwlwVURQLT5VRFBfSUVSID0gZmxhZzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVURQX0Rpc2FibGVJdCAqLw0KLS8qKiBcYnJpZWYgRGlzYWJsZSBVRFAgSVQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfRGlzYWJsZUl0KCBBVDkxUFNfVURQIHBVRFAsICAgIC8qIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgSVQgdG8gYmUgZGlzYWJsZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfRGlzYWJsZUl0DQorLy8qIFxicmllZiBEaXNhYmxlIFVEUCBJVA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VEUF9EaXNhYmxlSXQgKA0KKwlBVDkxUFNfVURQIHBVRFAsICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgICAvLyBcYXJnIElUIHRvIGJlIGRpc2FibGVkDQogew0KLSAgICAvKiogV3JpdGUgdG8gdGhlIElEUiByZWdpc3RlciAqLw0KLSAgICBwVURQLT5VRFBfSURSID0gZmxhZzsNCisJLy8qIFdyaXRlIHRvIHRoZSBJRFIgcmVnaXN0ZXINCisJcFVEUC0+VURQX0lEUiA9IGZsYWc7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VEUF9TZXRBZGRyZXNzICovDQotLyoqIFxicmllZiBTZXQgVURQIGZ1bmN0aW9uYWwgYWRkcmVzcyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1VEUF9TZXRBZGRyZXNzKCBBVDkxUFNfVURQIHBVRFAsICAgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYWRkcmVzcyApIC8qIFxhcmcgbmV3IFVEUCBhZGRyZXNzICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVURQX1NldEFkZHJlc3MNCisvLyogXGJyaWVmIFNldCBVRFAgZnVuY3Rpb25hbCBhZGRyZXNzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVURQX1NldEFkZHJlc3MgKA0KKwlBVDkxUFNfVURQIHBVRFAsICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGFkZHJlc3MpICAgLy8gXGFyZyBuZXcgVURQIGFkZHJlc3MNCiB7DQotICAgIHBVRFAtPlVEUF9GQUREUiA9ICggQVQ5MUNfVURQX0ZFTiB8IGFkZHJlc3MgKTsNCisJcFVEUC0+VURQX0ZBRERSID0gKEFUOTFDX1VEUF9GRU4gfCBhZGRyZXNzKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVURQX0VuYWJsZUVwICovDQotLyoqIFxicmllZiBFbmFibGUgRW5kcG9pbnQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfRW5hYmxlRXAoIEFUOTFQU19VRFAgcFVEUCwgICAgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGVuZHBvaW50ICkgLyogXGFyZyBlbmRwb2ludCBudW1iZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfRW5hYmxlRXANCisvLyogXGJyaWVmIEVuYWJsZSBFbmRwb2ludA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VEUF9FbmFibGVFcCAoDQorCUFUOTFQU19VRFAgcFVEUCwgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGNoYXIgZW5kcG9pbnQpICAgLy8gXGFyZyBlbmRwb2ludCBudW1iZXINCiB7DQotICAgIHBVRFAtPlVEUF9DU1JbIGVuZHBvaW50IF0gfD0gQVQ5MUNfVURQX0VQRURTOw0KKwlwVURQLT5VRFBfQ1NSW2VuZHBvaW50XSB8PSBBVDkxQ19VRFBfRVBFRFM7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VEUF9EaXNhYmxlRXAgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBFbmRwb2ludCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1VEUF9EaXNhYmxlRXAoIEFUOTFQU19VRFAgcFVEUCwgICAgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBlbmRwb2ludCApIC8qIFxhcmcgZW5kcG9pbnQgbnVtYmVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVURQX0Rpc2FibGVFcA0KKy8vKiBcYnJpZWYgRW5hYmxlIEVuZHBvaW50DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVURQX0Rpc2FibGVFcCAoDQorCUFUOTFQU19VRFAgcFVEUCwgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGNoYXIgZW5kcG9pbnQpICAgLy8gXGFyZyBlbmRwb2ludCBudW1iZXINCiB7DQotICAgIHBVRFAtPlVEUF9DU1JbIGVuZHBvaW50IF0gJj0gfkFUOTFDX1VEUF9FUEVEUzsNCisJcFVEUC0+VURQX0NTUltlbmRwb2ludF0gJj0gfkFUOTFDX1VEUF9FUEVEUzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVURQX1NldFN0YXRlICovDQotLyoqIFxicmllZiBTZXQgVURQIERldmljZSBzdGF0ZSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1VEUF9TZXRTdGF0ZSggQVQ5MVBTX1VEUCBwVURQLCAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgbmV3IFVEUCBhZGRyZXNzICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVURQX1NldFN0YXRlDQorLy8qIFxicmllZiBTZXQgVURQIERldmljZSBzdGF0ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VEUF9TZXRTdGF0ZSAoDQorCUFUOTFQU19VRFAgcFVEUCwgICAgIC8vIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAgIC8vIFxhcmcgbmV3IFVEUCBhZGRyZXNzDQogew0KLSAgICBwVURQLT5VRFBfR0xCU1RBVEUgJj0gfiggQVQ5MUNfVURQX0ZBRERFTiB8IEFUOTFDX1VEUF9DT05GRyApOw0KLSAgICBwVURQLT5VRFBfR0xCU1RBVEUgfD0gZmxhZzsNCisJcFVEUC0+VURQX0dMQlNUQVRFICAmPSB+KEFUOTFDX1VEUF9GQURERU4gfCBBVDkxQ19VRFBfQ09ORkcpOw0KKwlwVURQLT5VRFBfR0xCU1RBVEUgIHw9IGZsYWc7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VEUF9HZXRTdGF0ZSAqLw0KLS8qKiBcYnJpZWYgcmV0dXJuIFVEUCBEZXZpY2Ugc3RhdGUgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1VEUF9HZXRTdGF0ZSggLyogXHJldHVybiB0aGUgVURQIGRldmljZSBzdGF0ZSAqLw0KLSAgICBBVDkxUFNfVURQIHBVRFAgKSAgICAgICAgICAgICAgICAgICAgIC8qIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVURQX0dldFN0YXRlDQorLy8qIFxicmllZiByZXR1cm4gVURQIERldmljZSBzdGF0ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVURQX0dldFN0YXRlICggLy8gXHJldHVybiB0aGUgVURQIGRldmljZSBzdGF0ZQ0KKwlBVDkxUFNfVURQIHBVRFApICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlcg0KIHsNCi0gICAgcmV0dXJuKCBwVURQLT5VRFBfR0xCU1RBVEUgJiAoIEFUOTFDX1VEUF9GQURERU4gfCBBVDkxQ19VRFBfQ09ORkcgKSApOw0KKwlyZXR1cm4gKHBVRFAtPlVEUF9HTEJTVEFURSAgJiAoQVQ5MUNfVURQX0ZBRERFTiB8IEFUOTFDX1VEUF9DT05GRykpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9VRFBfUmVzZXRFcCAqLw0KLS8qKiBcYnJpZWYgUmVzZXQgVURQIGVuZHBvaW50ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVURQX1Jlc2V0RXAoIC8qIFxyZXR1cm4gdGhlIFVEUCBkZXZpY2Ugc3RhdGUgKi8NCi0gICAgQVQ5MVBTX1VEUCBwVURQLCAgICAgICAgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlciAqLw0KLSAgICB1bnNpZ25lZCBpbnQgZmxhZyApICAgICAgICAgIC8qIFxhcmcgRW5kcG9pbnRzIHRvIGJlIHJlc2V0ICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVURQX1Jlc2V0RXANCisvLyogXGJyaWVmIFJlc2V0IFVEUCBlbmRwb2ludA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VEUF9SZXNldEVwICggLy8gXHJldHVybiB0aGUgVURQIGRldmljZSBzdGF0ZQ0KKwlBVDkxUFNfVURQIHBVRFAsICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgICAvLyBcYXJnIEVuZHBvaW50cyB0byBiZSByZXNldA0KIHsNCi0gICAgcFVEUC0+VURQX1JTVEVQID0gZmxhZzsNCi0gICAgcFVEUC0+VURQX1JTVEVQID0gMDsNCisJcFVEUC0+VURQX1JTVEVQID0gZmxhZzsNCisJcFVEUC0+VURQX1JTVEVQID0gMDsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVURQX0VwU3RhbGwgKi8NCi0vKiogXGJyaWVmIEVuZHBvaW50IHdpbGwgU1RBTEwgcmVxdWVzdHMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfRXBTdGFsbCggQVQ5MVBTX1VEUCBwVURQLCAgICAgICAgIC8qIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBlbmRwb2ludCApIC8qIFxhcmcgZW5kcG9pbnQgbnVtYmVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVURQX0VwU3RhbGwNCisvLyogXGJyaWVmIEVuZHBvaW50IHdpbGwgU1RBTEwgcmVxdWVzdHMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfRXBTdGFsbCgNCisJQVQ5MVBTX1VEUCBwVURQLCAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVURQIGNvbnRyb2xsZXINCisJdW5zaWduZWQgY2hhciBlbmRwb2ludCkgICAvLyBcYXJnIGVuZHBvaW50IG51bWJlcg0KIHsNCi0gICAgcFVEUC0+VURQX0NTUlsgZW5kcG9pbnQgXSB8PSBBVDkxQ19VRFBfRk9SQ0VTVEFMTDsNCisJcFVEUC0+VURQX0NTUltlbmRwb2ludF0gfD0gQVQ5MUNfVURQX0ZPUkNFU1RBTEw7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VEUF9FcFdyaXRlICovDQotLyoqIFxicmllZiBXcml0ZSB2YWx1ZSBpbiB0aGUgRFBSICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVURQX0VwV3JpdGUoIEFUOTFQU19VRFAgcFVEUCwgICAgICAgIC8qIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBlbmRwb2ludCwgLyogXGFyZyBlbmRwb2ludCBudW1iZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHZhbHVlICkgICAvKiBcYXJnIHZhbHVlIHRvIGJlIHdyaXR0ZW4gaW4gdGhlIERQUiAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VEUF9FcFdyaXRlDQorLy8qIFxicmllZiBXcml0ZSB2YWx1ZSBpbiB0aGUgRFBSDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVURQX0VwV3JpdGUoDQorCUFUOTFQU19VRFAgcFVEUCwgICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGVuZHBvaW50LCAgLy8gXGFyZyBlbmRwb2ludCBudW1iZXINCisJdW5zaWduZWQgY2hhciB2YWx1ZSkgICAgIC8vIFxhcmcgdmFsdWUgdG8gYmUgd3JpdHRlbiBpbiB0aGUgRFBSDQogew0KLSAgICBwVURQLT5VRFBfRkRSWyBlbmRwb2ludCBdID0gdmFsdWU7DQorCXBVRFAtPlVEUF9GRFJbZW5kcG9pbnRdID0gdmFsdWU7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VEUF9FcFJlYWQgKi8NCi0vKiogXGJyaWVmIFJldHVybiB2YWx1ZSBmcm9tIHRoZSBEUFIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1VEUF9FcFJlYWQoIEFUOTFQU19VRFAgcFVEUCwgICAgICAgICAvKiBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGVuZHBvaW50ICkgLyogXGFyZyBlbmRwb2ludCBudW1iZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfRXBSZWFkDQorLy8qIFxicmllZiBSZXR1cm4gdmFsdWUgZnJvbSB0aGUgRFBSDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9VRFBfRXBSZWFkKA0KKwlBVDkxUFNfVURQIHBVRFAsICAgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVURQIGNvbnRyb2xsZXINCisJdW5zaWduZWQgY2hhciBlbmRwb2ludCkgIC8vIFxhcmcgZW5kcG9pbnQgbnVtYmVyDQogew0KLSAgICByZXR1cm4gcFVEUC0+VURQX0ZEUlsgZW5kcG9pbnQgXTsNCisJcmV0dXJuIHBVRFAtPlVEUF9GRFJbZW5kcG9pbnRdOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9VRFBfRXBFbmRPZldyICovDQotLyoqIFxicmllZiBOb3RpZnkgdGhlIFVEUCB0aGF0IHZhbHVlcyBpbiBEUFIgYXJlIHJlYWR5IHRvIGJlIHNlbnQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfRXBFbmRPZldyKCBBVDkxUFNfVURQIHBVRFAsICAgICAgICAgLyogXGFyZyBwb2ludGVyIHRvIGEgVURQIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgZW5kcG9pbnQgKSAvKiBcYXJnIGVuZHBvaW50IG51bWJlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VEUF9FcEVuZE9mV3INCisvLyogXGJyaWVmIE5vdGlmeSB0aGUgVURQIHRoYXQgdmFsdWVzIGluIERQUiBhcmUgcmVhZHkgdG8gYmUgc2VudA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VEUF9FcEVuZE9mV3IoDQorCUFUOTFQU19VRFAgcFVEUCwgICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGVuZHBvaW50KSAgLy8gXGFyZyBlbmRwb2ludCBudW1iZXINCiB7DQotICAgIHBVRFAtPlVEUF9DU1JbIGVuZHBvaW50IF0gfD0gQVQ5MUNfVURQX1RYUEtUUkRZOw0KKwlwVURQLT5VRFBfQ1NSW2VuZHBvaW50XSB8PSBBVDkxQ19VRFBfVFhQS1RSRFk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VEUF9FcENsZWFyICovDQotLyoqIFxicmllZiBDbGVhciBmbGFnIGluIHRoZSBlbmRwb2ludCBDU1IgcmVnaXN0ZXIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfRXBDbGVhciggQVQ5MVBTX1VEUCBwVURQLCAgICAgICAgLyogXGFyZyBwb2ludGVyIHRvIGEgVURQIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGVuZHBvaW50LCAvKiBcYXJnIGVuZHBvaW50IG51bWJlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgICAgIC8qIFxhcmcgZmxhZyB0byBiZSBjbGVhcmVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVURQX0VwQ2xlYXINCisvLyogXGJyaWVmIENsZWFyIGZsYWcgaW4gdGhlIGVuZHBvaW50IENTUiByZWdpc3Rlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VEUF9FcENsZWFyKA0KKwlBVDkxUFNfVURQIHBVRFAsICAgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVURQIGNvbnRyb2xsZXINCisJdW5zaWduZWQgY2hhciBlbmRwb2ludCwgIC8vIFxhcmcgZW5kcG9pbnQgbnVtYmVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAgICAgICAvLyBcYXJnIGZsYWcgdG8gYmUgY2xlYXJlZA0KIHsNCi0gICAgcFVEUC0+VURQX0NTUlsgZW5kcG9pbnQgXSAmPSB+KCBmbGFnICk7DQorCXBVRFAtPlVEUF9DU1JbZW5kcG9pbnRdICY9IH4oZmxhZyk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VEUF9FcFNldCAqLw0KLS8qKiBcYnJpZWYgU2V0IGZsYWcgaW4gdGhlIGVuZHBvaW50IENTUiByZWdpc3RlciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1VEUF9FcFNldCggQVQ5MVBTX1VEUCBwVURQLCAgICAgICAgLyogXGFyZyBwb2ludGVyIHRvIGEgVURQIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBlbmRwb2ludCwgLyogXGFyZyBlbmRwb2ludCBudW1iZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAgICAgLyogXGFyZyBmbGFnIHRvIGJlIGNsZWFyZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfRXBTZXQNCisvLyogXGJyaWVmIFNldCBmbGFnIGluIHRoZSBlbmRwb2ludCBDU1IgcmVnaXN0ZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfRXBTZXQoDQorCUFUOTFQU19VRFAgcFVEUCwgICAgICAgICAvLyBcYXJnIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGVuZHBvaW50LCAgLy8gXGFyZyBlbmRwb2ludCBudW1iZXINCisJdW5zaWduZWQgaW50IGZsYWcpICAgICAgIC8vIFxhcmcgZmxhZyB0byBiZSBjbGVhcmVkDQogew0KLSAgICBwVURQLT5VRFBfQ1NSWyBlbmRwb2ludCBdIHw9IGZsYWc7DQorCXBVRFAtPlVEUF9DU1JbZW5kcG9pbnRdIHw9IGZsYWc7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VEUF9FcFN0YXR1cyAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIHRoZSBlbmRwb2ludCBDU1IgcmVnaXN0ZXIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1VEUF9FcFN0YXR1cyggQVQ5MVBTX1VEUCBwVURQLCAgICAgICAgIC8qIFxhcmcgcG9pbnRlciB0byBhIFVEUCBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBlbmRwb2ludCApIC8qIFxhcmcgZW5kcG9pbnQgbnVtYmVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVURQX0VwU3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gdGhlIGVuZHBvaW50IENTUiByZWdpc3Rlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVURQX0VwU3RhdHVzKA0KKwlBVDkxUFNfVURQIHBVRFAsICAgICAgICAgLy8gXGFyZyBwb2ludGVyIHRvIGEgVURQIGNvbnRyb2xsZXINCisJdW5zaWduZWQgY2hhciBlbmRwb2ludCkgIC8vIFxhcmcgZW5kcG9pbnQgbnVtYmVyDQogew0KLSAgICByZXR1cm4gcFVEUC0+VURQX0NTUlsgZW5kcG9pbnQgXTsNCisJcmV0dXJuIHBVRFAtPlVEUF9DU1JbZW5kcG9pbnRdOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9VRFBfR2V0SW50ZXJydXB0TWFza1N0YXR1cyAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIFVEUCBJbnRlcnJ1cHQgTWFzayBTdGF0dXMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1VEUF9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCAvKiBccmV0dXJuIFVEUCBJbnRlcnJ1cHQgTWFzayBTdGF0dXMgKi8NCi0gICAgQVQ5MVBTX1VEUCBwVWRwICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VEUF9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gVURQIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVURQX0dldEludGVycnVwdE1hc2tTdGF0dXMoIC8vIFxyZXR1cm4gVURQIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKyAgICAgICAgQVQ5MVBTX1VEUCBwVWRwKSAvLyBcYXJnICBwb2ludGVyIHRvIGEgVURQIGNvbnRyb2xsZXINCiB7DQotICAgIHJldHVybiBwVWRwLT5VRFBfSU1SOw0KKyAgICAgICAgcmV0dXJuIHBVZHAtPlVEUF9JTVI7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VEUF9Jc0ludGVycnVwdE1hc2tlZCAqLw0KLS8qKiBcYnJpZWYgVGVzdCBpZiBVRFAgSW50ZXJydXB0IGlzIE1hc2tlZCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSBpbnQgQVQ5MUZfVURQX0lzSW50ZXJydXB0TWFza2VkKCBBVDkxUFNfVURQIHBVZHAsICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBVRFAgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfSXNJbnRlcnJ1cHRNYXNrZWQNCisvLyogXGJyaWVmIFRlc3QgaWYgVURQIEludGVycnVwdCBpcyBNYXNrZWQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgaW50IEFUOTFGX1VEUF9Jc0ludGVycnVwdE1hc2tlZCgNCisgICAgICAgIEFUOTFQU19VRFAgcFVkcCwgICAvLyBcYXJnICBwb2ludGVyIHRvIGEgVURQIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KIHsNCi0gICAgcmV0dXJuKCBBVDkxRl9VRFBfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggcFVkcCApICYgZmxhZyApOw0KKyAgICAgICAgcmV0dXJuIChBVDkxRl9VRFBfR2V0SW50ZXJydXB0TWFza1N0YXR1cyhwVWRwKSAmIGZsYWcpOw0KIH0NCiANCiAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSogICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFRDDQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9UQ19JbnRlcnJ1cHRFbmFibGUgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBUQyBJbnRlcnJ1cHQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9UQ19JbnRlcnJ1cHRFbmFibGUoIEFUOTFQU19UQyBwVGMsICAgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFRDIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBUQyBpbnRlcnJ1cHQgdG8gYmUgZW5hYmxlZCAqLw0KKyAgICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIFRDDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UQ19JbnRlcnJ1cHRFbmFibGUNCisvLyogXGJyaWVmIEVuYWJsZSBUQyBJbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UQ19JbnRlcnJ1cHRFbmFibGUoDQorICAgICAgICBBVDkxUFNfVEMgcFRjLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBUQyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgVEMgaW50ZXJydXB0IHRvIGJlIGVuYWJsZWQNCiB7DQotICAgIHBUYy0+VENfSUVSID0gZmxhZzsNCisgICAgICAgIHBUYy0+VENfSUVSID0gZmxhZzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVENfSW50ZXJydXB0RGlzYWJsZSAqLw0KLS8qKiBcYnJpZWYgRGlzYWJsZSBUQyBJbnRlcnJ1cHQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9UQ19JbnRlcnJ1cHREaXNhYmxlKCBBVDkxUFNfVEMgcFRjLCAgICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBUQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIFxhcmcgIFRDIGludGVycnVwdCB0byBiZSBkaXNhYmxlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RDX0ludGVycnVwdERpc2FibGUNCisvLyogXGJyaWVmIERpc2FibGUgVEMgSW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVENfSW50ZXJydXB0RGlzYWJsZSgNCisgICAgICAgIEFUOTFQU19UQyBwVGMsICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFRDIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBUQyBpbnRlcnJ1cHQgdG8gYmUgZGlzYWJsZWQNCiB7DQotICAgIHBUYy0+VENfSURSID0gZmxhZzsNCisgICAgICAgIHBUYy0+VENfSURSID0gZmxhZzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVENfR2V0SW50ZXJydXB0TWFza1N0YXR1cyAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIFRDIEludGVycnVwdCBNYXNrIFN0YXR1cyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVENfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLyogXHJldHVybiBUQyBJbnRlcnJ1cHQgTWFzayBTdGF0dXMgKi8NCi0gICAgQVQ5MVBTX1RDIHBUYyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFRDIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gVEMgSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9UQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCAvLyBccmV0dXJuIFRDIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKyAgICAgICAgQVQ5MVBTX1RDIHBUYykgLy8gXGFyZyAgcG9pbnRlciB0byBhIFRDIGNvbnRyb2xsZXINCiB7DQotICAgIHJldHVybiBwVGMtPlRDX0lNUjsNCisgICAgICAgIHJldHVybiBwVGMtPlRDX0lNUjsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVENfSXNJbnRlcnJ1cHRNYXNrZWQgKi8NCi0vKiogXGJyaWVmIFRlc3QgaWYgVEMgSW50ZXJydXB0IGlzIE1hc2tlZCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSBpbnQgQVQ5MUZfVENfSXNJbnRlcnJ1cHRNYXNrZWQoIEFUOTFQU19UQyBwVGMsICAgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIFRDIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UQ19Jc0ludGVycnVwdE1hc2tlZA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBUQyBJbnRlcnJ1cHQgaXMgTWFza2VkDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIGludCBBVDkxRl9UQ19Jc0ludGVycnVwdE1hc2tlZCgNCisgICAgICAgIEFUOTFQU19UQyBwVGMsICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFRDIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KIHsNCi0gICAgcmV0dXJuKCBBVDkxRl9UQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCBwVGMgKSAmIGZsYWcgKTsNCisgICAgICAgIHJldHVybiAoQVQ5MUZfVENfR2V0SW50ZXJydXB0TWFza1N0YXR1cyhwVGMpICYgZmxhZyk7DQogfQ0KIA0KIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotKiAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgQ0FODQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0jZGVmaW5lIFNUQU5EQVJEX0ZPUk1BVCAgICAwDQotI2RlZmluZSBFWFRFTkRFRF9GT1JNQVQgICAgMQ0KKyAgICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIENBTg0KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorI2RlZmluZQlTVEFOREFSRF9GT1JNQVQgMA0KKyNkZWZpbmUJRVhURU5ERURfRk9STUFUIDENCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9Jbml0TWFpbGJveFJlZ2lzdGVycygpICovDQotLyoqIFxicmllZiBDb25maWd1cmUgdGhlIGNvcnJlc3BvbmRpbmcgbWFpbGJveCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0luaXRNYWlsYm94UmVnaXN0ZXJzKCBBVDkxUFNfQ0FOX01CIENBTl9NYWlsYm94LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtb2RlX3JlZywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWNjZXB0YW5jZV9tYXNrX3JlZywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaWRfcmVnLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkYXRhX2xvd19yZWcsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRhdGFfaGlnaF9yZWcsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbnRyb2xfcmVnICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9Jbml0TWFpbGJveFJlZ2lzdGVycygpDQorLy8qIFxicmllZiBDb25maWd1cmUgdGhlIGNvcnJlc3BvbmRpbmcgbWFpbGJveA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0luaXRNYWlsYm94UmVnaXN0ZXJzKEFUOTFQU19DQU5fTUIJQ0FOX01haWxib3gsDQorCQkJCQkJCQlpbnQgIAkJCW1vZGVfcmVnLA0KKwkJCQkJCQkJaW50IAkJCWFjY2VwdGFuY2VfbWFza19yZWcsDQorCQkJCQkJCQlpbnQgIAkJCWlkX3JlZywNCisJCQkJCQkJCWludCAgCQkJZGF0YV9sb3dfcmVnLA0KKwkJCQkJCQkJaW50ICAJCQlkYXRhX2hpZ2hfcmVnLA0KKwkJCQkJCQkJaW50ICAJCQljb250cm9sX3JlZykNCiB7DQotICAgIENBTl9NYWlsYm94LT5DQU5fTUJfTUNSID0gMHgwOw0KLSAgICBDQU5fTWFpbGJveC0+Q0FOX01CX01NUiA9IG1vZGVfcmVnOw0KLSAgICBDQU5fTWFpbGJveC0+Q0FOX01CX01BTSA9IGFjY2VwdGFuY2VfbWFza19yZWc7DQotICAgIENBTl9NYWlsYm94LT5DQU5fTUJfTUlEID0gaWRfcmVnOw0KLSAgICBDQU5fTWFpbGJveC0+Q0FOX01CX01ETCA9IGRhdGFfbG93X3JlZzsNCi0gICAgQ0FOX01haWxib3gtPkNBTl9NQl9NREggPSBkYXRhX2hpZ2hfcmVnOw0KLSAgICBDQU5fTWFpbGJveC0+Q0FOX01CX01DUiA9IGNvbnRyb2xfcmVnOw0KKwlDQU5fTWFpbGJveC0+Q0FOX01CX01DUiAJPSAweDA7DQorCUNBTl9NYWlsYm94LT5DQU5fTUJfTU1SIAk9IG1vZGVfcmVnOw0KKwlDQU5fTWFpbGJveC0+Q0FOX01CX01BTSAJPSBhY2NlcHRhbmNlX21hc2tfcmVnOw0KKwlDQU5fTWFpbGJveC0+Q0FOX01CX01JRCAJPSBpZF9yZWc7DQorCUNBTl9NYWlsYm94LT5DQU5fTUJfTURMIAk9IGRhdGFfbG93X3JlZzsgCQkNCisJQ0FOX01haWxib3gtPkNBTl9NQl9NREggCT0gZGF0YV9oaWdoX3JlZzsNCisJQ0FOX01haWxib3gtPkNBTl9NQl9NQ1IgCT0gY29udHJvbF9yZWc7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0VuYWJsZUNBTigpICovDQotLyoqIFxicmllZiAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0VuYWJsZUNBTiggQVQ5MVBTX0NBTiBwQ0FOICkgLyogcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfRW5hYmxlQ0FOKCkNCisvLyogXGJyaWVmDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfRW5hYmxlQ0FOKA0KKwlBVDkxUFNfQ0FOIHBDQU4pICAgICAvLyBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXINCiB7DQotICAgIHBDQU4tPkNBTl9NUiB8PSBBVDkxQ19DQU5fQ0FORU47DQorCXBDQU4tPkNBTl9NUiB8PSBBVDkxQ19DQU5fQ0FORU47DQogDQotICAgIC8qIFdhaXQgZm9yIFdBS0VVUCBmbGFnIHJhaXNpbmcgPD0+IDExLXJlY2Vzc2l2ZS1iaXQgd2VyZSBzY2FubmVkIGJ5IHRoZSB0cmFuc2NlaXZlciAqLw0KLSAgICB3aGlsZSggKCBwQ0FOLT5DQU5fU1IgJiBBVDkxQ19DQU5fV0FLRVVQICkgIT0gQVQ5MUNfQ0FOX1dBS0VVUCApDQotICAgIHsNCi0gICAgfQ0KKwkvLyBXYWl0IGZvciBXQUtFVVAgZmxhZyByYWlzaW5nIDw9PiAxMS1yZWNlc3NpdmUtYml0IHdlcmUgc2Nhbm5lZCBieSB0aGUgdHJhbnNjZWl2ZXINCisJd2hpbGUoIChwQ0FOLT5DQU5fU1IgJiBBVDkxQ19DQU5fV0FLRVVQKSAhPSBBVDkxQ19DQU5fV0FLRVVQICk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0Rpc2FibGVDQU4oKSAqLw0KLS8qKiBcYnJpZWYgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9EaXNhYmxlQ0FOKCBBVDkxUFNfQ0FOIHBDQU4gKSAvKiBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9EaXNhYmxlQ0FOKCkNCisvLyogXGJyaWVmDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfRGlzYWJsZUNBTigNCisJQVQ5MVBTX0NBTiBwQ0FOKSAgICAgLy8gcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyDQogew0KLSAgICBwQ0FOLT5DQU5fTVIgJj0gfkFUOTFDX0NBTl9DQU5FTjsNCisJcENBTi0+Q0FOX01SICY9IH5BVDkxQ19DQU5fQ0FORU47DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0NBTl9FbmFibGVJdCAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIENBTiBpbnRlcnJ1cHQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9DQU5fRW5hYmxlSXQoIEFUOTFQU19DQU4gcENBTiwgICAgLyogcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogSVQgdG8gYmUgZW5hYmxlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9FbmFibGVJdA0KKy8vKiBcYnJpZWYgRW5hYmxlIENBTiBpbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9DQU5fRW5hYmxlSXQgKA0KKwlBVDkxUFNfQ0FOIHBDQU4sICAgICAvLyBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGZsYWcpICAgLy8gSVQgdG8gYmUgZW5hYmxlZA0KIHsNCi0gICAgLyoqIFdyaXRlIHRvIHRoZSBJRVIgcmVnaXN0ZXIgKi8NCi0gICAgcENBTi0+Q0FOX0lFUiA9IGZsYWc7DQorCS8vKiBXcml0ZSB0byB0aGUgSUVSIHJlZ2lzdGVyDQorCXBDQU4tPkNBTl9JRVIgPSBmbGFnOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9DQU5fRGlzYWJsZUl0ICovDQotLyoqIFxicmllZiBEaXNhYmxlIENBTiBpbnRlcnJ1cHQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9DQU5fRGlzYWJsZUl0KCBBVDkxUFNfQ0FOIHBDQU4sICAgIC8qIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBJVCB0byBiZSBkaXNhYmxlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9EaXNhYmxlSXQNCisvLyogXGJyaWVmIERpc2FibGUgQ0FOIGludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0NBTl9EaXNhYmxlSXQgKA0KKwlBVDkxUFNfQ0FOIHBDQU4sIC8vIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgLy8gSVQgdG8gYmUgZGlzYWJsZWQNCiB7DQotICAgIC8qKiBXcml0ZSB0byB0aGUgSURSIHJlZ2lzdGVyICovDQotICAgIHBDQU4tPkNBTl9JRFIgPSBmbGFnOw0KKwkvLyogV3JpdGUgdG8gdGhlIElEUiByZWdpc3Rlcg0KKwlwQ0FOLT5DQU5fSURSID0gZmxhZzsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQ0FOX0dldFN0YXR1cyAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIENBTiBJbnRlcnJ1cHQgU3RhdHVzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fR2V0U3RhdHVzKCAvKiBccmV0dXJuIENBTiBJbnRlcnJ1cHQgU3RhdHVzICovDQotICAgIEFUOTFQU19DQU4gcENBTiApICAgICAgICAgICAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9HZXRTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBDQU4gSW50ZXJydXB0IFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0FOX0dldFN0YXR1cyggLy8gXHJldHVybiBDQU4gSW50ZXJydXB0IFN0YXR1cw0KKwlBVDkxUFNfQ0FOIHBDQU4pIC8vIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlcg0KIHsNCi0gICAgcmV0dXJuIHBDQU4tPkNBTl9TUjsNCisJcmV0dXJuIHBDQU4tPkNBTl9TUjsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQ0FOX0dldEludGVycnVwdE1hc2tTdGF0dXMgKi8NCi0vKiogXGJyaWVmIFJldHVybiBDQU4gSW50ZXJydXB0IE1hc2sgU3RhdHVzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLyogXHJldHVybiBDQU4gSW50ZXJydXB0IE1hc2sgU3RhdHVzICovDQotICAgIEFUOTFQU19DQU4gcENBTiApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fR2V0SW50ZXJydXB0TWFza1N0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIENBTiBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NBTl9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCAvLyBccmV0dXJuIENBTiBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisJQVQ5MVBTX0NBTiBwQ0FOKSAvLyBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXINCiB7DQotICAgIHJldHVybiBwQ0FOLT5DQU5fSU1SOw0KKwlyZXR1cm4gcENBTi0+Q0FOX0lNUjsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQ0FOX0lzSW50ZXJydXB0TWFza2VkICovDQotLyoqIFxicmllZiBUZXN0IGlmIENBTiBJbnRlcnJ1cHQgaXMgTWFza2VkICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fSXNJbnRlcnJ1cHRNYXNrZWQoIEFUOTFQU19DQU4gcENBTiwgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9Jc0ludGVycnVwdE1hc2tlZA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBDQU4gSW50ZXJydXB0IGlzIE1hc2tlZA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0FOX0lzSW50ZXJydXB0TWFza2VkKA0KKyAgICAgICAgQVQ5MVBTX0NBTiBwQ0FOLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQogew0KLSAgICByZXR1cm4oIEFUOTFGX0NBTl9HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCBwQ0FOICkgJiBmbGFnICk7DQorCXJldHVybiAoQVQ5MUZfQ0FOX0dldEludGVycnVwdE1hc2tTdGF0dXMocENBTikgJiBmbGFnKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQ0FOX0lzU3RhdHVzU2V0ICovDQotLyoqIFxicmllZiBUZXN0IGlmIENBTiBJbnRlcnJ1cHQgaXMgU2V0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fSXNTdGF0dXNTZXQoIEFUOTFQU19DQU4gcENBTiwgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9Jc1N0YXR1c1NldA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBDQU4gSW50ZXJydXB0IGlzIFNldA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0FOX0lzU3RhdHVzU2V0KA0KKyAgICAgICAgQVQ5MVBTX0NBTiBwQ0FOLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQogew0KLSAgICByZXR1cm4oIEFUOTFGX0NBTl9HZXRTdGF0dXMoIHBDQU4gKSAmIGZsYWcgKTsNCisJcmV0dXJuIChBVDkxRl9DQU5fR2V0U3RhdHVzKHBDQU4pICYgZmxhZyk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0NBTl9DZmdNb2RlUmVnICovDQotLyoqIFxicmllZiBDb25maWd1cmUgdGhlIE1vZGUgUmVnaXN0ZXIgb2YgdGhlIENBTiBjb250cm9sbGVyICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQ0FOX0NmZ01vZGVSZWcoIEFUOTFQU19DQU4gcENBTiwgICAgLyogcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1vZGUgKSAvKiBtb2RlIHJlZ2lzdGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0NmZ01vZGVSZWcNCisvLyogXGJyaWVmIENvbmZpZ3VyZSB0aGUgTW9kZSBSZWdpc3RlciBvZiB0aGUgQ0FOIGNvbnRyb2xsZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9DQU5fQ2ZnTW9kZVJlZyAoDQorCUFUOTFQU19DQU4gcENBTiwgLy8gcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBtb2RlKSAgICAgICAgLy8gbW9kZSByZWdpc3Rlcg0KIHsNCi0gICAgLyoqIFdyaXRlIHRvIHRoZSBNUiByZWdpc3RlciAqLw0KLSAgICBwQ0FOLT5DQU5fTVIgPSBtb2RlOw0KKwkvLyogV3JpdGUgdG8gdGhlIE1SIHJlZ2lzdGVyDQorCXBDQU4tPkNBTl9NUiA9IG1vZGU7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0NBTl9HZXRNb2RlUmVnICovDQotLyoqIFxicmllZiBSZXR1cm4gdGhlIE1vZGUgUmVnaXN0ZXIgb2YgdGhlIENBTiBjb250cm9sbGVyIHZhbHVlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fR2V0TW9kZVJlZyggQVQ5MVBTX0NBTiBwQ0FOIC8qIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9HZXRNb2RlUmVnDQorLy8qIFxicmllZiBSZXR1cm4gdGhlIE1vZGUgUmVnaXN0ZXIgb2YgdGhlIENBTiBjb250cm9sbGVyIHZhbHVlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fR2V0TW9kZVJlZyAoDQorCUFUOTFQU19DQU4gcENBTiAvLyBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXINCisJKQ0KIHsNCi0gICAgcmV0dXJuIHBDQU4tPkNBTl9NUjsNCisJcmV0dXJuIHBDQU4tPkNBTl9NUjsJDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0NBTl9DZmdCYXVkcmF0ZVJlZyAqLw0KLS8qKiBcYnJpZWYgQ29uZmlndXJlIHRoZSBCYXVkcmF0ZSBvZiB0aGUgQ0FOIGNvbnRyb2xsZXIgZm9yIHRoZSBuZXR3b3JrICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQ0FOX0NmZ0JhdWRyYXRlUmVnKCBBVDkxUFNfQ0FOIHBDQU4sIC8qIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYmF1ZHJhdGVfY2ZnICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fQ2ZnQmF1ZHJhdGVSZWcNCisvLyogXGJyaWVmIENvbmZpZ3VyZSB0aGUgQmF1ZHJhdGUgb2YgdGhlIENBTiBjb250cm9sbGVyIGZvciB0aGUgbmV0d29yaw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0NBTl9DZmdCYXVkcmF0ZVJlZyAoDQorCUFUOTFQU19DQU4gcENBTiwgLy8gcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBiYXVkcmF0ZV9jZmcpDQogew0KLSAgICAvKiogV3JpdGUgdG8gdGhlIEJSIHJlZ2lzdGVyICovDQotICAgIHBDQU4tPkNBTl9CUiA9IGJhdWRyYXRlX2NmZzsNCisJLy8qIFdyaXRlIHRvIHRoZSBCUiByZWdpc3Rlcg0KKwlwQ0FOLT5DQU5fQlIgPSBiYXVkcmF0ZV9jZmc7CQ0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9DQU5fR2V0QmF1ZHJhdGUgKi8NCi0vKiogXGJyaWVmIFJldHVybiB0aGUgQmF1ZHJhdGUgb2YgdGhlIENBTiBjb250cm9sbGVyIGZvciB0aGUgbmV0d29yayB2YWx1ZSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0FOX0dldEJhdWRyYXRlKCBBVDkxUFNfQ0FOIHBDQU4gLyogcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9HZXRCYXVkcmF0ZQ0KKy8vKiBcYnJpZWYgUmV0dXJuIHRoZSBCYXVkcmF0ZSBvZiB0aGUgQ0FOIGNvbnRyb2xsZXIgZm9yIHRoZSBuZXR3b3JrIHZhbHVlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fR2V0QmF1ZHJhdGUgKA0KKwlBVDkxUFNfQ0FOIHBDQU4gLy8gcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyDQorCSkNCiB7DQotICAgIHJldHVybiBwQ0FOLT5DQU5fQlI7DQorCXJldHVybiBwQ0FOLT5DQU5fQlI7CQ0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9DQU5fR2V0SW50ZXJuYWxDb3VudGVyICovDQotLyoqIFxicmllZiBSZXR1cm4gQ0FOIFRpbWVyIFJlZ3NpdGVyIFZhbHVlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fR2V0SW50ZXJuYWxDb3VudGVyKCBBVDkxUFNfQ0FOIHBDQU4gLyogcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fR2V0SW50ZXJuYWxDb3VudGVyDQorLy8qIFxicmllZiBSZXR1cm4gQ0FOIFRpbWVyIFJlZ3NpdGVyIFZhbHVlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fR2V0SW50ZXJuYWxDb3VudGVyICgNCisJQVQ5MVBTX0NBTiBwQ0FOIC8vIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlcg0KKwkpDQogew0KLSAgICByZXR1cm4gcENBTi0+Q0FOX1RJTTsNCisJcmV0dXJuIHBDQU4tPkNBTl9USU07CQ0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9DQU5fR2V0VGltZXN0YW1wICovDQotLyoqIFxicmllZiBSZXR1cm4gQ0FOIFRpbWVzdGFtcCBSZWdpc3RlciBWYWx1ZSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0FOX0dldFRpbWVzdGFtcCggQVQ5MVBTX0NBTiBwQ0FOIC8qIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0dldFRpbWVzdGFtcA0KKy8vKiBcYnJpZWYgUmV0dXJuIENBTiBUaW1lc3RhbXAgUmVnaXN0ZXIgVmFsdWUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NBTl9HZXRUaW1lc3RhbXAgKA0KKwlBVDkxUFNfQ0FOIHBDQU4gLy8gcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyDQorCSkNCiB7DQotICAgIHJldHVybiBwQ0FOLT5DQU5fVElNRVNUUDsNCisJcmV0dXJuIHBDQU4tPkNBTl9USU1FU1RQOwkNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQ0FOX0dldEVycm9yQ291bnRlciAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIENBTiBFcnJvciBDb3VudGVyIFJlZ2lzdGVyIFZhbHVlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fR2V0RXJyb3JDb3VudGVyKCBBVDkxUFNfQ0FOIHBDQU4gLyogcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fR2V0RXJyb3JDb3VudGVyDQorLy8qIFxicmllZiBSZXR1cm4gQ0FOIEVycm9yIENvdW50ZXIgUmVnaXN0ZXIgVmFsdWUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NBTl9HZXRFcnJvckNvdW50ZXIgKA0KKwlBVDkxUFNfQ0FOIHBDQU4gLy8gcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyDQorCSkNCiB7DQotICAgIHJldHVybiBwQ0FOLT5DQU5fRUNSOw0KKwlyZXR1cm4gcENBTi0+Q0FOX0VDUjsJDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0NBTl9Jbml0VHJhbnNmZXJSZXF1ZXN0ICovDQotLyoqIFxicmllZiBSZXF1ZXN0IGZvciBhIHRyYW5zZmVyIG9uIHRoZSBjb3JyZXNwb25kaW5nIG1haWxib3hlcyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0NBTl9Jbml0VHJhbnNmZXJSZXF1ZXN0KCBBVDkxUFNfQ0FOIHBDQU4sIC8qIHBvaW50ZXIgdG8gYSBDQU4gY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB0cmFuc2Zlcl9jbWQgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9Jbml0VHJhbnNmZXJSZXF1ZXN0DQorLy8qIFxicmllZiBSZXF1ZXN0IGZvciBhIHRyYW5zZmVyIG9uIHRoZSBjb3JyZXNwb25kaW5nIG1haWxib3hlcw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0NBTl9Jbml0VHJhbnNmZXJSZXF1ZXN0ICgNCisJQVQ5MVBTX0NBTiBwQ0FOLCAvLyBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXINCisgICAgdW5zaWduZWQgaW50IHRyYW5zZmVyX2NtZCkNCiB7DQotICAgIHBDQU4tPkNBTl9UQ1IgPSB0cmFuc2Zlcl9jbWQ7DQorCXBDQU4tPkNBTl9UQ1IgPSB0cmFuc2Zlcl9jbWQ7CQ0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9DQU5fSW5pdEFib3J0UmVxdWVzdCAqLw0KLS8qKiBcYnJpZWYgQWJvcnQgdGhlIGNvcnJlc3BvbmRpbmcgbWFpbGJveGVzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQ0FOX0luaXRBYm9ydFJlcXVlc3QoIEFUOTFQU19DQU4gcENBTiwgLyogcG9pbnRlciB0byBhIENBTiBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGFib3J0X2NtZCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0luaXRBYm9ydFJlcXVlc3QNCisvLyogXGJyaWVmIEFib3J0IHRoZSBjb3JyZXNwb25kaW5nIG1haWxib3hlcw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0NBTl9Jbml0QWJvcnRSZXF1ZXN0ICgNCisJQVQ5MVBTX0NBTiBwQ0FOLCAvLyBwb2ludGVyIHRvIGEgQ0FOIGNvbnRyb2xsZXINCisgICAgdW5zaWduZWQgaW50IGFib3J0X2NtZCkNCiB7DQotICAgIHBDQU4tPkNBTl9BQ1IgPSBhYm9ydF9jbWQ7DQorCXBDQU4tPkNBTl9BQ1IgPSBhYm9ydF9jbWQ7CQ0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9DQU5fQ2ZnTWVzc2FnZU1vZGVSZWcgKi8NCi0vKiogXGJyaWVmIFByb2dyYW0gdGhlIE1lc3NhZ2UgTW9kZSBSZWdpc3RlciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0NBTl9DZmdNZXNzYWdlTW9kZVJlZyggQVQ5MVBTX0NBTl9NQiBDQU5fTWFpbGJveCwgLyogcG9pbnRlciB0byBhIENBTiBNYWlsYm94ICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtb2RlICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fQ2ZnTWVzc2FnZU1vZGVSZWcNCisvLyogXGJyaWVmIFByb2dyYW0gdGhlIE1lc3NhZ2UgTW9kZSBSZWdpc3Rlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0NBTl9DZmdNZXNzYWdlTW9kZVJlZyAoDQorCUFUOTFQU19DQU5fTUIJQ0FOX01haWxib3gsIC8vIHBvaW50ZXIgdG8gYSBDQU4gTWFpbGJveA0KKyAgICB1bnNpZ25lZCBpbnQgbW9kZSkNCiB7DQotICAgIENBTl9NYWlsYm94LT5DQU5fTUJfTU1SID0gbW9kZTsNCisJQ0FOX01haWxib3gtPkNBTl9NQl9NTVIgPSBtb2RlOwkNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQ0FOX0dldE1lc3NhZ2VNb2RlUmVnICovDQotLyoqIFxicmllZiBSZXR1cm4gdGhlIE1lc3NhZ2UgTW9kZSBSZWdpc3RlciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0FOX0dldE1lc3NhZ2VNb2RlUmVnKCBBVDkxUFNfQ0FOX01CIENBTl9NYWlsYm94ICkgLyogcG9pbnRlciB0byBhIENBTiBNYWlsYm94ICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0dldE1lc3NhZ2VNb2RlUmVnDQorLy8qIFxicmllZiBSZXR1cm4gdGhlIE1lc3NhZ2UgTW9kZSBSZWdpc3Rlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0FOX0dldE1lc3NhZ2VNb2RlUmVnICgNCisJQVQ5MVBTX0NBTl9NQglDQU5fTWFpbGJveCkgLy8gcG9pbnRlciB0byBhIENBTiBNYWlsYm94DQogew0KLSAgICByZXR1cm4gQ0FOX01haWxib3gtPkNBTl9NQl9NTVI7DQorCXJldHVybiBDQU5fTWFpbGJveC0+Q0FOX01CX01NUjsJDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0NBTl9DZmdNZXNzYWdlSURSZWcgKi8NCi0vKiogXGJyaWVmIFByb2dyYW0gdGhlIE1lc3NhZ2UgSUQgUmVnaXN0ZXIgKi8NCi0vKiogXGJyaWVmIFZlcnNpb24gPT0gMCBmb3IgU3RhbmRhcmQgbWVzc3NhZ2UsIFZlcnNpb24gPT0gMSBmb3IgRXh0ZW5kZWQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9DQU5fQ2ZnTWVzc2FnZUlEUmVnKCBBVDkxUFNfQ0FOX01CIENBTl9NYWlsYm94LCAvKiBwb2ludGVyIHRvIGEgQ0FOIE1haWxib3ggKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpZCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgdmVyc2lvbiApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0NmZ01lc3NhZ2VJRFJlZw0KKy8vKiBcYnJpZWYgUHJvZ3JhbSB0aGUgTWVzc2FnZSBJRCBSZWdpc3Rlcg0KKy8vKiBcYnJpZWYgVmVyc2lvbiA9PSAwIGZvciBTdGFuZGFyZCBtZXNzc2FnZSwgVmVyc2lvbiA9PSAxIGZvciBFeHRlbmRlZA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0NBTl9DZmdNZXNzYWdlSURSZWcgKA0KKwlBVDkxUFNfQ0FOX01CCUNBTl9NYWlsYm94LCAvLyBwb2ludGVyIHRvIGEgQ0FOIE1haWxib3gNCisgICAgdW5zaWduZWQgaW50IGlkLA0KKyAgICB1bnNpZ25lZCBjaGFyIHZlcnNpb24pDQogew0KLSAgICBpZiggdmVyc2lvbiA9PSAwICkgLyogSUR2QSBTdGFuZGFyZCBGb3JtYXQgKi8NCi0gICAgew0KLSAgICAgICAgQ0FOX01haWxib3gtPkNBTl9NQl9NSUQgPSBpZCA8PCAxODsNCi0gICAgfQ0KLSAgICBlbHNlIC8qIElEdkIgRXh0ZW5kZWQgRm9ybWF0ICovDQotICAgIHsNCi0gICAgICAgIENBTl9NYWlsYm94LT5DQU5fTUJfTUlEID0gaWQgfCAoIDEgPDwgMjkgKTsgLyogc2V0IE1JREUgYml0ICovDQotICAgIH0NCisJaWYodmVyc2lvbj09MCkJLy8gSUR2QSBTdGFuZGFyZCBGb3JtYXQNCisJCUNBTl9NYWlsYm94LT5DQU5fTUJfTUlEID0gaWQ8PDE4Ow0KKwllbHNlCS8vIElEdkIgRXh0ZW5kZWQgRm9ybWF0DQorCQlDQU5fTWFpbGJveC0+Q0FOX01CX01JRCA9IGlkIHwgKDE8PDI5KTsJLy8gc2V0IE1JREUgYml0DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0NBTl9HZXRNZXNzYWdlSURSZWcgKi8NCi0vKiogXGJyaWVmIFJldHVybiB0aGUgTWVzc2FnZSBJRCBSZWdpc3RlciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0FOX0dldE1lc3NhZ2VJRFJlZyggQVQ5MVBTX0NBTl9NQiBDQU5fTWFpbGJveCApIC8qIHBvaW50ZXIgdG8gYSBDQU4gTWFpbGJveCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9HZXRNZXNzYWdlSURSZWcNCisvLyogXGJyaWVmIFJldHVybiB0aGUgTWVzc2FnZSBJRCBSZWdpc3Rlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0FOX0dldE1lc3NhZ2VJRFJlZyAoDQorCUFUOTFQU19DQU5fTUIJQ0FOX01haWxib3gpIC8vIHBvaW50ZXIgdG8gYSBDQU4gTWFpbGJveA0KIHsNCi0gICAgcmV0dXJuIENBTl9NYWlsYm94LT5DQU5fTUJfTUlEOw0KKwlyZXR1cm4gQ0FOX01haWxib3gtPkNBTl9NQl9NSUQ7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0NBTl9DZmdNZXNzYWdlQWNjZXB0YW5jZU1hc2tSZWcgKi8NCi0vKiogXGJyaWVmIFByb2dyYW0gdGhlIE1lc3NhZ2UgQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQ0FOX0NmZ01lc3NhZ2VBY2NlcHRhbmNlTWFza1JlZyggQVQ5MVBTX0NBTl9NQiBDQU5fTWFpbGJveCwgLyogcG9pbnRlciB0byBhIENBTiBNYWlsYm94ICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbWFzayApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0NmZ01lc3NhZ2VBY2NlcHRhbmNlTWFza1JlZw0KKy8vKiBcYnJpZWYgUHJvZ3JhbSB0aGUgTWVzc2FnZSBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9DQU5fQ2ZnTWVzc2FnZUFjY2VwdGFuY2VNYXNrUmVnICgNCisJQVQ5MVBTX0NBTl9NQglDQU5fTWFpbGJveCwgLy8gcG9pbnRlciB0byBhIENBTiBNYWlsYm94DQorICAgIHVuc2lnbmVkIGludCBtYXNrKQ0KIHsNCi0gICAgQ0FOX01haWxib3gtPkNBTl9NQl9NQU0gPSBtYXNrOw0KKwlDQU5fTWFpbGJveC0+Q0FOX01CX01BTSA9IG1hc2s7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0NBTl9HZXRNZXNzYWdlQWNjZXB0YW5jZU1hc2tSZWcgKi8NCi0vKiogXGJyaWVmIFJldHVybiB0aGUgTWVzc2FnZSBBY2NlcHRhbmNlIE1hc2sgUmVnaXN0ZXIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NBTl9HZXRNZXNzYWdlQWNjZXB0YW5jZU1hc2tSZWcoIEFUOTFQU19DQU5fTUIgQ0FOX01haWxib3ggKSAvKiBwb2ludGVyIHRvIGEgQ0FOIE1haWxib3ggKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9DQU5fR2V0TWVzc2FnZUFjY2VwdGFuY2VNYXNrUmVnDQorLy8qIFxicmllZiBSZXR1cm4gdGhlIE1lc3NhZ2UgQWNjZXB0YW5jZSBNYXNrIFJlZ2lzdGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fR2V0TWVzc2FnZUFjY2VwdGFuY2VNYXNrUmVnICgNCisJQVQ5MVBTX0NBTl9NQglDQU5fTWFpbGJveCkgLy8gcG9pbnRlciB0byBhIENBTiBNYWlsYm94DQogew0KLSAgICByZXR1cm4gQ0FOX01haWxib3gtPkNBTl9NQl9NQU07DQorCXJldHVybiBDQU5fTWFpbGJveC0+Q0FOX01CX01BTTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQ0FOX0dldEZhbWlseUlEICovDQotLyoqIFxicmllZiBSZXR1cm4gdGhlIE1lc3NhZ2UgSUQgUmVnaXN0ZXIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NBTl9HZXRGYW1pbHlJRCggQVQ5MVBTX0NBTl9NQiBDQU5fTWFpbGJveCApIC8qIHBvaW50ZXIgdG8gYSBDQU4gTWFpbGJveCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9HZXRGYW1pbHlJRA0KKy8vKiBcYnJpZWYgUmV0dXJuIHRoZSBNZXNzYWdlIElEIFJlZ2lzdGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fR2V0RmFtaWx5SUQgKA0KKwlBVDkxUFNfQ0FOX01CCUNBTl9NYWlsYm94KSAvLyBwb2ludGVyIHRvIGEgQ0FOIE1haWxib3gNCiB7DQotICAgIHJldHVybiBDQU5fTWFpbGJveC0+Q0FOX01CX01GSUQ7DQorCXJldHVybiBDQU5fTWFpbGJveC0+Q0FOX01CX01GSUQ7CQ0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9DQU5fQ2ZnTWVzc2FnZUN0cmwgKi8NCi0vKiogXGJyaWVmIFJlcXVlc3QgYW5kIGNvbmZpZyBmb3IgYSB0cmFuc2ZlciBvbiB0aGUgY29ycmVzcG9uZGluZyBtYWlsYm94ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQ0FOX0NmZ01lc3NhZ2VDdHJsUmVnKCBBVDkxUFNfQ0FOX01CIENBTl9NYWlsYm94LCAvKiBwb2ludGVyIHRvIGEgQ0FOIE1haWxib3ggKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1lc3NhZ2VfY3RybF9jbWQgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9DZmdNZXNzYWdlQ3RybA0KKy8vKiBcYnJpZWYgUmVxdWVzdCBhbmQgY29uZmlnIGZvciBhIHRyYW5zZmVyIG9uIHRoZSBjb3JyZXNwb25kaW5nIG1haWxib3gNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9DQU5fQ2ZnTWVzc2FnZUN0cmxSZWcgKA0KKwlBVDkxUFNfQ0FOX01CCUNBTl9NYWlsYm94LCAvLyBwb2ludGVyIHRvIGEgQ0FOIE1haWxib3gNCisgICAgdW5zaWduZWQgaW50IG1lc3NhZ2VfY3RybF9jbWQpDQogew0KLSAgICBDQU5fTWFpbGJveC0+Q0FOX01CX01DUiA9IG1lc3NhZ2VfY3RybF9jbWQ7DQorCUNBTl9NYWlsYm94LT5DQU5fTUJfTUNSID0gbWVzc2FnZV9jdHJsX2NtZDsJDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0NBTl9HZXRNZXNzYWdlU3RhdHVzICovDQotLyoqIFxicmllZiBSZXR1cm4gQ0FOIE1haWxib3ggU3RhdHVzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fR2V0TWVzc2FnZVN0YXR1cyggQVQ5MVBTX0NBTl9NQiBDQU5fTWFpbGJveCApIC8qIHBvaW50ZXIgdG8gYSBDQU4gTWFpbGJveCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9HZXRNZXNzYWdlU3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gQ0FOIE1haWxib3ggU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9DQU5fR2V0TWVzc2FnZVN0YXR1cyAoDQorCUFUOTFQU19DQU5fTUIJQ0FOX01haWxib3gpIC8vIHBvaW50ZXIgdG8gYSBDQU4gTWFpbGJveA0KIHsNCi0gICAgcmV0dXJuIENBTl9NYWlsYm94LT5DQU5fTUJfTVNSOw0KKwlyZXR1cm4gQ0FOX01haWxib3gtPkNBTl9NQl9NU1I7CQ0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9DQU5fQ2ZnTWVzc2FnZURhdGFMb3cgKi8NCi0vKiogXGJyaWVmIFByb2dyYW0gZGF0YSBsb3cgdmFsdWUgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9DQU5fQ2ZnTWVzc2FnZURhdGFMb3coIEFUOTFQU19DQU5fTUIgQ0FOX01haWxib3gsIC8qIHBvaW50ZXIgdG8gYSBDQU4gTWFpbGJveCAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZGF0YSApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0NmZ01lc3NhZ2VEYXRhTG93DQorLy8qIFxicmllZiBQcm9ncmFtIGRhdGEgbG93IHZhbHVlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQ0FOX0NmZ01lc3NhZ2VEYXRhTG93ICgNCisJQVQ5MVBTX0NBTl9NQglDQU5fTWFpbGJveCwgLy8gcG9pbnRlciB0byBhIENBTiBNYWlsYm94DQorICAgIHVuc2lnbmVkIGludCBkYXRhKQ0KIHsNCi0gICAgQ0FOX01haWxib3gtPkNBTl9NQl9NREwgPSBkYXRhOw0KKwlDQU5fTWFpbGJveC0+Q0FOX01CX01ETCA9IGRhdGE7CQ0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9DQU5fR2V0TWVzc2FnZURhdGFMb3cgKi8NCi0vKiogXGJyaWVmIFJldHVybiBkYXRhIGxvdyB2YWx1ZSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0FOX0dldE1lc3NhZ2VEYXRhTG93KCBBVDkxUFNfQ0FOX01CIENBTl9NYWlsYm94ICkgLyogcG9pbnRlciB0byBhIENBTiBNYWlsYm94ICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0dldE1lc3NhZ2VEYXRhTG93DQorLy8qIFxicmllZiBSZXR1cm4gZGF0YSBsb3cgdmFsdWUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NBTl9HZXRNZXNzYWdlRGF0YUxvdyAoDQorCUFUOTFQU19DQU5fTUIJQ0FOX01haWxib3gpIC8vIHBvaW50ZXIgdG8gYSBDQU4gTWFpbGJveA0KIHsNCi0gICAgcmV0dXJuIENBTl9NYWlsYm94LT5DQU5fTUJfTURMOw0KKwlyZXR1cm4gQ0FOX01haWxib3gtPkNBTl9NQl9NREw7CQ0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9DQU5fQ2ZnTWVzc2FnZURhdGFIaWdoICovDQotLyoqIFxicmllZiBQcm9ncmFtIGRhdGEgaGlnaCB2YWx1ZSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0NBTl9DZmdNZXNzYWdlRGF0YUhpZ2goIEFUOTFQU19DQU5fTUIgQ0FOX01haWxib3gsIC8qIHBvaW50ZXIgdG8gYSBDQU4gTWFpbGJveCAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGRhdGEgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9DZmdNZXNzYWdlRGF0YUhpZ2gNCisvLyogXGJyaWVmIFByb2dyYW0gZGF0YSBoaWdoIHZhbHVlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQ0FOX0NmZ01lc3NhZ2VEYXRhSGlnaCAoDQorCUFUOTFQU19DQU5fTUIJQ0FOX01haWxib3gsIC8vIHBvaW50ZXIgdG8gYSBDQU4gTWFpbGJveA0KKyAgICB1bnNpZ25lZCBpbnQgZGF0YSkNCiB7DQotICAgIENBTl9NYWlsYm94LT5DQU5fTUJfTURIID0gZGF0YTsNCisJQ0FOX01haWxib3gtPkNBTl9NQl9NREggPSBkYXRhOwkNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQ0FOX0dldE1lc3NhZ2VEYXRhSGlnaCAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIGRhdGEgaGlnaCB2YWx1ZSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0FOX0dldE1lc3NhZ2VEYXRhSGlnaCggQVQ5MVBTX0NBTl9NQiBDQU5fTWFpbGJveCApIC8qIHBvaW50ZXIgdG8gYSBDQU4gTWFpbGJveCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9HZXRNZXNzYWdlRGF0YUhpZ2gNCisvLyogXGJyaWVmIFJldHVybiBkYXRhIGhpZ2ggdmFsdWUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NBTl9HZXRNZXNzYWdlRGF0YUhpZ2ggKA0KKwlBVDkxUFNfQ0FOX01CCUNBTl9NYWlsYm94KSAvLyBwb2ludGVyIHRvIGEgQ0FOIE1haWxib3gNCiB7DQotICAgIHJldHVybiBDQU5fTWFpbGJveC0+Q0FOX01CX01ESDsNCisJcmV0dXJuIENBTl9NYWlsYm94LT5DQU5fTUJfTURIOwkNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQ0FOX09wZW4gKi8NCi0vKiogXGJyaWVmIE9wZW4gYSBDQU4gUG9ydCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQ0FOX09wZW4oIGNvbnN0IHVuc2lnbmVkIGludCBudWxsICkgLyogXGFyZyAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0NBTl9PcGVuDQorLy8qIFxicmllZiBPcGVuIGEgQ0FOIFBvcnQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0NBTl9PcGVuICgNCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBudWxsKSAgLy8gXGFyZw0KIHsNCi0gICAgLyogTk9UIERFRklORUQgQVQgVEhJUyBNT01FTlQgKi8NCi0gICAgcmV0dXJuKCAwICk7DQorICAgICAgICAvKiBOT1QgREVGSU5FRCBBVCBUSElTIE1PTUVOVCAqLw0KKyAgICAgICAgcmV0dXJuICggMCApOw0KK30NCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIEFEQw0KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0VuYWJsZUl0DQorLy8qIFxicmllZiBFbmFibGUgQURDIGludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FEQ19FbmFibGVJdCAoDQorCUFUOTFQU19BREMgcEFEQywgICAgIC8vIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgICAvLyBJVCB0byBiZSBlbmFibGVkDQorew0KKwkvLyogV3JpdGUgdG8gdGhlIElFUiByZWdpc3Rlcg0KKwlwQURDLT5BRENfSUVSID0gZmxhZzsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0Rpc2FibGVJdA0KKy8vKiBcYnJpZWYgRGlzYWJsZSBBREMgaW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQURDX0Rpc2FibGVJdCAoDQorCUFUOTFQU19BREMgcEFEQywgLy8gcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAvLyBJVCB0byBiZSBkaXNhYmxlZA0KK3sNCisJLy8qIFdyaXRlIHRvIHRoZSBJRFIgcmVnaXN0ZXINCisJcEFEQy0+QURDX0lEUiA9IGZsYWc7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FEQ19HZXRTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBBREMgSW50ZXJydXB0IFN0YXR1cw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQURDX0dldFN0YXR1cyggLy8gXHJldHVybiBBREMgSW50ZXJydXB0IFN0YXR1cw0KKwlBVDkxUFNfQURDIHBBREMpIC8vIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlcg0KK3sNCisJcmV0dXJuIHBBREMtPkFEQ19TUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0dldEludGVycnVwdE1hc2tTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBBREMgSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLy8gXHJldHVybiBBREMgSW50ZXJydXB0IE1hc2sgU3RhdHVzDQorCUFUOTFQU19BREMgcEFEQykgLy8gcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorew0KKwlyZXR1cm4gcEFEQy0+QURDX0lNUjsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0lzSW50ZXJydXB0TWFza2VkDQorLy8qIFxicmllZiBUZXN0IGlmIEFEQyBJbnRlcnJ1cHQgaXMgTWFza2VkDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfSXNJbnRlcnJ1cHRNYXNrZWQoDQorICAgICAgICBBVDkxUFNfQURDIHBBREMsICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorCXJldHVybiAoQVQ5MUZfQURDX0dldEludGVycnVwdE1hc2tTdGF0dXMocEFEQykgJiBmbGFnKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0lzU3RhdHVzU2V0DQorLy8qIFxicmllZiBUZXN0IGlmIEFEQyBTdGF0dXMgaXMgU2V0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfSXNTdGF0dXNTZXQoDQorICAgICAgICBBVDkxUFNfQURDIHBBREMsICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZykgLy8gXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQNCit7DQorCXJldHVybiAoQVQ5MUZfQURDX0dldFN0YXR1cyhwQURDKSAmIGZsYWcpOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfQ2ZnTW9kZVJlZw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIHRoZSBNb2RlIFJlZ2lzdGVyIG9mIHRoZSBBREMgY29udHJvbGxlcg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FEQ19DZmdNb2RlUmVnICgNCisJQVQ5MVBTX0FEQyBwQURDLCAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IG1vZGUpICAgICAgICAvLyBtb2RlIHJlZ2lzdGVyDQorew0KKwkvLyogV3JpdGUgdG8gdGhlIE1SIHJlZ2lzdGVyDQorCXBBREMtPkFEQ19NUiA9IG1vZGU7DQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FEQ19HZXRNb2RlUmVnDQorLy8qIFxicmllZiBSZXR1cm4gdGhlIE1vZGUgUmVnaXN0ZXIgb2YgdGhlIEFEQyBjb250cm9sbGVyIHZhbHVlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0TW9kZVJlZyAoDQorCUFUOTFQU19BREMgcEFEQyAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcmV0dXJuIHBBREMtPkFEQ19NUjsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FEQ19DZmdUaW1pbmdzDQorLy8qIFxicmllZiBDb25maWd1cmUgdGhlIGRpZmZlcmVudCBuZWNlc3NhcnkgdGltaW5ncyBvZiB0aGUgQURDIGNvbnRyb2xsZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BRENfQ2ZnVGltaW5ncyAoDQorCUFUOTFQU19BREMgcEFEQywgLy8gcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBtY2tfY2xvY2ssIC8vIGluIE1Ieg0KKwl1bnNpZ25lZCBpbnQgYWRjX2Nsb2NrLCAvLyBpbiBNSHoNCisJdW5zaWduZWQgaW50IHN0YXJ0dXBfdGltZSwgLy8gaW4gdXMNCisJdW5zaWduZWQgaW50IHNhbXBsZV9hbmRfaG9sZF90aW1lKQkvLyBpbiBucw0KK3sNCisJdW5zaWduZWQgaW50IHByZXNjYWwsc3RhcnR1cCxzaHRpbTsNCisJDQorCXByZXNjYWwgPSBtY2tfY2xvY2svKDIqYWRjX2Nsb2NrKSAtIDE7DQorCXN0YXJ0dXAgPSBhZGNfY2xvY2sqc3RhcnR1cF90aW1lLzggLSAxOw0KKwlzaHRpbSA9IGFkY19jbG9jaypzYW1wbGVfYW5kX2hvbGRfdGltZS8xMDAwIC0gMTsNCisJDQorCS8vKiBXcml0ZSB0byB0aGUgTVIgcmVnaXN0ZXINCisJcEFEQy0+QURDX01SID0gKCAocHJlc2NhbDw8OCkgJiBBVDkxQ19BRENfUFJFU0NBTCkgfCAoIChzdGFydHVwPDwxNikgJiBBVDkxQ19BRENfU1RBUlRVUCkgfCAoIChzaHRpbTw8MjQpICYgQVQ5MUNfQURDX1NIVElNKTsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0VuYWJsZUNoYW5uZWwNCisvLyogXGJyaWVmIFJldHVybiBBREMgVGltZXIgUmVnaXN0ZXIgVmFsdWUNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BRENfRW5hYmxlQ2hhbm5lbCAoDQorCUFUOTFQU19BREMgcEFEQywgLy8gcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBjaGFubmVsKSAgICAgICAgLy8gbW9kZSByZWdpc3Rlcg0KK3sNCisJLy8qIFdyaXRlIHRvIHRoZSBDSEVSIHJlZ2lzdGVyDQorCXBBREMtPkFEQ19DSEVSID0gY2hhbm5lbDsNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0Rpc2FibGVDaGFubmVsDQorLy8qIFxicmllZiBSZXR1cm4gQURDIFRpbWVyIFJlZ2lzdGVyIFZhbHVlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQURDX0Rpc2FibGVDaGFubmVsICgNCisJQVQ5MVBTX0FEQyBwQURDLCAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IGNoYW5uZWwpICAgICAgICAvLyBtb2RlIHJlZ2lzdGVyDQorew0KKwkvLyogV3JpdGUgdG8gdGhlIENIRFIgcmVnaXN0ZXINCisJcEFEQy0+QURDX0NIRFIgPSBjaGFubmVsOw0KK30NCisNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfR2V0Q2hhbm5lbFN0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIEFEQyBUaW1lciBSZWdpc3RlciBWYWx1ZQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQURDX0dldENoYW5uZWxTdGF0dXMgKA0KKwlBVDkxUFNfQURDIHBBREMgLy8gcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorCSkNCit7DQorCXJldHVybiBwQURDLT5BRENfQ0hTUjsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FEQ19TdGFydENvbnZlcnNpb24NCisvLyogXGJyaWVmIFNvZnR3YXJlIHJlcXVlc3QgZm9yIGEgYW5hbG9nIHRvIGRpZ2l0YWwgY29udmVyc2lvbg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FEQ19TdGFydENvbnZlcnNpb24gKA0KKwlBVDkxUFNfQURDIHBBREMgLy8gcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyDQorCSkNCit7DQorCXBBREMtPkFEQ19DUiA9IEFUOTFDX0FEQ19TVEFSVDsJDQorfQ0KKw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FEQ19Tb2Z0UmVzZXQNCisvLyogXGJyaWVmIFNvZnR3YXJlIHJlc2V0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQURDX1NvZnRSZXNldCAoDQorCUFUOTFQU19BREMgcEFEQyAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcEFEQy0+QURDX0NSID0gQVQ5MUNfQURDX1NXUlNUOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0dldExhc3RDb252ZXJ0ZWREYXRhDQorLy8qIFxicmllZiBSZXR1cm4gdGhlIExhc3QgQ29udmVydGVkIERhdGENCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRMYXN0Q29udmVydGVkRGF0YSAoDQorCUFUOTFQU19BREMgcEFEQyAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcmV0dXJuIHBBREMtPkFEQ19MQ0RSOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDANCisvLyogXGJyaWVmIFJldHVybiB0aGUgQ2hhbm5lbCAwIENvbnZlcnRlZCBEYXRhDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNIMCAoDQorCUFUOTFQU19BREMgcEFEQyAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcmV0dXJuIHBBREMtPkFEQ19DRFIwOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDENCisvLyogXGJyaWVmIFJldHVybiB0aGUgQ2hhbm5lbCAxIENvbnZlcnRlZCBEYXRhDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNIMSAoDQorCUFUOTFQU19BREMgcEFEQyAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcmV0dXJuIHBBREMtPkFEQ19DRFIxOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDINCisvLyogXGJyaWVmIFJldHVybiB0aGUgQ2hhbm5lbCAyIENvbnZlcnRlZCBEYXRhDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNIMiAoDQorCUFUOTFQU19BREMgcEFEQyAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcmV0dXJuIHBBREMtPkFEQ19DRFIyOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDMNCisvLyogXGJyaWVmIFJldHVybiB0aGUgQ2hhbm5lbCAzIENvbnZlcnRlZCBEYXRhDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNIMyAoDQorCUFUOTFQU19BREMgcEFEQyAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcmV0dXJuIHBBREMtPkFEQ19DRFIzOwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDQNCisvLyogXGJyaWVmIFJldHVybiB0aGUgQ2hhbm5lbCA0IENvbnZlcnRlZCBEYXRhDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNINCAoDQorCUFUOTFQU19BREMgcEFEQyAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcmV0dXJuIHBBREMtPkFEQ19DRFI0OwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDUNCisvLyogXGJyaWVmIFJldHVybiB0aGUgQ2hhbm5lbCA1IENvbnZlcnRlZCBEYXRhDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNINSAoDQorCUFUOTFQU19BREMgcEFEQyAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcmV0dXJuIHBBREMtPkFEQ19DRFI1OwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDYNCisvLyogXGJyaWVmIFJldHVybiB0aGUgQ2hhbm5lbCA2IENvbnZlcnRlZCBEYXRhDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNINiAoDQorCUFUOTFQU19BREMgcEFEQyAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcmV0dXJuIHBBREMtPkFEQ19DRFI2OwkNCit9DQorDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDcNCisvLyogXGJyaWVmIFJldHVybiB0aGUgQ2hhbm5lbCA3IENvbnZlcnRlZCBEYXRhDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNINyAoDQorCUFUOTFQU19BREMgcEFEQyAvLyBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXINCisJKQ0KK3sNCisJcmV0dXJuIHBBREMtPkFEQ19DRFI3OwkNCiB9DQogDQogLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0qICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBBREMNCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FEQ19FbmFibGVJdCAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIEFEQyBpbnRlcnJ1cHQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9BRENfRW5hYmxlSXQoIEFUOTFQU19BREMgcEFEQywgICAgLyogcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogSVQgdG8gYmUgZW5hYmxlZCAqLw0KKyAgICAgICAgICAgICAgICBTT0ZUV0FSRSBBUEkgRk9SIEFFUw0KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUVTX0VuYWJsZUl0DQorLy8qIFxicmllZiBFbmFibGUgQUVTIGludGVycnVwdA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FFU19FbmFibGVJdCAoDQorCUFUOTFQU19BRVMgcEFFUywgICAgIC8vIHBvaW50ZXIgdG8gYSBBRVMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgICAvLyBJVCB0byBiZSBlbmFibGVkDQogew0KLSAgICAvKiogV3JpdGUgdG8gdGhlIElFUiByZWdpc3RlciAqLw0KLSAgICBwQURDLT5BRENfSUVSID0gZmxhZzsNCisJLy8qIFdyaXRlIHRvIHRoZSBJRVIgcmVnaXN0ZXINCisJcEFFUy0+QUVTX0lFUiA9IGZsYWc7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FEQ19EaXNhYmxlSXQgKi8NCi0vKiogXGJyaWVmIERpc2FibGUgQURDIGludGVycnVwdCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0FEQ19EaXNhYmxlSXQoIEFUOTFQU19BREMgcEFEQywgICAgLyogcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIElUIHRvIGJlIGRpc2FibGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUVTX0Rpc2FibGVJdA0KKy8vKiBcYnJpZWYgRGlzYWJsZSBBRVMgaW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQUVTX0Rpc2FibGVJdCAoDQorCUFUOTFQU19BRVMgcEFFUywgLy8gcG9pbnRlciB0byBhIEFFUyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAvLyBJVCB0byBiZSBkaXNhYmxlZA0KIHsNCi0gICAgLyoqIFdyaXRlIHRvIHRoZSBJRFIgcmVnaXN0ZXIgKi8NCi0gICAgcEFEQy0+QURDX0lEUiA9IGZsYWc7DQorCS8vKiBXcml0ZSB0byB0aGUgSURSIHJlZ2lzdGVyDQorCXBBRVMtPkFFU19JRFIgPSBmbGFnOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BRENfR2V0U3RhdHVzICovDQotLyoqIFxicmllZiBSZXR1cm4gQURDIEludGVycnVwdCBTdGF0dXMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRTdGF0dXMoIC8qIFxyZXR1cm4gQURDIEludGVycnVwdCBTdGF0dXMgKi8NCi0gICAgQVQ5MVBTX0FEQyBwQURDICkgICAgICAgICAgICAgICAgICAgICAgLyogcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUVTX0dldFN0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIEFFUyBJbnRlcnJ1cHQgU3RhdHVzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRVNfR2V0U3RhdHVzKCAvLyBccmV0dXJuIEFFUyBJbnRlcnJ1cHQgU3RhdHVzDQorCUFUOTFQU19BRVMgcEFFUykgLy8gcG9pbnRlciB0byBhIEFFUyBjb250cm9sbGVyDQogew0KLSAgICByZXR1cm4gcEFEQy0+QURDX1NSOw0KKwlyZXR1cm4gcEFFUy0+QUVTX0lTUjsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQURDX0dldEludGVycnVwdE1hc2tTdGF0dXMgKi8NCi0vKiogXGJyaWVmIFJldHVybiBBREMgSW50ZXJydXB0IE1hc2sgU3RhdHVzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLyogXHJldHVybiBBREMgSW50ZXJydXB0IE1hc2sgU3RhdHVzICovDQotICAgIEFUOTFQU19BREMgcEFEQyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRVNfR2V0SW50ZXJydXB0TWFza1N0YXR1cw0KKy8vKiBcYnJpZWYgUmV0dXJuIEFFUyBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FFU19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCAvLyBccmV0dXJuIEFFUyBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisJQVQ5MVBTX0FFUyBwQUVTKSAvLyBwb2ludGVyIHRvIGEgQUVTIGNvbnRyb2xsZXINCiB7DQotICAgIHJldHVybiBwQURDLT5BRENfSU1SOw0KKwlyZXR1cm4gcEFFUy0+QUVTX0lNUjsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQURDX0lzSW50ZXJydXB0TWFza2VkICovDQotLyoqIFxicmllZiBUZXN0IGlmIEFEQyBJbnRlcnJ1cHQgaXMgTWFza2VkICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfSXNJbnRlcnJ1cHRNYXNrZWQoIEFUOTFQU19BREMgcEFEQywgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FFU19Jc0ludGVycnVwdE1hc2tlZA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBBRVMgSW50ZXJydXB0IGlzIE1hc2tlZA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQUVTX0lzSW50ZXJydXB0TWFza2VkKA0KKyAgICAgICAgQVQ5MVBTX0FFUyBwQUVTLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBBRVMgY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQogew0KLSAgICByZXR1cm4oIEFUOTFGX0FEQ19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCBwQURDICkgJiBmbGFnICk7DQorCXJldHVybiAoQVQ5MUZfQUVTX0dldEludGVycnVwdE1hc2tTdGF0dXMocEFFUykgJiBmbGFnKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQURDX0lzU3RhdHVzU2V0ICovDQotLyoqIFxicmllZiBUZXN0IGlmIEFEQyBTdGF0dXMgaXMgU2V0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfSXNTdGF0dXNTZXQoIEFUOTFQU19BREMgcEFEQywgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FFU19Jc1N0YXR1c1NldA0KKy8vKiBcYnJpZWYgVGVzdCBpZiBBRVMgU3RhdHVzIGlzIFNldA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQUVTX0lzU3RhdHVzU2V0KA0KKyAgICAgICAgQVQ5MVBTX0FFUyBwQUVTLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBBRVMgY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQogew0KLSAgICByZXR1cm4oIEFUOTFGX0FEQ19HZXRTdGF0dXMoIHBBREMgKSAmIGZsYWcgKTsNCisJcmV0dXJuIChBVDkxRl9BRVNfR2V0U3RhdHVzKHBBRVMpICYgZmxhZyk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FEQ19DZmdNb2RlUmVnICovDQotLyoqIFxicmllZiBDb25maWd1cmUgdGhlIE1vZGUgUmVnaXN0ZXIgb2YgdGhlIEFEQyBjb250cm9sbGVyICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQURDX0NmZ01vZGVSZWcoIEFUOTFQU19BREMgcEFEQywgICAgLyogcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1vZGUgKSAvKiBtb2RlIHJlZ2lzdGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUVTX0NmZ01vZGVSZWcNCisvLyogXGJyaWVmIENvbmZpZ3VyZSB0aGUgTW9kZSBSZWdpc3RlciBvZiB0aGUgQUVTIGNvbnRyb2xsZXINCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BRVNfQ2ZnTW9kZVJlZyAoDQorCUFUOTFQU19BRVMgcEFFUywgLy8gcG9pbnRlciB0byBhIEFFUyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBtb2RlKSAgICAgICAgLy8gbW9kZSByZWdpc3Rlcg0KIHsNCi0gICAgLyoqIFdyaXRlIHRvIHRoZSBNUiByZWdpc3RlciAqLw0KLSAgICBwQURDLT5BRENfTVIgPSBtb2RlOw0KKwkvLyogV3JpdGUgdG8gdGhlIE1SIHJlZ2lzdGVyDQorCXBBRVMtPkFFU19NUiA9IG1vZGU7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FEQ19HZXRNb2RlUmVnICovDQotLyoqIFxicmllZiBSZXR1cm4gdGhlIE1vZGUgUmVnaXN0ZXIgb2YgdGhlIEFEQyBjb250cm9sbGVyIHZhbHVlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0TW9kZVJlZyggQVQ5MVBTX0FEQyBwQURDIC8qIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FFU19HZXRNb2RlUmVnDQorLy8qIFxicmllZiBSZXR1cm4gdGhlIE1vZGUgUmVnaXN0ZXIgb2YgdGhlIEFFUyBjb250cm9sbGVyIHZhbHVlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRVNfR2V0TW9kZVJlZyAoDQorCUFUOTFQU19BRVMgcEFFUyAvLyBwb2ludGVyIHRvIGEgQUVTIGNvbnRyb2xsZXINCisJKQ0KIHsNCi0gICAgcmV0dXJuIHBBREMtPkFEQ19NUjsNCisJcmV0dXJuIHBBRVMtPkFFU19NUjsJDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FEQ19DZmdUaW1pbmdzICovDQotLyoqIFxicmllZiBDb25maWd1cmUgdGhlIGRpZmZlcmVudCBuZWNlc3NhcnkgdGltaW5ncyBvZiB0aGUgQURDIGNvbnRyb2xsZXIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9BRENfQ2ZnVGltaW5ncyggQVQ5MVBTX0FEQyBwQURDLCAgICAgICAgICAgICAgICAgICAgLyogcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1ja19jbG9jaywgICAgICAgICAgICAgLyogaW4gTUh6ICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGFkY19jbG9jaywgICAgICAgICAgICAgLyogaW4gTUh6ICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHN0YXJ0dXBfdGltZSwgICAgICAgICAgLyogaW4gdXMgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlX2FuZF9ob2xkX3RpbWUgKSAvKiBpbiBucyAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FFU19TdGFydFByb2Nlc3NpbmcNCisvLyogXGJyaWVmIFN0YXJ0IEVuY3J5cHRpb24gb3IgRGVjcnlwdGlvbg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FFU19TdGFydFByb2Nlc3NpbmcgKA0KKwlBVDkxUFNfQUVTIHBBRVMgLy8gcG9pbnRlciB0byBhIEFFUyBjb250cm9sbGVyDQorCSkNCiB7DQotICAgIHVuc2lnbmVkIGludCBwcmVzY2FsLCBzdGFydHVwLCBzaHRpbTsNCi0NCi0gICAgcHJlc2NhbCA9IG1ja19jbG9jayAvICggMiAqIGFkY19jbG9jayApIC0gMTsNCi0gICAgc3RhcnR1cCA9IGFkY19jbG9jayAqIHN0YXJ0dXBfdGltZSAvIDggLSAxOw0KLSAgICBzaHRpbSA9IGFkY19jbG9jayAqIHNhbXBsZV9hbmRfaG9sZF90aW1lIC8gMTAwMCAtIDE7DQotDQotICAgIC8qKiBXcml0ZSB0byB0aGUgTVIgcmVnaXN0ZXIgKi8NCi0gICAgcEFEQy0+QURDX01SID0gKCAoIHByZXNjYWwgPDwgOCApICYgQVQ5MUNfQURDX1BSRVNDQUwgKSB8ICggKCBzdGFydHVwIDw8IDE2ICkgJiBBVDkxQ19BRENfU1RBUlRVUCApIHwgKCAoIHNodGltIDw8IDI0ICkgJiBBVDkxQ19BRENfU0hUSU0gKTsNCisJcEFFUy0+QUVTX0NSID0gQVQ5MUNfQUVTX1NUQVJUOwkNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQURDX0VuYWJsZUNoYW5uZWwgKi8NCi0vKiogXGJyaWVmIFJldHVybiBBREMgVGltZXIgUmVnaXN0ZXIgVmFsdWUgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9BRENfRW5hYmxlQ2hhbm5lbCggQVQ5MVBTX0FEQyBwQURDLCAgICAgICAvKiBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY2hhbm5lbCApIC8qIG1vZGUgcmVnaXN0ZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRVNfU29mdFJlc2V0DQorLy8qIFxicmllZiBSZXNldCBBRVMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BRVNfU29mdFJlc2V0ICgNCisJQVQ5MVBTX0FFUyBwQUVTIC8vIHBvaW50ZXIgdG8gYSBBRVMgY29udHJvbGxlcg0KKwkpDQogew0KLSAgICAvKiogV3JpdGUgdG8gdGhlIENIRVIgcmVnaXN0ZXIgKi8NCi0gICAgcEFEQy0+QURDX0NIRVIgPSBjaGFubmVsOw0KKwlwQUVTLT5BRVNfQ1IgPSBBVDkxQ19BRVNfU1dSU1Q7CQ0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BRENfRGlzYWJsZUNoYW5uZWwgKi8NCi0vKiogXGJyaWVmIFJldHVybiBBREMgVGltZXIgUmVnaXN0ZXIgVmFsdWUgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9BRENfRGlzYWJsZUNoYW5uZWwoIEFUOTFQU19BREMgcEFEQywgICAgICAgLyogcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjaGFubmVsICkgLyogbW9kZSByZWdpc3RlciAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FFU19Mb2FkTmV3U2VlZA0KKy8vKiBcYnJpZWYgTG9hZCBOZXcgU2VlZCBpbiB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3INCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BRVNfTG9hZE5ld1NlZWQgKA0KKwlBVDkxUFNfQUVTIHBBRVMgLy8gcG9pbnRlciB0byBhIEFFUyBjb250cm9sbGVyDQorCSkNCiB7DQotICAgIC8qKiBXcml0ZSB0byB0aGUgQ0hEUiByZWdpc3RlciAqLw0KLSAgICBwQURDLT5BRENfQ0hEUiA9IGNoYW5uZWw7DQorCXBBRVMtPkFFU19DUiA9IEFUOTFDX0FFU19MT0FEU0VFRDsJDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FEQ19HZXRDaGFubmVsU3RhdHVzICovDQotLyoqIFxicmllZiBSZXR1cm4gQURDIFRpbWVyIFJlZ2lzdGVyIFZhbHVlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0Q2hhbm5lbFN0YXR1cyggQVQ5MVBTX0FEQyBwQURDIC8qIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FFU19TZXRDcnlwdG9LZXkNCisvLyogXGJyaWVmIFNldCBDcnlwdG9ncmFwaGljIEtleSB4DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQUVTX1NldENyeXB0b0tleSAoDQorCUFUOTFQU19BRVMgcEFFUywgLy8gcG9pbnRlciB0byBhIEFFUyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGNoYXIgaW5kZXgsDQorCXVuc2lnbmVkIGludCBrZXl3b3JkDQorCSkNCiB7DQotICAgIHJldHVybiBwQURDLT5BRENfQ0hTUjsNCisJcEFFUy0+QUVTX0tFWVd4UltpbmRleF0gPSBrZXl3b3JkOwkNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQURDX1N0YXJ0Q29udmVyc2lvbiAqLw0KLS8qKiBcYnJpZWYgU29mdHdhcmUgcmVxdWVzdCBmb3IgYSBhbmFsb2cgdG8gZGlnaXRhbCBjb252ZXJzaW9uICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQURDX1N0YXJ0Q29udmVyc2lvbiggQVQ5MVBTX0FEQyBwQURDIC8qIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FFU19JbnB1dERhdGENCisvLyogXGJyaWVmIFNldCBJbnB1dCBEYXRhIHgNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BRVNfSW5wdXREYXRhICgNCisJQVQ5MVBTX0FFUyBwQUVTLCAvLyBwb2ludGVyIHRvIGEgQUVTIGNvbnRyb2xsZXINCisJdW5zaWduZWQgY2hhciBpbmRleCwNCisJdW5zaWduZWQgaW50IGluZGF0YQ0KKwkpDQogew0KLSAgICBwQURDLT5BRENfQ1IgPSBBVDkxQ19BRENfU1RBUlQ7DQorCXBBRVMtPkFFU19JREFUQXhSW2luZGV4XSA9IGluZGF0YTsJDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FEQ19Tb2Z0UmVzZXQgKi8NCi0vKiogXGJyaWVmIFNvZnR3YXJlIHJlc2V0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQURDX1NvZnRSZXNldCggQVQ5MVBTX0FEQyBwQURDIC8qIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0FFU19HZXRPdXRwdXREYXRhDQorLy8qIFxicmllZiBHZXQgT3V0cHV0IERhdGEgeA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQUVTX0dldE91dHB1dERhdGEgKA0KKwlBVDkxUFNfQUVTIHBBRVMsIC8vIHBvaW50ZXIgdG8gYSBBRVMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGluZGV4DQorCSkNCiB7DQotICAgIHBBREMtPkFEQ19DUiA9IEFUOTFDX0FEQ19TV1JTVDsNCisJcmV0dXJuIHBBRVMtPkFFU19PREFUQXhSW2luZGV4XTsJDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FEQ19HZXRMYXN0Q29udmVydGVkRGF0YSAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIHRoZSBMYXN0IENvbnZlcnRlZCBEYXRhICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0TGFzdENvbnZlcnRlZERhdGEoIEFUOTFQU19BREMgcEFEQyAvKiBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUVTX1NldEluaXRpYWxpemF0aW9uVmVjdG9yDQorLy8qIFxicmllZiBTZXQgSW5pdGlhbGl6YXRpb24gVmVjdG9yIChvciBDb3VudGVyKSB4DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQUVTX1NldEluaXRpYWxpemF0aW9uVmVjdG9yICgNCisJQVQ5MVBTX0FFUyBwQUVTLCAvLyBwb2ludGVyIHRvIGEgQUVTIGNvbnRyb2xsZXINCisJdW5zaWduZWQgY2hhciBpbmRleCwNCisJdW5zaWduZWQgaW50IGluaXR2ZWN0b3INCisJKQ0KIHsNCi0gICAgcmV0dXJuIHBBREMtPkFEQ19MQ0RSOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNIMCAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIHRoZSBDaGFubmVsIDAgQ29udmVydGVkIERhdGEgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0gwKCBBVDkxUFNfQURDIHBBREMgLyogcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQotew0KLSAgICByZXR1cm4gcEFEQy0+QURDX0NEUjA7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0gxICovDQotLyoqIFxicmllZiBSZXR1cm4gdGhlIENoYW5uZWwgMSBDb252ZXJ0ZWQgRGF0YSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDEoIEFUOTFQU19BREMgcEFEQyAvKiBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCi17DQotICAgIHJldHVybiBwQURDLT5BRENfQ0RSMTsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDIgKi8NCi0vKiogXGJyaWVmIFJldHVybiB0aGUgQ2hhbm5lbCAyIENvbnZlcnRlZCBEYXRhICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNIMiggQVQ5MVBTX0FEQyBwQURDIC8qIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KLXsNCi0gICAgcmV0dXJuIHBBREMtPkFEQ19DRFIyOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNIMyAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIHRoZSBDaGFubmVsIDMgQ29udmVydGVkIERhdGEgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0gzKCBBVDkxUFNfQURDIHBBREMgLyogcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQotew0KLSAgICByZXR1cm4gcEFEQy0+QURDX0NEUjM7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0g0ICovDQotLyoqIFxicmllZiBSZXR1cm4gdGhlIENoYW5uZWwgNCBDb252ZXJ0ZWQgRGF0YSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDQoIEFUOTFQU19BREMgcEFEQyAvKiBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCi17DQotICAgIHJldHVybiBwQURDLT5BRENfQ0RSNDsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDUgKi8NCi0vKiogXGJyaWVmIFJldHVybiB0aGUgQ2hhbm5lbCA1IENvbnZlcnRlZCBEYXRhICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNINSggQVQ5MVBTX0FEQyBwQURDIC8qIHBvaW50ZXIgdG8gYSBBREMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KLXsNCi0gICAgcmV0dXJuIHBBREMtPkFEQ19DRFI1Ow0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BRENfR2V0Q29udmVydGVkRGF0YUNINiAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIHRoZSBDaGFubmVsIDYgQ29udmVydGVkIERhdGEgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0g2KCBBVDkxUFNfQURDIHBBREMgLyogcG9pbnRlciB0byBhIEFEQyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQotew0KLSAgICByZXR1cm4gcEFEQy0+QURDX0NEUjY7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FEQ19HZXRDb252ZXJ0ZWREYXRhQ0g3ICovDQotLyoqIFxicmllZiBSZXR1cm4gdGhlIENoYW5uZWwgNyBDb252ZXJ0ZWQgRGF0YSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQURDX0dldENvbnZlcnRlZERhdGFDSDcoIEFUOTFQU19BREMgcEFEQyAvKiBwb2ludGVyIHRvIGEgQURDIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCi17DQotICAgIHJldHVybiBwQURDLT5BRENfQ0RSNzsNCisJcEFFUy0+QUVTX0lWeFJbaW5kZXhdID0gaW5pdHZlY3RvcjsJDQogfQ0KIA0KIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotKiAgICAgICAgICAgICAgIFNPRlRXQVJFIEFQSSBGT1IgQUVTDQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BRVNfRW5hYmxlSXQgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBBRVMgaW50ZXJydXB0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQUVTX0VuYWJsZUl0KCBBVDkxUFNfQUVTIHBBRVMsICAgIC8qIHBvaW50ZXIgdG8gYSBBRVMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIElUIHRvIGJlIGVuYWJsZWQgKi8NCisgICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBUREVTDQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UREVTX0VuYWJsZUl0DQorLy8qIFxicmllZiBFbmFibGUgVERFUyBpbnRlcnJ1cHQNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UREVTX0VuYWJsZUl0ICgNCisJQVQ5MVBTX1RERVMgcFRERVMsICAgICAvLyBwb2ludGVyIHRvIGEgVERFUyBjb250cm9sbGVyDQorCXVuc2lnbmVkIGludCBmbGFnKSAgIC8vIElUIHRvIGJlIGVuYWJsZWQNCiB7DQotICAgIC8qKiBXcml0ZSB0byB0aGUgSUVSIHJlZ2lzdGVyICovDQotICAgIHBBRVMtPkFFU19JRVIgPSBmbGFnOw0KKwkvLyogV3JpdGUgdG8gdGhlIElFUiByZWdpc3Rlcg0KKwlwVERFUy0+VERFU19JRVIgPSBmbGFnOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BRVNfRGlzYWJsZUl0ICovDQotLyoqIFxicmllZiBEaXNhYmxlIEFFUyBpbnRlcnJ1cHQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9BRVNfRGlzYWJsZUl0KCBBVDkxUFNfQUVTIHBBRVMsICAgIC8qIHBvaW50ZXIgdG8gYSBBRVMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBJVCB0byBiZSBkaXNhYmxlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RERVNfRGlzYWJsZUl0DQorLy8qIFxicmllZiBEaXNhYmxlIFRERVMgaW50ZXJydXB0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVERFU19EaXNhYmxlSXQgKA0KKwlBVDkxUFNfVERFUyBwVERFUywgLy8gcG9pbnRlciB0byBhIFRERVMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBpbnQgZmxhZykgLy8gSVQgdG8gYmUgZGlzYWJsZWQNCiB7DQotICAgIC8qKiBXcml0ZSB0byB0aGUgSURSIHJlZ2lzdGVyICovDQotICAgIHBBRVMtPkFFU19JRFIgPSBmbGFnOw0KKwkvLyogV3JpdGUgdG8gdGhlIElEUiByZWdpc3Rlcg0KKwlwVERFUy0+VERFU19JRFIgPSBmbGFnOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BRVNfR2V0U3RhdHVzICovDQotLyoqIFxicmllZiBSZXR1cm4gQUVTIEludGVycnVwdCBTdGF0dXMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX0FFU19HZXRTdGF0dXMoIC8qIFxyZXR1cm4gQUVTIEludGVycnVwdCBTdGF0dXMgKi8NCi0gICAgQVQ5MVBTX0FFUyBwQUVTICkgICAgICAgICAgICAgICAgICAgICAgLyogcG9pbnRlciB0byBhIEFFUyBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVERFU19HZXRTdGF0dXMNCisvLyogXGJyaWVmIFJldHVybiBUREVTIEludGVycnVwdCBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1RERVNfR2V0U3RhdHVzKCAvLyBccmV0dXJuIFRERVMgSW50ZXJydXB0IFN0YXR1cw0KKwlBVDkxUFNfVERFUyBwVERFUykgLy8gcG9pbnRlciB0byBhIFRERVMgY29udHJvbGxlcg0KIHsNCi0gICAgcmV0dXJuIHBBRVMtPkFFU19JU1I7DQorCXJldHVybiBwVERFUy0+VERFU19JU1I7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FFU19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzICovDQotLyoqIFxicmllZiBSZXR1cm4gQUVTIEludGVycnVwdCBNYXNrIFN0YXR1cyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQUVTX0dldEludGVycnVwdE1hc2tTdGF0dXMoIC8qIFxyZXR1cm4gQUVTIEludGVycnVwdCBNYXNrIFN0YXR1cyAqLw0KLSAgICBBVDkxUFNfQUVTIHBBRVMgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcG9pbnRlciB0byBhIEFFUyBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVERFU19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzDQorLy8qIFxicmllZiBSZXR1cm4gVERFUyBJbnRlcnJ1cHQgTWFzayBTdGF0dXMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1RERVNfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggLy8gXHJldHVybiBUREVTIEludGVycnVwdCBNYXNrIFN0YXR1cw0KKwlBVDkxUFNfVERFUyBwVERFUykgLy8gcG9pbnRlciB0byBhIFRERVMgY29udHJvbGxlcg0KIHsNCi0gICAgcmV0dXJuIHBBRVMtPkFFU19JTVI7DQorCXJldHVybiBwVERFUy0+VERFU19JTVI7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FFU19Jc0ludGVycnVwdE1hc2tlZCAqLw0KLS8qKiBcYnJpZWYgVGVzdCBpZiBBRVMgSW50ZXJydXB0IGlzIE1hc2tlZCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQUVTX0lzSW50ZXJydXB0TWFza2VkKCBBVDkxUFNfQUVTIHBBRVMsICAgIC8qIFxhcmcgIHBvaW50ZXIgdG8gYSBBRVMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UREVTX0lzSW50ZXJydXB0TWFza2VkDQorLy8qIFxicmllZiBUZXN0IGlmIFRERVMgSW50ZXJydXB0IGlzIE1hc2tlZA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVERFU19Jc0ludGVycnVwdE1hc2tlZCgNCisgICAgICAgIEFUOTFQU19UREVTIHBUREVTLCAgIC8vIFxhcmcgIHBvaW50ZXIgdG8gYSBUREVTIGNvbnRyb2xsZXINCisgICAgICAgIHVuc2lnbmVkIGludCBmbGFnKSAvLyBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZA0KIHsNCi0gICAgcmV0dXJuKCBBVDkxRl9BRVNfR2V0SW50ZXJydXB0TWFza1N0YXR1cyggcEFFUyApICYgZmxhZyApOw0KKwlyZXR1cm4gKEFUOTFGX1RERVNfR2V0SW50ZXJydXB0TWFza1N0YXR1cyhwVERFUykgJiBmbGFnKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQUVTX0lzU3RhdHVzU2V0ICovDQotLyoqIFxicmllZiBUZXN0IGlmIEFFUyBTdGF0dXMgaXMgU2V0ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRVNfSXNTdGF0dXNTZXQoIEFUOTFQU19BRVMgcEFFUywgICAgLyogXGFyZyAgcG9pbnRlciB0byBhIEFFUyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWcgKSAvKiBcYXJnICBmbGFnIHRvIGJlIHRlc3RlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RERVNfSXNTdGF0dXNTZXQNCisvLyogXGJyaWVmIFRlc3QgaWYgVERFUyBTdGF0dXMgaXMgU2V0DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9UREVTX0lzU3RhdHVzU2V0KA0KKyAgICAgICAgQVQ5MVBTX1RERVMgcFRERVMsICAgLy8gXGFyZyAgcG9pbnRlciB0byBhIFRERVMgY29udHJvbGxlcg0KKyAgICAgICAgdW5zaWduZWQgaW50IGZsYWcpIC8vIFxhcmcgIGZsYWcgdG8gYmUgdGVzdGVkDQogew0KLSAgICByZXR1cm4oIEFUOTFGX0FFU19HZXRTdGF0dXMoIHBBRVMgKSAmIGZsYWcgKTsNCisJcmV0dXJuIChBVDkxRl9UREVTX0dldFN0YXR1cyhwVERFUykgJiBmbGFnKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQUVTX0NmZ01vZGVSZWcgKi8NCi0vKiogXGJyaWVmIENvbmZpZ3VyZSB0aGUgTW9kZSBSZWdpc3RlciBvZiB0aGUgQUVTIGNvbnRyb2xsZXIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9BRVNfQ2ZnTW9kZVJlZyggQVQ5MVBTX0FFUyBwQUVTLCAgICAvKiBwb2ludGVyIHRvIGEgQUVTIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbW9kZSApIC8qIG1vZGUgcmVnaXN0ZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UREVTX0NmZ01vZGVSZWcNCisvLyogXGJyaWVmIENvbmZpZ3VyZSB0aGUgTW9kZSBSZWdpc3RlciBvZiB0aGUgVERFUyBjb250cm9sbGVyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVERFU19DZmdNb2RlUmVnICgNCisJQVQ5MVBTX1RERVMgcFRERVMsIC8vIHBvaW50ZXIgdG8gYSBUREVTIGNvbnRyb2xsZXINCisJdW5zaWduZWQgaW50IG1vZGUpICAgICAgICAvLyBtb2RlIHJlZ2lzdGVyDQogew0KLSAgICAvKiogV3JpdGUgdG8gdGhlIE1SIHJlZ2lzdGVyICovDQotICAgIHBBRVMtPkFFU19NUiA9IG1vZGU7DQorCS8vKiBXcml0ZSB0byB0aGUgTVIgcmVnaXN0ZXINCisJcFRERVMtPlRERVNfTVIgPSBtb2RlOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BRVNfR2V0TW9kZVJlZyAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIHRoZSBNb2RlIFJlZ2lzdGVyIG9mIHRoZSBBRVMgY29udHJvbGxlciB2YWx1ZSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfQUVTX0dldE1vZGVSZWcoIEFUOTFQU19BRVMgcEFFUyAvKiBwb2ludGVyIHRvIGEgQUVTIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UREVTX0dldE1vZGVSZWcNCisvLyogXGJyaWVmIFJldHVybiB0aGUgTW9kZSBSZWdpc3RlciBvZiB0aGUgVERFUyBjb250cm9sbGVyIHZhbHVlDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9UREVTX0dldE1vZGVSZWcgKA0KKwlBVDkxUFNfVERFUyBwVERFUyAvLyBwb2ludGVyIHRvIGEgVERFUyBjb250cm9sbGVyDQorCSkNCiB7DQotICAgIHJldHVybiBwQUVTLT5BRVNfTVI7DQorCXJldHVybiBwVERFUy0+VERFU19NUjsJDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FFU19TdGFydFByb2Nlc3NpbmcgKi8NCi0vKiogXGJyaWVmIFN0YXJ0IEVuY3J5cHRpb24gb3IgRGVjcnlwdGlvbiAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0FFU19TdGFydFByb2Nlc3NpbmcoIEFUOTFQU19BRVMgcEFFUyAvKiBwb2ludGVyIHRvIGEgQUVTIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UREVTX1N0YXJ0UHJvY2Vzc2luZw0KKy8vKiBcYnJpZWYgU3RhcnQgRW5jcnlwdGlvbiBvciBEZWNyeXB0aW9uDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVERFU19TdGFydFByb2Nlc3NpbmcgKA0KKwlBVDkxUFNfVERFUyBwVERFUyAvLyBwb2ludGVyIHRvIGEgVERFUyBjb250cm9sbGVyDQorCSkNCiB7DQotICAgIHBBRVMtPkFFU19DUiA9IEFUOTFDX0FFU19TVEFSVDsNCisJcFRERVMtPlRERVNfQ1IgPSBBVDkxQ19UREVTX1NUQVJUOwkNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQUVTX1NvZnRSZXNldCAqLw0KLS8qKiBcYnJpZWYgUmVzZXQgQUVTICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQUVTX1NvZnRSZXNldCggQVQ5MVBTX0FFUyBwQUVTIC8qIHBvaW50ZXIgdG8gYSBBRVMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RERVNfU29mdFJlc2V0DQorLy8qIFxicmllZiBSZXNldCBUREVTDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVERFU19Tb2Z0UmVzZXQgKA0KKwlBVDkxUFNfVERFUyBwVERFUyAvLyBwb2ludGVyIHRvIGEgVERFUyBjb250cm9sbGVyDQorCSkNCiB7DQotICAgIHBBRVMtPkFFU19DUiA9IEFUOTFDX0FFU19TV1JTVDsNCisJcFRERVMtPlRERVNfQ1IgPSBBVDkxQ19UREVTX1NXUlNUOwkNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQUVTX0xvYWROZXdTZWVkICovDQotLyoqIFxicmllZiBMb2FkIE5ldyBTZWVkIGluIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0FFU19Mb2FkTmV3U2VlZCggQVQ5MVBTX0FFUyBwQUVTIC8qIHBvaW50ZXIgdG8gYSBBRVMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVERFU19TZXRDcnlwdG9LZXkxDQorLy8qIFxicmllZiBTZXQgQ3J5cHRvZ3JhcGhpYyBLZXkgMSBXb3JkIHgNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UREVTX1NldENyeXB0b0tleTEgKA0KKwlBVDkxUFNfVERFUyBwVERFUywgLy8gcG9pbnRlciB0byBhIFRERVMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGluZGV4LA0KKwl1bnNpZ25lZCBpbnQga2V5d29yZA0KKwkpDQogew0KLSAgICBwQUVTLT5BRVNfQ1IgPSBBVDkxQ19BRVNfTE9BRFNFRUQ7DQorCXBUREVTLT5UREVTX0tFWTFXeFJbaW5kZXhdID0ga2V5d29yZDsJDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FFU19TZXRDcnlwdG9LZXkgKi8NCi0vKiogXGJyaWVmIFNldCBDcnlwdG9ncmFwaGljIEtleSB4ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQUVTX1NldENyeXB0b0tleSggQVQ5MVBTX0FFUyBwQUVTLCAvKiBwb2ludGVyIHRvIGEgQUVTIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgaW5kZXgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQga2V5d29yZCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVERFU19TZXRDcnlwdG9LZXkyDQorLy8qIFxicmllZiBTZXQgQ3J5cHRvZ3JhcGhpYyBLZXkgMiBXb3JkIHgNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UREVTX1NldENyeXB0b0tleTIgKA0KKwlBVDkxUFNfVERFUyBwVERFUywgLy8gcG9pbnRlciB0byBhIFRERVMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGluZGV4LA0KKwl1bnNpZ25lZCBpbnQga2V5d29yZA0KKwkpDQogew0KLSAgICBwQUVTLT5BRVNfS0VZV3hSWyBpbmRleCBdID0ga2V5d29yZDsNCisJcFRERVMtPlRERVNfS0VZMld4UltpbmRleF0gPSBrZXl3b3JkOwkNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQUVTX0lucHV0RGF0YSAqLw0KLS8qKiBcYnJpZWYgU2V0IElucHV0IERhdGEgeCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0FFU19JbnB1dERhdGEoIEFUOTFQU19BRVMgcEFFUywgLyogcG9pbnRlciB0byBhIEFFUyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGluZGV4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGluZGF0YSApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVERFU19TZXRDcnlwdG9LZXkzDQorLy8qIFxicmllZiBTZXQgQ3J5cHRvZ3JhcGhpYyBLZXkgMyBXb3JkIHgNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UREVTX1NldENyeXB0b0tleTMgKA0KKwlBVDkxUFNfVERFUyBwVERFUywgLy8gcG9pbnRlciB0byBhIFRERVMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGluZGV4LA0KKwl1bnNpZ25lZCBpbnQga2V5d29yZA0KKwkpDQogew0KLSAgICBwQUVTLT5BRVNfSURBVEF4UlsgaW5kZXggXSA9IGluZGF0YTsNCisJcFRERVMtPlRERVNfS0VZM1d4UltpbmRleF0gPSBrZXl3b3JkOwkNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQUVTX0dldE91dHB1dERhdGEgKi8NCi0vKiogXGJyaWVmIEdldCBPdXRwdXQgRGF0YSB4ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9BRVNfR2V0T3V0cHV0RGF0YSggQVQ5MVBTX0FFUyBwQUVTLCAvKiBwb2ludGVyIHRvIGEgQUVTIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgaW5kZXggKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RERVNfSW5wdXREYXRhDQorLy8qIFxicmllZiBTZXQgSW5wdXQgRGF0YSB4DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVERFU19JbnB1dERhdGEgKA0KKwlBVDkxUFNfVERFUyBwVERFUywgLy8gcG9pbnRlciB0byBhIFRERVMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGluZGV4LA0KKwl1bnNpZ25lZCBpbnQgaW5kYXRhDQorCSkNCiB7DQotICAgIHJldHVybiBwQUVTLT5BRVNfT0RBVEF4UlsgaW5kZXggXTsNCisJcFRERVMtPlRERVNfSURBVEF4UltpbmRleF0gPSBpbmRhdGE7CQ0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BRVNfU2V0SW5pdGlhbGl6YXRpb25WZWN0b3IgKi8NCi0vKiogXGJyaWVmIFNldCBJbml0aWFsaXphdGlvbiBWZWN0b3IgKG9yIENvdW50ZXIpIHggKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9BRVNfU2V0SW5pdGlhbGl6YXRpb25WZWN0b3IoIEFUOTFQU19BRVMgcEFFUywgLyogcG9pbnRlciB0byBhIEFFUyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgaW5kZXgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbml0dmVjdG9yICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UREVTX0dldE91dHB1dERhdGENCisvLyogXGJyaWVmIEdldCBPdXRwdXQgRGF0YSB4DQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9UREVTX0dldE91dHB1dERhdGEgKA0KKwlBVDkxUFNfVERFUyBwVERFUywgLy8gcG9pbnRlciB0byBhIFRERVMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGluZGV4DQorCSkNCiB7DQotICAgIHBBRVMtPkFFU19JVnhSWyBpbmRleCBdID0gaW5pdHZlY3RvcjsNCisJcmV0dXJuIHBUREVTLT5UREVTX09EQVRBeFJbaW5kZXhdOwkNCiB9DQogDQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0qICAgICAgICAgICAgICAgU09GVFdBUkUgQVBJIEZPUiBUREVTDQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9UREVTX0VuYWJsZUl0ICovDQotLyoqIFxicmllZiBFbmFibGUgVERFUyBpbnRlcnJ1cHQgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9UREVTX0VuYWJsZUl0KCBBVDkxUFNfVERFUyBwVERFUywgIC8qIHBvaW50ZXIgdG8gYSBUREVTIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogSVQgdG8gYmUgZW5hYmxlZCAqLw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RERVNfU2V0SW5pdGlhbGl6YXRpb25WZWN0b3INCisvLyogXGJyaWVmIFNldCBJbml0aWFsaXphdGlvbiBWZWN0b3IgeA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1RERVNfU2V0SW5pdGlhbGl6YXRpb25WZWN0b3IgKA0KKwlBVDkxUFNfVERFUyBwVERFUywgLy8gcG9pbnRlciB0byBhIFRERVMgY29udHJvbGxlcg0KKwl1bnNpZ25lZCBjaGFyIGluZGV4LA0KKwl1bnNpZ25lZCBpbnQgaW5pdHZlY3Rvcg0KKwkpDQogew0KLSAgICAvKiogV3JpdGUgdG8gdGhlIElFUiByZWdpc3RlciAqLw0KLSAgICBwVERFUy0+VERFU19JRVIgPSBmbGFnOw0KKwlwVERFUy0+VERFU19JVnhSW2luZGV4XSA9IGluaXR2ZWN0b3I7CQ0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9UREVTX0Rpc2FibGVJdCAqLw0KLS8qKiBcYnJpZWYgRGlzYWJsZSBUREVTIGludGVycnVwdCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1RERVNfRGlzYWJsZUl0KCBBVDkxUFNfVERFUyBwVERFUywgIC8qIHBvaW50ZXIgdG8gYSBUREVTIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZyApIC8qIElUIHRvIGJlIGRpc2FibGVkICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfREJHVV9DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIERCR1UNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9EQkdVX0NmZ1BNQyAodm9pZCkNCiB7DQotICAgIC8qKiBXcml0ZSB0byB0aGUgSURSIHJlZ2lzdGVyICovDQotICAgIHBUREVTLT5UREVTX0lEUiA9IGZsYWc7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1NZUykpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9UREVTX0dldFN0YXR1cyAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIFRERVMgSW50ZXJydXB0IFN0YXR1cyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVERFU19HZXRTdGF0dXMoIC8qIFxyZXR1cm4gVERFUyBJbnRlcnJ1cHQgU3RhdHVzICovDQotICAgIEFUOTFQU19UREVTIHBUREVTICkgICAgICAgICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIGEgVERFUyBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfREJHVV9DZmdQSU8NCisvLyogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgREJHVSBzaWduYWxzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfREJHVV9DZmdQSU8gKHZvaWQpDQogew0KLSAgICByZXR1cm4gcFRERVMtPlRERVNfSVNSOw0KKwkvLyBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlDQorCUFUOTFGX1BJT19DZmdQZXJpcGgoDQorCQlBVDkxQ19CQVNFX1BJT0EsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMjdfRFJYRCAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTI4X0RUWEQgICAgKSwgLy8gUGVyaXBoZXJhbCBBDQorCQkwKTsgLy8gUGVyaXBoZXJhbCBCDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1RERVNfR2V0SW50ZXJydXB0TWFza1N0YXR1cyAqLw0KLS8qKiBcYnJpZWYgUmV0dXJuIFRERVMgSW50ZXJydXB0IE1hc2sgU3RhdHVzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9UREVTX0dldEludGVycnVwdE1hc2tTdGF0dXMoIC8qIFxyZXR1cm4gVERFUyBJbnRlcnJ1cHQgTWFzayBTdGF0dXMgKi8NCi0gICAgQVQ5MVBTX1RERVMgcFRERVMgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIGEgVERFUyBjb250cm9sbGVyICovDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUE1DX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgUE1DDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0NmZ1BNQyAodm9pZCkNCiB7DQotICAgIHJldHVybiBwVERFUy0+VERFU19JTVI7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1NZUykpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9UREVTX0lzSW50ZXJydXB0TWFza2VkICovDQotLyoqIFxicmllZiBUZXN0IGlmIFRERVMgSW50ZXJydXB0IGlzIE1hc2tlZCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVERFU19Jc0ludGVycnVwdE1hc2tlZCggQVQ5MVBTX1RERVMgcFRERVMsICAvKiBcYXJnICBwb2ludGVyIHRvIGEgVERFUyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QTUNfQ2ZnUElPDQorLy8qIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFBNQyBzaWduYWxzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0NmZ1BJTyAodm9pZCkNCiB7DQotICAgIHJldHVybiggQVQ5MUZfVERFU19HZXRJbnRlcnJ1cHRNYXNrU3RhdHVzKCBwVERFUyApICYgZmxhZyApOw0KKwkvLyBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlDQorCUFUOTFGX1BJT19DZmdQZXJpcGgoDQorCQlBVDkxQ19CQVNFX1BJT0IsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMzBfUENLMiAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjI5X1BDSzEgICAgKSwgLy8gUGVyaXBoZXJhbCBBDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIyMF9QQ0swICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMF9QQ0swICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMjJfUENLMiAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjIxX1BDSzEgICAgKSk7IC8vIFBlcmlwaGVyYWwgQg0KKwkvLyBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlDQorCUFUOTFGX1BJT19DZmdQZXJpcGgoDQorCQlBVDkxQ19CQVNFX1BJT0EsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJMCwgLy8gUGVyaXBoZXJhbCBBDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEzMF9QQ0syICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMTNfUENLMSAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTI3X1BDSzMgICAgKSk7IC8vIFBlcmlwaGVyYWwgQg0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9UREVTX0lzU3RhdHVzU2V0ICovDQotLyoqIFxicmllZiBUZXN0IGlmIFRERVMgU3RhdHVzIGlzIFNldCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB1bnNpZ25lZCBpbnQgQVQ5MUZfVERFU19Jc1N0YXR1c1NldCggQVQ5MVBTX1RERVMgcFRERVMsICAvKiBcYXJnICBwb2ludGVyIHRvIGEgVERFUyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnICkgLyogXGFyZyAgZmxhZyB0byBiZSB0ZXN0ZWQgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9WUkVHX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgVlJFRw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1ZSRUdfQ2ZnUE1DICh2b2lkKQ0KIHsNCi0gICAgcmV0dXJuKCBBVDkxRl9UREVTX0dldFN0YXR1cyggcFRERVMgKSAmIGZsYWcgKTsNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfU1lTKSk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1RERVNfQ2ZnTW9kZVJlZyAqLw0KLS8qKiBcYnJpZWYgQ29uZmlndXJlIHRoZSBNb2RlIFJlZ2lzdGVyIG9mIHRoZSBUREVTIGNvbnRyb2xsZXIgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9UREVTX0NmZ01vZGVSZWcoIEFUOTFQU19UREVTIHBUREVTLCAgLyogcG9pbnRlciB0byBhIFRERVMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbW9kZSApIC8qIG1vZGUgcmVnaXN0ZXIgKi8NCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9SU1RDX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgUlNUQw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1JTVENfQ2ZnUE1DICh2b2lkKQ0KIHsNCi0gICAgLyoqIFdyaXRlIHRvIHRoZSBNUiByZWdpc3RlciAqLw0KLSAgICBwVERFUy0+VERFU19NUiA9IG1vZGU7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1NZUykpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9UREVTX0dldE1vZGVSZWcgKi8NCi0vKiogXGJyaWVmIFJldHVybiB0aGUgTW9kZSBSZWdpc3RlciBvZiB0aGUgVERFUyBjb250cm9sbGVyIHZhbHVlICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHVuc2lnbmVkIGludCBBVDkxRl9UREVTX0dldE1vZGVSZWcoIEFUOTFQU19UREVTIHBUREVTIC8qIHBvaW50ZXIgdG8gYSBUREVTIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1NDX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgU1NDDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1NDX0NmZ1BNQyAodm9pZCkNCiB7DQotICAgIHJldHVybiBwVERFUy0+VERFU19NUjsNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfU1NDKSk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1RERVNfU3RhcnRQcm9jZXNzaW5nICovDQotLyoqIFxicmllZiBTdGFydCBFbmNyeXB0aW9uIG9yIERlY3J5cHRpb24gKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9UREVTX1N0YXJ0UHJvY2Vzc2luZyggQVQ5MVBTX1RERVMgcFRERVMgLyogcG9pbnRlciB0byBhIFRERVMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TU0NfQ2ZnUElPDQorLy8qIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFNTQyBzaWduYWxzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1NDX0NmZ1BJTyAodm9pZCkNCiB7DQotICAgIHBUREVTLT5UREVTX0NSID0gQVQ5MUNfVERFU19TVEFSVDsNCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9BLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTI1X1JLICAgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyMl9USyAgICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMjFfVEYgICAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTI0X1JEICAgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyNl9SRiAgICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMjNfVEQgICAgICApLCAvLyBQZXJpcGhlcmFsIEENCisJCTApOyAvLyBQZXJpcGhlcmFsIEINCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVERFU19Tb2Z0UmVzZXQgKi8NCi0vKiogXGJyaWVmIFJlc2V0IFRERVMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9UREVTX1NvZnRSZXNldCggQVQ5MVBTX1RERVMgcFRERVMgLyogcG9pbnRlciB0byBhIFRERVMgY29udHJvbGxlciAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9XRFRDX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgV0RUQw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1dEVENfQ2ZnUE1DICh2b2lkKQ0KIHsNCi0gICAgcFRERVMtPlRERVNfQ1IgPSBBVDkxQ19UREVTX1NXUlNUOw0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9TWVMpKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVERFU19TZXRDcnlwdG9LZXkxICovDQotLyoqIFxicmllZiBTZXQgQ3J5cHRvZ3JhcGhpYyBLZXkgMSBXb3JkIHggKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9UREVTX1NldENyeXB0b0tleTEoIEFUOTFQU19UREVTIHBUREVTLCAvKiBwb2ludGVyIHRvIGEgVERFUyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgaW5kZXgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBrZXl3b3JkICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VUzFfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBVUzENCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VUzFfQ2ZnUE1DICh2b2lkKQ0KIHsNCi0gICAgcFRERVMtPlRERVNfS0VZMVd4UlsgaW5kZXggXSA9IGtleXdvcmQ7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1VTMSkpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9UREVTX1NldENyeXB0b0tleTIgKi8NCi0vKiogXGJyaWVmIFNldCBDcnlwdG9ncmFwaGljIEtleSAyIFdvcmQgeCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1RERVNfU2V0Q3J5cHRvS2V5MiggQVQ5MVBTX1RERVMgcFRERVMsIC8qIHBvaW50ZXIgdG8gYSBUREVTIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBpbmRleCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGtleXdvcmQgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTMV9DZmdQSU8NCisvLyogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgVVMxIHNpZ25hbHMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VUzFfQ2ZnUElPICh2b2lkKQ0KIHsNCi0gICAgcFRERVMtPlRERVNfS0VZMld4UlsgaW5kZXggXSA9IGtleXdvcmQ7DQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQiwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkwLCAvLyBQZXJpcGhlcmFsIEENCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjI2X1JJMSAgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIyNF9EU1IxICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMjNfRENEMSAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjI1X0RUUjEgICAgKSk7IC8vIFBlcmlwaGVyYWwgQg0KKwkvLyBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlDQorCUFUOTFGX1BJT19DZmdQZXJpcGgoDQorCQlBVDkxQ19CQVNFX1BJT0EsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBN19TQ0sxICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBOF9SVFMxICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBNl9UWEQxICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBNV9SWEQxICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBOV9DVFMxICAgICksIC8vIFBlcmlwaGVyYWwgQQ0KKwkJMCk7IC8vIFBlcmlwaGVyYWwgQg0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9UREVTX1NldENyeXB0b0tleTMgKi8NCi0vKiogXGJyaWVmIFNldCBDcnlwdG9ncmFwaGljIEtleSAzIFdvcmQgeCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1RERVNfU2V0Q3J5cHRvS2V5MyggQVQ5MVBTX1RERVMgcFRERVMsIC8qIHBvaW50ZXIgdG8gYSBUREVTIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBpbmRleCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGtleXdvcmQgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1VTMF9DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFVTMA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1VTMF9DZmdQTUMgKHZvaWQpDQogew0KLSAgICBwVERFUy0+VERFU19LRVkzV3hSWyBpbmRleCBdID0ga2V5d29yZDsNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfVVMwKSk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1RERVNfSW5wdXREYXRhICovDQotLyoqIFxicmllZiBTZXQgSW5wdXQgRGF0YSB4ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVERFU19JbnB1dERhdGEoIEFUOTFQU19UREVTIHBUREVTLCAvKiBwb2ludGVyIHRvIGEgVERFUyBjb250cm9sbGVyICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBpbmRleCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaW5kYXRhICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VUzBfQ2ZnUElPDQorLy8qIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFVTMCBzaWduYWxzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVVMwX0NmZ1BJTyAodm9pZCkNCiB7DQotICAgIHBUREVTLT5UREVTX0lEQVRBeFJbIGluZGV4IF0gPSBpbmRhdGE7DQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQSwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEwX1JYRDAgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEE0X0NUUzAgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEzX1JUUzAgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyX1NDSzAgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEExX1RYRDAgICAgKSwgLy8gUGVyaXBoZXJhbCBBDQorCQkwKTsgLy8gUGVyaXBoZXJhbCBCDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1RERVNfR2V0T3V0cHV0RGF0YSAqLw0KLS8qKiBcYnJpZWYgR2V0IE91dHB1dCBEYXRhIHggKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdW5zaWduZWQgaW50IEFUOTFGX1RERVNfR2V0T3V0cHV0RGF0YSggQVQ5MVBTX1RERVMgcFRERVMsIC8qIHBvaW50ZXIgdG8gYSBUREVTIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGluZGV4ICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUEkxX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgU1BJMQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1NQSTFfQ2ZnUE1DICh2b2lkKQ0KIHsNCi0gICAgcmV0dXJuIHBUREVTLT5UREVTX09EQVRBeFJbIGluZGV4IF07DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1NQSTEpKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVERFU19TZXRJbml0aWFsaXphdGlvblZlY3RvciAqLw0KLS8qKiBcYnJpZWYgU2V0IEluaXRpYWxpemF0aW9uIFZlY3RvciB4ICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVERFU19TZXRJbml0aWFsaXphdGlvblZlY3RvciggQVQ5MVBTX1RERVMgcFRERVMsIC8qIHBvaW50ZXIgdG8gYSBUREVTIGNvbnRyb2xsZXIgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgaW5kZXgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaW5pdHZlY3RvciApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfU1BJMV9DZmdQSU8NCisvLyogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgU1BJMSBzaWduYWxzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1BJMV9DZmdQSU8gKHZvaWQpDQogew0KLSAgICBwVERFUy0+VERFU19JVnhSWyBpbmRleCBdID0gaW5pdHZlY3RvcjsNCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9CLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCTAsIC8vIFBlcmlwaGVyYWwgQQ0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMTZfTlBDUzEzICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjEwX05QQ1MxMSAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIxMV9OUENTMTIgICkpOyAvLyBQZXJpcGhlcmFsIEINCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9BLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCTAsIC8vIFBlcmlwaGVyYWwgQQ0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBNF9OUENTMTMgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMjlfTlBDUzEzICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTIxX05QQ1MxMCAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyMl9TUENLMSAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMjVfTlBDUzExICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTJfTlBDUzExICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTI0X01JU08xICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEzX05QQ1MxMiAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEEyNl9OUENTMTIgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMjNfTU9TSTEgICApKTsgLy8gUGVyaXBoZXJhbCBCDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0RCR1VfQ2ZnUE1DICovDQotLyoqIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBEQkdVICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfREJHVV9DZmdQTUMoIHZvaWQgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1NQSTBfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBTUEkwDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfU1BJMF9DZmdQTUMgKHZvaWQpDQogew0KLSAgICBBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQotICAgICAgICBBVDkxQ19CQVNFX1BNQywgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCBBVDkxQ19JRF9TWVMgKSApOw0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9TUEkwKSk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0RCR1VfQ2ZnUElPICovDQotLyoqIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIERCR1Ugc2lnbmFscyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0RCR1VfQ2ZnUElPKCB2b2lkICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9TUEkwX0NmZ1BJTw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBTUEkwIHNpZ25hbHMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9TUEkwX0NmZ1BJTyAodm9pZCkNCiB7DQotICAgIC8qIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUgKi8NCi0gICAgQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCi0gICAgICAgIEFUOTFDX0JBU0VfUElPQSwgICAgICAgICAgICAgICAgICAgICAgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEEyN19EUlhEICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMjhfRFRYRCApLCAvKiBQZXJpcGhlcmFsIEEgKi8NCi0gICAgICAgIDAgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUGVyaXBoZXJhbCBCICovDQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQiwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkwLCAvLyBQZXJpcGhlcmFsIEENCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjEzX05QQ1MwMSAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIxN19OUENTMDMgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMTRfTlBDUzAyICApKTsgLy8gUGVyaXBoZXJhbCBCDQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQSwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEExNl9NSVNPMCAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMTNfTlBDUzAxICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTE1X05QQ1MwMyAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEExN19NT1NJMCAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMThfU1BDSzAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTE0X05QQ1MwMiAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEExMl9OUENTMDAgICksIC8vIFBlcmlwaGVyYWwgQQ0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBN19OUENTMDEgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBOV9OUENTMDMgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBOF9OUENTMDIgICkpOyAvLyBQZXJpcGhlcmFsIEINCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUE1DX0NmZ1BNQyAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgUE1DICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0NmZ1BNQyggdm9pZCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUElUQ19DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFBJVEMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QSVRDX0NmZ1BNQyAodm9pZCkNCiB7DQotICAgIEFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCi0gICAgICAgIEFUOTFDX0JBU0VfUE1DLCAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IEFUOTFDX0lEX1NZUyApICk7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1NZUykpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QTUNfQ2ZnUElPICovDQotLyoqIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFBNQyBzaWduYWxzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUE1DX0NmZ1BJTyggdm9pZCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUlDX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgQUlDDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQUlDX0NmZ1BNQyAodm9pZCkNCiB7DQotICAgIC8qIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUgKi8NCi0gICAgQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCi0gICAgICAgIEFUOTFDX0JBU0VfUElPQiwgICAgICAgICAgICAgICAgICAgICAgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEIzMF9QQ0syICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BCMjlfUENLMSApLCAvKiBQZXJpcGhlcmFsIEEgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQjIwX1BDSzAgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEIwX1BDSzAgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEIyMl9QQ0syICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BCMjFfUENLMSApICk7IC8qIFBlcmlwaGVyYWwgQiAqLw0KLSAgICAvKiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlICovDQotICAgIEFUOTFGX1BJT19DZmdQZXJpcGgoDQotICAgICAgICBBVDkxQ19CQVNFX1BJT0EsIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgMCwgICAgICAgICAgICAgICAvKiBQZXJpcGhlcmFsIEEgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTMwX1BDSzIgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEExM19QQ0sxICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMjdfUENLMyApICk7IC8qIFBlcmlwaGVyYWwgQiAqLw0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9GSVEpIHwNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX0lSUTApIHwNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX0lSUTEpKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVlJFR19DZmdQTUMgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFZSRUcgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9WUkVHX0NmZ1BNQyggdm9pZCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUlDX0NmZ1BJTw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBBSUMgc2lnbmFscw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0FJQ19DZmdQSU8gKHZvaWQpDQogew0KLSAgICBBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQotICAgICAgICBBVDkxQ19CQVNFX1BNQywgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCBBVDkxQ19JRF9TWVMgKSApOw0KKwkvLyBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlDQorCUFUOTFGX1BJT19DZmdQZXJpcGgoDQorCQlBVDkxQ19CQVNFX1BJT0EsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BBMzBfSVJRMCAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTI5X0ZJUSAgICAgKSwgLy8gUGVyaXBoZXJhbCBBDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEExNF9JUlExICAgICkpOyAvLyBQZXJpcGhlcmFsIEINCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUlNUQ19DZmdQTUMgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFJTVEMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9SU1RDX0NmZ1BNQyggdm9pZCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQUVTX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgQUVTDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQUVTX0NmZ1BNQyAodm9pZCkNCiB7DQotICAgIEFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCi0gICAgICAgIEFUOTFDX0JBU0VfUE1DLCAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IEFUOTFDX0lEX1NZUyApICk7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX0FFUykpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9TU0NfQ2ZnUE1DICovDQotLyoqIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBTU0MgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9TU0NfQ2ZnUE1DKCB2b2lkICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UV0lfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBUV0kNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UV0lfQ2ZnUE1DICh2b2lkKQ0KIHsNCi0gICAgQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QTUMsIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgQVQ5MUNfSURfU1NDICkgKTsNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfVFdJKSk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1NTQ19DZmdQSU8gKi8NCi0vKiogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgU1NDIHNpZ25hbHMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9TU0NfQ2ZnUElPKCB2b2lkICkNCi17DQotICAgIC8qIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUgKi8NCi0gICAgQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCi0gICAgICAgIEFUOTFDX0JBU0VfUElPQSwgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEEyNV9SSyApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTIyX1RLICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMjFfVEYgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEEyNF9SRCApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTI2X1JGICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMjNfVEQgKSwgLyogUGVyaXBoZXJhbCBBICovDQotICAgICAgICAwICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQZXJpcGhlcmFsIEIgKi8NCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfV0RUQ19DZmdQTUMgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFdEVEMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9XRFRDX0NmZ1BNQyggdm9pZCApDQotew0KLSAgICBBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQotICAgICAgICBBVDkxQ19CQVNFX1BNQywgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCBBVDkxQ19JRF9TWVMgKSApOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9VUzFfQ2ZnUE1DICovDQotLyoqIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBVUzEgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9VUzFfQ2ZnUE1DKCB2b2lkICkNCi17DQotICAgIEFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCi0gICAgICAgIEFUOTFDX0JBU0VfUE1DLCAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IEFUOTFDX0lEX1VTMSApICk7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VTMV9DZmdQSU8gKi8NCi0vKiogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgVVMxIHNpZ25hbHMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9VUzFfQ2ZnUElPKCB2b2lkICkNCi17DQotICAgIC8qIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUgKi8NCi0gICAgQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCi0gICAgICAgIEFUOTFDX0JBU0VfUElPQiwgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAwLCAgICAgICAgICAgICAgIC8qIFBlcmlwaGVyYWwgQSAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BCMjZfUkkxICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BCMjRfRFNSMSApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQjIzX0RDRDEgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEIyNV9EVFIxICkgKTsgLyogUGVyaXBoZXJhbCBCICovDQotICAgIC8qIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUgKi8NCi0gICAgQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCi0gICAgICAgIEFUOTFDX0JBU0VfUElPQSwgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEE3X1NDSzEgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEE4X1JUUzEgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEE2X1RYRDEgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEE1X1JYRDEgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEE5X0NUUzEgKSwgLyogUGVyaXBoZXJhbCBBICovDQotICAgICAgICAwICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUGVyaXBoZXJhbCBCICovDQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1VTMF9DZmdQTUMgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFVTMCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1VTMF9DZmdQTUMoIHZvaWQgKQ0KLXsNCi0gICAgQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QTUMsIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgQVQ5MUNfSURfVVMwICkgKTsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVVMwX0NmZ1BJTyAqLw0KLS8qKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBVUzAgc2lnbmFscyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1VTMF9DZmdQSU8oIHZvaWQgKQ0KLXsNCi0gICAgLyogQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZSAqLw0KLSAgICBBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QSU9BLCAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTBfUlhEMCApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTRfQ1RTMCApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTNfUlRTMCApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTJfU0NLMCApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTFfVFhEMCApLCAvKiBQZXJpcGhlcmFsIEEgKi8NCi0gICAgICAgIDAgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQZXJpcGhlcmFsIEIgKi8NCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1BJMV9DZmdQTUMgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFNQSTEgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9TUEkxX0NmZ1BNQyggdm9pZCApDQotew0KLSAgICBBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQotICAgICAgICBBVDkxQ19CQVNFX1BNQywgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCBBVDkxQ19JRF9TUEkxICkgKTsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1BJMV9DZmdQSU8gKi8NCi0vKiogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgU1BJMSBzaWduYWxzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfU1BJMV9DZmdQSU8oIHZvaWQgKQ0KLXsNCi0gICAgLyogQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZSAqLw0KLSAgICBBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QSU9CLCAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgIDAsICAgICAgICAgICAgICAgLyogUGVyaXBoZXJhbCBBICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEIxNl9OUENTMTMgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEIxMF9OUENTMTEgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEIxMV9OUENTMTIgKSApOyAvKiBQZXJpcGhlcmFsIEIgKi8NCi0gICAgLyogQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZSAqLw0KLSAgICBBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QSU9BLCAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgIDAsICAgICAgICAgICAgICAgLyogUGVyaXBoZXJhbCBBICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEE0X05QQ1MxMyApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTI5X05QQ1MxMyApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTIxX05QQ1MxMCApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTIyX1NQQ0sxICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMjVfTlBDUzExICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMl9OUENTMTEgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEEyNF9NSVNPMSApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTNfTlBDUzEyICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMjZfTlBDUzEyICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMjNfTU9TSTEgKSApOyAvKiBQZXJpcGhlcmFsIEIgKi8NCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1BJMF9DZmdQTUMgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFNQSTAgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9TUEkwX0NmZ1BNQyggdm9pZCApDQotew0KLSAgICBBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQotICAgICAgICBBVDkxQ19CQVNFX1BNQywgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCBBVDkxQ19JRF9TUEkwICkgKTsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfU1BJMF9DZmdQSU8gKi8NCi0vKiogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgU1BJMCBzaWduYWxzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfU1BJMF9DZmdQSU8oIHZvaWQgKQ0KLXsNCi0gICAgLyogQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZSAqLw0KLSAgICBBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QSU9CLCAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgIDAsICAgICAgICAgICAgICAgLyogUGVyaXBoZXJhbCBBICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEIxM19OUENTMDEgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEIxN19OUENTMDMgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEIxNF9OUENTMDIgKSApOyAvKiBQZXJpcGhlcmFsIEIgKi8NCi0gICAgLyogQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZSAqLw0KLSAgICBBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QSU9BLCAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTE2X01JU08wICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMTNfTlBDUzAxICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMTVfTlBDUzAzICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMTdfTU9TSTAgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEExOF9TUENLMCApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTE0X05QQ1MwMiApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTEyX05QQ1MwMCApLCAvKiBQZXJpcGhlcmFsIEEgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTdfTlBDUzAxICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBOV9OUENTMDMgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEE4X05QQ1MwMiApICk7IC8qIFBlcmlwaGVyYWwgQiAqLw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSVRDX0NmZ1BNQyAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgUElUQyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BJVENfQ2ZnUE1DKCB2b2lkICkNCi17DQotICAgIEFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCi0gICAgICAgIEFUOTFDX0JBU0VfUE1DLCAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IEFUOTFDX0lEX1NZUyApICk7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FJQ19DZmdQTUMgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIEFJQyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0FJQ19DZmdQTUMoIHZvaWQgKQ0KLXsNCi0gICAgQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QTUMsIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgQVQ5MUNfSURfRklRICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgQVQ5MUNfSURfSVJRMCApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IEFUOTFDX0lEX0lSUTEgKSApOw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BSUNfQ2ZnUElPICovDQotLyoqIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIEFJQyBzaWduYWxzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQUlDX0NmZ1BJTyggdm9pZCApDQotew0KLSAgICAvKiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlICovDQotICAgIEFUOTFGX1BJT19DZmdQZXJpcGgoDQotICAgICAgICBBVDkxQ19CQVNFX1BJT0EsICAgICAgICAgICAgICAgICAgICAgICAgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEEzMF9JUlEwICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMjlfRklRICksICAgIC8qIFBlcmlwaGVyYWwgQSAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMTRfSVJRMSApICk7IC8qIFBlcmlwaGVyYWwgQiAqLw0KLX0NCi0NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BRVNfQ2ZnUE1DICovDQotLyoqIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBBRVMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9BRVNfQ2ZnUE1DKCB2b2lkICkNCi17DQotICAgIEFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCi0gICAgICAgIEFUOTFDX0JBU0VfUE1DLCAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IEFUOTFDX0lEX0FFUyApICk7DQotfQ0KLQ0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1RXSV9DZmdQTUMgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFRXSSAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1RXSV9DZmdQTUMoIHZvaWQgKQ0KLXsNCi0gICAgQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QTUMsIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgQVQ5MUNfSURfVFdJICkgKTsNCi19DQotDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVFdJX0NmZ1BJTyAqLw0KLS8qKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBUV0kgc2lnbmFscyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1RXSV9DZmdQSU8oIHZvaWQgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RXSV9DZmdQSU8NCisvLyogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgVFdJIHNpZ25hbHMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UV0lfQ2ZnUElPICh2b2lkKQ0KIHsNCi0gICAgLyogQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZSAqLw0KLSAgICBBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QSU9BLCAgICAgICAgICAgICAgICAgICAgIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMTFfVFdDSyApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTEwX1RXRCApLCAvKiBQZXJpcGhlcmFsIEEgKi8NCi0gICAgICAgIDAgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQZXJpcGhlcmFsIEIgKi8NCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9BLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTExX1RXQ0sgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEExMF9UV0QgICAgICksIC8vIFBlcmlwaGVyYWwgQQ0KKwkJMCk7IC8vIFBlcmlwaGVyYWwgQg0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9BRENfQ2ZnUE1DICovDQotLyoqIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBBREMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9BRENfQ2ZnUE1DKCB2b2lkICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBBREMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9BRENfQ2ZnUE1DICh2b2lkKQ0KIHsNCi0gICAgQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QTUMsIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgQVQ5MUNfSURfQURDICkgKTsNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfQURDKSk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX0FEQ19DZmdQSU8gKi8NCi0vKiogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgQURDIHNpZ25hbHMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9BRENfQ2ZnUElPKCB2b2lkICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9BRENfQ2ZnUElPDQorLy8qIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIEFEQyBzaWduYWxzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQURDX0NmZ1BJTyAodm9pZCkNCiB7DQotICAgIC8qIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUgKi8NCi0gICAgQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCi0gICAgICAgIEFUOTFDX0JBU0VfUElPQiwgICAgICAgICAgICAgICAgICAgICAgICAgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBlcmlwaGVyYWwgQSAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BCMThfQURUUkcgKSApOyAvKiBQZXJpcGhlcmFsIEIgKi8NCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9CLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCTAsIC8vIFBlcmlwaGVyYWwgQQ0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMThfQURUUkcgICApKTsgLy8gUGVyaXBoZXJhbCBCDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BXTUNfQ0gzX0NmZ1BJTyAqLw0KLS8qKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBQV01DX0NIMyBzaWduYWxzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUFdNQ19DSDNfQ2ZnUElPKCB2b2lkICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QV01DX0NIM19DZmdQSU8NCisvLyogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgUFdNQ19DSDMgc2lnbmFscw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BXTUNfQ0gzX0NmZ1BJTyAodm9pZCkNCiB7DQotICAgIC8qIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUgKi8NCi0gICAgQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCi0gICAgICAgIEFUOTFDX0JBU0VfUElPQiwgICAgICAgICAgICAgICAgICAgICAgICAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQjIyX1BXTTMgKSwgICAvKiBQZXJpcGhlcmFsIEEgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQjMwX1BXTTMgKSApOyAvKiBQZXJpcGhlcmFsIEIgKi8NCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9CLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjIyX1BXTTMgICAgKSwgLy8gUGVyaXBoZXJhbCBBDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIzMF9QV00zICAgICkpOyAvLyBQZXJpcGhlcmFsIEINCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUFdNQ19DSDJfQ2ZnUElPICovDQotLyoqIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFBXTUNfQ0gyIHNpZ25hbHMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9QV01DX0NIMl9DZmdQSU8oIHZvaWQgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BXTUNfQ0gyX0NmZ1BJTw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBQV01DX0NIMiBzaWduYWxzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUFdNQ19DSDJfQ2ZnUElPICh2b2lkKQ0KIHsNCi0gICAgLyogQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZSAqLw0KLSAgICBBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QSU9CLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BCMjFfUFdNMiApLCAgIC8qIFBlcmlwaGVyYWwgQSAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BCMjlfUFdNMiApICk7IC8qIFBlcmlwaGVyYWwgQiAqLw0KKwkvLyBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlDQorCUFUOTFGX1BJT19DZmdQZXJpcGgoDQorCQlBVDkxQ19CQVNFX1BJT0IsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMjFfUFdNMiAgICApLCAvLyBQZXJpcGhlcmFsIEENCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjI5X1BXTTIgICAgKSk7IC8vIFBlcmlwaGVyYWwgQg0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QV01DX0NIMV9DZmdQSU8gKi8NCi0vKiogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgUFdNQ19DSDEgc2lnbmFscyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BXTUNfQ0gxX0NmZ1BJTyggdm9pZCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUFdNQ19DSDFfQ2ZnUElPDQorLy8qIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFBXTUNfQ0gxIHNpZ25hbHMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9QV01DX0NIMV9DZmdQSU8gKHZvaWQpDQogew0KLSAgICAvKiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlICovDQotICAgIEFUOTFGX1BJT19DZmdQZXJpcGgoDQotICAgICAgICBBVDkxQ19CQVNFX1BJT0IsICAgICAgICAgICAgICAgICAgICAgICAgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEIyMF9QV00xICksICAgLyogUGVyaXBoZXJhbCBBICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEIyOF9QV00xICkgKTsgLyogUGVyaXBoZXJhbCBCICovDQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQiwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIyMF9QV00xICAgICksIC8vIFBlcmlwaGVyYWwgQQ0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMjhfUFdNMSAgICApKTsgLy8gUGVyaXBoZXJhbCBCDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BXTUNfQ0gwX0NmZ1BJTyAqLw0KLS8qKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBQV01DX0NIMCBzaWduYWxzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUFdNQ19DSDBfQ2ZnUElPKCB2b2lkICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QV01DX0NIMF9DZmdQSU8NCisvLyogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgUFdNQ19DSDAgc2lnbmFscw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BXTUNfQ0gwX0NmZ1BJTyAodm9pZCkNCiB7DQotICAgIC8qIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUgKi8NCi0gICAgQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCi0gICAgICAgIEFUOTFDX0JBU0VfUElPQiwgICAgICAgICAgICAgICAgICAgICAgICAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQjE5X1BXTTAgKSwgICAvKiBQZXJpcGhlcmFsIEEgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQjI3X1BXTTAgKSApOyAvKiBQZXJpcGhlcmFsIEIgKi8NCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9CLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjE5X1BXTTAgICAgKSwgLy8gUGVyaXBoZXJhbCBBDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIyN19QV00wICAgICkpOyAvLyBQZXJpcGhlcmFsIEINCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfUlRUQ19DZmdQTUMgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFJUVEMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9SVFRDX0NmZ1BNQyggdm9pZCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfUlRUQ19DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFJUVEMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9SVFRDX0NmZ1BNQyAodm9pZCkNCiB7DQotICAgIEFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCi0gICAgICAgIEFUOTFDX0JBU0VfUE1DLCAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IEFUOTFDX0lEX1NZUyApICk7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1NZUykpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9VRFBfQ2ZnUE1DICovDQotLyoqIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBVRFAgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfQ2ZnUE1DKCB2b2lkICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9VRFBfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBVRFANCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9VRFBfQ2ZnUE1DICh2b2lkKQ0KIHsNCi0gICAgQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QTUMsIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgQVQ5MUNfSURfVURQICkgKTsNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfVURQKSk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1RERVNfQ2ZnUE1DICovDQotLyoqIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBUREVTICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVERFU19DZmdQTUMoIHZvaWQgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RERVNfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBUREVTDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVERFU19DZmdQTUMgKHZvaWQpDQogew0KLSAgICBBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQotICAgICAgICBBVDkxQ19CQVNFX1BNQywgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCBBVDkxQ19JRF9UREVTICkgKTsNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfVERFUykpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9FTUFDX0NmZ1BNQyAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgRU1BQyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX0VNQUNfQ2ZnUE1DKCB2b2lkICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9FTUFDX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgRU1BQw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0VNQUNfQ2ZnUE1DICh2b2lkKQ0KIHsNCi0gICAgQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QTUMsIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgQVQ5MUNfSURfRU1BQyApICk7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX0VNQUMpKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfRU1BQ19DZmdQSU8gKi8NCi0vKiogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgRU1BQyBzaWduYWxzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfRU1BQ19DZmdQSU8oIHZvaWQgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX0VNQUNfQ2ZnUElPDQorLy8qIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIEVNQUMgc2lnbmFscw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0VNQUNfQ2ZnUElPICh2b2lkKQ0KIHsNCi0gICAgLyogQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZSAqLw0KLSAgICBBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QSU9CLCAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQjJfRVRYMCApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQjEyX0VUWEVSICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BCMTZfRUNPTCApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQjExX0VUWDMgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEI2X0VSWDEgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEIxNV9FUlhEViApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQjEzX0VSWDIgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEIzX0VUWDEgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEI4X0VNREMgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEI1X0VSWDAgKSB8DQotICAgICAgICAvKigodW5zaWduZWQgaW50KSBBVDkxQ19QQjE4X0VGMTAwICAgKSB8ICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEIxNF9FUlgzICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BCNF9FQ1JTX0VDUlNEViApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQjFfRVRYRU4gKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEIxMF9FVFgyICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BCMF9FVFhDS19FUkVGQ0sgKSB8DQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEI5X0VNRElPICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BCN19FUlhFUiApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQjE3X0VSWENLICksIC8qIFBlcmlwaGVyYWwgQSAqLw0KLSAgICAgICAgMCApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUGVyaXBoZXJhbCBCICovDQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQiwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIyX0VUWDAgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIxMl9FVFhFUiAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMTZfRUNPTCAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjExX0VUWDMgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEI2X0VSWDEgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIxNV9FUlhEViAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMTNfRVJYMiAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjNfRVRYMSAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjhfRU1EQyAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjVfRVJYMCAgICApIHwNCisJCS8vKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMThfRUYxMDAgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjE0X0VSWDMgICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEI0X0VDUlNfRUNSU0RWKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIxX0VUWEVOICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIxMF9FVFgyICAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMF9FVFhDS19FUkVGQ0spIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjlfRU1ESU8gICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjdfRVJYRVIgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjE3X0VSWENLICAgKSwgLy8gUGVyaXBoZXJhbCBBDQorCQkwKTsgLy8gUGVyaXBoZXJhbCBCDQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1RDMF9DZmdQTUMgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFRDMCAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1RDMF9DZmdQTUMoIHZvaWQgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RDMF9DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIFRDMA0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1RDMF9DZmdQTUMgKHZvaWQpDQogew0KLSAgICBBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQotICAgICAgICBBVDkxQ19CQVNFX1BNQywgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCBBVDkxQ19JRF9UQzAgKSApOw0KKwlBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQorCQlBVDkxQ19CQVNFX1BNQywgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgMSA8PCBBVDkxQ19JRF9UQzApKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVEMwX0NmZ1BJTyAqLw0KLS8qKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBUQzAgc2lnbmFscyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1RDMF9DZmdQSU8oIHZvaWQgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1RDMF9DZmdQSU8NCisvLyogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgVEMwIHNpZ25hbHMNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UQzBfQ2ZnUElPICh2b2lkKQ0KIHsNCi0gICAgLyogQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZSAqLw0KLSAgICBBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QSU9CLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQjIzX1RJT0EwICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BCMjRfVElPQjAgKSwgICAvKiBQZXJpcGhlcmFsIEEgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQjEyX1RDTEswICkgKTsgLyogUGVyaXBoZXJhbCBCICovDQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQiwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIyM19USU9BMCAgICkgfA0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMjRfVElPQjAgICApLCAvLyBQZXJpcGhlcmFsIEENCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjEyX1RDTEswICAgKSk7IC8vIFBlcmlwaGVyYWwgQg0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9UQzFfQ2ZnUE1DICovDQotLyoqIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBUQzEgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9UQzFfQ2ZnUE1DKCB2b2lkICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UQzFfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBUQzENCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorX19pbmxpbmUgdm9pZCBBVDkxRl9UQzFfQ2ZnUE1DICh2b2lkKQ0KIHsNCi0gICAgQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QTUMsIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgQVQ5MUNfSURfVEMxICkgKTsNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfVEMxKSk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1RDMV9DZmdQSU8gKi8NCi0vKiogXGJyaWVmIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gZHJpdmUgVEMxIHNpZ25hbHMgKi8NCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotX19pbmxpbmUgdm9pZCBBVDkxRl9UQzFfQ2ZnUElPKCB2b2lkICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9UQzFfQ2ZnUElPDQorLy8qIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFRDMSBzaWduYWxzDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVEMxX0NmZ1BJTyAodm9pZCkNCiB7DQotICAgIC8qIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUgKi8NCi0gICAgQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCi0gICAgICAgIEFUOTFDX0JBU0VfUElPQiwgICAgICAgICAgICAgICAgICAgICAgICAgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEIyNV9USU9BMSApIHwNCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQjI2X1RJT0IxICksICAgLyogUGVyaXBoZXJhbCBBICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEIxOV9UQ0xLMSApICk7IC8qIFBlcmlwaGVyYWwgQiAqLw0KKwkvLyBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlDQorCUFUOTFGX1BJT19DZmdQZXJpcGgoDQorCQlBVDkxQ19CQVNFX1BJT0IsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMjVfVElPQTEgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjI2X1RJT0IxICAgKSwgLy8gUGVyaXBoZXJhbCBBDQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEIxOV9UQ0xLMSAgICkpOyAvLyBQZXJpcGhlcmFsIEINCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfVEMyX0NmZ1BNQyAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgVEMyICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVEMyX0NmZ1BNQyggdm9pZCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVEMyX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgVEMyDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfVEMyX0NmZ1BNQyAodm9pZCkNCiB7DQotICAgIEFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCi0gICAgICAgIEFUOTFDX0JBU0VfUE1DLCAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IEFUOTFDX0lEX1RDMiApICk7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1RDMikpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9UQzJfQ2ZnUElPICovDQotLyoqIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIFRDMiBzaWduYWxzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfVEMyX0NmZ1BJTyggdm9pZCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfVEMyX0NmZ1BJTw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBUQzIgc2lnbmFscw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1RDMl9DZmdQSU8gKHZvaWQpDQogew0KLSAgICAvKiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlICovDQotICAgIEFUOTFGX1BJT19DZmdQZXJpcGgoDQotICAgICAgICBBVDkxQ19CQVNFX1BJT0IsICAgICAgICAgICAgICAgICAgICAgICAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQjI4X1RJT0IyICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BCMjdfVElPQTIgKSwgLyogUGVyaXBoZXJhbCBBICovDQotICAgICAgICAwICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQZXJpcGhlcmFsIEIgKi8NCi0gICAgLyogQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZSAqLw0KLSAgICBBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QSU9BLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUGVyaXBoZXJhbCBBICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgQVQ5MUNfUEExNV9UQ0xLMiApICk7IC8qIFBlcmlwaGVyYWwgQiAqLw0KKwkvLyBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlDQorCUFUOTFGX1BJT19DZmdQZXJpcGgoDQorCQlBVDkxQ19CQVNFX1BJT0IsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIEFUOTFDX1BCMjhfVElPQjIgICApIHwNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQjI3X1RJT0EyICAgKSwgLy8gUGVyaXBoZXJhbCBBDQorCQkwKTsgLy8gUGVyaXBoZXJhbCBCDQorCS8vIENvbmZpZ3VyZSBQSU8gY29udHJvbGxlcnMgdG8gcGVyaXBoIG1vZGUNCisJQVQ5MUZfUElPX0NmZ1BlcmlwaCgNCisJCUFUOTFDX0JBU0VfUElPQSwgLy8gUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzDQorCQkwLCAvLyBQZXJpcGhlcmFsIEENCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTE1X1RDTEsyICAgKSk7IC8vIFBlcmlwaGVyYWwgQg0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9NQ19DZmdQTUMgKi8NCi0vKiogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIE1DICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfTUNfQ2ZnUE1DKCB2b2lkICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9NQ19DZmdQTUMNCisvLyogXGJyaWVmIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrIGluIFBNQyBmb3IgIE1DDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfTUNfQ2ZnUE1DICh2b2lkKQ0KIHsNCi0gICAgQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QTUMsIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgQVQ5MUNfSURfU1lTICkgKTsNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfU1lTKSk7DQogfQ0KIA0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiogXGZuICAgIEFUOTFGX1BJT0FfQ2ZnUE1DICovDQotLyoqIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBQSU9BICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfUElPQV9DZmdQTUMoIHZvaWQgKQ0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyogXGZuICAgIEFUOTFGX1BJT0FfQ2ZnUE1DDQorLy8qIFxicmllZiBFbmFibGUgUGVyaXBoZXJhbCBjbG9jayBpbiBQTUMgZm9yICBQSU9BDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfUElPQV9DZmdQTUMgKHZvaWQpDQogew0KLSAgICBBVDkxRl9QTUNfRW5hYmxlUGVyaXBoQ2xvY2soDQotICAgICAgICBBVDkxQ19CQVNFX1BNQywgLyogUElPIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovDQotICAgICAgICAoICggdW5zaWduZWQgaW50ICkgMSA8PCBBVDkxQ19JRF9QSU9BICkgKTsNCisJQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KKwkJQVQ5MUNfQkFTRV9QTUMsIC8vIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcw0KKwkJKCh1bnNpZ25lZCBpbnQpIDEgPDwgQVQ5MUNfSURfUElPQSkpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QSU9CX0NmZ1BNQyAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgUElPQiAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BJT0JfQ2ZnUE1DKCB2b2lkICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QSU9CX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgUElPQg0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BJT0JfQ2ZnUE1DICh2b2lkKQ0KIHsNCi0gICAgQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QTUMsIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgQVQ5MUNfSURfUElPQiApICk7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1BJT0IpKTsNCiB9DQogDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qKiBcZm4gICAgQVQ5MUZfQ0FOX0NmZ1BNQyAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgQ0FOICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQ0FOX0NmZ1BNQyggdm9pZCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgQ0FODQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK19faW5saW5lIHZvaWQgQVQ5MUZfQ0FOX0NmZ1BNQyAodm9pZCkNCiB7DQotICAgIEFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCi0gICAgICAgIEFUOTFDX0JBU0VfUE1DLCAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSAxIDw8IEFUOTFDX0lEX0NBTiApICk7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX0NBTikpOw0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9DQU5fQ2ZnUElPICovDQotLyoqIFxicmllZiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIGRyaXZlIENBTiBzaWduYWxzICovDQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLV9faW5saW5lIHZvaWQgQVQ5MUZfQ0FOX0NmZ1BJTyggdm9pZCApDQorLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vKiBcZm4gICAgQVQ5MUZfQ0FOX0NmZ1BJTw0KKy8vKiBcYnJpZWYgQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBkcml2ZSBDQU4gc2lnbmFscw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX0NBTl9DZmdQSU8gKHZvaWQpDQogew0KLSAgICAvKiBDb25maWd1cmUgUElPIGNvbnRyb2xsZXJzIHRvIHBlcmlwaCBtb2RlICovDQotICAgIEFUOTFGX1BJT19DZmdQZXJpcGgoDQotICAgICAgICBBVDkxQ19CQVNFX1BJT0EsICAgICAgICAgICAgICAgICAgICAgICAvKiBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8NCi0gICAgICAgICggKCB1bnNpZ25lZCBpbnQgKSBBVDkxQ19QQTIwX0NBTlRYICkgfA0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIEFUOTFDX1BBMTlfQ0FOUlggKSwgLyogUGVyaXBoZXJhbCBBICovDQotICAgICAgICAwICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQZXJpcGhlcmFsIEIgKi8NCisJLy8gQ29uZmlndXJlIFBJTyBjb250cm9sbGVycyB0byBwZXJpcGggbW9kZQ0KKwlBVDkxRl9QSU9fQ2ZnUGVyaXBoKA0KKwkJQVQ5MUNfQkFTRV9QSU9BLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSBBVDkxQ19QQTIwX0NBTlRYICAgKSB8DQorCQkoKHVuc2lnbmVkIGludCkgQVQ5MUNfUEExOV9DQU5SWCAgICksIC8vIFBlcmlwaGVyYWwgQQ0KKwkJMCk7IC8vIFBlcmlwaGVyYWwgQg0KIH0NCiANCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyoqIFxmbiAgICBBVDkxRl9QV01DX0NmZ1BNQyAqLw0KLS8qKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgUFdNQyAqLw0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi1fX2lubGluZSB2b2lkIEFUOTFGX1BXTUNfQ2ZnUE1DKCB2b2lkICkNCisvLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8qIFxmbiAgICBBVDkxRl9QV01DX0NmZ1BNQw0KKy8vKiBcYnJpZWYgRW5hYmxlIFBlcmlwaGVyYWwgY2xvY2sgaW4gUE1DIGZvciAgUFdNQw0KKy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitfX2lubGluZSB2b2lkIEFUOTFGX1BXTUNfQ2ZnUE1DICh2b2lkKQ0KIHsNCi0gICAgQVQ5MUZfUE1DX0VuYWJsZVBlcmlwaENsb2NrKA0KLSAgICAgICAgQVQ5MUNfQkFTRV9QTUMsIC8qIFBJTyBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLw0KLSAgICAgICAgKCAoIHVuc2lnbmVkIGludCApIDEgPDwgQVQ5MUNfSURfUFdNQyApICk7DQorCUFUOTFGX1BNQ19FbmFibGVQZXJpcGhDbG9jaygNCisJCUFUOTFDX0JBU0VfUE1DLCAvLyBQSU8gY29udHJvbGxlciBiYXNlIGFkZHJlc3MNCisJCSgodW5zaWduZWQgaW50KSAxIDw8IEFUOTFDX0lEX1BXTUMpKTsNCiB9DQogDQogI2VuZGlmIC8vIGxpYl9BVDkxU0FNN1gyNTZfSA0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0lBUi9BdG1lbFNBTTdTNjQvcG9ydC5jIGIvcG9ydGFibGUvSUFSL0F0bWVsU0FNN1M2NC9wb3J0LmMKaW5kZXggMGFkNmJhNy4uMWRiZjM0YyAxMDA2NDQKLS0tIGEvcG9ydGFibGUvSUFSL0F0bWVsU0FNN1M2NC9wb3J0LmMKKysrIGIvcG9ydGFibGUvSUFSL0F0bWVsU0FNN1M2NC9wb3J0LmMKQEAgLTI2LDggKzI2LDggQEAKICAqLw0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0qIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBBdG1lbCBBUk03IHBvcnQuDQotKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyAqIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBBdG1lbCBBUk03IHBvcnQuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiANCiAvKiBTdGFuZGFyZCBpbmNsdWRlcy4gKi8NCkBAIC0zOCwyOSArMzgsMjkgQEAKICNpbmNsdWRlICJ0YXNrLmgiDQogDQogLyogQ29uc3RhbnRzIHJlcXVpcmVkIHRvIHNldHVwIHRoZSBpbml0aWFsIHN0YWNrLiAqLw0KLSNkZWZpbmUgcG9ydElOSVRJQUxfU1BTUiAgICAgICAgICAgKCAoIFN0YWNrVHlwZV90ICkgMHgxZiApICAgICAgLyogU3lzdGVtIG1vZGUsIEFSTSBtb2RlLCBpbnRlcnJ1cHRzIGVuYWJsZWQuICovDQotI2RlZmluZSBwb3J0VEhVTUJfTU9ERV9CSVQgICAgICAgICAoICggU3RhY2tUeXBlX3QgKSAweDIwICkNCi0jZGVmaW5lIHBvcnRJTlNUUlVDVElPTl9TSVpFICAgICAgICggKCBTdGFja1R5cGVfdCApIDQgKQ0KKyNkZWZpbmUgcG9ydElOSVRJQUxfU1BTUgkJCQkoICggU3RhY2tUeXBlX3QgKSAweDFmICkgLyogU3lzdGVtIG1vZGUsIEFSTSBtb2RlLCBpbnRlcnJ1cHRzIGVuYWJsZWQuICovDQorI2RlZmluZSBwb3J0VEhVTUJfTU9ERV9CSVQJCQkJKCAoIFN0YWNrVHlwZV90ICkgMHgyMCApDQorI2RlZmluZSBwb3J0SU5TVFJVQ1RJT05fU0laRQkJCSggKCBTdGFja1R5cGVfdCApIDQgKQ0KIA0KIC8qIENvbnN0YW50cyByZXF1aXJlZCB0byBzZXR1cCB0aGUgUElULiAqLw0KLSNkZWZpbmUgcG9ydFBJVF9DTE9DS19ESVZJU09SICAgICAgKCAoIHVpbnQzMl90ICkgMTYgKQ0KLSNkZWZpbmUgcG9ydFBJVF9DT1VOVEVSX1ZBTFVFICAgICAgKCAoICggY29uZmlnQ1BVX0NMT0NLX0haIC8gcG9ydFBJVF9DTE9DS19ESVZJU09SICkgLyAxMDAwVUwgKSAqIHBvcnRUSUNLX1BFUklPRF9NUyApDQorI2RlZmluZSBwb3J0UElUX0NMT0NLX0RJVklTT1IJCQkoICggdWludDMyX3QgKSAxNiApDQorI2RlZmluZSBwb3J0UElUX0NPVU5URVJfVkFMVUUJCQkoICggKCBjb25maWdDUFVfQ0xPQ0tfSFogLyBwb3J0UElUX0NMT0NLX0RJVklTT1IgKSAvIDEwMDBVTCApICogcG9ydFRJQ0tfUEVSSU9EX01TICkNCiANCiAvKiBDb25zdGFudHMgcmVxdWlyZWQgdG8gaGFuZGxlIGNyaXRpY2FsIHNlY3Rpb25zLiAqLw0KLSNkZWZpbmUgcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgICAgKCAoIHVpbnQzMl90ICkgMCApDQorI2RlZmluZSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyAJCSggKCB1aW50MzJfdCApIDAgKQ0KIA0KIA0KLSNkZWZpbmUgcG9ydElOVF9MRVZFTF9TRU5TSVRJVkUgICAgMA0KLSNkZWZpbmUgcG9ydFBJVF9FTkFCTEUgICAgICAgICAgICAgKCAoIHVpbnQxNl90ICkgMHgxIDw8IDI0ICkNCi0jZGVmaW5lIHBvcnRQSVRfSU5UX0VOQUJMRSAgICAgICAgICggKCB1aW50MTZfdCApIDB4MSA8PCAyNSApDQorI2RlZmluZSBwb3J0SU5UX0xFVkVMX1NFTlNJVElWRSAgMA0KKyNkZWZpbmUgcG9ydFBJVF9FTkFCTEUgICAgICAJKCAoIHVpbnQxNl90ICkgMHgxIDw8IDI0ICkNCisjZGVmaW5lIHBvcnRQSVRfSU5UX0VOQUJMRSAgICAgCSggKCB1aW50MTZfdCApIDB4MSA8PCAyNSApDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogU2V0dXAgdGhlIFBJVCB0byBnZW5lcmF0ZSB0aGUgdGljayBpbnRlcnJ1cHRzLiAqLw0KIHN0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKTsNCiANCiAvKiB1bENyaXRpY2FsTmVzdGluZyB3aWxsIGdldCBzZXQgdG8gemVybyB3aGVuIHRoZSBmaXJzdCB0YXNrIHN0YXJ0cy4gIEl0DQotICogY2Fubm90IGJlIGluaXRpYWxpc2VkIHRvIDAgYXMgdGhpcyB3aWxsIGNhdXNlIGludGVycnVwdHMgdG8gYmUgZW5hYmxlZA0KLSAqIGR1cmluZyB0aGUga2VybmVsIGluaXRpYWxpc2F0aW9uIHByb2Nlc3MuICovDQorY2Fubm90IGJlIGluaXRpYWxpc2VkIHRvIDAgYXMgdGhpcyB3aWxsIGNhdXNlIGludGVycnVwdHMgdG8gYmUgZW5hYmxlZA0KK2R1cmluZyB0aGUga2VybmVsIGluaXRpYWxpc2F0aW9uIHByb2Nlc3MuICovDQogdWludDMyX3QgdWxDcml0aWNhbE5lc3RpbmcgPSAoIHVpbnQzMl90ICkgOTk5OTsNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCkBAIC03MSwxODEgKzcxLDE4OSBAQAogICoNCiAgKiBTZWUgaGVhZGVyIGZpbGUgZm9yIGRlc2NyaXB0aW9uLg0KICAqLw0KLVN0YWNrVHlwZV90ICogcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqIHB4VG9wT2ZTdGFjaywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFza0Z1bmN0aW9uX3QgcHhDb2RlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICogcHZQYXJhbWV0ZXJzICkNCitTdGFja1R5cGVfdCAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqcHhUb3BPZlN0YWNrLCBUYXNrRnVuY3Rpb25fdCBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycyApDQogew0KLSAgICBTdGFja1R5cGVfdCAqIHB4T3JpZ2luYWxUT1M7DQorU3RhY2tUeXBlX3QgKnB4T3JpZ2luYWxUT1M7DQogDQotICAgIHB4T3JpZ2luYWxUT1MgPSBweFRvcE9mU3RhY2s7DQorCXB4T3JpZ2luYWxUT1MgPSBweFRvcE9mU3RhY2s7DQogDQotICAgIC8qIFRvIGVuc3VyZSBhc3NlcnRzIGluIHRhc2tzLmMgZG9uJ3QgZmFpbCwgYWx0aG91Z2ggaW4gdGhpcyBjYXNlIHRoZSBhc3NlcnQNCi0gICAgICogaXMgbm90IHJlYWxseSByZXF1aXJlZC4gKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIFRvIGVuc3VyZSBhc3NlcnRzIGluIHRhc2tzLmMgZG9uJ3QgZmFpbCwgYWx0aG91Z2ggaW4gdGhpcyBjYXNlIHRoZSBhc3NlcnQNCisJaXMgbm90IHJlYWxseSByZXF1aXJlZC4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgIC8qIFNldHVwIHRoZSBpbml0aWFsIHN0YWNrIG9mIHRoZSB0YXNrLiAgVGhlIHN0YWNrIGlzIHNldCBleGFjdGx5IGFzDQotICAgICAqIGV4cGVjdGVkIGJ5IHRoZSBwb3J0UkVTVE9SRV9DT05URVhUKCkgbWFjcm8uICovDQorCS8qIFNldHVwIHRoZSBpbml0aWFsIHN0YWNrIG9mIHRoZSB0YXNrLiAgVGhlIHN0YWNrIGlzIHNldCBleGFjdGx5IGFzDQorCWV4cGVjdGVkIGJ5IHRoZSBwb3J0UkVTVE9SRV9DT05URVhUKCkgbWFjcm8uICovDQogDQotICAgIC8qIEZpcnN0IG9uIHRoZSBzdGFjayBpcyB0aGUgcmV0dXJuIGFkZHJlc3MgLSB3aGljaCBpbiB0aGlzIGNhc2UgaXMgdGhlDQotICAgICAqIHN0YXJ0IG9mIHRoZSB0YXNrLiAgVGhlIG9mZnNldCBpcyBhZGRlZCB0byBtYWtlIHRoZSByZXR1cm4gYWRkcmVzcyBhcHBlYXINCi0gICAgICogYXMgaXQgd291bGQgd2l0aGluIGFuIElSUSBJU1IuICovDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHhDb2RlICsgcG9ydElOU1RSVUNUSU9OX1NJWkU7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkvKiBGaXJzdCBvbiB0aGUgc3RhY2sgaXMgdGhlIHJldHVybiBhZGRyZXNzIC0gd2hpY2ggaW4gdGhpcyBjYXNlIGlzIHRoZQ0KKwlzdGFydCBvZiB0aGUgdGFzay4gIFRoZSBvZmZzZXQgaXMgYWRkZWQgdG8gbWFrZSB0aGUgcmV0dXJuIGFkZHJlc3MgYXBwZWFyDQorCWFzIGl0IHdvdWxkIHdpdGhpbiBhbiBJUlEgSVNSLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB4Q29kZSArIHBvcnRJTlNUUlVDVElPTl9TSVpFOwkJDQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4YWFhYWFhYWE7ICAgIC8qIFIxNCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBweE9yaWdpbmFsVE9TOyAvKiBTdGFjayB1c2VkIHdoZW4gdGFzayBzdGFydHMgZ29lcyBpbiBSMTMuICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTIxMjEyMTI7ICAgIC8qIFIxMiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDExMTExMTExOyAgICAvKiBSMTEgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMDEwMTAxMDsgICAgLyogUjEwICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDkwOTA5MDk7ICAgIC8qIFI5ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDgwODA4MDg7ICAgIC8qIFI4ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDcwNzA3MDc7ICAgIC8qIFI3ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDYwNjA2MDY7ICAgIC8qIFI2ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDUwNTA1MDU7ICAgIC8qIFI1ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDQwNDA0MDQ7ICAgIC8qIFI0ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDMwMzAzMDM7ICAgIC8qIFIzICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDIwMjAyMDI7ICAgIC8qIFIyICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDEwMTAxMDE7ICAgIC8qIFIxICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4YWFhYWFhYWE7CS8qIFIxNCAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHhPcmlnaW5hbFRPUzsgLyogU3RhY2sgdXNlZCB3aGVuIHRhc2sgc3RhcnRzIGdvZXMgaW4gUjEzLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDEyMTIxMjEyOwkvKiBSMTIgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTExMTExMTE7CS8qIFIxMSAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMDEwMTAxMDsJLyogUjEwICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA5MDkwOTA5OwkvKiBSOSAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwODA4MDgwODsJLyogUjggKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDcwNzA3MDc7CS8qIFI3ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA2MDYwNjA2OwkvKiBSNiAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNTA1MDUwNTsJLyogUjUgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDQwNDA0MDQ7CS8qIFI0ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAzMDMwMzAzOwkvKiBSMyAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMjAyMDIwMjsJLyogUjIgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDEwMTAxMDE7CS8qIFIxICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCiANCi0gICAgLyogV2hlbiB0aGUgdGFzayBzdGFydHMgaXMgd2lsbCBleHBlY3QgdG8gZmluZCB0aGUgZnVuY3Rpb24gcGFyYW1ldGVyIGluDQotICAgICAqIFIwLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB2UGFyYW1ldGVyczsgLyogUjAgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIFdoZW4gdGhlIHRhc2sgc3RhcnRzIGlzIHdpbGwgZXhwZWN0IHRvIGZpbmQgdGhlIGZ1bmN0aW9uIHBhcmFtZXRlciBpbg0KKwlSMC4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwdlBhcmFtZXRlcnM7IC8qIFIwICovDQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBUaGUgc3RhdHVzIHJlZ2lzdGVyIGlzIHNldCBmb3Igc3lzdGVtIG1vZGUsIHdpdGggaW50ZXJydXB0cyBlbmFibGVkLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHBvcnRJTklUSUFMX1NQU1I7DQorCS8qIFRoZSBzdGF0dXMgcmVnaXN0ZXIgaXMgc2V0IGZvciBzeXN0ZW0gbW9kZSwgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcG9ydElOSVRJQUxfU1BTUjsNCisJDQorCWlmKCAoICggdWludDMyX3QgKSBweENvZGUgJiAweDAxVUwgKSAhPSAweDAwVUwgKQ0KKwl7DQorCQkvKiBXZSB3YW50IHRoZSB0YXNrIHRvIHN0YXJ0IGluIHRodW1iIG1vZGUuICovDQorCQkqcHhUb3BPZlN0YWNrIHw9IHBvcnRUSFVNQl9NT0RFX0JJVDsNCisJfQkNCisJDQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICBpZiggKCAoIHVpbnQzMl90ICkgcHhDb2RlICYgMHgwMVVMICkgIT0gMHgwMFVMICkNCi0gICAgew0KLSAgICAgICAgLyogV2Ugd2FudCB0aGUgdGFzayB0byBzdGFydCBpbiB0aHVtYiBtb2RlLiAqLw0KLSAgICAgICAgKnB4VG9wT2ZTdGFjayB8PSBwb3J0VEhVTUJfTU9ERV9CSVQ7DQotICAgIH0NCisJLyogSW50ZXJydXB0IGZsYWdzIGNhbm5vdCBhbHdheXMgYmUgc3RvcmVkIG9uIHRoZSBzdGFjayBhbmQgd2lsbA0KKwlpbnN0ZWFkIGJlIHN0b3JlZCBpbiBhIHZhcmlhYmxlLCB3aGljaCBpcyB0aGVuIHNhdmVkIGFzIHBhcnQgb2YgdGhlDQorCXRhc2tzIGNvbnRleHQuICovDQorCSpweFRvcE9mU3RhY2sgPSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORzsNCiANCi0gICAgcHhUb3BPZlN0YWNrLS07DQotDQotICAgIC8qIEludGVycnVwdCBmbGFncyBjYW5ub3QgYWx3YXlzIGJlIHN0b3JlZCBvbiB0aGUgc3RhY2sgYW5kIHdpbGwNCi0gICAgICogaW5zdGVhZCBiZSBzdG9yZWQgaW4gYSB2YXJpYWJsZSwgd2hpY2ggaXMgdGhlbiBzYXZlZCBhcyBwYXJ0IG9mIHRoZQ0KLSAgICAgKiB0YXNrcyBjb250ZXh0LiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkc7DQotDQotICAgIHJldHVybiBweFRvcE9mU3RhY2s7DQorCXJldHVybiBweFRvcE9mU3RhY2s7CQ0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBCYXNlVHlwZV90IHhQb3J0U3RhcnRTY2hlZHVsZXIoIHZvaWQgKQ0KIHsNCi0gICAgZXh0ZXJuIHZvaWQgdlBvcnRTdGFydEZpcnN0VGFzayggdm9pZCApOw0KK2V4dGVybiB2b2lkIHZQb3J0U3RhcnRGaXJzdFRhc2soIHZvaWQgKTsNCiANCi0gICAgLyogU3RhcnQgdGhlIHRpbWVyIHRoYXQgZ2VuZXJhdGVzIHRoZSB0aWNrIElTUi4gIEludGVycnVwdHMgYXJlIGRpc2FibGVkDQotICAgICAqIGhlcmUgYWxyZWFkeS4gKi8NCi0gICAgcHJ2U2V0dXBUaW1lckludGVycnVwdCgpOw0KKwkvKiBTdGFydCB0aGUgdGltZXIgdGhhdCBnZW5lcmF0ZXMgdGhlIHRpY2sgSVNSLiAgSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQNCisJaGVyZSBhbHJlYWR5LiAqLw0KKwlwcnZTZXR1cFRpbWVySW50ZXJydXB0KCk7DQogDQotICAgIC8qIFN0YXJ0IHRoZSBmaXJzdCB0YXNrLiAqLw0KLSAgICB2UG9ydFN0YXJ0Rmlyc3RUYXNrKCk7DQorCS8qIFN0YXJ0IHRoZSBmaXJzdCB0YXNrLiAqLw0KKwl2UG9ydFN0YXJ0Rmlyc3RUYXNrKCk7CQ0KIA0KLSAgICAvKiBTaG91bGQgbm90IGdldCBoZXJlISAqLw0KLSAgICByZXR1cm4gMDsNCisJLyogU2hvdWxkIG5vdCBnZXQgaGVyZSEgKi8NCisJcmV0dXJuIDA7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQ0KIHsNCi0gICAgLyogSXQgaXMgdW5saWtlbHkgdGhhdCB0aGUgQVJNIHBvcnQgd2lsbCByZXF1aXJlIHRoaXMgZnVuY3Rpb24gYXMgdGhlcmUNCi0gICAgICogaXMgbm90aGluZyB0byByZXR1cm4gdG8uICAqLw0KKwkvKiBJdCBpcyB1bmxpa2VseSB0aGF0IHRoZSBBUk0gcG9ydCB3aWxsIHJlcXVpcmUgdGhpcyBmdW5jdGlvbiBhcyB0aGVyZQ0KKwlpcyBub3RoaW5nIHRvIHJldHVybiB0by4gICovDQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KICNpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAwDQogDQotLyogVGhlIGNvb3BlcmF0aXZlIHNjaGVkdWxlciByZXF1aXJlcyBhIG5vcm1hbCBJUlEgc2VydmljZSByb3V0aW5lIHRvDQotICogc2ltcGx5IGluY3JlbWVudCB0aGUgc3lzdGVtIHRpY2suICovDQotICAgIHN0YXRpYyBfX2FybSBfX2lycSB2b2lkIHZQb3J0Tm9uUHJlZW1wdGl2ZVRpY2soIHZvaWQgKTsNCi0gICAgc3RhdGljIF9fYXJtIF9faXJxIHZvaWQgdlBvcnROb25QcmVlbXB0aXZlVGljayggdm9pZCApDQotICAgIHsNCi0gICAgICAgIHVpbnQzMl90IHVsRHVtbXk7DQorCS8qIFRoZSBjb29wZXJhdGl2ZSBzY2hlZHVsZXIgcmVxdWlyZXMgYSBub3JtYWwgSVJRIHNlcnZpY2Ugcm91dGluZSB0bw0KKwlzaW1wbHkgaW5jcmVtZW50IHRoZSBzeXN0ZW0gdGljay4gKi8NCisJc3RhdGljIF9fYXJtIF9faXJxIHZvaWQgdlBvcnROb25QcmVlbXB0aXZlVGljayggdm9pZCApOw0KKwlzdGF0aWMgX19hcm0gX19pcnEgdm9pZCB2UG9ydE5vblByZWVtcHRpdmVUaWNrKCB2b2lkICkNCisJew0KKwkJdWludDMyX3QgdWxEdW1teTsNCisJCQ0KKwkJLyogSW5jcmVtZW50IHRoZSB0aWNrIGNvdW50IC0gd2hpY2ggbWF5IHdha2Ugc29tZSB0YXNrcyBidXQgYXMgdGhlDQorCQlwcmVlbXB0aXZlIHNjaGVkdWxlciBpcyBub3QgYmVpbmcgdXNlZCBhbnkgd29rZW4gdGFzayBpcyBub3QgZ2l2ZW4NCisJCXByb2Nlc3NvciB0aW1lIG5vIG1hdHRlciB3aGF0IGl0cyBwcmlvcml0eS4gKi8NCisJCXhUYXNrSW5jcmVtZW50VGljaygpOw0KKwkJDQorCQkvKiBDbGVhciB0aGUgUElUIGludGVycnVwdC4gKi8NCisJCXVsRHVtbXkgPSBBVDkxQ19CQVNFX1BJVEMtPlBJVENfUElWUjsNCisJCQ0KKwkJLyogRW5kIHRoZSBpbnRlcnJ1cHQgaW4gdGhlIEFJQy4gKi8NCisJCUFUOTFDX0JBU0VfQUlDLT5BSUNfRU9JQ1IgPSB1bER1bW15Ow0KKwl9DQogDQotICAgICAgICAvKiBJbmNyZW1lbnQgdGhlIHRpY2sgY291bnQgLSB3aGljaCBtYXkgd2FrZSBzb21lIHRhc2tzIGJ1dCBhcyB0aGUNCi0gICAgICAgICAqIHByZWVtcHRpdmUgc2NoZWR1bGVyIGlzIG5vdCBiZWluZyB1c2VkIGFueSB3b2tlbiB0YXNrIGlzIG5vdCBnaXZlbg0KLSAgICAgICAgICogcHJvY2Vzc29yIHRpbWUgbm8gbWF0dGVyIHdoYXQgaXRzIHByaW9yaXR5LiAqLw0KLSAgICAgICAgeFRhc2tJbmNyZW1lbnRUaWNrKCk7DQorI2Vsc2UNCiANCi0gICAgICAgIC8qIENsZWFyIHRoZSBQSVQgaW50ZXJydXB0LiAqLw0KLSAgICAgICAgdWxEdW1teSA9IEFUOTFDX0JBU0VfUElUQy0+UElUQ19QSVZSOw0KKwkvKiBDdXJyZW50bHkgdGhlIElBUiBwb3J0IHJlcXVpcmVzIHRoZSBwcmVlbXB0aXZlIHRpY2sgZnVuY3Rpb24gdG8gYmUNCisJZGVmaW5lZCBpbiBhbiBhc20gZmlsZS4gKi8NCiANCi0gICAgICAgIC8qIEVuZCB0aGUgaW50ZXJydXB0IGluIHRoZSBBSUMuICovDQotICAgICAgICBBVDkxQ19CQVNFX0FJQy0+QUlDX0VPSUNSID0gdWxEdW1teTsNCi0gICAgfQ0KLQ0KLSNlbHNlIC8qIGlmIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDAgKi8NCi0NCi0vKiBDdXJyZW50bHkgdGhlIElBUiBwb3J0IHJlcXVpcmVzIHRoZSBwcmVlbXB0aXZlIHRpY2sgZnVuY3Rpb24gdG8gYmUNCi0gKiBkZWZpbmVkIGluIGFuIGFzbSBmaWxlLiAqLw0KLQ0KLSNlbmRpZiAvKiBpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAwICovDQorI2VuZGlmDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogc3RhdGljIHZvaWQgcHJ2U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApDQogew0KLSAgICBBVDkxUFNfUElUQyBweFBJVCA9IEFUOTFDX0JBU0VfUElUQzsNCitBVDkxUFNfUElUQyBweFBJVCA9IEFUOTFDX0JBU0VfUElUQzsNCiANCi0gICAgLyogU2V0dXAgdGhlIEFJQyBmb3IgUElUIGludGVycnVwdHMuICBUaGUgaW50ZXJydXB0IHJvdXRpbmUgY2hvc2VuIGRlcGVuZHMNCi0gICAgICogb24gd2hldGhlciB0aGUgcHJlZW1wdGl2ZSBvciBjb29wZXJhdGl2ZSBzY2hlZHVsZXIgaXMgYmVpbmcgdXNlZC4gKi8NCi0gICAgI2lmIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDANCi0gICAgICAgIEFUOTFGX0FJQ19Db25maWd1cmVJdCggQVQ5MUNfQkFTRV9BSUMsIEFUOTFDX0lEX1NZUywgQVQ5MUNfQUlDX1BSSU9SX0hJR0hFU1QsIHBvcnRJTlRfTEVWRUxfU0VOU0lUSVZFLCAoIHZvaWQgKCAqICkoIHZvaWQgKSApdlBvcnROb25QcmVlbXB0aXZlVGljayApOw0KLSAgICAjZWxzZQ0KLSAgICAgICAgZXh0ZXJuIHZvaWQoIHZQb3J0UHJlZW1wdGl2ZVRpY2sgKSggdm9pZCApOw0KLSAgICAgICAgQVQ5MUZfQUlDX0NvbmZpZ3VyZUl0KCBBVDkxQ19CQVNFX0FJQywgQVQ5MUNfSURfU1lTLCBBVDkxQ19BSUNfUFJJT1JfSElHSEVTVCwgcG9ydElOVF9MRVZFTF9TRU5TSVRJVkUsICggdm9pZCAoICogKSggdm9pZCApICl2UG9ydFByZWVtcHRpdmVUaWNrICk7DQotICAgICNlbmRpZg0KKwkvKiBTZXR1cCB0aGUgQUlDIGZvciBQSVQgaW50ZXJydXB0cy4gIFRoZSBpbnRlcnJ1cHQgcm91dGluZSBjaG9zZW4gZGVwZW5kcw0KKwlvbiB3aGV0aGVyIHRoZSBwcmVlbXB0aXZlIG9yIGNvb3BlcmF0aXZlIHNjaGVkdWxlciBpcyBiZWluZyB1c2VkLiAqLw0KKwkjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMA0KIA0KLSAgICAvKiBDb25maWd1cmUgdGhlIFBJVCBwZXJpb2QuICovDQotICAgIHB4UElULT5QSVRDX1BJTVIgPSBwb3J0UElUX0VOQUJMRSB8IHBvcnRQSVRfSU5UX0VOQUJMRSB8IHBvcnRQSVRfQ09VTlRFUl9WQUxVRTsNCisJCUFUOTFGX0FJQ19Db25maWd1cmVJdCggQVQ5MUNfQkFTRV9BSUMsIEFUOTFDX0lEX1NZUywgQVQ5MUNfQUlDX1BSSU9SX0hJR0hFU1QsIHBvcnRJTlRfTEVWRUxfU0VOU0lUSVZFLCAoIHZvaWQgKCopKHZvaWQpICkgdlBvcnROb25QcmVlbXB0aXZlVGljayApOw0KIA0KLSAgICAvKiBFbmFibGUgdGhlIGludGVycnVwdC4gIEdsb2JhbCBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlcyBhdCB0aGlzIHBvaW50IHNvDQotICAgICAqIHRoaXMgaXMgc2FmZS4gKi8NCi0gICAgQVQ5MUZfQUlDX0VuYWJsZUl0KCBBVDkxQ19CQVNFX0FJQywgQVQ5MUNfSURfU1lTICk7DQorCSNlbHNlDQorCQkNCisJCWV4dGVybiB2b2lkICggdlBvcnRQcmVlbXB0aXZlVGljayApKCB2b2lkICk7DQorCQlBVDkxRl9BSUNfQ29uZmlndXJlSXQoIEFUOTFDX0JBU0VfQUlDLCBBVDkxQ19JRF9TWVMsIEFUOTFDX0FJQ19QUklPUl9ISUdIRVNULCBwb3J0SU5UX0xFVkVMX1NFTlNJVElWRSwgKCB2b2lkICgqKSh2b2lkKSApIHZQb3J0UHJlZW1wdGl2ZVRpY2sgKTsNCisNCisJI2VuZGlmDQorDQorCS8qIENvbmZpZ3VyZSB0aGUgUElUIHBlcmlvZC4gKi8NCisJcHhQSVQtPlBJVENfUElNUiA9IHBvcnRQSVRfRU5BQkxFIHwgcG9ydFBJVF9JTlRfRU5BQkxFIHwgcG9ydFBJVF9DT1VOVEVSX1ZBTFVFOw0KKw0KKwkvKiBFbmFibGUgdGhlIGludGVycnVwdC4gIEdsb2JhbCBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlcyBhdCB0aGlzIHBvaW50IHNvDQorCXRoaXMgaXMgc2FmZS4gKi8NCisJQVQ5MUZfQUlDX0VuYWJsZUl0KCBBVDkxQ19CQVNFX0FJQywgQVQ5MUNfSURfU1lTICk7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICkNCiB7DQotICAgIC8qIERpc2FibGUgaW50ZXJydXB0cyBmaXJzdCEgKi8NCi0gICAgX19kaXNhYmxlX2ludGVycnVwdCgpOw0KKwkvKiBEaXNhYmxlIGludGVycnVwdHMgZmlyc3QhICovDQorCV9fZGlzYWJsZV9pbnRlcnJ1cHQoKTsNCiANCi0gICAgLyogTm93IGludGVycnVwdHMgYXJlIGRpc2FibGVkIHVsQ3JpdGljYWxOZXN0aW5nIGNhbiBiZSBhY2Nlc3NlZA0KLSAgICAgKiBkaXJlY3RseS4gIEluY3JlbWVudCB1bENyaXRpY2FsTmVzdGluZyB0byBrZWVwIGEgY291bnQgb2YgaG93IG1hbnkgdGltZXMNCi0gICAgICogcG9ydEVOVEVSX0NSSVRJQ0FMKCkgaGFzIGJlZW4gY2FsbGVkLiAqLw0KLSAgICB1bENyaXRpY2FsTmVzdGluZysrOw0KKwkvKiBOb3cgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgdWxDcml0aWNhbE5lc3RpbmcgY2FuIGJlIGFjY2Vzc2VkDQorCWRpcmVjdGx5LiAgSW5jcmVtZW50IHVsQ3JpdGljYWxOZXN0aW5nIHRvIGtlZXAgYSBjb3VudCBvZiBob3cgbWFueSB0aW1lcw0KKwlwb3J0RU5URVJfQ1JJVElDQUwoKSBoYXMgYmVlbiBjYWxsZWQuICovDQorCXVsQ3JpdGljYWxOZXN0aW5nKys7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoIHZvaWQgKQ0KIHsNCi0gICAgaWYoIHVsQ3JpdGljYWxOZXN0aW5nID4gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgKQ0KLSAgICB7DQotICAgICAgICAvKiBEZWNyZW1lbnQgdGhlIG5lc3RpbmcgY291bnQgYXMgd2UgYXJlIGxlYXZpbmcgYSBjcml0aWNhbCBzZWN0aW9uLiAqLw0KLSAgICAgICAgdWxDcml0aWNhbE5lc3RpbmctLTsNCisJaWYoIHVsQ3JpdGljYWxOZXN0aW5nID4gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgKQ0KKwl7DQorCQkvKiBEZWNyZW1lbnQgdGhlIG5lc3RpbmcgY291bnQgYXMgd2UgYXJlIGxlYXZpbmcgYSBjcml0aWNhbCBzZWN0aW9uLiAqLw0KKwkJdWxDcml0aWNhbE5lc3RpbmctLTsNCiANCi0gICAgICAgIC8qIElmIHRoZSBuZXN0aW5nIGxldmVsIGhhcyByZWFjaGVkIHplcm8gdGhlbiBpbnRlcnJ1cHRzIHNob3VsZCBiZQ0KLSAgICAgICAgICogcmUtZW5hYmxlZC4gKi8NCi0gICAgICAgIGlmKCB1bENyaXRpY2FsTmVzdGluZyA9PSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyApDQotICAgICAgICB7DQotICAgICAgICAgICAgX19lbmFibGVfaW50ZXJydXB0KCk7DQotICAgICAgICB9DQotICAgIH0NCisJCS8qIElmIHRoZSBuZXN0aW5nIGxldmVsIGhhcyByZWFjaGVkIHplcm8gdGhlbiBpbnRlcnJ1cHRzIHNob3VsZCBiZQ0KKwkJcmUtZW5hYmxlZC4gKi8NCisJCWlmKCB1bENyaXRpY2FsTmVzdGluZyA9PSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyApDQorCQl7DQorCQkJX19lbmFibGVfaW50ZXJydXB0KCk7DQorCQl9DQorCX0NCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorDQorDQorDQorDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvSUFSL0F0bWVsU0FNN1M2NC9wb3J0bWFjcm8uaCBiL3BvcnRhYmxlL0lBUi9BdG1lbFNBTTdTNjQvcG9ydG1hY3JvLmgKaW5kZXggZjQwZjQ1Ny4uODZjYjIxMSAxMDA2NDQKLS0tIGEvcG9ydGFibGUvSUFSL0F0bWVsU0FNN1M2NC9wb3J0bWFjcm8uaAorKysgYi9wb3J0YWJsZS9JQVIvQXRtZWxTQU03UzY0L3BvcnRtYWNyby5oCkBAIC0yNywxMSArMjcsMTEgQEAKIA0KIA0KICNpZm5kZWYgUE9SVE1BQ1JPX0gNCi0gICAgI2RlZmluZSBQT1JUTUFDUk9fSA0KKyNkZWZpbmUgUE9SVE1BQ1JPX0gNCiANCi0gICAgI2lmZGVmIF9fY3BsdXNwbHVzDQotICAgICAgICBleHRlcm4gIkMiIHsNCi0gICAgI2VuZGlmDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAqIFBvcnQgc3BlY2lmaWMgZGVmaW5pdGlvbnMuDQpAQCAtNDQsNjYgKzQ0LDY4IEBACiAgKi8NCiANCiAvKiBUeXBlIGRlZmluaXRpb25zLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRDSEFSICAgICAgICAgIGNoYXINCi0gICAgI2RlZmluZSBwb3J0RkxPQVQgICAgICAgICBmbG9hdA0KLSAgICAjZGVmaW5lIHBvcnRET1VCTEUgICAgICAgIGRvdWJsZQ0KLSAgICAjZGVmaW5lIHBvcnRMT05HICAgICAgICAgIGxvbmcNCi0gICAgI2RlZmluZSBwb3J0U0hPUlQgICAgICAgICBzaG9ydA0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19UWVBFICAgIHVpbnQzMl90DQotICAgICNkZWZpbmUgcG9ydEJBU0VfVFlQRSAgICAgbG9uZw0KKyNkZWZpbmUgcG9ydENIQVIJCWNoYXINCisjZGVmaW5lIHBvcnRGTE9BVAkJZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUJCWRvdWJsZQ0KKyNkZWZpbmUgcG9ydExPTkcJCWxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVAkJc2hvcnQNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFCXVpbnQzMl90DQorI2RlZmluZSBwb3J0QkFTRV9UWVBFCWxvbmcNCiANCi0gICAgdHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSAgIFN0YWNrVHlwZV90Ow0KLSAgICB0eXBlZGVmIGxvbmcgICAgICAgICAgICAgQmFzZVR5cGVfdDsNCi0gICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nICAgIFVCYXNlVHlwZV90Ow0KK3R5cGVkZWYgcG9ydFNUQUNLX1RZUEUgU3RhY2tUeXBlX3Q7DQordHlwZWRlZiBsb25nIEJhc2VUeXBlX3Q7DQordHlwZWRlZiB1bnNpZ25lZCBsb25nIFVCYXNlVHlwZV90Ow0KIA0KLSAgICAjaWYgKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KLSAgICAgICAgdHlwZWRlZiB1aW50MTZfdCAgICAgVGlja1R5cGVfdDsNCi0gICAgICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmYNCi0gICAgI2Vsc2UNCi0gICAgICAgIHR5cGVkZWYgdWludDMyX3QgICAgIFRpY2tUeXBlX3Q7DQotICAgICAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQotICAgICNlbmRpZg0KKyNpZiggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCisJdHlwZWRlZiB1aW50MTZfdCBUaWNrVHlwZV90Ow0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQorI2Vsc2UNCisJdHlwZWRlZiB1aW50MzJfdCBUaWNrVHlwZV90Ow0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQorI2VuZGlmDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogSGFyZHdhcmUgc3BlY2lmaWNzLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEggICAgICAoIC0xICkNCi0gICAgI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMgICAgKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCi0gICAgI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQgICAgOA0KLSAgICAjZGVmaW5lIHBvcnRZSUVMRCgpICAgIGFzbSAoICJTV0kgMCIgKQ0KLSAgICAjZGVmaW5lIHBvcnROT1AoKSAgICAgIGFzbSAoICJOT1AiICkNCisjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEgJCQkoIC0xICkNCisjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUwkJCSggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQorI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQJCQk4DQorI2RlZmluZSBwb3J0WUlFTEQoKQkJCQkJYXNtICggIlNXSSAwIiApDQorI2RlZmluZSBwb3J0Tk9QKCkJCQkJCWFzbSAoICJOT1AiICkNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBDcml0aWNhbCBzZWN0aW9uIGhhbmRsaW5nLiAqLw0KLSAgICBfX2FybSBfX2ludGVyd29yayB2b2lkIHZQb3J0RGlzYWJsZUludGVycnVwdHNGcm9tVGh1bWIoIHZvaWQgKTsNCi0gICAgX19hcm0gX19pbnRlcndvcmsgdm9pZCB2UG9ydEVuYWJsZUludGVycnVwdHNGcm9tVGh1bWIoIHZvaWQgKTsNCi0gICAgX19hcm0gX19pbnRlcndvcmsgdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKTsNCi0gICAgX19hcm0gX19pbnRlcndvcmsgdm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApOw0KK19fYXJtIF9faW50ZXJ3b3JrIHZvaWQgdlBvcnREaXNhYmxlSW50ZXJydXB0c0Zyb21UaHVtYiggdm9pZCApOw0KK19fYXJtIF9faW50ZXJ3b3JrIHZvaWQgdlBvcnRFbmFibGVJbnRlcnJ1cHRzRnJvbVRodW1iKCB2b2lkICk7DQorX19hcm0gX19pbnRlcndvcmsgdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKTsNCitfX2FybSBfX2ludGVyd29yayB2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICk7DQogDQotICAgICNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpICAgIF9fZGlzYWJsZV9pbnRlcnJ1cHQoKQ0KLSAgICAjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpICAgICBfX2VuYWJsZV9pbnRlcnJ1cHQoKQ0KLSAgICAjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpICAgICAgICB2UG9ydEVudGVyQ3JpdGljYWwoKQ0KLSAgICAjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkgICAgICAgICB2UG9ydEV4aXRDcml0aWNhbCgpDQorI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkJX19kaXNhYmxlX2ludGVycnVwdCgpDQorI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKQkJX19lbmFibGVfaW50ZXJydXB0KCkNCisjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpCQl2UG9ydEVudGVyQ3JpdGljYWwoKQ0KKyNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKQkJCXZQb3J0RXhpdENyaXRpY2FsKCkNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBUYXNrIHV0aWxpdGllcy4gKi8NCi0gICAgI2RlZmluZSBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHhTd2l0Y2hSZXF1aXJlZCApIFwNCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGV4dGVybiB2b2lkIHZUYXNrU3dpdGNoQ29udGV4dCggdm9pZCApOyAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGlmKCB4U3dpdGNoUmVxdWlyZWQgKSAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICB2VGFza1N3aXRjaENvbnRleHQoKTsgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgfQ0KKyNkZWZpbmUgcG9ydEVORF9TV0lUQ0hJTkdfSVNSKCB4U3dpdGNoUmVxdWlyZWQgKSAJXA0KK3sJCQkJCQkJCQkJCQkJXA0KK2V4dGVybiB2b2lkIHZUYXNrU3dpdGNoQ29udGV4dCggdm9pZCApOwkJCQlcDQorCQkJCQkJCQkJCQkJCVwNCisJaWYoIHhTd2l0Y2hSZXF1aXJlZCApIAkJCQkJCQlcDQorCXsJCQkJCQkJCQkJCQlcDQorCQl2VGFza1N3aXRjaENvbnRleHQoKTsJCQkJCQlcDQorCX0JCQkJCQkJCQkJCQlcDQorfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIA0KIC8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCi0gICAgI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICAgICAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgfQ0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQogDQogI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQorDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvSUFSL0F0bWVsU0FNOVhFL0lTUl9TdXBwb3J0LmggYi9wb3J0YWJsZS9JQVIvQXRtZWxTQU05WEUvSVNSX1N1cHBvcnQuaAppbmRleCAzMzhkMDUyLi40YTMyZjM5IDEwMDY0NAotLS0gYS9wb3J0YWJsZS9JQVIvQXRtZWxTQU05WEUvSVNSX1N1cHBvcnQuaAorKysgYi9wb3J0YWJsZS9JQVIvQXRtZWxTQU05WEUvSVNSX1N1cHBvcnQuaApAQCAtMSw5NiArMSw3OCBAQAotRVhURVJOIHB4Q3VycmVudFRDQg0KLUVYVEVSTiB1bENyaXRpY2FsTmVzdGluZw0KKwlFWFRFUk4gcHhDdXJyZW50VENCDQorCUVYVEVSTiB1bENyaXRpY2FsTmVzdGluZw0KIA0KLTsNCi1Db250ZXh0IHNhdmUgYW5kIHJlc3RvcmUgbWFjcm8gZGVmaW5pdGlvbnMNCi07DQorOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ow0KKzsgQ29udGV4dCBzYXZlIGFuZCByZXN0b3JlIG1hY3JvIGRlZmluaXRpb25zDQorOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ow0KIA0KIHBvcnRTQVZFX0NPTlRFWFQgTUFDUk8NCiANCi07DQotUHVzaCBSMCBhcyB3ZSBhcmUgZ29pbmcgdG8gdXNlIHRoZSByZWdpc3Rlci4NCi0gICBTVE1EQiBTUCAhLCB7IFIwIH0NCisJOyBQdXNoIFIwIGFzIHdlIGFyZSBnb2luZyB0byB1c2UgdGhlIHJlZ2lzdGVyLiAJCQkJCQ0KKwlTVE1EQglTUCEsIHtSMH0NCiANCi07DQotU2V0IFIwIHRvIHBvaW50IHRvIHRoZSB0YXNrIHN0YWNrIHBvaW50ZXIuDQotICAgU1RNREIgU1AsIHsgU1AgfSBeDQotTk9QDQotU1VCIFNQLCBTUCwgIyA0DQotTERNSUEgU1AgISwgeyBSMCB9DQorCTsgU2V0IFIwIHRvIHBvaW50IHRvIHRoZSB0YXNrIHN0YWNrIHBvaW50ZXIuIAkJCQkJDQorCVNUTURCCVNQLCB7U1B9Xg0KKwlOT1ANCisJU1VCCQlTUCwgU1AsICM0DQorCUxETUlBCVNQISwge1IwfQ0KIA0KLTsNCi1QdXNoIHRoZSByZXR1cm4gYWRkcmVzcyBvbnRvIHRoZSBzdGFjay4NCi0gICAgICAgICAgU1RNREIgUjAgISwgeyBMUiB9DQorCTsgUHVzaCB0aGUgcmV0dXJuIGFkZHJlc3Mgb250byB0aGUgc3RhY2suIAkJCQkJCQ0KKwlTVE1EQglSMCEsIHtMUn0NCiANCi07DQorCTsgTm93IHdlIGhhdmUgc2F2ZWQgTFIgd2UgY2FuIHVzZSBpdCBpbnN0ZWFkIG9mIFIwLiAJCQkJDQorCU1PVgkJTFIsIFIwDQogDQotTm93IHdlIGhhdmUgc2F2ZWQgTFIgd2UgY2FuIHVzZSBpdCBpbnN0ZWFkIG9mIFIwLg0KLSAgIE1PViBMUiwgUjANCisJOyBQb3AgUjAgc28gd2UgY2FuIHNhdmUgaXQgb250byB0aGUgc3lzdGVtIG1vZGUgc3RhY2suIAkJCQ0KKwlMRE1JQQlTUCEsIHtSMH0NCiANCi07DQotUG9wIFIwIHNvIHdlIGNhbiBzYXZlIGl0IG9udG8gdGhlIHN5c3RlbSBtb2RlIHN0YWNrLg0KLSAgIExETUlBIFNQICEsIHsgUjAgfQ0KKwk7IFB1c2ggYWxsIHRoZSBzeXN0ZW0gbW9kZSByZWdpc3RlcnMgb250byB0aGUgdGFzayBzdGFjay4gCQkNCisJU1RNREIJTFIsIHtSMC1MUn1eDQorCU5PUA0KKwlTVUIJCUxSLCBMUiwgIzYwDQogDQotOw0KLVB1c2ggYWxsIHRoZSBzeXN0ZW0gbW9kZSByZWdpc3RlcnMgb250byB0aGUgdGFzayBzdGFjay4NCi0gICBTVE1EQiBMUiwgeyBSMCAtIExSIH0gXg0KLU5PUA0KLVNVQiBMUiwgTFIsICMgNjANCisJOyBQdXNoIHRoZSBTUFNSIG9udG8gdGhlIHRhc2sgc3RhY2suIAkJCQkJCQkNCisJTVJTCQlSMCwgU1BTUg0KKwlTVE1EQglMUiEsIHtSMH0NCiANCi07DQotUHVzaCB0aGUgU1BTUiBvbnRvIHRoZSB0YXNrIHN0YWNrLg0KLSAgIE1SUyBSMCwgU1BTUg0KLVNUTURCIExSICEsIHsgUjAgfQ0KKwlMRFIJCVIwLCA9dWxDcml0aWNhbE5lc3RpbmcgDQorCUxEUgkJUjAsIFtSMF0NCisJU1RNREIJTFIhLCB7UjB9DQogDQotTERSIFIwLCA9IHVsQ3JpdGljYWxOZXN0aW5nDQotICAgICAgICAgIExEUiBSMCwgWyBSMCBdDQotU1RNREIgTFIgISwgeyBSMCB9DQorCTsgU3RvcmUgdGhlIG5ldyB0b3Agb2Ygc3RhY2sgZm9yIHRoZSB0YXNrLiAJCQkJCQkNCisJTERSCQlSMSwgPXB4Q3VycmVudFRDQg0KKwlMRFIJCVIwLCBbUjFdDQorCVNUUgkJTFIsIFtSMF0NCiANCi07DQotU3RvcmUgdGhlIG5ldyB0b3Agb2Ygc3RhY2sgZm9yIHRoZSB0YXNrLg0KLSAgIExEUiBSMSwgPSBweEN1cnJlbnRUQ0INCi0gICAgICAgICAgICAgTERSIFIwLCBbIFIxIF0NCi1TVFIgTFIsIFsgUjAgXQ0KLQ0KLUVORE0NCisJRU5ETQ0KIA0KIA0KIHBvcnRSRVNUT1JFX0NPTlRFWFQgTUFDUk8NCiANCi07DQotU2V0IHRoZSBMUiB0byB0aGUgdGFzayBzdGFjay4NCi0gICBMRFIgUjEsID0gcHhDdXJyZW50VENCDQotICAgICAgICAgICAgIExEUiBSMCwgWyBSMSBdDQotTERSIExSLCBbIFIwIF0NCisJOyBTZXQgdGhlIExSIHRvIHRoZSB0YXNrIHN0YWNrLiAJCQkJCQkJCQkNCisJTERSCQlSMSwgPXB4Q3VycmVudFRDQg0KKwlMRFIJCVIwLCBbUjFdDQorCUxEUgkJTFIsIFtSMF0NCiANCi07DQotVGhlIGNyaXRpY2FsIG5lc3RpbmcgZGVwdGggaXMgdGhlIGZpcnN0IGl0ZW0gb24gdGhlIHN0YWNrLg0KLSAgIDsNCi1Mb2FkIGl0IGludG8gdGhlIHVsQ3JpdGljYWxOZXN0aW5nIHZhcmlhYmxlLg0KLSAgIExEUiBSMCwgPSB1bENyaXRpY2FsTmVzdGluZw0KLSAgICAgICAgICAgICBMRE1GRCBMUiAhLCB7IFIxIH0NCi1TVFIgUjEsIFsgUjAgXQ0KKwk7IFRoZSBjcml0aWNhbCBuZXN0aW5nIGRlcHRoIGlzIHRoZSBmaXJzdCBpdGVtIG9uIHRoZSBzdGFjay4gCQ0KKwk7IExvYWQgaXQgaW50byB0aGUgdWxDcml0aWNhbE5lc3RpbmcgdmFyaWFibGUuIAkJCQkJDQorCUxEUgkJUjAsID11bENyaXRpY2FsTmVzdGluZw0KKwlMRE1GRAlMUiEsIHtSMX0NCisJU1RSCQlSMSwgW1IwXQ0KIA0KLTsNCi1HZXQgdGhlIFNQU1IgZnJvbSB0aGUgc3RhY2suDQotICAgTERNRkQgTFIgISwgeyBSMCB9DQotTVNSIFNQU1JfY3hzZiwgUjANCisJOyBHZXQgdGhlIFNQU1IgZnJvbSB0aGUgc3RhY2suIAkJCQkJCQkJCQ0KKwlMRE1GRAlMUiEsIHtSMH0NCisJTVNSCQlTUFNSX2N4c2YsIFIwDQogDQotOw0KLVJlc3RvcmUgYWxsIHN5c3RlbSBtb2RlIHJlZ2lzdGVycyBmb3IgdGhlIHRhc2suDQotICAgTERNRkQgTFIsIHsgUjAgLSBSMTQgfSBeDQotTk9QDQorCTsgUmVzdG9yZSBhbGwgc3lzdGVtIG1vZGUgcmVnaXN0ZXJzIGZvciB0aGUgdGFzay4gCQkJCQ0KKwlMRE1GRAlMUiwge1IwLVIxNH1eDQorCU5PUA0KIA0KLTsNCi1SZXN0b3JlIHRoZSByZXR1cm4gYWRkcmVzcy4NCi0gICAgICAgICAgTERSIExSLCBbIExSLCAjICsgNjAgXQ0KKwk7IFJlc3RvcmUgdGhlIHJldHVybiBhZGRyZXNzLiAJCQkJCQkJCQkNCisJTERSCQlMUiwgW0xSLCAjKzYwXQ0KIA0KLTsNCisJOyBBbmQgcmV0dXJuIC0gY29ycmVjdGluZyB0aGUgb2Zmc2V0IGluIHRoZSBMUiB0byBvYnRhaW4gdGhlIAkNCisJOyBjb3JyZWN0IGFkZHJlc3MuIAkJCQkJCQkJCQkJCQ0KKwlTVUJTCVBDLCBMUiwgIzQNCiANCi1BbmQgcmV0dXJuIC1jb3JyZWN0aW5nIHRoZSBvZmZzZXQgaW4gdGhlIExSIHRvIG9idGFpbiB0aGUNCi07DQorCUVORE0NCiANCi1jb3JyZWN0IGFkZHJlc3MuDQotICAgU1VCUyBQQywgTFIsICMgNA0KLQ0KLUVORE0NCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9JQVIvQXRtZWxTQU05WEUvcG9ydC5jIGIvcG9ydGFibGUvSUFSL0F0bWVsU0FNOVhFL3BvcnQuYwppbmRleCBmOTZlNTc2Li5iNjVhMDdjIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9JQVIvQXRtZWxTQU05WEUvcG9ydC5jCisrKyBiL3BvcnRhYmxlL0lBUi9BdG1lbFNBTTlYRS9wb3J0LmMKQEAgLTI2LDggKzI2LDggQEAKICAqLw0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0qIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBBdG1lbCBBUk03IHBvcnQuDQotKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyAqIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBBdG1lbCBBUk03IHBvcnQuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiANCiAvKiBTdGFuZGFyZCBpbmNsdWRlcy4gKi8NCkBAIC01MCwyMSArNTAsMjEgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIENvbnN0YW50cyByZXF1aXJlZCB0byBzZXR1cCB0aGUgaW5pdGlhbCBzdGFjay4gKi8NCi0jZGVmaW5lIHBvcnRJTklUSUFMX1NQU1IgICAgICAgICAgICggKCBTdGFja1R5cGVfdCApIDB4MWYgKSAgICAgIC8qIFN5c3RlbSBtb2RlLCBBUk0gbW9kZSwgaW50ZXJydXB0cyBlbmFibGVkLiAqLw0KLSNkZWZpbmUgcG9ydFRIVU1CX01PREVfQklUICAgICAgICAgKCAoIFN0YWNrVHlwZV90ICkgMHgyMCApDQotI2RlZmluZSBwb3J0SU5TVFJVQ1RJT05fU0laRSAgICAgICAoICggU3RhY2tUeXBlX3QgKSA0ICkNCisjZGVmaW5lIHBvcnRJTklUSUFMX1NQU1IJCQkJKCAoIFN0YWNrVHlwZV90ICkgMHgxZiApIC8qIFN5c3RlbSBtb2RlLCBBUk0gbW9kZSwgaW50ZXJydXB0cyBlbmFibGVkLiAqLw0KKyNkZWZpbmUgcG9ydFRIVU1CX01PREVfQklUCQkJCSggKCBTdGFja1R5cGVfdCApIDB4MjAgKQ0KKyNkZWZpbmUgcG9ydElOU1RSVUNUSU9OX1NJWkUJCQkoICggU3RhY2tUeXBlX3QgKSA0ICkNCiANCiAvKiBDb25zdGFudHMgcmVxdWlyZWQgdG8gc2V0dXAgdGhlIFBJVC4gKi8NCi0jZGVmaW5lIHBvcnQxTUh6X0lOX0h6ICAgICAgICAgICAgICggMTAwMDAwMHVsICkNCi0jZGVmaW5lIHBvcnQxU0VDT05EX0lOX3VTICAgICAgICAgICggMTAwMDAwMC4wICkNCisjZGVmaW5lIHBvcnQxTUh6X0lOX0h6IAkJCQkJKCAxMDAwMDAwdWwgKQ0KKyNkZWZpbmUgcG9ydDFTRUNPTkRfSU5fdVMJCQkJKCAxMDAwMDAwLjAgKQ0KIA0KIC8qIENvbnN0YW50cyByZXF1aXJlZCB0byBoYW5kbGUgY3JpdGljYWwgc2VjdGlvbnMuICovDQotI2RlZmluZSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyAgICAoICggdWludDMyX3QgKSAwICkNCisjZGVmaW5lIHBvcnROT19DUklUSUNBTF9ORVNUSU5HIAkJKCAoIHVpbnQzMl90ICkgMCApDQogDQogDQotI2RlZmluZSBwb3J0SU5UX0xFVkVMX1NFTlNJVElWRSAgICAwDQotI2RlZmluZSBwb3J0UElUX0VOQUJMRSAgICAgICAgICAgICAoICggdWludDE2X3QgKSAweDEgPDwgMjQgKQ0KLSNkZWZpbmUgcG9ydFBJVF9JTlRfRU5BQkxFICAgICAgICAgKCAoIHVpbnQxNl90ICkgMHgxIDw8IDI1ICkNCisjZGVmaW5lIHBvcnRJTlRfTEVWRUxfU0VOU0lUSVZFICAwDQorI2RlZmluZSBwb3J0UElUX0VOQUJMRSAgICAgIAkoICggdWludDE2X3QgKSAweDEgPDwgMjQgKQ0KKyNkZWZpbmUgcG9ydFBJVF9JTlRfRU5BQkxFICAgICAJKCAoIHVpbnQxNl90ICkgMHgxIDw8IDI1ICkNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBTZXR1cCB0aGUgUElUIHRvIGdlbmVyYXRlIHRoZSB0aWNrIGludGVycnVwdHMuICovDQpAQCAtNzQsOCArNzQsOCBAQAogc3RhdGljIHZvaWQgdlBvcnRUaWNrSVNSKCB2b2lkICk7DQogDQogLyogdWxDcml0aWNhbE5lc3Rpbmcgd2lsbCBnZXQgc2V0IHRvIHplcm8gd2hlbiB0aGUgZmlyc3QgdGFzayBzdGFydHMuICBJdA0KLSAqIGNhbm5vdCBiZSBpbml0aWFsaXNlZCB0byAwIGFzIHRoaXMgd2lsbCBjYXVzZSBpbnRlcnJ1cHRzIHRvIGJlIGVuYWJsZWQNCi0gKiBkdXJpbmcgdGhlIGtlcm5lbCBpbml0aWFsaXNhdGlvbiBwcm9jZXNzLiAqLw0KK2Nhbm5vdCBiZSBpbml0aWFsaXNlZCB0byAwIGFzIHRoaXMgd2lsbCBjYXVzZSBpbnRlcnJ1cHRzIHRvIGJlIGVuYWJsZWQNCitkdXJpbmcgdGhlIGtlcm5lbCBpbml0aWFsaXNhdGlvbiBwcm9jZXNzLiAqLw0KIHVpbnQzMl90IHVsQ3JpdGljYWxOZXN0aW5nID0gKCB1aW50MzJfdCApIDk5OTk7DQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQpAQCAtODYsMTY3ICs4NiwxNzEgQEAKICAqDQogICogU2VlIGhlYWRlciBmaWxlIGZvciBkZXNjcmlwdGlvbi4NCiAgKi8NCi1TdGFja1R5cGVfdCAqIHB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKiBweFRvcE9mU3RhY2ssDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqIHB2UGFyYW1ldGVycyApDQorU3RhY2tUeXBlX3QgKnB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKnB4VG9wT2ZTdGFjaywgVGFza0Z1bmN0aW9uX3QgcHhDb2RlLCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KIHsNCi0gICAgU3RhY2tUeXBlX3QgKiBweE9yaWdpbmFsVE9TOw0KK1N0YWNrVHlwZV90ICpweE9yaWdpbmFsVE9TOw0KIA0KLSAgICBweE9yaWdpbmFsVE9TID0gcHhUb3BPZlN0YWNrOw0KKwlweE9yaWdpbmFsVE9TID0gcHhUb3BPZlN0YWNrOw0KIA0KLSAgICAvKiBUbyBlbnN1cmUgYXNzZXJ0cyBpbiB0YXNrcy5jIGRvbid0IGZhaWwsIGFsdGhvdWdoIGluIHRoaXMgY2FzZSB0aGUgYXNzZXJ0DQotICAgICAqIGlzIG5vdCByZWFsbHkgcmVxdWlyZWQuICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkvKiBUbyBlbnN1cmUgYXNzZXJ0cyBpbiB0YXNrcy5jIGRvbid0IGZhaWwsIGFsdGhvdWdoIGluIHRoaXMgY2FzZSB0aGUgYXNzZXJ0DQorCWlzIG5vdCByZWFsbHkgcmVxdWlyZWQuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBTZXR1cCB0aGUgaW5pdGlhbCBzdGFjayBvZiB0aGUgdGFzay4gIFRoZSBzdGFjayBpcyBzZXQgZXhhY3RseSBhcw0KLSAgICAgKiBleHBlY3RlZCBieSB0aGUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpIG1hY3JvLiAqLw0KKwkvKiBTZXR1cCB0aGUgaW5pdGlhbCBzdGFjayBvZiB0aGUgdGFzay4gIFRoZSBzdGFjayBpcyBzZXQgZXhhY3RseSBhcw0KKwlleHBlY3RlZCBieSB0aGUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpIG1hY3JvLiAqLw0KIA0KLSAgICAvKiBGaXJzdCBvbiB0aGUgc3RhY2sgaXMgdGhlIHJldHVybiBhZGRyZXNzIC0gd2hpY2ggaW4gdGhpcyBjYXNlIGlzIHRoZQ0KLSAgICAgKiBzdGFydCBvZiB0aGUgdGFzay4gIFRoZSBvZmZzZXQgaXMgYWRkZWQgdG8gbWFrZSB0aGUgcmV0dXJuIGFkZHJlc3MgYXBwZWFyDQotICAgICAqIGFzIGl0IHdvdWxkIHdpdGhpbiBhbiBJUlEgSVNSLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB4Q29kZSArIHBvcnRJTlNUUlVDVElPTl9TSVpFOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJLyogRmlyc3Qgb24gdGhlIHN0YWNrIGlzIHRoZSByZXR1cm4gYWRkcmVzcyAtIHdoaWNoIGluIHRoaXMgY2FzZSBpcyB0aGUNCisJc3RhcnQgb2YgdGhlIHRhc2suICBUaGUgb2Zmc2V0IGlzIGFkZGVkIHRvIG1ha2UgdGhlIHJldHVybiBhZGRyZXNzIGFwcGVhcg0KKwlhcyBpdCB3b3VsZCB3aXRoaW4gYW4gSVJRIElTUi4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBweENvZGUgKyBwb3J0SU5TVFJVQ1RJT05fU0laRTsJCQ0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweGFhYWFhYWFhOyAgICAvKiBSMTQgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHhPcmlnaW5hbFRPUzsgLyogU3RhY2sgdXNlZCB3aGVuIHRhc2sgc3RhcnRzIGdvZXMgaW4gUjEzLiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDEyMTIxMjEyOyAgICAvKiBSMTIgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMTExMTExMTsgICAgLyogUjExICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTAxMDEwMTA7ICAgIC8qIFIxMCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA5MDkwOTA5OyAgICAvKiBSOSAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA4MDgwODA4OyAgICAvKiBSOCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA3MDcwNzA3OyAgICAvKiBSNyAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA2MDYwNjA2OyAgICAvKiBSNiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA1MDUwNTA1OyAgICAvKiBSNSAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA0MDQwNDA0OyAgICAvKiBSNCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAzMDMwMzAzOyAgICAvKiBSMyAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAyMDIwMjAyOyAgICAvKiBSMiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAxMDEwMTAxOyAgICAvKiBSMSAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweGFhYWFhYWFhOwkvKiBSMTQgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB4T3JpZ2luYWxUT1M7IC8qIFN0YWNrIHVzZWQgd2hlbiB0YXNrIHN0YXJ0cyBnb2VzIGluIFIxMy4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMjEyMTIxMjsJLyogUjEyICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDExMTExMTExOwkvKiBSMTEgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTAxMDEwMTA7CS8qIFIxMCAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwOTA5MDkwOTsJLyogUjkgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDgwODA4MDg7CS8qIFI4ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA3MDcwNzA3OwkvKiBSNyAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNjA2MDYwNjsJLyogUjYgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDUwNTA1MDU7CS8qIFI1ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA0MDQwNDA0OwkvKiBSNCAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMzAzMDMwMzsJLyogUjMgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDIwMjAyMDI7CS8qIFIyICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAxMDEwMTAxOwkvKiBSMSAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQogDQotICAgIC8qIFdoZW4gdGhlIHRhc2sgc3RhcnRzIGlzIHdpbGwgZXhwZWN0IHRvIGZpbmQgdGhlIGZ1bmN0aW9uIHBhcmFtZXRlciBpbg0KLSAgICAgKiBSMC4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwdlBhcmFtZXRlcnM7IC8qIFIwICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkvKiBXaGVuIHRoZSB0YXNrIHN0YXJ0cyBpcyB3aWxsIGV4cGVjdCB0byBmaW5kIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXIgaW4NCisJUjAuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHZQYXJhbWV0ZXJzOyAvKiBSMCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgLyogVGhlIHN0YXR1cyByZWdpc3RlciBpcyBzZXQgZm9yIHN5c3RlbSBtb2RlLCB3aXRoIGludGVycnVwdHMgZW5hYmxlZC4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwb3J0SU5JVElBTF9TUFNSOw0KKwkvKiBUaGUgc3RhdHVzIHJlZ2lzdGVyIGlzIHNldCBmb3Igc3lzdGVtIG1vZGUsIHdpdGggaW50ZXJydXB0cyBlbmFibGVkLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHBvcnRJTklUSUFMX1NQU1I7DQorCQ0KKwkjaWZkZWYgVEhVTUJfSU5URVJXT1JLDQorCXsNCisJCS8qIFdlIHdhbnQgdGhlIHRhc2sgdG8gc3RhcnQgaW4gdGh1bWIgbW9kZS4gKi8NCisJCSpweFRvcE9mU3RhY2sgfD0gcG9ydFRIVU1CX01PREVfQklUOw0KKwl9DQorCSNlbmRpZg0KKwkNCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgICNpZmRlZiBUSFVNQl9JTlRFUldPUksNCi0gICAgICAgIHsNCi0gICAgICAgICAgICAvKiBXZSB3YW50IHRoZSB0YXNrIHRvIHN0YXJ0IGluIHRodW1iIG1vZGUuICovDQotICAgICAgICAgICAgKnB4VG9wT2ZTdGFjayB8PSBwb3J0VEhVTUJfTU9ERV9CSVQ7DQotICAgICAgICB9DQotICAgICNlbmRpZg0KKwkvKiBJbnRlcnJ1cHQgZmxhZ3MgY2Fubm90IGFsd2F5cyBiZSBzdG9yZWQgb24gdGhlIHN0YWNrIGFuZCB3aWxsDQorCWluc3RlYWQgYmUgc3RvcmVkIGluIGEgdmFyaWFibGUsIHdoaWNoIGlzIHRoZW4gc2F2ZWQgYXMgcGFydCBvZiB0aGUNCisJdGFza3MgY29udGV4dC4gKi8NCisJKnB4VG9wT2ZTdGFjayA9IHBvcnROT19DUklUSUNBTF9ORVNUSU5HOw0KIA0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0NCi0gICAgLyogSW50ZXJydXB0IGZsYWdzIGNhbm5vdCBhbHdheXMgYmUgc3RvcmVkIG9uIHRoZSBzdGFjayBhbmQgd2lsbA0KLSAgICAgKiBpbnN0ZWFkIGJlIHN0b3JlZCBpbiBhIHZhcmlhYmxlLCB3aGljaCBpcyB0aGVuIHNhdmVkIGFzIHBhcnQgb2YgdGhlDQotICAgICAqIHRhc2tzIGNvbnRleHQuICovDQotICAgICpweFRvcE9mU3RhY2sgPSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORzsNCi0NCi0gICAgcmV0dXJuIHB4VG9wT2ZTdGFjazsNCisJcmV0dXJuIHB4VG9wT2ZTdGFjazsJDQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIEJhc2VUeXBlX3QgeFBvcnRTdGFydFNjaGVkdWxlciggdm9pZCApDQogew0KLSAgICBleHRlcm4gdm9pZCB2UG9ydFN0YXJ0Rmlyc3RUYXNrKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdlBvcnRTdGFydEZpcnN0VGFzayggdm9pZCApOw0KIA0KLSAgICAvKiBTdGFydCB0aGUgdGltZXIgdGhhdCBnZW5lcmF0ZXMgdGhlIHRpY2sgSVNSLiAgSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQNCi0gICAgICogaGVyZSBhbHJlYWR5LiAqLw0KLSAgICBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCk7DQorCS8qIFN0YXJ0IHRoZSB0aW1lciB0aGF0IGdlbmVyYXRlcyB0aGUgdGljayBJU1IuICBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZA0KKwloZXJlIGFscmVhZHkuICovDQorCXBydlNldHVwVGltZXJJbnRlcnJ1cHQoKTsNCiANCi0gICAgLyogU3RhcnQgdGhlIGZpcnN0IHRhc2suICovDQotICAgIHZQb3J0U3RhcnRGaXJzdFRhc2soKTsNCisJLyogU3RhcnQgdGhlIGZpcnN0IHRhc2suICovDQorCXZQb3J0U3RhcnRGaXJzdFRhc2soKTsJDQogDQotICAgIC8qIFNob3VsZCBub3QgZ2V0IGhlcmUhICovDQotICAgIHJldHVybiAwOw0KKwkvKiBTaG91bGQgbm90IGdldCBoZXJlISAqLw0KKwlyZXR1cm4gMDsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogdm9pZCB2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApDQogew0KLSAgICAvKiBJdCBpcyB1bmxpa2VseSB0aGF0IHRoZSBBUk0gcG9ydCB3aWxsIHJlcXVpcmUgdGhpcyBmdW5jdGlvbiBhcyB0aGVyZQ0KLSAgICAgKiBpcyBub3RoaW5nIHRvIHJldHVybiB0by4gICovDQorCS8qIEl0IGlzIHVubGlrZWx5IHRoYXQgdGhlIEFSTSBwb3J0IHdpbGwgcmVxdWlyZSB0aGlzIGZ1bmN0aW9uIGFzIHRoZXJlDQorCWlzIG5vdGhpbmcgdG8gcmV0dXJuIHRvLiAgKi8NCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogc3RhdGljIF9fYXJtIHZvaWQgdlBvcnRUaWNrSVNSKCB2b2lkICkNCiB7DQotICAgIHZvbGF0aWxlIHVpbnQzMl90IHVsRHVtbXk7DQotDQotICAgIC8qIEluY3JlbWVudCB0aGUgdGljayBjb3VudCAtIHdoaWNoIG1heSB3YWtlIHNvbWUgdGFza3MgYnV0IGFzIHRoZQ0KLSAgICAgKiBwcmVlbXB0aXZlIHNjaGVkdWxlciBpcyBub3QgYmVpbmcgdXNlZCBhbnkgd29rZW4gdGFzayBpcyBub3QgZ2l2ZW4NCi0gICAgICogcHJvY2Vzc29yIHRpbWUgbm8gbWF0dGVyIHdoYXQgaXRzIHByaW9yaXR5LiAqLw0KLSAgICBpZiggeFRhc2tJbmNyZW1lbnRUaWNrKCkgIT0gcGRGQUxTRSApDQotICAgIHsNCi0gICAgICAgIHZUYXNrU3dpdGNoQ29udGV4dCgpOw0KLSAgICB9DQotDQotICAgIC8qIENsZWFyIHRoZSBQSVQgaW50ZXJydXB0LiAqLw0KLSAgICB1bER1bW15ID0gQVQ5MUNfQkFTRV9QSVRDLT5QSVRDX1BJVlI7DQotDQotICAgIC8qIFRvIHJlbW92ZSBjb21waWxlciB3YXJuaW5nLiAqLw0KLSAgICAoIHZvaWQgKSB1bER1bW15Ow0KLQ0KLSAgICAvKiBUaGUgQUlDIGlzIGNsZWFyZWQgaW4gdGhlIGFzbSB3cmFwcGVyLCBvdXRzaWRlIG9mIHRoaXMgZnVuY3Rpb24uICovDQordm9sYXRpbGUgdWludDMyX3QgdWxEdW1teTsNCisJDQorCS8qIEluY3JlbWVudCB0aGUgdGljayBjb3VudCAtIHdoaWNoIG1heSB3YWtlIHNvbWUgdGFza3MgYnV0IGFzIHRoZQ0KKwlwcmVlbXB0aXZlIHNjaGVkdWxlciBpcyBub3QgYmVpbmcgdXNlZCBhbnkgd29rZW4gdGFzayBpcyBub3QgZ2l2ZW4NCisJcHJvY2Vzc29yIHRpbWUgbm8gbWF0dGVyIHdoYXQgaXRzIHByaW9yaXR5LiAqLw0KKwlpZiggeFRhc2tJbmNyZW1lbnRUaWNrKCkgIT0gcGRGQUxTRSApDQorCXsNCisJCXZUYXNrU3dpdGNoQ29udGV4dCgpOw0KKwl9DQorCQkNCisJLyogQ2xlYXIgdGhlIFBJVCBpbnRlcnJ1cHQuICovDQorCXVsRHVtbXkgPSBBVDkxQ19CQVNFX1BJVEMtPlBJVENfUElWUjsNCisJDQorCS8qIFRvIHJlbW92ZSBjb21waWxlciB3YXJuaW5nLiAqLw0KKwkoIHZvaWQgKSB1bER1bW15Ow0KKwkNCisJLyogVGhlIEFJQyBpcyBjbGVhcmVkIGluIHRoZSBhc20gd3JhcHBlciwgb3V0c2lkZSBvZiB0aGlzIGZ1bmN0aW9uLiAqLw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICkNCiB7DQotICAgIGNvbnN0IHVpbnQzMl90IHVsUGVyaW9kSW5fdVMgPSAoIDEuMCAvICggZG91YmxlICkgY29uZmlnVElDS19SQVRFX0haICkgKiBwb3J0MVNFQ09ORF9JTl91UzsNCitjb25zdCB1aW50MzJfdCB1bFBlcmlvZEluX3VTID0gKCAxLjAgLyAoIGRvdWJsZSApIGNvbmZpZ1RJQ0tfUkFURV9IWiApICogcG9ydDFTRUNPTkRfSU5fdVM7DQogDQotICAgIC8qIFNldHVwIHRoZSBQSVQgZm9yIHRoZSByZXF1aXJlZCBmcmVxdWVuY3kuICovDQotICAgIFBJVF9Jbml0KCB1bFBlcmlvZEluX3VTLCBCT0FSRF9NQ0sgLyBwb3J0MU1Iel9JTl9IeiApOw0KLQ0KLSAgICAvKiBTZXR1cCB0aGUgUElUIGludGVycnVwdC4gKi8NCi0gICAgQUlDX0Rpc2FibGVJVCggQVQ5MUNfSURfU1lTICk7DQotICAgIEFJQ19Db25maWd1cmVJVCggQVQ5MUNfSURfU1lTLCBBVDkxQ19BSUNfUFJJT1JfTE9XRVNULCB2UG9ydFRpY2tJU1IgKTsNCi0gICAgQUlDX0VuYWJsZUlUKCBBVDkxQ19JRF9TWVMgKTsNCi0gICAgUElUX0VuYWJsZUlUKCk7DQorCS8qIFNldHVwIHRoZSBQSVQgZm9yIHRoZSByZXF1aXJlZCBmcmVxdWVuY3kuICovDQorCVBJVF9Jbml0KCB1bFBlcmlvZEluX3VTLCBCT0FSRF9NQ0sgLyBwb3J0MU1Iel9JTl9IeiApOw0KKwkNCisJLyogU2V0dXAgdGhlIFBJVCBpbnRlcnJ1cHQuICovDQorCUFJQ19EaXNhYmxlSVQoIEFUOTFDX0lEX1NZUyApOw0KKwlBSUNfQ29uZmlndXJlSVQoIEFUOTFDX0lEX1NZUywgQVQ5MUNfQUlDX1BSSU9SX0xPV0VTVCwgdlBvcnRUaWNrSVNSICk7DQorCUFJQ19FbmFibGVJVCggQVQ5MUNfSURfU1lTICk7DQorCVBJVF9FbmFibGVJVCgpOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCggdm9pZCApDQogew0KLSAgICAvKiBEaXNhYmxlIGludGVycnVwdHMgZmlyc3QhICovDQotICAgIF9fZGlzYWJsZV9pcnEoKTsNCisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIGZpcnN0ISAqLw0KKwlfX2Rpc2FibGVfaXJxKCk7DQogDQotICAgIC8qIE5vdyBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB1bENyaXRpY2FsTmVzdGluZyBjYW4gYmUgYWNjZXNzZWQNCi0gICAgICogZGlyZWN0bHkuICBJbmNyZW1lbnQgdWxDcml0aWNhbE5lc3RpbmcgdG8ga2VlcCBhIGNvdW50IG9mIGhvdyBtYW55IHRpbWVzDQotICAgICAqIHBvcnRFTlRFUl9DUklUSUNBTCgpIGhhcyBiZWVuIGNhbGxlZC4gKi8NCi0gICAgdWxDcml0aWNhbE5lc3RpbmcrKzsNCisJLyogTm93IGludGVycnVwdHMgYXJlIGRpc2FibGVkIHVsQ3JpdGljYWxOZXN0aW5nIGNhbiBiZSBhY2Nlc3NlZA0KKwlkaXJlY3RseS4gIEluY3JlbWVudCB1bENyaXRpY2FsTmVzdGluZyB0byBrZWVwIGEgY291bnQgb2YgaG93IG1hbnkgdGltZXMNCisJcG9ydEVOVEVSX0NSSVRJQ0FMKCkgaGFzIGJlZW4gY2FsbGVkLiAqLw0KKwl1bENyaXRpY2FsTmVzdGluZysrOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICkNCiB7DQotICAgIGlmKCB1bENyaXRpY2FsTmVzdGluZyA+IHBvcnROT19DUklUSUNBTF9ORVNUSU5HICkNCi0gICAgew0KLSAgICAgICAgLyogRGVjcmVtZW50IHRoZSBuZXN0aW5nIGNvdW50IGFzIHdlIGFyZSBsZWF2aW5nIGEgY3JpdGljYWwgc2VjdGlvbi4gKi8NCi0gICAgICAgIHVsQ3JpdGljYWxOZXN0aW5nLS07DQorCWlmKCB1bENyaXRpY2FsTmVzdGluZyA+IHBvcnROT19DUklUSUNBTF9ORVNUSU5HICkNCisJew0KKwkJLyogRGVjcmVtZW50IHRoZSBuZXN0aW5nIGNvdW50IGFzIHdlIGFyZSBsZWF2aW5nIGEgY3JpdGljYWwgc2VjdGlvbi4gKi8NCisJCXVsQ3JpdGljYWxOZXN0aW5nLS07DQogDQotICAgICAgICAvKiBJZiB0aGUgbmVzdGluZyBsZXZlbCBoYXMgcmVhY2hlZCB6ZXJvIHRoZW4gaW50ZXJydXB0cyBzaG91bGQgYmUNCi0gICAgICAgICAqIHJlLWVuYWJsZWQuICovDQotICAgICAgICBpZiggdWxDcml0aWNhbE5lc3RpbmcgPT0gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIF9fZW5hYmxlX2lycSgpOw0KLSAgICAgICAgfQ0KLSAgICB9DQorCQkvKiBJZiB0aGUgbmVzdGluZyBsZXZlbCBoYXMgcmVhY2hlZCB6ZXJvIHRoZW4gaW50ZXJydXB0cyBzaG91bGQgYmUNCisJCXJlLWVuYWJsZWQuICovDQorCQlpZiggdWxDcml0aWNhbE5lc3RpbmcgPT0gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgKQ0KKwkJew0KKwkJCV9fZW5hYmxlX2lycSgpOw0KKwkJfQ0KKwl9DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKw0KKw0KKw0KKw0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0lBUi9BdG1lbFNBTTlYRS9wb3J0bWFjcm8uaCBiL3BvcnRhYmxlL0lBUi9BdG1lbFNBTTlYRS9wb3J0bWFjcm8uaAppbmRleCBjNjU5NzU2Li5hNzIxYzlmIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9JQVIvQXRtZWxTQU05WEUvcG9ydG1hY3JvLmgKKysrIGIvcG9ydGFibGUvSUFSL0F0bWVsU0FNOVhFL3BvcnRtYWNyby5oCkBAIC0yNywxMyArMjcsMTMgQEAKIA0KIA0KICNpZm5kZWYgUE9SVE1BQ1JPX0gNCi0gICAgI2RlZmluZSBQT1JUTUFDUk9fSA0KKyNkZWZpbmUgUE9SVE1BQ1JPX0gNCiANCi0gICAgI2luY2x1ZGUgPGludHJpbnNpY3MuaD4NCisjaW5jbHVkZSA8aW50cmluc2ljcy5oPg0KIA0KLSAgICAjaWZkZWYgX19jcGx1c3BsdXMNCi0gICAgICAgIGV4dGVybiAiQyIgew0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICogUG9ydCBzcGVjaWZpYyBkZWZpbml0aW9ucy4NCkBAIC00Niw2NyArNDYsNjkgQEAKICAqLw0KIA0KIC8qIFR5cGUgZGVmaW5pdGlvbnMuICovDQotICAgICNkZWZpbmUgcG9ydENIQVIgICAgICAgICAgY2hhcg0KLSAgICAjZGVmaW5lIHBvcnRGTE9BVCAgICAgICAgIGZsb2F0DQotICAgICNkZWZpbmUgcG9ydERPVUJMRSAgICAgICAgZG91YmxlDQotICAgICNkZWZpbmUgcG9ydExPTkcgICAgICAgICAgbG9uZw0KLSAgICAjZGVmaW5lIHBvcnRTSE9SVCAgICAgICAgIHNob3J0DQotICAgICNkZWZpbmUgcG9ydFNUQUNLX1RZUEUgICAgdWludDMyX3QNCi0gICAgI2RlZmluZSBwb3J0QkFTRV9UWVBFICAgICBsb25nDQorI2RlZmluZSBwb3J0Q0hBUgkJY2hhcg0KKyNkZWZpbmUgcG9ydEZMT0FUCQlmbG9hdA0KKyNkZWZpbmUgcG9ydERPVUJMRQkJZG91YmxlDQorI2RlZmluZSBwb3J0TE9ORwkJbG9uZw0KKyNkZWZpbmUgcG9ydFNIT1JUCQlzaG9ydA0KKyNkZWZpbmUgcG9ydFNUQUNLX1RZUEUJdWludDMyX3QNCisjZGVmaW5lIHBvcnRCQVNFX1RZUEUJbG9uZw0KIA0KLSAgICB0eXBlZGVmIHBvcnRTVEFDS19UWVBFICAgU3RhY2tUeXBlX3Q7DQotICAgIHR5cGVkZWYgbG9uZyAgICAgICAgICAgICBCYXNlVHlwZV90Ow0KLSAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgICAgVUJhc2VUeXBlX3Q7DQordHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSBTdGFja1R5cGVfdDsNCit0eXBlZGVmIGxvbmcgQmFzZVR5cGVfdDsNCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgVUJhc2VUeXBlX3Q7DQogDQogDQotICAgICNpZiAoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQotICAgICAgICB0eXBlZGVmIHVpbnQxNl90ICAgICBUaWNrVHlwZV90Ow0KLSAgICAgICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICggVGlja1R5cGVfdCApIDB4ZmZmZg0KLSAgICAjZWxzZQ0KLSAgICAgICAgdHlwZWRlZiB1aW50MzJfdCAgICAgVGlja1R5cGVfdDsNCi0gICAgICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwNCi0gICAgI2VuZGlmDQorI2lmKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KKwl0eXBlZGVmIHVpbnQxNl90IFRpY2tUeXBlX3Q7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIFRpY2tUeXBlX3QgKSAweGZmZmYNCisjZWxzZQ0KKwl0eXBlZGVmIHVpbnQzMl90IFRpY2tUeXBlX3Q7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwNCisjZW5kaWYNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBIYXJkd2FyZSBzcGVjaWZpY3MuICovDQotICAgICNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSCAgICAgICggLTEgKQ0KLSAgICAjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUyAgICAoICggVGlja1R5cGVfdCApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KLSAgICAjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVCAgICA4DQotICAgICNkZWZpbmUgcG9ydFlJRUxEKCkgICAgYXNtICggIlNXSSAwIiApDQotICAgICNkZWZpbmUgcG9ydE5PUCgpICAgICAgYXNtICggIk5PUCIgKQ0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJCSggLTEgKQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TCQkJKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCisjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVAkJCTgNCisjZGVmaW5lIHBvcnRZSUVMRCgpCQkJCQlhc20gKCAiU1dJIDAiICkNCisjZGVmaW5lIHBvcnROT1AoKQkJCQkJYXNtICggIk5PUCIgKQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIENyaXRpY2FsIHNlY3Rpb24gaGFuZGxpbmcuICovDQotICAgIF9fYXJtIF9faW50ZXJ3b3JrIHZvaWQgdlBvcnREaXNhYmxlSW50ZXJydXB0c0Zyb21UaHVtYiggdm9pZCApOw0KLSAgICBfX2FybSBfX2ludGVyd29yayB2b2lkIHZQb3J0RW5hYmxlSW50ZXJydXB0c0Zyb21UaHVtYiggdm9pZCApOw0KLSAgICBfX2FybSBfX2ludGVyd29yayB2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCggdm9pZCApOw0KLSAgICBfX2FybSBfX2ludGVyd29yayB2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICk7DQorX19hcm0gX19pbnRlcndvcmsgdm9pZCB2UG9ydERpc2FibGVJbnRlcnJ1cHRzRnJvbVRodW1iKCB2b2lkICk7DQorX19hcm0gX19pbnRlcndvcmsgdm9pZCB2UG9ydEVuYWJsZUludGVycnVwdHNGcm9tVGh1bWIoIHZvaWQgKTsNCitfX2FybSBfX2ludGVyd29yayB2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCggdm9pZCApOw0KK19fYXJtIF9faW50ZXJ3b3JrIHZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCiANCi0gICAgI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgICAgX19kaXNhYmxlX2lycSgpDQotICAgICNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkgICAgIF9fZW5hYmxlX2lycSgpDQotICAgICNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgICAgICAgIHZQb3J0RW50ZXJDcml0aWNhbCgpDQotICAgICNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKSAgICAgICAgIHZQb3J0RXhpdENyaXRpY2FsKCkNCisjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKQlfX2Rpc2FibGVfaXJxKCkNCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpCQlfX2VuYWJsZV9pcnEoKQ0KKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkJCXZQb3J0RW50ZXJDcml0aWNhbCgpDQorI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpCQkJdlBvcnRFeGl0Q3JpdGljYWwoKQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFRhc2sgdXRpbGl0aWVzLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRFTkRfU1dJVENISU5HX0lTUiggeFN3aXRjaFJlcXVpcmVkICkgXA0KLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgZXh0ZXJuIHZvaWQgdlRhc2tTd2l0Y2hDb250ZXh0KCB2b2lkICk7ICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgaWYoIHhTd2l0Y2hSZXF1aXJlZCApICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIHZUYXNrU3dpdGNoQ29udGV4dCgpOyAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB9DQorI2RlZmluZSBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHhTd2l0Y2hSZXF1aXJlZCApIAlcDQorewkJCQkJCQkJCQkJCQlcDQorZXh0ZXJuIHZvaWQgdlRhc2tTd2l0Y2hDb250ZXh0KCB2b2lkICk7CQkJCVwNCisJCQkJCQkJCQkJCQkJXA0KKwlpZiggeFN3aXRjaFJlcXVpcmVkICkgCQkJCQkJCVwNCisJewkJCQkJCQkJCQkJCVwNCisJCXZUYXNrU3dpdGNoQ29udGV4dCgpOwkJCQkJCVwNCisJfQkJCQkJCQkJCQkJCVwNCit9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogDQogLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQotICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KLSAgICAjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgICAgICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCiANCi0gICAgI2lmZGVmIF9fY3BsdXNwbHVzDQotICAgICAgICB9DQotICAgICNlbmRpZg0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCiANCiAjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8NCisNCisNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9JQVIvTFBDMjAwMC9JU1JfU3VwcG9ydC5oIGIvcG9ydGFibGUvSUFSL0xQQzIwMDAvSVNSX1N1cHBvcnQuaAppbmRleCA3MmY0YjE1Li4zNjBmZmY2IDEwMDY0NAotLS0gYS9wb3J0YWJsZS9JQVIvTFBDMjAwMC9JU1JfU3VwcG9ydC5oCisrKyBiL3BvcnRhYmxlL0lBUi9MUEMyMDAwL0lTUl9TdXBwb3J0LmgKQEAgLTEsMTIzICsxLDEwNSBAQAotOyAvKg0KLSAgICogOyAqIEZyZWVSVE9TIEtlcm5lbCBWMTAuMy4xDQotICAgKiA7ICogQ29weXJpZ2h0IChDKSAyMDIwIEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuICBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICogOyAqDQotICAgKiA7ICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZg0KLSAgICogOyAqIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluDQotICAgKiA7ICogdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bw0KLSAgICogOyAqIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mDQotICAgKiA7ICogdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLA0KLSAgICogOyAqIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOg0KLSAgICogOyAqDQotICAgKiA7ICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsDQotICAgKiA7ICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4NCi0gICAqIDsgKg0KLSAgICogOyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SDQotICAgKiA7ICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MNCi0gICAqIDsgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1INCi0gICAqIDsgKiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVINCi0gICAqIDsgKiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTg0KLSAgICogOyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuDQotICAgKiA7ICoNCi0gICAqIDsgKiBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZw0KLSAgICogOyAqIGh0dHA6Ly9hd3MuYW1hem9uLmNvbS9mcmVlcnRvcw0KLSAgICogOyAqDQotICAgKiA7ICogMSB0YWIgPT0gNCBzcGFjZXMhDQotICAgKiA7ICovDQorOy8qDQorOyAqIEZyZWVSVE9TIEtlcm5lbCBWMTAuMy4xDQorOyAqIENvcHlyaWdodCAoQykgMjAyMCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCis7ICoNCis7ICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZg0KKzsgKiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbg0KKzsgKiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvDQorOyAqIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mDQorOyAqIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywNCis7ICogc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6DQorOyAqDQorOyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbA0KKzsgKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLg0KKzsgKg0KKzsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUg0KKzsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUw0KKzsgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1INCis7ICogQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSDQorOyAqIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElODQorOyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuDQorOyAqDQorOyAqIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnDQorOyAqIGh0dHA6Ly9hd3MuYW1hem9uLmNvbS9mcmVlcnRvcw0KKzsgKg0KKzsgKiAxIHRhYiA9PSA0IHNwYWNlcyENCis7ICovDQogDQotRVhURVJOIHB4Q3VycmVudFRDQg0KLUVYVEVSTiB1bENyaXRpY2FsTmVzdGluZw0KKwlFWFRFUk4gcHhDdXJyZW50VENCDQorCUVYVEVSTiB1bENyaXRpY2FsTmVzdGluZw0KIA0KLTsNCi1Db250ZXh0IHNhdmUgYW5kIHJlc3RvcmUgbWFjcm8gZGVmaW5pdGlvbnMNCi07DQorOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ow0KKzsgQ29udGV4dCBzYXZlIGFuZCByZXN0b3JlIG1hY3JvIGRlZmluaXRpb25zDQorOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ow0KIA0KIHBvcnRTQVZFX0NPTlRFWFQgTUFDUk8NCiANCi07DQotUHVzaCBSMCBhcyB3ZSBhcmUgZ29pbmcgdG8gdXNlIHRoZSByZWdpc3Rlci4NCi0gICBTVE1EQiBTUCAhLCB7IFIwIH0NCisJOyBQdXNoIFIwIGFzIHdlIGFyZSBnb2luZyB0byB1c2UgdGhlIHJlZ2lzdGVyLg0KKwlTVE1EQglTUCEsIHtSMH0NCiANCi07DQotU2V0IFIwIHRvIHBvaW50IHRvIHRoZSB0YXNrIHN0YWNrIHBvaW50ZXIuDQotICAgU1RNREIgU1AsIHsgU1AgfSBeDQotTk9QDQotU1VCIFNQLCBTUCwgIyA0DQotTERNSUEgU1AgISwgeyBSMCB9DQorCTsgU2V0IFIwIHRvIHBvaW50IHRvIHRoZSB0YXNrIHN0YWNrIHBvaW50ZXIuDQorCVNUTURCCVNQLCB7U1B9Xg0KKwlOT1ANCisJU1VCCQlTUCwgU1AsICM0DQorCUxETUlBCVNQISwge1IwfQ0KIA0KLTsNCi1QdXNoIHRoZSByZXR1cm4gYWRkcmVzcyBvbnRvIHRoZSBzdGFjay4NCi0gICAgICAgICAgU1RNREIgUjAgISwgeyBMUiB9DQorCTsgUHVzaCB0aGUgcmV0dXJuIGFkZHJlc3Mgb250byB0aGUgc3RhY2suDQorCVNUTURCCVIwISwge0xSfQ0KIA0KLTsNCisJOyBOb3cgd2UgaGF2ZSBzYXZlZCBMUiB3ZSBjYW4gdXNlIGl0IGluc3RlYWQgb2YgUjAuDQorCU1PVgkJTFIsIFIwDQogDQotTm93IHdlIGhhdmUgc2F2ZWQgTFIgd2UgY2FuIHVzZSBpdCBpbnN0ZWFkIG9mIFIwLg0KLSAgIE1PViBMUiwgUjANCisJOyBQb3AgUjAgc28gd2UgY2FuIHNhdmUgaXQgb250byB0aGUgc3lzdGVtIG1vZGUgc3RhY2suDQorCUxETUlBCVNQISwge1IwfQ0KIA0KLTsNCi1Qb3AgUjAgc28gd2UgY2FuIHNhdmUgaXQgb250byB0aGUgc3lzdGVtIG1vZGUgc3RhY2suDQotICAgTERNSUEgU1AgISwgeyBSMCB9DQorCTsgUHVzaCBhbGwgdGhlIHN5c3RlbSBtb2RlIHJlZ2lzdGVycyBvbnRvIHRoZSB0YXNrIHN0YWNrLg0KKwlTVE1EQglMUiwge1IwLUxSfV4NCisJTk9QDQorCVNVQgkJTFIsIExSLCAjNjANCiANCi07DQotUHVzaCBhbGwgdGhlIHN5c3RlbSBtb2RlIHJlZ2lzdGVycyBvbnRvIHRoZSB0YXNrIHN0YWNrLg0KLSAgIFNUTURCIExSLCB7IFIwIC0gTFIgfSBeDQotTk9QDQotU1VCIExSLCBMUiwgIyA2MA0KKwk7IFB1c2ggdGhlIFNQU1Igb250byB0aGUgdGFzayBzdGFjay4NCisJTVJTCQlSMCwgU1BTUg0KKwlTVE1EQglMUiEsIHtSMH0NCiANCi07DQotUHVzaCB0aGUgU1BTUiBvbnRvIHRoZSB0YXNrIHN0YWNrLg0KLSAgIE1SUyBSMCwgU1BTUg0KLVNUTURCIExSICEsIHsgUjAgfQ0KKwlMRFIJCVIwLCA9dWxDcml0aWNhbE5lc3RpbmcNCisJTERSCQlSMCwgW1IwXQ0KKwlTVE1EQglMUiEsIHtSMH0NCiANCi1MRFIgUjAsID0gdWxDcml0aWNhbE5lc3RpbmcNCi0gICAgICAgICAgTERSIFIwLCBbIFIwIF0NCi1TVE1EQiBMUiAhLCB7IFIwIH0NCisJOyBTdG9yZSB0aGUgbmV3IHRvcCBvZiBzdGFjayBmb3IgdGhlIHRhc2suDQorCUxEUgkJUjEsID1weEN1cnJlbnRUQ0INCisJTERSCQlSMCwgW1IxXQ0KKwlTVFIJCUxSLCBbUjBdDQogDQotOw0KLVN0b3JlIHRoZSBuZXcgdG9wIG9mIHN0YWNrIGZvciB0aGUgdGFzay4NCi0gICBMRFIgUjEsID0gcHhDdXJyZW50VENCDQotICAgICAgICAgICAgIExEUiBSMCwgWyBSMSBdDQotU1RSIExSLCBbIFIwIF0NCi0NCi1FTkRNDQorCUVORE0NCiANCiANCiBwb3J0UkVTVE9SRV9DT05URVhUIE1BQ1JPDQogDQotOw0KLVNldCB0aGUgTFIgdG8gdGhlIHRhc2sgc3RhY2suDQotICAgTERSIFIxLCA9IHB4Q3VycmVudFRDQg0KLSAgICAgICAgICAgICBMRFIgUjAsIFsgUjEgXQ0KLUxEUiBMUiwgWyBSMCBdDQorCTsgU2V0IHRoZSBMUiB0byB0aGUgdGFzayBzdGFjay4NCisJTERSCQlSMSwgPXB4Q3VycmVudFRDQg0KKwlMRFIJCVIwLCBbUjFdDQorCUxEUgkJTFIsIFtSMF0NCiANCi07DQotVGhlIGNyaXRpY2FsIG5lc3RpbmcgZGVwdGggaXMgdGhlIGZpcnN0IGl0ZW0gb24gdGhlIHN0YWNrLg0KLSAgIDsNCi1Mb2FkIGl0IGludG8gdGhlIHVsQ3JpdGljYWxOZXN0aW5nIHZhcmlhYmxlLg0KLSAgIExEUiBSMCwgPSB1bENyaXRpY2FsTmVzdGluZw0KLSAgICAgICAgICAgICBMRE1GRCBMUiAhLCB7IFIxIH0NCi1TVFIgUjEsIFsgUjAgXQ0KKwk7IFRoZSBjcml0aWNhbCBuZXN0aW5nIGRlcHRoIGlzIHRoZSBmaXJzdCBpdGVtIG9uIHRoZSBzdGFjay4NCisJOyBMb2FkIGl0IGludG8gdGhlIHVsQ3JpdGljYWxOZXN0aW5nIHZhcmlhYmxlLg0KKwlMRFIJCVIwLCA9dWxDcml0aWNhbE5lc3RpbmcNCisJTERNRkQJTFIhLCB7UjF9DQorCVNUUgkJUjEsIFtSMF0NCiANCi07DQotR2V0IHRoZSBTUFNSIGZyb20gdGhlIHN0YWNrLg0KLSAgIExETUZEIExSICEsIHsgUjAgfQ0KLU1TUiBTUFNSX2N4c2YsIFIwDQorCTsgR2V0IHRoZSBTUFNSIGZyb20gdGhlIHN0YWNrLg0KKwlMRE1GRAlMUiEsIHtSMH0NCisJTVNSCQlTUFNSX2N4c2YsIFIwDQogDQotOw0KLVJlc3RvcmUgYWxsIHN5c3RlbSBtb2RlIHJlZ2lzdGVycyBmb3IgdGhlIHRhc2suDQotICAgTERNRkQgTFIsIHsgUjAgLSBSMTQgfSBeDQotTk9QDQorCTsgUmVzdG9yZSBhbGwgc3lzdGVtIG1vZGUgcmVnaXN0ZXJzIGZvciB0aGUgdGFzay4NCisJTERNRkQJTFIsIHtSMC1SMTR9Xg0KKwlOT1ANCiANCi07DQotUmVzdG9yZSB0aGUgcmV0dXJuIGFkZHJlc3MuDQotICAgICAgICAgIExEUiBMUiwgWyBMUiwgIyArIDYwIF0NCisJOyBSZXN0b3JlIHRoZSByZXR1cm4gYWRkcmVzcy4NCisJTERSCQlMUiwgW0xSLCAjKzYwXQ0KIA0KLTsNCisJOyBBbmQgcmV0dXJuIC0gY29ycmVjdGluZyB0aGUgb2Zmc2V0IGluIHRoZSBMUiB0byBvYnRhaW4gdGhlDQorCTsgY29ycmVjdCBhZGRyZXNzLg0KKwlTVUJTCVBDLCBMUiwgIzQNCiANCi1BbmQgcmV0dXJuIC1jb3JyZWN0aW5nIHRoZSBvZmZzZXQgaW4gdGhlIExSIHRvIG9idGFpbiB0aGUNCi07DQorCUVORE0NCiANCi1jb3JyZWN0IGFkZHJlc3MuDQotICAgU1VCUyBQQywgTFIsICMgNA0KLQ0KLUVORE0NCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9JQVIvTFBDMjAwMC9wb3J0LmMgYi9wb3J0YWJsZS9JQVIvTFBDMjAwMC9wb3J0LmMKaW5kZXggNzY4MjYyNi4uMTM4NWVjMCAxMDA2NDQKLS0tIGEvcG9ydGFibGUvSUFSL0xQQzIwMDAvcG9ydC5jCisrKyBiL3BvcnRhYmxlL0lBUi9MUEMyMDAwL3BvcnQuYwpAQCAtMjYsMTYgKzI2LDE2IEBACiAgKi8NCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgUGhpbGlwcyBBUk03IHBvcnQuDQotKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyAqIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBQaGlsaXBzIEFSTTcgcG9ydC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qDQotICogIENoYW5nZXMgZnJvbSBWMy4yLjINCi0gKg0KLSArIEJ1ZyBmaXggLSBUaGUgcHJlc2NhbGUgdmFsdWUgZm9yIHRoZSB0aW1lciBzZXR1cCBpcyBub3cgd3JpdHRlbiB0byBUMFBSDQotICsgICAgaW5zdGVhZCBvZiBUMFBDLiAgVGhpcyBidWcgd291bGQgaGF2ZSBoYWQgbm8gZWZmZWN0IHVubGVzcyBhIHByZXNjYWxlDQotICsgICAgdmFsdWUgd2FzIGFjdHVhbGx5IHVzZWQuDQotICovDQorCUNoYW5nZXMgZnJvbSBWMy4yLjINCisNCisJKyBCdWcgZml4IC0gVGhlIHByZXNjYWxlIHZhbHVlIGZvciB0aGUgdGltZXIgc2V0dXAgaXMgbm93IHdyaXR0ZW4gdG8gVDBQUg0KKwkgIGluc3RlYWQgb2YgVDBQQy4gIFRoaXMgYnVnIHdvdWxkIGhhdmUgaGFkIG5vIGVmZmVjdCB1bmxlc3MgYSBwcmVzY2FsZQ0KKwkgIHZhbHVlIHdhcyBhY3R1YWxseSB1c2VkLg0KKyovDQogDQogLyogU3RhbmRhcmQgaW5jbHVkZXMuICovDQogI2luY2x1ZGUgPHN0ZGxpYi5oPg0KQEAgLTQ2LDM2ICs0NiwzNiBAQAogI2luY2x1ZGUgInRhc2suaCINCiANCiAvKiBDb25zdGFudHMgcmVxdWlyZWQgdG8gc2V0dXAgdGhlIHRpY2sgSVNSLiAqLw0KLSNkZWZpbmUgcG9ydEVOQUJMRV9USU1FUiAgICAgICAgICAgICAoICggdWludDhfdCApIDB4MDEgKQ0KLSNkZWZpbmUgcG9ydFBSRVNDQUxFX1ZBTFVFICAgICAgICAgICAweDAwDQotI2RlZmluZSBwb3J0SU5URVJSVVBUX09OX01BVENIICAgICAgICggKCB1aW50MzJfdCApIDB4MDEgKQ0KLSNkZWZpbmUgcG9ydFJFU0VUX0NPVU5UX09OX01BVENIICAgICAoICggdWludDMyX3QgKSAweDAyICkNCisjZGVmaW5lIHBvcnRFTkFCTEVfVElNRVIJCQkoICggdWludDhfdCApIDB4MDEgKQ0KKyNkZWZpbmUgcG9ydFBSRVNDQUxFX1ZBTFVFCQkJMHgwMA0KKyNkZWZpbmUgcG9ydElOVEVSUlVQVF9PTl9NQVRDSAkJKCAoIHVpbnQzMl90ICkgMHgwMSApDQorI2RlZmluZSBwb3J0UkVTRVRfQ09VTlRfT05fTUFUQ0gJKCAoIHVpbnQzMl90ICkgMHgwMiApDQogDQogLyogQ29uc3RhbnRzIHJlcXVpcmVkIHRvIHNldHVwIHRoZSBpbml0aWFsIHN0YWNrLiAqLw0KLSNkZWZpbmUgcG9ydElOSVRJQUxfU1BTUiAgICAgICAgICAgICAoICggU3RhY2tUeXBlX3QgKSAweDFmICkgICAgLyogU3lzdGVtIG1vZGUsIEFSTSBtb2RlLCBpbnRlcnJ1cHRzIGVuYWJsZWQuICovDQotI2RlZmluZSBwb3J0VEhVTUJfTU9ERV9CSVQgICAgICAgICAgICggKCBTdGFja1R5cGVfdCApIDB4MjAgKQ0KLSNkZWZpbmUgcG9ydElOU1RSVUNUSU9OX1NJWkUgICAgICAgICAoICggU3RhY2tUeXBlX3QgKSA0ICkNCisjZGVmaW5lIHBvcnRJTklUSUFMX1NQU1IJCQkJKCAoIFN0YWNrVHlwZV90ICkgMHgxZiApIC8qIFN5c3RlbSBtb2RlLCBBUk0gbW9kZSwgaW50ZXJydXB0cyBlbmFibGVkLiAqLw0KKyNkZWZpbmUgcG9ydFRIVU1CX01PREVfQklUCQkJCSggKCBTdGFja1R5cGVfdCApIDB4MjAgKQ0KKyNkZWZpbmUgcG9ydElOU1RSVUNUSU9OX1NJWkUJCQkoICggU3RhY2tUeXBlX3QgKSA0ICkNCiANCiAvKiBDb25zdGFudHMgcmVxdWlyZWQgdG8gc2V0dXAgdGhlIFBJVC4gKi8NCi0jZGVmaW5lIHBvcnRQSVRfQ0xPQ0tfRElWSVNPUiAgICAgICAgKCAoIHVpbnQzMl90ICkgMTYgKQ0KLSNkZWZpbmUgcG9ydFBJVF9DT1VOVEVSX1ZBTFVFICAgICAgICAoICggKCBjb25maWdDUFVfQ0xPQ0tfSFogLyBwb3J0UElUX0NMT0NLX0RJVklTT1IgKSAvIDEwMDBVTCApICogcG9ydFRJQ0tfUEVSSU9EX01TICkNCisjZGVmaW5lIHBvcnRQSVRfQ0xPQ0tfRElWSVNPUgkJCSggKCB1aW50MzJfdCApIDE2ICkNCisjZGVmaW5lIHBvcnRQSVRfQ09VTlRFUl9WQUxVRQkJCSggKCAoIGNvbmZpZ0NQVV9DTE9DS19IWiAvIHBvcnRQSVRfQ0xPQ0tfRElWSVNPUiApIC8gMTAwMFVMICkgKiBwb3J0VElDS19QRVJJT0RfTVMgKQ0KIA0KIC8qIENvbnN0YW50cyByZXF1aXJlZCB0byBoYW5kbGUgaW50ZXJydXB0cy4gKi8NCi0jZGVmaW5lIHBvcnRUSU1FUl9NQVRDSF9JU1JfQklUICAgICAgKCAoIHVpbnQ4X3QgKSAweDAxICkNCi0jZGVmaW5lIHBvcnRDTEVBUl9WSUNfSU5URVJSVVBUICAgICAgKCAoIHVpbnQzMl90ICkgMCApDQorI2RlZmluZSBwb3J0VElNRVJfTUFUQ0hfSVNSX0JJVAkJKCAoIHVpbnQ4X3QgKSAweDAxICkNCisjZGVmaW5lIHBvcnRDTEVBUl9WSUNfSU5URVJSVVBUCQkoICggdWludDMyX3QgKSAwICkNCiANCiAvKiBDb25zdGFudHMgcmVxdWlyZWQgdG8gaGFuZGxlIGNyaXRpY2FsIHNlY3Rpb25zLiAqLw0KLSNkZWZpbmUgcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgICAgICAoICggdWludDMyX3QgKSAwICkNCisjZGVmaW5lIHBvcnROT19DUklUSUNBTF9ORVNUSU5HIAkJKCAoIHVpbnQzMl90ICkgMCApDQogDQogDQotI2RlZmluZSBwb3J0SU5UX0xFVkVMX1NFTlNJVElWRSAgICAgIDANCi0jZGVmaW5lIHBvcnRQSVRfRU5BQkxFICAgICAgICAgICAgICAgKCAoIHVpbnQxNl90ICkgMHgxIDw8IDI0ICkNCi0jZGVmaW5lIHBvcnRQSVRfSU5UX0VOQUJMRSAgICAgICAgICAgKCAoIHVpbnQxNl90ICkgMHgxIDw8IDI1ICkNCisjZGVmaW5lIHBvcnRJTlRfTEVWRUxfU0VOU0lUSVZFICAwDQorI2RlZmluZSBwb3J0UElUX0VOQUJMRSAgICAgIAkoICggdWludDE2X3QgKSAweDEgPDwgMjQgKQ0KKyNkZWZpbmUgcG9ydFBJVF9JTlRfRU5BQkxFICAgICAJKCAoIHVpbnQxNl90ICkgMHgxIDw8IDI1ICkNCiANCiAvKiBDb25zdGFudHMgcmVxdWlyZWQgdG8gc2V0dXAgdGhlIFZJQyBmb3IgdGhlIHRpY2sgSVNSLiAqLw0KLSNkZWZpbmUgcG9ydFRJTUVSX1ZJQ19DSEFOTkVMICAgICAgICAoICggdWludDMyX3QgKSAweDAwMDQgKQ0KLSNkZWZpbmUgcG9ydFRJTUVSX1ZJQ19DSEFOTkVMX0JJVCAgICAoICggdWludDMyX3QgKSAweDAwMTAgKQ0KLSNkZWZpbmUgcG9ydFRJTUVSX1ZJQ19FTkFCTEUgICAgICAgICAoICggdWludDMyX3QgKSAweDAwMjAgKQ0KKyNkZWZpbmUgcG9ydFRJTUVSX1ZJQ19DSEFOTkVMCQkoICggdWludDMyX3QgKSAweDAwMDQgKQ0KKyNkZWZpbmUgcG9ydFRJTUVSX1ZJQ19DSEFOTkVMX0JJVAkoICggdWludDMyX3QgKSAweDAwMTAgKQ0KKyNkZWZpbmUgcG9ydFRJTUVSX1ZJQ19FTkFCTEUJCSggKCB1aW50MzJfdCApIDB4MDAyMCApDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQpAQCAtODMsOCArODMsOCBAQAogc3RhdGljIHZvaWQgcHJ2U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApOw0KIA0KIC8qIHVsQ3JpdGljYWxOZXN0aW5nIHdpbGwgZ2V0IHNldCB0byB6ZXJvIHdoZW4gdGhlIGZpcnN0IHRhc2sgc3RhcnRzLiAgSXQNCi0gKiBjYW5ub3QgYmUgaW5pdGlhbGlzZWQgdG8gMCBhcyB0aGlzIHdpbGwgY2F1c2UgaW50ZXJydXB0cyB0byBiZSBlbmFibGVkDQotICogZHVyaW5nIHRoZSBrZXJuZWwgaW5pdGlhbGlzYXRpb24gcHJvY2Vzcy4gKi8NCitjYW5ub3QgYmUgaW5pdGlhbGlzZWQgdG8gMCBhcyB0aGlzIHdpbGwgY2F1c2UgaW50ZXJydXB0cyB0byBiZSBlbmFibGVkDQorZHVyaW5nIHRoZSBrZXJuZWwgaW5pdGlhbGlzYXRpb24gcHJvY2Vzcy4gKi8NCiB1aW50MzJfdCB1bENyaXRpY2FsTmVzdGluZyA9ICggdWludDMyX3QgKSA5OTk5Ow0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KQEAgLTk1LDIxOSArOTUsMjIzIEBACiAgKg0KICAqIFNlZSBoZWFkZXIgZmlsZSBmb3IgZGVzY3JpcHRpb24uDQogICovDQotU3RhY2tUeXBlX3QgKiBweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICogcHhUb3BPZlN0YWNrLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYXNrRnVuY3Rpb25fdCBweENvZGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KK1N0YWNrVHlwZV90ICpweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICpweFRvcE9mU3RhY2ssIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzICkNCiB7DQotICAgIFN0YWNrVHlwZV90ICogcHhPcmlnaW5hbFRPUzsNCitTdGFja1R5cGVfdCAqcHhPcmlnaW5hbFRPUzsNCiANCi0gICAgcHhPcmlnaW5hbFRPUyA9IHB4VG9wT2ZTdGFjazsNCisJcHhPcmlnaW5hbFRPUyA9IHB4VG9wT2ZTdGFjazsNCiANCi0gICAgLyogU2V0dXAgdGhlIGluaXRpYWwgc3RhY2sgb2YgdGhlIHRhc2suICBUaGUgc3RhY2sgaXMgc2V0IGV4YWN0bHkgYXMNCi0gICAgICogZXhwZWN0ZWQgYnkgdGhlIHBvcnRSRVNUT1JFX0NPTlRFWFQoKSBtYWNyby4gKi8NCisJLyogU2V0dXAgdGhlIGluaXRpYWwgc3RhY2sgb2YgdGhlIHRhc2suICBUaGUgc3RhY2sgaXMgc2V0IGV4YWN0bHkgYXMNCisJZXhwZWN0ZWQgYnkgdGhlIHBvcnRSRVNUT1JFX0NPTlRFWFQoKSBtYWNyby4gKi8NCiANCi0gICAgLyogRmlyc3Qgb24gdGhlIHN0YWNrIGlzIHRoZSByZXR1cm4gYWRkcmVzcyAtIHdoaWNoIGluIHRoaXMgY2FzZSBpcyB0aGUNCi0gICAgICogc3RhcnQgb2YgdGhlIHRhc2suICBUaGUgb2Zmc2V0IGlzIGFkZGVkIHRvIG1ha2UgdGhlIHJldHVybiBhZGRyZXNzIGFwcGVhcg0KLSAgICAgKiBhcyBpdCB3b3VsZCB3aXRoaW4gYW4gSVJRIElTUi4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBweENvZGUgKyBwb3J0SU5TVFJVQ1RJT05fU0laRTsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIEZpcnN0IG9uIHRoZSBzdGFjayBpcyB0aGUgcmV0dXJuIGFkZHJlc3MgLSB3aGljaCBpbiB0aGlzIGNhc2UgaXMgdGhlDQorCXN0YXJ0IG9mIHRoZSB0YXNrLiAgVGhlIG9mZnNldCBpcyBhZGRlZCB0byBtYWtlIHRoZSByZXR1cm4gYWRkcmVzcyBhcHBlYXINCisJYXMgaXQgd291bGQgd2l0aGluIGFuIElSUSBJU1IuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHhDb2RlICsgcG9ydElOU1RSVUNUSU9OX1NJWkU7CQkNCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhhYWFhYWFhYTsgICAgLyogUjE0ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB4T3JpZ2luYWxUT1M7IC8qIFN0YWNrIHVzZWQgd2hlbiB0YXNrIHN0YXJ0cyBnb2VzIGluIFIxMy4gKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMjEyMTIxMjsgICAgLyogUjEyICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTExMTExMTE7ICAgIC8qIFIxMSAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDEwMTAxMDEwOyAgICAvKiBSMTAgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwOTA5MDkwOTsgICAgLyogUjkgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwODA4MDgwODsgICAgLyogUjggKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNzA3MDcwNzsgICAgLyogUjcgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNjA2MDYwNjsgICAgLyogUjYgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNTA1MDUwNTsgICAgLyogUjUgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNDA0MDQwNDsgICAgLyogUjQgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMzAzMDMwMzsgICAgLyogUjMgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMjAyMDIwMjsgICAgLyogUjIgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMTAxMDEwMTsgICAgLyogUjEgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhhYWFhYWFhYTsJLyogUjE0ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBweE9yaWdpbmFsVE9TOyAvKiBTdGFjayB1c2VkIHdoZW4gdGFzayBzdGFydHMgZ29lcyBpbiBSMTMuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTIxMjEyMTI7CS8qIFIxMiAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMTExMTExMTsJLyogUjExICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDEwMTAxMDEwOwkvKiBSMTAgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDkwOTA5MDk7CS8qIFI5ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA4MDgwODA4OwkvKiBSOCAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNzA3MDcwNzsJLyogUjcgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDYwNjA2MDY7CS8qIFI2ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA1MDUwNTA1OwkvKiBSNSAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNDA0MDQwNDsJLyogUjQgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDMwMzAzMDM7CS8qIFIzICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAyMDIwMjAyOwkvKiBSMiAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMTAxMDEwMTsJLyogUjEgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KIA0KLSAgICAvKiBXaGVuIHRoZSB0YXNrIHN0YXJ0cyBpcyB3aWxsIGV4cGVjdCB0byBmaW5kIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXIgaW4NCi0gICAgICogUjAuICovDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHZQYXJhbWV0ZXJzOyAvKiBSMCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJLyogV2hlbiB0aGUgdGFzayBzdGFydHMgaXMgd2lsbCBleHBlY3QgdG8gZmluZCB0aGUgZnVuY3Rpb24gcGFyYW1ldGVyIGluDQorCVIwLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB2UGFyYW1ldGVyczsgLyogUjAgKi8NCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgIC8qIFRoZSBzdGF0dXMgcmVnaXN0ZXIgaXMgc2V0IGZvciBzeXN0ZW0gbW9kZSwgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQuICovDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcG9ydElOSVRJQUxfU1BTUjsNCisJLyogVGhlIHN0YXR1cyByZWdpc3RlciBpcyBzZXQgZm9yIHN5c3RlbSBtb2RlLCB3aXRoIGludGVycnVwdHMgZW5hYmxlZC4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwb3J0SU5JVElBTF9TUFNSOw0KKwkNCisJaWYoICggKCB1aW50MzJfdCApIHB4Q29kZSAmIDB4MDFVTCApICE9IDB4MDBVTCApDQorCXsNCisJCS8qIFdlIHdhbnQgdGhlIHRhc2sgdG8gc3RhcnQgaW4gdGh1bWIgbW9kZS4gKi8NCisJCSpweFRvcE9mU3RhY2sgfD0gcG9ydFRIVU1CX01PREVfQklUOw0KKwl9DQorCQ0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgaWYoICggKCB1aW50MzJfdCApIHB4Q29kZSAmIDB4MDFVTCApICE9IDB4MDBVTCApDQotICAgIHsNCi0gICAgICAgIC8qIFdlIHdhbnQgdGhlIHRhc2sgdG8gc3RhcnQgaW4gdGh1bWIgbW9kZS4gKi8NCi0gICAgICAgICpweFRvcE9mU3RhY2sgfD0gcG9ydFRIVU1CX01PREVfQklUOw0KLSAgICB9DQorCS8qIEludGVycnVwdCBmbGFncyBjYW5ub3QgYWx3YXlzIGJlIHN0b3JlZCBvbiB0aGUgc3RhY2sgYW5kIHdpbGwNCisJaW5zdGVhZCBiZSBzdG9yZWQgaW4gYSB2YXJpYWJsZSwgd2hpY2ggaXMgdGhlbiBzYXZlZCBhcyBwYXJ0IG9mIHRoZQ0KKwl0YXNrcyBjb250ZXh0LiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkc7DQogDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLQ0KLSAgICAvKiBJbnRlcnJ1cHQgZmxhZ3MgY2Fubm90IGFsd2F5cyBiZSBzdG9yZWQgb24gdGhlIHN0YWNrIGFuZCB3aWxsDQotICAgICAqIGluc3RlYWQgYmUgc3RvcmVkIGluIGEgdmFyaWFibGUsIHdoaWNoIGlzIHRoZW4gc2F2ZWQgYXMgcGFydCBvZiB0aGUNCi0gICAgICogdGFza3MgY29udGV4dC4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9IHBvcnROT19DUklUSUNBTF9ORVNUSU5HOw0KLQ0KLSAgICByZXR1cm4gcHhUb3BPZlN0YWNrOw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOwkNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogQmFzZVR5cGVfdCB4UG9ydFN0YXJ0U2NoZWR1bGVyKCB2b2lkICkNCiB7DQotICAgIGV4dGVybiB2b2lkIHZQb3J0U3RhcnRGaXJzdFRhc2soIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2UG9ydFN0YXJ0Rmlyc3RUYXNrKCB2b2lkICk7DQogDQotICAgIC8qIFN0YXJ0IHRoZSB0aW1lciB0aGF0IGdlbmVyYXRlcyB0aGUgdGljayBJU1IuICBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZA0KLSAgICAgKiBoZXJlIGFscmVhZHkuICovDQotICAgIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoKTsNCisJLyogU3RhcnQgdGhlIHRpbWVyIHRoYXQgZ2VuZXJhdGVzIHRoZSB0aWNrIElTUi4gIEludGVycnVwdHMgYXJlIGRpc2FibGVkDQorCWhlcmUgYWxyZWFkeS4gKi8NCisJcHJ2U2V0dXBUaW1lckludGVycnVwdCgpOw0KIA0KLSAgICAvKiBTdGFydCB0aGUgZmlyc3QgdGFzay4gKi8NCi0gICAgdlBvcnRTdGFydEZpcnN0VGFzaygpOw0KKwkvKiBTdGFydCB0aGUgZmlyc3QgdGFzay4gKi8NCisJdlBvcnRTdGFydEZpcnN0VGFzaygpOwkNCiANCi0gICAgLyogU2hvdWxkIG5vdCBnZXQgaGVyZSEgKi8NCi0gICAgcmV0dXJuIDA7DQorCS8qIFNob3VsZCBub3QgZ2V0IGhlcmUhICovDQorCXJldHVybiAwOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0RW5kU2NoZWR1bGVyKCB2b2lkICkNCiB7DQotICAgIC8qIEl0IGlzIHVubGlrZWx5IHRoYXQgdGhlIEFSTSBwb3J0IHdpbGwgcmVxdWlyZSB0aGlzIGZ1bmN0aW9uIGFzIHRoZXJlDQotICAgICAqIGlzIG5vdGhpbmcgdG8gcmV0dXJuIHRvLiAgKi8NCisJLyogSXQgaXMgdW5saWtlbHkgdGhhdCB0aGUgQVJNIHBvcnQgd2lsbCByZXF1aXJlIHRoaXMgZnVuY3Rpb24gYXMgdGhlcmUNCisJaXMgbm90aGluZyB0byByZXR1cm4gdG8uICAqLw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMA0KIA0KLS8qIFRoZSBjb29wZXJhdGl2ZSBzY2hlZHVsZXIgcmVxdWlyZXMgYSBub3JtYWwgSVJRIHNlcnZpY2Ugcm91dGluZSB0bw0KLSAqIHNpbXBseSBpbmNyZW1lbnQgdGhlIHN5c3RlbSB0aWNrLiAqLw0KLSAgICBzdGF0aWMgX19hcm0gX19pcnEgdm9pZCB2UG9ydE5vblByZWVtcHRpdmVUaWNrKCB2b2lkICk7DQotICAgIHN0YXRpYyBfX2FybSBfX2lycSB2b2lkIHZQb3J0Tm9uUHJlZW1wdGl2ZVRpY2soIHZvaWQgKQ0KLSAgICB7DQotICAgICAgICAvKiBJbmNyZW1lbnQgdGhlIHRpY2sgY291bnQgLSB3aGljaCBtYXkgd2FrZSBzb21lIHRhc2tzIGJ1dCBhcyB0aGUNCi0gICAgICAgICAqIHByZWVtcHRpdmUgc2NoZWR1bGVyIGlzIG5vdCBiZWluZyB1c2VkIGFueSB3b2tlbiB0YXNrIGlzIG5vdCBnaXZlbg0KLSAgICAgICAgICogcHJvY2Vzc29yIHRpbWUgbm8gbWF0dGVyIHdoYXQgaXRzIHByaW9yaXR5LiAqLw0KLSAgICAgICAgeFRhc2tJbmNyZW1lbnRUaWNrKCk7DQorCS8qIFRoZSBjb29wZXJhdGl2ZSBzY2hlZHVsZXIgcmVxdWlyZXMgYSBub3JtYWwgSVJRIHNlcnZpY2Ugcm91dGluZSB0bw0KKwlzaW1wbHkgaW5jcmVtZW50IHRoZSBzeXN0ZW0gdGljay4gKi8NCisJc3RhdGljIF9fYXJtIF9faXJxIHZvaWQgdlBvcnROb25QcmVlbXB0aXZlVGljayggdm9pZCApOw0KKwlzdGF0aWMgX19hcm0gX19pcnEgdm9pZCB2UG9ydE5vblByZWVtcHRpdmVUaWNrKCB2b2lkICkNCisJew0KKwkJLyogSW5jcmVtZW50IHRoZSB0aWNrIGNvdW50IC0gd2hpY2ggbWF5IHdha2Ugc29tZSB0YXNrcyBidXQgYXMgdGhlDQorCQlwcmVlbXB0aXZlIHNjaGVkdWxlciBpcyBub3QgYmVpbmcgdXNlZCBhbnkgd29rZW4gdGFzayBpcyBub3QgZ2l2ZW4NCisJCXByb2Nlc3NvciB0aW1lIG5vIG1hdHRlciB3aGF0IGl0cyBwcmlvcml0eS4gKi8NCisJCXhUYXNrSW5jcmVtZW50VGljaygpOw0KKwkJDQorCQkvKiBSZWFkeSBmb3IgdGhlIG5leHQgaW50ZXJydXB0LiAqLw0KKwkJVDBJUiA9IHBvcnRUSU1FUl9NQVRDSF9JU1JfQklUOw0KKwkJVklDVmVjdEFkZHIgPSBwb3J0Q0xFQVJfVklDX0lOVEVSUlVQVDsNCisJfQ0KIA0KLSAgICAgICAgLyogUmVhZHkgZm9yIHRoZSBuZXh0IGludGVycnVwdC4gKi8NCi0gICAgICAgIFQwSVIgPSBwb3J0VElNRVJfTUFUQ0hfSVNSX0JJVDsNCi0gICAgICAgIFZJQ1ZlY3RBZGRyID0gcG9ydENMRUFSX1ZJQ19JTlRFUlJVUFQ7DQotICAgIH0NCisjZWxzZQ0KIA0KLSNlbHNlIC8qIGlmIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDAgKi8NCisJLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBhbiBhc20gd3JhcHBlciwgc28gZG9lcyBub3QgcmVxdWlyZSB0aGUgX19pcnENCisJa2V5d29yZC4gKi8NCisJdm9pZCB2UG9ydFByZWVtcHRpdmVUaWNrKCB2b2lkICk7DQorCXZvaWQgdlBvcnRQcmVlbXB0aXZlVGljayggdm9pZCApDQorCXsNCisJCS8qIEluY3JlbWVudCB0aGUgdGljayBjb3VudGVyLiAqLw0KKwkJaWYoIHhUYXNrSW5jcmVtZW50VGljaygpICE9IHBkRkFMU0UgKQ0KKwkJewkNCisJCQkvKiBUaGUgbmV3IHRpY2sgdmFsdWUgbWlnaHQgdW5ibG9jayBhIHRhc2suICBFbnN1cmUgdGhlIGhpZ2hlc3QgdGFzayB0aGF0DQorCQkJaXMgcmVhZHkgdG8gZXhlY3V0ZSBpcyB0aGUgdGFzayB0aGF0IHdpbGwgZXhlY3V0ZSB3aGVuIHRoZSB0aWNrIElTUg0KKwkJCWV4aXRzLiAqLw0KKwkJCXZUYXNrU3dpdGNoQ29udGV4dCgpOw0KKwkJfQ0KKwkNCisJCS8qIFJlYWR5IGZvciB0aGUgbmV4dCBpbnRlcnJ1cHQuICovDQorCQlUMElSID0gcG9ydFRJTUVSX01BVENIX0lTUl9CSVQ7DQorCQlWSUNWZWN0QWRkciA9IHBvcnRDTEVBUl9WSUNfSU5URVJSVVBUOw0KKwl9DQogDQotLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBhbiBhc20gd3JhcHBlciwgc28gZG9lcyBub3QgcmVxdWlyZSB0aGUgX19pcnENCi0gKiBrZXl3b3JkLiAqLw0KLSAgICB2b2lkIHZQb3J0UHJlZW1wdGl2ZVRpY2soIHZvaWQgKTsNCi0gICAgdm9pZCB2UG9ydFByZWVtcHRpdmVUaWNrKCB2b2lkICkNCi0gICAgew0KLSAgICAgICAgLyogSW5jcmVtZW50IHRoZSB0aWNrIGNvdW50ZXIuICovDQotICAgICAgICBpZiggeFRhc2tJbmNyZW1lbnRUaWNrKCkgIT0gcGRGQUxTRSApDQotICAgICAgICB7DQotICAgICAgICAgICAgLyogVGhlIG5ldyB0aWNrIHZhbHVlIG1pZ2h0IHVuYmxvY2sgYSB0YXNrLiAgRW5zdXJlIHRoZSBoaWdoZXN0IHRhc2sgdGhhdA0KLSAgICAgICAgICAgICAqIGlzIHJlYWR5IHRvIGV4ZWN1dGUgaXMgdGhlIHRhc2sgdGhhdCB3aWxsIGV4ZWN1dGUgd2hlbiB0aGUgdGljayBJU1INCi0gICAgICAgICAgICAgKiBleGl0cy4gKi8NCi0gICAgICAgICAgICB2VGFza1N3aXRjaENvbnRleHQoKTsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIC8qIFJlYWR5IGZvciB0aGUgbmV4dCBpbnRlcnJ1cHQuICovDQotICAgICAgICBUMElSID0gcG9ydFRJTUVSX01BVENIX0lTUl9CSVQ7DQotICAgICAgICBWSUNWZWN0QWRkciA9IHBvcnRDTEVBUl9WSUNfSU5URVJSVVBUOw0KLSAgICB9DQotDQotI2VuZGlmIC8qIGlmIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDAgKi8NCisjZW5kaWYNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICkNCiB7DQotICAgIHVpbnQzMl90IHVsQ29tcGFyZU1hdGNoOw0KK3VpbnQzMl90IHVsQ29tcGFyZU1hdGNoOw0KIA0KLSAgICAvKiBBIDFtcyB0aWNrIGRvZXMgbm90IHJlcXVpcmUgdGhlIHVzZSBvZiB0aGUgdGltZXIgcHJlc2NhbGUuICBUaGlzIGlzDQotICAgICAqIGRlZmF1bHRlZCB0byB6ZXJvIGJ1dCBjYW4gYmUgdXNlZCBpZiBuZWNlc3NhcnkuICovDQotICAgIFQwUFIgPSBwb3J0UFJFU0NBTEVfVkFMVUU7DQorCS8qIEEgMW1zIHRpY2sgZG9lcyBub3QgcmVxdWlyZSB0aGUgdXNlIG9mIHRoZSB0aW1lciBwcmVzY2FsZS4gIFRoaXMgaXMNCisJZGVmYXVsdGVkIHRvIHplcm8gYnV0IGNhbiBiZSB1c2VkIGlmIG5lY2Vzc2FyeS4gKi8NCisJVDBQUiA9IHBvcnRQUkVTQ0FMRV9WQUxVRTsNCiANCi0gICAgLyogQ2FsY3VsYXRlIHRoZSBtYXRjaCB2YWx1ZSByZXF1aXJlZCBmb3Igb3VyIHdhbnRlZCB0aWNrIHJhdGUuICovDQotICAgIHVsQ29tcGFyZU1hdGNoID0gY29uZmlnQ1BVX0NMT0NLX0haIC8gY29uZmlnVElDS19SQVRFX0haOw0KKwkvKiBDYWxjdWxhdGUgdGhlIG1hdGNoIHZhbHVlIHJlcXVpcmVkIGZvciBvdXIgd2FudGVkIHRpY2sgcmF0ZS4gKi8NCisJdWxDb21wYXJlTWF0Y2ggPSBjb25maWdDUFVfQ0xPQ0tfSFogLyBjb25maWdUSUNLX1JBVEVfSFo7DQogDQotICAgIC8qIFByb3RlY3QgYWdhaW5zdCBkaXZpZGUgYnkgemVyby4gIFVzaW5nIGFuIGlmKCkgc3RhdGVtZW50IHN0aWxsIHJlc3VsdHMNCi0gICAgICogaW4gYSB3YXJuaW5nIC0gaGVuY2UgdGhlICNpZi4gKi8NCi0gICAgI2lmIHBvcnRQUkVTQ0FMRV9WQUxVRSAhPSAwDQotICAgICAgICB7DQotICAgICAgICAgICAgdWxDb21wYXJlTWF0Y2ggLz0gKCBwb3J0UFJFU0NBTEVfVkFMVUUgKyAxICk7DQotICAgICAgICB9DQotICAgICNlbmRpZg0KKwkvKiBQcm90ZWN0IGFnYWluc3QgZGl2aWRlIGJ5IHplcm8uICBVc2luZyBhbiBpZigpIHN0YXRlbWVudCBzdGlsbCByZXN1bHRzDQorCWluIGEgd2FybmluZyAtIGhlbmNlIHRoZSAjaWYuICovDQorCSNpZiBwb3J0UFJFU0NBTEVfVkFMVUUgIT0gMA0KKwl7DQorCQl1bENvbXBhcmVNYXRjaCAvPSAoIHBvcnRQUkVTQ0FMRV9WQUxVRSArIDEgKTsNCisJfQ0KKwkjZW5kaWYNCiANCi0gICAgVDBNUjAgPSB1bENvbXBhcmVNYXRjaDsNCisJVDBNUjAgPSB1bENvbXBhcmVNYXRjaDsNCiANCi0gICAgLyogR2VuZXJhdGUgdGljayB3aXRoIHRpbWVyIDAgY29tcGFyZSBtYXRjaC4gKi8NCi0gICAgVDBNQ1IgPSBwb3J0UkVTRVRfQ09VTlRfT05fTUFUQ0ggfCBwb3J0SU5URVJSVVBUX09OX01BVENIOw0KKwkvKiBHZW5lcmF0ZSB0aWNrIHdpdGggdGltZXIgMCBjb21wYXJlIG1hdGNoLiAqLw0KKwlUME1DUiA9IHBvcnRSRVNFVF9DT1VOVF9PTl9NQVRDSCB8IHBvcnRJTlRFUlJVUFRfT05fTUFUQ0g7DQogDQotICAgIC8qIFNldHVwIHRoZSBWSUMgZm9yIHRoZSB0aW1lci4gKi8NCi0gICAgVklDSW50U2VsZWN0ICY9IH4oIHBvcnRUSU1FUl9WSUNfQ0hBTk5FTF9CSVQgKTsNCi0gICAgVklDSW50RW5hYmxlIHw9IHBvcnRUSU1FUl9WSUNfQ0hBTk5FTF9CSVQ7DQorCS8qIFNldHVwIHRoZSBWSUMgZm9yIHRoZSB0aW1lci4gKi8NCisJVklDSW50U2VsZWN0ICY9IH4oIHBvcnRUSU1FUl9WSUNfQ0hBTk5FTF9CSVQgKTsNCisJVklDSW50RW5hYmxlIHw9IHBvcnRUSU1FUl9WSUNfQ0hBTk5FTF9CSVQ7DQorCQ0KKwkvKiBUaGUgSVNSIGluc3RhbGxlZCBkZXBlbmRzIG9uIHdoZXRoZXIgdGhlIHByZWVtcHRpdmUgb3IgY29vcGVyYXRpdmUNCisJc2NoZWR1bGVyIGlzIGJlaW5nIHVzZWQuICovDQorCSNpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAxDQorCXsJDQorCQlleHRlcm4gdm9pZCAoIHZQb3J0UHJlZW1wdGl2ZVRpY2tFbnRyeSApKCB2b2lkICk7DQogDQotICAgIC8qIFRoZSBJU1IgaW5zdGFsbGVkIGRlcGVuZHMgb24gd2hldGhlciB0aGUgcHJlZW1wdGl2ZSBvciBjb29wZXJhdGl2ZQ0KLSAgICAgKiBzY2hlZHVsZXIgaXMgYmVpbmcgdXNlZC4gKi8NCi0gICAgI2lmIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDENCi0gICAgICAgIHsNCi0gICAgICAgICAgICBleHRlcm4gdm9pZCggdlBvcnRQcmVlbXB0aXZlVGlja0VudHJ5ICkoIHZvaWQgKTsNCisJCVZJQ1ZlY3RBZGRyMCA9ICggdWludDMyX3QgKSB2UG9ydFByZWVtcHRpdmVUaWNrRW50cnk7DQorCX0NCisJI2Vsc2UNCisJew0KKwkJZXh0ZXJuIHZvaWQgKCB2Tm9uUHJlZW1wdGl2ZVRpY2sgKSggdm9pZCApOw0KIA0KLSAgICAgICAgICAgIFZJQ1ZlY3RBZGRyMCA9ICggdWludDMyX3QgKSB2UG9ydFByZWVtcHRpdmVUaWNrRW50cnk7DQotICAgICAgICB9DQotICAgICNlbHNlDQotICAgICAgICB7DQotICAgICAgICAgICAgZXh0ZXJuIHZvaWQoIHZOb25QcmVlbXB0aXZlVGljayApKCB2b2lkICk7DQorCQlWSUNWZWN0QWRkcjAgPSAoIGludDMyX3QgKSB2UG9ydE5vblByZWVtcHRpdmVUaWNrOw0KKwl9DQorCSNlbmRpZg0KIA0KLSAgICAgICAgICAgIFZJQ1ZlY3RBZGRyMCA9ICggaW50MzJfdCApIHZQb3J0Tm9uUHJlZW1wdGl2ZVRpY2s7DQotICAgICAgICB9DQotICAgICNlbmRpZiAvKiBpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAxICovDQorCVZJQ1ZlY3RDbnRsMCA9IHBvcnRUSU1FUl9WSUNfQ0hBTk5FTCB8IHBvcnRUSU1FUl9WSUNfRU5BQkxFOw0KIA0KLSAgICBWSUNWZWN0Q250bDAgPSBwb3J0VElNRVJfVklDX0NIQU5ORUwgfCBwb3J0VElNRVJfVklDX0VOQUJMRTsNCi0NCi0gICAgLyogU3RhcnQgdGhlIHRpbWVyIC0gaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZA0KLSAgICAgKiBzbyBpdCBpcyBva2F5IHRvIGRvIHRoaXMgaGVyZS4gKi8NCi0gICAgVDBUQ1IgPSBwb3J0RU5BQkxFX1RJTUVSOw0KKwkvKiBTdGFydCB0aGUgdGltZXIgLSBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkDQorCXNvIGl0IGlzIG9rYXkgdG8gZG8gdGhpcyBoZXJlLiAqLw0KKwlUMFRDUiA9IHBvcnRFTkFCTEVfVElNRVI7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICkNCiB7DQotICAgIC8qIERpc2FibGUgaW50ZXJydXB0cyBmaXJzdCEgKi8NCi0gICAgX19kaXNhYmxlX2ludGVycnVwdCgpOw0KKwkvKiBEaXNhYmxlIGludGVycnVwdHMgZmlyc3QhICovDQorCV9fZGlzYWJsZV9pbnRlcnJ1cHQoKTsNCiANCi0gICAgLyogTm93IGludGVycnVwdHMgYXJlIGRpc2FibGVkIHVsQ3JpdGljYWxOZXN0aW5nIGNhbiBiZSBhY2Nlc3NlZA0KLSAgICAgKiBkaXJlY3RseS4gIEluY3JlbWVudCB1bENyaXRpY2FsTmVzdGluZyB0byBrZWVwIGEgY291bnQgb2YgaG93IG1hbnkgdGltZXMNCi0gICAgICogcG9ydEVOVEVSX0NSSVRJQ0FMKCkgaGFzIGJlZW4gY2FsbGVkLiAqLw0KLSAgICB1bENyaXRpY2FsTmVzdGluZysrOw0KKwkvKiBOb3cgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgdWxDcml0aWNhbE5lc3RpbmcgY2FuIGJlIGFjY2Vzc2VkDQorCWRpcmVjdGx5LiAgSW5jcmVtZW50IHVsQ3JpdGljYWxOZXN0aW5nIHRvIGtlZXAgYSBjb3VudCBvZiBob3cgbWFueSB0aW1lcw0KKwlwb3J0RU5URVJfQ1JJVElDQUwoKSBoYXMgYmVlbiBjYWxsZWQuICovDQorCXVsQ3JpdGljYWxOZXN0aW5nKys7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoIHZvaWQgKQ0KIHsNCi0gICAgaWYoIHVsQ3JpdGljYWxOZXN0aW5nID4gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgKQ0KLSAgICB7DQotICAgICAgICAvKiBEZWNyZW1lbnQgdGhlIG5lc3RpbmcgY291bnQgYXMgd2UgYXJlIGxlYXZpbmcgYSBjcml0aWNhbCBzZWN0aW9uLiAqLw0KLSAgICAgICAgdWxDcml0aWNhbE5lc3RpbmctLTsNCisJaWYoIHVsQ3JpdGljYWxOZXN0aW5nID4gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgKQ0KKwl7DQorCQkvKiBEZWNyZW1lbnQgdGhlIG5lc3RpbmcgY291bnQgYXMgd2UgYXJlIGxlYXZpbmcgYSBjcml0aWNhbCBzZWN0aW9uLiAqLw0KKwkJdWxDcml0aWNhbE5lc3RpbmctLTsNCiANCi0gICAgICAgIC8qIElmIHRoZSBuZXN0aW5nIGxldmVsIGhhcyByZWFjaGVkIHplcm8gdGhlbiBpbnRlcnJ1cHRzIHNob3VsZCBiZQ0KLSAgICAgICAgICogcmUtZW5hYmxlZC4gKi8NCi0gICAgICAgIGlmKCB1bENyaXRpY2FsTmVzdGluZyA9PSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyApDQotICAgICAgICB7DQotICAgICAgICAgICAgX19lbmFibGVfaW50ZXJydXB0KCk7DQotICAgICAgICB9DQotICAgIH0NCisJCS8qIElmIHRoZSBuZXN0aW5nIGxldmVsIGhhcyByZWFjaGVkIHplcm8gdGhlbiBpbnRlcnJ1cHRzIHNob3VsZCBiZQ0KKwkJcmUtZW5hYmxlZC4gKi8NCisJCWlmKCB1bENyaXRpY2FsTmVzdGluZyA9PSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyApDQorCQl7DQorCQkJX19lbmFibGVfaW50ZXJydXB0KCk7DQorCQl9DQorCX0NCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorDQorDQorDQorDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvSUFSL0xQQzIwMDAvcG9ydG1hY3JvLmggYi9wb3J0YWJsZS9JQVIvTFBDMjAwMC9wb3J0bWFjcm8uaAppbmRleCAzMTMzZDhkLi5jYjI3NWM3IDEwMDY0NAotLS0gYS9wb3J0YWJsZS9JQVIvTFBDMjAwMC9wb3J0bWFjcm8uaAorKysgYi9wb3J0YWJsZS9JQVIvTFBDMjAwMC9wb3J0bWFjcm8uaApAQCAtMjcsMTMgKzI3LDEzIEBACiANCiANCiAjaWZuZGVmIFBPUlRNQUNST19IDQotICAgICNkZWZpbmUgUE9SVE1BQ1JPX0gNCisjZGVmaW5lIFBPUlRNQUNST19IDQogDQotICAgICNpbmNsdWRlIDxpbnRyaW5zaWNzLmg+DQorI2luY2x1ZGUgPGludHJpbnNpY3MuaD4NCiANCi0gICAgI2lmZGVmIF9fY3BsdXNwbHVzDQotICAgICAgICBleHRlcm4gIkMiIHsNCi0gICAgI2VuZGlmDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAqIFBvcnQgc3BlY2lmaWMgZGVmaW5pdGlvbnMuDQpAQCAtNDYsNjYgKzQ2LDY4IEBACiAgKi8NCiANCiAvKiBUeXBlIGRlZmluaXRpb25zLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRDSEFSICAgICAgICAgIGNoYXINCi0gICAgI2RlZmluZSBwb3J0RkxPQVQgICAgICAgICBmbG9hdA0KLSAgICAjZGVmaW5lIHBvcnRET1VCTEUgICAgICAgIGRvdWJsZQ0KLSAgICAjZGVmaW5lIHBvcnRMT05HICAgICAgICAgIGxvbmcNCi0gICAgI2RlZmluZSBwb3J0U0hPUlQgICAgICAgICBzaG9ydA0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19UWVBFICAgIHVpbnQzMl90DQotICAgICNkZWZpbmUgcG9ydEJBU0VfVFlQRSAgICAgbG9uZw0KKyNkZWZpbmUgcG9ydENIQVIJCWNoYXINCisjZGVmaW5lIHBvcnRGTE9BVAkJZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUJCWRvdWJsZQ0KKyNkZWZpbmUgcG9ydExPTkcJCWxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVAkJc2hvcnQNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFCXVpbnQzMl90DQorI2RlZmluZSBwb3J0QkFTRV9UWVBFCWxvbmcNCiANCi0gICAgdHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSAgIFN0YWNrVHlwZV90Ow0KLSAgICB0eXBlZGVmIGxvbmcgICAgICAgICAgICAgQmFzZVR5cGVfdDsNCi0gICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nICAgIFVCYXNlVHlwZV90Ow0KK3R5cGVkZWYgcG9ydFNUQUNLX1RZUEUgU3RhY2tUeXBlX3Q7DQordHlwZWRlZiBsb25nIEJhc2VUeXBlX3Q7DQordHlwZWRlZiB1bnNpZ25lZCBsb25nIFVCYXNlVHlwZV90Ow0KIA0KIA0KLSAgICAjaWYgKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KLSAgICAgICAgdHlwZWRlZiB1aW50MTZfdCAgICAgVGlja1R5cGVfdDsNCi0gICAgICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmYNCi0gICAgI2Vsc2UNCi0gICAgICAgIHR5cGVkZWYgdWludDMyX3QgICAgIFRpY2tUeXBlX3Q7DQotICAgICAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQotICAgICNlbmRpZg0KKyNpZiggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCisJdHlwZWRlZiB1aW50MTZfdCBUaWNrVHlwZV90Ow0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQorI2Vsc2UNCisJdHlwZWRlZiB1aW50MzJfdCBUaWNrVHlwZV90Ow0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQorI2VuZGlmDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogSGFyZHdhcmUgc3BlY2lmaWNzLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEggICAgICAoIC0xICkNCi0gICAgI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMgICAgKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCi0gICAgI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQgICAgOA0KLSAgICAjZGVmaW5lIHBvcnRZSUVMRCgpICAgIGFzbSAoICJTV0kgMCIgKQ0KLSAgICAjZGVmaW5lIHBvcnROT1AoKSAgICAgIGFzbSAoICJOT1AiICkNCisjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEgJCQkoIC0xICkNCisjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUwkJCSggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQorI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQJCQk4DQorI2RlZmluZSBwb3J0WUlFTEQoKQkJCQkJYXNtICggIlNXSSAwIiApDQorI2RlZmluZSBwb3J0Tk9QKCkJCQkJCWFzbSAoICJOT1AiICkNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBDcml0aWNhbCBzZWN0aW9uIGhhbmRsaW5nLiAqLw0KLSAgICBfX2FybSBfX2ludGVyd29yayB2b2lkIHZQb3J0RGlzYWJsZUludGVycnVwdHNGcm9tVGh1bWIoIHZvaWQgKTsNCi0gICAgX19hcm0gX19pbnRlcndvcmsgdm9pZCB2UG9ydEVuYWJsZUludGVycnVwdHNGcm9tVGh1bWIoIHZvaWQgKTsNCi0gICAgX19hcm0gX19pbnRlcndvcmsgdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKTsNCi0gICAgX19hcm0gX19pbnRlcndvcmsgdm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApOw0KK19fYXJtIF9faW50ZXJ3b3JrIHZvaWQgdlBvcnREaXNhYmxlSW50ZXJydXB0c0Zyb21UaHVtYiggdm9pZCApOw0KK19fYXJtIF9faW50ZXJ3b3JrIHZvaWQgdlBvcnRFbmFibGVJbnRlcnJ1cHRzRnJvbVRodW1iKCB2b2lkICk7DQorX19hcm0gX19pbnRlcndvcmsgdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKTsNCitfX2FybSBfX2ludGVyd29yayB2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICk7DQogDQotICAgICNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpICAgIF9fZGlzYWJsZV9pbnRlcnJ1cHQoKQ0KLSAgICAjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpICAgICBfX2VuYWJsZV9pbnRlcnJ1cHQoKQ0KLSAgICAjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpICAgICAgICB2UG9ydEVudGVyQ3JpdGljYWwoKQ0KLSAgICAjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkgICAgICAgICB2UG9ydEV4aXRDcml0aWNhbCgpDQorI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkJX19kaXNhYmxlX2ludGVycnVwdCgpDQorI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKQkJX19lbmFibGVfaW50ZXJydXB0KCkNCisjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpCQl2UG9ydEVudGVyQ3JpdGljYWwoKQ0KKyNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKQkJCXZQb3J0RXhpdENyaXRpY2FsKCkNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBUYXNrIHV0aWxpdGllcy4gKi8NCi0gICAgI2RlZmluZSBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHhTd2l0Y2hSZXF1aXJlZCApIFwNCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGV4dGVybiB2b2lkIHZUYXNrU3dpdGNoQ29udGV4dCggdm9pZCApOyAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGlmKCB4U3dpdGNoUmVxdWlyZWQgKSAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICB2VGFza1N3aXRjaENvbnRleHQoKTsgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgfQ0KKyNkZWZpbmUgcG9ydEVORF9TV0lUQ0hJTkdfSVNSKCB4U3dpdGNoUmVxdWlyZWQgKSAJXA0KK3sJCQkJCQkJCQkJCQkJXA0KK2V4dGVybiB2b2lkIHZUYXNrU3dpdGNoQ29udGV4dCggdm9pZCApOwkJCQlcDQorCQkJCQkJCQkJCQkJCVwNCisJaWYoIHhTd2l0Y2hSZXF1aXJlZCApIAkJCQkJCQlcDQorCXsJCQkJCQkJCQkJCQlcDQorCQl2VGFza1N3aXRjaENvbnRleHQoKTsJCQkJCQlcDQorCX0JCQkJCQkJCQkJCQlcDQorfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCi0gICAgI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICAgICAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgfQ0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQogDQogI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQorDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvSUFSL01TUDQzMC9wb3J0LmMgYi9wb3J0YWJsZS9JQVIvTVNQNDMwL3BvcnQuYwppbmRleCAyMjljZjA2Li4xYTAzNDQ4IDEwMDY0NAotLS0gYS9wb3J0YWJsZS9JQVIvTVNQNDMwL3BvcnQuYworKysgYi9wb3J0YWJsZS9JQVIvTVNQNDMwL3BvcnQuYwpAQCAtMzAsMjggKzMwLDI4IEBACiAjaW5jbHVkZSAidGFzay5oIg0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0qIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBNU1A0MzAgcG9ydC4NCi0qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorICogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFibGUuaCBmb3IgdGhlIE1TUDQzMCBwb3J0Lg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogQ29uc3RhbnRzIHJlcXVpcmVkIGZvciBoYXJkd2FyZSBzZXR1cC4gIFRoZSB0aWNrIElTUiBydW5zIG9mZiB0aGUgQUNMSywNCi0gKiBub3QgdGhlIE1DTEsuICovDQotI2RlZmluZSBwb3J0QUNMS19GUkVRVUVOQ1lfSFogICAgICAgICAgICggKCBUaWNrVHlwZV90ICkgMzI3NjggKQ0KLSNkZWZpbmUgcG9ydElOSVRJQUxfQ1JJVElDQUxfTkVTVElORyAgICAoICggdWludDE2X3QgKSAxMCApDQotI2RlZmluZSBwb3J0RkxBR1NfSU5UX0VOQUJMRUQgICAgICAgICAgICggKCBTdGFja1R5cGVfdCApIDB4MDggKQ0KK25vdCB0aGUgTUNMSy4gKi8NCisjZGVmaW5lIHBvcnRBQ0xLX0ZSRVFVRU5DWV9IWgkJCSggKCBUaWNrVHlwZV90ICkgMzI3NjggKQ0KKyNkZWZpbmUgcG9ydElOSVRJQUxfQ1JJVElDQUxfTkVTVElORwkoICggdWludDE2X3QgKSAxMCApDQorI2RlZmluZSBwb3J0RkxBR1NfSU5UX0VOQUJMRUQJCQkoICggU3RhY2tUeXBlX3QgKSAweDA4ICkNCiANCiAvKiBXZSByZXF1aXJlIHRoZSBhZGRyZXNzIG9mIHRoZSBweEN1cnJlbnRUQ0IgdmFyaWFibGUsIGJ1dCBkb24ndCB3YW50IHRvIGtub3cNCi0gKiBhbnkgZGV0YWlscyBvZiBpdHMgdHlwZS4gKi8NCithbnkgZGV0YWlscyBvZiBpdHMgdHlwZS4gKi8NCiB0eXBlZGVmIHZvaWQgVENCX3Q7DQogZXh0ZXJuIHZvbGF0aWxlIFRDQl90ICogdm9sYXRpbGUgcHhDdXJyZW50VENCOw0KIA0KIC8qIEVhY2ggdGFzayBtYWludGFpbnMgYSBjb3VudCBvZiB0aGUgY3JpdGljYWwgc2VjdGlvbiBuZXN0aW5nIGRlcHRoLiAgRWFjaA0KLSAqIHRpbWUgYSBjcml0aWNhbCBzZWN0aW9uIGlzIGVudGVyZWQgdGhlIGNvdW50IGlzIGluY3JlbWVudGVkLiAgRWFjaCB0aW1lIGENCi0gKiBjcml0aWNhbCBzZWN0aW9uIGlzIGV4aXRlZCB0aGUgY291bnQgaXMgZGVjcmVtZW50ZWQgLSB3aXRoIGludGVycnVwdHMgb25seQ0KLSAqIGJlaW5nIHJlLWVuYWJsZWQgaWYgdGhlIGNvdW50IGlzIHplcm8uDQotICoNCi0gKiB1c0NyaXRpY2FsTmVzdGluZyB3aWxsIGdldCBzZXQgdG8gemVybyB3aGVuIHRoZSBzY2hlZHVsZXIgc3RhcnRzLCBidXQgbXVzdA0KLSAqIG5vdCBiZSBpbml0aWFsaXNlZCB0byB6ZXJvIGFzIHRoaXMgd2lsbCBjYXVzZSBwcm9ibGVtcyBkdXJpbmcgdGhlIHN0YXJ0dXANCi0gKiBzZXF1ZW5jZS4gKi8NCit0aW1lIGEgY3JpdGljYWwgc2VjdGlvbiBpcyBlbnRlcmVkIHRoZSBjb3VudCBpcyBpbmNyZW1lbnRlZC4gIEVhY2ggdGltZSBhDQorY3JpdGljYWwgc2VjdGlvbiBpcyBleGl0ZWQgdGhlIGNvdW50IGlzIGRlY3JlbWVudGVkIC0gd2l0aCBpbnRlcnJ1cHRzIG9ubHkNCitiZWluZyByZS1lbmFibGVkIGlmIHRoZSBjb3VudCBpcyB6ZXJvLg0KKw0KK3VzQ3JpdGljYWxOZXN0aW5nIHdpbGwgZ2V0IHNldCB0byB6ZXJvIHdoZW4gdGhlIHNjaGVkdWxlciBzdGFydHMsIGJ1dCBtdXN0DQorbm90IGJlIGluaXRpYWxpc2VkIHRvIHplcm8gYXMgdGhpcyB3aWxsIGNhdXNlIHByb2JsZW1zIGR1cmluZyB0aGUgc3RhcnR1cA0KK3NlcXVlbmNlLiAqLw0KIHZvbGF0aWxlIHVpbnQxNl90IHVzQ3JpdGljYWxOZXN0aW5nID0gcG9ydElOSVRJQUxfQ1JJVElDQUxfTkVTVElORzsNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCkBAIC02OSw3NiArNjksNzQgQEAKICAqDQogICogU2VlIHRoZSBoZWFkZXIgZmlsZSBwb3J0YWJsZS5oLg0KICAqLw0KLVN0YWNrVHlwZV90ICogcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqIHB4VG9wT2ZTdGFjaywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFza0Z1bmN0aW9uX3QgcHhDb2RlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICogcHZQYXJhbWV0ZXJzICkNCitTdGFja1R5cGVfdCAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqcHhUb3BPZlN0YWNrLCBUYXNrRnVuY3Rpb25fdCBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycyApDQogew0KLSAgICAvKg0KLSAgICAgKiAgUGxhY2UgYSBmZXcgYnl0ZXMgb2Yga25vd24gdmFsdWVzIG9uIHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLg0KLSAgICAgKiAgVGhpcyBpcyBqdXN0IHVzZWZ1bCBmb3IgZGVidWdnaW5nIGFuZCBjYW4gYmUgaW5jbHVkZWQgaWYgcmVxdWlyZWQuDQotICAgICAqDQotICAgICAqIHB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDExMTE7DQotICAgICAqICBweFRvcE9mU3RhY2stLTsNCi0gICAgICogcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MjIyMjsNCi0gICAgICogIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgKiBweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgzMzMzOw0KLSAgICAgKiAgcHhUb3BPZlN0YWNrLS07DQotICAgICAqLw0KKwkvKg0KKwkJUGxhY2UgYSBmZXcgYnl0ZXMgb2Yga25vd24gdmFsdWVzIG9uIHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLg0KKwkJVGhpcyBpcyBqdXN0IHVzZWZ1bCBmb3IgZGVidWdnaW5nIGFuZCBjYW4gYmUgaW5jbHVkZWQgaWYgcmVxdWlyZWQuDQogDQotICAgIC8qIFRoZSBtc3A0MzAgYXV0b21hdGljYWxseSBwdXNoZXMgdGhlIFBDIHRoZW4gU1Igb250byB0aGUgc3RhY2sgYmVmb3JlDQotICAgICAqIGV4ZWN1dGluZyBhbiBJU1IuICBXZSB3YW50IHRoZSBzdGFjayB0byBsb29rIGp1c3QgYXMgaWYgdGhpcyBoYXMgaGFwcGVuZWQNCi0gICAgICogc28gcGxhY2UgYSBwb2ludGVyIHRvIHRoZSBzdGFydCBvZiB0aGUgdGFzayBvbiB0aGUgc3RhY2sgZmlyc3QgLSBmb2xsb3dlZA0KLSAgICAgKiBieSB0aGUgZmxhZ3Mgd2Ugd2FudCB0aGUgdGFzayB0byB1c2Ugd2hlbiBpdCBzdGFydHMgdXAuICovDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHhDb2RlOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IHBvcnRGTEFHU19JTlRfRU5BQkxFRDsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTExMTsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDIyMjI7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgzMzMzOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCSovDQogDQotICAgIC8qIE5leHQgdGhlIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMuICovDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHg0NDQ0Ow0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDU1NTU7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4NjY2NjsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHg3Nzc3Ow0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDg4ODg7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4OTk5OTsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhhYWFhOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweGJiYmI7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkvKiBUaGUgbXNwNDMwIGF1dG9tYXRpY2FsbHkgcHVzaGVzIHRoZSBQQyB0aGVuIFNSIG9udG8gdGhlIHN0YWNrIGJlZm9yZQ0KKwlleGVjdXRpbmcgYW4gSVNSLiAgV2Ugd2FudCB0aGUgc3RhY2sgdG8gbG9vayBqdXN0IGFzIGlmIHRoaXMgaGFzIGhhcHBlbmVkDQorCXNvIHBsYWNlIGEgcG9pbnRlciB0byB0aGUgc3RhcnQgb2YgdGhlIHRhc2sgb24gdGhlIHN0YWNrIGZpcnN0IC0gZm9sbG93ZWQNCisJYnkgdGhlIGZsYWdzIHdlIHdhbnQgdGhlIHRhc2sgdG8gdXNlIHdoZW4gaXQgc3RhcnRzIHVwLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB4Q29kZTsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSBwb3J0RkxBR1NfSU5UX0VOQUJMRUQ7DQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBXaGVuIHRoZSB0YXNrIHN0YXJ0cyBpcyB3aWxsIGV4cGVjdCB0byBmaW5kIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXIgaW4NCi0gICAgICogUjE1LiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB2UGFyYW1ldGVyczsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIE5leHQgdGhlIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHg0NDQ0Ow0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDU1NTU7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4NjY2NjsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHg3Nzc3Ow0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDg4ODg7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4OTk5OTsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhhYWFhOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweGJiYmI7DQorCXB4VG9wT2ZTdGFjay0tOwkNCisJDQorCS8qIFdoZW4gdGhlIHRhc2sgc3RhcnRzIGlzIHdpbGwgZXhwZWN0IHRvIGZpbmQgdGhlIGZ1bmN0aW9uIHBhcmFtZXRlciBpbg0KKwlSMTUuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHZQYXJhbWV0ZXJzOw0KKwlweFRvcE9mU3RhY2stLTsNCisJDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhkZGRkOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweGVlZWU7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4ZmZmZjsNCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhkZGRkOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweGVlZWU7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4ZmZmZjsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIEEgdmFyaWFibGUgaXMgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSBjcml0aWNhbCBzZWN0aW9uIG5lc3RpbmcuDQorCVRoaXMgdmFyaWFibGUgaGFzIHRvIGJlIHN0b3JlZCBhcyBwYXJ0IG9mIHRoZSB0YXNrIGNvbnRleHQgYW5kIGlzDQorCWluaXRpYWxseSBzZXQgdG8gemVyby4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwb3J0Tk9fQ1JJVElDQUxfU0VDVElPTl9ORVNUSU5HOwkNCiANCi0gICAgLyogQSB2YXJpYWJsZSBpcyB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGNyaXRpY2FsIHNlY3Rpb24gbmVzdGluZy4NCi0gICAgICogVGhpcyB2YXJpYWJsZSBoYXMgdG8gYmUgc3RvcmVkIGFzIHBhcnQgb2YgdGhlIHRhc2sgY29udGV4dCBhbmQgaXMNCi0gICAgICogaW5pdGlhbGx5IHNldCB0byB6ZXJvLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkc7DQotDQotICAgIC8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHRvcCBvZiB0aGUgc3RhY2sgd2UgaGF2ZSBnZW5lcmF0ZWQgc28gdGhpcyBjYW4NCi0gICAgICogYmUgc3RvcmVkIGluIHRoZSB0YXNrIGNvbnRyb2wgYmxvY2sgZm9yIHRoZSB0YXNrLiAqLw0KLSAgICByZXR1cm4gcHhUb3BPZlN0YWNrOw0KKwkvKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSB0b3Agb2YgdGhlIHN0YWNrIHdlIGhhdmUgZ2VuZXJhdGVkIHNvIHRoaXMgY2FuDQorCWJlIHN0b3JlZCBpbiB0aGUgdGFzayBjb250cm9sIGJsb2NrIGZvciB0aGUgdGFzay4gKi8NCisJcmV0dXJuIHB4VG9wT2ZTdGFjazsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogdm9pZCB2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApDQogew0KLSAgICAvKiBJdCBpcyB1bmxpa2VseSB0aGF0IHRoZSBNU1A0MzAgcG9ydCB3aWxsIGdldCBzdG9wcGVkLiAgSWYgcmVxdWlyZWQgc2ltcGx5DQotICAgICAqIGRpc2FibGUgdGhlIHRpY2sgaW50ZXJydXB0IGhlcmUuICovDQorCS8qIEl0IGlzIHVubGlrZWx5IHRoYXQgdGhlIE1TUDQzMCBwb3J0IHdpbGwgZ2V0IHN0b3BwZWQuICBJZiByZXF1aXJlZCBzaW1wbHkNCisJZGlzYWJsZSB0aGUgdGljayBpbnRlcnJ1cHQgaGVyZS4gKi8NCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQpAQCAtMTQ4LDI1ICsxNDYsMjggQEAKICAqLw0KIHZvaWQgdlBvcnRTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICkNCiB7DQotICAgIC8qIEVuc3VyZSB0aGUgdGltZXIgaXMgc3RvcHBlZC4gKi8NCi0gICAgVEFDVEwgPSAwOw0KKwkvKiBFbnN1cmUgdGhlIHRpbWVyIGlzIHN0b3BwZWQuICovDQorCVRBQ1RMID0gMDsNCiANCi0gICAgLyogUnVuIHRoZSB0aW1lciBvZiB0aGUgQUNMSy4gKi8NCi0gICAgVEFDVEwgPSBUQVNTRUxfMTsNCisJLyogUnVuIHRoZSB0aW1lciBvZiB0aGUgQUNMSy4gKi8NCisJVEFDVEwgPSBUQVNTRUxfMTsNCiANCi0gICAgLyogQ2xlYXIgZXZlcnl0aGluZyB0byBzdGFydCB3aXRoLiAqLw0KLSAgICBUQUNUTCB8PSBUQUNMUjsNCisJLyogQ2xlYXIgZXZlcnl0aGluZyB0byBzdGFydCB3aXRoLiAqLw0KKwlUQUNUTCB8PSBUQUNMUjsNCiANCi0gICAgLyogU2V0IHRoZSBjb21wYXJlIG1hdGNoIHZhbHVlIGFjY29yZGluZyB0byB0aGUgdGljayByYXRlIHdlIHdhbnQuICovDQotICAgIFRBQ0NSMCA9IHBvcnRBQ0xLX0ZSRVFVRU5DWV9IWiAvIGNvbmZpZ1RJQ0tfUkFURV9IWjsNCisJLyogU2V0IHRoZSBjb21wYXJlIG1hdGNoIHZhbHVlIGFjY29yZGluZyB0byB0aGUgdGljayByYXRlIHdlIHdhbnQuICovDQorCVRBQ0NSMCA9IHBvcnRBQ0xLX0ZSRVFVRU5DWV9IWiAvIGNvbmZpZ1RJQ0tfUkFURV9IWjsNCiANCi0gICAgLyogRW5hYmxlIHRoZSBpbnRlcnJ1cHRzLiAqLw0KLSAgICBUQUNDVEwwID0gQ0NJRTsNCisJLyogRW5hYmxlIHRoZSBpbnRlcnJ1cHRzLiAqLw0KKwlUQUNDVEwwID0gQ0NJRTsNCiANCi0gICAgLyogU3RhcnQgdXAgY2xlYW4uICovDQotICAgIFRBQ1RMIHw9IFRBQ0xSOw0KKwkvKiBTdGFydCB1cCBjbGVhbi4gKi8NCisJVEFDVEwgfD0gVEFDTFI7DQogDQotICAgIC8qIFVwIG1vZGUuICovDQotICAgIFRBQ1RMIHw9IE1DXzE7DQorCS8qIFVwIG1vZGUuICovDQorCVRBQ1RMIHw9IE1DXzE7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKw0KKwkNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9JQVIvTVNQNDMwL3BvcnRhc20uaCBiL3BvcnRhYmxlL0lBUi9NU1A0MzAvcG9ydGFzbS5oCmluZGV4IDA4NzNiNmEuLmQ5NWUwYWUgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0lBUi9NU1A0MzAvcG9ydGFzbS5oCisrKyBiL3BvcnRhYmxlL0lBUi9NU1A0MzAvcG9ydGFzbS5oCkBAIC0zMCw1NCArMzAsNTUgQEAKIA0KIHBvcnRTQVZFX0NPTlRFWFQgbWFjcm8NCiANCi1JTVBPUlQgcHhDdXJyZW50VENCDQotSU1QT1JUIHVzQ3JpdGljYWxOZXN0aW5nDQorCQlJTVBPUlQgcHhDdXJyZW50VENCDQorCQlJTVBPUlQgdXNDcml0aWNhbE5lc3RpbmcNCiANCi0vKiBTYXZlIHRoZSByZW1haW5pbmcgcmVnaXN0ZXJzLiAqLw0KLXB1c2ggcjQNCi1wdXNoIHI1DQotcHVzaCByNg0KLXB1c2ggcjcNCi1wdXNoIHI4DQotcHVzaCByOQ0KLXB1c2ggcjEwDQotcHVzaCByMTENCi1wdXNoIHIxMg0KLXB1c2ggcjEzDQotcHVzaCByMTQNCi1wdXNoIHIxNQ0KLW1vdi53ICZ1c0NyaXRpY2FsTmVzdGluZywgcjE0DQotcHVzaCByMTQNCi0gICAgICAgbW92LncgJnB4Q3VycmVudFRDQiwgcjEyDQotICAgICAgIG1vdi53IHIxLCAwICggcjEyICkNCi1lbmRtDQorCQkvKiBTYXZlIHRoZSByZW1haW5pbmcgcmVnaXN0ZXJzLiAqLw0KKwkJcHVzaAlyNA0KKwkJcHVzaAlyNQ0KKwkJcHVzaAlyNg0KKwkJcHVzaAlyNw0KKwkJcHVzaAlyOA0KKwkJcHVzaAlyOQ0KKwkJcHVzaAlyMTANCisJCXB1c2gJcjExDQorCQlwdXNoCXIxMg0KKwkJcHVzaAlyMTMNCisJCXB1c2gJcjE0DQorCQlwdXNoCXIxNQ0KKwkJbW92LncJJnVzQ3JpdGljYWxOZXN0aW5nLCByMTQNCisJCXB1c2gJcjE0DQorCQltb3YudwkmcHhDdXJyZW50VENCLCByMTINCisJCW1vdi53CXIxLCAwKHIxMikNCisJCWVuZG0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCi0NCisJCQ0KIHBvcnRSRVNUT1JFX0NPTlRFWFQgbWFjcm8NCi1tb3YudyAmIHB4Q3VycmVudFRDQiwgcjEyDQotbW92LncgQHIxMiwgcjENCi1wb3AgcjE1DQotbW92LncgcjE1LCAmdXNDcml0aWNhbE5lc3RpbmcNCi1wb3AgcjE1DQotcG9wIHIxNA0KLXBvcCByMTMNCi1wb3AgcjEyDQotcG9wIHIxMQ0KLXBvcCByMTANCi1wb3AgcjkNCi1wb3AgcjgNCi1wb3AgcjcNCi1wb3AgcjYNCi1wb3AgcjUNCi1wb3AgcjQNCisJCW1vdi53CSZweEN1cnJlbnRUQ0IsIHIxMg0KKwkJbW92LncJQHIxMiwgcjENCisJCXBvcAkJcjE1DQorCQltb3YudwlyMTUsICZ1c0NyaXRpY2FsTmVzdGluZw0KKwkJcG9wCQlyMTUNCisJCXBvcAkJcjE0DQorCQlwb3AJCXIxMw0KKwkJcG9wCQlyMTINCisJCXBvcAkJcjExDQorCQlwb3AJCXIxMA0KKwkJcG9wCQlyOQ0KKwkJcG9wCQlyOA0KKwkJcG9wCQlyNw0KKwkJcG9wCQlyNg0KKwkJcG9wCQlyNQ0KKwkJcG9wCQlyNA0KIA0KLS8qIFRoZSBsYXN0IHRoaW5nIG9uIHRoZSBzdGFjayB3aWxsIGJlIHRoZSBzdGF0dXMgcmVnaXN0ZXIuDQotICogRW5zdXJlIHRoZSBwb3dlciBkb3duIGJpdHMgYXJlIGNsZWFyIHJlYWR5IGZvciB0aGUgbmV4dA0KLSAqIHRpbWUgdGhpcyBwb3dlciBkb3duIHJlZ2lzdGVyIGlzIHBvcHBlZCBmcm9tIHRoZSBzdGFjay4gKi8NCi1iaWMudyAgICMgMHhmMCwgMCAoIFNQICkNCisJCS8qIFRoZSBsYXN0IHRoaW5nIG9uIHRoZSBzdGFjayB3aWxsIGJlIHRoZSBzdGF0dXMgcmVnaXN0ZXIuDQorICAgICAgICBFbnN1cmUgdGhlIHBvd2VyIGRvd24gYml0cyBhcmUgY2xlYXIgcmVhZHkgZm9yIHRoZSBuZXh0DQorICAgICAgICB0aW1lIHRoaXMgcG93ZXIgZG93biByZWdpc3RlciBpcyBwb3BwZWQgZnJvbSB0aGUgc3RhY2suICovDQorCQliaWMudyAgICMweGYwLDAoU1ApDQogDQotcmV0aQ0KLWVuZG0NCisJCXJldGkNCisJCWVuZG0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0jZW5kaWYgLyogaWZuZGVmIFBPUlRBU01fSCAqLw0KKyNlbmRpZg0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0lBUi9NU1A0MzAvcG9ydG1hY3JvLmggYi9wb3J0YWJsZS9JQVIvTVNQNDMwL3BvcnRtYWNyby5oCmluZGV4IDllOTU3ZjguLmMzYTUwYWEgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0lBUi9NU1A0MzAvcG9ydG1hY3JvLmgKKysrIGIvcG9ydGFibGUvSUFSL01TUDQzMC9wb3J0bWFjcm8uaApAQCAtMzksNjYgKzM5LDY2IEBACiAgKi8NCiANCiAvKiBUeXBlIGRlZmluaXRpb25zLiAqLw0KLSNkZWZpbmUgcG9ydENIQVIgICAgICAgICAgY2hhcg0KLSNkZWZpbmUgcG9ydEZMT0FUICAgICAgICAgZmxvYXQNCi0jZGVmaW5lIHBvcnRET1VCTEUgICAgICAgIGRvdWJsZQ0KLSNkZWZpbmUgcG9ydExPTkcgICAgICAgICAgbG9uZw0KLSNkZWZpbmUgcG9ydFNIT1JUICAgICAgICAgaW50DQotI2RlZmluZSBwb3J0U1RBQ0tfVFlQRSAgICB1aW50MTZfdA0KLSNkZWZpbmUgcG9ydEJBU0VfVFlQRSAgICAgc2hvcnQNCisjZGVmaW5lIHBvcnRDSEFSCQljaGFyDQorI2RlZmluZSBwb3J0RkxPQVQJCWZsb2F0DQorI2RlZmluZSBwb3J0RE9VQkxFCQlkb3VibGUNCisjZGVmaW5lIHBvcnRMT05HCQlsb25nDQorI2RlZmluZSBwb3J0U0hPUlQJCWludA0KKyNkZWZpbmUgcG9ydFNUQUNLX1RZUEUJdWludDE2X3QNCisjZGVmaW5lIHBvcnRCQVNFX1RZUEUJc2hvcnQNCiANCi10eXBlZGVmIHBvcnRTVEFDS19UWVBFICAgU3RhY2tUeXBlX3Q7DQotdHlwZWRlZiBzaG9ydCAgICAgICAgICAgIEJhc2VUeXBlX3Q7DQotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgIFVCYXNlVHlwZV90Ow0KK3R5cGVkZWYgcG9ydFNUQUNLX1RZUEUgU3RhY2tUeXBlX3Q7DQordHlwZWRlZiBzaG9ydCBCYXNlVHlwZV90Ow0KK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgVUJhc2VUeXBlX3Q7DQogDQogDQotI2lmICggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCi0gICAgdHlwZWRlZiB1aW50MTZfdCAgICAgVGlja1R5cGVfdDsNCi0gICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICggVGlja1R5cGVfdCApIDB4ZmZmZg0KKyNpZiggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCisJdHlwZWRlZiB1aW50MTZfdCBUaWNrVHlwZV90Ow0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQogI2Vsc2UNCi0gICAgdHlwZWRlZiB1aW50MzJfdCAgICAgVGlja1R5cGVfdDsNCi0gICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTA0KKwl0eXBlZGVmIHVpbnQzMl90IFRpY2tUeXBlX3Q7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwNCiAjZW5kaWYNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBJbnRlcnJ1cHQgY29udHJvbCBtYWNyb3MuICovDQotI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgICAgX0RJTlQoKTsgX05PUCgpDQotI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKSAgICAgX0VJTlQoKTsgX05PUCgpDQorI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkJX0RJTlQoKTsgX05PUCgpDQorI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKQkJX0VJTlQoKTsgX05PUCgpDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogQ3JpdGljYWwgc2VjdGlvbiBjb250cm9sIG1hY3Jvcy4gKi8NCi0jZGVmaW5lIHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkcgICAgKCAoIHVpbnQxNl90ICkgMCApDQorI2RlZmluZSBwb3J0Tk9fQ1JJVElDQUxfU0VDVElPTl9ORVNUSU5HCQkoICggdWludDE2X3QgKSAwICkNCiANCi0jZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgZXh0ZXJuIHZvbGF0aWxlIHVpbnQxNl90IHVzQ3JpdGljYWxOZXN0aW5nOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIE5vdyBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB1c0NyaXRpY2FsTmVzdGluZyBjYW4gYmUgYWNjZXNzZWQgKi8gICAgICBcDQotICAgICAgICAvKiBkaXJlY3RseS4gIEluY3JlbWVudCB1bENyaXRpY2FsTmVzdGluZyB0byBrZWVwIGEgY291bnQgb2YgaG93IG1hbnkgKi8gXA0KLSAgICAgICAgLyogdGltZXMgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgaGFzIGJlZW4gY2FsbGVkLiAqLyAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHVzQ3JpdGljYWxOZXN0aW5nKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIH0NCisjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpCQkJCQkJCQkJCQkJCVwNCit7CQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorZXh0ZXJuIHZvbGF0aWxlIHVpbnQxNl90IHVzQ3JpdGljYWxOZXN0aW5nOwkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCXBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBOb3cgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgdXNDcml0aWNhbE5lc3RpbmcgY2FuIGJlIGFjY2Vzc2VkICovCQkJXA0KKwkvKiBkaXJlY3RseS4gIEluY3JlbWVudCB1bENyaXRpY2FsTmVzdGluZyB0byBrZWVwIGEgY291bnQgb2YgaG93IG1hbnkgKi8JXA0KKwkvKiB0aW1lcyBwb3J0RU5URVJfQ1JJVElDQUwoKSBoYXMgYmVlbiBjYWxsZWQuICovCQkJCQkJCVwNCisJdXNDcml0aWNhbE5lc3RpbmcrKzsJCQkJCQkJCQkJCQkJCVwNCit9DQogDQotI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGV4dGVybiB2b2xhdGlsZSB1aW50MTZfdCB1c0NyaXRpY2FsTmVzdGluZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgaWYoIHVzQ3JpdGljYWxOZXN0aW5nID4gcG9ydE5PX0NSSVRJQ0FMX1NFQ1RJT05fTkVTVElORyApICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogRGVjcmVtZW50IHRoZSBuZXN0aW5nIGNvdW50IGFzIHdlIGFyZSBsZWF2aW5nIGEgY3JpdGljYWwgc2VjdGlvbi4gKi8gXA0KLSAgICAgICAgICAgIHVzQ3JpdGljYWxOZXN0aW5nLS07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgLyogSWYgdGhlIG5lc3RpbmcgbGV2ZWwgaGFzIHJlYWNoZWQgemVybyB0aGVuIGludGVycnVwdHMgc2hvdWxkIGJlICovICAgXA0KLSAgICAgICAgICAgIC8qIHJlLWVuYWJsZWQuICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICBpZiggdXNDcml0aWNhbE5lc3RpbmcgPT0gcG9ydE5PX0NSSVRJQ0FMX1NFQ1RJT05fTkVTVElORyApICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB9DQorI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpCQkJCQkJCQkJCQkJCQlcDQorewkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KK2V4dGVybiB2b2xhdGlsZSB1aW50MTZfdCB1c0NyaXRpY2FsTmVzdGluZzsJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwlpZiggdXNDcml0aWNhbE5lc3RpbmcgPiBwb3J0Tk9fQ1JJVElDQUxfU0VDVElPTl9ORVNUSU5HICkJCQkJCVwNCisJewkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkvKiBEZWNyZW1lbnQgdGhlIG5lc3RpbmcgY291bnQgYXMgd2UgYXJlIGxlYXZpbmcgYSBjcml0aWNhbCBzZWN0aW9uLiAqLwlcDQorCQl1c0NyaXRpY2FsTmVzdGluZy0tOwkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkvKiBJZiB0aGUgbmVzdGluZyBsZXZlbCBoYXMgcmVhY2hlZCB6ZXJvIHRoZW4gaW50ZXJydXB0cyBzaG91bGQgYmUgKi8JXA0KKwkJLyogcmUtZW5hYmxlZC4gKi8JCQkJCQkJCQkJCQkJCVwNCisJCWlmKCB1c0NyaXRpY2FsTmVzdGluZyA9PSBwb3J0Tk9fQ1JJVElDQUxfU0VDVElPTl9ORVNUSU5HICkJCQkJXA0KKwkJewkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCQlwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKTsJCQkJCQkJCQkJCVwNCisJCX0JCQkJCQkJCQkJCQkJCQkJCQlcDQorCX0JCQkJCQkJCQkJCQkJCQkJCQkJXA0KK30NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBUYXNrIHV0aWxpdGllcy4gKi8NCkBAIC0xMDcsMjYgKzEwNywyNyBAQAogICogTWFudWFsIGNvbnRleHQgc3dpdGNoIGNhbGxlZCBieSBwb3J0WUlFTEQgb3IgdGFza1lJRUxELg0KICAqLw0KIGV4dGVybiB2b2lkIHZQb3J0WWllbGQoIHZvaWQgKTsNCi0jZGVmaW5lIHBvcnRZSUVMRCgpICAgIHZQb3J0WWllbGQoKQ0KKyNkZWZpbmUgcG9ydFlJRUxEKCkgdlBvcnRZaWVsZCgpDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogSGFyZHdhcmUgc3BlY2lmaWNzLiAqLw0KLSNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UICAgICAgIDINCi0jZGVmaW5lIHBvcnRTVEFDS19HUk9XVEggICAgICAgICAoIC0xICkNCi0jZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUyAgICAgICAoICggVGlja1R5cGVfdCApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UCQkJMg0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJCSggLTEgKQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TCQkJKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCiAjZGVmaW5lIHBvcnROT1AoKQ0KLSNkZWZpbmUgcG9ydFBPSU5URVJfU0laRV9UWVBFICAgIHVpbnQxNl90DQorI2RlZmluZSBwb3J0UE9JTlRFUl9TSVpFX1RZUEUJCXVpbnQxNl90DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQotI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQotI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICAgICAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KIA0KICNpZiBjb25maWdJTlRFUlJVUFRfRVhBTVBMRV9NRVRIT0QgPT0gMg0KIA0KLSAgICBleHRlcm4gdm9pZCB2VGFza1N3aXRjaENvbnRleHQoIHZvaWQgKTsNCi0gICAgI2RlZmluZSBwb3J0WUlFTERfRlJPTV9JU1IoIHggKSAgICBpZiggeCApIHZUYXNrU3dpdGNoQ29udGV4dCgpDQorZXh0ZXJuIHZvaWQgdlRhc2tTd2l0Y2hDb250ZXh0KCB2b2lkICk7DQorI2RlZmluZSBwb3J0WUlFTERfRlJPTV9JU1IoIHggKSBpZiggeCApIHZUYXNrU3dpdGNoQ29udGV4dCgpDQogDQogI2VuZGlmDQogDQogI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvSUFSL01TUDQzMFgvZGF0YV9tb2RlbC5oIGIvcG9ydGFibGUvSUFSL01TUDQzMFgvZGF0YV9tb2RlbC5oCmluZGV4IDg3NWNjM2YuLjM2OTM1Y2IgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0lBUi9NU1A0MzBYL2RhdGFfbW9kZWwuaAorKysgYi9wb3J0YWJsZS9JQVIvTVNQNDMwWC9kYXRhX21vZGVsLmgKQEAgLTI5LDM0ICsyOSwzNSBAQAogI2RlZmluZSBEQVRBX01PREVMX0gNCiANCiAjaWYgX19EQVRBX01PREVMX18gPT0gX19EQVRBX01PREVMX1NNQUxMX18NCi0gICAgI2RlZmluZSBwdXNobV94ICAgIHB1c2htLncNCi0gICAgI2RlZmluZSBwb3BtX3ggICAgIHBvcG0udw0KLSAgICAjZGVmaW5lIHB1c2hfeCAgICAgcHVzaC53DQotICAgICNkZWZpbmUgcG9wX3ggICAgICBwb3Audw0KLSAgICAjZGVmaW5lIG1vdl94ICAgICAgbW92LncNCi0gICAgI2RlZmluZSBjbXBfeCAgICAgIGNtcC53DQorCSNkZWZpbmUgcHVzaG1feCBwdXNobS53DQorCSNkZWZpbmUgcG9wbV94IHBvcG0udw0KKwkjZGVmaW5lIHB1c2hfeCBwdXNoLncNCisJI2RlZmluZSBwb3BfeCBwb3Audw0KKwkjZGVmaW5lIG1vdl94IG1vdi53DQorCSNkZWZpbmUgY21wX3ggY21wLncNCiAjZW5kaWYNCiANCiAjaWYgX19EQVRBX01PREVMX18gPT0gX19EQVRBX01PREVMX01FRElVTV9fDQotICAgICNkZWZpbmUgcHVzaG1feCAgICBwdXNobS5hDQotICAgICNkZWZpbmUgcG9wbV94ICAgICBwb3BtLmENCi0gICAgI2RlZmluZSBwdXNoX3ggICAgIHB1c2h4LmENCi0gICAgI2RlZmluZSBwb3BfeCAgICAgIHBvcHguYQ0KLSAgICAjZGVmaW5lIG1vdl94ICAgICAgbW92LncNCi0gICAgI2RlZmluZSBjbXBfeCAgICAgIGNtcC53DQorCSNkZWZpbmUgcHVzaG1feCBwdXNobS5hDQorCSNkZWZpbmUgcG9wbV94IHBvcG0uYQ0KKwkjZGVmaW5lIHB1c2hfeCBwdXNoeC5hDQorCSNkZWZpbmUgcG9wX3ggcG9weC5hDQorCSNkZWZpbmUgbW92X3ggbW92LncNCisJI2RlZmluZSBjbXBfeCBjbXAudw0KICNlbmRpZg0KIA0KICNpZiBfX0RBVEFfTU9ERUxfXyA9PSBfX0RBVEFfTU9ERUxfTEFSR0VfXw0KLSAgICAjZGVmaW5lIHB1c2htX3ggICAgcHVzaG0uYQ0KLSAgICAjZGVmaW5lIHBvcG1feCAgICAgcG9wbS5hDQotICAgICNkZWZpbmUgcHVzaF94ICAgICBwdXNoeC5hDQotICAgICNkZWZpbmUgcG9wX3ggICAgICBwb3B4LmENCi0gICAgI2RlZmluZSBtb3ZfeCAgICAgIG1vdnguYQ0KLSAgICAjZGVmaW5lIGNtcF94ICAgICAgY21weC5hDQorCSNkZWZpbmUgcHVzaG1feCBwdXNobS5hDQorCSNkZWZpbmUgcG9wbV94IHBvcG0uYQ0KKwkjZGVmaW5lIHB1c2hfeCBwdXNoeC5hDQorCSNkZWZpbmUgcG9wX3ggcG9weC5hDQorCSNkZWZpbmUgbW92X3ggbW92eC5hDQorCSNkZWZpbmUgY21wX3ggY21weC5hDQogI2VuZGlmDQogDQogI2lmbmRlZiBwdXNobV94DQotICAgICNlcnJvciBUaGUgYXNzZW1ibGVyIG9wdGlvbnMgbXVzdCBkZWZpbmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgc3ltYm9sczogX19EQVRBX01PREVMX1NNQUxMX18sIF9fREFUQV9NT0RFTF9NRURJVU1fXywgb3IgX19EQVRBX01PREVMX0xBUkdFX18NCisJI2Vycm9yIFRoZSBhc3NlbWJsZXIgb3B0aW9ucyBtdXN0IGRlZmluZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBzeW1ib2xzOiBfX0RBVEFfTU9ERUxfU01BTExfXywgX19EQVRBX01PREVMX01FRElVTV9fLCBvciBfX0RBVEFfTU9ERUxfTEFSR0VfXw0KICNlbmRpZg0KIA0KICNlbmRpZiAvKiBEQVRBX01PREVMX0ggKi8NCisNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9JQVIvTVNQNDMwWC9wb3J0LmMgYi9wb3J0YWJsZS9JQVIvTVNQNDMwWC9wb3J0LmMKaW5kZXggODczYWM3MS4uZmI0NjBkMCAxMDA2NDQKLS0tIGEvcG9ydGFibGUvSUFSL01TUDQzMFgvcG9ydC5jCisrKyBiL3BvcnRhYmxlL0lBUi9NU1A0MzBYL3BvcnQuYwpAQCAtMzAsMjggKzMwLDI4IEBACiAjaW5jbHVkZSAidGFzay5oIg0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0qIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBNU1A0MzBYIHBvcnQuDQotKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyAqIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBNU1A0MzBYIHBvcnQuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBDb25zdGFudHMgcmVxdWlyZWQgZm9yIGhhcmR3YXJlIHNldHVwLiAgVGhlIHRpY2sgSVNSIHJ1bnMgb2ZmIHRoZSBBQ0xLLA0KLSAqIG5vdCB0aGUgTUNMSy4gKi8NCi0jZGVmaW5lIHBvcnRBQ0xLX0ZSRVFVRU5DWV9IWiAgICAgICAgICAgKCAoIFRpY2tUeXBlX3QgKSAzMjc2OCApDQotI2RlZmluZSBwb3J0SU5JVElBTF9DUklUSUNBTF9ORVNUSU5HICAgICggKCB1aW50MTZfdCApIDEwICkNCi0jZGVmaW5lIHBvcnRGTEFHU19JTlRfRU5BQkxFRCAgICAgICAgICAgKCAoIFN0YWNrVHlwZV90ICkgMHgwOCApDQorbm90IHRoZSBNQ0xLLiAqLw0KKyNkZWZpbmUgcG9ydEFDTEtfRlJFUVVFTkNZX0haCQkJKCAoIFRpY2tUeXBlX3QgKSAzMjc2OCApDQorI2RlZmluZSBwb3J0SU5JVElBTF9DUklUSUNBTF9ORVNUSU5HCSggKCB1aW50MTZfdCApIDEwICkNCisjZGVmaW5lIHBvcnRGTEFHU19JTlRfRU5BQkxFRAkJCSggKCBTdGFja1R5cGVfdCApIDB4MDggKQ0KIA0KIC8qIFdlIHJlcXVpcmUgdGhlIGFkZHJlc3Mgb2YgdGhlIHB4Q3VycmVudFRDQiB2YXJpYWJsZSwgYnV0IGRvbid0IHdhbnQgdG8ga25vdw0KLSAqIGFueSBkZXRhaWxzIG9mIGl0cyB0eXBlLiAqLw0KK2FueSBkZXRhaWxzIG9mIGl0cyB0eXBlLiAqLw0KIHR5cGVkZWYgdm9pZCBUQ0JfdDsNCiBleHRlcm4gdm9sYXRpbGUgVENCX3QgKiB2b2xhdGlsZSBweEN1cnJlbnRUQ0I7DQogDQogLyogRWFjaCB0YXNrIG1haW50YWlucyBhIGNvdW50IG9mIHRoZSBjcml0aWNhbCBzZWN0aW9uIG5lc3RpbmcgZGVwdGguICBFYWNoDQotICogdGltZSBhIGNyaXRpY2FsIHNlY3Rpb24gaXMgZW50ZXJlZCB0aGUgY291bnQgaXMgaW5jcmVtZW50ZWQuICBFYWNoIHRpbWUgYQ0KLSAqIGNyaXRpY2FsIHNlY3Rpb24gaXMgZXhpdGVkIHRoZSBjb3VudCBpcyBkZWNyZW1lbnRlZCAtIHdpdGggaW50ZXJydXB0cyBvbmx5DQotICogYmVpbmcgcmUtZW5hYmxlZCBpZiB0aGUgY291bnQgaXMgemVyby4NCi0gKg0KLSAqIHVzQ3JpdGljYWxOZXN0aW5nIHdpbGwgZ2V0IHNldCB0byB6ZXJvIHdoZW4gdGhlIHNjaGVkdWxlciBzdGFydHMsIGJ1dCBtdXN0DQotICogbm90IGJlIGluaXRpYWxpc2VkIHRvIHplcm8gYXMgdGhpcyB3aWxsIGNhdXNlIHByb2JsZW1zIGR1cmluZyB0aGUgc3RhcnR1cA0KLSAqIHNlcXVlbmNlLiAqLw0KK3RpbWUgYSBjcml0aWNhbCBzZWN0aW9uIGlzIGVudGVyZWQgdGhlIGNvdW50IGlzIGluY3JlbWVudGVkLiAgRWFjaCB0aW1lIGENCitjcml0aWNhbCBzZWN0aW9uIGlzIGV4aXRlZCB0aGUgY291bnQgaXMgZGVjcmVtZW50ZWQgLSB3aXRoIGludGVycnVwdHMgb25seQ0KK2JlaW5nIHJlLWVuYWJsZWQgaWYgdGhlIGNvdW50IGlzIHplcm8uDQorDQordXNDcml0aWNhbE5lc3Rpbmcgd2lsbCBnZXQgc2V0IHRvIHplcm8gd2hlbiB0aGUgc2NoZWR1bGVyIHN0YXJ0cywgYnV0IG11c3QNCitub3QgYmUgaW5pdGlhbGlzZWQgdG8gemVybyBhcyB0aGlzIHdpbGwgY2F1c2UgcHJvYmxlbXMgZHVyaW5nIHRoZSBzdGFydHVwDQorc2VxdWVuY2UuICovDQogdm9sYXRpbGUgdWludDE2X3QgdXNDcml0aWNhbE5lc3RpbmcgPSBwb3J0SU5JVElBTF9DUklUSUNBTF9ORVNUSU5HOw0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KQEAgLTY5LDk4ICs2OSw5NSBAQAogICoNCiAgKiBTZWUgdGhlIGhlYWRlciBmaWxlIHBvcnRhYmxlLmguDQogICovDQotU3RhY2tUeXBlX3QgKiBweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICogcHhUb3BPZlN0YWNrLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYXNrRnVuY3Rpb25fdCBweENvZGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KK1N0YWNrVHlwZV90ICpweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICpweFRvcE9mU3RhY2ssIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzICkNCiB7DQotICAgIHVpbnQxNl90ICogcHVzVG9wT2ZTdGFjazsNCi0gICAgdWludDMyX3QgKiBwdWxUb3BPZlN0YWNrOw0KK3VpbnQxNl90ICpwdXNUb3BPZlN0YWNrOw0KK3VpbnQzMl90ICpwdWxUb3BPZlN0YWNrOw0KIA0KLSAgICAvKg0KLSAgICAgKiAgUGxhY2UgYSBmZXcgYnl0ZXMgb2Yga25vd24gdmFsdWVzIG9uIHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLg0KLSAgICAgKiAgVGhpcyBpcyBqdXN0IHVzZWZ1bCBmb3IgZGVidWdnaW5nIGFuZCBjYW4gYmUgaW5jbHVkZWQgaWYgcmVxdWlyZWQuDQotICAgICAqDQotICAgICAqIHB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDExMTE7DQotICAgICAqICBweFRvcE9mU3RhY2stLTsNCi0gICAgICogcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MjIyMjsNCi0gICAgICogIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgKiBweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgzMzMzOw0KLSAgICAgKi8NCisJLyoNCisJCVBsYWNlIGEgZmV3IGJ5dGVzIG9mIGtub3duIHZhbHVlcyBvbiB0aGUgYm90dG9tIG9mIHRoZSBzdGFjay4NCisJCVRoaXMgaXMganVzdCB1c2VmdWwgZm9yIGRlYnVnZ2luZyBhbmQgY2FuIGJlIGluY2x1ZGVkIGlmIHJlcXVpcmVkLg0KKwkNCisJCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMTExOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MjIyMjsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDMzMzM7DQorCSovDQogDQotICAgIC8qIFN0YWNrVHlwZV90IGlzIGVpdGhlciAxNiBiaXRzIG9yIDMyIGJpdHMgZGVwZW5kaW5nIG9uIHRoZSBkYXRhIG1vZGVsLg0KLSAgICAgKiBTb21lIHN0YWNrZWQgaXRlbXMgZG8gbm90IGNoYW5nZSBzaXplIGRlcGVuZGluZyBvbiB0aGUgZGF0YSBtb2RlbCBzbyBoYXZlDQotICAgICAqIHRvIGJlIGV4cGxpY2l0bHkgY2FzdCB0byB0aGUgY29ycmVjdCBzaXplIHNvIHRoaXMgZnVuY3Rpb24gd2lsbCB3b3JrDQotICAgICAqIHdoaWNoZXZlciBkYXRhIG1vZGVsIGlzIGJlaW5nIHVzZWQuICovDQotICAgIGlmKCBzaXplb2YoIFN0YWNrVHlwZV90ICkgPT0gc2l6ZW9mKCB1aW50MTZfdCApICkNCi0gICAgew0KLSAgICAgICAgLyogTWFrZSByb29tIGZvciBhIDIwIGJpdCB2YWx1ZSBzdG9yZWQgYXMgYSAzMiBiaXQgdmFsdWUuICovDQotICAgICAgICBwdXNUb3BPZlN0YWNrID0gKCB1aW50MTZfdCAqICkgcHhUb3BPZlN0YWNrOw0KLSAgICAgICAgcHVzVG9wT2ZTdGFjay0tOw0KLSAgICAgICAgcHVsVG9wT2ZTdGFjayA9ICggdWludDMyX3QgKiApIHB1c1RvcE9mU3RhY2s7DQotICAgIH0NCi0gICAgZWxzZQ0KLSAgICB7DQotICAgICAgICBwdWxUb3BPZlN0YWNrID0gKCB1aW50MzJfdCAqICkgcHhUb3BPZlN0YWNrOw0KLSAgICB9DQorCS8qIFN0YWNrVHlwZV90IGlzIGVpdGhlciAxNiBiaXRzIG9yIDMyIGJpdHMgZGVwZW5kaW5nIG9uIHRoZSBkYXRhIG1vZGVsLg0KKwlTb21lIHN0YWNrZWQgaXRlbXMgZG8gbm90IGNoYW5nZSBzaXplIGRlcGVuZGluZyBvbiB0aGUgZGF0YSBtb2RlbCBzbyBoYXZlDQorCXRvIGJlIGV4cGxpY2l0bHkgY2FzdCB0byB0aGUgY29ycmVjdCBzaXplIHNvIHRoaXMgZnVuY3Rpb24gd2lsbCB3b3JrDQorCXdoaWNoZXZlciBkYXRhIG1vZGVsIGlzIGJlaW5nIHVzZWQuICovDQorCWlmKCBzaXplb2YoIFN0YWNrVHlwZV90ICkgPT0gc2l6ZW9mKCB1aW50MTZfdCApICkNCisJew0KKwkJLyogTWFrZSByb29tIGZvciBhIDIwIGJpdCB2YWx1ZSBzdG9yZWQgYXMgYSAzMiBiaXQgdmFsdWUuICovDQorCQlwdXNUb3BPZlN0YWNrID0gKCB1aW50MTZfdCAqICkgcHhUb3BPZlN0YWNrOw0KKwkJcHVzVG9wT2ZTdGFjay0tOw0KKwkJcHVsVG9wT2ZTdGFjayA9ICggdWludDMyX3QgKiApIHB1c1RvcE9mU3RhY2s7DQorCX0NCisJZWxzZQ0KKwl7DQorCQlwdWxUb3BPZlN0YWNrID0gKCB1aW50MzJfdCAqICkgcHhUb3BPZlN0YWNrOw0KKwl9DQorCSpwdWxUb3BPZlN0YWNrID0gKCB1aW50MzJfdCApIHB4Q29kZTsNCisJDQorCXB1c1RvcE9mU3RhY2sgPSAoIHVpbnQxNl90ICogKSBwdWxUb3BPZlN0YWNrOw0KKwlwdXNUb3BPZlN0YWNrLS07DQorCSpwdXNUb3BPZlN0YWNrID0gcG9ydEZMQUdTX0lOVF9FTkFCTEVEOw0KKwlwdXNUb3BPZlN0YWNrIC09ICggc2l6ZW9mKCBTdGFja1R5cGVfdCApIC8gMiApOw0KKwkNCisJLyogRnJvbSBoZXJlIG9uIHRoZSBzaXplIG9mIHN0YWNrZWQgaXRlbXMgZGVwZW5kcyBvbiB0aGUgbWVtb3J5IG1vZGVsLiAqLw0KKwlweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICogKSBwdXNUb3BPZlN0YWNrOw0KIA0KLSAgICAqcHVsVG9wT2ZTdGFjayA9ICggdWludDMyX3QgKSBweENvZGU7DQotDQotICAgIHB1c1RvcE9mU3RhY2sgPSAoIHVpbnQxNl90ICogKSBwdWxUb3BPZlN0YWNrOw0KLSAgICBwdXNUb3BPZlN0YWNrLS07DQotICAgICpwdXNUb3BPZlN0YWNrID0gcG9ydEZMQUdTX0lOVF9FTkFCTEVEOw0KLSAgICBwdXNUb3BPZlN0YWNrIC09ICggc2l6ZW9mKCBTdGFja1R5cGVfdCApIC8gMiApOw0KLQ0KLSAgICAvKiBGcm9tIGhlcmUgb24gdGhlIHNpemUgb2Ygc3RhY2tlZCBpdGVtcyBkZXBlbmRzIG9uIHRoZSBtZW1vcnkgbW9kZWwuICovDQotICAgIHB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKiApIHB1c1RvcE9mU3RhY2s7DQotDQotICAgIC8qIE5leHQgdGhlIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMuICovDQotICAgICNpZmRlZiBQUkVMT0FEX1JFR0lTVEVSX1ZBTFVFUw0KLSAgICAgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweGZmZmY7DQotICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhlZWVlOw0KLSAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4ZGRkZDsNCi0gICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwdlBhcmFtZXRlcnM7DQotICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhiYmJiOw0KLSAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4YWFhYTsNCi0gICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDk5OTk7DQotICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHg4ODg4Ow0KLSAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4NTU1NTsNCi0gICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDY2NjY7DQotICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHg1NTU1Ow0KLSAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4NDQ0NDsNCi0gICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAjZWxzZSAvKiBpZmRlZiBQUkVMT0FEX1JFR0lTVEVSX1ZBTFVFUyAqLw0KLSAgICAgICAgcHhUb3BPZlN0YWNrIC09IDM7DQotICAgICAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB2UGFyYW1ldGVyczsNCi0gICAgICAgIHB4VG9wT2ZTdGFjayAtPSA5Ow0KLSAgICAjZW5kaWYgLyogaWZkZWYgUFJFTE9BRF9SRUdJU1RFUl9WQUxVRVMgKi8NCisJLyogTmV4dCB0aGUgZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycy4gKi8NCisJI2lmZGVmIFBSRUxPQURfUkVHSVNURVJfVkFMVUVTDQorCQkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4ZmZmZjsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweGVlZWU7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhkZGRkOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB2UGFyYW1ldGVyczsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweGJiYmI7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhhYWFhOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4OTk5OTsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDg4ODg7DQorCQlweFRvcE9mU3RhY2stLTsJDQorCQkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4NTU1NTsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDY2NjY7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHg1NTU1Ow0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4NDQ0NDsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkjZWxzZQ0KKwkJcHhUb3BPZlN0YWNrIC09IDM7DQorCQkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB2UGFyYW1ldGVyczsNCisJCXB4VG9wT2ZTdGFjayAtPSA5Ow0KKwkjZW5kaWYNCiANCiANCi0gICAgLyogQSB2YXJpYWJsZSBpcyB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGNyaXRpY2FsIHNlY3Rpb24gbmVzdGluZy4NCi0gICAgICogVGhpcyB2YXJpYWJsZSBoYXMgdG8gYmUgc3RvcmVkIGFzIHBhcnQgb2YgdGhlIHRhc2sgY29udGV4dCBhbmQgaXMNCi0gICAgICogaW5pdGlhbGx5IHNldCB0byB6ZXJvLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkc7DQorCS8qIEEgdmFyaWFibGUgaXMgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSBjcml0aWNhbCBzZWN0aW9uIG5lc3RpbmcuDQorCVRoaXMgdmFyaWFibGUgaGFzIHRvIGJlIHN0b3JlZCBhcyBwYXJ0IG9mIHRoZSB0YXNrIGNvbnRleHQgYW5kIGlzDQorCWluaXRpYWxseSBzZXQgdG8gemVyby4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwb3J0Tk9fQ1JJVElDQUxfU0VDVElPTl9ORVNUSU5HOwkNCiANCi0gICAgLyogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgdG9wIG9mIHRoZSBzdGFjayB3ZSBoYXZlIGdlbmVyYXRlZCBzbyB0aGlzIGNhbg0KLSAgICAgKiBiZSBzdG9yZWQgaW4gdGhlIHRhc2sgY29udHJvbCBibG9jayBmb3IgdGhlIHRhc2suICovDQotICAgIHJldHVybiBweFRvcE9mU3RhY2s7DQorCS8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHRvcCBvZiB0aGUgc3RhY2sgd2UgaGF2ZSBnZW5lcmF0ZWQgc28gdGhpcyBjYW4NCisJYmUgc3RvcmVkIGluIHRoZSB0YXNrIGNvbnRyb2wgYmxvY2sgZm9yIHRoZSB0YXNrLiAqLw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0RW5kU2NoZWR1bGVyKCB2b2lkICkNCiB7DQotICAgIC8qIEl0IGlzIHVubGlrZWx5IHRoYXQgdGhlIE1TUDQzMCBwb3J0IHdpbGwgZ2V0IHN0b3BwZWQuICBJZiByZXF1aXJlZCBzaW1wbHkNCi0gICAgICogZGlzYWJsZSB0aGUgdGljayBpbnRlcnJ1cHQgaGVyZS4gKi8NCisJLyogSXQgaXMgdW5saWtlbHkgdGhhdCB0aGUgTVNQNDMwIHBvcnQgd2lsbCBnZXQgc3RvcHBlZC4gIElmIHJlcXVpcmVkIHNpbXBseQ0KKwlkaXNhYmxlIHRoZSB0aWNrIGludGVycnVwdCBoZXJlLiAqLw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCkBAIC0xNjksMTUgKzE2NiwxNyBAQAogICovDQogdm9pZCB2UG9ydFNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKQ0KIHsNCi0gICAgdkFwcGxpY2F0aW9uU2V0dXBUaW1lckludGVycnVwdCgpOw0KKwl2QXBwbGljYXRpb25TZXR1cFRpbWVySW50ZXJydXB0KCk7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KICNwcmFnbWEgdmVjdG9yPWNvbmZpZ1RJQ0tfVkVDVE9SDQogX19pbnRlcnJ1cHQgX19yYXcgdm9pZCB2VGlja0lTUkVudHJ5KCB2b2lkICkNCiB7DQotICAgIGV4dGVybiB2b2lkIHZQb3J0VGlja0lTUiggdm9pZCApOw0KK2V4dGVybiB2b2lkIHZQb3J0VGlja0lTUiggdm9pZCApOw0KIA0KLSAgICBfX2JpY19TUl9yZWdpc3Rlcl9vbl9leGl0KCBTQ0cxICsgU0NHMCArIE9TQ09GRiArIENQVU9GRiApOw0KLSAgICB2UG9ydFRpY2tJU1IoKTsNCisJX19iaWNfU1JfcmVnaXN0ZXJfb25fZXhpdCggU0NHMSArIFNDRzAgKyBPU0NPRkYgKyBDUFVPRkYgKTsNCisJdlBvcnRUaWNrSVNSKCk7DQogfQ0KKw0KKwkNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9JQVIvTVNQNDMwWC9wb3J0bWFjcm8uaCBiL3BvcnRhYmxlL0lBUi9NU1A0MzBYL3BvcnRtYWNyby5oCmluZGV4IDcwODYwMWMuLmNmMGFhY2UgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0lBUi9NU1A0MzBYL3BvcnRtYWNyby5oCisrKyBiL3BvcnRhYmxlL0lBUi9NU1A0MzBYL3BvcnRtYWNyby5oCkBAIC00Miw3MiArNDIsNzIgQEAKICNpbmNsdWRlICJtc3A0MzAuaCINCiANCiAvKiBUeXBlIGRlZmluaXRpb25zLiAqLw0KLSNkZWZpbmUgcG9ydENIQVIgICAgICAgICBjaGFyDQotI2RlZmluZSBwb3J0RkxPQVQgICAgICAgIGZsb2F0DQotI2RlZmluZSBwb3J0RE9VQkxFICAgICAgIGRvdWJsZQ0KLSNkZWZpbmUgcG9ydExPTkcgICAgICAgICBsb25nDQotI2RlZmluZSBwb3J0U0hPUlQgICAgICAgIGludA0KLSNkZWZpbmUgcG9ydEJBU0VfVFlQRSAgICBzaG9ydA0KKyNkZWZpbmUgcG9ydENIQVIJCWNoYXINCisjZGVmaW5lIHBvcnRGTE9BVAkJZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUJCWRvdWJsZQ0KKyNkZWZpbmUgcG9ydExPTkcJCWxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVAkJaW50DQorI2RlZmluZSBwb3J0QkFTRV9UWVBFCXNob3J0DQogDQogLyogVGhlIHN0YWNrIHR5cGUgY2hhbmdlcyBkZXBlbmRpbmcgb24gdGhlIGRhdGEgbW9kZWwuICovDQotI2lmICggX19EQVRBX01PREVMX18gPT0gX19EQVRBX01PREVMX1NNQUxMX18gKQ0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19UWVBFICAgICAgICAgICB1aW50MTZfdA0KLSAgICAjZGVmaW5lIHBvcnRQT0lOVEVSX1NJWkVfVFlQRSAgICB1aW50MTZfdA0KKyNpZiggX19EQVRBX01PREVMX18gPT0gX19EQVRBX01PREVMX1NNQUxMX18gKQ0KKwkjZGVmaW5lIHBvcnRTVEFDS19UWVBFIHVpbnQxNl90DQorCSNkZWZpbmUgcG9ydFBPSU5URVJfU0laRV9UWVBFIHVpbnQxNl90DQogI2Vsc2UNCi0gICAgI2RlZmluZSBwb3J0U1RBQ0tfVFlQRSAgICAgICAgICAgdWludDMyX3QNCisJI2RlZmluZSBwb3J0U1RBQ0tfVFlQRSB1aW50MzJfdA0KICNlbmRpZg0KIA0KLXR5cGVkZWYgcG9ydFNUQUNLX1RZUEUgICBTdGFja1R5cGVfdDsNCi10eXBlZGVmIHNob3J0ICAgICAgICAgICAgQmFzZVR5cGVfdDsNCi10eXBlZGVmIHVuc2lnbmVkIHNob3J0ICAgVUJhc2VUeXBlX3Q7DQordHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSBTdGFja1R5cGVfdDsNCit0eXBlZGVmIHNob3J0IEJhc2VUeXBlX3Q7DQordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBVQmFzZVR5cGVfdDsNCiANCi0jaWYgKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KLSAgICB0eXBlZGVmIHVpbnQxNl90ICAgICBUaWNrVHlwZV90Ow0KLSAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQorI2lmKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KKwl0eXBlZGVmIHVpbnQxNl90IFRpY2tUeXBlX3Q7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIFRpY2tUeXBlX3QgKSAweGZmZmYNCiAjZWxzZQ0KLSAgICB0eXBlZGVmIHVpbnQzMl90ICAgICBUaWNrVHlwZV90Ow0KLSAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQorCXR5cGVkZWYgdWludDMyX3QgVGlja1R5cGVfdDsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTA0KICNlbmRpZg0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIEludGVycnVwdCBjb250cm9sIG1hY3Jvcy4gKi8NCi0jZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAgICBfRElOVCgpOyBfTk9QKCkNCi0jZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpICAgICBfRUlOVCgpOyBfTk9QKCkNCisjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKQlfRElOVCgpOyBfTk9QKCkNCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpCQlfRUlOVCgpOyBfTk9QKCkNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBDcml0aWNhbCBzZWN0aW9uIGNvbnRyb2wgbWFjcm9zLiAqLw0KLSNkZWZpbmUgcG9ydE5PX0NSSVRJQ0FMX1NFQ1RJT05fTkVTVElORyAgICAoICggdWludDE2X3QgKSAwICkNCisjZGVmaW5lIHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkcJCSggKCB1aW50MTZfdCApIDAgKQ0KIA0KLSNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBleHRlcm4gdm9sYXRpbGUgdWludDE2X3QgdXNDcml0aWNhbE5lc3Rpbmc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgLyogTm93IGludGVycnVwdHMgYXJlIGRpc2FibGVkIHVzQ3JpdGljYWxOZXN0aW5nIGNhbiBiZSBhY2Nlc3NlZCAqLyAgICAgIFwNCi0gICAgICAgIC8qIGRpcmVjdGx5LiAgSW5jcmVtZW50IHVsQ3JpdGljYWxOZXN0aW5nIHRvIGtlZXAgYSBjb3VudCBvZiBob3cgbWFueSAqLyBcDQotICAgICAgICAvKiB0aW1lcyBwb3J0RU5URVJfQ1JJVElDQUwoKSBoYXMgYmVlbiBjYWxsZWQuICovICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgdXNDcml0aWNhbE5lc3RpbmcrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgfQ0KKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkJCQkJCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCitleHRlcm4gdm9sYXRpbGUgdWludDE2X3QgdXNDcml0aWNhbE5lc3Rpbmc7CQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOwkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIE5vdyBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB1c0NyaXRpY2FsTmVzdGluZyBjYW4gYmUgYWNjZXNzZWQgKi8JCQlcDQorCS8qIGRpcmVjdGx5LiAgSW5jcmVtZW50IHVsQ3JpdGljYWxOZXN0aW5nIHRvIGtlZXAgYSBjb3VudCBvZiBob3cgbWFueSAqLwlcDQorCS8qIHRpbWVzIHBvcnRFTlRFUl9DUklUSUNBTCgpIGhhcyBiZWVuIGNhbGxlZC4gKi8JCQkJCQkJXA0KKwl1c0NyaXRpY2FsTmVzdGluZysrOwkJCQkJCQkJCQkJCQkJXA0KK30NCiANCi0jZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgZXh0ZXJuIHZvbGF0aWxlIHVpbnQxNl90IHVzQ3JpdGljYWxOZXN0aW5nOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBpZiggdXNDcml0aWNhbE5lc3RpbmcgPiBwb3J0Tk9fQ1JJVElDQUxfU0VDVElPTl9ORVNUSU5HICkgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBEZWNyZW1lbnQgdGhlIG5lc3RpbmcgY291bnQgYXMgd2UgYXJlIGxlYXZpbmcgYSBjcml0aWNhbCBzZWN0aW9uLiAqLyBcDQotICAgICAgICAgICAgdXNDcml0aWNhbE5lc3RpbmctLTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBJZiB0aGUgbmVzdGluZyBsZXZlbCBoYXMgcmVhY2hlZCB6ZXJvIHRoZW4gaW50ZXJydXB0cyBzaG91bGQgYmUgKi8gICBcDQotICAgICAgICAgICAgLyogcmUtZW5hYmxlZC4gKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIGlmKCB1c0NyaXRpY2FsTmVzdGluZyA9PSBwb3J0Tk9fQ1JJVElDQUxfU0VDVElPTl9ORVNUSU5HICkgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIH0NCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkJCQkJCQkJCQkJCQkJCVwNCit7CQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorZXh0ZXJuIHZvbGF0aWxlIHVpbnQxNl90IHVzQ3JpdGljYWxOZXN0aW5nOwkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCWlmKCB1c0NyaXRpY2FsTmVzdGluZyA+IHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkcgKQkJCQkJXA0KKwl7CQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCS8qIERlY3JlbWVudCB0aGUgbmVzdGluZyBjb3VudCBhcyB3ZSBhcmUgbGVhdmluZyBhIGNyaXRpY2FsIHNlY3Rpb24uICovCVwNCisJCXVzQ3JpdGljYWxOZXN0aW5nLS07CQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCS8qIElmIHRoZSBuZXN0aW5nIGxldmVsIGhhcyByZWFjaGVkIHplcm8gdGhlbiBpbnRlcnJ1cHRzIHNob3VsZCBiZSAqLwlcDQorCQkvKiByZS1lbmFibGVkLiAqLwkJCQkJCQkJCQkJCQkJXA0KKwkJaWYoIHVzQ3JpdGljYWxOZXN0aW5nID09IHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkcgKQkJCQlcDQorCQl7CQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCXBvcnRFTkFCTEVfSU5URVJSVVBUUygpOwkJCQkJCQkJCQkJXA0KKwkJfQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJfQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFRhc2sgdXRpbGl0aWVzLiAqLw0KQEAgLTExNiwyNiArMTE2LDI3IEBACiAgKiBNYW51YWwgY29udGV4dCBzd2l0Y2ggY2FsbGVkIGJ5IHBvcnRZSUVMRCBvciB0YXNrWUlFTEQuDQogICovDQogZXh0ZXJuIHZvaWQgdlBvcnRZaWVsZCggdm9pZCApOw0KLSNkZWZpbmUgcG9ydFlJRUxEKCkgICAgdlBvcnRZaWVsZCgpDQorI2RlZmluZSBwb3J0WUlFTEQoKSB2UG9ydFlpZWxkKCkNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBIYXJkd2FyZSBzcGVjaWZpY3MuICovDQotI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQgICAgMg0KLSNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSCAgICAgICggLTEgKQ0KLSNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TICAgICggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQotI2RlZmluZSBwb3J0Tk9QKCkgICAgX19ub19vcGVyYXRpb24oKQ0KKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UCQkJMg0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJCSggLTEgKQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TCQkJKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCisjZGVmaW5lIHBvcnROT1AoKQkJCQkJX19ub19vcGVyYXRpb24oKQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAqLw0KLSNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KLSNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgICAgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCiANCi0jZGVmaW5lIHBvcnRZSUVMRF9GUk9NX0lTUiggeCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCB4ICkgdlBvcnRZaWVsZCgpDQorI2RlZmluZSBwb3J0WUlFTERfRlJPTV9JU1IoIHggKSBpZiggeCApIHZQb3J0WWllbGQoKQ0KIA0KIHZvaWQgdkFwcGxpY2F0aW9uU2V0dXBUaW1lckludGVycnVwdCggdm9pZCApOw0KIA0KIC8qIHNpemVvZiggaW50ICkgIT0gc2l6ZW9mKCBsb25nICkgc28gYSBmdWxsIHByaW50ZigpIGxpYnJhcnkgaXMgcmVxdWlyZWQgaWYNCi0gKiBydW4gdGltZSBzdGF0cyBpbmZvcm1hdGlvbiBpcyB0byBiZSBkaXNwbGF5ZWQuICovDQorcnVuIHRpbWUgc3RhdHMgaW5mb3JtYXRpb24gaXMgdG8gYmUgZGlzcGxheWVkLiAqLw0KICNkZWZpbmUgcG9ydExVX1BSSU5URl9TUEVDSUZJRVJfUkVRVUlSRUQNCiANCiAjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8NCisNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9JQVIvUklTQy1WL2NoaXBfc3BlY2lmaWNfZXh0ZW5zaW9ucy9SVjMySV9DTElOVF9ub19leHRlbnNpb25zL2ZyZWVydG9zX3Jpc2Nfdl9jaGlwX3NwZWNpZmljX2V4dGVuc2lvbnMuaCBiL3BvcnRhYmxlL0lBUi9SSVNDLVYvY2hpcF9zcGVjaWZpY19leHRlbnNpb25zL1JWMzJJX0NMSU5UX25vX2V4dGVuc2lvbnMvZnJlZXJ0b3NfcmlzY192X2NoaXBfc3BlY2lmaWNfZXh0ZW5zaW9ucy5oCmluZGV4IDE4NzcwNTcuLjIyOTZiZTggMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0lBUi9SSVNDLVYvY2hpcF9zcGVjaWZpY19leHRlbnNpb25zL1JWMzJJX0NMSU5UX25vX2V4dGVuc2lvbnMvZnJlZXJ0b3NfcmlzY192X2NoaXBfc3BlY2lmaWNfZXh0ZW5zaW9ucy5oCisrKyBiL3BvcnRhYmxlL0lBUi9SSVNDLVYvY2hpcF9zcGVjaWZpY19leHRlbnNpb25zL1JWMzJJX0NMSU5UX25vX2V4dGVuc2lvbnMvZnJlZXJ0b3NfcmlzY192X2NoaXBfc3BlY2lmaWNfZXh0ZW5zaW9ucy5oCkBAIC01MywxNiArNTMsMTYgQEAKICNpZm5kZWYgX19GUkVFUlRPU19SSVNDX1ZfRVhURU5TSU9OU19IX18NCiAjZGVmaW5lIF9fRlJFRVJUT1NfUklTQ19WX0VYVEVOU0lPTlNfSF9fDQogDQotI2RlZmluZSBwb3J0YXNtSEFTX1NJRklWRV9DTElOVCAgICAgICAgICAgMQ0KLSNkZWZpbmUgcG9ydGFzbUhBU19NVElNRSAgICAgICAgICAgICAgICAgIDENCi0jZGVmaW5lIHBvcnRhc21BRERJVElPTkFMX0NPTlRFWFRfU0laRSAgICAwIC8qIE11c3QgYmUgZXZlbiBudW1iZXIgb24gMzItYml0IGNvcmVzLiAqLw0KKyNkZWZpbmUgcG9ydGFzbUhBU19TSUZJVkVfQ0xJTlQgMQ0KKyNkZWZpbmUgcG9ydGFzbUhBU19NVElNRSAxDQorI2RlZmluZSBwb3J0YXNtQURESVRJT05BTF9DT05URVhUX1NJWkUgMCAvKiBNdXN0IGJlIGV2ZW4gbnVtYmVyIG9uIDMyLWJpdCBjb3Jlcy4gKi8NCiANCiBwb3J0YXNtU0FWRV9BRERJVElPTkFMX1JFR0lTVEVSUyBNQUNSTw0KLS8qIE5vIGFkZGl0aW9uYWwgcmVnaXN0ZXJzIHRvIHNhdmUsIHNvIHRoaXMgbWFjcm8gZG9lcyBub3RoaW5nLiAqLw0KLUVORE0NCisJLyogTm8gYWRkaXRpb25hbCByZWdpc3RlcnMgdG8gc2F2ZSwgc28gdGhpcyBtYWNybyBkb2VzIG5vdGhpbmcuICovDQorCUVORE0NCiANCiBwb3J0YXNtUkVTVE9SRV9BRERJVElPTkFMX1JFR0lTVEVSUyBNQUNSTw0KLS8qIE5vIGFkZGl0aW9uYWwgcmVnaXN0ZXJzIHRvIHJlc3RvcmUsIHNvIHRoaXMgbWFjcm8gZG9lcyBub3RoaW5nLiAqLw0KLSAgICBFTkRNDQorCS8qIE5vIGFkZGl0aW9uYWwgcmVnaXN0ZXJzIHRvIHJlc3RvcmUsIHNvIHRoaXMgbWFjcm8gZG9lcyBub3RoaW5nLiAqLw0KKwlFTkRNDQogDQogI2VuZGlmIC8qIF9fRlJFRVJUT1NfUklTQ19WX0VYVEVOU0lPTlNfSF9fICovDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvSUFSL1JJU0MtVi9wb3J0LmMgYi9wb3J0YWJsZS9JQVIvUklTQy1WL3BvcnQuYwppbmRleCAzZDczMjcxLi5iZjhlY2EwIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9JQVIvUklTQy1WL3BvcnQuYworKysgYi9wb3J0YWJsZS9JQVIvUklTQy1WL3BvcnQuYwpAQCAtMjYsOCArMjYsOCBAQAogICovDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLSogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFibGUuaCBmb3IgdGhlIFJJU0MtViBSVjMyIHBvcnQuDQotKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyAqIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBSSVNDLVYgUlYzMiBwb3J0Lg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogU2NoZWR1bGVyIGluY2x1ZGVzLiAqLw0KICNpbmNsdWRlICJGcmVlUlRPUy5oIg0KQEAgLTM4LDQ0ICszOCw0NCBAQAogI2luY2x1ZGUgInN0cmluZy5oIg0KIA0KICNpZmRlZiBjb25maWdDTElOVF9CQVNFX0FERFJFU1MNCi0gICAgI3dhcm5pbmcgVGhlIGNvbmZpZ0NMSU5UX0JBU0VfQUREUkVTUyBjb25zdGFudCBoYXMgYmVlbiBkZXByZWNhdGVkLiAgY29uZmlnTVRJTUVfQkFTRV9BRERSRVNTIGFuZCBjb25maWdNVElNRUNNUF9CQVNFX0FERFJFU1MgYXJlIGN1cnJlbnRseSBiZWluZyBkZXJpdmVkIGZyb20gdGhlIChwb3NzaWJseSAwKSBjb25maWdDTElOVF9CQVNFX0FERFJFU1Mgc2V0dGluZy4gIFBsZWFzZSB1cGRhdGUgdG8gZGVmaW5lIGNvbmZpZ01USU1FX0JBU0VfQUREUkVTUyBhbmQgY29uZmlnTVRJTUVDTVBfQkFTRV9BRERSRVNTIGRpcmN0bHkgaW4gcGxhY2Ugb2YgY29uZmlnQ0xJTlRfQkFTRV9BRERSRVNTLiAgU2VlIGh0dHBzOiAvKnd3dy5mcmVlcnRvcy5vcmcvVXNpbmctRnJlZVJUT1Mtb24tUklTQy1WLmh0bWwgKi8NCisJI3dhcm5pbmcgVGhlIGNvbmZpZ0NMSU5UX0JBU0VfQUREUkVTUyBjb25zdGFudCBoYXMgYmVlbiBkZXByZWNhdGVkLiAgY29uZmlnTVRJTUVfQkFTRV9BRERSRVNTIGFuZCBjb25maWdNVElNRUNNUF9CQVNFX0FERFJFU1MgYXJlIGN1cnJlbnRseSBiZWluZyBkZXJpdmVkIGZyb20gdGhlIChwb3NzaWJseSAwKSBjb25maWdDTElOVF9CQVNFX0FERFJFU1Mgc2V0dGluZy4gIFBsZWFzZSB1cGRhdGUgdG8gZGVmaW5lIGNvbmZpZ01USU1FX0JBU0VfQUREUkVTUyBhbmQgY29uZmlnTVRJTUVDTVBfQkFTRV9BRERSRVNTIGRpcmN0bHkgaW4gcGxhY2Ugb2YgY29uZmlnQ0xJTlRfQkFTRV9BRERSRVNTLiAgU2VlIGh0dHBzOi8vd3d3LmZyZWVydG9zLm9yZy9Vc2luZy1GcmVlUlRPUy1vbi1SSVNDLVYuaHRtbA0KICNlbmRpZg0KIA0KICNpZm5kZWYgY29uZmlnTVRJTUVfQkFTRV9BRERSRVNTDQotICAgICN3YXJuaW5nIGNvbmZpZ01USU1FX0JBU0VfQUREUkVTUyBtdXN0IGJlIGRlZmluZWQgaW4gRnJlZVJUT1NDb25maWcuaC4gIElmIHRoZSB0YXJnZXQgY2hpcCBpbmNsdWRlcyBhIG1lbW9yeS1tYXBwZWQgbXRpbWUgcmVnaXN0ZXIgdGhlbiBzZXQgY29uZmlnTVRJTUVfQkFTRV9BRERSRVNTIHRvIHRoZSBtYXBwZWQgYWRkcmVzcy4gIE90aGVyd2lzZSBzZXQgY29uZmlnTVRJTUVfQkFTRV9BRERSRVNTIHRvIDAuICBTZWUgaHR0cHM6IC8qd3d3LmZyZWVydG9zLm9yZy9Vc2luZy1GcmVlUlRPUy1vbi1SSVNDLVYuaHRtbCAqLw0KKwkjd2FybmluZyBjb25maWdNVElNRV9CQVNFX0FERFJFU1MgbXVzdCBiZSBkZWZpbmVkIGluIEZyZWVSVE9TQ29uZmlnLmguICBJZiB0aGUgdGFyZ2V0IGNoaXAgaW5jbHVkZXMgYSBtZW1vcnktbWFwcGVkIG10aW1lIHJlZ2lzdGVyIHRoZW4gc2V0IGNvbmZpZ01USU1FX0JBU0VfQUREUkVTUyB0byB0aGUgbWFwcGVkIGFkZHJlc3MuICBPdGhlcndpc2Ugc2V0IGNvbmZpZ01USU1FX0JBU0VfQUREUkVTUyB0byAwLiAgU2VlIGh0dHBzOi8vd3d3LmZyZWVydG9zLm9yZy9Vc2luZy1GcmVlUlRPUy1vbi1SSVNDLVYuaHRtbA0KICNlbmRpZg0KIA0KICNpZm5kZWYgY29uZmlnTVRJTUVDTVBfQkFTRV9BRERSRVNTDQotICAgICN3YXJuaW5nIGNvbmZpZ01USU1FQ01QX0JBU0VfQUREUkVTUyBtdXN0IGJlIGRlZmluZWQgaW4gRnJlZVJUT1NDb25maWcuaC4gIElmIHRoZSB0YXJnZXQgY2hpcCBpbmNsdWRlcyBhIG1lbW9yeS1tYXBwZWQgbXRpbWVjbXAgcmVnaXN0ZXIgdGhlbiBzZXQgY29uZmlnTVRJTUVDTVBfQkFTRV9BRERSRVNTIHRvIHRoZSBtYXBwZWQgYWRkcmVzcy4gIE90aGVyd2lzZSBzZXQgY29uZmlnTVRJTUVDTVBfQkFTRV9BRERSRVNTIHRvIDAuICBTZWUgaHR0cHM6IC8qd3d3LmZyZWVydG9zLm9yZy9Vc2luZy1GcmVlUlRPUy1vbi1SSVNDLVYuaHRtbCAqLw0KKwkjd2FybmluZyBjb25maWdNVElNRUNNUF9CQVNFX0FERFJFU1MgbXVzdCBiZSBkZWZpbmVkIGluIEZyZWVSVE9TQ29uZmlnLmguICBJZiB0aGUgdGFyZ2V0IGNoaXAgaW5jbHVkZXMgYSBtZW1vcnktbWFwcGVkIG10aW1lY21wIHJlZ2lzdGVyIHRoZW4gc2V0IGNvbmZpZ01USU1FQ01QX0JBU0VfQUREUkVTUyB0byB0aGUgbWFwcGVkIGFkZHJlc3MuICBPdGhlcndpc2Ugc2V0IGNvbmZpZ01USU1FQ01QX0JBU0VfQUREUkVTUyB0byAwLiAgU2VlIGh0dHBzOi8vd3d3LmZyZWVydG9zLm9yZy9Vc2luZy1GcmVlUlRPUy1vbi1SSVNDLVYuaHRtbA0KICNlbmRpZg0KIA0KIC8qIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgcHJlLWxvYWRpbmcgb2YgdGhlIGluaXRpYWwgTFIgd2l0aCB0aGUgYWRkcmVzcyBvZg0KLSAqIHBydlRhc2tFeGl0RXJyb3IoKSBpbiBjYXNlIGl0IG1lc3NlcyB1cCB1bndpbmRpbmcgb2YgdGhlIHN0YWNrIGluIHRoZQ0KLSAqIGRlYnVnZ2VyLiAqLw0KK3BydlRhc2tFeGl0RXJyb3IoKSBpbiBjYXNlIGl0IG1lc3NlcyB1cCB1bndpbmRpbmcgb2YgdGhlIHN0YWNrIGluIHRoZQ0KK2RlYnVnZ2VyLiAqLw0KICNpZmRlZiBjb25maWdUQVNLX1JFVFVSTl9BRERSRVNTDQotICAgICNkZWZpbmUgcG9ydFRBU0tfUkVUVVJOX0FERFJFU1MgICAgY29uZmlnVEFTS19SRVRVUk5fQUREUkVTUw0KKwkjZGVmaW5lIHBvcnRUQVNLX1JFVFVSTl9BRERSRVNTCWNvbmZpZ1RBU0tfUkVUVVJOX0FERFJFU1MNCiAjZWxzZQ0KLSAgICAjZGVmaW5lIHBvcnRUQVNLX1JFVFVSTl9BRERSRVNTICAgIHBydlRhc2tFeGl0RXJyb3INCisJI2RlZmluZSBwb3J0VEFTS19SRVRVUk5fQUREUkVTUwlwcnZUYXNrRXhpdEVycm9yDQogI2VuZGlmDQogDQogLyogVGhlIHN0YWNrIHVzZWQgYnkgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZXMuICBTZXQgY29uZmlnSVNSX1NUQUNLX1NJWkVfV09SRFMNCi0gKiB0byB1c2UgYSBzdGF0aWNhbGx5IGFsbG9jYXRlZCBhcnJheSBhcyB0aGUgaW50ZXJydXB0IHN0YWNrLiAgQWx0ZXJuYXRpdmUgbGVhdmUNCi0gKiBjb25maWdJU1JfU1RBQ0tfU0laRV9XT1JEUyB1bmRlZmluZWQgYW5kIHVwZGF0ZSB0aGUgbGlua2VyIHNjcmlwdCBzbyB0aGF0IGENCi0gKiBsaW5rZXIgdmFyaWFibGUgbmFtZXMgX19mcmVlcnRvc19pcnFfc3RhY2tfdG9wIGhhcyB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUgdG9wDQotICogb2YgdGhlIHN0YWNrIHVzZWQgYnkgbWFpbi4gIFVzaW5nIHRoZSBsaW5rZXIgc2NyaXB0IG1ldGhvZCB3aWxsIHJlcHVycG9zZSB0aGUNCi0gKiBzdGFjayB0aGF0IHdhcyB1c2VkIGJ5IG1haW4gYmVmb3JlIHRoZSBzY2hlZHVsZXIgd2FzIHN0YXJ0ZWQgZm9yIHVzZSBhcyB0aGUNCi0gKiBpbnRlcnJ1cHQgc3RhY2sgYWZ0ZXIgdGhlIHNjaGVkdWxlciBoYXMgc3RhcnRlZC4gKi8NCit0byB1c2UgYSBzdGF0aWNhbGx5IGFsbG9jYXRlZCBhcnJheSBhcyB0aGUgaW50ZXJydXB0IHN0YWNrLiAgQWx0ZXJuYXRpdmUgbGVhdmUNCitjb25maWdJU1JfU1RBQ0tfU0laRV9XT1JEUyB1bmRlZmluZWQgYW5kIHVwZGF0ZSB0aGUgbGlua2VyIHNjcmlwdCBzbyB0aGF0IGENCitsaW5rZXIgdmFyaWFibGUgbmFtZXMgX19mcmVlcnRvc19pcnFfc3RhY2tfdG9wIGhhcyB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUgdG9wDQorb2YgdGhlIHN0YWNrIHVzZWQgYnkgbWFpbi4gIFVzaW5nIHRoZSBsaW5rZXIgc2NyaXB0IG1ldGhvZCB3aWxsIHJlcHVycG9zZSB0aGUNCitzdGFjayB0aGF0IHdhcyB1c2VkIGJ5IG1haW4gYmVmb3JlIHRoZSBzY2hlZHVsZXIgd2FzIHN0YXJ0ZWQgZm9yIHVzZSBhcyB0aGUNCitpbnRlcnJ1cHQgc3RhY2sgYWZ0ZXIgdGhlIHNjaGVkdWxlciBoYXMgc3RhcnRlZC4gKi8NCiAjaWZkZWYgY29uZmlnSVNSX1NUQUNLX1NJWkVfV09SRFMNCi0gICAgc3RhdGljIF9fYXR0cmlidXRlX18oICggYWxpZ25lZCggMTYgKSApICkgU3RhY2tUeXBlX3QgeElTUlN0YWNrWyBjb25maWdJU1JfU1RBQ0tfU0laRV9XT1JEUyBdID0geyAwIH07DQotICAgIGNvbnN0IFN0YWNrVHlwZV90IHhJU1JTdGFja1RvcCA9ICggU3RhY2tUeXBlX3QgKSAmKCB4SVNSU3RhY2tbIGNvbmZpZ0lTUl9TVEFDS19TSVpFX1dPUkRTICYgfnBvcnRCWVRFX0FMSUdOTUVOVF9NQVNLIF0gKTsNCisJc3RhdGljIF9fYXR0cmlidXRlX18gKChhbGlnbmVkKDE2KSkpIFN0YWNrVHlwZV90IHhJU1JTdGFja1sgY29uZmlnSVNSX1NUQUNLX1NJWkVfV09SRFMgXSA9IHsgMCB9Ow0KKwljb25zdCBTdGFja1R5cGVfdCB4SVNSU3RhY2tUb3AgPSAoIFN0YWNrVHlwZV90ICkgJiggeElTUlN0YWNrWyBjb25maWdJU1JfU1RBQ0tfU0laRV9XT1JEUyAmIH5wb3J0QllURV9BTElHTk1FTlRfTUFTSyBdICk7DQogDQotLyogRG9uJ3QgdXNlIDB4YTUgYXMgdGhlIHN0YWNrIGZpbGwgYnl0ZXMgYXMgdGhhdCBpcyB1c2VkIGJ5IHRoZSBrZXJuZXJsIGZvcg0KLSAqIHRoZSB0YXNrIHN0YWNrcywgYW5kIHNvIHdpbGwgbGVnaXRpbWF0ZWx5IGFwcGVhciBpbiBtYW55IHBvc2l0aW9ucyB3aXRoaW4NCi0gKiB0aGUgSVNSIHN0YWNrLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFICAgIDB4ZWUNCisJLyogRG9uJ3QgdXNlIDB4YTUgYXMgdGhlIHN0YWNrIGZpbGwgYnl0ZXMgYXMgdGhhdCBpcyB1c2VkIGJ5IHRoZSBrZXJuZXJsIGZvcg0KKwl0aGUgdGFzayBzdGFja3MsIGFuZCBzbyB3aWxsIGxlZ2l0aW1hdGVseSBhcHBlYXIgaW4gbWFueSBwb3NpdGlvbnMgd2l0aGluDQorCXRoZSBJU1Igc3RhY2suICovDQorCSNkZWZpbmUgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUJMHhlZQ0KICNlbHNlDQotICAgIGV4dGVybiBjb25zdCB1aW50MzJfdCBfX2ZyZWVydG9zX2lycV9zdGFja190b3BbXTsNCi0gICAgY29uc3QgU3RhY2tUeXBlX3QgeElTUlN0YWNrVG9wID0gKCBTdGFja1R5cGVfdCApIF9fZnJlZXJ0b3NfaXJxX3N0YWNrX3RvcDsNCisJZXh0ZXJuIGNvbnN0IHVpbnQzMl90IF9fZnJlZXJ0b3NfaXJxX3N0YWNrX3RvcFtdOw0KKwljb25zdCBTdGFja1R5cGVfdCB4SVNSU3RhY2tUb3AgPSAoIFN0YWNrVHlwZV90ICkgX19mcmVlcnRvc19pcnFfc3RhY2tfdG9wOw0KICNlbmRpZg0KIA0KIC8qDQpAQCAtODMsMTMwICs4MywxMzAgQEAKICAqIGZpbGUgaXMgd2VhayB0byBhbGxvdyBhcHBsaWNhdGlvbiB3cml0ZXJzIHRvIGNoYW5nZSB0aGUgdGltZXIgdXNlZCB0bw0KICAqIGdlbmVyYXRlIHRoZSB0aWNrIGludGVycnVwdC4NCiAgKi8NCi12b2lkIHZQb3J0U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApIF9fYXR0cmlidXRlX18oICggd2VhayApICk7DQordm9pZCB2UG9ydFNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fKCggd2VhayApKTsNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBVc2VkIHRvIHByb2dyYW0gdGhlIG1hY2hpbmUgdGltZXIgY29tcGFyZSByZWdpc3Rlci4gKi8NCiB1aW50NjRfdCB1bGxOZXh0VGltZSA9IDBVTEw7DQotY29uc3QgdWludDY0X3QgKiBwdWxsTmV4dFRpbWUgPSAmdWxsTmV4dFRpbWU7DQorY29uc3QgdWludDY0X3QgKnB1bGxOZXh0VGltZSA9ICZ1bGxOZXh0VGltZTsNCiBjb25zdCBzaXplX3QgdXhUaW1lckluY3JlbWVudHNGb3JPbmVUaWNrID0gKCBzaXplX3QgKSAoICggY29uZmlnQ1BVX0NMT0NLX0haICkgLyAoIGNvbmZpZ1RJQ0tfUkFURV9IWiApICk7IC8qIEFzc3VtZXMgaW5jcmVtZW50IHdvbid0IGdvIG92ZXIgMzItYml0cy4gKi8NCiB1aW50MzJfdCBjb25zdCB1bGxNYWNoaW5lVGltZXJDb21wYXJlUmVnaXN0ZXJCYXNlID0gY29uZmlnTVRJTUVDTVBfQkFTRV9BRERSRVNTOw0KIHZvbGF0aWxlIHVpbnQ2NF90ICogcHVsbE1hY2hpbmVUaW1lckNvbXBhcmVSZWdpc3RlciA9IE5VTEw7DQogDQogLyogU2V0IGNvbmZpZ0NIRUNLX0ZPUl9TVEFDS19PVkVSRkxPVyB0byAzIHRvIGFkZCBJU1Igc3RhY2sgY2hlY2tpbmcgdG8gdGFzaw0KLSAqIHN0YWNrIGNoZWNraW5nLiAgQSBwcm9ibGVtIGluIHRoZSBJU1Igc3RhY2sgd2lsbCB0cmlnZ2VyIGFuIGFzc2VydCwgbm90IGNhbGwgdGhlDQotICogc3RhY2sgb3ZlcmZsb3cgaG9vayBmdW5jdGlvbiAoYmVjYXVzZSB0aGUgc3RhY2sgb3ZlcmZsb3cgaG9vayBpcyBzcGVjaWZpYyB0byBhDQotICogdGFzayBzdGFjaywgbm90IHRoZSBJU1Igc3RhY2spLiAqLw0KK3N0YWNrIGNoZWNraW5nLiAgQSBwcm9ibGVtIGluIHRoZSBJU1Igc3RhY2sgd2lsbCB0cmlnZ2VyIGFuIGFzc2VydCwgbm90IGNhbGwgdGhlDQorc3RhY2sgb3ZlcmZsb3cgaG9vayBmdW5jdGlvbiAoYmVjYXVzZSB0aGUgc3RhY2sgb3ZlcmZsb3cgaG9vayBpcyBzcGVjaWZpYyB0byBhDQordGFzayBzdGFjaywgbm90IHRoZSBJU1Igc3RhY2spLiAqLw0KICNpZiBkZWZpbmVkKCBjb25maWdJU1JfU1RBQ0tfU0laRV9XT1JEUyApICYmICggY29uZmlnQ0hFQ0tfRk9SX1NUQUNLX09WRVJGTE9XID4gMiApDQotICAgICN3YXJuaW5nIFRoaXMgcGF0aCBub3QgdGVzdGVkLCBvciBldmVuIGNvbXBpbGVkIHlldC4NCisJI3dhcm5pbmcgVGhpcyBwYXRoIG5vdCB0ZXN0ZWQsIG9yIGV2ZW4gY29tcGlsZWQgeWV0Lg0KIA0KLSAgICBzdGF0aWMgY29uc3QgdWludDhfdCB1Y0V4cGVjdGVkU3RhY2tCeXRlc1tdID0NCi0gICAgew0KLSAgICAgICAgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIFwNCi0gICAgICAgIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBcDQotICAgICAgICBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgXA0KLSAgICAgICAgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIFwNCi0gICAgICAgIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFDQotICAgIH07IFwNCisJc3RhdGljIGNvbnN0IHVpbnQ4X3QgdWNFeHBlY3RlZFN0YWNrQnl0ZXNbXSA9IHsNCisJCQkJCQkJCQlwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwJCVwNCisJCQkJCQkJCQlwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwJCVwNCisJCQkJCQkJCQlwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwJCVwNCisJCQkJCQkJCQlwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwJCVwNCisJCQkJCQkJCQlwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSB9OwlcDQogDQotICAgICNkZWZpbmUgcG9ydENIRUNLX0lTUl9TVEFDSygpICAgIGNvbmZpZ0FTU0VSVCggKCBtZW1jbXAoICggdm9pZCAqICkgeElTUlN0YWNrLCAoIHZvaWQgKiApIHVjRXhwZWN0ZWRTdGFja0J5dGVzLCBzaXplb2YoIHVjRXhwZWN0ZWRTdGFja0J5dGVzICkgKSA9PSAwICkgKQ0KLSNlbHNlIC8qIGlmIGRlZmluZWQoIGNvbmZpZ0lTUl9TVEFDS19TSVpFX1dPUkRTICkgJiYgKCBjb25maWdDSEVDS19GT1JfU1RBQ0tfT1ZFUkZMT1cgPiAyICkgKi8NCi0gICAgLyogRGVmaW5lIHRoZSBmdW5jdGlvbiBhd2F5LiAqLw0KLSAgICAjZGVmaW5lIHBvcnRDSEVDS19JU1JfU1RBQ0soKQ0KKwkjZGVmaW5lIHBvcnRDSEVDS19JU1JfU1RBQ0soKSBjb25maWdBU1NFUlQoICggbWVtY21wKCAoIHZvaWQgKiApIHhJU1JTdGFjaywgKCB2b2lkICogKSB1Y0V4cGVjdGVkU3RhY2tCeXRlcywgc2l6ZW9mKCB1Y0V4cGVjdGVkU3RhY2tCeXRlcyApICkgPT0gMCApICkNCisjZWxzZQ0KKwkvKiBEZWZpbmUgdGhlIGZ1bmN0aW9uIGF3YXkuICovDQorCSNkZWZpbmUgcG9ydENIRUNLX0lTUl9TVEFDSygpDQogI2VuZGlmIC8qIGNvbmZpZ0NIRUNLX0ZPUl9TVEFDS19PVkVSRkxPVyA+IDIgKi8NCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0jaWYgKCBjb25maWdNVElNRV9CQVNFX0FERFJFU1MgIT0gMCApICYmICggY29uZmlnTVRJTUVDTVBfQkFTRV9BRERSRVNTICE9IDAgKQ0KKyNpZiggY29uZmlnTVRJTUVfQkFTRV9BRERSRVNTICE9IDAgKSAmJiAoIGNvbmZpZ01USU1FQ01QX0JBU0VfQUREUkVTUyAhPSAwICkNCiANCi0gICAgdm9pZCB2UG9ydFNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKQ0KLSAgICB7DQotICAgICAgICB1aW50MzJfdCB1bEN1cnJlbnRUaW1lSGlnaCwgdWxDdXJyZW50VGltZUxvdzsNCi0gICAgICAgIHZvbGF0aWxlIHVpbnQzMl90ICogY29uc3QgcHVsVGltZUhpZ2ggPSAoIHVpbnQzMl90ICogKSAoICggY29uZmlnTVRJTUVfQkFTRV9BRERSRVNTICkgKyA0VUwgKTsgLyogOC1ieXRlIHR5cGVyIHNvIGhpZ2ggMzItYml0IHdvcmQgaXMgNCBieXRlcyB1cC4gKi8NCi0gICAgICAgIHZvbGF0aWxlIHVpbnQzMl90ICogY29uc3QgcHVsVGltZUxvdyA9ICggdWludDMyX3QgKiApICggY29uZmlnTVRJTUVfQkFTRV9BRERSRVNTICk7DQotICAgICAgICB2b2xhdGlsZSB1aW50MzJfdCB1bEhhcnRJZDsNCisJdm9pZCB2UG9ydFNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKQ0KKwl7DQorCXVpbnQzMl90IHVsQ3VycmVudFRpbWVIaWdoLCB1bEN1cnJlbnRUaW1lTG93Ow0KKwl2b2xhdGlsZSB1aW50MzJfdCAqIGNvbnN0IHB1bFRpbWVIaWdoID0gKCB1aW50MzJfdCAqICkgKCAoIGNvbmZpZ01USU1FX0JBU0VfQUREUkVTUyApICsgNFVMICk7IC8qIDgtYnl0ZSB0eXBlciBzbyBoaWdoIDMyLWJpdCB3b3JkIGlzIDQgYnl0ZXMgdXAuICovDQorCXZvbGF0aWxlIHVpbnQzMl90ICogY29uc3QgcHVsVGltZUxvdyA9ICggdWludDMyX3QgKiApICggY29uZmlnTVRJTUVfQkFTRV9BRERSRVNTICk7DQorCXZvbGF0aWxlIHVpbnQzMl90IHVsSGFydElkOw0KIA0KLSAgICAgICAgX19hc20gdm9sYXRpbGUgKCAiY3NyciAlMCwgMHhmMTQiIDogIj1yIiAoIHVsSGFydElkICkgKTsgLyogMHhmMTQgaXMgaGFydGlkLiAqLw0KKwkJX19hc20gdm9sYXRpbGUoICJjc3JyICUwLCAweGYxNCIgOiAiPXIiKCB1bEhhcnRJZCApICk7IC8qIDB4ZjE0IGlzIGhhcnRpZC4gKi8NCisJCXB1bGxNYWNoaW5lVGltZXJDb21wYXJlUmVnaXN0ZXIgID0gKCB2b2xhdGlsZSB1aW50NjRfdCAqICkgKCB1bGxNYWNoaW5lVGltZXJDb21wYXJlUmVnaXN0ZXJCYXNlICsgKCB1bEhhcnRJZCAqIHNpemVvZiggdWludDY0X3QgKSApICk7DQogDQotICAgICAgICBwdWxsTWFjaGluZVRpbWVyQ29tcGFyZVJlZ2lzdGVyID0gKCB2b2xhdGlsZSB1aW50NjRfdCAqICkgKCB1bGxNYWNoaW5lVGltZXJDb21wYXJlUmVnaXN0ZXJCYXNlICsgKCB1bEhhcnRJZCAqIHNpemVvZiggdWludDY0X3QgKSApICk7DQorCQlkbw0KKwkJew0KKwkJCXVsQ3VycmVudFRpbWVIaWdoID0gKnB1bFRpbWVIaWdoOw0KKwkJCXVsQ3VycmVudFRpbWVMb3cgPSAqcHVsVGltZUxvdzsNCisJCX0gd2hpbGUoIHVsQ3VycmVudFRpbWVIaWdoICE9ICpwdWxUaW1lSGlnaCApOw0KIA0KLSAgICAgICAgZG8NCi0gICAgICAgIHsNCi0gICAgICAgICAgICB1bEN1cnJlbnRUaW1lSGlnaCA9ICpwdWxUaW1lSGlnaDsNCi0gICAgICAgICAgICB1bEN1cnJlbnRUaW1lTG93ID0gKnB1bFRpbWVMb3c7DQotICAgICAgICB9IHdoaWxlKCB1bEN1cnJlbnRUaW1lSGlnaCAhPSAqcHVsVGltZUhpZ2ggKTsNCisJCXVsbE5leHRUaW1lID0gKCB1aW50NjRfdCApIHVsQ3VycmVudFRpbWVIaWdoOw0KKwkJdWxsTmV4dFRpbWUgPDw9IDMyVUxMOyAvKiBIaWdoIDQtYnl0ZSB3b3JkIGlzIDMyLWJpdHMgdXAuICovDQorCQl1bGxOZXh0VGltZSB8PSAoIHVpbnQ2NF90ICkgdWxDdXJyZW50VGltZUxvdzsNCisJCXVsbE5leHRUaW1lICs9ICggdWludDY0X3QgKSB1eFRpbWVySW5jcmVtZW50c0Zvck9uZVRpY2s7DQorCQkqcHVsbE1hY2hpbmVUaW1lckNvbXBhcmVSZWdpc3RlciA9IHVsbE5leHRUaW1lOw0KIA0KLSAgICAgICAgdWxsTmV4dFRpbWUgPSAoIHVpbnQ2NF90ICkgdWxDdXJyZW50VGltZUhpZ2g7DQotICAgICAgICB1bGxOZXh0VGltZSA8PD0gMzJVTEw7IC8qIEhpZ2ggNC1ieXRlIHdvcmQgaXMgMzItYml0cyB1cC4gKi8NCi0gICAgICAgIHVsbE5leHRUaW1lIHw9ICggdWludDY0X3QgKSB1bEN1cnJlbnRUaW1lTG93Ow0KLSAgICAgICAgdWxsTmV4dFRpbWUgKz0gKCB1aW50NjRfdCApIHV4VGltZXJJbmNyZW1lbnRzRm9yT25lVGljazsNCi0gICAgICAgICpwdWxsTWFjaGluZVRpbWVyQ29tcGFyZVJlZ2lzdGVyID0gdWxsTmV4dFRpbWU7DQotDQotICAgICAgICAvKiBQcmVwYXJlIHRoZSB0aW1lIHRvIHVzZSBhZnRlciB0aGUgbmV4dCB0aWNrIGludGVycnVwdC4gKi8NCi0gICAgICAgIHVsbE5leHRUaW1lICs9ICggdWludDY0X3QgKSB1eFRpbWVySW5jcmVtZW50c0Zvck9uZVRpY2s7DQotICAgIH0NCisJCS8qIFByZXBhcmUgdGhlIHRpbWUgdG8gdXNlIGFmdGVyIHRoZSBuZXh0IHRpY2sgaW50ZXJydXB0LiAqLw0KKwkJdWxsTmV4dFRpbWUgKz0gKCB1aW50NjRfdCApIHV4VGltZXJJbmNyZW1lbnRzRm9yT25lVGljazsNCisJfQ0KIA0KICNlbmRpZiAvKiAoIGNvbmZpZ01USU1FX0JBU0VfQUREUkVTUyAhPSAwICkgJiYgKCBjb25maWdNVElNRV9CQVNFX0FERFJFU1MgIT0gMCApICovDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogQmFzZVR5cGVfdCB4UG9ydFN0YXJ0U2NoZWR1bGVyKCB2b2lkICkNCiB7DQotICAgIGV4dGVybiB2b2lkIHhQb3J0U3RhcnRGaXJzdFRhc2soIHZvaWQgKTsNCitleHRlcm4gdm9pZCB4UG9ydFN0YXJ0Rmlyc3RUYXNrKCB2b2lkICk7DQogDQotICAgICNpZiAoIGNvbmZpZ0FTU0VSVF9ERUZJTkVEID09IDEgKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHZvbGF0aWxlIHVpbnQzMl90IG10dmVjID0gMDsNCisJI2lmKCBjb25maWdBU1NFUlRfREVGSU5FRCA9PSAxICkNCisJew0KKwkJdm9sYXRpbGUgdWludDMyX3QgbXR2ZWMgPSAwOw0KIA0KLSAgICAgICAgICAgIC8qIENoZWNrIHRoZSBsZWFzdCBzaWduaWZpY2FudCB0d28gYml0cyBvZiBtdHZlYyBhcmUgMDAgLSBpbmRpY2F0aW5nDQotICAgICAgICAgICAgICogc2luZ2xlIHZlY3RvciBtb2RlLiAqLw0KLSAgICAgICAgICAgIF9fYXNtIHZvbGF0aWxlICggImNzcnIgJTAsIDB4MzA1IiA6ICI9ciIgKCBtdHZlYyApICk7IC8qIDB4MzA1IGlzIG10dmVjLiAqLw0KLSAgICAgICAgICAgIGNvbmZpZ0FTU0VSVCggKCBtdHZlYyAmIDB4MDNVTCApID09IDAgKTsNCisJCS8qIENoZWNrIHRoZSBsZWFzdCBzaWduaWZpY2FudCB0d28gYml0cyBvZiBtdHZlYyBhcmUgMDAgLSBpbmRpY2F0aW5nDQorCQlzaW5nbGUgdmVjdG9yIG1vZGUuICovDQorCQlfX2FzbSB2b2xhdGlsZSggImNzcnIgJTAsIDB4MzA1IiA6ICI9ciIoIG10dmVjICkgKTsgLyogMHgzMDUgaXMgbXR2ZWMuICovDQorCQljb25maWdBU1NFUlQoICggbXR2ZWMgJiAweDAzVUwgKSA9PSAwICk7DQogDQotICAgICAgICAgICAgLyogQ2hlY2sgYWxpZ25tZW50IG9mIHRoZSBpbnRlcnJ1cHQgc3RhY2sgLSB3aGljaCBpcyB0aGUgc2FtZSBhcyB0aGUNCi0gICAgICAgICAgICAgKiBzdGFjayB0aGF0IHdhcyBiZWluZyB1c2VkIGJ5IG1haW4oKSBwcmlvciB0byB0aGUgc2NoZWR1bGVyIGJlaW5nDQotICAgICAgICAgICAgICogc3RhcnRlZC4gKi8NCi0gICAgICAgICAgICBjb25maWdBU1NFUlQoICggeElTUlN0YWNrVG9wICYgcG9ydEJZVEVfQUxJR05NRU5UX01BU0sgKSA9PSAwICk7DQorCQkvKiBDaGVjayBhbGlnbm1lbnQgb2YgdGhlIGludGVycnVwdCBzdGFjayAtIHdoaWNoIGlzIHRoZSBzYW1lIGFzIHRoZQ0KKwkJc3RhY2sgdGhhdCB3YXMgYmVpbmcgdXNlZCBieSBtYWluKCkgcHJpb3IgdG8gdGhlIHNjaGVkdWxlciBiZWluZw0KKwkJc3RhcnRlZC4gKi8NCisJCWNvbmZpZ0FTU0VSVCggKCB4SVNSU3RhY2tUb3AgJiBwb3J0QllURV9BTElHTk1FTlRfTUFTSyApID09IDAgKTsNCiANCi0gICAgICAgICAgICAjaWZkZWYgY29uZmlnSVNSX1NUQUNLX1NJWkVfV09SRFMNCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgbWVtc2V0KCAoIHZvaWQgKiApIHhJU1JTdGFjaywgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHNpemVvZiggeElTUlN0YWNrICkgKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICNlbmRpZiAvKiBjb25maWdJU1JfU1RBQ0tfU0laRV9XT1JEUyAqLw0KLSAgICAgICAgfQ0KLSAgICAjZW5kaWYgLyogY29uZmlnQVNTRVJUX0RFRklORUQgKi8NCisJCSNpZmRlZiBjb25maWdJU1JfU1RBQ0tfU0laRV9XT1JEUw0KKwkJew0KKwkJCW1lbXNldCggKCB2b2lkICogKSB4SVNSU3RhY2ssIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBzaXplb2YoIHhJU1JTdGFjayApICk7DQorCQl9DQorCQkjZW5kaWYJIC8qIGNvbmZpZ0lTUl9TVEFDS19TSVpFX1dPUkRTICovDQorCX0NCisJI2VuZGlmIC8qIGNvbmZpZ0FTU0VSVF9ERUZJTkVEICovDQogDQotICAgIC8qIElmIHRoZXJlIGlzIGEgQ0xJTlQgdGhlbiBpdCBpcyBvayB0byB1c2UgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24NCi0gICAgICogaW4gdGhpcyBmaWxlLCBvdGhlcndpc2UgdlBvcnRTZXR1cFRpbWVySW50ZXJydXB0KCkgbXVzdCBiZSBpbXBsZW1lbnRlZCB0bw0KLSAgICAgKiBjb25maWd1cmUgd2hpY2hldmVyIGNsb2NrIGlzIHRvIGJlIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRpY2sgaW50ZXJydXB0LiAqLw0KLSAgICB2UG9ydFNldHVwVGltZXJJbnRlcnJ1cHQoKTsNCisJLyogSWYgdGhlcmUgaXMgYSBDTElOVCB0aGVuIGl0IGlzIG9rIHRvIHVzZSB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbg0KKwlpbiB0aGlzIGZpbGUsIG90aGVyd2lzZSB2UG9ydFNldHVwVGltZXJJbnRlcnJ1cHQoKSBtdXN0IGJlIGltcGxlbWVudGVkIHRvDQorCWNvbmZpZ3VyZSB3aGljaGV2ZXIgY2xvY2sgaXMgdG8gYmUgdXNlZCB0byBnZW5lcmF0ZSB0aGUgdGljayBpbnRlcnJ1cHQuICovDQorCXZQb3J0U2V0dXBUaW1lckludGVycnVwdCgpOw0KIA0KLSAgICAjaWYgKCAoIGNvbmZpZ01USU1FX0JBU0VfQUREUkVTUyAhPSAwICkgJiYgKCBjb25maWdNVElNRUNNUF9CQVNFX0FERFJFU1MgIT0gMCApICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICAvKiBFbmFibGUgbXRpbWUgYW5kIGV4dGVybmFsIGludGVycnVwdHMuICAxPDw3IGZvciB0aW1lciBpbnRlcnJ1cHQsIDE8PDExDQotICAgICAgICAgICAgICogZm9yIGV4dGVybmFsIGludGVycnVwdC4gIF9SQl8gV2hhdCBoYXBwZW5zIGhlcmUgd2hlbiBtdGltZSBpcyBub3QgcHJlc2VudCBhcw0KLSAgICAgICAgICAgICAqIHdpdGggcHVscGlubz8gKi8NCi0gICAgICAgICAgICBfX2FzbSB2b2xhdGlsZSAoICJjc3JzIDB4MzA0LCAlMCIgOjoiciIgKCAweDg4MCApICk7IC8qIDB4MzA0IGlzIG1pZS4gKi8NCi0gICAgICAgIH0NCi0gICAgI2Vsc2UNCi0gICAgICAgIHsNCi0gICAgICAgICAgICAvKiBFbmFibGUgZXh0ZXJuYWwgaW50ZXJydXB0cy4gKi8NCi0gICAgICAgICAgICBfX2FzbSB2b2xhdGlsZSAoICJjc3JzIDB4MzA0LCAlMCIgOjoiciIgKCAweDgwMCApICk7IC8qIDMwNCBpcyBtaWUuICovDQotICAgICAgICB9DQotICAgICNlbmRpZiAvKiAoIGNvbmZpZ01USU1FX0JBU0VfQUREUkVTUyAhPSAwICkgJiYgKCBjb25maWdNVElNRUNNUF9CQVNFX0FERFJFU1MgIT0gMCApICovDQorCSNpZiggKCBjb25maWdNVElNRV9CQVNFX0FERFJFU1MgIT0gMCApICYmICggY29uZmlnTVRJTUVDTVBfQkFTRV9BRERSRVNTICE9IDAgKSApDQorCXsNCisJCS8qIEVuYWJsZSBtdGltZSBhbmQgZXh0ZXJuYWwgaW50ZXJydXB0cy4gIDE8PDcgZm9yIHRpbWVyIGludGVycnVwdCwgMTw8MTENCisJCWZvciBleHRlcm5hbCBpbnRlcnJ1cHQuICBfUkJfIFdoYXQgaGFwcGVucyBoZXJlIHdoZW4gbXRpbWUgaXMgbm90IHByZXNlbnQgYXMNCisJCXdpdGggcHVscGlubz8gKi8NCisJCV9fYXNtIHZvbGF0aWxlKCAiY3NycyAweDMwNCwgJTAiIDo6ICJyIigweDg4MCkgKTsgLyogMHgzMDQgaXMgbWllLiAqLw0KKwl9DQorCSNlbHNlDQorCXsNCisJCS8qIEVuYWJsZSBleHRlcm5hbCBpbnRlcnJ1cHRzLiAqLw0KKwkJX19hc20gdm9sYXRpbGUoICJjc3JzIDB4MzA0LCAlMCIgOjogInIiKDB4ODAwKSApOyAvKiAzMDQgaXMgbWllLiAqLw0KKwl9DQorCSNlbmRpZiAvKiAoIGNvbmZpZ01USU1FX0JBU0VfQUREUkVTUyAhPSAwICkgJiYgKCBjb25maWdNVElNRUNNUF9CQVNFX0FERFJFU1MgIT0gMCApICovDQogDQotICAgIHhQb3J0U3RhcnRGaXJzdFRhc2soKTsNCisJeFBvcnRTdGFydEZpcnN0VGFzaygpOw0KIA0KLSAgICAvKiBTaG91bGQgbm90IGdldCBoZXJlIGFzIGFmdGVyIGNhbGxpbmcgeFBvcnRTdGFydEZpcnN0VGFzaygpIG9ubHkgdGFza3MNCi0gICAgICogc2hvdWxkIGJlIGV4ZWN1dGluZy4gKi8NCi0gICAgcmV0dXJuIHBkRkFJTDsNCisJLyogU2hvdWxkIG5vdCBnZXQgaGVyZSBhcyBhZnRlciBjYWxsaW5nIHhQb3J0U3RhcnRGaXJzdFRhc2soKSBvbmx5IHRhc2tzDQorCXNob3VsZCBiZSBleGVjdXRpbmcuICovDQorCXJldHVybiBwZEZBSUw7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQ0KIHsNCi0gICAgLyogTm90IGltcGxlbWVudGVkLiAqLw0KLSAgICBmb3IoIDsgOyApDQotICAgIHsNCi0gICAgfQ0KKwkvKiBOb3QgaW1wbGVtZW50ZWQuICovDQorCWZvciggOzsgKTsNCiB9DQorDQorDQorDQorDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvSUFSL1JJU0MtVi9wb3J0bWFjcm8uaCBiL3BvcnRhYmxlL0lBUi9SSVNDLVYvcG9ydG1hY3JvLmgKaW5kZXggZTQzZmJhZC4uNGQzMWY0ZiAxMDA2NDQKLS0tIGEvcG9ydGFibGUvSUFSL1JJU0MtVi9wb3J0bWFjcm8uaAorKysgYi9wb3J0YWJsZS9JQVIvUklTQy1WL3BvcnRtYWNyby5oCkBAIC0yNywxMyArMjcsMTMgQEAKIA0KIA0KICNpZm5kZWYgUE9SVE1BQ1JPX0gNCi0gICAgI2RlZmluZSBQT1JUTUFDUk9fSA0KKyNkZWZpbmUgUE9SVE1BQ1JPX0gNCiANCi0gICAgI2luY2x1ZGUgImludHJpbnNpY3MuaCINCisjaW5jbHVkZSAiaW50cmluc2ljcy5oIg0KIA0KLSAgICAjaWZkZWYgX19jcGx1c3BsdXMNCi0gICAgICAgIGV4dGVybiAiQyIgew0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICogUG9ydCBzcGVjaWZpYyBkZWZpbml0aW9ucy4NCkBAIC00NiwxMzMgKzQ2LDEzMiBAQAogICovDQogDQogLyogVHlwZSBkZWZpbml0aW9ucy4gKi8NCi0gICAgI2lmIF9fcmlzY3ZfeGxlbiA9PSA2NA0KLSAgICAgICAgI2RlZmluZSBwb3J0U1RBQ0tfVFlQRSAgICAgICAgICAgdWludDY0X3QNCi0gICAgICAgICNkZWZpbmUgcG9ydEJBU0VfVFlQRSAgICAgICAgICAgIGludDY0X3QNCi0gICAgICAgICNkZWZpbmUgcG9ydFVCQVNFX1RZUEUgICAgICAgICAgIHVpbnQ2NF90DQotICAgICAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgICAgICAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmZmZmZmZmZmZVTA0KLSAgICAgICAgI2RlZmluZSBwb3J0UE9JTlRFUl9TSVpFX1RZUEUgICAgdWludDY0X3QNCi0gICAgI2VsaWYgX19yaXNjdl94bGVuID09IDMyDQotICAgICAgICAjZGVmaW5lIHBvcnRTVEFDS19UWVBFICAgICAgICAgICB1aW50MzJfdA0KLSAgICAgICAgI2RlZmluZSBwb3J0QkFTRV9UWVBFICAgICAgICAgICAgaW50MzJfdA0KLSAgICAgICAgI2RlZmluZSBwb3J0VUJBU0VfVFlQRSAgICAgICAgICAgdWludDMyX3QNCi0gICAgICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAgICAgICAgICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTA0KLSAgICAjZWxzZSAvKiBpZiBfX3Jpc2N2X3hsZW4gPT0gNjQgKi8NCi0gICAgICAgICNlcnJvciBBc3NlbWJsZXIgZGlkIG5vdCBkZWZpbmUgX19yaXNjdl94bGVuDQotICAgICNlbmRpZiAvKiBpZiBfX3Jpc2N2X3hsZW4gPT0gNjQgKi8NCisjaWYgX19yaXNjdl94bGVuID09IDY0DQorCSNkZWZpbmUgcG9ydFNUQUNLX1RZUEUJCQl1aW50NjRfdA0KKwkjZGVmaW5lIHBvcnRCQVNFX1RZUEUJCQlpbnQ2NF90DQorCSNkZWZpbmUgcG9ydFVCQVNFX1RZUEUJCQl1aW50NjRfdA0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgCQkJKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZmZmZmZmZmZmVUwNCisJI2RlZmluZSBwb3J0UE9JTlRFUl9TSVpFX1RZUEUgCXVpbnQ2NF90DQorI2VsaWYgX19yaXNjdl94bGVuID09IDMyDQorCSNkZWZpbmUgcG9ydFNUQUNLX1RZUEUJdWludDMyX3QNCisJI2RlZmluZSBwb3J0QkFTRV9UWVBFCWludDMyX3QNCisJI2RlZmluZSBwb3J0VUJBU0VfVFlQRQl1aW50MzJfdA0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQorI2Vsc2UNCisJI2Vycm9yIEFzc2VtYmxlciBkaWQgbm90IGRlZmluZSBfX3Jpc2N2X3hsZW4NCisjZW5kaWYNCiANCiANCi0gICAgdHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSAgIFN0YWNrVHlwZV90Ow0KLSAgICB0eXBlZGVmIHBvcnRCQVNFX1RZUEUgICAgQmFzZVR5cGVfdDsNCi0gICAgdHlwZWRlZiBwb3J0VUJBU0VfVFlQRSAgIFVCYXNlVHlwZV90Ow0KLSAgICB0eXBlZGVmIHBvcnRVQkFTRV9UWVBFICAgVGlja1R5cGVfdDsNCit0eXBlZGVmIHBvcnRTVEFDS19UWVBFIFN0YWNrVHlwZV90Ow0KK3R5cGVkZWYgcG9ydEJBU0VfVFlQRSBCYXNlVHlwZV90Ow0KK3R5cGVkZWYgcG9ydFVCQVNFX1RZUEUgVUJhc2VUeXBlX3Q7DQordHlwZWRlZiBwb3J0VUJBU0VfVFlQRSBUaWNrVHlwZV90Ow0KIA0KIC8qIExlZ2FjeSB0eXBlIGRlZmluaXRpb25zLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRDSEFSICAgICAgICAgICAgICAgICAgIGNoYXINCi0gICAgI2RlZmluZSBwb3J0RkxPQVQgICAgICAgICAgICAgICAgICBmbG9hdA0KLSAgICAjZGVmaW5lIHBvcnRET1VCTEUgICAgICAgICAgICAgICAgIGRvdWJsZQ0KLSAgICAjZGVmaW5lIHBvcnRMT05HICAgICAgICAgICAgICAgICAgIGxvbmcNCi0gICAgI2RlZmluZSBwb3J0U0hPUlQgICAgICAgICAgICAgICAgICBzaG9ydA0KKyNkZWZpbmUgcG9ydENIQVIJCWNoYXINCisjZGVmaW5lIHBvcnRGTE9BVAkJZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUJCWRvdWJsZQ0KKyNkZWZpbmUgcG9ydExPTkcJCWxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVAkJc2hvcnQNCiANCiAvKiAzMi1iaXQgdGljayB0eXBlIG9uIGEgMzItYml0IGFyY2hpdGVjdHVyZSwgc28gcmVhZHMgb2YgdGhlIHRpY2sgY291bnQgZG8NCi0gKiBub3QgbmVlZCB0byBiZSBndWFyZGVkIHdpdGggYSBjcml0aWNhbCBzZWN0aW9uLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRUSUNLX1RZUEVfSVNfQVRPTUlDICAgIDENCitub3QgbmVlZCB0byBiZSBndWFyZGVkIHdpdGggYSBjcml0aWNhbCBzZWN0aW9uLiAqLw0KKyNkZWZpbmUgcG9ydFRJQ0tfVFlQRV9JU19BVE9NSUMgMQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIEFyY2hpdGVjdHVyZSBzcGVjaWZpY3MuICovDQotICAgICNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSCAgICAgICAgICAoIC0xICkNCi0gICAgI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMgICAgICAgICggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQotICAgICNpZmRlZiBfX3Jpc2N2NjQNCi0gICAgICAgICNlcnJvciBUaGlzIGlzIHRoZSBSVjMyIHBvcnQgdGhhdCBoYXMgbm90IHlldCBiZWVuIGFkYXB0ZWQgZm9yIDY0Lg0KLSAgICAgICAgI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQgICAgMTYNCi0gICAgI2Vsc2UNCi0gICAgICAgICNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UICAgIDE2DQotICAgICNlbmRpZg0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJCSggLTEgKQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TCQkJKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCisjaWZkZWYgX19yaXNjdjY0DQorCSNlcnJvciBUaGlzIGlzIHRoZSBSVjMyIHBvcnQgdGhhdCBoYXMgbm90IHlldCBiZWVuIGFkYXB0ZWQgZm9yIDY0Lg0KKwkjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVAkJCTE2DQorI2Vsc2UNCisJI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQgCQkJMTYNCisjZW5kaWYNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiANCiAvKiBTY2hlZHVsZXIgdXRpbGl0aWVzLiAqLw0KLSAgICBleHRlcm4gdm9pZCB2VGFza1N3aXRjaENvbnRleHQoIHZvaWQgKTsNCi0gICAgI2RlZmluZSBwb3J0WUlFTEQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXNtIHZvbGF0aWxlICggImVjYWxsIiApOw0KLSAgICAjZGVmaW5lIHBvcnRFTkRfU1dJVENISU5HX0lTUiggeFN3aXRjaFJlcXVpcmVkICkgICAgaWYoIHhTd2l0Y2hSZXF1aXJlZCApIHZUYXNrU3dpdGNoQ29udGV4dCgpDQotICAgICNkZWZpbmUgcG9ydFlJRUxEX0ZST01fSVNSKCB4ICkgICAgICAgICAgICAgICAgICAgICBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHggKQ0KK2V4dGVybiB2b2lkIHZUYXNrU3dpdGNoQ29udGV4dCggdm9pZCApOw0KKyNkZWZpbmUgcG9ydFlJRUxEKCkgX19hc20gdm9sYXRpbGUoICJlY2FsbCIgKTsNCisjZGVmaW5lIHBvcnRFTkRfU1dJVENISU5HX0lTUiggeFN3aXRjaFJlcXVpcmVkICkgaWYoIHhTd2l0Y2hSZXF1aXJlZCApIHZUYXNrU3dpdGNoQ29udGV4dCgpDQorI2RlZmluZSBwb3J0WUlFTERfRlJPTV9JU1IoIHggKSBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHggKQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIA0KIC8qIENyaXRpY2FsIHNlY3Rpb24gbWFuYWdlbWVudC4gKi8NCi0gICAgI2RlZmluZSBwb3J0Q1JJVElDQUxfTkVTVElOR19JTl9UQ0IgICAgMQ0KLSAgICBleHRlcm4gdm9pZCB2VGFza0VudGVyQ3JpdGljYWwoIHZvaWQgKTsNCi0gICAgZXh0ZXJuIHZvaWQgdlRhc2tFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCisjZGVmaW5lIHBvcnRDUklUSUNBTF9ORVNUSU5HX0lOX1RDQgkJCQkJMQ0KK2V4dGVybiB2b2lkIHZUYXNrRW50ZXJDcml0aWNhbCggdm9pZCApOw0KK2V4dGVybiB2b2lkIHZUYXNrRXhpdENyaXRpY2FsKCB2b2lkICk7DQogDQotICAgICNkZWZpbmUgcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpICAgICAgICAgICAgICAgICAgICAgICAgICAwDQotICAgICNkZWZpbmUgcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCB1eFNhdmVkU3RhdHVzVmFsdWUgKSAgICAoIHZvaWQgKSB1eFNhdmVkU3RhdHVzVmFsdWUNCi0gICAgI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGlzYWJsZV9pbnRlcnJ1cHQoKQ0KLSAgICAjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19lbmFibGVfaW50ZXJydXB0KCkNCi0gICAgI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZUYXNrRW50ZXJDcml0aWNhbCgpDQotICAgICNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2VGFza0V4aXRDcml0aWNhbCgpDQorI2RlZmluZSBwb3J0U0VUX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCkgMA0KKyNkZWZpbmUgcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCB1eFNhdmVkU3RhdHVzVmFsdWUgKSAoIHZvaWQgKSB1eFNhdmVkU3RhdHVzVmFsdWUNCisjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKQlfX2Rpc2FibGVfaW50ZXJydXB0KCkNCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpCQlfX2VuYWJsZV9pbnRlcnJ1cHQoKQ0KKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkJdlRhc2tFbnRlckNyaXRpY2FsKCkNCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkJCXZUYXNrRXhpdENyaXRpY2FsKCkNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWMgb3B0aW1pc2F0aW9ucy4gKi8NCi0gICAgI2lmICggY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OID09IDEgKQ0KKyNpZiggY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OID09IDEgKQ0KIA0KLSAgICAgICAgI2Vycm9yIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiBjYW5ub3QgeWV0IGJlIHVzZWQgaW4gdGhlIElBUiBSSVNDLVYgcG9ydCwgdGhlIENMWiBpbnN0cnVjdGlvbiBuZWVkcyB0byBiZSBlbXVsYXRlZC4NCisJI2Vycm9yIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiBjYW5ub3QgeWV0IGJlIHVzZWQgaW4gdGhlIElBUiBSSVNDLVYgcG9ydCwgdGhlIENMWiBpbnN0cnVjdGlvbiBuZWVkcyB0byBiZSBlbXVsYXRlZC4NCiANCi0gICAgI2VuZGlmIC8qIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiAqLw0KKyNlbmRpZiAvKiBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gKi8NCiANCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBUYXNrIGZ1bmN0aW9uIG1hY3JvcyBhcyBkZXNjcmliZWQgb24gdGhlIEZyZWVSVE9TLm9yZyBXRUIgc2l0ZS4gIFRoZXNlIGFyZQ0KLSAqIG5vdCBuZWNlc3NhcnkgZm9yIHRvIHVzZSB0aGlzIHBvcnQuICBUaGV5IGFyZSBkZWZpbmVkIHNvIHRoZSBjb21tb24gZGVtbyBmaWxlcw0KLSAqICh3aGljaCBidWlsZCB3aXRoIGFsbCB0aGUgcG9ydHMpIHdpbGwgYnVpbGQuICovDQotICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KLSAgICAjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgICAgICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCitub3QgbmVjZXNzYXJ5IGZvciB0byB1c2UgdGhpcyBwb3J0LiAgVGhleSBhcmUgZGVmaW5lZCBzbyB0aGUgY29tbW9uIGRlbW8gZmlsZXMNCisod2hpY2ggYnVpbGQgd2l0aCBhbGwgdGhlIHBvcnRzKSB3aWxsIGJ1aWxkLiAqLw0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0gICAgI2RlZmluZSBwb3J0Tk9QKCkgICAgX19hc20gdm9sYXRpbGUgKCAiIG5vcCAiICkNCisjZGVmaW5lIHBvcnROT1AoKSBfX2FzbSB2b2xhdGlsZSAJKCAiIG5vcCAiICkNCiANCi0gICAgI2RlZmluZSBwb3J0SU5MSU5FICAgICAgICAgICAgICBfX2lubGluZQ0KKyNkZWZpbmUgcG9ydElOTElORQlfX2lubGluZQ0KIA0KLSAgICAjaWZuZGVmIHBvcnRGT1JDRV9JTkxJTkUNCi0gICAgICAgICNkZWZpbmUgcG9ydEZPUkNFX0lOTElORSAgICBpbmxpbmUgX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKQ0KLSAgICAjZW5kaWYNCisjaWZuZGVmIHBvcnRGT1JDRV9JTkxJTkUNCisJI2RlZmluZSBwb3J0Rk9SQ0VfSU5MSU5FIGlubGluZSBfX2F0dHJpYnV0ZV9fKCggYWx3YXlzX2lubGluZSkpDQorI2VuZGlmDQogDQotICAgICNkZWZpbmUgcG9ydE1FTU9SWV9CQVJSSUVSKCkgICAgX19hc20gdm9sYXRpbGUgKCAiIiA6OjogIm1lbW9yeSIgKQ0KKyNkZWZpbmUgcG9ydE1FTU9SWV9CQVJSSUVSKCkgX19hc20gdm9sYXRpbGUoICIiIDo6OiAibWVtb3J5IiApDQogDQogDQogLyogU3VwcHJlc3Mgd2FybmluZ3MgdGhhdCBhcmUgZ2VuZXJhdGVkIGJ5IHRoZSBJQVIgdG9vbHMsIGJ1dCBjYW5ub3QgYmUgZml4ZWQgaW4NCi0gKiB0aGUgc291cmNlIGNvZGUgYmVjYXVzZSB0byBkbyBzbyB3b3VsZCBjYXVzZSBvdGhlciBjb21waWxlcnMgdG8gZ2VuZXJhdGUNCi0gKiB3YXJuaW5ncy4gKi8NCi0gICAgI3ByYWdtYSBkaWFnX3N1cHByZXNzPVBhMDgyDQordGhlIHNvdXJjZSBjb2RlIGJlY2F1c2UgdG8gZG8gc28gd291bGQgY2F1c2Ugb3RoZXIgY29tcGlsZXJzIHRvIGdlbmVyYXRlDQord2FybmluZ3MuICovDQorI3ByYWdtYSBkaWFnX3N1cHByZXNzPVBhMDgyDQogDQogLyogY29uZmlnQ0xJTlRfQkFTRV9BRERSRVNTIGlzIGEgbGVnYWN5IGRlZmluaXRpb24gdGhhdCB3YXMgcmVwbGFjZWQgYnkgdGhlDQotICogY29uZmlnTVRJTUVfQkFTRV9BRERSRVNTIGFuZCBjb25maWdNVElNRUNNUF9CQVNFX0FERFJFU1MgZGVmaW5pdGlvbnMuICBGb3INCi0gKiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGRlcml2ZSB0aGUgbmV3ZXIgZGVmaW5pdGlvbnMgZnJvbSB0aGUgb2xkIGlmIHRoZSBvbGQNCi0gKiBkZWZpbml0aW9uIGlzIGZvdW5kLiAqLw0KLSAgICAjaWYgZGVmaW5lZCggY29uZmlnQ0xJTlRfQkFTRV9BRERSRVNTICkgJiYgIWRlZmluZWQoIGNvbmZpZ01USU1FX0JBU0VfQUREUkVTUyApICYmICggY29uZmlnQ0xJTlRfQkFTRV9BRERSRVNTID09IDAgKQ0KLQ0KLS8qIExlZ2FjeSBjYXNlIHdoZXJlIGNvbmZpZ0NMSU5UX0JBU0VfQUREUkVTUyB3YXMgZGVmaW5lZCBhcyAwIHRvIGluZGljYXRlDQotICogdGhlcmUgd2FzIG5vIENMSU5ULiAgRXF1aXZhbGVudCBub3cgaXMgdG8gc2V0IHRoZSBNVElNRSBhbmQgTVRJTUVDTVANCi0gKiBhZGRyZXNzZXMgdG8gMC4gKi8NCi0gICAgICAgICNkZWZpbmUgY29uZmlnTVRJTUVfQkFTRV9BRERSRVNTICAgICAgICggMCApDQotICAgICAgICAjZGVmaW5lIGNvbmZpZ01USU1FQ01QX0JBU0VfQUREUkVTUyAgICAoIDAgKQ0KLSAgICAjZWxpZiBkZWZpbmVkKCBjb25maWdDTElOVF9CQVNFX0FERFJFU1MgKSAmJiAhZGVmaW5lZCggY29uZmlnTVRJTUVfQkFTRV9BRERSRVNTICkNCi0NCi0vKiBMZWdhY3kgY2FzZSB3aGVyZSBjb25maWdDTElOVF9CQVNFX0FERFJFU1Mgd2FzIHNldCB0byB0aGUgYmFzZSBhZGRyZXNzIG9mDQotICogdGhlIENMSU5ULiAgRXF1aXZhbGVudCBub3cgaXMgdG8gZGVyaXZlIHRoZSBNVElNRSBhbmQgTVRJTUVDTVAgYWRkcmVzc2VzDQotICogZnJvbSB0aGUgQ0xJTlQgYWRkcmVzcy4gKi8NCi0gICAgICAgICNkZWZpbmUgY29uZmlnTVRJTUVfQkFTRV9BRERSRVNTICAgICAgICggKCBjb25maWdDTElOVF9CQVNFX0FERFJFU1MgKSArIDB4QkZGOFVMICkNCi0gICAgICAgICNkZWZpbmUgY29uZmlnTVRJTUVDTVBfQkFTRV9BRERSRVNTICAgICggKCBjb25maWdDTElOVF9CQVNFX0FERFJFU1MgKSArIDB4NDAwMFVMICkNCi0gICAgI2VsaWYgIWRlZmluZWQoIGNvbmZpZ01USU1FX0JBU0VfQUREUkVTUyApIHx8ICFkZWZpbmVkKCBjb25maWdNVElNRUNNUF9CQVNFX0FERFJFU1MgKQ0KLSAgICAgICAgI2Vycm9yIGNvbmZpZ01USU1FX0JBU0VfQUREUkVTUyBhbmQgY29uZmlnTVRJTUVDTVBfQkFTRV9BRERSRVNTIG11c3QgYmUgZGVmaW5lZCBpbiBGcmVlUlRPU0NvbmZpZy5oLiAgU2V0IHRoZW0gdG8gemVybyBpZiB0aGVyZSBpcyBubyBNVElNRSAobWFjaGluZSB0aW1lKSBjbG9jay4gIFNlZSBodHRwczogLyp3d3cuZnJlZXJ0b3Mub3JnL1VzaW5nLUZyZWVSVE9TLW9uLVJJU0MtVi5odG1sICovDQotICAgICNlbmRpZiAvKiBpZiBkZWZpbmVkKCBjb25maWdDTElOVF9CQVNFX0FERFJFU1MgKSAmJiAhZGVmaW5lZCggY29uZmlnTVRJTUVfQkFTRV9BRERSRVNTICkgJiYgKCBjb25maWdDTElOVF9CQVNFX0FERFJFU1MgPT0gMCApICovDQorY29uZmlnTVRJTUVfQkFTRV9BRERSRVNTIGFuZCBjb25maWdNVElNRUNNUF9CQVNFX0FERFJFU1MgZGVmaW5pdGlvbnMuICBGb3INCitiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGRlcml2ZSB0aGUgbmV3ZXIgZGVmaW5pdGlvbnMgZnJvbSB0aGUgb2xkIGlmIHRoZSBvbGQNCitkZWZpbml0aW9uIGlzIGZvdW5kLiAqLw0KKyNpZiBkZWZpbmVkKCBjb25maWdDTElOVF9CQVNFX0FERFJFU1MgKSAmJiAhZGVmaW5lZCggY29uZmlnTVRJTUVfQkFTRV9BRERSRVNTICkgJiYgKCBjb25maWdDTElOVF9CQVNFX0FERFJFU1MgPT0gMCApDQorCS8qIExlZ2FjeSBjYXNlIHdoZXJlIGNvbmZpZ0NMSU5UX0JBU0VfQUREUkVTUyB3YXMgZGVmaW5lZCBhcyAwIHRvIGluZGljYXRlDQorCXRoZXJlIHdhcyBubyBDTElOVC4gIEVxdWl2YWxlbnQgbm93IGlzIHRvIHNldCB0aGUgTVRJTUUgYW5kIE1USU1FQ01QDQorCWFkZHJlc3NlcyB0byAwLiAqLw0KKwkjZGVmaW5lIGNvbmZpZ01USU1FX0JBU0VfQUREUkVTUyAJKCAwICkNCisJI2RlZmluZSBjb25maWdNVElNRUNNUF9CQVNFX0FERFJFU1MgKCAwICkNCisjZWxpZiBkZWZpbmVkKCBjb25maWdDTElOVF9CQVNFX0FERFJFU1MgKSAmJiAhZGVmaW5lZCggY29uZmlnTVRJTUVfQkFTRV9BRERSRVNTICkNCisJLyogTGVnYWN5IGNhc2Ugd2hlcmUgY29uZmlnQ0xJTlRfQkFTRV9BRERSRVNTIHdhcyBzZXQgdG8gdGhlIGJhc2UgYWRkcmVzcyBvZg0KKwl0aGUgQ0xJTlQuICBFcXVpdmFsZW50IG5vdyBpcyB0byBkZXJpdmUgdGhlIE1USU1FIGFuZCBNVElNRUNNUCBhZGRyZXNzZXMNCisJZnJvbSB0aGUgQ0xJTlQgYWRkcmVzcy4gKi8NCisJI2RlZmluZSBjb25maWdNVElNRV9CQVNFX0FERFJFU1MgCSggKCBjb25maWdDTElOVF9CQVNFX0FERFJFU1MgKSArIDB4QkZGOFVMICkNCisJI2RlZmluZSBjb25maWdNVElNRUNNUF9CQVNFX0FERFJFU1MgKCAoIGNvbmZpZ0NMSU5UX0JBU0VfQUREUkVTUyApICsgMHg0MDAwVUwgKQ0KKyNlbGlmICFkZWZpbmVkKCBjb25maWdNVElNRV9CQVNFX0FERFJFU1MgKSB8fCAhZGVmaW5lZCggY29uZmlnTVRJTUVDTVBfQkFTRV9BRERSRVNTICkNCisJI2Vycm9yIGNvbmZpZ01USU1FX0JBU0VfQUREUkVTUyBhbmQgY29uZmlnTVRJTUVDTVBfQkFTRV9BRERSRVNTIG11c3QgYmUgZGVmaW5lZCBpbiBGcmVlUlRPU0NvbmZpZy5oLiAgU2V0IHRoZW0gdG8gemVybyBpZiB0aGVyZSBpcyBubyBNVElNRSAobWFjaGluZSB0aW1lKSBjbG9jay4gIFNlZSBodHRwczovL3d3dy5mcmVlcnRvcy5vcmcvVXNpbmctRnJlZVJUT1Mtb24tUklTQy1WLmh0bWwNCisjZW5kaWYNCiANCiANCiANCi0gICAgI2lmZGVmIF9fY3BsdXNwbHVzDQotICAgICAgICB9DQotICAgICNlbmRpZg0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCiANCiAjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8NCisNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9JQVIvUkw3OC9JU1JfU3VwcG9ydC5oIGIvcG9ydGFibGUvSUFSL1JMNzgvSVNSX1N1cHBvcnQuaAppbmRleCBlNDg0MDFiLi4xYmUyYTdiIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9JQVIvUkw3OC9JU1JfU3VwcG9ydC5oCisrKyBiL3BvcnRhYmxlL0lBUi9STDc4L0lTUl9TdXBwb3J0LmgKQEAgLTEsMTEyICsxLDgzIEBACi07IC8qDQotICAgKiA7ICogRnJlZVJUT1MgS2VybmVsIFYxMC4zLjENCi0gICAqIDsgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgKiA7ICoNCi0gICAqIDsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mDQotICAgKiA7ICogdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4NCi0gICAqIDsgKiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvDQotICAgKiA7ICogdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YNCi0gICAqIDsgKiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sDQotICAgKiA7ICogc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6DQotICAgKiA7ICoNCi0gICAqIDsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwNCi0gICAqIDsgKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLg0KLSAgICogOyAqDQotICAgKiA7ICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1INCi0gICAqIDsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUw0KLSAgICogOyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUg0KLSAgICogOyAqIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUg0KLSAgICogOyAqIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElODQotICAgKiA7ICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4NCi0gICAqIDsgKg0KLSAgICogOyAqIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnDQotICAgKiA7ICogaHR0cDovL2F3cy5hbWF6b24uY29tL2ZyZWVydG9zDQotICAgKiA7ICoNCi0gICAqIDsgKiAxIHRhYiA9PSA0IHNwYWNlcyENCi0gICAqIDsgKi8NCis7LyoNCis7ICogRnJlZVJUT1MgS2VybmVsIFYxMC4zLjENCis7ICogQ29weXJpZ2h0IChDKSAyMDIwIEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuICBBbGwgUmlnaHRzIFJlc2VydmVkLg0KKzsgKg0KKzsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mDQorOyAqIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluDQorOyAqIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8NCis7ICogdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YNCis7ICogdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLA0KKzsgKiBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoNCis7ICoNCis7ICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsDQorOyAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuDQorOyAqDQorOyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SDQorOyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTDQorOyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUg0KKzsgKiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVINCis7ICogSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4NCis7ICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4NCis7ICoNCis7ICogaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcNCis7ICogaHR0cDovL2F3cy5hbWF6b24uY29tL2ZyZWVydG9zDQorOyAqDQorOyAqIDEgdGFiID09IDQgc3BhY2VzIQ0KKzsgKi8NCiANCiANCiAjaW5jbHVkZSAiRnJlZVJUT1NDb25maWcuaCINCiANCi07DQotVmFyaWFibGVzIHVzZWQgYnkgc2NoZWR1bGVyDQotOw0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLUVYVEVSTiBweEN1cnJlbnRUQ0INCi1FWFRFUk4gdXNDcml0aWNhbE5lc3RpbmcNCis7IFZhcmlhYmxlcyB1c2VkIGJ5IHNjaGVkdWxlcg0KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisJRVhURVJOICAgIHB4Q3VycmVudFRDQg0KKwlFWFRFUk4gICAgdXNDcml0aWNhbE5lc3RpbmcNCiANCi07DQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotOw0KLXBvcnRTQVZFX0NPTlRFWFQgTUFDUk8NCi07DQotU2F2ZXMgdGhlIGNvbnRleHQgb2YgdGhlIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMsIENTIGFuZCBFUyggb25seSBpbiBmYXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5IG1vZGUgKSByZWdpc3RlcnMgdGhlIHVzQ3JpdGljYWxOZXN0aW5nIFZhbHVlIGFuZCB0aGUgU3RhY2sgUG9pbnRlcg0KLTsNCi1vZiB0aGUgYWN0aXZlIFRhc2sgb250byB0aGUgdGFzayBzdGFjaw0KLTsNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorOyAgIHBvcnRTQVZFX0NPTlRFWFQgTUFDUk8NCis7ICAgU2F2ZXMgdGhlIGNvbnRleHQgb2YgdGhlIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMsIENTIGFuZCBFUyAob25seSBpbiBmYXINCis7CW1lbW9yeSBtb2RlKSByZWdpc3RlcnMgdGhlIHVzQ3JpdGljYWxOZXN0aW5nIFZhbHVlIGFuZCB0aGUgU3RhY2sgUG9pbnRlcg0KKzsgICBvZiB0aGUgYWN0aXZlIFRhc2sgb250byB0aGUgdGFzayBzdGFjaw0KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiBwb3J0U0FWRV9DT05URVhUIE1BQ1JPDQogDQotUFVTSCBBWDsNCi1TYXZlIEFYIFJlZ2lzdGVyIHRvIHN0YWNrLg0KLSAgIFBVU0ggSEwNCi1NT1YgQSwgQ1M7DQotU2F2ZSBDUyByZWdpc3Rlci4NCi0gICBYQ0ggQSwgWA0KLU1PViBBLCBFUzsNCi1TYXZlIEVTIHJlZ2lzdGVyLg0KLSAgIFBVU0ggQVgNCi1QVVNIIERFOw0KLVNhdmUgdGhlIHJlbWFpbmluZyBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzLg0KLSAgIFBVU0ggQkMNCi1NT1ZXIEFYLCB1c0NyaXRpY2FsTmVzdGluZzsNCi1TYXZlIHRoZSB1c0NyaXRpY2FsTmVzdGluZyB2YWx1ZS4NCi0gICBQVVNIIEFYDQotTU9WVyBBWCwgcHhDdXJyZW50VENCOw0KLVNhdmUgdGhlIFN0YWNrIHBvaW50ZXIuDQotICAgTU9WVyBITCwgQVgNCi1NT1ZXIEFYLCBTUA0KLSAgICAgICAgTU9WV1sgSEwgXSwgQVgNCi0gICAgICAgIEVORE0NCi07DQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorCVBVU0ggICAgICBBWCAgICAgICAgICAgICAgICAgICAgOyBTYXZlIEFYIFJlZ2lzdGVyIHRvIHN0YWNrLg0KKwlQVVNIICAgICAgSEwNCisJTU9WICAgICAgIEEsIENTICAgICAgICAgICAgICAgICA7IFNhdmUgQ1MgcmVnaXN0ZXIuDQorCVhDSCAgICAgICBBLCBYDQorCU1PViAgICAgICBBLCBFUyAgICAgICAgICAgICAgICAgOyBTYXZlIEVTIHJlZ2lzdGVyLg0KKwlQVVNIICAgICAgQVgNCisJUFVTSCAgICAgIERFICAgICAgICAgICAgICAgICAgICA7IFNhdmUgdGhlIHJlbWFpbmluZyBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzLg0KKwlQVVNIICAgICAgQkMNCisJTU9WVyAgICAgIEFYLCB1c0NyaXRpY2FsTmVzdGluZyA7IFNhdmUgdGhlIHVzQ3JpdGljYWxOZXN0aW5nIHZhbHVlLg0KKwlQVVNIICAgICAgQVgNCisJTU9WVyAgICAgIEFYLCBweEN1cnJlbnRUQ0IgCSAgICA7IFNhdmUgdGhlIFN0YWNrIHBvaW50ZXIuDQorCU1PVlcgICAgICBITCwgQVgNCisJTU9WVyAgICAgIEFYLCBTUA0KKwlNT1ZXICAgICAgW0hMXSwgQVgNCisJRU5ETQ0KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiANCi07DQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotOw0KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCis7ICAgcG9ydFJFU1RPUkVfQ09OVEVYVCBNQUNSTw0KKzsgICBSZXN0b3JlcyB0aGUgdGFzayBTdGFjayBQb2ludGVyIHRoZW4gdXNlIHRoaXMgdG8gcmVzdG9yZSB1c0NyaXRpY2FsTmVzdGluZywNCis7ICAgZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycyBhbmQgdGhlIENTIGFuZCBFUyAob25seSBpbiBmYXIgbWVtb3J5IG1vZGUpDQorOyAgIG9mIHRoZSBzZWxlY3RlZCB0YXNrIGZyb20gdGhlIHRhc2sgc3RhY2sNCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogcG9ydFJFU1RPUkVfQ09OVEVYVCBNQUNSTw0KLTsNCi1SZXN0b3JlcyB0aGUgdGFzayBTdGFjayBQb2ludGVyIHRoZW4gdXNlIHRoaXMgdG8gcmVzdG9yZSB1c0NyaXRpY2FsTmVzdGluZywNCi07DQotZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycyBhbmQgdGhlIENTIGFuZCBFUyggb25seSBpbiBmYXIgbWVtb3J5IG1vZGUgKQ0KLTsNCi1vZiB0aGUgc2VsZWN0ZWQgdGFzayBmcm9tIHRoZSB0YXNrIHN0YWNrDQotOw0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXBvcnRSRVNUT1JFX0NPTlRFWFQgTUFDUk8NCi1NT1ZXIEFYLCBweEN1cnJlbnRUQ0I7DQotUmVzdG9yZSB0aGUgU3RhY2sgcG9pbnRlci4NCi0gICBNT1ZXIEhMLCBBWA0KLU1PVlcgQVgsIFsgSEwgXQ0KLU1PVlcgU1AsIEFYDQotUE9QIEFYOw0KLVJlc3RvcmUgdXNDcml0aWNhbE5lc3RpbmcgdmFsdWUuDQotICAgTU9WVyB1c0NyaXRpY2FsTmVzdGluZywgQVgNCi1QT1AgQkM7DQotUmVzdG9yZSB0aGUgbmVjZXNzYXJ5IGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMuDQotICAgUE9QIERFDQotUE9QIEFYOw0KLVJlc3RvcmUgdGhlIEVTIHJlZ2lzdGVyLg0KLSAgIE1PViBFUywgQQ0KLVhDSCBBLCBYOw0KLVJlc3RvcmUgdGhlIENTIHJlZ2lzdGVyLg0KLSAgIE1PViBDUywgQQ0KLVBPUCBITDsNCi1SZXN0b3JlIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlciBITC4NCi0gICBQT1AgQVg7DQotUmVzdG9yZSBBWC4NCi0gICBFTkRNDQotOw0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKwlNT1ZXICAgICAgQVgsIHB4Q3VycmVudFRDQgkgICAgOyBSZXN0b3JlIHRoZSBTdGFjayBwb2ludGVyLg0KKwlNT1ZXICAgICAgSEwsIEFYDQorCU1PVlcgICAgICBBWCwgW0hMXQ0KKwlNT1ZXICAgICAgU1AsIEFYDQorCVBPUAkgICAgICBBWAkgICAgICAgICAgICAgICAgOyBSZXN0b3JlIHVzQ3JpdGljYWxOZXN0aW5nIHZhbHVlLg0KKwlNT1ZXICAgICAgdXNDcml0aWNhbE5lc3RpbmcsIEFYDQorCVBPUAkgICAgICBCQyAgICAgICAgICAgICAgICAgICAgOyBSZXN0b3JlIHRoZSBuZWNlc3NhcnkgZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycy4NCisJUE9QCSAgICAgIERFDQorCVBPUCAgICAgICBBWCAgICAgICAgICAgICAgICAgICAgOyBSZXN0b3JlIHRoZSBFUyByZWdpc3Rlci4NCisJTU9WICAgICAgIEVTLCBBDQorCVhDSCAgICAgICBBLCBYICAgICAgICAgICAgICAgICAgOyBSZXN0b3JlIHRoZSBDUyByZWdpc3Rlci4NCisJTU9WICAgICAgIENTLCBBDQorCVBPUCAgICAgICBITCAgICAgICAgICAgICAgICAgICAgOyBSZXN0b3JlIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlciBITC4NCisJUE9QICAgICAgIEFYICAgICAgICAgICAgICAgICAgICA7IFJlc3RvcmUgQVguDQorCUVORE0NCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvSUFSL1JMNzgvcG9ydC5jIGIvcG9ydGFibGUvSUFSL1JMNzgvcG9ydC5jCmluZGV4IDNhZjYxNTIuLjNkYmU0M2UgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0lBUi9STDc4L3BvcnQuYworKysgYi9wb3J0YWJsZS9JQVIvUkw3OC9wb3J0LmMKQEAgLTMwLDggKzMwLDggQEAKICNpbmNsdWRlICJ0YXNrLmgiDQogDQogLyogVGhlIGNyaXRpY2FsIG5lc3RpbmcgdmFsdWUgaXMgaW5pdGlhbGlzZWQgdG8gYSBub24gemVybyB2YWx1ZSB0byBlbnN1cmUNCi0gKiBpbnRlcnJ1cHRzIGRvbid0IGFjY2lkZW50YWxseSBiZWNvbWUgZW5hYmxlZCBiZWZvcmUgdGhlIHNjaGVkdWxlciBpcyBzdGFydGVkLiAqLw0KLSNkZWZpbmUgcG9ydElOSVRJQUxfQ1JJVElDQUxfTkVTVElORyAgICAoICggdWludDE2X3QgKSAxMCApDQoraW50ZXJydXB0cyBkb24ndCBhY2NpZGVudGFsbHkgYmVjb21lIGVuYWJsZWQgYmVmb3JlIHRoZSBzY2hlZHVsZXIgaXMgc3RhcnRlZC4gKi8NCisjZGVmaW5lIHBvcnRJTklUSUFMX0NSSVRJQ0FMX05FU1RJTkcgICggKCB1aW50MTZfdCApIDEwICkNCiANCiAvKiBJbml0aWFsIFBTVyB2YWx1ZSBhbGxvY2F0ZWQgdG8gYSBuZXdseSBjcmVhdGVkIHRhc2suDQogICogICAxMTAwMDExMDAwMDAwMDAwDQpAQCAtNDQsMjEgKzQ0LDIxIEBACiAgKiAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0gWmVybyBGbGFnIHNldA0KICAqICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBHbG9iYWwgSW50ZXJydXB0IEZsYWcgc2V0IChlbmFibGVkKQ0KICAqLw0KLSNkZWZpbmUgcG9ydFBTVyAgICAgICAgICAgICAgICAgICAgICAgICAoIDB4YzZVTCApDQorI2RlZmluZSBwb3J0UFNXCQkgICggMHhjNlVMICkNCiANCiAvKiBUaGUgYWRkcmVzcyBvZiB0aGUgcHhDdXJyZW50VENCIHZhcmlhYmxlLCBidXQgZG9uJ3Qga25vdyBvciBuZWVkIHRvIGtub3cgaXRzDQotICogdHlwZS4gKi8NCit0eXBlLiAqLw0KIHR5cGVkZWYgdm9pZCBUQ0JfdDsNCiBleHRlcm4gdm9sYXRpbGUgVENCX3QgKiB2b2xhdGlsZSBweEN1cnJlbnRUQ0I7DQogDQogLyogRWFjaCB0YXNrIG1haW50YWlucyBhIGNvdW50IG9mIHRoZSBjcml0aWNhbCBzZWN0aW9uIG5lc3RpbmcgZGVwdGguICBFYWNoIHRpbWUNCi0gKiBhIGNyaXRpY2FsIHNlY3Rpb24gaXMgZW50ZXJlZCB0aGUgY291bnQgaXMgaW5jcmVtZW50ZWQuICBFYWNoIHRpbWUgYSBjcml0aWNhbA0KLSAqIHNlY3Rpb24gaXMgZXhpdGVkIHRoZSBjb3VudCBpcyBkZWNyZW1lbnRlZCAtIHdpdGggaW50ZXJydXB0cyBvbmx5IGJlaW5nDQotICogcmUtZW5hYmxlZCBpZiB0aGUgY291bnQgaXMgemVyby4NCi0gKg0KLSAqIHVzQ3JpdGljYWxOZXN0aW5nIHdpbGwgZ2V0IHNldCB0byB6ZXJvIHdoZW4gdGhlIHNjaGVkdWxlciBzdGFydHMsIGJ1dCBtdXN0DQotICogbm90IGJlIGluaXRpYWxpc2VkIHRvIHplcm8gYXMgdGhhdCBjb3VsZCBjYXVzZSBwcm9ibGVtcyBkdXJpbmcgdGhlIHN0YXJ0dXANCi0gKiBzZXF1ZW5jZS4gKi8NCithIGNyaXRpY2FsIHNlY3Rpb24gaXMgZW50ZXJlZCB0aGUgY291bnQgaXMgaW5jcmVtZW50ZWQuICBFYWNoIHRpbWUgYSBjcml0aWNhbA0KK3NlY3Rpb24gaXMgZXhpdGVkIHRoZSBjb3VudCBpcyBkZWNyZW1lbnRlZCAtIHdpdGggaW50ZXJydXB0cyBvbmx5IGJlaW5nDQorcmUtZW5hYmxlZCBpZiB0aGUgY291bnQgaXMgemVyby4NCisNCit1c0NyaXRpY2FsTmVzdGluZyB3aWxsIGdldCBzZXQgdG8gemVybyB3aGVuIHRoZSBzY2hlZHVsZXIgc3RhcnRzLCBidXQgbXVzdA0KK25vdCBiZSBpbml0aWFsaXNlZCB0byB6ZXJvIGFzIHRoYXQgY291bGQgY2F1c2UgcHJvYmxlbXMgZHVyaW5nIHRoZSBzdGFydHVwDQorc2VxdWVuY2UuICovDQogdm9sYXRpbGUgdWludDE2X3QgdXNDcml0aWNhbE5lc3RpbmcgPSBwb3J0SU5JVElBTF9DUklUSUNBTF9ORVNUSU5HOw0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KQEAgLTcxLDEwICs3MSw5IEBACiAgKi8NCiBzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICk7DQogI2lmbmRlZiBjb25maWdTRVRVUF9USUNLX0lOVEVSUlVQVA0KLQ0KLS8qIFRoZSB1c2VyIGhhcyBub3QgcHJvdmlkZWQgdGhlaXIgb3duIHRpY2sgaW50ZXJydXB0IGNvbmZpZ3VyYXRpb24gc28gdXNlDQotICogdGhlIGRlZmluaXRpb24gaW4gdGhpcyBmaWxlICh3aGljaCB1c2VzIHRoZSBpbnRlcnZhbCB0aW1lcikuICovDQotICAgICNkZWZpbmUgY29uZmlnU0VUVVBfVElDS19JTlRFUlJVUFQoKSAgICBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCkNCisJLyogVGhlIHVzZXIgaGFzIG5vdCBwcm92aWRlZCB0aGVpciBvd24gdGljayBpbnRlcnJ1cHQgY29uZmlndXJhdGlvbiBzbyB1c2UNCisgICAgdGhlIGRlZmluaXRpb24gaW4gdGhpcyBmaWxlICh3aGljaCB1c2VzIHRoZSBpbnRlcnZhbCB0aW1lcikuICovDQorCSNkZWZpbmUgY29uZmlnU0VUVVBfVElDS19JTlRFUlJVUFQoKSBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCkNCiAjZW5kaWYgLyogY29uZmlnU0VUVVBfVElDS19JTlRFUlJVUFQgKi8NCiANCiAvKg0KQEAgLTk2LDE5MCArOTUsMTg2IEBACiAgKg0KICAqIFNlZSB0aGUgaGVhZGVyIGZpbGUgcG9ydGFibGUuaC4NCiAgKi8NCi1TdGFja1R5cGVfdCAqIHB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKiBweFRvcE9mU3RhY2ssDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqIHB2UGFyYW1ldGVycyApDQorU3RhY2tUeXBlX3QgKnB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKnB4VG9wT2ZTdGFjaywgVGFza0Z1bmN0aW9uX3QgcHhDb2RlLCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KIHsNCi0gICAgdWludDMyX3QgKiBwdWxMb2NhbDsNCit1aW50MzJfdCAqcHVsTG9jYWw7DQogDQotICAgIC8qIFdpdGggbGFyZ2UgY29kZSBhbmQgbGFyZ2UgZGF0YSBzaXplb2YoIFN0YWNrVHlwZV90ICkgPT0gMiwgYW5kDQotICAgICogc2l6ZW9mKCBTdGFja1R5cGVfdCAqICkgPT0gNC4gIFdpdGggc21hbGwgY29kZSBhbmQgc21hbGwgZGF0YQ0KLSAgICAqIHNpemVvZiggU3RhY2tUeXBlX3QgKSA9PSAyIGFuZCBzaXplb2YoIFN0YWNrVHlwZV90ICogKSA9PSAyLiAqLw0KKwkvKiBXaXRoIGxhcmdlIGNvZGUgYW5kIGxhcmdlIGRhdGEgc2l6ZW9mKCBTdGFja1R5cGVfdCApID09IDIsIGFuZA0KKwlzaXplb2YoIFN0YWNrVHlwZV90ICogKSA9PSA0LiAgV2l0aCBzbWFsbCBjb2RlIGFuZCBzbWFsbCBkYXRhDQorCXNpemVvZiggU3RhY2tUeXBlX3QgKSA9PSAyIGFuZCBzaXplb2YoIFN0YWNrVHlwZV90ICogKSA9PSAyLiAqLw0KIA0KLSAgICAjaWYgX19EQVRBX01PREVMX18gPT0gX19EQVRBX01PREVMX0ZBUl9fDQotICAgICAgICB7DQotICAgICAgICAgICAgLyogUGFyYW1ldGVycyBhcmUgcGFzc2VkIGluIG9uIHRoZSBzdGFjaywgYW5kIHdyaXR0ZW4gdXNpbmcgYSAzMi1iaXQgdmFsdWUNCi0gICAgICAgICAgICAgKiBoZW5jZSBhIHNwYWNlIGlzIGxlZnQgZm9yIHRoZSBzZWNvbmQgdHdvIGJ5dGVzLiAqLw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkjaWYgX19EQVRBX01PREVMX18gPT0gX19EQVRBX01PREVMX0ZBUl9fDQorCXsNCisJCS8qIFBhcmFtZXRlcnMgYXJlIHBhc3NlZCBpbiBvbiB0aGUgc3RhY2ssIGFuZCB3cml0dGVuIHVzaW5nIGEgMzItYml0IHZhbHVlDQorCQloZW5jZSBhIHNwYWNlIGlzIGxlZnQgZm9yIHRoZSBzZWNvbmQgdHdvIGJ5dGVzLiAqLw0KKwkJcHhUb3BPZlN0YWNrLS07DQogDQotICAgICAgICAgICAgLyogV3JpdGUgaW4gdGhlIHBhcmFtZXRlciB2YWx1ZS4gKi8NCi0gICAgICAgICAgICBwdWxMb2NhbCA9ICggdWludDMyX3QgKiApIHB4VG9wT2ZTdGFjazsNCi0gICAgICAgICAgICAqcHVsTG9jYWwgPSAoIHVpbnQzMl90ICkgcHZQYXJhbWV0ZXJzOw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkJLyogV3JpdGUgaW4gdGhlIHBhcmFtZXRlciB2YWx1ZS4gKi8NCisJCXB1bExvY2FsID0gICggdWludDMyX3QgKiApIHB4VG9wT2ZTdGFjazsNCisJCSpwdWxMb2NhbCA9ICggdWludDMyX3QgKSBwdlBhcmFtZXRlcnM7DQorCQlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgICAgICAgICAvKiBUaGUgcmV0dXJuIGFkZHJlc3MsIGxlYXZpbmcgc3BhY2UgZm9yIHRoZSBmaXJzdCB0d28gYnl0ZXMgb2YJdGhlDQotICAgICAgICAgICAgICogMzItYml0IHZhbHVlLiAgU2VlIHRoZSBjb21tZW50cyBhYm92ZSB0aGUgcHJ2VGFza0V4aXRFcnJvcigpIHByb3RvdHlwZQ0KLSAgICAgICAgICAgICAqIGF0IHRoZSB0b3Agb2YgdGhpcyBmaWxlLiAqLw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgIHB1bExvY2FsID0gKCB1aW50MzJfdCAqICkgcHhUb3BPZlN0YWNrOw0KLSAgICAgICAgICAgICpwdWxMb2NhbCA9ICggdWludDMyX3QgKSBwcnZUYXNrRXhpdEVycm9yOw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkJLyogVGhlIHJldHVybiBhZGRyZXNzLCBsZWF2aW5nIHNwYWNlIGZvciB0aGUgZmlyc3QgdHdvIGJ5dGVzIG9mCXRoZQ0KKwkJMzItYml0IHZhbHVlLiAgU2VlIHRoZSBjb21tZW50cyBhYm92ZSB0aGUgcHJ2VGFza0V4aXRFcnJvcigpIHByb3RvdHlwZQ0KKwkJYXQgdGhlIHRvcCBvZiB0aGlzIGZpbGUuICovDQorCQlweFRvcE9mU3RhY2stLTsNCisJCXB1bExvY2FsID0gKCB1aW50MzJfdCAqICkgcHhUb3BPZlN0YWNrOw0KKwkJKnB1bExvY2FsID0gKCB1aW50MzJfdCApIHBydlRhc2tFeGl0RXJyb3I7DQorCQlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgICAgICAgICAvKiBUaGUgc3RhcnQgYWRkcmVzcyAvIFBTVyB2YWx1ZSBpcyBhbHNvIHdyaXR0ZW4gaW4gYXMgYSAzMi1iaXQgdmFsdWUsDQotICAgICAgICAgICAgICogc28gbGVhdmUgYSBzcGFjZSBmb3IgdGhlIHNlY29uZCB0d28gYnl0ZXMuICovDQotICAgICAgICAgICAgcHhUb3BPZlN0YWNrLS07DQorCQkvKiBUaGUgc3RhcnQgYWRkcmVzcyAvIFBTVyB2YWx1ZSBpcyBhbHNvIHdyaXR0ZW4gaW4gYXMgYSAzMi1iaXQgdmFsdWUsDQorCQlzbyBsZWF2ZSBhIHNwYWNlIGZvciB0aGUgc2Vjb25kIHR3byBieXRlcy4gKi8NCisJCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAgICAgICAgIC8qIFRhc2sgZnVuY3Rpb24gc3RhcnQgYWRkcmVzcyBjb21iaW5lZCB3aXRoIHRoZSBQU1cuICovDQotICAgICAgICAgICAgcHVsTG9jYWwgPSAoIHVpbnQzMl90ICogKSBweFRvcE9mU3RhY2s7DQotICAgICAgICAgICAgKnB1bExvY2FsID0gKCAoICggdWludDMyX3QgKSBweENvZGUgKSB8ICggcG9ydFBTVyA8PCAyNFVMICkgKTsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCisJCS8qIFRhc2sgZnVuY3Rpb24gc3RhcnQgYWRkcmVzcyBjb21iaW5lZCB3aXRoIHRoZSBQU1cuICovDQorCQlwdWxMb2NhbCA9ICggdWludDMyX3QgKiApIHB4VG9wT2ZTdGFjazsNCisJCSpwdWxMb2NhbCA9ICggKCAoIHVpbnQzMl90ICkgcHhDb2RlICkgfCAoIHBvcnRQU1cgPDwgMjRVTCApICk7DQorCQlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgICAgICAgICAvKiBBbiBpbml0aWFsIHZhbHVlIGZvciB0aGUgQVggcmVnaXN0ZXIuICovDQotICAgICAgICAgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDExMTE7DQotICAgICAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICAgICB9DQotICAgICNlbHNlIC8qIGlmIF9fREFUQV9NT0RFTF9fID09IF9fREFUQV9NT0RFTF9GQVJfXyAqLw0KLSAgICAgICAgew0KLSAgICAgICAgICAgIC8qIFRoZSByZXR1cm4gYWRkcmVzcywgbGVhdmluZyBzcGFjZSBmb3IgdGhlIGZpcnN0IHR3byBieXRlcyBvZgl0aGUNCi0gICAgICAgICAgICAgKiAzMi1iaXQgdmFsdWUuICBTZWUgdGhlIGNvbW1lbnRzIGFib3ZlIHRoZSBwcnZUYXNrRXhpdEVycm9yKCkgcHJvdG90eXBlDQotICAgICAgICAgICAgICogYXQgdGhlIHRvcCBvZiB0aGlzIGZpbGUuICovDQotICAgICAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICAgICAgICAgcHVsTG9jYWwgPSAoIHVpbnQzMl90ICogKSBweFRvcE9mU3RhY2s7DQotICAgICAgICAgICAgKnB1bExvY2FsID0gKCB1aW50MzJfdCApIHBydlRhc2tFeGl0RXJyb3I7DQotICAgICAgICAgICAgcHhUb3BPZlN0YWNrLS07DQorCQkvKiBBbiBpbml0aWFsIHZhbHVlIGZvciB0aGUgQVggcmVnaXN0ZXIuICovDQorCQkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTExMTsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwl9DQorCSNlbHNlDQorCXsNCisJCS8qIFRoZSByZXR1cm4gYWRkcmVzcywgbGVhdmluZyBzcGFjZSBmb3IgdGhlIGZpcnN0IHR3byBieXRlcyBvZgl0aGUNCisJCTMyLWJpdCB2YWx1ZS4gIFNlZSB0aGUgY29tbWVudHMgYWJvdmUgdGhlIHBydlRhc2tFeGl0RXJyb3IoKSBwcm90b3R5cGUNCisJCWF0IHRoZSB0b3Agb2YgdGhpcyBmaWxlLiAqLw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQlwdWxMb2NhbCA9ICggdWludDMyX3QgKiApIHB4VG9wT2ZTdGFjazsNCisJCSpwdWxMb2NhbCA9ICggdWludDMyX3QgKSBwcnZUYXNrRXhpdEVycm9yOw0KKwkJcHhUb3BPZlN0YWNrLS07DQogDQotICAgICAgICAgICAgLyogVGFzayBmdW5jdGlvbi4gIEFnYWluIGFzIGl0IGlzIHdyaXR0ZW4gYXMgYSAzMi1iaXQgdmFsdWUgYSBzcGFjZSBpcw0KLSAgICAgICAgICAgICAqIGxlZnQgb24gdGhlIHN0YWNrIGZvciB0aGUgc2Vjb25kIHR3byBieXRlcy4gKi8NCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCisJCS8qIFRhc2sgZnVuY3Rpb24uICBBZ2FpbiBhcyBpdCBpcyB3cml0dGVuIGFzIGEgMzItYml0IHZhbHVlIGEgc3BhY2UgaXMNCisJCWxlZnQgb24gdGhlIHN0YWNrIGZvciB0aGUgc2Vjb25kIHR3byBieXRlcy4gKi8NCisJCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAgICAgICAgIC8qIFRhc2sgZnVuY3Rpb24gc3RhcnQgYWRkcmVzcyBjb21iaW5lZCB3aXRoIHRoZSBQU1cuICovDQotICAgICAgICAgICAgcHVsTG9jYWwgPSAoIHVpbnQzMl90ICogKSBweFRvcE9mU3RhY2s7DQotICAgICAgICAgICAgKnB1bExvY2FsID0gKCAoICggdWludDMyX3QgKSBweENvZGUgKSB8ICggcG9ydFBTVyA8PCAyNFVMICkgKTsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCisJCS8qIFRhc2sgZnVuY3Rpb24gc3RhcnQgYWRkcmVzcyBjb21iaW5lZCB3aXRoIHRoZSBQU1cuICovDQorCQlwdWxMb2NhbCA9ICggdWludDMyX3QgKiApIHB4VG9wT2ZTdGFjazsNCisJCSpwdWxMb2NhbCA9ICggKCAoIHVpbnQzMl90ICkgcHhDb2RlICkgfCAoIHBvcnRQU1cgPDwgMjRVTCApICk7DQorCQlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgICAgICAgICAvKiBUaGUgcGFyYW1ldGVyIGlzIHBhc3NlZCBpbiBBWC4gKi8NCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB2UGFyYW1ldGVyczsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgIH0NCi0gICAgI2VuZGlmIC8qIGlmIF9fREFUQV9NT0RFTF9fID09IF9fREFUQV9NT0RFTF9GQVJfXyAqLw0KKwkJLyogVGhlIHBhcmFtZXRlciBpcyBwYXNzZWQgaW4gQVguICovDQorCQkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB2UGFyYW1ldGVyczsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwl9DQorCSNlbmRpZg0KIA0KLSAgICAvKiBBbiBpbml0aWFsIHZhbHVlIGZvciB0aGUgSEwgcmVnaXN0ZXIuICovDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgyMjIyOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJLyogQW4gaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIEhMIHJlZ2lzdGVyLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MjIyMjsNCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgIC8qIENTIGFuZCBFUyByZWdpc3RlcnMuICovDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwRjAwOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJLyogQ1MgYW5kIEVTIHJlZ2lzdGVycy4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDBGMDA7DQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBUaGUgcmVtYWluaW5nIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMgREUgYW5kIEJDICovDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhERURFOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweEJDQkM7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkvKiBUaGUgcmVtYWluaW5nIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMgREUgYW5kIEJDICovDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhERURFOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweEJDQkM7DQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBGaW5hbGx5IHRoZSBjcml0aWNhbCBzZWN0aW9uIG5lc3RpbmcgY291bnQgaXMgc2V0IHRvIHplcm8gd2hlbiB0aGUgdGFzaw0KLSAgICAgKiBmaXJzdCBzdGFydHMuICovDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcG9ydE5PX0NSSVRJQ0FMX1NFQ1RJT05fTkVTVElORzsNCisJLyogRmluYWxseSB0aGUgY3JpdGljYWwgc2VjdGlvbiBuZXN0aW5nIGNvdW50IGlzIHNldCB0byB6ZXJvIHdoZW4gdGhlIHRhc2sNCisJZmlyc3Qgc3RhcnRzLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkc7DQogDQotICAgIC8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHRvcCBvZiB0aGUgc3RhY2sgdGhhdCBoYXMgYmVlbiBnZW5lcmF0ZWQgc28gaXQNCi0gICAgICogY2FuCWJlIHN0b3JlZCBpbiB0aGUgdGFzayBjb250cm9sIGJsb2NrIGZvciB0aGUgdGFzay4gKi8NCi0gICAgcmV0dXJuIHB4VG9wT2ZTdGFjazsNCisJLyogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgdG9wIG9mIHRoZSBzdGFjayB0aGF0IGhhcyBiZWVuIGdlbmVyYXRlZCBzbyBpdA0KKwljYW4JYmUgc3RvcmVkIGluIHRoZSB0YXNrIGNvbnRyb2wgYmxvY2sgZm9yIHRoZSB0YXNrLiAqLw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBzdGF0aWMgdm9pZCBwcnZUYXNrRXhpdEVycm9yKCB2b2lkICkNCiB7DQotICAgIC8qIEEgZnVuY3Rpb24gdGhhdCBpbXBsZW1lbnRzIGEgdGFzayBtdXN0IG5vdCBleGl0IG9yIGF0dGVtcHQgdG8gcmV0dXJuIHRvDQotICAgICAqIGl0cyBjYWxsZXIgYXMgdGhlcmUgaXMgbm90aGluZyB0byByZXR1cm4gdG8uICBJZiBhIHRhc2sgd2FudHMgdG8gZXhpdCBpdA0KLSAgICAgKiBzaG91bGQgaW5zdGVhZCBjYWxsIHZUYXNrRGVsZXRlKCBOVUxMICkuDQotICAgICAqDQotICAgICAqIEFydGlmaWNpYWxseSBmb3JjZSBhbiBhc3NlcnQoKSB0byBiZSB0cmlnZ2VyZWQgaWYgY29uZmlnQVNTRVJUKCkgaXMNCi0gICAgICogZGVmaW5lZCwgdGhlbiBzdG9wIGhlcmUgc28gYXBwbGljYXRpb24gd3JpdGVycyBjYW4gY2F0Y2ggdGhlIGVycm9yLiAqLw0KLSAgICBjb25maWdBU1NFUlQoIHVzQ3JpdGljYWxOZXN0aW5nID09IH4wVSApOw0KLSAgICBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7DQorCS8qIEEgZnVuY3Rpb24gdGhhdCBpbXBsZW1lbnRzIGEgdGFzayBtdXN0IG5vdCBleGl0IG9yIGF0dGVtcHQgdG8gcmV0dXJuIHRvDQorCWl0cyBjYWxsZXIgYXMgdGhlcmUgaXMgbm90aGluZyB0byByZXR1cm4gdG8uICBJZiBhIHRhc2sgd2FudHMgdG8gZXhpdCBpdA0KKwlzaG91bGQgaW5zdGVhZCBjYWxsIHZUYXNrRGVsZXRlKCBOVUxMICkuDQogDQotICAgIGZvciggOyA7ICkNCi0gICAgew0KLSAgICB9DQorCUFydGlmaWNpYWxseSBmb3JjZSBhbiBhc3NlcnQoKSB0byBiZSB0cmlnZ2VyZWQgaWYgY29uZmlnQVNTRVJUKCkgaXMNCisJZGVmaW5lZCwgdGhlbiBzdG9wIGhlcmUgc28gYXBwbGljYXRpb24gd3JpdGVycyBjYW4gY2F0Y2ggdGhlIGVycm9yLiAqLw0KKwljb25maWdBU1NFUlQoIHVzQ3JpdGljYWxOZXN0aW5nID09IH4wVSApOw0KKwlwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7DQorCWZvciggOzsgKTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogQmFzZVR5cGVfdCB4UG9ydFN0YXJ0U2NoZWR1bGVyKCB2b2lkICkNCiB7DQotICAgIC8qIFNldHVwIHRoZSBoYXJkd2FyZSB0byBnZW5lcmF0ZSB0aGUgdGljay4gIEludGVycnVwdHMgYXJlIGRpc2FibGVkIHdoZW4NCi0gICAgICogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuICovDQotICAgIGNvbmZpZ1NFVFVQX1RJQ0tfSU5URVJSVVBUKCk7DQorCS8qIFNldHVwIHRoZSBoYXJkd2FyZSB0byBnZW5lcmF0ZSB0aGUgdGljay4gIEludGVycnVwdHMgYXJlIGRpc2FibGVkIHdoZW4NCisJdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuICovDQorCWNvbmZpZ1NFVFVQX1RJQ0tfSU5URVJSVVBUKCk7DQogDQotICAgIC8qIFJlc3RvcmUgdGhlIGNvbnRleHQgb2YgdGhlIGZpcnN0IHRhc2sgdGhhdCBpcyBnb2luZyB0byBydW4uICovDQotICAgIHZQb3J0U3RhcnRGaXJzdFRhc2soKTsNCisJLyogUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgZmlyc3QgdGFzayB0aGF0IGlzIGdvaW5nIHRvIHJ1bi4gKi8NCisJdlBvcnRTdGFydEZpcnN0VGFzaygpOw0KIA0KLSAgICAvKiBFeGVjdXRpb24gc2hvdWxkIG5vdCByZWFjaCBoZXJlIGFzIHRoZSB0YXNrcyBhcmUgbm93IHJ1bm5pbmchDQotICAgICAqIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoKSBpcyBjYWxsZWQgaGVyZSB0byBwcmV2ZW50IHRoZSBjb21waWxlciBvdXRwdXR0aW5nDQotICAgICAqIGEgd2FybmluZyBhYm91dCBhIHN0YXRpY2FsbHkgZGVjbGFyZWQgZnVuY3Rpb24gbm90IGJlaW5nIHJlZmVyZW5jZWQgaW4gdGhlDQotICAgICAqIGNhc2UgdGhhdCB0aGUgYXBwbGljYXRpb24gd3JpdGVyIGhhcyBwcm92aWRlZCB0aGVpciBvd24gdGljayBpbnRlcnJ1cHQNCi0gICAgICogY29uZmlndXJhdGlvbiByb3V0aW5lIChhbmQgZGVmaW5lZCBjb25maWdTRVRVUF9USUNLX0lOVEVSUlVQVCgpIHN1Y2ggdGhhdA0KLSAgICAgKiB0aGVpciBvd24gcm91dGluZSB3aWxsIGJlIGNhbGxlZCBpbiBwbGFjZSBvZiBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCkpLiAqLw0KLSAgICBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCk7DQotICAgIHJldHVybiBwZFRSVUU7DQorCS8qIEV4ZWN1dGlvbiBzaG91bGQgbm90IHJlYWNoIGhlcmUgYXMgdGhlIHRhc2tzIGFyZSBub3cgcnVubmluZyENCisJcHJ2U2V0dXBUaW1lckludGVycnVwdCgpIGlzIGNhbGxlZCBoZXJlIHRvIHByZXZlbnQgdGhlIGNvbXBpbGVyIG91dHB1dHRpbmcNCisJYSB3YXJuaW5nIGFib3V0IGEgc3RhdGljYWxseSBkZWNsYXJlZCBmdW5jdGlvbiBub3QgYmVpbmcgcmVmZXJlbmNlZCBpbiB0aGUNCisJY2FzZSB0aGF0IHRoZSBhcHBsaWNhdGlvbiB3cml0ZXIgaGFzIHByb3ZpZGVkIHRoZWlyIG93biB0aWNrIGludGVycnVwdA0KKwljb25maWd1cmF0aW9uIHJvdXRpbmUgKGFuZCBkZWZpbmVkIGNvbmZpZ1NFVFVQX1RJQ0tfSU5URVJSVVBUKCkgc3VjaCB0aGF0DQorCXRoZWlyIG93biByb3V0aW5lIHdpbGwgYmUgY2FsbGVkIGluIHBsYWNlIG9mIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoKSkuICovDQorCXBydlNldHVwVGltZXJJbnRlcnJ1cHQoKTsNCisJcmV0dXJuIHBkVFJVRTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogdm9pZCB2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApDQogew0KLSAgICAvKiBJdCBpcyB1bmxpa2VseSB0aGF0IHRoZSBSTDc4IHBvcnQgd2lsbCBnZXQgc3RvcHBlZC4gKi8NCisJLyogSXQgaXMgdW5saWtlbHkgdGhhdCB0aGUgUkw3OCBwb3J0IHdpbGwgZ2V0IHN0b3BwZWQuICovDQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHN0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKQ0KIHsNCi0gICAgY29uc3QgdWludDE2X3QgdXNDbG9ja0h6ID0gMTUwMDBVTDsgLyogSW50ZXJuYWwgY2xvY2suICovDQotICAgIGNvbnN0IHVpbnQxNl90IHVzQ29tcGFyZU1hdGNoID0gKCB1c0Nsb2NrSHogLyBjb25maWdUSUNLX1JBVEVfSFogKSArIDFVTDsNCitjb25zdCB1aW50MTZfdCB1c0Nsb2NrSHogPSAxNTAwMFVMOyAvKiBJbnRlcm5hbCBjbG9jay4gKi8NCitjb25zdCB1aW50MTZfdCB1c0NvbXBhcmVNYXRjaCA9ICggdXNDbG9ja0h6IC8gY29uZmlnVElDS19SQVRFX0haICkgKyAxVUw7DQogDQotICAgIC8qIFVzZSB0aGUgaW50ZXJuYWwgMTVLIGNsb2NrLiAqLw0KLSAgICBPU01DID0gKCB1aW50OF90ICkgMHgxNjsNCisJLyogVXNlIHRoZSBpbnRlcm5hbCAxNUsgY2xvY2suICovDQorCU9TTUMgPSAoIHVpbnQ4X3QgKSAweDE2Ow0KIA0KLSAgICAjaWZkZWYgUlRDRU4NCi0gICAgICAgIHsNCi0gICAgICAgICAgICAvKiBTdXBwbHkgdGhlIGludGVydmFsIHRpbWVyIGNsb2NrLiAqLw0KLSAgICAgICAgICAgIFJUQ0VOID0gKCB1aW50OF90ICkgMVU7DQorCSNpZmRlZiBSVENFTg0KKwl7DQorCQkvKiBTdXBwbHkgdGhlIGludGVydmFsIHRpbWVyIGNsb2NrLiAqLw0KKwkJUlRDRU4gPSAoIHVpbnQ4X3QgKSAxVTsNCiANCi0gICAgICAgICAgICAvKiBEaXNhYmxlIElOVElUIGludGVycnVwdC4gKi8NCi0gICAgICAgICAgICBJVE1LID0gKCB1aW50OF90ICkgMTsNCisJCS8qIERpc2FibGUgSU5USVQgaW50ZXJydXB0LiAqLw0KKwkJSVRNSyA9ICggdWludDhfdCApIDE7DQogDQotICAgICAgICAgICAgLyogRGlzYWJsZSBJVE1DIG9wZXJhdGlvbi4gKi8NCi0gICAgICAgICAgICBJVE1DID0gKCB1aW50OF90ICkgMHgwMDAwOw0KKwkJLyogRGlzYWJsZSBJVE1DIG9wZXJhdGlvbi4gKi8NCisJCUlUTUMgPSAoIHVpbnQ4X3QgKSAweDAwMDA7DQogDQotICAgICAgICAgICAgLyogQ2xlYXIgSU5JVCBpbnRlcnJ1cHQuICovDQotICAgICAgICAgICAgSVRJRiA9ICggdWludDhfdCApIDA7DQorCQkvKiBDbGVhciBJTklUIGludGVycnVwdC4gKi8NCisJCUlUSUYgPSAoIHVpbnQ4X3QgKSAwOw0KIA0KLSAgICAgICAgICAgIC8qIFNldCBpbnRlcnZhbCBhbmQgZW5hYmxlIGludGVycnVwdCBvcGVyYXRpb24uICovDQotICAgICAgICAgICAgSVRNQyA9IHVzQ29tcGFyZU1hdGNoIHwgMHg4MDAwVTsNCisJCS8qIFNldCBpbnRlcnZhbCBhbmQgZW5hYmxlIGludGVycnVwdCBvcGVyYXRpb24uICovDQorCQlJVE1DID0gdXNDb21wYXJlTWF0Y2ggfCAweDgwMDBVOw0KIA0KLSAgICAgICAgICAgIC8qIEVuYWJsZSBJTlRJVCBpbnRlcnJ1cHQuICovDQotICAgICAgICAgICAgSVRNSyA9ICggdWludDhfdCApIDA7DQotICAgICAgICB9DQotICAgICNlbmRpZiAvKiBpZmRlZiBSVENFTiAqLw0KKwkJLyogRW5hYmxlIElOVElUIGludGVycnVwdC4gKi8NCisJCUlUTUsgPSAoIHVpbnQ4X3QgKSAwOw0KKwl9DQorCSNlbmRpZg0KIA0KLSAgICAjaWZkZWYgVE1LQUVODQotICAgICAgICB7DQotICAgICAgICAgICAgLyogU3VwcGx5IHRoZSBpbnRlcnZhbCB0aW1lciBjbG9jay4gKi8NCi0gICAgICAgICAgICBUTUtBRU4gPSAoIHVpbnQ4X3QgKSAxVTsNCisJI2lmZGVmIFRNS0FFTg0KKwl7DQorCQkvKiBTdXBwbHkgdGhlIGludGVydmFsIHRpbWVyIGNsb2NrLiAqLw0KKwkJVE1LQUVOID0gKCB1aW50OF90ICkgMVU7DQogDQotICAgICAgICAgICAgLyogRGlzYWJsZSBJTlRJVCBpbnRlcnJ1cHQuICovDQotICAgICAgICAgICAgVE1LQU1LID0gKCB1aW50OF90ICkgMTsNCisJCS8qIERpc2FibGUgSU5USVQgaW50ZXJydXB0LiAqLw0KKwkJVE1LQU1LID0gKCB1aW50OF90ICkgMTsNCiANCi0gICAgICAgICAgICAvKiBEaXNhYmxlIElUTUMgb3BlcmF0aW9uLiAqLw0KLSAgICAgICAgICAgIElUTUMgPSAoIHVpbnQ4X3QgKSAweDAwMDA7DQorCQkvKiBEaXNhYmxlIElUTUMgb3BlcmF0aW9uLiAqLw0KKwkJSVRNQyA9ICggdWludDhfdCApIDB4MDAwMDsNCiANCi0gICAgICAgICAgICAvKiBDbGVhciBJTklUIGludGVycnVwdC4gKi8NCi0gICAgICAgICAgICBUTUtBSUYgPSAoIHVpbnQ4X3QgKSAwOw0KKwkJLyogQ2xlYXIgSU5JVCBpbnRlcnJ1cHQuICovDQorCQlUTUtBSUYgPSAoIHVpbnQ4X3QgKSAwOw0KIA0KLSAgICAgICAgICAgIC8qIFNldCBpbnRlcnZhbCBhbmQgZW5hYmxlIGludGVycnVwdCBvcGVyYXRpb24uICovDQotICAgICAgICAgICAgSVRNQyA9IHVzQ29tcGFyZU1hdGNoIHwgMHg4MDAwVTsNCisJCS8qIFNldCBpbnRlcnZhbCBhbmQgZW5hYmxlIGludGVycnVwdCBvcGVyYXRpb24uICovDQorCQlJVE1DID0gdXNDb21wYXJlTWF0Y2ggfCAweDgwMDBVOw0KIA0KLSAgICAgICAgICAgIC8qIEVuYWJsZSBJTlRJVCBpbnRlcnJ1cHQuICovDQotICAgICAgICAgICAgVE1LQU1LID0gKCB1aW50OF90ICkgMDsNCi0gICAgICAgIH0NCi0gICAgI2VuZGlmIC8qIGlmZGVmIFRNS0FFTiAqLw0KKwkJLyogRW5hYmxlIElOVElUIGludGVycnVwdC4gKi8NCisJCVRNS0FNSyA9ICggdWludDhfdCApIDA7DQorCX0NCisJI2VuZGlmDQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0lBUi9STDc4L3BvcnRtYWNyby5oIGIvcG9ydGFibGUvSUFSL1JMNzgvcG9ydG1hY3JvLmgKaW5kZXggZDY2N2RhZS4uYzZhYTk5NSAxMDA2NDQKLS0tIGEvcG9ydGFibGUvSUFSL1JMNzgvcG9ydG1hY3JvLmgKKysrIGIvcG9ydGFibGUvSUFSL1JMNzgvcG9ydG1hY3JvLmgKQEAgLTI2LDExICsyNiwxMSBAQAogICovDQogDQogI2lmbmRlZiBQT1JUTUFDUk9fSA0KLSAgICAjZGVmaW5lIFBPUlRNQUNST19IDQorI2RlZmluZSBQT1JUTUFDUk9fSA0KIA0KLSAgICAjaWZkZWYgX19jcGx1c3BsdXMNCi0gICAgICAgIGV4dGVybiAiQyIgew0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICogUG9ydCBzcGVjaWZpYyBkZWZpbml0aW9ucy4NCkBAIC00MiwxMDIgKzQyLDEwMyBAQAogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAqLw0KIA0KLSAgICAjaWYgX19EQVRBX01PREVMX18gPT0gX19EQVRBX01PREVMX0ZBUl9fICYmIF9fQ09ERV9NT0RFTF9fID09IF9fQ09ERV9NT0RFTF9ORUFSX18NCi0gICAgICAgICN3YXJuaW5nIFRoaXMgcG9ydCBoYXMgbm90IGJlZW4gdGVzdGVkIHdpdGggeW91ciBzZWxlY3RlZCBtZW1vcnkgbW9kZWwgY29tYmluYXRpb24uIElmIGEgZmFyIGRhdGEgbW9kZWwgaXMgcmVxdWlyZWQgaXQgaXMgcmVjb21tZW5kZWQgdG8gYWxzbyB1c2UgYSBmYXIgY29kZSBtb2RlbC4NCi0gICAgI2VuZGlmDQorI2lmIF9fREFUQV9NT0RFTF9fID09IF9fREFUQV9NT0RFTF9GQVJfXyAmJiBfX0NPREVfTU9ERUxfXyA9PSBfX0NPREVfTU9ERUxfTkVBUl9fDQorCSN3YXJuaW5nIFRoaXMgcG9ydCBoYXMgbm90IGJlZW4gdGVzdGVkIHdpdGggeW91ciBzZWxlY3RlZCBtZW1vcnkgbW9kZWwgY29tYmluYXRpb24uIElmIGEgZmFyIGRhdGEgbW9kZWwgaXMgcmVxdWlyZWQgaXQgaXMgcmVjb21tZW5kZWQgdG8gYWxzbyB1c2UgYSBmYXIgY29kZSBtb2RlbC4NCisjZW5kaWYNCiANCi0gICAgI2lmIF9fREFUQV9NT0RFTF9fID09IF9fREFUQV9NT0RFTF9ORUFSX18gJiYgX19DT0RFX01PREVMX18gPT0gX19DT0RFX01PREVMX0ZBUl9fDQotICAgICAgICAjd2FybmluZyBUaGlzIHBvcnQgaGFzIG5vdCBiZWVuIHRlc3RlZCB3aXRoIHlvdXIgc2VsZWN0ZWQgbWVtb3J5IG1vZGVsIGNvbWJpbmF0aW9uLiBJZiBhIGZhciBjb2RlIG1vZGVsIGlzIHJlcXVpcmVkIGl0IGlzIHJlY29tbWVuZGVkIHRvIGFsc28gdXNlIGEgZmFyIGRhdGEgbW9kZWwuDQotICAgICNlbmRpZg0KKyNpZiBfX0RBVEFfTU9ERUxfXyA9PSBfX0RBVEFfTU9ERUxfTkVBUl9fICYmIF9fQ09ERV9NT0RFTF9fID09IF9fQ09ERV9NT0RFTF9GQVJfXw0KKwkjd2FybmluZyBUaGlzIHBvcnQgaGFzIG5vdCBiZWVuIHRlc3RlZCB3aXRoIHlvdXIgc2VsZWN0ZWQgbWVtb3J5IG1vZGVsIGNvbWJpbmF0aW9uLiBJZiBhIGZhciBjb2RlIG1vZGVsIGlzIHJlcXVpcmVkIGl0IGlzIHJlY29tbWVuZGVkIHRvIGFsc28gdXNlIGEgZmFyIGRhdGEgbW9kZWwuDQorI2VuZGlmDQogDQogLyogVHlwZSBkZWZpbml0aW9ucy4gKi8NCiANCi0gICAgI2RlZmluZSBwb3J0Q0hBUiAgICAgICAgICBjaGFyDQotICAgICNkZWZpbmUgcG9ydEZMT0FUICAgICAgICAgZmxvYXQNCi0gICAgI2RlZmluZSBwb3J0RE9VQkxFICAgICAgICBkb3VibGUNCi0gICAgI2RlZmluZSBwb3J0TE9ORyAgICAgICAgICBsb25nDQotICAgICNkZWZpbmUgcG9ydFNIT1JUICAgICAgICAgc2hvcnQNCi0gICAgI2RlZmluZSBwb3J0U1RBQ0tfVFlQRSAgICB1aW50MTZfdA0KLSAgICAjZGVmaW5lIHBvcnRCQVNFX1RZUEUgICAgIHNob3J0DQorI2RlZmluZSBwb3J0Q0hBUiAgICAgICAgY2hhcg0KKyNkZWZpbmUgcG9ydEZMT0FUICAgICAgIGZsb2F0DQorI2RlZmluZSBwb3J0RE9VQkxFICAgICAgZG91YmxlDQorI2RlZmluZSBwb3J0TE9ORyAgICAgICAgbG9uZw0KKyNkZWZpbmUgcG9ydFNIT1JUICAgICAgIHNob3J0DQorI2RlZmluZSBwb3J0U1RBQ0tfVFlQRSAgdWludDE2X3QNCisjZGVmaW5lIHBvcnRCQVNFX1RZUEUgICBzaG9ydA0KIA0KLSAgICB0eXBlZGVmIHBvcnRTVEFDS19UWVBFICAgU3RhY2tUeXBlX3Q7DQotICAgIHR5cGVkZWYgc2hvcnQgICAgICAgICAgICBCYXNlVHlwZV90Ow0KLSAgICB0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICAgVUJhc2VUeXBlX3Q7DQordHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSBTdGFja1R5cGVfdDsNCit0eXBlZGVmIHNob3J0IEJhc2VUeXBlX3Q7DQordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBVQmFzZVR5cGVfdDsNCiANCiANCi0gICAgI2lmIF9fREFUQV9NT0RFTF9fID09IF9fREFUQV9NT0RFTF9GQVJfXw0KLSAgICAgICAgI2RlZmluZSBwb3J0UE9JTlRFUl9TSVpFX1RZUEUgICAgdWludDMyX3QNCi0gICAgI2Vsc2UNCi0gICAgICAgICNkZWZpbmUgcG9ydFBPSU5URVJfU0laRV9UWVBFICAgIHVpbnQxNl90DQotICAgICNlbmRpZg0KKyNpZiBfX0RBVEFfTU9ERUxfXyA9PSBfX0RBVEFfTU9ERUxfRkFSX18NCisJI2RlZmluZSBwb3J0UE9JTlRFUl9TSVpFX1RZUEUgdWludDMyX3QNCisjZWxzZQ0KKwkjZGVmaW5lIHBvcnRQT0lOVEVSX1NJWkVfVFlQRSB1aW50MTZfdA0KKyNlbmRpZg0KIA0KIA0KLSAgICAjaWYgKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KLSAgICAgICAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgICBUaWNrVHlwZV90Ow0KLSAgICAgICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICggVGlja1R5cGVfdCApIDB4ZmZmZg0KLSAgICAjZWxzZQ0KLSAgICAgICAgdHlwZWRlZiB1aW50MzJfdCAgICAgICBUaWNrVHlwZV90Ow0KLSAgICAgICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTA0KLSAgICAjZW5kaWYNCisjaWYgKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KKwl0eXBlZGVmIHVuc2lnbmVkIGludCBUaWNrVHlwZV90Ow0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQorI2Vsc2UNCisJdHlwZWRlZiB1aW50MzJfdCBUaWNrVHlwZV90Ow0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQorI2VuZGlmDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogSW50ZXJydXB0IGNvbnRyb2wgbWFjcm9zLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAgICBfX2FzbSggIkRJIiApDQotICAgICNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkgICAgIF9fYXNtKCAiRUkiICkNCisjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSBfX2FzbSAoICJESSIgKQ0KKyNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkJIF9fYXNtICggIkVJIiApDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogQ3JpdGljYWwgc2VjdGlvbiBjb250cm9sIG1hY3Jvcy4gKi8NCi0gICAgI2RlZmluZSBwb3J0Tk9fQ1JJVElDQUxfU0VDVElPTl9ORVNUSU5HICAgICggKCB1aW50MTZfdCApIDAgKQ0KKyNkZWZpbmUgcG9ydE5PX0NSSVRJQ0FMX1NFQ1RJT05fTkVTVElORwkJKCAoIHVpbnQxNl90ICkgMCApDQogDQotICAgICNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGV4dGVybiB2b2xhdGlsZSB1aW50MTZfdCB1c0NyaXRpY2FsTmVzdGluZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAvKiBOb3cgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgdWxDcml0aWNhbE5lc3RpbmcgY2FuIGJlIGFjY2Vzc2VkICovICAgICAgXA0KLSAgICAgICAgLyogZGlyZWN0bHkuICBJbmNyZW1lbnQgdWxDcml0aWNhbE5lc3RpbmcgdG8ga2VlcCBhIGNvdW50IG9mIGhvdyBtYW55ICovIFwNCi0gICAgICAgIC8qIHRpbWVzIHBvcnRFTlRFUl9DUklUSUNBTCgpIGhhcyBiZWVuIGNhbGxlZC4gKi8gICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICB1c0NyaXRpY2FsTmVzdGluZysrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB9DQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKQkJCQkJCQkJCQkJCQlcDQorewkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KK2V4dGVybiB2b2xhdGlsZSB1aW50MTZfdCB1c0NyaXRpY2FsTmVzdGluZzsJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwlwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7CQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogTm93IGludGVycnVwdHMgYXJlIGRpc2FibGVkIHVsQ3JpdGljYWxOZXN0aW5nIGNhbiBiZSBhY2Nlc3NlZCAqLwkJCVwNCisJLyogZGlyZWN0bHkuICBJbmNyZW1lbnQgdWxDcml0aWNhbE5lc3RpbmcgdG8ga2VlcCBhIGNvdW50IG9mIGhvdyBtYW55ICovCVwNCisJLyogdGltZXMgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgaGFzIGJlZW4gY2FsbGVkLiAqLwkJCQkJCQlcDQorCXVzQ3JpdGljYWxOZXN0aW5nKys7CQkJCQkJCQkJCQkJCQlcDQorfQ0KIA0KLSAgICAjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBleHRlcm4gdm9sYXRpbGUgdWludDE2X3QgdXNDcml0aWNhbE5lc3Rpbmc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGlmKCB1c0NyaXRpY2FsTmVzdGluZyA+IHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkcgKSAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIERlY3JlbWVudCB0aGUgbmVzdGluZyBjb3VudCBhcyB3ZSBhcmUgbGVhdmluZyBhIGNyaXRpY2FsIHNlY3Rpb24uICovIFwNCi0gICAgICAgICAgICB1c0NyaXRpY2FsTmVzdGluZy0tOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIElmIHRoZSBuZXN0aW5nIGxldmVsIGhhcyByZWFjaGVkIHplcm8gdGhlbiBpbnRlcnJ1cHRzIHNob3VsZCBiZSAqLyAgIFwNCi0gICAgICAgICAgICAvKiByZS1lbmFibGVkLiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgaWYoIHVzQ3JpdGljYWxOZXN0aW5nID09IHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkcgKSAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgfQ0KKyNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKQkJCQkJCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCitleHRlcm4gdm9sYXRpbGUgdWludDE2X3QgdXNDcml0aWNhbE5lc3Rpbmc7CQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJaWYoIHVzQ3JpdGljYWxOZXN0aW5nID4gcG9ydE5PX0NSSVRJQ0FMX1NFQ1RJT05fTkVTVElORyApCQkJCQlcDQorCXsJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJLyogRGVjcmVtZW50IHRoZSBuZXN0aW5nIGNvdW50IGFzIHdlIGFyZSBsZWF2aW5nIGEgY3JpdGljYWwgc2VjdGlvbi4gKi8JXA0KKwkJdXNDcml0aWNhbE5lc3RpbmctLTsJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJLyogSWYgdGhlIG5lc3RpbmcgbGV2ZWwgaGFzIHJlYWNoZWQgemVybyB0aGVuIGludGVycnVwdHMgc2hvdWxkIGJlICovCVwNCisJCS8qIHJlLWVuYWJsZWQuICovCQkJCQkJCQkJCQkJCQlcDQorCQlpZiggdXNDcml0aWNhbE5lc3RpbmcgPT0gcG9ydE5PX0NSSVRJQ0FMX1NFQ1RJT05fTkVTVElORyApCQkJCVwNCisJCXsJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkJcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7CQkJCQkJCQkJCQlcDQorCQl9CQkJCQkJCQkJCQkJCQkJCQkJXA0KKwl9CQkJCQkJCQkJCQkJCQkJCQkJCVwNCit9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGFzayB1dGlsaXRpZXMuICovDQotICAgICNkZWZpbmUgcG9ydFlJRUxEKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2FzbSggIkJSSyIgKQ0KLSAgICAjZGVmaW5lIHBvcnRZSUVMRF9GUk9NX0lTUiggeEhpZ2hlclByaW9yaXR5VGFza1dva2VuICkgICAgaWYoIHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiApIHZUYXNrU3dpdGNoQ29udGV4dCgpDQotICAgICNkZWZpbmUgcG9ydE5PUCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2FzbSggIk5PUCIgKQ0KKyNkZWZpbmUgcG9ydFlJRUxEKCkJX19hc20oICJCUksiICkNCisjZGVmaW5lIHBvcnRZSUVMRF9GUk9NX0lTUiggeEhpZ2hlclByaW9yaXR5VGFza1dva2VuICkgaWYoIHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiApIHZUYXNrU3dpdGNoQ29udGV4dCgpDQorI2RlZmluZSBwb3J0Tk9QKCkJX19hc20oICJOT1AiICkNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBIYXJkd3dhcmUgc3BlY2lmaWNzLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVCAgICAyDQotICAgICNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSCAgICAgICggLTEgKQ0KLSAgICAjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUyAgICAoICggVGlja1R5cGVfdCApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UCTINCisjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEgJKCAtMSApDQorI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMJKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBUYXNrIGZ1bmN0aW9uIG1hY3JvcyBhcyBkZXNjcmliZWQgb24gdGhlIEZyZWVSVE9TLm9yZyBXRUIgc2l0ZS4gKi8NCi0gICAgI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQotICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgICAgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCiANCi0gICAgI2lmZGVmIF9fY3BsdXNwbHVzDQotICAgICAgICB9DQotICAgICNlbmRpZg0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCiANCiAjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8NCisNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9JQVIvUlgxMDAvcG9ydC5jIGIvcG9ydGFibGUvSUFSL1JYMTAwL3BvcnQuYwppbmRleCA2NWFjYmY0Li4wODNlNzQwIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9JQVIvUlgxMDAvcG9ydC5jCisrKyBiL3BvcnRhYmxlL0lBUi9SWDEwMC9wb3J0LmMKQEAgLTI2LDggKzI2LDggQEAKICAqLw0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0qIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBTSDJBIHBvcnQuDQotKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyAqIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBTSDJBIHBvcnQuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBTdGFuZGFyZCBDIGluY2x1ZGVzLiAqLw0KICNpbmNsdWRlICJsaW1pdHMuaCINCkBAIC00NSwyOSArNDUsMjkgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFRhc2tzIHNob3VsZCBzdGFydCB3aXRoIGludGVycnVwdHMgZW5hYmxlZCBhbmQgaW4gU3VwZXJ2aXNvciBtb2RlLCB0aGVyZWZvcmUNCi0gKiBQU1cgaXMgc2V0IHdpdGggVSBhbmQgSSBzZXQsIGFuZCBQTSBhbmQgSVBMIGNsZWFyLiAqLw0KLSNkZWZpbmUgcG9ydElOSVRJQUxfUFNXICAgICggKCBTdGFja1R5cGVfdCApIDB4MDAwMzAwMDAgKQ0KK1BTVyBpcyBzZXQgd2l0aCBVIGFuZCBJIHNldCwgYW5kIFBNIGFuZCBJUEwgY2xlYXIuICovDQorI2RlZmluZSBwb3J0SU5JVElBTF9QU1cgICAgICggKCBTdGFja1R5cGVfdCApIDB4MDAwMzAwMDAgKQ0KIA0KIC8qIFRoZSBwZXJpcGhlcmFsIGNsb2NrIGlzIGRpdmlkZWQgYnkgdGhpcyB2YWx1ZSBiZWZvcmUgYmVpbmcgc3VwcGx5aW5nIHRoZQ0KLSAqIENNVC4gKi8NCitDTVQuICovDQogI2lmICggY29uZmlnVVNFX1RJQ0tMRVNTX0lETEUgPT0gMCApDQotICAgIC8qIElmIHRpY2tsZXNzIGlkbGUgaXMgbm90IHVzZWQgdGhlbiB0aGUgZGl2aXNvciBjYW4gYmUgZml4ZWQuICovDQotICAgICNkZWZpbmUgcG9ydENMT0NLX0RJVklTT1IgICAgOFVMDQorCS8qIElmIHRpY2tsZXNzIGlkbGUgaXMgbm90IHVzZWQgdGhlbiB0aGUgZGl2aXNvciBjYW4gYmUgZml4ZWQuICovDQorCSNkZWZpbmUgcG9ydENMT0NLX0RJVklTT1IJOFVMDQogI2VsaWYgKCBjb25maWdQRVJJUEhFUkFMX0NMT0NLX0haID49IDEyMDAwMDAwICkNCi0gICAgI2RlZmluZSBwb3J0Q0xPQ0tfRElWSVNPUiAgICA1MTJVTA0KKwkjZGVmaW5lIHBvcnRDTE9DS19ESVZJU09SCTUxMlVMDQogI2VsaWYgKCBjb25maWdQRVJJUEhFUkFMX0NMT0NLX0haID49IDYwMDAwMDAgKQ0KLSAgICAjZGVmaW5lIHBvcnRDTE9DS19ESVZJU09SICAgIDEyOFVMDQorCSNkZWZpbmUgcG9ydENMT0NLX0RJVklTT1IJMTI4VUwNCiAjZWxpZiAoIGNvbmZpZ1BFUklQSEVSQUxfQ0xPQ0tfSFogPj0gMTAwMDAwMCApDQotICAgICNkZWZpbmUgcG9ydENMT0NLX0RJVklTT1IgICAgMzJVTA0KKwkjZGVmaW5lIHBvcnRDTE9DS19ESVZJU09SCTMyVUwNCiAjZWxzZQ0KLSAgICAjZGVmaW5lIHBvcnRDTE9DS19ESVZJU09SICAgIDhVTA0KKwkjZGVmaW5lIHBvcnRDTE9DS19ESVZJU09SCThVTA0KICNlbmRpZg0KIA0KIA0KIC8qIEtleXMgcmVxdWlyZWQgdG8gbG9jayBhbmQgdW5sb2NrIGFjY2VzcyB0byBjZXJ0YWluIHN5c3RlbSByZWdpc3RlcnMNCi0gKiByZXNwZWN0aXZlbHkuICovDQotI2RlZmluZSBwb3J0VU5MT0NLX0tFWSAgICAweEE1MEINCi0jZGVmaW5lIHBvcnRMT0NLX0tFWSAgICAgIDB4QTUwMA0KK3Jlc3BlY3RpdmVseS4gKi8NCisjZGVmaW5lIHBvcnRVTkxPQ0tfS0VZCQkweEE1MEINCisjZGVmaW5lIHBvcnRMT0NLX0tFWQkJMHhBNTAwDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQpAQCAtOTEsMTAgKzkxLDkgQEAKICAqLw0KIHN0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKTsNCiAjaWZuZGVmIGNvbmZpZ1NFVFVQX1RJQ0tfSU5URVJSVVBUDQotDQotLyogVGhlIHVzZXIgaGFzIG5vdCBwcm92aWRlZCB0aGVpciBvd24gdGljayBpbnRlcnJ1cHQgY29uZmlndXJhdGlvbiBzbyB1c2UNCi0gKiB0aGUgZGVmaW5pdGlvbiBpbiB0aGlzIGZpbGUgKHdoaWNoIHVzZXMgdGhlIGludGVydmFsIHRpbWVyKS4gKi8NCi0gICAgI2RlZmluZSBjb25maWdTRVRVUF9USUNLX0lOVEVSUlVQVCgpICAgIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoKQ0KKwkvKiBUaGUgdXNlciBoYXMgbm90IHByb3ZpZGVkIHRoZWlyIG93biB0aWNrIGludGVycnVwdCBjb25maWd1cmF0aW9uIHNvIHVzZQ0KKyAgICB0aGUgZGVmaW5pdGlvbiBpbiB0aGlzIGZpbGUgKHdoaWNoIHVzZXMgdGhlIGludGVydmFsIHRpbWVyKS4gKi8NCisJI2RlZmluZSBjb25maWdTRVRVUF9USUNLX0lOVEVSUlVQVCgpIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoKQ0KICNlbmRpZiAvKiBjb25maWdTRVRVUF9USUNLX0lOVEVSUlVQVCAqLw0KIA0KIC8qDQpAQCAtMTAzLDEyICsxMDIsMTIgQEAKICAqIGluc3RydWN0aW9uLg0KICAqLw0KICNpZiBjb25maWdVU0VfVElDS0xFU1NfSURMRSA9PSAxDQotICAgIHN0YXRpYyB2b2lkIHBydlNsZWVwKCBUaWNrVHlwZV90IHhFeHBlY3RlZElkbGVUaW1lICk7DQorCXN0YXRpYyB2b2lkIHBydlNsZWVwKCBUaWNrVHlwZV90IHhFeHBlY3RlZElkbGVUaW1lICk7DQogI2VuZGlmIC8qIGNvbmZpZ1VTRV9USUNLTEVTU19JRExFICovDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQotZXh0ZXJuIHZvaWQgKiBweEN1cnJlbnRUQ0I7DQorZXh0ZXJuIHZvaWQgKnB4Q3VycmVudFRDQjsNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCkBAIC0xMTcsNDA2ICsxMTYsNDAxIEBACiANCiAjaWYgY29uZmlnVVNFX1RJQ0tMRVNTX0lETEUgPT0gMQ0KIA0KLS8qIEhvbGRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB0aWNrcyB0aGF0IGNhbiBiZSBzdXBwcmVzc2VkIC0gd2hpY2ggaXMNCi0gKiBiYXNpY2FsbHkgaG93IGZhciBpbnRvIHRoZSBmdXR1cmUgYW4gaW50ZXJydXB0IGNhbiBiZSBnZW5lcmF0ZWQuIFNldA0KLSAqIGR1cmluZyBpbml0aWFsaXNhdGlvbi4gIFRoaXMgaXMgdGhlIG1heGltdW0gcG9zc2libGUgdmFsdWUgdGhhdCB0aGUNCi0gKiBjb21wYXJlIG1hdGNoIHJlZ2lzdGVyIGNhbiBob2xkIGRpdmlkZWQgYnkgdWxNYXRjaFZhbHVlRm9yT25lVGljay4gKi8NCi0gICAgc3RhdGljIGNvbnN0IFRpY2tUeXBlX3QgeE1heGltdW1Qb3NzaWJsZVN1cHByZXNzZWRUaWNrcyA9IFVTSFJUX01BWCAvICggKCBjb25maWdQRVJJUEhFUkFMX0NMT0NLX0haIC8gcG9ydENMT0NLX0RJVklTT1IgKSAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApOw0KKwkvKiBIb2xkcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgdGlja3MgdGhhdCBjYW4gYmUgc3VwcHJlc3NlZCAtIHdoaWNoIGlzDQorCWJhc2ljYWxseSBob3cgZmFyIGludG8gdGhlIGZ1dHVyZSBhbiBpbnRlcnJ1cHQgY2FuIGJlIGdlbmVyYXRlZC4gU2V0DQorCWR1cmluZyBpbml0aWFsaXNhdGlvbi4gIFRoaXMgaXMgdGhlIG1heGltdW0gcG9zc2libGUgdmFsdWUgdGhhdCB0aGUNCisJY29tcGFyZSBtYXRjaCByZWdpc3RlciBjYW4gaG9sZCBkaXZpZGVkIGJ5IHVsTWF0Y2hWYWx1ZUZvck9uZVRpY2suICovDQorCXN0YXRpYyBjb25zdCBUaWNrVHlwZV90IHhNYXhpbXVtUG9zc2libGVTdXBwcmVzc2VkVGlja3MgPSBVU0hSVF9NQVggLyAoICggY29uZmlnUEVSSVBIRVJBTF9DTE9DS19IWiAvIHBvcnRDTE9DS19ESVZJU09SICkgLyBjb25maWdUSUNLX1JBVEVfSFogKTsNCiANCi0vKiBGbGFnIHNldCBmcm9tIHRoZSB0aWNrIGludGVycnVwdCB0byBhbGxvdyB0aGUgc2xlZXAgcHJvY2Vzc2luZyB0byBrbm93IGlmDQotICogc2xlZXAgbW9kZSB3YXMgZXhpdGVkIGJlY2F1c2Ugb2YgYSB0aWNrIGludGVycnVwdCwgb3IgYW4gaW50ZXJydXB0DQotICogZ2VuZXJhdGVkIGJ5IHNvbWV0aGluZyBlbHNlLiAqLw0KLSAgICBzdGF0aWMgdm9sYXRpbGUgdWludDMyX3QgdWxUaWNrRmxhZyA9IHBkRkFMU0U7DQorCS8qIEZsYWcgc2V0IGZyb20gdGhlIHRpY2sgaW50ZXJydXB0IHRvIGFsbG93IHRoZSBzbGVlcCBwcm9jZXNzaW5nIHRvIGtub3cgaWYNCisJc2xlZXAgbW9kZSB3YXMgZXhpdGVkIGJlY2F1c2Ugb2YgYSB0aWNrIGludGVycnVwdCwgb3IgYW4gaW50ZXJydXB0DQorCWdlbmVyYXRlZCBieSBzb21ldGhpbmcgZWxzZS4gKi8NCisJc3RhdGljIHZvbGF0aWxlIHVpbnQzMl90IHVsVGlja0ZsYWcgPSBwZEZBTFNFOw0KIA0KLS8qIFRoZSBDTVQgY291bnRlciBpcyBzdG9wcGVkIHRlbXBvcmFyaWx5IGVhY2ggdGltZSBpdCBpcyByZS1wcm9ncmFtbWVkLg0KLSAqIFRoZSBmb2xsb3dpbmcgY29uc3RhbnQgb2Zmc2V0cyB0aGUgQ01UIGNvdW50ZXIgbWF0Y2ggdmFsdWUgYnkgdGhlIG51bWJlciBvZg0KLSAqIENNVAljb3VudHMgdGhhdCB3b3VsZCB0eXBpY2FsbHkgYmUgbWlzc2VkIHdoaWxlIHRoZSBjb3VudGVyIHdhcyBzdG9wcGVkIHRvDQotICogY29tcGVuc2F0ZSBmb3IgdGhlIGxvc3QgdGltZS4gIFRoZSBsYXJnZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGRpdmlkZWQgQ01UDQotICogY2xvY2sgYW5kIHRoZSBDUFUgY2xvY2sgbWVhbnMgaXQgaXMgbGlrZWx5IHVsU3RvcHBlZFRpbWVyQ29tcGVuc2F0aW9uIHdpbGwNCi0gKiBlcXVhbCB6ZXJvIC0gYW5kIGJlIG9wdGltaXNlZCBhd2F5LiAqLw0KLSAgICBzdGF0aWMgY29uc3QgdWludDMyX3QgdWxTdG9wcGVkVGltZXJDb21wZW5zYXRpb24gPSAxMDBVTCAvICggY29uZmlnQ1BVX0NMT0NLX0haIC8gKCBjb25maWdQRVJJUEhFUkFMX0NMT0NLX0haIC8gcG9ydENMT0NLX0RJVklTT1IgKSApOw0KKwkvKiBUaGUgQ01UIGNvdW50ZXIgaXMgc3RvcHBlZCB0ZW1wb3JhcmlseSBlYWNoIHRpbWUgaXQgaXMgcmUtcHJvZ3JhbW1lZC4NCisJVGhlIGZvbGxvd2luZyBjb25zdGFudCBvZmZzZXRzIHRoZSBDTVQgY291bnRlciBtYXRjaCB2YWx1ZSBieSB0aGUgbnVtYmVyIG9mDQorCUNNVAljb3VudHMgdGhhdCB3b3VsZCB0eXBpY2FsbHkgYmUgbWlzc2VkIHdoaWxlIHRoZSBjb3VudGVyIHdhcyBzdG9wcGVkIHRvDQorCWNvbXBlbnNhdGUgZm9yIHRoZSBsb3N0IHRpbWUuICBUaGUgbGFyZ2UgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBkaXZpZGVkIENNVA0KKwljbG9jayBhbmQgdGhlIENQVSBjbG9jayBtZWFucyBpdCBpcyBsaWtlbHkgdWxTdG9wcGVkVGltZXJDb21wZW5zYXRpb24gd2lsbA0KKwllcXVhbCB6ZXJvIC0gYW5kIGJlIG9wdGltaXNlZCBhd2F5LiAqLw0KKwlzdGF0aWMgY29uc3QgdWludDMyX3QgdWxTdG9wcGVkVGltZXJDb21wZW5zYXRpb24gPSAxMDBVTCAvICggY29uZmlnQ1BVX0NMT0NLX0haIC8gKCBjb25maWdQRVJJUEhFUkFMX0NMT0NLX0haIC8gcG9ydENMT0NLX0RJVklTT1IgKSApOw0KIA0KLSNlbmRpZiAvKiBpZiBjb25maWdVU0VfVElDS0xFU1NfSURMRSA9PSAxICovDQorI2VuZGlmDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyoNCiAgKiBTZWUgaGVhZGVyIGZpbGUgZm9yIGRlc2NyaXB0aW9uLg0KICAqLw0KLVN0YWNrVHlwZV90ICogcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqIHB4VG9wT2ZTdGFjaywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFza0Z1bmN0aW9uX3QgcHhDb2RlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICogcHZQYXJhbWV0ZXJzICkNCitTdGFja1R5cGVfdCAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqcHhUb3BPZlN0YWNrLCBUYXNrRnVuY3Rpb25fdCBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycyApDQogew0KLSAgICAvKiBPZmZzZXQgdG8gZW5kIHVwIG9uIDggYnl0ZSBib3VuZGFyeS4gKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIE9mZnNldCB0byBlbmQgdXAgb24gOCBieXRlIGJvdW5kYXJ5LiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgLyogUjAgaXMgbm90IGluY2x1ZGVkIGFzIGl0IGlzIHRoZSBzdGFjayBwb2ludGVyLiAqLw0KKwkvKiBSMCBpcyBub3QgaW5jbHVkZWQgYXMgaXQgaXMgdGhlIHN0YWNrIHBvaW50ZXIuICovDQorCSpweFRvcE9mU3RhY2sgPSAweDAwOw0KKwlweFRvcE9mU3RhY2stLTsNCiAgICAgKnB4VG9wT2ZTdGFjayA9IDB4MDA7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMHgwMDsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSBwb3J0SU5JVElBTF9QU1c7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB4Q29kZTsNCisJcHhUb3BPZlN0YWNrLS07DQorIAkqcHhUb3BPZlN0YWNrID0gcG9ydElOSVRJQUxfUFNXOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBweENvZGU7DQogDQotICAgIC8qIFdoZW4gZGVidWdnaW5nIGl0IGNhbiBiZSB1c2VmdWwgaWYgZXZlcnkgcmVnaXN0ZXIgaXMgc2V0IHRvIGEga25vd24NCi0gICAgICogdmFsdWUuICBPdGhlcndpc2UgY29kZSBzcGFjZSBjYW4gYmUgc2F2ZWQgYnkganVzdCBzZXR0aW5nIHRoZSByZWdpc3RlcnMNCi0gICAgICogdGhhdCBuZWVkIHRvIGJlIHNldC4gKi8NCi0gICAgI2lmZGVmIFVTRV9GVUxMX1JFR0lTVEVSX0lOSVRJQUxJU0FUSU9ODQotICAgICAgICB7DQotICAgICAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICAgICAgICAgKnB4VG9wT2ZTdGFjayA9IDB4MTIzNDU2Nzg7IC8qIHIxNS4gKi8NCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHhhYWFhYmJiYjsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHhkZGRkZGRkZDsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHhjY2NjY2NjYzsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHhiYmJiYmJiYjsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHhhYWFhYWFhYTsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHg5OTk5OTk5OTsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHg4ODg4ODg4ODsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHg3Nzc3Nzc3NzsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHg2NjY2NjY2NjsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHg1NTU1NTU1NTsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHg0NDQ0NDQ0NDsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHgzMzMzMzMzMzsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHgyMjIyMjIyMjsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgIH0NCi0gICAgI2Vsc2UgLyogaWZkZWYgVVNFX0ZVTExfUkVHSVNURVJfSU5JVElBTElTQVRJT04gKi8NCi0gICAgICAgIHsNCi0gICAgICAgICAgICAvKiBMZWF2ZSBzcGFjZSBmb3IgdGhlIHJlZ2lzdGVycyB0aGF0IHdpbGwgZ2V0IHBvcHBlZCBmcm9tIHRoZSBzdGFjaw0KLSAgICAgICAgICAgICAqIHdoZW4gdGhlIHRhc2sgZmlyc3Qgc3RhcnRzIGV4ZWN1dGluZy4gKi8NCi0gICAgICAgICAgICBweFRvcE9mU3RhY2sgLT0gMTU7DQotICAgICAgICB9DQotICAgICNlbmRpZiAvKiBpZmRlZiBVU0VfRlVMTF9SRUdJU1RFUl9JTklUSUFMSVNBVElPTiAqLw0KKwkvKiBXaGVuIGRlYnVnZ2luZyBpdCBjYW4gYmUgdXNlZnVsIGlmIGV2ZXJ5IHJlZ2lzdGVyIGlzIHNldCB0byBhIGtub3duDQorCXZhbHVlLiAgT3RoZXJ3aXNlIGNvZGUgc3BhY2UgY2FuIGJlIHNhdmVkIGJ5IGp1c3Qgc2V0dGluZyB0aGUgcmVnaXN0ZXJzDQorCXRoYXQgbmVlZCB0byBiZSBzZXQuICovDQorCSNpZmRlZiBVU0VfRlVMTF9SRUdJU1RFUl9JTklUSUFMSVNBVElPTg0KKwl7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweDEyMzQ1Njc4OwkvKiByMTUuICovDQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweGFhYWFiYmJiOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHhkZGRkZGRkZDsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4Y2NjY2NjY2M7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweGJiYmJiYmJiOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHhhYWFhYWFhYTsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4OTk5OTk5OTk7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweDg4ODg4ODg4Ow0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHg3Nzc3Nzc3NzsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4NjY2NjY2NjY7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweDU1NTU1NTU1Ow0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHg0NDQ0NDQ0NDsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4MzMzMzMzMzM7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweDIyMjIyMjIyOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCX0NCisJI2Vsc2UNCisJew0KKwkJLyogTGVhdmUgc3BhY2UgZm9yIHRoZSByZWdpc3RlcnMgdGhhdCB3aWxsIGdldCBwb3BwZWQgZnJvbSB0aGUgc3RhY2sNCisJCXdoZW4gdGhlIHRhc2sgZmlyc3Qgc3RhcnRzIGV4ZWN1dGluZy4gKi8NCisJCXB4VG9wT2ZTdGFjayAtPSAxNTsNCisJfQ0KKwkjZW5kaWYNCiANCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwdlBhcmFtZXRlcnM7IC8qIFIxICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMHgxMjM0NTY3ODsgICAgICAgICAgICAgICAgICAgLyogQWNjdW11bGF0b3IuICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMHg4NzY1NDMyMTsgICAgICAgICAgICAgICAgICAgLyogQWNjdW11bGF0b3IuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHZQYXJhbWV0ZXJzOyAvKiBSMSAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MTIzNDU2Nzg7IC8qIEFjY3VtdWxhdG9yLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4ODc2NTQzMjE7IC8qIEFjY3VtdWxhdG9yLiAqLw0KIA0KLSAgICByZXR1cm4gcHhUb3BPZlN0YWNrOw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBCYXNlVHlwZV90IHhQb3J0U3RhcnRTY2hlZHVsZXIoIHZvaWQgKQ0KIHsNCi0gICAgLyogVXNlIHB4Q3VycmVudFRDQiBqdXN0IHNvIGl0IGRvZXMgbm90IGdldCBvcHRpbWlzZWQgYXdheS4gKi8NCi0gICAgaWYoIHB4Q3VycmVudFRDQiAhPSBOVUxMICkNCi0gICAgew0KLSAgICAgICAgLyogQ2FsbCBhbiBhcHBsaWNhdGlvbiBmdW5jdGlvbiB0byBzZXQgdXAgdGhlIHRpbWVyIHRoYXQgd2lsbCBnZW5lcmF0ZQ0KLSAgICAgICAgICogdGhlIHRpY2sgaW50ZXJydXB0LiAgVGhpcyB3YXkgdGhlIGFwcGxpY2F0aW9uIGNhbiBkZWNpZGUgd2hpY2gNCi0gICAgICAgICAqIHBlcmlwaGVyYWwgdG8gdXNlLiAgSWYgdGlja2xlc3MgbW9kZSBpcyB1c2VkIHRoZW4gdGhlIGRlZmF1bHQNCi0gICAgICAgICAqIGltcGxlbWVudGF0aW9uIGRlZmluZWQgaW4gdGhpcyBmaWxlICh3aGljaCB1c2VzIENNVDApIHNob3VsZCBub3QgYmUNCi0gICAgICAgICAqIG92ZXJyaWRkZW4uICovDQotICAgICAgICBjb25maWdTRVRVUF9USUNLX0lOVEVSUlVQVCgpOw0KKwkvKiBVc2UgcHhDdXJyZW50VENCIGp1c3Qgc28gaXQgZG9lcyBub3QgZ2V0IG9wdGltaXNlZCBhd2F5LiAqLw0KKwlpZiggcHhDdXJyZW50VENCICE9IE5VTEwgKQ0KKwl7DQorCQkvKiBDYWxsIGFuIGFwcGxpY2F0aW9uIGZ1bmN0aW9uIHRvIHNldCB1cCB0aGUgdGltZXIgdGhhdCB3aWxsIGdlbmVyYXRlDQorCQl0aGUgdGljayBpbnRlcnJ1cHQuICBUaGlzIHdheSB0aGUgYXBwbGljYXRpb24gY2FuIGRlY2lkZSB3aGljaA0KKwkJcGVyaXBoZXJhbCB0byB1c2UuICBJZiB0aWNrbGVzcyBtb2RlIGlzIHVzZWQgdGhlbiB0aGUgZGVmYXVsdA0KKwkJaW1wbGVtZW50YXRpb24gZGVmaW5lZCBpbiB0aGlzIGZpbGUgKHdoaWNoIHVzZXMgQ01UMCkgc2hvdWxkIG5vdCBiZQ0KKwkJb3ZlcnJpZGRlbi4gKi8NCisJCWNvbmZpZ1NFVFVQX1RJQ0tfSU5URVJSVVBUKCk7DQogDQotICAgICAgICAvKiBFbmFibGUgdGhlIHNvZnR3YXJlIGludGVycnVwdC4gKi8NCi0gICAgICAgIF9JRU4oIF9JQ1VfU1dJTlQgKSA9IDE7DQorCQkvKiBFbmFibGUgdGhlIHNvZnR3YXJlIGludGVycnVwdC4gKi8NCisJCV9JRU4oIF9JQ1VfU1dJTlQgKSA9IDE7DQogDQotICAgICAgICAvKiBFbnN1cmUgdGhlIHNvZnR3YXJlIGludGVycnVwdCBpcyBjbGVhci4gKi8NCi0gICAgICAgIF9JUiggX0lDVV9TV0lOVCApID0gMDsNCisJCS8qIEVuc3VyZSB0aGUgc29mdHdhcmUgaW50ZXJydXB0IGlzIGNsZWFyLiAqLw0KKwkJX0lSKCBfSUNVX1NXSU5UICkgPSAwOw0KIA0KLSAgICAgICAgLyogRW5zdXJlIHRoZSBzb2Z0d2FyZSBpbnRlcnJ1cHQgaXMgc2V0IHRvIHRoZSBrZXJuZWwgcHJpb3JpdHkuICovDQotICAgICAgICBfSVBSKCBfSUNVX1NXSU5UICkgPSBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZOw0KKwkJLyogRW5zdXJlIHRoZSBzb2Z0d2FyZSBpbnRlcnJ1cHQgaXMgc2V0IHRvIHRoZSBrZXJuZWwgcHJpb3JpdHkuICovDQorCQlfSVBSKCBfSUNVX1NXSU5UICkgPSBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZOw0KIA0KLSAgICAgICAgLyogU3RhcnQgdGhlIGZpcnN0IHRhc2suICovDQotICAgICAgICBwcnZTdGFydEZpcnN0VGFzaygpOw0KLSAgICB9DQorCQkvKiBTdGFydCB0aGUgZmlyc3QgdGFzay4gKi8NCisJCXBydlN0YXJ0Rmlyc3RUYXNrKCk7DQorCX0NCiANCi0gICAgLyogRXhlY3V0aW9uIHNob3VsZCBub3QgcmVhY2ggaGVyZSBhcyB0aGUgdGFza3MgYXJlIG5vdyBydW5uaW5nIQ0KLSAgICAgKiBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCkgaXMgY2FsbGVkIGhlcmUgdG8gcHJldmVudCB0aGUgY29tcGlsZXIgb3V0cHV0dGluZw0KLSAgICAgKiBhIHdhcm5pbmcgYWJvdXQgYSBzdGF0aWNhbGx5IGRlY2xhcmVkIGZ1bmN0aW9uIG5vdCBiZWluZyByZWZlcmVuY2VkIGluIHRoZQ0KLSAgICAgKiBjYXNlIHRoYXQgdGhlIGFwcGxpY2F0aW9uIHdyaXRlciBoYXMgcHJvdmlkZWQgdGhlaXIgb3duIHRpY2sgaW50ZXJydXB0DQotICAgICAqIGNvbmZpZ3VyYXRpb24gcm91dGluZSAoYW5kIGRlZmluZWQgY29uZmlnU0VUVVBfVElDS19JTlRFUlJVUFQoKSBzdWNoIHRoYXQNCi0gICAgICogdGhlaXIgb3duIHJvdXRpbmUgd2lsbCBiZSBjYWxsZWQgaW4gcGxhY2Ugb2YgcHJ2U2V0dXBUaW1lckludGVycnVwdCgpKS4gKi8NCi0gICAgcHJ2U2V0dXBUaW1lckludGVycnVwdCgpOw0KKwkvKiBFeGVjdXRpb24gc2hvdWxkIG5vdCByZWFjaCBoZXJlIGFzIHRoZSB0YXNrcyBhcmUgbm93IHJ1bm5pbmchDQorCXBydlNldHVwVGltZXJJbnRlcnJ1cHQoKSBpcyBjYWxsZWQgaGVyZSB0byBwcmV2ZW50IHRoZSBjb21waWxlciBvdXRwdXR0aW5nDQorCWEgd2FybmluZyBhYm91dCBhIHN0YXRpY2FsbHkgZGVjbGFyZWQgZnVuY3Rpb24gbm90IGJlaW5nIHJlZmVyZW5jZWQgaW4gdGhlDQorCWNhc2UgdGhhdCB0aGUgYXBwbGljYXRpb24gd3JpdGVyIGhhcyBwcm92aWRlZCB0aGVpciBvd24gdGljayBpbnRlcnJ1cHQNCisJY29uZmlndXJhdGlvbiByb3V0aW5lIChhbmQgZGVmaW5lZCBjb25maWdTRVRVUF9USUNLX0lOVEVSUlVQVCgpIHN1Y2ggdGhhdA0KKwl0aGVpciBvd24gcm91dGluZSB3aWxsIGJlIGNhbGxlZCBpbiBwbGFjZSBvZiBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCkpLiAqLw0KKwlwcnZTZXR1cFRpbWVySW50ZXJydXB0KCk7DQogDQotICAgIC8qIFNob3VsZCBub3QgZ2V0IGhlcmUuICovDQotICAgIHJldHVybiBwZEZBSUw7DQorCS8qIFNob3VsZCBub3QgZ2V0IGhlcmUuICovDQorCXJldHVybiBwZEZBSUw7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KICNwcmFnbWEgdmVjdG9yID0gY29uZmlnVElDS19WRUNUT1INCiBfX2ludGVycnVwdCBzdGF0aWMgdm9pZCBwcnZUaWNrSVNSKCB2b2lkICkNCiB7DQotICAgIC8qIFJlLWVuYWJsZSBpbnRlcnJ1cHRzLiAqLw0KLSAgICBfX2VuYWJsZV9pbnRlcnJ1cHQoKTsNCisJLyogUmUtZW5hYmxlIGludGVycnVwdHMuICovDQorCV9fZW5hYmxlX2ludGVycnVwdCgpOw0KIA0KLSAgICAvKiBJbmNyZW1lbnQgdGhlIHRpY2ssIGFuZCBwZXJmb3JtIGFueSBwcm9jZXNzaW5nIHRoZSBuZXcgdGljayB2YWx1ZQ0KLSAgICAgKiBuZWNlc3NpdGF0ZXMuICovDQotICAgIF9fc2V0X2ludGVycnVwdF9sZXZlbCggY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICk7DQotICAgIHsNCi0gICAgICAgIGlmKCB4VGFza0luY3JlbWVudFRpY2soKSAhPSBwZEZBTFNFICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICB0YXNrWUlFTEQoKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBfX3NldF9pbnRlcnJ1cHRfbGV2ZWwoIGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkgKTsNCisJLyogSW5jcmVtZW50IHRoZSB0aWNrLCBhbmQgcGVyZm9ybSBhbnkgcHJvY2Vzc2luZyB0aGUgbmV3IHRpY2sgdmFsdWUNCisJbmVjZXNzaXRhdGVzLiAqLw0KKwlfX3NldF9pbnRlcnJ1cHRfbGV2ZWwoIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSApOw0KKwl7DQorCQlpZiggeFRhc2tJbmNyZW1lbnRUaWNrKCkgIT0gcGRGQUxTRSApDQorCQl7DQorCQkJdGFza1lJRUxEKCk7DQorCQl9DQorCX0NCisJX19zZXRfaW50ZXJydXB0X2xldmVsKCBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZICk7DQogDQotICAgICNpZiBjb25maWdVU0VfVElDS0xFU1NfSURMRSA9PSAxDQotICAgICAgICB7DQotICAgICAgICAgICAgLyogVGhlIENQVSB3b2tlIGJlY2F1c2Ugb2YgYSB0aWNrLiAqLw0KLSAgICAgICAgICAgIHVsVGlja0ZsYWcgPSBwZFRSVUU7DQorCSNpZiBjb25maWdVU0VfVElDS0xFU1NfSURMRSA9PSAxDQorCXsNCisJCS8qIFRoZSBDUFUgd29rZSBiZWNhdXNlIG9mIGEgdGljay4gKi8NCisJCXVsVGlja0ZsYWcgPSBwZFRSVUU7DQogDQotICAgICAgICAgICAgLyogSWYgdGhpcyBpcyB0aGUgZmlyc3QgdGljayBzaW5jZSBleGl0aW5nIHRpY2tsZXNzIG1vZGUgdGhlbiB0aGUgQ01UDQotICAgICAgICAgICAgICogY29tcGFyZSBtYXRjaCB2YWx1ZSBuZWVkcyByZXNldHRpbmcuICovDQotICAgICAgICAgICAgQ01UMC5DTUNPUiA9ICggdWludDE2X3QgKSB1bE1hdGNoVmFsdWVGb3JPbmVUaWNrOw0KLSAgICAgICAgfQ0KLSAgICAjZW5kaWYNCisJCS8qIElmIHRoaXMgaXMgdGhlIGZpcnN0IHRpY2sgc2luY2UgZXhpdGluZyB0aWNrbGVzcyBtb2RlIHRoZW4gdGhlIENNVA0KKwkJY29tcGFyZSBtYXRjaCB2YWx1ZSBuZWVkcyByZXNldHRpbmcuICovDQorCQlDTVQwLkNNQ09SID0gKCB1aW50MTZfdCApIHVsTWF0Y2hWYWx1ZUZvck9uZVRpY2s7DQorCX0NCisJI2VuZGlmDQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQ0KIHsNCi0gICAgLyogTm90IGltcGxlbWVudGVkIGluIHBvcnRzIHdoZXJlIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmV0dXJuIHRvLg0KLSAgICAgKiBBcnRpZmljaWFsbHkgZm9yY2UgYW4gYXNzZXJ0LiAqLw0KLSAgICBjb25maWdBU1NFUlQoIHB4Q3VycmVudFRDQiA9PSBOVUxMICk7DQorCS8qIE5vdCBpbXBsZW1lbnRlZCBpbiBwb3J0cyB3aGVyZSB0aGVyZSBpcyBub3RoaW5nIHRvIHJldHVybiB0by4NCisJQXJ0aWZpY2lhbGx5IGZvcmNlIGFuIGFzc2VydC4gKi8NCisJY29uZmlnQVNTRVJUKCBweEN1cnJlbnRUQ0IgPT0gTlVMTCApOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICkNCiB7DQotICAgIC8qIFVubG9jay4gKi8NCi0gICAgU1lTVEVNLlBSQ1IuV09SRCA9IHBvcnRVTkxPQ0tfS0VZOw0KKwkvKiBVbmxvY2suICovDQorCVNZU1RFTS5QUkNSLldPUkQgPSBwb3J0VU5MT0NLX0tFWTsNCiANCi0gICAgLyogRW5hYmxlIENNVDAuICovDQotICAgIE1TVFAoIENNVDAgKSA9IDA7DQorCS8qIEVuYWJsZSBDTVQwLiAqLw0KKwlNU1RQKCBDTVQwICkgPSAwOw0KIA0KLSAgICAvKiBMb2NrIGFnYWluLiAqLw0KLSAgICBTWVNURU0uUFJDUi5XT1JEID0gcG9ydExPQ0tfS0VZOw0KKwkvKiBMb2NrIGFnYWluLiAqLw0KKwlTWVNURU0uUFJDUi5XT1JEID0gcG9ydExPQ0tfS0VZOw0KIA0KLSAgICAvKiBJbnRlcnJ1cHQgb24gY29tcGFyZSBtYXRjaC4gKi8NCi0gICAgQ01UMC5DTUNSLkJJVC5DTUlFID0gMTsNCisJLyogSW50ZXJydXB0IG9uIGNvbXBhcmUgbWF0Y2guICovDQorCUNNVDAuQ01DUi5CSVQuQ01JRSA9IDE7DQogDQotICAgIC8qIFNldCB0aGUgY29tcGFyZSBtYXRjaCB2YWx1ZS4gKi8NCi0gICAgQ01UMC5DTUNPUiA9ICggdWludDE2X3QgKSB1bE1hdGNoVmFsdWVGb3JPbmVUaWNrOw0KKwkvKiBTZXQgdGhlIGNvbXBhcmUgbWF0Y2ggdmFsdWUuICovDQorCUNNVDAuQ01DT1IgPSAoIHVpbnQxNl90ICkgdWxNYXRjaFZhbHVlRm9yT25lVGljazsNCiANCi0gICAgLyogRGl2aWRlIHRoZSBQQ0xLLiAqLw0KLSAgICAjaWYgcG9ydENMT0NLX0RJVklTT1IgPT0gNTEyDQotICAgICAgICB7DQotICAgICAgICAgICAgQ01UMC5DTUNSLkJJVC5DS1MgPSAzOw0KLSAgICAgICAgfQ0KLSAgICAjZWxpZiBwb3J0Q0xPQ0tfRElWSVNPUiA9PSAxMjgNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBDTVQwLkNNQ1IuQklULkNLUyA9IDI7DQotICAgICAgICB9DQotICAgICNlbGlmIHBvcnRDTE9DS19ESVZJU09SID09IDMyDQotICAgICAgICB7DQotICAgICAgICAgICAgQ01UMC5DTUNSLkJJVC5DS1MgPSAxOw0KLSAgICAgICAgfQ0KLSAgICAjZWxpZiBwb3J0Q0xPQ0tfRElWSVNPUiA9PSA4DQotICAgICAgICB7DQotICAgICAgICAgICAgQ01UMC5DTUNSLkJJVC5DS1MgPSAwOw0KLSAgICAgICAgfQ0KLSAgICAjZWxzZSAvKiBpZiBwb3J0Q0xPQ0tfRElWSVNPUiA9PSA1MTIgKi8NCi0gICAgICAgIHsNCi0gICAgICAgICAgICAjZXJyb3IgSW52YWxpZCBwb3J0Q0xPQ0tfRElWSVNPUiBzZXR0aW5nDQotICAgICAgICB9DQotICAgICNlbmRpZiAvKiBpZiBwb3J0Q0xPQ0tfRElWSVNPUiA9PSA1MTIgKi8NCisJLyogRGl2aWRlIHRoZSBQQ0xLLiAqLw0KKwkjaWYgcG9ydENMT0NLX0RJVklTT1IgPT0gNTEyDQorCXsNCisJCUNNVDAuQ01DUi5CSVQuQ0tTID0gMzsNCisJfQ0KKwkjZWxpZiBwb3J0Q0xPQ0tfRElWSVNPUiA9PSAxMjgNCisJew0KKwkJQ01UMC5DTUNSLkJJVC5DS1MgPSAyOw0KKwl9DQorCSNlbGlmIHBvcnRDTE9DS19ESVZJU09SID09IDMyDQorCXsNCisJCUNNVDAuQ01DUi5CSVQuQ0tTID0gMTsNCisJfQ0KKwkjZWxpZiBwb3J0Q0xPQ0tfRElWSVNPUiA9PSA4DQorCXsNCisJCUNNVDAuQ01DUi5CSVQuQ0tTID0gMDsNCisJfQ0KKwkjZWxzZQ0KKwl7DQorCQkjZXJyb3IgSW52YWxpZCBwb3J0Q0xPQ0tfRElWSVNPUiBzZXR0aW5nDQorCX0NCisJI2VuZGlmDQogDQogDQotICAgIC8qIEVuYWJsZSB0aGUgaW50ZXJydXB0Li4uICovDQotICAgIF9JRU4oIF9DTVQwX0NNSTAgKSA9IDE7DQorCS8qIEVuYWJsZSB0aGUgaW50ZXJydXB0Li4uICovDQorCV9JRU4oIF9DTVQwX0NNSTAgKSA9IDE7DQogDQotICAgIC8qIC4uLmFuZCBzZXQgaXRzIHByaW9yaXR5IHRvIHRoZSBhcHBsaWNhdGlvbiBkZWZpbmVkIGtlcm5lbCBwcmlvcml0eS4gKi8NCi0gICAgX0lQUiggX0NNVDBfQ01JMCApID0gY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWTsNCisJLyogLi4uYW5kIHNldCBpdHMgcHJpb3JpdHkgdG8gdGhlIGFwcGxpY2F0aW9uIGRlZmluZWQga2VybmVsIHByaW9yaXR5LiAqLw0KKwlfSVBSKCBfQ01UMF9DTUkwICkgPSBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZOw0KIA0KLSAgICAvKiBTdGFydCB0aGUgdGltZXIuICovDQotICAgIENNVC5DTVNUUjAuQklULlNUUjAgPSAxOw0KKwkvKiBTdGFydCB0aGUgdGltZXIuICovDQorCUNNVC5DTVNUUjAuQklULlNUUjAgPSAxOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAjaWYgY29uZmlnVVNFX1RJQ0tMRVNTX0lETEUgPT0gMQ0KIA0KLSAgICBzdGF0aWMgdm9pZCBwcnZTbGVlcCggVGlja1R5cGVfdCB4RXhwZWN0ZWRJZGxlVGltZSApDQotICAgIHsNCi0gICAgICAgIC8qIEFsbG93IHRoZSBhcHBsaWNhdGlvbiB0byBkZWZpbmUgc29tZSBwcmUtc2xlZXAgcHJvY2Vzc2luZy4gKi8NCi0gICAgICAgIGNvbmZpZ1BSRV9TTEVFUF9QUk9DRVNTSU5HKCB4RXhwZWN0ZWRJZGxlVGltZSApOw0KKwlzdGF0aWMgdm9pZCBwcnZTbGVlcCggVGlja1R5cGVfdCB4RXhwZWN0ZWRJZGxlVGltZSApDQorCXsNCisJCS8qIEFsbG93IHRoZSBhcHBsaWNhdGlvbiB0byBkZWZpbmUgc29tZSBwcmUtc2xlZXAgcHJvY2Vzc2luZy4gKi8NCisJCWNvbmZpZ1BSRV9TTEVFUF9QUk9DRVNTSU5HKCB4RXhwZWN0ZWRJZGxlVGltZSApOw0KIA0KLSAgICAgICAgLyogeEV4cGVjdGVkSWRsZVRpbWUgYmVpbmcgc2V0IHRvIDAgYnkgY29uZmlnUFJFX1NMRUVQX1BST0NFU1NJTkcoKQ0KLSAgICAgICAgICogbWVhbnMgdGhlIGFwcGxpY2F0aW9uIGRlZmluZWQgY29kZSBoYXMgYWxyZWFkeSBleGVjdXRlZCB0aGUgV0FJVA0KLSAgICAgICAgICogaW5zdHJ1Y3Rpb24uICovDQotICAgICAgICBpZiggeEV4cGVjdGVkSWRsZVRpbWUgPiAwICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBfX3dhaXRfZm9yX2ludGVycnVwdCgpOw0KLSAgICAgICAgfQ0KKwkJLyogeEV4cGVjdGVkSWRsZVRpbWUgYmVpbmcgc2V0IHRvIDAgYnkgY29uZmlnUFJFX1NMRUVQX1BST0NFU1NJTkcoKQ0KKwkJbWVhbnMgdGhlIGFwcGxpY2F0aW9uIGRlZmluZWQgY29kZSBoYXMgYWxyZWFkeSBleGVjdXRlZCB0aGUgV0FJVA0KKwkJaW5zdHJ1Y3Rpb24uICovDQorCQlpZiggeEV4cGVjdGVkSWRsZVRpbWUgPiAwICkNCisJCXsNCisJCQlfX3dhaXRfZm9yX2ludGVycnVwdCgpOw0KKwkJfQ0KIA0KLSAgICAgICAgLyogQWxsb3cgdGhlIGFwcGxpY2F0aW9uIHRvIGRlZmluZSBzb21lIHBvc3Qgc2xlZXAgcHJvY2Vzc2luZy4gKi8NCi0gICAgICAgIGNvbmZpZ1BPU1RfU0xFRVBfUFJPQ0VTU0lORyggeEV4cGVjdGVkSWRsZVRpbWUgKTsNCi0gICAgfQ0KKwkJLyogQWxsb3cgdGhlIGFwcGxpY2F0aW9uIHRvIGRlZmluZSBzb21lIHBvc3Qgc2xlZXAgcHJvY2Vzc2luZy4gKi8NCisJCWNvbmZpZ1BPU1RfU0xFRVBfUFJPQ0VTU0lORyggeEV4cGVjdGVkSWRsZVRpbWUgKTsNCisJfQ0KIA0KICNlbmRpZiAvKiBjb25maWdVU0VfVElDS0xFU1NfSURMRSAqLw0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KICNpZiBjb25maWdVU0VfVElDS0xFU1NfSURMRSA9PSAxDQogDQotICAgIHZvaWQgdlBvcnRTdXBwcmVzc1RpY2tzQW5kU2xlZXAoIFRpY2tUeXBlX3QgeEV4cGVjdGVkSWRsZVRpbWUgKQ0KLSAgICB7DQotICAgICAgICB1aW50MzJfdCB1bE1hdGNoVmFsdWUsIHVsQ29tcGxldGVUaWNrUGVyaW9kcywgdWxDdXJyZW50Q291bnQ7DQotICAgICAgICBlU2xlZXBNb2RlU3RhdHVzIGVTbGVlcEFjdGlvbjsNCisJdm9pZCB2UG9ydFN1cHByZXNzVGlja3NBbmRTbGVlcCggVGlja1R5cGVfdCB4RXhwZWN0ZWRJZGxlVGltZSApDQorCXsNCisJdWludDMyX3QgdWxNYXRjaFZhbHVlLCB1bENvbXBsZXRlVGlja1BlcmlvZHMsIHVsQ3VycmVudENvdW50Ow0KKwllU2xlZXBNb2RlU3RhdHVzIGVTbGVlcEFjdGlvbjsNCiANCi0gICAgICAgIC8qIFRISVMgRlVOQ1RJT04gSVMgQ0FMTEVEIFdJVEggVEhFIFNDSEVEVUxFUiBTVVNQRU5ERUQuICovDQorCQkvKiBUSElTIEZVTkNUSU9OIElTIENBTExFRCBXSVRIIFRIRSBTQ0hFRFVMRVIgU1VTUEVOREVELiAqLw0KIA0KLSAgICAgICAgLyogTWFrZSBzdXJlIHRoZSBDTVQgcmVsb2FkIHZhbHVlIGRvZXMgbm90IG92ZXJmbG93IHRoZSBjb3VudGVyLiAqLw0KLSAgICAgICAgaWYoIHhFeHBlY3RlZElkbGVUaW1lID4geE1heGltdW1Qb3NzaWJsZVN1cHByZXNzZWRUaWNrcyApDQotICAgICAgICB7DQotICAgICAgICAgICAgeEV4cGVjdGVkSWRsZVRpbWUgPSB4TWF4aW11bVBvc3NpYmxlU3VwcHJlc3NlZFRpY2tzOw0KLSAgICAgICAgfQ0KKwkJLyogTWFrZSBzdXJlIHRoZSBDTVQgcmVsb2FkIHZhbHVlIGRvZXMgbm90IG92ZXJmbG93IHRoZSBjb3VudGVyLiAqLw0KKwkJaWYoIHhFeHBlY3RlZElkbGVUaW1lID4geE1heGltdW1Qb3NzaWJsZVN1cHByZXNzZWRUaWNrcyApDQorCQl7DQorCQkJeEV4cGVjdGVkSWRsZVRpbWUgPSB4TWF4aW11bVBvc3NpYmxlU3VwcHJlc3NlZFRpY2tzOw0KKwkJfQ0KIA0KLSAgICAgICAgLyogQ2FsY3VsYXRlIHRoZSByZWxvYWQgdmFsdWUgcmVxdWlyZWQgdG8gd2FpdCB4RXhwZWN0ZWRJZGxlVGltZSB0aWNrDQotICAgICAgICAgKiBwZXJpb2RzLiAqLw0KLSAgICAgICAgdWxNYXRjaFZhbHVlID0gdWxNYXRjaFZhbHVlRm9yT25lVGljayAqIHhFeHBlY3RlZElkbGVUaW1lOw0KKwkJLyogQ2FsY3VsYXRlIHRoZSByZWxvYWQgdmFsdWUgcmVxdWlyZWQgdG8gd2FpdCB4RXhwZWN0ZWRJZGxlVGltZSB0aWNrDQorCQlwZXJpb2RzLiAqLw0KKwkJdWxNYXRjaFZhbHVlID0gdWxNYXRjaFZhbHVlRm9yT25lVGljayAqIHhFeHBlY3RlZElkbGVUaW1lOw0KKwkJaWYoIHVsTWF0Y2hWYWx1ZSA+IHVsU3RvcHBlZFRpbWVyQ29tcGVuc2F0aW9uICkNCisJCXsNCisJCQkvKiBDb21wZW5zYXRlIGZvciB0aGUgZmFjdCB0aGF0IHRoZSBDTVQgaXMgZ29pbmcgdG8gYmUgc3RvcHBlZA0KKwkJCW1vbWVudGFyaWx5LiAqLw0KKwkJCXVsTWF0Y2hWYWx1ZSAtPSB1bFN0b3BwZWRUaW1lckNvbXBlbnNhdGlvbjsNCisJCX0NCiANCi0gICAgICAgIGlmKCB1bE1hdGNoVmFsdWUgPiB1bFN0b3BwZWRUaW1lckNvbXBlbnNhdGlvbiApDQotICAgICAgICB7DQotICAgICAgICAgICAgLyogQ29tcGVuc2F0ZSBmb3IgdGhlIGZhY3QgdGhhdCB0aGUgQ01UIGlzIGdvaW5nIHRvIGJlIHN0b3BwZWQNCi0gICAgICAgICAgICAgKiBtb21lbnRhcmlseS4gKi8NCi0gICAgICAgICAgICB1bE1hdGNoVmFsdWUgLT0gdWxTdG9wcGVkVGltZXJDb21wZW5zYXRpb247DQotICAgICAgICB9DQorCQkvKiBTdG9wIHRoZSBDTVQgbW9tZW50YXJpbHkuICBUaGUgdGltZSB0aGUgQ01UIGlzIHN0b3BwZWQgZm9yIGlzDQorCQlhY2NvdW50ZWQgZm9yIGFzIGJlc3QgaXQgY2FuIGJlLCBidXQgdXNpbmcgdGhlIHRpY2tsZXNzIG1vZGUgd2lsbA0KKwkJaW5ldml0YWJseSByZXN1bHQgaW4gc29tZSB0aW55IGRyaWZ0IG9mIHRoZSB0aW1lIG1haW50YWluZWQgYnkgdGhlDQorCQlrZXJuZWwgd2l0aCByZXNwZWN0IHRvIGNhbGVuZGFyIHRpbWUuICovDQorCQlDTVQuQ01TVFIwLkJJVC5TVFIwID0gMDsNCisJCXdoaWxlKCBDTVQuQ01TVFIwLkJJVC5TVFIwID09IDEgKQ0KKwkJew0KKwkJCS8qIE5vdGhpbmcgdG8gZG8gaGVyZS4gKi8NCisJCX0NCiANCi0gICAgICAgIC8qIFN0b3AgdGhlIENNVCBtb21lbnRhcmlseS4gIFRoZSB0aW1lIHRoZSBDTVQgaXMgc3RvcHBlZCBmb3IgaXMNCi0gICAgICAgICAqIGFjY291bnRlZCBmb3IgYXMgYmVzdCBpdCBjYW4gYmUsIGJ1dCB1c2luZyB0aGUgdGlja2xlc3MgbW9kZSB3aWxsDQotICAgICAgICAgKiBpbmV2aXRhYmx5IHJlc3VsdCBpbiBzb21lIHRpbnkgZHJpZnQgb2YgdGhlIHRpbWUgbWFpbnRhaW5lZCBieSB0aGUNCi0gICAgICAgICAqIGtlcm5lbCB3aXRoIHJlc3BlY3QgdG8gY2FsZW5kYXIgdGltZS4gKi8NCi0gICAgICAgIENNVC5DTVNUUjAuQklULlNUUjAgPSAwOw0KKwkJLyogQ3JpdGljYWwgc2VjdGlvbiB1c2luZyB0aGUgZ2xvYmFsIGludGVycnVwdCBiaXQgYXMgdGhlIGkgYml0IGlzDQorCQlhdXRvbWF0aWNhbGx5IHJlc2V0IGJ5IHRoZSBXQUlUIGluc3RydWN0aW9uLiAqLw0KKwkJX19kaXNhYmxlX2ludGVycnVwdCgpOw0KIA0KLSAgICAgICAgd2hpbGUoIENNVC5DTVNUUjAuQklULlNUUjAgPT0gMSApDQotICAgICAgICB7DQotICAgICAgICAgICAgLyogTm90aGluZyB0byBkbyBoZXJlLiAqLw0KLSAgICAgICAgfQ0KKwkJLyogVGhlIHRpY2sgZmxhZyBpcyBzZXQgdG8gZmFsc2UgYmVmb3JlIHNsZWVwaW5nLiAgSWYgaXQgaXMgdHJ1ZSB3aGVuDQorCQlzbGVlcCBtb2RlIGlzIGV4aXRlZCB0aGVuIHNsZWVwIG1vZGUgd2FzIHByb2JhYmx5IGV4aXRlZCBiZWNhdXNlIHRoZQ0KKwkJdGljayB3YXMgc3VwcHJlc3NlZCBmb3IgdGhlIGVudGlyZSB4RXhwZWN0ZWRJZGxlVGltZSBwZXJpb2QuICovDQorCQl1bFRpY2tGbGFnID0gcGRGQUxTRTsNCiANCi0gICAgICAgIC8qIENyaXRpY2FsIHNlY3Rpb24gdXNpbmcgdGhlIGdsb2JhbCBpbnRlcnJ1cHQgYml0IGFzIHRoZSBpIGJpdCBpcw0KLSAgICAgICAgICogYXV0b21hdGljYWxseSByZXNldCBieSB0aGUgV0FJVCBpbnN0cnVjdGlvbi4gKi8NCi0gICAgICAgIF9fZGlzYWJsZV9pbnRlcnJ1cHQoKTsNCisJCS8qIElmIGEgY29udGV4dCBzd2l0Y2ggaXMgcGVuZGluZyB0aGVuIGFiYW5kb24gdGhlIGxvdyBwb3dlciBlbnRyeSBhcw0KKwkJdGhlIGNvbnRleHQgc3dpdGNoIG1pZ2h0IGhhdmUgYmVlbiBwZW5kZWQgYnkgYW4gZXh0ZXJuYWwgaW50ZXJydXB0IHRoYXQNCisJCXJlcXVpcmVzIHByb2Nlc3NpbmcuICovDQorCQllU2xlZXBBY3Rpb24gPSBlVGFza0NvbmZpcm1TbGVlcE1vZGVTdGF0dXMoKTsNCisJCWlmKCBlU2xlZXBBY3Rpb24gPT0gZUFib3J0U2xlZXAgKQ0KKwkJew0KKwkJCS8qIFJlc3RhcnQgdGljay4gKi8NCisJCQlDTVQuQ01TVFIwLkJJVC5TVFIwID0gMTsNCisJCQlfX2VuYWJsZV9pbnRlcnJ1cHQoKTsNCisJCX0NCisJCWVsc2UgaWYoIGVTbGVlcEFjdGlvbiA9PSBlTm9UYXNrc1dhaXRpbmdUaW1lb3V0ICkNCisJCXsNCisJCSAgICAvKiBQcm90ZWN0aW9uIG9mZi4gKi8NCisJCSAgICBTWVNURU0uUFJDUi5XT1JEID0gcG9ydFVOTE9DS19LRVk7DQogDQotICAgICAgICAvKiBUaGUgdGljayBmbGFnIGlzIHNldCB0byBmYWxzZSBiZWZvcmUgc2xlZXBpbmcuICBJZiBpdCBpcyB0cnVlIHdoZW4NCi0gICAgICAgICAqIHNsZWVwIG1vZGUgaXMgZXhpdGVkIHRoZW4gc2xlZXAgbW9kZSB3YXMgcHJvYmFibHkgZXhpdGVkIGJlY2F1c2UgdGhlDQotICAgICAgICAgKiB0aWNrIHdhcyBzdXBwcmVzc2VkIGZvciB0aGUgZW50aXJlIHhFeHBlY3RlZElkbGVUaW1lIHBlcmlvZC4gKi8NCi0gICAgICAgIHVsVGlja0ZsYWcgPSBwZEZBTFNFOw0KKwkJICAgIC8qIFJlYWR5IGZvciBzb2Z0d2FyZSBzdGFuZGJ5IHdpdGggYWxsIGNsb2NrcyBzdG9wcGVkLiAqLw0KKwkJCVNZU1RFTS5TQllDUi5CSVQuU1NCWSA9IDE7DQogDQotICAgICAgICAvKiBJZiBhIGNvbnRleHQgc3dpdGNoIGlzIHBlbmRpbmcgdGhlbiBhYmFuZG9uIHRoZSBsb3cgcG93ZXIgZW50cnkgYXMNCi0gICAgICAgICAqIHRoZSBjb250ZXh0IHN3aXRjaCBtaWdodCBoYXZlIGJlZW4gcGVuZGVkIGJ5IGFuIGV4dGVybmFsIGludGVycnVwdCB0aGF0DQotICAgICAgICAgKiByZXF1aXJlcyBwcm9jZXNzaW5nLiAqLw0KLSAgICAgICAgZVNsZWVwQWN0aW9uID0gZVRhc2tDb25maXJtU2xlZXBNb2RlU3RhdHVzKCk7DQorCQkgICAgLyogUHJvdGVjdGlvbiBvbi4gKi8NCisJCSAgICBTWVNURU0uUFJDUi5XT1JEID0gcG9ydExPQ0tfS0VZOw0KIA0KLSAgICAgICAgaWYoIGVTbGVlcEFjdGlvbiA9PSBlQWJvcnRTbGVlcCApDQotICAgICAgICB7DQotICAgICAgICAgICAgLyogUmVzdGFydCB0aWNrLiAqLw0KLSAgICAgICAgICAgIENNVC5DTVNUUjAuQklULlNUUjAgPSAxOw0KLSAgICAgICAgICAgIF9fZW5hYmxlX2ludGVycnVwdCgpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZWxzZSBpZiggZVNsZWVwQWN0aW9uID09IGVOb1Rhc2tzV2FpdGluZ1RpbWVvdXQgKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIC8qIFByb3RlY3Rpb24gb2ZmLiAqLw0KLSAgICAgICAgICAgIFNZU1RFTS5QUkNSLldPUkQgPSBwb3J0VU5MT0NLX0tFWTsNCisJCQkvKiBTbGVlcCB1bnRpbCBzb21ldGhpbmcgaGFwcGVucy4gIENhbGxpbmcgcHJ2U2xlZXAoKSB3aWxsDQorCQkJYXV0b21hdGljYWxseSByZXNldCB0aGUgaSBiaXQgaW4gdGhlIFBTVy4gKi8NCisJCQlwcnZTbGVlcCggeEV4cGVjdGVkSWRsZVRpbWUgKTsNCiANCi0gICAgICAgICAgICAvKiBSZWFkeSBmb3Igc29mdHdhcmUgc3RhbmRieSB3aXRoIGFsbCBjbG9ja3Mgc3RvcHBlZC4gKi8NCi0gICAgICAgICAgICBTWVNURU0uU0JZQ1IuQklULlNTQlkgPSAxOw0KKwkJCS8qIFJlc3RhcnQgdGhlIENNVC4gKi8NCisJCQlDTVQuQ01TVFIwLkJJVC5TVFIwID0gMTsNCisJCX0NCisJCWVsc2UNCisJCXsNCisJCSAgICAvKiBQcm90ZWN0aW9uIG9mZi4gKi8NCisJCSAgICBTWVNURU0uUFJDUi5XT1JEID0gcG9ydFVOTE9DS19LRVk7DQogDQotICAgICAgICAgICAgLyogUHJvdGVjdGlvbiBvbi4gKi8NCi0gICAgICAgICAgICBTWVNURU0uUFJDUi5XT1JEID0gcG9ydExPQ0tfS0VZOw0KKwkJICAgIC8qIFJlYWR5IGZvciBkZWVwIHNsZWVwIG1vZGUuICovDQorCQkJU1lTVEVNLk1TVFBDUkMuQklULkRTTFBFID0gMTsNCisJCQlTWVNURU0uTVNUUENSQS5CSVQuTVNUUEEyOCA9IDE7DQorCQkJU1lTVEVNLlNCWUNSLkJJVC5TU0JZID0gMDsNCiANCi0gICAgICAgICAgICAvKiBTbGVlcCB1bnRpbCBzb21ldGhpbmcgaGFwcGVucy4gIENhbGxpbmcgcHJ2U2xlZXAoKSB3aWxsDQotICAgICAgICAgICAgICogYXV0b21hdGljYWxseSByZXNldCB0aGUgaSBiaXQgaW4gdGhlIFBTVy4gKi8NCi0gICAgICAgICAgICBwcnZTbGVlcCggeEV4cGVjdGVkSWRsZVRpbWUgKTsNCisJCSAgICAvKiBQcm90ZWN0aW9uIG9uLiAqLw0KKwkJICAgIFNZU1RFTS5QUkNSLldPUkQgPSBwb3J0TE9DS19LRVk7DQogDQotICAgICAgICAgICAgLyogUmVzdGFydCB0aGUgQ01ULiAqLw0KLSAgICAgICAgICAgIENNVC5DTVNUUjAuQklULlNUUjAgPSAxOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZWxzZQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIC8qIFByb3RlY3Rpb24gb2ZmLiAqLw0KLSAgICAgICAgICAgIFNZU1RFTS5QUkNSLldPUkQgPSBwb3J0VU5MT0NLX0tFWTsNCisJCSAgICAvKiBBZGp1c3QgdGhlIG1hdGNoIHZhbHVlIHRvIHRha2UgaW50byBhY2NvdW50IHRoYXQgdGhlIGN1cnJlbnQNCisJCQl0aW1lIHNsaWNlIGlzIGFscmVhZHkgcGFydGlhbGx5IGNvbXBsZXRlLiAqLw0KKwkJCXVsTWF0Y2hWYWx1ZSAtPSAoIHVpbnQzMl90ICkgQ01UMC5DTUNOVDsNCisJCQlDTVQwLkNNQ09SID0gKCB1aW50MTZfdCApIHVsTWF0Y2hWYWx1ZTsNCiANCi0gICAgICAgICAgICAvKiBSZWFkeSBmb3IgZGVlcCBzbGVlcCBtb2RlLiAqLw0KLSAgICAgICAgICAgIFNZU1RFTS5NU1RQQ1JDLkJJVC5EU0xQRSA9IDE7DQotICAgICAgICAgICAgU1lTVEVNLk1TVFBDUkEuQklULk1TVFBBMjggPSAxOw0KLSAgICAgICAgICAgIFNZU1RFTS5TQllDUi5CSVQuU1NCWSA9IDA7DQorCQkJLyogUmVzdGFydCB0aGUgQ01UIHRvIGNvdW50IHVwIHRvIHRoZSBuZXcgbWF0Y2ggdmFsdWUuICovDQorCQkJQ01UMC5DTUNOVCA9IDA7DQorCQkJQ01ULkNNU1RSMC5CSVQuU1RSMCA9IDE7DQogDQotICAgICAgICAgICAgLyogUHJvdGVjdGlvbiBvbi4gKi8NCi0gICAgICAgICAgICBTWVNURU0uUFJDUi5XT1JEID0gcG9ydExPQ0tfS0VZOw0KKwkJCS8qIFNsZWVwIHVudGlsIHNvbWV0aGluZyBoYXBwZW5zLiAgQ2FsbGluZyBwcnZTbGVlcCgpIHdpbGwNCisJCQlhdXRvbWF0aWNhbGx5IHJlc2V0IHRoZSBpIGJpdCBpbiB0aGUgUFNXLiAqLw0KKwkJCXBydlNsZWVwKCB4RXhwZWN0ZWRJZGxlVGltZSApOw0KIA0KLSAgICAgICAgICAgIC8qIEFkanVzdCB0aGUgbWF0Y2ggdmFsdWUgdG8gdGFrZSBpbnRvIGFjY291bnQgdGhhdCB0aGUgY3VycmVudA0KLSAgICAgICAgICAgICAqIHRpbWUgc2xpY2UgaXMgYWxyZWFkeSBwYXJ0aWFsbHkgY29tcGxldGUuICovDQotICAgICAgICAgICAgdWxNYXRjaFZhbHVlIC09ICggdWludDMyX3QgKSBDTVQwLkNNQ05UOw0KLSAgICAgICAgICAgIENNVDAuQ01DT1IgPSAoIHVpbnQxNl90ICkgdWxNYXRjaFZhbHVlOw0KKwkJCS8qIFN0b3AgQ01ULiAgQWdhaW4sIHRoZSB0aW1lIHRoZSBTeXNUaWNrIGlzIHN0b3BwZWQgZm9yIGlzDQorCQkJYWNjb3VudGVkIGZvciBhcyBiZXN0IGl0IGNhbiBiZSwgYnV0IHVzaW5nIHRoZSB0aWNrbGVzcyBtb2RlIHdpbGwNCisJCQlpbmV2aXRhYmx5IHJlc3VsdCBpbiBzb21lIHRpbnkgZHJpZnQgb2YgdGhlIHRpbWUgbWFpbnRhaW5lZCBieSB0aGUNCisJCQlrZXJuZWwgd2l0aAlyZXNwZWN0IHRvIGNhbGVuZGFyIHRpbWUuICovDQorCQkJQ01ULkNNU1RSMC5CSVQuU1RSMCA9IDA7DQorCQkJd2hpbGUoIENNVC5DTVNUUjAuQklULlNUUjAgPT0gMSApDQorCQkJew0KKwkJCQkvKiBOb3RoaW5nIHRvIGRvIGhlcmUuICovDQorCQkJfQ0KIA0KLSAgICAgICAgICAgIC8qIFJlc3RhcnQgdGhlIENNVCB0byBjb3VudCB1cCB0byB0aGUgbmV3IG1hdGNoIHZhbHVlLiAqLw0KLSAgICAgICAgICAgIENNVDAuQ01DTlQgPSAwOw0KLSAgICAgICAgICAgIENNVC5DTVNUUjAuQklULlNUUjAgPSAxOw0KKwkJCXVsQ3VycmVudENvdW50ID0gKCB1aW50MzJfdCApIENNVDAuQ01DTlQ7DQogDQotICAgICAgICAgICAgLyogU2xlZXAgdW50aWwgc29tZXRoaW5nIGhhcHBlbnMuICBDYWxsaW5nIHBydlNsZWVwKCkgd2lsbA0KLSAgICAgICAgICAgICAqIGF1dG9tYXRpY2FsbHkgcmVzZXQgdGhlIGkgYml0IGluIHRoZSBQU1cuICovDQotICAgICAgICAgICAgcHJ2U2xlZXAoIHhFeHBlY3RlZElkbGVUaW1lICk7DQorCQkJaWYoIHVsVGlja0ZsYWcgIT0gcGRGQUxTRSApDQorCQkJew0KKwkJCQkvKiBUaGUgdGljayBpbnRlcnJ1cHQgaGFzIGFscmVhZHkgZXhlY3V0ZWQsIGFsdGhvdWdoIGJlY2F1c2UNCisJCQkJdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB0aGUgc2NoZWR1bGVyIHN1c3BlbmRlZCB0aGUgYWN0dWFsDQorCQkJCXRpY2sgcHJvY2Vzc2luZyB3aWxsIG5vdCBvY2N1ciB1bnRpbCBhZnRlciB0aGlzIGZ1bmN0aW9uIGhhcw0KKwkJCQlleGl0ZWQuICBSZXNldCB0aGUgbWF0Y2ggdmFsdWUgd2l0aCB3aGF0ZXZlciByZW1haW5zIG9mIHRoaXMNCisJCQkJdGljayBwZXJpb2QuICovDQorCQkJCXVsTWF0Y2hWYWx1ZSA9IHVsTWF0Y2hWYWx1ZUZvck9uZVRpY2sgLSB1bEN1cnJlbnRDb3VudDsNCisJCQkJQ01UMC5DTUNPUiA9ICggdWludDE2X3QgKSB1bE1hdGNoVmFsdWU7DQogDQotICAgICAgICAgICAgLyogU3RvcCBDTVQuICBBZ2FpbiwgdGhlIHRpbWUgdGhlIFN5c1RpY2sgaXMgc3RvcHBlZCBmb3IgaXMNCi0gICAgICAgICAgICAgKiBhY2NvdW50ZWQgZm9yIGFzIGJlc3QgaXQgY2FuIGJlLCBidXQgdXNpbmcgdGhlIHRpY2tsZXNzIG1vZGUgd2lsbA0KLSAgICAgICAgICAgICAqIGluZXZpdGFibHkgcmVzdWx0IGluIHNvbWUgdGlueSBkcmlmdCBvZiB0aGUgdGltZSBtYWludGFpbmVkIGJ5IHRoZQ0KLSAgICAgICAgICAgICAqIGtlcm5lbCB3aXRoCXJlc3BlY3QgdG8gY2FsZW5kYXIgdGltZS4gKi8NCi0gICAgICAgICAgICBDTVQuQ01TVFIwLkJJVC5TVFIwID0gMDsNCisJCQkJLyogVGhlIHRpY2sgaW50ZXJydXB0IGhhbmRsZXIgd2lsbCBhbHJlYWR5IGhhdmUgcGVuZGVkIHRoZSB0aWNrDQorCQkJCXByb2Nlc3NpbmcgaW4gdGhlIGtlcm5lbC4gIEFzIHRoZSBwZW5kaW5nIHRpY2sgd2lsbCBiZQ0KKwkJCQlwcm9jZXNzZWQgYXMgc29vbiBhcyB0aGlzIGZ1bmN0aW9uIGV4aXRzLCB0aGUgdGljayB2YWx1ZQ0KKwkJCQltYWludGFpbmVkIGJ5IHRoZSB0aWNrIGlzIHN0ZXBwZWQgZm9yd2FyZCBieSBvbmUgbGVzcyB0aGFuIHRoZQ0KKwkJCQl0aW1lIHNwZW50IHNsZWVwaW5nLiAgVGhlIGFjdHVhbCBzdGVwcGluZyBvZiB0aGUgdGljayBhcHBlYXJzDQorCQkJCWxhdGVyIGluIHRoaXMgZnVuY3Rpb24uICovDQorCQkJCXVsQ29tcGxldGVUaWNrUGVyaW9kcyA9IHhFeHBlY3RlZElkbGVUaW1lIC0gMVVMOw0KKwkJCX0NCisJCQllbHNlDQorCQkJew0KKwkJCQkvKiBTb21ldGhpbmcgb3RoZXIgdGhhbiB0aGUgdGljayBpbnRlcnJ1cHQgZW5kZWQgdGhlIHNsZWVwLg0KKwkJCQlIb3cJbWFueSBjb21wbGV0ZSB0aWNrIHBlcmlvZHMgcGFzc2VkIHdoaWxlIHRoZSBwcm9jZXNzb3Igd2FzDQorCQkJCXNsZWVwaW5nPyAqLw0KKwkJCQl1bENvbXBsZXRlVGlja1BlcmlvZHMgPSB1bEN1cnJlbnRDb3VudCAvIHVsTWF0Y2hWYWx1ZUZvck9uZVRpY2s7DQogDQotICAgICAgICAgICAgd2hpbGUoIENNVC5DTVNUUjAuQklULlNUUjAgPT0gMSApDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAvKiBOb3RoaW5nIHRvIGRvIGhlcmUuICovDQotICAgICAgICAgICAgfQ0KKwkJCQkvKiBUaGUgbWF0Y2ggdmFsdWUgaXMgc2V0IHRvIHdoYXRldmVyIGZyYWN0aW9uIG9mIGEgc2luZ2xlIHRpY2sNCisJCQkJcGVyaW9kIHJlbWFpbnMuICovDQorCQkJCXVsTWF0Y2hWYWx1ZSA9IHVsQ3VycmVudENvdW50IC0gKCB1bENvbXBsZXRlVGlja1BlcmlvZHMgKiB1bE1hdGNoVmFsdWVGb3JPbmVUaWNrICk7DQorCQkJCUNNVDAuQ01DT1IgPSAoIHVpbnQxNl90ICkgdWxNYXRjaFZhbHVlOw0KKwkJCX0NCiANCi0gICAgICAgICAgICB1bEN1cnJlbnRDb3VudCA9ICggdWludDMyX3QgKSBDTVQwLkNNQ05UOw0KKwkJCS8qIFJlc3RhcnQgdGhlIENNVCBzbyBpdCBydW5zIHVwIHRvIHRoZSBtYXRjaCB2YWx1ZS4gIFRoZSBtYXRjaCB2YWx1ZQ0KKwkJCXdpbGwgZ2V0IHNldCB0byB0aGUgdmFsdWUgcmVxdWlyZWQgdG8gZ2VuZXJhdGUgZXhhY3RseSBvbmUgdGljayBwZXJpb2QNCisJCQl0aGUgbmV4dCB0aW1lIHRoZSBDTVQgaW50ZXJydXB0IGV4ZWN1dGVzLiAqLw0KKwkJCUNNVDAuQ01DTlQgPSAwOw0KKwkJCUNNVC5DTVNUUjAuQklULlNUUjAgPSAxOw0KIA0KLSAgICAgICAgICAgIGlmKCB1bFRpY2tGbGFnICE9IHBkRkFMU0UgKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgLyogVGhlIHRpY2sgaW50ZXJydXB0IGhhcyBhbHJlYWR5IGV4ZWN1dGVkLCBhbHRob3VnaCBiZWNhdXNlDQotICAgICAgICAgICAgICAgICAqIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdGhlIHNjaGVkdWxlciBzdXNwZW5kZWQgdGhlIGFjdHVhbA0KLSAgICAgICAgICAgICAgICAgKiB0aWNrIHByb2Nlc3Npbmcgd2lsbCBub3Qgb2NjdXIgdW50aWwgYWZ0ZXIgdGhpcyBmdW5jdGlvbiBoYXMNCi0gICAgICAgICAgICAgICAgICogZXhpdGVkLiAgUmVzZXQgdGhlIG1hdGNoIHZhbHVlIHdpdGggd2hhdGV2ZXIgcmVtYWlucyBvZiB0aGlzDQotICAgICAgICAgICAgICAgICAqIHRpY2sgcGVyaW9kLiAqLw0KLSAgICAgICAgICAgICAgICB1bE1hdGNoVmFsdWUgPSB1bE1hdGNoVmFsdWVGb3JPbmVUaWNrIC0gdWxDdXJyZW50Q291bnQ7DQotICAgICAgICAgICAgICAgIENNVDAuQ01DT1IgPSAoIHVpbnQxNl90ICkgdWxNYXRjaFZhbHVlOw0KLQ0KLSAgICAgICAgICAgICAgICAvKiBUaGUgdGljayBpbnRlcnJ1cHQgaGFuZGxlciB3aWxsIGFscmVhZHkgaGF2ZSBwZW5kZWQgdGhlIHRpY2sNCi0gICAgICAgICAgICAgICAgICogcHJvY2Vzc2luZyBpbiB0aGUga2VybmVsLiAgQXMgdGhlIHBlbmRpbmcgdGljayB3aWxsIGJlDQotICAgICAgICAgICAgICAgICAqIHByb2Nlc3NlZCBhcyBzb29uIGFzIHRoaXMgZnVuY3Rpb24gZXhpdHMsIHRoZSB0aWNrIHZhbHVlDQotICAgICAgICAgICAgICAgICAqIG1haW50YWluZWQgYnkgdGhlIHRpY2sgaXMgc3RlcHBlZCBmb3J3YXJkIGJ5IG9uZSBsZXNzIHRoYW4gdGhlDQotICAgICAgICAgICAgICAgICAqIHRpbWUgc3BlbnQgc2xlZXBpbmcuICBUaGUgYWN0dWFsIHN0ZXBwaW5nIG9mIHRoZSB0aWNrIGFwcGVhcnMNCi0gICAgICAgICAgICAgICAgICogbGF0ZXIgaW4gdGhpcyBmdW5jdGlvbi4gKi8NCi0gICAgICAgICAgICAgICAgdWxDb21wbGV0ZVRpY2tQZXJpb2RzID0geEV4cGVjdGVkSWRsZVRpbWUgLSAxVUw7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGVsc2UNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIC8qIFNvbWV0aGluZyBvdGhlciB0aGFuIHRoZSB0aWNrIGludGVycnVwdCBlbmRlZCB0aGUgc2xlZXAuDQotICAgICAgICAgICAgICAgICAqIEhvdwltYW55IGNvbXBsZXRlIHRpY2sgcGVyaW9kcyBwYXNzZWQgd2hpbGUgdGhlIHByb2Nlc3NvciB3YXMNCi0gICAgICAgICAgICAgICAgICogc2xlZXBpbmc/ICovDQotICAgICAgICAgICAgICAgIHVsQ29tcGxldGVUaWNrUGVyaW9kcyA9IHVsQ3VycmVudENvdW50IC8gdWxNYXRjaFZhbHVlRm9yT25lVGljazsNCi0NCi0gICAgICAgICAgICAgICAgLyogVGhlIG1hdGNoIHZhbHVlIGlzIHNldCB0byB3aGF0ZXZlciBmcmFjdGlvbiBvZiBhIHNpbmdsZSB0aWNrDQotICAgICAgICAgICAgICAgICAqIHBlcmlvZCByZW1haW5zLiAqLw0KLSAgICAgICAgICAgICAgICB1bE1hdGNoVmFsdWUgPSB1bEN1cnJlbnRDb3VudCAtICggdWxDb21wbGV0ZVRpY2tQZXJpb2RzICogdWxNYXRjaFZhbHVlRm9yT25lVGljayApOw0KLSAgICAgICAgICAgICAgICBDTVQwLkNNQ09SID0gKCB1aW50MTZfdCApIHVsTWF0Y2hWYWx1ZTsNCi0gICAgICAgICAgICB9DQotDQotICAgICAgICAgICAgLyogUmVzdGFydCB0aGUgQ01UIHNvIGl0IHJ1bnMgdXAgdG8gdGhlIG1hdGNoIHZhbHVlLiAgVGhlIG1hdGNoIHZhbHVlDQotICAgICAgICAgICAgICogd2lsbCBnZXQgc2V0IHRvIHRoZSB2YWx1ZSByZXF1aXJlZCB0byBnZW5lcmF0ZSBleGFjdGx5IG9uZSB0aWNrIHBlcmlvZA0KLSAgICAgICAgICAgICAqIHRoZSBuZXh0IHRpbWUgdGhlIENNVCBpbnRlcnJ1cHQgZXhlY3V0ZXMuICovDQotICAgICAgICAgICAgQ01UMC5DTUNOVCA9IDA7DQotICAgICAgICAgICAgQ01ULkNNU1RSMC5CSVQuU1RSMCA9IDE7DQotDQotICAgICAgICAgICAgLyogV2luZCB0aGUgdGljayBmb3J3YXJkIGJ5IHRoZSBudW1iZXIgb2YgdGljayBwZXJpb2RzIHRoYXQgdGhlIENQVQ0KLSAgICAgICAgICAgICAqIHJlbWFpbmVkIGluIGEgbG93IHBvd2VyIHN0YXRlLiAqLw0KLSAgICAgICAgICAgIHZUYXNrU3RlcFRpY2soIHVsQ29tcGxldGVUaWNrUGVyaW9kcyApOw0KLSAgICAgICAgfQ0KLSAgICB9DQorCQkJLyogV2luZCB0aGUgdGljayBmb3J3YXJkIGJ5IHRoZSBudW1iZXIgb2YgdGljayBwZXJpb2RzIHRoYXQgdGhlIENQVQ0KKwkJCXJlbWFpbmVkIGluIGEgbG93IHBvd2VyIHN0YXRlLiAqLw0KKwkJCXZUYXNrU3RlcFRpY2soIHVsQ29tcGxldGVUaWNrUGVyaW9kcyApOw0KKwkJfQ0KKwl9DQogDQogI2VuZGlmIC8qIGNvbmZpZ1VTRV9USUNLTEVTU19JRExFICovDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvSUFSL1JYMTAwL3BvcnRtYWNyby5oIGIvcG9ydGFibGUvSUFSL1JYMTAwL3BvcnRtYWNyby5oCmluZGV4IDk5ZGE1ODkuLjhlMjg4ZTggMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0lBUi9SWDEwMC9wb3J0bWFjcm8uaAorKysgYi9wb3J0YWJsZS9JQVIvUlgxMDAvcG9ydG1hY3JvLmgKQEAgLTI3LDE2ICsyNywxNiBAQAogDQogDQogI2lmbmRlZiBQT1JUTUFDUk9fSA0KLSAgICAjZGVmaW5lIFBPUlRNQUNST19IDQorI2RlZmluZSBQT1JUTUFDUk9fSA0KIA0KLSAgICAjaW5jbHVkZSA8aW50cmluc2ljcy5oPg0KKyNpbmNsdWRlIDxpbnRyaW5zaWNzLmg+DQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgZXh0ZXJuICJDIiB7DQotICAgICNlbmRpZg0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KIA0KIC8qIEhhcmR3YXJlIHNwZWNpZmljcy4gKi8NCi0gICAgI2luY2x1ZGUgIm1hY2hpbmUuaCINCisjaW5jbHVkZSAibWFjaGluZS5oIg0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgKiBQb3J0IHNwZWNpZmljIGRlZmluaXRpb25zLg0KQEAgLTQ5LDEwMSArNDksMTAyIEBACiAgKi8NCiANCiAvKiBUeXBlIGRlZmluaXRpb25zIC0gdGhlc2UgYXJlIGEgYml0IGxlZ2FjeSBhbmQgbm90IHJlYWxseSB1c2VkIG5vdywgb3RoZXIgdGhhbg0KLSAqIHBvcnRTVEFDS19UWVBFIGFuZCBwb3J0QkFTRV9UWVBFLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRDSEFSICAgICAgICAgIGNoYXINCi0gICAgI2RlZmluZSBwb3J0RkxPQVQgICAgICAgICBmbG9hdA0KLSAgICAjZGVmaW5lIHBvcnRET1VCTEUgICAgICAgIGRvdWJsZQ0KLSAgICAjZGVmaW5lIHBvcnRMT05HICAgICAgICAgIGxvbmcNCi0gICAgI2RlZmluZSBwb3J0U0hPUlQgICAgICAgICBzaG9ydA0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19UWVBFICAgIHVpbnQzMl90DQotICAgICNkZWZpbmUgcG9ydEJBU0VfVFlQRSAgICAgbG9uZw0KK3BvcnRTVEFDS19UWVBFIGFuZCBwb3J0QkFTRV9UWVBFLiAqLw0KKyNkZWZpbmUgcG9ydENIQVIJCWNoYXINCisjZGVmaW5lIHBvcnRGTE9BVAkJZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUJCWRvdWJsZQ0KKyNkZWZpbmUgcG9ydExPTkcJCWxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVAkJc2hvcnQNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFCXVpbnQzMl90DQorI2RlZmluZSBwb3J0QkFTRV9UWVBFCWxvbmcNCiANCi0gICAgdHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSAgIFN0YWNrVHlwZV90Ow0KLSAgICB0eXBlZGVmIGxvbmcgICAgICAgICAgICAgQmFzZVR5cGVfdDsNCi0gICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nICAgIFVCYXNlVHlwZV90Ow0KK3R5cGVkZWYgcG9ydFNUQUNLX1RZUEUgU3RhY2tUeXBlX3Q7DQordHlwZWRlZiBsb25nIEJhc2VUeXBlX3Q7DQordHlwZWRlZiB1bnNpZ25lZCBsb25nIFVCYXNlVHlwZV90Ow0KIA0KIA0KLSAgICAjaWYgKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KLSAgICAgICAgdHlwZWRlZiB1aW50MTZfdCAgICAgVGlja1R5cGVfdDsNCi0gICAgICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAgICAgICAgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQotICAgICNlbHNlDQotICAgICAgICB0eXBlZGVmIHVpbnQzMl90ICAgICBUaWNrVHlwZV90Ow0KLSAgICAgICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICAgICAgICAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwNCisjaWYoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQorCXR5cGVkZWYgdWludDE2X3QgVGlja1R5cGVfdDsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggVGlja1R5cGVfdCApIDB4ZmZmZg0KKyNlbHNlDQorCXR5cGVkZWYgdWludDMyX3QgVGlja1R5cGVfdDsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTA0KIA0KLS8qIDMyLWJpdCB0aWNrIHR5cGUgb24gYSAzMi1iaXQgYXJjaGl0ZWN0dXJlLCBzbyByZWFkcyBvZiB0aGUgdGljayBjb3VudCBkbw0KLSAqIG5vdCBuZWVkIHRvIGJlIGd1YXJkZWQgd2l0aCBhIGNyaXRpY2FsIHNlY3Rpb24uICovDQotICAgICAgICAjZGVmaW5lIHBvcnRUSUNLX1RZUEVfSVNfQVRPTUlDICAgIDENCi0gICAgI2VuZGlmDQorCS8qIDMyLWJpdCB0aWNrIHR5cGUgb24gYSAzMi1iaXQgYXJjaGl0ZWN0dXJlLCBzbyByZWFkcyBvZiB0aGUgdGljayBjb3VudCBkbw0KKwlub3QgbmVlZCB0byBiZSBndWFyZGVkIHdpdGggYSBjcml0aWNhbCBzZWN0aW9uLiAqLw0KKwkjZGVmaW5lIHBvcnRUSUNLX1RZUEVfSVNfQVRPTUlDIDENCisjZW5kaWYNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBIYXJkd2FyZSBzcGVjaWZpY3MuICovDQotICAgICNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UICAgIDggICAgIC8qIENvdWxkIG1ha2UgZm91ciwgYWNjb3JkaW5nIHRvIG1hbnVhbC4gKi8NCi0gICAgI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RIICAgICAgLTENCi0gICAgI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMgICAgKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCi0gICAgI2RlZmluZSBwb3J0Tk9QKCkgICAgX19ub19vcGVyYXRpb24oKQ0KKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UCQkJOAkvKiBDb3VsZCBtYWtlIGZvdXIsIGFjY29yZGluZyB0byBtYW51YWwuICovDQorI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RICQkJLTENCisjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUwkJCSggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQorI2RlZmluZSBwb3J0Tk9QKCkJCQkJCV9fbm9fb3BlcmF0aW9uKCkNCiANCi0gICAgI2RlZmluZSBwb3J0WUlFTEQoKSAgICAgICAgICAgXA0KLSAgICBfX2FzbSB2b2xhdGlsZSAgICAgICAgICAgICAgICBcDQotICAgICggICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICJNT1YuTCAjMHg4NzJFMCwgUjE1CQlcbiJcDQotICAgICAgICAiTU9WLkIgIzEsIFtSMTVdCQkJXG4iXA0KLSAgICAgICAgIk1PVi5MIFtSMTVdLCBSMTUJCQlcbiJcDQotICAgICAgICA6OjogIlIxNSIgICAgICAgICAgICAgICAgIFwNCi0gICAgKQ0KKyNkZWZpbmUgcG9ydFlJRUxEKCkJCQkJCQlcDQorCV9fYXNtIHZvbGF0aWxlCQkJCQkJXA0KKwkoCQkJCQkJCQkJXA0KKwkJIk1PVi5MICMweDg3MkUwLCBSMTUJCVxuIglcDQorCQkiTU9WLkIgIzEsIFtSMTVdCQkJXG4iCVwNCisJCSJNT1YuTCBbUjE1XSwgUjE1CQkJXG4iCVwNCisJCTo6OiAiUjE1IgkJCQkJCVwNCisJKQ0KIA0KLSAgICAjZGVmaW5lIHBvcnRZSUVMRF9GUk9NX0lTUiggeCApICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoICggeCApICE9IHBkRkFMU0UgKSB7IHBvcnRZSUVMRCgpOyB9DQorI2RlZmluZSBwb3J0WUlFTERfRlJPTV9JU1IoIHggKQlpZiggKCB4ICkgIT0gcGRGQUxTRSApIHsgcG9ydFlJRUxEKCk7IH0NCiANCiAvKiBUaGVzZSBtYWNyb3Mgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHksIGJ1dCB0aHJvdWdoIHRoZQ0KLSAqIHRhc2tFTlRFUl9DUklUSUNBTCgpIGFuZCB0YXNrRVhJVF9DUklUSUNBTCgpIG1hY3Jvcy4gIEFuIGV4dHJhIGNoZWNrIGlzDQotICogcGVyZm9ybWVkIGlmIGNvbmZpZ0FTU0VSVCgpIGlzIGRlZmluZWQgdG8gZW5zdXJlIGFuIGFzc2VydGlvbiBoYW5kbGVyIGRvZXMgbm90DQotICogaW5hZHZlcnRlbnRseSBhdHRlbXB0IHRvIGxvd2VyIHRoZSBJUEwgd2hlbiB0aGUgY2FsbCB0byBhc3NlcnQgd2FzIHRyaWdnZXJlZA0KLSAqIGJlY2F1c2UgdGhlIElQTCB2YWx1ZSB3YXMgZm91bmQgdG8gYmUgYWJvdmUJY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZDQotICogd2hlbiBhbiBJU1Igc2FmZSBGcmVlUlRPUyBBUEkgZnVuY3Rpb24gd2FzIGV4ZWN1dGVkLiAgSVNSIHNhZmUgRnJlZVJUT1MgQVBJDQotICogZnVuY3Rpb25zIGFyZSB0aG9zZSB0aGF0IGVuZCBpbiBGcm9tSVNSLiAgRnJlZVJUT1MgbWFpbnRhaW5zIGEgc2VwYXJhdGUNCi0gKiBpbnRlcnJ1cHQgQVBJIHRvIGVuc3VyZSBBUEkgZnVuY3Rpb24gYW5kIGludGVycnVwdCBlbnRyeSBpcyBhcyBmYXN0IGFuZCBhcw0KLSAqIHNpbXBsZSBhcyBwb3NzaWJsZS4gKi8NCi0gICAgI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKSAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2V0X2ludGVycnVwdF9sZXZlbCggKCB1aW50OF90ICkgMCApDQotICAgICNpZmRlZiBjb25maWdBU1NFUlQNCi0gICAgICAgICNkZWZpbmUgcG9ydEFTU0VSVF9JRl9JTlRFUlJVUFRfUFJJT1JJVFlfSU5WQUxJRCgpICAgIGNvbmZpZ0FTU0VSVCggKCBfX2dldF9pbnRlcnJ1cHRfbGV2ZWwoKSA8PSBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgKSApDQotICAgICAgICAjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAgICAgICAgICAgICAgICAgICAgICBpZiggX19nZXRfaW50ZXJydXB0X2xldmVsKCkgPCBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgKSBfX3NldF9pbnRlcnJ1cHRfbGV2ZWwoICggdWludDhfdCApIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSApDQotICAgICNlbHNlDQotICAgICAgICAjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAgICAgICAgICAgICAgICAgICAgICBfX3NldF9pbnRlcnJ1cHRfbGV2ZWwoICggdWludDhfdCApIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSApDQotICAgICNlbmRpZg0KK3Rhc2tFTlRFUl9DUklUSUNBTCgpIGFuZCB0YXNrRVhJVF9DUklUSUNBTCgpIG1hY3Jvcy4gIEFuIGV4dHJhIGNoZWNrIGlzDQorcGVyZm9ybWVkIGlmIGNvbmZpZ0FTU0VSVCgpIGlzIGRlZmluZWQgdG8gZW5zdXJlIGFuIGFzc2VydGlvbiBoYW5kbGVyIGRvZXMgbm90DQoraW5hZHZlcnRlbnRseSBhdHRlbXB0IHRvIGxvd2VyIHRoZSBJUEwgd2hlbiB0aGUgY2FsbCB0byBhc3NlcnQgd2FzIHRyaWdnZXJlZA0KK2JlY2F1c2UgdGhlIElQTCB2YWx1ZSB3YXMgZm91bmQgdG8gYmUgYWJvdmUJY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZDQord2hlbiBhbiBJU1Igc2FmZSBGcmVlUlRPUyBBUEkgZnVuY3Rpb24gd2FzIGV4ZWN1dGVkLiAgSVNSIHNhZmUgRnJlZVJUT1MgQVBJDQorZnVuY3Rpb25zIGFyZSB0aG9zZSB0aGF0IGVuZCBpbiBGcm9tSVNSLiAgRnJlZVJUT1MgbWFpbnRhaW5zIGEgc2VwYXJhdGUNCitpbnRlcnJ1cHQgQVBJIHRvIGVuc3VyZSBBUEkgZnVuY3Rpb24gYW5kIGludGVycnVwdCBlbnRyeSBpcyBhcyBmYXN0IGFuZCBhcw0KK3NpbXBsZSBhcyBwb3NzaWJsZS4gKi8NCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpIAlfX3NldF9pbnRlcnJ1cHRfbGV2ZWwoICggdWludDhfdCApIDAgKQ0KKyNpZmRlZiBjb25maWdBU1NFUlQNCisJI2RlZmluZSBwb3J0QVNTRVJUX0lGX0lOVEVSUlVQVF9QUklPUklUWV9JTlZBTElEKCkgY29uZmlnQVNTRVJUKCAoIF9fZ2V0X2ludGVycnVwdF9sZXZlbCgpIDw9IGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSApICkNCisJI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgCWlmKCBfX2dldF9pbnRlcnJ1cHRfbGV2ZWwoKSA8IGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSApIF9fc2V0X2ludGVycnVwdF9sZXZlbCggKCB1aW50OF90ICkgY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkNCisjZWxzZQ0KKwkjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAJX19zZXRfaW50ZXJydXB0X2xldmVsKCAoIHVpbnQ4X3QgKSBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgKQ0KKyNlbmRpZg0KIA0KIC8qIENyaXRpY2FsIG5lc3RpbmcgY291bnRzIGFyZSBzdG9yZWQgaW4gdGhlIFRDQi4gKi8NCi0gICAgI2RlZmluZSBwb3J0Q1JJVElDQUxfTkVTVElOR19JTl9UQ0IgICAgKCAxICkNCisjZGVmaW5lIHBvcnRDUklUSUNBTF9ORVNUSU5HX0lOX1RDQiAoIDEgKQ0KIA0KIC8qIFRoZSBjcml0aWNhbCBuZXN0aW5nIGZ1bmN0aW9ucyBkZWZpbmVkIHdpdGhpbiB0YXNrcy5jLiAqLw0KLSAgICBleHRlcm4gdm9pZCB2VGFza0VudGVyQ3JpdGljYWwoIHZvaWQgKTsNCi0gICAgZXh0ZXJuIHZvaWQgdlRhc2tFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCi0gICAgI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2VGFza0VudGVyQ3JpdGljYWwoKQ0KLSAgICAjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZUYXNrRXhpdENyaXRpY2FsKCkNCitleHRlcm4gdm9pZCB2VGFza0VudGVyQ3JpdGljYWwoIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2VGFza0V4aXRDcml0aWNhbCggdm9pZCApOw0KKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkJdlRhc2tFbnRlckNyaXRpY2FsKCkNCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkJCXZUYXNrRXhpdENyaXRpY2FsKCkNCiANCiAvKiBBcyB0aGlzIHBvcnQgYWxsb3dzIGludGVycnVwdCBuZXN0aW5nLi4uICovDQotICAgICNkZWZpbmUgcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19nZXRfaW50ZXJydXB0X2xldmVsKCk7IHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKQ0KLSAgICAjZGVmaW5lIHBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUiggdXhTYXZlZEludGVycnVwdFN0YXR1cyApICAgIF9fc2V0X2ludGVycnVwdF9sZXZlbCggKCB1aW50OF90ICkgKCB1eFNhdmVkSW50ZXJydXB0U3RhdHVzICkgKQ0KKyNkZWZpbmUgcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpIF9fZ2V0X2ludGVycnVwdF9sZXZlbCgpOyBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkNCisjZGVmaW5lIHBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUiggdXhTYXZlZEludGVycnVwdFN0YXR1cyApIF9fc2V0X2ludGVycnVwdF9sZXZlbCggKCB1aW50OF90ICkgKCB1eFNhdmVkSW50ZXJydXB0U3RhdHVzICkgKQ0KIA0KIC8qIFRpY2tsZXNzIGlkbGUvbG93IHBvd2VyIGZ1bmN0aW9uYWxpdHkuICovDQotICAgICNpZiBjb25maWdVU0VfVElDS0xFU1NfSURMRSA9PSAxDQotICAgICAgICAjaWZuZGVmIHBvcnRTVVBQUkVTU19USUNLU19BTkRfU0xFRVANCi0gICAgICAgICAgICBleHRlcm4gdm9pZCB2UG9ydFN1cHByZXNzVGlja3NBbmRTbGVlcCggVGlja1R5cGVfdCB4RXhwZWN0ZWRJZGxlVGltZSApOw0KLSAgICAgICAgICAgICNkZWZpbmUgcG9ydFNVUFBSRVNTX1RJQ0tTX0FORF9TTEVFUCggeEV4cGVjdGVkSWRsZVRpbWUgKSAgICB2UG9ydFN1cHByZXNzVGlja3NBbmRTbGVlcCggeEV4cGVjdGVkSWRsZVRpbWUgKQ0KLSAgICAgICAgI2VuZGlmDQotICAgICNlbmRpZg0KKyNpZiBjb25maWdVU0VfVElDS0xFU1NfSURMRSA9PSAxDQorCSNpZm5kZWYgcG9ydFNVUFBSRVNTX1RJQ0tTX0FORF9TTEVFUA0KKwkJZXh0ZXJuIHZvaWQgdlBvcnRTdXBwcmVzc1RpY2tzQW5kU2xlZXAoIFRpY2tUeXBlX3QgeEV4cGVjdGVkSWRsZVRpbWUgKTsNCisJCSNkZWZpbmUgcG9ydFNVUFBSRVNTX1RJQ0tTX0FORF9TTEVFUCggeEV4cGVjdGVkSWRsZVRpbWUgKSB2UG9ydFN1cHByZXNzVGlja3NBbmRTbGVlcCggeEV4cGVjdGVkSWRsZVRpbWUgKQ0KKwkjZW5kaWYNCisjZW5kaWYNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBUYXNrIGZ1bmN0aW9uIG1hY3JvcyBhcyBkZXNjcmliZWQgb24gdGhlIEZyZWVSVE9TLm9yZyBXRUIgc2l0ZS4gKi8NCi0gICAgI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQotICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgICAgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCiANCiAvKiBQcmV2ZW50IHdhcm5pbmdzIG9mIHVuZGVmaW5lZCBiZWhhdmlvdXI6IHRoZSBvcmRlciBvZiB2b2xhdGlsZSBhY2Nlc3NlcyBpcw0KLSAqIHVuZGVmaW5lZCAtIGFsbCB3YXJuaW5ncyBoYXZlIGJlZW4gbWFudWFsbHkgY2hlY2tlZCBhbmQgYXJlIG5vdCBhbiBpc3N1ZSwgYW5kDQotICogdGhlIHdhcm5pbmdzIGNhbm5vdCBiZSBwcmV2ZW50IGJ5IGNvZGUgY2hhbmdlcyB3aXRob3V0IHVuZGVzaXJhYmxlIGVmZmVjdHMuICovDQotICAgICNwcmFnbWEgZGlhZ19zdXBwcmVzcz1QYTA4Mg0KK3VuZGVmaW5lZCAtIGFsbCB3YXJuaW5ncyBoYXZlIGJlZW4gbWFudWFsbHkgY2hlY2tlZCBhbmQgYXJlIG5vdCBhbiBpc3N1ZSwgYW5kDQordGhlIHdhcm5pbmdzIGNhbm5vdCBiZSBwcmV2ZW50IGJ5IGNvZGUgY2hhbmdlcyB3aXRob3V0IHVuZGVzaXJhYmxlIGVmZmVjdHMuICovDQorI3ByYWdtYSBkaWFnX3N1cHByZXNzPVBhMDgyDQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgfQ0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQogDQogI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvSUFSL1JYNjAwL3BvcnQuYyBiL3BvcnRhYmxlL0lBUi9SWDYwMC9wb3J0LmMKaW5kZXggYTQxM2QwMS4uNDVhNzE3NCAxMDA2NDQKLS0tIGEvcG9ydGFibGUvSUFSL1JYNjAwL3BvcnQuYworKysgYi9wb3J0YWJsZS9JQVIvUlg2MDAvcG9ydC5jCkBAIC0yNiw4ICsyNiw4IEBACiAgKi8NCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgU0gyQSBwb3J0Lg0KLSotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgU0gyQSBwb3J0Lg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogU2NoZWR1bGVyIGluY2x1ZGVzLiAqLw0KICNpbmNsdWRlICJGcmVlUlRPUy5oIg0KQEAgLTQyLDkgKzQyLDkgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFRhc2tzIHNob3VsZCBzdGFydCB3aXRoIGludGVycnVwdHMgZW5hYmxlZCBhbmQgaW4gU3VwZXJ2aXNvciBtb2RlLCB0aGVyZWZvcmUNCi0gKiBQU1cgaXMgc2V0IHdpdGggVSBhbmQgSSBzZXQsIGFuZCBQTSBhbmQgSVBMIGNsZWFyLiAqLw0KLSNkZWZpbmUgcG9ydElOSVRJQUxfUFNXICAgICAoICggU3RhY2tUeXBlX3QgKSAweDAwMDMwMDAwICkNCi0jZGVmaW5lIHBvcnRJTklUSUFMX0ZQU1cgICAgKCAoIFN0YWNrVHlwZV90ICkgMHgwMDAwMDEwMCApDQorUFNXIGlzIHNldCB3aXRoIFUgYW5kIEkgc2V0LCBhbmQgUE0gYW5kIElQTCBjbGVhci4gKi8NCisjZGVmaW5lIHBvcnRJTklUSUFMX1BTVwkgKCAoIFN0YWNrVHlwZV90ICkgMHgwMDAzMDAwMCApDQorI2RlZmluZSBwb3J0SU5JVElBTF9GUFNXCSggKCBTdGFja1R5cGVfdCApIDB4MDAwMDAxMDAgKQ0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KQEAgLTYyLDEzMSArNjIsMTMyIEBACiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi1leHRlcm4gdm9pZCAqIHB4Q3VycmVudFRDQjsNCitleHRlcm4gdm9pZCAqcHhDdXJyZW50VENCOw0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qDQogICogU2VlIGhlYWRlciBmaWxlIGZvciBkZXNjcmlwdGlvbi4NCiAgKi8NCi1TdGFja1R5cGVfdCAqIHB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKiBweFRvcE9mU3RhY2ssDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqIHB2UGFyYW1ldGVycyApDQorU3RhY2tUeXBlX3QgKnB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKnB4VG9wT2ZTdGFjaywgVGFza0Z1bmN0aW9uX3QgcHhDb2RlLCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KIHsNCi0gICAgLyogUjAgaXMgbm90IGluY2x1ZGVkIGFzIGl0IGlzIHRoZSBzdGFjayBwb2ludGVyLiAqLw0KKwkvKiBSMCBpcyBub3QgaW5jbHVkZWQgYXMgaXQgaXMgdGhlIHN0YWNrIHBvaW50ZXIuICovDQogDQotICAgICpweFRvcE9mU3RhY2sgPSAweDAwOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IHBvcnRJTklUSUFMX1BTVzsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHhDb2RlOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgwMDsNCisJcHhUb3BPZlN0YWNrLS07DQorIAkqcHhUb3BPZlN0YWNrID0gcG9ydElOSVRJQUxfUFNXOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBweENvZGU7DQogDQotICAgIC8qIFdoZW4gZGVidWdnaW5nIGl0IGNhbiBiZSB1c2VmdWwgaWYgZXZlcnkgcmVnaXN0ZXIgaXMgc2V0IHRvIGEga25vd24NCi0gICAgICogdmFsdWUuICBPdGhlcndpc2UgY29kZSBzcGFjZSBjYW4gYmUgc2F2ZWQgYnkganVzdCBzZXR0aW5nIHRoZSByZWdpc3RlcnMNCi0gICAgICogdGhhdCBuZWVkIHRvIGJlIHNldC4gKi8NCi0gICAgI2lmZGVmIFVTRV9GVUxMX1JFR0lTVEVSX0lOSVRJQUxJU0FUSU9ODQotICAgICAgICB7DQotICAgICAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICAgICAgICAgKnB4VG9wT2ZTdGFjayA9IDB4ZmZmZmZmZmY7IC8qIHIxNS4gKi8NCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHhlZWVlZWVlZTsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHhkZGRkZGRkZDsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHhjY2NjY2NjYzsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHhiYmJiYmJiYjsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHhhYWFhYWFhYTsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHg5OTk5OTk5OTsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHg4ODg4ODg4ODsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHg3Nzc3Nzc3NzsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHg2NjY2NjY2NjsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHg1NTU1NTU1NTsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHg0NDQ0NDQ0NDsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHgzMzMzMzMzMzsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHgyMjIyMjIyMjsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgIH0NCi0gICAgI2Vsc2UgLyogaWZkZWYgVVNFX0ZVTExfUkVHSVNURVJfSU5JVElBTElTQVRJT04gKi8NCi0gICAgICAgIHsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2sgLT0gMTU7DQotICAgICAgICB9DQotICAgICNlbmRpZiAvKiBpZmRlZiBVU0VfRlVMTF9SRUdJU1RFUl9JTklUSUFMSVNBVElPTiAqLw0KKwkvKiBXaGVuIGRlYnVnZ2luZyBpdCBjYW4gYmUgdXNlZnVsIGlmIGV2ZXJ5IHJlZ2lzdGVyIGlzIHNldCB0byBhIGtub3duDQorCXZhbHVlLiAgT3RoZXJ3aXNlIGNvZGUgc3BhY2UgY2FuIGJlIHNhdmVkIGJ5IGp1c3Qgc2V0dGluZyB0aGUgcmVnaXN0ZXJzDQorCXRoYXQgbmVlZCB0byBiZSBzZXQuICovDQorCSNpZmRlZiBVU0VfRlVMTF9SRUdJU1RFUl9JTklUSUFMSVNBVElPTg0KKwl7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweGZmZmZmZmZmOwkvKiByMTUuICovDQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweGVlZWVlZWVlOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHhkZGRkZGRkZDsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4Y2NjY2NjY2M7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweGJiYmJiYmJiOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHhhYWFhYWFhYTsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4OTk5OTk5OTk7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweDg4ODg4ODg4Ow0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHg3Nzc3Nzc3NzsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4NjY2NjY2NjY7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweDU1NTU1NTU1Ow0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHg0NDQ0NDQ0NDsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4MzMzMzMzMzM7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweDIyMjIyMjIyOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCX0NCisJI2Vsc2UNCisJew0KKwkJcHhUb3BPZlN0YWNrIC09IDE1Ow0KKwl9DQorCSNlbmRpZg0KIA0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB2UGFyYW1ldGVyczsgLyogUjEgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSBwb3J0SU5JVElBTF9GUFNXOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MTIzNDU2Nzg7IC8qIEFjY3VtdWxhdG9yLiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4ODc2NTQzMjE7IC8qIEFjY3VtdWxhdG9yLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB2UGFyYW1ldGVyczsgLyogUjEgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSBwb3J0SU5JVElBTF9GUFNXOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MTIzNDU2Nzg7IC8qIEFjY3VtdWxhdG9yLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4ODc2NTQzMjE7IC8qIEFjY3VtdWxhdG9yLiAqLw0KIA0KLSAgICByZXR1cm4gcHhUb3BPZlN0YWNrOw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBCYXNlVHlwZV90IHhQb3J0U3RhcnRTY2hlZHVsZXIoIHZvaWQgKQ0KIHsNCi0gICAgZXh0ZXJuIHZvaWQgdkFwcGxpY2F0aW9uU2V0dXBUaW1lckludGVycnVwdCggdm9pZCApOw0KK2V4dGVybiB2b2lkIHZBcHBsaWNhdGlvblNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKTsNCiANCi0gICAgLyogVXNlIHB4Q3VycmVudFRDQiBqdXN0IHNvIGl0IGRvZXMgbm90IGdldCBvcHRpbWlzZWQgYXdheS4gKi8NCi0gICAgaWYoIHB4Q3VycmVudFRDQiAhPSBOVUxMICkNCi0gICAgew0KLSAgICAgICAgLyogQ2FsbCBhbiBhcHBsaWNhdGlvbiBmdW5jdGlvbiB0byBzZXQgdXAgdGhlIHRpbWVyIHRoYXQgd2lsbCBnZW5lcmF0ZSB0aGUNCi0gICAgICAgICAqIHRpY2sgaW50ZXJydXB0LiAgVGhpcyB3YXkgdGhlIGFwcGxpY2F0aW9uIGNhbiBkZWNpZGUgd2hpY2ggcGVyaXBoZXJhbCB0bw0KLSAgICAgICAgICogdXNlLiAgQSBkZW1vIGFwcGxpY2F0aW9uIGlzIHByb3ZpZGVkIHRvIHNob3cgYSBzdWl0YWJsZSBleGFtcGxlLiAqLw0KLSAgICAgICAgdkFwcGxpY2F0aW9uU2V0dXBUaW1lckludGVycnVwdCgpOw0KKwkvKiBVc2UgcHhDdXJyZW50VENCIGp1c3Qgc28gaXQgZG9lcyBub3QgZ2V0IG9wdGltaXNlZCBhd2F5LiAqLw0KKwlpZiggcHhDdXJyZW50VENCICE9IE5VTEwgKQ0KKwl7DQorCQkvKiBDYWxsIGFuIGFwcGxpY2F0aW9uIGZ1bmN0aW9uIHRvIHNldCB1cCB0aGUgdGltZXIgdGhhdCB3aWxsIGdlbmVyYXRlIHRoZQ0KKwkJdGljayBpbnRlcnJ1cHQuICBUaGlzIHdheSB0aGUgYXBwbGljYXRpb24gY2FuIGRlY2lkZSB3aGljaCBwZXJpcGhlcmFsIHRvDQorCQl1c2UuICBBIGRlbW8gYXBwbGljYXRpb24gaXMgcHJvdmlkZWQgdG8gc2hvdyBhIHN1aXRhYmxlIGV4YW1wbGUuICovDQorCQl2QXBwbGljYXRpb25TZXR1cFRpbWVySW50ZXJydXB0KCk7DQogDQotICAgICAgICAvKiBFbmFibGUgdGhlIHNvZnR3YXJlIGludGVycnVwdC4gKi8NCi0gICAgICAgIF9JRU4oIF9JQ1VfU1dJTlQgKSA9IDE7DQorCQkvKiBFbmFibGUgdGhlIHNvZnR3YXJlIGludGVycnVwdC4gKi8NCisJCV9JRU4oIF9JQ1VfU1dJTlQgKSA9IDE7DQogDQotICAgICAgICAvKiBFbnN1cmUgdGhlIHNvZnR3YXJlIGludGVycnVwdCBpcyBjbGVhci4gKi8NCi0gICAgICAgIF9JUiggX0lDVV9TV0lOVCApID0gMDsNCisJCS8qIEVuc3VyZSB0aGUgc29mdHdhcmUgaW50ZXJydXB0IGlzIGNsZWFyLiAqLw0KKwkJX0lSKCBfSUNVX1NXSU5UICkgPSAwOw0KIA0KLSAgICAgICAgLyogRW5zdXJlIHRoZSBzb2Z0d2FyZSBpbnRlcnJ1cHQgaXMgc2V0IHRvIHRoZSBrZXJuZWwgcHJpb3JpdHkuICovDQotICAgICAgICBfSVBSKCBfSUNVX1NXSU5UICkgPSBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZOw0KKwkJLyogRW5zdXJlIHRoZSBzb2Z0d2FyZSBpbnRlcnJ1cHQgaXMgc2V0IHRvIHRoZSBrZXJuZWwgcHJpb3JpdHkuICovDQorCQlfSVBSKCBfSUNVX1NXSU5UICkgPSBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZOw0KIA0KLSAgICAgICAgLyogU3RhcnQgdGhlIGZpcnN0IHRhc2suICovDQotICAgICAgICBwcnZTdGFydEZpcnN0VGFzaygpOw0KLSAgICB9DQorCQkvKiBTdGFydCB0aGUgZmlyc3QgdGFzay4gKi8NCisJCXBydlN0YXJ0Rmlyc3RUYXNrKCk7DQorCX0NCiANCi0gICAgLyogU2hvdWxkIG5vdCBnZXQgaGVyZS4gKi8NCi0gICAgcmV0dXJuIHBkRkFJTDsNCisJLyogU2hvdWxkIG5vdCBnZXQgaGVyZS4gKi8NCisJcmV0dXJuIHBkRkFJTDsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogI3ByYWdtYSB2ZWN0b3IgPSBjb25maWdUSUNLX1ZFQ1RPUg0KIF9faW50ZXJydXB0IHZvaWQgdlRpY2tJU1IoIHZvaWQgKQ0KIHsNCi0gICAgLyogUmUtZW5hYmxlIGludGVycnVwdHMuICovDQotICAgIF9fZW5hYmxlX2ludGVycnVwdCgpOw0KKwkvKiBSZS1lbmFibGUgaW50ZXJydXB0cy4gKi8NCisJX19lbmFibGVfaW50ZXJydXB0KCk7DQogDQotICAgIC8qIEluY3JlbWVudCB0aGUgdGljaywgYW5kIHBlcmZvcm0gYW55IHByb2Nlc3NpbmcgdGhlIG5ldyB0aWNrIHZhbHVlDQotICAgICAqIG5lY2Vzc2l0YXRlcy4gKi8NCi0gICAgX19zZXRfaW50ZXJydXB0X2xldmVsKCBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgKTsNCi0gICAgew0KLSAgICAgICAgaWYoIHhUYXNrSW5jcmVtZW50VGljaygpICE9IHBkRkFMU0UgKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHRhc2tZSUVMRCgpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIF9fc2V0X2ludGVycnVwdF9sZXZlbCggY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWSApOw0KKwkvKiBJbmNyZW1lbnQgdGhlIHRpY2ssIGFuZCBwZXJmb3JtIGFueSBwcm9jZXNzaW5nIHRoZSBuZXcgdGljayB2YWx1ZQ0KKwluZWNlc3NpdGF0ZXMuICovDQorCV9fc2V0X2ludGVycnVwdF9sZXZlbCggY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICk7DQorCXsNCisJCWlmKCB4VGFza0luY3JlbWVudFRpY2soKSAhPSBwZEZBTFNFICkNCisJCXsNCisJCQl0YXNrWUlFTEQoKTsNCisJCX0NCisJfQ0KKwlfX3NldF9pbnRlcnJ1cHRfbGV2ZWwoIGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkgKTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogdm9pZCB2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApDQogew0KLSAgICAvKiBOb3QgaW1wbGVtZW50ZWQgaW4gcG9ydHMgd2hlcmUgdGhlcmUgaXMgbm90aGluZyB0byByZXR1cm4gdG8uDQotICAgICAqIEFydGlmaWNpYWxseSBmb3JjZSBhbiBhc3NlcnQuICovDQotICAgIGNvbmZpZ0FTU0VSVCggcHhDdXJyZW50VENCID09IE5VTEwgKTsNCisJLyogTm90IGltcGxlbWVudGVkIGluIHBvcnRzIHdoZXJlIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmV0dXJuIHRvLg0KKwlBcnRpZmljaWFsbHkgZm9yY2UgYW4gYXNzZXJ0LiAqLw0KKwljb25maWdBU1NFUlQoIHB4Q3VycmVudFRDQiA9PSBOVUxMICk7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKw0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0lBUi9SWDYwMC9wb3J0bWFjcm8uaCBiL3BvcnRhYmxlL0lBUi9SWDYwMC9wb3J0bWFjcm8uaAppbmRleCAzZDMwMTg1Li42Njk2M2M5IDEwMDY0NAotLS0gYS9wb3J0YWJsZS9JQVIvUlg2MDAvcG9ydG1hY3JvLmgKKysrIGIvcG9ydGFibGUvSUFSL1JYNjAwL3BvcnRtYWNyby5oCkBAIC0yNywxMyArMjcsMTMgQEAKIA0KIA0KICNpZm5kZWYgUE9SVE1BQ1JPX0gNCi0gICAgI2RlZmluZSBQT1JUTUFDUk9fSA0KKyNkZWZpbmUgUE9SVE1BQ1JPX0gNCiANCi0gICAgI2luY2x1ZGUgPGludHJpbnNpY3MuaD4NCisjaW5jbHVkZSA8aW50cmluc2ljcy5oPg0KIA0KLSAgICAjaWZkZWYgX19jcGx1c3BsdXMNCi0gICAgICAgIGV4dGVybiAiQyIgew0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICogUG9ydCBzcGVjaWZpYyBkZWZpbml0aW9ucy4NCkBAIC00Niw5MyArNDYsOTQgQEAKICAqLw0KIA0KIC8qIFR5cGUgZGVmaW5pdGlvbnMgLSB0aGVzZSBhcmUgYSBiaXQgbGVnYWN5IGFuZCBub3QgcmVhbGx5IHVzZWQgbm93LCBvdGhlciB0aGFuDQotICogcG9ydFNUQUNLX1RZUEUgYW5kIHBvcnRCQVNFX1RZUEUuICovDQotICAgICNkZWZpbmUgcG9ydENIQVIgICAgICAgICAgY2hhcg0KLSAgICAjZGVmaW5lIHBvcnRGTE9BVCAgICAgICAgIGZsb2F0DQotICAgICNkZWZpbmUgcG9ydERPVUJMRSAgICAgICAgZG91YmxlDQotICAgICNkZWZpbmUgcG9ydExPTkcgICAgICAgICAgbG9uZw0KLSAgICAjZGVmaW5lIHBvcnRTSE9SVCAgICAgICAgIHNob3J0DQotICAgICNkZWZpbmUgcG9ydFNUQUNLX1RZUEUgICAgdWludDMyX3QNCi0gICAgI2RlZmluZSBwb3J0QkFTRV9UWVBFICAgICBsb25nDQorcG9ydFNUQUNLX1RZUEUgYW5kIHBvcnRCQVNFX1RZUEUuICovDQorI2RlZmluZSBwb3J0Q0hBUgkJY2hhcg0KKyNkZWZpbmUgcG9ydEZMT0FUCQlmbG9hdA0KKyNkZWZpbmUgcG9ydERPVUJMRQkJZG91YmxlDQorI2RlZmluZSBwb3J0TE9ORwkJbG9uZw0KKyNkZWZpbmUgcG9ydFNIT1JUCQlzaG9ydA0KKyNkZWZpbmUgcG9ydFNUQUNLX1RZUEUJdWludDMyX3QNCisjZGVmaW5lIHBvcnRCQVNFX1RZUEUJbG9uZw0KIA0KLSAgICB0eXBlZGVmIHBvcnRTVEFDS19UWVBFICAgU3RhY2tUeXBlX3Q7DQotICAgIHR5cGVkZWYgbG9uZyAgICAgICAgICAgICBCYXNlVHlwZV90Ow0KLSAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgICAgVUJhc2VUeXBlX3Q7DQordHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSBTdGFja1R5cGVfdDsNCit0eXBlZGVmIGxvbmcgQmFzZVR5cGVfdDsNCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgVUJhc2VUeXBlX3Q7DQogDQogDQotICAgICNpZiAoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQotICAgICAgICB0eXBlZGVmIHVpbnQxNl90ICAgICBUaWNrVHlwZV90Ow0KLSAgICAgICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICAgICAgICAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmYNCi0gICAgI2Vsc2UNCi0gICAgICAgIHR5cGVkZWYgdWludDMyX3QgICAgIFRpY2tUeXBlX3Q7DQotICAgICAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgICAgICAgICAgICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTA0KKyNpZiggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCisJdHlwZWRlZiB1aW50MTZfdCBUaWNrVHlwZV90Ow0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQorI2Vsc2UNCisJdHlwZWRlZiB1aW50MzJfdCBUaWNrVHlwZV90Ow0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQogDQotLyogMzItYml0IHRpY2sgdHlwZSBvbiBhIDMyLWJpdCBhcmNoaXRlY3R1cmUsIHNvIHJlYWRzIG9mIHRoZSB0aWNrIGNvdW50IGRvDQotICogbm90IG5lZWQgdG8gYmUgZ3VhcmRlZCB3aXRoIGEgY3JpdGljYWwgc2VjdGlvbi4gKi8NCi0gICAgICAgICNkZWZpbmUgcG9ydFRJQ0tfVFlQRV9JU19BVE9NSUMgICAgMQ0KLSAgICAjZW5kaWYNCisJLyogMzItYml0IHRpY2sgdHlwZSBvbiBhIDMyLWJpdCBhcmNoaXRlY3R1cmUsIHNvIHJlYWRzIG9mIHRoZSB0aWNrIGNvdW50IGRvDQorCW5vdCBuZWVkIHRvIGJlIGd1YXJkZWQgd2l0aCBhIGNyaXRpY2FsIHNlY3Rpb24uICovDQorCSNkZWZpbmUgcG9ydFRJQ0tfVFlQRV9JU19BVE9NSUMgMQ0KKyNlbmRpZg0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIEhhcmR3YXJlIHNwZWNpZmljcy4gKi8NCi0gICAgI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQgICAgOCAgICAgLyogQ291bGQgbWFrZSBmb3VyLCBhY2NvcmRpbmcgdG8gbWFudWFsLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEggICAgICAtMQ0KLSAgICAjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUyAgICAoICggVGlja1R5cGVfdCApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KLSAgICAjZGVmaW5lIHBvcnROT1AoKSAgICBfX25vX29wZXJhdGlvbigpDQorI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQJCQk4CS8qIENvdWxkIG1ha2UgZm91ciwgYWNjb3JkaW5nIHRvIG1hbnVhbC4gKi8NCisjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEgJCQktMQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TCQkJKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCisjZGVmaW5lIHBvcnROT1AoKQkJCQkJX19ub19vcGVyYXRpb24oKQ0KIA0KIC8qIFlpZWxkIGVxdWl2YWxlbnQgdG8gIipwb3J0SVRVX1NXSU5UUiA9IDB4MDE7ICggdm9pZCApICpwb3J0SVRVX1NXSU5UUjsiDQotICogd2hlcmUgcG9ydElUVV9TV0lOVFIgaXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBzb2Z0d2FyZSBpbnRlcnJ1cHQgcmVnaXN0ZXINCi0gKiAoMHgwMDA4NzJFMCkuICBEb24ndCByZWx5IG9uIHRoZSBhc3NlbWJsZXIgdG8gc2VsZWN0IGEgcmVnaXN0ZXIsIHNvIGluc3RlYWQNCi0gKiBzYXZlIGFuZCByZXN0b3JlIGNsb2JiZXJlZCByZWdpc3RlcnMgbWFudWFsbHkuICovDQotICAgICNkZWZpbmUgcG9ydFlJRUxEKCkgICAgICAgICAgIFwNCi0gICAgX19hc20gdm9sYXRpbGUgICAgICAgICAgICAgICAgXA0KLSAgICAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAiUFVTSC5MCVIxMAkJCQkJXG4iXA0KLSAgICAgICAgIk1PVi5MCSMweDg3MkUwLCBSMTAJCVxuIlwNCi0gICAgICAgICJNT1YuQgkjMHgxLCBbUjEwXQkJCVxuIlwNCi0gICAgICAgICJNT1YuTAlbUjEwXSwgUjEwCQkJXG4iXA0KLSAgICAgICAgIlBPUAlSMTAJCQkJCVxuIlwNCi0gICAgKQ0KK3doZXJlIHBvcnRJVFVfU1dJTlRSIGlzIHRoZSBsb2NhdGlvbiBvZiB0aGUgc29mdHdhcmUgaW50ZXJydXB0IHJlZ2lzdGVyDQorKDB4MDAwODcyRTApLiAgRG9uJ3QgcmVseSBvbiB0aGUgYXNzZW1ibGVyIHRvIHNlbGVjdCBhIHJlZ2lzdGVyLCBzbyBpbnN0ZWFkDQorc2F2ZSBhbmQgcmVzdG9yZSBjbG9iYmVyZWQgcmVnaXN0ZXJzIG1hbnVhbGx5LiAqLw0KKyNkZWZpbmUgcG9ydFlJRUxEKCkJCQkJCQkJXA0KKwlfX2FzbSB2b2xhdGlsZSAJCQkJCQkJXA0KKwkoCQkJCQkJCQkJCVwNCisJCSJQVVNILkwJUjEwCQkJCQlcbiIJCVwNCisJCSJNT1YuTAkjMHg4NzJFMCwgUjEwCQlcbiIJCVwNCisJCSJNT1YuQgkjMHgxLCBbUjEwXQkJCVxuIgkJXA0KKwkJIk1PVi5MCVtSMTBdLCBSMTAJCQlcbiIJCVwNCisJCSJQT1AJUjEwCQkJCQlcbiIJCVwNCisJKQ0KIA0KLSAgICAjZGVmaW5lIHBvcnRZSUVMRF9GUk9NX0lTUiggeCApICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoICggeCApICE9IHBkRkFMU0UgKSBwb3J0WUlFTEQoKQ0KKyNkZWZpbmUgcG9ydFlJRUxEX0ZST01fSVNSKCB4ICkJaWYoICggeCApICE9IHBkRkFMU0UgKSBwb3J0WUlFTEQoKQ0KIA0KIC8qIFRoZXNlIG1hY3JvcyBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseSwgYnV0IHRocm91Z2ggdGhlDQotICogdGFza0VOVEVSX0NSSVRJQ0FMKCkgYW5kIHRhc2tFWElUX0NSSVRJQ0FMKCkgbWFjcm9zLiAgQW4gZXh0cmEgY2hlY2sgaXMNCi0gKiBwZXJmb3JtZWQgaWYgY29uZmlnQVNTRVJUKCkgaXMgZGVmaW5lZCB0byBlbnN1cmUgYW4gYXNzZXJ0aW9uIGhhbmRsZXIgZG9lcyBub3QNCi0gKiBpbmFkdmVydGVudGx5IGF0dGVtcHQgdG8gbG93ZXIgdGhlIElQTCB3aGVuIHRoZSBjYWxsIHRvIGFzc2VydCB3YXMgdHJpZ2dlcmVkDQotICogYmVjYXVzZSB0aGUgSVBMIHZhbHVlIHdhcyBmb3VuZCB0byBiZSBhYm92ZQljb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkNCi0gKiB3aGVuIGFuIElTUiBzYWZlIEZyZWVSVE9TIEFQSSBmdW5jdGlvbiB3YXMgZXhlY3V0ZWQuICBJU1Igc2FmZSBGcmVlUlRPUyBBUEkNCi0gKiBmdW5jdGlvbnMgYXJlIHRob3NlIHRoYXQgZW5kIGluIEZyb21JU1IuICBGcmVlUlRPUyBtYWludGFpbnMgYSBzZXBhcmF0ZQ0KLSAqIGludGVycnVwdCBBUEkgdG8gZW5zdXJlIEFQSSBmdW5jdGlvbiBhbmQgaW50ZXJydXB0IGVudHJ5IGlzIGFzIGZhc3QgYW5kIGFzDQotICogc2ltcGxlIGFzIHBvc3NpYmxlLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zZXRfaW50ZXJydXB0X2xldmVsKCAoIHVpbnQ4X3QgKSAwICkNCi0gICAgI2lmZGVmIGNvbmZpZ0FTU0VSVA0KLSAgICAgICAgI2RlZmluZSBwb3J0QVNTRVJUX0lGX0lOVEVSUlVQVF9QUklPUklUWV9JTlZBTElEKCkgICAgY29uZmlnQVNTRVJUKCAoIF9fZ2V0X2ludGVycnVwdF9sZXZlbCgpIDw9IGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSApICkNCi0gICAgICAgICNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpICAgICAgICAgICAgICAgICAgICAgIGlmKCBfX2dldF9pbnRlcnJ1cHRfbGV2ZWwoKSA8IGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSApIF9fc2V0X2ludGVycnVwdF9sZXZlbCggKCB1aW50OF90ICkgY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkNCi0gICAgI2Vsc2UNCi0gICAgICAgICNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpICAgICAgICAgICAgICAgICAgICAgIF9fc2V0X2ludGVycnVwdF9sZXZlbCggKCB1aW50OF90ICkgY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkNCi0gICAgI2VuZGlmDQordGFza0VOVEVSX0NSSVRJQ0FMKCkgYW5kIHRhc2tFWElUX0NSSVRJQ0FMKCkgbWFjcm9zLiAgQW4gZXh0cmEgY2hlY2sgaXMNCitwZXJmb3JtZWQgaWYgY29uZmlnQVNTRVJUKCkgaXMgZGVmaW5lZCB0byBlbnN1cmUgYW4gYXNzZXJ0aW9uIGhhbmRsZXIgZG9lcyBub3QNCitpbmFkdmVydGVudGx5IGF0dGVtcHQgdG8gbG93ZXIgdGhlIElQTCB3aGVuIHRoZSBjYWxsIHRvIGFzc2VydCB3YXMgdHJpZ2dlcmVkDQorYmVjYXVzZSB0aGUgSVBMIHZhbHVlIHdhcyBmb3VuZCB0byBiZSBhYm92ZQljb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkNCit3aGVuIGFuIElTUiBzYWZlIEZyZWVSVE9TIEFQSSBmdW5jdGlvbiB3YXMgZXhlY3V0ZWQuICBJU1Igc2FmZSBGcmVlUlRPUyBBUEkNCitmdW5jdGlvbnMgYXJlIHRob3NlIHRoYXQgZW5kIGluIEZyb21JU1IuICBGcmVlUlRPUyBtYWludGFpbnMgYSBzZXBhcmF0ZQ0KK2ludGVycnVwdCBBUEkgdG8gZW5zdXJlIEFQSSBmdW5jdGlvbiBhbmQgaW50ZXJydXB0IGVudHJ5IGlzIGFzIGZhc3QgYW5kIGFzDQorc2ltcGxlIGFzIHBvc3NpYmxlLiAqLw0KKyNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkgCV9fc2V0X2ludGVycnVwdF9sZXZlbCggKCB1aW50OF90ICkgMCApDQorI2lmZGVmIGNvbmZpZ0FTU0VSVA0KKwkjZGVmaW5lIHBvcnRBU1NFUlRfSUZfSU5URVJSVVBUX1BSSU9SSVRZX0lOVkFMSUQoKSBjb25maWdBU1NFUlQoICggX19nZXRfaW50ZXJydXB0X2xldmVsKCkgPD0gY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkgKQ0KKwkjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAJaWYoIF9fZ2V0X2ludGVycnVwdF9sZXZlbCgpIDwgY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkgX19zZXRfaW50ZXJydXB0X2xldmVsKCAoIHVpbnQ4X3QgKSBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgKQ0KKyNlbHNlDQorCSNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpIAlfX3NldF9pbnRlcnJ1cHRfbGV2ZWwoICggdWludDhfdCApIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSApDQorI2VuZGlmDQogDQogLyogQ3JpdGljYWwgbmVzdGluZyBjb3VudHMgYXJlIHN0b3JlZCBpbiB0aGUgVENCLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRDUklUSUNBTF9ORVNUSU5HX0lOX1RDQiAgICAoIDEgKQ0KKyNkZWZpbmUgcG9ydENSSVRJQ0FMX05FU1RJTkdfSU5fVENCICggMSApDQogDQogLyogVGhlIGNyaXRpY2FsIG5lc3RpbmcgZnVuY3Rpb25zIGRlZmluZWQgd2l0aGluIHRhc2tzLmMuICovDQotICAgIGV4dGVybiB2b2lkIHZUYXNrRW50ZXJDcml0aWNhbCggdm9pZCApOw0KLSAgICBleHRlcm4gdm9pZCB2VGFza0V4aXRDcml0aWNhbCggdm9pZCApOw0KLSAgICAjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZUYXNrRW50ZXJDcml0aWNhbCgpDQotICAgICNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdlRhc2tFeGl0Q3JpdGljYWwoKQ0KK2V4dGVybiB2b2lkIHZUYXNrRW50ZXJDcml0aWNhbCggdm9pZCApOw0KK2V4dGVybiB2b2lkIHZUYXNrRXhpdENyaXRpY2FsKCB2b2lkICk7DQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKQl2VGFza0VudGVyQ3JpdGljYWwoKQ0KKyNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKQkJdlRhc2tFeGl0Q3JpdGljYWwoKQ0KIA0KIC8qIEFzIHRoaXMgcG9ydCBhbGxvd3MgaW50ZXJydXB0IG5lc3RpbmcuLi4gKi8NCi0gICAgI2RlZmluZSBwb3J0U0VUX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dldF9pbnRlcnJ1cHRfbGV2ZWwoKTsgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpDQotICAgICNkZWZpbmUgcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCB1eFNhdmVkSW50ZXJydXB0U3RhdHVzICkgICAgX19zZXRfaW50ZXJydXB0X2xldmVsKCAoIHVpbnQ4X3QgKSAoIHV4U2F2ZWRJbnRlcnJ1cHRTdGF0dXMgKSApDQorI2RlZmluZSBwb3J0U0VUX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCkgX19nZXRfaW50ZXJydXB0X2xldmVsKCk7IHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKQ0KKyNkZWZpbmUgcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCB1eFNhdmVkSW50ZXJydXB0U3RhdHVzICkgX19zZXRfaW50ZXJydXB0X2xldmVsKCAoIHVpbnQ4X3QgKSAoIHV4U2F2ZWRJbnRlcnJ1cHRTdGF0dXMgKSApDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQotICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KLSAgICAjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgICAgICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgfQ0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQogDQogI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvSUFSL1JYdjIvcG9ydC5jIGIvcG9ydGFibGUvSUFSL1JYdjIvcG9ydC5jCmluZGV4IDI2N2VmMTguLjQwMjQ2NDUgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0lBUi9SWHYyL3BvcnQuYworKysgYi9wb3J0YWJsZS9JQVIvUlh2Mi9wb3J0LmMKQEAgLTI2LDggKzI2LDggQEAKICAqLw0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0qIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBTSDJBIHBvcnQuDQotKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyAqIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBTSDJBIHBvcnQuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBTY2hlZHVsZXIgaW5jbHVkZXMuICovDQogI2luY2x1ZGUgIkZyZWVSVE9TLmgiDQpAQCAtNDIsOSArNDIsOSBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGFza3Mgc2hvdWxkIHN0YXJ0IHdpdGggaW50ZXJydXB0cyBlbmFibGVkIGFuZCBpbiBTdXBlcnZpc29yIG1vZGUsIHRoZXJlZm9yZQ0KLSAqIFBTVyBpcyBzZXQgd2l0aCBVIGFuZCBJIHNldCwgYW5kIFBNIGFuZCBJUEwgY2xlYXIuICovDQotI2RlZmluZSBwb3J0SU5JVElBTF9QU1cgICAgICggKCBTdGFja1R5cGVfdCApIDB4MDAwMzAwMDAgKQ0KLSNkZWZpbmUgcG9ydElOSVRJQUxfRlBTVyAgICAoICggU3RhY2tUeXBlX3QgKSAweDAwMDAwMTAwICkNCitQU1cgaXMgc2V0IHdpdGggVSBhbmQgSSBzZXQsIGFuZCBQTSBhbmQgSVBMIGNsZWFyLiAqLw0KKyNkZWZpbmUgcG9ydElOSVRJQUxfUFNXCSAoICggU3RhY2tUeXBlX3QgKSAweDAwMDMwMDAwICkNCisjZGVmaW5lIHBvcnRJTklUSUFMX0ZQU1cJKCAoIFN0YWNrVHlwZV90ICkgMHgwMDAwMDEwMCApDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQpAQCAtNjIsMTM5ICs2MiwxNDAgQEAKIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KLWV4dGVybiB2b2lkICogcHhDdXJyZW50VENCOw0KK2V4dGVybiB2b2lkICpweEN1cnJlbnRUQ0I7DQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyoNCiAgKiBTZWUgaGVhZGVyIGZpbGUgZm9yIGRlc2NyaXB0aW9uLg0KICAqLw0KLVN0YWNrVHlwZV90ICogcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqIHB4VG9wT2ZTdGFjaywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFza0Z1bmN0aW9uX3QgcHhDb2RlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICogcHZQYXJhbWV0ZXJzICkNCitTdGFja1R5cGVfdCAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqcHhUb3BPZlN0YWNrLCBUYXNrRnVuY3Rpb25fdCBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycyApDQogew0KLSAgICAvKiBSMCBpcyBub3QgaW5jbHVkZWQgYXMgaXQgaXMgdGhlIHN0YWNrIHBvaW50ZXIuICovDQorCS8qIFIwIGlzIG5vdCBpbmNsdWRlZCBhcyBpdCBpcyB0aGUgc3RhY2sgcG9pbnRlci4gKi8NCiANCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MDA7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gcG9ydElOSVRJQUxfUFNXOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBweENvZGU7DQorCSpweFRvcE9mU3RhY2sgPSAweDAwOw0KKwlweFRvcE9mU3RhY2stLTsNCisgCSpweFRvcE9mU3RhY2sgPSBwb3J0SU5JVElBTF9QU1c7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB4Q29kZTsNCiANCi0gICAgLyogV2hlbiBkZWJ1Z2dpbmcgaXQgY2FuIGJlIHVzZWZ1bCBpZiBldmVyeSByZWdpc3RlciBpcyBzZXQgdG8gYSBrbm93bg0KLSAgICAgKiB2YWx1ZS4gIE90aGVyd2lzZSBjb2RlIHNwYWNlIGNhbiBiZSBzYXZlZCBieSBqdXN0IHNldHRpbmcgdGhlIHJlZ2lzdGVycw0KLSAgICAgKiB0aGF0IG5lZWQgdG8gYmUgc2V0LiAqLw0KLSAgICAjaWZkZWYgVVNFX0ZVTExfUkVHSVNURVJfSU5JVElBTElTQVRJT04NCi0gICAgICAgIHsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHhmZmZmZmZmZjsgLyogcjE1LiAqLw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweGVlZWVlZWVlOw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweGRkZGRkZGRkOw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweGNjY2NjY2NjOw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweGJiYmJiYmJiOw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweGFhYWFhYWFhOw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweDk5OTk5OTk5Ow0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweDg4ODg4ODg4Ow0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweDc3Nzc3Nzc3Ow0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweDY2NjY2NjY2Ow0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweDU1NTU1NTU1Ow0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweDQ0NDQ0NDQ0Ow0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweDMzMzMzMzMzOw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweDIyMjIyMjIyOw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgfQ0KLSAgICAjZWxzZSAvKiBpZmRlZiBVU0VfRlVMTF9SRUdJU1RFUl9JTklUSUFMSVNBVElPTiAqLw0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjayAtPSAxNTsNCi0gICAgICAgIH0NCi0gICAgI2VuZGlmIC8qIGlmZGVmIFVTRV9GVUxMX1JFR0lTVEVSX0lOSVRJQUxJU0FUSU9OICovDQorCS8qIFdoZW4gZGVidWdnaW5nIGl0IGNhbiBiZSB1c2VmdWwgaWYgZXZlcnkgcmVnaXN0ZXIgaXMgc2V0IHRvIGEga25vd24NCisJdmFsdWUuICBPdGhlcndpc2UgY29kZSBzcGFjZSBjYW4gYmUgc2F2ZWQgYnkganVzdCBzZXR0aW5nIHRoZSByZWdpc3RlcnMNCisJdGhhdCBuZWVkIHRvIGJlIHNldC4gKi8NCisJI2lmZGVmIFVTRV9GVUxMX1JFR0lTVEVSX0lOSVRJQUxJU0FUSU9ODQorCXsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4ZmZmZmZmZmY7CS8qIHIxNS4gKi8NCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4ZWVlZWVlZWU7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweGRkZGRkZGRkOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHhjY2NjY2NjYzsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4YmJiYmJiYmI7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweGFhYWFhYWFhOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHg5OTk5OTk5OTsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4ODg4ODg4ODg7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweDc3Nzc3Nzc3Ow0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHg2NjY2NjY2NjsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4NTU1NTU1NTU7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweDQ0NDQ0NDQ0Ow0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHgzMzMzMzMzMzsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4MjIyMjIyMjI7DQorCQlweFRvcE9mU3RhY2stLTsNCisJfQ0KKwkjZWxzZQ0KKwl7DQorCQlweFRvcE9mU3RhY2sgLT0gMTU7DQorCX0NCisJI2VuZGlmDQogDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHZQYXJhbWV0ZXJzOyAvKiBSMSAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IHBvcnRJTklUSUFMX0ZQU1c7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMHgxMTExMTExMTsgLyogQWNjdW11bGF0b3IgMC4gKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAweDIyMjIyMjIyOyAvKiBBY2N1bXVsYXRvciAwLiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MzMzMzMzMzM7IC8qIEFjY3VtdWxhdG9yIDAuICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMHg0NDQ0NDQ0NDsgLyogQWNjdW11bGF0b3IgMS4gKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAweDU1NTU1NTU1OyAvKiBBY2N1bXVsYXRvciAxLiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4NjY2NjY2NjY7IC8qIEFjY3VtdWxhdG9yIDEuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHZQYXJhbWV0ZXJzOyAvKiBSMSAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IHBvcnRJTklUSUFMX0ZQU1c7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgxMTExMTExMTsgLyogQWNjdW11bGF0b3IgMC4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDIyMjIyMjIyOyAvKiBBY2N1bXVsYXRvciAwLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MzMzMzMzMzM7IC8qIEFjY3VtdWxhdG9yIDAuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHg0NDQ0NDQ0NDsgLyogQWNjdW11bGF0b3IgMS4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDU1NTU1NTU1OyAvKiBBY2N1bXVsYXRvciAxLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4NjY2NjY2NjY7IC8qIEFjY3VtdWxhdG9yIDEuICovDQogDQotICAgIHJldHVybiBweFRvcE9mU3RhY2s7DQorCXJldHVybiBweFRvcE9mU3RhY2s7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIEJhc2VUeXBlX3QgeFBvcnRTdGFydFNjaGVkdWxlciggdm9pZCApDQogew0KLSAgICBleHRlcm4gdm9pZCB2QXBwbGljYXRpb25TZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdkFwcGxpY2F0aW9uU2V0dXBUaW1lckludGVycnVwdCggdm9pZCApOw0KIA0KLSAgICAvKiBVc2UgcHhDdXJyZW50VENCIGp1c3Qgc28gaXQgZG9lcyBub3QgZ2V0IG9wdGltaXNlZCBhd2F5LiAqLw0KLSAgICBpZiggcHhDdXJyZW50VENCICE9IE5VTEwgKQ0KLSAgICB7DQotICAgICAgICAvKiBDYWxsIGFuIGFwcGxpY2F0aW9uIGZ1bmN0aW9uIHRvIHNldCB1cCB0aGUgdGltZXIgdGhhdCB3aWxsIGdlbmVyYXRlIHRoZQ0KLSAgICAgICAgICogdGljayBpbnRlcnJ1cHQuICBUaGlzIHdheSB0aGUgYXBwbGljYXRpb24gY2FuIGRlY2lkZSB3aGljaCBwZXJpcGhlcmFsIHRvDQotICAgICAgICAgKiB1c2UuICBBIGRlbW8gYXBwbGljYXRpb24gaXMgcHJvdmlkZWQgdG8gc2hvdyBhIHN1aXRhYmxlIGV4YW1wbGUuICovDQotICAgICAgICB2QXBwbGljYXRpb25TZXR1cFRpbWVySW50ZXJydXB0KCk7DQorCS8qIFVzZSBweEN1cnJlbnRUQ0IganVzdCBzbyBpdCBkb2VzIG5vdCBnZXQgb3B0aW1pc2VkIGF3YXkuICovDQorCWlmKCBweEN1cnJlbnRUQ0IgIT0gTlVMTCApDQorCXsNCisJCS8qIENhbGwgYW4gYXBwbGljYXRpb24gZnVuY3Rpb24gdG8gc2V0IHVwIHRoZSB0aW1lciB0aGF0IHdpbGwgZ2VuZXJhdGUgdGhlDQorCQl0aWNrIGludGVycnVwdC4gIFRoaXMgd2F5IHRoZSBhcHBsaWNhdGlvbiBjYW4gZGVjaWRlIHdoaWNoIHBlcmlwaGVyYWwgdG8NCisJCXVzZS4gIEEgZGVtbyBhcHBsaWNhdGlvbiBpcyBwcm92aWRlZCB0byBzaG93IGEgc3VpdGFibGUgZXhhbXBsZS4gKi8NCisJCXZBcHBsaWNhdGlvblNldHVwVGltZXJJbnRlcnJ1cHQoKTsNCiANCi0gICAgICAgIC8qIEVuYWJsZSB0aGUgc29mdHdhcmUgaW50ZXJydXB0LiAqLw0KLSAgICAgICAgX0lFTiggX0lDVV9TV0lOVCApID0gMTsNCisJCS8qIEVuYWJsZSB0aGUgc29mdHdhcmUgaW50ZXJydXB0LiAqLw0KKwkJX0lFTiggX0lDVV9TV0lOVCApID0gMTsNCiANCi0gICAgICAgIC8qIEVuc3VyZSB0aGUgc29mdHdhcmUgaW50ZXJydXB0IGlzIGNsZWFyLiAqLw0KLSAgICAgICAgX0lSKCBfSUNVX1NXSU5UICkgPSAwOw0KKwkJLyogRW5zdXJlIHRoZSBzb2Z0d2FyZSBpbnRlcnJ1cHQgaXMgY2xlYXIuICovDQorCQlfSVIoIF9JQ1VfU1dJTlQgKSA9IDA7DQogDQotICAgICAgICAvKiBFbnN1cmUgdGhlIHNvZnR3YXJlIGludGVycnVwdCBpcyBzZXQgdG8gdGhlIGtlcm5lbCBwcmlvcml0eS4gKi8NCi0gICAgICAgIF9JUFIoIF9JQ1VfU1dJTlQgKSA9IGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFk7DQorCQkvKiBFbnN1cmUgdGhlIHNvZnR3YXJlIGludGVycnVwdCBpcyBzZXQgdG8gdGhlIGtlcm5lbCBwcmlvcml0eS4gKi8NCisJCV9JUFIoIF9JQ1VfU1dJTlQgKSA9IGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFk7DQogDQotICAgICAgICAvKiBTdGFydCB0aGUgZmlyc3QgdGFzay4gKi8NCi0gICAgICAgIHBydlN0YXJ0Rmlyc3RUYXNrKCk7DQotICAgIH0NCisJCS8qIFN0YXJ0IHRoZSBmaXJzdCB0YXNrLiAqLw0KKwkJcHJ2U3RhcnRGaXJzdFRhc2soKTsNCisJfQ0KIA0KLSAgICAvKiBTaG91bGQgbm90IGdldCBoZXJlLiAqLw0KLSAgICByZXR1cm4gcGRGQUlMOw0KKwkvKiBTaG91bGQgbm90IGdldCBoZXJlLiAqLw0KKwlyZXR1cm4gcGRGQUlMOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAjcHJhZ21hIHZlY3RvciA9IGNvbmZpZ1RJQ0tfVkVDVE9SDQogX19pbnRlcnJ1cHQgdm9pZCB2VGlja0lTUiggdm9pZCApDQogew0KLSAgICAvKiBSZS1lbmFibGUgaW50ZXJydXB0cy4gKi8NCi0gICAgX19lbmFibGVfaW50ZXJydXB0KCk7DQorCS8qIFJlLWVuYWJsZSBpbnRlcnJ1cHRzLiAqLw0KKwlfX2VuYWJsZV9pbnRlcnJ1cHQoKTsNCiANCi0gICAgLyogSW5jcmVtZW50IHRoZSB0aWNrLCBhbmQgcGVyZm9ybSBhbnkgcHJvY2Vzc2luZyB0aGUgbmV3IHRpY2sgdmFsdWUNCi0gICAgICogbmVjZXNzaXRhdGVzLiAqLw0KLSAgICBfX3NldF9pbnRlcnJ1cHRfbGV2ZWwoIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSApOw0KLSAgICB7DQotICAgICAgICBpZiggeFRhc2tJbmNyZW1lbnRUaWNrKCkgIT0gcGRGQUxTRSApDQotICAgICAgICB7DQotICAgICAgICAgICAgdGFza1lJRUxEKCk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgX19zZXRfaW50ZXJydXB0X2xldmVsKCBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZICk7DQorCS8qIEluY3JlbWVudCB0aGUgdGljaywgYW5kIHBlcmZvcm0gYW55IHByb2Nlc3NpbmcgdGhlIG5ldyB0aWNrIHZhbHVlDQorCW5lY2Vzc2l0YXRlcy4gKi8NCisJX19zZXRfaW50ZXJydXB0X2xldmVsKCBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgKTsNCisJew0KKwkJaWYoIHhUYXNrSW5jcmVtZW50VGljaygpICE9IHBkRkFMU0UgKQ0KKwkJew0KKwkJCXRhc2tZSUVMRCgpOw0KKwkJfQ0KKwl9DQorCV9fc2V0X2ludGVycnVwdF9sZXZlbCggY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWSApOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0RW5kU2NoZWR1bGVyKCB2b2lkICkNCiB7DQotICAgIC8qIE5vdCBpbXBsZW1lbnRlZCBpbiBwb3J0cyB3aGVyZSB0aGVyZSBpcyBub3RoaW5nIHRvIHJldHVybiB0by4NCi0gICAgICogQXJ0aWZpY2lhbGx5IGZvcmNlIGFuIGFzc2VydC4gKi8NCi0gICAgY29uZmlnQVNTRVJUKCBweEN1cnJlbnRUQ0IgPT0gTlVMTCApOw0KKwkvKiBOb3QgaW1wbGVtZW50ZWQgaW4gcG9ydHMgd2hlcmUgdGhlcmUgaXMgbm90aGluZyB0byByZXR1cm4gdG8uDQorCUFydGlmaWNpYWxseSBmb3JjZSBhbiBhc3NlcnQuICovDQorCWNvbmZpZ0FTU0VSVCggcHhDdXJyZW50VENCID09IE5VTEwgKTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvSUFSL1JYdjIvcG9ydG1hY3JvLmggYi9wb3J0YWJsZS9JQVIvUlh2Mi9wb3J0bWFjcm8uaAppbmRleCAzNTRjMWE5Li5kZDk3NjNiIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9JQVIvUlh2Mi9wb3J0bWFjcm8uaAorKysgYi9wb3J0YWJsZS9JQVIvUlh2Mi9wb3J0bWFjcm8uaApAQCAtMjcsMTMgKzI3LDEzIEBACiANCiANCiAjaWZuZGVmIFBPUlRNQUNST19IDQotICAgICNkZWZpbmUgUE9SVE1BQ1JPX0gNCisjZGVmaW5lIFBPUlRNQUNST19IDQogDQotICAgICNpbmNsdWRlIDxpbnRyaW5zaWNzLmg+DQorI2luY2x1ZGUgPGludHJpbnNpY3MuaD4NCiANCi0gICAgI2lmZGVmIF9fY3BsdXNwbHVzDQotICAgICAgICBleHRlcm4gIkMiIHsNCi0gICAgI2VuZGlmDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAqIFBvcnQgc3BlY2lmaWMgZGVmaW5pdGlvbnMuDQpAQCAtNDYsOTggKzQ2LDk5IEBACiAgKi8NCiANCiAvKiBUeXBlIGRlZmluaXRpb25zIC0gdGhlc2UgYXJlIGEgYml0IGxlZ2FjeSBhbmQgbm90IHJlYWxseSB1c2VkIG5vdywgb3RoZXIgdGhhbg0KLSAqIHBvcnRTVEFDS19UWVBFIGFuZCBwb3J0QkFTRV9UWVBFLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRDSEFSICAgICAgICAgIGNoYXINCi0gICAgI2RlZmluZSBwb3J0RkxPQVQgICAgICAgICBmbG9hdA0KLSAgICAjZGVmaW5lIHBvcnRET1VCTEUgICAgICAgIGRvdWJsZQ0KLSAgICAjZGVmaW5lIHBvcnRMT05HICAgICAgICAgIGxvbmcNCi0gICAgI2RlZmluZSBwb3J0U0hPUlQgICAgICAgICBzaG9ydA0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19UWVBFICAgIHVpbnQzMl90DQotICAgICNkZWZpbmUgcG9ydEJBU0VfVFlQRSAgICAgbG9uZw0KK3BvcnRTVEFDS19UWVBFIGFuZCBwb3J0QkFTRV9UWVBFLiAqLw0KKyNkZWZpbmUgcG9ydENIQVIJCWNoYXINCisjZGVmaW5lIHBvcnRGTE9BVAkJZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUJCWRvdWJsZQ0KKyNkZWZpbmUgcG9ydExPTkcJCWxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVAkJc2hvcnQNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFCXVpbnQzMl90DQorI2RlZmluZSBwb3J0QkFTRV9UWVBFCWxvbmcNCiANCi0gICAgdHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSAgIFN0YWNrVHlwZV90Ow0KLSAgICB0eXBlZGVmIGxvbmcgICAgICAgICAgICAgQmFzZVR5cGVfdDsNCi0gICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nICAgIFVCYXNlVHlwZV90Ow0KK3R5cGVkZWYgcG9ydFNUQUNLX1RZUEUgU3RhY2tUeXBlX3Q7DQordHlwZWRlZiBsb25nIEJhc2VUeXBlX3Q7DQordHlwZWRlZiB1bnNpZ25lZCBsb25nIFVCYXNlVHlwZV90Ow0KIA0KIA0KLSAgICAjaWYgKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KLSAgICAgICAgdHlwZWRlZiB1aW50MTZfdCAgICAgVGlja1R5cGVfdDsNCi0gICAgICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAgICAgICAgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQotICAgICNlbHNlDQotICAgICAgICB0eXBlZGVmIHVpbnQzMl90ICAgICBUaWNrVHlwZV90Ow0KLSAgICAgICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICAgICAgICAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwNCisjaWYoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQorCXR5cGVkZWYgdWludDE2X3QgVGlja1R5cGVfdDsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggVGlja1R5cGVfdCApIDB4ZmZmZg0KKyNlbHNlDQorCXR5cGVkZWYgdWludDMyX3QgVGlja1R5cGVfdDsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTA0KIA0KLS8qIDMyLWJpdCB0aWNrIHR5cGUgb24gYSAzMi1iaXQgYXJjaGl0ZWN0dXJlLCBzbyByZWFkcyBvZiB0aGUgdGljayBjb3VudCBkbw0KLSAqIG5vdCBuZWVkIHRvIGJlIGd1YXJkZWQgd2l0aCBhIGNyaXRpY2FsIHNlY3Rpb24uICovDQotICAgICAgICAjZGVmaW5lIHBvcnRUSUNLX1RZUEVfSVNfQVRPTUlDICAgIDENCi0gICAgI2VuZGlmDQorCS8qIDMyLWJpdCB0aWNrIHR5cGUgb24gYSAzMi1iaXQgYXJjaGl0ZWN0dXJlLCBzbyByZWFkcyBvZiB0aGUgdGljayBjb3VudCBkbw0KKwlub3QgbmVlZCB0byBiZSBndWFyZGVkIHdpdGggYSBjcml0aWNhbCBzZWN0aW9uLiAqLw0KKwkjZGVmaW5lIHBvcnRUSUNLX1RZUEVfSVNfQVRPTUlDIDENCisjZW5kaWYNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBIYXJkd2FyZSBzcGVjaWZpY3MuICovDQotICAgICNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UICAgIDggICAgIC8qIENvdWxkIG1ha2UgZm91ciwgYWNjb3JkaW5nIHRvIG1hbnVhbC4gKi8NCi0gICAgI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RIICAgICAgLTENCi0gICAgI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMgICAgKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCi0gICAgI2RlZmluZSBwb3J0Tk9QKCkgICAgX19ub19vcGVyYXRpb24oKQ0KKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UCQkJOAkvKiBDb3VsZCBtYWtlIGZvdXIsIGFjY29yZGluZyB0byBtYW51YWwuICovDQorI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RICQkJLTENCisjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUwkJCSggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQorI2RlZmluZSBwb3J0Tk9QKCkJCQkJCV9fbm9fb3BlcmF0aW9uKCkNCiANCiAvKiBZaWVsZCBlcXVpdmFsZW50IHRvICIqcG9ydElUVV9TV0lOVFIgPSAweDAxOyAoIHZvaWQgKSAqcG9ydElUVV9TV0lOVFI7Ig0KLSAqIHdoZXJlIHBvcnRJVFVfU1dJTlRSIGlzIHRoZSBsb2NhdGlvbiBvZiB0aGUgc29mdHdhcmUgaW50ZXJydXB0IHJlZ2lzdGVyDQotICogKDB4MDAwODcyRTApLiAgRG9uJ3QgcmVseSBvbiB0aGUgYXNzZW1ibGVyIHRvIHNlbGVjdCBhIHJlZ2lzdGVyLCBzbyBpbnN0ZWFkDQotICogc2F2ZSBhbmQgcmVzdG9yZSBjbG9iYmVyZWQgcmVnaXN0ZXJzIG1hbnVhbGx5LiAqLw0KLSAgICAjZGVmaW5lIHBvcnRZSUVMRCgpICAgICAgICAgICBcDQotICAgIF9fYXNtIHZvbGF0aWxlICAgICAgICAgICAgICAgIFwNCi0gICAgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgIlBVU0guTAlSMTAJCQkJCVxuIlwNCi0gICAgICAgICJNT1YuTAkjMHg4NzJFMCwgUjEwCQlcbiJcDQotICAgICAgICAiTU9WLkIJIzB4MSwgW1IxMF0JCQlcbiJcDQotICAgICAgICAiTU9WLkwJW1IxMF0sIFIxMAkJCVxuIlwNCi0gICAgICAgICJQT1AJUjEwCQkJCQlcbiJcDQotICAgICkNCit3aGVyZSBwb3J0SVRVX1NXSU5UUiBpcyB0aGUgbG9jYXRpb24gb2YgdGhlIHNvZnR3YXJlIGludGVycnVwdCByZWdpc3Rlcg0KKygweDAwMDg3MkUwKS4gIERvbid0IHJlbHkgb24gdGhlIGFzc2VtYmxlciB0byBzZWxlY3QgYSByZWdpc3Rlciwgc28gaW5zdGVhZA0KK3NhdmUgYW5kIHJlc3RvcmUgY2xvYmJlcmVkIHJlZ2lzdGVycyBtYW51YWxseS4gKi8NCisjZGVmaW5lIHBvcnRZSUVMRCgpCQkJCQkJCVwNCisJX19hc20gdm9sYXRpbGUgCQkJCQkJCVwNCisJKAkJCQkJCQkJCQlcDQorCQkiUFVTSC5MCVIxMAkJCQkJXG4iCQlcDQorCQkiTU9WLkwJIzB4ODcyRTAsIFIxMAkJXG4iCQlcDQorCQkiTU9WLkIJIzB4MSwgW1IxMF0JCQlcbiIJCVwNCisJCSJNT1YuTAlbUjEwXSwgUjEwCQkJXG4iCQlcDQorCQkiUE9QCVIxMAkJCQkJXG4iCQlcDQorCSkNCiANCi0gICAgI2RlZmluZSBwb3J0WUlFTERfRlJPTV9JU1IoIHggKSAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCAoIHggKSAhPSBwZEZBTFNFICkgcG9ydFlJRUxEKCkNCisjZGVmaW5lIHBvcnRZSUVMRF9GUk9NX0lTUiggeCApCWlmKCAoIHggKSAhPSBwZEZBTFNFICkgcG9ydFlJRUxEKCkNCiANCiAvKiBUaGVzZSBtYWNyb3Mgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHksIGJ1dCB0aHJvdWdoIHRoZQ0KLSAqIHRhc2tFTlRFUl9DUklUSUNBTCgpIGFuZCB0YXNrRVhJVF9DUklUSUNBTCgpIG1hY3Jvcy4gIEFuIGV4dHJhIGNoZWNrIGlzDQotICogcGVyZm9ybWVkIGlmIGNvbmZpZ0FTU0VSVCgpIGlzIGRlZmluZWQgdG8gZW5zdXJlIGFuIGFzc2VydGlvbiBoYW5kbGVyIGRvZXMgbm90DQotICogaW5hZHZlcnRlbnRseSBhdHRlbXB0IHRvIGxvd2VyIHRoZSBJUEwgd2hlbiB0aGUgY2FsbCB0byBhc3NlcnQgd2FzIHRyaWdnZXJlZA0KLSAqIGJlY2F1c2UgdGhlIElQTCB2YWx1ZSB3YXMgZm91bmQgdG8gYmUgYWJvdmUJY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZDQotICogd2hlbiBhbiBJU1Igc2FmZSBGcmVlUlRPUyBBUEkgZnVuY3Rpb24gd2FzIGV4ZWN1dGVkLiAgSVNSIHNhZmUgRnJlZVJUT1MgQVBJDQotICogZnVuY3Rpb25zIGFyZSB0aG9zZSB0aGF0IGVuZCBpbiBGcm9tSVNSLiAgRnJlZVJUT1MgbWFpbnRhaW5zIGEgc2VwYXJhdGUNCi0gKiBpbnRlcnJ1cHQgQVBJIHRvIGVuc3VyZSBBUEkgZnVuY3Rpb24gYW5kIGludGVycnVwdCBlbnRyeSBpcyBhcyBmYXN0IGFuZCBhcw0KLSAqIHNpbXBsZSBhcyBwb3NzaWJsZS4gKi8NCi0gICAgI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKSAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2V0X2ludGVycnVwdF9sZXZlbCggKCB1aW50OF90ICkgMCApDQotICAgICNpZmRlZiBjb25maWdBU1NFUlQNCi0gICAgICAgICNkZWZpbmUgcG9ydEFTU0VSVF9JRl9JTlRFUlJVUFRfUFJJT1JJVFlfSU5WQUxJRCgpICAgIGNvbmZpZ0FTU0VSVCggKCBfX2dldF9pbnRlcnJ1cHRfbGV2ZWwoKSA8PSBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgKSApDQotICAgICAgICAjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAgICAgICAgICAgICAgICAgICAgICBpZiggX19nZXRfaW50ZXJydXB0X2xldmVsKCkgPCBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgKSBfX3NldF9pbnRlcnJ1cHRfbGV2ZWwoICggdWludDhfdCApIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSApDQotICAgICNlbHNlDQotICAgICAgICAjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAgICAgICAgICAgICAgICAgICAgICBfX3NldF9pbnRlcnJ1cHRfbGV2ZWwoICggdWludDhfdCApIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSApDQotICAgICNlbmRpZg0KK3Rhc2tFTlRFUl9DUklUSUNBTCgpIGFuZCB0YXNrRVhJVF9DUklUSUNBTCgpIG1hY3Jvcy4gIEFuIGV4dHJhIGNoZWNrIGlzDQorcGVyZm9ybWVkIGlmIGNvbmZpZ0FTU0VSVCgpIGlzIGRlZmluZWQgdG8gZW5zdXJlIGFuIGFzc2VydGlvbiBoYW5kbGVyIGRvZXMgbm90DQoraW5hZHZlcnRlbnRseSBhdHRlbXB0IHRvIGxvd2VyIHRoZSBJUEwgd2hlbiB0aGUgY2FsbCB0byBhc3NlcnQgd2FzIHRyaWdnZXJlZA0KK2JlY2F1c2UgdGhlIElQTCB2YWx1ZSB3YXMgZm91bmQgdG8gYmUgYWJvdmUJY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZDQord2hlbiBhbiBJU1Igc2FmZSBGcmVlUlRPUyBBUEkgZnVuY3Rpb24gd2FzIGV4ZWN1dGVkLiAgSVNSIHNhZmUgRnJlZVJUT1MgQVBJDQorZnVuY3Rpb25zIGFyZSB0aG9zZSB0aGF0IGVuZCBpbiBGcm9tSVNSLiAgRnJlZVJUT1MgbWFpbnRhaW5zIGEgc2VwYXJhdGUNCitpbnRlcnJ1cHQgQVBJIHRvIGVuc3VyZSBBUEkgZnVuY3Rpb24gYW5kIGludGVycnVwdCBlbnRyeSBpcyBhcyBmYXN0IGFuZCBhcw0KK3NpbXBsZSBhcyBwb3NzaWJsZS4gKi8NCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpIAlfX3NldF9pbnRlcnJ1cHRfbGV2ZWwoICggdWludDhfdCApIDAgKQ0KKyNpZmRlZiBjb25maWdBU1NFUlQNCisJI2RlZmluZSBwb3J0QVNTRVJUX0lGX0lOVEVSUlVQVF9QUklPUklUWV9JTlZBTElEKCkgY29uZmlnQVNTRVJUKCAoIF9fZ2V0X2ludGVycnVwdF9sZXZlbCgpIDw9IGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSApICkNCisJI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgCWlmKCBfX2dldF9pbnRlcnJ1cHRfbGV2ZWwoKSA8IGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSApIF9fc2V0X2ludGVycnVwdF9sZXZlbCggKCB1aW50OF90ICkgY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkNCisjZWxzZQ0KKwkjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAJX19zZXRfaW50ZXJydXB0X2xldmVsKCAoIHVpbnQ4X3QgKSBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgKQ0KKyNlbmRpZg0KIA0KIC8qIENyaXRpY2FsIG5lc3RpbmcgY291bnRzIGFyZSBzdG9yZWQgaW4gdGhlIFRDQi4gKi8NCi0gICAgI2RlZmluZSBwb3J0Q1JJVElDQUxfTkVTVElOR19JTl9UQ0IgICAgKCAxICkNCisjZGVmaW5lIHBvcnRDUklUSUNBTF9ORVNUSU5HX0lOX1RDQiAoIDEgKQ0KIA0KIC8qIFRoZSBjcml0aWNhbCBuZXN0aW5nIGZ1bmN0aW9ucyBkZWZpbmVkIHdpdGhpbiB0YXNrcy5jLiAqLw0KLSAgICBleHRlcm4gdm9pZCB2VGFza0VudGVyQ3JpdGljYWwoIHZvaWQgKTsNCi0gICAgZXh0ZXJuIHZvaWQgdlRhc2tFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCi0gICAgI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2VGFza0VudGVyQ3JpdGljYWwoKQ0KLSAgICAjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZUYXNrRXhpdENyaXRpY2FsKCkNCitleHRlcm4gdm9pZCB2VGFza0VudGVyQ3JpdGljYWwoIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2VGFza0V4aXRDcml0aWNhbCggdm9pZCApOw0KKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkJdlRhc2tFbnRlckNyaXRpY2FsKCkNCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkJCXZUYXNrRXhpdENyaXRpY2FsKCkNCiANCiAvKiBBcyB0aGlzIHBvcnQgYWxsb3dzIGludGVycnVwdCBuZXN0aW5nLi4uICovDQotICAgICNkZWZpbmUgcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19nZXRfaW50ZXJydXB0X2xldmVsKCk7IHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKQ0KLSAgICAjZGVmaW5lIHBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUiggdXhTYXZlZEludGVycnVwdFN0YXR1cyApICAgIF9fc2V0X2ludGVycnVwdF9sZXZlbCggKCB1aW50OF90ICkgKCB1eFNhdmVkSW50ZXJydXB0U3RhdHVzICkgKQ0KKyNkZWZpbmUgcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpIF9fZ2V0X2ludGVycnVwdF9sZXZlbCgpOyBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkNCisjZGVmaW5lIHBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUiggdXhTYXZlZEludGVycnVwdFN0YXR1cyApIF9fc2V0X2ludGVycnVwdF9sZXZlbCggKCB1aW50OF90ICkgKCB1eFNhdmVkSW50ZXJydXB0U3RhdHVzICkgKQ0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCi0gICAgI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICAgICAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KIA0KIC8qIFByZXZlbnQgd2FybmluZ3Mgb2YgdW5kZWZpbmVkIGJlaGF2aW91cjogdGhlIG9yZGVyIG9mIHZvbGF0aWxlIGFjY2Vzc2VzIGlzDQotICogdW5kZWZpbmVkIC0gYWxsIHdhcm5pbmdzIGhhdmUgYmVlbiBtYW51YWxseSBjaGVja2VkIGFuZCBhcmUgbm90IGFuIGlzc3VlLCBhbmQNCi0gKiB0aGUgd2FybmluZ3MgY2Fubm90IGJlIHByZXZlbnQgYnkgY29kZSBjaGFuZ2VzIHdpdGhvdXQgdW5kZXNpcmFibGUgZWZmZWN0cy4gKi8NCi0gICAgI3ByYWdtYSBkaWFnX3N1cHByZXNzPVBhMDgyDQordW5kZWZpbmVkIC0gYWxsIHdhcm5pbmdzIGhhdmUgYmVlbiBtYW51YWxseSBjaGVja2VkIGFuZCBhcmUgbm90IGFuIGlzc3VlLCBhbmQNCit0aGUgd2FybmluZ3MgY2Fubm90IGJlIHByZXZlbnQgYnkgY29kZSBjaGFuZ2VzIHdpdGhvdXQgdW5kZXNpcmFibGUgZWZmZWN0cy4gKi8NCisjcHJhZ21hIGRpYWdfc3VwcHJlc3M9UGEwODINCiANCi0gICAgI2lmZGVmIF9fY3BsdXNwbHVzDQotICAgICAgICB9DQotICAgICNlbmRpZg0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCiANCiAjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8NCisNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9JQVIvU1RSNzF4L0lTUl9TdXBwb3J0LmggYi9wb3J0YWJsZS9JQVIvU1RSNzF4L0lTUl9TdXBwb3J0LmgKaW5kZXggNzJmNGIxNS4uMzYwZmZmNiAxMDA2NDQKLS0tIGEvcG9ydGFibGUvSUFSL1NUUjcxeC9JU1JfU3VwcG9ydC5oCisrKyBiL3BvcnRhYmxlL0lBUi9TVFI3MXgvSVNSX1N1cHBvcnQuaApAQCAtMSwxMjMgKzEsMTA1IEBACi07IC8qDQotICAgKiA7ICogRnJlZVJUT1MgS2VybmVsIFYxMC4zLjENCi0gICAqIDsgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgKiA7ICoNCi0gICAqIDsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mDQotICAgKiA7ICogdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4NCi0gICAqIDsgKiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvDQotICAgKiA7ICogdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YNCi0gICAqIDsgKiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sDQotICAgKiA7ICogc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6DQotICAgKiA7ICoNCi0gICAqIDsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwNCi0gICAqIDsgKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLg0KLSAgICogOyAqDQotICAgKiA7ICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1INCi0gICAqIDsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUw0KLSAgICogOyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUg0KLSAgICogOyAqIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUg0KLSAgICogOyAqIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElODQotICAgKiA7ICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4NCi0gICAqIDsgKg0KLSAgICogOyAqIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnDQotICAgKiA7ICogaHR0cDovL2F3cy5hbWF6b24uY29tL2ZyZWVydG9zDQotICAgKiA7ICoNCi0gICAqIDsgKiAxIHRhYiA9PSA0IHNwYWNlcyENCi0gICAqIDsgKi8NCis7LyoNCis7ICogRnJlZVJUT1MgS2VybmVsIFYxMC4zLjENCis7ICogQ29weXJpZ2h0IChDKSAyMDIwIEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuICBBbGwgUmlnaHRzIFJlc2VydmVkLg0KKzsgKg0KKzsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mDQorOyAqIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluDQorOyAqIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8NCis7ICogdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YNCis7ICogdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLA0KKzsgKiBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoNCis7ICoNCis7ICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsDQorOyAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuDQorOyAqDQorOyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SDQorOyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTDQorOyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUg0KKzsgKiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVINCis7ICogSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4NCis7ICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4NCis7ICoNCis7ICogaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcNCis7ICogaHR0cDovL2F3cy5hbWF6b24uY29tL2ZyZWVydG9zDQorOyAqDQorOyAqIDEgdGFiID09IDQgc3BhY2VzIQ0KKzsgKi8NCiANCi1FWFRFUk4gcHhDdXJyZW50VENCDQotRVhURVJOIHVsQ3JpdGljYWxOZXN0aW5nDQorCUVYVEVSTiBweEN1cnJlbnRUQ0INCisJRVhURVJOIHVsQ3JpdGljYWxOZXN0aW5nDQogDQotOw0KLUNvbnRleHQgc2F2ZSBhbmQgcmVzdG9yZSBtYWNybyBkZWZpbml0aW9ucw0KLTsNCis7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7DQorOyBDb250ZXh0IHNhdmUgYW5kIHJlc3RvcmUgbWFjcm8gZGVmaW5pdGlvbnMNCis7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7DQogDQogcG9ydFNBVkVfQ09OVEVYVCBNQUNSTw0KIA0KLTsNCi1QdXNoIFIwIGFzIHdlIGFyZSBnb2luZyB0byB1c2UgdGhlIHJlZ2lzdGVyLg0KLSAgIFNUTURCIFNQICEsIHsgUjAgfQ0KKwk7IFB1c2ggUjAgYXMgd2UgYXJlIGdvaW5nIHRvIHVzZSB0aGUgcmVnaXN0ZXIuDQorCVNUTURCCVNQISwge1IwfQ0KIA0KLTsNCi1TZXQgUjAgdG8gcG9pbnQgdG8gdGhlIHRhc2sgc3RhY2sgcG9pbnRlci4NCi0gICBTVE1EQiBTUCwgeyBTUCB9IF4NCi1OT1ANCi1TVUIgU1AsIFNQLCAjIDQNCi1MRE1JQSBTUCAhLCB7IFIwIH0NCisJOyBTZXQgUjAgdG8gcG9pbnQgdG8gdGhlIHRhc2sgc3RhY2sgcG9pbnRlci4NCisJU1RNREIJU1AsIHtTUH1eDQorCU5PUA0KKwlTVUIJCVNQLCBTUCwgIzQNCisJTERNSUEJU1AhLCB7UjB9DQogDQotOw0KLVB1c2ggdGhlIHJldHVybiBhZGRyZXNzIG9udG8gdGhlIHN0YWNrLg0KLSAgICAgICAgICBTVE1EQiBSMCAhLCB7IExSIH0NCisJOyBQdXNoIHRoZSByZXR1cm4gYWRkcmVzcyBvbnRvIHRoZSBzdGFjay4NCisJU1RNREIJUjAhLCB7TFJ9DQogDQotOw0KKwk7IE5vdyB3ZSBoYXZlIHNhdmVkIExSIHdlIGNhbiB1c2UgaXQgaW5zdGVhZCBvZiBSMC4NCisJTU9WCQlMUiwgUjANCiANCi1Ob3cgd2UgaGF2ZSBzYXZlZCBMUiB3ZSBjYW4gdXNlIGl0IGluc3RlYWQgb2YgUjAuDQotICAgTU9WIExSLCBSMA0KKwk7IFBvcCBSMCBzbyB3ZSBjYW4gc2F2ZSBpdCBvbnRvIHRoZSBzeXN0ZW0gbW9kZSBzdGFjay4NCisJTERNSUEJU1AhLCB7UjB9DQogDQotOw0KLVBvcCBSMCBzbyB3ZSBjYW4gc2F2ZSBpdCBvbnRvIHRoZSBzeXN0ZW0gbW9kZSBzdGFjay4NCi0gICBMRE1JQSBTUCAhLCB7IFIwIH0NCisJOyBQdXNoIGFsbCB0aGUgc3lzdGVtIG1vZGUgcmVnaXN0ZXJzIG9udG8gdGhlIHRhc2sgc3RhY2suDQorCVNUTURCCUxSLCB7UjAtTFJ9Xg0KKwlOT1ANCisJU1VCCQlMUiwgTFIsICM2MA0KIA0KLTsNCi1QdXNoIGFsbCB0aGUgc3lzdGVtIG1vZGUgcmVnaXN0ZXJzIG9udG8gdGhlIHRhc2sgc3RhY2suDQotICAgU1RNREIgTFIsIHsgUjAgLSBMUiB9IF4NCi1OT1ANCi1TVUIgTFIsIExSLCAjIDYwDQorCTsgUHVzaCB0aGUgU1BTUiBvbnRvIHRoZSB0YXNrIHN0YWNrLg0KKwlNUlMJCVIwLCBTUFNSDQorCVNUTURCCUxSISwge1IwfQ0KIA0KLTsNCi1QdXNoIHRoZSBTUFNSIG9udG8gdGhlIHRhc2sgc3RhY2suDQotICAgTVJTIFIwLCBTUFNSDQotU1RNREIgTFIgISwgeyBSMCB9DQorCUxEUgkJUjAsID11bENyaXRpY2FsTmVzdGluZw0KKwlMRFIJCVIwLCBbUjBdDQorCVNUTURCCUxSISwge1IwfQ0KIA0KLUxEUiBSMCwgPSB1bENyaXRpY2FsTmVzdGluZw0KLSAgICAgICAgICBMRFIgUjAsIFsgUjAgXQ0KLVNUTURCIExSICEsIHsgUjAgfQ0KKwk7IFN0b3JlIHRoZSBuZXcgdG9wIG9mIHN0YWNrIGZvciB0aGUgdGFzay4NCisJTERSCQlSMSwgPXB4Q3VycmVudFRDQg0KKwlMRFIJCVIwLCBbUjFdDQorCVNUUgkJTFIsIFtSMF0NCiANCi07DQotU3RvcmUgdGhlIG5ldyB0b3Agb2Ygc3RhY2sgZm9yIHRoZSB0YXNrLg0KLSAgIExEUiBSMSwgPSBweEN1cnJlbnRUQ0INCi0gICAgICAgICAgICAgTERSIFIwLCBbIFIxIF0NCi1TVFIgTFIsIFsgUjAgXQ0KLQ0KLUVORE0NCisJRU5ETQ0KIA0KIA0KIHBvcnRSRVNUT1JFX0NPTlRFWFQgTUFDUk8NCiANCi07DQotU2V0IHRoZSBMUiB0byB0aGUgdGFzayBzdGFjay4NCi0gICBMRFIgUjEsID0gcHhDdXJyZW50VENCDQotICAgICAgICAgICAgIExEUiBSMCwgWyBSMSBdDQotTERSIExSLCBbIFIwIF0NCisJOyBTZXQgdGhlIExSIHRvIHRoZSB0YXNrIHN0YWNrLg0KKwlMRFIJCVIxLCA9cHhDdXJyZW50VENCDQorCUxEUgkJUjAsIFtSMV0NCisJTERSCQlMUiwgW1IwXQ0KIA0KLTsNCi1UaGUgY3JpdGljYWwgbmVzdGluZyBkZXB0aCBpcyB0aGUgZmlyc3QgaXRlbSBvbiB0aGUgc3RhY2suDQotICAgOw0KLUxvYWQgaXQgaW50byB0aGUgdWxDcml0aWNhbE5lc3RpbmcgdmFyaWFibGUuDQotICAgTERSIFIwLCA9IHVsQ3JpdGljYWxOZXN0aW5nDQotICAgICAgICAgICAgIExETUZEIExSICEsIHsgUjEgfQ0KLVNUUiBSMSwgWyBSMCBdDQorCTsgVGhlIGNyaXRpY2FsIG5lc3RpbmcgZGVwdGggaXMgdGhlIGZpcnN0IGl0ZW0gb24gdGhlIHN0YWNrLg0KKwk7IExvYWQgaXQgaW50byB0aGUgdWxDcml0aWNhbE5lc3RpbmcgdmFyaWFibGUuDQorCUxEUgkJUjAsID11bENyaXRpY2FsTmVzdGluZw0KKwlMRE1GRAlMUiEsIHtSMX0NCisJU1RSCQlSMSwgW1IwXQ0KIA0KLTsNCi1HZXQgdGhlIFNQU1IgZnJvbSB0aGUgc3RhY2suDQotICAgTERNRkQgTFIgISwgeyBSMCB9DQotTVNSIFNQU1JfY3hzZiwgUjANCisJOyBHZXQgdGhlIFNQU1IgZnJvbSB0aGUgc3RhY2suDQorCUxETUZECUxSISwge1IwfQ0KKwlNU1IJCVNQU1JfY3hzZiwgUjANCiANCi07DQotUmVzdG9yZSBhbGwgc3lzdGVtIG1vZGUgcmVnaXN0ZXJzIGZvciB0aGUgdGFzay4NCi0gICBMRE1GRCBMUiwgeyBSMCAtIFIxNCB9IF4NCi1OT1ANCisJOyBSZXN0b3JlIGFsbCBzeXN0ZW0gbW9kZSByZWdpc3RlcnMgZm9yIHRoZSB0YXNrLg0KKwlMRE1GRAlMUiwge1IwLVIxNH1eDQorCU5PUA0KIA0KLTsNCi1SZXN0b3JlIHRoZSByZXR1cm4gYWRkcmVzcy4NCi0gICAgICAgICAgTERSIExSLCBbIExSLCAjICsgNjAgXQ0KKwk7IFJlc3RvcmUgdGhlIHJldHVybiBhZGRyZXNzLg0KKwlMRFIJCUxSLCBbTFIsICMrNjBdDQogDQotOw0KKwk7IEFuZCByZXR1cm4gLSBjb3JyZWN0aW5nIHRoZSBvZmZzZXQgaW4gdGhlIExSIHRvIG9idGFpbiB0aGUNCisJOyBjb3JyZWN0IGFkZHJlc3MuDQorCVNVQlMJUEMsIExSLCAjNA0KIA0KLUFuZCByZXR1cm4gLWNvcnJlY3RpbmcgdGhlIG9mZnNldCBpbiB0aGUgTFIgdG8gb2J0YWluIHRoZQ0KLTsNCisJRU5ETQ0KIA0KLWNvcnJlY3QgYWRkcmVzcy4NCi0gICBTVUJTIFBDLCBMUiwgIyA0DQotDQotRU5ETQ0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0lBUi9TVFI3MXgvcG9ydC5jIGIvcG9ydGFibGUvSUFSL1NUUjcxeC9wb3J0LmMKaW5kZXggOTY1NzBkNy4uYTI4NTY0MyAxMDA2NDQKLS0tIGEvcG9ydGFibGUvSUFSL1NUUjcxeC9wb3J0LmMKKysrIGIvcG9ydGFibGUvSUFSL1NUUjcxeC9wb3J0LmMKQEAgLTI2LDkgKzI2LDkgQEAKICAqLw0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0qIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBTVCBTVFI3MXggQVJNNw0KLSogcG9ydC4NCi0qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorICogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFibGUuaCBmb3IgdGhlIFNUIFNUUjcxeCBBUk03DQorICogcG9ydC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIExpYnJhcnkgaW5jbHVkZXMuICovDQogI2luY2x1ZGUgIndkZy5oIg0KQEAgLTQyLDE0ICs0MiwxNCBAQAogI2luY2x1ZGUgInRhc2suaCINCiANCiAvKiBDb25zdGFudHMgcmVxdWlyZWQgdG8gc2V0dXAgdGhlIGluaXRpYWwgc3RhY2suICovDQotI2RlZmluZSBwb3J0SU5JVElBTF9TUFNSICAgICAgICAgICAoICggU3RhY2tUeXBlX3QgKSAweDFmICkgICAgICAvKiBTeXN0ZW0gbW9kZSwgQVJNIG1vZGUsIGludGVycnVwdHMgZW5hYmxlZC4gKi8NCi0jZGVmaW5lIHBvcnRUSFVNQl9NT0RFX0JJVCAgICAgICAgICggKCBTdGFja1R5cGVfdCApIDB4MjAgKQ0KLSNkZWZpbmUgcG9ydElOU1RSVUNUSU9OX1NJWkUgICAgICAgKCAoIFN0YWNrVHlwZV90ICkgNCApDQorI2RlZmluZSBwb3J0SU5JVElBTF9TUFNSCQkJCSggKCBTdGFja1R5cGVfdCApIDB4MWYgKSAvKiBTeXN0ZW0gbW9kZSwgQVJNIG1vZGUsIGludGVycnVwdHMgZW5hYmxlZC4gKi8NCisjZGVmaW5lIHBvcnRUSFVNQl9NT0RFX0JJVAkJCQkoICggU3RhY2tUeXBlX3QgKSAweDIwICkNCisjZGVmaW5lIHBvcnRJTlNUUlVDVElPTl9TSVpFCQkJKCAoIFN0YWNrVHlwZV90ICkgNCApDQogDQogLyogQ29uc3RhbnRzIHJlcXVpcmVkIHRvIGhhbmRsZSBjcml0aWNhbCBzZWN0aW9ucy4gKi8NCi0jZGVmaW5lIHBvcnROT19DUklUSUNBTF9ORVNUSU5HICAgICggKCB1aW50MzJfdCApIDAgKQ0KKyNkZWZpbmUgcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgCQkoICggdWludDMyX3QgKSAwICkNCiANCi0jZGVmaW5lIHBvcnRNSUNST1NfUEVSX1NFQ09ORCAgICAgIDEwMDAwMDANCisjZGVmaW5lIHBvcnRNSUNST1NfUEVSX1NFQ09ORCAxMDAwMDAwDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQpAQCAtNTcsMTMgKzU3LDEzIEBACiBzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICk7DQogDQogLyogdWxDcml0aWNhbE5lc3Rpbmcgd2lsbCBnZXQgc2V0IHRvIHplcm8gd2hlbiB0aGUgZmlyc3QgdGFzayBzdGFydHMuICBJdA0KLSAqIGNhbm5vdCBiZSBpbml0aWFsaXNlZCB0byAwIGFzIHRoaXMgd2lsbCBjYXVzZSBpbnRlcnJ1cHRzIHRvIGJlIGVuYWJsZWQNCi0gKiBkdXJpbmcgdGhlIGtlcm5lbCBpbml0aWFsaXNhdGlvbiBwcm9jZXNzLiAqLw0KK2Nhbm5vdCBiZSBpbml0aWFsaXNlZCB0byAwIGFzIHRoaXMgd2lsbCBjYXVzZSBpbnRlcnJ1cHRzIHRvIGJlIGVuYWJsZWQNCitkdXJpbmcgdGhlIGtlcm5lbCBpbml0aWFsaXNhdGlvbiBwcm9jZXNzLiAqLw0KIHVpbnQzMl90IHVsQ3JpdGljYWxOZXN0aW5nID0gKCB1aW50MzJfdCApIDk5OTk7DQogDQogLyogVGljayBpbnRlcnJ1cHQgcm91dGluZXMgZm9yIGNvb3BlcmF0aXZlIGFuZCBwcmVlbXB0aXZlIG9wZXJhdGlvbg0KLSAqIHJlc3BlY3RpdmVseS4gIFRoZSBwcmVlbXB0aXZlIHZlcnNpb24gaXMgbm90IGRlZmluZWQgYXMgX19pcnEgYXMgaXQgaXMgY2FsbGVkDQotICogZnJvbSBhbiBhc20gd3JhcHBlciBmdW5jdGlvbi4gKi8NCityZXNwZWN0aXZlbHkuICBUaGUgcHJlZW1wdGl2ZSB2ZXJzaW9uIGlzIG5vdCBkZWZpbmVkIGFzIF9faXJxIGFzIGl0IGlzIGNhbGxlZA0KK2Zyb20gYW4gYXNtIHdyYXBwZXIgZnVuY3Rpb24uICovDQogX19hcm0gX19pcnEgdm9pZCB2UG9ydE5vblByZWVtcHRpdmVUaWNrKCB2b2lkICk7DQogdm9pZCB2UG9ydFByZWVtcHRpdmVUaWNrKCB2b2lkICk7DQogDQpAQCAtNzUsMTgwICs3NSwxODQgQEAKICAqDQogICogU2VlIGhlYWRlciBmaWxlIGZvciBkZXNjcmlwdGlvbi4NCiAgKi8NCi1TdGFja1R5cGVfdCAqIHB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKiBweFRvcE9mU3RhY2ssDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqIHB2UGFyYW1ldGVycyApDQorU3RhY2tUeXBlX3QgKnB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKnB4VG9wT2ZTdGFjaywgVGFza0Z1bmN0aW9uX3QgcHhDb2RlLCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KIHsNCi0gICAgU3RhY2tUeXBlX3QgKiBweE9yaWdpbmFsVE9TOw0KK1N0YWNrVHlwZV90ICpweE9yaWdpbmFsVE9TOw0KIA0KLSAgICBweE9yaWdpbmFsVE9TID0gcHhUb3BPZlN0YWNrOw0KKwlweE9yaWdpbmFsVE9TID0gcHhUb3BPZlN0YWNrOw0KIA0KLSAgICAvKiBUbyBlbnN1cmUgYXNzZXJ0cyBpbiB0YXNrcy5jIGRvbid0IGZhaWwsIGFsdGhvdWdoIGluIHRoaXMgY2FzZSB0aGUgYXNzZXJ0DQotICAgICAqIGlzIG5vdCByZWFsbHkgcmVxdWlyZWQuICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkvKiBUbyBlbnN1cmUgYXNzZXJ0cyBpbiB0YXNrcy5jIGRvbid0IGZhaWwsIGFsdGhvdWdoIGluIHRoaXMgY2FzZSB0aGUgYXNzZXJ0DQorCWlzIG5vdCByZWFsbHkgcmVxdWlyZWQuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBTZXR1cCB0aGUgaW5pdGlhbCBzdGFjayBvZiB0aGUgdGFzay4gIFRoZSBzdGFjayBpcyBzZXQgZXhhY3RseSBhcw0KLSAgICAgKiBleHBlY3RlZCBieSB0aGUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpIG1hY3JvLiAqLw0KKwkvKiBTZXR1cCB0aGUgaW5pdGlhbCBzdGFjayBvZiB0aGUgdGFzay4gIFRoZSBzdGFjayBpcyBzZXQgZXhhY3RseSBhcw0KKwlleHBlY3RlZCBieSB0aGUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpIG1hY3JvLiAqLw0KIA0KLSAgICAvKiBGaXJzdCBvbiB0aGUgc3RhY2sgaXMgdGhlIHJldHVybiBhZGRyZXNzIC0gd2hpY2ggaW4gdGhpcyBjYXNlIGlzIHRoZQ0KLSAgICAgKiBzdGFydCBvZiB0aGUgdGFzay4gIFRoZSBvZmZzZXQgaXMgYWRkZWQgdG8gbWFrZSB0aGUgcmV0dXJuIGFkZHJlc3MgYXBwZWFyDQotICAgICAqIGFzIGl0IHdvdWxkIHdpdGhpbiBhbiBJUlEgSVNSLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB4Q29kZSArIHBvcnRJTlNUUlVDVElPTl9TSVpFOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJLyogRmlyc3Qgb24gdGhlIHN0YWNrIGlzIHRoZSByZXR1cm4gYWRkcmVzcyAtIHdoaWNoIGluIHRoaXMgY2FzZSBpcyB0aGUNCisJc3RhcnQgb2YgdGhlIHRhc2suICBUaGUgb2Zmc2V0IGlzIGFkZGVkIHRvIG1ha2UgdGhlIHJldHVybiBhZGRyZXNzIGFwcGVhcg0KKwlhcyBpdCB3b3VsZCB3aXRoaW4gYW4gSVJRIElTUi4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBweENvZGUgKyBwb3J0SU5TVFJVQ1RJT05fU0laRTsJCQ0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweGFhYWFhYWFhOyAgICAvKiBSMTQgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHhPcmlnaW5hbFRPUzsgLyogU3RhY2sgdXNlZCB3aGVuIHRhc2sgc3RhcnRzIGdvZXMgaW4gUjEzLiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDEyMTIxMjEyOyAgICAvKiBSMTIgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMTExMTExMTsgICAgLyogUjExICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTAxMDEwMTA7ICAgIC8qIFIxMCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA5MDkwOTA5OyAgICAvKiBSOSAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA4MDgwODA4OyAgICAvKiBSOCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA3MDcwNzA3OyAgICAvKiBSNyAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA2MDYwNjA2OyAgICAvKiBSNiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA1MDUwNTA1OyAgICAvKiBSNSAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA0MDQwNDA0OyAgICAvKiBSNCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAzMDMwMzAzOyAgICAvKiBSMyAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAyMDIwMjAyOyAgICAvKiBSMiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAxMDEwMTAxOyAgICAvKiBSMSAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweGFhYWFhYWFhOwkvKiBSMTQgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB4T3JpZ2luYWxUT1M7IC8qIFN0YWNrIHVzZWQgd2hlbiB0YXNrIHN0YXJ0cyBnb2VzIGluIFIxMy4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMjEyMTIxMjsJLyogUjEyICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDExMTExMTExOwkvKiBSMTEgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTAxMDEwMTA7CS8qIFIxMCAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwOTA5MDkwOTsJLyogUjkgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDgwODA4MDg7CS8qIFI4ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA3MDcwNzA3OwkvKiBSNyAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNjA2MDYwNjsJLyogUjYgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDUwNTA1MDU7CS8qIFI1ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA0MDQwNDA0OwkvKiBSNCAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMzAzMDMwMzsJLyogUjMgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDIwMjAyMDI7CS8qIFIyICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAxMDEwMTAxOwkvKiBSMSAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQogDQotICAgIC8qIFdoZW4gdGhlIHRhc2sgc3RhcnRzIGlzIHdpbGwgZXhwZWN0IHRvIGZpbmQgdGhlIGZ1bmN0aW9uIHBhcmFtZXRlciBpbg0KLSAgICAgKiBSMC4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwdlBhcmFtZXRlcnM7IC8qIFIwICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkvKiBXaGVuIHRoZSB0YXNrIHN0YXJ0cyBpcyB3aWxsIGV4cGVjdCB0byBmaW5kIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXIgaW4NCisJUjAuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHZQYXJhbWV0ZXJzOyAvKiBSMCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgLyogVGhlIHN0YXR1cyByZWdpc3RlciBpcyBzZXQgZm9yIHN5c3RlbSBtb2RlLCB3aXRoIGludGVycnVwdHMgZW5hYmxlZC4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwb3J0SU5JVElBTF9TUFNSOw0KKwkvKiBUaGUgc3RhdHVzIHJlZ2lzdGVyIGlzIHNldCBmb3Igc3lzdGVtIG1vZGUsIHdpdGggaW50ZXJydXB0cyBlbmFibGVkLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHBvcnRJTklUSUFMX1NQU1I7DQorCQ0KKwlpZiggKCAoIHVpbnQzMl90ICkgcHhDb2RlICYgMHgwMVVMICkgIT0gMHgwMFVMICkNCisJew0KKwkJLyogV2Ugd2FudCB0aGUgdGFzayB0byBzdGFydCBpbiB0aHVtYiBtb2RlLiAqLw0KKwkJKnB4VG9wT2ZTdGFjayB8PSBwb3J0VEhVTUJfTU9ERV9CSVQ7DQorCX0JCQ0KKwkNCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgIGlmKCAoICggdWludDMyX3QgKSBweENvZGUgJiAweDAxVUwgKSAhPSAweDAwVUwgKQ0KLSAgICB7DQotICAgICAgICAvKiBXZSB3YW50IHRoZSB0YXNrIHRvIHN0YXJ0IGluIHRodW1iIG1vZGUuICovDQotICAgICAgICAqcHhUb3BPZlN0YWNrIHw9IHBvcnRUSFVNQl9NT0RFX0JJVDsNCi0gICAgfQ0KKwkvKiBJbnRlcnJ1cHQgZmxhZ3MgY2Fubm90IGFsd2F5cyBiZSBzdG9yZWQgb24gdGhlIHN0YWNrIGFuZCB3aWxsDQorCWluc3RlYWQgYmUgc3RvcmVkIGluIGEgdmFyaWFibGUsIHdoaWNoIGlzIHRoZW4gc2F2ZWQgYXMgcGFydCBvZiB0aGUNCisJdGFza3MgY29udGV4dC4gKi8NCisJKnB4VG9wT2ZTdGFjayA9IHBvcnROT19DUklUSUNBTF9ORVNUSU5HOw0KIA0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0NCi0gICAgLyogSW50ZXJydXB0IGZsYWdzIGNhbm5vdCBhbHdheXMgYmUgc3RvcmVkIG9uIHRoZSBzdGFjayBhbmQgd2lsbA0KLSAgICAgKiBpbnN0ZWFkIGJlIHN0b3JlZCBpbiBhIHZhcmlhYmxlLCB3aGljaCBpcyB0aGVuIHNhdmVkIGFzIHBhcnQgb2YgdGhlDQotICAgICAqIHRhc2tzIGNvbnRleHQuICovDQotICAgICpweFRvcE9mU3RhY2sgPSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORzsNCi0NCi0gICAgcmV0dXJuIHB4VG9wT2ZTdGFjazsNCisJcmV0dXJuIHB4VG9wT2ZTdGFjazsJDQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIEJhc2VUeXBlX3QgeFBvcnRTdGFydFNjaGVkdWxlciggdm9pZCApDQogew0KLSAgICBleHRlcm4gdm9pZCB2UG9ydFN0YXJ0Rmlyc3RUYXNrKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdlBvcnRTdGFydEZpcnN0VGFzayggdm9pZCApOw0KIA0KLSAgICAvKiBTdGFydCB0aGUgdGltZXIgdGhhdCBnZW5lcmF0ZXMgdGhlIHRpY2sgSVNSLiAgSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQNCi0gICAgICogaGVyZSBhbHJlYWR5LiAqLw0KLSAgICBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCk7DQorCS8qIFN0YXJ0IHRoZSB0aW1lciB0aGF0IGdlbmVyYXRlcyB0aGUgdGljayBJU1IuICBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZA0KKwloZXJlIGFscmVhZHkuICovDQorCXBydlNldHVwVGltZXJJbnRlcnJ1cHQoKTsNCiANCi0gICAgLyogU3RhcnQgdGhlIGZpcnN0IHRhc2suICovDQotICAgIHZQb3J0U3RhcnRGaXJzdFRhc2soKTsNCisJLyogU3RhcnQgdGhlIGZpcnN0IHRhc2suICovDQorCXZQb3J0U3RhcnRGaXJzdFRhc2soKTsJDQogDQotICAgIC8qIFNob3VsZCBub3QgZ2V0IGhlcmUhICovDQotICAgIHJldHVybiAwOw0KKwkvKiBTaG91bGQgbm90IGdldCBoZXJlISAqLw0KKwlyZXR1cm4gMDsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogdm9pZCB2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApDQogew0KLSAgICAvKiBJdCBpcyB1bmxpa2VseSB0aGF0IHRoZSBBUk0gcG9ydCB3aWxsIHJlcXVpcmUgdGhpcyBmdW5jdGlvbiBhcyB0aGVyZQ0KLSAgICAgKiBpcyBub3RoaW5nIHRvIHJldHVybiB0by4gICovDQorCS8qIEl0IGlzIHVubGlrZWx5IHRoYXQgdGhlIEFSTSBwb3J0IHdpbGwgcmVxdWlyZSB0aGlzIGZ1bmN0aW9uIGFzIHRoZXJlDQorCWlzIG5vdGhpbmcgdG8gcmV0dXJuIHRvLiAgKi8NCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGhlIGNvb3BlcmF0aXZlIHNjaGVkdWxlciByZXF1aXJlcyBhIG5vcm1hbCBJUlEgc2VydmljZSByb3V0aW5lIHRvDQotICogc2ltcGx5IGluY3JlbWVudCB0aGUgc3lzdGVtIHRpY2suICovDQorc2ltcGx5IGluY3JlbWVudCB0aGUgc3lzdGVtIHRpY2suICovDQogX19hcm0gX19pcnEgdm9pZCB2UG9ydE5vblByZWVtcHRpdmVUaWNrKCB2b2lkICkNCiB7DQotICAgIC8qIEluY3JlbWVudCB0aGUgdGljayBjb3VudCAtIHdoaWNoIG1heSB3YWtlIHNvbWUgdGFza3MgYnV0IGFzIHRoZQ0KLSAgICAgKiBwcmVlbXB0aXZlIHNjaGVkdWxlciBpcyBub3QgYmVpbmcgdXNlZCBhbnkgd29rZW4gdGFzayBpcyBub3QgZ2l2ZW4NCi0gICAgICogcHJvY2Vzc29yIHRpbWUgbm8gbWF0dGVyIHdoYXQgaXRzIHByaW9yaXR5LiAqLw0KLSAgICB4VGFza0luY3JlbWVudFRpY2soKTsNCisJLyogSW5jcmVtZW50IHRoZSB0aWNrIGNvdW50IC0gd2hpY2ggbWF5IHdha2Ugc29tZSB0YXNrcyBidXQgYXMgdGhlDQorCXByZWVtcHRpdmUgc2NoZWR1bGVyIGlzIG5vdCBiZWluZyB1c2VkIGFueSB3b2tlbiB0YXNrIGlzIG5vdCBnaXZlbg0KKwlwcm9jZXNzb3IgdGltZSBubyBtYXR0ZXIgd2hhdCBpdHMgcHJpb3JpdHkuICovDQorCXhUYXNrSW5jcmVtZW50VGljaygpOw0KIA0KLSAgICAvKiBDbGVhciB0aGUgaW50ZXJydXB0IGluIHRoZSB3YXRjaGRvZyBhbmQgRUlDLiAqLw0KLSAgICBXREctPlNSID0gMHgwMDAwOw0KLSAgICBwb3J0Q0xFQVJfRUlDKCk7DQorCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgaW4gdGhlIHdhdGNoZG9nIGFuZCBFSUMuICovDQorCVdERy0+U1IgPSAweDAwMDA7DQorCXBvcnRDTEVBUl9FSUMoKTsJCQ0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGFuIGFzbSB3cmFwcGVyLCBzbyBkb2VzIG5vdCByZXF1aXJlIHRoZSBfX2lycQ0KLSAqIGtleXdvcmQuICovDQora2V5d29yZC4gKi8NCiB2b2lkIHZQb3J0UHJlZW1wdGl2ZVRpY2soIHZvaWQgKQ0KIHsNCi0gICAgLyogSW5jcmVtZW50IHRoZSB0aWNrIGNvdW50ZXIuICovDQotICAgIGlmKCB4VGFza0luY3JlbWVudFRpY2soKSAhPSBwZEZBTFNFICkNCi0gICAgew0KLSAgICAgICAgLyogU2VsZWN0IGEgbmV3IHRhc2sgdG8gZXhlY3V0ZS4gKi8NCi0gICAgICAgIHZUYXNrU3dpdGNoQ29udGV4dCgpOw0KLSAgICB9DQorCS8qIEluY3JlbWVudCB0aGUgdGljayBjb3VudGVyLiAqLw0KKwlpZiggeFRhc2tJbmNyZW1lbnRUaWNrKCkgIT0gcGRGQUxTRSApDQorCXsNCisJCS8qIFNlbGVjdCBhIG5ldyB0YXNrIHRvIGV4ZWN1dGUuICovDQorCQl2VGFza1N3aXRjaENvbnRleHQoKTsNCisJfQ0KIA0KLSAgICAvKiBDbGVhciB0aGUgaW50ZXJydXB0IGluIHRoZSB3YXRjaGRvZyBhbmQgRUlDLiAqLw0KLSAgICBXREctPlNSID0gMHgwMDAwOw0KLSAgICBwb3J0Q0xFQVJfRUlDKCk7DQorCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgaW4gdGhlIHdhdGNoZG9nIGFuZCBFSUMuICovDQorCVdERy0+U1IgPSAweDAwMDA7DQorCXBvcnRDTEVBUl9FSUMoKTsJCQkNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogc3RhdGljIHZvaWQgcHJ2U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApDQogew0KLSAgICAvKiBTZXQgdGhlIHdhdGNoZG9nIHVwIHRvIGdlbmVyYXRlIGEgcGVyaW9kaWMgdGljay4gKi8NCi0gICAgV0RHX0VDSVRDb25maWcoIERJU0FCTEUgKTsNCi0gICAgV0RHX0NudE9uT2ZmQ29uZmlnKCBESVNBQkxFICk7DQotICAgIFdER19QZXJpb2RWYWx1ZUNvbmZpZyggcG9ydE1JQ1JPU19QRVJfU0VDT05EIC8gY29uZmlnVElDS19SQVRFX0haICk7DQorCS8qIFNldCB0aGUgd2F0Y2hkb2cgdXAgdG8gZ2VuZXJhdGUgYSBwZXJpb2RpYyB0aWNrLiAqLw0KKwlXREdfRUNJVENvbmZpZyggRElTQUJMRSApOw0KKwlXREdfQ250T25PZmZDb25maWcoIERJU0FCTEUgKTsNCisJV0RHX1BlcmlvZFZhbHVlQ29uZmlnKCBwb3J0TUlDUk9TX1BFUl9TRUNPTkQgLyBjb25maWdUSUNLX1JBVEVfSFogKTsNCiANCi0gICAgLyogU2V0dXAgdGhlIHRpY2sgaW50ZXJydXB0IGluIHRoZSBFSUMuICovDQotICAgIEVJQ19JUlFDaGFubmVsUHJpb3JpdHlDb25maWcoIFdER19JUlFDaGFubmVsLCAxICk7DQotICAgIEVJQ19JUlFDaGFubmVsQ29uZmlnKCBXREdfSVJRQ2hhbm5lbCwgRU5BQkxFICk7DQotICAgIEVJQ19JUlFDb25maWcoIEVOQUJMRSApOw0KLSAgICBXREdfRUNJVENvbmZpZyggRU5BQkxFICk7DQorCS8qIFNldHVwIHRoZSB0aWNrIGludGVycnVwdCBpbiB0aGUgRUlDLiAqLw0KKwlFSUNfSVJRQ2hhbm5lbFByaW9yaXR5Q29uZmlnKCBXREdfSVJRQ2hhbm5lbCwgMSApOw0KKwlFSUNfSVJRQ2hhbm5lbENvbmZpZyggV0RHX0lSUUNoYW5uZWwsIEVOQUJMRSApOw0KKwlFSUNfSVJRQ29uZmlnKCBFTkFCTEUgKTsNCisJV0RHX0VDSVRDb25maWcoIEVOQUJMRSApOw0KIA0KLSAgICAvKiBTdGFydCB0aGUgdGltZXIgLSBpbnRlcnJ1cHRzIGFyZSBhY3R1YWxseSBkaXNhYmxlZCBhdCB0aGlzIHBvaW50IHNvDQotICAgICAqIGl0IGlzIHNhZmUgdG8gZG8gdGhpcyBoZXJlLiAqLw0KLSAgICBXREdfQ250T25PZmZDb25maWcoIEVOQUJMRSApOw0KKwkvKiBTdGFydCB0aGUgdGltZXIgLSBpbnRlcnJ1cHRzIGFyZSBhY3R1YWxseSBkaXNhYmxlZCBhdCB0aGlzIHBvaW50IHNvDQorCWl0IGlzIHNhZmUgdG8gZG8gdGhpcyBoZXJlLiAqLw0KKwlXREdfQ250T25PZmZDb25maWcoIEVOQUJMRSApOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBfX2FybSBfX2ludGVyd29yayB2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCggdm9pZCApDQogew0KLSAgICAvKiBEaXNhYmxlIGludGVycnVwdHMgZmlyc3QhICovDQotICAgIF9fZGlzYWJsZV9pbnRlcnJ1cHQoKTsNCisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIGZpcnN0ISAqLw0KKwlfX2Rpc2FibGVfaW50ZXJydXB0KCk7DQogDQotICAgIC8qIE5vdyBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB1bENyaXRpY2FsTmVzdGluZyBjYW4gYmUgYWNjZXNzZWQNCi0gICAgICogZGlyZWN0bHkuICBJbmNyZW1lbnQgdWxDcml0aWNhbE5lc3RpbmcgdG8ga2VlcCBhIGNvdW50IG9mIGhvdyBtYW55IHRpbWVzDQotICAgICAqIHBvcnRFTlRFUl9DUklUSUNBTCgpIGhhcyBiZWVuIGNhbGxlZC4gKi8NCi0gICAgdWxDcml0aWNhbE5lc3RpbmcrKzsNCisJLyogTm93IGludGVycnVwdHMgYXJlIGRpc2FibGVkIHVsQ3JpdGljYWxOZXN0aW5nIGNhbiBiZSBhY2Nlc3NlZA0KKwlkaXJlY3RseS4gIEluY3JlbWVudCB1bENyaXRpY2FsTmVzdGluZyB0byBrZWVwIGEgY291bnQgb2YgaG93IG1hbnkgdGltZXMNCisJcG9ydEVOVEVSX0NSSVRJQ0FMKCkgaGFzIGJlZW4gY2FsbGVkLiAqLw0KKwl1bENyaXRpY2FsTmVzdGluZysrOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBfX2FybSBfX2ludGVyd29yayB2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICkNCiB7DQotICAgIGlmKCB1bENyaXRpY2FsTmVzdGluZyA+IHBvcnROT19DUklUSUNBTF9ORVNUSU5HICkNCi0gICAgew0KLSAgICAgICAgLyogRGVjcmVtZW50IHRoZSBuZXN0aW5nIGNvdW50IGFzIHdlIGFyZSBsZWF2aW5nIGEgY3JpdGljYWwgc2VjdGlvbi4gKi8NCi0gICAgICAgIHVsQ3JpdGljYWxOZXN0aW5nLS07DQorCWlmKCB1bENyaXRpY2FsTmVzdGluZyA+IHBvcnROT19DUklUSUNBTF9ORVNUSU5HICkNCisJew0KKwkJLyogRGVjcmVtZW50IHRoZSBuZXN0aW5nIGNvdW50IGFzIHdlIGFyZSBsZWF2aW5nIGEgY3JpdGljYWwgc2VjdGlvbi4gKi8NCisJCXVsQ3JpdGljYWxOZXN0aW5nLS07DQogDQotICAgICAgICAvKiBJZiB0aGUgbmVzdGluZyBsZXZlbCBoYXMgcmVhY2hlZCB6ZXJvIHRoZW4gaW50ZXJydXB0cyBzaG91bGQgYmUNCi0gICAgICAgICAqIHJlLWVuYWJsZWQuICovDQotICAgICAgICBpZiggdWxDcml0aWNhbE5lc3RpbmcgPT0gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIF9fZW5hYmxlX2ludGVycnVwdCgpOw0KLSAgICAgICAgfQ0KLSAgICB9DQorCQkvKiBJZiB0aGUgbmVzdGluZyBsZXZlbCBoYXMgcmVhY2hlZCB6ZXJvIHRoZW4gaW50ZXJydXB0cyBzaG91bGQgYmUNCisJCXJlLWVuYWJsZWQuICovDQorCQlpZiggdWxDcml0aWNhbE5lc3RpbmcgPT0gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgKQ0KKwkJew0KKwkJCV9fZW5hYmxlX2ludGVycnVwdCgpOw0KKwkJfQ0KKwl9DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKw0KKw0KKw0KKw0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0lBUi9TVFI3MXgvcG9ydG1hY3JvLmggYi9wb3J0YWJsZS9JQVIvU1RSNzF4L3BvcnRtYWNyby5oCmluZGV4IDU5YjM1MjYuLmNhMmUzYmEgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0lBUi9TVFI3MXgvcG9ydG1hY3JvLmgKKysrIGIvcG9ydGFibGUvSUFSL1NUUjcxeC9wb3J0bWFjcm8uaApAQCAtMjcsNyArMjcsNyBAQAogDQogDQogI2lmbmRlZiBQT1JUTUFDUk9fSA0KLSAgICAjZGVmaW5lIFBPUlRNQUNST19IDQorI2RlZmluZSBQT1JUTUFDUk9fSA0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgKiBQb3J0IHNwZWNpZmljIGRlZmluaXRpb25zLg0KQEAgLTM5LDgxICszOSw4MyBAQAogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAqLw0KIA0KLSAgICAjaW5jbHVkZSA8aW50cmluc2ljcy5oPg0KKyNpbmNsdWRlIDxpbnRyaW5zaWNzLmg+DQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgZXh0ZXJuICJDIiB7DQotICAgICNlbmRpZg0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KIA0KIA0KIC8qIFR5cGUgZGVmaW5pdGlvbnMuICovDQotICAgICNkZWZpbmUgcG9ydENIQVIgICAgICAgICAgY2hhcg0KLSAgICAjZGVmaW5lIHBvcnRGTE9BVCAgICAgICAgIGZsb2F0DQotICAgICNkZWZpbmUgcG9ydERPVUJMRSAgICAgICAgZG91YmxlDQotICAgICNkZWZpbmUgcG9ydExPTkcgICAgICAgICAgbG9uZw0KLSAgICAjZGVmaW5lIHBvcnRTSE9SVCAgICAgICAgIHNob3J0DQotICAgICNkZWZpbmUgcG9ydFNUQUNLX1RZUEUgICAgdWludDMyX3QNCi0gICAgI2RlZmluZSBwb3J0QkFTRV9UWVBFICAgICBsb25nDQorI2RlZmluZSBwb3J0Q0hBUgkJY2hhcg0KKyNkZWZpbmUgcG9ydEZMT0FUCQlmbG9hdA0KKyNkZWZpbmUgcG9ydERPVUJMRQkJZG91YmxlDQorI2RlZmluZSBwb3J0TE9ORwkJbG9uZw0KKyNkZWZpbmUgcG9ydFNIT1JUCQlzaG9ydA0KKyNkZWZpbmUgcG9ydFNUQUNLX1RZUEUJdWludDMyX3QNCisjZGVmaW5lIHBvcnRCQVNFX1RZUEUJbG9uZw0KIA0KLSAgICB0eXBlZGVmIHBvcnRTVEFDS19UWVBFICAgU3RhY2tUeXBlX3Q7DQotICAgIHR5cGVkZWYgbG9uZyAgICAgICAgICAgICBCYXNlVHlwZV90Ow0KLSAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgICAgVUJhc2VUeXBlX3Q7DQordHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSBTdGFja1R5cGVfdDsNCit0eXBlZGVmIGxvbmcgQmFzZVR5cGVfdDsNCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgVUJhc2VUeXBlX3Q7DQogDQogDQotICAgICNpZiAoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQotICAgICAgICB0eXBlZGVmIHVpbnQxNl90ICAgICBUaWNrVHlwZV90Ow0KLSAgICAgICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICggVGlja1R5cGVfdCApIDB4ZmZmZg0KLSAgICAjZWxzZQ0KLSAgICAgICAgdHlwZWRlZiB1aW50MzJfdCAgICAgVGlja1R5cGVfdDsNCi0gICAgICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwNCi0gICAgI2VuZGlmDQorI2lmKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KKwl0eXBlZGVmIHVpbnQxNl90IFRpY2tUeXBlX3Q7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIFRpY2tUeXBlX3QgKSAweGZmZmYNCisjZWxzZQ0KKwl0eXBlZGVmIHVpbnQzMl90IFRpY2tUeXBlX3Q7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwNCisjZW5kaWYNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBIYXJkd2FyZSBzcGVjaWZpY3MuICovDQotICAgICNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSCAgICAgICggLTEgKQ0KLSAgICAjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUyAgICAoICggVGlja1R5cGVfdCApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KLSAgICAjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVCAgICA4DQotICAgICNkZWZpbmUgcG9ydFlJRUxEKCkgICAgYXNtICggIlNXSSAwIiApDQotICAgICNkZWZpbmUgcG9ydE5PUCgpICAgICAgYXNtICggIk5PUCIgKQ0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJCSggLTEgKQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TCQkJKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCisjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVAkJCTgNCisjZGVmaW5lIHBvcnRZSUVMRCgpCQkJCQlhc20gKCAiU1dJIDAiICkNCisjZGVmaW5lIHBvcnROT1AoKQkJCQkJYXNtICggIk5PUCIgKQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIENyaXRpY2FsIHNlY3Rpb24gaGFuZGxpbmcuICovDQotICAgIF9fYXJtIF9faW50ZXJ3b3JrIHZvaWQgdlBvcnREaXNhYmxlSW50ZXJydXB0c0Zyb21UaHVtYiggdm9pZCApOw0KLSAgICBfX2FybSBfX2ludGVyd29yayB2b2lkIHZQb3J0RW5hYmxlSW50ZXJydXB0c0Zyb21UaHVtYiggdm9pZCApOw0KLSAgICBfX2FybSBfX2ludGVyd29yayB2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCggdm9pZCApOw0KLSAgICBfX2FybSBfX2ludGVyd29yayB2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICk7DQorX19hcm0gX19pbnRlcndvcmsgdm9pZCB2UG9ydERpc2FibGVJbnRlcnJ1cHRzRnJvbVRodW1iKCB2b2lkICk7DQorX19hcm0gX19pbnRlcndvcmsgdm9pZCB2UG9ydEVuYWJsZUludGVycnVwdHNGcm9tVGh1bWIoIHZvaWQgKTsNCitfX2FybSBfX2ludGVyd29yayB2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCggdm9pZCApOw0KK19fYXJtIF9faW50ZXJ3b3JrIHZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCiANCi0gICAgI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgICAgX19kaXNhYmxlX2ludGVycnVwdCgpDQotICAgICNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkgICAgIF9fZW5hYmxlX2ludGVycnVwdCgpDQotICAgICNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgICAgICAgIHZQb3J0RW50ZXJDcml0aWNhbCgpDQotICAgICNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKSAgICAgICAgIHZQb3J0RXhpdENyaXRpY2FsKCkNCisjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKQlfX2Rpc2FibGVfaW50ZXJydXB0KCkNCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpCQlfX2VuYWJsZV9pbnRlcnJ1cHQoKQ0KKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkJCXZQb3J0RW50ZXJDcml0aWNhbCgpDQorI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpCQkJdlBvcnRFeGl0Q3JpdGljYWwoKQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFRhc2sgdXRpbGl0aWVzLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRFTkRfU1dJVENISU5HX0lTUiggeFN3aXRjaFJlcXVpcmVkICkgXA0KLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgZXh0ZXJuIHZvaWQgdlRhc2tTd2l0Y2hDb250ZXh0KCB2b2lkICk7ICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgaWYoIHhTd2l0Y2hSZXF1aXJlZCApICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIHZUYXNrU3dpdGNoQ29udGV4dCgpOyAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB9DQorI2RlZmluZSBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHhTd2l0Y2hSZXF1aXJlZCApIAlcDQorewkJCQkJCQkJCQkJCQlcDQorZXh0ZXJuIHZvaWQgdlRhc2tTd2l0Y2hDb250ZXh0KCB2b2lkICk7CQkJCVwNCisJCQkJCQkJCQkJCQkJXA0KKwlpZiggeFN3aXRjaFJlcXVpcmVkICkgCQkJCQkJCVwNCisJewkJCQkJCQkJCQkJCVwNCisJCXZUYXNrU3dpdGNoQ29udGV4dCgpOwkJCQkJCVwNCisJfQkJCQkJCQkJCQkJCVwNCit9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogRUlDIHV0aWxpdGllcy4gKi8NCi0gICAgI2RlZmluZSBwb3J0RUlDX0NJQ1JfQUREUiAgICAqKCAoIHVpbnQzMl90ICogKSAweEZGRkZGODA0ICkNCi0gICAgI2RlZmluZSBwb3J0RUlDX0lQUl9BRERSICAgICAqKCAoIHVpbnQzMl90ICogKSAweEZGRkZGODQwICkNCi0gICAgI2RlZmluZSBwb3J0Q0xFQVJfRUlDKCkgICAgcG9ydEVJQ19JUFJfQUREUiA9IDB4MDEgPDwgcG9ydEVJQ19DSUNSX0FERFINCisjZGVmaW5lIHBvcnRFSUNfQ0lDUl9BRERSCQkqKCAoIHVpbnQzMl90ICogKSAweEZGRkZGODA0ICkNCisjZGVmaW5lIHBvcnRFSUNfSVBSX0FERFIJCSooICggdWludDMyX3QgKiApIDB4RkZGRkY4NDAgKQ0KKyNkZWZpbmUgcG9ydENMRUFSX0VJQygpCQkJcG9ydEVJQ19JUFJfQUREUiA9IDB4MDEgPDwgcG9ydEVJQ19DSUNSX0FERFINCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBUYXNrIGZ1bmN0aW9uIG1hY3JvcyBhcyBkZXNjcmliZWQgb24gdGhlIEZyZWVSVE9TLm9yZyBXRUIgc2l0ZS4gKi8NCi0gICAgI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQotICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgICAgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KIA0KLSAgICAjaWZkZWYgX19jcGx1c3BsdXMNCi0gICAgICAgIH0NCi0gICAgI2VuZGlmDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KIA0KICNlbmRpZiAvKiBQT1JUTUFDUk9fSCAqLw0KKw0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0lBUi9TVFI3NXgvSVNSX1N1cHBvcnQuaCBiL3BvcnRhYmxlL0lBUi9TVFI3NXgvSVNSX1N1cHBvcnQuaAppbmRleCA3MmY0YjE1Li4zNjBmZmY2IDEwMDY0NAotLS0gYS9wb3J0YWJsZS9JQVIvU1RSNzV4L0lTUl9TdXBwb3J0LmgKKysrIGIvcG9ydGFibGUvSUFSL1NUUjc1eC9JU1JfU3VwcG9ydC5oCkBAIC0xLDEyMyArMSwxMDUgQEAKLTsgLyoNCi0gICAqIDsgKiBGcmVlUlRPUyBLZXJuZWwgVjEwLjMuMQ0KLSAgICogOyAqIENvcHlyaWdodCAoQykgMjAyMCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAqIDsgKg0KLSAgICogOyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YNCi0gICAqIDsgKiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbg0KLSAgICogOyAqIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8NCi0gICAqIDsgKiB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZg0KLSAgICogOyAqIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywNCi0gICAqIDsgKiBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoNCi0gICAqIDsgKg0KLSAgICogOyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbA0KLSAgICogOyAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuDQotICAgKiA7ICoNCi0gICAqIDsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUg0KLSAgICogOyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTDQotICAgKiA7ICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SDQotICAgKiA7ICogQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSDQotICAgKiA7ICogSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4NCi0gICAqIDsgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLg0KLSAgICogOyAqDQotICAgKiA7ICogaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcNCi0gICAqIDsgKiBodHRwOi8vYXdzLmFtYXpvbi5jb20vZnJlZXJ0b3MNCi0gICAqIDsgKg0KLSAgICogOyAqIDEgdGFiID09IDQgc3BhY2VzIQ0KLSAgICogOyAqLw0KKzsvKg0KKzsgKiBGcmVlUlRPUyBLZXJuZWwgVjEwLjMuMQ0KKzsgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQorOyAqDQorOyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YNCis7ICogdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4NCis7ICogdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bw0KKzsgKiB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZg0KKzsgKiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sDQorOyAqIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOg0KKzsgKg0KKzsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwNCis7ICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4NCis7ICoNCis7ICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1INCis7ICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MNCis7ICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SDQorOyAqIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUg0KKzsgKiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTg0KKzsgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLg0KKzsgKg0KKzsgKiBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZw0KKzsgKiBodHRwOi8vYXdzLmFtYXpvbi5jb20vZnJlZXJ0b3MNCis7ICoNCis7ICogMSB0YWIgPT0gNCBzcGFjZXMhDQorOyAqLw0KIA0KLUVYVEVSTiBweEN1cnJlbnRUQ0INCi1FWFRFUk4gdWxDcml0aWNhbE5lc3RpbmcNCisJRVhURVJOIHB4Q3VycmVudFRDQg0KKwlFWFRFUk4gdWxDcml0aWNhbE5lc3RpbmcNCiANCi07DQotQ29udGV4dCBzYXZlIGFuZCByZXN0b3JlIG1hY3JvIGRlZmluaXRpb25zDQotOw0KKzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsNCis7IENvbnRleHQgc2F2ZSBhbmQgcmVzdG9yZSBtYWNybyBkZWZpbml0aW9ucw0KKzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsNCiANCiBwb3J0U0FWRV9DT05URVhUIE1BQ1JPDQogDQotOw0KLVB1c2ggUjAgYXMgd2UgYXJlIGdvaW5nIHRvIHVzZSB0aGUgcmVnaXN0ZXIuDQotICAgU1RNREIgU1AgISwgeyBSMCB9DQorCTsgUHVzaCBSMCBhcyB3ZSBhcmUgZ29pbmcgdG8gdXNlIHRoZSByZWdpc3Rlci4NCisJU1RNREIJU1AhLCB7UjB9DQogDQotOw0KLVNldCBSMCB0byBwb2ludCB0byB0aGUgdGFzayBzdGFjayBwb2ludGVyLg0KLSAgIFNUTURCIFNQLCB7IFNQIH0gXg0KLU5PUA0KLVNVQiBTUCwgU1AsICMgNA0KLUxETUlBIFNQICEsIHsgUjAgfQ0KKwk7IFNldCBSMCB0byBwb2ludCB0byB0aGUgdGFzayBzdGFjayBwb2ludGVyLg0KKwlTVE1EQglTUCwge1NQfV4NCisJTk9QDQorCVNVQgkJU1AsIFNQLCAjNA0KKwlMRE1JQQlTUCEsIHtSMH0NCiANCi07DQotUHVzaCB0aGUgcmV0dXJuIGFkZHJlc3Mgb250byB0aGUgc3RhY2suDQotICAgICAgICAgIFNUTURCIFIwICEsIHsgTFIgfQ0KKwk7IFB1c2ggdGhlIHJldHVybiBhZGRyZXNzIG9udG8gdGhlIHN0YWNrLg0KKwlTVE1EQglSMCEsIHtMUn0NCiANCi07DQorCTsgTm93IHdlIGhhdmUgc2F2ZWQgTFIgd2UgY2FuIHVzZSBpdCBpbnN0ZWFkIG9mIFIwLg0KKwlNT1YJCUxSLCBSMA0KIA0KLU5vdyB3ZSBoYXZlIHNhdmVkIExSIHdlIGNhbiB1c2UgaXQgaW5zdGVhZCBvZiBSMC4NCi0gICBNT1YgTFIsIFIwDQorCTsgUG9wIFIwIHNvIHdlIGNhbiBzYXZlIGl0IG9udG8gdGhlIHN5c3RlbSBtb2RlIHN0YWNrLg0KKwlMRE1JQQlTUCEsIHtSMH0NCiANCi07DQotUG9wIFIwIHNvIHdlIGNhbiBzYXZlIGl0IG9udG8gdGhlIHN5c3RlbSBtb2RlIHN0YWNrLg0KLSAgIExETUlBIFNQICEsIHsgUjAgfQ0KKwk7IFB1c2ggYWxsIHRoZSBzeXN0ZW0gbW9kZSByZWdpc3RlcnMgb250byB0aGUgdGFzayBzdGFjay4NCisJU1RNREIJTFIsIHtSMC1MUn1eDQorCU5PUA0KKwlTVUIJCUxSLCBMUiwgIzYwDQogDQotOw0KLVB1c2ggYWxsIHRoZSBzeXN0ZW0gbW9kZSByZWdpc3RlcnMgb250byB0aGUgdGFzayBzdGFjay4NCi0gICBTVE1EQiBMUiwgeyBSMCAtIExSIH0gXg0KLU5PUA0KLVNVQiBMUiwgTFIsICMgNjANCisJOyBQdXNoIHRoZSBTUFNSIG9udG8gdGhlIHRhc2sgc3RhY2suDQorCU1SUwkJUjAsIFNQU1INCisJU1RNREIJTFIhLCB7UjB9DQogDQotOw0KLVB1c2ggdGhlIFNQU1Igb250byB0aGUgdGFzayBzdGFjay4NCi0gICBNUlMgUjAsIFNQU1INCi1TVE1EQiBMUiAhLCB7IFIwIH0NCisJTERSCQlSMCwgPXVsQ3JpdGljYWxOZXN0aW5nDQorCUxEUgkJUjAsIFtSMF0NCisJU1RNREIJTFIhLCB7UjB9DQogDQotTERSIFIwLCA9IHVsQ3JpdGljYWxOZXN0aW5nDQotICAgICAgICAgIExEUiBSMCwgWyBSMCBdDQotU1RNREIgTFIgISwgeyBSMCB9DQorCTsgU3RvcmUgdGhlIG5ldyB0b3Agb2Ygc3RhY2sgZm9yIHRoZSB0YXNrLg0KKwlMRFIJCVIxLCA9cHhDdXJyZW50VENCDQorCUxEUgkJUjAsIFtSMV0NCisJU1RSCQlMUiwgW1IwXQ0KIA0KLTsNCi1TdG9yZSB0aGUgbmV3IHRvcCBvZiBzdGFjayBmb3IgdGhlIHRhc2suDQotICAgTERSIFIxLCA9IHB4Q3VycmVudFRDQg0KLSAgICAgICAgICAgICBMRFIgUjAsIFsgUjEgXQ0KLVNUUiBMUiwgWyBSMCBdDQotDQotRU5ETQ0KKwlFTkRNDQogDQogDQogcG9ydFJFU1RPUkVfQ09OVEVYVCBNQUNSTw0KIA0KLTsNCi1TZXQgdGhlIExSIHRvIHRoZSB0YXNrIHN0YWNrLg0KLSAgIExEUiBSMSwgPSBweEN1cnJlbnRUQ0INCi0gICAgICAgICAgICAgTERSIFIwLCBbIFIxIF0NCi1MRFIgTFIsIFsgUjAgXQ0KKwk7IFNldCB0aGUgTFIgdG8gdGhlIHRhc2sgc3RhY2suDQorCUxEUgkJUjEsID1weEN1cnJlbnRUQ0INCisJTERSCQlSMCwgW1IxXQ0KKwlMRFIJCUxSLCBbUjBdDQogDQotOw0KLVRoZSBjcml0aWNhbCBuZXN0aW5nIGRlcHRoIGlzIHRoZSBmaXJzdCBpdGVtIG9uIHRoZSBzdGFjay4NCi0gICA7DQotTG9hZCBpdCBpbnRvIHRoZSB1bENyaXRpY2FsTmVzdGluZyB2YXJpYWJsZS4NCi0gICBMRFIgUjAsID0gdWxDcml0aWNhbE5lc3RpbmcNCi0gICAgICAgICAgICAgTERNRkQgTFIgISwgeyBSMSB9DQotU1RSIFIxLCBbIFIwIF0NCisJOyBUaGUgY3JpdGljYWwgbmVzdGluZyBkZXB0aCBpcyB0aGUgZmlyc3QgaXRlbSBvbiB0aGUgc3RhY2suDQorCTsgTG9hZCBpdCBpbnRvIHRoZSB1bENyaXRpY2FsTmVzdGluZyB2YXJpYWJsZS4NCisJTERSCQlSMCwgPXVsQ3JpdGljYWxOZXN0aW5nDQorCUxETUZECUxSISwge1IxfQ0KKwlTVFIJCVIxLCBbUjBdDQogDQotOw0KLUdldCB0aGUgU1BTUiBmcm9tIHRoZSBzdGFjay4NCi0gICBMRE1GRCBMUiAhLCB7IFIwIH0NCi1NU1IgU1BTUl9jeHNmLCBSMA0KKwk7IEdldCB0aGUgU1BTUiBmcm9tIHRoZSBzdGFjay4NCisJTERNRkQJTFIhLCB7UjB9DQorCU1TUgkJU1BTUl9jeHNmLCBSMA0KIA0KLTsNCi1SZXN0b3JlIGFsbCBzeXN0ZW0gbW9kZSByZWdpc3RlcnMgZm9yIHRoZSB0YXNrLg0KLSAgIExETUZEIExSLCB7IFIwIC0gUjE0IH0gXg0KLU5PUA0KKwk7IFJlc3RvcmUgYWxsIHN5c3RlbSBtb2RlIHJlZ2lzdGVycyBmb3IgdGhlIHRhc2suDQorCUxETUZECUxSLCB7UjAtUjE0fV4NCisJTk9QDQogDQotOw0KLVJlc3RvcmUgdGhlIHJldHVybiBhZGRyZXNzLg0KLSAgICAgICAgICBMRFIgTFIsIFsgTFIsICMgKyA2MCBdDQorCTsgUmVzdG9yZSB0aGUgcmV0dXJuIGFkZHJlc3MuDQorCUxEUgkJTFIsIFtMUiwgIys2MF0NCiANCi07DQorCTsgQW5kIHJldHVybiAtIGNvcnJlY3RpbmcgdGhlIG9mZnNldCBpbiB0aGUgTFIgdG8gb2J0YWluIHRoZQ0KKwk7IGNvcnJlY3QgYWRkcmVzcy4NCisJU1VCUwlQQywgTFIsICM0DQogDQotQW5kIHJldHVybiAtY29ycmVjdGluZyB0aGUgb2Zmc2V0IGluIHRoZSBMUiB0byBvYnRhaW4gdGhlDQotOw0KKwlFTkRNDQogDQotY29ycmVjdCBhZGRyZXNzLg0KLSAgIFNVQlMgUEMsIExSLCAjIDQNCi0NCi1FTkRNDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvSUFSL1NUUjc1eC9wb3J0LmMgYi9wb3J0YWJsZS9JQVIvU1RSNzV4L3BvcnQuYwppbmRleCBmZTBmYmQyLi4yMGI0YTM1IDEwMDY0NAotLS0gYS9wb3J0YWJsZS9JQVIvU1RSNzV4L3BvcnQuYworKysgYi9wb3J0YWJsZS9JQVIvU1RSNzV4L3BvcnQuYwpAQCAtMjYsOSArMjYsOSBAQAogICovDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLSogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFibGUuaCBmb3IgdGhlIFNUIFNUUjc1eCBBUk03DQotKiBwb3J0Lg0KLSotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgU1QgU1RSNzV4IEFSTTcNCisgKiBwb3J0Lg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogTGlicmFyeSBpbmNsdWRlcy4gKi8NCiAjaW5jbHVkZSAiNzV4X3RiLmgiDQpAQCAtMzksMTQgKzM5LDE0IEBACiAjaW5jbHVkZSAidGFzay5oIg0KIA0KIC8qIENvbnN0YW50cyByZXF1aXJlZCB0byBzZXR1cCB0aGUgaW5pdGlhbCBzdGFjay4gKi8NCi0jZGVmaW5lIHBvcnRJTklUSUFMX1NQU1IgICAgICAgICAgICggKCBTdGFja1R5cGVfdCApIDB4M2YgKSAgICAgIC8qIFN5c3RlbSBtb2RlLCBUSFVNQiBtb2RlLCBpbnRlcnJ1cHRzIGVuYWJsZWQuICovDQotI2RlZmluZSBwb3J0SU5TVFJVQ1RJT05fU0laRSAgICAgICAoICggU3RhY2tUeXBlX3QgKSA0ICkNCisjZGVmaW5lIHBvcnRJTklUSUFMX1NQU1IJCQkJKCAoIFN0YWNrVHlwZV90ICkgMHgzZiApIC8qIFN5c3RlbSBtb2RlLCBUSFVNQiBtb2RlLCBpbnRlcnJ1cHRzIGVuYWJsZWQuICovDQorI2RlZmluZSBwb3J0SU5TVFJVQ1RJT05fU0laRQkJCSggKCBTdGFja1R5cGVfdCApIDQgKQ0KIA0KIC8qIENvbnN0YW50cyByZXF1aXJlZCB0byBoYW5kbGUgY3JpdGljYWwgc2VjdGlvbnMuICovDQotI2RlZmluZSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyAgICAoICggdWludDMyX3QgKSAwICkNCisjZGVmaW5lIHBvcnROT19DUklUSUNBTF9ORVNUSU5HIAkJKCAoIHVpbnQzMl90ICkgMCApDQogDQogLyogUHJlc2NhbGUgdXNlZCBvbiB0aGUgdGltZXIgY2xvY2sgd2hlbiBjYWxjdWxhdGluZyB0aGUgdGljayBwZXJpb2QuICovDQotI2RlZmluZSBwb3J0UFJFU0NBTEUgICAgICAgICAgICAgICAyMA0KKyNkZWZpbmUgcG9ydFBSRVNDQUxFIDIwDQogDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQpAQCAtNTUsOCArNTUsOCBAQAogc3RhdGljIHZvaWQgcHJ2U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApOw0KIA0KIC8qIHVsQ3JpdGljYWxOZXN0aW5nIHdpbGwgZ2V0IHNldCB0byB6ZXJvIHdoZW4gdGhlIGZpcnN0IHRhc2sgc3RhcnRzLiAgSXQNCi0gKiBjYW5ub3QgYmUgaW5pdGlhbGlzZWQgdG8gMCBhcyB0aGlzIHdpbGwgY2F1c2UgaW50ZXJydXB0cyB0byBiZSBlbmFibGVkDQotICogZHVyaW5nIHRoZSBrZXJuZWwgaW5pdGlhbGlzYXRpb24gcHJvY2Vzcy4gKi8NCitjYW5ub3QgYmUgaW5pdGlhbGlzZWQgdG8gMCBhcyB0aGlzIHdpbGwgY2F1c2UgaW50ZXJydXB0cyB0byBiZSBlbmFibGVkDQorZHVyaW5nIHRoZSBrZXJuZWwgaW5pdGlhbGlzYXRpb24gcHJvY2Vzcy4gKi8NCiB1aW50MzJfdCB1bENyaXRpY2FsTmVzdGluZyA9ICggdWludDMyX3QgKSA5OTk5Ow0KIA0KIC8qIFRpY2sgaW50ZXJydXB0IHJvdXRpbmVzIGZvciBwcmVlbXB0aXZlIG9wZXJhdGlvbi4gKi8NCkBAIC03MCwxNjQgKzcwLDE2OCBAQAogICoNCiAgKiBTZWUgaGVhZGVyIGZpbGUgZm9yIGRlc2NyaXB0aW9uLg0KICAqLw0KLVN0YWNrVHlwZV90ICogcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqIHB4VG9wT2ZTdGFjaywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFza0Z1bmN0aW9uX3QgcHhDb2RlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICogcHZQYXJhbWV0ZXJzICkNCitTdGFja1R5cGVfdCAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqcHhUb3BPZlN0YWNrLCBUYXNrRnVuY3Rpb25fdCBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycyApDQogew0KLSAgICBTdGFja1R5cGVfdCAqIHB4T3JpZ2luYWxUT1M7DQorU3RhY2tUeXBlX3QgKnB4T3JpZ2luYWxUT1M7DQogDQotICAgIHB4T3JpZ2luYWxUT1MgPSBweFRvcE9mU3RhY2s7DQorCXB4T3JpZ2luYWxUT1MgPSBweFRvcE9mU3RhY2s7DQogDQotICAgIC8qIFRvIGVuc3VyZSBhc3NlcnRzIGluIHRhc2tzLmMgZG9uJ3QgZmFpbCwgYWx0aG91Z2ggaW4gdGhpcyBjYXNlIHRoZSBhc3NlcnQNCi0gICAgICogaXMgbm90IHJlYWxseSByZXF1aXJlZC4gKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIFRvIGVuc3VyZSBhc3NlcnRzIGluIHRhc2tzLmMgZG9uJ3QgZmFpbCwgYWx0aG91Z2ggaW4gdGhpcyBjYXNlIHRoZSBhc3NlcnQNCisJaXMgbm90IHJlYWxseSByZXF1aXJlZC4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgIC8qIFNldHVwIHRoZSBpbml0aWFsIHN0YWNrIG9mIHRoZSB0YXNrLiAgVGhlIHN0YWNrIGlzIHNldCBleGFjdGx5IGFzDQotICAgICAqIGV4cGVjdGVkIGJ5IHRoZSBwb3J0UkVTVE9SRV9DT05URVhUKCkgbWFjcm8uICovDQorCS8qIFNldHVwIHRoZSBpbml0aWFsIHN0YWNrIG9mIHRoZSB0YXNrLiAgVGhlIHN0YWNrIGlzIHNldCBleGFjdGx5IGFzDQorCWV4cGVjdGVkIGJ5IHRoZSBwb3J0UkVTVE9SRV9DT05URVhUKCkgbWFjcm8uICovDQogDQotICAgIC8qIEZpcnN0IG9uIHRoZSBzdGFjayBpcyB0aGUgcmV0dXJuIGFkZHJlc3MgLSB3aGljaCBpbiB0aGlzIGNhc2UgaXMgdGhlDQotICAgICAqIHN0YXJ0IG9mIHRoZSB0YXNrLiAgVGhlIG9mZnNldCBpcyBhZGRlZCB0byBtYWtlIHRoZSByZXR1cm4gYWRkcmVzcyBhcHBlYXINCi0gICAgICogYXMgaXQgd291bGQgd2l0aGluIGFuIElSUSBJU1IuICovDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHhDb2RlICsgcG9ydElOU1RSVUNUSU9OX1NJWkU7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkvKiBGaXJzdCBvbiB0aGUgc3RhY2sgaXMgdGhlIHJldHVybiBhZGRyZXNzIC0gd2hpY2ggaW4gdGhpcyBjYXNlIGlzIHRoZQ0KKwlzdGFydCBvZiB0aGUgdGFzay4gIFRoZSBvZmZzZXQgaXMgYWRkZWQgdG8gbWFrZSB0aGUgcmV0dXJuIGFkZHJlc3MgYXBwZWFyDQorCWFzIGl0IHdvdWxkIHdpdGhpbiBhbiBJUlEgSVNSLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB4Q29kZSArIHBvcnRJTlNUUlVDVElPTl9TSVpFOwkJDQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4YWFhYWFhYWE7ICAgIC8qIFIxNCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBweE9yaWdpbmFsVE9TOyAvKiBTdGFjayB1c2VkIHdoZW4gdGFzayBzdGFydHMgZ29lcyBpbiBSMTMuICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTIxMjEyMTI7ICAgIC8qIFIxMiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDExMTExMTExOyAgICAvKiBSMTEgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMDEwMTAxMDsgICAgLyogUjEwICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDkwOTA5MDk7ICAgIC8qIFI5ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDgwODA4MDg7ICAgIC8qIFI4ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDcwNzA3MDc7ICAgIC8qIFI3ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDYwNjA2MDY7ICAgIC8qIFI2ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDUwNTA1MDU7ICAgIC8qIFI1ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDQwNDA0MDQ7ICAgIC8qIFI0ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDMwMzAzMDM7ICAgIC8qIFIzICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDIwMjAyMDI7ICAgIC8qIFIyICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDEwMTAxMDE7ICAgIC8qIFIxICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4YWFhYWFhYWE7CS8qIFIxNCAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHhPcmlnaW5hbFRPUzsgLyogU3RhY2sgdXNlZCB3aGVuIHRhc2sgc3RhcnRzIGdvZXMgaW4gUjEzLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDEyMTIxMjEyOwkvKiBSMTIgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTExMTExMTE7CS8qIFIxMSAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMDEwMTAxMDsJLyogUjEwICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA5MDkwOTA5OwkvKiBSOSAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwODA4MDgwODsJLyogUjggKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDcwNzA3MDc7CS8qIFI3ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA2MDYwNjA2OwkvKiBSNiAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNTA1MDUwNTsJLyogUjUgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDQwNDA0MDQ7CS8qIFI0ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAzMDMwMzAzOwkvKiBSMyAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMjAyMDIwMjsJLyogUjIgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDEwMTAxMDE7CS8qIFIxICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCiANCi0gICAgLyogV2hlbiB0aGUgdGFzayBzdGFydHMgaXMgd2lsbCBleHBlY3QgdG8gZmluZCB0aGUgZnVuY3Rpb24gcGFyYW1ldGVyIGluDQotICAgICAqIFIwLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB2UGFyYW1ldGVyczsgLyogUjAgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIFdoZW4gdGhlIHRhc2sgc3RhcnRzIGlzIHdpbGwgZXhwZWN0IHRvIGZpbmQgdGhlIGZ1bmN0aW9uIHBhcmFtZXRlciBpbg0KKwlSMC4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwdlBhcmFtZXRlcnM7IC8qIFIwICovDQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBUaGUgc3RhdHVzIHJlZ2lzdGVyIGlzIHNldCBmb3Igc3lzdGVtIG1vZGUsIHdpdGggaW50ZXJydXB0cyBlbmFibGVkLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHBvcnRJTklUSUFMX1NQU1I7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkvKiBUaGUgc3RhdHVzIHJlZ2lzdGVyIGlzIHNldCBmb3Igc3lzdGVtIG1vZGUsIHdpdGggaW50ZXJydXB0cyBlbmFibGVkLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHBvcnRJTklUSUFMX1NQU1I7DQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBJbnRlcnJ1cHQgZmxhZ3MgY2Fubm90IGFsd2F5cyBiZSBzdG9yZWQgb24gdGhlIHN0YWNrIGFuZCB3aWxsDQotICAgICAqIGluc3RlYWQgYmUgc3RvcmVkIGluIGEgdmFyaWFibGUsIHdoaWNoIGlzIHRoZW4gc2F2ZWQgYXMgcGFydCBvZiB0aGUNCi0gICAgICogdGFza3MgY29udGV4dC4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9IHBvcnROT19DUklUSUNBTF9ORVNUSU5HOw0KKwkvKiBJbnRlcnJ1cHQgZmxhZ3MgY2Fubm90IGFsd2F5cyBiZSBzdG9yZWQgb24gdGhlIHN0YWNrIGFuZCB3aWxsDQorCWluc3RlYWQgYmUgc3RvcmVkIGluIGEgdmFyaWFibGUsIHdoaWNoIGlzIHRoZW4gc2F2ZWQgYXMgcGFydCBvZiB0aGUNCisJdGFza3MgY29udGV4dC4gKi8NCisJKnB4VG9wT2ZTdGFjayA9IHBvcnROT19DUklUSUNBTF9ORVNUSU5HOw0KIA0KLSAgICByZXR1cm4gcHhUb3BPZlN0YWNrOw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOwkNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogQmFzZVR5cGVfdCB4UG9ydFN0YXJ0U2NoZWR1bGVyKCB2b2lkICkNCiB7DQotICAgIGV4dGVybiB2b2lkIHZQb3J0U3RhcnRGaXJzdFRhc2soIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2UG9ydFN0YXJ0Rmlyc3RUYXNrKCB2b2lkICk7DQogDQotICAgIC8qIFN0YXJ0IHRoZSB0aW1lciB0aGF0IGdlbmVyYXRlcyB0aGUgdGljayBJU1IuICBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZA0KLSAgICAgKiBoZXJlIGFscmVhZHkuICovDQotICAgIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoKTsNCisJLyogU3RhcnQgdGhlIHRpbWVyIHRoYXQgZ2VuZXJhdGVzIHRoZSB0aWNrIElTUi4gIEludGVycnVwdHMgYXJlIGRpc2FibGVkDQorCWhlcmUgYWxyZWFkeS4gKi8NCisJcHJ2U2V0dXBUaW1lckludGVycnVwdCgpOw0KIA0KLSAgICAvKiBTdGFydCB0aGUgZmlyc3QgdGFzay4gKi8NCi0gICAgdlBvcnRTdGFydEZpcnN0VGFzaygpOw0KKwkvKiBTdGFydCB0aGUgZmlyc3QgdGFzay4gKi8NCisJdlBvcnRTdGFydEZpcnN0VGFzaygpOwkNCiANCi0gICAgLyogU2hvdWxkIG5vdCBnZXQgaGVyZSEgKi8NCi0gICAgcmV0dXJuIDA7DQorCS8qIFNob3VsZCBub3QgZ2V0IGhlcmUhICovDQorCXJldHVybiAwOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0RW5kU2NoZWR1bGVyKCB2b2lkICkNCiB7DQotICAgIC8qIEl0IGlzIHVubGlrZWx5IHRoYXQgdGhlIEFSTSBwb3J0IHdpbGwgcmVxdWlyZSB0aGlzIGZ1bmN0aW9uIGFzIHRoZXJlDQotICAgICAqIGlzIG5vdGhpbmcgdG8gcmV0dXJuIHRvLiAgKi8NCisJLyogSXQgaXMgdW5saWtlbHkgdGhhdCB0aGUgQVJNIHBvcnQgd2lsbCByZXF1aXJlIHRoaXMgZnVuY3Rpb24gYXMgdGhlcmUNCisJaXMgbm90aGluZyB0byByZXR1cm4gdG8uICAqLw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBfX2FybSB2b2lkIHZQb3J0UHJlZW1wdGl2ZVRpY2soIHZvaWQgKQ0KIHsNCi0gICAgLyogSW5jcmVtZW50IHRoZSB0aWNrIGNvdW50ZXIuICovDQotICAgIGlmKCB4VGFza0luY3JlbWVudFRpY2soKSAhPSBwZEZBTFNFICkNCi0gICAgew0KLSAgICAgICAgLyogU2VsZWN0IGEgbmV3IHRhc2sgdG8gZXhlY3V0ZS4gKi8NCi0gICAgICAgIHZUYXNrU3dpdGNoQ29udGV4dCgpOw0KLSAgICB9DQotDQotICAgIFRCX0NsZWFySVRQZW5kaW5nQml0KCBUQl9JVF9VcGRhdGUgKTsNCisJLyogSW5jcmVtZW50IHRoZSB0aWNrIGNvdW50ZXIuICovDQorCWlmKCB4VGFza0luY3JlbWVudFRpY2soKSAhPSBwZEZBTFNFICkNCisJew0KKwkJLyogU2VsZWN0IGEgbmV3IHRhc2sgdG8gZXhlY3V0ZS4gKi8NCisJCXZUYXNrU3dpdGNoQ29udGV4dCgpOw0KKwl9DQorCQkNCisJVEJfQ2xlYXJJVFBlbmRpbmdCaXQoIFRCX0lUX1VwZGF0ZSApOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICkNCiB7DQotICAgIEVJQ19JUlFJbml0VHlwZURlZiBFSUNfSVJRSW5pdFN0cnVjdHVyZTsNCi0gICAgVEJfSW5pdFR5cGVEZWYgVEJfSW5pdFN0cnVjdHVyZTsNCitFSUNfSVJRSW5pdFR5cGVEZWYgIEVJQ19JUlFJbml0U3RydWN0dXJlOwkNCitUQl9Jbml0VHlwZURlZiAgICAgIFRCX0luaXRTdHJ1Y3R1cmU7DQogDQotICAgIC8qIFNldHVwIHRoZSBFSUMgZm9yIHRoZSBUQi4gKi8NCi0gICAgRUlDX0lSUUluaXRTdHJ1Y3R1cmUuRUlDX0lSUUNoYW5uZWxDbWQgPSBFTkFCTEU7DQotICAgIEVJQ19JUlFJbml0U3RydWN0dXJlLkVJQ19JUlFDaGFubmVsID0gVEJfSVJRQ2hhbm5lbDsNCi0gICAgRUlDX0lSUUluaXRTdHJ1Y3R1cmUuRUlDX0lSUUNoYW5uZWxQcmlvcml0eSA9IDE7DQotICAgIEVJQ19JUlFJbml0KCAmRUlDX0lSUUluaXRTdHJ1Y3R1cmUgKTsNCisJLyogU2V0dXAgdGhlIEVJQyBmb3IgdGhlIFRCLiAqLw0KKwlFSUNfSVJRSW5pdFN0cnVjdHVyZS5FSUNfSVJRQ2hhbm5lbENtZCA9IEVOQUJMRTsNCisJRUlDX0lSUUluaXRTdHJ1Y3R1cmUuRUlDX0lSUUNoYW5uZWwgPSBUQl9JUlFDaGFubmVsOw0KKwlFSUNfSVJRSW5pdFN0cnVjdHVyZS5FSUNfSVJRQ2hhbm5lbFByaW9yaXR5ID0gMTsNCisJRUlDX0lSUUluaXQoJkVJQ19JUlFJbml0U3RydWN0dXJlKTsNCisJDQorCS8qIFNldHVwIHRoZSBUQiBmb3IgdGhlIGdlbmVyYXRpb24gb2YgdGhlIHRpY2sgaW50ZXJydXB0LiAqLw0KKwlUQl9Jbml0U3RydWN0dXJlLlRCX01vZGUgPSBUQl9Nb2RlX1RpbWluZzsNCisJVEJfSW5pdFN0cnVjdHVyZS5UQl9Db3VudGVyTW9kZSA9IFRCX0NvdW50ZXJNb2RlX0Rvd247DQorCVRCX0luaXRTdHJ1Y3R1cmUuVEJfUHJlc2NhbGVyID0gcG9ydFBSRVNDQUxFIC0gMTsNCisJVEJfSW5pdFN0cnVjdHVyZS5UQl9BdXRvUmVsb2FkID0gKCAoIGNvbmZpZ0NQVV9DTE9DS19IWiAvIHBvcnRQUkVTQ0FMRSApIC8gY29uZmlnVElDS19SQVRFX0haICk7DQorCVRCX0luaXQoJlRCX0luaXRTdHJ1Y3R1cmUpOw0KKwkNCisJLyogRW5hYmxlIFRCIFVwZGF0ZSBpbnRlcnJ1cHQgKi8NCisJVEJfSVRDb25maWcoVEJfSVRfVXBkYXRlLCBFTkFCTEUpOw0KIA0KLSAgICAvKiBTZXR1cCB0aGUgVEIgZm9yIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSB0aWNrIGludGVycnVwdC4gKi8NCi0gICAgVEJfSW5pdFN0cnVjdHVyZS5UQl9Nb2RlID0gVEJfTW9kZV9UaW1pbmc7DQotICAgIFRCX0luaXRTdHJ1Y3R1cmUuVEJfQ291bnRlck1vZGUgPSBUQl9Db3VudGVyTW9kZV9Eb3duOw0KLSAgICBUQl9Jbml0U3RydWN0dXJlLlRCX1ByZXNjYWxlciA9IHBvcnRQUkVTQ0FMRSAtIDE7DQotICAgIFRCX0luaXRTdHJ1Y3R1cmUuVEJfQXV0b1JlbG9hZCA9ICggKCBjb25maWdDUFVfQ0xPQ0tfSFogLyBwb3J0UFJFU0NBTEUgKSAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApOw0KLSAgICBUQl9Jbml0KCAmVEJfSW5pdFN0cnVjdHVyZSApOw0KKwkvKiBDbGVhciBUQiBVcGRhdGUgaW50ZXJydXB0IHBlbmRpbmcgYml0ICovDQorCVRCX0NsZWFySVRQZW5kaW5nQml0KFRCX0lUX1VwZGF0ZSk7DQogDQotICAgIC8qIEVuYWJsZSBUQiBVcGRhdGUgaW50ZXJydXB0ICovDQotICAgIFRCX0lUQ29uZmlnKCBUQl9JVF9VcGRhdGUsIEVOQUJMRSApOw0KLQ0KLSAgICAvKiBDbGVhciBUQiBVcGRhdGUgaW50ZXJydXB0IHBlbmRpbmcgYml0ICovDQotICAgIFRCX0NsZWFySVRQZW5kaW5nQml0KCBUQl9JVF9VcGRhdGUgKTsNCi0NCi0gICAgLyogRW5hYmxlIFRCICovDQotICAgIFRCX0NtZCggRU5BQkxFICk7DQorCS8qIEVuYWJsZSBUQiAqLw0KKwlUQl9DbWQoRU5BQkxFKTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogX19hcm0gX19pbnRlcndvcmsgdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKQ0KIHsNCi0gICAgLyogRGlzYWJsZSBpbnRlcnJ1cHRzIGZpcnN0ISAqLw0KLSAgICBfX2Rpc2FibGVfaW50ZXJydXB0KCk7DQorCS8qIERpc2FibGUgaW50ZXJydXB0cyBmaXJzdCEgKi8NCisJX19kaXNhYmxlX2ludGVycnVwdCgpOw0KIA0KLSAgICAvKiBOb3cgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgdWxDcml0aWNhbE5lc3RpbmcgY2FuIGJlIGFjY2Vzc2VkDQotICAgICAqIGRpcmVjdGx5LiAgSW5jcmVtZW50IHVsQ3JpdGljYWxOZXN0aW5nIHRvIGtlZXAgYSBjb3VudCBvZiBob3cgbWFueSB0aW1lcw0KLSAgICAgKiBwb3J0RU5URVJfQ1JJVElDQUwoKSBoYXMgYmVlbiBjYWxsZWQuICovDQotICAgIHVsQ3JpdGljYWxOZXN0aW5nKys7DQorCS8qIE5vdyBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB1bENyaXRpY2FsTmVzdGluZyBjYW4gYmUgYWNjZXNzZWQNCisJZGlyZWN0bHkuICBJbmNyZW1lbnQgdWxDcml0aWNhbE5lc3RpbmcgdG8ga2VlcCBhIGNvdW50IG9mIGhvdyBtYW55IHRpbWVzDQorCXBvcnRFTlRFUl9DUklUSUNBTCgpIGhhcyBiZWVuIGNhbGxlZC4gKi8NCisJdWxDcml0aWNhbE5lc3RpbmcrKzsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogX19hcm0gX19pbnRlcndvcmsgdm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApDQogew0KLSAgICBpZiggdWxDcml0aWNhbE5lc3RpbmcgPiBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyApDQotICAgIHsNCi0gICAgICAgIC8qIERlY3JlbWVudCB0aGUgbmVzdGluZyBjb3VudCBhcyB3ZSBhcmUgbGVhdmluZyBhIGNyaXRpY2FsIHNlY3Rpb24uICovDQotICAgICAgICB1bENyaXRpY2FsTmVzdGluZy0tOw0KKwlpZiggdWxDcml0aWNhbE5lc3RpbmcgPiBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyApDQorCXsNCisJCS8qIERlY3JlbWVudCB0aGUgbmVzdGluZyBjb3VudCBhcyB3ZSBhcmUgbGVhdmluZyBhIGNyaXRpY2FsIHNlY3Rpb24uICovDQorCQl1bENyaXRpY2FsTmVzdGluZy0tOw0KIA0KLSAgICAgICAgLyogSWYgdGhlIG5lc3RpbmcgbGV2ZWwgaGFzIHJlYWNoZWQgemVybyB0aGVuIGludGVycnVwdHMgc2hvdWxkIGJlDQotICAgICAgICAgKiByZS1lbmFibGVkLiAqLw0KLSAgICAgICAgaWYoIHVsQ3JpdGljYWxOZXN0aW5nID09IHBvcnROT19DUklUSUNBTF9ORVNUSU5HICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBfX2VuYWJsZV9pbnRlcnJ1cHQoKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KKwkJLyogSWYgdGhlIG5lc3RpbmcgbGV2ZWwgaGFzIHJlYWNoZWQgemVybyB0aGVuIGludGVycnVwdHMgc2hvdWxkIGJlDQorCQlyZS1lbmFibGVkLiAqLw0KKwkJaWYoIHVsQ3JpdGljYWxOZXN0aW5nID09IHBvcnROT19DUklUSUNBTF9ORVNUSU5HICkNCisJCXsNCisJCQlfX2VuYWJsZV9pbnRlcnJ1cHQoKTsNCisJCX0NCisJfQ0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisNCisNCisNCisNCisNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9JQVIvU1RSNzV4L3BvcnRtYWNyby5oIGIvcG9ydGFibGUvSUFSL1NUUjc1eC9wb3J0bWFjcm8uaAppbmRleCAyMWYxMWNhLi5mOWE4YTFlIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9JQVIvU1RSNzV4L3BvcnRtYWNyby5oCisrKyBiL3BvcnRhYmxlL0lBUi9TVFI3NXgvcG9ydG1hY3JvLmgKQEAgLTI3LDcgKzI3LDcgQEAKIA0KIA0KICNpZm5kZWYgUE9SVE1BQ1JPX0gNCi0gICAgI2RlZmluZSBQT1JUTUFDUk9fSA0KKyNkZWZpbmUgUE9SVE1BQ1JPX0gNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICogUG9ydCBzcGVjaWZpYyBkZWZpbml0aW9ucy4NCkBAIC0zOSw3MiArMzksNzQgQEAKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgKi8NCiANCi0gICAgI2luY2x1ZGUgPGludHJpbnNpY3MuaD4NCisjaW5jbHVkZSA8aW50cmluc2ljcy5oPg0KIA0KLSAgICAjaWZkZWYgX19jcGx1c3BsdXMNCi0gICAgICAgIGV4dGVybiAiQyIgew0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCiANCiAvKiBUeXBlIGRlZmluaXRpb25zLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRDSEFSICAgICAgICAgIGNoYXINCi0gICAgI2RlZmluZSBwb3J0RkxPQVQgICAgICAgICBmbG9hdA0KLSAgICAjZGVmaW5lIHBvcnRET1VCTEUgICAgICAgIGRvdWJsZQ0KLSAgICAjZGVmaW5lIHBvcnRMT05HICAgICAgICAgIGxvbmcNCi0gICAgI2RlZmluZSBwb3J0U0hPUlQgICAgICAgICBzaG9ydA0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19UWVBFICAgIHVpbnQzMl90DQotICAgICNkZWZpbmUgcG9ydEJBU0VfVFlQRSAgICAgbG9uZw0KKyNkZWZpbmUgcG9ydENIQVIJCWNoYXINCisjZGVmaW5lIHBvcnRGTE9BVAkJZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUJCWRvdWJsZQ0KKyNkZWZpbmUgcG9ydExPTkcJCWxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVAkJc2hvcnQNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFCXVpbnQzMl90DQorI2RlZmluZSBwb3J0QkFTRV9UWVBFCWxvbmcNCiANCi0gICAgdHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSAgIFN0YWNrVHlwZV90Ow0KLSAgICB0eXBlZGVmIGxvbmcgICAgICAgICAgICAgQmFzZVR5cGVfdDsNCi0gICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nICAgIFVCYXNlVHlwZV90Ow0KK3R5cGVkZWYgcG9ydFNUQUNLX1RZUEUgU3RhY2tUeXBlX3Q7DQordHlwZWRlZiBsb25nIEJhc2VUeXBlX3Q7DQordHlwZWRlZiB1bnNpZ25lZCBsb25nIFVCYXNlVHlwZV90Ow0KIA0KIA0KLSAgICAjaWYgKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KLSAgICAgICAgdHlwZWRlZiB1aW50MTZfdCAgICAgVGlja1R5cGVfdDsNCi0gICAgICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmYNCi0gICAgI2Vsc2UNCi0gICAgICAgIHR5cGVkZWYgdWludDMyX3QgICAgIFRpY2tUeXBlX3Q7DQotICAgICAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQotICAgICNlbmRpZg0KKyNpZiggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCisJdHlwZWRlZiB1aW50MTZfdCBUaWNrVHlwZV90Ow0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQorI2Vsc2UNCisJdHlwZWRlZiB1aW50MzJfdCBUaWNrVHlwZV90Ow0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQorI2VuZGlmDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogSGFyZHdhcmUgc3BlY2lmaWNzLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEggICAgICAoIC0xICkNCi0gICAgI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMgICAgKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCi0gICAgI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQgICAgOA0KLSAgICAjZGVmaW5lIHBvcnRZSUVMRCgpICAgIGFzbSAoICJTV0kgMCIgKQ0KLSAgICAjZGVmaW5lIHBvcnROT1AoKSAgICAgIGFzbSAoICJOT1AiICkNCisjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEgJCQkoIC0xICkNCisjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUwkJCSggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQorI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQJCQk4DQorI2RlZmluZSBwb3J0WUlFTEQoKQkJCQkJYXNtICggIlNXSSAwIiApDQorI2RlZmluZSBwb3J0Tk9QKCkJCQkJCWFzbSAoICJOT1AiICkNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBDcml0aWNhbCBzZWN0aW9uIGhhbmRsaW5nLiAqLw0KLSAgICBfX2FybSBfX2ludGVyd29yayB2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCggdm9pZCApOw0KLSAgICBfX2FybSBfX2ludGVyd29yayB2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICk7DQorX19hcm0gX19pbnRlcndvcmsgdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKTsNCitfX2FybSBfX2ludGVyd29yayB2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICk7DQogDQotICAgICNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpICAgIF9fZGlzYWJsZV9pbnRlcnJ1cHQoKQ0KLSAgICAjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpICAgICBfX2VuYWJsZV9pbnRlcnJ1cHQoKQ0KLSAgICAjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpICAgICAgICB2UG9ydEVudGVyQ3JpdGljYWwoKQ0KLSAgICAjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkgICAgICAgICB2UG9ydEV4aXRDcml0aWNhbCgpDQorI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkJX19kaXNhYmxlX2ludGVycnVwdCgpDQorI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKQkJX19lbmFibGVfaW50ZXJydXB0KCkNCisjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpCQl2UG9ydEVudGVyQ3JpdGljYWwoKQ0KKyNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKQkJCXZQb3J0RXhpdENyaXRpY2FsKCkNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBUYXNrIHV0aWxpdGllcy4gKi8NCi0gICAgI2RlZmluZSBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHhTd2l0Y2hSZXF1aXJlZCApIFwNCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGV4dGVybiB2b2lkIHZUYXNrU3dpdGNoQ29udGV4dCggdm9pZCApOyAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGlmKCB4U3dpdGNoUmVxdWlyZWQgKSAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICB2VGFza1N3aXRjaENvbnRleHQoKTsgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgfQ0KKyNkZWZpbmUgcG9ydEVORF9TV0lUQ0hJTkdfSVNSKCB4U3dpdGNoUmVxdWlyZWQgKSAJXA0KK3sJCQkJCQkJCQkJCQkJXA0KK2V4dGVybiB2b2lkIHZUYXNrU3dpdGNoQ29udGV4dCggdm9pZCApOwkJCQlcDQorCQkJCQkJCQkJCQkJCVwNCisJaWYoIHhTd2l0Y2hSZXF1aXJlZCApIAkJCQkJCQlcDQorCXsJCQkJCQkJCQkJCQlcDQorCQl2VGFza1N3aXRjaENvbnRleHQoKTsJCQkJCQlcDQorCX0JCQkJCQkJCQkJCQlcDQorfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIA0KIC8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCi0gICAgI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICAgICAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgfQ0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQogDQogI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQorDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvSUFSL1NUUjkxeC9JU1JfU3VwcG9ydC5oIGIvcG9ydGFibGUvSUFSL1NUUjkxeC9JU1JfU3VwcG9ydC5oCmluZGV4IDMzNTIxNjAuLmM0YTEyYTIgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0lBUi9TVFI5MXgvSVNSX1N1cHBvcnQuaAorKysgYi9wb3J0YWJsZS9JQVIvU1RSOTF4L0lTUl9TdXBwb3J0LmgKQEAgLTI1LDk5ICsyNSw4MSBAQAogICogMSB0YWIgPT0gNCBzcGFjZXMhDQogICovDQogDQotRVhURVJOIHB4Q3VycmVudFRDQg0KLUVYVEVSTiB1bENyaXRpY2FsTmVzdGluZw0KKwlFWFRFUk4gcHhDdXJyZW50VENCDQorCUVYVEVSTiB1bENyaXRpY2FsTmVzdGluZw0KIA0KLTsNCi1Db250ZXh0IHNhdmUgYW5kIHJlc3RvcmUgbWFjcm8gZGVmaW5pdGlvbnMNCi07DQorOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ow0KKzsgQ29udGV4dCBzYXZlIGFuZCByZXN0b3JlIG1hY3JvIGRlZmluaXRpb25zDQorOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ow0KIA0KIHBvcnRTQVZFX0NPTlRFWFQgTUFDUk8NCiANCi07DQotUHVzaCBSMCBhcyB3ZSBhcmUgZ29pbmcgdG8gdXNlIHRoZSByZWdpc3Rlci4NCi0gICBTVE1EQiBTUCAhLCB7IFIwIH0NCisJOyBQdXNoIFIwIGFzIHdlIGFyZSBnb2luZyB0byB1c2UgdGhlIHJlZ2lzdGVyLiAJCQkJCQ0KKwlTVE1EQglTUCEsIHtSMH0NCiANCi07DQotU2V0IFIwIHRvIHBvaW50IHRvIHRoZSB0YXNrIHN0YWNrIHBvaW50ZXIuDQotICAgU1RNREIgU1AsIHsgU1AgfSBeDQotTk9QDQotU1VCIFNQLCBTUCwgIyA0DQotTERNSUEgU1AgISwgeyBSMCB9DQorCTsgU2V0IFIwIHRvIHBvaW50IHRvIHRoZSB0YXNrIHN0YWNrIHBvaW50ZXIuIAkJCQkJDQorCVNUTURCCVNQLCB7U1B9Xg0KKwlOT1ANCisJU1VCCQlTUCwgU1AsICM0DQorCUxETUlBCVNQISwge1IwfQ0KIA0KLTsNCi1QdXNoIHRoZSByZXR1cm4gYWRkcmVzcyBvbnRvIHRoZSBzdGFjay4NCi0gICAgICAgICAgU1RNREIgUjAgISwgeyBMUiB9DQorCTsgUHVzaCB0aGUgcmV0dXJuIGFkZHJlc3Mgb250byB0aGUgc3RhY2suIAkJCQkJCQ0KKwlTVE1EQglSMCEsIHtMUn0NCiANCi07DQorCTsgTm93IHdlIGhhdmUgc2F2ZWQgTFIgd2UgY2FuIHVzZSBpdCBpbnN0ZWFkIG9mIFIwLiAJCQkJDQorCU1PVgkJTFIsIFIwDQogDQotTm93IHdlIGhhdmUgc2F2ZWQgTFIgd2UgY2FuIHVzZSBpdCBpbnN0ZWFkIG9mIFIwLg0KLSAgIE1PViBMUiwgUjANCisJOyBQb3AgUjAgc28gd2UgY2FuIHNhdmUgaXQgb250byB0aGUgc3lzdGVtIG1vZGUgc3RhY2suIAkJCQ0KKwlMRE1JQQlTUCEsIHtSMH0NCiANCi07DQotUG9wIFIwIHNvIHdlIGNhbiBzYXZlIGl0IG9udG8gdGhlIHN5c3RlbSBtb2RlIHN0YWNrLg0KLSAgIExETUlBIFNQICEsIHsgUjAgfQ0KKwk7IFB1c2ggYWxsIHRoZSBzeXN0ZW0gbW9kZSByZWdpc3RlcnMgb250byB0aGUgdGFzayBzdGFjay4gCQkNCisJU1RNREIJTFIsIHtSMC1MUn1eDQorCU5PUA0KKwlTVUIJCUxSLCBMUiwgIzYwDQogDQotOw0KLVB1c2ggYWxsIHRoZSBzeXN0ZW0gbW9kZSByZWdpc3RlcnMgb250byB0aGUgdGFzayBzdGFjay4NCi0gICBTVE1EQiBMUiwgeyBSMCAtIExSIH0gXg0KLU5PUA0KLVNVQiBMUiwgTFIsICMgNjANCisJOyBQdXNoIHRoZSBTUFNSIG9udG8gdGhlIHRhc2sgc3RhY2suIAkJCQkJCQkNCisJTVJTCQlSMCwgU1BTUg0KKwlTVE1EQglMUiEsIHtSMH0NCiANCi07DQotUHVzaCB0aGUgU1BTUiBvbnRvIHRoZSB0YXNrIHN0YWNrLg0KLSAgIE1SUyBSMCwgU1BTUg0KLVNUTURCIExSICEsIHsgUjAgfQ0KKwlMRFIJCVIwLCA9dWxDcml0aWNhbE5lc3RpbmcgDQorCUxEUgkJUjAsIFtSMF0NCisJU1RNREIJTFIhLCB7UjB9DQogDQotTERSIFIwLCA9IHVsQ3JpdGljYWxOZXN0aW5nDQotICAgICAgICAgIExEUiBSMCwgWyBSMCBdDQotU1RNREIgTFIgISwgeyBSMCB9DQorCTsgU3RvcmUgdGhlIG5ldyB0b3Agb2Ygc3RhY2sgZm9yIHRoZSB0YXNrLiAJCQkJCQkNCisJTERSCQlSMSwgPXB4Q3VycmVudFRDQg0KKwlMRFIJCVIwLCBbUjFdDQorCVNUUgkJTFIsIFtSMF0NCiANCi07DQotU3RvcmUgdGhlIG5ldyB0b3Agb2Ygc3RhY2sgZm9yIHRoZSB0YXNrLg0KLSAgIExEUiBSMSwgPSBweEN1cnJlbnRUQ0INCi0gICAgICAgICAgICAgTERSIFIwLCBbIFIxIF0NCi1TVFIgTFIsIFsgUjAgXQ0KLQ0KLUVORE0NCisJRU5ETQ0KIA0KIA0KIHBvcnRSRVNUT1JFX0NPTlRFWFQgTUFDUk8NCiANCi07DQotU2V0IHRoZSBMUiB0byB0aGUgdGFzayBzdGFjay4NCi0gICBMRFIgUjEsID0gcHhDdXJyZW50VENCDQotICAgICAgICAgICAgIExEUiBSMCwgWyBSMSBdDQotTERSIExSLCBbIFIwIF0NCisJOyBTZXQgdGhlIExSIHRvIHRoZSB0YXNrIHN0YWNrLiAJCQkJCQkJCQkNCisJTERSCQlSMSwgPXB4Q3VycmVudFRDQg0KKwlMRFIJCVIwLCBbUjFdDQorCUxEUgkJTFIsIFtSMF0NCiANCi07DQotVGhlIGNyaXRpY2FsIG5lc3RpbmcgZGVwdGggaXMgdGhlIGZpcnN0IGl0ZW0gb24gdGhlIHN0YWNrLg0KLSAgIDsNCi1Mb2FkIGl0IGludG8gdGhlIHVsQ3JpdGljYWxOZXN0aW5nIHZhcmlhYmxlLg0KLSAgIExEUiBSMCwgPSB1bENyaXRpY2FsTmVzdGluZw0KLSAgICAgICAgICAgICBMRE1GRCBMUiAhLCB7IFIxIH0NCi1TVFIgUjEsIFsgUjAgXQ0KKwk7IFRoZSBjcml0aWNhbCBuZXN0aW5nIGRlcHRoIGlzIHRoZSBmaXJzdCBpdGVtIG9uIHRoZSBzdGFjay4gCQ0KKwk7IExvYWQgaXQgaW50byB0aGUgdWxDcml0aWNhbE5lc3RpbmcgdmFyaWFibGUuIAkJCQkJDQorCUxEUgkJUjAsID11bENyaXRpY2FsTmVzdGluZw0KKwlMRE1GRAlMUiEsIHtSMX0NCisJU1RSCQlSMSwgW1IwXQ0KIA0KLTsNCi1HZXQgdGhlIFNQU1IgZnJvbSB0aGUgc3RhY2suDQotICAgTERNRkQgTFIgISwgeyBSMCB9DQotTVNSIFNQU1JfY3hzZiwgUjANCisJOyBHZXQgdGhlIFNQU1IgZnJvbSB0aGUgc3RhY2suIAkJCQkJCQkJCQ0KKwlMRE1GRAlMUiEsIHtSMH0NCisJTVNSCQlTUFNSX2N4c2YsIFIwDQogDQotOw0KLVJlc3RvcmUgYWxsIHN5c3RlbSBtb2RlIHJlZ2lzdGVycyBmb3IgdGhlIHRhc2suDQotICAgTERNRkQgTFIsIHsgUjAgLSBSMTQgfSBeDQotTk9QDQorCTsgUmVzdG9yZSBhbGwgc3lzdGVtIG1vZGUgcmVnaXN0ZXJzIGZvciB0aGUgdGFzay4gCQkJCQ0KKwlMRE1GRAlMUiwge1IwLVIxNH1eDQorCU5PUA0KIA0KLTsNCi1SZXN0b3JlIHRoZSByZXR1cm4gYWRkcmVzcy4NCi0gICAgICAgICAgTERSIExSLCBbIExSLCAjICsgNjAgXQ0KKwk7IFJlc3RvcmUgdGhlIHJldHVybiBhZGRyZXNzLiAJCQkJCQkJCQkNCisJTERSCQlMUiwgW0xSLCAjKzYwXQ0KIA0KLTsNCisJOyBBbmQgcmV0dXJuIC0gY29ycmVjdGluZyB0aGUgb2Zmc2V0IGluIHRoZSBMUiB0byBvYnRhaW4gdGhlIAkNCisJOyBjb3JyZWN0IGFkZHJlc3MuIAkJCQkJCQkJCQkJCQ0KKwlTVUJTCVBDLCBMUiwgIzQNCiANCi1BbmQgcmV0dXJuIC1jb3JyZWN0aW5nIHRoZSBvZmZzZXQgaW4gdGhlIExSIHRvIG9idGFpbiB0aGUNCi07DQorCUVORE0NCiANCi1jb3JyZWN0IGFkZHJlc3MuDQotICAgU1VCUyBQQywgTFIsICMgNA0KLQ0KLUVORE0NCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9JQVIvU1RSOTF4L3BvcnQuYyBiL3BvcnRhYmxlL0lBUi9TVFI5MXgvcG9ydC5jCmluZGV4IDVlNjQzZTQuLjdkNGFkMWQgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0lBUi9TVFI5MXgvcG9ydC5jCisrKyBiL3BvcnRhYmxlL0lBUi9TVFI5MXgvcG9ydC5jCkBAIC0yNiw5ICsyNiw5IEBACiAgKi8NCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgU1QgU1RSOTF4IEFSTTkNCi0qIHBvcnQuDQotKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyAqIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBTVCBTVFI5MXggQVJNOQ0KKyAqIHBvcnQuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBMaWJyYXJ5IGluY2x1ZGVzLiAqLw0KICNpbmNsdWRlICI5MXhfbGliLmgiDQpAQCAtNDIsMjMgKzQyLDIzIEBACiAjaW5jbHVkZSAidGFzay5oIg0KIA0KICNpZm5kZWYgY29uZmlnVVNFX1dBVENIRE9HX1RJQ0sNCi0gICAgI2Vycm9yIGNvbmZpZ1VTRV9XQVRDSERPR19USUNLIG11c3QgYmUgc2V0IHRvIGVpdGhlciAxIG9yIDAgaW4gRnJlZVJUT1NDb25maWcuaCB0byB1c2UgZWl0aGVyIHRoZSBXYXRjaGRvZyBvciB0aW1lciAyIHRvIGdlbmVyYXRlIHRoZSB0aWNrIGludGVycnVwdCByZXNwZWN0aXZlbHkuDQorCSNlcnJvciBjb25maWdVU0VfV0FUQ0hET0dfVElDSyBtdXN0IGJlIHNldCB0byBlaXRoZXIgMSBvciAwIGluIEZyZWVSVE9TQ29uZmlnLmggdG8gdXNlIGVpdGhlciB0aGUgV2F0Y2hkb2cgb3IgdGltZXIgMiB0byBnZW5lcmF0ZSB0aGUgdGljayBpbnRlcnJ1cHQgcmVzcGVjdGl2ZWx5Lg0KICNlbmRpZg0KIA0KIC8qIENvbnN0YW50cyByZXF1aXJlZCB0byBzZXR1cCB0aGUgaW5pdGlhbCBzdGFjay4gKi8NCiAjaWZuZGVmIF9SVU5fVEFTS19JTl9BUk1fTU9ERV8NCi0gICAgI2RlZmluZSBwb3J0SU5JVElBTF9TUFNSICAgICAgICggKCBTdGFja1R5cGVfdCApIDB4M2YgKSAgICAgIC8qIFN5c3RlbSBtb2RlLCBUSFVNQiBtb2RlLCBpbnRlcnJ1cHRzIGVuYWJsZWQuICovDQorCSNkZWZpbmUgcG9ydElOSVRJQUxfU1BTUgkJCSggKCBTdGFja1R5cGVfdCApIDB4M2YgKSAvKiBTeXN0ZW0gbW9kZSwgVEhVTUIgbW9kZSwgaW50ZXJydXB0cyBlbmFibGVkLiAqLw0KICNlbHNlDQotICAgICNkZWZpbmUgcG9ydElOSVRJQUxfU1BTUiAgICAgICAoICggU3RhY2tUeXBlX3QgKSAweDFmICkgICAgICAvKiBTeXN0ZW0gbW9kZSwgQVJNIG1vZGUsIGludGVycnVwdHMgZW5hYmxlZC4gKi8NCisJI2RlZmluZSBwb3J0SU5JVElBTF9TUFNSIAkJCSggKCBTdGFja1R5cGVfdCApIDB4MWYgKSAvKiBTeXN0ZW0gbW9kZSwgQVJNIG1vZGUsIGludGVycnVwdHMgZW5hYmxlZC4gKi8NCiAjZW5kaWYNCiANCi0jZGVmaW5lIHBvcnRJTlNUUlVDVElPTl9TSVpFICAgICAgICggKCBTdGFja1R5cGVfdCApIDQgKQ0KKyNkZWZpbmUgcG9ydElOU1RSVUNUSU9OX1NJWkUJCQkoICggU3RhY2tUeXBlX3QgKSA0ICkNCiANCiAvKiBDb25zdGFudHMgcmVxdWlyZWQgdG8gaGFuZGxlIGNyaXRpY2FsIHNlY3Rpb25zLiAqLw0KLSNkZWZpbmUgcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgICAgKCAoIHVpbnQzMl90ICkgMCApDQorI2RlZmluZSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyAJCSggKCB1aW50MzJfdCApIDAgKQ0KIA0KICNpZm5kZWYgYWJzDQotICAgICNkZWZpbmUgYWJzKCB4ICkgICAgKCAoIHggKSA+IDAgPyAoIHggKSA6IC0oIHggKSApDQorCSNkZWZpbmUgYWJzKHgpICgoeCk+MCA/ICh4KSA6IC0oeCkpDQogI2VuZGlmDQogDQogLyoqDQpAQCAtNzMsMTUgKzczLDE1IEBACiAgKiB9DQogICoNCiAgKi8NCi0jZGVmaW5lIFRPR0dMRV9MRUQoIHBvcnQsIHBpbiApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgaWYoICggKCAoICggcG9ydCApLT5EUlsgKCBwaW4gKSA8PCAyIF0gKSApICYgKCBwaW4gKSApICE9IEJpdF9SRVNFVCApIFwNCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICggcG9ydCApLT5EUlsgKCBwaW4gKSA8PCAyIF0gPSAweDAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICggcG9ydCApLT5EUlsgKCBwaW4gKSA8PCAyIF0gPSAoIHBpbiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgfQ0KKyNkZWZpbmUgVE9HR0xFX0xFRChwb3J0LHBpbikgCQkJCQkJCQkJXA0KKwlpZiAoICgoKChwb3J0KS0+RFJbKHBpbik8PDJdKSkgJiAocGluKSkgIT0gQml0X1JFU0VUICkgCQlcDQorCXsJCQkJCQkJCQkJCQkJCQlcDQorICAgIAkocG9ydCktPkRSWyhwaW4pIDw8Ml0gPSAweDAwOwkJCQkJCQlcDQorICAJfQkJCQkJCQkJCQkJCQkJCVwNCisgIAllbHNlCQkJCQkJCQkJCQkJCQlcDQorCXsJCQkJCQkJCQkJCQkJCQlcDQorICAgIAkocG9ydCktPkRSWyhwaW4pIDw8Ml0gPSAocGluKTsJCQkJCQkJXA0KKyAgCX0NCiANCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCkBAIC05MCwyMSArOTAsMjEgQEAKIHN0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKTsNCiANCiAvKiB1bENyaXRpY2FsTmVzdGluZyB3aWxsIGdldCBzZXQgdG8gemVybyB3aGVuIHRoZSBmaXJzdCB0YXNrIHN0YXJ0cy4gIEl0DQotICogY2Fubm90IGJlIGluaXRpYWxpc2VkIHRvIDAgYXMgdGhpcyB3aWxsIGNhdXNlIGludGVycnVwdHMgdG8gYmUgZW5hYmxlZA0KLSAqIGR1cmluZyB0aGUga2VybmVsIGluaXRpYWxpc2F0aW9uIHByb2Nlc3MuICovDQorY2Fubm90IGJlIGluaXRpYWxpc2VkIHRvIDAgYXMgdGhpcyB3aWxsIGNhdXNlIGludGVycnVwdHMgdG8gYmUgZW5hYmxlZA0KK2R1cmluZyB0aGUga2VybmVsIGluaXRpYWxpc2F0aW9uIHByb2Nlc3MuICovDQogdWludDMyX3QgdWxDcml0aWNhbE5lc3RpbmcgPSAoIHVpbnQzMl90ICkgOTk5OTsNCiANCiAvKiBUaWNrIGludGVycnVwdCByb3V0aW5lcyBmb3IgY29vcGVyYXRpdmUgYW5kIHByZWVtcHRpdmUgb3BlcmF0aW9uDQotICogcmVzcGVjdGl2ZWx5LiAgVGhlIHByZWVtcHRpdmUgdmVyc2lvbiBpcyBub3QgZGVmaW5lZCBhcyBfX2lycSBhcyBpdCBpcyBjYWxsZWQNCi0gKiBmcm9tIGFuIGFzbSB3cmFwcGVyIGZ1bmN0aW9uLiAqLw0KK3Jlc3BlY3RpdmVseS4gIFRoZSBwcmVlbXB0aXZlIHZlcnNpb24gaXMgbm90IGRlZmluZWQgYXMgX19pcnEgYXMgaXQgaXMgY2FsbGVkDQorZnJvbSBhbiBhc20gd3JhcHBlciBmdW5jdGlvbi4gKi8NCiB2b2lkIFdER19JUlFIYW5kbGVyKCB2b2lkICk7DQogDQogLyogVklDIGludGVycnVwdCBkZWZhdWx0IGhhbmRsZXIuICovDQogc3RhdGljIHZvaWQgcHJ2RGVmYXVsdEhhbmRsZXIoIHZvaWQgKTsNCiANCiAjaWYgY29uZmlnVVNFX1dBVENIRE9HX1RJQ0sgPT0gMA0KLSAgICAvKiBVc2VkIHRvIHVwZGF0ZSB0aGUgT0NSIHRpbWVyIHJlZ2lzdGVyICovDQotICAgIHN0YXRpYyB1MTYgc19uUHVsc2VMZW5ndGg7DQorCS8qIFVzZWQgdG8gdXBkYXRlIHRoZSBPQ1IgdGltZXIgcmVnaXN0ZXIgKi8NCisJc3RhdGljIHUxNiBzX25QdWxzZUxlbmd0aDsNCiAjZW5kaWYNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCkBAIC0xMTUsMjg2ICsxMTUsMjY4IEBACiAgKg0KICAqIFNlZSBoZWFkZXIgZmlsZSBmb3IgZGVzY3JpcHRpb24uDQogICovDQotU3RhY2tUeXBlX3QgKiBweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICogcHhUb3BPZlN0YWNrLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYXNrRnVuY3Rpb25fdCBweENvZGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KK1N0YWNrVHlwZV90ICpweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICpweFRvcE9mU3RhY2ssIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzICkNCiB7DQotICAgIFN0YWNrVHlwZV90ICogcHhPcmlnaW5hbFRPUzsNCisJU3RhY2tUeXBlX3QgKnB4T3JpZ2luYWxUT1M7DQogDQotICAgIHB4T3JpZ2luYWxUT1MgPSBweFRvcE9mU3RhY2s7DQorCXB4T3JpZ2luYWxUT1MgPSBweFRvcE9mU3RhY2s7DQogDQotICAgIC8qIFRvIGVuc3VyZSBhc3NlcnRzIGluIHRhc2tzLmMgZG9uJ3QgZmFpbCwgYWx0aG91Z2ggaW4gdGhpcyBjYXNlIHRoZSBhc3NlcnQNCi0gICAgICogaXMgbm90IHJlYWxseSByZXF1aXJlZC4gKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIFRvIGVuc3VyZSBhc3NlcnRzIGluIHRhc2tzLmMgZG9uJ3QgZmFpbCwgYWx0aG91Z2ggaW4gdGhpcyBjYXNlIHRoZSBhc3NlcnQNCisJaXMgbm90IHJlYWxseSByZXF1aXJlZC4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgIC8qIFNldHVwIHRoZSBpbml0aWFsIHN0YWNrIG9mIHRoZSB0YXNrLiAgVGhlIHN0YWNrIGlzIHNldCBleGFjdGx5IGFzDQotICAgICAqIGV4cGVjdGVkIGJ5IHRoZSBwb3J0UkVTVE9SRV9DT05URVhUKCkgbWFjcm8uICovDQorCS8qIFNldHVwIHRoZSBpbml0aWFsIHN0YWNrIG9mIHRoZSB0YXNrLiAgVGhlIHN0YWNrIGlzIHNldCBleGFjdGx5IGFzDQorCWV4cGVjdGVkIGJ5IHRoZSBwb3J0UkVTVE9SRV9DT05URVhUKCkgbWFjcm8uICovDQogDQotICAgIC8qIEZpcnN0IG9uIHRoZSBzdGFjayBpcyB0aGUgcmV0dXJuIGFkZHJlc3MgLSB3aGljaCBpbiB0aGlzIGNhc2UgaXMgdGhlDQotICAgICAqIHN0YXJ0IG9mIHRoZSB0YXNrLiAgVGhlIG9mZnNldCBpcyBhZGRlZCB0byBtYWtlIHRoZSByZXR1cm4gYWRkcmVzcyBhcHBlYXINCi0gICAgICogYXMgaXQgd291bGQgd2l0aGluIGFuIElSUSBJU1IuICovDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHhDb2RlICsgcG9ydElOU1RSVUNUSU9OX1NJWkU7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkvKiBGaXJzdCBvbiB0aGUgc3RhY2sgaXMgdGhlIHJldHVybiBhZGRyZXNzIC0gd2hpY2ggaW4gdGhpcyBjYXNlIGlzIHRoZQ0KKwlzdGFydCBvZiB0aGUgdGFzay4gIFRoZSBvZmZzZXQgaXMgYWRkZWQgdG8gbWFrZSB0aGUgcmV0dXJuIGFkZHJlc3MgYXBwZWFyDQorCWFzIGl0IHdvdWxkIHdpdGhpbiBhbiBJUlEgSVNSLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB4Q29kZSArIHBvcnRJTlNUUlVDVElPTl9TSVpFOwkJDQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4YWFhYWFhYWE7ICAgIC8qIFIxNCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBweE9yaWdpbmFsVE9TOyAvKiBTdGFjayB1c2VkIHdoZW4gdGFzayBzdGFydHMgZ29lcyBpbiBSMTMuICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTIxMjEyMTI7ICAgIC8qIFIxMiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDExMTExMTExOyAgICAvKiBSMTEgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMDEwMTAxMDsgICAgLyogUjEwICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDkwOTA5MDk7ICAgIC8qIFI5ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDgwODA4MDg7ICAgIC8qIFI4ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDcwNzA3MDc7ICAgIC8qIFI3ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDYwNjA2MDY7ICAgIC8qIFI2ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDUwNTA1MDU7ICAgIC8qIFI1ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDQwNDA0MDQ7ICAgIC8qIFI0ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDMwMzAzMDM7ICAgIC8qIFIzICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDIwMjAyMDI7ICAgIC8qIFIyICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDEwMTAxMDE7ICAgIC8qIFIxICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4YWFhYWFhYWE7CS8qIFIxNCAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHhPcmlnaW5hbFRPUzsgLyogU3RhY2sgdXNlZCB3aGVuIHRhc2sgc3RhcnRzIGdvZXMgaW4gUjEzLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDEyMTIxMjEyOwkvKiBSMTIgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTExMTExMTE7CS8qIFIxMSAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMDEwMTAxMDsJLyogUjEwICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA5MDkwOTA5OwkvKiBSOSAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwODA4MDgwODsJLyogUjggKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDcwNzA3MDc7CS8qIFI3ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA2MDYwNjA2OwkvKiBSNiAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNTA1MDUwNTsJLyogUjUgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDQwNDA0MDQ7CS8qIFI0ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAzMDMwMzAzOwkvKiBSMyAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMjAyMDIwMjsJLyogUjIgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDEwMTAxMDE7CS8qIFIxICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCiANCi0gICAgLyogV2hlbiB0aGUgdGFzayBzdGFydHMgaXMgd2lsbCBleHBlY3QgdG8gZmluZCB0aGUgZnVuY3Rpb24gcGFyYW1ldGVyIGluDQotICAgICAqIFIwLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB2UGFyYW1ldGVyczsgLyogUjAgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIFdoZW4gdGhlIHRhc2sgc3RhcnRzIGlzIHdpbGwgZXhwZWN0IHRvIGZpbmQgdGhlIGZ1bmN0aW9uIHBhcmFtZXRlciBpbg0KKwlSMC4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwdlBhcmFtZXRlcnM7IC8qIFIwICovDQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBUaGUgc3RhdHVzIHJlZ2lzdGVyIGlzIHNldCBmb3Igc3lzdGVtIG1vZGUsIHdpdGggaW50ZXJydXB0cyBlbmFibGVkLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHBvcnRJTklUSUFMX1NQU1I7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkvKiBUaGUgc3RhdHVzIHJlZ2lzdGVyIGlzIHNldCBmb3Igc3lzdGVtIG1vZGUsIHdpdGggaW50ZXJydXB0cyBlbmFibGVkLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHBvcnRJTklUSUFMX1NQU1I7DQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBJbnRlcnJ1cHQgZmxhZ3MgY2Fubm90IGFsd2F5cyBiZSBzdG9yZWQgb24gdGhlIHN0YWNrIGFuZCB3aWxsDQotICAgICAqIGluc3RlYWQgYmUgc3RvcmVkIGluIGEgdmFyaWFibGUsIHdoaWNoIGlzIHRoZW4gc2F2ZWQgYXMgcGFydCBvZiB0aGUNCi0gICAgICogdGFza3MgY29udGV4dC4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9IHBvcnROT19DUklUSUNBTF9ORVNUSU5HOw0KKwkvKiBJbnRlcnJ1cHQgZmxhZ3MgY2Fubm90IGFsd2F5cyBiZSBzdG9yZWQgb24gdGhlIHN0YWNrIGFuZCB3aWxsDQorCWluc3RlYWQgYmUgc3RvcmVkIGluIGEgdmFyaWFibGUsIHdoaWNoIGlzIHRoZW4gc2F2ZWQgYXMgcGFydCBvZiB0aGUNCisJdGFza3MgY29udGV4dC4gKi8NCisJKnB4VG9wT2ZTdGFjayA9IHBvcnROT19DUklUSUNBTF9ORVNUSU5HOw0KIA0KLSAgICByZXR1cm4gcHhUb3BPZlN0YWNrOw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOwkNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogQmFzZVR5cGVfdCB4UG9ydFN0YXJ0U2NoZWR1bGVyKCB2b2lkICkNCiB7DQotICAgIGV4dGVybiB2b2lkIHZQb3J0U3RhcnRGaXJzdFRhc2soIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2UG9ydFN0YXJ0Rmlyc3RUYXNrKCB2b2lkICk7DQogDQotICAgIC8qIFN0YXJ0IHRoZSB0aW1lciB0aGF0IGdlbmVyYXRlcyB0aGUgdGljayBJU1IuICBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZA0KLSAgICAgKiBoZXJlIGFscmVhZHkuICovDQotICAgIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoKTsNCisJLyogU3RhcnQgdGhlIHRpbWVyIHRoYXQgZ2VuZXJhdGVzIHRoZSB0aWNrIElTUi4gIEludGVycnVwdHMgYXJlIGRpc2FibGVkDQorCWhlcmUgYWxyZWFkeS4gKi8NCisJcHJ2U2V0dXBUaW1lckludGVycnVwdCgpOw0KIA0KLSAgICAvKiBTdGFydCB0aGUgZmlyc3QgdGFzay4gKi8NCi0gICAgdlBvcnRTdGFydEZpcnN0VGFzaygpOw0KKwkvKiBTdGFydCB0aGUgZmlyc3QgdGFzay4gKi8NCisJdlBvcnRTdGFydEZpcnN0VGFzaygpOwkNCiANCi0gICAgLyogU2hvdWxkIG5vdCBnZXQgaGVyZSEgKi8NCi0gICAgcmV0dXJuIDA7DQorCS8qIFNob3VsZCBub3QgZ2V0IGhlcmUhICovDQorCXJldHVybiAwOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0RW5kU2NoZWR1bGVyKCB2b2lkICkNCiB7DQotICAgIC8qIEl0IGlzIHVubGlrZWx5IHRoYXQgdGhlIEFSTSBwb3J0IHdpbGwgcmVxdWlyZSB0aGlzIGZ1bmN0aW9uIGFzIHRoZXJlDQotICAgICAqIGlzIG5vdGhpbmcgdG8gcmV0dXJuIHRvLiAgKi8NCisJLyogSXQgaXMgdW5saWtlbHkgdGhhdCB0aGUgQVJNIHBvcnQgd2lsbCByZXF1aXJlIHRoaXMgZnVuY3Rpb24gYXMgdGhlcmUNCisJaXMgbm90aGluZyB0byByZXR1cm4gdG8uICAqLw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGFuIGFzbSB3cmFwcGVyLCBzbyBkb2VzIG5vdCByZXF1aXJlIHRoZSBfX2lycQ0KLSAqIGtleXdvcmQuICovDQora2V5d29yZC4gKi8NCiAjaWYgY29uZmlnVVNFX1dBVENIRE9HX1RJQ0sgPT0gMQ0KIA0KLSAgICBzdGF0aWMgdm9pZCBwcnZGaW5kRmFjdG9ycyggdTMyIG4sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgKiBhLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyICogYiApDQotICAgIHsNCi0gICAgICAgIC8qIFRoaXMgZnVuY3Rpb24gaXMgY29waWVkIGZyb20gdGhlIFNUIFNUUjcgbGlicmFyeSBhbmQgaXMNCi0gICAgICAgICAqIGNvcHlyaWdodCBTVE1pY3JvZWxlY3Ryb25pY3MuICBSZXByb2R1Y2VkIHdpdGggcGVybWlzc2lvbi4gKi8NCisJc3RhdGljIHZvaWQgcHJ2RmluZEZhY3RvcnModTMyIG4sIHUxNiAqYSwgdTMyICpiKQ0KKwl7DQorCQkvKiBUaGlzIGZ1bmN0aW9uIGlzIGNvcGllZCBmcm9tIHRoZSBTVCBTVFI3IGxpYnJhcnkgYW5kIGlzDQorCQljb3B5cmlnaHQgU1RNaWNyb2VsZWN0cm9uaWNzLiAgUmVwcm9kdWNlZCB3aXRoIHBlcm1pc3Npb24uICovDQorCQ0KKwkJdTMyIGIwOw0KKwkJdTE2IGEwOw0KKwkJaW50MzJfdCBlcnIsIGVycl9taW49bjsNCisJDQorCQkqYSA9IGEwID0gKChuLTEpLzY1NTM2dWwpICsgMTsNCisJCSpiID0gYjAgPSBuIC8gKmE7DQorCQ0KKwkJZm9yICg7ICphIDw9IDI1NjsgKCphKSsrKQ0KKwkJew0KKwkJCSpiID0gbiAvICphOw0KKwkJCWVyciA9IChpbnQzMl90KSphICogKGludDMyX3QpKmIgLSAoaW50MzJfdCluOw0KKwkJCWlmIChhYnMoZXJyKSA+ICgqYSAvIDIpKQ0KKwkJCXsNCisJCQkJKCpiKSsrOw0KKwkJCQllcnIgPSAoaW50MzJfdCkqYSAqIChpbnQzMl90KSpiIC0gKGludDMyX3QpbjsNCisJCQl9DQorCQkJaWYgKGFicyhlcnIpIDwgYWJzKGVycl9taW4pKQ0KKwkJCXsNCisJCQkJZXJyX21pbiA9IGVycjsNCisJCQkJYTAgPSAqYTsNCisJCQkJYjAgPSAqYjsNCisJCQkJaWYgKGVyciA9PSAwKSBicmVhazsNCisJCQl9DQorCQl9DQorCQ0KKwkJKmEgPSBhMDsNCisJCSpiID0gYjA7DQorCX0NCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQotICAgICAgICB1MzIgYjA7DQotICAgICAgICB1MTYgYTA7DQotICAgICAgICBpbnQzMl90IGVyciwgZXJyX21pbiA9IG47DQorCXN0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKQ0KKwl7DQorCVdER19Jbml0VHlwZURlZiB4V2RnOw0KKwl1aW50MTZfdCBhOw0KKwl1aW50MzJfdCBuID0gY29uZmlnQ1BVX1BFUklQSF9IWiAvIGNvbmZpZ1RJQ0tfUkFURV9IWiwgYjsNCisJDQorCQkvKiBDb25maWd1cmUgdGhlIHdhdGNoZG9nIGFzIGEgZnJlZSBydW5uaW5nIHRpbWVyIHRoYXQgZ2VuZXJhdGVzIGENCisJCXBlcmlvZGljIGludGVycnVwdC4gKi8NCisJDQorCQlTQ1VfQVBCUGVyaXBoQ2xvY2tDb25maWcoIF9fV0RHLCBFTkFCTEUgKTsNCisJCVdER19EZUluaXQoKTsNCisJCVdER19TdHJ1Y3RJbml0KCZ4V2RnKTsNCisJCXBydkZpbmRGYWN0b3JzKCBuLCAmYSwgJmIgKTsNCisJCXhXZGcuV0RHX1ByZXNjYWxlciA9IGEgLSAxOw0KKwkJeFdkZy5XREdfUHJlbG9hZCA9IGIgLSAxOw0KKwkJV0RHX0luaXQoICZ4V2RnICk7DQorCQlXREdfSVRDb25maWcoRU5BQkxFKTsNCisJCQ0KKwkJLyogQ29uZmlndXJlIHRoZSBWSUMgZm9yIHRoZSBXREcgaW50ZXJydXB0LiAqLw0KKwkJVklDX0NvbmZpZyggV0RHX0lUTGluZSwgVklDX0lSUSwgMTAgKTsNCisJCVZJQ19JVENtZCggV0RHX0lUTGluZSwgRU5BQkxFICk7DQorCQkNCisJCS8qIEluc3RhbGwgdGhlIGRlZmF1bHQgaGFuZGxlcnMgZm9yIGJvdGggVklDJ3MuICovDQorCQlWSUMwLT5EVkFSID0gKCB1aW50MzJfdCApIHBydkRlZmF1bHRIYW5kbGVyOw0KKwkJVklDMS0+RFZBUiA9ICggdWludDMyX3QgKSBwcnZEZWZhdWx0SGFuZGxlcjsNCisJCQ0KKwkJV0RHX0NtZChFTkFCTEUpOw0KKwl9DQorCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KLSAgICAgICAgKmEgPSBhMCA9ICggKCBuIC0gMSApIC8gNjU1MzZ1bCApICsgMTsNCi0gICAgICAgICpiID0gYjAgPSBuIC8gKmE7DQorCXZvaWQgV0RHX0lSUUhhbmRsZXIoIHZvaWQgKQ0KKwl7DQorCQl7DQorCQkJLyogSW5jcmVtZW50IHRoZSB0aWNrIGNvdW50ZXIuICovDQorCQkJaWYoIHhUYXNrSW5jcmVtZW50VGljaygpICE9IHBkRkFMU0UgKQ0KKwkJCXsJCQ0KKwkJCQkvKiBTZWxlY3QgYSBuZXcgdGFzayB0byBleGVjdXRlLiAqLw0KKwkJCQl2VGFza1N3aXRjaENvbnRleHQoKTsNCisJCQl9DQorCQkNCisJCQkvKiBDbGVhciB0aGUgaW50ZXJydXB0IGluIHRoZSB3YXRjaGRvZy4gKi8NCisJCQlXREctPlNSICY9IH4weDAwMDE7DQorCQl9DQorCX0NCiANCi0gICAgICAgIGZvciggOyAqYSA8PSAyNTY7ICggKmEgKSsrICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICAqYiA9IG4gLyAqYTsNCi0gICAgICAgICAgICBlcnIgPSAoIGludDMyX3QgKSAqYSAqICggaW50MzJfdCApICpiIC0gKCBpbnQzMl90ICkgbjsNCisjZWxzZQ0KIA0KLSAgICAgICAgICAgIGlmKCBhYnMoIGVyciApID4gKCAqYSAvIDIgKSApDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAoICpiICkrKzsNCi0gICAgICAgICAgICAgICAgZXJyID0gKCBpbnQzMl90ICkgKmEgKiAoIGludDMyX3QgKSAqYiAtICggaW50MzJfdCApIG47DQotICAgICAgICAgICAgfQ0KKwlzdGF0aWMgdm9pZCBwcnZGaW5kRmFjdG9ycyh1MzIgbiwgdTggKmEsIHUxNiAqYikNCisJew0KKwkJLyogVGhpcyBmdW5jdGlvbiBpcyBjb3BpZWQgZnJvbSB0aGUgU1QgU1RSNyBsaWJyYXJ5IGFuZCBpcw0KKwkJY29weXJpZ2h0IFNUTWljcm9lbGVjdHJvbmljcy4gIFJlcHJvZHVjZWQgd2l0aCBwZXJtaXNzaW9uLiAqLw0KKwkNCisJCXUxNiBiMDsNCisJCXU4IGEwOw0KKwkJaW50MzJfdCBlcnIsIGVycl9taW49bjsNCisJDQorCQ0KKwkJKmEgPSBhMCA9ICgobi0xKS8yNTYpICsgMTsNCisJCSpiID0gYjAgPSBuIC8gKmE7DQorCQ0KKwkJZm9yICg7ICphIDw9IDI1NjsgKCphKSsrKQ0KKwkJew0KKwkJCSpiID0gbiAvICphOw0KKwkJCWVyciA9IChpbnQzMl90KSphICogKGludDMyX3QpKmIgLSAoaW50MzJfdCluOw0KKwkJCWlmIChhYnMoZXJyKSA+ICgqYSAvIDIpKQ0KKwkJCXsNCisJCQkJKCpiKSsrOw0KKwkJCQllcnIgPSAoaW50MzJfdCkqYSAqIChpbnQzMl90KSpiIC0gKGludDMyX3QpbjsNCisJCQl9DQorCQkJaWYgKGFicyhlcnIpIDwgYWJzKGVycl9taW4pKQ0KKwkJCXsNCisJCQkJZXJyX21pbiA9IGVycjsNCisJCQkJYTAgPSAqYTsNCisJCQkJYjAgPSAqYjsNCisJCQkJaWYgKGVyciA9PSAwKSBicmVhazsNCisJCQl9DQorCQl9DQorCQ0KKwkJKmEgPSBhMDsNCisJCSpiID0gYjA7DQorCX0NCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQotICAgICAgICAgICAgaWYoIGFicyggZXJyICkgPCBhYnMoIGVycl9taW4gKSApDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBlcnJfbWluID0gZXJyOw0KLSAgICAgICAgICAgICAgICBhMCA9ICphOw0KLSAgICAgICAgICAgICAgICBiMCA9ICpiOw0KKwlzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICkNCisJew0KKwkJdWludDhfdCBhOw0KKwkJdWludDE2X3QgYjsNCisJCXVpbnQzMl90IG4gPSBjb25maWdDUFVfUEVSSVBIX0haIC8gY29uZmlnVElDS19SQVRFX0haOw0KKwkJDQorCQlUSU1fSW5pdFR5cGVEZWYgdGltZXI7DQorCQkNCisJCVNDVV9BUEJQZXJpcGhDbG9ja0NvbmZpZyggX19USU0yMywgRU5BQkxFICk7DQorCQlUSU1fRGVJbml0KFRJTTIpOw0KKwkJVElNX1N0cnVjdEluaXQoJnRpbWVyKTsNCisJCXBydkZpbmRGYWN0b3JzKCBuLCAmYSwgJmIgKTsNCisJCQ0KKwkJdGltZXIuVElNX01vZGUgICAgICAgICAgID0gVElNX09DTV9DSEFOTkVMXzE7DQorCQl0aW1lci5USU1fT0MxX01vZGVzICAgICAgPSBUSU1fVElNSU5HOw0KKwkJdGltZXIuVElNX0Nsb2NrX1NvdXJjZSAgID0gVElNX0NMS19BUEI7DQorCQl0aW1lci5USU1fQ2xvY2tfRWRnZSAgICAgPSBUSU1fQ0xLX0VER0VfUklTSU5HOw0KKwkJdGltZXIuVElNX1ByZXNjYWxlciAgICAgID0gYS0xOw0KKwkJdGltZXIuVElNX1B1bHNlX0xldmVsXzEgID0gVElNX0hJR0g7DQorCQl0aW1lci5USU1fUHVsc2VfTGVuZ3RoXzEgPSBzX25QdWxzZUxlbmd0aCAgPSBiLTE7DQorCQkNCisJCVRJTV9Jbml0IChUSU0yLCAmdGltZXIpOw0KKwkJVElNX0lUQ29uZmlnKFRJTTIsIFRJTV9JVF9PQzEsIEVOQUJMRSk7DQorCQkvKiBDb25maWd1cmUgdGhlIFZJQyBmb3IgdGhlIFdERyBpbnRlcnJ1cHQuICovDQorCQlWSUNfQ29uZmlnKCBUSU0yX0lUTGluZSwgVklDX0lSUSwgMTAgKTsNCisJCVZJQ19JVENtZCggVElNMl9JVExpbmUsIEVOQUJMRSApOw0KKwkJDQorCQkvKiBJbnN0YWxsIHRoZSBkZWZhdWx0IGhhbmRsZXJzIGZvciBib3RoIFZJQydzLiAqLw0KKwkJVklDMC0+RFZBUiA9ICggdWludDMyX3QgKSBwcnZEZWZhdWx0SGFuZGxlcjsNCisJCVZJQzEtPkRWQVIgPSAoIHVpbnQzMl90ICkgcHJ2RGVmYXVsdEhhbmRsZXI7DQorCQkNCisJCVRJTV9Db3VudGVyQ21kKFRJTTIsIFRJTV9DTEVBUik7DQorCQlUSU1fQ291bnRlckNtZChUSU0yLCBUSU1fU1RBUlQpOw0KKwl9DQorCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KLSAgICAgICAgICAgICAgICBpZiggZXJyID09IDAgKQ0KLSAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0NCi0gICAgICAgICphID0gYTA7DQotICAgICAgICAqYiA9IGIwOw0KLSAgICB9DQotICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KLQ0KLSAgICBzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICkNCi0gICAgew0KLSAgICAgICAgV0RHX0luaXRUeXBlRGVmIHhXZGc7DQotICAgICAgICB1aW50MTZfdCBhOw0KLSAgICAgICAgdWludDMyX3QgbiA9IGNvbmZpZ0NQVV9QRVJJUEhfSFogLyBjb25maWdUSUNLX1JBVEVfSFosIGI7DQotDQotICAgICAgICAvKiBDb25maWd1cmUgdGhlIHdhdGNoZG9nIGFzIGEgZnJlZSBydW5uaW5nIHRpbWVyIHRoYXQgZ2VuZXJhdGVzIGENCi0gICAgICAgICAqIHBlcmlvZGljIGludGVycnVwdC4gKi8NCi0NCi0gICAgICAgIFNDVV9BUEJQZXJpcGhDbG9ja0NvbmZpZyggX19XREcsIEVOQUJMRSApOw0KLSAgICAgICAgV0RHX0RlSW5pdCgpOw0KLSAgICAgICAgV0RHX1N0cnVjdEluaXQoICZ4V2RnICk7DQotICAgICAgICBwcnZGaW5kRmFjdG9ycyggbiwgJmEsICZiICk7DQotICAgICAgICB4V2RnLldER19QcmVzY2FsZXIgPSBhIC0gMTsNCi0gICAgICAgIHhXZGcuV0RHX1ByZWxvYWQgPSBiIC0gMTsNCi0gICAgICAgIFdER19Jbml0KCAmeFdkZyApOw0KLSAgICAgICAgV0RHX0lUQ29uZmlnKCBFTkFCTEUgKTsNCi0NCi0gICAgICAgIC8qIENvbmZpZ3VyZSB0aGUgVklDIGZvciB0aGUgV0RHIGludGVycnVwdC4gKi8NCi0gICAgICAgIFZJQ19Db25maWcoIFdER19JVExpbmUsIFZJQ19JUlEsIDEwICk7DQotICAgICAgICBWSUNfSVRDbWQoIFdER19JVExpbmUsIEVOQUJMRSApOw0KLQ0KLSAgICAgICAgLyogSW5zdGFsbCB0aGUgZGVmYXVsdCBoYW5kbGVycyBmb3IgYm90aCBWSUMncy4gKi8NCi0gICAgICAgIFZJQzAtPkRWQVIgPSAoIHVpbnQzMl90ICkgcHJ2RGVmYXVsdEhhbmRsZXI7DQotICAgICAgICBWSUMxLT5EVkFSID0gKCB1aW50MzJfdCApIHBydkRlZmF1bHRIYW5kbGVyOw0KLQ0KLSAgICAgICAgV0RHX0NtZCggRU5BQkxFICk7DQotICAgIH0NCi0gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQotDQotICAgIHZvaWQgV0RHX0lSUUhhbmRsZXIoIHZvaWQgKQ0KLSAgICB7DQotICAgICAgICB7DQotICAgICAgICAgICAgLyogSW5jcmVtZW50IHRoZSB0aWNrIGNvdW50ZXIuICovDQotICAgICAgICAgICAgaWYoIHhUYXNrSW5jcmVtZW50VGljaygpICE9IHBkRkFMU0UgKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgLyogU2VsZWN0IGEgbmV3IHRhc2sgdG8gZXhlY3V0ZS4gKi8NCi0gICAgICAgICAgICAgICAgdlRhc2tTd2l0Y2hDb250ZXh0KCk7DQotICAgICAgICAgICAgfQ0KLQ0KLSAgICAgICAgICAgIC8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgaW4gdGhlIHdhdGNoZG9nLiAqLw0KLSAgICAgICAgICAgIFdERy0+U1IgJj0gfjB4MDAwMTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLQ0KLSNlbHNlIC8qIGlmIGNvbmZpZ1VTRV9XQVRDSERPR19USUNLID09IDEgKi8NCi0NCi0gICAgc3RhdGljIHZvaWQgcHJ2RmluZEZhY3RvcnMoIHUzMiBuLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggKiBhLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2ICogYiApDQotICAgIHsNCi0gICAgICAgIC8qIFRoaXMgZnVuY3Rpb24gaXMgY29waWVkIGZyb20gdGhlIFNUIFNUUjcgbGlicmFyeSBhbmQgaXMNCi0gICAgICAgICAqIGNvcHlyaWdodCBTVE1pY3JvZWxlY3Ryb25pY3MuICBSZXByb2R1Y2VkIHdpdGggcGVybWlzc2lvbi4gKi8NCi0NCi0gICAgICAgIHUxNiBiMDsNCi0gICAgICAgIHU4IGEwOw0KLSAgICAgICAgaW50MzJfdCBlcnIsIGVycl9taW4gPSBuOw0KLQ0KLQ0KLSAgICAgICAgKmEgPSBhMCA9ICggKCBuIC0gMSApIC8gMjU2ICkgKyAxOw0KLSAgICAgICAgKmIgPSBiMCA9IG4gLyAqYTsNCi0NCi0gICAgICAgIGZvciggOyAqYSA8PSAyNTY7ICggKmEgKSsrICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICAqYiA9IG4gLyAqYTsNCi0gICAgICAgICAgICBlcnIgPSAoIGludDMyX3QgKSAqYSAqICggaW50MzJfdCApICpiIC0gKCBpbnQzMl90ICkgbjsNCi0NCi0gICAgICAgICAgICBpZiggYWJzKCBlcnIgKSA+ICggKmEgLyAyICkgKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgKCAqYiApKys7DQotICAgICAgICAgICAgICAgIGVyciA9ICggaW50MzJfdCApICphICogKCBpbnQzMl90ICkgKmIgLSAoIGludDMyX3QgKSBuOw0KLSAgICAgICAgICAgIH0NCi0NCi0gICAgICAgICAgICBpZiggYWJzKCBlcnIgKSA8IGFicyggZXJyX21pbiApICkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIGVycl9taW4gPSBlcnI7DQotICAgICAgICAgICAgICAgIGEwID0gKmE7DQotICAgICAgICAgICAgICAgIGIwID0gKmI7DQotDQotICAgICAgICAgICAgICAgIGlmKCBlcnIgPT0gMCApDQotICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgKmEgPSBhMDsNCi0gICAgICAgICpiID0gYjA7DQotICAgIH0NCi0gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQotDQotICAgIHN0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKQ0KLSAgICB7DQotICAgICAgICB1aW50OF90IGE7DQotICAgICAgICB1aW50MTZfdCBiOw0KLSAgICAgICAgdWludDMyX3QgbiA9IGNvbmZpZ0NQVV9QRVJJUEhfSFogLyBjb25maWdUSUNLX1JBVEVfSFo7DQotDQotICAgICAgICBUSU1fSW5pdFR5cGVEZWYgdGltZXI7DQotDQotICAgICAgICBTQ1VfQVBCUGVyaXBoQ2xvY2tDb25maWcoIF9fVElNMjMsIEVOQUJMRSApOw0KLSAgICAgICAgVElNX0RlSW5pdCggVElNMiApOw0KLSAgICAgICAgVElNX1N0cnVjdEluaXQoICZ0aW1lciApOw0KLSAgICAgICAgcHJ2RmluZEZhY3RvcnMoIG4sICZhLCAmYiApOw0KLQ0KLSAgICAgICAgdGltZXIuVElNX01vZGUgPSBUSU1fT0NNX0NIQU5ORUxfMTsNCi0gICAgICAgIHRpbWVyLlRJTV9PQzFfTW9kZXMgPSBUSU1fVElNSU5HOw0KLSAgICAgICAgdGltZXIuVElNX0Nsb2NrX1NvdXJjZSA9IFRJTV9DTEtfQVBCOw0KLSAgICAgICAgdGltZXIuVElNX0Nsb2NrX0VkZ2UgPSBUSU1fQ0xLX0VER0VfUklTSU5HOw0KLSAgICAgICAgdGltZXIuVElNX1ByZXNjYWxlciA9IGEgLSAxOw0KLSAgICAgICAgdGltZXIuVElNX1B1bHNlX0xldmVsXzEgPSBUSU1fSElHSDsNCi0gICAgICAgIHRpbWVyLlRJTV9QdWxzZV9MZW5ndGhfMSA9IHNfblB1bHNlTGVuZ3RoID0gYiAtIDE7DQotDQotICAgICAgICBUSU1fSW5pdCggVElNMiwgJnRpbWVyICk7DQotICAgICAgICBUSU1fSVRDb25maWcoIFRJTTIsIFRJTV9JVF9PQzEsIEVOQUJMRSApOw0KLSAgICAgICAgLyogQ29uZmlndXJlIHRoZSBWSUMgZm9yIHRoZSBXREcgaW50ZXJydXB0LiAqLw0KLSAgICAgICAgVklDX0NvbmZpZyggVElNMl9JVExpbmUsIFZJQ19JUlEsIDEwICk7DQotICAgICAgICBWSUNfSVRDbWQoIFRJTTJfSVRMaW5lLCBFTkFCTEUgKTsNCi0NCi0gICAgICAgIC8qIEluc3RhbGwgdGhlIGRlZmF1bHQgaGFuZGxlcnMgZm9yIGJvdGggVklDJ3MuICovDQotICAgICAgICBWSUMwLT5EVkFSID0gKCB1aW50MzJfdCApIHBydkRlZmF1bHRIYW5kbGVyOw0KLSAgICAgICAgVklDMS0+RFZBUiA9ICggdWludDMyX3QgKSBwcnZEZWZhdWx0SGFuZGxlcjsNCi0NCi0gICAgICAgIFRJTV9Db3VudGVyQ21kKCBUSU0yLCBUSU1fQ0xFQVIgKTsNCi0gICAgICAgIFRJTV9Db3VudGVyQ21kKCBUSU0yLCBUSU1fU1RBUlQgKTsNCi0gICAgfQ0KLSAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCi0NCi0gICAgdm9pZCBUSU0yX0lSUUhhbmRsZXIoIHZvaWQgKQ0KLSAgICB7DQotICAgICAgICAvKiBSZXNldCB0aGUgdGltZXIgY291bnRlciB0byBhdmlvaWQgb3ZlcmZsb3cuICovDQotICAgICAgICBUSU0yLT5PQzFSICs9IHNfblB1bHNlTGVuZ3RoOw0KLQ0KLSAgICAgICAgLyogSW5jcmVtZW50IHRoZSB0aWNrIGNvdW50ZXIuICovDQotICAgICAgICBpZiggeFRhc2tJbmNyZW1lbnRUaWNrKCkgIT0gcGRGQUxTRSApDQotICAgICAgICB7DQotICAgICAgICAgICAgLyogU2VsZWN0IGEgbmV3IHRhc2sgdG8gcnVuLiAqLw0KLSAgICAgICAgICAgIHZUYXNrU3dpdGNoQ29udGV4dCgpOw0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgLyogQ2xlYXIgdGhlIGludGVycnVwdCBpbiB0aGUgd2F0Y2hkb2cuICovDQotICAgICAgICBUSU0yLT5TUiAmPSB+VElNX0ZMQUdfT0MxOw0KLSAgICB9DQorCXZvaWQgVElNMl9JUlFIYW5kbGVyKCB2b2lkICkNCisJew0KKwkJLyogUmVzZXQgdGhlIHRpbWVyIGNvdW50ZXIgdG8gYXZpb2lkIG92ZXJmbG93LiAqLw0KKwkJVElNMi0+T0MxUiArPSBzX25QdWxzZUxlbmd0aDsNCisJCQ0KKwkJLyogSW5jcmVtZW50IHRoZSB0aWNrIGNvdW50ZXIuICovDQorCQlpZiggeFRhc2tJbmNyZW1lbnRUaWNrKCkgIT0gcGRGQUxTRSApDQorCQl7DQorCQkJLyogU2VsZWN0IGEgbmV3IHRhc2sgdG8gcnVuLiAqLw0KKwkJCXZUYXNrU3dpdGNoQ29udGV4dCgpOw0KKwkJfQ0KKwkJDQorCQkvKiBDbGVhciB0aGUgaW50ZXJydXB0IGluIHRoZSB3YXRjaGRvZy4gKi8NCisJCVRJTTItPlNSICY9IH5USU1fRkxBR19PQzE7DQorCX0NCiANCiAjZW5kaWYgLyogVVNFX1dBVENIRE9HX1RJQ0sgKi8NCiANCkBAIC00MDIsMzMgKzM4NCwzOCBAQAogDQogX19hcm0gX19pbnRlcndvcmsgdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKQ0KIHsNCi0gICAgLyogRGlzYWJsZSBpbnRlcnJ1cHRzIGZpcnN0ISAqLw0KLSAgICBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7DQorCS8qIERpc2FibGUgaW50ZXJydXB0cyBmaXJzdCEgKi8NCisJcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOw0KIA0KLSAgICAvKiBOb3cgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgdWxDcml0aWNhbE5lc3RpbmcgY2FuIGJlIGFjY2Vzc2VkDQotICAgICAqIGRpcmVjdGx5LiAgSW5jcmVtZW50IHVsQ3JpdGljYWxOZXN0aW5nIHRvIGtlZXAgYSBjb3VudCBvZiBob3cgbWFueSB0aW1lcw0KLSAgICAgKiBwb3J0RU5URVJfQ1JJVElDQUwoKSBoYXMgYmVlbiBjYWxsZWQuICovDQotICAgIHVsQ3JpdGljYWxOZXN0aW5nKys7DQorCS8qIE5vdyBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB1bENyaXRpY2FsTmVzdGluZyBjYW4gYmUgYWNjZXNzZWQNCisJZGlyZWN0bHkuICBJbmNyZW1lbnQgdWxDcml0aWNhbE5lc3RpbmcgdG8ga2VlcCBhIGNvdW50IG9mIGhvdyBtYW55IHRpbWVzDQorCXBvcnRFTlRFUl9DUklUSUNBTCgpIGhhcyBiZWVuIGNhbGxlZC4gKi8NCisJdWxDcml0aWNhbE5lc3RpbmcrKzsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogX19hcm0gX19pbnRlcndvcmsgdm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApDQogew0KLSAgICBpZiggdWxDcml0aWNhbE5lc3RpbmcgPiBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyApDQotICAgIHsNCi0gICAgICAgIC8qIERlY3JlbWVudCB0aGUgbmVzdGluZyBjb3VudCBhcyB3ZSBhcmUgbGVhdmluZyBhIGNyaXRpY2FsIHNlY3Rpb24uICovDQotICAgICAgICB1bENyaXRpY2FsTmVzdGluZy0tOw0KKwlpZiggdWxDcml0aWNhbE5lc3RpbmcgPiBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyApDQorCXsNCisJCS8qIERlY3JlbWVudCB0aGUgbmVzdGluZyBjb3VudCBhcyB3ZSBhcmUgbGVhdmluZyBhIGNyaXRpY2FsIHNlY3Rpb24uICovDQorCQl1bENyaXRpY2FsTmVzdGluZy0tOw0KIA0KLSAgICAgICAgLyogSWYgdGhlIG5lc3RpbmcgbGV2ZWwgaGFzIHJlYWNoZWQgemVybyB0aGVuIGludGVycnVwdHMgc2hvdWxkIGJlDQotICAgICAgICAgKiByZS1lbmFibGVkLiAqLw0KLSAgICAgICAgaWYoIHVsQ3JpdGljYWxOZXN0aW5nID09IHBvcnROT19DUklUSUNBTF9ORVNUSU5HICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KKwkJLyogSWYgdGhlIG5lc3RpbmcgbGV2ZWwgaGFzIHJlYWNoZWQgemVybyB0aGVuIGludGVycnVwdHMgc2hvdWxkIGJlDQorCQlyZS1lbmFibGVkLiAqLw0KKwkJaWYoIHVsQ3JpdGljYWxOZXN0aW5nID09IHBvcnROT19DUklUSUNBTF9ORVNUSU5HICkNCisJCXsNCisJCQlwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKTsNCisJCX0NCisJfQ0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBzdGF0aWMgdm9pZCBwcnZEZWZhdWx0SGFuZGxlciggdm9pZCApDQogew0KIH0NCisNCisNCisNCisNCisNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9JQVIvU1RSOTF4L3BvcnRtYWNyby5oIGIvcG9ydGFibGUvSUFSL1NUUjkxeC9wb3J0bWFjcm8uaAppbmRleCAwMTBkMzllLi4zZjgwMGJhIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9JQVIvU1RSOTF4L3BvcnRtYWNyby5oCisrKyBiL3BvcnRhYmxlL0lBUi9TVFI5MXgvcG9ydG1hY3JvLmgKQEAgLTI3LDcgKzI3LDcgQEAKIA0KIA0KICNpZm5kZWYgUE9SVE1BQ1JPX0gNCi0gICAgI2RlZmluZSBQT1JUTUFDUk9fSA0KKyNkZWZpbmUgUE9SVE1BQ1JPX0gNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICogUG9ydCBzcGVjaWZpYyBkZWZpbml0aW9ucy4NCkBAIC0zOSw3NCArMzksNzYgQEAKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgKi8NCiANCi0gICAgI2luY2x1ZGUgPGludHJpbnNpY3MuaD4NCisjaW5jbHVkZSA8aW50cmluc2ljcy5oPg0KIA0KLSAgICAjaWZkZWYgX19jcGx1c3BsdXMNCi0gICAgICAgIGV4dGVybiAiQyIgew0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCiANCiAvKiBUeXBlIGRlZmluaXRpb25zLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRDSEFSICAgICAgICAgIGNoYXINCi0gICAgI2RlZmluZSBwb3J0RkxPQVQgICAgICAgICBmbG9hdA0KLSAgICAjZGVmaW5lIHBvcnRET1VCTEUgICAgICAgIGRvdWJsZQ0KLSAgICAjZGVmaW5lIHBvcnRMT05HICAgICAgICAgIGxvbmcNCi0gICAgI2RlZmluZSBwb3J0U0hPUlQgICAgICAgICBzaG9ydA0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19UWVBFICAgIHVpbnQzMl90DQotICAgICNkZWZpbmUgcG9ydEJBU0VfVFlQRSAgICAgbG9uZw0KKyNkZWZpbmUgcG9ydENIQVIJCQljaGFyDQorI2RlZmluZSBwb3J0RkxPQVQJCQlmbG9hdA0KKyNkZWZpbmUgcG9ydERPVUJMRQkJCWRvdWJsZQ0KKyNkZWZpbmUgcG9ydExPTkcJCQlsb25nDQorI2RlZmluZSBwb3J0U0hPUlQJCQlzaG9ydA0KKyNkZWZpbmUgcG9ydFNUQUNLX1RZUEUJCXVpbnQzMl90DQorI2RlZmluZSBwb3J0QkFTRV9UWVBFCQlsb25nDQogDQotICAgIHR5cGVkZWYgcG9ydFNUQUNLX1RZUEUgICBTdGFja1R5cGVfdDsNCi0gICAgdHlwZWRlZiBsb25nICAgICAgICAgICAgIEJhc2VUeXBlX3Q7DQotICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyAgICBVQmFzZVR5cGVfdDsNCit0eXBlZGVmIHBvcnRTVEFDS19UWVBFIFN0YWNrVHlwZV90Ow0KK3R5cGVkZWYgbG9uZyBCYXNlVHlwZV90Ow0KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBVQmFzZVR5cGVfdDsNCiANCiANCi0gICAgI2lmICggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCi0gICAgICAgIHR5cGVkZWYgdWludDE2X3QgICAgIFRpY2tUeXBlX3Q7DQotICAgICAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQotICAgICNlbHNlDQotICAgICAgICB0eXBlZGVmIHVpbnQzMl90ICAgICBUaWNrVHlwZV90Ow0KLSAgICAgICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTA0KLSAgICAjZW5kaWYNCisjaWYoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQorCXR5cGVkZWYgdWludDE2X3QgVGlja1R5cGVfdDsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggVGlja1R5cGVfdCApIDB4ZmZmZg0KKyNlbHNlDQorCXR5cGVkZWYgdWludDMyX3QgVGlja1R5cGVfdDsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTA0KKyNlbmRpZg0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIEhhcmR3YXJlIHNwZWNpZmljcy4gKi8NCi0gICAgI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RIICAgICAgKCAtMSApDQotICAgICNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TICAgICggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQotICAgICNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UICAgIDgNCi0gICAgI2RlZmluZSBwb3J0WUlFTEQoKSAgICBhc20gKCAiU1dJIDAiICkNCi0gICAgI2RlZmluZSBwb3J0Tk9QKCkgICAgICBhc20gKCAiTk9QIiApDQorI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RICQkJKCAtMSApDQorI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMJCQkoICggVGlja1R5cGVfdCApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UCQkJOA0KKyNkZWZpbmUgcG9ydFlJRUxEKCkJCQkJCWFzbSAoICJTV0kgMCIgKQ0KKyNkZWZpbmUgcG9ydE5PUCgpCQkJCQlhc20gKCAiTk9QIiApDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogQ3JpdGljYWwgc2VjdGlvbiBoYW5kbGluZy4gKi8NCi0gICAgX19hcm0gX19pbnRlcndvcmsgdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKTsNCi0gICAgX19hcm0gX19pbnRlcndvcmsgdm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApOw0KLSAgICAjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpICAgICAgICB2UG9ydEVudGVyQ3JpdGljYWwoKQ0KLSAgICAjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkgICAgICAgICB2UG9ydEV4aXRDcml0aWNhbCgpDQorX19hcm0gX19pbnRlcndvcmsgdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKTsNCitfX2FybSBfX2ludGVyd29yayB2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICk7DQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKQkJdlBvcnRFbnRlckNyaXRpY2FsKCkNCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkJCQl2UG9ydEV4aXRDcml0aWNhbCgpDQogDQotICAgICNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpICAgIF9fZGlzYWJsZV9pbnRlcnJ1cHQoKQ0KLSAgICAjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpICAgICBfX2VuYWJsZV9pbnRlcnJ1cHQoKQ0KKyNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpCV9fZGlzYWJsZV9pbnRlcnJ1cHQoKQ0KKyNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkJCV9fZW5hYmxlX2ludGVycnVwdCgpDQogDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGFzayB1dGlsaXRpZXMuICovDQotICAgICNkZWZpbmUgcG9ydEVORF9TV0lUQ0hJTkdfSVNSKCB4U3dpdGNoUmVxdWlyZWQgKSBcDQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBleHRlcm4gdm9pZCB2VGFza1N3aXRjaENvbnRleHQoIHZvaWQgKTsgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBpZiggeFN3aXRjaFJlcXVpcmVkICkgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgdlRhc2tTd2l0Y2hDb250ZXh0KCk7ICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIH0NCisjZGVmaW5lIHBvcnRFTkRfU1dJVENISU5HX0lTUiggeFN3aXRjaFJlcXVpcmVkICkgCVwNCit7CQkJCQkJCQkJCQkJCVwNCitleHRlcm4gdm9pZCB2VGFza1N3aXRjaENvbnRleHQoIHZvaWQgKTsJCQkJXA0KKwkJCQkJCQkJCQkJCQlcDQorCWlmKCB4U3dpdGNoUmVxdWlyZWQgKSAJCQkJCQkJXA0KKwl7CQkJCQkJCQkJCQkJXA0KKwkJdlRhc2tTd2l0Y2hDb250ZXh0KCk7CQkJCQkJXA0KKwl9CQkJCQkJCQkJCQkJXA0KK30NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiANCiAvKiBUYXNrIGZ1bmN0aW9uIG1hY3JvcyBhcyBkZXNjcmliZWQgb24gdGhlIEZyZWVSVE9TLm9yZyBXRUIgc2l0ZS4gKi8NCi0gICAgI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQotICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgICAgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KIA0KLSAgICAjaWZkZWYgX19jcGx1c3BsdXMNCi0gICAgICAgIH0NCi0gICAgI2VuZGlmDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KIA0KICNlbmRpZiAvKiBQT1JUTUFDUk9fSCAqLw0KKw0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0lBUi9WODUwRVMvSVNSX1N1cHBvcnQuaCBiL3BvcnRhYmxlL0lBUi9WODUwRVMvSVNSX1N1cHBvcnQuaAppbmRleCA3YTEzNjFlLi5kMzgyMmZiIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9JQVIvVjg1MEVTL0lTUl9TdXBwb3J0LmgKKysrIGIvcG9ydGFibGUvSUFSL1Y4NTBFUy9JU1JfU3VwcG9ydC5oCkBAIC0yNSwxNDIgKzI1LDEyNSBAQAogICogMSB0YWIgPT0gNCBzcGFjZXMhDQogICovDQogDQotRVhURVJOIHB4Q3VycmVudFRDQg0KLUVYVEVSTiB1c0NyaXRpY2FsTmVzdGluZw0KKwlFWFRFUk4gcHhDdXJyZW50VENCDQorCUVYVEVSTiB1c0NyaXRpY2FsTmVzdGluZw0KIA0KICNpbmNsdWRlICJGcmVlUlRPU0NvbmZpZy5oIg0KIA0KLTsNCi1Db250ZXh0IHNhdmUgYW5kIHJlc3RvcmUgbWFjcm8gZGVmaW5pdGlvbnMNCi07DQorOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ow0KKzsgQ29udGV4dCBzYXZlIGFuZCByZXN0b3JlIG1hY3JvIGRlZmluaXRpb25zDQorOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ow0KIA0KIHBvcnRTQVZFX0NPTlRFWFQgTUFDUk8NCiANCi0gICAgYWRkIC0gMHgwQywgc3A7DQotcHJlcGFyZSBzdGFjayB0byBzYXZlIG5lY2Vzc2FyeSB2YWx1ZXMNCi1zdC53IGxwLCA4WyBzcCBdOw0KLXN0b3JlIExQIHRvIHN0YWNrDQotICAgIHN0c3IgICAgMCwgcjMxDQotICAgIHN0LncgbHAsIDRbIHNwIF07DQotc3RvcmUgRUlQQyB0byBzdGFjaw0KLSAgICBzdHNyICAgIDEsIGxwDQotICAgIHN0LncgbHAsIDBbIHNwIF07DQotc3RvcmUgRUlQU1cgdG8gc3RhY2sNCi0jaWYgY29uZmlnREFUQV9NT0RFID09IDE7IFVzaW5nIHRoZSBUaW55IGRhdGEgbW9kZWwNCi0gICAgcHJlcGFyZSB7IHIyMCwgcjIxLCByMjIsIHIyMywgcjI0LCByMjUsIHIyNiwgcjI3LCByMjgsIHIyOSwgcjMwIH0sIDc2LCBzcDsNCi0gICAgc2F2ZSBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzDQotICAgIHNzdC53IHIxOSwgNzJbIGVwIF0NCi0gICAgc3N0LncgcjE4LCA2OFsgZXAgXQ0KLSAgICBzc3QudyByMTcsIDY0WyBlcCBdDQotICAgIHNzdC53IHIxNiwgNjBbIGVwIF0NCi0gICAgc3N0LncgcjE1LCA1NlsgZXAgXQ0KLSAgICBzc3QudyByMTQsIDUyWyBlcCBdDQotICAgIHNzdC53IHIxMywgNDhbIGVwIF0NCi0gICAgc3N0LncgcjEyLCA0NFsgZXAgXQ0KLSAgICBzc3QudyByMTEsIDQwWyBlcCBdDQotICAgIHNzdC53IHIxMCwgMzZbIGVwIF0NCi0gICAgc3N0LncgcjksIDMyWyBlcCBdDQotICAgIHNzdC53IHI4LCAyOFsgZXAgXQ0KLSAgICBzc3QudyByNywgMjRbIGVwIF0NCi0gICAgc3N0LncgcjYsIDIwWyBlcCBdDQotICAgIHNzdC53IHI1LCAxNlsgZXAgXQ0KLSAgICBzc3QudyByNCwgMTJbIGVwIF0NCi0jZWxzZTsgVXNpbmcgdGhlIFNtYWxsIC8gTGFyZ2UgZGF0YSBtb2RlbA0KLSAgICBwcmVwYXJlIHsgcjIwLCByMjEsIHIyMiwgcjIzLCByMjQsIHIyNiwgcjI3LCByMjgsIHIyOSwgcjMwIH0sIDcyLCBzcDsNCi0gICAgc2F2ZSBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzDQotICAgIHNzdC53IHIxOSwgNjhbIGVwIF0NCi0gICAgc3N0LncgcjE4LCA2NFsgZXAgXQ0KLSAgICBzc3QudyByMTcsIDYwWyBlcCBdDQotICAgIHNzdC53IHIxNiwgNTZbIGVwIF0NCi0gICAgc3N0LncgcjE1LCA1MlsgZXAgXQ0KLSAgICBzc3QudyByMTQsIDQ4WyBlcCBdDQotICAgIHNzdC53IHIxMywgNDRbIGVwIF0NCi0gICAgc3N0LncgcjEyLCA0MFsgZXAgXQ0KLSAgICBzc3QudyByMTEsIDM2WyBlcCBdDQotICAgIHNzdC53IHIxMCwgMzJbIGVwIF0NCi0gICAgc3N0LncgcjksIDI4WyBlcCBdDQotICAgIHNzdC53IHI4LCAyNFsgZXAgXQ0KLSAgICBzc3QudyByNywgMjBbIGVwIF0NCi0gICAgc3N0LncgcjYsIDE2WyBlcCBdDQotICAgIHNzdC53IHI1LCAxMlsgZXAgXQ0KKyAgICBhZGQgICAgIC0weDBDLHNwCQkJOyBwcmVwYXJlIHN0YWNrIHRvIHNhdmUgbmVjZXNzYXJ5IHZhbHVlcw0KKyAgICBzdC53ICAgIGxwLDhbc3BdCQkJOyBzdG9yZSBMUCB0byBzdGFjaw0KKyAgICBzdHNyICAgIDAscjMxDQorICAgIHN0LncgICAgbHAsNFtzcF0JCQk7IHN0b3JlIEVJUEMgdG8gc3RhY2sNCisgICAgc3RzciAgICAxLGxwDQorICAgIHN0LncgICAgbHAsMFtzcF0JCQk7IHN0b3JlIEVJUFNXIHRvIHN0YWNrDQorI2lmIGNvbmZpZ0RBVEFfTU9ERSA9PSAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgVXNpbmcgdGhlIFRpbnkgZGF0YSBtb2RlbA0KKyAgICBwcmVwYXJlIHtyMjAscjIxLHIyMixyMjMscjI0LHIyNSxyMjYscjI3LHIyOCxyMjkscjMwfSw3NixzcCA7IHNhdmUgZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycw0KKyAgICBzc3QudyAgIHIxOSw3MltlcF0NCisgICAgc3N0LncgICByMTgsNjhbZXBdDQorICAgIHNzdC53ICAgcjE3LDY0W2VwXQ0KKyAgICBzc3QudyAgIHIxNiw2MFtlcF0NCisgICAgc3N0LncgICByMTUsNTZbZXBdDQorICAgIHNzdC53ICAgcjE0LDUyW2VwXQ0KKyAgICBzc3QudyAgIHIxMyw0OFtlcF0NCisgICAgc3N0LncgICByMTIsNDRbZXBdDQorICAgIHNzdC53ICAgcjExLDQwW2VwXQ0KKyAgICBzc3QudyAgIHIxMCwzNltlcF0NCisgICAgc3N0LncgICByOSwzMltlcF0NCisgICAgc3N0LncgICByOCwyOFtlcF0NCisgICAgc3N0LncgICByNywyNFtlcF0NCisgICAgc3N0LncgICByNiwyMFtlcF0NCisgICAgc3N0LncgICByNSwxNltlcF0NCisgICAgc3N0LncgICByNCwxMltlcF0NCisjZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBVc2luZyB0aGUgU21hbGwvTGFyZ2UgZGF0YSBtb2RlbA0KKyAgICBwcmVwYXJlIHtyMjAscjIxLHIyMixyMjMscjI0LHIyNixyMjcscjI4LHIyOSxyMzB9LDcyLHNwICAgICA7IHNhdmUgZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycw0KKyAgICBzc3QudyAgIHIxOSw2OFtlcF0NCisgICAgc3N0LncgICByMTgsNjRbZXBdDQorICAgIHNzdC53ICAgcjE3LDYwW2VwXQ0KKyAgICBzc3QudyAgIHIxNiw1NltlcF0NCisgICAgc3N0LncgICByMTUsNTJbZXBdDQorICAgIHNzdC53ICAgcjE0LDQ4W2VwXQ0KKyAgICBzc3QudyAgIHIxMyw0NFtlcF0NCisgICAgc3N0LncgICByMTIsNDBbZXBdDQorICAgIHNzdC53ICAgcjExLDM2W2VwXQ0KKyAgICBzc3QudyAgIHIxMCwzMltlcF0NCisgICAgc3N0LncgICByOSwyOFtlcF0NCisgICAgc3N0LncgICByOCwyNFtlcF0NCisgICAgc3N0LncgICByNywyMFtlcF0NCisgICAgc3N0LncgICByNiwxNltlcF0NCisgICAgc3N0LncgICByNSwxMltlcF0NCiAjZW5kaWYgLyogY29uZmlnREFUQV9NT0RFICovDQotc3N0LncgcjIsIDhbIGVwIF0NCi1zc3QudyByMSwgNFsgZXAgXQ0KLU1PVkhJIGhpMSggdXNDcml0aWNhbE5lc3RpbmcgKSwgcjAsIHIxOw0KLXNhdmUgdXNDcml0aWNhbE5lc3RpbmcgdmFsdWUgdG8gc3RhY2sNCi1sZC53IGx3MSggdXNDcml0aWNhbE5lc3RpbmcgKVsgcjEgXSwgcjINCi1zc3QudyByMiwgMFsgZXAgXQ0KLU1PVkhJIGhpMSggcHhDdXJyZW50VENCICksIHIwLCByMTsNCi1zYXZlIFNQIHRvIHRvcCBvZiBjdXJyZW50IFRDQg0KLWxkLncgbHcxKCBweEN1cnJlbnRUQ0IgKVsgcjEgXSwgcjINCi1zdC53IHNwLCAwWyByMiBdDQotRU5ETQ0KKyAgICBzc3QudyAgIHIyLDhbZXBdDQorICAgIHNzdC53ICAgcjEsNFtlcF0NCisgICAgTU9WSEkgICBoaTEodXNDcml0aWNhbE5lc3RpbmcpLHIwLHIxCTsgc2F2ZSB1c0NyaXRpY2FsTmVzdGluZyB2YWx1ZSB0byBzdGFjaw0KKyAgICBsZC53ICAgIGx3MSh1c0NyaXRpY2FsTmVzdGluZylbcjFdLHIyDQorICAgIHNzdC53ICAgcjIsMFtlcF0NCisgICAgTU9WSEkgICBoaTEocHhDdXJyZW50VENCKSxyMCxyMQkJCTsgc2F2ZSBTUCB0byB0b3Agb2YgY3VycmVudCBUQ0INCisgICAgbGQudyAgICBsdzEocHhDdXJyZW50VENCKVtyMV0scjINCisgICAgc3QudyAgICBzcCwwW3IyXQ0KKyAgICBFTkRNDQogDQogDQogcG9ydFJFU1RPUkVfQ09OVEVYVCBNQUNSTw0KIA0KLU1PVkhJIGhpMSggcHhDdXJyZW50VENCICksIHIwLCByMTsNCi1nZXQgU3RhY2twb2ludGVyIGFkZHJlc3MNCi1sZC53IGx3MSggcHhDdXJyZW50VENCIClbIHIxIF0sIHNwDQotTU9WIHNwLCByMQ0KLWxkLncgICAgMFsgcjEgXSwgc3A7DQotbG9hZCBzdGFja3BvaW50ZXINCi1NT1Ygc3AsIGVwOw0KLXNldCBzdGFjayBwb2ludGVyIHRvIGVsZW1lbnQgcG9pbnRlcg0KLXNsZC53ICAgMFsgZXAgXSwgcjE7DQotbG9hZCB1c0NyaXRpY2FsTmVzdGluZyB2YWx1ZSBmcm9tIHN0YWNrDQotTU9WSEkgaGkxKCB1c0NyaXRpY2FsTmVzdGluZyApLCByMCwgcjINCi1zdC53IHIxLCBsdzEoIHVzQ3JpdGljYWxOZXN0aW5nIClbIHIyIF0NCi1zbGQudyAgIDRbIGVwIF0sIHIxOw0KLXJlc3RvcmUgZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycw0KLXNsZC53ICAgOFsgZXAgXSwgcjINCi0jaWYgY29uZmlnREFUQV9NT0RFID09IDE7IFVzaW5nIFRpbnkgZGF0YSBtb2RlbA0KLSAgICBzbGQudyAgIDEyWyBlcCBdLCByNA0KLSAgICBzbGQudyAgIDE2WyBlcCBdLCByNQ0KLSAgICBzbGQudyAgIDIwWyBlcCBdLCByNg0KLSAgICBzbGQudyAgIDI0WyBlcCBdLCByNw0KLSAgICBzbGQudyAgIDI4WyBlcCBdLCByOA0KLSAgICBzbGQudyAgIDMyWyBlcCBdLCByOQ0KLSAgICBzbGQudyAgIDM2WyBlcCBdLCByMTANCi0gICAgc2xkLncgICA0MFsgZXAgXSwgcjExDQotICAgIHNsZC53ICAgNDRbIGVwIF0sIHIxMg0KLSAgICBzbGQudyAgIDQ4WyBlcCBdLCByMTMNCi0gICAgc2xkLncgICA1MlsgZXAgXSwgcjE0DQotICAgIHNsZC53ICAgNTZbIGVwIF0sIHIxNQ0KLSAgICBzbGQudyAgIDYwWyBlcCBdLCByMTYNCi0gICAgc2xkLncgICA2NFsgZXAgXSwgcjE3DQotICAgIHNsZC53ICAgNjhbIGVwIF0sIHIxOA0KLSAgICBzbGQudyAgIDcyWyBlcCBdLCByMTkNCi0gICAgZGlzcG9zZSA3NiwgeyByMjAsIHIyMSwgcjIyLCByMjMsIHIyNCwgcjI1LCByMjYsIHIyNywgcjI4LCByMjksIHIzMCB9DQotI2Vsc2U7IFVzaW5nIFNtYWxsIC8gTGFyZ2UgZGF0YSBtb2RlbA0KLSAgICBzbGQudyAgIDEyWyBlcCBdLCByNQ0KLSAgICBzbGQudyAgIDE2WyBlcCBdLCByNg0KLSAgICBzbGQudyAgIDIwWyBlcCBdLCByNw0KLSAgICBzbGQudyAgIDI0WyBlcCBdLCByOA0KLSAgICBzbGQudyAgIDI4WyBlcCBdLCByOQ0KLSAgICBzbGQudyAgIDMyWyBlcCBdLCByMTANCi0gICAgc2xkLncgICAzNlsgZXAgXSwgcjExDQotICAgIHNsZC53ICAgNDBbIGVwIF0sIHIxMg0KLSAgICBzbGQudyAgIDQ0WyBlcCBdLCByMTMNCi0gICAgc2xkLncgICA0OFsgZXAgXSwgcjE0DQotICAgIHNsZC53ICAgNTJbIGVwIF0sIHIxNQ0KLSAgICBzbGQudyAgIDU2WyBlcCBdLCByMTYNCi0gICAgc2xkLncgICA2MFsgZXAgXSwgcjE3DQotICAgIHNsZC53ICAgNjRbIGVwIF0sIHIxOA0KLSAgICBzbGQudyAgIDY4WyBlcCBdLCByMTkNCi0gICAgZGlzcG9zZSA3MiwgeyByMjAsIHIyMSwgcjIyLCByMjMsIHIyNCwgcjI2LCByMjcsIHIyOCwgcjI5LCByMzAgfQ0KKyAgICBNT1ZISSAgIGhpMShweEN1cnJlbnRUQ0IpLHIwLHIxCQkJOyBnZXQgU3RhY2twb2ludGVyIGFkZHJlc3MNCisgICAgbGQudyAgICBsdzEocHhDdXJyZW50VENCKVtyMV0sc3ANCisgICAgTU9WICAgICBzcCxyMQ0KKyAgICBsZC53ICAgIDBbcjFdLHNwCQkJCQkJOyBsb2FkIHN0YWNrcG9pbnRlcg0KKyAgICBNT1YgICAgIHNwLGVwCQkJCQkJCTsgc2V0IHN0YWNrIHBvaW50ZXIgdG8gZWxlbWVudCBwb2ludGVyDQorICAgIHNsZC53ICAgMFtlcF0scjEJCQkJCQk7IGxvYWQgdXNDcml0aWNhbE5lc3RpbmcgdmFsdWUgZnJvbSBzdGFjaw0KKyAgICBNT1ZISSAgIGhpMSh1c0NyaXRpY2FsTmVzdGluZykscjAscjINCisgICAgc3QudyAgICByMSxsdzEodXNDcml0aWNhbE5lc3RpbmcpW3IyXQ0KKyAgICBzbGQudyAgIDRbZXBdLHIxCQkJCQkJOyByZXN0b3JlIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMNCisgICAgc2xkLncgICA4W2VwXSxyMg0KKyNpZiBjb25maWdEQVRBX01PREUgPT0gMQkJCQkJOyBVc2luZyBUaW55IGRhdGEgbW9kZWwNCisgICAgc2xkLncgICAxMltlcF0scjQNCisgICAgc2xkLncgICAxNltlcF0scjUNCisgICAgc2xkLncgICAyMFtlcF0scjYNCisgICAgc2xkLncgICAyNFtlcF0scjcNCisgICAgc2xkLncgICAyOFtlcF0scjgNCisgICAgc2xkLncgICAzMltlcF0scjkNCisgICAgc2xkLncgICAzNltlcF0scjEwDQorICAgIHNsZC53ICAgNDBbZXBdLHIxMQ0KKyAgICBzbGQudyAgIDQ0W2VwXSxyMTINCisgICAgc2xkLncgICA0OFtlcF0scjEzDQorICAgIHNsZC53ICAgNTJbZXBdLHIxNA0KKyAgICBzbGQudyAgIDU2W2VwXSxyMTUNCisgICAgc2xkLncgICA2MFtlcF0scjE2DQorICAgIHNsZC53ICAgNjRbZXBdLHIxNw0KKyAgICBzbGQudyAgIDY4W2VwXSxyMTgNCisgICAgc2xkLncgICA3MltlcF0scjE5DQorICAgIGRpc3Bvc2UgNzYse3IyMCxyMjEscjIyLHIyMyxyMjQscjI1LHIyNixyMjcscjI4LHIyOSxyMzB9DQorI2Vsc2UJCQkJCQkJCQkJOyBVc2luZyBTbWFsbC9MYXJnZSBkYXRhIG1vZGVsDQorICAgIHNsZC53ICAgMTJbZXBdLHI1DQorICAgIHNsZC53ICAgMTZbZXBdLHI2DQorICAgIHNsZC53ICAgMjBbZXBdLHI3DQorICAgIHNsZC53ICAgMjRbZXBdLHI4DQorICAgIHNsZC53ICAgMjhbZXBdLHI5DQorICAgIHNsZC53ICAgMzJbZXBdLHIxMA0KKyAgICBzbGQudyAgIDM2W2VwXSxyMTENCisgICAgc2xkLncgICA0MFtlcF0scjEyDQorICAgIHNsZC53ICAgNDRbZXBdLHIxMw0KKyAgICBzbGQudyAgIDQ4W2VwXSxyMTQNCisgICAgc2xkLncgICA1MltlcF0scjE1DQorICAgIHNsZC53ICAgNTZbZXBdLHIxNg0KKyAgICBzbGQudyAgIDYwW2VwXSxyMTcNCisgICAgc2xkLncgICA2NFtlcF0scjE4DQorICAgIHNsZC53ICAgNjhbZXBdLHIxOQ0KKyAgICBkaXNwb3NlIDcyLHtyMjAscjIxLHIyMixyMjMscjI0LHIyNixyMjcscjI4LHIyOSxyMzB9DQogI2VuZGlmIC8qIGNvbmZpZ0RBVEFfTU9ERSAqLw0KLWxkLncgICAgMFsgc3AgXSwgbHA7DQotcmVzdG9yZSBFSVBTVyBmcm9tIHN0YWNrDQotbGRzciBscCwgMQ0KLWxkLncgICAgNFsgc3AgXSwgbHA7DQotcmVzdG9yZSBFSVBDIGZyb20gc3RhY2sNCi1sZHNyIGxwLCAwDQotbGQudyAgICA4WyBzcCBdLCBscDsNCi1yZXN0b3JlIExQIGZyb20gc3RhY2sNCi0gICAgYWRkICAgICAweDBDLCBzcDsNCi1zZXQgU1AgdG8gcmlnaHQgcG9zaXRpb24NCisgICAgbGQudyAgICAwW3NwXSxscAkJCQkJCTsgcmVzdG9yZSBFSVBTVyBmcm9tIHN0YWNrDQorICAgIGxkc3IgICAgbHAsMQ0KKyAgICBsZC53ICAgIDRbc3BdLGxwCQkJCQkJOyByZXN0b3JlIEVJUEMgZnJvbSBzdGFjaw0KKyAgICBsZHNyICAgIGxwLDANCisgICAgbGQudyAgICA4W3NwXSxscAkJCQkJCTsgcmVzdG9yZSBMUCBmcm9tIHN0YWNrDQorICAgIGFkZCAgICAgMHgwQyxzcAkJCQkJCQk7IHNldCBTUCB0byByaWdodCBwb3NpdGlvbg0KIA0KLVJFVEkNCisgICAgUkVUSQ0KIA0KLUVORE0NCisgICAgRU5ETQ0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0lBUi9WODUwRVMvcG9ydC5jIGIvcG9ydGFibGUvSUFSL1Y4NTBFUy9wb3J0LmMKaW5kZXggMGIyYzJkNS4uODJhMzZmZCAxMDA2NDQKLS0tIGEvcG9ydGFibGUvSUFSL1Y4NTBFUy9wb3J0LmMKKysrIGIvcG9ydGFibGUvSUFSL1Y4NTBFUy9wb3J0LmMKQEAgLTMzLDE0ICszMywxNCBAQAogI2luY2x1ZGUgInRhc2suaCINCiANCiAvKiBDcml0aWNhbCBuZXN0aW5nIHNob3VsZCBiZSBpbml0aWFsaXNlZCB0byBhIG5vbiB6ZXJvIHZhbHVlIHNvIGludGVycnVwdHMgZG9uJ3QNCi0gKiBhY2NpZGVudGFsbHkgZ2V0IGVuYWJsZWQgYmVmb3JlIHRoZSBzY2hlZHVsZXIgaXMgc3RhcnRlZC4gKi8NCi0jZGVmaW5lIHBvcnRJTklUSUFMX0NSSVRJQ0FMX05FU1RJTkcgICAgKCAoIFN0YWNrVHlwZV90ICkgMTAgKQ0KK2FjY2lkZW50YWxseSBnZXQgZW5hYmxlZCBiZWZvcmUgdGhlIHNjaGVkdWxlciBpcyBzdGFydGVkLiAqLw0KKyNkZWZpbmUgcG9ydElOSVRJQUxfQ1JJVElDQUxfTkVTVElORyAgKCggU3RhY2tUeXBlX3QgKSAxMCkNCiANCiAvKiBUaGUgUFNXIHZhbHVlIGFzc2lnbmVkIHRvIHRhc2tzIHdoZW4gdGhleSBzdGFydCB0byBydW4gZm9yIHRoZSBmaXJzdCB0aW1lLiAqLw0KLSNkZWZpbmUgcG9ydFBTVyAgICAgICAgICAgICAgICAgICAgICAgICAoICggU3RhY2tUeXBlX3QgKSAweDAwMDAwMDAwICkNCisjZGVmaW5lIHBvcnRQU1cJCSAgKCggU3RhY2tUeXBlX3QgKSAweDAwMDAwMDAwKQ0KIA0KIC8qIFdlIHJlcXVpcmUgdGhlIGFkZHJlc3Mgb2YgdGhlIHB4Q3VycmVudFRDQiB2YXJpYWJsZSwgYnV0IGRvbid0IHdhbnQgdG8ga25vdw0KLSAqIGFueSBkZXRhaWxzIG9mIGl0cyB0eXBlLiAqLw0KK2FueSBkZXRhaWxzIG9mIGl0cyB0eXBlLiAqLw0KIHR5cGVkZWYgdm9pZCBUQ0JfdDsNCiBleHRlcm4gdm9sYXRpbGUgVENCX3QgKiB2b2xhdGlsZSBweEN1cnJlbnRUQ0I7DQogDQpAQCAtNTIsMTA2ICs1MiwxMDQgQEAKIHN0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKTsNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCi1TdGFja1R5cGVfdCAqIHB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKiBweFRvcE9mU3RhY2ssDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqIHB2UGFyYW1ldGVycyApDQorU3RhY2tUeXBlX3QgKnB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKnB4VG9wT2ZTdGFjaywgVGFza0Z1bmN0aW9uX3QgcHhDb2RlLCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KIHsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBweENvZGU7ICAgICAvKiBUYXNrIGZ1bmN0aW9uIHN0YXJ0IGFkZHJlc3MgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHhDb2RlOyAgICAgLyogVGFzayBmdW5jdGlvbiBzdGFydCBhZGRyZXNzICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gcG9ydFBTVzsgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWwgUFNXIHZhbHVlICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MjAyMDIwMjA7IC8qIEluaXRpYWwgVmFsdWUgb2YgUjIwICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MjEyMTIxMjE7IC8qIEluaXRpYWwgVmFsdWUgb2YgUjIxICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MjIyMjIyMjI7IC8qIEluaXRpYWwgVmFsdWUgb2YgUjIyICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MjMyMzIzMjM7IC8qIEluaXRpYWwgVmFsdWUgb2YgUjIzICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MjQyNDI0MjQ7IC8qIEluaXRpYWwgVmFsdWUgb2YgUjI0ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAjaWYgKCBfX0RBVEFfTU9ERUxfXyA9PSAwICkgfHwgKCBfX0RBVEFfTU9ERUxfXyA9PSAxICkNCi0gICAgICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgyNTI1MjUyNTsgLyogSW5pdGlhbCBWYWx1ZSBvZiBSMjUgKi8NCi0gICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAjZW5kaWYgLyogY29uZmlnREFUQV9NT0RFICovDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgyNjI2MjYyNjsgLyogSW5pdGlhbCBWYWx1ZSBvZiBSMjYgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgyNzI3MjcyNzsgLyogSW5pdGlhbCBWYWx1ZSBvZiBSMjcgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgyODI4MjgyODsgLyogSW5pdGlhbCBWYWx1ZSBvZiBSMjggKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgyOTI5MjkyOTsgLyogSW5pdGlhbCBWYWx1ZSBvZiBSMjkgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgzMDMwMzAzMDsgLyogSW5pdGlhbCBWYWx1ZSBvZiBSMzAgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxOTE5MTkxOTsgLyogSW5pdGlhbCBWYWx1ZSBvZiBSMTkgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxODE4MTgxODsgLyogSW5pdGlhbCBWYWx1ZSBvZiBSMTggKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxNzE3MTcxNzsgLyogSW5pdGlhbCBWYWx1ZSBvZiBSMTcgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxNjE2MTYxNjsgLyogSW5pdGlhbCBWYWx1ZSBvZiBSMTYgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxNTE1MTUxNTsgLyogSW5pdGlhbCBWYWx1ZSBvZiBSMTUgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxNDE0MTQxNDsgLyogSW5pdGlhbCBWYWx1ZSBvZiBSMTQgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMzEzMTMxMzsgLyogSW5pdGlhbCBWYWx1ZSBvZiBSMTMgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMjEyMTIxMjsgLyogSW5pdGlhbCBWYWx1ZSBvZiBSMTIgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMTExMTExMTsgLyogSW5pdGlhbCBWYWx1ZSBvZiBSMTEgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMDEwMTAxMDsgLyogSW5pdGlhbCBWYWx1ZSBvZiBSMTAgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHg5OTk5OTk5OTsgLyogSW5pdGlhbCBWYWx1ZSBvZiBSMDkgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHg4ODg4ODg4ODsgLyogSW5pdGlhbCBWYWx1ZSBvZiBSMDggKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHg3Nzc3Nzc3NzsgLyogSW5pdGlhbCBWYWx1ZSBvZiBSMDcgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHg2NjY2NjY2NjsgLyogSW5pdGlhbCBWYWx1ZSBvZiBSMDYgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHg1NTU1NTU1NTsgLyogSW5pdGlhbCBWYWx1ZSBvZiBSMDUgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICNpZiBfX0RBVEFfTU9ERUxfXyA9PSAwIHx8IF9fREFUQV9NT0RFTF9fID09IDENCi0gICAgICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHg0NDQ0NDQ0NDsgLyogSW5pdGlhbCBWYWx1ZSBvZiBSMDQgKi8NCi0gICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAjZW5kaWYgLyogY29uZmlnREFUQV9NT0RFICovDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgyMjIyMjIyMjsgICAvKiBJbml0aWFsIFZhbHVlIG9mIFIwMiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwdlBhcmFtZXRlcnM7IC8qIFIxIGlzIGV4cGVjdGVkIHRvIGhvbGQgdGhlIGZ1bmN0aW9uIHBhcmFtZXRlciovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkc7DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHhDb2RlOyAgICAgICAgICAvKiBUYXNrIGZ1bmN0aW9uIHN0YXJ0IGFkZHJlc3MgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHhDb2RlOyAgICAgICAgICAvKiBUYXNrIGZ1bmN0aW9uIHN0YXJ0IGFkZHJlc3MgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSBwb3J0UFNXOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsIFBTVyB2YWx1ZSAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDIwMjAyMDIwOyAgICAgIC8qIEluaXRpYWwgVmFsdWUgb2YgUjIwICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MjEyMTIxMjE7ICAgICAgLyogSW5pdGlhbCBWYWx1ZSBvZiBSMjEgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgyMjIyMjIyMjsgICAgICAvKiBJbml0aWFsIFZhbHVlIG9mIFIyMiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDIzMjMyMzIzOyAgICAgIC8qIEluaXRpYWwgVmFsdWUgb2YgUjIzICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MjQyNDI0MjQ7ICAgICAgLyogSW5pdGlhbCBWYWx1ZSBvZiBSMjQgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorI2lmIChfX0RBVEFfTU9ERUxfXyA9PSAwKSB8fCAoX19EQVRBX01PREVMX18gPT0gMSkNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDI1MjUyNTI1OyAgICAgIC8qIEluaXRpYWwgVmFsdWUgb2YgUjI1ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKyNlbmRpZiAvKiBjb25maWdEQVRBX01PREUgKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDI2MjYyNjI2OyAgICAgIC8qIEluaXRpYWwgVmFsdWUgb2YgUjI2ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MjcyNzI3Mjc7ICAgICAgLyogSW5pdGlhbCBWYWx1ZSBvZiBSMjcgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgyODI4MjgyODsgICAgICAvKiBJbml0aWFsIFZhbHVlIG9mIFIyOCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDI5MjkyOTI5OyAgICAgIC8qIEluaXRpYWwgVmFsdWUgb2YgUjI5ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MzAzMDMwMzA7ICAgICAgLyogSW5pdGlhbCBWYWx1ZSBvZiBSMzAgKi8NCisJcHhUb3BPZlN0YWNrLS07IAkNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDE5MTkxOTE5OyAgICAgIC8qIEluaXRpYWwgVmFsdWUgb2YgUjE5ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTgxODE4MTg7ICAgICAgLyogSW5pdGlhbCBWYWx1ZSBvZiBSMTggKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxNzE3MTcxNzsgICAgICAvKiBJbml0aWFsIFZhbHVlIG9mIFIxNyAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDE2MTYxNjE2OyAgICAgIC8qIEluaXRpYWwgVmFsdWUgb2YgUjE2ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTUxNTE1MTU7ICAgICAgLyogSW5pdGlhbCBWYWx1ZSBvZiBSMTUgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxNDE0MTQxNDsgICAgICAvKiBJbml0aWFsIFZhbHVlIG9mIFIxNCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDEzMTMxMzEzOyAgICAgIC8qIEluaXRpYWwgVmFsdWUgb2YgUjEzICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTIxMjEyMTI7ICAgICAgLyogSW5pdGlhbCBWYWx1ZSBvZiBSMTIgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMTExMTExMTsgICAgICAvKiBJbml0aWFsIFZhbHVlIG9mIFIxMSAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDEwMTAxMDEwOyAgICAgIC8qIEluaXRpYWwgVmFsdWUgb2YgUjEwICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4OTk5OTk5OTk7ICAgICAgLyogSW5pdGlhbCBWYWx1ZSBvZiBSMDkgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHg4ODg4ODg4ODsgICAgICAvKiBJbml0aWFsIFZhbHVlIG9mIFIwOCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDc3Nzc3Nzc3OyAgICAgIC8qIEluaXRpYWwgVmFsdWUgb2YgUjA3ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4NjY2NjY2NjY7ICAgICAgLyogSW5pdGlhbCBWYWx1ZSBvZiBSMDYgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHg1NTU1NTU1NTsgICAgICAvKiBJbml0aWFsIFZhbHVlIG9mIFIwNSAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisjaWYgX19EQVRBX01PREVMX18gPT0gMCB8fCBfX0RBVEFfTU9ERUxfXyA9PSAxDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHg0NDQ0NDQ0NDsgICAgICAvKiBJbml0aWFsIFZhbHVlIG9mIFIwNCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisjZW5kaWYgLyogY29uZmlnREFUQV9NT0RFICovDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgyMjIyMjIyMjsgICAgICAvKiBJbml0aWFsIFZhbHVlIG9mIFIwMiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwdlBhcmFtZXRlcnM7ICAgIC8qIFIxIGlzIGV4cGVjdGVkIHRvIGhvbGQgdGhlIGZ1bmN0aW9uIHBhcmFtZXRlciovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkc7CQ0KIA0KLSAgICAvKg0KLSAgICAgKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSB0b3Agb2YgdGhlIHN0YWNrIHdlIGhhdmUgZ2VuZXJhdGVkIHNvIHRoaXMgY2FuDQotICAgICAqIGJlIHN0b3JlZCBpbiB0aGUgdGFzayBjb250cm9sIGJsb2NrIGZvciB0aGUgdGFzay4NCi0gICAgICovDQotICAgIHJldHVybiBweFRvcE9mU3RhY2s7DQorCS8qDQorCSAqIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHRvcCBvZiB0aGUgc3RhY2sgd2UgaGF2ZSBnZW5lcmF0ZWQgc28gdGhpcyBjYW4NCisJICogYmUgc3RvcmVkIGluIHRoZSB0YXNrIGNvbnRyb2wgYmxvY2sgZm9yIHRoZSB0YXNrLg0KKwkgKi8NCisJcmV0dXJuIHB4VG9wT2ZTdGFjazsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogQmFzZVR5cGVfdCB4UG9ydFN0YXJ0U2NoZWR1bGVyKCB2b2lkICkNCiB7DQotICAgIC8qIFNldHVwIHRoZSBoYXJkd2FyZSB0byBnZW5lcmF0ZSB0aGUgdGljay4gIEludGVycnVwdHMgYXJlIGRpc2FibGVkIHdoZW4NCi0gICAgICogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuICovDQotICAgIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoKTsNCisJLyogU2V0dXAgdGhlIGhhcmR3YXJlIHRvIGdlbmVyYXRlIHRoZSB0aWNrLiAgSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgd2hlbg0KKwl0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4gKi8NCisJcHJ2U2V0dXBUaW1lckludGVycnVwdCgpOw0KIA0KLSAgICAvKiBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBmaXJzdCB0YXNrIHRoYXQgaXMgZ29pbmcgdG8gcnVuLiAqLw0KLSAgICB2UG9ydFN0YXJ0KCk7DQorCS8qIFJlc3RvcmUgdGhlIGNvbnRleHQgb2YgdGhlIGZpcnN0IHRhc2sgdGhhdCBpcyBnb2luZyB0byBydW4uICovDQorCXZQb3J0U3RhcnQoKTsNCiANCi0gICAgLyogU2hvdWxkIG5vdCBnZXQgaGVyZSBhcyB0aGUgdGFza3MgYXJlIG5vdyBydW5uaW5nISAqLw0KLSAgICByZXR1cm4gcGRUUlVFOw0KKwkvKiBTaG91bGQgbm90IGdldCBoZXJlIGFzIHRoZSB0YXNrcyBhcmUgbm93IHJ1bm5pbmchICovDQorCXJldHVybiBwZFRSVUU7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQ0KIHsNCi0gICAgLyogSXQgaXMgdW5saWtlbHkgdGhhdCB0aGUgVjg1MEVTL0Z4MyBwb3J0IHdpbGwgZ2V0IHN0b3BwZWQuICBJZiByZXF1aXJlZCBzaW1wbHkNCi0gICAgICogZGlzYWJsZSB0aGUgdGljayBpbnRlcnJ1cHQgaGVyZS4gKi8NCisJLyogSXQgaXMgdW5saWtlbHkgdGhhdCB0aGUgVjg1MEVTL0Z4MyBwb3J0IHdpbGwgZ2V0IHN0b3BwZWQuICBJZiByZXF1aXJlZCBzaW1wbHkNCisJZGlzYWJsZSB0aGUgdGljayBpbnRlcnJ1cHQgaGVyZS4gKi8NCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQpAQCAtMTYwLDI0ICsxNTgsMjYgQEAKICAqLw0KIHN0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKQ0KIHsNCi0gICAgVE0wQ0UgPSAwOyAgICAvKiBUTU0wIG9wZXJhdGlvbiBkaXNhYmxlICovDQotICAgIFRNMEVRTUswID0gMTsgLyogSU5UVE0wRVEwIGludGVycnVwdCBkaXNhYmxlICovDQotICAgIFRNMEVRSUYwID0gMDsgLyogY2xlYXIgSU5UVE0wRVEwIGludGVycnVwdCBmbGFnICovDQorCVRNMENFICAgICA9IDA7CS8qIFRNTTAgb3BlcmF0aW9uIGRpc2FibGUgKi8NCisJVE0wRVFNSzAgID0gMTsJLyogSU5UVE0wRVEwIGludGVycnVwdCBkaXNhYmxlICovDQorCVRNMEVRSUYwICA9IDA7CS8qIGNsZWFyIElOVFRNMEVRMCBpbnRlcnJ1cHQgZmxhZyAqLw0KIA0KLSAgICAjaWZkZWYgX19JQVJfVjg1MEVTX0Z4M19fDQotICAgICAgICB7DQotICAgICAgICAgICAgVE0wQ01QMCA9ICggKCAoIGNvbmZpZ0NQVV9DTE9DS19IWiAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApIC8gMiApIC0gMSApOyAvKiBkaXZpZGVkIGJ5IDIgYmVjYXVzZSBwZXJpcGhlcmFscyBvbmx5IHJ1biBhdCBDUFVfQ0xPQ0svMiAqLw0KLSAgICAgICAgfQ0KLSAgICAjZWxzZQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIFRNMENNUDAgPSAoIGNvbmZpZ0NQVV9DTE9DS19IWiAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApOw0KLSAgICAgICAgfQ0KLSAgICAjZW5kaWYNCisJI2lmZGVmIF9fSUFSX1Y4NTBFU19GeDNfXw0KKwl7DQorCQlUTTBDTVAwICAgPSAoKChjb25maWdDUFVfQ0xPQ0tfSFogLyBjb25maWdUSUNLX1JBVEVfSFopIC8gMiktMSk7ICAgIC8qIGRpdmlkZWQgYnkgMiBiZWNhdXNlIHBlcmlwaGVyYWxzIG9ubHkgcnVuIGF0IENQVV9DTE9DSy8yICovDQorCX0NCisJI2Vsc2UNCisJew0KKwkJVE0wQ01QMCAgID0gKGNvbmZpZ0NQVV9DTE9DS19IWiAvIGNvbmZpZ1RJQ0tfUkFURV9IWik7CQ0KKwl9DQorCSNlbmRpZg0KIA0KLSAgICBUTTBFUUlDMCAmPSAweEY4Ow0KLSAgICBUTTBDVEwwID0gMHgwMDsNCi0gICAgVE0wRVFJRjAgPSAwOyAvKiBjbGVhciBJTlRUTTBFUTAgaW50ZXJydXB0IGZsYWcgKi8NCi0gICAgVE0wRVFNSzAgPSAwOyAvKiBJTlRUTTBFUTAgaW50ZXJydXB0IGVuYWJsZSAqLw0KLSAgICBUTTBDRSA9IDE7ICAgIC8qIFRNTTAgb3BlcmF0aW9uIGVuYWJsZSAqLw0KKwlUTTBFUUlDMCAmPSAweEY4Ow0KKwlUTTBDVEwwICAgPSAweDAwOw0KKwlUTTBFUUlGMCA9ICAwOwkvKiBjbGVhciBJTlRUTTBFUTAgaW50ZXJydXB0IGZsYWcgKi8NCisJVE0wRVFNSzAgPSAgMDsJLyogSU5UVE0wRVEwIGludGVycnVwdCBlbmFibGUgKi8NCisJVE0wQ0UgPSAgICAgMTsJLyogVE1NMCBvcGVyYXRpb24gZW5hYmxlICovDQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL0lBUi9WODUwRVMvcG9ydG1hY3JvLmggYi9wb3J0YWJsZS9JQVIvVjg1MEVTL3BvcnRtYWNyby5oCmluZGV4IGYwYTU4NzEuLjBiNjYxZTggMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL0lBUi9WODUwRVMvcG9ydG1hY3JvLmgKKysrIGIvcG9ydGFibGUvSUFSL1Y4NTBFUy9wb3J0bWFjcm8uaApAQCAtMjYsMTEgKzI2LDExIEBACiAgKi8NCiANCiAjaWZuZGVmIFBPUlRNQUNST19IDQotICAgICNkZWZpbmUgUE9SVE1BQ1JPX0gNCisjZGVmaW5lIFBPUlRNQUNST19IDQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgZXh0ZXJuICJDIiB7DQotICAgICNlbmRpZg0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgKiBQb3J0IHNwZWNpZmljIGRlZmluaXRpb25zLg0KQEAgLTQzLDkyICs0Myw5MyBAQAogICovDQogDQogLyogVHlwZSBkZWZpbml0aW9ucy4gKi8NCi0gICAgI2RlZmluZSBwb3J0Q0hBUiAgICAgICAgICBjaGFyDQotICAgICNkZWZpbmUgcG9ydEZMT0FUICAgICAgICAgZmxvYXQNCi0gICAgI2RlZmluZSBwb3J0RE9VQkxFICAgICAgICBkb3VibGUNCi0gICAgI2RlZmluZSBwb3J0TE9ORyAgICAgICAgICBsb25nDQotICAgICNkZWZpbmUgcG9ydFNIT1JUICAgICAgICAgc2hvcnQNCi0gICAgI2RlZmluZSBwb3J0U1RBQ0tfVFlQRSAgICB1bnNpZ25lZCBpbnQNCi0gICAgI2RlZmluZSBwb3J0QkFTRV9UWVBFICAgICBpbnQNCisjZGVmaW5lIHBvcnRDSEFSICAgICAgICBjaGFyDQorI2RlZmluZSBwb3J0RkxPQVQgICAgICAgZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUgICAgICBkb3VibGUNCisjZGVmaW5lIHBvcnRMT05HICAgICAgICBsb25nDQorI2RlZmluZSBwb3J0U0hPUlQgICAgICAgc2hvcnQNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFICB1bnNpZ25lZCBpbnQNCisjZGVmaW5lIHBvcnRCQVNFX1RZUEUgICBpbnQNCiANCi0gICAgdHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSAgIFN0YWNrVHlwZV90Ow0KLSAgICB0eXBlZGVmIGxvbmcgICAgICAgICAgICAgQmFzZVR5cGVfdDsNCi0gICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nICAgIFVCYXNlVHlwZV90Ow0KK3R5cGVkZWYgcG9ydFNUQUNLX1RZUEUgU3RhY2tUeXBlX3Q7DQordHlwZWRlZiBsb25nIEJhc2VUeXBlX3Q7DQordHlwZWRlZiB1bnNpZ25lZCBsb25nIFVCYXNlVHlwZV90Ow0KIA0KIA0KLSAgICAjaWYgKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KLSAgICAgICAgdHlwZWRlZiB1aW50MTZfdCAgICAgVGlja1R5cGVfdDsNCi0gICAgICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmYNCi0gICAgI2Vsc2UNCi0gICAgICAgIHR5cGVkZWYgdWludDMyX3QgICAgIFRpY2tUeXBlX3Q7DQotICAgICAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQotICAgICNlbmRpZg0KKyNpZiAoY29uZmlnVVNFXzE2X0JJVF9USUNLUz09MSkNCisJdHlwZWRlZiB1aW50MTZfdCBUaWNrVHlwZV90Ow0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQorI2Vsc2UNCisJdHlwZWRlZiB1aW50MzJfdCBUaWNrVHlwZV90Ow0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQorI2VuZGlmDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogSW50ZXJydXB0IGNvbnRyb2wgbWFjcm9zLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAgICBfX2FzbSggIkRJIiApDQotICAgICNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkgICAgIF9fYXNtKCAiRUkiICkNCisjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSBfX2FzbSAoICJESSIgKQ0KKyNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkJIF9fYXNtICggIkVJIiApDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogQ3JpdGljYWwgc2VjdGlvbiBjb250cm9sIG1hY3Jvcy4gKi8NCi0gICAgI2RlZmluZSBwb3J0Tk9fQ1JJVElDQUxfU0VDVElPTl9ORVNUSU5HICAgICggKCBVQmFzZVR5cGVfdCApIDAgKQ0KKyNkZWZpbmUgcG9ydE5PX0NSSVRJQ0FMX1NFQ1RJT05fTkVTVElORwkJKCAoIFVCYXNlVHlwZV90ICkgMCApDQogDQotICAgICNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGV4dGVybiB2b2xhdGlsZSAvKnVpbnQxNl90Ki8gcG9ydFNUQUNLX1RZUEUgdXNDcml0aWNhbE5lc3Rpbmc7ICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAvKiBOb3cgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgdWxDcml0aWNhbE5lc3RpbmcgY2FuIGJlIGFjY2Vzc2VkICovICAgICAgXA0KLSAgICAgICAgLyogZGlyZWN0bHkuICBJbmNyZW1lbnQgdWxDcml0aWNhbE5lc3RpbmcgdG8ga2VlcCBhIGNvdW50IG9mIGhvdyBtYW55ICovIFwNCi0gICAgICAgIC8qIHRpbWVzIHBvcnRFTlRFUl9DUklUSUNBTCgpIGhhcyBiZWVuIGNhbGxlZC4gKi8gICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICB1c0NyaXRpY2FsTmVzdGluZysrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB9DQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKQkJCQkJCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorZXh0ZXJuIHZvbGF0aWxlIC8qdWludDE2X3QqLyBwb3J0U1RBQ0tfVFlQRSB1c0NyaXRpY2FsTmVzdGluZzsJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwlwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7CQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBOb3cgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgdWxDcml0aWNhbE5lc3RpbmcgY2FuIGJlIGFjY2Vzc2VkICovCQkJCVwNCisJLyogZGlyZWN0bHkuICBJbmNyZW1lbnQgdWxDcml0aWNhbE5lc3RpbmcgdG8ga2VlcCBhIGNvdW50IG9mIGhvdyBtYW55ICovCQlcDQorCS8qIHRpbWVzIHBvcnRFTlRFUl9DUklUSUNBTCgpIGhhcyBiZWVuIGNhbGxlZC4gKi8JCQkJCQkJCVwNCisJdXNDcml0aWNhbE5lc3RpbmcrKzsJCQkJCQkJCQkJCQkJCQlcDQorfQ0KIA0KLSAgICAjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBleHRlcm4gdm9sYXRpbGUgLyp1aW50MTZfdCovIHBvcnRTVEFDS19UWVBFIHVzQ3JpdGljYWxOZXN0aW5nOyAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGlmKCB1c0NyaXRpY2FsTmVzdGluZyA+IHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkcgKSAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIERlY3JlbWVudCB0aGUgbmVzdGluZyBjb3VudCBhcyB3ZSBhcmUgbGVhdmluZyBhIGNyaXRpY2FsIHNlY3Rpb24uICovIFwNCi0gICAgICAgICAgICB1c0NyaXRpY2FsTmVzdGluZy0tOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIElmIHRoZSBuZXN0aW5nIGxldmVsIGhhcyByZWFjaGVkIHplcm8gdGhlbiBpbnRlcnJ1cHRzIHNob3VsZCBiZSAqLyAgIFwNCi0gICAgICAgICAgICAvKiByZS1lbmFibGVkLiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgaWYoIHVzQ3JpdGljYWxOZXN0aW5nID09IHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkcgKSAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgfQ0KKyNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKQkJCQkJCQkJCQkJCQkJCVwNCit7CQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KK2V4dGVybiB2b2xhdGlsZSAvKnVpbnQxNl90Ki8gcG9ydFNUQUNLX1RZUEUgdXNDcml0aWNhbE5lc3Rpbmc7CQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJaWYoIHVzQ3JpdGljYWxOZXN0aW5nID4gcG9ydE5PX0NSSVRJQ0FMX1NFQ1RJT05fTkVTVElORyApCQkJCQkJXA0KKwl7CQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkvKiBEZWNyZW1lbnQgdGhlIG5lc3RpbmcgY291bnQgYXMgd2UgYXJlIGxlYXZpbmcgYSBjcml0aWNhbCBzZWN0aW9uLiAqLwkJXA0KKwkJdXNDcml0aWNhbE5lc3RpbmctLTsJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkvKiBJZiB0aGUgbmVzdGluZyBsZXZlbCBoYXMgcmVhY2hlZCB6ZXJvIHRoZW4gaW50ZXJydXB0cyBzaG91bGQgYmUgKi8JCVwNCisJCS8qIHJlLWVuYWJsZWQuICovCQkJCQkJCQkJCQkJCQkJXA0KKwkJaWYoIHVzQ3JpdGljYWxOZXN0aW5nID09IHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkcgKQkJCQkJXA0KKwkJewkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkJcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7CQkJCQkJCQkJCQkJXA0KKwkJfQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCX0JCQkJCQkJCQkJCQkJCQkJCQkJCVwNCit9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGFzayB1dGlsaXRpZXMuICovDQotICAgIGV4dGVybiB2b2lkIHZQb3J0WWllbGQoIHZvaWQgKTsNCi0gICAgZXh0ZXJuIHZvaWQgdlBvcnRTdGFydCggdm9pZCApOw0KLSAgICBleHRlcm4gdm9pZCBwb3J0U0FWRV9DT05URVhUKCB2b2lkICk7DQotICAgIGV4dGVybiB2b2lkIHBvcnRSRVNUT1JFX0NPTlRFWFQoIHZvaWQgKTsNCi0gICAgI2RlZmluZSBwb3J0WUlFTEQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXNtKCAidHJhcCAwIiApDQotICAgICNkZWZpbmUgcG9ydE5PUCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2FzbSggIk5PUCIgKQ0KLSAgICBleHRlcm4gdm9pZCB2VGFza1N3aXRjaENvbnRleHQoIHZvaWQgKTsNCi0gICAgI2RlZmluZSBwb3J0WUlFTERfRlJPTV9JU1IoIHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiApICAgIGlmKCB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4gKSB2VGFza1N3aXRjaENvbnRleHQoKQ0KK2V4dGVybiB2b2lkIHZQb3J0WWllbGQoIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2UG9ydFN0YXJ0KCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgcG9ydFNBVkVfQ09OVEVYVCggdm9pZCApOw0KK2V4dGVybiB2b2lkIHBvcnRSRVNUT1JFX0NPTlRFWFQoIHZvaWQgKTsNCisjZGVmaW5lIHBvcnRZSUVMRCgpCV9fYXNtICggInRyYXAgMCIgKQ0KKyNkZWZpbmUgcG9ydE5PUCgpCV9fYXNtICggIk5PUCIgKQ0KK2V4dGVybiB2b2lkIHZUYXNrU3dpdGNoQ29udGV4dCggdm9pZCApOw0KKyNkZWZpbmUgcG9ydFlJRUxEX0ZST01fSVNSKCB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4gKSBpZiggeEhpZ2hlclByaW9yaXR5VGFza1dva2VuICkgdlRhc2tTd2l0Y2hDb250ZXh0KCkNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBIYXJkd3dhcmUgc3BlY2lmaWNzLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVCAgICA0DQotICAgICNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSCAgICAgICggLTEgKQ0KLSAgICAjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUyAgICAoICggVGlja1R5cGVfdCApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UCTQNCisjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEgJKCAtMSApDQorI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMJKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBUYXNrIGZ1bmN0aW9uIG1hY3JvcyBhcyBkZXNjcmliZWQgb24gdGhlIEZyZWVSVE9TLm9yZyBXRUIgc2l0ZS4gKi8NCi0gICAgI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQotICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgICAgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCiANCiANCi0gICAgI2lmZGVmIF9fY3BsdXNwbHVzDQotICAgICAgICB9DQotICAgICNlbmRpZg0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCiANCiAjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8NCisNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9NUExBQi9QSUMxOEYvcG9ydC5jIGIvcG9ydGFibGUvTVBMQUIvUElDMThGL3BvcnQuYwppbmRleCBmODVmNWI3Li42Zjc2ZDQ2IDEwMDY0NAotLS0gYS9wb3J0YWJsZS9NUExBQi9QSUMxOEYvcG9ydC5jCisrKyBiL3BvcnRhYmxlL01QTEFCL1BJQzE4Ri9wb3J0LmMKQEAgLTI1LDM0ICsyNSwzNCBAQAogICogMSB0YWIgPT0gNCBzcGFjZXMhDQogICovDQogDQotLyoNCi0gKiBDaGFuZ2VzIGJldHdlZW4gVjEuMi40IGFuZCBWMS4yLjUNCi0gKg0KLSArIEludHJvZHVjZWQgcG9ydEdMT0JBTF9JTlRFUlJVUFRfRkxBRyBkZWZpbml0aW9uIHRvIHRlc3QgdGhlIGdsb2JhbA0KLSArICAgIGludGVycnVwdCBmbGFnIHNldHRpbmcuICBVc2luZyB0aGUgdHdvIGJpdHMgZGVmaW5lZCB3aXRoaW4NCi0gKyAgICBwb3J0SU5JVEFMX0lOVEVSUlVQVF9TVEFURSB3YXMgY2F1c2luZyB0aGUgdyByZWdpc3RlciB0byBnZXQgY2xvYmJlcmVkDQotICsgICAgYmVmb3JlIHRoZSB0ZXN0IHdhcyBwZXJmb3JtZWQuDQotICsNCi0gKyBDaGFuZ2VzIGZyb20gVjEuMi41DQotICsNCi0gKyBTZXQgdGhlIGludGVycnVwdCB2ZWN0b3IgYWRkcmVzcyB0byAweDA4LiAgUHJldmlvdXNseSBpdCB3YXMgYXQgdGhlDQotICsgICAgaW5jb3JyZWN0IGFkZHJlc3MgZm9yIGNvbXBhdGliaWxpdHkgbW9kZSBvZiAweDE4Lg0KLSArDQotICsgQ2hhbmdlcyBmcm9tIFYyLjEuMQ0KLSArDQotICsgUENMQVRVIGFuZCBQQ0xBVEggYXJlIG5vdyBzYXZlZCBhcyBwYXJ0IG9mIHRoZSBjb250ZXh0LiAgVGhpcyBhbGxvd3MNCi0gKyAgICBmdW5jdGlvbiBwb2ludGVycyB0byBiZSB1c2VkIHdpdGhpbiB0YXNrcy4gIFRoYW5rcyB0byBKYXZpZXIgRXNwZWNoZQ0KLSArICAgIGZvciB0aGUgZW5oYW5jZW1lbnQuDQotICsNCi0gKyBDaGFuZ2VzIGZyb20gVjIuMy4xDQotICsNCi0gKyBUQUJMQVQgaXMgbm93IHNhdmVkIGFzIHBhcnQgb2YgdGhlIHRhc2sgY29udGV4dC4NCi0gKw0KLSArIENoYW5nZXMgZnJvbSBWMy4yLjANCi0gKw0KLSArIFRCTFBUUlUgaXMgbm93IGluaXRpYWxpc2VkIHRvIHplcm8gYXMgdGhlIE1QTEFCIGNvbXBpbGVyIGV4cGVjdHMgdGhpcw0KLSArICAgIHZhbHVlIGFuZCBkb2VzIG5vdCB3cml0ZSB0byB0aGUgcmVnaXN0ZXIuDQotICovDQorLyogDQorQ2hhbmdlcyBiZXR3ZWVuIFYxLjIuNCBhbmQgVjEuMi41DQorDQorCSsgSW50cm9kdWNlZCBwb3J0R0xPQkFMX0lOVEVSUlVQVF9GTEFHIGRlZmluaXRpb24gdG8gdGVzdCB0aGUgZ2xvYmFsIA0KKwkgIGludGVycnVwdCBmbGFnIHNldHRpbmcuICBVc2luZyB0aGUgdHdvIGJpdHMgZGVmaW5lZCB3aXRoaW4NCisJICBwb3J0SU5JVEFMX0lOVEVSUlVQVF9TVEFURSB3YXMgY2F1c2luZyB0aGUgdyByZWdpc3RlciB0byBnZXQgY2xvYmJlcmVkDQorCSAgYmVmb3JlIHRoZSB0ZXN0IHdhcyBwZXJmb3JtZWQuDQorDQorQ2hhbmdlcyBmcm9tIFYxLjIuNQ0KKw0KKwkrIFNldCB0aGUgaW50ZXJydXB0IHZlY3RvciBhZGRyZXNzIHRvIDB4MDguICBQcmV2aW91c2x5IGl0IHdhcyBhdCB0aGUNCisJICBpbmNvcnJlY3QgYWRkcmVzcyBmb3IgY29tcGF0aWJpbGl0eSBtb2RlIG9mIDB4MTguDQorDQorQ2hhbmdlcyBmcm9tIFYyLjEuMQ0KKw0KKwkrIFBDTEFUVSBhbmQgUENMQVRIIGFyZSBub3cgc2F2ZWQgYXMgcGFydCBvZiB0aGUgY29udGV4dC4gIFRoaXMgYWxsb3dzDQorCSAgZnVuY3Rpb24gcG9pbnRlcnMgdG8gYmUgdXNlZCB3aXRoaW4gdGFza3MuICBUaGFua3MgdG8gSmF2aWVyIEVzcGVjaGUNCisJICBmb3IgdGhlIGVuaGFuY2VtZW50LiANCisNCitDaGFuZ2VzIGZyb20gVjIuMy4xDQorDQorCSsgVEFCTEFUIGlzIG5vdyBzYXZlZCBhcyBwYXJ0IG9mIHRoZSB0YXNrIGNvbnRleHQuDQorCQ0KK0NoYW5nZXMgZnJvbSBWMy4yLjANCisNCisJKyBUQkxQVFJVIGlzIG5vdyBpbml0aWFsaXNlZCB0byB6ZXJvIGFzIHRoZSBNUExBQiBjb21waWxlciBleHBlY3RzIHRoaXMNCisJICB2YWx1ZSBhbmQgZG9lcyBub3Qgd3JpdGUgdG8gdGhlIHJlZ2lzdGVyLg0KKyovDQogDQogLyogU2NoZWR1bGVyIGluY2x1ZGUgZmlsZXMuICovDQogI2luY2x1ZGUgIkZyZWVSVE9TLmgiDQpAQCAtNjIsMzcgKzYyLDM3IEBACiAjaW5jbHVkZSAidGltZXJzLmgiDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLSogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFibGUuaCBmb3IgdGhlIFBJQyBwb3J0Lg0KLSotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgUElDIHBvcnQuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBIYXJkd2FyZSBzZXR1cCBmb3IgdGljay4gKi8NCi0jZGVmaW5lIHBvcnRUSU1FUl9GT1NDX1NDQUxFICAgICAgICAgICAgICAgICggKCB1aW50MzJfdCApIDQgKQ0KKyNkZWZpbmUgcG9ydFRJTUVSX0ZPU0NfU0NBTEUJCQkoICggdWludDMyX3QgKSA0ICkNCiANCiAvKiBJbml0aWFsIGludGVycnVwdCBlbmFibGUgc3RhdGUgZm9yIG5ld2x5IGNyZWF0ZWQgdGFza3MuICBUaGlzIHZhbHVlIGlzDQotICogY29waWVkIGludG8gSU5UQ09OIHdoZW4gYSB0YXNrIHN3aXRjaGVzIGluIGZvciB0aGUgZmlyc3QgdGltZS4gKi8NCi0jZGVmaW5lIHBvcnRJTklUQUxfSU5URVJSVVBUX1NUQVRFICAgICAgICAgIDB4YzANCitjb3BpZWQgaW50byBJTlRDT04gd2hlbiBhIHRhc2sgc3dpdGNoZXMgaW4gZm9yIHRoZSBmaXJzdCB0aW1lLiAqLw0KKyNkZWZpbmUgcG9ydElOSVRBTF9JTlRFUlJVUFRfU1RBVEUJCQkweGMwDQogDQogLyogSnVzdCB0aGUgYml0IHdpdGhpbiBJTlRDT04gZm9yIHRoZSBnbG9iYWwgaW50ZXJydXB0IGZsYWcuICovDQotI2RlZmluZSBwb3J0R0xPQkFMX0lOVEVSUlVQVF9GTEFHICAgICAgICAgICAweDgwDQorI2RlZmluZSBwb3J0R0xPQkFMX0lOVEVSUlVQVF9GTEFHCQkJMHg4MA0KIA0KLS8qIENvbnN0YW50IHVzZWQgZm9yIGNvbnRleHQgc3dpdGNoIG1hY3JvIHdoZW4gd2UgcmVxdWlyZSB0aGUgaW50ZXJydXB0DQotICogZW5hYmxlIHN0YXRlIHRvIGJlIHVuY2hhbmdlZCB3aGVuIHRoZSBpbnRlcnJ1cHRlZCB0YXNrIGlzIHN3aXRjaGVkIGJhY2sgaW4uICovDQotI2RlZmluZSBwb3J0SU5URVJSVVBUU19VTkNIQU5HRUQgICAgICAgICAgICAweDAwDQorLyogQ29uc3RhbnQgdXNlZCBmb3IgY29udGV4dCBzd2l0Y2ggbWFjcm8gd2hlbiB3ZSByZXF1aXJlIHRoZSBpbnRlcnJ1cHQgDQorZW5hYmxlIHN0YXRlIHRvIGJlIHVuY2hhbmdlZCB3aGVuIHRoZSBpbnRlcnJ1cHRlZCB0YXNrIGlzIHN3aXRjaGVkIGJhY2sgaW4uICovDQorI2RlZmluZSBwb3J0SU5URVJSVVBUU19VTkNIQU5HRUQJCQkweDAwDQogDQogLyogU29tZSBtZW1vcnkgYXJlYXMgZ2V0IHNhdmVkIGFzIHBhcnQgb2YgdGhlIHRhc2sgY29udGV4dC4gIFRoZXNlIG1lbW9yeQ0KLSAqIGFyZWEncyBnZXQgdXNlZCBieSB0aGUgY29tcGlsZXIgZm9yIHRlbXBvcmFyeSBzdG9yYWdlLCBlc3BlY2lhbGx5IHdoZW4NCi0gKiBwZXJmb3JtaW5nIG1hdGhlbWF0aWNhbCBvcGVyYXRpb25zLCBvciB3aGVuIHVzaW5nIDMyYml0IGRhdGEgdHlwZXMuICBUaGlzDQotICogY29uc3RhbnQgZGVmaW5lcyB0aGUgc2l6ZSBvZiBtZW1vcnkgYXJlYSB3aGljaCBtdXN0IGJlIHNhdmVkLiAqLw0KLSNkZWZpbmUgcG9ydENPTVBJTEVSX01BTkFHRURfTUVNT1JZX1NJWkUgICAgKCAoIHVpbnQ4X3QgKSAweDEzICkNCithcmVhJ3MgZ2V0IHVzZWQgYnkgdGhlIGNvbXBpbGVyIGZvciB0ZW1wb3Jhcnkgc3RvcmFnZSwgZXNwZWNpYWxseSB3aGVuIA0KK3BlcmZvcm1pbmcgbWF0aGVtYXRpY2FsIG9wZXJhdGlvbnMsIG9yIHdoZW4gdXNpbmcgMzJiaXQgZGF0YSB0eXBlcy4gIFRoaXMNCitjb25zdGFudCBkZWZpbmVzIHRoZSBzaXplIG9mIG1lbW9yeSBhcmVhIHdoaWNoIG11c3QgYmUgc2F2ZWQuICovDQorI2RlZmluZSBwb3J0Q09NUElMRVJfTUFOQUdFRF9NRU1PUllfU0laRQkoICggdWludDhfdCApIDB4MTMgKQ0KIA0KIC8qIFdlIHJlcXVpcmUgdGhlIGFkZHJlc3Mgb2YgdGhlIHB4Q3VycmVudFRDQiB2YXJpYWJsZSwgYnV0IGRvbid0IHdhbnQgdG8ga25vdw0KLSAqIGFueSBkZXRhaWxzIG9mIGl0cyB0eXBlLiAqLw0KK2FueSBkZXRhaWxzIG9mIGl0cyB0eXBlLiAqLw0KIHR5cGVkZWYgdm9pZCBUQ0JfdDsNCiBleHRlcm4gdm9sYXRpbGUgVENCX3QgKiB2b2xhdGlsZSBweEN1cnJlbnRUQ0I7DQogDQogLyogSU8gcG9ydCBjb25zdGFudHMuICovDQotI2RlZmluZSBwb3J0QklUX1NFVCAgICAgICggKCB1aW50OF90ICkgMSApDQotI2RlZmluZSBwb3J0QklUX0NMRUFSICAgICggKCB1aW50OF90ICkgMCApDQorI2RlZmluZSBwb3J0QklUX1NFVAkJKCAoIHVpbnQ4X3QgKSAxICkNCisjZGVmaW5lIHBvcnRCSVRfQ0xFQVIJKCAoIHVpbnQ4X3QgKSAwICkNCiANCiAvKg0KICAqIFRoZSBzZXJpYWwgcG9ydCBJU1IncyBhcmUgZGVmaW5lZCBpbiBzZXJpYWwuYywgYnV0IGFyZSBjYWxsZWQgZnJvbSBwb3J0YWJsZQ0KQEAgLTEwNiw3ICsxMDYsNyBAQAogICovDQogc3RhdGljIHZvaWQgcHJ2U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApOw0KIA0KLS8qDQorLyogDQogICogSVNSIHRvIG1haW50YWluIHRoZSB0aWNrLCBhbmQgcGVyZm9ybSB0aWNrIGNvbnRleHQgc3dpdGNoZXMgaWYgdGhlDQogICogcHJlZW1wdGl2ZSBzY2hlZHVsZXIgaXMgYmVpbmcgdXNlZC4NCiAgKi8NCkBAIC0xMTgsMTMgKzExOCwxMyBAQAogICovDQogc3RhdGljIHZvaWQgcHJ2TG93SW50ZXJydXB0KCB2b2lkICk7DQogDQotLyoNCisvKiANCiAgKiBNYWNybyB0aGF0IHB1c2hlcyBhbGwgdGhlIHJlZ2lzdGVycyB0aGF0IG1ha2UgdXAgdGhlIGNvbnRleHQgb2YgYSB0YXNrIG9udG8NCiAgKiB0aGUgc3RhY2ssIHRoZW4gc2F2ZXMgdGhlIG5ldyB0b3Agb2Ygc3RhY2sgaW50byB0aGUgVENCLg0KLSAqDQotICogSWYgdGhpcyBpcyBjYWxsZWQgZnJvbSBhbiBJU1IgdGhlbiB0aGUgaW50ZXJydXB0IGVuYWJsZSBiaXRzIG11c3QgaGF2ZSBiZWVuDQorICogDQorICogSWYgdGhpcyBpcyBjYWxsZWQgZnJvbSBhbiBJU1IgdGhlbiB0aGUgaW50ZXJydXB0IGVuYWJsZSBiaXRzIG11c3QgaGF2ZSBiZWVuIA0KICAqIHNldCBmb3IgdGhlIElTUiB0byBldmVyIGdldCBjYWxsZWQuICBUaGVyZWZvcmUgd2Ugd2FudCB0byBzYXZlIHRoZSBJTlRDT04NCi0gKiByZWdpc3RlciB3aXRoIHRoZSBlbmFibGUgYml0cyBmb3JjZWQgdG8gYmUgc2V0IC0gYW5kIHVjRm9yY2VkSW50ZXJydXB0RmxhZ3MNCisgKiByZWdpc3RlciB3aXRoIHRoZSBlbmFibGUgYml0cyBmb3JjZWQgdG8gYmUgc2V0IC0gYW5kIHVjRm9yY2VkSW50ZXJydXB0RmxhZ3MgDQogICogbXVzdCBjb250YWluIHRoZXNlIGJpdCBzZXR0aW5ncy4gIFRoaXMgbWVhbnMgdGhlIGludGVycnVwdHMgd2lsbCBhZ2FpbiBiZQ0KICAqIGVuYWJsZWQgd2hlbiB0aGUgaW50ZXJydXB0ZWQgdGFzayBpcyBzd2l0Y2hlZCBiYWNrIGluLg0KICAqDQpAQCAtMTM3LDM2MiArMTM3LDM2MCBAQAogICogc3RvcmFnZSBkdXJpbmcgbWF0aCBhbmQgb3RoZXIgY29tcHV0YXRpb25zLiAgVGhpcyBpcyBlc3BlY2lhbGx5IHRydWUgaWYNCiAgKiAzMmJpdCBkYXRhIHR5cGVzIGFyZSB1dGlsaXNlZCAoYXMgdGhleSBhcmUgYnkgdGhlIHNjaGVkdWxlcikuICBUaGUgLnRtcGRhdGENCiAgKiBhbmQgTUFUSF9EQVRBIHNlY3Rpb25zIGhhdmUgdG8gYmUgc3RvcmVkIGluIHRoZXJlIGVudGlyZXR5IGFzIHBhcnQgb2YgYSB0YXNrDQotICogY29udGV4dC4gIFRoaXMgbWFjcm8gc3RvcmVzIGZyb20gZGF0YSBhZGRyZXNzIDB4MDAgdG8NCi0gKiBwb3J0Q09NUElMRVJfTUFOQUdFRF9NRU1PUllfU0laRS4gIFRoaXMgaXMgc3VmZmljaWVudCBmb3IgdGhlIGRlbW8NCi0gKiBhcHBsaWNhdGlvbnMgYnV0IHlvdSBzaG91bGQgY2hlY2sgdGhlIG1hcCBmaWxlIGZvciB5b3VyIHByb2plY3QgdG8gZW5zdXJlDQotICogdGhpcyBpcyBzdWZmaWNpZW50IGZvciB5b3VyIG5lZWRzLiAgSXQgaXMgbm90IGNsZWFyIHdoZXRoZXIgdGhpcyBzaXplIGlzDQorICogY29udGV4dC4gIFRoaXMgbWFjcm8gc3RvcmVzIGZyb20gZGF0YSBhZGRyZXNzIDB4MDAgdG8gDQorICogcG9ydENPTVBJTEVSX01BTkFHRURfTUVNT1JZX1NJWkUuICBUaGlzIGlzIHN1ZmZpY2llbnQgZm9yIHRoZSBkZW1vIA0KKyAqIGFwcGxpY2F0aW9ucyBidXQgeW91IHNob3VsZCBjaGVjayB0aGUgbWFwIGZpbGUgZm9yIHlvdXIgcHJvamVjdCB0byBlbnN1cmUgDQorICogdGhpcyBpcyBzdWZmaWNpZW50IGZvciB5b3VyIG5lZWRzLiAgSXQgaXMgbm90IGNsZWFyIHdoZXRoZXIgdGhpcyBzaXplIGlzIA0KICAqIGZpeGVkIGZvciBhbGwgY29tcGlsYXRpb25zIG9yIGhhcyB0aGUgcG90ZW50aWFsIHRvIGJlIHByb2dyYW0gc3BlY2lmaWMuDQogICovDQotI2RlZmluZSBwb3J0U0FWRV9DT05URVhUKCB1Y0ZvcmNlZEludGVycnVwdEZsYWdzICkgXA0KLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIF9hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAvKiBTYXZlIHRoZSBzdGF0dXMgYW5kIFdSRUcgcmVnaXN0ZXJzIGZpcnN0LCBhcyB0aGVzZSB3aWxsIGdldCBtb2RpZmllZCBcDQotICAgICAgICAgKiBieSB0aGUgb3BlcmF0aW9ucyBiZWxvdy4gKi8gXA0KLSAgICAgICAgTU9WRkYgV1JFRywgUFJFSU5DMSAgICAgICAgICAgIFwNCi0gICAgICAgIE1PVkZGIFNUQVRVUywgUFJFSU5DMSAgICAgICAgICBcDQotICAgICAgICAvKiBTYXZlIHRoZSBJTlRDT04gcmVnaXN0ZXIgd2l0aCB0aGUgYXBwcm9wcmlhdGUgYml0cyBmb3JjZWQgaWYgXA0KLSAgICAgICAgICogbmVjZXNzYXJ5IC0gYXMgZGVzY3JpYmVkIGFib3ZlLiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgSU5UQ09OLCBXUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgSU9STFcgdWNGb3JjZWRJbnRlcnJ1cHRGbGFncyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgV1JFRywgUFJFSU5DMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgX2VuZGFzbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgX2FzbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgLyogU3RvcmUgdGhlIG5lY2Vzc2FyeSByZWdpc3RlcnMgdG8gdGhlIHN0YWNrLiAqLyAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgQlNSLCBQUkVJTkMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgRlNSMkwsIFBSRUlOQzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgRlNSMkgsIFBSRUlOQzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgRlNSMEwsIFBSRUlOQzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgRlNSMEgsIFBSRUlOQzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgVEFCTEFULCBQUkVJTkMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgVEJMUFRSVSwgUFJFSU5DMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgVEJMUFRSSCwgUFJFSU5DMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgVEJMUFRSTCwgUFJFSU5DMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgUFJPREgsIFBSRUlOQzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgUFJPREwsIFBSRUlOQzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgUENMQVRVLCBQUkVJTkMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgUENMQVRILCBQUkVJTkMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgLyogU3RvcmUgdGhlIC50ZW1wZGF0YSBhbmQgTUFUSF9EQVRBIGFyZWFzIGFzIGRlc2NyaWJlZCBhYm92ZS4gKi8gXA0KLSAgICAgICAgQ0xSRiBGU1IwTCwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgQ0xSRiBGU1IwSCwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgUE9TVElOQzAsIFBSRUlOQzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgUE9TVElOQzAsIFBSRUlOQzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgUE9TVElOQzAsIFBSRUlOQzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgUE9TVElOQzAsIFBSRUlOQzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgUE9TVElOQzAsIFBSRUlOQzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgUE9TVElOQzAsIFBSRUlOQzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgUE9TVElOQzAsIFBSRUlOQzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgUE9TVElOQzAsIFBSRUlOQzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgUE9TVElOQzAsIFBSRUlOQzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgUE9TVElOQzAsIFBSRUlOQzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgUE9TVElOQzAsIFBSRUlOQzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgUE9TVElOQzAsIFBSRUlOQzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgUE9TVElOQzAsIFBSRUlOQzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgUE9TVElOQzAsIFBSRUlOQzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgUE9TVElOQzAsIFBSRUlOQzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgUE9TVElOQzAsIFBSRUlOQzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgUE9TVElOQzAsIFBSRUlOQzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgUE9TVElOQzAsIFBSRUlOQzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgUE9TVElOQzAsIFBSRUlOQzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgSU5ERjAsIFBSRUlOQzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgRlNSMEwsIFBSRUlOQzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgRlNSMEgsIFBSRUlOQzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgLyogU3RvcmUgdGhlIGhhcmR3YXJlIHN0YWNrIHBvaW50ZXIgaW4gYSB0ZW1wIHJlZ2lzdGVyIGJlZm9yZSB3ZSBcDQotICAgICAgICAgKiBtb2RpZnkgaXQuICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIE1PVkZGIFNUS1BUUiwgRlNSMEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgX2VuZGFzbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIFN0b3JlIGVhY2ggYWRkcmVzcyBmcm9tIHRoZSBoYXJkd2FyZSBzdGFjay4gKi8gXA0KLSAgICAgICAgd2hpbGUoIFNUS1BUUiA+ICggdWludDhfdCApIDAgKSAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICBfYXNtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIE1PVkZGIFRPU0wsIFBSRUlOQzEgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgTU9WRkYgVE9TSCwgUFJFSU5DMSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICBNT1ZGRiBUT1NVLCBQUkVJTkMxICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIFBPUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgX2VuZGFzbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBfYXNtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIFN0b3JlIHRoZSBudW1iZXIgb2YgYWRkcmVzc2VzIG9uIHRoZSBoYXJkd2FyZSBzdGFjayAoZnJvbSB0aGUgXA0KLSAgICAgICAgICogdGVtcG9yYXJ5IHJlZ2lzdGVyKS4gKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgRlNSMEwsIFBSRUlOQzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRiBQUkVJTkMxLCAxLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgX2VuZGFzbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgLyogU2F2ZSB0aGUgbmV3IHRvcCBvZiB0aGUgc29mdHdhcmUgc3RhY2sgaW4gdGhlIFRDQi4gKi8gXA0KLSAgICAgICAgX2FzbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgcHhDdXJyZW50VENCLCBGU1IwTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgcHhDdXJyZW50VENCICsgMSwgRlNSMEggICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgRlNSMUwsIFBPU1RJTkMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgRlNSMUgsIFBPU1RJTkMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgX2VuZGFzbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB9DQorI2RlZmluZQlwb3J0U0FWRV9DT05URVhUKCB1Y0ZvcmNlZEludGVycnVwdEZsYWdzICkJCQkJCQkJCVwNCit7CQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCV9hc20JCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkvKiBTYXZlIHRoZSBzdGF0dXMgYW5kIFdSRUcgcmVnaXN0ZXJzIGZpcnN0LCBhcyB0aGVzZSB3aWxsIGdldCBtb2RpZmllZAlcDQorCQlieSB0aGUgb3BlcmF0aW9ucyBiZWxvdy4gKi8JCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglXUkVHLCBQUkVJTkMxCQkJCQkJCQkJCQkJCVwNCisJCU1PVkZGICAgU1RBVFVTLCBQUkVJTkMxCQkJCQkJCQkJCQkJCVwNCisJCS8qIFNhdmUgdGhlIElOVENPTiByZWdpc3RlciB3aXRoIHRoZSBhcHByb3ByaWF0ZSBiaXRzIGZvcmNlZCBpZgkJCVwNCisJCW5lY2Vzc2FyeSAtIGFzIGRlc2NyaWJlZCBhYm92ZS4gKi8JCQkJCQkJCQkJXA0KKwkJTU9WRkYJSU5UQ09OLCBXUkVHCQkJCQkJCQkJCQkJCVwNCisJCUlPUkxXCXVjRm9yY2VkSW50ZXJydXB0RmxhZ3MJCQkJCQkJCQkJCVwNCisJCU1PVkZGCVdSRUcsIFBSRUlOQzEJCQkJCQkJCQkJCQkJXA0KKwlfZW5kYXNtCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwlwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7CQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJX2FzbQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCS8qIFN0b3JlIHRoZSBuZWNlc3NhcnkgcmVnaXN0ZXJzIHRvIHRoZSBzdGFjay4gKi8JCQkJCQlcDQorCQlNT1ZGRglCU1IsIFBSRUlOQzEJCQkJCQkJCQkJCQkJXA0KKwkJTU9WRkYJRlNSMkwsIFBSRUlOQzEJCQkJCQkJCQkJCQkJXA0KKwkJTU9WRkYJRlNSMkgsIFBSRUlOQzEJCQkJCQkJCQkJCQkJXA0KKwkJTU9WRkYJRlNSMEwsIFBSRUlOQzEJCQkJCQkJCQkJCQkJXA0KKwkJTU9WRkYJRlNSMEgsIFBSRUlOQzEJCQkJCQkJCQkJCQkJXA0KKwkJTU9WRkYJVEFCTEFULCBQUkVJTkMxCQkJCQkJCQkJCQkJCVwNCisJCU1PVkZGCVRCTFBUUlUsIFBSRUlOQzEJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglUQkxQVFJILCBQUkVJTkMxCQkJCQkJCQkJCQkJXA0KKwkJTU9WRkYJVEJMUFRSTCwgUFJFSU5DMQkJCQkJCQkJCQkJCVwNCisJCU1PVkZGCVBST0RILCBQUkVJTkMxCQkJCQkJCQkJCQkJCVwNCisJCU1PVkZGCVBST0RMLCBQUkVJTkMxCQkJCQkJCQkJCQkJCVwNCisJCU1PVkZGCVBDTEFUVSwgUFJFSU5DMQkJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQQ0xBVEgsIFBSRUlOQzEJCQkJCQkJCQkJCQkJXA0KKwkJLyogU3RvcmUgdGhlIC50ZW1wZGF0YSBhbmQgTUFUSF9EQVRBIGFyZWFzIGFzIGRlc2NyaWJlZCBhYm92ZS4gKi8JCVwNCisJCUNMUkYJRlNSMEwsIDAJCQkJCQkJCQkJCQkJCVwNCisJCUNMUkYJRlNSMEgsIDAJCQkJCQkJCQkJCQkJCVwNCisJCU1PVkZGCVBPU1RJTkMwLCBQUkVJTkMxCQkJCQkJCQkJCQkJXA0KKwkJTU9WRkYJUE9TVElOQzAsIFBSRUlOQzEJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUSU5DMCwgUFJFSU5DMQkJCQkJCQkJCQkJCVwNCisJCU1PVkZGCVBPU1RJTkMwLCBQUkVJTkMxCQkJCQkJCQkJCQkJXA0KKwkJTU9WRkYJUE9TVElOQzAsIFBSRUlOQzEJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUSU5DMCwgUFJFSU5DMQkJCQkJCQkJCQkJCVwNCisJCU1PVkZGCVBPU1RJTkMwLCBQUkVJTkMxCQkJCQkJCQkJCQkJXA0KKwkJTU9WRkYJUE9TVElOQzAsIFBSRUlOQzEJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUSU5DMCwgUFJFSU5DMQkJCQkJCQkJCQkJCVwNCisJCU1PVkZGCVBPU1RJTkMwLCBQUkVJTkMxCQkJCQkJCQkJCQkJXA0KKwkJTU9WRkYJUE9TVElOQzAsIFBSRUlOQzEJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUSU5DMCwgUFJFSU5DMQkJCQkJCQkJCQkJCVwNCisJCU1PVkZGCVBPU1RJTkMwLCBQUkVJTkMxCQkJCQkJCQkJCQkJXA0KKwkJTU9WRkYJUE9TVElOQzAsIFBSRUlOQzEJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUSU5DMCwgUFJFSU5DMQkJCQkJCQkJCQkJCVwNCisJCU1PVkZGCVBPU1RJTkMwLCBQUkVJTkMxCQkJCQkJCQkJCQkJXA0KKwkJTU9WRkYJUE9TVElOQzAsIFBSRUlOQzEJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUSU5DMCwgUFJFSU5DMQkJCQkJCQkJCQkJCVwNCisJCU1PVkZGCVBPU1RJTkMwLCBQUkVJTkMxCQkJCQkJCQkJCQkJXA0KKwkJTU9WRkYJSU5ERjAsIFBSRUlOQzEJCQkJCQkJCQkJCQkJXA0KKwkJTU9WRkYJRlNSMEwsIFBSRUlOQzEJCQkJCQkJCQkJCQkJXA0KKwkJTU9WRkYJRlNSMEgsIFBSRUlOQzEJCQkJCQkJCQkJCQkJXA0KKwkJLyogU3RvcmUgdGhlIGhhcmR3YXJlIHN0YWNrIHBvaW50ZXIgaW4gYSB0ZW1wIHJlZ2lzdGVyIGJlZm9yZSB3ZQkJXA0KKwkJbW9kaWZ5IGl0LiAqLwkJCQkJCQkJCQkJCQkJCVwNCisJCU1PVkZGCVNUS1BUUiwgRlNSMEwJCQkJCQkJCQkJCQkJXA0KKwlfZW5kYXNtCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJLyogU3RvcmUgZWFjaCBhZGRyZXNzIGZyb20gdGhlIGhhcmR3YXJlIHN0YWNrLiAqLwkJCQkJCVwNCisJCXdoaWxlKCBTVEtQVFIgPiAoIHVpbnQ4X3QgKSAwICkJCQkJCQkJCVwNCisJCXsJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkJX2FzbQkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCU1PVkZGCVRPU0wsIFBSRUlOQzEJCQkJCQkJCQkJCVwNCisJCQkJTU9WRkYJVE9TSCwgUFJFSU5DMQkJCQkJCQkJCQkJXA0KKwkJCQlNT1ZGRglUT1NVLCBQUkVJTkMxCQkJCQkJCQkJCQlcDQorCQkJCVBPUAkJCQkJCQkJCQkJCQkJCQlcDQorCQkJX2VuZGFzbQkJCQkJCQkJCQkJCQkJCQlcDQorCQl9CQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwlfYXNtCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJLyogU3RvcmUgdGhlIG51bWJlciBvZiBhZGRyZXNzZXMgb24gdGhlIGhhcmR3YXJlIHN0YWNrIChmcm9tIHRoZQkJXA0KKwkJdGVtcG9yYXJ5IHJlZ2lzdGVyKS4gKi8JCQkJCQkJCQkJCQkJXA0KKwkJTU9WRkYJRlNSMEwsIFBSRUlOQzEJCQkJCQkJCQkJCQkJXA0KKwkJTU9WRglQUkVJTkMxLCAxLCAwCQkJCQkJCQkJCQkJCVwNCisJX2VuZGFzbQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogU2F2ZSB0aGUgbmV3IHRvcCBvZiB0aGUgc29mdHdhcmUgc3RhY2sgaW4gdGhlIFRDQi4gKi8JCQkJCVwNCisJX2FzbQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCU1PVkZGCXB4Q3VycmVudFRDQiwgRlNSMEwJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglweEN1cnJlbnRUQ0IgKyAxLCBGU1IwSAkJCQkJCQkJCQkJXA0KKwkJTU9WRkYJRlNSMUwsIFBPU1RJTkMwCQkJCQkJCQkJCQkJCVwNCisJCU1PVkZGCUZTUjFILCBQT1NUSU5DMAkJCQkJCQkJCQkJCQlcDQorCV9lbmRhc20JCQkJCQkJCQkJCQkJCQkJCQlcDQorfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qDQogICogVGhpcyBpcyB0aGUgcmV2ZXJzZSBvZiBwb3J0U0FWRV9DT05URVhULiAgU2VlIHBvcnRTQVZFX0NPTlRFWFQgZm9yIG1vcmUNCiAgKiBkZXRhaWxzLg0KICAqLw0KLSNkZWZpbmUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBfYXNtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgLyogU2V0IEZTUjAgdG8gcG9pbnQgdG8gcHhDdXJyZW50VENCLT5weFRvcE9mU3RhY2suICovIFwNCi0gICAgICAgIE1PVkZGIHB4Q3VycmVudFRDQiwgRlNSMEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBNT1ZGRiBweEN1cnJlbnRUQ0IgKyAxLCBGU1IwSCAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIERlLXJlZmVyZW5jZSBGU1IwIHRvIHNldCB0aGUgYWRkcmVzcyBpdCBob2xkcyBpbnRvIEZTUjEuIFwNCi0gICAgICAgICAqIChpLmUuICooIHB4Q3VycmVudFRDQi0+cHhUb3BPZlN0YWNrICkgKS4gKi8gXA0KLSAgICAgICAgTU9WRkYgUE9TVElOQzAsIEZTUjFMICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBNT1ZGRiBQT1NUSU5DMCwgRlNSMUggICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgLyogSG93IG1hbnkgcmV0dXJuIGFkZHJlc3NlcyBhcmUgdGhlcmUgb24gdGhlIGhhcmR3YXJlIHN0YWNrPyAgRGlzY2FyZCBcDQotICAgICAgICAgKiB0aGUgZmlyc3QgYnl0ZSBhcyB3ZSBhcmUgcG9pbnRpbmcgdG8gdGhlIG5leHQgZnJlZSBzcGFjZS4gKi8gXA0KLSAgICAgICAgTU9WRkYgUE9TVERFQzEsIEZTUjBMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIE1PVkZGIFBPU1RERUMxLCBGU1IwTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBfZW5kYXNtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIEZpbGwgdGhlIGhhcmR3YXJlIHN0YWNrIGZyb20gb3VyIHNvZnR3YXJlIHN0YWNrLiAqLyAgICAgICAgICBcDQotICAgICAgICBTVEtQVFIgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHdoaWxlKCBTVEtQVFIgPCBGU1IwTCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIF9hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICBQVVNIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgTU9WRiBQT1NUREVDMSwgMCwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIE1PVldGIFRPU1UsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICBNT1ZGIFBPU1RERUMxLCAwLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgTU9WV0YgVE9TSCwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIE1PVkYgUE9TVERFQzEsIDAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICBNT1ZXRiBUT1NMLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgX2VuZGFzbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBfYXNtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgLyogUmVzdG9yZSB0aGUgLnRtcGRhdGEgYW5kIE1BVEhfREFUQSBtZW1vcnkuICovICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIE1PVkZGIFBPU1RERUMxLCBGU1IwSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBNT1ZGRiBQT1NUREVDMSwgRlNSMEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgUE9TVERFQzEsIFBPU1RERUMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIE1PVkZGIFBPU1RERUMxLCBQT1NUREVDMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBNT1ZGRiBQT1NUREVDMSwgUE9TVERFQzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgUE9TVERFQzEsIFBPU1RERUMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIE1PVkZGIFBPU1RERUMxLCBQT1NUREVDMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBNT1ZGRiBQT1NUREVDMSwgUE9TVERFQzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgUE9TVERFQzEsIFBPU1RERUMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIE1PVkZGIFBPU1RERUMxLCBQT1NUREVDMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBNT1ZGRiBQT1NUREVDMSwgUE9TVERFQzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgUE9TVERFQzEsIFBPU1RERUMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIE1PVkZGIFBPU1RERUMxLCBQT1NUREVDMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBNT1ZGRiBQT1NUREVDMSwgUE9TVERFQzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgUE9TVERFQzEsIFBPU1RERUMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIE1PVkZGIFBPU1RERUMxLCBQT1NUREVDMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBNT1ZGRiBQT1NUREVDMSwgUE9TVERFQzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgUE9TVERFQzEsIFBPU1RERUMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIE1PVkZGIFBPU1RERUMxLCBQT1NUREVDMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBNT1ZGRiBQT1NUREVDMSwgUE9TVERFQzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgUE9TVERFQzEsIFBPU1RERUMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIE1PVkZGIFBPU1RERUMxLCBJTkRGMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAvKiBSZXN0b3JlIHRoZSBvdGhlciByZWdpc3RlcnMgZm9ybWluZyB0aGUgdGFza3MgY29udGV4dC4gKi8gICAgXA0KLSAgICAgICAgTU9WRkYgUE9TVERFQzEsIFBDTEFUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIE1PVkZGIFBPU1RERUMxLCBQQ0xBVFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBNT1ZGRiBQT1NUREVDMSwgUFJPREwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgUE9TVERFQzEsIFBST0RIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIE1PVkZGIFBPU1RERUMxLCBUQkxQVFJMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBNT1ZGRiBQT1NUREVDMSwgVEJMUFRSSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgUE9TVERFQzEsIFRCTFBUUlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIE1PVkZGIFBPU1RERUMxLCBUQUJMQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBNT1ZGRiBQT1NUREVDMSwgRlNSMEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgUE9TVERFQzEsIEZTUjBMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIE1PVkZGIFBPU1RERUMxLCBGU1IySCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBNT1ZGRiBQT1NUREVDMSwgRlNSMkwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTU9WRkYgUE9TVERFQzEsIEJTUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIFRoZSBuZXh0IGJ5dGUgaXMgdGhlIElOVENPTiByZWdpc3Rlci4gIFJlYWQgdGhpcyBpbnRvIFdSRUcgYXMgc29tZSBcDQotICAgICAgICAgKiBtYW5pcHVsYXRpb24gaXMgcmVxdWlyZWQuICovIFwNCi0gICAgICAgIE1PVkZGIFBPU1RERUMxLCBXUkVHICAgICAgICAgICAgXA0KLSAgICAgICAgX2VuZGFzbSAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIEZyb20gdGhlIElOVENPTiByZWdpc3Rlciwgb25seSB0aGUgaW50ZXJydXB0IGVuYWJsZSBiaXRzIGZvcm0gcGFydCBcDQotICAgICAgICAgKiBvZiB0aGUgdGFza3MgY29udGV4dC4gIEl0IGlzIHBlcmZlY3RseSBsZWdpdGltYXRlIGZvciBhbm90aGVyIHRhc2sgdG8gXA0KLSAgICAgICAgICogaGF2ZSBtb2RpZmllZCBhbnkgb3RoZXIgYml0cy4gIFdlIHRoZXJlZm9yZSBvbmx5IHJlc3RvcmUgdGhlIHRvcCB0d28gYml0cy4gXA0KLSAgICAgICAgICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBpZiggV1JFRyAmcG9ydEdMT0JBTF9JTlRFUlJVUFRfRkxBRyApIFwNCi0gICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIF9hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgTU9WRkYgUE9TVERFQzEsIFNUQVRVUyAgICAgICAgICAgIFwNCi0gICAgICAgICAgICBNT1ZGRiBQT1NUREVDMSwgV1JFRyAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIFJldHVybiBlbmFibGluZyBpbnRlcnJ1cHRzLiAqLyBcDQotICAgICAgICAgICAgUkVURklFIDAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICBfZW5kYXNtICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIF9hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgTU9WRkYgUE9TVERFQzEsIFNUQVRVUyAgICAgICAgICAgIFwNCi0gICAgICAgICAgICBNT1ZGRiBQT1NUREVDMSwgV1JFRyAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIFJldHVybiB3aXRob3V0IGVmZmVjdGluZyBpbnRlcnJ1cHRzLiAgVGhlIGNvbnRleHQgbWF5IGhhdmUgXA0KLSAgICAgICAgICAgICAqIGJlZW4gc2F2ZWQgZnJvbSBhIGNyaXRpY2FsIHJlZ2lvbi4gKi8gXA0KLSAgICAgICAgICAgIFJFVFVSTiAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIF9lbmRhc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB9DQorI2RlZmluZSBwb3J0UkVTVE9SRV9DT05URVhUKCkJCQkJCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJX2FzbQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCS8qIFNldCBGU1IwIHRvIHBvaW50IHRvIHB4Q3VycmVudFRDQi0+cHhUb3BPZlN0YWNrLiAqLwkJCQkJXA0KKwkJTU9WRkYJcHhDdXJyZW50VENCLCBGU1IwTAkJCQkJCQkJCQkJCVwNCisJCU1PVkZGCXB4Q3VycmVudFRDQiArIDEsIEZTUjBICQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkvKiBEZS1yZWZlcmVuY2UgRlNSMCB0byBzZXQgdGhlIGFkZHJlc3MgaXQgaG9sZHMgaW50byBGU1IxLgkJCQlcDQorCQkoaS5lLiAqKCBweEN1cnJlbnRUQ0ItPnB4VG9wT2ZTdGFjayApICkuICovCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUSU5DMCwgRlNSMUwJCQkJCQkJCQkJCQkJXA0KKwkJTU9WRkYJUE9TVElOQzAsIEZTUjFICQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCS8qIEhvdyBtYW55IHJldHVybiBhZGRyZXNzZXMgYXJlIHRoZXJlIG9uIHRoZSBoYXJkd2FyZSBzdGFjaz8gIERpc2NhcmQJXA0KKwkJdGhlIGZpcnN0IGJ5dGUgYXMgd2UgYXJlIHBvaW50aW5nIHRvIHRoZSBuZXh0IGZyZWUgc3BhY2UuICovCQkJXA0KKwkJTU9WRkYJUE9TVERFQzEsIEZTUjBMCQkJCQkJCQkJCQkJCVwNCisJCU1PVkZGCVBPU1RERUMxLCBGU1IwTAkJCQkJCQkJCQkJCQlcDQorCV9lbmRhc20JCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIEZpbGwgdGhlIGhhcmR3YXJlIHN0YWNrIGZyb20gb3VyIHNvZnR3YXJlIHN0YWNrLiAqLwkJCQkJCVwNCisJU1RLUFRSID0gMDsJCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJd2hpbGUoIFNUS1BUUiA8IEZTUjBMICkJCQkJCQkJCQkJCQkJCVwNCisJewkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQlfYXNtCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkJUFVTSAkJCQkJCQkJCQkJCQkJCQlcDQorCQkJTU9WRglQT1NUREVDMSwgMCwgMAkJCQkJCQkJCQkJCVwNCisJCQlNT1ZXRglUT1NVLCAwCQkJCQkJCQkJCQkJCQlcDQorCQkJTU9WRglQT1NUREVDMSwgMCwgMAkJCQkJCQkJCQkJCVwNCisJCQlNT1ZXRglUT1NILCAwCQkJCQkJCQkJCQkJCQlcDQorCQkJTU9WRglQT1NUREVDMSwgMCwgMAkJCQkJCQkJCQkJCVwNCisJCQlNT1ZXRglUT1NMLCAwCQkJCQkJCQkJCQkJCQlcDQorCQlfZW5kYXNtCQkJCQkJCQkJCQkJCQkJCQlcDQorCX0JCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwlfYXNtCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJLyogUmVzdG9yZSB0aGUgLnRtcGRhdGEgYW5kIE1BVEhfREFUQSBtZW1vcnkuICovCQkJCQkJXA0KKwkJTU9WRkYJUE9TVERFQzEsIEZTUjBICQkJCQkJCQkJCQkJCVwNCisJCU1PVkZGCVBPU1RERUMxLCBGU1IwTAkJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUREVDMSwgUE9TVERFQzAJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUREVDMSwgUE9TVERFQzAJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUREVDMSwgUE9TVERFQzAJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUREVDMSwgUE9TVERFQzAJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUREVDMSwgUE9TVERFQzAJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUREVDMSwgUE9TVERFQzAJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUREVDMSwgUE9TVERFQzAJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUREVDMSwgUE9TVERFQzAJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUREVDMSwgUE9TVERFQzAJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUREVDMSwgUE9TVERFQzAJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUREVDMSwgUE9TVERFQzAJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUREVDMSwgUE9TVERFQzAJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUREVDMSwgUE9TVERFQzAJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUREVDMSwgUE9TVERFQzAJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUREVDMSwgUE9TVERFQzAJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUREVDMSwgUE9TVERFQzAJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUREVDMSwgUE9TVERFQzAJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUREVDMSwgUE9TVERFQzAJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUREVDMSwgUE9TVERFQzAJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUREVDMSwgSU5ERjAJCQkJCQkJCQkJCQkJXA0KKwkJLyogUmVzdG9yZSB0aGUgb3RoZXIgcmVnaXN0ZXJzIGZvcm1pbmcgdGhlIHRhc2tzIGNvbnRleHQuICovCQkJXA0KKwkJTU9WRkYJUE9TVERFQzEsIFBDTEFUSAkJCQkJCQkJCQkJCVwNCisJCU1PVkZGCVBPU1RERUMxLCBQQ0xBVFUJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUREVDMSwgUFJPREwJCQkJCQkJCQkJCQkJXA0KKwkJTU9WRkYJUE9TVERFQzEsIFBST0RICQkJCQkJCQkJCQkJCVwNCisJCU1PVkZGCVBPU1RERUMxLCBUQkxQVFJMCQkJCQkJCQkJCQkJXA0KKwkJTU9WRkYJUE9TVERFQzEsIFRCTFBUUkgJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUREVDMSwgVEJMUFRSVQkJCQkJCQkJCQkJCVwNCisJCU1PVkZGCVBPU1RERUMxLCBUQUJMQVQJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUREVDMSwgRlNSMEgJCQkJCQkJCQkJCQkJXA0KKwkJTU9WRkYJUE9TVERFQzEsIEZTUjBMCQkJCQkJCQkJCQkJCVwNCisJCU1PVkZGCVBPU1RERUMxLCBGU1IySAkJCQkJCQkJCQkJCQlcDQorCQlNT1ZGRglQT1NUREVDMSwgRlNSMkwJCQkJCQkJCQkJCQkJXA0KKwkJTU9WRkYJUE9TVERFQzEsIEJTUgkJCQkJCQkJCQkJCQlcDQorCQkvKiBUaGUgbmV4dCBieXRlIGlzIHRoZSBJTlRDT04gcmVnaXN0ZXIuICBSZWFkIHRoaXMgaW50byBXUkVHIGFzIHNvbWUJXA0KKwkJbWFuaXB1bGF0aW9uIGlzIHJlcXVpcmVkLiAqLwkJCQkJCQkJCQkJXA0KKwkJTU9WRkYJUE9TVERFQzEsIFdSRUcJCQkJCQkJCQkJCQkJXA0KKwlfZW5kYXNtCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBGcm9tIHRoZSBJTlRDT04gcmVnaXN0ZXIsIG9ubHkgdGhlIGludGVycnVwdCBlbmFibGUgYml0cyBmb3JtIHBhcnQJCVwNCisJb2YgdGhlIHRhc2tzIGNvbnRleHQuICBJdCBpcyBwZXJmZWN0bHkgbGVnaXRpbWF0ZSBmb3IgYW5vdGhlciB0YXNrIHRvCQlcDQorCWhhdmUgbW9kaWZpZWQgYW55IG90aGVyIGJpdHMuICBXZSB0aGVyZWZvcmUgb25seSByZXN0b3JlIHRoZSB0b3AgdHdvIGJpdHMuCVwNCisJKi8JCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwlpZiggV1JFRyAmIHBvcnRHTE9CQUxfSU5URVJSVVBUX0ZMQUcgKQkJCQkJCQkJCQlcDQorCXsJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJX2FzbSAJCQkJCQkJCQkJCQkJCQkJCVwNCisJCQlNT1ZGRglQT1NUREVDMSwgU1RBVFVTCQkJCQkJCQkJCQlcDQorCQkJTU9WRkYJUE9TVERFQzEsIFdSRUcJCQkJCQkJCQkJCQlcDQorCQkJLyogUmV0dXJuIGVuYWJsaW5nIGludGVycnVwdHMuICovCQkJCQkJCQkJXA0KKwkJCVJFVEZJRQkwCQkJCQkJCQkJCQkJCQkJXA0KKwkJX2VuZGFzbQkJCQkJCQkJCQkJCQkJCQkJXA0KKwl9CQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJZWxzZQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJewkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQlfYXNtIAkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCU1PVkZGCVBPU1RERUMxLCBTVEFUVVMJCQkJCQkJCQkJCVwNCisJCQlNT1ZGRglQT1NUREVDMSwgV1JFRwkJCQkJCQkJCQkJCVwNCisJCQkvKiBSZXR1cm4gd2l0aG91dCBlZmZlY3RpbmcgaW50ZXJydXB0cy4gIFRoZSBjb250ZXh0IG1heSBoYXZlCQlcDQorCQkJYmVlbiBzYXZlZCBmcm9tIGEgY3JpdGljYWwgcmVnaW9uLiAqLwkJCQkJCQkJXA0KKwkJCVJFVFVSTgkwCQkJCQkJCQkJCQkJCQkJXA0KKwkJX2VuZGFzbQkJCQkJCQkJCQkJCQkJCQkJXA0KKwl9CQkJCQkJCQkJCQkJCQkJCQkJCVwNCit9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQotLyoNCi0gKiBTZWUgaGVhZGVyIGZpbGUgZm9yIGRlc2NyaXB0aW9uLg0KKy8qIA0KKyAqIFNlZSBoZWFkZXIgZmlsZSBmb3IgZGVzY3JpcHRpb24uIA0KICAqLw0KLVN0YWNrVHlwZV90ICogcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqIHB4VG9wT2ZTdGFjaywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFza0Z1bmN0aW9uX3QgcHhDb2RlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICogcHZQYXJhbWV0ZXJzICkNCitTdGFja1R5cGVfdCAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqcHhUb3BPZlN0YWNrLCBUYXNrRnVuY3Rpb25fdCBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycyApDQogew0KLSAgICB1aW50MzJfdCB1bEFkZHJlc3M7DQotICAgIHVpbnQ4X3QgdWNCbG9jazsNCit1aW50MzJfdCB1bEFkZHJlc3M7DQordWludDhfdCB1Y0Jsb2NrOw0KIA0KLSAgICAvKiBQbGFjZSBhIGZldyBieXRlcyBvZiBrbm93biB2YWx1ZXMgb24gdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suDQotICAgICAqIFRoaXMgaXMganVzdCB1c2VmdWwgZm9yIGRlYnVnZ2luZy4gKi8NCisJLyogUGxhY2UgYSBmZXcgYnl0ZXMgb2Yga25vd24gdmFsdWVzIG9uIHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLiANCisJVGhpcyBpcyBqdXN0IHVzZWZ1bCBmb3IgZGVidWdnaW5nLiAqLw0KIA0KLSAgICAqcHhUb3BPZlN0YWNrID0gMHgxMTsNCi0gICAgcHhUb3BPZlN0YWNrKys7DQotICAgICpweFRvcE9mU3RhY2sgPSAweDIyOw0KLSAgICBweFRvcE9mU3RhY2srKzsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MzM7DQotICAgIHB4VG9wT2ZTdGFjaysrOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgxMTsNCisJcHhUb3BPZlN0YWNrKys7DQorCSpweFRvcE9mU3RhY2sgPSAweDIyOw0KKwlweFRvcE9mU3RhY2srKzsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MzM7DQorCXB4VG9wT2ZTdGFjaysrOw0KIA0KIA0KLSAgICAvKiBTaW11bGF0ZSBob3cgdGhlIHN0YWNrIHdvdWxkIGxvb2sgYWZ0ZXIgYSBjYWxsIHRvIHZQb3J0WWllbGQoKSBnZW5lcmF0ZWQNCi0gICAgICogYnkgdGhlIGNvbXBpbGVyLg0KLSAgICAgKg0KLSAgICAgKiBGaXJzdCBzdG9yZSB0aGUgZnVuY3Rpb24gcGFyYW1ldGVycy4gIFRoaXMgaXMgd2hlcmUgdGhlIHRhc2sgd2lsbCBleHBlY3QgdG8NCi0gICAgICogZmluZCB0aGVtIHdoZW4gaXQgc3RhcnRzIHJ1bm5pbmcuICovDQotICAgIHVsQWRkcmVzcyA9ICggdWludDMyX3QgKSBwdlBhcmFtZXRlcnM7DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgKCB1bEFkZHJlc3MgJiAoIHVpbnQzMl90ICkgMHgwMGZmICk7DQotICAgIHB4VG9wT2ZTdGFjaysrOw0KKwkvKiBTaW11bGF0ZSBob3cgdGhlIHN0YWNrIHdvdWxkIGxvb2sgYWZ0ZXIgYSBjYWxsIHRvIHZQb3J0WWllbGQoKSBnZW5lcmF0ZWQNCisJYnkgdGhlIGNvbXBpbGVyLiANCiANCi0gICAgdWxBZGRyZXNzID4+PSA4Ow0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApICggdWxBZGRyZXNzICYgKCB1aW50MzJfdCApIDB4MDBmZiApOw0KLSAgICBweFRvcE9mU3RhY2srKzsNCisJRmlyc3Qgc3RvcmUgdGhlIGZ1bmN0aW9uIHBhcmFtZXRlcnMuICBUaGlzIGlzIHdoZXJlIHRoZSB0YXNrIHdpbGwgZXhwZWN0IHRvDQorCWZpbmQgdGhlbSB3aGVuIGl0IHN0YXJ0cyBydW5uaW5nLiAqLw0KKwl1bEFkZHJlc3MgPSAoIHVpbnQzMl90ICkgcHZQYXJhbWV0ZXJzOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApICggdWxBZGRyZXNzICYgKCB1aW50MzJfdCApIDB4MDBmZiApOw0KKwlweFRvcE9mU3RhY2srKzsNCiANCi0gICAgLyogTmV4dCB3ZSBqdXN0IGxlYXZlIGEgc3BhY2UuICBXaGVuIGEgY29udGV4dCBpcyBzYXZlZCB0aGUgc3RhY2sgcG9pbnRlcg0KLSAgICAgKiBpcyBpbmNyZW1lbnRlZCBiZWZvcmUgaXQgaXMgdXNlZCBzbyBhcyBub3QgdG8gY29ycnVwdCB3aGF0ZXZlciB0aGUgc3RhY2sNCi0gICAgICogcG9pbnRlciBpcyBhY3R1YWxseSBwb2ludGluZyB0by4gIFRoaXMgaXMgZXNwZWNpYWxseSBuZWNlc3NhcnkgZHVyaW5nDQotICAgICAqIGZ1bmN0aW9uIGVwaWxvZ3VlIGNvZGUgZ2VuZXJhdGVkIGJ5IHRoZSBjb21waWxlci4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4NDQ7DQotICAgIHB4VG9wT2ZTdGFjaysrOw0KKwl1bEFkZHJlc3MgPj49IDg7DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgKCB1bEFkZHJlc3MgJiAoIHVpbnQzMl90ICkgMHgwMGZmICk7DQorCXB4VG9wT2ZTdGFjaysrOw0KIA0KLSAgICAvKiBOZXh0IGFyZSBhbGwgdGhlIHJlZ2lzdGVycyB0aGF0IGZvcm0gcGFydCBvZiB0aGUgdGFzayBjb250ZXh0LiAqLw0KKwkvKiBOZXh0IHdlIGp1c3QgbGVhdmUgYSBzcGFjZS4gIFdoZW4gYSBjb250ZXh0IGlzIHNhdmVkIHRoZSBzdGFjayBwb2ludGVyDQorCWlzIGluY3JlbWVudGVkIGJlZm9yZSBpdCBpcyB1c2VkIHNvIGFzIG5vdCB0byBjb3JydXB0IHdoYXRldmVyIHRoZSBzdGFjaw0KKwlwb2ludGVyIGlzIGFjdHVhbGx5IHBvaW50aW5nIHRvLiAgVGhpcyBpcyBlc3BlY2lhbGx5IG5lY2Vzc2FyeSBkdXJpbmcgDQorCWZ1bmN0aW9uIGVwaWxvZ3VlIGNvZGUgZ2VuZXJhdGVkIGJ5IHRoZSBjb21waWxlci4gKi8NCisJKnB4VG9wT2ZTdGFjayA9IDB4NDQ7DQorCXB4VG9wT2ZTdGFjaysrOw0KIA0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4NjY7IC8qIFdSRUcuICovDQotICAgIHB4VG9wT2ZTdGFjaysrOw0KKwkvKiBOZXh0IGFyZSBhbGwgdGhlIHJlZ2lzdGVycyB0aGF0IGZvcm0gcGFydCBvZiB0aGUgdGFzayBjb250ZXh0LiAqLw0KKwkNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDY2OyAvKiBXUkVHLiAqLw0KKwlweFRvcE9mU3RhY2srKzsNCiANCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweGNjOyAvKiBTdGF0dXMuICovDQotICAgIHB4VG9wT2ZTdGFjaysrOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4Y2M7IC8qIFN0YXR1cy4gKi8NCisJcHhUb3BPZlN0YWNrKys7DQogDQotICAgIC8qIElOVENPTiBpcyBzYXZlZCB3aXRoIGludGVycnVwdHMgZW5hYmxlZC4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwb3J0SU5JVEFMX0lOVEVSUlVQVF9TVEFURTsgLyogSU5UQ09OICovDQotICAgIHB4VG9wT2ZTdGFjaysrOw0KKwkvKiBJTlRDT04gaXMgc2F2ZWQgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcG9ydElOSVRBTF9JTlRFUlJVUFRfU1RBVEU7IC8qIElOVENPTiAqLw0KKwlweFRvcE9mU3RhY2srKzsNCiANCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDExOyAvKiBCU1IuICovDQotICAgIHB4VG9wT2ZTdGFjaysrOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTE7IC8qIEJTUi4gKi8NCisJcHhUb3BPZlN0YWNrKys7DQogDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgyMjsgLyogRlNSMkwuICovDQotICAgIHB4VG9wT2ZTdGFjaysrOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MjI7IC8qIEZTUjJMLiAqLw0KKwlweFRvcE9mU3RhY2srKzsNCiANCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDMzOyAvKiBGU1IySC4gKi8NCi0gICAgcHhUb3BPZlN0YWNrKys7DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgzMzsgLyogRlNSMkguICovDQorCXB4VG9wT2ZTdGFjaysrOw0KIA0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4NDQ7IC8qIEZTUjBMLiAqLw0KLSAgICBweFRvcE9mU3RhY2srKzsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDQ0OyAvKiBGU1IwTC4gKi8NCisJcHhUb3BPZlN0YWNrKys7DQogDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHg1NTsgLyogRlNSMEguICovDQotICAgIHB4VG9wT2ZTdGFjaysrOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4NTU7IC8qIEZTUjBILiAqLw0KKwlweFRvcE9mU3RhY2srKzsNCiANCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDY2OyAvKiBUQUJMQVQuICovDQotICAgIHB4VG9wT2ZTdGFjaysrOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4NjY7IC8qIFRBQkxBVC4gKi8NCisJcHhUb3BPZlN0YWNrKys7DQogDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMDsgLyogVEJMUFRSVS4gKi8NCi0gICAgcHhUb3BPZlN0YWNrKys7DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMDsgLyogVEJMUFRSVS4gKi8NCisJcHhUb3BPZlN0YWNrKys7DQogDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHg4ODsgLyogVEJMUFRSVUguICovDQotICAgIHB4VG9wT2ZTdGFjaysrOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4ODg7IC8qIFRCTFBUUlVILiAqLw0KKwlweFRvcE9mU3RhY2srKzsNCiANCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDk5OyAvKiBUQkxQVFJVTC4gKi8NCi0gICAgcHhUb3BPZlN0YWNrKys7DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHg5OTsgLyogVEJMUFRSVUwuICovDQorCXB4VG9wT2ZTdGFjaysrOw0KIA0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4YWE7IC8qIFBST0RILiAqLw0KLSAgICBweFRvcE9mU3RhY2srKzsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweGFhOyAvKiBQUk9ESC4gKi8NCisJcHhUb3BPZlN0YWNrKys7DQogDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhiYjsgLyogUFJPREwuICovDQotICAgIHB4VG9wT2ZTdGFjaysrOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4YmI7IC8qIFBST0RMLiAqLw0KKwlweFRvcE9mU3RhY2srKzsNCiANCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAwOyAvKiBQQ0xBVFUuICovDQotICAgIHB4VG9wT2ZTdGFjaysrOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDA7IC8qIFBDTEFUVS4gKi8NCisJcHhUb3BPZlN0YWNrKys7DQogDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMDsgLyogUENMQVRILiAqLw0KLSAgICBweFRvcE9mU3RhY2srKzsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAwOyAvKiBQQ0xBVEguICovDQorCXB4VG9wT2ZTdGFjaysrOw0KIA0KLSAgICAvKiBOZXh0IHRoZSAudG1wZGF0YSBhbmQgTUFUSF9EQVRBIHNlY3Rpb25zLiAqLw0KLSAgICBmb3IoIHVjQmxvY2sgPSAwOyB1Y0Jsb2NrIDw9IHBvcnRDT01QSUxFUl9NQU5BR0VEX01FTU9SWV9TSVpFOyB1Y0Jsb2NrKysgKQ0KLSAgICB7DQotICAgICAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHVjQmxvY2s7DQotICAgICAgICAqcHhUb3BPZlN0YWNrKys7DQotICAgIH0NCisJLyogTmV4dCB0aGUgLnRtcGRhdGEgYW5kIE1BVEhfREFUQSBzZWN0aW9ucy4gKi8NCisJZm9yKCB1Y0Jsb2NrID0gMDsgdWNCbG9jayA8PSBwb3J0Q09NUElMRVJfTUFOQUdFRF9NRU1PUllfU0laRTsgdWNCbG9jaysrICkNCisJew0KKwkJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSB1Y0Jsb2NrOw0KKwkJKnB4VG9wT2ZTdGFjaysrOw0KKwl9DQogDQotICAgIC8qIFN0b3JlIHRoZSB0b3Agb2YgdGhlIGdsb2JhbCBkYXRhIHNlY3Rpb24uICovDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcG9ydENPTVBJTEVSX01BTkFHRURfTUVNT1JZX1NJWkU7IC8qIExvdy4gKi8NCi0gICAgcHhUb3BPZlN0YWNrKys7DQorCS8qIFN0b3JlIHRoZSB0b3Agb2YgdGhlIGdsb2JhbCBkYXRhIHNlY3Rpb24uICovDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcG9ydENPTVBJTEVSX01BTkFHRURfTUVNT1JZX1NJWkU7IC8qIExvdy4gKi8NCisJcHhUb3BPZlN0YWNrKys7DQogDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMDsgLyogSGlnaC4gKi8NCi0gICAgcHhUb3BPZlN0YWNrKys7DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMDsgLyogSGlnaC4gKi8NCisJcHhUb3BPZlN0YWNrKys7DQogDQotICAgIC8qIFRoZSBvbmx5IGZ1bmN0aW9uIHJldHVybiBhZGRyZXNzIHNvIGZhciBpcyB0aGUgYWRkcmVzcyBvZiB0aGUNCi0gICAgICogdGFzay4gKi8NCi0gICAgdWxBZGRyZXNzID0gKCB1aW50MzJfdCApIHB4Q29kZTsNCisJLyogVGhlIG9ubHkgZnVuY3Rpb24gcmV0dXJuIGFkZHJlc3Mgc28gZmFyIGlzIHRoZSBhZGRyZXNzIG9mIHRoZSANCisJdGFzay4gKi8NCisJdWxBZGRyZXNzID0gKCB1aW50MzJfdCApIHB4Q29kZTsNCiANCi0gICAgLyogVE9TIGxvdy4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAoIHVsQWRkcmVzcyAmICggdWludDMyX3QgKSAweDAwZmYgKTsNCi0gICAgcHhUb3BPZlN0YWNrKys7DQotICAgIHVsQWRkcmVzcyA+Pj0gODsNCisJLyogVE9TIGxvdy4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAoIHVsQWRkcmVzcyAmICggdWludDMyX3QgKSAweDAwZmYgKTsNCisJcHhUb3BPZlN0YWNrKys7DQorCXVsQWRkcmVzcyA+Pj0gODsNCiANCi0gICAgLyogVE9TIGhpZ2guICovDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgKCB1bEFkZHJlc3MgJiAoIHVpbnQzMl90ICkgMHgwMGZmICk7DQotICAgIHB4VG9wT2ZTdGFjaysrOw0KLSAgICB1bEFkZHJlc3MgPj49IDg7DQorCS8qIFRPUyBoaWdoLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApICggdWxBZGRyZXNzICYgKCB1aW50MzJfdCApIDB4MDBmZiApOw0KKwlweFRvcE9mU3RhY2srKzsNCisJdWxBZGRyZXNzID4+PSA4Ow0KIA0KLSAgICAvKiBUT1MgZXZlbiBoaWdoZXIuICovDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgKCB1bEFkZHJlc3MgJiAoIHVpbnQzMl90ICkgMHgwMGZmICk7DQotICAgIHB4VG9wT2ZTdGFjaysrOw0KKwkvKiBUT1MgZXZlbiBoaWdoZXIuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgKCB1bEFkZHJlc3MgJiAoIHVpbnQzMl90ICkgMHgwMGZmICk7DQorCXB4VG9wT2ZTdGFjaysrOw0KIA0KLSAgICAvKiBTdG9yZSB0aGUgbnVtYmVyIG9mIHJldHVybiBhZGRyZXNzZXMgb24gdGhlIGhhcmR3YXJlIHN0YWNrIC0gc28gZmFyIG9ubHkNCi0gICAgICogdGhlIGFkZHJlc3Mgb2YgdGhlIHRhc2sgZW50cnkgcG9pbnQuICovDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMTsNCi0gICAgcHhUb3BPZlN0YWNrKys7DQorCS8qIFN0b3JlIHRoZSBudW1iZXIgb2YgcmV0dXJuIGFkZHJlc3NlcyBvbiB0aGUgaGFyZHdhcmUgc3RhY2sgLSBzbyBmYXIgb25seQ0KKwl0aGUgYWRkcmVzcyBvZiB0aGUgdGFzayBlbnRyeSBwb2ludC4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAxOw0KKwlweFRvcE9mU3RhY2srKzsNCiANCi0gICAgcmV0dXJuIHB4VG9wT2ZTdGFjazsNCisJcmV0dXJuIHB4VG9wT2ZTdGFjazsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogQmFzZVR5cGVfdCB4UG9ydFN0YXJ0U2NoZWR1bGVyKCB2b2lkICkNCiB7DQotICAgIC8qIFNldHVwIGEgdGltZXIgZm9yIHRoZSB0aWNrIElTUiBpcyB1c2luZyB0aGUgcHJlZW1wdGl2ZSBzY2hlZHVsZXIuICovDQotICAgIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoKTsNCisJLyogU2V0dXAgYSB0aW1lciBmb3IgdGhlIHRpY2sgSVNSIGlzIHVzaW5nIHRoZSBwcmVlbXB0aXZlIHNjaGVkdWxlci4gKi8NCisJcHJ2U2V0dXBUaW1lckludGVycnVwdCgpOyANCiANCi0gICAgLyogUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgZmlyc3QgdGFzayB0byBydW4uICovDQotICAgIHBvcnRSRVNUT1JFX0NPTlRFWFQoKTsNCisJLyogUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgZmlyc3QgdGFzayB0byBydW4uICovDQorCXBvcnRSRVNUT1JFX0NPTlRFWFQoKTsNCiANCi0gICAgLyogU2hvdWxkIG5vdCBnZXQgaGVyZS4gIFVzZSB0aGUgZnVuY3Rpb24gbmFtZSB0byBzdG9wIGNvbXBpbGVyIHdhcm5pbmdzLiAqLw0KLSAgICAoIHZvaWQgKSBwcnZMb3dJbnRlcnJ1cHQ7DQotICAgICggdm9pZCApIHBydlRpY2tJU1I7DQorCS8qIFNob3VsZCBub3QgZ2V0IGhlcmUuICBVc2UgdGhlIGZ1bmN0aW9uIG5hbWUgdG8gc3RvcCBjb21waWxlciB3YXJuaW5ncy4gKi8NCisJKCB2b2lkICkgcHJ2TG93SW50ZXJydXB0Ow0KKwkoIHZvaWQgKSBwcnZUaWNrSVNSOw0KIA0KLSAgICByZXR1cm4gcGRUUlVFOw0KKwlyZXR1cm4gcGRUUlVFOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0RW5kU2NoZWR1bGVyKCB2b2lkICkNCiB7DQotICAgIC8qIEl0IGlzIHVubGlrZWx5IHRoYXQgdGhlIHNjaGVkdWxlciBmb3IgdGhlIFBJQyBwb3J0IHdpbGwgZ2V0IHN0b3BwZWQNCi0gICAgICogb25jZSBydW5uaW5nLiAgSWYgcmVxdWlyZWQgZGlzYWJsZSB0aGUgdGljayBpbnRlcnJ1cHQgaGVyZSwgdGhlbiByZXR1cm4NCi0gICAgICogdG8geFBvcnRTdGFydFNjaGVkdWxlcigpLiAqLw0KKwkvKiBJdCBpcyB1bmxpa2VseSB0aGF0IHRoZSBzY2hlZHVsZXIgZm9yIHRoZSBQSUMgcG9ydCB3aWxsIGdldCBzdG9wcGVkDQorCW9uY2UgcnVubmluZy4gIElmIHJlcXVpcmVkIGRpc2FibGUgdGhlIHRpY2sgaW50ZXJydXB0IGhlcmUsIHRoZW4gcmV0dXJuIA0KKwl0byB4UG9ydFN0YXJ0U2NoZWR1bGVyKCkuICovDQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KQEAgLTUwMywxNSArNTAxLDE1IEBACiAgKi8NCiB2b2lkIHZQb3J0WWllbGQoIHZvaWQgKQ0KIHsNCi0gICAgLyogVGhpcyBjYW4gZ2V0IGNhbGxlZCB3aXRoIGludGVycnVwdHMgZWl0aGVyIGVuYWJsZWQgb3IgZGlzYWJsZWQuICBXZQ0KLSAgICAgKiB3aWxsIHNhdmUgdGhlIElOVENPTiByZWdpc3RlciB3aXRoIHRoZSBpbnRlcnJ1cHQgZW5hYmxlIGJpdHMgdW5tb2RpZmllZC4gKi8NCi0gICAgcG9ydFNBVkVfQ09OVEVYVCggcG9ydElOVEVSUlVQVFNfVU5DSEFOR0VEICk7DQorCS8qIFRoaXMgY2FuIGdldCBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGVpdGhlciBlbmFibGVkIG9yIGRpc2FibGVkLiAgV2UNCisJd2lsbCBzYXZlIHRoZSBJTlRDT04gcmVnaXN0ZXIgd2l0aCB0aGUgaW50ZXJydXB0IGVuYWJsZSBiaXRzIHVubW9kaWZpZWQuICovDQorCXBvcnRTQVZFX0NPTlRFWFQoIHBvcnRJTlRFUlJVUFRTX1VOQ0hBTkdFRCApOw0KIA0KLSAgICAvKiBTd2l0Y2ggdG8gdGhlIGhpZ2hlc3QgcHJpb3JpdHkgdGFzayB0aGF0IGlzIHJlYWR5IHRvIHJ1bi4gKi8NCi0gICAgdlRhc2tTd2l0Y2hDb250ZXh0KCk7DQorCS8qIFN3aXRjaCB0byB0aGUgaGlnaGVzdCBwcmlvcml0eSB0YXNrIHRoYXQgaXMgcmVhZHkgdG8gcnVuLiAqLw0KKwl2VGFza1N3aXRjaENvbnRleHQoKTsNCiANCi0gICAgLyogU3RhcnQgZXhlY3V0aW5nIHRoZSB0YXNrIHdlIGhhdmUganVzdCBzd2l0Y2hlZCB0by4gKi8NCi0gICAgcG9ydFJFU1RPUkVfQ09OVEVYVCgpOw0KKwkvKiBTdGFydCBleGVjdXRpbmcgdGhlIHRhc2sgd2UgaGF2ZSBqdXN0IHN3aXRjaGVkIHRvLiAqLw0KKwlwb3J0UkVTVE9SRV9DT05URVhUKCk7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KQEAgLTUyMSwzMiArNTE5LDMyIEBACiAjcHJhZ21hIGNvZGUgaGlnaF92ZWN0b3I9MHgwOA0KIHN0YXRpYyB2b2lkIHBydkxvd0ludGVycnVwdCggdm9pZCApDQogew0KLSAgICAvKiBXYXMgdGhlIGludGVycnVwdCB0aGUgdGljaz8gKi8NCi0gICAgaWYoIFBJUjFiaXRzLkNDUDFJRiApDQotICAgIHsNCi0gICAgICAgIF9hc20NCi0gICAgICAgIGdvdG8gcHJ2VGlja0lTUg0KLSAgICAgICAgX2VuZGFzbQ0KLSAgICB9DQorCS8qIFdhcyB0aGUgaW50ZXJydXB0IHRoZSB0aWNrPyAqLw0KKwlpZiggUElSMWJpdHMuQ0NQMUlGICkNCisJewkJDQorCQlfYXNtDQorCQkJZ290byBwcnZUaWNrSVNSDQorCQlfZW5kYXNtDQorCX0NCiANCi0gICAgLyogV2FzIHRoZSBpbnRlcnJ1cHQgYSBieXRlIGJlaW5nIHJlY2VpdmVkPyAqLw0KLSAgICBpZiggUElSMWJpdHMuUkNJRiApDQotICAgIHsNCi0gICAgICAgIF9hc20NCi0gICAgICAgIGdvdG8gdlNlcmlhbFJ4SVNSDQotICAgICAgICBfZW5kYXNtDQotICAgIH0NCisJLyogV2FzIHRoZSBpbnRlcnJ1cHQgYSBieXRlIGJlaW5nIHJlY2VpdmVkPyAqLw0KKwlpZiggUElSMWJpdHMuUkNJRiApDQorCXsNCisJCV9hc20NCisJCQlnb3RvIHZTZXJpYWxSeElTUg0KKwkJX2VuZGFzbQ0KKwl9DQogDQotICAgIC8qIFdhcyB0aGUgaW50ZXJydXB0IHRoZSBUeCByZWdpc3RlciBiZWNvbWluZyBlbXB0eT8gKi8NCi0gICAgaWYoIFBJUjFiaXRzLlRYSUYgKQ0KLSAgICB7DQotICAgICAgICBpZiggUElFMWJpdHMuVFhJRSApDQotICAgICAgICB7DQotICAgICAgICAgICAgX2FzbQ0KLSAgICAgICAgICAgIGdvdG8gdlNlcmlhbFR4SVNSDQotICAgICAgICAgICAgX2VuZGFzbQ0KLSAgICAgICAgfQ0KLSAgICB9DQorCS8qIFdhcyB0aGUgaW50ZXJydXB0IHRoZSBUeCByZWdpc3RlciBiZWNvbWluZyBlbXB0eT8gKi8NCisJaWYoIFBJUjFiaXRzLlRYSUYgKQ0KKwl7DQorCQlpZiggUElFMWJpdHMuVFhJRSApDQorCQl7DQorCQkJX2FzbQ0KKwkJCQlnb3RvIHZTZXJpYWxUeElTUg0KKwkJCV9lbmRhc20NCisJCX0NCisJfQ0KIH0NCiAjcHJhZ21hIGNvZGUNCiANCkBAIC01NTQsMjUgKzU1MiwyNSBAQAogDQogLyoNCiAgKiBJU1IgZm9yIHRoZSB0aWNrLg0KLSAqIFRoaXMgaW5jcmVtZW50cyB0aGUgdGljayBjb3VudCBhbmQsIGlmIHVzaW5nIHRoZSBwcmVlbXB0aXZlIHNjaGVkdWxlciwNCi0gKiBwZXJmb3JtcyBhIGNvbnRleHQgc3dpdGNoLiAgVGhpcyBtdXN0IGJlIGlkZW50aWNhbCB0byB0aGUgbWFudWFsDQotICogY29udGV4dCBzd2l0Y2ggaW4gaG93IGl0IHN0b3JlcyB0aGUgY29udGV4dCBvZiBhIHRhc2suDQorICogVGhpcyBpbmNyZW1lbnRzIHRoZSB0aWNrIGNvdW50IGFuZCwgaWYgdXNpbmcgdGhlIHByZWVtcHRpdmUgc2NoZWR1bGVyLCANCisgKiBwZXJmb3JtcyBhIGNvbnRleHQgc3dpdGNoLiAgVGhpcyBtdXN0IGJlIGlkZW50aWNhbCB0byB0aGUgbWFudWFsIA0KKyAqIGNvbnRleHQgc3dpdGNoIGluIGhvdyBpdCBzdG9yZXMgdGhlIGNvbnRleHQgb2YgYSB0YXNrLiANCiAgKi8NCiBzdGF0aWMgdm9pZCBwcnZUaWNrSVNSKCB2b2lkICkNCiB7DQotICAgIC8qIEludGVycnVwdHMgbXVzdCBoYXZlIGJlZW4gZW5hYmxlZCBmb3IgdGhlIElTUiB0byBmaXJlLCBzbyB3ZSBoYXZlIHRvDQotICAgICAqIHNhdmUgdGhlIGNvbnRleHQgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQuICovDQotICAgIHBvcnRTQVZFX0NPTlRFWFQoIHBvcnRHTE9CQUxfSU5URVJSVVBUX0ZMQUcgKTsNCi0gICAgUElSMWJpdHMuQ0NQMUlGID0gMDsNCisJLyogSW50ZXJydXB0cyBtdXN0IGhhdmUgYmVlbiBlbmFibGVkIGZvciB0aGUgSVNSIHRvIGZpcmUsIHNvIHdlIGhhdmUgdG8gDQorCXNhdmUgdGhlIGNvbnRleHQgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQuICovDQorCXBvcnRTQVZFX0NPTlRFWFQoIHBvcnRHTE9CQUxfSU5URVJSVVBUX0ZMQUcgKTsNCisJUElSMWJpdHMuQ0NQMUlGID0gMDsNCiANCi0gICAgLyogTWFpbnRhaW4gdGhlIHRpY2sgY291bnQuICovDQotICAgIGlmKCB4VGFza0luY3JlbWVudFRpY2soKSAhPSBwZEZBTFNFICkNCi0gICAgew0KLSAgICAgICAgLyogU3dpdGNoIHRvIHRoZSBoaWdoZXN0IHByaW9yaXR5IHRhc2sgdGhhdCBpcyByZWFkeSB0byBydW4uICovDQotICAgICAgICB2VGFza1N3aXRjaENvbnRleHQoKTsNCi0gICAgfQ0KKwkvKiBNYWludGFpbiB0aGUgdGljayBjb3VudC4gKi8NCisJaWYoIHhUYXNrSW5jcmVtZW50VGljaygpICE9IHBkRkFMU0UgKQ0KKwl7DQorCQkvKiBTd2l0Y2ggdG8gdGhlIGhpZ2hlc3QgcHJpb3JpdHkgdGFzayB0aGF0IGlzIHJlYWR5IHRvIHJ1bi4gKi8NCisJCXZUYXNrU3dpdGNoQ29udGV4dCgpOw0KKwl9DQogDQotICAgIHBvcnRSRVNUT1JFX0NPTlRFWFQoKTsNCisJcG9ydFJFU1RPUkVfQ09OVEVYVCgpOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCkBAIC01ODEsMzYgKzU3OSwzNyBAQAogICovDQogc3RhdGljIHZvaWQgcHJ2U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApDQogew0KLSAgICBjb25zdCB1aW50MzJfdCB1bENvbnN0Q29tcGFyZVZhbHVlID0gKCAoIGNvbmZpZ0NQVV9DTE9DS19IWiAvIHBvcnRUSU1FUl9GT1NDX1NDQUxFICkgLyBjb25maWdUSUNLX1JBVEVfSFogKTsNCi0gICAgdWludDMyX3QgdWxDb21wYXJlVmFsdWU7DQotICAgIHVpbnQ4X3QgdWNCeXRlOw0KK2NvbnN0IHVpbnQzMl90IHVsQ29uc3RDb21wYXJlVmFsdWUgPSAoICggY29uZmlnQ1BVX0NMT0NLX0haIC8gcG9ydFRJTUVSX0ZPU0NfU0NBTEUgKSAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApOw0KK3VpbnQzMl90IHVsQ29tcGFyZVZhbHVlOw0KK3VpbnQ4X3QgdWNCeXRlOw0KIA0KLSAgICAvKiBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLg0KLSAgICAgKg0KLSAgICAgKiBTZXR1cCBDQ1AxIHRvIHByb3ZpZGUgdGhlIHRpY2sgaW50ZXJydXB0IHVzaW5nIGEgY29tcGFyZSBtYXRjaCBvbiB0aW1lcg0KLSAgICAgKiAxLg0KLSAgICAgKg0KLSAgICAgKiBDbGVhciB0aGUgdGltZSBjb3VudCB0aGVuIHNldHVwIHRpbWVyLiAqLw0KLSAgICBUTVIxSCA9ICggdWludDhfdCApIDB4MDA7DQotICAgIFRNUjFMID0gKCB1aW50OF90ICkgMHgwMDsNCisJLyogSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4NCiANCi0gICAgLyogU2V0IHRoZSBjb21wYXJlIG1hdGNoIHZhbHVlLiAqLw0KLSAgICB1bENvbXBhcmVWYWx1ZSA9IHVsQ29uc3RDb21wYXJlVmFsdWU7DQotICAgIENDUFIxTCA9ICggdWludDhfdCApICggdWxDb21wYXJlVmFsdWUgJiAoIHVpbnQzMl90ICkgMHhmZiApOw0KLSAgICB1bENvbXBhcmVWYWx1ZSA+Pj0gKCB1aW50MzJfdCApIDg7DQotICAgIENDUFIxSCA9ICggdWludDhfdCApICggdWxDb21wYXJlVmFsdWUgJiAoIHVpbnQzMl90ICkgMHhmZiApOw0KKwlTZXR1cCBDQ1AxIHRvIHByb3ZpZGUgdGhlIHRpY2sgaW50ZXJydXB0IHVzaW5nIGEgY29tcGFyZSBtYXRjaCBvbiB0aW1lcg0KKwkxLg0KIA0KLSAgICBDQ1AxQ09OYml0cy5DQ1AxTTAgPSBwb3J0QklUX1NFVDsgICAvKjwgQ29tcGFyZSBtYXRjaCBtb2RlLiAqLw0KLSAgICBDQ1AxQ09OYml0cy5DQ1AxTTEgPSBwb3J0QklUX1NFVDsgICAvKjwgQ29tcGFyZSBtYXRjaCBtb2RlLiAqLw0KLSAgICBDQ1AxQ09OYml0cy5DQ1AxTTIgPSBwb3J0QklUX0NMRUFSOyAvKjwgQ29tcGFyZSBtYXRjaCBtb2RlLiAqLw0KLSAgICBDQ1AxQ09OYml0cy5DQ1AxTTMgPSBwb3J0QklUX1NFVDsgICAvKjwgQ29tcGFyZSBtYXRjaCBtb2RlLiAqLw0KLSAgICBQSUUxYml0cy5DQ1AxSUUgPSBwb3J0QklUX1NFVDsgICAgICAvKjwgSW50ZXJydXB0IGVuYWJsZS4gKi8NCisJQ2xlYXIgdGhlIHRpbWUgY291bnQgdGhlbiBzZXR1cCB0aW1lci4gKi8NCisJVE1SMUggPSAoIHVpbnQ4X3QgKSAweDAwOw0KKwlUTVIxTCA9ICggdWludDhfdCApIDB4MDA7DQogDQotICAgIC8qIFdlIGFyZSBvbmx5IGdvaW5nIHRvIHVzZSB0aGUgZ2xvYmFsIGludGVycnVwdCBiaXQsIHNvIHNldCB0aGUgcGVyaXBoZXJhbA0KLSAgICAgKiBiaXQgdG8gdHJ1ZS4gKi8NCi0gICAgSU5UQ09OYml0cy5HSUVMID0gcG9ydEJJVF9TRVQ7DQorCS8qIFNldCB0aGUgY29tcGFyZSBtYXRjaCB2YWx1ZS4gKi8NCisJdWxDb21wYXJlVmFsdWUgPSB1bENvbnN0Q29tcGFyZVZhbHVlOw0KKwlDQ1BSMUwgPSAoIHVpbnQ4X3QgKSAoIHVsQ29tcGFyZVZhbHVlICYgKCB1aW50MzJfdCApIDB4ZmYgKTsNCisJdWxDb21wYXJlVmFsdWUgPj49ICggdWludDMyX3QgKSA4Ow0KKwlDQ1BSMUggPSAoIHVpbnQ4X3QgKSAoIHVsQ29tcGFyZVZhbHVlICYgKCB1aW50MzJfdCApIDB4ZmYgKTsJDQogDQotICAgIC8qIFByb3ZpZGVkIGxpYnJhcnkgZnVuY3Rpb24gZm9yIHNldHRpbmcgdXAgdGhlIHRpbWVyIHRoYXQgd2lsbCBwcm9kdWNlIHRoZQ0KLSAgICAgKiB0aWNrLiAqLw0KLSAgICBPcGVuVGltZXIxKCBUMV8xNkJJVF9SVyAmIFQxX1NPVVJDRV9JTlQgJiBUMV9QU18xXzEgJiBUMV9DQ1AxX1QzX0NDUDIgKTsNCisJQ0NQMUNPTmJpdHMuQ0NQMU0wID0gcG9ydEJJVF9TRVQ7CS8qPCBDb21wYXJlIG1hdGNoIG1vZGUuICovDQorCUNDUDFDT05iaXRzLkNDUDFNMSA9IHBvcnRCSVRfU0VUOwkvKjwgQ29tcGFyZSBtYXRjaCBtb2RlLiAqLw0KKwlDQ1AxQ09OYml0cy5DQ1AxTTIgPSBwb3J0QklUX0NMRUFSOwkvKjwgQ29tcGFyZSBtYXRjaCBtb2RlLiAqLw0KKwlDQ1AxQ09OYml0cy5DQ1AxTTMgPSBwb3J0QklUX1NFVDsJLyo8IENvbXBhcmUgbWF0Y2ggbW9kZS4gKi8NCisJUElFMWJpdHMuQ0NQMUlFID0gcG9ydEJJVF9TRVQ7CQkvKjwgSW50ZXJydXB0IGVuYWJsZS4gKi8NCisNCisJLyogV2UgYXJlIG9ubHkgZ29pbmcgdG8gdXNlIHRoZSBnbG9iYWwgaW50ZXJydXB0IGJpdCwgc28gc2V0IHRoZSBwZXJpcGhlcmFsDQorCWJpdCB0byB0cnVlLiAqLw0KKwlJTlRDT05iaXRzLkdJRUwgPSBwb3J0QklUX1NFVDsNCisNCisJLyogUHJvdmlkZWQgbGlicmFyeSBmdW5jdGlvbiBmb3Igc2V0dGluZyB1cCB0aGUgdGltZXIgdGhhdCB3aWxsIHByb2R1Y2UgdGhlDQorCXRpY2suICovDQorCU9wZW5UaW1lcjEoIFQxXzE2QklUX1JXICYgVDFfU09VUkNFX0lOVCAmIFQxX1BTXzFfMSAmIFQxX0NDUDFfVDNfQ0NQMiApOw0KIH0NCisNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9NUExBQi9QSUMxOEYvcG9ydG1hY3JvLmggYi9wb3J0YWJsZS9NUExBQi9QSUMxOEYvcG9ydG1hY3JvLmgKaW5kZXggZmEzZjc0Ny4uMGI0MjEyNiAxMDA2NDQKLS0tIGEvcG9ydGFibGUvTVBMQUIvUElDMThGL3BvcnRtYWNyby5oCisrKyBiL3BvcnRhYmxlL01QTEFCL1BJQzE4Ri9wb3J0bWFjcm8uaApAQCAtMzksNzYgKzM5LDc0IEBACiAgKi8NCiANCiAvKiBUeXBlIGRlZmluaXRpb25zLiAqLw0KLSNkZWZpbmUgcG9ydENIQVIgICAgICAgICAgY2hhcg0KLSNkZWZpbmUgcG9ydEZMT0FUICAgICAgICAgZmxvYXQNCi0jZGVmaW5lIHBvcnRET1VCTEUgICAgICAgIGRvdWJsZQ0KLSNkZWZpbmUgcG9ydExPTkcgICAgICAgICAgbG9uZw0KLSNkZWZpbmUgcG9ydFNIT1JUICAgICAgICAgaW50DQotI2RlZmluZSBwb3J0U1RBQ0tfVFlQRSAgICB1aW50OF90DQotI2RlZmluZSBwb3J0QkFTRV9UWVBFICAgICBjaGFyDQorI2RlZmluZSBwb3J0Q0hBUgkJY2hhcg0KKyNkZWZpbmUgcG9ydEZMT0FUCQlmbG9hdA0KKyNkZWZpbmUgcG9ydERPVUJMRQkJZG91YmxlDQorI2RlZmluZSBwb3J0TE9ORwkJbG9uZw0KKyNkZWZpbmUgcG9ydFNIT1JUCQlpbnQNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFCXVpbnQ4X3QNCisjZGVmaW5lIHBvcnRCQVNFX1RZUEUJY2hhcg0KIA0KLXR5cGVkZWYgcG9ydFNUQUNLX1RZUEUgICBTdGFja1R5cGVfdDsNCi10eXBlZGVmIHNpZ25lZCBjaGFyICAgICAgQmFzZVR5cGVfdDsNCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgICAgVUJhc2VUeXBlX3Q7DQordHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSBTdGFja1R5cGVfdDsNCit0eXBlZGVmIHNpZ25lZCBjaGFyIEJhc2VUeXBlX3Q7DQordHlwZWRlZiB1bnNpZ25lZCBjaGFyIFVCYXNlVHlwZV90Ow0KIA0KLSNpZiAoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQotICAgIHR5cGVkZWYgdWludDE2X3QgICAgIFRpY2tUeXBlX3Q7DQotICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmYNCisjaWYoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQorCXR5cGVkZWYgdWludDE2X3QgVGlja1R5cGVfdDsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggVGlja1R5cGVfdCApIDB4ZmZmZg0KICNlbHNlDQotICAgIHR5cGVkZWYgdWludDMyX3QgICAgIFRpY2tUeXBlX3Q7DQotICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwNCisJdHlwZWRlZiB1aW50MzJfdCBUaWNrVHlwZV90Ow0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQogI2VuZGlmDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogSGFyZHdhcmUgc3BlY2lmaWNzLiAqLw0KLSNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UICAgICAgICAgICAxDQotI2RlZmluZSBwb3J0R0xPQkFMX0lOVF9FTkFCTEVfQklUICAgIDB4ODANCi0jZGVmaW5lIHBvcnRTVEFDS19HUk9XVEggICAgICAgICAgICAgMQ0KLSNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TICAgICAgICAgICAoICggVGlja1R5cGVfdCApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UCQkJMQ0KKyNkZWZpbmUgcG9ydEdMT0JBTF9JTlRfRU5BQkxFX0JJVAkweDgwDQorI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RICQkJMQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TCQkJKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBDcml0aWNhbCBzZWN0aW9uIG1hbmFnZW1lbnQuICovDQotI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgICAgSU5UQ09OYml0cy5HSUVIID0gMDsNCi0jZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpICAgICBJTlRDT05iaXRzLkdJRUggPSAxOw0KKyNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpCUlOVENPTmJpdHMuR0lFSCA9IDA7DQorI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKQkJSU5UQ09OYml0cy5HSUVIID0gMTsNCiANCiAvKiBQdXNoIHRoZSBJTlRDT04gcmVnaXN0ZXIgb250byB0aGUgc3RhY2ssIHRoZW4gZGlzYWJsZSBpbnRlcnJ1cHRzLiAqLw0KLSNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgXA0KLSAgICBQT1NUSU5DMSA9IElOVENPTjsgICAgICAgXA0KLSAgICBJTlRDT05iaXRzLkdJRUggPSAwOw0KKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkJCVBPU1RJTkMxID0gSU5UQ09OOwkJCQlcDQorCQkJCQkJCQkJSU5UQ09OYml0cy5HSUVIID0gMDsNCiANCiAvKiBSZXRyaWV2ZSB0aGUgSU5UQ09OIHJlZ2lzdGVyIGZyb20gdGhlIHN0YWNrLCBhbmQgZW5hYmxlIGludGVycnVwdHMNCi0gKiBpZiB0aGV5IHdlcmUgc2F2ZWQgYXMgYmVpbmcgZW5hYmxlZC4gIERvbid0IG1vZGlmeSBhbnkgb3RoZXIgYml0cw0KLSAqIHdpdGhpbiB0aGUgSU5UQ09OIHJlZ2lzdGVyIGFzIHRoZXNlIG1heSBoYXZlIGxhZ2l0aW1hdGVseSBoYXZlIGJlZW4NCi0gKiBtb2RpZmllZCB3aXRoaW4gdGhlIGNyaXRpY2FsIHJlZ2lvbi4gKi8NCi0jZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkgICAgICAgICAgICAgICAgIFwNCi0gICAgX2FzbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgTU9WRiBQT1NUREVDMSwgMSwgMCAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgX2VuZGFzbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgaWYoIElOREYxICYgcG9ydEdMT0JBTF9JTlRfRU5BQkxFX0JJVCApIFwNCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpOyAgICAgICAgICAgIFwNCi0gICAgfQ0KK2lmIHRoZXkgd2VyZSBzYXZlZCBhcyBiZWluZyBlbmFibGVkLiAgRG9uJ3QgbW9kaWZ5IGFueSBvdGhlciBiaXRzDQord2l0aGluIHRoZSBJTlRDT04gcmVnaXN0ZXIgYXMgdGhlc2UgbWF5IGhhdmUgbGFnaXRpbWF0ZWx5IGhhdmUgYmVlbg0KK21vZGlmaWVkIHdpdGhpbiB0aGUgY3JpdGljYWwgcmVnaW9uLiAqLw0KKyNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKQkJCV9hc20JCQkJCQkJCQlcDQorCQkJCQkJCQkJCU1PVkYJUE9TVERFQzEsIDEsIDAJCQkJXA0KKwkJCQkJCQkJCV9lbmRhc20JCQkJCQkJCQlcDQorCQkJCQkJCQkJaWYoIElOREYxICYgcG9ydEdMT0JBTF9JTlRfRU5BQkxFX0JJVCApCVwNCisJCQkJCQkJCQl7CQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7CQkJXA0KKwkJCQkJCQkJCX0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBUYXNrIHV0aWxpdGllcy4gKi8NCiBleHRlcm4gdm9pZCB2UG9ydFlpZWxkKCB2b2lkICk7DQotI2RlZmluZSBwb3J0WUlFTEQoKSAgICB2UG9ydFlpZWxkKCkNCisjZGVmaW5lIHBvcnRZSUVMRCgpCQkJCXZQb3J0WWllbGQoKQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAqLw0KLSNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KLSNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgICAgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBSZXF1aXJlZCBieSB0aGUga2VybmVsIGF3YXJlIGRlYnVnZ2VyLiAqLw0KICNpZmRlZiBfX0RFQlVHDQotICAgICNkZWZpbmUgcG9ydFJFTU9WRV9TVEFUSUNfUVVBTElGSUVSDQorCSNkZWZpbmUgcG9ydFJFTU9WRV9TVEFUSUNfUVVBTElGSUVSDQogI2VuZGlmDQogDQogDQotI2RlZmluZSBwb3J0Tk9QKCkgXA0KLSAgICBfYXNtICAgICAgICAgIFwNCi0gICAgTk9QICAgICAgICAgICBcDQotICAgIF9lbmRhc20NCisjZGVmaW5lIHBvcnROT1AoKQkJCQlfYXNtCVwNCisJCQkJCQkJCQlOT1AgXA0KKwkJCQkJCQkJX2VuZGFzbQ0KIA0KICNlbmRpZiAvKiBQT1JUTUFDUk9fSCAqLw0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL01QTEFCL1BJQzI0X2RzUElDL3BvcnQuYyBiL3BvcnRhYmxlL01QTEFCL1BJQzI0X2RzUElDL3BvcnQuYwppbmRleCA0NmQxODQzLi42MmY2MjFjIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9NUExBQi9QSUMyNF9kc1BJQy9wb3J0LmMKKysrIGIvcG9ydGFibGUvTVBMQUIvUElDMjRfZHNQSUMvcG9ydC5jCkBAIC0yNiwxMjkgKzI2LDEyOSBAQAogICovDQogDQogLyoNCi0gKiAgQ2hhbmdlcyBmcm9tIFY0LjIuMQ0KLSAqDQotICsgSW50cm9kdWNlZCB0aGUgY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWSBkZWZpbml0aW9uLg0KLSAqLw0KKwlDaGFuZ2VzIGZyb20gVjQuMi4xDQorDQorCSsgSW50cm9kdWNlZCB0aGUgY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWSBkZWZpbml0aW9uLg0KKyovDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLSogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFibGUuaCBmb3IgdGhlIFBJQzI0IHBvcnQuDQotKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyAqIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBQSUMyNCBwb3J0Lg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogU2NoZWR1bGVyIGluY2x1ZGUgZmlsZXMuICovDQogI2luY2x1ZGUgIkZyZWVSVE9TLmgiDQogI2luY2x1ZGUgInRhc2suaCINCiANCiAvKiBIYXJkd2FyZSBzcGVjaWZpY3MuICovDQotI2RlZmluZSBwb3J0QklUX1NFVCAgICAgICAgICAgMQ0KLSNkZWZpbmUgcG9ydFRJTUVSX1BSRVNDQUxFICAgIDgNCi0jZGVmaW5lIHBvcnRJTklUSUFMX1NSICAgICAgICAwDQorI2RlZmluZSBwb3J0QklUX1NFVCAxDQorI2RlZmluZSBwb3J0VElNRVJfUFJFU0NBTEUgOA0KKyNkZWZpbmUgcG9ydElOSVRJQUxfU1IJMA0KIA0KIC8qIERlZmluZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGFiaWxpdHkgd2l0aCBwcm9qZWN0IGNyZWF0ZWQgcHJpb3IgdG8NCi0gKiBGcmVlUlRPUy5vcmcgVjQuMy4wLiAqLw0KK0ZyZWVSVE9TLm9yZyBWNC4zLjAuICovDQogI2lmbmRlZiBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZDQotICAgICNkZWZpbmUgY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWSAgICAxDQorCSNkZWZpbmUgY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWSAxDQogI2VuZGlmDQogDQogLyogVXNlIF9UMUludGVycnVwdCBhcyB0aGUgaW50ZXJydXB0IGhhbmRsZXIgbmFtZSBpZiB0aGUgYXBwbGljYXRpb24gd3JpdGVyIGhhcw0KLSAqIG5vdCBwcm92aWRlZCB0aGVpciBvd24uICovDQorbm90IHByb3ZpZGVkIHRoZWlyIG93bi4gKi8NCiAjaWZuZGVmIGNvbmZpZ1RJQ0tfSU5URVJSVVBUX0hBTkRMRVINCi0gICAgI2RlZmluZSBjb25maWdUSUNLX0lOVEVSUlVQVF9IQU5ETEVSICAgIF9UMUludGVycnVwdA0KKwkjZGVmaW5lIGNvbmZpZ1RJQ0tfSU5URVJSVVBUX0hBTkRMRVIgX1QxSW50ZXJydXB0DQogI2VuZGlmIC8qIGNvbmZpZ1RJQ0tfSU5URVJSVVBUX0hBTkRMRVIgKi8NCiANCiAvKiBUaGUgcHJvZ3JhbSBjb3VudGVyIGlzIG9ubHkgMjMgYml0cy4gKi8NCi0jZGVmaW5lIHBvcnRVTlVTRURfUFJfQklUUyAgICAweDdmDQorI2RlZmluZSBwb3J0VU5VU0VEX1BSX0JJVFMJMHg3Zg0KIA0KIC8qIFJlY29yZHMgdGhlIG5lc3RpbmcgZGVwdGggb2YgY2FsbHMgdG8gcG9ydEVOVEVSX0NSSVRJQ0FMKCkuICovDQogVUJhc2VUeXBlX3QgdXhDcml0aWNhbE5lc3RpbmcgPSAweGVmOw0KIA0KICNpZiBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZICE9IDENCi0gICAgI2Vycm9yIElmIGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkgaXMgbm90IDEgdGhlbiB0aGUgIzMyIGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zIG5lZWRzIGNoYW5naW5nIHRvIGVxdWFsIHRoZSBwb3J0SU5URVJSVVBUX0JJVFMgdmFsdWUsIHdoaWNoIGlzICggY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWSA8PCA1ICkNCisJI2Vycm9yIElmIGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkgaXMgbm90IDEgdGhlbiB0aGUgIzMyIGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zIG5lZWRzIGNoYW5naW5nIHRvIGVxdWFsIHRoZSBwb3J0SU5URVJSVVBUX0JJVFMgdmFsdWUsIHdoaWNoIGlzICggY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWSA8PCA1ICkNCiAjZW5kaWYNCiANCi0jaWYgZGVmaW5lZCggX19QSUMyNEVfXyApIHx8IGRlZmluZWQoIF9fUElDMjRGX18gKSB8fCBkZWZpbmVkKCBfX1BJQzI0RktfXyApIHx8IGRlZmluZWQoIF9fUElDMjRIX18gKQ0KKyNpZiBkZWZpbmVkKCBfX1BJQzI0RV9fICkgfHwgZGVmaW5lZCAoIF9fUElDMjRGX18gKSB8fCBkZWZpbmVkKCBfX1BJQzI0RktfXyApIHx8IGRlZmluZWQoIF9fUElDMjRIX18gKQ0KIA0KICAgICAjaWZkZWYgX19IQVNfRURTX18NCi0gICAgICAgICNkZWZpbmUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgYXNtIHZvbGF0aWxlICggIk1PVglfcHhDdXJyZW50VENCLCBXMAkJXG4iLyogUmVzdG9yZSB0aGUgc3RhY2sgcG9pbnRlciBmb3IgdGhlIHRhc2suICovICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICJNT1YJW1cwXSwgVzE1CQkJCVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAiUE9QCVcwCQkJCQkJXG4iLyogUmVzdG9yZSB0aGUgY3JpdGljYWwgbmVzdGluZyBjb3VudGVyIGZvciB0aGUgdGFzay4gKi9cDQotICAgICAgICAgICAgICAgICAgICJNT1YJVzAsIF91eENyaXRpY2FsTmVzdGluZwlcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgIlBPUAlEU1dQQUcJCQkJCVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAiUE9QICAgIERTUlBBRwkJCQkJXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgIlBPUAlDT1JDT04JCQkJCVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAiUE9QCVRCTFBBRwkJCQkJXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICJQT1AJUkNPVU5UCQkJCQlcbiIvKiBSZXN0b3JlIHRoZSByZWdpc3RlcnMgZnJvbSB0aGUgc3RhY2suICovICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgIlBPUAlXMTQJCQkJCQlcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgIlBPUC5ECVcxMgkJCQkJCVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICJQT1AuRAlXMTAJCQkJCQlcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAiUE9QLkQJVzgJCQkJCQlcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAiUE9QLkQJVzYJCQkJCQlcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAiUE9QLkQJVzQJCQkJCQlcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAiUE9QLkQJVzIJCQkJCQlcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAiUE9QLkQJVzAJCQkJCQlcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAiUE9QCVNSCQkJCQkJICAiKTsNCi0gICAgI2Vsc2UgLyogX19IQVNfRURTX18gKi8NCi0gICAgICAgICNkZWZpbmUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgYXNtIHZvbGF0aWxlICggIk1PVglfcHhDdXJyZW50VENCLCBXMAkJXG4iLyogUmVzdG9yZSB0aGUgc3RhY2sgcG9pbnRlciBmb3IgdGhlIHRhc2suICovICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICJNT1YJW1cwXSwgVzE1CQkJCVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAiUE9QCVcwCQkJCQkJXG4iLyogUmVzdG9yZSB0aGUgY3JpdGljYWwgbmVzdGluZyBjb3VudGVyIGZvciB0aGUgdGFzay4gKi9cDQotICAgICAgICAgICAgICAgICAgICJNT1YJVzAsIF91eENyaXRpY2FsTmVzdGluZwlcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgIlBPUAlQU1ZQQUcJCQkJCVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAiUE9QCUNPUkNPTgkJCQkJXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICJQT1AJVEJMUEFHCQkJCQlcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgIlBPUAlSQ09VTlQJCQkJCVxuIi8qIFJlc3RvcmUgdGhlIHJlZ2lzdGVycyBmcm9tIHRoZSBzdGFjay4gKi8gICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAiUE9QCVcxNAkJCQkJCVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAiUE9QLkQJVzEyCQkJCQkJXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgIlBPUC5ECVcxMAkJCQkJCVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICJQT1AuRAlXOAkJCQkJCVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICJQT1AuRAlXNgkJCQkJCVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICJQT1AuRAlXNAkJCQkJCVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICJQT1AuRAlXMgkJCQkJCVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICJQT1AuRAlXMAkJCQkJCVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICJQT1AJU1IJCQkJCQkgICIpOw0KLSAgICAjZW5kaWYgLyogX19IQVNfRURTX18gKi8NCisJCSNkZWZpbmUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCWFzbSB2b2xhdGlsZSgJIk1PVglfcHhDdXJyZW50VENCLCBXMAkJXG4iCS8qIFJlc3RvcmUgdGhlIHN0YWNrIHBvaW50ZXIgZm9yIHRoZSB0YXNrLiAqLwkJXA0KKwkJCQkJCQkiTU9WCVtXMF0sIFcxNQkJCQlcbiIJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkiUE9QCVcwCQkJCQkJXG4iCS8qIFJlc3RvcmUgdGhlIGNyaXRpY2FsIG5lc3RpbmcgY291bnRlciBmb3IgdGhlIHRhc2suICovCVwNCisJCQkJCQkJIk1PVglXMCwgX3V4Q3JpdGljYWxOZXN0aW5nCVxuIgkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCSJQT1AJRFNXUEFHCQkJCQlcbiIJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkiUE9QICAgIERTUlBBRwkJCQkJXG4iCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJIlBPUAlDT1JDT04JCQkJCVxuIgkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCSJQT1AJVEJMUEFHCQkJCQlcbiIJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkiUE9QCVJDT1VOVAkJCQkJXG4iCS8qIFJlc3RvcmUgdGhlIHJlZ2lzdGVycyBmcm9tIHRoZSBzdGFjay4gKi8JCQkJCVwNCisJCQkJCQkJIlBPUAlXMTQJCQkJCQlcbiIJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkiUE9QLkQJVzEyCQkJCQkJXG4iCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJIlBPUC5ECVcxMAkJCQkJCVxuIgkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCSJQT1AuRAlXOAkJCQkJCVxuIgkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCSJQT1AuRAlXNgkJCQkJCVxuIgkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCSJQT1AuRAlXNAkJCQkJCVxuIgkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCSJQT1AuRAlXMgkJCQkJCVxuIgkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCSJQT1AuRAlXMAkJCQkJCVxuIgkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCSJQT1AJU1IJCQkJCQkgICIgKTsNCisJI2Vsc2UgLyogX19IQVNfRURTX18gKi8NCisJCSNkZWZpbmUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCQlhc20gdm9sYXRpbGUoCSJNT1YJX3B4Q3VycmVudFRDQiwgVzAJCVxuIgkvKiBSZXN0b3JlIHRoZSBzdGFjayBwb2ludGVyIGZvciB0aGUgdGFzay4gKi8JCQkJXA0KKwkJCQkJCQkiTU9WCVtXMF0sIFcxNQkJCQlcbiIJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkiUE9QCVcwCQkJCQkJXG4iCS8qIFJlc3RvcmUgdGhlIGNyaXRpY2FsIG5lc3RpbmcgY291bnRlciBmb3IgdGhlIHRhc2suICovCVwNCisJCQkJCQkJIk1PVglXMCwgX3V4Q3JpdGljYWxOZXN0aW5nCVxuIgkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCSJQT1AJUFNWUEFHCQkJCQlcbiIJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkiUE9QCUNPUkNPTgkJCQkJXG4iCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJIlBPUAlUQkxQQUcJCQkJCVxuIgkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCSJQT1AJUkNPVU5UCQkJCQlcbiIJLyogUmVzdG9yZSB0aGUgcmVnaXN0ZXJzIGZyb20gdGhlIHN0YWNrLiAqLwkJCQkJXA0KKwkJCQkJCQkiUE9QCVcxNAkJCQkJCVxuIgkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCSJQT1AuRAlXMTIJCQkJCQlcbiIJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkiUE9QLkQJVzEwCQkJCQkJXG4iCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJIlBPUC5ECVc4CQkJCQkJXG4iCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJIlBPUC5ECVc2CQkJCQkJXG4iCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJIlBPUC5ECVc0CQkJCQkJXG4iCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJIlBPUC5ECVcyCQkJCQkJXG4iCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJIlBPUC5ECVcwCQkJCQkJXG4iCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJIlBPUAlTUgkJCQkJCSAgIiApOw0KKwkJI2VuZGlmIC8qIF9fSEFTX0VEU19fICovDQogI2VuZGlmIC8qIE1QTEFCX1BJQzI0X1BPUlQgKi8NCiANCiAjaWYgZGVmaW5lZCggX19kc1BJQzMwRl9fICkgfHwgZGVmaW5lZCggX19kc1BJQzMzRl9fICkNCiANCi0gICAgI2RlZmluZSBwb3J0UkVTVE9SRV9DT05URVhUKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgYXNtIHZvbGF0aWxlICggIk1PVglfcHhDdXJyZW50VENCLCBXMAkJXG4iLyogUmVzdG9yZSB0aGUgc3RhY2sgcG9pbnRlciBmb3IgdGhlIHRhc2suICovICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICJNT1YJW1cwXSwgVzE1CQkJCVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAiUE9QCVcwCQkJCQkJXG4iLyogUmVzdG9yZSB0aGUgY3JpdGljYWwgbmVzdGluZyBjb3VudGVyIGZvciB0aGUgdGFzay4gKi9cDQotICAgICAgICAgICAgICAgICAgICJNT1YJVzAsIF91eENyaXRpY2FsTmVzdGluZwlcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgIlBPUAlQU1ZQQUcJCQkJCVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAiUE9QCUNPUkNPTgkJCQkJXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICJQT1AJRE9FTkRICQkJCQlcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgIlBPUAlET0VOREwJCQkJCVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAiUE9QCURPU1RBUlRICQkJCVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAiUE9QCURPU1RBUlRMCQkJCVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAiUE9QCURDT1VOVAkJCQkJXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICJQT1AJQUNDQlUJCQkJCVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAiUE9QCUFDQ0JICQkJCQlcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgIlBPUAlBQ0NCTAkJCQkJXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICJQT1AJQUNDQVUJCQkJCVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAiUE9QCUFDQ0FICQkJCQlcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgIlBPUAlBQ0NBTAkJCQkJXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICJQT1AJVEJMUEFHCQkJCQlcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgIlBPUAlSQ09VTlQJCQkJCVxuIi8qIFJlc3RvcmUgdGhlIHJlZ2lzdGVycyBmcm9tIHRoZSBzdGFjay4gKi8gICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAiUE9QCVcxNAkJCQkJCVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAiUE9QLkQJVzEyCQkJCQkJXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgIlBPUC5ECVcxMAkJCQkJCVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICJQT1AuRAlXOAkJCQkJCVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICJQT1AuRAlXNgkJCQkJCVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICJQT1AuRAlXNAkJCQkJCVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICJQT1AuRAlXMgkJCQkJCVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICJQT1AuRAlXMAkJCQkJCVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICJQT1AJU1IJCQkJCQkgICIpOw0KKwkjZGVmaW5lIHBvcnRSRVNUT1JFX0NPTlRFWFQoKQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQlhc20gdm9sYXRpbGUoCSJNT1YJX3B4Q3VycmVudFRDQiwgVzAJCVxuIgkvKiBSZXN0b3JlIHRoZSBzdGFjayBwb2ludGVyIGZvciB0aGUgdGFzay4gKi8JCQkJXA0KKwkJCQkJCSJNT1YJW1cwXSwgVzE1CQkJCVxuIgkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJIlBPUAlXMAkJCQkJCVxuIgkvKiBSZXN0b3JlIHRoZSBjcml0aWNhbCBuZXN0aW5nIGNvdW50ZXIgZm9yIHRoZSB0YXNrLiAqLwlcDQorCQkJCQkJIk1PVglXMCwgX3V4Q3JpdGljYWxOZXN0aW5nCVxuIgkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJIlBPUAlQU1ZQQUcJCQkJCVxuIgkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJIlBPUAlDT1JDT04JCQkJCVxuIgkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJIlBPUAlET0VOREgJCQkJCVxuIgkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJIlBPUAlET0VOREwJCQkJCVxuIgkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJIlBPUAlET1NUQVJUSAkJCQlcbiIJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCSJQT1AJRE9TVEFSVEwJCQkJXG4iCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkiUE9QCURDT1VOVAkJCQkJXG4iCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkiUE9QCUFDQ0JVCQkJCQlcbiIJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCSJQT1AJQUNDQkgJCQkJCVxuIgkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJIlBPUAlBQ0NCTAkJCQkJXG4iCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkiUE9QCUFDQ0FVCQkJCQlcbiIJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCSJQT1AJQUNDQUgJCQkJCVxuIgkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJIlBPUAlBQ0NBTAkJCQkJXG4iCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkiUE9QCVRCTFBBRwkJCQkJXG4iCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkiUE9QCVJDT1VOVAkJCQkJXG4iCS8qIFJlc3RvcmUgdGhlIHJlZ2lzdGVycyBmcm9tIHRoZSBzdGFjay4gKi8JCQkJCVwNCisJCQkJCQkiUE9QCVcxNAkJCQkJCVxuIgkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJIlBPUC5ECVcxMgkJCQkJCVxuIgkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJIlBPUC5ECVcxMAkJCQkJCVxuIgkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJIlBPUC5ECVc4CQkJCQkJXG4iCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkiUE9QLkQJVzYJCQkJCQlcbiIJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCSJQT1AuRAlXNAkJCQkJCVxuIgkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJIlBPUC5ECVcyCQkJCQkJXG4iCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkiUE9QLkQJVzAJCQkJCQlcbiIJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCSJQT1AJU1IJCQkJCQkgICIgKTsNCiANCiAjZW5kaWYgLyogTVBMQUJfRFNQSUNfUE9SVCAqLw0KIA0KICNpZm5kZWYgcG9ydFJFU1RPUkVfQ09OVEVYVA0KLSAgICAjZXJyb3IgVW5yZWNvZ25pc2VkIGRldmljZSBzZWxlY3RlZA0KKwkjZXJyb3IgVW5yZWNvZ25pc2VkIGRldmljZSBzZWxlY3RlZA0KIA0KLS8qIE5vdGU6ICBkc1BJQyBwYXJ0cyB3aXRoIEVEUyBhcmUgbm90IHN1cHBvcnRlZCBhcyB0aGVyZSBpcyBubyBlYXN5IHdheSB0bw0KLSAqIHJlY292ZXIgdGhlIGhhcmR3YXJlIHN0YWNrZWQgY29waWVzIGZvciBET0NPVU5ULCBET0hJR0gsIERPTE9XLiAqLw0KKwkvKiBOb3RlOiAgZHNQSUMgcGFydHMgd2l0aCBFRFMgYXJlIG5vdCBzdXBwb3J0ZWQgYXMgdGhlcmUgaXMgbm8gZWFzeSB3YXkgdG8NCisJcmVjb3ZlciB0aGUgaGFyZHdhcmUgc3RhY2tlZCBjb3BpZXMgZm9yIERPQ09VTlQsIERPSElHSCwgRE9MT1cuICovDQogI2VuZGlmDQogDQogLyoNCkBAIC0xNTksMTc3ICsxNTksMTc1IEBACiAvKg0KICAqIFNlZSBoZWFkZXIgZmlsZSBmb3IgZGVzY3JpcHRpb24uDQogICovDQotU3RhY2tUeXBlX3QgKiBweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICogcHhUb3BPZlN0YWNrLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYXNrRnVuY3Rpb25fdCBweENvZGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KK1N0YWNrVHlwZV90ICpweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICpweFRvcE9mU3RhY2ssIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzICkNCiB7DQotICAgIHVpbnQxNl90IHVzQ29kZTsNCi0gICAgVUJhc2VUeXBlX3QgaTsNCit1aW50MTZfdCB1c0NvZGU7DQorVUJhc2VUeXBlX3QgaTsNCiANCi0gICAgY29uc3QgU3RhY2tUeXBlX3QgeEluaXRpYWxTdGFja1tdID0NCi0gICAgew0KLSAgICAgICAgMHgxMTExLCAvKiBXMSAqLw0KLSAgICAgICAgMHgyMjIyLCAvKiBXMiAqLw0KLSAgICAgICAgMHgzMzMzLCAvKiBXMyAqLw0KLSAgICAgICAgMHg0NDQ0LCAvKiBXNCAqLw0KLSAgICAgICAgMHg1NTU1LCAvKiBXNSAqLw0KLSAgICAgICAgMHg2NjY2LCAvKiBXNiAqLw0KLSAgICAgICAgMHg3Nzc3LCAvKiBXNyAqLw0KLSAgICAgICAgMHg4ODg4LCAvKiBXOCAqLw0KLSAgICAgICAgMHg5OTk5LCAvKiBXOSAqLw0KLSAgICAgICAgMHhhYWFhLCAvKiBXMTAgKi8NCi0gICAgICAgIDB4YmJiYiwgLyogVzExICovDQotICAgICAgICAweGNjY2MsIC8qIFcxMiAqLw0KLSAgICAgICAgMHhkZGRkLCAvKiBXMTMgKi8NCi0gICAgICAgIDB4ZWVlZSwgLyogVzE0ICovDQotICAgICAgICAweGNkY2UsIC8qIFJDT1VOVCAqLw0KLSAgICAgICAgMHhhYmFjLCAvKiBUQkxQQUcgKi8NCitjb25zdCBTdGFja1R5cGVfdCB4SW5pdGlhbFN0YWNrW10gPQ0KK3sNCisJMHgxMTExLAkvKiBXMSAqLw0KKwkweDIyMjIsIC8qIFcyICovDQorCTB4MzMzMywgLyogVzMgKi8NCisJMHg0NDQ0LCAvKiBXNCAqLw0KKwkweDU1NTUsIC8qIFc1ICovDQorCTB4NjY2NiwgLyogVzYgKi8NCisJMHg3Nzc3LCAvKiBXNyAqLw0KKwkweDg4ODgsIC8qIFc4ICovDQorCTB4OTk5OSwgLyogVzkgKi8NCisJMHhhYWFhLCAvKiBXMTAgKi8NCisJMHhiYmJiLCAvKiBXMTEgKi8NCisJMHhjY2NjLCAvKiBXMTIgKi8NCisJMHhkZGRkLCAvKiBXMTMgKi8NCisJMHhlZWVlLCAvKiBXMTQgKi8NCisJMHhjZGNlLCAvKiBSQ09VTlQgKi8NCisJMHhhYmFjLCAvKiBUQkxQQUcgKi8NCiANCi0gICAgICAgIC8qIGRzUElDIHNwZWNpZmljIHJlZ2lzdGVycy4gKi8NCi0gICAgICAgICNpZmRlZiBNUExBQl9EU1BJQ19QT1JUDQotICAgICAgICAgICAgMHgwMjAyLCAvKiBBQ0NBTCAqLw0KLSAgICAgICAgICAgIDB4MDMwMywgLyogQUNDQUggKi8NCi0gICAgICAgICAgICAweDA0MDQsIC8qIEFDQ0FVICovDQotICAgICAgICAgICAgMHgwNTA1LCAvKiBBQ0NCTCAqLw0KLSAgICAgICAgICAgIDB4MDYwNiwgLyogQUNDQkggKi8NCi0gICAgICAgICAgICAweDA3MDcsIC8qIEFDQ0JVICovDQotICAgICAgICAgICAgMHgwODA4LCAvKiBEQ09VTlQgKi8NCi0gICAgICAgICAgICAweDA5MGEsIC8qIERPU1RBUlRMICovDQotICAgICAgICAgICAgMHgxMDEwLCAvKiBET1NUQVJUSCAqLw0KLSAgICAgICAgICAgIDB4MTExMCwgLyogRE9FTkRMICovDQotICAgICAgICAgICAgMHgxMjEyLCAvKiBET0VOREggKi8NCi0gICAgICAgICNlbmRpZiAvKiBpZmRlZiBNUExBQl9EU1BJQ19QT1JUICovDQotICAgIH07DQorCS8qIGRzUElDIHNwZWNpZmljIHJlZ2lzdGVycy4gKi8NCisJI2lmZGVmIE1QTEFCX0RTUElDX1BPUlQNCisJCTB4MDIwMiwgLyogQUNDQUwgKi8NCisJCTB4MDMwMywgLyogQUNDQUggKi8NCisJCTB4MDQwNCwgLyogQUNDQVUgKi8NCisJCTB4MDUwNSwgLyogQUNDQkwgKi8NCisJCTB4MDYwNiwgLyogQUNDQkggKi8NCisJCTB4MDcwNywgLyogQUNDQlUgKi8NCisJCTB4MDgwOCwgLyogRENPVU5UICovDQorCQkweDA5MGEsIC8qIERPU1RBUlRMICovDQorCQkweDEwMTAsIC8qIERPU1RBUlRIICovDQorCQkweDExMTAsIC8qIERPRU5ETCAqLw0KKwkJMHgxMjEyLCAvKiBET0VOREggKi8NCisJI2VuZGlmDQorfTsNCiANCi0gICAgLyogU2V0dXAgdGhlIHN0YWNrIGFzIGlmIGEgeWllbGQgaGFkIG9jY3VycmVkLg0KLSAgICAgKg0KLSAgICAgKiBTYXZlIHRoZSBsb3cgYnl0ZXMgb2YgdGhlIHByb2dyYW0gY291bnRlci4gKi8NCi0gICAgdXNDb2RlID0gKCB1aW50MTZfdCApIHB4Q29kZTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSB1c0NvZGU7DQotICAgIHB4VG9wT2ZTdGFjaysrOw0KKwkvKiBTZXR1cCB0aGUgc3RhY2sgYXMgaWYgYSB5aWVsZCBoYWQgb2NjdXJyZWQuDQogDQotICAgIC8qIFNhdmUgdGhlIGhpZ2ggYnl0ZSBvZiB0aGUgcHJvZ3JhbSBjb3VudGVyLiAgVGhpcyB3aWxsIGFsd2F5cyBiZSB6ZXJvDQotICAgICAqIGhlcmUgYXMgaXQgaXMgcGFzc2VkIGluIGEgMTZiaXQgcG9pbnRlci4gIElmIHRoZSBhZGRyZXNzIGlzIGdyZWF0ZXIgdGhhbg0KLSAgICAgKiAxNiBiaXRzIHRoZW4gdGhlIHBvaW50ZXIgd2lsbCBwb2ludCB0byBhIGp1bXAgdGFibGUuICovDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMDsNCi0gICAgcHhUb3BPZlN0YWNrKys7DQorCVNhdmUgdGhlIGxvdyBieXRlcyBvZiB0aGUgcHJvZ3JhbSBjb3VudGVyLiAqLw0KKwl1c0NvZGUgPSAoIHVpbnQxNl90ICkgcHhDb2RlOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHVzQ29kZTsNCisJcHhUb3BPZlN0YWNrKys7DQogDQotICAgIC8qIFN0YXR1cyByZWdpc3RlciB3aXRoIGludGVycnVwdHMgZW5hYmxlZC4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9IHBvcnRJTklUSUFMX1NSOw0KLSAgICBweFRvcE9mU3RhY2srKzsNCisJLyogU2F2ZSB0aGUgaGlnaCBieXRlIG9mIHRoZSBwcm9ncmFtIGNvdW50ZXIuICBUaGlzIHdpbGwgYWx3YXlzIGJlIHplcm8NCisJaGVyZSBhcyBpdCBpcyBwYXNzZWQgaW4gYSAxNmJpdCBwb2ludGVyLiAgSWYgdGhlIGFkZHJlc3MgaXMgZ3JlYXRlciB0aGFuDQorCTE2IGJpdHMgdGhlbiB0aGUgcG9pbnRlciB3aWxsIHBvaW50IHRvIGEganVtcCB0YWJsZS4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAwOw0KKwlweFRvcE9mU3RhY2srKzsNCiANCi0gICAgLyogUGFyYW1ldGVycyBhcmUgcGFzc2VkIGluIFcwLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB2UGFyYW1ldGVyczsNCi0gICAgcHhUb3BPZlN0YWNrKys7DQorCS8qIFN0YXR1cyByZWdpc3RlciB3aXRoIGludGVycnVwdHMgZW5hYmxlZC4gKi8NCisJKnB4VG9wT2ZTdGFjayA9IHBvcnRJTklUSUFMX1NSOw0KKwlweFRvcE9mU3RhY2srKzsNCiANCi0gICAgZm9yKCBpID0gMDsgaSA8ICggc2l6ZW9mKCB4SW5pdGlhbFN0YWNrICkgLyBzaXplb2YoIFN0YWNrVHlwZV90ICkgKTsgaSsrICkNCi0gICAgew0KLSAgICAgICAgKnB4VG9wT2ZTdGFjayA9IHhJbml0aWFsU3RhY2tbIGkgXTsNCi0gICAgICAgIHB4VG9wT2ZTdGFjaysrOw0KLSAgICB9DQorCS8qIFBhcmFtZXRlcnMgYXJlIHBhc3NlZCBpbiBXMC4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwdlBhcmFtZXRlcnM7DQorCXB4VG9wT2ZTdGFjaysrOw0KIA0KLSAgICAqcHhUb3BPZlN0YWNrID0gQ09SQ09OOw0KLSAgICBweFRvcE9mU3RhY2srKzsNCisJZm9yKCBpID0gMDsgaSA8ICggc2l6ZW9mKCB4SW5pdGlhbFN0YWNrICkgLyBzaXplb2YoIFN0YWNrVHlwZV90ICkgKTsgaSsrICkNCisJew0KKwkJKnB4VG9wT2ZTdGFjayA9IHhJbml0aWFsU3RhY2tbIGkgXTsNCisJCXB4VG9wT2ZTdGFjaysrOw0KKwl9DQogDQotICAgICNpZiBkZWZpbmVkKCBfX0hBU19FRFNfXyApDQotICAgICAgICAqcHhUb3BPZlN0YWNrID0gRFNSUEFHOw0KLSAgICAgICAgcHhUb3BPZlN0YWNrKys7DQotICAgICAgICAqcHhUb3BPZlN0YWNrID0gRFNXUEFHOw0KLSAgICAgICAgcHhUb3BPZlN0YWNrKys7DQotICAgICNlbHNlIC8qIF9fSEFTX0VEU19fICovDQotICAgICAgICAqcHhUb3BPZlN0YWNrID0gUFNWUEFHOw0KLSAgICAgICAgcHhUb3BPZlN0YWNrKys7DQotICAgICNlbmRpZiAvKiBfX0hBU19FRFNfXyAqLw0KKwkqcHhUb3BPZlN0YWNrID0gQ09SQ09OOw0KKwlweFRvcE9mU3RhY2srKzsNCiANCi0gICAgLyogRmluYWxseSB0aGUgY3JpdGljYWwgbmVzdGluZyBkZXB0aC4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MDA7DQotICAgIHB4VG9wT2ZTdGFjaysrOw0KKwkjaWYgZGVmaW5lZChfX0hBU19FRFNfXykNCisJCSpweFRvcE9mU3RhY2sgPSBEU1JQQUc7DQorCQlweFRvcE9mU3RhY2srKzsNCisJCSpweFRvcE9mU3RhY2sgPSBEU1dQQUc7DQorCQlweFRvcE9mU3RhY2srKzsNCisJI2Vsc2UgLyogX19IQVNfRURTX18gKi8NCisJCSpweFRvcE9mU3RhY2sgPSBQU1ZQQUc7DQorCQlweFRvcE9mU3RhY2srKzsNCisJI2VuZGlmIC8qIF9fSEFTX0VEU19fICovDQogDQotICAgIHJldHVybiBweFRvcE9mU3RhY2s7DQorCS8qIEZpbmFsbHkgdGhlIGNyaXRpY2FsIG5lc3RpbmcgZGVwdGguICovDQorCSpweFRvcE9mU3RhY2sgPSAweDAwOw0KKwlweFRvcE9mU3RhY2srKzsNCisNCisJcmV0dXJuIHB4VG9wT2ZTdGFjazsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogQmFzZVR5cGVfdCB4UG9ydFN0YXJ0U2NoZWR1bGVyKCB2b2lkICkNCiB7DQotICAgIC8qIFNldHVwIGEgdGltZXIgZm9yIHRoZSB0aWNrIElTUi4gKi8NCi0gICAgdkFwcGxpY2F0aW9uU2V0dXBUaWNrVGltZXJJbnRlcnJ1cHQoKTsNCisJLyogU2V0dXAgYSB0aW1lciBmb3IgdGhlIHRpY2sgSVNSLiAqLw0KKwl2QXBwbGljYXRpb25TZXR1cFRpY2tUaW1lckludGVycnVwdCgpOw0KIA0KLSAgICAvKiBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBmaXJzdCB0YXNrIHRvIHJ1bi4gKi8NCi0gICAgcG9ydFJFU1RPUkVfQ09OVEVYVCgpOw0KKwkvKiBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBmaXJzdCB0YXNrIHRvIHJ1bi4gKi8NCisJcG9ydFJFU1RPUkVfQ09OVEVYVCgpOw0KIA0KLSAgICAvKiBTaW11bGF0ZSB0aGUgZW5kIG9mIHRoZSB5aWVsZCBmdW5jdGlvbi4gKi8NCi0gICAgYXNtIHZvbGF0aWxlICggInJldHVybiIgKTsNCisJLyogU2ltdWxhdGUgdGhlIGVuZCBvZiB0aGUgeWllbGQgZnVuY3Rpb24uICovDQorCWFzbSB2b2xhdGlsZSAoICJyZXR1cm4iICk7DQogDQotICAgIC8qIFNob3VsZCBub3QgcmVhY2ggaGVyZS4gKi8NCi0gICAgcmV0dXJuIHBkVFJVRTsNCisJLyogU2hvdWxkIG5vdCByZWFjaCBoZXJlLiAqLw0KKwlyZXR1cm4gcGRUUlVFOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0RW5kU2NoZWR1bGVyKCB2b2lkICkNCiB7DQotICAgIC8qIE5vdCBpbXBsZW1lbnRlZCBpbiBwb3J0cyB3aGVyZSB0aGVyZSBpcyBub3RoaW5nIHRvIHJldHVybiB0by4NCi0gICAgICogQXJ0aWZpY2lhbGx5IGZvcmNlIGFuIGFzc2VydC4gKi8NCi0gICAgY29uZmlnQVNTRVJUKCB1eENyaXRpY2FsTmVzdGluZyA9PSAxMDAwVUwgKTsNCisJLyogTm90IGltcGxlbWVudGVkIGluIHBvcnRzIHdoZXJlIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmV0dXJuIHRvLg0KKwlBcnRpZmljaWFsbHkgZm9yY2UgYW4gYXNzZXJ0LiAqLw0KKwljb25maWdBU1NFUlQoIHV4Q3JpdGljYWxOZXN0aW5nID09IDEwMDBVTCApOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKg0KICAqIFNldHVwIGEgdGltZXIgZm9yIGEgcmVndWxhciB0aWNrLg0KICAqLw0KLV9fYXR0cmlidXRlX18oICggd2VhayApICkgdm9pZCB2QXBwbGljYXRpb25TZXR1cFRpY2tUaW1lckludGVycnVwdCggdm9pZCApDQorX19hdHRyaWJ1dGVfXygoIHdlYWsgKSkgdm9pZCB2QXBwbGljYXRpb25TZXR1cFRpY2tUaW1lckludGVycnVwdCggdm9pZCApDQogew0KLSAgICBjb25zdCB1aW50MzJfdCB1bENvbXBhcmVNYXRjaCA9ICggKCBjb25maWdDUFVfQ0xPQ0tfSFogLyBwb3J0VElNRVJfUFJFU0NBTEUgKSAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApIC0gMTsNCitjb25zdCB1aW50MzJfdCB1bENvbXBhcmVNYXRjaCA9ICggKCBjb25maWdDUFVfQ0xPQ0tfSFogLyBwb3J0VElNRVJfUFJFU0NBTEUgKSAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApIC0gMTsNCiANCi0gICAgLyogUHJlc2NhbGUgb2YgOC4gKi8NCi0gICAgVDFDT04gPSAwOw0KLSAgICBUTVIxID0gMDsNCisJLyogUHJlc2NhbGUgb2YgOC4gKi8NCisJVDFDT04gPSAwOw0KKwlUTVIxID0gMDsNCiANCi0gICAgUFIxID0gKCB1aW50MTZfdCApIHVsQ29tcGFyZU1hdGNoOw0KKwlQUjEgPSAoIHVpbnQxNl90ICkgdWxDb21wYXJlTWF0Y2g7DQogDQotICAgIC8qIFNldHVwIHRpbWVyIDEgaW50ZXJydXB0IHByaW9yaXR5LiAqLw0KLSAgICBJUEMwYml0cy5UMUlQID0gY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWTsNCisJLyogU2V0dXAgdGltZXIgMSBpbnRlcnJ1cHQgcHJpb3JpdHkuICovDQorCUlQQzBiaXRzLlQxSVAgPSBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZOw0KIA0KLSAgICAvKiBDbGVhciB0aGUgaW50ZXJydXB0IGFzIGEgc3RhcnRpbmcgY29uZGl0aW9uLiAqLw0KLSAgICBJRlMwYml0cy5UMUlGID0gMDsNCisJLyogQ2xlYXIgdGhlIGludGVycnVwdCBhcyBhIHN0YXJ0aW5nIGNvbmRpdGlvbi4gKi8NCisJSUZTMGJpdHMuVDFJRiA9IDA7DQogDQotICAgIC8qIEVuYWJsZSB0aGUgaW50ZXJydXB0LiAqLw0KLSAgICBJRUMwYml0cy5UMUlFID0gMTsNCisJLyogRW5hYmxlIHRoZSBpbnRlcnJ1cHQuICovDQorCUlFQzBiaXRzLlQxSUUgPSAxOw0KIA0KLSAgICAvKiBTZXR1cCB0aGUgcHJlc2NhbGUgdmFsdWUuICovDQotICAgIFQxQ09OYml0cy5UQ0tQUzAgPSAxOw0KLSAgICBUMUNPTmJpdHMuVENLUFMxID0gMDsNCisJLyogU2V0dXAgdGhlIHByZXNjYWxlIHZhbHVlLiAqLw0KKwlUMUNPTmJpdHMuVENLUFMwID0gMTsNCisJVDFDT05iaXRzLlRDS1BTMSA9IDA7DQogDQotICAgIC8qIFN0YXJ0IHRoZSB0aW1lci4gKi8NCi0gICAgVDFDT05iaXRzLlRPTiA9IDE7DQorCS8qIFN0YXJ0IHRoZSB0aW1lci4gKi8NCisJVDFDT05iaXRzLlRPTiA9IDE7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICkNCiB7DQotICAgIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsNCi0gICAgdXhDcml0aWNhbE5lc3RpbmcrKzsNCisJcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOw0KKwl1eENyaXRpY2FsTmVzdGluZysrOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICkNCiB7DQotICAgIGNvbmZpZ0FTU0VSVCggdXhDcml0aWNhbE5lc3RpbmcgKTsNCi0gICAgdXhDcml0aWNhbE5lc3RpbmctLTsNCi0NCi0gICAgaWYoIHV4Q3JpdGljYWxOZXN0aW5nID09IDAgKQ0KLSAgICB7DQotICAgICAgICBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKTsNCi0gICAgfQ0KKwljb25maWdBU1NFUlQoIHV4Q3JpdGljYWxOZXN0aW5nICk7DQorCXV4Q3JpdGljYWxOZXN0aW5nLS07DQorCWlmKCB1eENyaXRpY2FsTmVzdGluZyA9PSAwICkNCisJew0KKwkJcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7DQorCX0NCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQotdm9pZCBfX2F0dHJpYnV0ZV9fKCAoIF9faW50ZXJydXB0X18sIGF1dG9fcHN2ICkgKSBjb25maWdUSUNLX0lOVEVSUlVQVF9IQU5ETEVSKCB2b2lkICkNCit2b2lkIF9fYXR0cmlidXRlX18oKF9faW50ZXJydXB0X18sIGF1dG9fcHN2KSkgY29uZmlnVElDS19JTlRFUlJVUFRfSEFORExFUiggdm9pZCApDQogew0KLSAgICAvKiBDbGVhciB0aGUgdGltZXIgaW50ZXJydXB0LiAqLw0KLSAgICBJRlMwYml0cy5UMUlGID0gMDsNCisJLyogQ2xlYXIgdGhlIHRpbWVyIGludGVycnVwdC4gKi8NCisJSUZTMGJpdHMuVDFJRiA9IDA7DQogDQotICAgIGlmKCB4VGFza0luY3JlbWVudFRpY2soKSAhPSBwZEZBTFNFICkNCi0gICAgew0KLSAgICAgICAgcG9ydFlJRUxEKCk7DQotICAgIH0NCisJaWYoIHhUYXNrSW5jcmVtZW50VGljaygpICE9IHBkRkFMU0UgKQ0KKwl7DQorCQlwb3J0WUlFTEQoKTsNCisJfQ0KIH0NCisNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9NUExBQi9QSUMyNF9kc1BJQy9wb3J0bWFjcm8uaCBiL3BvcnRhYmxlL01QTEFCL1BJQzI0X2RzUElDL3BvcnRtYWNyby5oCmluZGV4IGExYWI5MWYuLmVjZTljZDkgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL01QTEFCL1BJQzI0X2RzUElDL3BvcnRtYWNyby5oCisrKyBiL3BvcnRhYmxlL01QTEFCL1BJQzI0X2RzUElDL3BvcnRtYWNyby5oCkBAIC0yNiwxMSArMjYsMTEgQEAKICAqLw0KIA0KICNpZm5kZWYgUE9SVE1BQ1JPX0gNCi0gICAgI2RlZmluZSBQT1JUTUFDUk9fSA0KKyNkZWZpbmUgUE9SVE1BQ1JPX0gNCiANCi0gICAgI2lmZGVmIF9fY3BsdXNwbHVzDQotICAgICAgICBleHRlcm4gIkMiIHsNCi0gICAgI2VuZGlmDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAqIFBvcnQgc3BlY2lmaWMgZGVmaW5pdGlvbnMuDQpAQCAtNDMsNjYgKzQzLDY2IEBACiAgKi8NCiANCiAvKiBUeXBlIGRlZmluaXRpb25zLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRDSEFSICAgICAgICAgIGNoYXINCi0gICAgI2RlZmluZSBwb3J0RkxPQVQgICAgICAgICBmbG9hdA0KLSAgICAjZGVmaW5lIHBvcnRET1VCTEUgICAgICAgIGRvdWJsZQ0KLSAgICAjZGVmaW5lIHBvcnRMT05HICAgICAgICAgIGxvbmcNCi0gICAgI2RlZmluZSBwb3J0U0hPUlQgICAgICAgICBzaG9ydA0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19UWVBFICAgIHVpbnQxNl90DQotICAgICNkZWZpbmUgcG9ydEJBU0VfVFlQRSAgICAgc2hvcnQNCisjZGVmaW5lIHBvcnRDSEFSCQljaGFyDQorI2RlZmluZSBwb3J0RkxPQVQJCWZsb2F0DQorI2RlZmluZSBwb3J0RE9VQkxFCQlkb3VibGUNCisjZGVmaW5lIHBvcnRMT05HCQlsb25nDQorI2RlZmluZSBwb3J0U0hPUlQJCXNob3J0DQorI2RlZmluZSBwb3J0U1RBQ0tfVFlQRQl1aW50MTZfdA0KKyNkZWZpbmUgcG9ydEJBU0VfVFlQRQlzaG9ydA0KIA0KLSAgICB0eXBlZGVmIHBvcnRTVEFDS19UWVBFICAgU3RhY2tUeXBlX3Q7DQotICAgIHR5cGVkZWYgc2hvcnQgICAgICAgICAgICBCYXNlVHlwZV90Ow0KLSAgICB0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICAgVUJhc2VUeXBlX3Q7DQordHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSBTdGFja1R5cGVfdDsNCit0eXBlZGVmIHNob3J0IEJhc2VUeXBlX3Q7DQordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBVQmFzZVR5cGVfdDsNCiANCi0gICAgI2lmICggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCi0gICAgICAgIHR5cGVkZWYgdWludDE2X3QgICAgIFRpY2tUeXBlX3Q7DQotICAgICAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQotICAgICNlbHNlDQotICAgICAgICB0eXBlZGVmIHVpbnQzMl90ICAgICBUaWNrVHlwZV90Ow0KLSAgICAgICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTA0KLSAgICAjZW5kaWYNCisjaWYoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQorCXR5cGVkZWYgdWludDE2X3QgVGlja1R5cGVfdDsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggVGlja1R5cGVfdCApIDB4ZmZmZg0KKyNlbHNlDQorCXR5cGVkZWYgdWludDMyX3QgVGlja1R5cGVfdDsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTA0KKyNlbmRpZg0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIEhhcmR3YXJlIHNwZWNpZmljcy4gKi8NCi0gICAgI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQgICAgMg0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEggICAgICAxDQotICAgICNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TICAgICggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQorI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQJCQkyDQorI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RICQkJMQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TCQkJKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBDcml0aWNhbCBzZWN0aW9uIG1hbmFnZW1lbnQuICovDQotICAgICNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpICAgIFNFVF9DUFVfSVBMKCBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZICk7IF9fYXNtIHZvbGF0aWxlICggIk5PUCIgKQ0KLSAgICAjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpICAgICBTRVRfQ1BVX0lQTCggMCApDQorI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkJU0VUX0NQVV9JUEwoIGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkgKTsgX19hc20gdm9sYXRpbGUgKCAiTk9QIiApDQorI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKQkJU0VUX0NQVV9JUEwoIDAgKQ0KIA0KIC8qIE5vdGUgdGhhdCBleGl0aW5nIGEgY3JpdGljYWwgc2VjdGlubyB3aWxsIHNldCB0aGUgSVBMIGJpdHMgdG8gMCwgbm9tYXR0ZXINCi0gKiB3aGF0IHRoZWlyIHZhbHVlIHdhcyBwcmlvciB0byBlbnRlcmluZyB0aGUgY3JpdGljYWwgc2VjdGlvbi4gKi8NCi0gICAgZXh0ZXJuIHZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICk7DQotICAgIGV4dGVybiB2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICk7DQotICAgICNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgICAgdlBvcnRFbnRlckNyaXRpY2FsKCkNCi0gICAgI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpICAgICB2UG9ydEV4aXRDcml0aWNhbCgpDQord2hhdCB0aGVpciB2YWx1ZSB3YXMgcHJpb3IgdG8gZW50ZXJpbmcgdGhlIGNyaXRpY2FsIHNlY3Rpb24uICovDQorZXh0ZXJuIHZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCisjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpCQl2UG9ydEVudGVyQ3JpdGljYWwoKQ0KKyNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKQkJCXZQb3J0RXhpdENyaXRpY2FsKCkNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBUYXNrIHV0aWxpdGllcy4gKi8NCi0gICAgZXh0ZXJuIHZvaWQgdlBvcnRZaWVsZCggdm9pZCApOw0KLSAgICAjZGVmaW5lIHBvcnRZSUVMRCgpICAgICAgICAgICAgICAgICAgICBcDQotICAgIGFzbSB2b2xhdGlsZSAoICJDQUxMIF92UG9ydFlpZWxkCQkJXG4iXA0KLSAgICAgICAgICAgICAgICAgICAiTk9QCQkJCQkgICIpOw0KK2V4dGVybiB2b2lkIHZQb3J0WWllbGQoIHZvaWQgKTsNCisjZGVmaW5lIHBvcnRZSUVMRCgpCQkJCWFzbSB2b2xhdGlsZSAoICJDQUxMIF92UG9ydFlpZWxkCQkJXG4iCQlcDQorCQkJCQkJCQkJCQkJIk5PUAkJCQkJICAiICk7DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQotICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KLSAgICAjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgICAgICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogUmVxdWlyZWQgYnkgdGhlIGtlcm5lbCBhd2FyZSBkZWJ1Z2dlci4gKi8NCi0gICAgI2lmZGVmIF9fREVCVUcNCi0gICAgICAgICNkZWZpbmUgcG9ydFJFTU9WRV9TVEFUSUNfUVVBTElGSUVSDQotICAgICNlbmRpZg0KKyNpZmRlZiBfX0RFQlVHDQorCSNkZWZpbmUgcG9ydFJFTU9WRV9TVEFUSUNfUVVBTElGSUVSDQorI2VuZGlmDQogDQotICAgICNkZWZpbmUgcG9ydE5PUCgpICAgIGFzbSB2b2xhdGlsZSAoICJOT1AiICkNCisjZGVmaW5lIHBvcnROT1AoKQkJCQlhc20gdm9sYXRpbGUgKCAiTk9QIiApDQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgfQ0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQogDQogI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvTVBMQUIvUElDMzJNRUMxNHh4L0lTUl9TdXBwb3J0LmggYi9wb3J0YWJsZS9NUExBQi9QSUMzMk1FQzE0eHgvSVNSX1N1cHBvcnQuaAppbmRleCBmYWRmMTJkLi40MTE3MGQzIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9NUExBQi9QSUMzMk1FQzE0eHgvSVNSX1N1cHBvcnQuaAorKysgYi9wb3J0YWJsZS9NUExBQi9QSUMzMk1FQzE0eHgvSVNSX1N1cHBvcnQuaApAQCAtMjcsMTg3ICsyNywxODggQEAKIA0KICNpbmNsdWRlICJGcmVlUlRPU0NvbmZpZy5oIg0KIA0KLSNkZWZpbmUgcG9ydENPTlRFWFRfU0laRSAgICAgICAgICAgICAxMzINCi0jZGVmaW5lIHBvcnRFUENfU1RBQ0tfTE9DQVRJT04gICAgICAgMTI0DQotI2RlZmluZSBwb3J0U1RBVFVTX1NUQUNLX0xPQ0FUSU9OICAgIDEyOA0KKyNkZWZpbmUgcG9ydENPTlRFWFRfU0laRSAxMzINCisjZGVmaW5lIHBvcnRFUENfU1RBQ0tfTE9DQVRJT04gMTI0DQorI2RlZmluZSBwb3J0U1RBVFVTX1NUQUNLX0xPQ0FUSU9OIDEyOA0KIA0KICNpZmRlZiBfX0xBTkdVQUdFX0FTU0VNQkxZX18NCiANCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLSAgICAubWFjcm8gcG9ydFNBVkVfQ09OVEVYVA0KKy5tYWNybwlwb3J0U0FWRV9DT05URVhUDQogDQotLyogTWFrZSByb29tIGZvciB0aGUgY29udGV4dC4gRmlyc3Qgc2F2ZSB0aGUgY3VycmVudCBzdGF0dXMgc28gaXQgY2FuIGJlDQotICogbWFuaXB1bGF0ZWQsIGFuZCB0aGUgY2F1c2UgYW5kIEVQQyByZWdpc3RlcnMgc28gdGhlaXIgb3JpZ2luYWwgdmFsdWVzIGFyZQ0KLSAqIGNhcHR1cmVkLiAqLw0KLSAgICBtZmMwIGswLCBfQ1AwX0NBVVNFDQotICAgIGFkZGl1IHNwLCBzcCwgLXBvcnRDT05URVhUX1NJWkUNCi0gICAgbWZjMCBrMSwgX0NQMF9TVEFUVVMNCisJLyogTWFrZSByb29tIGZvciB0aGUgY29udGV4dC4gRmlyc3Qgc2F2ZSB0aGUgY3VycmVudCBzdGF0dXMgc28gaXQgY2FuIGJlDQorCW1hbmlwdWxhdGVkLCBhbmQgdGhlIGNhdXNlIGFuZCBFUEMgcmVnaXN0ZXJzIHNvIHRoZWlyIG9yaWdpbmFsIHZhbHVlcyBhcmUNCisJY2FwdHVyZWQuICovDQorCW1mYzAJazAsIF9DUDBfQ0FVU0UNCisJYWRkaXUJc3AsIHNwLCAtcG9ydENPTlRFWFRfU0laRQ0KKwltZmMwCWsxLCBfQ1AwX1NUQVRVUw0KIA0KLS8qIEFsc28gc2F2ZSBzNiBhbmQgczUgc28gdGhleSBjYW4gYmUgdXNlZC4gIEFueSBuZXN0aW5nIGludGVycnVwdHMgc2hvdWxkDQotICogbWFpbnRhaW4gdGhlIHZhbHVlcyBvZiB0aGVzZSByZWdpc3RlcnMgYWNyb3NzIHRoZSBJU1IuICovDQotICAgIHN3IHM2LCA0NCAoIHNwICkNCi0gICAgc3cgczUsIDQwICggc3AgKQ0KLSAgICBzdyBrMSwgcG9ydFNUQVRVU19TVEFDS19MT0NBVElPTiggc3AgKQ0KKwkvKiBBbHNvIHNhdmUgczYgYW5kIHM1IHNvIHRoZXkgY2FuIGJlIHVzZWQuICBBbnkgbmVzdGluZyBpbnRlcnJ1cHRzIHNob3VsZA0KKwltYWludGFpbiB0aGUgdmFsdWVzIG9mIHRoZXNlIHJlZ2lzdGVycyBhY3Jvc3MgdGhlIElTUi4gKi8NCisJc3cJCXM2LCA0NChzcCkNCisJc3cJCXM1LCA0MChzcCkNCisJc3cJCWsxLCBwb3J0U1RBVFVTX1NUQUNLX0xPQ0FUSU9OKHNwKQ0KIA0KLS8qIFByZXBhcmUgdG8gZW5hYmxlIGludGVycnVwdHMgYWJvdmUgdGhlIGN1cnJlbnQgcHJpb3JpdHkuDQotICogazAgPSBrMCA+PiAxMC4gTW92ZXMgUklQTFsxNzoxMF0gdG8gWzc6MF0gKi8NCi0gICAgc3JsIGswLCBrMCwgMHhhDQorCS8qIFByZXBhcmUgdG8gZW5hYmxlIGludGVycnVwdHMgYWJvdmUgdGhlIGN1cnJlbnQgcHJpb3JpdHkuDQorCWswID0gazAgPj4gMTAuIE1vdmVzIFJJUExbMTc6MTBdIHRvIFs3OjBdICovDQorCXNybAkJazAsIGswLCAweGENCiANCi0vKiBJbnNlcnQgYml0IGZpZWxkLiA3IGJpdHMgazBbNjowXSB0byBrMVsxNjoxMF0gKi8NCi0gICAgaW5zIGsxLCBrMCwgMTAsIDcNCisJLyogSW5zZXJ0IGJpdCBmaWVsZC4gNyBiaXRzIGswWzY6MF0gdG8gazFbMTY6MTBdICovDQorCWlucwkJazEsIGswLCAxMCwgNw0KIA0KLS8qIFNldHMgQ1AwLlN0YXR1cy5JUEwgPSBDUDAuQ2F1c2UuUklQTA0KLSAqIENvcHkgdGhlIE1TQiBvZiB0aGUgSVBMLCBidXQgaXQgd291bGQgYmUgYW4gZXJyb3IgaWYgaXQgd2FzIHNldCBhbnl3YXkuICovDQotICAgIHNybCBrMCwgazAsIDB4Nw0KKwkvKiBTZXRzIENQMC5TdGF0dXMuSVBMID0gQ1AwLkNhdXNlLlJJUEwNCisJQ29weSB0aGUgTVNCIG9mIHRoZSBJUEwsIGJ1dCBpdCB3b3VsZCBiZSBhbiBlcnJvciBpZiBpdCB3YXMgc2V0IGFueXdheS4gKi8NCisJc3JsCQlrMCwgazAsIDB4Nw0KIA0KLS8qIE1TQiBvZiBJUEwgaXMgYml0WzE4XSBvZiBDUDAuU3RhdHVzICovDQotICAgIGlucyBrMSwgazAsIDE4LCAxDQorCS8qIE1TQiBvZiBJUEwgaXMgYml0WzE4XSBvZiBDUDAuU3RhdHVzICovDQorCWlucwkJazEsIGswLCAxOCwgMQ0KIA0KLS8qIENQMC5TdGF0dXNbNToxXSA9IDAgYls1XT1Sc3ZkLCBiWzRdPVVNLA0KLSAqIGJbM109UnN2ZCwgYlsyXT1FUkwsIGJbMV09RVhMDQotICogU2V0dGluZyBFWEw9MCBhbGxvd3MgaGlnaGVyIHByaW9yaXR5IGludGVycnVwdHMNCi0gKiB0byBwcmVlbXB0IHRoaXMgaGFuZGxlciAqLw0KLSAgICBpbnMgazEsIHplcm8sIDEsIDQNCisJLyogQ1AwLlN0YXR1c1s1OjFdID0gMCBiWzVdPVJzdmQsIGJbNF09VU0sDQorCSAgIGJbM109UnN2ZCwgYlsyXT1FUkwsIGJbMV09RVhMDQorCSAgIFNldHRpbmcgRVhMPTAgYWxsb3dzIGhpZ2hlciBwcmlvcml0eSBpbnRlcnJ1cHRzDQorCSAgIHRvIHByZWVtcHQgdGhpcyBoYW5kbGVyICovDQorCWlucwkJazEsIHplcm8sIDEsIDQNCiANCiANCi0vKiBzNSBpcyB1c2VkIGFzIHRoZSBmcmFtZSBwb2ludGVyLiAqLw0KLSAgICBhZGQgczUsIHplcm8sIHNwDQorCS8qIHM1IGlzIHVzZWQgYXMgdGhlIGZyYW1lIHBvaW50ZXIuICovDQorCWFkZAkJczUsIHplcm8sIHNwDQogDQotLyogQ2hlY2sgdGhlIG5lc3RpbmcgY291bnQgdmFsdWUuICovDQotICAgIGxhIGswLCB1eEludGVycnVwdE5lc3RpbmcNCi0gICAgbHcgczYsICggazAgKQ0KKwkvKiBDaGVjayB0aGUgbmVzdGluZyBjb3VudCB2YWx1ZS4gKi8NCisJbGEJCWswLCB1eEludGVycnVwdE5lc3RpbmcNCisJbHcJCXM2LCAoazApDQogDQotLyogSWYgdGhlIG5lc3RpbmcgY291bnQgaXMgMCB0aGVuIHN3YXAgdG8gdGhlIHRoZSBzeXN0ZW0gc3RhY2ssIG90aGVyd2lzZQ0KLSAqIHRoZSBzeXN0ZW0gc3RhY2sgaXMgYWxyZWFkeSBiZWluZyB1c2VkLiAqLw0KLSAgICBibmUgczYsIHplcm8sIDFmDQotICAgIG5vcA0KKwkvKiBJZiB0aGUgbmVzdGluZyBjb3VudCBpcyAwIHRoZW4gc3dhcCB0byB0aGUgdGhlIHN5c3RlbSBzdGFjaywgb3RoZXJ3aXNlDQorCXRoZSBzeXN0ZW0gc3RhY2sgaXMgYWxyZWFkeSBiZWluZyB1c2VkLiAqLw0KKwlibmUJCXM2LCB6ZXJvLCAxZg0KKwlub3ANCiANCi0vKiBTd2FwIHRvIHRoZSBzeXN0ZW0gc3RhY2suICovDQotICAgIGxhIHNwLCB4SVNSU3RhY2tUb3ANCi0gICAgbHcgc3AsICggc3AgKQ0KKwkvKiBTd2FwIHRvIHRoZSBzeXN0ZW0gc3RhY2suICovDQorCWxhCQlzcCwgeElTUlN0YWNrVG9wDQorCWx3CQlzcCwgKHNwKQ0KIA0KLS8qIEluY3JlbWVudCBhbmQgc2F2ZSB0aGUgbmVzdGluZyBjb3VudC4gKi8NCi0gICAgMSA6ICBhZGRpdSBzNiwgczYsIDENCi0gICAgc3cgczYsIDAgKCBrMCApDQorCS8qIEluY3JlbWVudCBhbmQgc2F2ZSB0aGUgbmVzdGluZyBjb3VudC4gKi8NCisxOiAgYWRkaXUgICBzNiwgczYsIDENCisJc3cJCXM2LCAwKGswKQ0KIA0KLS8qIHM2IGhvbGRzIHRoZSBFUEMgdmFsdWUsIHRoaXMgaXMgc2F2ZWQgYWZ0ZXIgaW50ZXJydXB0cyBhcmUgcmUtZW5hYmxlZC4gKi8NCi0gICAgbWZjMCBzNiwgX0NQMF9FUEMNCisJLyogczYgaG9sZHMgdGhlIEVQQyB2YWx1ZSwgdGhpcyBpcyBzYXZlZCBhZnRlciBpbnRlcnJ1cHRzIGFyZSByZS1lbmFibGVkLiAqLw0KKwltZmMwCXM2LCBfQ1AwX0VQQw0KIA0KLS8qIFJlLWVuYWJsZSBpbnRlcnJ1cHRzLiAqLw0KLSAgICBtdGMwIGsxLCBfQ1AwX1NUQVRVUw0KKwkvKiBSZS1lbmFibGUgaW50ZXJydXB0cy4gKi8NCisJbXRjMAlrMSwgX0NQMF9TVEFUVVMNCiANCi0vKiBTYXZlIHRoZSBjb250ZXh0IGludG8gdGhlIHNwYWNlIGp1c3QgY3JlYXRlZC4gIHM2IGlzIHNhdmVkIGFnYWluDQotICogaGVyZSBhcyBpdCBub3cgY29udGFpbnMgdGhlIEVQQyB2YWx1ZS4gIE5vIG90aGVyIHMgcmVnaXN0ZXJzIG5lZWQgYmUNCi0gKiBzYXZlZC4gKi8NCi0gICAgc3cgcmEsIDEyMCAoIHM1ICkgLyogUmV0dXJuIGFkZHJlc3MgKFJBPVIzMSkgKi8NCi0gICAgc3cgczgsIDExNiAoIHM1ICkgLyogRnJhbWUgUG9pbnRlciAoRlA9UjMwKSAqLw0KLSAgICBzdyB0OSwgMTEyICggczUgKQ0KLSAgICBzdyB0OCwgMTA4ICggczUgKQ0KLSAgICBzdyB0NywgMTA0ICggczUgKQ0KLSAgICBzdyB0NiwgMTAwICggczUgKQ0KLSAgICBzdyB0NSwgOTYgKCBzNSApDQotICAgIHN3IHQ0LCA5MiAoIHM1ICkNCi0gICAgc3cgdDMsIDg4ICggczUgKQ0KLSAgICBzdyB0MiwgODQgKCBzNSApDQotICAgIHN3IHQxLCA4MCAoIHM1ICkNCi0gICAgc3cgdDAsIDc2ICggczUgKQ0KLSAgICBzdyBhMywgNzIgKCBzNSApDQotICAgIHN3IGEyLCA2OCAoIHM1ICkNCi0gICAgc3cgYTEsIDY0ICggczUgKQ0KLSAgICBzdyBhMCwgNjAgKCBzNSApDQotICAgIHN3IHYxLCA1NiAoIHM1ICkNCi0gICAgc3cgdjAsIDUyICggczUgKQ0KLSAgICBzdyBzNiwgcG9ydEVQQ19TVEFDS19MT0NBVElPTiggczUgKQ0KLSAgICBzdyAkMSwgMTYgKCBzNSApDQorCS8qIFNhdmUgdGhlIGNvbnRleHQgaW50byB0aGUgc3BhY2UganVzdCBjcmVhdGVkLiAgczYgaXMgc2F2ZWQgYWdhaW4NCisJaGVyZSBhcyBpdCBub3cgY29udGFpbnMgdGhlIEVQQyB2YWx1ZS4gIE5vIG90aGVyIHMgcmVnaXN0ZXJzIG5lZWQgYmUNCisJc2F2ZWQuICovDQorCXN3CQlyYSwgMTIwKHM1KSAvKiBSZXR1cm4gYWRkcmVzcyAoUkE9UjMxKSAqLw0KKwlzdwkJczgsIDExNihzNSkgLyogRnJhbWUgUG9pbnRlciAoRlA9UjMwKSAqLw0KKwlzdwkJdDksIDExMihzNSkNCisJc3cJCXQ4LCAxMDgoczUpDQorCXN3CQl0NywgMTA0KHM1KQ0KKwlzdwkJdDYsIDEwMChzNSkNCisJc3cJCXQ1LCA5NihzNSkNCisJc3cJCXQ0LCA5MihzNSkNCisJc3cJCXQzLCA4OChzNSkNCisJc3cJCXQyLCA4NChzNSkNCisJc3cJCXQxLCA4MChzNSkNCisJc3cJCXQwLCA3NihzNSkNCisJc3cJCWEzLCA3MihzNSkNCisJc3cJCWEyLCA2OChzNSkNCisJc3cJCWExLCA2NChzNSkNCisJc3cJCWEwLCA2MChzNSkNCisJc3cJCXYxLCA1NihzNSkNCisJc3cJCXYwLCA1MihzNSkNCisJc3cJCXM2LCBwb3J0RVBDX1NUQUNLX0xPQ0FUSU9OKHM1KQ0KKwlzdwkJJDEsIDE2KHM1KQ0KIA0KLS8qIE1FQzE0eHggZG9lcyBub3QgaGF2ZSBEU1AsIHJlbW92ZWQgNyB3b3JkcyAqLw0KLSAgICBtZmhpIHM2DQotICAgIHN3IHM2LCAxMiAoIHM1ICkNCi0gICAgbWZsbyBzNg0KLSAgICBzdyBzNiwgOCAoIHM1ICkNCisJLyogTUVDMTR4eCBkb2VzIG5vdCBoYXZlIERTUCwgcmVtb3ZlZCA3IHdvcmRzICovDQorCW1maGkJczYNCisJc3cJCXM2LCAxMihzNSkNCisJbWZsbwlzNg0KKwlzdwkJczYsIDgoczUpDQogDQotLyogVXBkYXRlIHRoZSB0YXNrIHN0YWNrIHBvaW50ZXIgdmFsdWUgaWYgbmVzdGluZyBpcyB6ZXJvLiAqLw0KLSAgICBsYSBzNiwgdXhJbnRlcnJ1cHROZXN0aW5nDQotICAgIGx3IHM2LCAoIHM2ICkNCi0gICAgYWRkaXUgczYsIHM2LCAtMQ0KLSAgICBibmUgczYsIHplcm8sIDFmDQotICAgIG5vcA0KKwkvKiBVcGRhdGUgdGhlIHRhc2sgc3RhY2sgcG9pbnRlciB2YWx1ZSBpZiBuZXN0aW5nIGlzIHplcm8uICovDQorCWxhCQlzNiwgdXhJbnRlcnJ1cHROZXN0aW5nDQorCWx3CQlzNiwgKHM2KQ0KKwlhZGRpdQlzNiwgczYsIC0xDQorCWJuZQkJczYsIHplcm8sIDFmDQorCW5vcA0KIA0KLS8qIFNhdmUgdGhlIHN0YWNrIHBvaW50ZXIuICovDQotICAgIGxhIHM2LCB1eFNhdmVkVGFza1N0YWNrUG9pbnRlcg0KLSAgICBzdyBzNSwgKCBzNiApDQotICAgIDEgOg0KLSAgICAuZW5kbQ0KKwkvKiBTYXZlIHRoZSBzdGFjayBwb2ludGVyLiAqLw0KKwlsYQkJczYsIHV4U2F2ZWRUYXNrU3RhY2tQb2ludGVyDQorCXN3CQlzNSwgKHM2KQ0KKzE6DQorCS5lbmRtDQogDQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0gICAgICAgLm1hY3JvIHBvcnRSRVNUT1JFX0NPTlRFWFQNCisubWFjcm8JcG9ydFJFU1RPUkVfQ09OVEVYVA0KIA0KLS8qIFJlc3RvcmUgdGhlIHN0YWNrIHBvaW50ZXIgZnJvbSB0aGUgVENCLiAgVGhpcyBpcyBvbmx5IGRvbmUgaWYgdGhlDQotICogbmVzdGluZyBjb3VudCBpcyAxLiAqLw0KLSAgICBsYSBzNiwgdXhJbnRlcnJ1cHROZXN0aW5nDQotICAgIGx3IHM2LCAoIHM2ICkNCi0gICAgYWRkaXUgczYsIHM2LCAtMQ0KLSAgICBibmUgczYsIHplcm8sIDFmDQotICAgIG5vcA0KLSAgICBsYSBzNiwgdXhTYXZlZFRhc2tTdGFja1BvaW50ZXINCi0gICAgbHcgczUsICggczYgKQ0KKwkvKiBSZXN0b3JlIHRoZSBzdGFjayBwb2ludGVyIGZyb20gdGhlIFRDQi4gIFRoaXMgaXMgb25seSBkb25lIGlmIHRoZQ0KKwluZXN0aW5nIGNvdW50IGlzIDEuICovDQorCWxhCQlzNiwgdXhJbnRlcnJ1cHROZXN0aW5nDQorCWx3CQlzNiwgKHM2KQ0KKwlhZGRpdSAgIHM2LCBzNiwgLTENCisJYm5lCQlzNiwgemVybywgMWYNCisJbm9wDQorCWxhCQlzNiwgdXhTYXZlZFRhc2tTdGFja1BvaW50ZXINCisJbHcJCXM1LCAoczYpDQogDQotLyogUmVzdG9yZSB0aGUgY29udGV4dC4NCi0gKiBNQ0hQIE1FQzE0eHggZG9lcyBub3QgaW5jbHVkZSBEU1AgKi8NCi0gICAgMSA6DQotICAgIGx3IHM2LCA4ICggczUgKQ0KLSAgICBtdGxvIHM2DQotICAgIGx3IHM2LCAxMiAoIHM1ICkNCi0gICAgbXRoaSBzNg0KLSAgICBsdyAkMSwgMTYgKCBzNSApDQorCS8qIFJlc3RvcmUgdGhlIGNvbnRleHQuDQorCU1DSFAgTUVDMTR4eCBkb2VzIG5vdCBpbmNsdWRlIERTUCAqLw0KKzE6DQorCWx3CQlzNiwgOChzNSkNCisJbXRsbwlzNg0KKwlsdwkJczYsIDEyKHM1KQ0KKwltdGhpCXM2DQorCWx3CQkkMSwgMTYoczUpDQogDQotLyogczYgaXMgbG9hZGVkIGFzIGl0IHdhcyB1c2VkIGFzIGEgc2NyYXRjaCByZWdpc3RlciBhbmQgdGhlcmVmb3JlIHNhdmVkDQotICogYXMgcGFydCBvZiB0aGUgaW50ZXJydXB0IGNvbnRleHQuICovDQotICAgIGx3IHM2LCA0NCAoIHM1ICkNCi0gICAgbHcgdjAsIDUyICggczUgKQ0KLSAgICBsdyB2MSwgNTYgKCBzNSApDQotICAgIGx3IGEwLCA2MCAoIHM1ICkNCi0gICAgbHcgYTEsIDY0ICggczUgKQ0KLSAgICBsdyBhMiwgNjggKCBzNSApDQotICAgIGx3IGEzLCA3MiAoIHM1ICkNCi0gICAgbHcgdDAsIDc2ICggczUgKQ0KLSAgICBsdyB0MSwgODAgKCBzNSApDQotICAgIGx3IHQyLCA4NCAoIHM1ICkNCi0gICAgbHcgdDMsIDg4ICggczUgKQ0KLSAgICBsdyB0NCwgOTIgKCBzNSApDQotICAgIGx3IHQ1LCA5NiAoIHM1ICkNCi0gICAgbHcgdDYsIDEwMCAoIHM1ICkNCi0gICAgbHcgdDcsIDEwNCAoIHM1ICkNCi0gICAgbHcgdDgsIDEwOCAoIHM1ICkNCi0gICAgbHcgdDksIDExMiAoIHM1ICkNCi0gICAgbHcgczgsIDExNiAoIHM1ICkNCi0gICAgbHcgcmEsIDEyMCAoIHM1ICkNCisJLyogczYgaXMgbG9hZGVkIGFzIGl0IHdhcyB1c2VkIGFzIGEgc2NyYXRjaCByZWdpc3RlciBhbmQgdGhlcmVmb3JlIHNhdmVkDQorCWFzIHBhcnQgb2YgdGhlIGludGVycnVwdCBjb250ZXh0LiAqLw0KKwlsdwkJczYsIDQ0KHM1KQ0KKwlsdwkJdjAsIDUyKHM1KQ0KKwlsdwkJdjEsIDU2KHM1KQ0KKwlsdwkJYTAsIDYwKHM1KQ0KKwlsdwkJYTEsIDY0KHM1KQ0KKwlsdwkJYTIsIDY4KHM1KQ0KKwlsdwkJYTMsIDcyKHM1KQ0KKwlsdwkJdDAsIDc2KHM1KQ0KKwlsdwkJdDEsIDgwKHM1KQ0KKwlsdwkJdDIsIDg0KHM1KQ0KKwlsdwkJdDMsIDg4KHM1KQ0KKwlsdwkJdDQsIDkyKHM1KQ0KKwlsdwkJdDUsIDk2KHM1KQ0KKwlsdwkJdDYsIDEwMChzNSkNCisJbHcJCXQ3LCAxMDQoczUpDQorCWx3CQl0OCwgMTA4KHM1KQ0KKwlsdwkJdDksIDExMihzNSkNCisJbHcJCXM4LCAxMTYoczUpDQorCWx3CQlyYSwgMTIwKHM1KQ0KIA0KLS8qIFByb3RlY3QgYWNjZXNzIHRvIHRoZSBrIHJlZ2lzdGVycywgYW5kIG90aGVycy4gKi8NCi0gICAgZGkNCi0gICAgZWhiDQorCS8qIFByb3RlY3QgYWNjZXNzIHRvIHRoZSBrIHJlZ2lzdGVycywgYW5kIG90aGVycy4gKi8NCisJZGkNCisJZWhiDQogDQotLyogRGVjcmVtZW50IHRoZSBuZXN0aW5nIGNvdW50LiAqLw0KLSAgICBsYSBrMCwgdXhJbnRlcnJ1cHROZXN0aW5nDQotICAgIGx3IGsxLCAoIGswICkNCi0gICAgYWRkaXUgazEsIGsxLCAtMQ0KLSAgICBzdyBrMSwgMCAoIGswICkNCisJLyogRGVjcmVtZW50IHRoZSBuZXN0aW5nIGNvdW50LiAqLw0KKwlsYQkJazAsIHV4SW50ZXJydXB0TmVzdGluZw0KKwlsdwkJazEsIChrMCkNCisJYWRkaXUJazEsIGsxLCAtMQ0KKwlzdwkJazEsIDAoazApDQogDQotICAgIGx3IGswLCBwb3J0U1RBVFVTX1NUQUNLX0xPQ0FUSU9OKCBzNSApDQotICAgIGx3IGsxLCBwb3J0RVBDX1NUQUNLX0xPQ0FUSU9OKCBzNSApDQorCWx3CQlrMCwgcG9ydFNUQVRVU19TVEFDS19MT0NBVElPTihzNSkNCisJbHcJCWsxLCBwb3J0RVBDX1NUQUNLX0xPQ0FUSU9OKHM1KQ0KIA0KLS8qIExlYXZlIHRoZSBzdGFjayBpbiBpdHMgb3JpZ2luYWwgc3RhdGUuICBGaXJzdCBsb2FkIHNwIGZyb20gczUsIHRoZW4NCi0gKiByZXN0b3JlIHM1IGZyb20gdGhlIHN0YWNrLiAqLw0KLSAgICBhZGQgc3AsIHplcm8sIHM1DQotICAgIGx3IHM1LCA0MCAoIHNwICkNCi0gICAgYWRkaXUgc3AsIHNwLCBwb3J0Q09OVEVYVF9TSVpFDQorCS8qIExlYXZlIHRoZSBzdGFjayBpbiBpdHMgb3JpZ2luYWwgc3RhdGUuICBGaXJzdCBsb2FkIHNwIGZyb20gczUsIHRoZW4NCisJcmVzdG9yZSBzNSBmcm9tIHRoZSBzdGFjay4gKi8NCisJYWRkCQlzcCwgemVybywgczUNCisJbHcJCXM1LCA0MChzcCkNCisJYWRkaXUgICBzcCwgc3AsIHBvcnRDT05URVhUX1NJWkUNCiANCi0gICAgbXRjMCBrMCwgX0NQMF9TVEFUVVMNCi0gICAgbXRjMCBrMSwgX0NQMF9FUEMNCi0gICAgZWhiDQotICAgIGVyZXQNCi0gICAgbm9wDQorCW10YzAJazAsIF9DUDBfU1RBVFVTDQorCW10YzAJazEsIF9DUDBfRVBDDQorCWVoYg0KKwllcmV0DQorCW5vcA0KIA0KLSAgICAgICAuZW5kbQ0KKwkuZW5kbQ0KIA0KICNlbmRpZiAvKiAjaWZkZWYgX19MQU5HVUFHRV9BU1NFTUJMWV9fICovDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvTVBMQUIvUElDMzJNRUMxNHh4L3BvcnQuYyBiL3BvcnRhYmxlL01QTEFCL1BJQzMyTUVDMTR4eC9wb3J0LmMKaW5kZXggZWFmMTg5Yi4uYzJkODM3ZiAxMDA2NDQKLS0tIGEvcG9ydGFibGUvTVBMQUIvUElDMzJNRUMxNHh4L3BvcnQuYworKysgYi9wb3J0YWJsZS9NUExBQi9QSUMzMk1FQzE0eHgvcG9ydC5jCkBAIC0yNiw4ICsyNiw4IEBACiAgKi8NCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgUElDMzJNRUMxNHh4ICBwb3J0Lg0KLSotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgUElDMzJNRUMxNHh4ICBwb3J0Lg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogU2NoZWR1bGVyIGluY2x1ZGUgZmlsZXMuICovDQogI2luY2x1ZGUgIkZyZWVSVE9TLmgiDQpAQCAtMzcsOTYgKzM3LDk0IEBACiAjaW5jbHVkZSA8eGMuaD4NCiAjaW5jbHVkZSA8Y3AwZGVmcy5oPg0KIA0KLSNpZiAhZGVmaW5lZCggX19NRUNfXyApDQotICAgICNlcnJvciBUaGlzIHBvcnQgaXMgZGVzaWduZWQgdG8gd29yayB3aXRoIFhDMzIgb24gTUVDMTR4eC4gIFBsZWFzZSB1cGRhdGUgeW91ciBDIGNvbXBpbGVyIHZlcnNpb24gb3Igc2V0dGluZ3MuDQorI2lmICFkZWZpbmVkKF9fTUVDX18pDQorCSNlcnJvciBUaGlzIHBvcnQgaXMgZGVzaWduZWQgdG8gd29yayB3aXRoIFhDMzIgb24gTUVDMTR4eC4gIFBsZWFzZSB1cGRhdGUgeW91ciBDIGNvbXBpbGVyIHZlcnNpb24gb3Igc2V0dGluZ3MuDQogI2VuZGlmDQogDQotI2lmICggKCBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgPj0gMHg3ICkgfHwgKCBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgPT0gMCApICkNCi0gICAgI2Vycm9yIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSBtdXN0IGJlIGxlc3MgdGhhbiA3IGFuZCBncmVhdGVyIHRoYW4gMA0KKyNpZiggKCBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgPj0gMHg3ICkgfHwgKCBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgPT0gMCApICkNCisJI2Vycm9yIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSBtdXN0IGJlIGxlc3MgdGhhbiA3IGFuZCBncmVhdGVyIHRoYW4gMA0KICNlbmRpZg0KIA0KIC8qIEJpdHMgd2l0aGluIHZhcmlvdXMgcmVnaXN0ZXJzLiAqLw0KLSNkZWZpbmUgcG9ydElFX0JJVCAgICAgICAgICAgICAgICAgICAgICAgICAoIDB4MDAwMDAwMDEgKQ0KLSNkZWZpbmUgcG9ydEVYTF9CSVQgICAgICAgICAgICAgICAgICAgICAgICAoIDB4MDAwMDAwMDIgKQ0KKyNkZWZpbmUgcG9ydElFX0JJVAkJCQkJKCAweDAwMDAwMDAxICkNCisjZGVmaW5lIHBvcnRFWExfQklUCQkJCQkoIDB4MDAwMDAwMDIgKQ0KIA0KIC8qIFRoZSBFWEwgYml0IGlzIHNldCB0byBlbnN1cmUgaW50ZXJydXB0cyBkbyBub3Qgb2NjdXIgd2hpbGUgdGhlIGNvbnRleHQgb2YNCi0gKiB0aGUgZmlyc3QgdGFzayBpcyBiZWluZyByZXN0b3JlZC4gIE1FQzE0eHggZG9lcyBub3QgaGF2ZSBEU1AgSFcuICovDQotI2RlZmluZSBwb3J0SU5JVElBTF9TUiAgICAgICAgICAgICAgICAgICAgICggcG9ydElFX0JJVCB8IHBvcnRFWExfQklUICkNCit0aGUgZmlyc3QgdGFzayBpcyBiZWluZyByZXN0b3JlZC4gIE1FQzE0eHggZG9lcyBub3QgaGF2ZSBEU1AgSFcuICovDQorI2RlZmluZSBwb3J0SU5JVElBTF9TUgkJCQkoIHBvcnRJRV9CSVQgfCBwb3J0RVhMX0JJVCApDQogDQogLyogTUVDMTR4eCBSVE9TIFRpbWVyIE1NQ1Incy4gKi8NCi0jZGVmaW5lIHBvcnRNTUNSX1JUTVJfUFJFTE9BRCAgICAgICAgICAgICAgKiggKCB2b2xhdGlsZSB1aW50MzJfdCAqICkgKCAweEEwMDA3NDA0dWwgKSApDQotI2RlZmluZSBwb3J0TU1DUl9SVE1SX0NPTlRST0wgICAgICAgICAgICAgICooICggdm9sYXRpbGUgdWludDMyX3QgKiApICggMHhBMDAwNzQwOHVsICkgKQ0KKyNkZWZpbmUgcG9ydE1NQ1JfUlRNUl9QUkVMT0FECSooKHZvbGF0aWxlIHVpbnQzMl90ICopKDB4QTAwMDc0MDR1bCkpDQorI2RlZmluZSBwb3J0TU1DUl9SVE1SX0NPTlRST0wJKigodm9sYXRpbGUgdWludDMyX3QgKikoMHhBMDAwNzQwOHVsKSkNCiANCiAvKiBNRUMxNHh4IEpUVklDIGV4dGVybmFsIGludGVycnVwdCBjb250cm9sbGVyIGlzIG1hcHBlZCB0byBNMTRLIGNsb3NlbHktY291cGxlZA0KLSAqIHBlcmlwaGVyYWwgc3BhY2UuICovDQotI2RlZmluZSBwb3J0R0lSUTIzX1JUT1NfVElNRVJfQklUUE9TICAgICAgICggNCApDQotI2RlZmluZSBwb3J0R0lSUTIzX1JUT1NfVElNRVJfTUFTSyAgICAgICAgICggMXVsIDw8ICggcG9ydEdJUlEyM19SVE9TX1RJTUVSX0JJVFBPUyApICkNCi0jZGVmaW5lIHBvcnRNTUNSX0pUVklDX0dJUlEyM19TUkMgICAgICAgICAgKiggKCB2b2xhdGlsZSB1aW50MzJfdCAqICkgKCAweEJGRkZDMEYwdWwgKSApDQotI2RlZmluZSBwb3J0TU1DUl9KVFZJQ19HSVJRMjNfU0VURU4gICAgICAgICooICggdm9sYXRpbGUgdWludDMyX3QgKiApICggMHhCRkZGQzBGNHVsICkgKQ0KLSNkZWZpbmUgcG9ydE1NQ1JfSlRWSUNfR0lSUTIzX1BSSUEgICAgICAgICAqKCAoIHZvbGF0aWxlIHVpbnQzMl90ICogKSAoIDB4QkZGRkMzRjB1bCApICkNCitwZXJpcGhlcmFsIHNwYWNlLiAqLw0KKyNkZWZpbmUgcG9ydEdJUlEyM19SVE9TX1RJTUVSX0JJVFBPUwkoIDQgKQ0KKyNkZWZpbmUgcG9ydEdJUlEyM19SVE9TX1RJTUVSX01BU0sJCSggMXVsIDw8ICggcG9ydEdJUlEyM19SVE9TX1RJTUVSX0JJVFBPUyApICkNCisjZGVmaW5lIHBvcnRNTUNSX0pUVklDX0dJUlEyM19TUkMJCSooKHZvbGF0aWxlIHVpbnQzMl90ICopKDB4QkZGRkMwRjB1bCkpDQorI2RlZmluZSBwb3J0TU1DUl9KVFZJQ19HSVJRMjNfU0VURU4JCSooKHZvbGF0aWxlIHVpbnQzMl90ICopKDB4QkZGRkMwRjR1bCkpDQorI2RlZmluZSBwb3J0TU1DUl9KVFZJQ19HSVJRMjNfUFJJQQkJKigodm9sYXRpbGUgdWludDMyX3QgKikoMHhCRkZGQzNGMHVsKSkNCiANCiAvKiBNSVBTIFNvZnR3YXJlIEludGVycnVwdHMgYXJlIHJvdXRlZCB0aHJvdWdoIEpUVklDIEdJUlEyNCAqLw0KLSNkZWZpbmUgcG9ydEdJUlEyNF9NMTRLX1NPRlRJUlEwX0JJVFBPUyAgICAoIDEgKQ0KLSNkZWZpbmUgcG9ydEdJUlEyNF9NMTRLX1NPRlRJUlEwX01BU0sgICAgICAoIDF1bCA8PCAoIHBvcnRHSVJRMjRfTTE0S19TT0ZUSVJRMF9CSVRQT1MgKSApDQotI2RlZmluZSBwb3J0TU1DUl9KVFZJQ19HSVJRMjRfU1JDICAgICAgICAgICooICggdm9sYXRpbGUgdWludDMyX3QgKiApICggMHhCRkZGQzEwMHVsICkgKQ0KLSNkZWZpbmUgcG9ydE1NQ1JfSlRWSUNfR0lSUTI0X1NFVEVOICAgICAgICAqKCAoIHZvbGF0aWxlIHVpbnQzMl90ICogKSAoIDB4QkZGRkMxMDR1bCApICkNCi0jZGVmaW5lIHBvcnRNTUNSX0pUVklDX0dJUlEyNF9QUklBICAgICAgICAgKiggKCB2b2xhdGlsZSB1aW50MzJfdCAqICkgKCAweEJGRkZDNDAwdWwgKSApDQorI2RlZmluZSBwb3J0R0lSUTI0X00xNEtfU09GVElSUTBfQklUUE9TCSggMSApDQorI2RlZmluZSBwb3J0R0lSUTI0X00xNEtfU09GVElSUTBfTUFTSwkoIDF1bCA8PCAoIHBvcnRHSVJRMjRfTTE0S19TT0ZUSVJRMF9CSVRQT1MgKSApDQorI2RlZmluZSBwb3J0TU1DUl9KVFZJQ19HSVJRMjRfU1JDCQkqKCh2b2xhdGlsZSB1aW50MzJfdCAqKSgweEJGRkZDMTAwdWwpKQ0KKyNkZWZpbmUgcG9ydE1NQ1JfSlRWSUNfR0lSUTI0X1NFVEVOCQkqKCh2b2xhdGlsZSB1aW50MzJfdCAqKSgweEJGRkZDMTA0dWwpKQ0KKyNkZWZpbmUgcG9ydE1NQ1JfSlRWSUNfR0lSUTI0X1BSSUEJCSooKHZvbGF0aWxlIHVpbnQzMl90ICopKDB4QkZGRkM0MDB1bCkpDQogDQogLyoNCi0gKiBCeSBkZWZhdWx0IHBvcnQuYyBnZW5lcmF0ZXMgaXRzIHRpY2sgaW50ZXJydXB0IGZyb20gdGhlIFJUT1MgdGltZXIuICBUaGUgdXNlcg0KLSAqIGNhbiBvdmVycmlkZSB0aGlzIGJlaGF2aW91ciBieToNCi0gKiAgMTogUHJvdmlkaW5nIHRoZWlyIG93biBpbXBsZW1lbnRhdGlvbiBvZiB2QXBwbGljYXRpb25TZXR1cFRpY2tUaW1lckludGVycnVwdCgpLA0KLSAqICAgICB3aGljaCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBjb25maWd1cmVzIHRoZSB0aW1lci4gIFRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkDQotICogICAgIGFzIGEgd2VhayBzeW1ib2wgaW4gdGhpcyBmaWxlIHNvIGlmIHRoZSBzYW1lIGZ1bmN0aW9uIG5hbWUgaXMgdXNlZCBpbiB0aGUNCi0gKiAgICAgYXBwbGljYXRpb24gY29kZSB0aGVuIHRoZSB2ZXJzaW9uIGluIHRoZSBhcHBsaWNhdGlvbiBjb2RlIHdpbGwgYmUgbGlua2VkDQotICogICAgIGludG8gdGhlIGFwcGxpY2F0aW9uIGluIHByZWZlcmVuY2UgdG8gdGhlIHZlcnNpb24gZGVmaW5lZCBpbiB0aGlzIGZpbGUuDQotICogIDI6IFByb3ZpZGUgYSB2ZWN0b3IgaW1wbGVtZW50YXRpb24gaW4gcG9ydF9hc20uUyB0aGF0IG92ZXJyaWRlcyB0aGUgZGVmYXVsdA0KLSAqICAgICBiZWhhdmlvdXIgZm9yIHRoZSBzcGVjaWZpZWQgaW50ZXJydXB0IHZlY3Rvci4NCi0gKiAgMzogU3BlY2lmeSB0aGUgY29ycmVjdCBiaXQgdG8gY2xlYXIgdGhlIGludGVycnVwdCBkdXJpbmcgdGhlIHRpbWVyIGludGVycnVwdA0KLSAqICAgICBoYW5kbGVyLg0KLSAqLw0KK0J5IGRlZmF1bHQgcG9ydC5jIGdlbmVyYXRlcyBpdHMgdGljayBpbnRlcnJ1cHQgZnJvbSB0aGUgUlRPUyB0aW1lci4gIFRoZSB1c2VyDQorY2FuIG92ZXJyaWRlIHRoaXMgYmVoYXZpb3VyIGJ5Og0KKwkxOiBQcm92aWRpbmcgdGhlaXIgb3duIGltcGxlbWVudGF0aW9uIG9mIHZBcHBsaWNhdGlvblNldHVwVGlja1RpbWVySW50ZXJydXB0KCksDQorCSAgIHdoaWNoIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGNvbmZpZ3VyZXMgdGhlIHRpbWVyLiAgVGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQNCisJICAgYXMgYSB3ZWFrIHN5bWJvbCBpbiB0aGlzIGZpbGUgc28gaWYgdGhlIHNhbWUgZnVuY3Rpb24gbmFtZSBpcyB1c2VkIGluIHRoZQ0KKwkgICBhcHBsaWNhdGlvbiBjb2RlIHRoZW4gdGhlIHZlcnNpb24gaW4gdGhlIGFwcGxpY2F0aW9uIGNvZGUgd2lsbCBiZSBsaW5rZWQNCisJICAgaW50byB0aGUgYXBwbGljYXRpb24gaW4gcHJlZmVyZW5jZSB0byB0aGUgdmVyc2lvbiBkZWZpbmVkIGluIHRoaXMgZmlsZS4NCisJMjogUHJvdmlkZSBhIHZlY3RvciBpbXBsZW1lbnRhdGlvbiBpbiBwb3J0X2FzbS5TIHRoYXQgb3ZlcnJpZGVzIHRoZSBkZWZhdWx0DQorCSAgIGJlaGF2aW91ciBmb3IgdGhlIHNwZWNpZmllZCBpbnRlcnJ1cHQgdmVjdG9yLg0KKwkzOiBTcGVjaWZ5IHRoZSBjb3JyZWN0IGJpdCB0byBjbGVhciB0aGUgaW50ZXJydXB0IGR1cmluZyB0aGUgdGltZXIgaW50ZXJydXB0DQorCSAgIGhhbmRsZXIuDQorKi8NCiAjaWZuZGVmIGNvbmZpZ1RJQ0tfSU5URVJSVVBUX1ZFQ1RPUg0KLSAgICAjZGVmaW5lIGNvbmZpZ1RJQ0tfSU5URVJSVVBUX1ZFQ1RPUiAgICBnaXJxMjNfYjQNCi0gICAgI2RlZmluZSBjb25maWdDTEVBUl9USUNLX1RJTUVSX0lOVEVSUlVQVCgpICAgIHBvcnRNTUNSX0pUVklDX0dJUlEyM19TUkMgPSBwb3J0R0lSUTIzX1JUT1NfVElNRVJfTUFTSw0KKwkjZGVmaW5lIGNvbmZpZ1RJQ0tfSU5URVJSVVBUX1ZFQ1RPUiBnaXJxMjNfYjQNCisJI2RlZmluZSBjb25maWdDTEVBUl9USUNLX1RJTUVSX0lOVEVSUlVQVCgpIHBvcnRNTUNSX0pUVklDX0dJUlEyM19TUkMgPSBwb3J0R0lSUTIzX1JUT1NfVElNRVJfTUFTSw0KICNlbHNlDQotICAgICNpZm5kZWYgY29uZmlnQ0xFQVJfVElDS19USU1FUl9JTlRFUlJVUFQNCi0gICAgICAgICNlcnJvciBJZiBjb25maWdUSUNLX0lOVEVSUlVQVF9WRUNUT1IgaXMgZGVmaW5lZCBpbiBhcHBsaWNhdGlvbiBjb2RlIHRoZW4gY29uZmlnQ0xFQVJfVElDS19USU1FUl9JTlRFUlJVUFQgbXVzdCBhbHNvIGJlIGRlZmluZWQgaW4gYXBwbGljYXRpb24gY29kZS4NCi0gICAgI2VuZGlmDQorCSNpZm5kZWYgY29uZmlnQ0xFQVJfVElDS19USU1FUl9JTlRFUlJVUFQNCisJCSNlcnJvciBJZiBjb25maWdUSUNLX0lOVEVSUlVQVF9WRUNUT1IgaXMgZGVmaW5lZCBpbiBhcHBsaWNhdGlvbiBjb2RlIHRoZW4gY29uZmlnQ0xFQVJfVElDS19USU1FUl9JTlRFUlJVUFQgbXVzdCBhbHNvIGJlIGRlZmluZWQgaW4gYXBwbGljYXRpb24gY29kZS4NCisJI2VuZGlmDQogI2VuZGlmDQogDQogLyogTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSBwcmUtbG9hZGluZyBvZiB0aGUgaW5pdGlhbCBSQSB3aXRoIHRoZSBhZGRyZXNzIG9mDQotICogcHJ2VGFza0V4aXRFcnJvcigpIGluIGNhc2UgaXQgbWVzc2VzIHVwIHVud2luZGluZyBvZiB0aGUgc3RhY2sgaW4gdGhlIGRlYnVnZ2VyIC0NCi0gKiBpbiB3aGljaCBjYXNlIGNvbmZpZ1RBU0tfUkVUVVJOX0FERFJFU1MgY2FuIGJlIGRlZmluZWQgYXMgMCAoTlVMTCkuICovDQorcHJ2VGFza0V4aXRFcnJvcigpIGluIGNhc2UgaXQgbWVzc2VzIHVwIHVud2luZGluZyBvZiB0aGUgc3RhY2sgaW4gdGhlIGRlYnVnZ2VyIC0NCitpbiB3aGljaCBjYXNlIGNvbmZpZ1RBU0tfUkVUVVJOX0FERFJFU1MgY2FuIGJlIGRlZmluZWQgYXMgMCAoTlVMTCkuICovDQogI2lmZGVmIGNvbmZpZ1RBU0tfUkVUVVJOX0FERFJFU1MNCi0gICAgI2RlZmluZSBwb3J0VEFTS19SRVRVUk5fQUREUkVTUyAgICBjb25maWdUQVNLX1JFVFVSTl9BRERSRVNTDQorCSNkZWZpbmUgcG9ydFRBU0tfUkVUVVJOX0FERFJFU1MJY29uZmlnVEFTS19SRVRVUk5fQUREUkVTUw0KICNlbHNlDQotICAgICNkZWZpbmUgcG9ydFRBU0tfUkVUVVJOX0FERFJFU1MgICAgcHJ2VGFza0V4aXRFcnJvcg0KKwkjZGVmaW5lIHBvcnRUQVNLX1JFVFVSTl9BRERSRVNTCXBydlRhc2tFeGl0RXJyb3INCiAjZW5kaWYNCiANCiAvKiBTZXQgY29uZmlnQ0hFQ0tfRk9SX1NUQUNLX09WRVJGTE9XIHRvIDMgdG8gYWRkIElTUiBzdGFjayBjaGVja2luZyB0byB0YXNrDQotICogc3RhY2sgY2hlY2tpbmcuICBBIHByb2JsZW0gaW4gdGhlIElTUiBzdGFjayB3aWxsIHRyaWdnZXIgYW4gYXNzZXJ0LCBub3QgY2FsbCB0aGUNCi0gKiBzdGFjayBvdmVyZmxvdyBob29rIGZ1bmN0aW9uIChiZWNhdXNlIHRoZSBzdGFjayBvdmVyZmxvdyBob29rIGlzIHNwZWNpZmljIHRvIGENCi0gKiB0YXNrIHN0YWNrLCBub3QgdGhlIElTUiBzdGFjaykuICovDQotI2lmICggY29uZmlnQ0hFQ0tfRk9SX1NUQUNLX09WRVJGTE9XID4gMiApDQorc3RhY2sgY2hlY2tpbmcuICBBIHByb2JsZW0gaW4gdGhlIElTUiBzdGFjayB3aWxsIHRyaWdnZXIgYW4gYXNzZXJ0LCBub3QgY2FsbCB0aGUNCitzdGFjayBvdmVyZmxvdyBob29rIGZ1bmN0aW9uIChiZWNhdXNlIHRoZSBzdGFjayBvdmVyZmxvdyBob29rIGlzIHNwZWNpZmljIHRvIGENCit0YXNrIHN0YWNrLCBub3QgdGhlIElTUiBzdGFjaykuICovDQorI2lmKCBjb25maWdDSEVDS19GT1JfU1RBQ0tfT1ZFUkZMT1cgPiAyICkNCiANCi0vKiBEb24ndCB1c2UgMHhhNSBhcyB0aGUgc3RhY2sgZmlsbCBieXRlcyBhcyB0aGF0IGlzIHVzZWQgYnkgdGhlIGtlcm5lbCBmb3INCi0gKiB0aGUgdGFzayBzdGFja3MsIGFuZCBzbyB3aWxsIGxlZ2l0aW1hdGVseSBhcHBlYXIgaW4gbWFueSBwb3NpdGlvbnMgd2l0aGluDQotICogdGhlIElTUiBzdGFjay4gKi8NCi0gICAgI2RlZmluZSBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSAgICAweGVlDQorCS8qIERvbid0IHVzZSAweGE1IGFzIHRoZSBzdGFjayBmaWxsIGJ5dGVzIGFzIHRoYXQgaXMgdXNlZCBieSB0aGUga2VybmVsIGZvcg0KKwl0aGUgdGFzayBzdGFja3MsIGFuZCBzbyB3aWxsIGxlZ2l0aW1hdGVseSBhcHBlYXIgaW4gbWFueSBwb3NpdGlvbnMgd2l0aGluDQorCXRoZSBJU1Igc3RhY2suICovDQorICAgICNkZWZpbmUgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUJMHhlZQ0KIA0KLSAgICBzdGF0aWMgY29uc3QgdWludDhfdCB1Y0V4cGVjdGVkU3RhY2tCeXRlc1tdID0NCi0gICAgew0KLSAgICAgICAgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIFwNCi0gICAgICAgIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBcDQotICAgICAgICBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgXA0KLSAgICAgICAgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIFwNCi0gICAgICAgIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFDQotICAgIH07IFwNCisJc3RhdGljIGNvbnN0IHVpbnQ4X3QgdWNFeHBlY3RlZFN0YWNrQnl0ZXNbXSA9IHsNCisJCQkJCQkJcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsCQlcDQorCQkJCQkJCXBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLAkJXA0KKwkJCQkJCQlwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwJCVwNCisJCQkJCQkJcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsCQlcDQorCQkJCQkJCXBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFIH07CVwNCiANCi0gICAgI2RlZmluZSBwb3J0Q0hFQ0tfSVNSX1NUQUNLKCkgICAgY29uZmlnQVNTRVJUKCAoIG1lbWNtcCggKCB2b2lkICogKSB4SVNSU3RhY2ssICggdm9pZCAqICkgdWNFeHBlY3RlZFN0YWNrQnl0ZXMsIHNpemVvZiggdWNFeHBlY3RlZFN0YWNrQnl0ZXMgKSApID09IDAgKSApDQotI2Vsc2UgLyogaWYgKCBjb25maWdDSEVDS19GT1JfU1RBQ0tfT1ZFUkZMT1cgPiAyICkgKi8NCi0gICAgLyogRGVmaW5lIHRoZSBmdW5jdGlvbiBhd2F5LiAqLw0KLSAgICAjZGVmaW5lIHBvcnRDSEVDS19JU1JfU1RBQ0soKQ0KKwkjZGVmaW5lIHBvcnRDSEVDS19JU1JfU1RBQ0soKSBjb25maWdBU1NFUlQoICggbWVtY21wKCAoIHZvaWQgKiApIHhJU1JTdGFjaywgKCB2b2lkICogKSB1Y0V4cGVjdGVkU3RhY2tCeXRlcywgc2l6ZW9mKCB1Y0V4cGVjdGVkU3RhY2tCeXRlcyApICkgPT0gMCApICkNCisjZWxzZQ0KKwkvKiBEZWZpbmUgdGhlIGZ1bmN0aW9uIGF3YXkuICovDQorCSNkZWZpbmUgcG9ydENIRUNLX0lTUl9TVEFDSygpDQogI2VuZGlmIC8qIGNvbmZpZ0NIRUNLX0ZPUl9TVEFDS19PVkVSRkxPVyA+IDIgKi8NCiANCiANCkBAIC0xNDAsNyArMTM4LDcgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFJlY29yZHMgdGhlIGludGVycnVwdCBuZXN0aW5nIGRlcHRoLiAgVGhpcyBpcyBpbml0aWFsaXNlZCB0byBvbmUgYXMgaXQgaXMNCi0gKiBkZWNyZW1lbnRlZCB0byAwIHdoZW4gdGhlIGZpcnN0IHRhc2sgc3RhcnRzLiAqLw0KK2RlY3JlbWVudGVkIHRvIDAgd2hlbiB0aGUgZmlyc3QgdGFzayBzdGFydHMuICovDQogdm9sYXRpbGUgVUJhc2VUeXBlX3QgdXhJbnRlcnJ1cHROZXN0aW5nID0gMHgwMTsNCiANCiAvKiBTdG9yZXMgdGhlIHRhc2sgc3RhY2sgcG9pbnRlciB3aGVuIGEgc3dpdGNoIGlzIG1hZGUgdG8gdXNlIHRoZSBzeXN0ZW0gc3RhY2suICovDQpAQCAtMTUwLDcgKzE0OCw3IEBACiBTdGFja1R5cGVfdCB4SVNSU3RhY2tbIGNvbmZpZ0lTUl9TVEFDS19TSVpFIF0gPSB7IDAgfTsNCiANCiAvKiBUaGUgdG9wIG9mIHN0YWNrIHZhbHVlIGVuc3VyZXMgdGhlcmUgaXMgZW5vdWdoIHNwYWNlIHRvIHN0b3JlIDYgcmVnaXN0ZXJzIG9uDQotICogdGhlIGNhbGxlcnMgc3RhY2ssIGFzIHNvbWUgZnVuY3Rpb25zIHNlZW0gdG8gd2FudCB0byBkbyB0aGlzLiAqLw0KK3RoZSBjYWxsZXJzIHN0YWNrLCBhcyBzb21lIGZ1bmN0aW9ucyBzZWVtIHRvIHdhbnQgdG8gZG8gdGhpcy4gKi8NCiBjb25zdCBTdGFja1R5cGVfdCAqIGNvbnN0IHhJU1JTdGFja1RvcCA9ICYoIHhJU1JTdGFja1sgY29uZmlnSVNSX1NUQUNLX1NJWkUgLSA3IF0gKTsNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCkBAIC0xNTgsNjIgKzE1Niw1NiBAQAogLyoNCiAgKiBTZWUgaGVhZGVyIGZpbGUgZm9yIGRlc2NyaXB0aW9uLg0KICAqLw0KLVN0YWNrVHlwZV90ICogcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqIHB4VG9wT2ZTdGFjaywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFza0Z1bmN0aW9uX3QgcHhDb2RlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICogcHZQYXJhbWV0ZXJzICkNCitTdGFja1R5cGVfdCAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqcHhUb3BPZlN0YWNrLCBUYXNrRnVuY3Rpb25fdCBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycyApDQogew0KLSAgICAvKiBFbnN1cmUgYnl0ZSBhbGlnbm1lbnQgaXMgbWFpbnRhaW5lZCB3aGVuIGxlYXZpbmcgdGhpcyBmdW5jdGlvbi4gKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIEVuc3VyZSBieXRlIGFsaWdubWVudCBpcyBtYWludGFpbmVkIHdoZW4gbGVhdmluZyB0aGlzIGZ1bmN0aW9uLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweERFQURCRUVGOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IChTdGFja1R5cGVfdCkgMHhERUFEQkVFRjsNCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMjM0NTY3ODsgLyogV29yZCB0byB3aGljaCB0aGUgc3RhY2sgcG9pbnRlciB3aWxsIGJlIGxlZnQgcG9pbnRpbmcgYWZ0ZXIgY29udGV4dCByZXN0b3JlLiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IChTdGFja1R5cGVfdCkgMHgxMjM0NTY3ODsJLyogV29yZCB0byB3aGljaCB0aGUgc3RhY2sgcG9pbnRlciB3aWxsIGJlIGxlZnQgcG9pbnRpbmcgYWZ0ZXIgY29udGV4dCByZXN0b3JlLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSB1bFBvcnRHZXRDUDBDYXVzZSgpOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IChTdGFja1R5cGVfdCkgdWxQb3J0R2V0Q1AwQ2F1c2UoKTsNCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcG9ydElOSVRJQUxfU1I7IC8qIENQMF9TVEFUVVMgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoU3RhY2tUeXBlX3QpIHBvcnRJTklUSUFMX1NSOwkvKiBDUDBfU1RBVFVTICovDQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB4Q29kZTsgLyogQ1AwX0VQQyAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IChTdGFja1R5cGVfdCkgcHhDb2RlOyAJCS8qIENQMF9FUEMgKi8NCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcG9ydFRBU0tfUkVUVVJOX0FERFJFU1M7IC8qIHJhICovDQotICAgIHB4VG9wT2ZTdGFjayAtPSAxNTsNCisJKnB4VG9wT2ZTdGFjayA9IChTdGFja1R5cGVfdCkgcG9ydFRBU0tfUkVUVVJOX0FERFJFU1M7CS8qIHJhICovDQorCXB4VG9wT2ZTdGFjayAtPSAxNTsNCiANCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwdlBhcmFtZXRlcnM7IC8qIFBhcmFtZXRlcnMgdG8gcGFzcyBpbi4gKi8NCi0gICAgcHhUb3BPZlN0YWNrIC09IDE1Ow0KKwkqcHhUb3BPZlN0YWNrID0gKFN0YWNrVHlwZV90KSBwdlBhcmFtZXRlcnM7IC8qIFBhcmFtZXRlcnMgdG8gcGFzcyBpbi4gKi8NCisJcHhUb3BPZlN0YWNrIC09IDE1Ow0KIA0KLSAgICByZXR1cm4gcHhUb3BPZlN0YWNrOw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBzdGF0aWMgX19pbmxpbmUgdWludDMyX3QgcHJ2RGlzYWJsZUludGVycnVwdCggdm9pZCApDQogew0KLSAgICB1aW50MzJfdCBwcmV2X3N0YXRlOw0KK3VpbnQzMl90IHByZXZfc3RhdGU7DQogDQotICAgIF9fYXNtIHZvbGF0aWxlICggImRpICUwOyBlaGIiIDogIj1yIiAoIHByZXZfc3RhdGUgKTo6Im1lbW9yeSIgKTsNCi0NCi0gICAgcmV0dXJuIHByZXZfc3RhdGU7DQorCV9fYXNtIHZvbGF0aWxlKCAiZGkgJTA7IGVoYiIgOiAiPXIiICggcHJldl9zdGF0ZSApIDo6ICJtZW1vcnkiICk7DQorCXJldHVybiBwcmV2X3N0YXRlOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBzdGF0aWMgdm9pZCBwcnZUYXNrRXhpdEVycm9yKCB2b2lkICkNCiB7DQotICAgIC8qIEEgZnVuY3Rpb24gdGhhdCBpbXBsZW1lbnRzIGEgdGFzayBtdXN0IG5vdCBleGl0IG9yIGF0dGVtcHQgdG8gcmV0dXJuIHRvDQotICAgICAqIGl0cyBjYWxsZXIgYXMgdGhlcmUgaXMgbm90aGluZyB0byByZXR1cm4gdG8uICBJZiBhIHRhc2sgd2FudHMgdG8gZXhpdCBpdA0KLSAgICAgKiBzaG91bGQgaW5zdGVhZCBjYWxsIHZUYXNrRGVsZXRlKCBOVUxMICkuDQotICAgICAqDQotICAgICAqIEFydGlmaWNpYWxseSBmb3JjZSBhbiBhc3NlcnQoKSB0byBiZSB0cmlnZ2VyZWQgaWYgY29uZmlnQVNTRVJUKCkgaXMNCi0gICAgICogZGVmaW5lZCwgdGhlbiBzdG9wIGhlcmUgc28gYXBwbGljYXRpb24gd3JpdGVycyBjYW4gY2F0Y2ggdGhlIGVycm9yLiAqLw0KLSAgICBjb25maWdBU1NFUlQoIHV4U2F2ZWRUYXNrU3RhY2tQb2ludGVyID09IDBVTCApOw0KLSAgICBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7DQorCS8qIEEgZnVuY3Rpb24gdGhhdCBpbXBsZW1lbnRzIGEgdGFzayBtdXN0IG5vdCBleGl0IG9yIGF0dGVtcHQgdG8gcmV0dXJuIHRvDQorCWl0cyBjYWxsZXIgYXMgdGhlcmUgaXMgbm90aGluZyB0byByZXR1cm4gdG8uICBJZiBhIHRhc2sgd2FudHMgdG8gZXhpdCBpdA0KKwlzaG91bGQgaW5zdGVhZCBjYWxsIHZUYXNrRGVsZXRlKCBOVUxMICkuDQogDQotICAgIGZvciggOyA7ICkNCi0gICAgew0KLSAgICB9DQorCUFydGlmaWNpYWxseSBmb3JjZSBhbiBhc3NlcnQoKSB0byBiZSB0cmlnZ2VyZWQgaWYgY29uZmlnQVNTRVJUKCkgaXMNCisJZGVmaW5lZCwgdGhlbiBzdG9wIGhlcmUgc28gYXBwbGljYXRpb24gd3JpdGVycyBjYW4gY2F0Y2ggdGhlIGVycm9yLiAqLw0KKwljb25maWdBU1NFUlQoIHV4U2F2ZWRUYXNrU3RhY2tQb2ludGVyID09IDBVTCApOw0KKwlwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7DQorCWZvciggOzsgKTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQpAQCAtMjI1LDEyNCArMjE3LDEyOSBAQAogICogZW5zdXJlIHRoZSBSVE9TIHByb3ZpZGVkIHRpY2sgaW50ZXJydXB0IGhhbmRsZXIgaXMgaW5zdGFsbGVkIG9uIHRoZSBjb3JyZWN0DQogICogdmVjdG9yIG51bWJlci4NCiAgKi8NCi1fX2F0dHJpYnV0ZV9fKCAoIHdlYWsgKSApIHZvaWQgdkFwcGxpY2F0aW9uU2V0dXBUaWNrVGltZXJJbnRlcnJ1cHQoIHZvaWQgKQ0KK19fYXR0cmlidXRlX18oKCB3ZWFrICkpIHZvaWQgdkFwcGxpY2F0aW9uU2V0dXBUaWNrVGltZXJJbnRlcnJ1cHQoIHZvaWQgKQ0KIHsNCiAvKiBNRUMxNHh4IFJUT1MgVGltZXIgd2hvc2UgaW5wdXQgY2xvY2sgaXMgMzJLSHouICovDQotICAgIGNvbnN0IHVpbnQzMl90IHVsUHJlbG9hZCA9ICggMzI3Njh1bCAvICggY29uZmlnVElDS19SQVRFX0haICkgKTsNCitjb25zdCB1aW50MzJfdCB1bFByZWxvYWQgPSAoIDMyNzY4dWwgLyAoIGNvbmZpZ1RJQ0tfUkFURV9IWiApICk7DQogDQotICAgIGNvbmZpZ0FTU0VSVCggdWxQcmVsb2FkICE9IDBVTCApOw0KKwljb25maWdBU1NFUlQoIHVsUHJlbG9hZCAhPSAwVUwgKTsNCiANCi0gICAgLyogQ29uZmlndXJlIHRoZSBSVE9TIHRpbWVyLiAqLw0KLSAgICBwb3J0TU1DUl9SVE1SX0NPTlRST0wgPSAwdWw7DQotICAgIHBvcnRNTUNSX1JUTVJfUFJFTE9BRCA9IHVsUHJlbG9hZDsNCisJLyogQ29uZmlndXJlIHRoZSBSVE9TIHRpbWVyLiAqLw0KKwlwb3J0TU1DUl9SVE1SX0NPTlRST0wgPSAwdWw7DQorCXBvcnRNTUNSX1JUTVJfUFJFTE9BRCA9IHVsUHJlbG9hZDsNCiANCi0gICAgLyogQ29uZmlndXJlIGludGVycnVwdHMgZnJvbSB0aGUgUlRPUyB0aW1lci4gKi8NCi0gICAgcG9ydE1NQ1JfSlRWSUNfR0lSUTIzX1NSQyA9ICggcG9ydEdJUlEyM19SVE9TX1RJTUVSX01BU0sgKTsNCi0gICAgcG9ydE1NQ1JfSlRWSUNfR0lSUTIzX1BSSUEgJj0gfiggMHgwRnVsIDw8IDE2ICk7DQotICAgIHBvcnRNTUNSX0pUVklDX0dJUlEyM19QUklBIHw9ICggKCBwb3J0SVBMX1RPX0NPREUoIGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkgKSApIDw8IDE2ICk7DQotICAgIHBvcnRNTUNSX0pUVklDX0dJUlEyM19TRVRFTiA9ICggcG9ydEdJUlEyM19SVE9TX1RJTUVSX01BU0sgKTsNCisJLyogQ29uZmlndXJlIGludGVycnVwdHMgZnJvbSB0aGUgUlRPUyB0aW1lci4gKi8NCisJcG9ydE1NQ1JfSlRWSUNfR0lSUTIzX1NSQyA9ICggcG9ydEdJUlEyM19SVE9TX1RJTUVSX01BU0sgKTsNCisJcG9ydE1NQ1JfSlRWSUNfR0lSUTIzX1BSSUEgJj0gfiggMHgwRnVsIDw8IDE2ICk7DQorCXBvcnRNTUNSX0pUVklDX0dJUlEyM19QUklBIHw9ICggKCBwb3J0SVBMX1RPX0NPREUoIGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkgKSApIDw8IDE2ICk7DQorCXBvcnRNTUNSX0pUVklDX0dJUlEyM19TRVRFTiA9ICggcG9ydEdJUlEyM19SVE9TX1RJTUVSX01BU0sgKTsNCiANCi0gICAgLyogRW5hYmxlIHRoZSBSVE9TIHRpbWVyLiAqLw0KLSAgICBwb3J0TU1DUl9SVE1SX0NPTlRST0wgPSAweDBGdTsNCisJLyogRW5hYmxlIHRoZSBSVE9TIHRpbWVyLiAqLw0KKwlwb3J0TU1DUl9SVE1SX0NPTlRST0wgPSAweDBGdTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQotdm9pZCB2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApDQordm9pZCB2UG9ydEVuZFNjaGVkdWxlcih2b2lkKQ0KIHsNCi0gICAgLyogTm90IGltcGxlbWVudGVkIGluIHBvcnRzIHdoZXJlIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmV0dXJuIHRvLg0KLSAgICAgKiBBcnRpZmljaWFsbHkgZm9yY2UgYW4gYXNzZXJ0LiAqLw0KLSAgICBjb25maWdBU1NFUlQoIHV4SW50ZXJydXB0TmVzdGluZyA9PSAxMDAwVUwgKTsNCisJLyogTm90IGltcGxlbWVudGVkIGluIHBvcnRzIHdoZXJlIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmV0dXJuIHRvLg0KKwlBcnRpZmljaWFsbHkgZm9yY2UgYW4gYXNzZXJ0LiAqLw0KKwljb25maWdBU1NFUlQoIHV4SW50ZXJydXB0TmVzdGluZyA9PSAxMDAwVUwgKTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogQmFzZVR5cGVfdCB4UG9ydFN0YXJ0U2NoZWR1bGVyKCB2b2lkICkNCiB7DQotICAgIGV4dGVybiB2b2lkIHZQb3J0U3RhcnRGaXJzdFRhc2soIHZvaWQgKTsNCi0gICAgZXh0ZXJuIHZvaWQgKiBweEN1cnJlbnRUQ0I7DQorZXh0ZXJuIHZvaWQgdlBvcnRTdGFydEZpcnN0VGFzayggdm9pZCApOw0KK2V4dGVybiB2b2lkICpweEN1cnJlbnRUQ0I7DQogDQotICAgICNpZiAoIGNvbmZpZ0NIRUNLX0ZPUl9TVEFDS19PVkVSRkxPVyA+IDIgKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIC8qIEZpbGwgdGhlIElTUiBzdGFjayB0byBtYWtlIGl0IGVhc3kgdG8gYXNzZXMgaG93IG11Y2ggaXMgYmVpbmcgdXNlZC4gKi8NCi0gICAgICAgICAgICBtZW1zZXQoICggdm9pZCAqICkgeElTUlN0YWNrLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgc2l6ZW9mKCB4SVNSU3RhY2sgKSApOw0KLSAgICAgICAgfQ0KLSAgICAjZW5kaWYgLyogY29uZmlnQ0hFQ0tfRk9SX1NUQUNLX09WRVJGTE9XID4gMiAqLw0KKwkjaWYgKCBjb25maWdDSEVDS19GT1JfU1RBQ0tfT1ZFUkZMT1cgPiAyICkNCisJew0KKwkJLyogRmlsbCB0aGUgSVNSIHN0YWNrIHRvIG1ha2UgaXQgZWFzeSB0byBhc3NlcyBob3cgbXVjaCBpcyBiZWluZyB1c2VkLiAqLw0KKwkJbWVtc2V0KCAoIHZvaWQgKiApIHhJU1JTdGFjaywgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHNpemVvZiggeElTUlN0YWNrICkgKTsNCisJfQ0KKwkjZW5kaWYgLyogY29uZmlnQ0hFQ0tfRk9SX1NUQUNLX09WRVJGTE9XID4gMiAqLw0KIA0KLSAgICAvKiBDbGVhciB0aGUgc29mdHdhcmUgaW50ZXJydXB0IGZsYWcuICovDQotICAgIHBvcnRNTUNSX0pUVklDX0dJUlEyNF9TUkMgPSAoIHBvcnRHSVJRMjRfTTE0S19TT0ZUSVJRMF9NQVNLICk7DQorCS8qIENsZWFyIHRoZSBzb2Z0d2FyZSBpbnRlcnJ1cHQgZmxhZy4gKi8NCisJcG9ydE1NQ1JfSlRWSUNfR0lSUTI0X1NSQyA9IChwb3J0R0lSUTI0X00xNEtfU09GVElSUTBfTUFTSyk7DQogDQotICAgIC8qIFNldCBzb2Z0d2FyZSB0aW1lciBwcmlvcml0eS4gIEVhY2ggR0lSUW4gaGFzIG9uZSBuaWJibGUgY29udGFpbmluZyBpdHMNCi0gICAgICogcHJpb3JpdHkgKi8NCi0gICAgcG9ydE1NQ1JfSlRWSUNfR0lSUTI0X1BSSUEgJj0gfiggMHhGMHVsICk7DQotICAgIHBvcnRNTUNSX0pUVklDX0dJUlEyNF9QUklBIHw9ICggcG9ydElQTF9UT19DT0RFKCBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZICkgPDwgNCApOw0KKwkvKiBTZXQgc29mdHdhcmUgdGltZXIgcHJpb3JpdHkuICBFYWNoIEdJUlFuIGhhcyBvbmUgbmliYmxlIGNvbnRhaW5pbmcgaXRzDQorCXByaW9yaXR5ICovDQorCXBvcnRNTUNSX0pUVklDX0dJUlEyNF9QUklBICY9IH4oMHhGMHVsKTsNCisJcG9ydE1NQ1JfSlRWSUNfR0lSUTI0X1BSSUEgfD0gKCBwb3J0SVBMX1RPX0NPREUoIGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkgKSA8PCA0ICk7DQogDQotICAgIC8qIEVuYWJsZSBzb2Z0d2FyZSBpbnRlcnJ1cHQuICovDQotICAgIHBvcnRNTUNSX0pUVklDX0dJUlEyNF9TRVRFTiA9ICggcG9ydEdJUlEyNF9NMTRLX1NPRlRJUlEwX01BU0sgKTsNCisJLyogRW5hYmxlIHNvZnR3YXJlIGludGVycnVwdC4gKi8NCisJcG9ydE1NQ1JfSlRWSUNfR0lSUTI0X1NFVEVOID0gKCBwb3J0R0lSUTI0X00xNEtfU09GVElSUTBfTUFTSyApOw0KIA0KLSAgICAvKiBTZXR1cCB0aGUgdGltZXIgdG8gZ2VuZXJhdGUgdGhlIHRpY2suICBJbnRlcnJ1cHRzIHdpbGwgaGF2ZSBiZWVuIGRpc2FibGVkDQotICAgICAqIGJ5IHRoZSB0aW1lIHdlIGdldCBoZXJlLiAqLw0KLSAgICB2QXBwbGljYXRpb25TZXR1cFRpY2tUaW1lckludGVycnVwdCgpOw0KKwkvKiBTZXR1cCB0aGUgdGltZXIgdG8gZ2VuZXJhdGUgdGhlIHRpY2suICBJbnRlcnJ1cHRzIHdpbGwgaGF2ZSBiZWVuIGRpc2FibGVkDQorCWJ5IHRoZSB0aW1lIHdlIGdldCBoZXJlLiAqLw0KKwl2QXBwbGljYXRpb25TZXR1cFRpY2tUaW1lckludGVycnVwdCgpOw0KIA0KLSAgICAvKiBTdGFydCB0aGUgaGlnaGVzdCBwcmlvcml0eSB0YXNrIHRoYXQgaGFzIGJlZW4gY3JlYXRlZCBzbyBmYXIuICBJdHMgc3RhY2sNCi0gICAgICogbG9jYXRpb24gaXMgbG9hZGVkIGludG8gdXhTYXZlZFRhc2tTdGFja1BvaW50ZXIuICovDQotICAgIHV4U2F2ZWRUYXNrU3RhY2tQb2ludGVyID0gKiggVUJhc2VUeXBlX3QgKiApIHB4Q3VycmVudFRDQjsNCi0gICAgdlBvcnRTdGFydEZpcnN0VGFzaygpOw0KKwkvKiBTdGFydCB0aGUgaGlnaGVzdCBwcmlvcml0eSB0YXNrIHRoYXQgaGFzIGJlZW4gY3JlYXRlZCBzbyBmYXIuICBJdHMgc3RhY2sNCisJbG9jYXRpb24gaXMgbG9hZGVkIGludG8gdXhTYXZlZFRhc2tTdGFja1BvaW50ZXIuICovDQorCXV4U2F2ZWRUYXNrU3RhY2tQb2ludGVyID0gKiggVUJhc2VUeXBlX3QgKiApIHB4Q3VycmVudFRDQjsNCisJdlBvcnRTdGFydEZpcnN0VGFzaygpOw0KIA0KLSAgICAvKiBTaG91bGQgbmV2ZXIgZ2V0IGhlcmUgYXMgdGhlIHRhc2tzIHdpbGwgbm93IGJlIGV4ZWN1dGluZyEgIENhbGwgdGhlIHRhc2sNCi0gICAgICogZXhpdCBlcnJvciBmdW5jdGlvbiB0byBwcmV2ZW50IGNvbXBpbGVyIHdhcm5pbmdzIGFib3V0IGEgc3RhdGljIGZ1bmN0aW9uDQotICAgICAqIG5vdCBiZWluZyBjYWxsZWQgaW4gdGhlIGNhc2UgdGhhdCB0aGUgYXBwbGljYXRpb24gd3JpdGVyIG92ZXJyaWRlcyB0aGlzDQotICAgICAqIGZ1bmN0aW9uYWxpdHkgYnkgZGVmaW5pbmcgY29uZmlnVEFTS19SRVRVUk5fQUREUkVTUy4gKi8NCi0gICAgcHJ2VGFza0V4aXRFcnJvcigpOw0KKwkvKiBTaG91bGQgbmV2ZXIgZ2V0IGhlcmUgYXMgdGhlIHRhc2tzIHdpbGwgbm93IGJlIGV4ZWN1dGluZyEgIENhbGwgdGhlIHRhc2sNCisJZXhpdCBlcnJvciBmdW5jdGlvbiB0byBwcmV2ZW50IGNvbXBpbGVyIHdhcm5pbmdzIGFib3V0IGEgc3RhdGljIGZ1bmN0aW9uDQorCW5vdCBiZWluZyBjYWxsZWQgaW4gdGhlIGNhc2UgdGhhdCB0aGUgYXBwbGljYXRpb24gd3JpdGVyIG92ZXJyaWRlcyB0aGlzDQorCWZ1bmN0aW9uYWxpdHkgYnkgZGVmaW5pbmcgY29uZmlnVEFTS19SRVRVUk5fQUREUkVTUy4gKi8NCisJcHJ2VGFza0V4aXRFcnJvcigpOw0KIA0KLSAgICByZXR1cm4gcGRGQUxTRTsNCisJcmV0dXJuIHBkRkFMU0U7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlBvcnRJbmNyZW1lbnRUaWNrKCB2b2lkICkNCiB7DQotICAgIFVCYXNlVHlwZV90IHV4U2F2ZWRTdGF0dXM7DQotICAgIHVpbnQzMl90IHVsQ2F1c2U7DQorVUJhc2VUeXBlX3QgdXhTYXZlZFN0YXR1czsNCit1aW50MzJfdCB1bENhdXNlOw0KIA0KLSAgICB1eFNhdmVkU3RhdHVzID0gdXhQb3J0U2V0SW50ZXJydXB0TWFza0Zyb21JU1IoKTsNCi0gICAgew0KLSAgICAgICAgaWYoIHhUYXNrSW5jcmVtZW50VGljaygpICE9IHBkRkFMU0UgKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIC8qIFBlbmQgYSBjb250ZXh0IHN3aXRjaC4gKi8NCi0gICAgICAgICAgICB1bENhdXNlID0gdWxQb3J0R2V0Q1AwQ2F1c2UoKTsNCi0gICAgICAgICAgICB1bENhdXNlIHw9ICggMXVsIDw8IDhVTCApOw0KLSAgICAgICAgICAgIHZQb3J0U2V0Q1AwQ2F1c2UoIHVsQ2F1c2UgKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICB2UG9ydENsZWFySW50ZXJydXB0TWFza0Zyb21JU1IoIHV4U2F2ZWRTdGF0dXMgKTsNCisJdXhTYXZlZFN0YXR1cyA9IHV4UG9ydFNldEludGVycnVwdE1hc2tGcm9tSVNSKCk7DQorCXsNCisJCWlmKCB4VGFza0luY3JlbWVudFRpY2soKSAhPSBwZEZBTFNFICkNCisJCXsNCisJCQkvKiBQZW5kIGEgY29udGV4dCBzd2l0Y2guICovDQorCQkJdWxDYXVzZSA9IHVsUG9ydEdldENQMENhdXNlKCk7DQorCQkJdWxDYXVzZSB8PSAoIDF1bCA8PCA4VUwgKTsNCisJCQl2UG9ydFNldENQMENhdXNlKCB1bENhdXNlICk7DQorCQl9DQorCX0NCisJdlBvcnRDbGVhckludGVycnVwdE1hc2tGcm9tSVNSKCB1eFNhdmVkU3RhdHVzICk7DQogDQotICAgIC8qIExvb2sgZm9yIHRoZSBJU1Igc3RhY2sgZ2V0dGluZyBuZWFyIG9yIHBhc3QgaXRzIGxpbWl0LiAqLw0KLSAgICBwb3J0Q0hFQ0tfSVNSX1NUQUNLKCk7DQorCS8qIExvb2sgZm9yIHRoZSBJU1Igc3RhY2sgZ2V0dGluZyBuZWFyIG9yIHBhc3QgaXRzIGxpbWl0LiAqLw0KKwlwb3J0Q0hFQ0tfSVNSX1NUQUNLKCk7DQogDQotICAgIC8qIENsZWFyIHRpbWVyIGludGVycnVwdC4gKi8NCi0gICAgY29uZmlnQ0xFQVJfVElDS19USU1FUl9JTlRFUlJVUFQoKTsNCisJLyogQ2xlYXIgdGltZXIgaW50ZXJydXB0LiAqLw0KKwljb25maWdDTEVBUl9USUNLX1RJTUVSX0lOVEVSUlVQVCgpOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBVQmFzZVR5cGVfdCB1eFBvcnRTZXRJbnRlcnJ1cHRNYXNrRnJvbUlTUiggdm9pZCApDQogew0KLSAgICBVQmFzZVR5cGVfdCB1eFNhdmVkU3RhdHVzUmVnaXN0ZXI7DQorVUJhc2VUeXBlX3QgdXhTYXZlZFN0YXR1c1JlZ2lzdGVyOw0KIA0KLSAgICBwcnZEaXNhYmxlSW50ZXJydXB0KCk7DQotICAgIHV4U2F2ZWRTdGF0dXNSZWdpc3RlciA9IHVsUG9ydEdldENQMFN0YXR1cygpIHwgMHgwMTsNCisJcHJ2RGlzYWJsZUludGVycnVwdCgpOw0KKwl1eFNhdmVkU3RhdHVzUmVnaXN0ZXIgPSB1bFBvcnRHZXRDUDBTdGF0dXMoKSB8IDB4MDE7DQogDQotICAgIC8qIFRoaXMgY2xlYXJzIHRoZSBJUEwgYml0cywgdGhlbiBzZXRzIHRoZW0gdG8NCi0gICAgICogY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZLiAgVGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIGNhbGxlZA0KLSAgICAgKiBmcm9tIGFuIGludGVycnVwdCB0aGF0IGhhcyBhIHByaW9yaXR5IGFib3ZlDQotICAgICAqIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSBzbywgd2hlbiB1c2VkIGNvcnJlY3RseSwgdGhlIGFjdGlvbg0KLSAgICAgKiBjYW4gb25seSByZXN1bHQgaW4gdGhlIElQTCBiZWluZyB1bmNoYW5nZWQgb3IgcmFpc2VkLCBhbmQgdGhlcmVmb3JlIG5ldmVyDQotICAgICAqIGxvd2VyZWQuICovDQotICAgIHZQb3J0U2V0Q1AwU3RhdHVzKCAoICggdXhTYXZlZFN0YXR1c1JlZ2lzdGVyICYgKCB+cG9ydEFMTF9JUExfQklUUyApICkgKSB8ICggY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIDw8IHBvcnRJUExfU0hJRlQgKSApOw0KKwkvKiBUaGlzIGNsZWFycyB0aGUgSVBMIGJpdHMsIHRoZW4gc2V0cyB0aGVtIHRvDQorCWNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWS4gIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBjYWxsZWQNCisJZnJvbSBhbiBpbnRlcnJ1cHQgdGhhdCBoYXMgYSBwcmlvcml0eSBhYm92ZQ0KKwljb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgc28sIHdoZW4gdXNlZCBjb3JyZWN0bHksIHRoZSBhY3Rpb24NCisJY2FuIG9ubHkgcmVzdWx0IGluIHRoZSBJUEwgYmVpbmcgdW5jaGFuZ2VkIG9yIHJhaXNlZCwgYW5kIHRoZXJlZm9yZSBuZXZlcg0KKwlsb3dlcmVkLiAqLw0KKwl2UG9ydFNldENQMFN0YXR1cyggKCAoIHV4U2F2ZWRTdGF0dXNSZWdpc3RlciAmICggfnBvcnRBTExfSVBMX0JJVFMgKSApICkgfCAoIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSA8PCBwb3J0SVBMX1NISUZUICkgKTsNCiANCi0gICAgcmV0dXJuIHV4U2F2ZWRTdGF0dXNSZWdpc3RlcjsNCisJcmV0dXJuIHV4U2F2ZWRTdGF0dXNSZWdpc3RlcjsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogdm9pZCB2UG9ydENsZWFySW50ZXJydXB0TWFza0Zyb21JU1IoIFVCYXNlVHlwZV90IHV4U2F2ZWRTdGF0dXNSZWdpc3RlciApDQogew0KLSAgICB2UG9ydFNldENQMFN0YXR1cyggdXhTYXZlZFN0YXR1c1JlZ2lzdGVyICk7DQorCXZQb3J0U2V0Q1AwU3RhdHVzKCB1eFNhdmVkU3RhdHVzUmVnaXN0ZXIgKTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorDQorDQorDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvTVBMQUIvUElDMzJNRUMxNHh4L3BvcnRtYWNyby5oIGIvcG9ydGFibGUvTVBMQUIvUElDMzJNRUMxNHh4L3BvcnRtYWNyby5oCmluZGV4IGJhMDVlZDcuLmY0YTMwYjAgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL01QTEFCL1BJQzMyTUVDMTR4eC9wb3J0bWFjcm8uaAorKysgYi9wb3J0YWJsZS9NUExBQi9QSUMzMk1FQzE0eHgvcG9ydG1hY3JvLmgKQEAgLTI2LDExICsyNiwxMSBAQAogICovDQogDQogI2lmbmRlZiBQT1JUTUFDUk9fSA0KLSAgICAjZGVmaW5lIFBPUlRNQUNST19IDQorI2RlZmluZSBQT1JUTUFDUk9fSA0KIA0KLSAgICAjaWZkZWYgX19jcGx1c3BsdXMNCi0gICAgICAgIGV4dGVybiAiQyIgew0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICogUG9ydCBzcGVjaWZpYyBkZWZpbml0aW9ucy4NCkBAIC00MywyMTEgKzQzLDIxMCBAQAogICovDQogDQogLyogVHlwZSBkZWZpbml0aW9ucy4gKi8NCi0gICAgI2RlZmluZSBwb3J0Q0hBUiAgICAgICAgICBjaGFyDQotICAgICNkZWZpbmUgcG9ydEZMT0FUICAgICAgICAgZmxvYXQNCi0gICAgI2RlZmluZSBwb3J0RE9VQkxFICAgICAgICBkb3VibGUNCi0gICAgI2RlZmluZSBwb3J0TE9ORyAgICAgICAgICBsb25nDQotICAgICNkZWZpbmUgcG9ydFNIT1JUICAgICAgICAgc2hvcnQNCi0gICAgI2RlZmluZSBwb3J0U1RBQ0tfVFlQRSAgICB1aW50MzJfdA0KLSAgICAjZGVmaW5lIHBvcnRCQVNFX1RZUEUgICAgIGxvbmcNCisjZGVmaW5lIHBvcnRDSEFSICAgICAgICBjaGFyDQorI2RlZmluZSBwb3J0RkxPQVQgICAgICAgZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUgICAgICBkb3VibGUNCisjZGVmaW5lIHBvcnRMT05HICAgICAgICBsb25nDQorI2RlZmluZSBwb3J0U0hPUlQgICAgICAgc2hvcnQNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFICB1aW50MzJfdA0KKyNkZWZpbmUgcG9ydEJBU0VfVFlQRSAgIGxvbmcNCiANCi0gICAgdHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSAgIFN0YWNrVHlwZV90Ow0KLSAgICB0eXBlZGVmIGxvbmcgICAgICAgICAgICAgQmFzZVR5cGVfdDsNCi0gICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nICAgIFVCYXNlVHlwZV90Ow0KK3R5cGVkZWYgcG9ydFNUQUNLX1RZUEUgU3RhY2tUeXBlX3Q7DQordHlwZWRlZiBsb25nIEJhc2VUeXBlX3Q7DQordHlwZWRlZiB1bnNpZ25lZCBsb25nIFVCYXNlVHlwZV90Ow0KIA0KLSAgICAjaWYgKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KLSAgICAgICAgdHlwZWRlZiB1aW50MTZfdCAgICAgVGlja1R5cGVfdDsNCi0gICAgICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmYNCi0gICAgI2Vsc2UNCi0gICAgICAgIHR5cGVkZWYgdWludDMyX3QgICAgIFRpY2tUeXBlX3Q7DQotICAgICAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQotICAgICNlbmRpZg0KKyNpZiggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCisJdHlwZWRlZiB1aW50MTZfdCBUaWNrVHlwZV90Ow0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQorI2Vsc2UNCisJdHlwZWRlZiB1aW50MzJfdCBUaWNrVHlwZV90Ow0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQorI2VuZGlmDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogSGFyZHdhcmUgc3BlY2lmaWNzLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVCAgICA4DQotICAgICNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSCAgICAgIC0xDQotICAgICNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TICAgICggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQorI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQgIDgNCisjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEggICAgLTENCisjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUyAgKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBDcml0aWNhbCBzZWN0aW9uIG1hbmFnZW1lbnQuICovDQotICAgICNkZWZpbmUgcG9ydElQTF9TSElGVCAgICAgICAoIDEwVUwgKQ0KLQ0KKyNkZWZpbmUgcG9ydElQTF9TSElGVCAgICAgICAoIDEwVUwgKQ0KIC8qIERvbid0IHN0cmFkZGxlIHRoZSBDRUUgYml0LiAgSW50ZXJydXB0cyBjYWxsaW5nIEZyZWVSVE9TIGZ1bmN0aW9ucyBzaG91bGQNCi0gKiBuZXZlciBoYXZlIGhpZ2hlciBJUEwgYml0cyBzZXQgYW55d2F5LiAqLw0KLSAgICAjZGVmaW5lIHBvcnRBTExfSVBMX0JJVFMgICAgKCAweDdGVUwgPDwgcG9ydElQTF9TSElGVCApDQotICAgICNkZWZpbmUgcG9ydFNXMF9CSVQgICAgICAgICAoIDB4MDEgPDwgOCApDQorbmV2ZXIgaGF2ZSBoaWdoZXIgSVBMIGJpdHMgc2V0IGFueXdheS4gKi8NCisjZGVmaW5lIHBvcnRBTExfSVBMX0JJVFMgICAgKCAweDdGVUwgPDwgcG9ydElQTF9TSElGVCApDQorI2RlZmluZSBwb3J0U1cwX0JJVCAgICAgICAgICggMHgwMSA8PCA4ICkNCiANCiAvKiBJbnRlcnJ1cHQgcHJpb3JpdHkgY29udmVyc2lvbiAqLw0KLSAgICAjZGVmaW5lIHBvcnRJUExfVE9fQ09ERSggaXBsTnVtYmVyICkgICAgKCAoIGlwbE51bWJlciA+PiAxICkgJiAweDAzdWwgKQ0KLSAgICAjZGVmaW5lIHBvcnRDT0RFX1RPX0lQTCggaXBsQ29kZSApICAgICAgKCAoIGlwbENvZGUgPDwgMSApIHwgMHgwMXVsICkNCisjZGVmaW5lIHBvcnRJUExfVE9fQ09ERSggaXBsTnVtYmVyICkgICAgKCAoIGlwbE51bWJlciA+PiAxICkgJiAweDAzdWwgKQ0KKyNkZWZpbmUgcG9ydENPREVfVE9fSVBMKCBpcGxDb2RlICkgICAgICAoICggaXBsQ29kZSA8PCAxICkgfCAweDAxdWwgKQ0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KLSAgICBzdGF0aWMgaW5saW5lIHVpbnQzMl90IHVsUG9ydEdldENQMFN0YXR1cyggdm9pZCApDQotICAgIHsNCi0gICAgICAgIHVpbnQzMl90IHJ2Ow0KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgdWxQb3J0R2V0Q1AwU3RhdHVzKCB2b2lkICkNCit7DQordWludDMyX3QgcnY7DQogDQotICAgICAgICBfX2FzbSB2b2xhdGlsZSAoDQotICAgICAgICAgICAgIlxuXHQiDQotICAgICAgICAgICAgIm1mYzAgJTAsJDEyLDAgICAgICBcblx0Ig0KLSAgICAgICAgICAgIDogIj1yIiAoIHJ2ICk6Oik7DQorCV9fYXNtIHZvbGF0aWxlKA0KKwkJCSJcblx0Ig0KKwkJCSJtZmMwICUwLCQxMiwwICAgICAgXG5cdCINCisJCQk6ICI9ciIgKCBydiApIDo6ICk7DQogDQotICAgICAgICByZXR1cm4gcnY7DQotICAgIH0NCisJcmV0dXJuIHJ2Ow0KK30NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0gICAgc3RhdGljIGlubGluZSB2b2lkIHZQb3J0U2V0Q1AwU3RhdHVzKCB1aW50MzJfdCBuZXdfc3RhdHVzICkNCi0gICAgew0KLSAgICAgICAgKCB2b2lkICkgbmV3X3N0YXR1czsNCitzdGF0aWMgaW5saW5lIHZvaWQgdlBvcnRTZXRDUDBTdGF0dXMoIHVpbnQzMl90IG5ld19zdGF0dXMpDQorew0KKwkoIHZvaWQgKSBuZXdfc3RhdHVzOw0KIA0KLSAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKA0KLSAgICAgICAgICAgICJcblx0Ig0KLSAgICAgICAgICAgICJtdGMwICUwLCQxMiwwICAgICAgXG5cdCINCi0gICAgICAgICAgICAiZWhiICAgICAgICAgICAgICAgIFxuXHQiDQotICAgICAgICAgICAgOg0KLSAgICAgICAgICAgIDogInIiICggbmV3X3N0YXR1cyApIDogKTsNCi0gICAgfQ0KKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygNCisJCQkiXG5cdCINCisJCQkibXRjMCAlMCwkMTIsMCAgICAgIFxuXHQiDQorCQkJImVoYiAgICAgICAgICAgICAgICBcblx0Ig0KKwkJCToNCisJCQk6InIiICggbmV3X3N0YXR1cyApIDogKTsNCit9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQotICAgIHN0YXRpYyBpbmxpbmUgdWludDMyX3QgdWxQb3J0R2V0Q1AwQ2F1c2UoIHZvaWQgKQ0KLSAgICB7DQotICAgICAgICB1aW50MzJfdCBydjsNCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IHVsUG9ydEdldENQMENhdXNlKCB2b2lkICkNCit7DQordWludDMyX3QgcnY7DQogDQotICAgICAgICBfX2FzbSB2b2xhdGlsZSAoDQotICAgICAgICAgICAgIlxuXHQiDQotICAgICAgICAgICAgIm1mYzAgJTAsJDEzLDAgICAgICBcblx0Ig0KLSAgICAgICAgICAgIDogIj1yIiAoIHJ2ICk6Oik7DQorCV9fYXNtIHZvbGF0aWxlKA0KKwkJCSJcblx0Ig0KKwkJCSJtZmMwICUwLCQxMywwICAgICAgXG5cdCINCisJCQk6ICI9ciIgKCBydiApIDo6ICk7DQogDQotICAgICAgICByZXR1cm4gcnY7DQotICAgIH0NCisgICAgcmV0dXJuIHJ2Ow0KK30NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0gICAgc3RhdGljIGlubGluZSB2b2lkIHZQb3J0U2V0Q1AwQ2F1c2UoIHVpbnQzMl90IG5ld19jYXVzZSApDQotICAgIHsNCi0gICAgICAgICggdm9pZCApIG5ld19jYXVzZTsNCitzdGF0aWMgaW5saW5lIHZvaWQgdlBvcnRTZXRDUDBDYXVzZSggdWludDMyX3QgbmV3X2NhdXNlICkNCit7DQorCSggdm9pZCApIG5ld19jYXVzZTsNCiANCi0gICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgNCi0gICAgICAgICAgICAiXG5cdCINCi0gICAgICAgICAgICAibXRjMCAlMCwkMTMsMCAgICAgIFxuXHQiDQotICAgICAgICAgICAgImVoYiAgICAgICAgICAgICAgICBcblx0Ig0KLSAgICAgICAgICAgIDoNCi0gICAgICAgICAgICA6ICJyIiAoIG5ld19jYXVzZSApIDogKTsNCi0gICAgfQ0KKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygNCisJCQkiXG5cdCINCisJCQkibXRjMCAlMCwkMTMsMCAgICAgIFxuXHQiDQorCQkJImVoYiAgICAgICAgICAgICAgICBcblx0Ig0KKwkJCToNCisJCQk6InIiICggbmV3X2NhdXNlICkgOiApOw0KK30NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBUaGlzIGNsZWFycyB0aGUgSVBMIGJpdHMsIHRoZW4gc2V0cyB0aGVtIHRvDQotICogY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZLiAgQW4gZXh0cmEgY2hlY2sgaXMgcGVyZm9ybWVkIGlmDQotICogY29uZmlnQVNTRVJUKCkgaXMgZGVmaW5lZCB0byBlbnN1cmUgYW4gYXNzZXJ0aW9uIGhhbmRsZXIgZG9lcyBub3QgaW5hZHZlcnRlbnRseQ0KLSAqIGF0dGVtcHQgdG8gbG93ZXIgdGhlIElQTCB3aGVuIHRoZSBjYWxsIHRvIGFzc2VydCB3YXMgdHJpZ2dlcmVkIGJlY2F1c2UgdGhlIElQTA0KLSAqIHZhbHVlIHdhcyBmb3VuZCB0byBiZSBhYm92ZSBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgd2hlbiBhbiBJU1INCi0gKiBzYWZlIEZyZWVSVE9TIEFQSSBmdW5jdGlvbiB3YXMgZXhlY3V0ZWQuICBJU1Igc2FmZSBGcmVlUlRPUyBBUEkgZnVuY3Rpb25zIGFyZQ0KLSAqIHRob3NlIHRoYXQgZW5kIGluIEZyb21JU1IuICBGcmVlUlRPUyBtYWludGFpbnMgYSBzZXBhcmF0ZSBpbnRlcnJ1cHQgQVBJIHRvDQotICogZW5zdXJlIEFQSSBmdW5jdGlvbiBhbmQgaW50ZXJydXB0IGVudHJ5IGlzIGFzIGZhc3QgYW5kIGFzIHNpbXBsZSBhcyBwb3NzaWJsZS4gKi8NCi0gICAgI2lmZGVmIGNvbmZpZ0FTU0VSVA0KLSAgICAgICAgI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgdWludDMyX3QgdWxTdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgLyogTWFzayBpbnRlcnJ1cHRzIGF0IGFuZCBiZWxvdyB0aGUga2VybmVsIGludGVycnVwdCBwcmlvcml0eS4gKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgdWxTdGF0dXMgPSB1bFBvcnRHZXRDUDBTdGF0dXMoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgLyogSXMgdGhlIGN1cnJlbnQgSVBMIGJlbG93IGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWT8gKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgaWYoICggKCB1bFN0YXR1cyAmIHBvcnRBTExfSVBMX0JJVFMgKSA+PiBwb3J0SVBMX1NISUZUICkgPCBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgKSAgXA0KLSAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIHVsU3RhdHVzICY9IH5wb3J0QUxMX0lQTF9CSVRTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIHZQb3J0U2V0Q1AwU3RhdHVzKCAoIHVsU3RhdHVzIHwgKCBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgPDwgcG9ydElQTF9TSElGVCApICkgKTsgXA0KLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KK2NvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWS4gIEFuIGV4dHJhIGNoZWNrIGlzIHBlcmZvcm1lZCBpZg0KK2NvbmZpZ0FTU0VSVCgpIGlzIGRlZmluZWQgdG8gZW5zdXJlIGFuIGFzc2VydGlvbiBoYW5kbGVyIGRvZXMgbm90IGluYWR2ZXJ0ZW50bHkNCithdHRlbXB0IHRvIGxvd2VyIHRoZSBJUEwgd2hlbiB0aGUgY2FsbCB0byBhc3NlcnQgd2FzIHRyaWdnZXJlZCBiZWNhdXNlIHRoZSBJUEwNCit2YWx1ZSB3YXMgZm91bmQgdG8gYmUgYWJvdmUgY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIHdoZW4gYW4gSVNSDQorc2FmZSBGcmVlUlRPUyBBUEkgZnVuY3Rpb24gd2FzIGV4ZWN1dGVkLiAgSVNSIHNhZmUgRnJlZVJUT1MgQVBJIGZ1bmN0aW9ucyBhcmUNCit0aG9zZSB0aGF0IGVuZCBpbiBGcm9tSVNSLiAgRnJlZVJUT1MgbWFpbnRhaW5zIGEgc2VwYXJhdGUgaW50ZXJydXB0IEFQSSB0bw0KK2Vuc3VyZSBBUEkgZnVuY3Rpb24gYW5kIGludGVycnVwdCBlbnRyeSBpcyBhcyBmYXN0IGFuZCBhcyBzaW1wbGUgYXMgcG9zc2libGUuICovDQorI2lmZGVmIGNvbmZpZ0FTU0VSVA0KKyAgICAjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwl7IAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJdWludDMyX3QgdWxTdGF0dXM7IAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJLyogTWFzayBpbnRlcnJ1cHRzIGF0IGFuZCBiZWxvdyB0aGUga2VybmVsIGludGVycnVwdCBwcmlvcml0eS4gKi8gIAkJCQkJCQkJCQlcDQorCQl1bFN0YXR1cyA9IHVsUG9ydEdldENQMFN0YXR1cygpOyAJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkvKiBJcyB0aGUgY3VycmVudCBJUEwgYmVsb3cgY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZPyAqLyAJCQkJCQkJCQlcDQorCQlpZiggKCAoIHVsU3RhdHVzICYgcG9ydEFMTF9JUExfQklUUyApID4+IHBvcnRJUExfU0hJRlQgKSA8IGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSApIAkJXA0KKwkJeyAJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCQl1bFN0YXR1cyAmPSB+cG9ydEFMTF9JUExfQklUUzsgIAkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCXZQb3J0U2V0Q1AwU3RhdHVzKCAoIHVsU3RhdHVzIHwgKCBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgPDwgcG9ydElQTF9TSElGVCApICkgKTsgCQlcDQorCQl9IAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KICAgICB9DQotICAgICNlbHNlIC8qIGNvbmZpZ0FTU0VSVCAqLw0KLSAgICAgICAgI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHVpbnQzMl90IHVsU3RhdHVzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgLyogTWFzayBpbnRlcnJ1cHRzIGF0IGFuZCBiZWxvdyB0aGUga2VybmVsIGludGVycnVwdCBwcmlvcml0eS4gKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICB1bFN0YXR1cyA9IHVsUG9ydEdldENQMFN0YXR1cygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHVsU3RhdHVzICY9IH5wb3J0QUxMX0lQTF9CSVRTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgdlBvcnRTZXRDUDBTdGF0dXMoICggdWxTdGF0dXMgfCAoIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSA8PCBwb3J0SVBMX1NISUZUICkgKSApOyBcDQotICAgIH0NCi0gICAgI2VuZGlmIC8qIGNvbmZpZ0FTU0VSVCAqLw0KKyNlbHNlIC8qIGNvbmZpZ0FTU0VSVCAqLw0KKwkjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwl7IAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJdWludDMyX3QgdWxTdGF0dXM7ICAJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJLyogTWFzayBpbnRlcnJ1cHRzIGF0IGFuZCBiZWxvdyB0aGUga2VybmVsIGludGVycnVwdCBwcmlvcml0eS4gKi8gCQkJCQkJCQkJCVwNCisJCXVsU3RhdHVzID0gdWxQb3J0R2V0Q1AwU3RhdHVzKCk7IAkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCXVsU3RhdHVzICY9IH5wb3J0QUxMX0lQTF9CSVRTOyAJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJdlBvcnRTZXRDUDBTdGF0dXMoICggdWxTdGF0dXMgfCAoIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSA8PCBwb3J0SVBMX1NISUZUICkgKSApOyAJCQlcDQorCX0NCisjZW5kaWYgLyogY29uZmlnQVNTRVJUICovDQogDQotICAgICNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkgICAgICBcDQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICB1aW50MzJfdCB1bFN0YXR1czsgICAgICAgICAgICAgICBcDQotICAgICAgICAvKiBVbm1hc2sgYWxsIGludGVycnVwdHMuICovICAgICBcDQotICAgICAgICB1bFN0YXR1cyA9IHVsUG9ydEdldENQMFN0YXR1cygpOyBcDQotICAgICAgICB1bFN0YXR1cyAmPSB+cG9ydEFMTF9JUExfQklUUzsgICBcDQotICAgICAgICB2UG9ydFNldENQMFN0YXR1cyggdWxTdGF0dXMgKTsgICBcDQotICAgIH0NCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpIAkJCVwNCit7IAkJCQkJCQkJCQkJXA0KK3VpbnQzMl90IHVsU3RhdHVzOyAJCQkJCQkJXA0KKwkvKiBVbm1hc2sgYWxsIGludGVycnVwdHMuICovIAkJCVwNCisJdWxTdGF0dXMgPSB1bFBvcnRHZXRDUDBTdGF0dXMoKTsgCQlcDQorCXVsU3RhdHVzICY9IH5wb3J0QUxMX0lQTF9CSVRTOyAJCQlcDQorCXZQb3J0U2V0Q1AwU3RhdHVzKCB1bFN0YXR1cyApOyAJCQlcDQorfQ0KIA0KIA0KLSAgICBleHRlcm4gdm9pZCB2VGFza0VudGVyQ3JpdGljYWwoIHZvaWQgKTsNCi0gICAgZXh0ZXJuIHZvaWQgdlRhc2tFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCi0gICAgI2RlZmluZSBwb3J0Q1JJVElDQUxfTkVTVElOR19JTl9UQ0IgICAgMQ0KLSAgICAjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpICAgIHZUYXNrRW50ZXJDcml0aWNhbCgpDQotICAgICNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKSAgICAgdlRhc2tFeGl0Q3JpdGljYWwoKQ0KK2V4dGVybiB2b2lkIHZUYXNrRW50ZXJDcml0aWNhbCggdm9pZCApOw0KK2V4dGVybiB2b2lkIHZUYXNrRXhpdENyaXRpY2FsKCB2b2lkICk7DQorI2RlZmluZSBwb3J0Q1JJVElDQUxfTkVTVElOR19JTl9UQ0IJMQ0KKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkJCXZUYXNrRW50ZXJDcml0aWNhbCgpDQorI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpCQkJdlRhc2tFeGl0Q3JpdGljYWwoKQ0KIA0KLSAgICBleHRlcm4gVUJhc2VUeXBlX3QgdXhQb3J0U2V0SW50ZXJydXB0TWFza0Zyb21JU1IoKTsNCi0gICAgZXh0ZXJuIHZvaWQgdlBvcnRDbGVhckludGVycnVwdE1hc2tGcm9tSVNSKCBVQmFzZVR5cGVfdCApOw0KLSAgICAjZGVmaW5lIHBvcnRTRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXhQb3J0U2V0SW50ZXJydXB0TWFza0Zyb21JU1IoKQ0KLSAgICAjZGVmaW5lIHBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUiggdXhTYXZlZFN0YXR1c1JlZ2lzdGVyICkgICAgdlBvcnRDbGVhckludGVycnVwdE1hc2tGcm9tSVNSKCB1eFNhdmVkU3RhdHVzUmVnaXN0ZXIgKQ0KK2V4dGVybiBVQmFzZVR5cGVfdCB1eFBvcnRTZXRJbnRlcnJ1cHRNYXNrRnJvbUlTUigpOw0KK2V4dGVybiB2b2lkIHZQb3J0Q2xlYXJJbnRlcnJ1cHRNYXNrRnJvbUlTUiggVUJhc2VUeXBlX3QgKTsNCisjZGVmaW5lIHBvcnRTRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKSB1eFBvcnRTZXRJbnRlcnJ1cHRNYXNrRnJvbUlTUigpDQorI2RlZmluZSBwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoIHV4U2F2ZWRTdGF0dXNSZWdpc3RlciApIHZQb3J0Q2xlYXJJbnRlcnJ1cHRNYXNrRnJvbUlTUiggdXhTYXZlZFN0YXR1c1JlZ2lzdGVyICkNCiANCi0gICAgI2lmbmRlZiBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04NCi0gICAgICAgICNkZWZpbmUgY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OICAgIDENCi0gICAgI2VuZGlmDQorI2lmbmRlZiBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04NCisJI2RlZmluZSBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gMQ0KKyNlbmRpZg0KIA0KLSAgICAjaWYgY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OID09IDENCisjaWYgY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OID09IDENCiANCi0vKiBDaGVjayB0aGUgY29uZmlndXJhdGlvbi4gKi8NCi0gICAgICAgICNpZiAoIGNvbmZpZ01BWF9QUklPUklUSUVTID4gMzIgKQ0KLSAgICAgICAgICAgICNlcnJvciBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gY2FuIG9ubHkgYmUgc2V0IHRvIDEgd2hlbiBjb25maWdNQVhfUFJJT1JJVElFUyBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMzIuICBJdCBpcyB2ZXJ5IHJhcmUgdGhhdCBhIHN5c3RlbSByZXF1aXJlcyBtb3JlIHRoYW4gMTAgdG8gMTUgZGlmZmVyZW5jZSBwcmlvcml0aWVzIGFzIHRhc2tzIHRoYXQgc2hhcmUgYSBwcmlvcml0eSB3aWxsIHRpbWUgc2xpY2UuDQotICAgICAgICAjZW5kaWYNCisJLyogQ2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24uICovDQorCSNpZiggY29uZmlnTUFYX1BSSU9SSVRJRVMgPiAzMiApDQorCQkjZXJyb3IgY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OIGNhbiBvbmx5IGJlIHNldCB0byAxIHdoZW4gY29uZmlnTUFYX1BSSU9SSVRJRVMgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDMyLiAgSXQgaXMgdmVyeSByYXJlIHRoYXQgYSBzeXN0ZW0gcmVxdWlyZXMgbW9yZSB0aGFuIDEwIHRvIDE1IGRpZmZlcmVuY2UgcHJpb3JpdGllcyBhcyB0YXNrcyB0aGF0IHNoYXJlIGEgcHJpb3JpdHkgd2lsbCB0aW1lIHNsaWNlLg0KKwkjZW5kaWYNCiANCi0vKiBTdG9yZS9jbGVhciB0aGUgcmVhZHkgcHJpb3JpdGllcyBpbiBhIGJpdCBtYXAuICovDQotICAgICAgICAjZGVmaW5lIHBvcnRSRUNPUkRfUkVBRFlfUFJJT1JJVFkoIHV4UHJpb3JpdHksIHV4UmVhZHlQcmlvcml0aWVzICkgICAgKCB1eFJlYWR5UHJpb3JpdGllcyApIHw9ICggMVVMIDw8ICggdXhQcmlvcml0eSApICkNCi0gICAgICAgICNkZWZpbmUgcG9ydFJFU0VUX1JFQURZX1BSSU9SSVRZKCB1eFByaW9yaXR5LCB1eFJlYWR5UHJpb3JpdGllcyApICAgICAoIHV4UmVhZHlQcmlvcml0aWVzICkgJj0gfiggMVVMIDw8ICggdXhQcmlvcml0eSApICkNCisJLyogU3RvcmUvY2xlYXIgdGhlIHJlYWR5IHByaW9yaXRpZXMgaW4gYSBiaXQgbWFwLiAqLw0KKwkjZGVmaW5lIHBvcnRSRUNPUkRfUkVBRFlfUFJJT1JJVFkoIHV4UHJpb3JpdHksIHV4UmVhZHlQcmlvcml0aWVzICkgKCB1eFJlYWR5UHJpb3JpdGllcyApIHw9ICggMVVMIDw8ICggdXhQcmlvcml0eSApICkNCisJI2RlZmluZSBwb3J0UkVTRVRfUkVBRFlfUFJJT1JJVFkoIHV4UHJpb3JpdHksIHV4UmVhZHlQcmlvcml0aWVzICkgKCB1eFJlYWR5UHJpb3JpdGllcyApICY9IH4oIDFVTCA8PCAoIHV4UHJpb3JpdHkgKSApDQogDQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KLSAgICAgICAgI2RlZmluZSBwb3J0R0VUX0hJR0hFU1RfUFJJT1JJVFkoIHV4VG9wUHJpb3JpdHksIHV4UmVhZHlQcmlvcml0aWVzICkgICAgdXhUb3BQcmlvcml0eSA9ICggMzEgLSBfY2x6KCAoIHV4UmVhZHlQcmlvcml0aWVzICkgKSApDQorCSNkZWZpbmUgcG9ydEdFVF9ISUdIRVNUX1BSSU9SSVRZKCB1eFRvcFByaW9yaXR5LCB1eFJlYWR5UHJpb3JpdGllcyApIHV4VG9wUHJpb3JpdHkgPSAoIDMxIC0gX2NseiggKCB1eFJlYWR5UHJpb3JpdGllcyApICkgKQ0KIA0KLSAgICAjZW5kaWYgLyogdGFza1JFQ09SRF9SRUFEWV9QUklPUklUWSAqLw0KKyNlbmRpZiAvKiB0YXNrUkVDT1JEX1JFQURZX1BSSU9SSVRZICovDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGFzayB1dGlsaXRpZXMuICovDQogDQotICAgICNkZWZpbmUgcG9ydFlJRUxEKCkgICAgICAgICAgICAgICAgICAgXA0KLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHVpbnQzMl90IHVsQ2F1c2U7ICAgICAgICAgICAgICAgICBcDQotICAgICAgICAvKiBUcmlnZ2VyIHNvZnR3YXJlIGludGVycnVwdC4gKi8gXA0KLSAgICAgICAgdWxDYXVzZSA9IHVsUG9ydEdldENQMENhdXNlKCk7ICAgIFwNCi0gICAgICAgIHVsQ2F1c2UgfD0gcG9ydFNXMF9CSVQ7ICAgICAgICAgICBcDQotICAgICAgICB2UG9ydFNldENQMENhdXNlKCB1bENhdXNlICk7ICAgICAgXA0KLSAgICB9DQorI2RlZmluZSBwb3J0WUlFTEQoKSAJCQkJCQlcDQoreyAJCQkJCQkJCQkJCVwNCit1aW50MzJfdCB1bENhdXNlOyAJCQkJCQkJXA0KKwkvKiBUcmlnZ2VyIHNvZnR3YXJlIGludGVycnVwdC4gKi8gCQlcDQorCXVsQ2F1c2UgPSB1bFBvcnRHZXRDUDBDYXVzZSgpOyAJCQlcDQorCXVsQ2F1c2UgfD0gcG9ydFNXMF9CSVQ7IAkJCQlcDQorCXZQb3J0U2V0Q1AwQ2F1c2UoIHVsQ2F1c2UgKTsgCQkJXA0KK30NCiANCi0gICAgZXh0ZXJuIHZvbGF0aWxlIFVCYXNlVHlwZV90IHV4SW50ZXJydXB0TmVzdGluZzsNCi0gICAgI2RlZmluZSBwb3J0QVNTRVJUX0lGX0lOX0lTUigpICAgIGNvbmZpZ0FTU0VSVCggdXhJbnRlcnJ1cHROZXN0aW5nID09IDAgKQ0KK2V4dGVybiB2b2xhdGlsZSBVQmFzZVR5cGVfdCB1eEludGVycnVwdE5lc3Rpbmc7DQorI2RlZmluZSBwb3J0QVNTRVJUX0lGX0lOX0lTUigpIGNvbmZpZ0FTU0VSVCggdXhJbnRlcnJ1cHROZXN0aW5nID09IDAgKQ0KIA0KLSAgICAjZGVmaW5lIHBvcnROT1AoKSAgICAgICAgICAgICAgICAgX19hc20gdm9sYXRpbGUgKCAibm9wIiApDQorI2RlZmluZSBwb3J0Tk9QKCkgX19hc20gdm9sYXRpbGUgKCAibm9wIiApDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQotICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKSBfX2F0dHJpYnV0ZV9fKCAoIG5vcmV0dXJuICkgKQ0KLSAgICAjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgICAgICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKSBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0gICAgI2RlZmluZSBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHhTd2l0Y2hSZXF1aXJlZCApIFwNCi0gICAgaWYoIHhTd2l0Y2hSZXF1aXJlZCApICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHBvcnRZSUVMRCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgfQ0KKyNkZWZpbmUgcG9ydEVORF9TV0lUQ0hJTkdfSVNSKCB4U3dpdGNoUmVxdWlyZWQgKSAJaWYoIHhTd2l0Y2hSZXF1aXJlZCApCVwNCisJCQkJCQkJCQkJCQkJeyAJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQlwb3J0WUlFTEQoKTsJCVwNCisJCQkJCQkJCQkJCQkJfQ0KIA0KIC8qIFJlcXVpcmVkIGJ5IHRoZSBrZXJuZWwgYXdhcmUgZGVidWdnZXIuICovDQotICAgICNpZmRlZiBfX0RFQlVHDQotICAgICAgICAjZGVmaW5lIHBvcnRSRU1PVkVfU1RBVElDX1FVQUxJRklFUg0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19ERUJVRw0KKyAgICAjZGVmaW5lIHBvcnRSRU1PVkVfU1RBVElDX1FVQUxJRklFUg0KKyNlbmRpZg0KIA0KLSAgICAjaWZkZWYgX19jcGx1c3BsdXMNCi0gICAgICAgIH0NCi0gICAgI2VuZGlmDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KIA0KICNlbmRpZiAvKiBQT1JUTUFDUk9fSCAqLw0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL01QTEFCL1BJQzMyTVgvSVNSX1N1cHBvcnQuaCBiL3BvcnRhYmxlL01QTEFCL1BJQzMyTVgvSVNSX1N1cHBvcnQuaAppbmRleCBjODI2ZmFmLi4xZGFiNTEzIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9NUExBQi9QSUMzMk1YL0lTUl9TdXBwb3J0LmgKKysrIGIvcG9ydGFibGUvTVBMQUIvUElDMzJNWC9JU1JfU3VwcG9ydC5oCkBAIC0yNywxNjUgKzI3LDE2NSBAQAogDQogI2luY2x1ZGUgIkZyZWVSVE9TQ29uZmlnLmgiDQogDQotI2RlZmluZSBwb3J0Q09OVEVYVF9TSVpFICAgICAgICAgICAgIDEzMg0KLSNkZWZpbmUgcG9ydEVQQ19TVEFDS19MT0NBVElPTiAgICAgICAxMjQNCi0jZGVmaW5lIHBvcnRTVEFUVVNfU1RBQ0tfTE9DQVRJT04gICAgMTI4DQorI2RlZmluZSBwb3J0Q09OVEVYVF9TSVpFIDEzMg0KKyNkZWZpbmUgcG9ydEVQQ19TVEFDS19MT0NBVElPTgkxMjQNCisjZGVmaW5lIHBvcnRTVEFUVVNfU1RBQ0tfTE9DQVRJT04gMTI4DQogDQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0ubWFjcm8gcG9ydFNBVkVfQ09OVEVYVA0KKy5tYWNybwlwb3J0U0FWRV9DT05URVhUDQogDQotLyogTWFrZSByb29tIGZvciB0aGUgY29udGV4dC4gRmlyc3Qgc2F2ZSB0aGUgY3VycmVudCBzdGF0dXMgc28gaXQgY2FuIGJlDQotICogbWFuaXB1bGF0ZWQsIGFuZCB0aGUgY2F1c2UgYW5kIEVQQyByZWdpc3RlcnMgc28gdGhlaXIgb3JpZ2luYWwgdmFsdWVzIGFyZQ0KLSAqIGNhcHR1cmVkLiAqLw0KLW1mYzAgazAsIF9DUDBfQ0FVU0UNCi1hZGRpdSBzcCwgc3AsIC1wb3J0Q09OVEVYVF9TSVpFDQotbWZjMCBrMSwgX0NQMF9TVEFUVVMNCisJLyogTWFrZSByb29tIGZvciB0aGUgY29udGV4dC4gRmlyc3Qgc2F2ZSB0aGUgY3VycmVudCBzdGF0dXMgc28gaXQgY2FuIGJlDQorCW1hbmlwdWxhdGVkLCBhbmQgdGhlIGNhdXNlIGFuZCBFUEMgcmVnaXN0ZXJzIHNvIHRoZWlyIG9yaWdpbmFsIHZhbHVlcyBhcmUNCisJY2FwdHVyZWQuICovDQorCW1mYzAJCWswLCBfQ1AwX0NBVVNFDQorCWFkZGl1CQlzcCwJc3AsIC1wb3J0Q09OVEVYVF9TSVpFDQorCW1mYzAJCWsxLCBfQ1AwX1NUQVRVUw0KIA0KLS8qIEFsc28gc2F2ZSBzNiBhbmQgczUgc28gdGhleSBjYW4gYmUgdXNlZC4gIEFueSBuZXN0aW5nIGludGVycnVwdHMgc2hvdWxkDQotICogbWFpbnRhaW4gdGhlIHZhbHVlcyBvZiB0aGVzZSByZWdpc3RlcnMgYWNyb3NzIHRoZSBJU1IuICovDQotc3cgczYsIDQ0ICggc3AgKQ0KLXN3IHM1LCA0MCAoIHNwICkNCi1zdyBrMSwgcG9ydFNUQVRVU19TVEFDS19MT0NBVElPTiggc3AgKQ0KKwkvKiBBbHNvIHNhdmUgczYgYW5kIHM1IHNvIHRoZXkgY2FuIGJlIHVzZWQuICBBbnkgbmVzdGluZyBpbnRlcnJ1cHRzIHNob3VsZA0KKwltYWludGFpbiB0aGUgdmFsdWVzIG9mIHRoZXNlIHJlZ2lzdGVycyBhY3Jvc3MgdGhlIElTUi4gKi8NCisJc3cJCQlzNiwgNDQoc3ApDQorCXN3CQkJczUsIDQwKHNwKQ0KKwlzdwkJCWsxLCBwb3J0U1RBVFVTX1NUQUNLX0xPQ0FUSU9OKHNwKQ0KIA0KLS8qIFByZXBhcmUgdG8gZW5hYmxlIGludGVycnVwdHMgYWJvdmUgdGhlIGN1cnJlbnQgcHJpb3JpdHkuICovDQotc3JsIGswLCBrMCwgMHhhDQotaW5zIGsxLCBrMCwgMTAsIDYNCi1pbnMgazEsIHplcm8sIDEsIDQNCisJLyogUHJlcGFyZSB0byBlbmFibGUgaW50ZXJydXB0cyBhYm92ZSB0aGUgY3VycmVudCBwcmlvcml0eS4gKi8NCisJc3JsCQkJazAsIGswLCAweGENCisJaW5zIAkJazEsIGswLCAxMCwgNg0KKwlpbnMJCQlrMSwgemVybywgMSwgNA0KIA0KLS8qIHM1IGlzIHVzZWQgYXMgdGhlIGZyYW1lIHBvaW50ZXIuICovDQotYWRkIHM1LCB6ZXJvLCBzcA0KKwkvKiBzNSBpcyB1c2VkIGFzIHRoZSBmcmFtZSBwb2ludGVyLiAqLw0KKwlhZGQJCQlzNSwgemVybywgc3ANCiANCi0vKiBDaGVjayB0aGUgbmVzdGluZyBjb3VudCB2YWx1ZS4gKi8NCi1sYSBrMCwgdXhJbnRlcnJ1cHROZXN0aW5nDQotbHcgczYsICggazAgKQ0KKwkvKiBDaGVjayB0aGUgbmVzdGluZyBjb3VudCB2YWx1ZS4gKi8NCisJbGEJCQlrMCwgdXhJbnRlcnJ1cHROZXN0aW5nDQorCWx3CQkJczYsIChrMCkNCiANCi0vKiBJZiB0aGUgbmVzdGluZyBjb3VudCBpcyAwIHRoZW4gc3dhcCB0byB0aGUgdGhlIHN5c3RlbSBzdGFjaywgb3RoZXJ3aXNlDQotICogdGhlIHN5c3RlbSBzdGFjayBpcyBhbHJlYWR5IGJlaW5nIHVzZWQuICovDQotYm5lIHM2LCB6ZXJvLCAxZg0KLW5vcA0KKwkvKiBJZiB0aGUgbmVzdGluZyBjb3VudCBpcyAwIHRoZW4gc3dhcCB0byB0aGUgdGhlIHN5c3RlbSBzdGFjaywgb3RoZXJ3aXNlDQorCXRoZSBzeXN0ZW0gc3RhY2sgaXMgYWxyZWFkeSBiZWluZyB1c2VkLiAqLw0KKwlibmUJCQlzNiwgemVybywgMWYNCisJbm9wDQogDQotLyogU3dhcCB0byB0aGUgc3lzdGVtIHN0YWNrLiAqLw0KLWxhIHNwLCB4SVNSU3RhY2tUb3ANCi1sdyBzcCwgKCBzcCApDQorCS8qIFN3YXAgdG8gdGhlIHN5c3RlbSBzdGFjay4gKi8NCisJbGEJCQlzcCwgeElTUlN0YWNrVG9wDQorCWx3CQkJc3AsIChzcCkNCiANCi0vKiBJbmNyZW1lbnQgYW5kIHNhdmUgdGhlIG5lc3RpbmcgY291bnQuICovDQotMSA6ICBhZGRpdSBzNiwgczYsIDENCi1zdyBzNiwgMCAoIGswICkNCisJLyogSW5jcmVtZW50IGFuZCBzYXZlIHRoZSBuZXN0aW5nIGNvdW50LiAqLw0KKzE6CWFkZGl1CQlzNiwgczYsIDENCisJc3cJCQlzNiwgMChrMCkNCiANCi0vKiBzNiBob2xkcyB0aGUgRVBDIHZhbHVlLCB0aGlzIGlzIHNhdmVkIGFmdGVyIGludGVycnVwdHMgYXJlIHJlLWVuYWJsZWQuICovDQotbWZjMCBzNiwgX0NQMF9FUEMNCisJLyogczYgaG9sZHMgdGhlIEVQQyB2YWx1ZSwgdGhpcyBpcyBzYXZlZCBhZnRlciBpbnRlcnJ1cHRzIGFyZSByZS1lbmFibGVkLiAqLw0KKwltZmMwIAkJczYsIF9DUDBfRVBDDQogDQotLyogUmUtZW5hYmxlIGludGVycnVwdHMuICovDQotbXRjMCBrMSwgX0NQMF9TVEFUVVMNCisJLyogUmUtZW5hYmxlIGludGVycnVwdHMuICovDQorCW10YzAJCWsxLCBfQ1AwX1NUQVRVUw0KIA0KLS8qIFNhdmUgdGhlIGNvbnRleHQgaW50byB0aGUgc3BhY2UganVzdCBjcmVhdGVkLiAgczYgaXMgc2F2ZWQgYWdhaW4NCi0gKiBoZXJlIGFzIGl0IG5vdyBjb250YWlucyB0aGUgRVBDIHZhbHVlLiAgTm8gb3RoZXIgcyByZWdpc3RlcnMgbmVlZCBiZQ0KLSAqIHNhdmVkLiAqLw0KLXN3IHJhLCAxMjAgKCBzNSApDQotc3cgczgsIDExNiAoIHM1ICkNCi1zdyB0OSwgMTEyICggczUgKQ0KLXN3IHQ4LCAxMDggKCBzNSApDQotc3cgdDcsIDEwNCAoIHM1ICkNCi1zdyB0NiwgMTAwICggczUgKQ0KLXN3IHQ1LCA5NiAoIHM1ICkNCi1zdyB0NCwgOTIgKCBzNSApDQotc3cgdDMsIDg4ICggczUgKQ0KLXN3IHQyLCA4NCAoIHM1ICkNCi1zdyB0MSwgODAgKCBzNSApDQotc3cgdDAsIDc2ICggczUgKQ0KLXN3IGEzLCA3MiAoIHM1ICkNCi1zdyBhMiwgNjggKCBzNSApDQotc3cgYTEsIDY0ICggczUgKQ0KLXN3IGEwLCA2MCAoIHM1ICkNCi1zdyB2MSwgNTYgKCBzNSApDQotc3cgdjAsIDUyICggczUgKQ0KLXN3IHM2LCBwb3J0RVBDX1NUQUNLX0xPQ0FUSU9OKCBzNSApDQotc3cgJDEsIDE2ICggczUgKQ0KKwkvKiBTYXZlIHRoZSBjb250ZXh0IGludG8gdGhlIHNwYWNlIGp1c3QgY3JlYXRlZC4gIHM2IGlzIHNhdmVkIGFnYWluDQorCWhlcmUgYXMgaXQgbm93IGNvbnRhaW5zIHRoZSBFUEMgdmFsdWUuICBObyBvdGhlciBzIHJlZ2lzdGVycyBuZWVkIGJlDQorCXNhdmVkLiAqLw0KKwlzdwkJCXJhLCAxMjAoczUpDQorCXN3CQkJczgsIDExNihzNSkNCisJc3cJCQl0OSwgMTEyKHM1KQ0KKwlzdwkJCXQ4LCAxMDgoczUpDQorCXN3CQkJdDcsIDEwNChzNSkNCisJc3cJCQl0NiwgMTAwKHM1KQ0KKwlzdwkJCXQ1LCA5NihzNSkNCisJc3cJCQl0NCwgOTIoczUpDQorCXN3CQkJdDMsIDg4KHM1KQ0KKwlzdwkJCXQyLCA4NChzNSkNCisJc3cJCQl0MSwgODAoczUpDQorCXN3CQkJdDAsIDc2KHM1KQ0KKwlzdwkJCWEzLCA3MihzNSkNCisJc3cJCQlhMiwgNjgoczUpDQorCXN3CQkJYTEsIDY0KHM1KQ0KKwlzdwkJCWEwLCA2MChzNSkNCisJc3cJCQl2MSwgNTYoczUpDQorCXN3CQkJdjAsIDUyKHM1KQ0KKwlzdwkJCXM2LCBwb3J0RVBDX1NUQUNLX0xPQ0FUSU9OKHM1KQ0KKwlzdwkJCSQxLCAxNihzNSkNCiANCi0vKiBzNiBpcyB1c2VkIGFzIGEgc2NyYXRjaCByZWdpc3Rlci4gKi8NCi1tZmhpIHM2DQotc3cgczYsIDEyICggczUgKQ0KLW1mbG8gczYNCi1zdyBzNiwgOCAoIHM1ICkNCisJLyogczYgaXMgdXNlZCBhcyBhIHNjcmF0Y2ggcmVnaXN0ZXIuICovDQorCW1maGkJCXM2DQorCXN3CQkJczYsIDEyKHM1KQ0KKwltZmxvCQlzNg0KKwlzdwkJCXM2LCA4KHM1KQ0KIA0KLS8qIFVwZGF0ZSB0aGUgdGFzayBzdGFjayBwb2ludGVyIHZhbHVlIGlmIG5lc3RpbmcgaXMgemVyby4gKi8NCi1sYSBzNiwgdXhJbnRlcnJ1cHROZXN0aW5nDQotbHcgczYsICggczYgKQ0KLWFkZGl1IHM2LCBzNiwgLTENCi1ibmUgczYsIHplcm8sIDFmDQotbm9wDQorCS8qIFVwZGF0ZSB0aGUgdGFzayBzdGFjayBwb2ludGVyIHZhbHVlIGlmIG5lc3RpbmcgaXMgemVyby4gKi8NCisJbGEJCQlzNiwgdXhJbnRlcnJ1cHROZXN0aW5nDQorCWx3CQkJczYsIChzNikNCisJYWRkaXUJCXM2LCBzNiwgLTENCisJYm5lCQkJczYsIHplcm8sIDFmDQorCW5vcA0KIA0KLS8qIFNhdmUgdGhlIHN0YWNrIHBvaW50ZXIuICovDQotbGEgczYsIHV4U2F2ZWRUYXNrU3RhY2tQb2ludGVyDQotc3cgczUsICggczYgKQ0KLTEgOg0KLS5lbmRtDQorCS8qIFNhdmUgdGhlIHN0YWNrIHBvaW50ZXIuICovDQorCWxhCQkJczYsIHV4U2F2ZWRUYXNrU3RhY2tQb2ludGVyDQorCXN3CQkJczUsIChzNikNCisxOg0KKwkuZW5kbQ0KIA0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotICAgLm1hY3JvIHBvcnRSRVNUT1JFX0NPTlRFWFQNCisubWFjcm8JcG9ydFJFU1RPUkVfQ09OVEVYVA0KIA0KLS8qIFJlc3RvcmUgdGhlIHN0YWNrIHBvaW50ZXIgZnJvbSB0aGUgVENCLiAgVGhpcyBpcyBvbmx5IGRvbmUgaWYgdGhlDQotICogbmVzdGluZyBjb3VudCBpcyAxLiAqLw0KLWxhIHM2LCB1eEludGVycnVwdE5lc3RpbmcNCi1sdyBzNiwgKCBzNiApDQotYWRkaXUgczYsIHM2LCAtMQ0KLWJuZSBzNiwgemVybywgMWYNCi1ub3ANCi1sYSBzNiwgdXhTYXZlZFRhc2tTdGFja1BvaW50ZXINCi1sdyBzNSwgKCBzNiApDQorCS8qIFJlc3RvcmUgdGhlIHN0YWNrIHBvaW50ZXIgZnJvbSB0aGUgVENCLiAgVGhpcyBpcyBvbmx5IGRvbmUgaWYgdGhlDQorCW5lc3RpbmcgY291bnQgaXMgMS4gKi8NCisJbGEJCQlzNiwgdXhJbnRlcnJ1cHROZXN0aW5nDQorCWx3CQkJczYsIChzNikNCisJYWRkaXUJCXM2LCBzNiwgLTENCisJYm5lCQkJczYsIHplcm8sIDFmDQorCW5vcA0KKwlsYQkJCXM2LCB1eFNhdmVkVGFza1N0YWNrUG9pbnRlcg0KKwlsdwkJCXM1LCAoczYpDQogDQotLyogUmVzdG9yZSB0aGUgY29udGV4dC4gKi8NCi0xIDogIGx3IHM2LCA4ICggczUgKQ0KLW10bG8gczYNCi1sdyBzNiwgMTIgKCBzNSApDQotbXRoaSBzNg0KLWx3ICQxLCAxNiAoIHM1ICkNCisJLyogUmVzdG9yZSB0aGUgY29udGV4dC4gKi8NCisxOglsdwkJCXM2LCA4KHM1KQ0KKwltdGxvCQlzNg0KKwlsdwkJCXM2LCAxMihzNSkNCisJbXRoaQkJczYNCisJbHcJCQkkMSwgMTYoczUpDQorCS8qIHM2IGlzIGxvYWRlZCBhcyBpdCB3YXMgdXNlZCBhcyBhIHNjcmF0Y2ggcmVnaXN0ZXIgYW5kIHRoZXJlZm9yZSBzYXZlZA0KKwlhcyBwYXJ0IG9mIHRoZSBpbnRlcnJ1cHQgY29udGV4dC4gKi8NCisJbHcJCQlzNiwgNDQoczUpDQorCWx3CQkJdjAsIDUyKHM1KQ0KKwlsdwkJCXYxLCA1NihzNSkNCisJbHcJCQlhMCwgNjAoczUpDQorCWx3CQkJYTEsIDY0KHM1KQ0KKwlsdwkJCWEyLCA2OChzNSkNCisJbHcJCQlhMywgNzIoczUpDQorCWx3CQkJdDAsIDc2KHM1KQ0KKwlsdwkJCXQxLCA4MChzNSkNCisJbHcJCQl0MiwgODQoczUpDQorCWx3CQkJdDMsIDg4KHM1KQ0KKwlsdwkJCXQ0LCA5MihzNSkNCisJbHcJCQl0NSwgOTYoczUpDQorCWx3CQkJdDYsIDEwMChzNSkNCisJbHcJCQl0NywgMTA0KHM1KQ0KKwlsdwkJCXQ4LCAxMDgoczUpDQorCWx3CQkJdDksIDExMihzNSkNCisJbHcJCQlzOCwgMTE2KHM1KQ0KKwlsdwkJCXJhLCAxMjAoczUpDQogDQotLyogczYgaXMgbG9hZGVkIGFzIGl0IHdhcyB1c2VkIGFzIGEgc2NyYXRjaCByZWdpc3RlciBhbmQgdGhlcmVmb3JlIHNhdmVkDQotICogYXMgcGFydCBvZiB0aGUgaW50ZXJydXB0IGNvbnRleHQuICovDQotbHcgczYsIDQ0ICggczUgKQ0KLWx3IHYwLCA1MiAoIHM1ICkNCi1sdyB2MSwgNTYgKCBzNSApDQotbHcgYTAsIDYwICggczUgKQ0KLWx3IGExLCA2NCAoIHM1ICkNCi1sdyBhMiwgNjggKCBzNSApDQotbHcgYTMsIDcyICggczUgKQ0KLWx3IHQwLCA3NiAoIHM1ICkNCi1sdyB0MSwgODAgKCBzNSApDQotbHcgdDIsIDg0ICggczUgKQ0KLWx3IHQzLCA4OCAoIHM1ICkNCi1sdyB0NCwgOTIgKCBzNSApDQotbHcgdDUsIDk2ICggczUgKQ0KLWx3IHQ2LCAxMDAgKCBzNSApDQotbHcgdDcsIDEwNCAoIHM1ICkNCi1sdyB0OCwgMTA4ICggczUgKQ0KLWx3IHQ5LCAxMTIgKCBzNSApDQotbHcgczgsIDExNiAoIHM1ICkNCi1sdyByYSwgMTIwICggczUgKQ0KKwkvKiBQcm90ZWN0IGFjY2VzcyB0byB0aGUgayByZWdpc3RlcnMsIGFuZCBvdGhlcnMuICovDQorCWRpDQorCWVoYg0KIA0KLS8qIFByb3RlY3QgYWNjZXNzIHRvIHRoZSBrIHJlZ2lzdGVycywgYW5kIG90aGVycy4gKi8NCi1kaQ0KLWVoYg0KKwkvKiBEZWNyZW1lbnQgdGhlIG5lc3RpbmcgY291bnQuICovDQorCWxhCQkJazAsIHV4SW50ZXJydXB0TmVzdGluZw0KKwlsdwkJCWsxLCAoazApDQorCWFkZGl1CQlrMSwgazEsIC0xDQorCXN3CQkJazEsIDAoazApDQogDQotLyogRGVjcmVtZW50IHRoZSBuZXN0aW5nIGNvdW50LiAqLw0KLWxhIGswLCB1eEludGVycnVwdE5lc3RpbmcNCi1sdyBrMSwgKCBrMCApDQotYWRkaXUgazEsIGsxLCAtMQ0KLXN3IGsxLCAwICggazAgKQ0KKwlsdwkJCWswLCBwb3J0U1RBVFVTX1NUQUNLX0xPQ0FUSU9OKHM1KQ0KKwlsdwkJCWsxLCBwb3J0RVBDX1NUQUNLX0xPQ0FUSU9OKHM1KQ0KIA0KLWx3IGswLCBwb3J0U1RBVFVTX1NUQUNLX0xPQ0FUSU9OKCBzNSApDQotbHcgazEsIHBvcnRFUENfU1RBQ0tfTE9DQVRJT04oIHM1ICkNCisJLyogTGVhdmUgdGhlIHN0YWNrIGluIGl0cyBvcmlnaW5hbCBzdGF0ZS4gIEZpcnN0IGxvYWQgc3AgZnJvbSBzNSwgdGhlbg0KKwlyZXN0b3JlIHM1IGZyb20gdGhlIHN0YWNrLiAqLw0KKwlhZGQJCQlzcCwgemVybywgczUNCisJbHcJCQlzNSwgNDAoc3ApDQorCWFkZGl1CQlzcCwgc3AsCXBvcnRDT05URVhUX1NJWkUNCiANCi0vKiBMZWF2ZSB0aGUgc3RhY2sgaW4gaXRzIG9yaWdpbmFsIHN0YXRlLiAgRmlyc3QgbG9hZCBzcCBmcm9tIHM1LCB0aGVuDQotICogcmVzdG9yZSBzNSBmcm9tIHRoZSBzdGFjay4gKi8NCi1hZGQgc3AsIHplcm8sIHM1DQotbHcgczUsIDQwICggc3AgKQ0KLWFkZGl1IHNwLCBzcCwgcG9ydENPTlRFWFRfU0laRQ0KKwltdGMwCQlrMCwgX0NQMF9TVEFUVVMNCisJbXRjMCAJCWsxLCBfQ1AwX0VQQw0KKwllaGINCisJZXJldA0KKwlub3ANCiANCi1tdGMwIGswLCBfQ1AwX1NUQVRVUw0KLW10YzAgazEsIF9DUDBfRVBDDQotZWhiDQotZXJldA0KLW5vcA0KKwkuZW5kbQ0KIA0KLSAgIC5lbmRtDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvTVBMQUIvUElDMzJNWC9wb3J0LmMgYi9wb3J0YWJsZS9NUExBQi9QSUMzMk1YL3BvcnQuYwppbmRleCAzOGFjODVhLi44ZWQ4NmViIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9NUExBQi9QSUMzMk1YL3BvcnQuYworKysgYi9wb3J0YWJsZS9NUExBQi9QSUMzMk1YL3BvcnQuYwpAQCAtMjYsOCArMjYsOCBAQAogICovDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLSogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFibGUuaCBmb3IgdGhlIFBJQzMyTVggcG9ydC4NCi0qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorICogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFibGUuaCBmb3IgdGhlIFBJQzMyTVggcG9ydC4NCisgICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAjaWZuZGVmIF9fWEMNCiAgICAgI2Vycm9yIFRoaXMgcG9ydCBpcyBkZXNpZ25lZCB0byB3b3JrIHdpdGggWEMzMi4gIFBsZWFzZSB1cGRhdGUgeW91ciBDIGNvbXBpbGVyIHZlcnNpb24uDQpAQCAtMzgsODAgKzM4LDc4IEBACiAjaW5jbHVkZSAidGFzay5oIg0KIA0KIC8qIEhhcmR3YXJlIHNwZWNpZmljcy4gKi8NCi0jZGVmaW5lIHBvcnRUSU1FUl9QUkVTQ0FMRSAgICA4DQotI2RlZmluZSBwb3J0UFJFU0NBTEVfQklUUyAgICAgMQ0KKyNkZWZpbmUgcG9ydFRJTUVSX1BSRVNDQUxFCTgNCisjZGVmaW5lIHBvcnRQUkVTQ0FMRV9CSVRTCTENCiANCiAvKiBCaXRzIHdpdGhpbiB2YXJpb3VzIHJlZ2lzdGVycy4gKi8NCi0jZGVmaW5lIHBvcnRJRV9CSVQgICAgICAgICAgICAoIDB4MDAwMDAwMDEgKQ0KLSNkZWZpbmUgcG9ydEVYTF9CSVQgICAgICAgICAgICggMHgwMDAwMDAwMiApDQorI2RlZmluZSBwb3J0SUVfQklUCQkJCQkJKCAweDAwMDAwMDAxICkNCisjZGVmaW5lIHBvcnRFWExfQklUCQkJCQkJKCAweDAwMDAwMDAyICkNCiANCiAvKiBCaXRzIHdpdGhpbiB0aGUgQ0FVU0UgcmVnaXN0ZXIuICovDQotI2RlZmluZSBwb3J0Q09SRV9TV18wICAgICAgICAgKCAweDAwMDAwMTAwICkNCi0jZGVmaW5lIHBvcnRDT1JFX1NXXzEgICAgICAgICAoIDB4MDAwMDAyMDAgKQ0KKyNkZWZpbmUgcG9ydENPUkVfU1dfMAkJCQkJKCAweDAwMDAwMTAwICkNCisjZGVmaW5lIHBvcnRDT1JFX1NXXzEJCQkJCSggMHgwMDAwMDIwMCApDQogDQogLyogVGhlIEVYTCBiaXQgaXMgc2V0IHRvIGVuc3VyZSBpbnRlcnJ1cHRzIGRvIG5vdCBvY2N1ciB3aGlsZSB0aGUgY29udGV4dCBvZg0KLSAqIHRoZSBmaXJzdCB0YXNrIGlzIGJlaW5nIHJlc3RvcmVkLiAqLw0KLSNkZWZpbmUgcG9ydElOSVRJQUxfU1IgICAgICAgICggcG9ydElFX0JJVCB8IHBvcnRFWExfQklUICkNCit0aGUgZmlyc3QgdGFzayBpcyBiZWluZyByZXN0b3JlZC4gKi8NCisjZGVmaW5lIHBvcnRJTklUSUFMX1NSCQkJCQkoIHBvcnRJRV9CSVQgfCBwb3J0RVhMX0JJVCApDQogDQogLyoNCi0gKiBCeSBkZWZhdWx0IHBvcnQuYyBnZW5lcmF0ZXMgaXRzIHRpY2sgaW50ZXJydXB0IGZyb20gVElNRVIxLiAgVGhlIHVzZXIgY2FuDQotICogb3ZlcnJpZGUgdGhpcyBiZWhhdmlvdXIgYnk6DQotICogIDE6IFByb3ZpZGluZyB0aGVpciBvd24gaW1wbGVtZW50YXRpb24gb2YgdkFwcGxpY2F0aW9uU2V0dXBUaWNrVGltZXJJbnRlcnJ1cHQoKSwNCi0gKiAgICAgd2hpY2ggaXMgdGhlIGZ1bmN0aW9uIHRoYXQgY29uZmlndXJlcyB0aGUgdGltZXIuICBUaGUgZnVuY3Rpb24gaXMgZGVmaW5lZA0KLSAqICAgICBhcyBhIHdlYWsgc3ltYm9sIGluIHRoaXMgZmlsZSBzbyBpZiB0aGUgc2FtZSBmdW5jdGlvbiBuYW1lIGlzIHVzZWQgaW4gdGhlDQotICogICAgIGFwcGxpY2F0aW9uIGNvZGUgdGhlbiB0aGUgdmVyc2lvbiBpbiB0aGUgYXBwbGljYXRpb24gY29kZSB3aWxsIGJlIGxpbmtlZA0KLSAqICAgICBpbnRvIHRoZSBhcHBsaWNhdGlvbiBpbiBwcmVmZXJlbmNlIHRvIHRoZSB2ZXJzaW9uIGRlZmluZWQgaW4gdGhpcyBmaWxlLg0KLSAqICAyOiBEZWZpbmUgY29uZmlnVElDS19JTlRFUlJVUFRfVkVDVE9SIHRvIHRoZSB2ZWN0b3IgbnVtYmVyIG9mIHRoZSB0aW1lciB1c2VkDQotICogICAgIHRvIGdlbmVyYXRlIHRoZSB0aWNrIGludGVycnVwdC4gIEZvciBleGFtcGxlLCB3aGVuIHRpbWVyIDEgaXMgdXNlZCB0aGVuDQotICogICAgIGNvbmZpZ1RJQ0tfSU5URVJSVVBUX1ZFQ1RPUiBpcyBzZXQgdG8gX1RJTUVSXzFfVkVDVE9SLg0KLSAqICAgICBjb25maWdUSUNLX0lOVEVSUlVQVF9WRUNUT1Igc2hvdWxkIGJlIGRlZmluZWQgaW4gRnJlZVJUT1NDb25maWcuaC4NCi0gKiAgMzogRGVmaW5lIGNvbmZpZ0NMRUFSX1RJQ0tfVElNRVJfSU5URVJSVVBUKCkgdG8gY2xlYXIgdGhlIGludGVycnVwdCBpbiB0aGUNCi0gKiAgICAgdGltZXIgdXNlZCB0byBnZW5lcmF0ZSB0aGUgdGljayBpbnRlcnJ1cHQuICBGb3IgZXhhbXBsZSwgd2hlbiB0aW1lciAxIGlzDQotICogICAgIHVzZWQgY29uZmlnQ0xFQVJfVElDS19USU1FUl9JTlRFUlJVUFQoKSBpcyBkZWZpbmVkIHRvDQotICogICAgIElGUzBDTFIgPSBfSUZTMF9UMUlGX01BU0suDQotICovDQorQnkgZGVmYXVsdCBwb3J0LmMgZ2VuZXJhdGVzIGl0cyB0aWNrIGludGVycnVwdCBmcm9tIFRJTUVSMS4gIFRoZSB1c2VyIGNhbg0KK292ZXJyaWRlIHRoaXMgYmVoYXZpb3VyIGJ5Og0KKwkxOiBQcm92aWRpbmcgdGhlaXIgb3duIGltcGxlbWVudGF0aW9uIG9mIHZBcHBsaWNhdGlvblNldHVwVGlja1RpbWVySW50ZXJydXB0KCksDQorCSAgIHdoaWNoIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGNvbmZpZ3VyZXMgdGhlIHRpbWVyLiAgVGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQNCisJICAgYXMgYSB3ZWFrIHN5bWJvbCBpbiB0aGlzIGZpbGUgc28gaWYgdGhlIHNhbWUgZnVuY3Rpb24gbmFtZSBpcyB1c2VkIGluIHRoZQ0KKwkgICBhcHBsaWNhdGlvbiBjb2RlIHRoZW4gdGhlIHZlcnNpb24gaW4gdGhlIGFwcGxpY2F0aW9uIGNvZGUgd2lsbCBiZSBsaW5rZWQNCisJICAgaW50byB0aGUgYXBwbGljYXRpb24gaW4gcHJlZmVyZW5jZSB0byB0aGUgdmVyc2lvbiBkZWZpbmVkIGluIHRoaXMgZmlsZS4NCisJMjogRGVmaW5lIGNvbmZpZ1RJQ0tfSU5URVJSVVBUX1ZFQ1RPUiB0byB0aGUgdmVjdG9yIG51bWJlciBvZiB0aGUgdGltZXIgdXNlZA0KKwkgICB0byBnZW5lcmF0ZSB0aGUgdGljayBpbnRlcnJ1cHQuICBGb3IgZXhhbXBsZSwgd2hlbiB0aW1lciAxIGlzIHVzZWQgdGhlbg0KKwkgICBjb25maWdUSUNLX0lOVEVSUlVQVF9WRUNUT1IgaXMgc2V0IHRvIF9USU1FUl8xX1ZFQ1RPUi4NCisJICAgY29uZmlnVElDS19JTlRFUlJVUFRfVkVDVE9SIHNob3VsZCBiZSBkZWZpbmVkIGluIEZyZWVSVE9TQ29uZmlnLmguDQorCTM6IERlZmluZSBjb25maWdDTEVBUl9USUNLX1RJTUVSX0lOVEVSUlVQVCgpIHRvIGNsZWFyIHRoZSBpbnRlcnJ1cHQgaW4gdGhlDQorCSAgIHRpbWVyIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRpY2sgaW50ZXJydXB0LiAgRm9yIGV4YW1wbGUsIHdoZW4gdGltZXIgMSBpcw0KKwkgICB1c2VkIGNvbmZpZ0NMRUFSX1RJQ0tfVElNRVJfSU5URVJSVVBUKCkgaXMgZGVmaW5lZCB0bw0KKwkgICBJRlMwQ0xSID0gX0lGUzBfVDFJRl9NQVNLLg0KKyovDQogI2lmbmRlZiBjb25maWdUSUNLX0lOVEVSUlVQVF9WRUNUT1INCi0gICAgI2RlZmluZSBjb25maWdUSUNLX0lOVEVSUlVQVF9WRUNUT1IgICAgX1RJTUVSXzFfVkVDVE9SDQotICAgICNkZWZpbmUgY29uZmlnQ0xFQVJfVElDS19USU1FUl9JTlRFUlJVUFQoKSAgICBJRlMwQ0xSID0gX0lGUzBfVDFJRl9NQVNLDQorCSNkZWZpbmUgY29uZmlnVElDS19JTlRFUlJVUFRfVkVDVE9SIF9USU1FUl8xX1ZFQ1RPUg0KKwkjZGVmaW5lIGNvbmZpZ0NMRUFSX1RJQ0tfVElNRVJfSU5URVJSVVBUKCkgSUZTMENMUiA9IF9JRlMwX1QxSUZfTUFTSw0KICNlbHNlDQotICAgICNpZm5kZWYgY29uZmlnQ0xFQVJfVElDS19USU1FUl9JTlRFUlJVUFQNCi0gICAgICAgICNlcnJvciBJZiBjb25maWdUSUNLX0lOVEVSUlVQVF9WRUNUT1IgaXMgZGVmaW5lZCBpbiBhcHBsaWNhdGlvbiBjb2RlIHRoZW4gY29uZmlnQ0xFQVJfVElDS19USU1FUl9JTlRFUlJVUFQgbXVzdCBhbHNvIGJlIGRlZmluZWQgaW4gYXBwbGljYXRpb24gY29kZS4NCi0gICAgI2VuZGlmDQorCSNpZm5kZWYgY29uZmlnQ0xFQVJfVElDS19USU1FUl9JTlRFUlJVUFQNCisJCSNlcnJvciBJZiBjb25maWdUSUNLX0lOVEVSUlVQVF9WRUNUT1IgaXMgZGVmaW5lZCBpbiBhcHBsaWNhdGlvbiBjb2RlIHRoZW4gY29uZmlnQ0xFQVJfVElDS19USU1FUl9JTlRFUlJVUFQgbXVzdCBhbHNvIGJlIGRlZmluZWQgaW4gYXBwbGljYXRpb24gY29kZS4NCisJI2VuZGlmDQogI2VuZGlmDQogDQogLyogTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSBwcmUtbG9hZGluZyBvZiB0aGUgaW5pdGlhbCBSQSB3aXRoIHRoZSBhZGRyZXNzIG9mDQotICogcHJ2VGFza0V4aXRFcnJvcigpIGluIGNhc2UgaXQgbWVzc2VzIHVwIHVud2luZGluZyBvZiB0aGUgc3RhY2sgaW4gdGhlDQotICogZGVidWdnZXIgLSBpbiB3aGljaCBjYXNlIGNvbmZpZ1RBU0tfUkVUVVJOX0FERFJFU1MgY2FuIGJlIGRlZmluZWQgYXMgMCAoTlVMTCkuICovDQorcHJ2VGFza0V4aXRFcnJvcigpIGluIGNhc2UgaXQgbWVzc2VzIHVwIHVud2luZGluZyBvZiB0aGUgc3RhY2sgaW4gdGhlDQorZGVidWdnZXIgLSBpbiB3aGljaCBjYXNlIGNvbmZpZ1RBU0tfUkVUVVJOX0FERFJFU1MgY2FuIGJlIGRlZmluZWQgYXMgMCAoTlVMTCkuICovDQogI2lmZGVmIGNvbmZpZ1RBU0tfUkVUVVJOX0FERFJFU1MNCi0gICAgI2RlZmluZSBwb3J0VEFTS19SRVRVUk5fQUREUkVTUyAgICBjb25maWdUQVNLX1JFVFVSTl9BRERSRVNTDQorCSNkZWZpbmUgcG9ydFRBU0tfUkVUVVJOX0FERFJFU1MJY29uZmlnVEFTS19SRVRVUk5fQUREUkVTUw0KICNlbHNlDQotICAgICNkZWZpbmUgcG9ydFRBU0tfUkVUVVJOX0FERFJFU1MgICAgcHJ2VGFza0V4aXRFcnJvcg0KKwkjZGVmaW5lIHBvcnRUQVNLX1JFVFVSTl9BRERSRVNTCXBydlRhc2tFeGl0RXJyb3INCiAjZW5kaWYNCiANCiAvKiBTZXQgY29uZmlnQ0hFQ0tfRk9SX1NUQUNLX09WRVJGTE9XIHRvIDMgdG8gYWRkIElTUiBzdGFjayBjaGVja2luZyB0byB0YXNrDQotICogc3RhY2sgY2hlY2tpbmcuICBBIHByb2JsZW0gaW4gdGhlIElTUiBzdGFjayB3aWxsIHRyaWdnZXIgYW4gYXNzZXJ0LCBub3QgY2FsbCB0aGUNCi0gKiBzdGFjayBvdmVyZmxvdyBob29rIGZ1bmN0aW9uIChiZWNhdXNlIHRoZSBzdGFjayBvdmVyZmxvdyBob29rIGlzIHNwZWNpZmljIHRvIGENCi0gKiB0YXNrIHN0YWNrLCBub3QgdGhlIElTUiBzdGFjaykuICovDQotI2lmICggY29uZmlnQ0hFQ0tfRk9SX1NUQUNLX09WRVJGTE9XID4gMiApDQorc3RhY2sgY2hlY2tpbmcuICBBIHByb2JsZW0gaW4gdGhlIElTUiBzdGFjayB3aWxsIHRyaWdnZXIgYW4gYXNzZXJ0LCBub3QgY2FsbCB0aGUNCitzdGFjayBvdmVyZmxvdyBob29rIGZ1bmN0aW9uIChiZWNhdXNlIHRoZSBzdGFjayBvdmVyZmxvdyBob29rIGlzIHNwZWNpZmljIHRvIGENCit0YXNrIHN0YWNrLCBub3QgdGhlIElTUiBzdGFjaykuICovDQorI2lmKCBjb25maWdDSEVDS19GT1JfU1RBQ0tfT1ZFUkZMT1cgPiAyICkNCiANCi0vKiBEb24ndCB1c2UgMHhhNSBhcyB0aGUgc3RhY2sgZmlsbCBieXRlcyBhcyB0aGF0IGlzIHVzZWQgYnkgdGhlIGtlcm5lcmwgZm9yDQotICogdGhlIHRhc2sgc3RhY2tzLCBhbmQgc28gd2lsbCBsZWdpdGltYXRlbHkgYXBwZWFyIGluIG1hbnkgcG9zaXRpb25zIHdpdGhpbg0KLSAqIHRoZSBJU1Igc3RhY2suICovDQotICAgICNkZWZpbmUgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUgICAgMHhlZQ0KKwkvKiBEb24ndCB1c2UgMHhhNSBhcyB0aGUgc3RhY2sgZmlsbCBieXRlcyBhcyB0aGF0IGlzIHVzZWQgYnkgdGhlIGtlcm5lcmwgZm9yDQorCXRoZSB0YXNrIHN0YWNrcywgYW5kIHNvIHdpbGwgbGVnaXRpbWF0ZWx5IGFwcGVhciBpbiBtYW55IHBvc2l0aW9ucyB3aXRoaW4NCisJdGhlIElTUiBzdGFjay4gKi8NCisJI2RlZmluZSBwb3J0SVNSX1NUQUNLX0ZJTExfQllURQkweGVlDQogDQotICAgIHN0YXRpYyBjb25zdCB1aW50OF90IHVjRXhwZWN0ZWRTdGFja0J5dGVzW10gPQ0KLSAgICB7DQotICAgICAgICBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgXA0KLSAgICAgICAgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIFwNCi0gICAgICAgIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBcDQotICAgICAgICBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgXA0KLSAgICAgICAgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUNCi0gICAgfTsgXA0KKwlzdGF0aWMgY29uc3QgdWludDhfdCB1Y0V4cGVjdGVkU3RhY2tCeXRlc1tdID0gew0KKwkJCQkJCQkJCXBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLAkJXA0KKwkJCQkJCQkJCXBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLAkJXA0KKwkJCQkJCQkJCXBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLAkJXA0KKwkJCQkJCQkJCXBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLAkJXA0KKwkJCQkJCQkJCXBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFIH07CVwNCiANCi0gICAgI2RlZmluZSBwb3J0Q0hFQ0tfSVNSX1NUQUNLKCkgICAgY29uZmlnQVNTRVJUKCAoIG1lbWNtcCggKCB2b2lkICogKSB4SVNSU3RhY2ssICggdm9pZCAqICkgdWNFeHBlY3RlZFN0YWNrQnl0ZXMsIHNpemVvZiggdWNFeHBlY3RlZFN0YWNrQnl0ZXMgKSApID09IDAgKSApDQotI2Vsc2UgLyogaWYgKCBjb25maWdDSEVDS19GT1JfU1RBQ0tfT1ZFUkZMT1cgPiAyICkgKi8NCi0gICAgLyogRGVmaW5lIHRoZSBmdW5jdGlvbiBhd2F5LiAqLw0KLSAgICAjZGVmaW5lIHBvcnRDSEVDS19JU1JfU1RBQ0soKQ0KKwkjZGVmaW5lIHBvcnRDSEVDS19JU1JfU1RBQ0soKSBjb25maWdBU1NFUlQoICggbWVtY21wKCAoIHZvaWQgKiApIHhJU1JTdGFjaywgKCB2b2lkICogKSB1Y0V4cGVjdGVkU3RhY2tCeXRlcywgc2l6ZW9mKCB1Y0V4cGVjdGVkU3RhY2tCeXRlcyApICkgPT0gMCApICkNCisjZWxzZQ0KKwkvKiBEZWZpbmUgdGhlIGZ1bmN0aW9uIGF3YXkuICovDQorCSNkZWZpbmUgcG9ydENIRUNLX0lTUl9TVEFDSygpDQogI2VuZGlmIC8qIGNvbmZpZ0NIRUNLX0ZPUl9TVEFDS19PVkVSRkxPVyA+IDIgKi8NCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCkBAIC0xMjMsNyArMTIxLDcgQEAKICAqIGZvbGxvd2luZyBsaW5lIG9mIGNvZGUgaGFzIG5vIGVmZmVjdC4gIFRoZSBpbnRlcnJ1cHQgcHJpb3JpdHkgaXMgc2V0IGJ5IHRoZQ0KICAqIGNhbGwgdG8gQ29uZmlnSW50VGltZXIxKCkgaW4gdkFwcGxpY2F0aW9uU2V0dXBUaWNrVGltZXJJbnRlcnJ1cHQoKS4NCiAgKi8NCi1leHRlcm4gdm9pZCBfX2F0dHJpYnV0ZV9fKCAoIGludGVycnVwdCggSVBMMUFVVE8gKSwgdmVjdG9yKCBjb25maWdUSUNLX0lOVEVSUlVQVF9WRUNUT1IgKSApICkgdlBvcnRUaWNrSW50ZXJydXB0SGFuZGxlciggdm9pZCApOw0KK2V4dGVybiB2b2lkIF9fYXR0cmlidXRlX18oIChpbnRlcnJ1cHQoSVBMMUFVVE8pLCB2ZWN0b3IoIGNvbmZpZ1RJQ0tfSU5URVJSVVBUX1ZFQ1RPUiApKSkgdlBvcnRUaWNrSW50ZXJydXB0SGFuZGxlciggdm9pZCApOw0KIA0KIC8qDQogICogVGhlIHNvZnR3YXJlIGludGVycnVwdCBoYW5kbGVyIHRoYXQgcGVyZm9ybXMgdGhlIHlpZWxkLiAgTm90ZSB0aGF0LCBiZWNhdXNlDQpAQCAtMTMxLDcgKzEyOSw3IEBACiAgKiBjb2RlIGhhcyBubyBlZmZlY3QuICBUaGUgaW50ZXJydXB0IHByaW9yaXR5IGlzIHNldCBieSB0aGUgY2FsbCB0bw0KICAqIG1Db25maWdJbnRDb3JlU1cwKCkgaW4geFBvcnRTdGFydFNjaGVkdWxlcigpLg0KICAqLw0KLXZvaWQgX19hdHRyaWJ1dGVfXyggKCBpbnRlcnJ1cHQoIElQTDFBVVRPICksIHZlY3RvciggX0NPUkVfU09GVFdBUkVfMF9WRUNUT1IgKSApICkgdlBvcnRZaWVsZElTUiggdm9pZCApOw0KK3ZvaWQgX19hdHRyaWJ1dGVfXyggKGludGVycnVwdChJUEwxQVVUTyksIHZlY3RvcihfQ09SRV9TT0ZUV0FSRV8wX1ZFQ1RPUikpKSB2UG9ydFlpZWxkSVNSKCB2b2lkICk7DQogDQogLyoNCiAgKiBVc2VkIHRvIGNhdGNoIHRhc2tzIHRoYXQgYXR0ZW1wdCB0byByZXR1cm4gZnJvbSB0aGVpciBpbXBsZW1lbnRpbmcgZnVuY3Rpb24uDQpAQCAtMTQxLDE3ICsxMzksMTcgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFJlY29yZHMgdGhlIGludGVycnVwdCBuZXN0aW5nIGRlcHRoLiAgVGhpcyBpcyBpbml0aWFsaXNlZCB0byBvbmUgYXMgaXQgaXMNCi0gKiBkZWNyZW1lbnRlZCB0byAwIHdoZW4gdGhlIGZpcnN0IHRhc2sgc3RhcnRzLiAqLw0KK2RlY3JlbWVudGVkIHRvIDAgd2hlbiB0aGUgZmlyc3QgdGFzayBzdGFydHMuICovDQogdm9sYXRpbGUgVUJhc2VUeXBlX3QgdXhJbnRlcnJ1cHROZXN0aW5nID0gMHgwMTsNCiANCiAvKiBTdG9yZXMgdGhlIHRhc2sgc3RhY2sgcG9pbnRlciB3aGVuIGEgc3dpdGNoIGlzIG1hZGUgdG8gdXNlIHRoZSBzeXN0ZW0gc3RhY2suICovDQogVUJhc2VUeXBlX3QgdXhTYXZlZFRhc2tTdGFja1BvaW50ZXIgPSAwOw0KIA0KIC8qIFRoZSBzdGFjayB1c2VkIGJ5IGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmVzIHRoYXQgY2F1c2UgYSBjb250ZXh0IHN3aXRjaC4gKi8NCi1fX2F0dHJpYnV0ZV9fKCAoIGFsaWduZWQoIDggKSApICkgU3RhY2tUeXBlX3QgeElTUlN0YWNrWyBjb25maWdJU1JfU1RBQ0tfU0laRSBdID0geyAwIH07DQorX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoOCkpKSBTdGFja1R5cGVfdCB4SVNSU3RhY2tbIGNvbmZpZ0lTUl9TVEFDS19TSVpFIF0gPSB7IDAgfTsNCiANCiAvKiBUaGUgdG9wIG9mIHN0YWNrIHZhbHVlIGVuc3VyZXMgdGhlcmUgaXMgZW5vdWdoIHNwYWNlIHRvIHN0b3JlIDYgcmVnaXN0ZXJzIG9uDQotICogdGhlIGNhbGxlcnMgc3RhY2ssIGFzIHNvbWUgZnVuY3Rpb25zIHNlZW0gdG8gd2FudCB0byBkbyB0aGlzLiAqLw0KK3RoZSBjYWxsZXJzIHN0YWNrLCBhcyBzb21lIGZ1bmN0aW9ucyBzZWVtIHRvIHdhbnQgdG8gZG8gdGhpcy4gKi8NCiBjb25zdCBTdGFja1R5cGVfdCAqIGNvbnN0IHhJU1JTdGFja1RvcCA9ICYoIHhJU1JTdGFja1sgKCBjb25maWdJU1JfU1RBQ0tfU0laRSAmIH5wb3J0QllURV9BTElHTk1FTlRfTUFTSyApIC0gOCBdICk7DQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQpAQCAtMTU5LDUyICsxNTcsNDcgQEAKIC8qDQogICogU2VlIGhlYWRlciBmaWxlIGZvciBkZXNjcmlwdGlvbi4NCiAgKi8NCi1TdGFja1R5cGVfdCAqIHB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKiBweFRvcE9mU3RhY2ssDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqIHB2UGFyYW1ldGVycyApDQorU3RhY2tUeXBlX3QgKnB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKnB4VG9wT2ZTdGFjaywgVGFza0Z1bmN0aW9uX3QgcHhDb2RlLCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KIHsNCi0gICAgLyogRW5zdXJlIGJ5dGUgYWxpZ25tZW50IGlzIG1haW50YWluZWQgd2hlbiBsZWF2aW5nIHRoaXMgZnVuY3Rpb24uICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkvKiBFbnN1cmUgYnl0ZSBhbGlnbm1lbnQgaXMgbWFpbnRhaW5lZCB3aGVuIGxlYXZpbmcgdGhpcyBmdW5jdGlvbi4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhERUFEQkVFRjsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoU3RhY2tUeXBlX3QpIDB4REVBREJFRUY7DQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTIzNDU2Nzg7IC8qIFdvcmQgdG8gd2hpY2ggdGhlIHN0YWNrIHBvaW50ZXIgd2lsbCBiZSBsZWZ0IHBvaW50aW5nIGFmdGVyIGNvbnRleHQgcmVzdG9yZS4gKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoU3RhY2tUeXBlX3QpIDB4MTIzNDU2Nzg7CS8qIFdvcmQgdG8gd2hpY2ggdGhlIHN0YWNrIHBvaW50ZXIgd2lsbCBiZSBsZWZ0IHBvaW50aW5nIGFmdGVyIGNvbnRleHQgcmVzdG9yZS4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgX0NQMF9HRVRfQ0FVU0UoKTsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoU3RhY2tUeXBlX3QpIF9DUDBfR0VUX0NBVVNFKCk7DQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHBvcnRJTklUSUFMX1NSOyAvKiBDUDBfU1RBVFVTICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKFN0YWNrVHlwZV90KSBwb3J0SU5JVElBTF9TUjsvKiBDUDBfU1RBVFVTICovDQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB4Q29kZTsgLyogQ1AwX0VQQyAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IChTdGFja1R5cGVfdCkgcHhDb2RlOyAJCS8qIENQMF9FUEMgKi8NCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcG9ydFRBU0tfUkVUVVJOX0FERFJFU1M7IC8qIHJhICovDQotICAgIHB4VG9wT2ZTdGFjayAtPSAxNTsNCisJKnB4VG9wT2ZTdGFjayA9IChTdGFja1R5cGVfdCkgcG9ydFRBU0tfUkVUVVJOX0FERFJFU1M7CS8qIHJhICovDQorCXB4VG9wT2ZTdGFjayAtPSAxNTsNCiANCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwdlBhcmFtZXRlcnM7IC8qIFBhcmFtZXRlcnMgdG8gcGFzcyBpbi4gKi8NCi0gICAgcHhUb3BPZlN0YWNrIC09IDE1Ow0KKwkqcHhUb3BPZlN0YWNrID0gKFN0YWNrVHlwZV90KSBwdlBhcmFtZXRlcnM7IC8qIFBhcmFtZXRlcnMgdG8gcGFzcyBpbi4gKi8NCisJcHhUb3BPZlN0YWNrIC09IDE1Ow0KIA0KLSAgICByZXR1cm4gcHhUb3BPZlN0YWNrOw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBzdGF0aWMgdm9pZCBwcnZUYXNrRXhpdEVycm9yKCB2b2lkICkNCiB7DQotICAgIC8qIEEgZnVuY3Rpb24gdGhhdCBpbXBsZW1lbnRzIGEgdGFzayBtdXN0IG5vdCBleGl0IG9yIGF0dGVtcHQgdG8gcmV0dXJuIHRvDQotICAgICAqIGl0cyBjYWxsZXIgYXMgdGhlcmUgaXMgbm90aGluZyB0byByZXR1cm4gdG8uICBJZiBhIHRhc2sgd2FudHMgdG8gZXhpdCBpdA0KLSAgICAgKiBzaG91bGQgaW5zdGVhZCBjYWxsIHZUYXNrRGVsZXRlKCBOVUxMICkuDQotICAgICAqDQotICAgICAqIEFydGlmaWNpYWxseSBmb3JjZSBhbiBhc3NlcnQoKSB0byBiZSB0cmlnZ2VyZWQgaWYgY29uZmlnQVNTRVJUKCkgaXMNCi0gICAgICogZGVmaW5lZCwgdGhlbiBzdG9wIGhlcmUgc28gYXBwbGljYXRpb24gd3JpdGVycyBjYW4gY2F0Y2ggdGhlIGVycm9yLiAqLw0KLSAgICBjb25maWdBU1NFUlQoIHV4U2F2ZWRUYXNrU3RhY2tQb2ludGVyID09IDBVTCApOw0KLSAgICBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7DQorCS8qIEEgZnVuY3Rpb24gdGhhdCBpbXBsZW1lbnRzIGEgdGFzayBtdXN0IG5vdCBleGl0IG9yIGF0dGVtcHQgdG8gcmV0dXJuIHRvDQorCWl0cyBjYWxsZXIgYXMgdGhlcmUgaXMgbm90aGluZyB0byByZXR1cm4gdG8uICBJZiBhIHRhc2sgd2FudHMgdG8gZXhpdCBpdA0KKwlzaG91bGQgaW5zdGVhZCBjYWxsIHZUYXNrRGVsZXRlKCBOVUxMICkuDQogDQotICAgIGZvciggOyA7ICkNCi0gICAgew0KLSAgICB9DQorCUFydGlmaWNpYWxseSBmb3JjZSBhbiBhc3NlcnQoKSB0byBiZSB0cmlnZ2VyZWQgaWYgY29uZmlnQVNTRVJUKCkgaXMNCisJZGVmaW5lZCwgdGhlbiBzdG9wIGhlcmUgc28gYXBwbGljYXRpb24gd3JpdGVycyBjYW4gY2F0Y2ggdGhlIGVycm9yLiAqLw0KKwljb25maWdBU1NFUlQoIHV4U2F2ZWRUYXNrU3RhY2tQb2ludGVyID09IDBVTCApOw0KKwlwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7DQorCWZvciggOzsgKTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQpAQCAtMjE3LDExOSArMjEwLDEyMyBAQAogICogdmVjdG9yIG51bWJlci4gIFdoZW4gVGltZXIgMSBpcyB1c2VkIHRoZSB2ZWN0b3IgbnVtYmVyIGlzIGRlZmluZWQgYXMNCiAgKiBfVElNRVJfMV9WRUNUT1IuDQogICovDQotX19hdHRyaWJ1dGVfXyggKCB3ZWFrICkgKSB2b2lkIHZBcHBsaWNhdGlvblNldHVwVGlja1RpbWVySW50ZXJydXB0KCB2b2lkICkNCitfX2F0dHJpYnV0ZV9fKCggd2VhayApKSB2b2lkIHZBcHBsaWNhdGlvblNldHVwVGlja1RpbWVySW50ZXJydXB0KCB2b2lkICkNCiB7DQotICAgIGNvbnN0IHVpbnQzMl90IHVsQ29tcGFyZU1hdGNoID0gKCAoIGNvbmZpZ1BFUklQSEVSQUxfQ0xPQ0tfSFogLyBwb3J0VElNRVJfUFJFU0NBTEUgKSAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApIC0gMTsNCitjb25zdCB1aW50MzJfdCB1bENvbXBhcmVNYXRjaCA9ICggKGNvbmZpZ1BFUklQSEVSQUxfQ0xPQ0tfSFogLyBwb3J0VElNRVJfUFJFU0NBTEUpIC8gY29uZmlnVElDS19SQVRFX0haICkgLSAxOw0KIA0KLSAgICBUMUNPTiA9IDB4MDAwMDsNCi0gICAgVDFDT05iaXRzLlRDS1BTID0gcG9ydFBSRVNDQUxFX0JJVFM7DQotICAgIFBSMSA9IHVsQ29tcGFyZU1hdGNoOw0KLSAgICBJUEMxYml0cy5UMUlQID0gY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWTsNCisJVDFDT04gPSAweDAwMDA7DQorCVQxQ09OYml0cy5UQ0tQUyA9IHBvcnRQUkVTQ0FMRV9CSVRTOw0KKwlQUjEgPSB1bENvbXBhcmVNYXRjaDsNCisJSVBDMWJpdHMuVDFJUCA9IGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFk7DQogDQotICAgIC8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgYXMgYSBzdGFydGluZyBjb25kaXRpb24uICovDQotICAgIElGUzBiaXRzLlQxSUYgPSAwOw0KKwkvKiBDbGVhciB0aGUgaW50ZXJydXB0IGFzIGEgc3RhcnRpbmcgY29uZGl0aW9uLiAqLw0KKwlJRlMwYml0cy5UMUlGID0gMDsNCiANCi0gICAgLyogRW5hYmxlIHRoZSBpbnRlcnJ1cHQuICovDQotICAgIElFQzBiaXRzLlQxSUUgPSAxOw0KKwkvKiBFbmFibGUgdGhlIGludGVycnVwdC4gKi8NCisJSUVDMGJpdHMuVDFJRSA9IDE7DQogDQotICAgIC8qIFN0YXJ0IHRoZSB0aW1lci4gKi8NCi0gICAgVDFDT05iaXRzLlRPTiA9IDE7DQorCS8qIFN0YXJ0IHRoZSB0aW1lci4gKi8NCisJVDFDT05iaXRzLlRPTiA9IDE7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KLXZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQ0KK3ZvaWQgdlBvcnRFbmRTY2hlZHVsZXIodm9pZCkNCiB7DQotICAgIC8qIE5vdCBpbXBsZW1lbnRlZCBpbiBwb3J0cyB3aGVyZSB0aGVyZSBpcyBub3RoaW5nIHRvIHJldHVybiB0by4NCi0gICAgICogQXJ0aWZpY2lhbGx5IGZvcmNlIGFuIGFzc2VydC4gKi8NCi0gICAgY29uZmlnQVNTRVJUKCB1eEludGVycnVwdE5lc3RpbmcgPT0gMTAwMFVMICk7DQorCS8qIE5vdCBpbXBsZW1lbnRlZCBpbiBwb3J0cyB3aGVyZSB0aGVyZSBpcyBub3RoaW5nIHRvIHJldHVybiB0by4NCisJQXJ0aWZpY2lhbGx5IGZvcmNlIGFuIGFzc2VydC4gKi8NCisJY29uZmlnQVNTRVJUKCB1eEludGVycnVwdE5lc3RpbmcgPT0gMTAwMFVMICk7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIEJhc2VUeXBlX3QgeFBvcnRTdGFydFNjaGVkdWxlciggdm9pZCApDQogew0KLSAgICBleHRlcm4gdm9pZCB2UG9ydFN0YXJ0Rmlyc3RUYXNrKCB2b2lkICk7DQotICAgIGV4dGVybiB2b2lkICogcHhDdXJyZW50VENCOw0KK2V4dGVybiB2b2lkIHZQb3J0U3RhcnRGaXJzdFRhc2soIHZvaWQgKTsNCitleHRlcm4gdm9pZCAqcHhDdXJyZW50VENCOw0KIA0KLSAgICAjaWYgKCBjb25maWdDSEVDS19GT1JfU1RBQ0tfT1ZFUkZMT1cgPiAyICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICAvKiBGaWxsIHRoZSBJU1Igc3RhY2sgdG8gbWFrZSBpdCBlYXN5IHRvIGFzc2VzIGhvdyBtdWNoIGlzIGJlaW5nIHVzZWQuICovDQotICAgICAgICAgICAgbWVtc2V0KCAoIHZvaWQgKiApIHhJU1JTdGFjaywgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHNpemVvZiggeElTUlN0YWNrICkgKTsNCi0gICAgICAgIH0NCi0gICAgI2VuZGlmIC8qIGNvbmZpZ0NIRUNLX0ZPUl9TVEFDS19PVkVSRkxPVyA+IDIgKi8NCisJI2lmICggY29uZmlnQ0hFQ0tfRk9SX1NUQUNLX09WRVJGTE9XID4gMiApDQorCXsNCisJCS8qIEZpbGwgdGhlIElTUiBzdGFjayB0byBtYWtlIGl0IGVhc3kgdG8gYXNzZXMgaG93IG11Y2ggaXMgYmVpbmcgdXNlZC4gKi8NCisJCW1lbXNldCggKCB2b2lkICogKSB4SVNSU3RhY2ssIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBzaXplb2YoIHhJU1JTdGFjayApICk7DQorCX0NCisJI2VuZGlmIC8qIGNvbmZpZ0NIRUNLX0ZPUl9TVEFDS19PVkVSRkxPVyA+IDIgKi8NCiANCi0gICAgLyogQ2xlYXIgdGhlIHNvZnR3YXJlIGludGVycnVwdCBmbGFnLiAqLw0KLSAgICBJRlMwQ0xSID0gX0lGUzBfQ1MwSUZfTUFTSzsNCisJLyogQ2xlYXIgdGhlIHNvZnR3YXJlIGludGVycnVwdCBmbGFnLiAqLw0KKwlJRlMwQ0xSID0gX0lGUzBfQ1MwSUZfTUFTSzsNCiANCi0gICAgLyogU2V0IHNvZnR3YXJlIHRpbWVyIHByaW9yaXR5LiAqLw0KLSAgICBJUEMwQ0xSID0gX0lQQzBfQ1MwSVBfTUFTSzsNCi0gICAgSVBDMFNFVCA9ICggY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWSA8PCBfSVBDMF9DUzBJUF9QT1NJVElPTiApOw0KKwkvKiBTZXQgc29mdHdhcmUgdGltZXIgcHJpb3JpdHkuICovDQorCUlQQzBDTFIgPSBfSVBDMF9DUzBJUF9NQVNLOw0KKwlJUEMwU0VUID0gKCBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZIDw8IF9JUEMwX0NTMElQX1BPU0lUSU9OICk7DQogDQotICAgIC8qIEVuYWJsZSBzb2Z0d2FyZSBpbnRlcnJ1cHQuICovDQotICAgIElFQzBDTFIgPSBfSUVDMF9DUzBJRV9NQVNLOw0KLSAgICBJRUMwU0VUID0gMSA8PCBfSUVDMF9DUzBJRV9QT1NJVElPTjsNCisJLyogRW5hYmxlIHNvZnR3YXJlIGludGVycnVwdC4gKi8NCisJSUVDMENMUiA9IF9JRUMwX0NTMElFX01BU0s7DQorCUlFQzBTRVQgPSAxIDw8IF9JRUMwX0NTMElFX1BPU0lUSU9OOw0KIA0KLSAgICAvKiBTZXR1cCB0aGUgdGltZXIgdG8gZ2VuZXJhdGUgdGhlIHRpY2suICBJbnRlcnJ1cHRzIHdpbGwgaGF2ZSBiZWVuDQotICAgICAqIGRpc2FibGVkIGJ5IHRoZSB0aW1lIHdlIGdldCBoZXJlLiAqLw0KLSAgICB2QXBwbGljYXRpb25TZXR1cFRpY2tUaW1lckludGVycnVwdCgpOw0KKwkvKiBTZXR1cCB0aGUgdGltZXIgdG8gZ2VuZXJhdGUgdGhlIHRpY2suICBJbnRlcnJ1cHRzIHdpbGwgaGF2ZSBiZWVuDQorCWRpc2FibGVkIGJ5IHRoZSB0aW1lIHdlIGdldCBoZXJlLiAqLw0KKwl2QXBwbGljYXRpb25TZXR1cFRpY2tUaW1lckludGVycnVwdCgpOw0KIA0KLSAgICAvKiBLaWNrIG9mZiB0aGUgaGlnaGVzdCBwcmlvcml0eSB0YXNrIHRoYXQgaGFzIGJlZW4gY3JlYXRlZCBzbyBmYXIuDQotICAgICAqIEl0cyBzdGFjayBsb2NhdGlvbiBpcyBsb2FkZWQgaW50byB1eFNhdmVkVGFza1N0YWNrUG9pbnRlci4gKi8NCi0gICAgdXhTYXZlZFRhc2tTdGFja1BvaW50ZXIgPSAqKCBVQmFzZVR5cGVfdCAqICkgcHhDdXJyZW50VENCOw0KLSAgICB2UG9ydFN0YXJ0Rmlyc3RUYXNrKCk7DQorCS8qIEtpY2sgb2ZmIHRoZSBoaWdoZXN0IHByaW9yaXR5IHRhc2sgdGhhdCBoYXMgYmVlbiBjcmVhdGVkIHNvIGZhci4NCisJSXRzIHN0YWNrIGxvY2F0aW9uIGlzIGxvYWRlZCBpbnRvIHV4U2F2ZWRUYXNrU3RhY2tQb2ludGVyLiAqLw0KKwl1eFNhdmVkVGFza1N0YWNrUG9pbnRlciA9ICooIFVCYXNlVHlwZV90ICogKSBweEN1cnJlbnRUQ0I7DQorCXZQb3J0U3RhcnRGaXJzdFRhc2soKTsNCiANCi0gICAgLyogU2hvdWxkIG5ldmVyIGdldCBoZXJlIGFzIHRoZSB0YXNrcyB3aWxsIG5vdyBiZSBleGVjdXRpbmchICBDYWxsIHRoZSB0YXNrDQotICAgICAqIGV4aXQgZXJyb3IgZnVuY3Rpb24gdG8gcHJldmVudCBjb21waWxlciB3YXJuaW5ncyBhYm91dCBhIHN0YXRpYyBmdW5jdGlvbg0KLSAgICAgKiBub3QgYmVpbmcgY2FsbGVkIGluIHRoZSBjYXNlIHRoYXQgdGhlIGFwcGxpY2F0aW9uIHdyaXRlciBvdmVycmlkZXMgdGhpcw0KLSAgICAgKiBmdW5jdGlvbmFsaXR5IGJ5IGRlZmluaW5nIGNvbmZpZ1RBU0tfUkVUVVJOX0FERFJFU1MuICovDQotICAgIHBydlRhc2tFeGl0RXJyb3IoKTsNCisJLyogU2hvdWxkIG5ldmVyIGdldCBoZXJlIGFzIHRoZSB0YXNrcyB3aWxsIG5vdyBiZSBleGVjdXRpbmchICBDYWxsIHRoZSB0YXNrDQorCWV4aXQgZXJyb3IgZnVuY3Rpb24gdG8gcHJldmVudCBjb21waWxlciB3YXJuaW5ncyBhYm91dCBhIHN0YXRpYyBmdW5jdGlvbg0KKwlub3QgYmVpbmcgY2FsbGVkIGluIHRoZSBjYXNlIHRoYXQgdGhlIGFwcGxpY2F0aW9uIHdyaXRlciBvdmVycmlkZXMgdGhpcw0KKwlmdW5jdGlvbmFsaXR5IGJ5IGRlZmluaW5nIGNvbmZpZ1RBU0tfUkVUVVJOX0FERFJFU1MuICovDQorCXBydlRhc2tFeGl0RXJyb3IoKTsNCiANCi0gICAgcmV0dXJuIHBkRkFMU0U7DQorCXJldHVybiBwZEZBTFNFOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0SW5jcmVtZW50VGljayggdm9pZCApDQogew0KLSAgICBVQmFzZVR5cGVfdCB1eFNhdmVkU3RhdHVzOw0KK1VCYXNlVHlwZV90IHV4U2F2ZWRTdGF0dXM7DQogDQotICAgIHV4U2F2ZWRTdGF0dXMgPSB1eFBvcnRTZXRJbnRlcnJ1cHRNYXNrRnJvbUlTUigpOw0KLSAgICB7DQotICAgICAgICBpZiggeFRhc2tJbmNyZW1lbnRUaWNrKCkgIT0gcGRGQUxTRSApDQotICAgICAgICB7DQotICAgICAgICAgICAgLyogUGVuZCBhIGNvbnRleHQgc3dpdGNoLiAqLw0KLSAgICAgICAgICAgIF9DUDBfQklTX0NBVVNFKCBwb3J0Q09SRV9TV18wICk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgdlBvcnRDbGVhckludGVycnVwdE1hc2tGcm9tSVNSKCB1eFNhdmVkU3RhdHVzICk7DQorCXV4U2F2ZWRTdGF0dXMgPSB1eFBvcnRTZXRJbnRlcnJ1cHRNYXNrRnJvbUlTUigpOw0KKwl7DQorCQlpZiggeFRhc2tJbmNyZW1lbnRUaWNrKCkgIT0gcGRGQUxTRSApDQorCQl7DQorCQkJLyogUGVuZCBhIGNvbnRleHQgc3dpdGNoLiAqLw0KKwkJCV9DUDBfQklTX0NBVVNFKCBwb3J0Q09SRV9TV18wICk7DQorCQl9DQorCX0NCisJdlBvcnRDbGVhckludGVycnVwdE1hc2tGcm9tSVNSKCB1eFNhdmVkU3RhdHVzICk7DQogDQotICAgIC8qIExvb2sgZm9yIHRoZSBJU1Igc3RhY2sgZ2V0dGluZyBuZWFyIG9yIHBhc3QgaXRzIGxpbWl0LiAqLw0KLSAgICBwb3J0Q0hFQ0tfSVNSX1NUQUNLKCk7DQorCS8qIExvb2sgZm9yIHRoZSBJU1Igc3RhY2sgZ2V0dGluZyBuZWFyIG9yIHBhc3QgaXRzIGxpbWl0LiAqLw0KKwlwb3J0Q0hFQ0tfSVNSX1NUQUNLKCk7DQogDQotICAgIC8qIENsZWFyIHRpbWVyIGludGVycnVwdC4gKi8NCi0gICAgY29uZmlnQ0xFQVJfVElDS19USU1FUl9JTlRFUlJVUFQoKTsNCisJLyogQ2xlYXIgdGltZXIgaW50ZXJydXB0LiAqLw0KKwljb25maWdDTEVBUl9USUNLX1RJTUVSX0lOVEVSUlVQVCgpOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBVQmFzZVR5cGVfdCB1eFBvcnRTZXRJbnRlcnJ1cHRNYXNrRnJvbUlTUiggdm9pZCApDQogew0KLSAgICBVQmFzZVR5cGVfdCB1eFNhdmVkU3RhdHVzUmVnaXN0ZXI7DQorVUJhc2VUeXBlX3QgdXhTYXZlZFN0YXR1c1JlZ2lzdGVyOw0KIA0KLSAgICBfX2J1aWx0aW5fZGlzYWJsZV9pbnRlcnJ1cHRzKCk7DQotICAgIHV4U2F2ZWRTdGF0dXNSZWdpc3RlciA9IF9DUDBfR0VUX1NUQVRVUygpIHwgMHgwMTsNCisJX19idWlsdGluX2Rpc2FibGVfaW50ZXJydXB0cygpOw0KKwl1eFNhdmVkU3RhdHVzUmVnaXN0ZXIgPSBfQ1AwX0dFVF9TVEFUVVMoKSB8IDB4MDE7DQorCS8qIFRoaXMgY2xlYXJzIHRoZSBJUEwgYml0cywgdGhlbiBzZXRzIHRoZW0gdG8NCisJY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZLiAgVGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIGNhbGxlZA0KKwlmcm9tIGFuIGludGVycnVwdCB0aGF0IGhhcyBhIHByaW9yaXR5IGFib3ZlDQorCWNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSBzbywgd2hlbiB1c2VkIGNvcnJlY3RseSwgdGhlIGFjdGlvbg0KKwljYW4gb25seSByZXN1bHQgaW4gdGhlIElQTCBiZWluZyB1bmNoYW5nZWQgb3IgcmFpc2VkLCBhbmQgdGhlcmVmb3JlIG5ldmVyDQorCWxvd2VyZWQuICovDQorCV9DUDBfU0VUX1NUQVRVUyggKCAoIHV4U2F2ZWRTdGF0dXNSZWdpc3RlciAmICggfnBvcnRBTExfSVBMX0JJVFMgKSApICkgfCAoIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSA8PCBwb3J0SVBMX1NISUZUICkgKTsNCiANCi0gICAgLyogVGhpcyBjbGVhcnMgdGhlIElQTCBiaXRzLCB0aGVuIHNldHMgdGhlbSB0bw0KLSAgICAgKiBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkuICBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgY2FsbGVkDQotICAgICAqIGZyb20gYW4gaW50ZXJydXB0IHRoYXQgaGFzIGEgcHJpb3JpdHkgYWJvdmUNCi0gICAgICogY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIHNvLCB3aGVuIHVzZWQgY29ycmVjdGx5LCB0aGUgYWN0aW9uDQotICAgICAqIGNhbiBvbmx5IHJlc3VsdCBpbiB0aGUgSVBMIGJlaW5nIHVuY2hhbmdlZCBvciByYWlzZWQsIGFuZCB0aGVyZWZvcmUgbmV2ZXINCi0gICAgICogbG93ZXJlZC4gKi8NCi0gICAgX0NQMF9TRVRfU1RBVFVTKCAoICggdXhTYXZlZFN0YXR1c1JlZ2lzdGVyICYgKCB+cG9ydEFMTF9JUExfQklUUyApICkgKSB8ICggY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIDw8IHBvcnRJUExfU0hJRlQgKSApOw0KLQ0KLSAgICByZXR1cm4gdXhTYXZlZFN0YXR1c1JlZ2lzdGVyOw0KKwlyZXR1cm4gdXhTYXZlZFN0YXR1c1JlZ2lzdGVyOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0Q2xlYXJJbnRlcnJ1cHRNYXNrRnJvbUlTUiggVUJhc2VUeXBlX3QgdXhTYXZlZFN0YXR1c1JlZ2lzdGVyICkNCiB7DQotICAgIF9DUDBfU0VUX1NUQVRVUyggdXhTYXZlZFN0YXR1c1JlZ2lzdGVyICk7DQorCV9DUDBfU0VUX1NUQVRVUyggdXhTYXZlZFN0YXR1c1JlZ2lzdGVyICk7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKw0KKw0KKw0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL01QTEFCL1BJQzMyTVgvcG9ydG1hY3JvLmggYi9wb3J0YWJsZS9NUExBQi9QSUMzMk1YL3BvcnRtYWNyby5oCmluZGV4IDhiNjgzZmQuLmE1NzhlNTggMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL01QTEFCL1BJQzMyTVgvcG9ydG1hY3JvLmgKKysrIGIvcG9ydGFibGUvTVBMQUIvUElDMzJNWC9wb3J0bWFjcm8uaApAQCAtMjYsMTQgKzI2LDE0IEBACiAgKi8NCiANCiAjaWZuZGVmIFBPUlRNQUNST19IDQotICAgICNkZWZpbmUgUE9SVE1BQ1JPX0gNCisjZGVmaW5lIFBPUlRNQUNST19IDQogDQogLyogU3lzdGVtIGluY2x1ZGUgZmlsZXMgKi8NCi0gICAgI2luY2x1ZGUgPHhjLmg+DQorI2luY2x1ZGUgPHhjLmg+DQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgZXh0ZXJuICJDIiB7DQotICAgICNlbmRpZg0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgKiBQb3J0IHNwZWNpZmljIGRlZmluaXRpb25zLg0KQEAgLTQ2LDE1OSArNDYsMTU5IEBACiAgKi8NCiANCiAvKiBUeXBlIGRlZmluaXRpb25zLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRDSEFSICAgICAgICAgIGNoYXINCi0gICAgI2RlZmluZSBwb3J0RkxPQVQgICAgICAgICBmbG9hdA0KLSAgICAjZGVmaW5lIHBvcnRET1VCTEUgICAgICAgIGRvdWJsZQ0KLSAgICAjZGVmaW5lIHBvcnRMT05HICAgICAgICAgIGxvbmcNCi0gICAgI2RlZmluZSBwb3J0U0hPUlQgICAgICAgICBzaG9ydA0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19UWVBFICAgIHVpbnQzMl90DQotICAgICNkZWZpbmUgcG9ydEJBU0VfVFlQRSAgICAgbG9uZw0KKyNkZWZpbmUgcG9ydENIQVIJCWNoYXINCisjZGVmaW5lIHBvcnRGTE9BVAkJZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUJCWRvdWJsZQ0KKyNkZWZpbmUgcG9ydExPTkcJCWxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVAkJc2hvcnQNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFCXVpbnQzMl90DQorI2RlZmluZSBwb3J0QkFTRV9UWVBFCWxvbmcNCiANCi0gICAgdHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSAgIFN0YWNrVHlwZV90Ow0KLSAgICB0eXBlZGVmIGxvbmcgICAgICAgICAgICAgQmFzZVR5cGVfdDsNCi0gICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nICAgIFVCYXNlVHlwZV90Ow0KK3R5cGVkZWYgcG9ydFNUQUNLX1RZUEUgU3RhY2tUeXBlX3Q7DQordHlwZWRlZiBsb25nIEJhc2VUeXBlX3Q7DQordHlwZWRlZiB1bnNpZ25lZCBsb25nIFVCYXNlVHlwZV90Ow0KIA0KLSAgICAjaWYgKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KLSAgICAgICAgdHlwZWRlZiB1aW50MTZfdCAgICAgVGlja1R5cGVfdDsNCi0gICAgICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAgICAgICAgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQotICAgICNlbHNlDQotICAgICAgICB0eXBlZGVmIHVpbnQzMl90ICAgICBUaWNrVHlwZV90Ow0KLSAgICAgICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICAgICAgICAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwNCisjaWYoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQorCXR5cGVkZWYgdWludDE2X3QgVGlja1R5cGVfdDsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggVGlja1R5cGVfdCApIDB4ZmZmZg0KKyNlbHNlDQorCXR5cGVkZWYgdWludDMyX3QgVGlja1R5cGVfdDsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTA0KIA0KLS8qIDMyLWJpdCB0aWNrIHR5cGUgb24gYSAzMi1iaXQgYXJjaGl0ZWN0dXJlLCBzbyByZWFkcyBvZiB0aGUgdGljayBjb3VudCBkbw0KLSAqIG5vdCBuZWVkIHRvIGJlIGd1YXJkZWQgd2l0aCBhIGNyaXRpY2FsIHNlY3Rpb24uICovDQotICAgICAgICAjZGVmaW5lIHBvcnRUSUNLX1RZUEVfSVNfQVRPTUlDICAgIDENCi0gICAgI2VuZGlmDQorCS8qIDMyLWJpdCB0aWNrIHR5cGUgb24gYSAzMi1iaXQgYXJjaGl0ZWN0dXJlLCBzbyByZWFkcyBvZiB0aGUgdGljayBjb3VudCBkbw0KKwlub3QgbmVlZCB0byBiZSBndWFyZGVkIHdpdGggYSBjcml0aWNhbCBzZWN0aW9uLiAqLw0KKwkjZGVmaW5lIHBvcnRUSUNLX1RZUEVfSVNfQVRPTUlDIDENCisjZW5kaWYNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBIYXJkd2FyZSBzcGVjaWZpY3MuICovDQotICAgICNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UICAgIDgNCi0gICAgI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RIICAgICAgLTENCi0gICAgI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMgICAgKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCisjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVAkJCTgNCisjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEgJCQktMQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TCQkJKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBDcml0aWNhbCBzZWN0aW9uIG1hbmFnZW1lbnQuICovDQotICAgICNkZWZpbmUgcG9ydElQTF9TSElGVCAgICAgICAoIDEwVUwgKQ0KLSAgICAjZGVmaW5lIHBvcnRBTExfSVBMX0JJVFMgICAgKCAweDNmVUwgPDwgcG9ydElQTF9TSElGVCApDQotICAgICNkZWZpbmUgcG9ydFNXMF9CSVQgICAgICAgICAoIDB4MDEgPDwgOCApDQorI2RlZmluZSBwb3J0SVBMX1NISUZUCQkJCSggMTBVTCApDQorI2RlZmluZSBwb3J0QUxMX0lQTF9CSVRTCQkJKCAweDNmVUwgPDwgcG9ydElQTF9TSElGVCApDQorI2RlZmluZSBwb3J0U1cwX0JJVAkJCQkJKCAweDAxIDw8IDggKQ0KIA0KIC8qIFRoaXMgY2xlYXJzIHRoZSBJUEwgYml0cywgdGhlbiBzZXRzIHRoZW0gdG8NCi0gKiBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkuICBBbiBleHRyYSBjaGVjayBpcyBwZXJmb3JtZWQgaWYNCi0gKiBjb25maWdBU1NFUlQoKSBpcyBkZWZpbmVkIHRvIGVuc3VyZSBhbiBhc3NlcnRpb24gaGFuZGxlciBkb2VzIG5vdCBpbmFkdmVydGVudGx5DQotICogYXR0ZW1wdCB0byBsb3dlciB0aGUgSVBMIHdoZW4gdGhlIGNhbGwgdG8gYXNzZXJ0IHdhcyB0cmlnZ2VyZWQgYmVjYXVzZSB0aGUgSVBMDQotICogdmFsdWUgd2FzIGZvdW5kIHRvIGJlIGFib3ZlIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSB3aGVuIGFuIElTUg0KLSAqIHNhZmUgRnJlZVJUT1MgQVBJIGZ1bmN0aW9uIHdhcyBleGVjdXRlZC4gIElTUiBzYWZlIEZyZWVSVE9TIEFQSSBmdW5jdGlvbnMgYXJlDQotICogdGhvc2UgdGhhdCBlbmQgaW4gRnJvbUlTUi4gIEZyZWVSVE9TIG1haW50YWlucyBhIHNlcGFyYXRlIGludGVycnVwdCBBUEkgdG8NCi0gKiBlbnN1cmUgQVBJIGZ1bmN0aW9uIGFuZCBpbnRlcnJ1cHQgZW50cnkgaXMgYXMgZmFzdCBhbmQgYXMgc2ltcGxlIGFzIHBvc3NpYmxlLiAqLw0KLSAgICAjaWZkZWYgY29uZmlnQVNTRVJUDQotICAgICAgICAjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgdWludDMyX3QgdWxTdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIE1hc2sgaW50ZXJydXB0cyBhdCBhbmQgYmVsb3cgdGhlIGtlcm5lbCBpbnRlcnJ1cHQgcHJpb3JpdHkuICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgdWxTdGF0dXMgPSBfQ1AwX0dFVF9TVEFUVVMoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIElzIHRoZSBjdXJyZW50IElQTCBiZWxvdyBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFk/ICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgaWYoICggKCB1bFN0YXR1cyAmIHBvcnRBTExfSVBMX0JJVFMgKSA+PiBwb3J0SVBMX1NISUZUICkgPCBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgKSBcDQotICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICB1bFN0YXR1cyAmPSB+cG9ydEFMTF9JUExfQklUUzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIF9DUDBfU0VUX1NUQVRVUyggKCB1bFN0YXR1cyB8ICggY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIDw8IHBvcnRJUExfU0hJRlQgKSApICk7ICBcDQotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgfQ0KLSAgICAjZWxzZSAvKiBjb25maWdBU1NFUlQgKi8NCi0gICAgICAgICNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHVpbnQzMl90IHVsU3RhdHVzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIE1hc2sgaW50ZXJydXB0cyBhdCBhbmQgYmVsb3cgdGhlIGtlcm5lbCBpbnRlcnJ1cHQgcHJpb3JpdHkuICovICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHVsU3RhdHVzID0gX0NQMF9HRVRfU1RBVFVTKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHVsU3RhdHVzICY9IH5wb3J0QUxMX0lQTF9CSVRTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIF9DUDBfU0VUX1NUQVRVUyggKCB1bFN0YXR1cyB8ICggY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIDw8IHBvcnRJUExfU0hJRlQgKSApICk7IFwNCi0gICAgfQ0KLSAgICAjZW5kaWYgLyogY29uZmlnQVNTRVJUICovDQorY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZLiAgQW4gZXh0cmEgY2hlY2sgaXMgcGVyZm9ybWVkIGlmDQorY29uZmlnQVNTRVJUKCkgaXMgZGVmaW5lZCB0byBlbnN1cmUgYW4gYXNzZXJ0aW9uIGhhbmRsZXIgZG9lcyBub3QgaW5hZHZlcnRlbnRseQ0KK2F0dGVtcHQgdG8gbG93ZXIgdGhlIElQTCB3aGVuIHRoZSBjYWxsIHRvIGFzc2VydCB3YXMgdHJpZ2dlcmVkIGJlY2F1c2UgdGhlIElQTA0KK3ZhbHVlIHdhcyBmb3VuZCB0byBiZSBhYm92ZSBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgd2hlbiBhbiBJU1INCitzYWZlIEZyZWVSVE9TIEFQSSBmdW5jdGlvbiB3YXMgZXhlY3V0ZWQuICBJU1Igc2FmZSBGcmVlUlRPUyBBUEkgZnVuY3Rpb25zIGFyZQ0KK3Rob3NlIHRoYXQgZW5kIGluIEZyb21JU1IuICBGcmVlUlRPUyBtYWludGFpbnMgYSBzZXBhcmF0ZSBpbnRlcnJ1cHQgQVBJIHRvDQorZW5zdXJlIEFQSSBmdW5jdGlvbiBhbmQgaW50ZXJydXB0IGVudHJ5IGlzIGFzIGZhc3QgYW5kIGFzIHNpbXBsZSBhcyBwb3NzaWJsZS4gKi8NCisjaWZkZWYgY29uZmlnQVNTRVJUDQorCSNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpCQkJCQkJCQkJCQlcDQorCXsJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwl1aW50MzJfdCB1bFN0YXR1czsJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCS8qIE1hc2sgaW50ZXJydXB0cyBhdCBhbmQgYmVsb3cgdGhlIGtlcm5lbCBpbnRlcnJ1cHQgcHJpb3JpdHkuICovCQlcDQorCQl1bFN0YXR1cyA9IF9DUDBfR0VUX1NUQVRVUygpOwkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJLyogSXMgdGhlIGN1cnJlbnQgSVBMIGJlbG93IGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWT8gKi8JXA0KKwkJaWYoICggKCB1bFN0YXR1cyAmIHBvcnRBTExfSVBMX0JJVFMgKSA+PiBwb3J0SVBMX1NISUZUICkgPCBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgKSBcDQorCQl7CQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCXVsU3RhdHVzICY9IH5wb3J0QUxMX0lQTF9CSVRTOwkJCQkJCQkJCQlcDQorCQkJX0NQMF9TRVRfU1RBVFVTKCAoIHVsU3RhdHVzIHwgKCBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgPDwgcG9ydElQTF9TSElGVCApICkgKTsgXA0KKwkJfQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJfQ0KKyNlbHNlIC8qIGNvbmZpZ0FTU0VSVCAqLw0KKwkjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKQkJCQkJCQkJCQlcDQorCXsJCQkJCQkJCQkJCQkJCQkJCQlcDQorCXVpbnQzMl90IHVsU3RhdHVzOwkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCS8qIE1hc2sgaW50ZXJydXB0cyBhdCBhbmQgYmVsb3cgdGhlIGtlcm5lbCBpbnRlcnJ1cHQgcHJpb3JpdHkuICovCVwNCisJCXVsU3RhdHVzID0gX0NQMF9HRVRfU1RBVFVTKCk7CQkJCQkJCQkJCVwNCisJCXVsU3RhdHVzICY9IH5wb3J0QUxMX0lQTF9CSVRTOwkJCQkJCQkJCQlcDQorCQlfQ1AwX1NFVF9TVEFUVVMoICggdWxTdGF0dXMgfCAoIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSA8PCBwb3J0SVBMX1NISUZUICkgKSApOyBcDQorCX0NCisjZW5kaWYgLyogY29uZmlnQVNTRVJUICovDQogDQotICAgICNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkgICAgXA0KLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHVpbnQzMl90IHVsU3RhdHVzOyAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgLyogVW5tYXNrIGFsbCBpbnRlcnJ1cHRzLiAqLyAgIFwNCi0gICAgICAgIHVsU3RhdHVzID0gX0NQMF9HRVRfU1RBVFVTKCk7ICBcDQotICAgICAgICB1bFN0YXR1cyAmPSB+cG9ydEFMTF9JUExfQklUUzsgXA0KLSAgICAgICAgX0NQMF9TRVRfU1RBVFVTKCB1bFN0YXR1cyApOyAgIFwNCi0gICAgfQ0KKyNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkJCQkJCQkJCQkJCVwNCit7CQkJCQkJCQkJCQkJCQkJCQkJXA0KK3VpbnQzMl90IHVsU3RhdHVzOwkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBVbm1hc2sgYWxsIGludGVycnVwdHMuICovCQkJCQkJCQkJCVwNCisJdWxTdGF0dXMgPSBfQ1AwX0dFVF9TVEFUVVMoKTsJCQkJCQkJCQkJXA0KKwl1bFN0YXR1cyAmPSB+cG9ydEFMTF9JUExfQklUUzsJCQkJCQkJCQkJXA0KKwlfQ1AwX1NFVF9TVEFUVVMoIHVsU3RhdHVzICk7CQkJCQkJCQkJCVwNCit9DQogDQogDQotICAgIGV4dGVybiB2b2lkIHZUYXNrRW50ZXJDcml0aWNhbCggdm9pZCApOw0KLSAgICBleHRlcm4gdm9pZCB2VGFza0V4aXRDcml0aWNhbCggdm9pZCApOw0KLSAgICAjZGVmaW5lIHBvcnRDUklUSUNBTF9ORVNUSU5HX0lOX1RDQiAgICAxDQotICAgICNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgICAgdlRhc2tFbnRlckNyaXRpY2FsKCkNCi0gICAgI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpICAgICB2VGFza0V4aXRDcml0aWNhbCgpDQorZXh0ZXJuIHZvaWQgdlRhc2tFbnRlckNyaXRpY2FsKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdlRhc2tFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCisjZGVmaW5lIHBvcnRDUklUSUNBTF9ORVNUSU5HX0lOX1RDQgkxDQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKQkJdlRhc2tFbnRlckNyaXRpY2FsKCkNCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkJCQl2VGFza0V4aXRDcml0aWNhbCgpDQogDQotICAgIGV4dGVybiBVQmFzZVR5cGVfdCB1eFBvcnRTZXRJbnRlcnJ1cHRNYXNrRnJvbUlTUigpOw0KLSAgICBleHRlcm4gdm9pZCB2UG9ydENsZWFySW50ZXJydXB0TWFza0Zyb21JU1IoIFVCYXNlVHlwZV90ICk7DQotICAgICNkZWZpbmUgcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1eFBvcnRTZXRJbnRlcnJ1cHRNYXNrRnJvbUlTUigpDQotICAgICNkZWZpbmUgcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCB1eFNhdmVkU3RhdHVzUmVnaXN0ZXIgKSAgICB2UG9ydENsZWFySW50ZXJydXB0TWFza0Zyb21JU1IoIHV4U2F2ZWRTdGF0dXNSZWdpc3RlciApDQorZXh0ZXJuIFVCYXNlVHlwZV90IHV4UG9ydFNldEludGVycnVwdE1hc2tGcm9tSVNSKCk7DQorZXh0ZXJuIHZvaWQgdlBvcnRDbGVhckludGVycnVwdE1hc2tGcm9tSVNSKCBVQmFzZVR5cGVfdCApOw0KKyNkZWZpbmUgcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpIHV4UG9ydFNldEludGVycnVwdE1hc2tGcm9tSVNSKCkNCisjZGVmaW5lIHBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUiggdXhTYXZlZFN0YXR1c1JlZ2lzdGVyICkgdlBvcnRDbGVhckludGVycnVwdE1hc2tGcm9tSVNSKCB1eFNhdmVkU3RhdHVzUmVnaXN0ZXIgKQ0KIA0KLSAgICAjaWZuZGVmIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTg0KLSAgICAgICAgI2RlZmluZSBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gICAgMQ0KLSAgICAjZW5kaWYNCisjaWZuZGVmIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTg0KKwkjZGVmaW5lIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiAxDQorI2VuZGlmDQogDQotICAgICNpZiBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gPT0gMQ0KKyNpZiBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gPT0gMQ0KIA0KLS8qIENoZWNrIHRoZSBjb25maWd1cmF0aW9uLiAqLw0KLSAgICAgICAgI2lmICggY29uZmlnTUFYX1BSSU9SSVRJRVMgPiAzMiApDQotICAgICAgICAgICAgI2Vycm9yIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiBjYW4gb25seSBiZSBzZXQgdG8gMSB3aGVuIGNvbmZpZ01BWF9QUklPUklUSUVTIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAzMi4gIEl0IGlzIHZlcnkgcmFyZSB0aGF0IGEgc3lzdGVtIHJlcXVpcmVzIG1vcmUgdGhhbiAxMCB0byAxNSBkaWZmZXJlbmNlIHByaW9yaXRpZXMgYXMgdGFza3MgdGhhdCBzaGFyZSBhIHByaW9yaXR5IHdpbGwgdGltZSBzbGljZS4NCi0gICAgICAgICNlbmRpZg0KKwkvKiBDaGVjayB0aGUgY29uZmlndXJhdGlvbi4gKi8NCisJI2lmKCBjb25maWdNQVhfUFJJT1JJVElFUyA+IDMyICkNCisJCSNlcnJvciBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gY2FuIG9ubHkgYmUgc2V0IHRvIDEgd2hlbiBjb25maWdNQVhfUFJJT1JJVElFUyBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMzIuICBJdCBpcyB2ZXJ5IHJhcmUgdGhhdCBhIHN5c3RlbSByZXF1aXJlcyBtb3JlIHRoYW4gMTAgdG8gMTUgZGlmZmVyZW5jZSBwcmlvcml0aWVzIGFzIHRhc2tzIHRoYXQgc2hhcmUgYSBwcmlvcml0eSB3aWxsIHRpbWUgc2xpY2UuDQorCSNlbmRpZg0KIA0KLS8qIFN0b3JlL2NsZWFyIHRoZSByZWFkeSBwcmlvcml0aWVzIGluIGEgYml0IG1hcC4gKi8NCi0gICAgICAgICNkZWZpbmUgcG9ydFJFQ09SRF9SRUFEWV9QUklPUklUWSggdXhQcmlvcml0eSwgdXhSZWFkeVByaW9yaXRpZXMgKSAgICAoIHV4UmVhZHlQcmlvcml0aWVzICkgfD0gKCAxVUwgPDwgKCB1eFByaW9yaXR5ICkgKQ0KLSAgICAgICAgI2RlZmluZSBwb3J0UkVTRVRfUkVBRFlfUFJJT1JJVFkoIHV4UHJpb3JpdHksIHV4UmVhZHlQcmlvcml0aWVzICkgICAgICggdXhSZWFkeVByaW9yaXRpZXMgKSAmPSB+KCAxVUwgPDwgKCB1eFByaW9yaXR5ICkgKQ0KKwkvKiBTdG9yZS9jbGVhciB0aGUgcmVhZHkgcHJpb3JpdGllcyBpbiBhIGJpdCBtYXAuICovDQorCSNkZWZpbmUgcG9ydFJFQ09SRF9SRUFEWV9QUklPUklUWSggdXhQcmlvcml0eSwgdXhSZWFkeVByaW9yaXRpZXMgKSAoIHV4UmVhZHlQcmlvcml0aWVzICkgfD0gKCAxVUwgPDwgKCB1eFByaW9yaXR5ICkgKQ0KKwkjZGVmaW5lIHBvcnRSRVNFVF9SRUFEWV9QUklPUklUWSggdXhQcmlvcml0eSwgdXhSZWFkeVByaW9yaXRpZXMgKSAoIHV4UmVhZHlQcmlvcml0aWVzICkgJj0gfiggMVVMIDw8ICggdXhQcmlvcml0eSApICkNCiANCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQotICAgICAgICAjZGVmaW5lIHBvcnRHRVRfSElHSEVTVF9QUklPUklUWSggdXhUb3BQcmlvcml0eSwgdXhSZWFkeVByaW9yaXRpZXMgKSAgICB1eFRvcFByaW9yaXR5ID0gKCAzMVVMIC0gX2NseiggKCB1eFJlYWR5UHJpb3JpdGllcyApICkgKQ0KKwkjZGVmaW5lIHBvcnRHRVRfSElHSEVTVF9QUklPUklUWSggdXhUb3BQcmlvcml0eSwgdXhSZWFkeVByaW9yaXRpZXMgKSB1eFRvcFByaW9yaXR5ID0gKCAzMVVMIC0gX2NseiggKCB1eFJlYWR5UHJpb3JpdGllcyApICkgKQ0KIA0KLSAgICAjZW5kaWYgLyogdGFza1JFQ09SRF9SRUFEWV9QUklPUklUWSAqLw0KKyNlbmRpZiAvKiB0YXNrUkVDT1JEX1JFQURZX1BSSU9SSVRZICovDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGFzayB1dGlsaXRpZXMuICovDQogDQotICAgICNkZWZpbmUgcG9ydFlJRUxEKCkgICAgICAgICAgICAgICAgICAgXA0KLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHVpbnQzMl90IHVsQ2F1c2U7ICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgLyogVHJpZ2dlciBzb2Z0d2FyZSBpbnRlcnJ1cHQuICovIFwNCi0gICAgICAgIHVsQ2F1c2UgPSBfQ1AwX0dFVF9DQVVTRSgpOyAgICAgICBcDQotICAgICAgICB1bENhdXNlIHw9IHBvcnRTVzBfQklUOyAgICAgICAgICAgXA0KLSAgICAgICAgX0NQMF9TRVRfQ0FVU0UoIHVsQ2F1c2UgKTsgICAgICAgIFwNCi0gICAgfQ0KKyNkZWZpbmUgcG9ydFlJRUxEKCkJCQkJCQkJCVwNCit7CQkJCQkJCQkJCQkJXA0KK3VpbnQzMl90IHVsQ2F1c2U7CQkJCQkJCVwNCisJCQkJCQkJCQkJCQlcDQorCS8qIFRyaWdnZXIgc29mdHdhcmUgaW50ZXJydXB0LiAqLwkJCVwNCisJdWxDYXVzZSA9IF9DUDBfR0VUX0NBVVNFKCk7CQkJCQlcDQorCXVsQ2F1c2UgfD0gcG9ydFNXMF9CSVQ7CQkJCQkJXA0KKwlfQ1AwX1NFVF9DQVVTRSggdWxDYXVzZSApOwkJCQkJXA0KK30NCiANCi0gICAgZXh0ZXJuIHZvbGF0aWxlIFVCYXNlVHlwZV90IHV4SW50ZXJydXB0TmVzdGluZzsNCi0gICAgI2RlZmluZSBwb3J0QVNTRVJUX0lGX0lOX0lTUigpICAgIGNvbmZpZ0FTU0VSVCggdXhJbnRlcnJ1cHROZXN0aW5nID09IDAgKQ0KK2V4dGVybiB2b2xhdGlsZSBVQmFzZVR5cGVfdCB1eEludGVycnVwdE5lc3Rpbmc7DQorI2RlZmluZSBwb3J0QVNTRVJUX0lGX0lOX0lTUigpIGNvbmZpZ0FTU0VSVCggdXhJbnRlcnJ1cHROZXN0aW5nID09IDAgKQ0KIA0KLSAgICAjZGVmaW5lIHBvcnROT1AoKSAgICAgICAgICAgICAgICAgX19hc20gdm9sYXRpbGUgKCAibm9wIiApDQorI2RlZmluZSBwb3J0Tk9QKCkJX19hc20gdm9sYXRpbGUgKCAibm9wIiApDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQotICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKSBfX2F0dHJpYnV0ZV9fKCAoIG5vcmV0dXJuICkgKQ0KLSAgICAjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgICAgICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKSBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0gICAgI2RlZmluZSBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHhTd2l0Y2hSZXF1aXJlZCApIFwNCi0gICAgaWYoIHhTd2l0Y2hSZXF1aXJlZCApICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHBvcnRZSUVMRCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgfQ0KKyNkZWZpbmUgcG9ydEVORF9TV0lUQ0hJTkdfSVNSKCB4U3dpdGNoUmVxdWlyZWQgKQlpZiggeFN3aXRjaFJlcXVpcmVkICkJXA0KKwkJCQkJCQkJCQkJCQl7CQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJcG9ydFlJRUxEKCk7CQlcDQorCQkJCQkJCQkJCQkJCX0NCiANCiAvKiBSZXF1aXJlZCBieSB0aGUga2VybmVsIGF3YXJlIGRlYnVnZ2VyLiAqLw0KLSAgICAjaWZkZWYgX19ERUJVRw0KLSAgICAgICAgI2RlZmluZSBwb3J0UkVNT1ZFX1NUQVRJQ19RVUFMSUZJRVINCi0gICAgI2VuZGlmDQorI2lmZGVmIF9fREVCVUcNCisJI2RlZmluZSBwb3J0UkVNT1ZFX1NUQVRJQ19RVUFMSUZJRVINCisjZW5kaWYNCiANCi0gICAgI2lmZGVmIF9fY3BsdXNwbHVzDQotICAgICAgICB9DQotICAgICNlbmRpZg0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCiANCiAjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8NCisNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9NUExBQi9QSUMzMk1aL0lTUl9TdXBwb3J0LmggYi9wb3J0YWJsZS9NUExBQi9QSUMzMk1aL0lTUl9TdXBwb3J0LmgKaW5kZXggOGNmMDM1ZC4uZjBjMjY4OCAxMDA2NDQKLS0tIGEvcG9ydGFibGUvTVBMQUIvUElDMzJNWi9JU1JfU3VwcG9ydC5oCisrKyBiL3BvcnRhYmxlL01QTEFCL1BJQzMyTVovSVNSX1N1cHBvcnQuaApAQCAtMjcsNDA2ICsyNyw0MDYgQEAKIA0KICNpbmNsdWRlICJGcmVlUlRPU0NvbmZpZy5oIg0KIA0KLSNkZWZpbmUgcG9ydENPTlRFWFRfU0laRSAgICAgICAgICAgICAgICAgICAxNjANCi0jZGVmaW5lIHBvcnRFUENfU1RBQ0tfTE9DQVRJT04gICAgICAgICAgICAgMTUyDQotI2RlZmluZSBwb3J0U1RBVFVTX1NUQUNLX0xPQ0FUSU9OICAgICAgICAgIDE1Ng0KLSNkZWZpbmUgcG9ydEZQQ1NSX1NUQUNLX0xPQ0FUSU9OICAgICAgICAgICAwDQotI2RlZmluZSBwb3J0VEFTS19IQVNfRlBVX1NUQUNLX0xPQ0FUSU9OICAgIDANCi0jZGVmaW5lIHBvcnRGUFVfQ09OVEVYVF9TSVpFICAgICAgICAgICAgICAgMjY0DQorI2RlZmluZSBwb3J0Q09OVEVYVF9TSVpFICAgICAgICAgICAgICAgIDE2MA0KKyNkZWZpbmUgcG9ydEVQQ19TVEFDS19MT0NBVElPTiAgICAgICAgICAxNTINCisjZGVmaW5lIHBvcnRTVEFUVVNfU1RBQ0tfTE9DQVRJT04gICAgICAgMTU2DQorI2RlZmluZSBwb3J0RlBDU1JfU1RBQ0tfTE9DQVRJT04gICAgICAgIDANCisjZGVmaW5lIHBvcnRUQVNLX0hBU19GUFVfU1RBQ0tfTE9DQVRJT04gICAgIDANCisjZGVmaW5lIHBvcnRGUFVfQ09OVEVYVF9TSVpFICAgICAgICAgICAgMjY0DQogDQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0ubWFjcm8gcG9ydFNBVkVfRlBVX1JFR1Mgb2Zmc2V0LCBiYXNlDQorLm1hY3JvICBwb3J0U0FWRV9GUFVfUkVHUyAgICBvZmZzZXQsIGJhc2UNCisgICAgLyogTWFjcm8gdG8gYXNzaXN0IHdpdGggc2F2aW5nIGp1c3QgdGhlIEZQVSByZWdpc3RlcnMgdG8gdGhlDQorICAgICAqIHNwZWNpZmllZCBhZGRyZXNzIGFuZCBiYXNlIG9mZnNldCwNCisgICAgICogb2Zmc2V0IGlzIGEgY29uc3RhbnQsIGJhc2UgaXMgdGhlIGJhc2UgcG9pbnRlciByZWdpc3RlciAgKi8NCiANCi0vKiBNYWNybyB0byBhc3Npc3Qgd2l0aCBzYXZpbmcganVzdCB0aGUgRlBVIHJlZ2lzdGVycyB0byB0aGUNCi0gKiBzcGVjaWZpZWQgYWRkcmVzcyBhbmQgYmFzZSBvZmZzZXQsDQotICogb2Zmc2V0IGlzIGEgY29uc3RhbnQsIGJhc2UgaXMgdGhlIGJhc2UgcG9pbnRlciByZWdpc3RlciAgKi8NCisJc2RjMQkJJGYzMSwgXG9mZnNldCArIDI0OChcYmFzZSkNCisJc2RjMQkJJGYzMCwgXG9mZnNldCArIDI0MChcYmFzZSkNCisJc2RjMQkJJGYyOSwgXG9mZnNldCArIDIzMihcYmFzZSkNCisJc2RjMQkJJGYyOCwgXG9mZnNldCArIDIyNChcYmFzZSkNCisJc2RjMQkJJGYyNywgXG9mZnNldCArIDIxNihcYmFzZSkNCisJc2RjMQkJJGYyNiwgXG9mZnNldCArIDIwOChcYmFzZSkNCisJc2RjMQkJJGYyNSwgXG9mZnNldCArIDIwMChcYmFzZSkNCisJc2RjMQkJJGYyNCwgXG9mZnNldCArIDE5MihcYmFzZSkNCisJc2RjMQkJJGYyMywgXG9mZnNldCArIDE4NChcYmFzZSkNCisJc2RjMQkJJGYyMiwgXG9mZnNldCArIDE3NihcYmFzZSkNCisJc2RjMQkJJGYyMSwgXG9mZnNldCArIDE2OChcYmFzZSkNCisJc2RjMQkJJGYyMCwgXG9mZnNldCArIDE2MChcYmFzZSkNCisJc2RjMQkJJGYxOSwgXG9mZnNldCArIDE1MihcYmFzZSkNCisJc2RjMQkJJGYxOCwgXG9mZnNldCArIDE0NChcYmFzZSkNCisJc2RjMQkJJGYxNywgXG9mZnNldCArIDEzNihcYmFzZSkNCisJc2RjMQkJJGYxNiwgXG9mZnNldCArIDEyOChcYmFzZSkNCisJc2RjMQkJJGYxNSwgXG9mZnNldCArIDEyMChcYmFzZSkNCisJc2RjMQkJJGYxNCwgXG9mZnNldCArIDExMihcYmFzZSkNCisJc2RjMQkJJGYxMywgXG9mZnNldCArIDEwNChcYmFzZSkNCisJc2RjMQkJJGYxMiwgXG9mZnNldCArIDk2KFxiYXNlKQ0KKwlzZGMxCQkkZjExLCBcb2Zmc2V0ICsgODgoXGJhc2UpDQorCXNkYzEJCSRmMTAsIFxvZmZzZXQgKyA4MChcYmFzZSkNCisJc2RjMQkJJGY5LCBcb2Zmc2V0ICsgNzIoXGJhc2UpDQorCXNkYzEJCSRmOCwgXG9mZnNldCArIDY0KFxiYXNlKQ0KKwlzZGMxCQkkZjcsIFxvZmZzZXQgKyA1NihcYmFzZSkNCisJc2RjMQkJJGY2LCBcb2Zmc2V0ICsgNDgoXGJhc2UpDQorCXNkYzEJCSRmNSwgXG9mZnNldCArIDQwKFxiYXNlKQ0KKwlzZGMxCQkkZjQsIFxvZmZzZXQgKyAzMihcYmFzZSkNCisJc2RjMQkJJGYzLCBcb2Zmc2V0ICsgMjQoXGJhc2UpDQorCXNkYzEJCSRmMiwgXG9mZnNldCArIDE2KFxiYXNlKQ0KKwlzZGMxCQkkZjEsIFxvZmZzZXQgKyA4KFxiYXNlKQ0KKwlzZGMxCQkkZjAsIFxvZmZzZXQgKyAwKFxiYXNlKQ0KIA0KLXNkYzEgJGYzMSwgXCBvZmZzZXQgKyAyNDggKCBcIGJhc2UgKQ0KLXNkYzEgJGYzMCwgXCBvZmZzZXQgKyAyNDAgKCBcIGJhc2UgKQ0KLXNkYzEgJGYyOSwgXCBvZmZzZXQgKyAyMzIgKCBcIGJhc2UgKQ0KLXNkYzEgJGYyOCwgXCBvZmZzZXQgKyAyMjQgKCBcIGJhc2UgKQ0KLXNkYzEgJGYyNywgXCBvZmZzZXQgKyAyMTYgKCBcIGJhc2UgKQ0KLXNkYzEgJGYyNiwgXCBvZmZzZXQgKyAyMDggKCBcIGJhc2UgKQ0KLXNkYzEgJGYyNSwgXCBvZmZzZXQgKyAyMDAgKCBcIGJhc2UgKQ0KLXNkYzEgJGYyNCwgXCBvZmZzZXQgKyAxOTIgKCBcIGJhc2UgKQ0KLXNkYzEgJGYyMywgXCBvZmZzZXQgKyAxODQgKCBcIGJhc2UgKQ0KLXNkYzEgJGYyMiwgXCBvZmZzZXQgKyAxNzYgKCBcIGJhc2UgKQ0KLXNkYzEgJGYyMSwgXCBvZmZzZXQgKyAxNjggKCBcIGJhc2UgKQ0KLXNkYzEgJGYyMCwgXCBvZmZzZXQgKyAxNjAgKCBcIGJhc2UgKQ0KLXNkYzEgJGYxOSwgXCBvZmZzZXQgKyAxNTIgKCBcIGJhc2UgKQ0KLXNkYzEgJGYxOCwgXCBvZmZzZXQgKyAxNDQgKCBcIGJhc2UgKQ0KLXNkYzEgJGYxNywgXCBvZmZzZXQgKyAxMzYgKCBcIGJhc2UgKQ0KLXNkYzEgJGYxNiwgXCBvZmZzZXQgKyAxMjggKCBcIGJhc2UgKQ0KLXNkYzEgJGYxNSwgXCBvZmZzZXQgKyAxMjAgKCBcIGJhc2UgKQ0KLXNkYzEgJGYxNCwgXCBvZmZzZXQgKyAxMTIgKCBcIGJhc2UgKQ0KLXNkYzEgJGYxMywgXCBvZmZzZXQgKyAxMDQgKCBcIGJhc2UgKQ0KLXNkYzEgJGYxMiwgXCBvZmZzZXQgKyA5NiAoIFwgYmFzZSApDQotc2RjMSAkZjExLCBcIG9mZnNldCArIDg4ICggXCBiYXNlICkNCi1zZGMxICRmMTAsIFwgb2Zmc2V0ICsgODAgKCBcIGJhc2UgKQ0KLXNkYzEgJGY5LCBcIG9mZnNldCArIDcyICggXCBiYXNlICkNCi1zZGMxICRmOCwgXCBvZmZzZXQgKyA2NCAoIFwgYmFzZSApDQotc2RjMSAkZjcsIFwgb2Zmc2V0ICsgNTYgKCBcIGJhc2UgKQ0KLXNkYzEgJGY2LCBcIG9mZnNldCArIDQ4ICggXCBiYXNlICkNCi1zZGMxICRmNSwgXCBvZmZzZXQgKyA0MCAoIFwgYmFzZSApDQotc2RjMSAkZjQsIFwgb2Zmc2V0ICsgMzIgKCBcIGJhc2UgKQ0KLXNkYzEgJGYzLCBcIG9mZnNldCArIDI0ICggXCBiYXNlICkNCi1zZGMxICRmMiwgXCBvZmZzZXQgKyAxNiAoIFwgYmFzZSApDQotc2RjMSAkZjEsIFwgb2Zmc2V0ICsgOCAoIFwgYmFzZSApDQotc2RjMSAkZjAsIFwgb2Zmc2V0ICsgMCAoIFwgYmFzZSApDQotDQotICAgLmVuZG0NCisgICAgLmVuZG0NCiANCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLSAgIC5tYWNybyBwb3J0TE9BRF9GUFVfUkVHUyBvZmZzZXQsIGJhc2UNCisubWFjcm8gIHBvcnRMT0FEX0ZQVV9SRUdTICAgIG9mZnNldCwgYmFzZQ0KKyAgICAvKiBNYWNybyB0byBhc3Npc3Qgd2l0aCBsb2FkaW5nIGp1c3QgdGhlIEZQVSByZWdpc3RlcnMgZnJvbSB0aGUNCisgICAgICogc3BlY2lmaWVkIGFkZHJlc3MgYW5kIGJhc2Ugb2Zmc2V0LCBvZmZzZXQgaXMgYSBjb25zdGFudCwNCisgICAgICogYmFzZSBpcyB0aGUgYmFzZSBwb2ludGVyIHJlZ2lzdGVyICAqLw0KIA0KLS8qIE1hY3JvIHRvIGFzc2lzdCB3aXRoIGxvYWRpbmcganVzdCB0aGUgRlBVIHJlZ2lzdGVycyBmcm9tIHRoZQ0KLSAqIHNwZWNpZmllZCBhZGRyZXNzIGFuZCBiYXNlIG9mZnNldCwgb2Zmc2V0IGlzIGEgY29uc3RhbnQsDQotICogYmFzZSBpcyB0aGUgYmFzZSBwb2ludGVyIHJlZ2lzdGVyICAqLw0KKwlsZGMxCQkkZjAsIFxvZmZzZXQgKyAwKFxiYXNlKQ0KKwlsZGMxCQkkZjEsIFxvZmZzZXQgKyA4KFxiYXNlKQ0KKwlsZGMxCQkkZjIsIFxvZmZzZXQgKyAxNihcYmFzZSkNCisJbGRjMQkJJGYzLCBcb2Zmc2V0ICsgMjQoXGJhc2UpDQorCWxkYzEJCSRmNCwgXG9mZnNldCArIDMyKFxiYXNlKQ0KKwlsZGMxCQkkZjUsIFxvZmZzZXQgKyA0MChcYmFzZSkNCisJbGRjMQkJJGY2LCBcb2Zmc2V0ICsgNDgoXGJhc2UpDQorCWxkYzEJCSRmNywgXG9mZnNldCArIDU2KFxiYXNlKQ0KKwlsZGMxCQkkZjgsIFxvZmZzZXQgKyA2NChcYmFzZSkNCisJbGRjMQkJJGY5LCBcb2Zmc2V0ICsgNzIoXGJhc2UpDQorCWxkYzEJCSRmMTAsIFxvZmZzZXQgKyA4MChcYmFzZSkNCisJbGRjMQkJJGYxMSwgXG9mZnNldCArIDg4KFxiYXNlKQ0KKwlsZGMxCQkkZjEyLCBcb2Zmc2V0ICsgOTYoXGJhc2UpDQorCWxkYzEJCSRmMTMsIFxvZmZzZXQgKyAxMDQoXGJhc2UpDQorCWxkYzEJCSRmMTQsIFxvZmZzZXQgKyAxMTIoXGJhc2UpDQorCWxkYzEJCSRmMTUsIFxvZmZzZXQgKyAxMjAoXGJhc2UpDQorCWxkYzEJCSRmMTYsIFxvZmZzZXQgKyAxMjgoXGJhc2UpDQorCWxkYzEJCSRmMTcsIFxvZmZzZXQgKyAxMzYoXGJhc2UpDQorCWxkYzEJCSRmMTgsIFxvZmZzZXQgKyAxNDQoXGJhc2UpDQorCWxkYzEJCSRmMTksIFxvZmZzZXQgKyAxNTIoXGJhc2UpDQorCWxkYzEJCSRmMjAsIFxvZmZzZXQgKyAxNjAoXGJhc2UpDQorCWxkYzEJCSRmMjEsIFxvZmZzZXQgKyAxNjgoXGJhc2UpDQorCWxkYzEJCSRmMjIsIFxvZmZzZXQgKyAxNzYoXGJhc2UpDQorCWxkYzEJCSRmMjMsIFxvZmZzZXQgKyAxODQoXGJhc2UpDQorCWxkYzEJCSRmMjQsIFxvZmZzZXQgKyAxOTIoXGJhc2UpDQorCWxkYzEJCSRmMjUsIFxvZmZzZXQgKyAyMDAoXGJhc2UpDQorCWxkYzEJCSRmMjYsIFxvZmZzZXQgKyAyMDgoXGJhc2UpDQorCWxkYzEJCSRmMjcsIFxvZmZzZXQgKyAyMTYoXGJhc2UpDQorCWxkYzEJCSRmMjgsIFxvZmZzZXQgKyAyMjQoXGJhc2UpDQorCWxkYzEJCSRmMjksIFxvZmZzZXQgKyAyMzIoXGJhc2UpDQorCWxkYzEJCSRmMzAsIFxvZmZzZXQgKyAyNDAoXGJhc2UpDQorCWxkYzEJCSRmMzEsIFxvZmZzZXQgKyAyNDgoXGJhc2UpDQogDQotbGRjMSAkZjAsIFwgb2Zmc2V0ICsgMCAoIFwgYmFzZSApDQotbGRjMSAkZjEsIFwgb2Zmc2V0ICsgOCAoIFwgYmFzZSApDQotbGRjMSAkZjIsIFwgb2Zmc2V0ICsgMTYgKCBcIGJhc2UgKQ0KLWxkYzEgJGYzLCBcIG9mZnNldCArIDI0ICggXCBiYXNlICkNCi1sZGMxICRmNCwgXCBvZmZzZXQgKyAzMiAoIFwgYmFzZSApDQotbGRjMSAkZjUsIFwgb2Zmc2V0ICsgNDAgKCBcIGJhc2UgKQ0KLWxkYzEgJGY2LCBcIG9mZnNldCArIDQ4ICggXCBiYXNlICkNCi1sZGMxICRmNywgXCBvZmZzZXQgKyA1NiAoIFwgYmFzZSApDQotbGRjMSAkZjgsIFwgb2Zmc2V0ICsgNjQgKCBcIGJhc2UgKQ0KLWxkYzEgJGY5LCBcIG9mZnNldCArIDcyICggXCBiYXNlICkNCi1sZGMxICRmMTAsIFwgb2Zmc2V0ICsgODAgKCBcIGJhc2UgKQ0KLWxkYzEgJGYxMSwgXCBvZmZzZXQgKyA4OCAoIFwgYmFzZSApDQotbGRjMSAkZjEyLCBcIG9mZnNldCArIDk2ICggXCBiYXNlICkNCi1sZGMxICRmMTMsIFwgb2Zmc2V0ICsgMTA0ICggXCBiYXNlICkNCi1sZGMxICRmMTQsIFwgb2Zmc2V0ICsgMTEyICggXCBiYXNlICkNCi1sZGMxICRmMTUsIFwgb2Zmc2V0ICsgMTIwICggXCBiYXNlICkNCi1sZGMxICRmMTYsIFwgb2Zmc2V0ICsgMTI4ICggXCBiYXNlICkNCi1sZGMxICRmMTcsIFwgb2Zmc2V0ICsgMTM2ICggXCBiYXNlICkNCi1sZGMxICRmMTgsIFwgb2Zmc2V0ICsgMTQ0ICggXCBiYXNlICkNCi1sZGMxICRmMTksIFwgb2Zmc2V0ICsgMTUyICggXCBiYXNlICkNCi1sZGMxICRmMjAsIFwgb2Zmc2V0ICsgMTYwICggXCBiYXNlICkNCi1sZGMxICRmMjEsIFwgb2Zmc2V0ICsgMTY4ICggXCBiYXNlICkNCi1sZGMxICRmMjIsIFwgb2Zmc2V0ICsgMTc2ICggXCBiYXNlICkNCi1sZGMxICRmMjMsIFwgb2Zmc2V0ICsgMTg0ICggXCBiYXNlICkNCi1sZGMxICRmMjQsIFwgb2Zmc2V0ICsgMTkyICggXCBiYXNlICkNCi1sZGMxICRmMjUsIFwgb2Zmc2V0ICsgMjAwICggXCBiYXNlICkNCi1sZGMxICRmMjYsIFwgb2Zmc2V0ICsgMjA4ICggXCBiYXNlICkNCi1sZGMxICRmMjcsIFwgb2Zmc2V0ICsgMjE2ICggXCBiYXNlICkNCi1sZGMxICRmMjgsIFwgb2Zmc2V0ICsgMjI0ICggXCBiYXNlICkNCi1sZGMxICRmMjksIFwgb2Zmc2V0ICsgMjMyICggXCBiYXNlICkNCi1sZGMxICRmMzAsIFwgb2Zmc2V0ICsgMjQwICggXCBiYXNlICkNCi1sZGMxICRmMzEsIFwgb2Zmc2V0ICsgMjQ4ICggXCBiYXNlICkNCi0NCi0gICAuZW5kbQ0KKyAgICAuZW5kbQ0KIA0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotICAgLm1hY3JvIHBvcnRTQVZFX0NPTlRFWFQNCisubWFjcm8JcG9ydFNBVkVfQ09OVEVYVA0KIA0KLS8qIE1ha2Ugcm9vbSBmb3IgdGhlIGNvbnRleHQuIEZpcnN0IHNhdmUgdGhlIGN1cnJlbnQgc3RhdHVzIHNvIGl0IGNhbiBiZQ0KLSAqIG1hbmlwdWxhdGVkLCBhbmQgdGhlIGNhdXNlIGFuZCBFUEMgcmVnaXN0ZXJzIHNvIHRoZWlyIG9yaWdpbmFsIHZhbHVlcyBhcmUNCi0gKiBjYXB0dXJlZC4gKi8NCi1tZmMwIGswLCBfQ1AwX0NBVVNFDQotYWRkaXUgc3AsIHNwLCAtcG9ydENPTlRFWFRfU0laRQ0KKwkvKiBNYWtlIHJvb20gZm9yIHRoZSBjb250ZXh0LiBGaXJzdCBzYXZlIHRoZSBjdXJyZW50IHN0YXR1cyBzbyBpdCBjYW4gYmUNCisJbWFuaXB1bGF0ZWQsIGFuZCB0aGUgY2F1c2UgYW5kIEVQQyByZWdpc3RlcnMgc28gdGhlaXIgb3JpZ2luYWwgdmFsdWVzIGFyZQ0KKwljYXB0dXJlZC4gKi8NCisJbWZjMAkJazAsIF9DUDBfQ0FVU0UNCisJYWRkaXUJCXNwLCBzcCwgLXBvcnRDT05URVhUX1NJWkUNCiANCi0jaWYgKCBfX21pcHNfaGFyZF9mbG9hdCA9PSAxICkgJiYgKCBjb25maWdVU0VfVEFTS19GUFVfU1VQUE9SVCA9PSAxICkNCisJI2lmICggX19taXBzX2hhcmRfZmxvYXQgPT0gMSApICYmICggY29uZmlnVVNFX1RBU0tfRlBVX1NVUFBPUlQgPT0gMSApDQorCQkvKiBUZXN0IGlmIHdlIGFyZSBhbHJlYWR5IHVzaW5nIHRoZSBzeXN0ZW0gc3RhY2suIE9ubHkgdGFza3MgbWF5IHVzZSB0aGUNCisJCUZQVSBzbyBpZiB3ZSBhcmUgYWxyZWFkeSBpbiBhIG5lc3RlZCBpbnRlcnJ1cHQgdGhlbiB0aGUgRlBVIGNvbnRleHQgZG9lcw0KKwkJbm90IHJlcXVpcmUgc2F2aW5nLiAqLw0KKwkJbGEJCQlrMSwgdXhJbnRlcnJ1cHROZXN0aW5nDQorCQlsdwkJCWsxLCAwKGsxKQ0KKwkJYm5lCQkJazEsIHplcm8sIDJmDQorCQlub3ANCiANCi0vKiBUZXN0IGlmIHdlIGFyZSBhbHJlYWR5IHVzaW5nIHRoZSBzeXN0ZW0gc3RhY2suIE9ubHkgdGFza3MgbWF5IHVzZSB0aGUNCi0gKiBGUFUgc28gaWYgd2UgYXJlIGFscmVhZHkgaW4gYSBuZXN0ZWQgaW50ZXJydXB0IHRoZW4gdGhlIEZQVSBjb250ZXh0IGRvZXMNCi0gKiBub3QgcmVxdWlyZSBzYXZpbmcuICovDQotICAgIGxhIGsxLCB1eEludGVycnVwdE5lc3RpbmcNCi0gICAgbHcgazEsIDAgKCBrMSApDQotICAgIGJuZSBrMSwgemVybywgMmYNCi0gICAgbm9wDQorCQkvKiBUZXN0IGlmIHRoZSBjdXJyZW50IHRhc2sgbmVlZHMgdGhlIEZQVSBjb250ZXh0IHNhdmluZy4gKi8NCisJCWxhCQkJazEsIHVsVGFza0hhc0ZQVUNvbnRleHQNCisJCWx3CQkJazEsIDAoazEpDQorCQliZXEJCQlrMSwgemVybywgMWYNCisJCW5vcA0KIA0KLS8qIFRlc3QgaWYgdGhlIGN1cnJlbnQgdGFzayBuZWVkcyB0aGUgRlBVIGNvbnRleHQgc2F2aW5nLiAqLw0KLSAgICBsYSBrMSwgdWxUYXNrSGFzRlBVQ29udGV4dA0KLSAgICBsdyBrMSwgMCAoIGsxICkNCi0gICAgYmVxIGsxLCB6ZXJvLCAxZg0KLSAgICBub3ANCisJCS8qIEFkanVzdCB0aGUgc3RhY2sgdG8gYWNjb3VudCBmb3IgdGhlIGFkZGl0aW9uYWwgRlBVIGNvbnRleHQuKi8NCisJCWFkZGl1CQlzcCwgc3AsIC1wb3J0RlBVX0NPTlRFWFRfU0laRQ0KIA0KLS8qIEFkanVzdCB0aGUgc3RhY2sgdG8gYWNjb3VudCBmb3IgdGhlIGFkZGl0aW9uYWwgRlBVIGNvbnRleHQuKi8NCi0gICAgYWRkaXUgc3AsIHNwLCAtcG9ydEZQVV9DT05URVhUX1NJWkUNCisJMToNCisJCS8qIFNhdmUgdGhlIHVsVGFza0hhc0ZQVUNvbnRleHQgZmxhZy4gKi8NCisJCXN3CQkJazEsIHBvcnRUQVNLX0hBU19GUFVfU1RBQ0tfTE9DQVRJT04oc3ApDQogDQotICAgIDEgOg0KLSAgICAvKiBTYXZlIHRoZSB1bFRhc2tIYXNGUFVDb250ZXh0IGZsYWcuICovDQotICAgIHN3IGsxLCBwb3J0VEFTS19IQVNfRlBVX1NUQUNLX0xPQ0FUSU9OKCBzcCApDQorCTI6DQorCSNlbmRpZg0KIA0KLSAgICAyIDoNCi0jZW5kaWYgLyogaWYgKCBfX21pcHNfaGFyZF9mbG9hdCA9PSAxICkgJiYgKCBjb25maWdVU0VfVEFTS19GUFVfU1VQUE9SVCA9PSAxICkgKi8NCisJbWZjMAkJazEsIF9DUDBfU1RBVFVTDQogDQotbWZjMCBrMSwgX0NQMF9TVEFUVVMNCisJLyogQWxzbyBzYXZlIHM3LCBzNiBhbmQgczUgc28gdGhleSBjYW4gYmUgdXNlZC4gIEFueSBuZXN0aW5nIGludGVycnVwdHMNCisJc2hvdWxkIG1haW50YWluIHRoZSB2YWx1ZXMgb2YgdGhlc2UgcmVnaXN0ZXJzIGFjcm9zcyB0aGUgSVNSLiAqLw0KKwlzdwkJCXM3LCA0OChzcCkNCisJc3cJCQlzNiwgNDQoc3ApDQorCXN3CQkJczUsIDQwKHNwKQ0KKwlzdwkJCWsxLCBwb3J0U1RBVFVTX1NUQUNLX0xPQ0FUSU9OKHNwKQ0KIA0KLS8qIEFsc28gc2F2ZSBzNywgczYgYW5kIHM1IHNvIHRoZXkgY2FuIGJlIHVzZWQuICBBbnkgbmVzdGluZyBpbnRlcnJ1cHRzDQotICogc2hvdWxkIG1haW50YWluIHRoZSB2YWx1ZXMgb2YgdGhlc2UgcmVnaXN0ZXJzIGFjcm9zcyB0aGUgSVNSLiAqLw0KLXN3IHM3LCA0OCAoIHNwICkNCi1zdyBzNiwgNDQgKCBzcCApDQotc3cgczUsIDQwICggc3AgKQ0KLXN3IGsxLCBwb3J0U1RBVFVTX1NUQUNLX0xPQ0FUSU9OKCBzcCApDQorCS8qIFByZXBhcmUgdG8gZW5hYmxlIGludGVycnVwdHMgYWJvdmUgdGhlIGN1cnJlbnQgcHJpb3JpdHkuICovDQorCXNybAkJCWswLCBrMCwgMHhhDQorCWlucyAJCWsxLCBrMCwgMTAsIDcNCisJc3JsCQkJazAsIGswLCAweDcgLyogVGhpcyBjb3BpZXMgdGhlIE1TQiBvZiB0aGUgSVBMLCBidXQgaXQgd291bGQgYmUgYW4gZXJyb3IgaWYgaXQgd2FzIHNldCBhbnl3YXkuICovDQorCWlucyAJCWsxLCBrMCwgMTgsIDENCisJaW5zCQkJazEsIHplcm8sIDEsIDQNCiANCi0vKiBQcmVwYXJlIHRvIGVuYWJsZSBpbnRlcnJ1cHRzIGFib3ZlIHRoZSBjdXJyZW50IHByaW9yaXR5LiAqLw0KLXNybCBrMCwgazAsIDB4YQ0KLWlucyBrMSwgazAsIDEwLCA3DQotc3JsIGswLCBrMCwgMHg3ICAgICAgICAgICAgIC8qIFRoaXMgY29waWVzIHRoZSBNU0Igb2YgdGhlIElQTCwgYnV0IGl0IHdvdWxkIGJlIGFuIGVycm9yIGlmIGl0IHdhcyBzZXQgYW55d2F5LiAqLw0KLWlucyBrMSwgazAsIDE4LCAxDQotaW5zIGsxLCB6ZXJvLCAxLCA0DQorCS8qIHM1IGlzIHVzZWQgYXMgdGhlIGZyYW1lIHBvaW50ZXIuICovDQorCWFkZAkJCXM1LCB6ZXJvLCBzcA0KIA0KLS8qIHM1IGlzIHVzZWQgYXMgdGhlIGZyYW1lIHBvaW50ZXIuICovDQotYWRkIHM1LCB6ZXJvLCBzcA0KKwkvKiBDaGVjayB0aGUgbmVzdGluZyBjb3VudCB2YWx1ZS4gKi8NCisJbGEJCQlrMCwgdXhJbnRlcnJ1cHROZXN0aW5nDQorCWx3CQkJczYsIChrMCkNCiANCi0vKiBDaGVjayB0aGUgbmVzdGluZyBjb3VudCB2YWx1ZS4gKi8NCi1sYSBrMCwgdXhJbnRlcnJ1cHROZXN0aW5nDQotbHcgczYsICggazAgKQ0KKwkvKiBJZiB0aGUgbmVzdGluZyBjb3VudCBpcyAwIHRoZW4gc3dhcCB0byB0aGUgdGhlIHN5c3RlbSBzdGFjaywgb3RoZXJ3aXNlDQorCXRoZSBzeXN0ZW0gc3RhY2sgaXMgYWxyZWFkeSBiZWluZyB1c2VkLiAqLw0KKwlibmUJCQlzNiwgemVybywgMWYNCisJbm9wDQogDQotLyogSWYgdGhlIG5lc3RpbmcgY291bnQgaXMgMCB0aGVuIHN3YXAgdG8gdGhlIHRoZSBzeXN0ZW0gc3RhY2ssIG90aGVyd2lzZQ0KLSAqIHRoZSBzeXN0ZW0gc3RhY2sgaXMgYWxyZWFkeSBiZWluZyB1c2VkLiAqLw0KLWJuZSBzNiwgemVybywgMWYNCi1ub3ANCisJLyogU3dhcCB0byB0aGUgc3lzdGVtIHN0YWNrLiAqLw0KKwlsYQkJCXNwLCB4SVNSU3RhY2tUb3ANCisJbHcJCQlzcCwgKHNwKQ0KIA0KLS8qIFN3YXAgdG8gdGhlIHN5c3RlbSBzdGFjay4gKi8NCi1sYSBzcCwgeElTUlN0YWNrVG9wDQotbHcgc3AsICggc3AgKQ0KKwkvKiBJbmNyZW1lbnQgYW5kIHNhdmUgdGhlIG5lc3RpbmcgY291bnQuICovDQorMToJYWRkaXUJCXM2LCBzNiwgMQ0KKwlzdwkJCXM2LCAwKGswKQ0KIA0KLS8qIEluY3JlbWVudCBhbmQgc2F2ZSB0aGUgbmVzdGluZyBjb3VudC4gKi8NCi0xIDogIGFkZGl1IHM2LCBzNiwgMQ0KLXN3IHM2LCAwICggazAgKQ0KKwkvKiBzNiBob2xkcyB0aGUgRVBDIHZhbHVlLCB0aGlzIGlzIHNhdmVkIGFmdGVyIGludGVycnVwdHMgYXJlIHJlLWVuYWJsZWQuICovDQorCW1mYzAgCQlzNiwgX0NQMF9FUEMNCiANCi0vKiBzNiBob2xkcyB0aGUgRVBDIHZhbHVlLCB0aGlzIGlzIHNhdmVkIGFmdGVyIGludGVycnVwdHMgYXJlIHJlLWVuYWJsZWQuICovDQotbWZjMCBzNiwgX0NQMF9FUEMNCisJLyogUmUtZW5hYmxlIGludGVycnVwdHMuICovDQorCW10YzAJCWsxLCBfQ1AwX1NUQVRVUw0KIA0KLS8qIFJlLWVuYWJsZSBpbnRlcnJ1cHRzLiAqLw0KLW10YzAgazEsIF9DUDBfU1RBVFVTDQorCS8qIFNhdmUgdGhlIGNvbnRleHQgaW50byB0aGUgc3BhY2UganVzdCBjcmVhdGVkLiAgczYgaXMgc2F2ZWQgYWdhaW4NCisJaGVyZSBhcyBpdCBub3cgY29udGFpbnMgdGhlIEVQQyB2YWx1ZS4gIE5vIG90aGVyIHMgcmVnaXN0ZXJzIG5lZWQgYmUNCisJc2F2ZWQuICovDQorCXN3CQkJcmEsIDEyMChzNSkNCisJc3cJCQlzOCwgMTE2KHM1KQ0KKwlzdwkJCXQ5LCAxMTIoczUpDQorCXN3CQkJdDgsIDEwOChzNSkNCisJc3cJCQl0NywgMTA0KHM1KQ0KKwlzdwkJCXQ2LCAxMDAoczUpDQorCXN3CQkJdDUsIDk2KHM1KQ0KKwlzdwkJCXQ0LCA5MihzNSkNCisJc3cJCQl0MywgODgoczUpDQorCXN3CQkJdDIsIDg0KHM1KQ0KKwlzdwkJCXQxLCA4MChzNSkNCisJc3cJCQl0MCwgNzYoczUpDQorCXN3CQkJYTMsIDcyKHM1KQ0KKwlzdwkJCWEyLCA2OChzNSkNCisJc3cJCQlhMSwgNjQoczUpDQorCXN3CQkJYTAsIDYwKHM1KQ0KKwlzdwkJCXYxLCA1NihzNSkNCisJc3cJCQl2MCwgNTIoczUpDQorCXN3CQkJczYsIHBvcnRFUENfU1RBQ0tfTE9DQVRJT04oczUpDQorCXN3CQkJJDEsIDE2KHM1KQ0KIA0KLS8qIFNhdmUgdGhlIGNvbnRleHQgaW50byB0aGUgc3BhY2UganVzdCBjcmVhdGVkLiAgczYgaXMgc2F2ZWQgYWdhaW4NCi0gKiBoZXJlIGFzIGl0IG5vdyBjb250YWlucyB0aGUgRVBDIHZhbHVlLiAgTm8gb3RoZXIgcyByZWdpc3RlcnMgbmVlZCBiZQ0KLSAqIHNhdmVkLiAqLw0KLXN3IHJhLCAxMjAgKCBzNSApDQotc3cgczgsIDExNiAoIHM1ICkNCi1zdyB0OSwgMTEyICggczUgKQ0KLXN3IHQ4LCAxMDggKCBzNSApDQotc3cgdDcsIDEwNCAoIHM1ICkNCi1zdyB0NiwgMTAwICggczUgKQ0KLXN3IHQ1LCA5NiAoIHM1ICkNCi1zdyB0NCwgOTIgKCBzNSApDQotc3cgdDMsIDg4ICggczUgKQ0KLXN3IHQyLCA4NCAoIHM1ICkNCi1zdyB0MSwgODAgKCBzNSApDQotc3cgdDAsIDc2ICggczUgKQ0KLXN3IGEzLCA3MiAoIHM1ICkNCi1zdyBhMiwgNjggKCBzNSApDQotc3cgYTEsIDY0ICggczUgKQ0KLXN3IGEwLCA2MCAoIHM1ICkNCi1zdyB2MSwgNTYgKCBzNSApDQotc3cgdjAsIDUyICggczUgKQ0KLXN3IHM2LCBwb3J0RVBDX1NUQUNLX0xPQ0FUSU9OKCBzNSApDQotc3cgJDEsIDE2ICggczUgKQ0KKwkvKiBTYXZlIHRoZSBBQzAsIEFDMSwgQUMyLCBBQzMgcmVnaXN0ZXJzIGZyb20gdGhlIERTUC4gIHM2IGlzIHVzZWQgYXMgYQ0KKwlzY3JhdGNoIHJlZ2lzdGVyLiAqLw0KKwltZmhpCQlzNiwgJGFjMQ0KKwlzdwkJCXM2LCAxMjgoczUpDQorCW1mbG8JCXM2LCAkYWMxDQorCXN3CQkJczYsIDEyNChzNSkNCiANCi0vKiBTYXZlIHRoZSBBQzAsIEFDMSwgQUMyLCBBQzMgcmVnaXN0ZXJzIGZyb20gdGhlIERTUC4gIHM2IGlzIHVzZWQgYXMgYQ0KLSAqIHNjcmF0Y2ggcmVnaXN0ZXIuICovDQotbWZoaSBzNiwgJGFjMQ0KLXN3IHM2LCAxMjggKCBzNSApDQotbWZsbyBzNiwgJGFjMQ0KLXN3IHM2LCAxMjQgKCBzNSApDQorCW1maGkJCXM2LCAkYWMyDQorCXN3CQkJczYsIDEzNihzNSkNCisJbWZsbwkJczYsICRhYzINCisJc3cJCQlzNiwgMTMyKHM1KQ0KIA0KLW1maGkgczYsICRhYzINCi1zdyBzNiwgMTM2ICggczUgKQ0KLW1mbG8gczYsICRhYzINCi1zdyBzNiwgMTMyICggczUgKQ0KKwltZmhpCQlzNiwgJGFjMw0KKwlzdwkJCXM2LCAxNDQoczUpDQorCW1mbG8JCXM2LCAkYWMzDQorCXN3CQkJczYsIDE0MChzNSkNCiANCi1tZmhpIHM2LCAkYWMzDQotc3cgczYsIDE0NCAoIHM1ICkNCi1tZmxvIHM2LCAkYWMzDQotc3cgczYsIDE0MCAoIHM1ICkNCisJLyogU2F2ZSB0aGUgRFNQIENvbnRyb2wgcmVnaXN0ZXIgKi8NCisJcmRkc3AJCXM2DQorCXN3CQkJczYsIDE0OChzNSkNCiANCi0vKiBTYXZlIHRoZSBEU1AgQ29udHJvbCByZWdpc3RlciAqLw0KLXJkZHNwIHM2DQotc3cgczYsIDE0OCAoIHM1ICkNCisJLyogYWMwIGlzIGRvbmUgc2VwYXJhdGVseSB0byBtYXRjaCB0aGUgTVggcG9ydC4gKi8NCisJbWZoaQkJczYsICRhYzANCisJc3cJCQlzNiwgMTIoczUpDQorCW1mbG8JCXM2LCAkYWMwDQorCXN3CQkJczYsIDgoczUpDQogDQotLyogYWMwIGlzIGRvbmUgc2VwYXJhdGVseSB0byBtYXRjaCB0aGUgTVggcG9ydC4gKi8NCi1tZmhpIHM2LCAkYWMwDQotc3cgczYsIDEyICggczUgKQ0KLW1mbG8gczYsICRhYzANCi1zdyBzNiwgOCAoIHM1ICkNCisJLyogU2F2ZSB0aGUgRlBVIGNvbnRleHQgaWYgdGhlIG5lc3RpbmcgY291bnQgd2FzIHplcm8uICovDQorCSNpZiAoIF9fbWlwc19oYXJkX2Zsb2F0ID09IDEgKSAmJiAoIGNvbmZpZ1VTRV9UQVNLX0ZQVV9TVVBQT1JUID09IDEgKQ0KKwkJbGEJCQlzNiwgdXhJbnRlcnJ1cHROZXN0aW5nDQorCQlsdwkJCXM2LCAwKHM2KQ0KKwkJYWRkaXUJCXM2LCBzNiwgLTENCisJCWJuZQkJCXM2LCB6ZXJvLCAxZg0KKwkJbm9wDQogDQotLyogU2F2ZSB0aGUgRlBVIGNvbnRleHQgaWYgdGhlIG5lc3RpbmcgY291bnQgd2FzIHplcm8uICovDQotI2lmICggX19taXBzX2hhcmRfZmxvYXQgPT0gMSApICYmICggY29uZmlnVVNFX1RBU0tfRlBVX1NVUFBPUlQgPT0gMSApDQotICAgIGxhIHM2LCB1eEludGVycnVwdE5lc3RpbmcNCi0gICAgbHcgczYsIDAgKCBzNiApDQotICAgIGFkZGl1IHM2LCBzNiwgLTENCi0gICAgYm5lIHM2LCB6ZXJvLCAxZg0KLSAgICBub3ANCisJCS8qIFRlc3QgaWYgdGhlIGN1cnJlbnQgdGFzayBuZWVkcyB0aGUgRlBVIGNvbnRleHQgc2F2aW5nLiAqLw0KKwkJbHcJCQlzNiwgcG9ydFRBU0tfSEFTX0ZQVV9TVEFDS19MT0NBVElPTihzNSkNCisJCWJlcQkJCXM2LCB6ZXJvLCAxZg0KKwkJbm9wDQogDQotLyogVGVzdCBpZiB0aGUgY3VycmVudCB0YXNrIG5lZWRzIHRoZSBGUFUgY29udGV4dCBzYXZpbmcuICovDQotICAgIGx3IHM2LCBwb3J0VEFTS19IQVNfRlBVX1NUQUNLX0xPQ0FUSU9OKCBzNSApDQotICAgIGJlcSBzNiwgemVybywgMWYNCi0gICAgbm9wDQotICAgIC8qIFNhdmUgdGhlIEZQVSByZWdpc3RlcnMuICovDQotICAgIHBvcnRTQVZFX0ZQVV9SRUdTKCBwb3J0Q09OVEVYVF9TSVpFICsgOCApLCBzNQ0KKwkJLyogU2F2ZSB0aGUgRlBVIHJlZ2lzdGVycy4gKi8NCisJCXBvcnRTQVZFX0ZQVV9SRUdTICggcG9ydENPTlRFWFRfU0laRSArIDggKSwgczUNCiANCi0vKiBTYXZlIHRoZSBGUFUgc3RhdHVzIHJlZ2lzdGVyICovDQotICAgIGNmYzEgczYsICRmMzENCi0gICAgc3cgczYsICggcG9ydENPTlRFWFRfU0laRSArIHBvcnRGUENTUl9TVEFDS19MT0NBVElPTiApKCBzNSApDQorCQkvKiBTYXZlIHRoZSBGUFUgc3RhdHVzIHJlZ2lzdGVyICovDQorCQljZmMxCQlzNiwgJGYzMQ0KKwkJc3cJCQlzNiwgKHBvcnRDT05URVhUX1NJWkUgKyBwb3J0RlBDU1JfU1RBQ0tfTE9DQVRJT04pKHM1KQ0KIA0KLSAgICAxIDoNCi0jZW5kaWYgLyogaWYgKCBfX21pcHNfaGFyZF9mbG9hdCA9PSAxICkgJiYgKCBjb25maWdVU0VfVEFTS19GUFVfU1VQUE9SVCA9PSAxICkgKi8NCisJCTE6DQorCSNlbmRpZg0KIA0KLS8qIFVwZGF0ZSB0aGUgdGFzayBzdGFjayBwb2ludGVyIHZhbHVlIGlmIG5lc3RpbmcgaXMgemVyby4gKi8NCi1sYSBzNiwgdXhJbnRlcnJ1cHROZXN0aW5nDQotbHcgczYsICggczYgKQ0KLWFkZGl1IHM2LCBzNiwgLTENCi1ibmUgczYsIHplcm8sIDFmDQotbm9wDQorCS8qIFVwZGF0ZSB0aGUgdGFzayBzdGFjayBwb2ludGVyIHZhbHVlIGlmIG5lc3RpbmcgaXMgemVyby4gKi8NCisJbGEJCQlzNiwgdXhJbnRlcnJ1cHROZXN0aW5nDQorCWx3CQkJczYsIChzNikNCisJYWRkaXUJCXM2LCBzNiwgLTENCisJYm5lCQkJczYsIHplcm8sIDFmDQorCW5vcA0KIA0KLS8qIFNhdmUgdGhlIHN0YWNrIHBvaW50ZXIuICovDQotbGEgczYsIHV4U2F2ZWRUYXNrU3RhY2tQb2ludGVyDQotc3cgczUsICggczYgKQ0KLTEgOg0KLS5lbmRtDQorCS8qIFNhdmUgdGhlIHN0YWNrIHBvaW50ZXIuICovDQorCWxhCQkJczYsIHV4U2F2ZWRUYXNrU3RhY2tQb2ludGVyDQorCXN3CQkJczUsIChzNikNCisxOg0KKwkuZW5kbQ0KIA0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotICAgLm1hY3JvIHBvcnRSRVNUT1JFX0NPTlRFWFQNCisubWFjcm8JcG9ydFJFU1RPUkVfQ09OVEVYVA0KIA0KLS8qIFJlc3RvcmUgdGhlIHN0YWNrIHBvaW50ZXIgZnJvbSB0aGUgVENCLiAgVGhpcyBpcyBvbmx5IGRvbmUgaWYgdGhlDQotICogbmVzdGluZyBjb3VudCBpcyAxLiAqLw0KLWxhIHM2LCB1eEludGVycnVwdE5lc3RpbmcNCi1sdyBzNiwgKCBzNiApDQotYWRkaXUgczYsIHM2LCAtMQ0KLWJuZSBzNiwgemVybywgMWYNCi1ub3ANCi1sYSBzNiwgdXhTYXZlZFRhc2tTdGFja1BvaW50ZXINCi1sdyBzNSwgKCBzNiApDQorCS8qIFJlc3RvcmUgdGhlIHN0YWNrIHBvaW50ZXIgZnJvbSB0aGUgVENCLiAgVGhpcyBpcyBvbmx5IGRvbmUgaWYgdGhlDQorCW5lc3RpbmcgY291bnQgaXMgMS4gKi8NCisJbGEJCQlzNiwgdXhJbnRlcnJ1cHROZXN0aW5nDQorCWx3CQkJczYsIChzNikNCisJYWRkaXUJCXM2LCBzNiwgLTENCisJYm5lCQkJczYsIHplcm8sIDFmDQorCW5vcA0KKwlsYQkJCXM2LCB1eFNhdmVkVGFza1N0YWNrUG9pbnRlcg0KKwlsdwkJCXM1LCAoczYpDQogDQotI2lmICggX19taXBzX2hhcmRfZmxvYXQgPT0gMSApICYmICggY29uZmlnVVNFX1RBU0tfRlBVX1NVUFBPUlQgPT0gMSApDQotICAgIC8qIFJlc3RvcmUgdGhlIEZQVSBjb250ZXh0IGlmIHJlcXVpcmVkLiAqLw0KLSAgICBsdyBzNiwgcG9ydFRBU0tfSEFTX0ZQVV9TVEFDS19MT0NBVElPTiggczUgKQ0KLSAgICBiZXEgczYsIHplcm8sIDFmDQotICAgIG5vcA0KLSAgICAvKiBSZXN0b3JlIHRoZSBGUFUgcmVnaXN0ZXJzLiAqLw0KLSAgICBwb3J0TE9BRF9GUFVfUkVHUyggcG9ydENPTlRFWFRfU0laRSArIDggKSwgczUNCisgICAgI2lmICggX19taXBzX2hhcmRfZmxvYXQgPT0gMSApICYmICggY29uZmlnVVNFX1RBU0tfRlBVX1NVUFBPUlQgPT0gMSApDQorCQkvKiBSZXN0b3JlIHRoZSBGUFUgY29udGV4dCBpZiByZXF1aXJlZC4gKi8NCisJCWx3CQkJczYsIHBvcnRUQVNLX0hBU19GUFVfU1RBQ0tfTE9DQVRJT04oczUpDQorCQliZXEJCQlzNiwgemVybywgMWYNCisJCW5vcA0KIA0KLS8qIFJlc3RvcmUgdGhlIEZQVSBzdGF0dXMgcmVnaXN0ZXIuICovDQotICAgIGx3IHM2LCAoIHBvcnRDT05URVhUX1NJWkUgKyBwb3J0RlBDU1JfU1RBQ0tfTE9DQVRJT04gKSggczUgKQ0KLSAgICBjdGMxIHM2LCAkZjMxDQotI2VuZGlmIC8qIGlmICggX19taXBzX2hhcmRfZmxvYXQgPT0gMSApICYmICggY29uZmlnVVNFX1RBU0tfRlBVX1NVUFBPUlQgPT0gMSApICovDQorCQkvKiBSZXN0b3JlIHRoZSBGUFUgcmVnaXN0ZXJzLiAqLw0KKwkJcG9ydExPQURfRlBVX1JFR1MgICAoIHBvcnRDT05URVhUX1NJWkUgKyA4ICksIHM1DQogDQotMSA6DQorCQkvKiBSZXN0b3JlIHRoZSBGUFUgc3RhdHVzIHJlZ2lzdGVyLiAqLw0KKwkJbHcJCQlzNiwgKCBwb3J0Q09OVEVYVF9TSVpFICsgcG9ydEZQQ1NSX1NUQUNLX0xPQ0FUSU9OICkoczUpDQorCQljdGMxCQlzNiwgJGYzMQ0KKyAgIAkjZW5kaWYNCiANCi0vKiBSZXN0b3JlIHRoZSBjb250ZXh0LiAqLw0KLWx3IHM2LCAxMjggKCBzNSApDQotbXRoaSBzNiwgJGFjMQ0KLWx3IHM2LCAxMjQgKCBzNSApDQotbXRsbyBzNiwgJGFjMQ0KKzE6DQogDQotbHcgczYsIDEzNiAoIHM1ICkNCi1tdGhpIHM2LCAkYWMyDQotbHcgczYsIDEzMiAoIHM1ICkNCi1tdGxvIHM2LCAkYWMyDQorCS8qIFJlc3RvcmUgdGhlIGNvbnRleHQuICovDQorCWx3CQkJczYsIDEyOChzNSkNCisJbXRoaQkJczYsICRhYzENCisJbHcJCQlzNiwgMTI0KHM1KQ0KKwltdGxvCQlzNiwgJGFjMQ0KIA0KLWx3IHM2LCAxNDQgKCBzNSApDQotbXRoaSBzNiwgJGFjMw0KLWx3IHM2LCAxNDAgKCBzNSApDQotbXRsbyBzNiwgJGFjMw0KKwlsdwkJCXM2LCAxMzYoczUpDQorCW10aGkJCXM2LCAkYWMyDQorCWx3CQkJczYsIDEzMihzNSkNCisJbXRsbwkJczYsICRhYzINCiANCi0vKiBSZXN0b3JlIERTUENvbnRyb2wuICovDQotbHcgczYsIDE0OCAoIHM1ICkNCi13cmRzcCBzNg0KKwlsdwkJCXM2LCAxNDQoczUpDQorCW10aGkJCXM2LCAkYWMzDQorCWx3CQkJczYsIDE0MChzNSkNCisJbXRsbwkJczYsICRhYzMNCiANCi1sdyBzNiwgOCAoIHM1ICkNCi1tdGxvIHM2LCAkYWMwDQotbHcgczYsIDEyICggczUgKQ0KLW10aGkgczYsICRhYzANCi1sdyAkMSwgMTYgKCBzNSApDQorCS8qIFJlc3RvcmUgRFNQQ29udHJvbC4gKi8NCisJbHcJCQlzNiwgMTQ4KHM1KQ0KKwl3cmRzcAkJczYNCiANCi0vKiBzNiBpcyBsb2FkZWQgYXMgaXQgd2FzIHVzZWQgYXMgYSBzY3JhdGNoIHJlZ2lzdGVyIGFuZCB0aGVyZWZvcmUgc2F2ZWQNCi0gKiBhcyBwYXJ0IG9mIHRoZSBpbnRlcnJ1cHQgY29udGV4dC4gKi8NCi1sdyBzNywgNDggKCBzNSApDQotbHcgczYsIDQ0ICggczUgKQ0KLWx3IHYwLCA1MiAoIHM1ICkNCi1sdyB2MSwgNTYgKCBzNSApDQotbHcgYTAsIDYwICggczUgKQ0KLWx3IGExLCA2NCAoIHM1ICkNCi1sdyBhMiwgNjggKCBzNSApDQotbHcgYTMsIDcyICggczUgKQ0KLWx3IHQwLCA3NiAoIHM1ICkNCi1sdyB0MSwgODAgKCBzNSApDQotbHcgdDIsIDg0ICggczUgKQ0KLWx3IHQzLCA4OCAoIHM1ICkNCi1sdyB0NCwgOTIgKCBzNSApDQotbHcgdDUsIDk2ICggczUgKQ0KLWx3IHQ2LCAxMDAgKCBzNSApDQotbHcgdDcsIDEwNCAoIHM1ICkNCi1sdyB0OCwgMTA4ICggczUgKQ0KLWx3IHQ5LCAxMTIgKCBzNSApDQotbHcgczgsIDExNiAoIHM1ICkNCi1sdyByYSwgMTIwICggczUgKQ0KKwlsdwkJCXM2LCA4KHM1KQ0KKwltdGxvCQlzNiwgJGFjMA0KKwlsdwkJCXM2LCAxMihzNSkNCisJbXRoaQkJczYsICRhYzANCisJbHcJCQkkMSwgMTYoczUpDQogDQotLyogUHJvdGVjdCBhY2Nlc3MgdG8gdGhlIGsgcmVnaXN0ZXJzLCBhbmQgb3RoZXJzLiAqLw0KLWRpDQotZWhiDQorCS8qIHM2IGlzIGxvYWRlZCBhcyBpdCB3YXMgdXNlZCBhcyBhIHNjcmF0Y2ggcmVnaXN0ZXIgYW5kIHRoZXJlZm9yZSBzYXZlZA0KKwlhcyBwYXJ0IG9mIHRoZSBpbnRlcnJ1cHQgY29udGV4dC4gKi8NCisJbHcJCQlzNywgNDgoczUpDQorCWx3CQkJczYsIDQ0KHM1KQ0KKwlsdwkJCXYwLCA1MihzNSkNCisJbHcJCQl2MSwgNTYoczUpDQorCWx3CQkJYTAsIDYwKHM1KQ0KKwlsdwkJCWExLCA2NChzNSkNCisJbHcJCQlhMiwgNjgoczUpDQorCWx3CQkJYTMsIDcyKHM1KQ0KKwlsdwkJCXQwLCA3NihzNSkNCisJbHcJCQl0MSwgODAoczUpDQorCWx3CQkJdDIsIDg0KHM1KQ0KKwlsdwkJCXQzLCA4OChzNSkNCisJbHcJCQl0NCwgOTIoczUpDQorCWx3CQkJdDUsIDk2KHM1KQ0KKwlsdwkJCXQ2LCAxMDAoczUpDQorCWx3CQkJdDcsIDEwNChzNSkNCisJbHcJCQl0OCwgMTA4KHM1KQ0KKwlsdwkJCXQ5LCAxMTIoczUpDQorCWx3CQkJczgsIDExNihzNSkNCisJbHcJCQlyYSwgMTIwKHM1KQ0KIA0KLS8qIERlY3JlbWVudCB0aGUgbmVzdGluZyBjb3VudC4gKi8NCi1sYSBrMCwgdXhJbnRlcnJ1cHROZXN0aW5nDQotbHcgazEsICggazAgKQ0KLWFkZGl1IGsxLCBrMSwgLTENCi1zdyBrMSwgMCAoIGswICkNCisJLyogUHJvdGVjdCBhY2Nlc3MgdG8gdGhlIGsgcmVnaXN0ZXJzLCBhbmQgb3RoZXJzLiAqLw0KKwlkaQ0KKwllaGINCiANCi0jaWYgKCBfX21pcHNfaGFyZF9mbG9hdCA9PSAxICkgJiYgKCBjb25maWdVU0VfVEFTS19GUFVfU1VQUE9SVCA9PSAxICkNCi0gICAgLyogSWYgdGhlIG5lc3RpbmcgY291bnQgaXMgbm93IHplcm8gdGhlbiB0aGUgRlBVIGNvbnRleHQgbWF5IGJlIHJlc3RvcmVkLiAqLw0KLSAgICBibmUgazEsIHplcm8sIDFmDQotICAgIG5vcA0KKwkvKiBEZWNyZW1lbnQgdGhlIG5lc3RpbmcgY291bnQuICovDQorCWxhCQkJazAsIHV4SW50ZXJydXB0TmVzdGluZw0KKwlsdwkJCWsxLCAoazApDQorCWFkZGl1CQlrMSwgazEsIC0xDQorCXN3CQkJazEsIDAoazApDQogDQotLyogUmVzdG9yZSB0aGUgdmFsdWUgb2YgdWxUYXNrSGFzRlBVQ29udGV4dCAqLw0KLSAgICBsYSBrMCwgdWxUYXNrSGFzRlBVQ29udGV4dA0KLSAgICBsdyBrMSwgMCAoIHM1ICkNCi0gICAgc3cgazEsIDAgKCBrMCApDQorCSNpZiAoIF9fbWlwc19oYXJkX2Zsb2F0ID09IDEgKSAmJiAoIGNvbmZpZ1VTRV9UQVNLX0ZQVV9TVVBQT1JUID09IDEgKQ0KKwkJLyogSWYgdGhlIG5lc3RpbmcgY291bnQgaXMgbm93IHplcm8gdGhlbiB0aGUgRlBVIGNvbnRleHQgbWF5IGJlIHJlc3RvcmVkLiAqLw0KKwkJYm5lCQkJazEsIHplcm8sIDFmDQorCQlub3ANCiANCi0vKiBJZiB0aGUgdGFzayBkb2VzIG5vdCBoYXZlIGFuIEZQVSBjb250ZXh0IHRoZW4gYWRqdXN0IHRoZSBzdGFjayBub3JtYWxseS4gKi8NCi0gICAgYmVxIGsxLCB6ZXJvLCAxZg0KLSAgICBub3ANCisJCS8qIFJlc3RvcmUgdGhlIHZhbHVlIG9mIHVsVGFza0hhc0ZQVUNvbnRleHQgKi8NCisJCWxhCQkJazAsIHVsVGFza0hhc0ZQVUNvbnRleHQNCisJCWx3CQkJazEsIDAoczUpDQorCQlzdwkJCWsxLCAwKGswKQ0KIA0KLS8qIFJlc3RvcmUgdGhlIFNUQVRVUyBhbmQgRVBDIHJlZ2lzdGVycyAqLw0KLSAgICBsdyBrMCwgcG9ydFNUQVRVU19TVEFDS19MT0NBVElPTiggczUgKQ0KLSAgICBsdyBrMSwgcG9ydEVQQ19TVEFDS19MT0NBVElPTiggczUgKQ0KKwkJLyogSWYgdGhlIHRhc2sgZG9lcyBub3QgaGF2ZSBhbiBGUFUgY29udGV4dCB0aGVuIGFkanVzdCB0aGUgc3RhY2sgbm9ybWFsbHkuICovDQorCQliZXEJCQlrMSwgemVybywgMWYNCisJCW5vcA0KIA0KLS8qIExlYXZlIHRoZSBzdGFjayBpbiBpdHMgb3JpZ2luYWwgc3RhdGUuICBGaXJzdCBsb2FkIHNwIGZyb20gczUsIHRoZW4NCi0gKiByZXN0b3JlIHM1IGZyb20gdGhlIHN0YWNrLiAqLw0KLSAgICBhZGQgc3AsIHplcm8sIHM1DQotICAgIGx3IHM1LCA0MCAoIHNwICkNCisJCS8qIFJlc3RvcmUgdGhlIFNUQVRVUyBhbmQgRVBDIHJlZ2lzdGVycyAqLw0KKwkJbHcJCQlrMCwgcG9ydFNUQVRVU19TVEFDS19MT0NBVElPTihzNSkNCisJCWx3CQkJazEsIHBvcnRFUENfU1RBQ0tfTE9DQVRJT04oczUpDQogDQotLyogQWRqdXN0IHRoZSBzdGFjayBwb2ludGVyIHRvIHJlbW92ZSB0aGUgRlBVIGNvbnRleHQgKi8NCi0gICAgYWRkaXUgc3AsIHNwLCBwb3J0RlBVX0NPTlRFWFRfU0laRQ0KLSAgICBiZXEgemVybywgemVybywgMmYNCi0gICAgbm9wDQorCQkvKiBMZWF2ZSB0aGUgc3RhY2sgaW4gaXRzIG9yaWdpbmFsIHN0YXRlLiAgRmlyc3QgbG9hZCBzcCBmcm9tIHM1LCB0aGVuDQorCQlyZXN0b3JlIHM1IGZyb20gdGhlIHN0YWNrLiAqLw0KKwkJYWRkCQkJc3AsIHplcm8sIHM1DQorCQlsdwkJCXM1LCA0MChzcCkNCiANCi0gICAgMSA6ICAgICAvKiBSZXN0b3JlIHRoZSBTVEFUVVMgYW5kIEVQQyByZWdpc3RlcnMgKi8NCi0gICAgbHcgazAsIHBvcnRTVEFUVVNfU1RBQ0tfTE9DQVRJT04oIHM1ICkNCi0gICAgbHcgazEsIHBvcnRFUENfU1RBQ0tfTE9DQVRJT04oIHM1ICkNCisJCS8qIEFkanVzdCB0aGUgc3RhY2sgcG9pbnRlciB0byByZW1vdmUgdGhlIEZQVSBjb250ZXh0ICovDQorCQlhZGRpdQkJc3AsIHNwLAlwb3J0RlBVX0NPTlRFWFRfU0laRQ0KKwkJYmVxCQkJemVybywgemVybywgMmYNCisJCW5vcA0KIA0KLS8qIExlYXZlIHRoZSBzdGFjayBpbiBpdHMgb3JpZ2luYWwgc3RhdGUuICBGaXJzdCBsb2FkIHNwIGZyb20gczUsIHRoZW4NCi0gKiByZXN0b3JlIHM1IGZyb20gdGhlIHN0YWNrLiAqLw0KLSAgICBhZGQgc3AsIHplcm8sIHM1DQotICAgIGx3IHM1LCA0MCAoIHNwICkNCisJCTE6ICAvKiBSZXN0b3JlIHRoZSBTVEFUVVMgYW5kIEVQQyByZWdpc3RlcnMgKi8NCisJCWx3CQkJazAsIHBvcnRTVEFUVVNfU1RBQ0tfTE9DQVRJT04oczUpDQorCQlsdwkJCWsxLCBwb3J0RVBDX1NUQUNLX0xPQ0FUSU9OKHM1KQ0KIA0KLSAgICAyIDogICAgIC8qIEFkanVzdCB0aGUgc3RhY2sgcG9pbnRlciAqLw0KLSAgICBhZGRpdSBzcCwgc3AsIHBvcnRDT05URVhUX1NJWkUNCisJCS8qIExlYXZlIHRoZSBzdGFjayBpbiBpdHMgb3JpZ2luYWwgc3RhdGUuICBGaXJzdCBsb2FkIHNwIGZyb20gczUsIHRoZW4NCisJCXJlc3RvcmUgczUgZnJvbSB0aGUgc3RhY2suICovDQorCQlhZGQJCQlzcCwgemVybywgczUNCisJCWx3CQkJczUsIDQwKHNwKQ0KIA0KLSNlbHNlIC8qIGlmICggX19taXBzX2hhcmRfZmxvYXQgPT0gMSApICYmICggY29uZmlnVVNFX1RBU0tfRlBVX1NVUFBPUlQgPT0gMSApICovDQorCQkyOiAgLyogQWRqdXN0IHRoZSBzdGFjayBwb2ludGVyICovDQorCQlhZGRpdQkJc3AsIHNwLCBwb3J0Q09OVEVYVF9TSVpFDQogDQotLyogUmVzdG9yZSB0aGUgZnJhbWUgd2hlbiB0aGVyZSBpcyBubyBoYXJkd2FyZSBGUCBzdXBwb3J0LiAqLw0KLSAgICBsdyBrMCwgcG9ydFNUQVRVU19TVEFDS19MT0NBVElPTiggczUgKQ0KLSAgICBsdyBrMSwgcG9ydEVQQ19TVEFDS19MT0NBVElPTiggczUgKQ0KKwkjZWxzZQ0KIA0KLS8qIExlYXZlIHRoZSBzdGFjayBpbiBpdHMgb3JpZ2luYWwgc3RhdGUuICBGaXJzdCBsb2FkIHNwIGZyb20gczUsIHRoZW4NCi0gKiByZXN0b3JlIHM1IGZyb20gdGhlIHN0YWNrLiAqLw0KLSAgICBhZGQgc3AsIHplcm8sIHM1DQotICAgIGx3IHM1LCA0MCAoIHNwICkNCisJCS8qIFJlc3RvcmUgdGhlIGZyYW1lIHdoZW4gdGhlcmUgaXMgbm8gaGFyZHdhcmUgRlAgc3VwcG9ydC4gKi8NCisJCWx3CQkJazAsIHBvcnRTVEFUVVNfU1RBQ0tfTE9DQVRJT04oczUpDQorCQlsdwkJCWsxLCBwb3J0RVBDX1NUQUNLX0xPQ0FUSU9OKHM1KQ0KIA0KLSAgICBhZGRpdSBzcCwgc3AsIHBvcnRDT05URVhUX1NJWkUNCisJCS8qIExlYXZlIHRoZSBzdGFjayBpbiBpdHMgb3JpZ2luYWwgc3RhdGUuICBGaXJzdCBsb2FkIHNwIGZyb20gczUsIHRoZW4NCisJCXJlc3RvcmUgczUgZnJvbSB0aGUgc3RhY2suICovDQorCQlhZGQJCQlzcCwgemVybywgczUNCisJCWx3CQkJczUsIDQwKHNwKQ0KIA0KLSNlbmRpZiAvLyAoIF9fbWlwc19oYXJkX2Zsb2F0ID09IDEgKSAmJiAoIGNvbmZpZ1VTRV9UQVNLX0ZQVV9TVVBQT1JUID09IDEgKQ0KKwkJYWRkaXUJCXNwLCBzcCwJcG9ydENPTlRFWFRfU0laRQ0KIA0KLW10YzAgazAsIF9DUDBfU1RBVFVTDQotbXRjMCBrMSwgX0NQMF9FUEMNCi1laGINCi1lcmV0DQotbm9wDQorCSNlbmRpZiAvLyAoIF9fbWlwc19oYXJkX2Zsb2F0ID09IDEgKSAmJiAoIGNvbmZpZ1VTRV9UQVNLX0ZQVV9TVVBQT1JUID09IDEgKQ0KIA0KLSAgIC5lbmRtDQorCW10YzAJCWswLCBfQ1AwX1NUQVRVUw0KKwltdGMwIAkJazEsIF9DUDBfRVBDDQorCWVoYg0KKwllcmV0DQorCW5vcA0KKw0KKwkuZW5kbQ0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL01QTEFCL1BJQzMyTVovcG9ydC5jIGIvcG9ydGFibGUvTVBMQUIvUElDMzJNWi9wb3J0LmMKaW5kZXggNDQ0YWFlYy4uMDI4ZDM1YiAxMDA2NDQKLS0tIGEvcG9ydGFibGUvTVBMQUIvUElDMzJNWi9wb3J0LmMKKysrIGIvcG9ydGFibGUvTVBMQUIvUElDMzJNWi9wb3J0LmMKQEAgLTI2LDggKzI2LDggQEAKICAqLw0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0qIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBQSUMzMk1aIHBvcnQuDQotKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyAqIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBQSUMzMk1aIHBvcnQuDQorICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogTWljcm9jaGlwIHNwZWNpZmljIGhlYWRlcnMuICovDQogI2luY2x1ZGUgPHhjLmg+DQpAQCAtMzksMTAxICszOSw5OSBAQAogI2luY2x1ZGUgIkZyZWVSVE9TLmgiDQogI2luY2x1ZGUgInRhc2suaCINCiANCi0jaWYgIWRlZmluZWQoIF9fUElDMzJNWl9fICkNCisjaWYgIWRlZmluZWQoX19QSUMzMk1aX18pDQogICAgICNlcnJvciBUaGlzIHBvcnQgaXMgZGVzaWduZWQgdG8gd29yayB3aXRoIFhDMzIgb24gUElDMzJNWiBNQ1VzLiAgUGxlYXNlIHVwZGF0ZSB5b3VyIEMgY29tcGlsZXIgdmVyc2lvbiBvciBzZXR0aW5ncy4NCiAjZW5kaWYNCiANCi0jaWYgKCAoIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSA+PSAweDcgKSB8fCAoIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSA9PSAwICkgKQ0KLSAgICAjZXJyb3IgY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIG11c3QgYmUgbGVzcyB0aGFuIDcgYW5kIGdyZWF0ZXIgdGhhbiAwDQorI2lmKCAoIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSA+PSAweDcgKSB8fCAoIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSA9PSAwICkgKQ0KKwkjZXJyb3IgY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIG11c3QgYmUgbGVzcyB0aGFuIDcgYW5kIGdyZWF0ZXIgdGhhbiAwDQogI2VuZGlmDQogDQogLyogSGFyZHdhcmUgc3BlY2lmaWNzLiAqLw0KLSNkZWZpbmUgcG9ydFRJTUVSX1BSRVNDQUxFICAgIDgNCi0jZGVmaW5lIHBvcnRQUkVTQ0FMRV9CSVRTICAgICAxDQorI2RlZmluZSBwb3J0VElNRVJfUFJFU0NBTEUJOA0KKyNkZWZpbmUgcG9ydFBSRVNDQUxFX0JJVFMJMQ0KIA0KIC8qIEJpdHMgd2l0aGluIHZhcmlvdXMgcmVnaXN0ZXJzLiAqLw0KLSNkZWZpbmUgcG9ydElFX0JJVCAgICAgICAgICAgICggMHgwMDAwMDAwMSApDQotI2RlZmluZSBwb3J0RVhMX0JJVCAgICAgICAgICAgKCAweDAwMDAwMDAyICkNCi0jZGVmaW5lIHBvcnRNWF9CSVQgICAgICAgICAgICAoIDB4MDEwMDAwMDAgKSAgICAgICAvKiBBbGxvdyBhY2Nlc3MgdG8gRFNQIGluc3RydWN0aW9ucy4gKi8NCi0jZGVmaW5lIHBvcnRDVTFfQklUICAgICAgICAgICAoIDB4MjAwMDAwMDAgKSAgICAgICAvKiBlbmFibGUgQ1AxIGZvciBwYXJ0cyB3aXRoIGhhcmR3YXJlLiAqLw0KLSNkZWZpbmUgcG9ydEZSX0JJVCAgICAgICAgICAgICggMHgwNDAwMDAwMCApICAgICAgIC8qIEVuYWJsZSA2NCBiaXQgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzLiAqLw0KKyNkZWZpbmUgcG9ydElFX0JJVAkJCQkJKCAweDAwMDAwMDAxICkNCisjZGVmaW5lIHBvcnRFWExfQklUCQkJCQkoIDB4MDAwMDAwMDIgKQ0KKyNkZWZpbmUgcG9ydE1YX0JJVAkJCQkJKCAweDAxMDAwMDAwICkgLyogQWxsb3cgYWNjZXNzIHRvIERTUCBpbnN0cnVjdGlvbnMuICovDQorI2RlZmluZSBwb3J0Q1UxX0JJVAkJCQkJKCAweDIwMDAwMDAwICkgLyogZW5hYmxlIENQMSBmb3IgcGFydHMgd2l0aCBoYXJkd2FyZS4gKi8NCisjZGVmaW5lIHBvcnRGUl9CSVQJCQkJCSggMHgwNDAwMDAwMCApIC8qIEVuYWJsZSA2NCBiaXQgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzLiAqLw0KIA0KIC8qIEJpdHMgd2l0aGluIHRoZSBDQVVTRSByZWdpc3Rlci4gKi8NCi0jZGVmaW5lIHBvcnRDT1JFX1NXXzAgICAgICAgICAoIDB4MDAwMDAxMDAgKQ0KLSNkZWZpbmUgcG9ydENPUkVfU1dfMSAgICAgICAgICggMHgwMDAwMDIwMCApDQorI2RlZmluZSBwb3J0Q09SRV9TV18wCQkJCSggMHgwMDAwMDEwMCApDQorI2RlZmluZSBwb3J0Q09SRV9TV18xCQkJCSggMHgwMDAwMDIwMCApDQogDQogLyogVGhlIEVYTCBiaXQgaXMgc2V0IHRvIGVuc3VyZSBpbnRlcnJ1cHRzIGRvIG5vdCBvY2N1ciB3aGlsZSB0aGUgY29udGV4dCBvZg0KLSAqIHRoZSBmaXJzdCB0YXNrIGlzIGJlaW5nIHJlc3RvcmVkLiAqLw0KK3RoZSBmaXJzdCB0YXNrIGlzIGJlaW5nIHJlc3RvcmVkLiAqLw0KICNpZiAoIF9fbWlwc19oYXJkX2Zsb2F0ID09IDEgKQ0KLSAgICAjZGVmaW5lIHBvcnRJTklUSUFMX1NSICAgICggcG9ydElFX0JJVCB8IHBvcnRFWExfQklUIHwgcG9ydE1YX0JJVCB8IHBvcnRGUl9CSVQgfCBwb3J0Q1UxX0JJVCApDQorICAgICNkZWZpbmUgcG9ydElOSVRJQUxfU1IJCQkoIHBvcnRJRV9CSVQgfCBwb3J0RVhMX0JJVCB8IHBvcnRNWF9CSVQgfCBwb3J0RlJfQklUIHwgcG9ydENVMV9CSVQgKQ0KICNlbHNlDQotICAgICNkZWZpbmUgcG9ydElOSVRJQUxfU1IgICAgKCBwb3J0SUVfQklUIHwgcG9ydEVYTF9CSVQgfCBwb3J0TVhfQklUICkNCisgICAgI2RlZmluZSBwb3J0SU5JVElBTF9TUgkJCSggcG9ydElFX0JJVCB8IHBvcnRFWExfQklUIHwgcG9ydE1YX0JJVCApDQogI2VuZGlmDQogDQogLyogVGhlIGluaXRpYWwgdmFsdWUgdG8gc3RvcmUgaW50byB0aGUgRlBVIHN0YXR1cyBhbmQgY29udHJvbCByZWdpc3Rlci4gVGhpcyBpcw0KLSAqIG9ubHkgdXNlZCBvbiBwYXJ0cyB0aGF0IHN1cHBvcnQgYSBoYXJkd2FyZSBGUFUuICovDQotI2RlZmluZSBwb3J0SU5JVElBTF9GUFNDUiAgICAoIDB4MTAwMDAwMCApICAgICAgLyogSGlnaCBwZXJmIG9uIGRlbm9ybWFsIG9wcyAqLw0KKyBvbmx5IHVzZWQgb24gcGFydHMgdGhhdCBzdXBwb3J0IGEgaGFyZHdhcmUgRlBVLiAqLw0KKyNkZWZpbmUgcG9ydElOSVRJQUxfRlBTQ1IJCQkoMHgxMDAwMDAwKSAvKiBIaWdoIHBlcmYgb24gZGVub3JtYWwgb3BzICovDQogDQogDQogLyoNCi0gKiBCeSBkZWZhdWx0IHBvcnQuYyBnZW5lcmF0ZXMgaXRzIHRpY2sgaW50ZXJydXB0IGZyb20gVElNRVIxLiAgVGhlIHVzZXIgY2FuDQotICogb3ZlcnJpZGUgdGhpcyBiZWhhdmlvdXIgYnk6DQotICogIDE6IFByb3ZpZGluZyB0aGVpciBvd24gaW1wbGVtZW50YXRpb24gb2YgdkFwcGxpY2F0aW9uU2V0dXBUaWNrVGltZXJJbnRlcnJ1cHQoKSwNCi0gKiAgICAgd2hpY2ggaXMgdGhlIGZ1bmN0aW9uIHRoYXQgY29uZmlndXJlcyB0aGUgdGltZXIuICBUaGUgZnVuY3Rpb24gaXMgZGVmaW5lZA0KLSAqICAgICBhcyBhIHdlYWsgc3ltYm9sIGluIHRoaXMgZmlsZSBzbyBpZiB0aGUgc2FtZSBmdW5jdGlvbiBuYW1lIGlzIHVzZWQgaW4gdGhlDQotICogICAgIGFwcGxpY2F0aW9uIGNvZGUgdGhlbiB0aGUgdmVyc2lvbiBpbiB0aGUgYXBwbGljYXRpb24gY29kZSB3aWxsIGJlIGxpbmtlZA0KLSAqICAgICBpbnRvIHRoZSBhcHBsaWNhdGlvbiBpbiBwcmVmZXJlbmNlIHRvIHRoZSB2ZXJzaW9uIGRlZmluZWQgaW4gdGhpcyBmaWxlLg0KLSAqICAyOiBEZWZpbmUgY29uZmlnVElDS19JTlRFUlJVUFRfVkVDVE9SIHRvIHRoZSB2ZWN0b3IgbnVtYmVyIG9mIHRoZSB0aW1lciB1c2VkDQotICogICAgIHRvIGdlbmVyYXRlIHRoZSB0aWNrIGludGVycnVwdC4gIEZvciBleGFtcGxlLCB3aGVuIHRpbWVyIDEgaXMgdXNlZCB0aGVuDQotICogICAgIGNvbmZpZ1RJQ0tfSU5URVJSVVBUX1ZFQ1RPUiBpcyBzZXQgdG8gX1RJTUVSXzFfVkVDVE9SLg0KLSAqICAgICBjb25maWdUSUNLX0lOVEVSUlVQVF9WRUNUT1Igc2hvdWxkIGJlIGRlZmluZWQgaW4gRnJlZVJUT1NDb25maWcuaC4NCi0gKiAgMzogRGVmaW5lIGNvbmZpZ0NMRUFSX1RJQ0tfVElNRVJfSU5URVJSVVBUKCkgdG8gY2xlYXIgdGhlIGludGVycnVwdCBpbiB0aGUNCi0gKiAgICAgdGltZXIgdXNlZCB0byBnZW5lcmF0ZSB0aGUgdGljayBpbnRlcnJ1cHQuICBGb3IgZXhhbXBsZSwgd2hlbiB0aW1lciAxIGlzDQotICogICAgIHVzZWQgY29uZmlnQ0xFQVJfVElDS19USU1FUl9JTlRFUlJVUFQoKSBpcyBkZWZpbmVkIHRvDQotICogICAgIElGUzBDTFIgPSBfSUZTMF9UMUlGX01BU0suDQotICovDQorQnkgZGVmYXVsdCBwb3J0LmMgZ2VuZXJhdGVzIGl0cyB0aWNrIGludGVycnVwdCBmcm9tIFRJTUVSMS4gIFRoZSB1c2VyIGNhbg0KK292ZXJyaWRlIHRoaXMgYmVoYXZpb3VyIGJ5Og0KKwkxOiBQcm92aWRpbmcgdGhlaXIgb3duIGltcGxlbWVudGF0aW9uIG9mIHZBcHBsaWNhdGlvblNldHVwVGlja1RpbWVySW50ZXJydXB0KCksDQorCSAgIHdoaWNoIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGNvbmZpZ3VyZXMgdGhlIHRpbWVyLiAgVGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQNCisJICAgYXMgYSB3ZWFrIHN5bWJvbCBpbiB0aGlzIGZpbGUgc28gaWYgdGhlIHNhbWUgZnVuY3Rpb24gbmFtZSBpcyB1c2VkIGluIHRoZQ0KKwkgICBhcHBsaWNhdGlvbiBjb2RlIHRoZW4gdGhlIHZlcnNpb24gaW4gdGhlIGFwcGxpY2F0aW9uIGNvZGUgd2lsbCBiZSBsaW5rZWQNCisJICAgaW50byB0aGUgYXBwbGljYXRpb24gaW4gcHJlZmVyZW5jZSB0byB0aGUgdmVyc2lvbiBkZWZpbmVkIGluIHRoaXMgZmlsZS4NCisJMjogRGVmaW5lIGNvbmZpZ1RJQ0tfSU5URVJSVVBUX1ZFQ1RPUiB0byB0aGUgdmVjdG9yIG51bWJlciBvZiB0aGUgdGltZXIgdXNlZA0KKwkgICB0byBnZW5lcmF0ZSB0aGUgdGljayBpbnRlcnJ1cHQuICBGb3IgZXhhbXBsZSwgd2hlbiB0aW1lciAxIGlzIHVzZWQgdGhlbg0KKwkgICBjb25maWdUSUNLX0lOVEVSUlVQVF9WRUNUT1IgaXMgc2V0IHRvIF9USU1FUl8xX1ZFQ1RPUi4NCisJICAgY29uZmlnVElDS19JTlRFUlJVUFRfVkVDVE9SIHNob3VsZCBiZSBkZWZpbmVkIGluIEZyZWVSVE9TQ29uZmlnLmguDQorCTM6IERlZmluZSBjb25maWdDTEVBUl9USUNLX1RJTUVSX0lOVEVSUlVQVCgpIHRvIGNsZWFyIHRoZSBpbnRlcnJ1cHQgaW4gdGhlDQorCSAgIHRpbWVyIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRpY2sgaW50ZXJydXB0LiAgRm9yIGV4YW1wbGUsIHdoZW4gdGltZXIgMSBpcw0KKwkgICB1c2VkIGNvbmZpZ0NMRUFSX1RJQ0tfVElNRVJfSU5URVJSVVBUKCkgaXMgZGVmaW5lZCB0bw0KKwkgICBJRlMwQ0xSID0gX0lGUzBfVDFJRl9NQVNLLg0KKyovDQogI2lmbmRlZiBjb25maWdUSUNLX0lOVEVSUlVQVF9WRUNUT1INCi0gICAgI2RlZmluZSBjb25maWdUSUNLX0lOVEVSUlVQVF9WRUNUT1IgICAgX1RJTUVSXzFfVkVDVE9SDQotICAgICNkZWZpbmUgY29uZmlnQ0xFQVJfVElDS19USU1FUl9JTlRFUlJVUFQoKSAgICBJRlMwQ0xSID0gX0lGUzBfVDFJRl9NQVNLDQorCSNkZWZpbmUgY29uZmlnVElDS19JTlRFUlJVUFRfVkVDVE9SIF9USU1FUl8xX1ZFQ1RPUg0KKwkjZGVmaW5lIGNvbmZpZ0NMRUFSX1RJQ0tfVElNRVJfSU5URVJSVVBUKCkgSUZTMENMUiA9IF9JRlMwX1QxSUZfTUFTSw0KICNlbHNlDQotICAgICNpZm5kZWYgY29uZmlnQ0xFQVJfVElDS19USU1FUl9JTlRFUlJVUFQNCi0gICAgICAgICNlcnJvciBJZiBjb25maWdUSUNLX0lOVEVSUlVQVF9WRUNUT1IgaXMgZGVmaW5lZCBpbiBhcHBsaWNhdGlvbiBjb2RlIHRoZW4gY29uZmlnQ0xFQVJfVElDS19USU1FUl9JTlRFUlJVUFQgbXVzdCBhbHNvIGJlIGRlZmluZWQgaW4gYXBwbGljYXRpb24gY29kZS4NCi0gICAgI2VuZGlmDQorCSNpZm5kZWYgY29uZmlnQ0xFQVJfVElDS19USU1FUl9JTlRFUlJVUFQNCisJCSNlcnJvciBJZiBjb25maWdUSUNLX0lOVEVSUlVQVF9WRUNUT1IgaXMgZGVmaW5lZCBpbiBhcHBsaWNhdGlvbiBjb2RlIHRoZW4gY29uZmlnQ0xFQVJfVElDS19USU1FUl9JTlRFUlJVUFQgbXVzdCBhbHNvIGJlIGRlZmluZWQgaW4gYXBwbGljYXRpb24gY29kZS4NCisJI2VuZGlmDQogI2VuZGlmDQogDQogLyogTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSBwcmUtbG9hZGluZyBvZiB0aGUgaW5pdGlhbCBSQSB3aXRoIHRoZSBhZGRyZXNzIG9mDQotICogcHJ2VGFza0V4aXRFcnJvcigpIGluIGNhc2UgaXQgbWVzc2VzIHVwIHVud2luZGluZyBvZiB0aGUgc3RhY2sgaW4gdGhlDQotICogZGVidWdnZXIgLSBpbiB3aGljaCBjYXNlIGNvbmZpZ1RBU0tfUkVUVVJOX0FERFJFU1MgY2FuIGJlIGRlZmluZWQgYXMgMCAoTlVMTCkuICovDQorcHJ2VGFza0V4aXRFcnJvcigpIGluIGNhc2UgaXQgbWVzc2VzIHVwIHVud2luZGluZyBvZiB0aGUgc3RhY2sgaW4gdGhlDQorZGVidWdnZXIgLSBpbiB3aGljaCBjYXNlIGNvbmZpZ1RBU0tfUkVUVVJOX0FERFJFU1MgY2FuIGJlIGRlZmluZWQgYXMgMCAoTlVMTCkuICovDQogI2lmZGVmIGNvbmZpZ1RBU0tfUkVUVVJOX0FERFJFU1MNCi0gICAgI2RlZmluZSBwb3J0VEFTS19SRVRVUk5fQUREUkVTUyAgICBjb25maWdUQVNLX1JFVFVSTl9BRERSRVNTDQorCSNkZWZpbmUgcG9ydFRBU0tfUkVUVVJOX0FERFJFU1MJY29uZmlnVEFTS19SRVRVUk5fQUREUkVTUw0KICNlbHNlDQotICAgICNkZWZpbmUgcG9ydFRBU0tfUkVUVVJOX0FERFJFU1MgICAgcHJ2VGFza0V4aXRFcnJvcg0KKwkjZGVmaW5lIHBvcnRUQVNLX1JFVFVSTl9BRERSRVNTCXBydlRhc2tFeGl0RXJyb3INCiAjZW5kaWYNCiANCiAvKiBTZXQgY29uZmlnQ0hFQ0tfRk9SX1NUQUNLX09WRVJGTE9XIHRvIDMgdG8gYWRkIElTUiBzdGFjayBjaGVja2luZyB0byB0YXNrDQotICogc3RhY2sgY2hlY2tpbmcuICBBIHByb2JsZW0gaW4gdGhlIElTUiBzdGFjayB3aWxsIHRyaWdnZXIgYW4gYXNzZXJ0LCBub3QgY2FsbCB0aGUNCi0gKiBzdGFjayBvdmVyZmxvdyBob29rIGZ1bmN0aW9uIChiZWNhdXNlIHRoZSBzdGFjayBvdmVyZmxvdyBob29rIGlzIHNwZWNpZmljIHRvIGENCi0gKiB0YXNrIHN0YWNrLCBub3QgdGhlIElTUiBzdGFjaykuICovDQotI2lmICggY29uZmlnQ0hFQ0tfRk9SX1NUQUNLX09WRVJGTE9XID4gMiApDQorc3RhY2sgY2hlY2tpbmcuICBBIHByb2JsZW0gaW4gdGhlIElTUiBzdGFjayB3aWxsIHRyaWdnZXIgYW4gYXNzZXJ0LCBub3QgY2FsbCB0aGUNCitzdGFjayBvdmVyZmxvdyBob29rIGZ1bmN0aW9uIChiZWNhdXNlIHRoZSBzdGFjayBvdmVyZmxvdyBob29rIGlzIHNwZWNpZmljIHRvIGENCit0YXNrIHN0YWNrLCBub3QgdGhlIElTUiBzdGFjaykuICovDQorI2lmKCBjb25maWdDSEVDS19GT1JfU1RBQ0tfT1ZFUkZMT1cgPiAyICkNCiANCi0vKiBEb24ndCB1c2UgMHhhNSBhcyB0aGUgc3RhY2sgZmlsbCBieXRlcyBhcyB0aGF0IGlzIHVzZWQgYnkgdGhlIGtlcm5lcmwgZm9yDQotICogdGhlIHRhc2sgc3RhY2tzLCBhbmQgc28gd2lsbCBsZWdpdGltYXRlbHkgYXBwZWFyIGluIG1hbnkgcG9zaXRpb25zIHdpdGhpbg0KLSAqIHRoZSBJU1Igc3RhY2suICovDQotICAgICNkZWZpbmUgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUgICAgMHhlZQ0KKwkvKiBEb24ndCB1c2UgMHhhNSBhcyB0aGUgc3RhY2sgZmlsbCBieXRlcyBhcyB0aGF0IGlzIHVzZWQgYnkgdGhlIGtlcm5lcmwgZm9yDQorCXRoZSB0YXNrIHN0YWNrcywgYW5kIHNvIHdpbGwgbGVnaXRpbWF0ZWx5IGFwcGVhciBpbiBtYW55IHBvc2l0aW9ucyB3aXRoaW4NCisJdGhlIElTUiBzdGFjay4gKi8NCisJI2RlZmluZSBwb3J0SVNSX1NUQUNLX0ZJTExfQllURQkweGVlDQogDQotICAgIHN0YXRpYyBjb25zdCB1aW50OF90IHVjRXhwZWN0ZWRTdGFja0J5dGVzW10gPQ0KLSAgICB7DQotICAgICAgICBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgXA0KLSAgICAgICAgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIFwNCi0gICAgICAgIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBcDQotICAgICAgICBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgXA0KLSAgICAgICAgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUNCi0gICAgfTsgXA0KKwlzdGF0aWMgY29uc3QgdWludDhfdCB1Y0V4cGVjdGVkU3RhY2tCeXRlc1tdID0gew0KKwkJCQkJCQkJCXBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLAkJXA0KKwkJCQkJCQkJCXBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLAkJXA0KKwkJCQkJCQkJCXBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLAkJXA0KKwkJCQkJCQkJCXBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLAkJXA0KKwkJCQkJCQkJCXBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFIH07CVwNCiANCi0gICAgI2RlZmluZSBwb3J0Q0hFQ0tfSVNSX1NUQUNLKCkgICAgY29uZmlnQVNTRVJUKCAoIG1lbWNtcCggKCB2b2lkICogKSB4SVNSU3RhY2ssICggdm9pZCAqICkgdWNFeHBlY3RlZFN0YWNrQnl0ZXMsIHNpemVvZiggdWNFeHBlY3RlZFN0YWNrQnl0ZXMgKSApID09IDAgKSApDQotI2Vsc2UgLyogaWYgKCBjb25maWdDSEVDS19GT1JfU1RBQ0tfT1ZFUkZMT1cgPiAyICkgKi8NCi0gICAgLyogRGVmaW5lIHRoZSBmdW5jdGlvbiBhd2F5LiAqLw0KLSAgICAjZGVmaW5lIHBvcnRDSEVDS19JU1JfU1RBQ0soKQ0KKwkjZGVmaW5lIHBvcnRDSEVDS19JU1JfU1RBQ0soKSBjb25maWdBU1NFUlQoICggbWVtY21wKCAoIHZvaWQgKiApIHhJU1JTdGFjaywgKCB2b2lkICogKSB1Y0V4cGVjdGVkU3RhY2tCeXRlcywgc2l6ZW9mKCB1Y0V4cGVjdGVkU3RhY2tCeXRlcyApICkgPT0gMCApICkNCisjZWxzZQ0KKwkvKiBEZWZpbmUgdGhlIGZ1bmN0aW9uIGF3YXkuICovDQorCSNkZWZpbmUgcG9ydENIRUNLX0lTUl9TVEFDSygpDQogI2VuZGlmIC8qIGNvbmZpZ0NIRUNLX0ZPUl9TVEFDS19PVkVSRkxPVyA+IDIgKi8NCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCkBAIC0xNDYsMjUgKzE0NCwyNSBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogUmVjb3JkcyB0aGUgaW50ZXJydXB0IG5lc3RpbmcgZGVwdGguICBUaGlzIGlzIGluaXRpYWxpc2VkIHRvIG9uZSBhcyBpdCBpcw0KLSAqIGRlY3JlbWVudGVkIHRvIDAgd2hlbiB0aGUgZmlyc3QgdGFzayBzdGFydHMuICovDQorZGVjcmVtZW50ZWQgdG8gMCB3aGVuIHRoZSBmaXJzdCB0YXNrIHN0YXJ0cy4gKi8NCiB2b2xhdGlsZSBVQmFzZVR5cGVfdCB1eEludGVycnVwdE5lc3RpbmcgPSAweDAxOw0KIA0KIC8qIFN0b3JlcyB0aGUgdGFzayBzdGFjayBwb2ludGVyIHdoZW4gYSBzd2l0Y2ggaXMgbWFkZSB0byB1c2UgdGhlIHN5c3RlbSBzdGFjay4gKi8NCiBVQmFzZVR5cGVfdCB1eFNhdmVkVGFza1N0YWNrUG9pbnRlciA9IDA7DQogDQogLyogVGhlIHN0YWNrIHVzZWQgYnkgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZXMgdGhhdCBjYXVzZSBhIGNvbnRleHQgc3dpdGNoLiAqLw0KLV9fYXR0cmlidXRlX18oICggYWxpZ25lZCggOCApICkgKSBTdGFja1R5cGVfdCB4SVNSU3RhY2tbIGNvbmZpZ0lTUl9TVEFDS19TSVpFIF0gPSB7IDAgfTsNCitfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCg4KSkpIFN0YWNrVHlwZV90IHhJU1JTdGFja1sgY29uZmlnSVNSX1NUQUNLX1NJWkUgXSA9IHsgMCB9Ow0KIA0KIC8qIFRoZSB0b3Agb2Ygc3RhY2sgdmFsdWUgZW5zdXJlcyB0aGVyZSBpcyBlbm91Z2ggc3BhY2UgdG8gc3RvcmUgNiByZWdpc3RlcnMgb24NCi0gKiB0aGUgY2FsbGVycyBzdGFjaywgYXMgc29tZSBmdW5jdGlvbnMgc2VlbSB0byB3YW50IHRvIGRvIHRoaXMuICA4IGJ5dGUgYWxpZ25tZW50DQotICogaXMgcmVxdWlyZWQgdG8gYWxsb3cgZG91YmxlIHdvcmQgZmxvYXRpbmcgcG9pbnQgc3RhY2sgcHVzaGVzIGdlbmVyYXRlZCBieSB0aGUNCi0gKiBjb21waWxlci4gKi8NCit0aGUgY2FsbGVycyBzdGFjaywgYXMgc29tZSBmdW5jdGlvbnMgc2VlbSB0byB3YW50IHRvIGRvIHRoaXMuICA4IGJ5dGUgYWxpZ25tZW50DQoraXMgcmVxdWlyZWQgdG8gYWxsb3cgZG91YmxlIHdvcmQgZmxvYXRpbmcgcG9pbnQgc3RhY2sgcHVzaGVzIGdlbmVyYXRlZCBieSB0aGUNCitjb21waWxlci4gKi8NCiBjb25zdCBTdGFja1R5cGVfdCAqIGNvbnN0IHhJU1JTdGFja1RvcCA9ICYoIHhJU1JTdGFja1sgKCBjb25maWdJU1JfU1RBQ0tfU0laRSAmIH5wb3J0QllURV9BTElHTk1FTlRfTUFTSyApIC0gOCBdICk7DQogDQogLyogU2F2ZWQgYXMgcGFydCBvZiB0aGUgdGFzayBjb250ZXh0LiBTZXQgdG8gcGRGQUxTRSBpZiB0aGUgdGFzayBkb2VzIG5vdA0KLSAqIHJlcXVpcmUgYW4gRlBVIGNvbnRleHQuICovDQorIHJlcXVpcmUgYW4gRlBVIGNvbnRleHQuICovDQogI2lmICggX19taXBzX2hhcmRfZmxvYXQgPT0gMSApICYmICggY29uZmlnVVNFX1RBU0tfRlBVX1NVUFBPUlQgPT0gMSApDQotICAgIHVpbnQzMl90IHVsVGFza0hhc0ZQVUNvbnRleHQgPSAwOw0KKwl1aW50MzJfdCB1bFRhc2tIYXNGUFVDb250ZXh0ID0gMDsNCiAjZW5kaWYNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCkBAIC0xNzIsNTggKzE3MCw1MyBAQAogLyoNCiAgKiBTZWUgaGVhZGVyIGZpbGUgZm9yIGRlc2NyaXB0aW9uLg0KICAqLw0KLVN0YWNrVHlwZV90ICogcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqIHB4VG9wT2ZTdGFjaywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFza0Z1bmN0aW9uX3QgcHhDb2RlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICogcHZQYXJhbWV0ZXJzICkNCitTdGFja1R5cGVfdCAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqcHhUb3BPZlN0YWNrLCBUYXNrRnVuY3Rpb25fdCBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycyApDQogew0KLSAgICAvKiBFbnN1cmUgOCBieXRlIGFsaWdubWVudCBpcyBtYWludGFpbmVkIHdoZW4gbGVhdmluZyB0aGlzIGZ1bmN0aW9uLiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIEVuc3VyZSA4IGJ5dGUgYWxpZ25tZW50IGlzIG1haW50YWluZWQgd2hlbiBsZWF2aW5nIHRoaXMgZnVuY3Rpb24uICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweERFQURCRUVGOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IChTdGFja1R5cGVfdCkgMHhERUFEQkVFRjsNCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMjM0NTY3ODsgLyogV29yZCB0byB3aGljaCB0aGUgc3RhY2sgcG9pbnRlciB3aWxsIGJlIGxlZnQgcG9pbnRpbmcgYWZ0ZXIgY29udGV4dCByZXN0b3JlLiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IChTdGFja1R5cGVfdCkgMHgxMjM0NTY3ODsJLyogV29yZCB0byB3aGljaCB0aGUgc3RhY2sgcG9pbnRlciB3aWxsIGJlIGxlZnQgcG9pbnRpbmcgYWZ0ZXIgY29udGV4dCByZXN0b3JlLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBfQ1AwX0dFVF9DQVVTRSgpOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IChTdGFja1R5cGVfdCkgX0NQMF9HRVRfQ0FVU0UoKTsNCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcG9ydElOSVRJQUxfU1I7IC8qIENQMF9TVEFUVVMgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoU3RhY2tUeXBlX3QpIHBvcnRJTklUSUFMX1NSOy8qIENQMF9TVEFUVVMgKi8NCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHhDb2RlOyAvKiBDUDBfRVBDICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKFN0YWNrVHlwZV90KSBweENvZGU7IAkJLyogQ1AwX0VQQyAqLw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAwMDAwMDAwOyAgICAgICAgICAgICAgLyogRFNQQ29udHJvbCAqLw0KLSAgICBweFRvcE9mU3RhY2sgLT0gNzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbmNsdWRlcyBzcGFjZSBmb3IgQUMxIC0gQUMzLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKFN0YWNrVHlwZV90KSAweDAwMDAwMDAwOwkvKiBEU1BDb250cm9sICovDQorCXB4VG9wT2ZTdGFjayAtPSA3OyAgCQkJCQkJLyogSW5jbHVkZXMgc3BhY2UgZm9yIEFDMSAtIEFDMy4gKi8NCiANCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwb3J0VEFTS19SRVRVUk5fQUREUkVTUzsgLyogcmEgKi8NCi0gICAgcHhUb3BPZlN0YWNrIC09IDE1Ow0KKwkqcHhUb3BPZlN0YWNrID0gKFN0YWNrVHlwZV90KSBwb3J0VEFTS19SRVRVUk5fQUREUkVTUzsJLyogcmEgKi8NCisJcHhUb3BPZlN0YWNrIC09IDE1Ow0KIA0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB2UGFyYW1ldGVyczsgLyogUGFyYW1ldGVycyB0byBwYXNzIGluLiAqLw0KLSAgICBweFRvcE9mU3RhY2sgLT0gMTU7DQorCSpweFRvcE9mU3RhY2sgPSAoU3RhY2tUeXBlX3QpIHB2UGFyYW1ldGVyczsgLyogUGFyYW1ldGVycyB0byBwYXNzIGluLiAqLw0KKwlweFRvcE9mU3RhY2sgLT0gMTU7DQogDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcGRGQUxTRTsgLypieSBkZWZhdWx0IGRpc2FibGUgRlBVIGNvbnRleHQgc2F2ZSBvbiBwYXJ0cyB3aXRoIEZQVSAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKFN0YWNrVHlwZV90KSBwZEZBTFNFOyAvKmJ5IGRlZmF1bHQgZGlzYWJsZSBGUFUgY29udGV4dCBzYXZlIG9uIHBhcnRzIHdpdGggRlBVICovDQogDQotICAgIHJldHVybiBweFRvcE9mU3RhY2s7DQorCXJldHVybiBweFRvcE9mU3RhY2s7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHN0YXRpYyB2b2lkIHBydlRhc2tFeGl0RXJyb3IoIHZvaWQgKQ0KIHsNCi0gICAgLyogQSBmdW5jdGlvbiB0aGF0IGltcGxlbWVudHMgYSB0YXNrIG11c3Qgbm90IGV4aXQgb3IgYXR0ZW1wdCB0byByZXR1cm4gdG8NCi0gICAgICogaXRzIGNhbGxlciBhcyB0aGVyZSBpcyBub3RoaW5nIHRvIHJldHVybiB0by4gIElmIGEgdGFzayB3YW50cyB0byBleGl0IGl0DQotICAgICAqIHNob3VsZCBpbnN0ZWFkIGNhbGwgdlRhc2tEZWxldGUoIE5VTEwgKS4NCi0gICAgICoNCi0gICAgICogQXJ0aWZpY2lhbGx5IGZvcmNlIGFuIGFzc2VydCgpIHRvIGJlIHRyaWdnZXJlZCBpZiBjb25maWdBU1NFUlQoKSBpcw0KLSAgICAgKiBkZWZpbmVkLCB0aGVuIHN0b3AgaGVyZSBzbyBhcHBsaWNhdGlvbiB3cml0ZXJzIGNhbiBjYXRjaCB0aGUgZXJyb3IuICovDQotICAgIGNvbmZpZ0FTU0VSVCggdXhTYXZlZFRhc2tTdGFja1BvaW50ZXIgPT0gMFVMICk7DQotICAgIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsNCisJLyogQSBmdW5jdGlvbiB0aGF0IGltcGxlbWVudHMgYSB0YXNrIG11c3Qgbm90IGV4aXQgb3IgYXR0ZW1wdCB0byByZXR1cm4gdG8NCisJaXRzIGNhbGxlciBhcyB0aGVyZSBpcyBub3RoaW5nIHRvIHJldHVybiB0by4gIElmIGEgdGFzayB3YW50cyB0byBleGl0IGl0DQorCXNob3VsZCBpbnN0ZWFkIGNhbGwgdlRhc2tEZWxldGUoIE5VTEwgKS4NCiANCi0gICAgZm9yKCA7IDsgKQ0KLSAgICB7DQotICAgIH0NCisJQXJ0aWZpY2lhbGx5IGZvcmNlIGFuIGFzc2VydCgpIHRvIGJlIHRyaWdnZXJlZCBpZiBjb25maWdBU1NFUlQoKSBpcw0KKwlkZWZpbmVkLCB0aGVuIHN0b3AgaGVyZSBzbyBhcHBsaWNhdGlvbiB3cml0ZXJzIGNhbiBjYXRjaCB0aGUgZXJyb3IuICovDQorCWNvbmZpZ0FTU0VSVCggdXhTYXZlZFRhc2tTdGFja1BvaW50ZXIgPT0gMFVMICk7DQorCXBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsNCisJZm9yKCA7OyApOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCkBAIC0yMzYsMTQxICsyMjksMTQ0IEBACiAgKiB2ZWN0b3IgbnVtYmVyLiAgV2hlbiBUaW1lciAxIGlzIHVzZWQgdGhlIHZlY3RvciBudW1iZXIgaXMgZGVmaW5lZCBhcw0KICAqIF9USU1FUl8xX1ZFQ1RPUi4NCiAgKi8NCi1fX2F0dHJpYnV0ZV9fKCAoIHdlYWsgKSApIHZvaWQgdkFwcGxpY2F0aW9uU2V0dXBUaWNrVGltZXJJbnRlcnJ1cHQoIHZvaWQgKQ0KK19fYXR0cmlidXRlX18oKCB3ZWFrICkpIHZvaWQgdkFwcGxpY2F0aW9uU2V0dXBUaWNrVGltZXJJbnRlcnJ1cHQoIHZvaWQgKQ0KIHsNCi0gICAgY29uc3QgdWludDMyX3QgdWxDb21wYXJlTWF0Y2ggPSAoICggY29uZmlnUEVSSVBIRVJBTF9DTE9DS19IWiAvIHBvcnRUSU1FUl9QUkVTQ0FMRSApIC8gY29uZmlnVElDS19SQVRFX0haICkgLSAxVUw7DQorY29uc3QgdWludDMyX3QgdWxDb21wYXJlTWF0Y2ggPSAoIChjb25maWdQRVJJUEhFUkFMX0NMT0NLX0haIC8gcG9ydFRJTUVSX1BSRVNDQUxFKSAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApIC0gMVVMOw0KIA0KLSAgICBUMUNPTiA9IDB4MDAwMDsNCi0gICAgVDFDT05iaXRzLlRDS1BTID0gcG9ydFBSRVNDQUxFX0JJVFM7DQotICAgIFBSMSA9IHVsQ29tcGFyZU1hdGNoOw0KLSAgICBJUEMxYml0cy5UMUlQID0gY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWTsNCisJVDFDT04gPSAweDAwMDA7DQorCVQxQ09OYml0cy5UQ0tQUyA9IHBvcnRQUkVTQ0FMRV9CSVRTOw0KKwlQUjEgPSB1bENvbXBhcmVNYXRjaDsNCisJSVBDMWJpdHMuVDFJUCA9IGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFk7DQogDQotICAgIC8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgYXMgYSBzdGFydGluZyBjb25kaXRpb24uICovDQotICAgIElGUzBiaXRzLlQxSUYgPSAwOw0KKwkvKiBDbGVhciB0aGUgaW50ZXJydXB0IGFzIGEgc3RhcnRpbmcgY29uZGl0aW9uLiAqLw0KKwlJRlMwYml0cy5UMUlGID0gMDsNCiANCi0gICAgLyogRW5hYmxlIHRoZSBpbnRlcnJ1cHQuICovDQotICAgIElFQzBiaXRzLlQxSUUgPSAxOw0KKwkvKiBFbmFibGUgdGhlIGludGVycnVwdC4gKi8NCisJSUVDMGJpdHMuVDFJRSA9IDE7DQogDQotICAgIC8qIFN0YXJ0IHRoZSB0aW1lci4gKi8NCi0gICAgVDFDT05iaXRzLlRPTiA9IDE7DQorCS8qIFN0YXJ0IHRoZSB0aW1lci4gKi8NCisJVDFDT05iaXRzLlRPTiA9IDE7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KLXZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQ0KK3ZvaWQgdlBvcnRFbmRTY2hlZHVsZXIodm9pZCkNCiB7DQotICAgIC8qIE5vdCBpbXBsZW1lbnRlZCBpbiBwb3J0cyB3aGVyZSB0aGVyZSBpcyBub3RoaW5nIHRvIHJldHVybiB0by4NCi0gICAgICogQXJ0aWZpY2lhbGx5IGZvcmNlIGFuIGFzc2VydC4gKi8NCi0gICAgY29uZmlnQVNTRVJUKCB1eEludGVycnVwdE5lc3RpbmcgPT0gMTAwMFVMICk7DQorCS8qIE5vdCBpbXBsZW1lbnRlZCBpbiBwb3J0cyB3aGVyZSB0aGVyZSBpcyBub3RoaW5nIHRvIHJldHVybiB0by4NCisJQXJ0aWZpY2lhbGx5IGZvcmNlIGFuIGFzc2VydC4gKi8NCisJY29uZmlnQVNTRVJUKCB1eEludGVycnVwdE5lc3RpbmcgPT0gMTAwMFVMICk7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIEJhc2VUeXBlX3QgeFBvcnRTdGFydFNjaGVkdWxlciggdm9pZCApDQogew0KLSAgICBleHRlcm4gdm9pZCB2UG9ydFN0YXJ0Rmlyc3RUYXNrKCB2b2lkICk7DQotICAgIGV4dGVybiB2b2lkICogcHhDdXJyZW50VENCOw0KK2V4dGVybiB2b2lkIHZQb3J0U3RhcnRGaXJzdFRhc2soIHZvaWQgKTsNCitleHRlcm4gdm9pZCAqcHhDdXJyZW50VENCOw0KIA0KLSAgICAjaWYgKCBjb25maWdDSEVDS19GT1JfU1RBQ0tfT1ZFUkZMT1cgPiAyICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICAvKiBGaWxsIHRoZSBJU1Igc3RhY2sgdG8gbWFrZSBpdCBlYXN5IHRvIGFzc2VzIGhvdyBtdWNoIGlzIGJlaW5nIHVzZWQuICovDQotICAgICAgICAgICAgbWVtc2V0KCAoIHZvaWQgKiApIHhJU1JTdGFjaywgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHNpemVvZiggeElTUlN0YWNrICkgKTsNCi0gICAgICAgIH0NCi0gICAgI2VuZGlmIC8qIGNvbmZpZ0NIRUNLX0ZPUl9TVEFDS19PVkVSRkxPVyA+IDIgKi8NCisJI2lmICggY29uZmlnQ0hFQ0tfRk9SX1NUQUNLX09WRVJGTE9XID4gMiApDQorCXsNCisJCS8qIEZpbGwgdGhlIElTUiBzdGFjayB0byBtYWtlIGl0IGVhc3kgdG8gYXNzZXMgaG93IG11Y2ggaXMgYmVpbmcgdXNlZC4gKi8NCisJCW1lbXNldCggKCB2b2lkICogKSB4SVNSU3RhY2ssIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBzaXplb2YoIHhJU1JTdGFjayApICk7DQorCX0NCisJI2VuZGlmIC8qIGNvbmZpZ0NIRUNLX0ZPUl9TVEFDS19PVkVSRkxPVyA+IDIgKi8NCiANCi0gICAgLyogQ2xlYXIgdGhlIHNvZnR3YXJlIGludGVycnVwdCBmbGFnLiAqLw0KLSAgICBJRlMwQ0xSID0gX0lGUzBfQ1MwSUZfTUFTSzsNCisJLyogQ2xlYXIgdGhlIHNvZnR3YXJlIGludGVycnVwdCBmbGFnLiAqLw0KKwlJRlMwQ0xSID0gX0lGUzBfQ1MwSUZfTUFTSzsNCiANCi0gICAgLyogU2V0IHNvZnR3YXJlIHRpbWVyIHByaW9yaXR5LiAqLw0KLSAgICBJUEMwQ0xSID0gX0lQQzBfQ1MwSVBfTUFTSzsNCi0gICAgSVBDMFNFVCA9ICggY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWSA8PCBfSVBDMF9DUzBJUF9QT1NJVElPTiApOw0KKwkvKiBTZXQgc29mdHdhcmUgdGltZXIgcHJpb3JpdHkuICovDQorCUlQQzBDTFIgPSBfSVBDMF9DUzBJUF9NQVNLOw0KKwlJUEMwU0VUID0gKCBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZIDw8IF9JUEMwX0NTMElQX1BPU0lUSU9OICk7DQogDQotICAgIC8qIEVuYWJsZSBzb2Z0d2FyZSBpbnRlcnJ1cHQuICovDQotICAgIElFQzBDTFIgPSBfSUVDMF9DUzBJRV9NQVNLOw0KLSAgICBJRUMwU0VUID0gMSA8PCBfSUVDMF9DUzBJRV9QT1NJVElPTjsNCisJLyogRW5hYmxlIHNvZnR3YXJlIGludGVycnVwdC4gKi8NCisJSUVDMENMUiA9IF9JRUMwX0NTMElFX01BU0s7DQorCUlFQzBTRVQgPSAxIDw8IF9JRUMwX0NTMElFX1BPU0lUSU9OOw0KIA0KLSAgICAvKiBTZXR1cCB0aGUgdGltZXIgdG8gZ2VuZXJhdGUgdGhlIHRpY2suICBJbnRlcnJ1cHRzIHdpbGwgaGF2ZSBiZWVuDQotICAgICAqIGRpc2FibGVkIGJ5IHRoZSB0aW1lIHdlIGdldCBoZXJlLiAqLw0KLSAgICB2QXBwbGljYXRpb25TZXR1cFRpY2tUaW1lckludGVycnVwdCgpOw0KKwkvKiBTZXR1cCB0aGUgdGltZXIgdG8gZ2VuZXJhdGUgdGhlIHRpY2suICBJbnRlcnJ1cHRzIHdpbGwgaGF2ZSBiZWVuDQorCWRpc2FibGVkIGJ5IHRoZSB0aW1lIHdlIGdldCBoZXJlLiAqLw0KKwl2QXBwbGljYXRpb25TZXR1cFRpY2tUaW1lckludGVycnVwdCgpOw0KIA0KLSAgICAvKiBLaWNrIG9mZiB0aGUgaGlnaGVzdCBwcmlvcml0eSB0YXNrIHRoYXQgaGFzIGJlZW4gY3JlYXRlZCBzbyBmYXIuDQotICAgICAqIEl0cyBzdGFjayBsb2NhdGlvbiBpcyBsb2FkZWQgaW50byB1eFNhdmVkVGFza1N0YWNrUG9pbnRlci4gKi8NCi0gICAgdXhTYXZlZFRhc2tTdGFja1BvaW50ZXIgPSAqKCBVQmFzZVR5cGVfdCAqICkgcHhDdXJyZW50VENCOw0KLSAgICB2UG9ydFN0YXJ0Rmlyc3RUYXNrKCk7DQorCS8qIEtpY2sgb2ZmIHRoZSBoaWdoZXN0IHByaW9yaXR5IHRhc2sgdGhhdCBoYXMgYmVlbiBjcmVhdGVkIHNvIGZhci4NCisJSXRzIHN0YWNrIGxvY2F0aW9uIGlzIGxvYWRlZCBpbnRvIHV4U2F2ZWRUYXNrU3RhY2tQb2ludGVyLiAqLw0KKwl1eFNhdmVkVGFza1N0YWNrUG9pbnRlciA9ICooIFVCYXNlVHlwZV90ICogKSBweEN1cnJlbnRUQ0I7DQorCXZQb3J0U3RhcnRGaXJzdFRhc2soKTsNCiANCi0gICAgLyogU2hvdWxkIG5ldmVyIGdldCBoZXJlIGFzIHRoZSB0YXNrcyB3aWxsIG5vdyBiZSBleGVjdXRpbmchICBDYWxsIHRoZSB0YXNrDQotICAgICAqIGV4aXQgZXJyb3IgZnVuY3Rpb24gdG8gcHJldmVudCBjb21waWxlciB3YXJuaW5ncyBhYm91dCBhIHN0YXRpYyBmdW5jdGlvbg0KLSAgICAgKiBub3QgYmVpbmcgY2FsbGVkIGluIHRoZSBjYXNlIHRoYXQgdGhlIGFwcGxpY2F0aW9uIHdyaXRlciBvdmVycmlkZXMgdGhpcw0KLSAgICAgKiBmdW5jdGlvbmFsaXR5IGJ5IGRlZmluaW5nIGNvbmZpZ1RBU0tfUkVUVVJOX0FERFJFU1MuICovDQotICAgIHBydlRhc2tFeGl0RXJyb3IoKTsNCisJLyogU2hvdWxkIG5ldmVyIGdldCBoZXJlIGFzIHRoZSB0YXNrcyB3aWxsIG5vdyBiZSBleGVjdXRpbmchICBDYWxsIHRoZSB0YXNrDQorCWV4aXQgZXJyb3IgZnVuY3Rpb24gdG8gcHJldmVudCBjb21waWxlciB3YXJuaW5ncyBhYm91dCBhIHN0YXRpYyBmdW5jdGlvbg0KKwlub3QgYmVpbmcgY2FsbGVkIGluIHRoZSBjYXNlIHRoYXQgdGhlIGFwcGxpY2F0aW9uIHdyaXRlciBvdmVycmlkZXMgdGhpcw0KKwlmdW5jdGlvbmFsaXR5IGJ5IGRlZmluaW5nIGNvbmZpZ1RBU0tfUkVUVVJOX0FERFJFU1MuICovDQorCXBydlRhc2tFeGl0RXJyb3IoKTsNCiANCi0gICAgcmV0dXJuIHBkRkFMU0U7DQorCXJldHVybiBwZEZBTFNFOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0SW5jcmVtZW50VGljayggdm9pZCApDQogew0KLSAgICBVQmFzZVR5cGVfdCB1eFNhdmVkU3RhdHVzOw0KK1VCYXNlVHlwZV90IHV4U2F2ZWRTdGF0dXM7DQogDQotICAgIHV4U2F2ZWRTdGF0dXMgPSB1eFBvcnRTZXRJbnRlcnJ1cHRNYXNrRnJvbUlTUigpOw0KLSAgICB7DQotICAgICAgICBpZiggeFRhc2tJbmNyZW1lbnRUaWNrKCkgIT0gcGRGQUxTRSApDQotICAgICAgICB7DQotICAgICAgICAgICAgLyogUGVuZCBhIGNvbnRleHQgc3dpdGNoLiAqLw0KLSAgICAgICAgICAgIF9DUDBfQklTX0NBVVNFKCBwb3J0Q09SRV9TV18wICk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgdlBvcnRDbGVhckludGVycnVwdE1hc2tGcm9tSVNSKCB1eFNhdmVkU3RhdHVzICk7DQorCXV4U2F2ZWRTdGF0dXMgPSB1eFBvcnRTZXRJbnRlcnJ1cHRNYXNrRnJvbUlTUigpOw0KKwl7DQorCQlpZiggeFRhc2tJbmNyZW1lbnRUaWNrKCkgIT0gcGRGQUxTRSApDQorCQl7DQorCQkJLyogUGVuZCBhIGNvbnRleHQgc3dpdGNoLiAqLw0KKwkJCV9DUDBfQklTX0NBVVNFKCBwb3J0Q09SRV9TV18wICk7DQorCQl9DQorCX0NCisJdlBvcnRDbGVhckludGVycnVwdE1hc2tGcm9tSVNSKCB1eFNhdmVkU3RhdHVzICk7DQogDQotICAgIC8qIExvb2sgZm9yIHRoZSBJU1Igc3RhY2sgZ2V0dGluZyBuZWFyIG9yIHBhc3QgaXRzIGxpbWl0LiAqLw0KLSAgICBwb3J0Q0hFQ0tfSVNSX1NUQUNLKCk7DQorCS8qIExvb2sgZm9yIHRoZSBJU1Igc3RhY2sgZ2V0dGluZyBuZWFyIG9yIHBhc3QgaXRzIGxpbWl0LiAqLw0KKwlwb3J0Q0hFQ0tfSVNSX1NUQUNLKCk7DQogDQotICAgIC8qIENsZWFyIHRpbWVyIGludGVycnVwdC4gKi8NCi0gICAgY29uZmlnQ0xFQVJfVElDS19USU1FUl9JTlRFUlJVUFQoKTsNCisJLyogQ2xlYXIgdGltZXIgaW50ZXJydXB0LiAqLw0KKwljb25maWdDTEVBUl9USUNLX1RJTUVSX0lOVEVSUlVQVCgpOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBVQmFzZVR5cGVfdCB1eFBvcnRTZXRJbnRlcnJ1cHRNYXNrRnJvbUlTUiggdm9pZCApDQogew0KLSAgICBVQmFzZVR5cGVfdCB1eFNhdmVkU3RhdHVzUmVnaXN0ZXI7DQorVUJhc2VUeXBlX3QgdXhTYXZlZFN0YXR1c1JlZ2lzdGVyOw0KIA0KLSAgICBfX2J1aWx0aW5fZGlzYWJsZV9pbnRlcnJ1cHRzKCk7DQotICAgIHV4U2F2ZWRTdGF0dXNSZWdpc3RlciA9IF9DUDBfR0VUX1NUQVRVUygpIHwgMHgwMTsNCisJX19idWlsdGluX2Rpc2FibGVfaW50ZXJydXB0cygpOw0KKwl1eFNhdmVkU3RhdHVzUmVnaXN0ZXIgPSBfQ1AwX0dFVF9TVEFUVVMoKSB8IDB4MDE7DQorCS8qIFRoaXMgY2xlYXJzIHRoZSBJUEwgYml0cywgdGhlbiBzZXRzIHRoZW0gdG8NCisJY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZLiAgVGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIGNhbGxlZA0KKwlmcm9tIGFuIGludGVycnVwdCB0aGF0IGhhcyBhIHByaW9yaXR5IGFib3ZlDQorCWNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSBzbywgd2hlbiB1c2VkIGNvcnJlY3RseSwgdGhlIGFjdGlvbg0KKwljYW4gb25seSByZXN1bHQgaW4gdGhlIElQTCBiZWluZyB1bmNoYW5nZWQgb3IgcmFpc2VkLCBhbmQgdGhlcmVmb3JlIG5ldmVyDQorCWxvd2VyZWQuICovDQorCV9DUDBfU0VUX1NUQVRVUyggKCAoIHV4U2F2ZWRTdGF0dXNSZWdpc3RlciAmICggfnBvcnRBTExfSVBMX0JJVFMgKSApICkgfCAoIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSA8PCBwb3J0SVBMX1NISUZUICkgKTsNCiANCi0gICAgLyogVGhpcyBjbGVhcnMgdGhlIElQTCBiaXRzLCB0aGVuIHNldHMgdGhlbSB0bw0KLSAgICAgKiBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkuICBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgY2FsbGVkDQotICAgICAqIGZyb20gYW4gaW50ZXJydXB0IHRoYXQgaGFzIGEgcHJpb3JpdHkgYWJvdmUNCi0gICAgICogY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIHNvLCB3aGVuIHVzZWQgY29ycmVjdGx5LCB0aGUgYWN0aW9uDQotICAgICAqIGNhbiBvbmx5IHJlc3VsdCBpbiB0aGUgSVBMIGJlaW5nIHVuY2hhbmdlZCBvciByYWlzZWQsIGFuZCB0aGVyZWZvcmUgbmV2ZXINCi0gICAgICogbG93ZXJlZC4gKi8NCi0gICAgX0NQMF9TRVRfU1RBVFVTKCAoICggdXhTYXZlZFN0YXR1c1JlZ2lzdGVyICYgKCB+cG9ydEFMTF9JUExfQklUUyApICkgKSB8ICggY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIDw8IHBvcnRJUExfU0hJRlQgKSApOw0KLQ0KLSAgICByZXR1cm4gdXhTYXZlZFN0YXR1c1JlZ2lzdGVyOw0KKwlyZXR1cm4gdXhTYXZlZFN0YXR1c1JlZ2lzdGVyOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0Q2xlYXJJbnRlcnJ1cHRNYXNrRnJvbUlTUiggVUJhc2VUeXBlX3QgdXhTYXZlZFN0YXR1c1JlZ2lzdGVyICkNCiB7DQotICAgIF9DUDBfU0VUX1NUQVRVUyggdXhTYXZlZFN0YXR1c1JlZ2lzdGVyICk7DQorCV9DUDBfU0VUX1NUQVRVUyggdXhTYXZlZFN0YXR1c1JlZ2lzdGVyICk7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KICNpZiAoIF9fbWlwc19oYXJkX2Zsb2F0ID09IDEgKSAmJiAoIGNvbmZpZ1VTRV9UQVNLX0ZQVV9TVVBQT1JUID09IDEgKQ0KIA0KLSAgICB2b2lkIHZQb3J0VGFza1VzZXNGUFUoIHZvaWQgKQ0KLSAgICB7DQotICAgICAgICBleHRlcm4gdm9pZCB2UG9ydEluaXRpYWxpc2VGUFNDUiggdWludDMyX3QgdXhGUFNDUkluaXQgKTsNCisJdm9pZCB2UG9ydFRhc2tVc2VzRlBVKHZvaWQpDQorCXsNCisJZXh0ZXJuIHZvaWQgdlBvcnRJbml0aWFsaXNlRlBTQ1IoIHVpbnQzMl90IHV4RlBTQ1JJbml0ICk7DQogDQotICAgICAgICBwb3J0RU5URVJfQ1JJVElDQUwoKTsNCisJCXBvcnRFTlRFUl9DUklUSUNBTCgpOw0KIA0KLSAgICAgICAgLyogSW5pdGlhbGlzZSB0aGUgZmxvYXRpbmcgcG9pbnQgc3RhdHVzIHJlZ2lzdGVyLiAqLw0KLSAgICAgICAgdlBvcnRJbml0aWFsaXNlRlBTQ1IoIHBvcnRJTklUSUFMX0ZQU0NSICk7DQorCQkvKiBJbml0aWFsaXNlIHRoZSBmbG9hdGluZyBwb2ludCBzdGF0dXMgcmVnaXN0ZXIuICovDQorCQl2UG9ydEluaXRpYWxpc2VGUFNDUihwb3J0SU5JVElBTF9GUFNDUik7DQogDQotICAgICAgICAvKiBBIHRhc2sgaXMgcmVnaXN0ZXJpbmcgdGhlIGZhY3QgdGhhdCBpdCBuZWVkcyBhIEZQVSBjb250ZXh0LiBTZXQgdGhlDQotICAgICAgICAgKiBGUFUgZmxhZyAoc2F2ZWQgYXMgcGFydCBvZiB0aGUgdGFzayBjb250ZXh0KS4gKi8NCi0gICAgICAgIHVsVGFza0hhc0ZQVUNvbnRleHQgPSBwZFRSVUU7DQorCQkvKiBBIHRhc2sgaXMgcmVnaXN0ZXJpbmcgdGhlIGZhY3QgdGhhdCBpdCBuZWVkcyBhIEZQVSBjb250ZXh0LiBTZXQgdGhlDQorCQlGUFUgZmxhZyAoc2F2ZWQgYXMgcGFydCBvZiB0aGUgdGFzayBjb250ZXh0KS4gKi8NCisJCXVsVGFza0hhc0ZQVUNvbnRleHQgPSBwZFRSVUU7DQogDQotICAgICAgICBwb3J0RVhJVF9DUklUSUNBTCgpOw0KLSAgICB9DQorCQlwb3J0RVhJVF9DUklUSUNBTCgpOw0KKwl9DQogDQogI2VuZGlmIC8qIF9fbWlwc19oYXJkX2Zsb2F0ID09IDEgKi8NCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisNCisNCisNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9NUExBQi9QSUMzMk1aL3BvcnRtYWNyby5oIGIvcG9ydGFibGUvTVBMQUIvUElDMzJNWi9wb3J0bWFjcm8uaAppbmRleCBkNzg4NDQwLi42NTg0M2NmIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9NUExBQi9QSUMzMk1aL3BvcnRtYWNyby5oCisrKyBiL3BvcnRhYmxlL01QTEFCL1BJQzMyTVovcG9ydG1hY3JvLmgKQEAgLTI2LDE0ICsyNiwxNCBAQAogICovDQogDQogI2lmbmRlZiBQT1JUTUFDUk9fSA0KLSAgICAjZGVmaW5lIFBPUlRNQUNST19IDQorI2RlZmluZSBQT1JUTUFDUk9fSA0KIA0KIC8qIFN5c3RlbSBpbmNsdWRlIGZpbGVzICovDQotICAgICNpbmNsdWRlIDx4Yy5oPg0KKyNpbmNsdWRlIDx4Yy5oPg0KIA0KLSAgICAjaWZkZWYgX19jcGx1c3BsdXMNCi0gICAgICAgIGV4dGVybiAiQyIgew0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICogUG9ydCBzcGVjaWZpYyBkZWZpbml0aW9ucy4NCkBAIC00NiwxNzEgKzQ2LDE3MCBAQAogICovDQogDQogLyogVHlwZSBkZWZpbml0aW9ucy4gKi8NCi0gICAgI2RlZmluZSBwb3J0Q0hBUiAgICAgICAgICBjaGFyDQotICAgICNkZWZpbmUgcG9ydEZMT0FUICAgICAgICAgZmxvYXQNCi0gICAgI2RlZmluZSBwb3J0RE9VQkxFICAgICAgICBkb3VibGUNCi0gICAgI2RlZmluZSBwb3J0TE9ORyAgICAgICAgICBsb25nDQotICAgICNkZWZpbmUgcG9ydFNIT1JUICAgICAgICAgc2hvcnQNCi0gICAgI2RlZmluZSBwb3J0U1RBQ0tfVFlQRSAgICB1aW50MzJfdA0KLSAgICAjZGVmaW5lIHBvcnRCQVNFX1RZUEUgICAgIGxvbmcNCisjZGVmaW5lIHBvcnRDSEFSCQljaGFyDQorI2RlZmluZSBwb3J0RkxPQVQJCWZsb2F0DQorI2RlZmluZSBwb3J0RE9VQkxFCQlkb3VibGUNCisjZGVmaW5lIHBvcnRMT05HCQlsb25nDQorI2RlZmluZSBwb3J0U0hPUlQJCXNob3J0DQorI2RlZmluZSBwb3J0U1RBQ0tfVFlQRQl1aW50MzJfdA0KKyNkZWZpbmUgcG9ydEJBU0VfVFlQRQlsb25nDQogDQotICAgIHR5cGVkZWYgcG9ydFNUQUNLX1RZUEUgICBTdGFja1R5cGVfdDsNCi0gICAgdHlwZWRlZiBsb25nICAgICAgICAgICAgIEJhc2VUeXBlX3Q7DQotICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyAgICBVQmFzZVR5cGVfdDsNCit0eXBlZGVmIHBvcnRTVEFDS19UWVBFIFN0YWNrVHlwZV90Ow0KK3R5cGVkZWYgbG9uZyBCYXNlVHlwZV90Ow0KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBVQmFzZVR5cGVfdDsNCiANCi0gICAgI2lmICggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCi0gICAgICAgIHR5cGVkZWYgdWludDE2X3QgICAgIFRpY2tUeXBlX3Q7DQotICAgICAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgICAgICAgICAgICggVGlja1R5cGVfdCApIDB4ZmZmZg0KLSAgICAjZWxzZQ0KLSAgICAgICAgdHlwZWRlZiB1aW50MzJfdCAgICAgVGlja1R5cGVfdDsNCi0gICAgICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAgICAgICAgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQorI2lmKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KKwl0eXBlZGVmIHVpbnQxNl90IFRpY2tUeXBlX3Q7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIFRpY2tUeXBlX3QgKSAweGZmZmYNCisjZWxzZQ0KKwl0eXBlZGVmIHVpbnQzMl90IFRpY2tUeXBlX3Q7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwNCiANCi0vKiAzMi1iaXQgdGljayB0eXBlIG9uIGEgMzItYml0IGFyY2hpdGVjdHVyZSwgc28gcmVhZHMgb2YgdGhlIHRpY2sgY291bnQgZG8NCi0gKiBub3QgbmVlZCB0byBiZSBndWFyZGVkIHdpdGggYSBjcml0aWNhbCBzZWN0aW9uLiAqLw0KLSAgICAgICAgI2RlZmluZSBwb3J0VElDS19UWVBFX0lTX0FUT01JQyAgICAxDQotICAgICNlbmRpZg0KKwkvKiAzMi1iaXQgdGljayB0eXBlIG9uIGEgMzItYml0IGFyY2hpdGVjdHVyZSwgc28gcmVhZHMgb2YgdGhlIHRpY2sgY291bnQgZG8NCisJbm90IG5lZWQgdG8gYmUgZ3VhcmRlZCB3aXRoIGEgY3JpdGljYWwgc2VjdGlvbi4gKi8NCisJI2RlZmluZSBwb3J0VElDS19UWVBFX0lTX0FUT01JQyAxDQorI2VuZGlmDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogSGFyZHdhcmUgc3BlY2lmaWNzLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVCAgICA4DQotICAgICNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSCAgICAgIC0xDQotICAgICNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TICAgICggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQorI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQJCQk4DQorI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RICQkJLTENCisjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUwkJCSggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogQ3JpdGljYWwgc2VjdGlvbiBtYW5hZ2VtZW50LiAqLw0KLSAgICAjZGVmaW5lIHBvcnRJUExfU0hJRlQgICAgICAgKCAxMFVMICkNCi0NCisjZGVmaW5lIHBvcnRJUExfU0hJRlQJCQkJKCAxMFVMICkNCiAvKiBEb24ndCBzdHJhZGRsZSB0aGUgQ0VFIGJpdC4gIEludGVycnVwdHMgY2FsbGluZyBGcmVlUlRPUyBmdW5jdGlvbnMgc2hvdWxkDQotICogbmV2ZXIgaGF2ZSBoaWdoZXIgSVBMIGJpdHMgc2V0IGFueXdheS4gKi8NCi0gICAgI2RlZmluZSBwb3J0QUxMX0lQTF9CSVRTICAgICggMHg3RlVMIDw8IHBvcnRJUExfU0hJRlQgKQ0KLSAgICAjZGVmaW5lIHBvcnRTVzBfQklUICAgICAgICAgKCAweDAxIDw8IDggKQ0KK25ldmVyIGhhdmUgaGlnaGVyIElQTCBiaXRzIHNldCBhbnl3YXkuICovDQorI2RlZmluZSBwb3J0QUxMX0lQTF9CSVRTCQkJKCAweDdGVUwgPDwgcG9ydElQTF9TSElGVCApDQorI2RlZmluZSBwb3J0U1cwX0JJVAkJCQkJKCAweDAxIDw8IDggKQ0KIA0KIC8qIFRoaXMgY2xlYXJzIHRoZSBJUEwgYml0cywgdGhlbiBzZXRzIHRoZW0gdG8NCi0gKiBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkuICBBbiBleHRyYSBjaGVjayBpcyBwZXJmb3JtZWQgaWYNCi0gKiBjb25maWdBU1NFUlQoKSBpcyBkZWZpbmVkIHRvIGVuc3VyZSBhbiBhc3NlcnRpb24gaGFuZGxlciBkb2VzIG5vdCBpbmFkdmVydGVudGx5DQotICogYXR0ZW1wdCB0byBsb3dlciB0aGUgSVBMIHdoZW4gdGhlIGNhbGwgdG8gYXNzZXJ0IHdhcyB0cmlnZ2VyZWQgYmVjYXVzZSB0aGUgSVBMDQotICogdmFsdWUgd2FzIGZvdW5kIHRvIGJlIGFib3ZlIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSB3aGVuIGFuIElTUg0KLSAqIHNhZmUgRnJlZVJUT1MgQVBJIGZ1bmN0aW9uIHdhcyBleGVjdXRlZC4gIElTUiBzYWZlIEZyZWVSVE9TIEFQSSBmdW5jdGlvbnMgYXJlDQotICogdGhvc2UgdGhhdCBlbmQgaW4gRnJvbUlTUi4gIEZyZWVSVE9TIG1haW50YWlucyBhIHNlcGFyYXRlIGludGVycnVwdCBBUEkgdG8NCi0gKiBlbnN1cmUgQVBJIGZ1bmN0aW9uIGFuZCBpbnRlcnJ1cHQgZW50cnkgaXMgYXMgZmFzdCBhbmQgYXMgc2ltcGxlIGFzIHBvc3NpYmxlLiAqLw0KLSAgICAjaWZkZWYgY29uZmlnQVNTRVJUDQotICAgICAgICAjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgdWludDMyX3QgdWxTdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIE1hc2sgaW50ZXJydXB0cyBhdCBhbmQgYmVsb3cgdGhlIGtlcm5lbCBpbnRlcnJ1cHQgcHJpb3JpdHkuICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgdWxTdGF0dXMgPSBfQ1AwX0dFVF9TVEFUVVMoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIElzIHRoZSBjdXJyZW50IElQTCBiZWxvdyBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFk/ICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgaWYoICggKCB1bFN0YXR1cyAmIHBvcnRBTExfSVBMX0JJVFMgKSA+PiBwb3J0SVBMX1NISUZUICkgPCBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgKSBcDQotICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICB1bFN0YXR1cyAmPSB+cG9ydEFMTF9JUExfQklUUzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIF9DUDBfU0VUX1NUQVRVUyggKCB1bFN0YXR1cyB8ICggY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIDw8IHBvcnRJUExfU0hJRlQgKSApICk7ICBcDQotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgfQ0KLSAgICAjZWxzZSAvKiBjb25maWdBU1NFUlQgKi8NCi0gICAgICAgICNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHVpbnQzMl90IHVsU3RhdHVzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIE1hc2sgaW50ZXJydXB0cyBhdCBhbmQgYmVsb3cgdGhlIGtlcm5lbCBpbnRlcnJ1cHQgcHJpb3JpdHkuICovICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHVsU3RhdHVzID0gX0NQMF9HRVRfU1RBVFVTKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHVsU3RhdHVzICY9IH5wb3J0QUxMX0lQTF9CSVRTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIF9DUDBfU0VUX1NUQVRVUyggKCB1bFN0YXR1cyB8ICggY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIDw8IHBvcnRJUExfU0hJRlQgKSApICk7IFwNCi0gICAgfQ0KLSAgICAjZW5kaWYgLyogY29uZmlnQVNTRVJUICovDQorY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZLiAgQW4gZXh0cmEgY2hlY2sgaXMgcGVyZm9ybWVkIGlmDQorY29uZmlnQVNTRVJUKCkgaXMgZGVmaW5lZCB0byBlbnN1cmUgYW4gYXNzZXJ0aW9uIGhhbmRsZXIgZG9lcyBub3QgaW5hZHZlcnRlbnRseQ0KK2F0dGVtcHQgdG8gbG93ZXIgdGhlIElQTCB3aGVuIHRoZSBjYWxsIHRvIGFzc2VydCB3YXMgdHJpZ2dlcmVkIGJlY2F1c2UgdGhlIElQTA0KK3ZhbHVlIHdhcyBmb3VuZCB0byBiZSBhYm92ZSBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgd2hlbiBhbiBJU1INCitzYWZlIEZyZWVSVE9TIEFQSSBmdW5jdGlvbiB3YXMgZXhlY3V0ZWQuICBJU1Igc2FmZSBGcmVlUlRPUyBBUEkgZnVuY3Rpb25zIGFyZQ0KK3Rob3NlIHRoYXQgZW5kIGluIEZyb21JU1IuICBGcmVlUlRPUyBtYWludGFpbnMgYSBzZXBhcmF0ZSBpbnRlcnJ1cHQgQVBJIHRvDQorZW5zdXJlIEFQSSBmdW5jdGlvbiBhbmQgaW50ZXJydXB0IGVudHJ5IGlzIGFzIGZhc3QgYW5kIGFzIHNpbXBsZSBhcyBwb3NzaWJsZS4gKi8NCisjaWZkZWYgY29uZmlnQVNTRVJUDQorCSNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpCQkJCQkJCQkJCQlcDQorCXsJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwl1aW50MzJfdCB1bFN0YXR1czsJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkvKiBNYXNrIGludGVycnVwdHMgYXQgYW5kIGJlbG93IHRoZSBrZXJuZWwgaW50ZXJydXB0IHByaW9yaXR5LiAqLwkJXA0KKwkJdWxTdGF0dXMgPSBfQ1AwX0dFVF9TVEFUVVMoKTsJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCS8qIElzIHRoZSBjdXJyZW50IElQTCBiZWxvdyBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFk/ICovCVwNCisJCWlmKCAoICggdWxTdGF0dXMgJiBwb3J0QUxMX0lQTF9CSVRTICkgPj4gcG9ydElQTF9TSElGVCApIDwgY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkgXA0KKwkJewkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCQl1bFN0YXR1cyAmPSB+cG9ydEFMTF9JUExfQklUUzsJCQkJCQkJCQkJXA0KKwkJCV9DUDBfU0VUX1NUQVRVUyggKCB1bFN0YXR1cyB8ICggY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIDw8IHBvcnRJUExfU0hJRlQgKSApICk7IFwNCisJCX0JCQkJCQkJCQkJCQkJCQkJCQlcDQorCX0NCisjZWxzZSAvKiBjb25maWdBU1NFUlQgKi8NCisJI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkJCQkJCQkJCQkJXA0KKwl7CQkJCQkJCQkJCQkJCQkJCQkJXA0KKwl1aW50MzJfdCB1bFN0YXR1czsJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJLyogTWFzayBpbnRlcnJ1cHRzIGF0IGFuZCBiZWxvdyB0aGUga2VybmVsIGludGVycnVwdCBwcmlvcml0eS4gKi8JXA0KKwkJdWxTdGF0dXMgPSBfQ1AwX0dFVF9TVEFUVVMoKTsJCQkJCQkJCQkJXA0KKwkJdWxTdGF0dXMgJj0gfnBvcnRBTExfSVBMX0JJVFM7CQkJCQkJCQkJCVwNCisJCV9DUDBfU0VUX1NUQVRVUyggKCB1bFN0YXR1cyB8ICggY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIDw8IHBvcnRJUExfU0hJRlQgKSApICk7IFwNCisJfQ0KKyNlbmRpZiAvKiBjb25maWdBU1NFUlQgKi8NCiANCi0gICAgI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKSAgICBcDQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgdWludDMyX3QgdWxTdGF0dXM7ICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAvKiBVbm1hc2sgYWxsIGludGVycnVwdHMuICovICAgXA0KLSAgICAgICAgdWxTdGF0dXMgPSBfQ1AwX0dFVF9TVEFUVVMoKTsgIFwNCi0gICAgICAgIHVsU3RhdHVzICY9IH5wb3J0QUxMX0lQTF9CSVRTOyBcDQotICAgICAgICBfQ1AwX1NFVF9TVEFUVVMoIHVsU3RhdHVzICk7ICAgXA0KLSAgICB9DQorI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKQkJCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJCQlcDQordWludDMyX3QgdWxTdGF0dXM7CQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBVbm1hc2sgYWxsIGludGVycnVwdHMuICovCQkJCQkJCQkJCVwNCisJdWxTdGF0dXMgPSBfQ1AwX0dFVF9TVEFUVVMoKTsJCQkJCQkJCQkJXA0KKwl1bFN0YXR1cyAmPSB+cG9ydEFMTF9JUExfQklUUzsJCQkJCQkJCQkJXA0KKwlfQ1AwX1NFVF9TVEFUVVMoIHVsU3RhdHVzICk7CQkJCQkJCQkJCVwNCit9DQogDQogDQotICAgIGV4dGVybiB2b2lkIHZUYXNrRW50ZXJDcml0aWNhbCggdm9pZCApOw0KLSAgICBleHRlcm4gdm9pZCB2VGFza0V4aXRDcml0aWNhbCggdm9pZCApOw0KLSAgICAjZGVmaW5lIHBvcnRDUklUSUNBTF9ORVNUSU5HX0lOX1RDQiAgICAxDQotICAgICNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgICAgdlRhc2tFbnRlckNyaXRpY2FsKCkNCi0gICAgI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpICAgICB2VGFza0V4aXRDcml0aWNhbCgpDQorZXh0ZXJuIHZvaWQgdlRhc2tFbnRlckNyaXRpY2FsKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdlRhc2tFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCisjZGVmaW5lIHBvcnRDUklUSUNBTF9ORVNUSU5HX0lOX1RDQgkxDQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKQkJdlRhc2tFbnRlckNyaXRpY2FsKCkNCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkJCQl2VGFza0V4aXRDcml0aWNhbCgpDQogDQotICAgIGV4dGVybiBVQmFzZVR5cGVfdCB1eFBvcnRTZXRJbnRlcnJ1cHRNYXNrRnJvbUlTUigpOw0KLSAgICBleHRlcm4gdm9pZCB2UG9ydENsZWFySW50ZXJydXB0TWFza0Zyb21JU1IoIFVCYXNlVHlwZV90ICk7DQotICAgICNkZWZpbmUgcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1eFBvcnRTZXRJbnRlcnJ1cHRNYXNrRnJvbUlTUigpDQotICAgICNkZWZpbmUgcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCB1eFNhdmVkU3RhdHVzUmVnaXN0ZXIgKSAgICB2UG9ydENsZWFySW50ZXJydXB0TWFza0Zyb21JU1IoIHV4U2F2ZWRTdGF0dXNSZWdpc3RlciApDQorZXh0ZXJuIFVCYXNlVHlwZV90IHV4UG9ydFNldEludGVycnVwdE1hc2tGcm9tSVNSKCk7DQorZXh0ZXJuIHZvaWQgdlBvcnRDbGVhckludGVycnVwdE1hc2tGcm9tSVNSKCBVQmFzZVR5cGVfdCApOw0KKyNkZWZpbmUgcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpIHV4UG9ydFNldEludGVycnVwdE1hc2tGcm9tSVNSKCkNCisjZGVmaW5lIHBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUiggdXhTYXZlZFN0YXR1c1JlZ2lzdGVyICkgdlBvcnRDbGVhckludGVycnVwdE1hc2tGcm9tSVNSKCB1eFNhdmVkU3RhdHVzUmVnaXN0ZXIgKQ0KIA0KLSAgICAjaWYgKCBfX21pcHNfaGFyZF9mbG9hdCA9PSAwICkgJiYgKCBjb25maWdVU0VfVEFTS19GUFVfU1VQUE9SVCA9PSAxICkNCi0gICAgICAgICNlcnJvciBjb25maWdVU0VfVEFTS19GUFVfU1VQUE9SVCBjYW4gb25seSBiZSBzZXQgdG8gMSB3aGVuIHRoZSBwYXJ0IHN1cHBvcnRzIGEgaGFyZHdhcmUgRlBVIG1vZHVsZS4NCi0gICAgI2VuZGlmDQorI2lmICggX19taXBzX2hhcmRfZmxvYXQgPT0gMCApICYmICggY29uZmlnVVNFX1RBU0tfRlBVX1NVUFBPUlQgPT0gMSApDQorICAgICNlcnJvciBjb25maWdVU0VfVEFTS19GUFVfU1VQUE9SVCBjYW4gb25seSBiZSBzZXQgdG8gMSB3aGVuIHRoZSBwYXJ0IHN1cHBvcnRzIGEgaGFyZHdhcmUgRlBVIG1vZHVsZS4NCisjZW5kaWYNCiANCi0gICAgI2lmICggX19taXBzX2hhcmRfZmxvYXQgPT0gMSApICYmICggY29uZmlnVVNFX1RBU0tfRlBVX1NVUFBPUlQgPT0gMSApDQotICAgICAgICB2b2lkIHZQb3J0VGFza1VzZXNGUFUoIHZvaWQgKTsNCi0gICAgICAgICNkZWZpbmUgcG9ydFRBU0tfVVNFU19GTE9BVElOR19QT0lOVCgpICAgIHZQb3J0VGFza1VzZXNGUFUoKQ0KLSAgICAjZW5kaWYNCisjaWYgKCBfX21pcHNfaGFyZF9mbG9hdCA9PSAxICkgJiYgKCBjb25maWdVU0VfVEFTS19GUFVfU1VQUE9SVCA9PSAxICkNCisgICAgdm9pZCB2UG9ydFRhc2tVc2VzRlBVKCB2b2lkICk7DQorCSNkZWZpbmUgcG9ydFRBU0tfVVNFU19GTE9BVElOR19QT0lOVCgpIHZQb3J0VGFza1VzZXNGUFUoKQ0KKyNlbmRpZg0KIA0KLSAgICAjaWZuZGVmIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTg0KLSAgICAgICAgI2RlZmluZSBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gICAgMQ0KLSAgICAjZW5kaWYNCisjaWZuZGVmIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTg0KKwkjZGVmaW5lIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiAxDQorI2VuZGlmDQogDQotICAgICNpZiBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gPT0gMQ0KKyNpZiBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gPT0gMQ0KIA0KLS8qIENoZWNrIHRoZSBjb25maWd1cmF0aW9uLiAqLw0KLSAgICAgICAgI2lmICggY29uZmlnTUFYX1BSSU9SSVRJRVMgPiAzMiApDQotICAgICAgICAgICAgI2Vycm9yIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiBjYW4gb25seSBiZSBzZXQgdG8gMSB3aGVuIGNvbmZpZ01BWF9QUklPUklUSUVTIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAzMi4gIEl0IGlzIHZlcnkgcmFyZSB0aGF0IGEgc3lzdGVtIHJlcXVpcmVzIG1vcmUgdGhhbiAxMCB0byAxNSBkaWZmZXJlbmNlIHByaW9yaXRpZXMgYXMgdGFza3MgdGhhdCBzaGFyZSBhIHByaW9yaXR5IHdpbGwgdGltZSBzbGljZS4NCi0gICAgICAgICNlbmRpZg0KKwkvKiBDaGVjayB0aGUgY29uZmlndXJhdGlvbi4gKi8NCisJI2lmKCBjb25maWdNQVhfUFJJT1JJVElFUyA+IDMyICkNCisJCSNlcnJvciBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gY2FuIG9ubHkgYmUgc2V0IHRvIDEgd2hlbiBjb25maWdNQVhfUFJJT1JJVElFUyBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMzIuICBJdCBpcyB2ZXJ5IHJhcmUgdGhhdCBhIHN5c3RlbSByZXF1aXJlcyBtb3JlIHRoYW4gMTAgdG8gMTUgZGlmZmVyZW5jZSBwcmlvcml0aWVzIGFzIHRhc2tzIHRoYXQgc2hhcmUgYSBwcmlvcml0eSB3aWxsIHRpbWUgc2xpY2UuDQorCSNlbmRpZg0KIA0KLS8qIFN0b3JlL2NsZWFyIHRoZSByZWFkeSBwcmlvcml0aWVzIGluIGEgYml0IG1hcC4gKi8NCi0gICAgICAgICNkZWZpbmUgcG9ydFJFQ09SRF9SRUFEWV9QUklPUklUWSggdXhQcmlvcml0eSwgdXhSZWFkeVByaW9yaXRpZXMgKSAgICAoIHV4UmVhZHlQcmlvcml0aWVzICkgfD0gKCAxVUwgPDwgKCB1eFByaW9yaXR5ICkgKQ0KLSAgICAgICAgI2RlZmluZSBwb3J0UkVTRVRfUkVBRFlfUFJJT1JJVFkoIHV4UHJpb3JpdHksIHV4UmVhZHlQcmlvcml0aWVzICkgICAgICggdXhSZWFkeVByaW9yaXRpZXMgKSAmPSB+KCAxVUwgPDwgKCB1eFByaW9yaXR5ICkgKQ0KKwkvKiBTdG9yZS9jbGVhciB0aGUgcmVhZHkgcHJpb3JpdGllcyBpbiBhIGJpdCBtYXAuICovDQorCSNkZWZpbmUgcG9ydFJFQ09SRF9SRUFEWV9QUklPUklUWSggdXhQcmlvcml0eSwgdXhSZWFkeVByaW9yaXRpZXMgKSAoIHV4UmVhZHlQcmlvcml0aWVzICkgfD0gKCAxVUwgPDwgKCB1eFByaW9yaXR5ICkgKQ0KKwkjZGVmaW5lIHBvcnRSRVNFVF9SRUFEWV9QUklPUklUWSggdXhQcmlvcml0eSwgdXhSZWFkeVByaW9yaXRpZXMgKSAoIHV4UmVhZHlQcmlvcml0aWVzICkgJj0gfiggMVVMIDw8ICggdXhQcmlvcml0eSApICkNCiANCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQotICAgICAgICAjZGVmaW5lIHBvcnRHRVRfSElHSEVTVF9QUklPUklUWSggdXhUb3BQcmlvcml0eSwgdXhSZWFkeVByaW9yaXRpZXMgKSAgICB1eFRvcFByaW9yaXR5ID0gKCAzMVVMIC0gX2NseiggKCB1eFJlYWR5UHJpb3JpdGllcyApICkgKQ0KKwkjZGVmaW5lIHBvcnRHRVRfSElHSEVTVF9QUklPUklUWSggdXhUb3BQcmlvcml0eSwgdXhSZWFkeVByaW9yaXRpZXMgKSB1eFRvcFByaW9yaXR5ID0gKCAzMVVMIC0gX2NseiggKCB1eFJlYWR5UHJpb3JpdGllcyApICkgKQ0KIA0KLSAgICAjZW5kaWYgLyogdGFza1JFQ09SRF9SRUFEWV9QUklPUklUWSAqLw0KKyNlbmRpZiAvKiB0YXNrUkVDT1JEX1JFQURZX1BSSU9SSVRZICovDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGFzayB1dGlsaXRpZXMuICovDQogDQotICAgICNkZWZpbmUgcG9ydFlJRUxEKCkgICAgICAgICAgICAgICAgICAgXA0KLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHVpbnQzMl90IHVsQ2F1c2U7ICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgLyogVHJpZ2dlciBzb2Z0d2FyZSBpbnRlcnJ1cHQuICovIFwNCi0gICAgICAgIHVsQ2F1c2UgPSBfQ1AwX0dFVF9DQVVTRSgpOyAgICAgICBcDQotICAgICAgICB1bENhdXNlIHw9IHBvcnRTVzBfQklUOyAgICAgICAgICAgXA0KLSAgICAgICAgX0NQMF9TRVRfQ0FVU0UoIHVsQ2F1c2UgKTsgICAgICAgIFwNCi0gICAgfQ0KKyNkZWZpbmUgcG9ydFlJRUxEKCkJCQkJCQkJCVwNCit7CQkJCQkJCQkJCQkJXA0KK3VpbnQzMl90IHVsQ2F1c2U7CQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJXA0KKwkvKiBUcmlnZ2VyIHNvZnR3YXJlIGludGVycnVwdC4gKi8JCQlcDQorCXVsQ2F1c2UgPSBfQ1AwX0dFVF9DQVVTRSgpOwkJCQkJXA0KKwl1bENhdXNlIHw9IHBvcnRTVzBfQklUOwkJCQkJCVwNCisJX0NQMF9TRVRfQ0FVU0UoIHVsQ2F1c2UgKTsJCQkJCVwNCit9DQogDQotICAgIGV4dGVybiB2b2xhdGlsZSBVQmFzZVR5cGVfdCB1eEludGVycnVwdE5lc3Rpbmc7DQotICAgICNkZWZpbmUgcG9ydEFTU0VSVF9JRl9JTl9JU1IoKSAgICBjb25maWdBU1NFUlQoIHV4SW50ZXJydXB0TmVzdGluZyA9PSAwICkNCitleHRlcm4gdm9sYXRpbGUgVUJhc2VUeXBlX3QgdXhJbnRlcnJ1cHROZXN0aW5nOw0KKyNkZWZpbmUgcG9ydEFTU0VSVF9JRl9JTl9JU1IoKSBjb25maWdBU1NFUlQoIHV4SW50ZXJydXB0TmVzdGluZyA9PSAwICkNCiANCi0gICAgI2RlZmluZSBwb3J0Tk9QKCkgICAgICAgICAgICAgICAgIF9fYXNtIHZvbGF0aWxlICggIm5vcCIgKQ0KKyNkZWZpbmUgcG9ydE5PUCgpCV9fYXNtIHZvbGF0aWxlICggIm5vcCIgKQ0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkgX19hdHRyaWJ1dGVfXyggKCBub3JldHVybiApICkNCi0gICAgI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICAgICAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQotICAgICNkZWZpbmUgcG9ydEVORF9TV0lUQ0hJTkdfSVNSKCB4U3dpdGNoUmVxdWlyZWQgKSBcDQotICAgIGlmKCB4U3dpdGNoUmVxdWlyZWQgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBwb3J0WUlFTEQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIH0NCisjZGVmaW5lIHBvcnRFTkRfU1dJVENISU5HX0lTUiggeFN3aXRjaFJlcXVpcmVkICkJaWYoIHhTd2l0Y2hSZXF1aXJlZCApCVwNCisJCQkJCQkJCQkJCQkJewkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCXBvcnRZSUVMRCgpOwkJXA0KKwkJCQkJCQkJCQkJCQl9DQogDQogLyogUmVxdWlyZWQgYnkgdGhlIGtlcm5lbCBhd2FyZSBkZWJ1Z2dlci4gKi8NCi0gICAgI2lmZGVmIF9fREVCVUcNCi0gICAgICAgICNkZWZpbmUgcG9ydFJFTU9WRV9TVEFUSUNfUVVBTElGSUVSDQotICAgICNlbmRpZg0KKyNpZmRlZiBfX0RFQlVHDQorCSNkZWZpbmUgcG9ydFJFTU9WRV9TVEFUSUNfUVVBTElGSUVSDQorI2VuZGlmDQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgfQ0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQogDQogI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvTVNWQy1NaW5nVy9wb3J0LmMgYi9wb3J0YWJsZS9NU1ZDLU1pbmdXL3BvcnQuYwppbmRleCA3OWNjYTQ5Li45ODJlZjBkIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9NU1ZDLU1pbmdXL3BvcnQuYworKysgYi9wb3J0YWJsZS9NU1ZDLU1pbmdXL3BvcnQuYwpAQCAtMzMsMTkgKzMzLDE5IEBACiAjaW5jbHVkZSAidGFzay5oIg0KIA0KICNpZmRlZiBfX0dOVUNfXw0KLSAgICAjaW5jbHVkZSAibW1zeXN0ZW0uaCINCisJI2luY2x1ZGUgIm1tc3lzdGVtLmgiDQogI2Vsc2UNCi0gICAgI3ByYWdtYSBjb21tZW50KGxpYiwgIndpbm1tLmxpYiIpDQorCSNwcmFnbWEgY29tbWVudChsaWIsICJ3aW5tbS5saWIiKQ0KICNlbmRpZg0KIA0KLSNkZWZpbmUgcG9ydE1BWF9JTlRFUlJVUFRTICAgICAgICAgICAgICAgICAgICAgICAgICAoICggdWludDMyX3QgKSBzaXplb2YoIHVpbnQzMl90ICkgKiA4VUwgKSAvKiBUaGUgbnVtYmVyIG9mIGJpdHMgaW4gYW4gdWludDMyX3QuICovDQotI2RlZmluZSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyAgICAgICAgICAgICAgICAgICAgICggKCB1aW50MzJfdCApIDAgKQ0KKyNkZWZpbmUgcG9ydE1BWF9JTlRFUlJVUFRTCQkJCSggKCB1aW50MzJfdCApIHNpemVvZiggdWludDMyX3QgKSAqIDhVTCApIC8qIFRoZSBudW1iZXIgb2YgYml0cyBpbiBhbiB1aW50MzJfdC4gKi8NCisjZGVmaW5lIHBvcnROT19DUklUSUNBTF9ORVNUSU5HIAkJKCAoIHVpbnQzMl90ICkgMCApDQogDQogLyogVGhlIHByaW9yaXRpZXMgYXQgd2hpY2ggdGhlIHZhcmlvdXMgY29tcG9uZW50cyBvZiB0aGUgc2ltdWxhdGlvbiBleGVjdXRlLiAqLw0KLSNkZWZpbmUgcG9ydERFTEVURV9TRUxGX1RIUkVBRF9QUklPUklUWSAgICAgICAgICAgICBUSFJFQURfUFJJT1JJVFlfVElNRV9DUklUSUNBTCAvKiBNdXN0IGJlIGhpZ2hlc3QuICovDQotI2RlZmluZSBwb3J0U0lNVUxBVEVEX0lOVEVSUlVQVFNfVEhSRUFEX1BSSU9SSVRZICAgIFRIUkVBRF9QUklPUklUWV9USU1FX0NSSVRJQ0FMDQotI2RlZmluZSBwb3J0U0lNVUxBVEVEX1RJTUVSX1RIUkVBRF9QUklPUklUWSAgICAgICAgIFRIUkVBRF9QUklPUklUWV9ISUdIRVNUDQotI2RlZmluZSBwb3J0VEFTS19USFJFQURfUFJJT1JJVFkgICAgICAgICAgICAgICAgICAgIFRIUkVBRF9QUklPUklUWV9BQk9WRV9OT1JNQUwNCisjZGVmaW5lIHBvcnRERUxFVEVfU0VMRl9USFJFQURfUFJJT1JJVFkJCQkgVEhSRUFEX1BSSU9SSVRZX1RJTUVfQ1JJVElDQUwgLyogTXVzdCBiZSBoaWdoZXN0LiAqLw0KKyNkZWZpbmUgcG9ydFNJTVVMQVRFRF9JTlRFUlJVUFRTX1RIUkVBRF9QUklPUklUWSBUSFJFQURfUFJJT1JJVFlfVElNRV9DUklUSUNBTA0KKyNkZWZpbmUgcG9ydFNJTVVMQVRFRF9USU1FUl9USFJFQURfUFJJT1JJVFkJCSBUSFJFQURfUFJJT1JJVFlfSElHSEVTVA0KKyNkZWZpbmUgcG9ydFRBU0tfVEhSRUFEX1BSSU9SSVRZCQkJCSBUSFJFQURfUFJJT1JJVFlfQUJPVkVfTk9STUFMDQogDQogLyoNCiAgKiBDcmVhdGVkIGFzIGEgaGlnaCBwcmlvcml0eSB0aHJlYWQsIHRoaXMgZnVuY3Rpb24gdXNlcyBhIHRpbWVyIHRvIHNpbXVsYXRlDQpAQCAtODYsNDcgKzg2LDQ3IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBUaGUgV0lOMzIgc2ltdWxhdG9yIHJ1bnMgZWFjaCB0YXNrIGluIGEgdGhyZWFkLiAgVGhlIGNvbnRleHQgc3dpdGNoaW5nIGlzDQotICogbWFuYWdlZCBieSB0aGUgdGhyZWFkcywgc28gdGhlIHRhc2sgc3RhY2sgZG9lcyBub3QgaGF2ZSB0byBiZSBtYW5hZ2VkIGRpcmVjdGx5LA0KLSAqIGFsdGhvdWdoIHRoZSB0YXNrIHN0YWNrIGlzIHN0aWxsIHVzZWQgdG8gaG9sZCBhbiB4VGhyZWFkU3RhdGUgc3RydWN0dXJlIHRoaXMgaXMNCi0gKiB0aGUgb25seSB0aGluZyBpdCB3aWxsIGV2ZXIgaG9sZC4gIFRoZSBzdHJ1Y3R1cmUgaW5kaXJlY3RseSBtYXBzIHRoZSB0YXNrIGhhbmRsZQ0KLSAqIHRvIGEgdGhyZWFkIGhhbmRsZS4gKi8NCittYW5hZ2VkIGJ5IHRoZSB0aHJlYWRzLCBzbyB0aGUgdGFzayBzdGFjayBkb2VzIG5vdCBoYXZlIHRvIGJlIG1hbmFnZWQgZGlyZWN0bHksDQorYWx0aG91Z2ggdGhlIHRhc2sgc3RhY2sgaXMgc3RpbGwgdXNlZCB0byBob2xkIGFuIHhUaHJlYWRTdGF0ZSBzdHJ1Y3R1cmUgdGhpcyBpcw0KK3RoZSBvbmx5IHRoaW5nIGl0IHdpbGwgZXZlciBob2xkLiAgVGhlIHN0cnVjdHVyZSBpbmRpcmVjdGx5IG1hcHMgdGhlIHRhc2sgaGFuZGxlDQordG8gYSB0aHJlYWQgaGFuZGxlLiAqLw0KIHR5cGVkZWYgc3RydWN0DQogew0KLSAgICAvKiBIYW5kbGUgb2YgdGhlIHRocmVhZCB0aGF0IGV4ZWN1dGVzIHRoZSB0YXNrLiAqLw0KLSAgICB2b2lkICogcHZUaHJlYWQ7DQorCS8qIEhhbmRsZSBvZiB0aGUgdGhyZWFkIHRoYXQgZXhlY3V0ZXMgdGhlIHRhc2suICovDQorCXZvaWQgKnB2VGhyZWFkOw0KIA0KLSAgICAvKiBFdmVudCB1c2VkIHRvIG1ha2Ugc3VyZSB0aGUgdGhyZWFkIGRvZXMgbm90IGV4ZWN1dGUgcGFzdCBhIHlpZWxkIHBvaW50DQotICAgICAqIGJldHdlZW4gdGhlIGNhbGwgdG8gU3VzcGVuZFRocmVhZCgpIHRvIHN1c3BlbmQgdGhlIHRocmVhZCBhbmQgdGhlDQotICAgICAqIGFzeW5jaHJvbm91cyBTdXNwZW5kVGhyZWFkKCkgb3BlcmF0aW9uIGFjdHVhbGx5IGJlaW5nIHBlcmZvcm1lZC4gKi8NCi0gICAgdm9pZCAqIHB2WWllbGRFdmVudDsNCisJLyogRXZlbnQgdXNlZCB0byBtYWtlIHN1cmUgdGhlIHRocmVhZCBkb2VzIG5vdCBleGVjdXRlIHBhc3QgYSB5aWVsZCBwb2ludA0KKwliZXR3ZWVuIHRoZSBjYWxsIHRvIFN1c3BlbmRUaHJlYWQoKSB0byBzdXNwZW5kIHRoZSB0aHJlYWQgYW5kIHRoZQ0KKwlhc3luY2hyb25vdXMgU3VzcGVuZFRocmVhZCgpIG9wZXJhdGlvbiBhY3R1YWxseSBiZWluZyBwZXJmb3JtZWQuICovDQorCXZvaWQgKnB2WWllbGRFdmVudDsNCiB9IFRocmVhZFN0YXRlX3Q7DQogDQogLyogU2ltdWxhdGVkIGludGVycnVwdHMgd2FpdGluZyB0byBiZSBwcm9jZXNzZWQuICBUaGlzIGlzIGEgYml0IG1hc2sgd2hlcmUgZWFjaA0KLSAqIGJpdCByZXByZXNlbnRzIG9uZSBpbnRlcnJ1cHQsIHNvIGEgbWF4aW11bSBvZiAzMiBpbnRlcnJ1cHRzIGNhbiBiZSBzaW11bGF0ZWQuICovDQorYml0IHJlcHJlc2VudHMgb25lIGludGVycnVwdCwgc28gYSBtYXhpbXVtIG9mIDMyIGludGVycnVwdHMgY2FuIGJlIHNpbXVsYXRlZC4gKi8NCiBzdGF0aWMgdm9sYXRpbGUgdWludDMyX3QgdWxQZW5kaW5nSW50ZXJydXB0cyA9IDBVTDsNCiANCiAvKiBBbiBldmVudCB1c2VkIHRvIGluZm9ybSB0aGUgc2ltdWxhdGVkIGludGVycnVwdCBwcm9jZXNzaW5nIHRocmVhZCAoYSBoaWdoDQotICogcHJpb3JpdHkgdGhyZWFkIHRoYXQgc2ltdWxhdGVkIGludGVycnVwdCBwcm9jZXNzaW5nKSB0aGF0IGFuIGludGVycnVwdCBpcw0KLSAqIHBlbmRpbmcuICovDQotc3RhdGljIHZvaWQgKiBwdkludGVycnVwdEV2ZW50ID0gTlVMTDsNCitwcmlvcml0eSB0aHJlYWQgdGhhdCBzaW11bGF0ZWQgaW50ZXJydXB0IHByb2Nlc3NpbmcpIHRoYXQgYW4gaW50ZXJydXB0IGlzDQorcGVuZGluZy4gKi8NCitzdGF0aWMgdm9pZCAqcHZJbnRlcnJ1cHRFdmVudCA9IE5VTEw7DQogDQogLyogTXV0ZXggdXNlZCB0byBwcm90ZWN0IGFsbCB0aGUgc2ltdWxhdGVkIGludGVycnVwdCB2YXJpYWJsZXMgdGhhdCBhcmUgYWNjZXNzZWQNCi0gKiBieSBtdWx0aXBsZSB0aHJlYWRzLiAqLw0KLXN0YXRpYyB2b2lkICogcHZJbnRlcnJ1cHRFdmVudE11dGV4ID0gTlVMTDsNCitieSBtdWx0aXBsZSB0aHJlYWRzLiAqLw0KK3N0YXRpYyB2b2lkICpwdkludGVycnVwdEV2ZW50TXV0ZXggPSBOVUxMOw0KIA0KIC8qIFRoZSBjcml0aWNhbCBuZXN0aW5nIGNvdW50IGZvciB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyB0YXNrLiAgVGhpcyBpcw0KLSAqIGluaXRpYWxpc2VkIHRvIGEgbm9uLXplcm8gdmFsdWUgc28gaW50ZXJydXB0cyBkbyBub3QgYmVjb21lIGVuYWJsZWQgZHVyaW5nDQotICogdGhlIGluaXRpYWxpc2F0aW9uIHBoYXNlLiAgQXMgZWFjaCB0YXNrIGhhcyBpdHMgb3duIGNyaXRpY2FsIG5lc3RpbmcgdmFsdWUNCi0gKiB1bENyaXRpY2FsTmVzdGluZyB3aWxsIGdldCBzZXQgdG8gemVybyB3aGVuIHRoZSBmaXJzdCB0YXNrIHJ1bnMuICBUaGlzDQotICogaW5pdGlhbGlzYXRpb24gaXMgcHJvYmFibHkgbm90IGNyaXRpY2FsIGluIHRoaXMgc2ltdWxhdGVkIGVudmlyb25tZW50IGFzIHRoZQ0KLSAqIHNpbXVsYXRlZCBpbnRlcnJ1cHQgaGFuZGxlcnMgZG8gbm90IGdldCBjcmVhdGVkIHVudGlsIHRoZSBGcmVlUlRPUyBzY2hlZHVsZXIgaXMNCi0gKiBzdGFydGVkIGFueXdheS4gKi8NCitpbml0aWFsaXNlZCB0byBhIG5vbi16ZXJvIHZhbHVlIHNvIGludGVycnVwdHMgZG8gbm90IGJlY29tZSBlbmFibGVkIGR1cmluZw0KK3RoZSBpbml0aWFsaXNhdGlvbiBwaGFzZS4gIEFzIGVhY2ggdGFzayBoYXMgaXRzIG93biBjcml0aWNhbCBuZXN0aW5nIHZhbHVlDQordWxDcml0aWNhbE5lc3Rpbmcgd2lsbCBnZXQgc2V0IHRvIHplcm8gd2hlbiB0aGUgZmlyc3QgdGFzayBydW5zLiAgVGhpcw0KK2luaXRpYWxpc2F0aW9uIGlzIHByb2JhYmx5IG5vdCBjcml0aWNhbCBpbiB0aGlzIHNpbXVsYXRlZCBlbnZpcm9ubWVudCBhcyB0aGUNCitzaW11bGF0ZWQgaW50ZXJydXB0IGhhbmRsZXJzIGRvIG5vdCBnZXQgY3JlYXRlZCB1bnRpbCB0aGUgRnJlZVJUT1Mgc2NoZWR1bGVyIGlzDQorc3RhcnRlZCBhbnl3YXkuICovDQogc3RhdGljIHZvbGF0aWxlIHVpbnQzMl90IHVsQ3JpdGljYWxOZXN0aW5nID0gOTk5OVVMOw0KIA0KIC8qIEhhbmRsZXJzIGZvciBhbGwgdGhlIHNpbXVsYXRlZCBzb2Z0d2FyZSBpbnRlcnJ1cHRzLiAgVGhlIGZpcnN0IHR3byBwb3NpdGlvbnMNCi0gKiBhcmUgdXNlZCBmb3IgdGhlIFlpZWxkIGFuZCBUaWNrIGludGVycnVwdHMgc28gYXJlIGhhbmRsZWQgc2xpZ2h0bHkgZGlmZmVyZW50bHksDQotICogYWxsIHRoZSBvdGhlciBpbnRlcnJ1cHRzIGNhbiBiZSB1c2VyIGRlZmluZWQuICovDQotc3RhdGljIHVpbnQzMl90ICgqIHVsSXNySGFuZGxlclsgcG9ydE1BWF9JTlRFUlJVUFRTIF0pKCB2b2lkICkgPSB7IDAgfTsNCithcmUgdXNlZCBmb3IgdGhlIFlpZWxkIGFuZCBUaWNrIGludGVycnVwdHMgc28gYXJlIGhhbmRsZWQgc2xpZ2h0bHkgZGlmZmVyZW50bHksDQorYWxsIHRoZSBvdGhlciBpbnRlcnJ1cHRzIGNhbiBiZSB1c2VyIGRlZmluZWQuICovDQorc3RhdGljIHVpbnQzMl90ICgqdWxJc3JIYW5kbGVyWyBwb3J0TUFYX0lOVEVSUlVQVFMgXSkoIHZvaWQgKSA9IHsgMCB9Ow0KIA0KIC8qIFBvaW50ZXIgdG8gdGhlIFRDQiBvZiB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyB0YXNrLiAqLw0KIGV4dGVybiB2b2lkICogdm9sYXRpbGUgcHhDdXJyZW50VENCOw0KQEAgLTEzOCw1NzIgKzEzOCw1NjIgQEAKIA0KIHN0YXRpYyBEV09SRCBXSU5BUEkgcHJ2U2ltdWxhdGVkUGVyaXBoZXJhbFRpbWVyKCBMUFZPSUQgbHBQYXJhbWV0ZXIgKQ0KIHsNCi0gICAgVGlja1R5cGVfdCB4TWluaW11bVdpbmRvd3NCbG9ja1RpbWU7DQotICAgIFRJTUVDQVBTIHhUaW1lQ2FwczsNCitUaWNrVHlwZV90IHhNaW5pbXVtV2luZG93c0Jsb2NrVGltZTsNCitUSU1FQ0FQUyB4VGltZUNhcHM7DQogDQotICAgIC8qIFNldCB0aGUgdGltZXIgcmVzb2x1dGlvbiB0byB0aGUgbWF4aW11bSBwb3NzaWJsZS4gKi8NCi0gICAgaWYoIHRpbWVHZXREZXZDYXBzKCAmeFRpbWVDYXBzLCBzaXplb2YoIHhUaW1lQ2FwcyApICkgPT0gTU1TWVNFUlJfTk9FUlJPUiApDQotICAgIHsNCi0gICAgICAgIHhNaW5pbXVtV2luZG93c0Jsb2NrVGltZSA9ICggVGlja1R5cGVfdCApIHhUaW1lQ2Fwcy53UGVyaW9kTWluOw0KLSAgICAgICAgdGltZUJlZ2luUGVyaW9kKCB4VGltZUNhcHMud1BlcmlvZE1pbiApOw0KKwkvKiBTZXQgdGhlIHRpbWVyIHJlc29sdXRpb24gdG8gdGhlIG1heGltdW0gcG9zc2libGUuICovDQorCWlmKCB0aW1lR2V0RGV2Q2FwcyggJnhUaW1lQ2Fwcywgc2l6ZW9mKCB4VGltZUNhcHMgKSApID09IE1NU1lTRVJSX05PRVJST1IgKQ0KKwl7DQorCQl4TWluaW11bVdpbmRvd3NCbG9ja1RpbWUgPSAoIFRpY2tUeXBlX3QgKSB4VGltZUNhcHMud1BlcmlvZE1pbjsNCisJCXRpbWVCZWdpblBlcmlvZCggeFRpbWVDYXBzLndQZXJpb2RNaW4gKTsNCiANCi0gICAgICAgIC8qIFJlZ2lzdGVyIGFuIGV4aXQgaGFuZGxlciBzbyB0aGUgdGltZUJlZ2luUGVyaW9kKCkgZnVuY3Rpb24gY2FuIGJlDQotICAgICAgICAgKiBtYXRjaGVkIHdpdGggYSB0aW1lRW5kUGVyaW9kKCkgd2hlbiB0aGUgYXBwbGljYXRpb24gZXhpdHMuICovDQotICAgICAgICBTZXRDb25zb2xlQ3RybEhhbmRsZXIoIHBydkVuZFByb2Nlc3MsIFRSVUUgKTsNCi0gICAgfQ0KLSAgICBlbHNlDQotICAgIHsNCi0gICAgICAgIHhNaW5pbXVtV2luZG93c0Jsb2NrVGltZSA9ICggVGlja1R5cGVfdCApIDIwOw0KLSAgICB9DQorCQkvKiBSZWdpc3RlciBhbiBleGl0IGhhbmRsZXIgc28gdGhlIHRpbWVCZWdpblBlcmlvZCgpIGZ1bmN0aW9uIGNhbiBiZQ0KKwkJbWF0Y2hlZCB3aXRoIGEgdGltZUVuZFBlcmlvZCgpIHdoZW4gdGhlIGFwcGxpY2F0aW9uIGV4aXRzLiAqLw0KKwkJU2V0Q29uc29sZUN0cmxIYW5kbGVyKCBwcnZFbmRQcm9jZXNzLCBUUlVFICk7DQorCX0NCisJZWxzZQ0KKwl7DQorCQl4TWluaW11bVdpbmRvd3NCbG9ja1RpbWUgPSAoIFRpY2tUeXBlX3QgKSAyMDsNCisJfQ0KIA0KLSAgICAvKiBKdXN0IHRvIHByZXZlbnQgY29tcGlsZXIgd2FybmluZ3MuICovDQotICAgICggdm9pZCApIGxwUGFyYW1ldGVyOw0KKwkvKiBKdXN0IHRvIHByZXZlbnQgY29tcGlsZXIgd2FybmluZ3MuICovDQorCSggdm9pZCApIGxwUGFyYW1ldGVyOw0KIA0KLSAgICBmb3IoIDsgOyApDQotICAgIHsNCi0gICAgICAgIC8qIFdhaXQgdW50aWwgdGhlIHRpbWVyIGV4cGlyZXMgYW5kIHdlIGNhbiBhY2Nlc3MgdGhlIHNpbXVsYXRlZCBpbnRlcnJ1cHQNCi0gICAgICAgICAqIHZhcmlhYmxlcy4gICpOT1RFKiB0aGlzIGlzIG5vdCBhICdyZWFsIHRpbWUnIHdheSBvZiBnZW5lcmF0aW5nIHRpY2sNCi0gICAgICAgICAqIGV2ZW50cyBhcyB0aGUgbmV4dCB3YWtlIHRpbWUgc2hvdWxkIGJlIHJlbGF0aXZlIHRvIHRoZSBwcmV2aW91cyB3YWtlDQotICAgICAgICAgKiB0aW1lLCBub3QgdGhlIHRpbWUgdGhhdCBTbGVlcCgpIGlzIGNhbGxlZC4gIEl0IGlzIGRvbmUgdGhpcyB3YXkgdG8NCi0gICAgICAgICAqIHByZXZlbnQgb3ZlcnJ1bnMgaW4gdGhpcyB2ZXJ5IG5vbiByZWFsIHRpbWUgc2ltdWxhdGVkL2VtdWxhdGVkDQotICAgICAgICAgKiBlbnZpcm9ubWVudC4gKi8NCi0gICAgICAgIGlmKCBwb3J0VElDS19QRVJJT0RfTVMgPCB4TWluaW11bVdpbmRvd3NCbG9ja1RpbWUgKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIFNsZWVwKCB4TWluaW11bVdpbmRvd3NCbG9ja1RpbWUgKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGVsc2UNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBTbGVlcCggcG9ydFRJQ0tfUEVSSU9EX01TICk7DQotICAgICAgICB9DQorCWZvciggOzsgKQ0KKwl7DQorCQkvKiBXYWl0IHVudGlsIHRoZSB0aW1lciBleHBpcmVzIGFuZCB3ZSBjYW4gYWNjZXNzIHRoZSBzaW11bGF0ZWQgaW50ZXJydXB0DQorCQl2YXJpYWJsZXMuICAqTk9URSogdGhpcyBpcyBub3QgYSAncmVhbCB0aW1lJyB3YXkgb2YgZ2VuZXJhdGluZyB0aWNrDQorCQlldmVudHMgYXMgdGhlIG5leHQgd2FrZSB0aW1lIHNob3VsZCBiZSByZWxhdGl2ZSB0byB0aGUgcHJldmlvdXMgd2FrZQ0KKwkJdGltZSwgbm90IHRoZSB0aW1lIHRoYXQgU2xlZXAoKSBpcyBjYWxsZWQuICBJdCBpcyBkb25lIHRoaXMgd2F5IHRvDQorCQlwcmV2ZW50IG92ZXJydW5zIGluIHRoaXMgdmVyeSBub24gcmVhbCB0aW1lIHNpbXVsYXRlZC9lbXVsYXRlZA0KKwkJZW52aXJvbm1lbnQuICovDQorCQlpZiggcG9ydFRJQ0tfUEVSSU9EX01TIDwgeE1pbmltdW1XaW5kb3dzQmxvY2tUaW1lICkNCisJCXsNCisJCQlTbGVlcCggeE1pbmltdW1XaW5kb3dzQmxvY2tUaW1lICk7DQorCQl9DQorCQllbHNlDQorCQl7DQorCQkJU2xlZXAoIHBvcnRUSUNLX1BFUklPRF9NUyApOw0KKwkJfQ0KIA0KLSAgICAgICAgY29uZmlnQVNTRVJUKCB4UG9ydFJ1bm5pbmcgKTsNCisJCWNvbmZpZ0FTU0VSVCggeFBvcnRSdW5uaW5nICk7DQogDQotICAgICAgICAvKiBDYW4ndCBwcm9jZWVkIGlmIGluIGEgY3JpdGljYWwgc2VjdGlvbiBhcyBwdkludGVycnVwdEV2ZW50TXV0ZXggd29uJ3QNCi0gICAgICAgICAqIGJlIGF2YWlsYWJsZS4gKi8NCi0gICAgICAgIFdhaXRGb3JTaW5nbGVPYmplY3QoIHB2SW50ZXJydXB0RXZlbnRNdXRleCwgSU5GSU5JVEUgKTsNCisJCS8qIENhbid0IHByb2NlZWQgaWYgaW4gYSBjcml0aWNhbCBzZWN0aW9uIGFzIHB2SW50ZXJydXB0RXZlbnRNdXRleCB3b24ndA0KKwkJYmUgYXZhaWxhYmxlLiAqLw0KKwkJV2FpdEZvclNpbmdsZU9iamVjdCggcHZJbnRlcnJ1cHRFdmVudE11dGV4LCBJTkZJTklURSApOw0KIA0KLSAgICAgICAgLyogVGhlIHRpbWVyIGhhcyBleHBpcmVkLCBnZW5lcmF0ZSB0aGUgc2ltdWxhdGVkIHRpY2sgZXZlbnQuICovDQotICAgICAgICB1bFBlbmRpbmdJbnRlcnJ1cHRzIHw9ICggMSA8PCBwb3J0SU5URVJSVVBUX1RJQ0sgKTsNCisJCS8qIFRoZSB0aW1lciBoYXMgZXhwaXJlZCwgZ2VuZXJhdGUgdGhlIHNpbXVsYXRlZCB0aWNrIGV2ZW50LiAqLw0KKwkJdWxQZW5kaW5nSW50ZXJydXB0cyB8PSAoIDEgPDwgcG9ydElOVEVSUlVQVF9USUNLICk7DQogDQotICAgICAgICAvKiBUaGUgaW50ZXJydXB0IGlzIG5vdyBwZW5kaW5nIC0gbm90aWZ5IHRoZSBzaW11bGF0ZWQgaW50ZXJydXB0DQotICAgICAgICAgKiBoYW5kbGVyIHRocmVhZC4gIE11c3QgYmUgb3V0c2lkZSBvZiBhIGNyaXRpY2FsIHNlY3Rpb24gdG8gZ2V0IGhlcmUgc28NCi0gICAgICAgICAqIHRoZSBoYW5kbGVyIHRocmVhZCBjYW4gZXhlY3V0ZSBpbW1lZGlhdGVseSBwdkludGVycnVwdEV2ZW50TXV0ZXggaXMNCi0gICAgICAgICAqIHJlbGVhc2VkLiAqLw0KLSAgICAgICAgY29uZmlnQVNTRVJUKCB1bENyaXRpY2FsTmVzdGluZyA9PSAwVUwgKTsNCi0gICAgICAgIFNldEV2ZW50KCBwdkludGVycnVwdEV2ZW50ICk7DQorCQkvKiBUaGUgaW50ZXJydXB0IGlzIG5vdyBwZW5kaW5nIC0gbm90aWZ5IHRoZSBzaW11bGF0ZWQgaW50ZXJydXB0DQorCQloYW5kbGVyIHRocmVhZC4gIE11c3QgYmUgb3V0c2lkZSBvZiBhIGNyaXRpY2FsIHNlY3Rpb24gdG8gZ2V0IGhlcmUgc28NCisJCXRoZSBoYW5kbGVyIHRocmVhZCBjYW4gZXhlY3V0ZSBpbW1lZGlhdGVseSBwdkludGVycnVwdEV2ZW50TXV0ZXggaXMNCisJCXJlbGVhc2VkLiAqLw0KKwkJY29uZmlnQVNTRVJUKCB1bENyaXRpY2FsTmVzdGluZyA9PSAwVUwgKTsNCisJCVNldEV2ZW50KCBwdkludGVycnVwdEV2ZW50ICk7DQogDQotICAgICAgICAvKiBHaXZlIGJhY2sgdGhlIG11dGV4IHNvIHRoZSBzaW11bGF0ZWQgaW50ZXJydXB0IGhhbmRsZXIgdW5ibG9ja3MNCi0gICAgICAgICAqIGFuZCBjYW4gYWNjZXNzIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciB2YXJpYWJsZXMuICovDQotICAgICAgICBSZWxlYXNlTXV0ZXgoIHB2SW50ZXJydXB0RXZlbnRNdXRleCApOw0KLSAgICB9DQorCQkvKiBHaXZlIGJhY2sgdGhlIG11dGV4IHNvIHRoZSBzaW11bGF0ZWQgaW50ZXJydXB0IGhhbmRsZXIgdW5ibG9ja3MNCisJCWFuZCBjYW4gYWNjZXNzIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciB2YXJpYWJsZXMuICovDQorCQlSZWxlYXNlTXV0ZXgoIHB2SW50ZXJydXB0RXZlbnRNdXRleCApOw0KKwl9DQogDQotICAgICNpZmRlZiBfX0dOVUNfXw0KLQ0KLSAgICAgICAgLyogU2hvdWxkIG5ldmVyIHJlYWNoIGhlcmUgLSBNaW5nVyBjb21wbGFpbnMgaWYgeW91IGxlYXZlIHRoaXMgbGluZSBvdXQsDQotICAgICAgICAgKiBNU1ZDIGNvbXBsYWlucyBpZiB5b3UgcHV0IGl0IGluLiAqLw0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgICNlbmRpZg0KKwkjaWZkZWYgX19HTlVDX18NCisJCS8qIFNob3VsZCBuZXZlciByZWFjaCBoZXJlIC0gTWluZ1cgY29tcGxhaW5zIGlmIHlvdSBsZWF2ZSB0aGlzIGxpbmUgb3V0LA0KKwkJTVNWQyBjb21wbGFpbnMgaWYgeW91IHB1dCBpdCBpbi4gKi8NCisJCXJldHVybiAwOw0KKwkjZW5kaWYNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogc3RhdGljIEJPT0wgV0lOQVBJIHBydkVuZFByb2Nlc3MoIERXT1JEIGR3Q3RybFR5cGUgKQ0KIHsNCi0gICAgVElNRUNBUFMgeFRpbWVDYXBzOw0KK1RJTUVDQVBTIHhUaW1lQ2FwczsNCiANCi0gICAgKCB2b2lkICkgZHdDdHJsVHlwZTsNCisJKCB2b2lkICkgZHdDdHJsVHlwZTsNCiANCi0gICAgaWYoIHRpbWVHZXREZXZDYXBzKCAmeFRpbWVDYXBzLCBzaXplb2YoIHhUaW1lQ2FwcyApICkgPT0gTU1TWVNFUlJfTk9FUlJPUiApDQotICAgIHsNCi0gICAgICAgIC8qIE1hdGNoIHRoZSBjYWxsIHRvIHRpbWVCZWdpblBlcmlvZCggeFRpbWVDYXBzLndQZXJpb2RNaW4gKSBtYWRlIHdoZW4NCi0gICAgICAgICAqIHRoZSBwcm9jZXNzIHN0YXJ0ZWQgd2l0aCBhIHRpbWVFbmRQZXJpb2QoKSBhcyB0aGUgcHJvY2VzcyBleGl0cy4gKi8NCi0gICAgICAgIHRpbWVFbmRQZXJpb2QoIHhUaW1lQ2Fwcy53UGVyaW9kTWluICk7DQotICAgIH0NCisJaWYoIHRpbWVHZXREZXZDYXBzKCAmeFRpbWVDYXBzLCBzaXplb2YoIHhUaW1lQ2FwcyApICkgPT0gTU1TWVNFUlJfTk9FUlJPUiApDQorCXsNCisJCS8qIE1hdGNoIHRoZSBjYWxsIHRvIHRpbWVCZWdpblBlcmlvZCggeFRpbWVDYXBzLndQZXJpb2RNaW4gKSBtYWRlIHdoZW4NCisJCXRoZSBwcm9jZXNzIHN0YXJ0ZWQgd2l0aCBhIHRpbWVFbmRQZXJpb2QoKSBhcyB0aGUgcHJvY2VzcyBleGl0cy4gKi8NCisJCXRpbWVFbmRQZXJpb2QoIHhUaW1lQ2Fwcy53UGVyaW9kTWluICk7DQorCX0NCiANCi0gICAgcmV0dXJuIHBkRkFMU0U7DQorCXJldHVybiBwZEZBTFNFOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi1TdGFja1R5cGVfdCAqIHB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKiBweFRvcE9mU3RhY2ssDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqIHB2UGFyYW1ldGVycyApDQorU3RhY2tUeXBlX3QgKnB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKnB4VG9wT2ZTdGFjaywgVGFza0Z1bmN0aW9uX3QgcHhDb2RlLCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KIHsNCi0gICAgVGhyZWFkU3RhdGVfdCAqIHB4VGhyZWFkU3RhdGUgPSBOVUxMOw0KLSAgICBpbnQ4X3QgKiBwY1RvcE9mU3RhY2sgPSAoIGludDhfdCAqICkgcHhUb3BPZlN0YWNrOw0KLSAgICBjb25zdCBTSVpFX1QgeFN0YWNrU2l6ZSA9IDEwMjQ7IC8qIFNldCB0aGUgc2l6ZSB0byBhIHNtYWxsIG51bWJlciB3aGljaCB3aWxsIGdldCByb3VuZGVkIHVwIHRvIHRoZSBtaW5pbXVtIHBvc3NpYmxlLiAqLw0KK1RocmVhZFN0YXRlX3QgKnB4VGhyZWFkU3RhdGUgPSBOVUxMOw0KK2ludDhfdCAqcGNUb3BPZlN0YWNrID0gKCBpbnQ4X3QgKiApIHB4VG9wT2ZTdGFjazsNCitjb25zdCBTSVpFX1QgeFN0YWNrU2l6ZSA9IDEwMjQ7IC8qIFNldCB0aGUgc2l6ZSB0byBhIHNtYWxsIG51bWJlciB3aGljaCB3aWxsIGdldCByb3VuZGVkIHVwIHRvIHRoZSBtaW5pbXVtIHBvc3NpYmxlLiAqLw0KIA0KLSAgICAvKiBJbiB0aGlzIHNpbXVsYXRlZCBjYXNlIGEgc3RhY2sgaXMgbm90IGluaXRpYWxpc2VkLCBidXQgaW5zdGVhZCBhIHRocmVhZA0KLSAgICAgKiBpcyBjcmVhdGVkIHRoYXQgd2lsbCBleGVjdXRlIHRoZSB0YXNrIGJlaW5nIGNyZWF0ZWQuICBUaGUgdGhyZWFkIGhhbmRsZXMNCi0gICAgICogdGhlIGNvbnRleHQgc3dpdGNoaW5nIGl0c2VsZi4gIFRoZSBUaHJlYWRTdGF0ZV90IG9iamVjdCBpcyBwbGFjZWQgb250bw0KLSAgICAgKiB0aGUgc3RhY2sgdGhhdCB3YXMgY3JlYXRlZCBmb3IgdGhlIHRhc2sgLSBzbyB0aGUgc3RhY2sgYnVmZmVyIGlzIHN0aWxsDQotICAgICAqIHVzZWQsIGp1c3Qgbm90IGluIHRoZSBjb252ZW50aW9uYWwgd2F5LiAgSXQgd2lsbCBub3QgYmUgdXNlZCBmb3IgYW55dGhpbmcNCi0gICAgICogb3RoZXIgdGhhbiBob2xkaW5nIHRoaXMgc3RydWN0dXJlLiAqLw0KLSAgICBweFRocmVhZFN0YXRlID0gKCBUaHJlYWRTdGF0ZV90ICogKSAoIHBjVG9wT2ZTdGFjayAtIHNpemVvZiggVGhyZWFkU3RhdGVfdCApICk7DQorCS8qIEluIHRoaXMgc2ltdWxhdGVkIGNhc2UgYSBzdGFjayBpcyBub3QgaW5pdGlhbGlzZWQsIGJ1dCBpbnN0ZWFkIGEgdGhyZWFkDQorCWlzIGNyZWF0ZWQgdGhhdCB3aWxsIGV4ZWN1dGUgdGhlIHRhc2sgYmVpbmcgY3JlYXRlZC4gIFRoZSB0aHJlYWQgaGFuZGxlcw0KKwl0aGUgY29udGV4dCBzd2l0Y2hpbmcgaXRzZWxmLiAgVGhlIFRocmVhZFN0YXRlX3Qgb2JqZWN0IGlzIHBsYWNlZCBvbnRvDQorCXRoZSBzdGFjayB0aGF0IHdhcyBjcmVhdGVkIGZvciB0aGUgdGFzayAtIHNvIHRoZSBzdGFjayBidWZmZXIgaXMgc3RpbGwNCisJdXNlZCwganVzdCBub3QgaW4gdGhlIGNvbnZlbnRpb25hbCB3YXkuICBJdCB3aWxsIG5vdCBiZSB1c2VkIGZvciBhbnl0aGluZw0KKwlvdGhlciB0aGFuIGhvbGRpbmcgdGhpcyBzdHJ1Y3R1cmUuICovDQorCXB4VGhyZWFkU3RhdGUgPSAoIFRocmVhZFN0YXRlX3QgKiApICggcGNUb3BPZlN0YWNrIC0gc2l6ZW9mKCBUaHJlYWRTdGF0ZV90ICkgKTsNCiANCi0gICAgLyogQ3JlYXRlIHRoZSBldmVudCB1c2VkIHRvIHByZXZlbnQgdGhlIHRocmVhZCBmcm9tIGV4ZWN1dGluZyBwYXN0IGl0cyB5aWVsZA0KLSAgICAgKiBwb2ludCBpZiB0aGUgU3VzcGVuZFRocmVhZCgpIGNhbGwgdGhhdCBzdXNwZW5kcyB0aGUgdGhyZWFkIGRvZXMgbm90IHRha2UNCi0gICAgICogZWZmZWN0IGltbWVkaWF0ZWx5IChpdCBpcyBhbiBhc3luY2hyb25vdXMgY2FsbCkuICovDQotICAgIHB4VGhyZWFkU3RhdGUtPnB2WWllbGRFdmVudCA9IENyZWF0ZUV2ZW50KCBOVUxMLCAgIC8qIERlZmF1bHQgc2VjdXJpdHkgYXR0cmlidXRlcy4gKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFLCAgLyogQXV0byByZXNldC4gKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFLCAgLyogU3RhcnQgbm90IHNpZ25hbGxlZC4gKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwgKTsgLyogTm8gbmFtZS4gKi8NCisJLyogQ3JlYXRlIHRoZSBldmVudCB1c2VkIHRvIHByZXZlbnQgdGhlIHRocmVhZCBmcm9tIGV4ZWN1dGluZyBwYXN0IGl0cyB5aWVsZA0KKwlwb2ludCBpZiB0aGUgU3VzcGVuZFRocmVhZCgpIGNhbGwgdGhhdCBzdXNwZW5kcyB0aGUgdGhyZWFkIGRvZXMgbm90IHRha2UNCisJZWZmZWN0IGltbWVkaWF0ZWx5IChpdCBpcyBhbiBhc3luY2hyb25vdXMgY2FsbCkuICovDQorCXB4VGhyZWFkU3RhdGUtPnB2WWllbGRFdmVudCA9IENyZWF0ZUV2ZW50KCAgTlVMTCwgIC8qIERlZmF1bHQgc2VjdXJpdHkgYXR0cmlidXRlcy4gKi8NCisJCQkJCQkJCQkJCQlGQUxTRSwgLyogQXV0byByZXNldC4gKi8NCisJCQkJCQkJCQkJCQlGQUxTRSwgLyogU3RhcnQgbm90IHNpZ25hbGxlZC4gKi8NCisJCQkJCQkJCQkJCQlOVUxMICk7LyogTm8gbmFtZS4gKi8NCiANCi0gICAgLyogQ3JlYXRlIHRoZSB0aHJlYWQgaXRzZWxmLiAqLw0KLSAgICBweFRocmVhZFN0YXRlLT5wdlRocmVhZCA9IENyZWF0ZVRocmVhZCggTlVMTCwgeFN0YWNrU2l6ZSwgKCBMUFRIUkVBRF9TVEFSVF9ST1VUSU5FICkgcHhDb2RlLCBwdlBhcmFtZXRlcnMsIENSRUFURV9TVVNQRU5ERUQgfCBTVEFDS19TSVpFX1BBUkFNX0lTX0FfUkVTRVJWQVRJT04sIE5VTEwgKTsNCi0gICAgY29uZmlnQVNTRVJUKCBweFRocmVhZFN0YXRlLT5wdlRocmVhZCApOyAvKiBTZWUgY29tbWVudCB3aGVyZSBUZXJtaW5hdGVUaHJlYWQoKSBpcyBjYWxsZWQuICovDQotICAgIFNldFRocmVhZEFmZmluaXR5TWFzayggcHhUaHJlYWRTdGF0ZS0+cHZUaHJlYWQsIDB4MDEgKTsNCi0gICAgU2V0VGhyZWFkUHJpb3JpdHlCb29zdCggcHhUaHJlYWRTdGF0ZS0+cHZUaHJlYWQsIFRSVUUgKTsNCi0gICAgU2V0VGhyZWFkUHJpb3JpdHkoIHB4VGhyZWFkU3RhdGUtPnB2VGhyZWFkLCBwb3J0VEFTS19USFJFQURfUFJJT1JJVFkgKTsNCisJLyogQ3JlYXRlIHRoZSB0aHJlYWQgaXRzZWxmLiAqLw0KKwlweFRocmVhZFN0YXRlLT5wdlRocmVhZCA9IENyZWF0ZVRocmVhZCggTlVMTCwgeFN0YWNrU2l6ZSwgKCBMUFRIUkVBRF9TVEFSVF9ST1VUSU5FICkgcHhDb2RlLCBwdlBhcmFtZXRlcnMsIENSRUFURV9TVVNQRU5ERUQgfCBTVEFDS19TSVpFX1BBUkFNX0lTX0FfUkVTRVJWQVRJT04sIE5VTEwgKTsNCisJY29uZmlnQVNTRVJUKCBweFRocmVhZFN0YXRlLT5wdlRocmVhZCApOyAvKiBTZWUgY29tbWVudCB3aGVyZSBUZXJtaW5hdGVUaHJlYWQoKSBpcyBjYWxsZWQuICovDQorCVNldFRocmVhZEFmZmluaXR5TWFzayggcHhUaHJlYWRTdGF0ZS0+cHZUaHJlYWQsIDB4MDEgKTsNCisJU2V0VGhyZWFkUHJpb3JpdHlCb29zdCggcHhUaHJlYWRTdGF0ZS0+cHZUaHJlYWQsIFRSVUUgKTsNCisJU2V0VGhyZWFkUHJpb3JpdHkoIHB4VGhyZWFkU3RhdGUtPnB2VGhyZWFkLCBwb3J0VEFTS19USFJFQURfUFJJT1JJVFkgKTsNCiANCi0gICAgcmV0dXJuICggU3RhY2tUeXBlX3QgKiApIHB4VGhyZWFkU3RhdGU7DQorCXJldHVybiAoIFN0YWNrVHlwZV90ICogKSBweFRocmVhZFN0YXRlOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBCYXNlVHlwZV90IHhQb3J0U3RhcnRTY2hlZHVsZXIoIHZvaWQgKQ0KIHsNCi0gICAgdm9pZCAqIHB2SGFuZGxlID0gTlVMTDsNCi0gICAgaW50MzJfdCBsU3VjY2VzczsNCi0gICAgVGhyZWFkU3RhdGVfdCAqIHB4VGhyZWFkU3RhdGUgPSBOVUxMOw0KLSAgICBTWVNURU1fSU5GTyB4U3lzdGVtSW5mbzsNCit2b2lkICpwdkhhbmRsZSA9IE5VTEw7DQoraW50MzJfdCBsU3VjY2VzczsNCitUaHJlYWRTdGF0ZV90ICpweFRocmVhZFN0YXRlID0gTlVMTDsNCitTWVNURU1fSU5GTyB4U3lzdGVtSW5mbzsNCiANCi0gICAgLyogVGhpcyBwb3J0IHJ1bnMgd2luZG93cyB0aHJlYWRzIHdpdGggZXh0cmVtZWx5IGhpZ2ggcHJpb3JpdHkuICBBbGwgdGhlDQotICAgICAqIHRocmVhZHMgZXhlY3V0ZSBvbiB0aGUgc2FtZSBjb3JlIC0gdG8gcHJldmVudCBsb2NraW5nIHVwIHRoZSBob3N0IG9ubHkgc3RhcnQNCi0gICAgICogaWYgdGhlIGhvc3QgaGFzIG11bHRpcGxlIGNvcmVzLiAqLw0KLSAgICBHZXRTeXN0ZW1JbmZvKCAmeFN5c3RlbUluZm8gKTsNCisJLyogVGhpcyBwb3J0IHJ1bnMgd2luZG93cyB0aHJlYWRzIHdpdGggZXh0cmVtZWx5IGhpZ2ggcHJpb3JpdHkuICBBbGwgdGhlDQorCXRocmVhZHMgZXhlY3V0ZSBvbiB0aGUgc2FtZSBjb3JlIC0gdG8gcHJldmVudCBsb2NraW5nIHVwIHRoZSBob3N0IG9ubHkgc3RhcnQNCisJaWYgdGhlIGhvc3QgaGFzIG11bHRpcGxlIGNvcmVzLiAqLw0KKwlHZXRTeXN0ZW1JbmZvKCAmeFN5c3RlbUluZm8gKTsNCisJaWYoIHhTeXN0ZW1JbmZvLmR3TnVtYmVyT2ZQcm9jZXNzb3JzIDw9IDEgKQ0KKwl7DQorCQlwcmludGYoICJUaGlzIHZlcnNpb24gb2YgdGhlIEZyZWVSVE9TIFdpbmRvd3MgcG9ydCBjYW4gb25seSBiZSB1c2VkIG9uIG11bHRpLWNvcmUgaG9zdHMuXHJcbiIgKTsNCisJCWxTdWNjZXNzID0gcGRGQUlMOw0KKwl9DQorCWVsc2UNCisJew0KKwkJbFN1Y2Nlc3MgPSBwZFBBU1M7DQogDQotICAgIGlmKCB4U3lzdGVtSW5mby5kd051bWJlck9mUHJvY2Vzc29ycyA8PSAxICkNCi0gICAgew0KLSAgICAgICAgcHJpbnRmKCAiVGhpcyB2ZXJzaW9uIG9mIHRoZSBGcmVlUlRPUyBXaW5kb3dzIHBvcnQgY2FuIG9ubHkgYmUgdXNlZCBvbiBtdWx0aS1jb3JlIGhvc3RzLlxyXG4iICk7DQotICAgICAgICBsU3VjY2VzcyA9IHBkRkFJTDsNCi0gICAgfQ0KLSAgICBlbHNlDQotICAgIHsNCi0gICAgICAgIGxTdWNjZXNzID0gcGRQQVNTOw0KKwkJLyogVGhlIGhpZ2hlc3QgcHJpb3JpdHkgY2xhc3MgaXMgdXNlZCB0byBbdHJ5IHRvXSBwcmV2ZW50IG90aGVyIFdpbmRvd3MNCisJCWFjdGl2aXR5IGludGVyZmVyaW5nIHdpdGggRnJlZVJUT1MgdGltaW5nIHRvbyBtdWNoLiAqLw0KKwkJaWYoIFNldFByaW9yaXR5Q2xhc3MoIEdldEN1cnJlbnRQcm9jZXNzKCksIFJFQUxUSU1FX1BSSU9SSVRZX0NMQVNTICkgPT0gMCApDQorCQl7DQorCQkJcHJpbnRmKCAiU2V0UHJpb3JpdHlDbGFzcygpIGZhaWxlZFxyXG4iICk7DQorCQl9DQogDQotICAgICAgICAvKiBUaGUgaGlnaGVzdCBwcmlvcml0eSBjbGFzcyBpcyB1c2VkIHRvIFt0cnkgdG9dIHByZXZlbnQgb3RoZXIgV2luZG93cw0KLSAgICAgICAgICogYWN0aXZpdHkgaW50ZXJmZXJpbmcgd2l0aCBGcmVlUlRPUyB0aW1pbmcgdG9vIG11Y2guICovDQotICAgICAgICBpZiggU2V0UHJpb3JpdHlDbGFzcyggR2V0Q3VycmVudFByb2Nlc3MoKSwgUkVBTFRJTUVfUFJJT1JJVFlfQ0xBU1MgKSA9PSAwICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBwcmludGYoICJTZXRQcmlvcml0eUNsYXNzKCkgZmFpbGVkXHJcbiIgKTsNCi0gICAgICAgIH0NCisJCS8qIEluc3RhbGwgdGhlIGludGVycnVwdCBoYW5kbGVycyB1c2VkIGJ5IHRoZSBzY2hlZHVsZXIgaXRzZWxmLiAqLw0KKwkJdlBvcnRTZXRJbnRlcnJ1cHRIYW5kbGVyKCBwb3J0SU5URVJSVVBUX1lJRUxELCBwcnZQcm9jZXNzWWllbGRJbnRlcnJ1cHQgKTsNCisJCXZQb3J0U2V0SW50ZXJydXB0SGFuZGxlciggcG9ydElOVEVSUlVQVF9USUNLLCBwcnZQcm9jZXNzVGlja0ludGVycnVwdCApOw0KIA0KLSAgICAgICAgLyogSW5zdGFsbCB0aGUgaW50ZXJydXB0IGhhbmRsZXJzIHVzZWQgYnkgdGhlIHNjaGVkdWxlciBpdHNlbGYuICovDQotICAgICAgICB2UG9ydFNldEludGVycnVwdEhhbmRsZXIoIHBvcnRJTlRFUlJVUFRfWUlFTEQsIHBydlByb2Nlc3NZaWVsZEludGVycnVwdCApOw0KLSAgICAgICAgdlBvcnRTZXRJbnRlcnJ1cHRIYW5kbGVyKCBwb3J0SU5URVJSVVBUX1RJQ0ssIHBydlByb2Nlc3NUaWNrSW50ZXJydXB0ICk7DQorCQkvKiBDcmVhdGUgdGhlIGV2ZW50cyBhbmQgbXV0ZXhlcyB0aGF0IGFyZSB1c2VkIHRvIHN5bmNocm9uaXNlIGFsbCB0aGUNCisJCXRocmVhZHMuICovDQorCQlwdkludGVycnVwdEV2ZW50TXV0ZXggPSBDcmVhdGVNdXRleCggTlVMTCwgRkFMU0UsIE5VTEwgKTsNCisJCXB2SW50ZXJydXB0RXZlbnQgPSBDcmVhdGVFdmVudCggTlVMTCwgRkFMU0UsIEZBTFNFLCBOVUxMICk7DQogDQotICAgICAgICAvKiBDcmVhdGUgdGhlIGV2ZW50cyBhbmQgbXV0ZXhlcyB0aGF0IGFyZSB1c2VkIHRvIHN5bmNocm9uaXNlIGFsbCB0aGUNCi0gICAgICAgICAqIHRocmVhZHMuICovDQotICAgICAgICBwdkludGVycnVwdEV2ZW50TXV0ZXggPSBDcmVhdGVNdXRleCggTlVMTCwgRkFMU0UsIE5VTEwgKTsNCi0gICAgICAgIHB2SW50ZXJydXB0RXZlbnQgPSBDcmVhdGVFdmVudCggTlVMTCwgRkFMU0UsIEZBTFNFLCBOVUxMICk7DQorCQlpZiggKCBwdkludGVycnVwdEV2ZW50TXV0ZXggPT0gTlVMTCApIHx8ICggcHZJbnRlcnJ1cHRFdmVudCA9PSBOVUxMICkgKQ0KKwkJew0KKwkJCWxTdWNjZXNzID0gcGRGQUlMOw0KKwkJfQ0KIA0KLSAgICAgICAgaWYoICggcHZJbnRlcnJ1cHRFdmVudE11dGV4ID09IE5VTEwgKSB8fCAoIHB2SW50ZXJydXB0RXZlbnQgPT0gTlVMTCApICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBsU3VjY2VzcyA9IHBkRkFJTDsNCi0gICAgICAgIH0NCisJCS8qIFNldCB0aGUgcHJpb3JpdHkgb2YgdGhpcyB0aHJlYWQgc3VjaCB0aGF0IGl0IGlzIGFib3ZlIHRoZSBwcmlvcml0eSBvZg0KKwkJdGhlIHRocmVhZHMgdGhhdCBydW4gdGFza3MuICBUaGlzIGhpZ2hlciBwcmlvcml0eSBpcyByZXF1aXJlZCB0byBlbnN1cmUNCisJCXNpbXVsYXRlZCBpbnRlcnJ1cHRzIHRha2UgcHJpb3JpdHkgb3ZlciB0YXNrcy4gKi8NCisJCXB2SGFuZGxlID0gR2V0Q3VycmVudFRocmVhZCgpOw0KKwkJaWYoIHB2SGFuZGxlID09IE5VTEwgKQ0KKwkJew0KKwkJCWxTdWNjZXNzID0gcGRGQUlMOw0KKwkJfQ0KKwl9DQogDQotICAgICAgICAvKiBTZXQgdGhlIHByaW9yaXR5IG9mIHRoaXMgdGhyZWFkIHN1Y2ggdGhhdCBpdCBpcyBhYm92ZSB0aGUgcHJpb3JpdHkgb2YNCi0gICAgICAgICAqIHRoZSB0aHJlYWRzIHRoYXQgcnVuIHRhc2tzLiAgVGhpcyBoaWdoZXIgcHJpb3JpdHkgaXMgcmVxdWlyZWQgdG8gZW5zdXJlDQotICAgICAgICAgKiBzaW11bGF0ZWQgaW50ZXJydXB0cyB0YWtlIHByaW9yaXR5IG92ZXIgdGFza3MuICovDQotICAgICAgICBwdkhhbmRsZSA9IEdldEN1cnJlbnRUaHJlYWQoKTsNCisJaWYoIGxTdWNjZXNzID09IHBkUEFTUyApDQorCXsNCisJCWlmKCBTZXRUaHJlYWRQcmlvcml0eSggcHZIYW5kbGUsIHBvcnRTSU1VTEFURURfSU5URVJSVVBUU19USFJFQURfUFJJT1JJVFkgKSA9PSAwICkNCisJCXsNCisJCQlsU3VjY2VzcyA9IHBkRkFJTDsNCisJCX0NCisJCVNldFRocmVhZFByaW9yaXR5Qm9vc3QoIHB2SGFuZGxlLCBUUlVFICk7DQorCQlTZXRUaHJlYWRBZmZpbml0eU1hc2soIHB2SGFuZGxlLCAweDAxICk7DQorCX0NCiANCi0gICAgICAgIGlmKCBwdkhhbmRsZSA9PSBOVUxMICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBsU3VjY2VzcyA9IHBkRkFJTDsNCi0gICAgICAgIH0NCi0gICAgfQ0KKwlpZiggbFN1Y2Nlc3MgPT0gcGRQQVNTICkNCisJew0KKwkJLyogU3RhcnQgdGhlIHRocmVhZCB0aGF0IHNpbXVsYXRlcyB0aGUgdGltZXIgcGVyaXBoZXJhbCB0byBnZW5lcmF0ZQ0KKwkJdGljayBpbnRlcnJ1cHRzLiAgVGhlIHByaW9yaXR5IGlzIHNldCBiZWxvdyB0aGF0IG9mIHRoZSBzaW11bGF0ZWQNCisJCWludGVycnVwdCBoYW5kbGVyIHNvIHRoZSBpbnRlcnJ1cHQgZXZlbnQgbXV0ZXggaXMgdXNlZCBmb3IgdGhlDQorCQloYW5kc2hha2UgLyBvdmVycnVuIHByb3RlY3Rpb24uICovDQorCQlwdkhhbmRsZSA9IENyZWF0ZVRocmVhZCggTlVMTCwgMCwgcHJ2U2ltdWxhdGVkUGVyaXBoZXJhbFRpbWVyLCBOVUxMLCBDUkVBVEVfU1VTUEVOREVELCBOVUxMICk7DQorCQlpZiggcHZIYW5kbGUgIT0gTlVMTCApDQorCQl7DQorCQkJU2V0VGhyZWFkUHJpb3JpdHkoIHB2SGFuZGxlLCBwb3J0U0lNVUxBVEVEX1RJTUVSX1RIUkVBRF9QUklPUklUWSApOw0KKwkJCVNldFRocmVhZFByaW9yaXR5Qm9vc3QoIHB2SGFuZGxlLCBUUlVFICk7DQorCQkJU2V0VGhyZWFkQWZmaW5pdHlNYXNrKCBwdkhhbmRsZSwgMHgwMSApOw0KKwkJCVJlc3VtZVRocmVhZCggcHZIYW5kbGUgKTsNCisJCX0NCiANCi0gICAgaWYoIGxTdWNjZXNzID09IHBkUEFTUyApDQotICAgIHsNCi0gICAgICAgIGlmKCBTZXRUaHJlYWRQcmlvcml0eSggcHZIYW5kbGUsIHBvcnRTSU1VTEFURURfSU5URVJSVVBUU19USFJFQURfUFJJT1JJVFkgKSA9PSAwICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBsU3VjY2VzcyA9IHBkRkFJTDsNCi0gICAgICAgIH0NCisJCS8qIFN0YXJ0IHRoZSBoaWdoZXN0IHByaW9yaXR5IHRhc2sgYnkgb2J0YWluaW5nIGl0cyBhc3NvY2lhdGVkIHRocmVhZA0KKwkJc3RhdGUgc3RydWN0dXJlLCBpbiB3aGljaCBpcyBzdG9yZWQgdGhlIHRocmVhZCBoYW5kbGUuICovDQorCQlweFRocmVhZFN0YXRlID0gKCBUaHJlYWRTdGF0ZV90ICogKSAqKCAoIHNpemVfdCAqICkgcHhDdXJyZW50VENCICk7DQorCQl1bENyaXRpY2FsTmVzdGluZyA9IHBvcnROT19DUklUSUNBTF9ORVNUSU5HOw0KIA0KLSAgICAgICAgU2V0VGhyZWFkUHJpb3JpdHlCb29zdCggcHZIYW5kbGUsIFRSVUUgKTsNCi0gICAgICAgIFNldFRocmVhZEFmZmluaXR5TWFzayggcHZIYW5kbGUsIDB4MDEgKTsNCi0gICAgfQ0KKwkJLyogU3RhcnQgdGhlIGZpcnN0IHRhc2suICovDQorCQlSZXN1bWVUaHJlYWQoIHB4VGhyZWFkU3RhdGUtPnB2VGhyZWFkICk7DQogDQotICAgIGlmKCBsU3VjY2VzcyA9PSBwZFBBU1MgKQ0KLSAgICB7DQotICAgICAgICAvKiBTdGFydCB0aGUgdGhyZWFkIHRoYXQgc2ltdWxhdGVzIHRoZSB0aW1lciBwZXJpcGhlcmFsIHRvIGdlbmVyYXRlDQotICAgICAgICAgKiB0aWNrIGludGVycnVwdHMuICBUaGUgcHJpb3JpdHkgaXMgc2V0IGJlbG93IHRoYXQgb2YgdGhlIHNpbXVsYXRlZA0KLSAgICAgICAgICogaW50ZXJydXB0IGhhbmRsZXIgc28gdGhlIGludGVycnVwdCBldmVudCBtdXRleCBpcyB1c2VkIGZvciB0aGUNCi0gICAgICAgICAqIGhhbmRzaGFrZSAvIG92ZXJydW4gcHJvdGVjdGlvbi4gKi8NCi0gICAgICAgIHB2SGFuZGxlID0gQ3JlYXRlVGhyZWFkKCBOVUxMLCAwLCBwcnZTaW11bGF0ZWRQZXJpcGhlcmFsVGltZXIsIE5VTEwsIENSRUFURV9TVVNQRU5ERUQsIE5VTEwgKTsNCisJCS8qIEhhbmRsZSBhbGwgc2ltdWxhdGVkIGludGVycnVwdHMgLSBpbmNsdWRpbmcgeWllbGQgcmVxdWVzdHMgYW5kDQorCQlzaW11bGF0ZWQgdGlja3MuICovDQorCQlwcnZQcm9jZXNzU2ltdWxhdGVkSW50ZXJydXB0cygpOw0KKwl9DQogDQotICAgICAgICBpZiggcHZIYW5kbGUgIT0gTlVMTCApDQotICAgICAgICB7DQotICAgICAgICAgICAgU2V0VGhyZWFkUHJpb3JpdHkoIHB2SGFuZGxlLCBwb3J0U0lNVUxBVEVEX1RJTUVSX1RIUkVBRF9QUklPUklUWSApOw0KLSAgICAgICAgICAgIFNldFRocmVhZFByaW9yaXR5Qm9vc3QoIHB2SGFuZGxlLCBUUlVFICk7DQotICAgICAgICAgICAgU2V0VGhyZWFkQWZmaW5pdHlNYXNrKCBwdkhhbmRsZSwgMHgwMSApOw0KLSAgICAgICAgICAgIFJlc3VtZVRocmVhZCggcHZIYW5kbGUgKTsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIC8qIFN0YXJ0IHRoZSBoaWdoZXN0IHByaW9yaXR5IHRhc2sgYnkgb2J0YWluaW5nIGl0cyBhc3NvY2lhdGVkIHRocmVhZA0KLSAgICAgICAgICogc3RhdGUgc3RydWN0dXJlLCBpbiB3aGljaCBpcyBzdG9yZWQgdGhlIHRocmVhZCBoYW5kbGUuICovDQotICAgICAgICBweFRocmVhZFN0YXRlID0gKCBUaHJlYWRTdGF0ZV90ICogKSAqKCAoIHNpemVfdCAqICkgcHhDdXJyZW50VENCICk7DQotICAgICAgICB1bENyaXRpY2FsTmVzdGluZyA9IHBvcnROT19DUklUSUNBTF9ORVNUSU5HOw0KLQ0KLSAgICAgICAgLyogU3RhcnQgdGhlIGZpcnN0IHRhc2suICovDQotICAgICAgICBSZXN1bWVUaHJlYWQoIHB4VGhyZWFkU3RhdGUtPnB2VGhyZWFkICk7DQotDQotICAgICAgICAvKiBIYW5kbGUgYWxsIHNpbXVsYXRlZCBpbnRlcnJ1cHRzIC0gaW5jbHVkaW5nIHlpZWxkIHJlcXVlc3RzIGFuZA0KLSAgICAgICAgICogc2ltdWxhdGVkIHRpY2tzLiAqLw0KLSAgICAgICAgcHJ2UHJvY2Vzc1NpbXVsYXRlZEludGVycnVwdHMoKTsNCi0gICAgfQ0KLQ0KLSAgICAvKiBXb3VsZCBub3QgZXhwZWN0IHRvIHJldHVybiBmcm9tIHBydlByb2Nlc3NTaW11bGF0ZWRJbnRlcnJ1cHRzKCksIHNvIHNob3VsZA0KLSAgICAgKiBub3QgZ2V0IGhlcmUuICovDQotICAgIHJldHVybiAwOw0KKwkvKiBXb3VsZCBub3QgZXhwZWN0IHRvIHJldHVybiBmcm9tIHBydlByb2Nlc3NTaW11bGF0ZWRJbnRlcnJ1cHRzKCksIHNvIHNob3VsZA0KKwlub3QgZ2V0IGhlcmUuICovDQorCXJldHVybiAwOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBzdGF0aWMgdWludDMyX3QgcHJ2UHJvY2Vzc1lpZWxkSW50ZXJydXB0KCB2b2lkICkNCiB7DQotICAgIC8qIEFsd2F5cyByZXR1cm4gdHJ1ZSBhcyB0aGlzIGlzIGEgeWllbGQuICovDQotICAgIHJldHVybiBwZFRSVUU7DQorCS8qIEFsd2F5cyByZXR1cm4gdHJ1ZSBhcyB0aGlzIGlzIGEgeWllbGQuICovDQorCXJldHVybiBwZFRSVUU7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHN0YXRpYyB1aW50MzJfdCBwcnZQcm9jZXNzVGlja0ludGVycnVwdCggdm9pZCApDQogew0KLSAgICB1aW50MzJfdCB1bFN3aXRjaFJlcXVpcmVkOw0KK3VpbnQzMl90IHVsU3dpdGNoUmVxdWlyZWQ7DQogDQotICAgIC8qIFByb2Nlc3MgdGhlIHRpY2sgaXRzZWxmLiAqLw0KLSAgICBjb25maWdBU1NFUlQoIHhQb3J0UnVubmluZyApOw0KLSAgICB1bFN3aXRjaFJlcXVpcmVkID0gKCB1aW50MzJfdCApIHhUYXNrSW5jcmVtZW50VGljaygpOw0KKwkvKiBQcm9jZXNzIHRoZSB0aWNrIGl0c2VsZi4gKi8NCisJY29uZmlnQVNTRVJUKCB4UG9ydFJ1bm5pbmcgKTsNCisJdWxTd2l0Y2hSZXF1aXJlZCA9ICggdWludDMyX3QgKSB4VGFza0luY3JlbWVudFRpY2soKTsNCiANCi0gICAgcmV0dXJuIHVsU3dpdGNoUmVxdWlyZWQ7DQorCXJldHVybiB1bFN3aXRjaFJlcXVpcmVkOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBzdGF0aWMgdm9pZCBwcnZQcm9jZXNzU2ltdWxhdGVkSW50ZXJydXB0cyggdm9pZCApDQogew0KLSAgICB1aW50MzJfdCB1bFN3aXRjaFJlcXVpcmVkLCBpOw0KLSAgICBUaHJlYWRTdGF0ZV90ICogcHhUaHJlYWRTdGF0ZTsNCi0gICAgdm9pZCAqIHB2T2JqZWN0TGlzdFsgMiBdOw0KLSAgICBDT05URVhUIHhDb250ZXh0Ow0KK3VpbnQzMl90IHVsU3dpdGNoUmVxdWlyZWQsIGk7DQorVGhyZWFkU3RhdGVfdCAqcHhUaHJlYWRTdGF0ZTsNCit2b2lkICpwdk9iamVjdExpc3RbIDIgXTsNCitDT05URVhUIHhDb250ZXh0Ow0KIA0KLSAgICAvKiBHb2luZyB0byBibG9jayBvbiB0aGUgbXV0ZXggdGhhdCBlbnN1cmVkIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gdGhlIHNpbXVsYXRlZA0KLSAgICAgKiBpbnRlcnJ1cHQgb2JqZWN0cywgYW5kIHRoZSBldmVudCB0aGF0IHNpZ25hbHMgdGhhdCBhIHNpbXVsYXRlZCBpbnRlcnJ1cHQNCi0gICAgICogc2hvdWxkIGJlIHByb2Nlc3NlZC4gKi8NCi0gICAgcHZPYmplY3RMaXN0WyAwIF0gPSBwdkludGVycnVwdEV2ZW50TXV0ZXg7DQotICAgIHB2T2JqZWN0TGlzdFsgMSBdID0gcHZJbnRlcnJ1cHRFdmVudDsNCisJLyogR29pbmcgdG8gYmxvY2sgb24gdGhlIG11dGV4IHRoYXQgZW5zdXJlZCBleGNsdXNpdmUgYWNjZXNzIHRvIHRoZSBzaW11bGF0ZWQNCisJaW50ZXJydXB0IG9iamVjdHMsIGFuZCB0aGUgZXZlbnQgdGhhdCBzaWduYWxzIHRoYXQgYSBzaW11bGF0ZWQgaW50ZXJydXB0DQorCXNob3VsZCBiZSBwcm9jZXNzZWQuICovDQorCXB2T2JqZWN0TGlzdFsgMCBdID0gcHZJbnRlcnJ1cHRFdmVudE11dGV4Ow0KKwlwdk9iamVjdExpc3RbIDEgXSA9IHB2SW50ZXJydXB0RXZlbnQ7DQogDQotICAgIC8qIENyZWF0ZSBhIHBlbmRpbmcgdGljayB0byBlbnN1cmUgdGhlIGZpcnN0IHRhc2sgaXMgc3RhcnRlZCBhcyBzb29uIGFzDQotICAgICAqIHRoaXMgdGhyZWFkIHBlbmRzLiAqLw0KLSAgICB1bFBlbmRpbmdJbnRlcnJ1cHRzIHw9ICggMSA8PCBwb3J0SU5URVJSVVBUX1RJQ0sgKTsNCi0gICAgU2V0RXZlbnQoIHB2SW50ZXJydXB0RXZlbnQgKTsNCisJLyogQ3JlYXRlIGEgcGVuZGluZyB0aWNrIHRvIGVuc3VyZSB0aGUgZmlyc3QgdGFzayBpcyBzdGFydGVkIGFzIHNvb24gYXMNCisJdGhpcyB0aHJlYWQgcGVuZHMuICovDQorCXVsUGVuZGluZ0ludGVycnVwdHMgfD0gKCAxIDw8IHBvcnRJTlRFUlJVUFRfVElDSyApOw0KKwlTZXRFdmVudCggcHZJbnRlcnJ1cHRFdmVudCApOw0KIA0KLSAgICB4UG9ydFJ1bm5pbmcgPSBwZFRSVUU7DQorCXhQb3J0UnVubmluZyA9IHBkVFJVRTsNCiANCi0gICAgZm9yKCA7IDsgKQ0KLSAgICB7DQotICAgICAgICB4SW5zaWRlSW50ZXJydXB0ID0gcGRGQUxTRTsNCi0gICAgICAgIFdhaXRGb3JNdWx0aXBsZU9iamVjdHMoIHNpemVvZiggcHZPYmplY3RMaXN0ICkgLyBzaXplb2YoIHZvaWQgKiApLCBwdk9iamVjdExpc3QsIFRSVUUsIElORklOSVRFICk7DQorCWZvcig7OykNCisJew0KKwkJeEluc2lkZUludGVycnVwdCA9IHBkRkFMU0U7DQorCQlXYWl0Rm9yTXVsdGlwbGVPYmplY3RzKCBzaXplb2YoIHB2T2JqZWN0TGlzdCApIC8gc2l6ZW9mKCB2b2lkICogKSwgcHZPYmplY3RMaXN0LCBUUlVFLCBJTkZJTklURSApOw0KIA0KLSAgICAgICAgLyogQ2Fubm90IGJlIGluIGEgY3JpdGljYWwgc2VjdGlvbiB0byBnZXQgaGVyZS4gIFRhc2tzIHRoYXQgZXhpdCBhDQotICAgICAgICAgKiBjcml0aWNhbCBzZWN0aW9uIHdpbGwgYmxvY2sgb24gYSB5aWVsZCBtdXRleCB0byB3YWl0IGZvciBhbiBpbnRlcnJ1cHQgdG8NCi0gICAgICAgICAqIHByb2Nlc3MgaWYgYW4gaW50ZXJydXB0IHdhcyBzZXQgcGVuZGluZyB3aGlsZSB0aGUgdGFzayB3YXMgaW5zaWRlIHRoZQ0KLSAgICAgICAgICogY3JpdGljYWwgc2VjdGlvbi4gIHhJbnNpZGVJbnRlcnJ1cHQgcHJldmVudHMgaW50ZXJydXB0cyB0aGF0IGNvbnRhaW4NCi0gICAgICAgICAqIGNyaXRpY2FsIHNlY3Rpb25zIGZyb20gZG9pbmcgdGhlIHNhbWUuICovDQotICAgICAgICB4SW5zaWRlSW50ZXJydXB0ID0gcGRUUlVFOw0KKwkJLyogQ2Fubm90IGJlIGluIGEgY3JpdGljYWwgc2VjdGlvbiB0byBnZXQgaGVyZS4gIFRhc2tzIHRoYXQgZXhpdCBhDQorCQljcml0aWNhbCBzZWN0aW9uIHdpbGwgYmxvY2sgb24gYSB5aWVsZCBtdXRleCB0byB3YWl0IGZvciBhbiBpbnRlcnJ1cHQgdG8NCisJCXByb2Nlc3MgaWYgYW4gaW50ZXJydXB0IHdhcyBzZXQgcGVuZGluZyB3aGlsZSB0aGUgdGFzayB3YXMgaW5zaWRlIHRoZQ0KKwkJY3JpdGljYWwgc2VjdGlvbi4gIHhJbnNpZGVJbnRlcnJ1cHQgcHJldmVudHMgaW50ZXJydXB0cyB0aGF0IGNvbnRhaW4NCisJCWNyaXRpY2FsIHNlY3Rpb25zIGZyb20gZG9pbmcgdGhlIHNhbWUuICovDQorCQl4SW5zaWRlSW50ZXJydXB0ID0gcGRUUlVFOw0KIA0KLSAgICAgICAgLyogVXNlZCB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSBzaW11bGF0ZWQgaW50ZXJydXB0IHByb2Nlc3NpbmcgaGFzDQotICAgICAgICAgKiBuZWNlc3NpdGF0ZWQgYSBjb250ZXh0IHN3aXRjaCB0byBhbm90aGVyIHRhc2svdGhyZWFkLiAqLw0KLSAgICAgICAgdWxTd2l0Y2hSZXF1aXJlZCA9IHBkRkFMU0U7DQorCQkvKiBVc2VkIHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIHNpbXVsYXRlZCBpbnRlcnJ1cHQgcHJvY2Vzc2luZyBoYXMNCisJCW5lY2Vzc2l0YXRlZCBhIGNvbnRleHQgc3dpdGNoIHRvIGFub3RoZXIgdGFzay90aHJlYWQuICovDQorCQl1bFN3aXRjaFJlcXVpcmVkID0gcGRGQUxTRTsNCiANCi0gICAgICAgIC8qIEZvciBlYWNoIGludGVycnVwdCB3ZSBhcmUgaW50ZXJlc3RlZCBpbiBwcm9jZXNzaW5nLCBlYWNoIG9mIHdoaWNoIGlzDQotICAgICAgICAgKiByZXByZXNlbnRlZCBieSBhIGJpdCBpbiB0aGUgMzJiaXQgdWxQZW5kaW5nSW50ZXJydXB0cyB2YXJpYWJsZS4gKi8NCi0gICAgICAgIGZvciggaSA9IDA7IGkgPCBwb3J0TUFYX0lOVEVSUlVQVFM7IGkrKyApDQotICAgICAgICB7DQotICAgICAgICAgICAgLyogSXMgdGhlIHNpbXVsYXRlZCBpbnRlcnJ1cHQgcGVuZGluZz8gKi8NCi0gICAgICAgICAgICBpZiggKCB1bFBlbmRpbmdJbnRlcnJ1cHRzICYgKCAxVUwgPDwgaSApICkgIT0gMCApDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAvKiBJcyBhIGhhbmRsZXIgaW5zdGFsbGVkPyAqLw0KLSAgICAgICAgICAgICAgICBpZiggdWxJc3JIYW5kbGVyWyBpIF0gIT0gTlVMTCApDQotICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgIC8qIFJ1biB0aGUgYWN0dWFsIGhhbmRsZXIuICBIYW5kbGVycyByZXR1cm4gcGRUUlVFIGlmIHRoZXkNCi0gICAgICAgICAgICAgICAgICAgICAqIG5lY2Vzc2l0YXRlIGEgY29udGV4dCBzd2l0Y2guICovDQotICAgICAgICAgICAgICAgICAgICBpZiggdWxJc3JIYW5kbGVyWyBpIF0oKSAhPSBwZEZBTFNFICkNCi0gICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAvKiBBIGJpdCBtYXNrIGlzIHVzZWQgcHVyZWx5IHRvIGhlbHAgZGVidWdnaW5nLiAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgIHVsU3dpdGNoUmVxdWlyZWQgfD0gKCAxIDw8IGkgKTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KKwkJLyogRm9yIGVhY2ggaW50ZXJydXB0IHdlIGFyZSBpbnRlcmVzdGVkIGluIHByb2Nlc3NpbmcsIGVhY2ggb2Ygd2hpY2ggaXMNCisJCXJlcHJlc2VudGVkIGJ5IGEgYml0IGluIHRoZSAzMmJpdCB1bFBlbmRpbmdJbnRlcnJ1cHRzIHZhcmlhYmxlLiAqLw0KKwkJZm9yKCBpID0gMDsgaSA8IHBvcnRNQVhfSU5URVJSVVBUUzsgaSsrICkNCisJCXsNCisJCQkvKiBJcyB0aGUgc2ltdWxhdGVkIGludGVycnVwdCBwZW5kaW5nPyAqLw0KKwkJCWlmKCAoIHVsUGVuZGluZ0ludGVycnVwdHMgJiAoIDFVTCA8PCBpICkgKSAhPSAwICkNCisJCQl7DQorCQkJCS8qIElzIGEgaGFuZGxlciBpbnN0YWxsZWQ/ICovDQorCQkJCWlmKCB1bElzckhhbmRsZXJbIGkgXSAhPSBOVUxMICkNCisJCQkJew0KKwkJCQkJLyogUnVuIHRoZSBhY3R1YWwgaGFuZGxlci4gIEhhbmRsZXJzIHJldHVybiBwZFRSVUUgaWYgdGhleQ0KKwkJCQkJbmVjZXNzaXRhdGUgYSBjb250ZXh0IHN3aXRjaC4gKi8NCisJCQkJCWlmKCB1bElzckhhbmRsZXJbIGkgXSgpICE9IHBkRkFMU0UgKQ0KKwkJCQkJew0KKwkJCQkJCS8qIEEgYml0IG1hc2sgaXMgdXNlZCBwdXJlbHkgdG8gaGVscCBkZWJ1Z2dpbmcuICovDQorCQkJCQkJdWxTd2l0Y2hSZXF1aXJlZCB8PSAoIDEgPDwgaSApOw0KKwkJCQkJfQ0KKwkJCQl9DQogDQotICAgICAgICAgICAgICAgIC8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgcGVuZGluZyBiaXQuICovDQotICAgICAgICAgICAgICAgIHVsUGVuZGluZ0ludGVycnVwdHMgJj0gfiggMVVMIDw8IGkgKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQorCQkJCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgcGVuZGluZyBiaXQuICovDQorCQkJCXVsUGVuZGluZ0ludGVycnVwdHMgJj0gfiggMVVMIDw8IGkgKTsNCisJCQl9DQorCQl9DQogDQotICAgICAgICBpZiggdWxTd2l0Y2hSZXF1aXJlZCAhPSBwZEZBTFNFICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICB2b2lkICogcHZPbGRDdXJyZW50VENCOw0KKwkJaWYoIHVsU3dpdGNoUmVxdWlyZWQgIT0gcGRGQUxTRSApDQorCQl7DQorCQkJdm9pZCAqcHZPbGRDdXJyZW50VENCOw0KIA0KLSAgICAgICAgICAgIHB2T2xkQ3VycmVudFRDQiA9IHB4Q3VycmVudFRDQjsNCisJCQlwdk9sZEN1cnJlbnRUQ0IgPSBweEN1cnJlbnRUQ0I7DQogDQotICAgICAgICAgICAgLyogU2VsZWN0IHRoZSBuZXh0IHRhc2sgdG8gcnVuLiAqLw0KLSAgICAgICAgICAgIHZUYXNrU3dpdGNoQ29udGV4dCgpOw0KKwkJCS8qIFNlbGVjdCB0aGUgbmV4dCB0YXNrIHRvIHJ1bi4gKi8NCisJCQl2VGFza1N3aXRjaENvbnRleHQoKTsNCiANCi0gICAgICAgICAgICAvKiBJZiB0aGUgdGFzayBzZWxlY3RlZCB0byBlbnRlciB0aGUgcnVubmluZyBzdGF0ZSBpcyBub3QgdGhlIHRhc2sNCi0gICAgICAgICAgICAgKiB0aGF0IGlzIGFscmVhZHkgaW4gdGhlIHJ1bm5pbmcgc3RhdGUuICovDQotICAgICAgICAgICAgaWYoIHB2T2xkQ3VycmVudFRDQiAhPSBweEN1cnJlbnRUQ0IgKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgLyogU3VzcGVuZCB0aGUgb2xkIHRocmVhZC4gIEluIHRoZSBjYXNlcyB3aGVyZSB0aGUgKHNpbXVsYXRlZCkNCi0gICAgICAgICAgICAgICAgICogaW50ZXJydXB0IGlzIGFzeW5jaHJvbm91cyAodGljayBldmVudCBzd2FwcGluZyBhIHRhc2sgb3V0IHJhdGhlcg0KLSAgICAgICAgICAgICAgICAgKiB0aGFuIGEgdGFzayBibG9ja2luZyBvciB5aWVsZGluZykgaXQgZG9lc24ndCBtYXR0ZXIgaWYgdGhlDQotICAgICAgICAgICAgICAgICAqICdzdXNwZW5kJyBvcGVyYXRpb24gZG9lc24ndCB0YWtlIGVmZmVjdCBpbW1lZGlhdGVseSAtIGlmIGl0DQotICAgICAgICAgICAgICAgICAqIGRvZXNuJ3QgaXQgd291bGQganVzdCBiZSBsaWtlIHRoZSBpbnRlcnJ1cHQgb2NjdXJyaW5nIHNsaWdodGx5DQotICAgICAgICAgICAgICAgICAqIGxhdGVyLiAgSW4gY2FzZXMgd2hlcmUgdGhlIHlpZWxkIHdhcyBjYXVzZWQgYnkgYSB0YXNrIGJsb2NraW5nDQotICAgICAgICAgICAgICAgICAqIG9yIHlpZWxkaW5nIHRoZW4gdGhlIHRhc2sgd2lsbCBibG9jayBvbiBhIHlpZWxkIGV2ZW50IGFmdGVyIHRoZQ0KLSAgICAgICAgICAgICAgICAgKiB5aWVsZCBvcGVyYXRpb24gaW4gY2FzZSB0aGUgJ3N1c3BlbmQnIG9wZXJhdGlvbiBkb2Vzbid0IHRha2UNCi0gICAgICAgICAgICAgICAgICogZWZmZWN0IGltbWVkaWF0ZWx5LiAgKi8NCi0gICAgICAgICAgICAgICAgcHhUaHJlYWRTdGF0ZSA9ICggVGhyZWFkU3RhdGVfdCAqICkgKiggKCBzaXplX3QgKiApIHB2T2xkQ3VycmVudFRDQiApOw0KLSAgICAgICAgICAgICAgICBTdXNwZW5kVGhyZWFkKCBweFRocmVhZFN0YXRlLT5wdlRocmVhZCApOw0KKwkJCS8qIElmIHRoZSB0YXNrIHNlbGVjdGVkIHRvIGVudGVyIHRoZSBydW5uaW5nIHN0YXRlIGlzIG5vdCB0aGUgdGFzaw0KKwkJCXRoYXQgaXMgYWxyZWFkeSBpbiB0aGUgcnVubmluZyBzdGF0ZS4gKi8NCisJCQlpZiggcHZPbGRDdXJyZW50VENCICE9IHB4Q3VycmVudFRDQiApDQorCQkJew0KKwkJCQkvKiBTdXNwZW5kIHRoZSBvbGQgdGhyZWFkLiAgSW4gdGhlIGNhc2VzIHdoZXJlIHRoZSAoc2ltdWxhdGVkKQ0KKwkJCQlpbnRlcnJ1cHQgaXMgYXN5bmNocm9ub3VzICh0aWNrIGV2ZW50IHN3YXBwaW5nIGEgdGFzayBvdXQgcmF0aGVyDQorCQkJCXRoYW4gYSB0YXNrIGJsb2NraW5nIG9yIHlpZWxkaW5nKSBpdCBkb2Vzbid0IG1hdHRlciBpZiB0aGUNCisJCQkJJ3N1c3BlbmQnIG9wZXJhdGlvbiBkb2Vzbid0IHRha2UgZWZmZWN0IGltbWVkaWF0ZWx5IC0gaWYgaXQNCisJCQkJZG9lc24ndCBpdCB3b3VsZCBqdXN0IGJlIGxpa2UgdGhlIGludGVycnVwdCBvY2N1cnJpbmcgc2xpZ2h0bHkNCisJCQkJbGF0ZXIuICBJbiBjYXNlcyB3aGVyZSB0aGUgeWllbGQgd2FzIGNhdXNlZCBieSBhIHRhc2sgYmxvY2tpbmcNCisJCQkJb3IgeWllbGRpbmcgdGhlbiB0aGUgdGFzayB3aWxsIGJsb2NrIG9uIGEgeWllbGQgZXZlbnQgYWZ0ZXIgdGhlDQorCQkJCXlpZWxkIG9wZXJhdGlvbiBpbiBjYXNlIHRoZSAnc3VzcGVuZCcgb3BlcmF0aW9uIGRvZXNuJ3QgdGFrZQ0KKwkJCQllZmZlY3QgaW1tZWRpYXRlbHkuICAqLw0KKwkJCQlweFRocmVhZFN0YXRlID0gKCBUaHJlYWRTdGF0ZV90ICopICooICggc2l6ZV90ICogKSBwdk9sZEN1cnJlbnRUQ0IgKTsNCisJCQkJU3VzcGVuZFRocmVhZCggcHhUaHJlYWRTdGF0ZS0+cHZUaHJlYWQgKTsNCiANCi0gICAgICAgICAgICAgICAgLyogRW5zdXJlIHRoZSB0aHJlYWQgaXMgYWN0dWFsbHkgc3VzcGVuZGVkIGJ5IHBlcmZvcm1pbmcgYQ0KLSAgICAgICAgICAgICAgICAgKiAgc3luY2hyb25vdXMgb3BlcmF0aW9uIHRoYXQgY2FuIG9ubHkgY29tcGxldGUgd2hlbiB0aGUgdGhyZWFkIGlzDQotICAgICAgICAgICAgICAgICAqICBhY3R1YWxseSBzdXNwZW5kZWQuICBUaGUgYmVsb3cgY29kZSBhc2tzIGZvciBkdW1teSByZWdpc3Rlcg0KLSAgICAgICAgICAgICAgICAgKiAgZGF0YS4gIEV4cGVyaW1lbnRhdGlvbiBzaG93cyB0aGF0IHRoZXNlIHR3byBsaW5lcyBkb24ndCBhcHBlYXINCi0gICAgICAgICAgICAgICAgICogIHRvIGRvIGFueXRoaW5nIG5vdywgYnV0IGFjY29yZGluZyB0bw0KLSAgICAgICAgICAgICAgICAgKiAgaHR0cHM6Ly9kZXZibG9ncy5taWNyb3NvZnQuY29tL29sZG5ld3RoaW5nLzIwMTUwMjA1LTAwLz9wPTQ0NzQzDQotICAgICAgICAgICAgICAgICAqICB0aGV5IGRvIC0gc28gYXMgdGhleSBkbyBub3QgaGFybSAoc2xpZ2h0IHJ1bi10aW1lIGhpdCkuICovDQotICAgICAgICAgICAgICAgIHhDb250ZXh0LkNvbnRleHRGbGFncyA9IENPTlRFWFRfSU5URUdFUjsNCi0gICAgICAgICAgICAgICAgKCB2b2lkICkgR2V0VGhyZWFkQ29udGV4dCggcHhUaHJlYWRTdGF0ZS0+cHZUaHJlYWQsICZ4Q29udGV4dCApOw0KKwkJCQkvKiBFbnN1cmUgdGhlIHRocmVhZCBpcyBhY3R1YWxseSBzdXNwZW5kZWQgYnkgcGVyZm9ybWluZyBhDQorCQkJCXN5bmNocm9ub3VzIG9wZXJhdGlvbiB0aGF0IGNhbiBvbmx5IGNvbXBsZXRlIHdoZW4gdGhlIHRocmVhZCBpcw0KKwkJCQlhY3R1YWxseSBzdXNwZW5kZWQuICBUaGUgYmVsb3cgY29kZSBhc2tzIGZvciBkdW1teSByZWdpc3Rlcg0KKwkJCQlkYXRhLiAgRXhwZXJpbWVudGF0aW9uIHNob3dzIHRoYXQgdGhlc2UgdHdvIGxpbmVzIGRvbid0IGFwcGVhcg0KKwkJCQl0byBkbyBhbnl0aGluZyBub3csIGJ1dCBhY2NvcmRpbmcgdG8NCisJCQkJaHR0cHM6Ly9kZXZibG9ncy5taWNyb3NvZnQuY29tL29sZG5ld3RoaW5nLzIwMTUwMjA1LTAwLz9wPTQ0NzQzDQorCQkJCXRoZXkgZG8gLSBzbyBhcyB0aGV5IGRvIG5vdCBoYXJtIChzbGlnaHQgcnVuLXRpbWUgaGl0KS4gKi8NCisJCQkJeENvbnRleHQuQ29udGV4dEZsYWdzID0gQ09OVEVYVF9JTlRFR0VSOw0KKwkJCQkoIHZvaWQgKSBHZXRUaHJlYWRDb250ZXh0KCBweFRocmVhZFN0YXRlLT5wdlRocmVhZCwgJnhDb250ZXh0ICk7DQogDQotICAgICAgICAgICAgICAgIC8qIE9idGFpbiB0aGUgc3RhdGUgb2YgdGhlIHRhc2sgbm93IHNlbGVjdGVkIHRvIGVudGVyIHRoZQ0KLSAgICAgICAgICAgICAgICAgKiBSdW5uaW5nIHN0YXRlLiAqLw0KLSAgICAgICAgICAgICAgICBweFRocmVhZFN0YXRlID0gKCBUaHJlYWRTdGF0ZV90ICogKSAoICooIHNpemVfdCAqICkgcHhDdXJyZW50VENCICk7DQorCQkJCS8qIE9idGFpbiB0aGUgc3RhdGUgb2YgdGhlIHRhc2sgbm93IHNlbGVjdGVkIHRvIGVudGVyIHRoZQ0KKwkJCQlSdW5uaW5nIHN0YXRlLiAqLw0KKwkJCQlweFRocmVhZFN0YXRlID0gKCBUaHJlYWRTdGF0ZV90ICogKSAoICooIHNpemVfdCAqKSBweEN1cnJlbnRUQ0IgKTsNCiANCi0gICAgICAgICAgICAgICAgLyogcHhUaHJlYWRTdGF0ZS0+cHZUaHJlYWQgY2FuIGJlIE5VTEwgaWYgdGhlIHRhc2sgZGVsZXRlZA0KLSAgICAgICAgICAgICAgICAgKiBpdHNlbGYgLSBidXQgYSBkZWxldGVkIHRhc2sgc2hvdWxkIG5ldmVyIGJlIHJlc3VtZWQgaGVyZS4gKi8NCi0gICAgICAgICAgICAgICAgY29uZmlnQVNTRVJUKCBweFRocmVhZFN0YXRlLT5wdlRocmVhZCAhPSBOVUxMICk7DQotICAgICAgICAgICAgICAgIFJlc3VtZVRocmVhZCggcHhUaHJlYWRTdGF0ZS0+cHZUaHJlYWQgKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQorCQkJCS8qIHB4VGhyZWFkU3RhdGUtPnB2VGhyZWFkIGNhbiBiZSBOVUxMIGlmIHRoZSB0YXNrIGRlbGV0ZWQNCisJCQkJaXRzZWxmIC0gYnV0IGEgZGVsZXRlZCB0YXNrIHNob3VsZCBuZXZlciBiZSByZXN1bWVkIGhlcmUuICovDQorCQkJCWNvbmZpZ0FTU0VSVCggcHhUaHJlYWRTdGF0ZS0+cHZUaHJlYWQgIT0gTlVMTCApOw0KKwkJCQlSZXN1bWVUaHJlYWQoIHB4VGhyZWFkU3RhdGUtPnB2VGhyZWFkICk7DQorCQkJfQ0KKwkJfQ0KIA0KLSAgICAgICAgLyogSWYgdGhlIHRocmVhZCB0aGF0IGlzIGFib3V0IHRvIGJlIHJlc3VtZWQgc3RvcHBlZCBydW5uaW5nDQotICAgICAgICAgKiBiZWNhdXNlIGl0IHlpZWxkZWQgdGhlbiBpdCB3aWxsIHdhaXQgb24gYW4gZXZlbnQgd2hlbiBpdCByZXN1bWVkDQotICAgICAgICAgKiAodG8gZW5zdXJlIGl0IGRvZXMgbm90IGNvbnRpbnVlIHJ1bm5pbmcgYWZ0ZXIgdGhlIGNhbGwgdG8NCi0gICAgICAgICAqIFN1c3BlbmRUaHJlYWQoKSBhYm92ZSBhcyBTdXNwZW5kVGhyZWFkKCkgaXMgYXN5bmNocm9ub3VzKS4NCi0gICAgICAgICAqIFNpZ25hbCB0aGUgZXZlbnQgdG8gZW5zdXJlIHRoZSB0aHJlYWQgY2FuIHByb2NlZWQgbm93IGl0IGlzDQotICAgICAgICAgKiB2YWxpZCBmb3IgaXQgdG8gZG8gc28uICBTaWduYWxpbmcgdGhlIGV2ZW50IGlzIGJlbmlnbiBpbiB0aGUgY2FzZSB0aGF0DQotICAgICAgICAgKiB0aGUgdGFzayB3YXMgc3dpdGNoZWQgb3V0IGFzeW5jaHJvbm91c2x5IGJ5IGFuIGludGVycnVwdCBhcyB0aGUgZXZlbnQNCi0gICAgICAgICAqIGlzIHJlc2V0IGJlZm9yZSB0aGUgdGFzayBibG9ja3Mgb24gaXQuICovDQotICAgICAgICBweFRocmVhZFN0YXRlID0gKCBUaHJlYWRTdGF0ZV90ICogKSAoICooIHNpemVfdCAqICkgcHhDdXJyZW50VENCICk7DQotICAgICAgICBTZXRFdmVudCggcHhUaHJlYWRTdGF0ZS0+cHZZaWVsZEV2ZW50ICk7DQotICAgICAgICBSZWxlYXNlTXV0ZXgoIHB2SW50ZXJydXB0RXZlbnRNdXRleCApOw0KLSAgICB9DQorCQkvKiBJZiB0aGUgdGhyZWFkIHRoYXQgaXMgYWJvdXQgdG8gYmUgcmVzdW1lZCBzdG9wcGVkIHJ1bm5pbmcNCisJCWJlY2F1c2UgaXQgeWllbGRlZCB0aGVuIGl0IHdpbGwgd2FpdCBvbiBhbiBldmVudCB3aGVuIGl0IHJlc3VtZWQNCisJCSh0byBlbnN1cmUgaXQgZG9lcyBub3QgY29udGludWUgcnVubmluZyBhZnRlciB0aGUgY2FsbCB0bw0KKwkJU3VzcGVuZFRocmVhZCgpIGFib3ZlIGFzIFN1c3BlbmRUaHJlYWQoKSBpcyBhc3luY2hyb25vdXMpLg0KKwkJU2lnbmFsIHRoZSBldmVudCB0byBlbnN1cmUgdGhlIHRocmVhZCBjYW4gcHJvY2VlZCBub3cgaXQgaXMNCisJCXZhbGlkIGZvciBpdCB0byBkbyBzby4gIFNpZ25hbGluZyB0aGUgZXZlbnQgaXMgYmVuaWduIGluIHRoZSBjYXNlIHRoYXQNCisJCXRoZSB0YXNrIHdhcyBzd2l0Y2hlZCBvdXQgYXN5bmNocm9ub3VzbHkgYnkgYW4gaW50ZXJydXB0IGFzIHRoZSBldmVudA0KKwkJaXMgcmVzZXQgYmVmb3JlIHRoZSB0YXNrIGJsb2NrcyBvbiBpdC4gKi8NCisJCXB4VGhyZWFkU3RhdGUgPSAoIFRocmVhZFN0YXRlX3QgKiApICggKiggc2l6ZV90ICopIHB4Q3VycmVudFRDQiApOw0KKwkJU2V0RXZlbnQoIHB4VGhyZWFkU3RhdGUtPnB2WWllbGRFdmVudCApOw0KKwkJUmVsZWFzZU11dGV4KCBwdkludGVycnVwdEV2ZW50TXV0ZXggKTsNCisJfQ0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi12b2lkIHZQb3J0RGVsZXRlVGhyZWFkKCB2b2lkICogcHZUYXNrVG9EZWxldGUgKQ0KK3ZvaWQgdlBvcnREZWxldGVUaHJlYWQoIHZvaWQgKnB2VGFza1RvRGVsZXRlICkNCiB7DQotICAgIFRocmVhZFN0YXRlX3QgKiBweFRocmVhZFN0YXRlOw0KLSAgICB1aW50MzJfdCB1bEVycm9yQ29kZTsNCitUaHJlYWRTdGF0ZV90ICpweFRocmVhZFN0YXRlOw0KK3VpbnQzMl90IHVsRXJyb3JDb2RlOw0KIA0KLSAgICAvKiBSZW1vdmUgY29tcGlsZXIgd2FybmluZ3MgaWYgY29uZmlnQVNTRVJUKCkgaXMgbm90IGRlZmluZWQuICovDQotICAgICggdm9pZCApIHVsRXJyb3JDb2RlOw0KKwkvKiBSZW1vdmUgY29tcGlsZXIgd2FybmluZ3MgaWYgY29uZmlnQVNTRVJUKCkgaXMgbm90IGRlZmluZWQuICovDQorCSggdm9pZCApIHVsRXJyb3JDb2RlOw0KIA0KLSAgICAvKiBGaW5kIHRoZSBoYW5kbGUgb2YgdGhlIHRocmVhZCBiZWluZyBkZWxldGVkLiAqLw0KLSAgICBweFRocmVhZFN0YXRlID0gKCBUaHJlYWRTdGF0ZV90ICogKSAoICooIHNpemVfdCAqICkgcHZUYXNrVG9EZWxldGUgKTsNCisJLyogRmluZCB0aGUgaGFuZGxlIG9mIHRoZSB0aHJlYWQgYmVpbmcgZGVsZXRlZC4gKi8NCisJcHhUaHJlYWRTdGF0ZSA9ICggVGhyZWFkU3RhdGVfdCAqICkgKCAqKCBzaXplX3QgKikgcHZUYXNrVG9EZWxldGUgKTsNCiANCi0gICAgLyogQ2hlY2sgdGhhdCB0aGUgdGhyZWFkIGlzIHN0aWxsIHZhbGlkLCBpdCBtaWdodCBoYXZlIGJlZW4gY2xvc2VkIGJ5DQotICAgICAqIHZQb3J0Q2xvc2VSdW5uaW5nVGhyZWFkKCkgLSB3aGljaCB3aWxsIGJlIHRoZSBjYXNlIGlmIHRoZSB0YXNrIGFzc29jaWF0ZWQNCi0gICAgICogd2l0aCB0aGUgdGhyZWFkIG9yaWdpbmFsbHkgZGVsZXRlZCBpdHNlbGYgcmF0aGVyIHRoYW4gYmVpbmcgZGVsZXRlZCBieSBhDQotICAgICAqIGRpZmZlcmVudCB0YXNrLiAqLw0KLSAgICBpZiggcHhUaHJlYWRTdGF0ZS0+cHZUaHJlYWQgIT0gTlVMTCApDQotICAgIHsNCi0gICAgICAgIFdhaXRGb3JTaW5nbGVPYmplY3QoIHB2SW50ZXJydXB0RXZlbnRNdXRleCwgSU5GSU5JVEUgKTsNCisJLyogQ2hlY2sgdGhhdCB0aGUgdGhyZWFkIGlzIHN0aWxsIHZhbGlkLCBpdCBtaWdodCBoYXZlIGJlZW4gY2xvc2VkIGJ5DQorCXZQb3J0Q2xvc2VSdW5uaW5nVGhyZWFkKCkgLSB3aGljaCB3aWxsIGJlIHRoZSBjYXNlIGlmIHRoZSB0YXNrIGFzc29jaWF0ZWQNCisJd2l0aCB0aGUgdGhyZWFkIG9yaWdpbmFsbHkgZGVsZXRlZCBpdHNlbGYgcmF0aGVyIHRoYW4gYmVpbmcgZGVsZXRlZCBieSBhDQorCWRpZmZlcmVudCB0YXNrLiAqLw0KKwlpZiggcHhUaHJlYWRTdGF0ZS0+cHZUaHJlYWQgIT0gTlVMTCApDQorCXsNCisJCVdhaXRGb3JTaW5nbGVPYmplY3QoIHB2SW50ZXJydXB0RXZlbnRNdXRleCwgSU5GSU5JVEUgKTsNCiANCi0gICAgICAgIC8qICEhISBUaGlzIGlzIG5vdCBhIG5pY2Ugd2F5IHRvIHRlcm1pbmF0ZSBhIHRocmVhZCwgYW5kIHdpbGwgZXZlbnR1YWxseQ0KLSAgICAgICAgICogcmVzdWx0IGluIHJlc291cmNlcyBiZWluZyBkZXBsZXRlZCBpZiB0YXNrcyBmcmVxdWVudGx5IGRlbGV0ZSBvdGhlcg0KLSAgICAgICAgICogdGFza3MgKHJhdGhlciB0aGFuIGRlbGV0aW5nIHRoZW1zZWx2ZXMpIGFzIHRoZSB0YXNrIHN0YWNrcyB3aWxsIG5vdCBiZQ0KLSAgICAgICAgICogZnJlZWQuICovDQotICAgICAgICB1bEVycm9yQ29kZSA9IFRlcm1pbmF0ZVRocmVhZCggcHhUaHJlYWRTdGF0ZS0+cHZUaHJlYWQsIDAgKTsNCi0gICAgICAgIGNvbmZpZ0FTU0VSVCggdWxFcnJvckNvZGUgKTsNCisJCS8qICEhISBUaGlzIGlzIG5vdCBhIG5pY2Ugd2F5IHRvIHRlcm1pbmF0ZSBhIHRocmVhZCwgYW5kIHdpbGwgZXZlbnR1YWxseQ0KKwkJcmVzdWx0IGluIHJlc291cmNlcyBiZWluZyBkZXBsZXRlZCBpZiB0YXNrcyBmcmVxdWVudGx5IGRlbGV0ZSBvdGhlcg0KKwkJdGFza3MgKHJhdGhlciB0aGFuIGRlbGV0aW5nIHRoZW1zZWx2ZXMpIGFzIHRoZSB0YXNrIHN0YWNrcyB3aWxsIG5vdCBiZQ0KKwkJZnJlZWQuICovDQorCQl1bEVycm9yQ29kZSA9IFRlcm1pbmF0ZVRocmVhZCggcHhUaHJlYWRTdGF0ZS0+cHZUaHJlYWQsIDAgKTsNCisJCWNvbmZpZ0FTU0VSVCggdWxFcnJvckNvZGUgKTsNCiANCi0gICAgICAgIHVsRXJyb3JDb2RlID0gQ2xvc2VIYW5kbGUoIHB4VGhyZWFkU3RhdGUtPnB2VGhyZWFkICk7DQotICAgICAgICBjb25maWdBU1NFUlQoIHVsRXJyb3JDb2RlICk7DQorCQl1bEVycm9yQ29kZSA9IENsb3NlSGFuZGxlKCBweFRocmVhZFN0YXRlLT5wdlRocmVhZCApOw0KKwkJY29uZmlnQVNTRVJUKCB1bEVycm9yQ29kZSApOw0KIA0KLSAgICAgICAgUmVsZWFzZU11dGV4KCBwdkludGVycnVwdEV2ZW50TXV0ZXggKTsNCi0gICAgfQ0KKwkJUmVsZWFzZU11dGV4KCBwdkludGVycnVwdEV2ZW50TXV0ZXggKTsNCisJfQ0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi12b2lkIHZQb3J0Q2xvc2VSdW5uaW5nVGhyZWFkKCB2b2lkICogcHZUYXNrVG9EZWxldGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9sYXRpbGUgQmFzZVR5cGVfdCAqIHB4UGVuZFlpZWxkICkNCit2b2lkIHZQb3J0Q2xvc2VSdW5uaW5nVGhyZWFkKCB2b2lkICpwdlRhc2tUb0RlbGV0ZSwgdm9sYXRpbGUgQmFzZVR5cGVfdCAqcHhQZW5kWWllbGQgKQ0KIHsNCi0gICAgVGhyZWFkU3RhdGVfdCAqIHB4VGhyZWFkU3RhdGU7DQotICAgIHZvaWQgKiBwdlRocmVhZDsNCi0gICAgdWludDMyX3QgdWxFcnJvckNvZGU7DQorVGhyZWFkU3RhdGVfdCAqcHhUaHJlYWRTdGF0ZTsNCit2b2lkICpwdlRocmVhZDsNCit1aW50MzJfdCB1bEVycm9yQ29kZTsNCiANCi0gICAgLyogUmVtb3ZlIGNvbXBpbGVyIHdhcm5pbmdzIGlmIGNvbmZpZ0FTU0VSVCgpIGlzIG5vdCBkZWZpbmVkLiAqLw0KLSAgICAoIHZvaWQgKSB1bEVycm9yQ29kZTsNCisJLyogUmVtb3ZlIGNvbXBpbGVyIHdhcm5pbmdzIGlmIGNvbmZpZ0FTU0VSVCgpIGlzIG5vdCBkZWZpbmVkLiAqLw0KKwkoIHZvaWQgKSB1bEVycm9yQ29kZTsNCiANCi0gICAgLyogRmluZCB0aGUgaGFuZGxlIG9mIHRoZSB0aHJlYWQgYmVpbmcgZGVsZXRlZC4gKi8NCi0gICAgcHhUaHJlYWRTdGF0ZSA9ICggVGhyZWFkU3RhdGVfdCAqICkgKCAqKCBzaXplX3QgKiApIHB2VGFza1RvRGVsZXRlICk7DQotICAgIHB2VGhyZWFkID0gcHhUaHJlYWRTdGF0ZS0+cHZUaHJlYWQ7DQorCS8qIEZpbmQgdGhlIGhhbmRsZSBvZiB0aGUgdGhyZWFkIGJlaW5nIGRlbGV0ZWQuICovDQorCXB4VGhyZWFkU3RhdGUgPSAoIFRocmVhZFN0YXRlX3QgKiApICggKiggc2l6ZV90ICopIHB2VGFza1RvRGVsZXRlICk7DQorCXB2VGhyZWFkID0gcHhUaHJlYWRTdGF0ZS0+cHZUaHJlYWQ7DQogDQotICAgIC8qIFJhaXNlIHRoZSBXaW5kb3dzIHByaW9yaXR5IG9mIHRoZSB0aHJlYWQgdG8gZW5zdXJlIHRoZSBGcmVlUlRPUyBzY2hlZHVsZXINCi0gICAgICogZG9lcyBub3QgcnVuIGFuZCBzd2FwIGl0IG91dCBiZWZvcmUgaXQgaXMgY2xvc2VkLiAgSWYgdGhhdCB3ZXJlIHRvIGhhcHBlbg0KLSAgICAgKiB0aGUgdGhyZWFkIHdvdWxkIG5ldmVyIHJ1biBhZ2FpbiBhbmQgZWZmZWN0aXZlbHkgYmUgYSB0aHJlYWQgaGFuZGxlIGFuZA0KLSAgICAgKiBtZW1vcnkgbGVhay4gKi8NCi0gICAgU2V0VGhyZWFkUHJpb3JpdHkoIHB2VGhyZWFkLCBwb3J0REVMRVRFX1NFTEZfVEhSRUFEX1BSSU9SSVRZICk7DQorCS8qIFJhaXNlIHRoZSBXaW5kb3dzIHByaW9yaXR5IG9mIHRoZSB0aHJlYWQgdG8gZW5zdXJlIHRoZSBGcmVlUlRPUyBzY2hlZHVsZXINCisJZG9lcyBub3QgcnVuIGFuZCBzd2FwIGl0IG91dCBiZWZvcmUgaXQgaXMgY2xvc2VkLiAgSWYgdGhhdCB3ZXJlIHRvIGhhcHBlbg0KKwl0aGUgdGhyZWFkIHdvdWxkIG5ldmVyIHJ1biBhZ2FpbiBhbmQgZWZmZWN0aXZlbHkgYmUgYSB0aHJlYWQgaGFuZGxlIGFuZA0KKwltZW1vcnkgbGVhay4gKi8NCisJU2V0VGhyZWFkUHJpb3JpdHkoIHB2VGhyZWFkLCBwb3J0REVMRVRFX1NFTEZfVEhSRUFEX1BSSU9SSVRZICk7DQogDQotICAgIC8qIFRoaXMgZnVuY3Rpb24gd2lsbCBub3QgcmV0dXJuLCB0aGVyZWZvcmUgYSB5aWVsZCBpcyBzZXQgYXMgcGVuZGluZyB0bw0KLSAgICAgKiBlbnN1cmUgYSBjb250ZXh0IHN3aXRjaCBvY2N1cnMgYXdheSBmcm9tIHRoaXMgdGhyZWFkIG9uIHRoZSBuZXh0IHRpY2suICovDQotICAgICpweFBlbmRZaWVsZCA9IHBkVFJVRTsNCisJLyogVGhpcyBmdW5jdGlvbiB3aWxsIG5vdCByZXR1cm4sIHRoZXJlZm9yZSBhIHlpZWxkIGlzIHNldCBhcyBwZW5kaW5nIHRvDQorCWVuc3VyZSBhIGNvbnRleHQgc3dpdGNoIG9jY3VycyBhd2F5IGZyb20gdGhpcyB0aHJlYWQgb24gdGhlIG5leHQgdGljay4gKi8NCisJKnB4UGVuZFlpZWxkID0gcGRUUlVFOw0KIA0KLSAgICAvKiBNYXJrIHRoZSB0aHJlYWQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdGFzayBhcyBpbnZhbGlkIHNvDQotICAgICAqIHZQb3J0RGVsZXRlVGhyZWFkKCkgZG9lcyBub3QgdHJ5IHRvIHRlcm1pbmF0ZSBpdC4gKi8NCi0gICAgcHhUaHJlYWRTdGF0ZS0+cHZUaHJlYWQgPSBOVUxMOw0KKwkvKiBNYXJrIHRoZSB0aHJlYWQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdGFzayBhcyBpbnZhbGlkIHNvDQorCXZQb3J0RGVsZXRlVGhyZWFkKCkgZG9lcyBub3QgdHJ5IHRvIHRlcm1pbmF0ZSBpdC4gKi8NCisJcHhUaHJlYWRTdGF0ZS0+cHZUaHJlYWQgPSBOVUxMOw0KIA0KLSAgICAvKiBDbG9zZSB0aGUgdGhyZWFkLiAqLw0KLSAgICB1bEVycm9yQ29kZSA9IENsb3NlSGFuZGxlKCBwdlRocmVhZCApOw0KLSAgICBjb25maWdBU1NFUlQoIHVsRXJyb3JDb2RlICk7DQorCS8qIENsb3NlIHRoZSB0aHJlYWQuICovDQorCXVsRXJyb3JDb2RlID0gQ2xvc2VIYW5kbGUoIHB2VGhyZWFkICk7DQorCWNvbmZpZ0FTU0VSVCggdWxFcnJvckNvZGUgKTsNCiANCi0gICAgLyogVGhpcyBpcyBjYWxsZWQgZnJvbSBhIGNyaXRpY2FsIHNlY3Rpb24sIHdoaWNoIG11c3QgYmUgZXhpdGVkIGJlZm9yZSB0aGUNCi0gICAgICogdGhyZWFkIHN0b3BzLiAqLw0KLSAgICB0YXNrRVhJVF9DUklUSUNBTCgpOw0KLSAgICBDbG9zZUhhbmRsZSggcHhUaHJlYWRTdGF0ZS0+cHZZaWVsZEV2ZW50ICk7DQotICAgIEV4aXRUaHJlYWQoIDAgKTsNCisJLyogVGhpcyBpcyBjYWxsZWQgZnJvbSBhIGNyaXRpY2FsIHNlY3Rpb24sIHdoaWNoIG11c3QgYmUgZXhpdGVkIGJlZm9yZSB0aGUNCisJdGhyZWFkIHN0b3BzLiAqLw0KKwl0YXNrRVhJVF9DUklUSUNBTCgpOw0KKwlDbG9zZUhhbmRsZSggcHhUaHJlYWRTdGF0ZS0+cHZZaWVsZEV2ZW50ICk7DQorCUV4aXRUaHJlYWQoIDAgKTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogdm9pZCB2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApDQogew0KLSAgICBleGl0KCAwICk7DQorCWV4aXQoIDAgKTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogdm9pZCB2UG9ydEdlbmVyYXRlU2ltdWxhdGVkSW50ZXJydXB0KCB1aW50MzJfdCB1bEludGVycnVwdE51bWJlciApDQogew0KLSAgICBUaHJlYWRTdGF0ZV90ICogcHhUaHJlYWRTdGF0ZSA9ICggVGhyZWFkU3RhdGVfdCAqICkgKiggKCBzaXplX3QgKiApIHB4Q3VycmVudFRDQiApOw0KK1RocmVhZFN0YXRlX3QgKnB4VGhyZWFkU3RhdGUgPSAoIFRocmVhZFN0YXRlX3QgKikgKiggKCBzaXplX3QgKiApIHB4Q3VycmVudFRDQiApOw0KIA0KLSAgICBjb25maWdBU1NFUlQoIHhQb3J0UnVubmluZyApOw0KKwljb25maWdBU1NFUlQoIHhQb3J0UnVubmluZyApOw0KIA0KLSAgICBpZiggKCB1bEludGVycnVwdE51bWJlciA8IHBvcnRNQVhfSU5URVJSVVBUUyApICYmICggcHZJbnRlcnJ1cHRFdmVudE11dGV4ICE9IE5VTEwgKSApDQotICAgIHsNCi0gICAgICAgIFdhaXRGb3JTaW5nbGVPYmplY3QoIHB2SW50ZXJydXB0RXZlbnRNdXRleCwgSU5GSU5JVEUgKTsNCi0gICAgICAgIHVsUGVuZGluZ0ludGVycnVwdHMgfD0gKCAxIDw8IHVsSW50ZXJydXB0TnVtYmVyICk7DQorCWlmKCAoIHVsSW50ZXJydXB0TnVtYmVyIDwgcG9ydE1BWF9JTlRFUlJVUFRTICkgJiYgKCBwdkludGVycnVwdEV2ZW50TXV0ZXggIT0gTlVMTCApICkNCisJew0KKwkJV2FpdEZvclNpbmdsZU9iamVjdCggcHZJbnRlcnJ1cHRFdmVudE11dGV4LCBJTkZJTklURSApOw0KKwkJdWxQZW5kaW5nSW50ZXJydXB0cyB8PSAoIDEgPDwgdWxJbnRlcnJ1cHROdW1iZXIgKTsNCiANCi0gICAgICAgIC8qIFRoZSBzaW11bGF0ZWQgaW50ZXJydXB0IGlzIG5vdyBoZWxkIHBlbmRpbmcsIGJ1dCBkb24ndCBhY3R1YWxseQ0KLSAgICAgICAgICogcHJvY2VzcyBpdCB5ZXQgaWYgdGhpcyBjYWxsIGlzIHdpdGhpbiBhIGNyaXRpY2FsIHNlY3Rpb24uICBJdCBpcw0KLSAgICAgICAgICogcG9zc2libGUgZm9yIHRoaXMgdG8gYmUgaW4gYSBjcml0aWNhbCBzZWN0aW9uIGFzIGNhbGxzIHRvIHdhaXQgZm9yDQotICAgICAgICAgKiBtdXRleGVzIGFyZSBhY2N1bXVsYXRpdmUuICBJZiBpbiBhIGNyaXRpY2FsIHNlY3Rpb24gdGhlbiB0aGUgZXZlbnQNCi0gICAgICAgICAqIHdpbGwgZ2V0IHNldCB3aGVuIHRoZSBjcml0aWNhbCBzZWN0aW9uIG5lc3RpbmcgY291bnQgaXMgd291bmQgYmFjaw0KLSAgICAgICAgICogZG93biB0byB6ZXJvLiAqLw0KLSAgICAgICAgaWYoIHVsQ3JpdGljYWxOZXN0aW5nID09IHBvcnROT19DUklUSUNBTF9ORVNUSU5HICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBTZXRFdmVudCggcHZJbnRlcnJ1cHRFdmVudCApOw0KKwkJLyogVGhlIHNpbXVsYXRlZCBpbnRlcnJ1cHQgaXMgbm93IGhlbGQgcGVuZGluZywgYnV0IGRvbid0IGFjdHVhbGx5DQorCQlwcm9jZXNzIGl0IHlldCBpZiB0aGlzIGNhbGwgaXMgd2l0aGluIGEgY3JpdGljYWwgc2VjdGlvbi4gIEl0IGlzDQorCQlwb3NzaWJsZSBmb3IgdGhpcyB0byBiZSBpbiBhIGNyaXRpY2FsIHNlY3Rpb24gYXMgY2FsbHMgdG8gd2FpdCBmb3INCisJCW11dGV4ZXMgYXJlIGFjY3VtdWxhdGl2ZS4gIElmIGluIGEgY3JpdGljYWwgc2VjdGlvbiB0aGVuIHRoZSBldmVudA0KKwkJd2lsbCBnZXQgc2V0IHdoZW4gdGhlIGNyaXRpY2FsIHNlY3Rpb24gbmVzdGluZyBjb3VudCBpcyB3b3VuZCBiYWNrDQorCQlkb3duIHRvIHplcm8uICovDQorCQlpZiggdWxDcml0aWNhbE5lc3RpbmcgPT0gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgKQ0KKwkJew0KKwkJCVNldEV2ZW50KCBwdkludGVycnVwdEV2ZW50ICk7DQogDQotICAgICAgICAgICAgLyogR29pbmcgdG8gd2FpdCBmb3IgYW4gZXZlbnQgLSBtYWtlIHN1cmUgdGhlIGV2ZW50IGlzIG5vdCBhbHJlYWR5DQotICAgICAgICAgICAgICogc2lnbmFsZWQuICovDQotICAgICAgICAgICAgUmVzZXRFdmVudCggcHhUaHJlYWRTdGF0ZS0+cHZZaWVsZEV2ZW50ICk7DQotICAgICAgICB9DQorCQkJLyogR29pbmcgdG8gd2FpdCBmb3IgYW4gZXZlbnQgLSBtYWtlIHN1cmUgdGhlIGV2ZW50IGlzIG5vdCBhbHJlYWR5DQorCQkJc2lnbmFsZWQuICovDQorCQkJUmVzZXRFdmVudCggcHhUaHJlYWRTdGF0ZS0+cHZZaWVsZEV2ZW50ICk7DQorCQl9DQogDQotICAgICAgICBSZWxlYXNlTXV0ZXgoIHB2SW50ZXJydXB0RXZlbnRNdXRleCApOw0KLQ0KLSAgICAgICAgaWYoIHVsQ3JpdGljYWxOZXN0aW5nID09IHBvcnROT19DUklUSUNBTF9ORVNUSU5HICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICAvKiBBbiBpbnRlcnJ1cHQgd2FzIHBlbmRlZCBzbyBlbnN1cmUgdG8gYmxvY2sgdG8gYWxsb3cgaXQgdG8NCi0gICAgICAgICAgICAgKiBleGVjdXRlLiAgSW4gbW9zdCBjYXNlcyB0aGUgKHNpbXVsYXRlZCkgaW50ZXJydXB0IHdpbGwgaGF2ZQ0KLSAgICAgICAgICAgICAqIGV4ZWN1dGVkIGJlZm9yZSB0aGUgbmV4dCBsaW5lIGlzIHJlYWNoZWQgLSBzbyB0aGlzIGlzIGp1c3QgdG8gbWFrZQ0KLSAgICAgICAgICAgICAqIHN1cmUuICovDQotICAgICAgICAgICAgV2FpdEZvclNpbmdsZU9iamVjdCggcHhUaHJlYWRTdGF0ZS0+cHZZaWVsZEV2ZW50LCBJTkZJTklURSApOw0KLSAgICAgICAgfQ0KLSAgICB9DQorCQlSZWxlYXNlTXV0ZXgoIHB2SW50ZXJydXB0RXZlbnRNdXRleCApOw0KKwkJaWYoIHVsQ3JpdGljYWxOZXN0aW5nID09IHBvcnROT19DUklUSUNBTF9ORVNUSU5HICkNCisJCXsNCisJCQkvKiBBbiBpbnRlcnJ1cHQgd2FzIHBlbmRlZCBzbyBlbnN1cmUgdG8gYmxvY2sgdG8gYWxsb3cgaXQgdG8NCisJCQlleGVjdXRlLiAgSW4gbW9zdCBjYXNlcyB0aGUgKHNpbXVsYXRlZCkgaW50ZXJydXB0IHdpbGwgaGF2ZQ0KKwkJCWV4ZWN1dGVkIGJlZm9yZSB0aGUgbmV4dCBsaW5lIGlzIHJlYWNoZWQgLSBzbyB0aGlzIGlzIGp1c3QgdG8gbWFrZQ0KKwkJCXN1cmUuICovDQorCQkJV2FpdEZvclNpbmdsZU9iamVjdCggcHhUaHJlYWRTdGF0ZS0+cHZZaWVsZEV2ZW50LCBJTkZJTklURSApOw0KKwkJfQ0KKwl9DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KLXZvaWQgdlBvcnRTZXRJbnRlcnJ1cHRIYW5kbGVyKCB1aW50MzJfdCB1bEludGVycnVwdE51bWJlciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKCAqIHB2SGFuZGxlciApKCB2b2lkICkgKQ0KK3ZvaWQgdlBvcnRTZXRJbnRlcnJ1cHRIYW5kbGVyKCB1aW50MzJfdCB1bEludGVycnVwdE51bWJlciwgdWludDMyX3QgKCpwdkhhbmRsZXIpKCB2b2lkICkgKQ0KIHsNCi0gICAgaWYoIHVsSW50ZXJydXB0TnVtYmVyIDwgcG9ydE1BWF9JTlRFUlJVUFRTICkNCi0gICAgew0KLSAgICAgICAgaWYoIHB2SW50ZXJydXB0RXZlbnRNdXRleCAhPSBOVUxMICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBXYWl0Rm9yU2luZ2xlT2JqZWN0KCBwdkludGVycnVwdEV2ZW50TXV0ZXgsIElORklOSVRFICk7DQotICAgICAgICAgICAgdWxJc3JIYW5kbGVyWyB1bEludGVycnVwdE51bWJlciBdID0gcHZIYW5kbGVyOw0KLSAgICAgICAgICAgIFJlbGVhc2VNdXRleCggcHZJbnRlcnJ1cHRFdmVudE11dGV4ICk7DQotICAgICAgICB9DQotICAgICAgICBlbHNlDQotICAgICAgICB7DQotICAgICAgICAgICAgdWxJc3JIYW5kbGVyWyB1bEludGVycnVwdE51bWJlciBdID0gcHZIYW5kbGVyOw0KLSAgICAgICAgfQ0KLSAgICB9DQorCWlmKCB1bEludGVycnVwdE51bWJlciA8IHBvcnRNQVhfSU5URVJSVVBUUyApDQorCXsNCisJCWlmKCBwdkludGVycnVwdEV2ZW50TXV0ZXggIT0gTlVMTCApDQorCQl7DQorCQkJV2FpdEZvclNpbmdsZU9iamVjdCggcHZJbnRlcnJ1cHRFdmVudE11dGV4LCBJTkZJTklURSApOw0KKwkJCXVsSXNySGFuZGxlclsgdWxJbnRlcnJ1cHROdW1iZXIgXSA9IHB2SGFuZGxlcjsNCisJCQlSZWxlYXNlTXV0ZXgoIHB2SW50ZXJydXB0RXZlbnRNdXRleCApOw0KKwkJfQ0KKwkJZWxzZQ0KKwkJew0KKwkJCXVsSXNySGFuZGxlclsgdWxJbnRlcnJ1cHROdW1iZXIgXSA9IHB2SGFuZGxlcjsNCisJCX0NCisJfQ0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCggdm9pZCApDQogew0KLSAgICBpZiggeFBvcnRSdW5uaW5nID09IHBkVFJVRSApDQotICAgIHsNCi0gICAgICAgIC8qIFRoZSBpbnRlcnJ1cHQgZXZlbnQgbXV0ZXggaXMgaGVsZCBmb3IgdGhlIGVudGlyZSBjcml0aWNhbCBzZWN0aW9uLA0KLSAgICAgICAgICogZWZmZWN0aXZlbHkgZGlzYWJsaW5nIChzaW11bGF0ZWQpIGludGVycnVwdHMuICovDQotICAgICAgICBXYWl0Rm9yU2luZ2xlT2JqZWN0KCBwdkludGVycnVwdEV2ZW50TXV0ZXgsIElORklOSVRFICk7DQotICAgIH0NCisJaWYoIHhQb3J0UnVubmluZyA9PSBwZFRSVUUgKQ0KKwl7DQorCQkvKiBUaGUgaW50ZXJydXB0IGV2ZW50IG11dGV4IGlzIGhlbGQgZm9yIHRoZSBlbnRpcmUgY3JpdGljYWwgc2VjdGlvbiwNCisJCWVmZmVjdGl2ZWx5IGRpc2FibGluZyAoc2ltdWxhdGVkKSBpbnRlcnJ1cHRzLiAqLw0KKwkJV2FpdEZvclNpbmdsZU9iamVjdCggcHZJbnRlcnJ1cHRFdmVudE11dGV4LCBJTkZJTklURSApOw0KKwl9DQogDQotICAgIHVsQ3JpdGljYWxOZXN0aW5nKys7DQorCXVsQ3JpdGljYWxOZXN0aW5nKys7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoIHZvaWQgKQ0KIHsNCi0gICAgaW50MzJfdCBsTXV0ZXhOZWVkc1JlbGVhc2luZzsNCitpbnQzMl90IGxNdXRleE5lZWRzUmVsZWFzaW5nOw0KIA0KLSAgICAvKiBUaGUgaW50ZXJydXB0IGV2ZW50IG11dGV4IHNob3VsZCBhbHJlYWR5IGJlIGhlbGQgYnkgdGhpcyB0aHJlYWQgYXMgaXQgd2FzDQotICAgICAqIG9idGFpbmVkIG9uIGVudHJ5IHRvIHRoZSBjcml0aWNhbCBzZWN0aW9uLiAqLw0KLSAgICBsTXV0ZXhOZWVkc1JlbGVhc2luZyA9IHBkVFJVRTsNCisJLyogVGhlIGludGVycnVwdCBldmVudCBtdXRleCBzaG91bGQgYWxyZWFkeSBiZSBoZWxkIGJ5IHRoaXMgdGhyZWFkIGFzIGl0IHdhcw0KKwlvYnRhaW5lZCBvbiBlbnRyeSB0byB0aGUgY3JpdGljYWwgc2VjdGlvbi4gKi8NCisJbE11dGV4TmVlZHNSZWxlYXNpbmcgPSBwZFRSVUU7DQogDQotICAgIGlmKCB1bENyaXRpY2FsTmVzdGluZyA+IHBvcnROT19DUklUSUNBTF9ORVNUSU5HICkNCi0gICAgew0KLSAgICAgICAgdWxDcml0aWNhbE5lc3RpbmctLTsNCisJaWYoIHVsQ3JpdGljYWxOZXN0aW5nID4gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgKQ0KKwl7DQorCQl1bENyaXRpY2FsTmVzdGluZy0tOw0KIA0KLSAgICAgICAgLyogRG9uJ3QgbmVlZCB0byB3YWl0IGZvciBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzIHRvIGV4ZWN1dGUgaWYgdGhlDQotICAgICAgICAgKiBjcml0aWNhbCBzZWN0aW9uIHdhcyBleGl0ZWQgZnJvbSBpbnNpZGUgYW4gaW50ZXJydXB0LiAqLw0KLSAgICAgICAgaWYoICggdWxDcml0aWNhbE5lc3RpbmcgPT0gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgKSAmJiAoIHhJbnNpZGVJbnRlcnJ1cHQgPT0gcGRGQUxTRSApICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICAvKiBXZXJlIGFueSBpbnRlcnJ1cHRzIHNldCB0byBwZW5kaW5nIHdoaWxlIGludGVycnVwdHMgd2VyZQ0KLSAgICAgICAgICAgICAqIChzaW11bGF0ZWQpIGRpc2FibGVkPyAqLw0KLSAgICAgICAgICAgIGlmKCB1bFBlbmRpbmdJbnRlcnJ1cHRzICE9IDBVTCApDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBUaHJlYWRTdGF0ZV90ICogcHhUaHJlYWRTdGF0ZSA9ICggVGhyZWFkU3RhdGVfdCAqICkgKiggKCBzaXplX3QgKiApIHB4Q3VycmVudFRDQiApOw0KKwkJLyogRG9uJ3QgbmVlZCB0byB3YWl0IGZvciBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzIHRvIGV4ZWN1dGUgaWYgdGhlDQorCQljcml0aWNhbCBzZWN0aW9uIHdhcyBleGl0ZWQgZnJvbSBpbnNpZGUgYW4gaW50ZXJydXB0LiAqLw0KKwkJaWYoICggdWxDcml0aWNhbE5lc3RpbmcgPT0gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgKSAmJiAoIHhJbnNpZGVJbnRlcnJ1cHQgPT0gcGRGQUxTRSApICkNCisJCXsNCisJCQkvKiBXZXJlIGFueSBpbnRlcnJ1cHRzIHNldCB0byBwZW5kaW5nIHdoaWxlIGludGVycnVwdHMgd2VyZQ0KKwkJCShzaW11bGF0ZWQpIGRpc2FibGVkPyAqLw0KKwkJCWlmKCB1bFBlbmRpbmdJbnRlcnJ1cHRzICE9IDBVTCApDQorCQkJew0KKwkJCQlUaHJlYWRTdGF0ZV90ICpweFRocmVhZFN0YXRlID0gKCBUaHJlYWRTdGF0ZV90ICopICooICggc2l6ZV90ICogKSBweEN1cnJlbnRUQ0IgKTsNCiANCi0gICAgICAgICAgICAgICAgY29uZmlnQVNTRVJUKCB4UG9ydFJ1bm5pbmcgKTsNCisJCQkJY29uZmlnQVNTRVJUKCB4UG9ydFJ1bm5pbmcgKTsNCiANCi0gICAgICAgICAgICAgICAgLyogVGhlIGludGVycnVwdCB3b24ndCBhY3R1YWxseSBleGVjdXRlZCB1bnRpbA0KLSAgICAgICAgICAgICAgICAgKiBwdkludGVycnVwdEV2ZW50TXV0ZXggaXMgcmVsZWFzZWQgYXMgaXQgd2FpdHMgb24gYm90aA0KLSAgICAgICAgICAgICAgICAgKiBwdkludGVycnVwdEV2ZW50TXV0ZXggYW5kIHB2SW50ZXJydXB0RXZlbnQuDQotICAgICAgICAgICAgICAgICAqIHB2SW50ZXJydXB0RXZlbnQgaXMgb25seSBzZXQgd2hlbiB0aGUgc2ltdWxhdGVkDQotICAgICAgICAgICAgICAgICAqIGludGVycnVwdCBpcyBwZW5kZWQgaWYgdGhlIGludGVycnVwdCBpcyBwZW5kZWQNCi0gICAgICAgICAgICAgICAgICogZnJvbSBvdXRzaWRlIGEgY3JpdGljYWwgc2VjdGlvbiAtIGhlbmNlIGl0IGlzIHNldA0KLSAgICAgICAgICAgICAgICAgKiBoZXJlLiAqLw0KLSAgICAgICAgICAgICAgICBTZXRFdmVudCggcHZJbnRlcnJ1cHRFdmVudCApOw0KKwkJCQkvKiBUaGUgaW50ZXJydXB0IHdvbid0IGFjdHVhbGx5IGV4ZWN1dGVkIHVudGlsDQorCQkJCXB2SW50ZXJydXB0RXZlbnRNdXRleCBpcyByZWxlYXNlZCBhcyBpdCB3YWl0cyBvbiBib3RoDQorCQkJCXB2SW50ZXJydXB0RXZlbnRNdXRleCBhbmQgcHZJbnRlcnJ1cHRFdmVudC4NCisJCQkJcHZJbnRlcnJ1cHRFdmVudCBpcyBvbmx5IHNldCB3aGVuIHRoZSBzaW11bGF0ZWQNCisJCQkJaW50ZXJydXB0IGlzIHBlbmRlZCBpZiB0aGUgaW50ZXJydXB0IGlzIHBlbmRlZA0KKwkJCQlmcm9tIG91dHNpZGUgYSBjcml0aWNhbCBzZWN0aW9uIC0gaGVuY2UgaXQgaXMgc2V0DQorCQkJCWhlcmUuICovDQorCQkJCVNldEV2ZW50KCBwdkludGVycnVwdEV2ZW50ICk7DQorCQkJCS8qIFRoZSBjYWxsaW5nIHRhc2sgaXMgZ29pbmcgdG8gd2FpdCBmb3IgYW4gZXZlbnQgdG8gZW5zdXJlIHRoZQ0KKwkJCQlpbnRlcnJ1cHQgdGhhdCBpcyBwZW5kaW5nIGV4ZWN1dGVzIGltbWVkaWF0ZWx5IGFmdGVyIHRoZQ0KKwkJCQljcml0aWNhbCBzZWN0aW9uIGlzIGV4aXRlZCAtIHNvIG1ha2Ugc3VyZSB0aGUgZXZlbnQgaXMgbm90DQorCQkJCWFscmVhZHkgc2lnbmFsZWQuICovDQorCQkJCVJlc2V0RXZlbnQoIHB4VGhyZWFkU3RhdGUtPnB2WWllbGRFdmVudCApOw0KIA0KLSAgICAgICAgICAgICAgICAvKiBUaGUgY2FsbGluZyB0YXNrIGlzIGdvaW5nIHRvIHdhaXQgZm9yIGFuIGV2ZW50IHRvIGVuc3VyZSB0aGUNCi0gICAgICAgICAgICAgICAgICogaW50ZXJydXB0IHRoYXQgaXMgcGVuZGluZyBleGVjdXRlcyBpbW1lZGlhdGVseSBhZnRlciB0aGUNCi0gICAgICAgICAgICAgICAgICogY3JpdGljYWwgc2VjdGlvbiBpcyBleGl0ZWQgLSBzbyBtYWtlIHN1cmUgdGhlIGV2ZW50IGlzIG5vdA0KLSAgICAgICAgICAgICAgICAgKiBhbHJlYWR5IHNpZ25hbGVkLiAqLw0KLSAgICAgICAgICAgICAgICBSZXNldEV2ZW50KCBweFRocmVhZFN0YXRlLT5wdllpZWxkRXZlbnQgKTsNCisJCQkJLyogTXV0ZXggd2lsbCBiZSByZWxlYXNlZCBub3cgc28gdGhlIChzaW11bGF0ZWQpIGludGVycnVwdCBjYW4NCisJCQkJZXhlY3V0ZSwgc28gZG9lcyBub3QgcmVxdWlyZSByZWxlYXNpbmcgb24gZnVuY3Rpb24gZXhpdC4gKi8NCisJCQkJbE11dGV4TmVlZHNSZWxlYXNpbmcgPSBwZEZBTFNFOw0KKwkJCQlSZWxlYXNlTXV0ZXgoIHB2SW50ZXJydXB0RXZlbnRNdXRleCApOw0KKwkJCQlXYWl0Rm9yU2luZ2xlT2JqZWN0KCBweFRocmVhZFN0YXRlLT5wdllpZWxkRXZlbnQsIElORklOSVRFICk7DQorCQkJfQ0KKwkJfQ0KKwl9DQogDQotICAgICAgICAgICAgICAgIC8qIE11dGV4IHdpbGwgYmUgcmVsZWFzZWQgbm93IHNvIHRoZSAoc2ltdWxhdGVkKSBpbnRlcnJ1cHQgY2FuDQotICAgICAgICAgICAgICAgICAqIGV4ZWN1dGUsIHNvIGRvZXMgbm90IHJlcXVpcmUgcmVsZWFzaW5nIG9uIGZ1bmN0aW9uIGV4aXQuICovDQotICAgICAgICAgICAgICAgIGxNdXRleE5lZWRzUmVsZWFzaW5nID0gcGRGQUxTRTsNCi0gICAgICAgICAgICAgICAgUmVsZWFzZU11dGV4KCBwdkludGVycnVwdEV2ZW50TXV0ZXggKTsNCi0gICAgICAgICAgICAgICAgV2FpdEZvclNpbmdsZU9iamVjdCggcHhUaHJlYWRTdGF0ZS0+cHZZaWVsZEV2ZW50LCBJTkZJTklURSApOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLQ0KLSAgICBpZiggcHZJbnRlcnJ1cHRFdmVudE11dGV4ICE9IE5VTEwgKQ0KLSAgICB7DQotICAgICAgICBpZiggbE11dGV4TmVlZHNSZWxlYXNpbmcgPT0gcGRUUlVFICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBjb25maWdBU1NFUlQoIHhQb3J0UnVubmluZyApOw0KLSAgICAgICAgICAgIFJlbGVhc2VNdXRleCggcHZJbnRlcnJ1cHRFdmVudE11dGV4ICk7DQotICAgICAgICB9DQotICAgIH0NCisJaWYoIHB2SW50ZXJydXB0RXZlbnRNdXRleCAhPSBOVUxMICkNCisJew0KKwkJaWYoIGxNdXRleE5lZWRzUmVsZWFzaW5nID09IHBkVFJVRSApDQorCQl7DQorCQkJY29uZmlnQVNTRVJUKCB4UG9ydFJ1bm5pbmcgKTsNCisJCQlSZWxlYXNlTXV0ZXgoIHB2SW50ZXJydXB0RXZlbnRNdXRleCApOw0KKwkJfQ0KKwl9DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL01TVkMtTWluZ1cvcG9ydG1hY3JvLmggYi9wb3J0YWJsZS9NU1ZDLU1pbmdXL3BvcnRtYWNyby5oCmluZGV4IGMyYTUyOGUuLjkxYThhMGEgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL01TVkMtTWluZ1cvcG9ydG1hY3JvLmgKKysrIGIvcG9ydGFibGUvTVNWQy1NaW5nVy9wb3J0bWFjcm8uaApAQCAtMzIsMTIxICszMiwxMTkgQEAKICNpbmNsdWRlIDxXaW5CYXNlLmg+DQogDQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSogICBEZWZpbmVzDQorCURlZmluZXMNCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQogLyogVHlwZSBkZWZpbml0aW9ucy4gKi8NCi0jZGVmaW5lIHBvcnRDSEFSICAgICAgICAgICAgICAgICBjaGFyDQotI2RlZmluZSBwb3J0RkxPQVQgICAgICAgICAgICAgICAgZmxvYXQNCi0jZGVmaW5lIHBvcnRET1VCTEUgICAgICAgICAgICAgICBkb3VibGUNCi0jZGVmaW5lIHBvcnRMT05HICAgICAgICAgICAgICAgICBsb25nDQotI2RlZmluZSBwb3J0U0hPUlQgICAgICAgICAgICAgICAgc2hvcnQNCi0jZGVmaW5lIHBvcnRTVEFDS19UWVBFICAgICAgICAgICBzaXplX3QNCi0jZGVmaW5lIHBvcnRCQVNFX1RZUEUgICAgICAgICAgICBsb25nDQotI2RlZmluZSBwb3J0UE9JTlRFUl9TSVpFX1RZUEUgICAgc2l6ZV90DQorI2RlZmluZSBwb3J0Q0hBUgkJY2hhcg0KKyNkZWZpbmUgcG9ydEZMT0FUCQlmbG9hdA0KKyNkZWZpbmUgcG9ydERPVUJMRQkJZG91YmxlDQorI2RlZmluZSBwb3J0TE9ORwkJbG9uZw0KKyNkZWZpbmUgcG9ydFNIT1JUCQlzaG9ydA0KKyNkZWZpbmUgcG9ydFNUQUNLX1RZUEUJc2l6ZV90DQorI2RlZmluZSBwb3J0QkFTRV9UWVBFCWxvbmcNCisjZGVmaW5lIHBvcnRQT0lOVEVSX1NJWkVfVFlQRSBzaXplX3QNCiANCi10eXBlZGVmIHBvcnRTVEFDS19UWVBFICAgU3RhY2tUeXBlX3Q7DQotdHlwZWRlZiBsb25nICAgICAgICAgICAgIEJhc2VUeXBlX3Q7DQotdHlwZWRlZiB1bnNpZ25lZCBsb25nICAgIFVCYXNlVHlwZV90Ow0KK3R5cGVkZWYgcG9ydFNUQUNLX1RZUEUgU3RhY2tUeXBlX3Q7DQordHlwZWRlZiBsb25nIEJhc2VUeXBlX3Q7DQordHlwZWRlZiB1bnNpZ25lZCBsb25nIFVCYXNlVHlwZV90Ow0KIA0KIA0KLSNpZiAoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQotICAgIHR5cGVkZWYgdWludDE2X3QgICAgIFRpY2tUeXBlX3Q7DQotICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAgICAgICAgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQorI2lmKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KKyAgICB0eXBlZGVmIHVpbnQxNl90IFRpY2tUeXBlX3Q7DQorICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIFRpY2tUeXBlX3QgKSAweGZmZmYNCiAjZWxzZQ0KLSAgICB0eXBlZGVmIHVpbnQzMl90ICAgICBUaWNrVHlwZV90Ow0KLSAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgICAgICAgICAgICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTA0KKyAgICB0eXBlZGVmIHVpbnQzMl90IFRpY2tUeXBlX3Q7DQorICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwNCiANCi0vKiAzMi82NC1iaXQgdGljayB0eXBlIG9uIGEgMzIvNjQtYml0IGFyY2hpdGVjdHVyZSwgc28gcmVhZHMgb2YgdGhlIHRpY2sNCi0gKiBjb3VudCBkbyBub3QgbmVlZCB0byBiZSBndWFyZGVkIHdpdGggYSBjcml0aWNhbCBzZWN0aW9uLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRUSUNLX1RZUEVfSVNfQVRPTUlDICAgIDENCisJLyogMzIvNjQtYml0IHRpY2sgdHlwZSBvbiBhIDMyLzY0LWJpdCBhcmNoaXRlY3R1cmUsIHNvIHJlYWRzIG9mIHRoZSB0aWNrDQorCWNvdW50IGRvIG5vdCBuZWVkIHRvIGJlIGd1YXJkZWQgd2l0aCBhIGNyaXRpY2FsIHNlY3Rpb24uICovDQorCSNkZWZpbmUgcG9ydFRJQ0tfVFlQRV9JU19BVE9NSUMgMQ0KICNlbmRpZg0KIA0KIC8qIEhhcmR3YXJlIHNwZWNpZmljcy4gKi8NCi0jZGVmaW5lIHBvcnRTVEFDS19HUk9XVEggICAgICAgICAgKCAtMSApDQotI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMgICAgICAgICggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQotI2RlZmluZSBwb3J0SU5MSU5FICAgICAgICAgICAgICAgIF9faW5saW5lDQorI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RICQkJKCAtMSApDQorI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMJCQkoICggVGlja1R5cGVfdCApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KKyNkZWZpbmUgcG9ydElOTElORSBfX2lubGluZQ0KIA0KLSNpZiBkZWZpbmVkKCBfX3g4Nl82NF9fICkgfHwgZGVmaW5lZCggX01fWDY0ICkNCi0gICAgI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQgICAgOA0KKyNpZiBkZWZpbmVkKCBfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKCBfTV9YNjQgKQ0KKwkjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVAkJOA0KICNlbHNlDQotICAgICNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UICAgIDQNCisJI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQJCTQNCiAjZW5kaWYNCiANCi0jZGVmaW5lIHBvcnRZSUVMRCgpICAgIHZQb3J0R2VuZXJhdGVTaW11bGF0ZWRJbnRlcnJ1cHQoIHBvcnRJTlRFUlJVUFRfWUlFTEQgKQ0KKyNkZWZpbmUgcG9ydFlJRUxEKCkJCQkJCXZQb3J0R2VuZXJhdGVTaW11bGF0ZWRJbnRlcnJ1cHQoIHBvcnRJTlRFUlJVUFRfWUlFTEQgKQ0KIA0KIA0KIGV4dGVybiB2b2xhdGlsZSBCYXNlVHlwZV90IHhJbnNpZGVJbnRlcnJ1cHQ7DQotI2RlZmluZSBwb3J0U09GVFdBUkVfQkFSUklFUigpICAgIHdoaWxlKCB4SW5zaWRlSW50ZXJydXB0ICE9IHBkRkFMU0UgKQ0KKyNkZWZpbmUgcG9ydFNPRlRXQVJFX0JBUlJJRVIoKSB3aGlsZSggeEluc2lkZUludGVycnVwdCAhPSBwZEZBTFNFICkNCiANCiANCiAvKiBTaW11bGF0ZWQgaW50ZXJydXB0cyByZXR1cm4gcGRGQUxTRSBpZiBubyBjb250ZXh0IHN3aXRjaCBzaG91bGQgYmUgcGVyZm9ybWVkLA0KLSAqIG9yIGEgbm9uLXplcm8gbnVtYmVyIGlmIGEgY29udGV4dCBzd2l0Y2ggc2hvdWxkIGJlIHBlcmZvcm1lZC4gKi8NCi0jZGVmaW5lIHBvcnRZSUVMRF9GUk9NX0lTUiggeCApICAgICAgICggdm9pZCApIHgNCi0jZGVmaW5lIHBvcnRFTkRfU1dJVENISU5HX0lTUiggeCApICAgIHBvcnRZSUVMRF9GUk9NX0lTUiggKCB4ICkgKQ0KK29yIGEgbm9uLXplcm8gbnVtYmVyIGlmIGEgY29udGV4dCBzd2l0Y2ggc2hvdWxkIGJlIHBlcmZvcm1lZC4gKi8NCisjZGVmaW5lIHBvcnRZSUVMRF9GUk9NX0lTUiggeCApICggdm9pZCApIHgNCisjZGVmaW5lIHBvcnRFTkRfU1dJVENISU5HX0lTUiggeCApIHBvcnRZSUVMRF9GUk9NX0lTUiggKCB4ICkgKQ0KIA0KLXZvaWQgdlBvcnRDbG9zZVJ1bm5pbmdUaHJlYWQoIHZvaWQgKiBwdlRhc2tUb0RlbGV0ZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2xhdGlsZSBCYXNlVHlwZV90ICogcHhQZW5kWWllbGQgKTsNCi12b2lkIHZQb3J0RGVsZXRlVGhyZWFkKCB2b2lkICogcHZUaHJlYWRUb0RlbGV0ZSApOw0KLSNkZWZpbmUgcG9ydENMRUFOX1VQX1RDQiggcHhUQ0IgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2UG9ydERlbGV0ZVRocmVhZCggcHhUQ0IgKQ0KLSNkZWZpbmUgcG9ydFBSRV9UQVNLX0RFTEVURV9IT09LKCBwdlRhc2tUb0RlbGV0ZSwgcHhQZW5kWWllbGQgKSAgICB2UG9ydENsb3NlUnVubmluZ1RocmVhZCggKCBwdlRhc2tUb0RlbGV0ZSApLCAoIHB4UGVuZFlpZWxkICkgKQ0KLSNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2UG9ydEVudGVyQ3JpdGljYWwoKQ0KLSNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2UG9ydEV4aXRDcml0aWNhbCgpDQordm9pZCB2UG9ydENsb3NlUnVubmluZ1RocmVhZCggdm9pZCAqcHZUYXNrVG9EZWxldGUsIHZvbGF0aWxlIEJhc2VUeXBlX3QgKnB4UGVuZFlpZWxkICk7DQordm9pZCB2UG9ydERlbGV0ZVRocmVhZCggdm9pZCAqcHZUaHJlYWRUb0RlbGV0ZSApOw0KKyNkZWZpbmUgcG9ydENMRUFOX1VQX1RDQiggcHhUQ0IgKQl2UG9ydERlbGV0ZVRocmVhZCggcHhUQ0IgKQ0KKyNkZWZpbmUgcG9ydFBSRV9UQVNLX0RFTEVURV9IT09LKCBwdlRhc2tUb0RlbGV0ZSwgcHhQZW5kWWllbGQgKSB2UG9ydENsb3NlUnVubmluZ1RocmVhZCggKCBwdlRhc2tUb0RlbGV0ZSApLCAoIHB4UGVuZFlpZWxkICkgKQ0KKyNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpIHZQb3J0RW50ZXJDcml0aWNhbCgpDQorI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKSB2UG9ydEV4aXRDcml0aWNhbCgpDQogDQogLyogQ3JpdGljYWwgc2VjdGlvbiBoYW5kbGluZy4gKi8NCiB2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCggdm9pZCApOw0KIHZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCiANCi0jZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpICAgIHZQb3J0RW50ZXJDcml0aWNhbCgpDQotI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpICAgICB2UG9ydEV4aXRDcml0aWNhbCgpDQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKQkJdlBvcnRFbnRlckNyaXRpY2FsKCkNCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkJCQl2UG9ydEV4aXRDcml0aWNhbCgpDQogDQogI2lmbmRlZiBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04NCi0gICAgI2RlZmluZSBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gICAgMQ0KKwkjZGVmaW5lIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiAxDQogI2VuZGlmDQogDQogI2lmIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiA9PSAxDQogDQotLyogQ2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24uICovDQotICAgICNpZiAoIGNvbmZpZ01BWF9QUklPUklUSUVTID4gMzIgKQ0KLSAgICAgICAgI2Vycm9yIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiBjYW4gb25seSBiZSBzZXQgdG8gMSB3aGVuIGNvbmZpZ01BWF9QUklPUklUSUVTIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAzMi4gIEl0IGlzIHZlcnkgcmFyZSB0aGF0IGEgc3lzdGVtIHJlcXVpcmVzIG1vcmUgdGhhbiAxMCB0byAxNSBkaWZmZXJlbmNlIHByaW9yaXRpZXMgYXMgdGFza3MgdGhhdCBzaGFyZSBhIHByaW9yaXR5IHdpbGwgdGltZSBzbGljZS4NCi0gICAgI2VuZGlmDQorCS8qIENoZWNrIHRoZSBjb25maWd1cmF0aW9uLiAqLw0KKwkjaWYoIGNvbmZpZ01BWF9QUklPUklUSUVTID4gMzIgKQ0KKwkJI2Vycm9yIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiBjYW4gb25seSBiZSBzZXQgdG8gMSB3aGVuIGNvbmZpZ01BWF9QUklPUklUSUVTIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAzMi4gIEl0IGlzIHZlcnkgcmFyZSB0aGF0IGEgc3lzdGVtIHJlcXVpcmVzIG1vcmUgdGhhbiAxMCB0byAxNSBkaWZmZXJlbmNlIHByaW9yaXRpZXMgYXMgdGFza3MgdGhhdCBzaGFyZSBhIHByaW9yaXR5IHdpbGwgdGltZSBzbGljZS4NCisJI2VuZGlmDQogDQotLyogU3RvcmUvY2xlYXIgdGhlIHJlYWR5IHByaW9yaXRpZXMgaW4gYSBiaXQgbWFwLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRSRUNPUkRfUkVBRFlfUFJJT1JJVFkoIHV4UHJpb3JpdHksIHV4UmVhZHlQcmlvcml0aWVzICkgICAgKCB1eFJlYWR5UHJpb3JpdGllcyApIHw9ICggMVVMIDw8ICggdXhQcmlvcml0eSApICkNCi0gICAgI2RlZmluZSBwb3J0UkVTRVRfUkVBRFlfUFJJT1JJVFkoIHV4UHJpb3JpdHksIHV4UmVhZHlQcmlvcml0aWVzICkgICAgICggdXhSZWFkeVByaW9yaXRpZXMgKSAmPSB+KCAxVUwgPDwgKCB1eFByaW9yaXR5ICkgKQ0KKwkvKiBTdG9yZS9jbGVhciB0aGUgcmVhZHkgcHJpb3JpdGllcyBpbiBhIGJpdCBtYXAuICovDQorCSNkZWZpbmUgcG9ydFJFQ09SRF9SRUFEWV9QUklPUklUWSggdXhQcmlvcml0eSwgdXhSZWFkeVByaW9yaXRpZXMgKSAoIHV4UmVhZHlQcmlvcml0aWVzICkgfD0gKCAxVUwgPDwgKCB1eFByaW9yaXR5ICkgKQ0KKwkjZGVmaW5lIHBvcnRSRVNFVF9SRUFEWV9QUklPUklUWSggdXhQcmlvcml0eSwgdXhSZWFkeVByaW9yaXRpZXMgKSAoIHV4UmVhZHlQcmlvcml0aWVzICkgJj0gfiggMVVMIDw8ICggdXhQcmlvcml0eSApICkNCiANCiANCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQotICAgICNpZmRlZiBfX0dOVUNfXw0KLSAgICAgICAgI2RlZmluZSBwb3J0R0VUX0hJR0hFU1RfUFJJT1JJVFkoIHV4VG9wUHJpb3JpdHksIHV4UmVhZHlQcmlvcml0aWVzICkgXA0KLSAgICBfX2FzbSB2b2xhdGlsZSAoICJic3IgJTEsICUwXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgIDogIj1yIiAoIHV4VG9wUHJpb3JpdHkgKSA6ICJybSIgKCB1eFJlYWR5UHJpb3JpdGllcyApIDogImNjIiApDQotICAgICNlbHNlDQotDQotLyogQml0U2NhblJldmVyc2UgcmV0dXJucyB0aGUgYml0IHBvc2l0aW9uIG9mIHRoZSBtb3N0IHNpZ25pZmljYW50ICcxJw0KLSAqIGluIHRoZSB3b3JkLiAqLw0KLSAgICAgICAgI2RlZmluZSBwb3J0R0VUX0hJR0hFU1RfUFJJT1JJVFkoIHV4VG9wUHJpb3JpdHksIHV4UmVhZHlQcmlvcml0aWVzICkgICAgX0JpdFNjYW5SZXZlcnNlKCAoIERXT1JEICogKSAmKCB1eFRvcFByaW9yaXR5ICksICggdXhSZWFkeVByaW9yaXRpZXMgKSApDQotICAgICNlbmRpZiAvKiBfX0dOVUNfXyAqLw0KKwkjaWZkZWYgX19HTlVDX18NCisJCSNkZWZpbmUgcG9ydEdFVF9ISUdIRVNUX1BSSU9SSVRZKCB1eFRvcFByaW9yaXR5LCB1eFJlYWR5UHJpb3JpdGllcyApCVwNCisJCQlfX2FzbSB2b2xhdGlsZSgJImJzciAlMSwgJTBcblx0IiAJCQkJCQkJCQlcDQorCQkJCQkJCToiPXIiKHV4VG9wUHJpb3JpdHkpIDogInJtIih1eFJlYWR5UHJpb3JpdGllcykgOiAiY2MiICkNCisJI2Vsc2UNCisJCS8qIEJpdFNjYW5SZXZlcnNlIHJldHVybnMgdGhlIGJpdCBwb3NpdGlvbiBvZiB0aGUgbW9zdCBzaWduaWZpY2FudCAnMScNCisJCWluIHRoZSB3b3JkLiAqLw0KKwkJI2RlZmluZSBwb3J0R0VUX0hJR0hFU1RfUFJJT1JJVFkoIHV4VG9wUHJpb3JpdHksIHV4UmVhZHlQcmlvcml0aWVzICkgX0JpdFNjYW5SZXZlcnNlKCAoIERXT1JEICogKSAmKCB1eFRvcFByaW9yaXR5ICksICggdXhSZWFkeVByaW9yaXRpZXMgKSApDQorCSNlbmRpZiAvKiBfX0dOVUNfXyAqLw0KIA0KICNlbmRpZiAvKiB0YXNrUkVDT1JEX1JFQURZX1BSSU9SSVRZICovDQogDQogI2lmbmRlZiBfX0dOVUNfXw0KLSAgICBfX3ByYWdtYSggd2FybmluZyggZGlzYWJsZTogNDIxMSApICkgLyogTm9uc3RhbmRhcmQgZXh0ZW5zaW9uIHVzZWQsIGFzIGV4dGVybiBpcyBvbmx5IG5vbnN0YW5kYXJkIHRvIE1TVkMuICovDQorCV9fcHJhZ21hKCB3YXJuaW5nKCBkaXNhYmxlOjQyMTEgKSApIC8qIE5vbnN0YW5kYXJkIGV4dGVuc2lvbiB1c2VkLCBhcyBleHRlcm4gaXMgb25seSBub25zdGFuZGFyZCB0byBNU1ZDLiAqLw0KICNlbmRpZg0KIA0KIA0KIC8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAqLw0KLSNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KLSNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgICAgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KIA0KLSNkZWZpbmUgcG9ydElOVEVSUlVQVF9ZSUVMRCAgICAoIDBVTCApDQotI2RlZmluZSBwb3J0SU5URVJSVVBUX1RJQ0sgICAgICggMVVMICkNCisjZGVmaW5lIHBvcnRJTlRFUlJVUFRfWUlFTEQJCQkJKCAwVUwgKQ0KKyNkZWZpbmUgcG9ydElOVEVSUlVQVF9USUNLCQkJCSggMVVMICkNCiANCiAvKg0KICAqIFJhaXNlIGEgc2ltdWxhdGVkIGludGVycnVwdCByZXByZXNlbnRlZCBieSB0aGUgYml0IG1hc2sgaW4gdWxJbnRlcnJ1cHRNYXNrLg0KICAqIEVhY2ggYml0IGNhbiBiZSB1c2VkIHRvIHJlcHJlc2VudCBhbiBpbmRpdmlkdWFsIGludGVycnVwdCAtIHdpdGggdGhlIGZpcnN0DQogICogdHdvIGJpdHMgYmVpbmcgdXNlZCBmb3IgdGhlIFlpZWxkIGFuZCBUaWNrIGludGVycnVwdHMgcmVzcGVjdGl2ZWx5Lg0KLSAqLw0KKyovDQogdm9pZCB2UG9ydEdlbmVyYXRlU2ltdWxhdGVkSW50ZXJydXB0KCB1aW50MzJfdCB1bEludGVycnVwdE51bWJlciApOw0KIA0KIC8qDQpAQCAtMTU4LDcgKzE1Niw3IEBACiAgKiBJbnRlcnJ1cHQgaGFuZGxlciBmdW5jdGlvbnMgbXVzdCByZXR1cm4gYSBub24temVybyB2YWx1ZSBpZiBleGVjdXRpbmcgdGhlDQogICogaGFuZGxlciByZXN1bHRlZCBpbiBhIHRhc2sgc3dpdGNoIGJlaW5nIHJlcXVpcmVkLg0KICAqLw0KLXZvaWQgdlBvcnRTZXRJbnRlcnJ1cHRIYW5kbGVyKCB1aW50MzJfdCB1bEludGVycnVwdE51bWJlciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKCAqIHB2SGFuZGxlciApKCB2b2lkICkgKTsNCit2b2lkIHZQb3J0U2V0SW50ZXJydXB0SGFuZGxlciggdWludDMyX3QgdWxJbnRlcnJ1cHROdW1iZXIsIHVpbnQzMl90ICgqcHZIYW5kbGVyKSggdm9pZCApICk7DQogDQotI2VuZGlmIC8qIGlmbmRlZiBQT1JUTUFDUk9fSCAqLw0KKyNlbmRpZg0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL01pa3JvQy9BUk1fQ000Ri9wb3J0LmMgYi9wb3J0YWJsZS9NaWtyb0MvQVJNX0NNNEYvcG9ydC5jCmluZGV4IDczYjYyYzQuLmU2MWZjNDAgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL01pa3JvQy9BUk1fQ000Ri9wb3J0LmMKKysrIGIvcG9ydGFibGUvTWlrcm9DL0FSTV9DTTRGL3BvcnQuYwpAQCAtMjQ2LDE1ICsyNDYsMTcgQEAKIHZvaWQgdlBvcnRTVkNIYW5kbGVyKCB2b2lkICkgaXYgSVZUX0lOVF9TVkNhbGwgaWNzIElDU19PRkYNCiB7DQogICAgIF9fYXNtIHsNCi0gICAgICAgIGxkciByMywgPSBfcHhDdXJyZW50VENCICAgICAvKiBSZXN0b3JlIHRoZSBjb250ZXh0LiAqLw0KLSAgICAgICAgICAgICAgICAgIGxkciByMSwgWyByMyBdICAgIC8qIFVzZSBweEN1cnJlbnRUQ0JDb25zdCB0byBnZXQgdGhlIHB4Q3VycmVudFRDQiBhZGRyZXNzLiAqLw0KKy8qICpJTkRFTlQtT0ZGKiAqLw0KKyAgICAgICAgbGRyIHIzLCA9X3B4Q3VycmVudFRDQiAgICAgLyogUmVzdG9yZSB0aGUgY29udGV4dC4gKi8NCisgICAgICAgIGxkciByMSwgWyByMyBdICAgIC8qIFVzZSBweEN1cnJlbnRUQ0JDb25zdCB0byBnZXQgdGhlIHB4Q3VycmVudFRDQiBhZGRyZXNzLiAqLw0KICAgICAgICAgbGRyIHIwLCBbIHIxIF0gICAgICAgICAgICAgIC8qIFRoZSBmaXJzdCBpdGVtIGluIHB4Q3VycmVudFRDQiBpcyB0aGUgdGFzayB0b3Agb2Ygc3RhY2suICovDQogICAgICAgICBsZG0gcjAgISwgKCByNCAtIHIxMSwgcjE0ICkgLyogUG9wIHRoZSByZWdpc3RlcnMgdGhhdCBhcmUgbm90IGF1dG9tYXRpY2FsbHkgc2F2ZWQgb24gZXhjZXB0aW9uIGVudHJ5IGFuZCB0aGUgY3JpdGljYWwgbmVzdGluZyBjb3VudC4gKi8NCiAgICAgICAgIG1zciBwc3AsIHIwICAgICAgICAgICAgICAgICAvKiBSZXN0b3JlIHRoZSB0YXNrIHN0YWNrIHBvaW50ZXIuICovDQogICAgICAgICBpc2INCi0gICAgICAgIG1vdiByMCwgIyAwDQorICAgICAgICBtb3YgcjAsICMwDQogICAgICAgICBtc3IgYmFzZXByaSwgcjANCiAgICAgICAgIGJ4IHIxNA0KKy8qICpJTkRFTlQtT04qICovDQogICAgIH07DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KQEAgLTI2Miw4ICsyNjQsOSBAQAogc3RhdGljIHZvaWQgcHJ2UG9ydFN0YXJ0Rmlyc3RUYXNrKCB2b2lkICkNCiB7DQogICAgIF9fYXNtIHsNCi0gICAgICAgIGxkciByMCwgPSAweEUwMDBFRDA4IC8qIFVzZSB0aGUgTlZJQyBvZmZzZXQgcmVnaXN0ZXIgdG8gbG9jYXRlIHRoZSBzdGFjay4gKi8NCi0gICAgICAgICAgICAgICAgICBsZHIgcjAsIFsgcjAgXQ0KKy8qICpJTkRFTlQtT0ZGKiAqLw0KKyAgICAgICAgbGRyIHIwLCA9MHhFMDAwRUQwOCAvKiBVc2UgdGhlIE5WSUMgb2Zmc2V0IHJlZ2lzdGVyIHRvIGxvY2F0ZSB0aGUgc3RhY2suICovDQorICAgICAgICBsZHIgcjAsIFsgcjAgXQ0KICAgICAgICAgbGRyIHIwLCBbIHIwIF0NCiAgICAgICAgIG1zciBtc3AsIHIwIC8qIFNldCB0aGUgbXNwIGJhY2sgdG8gdGhlIHN0YXJ0IG9mIHRoZSBzdGFjay4gKi8NCiANCkBAIC0yNzEsMTQgKzI3NCwxNSBAQAogICAgICAgICAgKiBiZWZvcmUgdGhlIHNjaGVkdWxlciB3YXMgc3RhcnRlZCAtIHdoaWNoIHdvdWxkIG90aGVyd2lzZSByZXN1bHQgaW4gdGhlDQogICAgICAgICAgKiB1bm5lY2Vzc2FyeSBsZWF2aW5nIG9mIHNwYWNlIGluIHRoZSBTVkMgc3RhY2sgZm9yIGxhenkgc2F2aW5nIG9mIEZQVQ0KICAgICAgICAgICogcmVnaXN0ZXJzLiAqLw0KLSAgICAgICAgbW92IHIwLCAjIDANCisgICAgICAgIG1vdiByMCwgIzANCiAgICAgICAgIG1zciBjb250cm9sLCByMA0KICAgICAgICAgY3BzaWUgaSAvKiBHbG9iYWxseSBlbmFibGUgaW50ZXJydXB0cy4gKi8NCiAgICAgICAgIGNwc2llIGYNCiAgICAgICAgIGRzYg0KICAgICAgICAgaXNiDQotICAgICAgICAgICAgc3ZjICMgMCAvKiBTeXN0ZW0gY2FsbCB0byBzdGFydCBmaXJzdCB0YXNrLiAqLw0KKyAgICAgICAgc3ZjICMwIC8qIFN5c3RlbSBjYWxsIHRvIHN0YXJ0IGZpcnN0IHRhc2suICovDQogICAgICAgICBub3ANCisvKiAqSU5ERU5ULU9OKiAqLw0KICAgICB9Ow0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCkBAIC00MzIsMTggKzQzNiwxOSBAQAogew0KICAgICBfX2FzbSB7DQogICAgICAgICAjaWZkZWYgSFdfREVCVUcNCisvKiAqSU5ERU5ULU9GRiogKi8NCiANCiAgICAgICAgICAgICAvKiBUaGUgZnVuY3Rpb24gaXMgbm90IHRydWx5IG5ha2VkLCBzbyBhZGQgYmFjayB0aGUgNCBieXRlcyBzdWJ0cmFjdGVkDQotICAgICAgICAgICAgICogZnJvbSB0aGUgc3RhY2sgcG9pbnRlciBieSB0aGUgZnVuY3Rpb24gcHJvbG9ndWUuICovDQorICAgICAgICAgICAgKiBmcm9tIHRoZSBzdGFjayBwb2ludGVyIGJ5IHRoZSBmdW5jdGlvbiBwcm9sb2d1ZS4gKi8NCiAgICAgICAgICAgICBhZGQgc3AsIHNwLCAjIDQNCiAgICAgICAgICNlbmRpZg0KICAgICAgICAgbXJzIHIwLCBwc3ANCiAgICAgICAgIGlzYg0KIA0KLSAgICAgICAgbGRyIHIzLCA9IF9weEN1cnJlbnRUQ0IgLyogR2V0IHRoZSBsb2NhdGlvbiBvZiB0aGUgY3VycmVudCBUQ0IuICovDQotICAgICAgICAgICAgICAgICAgbGRyIHIyLCBbIHIzIF0NCisgICAgICAgIGxkciByMywgPV9weEN1cnJlbnRUQ0IgLyogR2V0IHRoZSBsb2NhdGlvbiBvZiB0aGUgY3VycmVudCBUQ0IuICovDQorICAgICAgICBsZHIgcjIsIFsgcjMgXQ0KIA0KLSAgICAgICAgdHN0IHIxNCwgIyAweDEwIC8qIElzIHRoZSB0YXNrIHVzaW5nIHRoZSBGUFUgY29udGV4dD8gIElmIHNvLCBwdXNoIGhpZ2ggdmZwIHJlZ2lzdGVycy4gKi8NCisgICAgICAgIHRzdCByMTQsICMweDEwIC8qIElzIHRoZSB0YXNrIHVzaW5nIHRoZSBGUFUgY29udGV4dD8gIElmIHNvLCBwdXNoIGhpZ2ggdmZwIHJlZ2lzdGVycy4gKi8NCiAgICAgICAgIGl0IGVxDQogICAgICAgICB2c3RtZGJlcSByMCAhLCAoIHMxNiAtIHMzMSApDQogDQpAQCAtNDUzLDEyICs0NTgsMTIgQEAKIA0KICAgICAgICAgc3RtZGIgc3AgISwgKCByMCwgcjMgKQ0KICAgICAgICAgbGRyIHIwLCA9IF91Y01heFN5c2NhbGxJbnRlcnJ1cHRQcmlvcml0eQ0KLSAgICAgICAgICAgICAgICAgIGxkciByMSwgWyByMCBdDQorICAgICAgICBsZHIgcjEsIFsgcjAgXQ0KICAgICAgICAgbXNyIGJhc2VwcmksIHIxDQogICAgICAgICBkc2INCiAgICAgICAgIGlzYg0KICAgICAgICAgYmwgX3ZUYXNrU3dpdGNoQ29udGV4dA0KLSAgICAgICAgbW92IHIwLCAjIDANCisgICAgICAgIG1vdiByMCwgIzANCiAgICAgICAgIG1zciBiYXNlcHJpLCByMA0KICAgICAgICAgbGRtIHNwICEsICggcjAsIHIzICkNCiANCkBAIC00NjcsMTMgKzQ3MiwxNCBAQAogDQogICAgICAgICBsZG0gcjAgISwgKCByNCAtIHIxMSwgcjE0ICkgLyogUG9wIHRoZSBjb3JlIHJlZ2lzdGVycy4gKi8NCiANCi0gICAgICAgIHRzdCByMTQsICMgMHgxMCAgICAgICAgICAgICAvKiBJcyB0aGUgdGFzayB1c2luZyB0aGUgRlBVIGNvbnRleHQ/ICBJZiBzbywgcG9wIHRoZSBoaWdoIHZmcCByZWdpc3RlcnMgdG9vLiAqLw0KKyAgICAgICAgdHN0IHIxNCwgIzB4MTAgICAgICAgICAgICAgLyogSXMgdGhlIHRhc2sgdXNpbmcgdGhlIEZQVSBjb250ZXh0PyAgSWYgc28sIHBvcCB0aGUgaGlnaCB2ZnAgcmVnaXN0ZXJzIHRvby4gKi8NCiAgICAgICAgIGl0IGVxDQogICAgICAgICB2bGRtaWFlcSByMCAhLCAoIHMxNiAtIHMzMSApDQogDQogICAgICAgICBtc3IgcHNwLCByMA0KICAgICAgICAgaXNiDQogICAgICAgICBieCByMTQNCisvKiAqSU5ERU5ULU9OKiAqLw0KICAgICB9DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KQEAgLTQ5OSw3ICs1MDUsNyBAQAogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KLSNpZiAoICggY29uZmlnVVNFX1RJQ0tMRVNTX0lETEUgPT0gMSApICYmICggY29uZmlnT1ZFUlJJREVfREVGQVVMVF9USUNLX0NPTkZJR1VSQVRJT04gPT0gMCApICkNCisgICAgI2lmICggKCBjb25maWdVU0VfVElDS0xFU1NfSURMRSA9PSAxICkgJiYgKCBjb25maWdPVkVSUklERV9ERUZBVUxUX1RJQ0tfQ09ORklHVVJBVElPTiA9PSAwICkgKQ0KIA0KICAgICB2b2lkIHZQb3J0U3VwcHJlc3NUaWNrc0FuZFNsZWVwKCBUaWNrVHlwZV90IHhFeHBlY3RlZElkbGVUaW1lICkNCiAgICAgew0KQEAgLTY5NCwxNCArNzAwLDE0IEBACiAgICAgICAgIH0NCiAgICAgfQ0KIA0KLSNlbmRpZiAvKiAjaWYgY29uZmlnVVNFX1RJQ0tMRVNTX0lETEUgKi8NCisgICAgI2VuZGlmIC8qICNpZiBjb25maWdVU0VfVElDS0xFU1NfSURMRSAqLw0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qDQogICogU2V0dXAgdGhlIHN5c3RpY2sgdGltZXIgdG8gZ2VuZXJhdGUgdGhlIHRpY2sgaW50ZXJydXB0cyBhdCB0aGUgcmVxdWlyZWQNCiAgKiBmcmVxdWVuY3kuDQogICovDQotI2lmICggY29uZmlnT1ZFUlJJREVfREVGQVVMVF9USUNLX0NPTkZJR1VSQVRJT04gPT0gMCApDQorICAgICNpZiAoIGNvbmZpZ09WRVJSSURFX0RFRkFVTFRfVElDS19DT05GSUdVUkFUSU9OID09IDAgKQ0KIA0KICAgICB2b2lkIHZQb3J0U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApDQogICAgIHsNCkBAIC03MjMsMTkgKzcyOSwyMSBAQAogICAgICAgICBwb3J0TlZJQ19TWVNUSUNLX0NUUkxfUkVHID0gKCBwb3J0TlZJQ19TWVNUSUNLX0NMS19CSVQgfCBwb3J0TlZJQ19TWVNUSUNLX0lOVF9CSVQgfCBwb3J0TlZJQ19TWVNUSUNLX0VOQUJMRV9CSVQgKTsNCiAgICAgfQ0KIA0KLSNlbmRpZiAvKiBjb25maWdPVkVSUklERV9ERUZBVUxUX1RJQ0tfQ09ORklHVVJBVElPTiAqLw0KKyAgICAjZW5kaWYgLyogY29uZmlnT1ZFUlJJREVfREVGQVVMVF9USUNLX0NPTkZJR1VSQVRJT04gKi8NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBUaGlzIGlzIGEgbmFrZWQgZnVuY3Rpb24uICovDQogc3RhdGljIHZvaWQgdlBvcnRFbmFibGVWRlAoIHZvaWQgKQ0KIHsNCiAgICAgX19hc20gew0KLSAgICAgICAgbGRyIHIwLCA9IDB4RTAwMEVEODggLyogVGhlIEZQVSBlbmFibGUgYml0cyBhcmUgaW4gdGhlIENQQUNSLiAqLw0KLSAgICAgICAgICAgICAgICAgIGxkciByMSwgWyByMCBdDQorLyogKklOREVOVC1PRkYqICovDQorICAgICAgICBsZHIgcjAsID0weEUwMDBFRDg4IC8qIFRoZSBGUFUgZW5hYmxlIGJpdHMgYXJlIGluIHRoZSBDUEFDUi4gKi8NCisgICAgICAgIGxkciByMSwgWyByMCBdDQogDQotICAgICAgICBvcnIgcjEsIHIxLCAjIDB4RjAwMDAwIC8qIEVuYWJsZSBDUDEwIGFuZCBDUDExIGNvcHJvY2Vzc29ycywgdGhlbiBzYXZlIGJhY2suICovDQorICAgICAgICBvcnIgcjEsIHIxLCAjMHhGMDAwMDAgLyogRW5hYmxlIENQMTAgYW5kIENQMTEgY29wcm9jZXNzb3JzLCB0aGVuIHNhdmUgYmFjay4gKi8NCiAgICAgICAgIHN0ciByMSwgWyByMCBdDQogICAgICAgICBieCByMTQNCisvKiAqSU5ERU5ULU9OKiAqLw0KICAgICB9Ow0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCkBAIC03NTgsNyArNzY2LDcgQEAKIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0jaWYgKCBjb25maWdBU1NFUlRfREVGSU5FRCA9PSAxICkNCisgICAgI2lmICggY29uZmlnQVNTRVJUX0RFRklORUQgPT0gMSApDQogDQogLyogTGltaXRhdGlvbnMgaW4gdGhlIE1pa3JvQyBpbmxpbmUgYXNtIG1lYW5zIHVsQ3VycmVudEludGVycnVwdCBoYXMgdG8gYmUNCiAgKiBnbG9iYWwgLSB3aGljaCBtYWtlcyB2UG9ydFZhbGlkYXRlSW50ZXJydXB0UHJpb3JpdHkoKSBub24gcmUtZW50cmFudC4NCkBAIC03NzIsMTEgKzc4MCwxMyBAQAogICAgIHsNCiAgICAgICAgIC8qIE9idGFpbiB0aGUgbnVtYmVyIG9mIHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nIGludGVycnVwdC4gKi8NCiAgICAgICAgIF9fYXNtIHsNCisvKiAqSU5ERU5ULU9GRiogKi8NCiAgICAgICAgICAgICBwdXNoKCByMCwgcjEgKQ0KICAgICAgICAgICAgIG1ycyByMCwgaXBzcg0KLSAgICAgICAgICAgIGxkciByMSwgPSBfdWxDdXJyZW50SW50ZXJydXB0DQotICAgICAgICAgICAgICAgICAgICAgIHN0ciByMCwgWyByMSBdDQorICAgICAgICAgICAgbGRyIHIxLCA9X3VsQ3VycmVudEludGVycnVwdA0KKyAgICAgICAgICAgIHN0ciByMCwgWyByMSBdDQogICAgICAgICAgICAgcG9wKCByMCwgcjEgKQ0KKy8qICpJTkRFTlQtT04qICovDQogICAgICAgICB9Ow0KIA0KICAgICAgICAgLyogSXMgdGhlIGludGVycnVwdCBudW1iZXIgYSB1c2VyIGRlZmluZWQgaW50ZXJydXB0PyAqLw0KQEAgLTgyNyw0ICs4MzcsNCBAQAogICAgICAgICBjb25maWdBU1NFUlQoICggcG9ydEFJUkNSX1JFRyAmIHBvcnRQUklPUklUWV9HUk9VUF9NQVNLICkgPD0gdWxNYXhQUklHUk9VUFZhbHVlICk7DQogICAgIH0NCiANCi0jZW5kaWYgLyogY29uZmlnQVNTRVJUX0RFRklORUQgKi8NCisgICAgI2VuZGlmIC8qIGNvbmZpZ0FTU0VSVF9ERUZJTkVEICovDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvUGFyYWRpZ20vVGVybl9FRS9sYXJnZV91bnRlc3RlZC9wb3J0LmMgYi9wb3J0YWJsZS9QYXJhZGlnbS9UZXJuX0VFL2xhcmdlX3VudGVzdGVkL3BvcnQuYwppbmRleCBhN2M2ZDhiLi5mYjcyN2UwIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9QYXJhZGlnbS9UZXJuX0VFL2xhcmdlX3VudGVzdGVkL3BvcnQuYworKysgYi9wb3J0YWJsZS9QYXJhZGlnbS9UZXJuX0VFL2xhcmdlX3VudGVzdGVkL3BvcnQuYwpAQCAtMjcsOSArMjcsOSBAQAogDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLSogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFibGUuaCBmb3IgdGhlIFRlcm4gRUUgMTg2DQotKiBwb3J0Lg0KLSotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgVGVybiBFRSAxODYNCisgKiBwb3J0Lg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogTGlicmFyeSBpbmNsdWRlcy4gKi8NCiAjaW5jbHVkZSA8ZW1iZWRkZWQuaD4NCkBAIC00MSwyMDAgKzQxLDE5OSBAQAogI2luY2x1ZGUgInBvcnRhc20uaCINCiANCiAvKiBUaGUgdGltZXIgaW5jcmVtZW50cyBldmVyeSBmb3VyIGNsb2NrcywgaGVuY2UgdGhlIGRpdmlkZSBieSA0LiAqLw0KLSNkZWZpbmUgcG9ydFRJTUVSX0NPTVBBUkUgICAgICAgICAgICAgICAgICggdWludDE2X3QgKSAoICggY29uZmlnQ1BVX0NMT0NLX0haIC8gY29uZmlnVElDS19SQVRFX0haICkgLyAoIHVpbnQzMl90ICkgNCApDQorI2RlZmluZSBwb3J0VElNRVJfQ09NUEFSRSAoIHVpbnQxNl90ICkgKCAoIGNvbmZpZ0NQVV9DTE9DS19IWiAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApIC8gKCB1aW50MzJfdCApIDQgKQ0KIA0KIC8qIEZyb20gdGhlIFJEQyBkYXRhIHNoZWV0LiAqLw0KLSNkZWZpbmUgcG9ydEVOQUJMRV9USU1FUl9BTkRfSU5URVJSVVBUICAgICggdWludDE2X3QgKSAweGUwMDENCisjZGVmaW5lIHBvcnRFTkFCTEVfVElNRVJfQU5EX0lOVEVSUlVQVCAoIHVpbnQxNl90ICkgMHhlMDAxDQogDQogLyogSW50ZXJydXB0IGNvbnRyb2wuICovDQotI2RlZmluZSBwb3J0RUlPX1JFR0lTVEVSICAgICAgICAgICAgICAgICAgMHhmZjIyDQotI2RlZmluZSBwb3J0Q0xFQVJfSU5URVJSVVBUICAgICAgICAgICAgICAgMHgwMDA4DQorI2RlZmluZSBwb3J0RUlPX1JFR0lTVEVSIDB4ZmYyMg0KKyNkZWZpbmUgcG9ydENMRUFSX0lOVEVSUlVQVCAweDAwMDgNCiANCiAvKiBTZXR1cCB0aGUgaGFyZHdhcmUgdG8gZ2VuZXJhdGUgdGhlIHJlcXVpcmVkIHRpY2sgZnJlcXVlbmN5LiAqLw0KIHN0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKTsNCiANCiAvKiBUaGUgSVNSIHVzZWQgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSBwcmVlbXB0aXZlIG9yIGNvb3BlcmF0aXZlIHNjaGVkdWxlcg0KLSAqIGlzIGJlaW5nIHVzZWQuICovDQotI2lmICggY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMSApDQotDQotLyogVGljayBzZXJ2aWNlIHJvdXRpbmUgdXNlZCBieSB0aGUgc2NoZWR1bGVyIHdoZW4gcHJlZW1wdGl2ZSBzY2hlZHVsaW5nIGlzDQotICogYmVpbmcgdXNlZC4gKi8NCi0gICAgc3RhdGljIHZvaWQgX19pbnRlcnJ1cHQgX19mYXIgcHJ2UHJlZW1wdGl2ZVRpY2soIHZvaWQgKTsNCitpcyBiZWluZyB1c2VkLiAqLw0KKyNpZiggY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMSApDQorCS8qIFRpY2sgc2VydmljZSByb3V0aW5lIHVzZWQgYnkgdGhlIHNjaGVkdWxlciB3aGVuIHByZWVtcHRpdmUgc2NoZWR1bGluZyBpcw0KKwliZWluZyB1c2VkLiAqLw0KKwlzdGF0aWMgdm9pZCBfX2ludGVycnVwdCBfX2ZhciBwcnZQcmVlbXB0aXZlVGljayggdm9pZCApOw0KICNlbHNlDQotDQotLyogVGljayBzZXJ2aWNlIHJvdXRpbmUgdXNlZCBieSB0aGUgc2NoZWR1bGVyIHdoZW4gY29vcGVyYXRpdmUgc2NoZWR1bGluZyBpcw0KLSAqIGJlaW5nIHVzZWQuICovDQotICAgIHN0YXRpYyB2b2lkIF9faW50ZXJydXB0IF9fZmFyIHBydk5vblByZWVtcHRpdmVUaWNrKCB2b2lkICk7DQorCS8qIFRpY2sgc2VydmljZSByb3V0aW5lIHVzZWQgYnkgdGhlIHNjaGVkdWxlciB3aGVuIGNvb3BlcmF0aXZlIHNjaGVkdWxpbmcgaXMNCisJYmVpbmcgdXNlZC4gKi8NCisJc3RhdGljIHZvaWQgX19pbnRlcnJ1cHQgX19mYXIgcHJ2Tm9uUHJlZW1wdGl2ZVRpY2soIHZvaWQgKTsNCiAjZW5kaWYNCiANCiAvKiBUcmFwIHJvdXRpbmUgdXNlZCBieSB0YXNrWUlFTEQoKSB0byBtYW51YWxseSBjYXVzZSBhIGNvbnRleHQgc3dpdGNoLiAqLw0KIHN0YXRpYyB2b2lkIF9faW50ZXJydXB0IF9fZmFyIHBydllpZWxkUHJvY2Vzc29yKCB2b2lkICk7DQogDQogLyogVGhlIHRpbWVyIGluaXRpYWxpc2F0aW9uIGZ1bmN0aW9ucyBsZWF2ZSBpbnRlcnJ1cHRzIGVuYWJsZWQsDQotICogd2hpY2ggaXMgbm90IHdoYXQgd2Ugd2FudC4gIFRoaXMgSVNSIGlzIGluc3RhbGxlZCB0ZW1wb3JhcmlseSBpbiBjYXNlDQotICogdGhlIHRpbWVyIGZpcmVzIGJlZm9yZSB3ZSBnZXQgYSBjaGFuZ2UgdG8gZGlzYWJsZSBpbnRlcnJ1cHRzIGFnYWluLiAqLw0KK3doaWNoIGlzIG5vdCB3aGF0IHdlIHdhbnQuICBUaGlzIElTUiBpcyBpbnN0YWxsZWQgdGVtcG9yYXJpbHkgaW4gY2FzZQ0KK3RoZSB0aW1lciBmaXJlcyBiZWZvcmUgd2UgZ2V0IGEgY2hhbmdlIHRvIGRpc2FibGUgaW50ZXJydXB0cyBhZ2Fpbi4gKi8NCiBzdGF0aWMgdm9pZCBfX2ludGVycnVwdCBfX2ZhciBwcnZEdW1teUlTUiggdm9pZCApOw0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIC8qIFNlZSBoZWFkZXIgZmlsZSBmb3IgZGVzY3JpcHRpb24uICovDQotU3RhY2tUeXBlX3QgKiBweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICogcHhUb3BPZlN0YWNrLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYXNrRnVuY3Rpb25fdCBweENvZGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KK1N0YWNrVHlwZV90ICpweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICpweFRvcE9mU3RhY2ssIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzICkNCiB7DQotICAgIFN0YWNrVHlwZV90IERTX1JlZyA9IDA7DQorU3RhY2tUeXBlX3QgRFNfUmVnID0gMDsNCiANCi0gICAgLyogUGxhY2UgYSBmZXcgYnl0ZXMgb2Yga25vd24gdmFsdWVzIG9uIHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLg0KLSAgICAgKiBUaGlzIGlzIGp1c3QgdXNlZnVsIGZvciBkZWJ1Z2dpbmcuICovDQorCS8qIFBsYWNlIGEgZmV3IGJ5dGVzIG9mIGtub3duIHZhbHVlcyBvbiB0aGUgYm90dG9tIG9mIHRoZSBzdGFjay4NCisJVGhpcyBpcyBqdXN0IHVzZWZ1bCBmb3IgZGVidWdnaW5nLiAqLw0KIA0KLSAgICAqcHhUb3BPZlN0YWNrID0gMHgxMTExOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MjIyMjsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAweDMzMzM7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgxMTExOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MjIyMjsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDMzMzM7DQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBXZSBhcmUgZ29pbmcgdG8gc3RhcnQgdGhlIHNjaGVkdWxlciB1c2luZyBhIHJldHVybiBmcm9tIGludGVycnVwdA0KLSAgICAgKiBpbnN0cnVjdGlvbiB0byBsb2FkIHRoZSBwcm9ncmFtIGNvdW50ZXIsIHNvIGZpcnN0IHRoZXJlIHdvdWxkIGJlIHRoZQ0KLSAgICAgKiBmdW5jdGlvbiBjYWxsIHdpdGggcGFyYW1ldGVycyBwcmVhbWJsZS4gKi8NCisJLyogV2UgYXJlIGdvaW5nIHRvIHN0YXJ0IHRoZSBzY2hlZHVsZXIgdXNpbmcgYSByZXR1cm4gZnJvbSBpbnRlcnJ1cHQNCisJaW5zdHJ1Y3Rpb24gdG8gbG9hZCB0aGUgcHJvZ3JhbSBjb3VudGVyLCBzbyBmaXJzdCB0aGVyZSB3b3VsZCBiZSB0aGUNCisJZnVuY3Rpb24gY2FsbCB3aXRoIHBhcmFtZXRlcnMgcHJlYW1ibGUuICovDQorCQ0KKwkqcHhUb3BPZlN0YWNrID0gRlBfU0VHKCBwdlBhcmFtZXRlcnMgKTsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSBGUF9PRkYoIHB2UGFyYW1ldGVycyApOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IEZQX1NFRyggcHhDb2RlICk7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gRlBfT0ZGKCBweENvZGUgKTsNCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgICpweFRvcE9mU3RhY2sgPSBGUF9TRUcoIHB2UGFyYW1ldGVycyApOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IEZQX09GRiggcHZQYXJhbWV0ZXJzICk7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gRlBfU0VHKCBweENvZGUgKTsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSBGUF9PRkYoIHB4Q29kZSApOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJLyogTmV4dCB0aGUgc3RhdHVzIHJlZ2lzdGVyIGFuZCBpbnRlcnJ1cHQgcmV0dXJuIGFkZHJlc3MuICovDQorCSpweFRvcE9mU3RhY2sgPSBwb3J0SU5JVElBTF9TVzsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSBGUF9TRUcoIHB4Q29kZSApOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IEZQX09GRiggcHhDb2RlICk7DQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBOZXh0IHRoZSBzdGF0dXMgcmVnaXN0ZXIgYW5kIGludGVycnVwdCByZXR1cm4gYWRkcmVzcy4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9IHBvcnRJTklUSUFMX1NXOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IEZQX1NFRyggcHhDb2RlICk7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gRlBfT0ZGKCBweENvZGUgKTsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIFRoZSByZW1haW5pbmcgcmVnaXN0ZXJzIHdvdWxkIGJlIHB1c2hlZCBvbiB0aGUgc3RhY2sgYnkgb3VyIGNvbnRleHQNCisJc3dpdGNoIGZ1bmN0aW9uLiAgVGhlc2UgYXJlIGxvYWRlZCB3aXRoIHZhbHVlcyBzaW1wbHkgdG8gbWFrZSBkZWJ1Z2dpbmcNCisJZWFzaWVyLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4QUFBQTsJLyogQVggKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhCQkJCOwkvKiBCWCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweENDQ0M7CS8qIENYICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4RERERDsJLyogRFggKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhFRUVFOwkvKiBFUyAqLw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgLyogVGhlIHJlbWFpbmluZyByZWdpc3RlcnMgd291bGQgYmUgcHVzaGVkIG9uIHRoZSBzdGFjayBieSBvdXIgY29udGV4dA0KLSAgICAgKiBzd2l0Y2ggZnVuY3Rpb24uICBUaGVzZSBhcmUgbG9hZGVkIHdpdGggdmFsdWVzIHNpbXBseSB0byBtYWtlIGRlYnVnZ2luZw0KLSAgICAgKiBlYXNpZXIuICovDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhBQUFBOyAvKiBBWCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweEJCQkI7IC8qIEJYICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4Q0NDQzsgLyogQ1ggKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhEREREOyAvKiBEWCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweEVFRUU7IC8qIEVTICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkvKiBXZSBuZWVkIHRoZSB0cnVlIGRhdGEgc2VnbWVudC4gKi8NCisJX19hc217CU1PViBEU19SZWcsIERTIH07DQogDQotICAgIC8qIFdlIG5lZWQgdGhlIHRydWUgZGF0YSBzZWdtZW50LiAqLw0KLSAgICBfX2FzbSB7DQotICAgICAgICBNT1YgRFNfUmVnLCBEUw0KLSAgICB9Ow0KKwkqcHhUb3BPZlN0YWNrID0gRFNfUmVnOwkJCQkJCS8qIERTICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDEyMzsJLyogU0kgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhEREREOwkvKiBESSAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweEJCQkI7CS8qIEJQICovDQogDQotICAgICpweFRvcE9mU3RhY2sgPSBEU19SZWc7ICAgICAgICAgICAgICAgICAvKiBEUyAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAxMjM7IC8qIFNJICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4RERERDsgLyogREkgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhCQkJCOyAvKiBCUCAqLw0KLQ0KLSAgICByZXR1cm4gcHhUb3BPZlN0YWNrOw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBCYXNlVHlwZV90IHhQb3J0U3RhcnRTY2hlZHVsZXIoIHZvaWQgKQ0KIHsNCi0gICAgLyogVGhpcyBpcyBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGFscmVhZHkgZGlzYWJsZWQuICovDQorCS8qIFRoaXMgaXMgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBhbHJlYWR5IGRpc2FibGVkLiAqLw0KIA0KLSAgICAvKiBQdXQgb3VyIG1hbnVhbCBzd2l0Y2ggKHlpZWxkKSBmdW5jdGlvbiBvbiBhIGtub3duDQotICAgICAqIHZlY3Rvci4gKi8NCi0gICAgc2V0dmVjdCggcG9ydFNXSVRDSF9JTlRfTlVNQkVSLCBwcnZZaWVsZFByb2Nlc3NvciApOw0KKwkvKiBQdXQgb3VyIG1hbnVhbCBzd2l0Y2ggKHlpZWxkKSBmdW5jdGlvbiBvbiBhIGtub3duDQorCXZlY3Rvci4gKi8NCisJc2V0dmVjdCggcG9ydFNXSVRDSF9JTlRfTlVNQkVSLCBwcnZZaWVsZFByb2Nlc3NvciApOw0KIA0KLSAgICAvKiBTZXR1cCB0aGUgdGljayBpbnRlcnJ1cHQuICovDQotICAgIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoKTsNCisJLyogU2V0dXAgdGhlIHRpY2sgaW50ZXJydXB0LiAqLw0KKwlwcnZTZXR1cFRpbWVySW50ZXJydXB0KCk7DQogDQotICAgIC8qIEtpY2sgb2ZmIHRoZSBzY2hlZHVsZXIgYnkgc2V0dGluZyB1cCB0aGUgY29udGV4dCBvZiB0aGUgZmlyc3QgdGFzay4gKi8NCi0gICAgcG9ydEZJUlNUX0NPTlRFWFQoKTsNCisJLyogS2ljayBvZmYgdGhlIHNjaGVkdWxlciBieSBzZXR0aW5nIHVwIHRoZSBjb250ZXh0IG9mIHRoZSBmaXJzdCB0YXNrLiAqLw0KKwlwb3J0RklSU1RfQ09OVEVYVCgpOw0KIA0KLSAgICAvKiBTaG91bGQgbm90IGdldCBoZXJlISAqLw0KLSAgICByZXR1cm4gcGRGQUxTRTsNCisJLyogU2hvdWxkIG5vdCBnZXQgaGVyZSEgKi8NCisJcmV0dXJuIHBkRkFMU0U7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHN0YXRpYyB2b2lkIF9faW50ZXJydXB0IF9fZmFyIHBydkR1bW15SVNSKCB2b2lkICkNCiB7DQotICAgIC8qIFRoZSB0aW1lciBpbml0aWFsaXNhdGlvbiBmdW5jdGlvbnMgbGVhdmUgaW50ZXJydXB0cyBlbmFibGVkLA0KLSAgICAgKiB3aGljaCBpcyBub3Qgd2hhdCB3ZSB3YW50LiAgVGhpcyBJU1IgaXMgaW5zdGFsbGVkIHRlbXBvcmFyaWx5IGluIGNhc2UNCi0gICAgICogdGhlIHRpbWVyIGZpcmVzIGJlZm9yZSB3ZSBnZXQgYSBjaGFuZ2UgdG8gZGlzYWJsZSBpbnRlcnJ1cHRzIGFnYWluLiAqLw0KLSAgICBvdXRwb3J0KCBwb3J0RUlPX1JFR0lTVEVSLCBwb3J0Q0xFQVJfSU5URVJSVVBUICk7DQorCS8qIFRoZSB0aW1lciBpbml0aWFsaXNhdGlvbiBmdW5jdGlvbnMgbGVhdmUgaW50ZXJydXB0cyBlbmFibGVkLA0KKwl3aGljaCBpcyBub3Qgd2hhdCB3ZSB3YW50LiAgVGhpcyBJU1IgaXMgaW5zdGFsbGVkIHRlbXBvcmFyaWx5IGluIGNhc2UNCisJdGhlIHRpbWVyIGZpcmVzIGJlZm9yZSB3ZSBnZXQgYSBjaGFuZ2UgdG8gZGlzYWJsZSBpbnRlcnJ1cHRzIGFnYWluLiAqLw0KKwlvdXRwb3J0KCBwb3J0RUlPX1JFR0lTVEVSLCBwb3J0Q0xFQVJfSU5URVJSVVBUICk7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFRoZSBJU1IgdXNlZCBkZXBlbmRzIG9uIHdoZXRoZXIgdGhlIHByZWVtcHRpdmUgb3IgY29vcGVyYXRpdmUgc2NoZWR1bGVyDQotICogaXMgYmVpbmcgdXNlZC4gKi8NCi0jaWYgKCBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAxICkNCi0gICAgc3RhdGljIHZvaWQgX19pbnRlcnJ1cHQgX19mYXIgcHJ2UHJlZW1wdGl2ZVRpY2soIHZvaWQgKQ0KLSAgICB7DQotICAgICAgICAvKiBHZXQgdGhlIHNjaGVkdWxlciB0byB1cGRhdGUgdGhlIHRhc2sgc3RhdGVzIGZvbGxvd2luZyB0aGUgdGljay4gKi8NCi0gICAgICAgIGlmKCB4VGFza0luY3JlbWVudFRpY2soKSAhPSBwZEZBTFNFICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICAvKiBTd2l0Y2ggaW4gdGhlIGNvbnRleHQgb2YgdGhlIG5leHQgdGFzayB0byBiZSBydW4uICovDQotICAgICAgICAgICAgcG9ydFNXSVRDSF9DT05URVhUKCk7DQotICAgICAgICB9DQoraXMgYmVpbmcgdXNlZC4gKi8NCisjaWYoIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDEgKQ0KKwlzdGF0aWMgdm9pZCBfX2ludGVycnVwdCBfX2ZhciBwcnZQcmVlbXB0aXZlVGljayggdm9pZCApDQorCXsNCisJCS8qIEdldCB0aGUgc2NoZWR1bGVyIHRvIHVwZGF0ZSB0aGUgdGFzayBzdGF0ZXMgZm9sbG93aW5nIHRoZSB0aWNrLiAqLw0KKwkJaWYoIHhUYXNrSW5jcmVtZW50VGljaygpICE9IHBkRkFMU0UgKQ0KKwkJew0KKwkJCS8qIFN3aXRjaCBpbiB0aGUgY29udGV4dCBvZiB0aGUgbmV4dCB0YXNrIHRvIGJlIHJ1bi4gKi8NCisJCQlwb3J0U1dJVENIX0NPTlRFWFQoKTsNCisJCX0NCiANCi0gICAgICAgIC8qIFJlc2V0IGludGVycnVwdC4gKi8NCi0gICAgICAgIG91dHBvcnQoIHBvcnRFSU9fUkVHSVNURVIsIHBvcnRDTEVBUl9JTlRFUlJVUFQgKTsNCi0gICAgfQ0KLSNlbHNlIC8qIGlmICggY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMSApICovDQotICAgIHN0YXRpYyB2b2lkIF9faW50ZXJydXB0IF9fZmFyIHBydk5vblByZWVtcHRpdmVUaWNrKCB2b2lkICkNCi0gICAgew0KLSAgICAgICAgLyogU2FtZSBhcyBwcmVlbXB0aXZlIHRpY2ssIGJ1dCB0aGUgY29vcGVyYXRpdmUgc2NoZWR1bGVyIGlzIGJlaW5nIHVzZWQNCi0gICAgICAgICAqIHNvIHdlIGRvbid0IGhhdmUgdG8gc3dpdGNoIGluIHRoZSBjb250ZXh0IG9mIHRoZSBuZXh0IHRhc2suICovDQotICAgICAgICB4VGFza0luY3JlbWVudFRpY2soKTsNCi0NCi0gICAgICAgIC8qIFJlc2V0IGludGVycnVwdC4gKi8NCi0gICAgICAgIG91dHBvcnQoIHBvcnRFSU9fUkVHSVNURVIsIHBvcnRDTEVBUl9JTlRFUlJVUFQgKTsNCi0gICAgfQ0KLSNlbmRpZiAvKiBpZiAoIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDEgKSAqLw0KKwkJLyogUmVzZXQgaW50ZXJydXB0LiAqLw0KKwkJb3V0cG9ydCggcG9ydEVJT19SRUdJU1RFUiwgcG9ydENMRUFSX0lOVEVSUlVQVCApOw0KKwl9DQorI2Vsc2UNCisJc3RhdGljIHZvaWQgX19pbnRlcnJ1cHQgX19mYXIgcHJ2Tm9uUHJlZW1wdGl2ZVRpY2soIHZvaWQgKQ0KKwl7DQorCQkvKiBTYW1lIGFzIHByZWVtcHRpdmUgdGljaywgYnV0IHRoZSBjb29wZXJhdGl2ZSBzY2hlZHVsZXIgaXMgYmVpbmcgdXNlZA0KKwkJc28gd2UgZG9uJ3QgaGF2ZSB0byBzd2l0Y2ggaW4gdGhlIGNvbnRleHQgb2YgdGhlIG5leHQgdGFzay4gKi8NCisJCXhUYXNrSW5jcmVtZW50VGljaygpOw0KKwkJDQorCQkvKiBSZXNldCBpbnRlcnJ1cHQuICovDQorCQlvdXRwb3J0KCBwb3J0RUlPX1JFR0lTVEVSLCBwb3J0Q0xFQVJfSU5URVJSVVBUICk7DQorCX0NCisjZW5kaWYNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBzdGF0aWMgdm9pZCBfX2ludGVycnVwdCBfX2ZhciBwcnZZaWVsZFByb2Nlc3Nvciggdm9pZCApDQogew0KLSAgICAvKiBTd2l0Y2ggaW4gdGhlIGNvbnRleHQgb2YgdGhlIG5leHQgdGFzayB0byBiZSBydW4uICovDQotICAgIHBvcnRTV0lUQ0hfQ09OVEVYVCgpOw0KKwkvKiBTd2l0Y2ggaW4gdGhlIGNvbnRleHQgb2YgdGhlIG5leHQgdGFzayB0byBiZSBydW4uICovDQorCXBvcnRTV0lUQ0hfQ09OVEVYVCgpOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0RW5kU2NoZWR1bGVyKCB2b2lkICkNCiB7DQotICAgIC8qIE5vdCBpbXBsZW1lbnRlZC4gKi8NCisJLyogTm90IGltcGxlbWVudGVkLiAqLw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICkNCiB7DQotICAgIGNvbnN0IHVpbnQxNl90IHVzVGltZXJBQ29tcGFyZSA9IHBvcnRUSU1FUl9DT01QQVJFLCB1c1RpbWVyQU1vZGUgPSBwb3J0RU5BQkxFX1RJTUVSX0FORF9JTlRFUlJVUFQ7DQotICAgIGNvbnN0IHVpbnQxNl90IHVzVDJfSVJRID0gMHgxMzsNCitjb25zdCB1aW50MTZfdCB1c1RpbWVyQUNvbXBhcmUgPSBwb3J0VElNRVJfQ09NUEFSRSwgdXNUaW1lckFNb2RlID0gcG9ydEVOQUJMRV9USU1FUl9BTkRfSU5URVJSVVBUOw0KK2NvbnN0IHVpbnQxNl90IHVzVDJfSVJRID0gMHgxMzsNCiANCi0gICAgLyogQ29uZmlndXJlIHRoZSB0aW1lciwgdGhlIGR1bW15IGhhbmRsZXIgaXMgdXNlZCBoZXJlIGFzIHRoZSBpbml0DQotICAgICAqIGZ1bmN0aW9uIGxlYXZlcyBpbnRlcnJ1cHRzIGVuYWJsZWQuICovDQotICAgIHQyX2luaXQoIHVzVGltZXJBTW9kZSwgdXNUaW1lckFDb21wYXJlLCBwcnZEdW1teUlTUiApOw0KKwkvKiBDb25maWd1cmUgdGhlIHRpbWVyLCB0aGUgZHVtbXkgaGFuZGxlciBpcyB1c2VkIGhlcmUgYXMgdGhlIGluaXQNCisJZnVuY3Rpb24gbGVhdmVzIGludGVycnVwdHMgZW5hYmxlZC4gKi8NCisJdDJfaW5pdCggdXNUaW1lckFNb2RlLCB1c1RpbWVyQUNvbXBhcmUsIHBydkR1bW15SVNSICk7DQogDQotICAgIC8qIERpc2FibGUgaW50ZXJydXB0cyBhZ2FpbiBiZWZvcmUgaW5zdGFsbGluZyB0aGUgcmVhbCBoYW5kbGVycy4gKi8NCi0gICAgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOw0KKwkvKiBEaXNhYmxlIGludGVycnVwdHMgYWdhaW4gYmVmb3JlIGluc3RhbGxpbmcgdGhlIHJlYWwgaGFuZGxlcnMuICovDQorCXBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsNCiANCi0gICAgI2lmICggY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMSApDQotDQotICAgICAgICAvKiBUaWNrIHNlcnZpY2Ugcm91dGluZSB1c2VkIGJ5IHRoZSBzY2hlZHVsZXIgd2hlbiBwcmVlbXB0aXZlIHNjaGVkdWxpbmcgaXMNCi0gICAgICAgICAqIGJlaW5nIHVzZWQuICovDQotICAgICAgICBzZXR2ZWN0KCB1c1QyX0lSUSwgcHJ2UHJlZW1wdGl2ZVRpY2sgKTsNCi0gICAgI2Vsc2UNCi0NCi0gICAgICAgIC8qIFRpY2sgc2VydmljZSByb3V0aW5lIHVzZWQgYnkgdGhlIHNjaGVkdWxlciB3aGVuIGNvb3BlcmF0aXZlIHNjaGVkdWxpbmcgaXMNCi0gICAgICAgICAqIGJlaW5nIHVzZWQuICovDQotICAgICAgICBzZXR2ZWN0KCB1c1QyX0lSUSwgcHJ2Tm9uUHJlZW1wdGl2ZVRpY2sgKTsNCi0gICAgI2VuZGlmDQorCSNpZiggY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMSApDQorCQkvKiBUaWNrIHNlcnZpY2Ugcm91dGluZSB1c2VkIGJ5IHRoZSBzY2hlZHVsZXIgd2hlbiBwcmVlbXB0aXZlIHNjaGVkdWxpbmcgaXMNCisJCWJlaW5nIHVzZWQuICovDQorCQlzZXR2ZWN0KCB1c1QyX0lSUSwgcHJ2UHJlZW1wdGl2ZVRpY2sgKTsNCisJI2Vsc2UNCisJCS8qIFRpY2sgc2VydmljZSByb3V0aW5lIHVzZWQgYnkgdGhlIHNjaGVkdWxlciB3aGVuIGNvb3BlcmF0aXZlIHNjaGVkdWxpbmcgaXMNCisJCWJlaW5nIHVzZWQuICovDQorCQlzZXR2ZWN0KCB1c1QyX0lSUSwgcHJ2Tm9uUHJlZW1wdGl2ZVRpY2sgKTsNCisJI2VuZGlmDQogfQ0KKw0KKw0KKw0KKw0KKw0KKw0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL1BhcmFkaWdtL1Rlcm5fRUUvbGFyZ2VfdW50ZXN0ZWQvcG9ydGFzbS5oIGIvcG9ydGFibGUvUGFyYWRpZ20vVGVybl9FRS9sYXJnZV91bnRlc3RlZC9wb3J0YXNtLmgKaW5kZXggYzQyNjZmZC4uOTM5MmY3YiAxMDA2NDQKLS0tIGEvcG9ydGFibGUvUGFyYWRpZ20vVGVybl9FRS9sYXJnZV91bnRlc3RlZC9wb3J0YXNtLmgKKysrIGIvcG9ydGFibGUvUGFyYWRpZ20vVGVybl9FRS9sYXJnZV91bnRlc3RlZC9wb3J0YXNtLmgKQEAgLTQzLDMyICs0MywzNCBAQAogICovDQogdm9pZCBwb3J0RklSU1RfQ09OVEVYVCggdm9pZCApOw0KIA0KLSNkZWZpbmUgcG9ydFNXSVRDSF9DT05URVhUKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgYXNtIHsgbW92IGF4LCBzZWcgcHhDdXJyZW50VENCIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIGFzbSB7IG1vdiBkcywgYXggfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICBhc20geyBsZXMgYngsIHB4Q3VycmVudFRDQiB9IC8qIFNhdmUgdGhlIHN0YWNrIHBvaW50ZXIgaW50byB0aGUgVENCLiAqLyAgICAgICAgICAgICAgIFwNCi0gICAgYXNtIHsgbW92IGVzIDogMHgyWyBieCBdLCBzcyB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIGFzbSB7IG1vdiBlczpbIGJ4IF0sIHNwIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICBhc20geyBjYWxsIGZhciBwdHIgdlRhc2tTd2l0Y2hDb250ZXh0IH0gLyogUGVyZm9ybSB0aGUgc3dpdGNoLiAqLyAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgYXNtIHsgbW92IGF4LCBzZWcgcHhDdXJyZW50VENCIH0gICAgICAgIC8qIFJlc3RvcmUgdGhlIHN0YWNrIHBvaW50ZXIgZnJvbSB0aGUgVENCLiAqLyBcDQotICAgIGFzbSB7IG1vdiBkcywgYXggfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICBhc20geyBsZXMgYngsIGR3b3JkIHB0ciBweEN1cnJlbnRUQ0IgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgYXNtIHsgbW92IHNzLCBlczpbIGJ4ICsgMiBdIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICBhc20geyBtb3Ygc3AsIGVzOlsgYnggXSB9DQorI2RlZmluZSBwb3J0U1dJVENIX0NPTlRFWFQoKQkJCQkJCQkJCQkgXA0KKwkJCQkJCWFzbSB7IG1vdglheCwgc2VnIHB4Q3VycmVudFRDQgkJfSBcDQorCQkJCQkJCWFzbSB7IG1vdglkcywgYXgJCQkJCQl9ICBcDQorCQkJCQkJCWFzbSB7IGxlcwlieCwgcHhDdXJyZW50VENCCQkJfQkvKiBTYXZlIHRoZSBzdGFjayBwb2ludGVyIGludG8gdGhlIFRDQi4gKi8gICAgXA0KKwkJCQkJCQlhc20geyBtb3YJZXM6MHgyWyBieCBdLCBzcwkJCX0gICBcDQorCQkJCQkJCWFzbSB7IG1vdgllczpbIGJ4IF0sIHNwCQkJCX0gICBcDQorCQkJCQkJCWFzbSB7IGNhbGwgIGZhciBwdHIgdlRhc2tTd2l0Y2hDb250ZXh0CX0JLyogUGVyZm9ybSB0aGUgc3dpdGNoLiAqLyAgIFwNCisJCQkJCQkJYXNtIHsgbW92CWF4LCBzZWcgcHhDdXJyZW50VENCCQl9CS8qIFJlc3RvcmUgdGhlIHN0YWNrIHBvaW50ZXIgZnJvbSB0aGUgVENCLiAqLyAgXA0KKwkJCQkJCQlhc20geyBtb3YJZHMsIGF4CQkJCQkJfSAgIFwNCisJCQkJCQkJYXNtIHsgbGVzCWJ4LCBkd29yZCBwdHIgcHhDdXJyZW50VENCCX0gICBcDQorCQkJCQkJCWFzbSB7IG1vdglzcywgZXM6WyBieCArIDIgXQkJCX0gICAgICBcDQorCQkJCQkJCWFzbSB7IG1vdglzcCwgZXM6WyBieCBdCQkJCX0NCiANCi0jZGVmaW5lIHBvcnRGSVJTVF9DT05URVhUKCkgICAgICAgICAgICAgICAgXA0KLSAgICBhc20geyBtb3YgYXgsIHNlZyBweEN1cnJlbnRUQ0IgfSAgICAgICBcDQotICAgIGFzbSB7IG1vdiBkcywgYXggfSAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgYXNtIHsgbGVzIGJ4LCBkd29yZCBwdHIgcHhDdXJyZW50VENCIH0gXA0KLSAgICBhc20geyBtb3Ygc3MsIGVzOlsgYnggKyAyIF0gfSAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICBhc20geyBtb3Ygc3AsIGVzOlsgYnggXSB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICBhc20geyBwb3AgYnAgfSAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIGFzbSB7IHBvcCBkaSB9ICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgYXNtIHsgcG9wIHNpIH0gICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICBhc20geyBwb3AgZHMgfSAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIGFzbSB7IHBvcCBlcyB9ICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgYXNtIHsgcG9wIGR4IH0gICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICBhc20geyBwb3AgY3ggfSAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIGFzbSB7IHBvcCBieCB9ICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgYXNtIHsgcG9wIGF4IH0gICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICBhc20geyBpcmV0IH0NCisjZGVmaW5lIHBvcnRGSVJTVF9DT05URVhUKCkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCWFzbSB7IG1vdglheCwgc2VnIHB4Q3VycmVudFRDQgkJfQlcDQorCQkJCQkJCWFzbSB7IG1vdglkcywgYXgJCQkJCQl9CVwNCisJCQkJCQkJYXNtIHsgbGVzCWJ4LCBkd29yZCBwdHIgcHhDdXJyZW50VENCCX0JXA0KKwkJCQkJCQlhc20geyBtb3YJc3MsIGVzOlsgYnggKyAyIF0JCQl9CVwNCisJCQkJCQkJYXNtIHsgbW92CXNwLCBlczpbIGJ4IF0JCQkJfQlcDQorCQkJCQkJCWFzbSB7IHBvcAlicAkJCQkJCQl9CVwNCisJCQkJCQkJYXNtIHsgcG9wCWRpCQkJCQkJCX0JXA0KKwkJCQkJCQlhc20geyBwb3AJc2kJCQkJCQkJfQlcDQorCQkJCQkJCWFzbSB7IHBvcAlkcwkJCQkJCQl9CVwNCisJCQkJCQkJYXNtIHsgcG9wCWVzCQkJCQkJCX0JXA0KKwkJCQkJCQlhc20geyBwb3AJZHgJCQkJCQkJfQlcDQorCQkJCQkJCWFzbSB7IHBvcAljeAkJCQkJCQl9CVwNCisJCQkJCQkJYXNtIHsgcG9wCWJ4CQkJCQkJCX0JXA0KKwkJCQkJCQlhc20geyBwb3AJYXgJCQkJCQkJfQlcDQorCQkJCQkJCWFzbSB7IGlyZXQJCQkJCQkJCX0NCisNCisNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9QYXJhZGlnbS9UZXJuX0VFL2xhcmdlX3VudGVzdGVkL3BvcnRtYWNyby5oIGIvcG9ydGFibGUvUGFyYWRpZ20vVGVybl9FRS9sYXJnZV91bnRlc3RlZC9wb3J0bWFjcm8uaAppbmRleCA2ZjA4MjRmLi4zNTRiMDAwIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9QYXJhZGlnbS9UZXJuX0VFL2xhcmdlX3VudGVzdGVkL3BvcnRtYWNyby5oCisrKyBiL3BvcnRhYmxlL1BhcmFkaWdtL1Rlcm5fRUUvbGFyZ2VfdW50ZXN0ZWQvcG9ydG1hY3JvLmgKQEAgLTI2LDExICsyNiwxMSBAQAogICovDQogDQogI2lmbmRlZiBQT1JUTUFDUk9fSA0KLSAgICAjZGVmaW5lIFBPUlRNQUNST19IDQorI2RlZmluZSBQT1JUTUFDUk9fSA0KIA0KLSAgICAjaWZkZWYgX19jcGx1c3BsdXMNCi0gICAgICAgIGV4dGVybiAiQyIgew0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICogUG9ydCBzcGVjaWZpYyBkZWZpbml0aW9ucy4NCkBAIC00Myw2NCArNDMsNjQgQEAKICAqLw0KIA0KIC8qIFR5cGUgZGVmaW5pdGlvbnMuICovDQotICAgICNkZWZpbmUgcG9ydENIQVIgICAgICAgICAgY2hhcg0KLSAgICAjZGVmaW5lIHBvcnRGTE9BVCAgICAgICAgIGZsb2F0DQotICAgICNkZWZpbmUgcG9ydERPVUJMRSAgICAgICAgbG9uZw0KLSAgICAjZGVmaW5lIHBvcnRMT05HICAgICAgICAgIGxvbmcNCi0gICAgI2RlZmluZSBwb3J0U0hPUlQgICAgICAgICBpbnQNCi0gICAgI2RlZmluZSBwb3J0U1RBQ0tfVFlQRSAgICB1aW50MTZfdA0KLSAgICAjZGVmaW5lIHBvcnRCQVNFX1RZUEUgICAgIHNob3J0DQorI2RlZmluZSBwb3J0Q0hBUgkJY2hhcg0KKyNkZWZpbmUgcG9ydEZMT0FUCQlmbG9hdA0KKyNkZWZpbmUgcG9ydERPVUJMRQkJbG9uZw0KKyNkZWZpbmUgcG9ydExPTkcJCWxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVAkJaW50DQorI2RlZmluZSBwb3J0U1RBQ0tfVFlQRQl1aW50MTZfdA0KKyNkZWZpbmUgcG9ydEJBU0VfVFlQRQlzaG9ydA0KIA0KLSAgICB0eXBlZGVmIHBvcnRTVEFDS19UWVBFICAgU3RhY2tUeXBlX3Q7DQotICAgIHR5cGVkZWYgc2hvcnQgICAgICAgICAgICBCYXNlVHlwZV90Ow0KLSAgICB0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICAgVUJhc2VUeXBlX3Q7DQordHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSBTdGFja1R5cGVfdDsNCit0eXBlZGVmIHNob3J0IEJhc2VUeXBlX3Q7DQordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBVQmFzZVR5cGVfdDsNCiANCiANCi0gICAgI2lmICggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCi0gICAgICAgIHR5cGVkZWYgdWludDE2X3QgICAgIFRpY2tUeXBlX3Q7DQotICAgICAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQotICAgICNlbHNlDQotICAgICAgICB0eXBlZGVmIHVpbnQzMl90ICAgICBUaWNrVHlwZV90Ow0KLSAgICAgICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTA0KLSAgICAjZW5kaWYNCisjaWYoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQorCXR5cGVkZWYgdWludDE2X3QgVGlja1R5cGVfdDsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggVGlja1R5cGVfdCApIDB4ZmZmZg0KKyNlbHNlDQorCXR5cGVkZWYgdWludDMyX3QgVGlja1R5cGVfdDsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTA0KKyNlbmRpZg0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIENyaXRpY2FsIHNlY3Rpb24gaGFuZGxpbmcuICovDQotICAgICNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgXA0KLSAgICBfX2FzbXsgcHVzaGYgfSAgICAgICAgICAgICAgIFwNCi0gICAgX19hc217IGNsaSB9ICAgICAgICAgICAgICAgICBcDQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKQkJCV9fYXNteyBwdXNoZiB9ICBcDQorCQkJCQkJCQkJCV9fYXNteyBjbGkgCSB9CVwNCiANCi0gICAgI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpICAgICAgICAgX19hc217IHBvcGYgfQ0KKyNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKQkJCQlfX2FzbXsgcG9wZiB9DQogDQotICAgICNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpICAgIF9fYXNteyBjbGkgfQ0KKyNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpCQlfX2FzbXsgY2xpIH0NCiANCi0gICAgI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKSAgICAgX19hc217IHN0aSB9DQorI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKQkJCV9fYXNteyBzdGkgfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIEhhcmR3YXJlIHNwZWNpZmljcy4gKi8NCi0gICAgI2RlZmluZSBwb3J0Tk9QKCkgICAgICBfX2FzbXsgbm9wIH0NCi0gICAgI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RIICAgICAgICAgKCAtMSApDQotICAgICNkZWZpbmUgcG9ydFNXSVRDSF9JTlRfTlVNQkVSICAgIDB4ODANCi0gICAgI2RlZmluZSBwb3J0WUlFTEQoKSAgICBfX2FzbXsgaW50IHBvcnRTV0lUQ0hfSU5UX05VTUJFUiB9DQotICAgICNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TICAgICAgICggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQotICAgICNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UICAgICAgIDINCi0gICAgI2RlZmluZSBwb3J0SU5JVElBTF9TVyAgICAgICAgICAgKCAoIHBvcnRTVEFDS19UWVBFICkgMHgwMjAyICkgICAgICAvKiBTdGFydCB0aGUgdGFza3Mgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQuICovDQorI2RlZmluZSBwb3J0Tk9QKCkJCQkJCQlfX2FzbXsgbm9wIH0NCisjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEgJCQkJKCAtMSApDQorI2RlZmluZSBwb3J0U1dJVENIX0lOVF9OVU1CRVIgCQkJMHg4MA0KKyNkZWZpbmUgcG9ydFlJRUxEKCkJCQkJCQlfX2FzbXsgaW50IHBvcnRTV0lUQ0hfSU5UX05VTUJFUiB9DQorI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMJCQkJKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCisjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVAkJCQkyDQorI2RlZmluZSBwb3J0SU5JVElBTF9TVwkJCQkJKCAoIHBvcnRTVEFDS19UWVBFICkgMHgwMjAyICkJLyogU3RhcnQgdGhlIHRhc2tzIHdpdGggaW50ZXJydXB0cyBlbmFibGVkLiAqLw0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIENvbXBpbGVyIHNwZWNpZmljcy4gKi8NCi0gICAgI2RlZmluZSBwb3J0SU5QVVRfQllURSggeEFkZHIgKSAgICAgICAgICAgICAgaW5wKCB4QWRkciApDQotICAgICNkZWZpbmUgcG9ydE9VVFBVVF9CWVRFKCB4QWRkciwgdWNWYWx1ZSApICAgIG91dHAoIHhBZGRyLCB1Y1ZhbHVlICkNCi0gICAgI2RlZmluZSBwb3J0SU5QVVRfV09SRCggeEFkZHIgKSAgICAgICAgICAgICAgaW5wdyggeEFkZHIgKQ0KLSAgICAjZGVmaW5lIHBvcnRPVVRQVVRfV09SRCggeEFkZHIsIHVzVmFsdWUgKSAgICBvdXRwdyggeEFkZHIsIHVzVmFsdWUgKQ0KKyNkZWZpbmUgcG9ydElOUFVUX0JZVEUoIHhBZGRyICkJCQkJaW5wKCB4QWRkciApDQorI2RlZmluZSBwb3J0T1VUUFVUX0JZVEUoIHhBZGRyLCB1Y1ZhbHVlICkJb3V0cCggeEFkZHIsIHVjVmFsdWUgKQ0KKyNkZWZpbmUgcG9ydElOUFVUX1dPUkQoIHhBZGRyICkJCQkJaW5wdyggeEFkZHIgKQ0KKyNkZWZpbmUgcG9ydE9VVFBVVF9XT1JEKCB4QWRkciwgdXNWYWx1ZSApCW91dHB3KCB4QWRkciwgdXNWYWx1ZSApDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQotICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZUYXNrRnVuY3Rpb24sIHZQYXJhbWV0ZXJzICkgICAgdm9pZCB2VGFza0Z1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCi0gICAgI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdlRhc2tGdW5jdGlvbiwgdlBhcmFtZXRlcnMgKSAgICAgICAgICB2b2lkIHZUYXNrRnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZUYXNrRnVuY3Rpb24sIHZQYXJhbWV0ZXJzICkgdm9pZCB2VGFza0Z1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZUYXNrRnVuY3Rpb24sIHZQYXJhbWV0ZXJzICkgdm9pZCB2VGFza0Z1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KIA0KLSAgICAjaWZkZWYgX19jcGx1c3BsdXMNCi0gICAgICAgIH0NCi0gICAgI2VuZGlmDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KIA0KIA0KICNlbmRpZiAvKiBQT1JUTUFDUk9fSCAqLw0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL1BhcmFkaWdtL1Rlcm5fRUUvc21hbGwvcG9ydC5jIGIvcG9ydGFibGUvUGFyYWRpZ20vVGVybl9FRS9zbWFsbC9wb3J0LmMKaW5kZXggYzFlYWU0My4uNmZkYjliOCAxMDA2NDQKLS0tIGEvcG9ydGFibGUvUGFyYWRpZ20vVGVybl9FRS9zbWFsbC9wb3J0LmMKKysrIGIvcG9ydGFibGUvUGFyYWRpZ20vVGVybl9FRS9zbWFsbC9wb3J0LmMKQEAgLTI3LDkgKzI3LDkgQEAKIA0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0qIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBUZXJuIEVFIDE4Ng0KLSogcG9ydC4NCi0qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorICogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFibGUuaCBmb3IgdGhlIFRlcm4gRUUgMTg2DQorICogcG9ydC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIExpYnJhcnkgaW5jbHVkZXMuICovDQogI2luY2x1ZGUgPGVtYmVkZGVkLmg+DQpAQCAtNDEsMzIgKzQxLDMwIEBACiAjaW5jbHVkZSAicG9ydGFzbS5oIg0KIA0KIC8qIFRoZSB0aW1lciBpbmNyZW1lbnRzIGV2ZXJ5IGZvdXIgY2xvY2tzLCBoZW5jZSB0aGUgZGl2aWRlIGJ5IDQuICovDQotI2RlZmluZSBwb3J0UFJFU0NBTEVfVkFMVUUgICAgICAgICAgICAgICAgKCAxNiApDQotI2RlZmluZSBwb3J0VElNRVJfQ09NUEFSRSAgICAgICAgICAgICAgICAgKCBjb25maWdDUFVfQ0xPQ0tfSFogLyAoIGNvbmZpZ1RJQ0tfUkFURV9IWiAqIDRVTCApICkNCisjZGVmaW5lIHBvcnRQUkVTQ0FMRV9WQUxVRSAoIDE2ICkNCisjZGVmaW5lIHBvcnRUSU1FUl9DT01QQVJFICggY29uZmlnQ1BVX0NMT0NLX0haICAvICggY29uZmlnVElDS19SQVRFX0haICogNFVMICkgKQ0KIA0KIC8qIEZyb20gdGhlIFJEQyBkYXRhIHNoZWV0LiAqLw0KLSNkZWZpbmUgcG9ydEVOQUJMRV9USU1FUl9BTkRfSU5URVJSVVBUICAgICggdWludDE2X3QgKSAweGUwMGINCi0jZGVmaW5lIHBvcnRFTkFCTEVfVElNRVIgICAgICAgICAgICAgICAgICAoIHVpbnQxNl90ICkgMHhDMDAxDQorI2RlZmluZSBwb3J0RU5BQkxFX1RJTUVSX0FORF9JTlRFUlJVUFQgCSggdWludDE2X3QgKSAweGUwMGINCisjZGVmaW5lIHBvcnRFTkFCTEVfVElNRVIJCQkJKCB1aW50MTZfdCApIDB4QzAwMQ0KIA0KIC8qIEludGVycnVwdCBjb250cm9sLiAqLw0KLSNkZWZpbmUgcG9ydEVJT19SRUdJU1RFUiAgICAgICAgICAgICAgICAgIDB4ZmYyMg0KLSNkZWZpbmUgcG9ydENMRUFSX0lOVEVSUlVQVCAgICAgICAgICAgICAgIDB4MDAwOA0KKyNkZWZpbmUgcG9ydEVJT19SRUdJU1RFUiAweGZmMjINCisjZGVmaW5lIHBvcnRDTEVBUl9JTlRFUlJVUFQgMHgwMDA4DQogDQogLyogU2V0dXAgdGhlIGhhcmR3YXJlIHRvIGdlbmVyYXRlIHRoZSByZXF1aXJlZCB0aWNrIGZyZXF1ZW5jeS4gKi8NCiBzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICk7DQogDQogLyogVGhlIElTUiB1c2VkIGRlcGVuZHMgb24gd2hldGhlciB0aGUgcHJlZW1wdGl2ZSBvciBjb29wZXJhdGl2ZSBzY2hlZHVsZXINCi0gKiBpcyBiZWluZyB1c2VkLiAqLw0KLSNpZiAoIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDEgKQ0KLQ0KLS8qIFRpY2sgc2VydmljZSByb3V0aW5lIHVzZWQgYnkgdGhlIHNjaGVkdWxlciB3aGVuIHByZWVtcHRpdmUgc2NoZWR1bGluZyBpcw0KLSAqIGJlaW5nIHVzZWQuICovDQotICAgIHN0YXRpYyB2b2lkIF9faW50ZXJydXB0IF9fZmFyIHBydlByZWVtcHRpdmVUaWNrKCB2b2lkICk7DQoraXMgYmVpbmcgdXNlZC4gKi8NCisjaWYoIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDEgKQ0KKwkvKiBUaWNrIHNlcnZpY2Ugcm91dGluZSB1c2VkIGJ5IHRoZSBzY2hlZHVsZXIgd2hlbiBwcmVlbXB0aXZlIHNjaGVkdWxpbmcgaXMNCisJYmVpbmcgdXNlZC4gKi8NCisJc3RhdGljIHZvaWQgX19pbnRlcnJ1cHQgX19mYXIgcHJ2UHJlZW1wdGl2ZVRpY2soIHZvaWQgKTsNCiAjZWxzZQ0KLQ0KLS8qIFRpY2sgc2VydmljZSByb3V0aW5lIHVzZWQgYnkgdGhlIHNjaGVkdWxlciB3aGVuIGNvb3BlcmF0aXZlIHNjaGVkdWxpbmcgaXMNCi0gKiBiZWluZyB1c2VkLiAqLw0KLSAgICBzdGF0aWMgdm9pZCBfX2ludGVycnVwdCBfX2ZhciBwcnZOb25QcmVlbXB0aXZlVGljayggdm9pZCApOw0KKwkvKiBUaWNrIHNlcnZpY2Ugcm91dGluZSB1c2VkIGJ5IHRoZSBzY2hlZHVsZXIgd2hlbiBjb29wZXJhdGl2ZSBzY2hlZHVsaW5nIGlzDQorCWJlaW5nIHVzZWQuICovDQorCXN0YXRpYyB2b2lkIF9faW50ZXJydXB0IF9fZmFyIHBydk5vblByZWVtcHRpdmVUaWNrKCB2b2lkICk7DQogI2VuZGlmDQogDQogLyogVHJhcCByb3V0aW5lIHVzZWQgYnkgdGFza1lJRUxEKCkgdG8gbWFudWFsbHkgY2F1c2UgYSBjb250ZXh0IHN3aXRjaC4gKi8NCkBAIC03NCwxNDcgKzcyLDE0OCBAQAogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogLyogU2VlIGhlYWRlciBmaWxlIGZvciBkZXNjcmlwdGlvbi4gKi8NCi1TdGFja1R5cGVfdCAqIHB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKiBweFRvcE9mU3RhY2ssDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqIHB2UGFyYW1ldGVycyApDQorU3RhY2tUeXBlX3QgKnB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKnB4VG9wT2ZTdGFjaywgVGFza0Z1bmN0aW9uX3QgcHhDb2RlLCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KIHsNCi0gICAgU3RhY2tUeXBlX3QgRFNfUmVnID0gMDsNCitTdGFja1R5cGVfdCBEU19SZWcgPSAwOw0KIA0KLSAgICAvKiBXZSBuZWVkIHRoZSB0cnVlIGRhdGEgc2VnbWVudC4gKi8NCi0gICAgX19hc20gew0KLSAgICAgICAgTU9WIERTX1JlZywgRFMNCi0gICAgfTsNCisJLyogV2UgbmVlZCB0aGUgdHJ1ZSBkYXRhIHNlZ21lbnQuICovDQorCV9fYXNtewlNT1YgRFNfUmVnLCBEUyB9Ow0KIA0KLSAgICAvKiBQbGFjZSBhIGZldyBieXRlcyBvZiBrbm93biB2YWx1ZXMgb24gdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suDQotICAgICAqIFRoaXMgaXMganVzdCB1c2VmdWwgZm9yIGRlYnVnZ2luZy4gKi8NCisJLyogUGxhY2UgYSBmZXcgYnl0ZXMgb2Yga25vd24gdmFsdWVzIG9uIHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLg0KKwlUaGlzIGlzIGp1c3QgdXNlZnVsIGZvciBkZWJ1Z2dpbmcuICovDQogDQotICAgICpweFRvcE9mU3RhY2sgPSAweDExMTE7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMHgyMjIyOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MzMzMzsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDExMTE7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgyMjIyOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MzMzMzsNCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgIC8qIFdlIGFyZSBnb2luZyB0byBzdGFydCB0aGUgc2NoZWR1bGVyIHVzaW5nIGEgcmV0dXJuIGZyb20gaW50ZXJydXB0DQotICAgICAqIGluc3RydWN0aW9uIHRvIGxvYWQgdGhlIHByb2dyYW0gY291bnRlciwgc28gZmlyc3QgdGhlcmUgd291bGQgYmUgdGhlDQotICAgICAqIGZ1bmN0aW9uIGNhbGwgd2l0aCBwYXJhbWV0ZXJzIHByZWFtYmxlLiAqLw0KKwkvKiBXZSBhcmUgZ29pbmcgdG8gc3RhcnQgdGhlIHNjaGVkdWxlciB1c2luZyBhIHJldHVybiBmcm9tIGludGVycnVwdA0KKwlpbnN0cnVjdGlvbiB0byBsb2FkIHRoZSBwcm9ncmFtIGNvdW50ZXIsIHNvIGZpcnN0IHRoZXJlIHdvdWxkIGJlIHRoZQ0KKwlmdW5jdGlvbiBjYWxsIHdpdGggcGFyYW1ldGVycyBwcmVhbWJsZS4gKi8NCisJDQorCSpweFRvcE9mU3RhY2sgPSBGUF9PRkYoIHB2UGFyYW1ldGVycyApOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IEZQX09GRiggcHhDb2RlICk7DQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAqcHhUb3BPZlN0YWNrID0gRlBfT0ZGKCBwdlBhcmFtZXRlcnMgKTsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSBGUF9PRkYoIHB4Q29kZSApOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJLyogTmV4dCB0aGUgc3RhdHVzIHJlZ2lzdGVyIGFuZCBpbnRlcnJ1cHQgcmV0dXJuIGFkZHJlc3MuICovDQorCSpweFRvcE9mU3RhY2sgPSBwb3J0SU5JVElBTF9TVzsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSBGUF9TRUcoIHB4Q29kZSApOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IEZQX09GRiggcHhDb2RlICk7DQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBOZXh0IHRoZSBzdGF0dXMgcmVnaXN0ZXIgYW5kIGludGVycnVwdCByZXR1cm4gYWRkcmVzcy4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9IHBvcnRJTklUSUFMX1NXOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IEZQX1NFRyggcHhDb2RlICk7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gRlBfT0ZGKCBweENvZGUgKTsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIFRoZSByZW1haW5pbmcgcmVnaXN0ZXJzIHdvdWxkIGJlIHB1c2hlZCBvbiB0aGUgc3RhY2sgYnkgb3VyIGNvbnRleHQNCisJc3dpdGNoIGZ1bmN0aW9uLiAgVGhlc2UgYXJlIGxvYWRlZCB3aXRoIHZhbHVlcyBzaW1wbHkgdG8gbWFrZSBkZWJ1Z2dpbmcNCisJZWFzaWVyLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4QUFBQTsJLyogQVggKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhCQkJCOwkvKiBCWCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweENDQ0M7CS8qIENYICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4RERERDsJLyogRFggKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhFRUVFOwkvKiBFUyAqLw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgLyogVGhlIHJlbWFpbmluZyByZWdpc3RlcnMgd291bGQgYmUgcHVzaGVkIG9uIHRoZSBzdGFjayBieSBvdXIgY29udGV4dA0KLSAgICAgKiBzd2l0Y2ggZnVuY3Rpb24uICBUaGVzZSBhcmUgbG9hZGVkIHdpdGggdmFsdWVzIHNpbXBseSB0byBtYWtlIGRlYnVnZ2luZw0KLSAgICAgKiBlYXNpZXIuICovDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhBQUFBOyAvKiBBWCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweEJCQkI7IC8qIEJYICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4Q0NDQzsgLyogQ1ggKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhEREREOyAvKiBEWCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweEVFRUU7IC8qIEVTICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gRFNfUmVnOwkJCQkJCS8qIERTICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDEyMzsJLyogU0kgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhEREREOwkvKiBESSAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweEJCQkI7CS8qIEJQICovDQogDQotICAgICpweFRvcE9mU3RhY2sgPSBEU19SZWc7ICAgICAgICAgICAgICAgICAvKiBEUyAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAxMjM7IC8qIFNJICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4RERERDsgLyogREkgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhCQkJCOyAvKiBCUCAqLw0KLQ0KLSAgICByZXR1cm4gcHhUb3BPZlN0YWNrOw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBCYXNlVHlwZV90IHhQb3J0U3RhcnRTY2hlZHVsZXIoIHZvaWQgKQ0KIHsNCi0gICAgLyogVGhpcyBpcyBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGFscmVhZHkgZGlzYWJsZWQuICovDQorCS8qIFRoaXMgaXMgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBhbHJlYWR5IGRpc2FibGVkLiAqLw0KIA0KLSAgICAvKiBQdXQgb3VyIG1hbnVhbCBzd2l0Y2ggKHlpZWxkKSBmdW5jdGlvbiBvbiBhIGtub3duDQotICAgICAqIHZlY3Rvci4gKi8NCi0gICAgc2V0dmVjdCggcG9ydFNXSVRDSF9JTlRfTlVNQkVSLCBwcnZZaWVsZFByb2Nlc3NvciApOw0KKwkvKiBQdXQgb3VyIG1hbnVhbCBzd2l0Y2ggKHlpZWxkKSBmdW5jdGlvbiBvbiBhIGtub3duDQorCXZlY3Rvci4gKi8NCisJc2V0dmVjdCggcG9ydFNXSVRDSF9JTlRfTlVNQkVSLCBwcnZZaWVsZFByb2Nlc3NvciApOw0KIA0KLSAgICAvKiBTZXR1cCB0aGUgdGljayBpbnRlcnJ1cHQuICovDQotICAgIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoKTsNCisJLyogU2V0dXAgdGhlIHRpY2sgaW50ZXJydXB0LiAqLw0KKwlwcnZTZXR1cFRpbWVySW50ZXJydXB0KCk7DQogDQotICAgIC8qIEtpY2sgb2ZmIHRoZSBzY2hlZHVsZXIgYnkgc2V0dGluZyB1cCB0aGUgY29udGV4dCBvZiB0aGUgZmlyc3QgdGFzay4gKi8NCi0gICAgcG9ydEZJUlNUX0NPTlRFWFQoKTsNCisJLyogS2ljayBvZmYgdGhlIHNjaGVkdWxlciBieSBzZXR0aW5nIHVwIHRoZSBjb250ZXh0IG9mIHRoZSBmaXJzdCB0YXNrLiAqLw0KKwlwb3J0RklSU1RfQ09OVEVYVCgpOw0KIA0KLSAgICAvKiBTaG91bGQgbm90IGdldCBoZXJlISAqLw0KLSAgICByZXR1cm4gcGRGQUxTRTsNCisJLyogU2hvdWxkIG5vdCBnZXQgaGVyZSEgKi8NCisJcmV0dXJuIHBkRkFMU0U7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFRoZSBJU1IgdXNlZCBkZXBlbmRzIG9uIHdoZXRoZXIgdGhlIHByZWVtcHRpdmUgb3IgY29vcGVyYXRpdmUgc2NoZWR1bGVyDQotICogaXMgYmVpbmcgdXNlZC4gKi8NCi0jaWYgKCBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAxICkNCi0gICAgc3RhdGljIHZvaWQgX19pbnRlcnJ1cHQgX19mYXIgcHJ2UHJlZW1wdGl2ZVRpY2soIHZvaWQgKQ0KLSAgICB7DQotICAgICAgICAvKiBHZXQgdGhlIHNjaGVkdWxlciB0byB1cGRhdGUgdGhlIHRhc2sgc3RhdGVzIGZvbGxvd2luZyB0aGUgdGljay4gKi8NCi0gICAgICAgIGlmKCB4VGFza0luY3JlbWVudFRpY2soKSAhPSBwZEZBTFNFICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICAvKiBTd2l0Y2ggaW4gdGhlIGNvbnRleHQgb2YgdGhlIG5leHQgdGFzayB0byBiZSBydW4uICovDQotICAgICAgICAgICAgcG9ydEVORF9TV0lUQ0hJTkdfSVNSKCk7DQotICAgICAgICB9DQoraXMgYmVpbmcgdXNlZC4gKi8NCisjaWYoIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDEgKQ0KKwlzdGF0aWMgdm9pZCBfX2ludGVycnVwdCBfX2ZhciBwcnZQcmVlbXB0aXZlVGljayggdm9pZCApDQorCXsNCisJCS8qIEdldCB0aGUgc2NoZWR1bGVyIHRvIHVwZGF0ZSB0aGUgdGFzayBzdGF0ZXMgZm9sbG93aW5nIHRoZSB0aWNrLiAqLw0KKwkJaWYoIHhUYXNrSW5jcmVtZW50VGljaygpICE9IHBkRkFMU0UgKQ0KKwkJew0KKwkJCS8qIFN3aXRjaCBpbiB0aGUgY29udGV4dCBvZiB0aGUgbmV4dCB0YXNrIHRvIGJlIHJ1bi4gKi8NCisJCQlwb3J0RU5EX1NXSVRDSElOR19JU1IoKTsNCisJCX0NCiANCi0gICAgICAgIC8qIFJlc2V0IGludGVycnVwdC4gKi8NCi0gICAgICAgIG91dHBvcnQoIHBvcnRFSU9fUkVHSVNURVIsIHBvcnRDTEVBUl9JTlRFUlJVUFQgKTsNCi0gICAgfQ0KLSNlbHNlIC8qIGlmICggY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMSApICovDQotICAgIHN0YXRpYyB2b2lkIF9faW50ZXJydXB0IF9fZmFyIHBydk5vblByZWVtcHRpdmVUaWNrKCB2b2lkICkNCi0gICAgew0KLSAgICAgICAgLyogU2FtZSBhcyBwcmVlbXB0aXZlIHRpY2ssIGJ1dCB0aGUgY29vcGVyYXRpdmUgc2NoZWR1bGVyIGlzIGJlaW5nIHVzZWQNCi0gICAgICAgICAqIHNvIHdlIGRvbid0IGhhdmUgdG8gc3dpdGNoIGluIHRoZSBjb250ZXh0IG9mIHRoZSBuZXh0IHRhc2suICovDQotICAgICAgICB4VGFza0luY3JlbWVudFRpY2soKTsNCi0NCi0gICAgICAgIC8qIFJlc2V0IGludGVycnVwdC4gKi8NCi0gICAgICAgIG91dHBvcnQoIHBvcnRFSU9fUkVHSVNURVIsIHBvcnRDTEVBUl9JTlRFUlJVUFQgKTsNCi0gICAgfQ0KLSNlbmRpZiAvKiBpZiAoIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDEgKSAqLw0KKwkJLyogUmVzZXQgaW50ZXJydXB0LiAqLw0KKwkJb3V0cG9ydCggcG9ydEVJT19SRUdJU1RFUiwgcG9ydENMRUFSX0lOVEVSUlVQVCApOw0KKwl9DQorI2Vsc2UNCisJc3RhdGljIHZvaWQgX19pbnRlcnJ1cHQgX19mYXIgcHJ2Tm9uUHJlZW1wdGl2ZVRpY2soIHZvaWQgKQ0KKwl7DQorCQkvKiBTYW1lIGFzIHByZWVtcHRpdmUgdGljaywgYnV0IHRoZSBjb29wZXJhdGl2ZSBzY2hlZHVsZXIgaXMgYmVpbmcgdXNlZA0KKwkJc28gd2UgZG9uJ3QgaGF2ZSB0byBzd2l0Y2ggaW4gdGhlIGNvbnRleHQgb2YgdGhlIG5leHQgdGFzay4gKi8NCisJCXhUYXNrSW5jcmVtZW50VGljaygpOw0KKwkJDQorCQkvKiBSZXNldCBpbnRlcnJ1cHQuICovDQorCQlvdXRwb3J0KCBwb3J0RUlPX1JFR0lTVEVSLCBwb3J0Q0xFQVJfSU5URVJSVVBUICk7DQorCX0NCisjZW5kaWYNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBzdGF0aWMgdm9pZCBfX2ludGVycnVwdCBfX2ZhciBwcnZZaWVsZFByb2Nlc3Nvciggdm9pZCApDQogew0KLSAgICAvKiBTd2l0Y2ggaW4gdGhlIGNvbnRleHQgb2YgdGhlIG5leHQgdGFzayB0byBiZSBydW4uICovDQotICAgIHBvcnRFTkRfU1dJVENISU5HX0lTUigpOw0KKwkvKiBTd2l0Y2ggaW4gdGhlIGNvbnRleHQgb2YgdGhlIG5leHQgdGFzayB0byBiZSBydW4uICovDQorCXBvcnRFTkRfU1dJVENISU5HX0lTUigpOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0RW5kU2NoZWR1bGVyKCB2b2lkICkNCiB7DQotICAgIC8qIE5vdCBpbXBsZW1lbnRlZC4gKi8NCisJLyogTm90IGltcGxlbWVudGVkLiAqLw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICkNCiB7DQotICAgIGNvbnN0IHVpbnQzMl90IHVsQ29tcGFyZVZhbHVlID0gcG9ydFRJTUVSX0NPTVBBUkU7DQotICAgIHVpbnQxNl90IHVzVGltZXJDb21wYXJlOw0KK2NvbnN0IHVpbnQzMl90IHVsQ29tcGFyZVZhbHVlID0gcG9ydFRJTUVSX0NPTVBBUkU7DQordWludDE2X3QgdXNUaW1lckNvbXBhcmU7DQogDQotICAgIHVzVGltZXJDb21wYXJlID0gKCB1aW50MTZfdCApICggdWxDb21wYXJlVmFsdWUgPj4gNCApOw0KKwl1c1RpbWVyQ29tcGFyZSA9ICggdWludDE2X3QgKSAoIHVsQ29tcGFyZVZhbHVlID4+IDQgKTsNCiAgICAgdDJfaW5pdCggcG9ydEVOQUJMRV9USU1FUiwgcG9ydFBSRVNDQUxFX1ZBTFVFLCBOVUxMICk7DQogDQotICAgICNpZiAoIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDEgKQ0KLQ0KLSAgICAgICAgLyogVGljayBzZXJ2aWNlIHJvdXRpbmUgdXNlZCBieSB0aGUgc2NoZWR1bGVyIHdoZW4gcHJlZW1wdGl2ZSBzY2hlZHVsaW5nIGlzDQotICAgICAgICAgKiBiZWluZyB1c2VkLiAqLw0KLSAgICAgICAgdDFfaW5pdCggcG9ydEVOQUJMRV9USU1FUl9BTkRfSU5URVJSVVBULCB1c1RpbWVyQ29tcGFyZSwgdXNUaW1lckNvbXBhcmUsIHBydlByZWVtcHRpdmVUaWNrICk7DQotICAgICNlbHNlDQotDQotICAgICAgICAvKiBUaWNrIHNlcnZpY2Ugcm91dGluZSB1c2VkIGJ5IHRoZSBzY2hlZHVsZXIgd2hlbiBjb29wZXJhdGl2ZSBzY2hlZHVsaW5nIGlzDQotICAgICAgICAgKiBiZWluZyB1c2VkLiAqLw0KLSAgICAgICAgdDFfaW5pdCggcG9ydEVOQUJMRV9USU1FUl9BTkRfSU5URVJSVVBULCB1c1RpbWVyQ29tcGFyZSwgdXNUaW1lckNvbXBhcmUsIHBydk5vblByZWVtcHRpdmVUaWNrICk7DQotICAgICNlbmRpZg0KKwkjaWYoIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDEgKQ0KKwkJLyogVGljayBzZXJ2aWNlIHJvdXRpbmUgdXNlZCBieSB0aGUgc2NoZWR1bGVyIHdoZW4gcHJlZW1wdGl2ZSBzY2hlZHVsaW5nIGlzDQorCQliZWluZyB1c2VkLiAqLw0KKwkJdDFfaW5pdCggcG9ydEVOQUJMRV9USU1FUl9BTkRfSU5URVJSVVBULCB1c1RpbWVyQ29tcGFyZSwgdXNUaW1lckNvbXBhcmUsIHBydlByZWVtcHRpdmVUaWNrICk7DQorCSNlbHNlDQorCQkvKiBUaWNrIHNlcnZpY2Ugcm91dGluZSB1c2VkIGJ5IHRoZSBzY2hlZHVsZXIgd2hlbiBjb29wZXJhdGl2ZSBzY2hlZHVsaW5nIGlzDQorCQliZWluZyB1c2VkLiAqLw0KKwkJdDFfaW5pdCggcG9ydEVOQUJMRV9USU1FUl9BTkRfSU5URVJSVVBULCB1c1RpbWVyQ29tcGFyZSwgdXNUaW1lckNvbXBhcmUsIHBydk5vblByZWVtcHRpdmVUaWNrICk7DQorCSNlbmRpZg0KIH0NCisNCisNCisNCisNCisNCisNCisNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9QYXJhZGlnbS9UZXJuX0VFL3NtYWxsL3BvcnRhc20uaCBiL3BvcnRhYmxlL1BhcmFkaWdtL1Rlcm5fRUUvc21hbGwvcG9ydGFzbS5oCmluZGV4IDA1NTA4OWEuLmUyMjQwNjIgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL1BhcmFkaWdtL1Rlcm5fRUUvc21hbGwvcG9ydGFzbS5oCisrKyBiL3BvcnRhYmxlL1BhcmFkaWdtL1Rlcm5fRUUvc21hbGwvcG9ydGFzbS5oCkBAIC00NiwyNiArNDYsMjcgQEAKICAqLw0KIHZvaWQgcG9ydEZJUlNUX0NPTlRFWFQoIHZvaWQgKTsNCiANCi0jZGVmaW5lIHBvcnRFTkRfU1dJVENISU5HX0lTUigpICAgICAgICAgICAgIFwNCi0gICAgYXNtIHsgbW92IGJ4LCBbIHB4Q3VycmVudFRDQiBdIH0gICAgICAgIFwNCi0gICAgYXNtIHsgbW92IHdvcmQgcHRyWyBieCBdLCBzcCB9ICAgICAgICAgIFwNCi0gICAgYXNtIHsgY2FsbCBmYXIgcHRyIHZUYXNrU3dpdGNoQ29udGV4dCB9IFwNCi0gICAgYXNtIHsgbW92IGJ4LCBbIHB4Q3VycmVudFRDQiBdIH0gICAgICAgIFwNCi0gICAgYXNtIHsgbW92IHNwLCBbIGJ4IF0gfQ0KKyNkZWZpbmUgcG9ydEVORF9TV0lUQ0hJTkdfSVNSKCkJCQkJCQkJCQkJCVwNCisJCQkJCQkJYXNtIHsgbW92CWJ4LCBbcHhDdXJyZW50VENCXQkJCX0gICBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzbSB7IG1vdgl3b3JkIHB0ciBbYnhdLCBzcAkJCX0JXA0KKwkJCQkJCQlhc20geyBjYWxsICBmYXIgcHRyIHZUYXNrU3dpdGNoQ29udGV4dAl9CVwNCisJCQkJCQkJYXNtIHsgbW92CWJ4LCBbcHhDdXJyZW50VENCXQkJCX0JXA0KKwkJCQkJCQlhc20geyBtb3YJc3AsIFtieF0JCQkJCX0NCiANCi0jZGVmaW5lIHBvcnRGSVJTVF9DT05URVhUKCkgICAgICAgICAgXA0KLSAgICBhc20geyBtb3YgYngsIFsgcHhDdXJyZW50VENCIF0gfSBcDQotICAgIGFzbSB7IG1vdiBzcCwgWyBieCBdIH0gICAgICAgICAgIFwNCi0gICAgYXNtIHsgcG9wIGJwIH0gICAgICAgICAgICAgICAgICAgXA0KLSAgICBhc20geyBwb3AgZGkgfSAgICAgICAgICAgICAgICAgICBcDQotICAgIGFzbSB7IHBvcCBzaSB9ICAgICAgICAgICAgICAgICAgIFwNCi0gICAgYXNtIHsgcG9wIGRzIH0gICAgICAgICAgICAgICAgICAgXA0KLSAgICBhc20geyBwb3AgZXMgfSAgICAgICAgICAgICAgICAgICBcDQotICAgIGFzbSB7IHBvcCBkeCB9ICAgICAgICAgICAgICAgICAgIFwNCi0gICAgYXNtIHsgcG9wIGN4IH0gICAgICAgICAgICAgICAgICAgXA0KLSAgICBhc20geyBwb3AgYnggfSAgICAgICAgICAgICAgICAgICBcDQotICAgIGFzbSB7IHBvcCBheCB9ICAgICAgICAgICAgICAgICAgIFwNCi0gICAgYXNtIHsgaXJldCB9DQorI2RlZmluZSBwb3J0RklSU1RfQ09OVEVYVCgpCQkJCQkJCQkJCQlcDQorCQkJCQkJCWFzbSB7IG1vdglieCwgW3B4Q3VycmVudFRDQl0JCQl9CVwNCisJCQkJCQkJYXNtIHsgbW92CXNwLCBbYnhdCQkJCQl9CVwNCisJCQkJCQkJYXNtIHsgcG9wCWJwCQkJCQkJCX0JXA0KKwkJCQkJCQlhc20geyBwb3AJZGkJCQkJCQkJfQlcDQorCQkJCQkJCWFzbSB7IHBvcAlzaQkJCQkJCQl9CVwNCisgICAJCQkJCQkJYXNtIHsgcG9wCWRzCQkJCQkJCX0JXA0KKyAgIAkJCQkJCQlhc20geyBwb3AJZXMJCQkJCQkJfQlcDQorCQkJCQkJCWFzbSB7IHBvcAlkeAkJCQkJCQl9CVwNCisJCQkJCQkJYXNtIHsgcG9wCWN4CQkJCQkJCX0JXA0KKwkJCQkJCQlhc20geyBwb3AJYngJCQkJCQkJfQlcDQorCQkJCQkJCWFzbSB7IHBvcAlheAkJCQkJCQl9CVwNCisJCQkJCQkJYXNtIHsgaXJldAkJCQkJCQkJfQ0KIA0KIA0KLSNlbmRpZiAvKiBpZm5kZWYgUE9SVF9BU01fSCAqLw0KKyNlbmRpZg0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL1BhcmFkaWdtL1Rlcm5fRUUvc21hbGwvcG9ydG1hY3JvLmggYi9wb3J0YWJsZS9QYXJhZGlnbS9UZXJuX0VFL3NtYWxsL3BvcnRtYWNyby5oCmluZGV4IGJlYmQxNTQuLmZkM2NhMWQgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL1BhcmFkaWdtL1Rlcm5fRUUvc21hbGwvcG9ydG1hY3JvLmgKKysrIGIvcG9ydGFibGUvUGFyYWRpZ20vVGVybl9FRS9zbWFsbC9wb3J0bWFjcm8uaApAQCAtMjYsMTEgKzI2LDExIEBACiAgKi8NCiANCiAjaWZuZGVmIFBPUlRNQUNST19IDQotICAgICNkZWZpbmUgUE9SVE1BQ1JPX0gNCisjZGVmaW5lIFBPUlRNQUNST19IDQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgZXh0ZXJuICJDIiB7DQotICAgICNlbmRpZg0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgKiBQb3J0IHNwZWNpZmljIGRlZmluaXRpb25zLg0KQEAgLTQzLDY1ICs0Myw2NSBAQAogICovDQogDQogLyogVHlwZSBkZWZpbml0aW9ucy4gKi8NCi0gICAgI2RlZmluZSBwb3J0Q0hBUiAgICAgICAgICBjaGFyDQotICAgICNkZWZpbmUgcG9ydEZMT0FUICAgICAgICAgZmxvYXQNCi0gICAgI2RlZmluZSBwb3J0RE9VQkxFICAgICAgICBsb25nDQotICAgICNkZWZpbmUgcG9ydExPTkcgICAgICAgICAgbG9uZw0KLSAgICAjZGVmaW5lIHBvcnRTSE9SVCAgICAgICAgIGludA0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19UWVBFICAgIHVpbnQxNl90DQotICAgICNkZWZpbmUgcG9ydEJBU0VfVFlQRSAgICAgc2hvcnQNCisjZGVmaW5lIHBvcnRDSEFSCQljaGFyDQorI2RlZmluZSBwb3J0RkxPQVQJCWZsb2F0DQorI2RlZmluZSBwb3J0RE9VQkxFCQlsb25nDQorI2RlZmluZSBwb3J0TE9ORwkJbG9uZw0KKyNkZWZpbmUgcG9ydFNIT1JUCQlpbnQNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFCXVpbnQxNl90DQorI2RlZmluZSBwb3J0QkFTRV9UWVBFCXNob3J0DQogDQotICAgIHR5cGVkZWYgcG9ydFNUQUNLX1RZUEUgICBTdGFja1R5cGVfdDsNCi0gICAgdHlwZWRlZiBzaG9ydCAgICAgICAgICAgIEJhc2VUeXBlX3Q7DQotICAgIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgICBVQmFzZVR5cGVfdDsNCit0eXBlZGVmIHBvcnRTVEFDS19UWVBFIFN0YWNrVHlwZV90Ow0KK3R5cGVkZWYgc2hvcnQgQmFzZVR5cGVfdDsNCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IFVCYXNlVHlwZV90Ow0KIA0KIA0KLSAgICB0eXBlZGVmIHZvaWQgKCBfX2ludGVycnVwdCBfX2ZhciAqIHB4SVNSICkoKTsNCit0eXBlZGVmIHZvaWQgKCBfX2ludGVycnVwdCBfX2ZhciAqcHhJU1IgKSgpOw0KIA0KLSAgICAjaWYgKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KLSAgICAgICAgdHlwZWRlZiB1aW50MTZfdCAgIFRpY2tUeXBlX3Q7DQotICAgICAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQotICAgICNlbHNlDQotICAgICAgICB0eXBlZGVmIHVpbnQzMl90ICAgVGlja1R5cGVfdDsNCi0gICAgICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwNCi0gICAgI2VuZGlmDQorI2lmKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KKwl0eXBlZGVmIHVpbnQxNl90IFRpY2tUeXBlX3Q7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIFRpY2tUeXBlX3QgKSAweGZmZmYNCisjZWxzZQ0KKwl0eXBlZGVmIHVpbnQzMl90IFRpY2tUeXBlX3Q7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwNCisjZW5kaWYNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBDcml0aWNhbCBzZWN0aW9uIGhhbmRsaW5nLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpIFwNCi0gICAgX19hc217IHB1c2hmIH0gICAgICAgICAgICAgICBcDQotICAgIF9fYXNteyBjbGkgfSAgICAgICAgICAgICAgICAgXA0KKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkJCQlfX2FzbXsgcHVzaGYgfSAgXA0KKwkJCQkJCQkJCQlfX2FzbXsgY2xpIAkgfQlcDQogDQotICAgICNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKSAgICAgICAgIF9fYXNteyBwb3BmIH0NCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkJCQkJX19hc217IHBvcGYgfQ0KIA0KLSAgICAjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAgICBfX2FzbXsgY2xpIH0NCisjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKQkJX19hc217IGNsaSB9DQogDQotICAgICNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkgICAgIF9fYXNteyBzdGkgfQ0KKyNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkJCQlfX2FzbXsgc3RpIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBIYXJkd2FyZSBzcGVjaWZpY3MuICovDQotICAgICNkZWZpbmUgcG9ydE5PUCgpICAgICAgX19hc217IG5vcCB9DQotICAgICNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSCAgICAgICAgICggLTEgKQ0KLSAgICAjZGVmaW5lIHBvcnRTV0lUQ0hfSU5UX05VTUJFUiAgICAweDgwDQotICAgICNkZWZpbmUgcG9ydFlJRUxEKCkgICAgX19hc217IGludCBwb3J0U1dJVENIX0lOVF9OVU1CRVIgfQ0KLSAgICAjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUyAgICAgICAoICggVGlja1R5cGVfdCApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KLSAgICAjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVCAgICAgICAyDQotICAgICNkZWZpbmUgcG9ydElOSVRJQUxfU1cgICAgICAgICAgICggKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDIwMiApICAgICAgLyogU3RhcnQgdGhlIHRhc2tzIHdpdGggaW50ZXJydXB0cyBlbmFibGVkLiAqLw0KKyNkZWZpbmUgcG9ydE5PUCgpCQkJCQkJX19hc217IG5vcCB9DQorI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RICQkJCSggLTEgKQ0KKyNkZWZpbmUgcG9ydFNXSVRDSF9JTlRfTlVNQkVSIAkJCTB4ODANCisjZGVmaW5lIHBvcnRZSUVMRCgpCQkJCQkJX19hc217IGludCBwb3J0U1dJVENIX0lOVF9OVU1CRVIgfQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TCQkJCSggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQorI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQJCQkJMg0KKyNkZWZpbmUgcG9ydElOSVRJQUxfU1cJCQkJCSggKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDIwMiApCS8qIFN0YXJ0IHRoZSB0YXNrcyB3aXRoIGludGVycnVwdHMgZW5hYmxlZC4gKi8NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBDb21waWxlciBzcGVjaWZpY3MuICovDQotICAgICNkZWZpbmUgcG9ydElOUFVUX0JZVEUoIHhBZGRyICkgICAgICAgICAgICAgIGlucCggeEFkZHIgKQ0KLSAgICAjZGVmaW5lIHBvcnRPVVRQVVRfQllURSggeEFkZHIsIHVjVmFsdWUgKSAgICBvdXRwKCB4QWRkciwgdWNWYWx1ZSApDQotICAgICNkZWZpbmUgcG9ydElOUFVUX1dPUkQoIHhBZGRyICkgICAgICAgICAgICAgIGlucHcoIHhBZGRyICkNCi0gICAgI2RlZmluZSBwb3J0T1VUUFVUX1dPUkQoIHhBZGRyLCB1c1ZhbHVlICkgICAgb3V0cHcoIHhBZGRyLCB1c1ZhbHVlICkNCisjZGVmaW5lIHBvcnRJTlBVVF9CWVRFKCB4QWRkciApCQkJCWlucCggeEFkZHIgKQ0KKyNkZWZpbmUgcG9ydE9VVFBVVF9CWVRFKCB4QWRkciwgdWNWYWx1ZSApCW91dHAoIHhBZGRyLCB1Y1ZhbHVlICkNCisjZGVmaW5lIHBvcnRJTlBVVF9XT1JEKCB4QWRkciApCQkJCWlucHcoIHhBZGRyICkNCisjZGVmaW5lIHBvcnRPVVRQVVRfV09SRCggeEFkZHIsIHVzVmFsdWUgKQlvdXRwdyggeEFkZHIsIHVzVmFsdWUgKQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2VGFza0Z1bmN0aW9uLCB2UGFyYW1ldGVycyApICAgIHZvaWQgdlRhc2tGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQotICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZUYXNrRnVuY3Rpb24sIHZQYXJhbWV0ZXJzICkgICAgICAgICAgdm9pZCB2VGFza0Z1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2VGFza0Z1bmN0aW9uLCB2UGFyYW1ldGVycyApIHZvaWQgdlRhc2tGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2VGFza0Z1bmN0aW9uLCB2UGFyYW1ldGVycyApIHZvaWQgdlRhc2tGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCiANCi0gICAgI2lmZGVmIF9fY3BsdXNwbHVzDQotICAgICAgICB9DQotICAgICNlbmRpZg0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCiANCiAjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8NCisNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9SVkRTL0FSTTdfTFBDMjF4eC9wb3J0LmMgYi9wb3J0YWJsZS9SVkRTL0FSTTdfTFBDMjF4eC9wb3J0LmMKaW5kZXggNWI5YzRjOS4uYjExMWYxMyAxMDA2NDQKLS0tIGEvcG9ydGFibGUvUlZEUy9BUk03X0xQQzIxeHgvcG9ydC5jCisrKyBiL3BvcnRhYmxlL1JWRFMvQVJNN19MUEMyMXh4L3BvcnQuYwpAQCAtMzQsMzUgKzM0LDM1IEBACiAjaW5jbHVkZSAidGFzay5oIg0KIA0KIC8qIENvbnN0YW50cyByZXF1aXJlZCB0byBzZXR1cCB0aGUgaW5pdGlhbCB0YXNrIGNvbnRleHQuICovDQotI2RlZmluZSBwb3J0SU5JVElBTF9TUFNSICAgICAgICAgICAgICAgICAgICggKCBTdGFja1R5cGVfdCApIDB4MWYgKSAvKiBTeXN0ZW0gbW9kZSwgQVJNIG1vZGUsIGludGVycnVwdHMgZW5hYmxlZC4gKi8NCi0jZGVmaW5lIHBvcnRUSFVNQl9NT0RFX0JJVCAgICAgICAgICAgICAgICAgKCAoIFN0YWNrVHlwZV90ICkgMHgyMCApDQotI2RlZmluZSBwb3J0SU5TVFJVQ1RJT05fU0laRSAgICAgICAgICAgICAgICggKCBTdGFja1R5cGVfdCApIDQgKQ0KLSNkZWZpbmUgcG9ydE5PX0NSSVRJQ0FMX1NFQ1RJT05fTkVTVElORyAgICAoICggU3RhY2tUeXBlX3QgKSAwICkNCisjZGVmaW5lIHBvcnRJTklUSUFMX1NQU1IJCQkJKCAoIFN0YWNrVHlwZV90ICkgMHgxZiApIC8qIFN5c3RlbSBtb2RlLCBBUk0gbW9kZSwgaW50ZXJydXB0cyBlbmFibGVkLiAqLw0KKyNkZWZpbmUgcG9ydFRIVU1CX01PREVfQklUCQkJCSggKCBTdGFja1R5cGVfdCApIDB4MjAgKQ0KKyNkZWZpbmUgcG9ydElOU1RSVUNUSU9OX1NJWkUJCQkoICggU3RhY2tUeXBlX3QgKSA0ICkNCisjZGVmaW5lIHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkcJKCAoIFN0YWNrVHlwZV90ICkgMCApDQogDQogLyogQ29uc3RhbnRzIHJlcXVpcmVkIHRvIHNldHVwIHRoZSB0aWNrIElTUi4gKi8NCi0jZGVmaW5lIHBvcnRFTkFCTEVfVElNRVIgICAgICAgICAgICAgICAgICAgKCAoIHVpbnQ4X3QgKSAweDAxICkNCi0jZGVmaW5lIHBvcnRQUkVTQ0FMRV9WQUxVRSAgICAgICAgICAgICAgICAgMHgwMA0KLSNkZWZpbmUgcG9ydElOVEVSUlVQVF9PTl9NQVRDSCAgICAgICAgICAgICAoICggdWludDMyX3QgKSAweDAxICkNCi0jZGVmaW5lIHBvcnRSRVNFVF9DT1VOVF9PTl9NQVRDSCAgICAgICAgICAgKCAoIHVpbnQzMl90ICkgMHgwMiApDQorI2RlZmluZSBwb3J0RU5BQkxFX1RJTUVSCQkJKCAoIHVpbnQ4X3QgKSAweDAxICkNCisjZGVmaW5lIHBvcnRQUkVTQ0FMRV9WQUxVRQkJCTB4MDANCisjZGVmaW5lIHBvcnRJTlRFUlJVUFRfT05fTUFUQ0gJCSggKCB1aW50MzJfdCApIDB4MDEgKQ0KKyNkZWZpbmUgcG9ydFJFU0VUX0NPVU5UX09OX01BVENICSggKCB1aW50MzJfdCApIDB4MDIgKQ0KIA0KIC8qIENvbnN0YW50cyByZXF1aXJlZCB0byBzZXR1cCB0aGUgVklDIGZvciB0aGUgdGljayBJU1IuICovDQotI2RlZmluZSBwb3J0VElNRVJfVklDX0NIQU5ORUwgICAgICAgICAgICAgICggKCB1aW50MzJfdCApIDB4MDAwNCApDQotI2RlZmluZSBwb3J0VElNRVJfVklDX0NIQU5ORUxfQklUICAgICAgICAgICggKCB1aW50MzJfdCApIDB4MDAxMCApDQotI2RlZmluZSBwb3J0VElNRVJfVklDX0VOQUJMRSAgICAgICAgICAgICAgICggKCB1aW50MzJfdCApIDB4MDAyMCApDQorI2RlZmluZSBwb3J0VElNRVJfVklDX0NIQU5ORUwJCSggKCB1aW50MzJfdCApIDB4MDAwNCApDQorI2RlZmluZSBwb3J0VElNRVJfVklDX0NIQU5ORUxfQklUCSggKCB1aW50MzJfdCApIDB4MDAxMCApDQorI2RlZmluZSBwb3J0VElNRVJfVklDX0VOQUJMRQkJKCAoIHVpbnQzMl90ICkgMHgwMDIwICkNCiANCiAvKiBDb25zdGFudHMgcmVxdWlyZWQgdG8gaGFuZGxlIGludGVycnVwdHMuICovDQotI2RlZmluZSBwb3J0VElNRVJfTUFUQ0hfSVNSX0JJVCAgICAgICAgICAgICggKCB1aW50OF90ICkgMHgwMSApDQotI2RlZmluZSBwb3J0Q0xFQVJfVklDX0lOVEVSUlVQVCAgICAgICAgICAgICggKCB1aW50MzJfdCApIDAgKQ0KKyNkZWZpbmUgcG9ydFRJTUVSX01BVENIX0lTUl9CSVQJCSggKCB1aW50OF90ICkgMHgwMSApDQorI2RlZmluZSBwb3J0Q0xFQVJfVklDX0lOVEVSUlVQVAkJKCAoIHVpbnQzMl90ICkgMCApDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGhlIGNvZGUgZ2VuZXJhdGVkIGJ5IHRoZSBLZWlsIGNvbXBpbGVyIGRvZXMgbm90IG1haW50YWluIHNlcGFyYXRlDQotICogc3RhY2sgYW5kIGZyYW1lIHBvaW50ZXJzLiBUaGUgcG9ydEVOVEVSX0NSSVRJQ0FMIG1hY3JvIGNhbm5vdCB0aGVyZWZvcmUNCi0gKiB1c2UgdGhlIHN0YWNrIGFzIHBlciBvdGhlciBwb3J0cy4gIEluc3RlYWQgYSB2YXJpYWJsZSBpcyB1c2VkIHRvIGtlZXANCi0gKiB0cmFjayBvZiB0aGUgY3JpdGljYWwgc2VjdGlvbiBuZXN0aW5nLiAgVGhpcyB2YXJpYWJsZSBoYXMgdG8gYmUgc3RvcmVkDQotICogYXMgcGFydCBvZiB0aGUgdGFzayBjb250ZXh0IGFuZCBtdXN0IGJlIGluaXRpYWxpc2VkIHRvIGEgbm9uIHplcm8gdmFsdWUuICovDQorc3RhY2sgYW5kIGZyYW1lIHBvaW50ZXJzLiBUaGUgcG9ydEVOVEVSX0NSSVRJQ0FMIG1hY3JvIGNhbm5vdCB0aGVyZWZvcmUNCit1c2UgdGhlIHN0YWNrIGFzIHBlciBvdGhlciBwb3J0cy4gIEluc3RlYWQgYSB2YXJpYWJsZSBpcyB1c2VkIHRvIGtlZXANCit0cmFjayBvZiB0aGUgY3JpdGljYWwgc2VjdGlvbiBuZXN0aW5nLiAgVGhpcyB2YXJpYWJsZSBoYXMgdG8gYmUgc3RvcmVkDQorYXMgcGFydCBvZiB0aGUgdGFzayBjb250ZXh0IGFuZCBtdXN0IGJlIGluaXRpYWxpc2VkIHRvIGEgbm9uIHplcm8gdmFsdWUuICovDQogDQotI2RlZmluZSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyAgICAoICggdWludDMyX3QgKSAwICkNCisjZGVmaW5lIHBvcnROT19DUklUSUNBTF9ORVNUSU5HCQkoICggdWludDMyX3QgKSAwICkNCiB2b2xhdGlsZSB1aW50MzJfdCB1bENyaXRpY2FsTmVzdGluZyA9IDk5OTlVTDsNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCkBAIC03MCwyMjIgKzcwLDIyMiBAQAogLyogU2V0dXAgdGhlIHRpbWVyIHRvIGdlbmVyYXRlIHRoZSB0aWNrIGludGVycnVwdHMuICovDQogc3RhdGljIHZvaWQgcHJ2U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApOw0KIA0KLS8qDQotICogVGhlIHNjaGVkdWxlciBjYW4gb25seSBiZSBzdGFydGVkIGZyb20gQVJNIG1vZGUsIHNvDQotICogdlBvcnRTdGFydEZpcnN0U1Rhc2soKSBpcyBkZWZpbmVkIGluIHBvcnRJU1IuYy4NCisvKiANCisgKiBUaGUgc2NoZWR1bGVyIGNhbiBvbmx5IGJlIHN0YXJ0ZWQgZnJvbSBBUk0gbW9kZSwgc28gDQorICogdlBvcnRTdGFydEZpcnN0U1Rhc2soKSBpcyBkZWZpbmVkIGluIHBvcnRJU1IuYy4gDQogICovDQogZXh0ZXJuIF9fYXNtIHZvaWQgdlBvcnRTdGFydEZpcnN0VGFzayggdm9pZCApOw0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KLS8qDQotICogU2VlIGhlYWRlciBmaWxlIGZvciBkZXNjcmlwdGlvbi4NCisvKiANCisgKiBTZWUgaGVhZGVyIGZpbGUgZm9yIGRlc2NyaXB0aW9uLiANCiAgKi8NCi1TdGFja1R5cGVfdCAqIHB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKiBweFRvcE9mU3RhY2ssDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqIHB2UGFyYW1ldGVycyApDQorU3RhY2tUeXBlX3QgKnB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKnB4VG9wT2ZTdGFjaywgVGFza0Z1bmN0aW9uX3QgcHhDb2RlLCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KIHsNCi0gICAgU3RhY2tUeXBlX3QgKiBweE9yaWdpbmFsVE9TOw0KK1N0YWNrVHlwZV90ICpweE9yaWdpbmFsVE9TOw0KIA0KLSAgICAvKiBTZXR1cCB0aGUgaW5pdGlhbCBzdGFjayBvZiB0aGUgdGFzay4gIFRoZSBzdGFjayBpcyBzZXQgZXhhY3RseSBhcw0KLSAgICAgKiBleHBlY3RlZCBieSB0aGUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpIG1hY3JvLg0KLSAgICAgKg0KLSAgICAgKiBSZW1lbWJlciB3aGVyZSB0aGUgdG9wIG9mIHRoZSAoc2ltdWxhdGVkKSBzdGFjayBpcyBiZWZvcmUgd2UgcGxhY2UNCi0gICAgICogYW55dGhpbmcgb24gaXQuICovDQotICAgIHB4T3JpZ2luYWxUT1MgPSBweFRvcE9mU3RhY2s7DQorCS8qIFNldHVwIHRoZSBpbml0aWFsIHN0YWNrIG9mIHRoZSB0YXNrLiAgVGhlIHN0YWNrIGlzIHNldCBleGFjdGx5IGFzIA0KKwlleHBlY3RlZCBieSB0aGUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpIG1hY3JvLg0KIA0KLSAgICAvKiBUbyBlbnN1cmUgYXNzZXJ0cyBpbiB0YXNrcy5jIGRvbid0IGZhaWwsIGFsdGhvdWdoIGluIHRoaXMgY2FzZSB0aGUgYXNzZXJ0DQotICAgICAqIGlzIG5vdCByZWFsbHkgcmVxdWlyZWQuICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwlSZW1lbWJlciB3aGVyZSB0aGUgdG9wIG9mIHRoZSAoc2ltdWxhdGVkKSBzdGFjayBpcyBiZWZvcmUgd2UgcGxhY2UgDQorCWFueXRoaW5nIG9uIGl0LiAqLw0KKwlweE9yaWdpbmFsVE9TID0gcHhUb3BPZlN0YWNrOw0KKwkNCisJLyogVG8gZW5zdXJlIGFzc2VydHMgaW4gdGFza3MuYyBkb24ndCBmYWlsLCBhbHRob3VnaCBpbiB0aGlzIGNhc2UgdGhlIGFzc2VydA0KKwlpcyBub3QgcmVhbGx5IHJlcXVpcmVkLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgLyogRmlyc3Qgb24gdGhlIHN0YWNrIGlzIHRoZSByZXR1cm4gYWRkcmVzcyAtIHdoaWNoIGluIHRoaXMgY2FzZSBpcyB0aGUNCi0gICAgICogc3RhcnQgb2YgdGhlIHRhc2suICBUaGUgb2Zmc2V0IGlzIGFkZGVkIHRvIG1ha2UgdGhlIHJldHVybiBhZGRyZXNzIGFwcGVhcg0KLSAgICAgKiBhcyBpdCB3b3VsZCB3aXRoaW4gYW4gSVJRIElTUi4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBweENvZGUgKyBwb3J0SU5TVFJVQ1RJT05fU0laRTsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIEZpcnN0IG9uIHRoZSBzdGFjayBpcyB0aGUgcmV0dXJuIGFkZHJlc3MgLSB3aGljaCBpbiB0aGlzIGNhc2UgaXMgdGhlDQorCXN0YXJ0IG9mIHRoZSB0YXNrLiAgVGhlIG9mZnNldCBpcyBhZGRlZCB0byBtYWtlIHRoZSByZXR1cm4gYWRkcmVzcyBhcHBlYXINCisJYXMgaXQgd291bGQgd2l0aGluIGFuIElSUSBJU1IuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHhDb2RlICsgcG9ydElOU1RSVUNUSU9OX1NJWkU7CQkNCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhhYWFhYWFhYTsgICAgLyogUjE0ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB4T3JpZ2luYWxUT1M7IC8qIFN0YWNrIHVzZWQgd2hlbiB0YXNrIHN0YXJ0cyBnb2VzIGluIFIxMy4gKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMjEyMTIxMjsgICAgLyogUjEyICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTExMTExMTE7ICAgIC8qIFIxMSAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDEwMTAxMDEwOyAgICAvKiBSMTAgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwOTA5MDkwOTsgICAgLyogUjkgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwODA4MDgwODsgICAgLyogUjggKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNzA3MDcwNzsgICAgLyogUjcgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNjA2MDYwNjsgICAgLyogUjYgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNTA1MDUwNTsgICAgLyogUjUgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNDA0MDQwNDsgICAgLyogUjQgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMzAzMDMwMzsgICAgLyogUjMgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMjAyMDIwMjsgICAgLyogUjIgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMTAxMDEwMTsgICAgLyogUjEgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHZQYXJhbWV0ZXJzOyAgLyogUjAgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhhYWFhYWFhYTsJLyogUjE0ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBweE9yaWdpbmFsVE9TOyAvKiBTdGFjayB1c2VkIHdoZW4gdGFzayBzdGFydHMgZ29lcyBpbiBSMTMuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTIxMjEyMTI7CS8qIFIxMiAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMTExMTExMTsJLyogUjExICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDEwMTAxMDEwOwkvKiBSMTAgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDkwOTA5MDk7CS8qIFI5ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA4MDgwODA4OwkvKiBSOCAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNzA3MDcwNzsJLyogUjcgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDYwNjA2MDY7CS8qIFI2ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA1MDUwNTA1OwkvKiBSNSAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwNDA0MDQwNDsJLyogUjQgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDMwMzAzMDM7CS8qIFIzICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAyMDIwMjAyOwkvKiBSMiAqLw0KKwlweFRvcE9mU3RhY2stLTsJDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMTAxMDEwMTsJLyogUjEgKi8NCisJcHhUb3BPZlN0YWNrLS07CQ0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB2UGFyYW1ldGVyczsgLyogUjAgKi8NCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgIC8qIFRoZSBsYXN0IHRoaW5nIG9udG8gdGhlIHN0YWNrIGlzIHRoZSBzdGF0dXMgcmVnaXN0ZXIsIHdoaWNoIGlzIHNldCBmb3INCi0gICAgICogc3lzdGVtIG1vZGUsIHdpdGggaW50ZXJydXB0cyBlbmFibGVkLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHBvcnRJTklUSUFMX1NQU1I7DQorCS8qIFRoZSBsYXN0IHRoaW5nIG9udG8gdGhlIHN0YWNrIGlzIHRoZSBzdGF0dXMgcmVnaXN0ZXIsIHdoaWNoIGlzIHNldCBmb3INCisJc3lzdGVtIG1vZGUsIHdpdGggaW50ZXJydXB0cyBlbmFibGVkLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHBvcnRJTklUSUFMX1NQU1I7DQogDQotICAgIGlmKCAoICggdWludDMyX3QgKSBweENvZGUgJiAweDAxVUwgKSAhPSAweDAwVUwgKQ0KLSAgICB7DQotICAgICAgICAvKiBXZSB3YW50IHRoZSB0YXNrIHRvIHN0YXJ0IGluIHRodW1iIG1vZGUuICovDQotICAgICAgICAqcHhUb3BPZlN0YWNrIHw9IHBvcnRUSFVNQl9NT0RFX0JJVDsNCi0gICAgfQ0KKwlpZiggKCAoIHVpbnQzMl90ICkgcHhDb2RlICYgMHgwMVVMICkgIT0gMHgwMFVMICkNCisJew0KKwkJLyogV2Ugd2FudCB0aGUgdGFzayB0byBzdGFydCBpbiB0aHVtYiBtb2RlLiAqLw0KKwkJKnB4VG9wT2ZTdGFjayB8PSBwb3J0VEhVTUJfTU9ERV9CSVQ7DQorCX0NCiANCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBUaGUgY29kZSBnZW5lcmF0ZWQgYnkgdGhlIEtlaWwgY29tcGlsZXIgZG9lcyBub3QgbWFpbnRhaW4gc2VwYXJhdGUNCi0gICAgICogc3RhY2sgYW5kIGZyYW1lIHBvaW50ZXJzLiBUaGUgcG9ydEVOVEVSX0NSSVRJQ0FMIG1hY3JvIGNhbm5vdCB0aGVyZWZvcmUNCi0gICAgICogdXNlIHRoZSBzdGFjayBhcyBwZXIgb3RoZXIgcG9ydHMuICBJbnN0ZWFkIGEgdmFyaWFibGUgaXMgdXNlZCB0byBrZWVwDQotICAgICAqIHRyYWNrIG9mIHRoZSBjcml0aWNhbCBzZWN0aW9uIG5lc3RpbmcuICBUaGlzIHZhcmlhYmxlIGhhcyB0byBiZSBzdG9yZWQNCi0gICAgICogYXMgcGFydCBvZiB0aGUgdGFzayBjb250ZXh0IGFuZCBpcyBpbml0aWFsbHkgc2V0IHRvIHplcm8uICovDQotICAgICpweFRvcE9mU3RhY2sgPSBwb3J0Tk9fQ1JJVElDQUxfU0VDVElPTl9ORVNUSU5HOw0KKwkvKiBUaGUgY29kZSBnZW5lcmF0ZWQgYnkgdGhlIEtlaWwgY29tcGlsZXIgZG9lcyBub3QgbWFpbnRhaW4gc2VwYXJhdGUNCisJc3RhY2sgYW5kIGZyYW1lIHBvaW50ZXJzLiBUaGUgcG9ydEVOVEVSX0NSSVRJQ0FMIG1hY3JvIGNhbm5vdCB0aGVyZWZvcmUNCisJdXNlIHRoZSBzdGFjayBhcyBwZXIgb3RoZXIgcG9ydHMuICBJbnN0ZWFkIGEgdmFyaWFibGUgaXMgdXNlZCB0byBrZWVwDQorCXRyYWNrIG9mIHRoZSBjcml0aWNhbCBzZWN0aW9uIG5lc3RpbmcuICBUaGlzIHZhcmlhYmxlIGhhcyB0byBiZSBzdG9yZWQNCisJYXMgcGFydCBvZiB0aGUgdGFzayBjb250ZXh0IGFuZCBpcyBpbml0aWFsbHkgc2V0IHRvIHplcm8uICovDQorCSpweFRvcE9mU3RhY2sgPSBwb3J0Tk9fQ1JJVElDQUxfU0VDVElPTl9ORVNUSU5HOw0KIA0KLSAgICByZXR1cm4gcHhUb3BPZlN0YWNrOw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBCYXNlVHlwZV90IHhQb3J0U3RhcnRTY2hlZHVsZXIoIHZvaWQgKQ0KIHsNCi0gICAgLyogU3RhcnQgdGhlIHRpbWVyIHRoYXQgZ2VuZXJhdGVzIHRoZSB0aWNrIElTUi4gKi8NCi0gICAgcHJ2U2V0dXBUaW1lckludGVycnVwdCgpOw0KKwkvKiBTdGFydCB0aGUgdGltZXIgdGhhdCBnZW5lcmF0ZXMgdGhlIHRpY2sgSVNSLiAqLw0KKwlwcnZTZXR1cFRpbWVySW50ZXJydXB0KCk7DQogDQotICAgIC8qIFN0YXJ0IHRoZSBmaXJzdCB0YXNrLiAgVGhpcyBpcyBkb25lIGZyb20gcG9ydElTUi5jIGFzIEFSTSBtb2RlIG11c3QgYmUNCi0gICAgICogdXNlZC4gKi8NCi0gICAgdlBvcnRTdGFydEZpcnN0VGFzaygpOw0KKwkvKiBTdGFydCB0aGUgZmlyc3QgdGFzay4gIFRoaXMgaXMgZG9uZSBmcm9tIHBvcnRJU1IuYyBhcyBBUk0gbW9kZSBtdXN0IGJlDQorCXVzZWQuICovDQorCXZQb3J0U3RhcnRGaXJzdFRhc2soKTsNCiANCi0gICAgLyogU2hvdWxkIG5vdCBnZXQgaGVyZSEgKi8NCi0gICAgcmV0dXJuIDA7DQorCS8qIFNob3VsZCBub3QgZ2V0IGhlcmUhICovDQorCXJldHVybiAwOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0RW5kU2NoZWR1bGVyKCB2b2lkICkNCiB7DQotICAgIC8qIEl0IGlzIHVubGlrZWx5IHRoYXQgdGhlIEFSTSBwb3J0IHdpbGwgcmVxdWlyZSB0aGlzIGZ1bmN0aW9uIGFzIHRoZXJlDQotICAgICAqIGlzIG5vdGhpbmcgdG8gcmV0dXJuIHRvLiAgSWYgdGhpcyBpcyByZXF1aXJlZCAtIHN0b3AgdGhlIHRpY2sgSVNSIHRoZW4NCi0gICAgICogcmV0dXJuIGJhY2sgdG8gbWFpbi4gKi8NCisJLyogSXQgaXMgdW5saWtlbHkgdGhhdCB0aGUgQVJNIHBvcnQgd2lsbCByZXF1aXJlIHRoaXMgZnVuY3Rpb24gYXMgdGhlcmUNCisJaXMgbm90aGluZyB0byByZXR1cm4gdG8uICBJZiB0aGlzIGlzIHJlcXVpcmVkIC0gc3RvcCB0aGUgdGljayBJU1IgdGhlbg0KKwlyZXR1cm4gYmFjayB0byBtYWluLiAqLw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMA0KIA0KLS8qDQotICogVGhlIGNvb3BlcmF0aXZlIHNjaGVkdWxlciByZXF1aXJlcyBhIG5vcm1hbCBJUlEgc2VydmljZSByb3V0aW5lIHRvDQotICogc2ltcGx5IGluY3JlbWVudCB0aGUgc3lzdGVtIHRpY2suDQotICovDQotICAgIHZvaWQgdk5vblByZWVtcHRpdmVUaWNrKCB2b2lkICkgX19pcnE7DQotICAgIHZvaWQgdk5vblByZWVtcHRpdmVUaWNrKCB2b2lkICkgX19pcnENCi0gICAgew0KLSAgICAgICAgLyogSW5jcmVtZW50IHRoZSB0aWNrIGNvdW50IC0gdGhpcyBtYXkgbWFrZSBhIGRlbGF5aW5nIHRhc2sgcmVhZHkNCi0gICAgICAgICAqIHRvIHJ1biAtIGJ1dCBhIGNvbnRleHQgc3dpdGNoIGlzIG5vdCBwZXJmb3JtZWQuICovDQotICAgICAgICB4VGFza0luY3JlbWVudFRpY2soKTsNCisJLyogDQorCSAqIFRoZSBjb29wZXJhdGl2ZSBzY2hlZHVsZXIgcmVxdWlyZXMgYSBub3JtYWwgSVJRIHNlcnZpY2Ugcm91dGluZSB0byANCisJICogc2ltcGx5IGluY3JlbWVudCB0aGUgc3lzdGVtIHRpY2suIA0KKwkgKi8NCisJdm9pZCB2Tm9uUHJlZW1wdGl2ZVRpY2soIHZvaWQgKSBfX2lycTsNCisJdm9pZCB2Tm9uUHJlZW1wdGl2ZVRpY2soIHZvaWQgKSBfX2lycQ0KKwl7DQorCQkvKiBJbmNyZW1lbnQgdGhlIHRpY2sgY291bnQgLSB0aGlzIG1heSBtYWtlIGEgZGVsYXlpbmcgdGFzayByZWFkeQ0KKwkJdG8gcnVuIC0gYnV0IGEgY29udGV4dCBzd2l0Y2ggaXMgbm90IHBlcmZvcm1lZC4gKi8JCQ0KKwkJeFRhc2tJbmNyZW1lbnRUaWNrKCk7DQogDQotICAgICAgICBUMElSID0gcG9ydFRJTUVSX01BVENIX0lTUl9CSVQ7ICAgICAgICAvKiBDbGVhciB0aGUgdGltZXIgZXZlbnQgKi8NCi0gICAgICAgIFZJQ1ZlY3RBZGRyID0gcG9ydENMRUFSX1ZJQ19JTlRFUlJVUFQ7IC8qIEFja25vd2xlZGdlIHRoZSBJbnRlcnJ1cHQgKi8NCi0gICAgfQ0KKwkJVDBJUiA9IHBvcnRUSU1FUl9NQVRDSF9JU1JfQklUOwkJCQkvKiBDbGVhciB0aGUgdGltZXIgZXZlbnQgKi8NCisJCVZJQ1ZlY3RBZGRyID0gcG9ydENMRUFSX1ZJQ19JTlRFUlJVUFQ7CQkvKiBBY2tub3dsZWRnZSB0aGUgSW50ZXJydXB0ICovDQorCX0NCiANCi0jZWxzZSAvKiBpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAwICovDQorICNlbHNlDQogDQotLyoNCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBUaGUgcHJlZW1wdGl2ZSBzY2hlZHVsZXIgSVNSIGlzIHdyaXR0ZW4gaW4gYXNzZW1ibGVyIGFuZCBjYW4gYmUgZm91bmQNCi0gKiBpbiB0aGUgcG9ydEFTTS5zIGZpbGUuIFRoaXMgd2lsbCBvbmx5IGdldCB1c2VkIGlmIHBvcnRVU0VfUFJFRU1QVElPTg0KLSAqIGlzIHNldCB0byAxIGluIHBvcnRtYWNyby5oDQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICovDQorCS8qDQorCSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKwkgKiBUaGUgcHJlZW1wdGl2ZSBzY2hlZHVsZXIgSVNSIGlzIHdyaXR0ZW4gaW4gYXNzZW1ibGVyIGFuZCBjYW4gYmUgZm91bmQgICANCisJICogaW4gdGhlIHBvcnRBU00ucyBmaWxlLiBUaGlzIHdpbGwgb25seSBnZXQgdXNlZCBpZiBwb3J0VVNFX1BSRUVNUFRJT04NCisJICogaXMgc2V0IHRvIDEgaW4gcG9ydG1hY3JvLmgNCisJICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIA0KKwkgKi8NCiANCi0gICAgdm9pZCB2UHJlZW1wdGl2ZVRpY2soIHZvaWQgKTsNCisJICB2b2lkIHZQcmVlbXB0aXZlVGljayggdm9pZCApOw0KIA0KLSNlbmRpZiAvKiBpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAwICovDQorI2VuZGlmDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogc3RhdGljIHZvaWQgcHJ2U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApDQogew0KLSAgICB1aW50MzJfdCB1bENvbXBhcmVNYXRjaDsNCit1aW50MzJfdCB1bENvbXBhcmVNYXRjaDsNCiANCi0gICAgLyogQSAxbXMgdGljayBkb2VzIG5vdCByZXF1aXJlIHRoZSB1c2Ugb2YgdGhlIHRpbWVyIHByZXNjYWxlLiAgVGhpcyBpcw0KLSAgICAgKiBkZWZhdWx0ZWQgdG8gemVybyBidXQgY2FuIGJlIHVzZWQgaWYgbmVjZXNzYXJ5LiAqLw0KLSAgICBUMFBSID0gcG9ydFBSRVNDQUxFX1ZBTFVFOw0KKwkvKiBBIDFtcyB0aWNrIGRvZXMgbm90IHJlcXVpcmUgdGhlIHVzZSBvZiB0aGUgdGltZXIgcHJlc2NhbGUuICBUaGlzIGlzDQorCWRlZmF1bHRlZCB0byB6ZXJvIGJ1dCBjYW4gYmUgdXNlZCBpZiBuZWNlc3NhcnkuICovDQorCVQwUFIgPSBwb3J0UFJFU0NBTEVfVkFMVUU7DQogDQotICAgIC8qIENhbGN1bGF0ZSB0aGUgbWF0Y2ggdmFsdWUgcmVxdWlyZWQgZm9yIG91ciB3YW50ZWQgdGljayByYXRlLiAqLw0KLSAgICB1bENvbXBhcmVNYXRjaCA9IGNvbmZpZ0NQVV9DTE9DS19IWiAvIGNvbmZpZ1RJQ0tfUkFURV9IWjsNCisJLyogQ2FsY3VsYXRlIHRoZSBtYXRjaCB2YWx1ZSByZXF1aXJlZCBmb3Igb3VyIHdhbnRlZCB0aWNrIHJhdGUuICovDQorCXVsQ29tcGFyZU1hdGNoID0gY29uZmlnQ1BVX0NMT0NLX0haIC8gY29uZmlnVElDS19SQVRFX0haOw0KIA0KLSAgICAvKiBQcm90ZWN0IGFnYWluc3QgZGl2aWRlIGJ5IHplcm8uICBVc2luZyBhbiBpZigpIHN0YXRlbWVudCBzdGlsbCByZXN1bHRzDQotICAgICAqIGluIGEgd2FybmluZyAtIGhlbmNlIHRoZSAjaWYuICovDQotICAgICNpZiBwb3J0UFJFU0NBTEVfVkFMVUUgIT0gMA0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHVsQ29tcGFyZU1hdGNoIC89ICggcG9ydFBSRVNDQUxFX1ZBTFVFICsgMSApOw0KLSAgICAgICAgfQ0KLSAgICAjZW5kaWYNCisJLyogUHJvdGVjdCBhZ2FpbnN0IGRpdmlkZSBieSB6ZXJvLiAgVXNpbmcgYW4gaWYoKSBzdGF0ZW1lbnQgc3RpbGwgcmVzdWx0cw0KKwlpbiBhIHdhcm5pbmcgLSBoZW5jZSB0aGUgI2lmLiAqLw0KKwkjaWYgcG9ydFBSRVNDQUxFX1ZBTFVFICE9IDANCisJew0KKwkJdWxDb21wYXJlTWF0Y2ggLz0gKCBwb3J0UFJFU0NBTEVfVkFMVUUgKyAxICk7DQorCX0NCisJI2VuZGlmDQogDQotICAgIFQwTVIwID0gdWxDb21wYXJlTWF0Y2g7DQorCVQwTVIwID0gdWxDb21wYXJlTWF0Y2g7DQogDQotICAgIC8qIEdlbmVyYXRlIHRpY2sgd2l0aCB0aW1lciAwIGNvbXBhcmUgbWF0Y2guICovDQotICAgIFQwTUNSID0gcG9ydFJFU0VUX0NPVU5UX09OX01BVENIIHwgcG9ydElOVEVSUlVQVF9PTl9NQVRDSDsNCisJLyogR2VuZXJhdGUgdGljayB3aXRoIHRpbWVyIDAgY29tcGFyZSBtYXRjaC4gKi8NCisJVDBNQ1IgPSBwb3J0UkVTRVRfQ09VTlRfT05fTUFUQ0ggfCBwb3J0SU5URVJSVVBUX09OX01BVENIOw0KIA0KLSAgICAvKiBTZXR1cCB0aGUgVklDIGZvciB0aGUgdGltZXIuICovDQotICAgIFZJQ0ludFNlbGVjdCAmPSB+KCBwb3J0VElNRVJfVklDX0NIQU5ORUxfQklUICk7DQotICAgIFZJQ0ludEVuYWJsZSB8PSBwb3J0VElNRVJfVklDX0NIQU5ORUxfQklUOw0KKwkvKiBTZXR1cCB0aGUgVklDIGZvciB0aGUgdGltZXIuICovDQorCVZJQ0ludFNlbGVjdCAmPSB+KCBwb3J0VElNRVJfVklDX0NIQU5ORUxfQklUICk7DQorCVZJQ0ludEVuYWJsZSB8PSBwb3J0VElNRVJfVklDX0NIQU5ORUxfQklUOw0KKwkNCisJLyogVGhlIElTUiBpbnN0YWxsZWQgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSBwcmVlbXB0aXZlIG9yIGNvb3BlcmF0aXZlDQorCXNjaGVkdWxlciBpcyBiZWluZyB1c2VkLiAqLw0KKwkjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMQ0KKwl7CQ0KKwkJVklDVmVjdEFkZHIwID0gKCB1aW50MzJfdCApIHZQcmVlbXB0aXZlVGljazsNCisJfQ0KKwkjZWxzZQ0KKwl7DQorCQlWSUNWZWN0QWRkcjAgPSAoIHVpbnQzMl90ICkgdk5vblByZWVtcHRpdmVUaWNrOw0KKwl9DQorCSNlbmRpZg0KIA0KLSAgICAvKiBUaGUgSVNSIGluc3RhbGxlZCBkZXBlbmRzIG9uIHdoZXRoZXIgdGhlIHByZWVtcHRpdmUgb3IgY29vcGVyYXRpdmUNCi0gICAgICogc2NoZWR1bGVyIGlzIGJlaW5nIHVzZWQuICovDQotICAgICNpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAxDQotICAgICAgICB7DQotICAgICAgICAgICAgVklDVmVjdEFkZHIwID0gKCB1aW50MzJfdCApIHZQcmVlbXB0aXZlVGljazsNCi0gICAgICAgIH0NCi0gICAgI2Vsc2UNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBWSUNWZWN0QWRkcjAgPSAoIHVpbnQzMl90ICkgdk5vblByZWVtcHRpdmVUaWNrOw0KLSAgICAgICAgfQ0KLSAgICAjZW5kaWYNCisJVklDVmVjdENudGwwID0gcG9ydFRJTUVSX1ZJQ19DSEFOTkVMIHwgcG9ydFRJTUVSX1ZJQ19FTkFCTEU7DQogDQotICAgIFZJQ1ZlY3RDbnRsMCA9IHBvcnRUSU1FUl9WSUNfQ0hBTk5FTCB8IHBvcnRUSU1FUl9WSUNfRU5BQkxFOw0KLQ0KLSAgICAvKiBTdGFydCB0aGUgdGltZXIgLSBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkDQotICAgICAqIHNvIGl0IGlzIG9rYXkgdG8gZG8gdGhpcyBoZXJlLiAqLw0KLSAgICBUMFRDUiA9IHBvcnRFTkFCTEVfVElNRVI7DQorCS8qIFN0YXJ0IHRoZSB0aW1lciAtIGludGVycnVwdHMgYXJlIGRpc2FibGVkIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQNCisJc28gaXQgaXMgb2theSB0byBkbyB0aGlzIGhlcmUuICovDQorCVQwVENSID0gcG9ydEVOQUJMRV9USU1FUjsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKQ0KIHsNCi0gICAgLyogRGlzYWJsZSBpbnRlcnJ1cHRzIGFzIHBlciBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgICBfX2Rpc2FibGVfaXJxKCk7DQorCS8qIERpc2FibGUgaW50ZXJydXB0cyBhcyBwZXIgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOyAJCQkJCQkJKi8NCisJX19kaXNhYmxlX2lycSgpOw0KIA0KLSAgICAvKiBOb3cgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgdWxDcml0aWNhbE5lc3RpbmcgY2FuIGJlIGFjY2Vzc2VkDQotICAgICAqIGRpcmVjdGx5LiAgSW5jcmVtZW50IHVsQ3JpdGljYWxOZXN0aW5nIHRvIGtlZXAgYSBjb3VudCBvZiBob3cgbWFueSB0aW1lcw0KLSAgICAgKiBwb3J0RU5URVJfQ1JJVElDQUwoKSBoYXMgYmVlbiBjYWxsZWQuICovDQotICAgIHVsQ3JpdGljYWxOZXN0aW5nKys7DQorCS8qIE5vdyBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB1bENyaXRpY2FsTmVzdGluZyBjYW4gYmUgYWNjZXNzZWQgDQorCWRpcmVjdGx5LiAgSW5jcmVtZW50IHVsQ3JpdGljYWxOZXN0aW5nIHRvIGtlZXAgYSBjb3VudCBvZiBob3cgbWFueSB0aW1lcw0KKwlwb3J0RU5URVJfQ1JJVElDQUwoKSBoYXMgYmVlbiBjYWxsZWQuICovDQorCXVsQ3JpdGljYWxOZXN0aW5nKys7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoIHZvaWQgKQ0KIHsNCi0gICAgaWYoIHVsQ3JpdGljYWxOZXN0aW5nID4gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgKQ0KLSAgICB7DQotICAgICAgICAvKiBEZWNyZW1lbnQgdGhlIG5lc3RpbmcgY291bnQgYXMgd2UgYXJlIGxlYXZpbmcgYSBjcml0aWNhbCBzZWN0aW9uLiAqLw0KLSAgICAgICAgdWxDcml0aWNhbE5lc3RpbmctLTsNCisJaWYoIHVsQ3JpdGljYWxOZXN0aW5nID4gcG9ydE5PX0NSSVRJQ0FMX05FU1RJTkcgKQ0KKwl7DQorCQkvKiBEZWNyZW1lbnQgdGhlIG5lc3RpbmcgY291bnQgYXMgd2UgYXJlIGxlYXZpbmcgYSBjcml0aWNhbCBzZWN0aW9uLiAqLw0KKwkJdWxDcml0aWNhbE5lc3RpbmctLTsNCiANCi0gICAgICAgIC8qIElmIHRoZSBuZXN0aW5nIGxldmVsIGhhcyByZWFjaGVkIHplcm8gdGhlbiBpbnRlcnJ1cHRzIHNob3VsZCBiZQ0KLSAgICAgICAgICogcmUtZW5hYmxlZC4gKi8NCi0gICAgICAgIGlmKCB1bENyaXRpY2FsTmVzdGluZyA9PSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyApDQotICAgICAgICB7DQotICAgICAgICAgICAgLyogRW5hYmxlIGludGVycnVwdHMgYXMgcGVyIHBvcnRFWElUX0NSSVRJQ0FMKCkuICovDQotICAgICAgICAgICAgX19lbmFibGVfaXJxKCk7DQotICAgICAgICB9DQotICAgIH0NCisJCS8qIElmIHRoZSBuZXN0aW5nIGxldmVsIGhhcyByZWFjaGVkIHplcm8gdGhlbiBpbnRlcnJ1cHRzIHNob3VsZCBiZQ0KKwkJcmUtZW5hYmxlZC4gKi8NCisJCWlmKCB1bENyaXRpY2FsTmVzdGluZyA9PSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyApDQorCQl7DQorCQkJLyogRW5hYmxlIGludGVycnVwdHMgYXMgcGVyIHBvcnRFWElUX0NSSVRJQ0FMKCkuICovDQorCQkJX19lbmFibGVfaXJxKCk7DQorCQl9DQorCX0NCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvUlZEUy9BUk03X0xQQzIxeHgvcG9ydG1hY3JvLmggYi9wb3J0YWJsZS9SVkRTL0FSTTdfTFBDMjF4eC9wb3J0bWFjcm8uaAppbmRleCAzYWVkOTgyLi42ZjI0YWM3IDEwMDY0NAotLS0gYS9wb3J0YWJsZS9SVkRTL0FSTTdfTFBDMjF4eC9wb3J0bWFjcm8uaAorKysgYi9wb3J0YWJsZS9SVkRTL0FSTTdfTFBDMjF4eC9wb3J0bWFjcm8uaApAQCAtMjcsMTEgKzI3LDExIEBACiANCiANCiAjaWZuZGVmIFBPUlRNQUNST19IDQotICAgICNkZWZpbmUgUE9SVE1BQ1JPX0gNCisjZGVmaW5lIFBPUlRNQUNST19IDQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgZXh0ZXJuICJDIiB7DQotICAgICNlbmRpZg0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgKiBQb3J0IHNwZWNpZmljIGRlZmluaXRpb25zLg0KQEAgLTQ0LDU3ICs0NCw1NyBAQAogICovDQogDQogLyogVHlwZSBkZWZpbml0aW9ucy4gKi8NCi0gICAgI2RlZmluZSBwb3J0Q0hBUiAgICAgICAgICBjaGFyDQotICAgICNkZWZpbmUgcG9ydEZMT0FUICAgICAgICAgZmxvYXQNCi0gICAgI2RlZmluZSBwb3J0RE9VQkxFICAgICAgICBkb3VibGUNCi0gICAgI2RlZmluZSBwb3J0TE9ORyAgICAgICAgICBsb25nDQotICAgICNkZWZpbmUgcG9ydFNIT1JUICAgICAgICAgc2hvcnQNCi0gICAgI2RlZmluZSBwb3J0U1RBQ0tfVFlQRSAgICB1aW50MzJfdA0KLSAgICAjZGVmaW5lIHBvcnRCQVNFX1RZUEUgICAgIGxvbmcNCisjZGVmaW5lIHBvcnRDSEFSCQljaGFyDQorI2RlZmluZSBwb3J0RkxPQVQJCWZsb2F0DQorI2RlZmluZSBwb3J0RE9VQkxFCQlkb3VibGUNCisjZGVmaW5lIHBvcnRMT05HCQlsb25nDQorI2RlZmluZSBwb3J0U0hPUlQJCXNob3J0DQorI2RlZmluZSBwb3J0U1RBQ0tfVFlQRQl1aW50MzJfdA0KKyNkZWZpbmUgcG9ydEJBU0VfVFlQRQlsb25nDQogDQotICAgIHR5cGVkZWYgcG9ydFNUQUNLX1RZUEUgICBTdGFja1R5cGVfdDsNCi0gICAgdHlwZWRlZiBsb25nICAgICAgICAgICAgIEJhc2VUeXBlX3Q7DQotICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyAgICBVQmFzZVR5cGVfdDsNCit0eXBlZGVmIHBvcnRTVEFDS19UWVBFIFN0YWNrVHlwZV90Ow0KK3R5cGVkZWYgbG9uZyBCYXNlVHlwZV90Ow0KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBVQmFzZVR5cGVfdDsNCiANCiANCi0gICAgI2lmICggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCi0gICAgICAgIHR5cGVkZWYgdWludDE2X3QgICAgIFRpY2tUeXBlX3Q7DQotICAgICAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQotICAgICNlbHNlDQotICAgICAgICB0eXBlZGVmIHVpbnQzMl90ICAgICBUaWNrVHlwZV90Ow0KLSAgICAgICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTA0KLSAgICAjZW5kaWYNCisjaWYoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQorCXR5cGVkZWYgdWludDE2X3QgVGlja1R5cGVfdDsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggVGlja1R5cGVfdCApIDB4ZmZmZg0KKyNlbHNlDQorCXR5cGVkZWYgdWludDMyX3QgVGlja1R5cGVfdDsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTA0KKyNlbmRpZg0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIEhhcmR3YXJlIHNwZWNpZmljcy4gKi8NCi0gICAgI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RIICAgICAgKCAtMSApDQotICAgICNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TICAgICggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQotICAgICNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UICAgIDgNCisjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEgJCQkoIC0xICkNCisjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUwkJCSggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQorI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQJCQk4DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGFzayB1dGlsaXRpZXMuICovDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLSogSVNSIGVudHJ5IGFuZCBleGl0IG1hY3Jvcy4gIFRoZXNlIGFyZSBvbmx5IHJlcXVpcmVkIGlmIGEgdGFzayBzd2l0Y2gNCi0qIGlzIHJlcXVpcmVkIGZyb20gYW4gSVNSLg0KLSotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisgKiBJU1IgZW50cnkgYW5kIGV4aXQgbWFjcm9zLiAgVGhlc2UgYXJlIG9ubHkgcmVxdWlyZWQgaWYgYSB0YXNrIHN3aXRjaA0KKyAqIGlzIHJlcXVpcmVkIGZyb20gYW4gSVNSLg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogSWYgYSBzd2l0Y2ggaXMgcmVxdWlyZWQgdGhlbiB3ZSBqdXN0IG5lZWQgdG8gY2FsbCAqLw0KIC8qIHZUYXNrU3dpdGNoQ29udGV4dCgpIGFzIHRoZSBjb250ZXh0IGhhcyBhbHJlYWR5IGJlZW4gKi8NCiAvKiBzYXZlZC4gKi8NCiANCi0gICAgI2RlZmluZSBwb3J0RVhJVF9TV0lUQ0hJTkdfSVNSKCBTd2l0Y2hSZXF1aXJlZCApIFwNCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGV4dGVybiB2b2lkIHZUYXNrU3dpdGNoQ29udGV4dCggdm9pZCApOyAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGlmKCBTd2l0Y2hSZXF1aXJlZCApICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICB2VGFza1N3aXRjaENvbnRleHQoKTsgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisjZGVmaW5lIHBvcnRFWElUX1NXSVRDSElOR19JU1IoU3dpdGNoUmVxdWlyZWQpCQkJCSBcDQorewkJCQkJCQkJCQkJCQkJCSBcDQorZXh0ZXJuIHZvaWQgdlRhc2tTd2l0Y2hDb250ZXh0KHZvaWQpOwkJCQkJCSBcDQorCQkJCQkJCQkJCQkJCQkJIFwNCisJCWlmKFN3aXRjaFJlcXVpcmVkKQkJCQkJCQkJCSBcDQorCQl7CQkJCQkJCQkJCQkJCSBcDQorCQkJdlRhc2tTd2l0Y2hDb250ZXh0KCk7CQkJCQkJCSBcDQorCQl9CQkJCQkJCQkJCQkJCSBcDQorfQkJCQkJCQkJCQkJCQkJCSBcDQogDQotICAgIGV4dGVybiB2b2lkIHZQb3J0WWllbGQoIHZvaWQgKTsNCi0gICAgI2RlZmluZSBwb3J0WUlFTEQoKSAgICB2UG9ydFlpZWxkKCkNCitleHRlcm4gdm9pZCB2UG9ydFlpZWxkKCB2b2lkICk7DQorI2RlZmluZSBwb3J0WUlFTEQoKSB2UG9ydFlpZWxkKCkNCiANCiANCiAvKiBDcml0aWNhbCBzZWN0aW9uIG1hbmFnZW1lbnQuICovDQpAQCAtMTA3LDM5ICsxMDcsNDAgQEAKICAqIHRha2UgY2FyZSBvZiB0aGF0IGZvciB1cy4NCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAqLw0KLSAgICAjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAgICBfX2Rpc2FibGVfaXJxKCkNCi0gICAgI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKSAgICAgX19lbmFibGVfaXJxKCkNCisjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKQlfX2Rpc2FibGVfaXJxKCkNCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpCQlfX2VuYWJsZV9pcnEoKQ0KIA0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0qIENyaXRpY2FsIHNlY3Rpb24gY29udHJvbA0KLSoNCi0qIFRoZSBjb2RlIGdlbmVyYXRlZCBieSB0aGUgS2VpbCBjb21waWxlciBkb2VzIG5vdCBtYWludGFpbiBzZXBhcmF0ZQ0KLSogc3RhY2sgYW5kIGZyYW1lIHBvaW50ZXJzLiBUaGUgcG9ydEVOVEVSX0NSSVRJQ0FMIG1hY3JvIGNhbm5vdCB0aGVyZWZvcmUNCi0qIHVzZSB0aGUgc3RhY2sgYXMgcGVyIG90aGVyIHBvcnRzLiAgSW5zdGVhZCBhIHZhcmlhYmxlIGlzIHVzZWQgdG8ga2VlcA0KLSogdHJhY2sgb2YgdGhlIGNyaXRpY2FsIHNlY3Rpb24gbmVzdGluZy4gIFRoaXMgbmVjZXNzaXRhdGVzIHRoZSB1c2Ugb2YgYQ0KLSogZnVuY3Rpb24gaW4gcGxhY2Ugb2YgdGhlIG1hY3JvLg0KLSotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisgKiBDcml0aWNhbCBzZWN0aW9uIGNvbnRyb2wNCisgKg0KKyAqIFRoZSBjb2RlIGdlbmVyYXRlZCBieSB0aGUgS2VpbCBjb21waWxlciBkb2VzIG5vdCBtYWludGFpbiBzZXBhcmF0ZQ0KKyAqIHN0YWNrIGFuZCBmcmFtZSBwb2ludGVycy4gVGhlIHBvcnRFTlRFUl9DUklUSUNBTCBtYWNybyBjYW5ub3QgdGhlcmVmb3JlDQorICogdXNlIHRoZSBzdGFjayBhcyBwZXIgb3RoZXIgcG9ydHMuICBJbnN0ZWFkIGEgdmFyaWFibGUgaXMgdXNlZCB0byBrZWVwDQorICogdHJhY2sgb2YgdGhlIGNyaXRpY2FsIHNlY3Rpb24gbmVzdGluZy4gIFRoaXMgbmVjZXNzaXRhdGVzIHRoZSB1c2Ugb2YgYQ0KKyAqIGZ1bmN0aW9uIGluIHBsYWNlIG9mIHRoZSBtYWNyby4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KLSAgICBleHRlcm4gdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKTsNCi0gICAgZXh0ZXJuIHZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApOw0KIA0KLSAgICAjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpICAgIHZQb3J0RW50ZXJDcml0aWNhbCgpOw0KLSAgICAjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkgICAgIHZQb3J0RXhpdENyaXRpY2FsKCk7DQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKQkJdlBvcnRFbnRlckNyaXRpY2FsKCk7DQorI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpCQkJdlBvcnRFeGl0Q3JpdGljYWwoKTsNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBDb21waWxlciBzcGVjaWZpY3MuICovDQotICAgICNkZWZpbmUgaW5saW5lDQotICAgICNkZWZpbmUgcmVnaXN0ZXINCi0gICAgI2RlZmluZSBwb3J0Tk9QKCkgICAgX19hc217IE5PUCB9DQorI2RlZmluZSBpbmxpbmUNCisjZGVmaW5lIHJlZ2lzdGVyDQorI2RlZmluZSBwb3J0Tk9QKCkJX19hc217IE5PUCB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQotICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KLSAgICAjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgICAgICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApCXZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkJdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgfQ0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQogDQogI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvUlZEUy9BUk1fQ0E5L3BvcnQuYyBiL3BvcnRhYmxlL1JWRFMvQVJNX0NBOS9wb3J0LmMKaW5kZXggZTdjNDE4ZC4uMjUwZjMxMyAxMDA2NDQKLS0tIGEvcG9ydGFibGUvUlZEUy9BUk1fQ0E5L3BvcnQuYworKysgYi9wb3J0YWJsZS9SVkRTL0FSTV9DQTkvcG9ydC5jCkBAIC0zMywxMjQgKzMzLDEyNCBAQAogI2luY2x1ZGUgInRhc2suaCINCiANCiAjaWZuZGVmIGNvbmZpZ0lOVEVSUlVQVF9DT05UUk9MTEVSX0JBU0VfQUREUkVTUw0KLSAgICAjZXJyb3IgY29uZmlnSU5URVJSVVBUX0NPTlRST0xMRVJfQkFTRV9BRERSRVNTIG11c3QgYmUgZGVmaW5lZC4gIFNlZSBodHRwOiAvKnd3dy5mcmVlcnRvcy5vcmcvVXNpbmctRnJlZVJUT1Mtb24tQ29ydGV4LUEtRW1iZWRkZWQtUHJvY2Vzc29ycy5odG1sICovDQorCSNlcnJvciBjb25maWdJTlRFUlJVUFRfQ09OVFJPTExFUl9CQVNFX0FERFJFU1MgbXVzdCBiZSBkZWZpbmVkLiAgU2VlIGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL1VzaW5nLUZyZWVSVE9TLW9uLUNvcnRleC1BLUVtYmVkZGVkLVByb2Nlc3NvcnMuaHRtbA0KICNlbmRpZg0KIA0KICNpZm5kZWYgY29uZmlnSU5URVJSVVBUX0NPTlRST0xMRVJfQ1BVX0lOVEVSRkFDRV9PRkZTRVQNCi0gICAgI2Vycm9yIGNvbmZpZ0lOVEVSUlVQVF9DT05UUk9MTEVSX0NQVV9JTlRFUkZBQ0VfT0ZGU0VUIG11c3QgYmUgZGVmaW5lZC4gIFNlZSBodHRwOiAvKnd3dy5mcmVlcnRvcy5vcmcvVXNpbmctRnJlZVJUT1Mtb24tQ29ydGV4LUEtRW1iZWRkZWQtUHJvY2Vzc29ycy5odG1sICovDQorCSNlcnJvciBjb25maWdJTlRFUlJVUFRfQ09OVFJPTExFUl9DUFVfSU5URVJGQUNFX09GRlNFVCBtdXN0IGJlIGRlZmluZWQuICBTZWUgaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvVXNpbmctRnJlZVJUT1Mtb24tQ29ydGV4LUEtRW1iZWRkZWQtUHJvY2Vzc29ycy5odG1sDQogI2VuZGlmDQogDQogI2lmbmRlZiBjb25maWdVTklRVUVfSU5URVJSVVBUX1BSSU9SSVRJRVMNCi0gICAgI2Vycm9yIGNvbmZpZ1VOSVFVRV9JTlRFUlJVUFRfUFJJT1JJVElFUyBtdXN0IGJlIGRlZmluZWQuICBTZWUgaHR0cDogLyp3d3cuZnJlZXJ0b3Mub3JnL1VzaW5nLUZyZWVSVE9TLW9uLUNvcnRleC1BLUVtYmVkZGVkLVByb2Nlc3NvcnMuaHRtbCAqLw0KKwkjZXJyb3IgY29uZmlnVU5JUVVFX0lOVEVSUlVQVF9QUklPUklUSUVTIG11c3QgYmUgZGVmaW5lZC4gIFNlZSBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9Vc2luZy1GcmVlUlRPUy1vbi1Db3J0ZXgtQS1FbWJlZGRlZC1Qcm9jZXNzb3JzLmh0bWwNCiAjZW5kaWYNCiANCiAjaWZuZGVmIGNvbmZpZ1NFVFVQX1RJQ0tfSU5URVJSVVBUDQotICAgICNlcnJvciBjb25maWdTRVRVUF9USUNLX0lOVEVSUlVQVCgpIG11c3QgYmUgZGVmaW5lZC4gIFNlZSBodHRwOiAvKnd3dy5mcmVlcnRvcy5vcmcvVXNpbmctRnJlZVJUT1Mtb24tQ29ydGV4LUEtRW1iZWRkZWQtUHJvY2Vzc29ycy5odG1sICovDQorCSNlcnJvciBjb25maWdTRVRVUF9USUNLX0lOVEVSUlVQVCgpIG11c3QgYmUgZGVmaW5lZC4gIFNlZSBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9Vc2luZy1GcmVlUlRPUy1vbi1Db3J0ZXgtQS1FbWJlZGRlZC1Qcm9jZXNzb3JzLmh0bWwNCiAjZW5kaWYgLyogY29uZmlnU0VUVVBfVElDS19JTlRFUlJVUFQgKi8NCiANCiAjaWZuZGVmIGNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkNCi0gICAgI2Vycm9yIGNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgbXVzdCBiZSBkZWZpbmVkLiAgU2VlIGh0dHA6IC8qd3d3LmZyZWVydG9zLm9yZy9Vc2luZy1GcmVlUlRPUy1vbi1Db3J0ZXgtQS1FbWJlZGRlZC1Qcm9jZXNzb3JzLmh0bWwgKi8NCisJI2Vycm9yIGNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgbXVzdCBiZSBkZWZpbmVkLiAgU2VlIGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL1VzaW5nLUZyZWVSVE9TLW9uLUNvcnRleC1BLUVtYmVkZGVkLVByb2Nlc3NvcnMuaHRtbA0KICNlbmRpZg0KIA0KICNpZiBjb25maWdNQVhfQVBJX0NBTExfSU5URVJSVVBUX1BSSU9SSVRZID09IDANCi0gICAgI2Vycm9yIGNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgbXVzdCBub3QgYmUgc2V0IHRvIDANCisJI2Vycm9yIGNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgbXVzdCBub3QgYmUgc2V0IHRvIDANCiAjZW5kaWYNCiANCiAjaWYgY29uZmlnTUFYX0FQSV9DQUxMX0lOVEVSUlVQVF9QUklPUklUWSA+IGNvbmZpZ1VOSVFVRV9JTlRFUlJVUFRfUFJJT1JJVElFUw0KLSAgICAjZXJyb3IgY29uZmlnTUFYX0FQSV9DQUxMX0lOVEVSUlVQVF9QUklPUklUWSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBjb25maWdVTklRVUVfSU5URVJSVVBUX1BSSU9SSVRJRVMgYXMgdGhlIGxvd2VyIHRoZSBudW1lcmljIHByaW9yaXR5IHZhbHVlIHRoZSBoaWdoZXIgdGhlIGxvZ2ljYWwgaW50ZXJydXB0IHByaW9yaXR5DQorCSNlcnJvciBjb25maWdNQVhfQVBJX0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGNvbmZpZ1VOSVFVRV9JTlRFUlJVUFRfUFJJT1JJVElFUyBhcyB0aGUgbG93ZXIgdGhlIG51bWVyaWMgcHJpb3JpdHkgdmFsdWUgdGhlIGhpZ2hlciB0aGUgbG9naWNhbCBpbnRlcnJ1cHQgcHJpb3JpdHkNCiAjZW5kaWYNCiANCiAjaWYgY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OID09IDENCi0gICAgLyogQ2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24uICovDQotICAgICNpZiAoIGNvbmZpZ01BWF9QUklPUklUSUVTID4gMzIgKQ0KLSAgICAgICAgI2Vycm9yIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiBjYW4gb25seSBiZSBzZXQgdG8gMSB3aGVuIGNvbmZpZ01BWF9QUklPUklUSUVTIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAzMi4gIEl0IGlzIHZlcnkgcmFyZSB0aGF0IGEgc3lzdGVtIHJlcXVpcmVzIG1vcmUgdGhhbiAxMCB0byAxNSBkaWZmZXJlbmNlIHByaW9yaXRpZXMgYXMgdGFza3MgdGhhdCBzaGFyZSBhIHByaW9yaXR5IHdpbGwgdGltZSBzbGljZS4NCi0gICAgI2VuZGlmDQorCS8qIENoZWNrIHRoZSBjb25maWd1cmF0aW9uLiAqLw0KKwkjaWYoIGNvbmZpZ01BWF9QUklPUklUSUVTID4gMzIgKQ0KKwkJI2Vycm9yIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiBjYW4gb25seSBiZSBzZXQgdG8gMSB3aGVuIGNvbmZpZ01BWF9QUklPUklUSUVTIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAzMi4gIEl0IGlzIHZlcnkgcmFyZSB0aGF0IGEgc3lzdGVtIHJlcXVpcmVzIG1vcmUgdGhhbiAxMCB0byAxNSBkaWZmZXJlbmNlIHByaW9yaXRpZXMgYXMgdGFza3MgdGhhdCBzaGFyZSBhIHByaW9yaXR5IHdpbGwgdGltZSBzbGljZS4NCisJI2VuZGlmDQogI2VuZGlmIC8qIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiAqLw0KIA0KIC8qIEluIGNhc2Ugc2VjdXJpdHkgZXh0ZW5zaW9ucyBhcmUgaW1wbGVtZW50ZWQuICovDQogI2lmIGNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgPD0gKCBjb25maWdVTklRVUVfSU5URVJSVVBUX1BSSU9SSVRJRVMgLyAyICkNCi0gICAgI2Vycm9yIGNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgbXVzdCBiZSBncmVhdGVyIHRoYW4gKCBjb25maWdVTklRVUVfSU5URVJSVVBUX1BSSU9SSVRJRVMgLyAyICkNCisJI2Vycm9yIGNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgbXVzdCBiZSBncmVhdGVyIHRoYW4gKCBjb25maWdVTklRVUVfSU5URVJSVVBUX1BSSU9SSVRJRVMgLyAyICkNCiAjZW5kaWYNCiANCiAjaWZuZGVmIGNvbmZpZ0NMRUFSX1RJQ0tfSU5URVJSVVBUDQotICAgICNkZWZpbmUgY29uZmlnQ0xFQVJfVElDS19JTlRFUlJVUFQoKQ0KKwkjZGVmaW5lIGNvbmZpZ0NMRUFSX1RJQ0tfSU5URVJSVVBUKCkNCiAjZW5kaWYNCiANCiAvKiBUaGUgbnVtYmVyIG9mIGJpdHMgdG8gc2hpZnQgZm9yIGFuIGludGVycnVwdCBwcmlvcml0eSBpcyBkZXBlbmRlbnQgb24gdGhlDQotICogbnVtYmVyIG9mIGJpdHMgaW1wbGVtZW50ZWQgYnkgdGhlIGludGVycnVwdCBjb250cm9sbGVyLiAqLw0KK251bWJlciBvZiBiaXRzIGltcGxlbWVudGVkIGJ5IHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlci4gKi8NCiAjaWYgY29uZmlnVU5JUVVFX0lOVEVSUlVQVF9QUklPUklUSUVTID09IDE2DQotICAgICNkZWZpbmUgcG9ydFBSSU9SSVRZX1NISUZUICAgICAgICAgICAgNA0KLSAgICAjZGVmaW5lIHBvcnRNQVhfQklOQVJZX1BPSU5UX1ZBTFVFICAgIDMNCisJI2RlZmluZSBwb3J0UFJJT1JJVFlfU0hJRlQgNA0KKwkjZGVmaW5lIHBvcnRNQVhfQklOQVJZX1BPSU5UX1ZBTFVFCTMNCiAjZWxpZiBjb25maWdVTklRVUVfSU5URVJSVVBUX1BSSU9SSVRJRVMgPT0gMzINCi0gICAgI2RlZmluZSBwb3J0UFJJT1JJVFlfU0hJRlQgICAgICAgICAgICAzDQotICAgICNkZWZpbmUgcG9ydE1BWF9CSU5BUllfUE9JTlRfVkFMVUUgICAgMg0KKwkjZGVmaW5lIHBvcnRQUklPUklUWV9TSElGVCAzDQorCSNkZWZpbmUgcG9ydE1BWF9CSU5BUllfUE9JTlRfVkFMVUUJMg0KICNlbGlmIGNvbmZpZ1VOSVFVRV9JTlRFUlJVUFRfUFJJT1JJVElFUyA9PSA2NA0KLSAgICAjZGVmaW5lIHBvcnRQUklPUklUWV9TSElGVCAgICAgICAgICAgIDINCi0gICAgI2RlZmluZSBwb3J0TUFYX0JJTkFSWV9QT0lOVF9WQUxVRSAgICAxDQorCSNkZWZpbmUgcG9ydFBSSU9SSVRZX1NISUZUIDINCisJI2RlZmluZSBwb3J0TUFYX0JJTkFSWV9QT0lOVF9WQUxVRQkxDQogI2VsaWYgY29uZmlnVU5JUVVFX0lOVEVSUlVQVF9QUklPUklUSUVTID09IDEyOA0KLSAgICAjZGVmaW5lIHBvcnRQUklPUklUWV9TSElGVCAgICAgICAgICAgIDENCi0gICAgI2RlZmluZSBwb3J0TUFYX0JJTkFSWV9QT0lOVF9WQUxVRSAgICAwDQorCSNkZWZpbmUgcG9ydFBSSU9SSVRZX1NISUZUIDENCisJI2RlZmluZSBwb3J0TUFYX0JJTkFSWV9QT0lOVF9WQUxVRQkwDQogI2VsaWYgY29uZmlnVU5JUVVFX0lOVEVSUlVQVF9QUklPUklUSUVTID09IDI1Ng0KLSAgICAjZGVmaW5lIHBvcnRQUklPUklUWV9TSElGVCAgICAgICAgICAgIDANCi0gICAgI2RlZmluZSBwb3J0TUFYX0JJTkFSWV9QT0lOVF9WQUxVRSAgICAwDQotI2Vsc2UgLyogaWYgY29uZmlnVU5JUVVFX0lOVEVSUlVQVF9QUklPUklUSUVTID09IDE2ICovDQotICAgICNlcnJvciBJbnZhbGlkIGNvbmZpZ1VOSVFVRV9JTlRFUlJVUFRfUFJJT1JJVElFUyBzZXR0aW5nLiAgY29uZmlnVU5JUVVFX0lOVEVSUlVQVF9QUklPUklUSUVTIG11c3QgYmUgc2V0IHRvIHRoZSBudW1iZXIgb2YgdW5pcXVlIHByaW9yaXRpZXMgaW1wbGVtZW50ZWQgYnkgdGhlIHRhcmdldCBoYXJkd2FyZQ0KLSNlbmRpZiAvKiBpZiBjb25maWdVTklRVUVfSU5URVJSVVBUX1BSSU9SSVRJRVMgPT0gMTYgKi8NCisJI2RlZmluZSBwb3J0UFJJT1JJVFlfU0hJRlQgMA0KKwkjZGVmaW5lIHBvcnRNQVhfQklOQVJZX1BPSU5UX1ZBTFVFCTANCisjZWxzZQ0KKwkjZXJyb3IgSW52YWxpZCBjb25maWdVTklRVUVfSU5URVJSVVBUX1BSSU9SSVRJRVMgc2V0dGluZy4gIGNvbmZpZ1VOSVFVRV9JTlRFUlJVUFRfUFJJT1JJVElFUyBtdXN0IGJlIHNldCB0byB0aGUgbnVtYmVyIG9mIHVuaXF1ZSBwcmlvcml0aWVzIGltcGxlbWVudGVkIGJ5IHRoZSB0YXJnZXQgaGFyZHdhcmUNCisjZW5kaWYNCiANCiAvKiBBIGNyaXRpY2FsIHNlY3Rpb24gaXMgZXhpdGVkIHdoZW4gdGhlIGNyaXRpY2FsIHNlY3Rpb24gbmVzdGluZyBjb3VudCByZWFjaGVzDQotICogdGhpcyB2YWx1ZS4gKi8NCi0jZGVmaW5lIHBvcnROT19DUklUSUNBTF9ORVNUSU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVpbnQzMl90ICkgMCApDQordGhpcyB2YWx1ZS4gKi8NCisjZGVmaW5lIHBvcnROT19DUklUSUNBTF9ORVNUSU5HCQkJKCAoIHVpbnQzMl90ICkgMCApDQogDQogLyogSW4gYWxsIEdJQ3MgMjU1IGNhbiBiZSB3cml0dGVuIHRvIHRoZSBwcmlvcml0eSBtYXNrIHJlZ2lzdGVyIHRvIHVubWFzayBhbGwNCi0gKiAoYnV0IHRoZSBsb3dlc3QpIGludGVycnVwdCBwcmlvcml0eS4gKi8NCi0jZGVmaW5lIHBvcnRVTk1BU0tfVkFMVUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAweEZGVUwgKQ0KKyhidXQgdGhlIGxvd2VzdCkgaW50ZXJydXB0IHByaW9yaXR5LiAqLw0KKyNkZWZpbmUgcG9ydFVOTUFTS19WQUxVRQkJCQkoIDB4RkZVTCApDQogDQogLyogVGFza3MgYXJlIG5vdCBjcmVhdGVkIHdpdGggYSBmbG9hdGluZyBwb2ludCBjb250ZXh0LCBidXQgY2FuIGJlIGdpdmVuIGENCi0gKiBmbG9hdGluZyBwb2ludCBjb250ZXh0IGFmdGVyIHRoZXkgaGF2ZSBiZWVuIGNyZWF0ZWQuICBBIHZhcmlhYmxlIGlzIHN0b3JlZCBhcw0KLSAqIHBhcnQgb2YgdGhlIHRhc2tzIGNvbnRleHQgdGhhdCBob2xkcyBwb3J0Tk9fRkxPQVRJTkdfUE9JTlRfQ09OVEVYVCBpZiB0aGUgdGFzaw0KLSAqIGRvZXMgbm90IGhhdmUgYW4gRlBVIGNvbnRleHQsIG9yIGFueSBvdGhlciB2YWx1ZSBpZiB0aGUgdGFzayBkb2VzIGhhdmUgYW4gRlBVDQotICogY29udGV4dC4gKi8NCi0jZGVmaW5lIHBvcnROT19GTE9BVElOR19QT0lOVF9DT05URVhUICAgICAgICAgICAgICAgICAgICAgICAgKCAoIFN0YWNrVHlwZV90ICkgMCApDQorZmxvYXRpbmcgcG9pbnQgY29udGV4dCBhZnRlciB0aGV5IGhhdmUgYmVlbiBjcmVhdGVkLiAgQSB2YXJpYWJsZSBpcyBzdG9yZWQgYXMNCitwYXJ0IG9mIHRoZSB0YXNrcyBjb250ZXh0IHRoYXQgaG9sZHMgcG9ydE5PX0ZMT0FUSU5HX1BPSU5UX0NPTlRFWFQgaWYgdGhlIHRhc2sNCitkb2VzIG5vdCBoYXZlIGFuIEZQVSBjb250ZXh0LCBvciBhbnkgb3RoZXIgdmFsdWUgaWYgdGhlIHRhc2sgZG9lcyBoYXZlIGFuIEZQVQ0KK2NvbnRleHQuICovDQorI2RlZmluZSBwb3J0Tk9fRkxPQVRJTkdfUE9JTlRfQ09OVEVYVAkoICggU3RhY2tUeXBlX3QgKSAwICkNCiANCiAvKiBJbnRlcnJ1cHQgY29udHJvbGxlciBhY2Nlc3MgYWRkcmVzc2VzLiAqLw0KLSNkZWZpbmUgcG9ydElDQ1BNUl9QUklPUklUWV9NQVNLX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAoIDB4MDQgKQ0KLSNkZWZpbmUgcG9ydElDQ0lBUl9JTlRFUlJVUFRfQUNLTk9XTEVER0VfT0ZGU0VUICAgICAgICAgICAgICAoIDB4MEMgKQ0KLSNkZWZpbmUgcG9ydElDQ0VPSVJfRU5EX09GX0lOVEVSUlVQVF9PRkZTRVQgICAgICAgICAgICAgICAgICAoIDB4MTAgKQ0KLSNkZWZpbmUgcG9ydElDQ0JQUl9CSU5BUllfUE9JTlRfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAoIDB4MDggKQ0KLSNkZWZpbmUgcG9ydElDQ1JQUl9SVU5OSU5HX1BSSU9SSVRZX09GRlNFVCAgICAgICAgICAgICAgICAgICAoIDB4MTQgKQ0KLSNkZWZpbmUgcG9ydElOVEVSUlVQVF9DT05UUk9MTEVSX0NQVV9JTlRFUkZBQ0VfQUREUkVTUyAgICAgICAoIGNvbmZpZ0lOVEVSUlVQVF9DT05UUk9MTEVSX0JBU0VfQUREUkVTUyArIGNvbmZpZ0lOVEVSUlVQVF9DT05UUk9MTEVSX0NQVV9JTlRFUkZBQ0VfT0ZGU0VUICkNCi0jZGVmaW5lIHBvcnRJQ0NQTVJfUFJJT1JJVFlfTUFTS19SRUdJU1RFUiAgICAgICAgICAgICAgICAgICAgKCAqKCAoIHZvbGF0aWxlIHVpbnQzMl90ICogKSAoIHBvcnRJTlRFUlJVUFRfQ09OVFJPTExFUl9DUFVfSU5URVJGQUNFX0FERFJFU1MgKyBwb3J0SUNDUE1SX1BSSU9SSVRZX01BU0tfT0ZGU0VUICkgKSApDQotI2RlZmluZSBwb3J0SUNDSUFSX0lOVEVSUlVQVF9BQ0tOT1dMRURHRV9SRUdJU1RFUl9BRERSRVNTICAgICggcG9ydElOVEVSUlVQVF9DT05UUk9MTEVSX0NQVV9JTlRFUkZBQ0VfQUREUkVTUyArIHBvcnRJQ0NJQVJfSU5URVJSVVBUX0FDS05PV0xFREdFX09GRlNFVCApDQotI2RlZmluZSBwb3J0SUNDRU9JUl9FTkRfT0ZfSU5URVJSVVBUX1JFR0lTVEVSX0FERFJFU1MgICAgICAgICggcG9ydElOVEVSUlVQVF9DT05UUk9MTEVSX0NQVV9JTlRFUkZBQ0VfQUREUkVTUyArIHBvcnRJQ0NFT0lSX0VORF9PRl9JTlRFUlJVUFRfT0ZGU0VUICkNCi0jZGVmaW5lIHBvcnRJQ0NQTVJfUFJJT1JJVFlfTUFTS19SRUdJU1RFUl9BRERSRVNTICAgICAgICAgICAgKCBwb3J0SU5URVJSVVBUX0NPTlRST0xMRVJfQ1BVX0lOVEVSRkFDRV9BRERSRVNTICsgcG9ydElDQ1BNUl9QUklPUklUWV9NQVNLX09GRlNFVCApDQotI2RlZmluZSBwb3J0SUNDQlBSX0JJTkFSWV9QT0lOVF9SRUdJU1RFUiAgICAgICAgICAgICAgICAgICAgICggKiggKCBjb25zdCB2b2xhdGlsZSB1aW50MzJfdCAqICkgKCBwb3J0SU5URVJSVVBUX0NPTlRST0xMRVJfQ1BVX0lOVEVSRkFDRV9BRERSRVNTICsgcG9ydElDQ0JQUl9CSU5BUllfUE9JTlRfT0ZGU0VUICkgKSApDQotI2RlZmluZSBwb3J0SUNDUlBSX1JVTk5JTkdfUFJJT1JJVFlfUkVHSVNURVIgICAgICAgICAgICAgICAgICggKiggKCBjb25zdCB2b2xhdGlsZSB1aW50MzJfdCAqICkgKCBwb3J0SU5URVJSVVBUX0NPTlRST0xMRVJfQ1BVX0lOVEVSRkFDRV9BRERSRVNTICsgcG9ydElDQ1JQUl9SVU5OSU5HX1BSSU9SSVRZX09GRlNFVCApICkgKQ0KKyNkZWZpbmUgcG9ydElDQ1BNUl9QUklPUklUWV9NQVNLX09GRlNFVCAgCQkoIDB4MDQgKQ0KKyNkZWZpbmUgcG9ydElDQ0lBUl9JTlRFUlJVUFRfQUNLTk9XTEVER0VfT0ZGU0VUICggMHgwQyApDQorI2RlZmluZSBwb3J0SUNDRU9JUl9FTkRfT0ZfSU5URVJSVVBUX09GRlNFVCAJKCAweDEwICkNCisjZGVmaW5lIHBvcnRJQ0NCUFJfQklOQVJZX1BPSU5UX09GRlNFVAkJCSggMHgwOCApDQorI2RlZmluZSBwb3J0SUNDUlBSX1JVTk5JTkdfUFJJT1JJVFlfT0ZGU0VUCQkoIDB4MTQgKQ0KKyNkZWZpbmUgcG9ydElOVEVSUlVQVF9DT05UUk9MTEVSX0NQVV9JTlRFUkZBQ0VfQUREUkVTUyAJCSggY29uZmlnSU5URVJSVVBUX0NPTlRST0xMRVJfQkFTRV9BRERSRVNTICsgY29uZmlnSU5URVJSVVBUX0NPTlRST0xMRVJfQ1BVX0lOVEVSRkFDRV9PRkZTRVQgKQ0KKyNkZWZpbmUgcG9ydElDQ1BNUl9QUklPUklUWV9NQVNLX1JFR0lTVEVSIAkJCQkJKCAqKCAoIHZvbGF0aWxlIHVpbnQzMl90ICogKSAoIHBvcnRJTlRFUlJVUFRfQ09OVFJPTExFUl9DUFVfSU5URVJGQUNFX0FERFJFU1MgKyBwb3J0SUNDUE1SX1BSSU9SSVRZX01BU0tfT0ZGU0VUICkgKSApDQorI2RlZmluZSBwb3J0SUNDSUFSX0lOVEVSUlVQVF9BQ0tOT1dMRURHRV9SRUdJU1RFUl9BRERSRVNTIAkoIHBvcnRJTlRFUlJVUFRfQ09OVFJPTExFUl9DUFVfSU5URVJGQUNFX0FERFJFU1MgKyBwb3J0SUNDSUFSX0lOVEVSUlVQVF9BQ0tOT1dMRURHRV9PRkZTRVQgKQ0KKyNkZWZpbmUgcG9ydElDQ0VPSVJfRU5EX09GX0lOVEVSUlVQVF9SRUdJU1RFUl9BRERSRVNTIAkJKCBwb3J0SU5URVJSVVBUX0NPTlRST0xMRVJfQ1BVX0lOVEVSRkFDRV9BRERSRVNTICsgcG9ydElDQ0VPSVJfRU5EX09GX0lOVEVSUlVQVF9PRkZTRVQgKQ0KKyNkZWZpbmUgcG9ydElDQ1BNUl9QUklPUklUWV9NQVNLX1JFR0lTVEVSX0FERFJFU1MgCQkJKCBwb3J0SU5URVJSVVBUX0NPTlRST0xMRVJfQ1BVX0lOVEVSRkFDRV9BRERSRVNTICsgcG9ydElDQ1BNUl9QUklPUklUWV9NQVNLX09GRlNFVCApDQorI2RlZmluZSBwb3J0SUNDQlBSX0JJTkFSWV9QT0lOVF9SRUdJU1RFUiAJCQkJCSggKiggKCBjb25zdCB2b2xhdGlsZSB1aW50MzJfdCAqICkgKCBwb3J0SU5URVJSVVBUX0NPTlRST0xMRVJfQ1BVX0lOVEVSRkFDRV9BRERSRVNTICsgcG9ydElDQ0JQUl9CSU5BUllfUE9JTlRfT0ZGU0VUICkgKSApDQorI2RlZmluZSBwb3J0SUNDUlBSX1JVTk5JTkdfUFJJT1JJVFlfUkVHSVNURVIgCQkJCSggKiggKCBjb25zdCB2b2xhdGlsZSB1aW50MzJfdCAqICkgKCBwb3J0SU5URVJSVVBUX0NPTlRST0xMRVJfQ1BVX0lOVEVSRkFDRV9BRERSRVNTICsgcG9ydElDQ1JQUl9SVU5OSU5HX1BSSU9SSVRZX09GRlNFVCApICkgKQ0KIA0KIC8qIFVzZWQgYnkgcG9ydEFTU0VSVF9JRl9JTlRFUlJVUFRfUFJJT1JJVFlfSU5WQUxJRCgpIHdoZW4gZW5zdXJpbmcgdGhlIGJpbmFyeQ0KLSAqIHBvaW50IGlzIHplcm8uICovDQotI2RlZmluZSBwb3J0QklOQVJZX1BPSU5UX0JJVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggKCB1aW50OF90ICkgMHgwMyApDQorcG9pbnQgaXMgemVyby4gKi8NCisjZGVmaW5lIHBvcnRCSU5BUllfUE9JTlRfQklUUwkJCSggKCB1aW50OF90ICkgMHgwMyApDQogDQogLyogQ29uc3RhbnRzIHJlcXVpcmVkIHRvIHNldHVwIHRoZSBpbml0aWFsIHRhc2sgY29udGV4dC4gKi8NCi0jZGVmaW5lIHBvcnRJTklUSUFMX1NQU1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAoIFN0YWNrVHlwZV90ICkgMHgxZiApIC8qIFN5c3RlbSBtb2RlLCBBUk0gbW9kZSwgaW50ZXJydXB0cyBlbmFibGVkLiAqLw0KLSNkZWZpbmUgcG9ydFRIVU1CX01PREVfQklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICggU3RhY2tUeXBlX3QgKSAweDIwICkNCi0jZGVmaW5lIHBvcnRUSFVNQl9NT0RFX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAweDAxVUwgKQ0KKyNkZWZpbmUgcG9ydElOSVRJQUxfU1BTUgkJCQkoICggU3RhY2tUeXBlX3QgKSAweDFmICkgLyogU3lzdGVtIG1vZGUsIEFSTSBtb2RlLCBpbnRlcnJ1cHRzIGVuYWJsZWQuICovDQorI2RlZmluZSBwb3J0VEhVTUJfTU9ERV9CSVQJCQkJKCAoIFN0YWNrVHlwZV90ICkgMHgyMCApDQorI2RlZmluZSBwb3J0VEhVTUJfTU9ERV9BRERSRVNTCQkJKCAweDAxVUwgKQ0KIA0KIC8qIE1hc2tzIGFsbCBiaXRzIGluIHRoZSBBUFNSIG90aGVyIHRoYW4gdGhlIG1vZGUgYml0cy4gKi8NCi0jZGVmaW5lIHBvcnRBUFNSX01PREVfQklUU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAweDFGICkNCisjZGVmaW5lIHBvcnRBUFNSX01PREVfQklUU19NQVNLCQkJKCAweDFGICkNCiANCiAvKiBUaGUgdmFsdWUgb2YgdGhlIG1vZGUgYml0cyBpbiB0aGUgQVBTUiB3aGVuIHRoZSBDUFUgaXMgZXhlY3V0aW5nIGluIHVzZXINCi0gKiBtb2RlLiAqLw0KLSNkZWZpbmUgcG9ydEFQU1JfVVNFUl9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDB4MTAgKQ0KK21vZGUuICovDQorI2RlZmluZSBwb3J0QVBTUl9VU0VSX01PREUJCQkJKCAweDEwICkNCiANCiAvKiBNYWNybyB0byB1bm1hc2sgYWxsIGludGVycnVwdCBwcmlvcml0aWVzLiAqLw0KLSNkZWZpbmUgcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgX19kaXNhYmxlX2lycSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgcG9ydElDQ1BNUl9QUklPUklUWV9NQVNLX1JFR0lTVEVSID0gcG9ydFVOTUFTS19WQUxVRTsgXA0KLSAgICAgICAgX19hc20oICJEU0IJCVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICJJU0IJCVxuIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBfX2VuYWJsZV9pcnEoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIH0NCisjZGVmaW5lIHBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTSygpCQkJCQkJCQkJCQlcDQorewkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCV9fZGlzYWJsZV9pcnEoKTsJCQkJCQkJCQkJCQkJCVwNCisJcG9ydElDQ1BNUl9QUklPUklUWV9NQVNLX1JFR0lTVEVSID0gcG9ydFVOTUFTS19WQUxVRTsJCQkJCVwNCisJX19hc20oCSJEU0IJCVxuIgkJCQkJCQkJCQkJCQlcDQorCQkJIklTQgkJXG4iICk7CQkJCQkJCQkJCQkJXA0KKwlfX2VuYWJsZV9pcnEoKTsJCQkJCQkJCQkJCQkJCQlcDQorfQ0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KQEAgLTE2OCwyOSArMTY4LDI5IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBBIHZhcmlhYmxlIGlzIHVzZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgY3JpdGljYWwgc2VjdGlvbiBuZXN0aW5nLiAgVGhpcw0KLSAqIHZhcmlhYmxlIGhhcyB0byBiZSBzdG9yZWQgYXMgcGFydCBvZiB0aGUgdGFzayBjb250ZXh0IGFuZCBtdXN0IGJlIGluaXRpYWxpc2VkIHRvDQotICogYSBub24gemVybyB2YWx1ZSB0byBlbnN1cmUgaW50ZXJydXB0cyBkb24ndCBpbmFkdmVydGVudGx5IGJlY29tZSB1bm1hc2tlZCBiZWZvcmUNCi0gKiB0aGUgc2NoZWR1bGVyIHN0YXJ0cy4gIEFzIGl0IGlzIHN0b3JlZCBhcyBwYXJ0IG9mIHRoZSB0YXNrIGNvbnRleHQgaXQgd2lsbA0KLSAqIGF1dG9tYXRpY2FsbHkgYmUgc2V0IHRvIDAgd2hlbiB0aGUgZmlyc3QgdGFzayBpcyBzdGFydGVkLiAqLw0KK3ZhcmlhYmxlIGhhcyB0byBiZSBzdG9yZWQgYXMgcGFydCBvZiB0aGUgdGFzayBjb250ZXh0IGFuZCBtdXN0IGJlIGluaXRpYWxpc2VkIHRvDQorYSBub24gemVybyB2YWx1ZSB0byBlbnN1cmUgaW50ZXJydXB0cyBkb24ndCBpbmFkdmVydGVudGx5IGJlY29tZSB1bm1hc2tlZCBiZWZvcmUNCit0aGUgc2NoZWR1bGVyIHN0YXJ0cy4gIEFzIGl0IGlzIHN0b3JlZCBhcyBwYXJ0IG9mIHRoZSB0YXNrIGNvbnRleHQgaXQgd2lsbA0KK2F1dG9tYXRpY2FsbHkgYmUgc2V0IHRvIDAgd2hlbiB0aGUgZmlyc3QgdGFzayBpcyBzdGFydGVkLiAqLw0KIHZvbGF0aWxlIHVpbnQzMl90IHVsQ3JpdGljYWxOZXN0aW5nID0gOTk5OVVMOw0KIA0KIC8qIFVzZWQgdG8gcGFzcyBjb25zdGFudHMgaW50byB0aGUgQVNNIGNvZGUuICBUaGUgYWRkcmVzcyBhdCB3aGljaCB2YXJpYWJsZXMgYXJlDQotICogcGxhY2VkIGlzIHRoZSBjb25zdGFudCB2YWx1ZSBzbyBpbmRpcmVjdCBsb2FkcyBpbiB0aGUgYXNtIGNvZGUgYXJlIG5vdA0KLSAqIHJlcXVpcmVkLiAqLw0KK3BsYWNlZCBpcyB0aGUgY29uc3RhbnQgdmFsdWUgc28gaW5kaXJlY3QgbG9hZHMgaW4gdGhlIGFzbSBjb2RlIGFyZSBub3QNCityZXF1aXJlZC4gKi8NCiB1aW50MzJfdCB1bElDQ0lBUiBfX2F0dHJpYnV0ZV9fKCAoIGF0KCBwb3J0SUNDSUFSX0lOVEVSUlVQVF9BQ0tOT1dMRURHRV9SRUdJU1RFUl9BRERSRVNTICkgKSApOw0KIHVpbnQzMl90IHVsSUNDRU9JUiBfX2F0dHJpYnV0ZV9fKCAoIGF0KCBwb3J0SUNDRU9JUl9FTkRfT0ZfSU5URVJSVVBUX1JFR0lTVEVSX0FERFJFU1MgKSApICk7DQogdWludDMyX3QgdWxJQ0NQTVIgX19hdHRyaWJ1dGVfXyggKCBhdCggcG9ydElDQ1BNUl9QUklPUklUWV9NQVNLX1JFR0lTVEVSX0FERFJFU1MgKSApICk7DQogdWludDMyX3QgdWxBc21BUElQcmlvcml0eU1hc2sgX19hdHRyaWJ1dGVfXyggKCBhdCggY29uZmlnTUFYX0FQSV9DQUxMX0lOVEVSUlVQVF9QUklPUklUWSA8PCBwb3J0UFJJT1JJVFlfU0hJRlQgKSApICk7DQogDQogLyogU2F2ZWQgYXMgcGFydCBvZiB0aGUgdGFzayBjb250ZXh0LiAgSWYgdWxQb3J0VGFza0hhc0ZQVUNvbnRleHQgaXMgbm9uLXplcm8gdGhlbg0KLSAqIGEgZmxvYXRpbmcgcG9pbnQgY29udGV4dCBtdXN0IGJlIHNhdmVkIGFuZCByZXN0b3JlZCBmb3IgdGhlIHRhc2suICovDQorYSBmbG9hdGluZyBwb2ludCBjb250ZXh0IG11c3QgYmUgc2F2ZWQgYW5kIHJlc3RvcmVkIGZvciB0aGUgdGFzay4gKi8NCiB1aW50MzJfdCB1bFBvcnRUYXNrSGFzRlBVQ29udGV4dCA9IHBkRkFMU0U7DQogDQogLyogU2V0IHRvIDEgdG8gcGVuZCBhIGNvbnRleHQgc3dpdGNoIGZyb20gYW4gSVNSLiAqLw0KIHVpbnQzMl90IHVsUG9ydFlpZWxkUmVxdWlyZWQgPSBwZEZBTFNFOw0KIA0KIC8qIENvdW50cyB0aGUgaW50ZXJydXB0IG5lc3RpbmcgZGVwdGguICBBIGNvbnRleHQgc3dpdGNoIGlzIG9ubHkgcGVyZm9ybWVkIGlmDQotICogaWYgdGhlIG5lc3RpbmcgZGVwdGggaXMgMC4gKi8NCitpZiB0aGUgbmVzdGluZyBkZXB0aCBpcyAwLiAqLw0KIHVpbnQzMl90IHVsUG9ydEludGVycnVwdE5lc3RpbmcgPSAwVUw7DQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQpAQCAtMTk4LDI4NiArMTk4LDI4MyBAQAogLyoNCiAgKiBTZWUgaGVhZGVyIGZpbGUgZm9yIGRlc2NyaXB0aW9uLg0KICAqLw0KLVN0YWNrVHlwZV90ICogcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqIHB4VG9wT2ZTdGFjaywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFza0Z1bmN0aW9uX3QgcHhDb2RlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICogcHZQYXJhbWV0ZXJzICkNCitTdGFja1R5cGVfdCAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqcHhUb3BPZlN0YWNrLCBUYXNrRnVuY3Rpb25fdCBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycyApDQogew0KLSAgICAvKiBTZXR1cCB0aGUgaW5pdGlhbCBzdGFjayBvZiB0aGUgdGFzay4gIFRoZSBzdGFjayBpcyBzZXQgZXhhY3RseSBhcw0KLSAgICAgKiBleHBlY3RlZCBieSB0aGUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpIG1hY3JvLg0KLSAgICAgKg0KLSAgICAgKiBUaGUgZmlzdCByZWFsIHZhbHVlIG9uIHRoZSBzdGFjayBpcyB0aGUgc3RhdHVzIHJlZ2lzdGVyLCB3aGljaCBpcyBzZXQgZm9yDQotICAgICAqIHN5c3RlbSBtb2RlLCB3aXRoIGludGVycnVwdHMgZW5hYmxlZC4gIEEgZmV3IE5VTExzIGFyZSBhZGRlZCBmaXJzdCB0byBlbnN1cmUNCi0gICAgICogR0RCIGRvZXMgbm90IHRyeSBkZWNvZGluZyBhIG5vbi1leGlzdGVudCByZXR1cm4gYWRkcmVzcy4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9IE5VTEw7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gTlVMTDsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSBOVUxMOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwb3J0SU5JVElBTF9TUFNSOw0KKwkvKiBTZXR1cCB0aGUgaW5pdGlhbCBzdGFjayBvZiB0aGUgdGFzay4gIFRoZSBzdGFjayBpcyBzZXQgZXhhY3RseSBhcw0KKwlleHBlY3RlZCBieSB0aGUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpIG1hY3JvLg0KIA0KLSAgICBpZiggKCAoIHVpbnQzMl90ICkgcHhDb2RlICYgcG9ydFRIVU1CX01PREVfQUREUkVTUyApICE9IDB4MDBVTCApDQotICAgIHsNCi0gICAgICAgIC8qIFRoZSB0YXNrIHdpbGwgc3RhcnQgaW4gVEhVTUIgbW9kZS4gKi8NCi0gICAgICAgICpweFRvcE9mU3RhY2sgfD0gcG9ydFRIVU1CX01PREVfQklUOw0KLSAgICB9DQorCVRoZSBmaXN0IHJlYWwgdmFsdWUgb24gdGhlIHN0YWNrIGlzIHRoZSBzdGF0dXMgcmVnaXN0ZXIsIHdoaWNoIGlzIHNldCBmb3INCisJc3lzdGVtIG1vZGUsIHdpdGggaW50ZXJydXB0cyBlbmFibGVkLiAgQSBmZXcgTlVMTHMgYXJlIGFkZGVkIGZpcnN0IHRvIGVuc3VyZQ0KKwlHREIgZG9lcyBub3QgdHJ5IGRlY29kaW5nIGEgbm9uLWV4aXN0ZW50IHJldHVybiBhZGRyZXNzLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gTlVMTDsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSBOVUxMOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IE5VTEw7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHBvcnRJTklUSUFMX1NQU1I7DQogDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwlpZiggKCAoIHVpbnQzMl90ICkgcHhDb2RlICYgcG9ydFRIVU1CX01PREVfQUREUkVTUyApICE9IDB4MDBVTCApDQorCXsNCisJCS8qIFRoZSB0YXNrIHdpbGwgc3RhcnQgaW4gVEhVTUIgbW9kZS4gKi8NCisJCSpweFRvcE9mU3RhY2sgfD0gcG9ydFRIVU1CX01PREVfQklUOw0KKwl9DQogDQotICAgIC8qIE5leHQgdGhlIHJldHVybiBhZGRyZXNzLCB3aGljaCBpbiB0aGlzIGNhc2UgaXMgdGhlIHN0YXJ0IG9mIHRoZSB0YXNrLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB4Q29kZTsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBOZXh0IGFsbCB0aGUgcmVnaXN0ZXJzIG90aGVyIHRoYW4gdGhlIHN0YWNrIHBvaW50ZXIuICovDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHJ2VGFza0V4aXRFcnJvcjsgLyogUjE0ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTIxMjEyMTI7ICAgICAgIC8qIFIxMiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDExMTExMTExOyAgICAgICAvKiBSMTEgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMDEwMTAxMDsgICAgICAgLyogUjEwICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDkwOTA5MDk7ICAgICAgIC8qIFI5ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDgwODA4MDg7ICAgICAgIC8qIFI4ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDcwNzA3MDc7ICAgICAgIC8qIFI3ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDYwNjA2MDY7ICAgICAgIC8qIFI2ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDUwNTA1MDU7ICAgICAgIC8qIFI1ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDQwNDA0MDQ7ICAgICAgIC8qIFI0ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDMwMzAzMDM7ICAgICAgIC8qIFIzICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDIwMjAyMDI7ICAgICAgIC8qIFIyICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDEwMTAxMDE7ICAgICAgIC8qIFIxICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB2UGFyYW1ldGVyczsgICAgIC8qIFIwICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkvKiBOZXh0IHRoZSByZXR1cm4gYWRkcmVzcywgd2hpY2ggaW4gdGhpcyBjYXNlIGlzIHRoZSBzdGFydCBvZiB0aGUgdGFzay4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBweENvZGU7DQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBUaGUgdGFzayB3aWxsIHN0YXJ0IHdpdGggYSBjcml0aWNhbCBuZXN0aW5nIGNvdW50IG9mIDAgYXMgaW50ZXJydXB0cyBhcmUNCi0gICAgICogZW5hYmxlZC4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9IHBvcnROT19DUklUSUNBTF9ORVNUSU5HOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJLyogTmV4dCBhbGwgdGhlIHJlZ2lzdGVycyBvdGhlciB0aGFuIHRoZSBzdGFjayBwb2ludGVyLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHBydlRhc2tFeGl0RXJyb3I7CS8qIFIxNCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDEyMTIxMjEyOwkvKiBSMTIgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgxMTExMTExMTsJLyogUjExICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTAxMDEwMTA7CS8qIFIxMCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA5MDkwOTA5OwkvKiBSOSAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA4MDgwODA4OwkvKiBSOCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA3MDcwNzA3OwkvKiBSNyAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA2MDYwNjA2OwkvKiBSNiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA1MDUwNTA1OwkvKiBSNSAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDA0MDQwNDA0OwkvKiBSNCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAzMDMwMzAzOwkvKiBSMyAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAyMDIwMjAyOwkvKiBSMiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAxMDEwMTAxOwkvKiBSMSAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwdlBhcmFtZXRlcnM7IC8qIFIwICovDQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBUaGUgdGFzayB3aWxsIHN0YXJ0IHdpdGhvdXQgYSBmbG9hdGluZyBwb2ludCBjb250ZXh0LiAgQSB0YXNrIHRoYXQgdXNlcw0KLSAgICAgKiB0aGUgZmxvYXRpbmcgcG9pbnQgaGFyZHdhcmUgbXVzdCBjYWxsIHZQb3J0VGFza1VzZXNGUFUoKSBiZWZvcmUgZXhlY3V0aW5nDQotICAgICAqIGFueSBmbG9hdGluZyBwb2ludCBpbnN0cnVjdGlvbnMuICovDQotICAgICpweFRvcE9mU3RhY2sgPSBwb3J0Tk9fRkxPQVRJTkdfUE9JTlRfQ09OVEVYVDsNCisJLyogVGhlIHRhc2sgd2lsbCBzdGFydCB3aXRoIGEgY3JpdGljYWwgbmVzdGluZyBjb3VudCBvZiAwIGFzIGludGVycnVwdHMgYXJlDQorCWVuYWJsZWQuICovDQorCSpweFRvcE9mU3RhY2sgPSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORzsNCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgIHJldHVybiBweFRvcE9mU3RhY2s7DQorCS8qIFRoZSB0YXNrIHdpbGwgc3RhcnQgd2l0aG91dCBhIGZsb2F0aW5nIHBvaW50IGNvbnRleHQuICBBIHRhc2sgdGhhdCB1c2VzDQorCXRoZSBmbG9hdGluZyBwb2ludCBoYXJkd2FyZSBtdXN0IGNhbGwgdlBvcnRUYXNrVXNlc0ZQVSgpIGJlZm9yZSBleGVjdXRpbmcNCisJYW55IGZsb2F0aW5nIHBvaW50IGluc3RydWN0aW9ucy4gKi8NCisJKnB4VG9wT2ZTdGFjayA9IHBvcnROT19GTE9BVElOR19QT0lOVF9DT05URVhUOw0KKw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBzdGF0aWMgdm9pZCBwcnZUYXNrRXhpdEVycm9yKCB2b2lkICkNCiB7DQotICAgIC8qIEEgZnVuY3Rpb24gdGhhdCBpbXBsZW1lbnRzIGEgdGFzayBtdXN0IG5vdCBleGl0IG9yIGF0dGVtcHQgdG8gcmV0dXJuIHRvDQotICAgICAqIGl0cyBjYWxsZXIgYXMgdGhlcmUgaXMgbm90aGluZyB0byByZXR1cm4gdG8uICBJZiBhIHRhc2sgd2FudHMgdG8gZXhpdCBpdA0KLSAgICAgKiBzaG91bGQgaW5zdGVhZCBjYWxsIHZUYXNrRGVsZXRlKCBOVUxMICkuDQotICAgICAqDQotICAgICAqIEFydGlmaWNpYWxseSBmb3JjZSBhbiBhc3NlcnQoKSB0byBiZSB0cmlnZ2VyZWQgaWYgY29uZmlnQVNTRVJUKCkgaXMNCi0gICAgICogZGVmaW5lZCwgdGhlbiBzdG9wIGhlcmUgc28gYXBwbGljYXRpb24gd3JpdGVycyBjYW4gY2F0Y2ggdGhlIGVycm9yLiAqLw0KLSAgICBjb25maWdBU1NFUlQoIHVsUG9ydEludGVycnVwdE5lc3RpbmcgPT0gfjBVTCApOw0KLSAgICBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7DQorCS8qIEEgZnVuY3Rpb24gdGhhdCBpbXBsZW1lbnRzIGEgdGFzayBtdXN0IG5vdCBleGl0IG9yIGF0dGVtcHQgdG8gcmV0dXJuIHRvDQorCWl0cyBjYWxsZXIgYXMgdGhlcmUgaXMgbm90aGluZyB0byByZXR1cm4gdG8uICBJZiBhIHRhc2sgd2FudHMgdG8gZXhpdCBpdA0KKwlzaG91bGQgaW5zdGVhZCBjYWxsIHZUYXNrRGVsZXRlKCBOVUxMICkuDQogDQotICAgIGZvciggOyA7ICkNCi0gICAgew0KLSAgICB9DQorCUFydGlmaWNpYWxseSBmb3JjZSBhbiBhc3NlcnQoKSB0byBiZSB0cmlnZ2VyZWQgaWYgY29uZmlnQVNTRVJUKCkgaXMNCisJZGVmaW5lZCwgdGhlbiBzdG9wIGhlcmUgc28gYXBwbGljYXRpb24gd3JpdGVycyBjYW4gY2F0Y2ggdGhlIGVycm9yLiAqLw0KKwljb25maWdBU1NFUlQoIHVsUG9ydEludGVycnVwdE5lc3RpbmcgPT0gfjBVTCApOw0KKwlwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7DQorCWZvciggOzsgKTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogQmFzZVR5cGVfdCB4UG9ydFN0YXJ0U2NoZWR1bGVyKCB2b2lkICkNCiB7DQotICAgIHVpbnQzMl90IHVsQVBTUjsNCit1aW50MzJfdCB1bEFQU1I7DQogDQotICAgIC8qIE9ubHkgY29udGludWUgaWYgdGhlIENQVSBpcyBub3QgaW4gVXNlciBtb2RlLiAgVGhlIENQVSBtdXN0IGJlIGluIGENCi0gICAgICogUHJpdmlsZWdlZCBtb2RlIGZvciB0aGUgc2NoZWR1bGVyIHRvIHN0YXJ0LiAqLw0KLSAgICBfX2FzbSggIk1SUyB1bEFQU1IsIEFQU1IiICk7DQotICAgIHVsQVBTUiAmPSBwb3J0QVBTUl9NT0RFX0JJVFNfTUFTSzsNCi0gICAgY29uZmlnQVNTRVJUKCB1bEFQU1IgIT0gcG9ydEFQU1JfVVNFUl9NT0RFICk7DQorCS8qIE9ubHkgY29udGludWUgaWYgdGhlIENQVSBpcyBub3QgaW4gVXNlciBtb2RlLiAgVGhlIENQVSBtdXN0IGJlIGluIGENCisJUHJpdmlsZWdlZCBtb2RlIGZvciB0aGUgc2NoZWR1bGVyIHRvIHN0YXJ0LiAqLw0KKwlfX2FzbSggIk1SUyB1bEFQU1IsIEFQU1IiICk7DQorCXVsQVBTUiAmPSBwb3J0QVBTUl9NT0RFX0JJVFNfTUFTSzsNCisJY29uZmlnQVNTRVJUKCB1bEFQU1IgIT0gcG9ydEFQU1JfVVNFUl9NT0RFICk7DQogDQotICAgIGlmKCB1bEFQU1IgIT0gcG9ydEFQU1JfVVNFUl9NT0RFICkNCi0gICAgew0KLSAgICAgICAgLyogT25seSBjb250aW51ZSBpZiB0aGUgYmluYXJ5IHBvaW50IHZhbHVlIGlzIHNldCB0byBpdHMgbG93ZXN0IHBvc3NpYmxlDQotICAgICAgICAgKiBzZXR0aW5nLiAgU2VlIHRoZSBjb21tZW50cyBpbiB2UG9ydFZhbGlkYXRlSW50ZXJydXB0UHJpb3JpdHkoKSBiZWxvdyBmb3INCi0gICAgICAgICAqIG1vcmUgaW5mb3JtYXRpb24uICovDQotICAgICAgICBjb25maWdBU1NFUlQoICggcG9ydElDQ0JQUl9CSU5BUllfUE9JTlRfUkVHSVNURVIgJiBwb3J0QklOQVJZX1BPSU5UX0JJVFMgKSA8PSBwb3J0TUFYX0JJTkFSWV9QT0lOVF9WQUxVRSApOw0KKwlpZiggdWxBUFNSICE9IHBvcnRBUFNSX1VTRVJfTU9ERSApDQorCXsNCisJCS8qIE9ubHkgY29udGludWUgaWYgdGhlIGJpbmFyeSBwb2ludCB2YWx1ZSBpcyBzZXQgdG8gaXRzIGxvd2VzdCBwb3NzaWJsZQ0KKwkJc2V0dGluZy4gIFNlZSB0aGUgY29tbWVudHMgaW4gdlBvcnRWYWxpZGF0ZUludGVycnVwdFByaW9yaXR5KCkgYmVsb3cgZm9yDQorCQltb3JlIGluZm9ybWF0aW9uLiAqLw0KKwkJY29uZmlnQVNTRVJUKCAoIHBvcnRJQ0NCUFJfQklOQVJZX1BPSU5UX1JFR0lTVEVSICYgcG9ydEJJTkFSWV9QT0lOVF9CSVRTICkgPD0gcG9ydE1BWF9CSU5BUllfUE9JTlRfVkFMVUUgKTsNCiANCi0gICAgICAgIGlmKCAoIHBvcnRJQ0NCUFJfQklOQVJZX1BPSU5UX1JFR0lTVEVSICYgcG9ydEJJTkFSWV9QT0lOVF9CSVRTICkgPD0gcG9ydE1BWF9CSU5BUllfUE9JTlRfVkFMVUUgKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIC8qIFN0YXJ0IHRoZSB0aW1lciB0aGF0IGdlbmVyYXRlcyB0aGUgdGljayBJU1IuICovDQotICAgICAgICAgICAgY29uZmlnU0VUVVBfVElDS19JTlRFUlJVUFQoKTsNCisJCWlmKCAoIHBvcnRJQ0NCUFJfQklOQVJZX1BPSU5UX1JFR0lTVEVSICYgcG9ydEJJTkFSWV9QT0lOVF9CSVRTICkgPD0gcG9ydE1BWF9CSU5BUllfUE9JTlRfVkFMVUUgKQ0KKwkJew0KKwkJCS8qIFN0YXJ0IHRoZSB0aW1lciB0aGF0IGdlbmVyYXRlcyB0aGUgdGljayBJU1IuICovDQorCQkJY29uZmlnU0VUVVBfVElDS19JTlRFUlJVUFQoKTsNCiANCi0gICAgICAgICAgICBfX2VuYWJsZV9pcnEoKTsNCi0gICAgICAgICAgICB2UG9ydFJlc3RvcmVUYXNrQ29udGV4dCgpOw0KLSAgICAgICAgfQ0KLSAgICB9DQorCQkJX19lbmFibGVfaXJxKCk7DQorCQkJdlBvcnRSZXN0b3JlVGFza0NvbnRleHQoKTsNCisJCX0NCisJfQ0KIA0KLSAgICAvKiBXaWxsIG9ubHkgZ2V0IGhlcmUgaWYgdlRhc2tTdGFydFNjaGVkdWxlcigpIHdhcyBjYWxsZWQgd2l0aCB0aGUgQ1BVIGluDQotICAgICAqIGEgbm9uLXByaXZpbGVnZWQgbW9kZSBvciB0aGUgYmluYXJ5IHBvaW50IHJlZ2lzdGVyIHdhcyBub3Qgc2V0IHRvIGl0cyBsb3dlc3QNCi0gICAgICogcG9zc2libGUgdmFsdWUuICovDQotICAgIHJldHVybiAwOw0KKwkvKiBXaWxsIG9ubHkgZ2V0IGhlcmUgaWYgdlRhc2tTdGFydFNjaGVkdWxlcigpIHdhcyBjYWxsZWQgd2l0aCB0aGUgQ1BVIGluDQorCWEgbm9uLXByaXZpbGVnZWQgbW9kZSBvciB0aGUgYmluYXJ5IHBvaW50IHJlZ2lzdGVyIHdhcyBub3Qgc2V0IHRvIGl0cyBsb3dlc3QNCisJcG9zc2libGUgdmFsdWUuICovDQorCXJldHVybiAwOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0RW5kU2NoZWR1bGVyKCB2b2lkICkNCiB7DQotICAgIC8qIE5vdCBpbXBsZW1lbnRlZCBpbiBwb3J0cyB3aGVyZSB0aGVyZSBpcyBub3RoaW5nIHRvIHJldHVybiB0by4NCi0gICAgICogQXJ0aWZpY2lhbGx5IGZvcmNlIGFuIGFzc2VydC4gKi8NCi0gICAgY29uZmlnQVNTRVJUKCB1bENyaXRpY2FsTmVzdGluZyA9PSAxMDAwVUwgKTsNCisJLyogTm90IGltcGxlbWVudGVkIGluIHBvcnRzIHdoZXJlIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmV0dXJuIHRvLg0KKwlBcnRpZmljaWFsbHkgZm9yY2UgYW4gYXNzZXJ0LiAqLw0KKwljb25maWdBU1NFUlQoIHVsQ3JpdGljYWxOZXN0aW5nID09IDEwMDBVTCApOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCggdm9pZCApDQogew0KLSAgICAvKiBEaXNhYmxlIGludGVycnVwdHMgYXMgcGVyIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsgICovDQotICAgIHVsUG9ydFNldEludGVycnVwdE1hc2soKTsNCisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIGFzIHBlciBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7IAkqLw0KKwl1bFBvcnRTZXRJbnRlcnJ1cHRNYXNrKCk7DQogDQotICAgIC8qIE5vdyBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB1bENyaXRpY2FsTmVzdGluZyBjYW4gYmUgYWNjZXNzZWQNCi0gICAgICogZGlyZWN0bHkuICBJbmNyZW1lbnQgdWxDcml0aWNhbE5lc3RpbmcgdG8ga2VlcCBhIGNvdW50IG9mIGhvdyBtYW55IHRpbWVzDQotICAgICAqIHBvcnRFTlRFUl9DUklUSUNBTCgpIGhhcyBiZWVuIGNhbGxlZC4gKi8NCi0gICAgdWxDcml0aWNhbE5lc3RpbmcrKzsNCisJLyogTm93IGludGVycnVwdHMgYXJlIGRpc2FibGVkIHVsQ3JpdGljYWxOZXN0aW5nIGNhbiBiZSBhY2Nlc3NlZA0KKwlkaXJlY3RseS4gIEluY3JlbWVudCB1bENyaXRpY2FsTmVzdGluZyB0byBrZWVwIGEgY291bnQgb2YgaG93IG1hbnkgdGltZXMNCisJcG9ydEVOVEVSX0NSSVRJQ0FMKCkgaGFzIGJlZW4gY2FsbGVkLiAqLw0KKwl1bENyaXRpY2FsTmVzdGluZysrOw0KIA0KLSAgICAvKiBUaGlzIGlzIG5vdCB0aGUgaW50ZXJydXB0IHNhZmUgdmVyc2lvbiBvZiB0aGUgZW50ZXIgY3JpdGljYWwgZnVuY3Rpb24gc28NCi0gICAgICogYXNzZXJ0KCkgaWYgaXQgaXMgYmVpbmcgY2FsbGVkIGZyb20gYW4gaW50ZXJydXB0IGNvbnRleHQuICBPbmx5IEFQSQ0KLSAgICAgKiBmdW5jdGlvbnMgdGhhdCBlbmQgaW4gIkZyb21JU1IiIGNhbiBiZSB1c2VkIGluIGFuIGludGVycnVwdC4gIE9ubHkgYXNzZXJ0IGlmDQotICAgICAqIHRoZSBjcml0aWNhbCBuZXN0aW5nIGNvdW50IGlzIDEgdG8gcHJvdGVjdCBhZ2FpbnN0IHJlY3Vyc2l2ZSBjYWxscyBpZiB0aGUNCi0gICAgICogYXNzZXJ0IGZ1bmN0aW9uIGFsc28gdXNlcyBhIGNyaXRpY2FsIHNlY3Rpb24uICovDQotICAgIGlmKCB1bENyaXRpY2FsTmVzdGluZyA9PSAxICkNCi0gICAgew0KLSAgICAgICAgY29uZmlnQVNTRVJUKCB1bFBvcnRJbnRlcnJ1cHROZXN0aW5nID09IDAgKTsNCi0gICAgfQ0KKwkvKiBUaGlzIGlzIG5vdCB0aGUgaW50ZXJydXB0IHNhZmUgdmVyc2lvbiBvZiB0aGUgZW50ZXIgY3JpdGljYWwgZnVuY3Rpb24gc28NCisJYXNzZXJ0KCkgaWYgaXQgaXMgYmVpbmcgY2FsbGVkIGZyb20gYW4gaW50ZXJydXB0IGNvbnRleHQuICBPbmx5IEFQSQ0KKwlmdW5jdGlvbnMgdGhhdCBlbmQgaW4gIkZyb21JU1IiIGNhbiBiZSB1c2VkIGluIGFuIGludGVycnVwdC4gIE9ubHkgYXNzZXJ0IGlmDQorCXRoZSBjcml0aWNhbCBuZXN0aW5nIGNvdW50IGlzIDEgdG8gcHJvdGVjdCBhZ2FpbnN0IHJlY3Vyc2l2ZSBjYWxscyBpZiB0aGUNCisJYXNzZXJ0IGZ1bmN0aW9uIGFsc28gdXNlcyBhIGNyaXRpY2FsIHNlY3Rpb24uICovDQorCWlmKCB1bENyaXRpY2FsTmVzdGluZyA9PSAxICkNCisJew0KKwkJY29uZmlnQVNTRVJUKCB1bFBvcnRJbnRlcnJ1cHROZXN0aW5nID09IDAgKTsNCisJfQ0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICkNCiB7DQotICAgIGlmKCB1bENyaXRpY2FsTmVzdGluZyA+IHBvcnROT19DUklUSUNBTF9ORVNUSU5HICkNCi0gICAgew0KLSAgICAgICAgLyogRGVjcmVtZW50IHRoZSBuZXN0aW5nIGNvdW50IGFzIHRoZSBjcml0aWNhbCBzZWN0aW9uIGlzIGJlaW5nDQotICAgICAgICAgKiBleGl0ZWQuICovDQotICAgICAgICB1bENyaXRpY2FsTmVzdGluZy0tOw0KKwlpZiggdWxDcml0aWNhbE5lc3RpbmcgPiBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyApDQorCXsNCisJCS8qIERlY3JlbWVudCB0aGUgbmVzdGluZyBjb3VudCBhcyB0aGUgY3JpdGljYWwgc2VjdGlvbiBpcyBiZWluZw0KKwkJZXhpdGVkLiAqLw0KKwkJdWxDcml0aWNhbE5lc3RpbmctLTsNCiANCi0gICAgICAgIC8qIElmIHRoZSBuZXN0aW5nIGxldmVsIGhhcyByZWFjaGVkIHplcm8gdGhlbiBhbGwgaW50ZXJydXB0DQotICAgICAgICAgKiBwcmlvcml0aWVzIG11c3QgYmUgcmUtZW5hYmxlZC4gKi8NCi0gICAgICAgIGlmKCB1bENyaXRpY2FsTmVzdGluZyA9PSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyApDQotICAgICAgICB7DQotICAgICAgICAgICAgLyogQ3JpdGljYWwgbmVzdGluZyBoYXMgcmVhY2hlZCB6ZXJvIHNvIGFsbCBpbnRlcnJ1cHQgcHJpb3JpdGllcw0KLSAgICAgICAgICAgICAqIHNob3VsZCBiZSB1bm1hc2tlZC4gKi8NCi0gICAgICAgICAgICBwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0soKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KKwkJLyogSWYgdGhlIG5lc3RpbmcgbGV2ZWwgaGFzIHJlYWNoZWQgemVybyB0aGVuIGFsbCBpbnRlcnJ1cHQNCisJCXByaW9yaXRpZXMgbXVzdCBiZSByZS1lbmFibGVkLiAqLw0KKwkJaWYoIHVsQ3JpdGljYWxOZXN0aW5nID09IHBvcnROT19DUklUSUNBTF9ORVNUSU5HICkNCisJCXsNCisJCQkvKiBDcml0aWNhbCBuZXN0aW5nIGhhcyByZWFjaGVkIHplcm8gc28gYWxsIGludGVycnVwdCBwcmlvcml0aWVzDQorCQkJc2hvdWxkIGJlIHVubWFza2VkLiAqLw0KKwkJCXBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTSygpOw0KKwkJfQ0KKwl9DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgRnJlZVJUT1NfVGlja19IYW5kbGVyKCB2b2lkICkNCiB7DQotICAgIC8qIFNldCBpbnRlcnJ1cHQgbWFzayBiZWZvcmUgYWx0ZXJpbmcgc2NoZWR1bGVyIHN0cnVjdHVyZXMuICAgVGhlIHRpY2sNCi0gICAgICogaGFuZGxlciBydW5zIGF0IHRoZSBsb3dlc3QgcHJpb3JpdHksIHNvIGludGVycnVwdHMgY2Fubm90IGFscmVhZHkgYmUgbWFza2VkLA0KLSAgICAgKiBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIHNhdmUgYW5kIHJlc3RvcmUgdGhlIGN1cnJlbnQgbWFzayB2YWx1ZS4gKi8NCi0gICAgX19kaXNhYmxlX2lycSgpOw0KLSAgICBwb3J0SUNDUE1SX1BSSU9SSVRZX01BU0tfUkVHSVNURVIgPSAoIHVpbnQzMl90ICkgKCBjb25maWdNQVhfQVBJX0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIDw8IHBvcnRQUklPUklUWV9TSElGVCApOw0KLSAgICBfX2FzbSggIkRTQgkJXG4iDQotICAgICAgICAgICAiSVNCCQlcbiIpOw0KLSAgICBfX2VuYWJsZV9pcnEoKTsNCisJLyogU2V0IGludGVycnVwdCBtYXNrIGJlZm9yZSBhbHRlcmluZyBzY2hlZHVsZXIgc3RydWN0dXJlcy4gICBUaGUgdGljaw0KKwloYW5kbGVyIHJ1bnMgYXQgdGhlIGxvd2VzdCBwcmlvcml0eSwgc28gaW50ZXJydXB0cyBjYW5ub3QgYWxyZWFkeSBiZSBtYXNrZWQsDQorCXNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gc2F2ZSBhbmQgcmVzdG9yZSB0aGUgY3VycmVudCBtYXNrIHZhbHVlLiAqLw0KKwlfX2Rpc2FibGVfaXJxKCk7DQorCXBvcnRJQ0NQTVJfUFJJT1JJVFlfTUFTS19SRUdJU1RFUiA9ICggdWludDMyX3QgKSAoIGNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgPDwgcG9ydFBSSU9SSVRZX1NISUZUICk7DQorCV9fYXNtKAkiRFNCCQlcbiINCisJCQkiSVNCCQlcbiIgKTsNCisJX19lbmFibGVfaXJxKCk7DQogDQotICAgIC8qIEluY3JlbWVudCB0aGUgUlRPUyB0aWNrLiAqLw0KLSAgICBpZiggeFRhc2tJbmNyZW1lbnRUaWNrKCkgIT0gcGRGQUxTRSApDQotICAgIHsNCi0gICAgICAgIHVsUG9ydFlpZWxkUmVxdWlyZWQgPSBwZFRSVUU7DQotICAgIH0NCisJLyogSW5jcmVtZW50IHRoZSBSVE9TIHRpY2suICovDQorCWlmKCB4VGFza0luY3JlbWVudFRpY2soKSAhPSBwZEZBTFNFICkNCisJew0KKwkJdWxQb3J0WWllbGRSZXF1aXJlZCA9IHBkVFJVRTsNCisJfQ0KIA0KLSAgICAvKiBFbnN1cmUgYWxsIGludGVycnVwdCBwcmlvcml0aWVzIGFyZSBhY3RpdmUgYWdhaW4uICovDQotICAgIHBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTSygpOw0KLSAgICBjb25maWdDTEVBUl9USUNLX0lOVEVSUlVQVCgpOw0KKwkvKiBFbnN1cmUgYWxsIGludGVycnVwdCBwcmlvcml0aWVzIGFyZSBhY3RpdmUgYWdhaW4uICovDQorCXBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTSygpOw0KKwljb25maWdDTEVBUl9USUNLX0lOVEVSUlVQVCgpOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0VGFza1VzZXNGUFUoIHZvaWQgKQ0KIHsNCi0gICAgdWludDMyX3QgdWxJbml0aWFsRlBTQ1IgPSAwOw0KK3VpbnQzMl90IHVsSW5pdGlhbEZQU0NSID0gMDsNCiANCi0gICAgLyogQSB0YXNrIGlzIHJlZ2lzdGVyaW5nIHRoZSBmYWN0IHRoYXQgaXQgbmVlZHMgYW4gRlBVIGNvbnRleHQuICBTZXQgdGhlDQotICAgICAqIEZQVSBmbGFnICh3aGljaCBpcyBzYXZlZCBhcyBwYXJ0IG9mIHRoZSB0YXNrIGNvbnRleHQpLiAqLw0KLSAgICB1bFBvcnRUYXNrSGFzRlBVQ29udGV4dCA9IHBkVFJVRTsNCisJLyogQSB0YXNrIGlzIHJlZ2lzdGVyaW5nIHRoZSBmYWN0IHRoYXQgaXQgbmVlZHMgYW4gRlBVIGNvbnRleHQuICBTZXQgdGhlDQorCUZQVSBmbGFnICh3aGljaCBpcyBzYXZlZCBhcyBwYXJ0IG9mIHRoZSB0YXNrIGNvbnRleHQpLiAqLw0KKwl1bFBvcnRUYXNrSGFzRlBVQ29udGV4dCA9IHBkVFJVRTsNCiANCi0gICAgLyogSW5pdGlhbGlzZSB0aGUgZmxvYXRpbmcgcG9pbnQgc3RhdHVzIHJlZ2lzdGVyLiAqLw0KLSAgICBfX2FzbSggIkZNWFIgCUZQU0NSLCB1bEluaXRpYWxGUFNDUiIpOw0KKwkvKiBJbml0aWFsaXNlIHRoZSBmbG9hdGluZyBwb2ludCBzdGF0dXMgcmVnaXN0ZXIuICovDQorCV9fYXNtKCAiRk1YUiAJRlBTQ1IsIHVsSW5pdGlhbEZQU0NSIiApOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0Q2xlYXJJbnRlcnJ1cHRNYXNrKCB1aW50MzJfdCB1bE5ld01hc2tWYWx1ZSApDQogew0KLSAgICBpZiggdWxOZXdNYXNrVmFsdWUgPT0gcGRGQUxTRSApDQotICAgIHsNCi0gICAgICAgIHBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTSygpOw0KLSAgICB9DQorCWlmKCB1bE5ld01hc2tWYWx1ZSA9PSBwZEZBTFNFICkNCisJew0KKwkJcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLKCk7DQorCX0NCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogdWludDMyX3QgdWxQb3J0U2V0SW50ZXJydXB0TWFzayggdm9pZCApDQogew0KLSAgICB1aW50MzJfdCB1bFJldHVybjsNCit1aW50MzJfdCB1bFJldHVybjsNCiANCi0gICAgX19kaXNhYmxlX2lycSgpOw0KKwlfX2Rpc2FibGVfaXJxKCk7DQorCWlmKCBwb3J0SUNDUE1SX1BSSU9SSVRZX01BU0tfUkVHSVNURVIgPT0gKCB1aW50MzJfdCApICggY29uZmlnTUFYX0FQSV9DQUxMX0lOVEVSUlVQVF9QUklPUklUWSA8PCBwb3J0UFJJT1JJVFlfU0hJRlQgKSApDQorCXsNCisJCS8qIEludGVycnVwdHMgd2VyZSBhbHJlYWR5IG1hc2tlZC4gKi8NCisJCXVsUmV0dXJuID0gcGRUUlVFOw0KKwl9DQorCWVsc2UNCisJew0KKwkJdWxSZXR1cm4gPSBwZEZBTFNFOw0KKwkJcG9ydElDQ1BNUl9QUklPUklUWV9NQVNLX1JFR0lTVEVSID0gKCB1aW50MzJfdCApICggY29uZmlnTUFYX0FQSV9DQUxMX0lOVEVSUlVQVF9QUklPUklUWSA8PCBwb3J0UFJJT1JJVFlfU0hJRlQgKTsNCisJCV9fYXNtKAkiRFNCCQlcbiINCisJCQkJIklTQgkJXG4iICk7DQorCX0NCisJX19lbmFibGVfaXJxKCk7DQogDQotICAgIGlmKCBwb3J0SUNDUE1SX1BSSU9SSVRZX01BU0tfUkVHSVNURVIgPT0gKCB1aW50MzJfdCApICggY29uZmlnTUFYX0FQSV9DQUxMX0lOVEVSUlVQVF9QUklPUklUWSA8PCBwb3J0UFJJT1JJVFlfU0hJRlQgKSApDQotICAgIHsNCi0gICAgICAgIC8qIEludGVycnVwdHMgd2VyZSBhbHJlYWR5IG1hc2tlZC4gKi8NCi0gICAgICAgIHVsUmV0dXJuID0gcGRUUlVFOw0KLSAgICB9DQotICAgIGVsc2UNCi0gICAgew0KLSAgICAgICAgdWxSZXR1cm4gPSBwZEZBTFNFOw0KLSAgICAgICAgcG9ydElDQ1BNUl9QUklPUklUWV9NQVNLX1JFR0lTVEVSID0gKCB1aW50MzJfdCApICggY29uZmlnTUFYX0FQSV9DQUxMX0lOVEVSUlVQVF9QUklPUklUWSA8PCBwb3J0UFJJT1JJVFlfU0hJRlQgKTsNCi0gICAgICAgIF9fYXNtKCAiRFNCCQlcbiINCi0gICAgICAgICAgICAgICAiSVNCCQlcbiIpOw0KLSAgICB9DQotDQotICAgIF9fZW5hYmxlX2lycSgpOw0KLQ0KLSAgICByZXR1cm4gdWxSZXR1cm47DQorCXJldHVybiB1bFJldHVybjsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQotI2lmICggY29uZmlnQVNTRVJUX0RFRklORUQgPT0gMSApDQorI2lmKCBjb25maWdBU1NFUlRfREVGSU5FRCA9PSAxICkNCiANCi0gICAgdm9pZCB2UG9ydFZhbGlkYXRlSW50ZXJydXB0UHJpb3JpdHkoIHZvaWQgKQ0KLSAgICB7DQotICAgICAgICAvKiBUaGUgZm9sbG93aW5nIGFzc2VydGlvbiB3aWxsIGZhaWwgaWYgYSBzZXJ2aWNlIHJvdXRpbmUgKElTUikgZm9yDQotICAgICAgICAgKiBhbiBpbnRlcnJ1cHQgdGhhdCBoYXMgYmVlbiBhc3NpZ25lZCBhIHByaW9yaXR5IGFib3ZlDQotICAgICAgICAgKiBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgY2FsbHMgYW4gSVNSIHNhZmUgRnJlZVJUT1MgQVBJDQotICAgICAgICAgKiBmdW5jdGlvbi4gIElTUiBzYWZlIEZyZWVSVE9TIEFQSSBmdW5jdGlvbnMgbXVzdCAqb25seSogYmUgY2FsbGVkDQotICAgICAgICAgKiBmcm9tIGludGVycnVwdHMgdGhhdCBoYXZlIGJlZW4gYXNzaWduZWQgYSBwcmlvcml0eSBhdCBvciBiZWxvdw0KLSAgICAgICAgICogY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZLg0KLSAgICAgICAgICoNCi0gICAgICAgICAqIE51bWVyaWNhbGx5IGxvdyBpbnRlcnJ1cHQgcHJpb3JpdHkgbnVtYmVycyByZXByZXNlbnQgbG9naWNhbGx5IGhpZ2gNCi0gICAgICAgICAqIGludGVycnVwdCBwcmlvcml0aWVzLCB0aGVyZWZvcmUgdGhlIHByaW9yaXR5IG9mIHRoZSBpbnRlcnJ1cHQgbXVzdA0KLSAgICAgICAgICogYmUgc2V0IHRvIGEgdmFsdWUgZXF1YWwgdG8gb3IgbnVtZXJpY2FsbHkgKmhpZ2hlciogdGhhbg0KLSAgICAgICAgICogY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZLg0KLSAgICAgICAgICoNCi0gICAgICAgICAqIEZyZWVSVE9TIG1haW50YWlucyBzZXBhcmF0ZSB0aHJlYWQgYW5kIElTUiBBUEkgZnVuY3Rpb25zIHRvIGVuc3VyZQ0KLSAgICAgICAgICogaW50ZXJydXB0IGVudHJ5IGlzIGFzIGZhc3QgYW5kIHNpbXBsZSBhcyBwb3NzaWJsZS4NCi0gICAgICAgICAqDQotICAgICAgICAgKiBUaGUgZm9sbG93aW5nIGxpbmtzIHByb3ZpZGUgZGV0YWlsZWQgaW5mb3JtYXRpb246DQotICAgICAgICAgKiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9SVE9TLUNvcnRleC1NMy1NNC5odG1sDQotICAgICAgICAgKiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9GQVFIZWxwLmh0bWwgKi8NCi0gICAgICAgIGNvbmZpZ0FTU0VSVCggcG9ydElDQ1JQUl9SVU5OSU5HX1BSSU9SSVRZX1JFR0lTVEVSID49ICggY29uZmlnTUFYX0FQSV9DQUxMX0lOVEVSUlVQVF9QUklPUklUWSA8PCBwb3J0UFJJT1JJVFlfU0hJRlQgKSApOw0KKwl2b2lkIHZQb3J0VmFsaWRhdGVJbnRlcnJ1cHRQcmlvcml0eSggdm9pZCApDQorCXsNCisJCS8qIFRoZSBmb2xsb3dpbmcgYXNzZXJ0aW9uIHdpbGwgZmFpbCBpZiBhIHNlcnZpY2Ugcm91dGluZSAoSVNSKSBmb3INCisJCWFuIGludGVycnVwdCB0aGF0IGhhcyBiZWVuIGFzc2lnbmVkIGEgcHJpb3JpdHkgYWJvdmUNCisJCWNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSBjYWxscyBhbiBJU1Igc2FmZSBGcmVlUlRPUyBBUEkNCisJCWZ1bmN0aW9uLiAgSVNSIHNhZmUgRnJlZVJUT1MgQVBJIGZ1bmN0aW9ucyBtdXN0ICpvbmx5KiBiZSBjYWxsZWQNCisJCWZyb20gaW50ZXJydXB0cyB0aGF0IGhhdmUgYmVlbiBhc3NpZ25lZCBhIHByaW9yaXR5IGF0IG9yIGJlbG93DQorCQljb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkuDQogDQotICAgICAgICAvKiBQcmlvcml0eSBncm91cGluZzogIFRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciAoR0lDKSBhbGxvd3MgdGhlIGJpdHMNCi0gICAgICAgICAqIHRoYXQgZGVmaW5lIGVhY2ggaW50ZXJydXB0J3MgcHJpb3JpdHkgdG8gYmUgc3BsaXQgYmV0d2VlbiBiaXRzIHRoYXQNCi0gICAgICAgICAqIGRlZmluZSB0aGUgaW50ZXJydXB0J3MgcHJlLWVtcHRpb24gcHJpb3JpdHkgYml0cyBhbmQgYml0cyB0aGF0IGRlZmluZQ0KLSAgICAgICAgICogdGhlIGludGVycnVwdCdzIHN1Yi1wcmlvcml0eS4gIEZvciBzaW1wbGljaXR5IGFsbCBiaXRzIG11c3QgYmUgZGVmaW5lZA0KLSAgICAgICAgICogdG8gYmUgcHJlLWVtcHRpb24gcHJpb3JpdHkgYml0cy4gIFRoZSBmb2xsb3dpbmcgYXNzZXJ0aW9uIHdpbGwgZmFpbCBpZg0KLSAgICAgICAgICogdGhpcyBpcyBub3QgdGhlIGNhc2UgKGlmIHNvbWUgYml0cyByZXByZXNlbnQgYSBzdWItcHJpb3JpdHkpLg0KLSAgICAgICAgICoNCi0gICAgICAgICAqIFRoZSBwcmlvcml0eSBncm91cGluZyBpcyBjb25maWd1cmVkIGJ5IHRoZSBHSUMncyBiaW5hcnkgcG9pbnQgcmVnaXN0ZXINCi0gICAgICAgICAqIChJQ0NCUFIpLiAgV3JpdHRpbmcgMCB0byBJQ0NCUFIgd2lsbCBlbnN1cmUgaXQgaXMgc2V0IHRvIGl0cyBsb3dlc3QNCi0gICAgICAgICAqIHBvc3NpYmxlIHZhbHVlICh3aGljaCBtYXkgYmUgYWJvdmUgMCkuICovDQotICAgICAgICBjb25maWdBU1NFUlQoIHBvcnRJQ0NCUFJfQklOQVJZX1BPSU5UX1JFR0lTVEVSIDw9IHBvcnRNQVhfQklOQVJZX1BPSU5UX1ZBTFVFICk7DQotICAgIH0NCisJCU51bWVyaWNhbGx5IGxvdyBpbnRlcnJ1cHQgcHJpb3JpdHkgbnVtYmVycyByZXByZXNlbnQgbG9naWNhbGx5IGhpZ2gNCisJCWludGVycnVwdCBwcmlvcml0aWVzLCB0aGVyZWZvcmUgdGhlIHByaW9yaXR5IG9mIHRoZSBpbnRlcnJ1cHQgbXVzdA0KKwkJYmUgc2V0IHRvIGEgdmFsdWUgZXF1YWwgdG8gb3IgbnVtZXJpY2FsbHkgKmhpZ2hlciogdGhhbg0KKwkJY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZLg0KKw0KKwkJRnJlZVJUT1MgbWFpbnRhaW5zIHNlcGFyYXRlIHRocmVhZCBhbmQgSVNSIEFQSSBmdW5jdGlvbnMgdG8gZW5zdXJlDQorCQlpbnRlcnJ1cHQgZW50cnkgaXMgYXMgZmFzdCBhbmQgc2ltcGxlIGFzIHBvc3NpYmxlLg0KKw0KKwkJVGhlIGZvbGxvd2luZyBsaW5rcyBwcm92aWRlIGRldGFpbGVkIGluZm9ybWF0aW9uOg0KKwkJaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvUlRPUy1Db3J0ZXgtTTMtTTQuaHRtbA0KKwkJaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvRkFRSGVscC5odG1sICovDQorCQljb25maWdBU1NFUlQoIHBvcnRJQ0NSUFJfUlVOTklOR19QUklPUklUWV9SRUdJU1RFUiA+PSAoIGNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgPDwgcG9ydFBSSU9SSVRZX1NISUZUICkgKTsNCisNCisJCS8qIFByaW9yaXR5IGdyb3VwaW5nOiAgVGhlIGludGVycnVwdCBjb250cm9sbGVyIChHSUMpIGFsbG93cyB0aGUgYml0cw0KKwkJdGhhdCBkZWZpbmUgZWFjaCBpbnRlcnJ1cHQncyBwcmlvcml0eSB0byBiZSBzcGxpdCBiZXR3ZWVuIGJpdHMgdGhhdA0KKwkJZGVmaW5lIHRoZSBpbnRlcnJ1cHQncyBwcmUtZW1wdGlvbiBwcmlvcml0eSBiaXRzIGFuZCBiaXRzIHRoYXQgZGVmaW5lDQorCQl0aGUgaW50ZXJydXB0J3Mgc3ViLXByaW9yaXR5LiAgRm9yIHNpbXBsaWNpdHkgYWxsIGJpdHMgbXVzdCBiZSBkZWZpbmVkDQorCQl0byBiZSBwcmUtZW1wdGlvbiBwcmlvcml0eSBiaXRzLiAgVGhlIGZvbGxvd2luZyBhc3NlcnRpb24gd2lsbCBmYWlsIGlmDQorCQl0aGlzIGlzIG5vdCB0aGUgY2FzZSAoaWYgc29tZSBiaXRzIHJlcHJlc2VudCBhIHN1Yi1wcmlvcml0eSkuDQorDQorCQlUaGUgcHJpb3JpdHkgZ3JvdXBpbmcgaXMgY29uZmlndXJlZCBieSB0aGUgR0lDJ3MgYmluYXJ5IHBvaW50IHJlZ2lzdGVyDQorCQkoSUNDQlBSKS4gIFdyaXR0aW5nIDAgdG8gSUNDQlBSIHdpbGwgZW5zdXJlIGl0IGlzIHNldCB0byBpdHMgbG93ZXN0DQorCQlwb3NzaWJsZSB2YWx1ZSAod2hpY2ggbWF5IGJlIGFib3ZlIDApLiAqLw0KKwkJY29uZmlnQVNTRVJUKCBwb3J0SUNDQlBSX0JJTkFSWV9QT0lOVF9SRUdJU1RFUiA8PSBwb3J0TUFYX0JJTkFSWV9QT0lOVF9WQUxVRSApOw0KKwl9DQogDQogI2VuZGlmIC8qIGNvbmZpZ0FTU0VSVF9ERUZJTkVEICovDQorDQorDQorDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvUlZEUy9BUk1fQ0E5L3BvcnRtYWNyby5oIGIvcG9ydGFibGUvUlZEUy9BUk1fQ0E5L3BvcnRtYWNyby5oCmluZGV4IGY3MWRlYjEuLjAyYTcyMTEgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL1JWRFMvQVJNX0NBOS9wb3J0bWFjcm8uaAorKysgYi9wb3J0YWJsZS9SVkRTL0FSTV9DQTkvcG9ydG1hY3JvLmgKQEAgLTI2LDExICsyNiwxMSBAQAogICovDQogDQogI2lmbmRlZiBQT1JUTUFDUk9fSA0KLSAgICAjZGVmaW5lIFBPUlRNQUNST19IDQorI2RlZmluZSBQT1JUTUFDUk9fSA0KIA0KLSAgICAjaWZkZWYgX19jcGx1c3BsdXMNCi0gICAgICAgIGV4dGVybiAiQyIgew0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICogUG9ydCBzcGVjaWZpYyBkZWZpbml0aW9ucy4NCkBAIC00MywxMjAgKzQzLDEyMSBAQAogICovDQogDQogLyogVHlwZSBkZWZpbml0aW9ucy4gKi8NCi0gICAgI2RlZmluZSBwb3J0Q0hBUiAgICAgICAgICBjaGFyDQotICAgICNkZWZpbmUgcG9ydEZMT0FUICAgICAgICAgZmxvYXQNCi0gICAgI2RlZmluZSBwb3J0RE9VQkxFICAgICAgICBkb3VibGUNCi0gICAgI2RlZmluZSBwb3J0TE9ORyAgICAgICAgICBsb25nDQotICAgICNkZWZpbmUgcG9ydFNIT1JUICAgICAgICAgc2hvcnQNCi0gICAgI2RlZmluZSBwb3J0U1RBQ0tfVFlQRSAgICB1aW50MzJfdA0KLSAgICAjZGVmaW5lIHBvcnRCQVNFX1RZUEUgICAgIGxvbmcNCisjZGVmaW5lIHBvcnRDSEFSCQljaGFyDQorI2RlZmluZSBwb3J0RkxPQVQJCWZsb2F0DQorI2RlZmluZSBwb3J0RE9VQkxFCQlkb3VibGUNCisjZGVmaW5lIHBvcnRMT05HCQlsb25nDQorI2RlZmluZSBwb3J0U0hPUlQJCXNob3J0DQorI2RlZmluZSBwb3J0U1RBQ0tfVFlQRQl1aW50MzJfdA0KKyNkZWZpbmUgcG9ydEJBU0VfVFlQRQlsb25nDQogDQotICAgIHR5cGVkZWYgcG9ydFNUQUNLX1RZUEUgICBTdGFja1R5cGVfdDsNCi0gICAgdHlwZWRlZiBsb25nICAgICAgICAgICAgIEJhc2VUeXBlX3Q7DQotICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyAgICBVQmFzZVR5cGVfdDsNCit0eXBlZGVmIHBvcnRTVEFDS19UWVBFIFN0YWNrVHlwZV90Ow0KK3R5cGVkZWYgbG9uZyBCYXNlVHlwZV90Ow0KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBVQmFzZVR5cGVfdDsNCiANCiANCi0gICAgI2lmICggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCi0gICAgICAgIHR5cGVkZWYgdWludDE2X3QgICAgIFRpY2tUeXBlX3Q7DQotICAgICAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgICAgICAgICAgICggVGlja1R5cGVfdCApIDB4ZmZmZg0KLSAgICAjZWxzZQ0KLSAgICAgICAgdHlwZWRlZiB1aW50MzJfdCAgICAgVGlja1R5cGVfdDsNCi0gICAgICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAgICAgICAgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQorI2lmKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KKwl0eXBlZGVmIHVpbnQxNl90IFRpY2tUeXBlX3Q7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIFRpY2tUeXBlX3QgKSAweGZmZmYNCisjZWxzZQ0KKwl0eXBlZGVmIHVpbnQzMl90IFRpY2tUeXBlX3Q7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwNCiANCi0vKiAzMi1iaXQgdGljayB0eXBlIG9uIGEgMzItYml0IGFyY2hpdGVjdHVyZSwgc28gcmVhZHMgb2YgdGhlIHRpY2sgY291bnQgZG8NCi0gKiBub3QgbmVlZCB0byBiZSBndWFyZGVkIHdpdGggYSBjcml0aWNhbCBzZWN0aW9uLiAqLw0KLSAgICAgICAgI2RlZmluZSBwb3J0VElDS19UWVBFX0lTX0FUT01JQyAgICAxDQotICAgICNlbmRpZg0KKwkvKiAzMi1iaXQgdGljayB0eXBlIG9uIGEgMzItYml0IGFyY2hpdGVjdHVyZSwgc28gcmVhZHMgb2YgdGhlIHRpY2sgY291bnQgZG8NCisJbm90IG5lZWQgdG8gYmUgZ3VhcmRlZCB3aXRoIGEgY3JpdGljYWwgc2VjdGlvbi4gKi8NCisJI2RlZmluZSBwb3J0VElDS19UWVBFX0lTX0FUT01JQyAxDQorI2VuZGlmDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogSGFyZHdhcmUgc3BlY2lmaWNzLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEggICAgICAoIC0xICkNCi0gICAgI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMgICAgKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCi0gICAgI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQgICAgOA0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJCSggLTEgKQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TCQkJKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCisjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVAkJCTgNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBUYXNrIHV0aWxpdGllcy4gKi8NCiANCiAvKiBDYWxsZWQgYXQgdGhlIGVuZCBvZiBhbiBJU1IgdGhhdCBjYW4gY2F1c2UgYSBjb250ZXh0IHN3aXRjaC4gKi8NCi0gICAgI2RlZmluZSBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHhTd2l0Y2hSZXF1aXJlZCApIFwNCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGV4dGVybiB1aW50MzJfdCB1bFBvcnRZaWVsZFJlcXVpcmVkOyAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGlmKCB4U3dpdGNoUmVxdWlyZWQgIT0gcGRGQUxTRSApICAgICAgICAgICAgIFwNCi0gICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICB1bFBvcnRZaWVsZFJlcXVpcmVkID0gcGRUUlVFOyAgICAgICAgICAgIFwNCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgfQ0KKyNkZWZpbmUgcG9ydEVORF9TV0lUQ0hJTkdfSVNSKCB4U3dpdGNoUmVxdWlyZWQgKVwNCit7CQkJCQkJCQkJCQkJXA0KK2V4dGVybiB1aW50MzJfdCB1bFBvcnRZaWVsZFJlcXVpcmVkOwkJCVwNCisJCQkJCQkJCQkJCQlcDQorCWlmKCB4U3dpdGNoUmVxdWlyZWQgIT0gcGRGQUxTRSApCQkJXA0KKwl7CQkJCQkJCQkJCQlcDQorCQl1bFBvcnRZaWVsZFJlcXVpcmVkID0gcGRUUlVFOwkJCVwNCisJfQkJCQkJCQkJCQkJXA0KK30NCiANCi0gICAgI2RlZmluZSBwb3J0WUlFTERfRlJPTV9JU1IoIHggKSAgICBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHggKQ0KLSAgICAjZGVmaW5lIHBvcnRZSUVMRCgpICAgICAgICAgICAgICAgIF9fYXNtKCAiU1dJIDAiICk7DQorI2RlZmluZSBwb3J0WUlFTERfRlJPTV9JU1IoIHggKSBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHggKQ0KKyNkZWZpbmUgcG9ydFlJRUxEKCkgX19hc20oICJTV0kgMCIgKTsNCiANCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotKiBDcml0aWNhbCBzZWN0aW9uIGNvbnRyb2wNCi0qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorICogQ3JpdGljYWwgc2VjdGlvbiBjb250cm9sDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0gICAgZXh0ZXJuIHZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICk7DQotICAgIGV4dGVybiB2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICk7DQotICAgIGV4dGVybiB1aW50MzJfdCB1bFBvcnRTZXRJbnRlcnJ1cHRNYXNrKCB2b2lkICk7DQotICAgIGV4dGVybiB2b2lkIHZQb3J0Q2xlYXJJbnRlcnJ1cHRNYXNrKCB1aW50MzJfdCB1bE5ld01hc2tWYWx1ZSApOw0KK2V4dGVybiB2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCggdm9pZCApOw0KK2V4dGVybiB2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICk7DQorZXh0ZXJuIHVpbnQzMl90IHVsUG9ydFNldEludGVycnVwdE1hc2soIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2UG9ydENsZWFySW50ZXJydXB0TWFzayggdWludDMyX3QgdWxOZXdNYXNrVmFsdWUgKTsNCiANCiAvKiBUaGVzZSBtYWNyb3MgZG8gbm90IGdsb2JhbGx5IGRpc2FibGUvZW5hYmxlIGludGVycnVwdHMuICBUaGV5IGRvIG1hc2sgb2ZmDQotICogaW50ZXJydXB0cyB0aGF0IGhhdmUgYSBwcmlvcml0eSBiZWxvdyBjb25maWdNQVhfQVBJX0NBTExfSU5URVJSVVBUX1BSSU9SSVRZLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpICAgICAgICAgICAgICAgICAgICAgIHZQb3J0RW50ZXJDcml0aWNhbCgpOw0KLSAgICAjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkgICAgICAgICAgICAgICAgICAgICAgIHZQb3J0RXhpdENyaXRpY2FsKCk7DQotICAgICNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpICAgICAgICAgICAgICAgICAgdWxQb3J0U2V0SW50ZXJydXB0TWFzaygpDQotICAgICNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkgICAgICAgICAgICAgICAgICAgdlBvcnRDbGVhckludGVycnVwdE1hc2soIDAgKQ0KLSAgICAjZGVmaW5lIHBvcnRTRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKSAgICAgICAgIHVsUG9ydFNldEludGVycnVwdE1hc2soKQ0KLSAgICAjZGVmaW5lIHBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUiggeCApICAgIHZQb3J0Q2xlYXJJbnRlcnJ1cHRNYXNrKCB4ICkNCitpbnRlcnJ1cHRzIHRoYXQgaGF2ZSBhIHByaW9yaXR5IGJlbG93IGNvbmZpZ01BWF9BUElfQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkuICovDQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKQkJdlBvcnRFbnRlckNyaXRpY2FsKCk7DQorI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpCQkJdlBvcnRFeGl0Q3JpdGljYWwoKTsNCisjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKQl1bFBvcnRTZXRJbnRlcnJ1cHRNYXNrKCkNCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpCQl2UG9ydENsZWFySW50ZXJydXB0TWFzayggMCApDQorI2RlZmluZSBwb3J0U0VUX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCkJCXVsUG9ydFNldEludGVycnVwdE1hc2soKQ0KKyNkZWZpbmUgcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKHgpCXZQb3J0Q2xlYXJJbnRlcnJ1cHRNYXNrKHgpDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICBUaGVzZSBhcmUNCi0gKiBub3QgcmVxdWlyZWQgZm9yIHRoaXMgcG9ydCBidXQgaW5jbHVkZWQgaW4gY2FzZSBjb21tb24gZGVtbyBjb2RlIHRoYXQgdXNlcyB0aGVzZQ0KLSAqIG1hY3JvcyBpcyB1c2VkLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCi0gICAgI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICAgICAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQorbm90IHJlcXVpcmVkIGZvciB0aGlzIHBvcnQgYnV0IGluY2x1ZGVkIGluIGNhc2UgY29tbW9uIGRlbW8gY29kZSB0aGF0IHVzZXMgdGhlc2UNCittYWNyb3MgaXMgdXNlZC4gKi8NCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApCXZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkJdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQogDQogLyogUHJvdG90eXBlIG9mIHRoZSBGcmVlUlRPUyB0aWNrIGhhbmRsZXIuICBUaGlzIG11c3QgYmUgaW5zdGFsbGVkIGFzIHRoZQ0KLSAqIGhhbmRsZXIgZm9yIHdoaWNoZXZlciBwZXJpcGhlcmFsIGlzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIFJUT1MgdGljay4gKi8NCi0gICAgdm9pZCBGcmVlUlRPU19UaWNrX0hhbmRsZXIoIHZvaWQgKTsNCitoYW5kbGVyIGZvciB3aGljaGV2ZXIgcGVyaXBoZXJhbCBpcyB1c2VkIHRvIGdlbmVyYXRlIHRoZSBSVE9TIHRpY2suICovDQordm9pZCBGcmVlUlRPU19UaWNrX0hhbmRsZXIoIHZvaWQgKTsNCiANCiAvKiBBbnkgdGFzayB0aGF0IHVzZXMgdGhlIGZsb2F0aW5nIHBvaW50IHVuaXQgTVVTVCBjYWxsIHZQb3J0VGFza1VzZXNGUFUoKQ0KLSAqIGJlZm9yZSBhbnkgZmxvYXRpbmcgcG9pbnQgaW5zdHJ1Y3Rpb25zIGFyZSBleGVjdXRlZC4gKi8NCi0gICAgdm9pZCB2UG9ydFRhc2tVc2VzRlBVKCB2b2lkICk7DQotICAgICNkZWZpbmUgcG9ydFRBU0tfVVNFU19GTE9BVElOR19QT0lOVCgpICAgIHZQb3J0VGFza1VzZXNGUFUoKQ0KK2JlZm9yZSBhbnkgZmxvYXRpbmcgcG9pbnQgaW5zdHJ1Y3Rpb25zIGFyZSBleGVjdXRlZC4gKi8NCit2b2lkIHZQb3J0VGFza1VzZXNGUFUoIHZvaWQgKTsNCisjZGVmaW5lIHBvcnRUQVNLX1VTRVNfRkxPQVRJTkdfUE9JTlQoKSB2UG9ydFRhc2tVc2VzRlBVKCkNCiANCi0gICAgI2RlZmluZSBwb3J0TE9XRVNUX0lOVEVSUlVQVF9QUklPUklUWSAgICAgICAgICAgKCAoICggdWludDMyX3QgKSBjb25maWdVTklRVUVfSU5URVJSVVBUX1BSSU9SSVRJRVMgKSAtIDFVTCApDQotICAgICNkZWZpbmUgcG9ydExPV0VTVF9VU0FCTEVfSU5URVJSVVBUX1BSSU9SSVRZICAgICggcG9ydExPV0VTVF9JTlRFUlJVUFRfUFJJT1JJVFkgLSAxVUwgKQ0KKyNkZWZpbmUgcG9ydExPV0VTVF9JTlRFUlJVUFRfUFJJT1JJVFkgKCAoICggdWludDMyX3QgKSBjb25maWdVTklRVUVfSU5URVJSVVBUX1BSSU9SSVRJRVMgKSAtIDFVTCApDQorI2RlZmluZSBwb3J0TE9XRVNUX1VTQUJMRV9JTlRFUlJVUFRfUFJJT1JJVFkgKCBwb3J0TE9XRVNUX0lOVEVSUlVQVF9QUklPUklUWSAtIDFVTCApDQogDQogLyogQXJjaGl0ZWN0dXJlIHNwZWNpZmljIG9wdGltaXNhdGlvbnMuICovDQotICAgICNpZm5kZWYgY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9ODQotICAgICAgICAjZGVmaW5lIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiAgICAxDQotICAgICNlbmRpZg0KKyNpZm5kZWYgY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9ODQorCSNkZWZpbmUgY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OIDENCisjZW5kaWYNCiANCi0gICAgI2lmIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiA9PSAxDQorI2lmIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiA9PSAxDQogDQotLyogU3RvcmUvY2xlYXIgdGhlIHJlYWR5IHByaW9yaXRpZXMgaW4gYSBiaXQgbWFwLiAqLw0KLSAgICAgICAgI2RlZmluZSBwb3J0UkVDT1JEX1JFQURZX1BSSU9SSVRZKCB1eFByaW9yaXR5LCB1eFJlYWR5UHJpb3JpdGllcyApICAgICggdXhSZWFkeVByaW9yaXRpZXMgKSB8PSAoIDFVTCA8PCAoIHV4UHJpb3JpdHkgKSApDQotICAgICAgICAjZGVmaW5lIHBvcnRSRVNFVF9SRUFEWV9QUklPUklUWSggdXhQcmlvcml0eSwgdXhSZWFkeVByaW9yaXRpZXMgKSAgICAgKCB1eFJlYWR5UHJpb3JpdGllcyApICY9IH4oIDFVTCA8PCAoIHV4UHJpb3JpdHkgKSApDQorCS8qIFN0b3JlL2NsZWFyIHRoZSByZWFkeSBwcmlvcml0aWVzIGluIGEgYml0IG1hcC4gKi8NCisJI2RlZmluZSBwb3J0UkVDT1JEX1JFQURZX1BSSU9SSVRZKCB1eFByaW9yaXR5LCB1eFJlYWR5UHJpb3JpdGllcyApICggdXhSZWFkeVByaW9yaXRpZXMgKSB8PSAoIDFVTCA8PCAoIHV4UHJpb3JpdHkgKSApDQorCSNkZWZpbmUgcG9ydFJFU0VUX1JFQURZX1BSSU9SSVRZKCB1eFByaW9yaXR5LCB1eFJlYWR5UHJpb3JpdGllcyApICggdXhSZWFkeVByaW9yaXRpZXMgKSAmPSB+KCAxVUwgPDwgKCB1eFByaW9yaXR5ICkgKQ0KIA0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0gICAgICAgICNkZWZpbmUgcG9ydEdFVF9ISUdIRVNUX1BSSU9SSVRZKCB1eFRvcFByaW9yaXR5LCB1eFJlYWR5UHJpb3JpdGllcyApICAgIHV4VG9wUHJpb3JpdHkgPSAoIDMxIC0gX19jbHooIHV4UmVhZHlQcmlvcml0aWVzICkgKQ0KKwkjZGVmaW5lIHBvcnRHRVRfSElHSEVTVF9QUklPUklUWSggdXhUb3BQcmlvcml0eSwgdXhSZWFkeVByaW9yaXRpZXMgKSB1eFRvcFByaW9yaXR5ID0gKCAzMSAtIF9fY2x6KCB1eFJlYWR5UHJpb3JpdGllcyApICkNCiANCi0gICAgI2VuZGlmIC8qIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiAqLw0KKyNlbmRpZiAvKiBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gKi8NCiANCi0gICAgI2lmZGVmIGNvbmZpZ0FTU0VSVA0KLSAgICAgICAgdm9pZCB2UG9ydFZhbGlkYXRlSW50ZXJydXB0UHJpb3JpdHkoIHZvaWQgKTsNCi0gICAgICAgICNkZWZpbmUgcG9ydEFTU0VSVF9JRl9JTlRFUlJVUFRfUFJJT1JJVFlfSU5WQUxJRCgpICAgIHZQb3J0VmFsaWRhdGVJbnRlcnJ1cHRQcmlvcml0eSgpDQotICAgICNlbmRpZg0KKyNpZmRlZiBjb25maWdBU1NFUlQNCisJdm9pZCB2UG9ydFZhbGlkYXRlSW50ZXJydXB0UHJpb3JpdHkoIHZvaWQgKTsNCisJI2RlZmluZSBwb3J0QVNTRVJUX0lGX0lOVEVSUlVQVF9QUklPUklUWV9JTlZBTElEKCkgCXZQb3J0VmFsaWRhdGVJbnRlcnJ1cHRQcmlvcml0eSgpDQorI2VuZGlmDQogDQotICAgICNkZWZpbmUgcG9ydE5PUCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25vcCgpDQorI2RlZmluZSBwb3J0Tk9QKCkgX19ub3AoKQ0KIA0KLSAgICAjaWZkZWYgX19jcGx1c3BsdXMNCi0gICAgICAgIH0NCi0gICAgI2VuZGlmDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KIA0KICNlbmRpZiAvKiBQT1JUTUFDUk9fSCAqLw0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL1JWRFMvQVJNX0NNMC9wb3J0LmMgYi9wb3J0YWJsZS9SVkRTL0FSTV9DTTAvcG9ydC5jCmluZGV4IDg4ZDBiMTIuLmQ0ZTc2ZWUgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL1JWRFMvQVJNX0NNMC9wb3J0LmMKKysrIGIvcG9ydGFibGUvUlZEUy9BUk1fQ00wL3BvcnQuYwpAQCAtMTc3LDIwICsxNzcsMjEgQEAKICAgICAvKiBUaGUgTVNQIHN0YWNrIGlzIG5vdCByZXNldCBhcywgdW5saWtlIG9uIE0zLzQgcGFydHMsIHRoZXJlIGlzIG5vIHZlY3Rvcg0KICAgICAgKiB0YWJsZSBvZmZzZXQgcmVnaXN0ZXIgdGhhdCBjYW4gYmUgdXNlZCB0byBsb2NhdGUgdGhlIGluaXRpYWwgc3RhY2sgdmFsdWUuDQogICAgICAqIE5vdCBhbGwgTTAgcGFydHMgaGF2ZSB0aGUgYXBwbGljYXRpb24gdmVjdG9yIHRhYmxlIGF0IGFkZHJlc3MgMC4gKi8NCisgICAgLyogKklOREVOVC1PRkYqICovDQogDQogICAgIGxkciByMywgPSBweEN1cnJlbnRUQ0IgLyogT2J0YWluIGxvY2F0aW9uIG9mIHB4Q3VycmVudFRDQi4gKi8NCi0gICAgICAgICAgICAgIGxkciByMSwgWyByMyBdDQorICAgIGxkciByMSwgWyByMyBdDQogICAgIGxkciByMCwgWyByMSBdICAgICAgICAgLyogVGhlIGZpcnN0IGl0ZW0gaW4gcHhDdXJyZW50VENCIGlzIHRoZSB0YXNrIHRvcCBvZiBzdGFjay4gKi8NCiAgICAgYWRkcyByMCwgIyAzMiAgICAgICAgICAvKiBEaXNjYXJkIGV2ZXJ5dGhpbmcgdXAgdG8gcjAuICovDQogICAgIG1zciBwc3AsIHIwICAgICAgICAgICAgLyogVGhpcyBpcyBub3cgdGhlIG5ldyB0b3Agb2Ygc3RhY2sgdG8gdXNlIGluIHRoZSB0YXNrLiAqLw0KICAgICBtb3ZzIHIwLCAjIDIgICAgICAgICAgIC8qIFN3aXRjaCB0byB0aGUgcHNwIHN0YWNrLiAqLw0KICAgICBtc3IgQ09OVFJPTCwgcjANCiAgICAgaXNiDQotICAgICAgICBwb3Agew0KKyAgICBwb3Agew0KICAgICAgICAgcjAgLSByNQ0KICAgICB9IC8qIFBvcCB0aGUgcmVnaXN0ZXJzIHRoYXQgYXJlIHNhdmVkIGF1dG9tYXRpY2FsbHkuICovDQogICAgIG1vdiBsciwgcjUgLyogbHIgaXMgbm93IGluIHI1LiAqLw0KLSAgICAgICAgcG9wIHsNCisgICAgcG9wIHsNCiAgICAgICAgIHIzDQogICAgIH0gLyogVGhlIHJldHVybiBhZGRyZXNzIGlzIG5vdyBpbiByMy4gKi8NCiAgICAgcG9wIHsNCkBAIC0xOTksNyArMjAwLDggQEAKICAgICBjcHNpZSBpIC8qIFRoZSBmaXJzdCB0YXNrIGhhcyBpdHMgY29udGV4dCBhbmQgaW50ZXJydXB0cyBjYW4gYmUgZW5hYmxlZC4gKi8NCiAgICAgYnggcjMgLyogRmluYWxseSwganVtcCB0byB0aGUgdXNlciBkZWZpbmVkIHRhc2sgY29kZS4gKi8NCiANCi0gICAgICAgIEFMSUdODQorICAgIEFMSUdODQorLyogKklOREVOVC1PTiogKi8NCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQpAQCAtMjg5LDEyICsyOTEsMTMgQEAKICAgICBleHRlcm4gdlRhc2tTd2l0Y2hDb250ZXh0DQogICAgIGV4dGVybiBweEN1cnJlbnRUQ0INCiANCisvKiAqSU5ERU5ULU9GRiogKi8NCiAgICAgUFJFU0VSVkU4DQogDQogICAgIG1ycyByMCwgcHNwDQogDQogICAgIGxkciByMywgPSBweEN1cnJlbnRUQ0IgLyogR2V0IHRoZSBsb2NhdGlvbiBvZiB0aGUgY3VycmVudCBUQ0IuICovDQotICAgICAgICAgICAgICBsZHIgcjIsIFsgcjMgXQ0KKyAgICBsZHIgcjIsIFsgcjMgXQ0KIA0KICAgICBzdWJzIHIwLCAjIDMyICAvKiBNYWtlIHNwYWNlIGZvciB0aGUgcmVtYWluaW5nIGxvdyByZWdpc3RlcnMuICovDQogICAgIHN0ciByMCwgWyByMiBdIC8qIFNhdmUgdGhlIG5ldyB0b3Agb2Ygc3RhY2suICovDQpAQCAtMzE1LDcgKzMxOCw3IEBACiAgICAgY3BzaWQgaQ0KICAgICBibCB2VGFza1N3aXRjaENvbnRleHQNCiAgICAgY3BzaWUgaQ0KLSAgICAgICAgcG9wIHsNCisgICAgcG9wIHsNCiAgICAgICAgIHIyLCByMw0KICAgICB9IC8qIGxyIGdvZXMgaW4gcjMuIHIyIG5vdyBob2xkcyB0Y2IgcG9pbnRlci4gKi8NCiANCkBAIC0zMzgsNyArMzQxLDggQEAKICAgICB9IC8qIFBvcCBsb3cgcmVnaXN0ZXJzLiAgKi8NCiANCiAgICAgYnggcjMNCi0gICAgICAgIEFMSUdODQorICAgIEFMSUdODQorLyogKklOREVOVC1PTiogKi8NCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvUlZEUy9BUk1fQ00zL3BvcnQuYyBiL3BvcnRhYmxlL1JWRFMvQVJNX0NNMy9wb3J0LmMKaW5kZXggNWFjOWQyYy4uZWFkMjg2OSAxMDA2NDQKLS0tIGEvcG9ydGFibGUvUlZEUy9BUk1fQ00zL3BvcnQuYworKysgYi9wb3J0YWJsZS9SVkRTL0FSTV9DTTMvcG9ydC5jCkBAIC0yMTMsMTAgKzIxMywxMSBAQAogDQogX19hc20gdm9pZCB2UG9ydFNWQ0hhbmRsZXIoIHZvaWQgKQ0KIHsNCisvKiAqSU5ERU5ULU9GRiogKi8NCiAgICAgUFJFU0VSVkU4DQogDQogICAgIGxkciByMywgPSBweEN1cnJlbnRUQ0IgICAvKiBSZXN0b3JlIHRoZSBjb250ZXh0LiAqLw0KLSAgICAgICAgICAgICAgbGRyIHIxLCBbIHIzIF0gLyogVXNlIHB4Q3VycmVudFRDQkNvbnN0IHRvIGdldCB0aGUgcHhDdXJyZW50VENCIGFkZHJlc3MuICovDQorICAgIGxkciByMSwgWyByMyBdIC8qIFVzZSBweEN1cnJlbnRUQ0JDb25zdCB0byBnZXQgdGhlIHB4Q3VycmVudFRDQiBhZGRyZXNzLiAqLw0KICAgICBsZHIgcjAsIFsgcjEgXSAgICAgICAgICAgLyogVGhlIGZpcnN0IGl0ZW0gaW4gcHhDdXJyZW50VENCIGlzIHRoZSB0YXNrIHRvcCBvZiBzdGFjay4gKi8NCiAgICAgbGRtaWEgcjAgISwgew0KICAgICAgICAgcjQgLSByMTENCkBAIC0yMjcsMTYgKzIyOCwxOCBAQAogICAgIG1zciBiYXNlcHJpLCByMA0KICAgICBvcnIgcjE0LCAjIDB4ZA0KICAgICBieCByMTQNCisvKiAqSU5ERU5ULU9OKiAqLw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBfX2FzbSB2b2lkIHBydlN0YXJ0Rmlyc3RUYXNrKCB2b2lkICkNCiB7DQorLyogKklOREVOVC1PRkYqICovDQogICAgIFBSRVNFUlZFOA0KIA0KICAgICAvKiBVc2UgdGhlIE5WSUMgb2Zmc2V0IHJlZ2lzdGVyIHRvIGxvY2F0ZSB0aGUgc3RhY2suICovDQogICAgIGxkciByMCwgPSAweEUwMDBFRDA4DQotICAgICAgICAgICAgICBsZHIgcjAsIFsgcjAgXQ0KKyAgICBsZHIgcjAsIFsgcjAgXQ0KICAgICBsZHIgcjAsIFsgcjAgXQ0KIA0KICAgICAvKiBTZXQgdGhlIG1zcCBiYWNrIHRvIHRoZSBzdGFydCBvZiB0aGUgc3RhY2suICovDQpAQCAtMjQ3LDkgKzI1MCwxMCBAQAogICAgIGRzYg0KICAgICBpc2INCiAgICAgLyogQ2FsbCBTVkMgdG8gc3RhcnQgdGhlIGZpcnN0IHRhc2suICovDQotICAgICAgICBzdmMgMA0KKyAgICBzdmMgMA0KICAgICBub3ANCi0gICAgICAgIG5vcA0KKyAgICBub3ANCisvKiAqSU5ERU5ULU9OKiAqLw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCkBAIC0zODgsMTMgKzM5MiwxNCBAQAogICAgIGV4dGVybiBweEN1cnJlbnRUQ0I7DQogICAgIGV4dGVybiB2VGFza1N3aXRjaENvbnRleHQ7DQogDQorLyogKklOREVOVC1PRkYqICovDQogICAgIFBSRVNFUlZFOA0KIA0KICAgICBtcnMgcjAsIHBzcA0KICAgICBpc2INCiANCi0gICAgbGRyIHIzLCA9IHB4Q3VycmVudFRDQiAvKiBHZXQgdGhlIGxvY2F0aW9uIG9mIHRoZSBjdXJyZW50IFRDQi4gKi8NCi0gICAgICAgICAgICAgIGxkciByMiwgWyByMyBdDQorICAgIGxkciByMywgPXB4Q3VycmVudFRDQiAvKiBHZXQgdGhlIGxvY2F0aW9uIG9mIHRoZSBjdXJyZW50IFRDQi4gKi8NCisgICAgbGRyIHIyLCBbIHIzIF0NCiANCiAgICAgc3RtZGIgcjAgISwgew0KICAgICAgICAgcjQgLSByMTENCkBAIC00MDQsMTIgKzQwOSwxMiBAQAogICAgIHN0bWRiIHNwICEsIHsNCiAgICAgICAgIHIzLCByMTQNCiAgICAgfQ0KLSAgICBtb3YgcjAsICMgY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZDQorICAgIG1vdiByMCwgI2NvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWQ0KICAgICBtc3IgYmFzZXByaSwgcjANCiAgICAgZHNiDQogICAgIGlzYg0KICAgICBibCB2VGFza1N3aXRjaENvbnRleHQNCi0gICAgbW92IHIwLCAjIDANCisgICAgbW92IHIwLCAjMA0KICAgICBtc3IgYmFzZXByaSwgcjANCiAgICAgbGRtaWEgc3AgISwgew0KICAgICAgICAgcjMsIHIxNA0KQEAgLTQyMyw3ICs0MjgsOCBAQAogICAgIG1zciBwc3AsIHIwDQogICAgIGlzYg0KICAgICBieCByMTQNCi0gICAgICAgIG5vcA0KKyAgICBub3ANCisvKiAqSU5ERU5ULU9OKiAqLw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCkBAIC02NTEsMTAgKzY1NywxMiBAQAogDQogX19hc20gdWludDMyX3QgdlBvcnRHZXRJUFNSKCB2b2lkICkNCiB7DQorLyogKklOREVOVC1PRkYqICovDQogICAgIFBSRVNFUlZFOA0KIA0KICAgICBtcnMgcjAsIGlwc3INCiAgICAgYnggcjE0DQorLyogKklOREVOVC1PTiogKi8NCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvUlZEUy9BUk1fQ000Ri9wb3J0LmMgYi9wb3J0YWJsZS9SVkRTL0FSTV9DTTRGL3BvcnQuYwppbmRleCA0ODhlNTE2Li45YmY5MmU2IDEwMDY0NAotLS0gYS9wb3J0YWJsZS9SVkRTL0FSTV9DTTRGL3BvcnQuYworKysgYi9wb3J0YWJsZS9SVkRTL0FSTV9DTTRGL3BvcnQuYwpAQCAtMjQwLDYgKzI0MCw3IEBACiANCiBfX2FzbSB2b2lkIHZQb3J0U1ZDSGFuZGxlciggdm9pZCApDQogew0KKy8qICpJTkRFTlQtT0ZGKiAqLw0KICAgICBQUkVTRVJWRTgNCiANCiAgICAgLyogR2V0IHRoZSBsb2NhdGlvbiBvZiB0aGUgY3VycmVudCBUQ0IuICovDQpAQCAtMjU1LDE2ICsyNTYsMTggQEAKICAgICBtb3YgcjAsICMgMA0KICAgICBtc3IgYmFzZXByaSwgcjANCiAgICAgYnggcjE0DQorLyogKklOREVOVC1PTiogKi8NCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogX19hc20gdm9pZCBwcnZTdGFydEZpcnN0VGFzayggdm9pZCApDQogew0KKy8qICpJTkRFTlQtT0ZGKiAqLw0KICAgICBQUkVTRVJWRTgNCiANCiAgICAgLyogVXNlIHRoZSBOVklDIG9mZnNldCByZWdpc3RlciB0byBsb2NhdGUgdGhlIHN0YWNrLiAqLw0KLSAgICBsZHIgcjAsID0gMHhFMDAwRUQwOA0KLSAgICAgICAgICAgICAgbGRyIHIwLCBbIHIwIF0NCisgICAgbGRyIHIwLCA9MHhFMDAwRUQwOA0KKyAgICBsZHIgcjAsIFsgcjAgXQ0KICAgICBsZHIgcjAsIFsgcjAgXQ0KICAgICAvKiBTZXQgdGhlIG1zcCBiYWNrIHRvIHRoZSBzdGFydCBvZiB0aGUgc3RhY2suICovDQogICAgIG1zciBtc3AsIHIwDQpAQCAtMjczLDcgKzI3Niw3IEBACiAgICAgICogYmVmb3JlIHRoZSBzY2hlZHVsZXIgd2FzIHN0YXJ0ZWQgLSB3aGljaCB3b3VsZCBvdGhlcndpc2UgcmVzdWx0IGluIHRoZQ0KICAgICAgKiB1bm5lY2Vzc2FyeSBsZWF2aW5nIG9mIHNwYWNlIGluIHRoZSBTVkMgc3RhY2sgZm9yIGxhenkgc2F2aW5nIG9mIEZQVQ0KICAgICAgKiByZWdpc3RlcnMuICovDQotICAgIG1vdiByMCwgIyAwDQorICAgIG1vdiByMCwgIzANCiAgICAgbXNyIGNvbnRyb2wsIHIwDQogICAgIC8qIEdsb2JhbGx5IGVuYWJsZSBpbnRlcnJ1cHRzLiAqLw0KICAgICBjcHNpZSBpDQpAQCAtMjgxLDI1ICsyODQsMjggQEAKICAgICBkc2INCiAgICAgaXNiDQogICAgIC8qIENhbGwgU1ZDIHRvIHN0YXJ0IHRoZSBmaXJzdCB0YXNrLiAqLw0KLSAgICAgICAgc3ZjIDANCisgICAgc3ZjIDANCiAgICAgbm9wDQotICAgICAgICBub3ANCisgICAgbm9wDQorLyogKklOREVOVC1PTiogKi8NCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogX19hc20gdm9pZCBwcnZFbmFibGVWRlAoIHZvaWQgKQ0KIHsNCisvKiAqSU5ERU5ULU9GRiogKi8NCiAgICAgUFJFU0VSVkU4DQogDQogICAgIC8qIFRoZSBGUFUgZW5hYmxlIGJpdHMgYXJlIGluIHRoZSBDUEFDUi4gKi8NCi0gICAgbGRyLncgcjAsID0gMHhFMDAwRUQ4OA0KLSAgICAgICAgICAgICAgICBsZHIgcjEsIFsgcjAgXQ0KKyAgICBsZHIudyByMCwgPTB4RTAwMEVEODgNCisgICAgbGRyIHIxLCBbIHIwIF0NCiANCiAgICAgLyogRW5hYmxlIENQMTAgYW5kIENQMTEgY29wcm9jZXNzb3JzLCB0aGVuIHNhdmUgYmFjay4gKi8NCiAgICAgb3JyIHIxLCByMSwgIyAoIDB4ZiA8PCAyMCApDQogICAgIHN0ciByMSwgWyByMCBdDQogICAgIGJ4IHIxNA0KICAgICBub3ANCisvKiAqSU5ERU5ULU9OKiAqLw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCkBAIC00NTMsMTYgKzQ1OSwxNyBAQAogICAgIGV4dGVybiBweEN1cnJlbnRUQ0I7DQogICAgIGV4dGVybiB2VGFza1N3aXRjaENvbnRleHQ7DQogDQorLyogKklOREVOVC1PRkYqICovDQogICAgIFBSRVNFUlZFOA0KIA0KICAgICBtcnMgcjAsIHBzcA0KICAgICBpc2INCiAgICAgLyogR2V0IHRoZSBsb2NhdGlvbiBvZiB0aGUgY3VycmVudCBUQ0IuICovDQotICAgIGxkciByMywgPSBweEN1cnJlbnRUQ0INCi0gICAgICAgICAgICAgIGxkciByMiwgWyByMyBdDQorICAgIGxkciByMywgPXB4Q3VycmVudFRDQg0KKyAgICBsZHIgcjIsIFsgcjMgXQ0KIA0KICAgICAvKiBJcyB0aGUgdGFzayB1c2luZyB0aGUgRlBVIGNvbnRleHQ/ICBJZiBzbywgcHVzaCBoaWdoIHZmcCByZWdpc3RlcnMuICovDQotICAgIHRzdCByMTQsICMgMHgxMA0KKyAgICB0c3QgcjE0LCAjMHgxMA0KICAgICBpdCBlcQ0KICAgICB2c3RtZGJlcSByMCAhLCB7DQogICAgICAgICBzMTYgLSBzMzENCkBAIC01MDgsNyArNTE1LDcgQEAKICAgICB9DQogDQogICAgIG1zciBwc3AsIHIwDQotICAgICAgICBpc2INCisgICAgaXNiDQogICAgICNpZmRlZiBXT1JLQVJPVU5EX1BNVV9DTTAwMSAvKiBYTUM0MDAwIHNwZWNpZmljIGVycmF0YSAqLw0KICAgICAgICAgI2lmIFdPUktBUk9VTkRfUE1VX0NNMDAxID09IDENCiAgICAgICAgICAgICBwdXNoIHsNCkBAIC01MjIsNiArNTI5LDcgQEAKICAgICAjZW5kaWYNCiANCiAgICAgYnggcjE0DQorLyogKklOREVOVC1PTiogKi8NCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQpAQCAtNzQ5LDEwICs3NTcsMTIgQEAKIA0KIF9fYXNtIHVpbnQzMl90IHZQb3J0R2V0SVBTUiggdm9pZCApDQogew0KKy8qICpJTkRFTlQtT0ZGKiAqLw0KICAgICBQUkVTRVJWRTgNCiANCiAgICAgbXJzIHIwLCBpcHNyDQogICAgIGJ4IHIxNA0KKy8qICpJTkRFTlQtT04qICovDQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL1JWRFMvQVJNX0NNNF9NUFUvcG9ydC5jIGIvcG9ydGFibGUvUlZEUy9BUk1fQ000X01QVS9wb3J0LmMKaW5kZXggMTgyMjhmNC4uMDA1ODgxYSAxMDA2NDQKLS0tIGEvcG9ydGFibGUvUlZEUy9BUk1fQ000X01QVS9wb3J0LmMKKysrIGIvcG9ydGFibGUvUlZEUy9BUk1fQ000X01QVS9wb3J0LmMKQEAgLTMxMCw3ICszMTAsOCBAQAogew0KICAgICBleHRlcm4gcHJ2U1ZDSGFuZGxlcg0KIA0KLSAgICBQUkVTRVJWRTgNCisvKiAqSU5ERU5ULU9GRiogKi8NCisgICAgICAgIFBSRVNFUlZFOA0KIA0KICAgICAvKiBBc3N1bWVzIHBzcCB3YXMgaW4gdXNlLiAqLw0KICAgICAjaWZuZGVmIFVTRV9QUk9DRVNTX1NUQUNLICAgLyogQ29kZSBzaG91bGQgbm90IGJlIHJlcXVpcmVkIGlmIGEgbWFpbigpIGlzIHVzaW5nIHRoZSBwcm9jZXNzIHN0YWNrLiAqLw0KQEAgLTMyMyw1MiArMzI0LDY5IEBACiAgICAgI2VuZGlmDQogDQogICAgIGIgcHJ2U1ZDSGFuZGxlcg0KKy8qICpJTkRFTlQtT04qICovDQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIF9fYXNtIHZvaWQgcHJ2UmVzdG9yZUNvbnRleHRPZkZpcnN0VGFzayggdm9pZCApDQogew0KKy8qICpJTkRFTlQtT0ZGKiAqLw0KICAgICBQUkVTRVJWRTgNCiANCi0gICAgbGRyIHIwLCA9IDB4RTAwMEVEMDggICAgICAgIC8qIFVzZSB0aGUgTlZJQyBvZmZzZXQgcmVnaXN0ZXIgdG8gbG9jYXRlIHRoZSBzdGFjay4gKi8NCisgICAgbGRyIHIwLCA9MHhFMDAwRUQwOCAvKiBVc2UgdGhlIE5WSUMgb2Zmc2V0IHJlZ2lzdGVyIHRvIGxvY2F0ZSB0aGUgc3RhY2suICovDQogICAgIGxkciByMCwgWyByMCBdDQogICAgIGxkciByMCwgWyByMCBdDQotICAgIG1zciBtc3AsIHIwICAgICAgICAgICAgICAgICAvKiBTZXQgdGhlIG1zcCBiYWNrIHRvIHRoZSBzdGFydCBvZiB0aGUgc3RhY2suICovDQotICAgIGxkciByMywgPSBweEN1cnJlbnRUQ0IgICAgICAvKiBSZXN0b3JlIHRoZSBjb250ZXh0LiAqLw0KKyAgICBtc3IgbXNwLCByMCAgICAgICAgICAgICAgLyogU2V0IHRoZSBtc3AgYmFjayB0byB0aGUgc3RhcnQgb2YgdGhlIHN0YWNrLiAqLw0KKyAgICBsZHIgcjMsID1weEN1cnJlbnRUQ0IgICAvKiBSZXN0b3JlIHRoZSBjb250ZXh0LiAqLw0KICAgICBsZHIgcjEsIFsgcjMgXQ0KLSAgICBsZHIgcjAsIFsgcjEgXSAgICAgICAgICAgICAgLyogVGhlIGZpcnN0IGl0ZW0gaW4gdGhlIFRDQiBpcyB0aGUgdGFzayB0b3Agb2Ygc3RhY2suICovDQotICAgIGFkZCByMSwgcjEsICMgNCAgICAgICAgICAgICAvKiBNb3ZlIG9udG8gdGhlIHNlY29uZCBpdGVtIGluIHRoZSBUQ0IuLi4gKi8NCisgICAgbGRyIHIwLCBbIHIxIF0gICAgICAgICAgIC8qIFRoZSBmaXJzdCBpdGVtIGluIHRoZSBUQ0IgaXMgdGhlIHRhc2sgdG9wIG9mIHN0YWNrLiAqLw0KKyAgICBhZGQgcjEsIHIxLCAjNCAgICAgICAgICAvKiBNb3ZlIG9udG8gdGhlIHNlY29uZCBpdGVtIGluIHRoZSBUQ0IuLi4gKi8NCiANCi0gICAgZG1iICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbXBsZXRlIG91dHN0YW5kaW5nIHRyYW5zZmVycyBiZWZvcmUgZGlzYWJsaW5nIE1QVS4gKi8NCi0gICAgbGRyIHIyLCA9IDB4ZTAwMGVkOTQgICAgICAgIC8qIE1QVV9DVFJMIHJlZ2lzdGVyLiAqLw0KLSAgICBsZHIgcjMsIFsgcjIgXSAgICAgICAgICAgICAgLyogUmVhZCB0aGUgdmFsdWUgb2YgTVBVX0NUUkwuICovDQotICAgIGJpYyByMywgcjMsICMgMSAgICAgICAgICAgICAvKiByMyA9IHIzICYgfjEgaS5lLiBDbGVhciB0aGUgYml0IDAgaW4gcjMuICovDQotICAgIHN0ciByMywgWyByMiBdICAgICAgICAgICAgICAvKiBEaXNhYmxlIE1QVS4gKi8NCisgICAgZG1iICAgICAgICAgICAgICAgICAgICAgIC8qIENvbXBsZXRlIG91dHN0YW5kaW5nIHRyYW5zZmVycyBiZWZvcmUgZGlzYWJsaW5nIE1QVS4gKi8NCisgICAgbGRyIHIyLCA9MHhlMDAwZWQ5NCAgICAgLyogTVBVX0NUUkwgcmVnaXN0ZXIuICovDQorICAgIGxkciByMywgWyByMiBdIC8qIFJlYWQgdGhlIHZhbHVlIG9mIE1QVV9DVFJMLiAqLw0KKyAgICBiaWMgcjMsIHIzLCAjIDEgICAgICAgICAgLyogcjMgPSByMyAmIH4xIGkuZS4gQ2xlYXIgdGhlIGJpdCAwIGluIHIzLiAqLw0KKyAgICBzdHIgcjMsIFsgcjIgXSAgICAgICAgICAgLyogRGlzYWJsZSBNUFUuICovDQogDQotICAgIGxkciByMiwgPSAweGUwMDBlZDljICAgICAgICAvKiBSZWdpb24gQmFzZSBBZGRyZXNzIHJlZ2lzdGVyLiAqLw0KLSAgICBsZG1pYSByMSEsIHtyNC1yMTF9ICAgICAgICAgLyogUmVhZCA0IHNldHMgb2YgTVBVIHJlZ2lzdGVycyBbTVBVIFJlZ2lvbiAjIDQgLSA3XS4gKi8NCi0gICAgc3RtaWEgcjIsIHtyNC1yMTF9ICAgICAgICAgIC8qIFdyaXRlIDQgc2V0cyBvZiBNUFUgcmVnaXN0ZXJzIFtNUFUgUmVnaW9uICMgNCAtIDddLiAqLw0KKyAgICBsZHIgcjIsID0weGUwMDBlZDljICAgICAvKiBSZWdpb24gQmFzZSBBZGRyZXNzIHJlZ2lzdGVyLiAqLw0KKyAgICBsZG1pYSByMSAhLCB7DQorICAgICAgICByNCAtIHIxMQ0KKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVhZCA0IHNldHMgb2YgTVBVIHJlZ2lzdGVycyBbTVBVIFJlZ2lvbiAjIDQgLSA3XS4gKi8NCisgICAgc3RtaWEgcjIsIHsNCisgICAgICAgIHI0IC0gcjExDQorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXcml0ZSA0IHNldHMgb2YgTVBVIHJlZ2lzdGVycyBbTVBVIFJlZ2lvbiAjIDQgLSA3XS4gKi8NCiANCi0jaWYgKCBwb3J0VE9UQUxfTlVNX1JFR0lPTlMgPT0gMTYgKQ0KLSAgICBsZG1pYSByMSEsIHtyNC1yMTF9ICAgICAgICAgLyogUmVhZCA0IHNldHMgb2YgTVBVIHJlZ2lzdGVycyBbTVBVIFJlZ2lvbiAjIDggLSAxMV0uICovDQotICAgIHN0bWlhIHIyLCB7cjQtcjExfSAgICAgICAgICAvKiBXcml0ZSA0IHNldHMgb2YgTVBVIHJlZ2lzdGVycy4gW01QVSBSZWdpb24gIyA4IC0gMTFdLiAqLw0KLSAgICBsZG1pYSByMSEsIHtyNC1yMTF9ICAgICAgICAgLyogUmVhZCA0IHNldHMgb2YgTVBVIHJlZ2lzdGVycyBbTVBVIFJlZ2lvbiAjIDEyIC0gMTVdLiAqLw0KLSAgICBzdG1pYSByMiwge3I0LXIxMX0gICAgICAgICAgLyogV3JpdGUgNCBzZXRzIG9mIE1QVSByZWdpc3RlcnMuIFtNUFUgUmVnaW9uICMgMTIgLSAxNV0uICovDQotI2VuZGlmIC8qIHBvcnRUT1RBTF9OVU1fUkVHSU9OUyA9PSAxNi4gKi8NCisgICAgI2lmICggcG9ydFRPVEFMX05VTV9SRUdJT05TID09IDE2ICkNCisgICAgICAgIGxkbWlhIHIxICEsIHsNCisgICAgICAgICAgICByNCAtIHIxMQ0KKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgLyogUmVhZCA0IHNldHMgb2YgTVBVIHJlZ2lzdGVycyBbTVBVIFJlZ2lvbiAjIDggLSAxMV0uICovDQorICAgICAgICBzdG1pYSByMiwgew0KKyAgICAgICAgICAgIHI0IC0gcjExDQorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAvKiBXcml0ZSA0IHNldHMgb2YgTVBVIHJlZ2lzdGVycy4gW01QVSBSZWdpb24gIyA4IC0gMTFdLiAqLw0KKyAgICAgICAgbGRtaWEgcjEgISwgew0KKyAgICAgICAgICAgIHI0IC0gcjExDQorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAvKiBSZWFkIDQgc2V0cyBvZiBNUFUgcmVnaXN0ZXJzIFtNUFUgUmVnaW9uICMgMTIgLSAxNV0uICovDQorICAgICAgICBzdG1pYSByMiwgew0KKyAgICAgICAgICAgIHI0IC0gcjExDQorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAvKiBXcml0ZSA0IHNldHMgb2YgTVBVIHJlZ2lzdGVycy4gW01QVSBSZWdpb24gIyAxMiAtIDE1XS4gKi8NCisgICAgI2VuZGlmIC8qIHBvcnRUT1RBTF9OVU1fUkVHSU9OUyA9PSAxNi4gKi8NCiANCi0gICAgbGRyIHIyLCA9IDB4ZTAwMGVkOTQgICAgICAgIC8qIE1QVV9DVFJMIHJlZ2lzdGVyLiAqLw0KLSAgICBsZHIgcjMsIFsgcjIgXSAgICAgICAgICAgICAgLyogUmVhZCB0aGUgdmFsdWUgb2YgTVBVX0NUUkwuICovDQotICAgIG9yciByMywgcjMsICMgMSAgICAgICAgICAgICAvKiByMyA9IHIzIHwgMSBpLmUuIFNldCB0aGUgYml0IDAgaW4gcjMuICovDQotICAgIHN0ciByMywgWyByMiBdICAgICAgICAgICAgICAvKiBFbmFibGUgTVBVLiAqLw0KLSAgICBkc2IgICAgICAgICAgICAgICAgICAgICAgICAgLyogRm9yY2UgbWVtb3J5IHdyaXRlcyBiZWZvcmUgY29udGludWluZy4gKi8NCisgICAgbGRyIHIyLCA9MHhlMDAwZWQ5NCAgICAgLyogTVBVX0NUUkwgcmVnaXN0ZXIuICovDQorICAgIGxkciByMywgWyByMiBdIC8qIFJlYWQgdGhlIHZhbHVlIG9mIE1QVV9DVFJMLiAqLw0KKyAgICBvcnIgcjMsIHIzLCAjMSAgICAgICAgICAvKiByMyA9IHIzIHwgMSBpLmUuIFNldCB0aGUgYml0IDAgaW4gcjMuICovDQorICAgIHN0ciByMywgWyByMiBdICAgICAgICAgICAvKiBFbmFibGUgTVBVLiAqLw0KKyAgICBkc2IgICAgICAgICAgICAgICAgICAgICAgLyogRm9yY2UgbWVtb3J5IHdyaXRlcyBiZWZvcmUgY29udGludWluZy4gKi8NCiANCi0gICAgbGRtaWEgcjAhLCB7cjMtcjExLCByMTR9ICAgIC8qIFBvcCB0aGUgcmVnaXN0ZXJzIHRoYXQgYXJlIG5vdCBhdXRvbWF0aWNhbGx5IHNhdmVkIG9uIGV4Y2VwdGlvbiBlbnRyeS4gKi8NCisgICAgbGRtaWEgcjAgISwgew0KKyAgICAgICAgcjMgLSByMTEsIHIxNA0KKyAgICB9ICAgICAgICAgICAvKiBQb3AgdGhlIHJlZ2lzdGVycyB0aGF0IGFyZSBub3QgYXV0b21hdGljYWxseSBzYXZlZCBvbiBleGNlcHRpb24gZW50cnkuICovDQogICAgIG1zciBjb250cm9sLCByMw0KLSAgICBtc3IgcHNwLCByMCAgICAgICAgICAgICAgICAgLyogUmVzdG9yZSB0aGUgdGFzayBzdGFjayBwb2ludGVyLiAqLw0KLSAgICBtb3YgcjAsICMgMA0KKyAgICBtc3IgcHNwLCByMCAvKiBSZXN0b3JlIHRoZSB0YXNrIHN0YWNrIHBvaW50ZXIuICovDQorICAgIG1vdiByMCwgIzANCiAgICAgbXNyIGJhc2VwcmksIHIwDQogICAgIGJ4IHIxNA0KICAgICBub3ANCisvKiAqSU5ERU5ULU9OKiAqLw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCkBAIC00NzYsMTAgKzQ5NCwxMSBAQAogDQogX19hc20gdm9pZCBwcnZTdGFydEZpcnN0VGFzayggdm9pZCApDQogew0KKy8qICpJTkRFTlQtT0ZGKiAqLw0KICAgICBQUkVTRVJWRTgNCiANCiAgICAgLyogVXNlIHRoZSBOVklDIG9mZnNldCByZWdpc3RlciB0byBsb2NhdGUgdGhlIHN0YWNrLiAqLw0KLSAgICBsZHIgcjAsID0gMHhFMDAwRUQwOA0KKyAgICBsZHIgcjAsID0weEUwMDBFRDA4DQogICAgIGxkciByMCwgWyByMCBdDQogICAgIGxkciByMCwgWyByMCBdDQogICAgIC8qIFNldCB0aGUgbXNwIGJhY2sgdG8gdGhlIHN0YXJ0IG9mIHRoZSBzdGFjay4gKi8NCkBAIC00ODksNyArNTA4LDcgQEAKICAgICAgKiBiZWZvcmUgdGhlIHNjaGVkdWxlciB3YXMgc3RhcnRlZCAtIHdoaWNoIHdvdWxkIG90aGVyd2lzZSByZXN1bHQgaW4gdGhlDQogICAgICAqIHVubmVjZXNzYXJ5IGxlYXZpbmcgb2Ygc3BhY2UgaW4gdGhlIFNWQyBzdGFjayBmb3IgbGF6eSBzYXZpbmcgb2YgRlBVDQogICAgICAqIHJlZ2lzdGVycy4gKi8NCi0gICAgbW92IHIwLCAjIDANCisgICAgbW92IHIwLCAjMA0KICAgICBtc3IgY29udHJvbCwgcjANCiAgICAgLyogR2xvYmFsbHkgZW5hYmxlIGludGVycnVwdHMuICovDQogICAgIGNwc2llIGkNCkBAIC00OTksNiArNTE4LDcgQEAKICAgICBzdmMgcG9ydFNWQ19TVEFSVF9TQ0hFRFVMRVIgLyogU3lzdGVtIGNhbGwgdG8gc3RhcnQgZmlyc3QgdGFzay4gKi8NCiAgICAgbm9wDQogICAgIG5vcA0KKy8qICpJTkRFTlQtT04qICovDQogfQ0KIA0KIHZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQ0KQEAgLTU0Miw2OCArNTYyLDk0IEBACiAgICAgZXh0ZXJuIHB4Q3VycmVudFRDQjsNCiAgICAgZXh0ZXJuIHZUYXNrU3dpdGNoQ29udGV4dDsNCiANCisvKiAqSU5ERU5ULU9GRiogKi8NCiAgICAgUFJFU0VSVkU4DQogDQogICAgIG1ycyByMCwgcHNwDQogDQotICAgIGxkciByMywgPSBweEN1cnJlbnRUQ0IgICAgICAgICAgLyogR2V0IHRoZSBsb2NhdGlvbiBvZiB0aGUgY3VycmVudCBUQ0IuICovDQorICAgIGxkciByMywgPXB4Q3VycmVudFRDQiAvKiBHZXQgdGhlIGxvY2F0aW9uIG9mIHRoZSBjdXJyZW50IFRDQi4gKi8NCiAgICAgbGRyIHIyLCBbIHIzIF0NCiANCi0gICAgdHN0IHIxNCwgIyAweDEwICAgICAgICAgICAgICAgICAvKiBJcyB0aGUgdGFzayB1c2luZyB0aGUgRlBVIGNvbnRleHQ/ICBJZiBzbywgcHVzaCBoaWdoIHZmcCByZWdpc3RlcnMuICovDQorICAgIHRzdCByMTQsICMweDEwIC8qIElzIHRoZSB0YXNrIHVzaW5nIHRoZSBGUFUgY29udGV4dD8gIElmIHNvLCBwdXNoIGhpZ2ggdmZwIHJlZ2lzdGVycy4gKi8NCiAgICAgaXQgZXENCi0gICAgdnN0bWRiZXEgcjAhLCB7czE2LXMzMX0NCisgICAgdnN0bWRiZXEgcjAgISwgew0KKyAgICAgICAgczE2IC0gczMxDQorICAgIH0NCiANCiAgICAgbXJzIHIxLCBjb250cm9sDQotICAgIHN0bWRiIHIwISwge3IxLCByNC1yMTEsIHIxNH0gICAgLyogU2F2ZSB0aGUgcmVtYWluaW5nIHJlZ2lzdGVycy4gKi8NCi0gICAgc3RyIHIwLCBbIHIyIF0gICAgICAgICAgICAgICAgICAvKiBTYXZlIHRoZSBuZXcgdG9wIG9mIHN0YWNrIGludG8gdGhlIGZpcnN0IG1lbWJlciBvZiB0aGUgVENCLiAqLw0KKyAgICBzdG1kYiByMCAhLCB7DQorICAgICAgICByMSwgcjQgLSByMTEsIHIxNA0KKyAgICB9ICAgICAgICAgICAgICAvKiBTYXZlIHRoZSByZW1haW5pbmcgcmVnaXN0ZXJzLiAqLw0KKyAgICBzdHIgcjAsIFsgcjIgXSAvKiBTYXZlIHRoZSBuZXcgdG9wIG9mIHN0YWNrIGludG8gdGhlIGZpcnN0IG1lbWJlciBvZiB0aGUgVENCLiAqLw0KIA0KLSAgICBzdG1kYiBzcCEsIHtyMCwgcjN9DQorICAgIHN0bWRiIHNwICEsIHsNCisgICAgICAgIHIwLCByMw0KKyAgICB9DQogICAgIG1vdiByMCwgIyBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkNCiAgICAgbXNyIGJhc2VwcmksIHIwDQogICAgIGRzYg0KICAgICBpc2INCiAgICAgYmwgdlRhc2tTd2l0Y2hDb250ZXh0DQotICAgIG1vdiByMCwgIyAwDQorICAgIG1vdiByMCwgIzANCiAgICAgbXNyIGJhc2VwcmksIHIwDQotICAgIGxkbWlhIHNwISwge3IwLCByM30NCisgICAgbGRtaWEgc3AgISwgew0KKyAgICAgICAgcjAsIHIzDQorICAgIH0NCiAgICAgLyogUmVzdG9yZSB0aGUgY29udGV4dC4gKi8NCiAgICAgbGRyIHIxLCBbIHIzIF0NCi0gICAgbGRyIHIwLCBbIHIxIF0gICAgICAgICAgICAgICAgICAvKiBUaGUgZmlyc3QgaXRlbSBpbiB0aGUgVENCIGlzIHRoZSB0YXNrIHRvcCBvZiBzdGFjay4gKi8NCi0gICAgYWRkIHIxLCByMSwgIyA0ICAgICAgICAgICAgICAgICAvKiBNb3ZlIG9udG8gdGhlIHNlY29uZCBpdGVtIGluIHRoZSBUQ0IuLi4gKi8NCisgICAgbGRyIHIwLCBbIHIxIF0gICAgICAgICAgIC8qIFRoZSBmaXJzdCBpdGVtIGluIHRoZSBUQ0IgaXMgdGhlIHRhc2sgdG9wIG9mIHN0YWNrLiAqLw0KKyAgICBhZGQgcjEsIHIxLCAjNCAgICAgICAgICAvKiBNb3ZlIG9udG8gdGhlIHNlY29uZCBpdGVtIGluIHRoZSBUQ0IuLi4gKi8NCiANCi0gICAgZG1iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb21wbGV0ZSBvdXRzdGFuZGluZyB0cmFuc2ZlcnMgYmVmb3JlIGRpc2FibGluZyBNUFUuICovDQotICAgIGxkciByMiwgPSAweGUwMDBlZDk0ICAgICAgICAgICAgLyogTVBVX0NUUkwgcmVnaXN0ZXIuICovDQotICAgIGxkciByMywgWyByMiBdICAgICAgICAgICAgICAgICAgLyogUmVhZCB0aGUgdmFsdWUgb2YgTVBVX0NUUkwuICovDQotICAgIGJpYyByMywgcjMsICMgMSAgICAgICAgICAgICAgICAgLyogcjMgPSByMyAmIH4xIGkuZS4gQ2xlYXIgdGhlIGJpdCAwIGluIHIzLiAqLw0KLSAgICBzdHIgcjMsIFsgcjIgXSAgICAgICAgICAgICAgICAgIC8qIERpc2FibGUgTVBVLiAqLw0KKyAgICBkbWIgICAgICAgICAgICAgICAgICAgICAgLyogQ29tcGxldGUgb3V0c3RhbmRpbmcgdHJhbnNmZXJzIGJlZm9yZSBkaXNhYmxpbmcgTVBVLiAqLw0KKyAgICBsZHIgcjIsID0weGUwMDBlZDk0ICAgICAvKiBNUFVfQ1RSTCByZWdpc3Rlci4gKi8NCisgICAgbGRyIHIzLCBbIHIyIF0gLyogUmVhZCB0aGUgdmFsdWUgb2YgTVBVX0NUUkwuICovDQorICAgIGJpYyByMywgcjMsICMxICAgICAgICAgIC8qIHIzID0gcjMgJiB+MSBpLmUuIENsZWFyIHRoZSBiaXQgMCBpbiByMy4gKi8NCisgICAgc3RyIHIzLCBbIHIyIF0gICAgICAgICAgIC8qIERpc2FibGUgTVBVLiAqLw0KIA0KLSAgICBsZHIgcjIsID0gMHhlMDAwZWQ5YyAgICAgICAgICAgIC8qIFJlZ2lvbiBCYXNlIEFkZHJlc3MgcmVnaXN0ZXIuICovDQotICAgIGxkbWlhIHIxISwge3I0LXIxMX0gICAgICAgICAgICAgLyogUmVhZCA0IHNldHMgb2YgTVBVIHJlZ2lzdGVycyBbTVBVIFJlZ2lvbiAjIDQgLSA3XS4gKi8NCi0gICAgc3RtaWEgcjIsIHtyNC1yMTF9ICAgICAgICAgICAgICAvKiBXcml0ZSA0IHNldHMgb2YgTVBVIHJlZ2lzdGVycyBbTVBVIFJlZ2lvbiAjIDQgLSA3XS4gKi8NCisgICAgbGRyIHIyLCA9MHhlMDAwZWQ5YyAgICAgLyogUmVnaW9uIEJhc2UgQWRkcmVzcyByZWdpc3Rlci4gKi8NCisgICAgbGRtaWEgcjEgISwgew0KKyAgICAgICAgcjQgLSByMTENCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZWFkIDQgc2V0cyBvZiBNUFUgcmVnaXN0ZXJzIFtNUFUgUmVnaW9uICMgNCAtIDddLiAqLw0KKyAgICBzdG1pYSByMiwgew0KKyAgICAgICAgcjQgLSByMTENCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXcml0ZSA0IHNldHMgb2YgTVBVIHJlZ2lzdGVycyBbTVBVIFJlZ2lvbiAjIDQgLSA3XS4gKi8NCiANCi0jaWYgKCBwb3J0VE9UQUxfTlVNX1JFR0lPTlMgPT0gMTYgKQ0KLSAgICBsZG1pYSByMSEsIHtyNC1yMTF9ICAgICAgICAgICAgIC8qIFJlYWQgNCBzZXRzIG9mIE1QVSByZWdpc3RlcnMgW01QVSBSZWdpb24gIyA4IC0gMTFdLiAqLw0KLSAgICBzdG1pYSByMiwge3I0LXIxMX0gICAgICAgICAgICAgIC8qIFdyaXRlIDQgc2V0cyBvZiBNUFUgcmVnaXN0ZXJzLiBbTVBVIFJlZ2lvbiAjIDggLSAxMV0uICovDQotICAgIGxkbWlhIHIxISwge3I0LXIxMX0gICAgICAgICAgICAgLyogUmVhZCA0IHNldHMgb2YgTVBVIHJlZ2lzdGVycyBbTVBVIFJlZ2lvbiAjIDEyIC0gMTVdLiAqLw0KLSAgICBzdG1pYSByMiwge3I0LXIxMX0gICAgICAgICAgICAgIC8qIFdyaXRlIDQgc2V0cyBvZiBNUFUgcmVnaXN0ZXJzLiBbTVBVIFJlZ2lvbiAjIDEyIC0gMTVdLiAqLw0KLSNlbmRpZiAvKiBwb3J0VE9UQUxfTlVNX1JFR0lPTlMgPT0gMTYuICovDQorICAgICNpZiAoIHBvcnRUT1RBTF9OVU1fUkVHSU9OUyA9PSAxNiApDQorICAgICAgICBsZG1pYSByMSAhLCB7DQorICAgICAgICAgICAgcjQgLSByMTENCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZWFkIDQgc2V0cyBvZiBNUFUgcmVnaXN0ZXJzIFtNUFUgUmVnaW9uICMgOCAtIDExXS4gKi8NCisgICAgICAgIHN0bWlhIHIyLCB7DQorICAgICAgICAgICAgcjQgLSByMTENCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXcml0ZSA0IHNldHMgb2YgTVBVIHJlZ2lzdGVycy4gW01QVSBSZWdpb24gIyA4IC0gMTFdLiAqLw0KKyAgICAgICAgbGRtaWEgcjEgISwgew0KKyAgICAgICAgICAgIHI0IC0gcjExDQorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVhZCA0IHNldHMgb2YgTVBVIHJlZ2lzdGVycyBbTVBVIFJlZ2lvbiAjIDEyIC0gMTVdLiAqLw0KKyAgICAgICAgc3RtaWEgcjIsIHsNCisgICAgICAgICAgICByNCAtIHIxMQ0KKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdyaXRlIDQgc2V0cyBvZiBNUFUgcmVnaXN0ZXJzLiBbTVBVIFJlZ2lvbiAjIDEyIC0gMTVdLiAqLw0KKyAgICAjZW5kaWYgLyogcG9ydFRPVEFMX05VTV9SRUdJT05TID09IDE2LiAqLw0KIA0KLSAgICBsZHIgcjIsID0gMHhlMDAwZWQ5NCAgICAgICAgICAgIC8qIE1QVV9DVFJMIHJlZ2lzdGVyLiAqLw0KLSAgICBsZHIgcjMsIFsgcjIgXSAgICAgICAgICAgICAgICAgIC8qIFJlYWQgdGhlIHZhbHVlIG9mIE1QVV9DVFJMLiAqLw0KLSAgICBvcnIgcjMsIHIzLCAjMSAgICAgICAgICAgICAgICAgIC8qIHIzID0gcjMgfCAxIGkuZS4gU2V0IHRoZSBiaXQgMCBpbiByMy4gKi8NCi0gICAgc3RyIHIzLCBbIHIyIF0gICAgICAgICAgICAgICAgICAvKiBFbmFibGUgTVBVLiAqLw0KLSAgICBkc2IgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZvcmNlIG1lbW9yeSB3cml0ZXMgYmVmb3JlIGNvbnRpbnVpbmcuICovDQorICAgIGxkciByMiwgPTB4ZTAwMGVkOTQgICAgIC8qIE1QVV9DVFJMIHJlZ2lzdGVyLiAqLw0KKyAgICBsZHIgcjMsIFsgcjIgXSAvKiBSZWFkIHRoZSB2YWx1ZSBvZiBNUFVfQ1RSTC4gKi8NCisgICAgb3JyIHIzLCByMywgIzEgICAgICAgICAgLyogcjMgPSByMyB8IDEgaS5lLiBTZXQgdGhlIGJpdCAwIGluIHIzLiAqLw0KKyAgICBzdHIgcjMsIFsgcjIgXSAgICAgICAgICAgLyogRW5hYmxlIE1QVS4gKi8NCisgICAgZHNiICAgICAgICAgICAgICAgICAgICAgIC8qIEZvcmNlIG1lbW9yeSB3cml0ZXMgYmVmb3JlIGNvbnRpbnVpbmcuICovDQogDQotICAgIGxkbWlhIHIwISwge3IzLXIxMSwgcjE0fSAgICAgICAgLyogUG9wIHRoZSByZWdpc3RlcnMgdGhhdCBhcmUgbm90IGF1dG9tYXRpY2FsbHkgc2F2ZWQgb24gZXhjZXB0aW9uIGVudHJ5LiAqLw0KKyAgICBsZG1pYSByMCAhLCB7DQorICAgICAgICByMyAtIHIxMSwgcjE0DQorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9wIHRoZSByZWdpc3RlcnMgdGhhdCBhcmUgbm90IGF1dG9tYXRpY2FsbHkgc2F2ZWQgb24gZXhjZXB0aW9uIGVudHJ5LiAqLw0KICAgICBtc3IgY29udHJvbCwgcjMNCiANCi0gICAgdHN0IHIxNCwgIyAweDEwICAgICAgICAgICAgICAgICAvKiBJcyB0aGUgdGFzayB1c2luZyB0aGUgRlBVIGNvbnRleHQ/ICBJZiBzbywgcG9wIHRoZSBoaWdoIHZmcCByZWdpc3RlcnMgdG9vLiAqLw0KKyAgICB0c3QgcjE0LCAjMHgxMCAvKiBJcyB0aGUgdGFzayB1c2luZyB0aGUgRlBVIGNvbnRleHQ/ICBJZiBzbywgcG9wIHRoZSBoaWdoIHZmcCByZWdpc3RlcnMgdG9vLiAqLw0KICAgICBpdCBlcQ0KLSAgICB2bGRtaWFlcSByMCEsIHtzMTYtczMxfQ0KKyAgICB2bGRtaWFlcSByMCAhLCB7DQorICAgICAgICBzMTYgLSBzMzENCisgICAgfQ0KIA0KICAgICBtc3IgcHNwLCByMA0KICAgICBieCByMTQNCiAgICAgbm9wDQorLyogKklOREVOVC1PTiogKi8NCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQpAQCAtNjQyLDI3ICs2ODgsMzEgQEAKIA0KIF9fYXNtIHZvaWQgdlBvcnRTd2l0Y2hUb1VzZXJNb2RlKCB2b2lkICkNCiB7DQorICAgIC8qICpJTkRFTlQtT0ZGKiAqLw0KICAgICBQUkVTRVJWRTgNCiANCiAgICAgbXJzIHIwLCBjb250cm9sDQotICAgIG9yciByMCwgIyAxDQorICAgIG9yciByMCwgIzENCiAgICAgbXNyIGNvbnRyb2wsIHIwDQogICAgIGJ4IHIxNA0KKyAgICAvKiAqSU5ERU5ULU9OKiAqLw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBfX2FzbSB2b2lkIHZQb3J0RW5hYmxlVkZQKCB2b2lkICkNCiB7DQorLyogKklOREVOVC1PRkYqICovDQogICAgIFBSRVNFUlZFOA0KIA0KLSAgICBsZHIudyByMCwgPSAweEUwMDBFRDg4IC8qIFRoZSBGUFUgZW5hYmxlIGJpdHMgYXJlIGluIHRoZSBDUEFDUi4gKi8NCisgICAgbGRyLncgcjAsID0weEUwMDBFRDg4IC8qIFRoZSBGUFUgZW5hYmxlIGJpdHMgYXJlIGluIHRoZSBDUEFDUi4gKi8NCiAgICAgbGRyIHIxLCBbIHIwIF0NCiANCi0gICAgb3JyIHIxLCByMSwgIyAoIDB4ZiA8PCAyMCApIC8qIEVuYWJsZSBDUDEwIGFuZCBDUDExIGNvcHJvY2Vzc29ycywgdGhlbiBzYXZlIGJhY2suICovDQorICAgIG9yciByMSwgcjEsICMoIDB4ZiA8PCAyMCApIC8qIEVuYWJsZSBDUDEwIGFuZCBDUDExIGNvcHJvY2Vzc29ycywgdGhlbiBzYXZlIGJhY2suICovDQogICAgIHN0ciByMSwgWyByMCBdDQogICAgIGJ4IHIxNA0KICAgICBub3ANCiAgICAgbm9wDQorLyogKklOREVOVC1PTiogKi8NCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQpAQCAtNzYxLDI1ICs4MTEsMjkgQEAKIA0KIF9fYXNtIEJhc2VUeXBlX3QgeElzUHJpdmlsZWdlZCggdm9pZCApDQogew0KKy8qICpJTkRFTlQtT0ZGKiAqLw0KICAgICBQUkVTRVJWRTgNCiANCiAgICAgbXJzIHIwLCBjb250cm9sIC8qIHIwID0gQ09OVFJPTC4gKi8NCi0gICAgdHN0IHIwLCAjIDEgICAgIC8qIFBlcmZvcm0gcjAgJiAxIChiaXR3aXNlIEFORCkgYW5kIHVwZGF0ZSB0aGUgY29uZGl0aW9ucyBmbGFnLiAqLw0KKyAgICB0c3QgcjAsICMxICAgICAvKiBQZXJmb3JtIHIwICYgMSAoYml0d2lzZSBBTkQpIGFuZCB1cGRhdGUgdGhlIGNvbmRpdGlvbnMgZmxhZy4gKi8NCiAgICAgaXRlIG5lDQotICAgIG1vdm5lIHIwLCAjIDAgICAvKiBDT05UUk9MWzBdIT0wLiBSZXR1cm4gZmFsc2UgdG8gaW5kaWNhdGUgdGhhdCB0aGUgcHJvY2Vzc29yIGlzIG5vdCBwcml2aWxlZ2VkLiAqLw0KLSAgICBtb3ZlcSByMCwgIyAxICAgLyogQ09OVFJPTFswXT09MC4gUmV0dXJuIHRydWUgdG8gaW5kaWNhdGUgdGhhdCB0aGUgcHJvY2Vzc29yIGlzIHByaXZpbGVnZWQuICovDQorICAgIG1vdm5lIHIwLCAjMCAgIC8qIENPTlRST0xbMF0hPTAuIFJldHVybiBmYWxzZSB0byBpbmRpY2F0ZSB0aGF0IHRoZSBwcm9jZXNzb3IgaXMgbm90IHByaXZpbGVnZWQuICovDQorICAgIG1vdmVxIHIwLCAjMSAgIC8qIENPTlRST0xbMF09PTAuIFJldHVybiB0cnVlIHRvIGluZGljYXRlIHRoYXQgdGhlIHByb2Nlc3NvciBpcyBwcml2aWxlZ2VkLiAqLw0KICAgICBieCBsciAgICAgICAgICAgLyogUmV0dXJuLiAqLw0KKy8qICpJTkRFTlQtT04qICovDQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIF9fYXNtIHZvaWQgdlJlc2V0UHJpdmlsZWdlKCB2b2lkICkNCiB7DQorLyogKklOREVOVC1PRkYqICovDQogICAgIFBSRVNFUlZFOA0KIA0KICAgICBtcnMgcjAsIGNvbnRyb2wgLyogcjAgPSBDT05UUk9MLiAqLw0KLSAgICBvcnJzIHIwLCAjIDEgICAgLyogcjAgPSByMCB8IDEuICovDQorICAgIG9ycnMgcjAsICMxICAgIC8qIHIwID0gcjAgfCAxLiAqLw0KICAgICBtc3IgY29udHJvbCwgcjAgLyogQ09OVFJPTCA9IHIwLiAqLw0KICAgICBieCBsciAgICAgICAgICAgLyogUmV0dXJuLiAqLw0KKy8qICpJTkRFTlQtT04qICovDQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KQEAgLTg4NiwxMCArOTQwLDEyIEBACiANCiBfX2FzbSB1aW50MzJfdCBwcnZQb3J0R2V0SVBTUiggdm9pZCApDQogew0KKy8qICpJTkRFTlQtT0ZGKiAqLw0KICAgICBQUkVTRVJWRTgNCiANCiAgICAgbXJzIHIwLCBpcHNyDQogICAgIGJ4IHIxNA0KKy8qICpJTkRFTlQtT04qICovDQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL1JWRFMvQVJNX0NNNF9NUFUvcG9ydG1hY3JvLmggYi9wb3J0YWJsZS9SVkRTL0FSTV9DTTRfTVBVL3BvcnRtYWNyby5oCmluZGV4IGU1ZjViMTIuLjU4OWU0ZWIgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL1JWRFMvQVJNX0NNNF9NUFUvcG9ydG1hY3JvLmgKKysrIGIvcG9ydGFibGUvUlZEUy9BUk1fQ000X01QVS9wb3J0bWFjcm8uaApAQCAtMjcsMTEgKzI3LDEzIEBACiANCiANCiAjaWZuZGVmIFBPUlRNQUNST19IDQotICAgICNkZWZpbmUgUE9SVE1BQ1JPX0gNCisjZGVmaW5lIFBPUlRNQUNST19IDQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgZXh0ZXJuICJDIiB7DQotICAgICNlbmRpZg0KKy8qICpJTkRFTlQtT0ZGKiAqLw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KKyAgICBleHRlcm4gIkMiIHsNCisjZW5kaWYNCisvKiAqSU5ERU5ULU9OKiAqLw0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgKiBQb3J0IHNwZWNpZmljIGRlZmluaXRpb25zLg0KQEAgLTQ0LDE3MyArNDYsMTc0IEBACiAgKi8NCiANCiAvKiBUeXBlIGRlZmluaXRpb25zLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRDSEFSICAgICAgICAgIGNoYXINCi0gICAgI2RlZmluZSBwb3J0RkxPQVQgICAgICAgICBmbG9hdA0KLSAgICAjZGVmaW5lIHBvcnRET1VCTEUgICAgICAgIGRvdWJsZQ0KLSAgICAjZGVmaW5lIHBvcnRMT05HICAgICAgICAgIGxvbmcNCi0gICAgI2RlZmluZSBwb3J0U0hPUlQgICAgICAgICBzaG9ydA0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19UWVBFICAgIHVpbnQzMl90DQotICAgICNkZWZpbmUgcG9ydEJBU0VfVFlQRSAgICAgbG9uZw0KKyNkZWZpbmUgcG9ydENIQVIgICAgICAgICAgY2hhcg0KKyNkZWZpbmUgcG9ydEZMT0FUICAgICAgICAgZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUgICAgICAgIGRvdWJsZQ0KKyNkZWZpbmUgcG9ydExPTkcgICAgICAgICAgbG9uZw0KKyNkZWZpbmUgcG9ydFNIT1JUICAgICAgICAgc2hvcnQNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFICAgIHVpbnQzMl90DQorI2RlZmluZSBwb3J0QkFTRV9UWVBFICAgICBsb25nDQogDQotICAgIHR5cGVkZWYgcG9ydFNUQUNLX1RZUEUgICBTdGFja1R5cGVfdDsNCi0gICAgdHlwZWRlZiBsb25nICAgICAgICAgICAgIEJhc2VUeXBlX3Q7DQotICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyAgICBVQmFzZVR5cGVfdDsNCit0eXBlZGVmIHBvcnRTVEFDS19UWVBFICAgU3RhY2tUeXBlX3Q7DQordHlwZWRlZiBsb25nICAgICAgICAgICAgIEJhc2VUeXBlX3Q7DQordHlwZWRlZiB1bnNpZ25lZCBsb25nICAgIFVCYXNlVHlwZV90Ow0KIA0KLSAgICAjaWYgKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KLSAgICAgICAgdHlwZWRlZiB1aW50MTZfdCAgICAgVGlja1R5cGVfdDsNCi0gICAgICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAgICAgICAgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQotICAgICNlbHNlDQotICAgICAgICB0eXBlZGVmIHVpbnQzMl90ICAgICBUaWNrVHlwZV90Ow0KLSAgICAgICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICAgICAgICAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwNCisjaWYgKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KKyAgICB0eXBlZGVmIHVpbnQxNl90ICAgICBUaWNrVHlwZV90Ow0KKyAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgICAgICAgICAgICggVGlja1R5cGVfdCApIDB4ZmZmZg0KKyNlbHNlDQorICAgIHR5cGVkZWYgdWludDMyX3QgICAgIFRpY2tUeXBlX3Q7DQorICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAgICAgICAgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQogDQogLyogMzItYml0IHRpY2sgdHlwZSBvbiBhIDMyLWJpdCBhcmNoaXRlY3R1cmUsIHNvIHJlYWRzIG9mIHRoZSB0aWNrIGNvdW50IGRvDQogICogbm90IG5lZWQgdG8gYmUgZ3VhcmRlZCB3aXRoIGEgY3JpdGljYWwgc2VjdGlvbi4gKi8NCi0gICAgICAgICNkZWZpbmUgcG9ydFRJQ0tfVFlQRV9JU19BVE9NSUMgICAgMQ0KLSAgICAjZW5kaWYNCisgICAgI2RlZmluZSBwb3J0VElDS19UWVBFX0lTX0FUT01JQyAgICAxDQorI2VuZGlmDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogTVBVIHNwZWNpZmljIGNvbnN0YW50cy4gKi8NCi0gICAgI2RlZmluZSBwb3J0VVNJTkdfTVBVX1dSQVBQRVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxDQotICAgICNkZWZpbmUgcG9ydFBSSVZJTEVHRV9CSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAweDgwMDAwMDAwVUwgKQ0KKyNkZWZpbmUgcG9ydFVTSU5HX01QVV9XUkFQUEVSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQ0KKyNkZWZpbmUgcG9ydFBSSVZJTEVHRV9CSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAweDgwMDAwMDAwVUwgKQ0KIA0KLSAgICAjZGVmaW5lIHBvcnRNUFVfUkVHSU9OX1JFQURfV1JJVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMHgwM1VMIDw8IDI0VUwgKQ0KLSAgICAjZGVmaW5lIHBvcnRNUFVfUkVHSU9OX1BSSVZJTEVHRURfUkVBRF9PTkxZICAgICAgICAgICAgICAgICAgICAgICggMHgwNVVMIDw8IDI0VUwgKQ0KLSAgICAjZGVmaW5lIHBvcnRNUFVfUkVHSU9OX1JFQURfT05MWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMHgwNlVMIDw8IDI0VUwgKQ0KLSAgICAjZGVmaW5lIHBvcnRNUFVfUkVHSU9OX1BSSVZJTEVHRURfUkVBRF9XUklURSAgICAgICAgICAgICAgICAgICAgICggMHgwMVVMIDw8IDI0VUwgKQ0KLSAgICAjZGVmaW5lIHBvcnRNUFVfUkVHSU9OX1BSSVZJTEVHRURfUkVBRF9XUklURV9VTlBSSVZfUkVBRF9PTkxZICAgICggMHgwMlVMIDw8IDI0VUwgKQ0KLSAgICAjZGVmaW5lIHBvcnRNUFVfUkVHSU9OX0NBQ0hFQUJMRV9CVUZGRVJBQkxFICAgICAgICAgICAgICAgICAgICAgICggMHgwN1VMIDw8IDE2VUwgKQ0KLSAgICAjZGVmaW5lIHBvcnRNUFVfUkVHSU9OX0VYRUNVVEVfTkVWRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMHgwMVVMIDw8IDI4VUwgKQ0KLSAgICAvKiBMb2NhdGlvbiBvZiB0aGUgVEVYLFMsQyxCIGJpdHMgaW4gdGhlIE1QVSBSZWdpb24gQXR0cmlidXRlIGFuZCBTaXplDQotICAgICAqIFJlZ2lzdGVyIChSQVNSKS4gKi8NCi0gICAgI2RlZmluZSBwb3J0TVBVX1JBU1JfVEVYX1NfQ19CX0xPQ0FUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAoIDE2VUwgKQ0KLSAgICAjZGVmaW5lIHBvcnRNUFVfUkFTUl9URVhfU19DX0JfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMHgzRlVMICkNCisjZGVmaW5lIHBvcnRNUFVfUkVHSU9OX1JFQURfV1JJVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMHgwM1VMIDw8IDI0VUwgKQ0KKyNkZWZpbmUgcG9ydE1QVV9SRUdJT05fUFJJVklMRUdFRF9SRUFEX09OTFkgICAgICAgICAgICAgICAgICAgICAgKCAweDA1VUwgPDwgMjRVTCApDQorI2RlZmluZSBwb3J0TVBVX1JFR0lPTl9SRUFEX09OTFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDB4MDZVTCA8PCAyNFVMICkNCisjZGVmaW5lIHBvcnRNUFVfUkVHSU9OX1BSSVZJTEVHRURfUkVBRF9XUklURSAgICAgICAgICAgICAgICAgICAgICggMHgwMVVMIDw8IDI0VUwgKQ0KKyNkZWZpbmUgcG9ydE1QVV9SRUdJT05fUFJJVklMRUdFRF9SRUFEX1dSSVRFX1VOUFJJVl9SRUFEX09OTFkgICAgKCAweDAyVUwgPDwgMjRVTCApDQorI2RlZmluZSBwb3J0TVBVX1JFR0lPTl9DQUNIRUFCTEVfQlVGRkVSQUJMRSAgICAgICAgICAgICAgICAgICAgICAoIDB4MDdVTCA8PCAxNlVMICkNCisjZGVmaW5lIHBvcnRNUFVfUkVHSU9OX0VYRUNVVEVfTkVWRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMHgwMVVMIDw8IDI4VUwgKQ0KIA0KLSAgICAvKiBNUFUgc2V0dGluZ3MgdGhhdCBjYW4gYmUgb3ZlcnJpZGVuIGluIEZyZWVSVE9TQ29uZmlnLmguICovDQotICAgICNpZm5kZWYgY29uZmlnVE9UQUxfTVBVX1JFR0lPTlMNCi0gICAgICAgIC8qIERlZmluZSB0byA4IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAqLw0KLSAgICAgICAgI2RlZmluZSBjb25maWdUT1RBTF9NUFVfUkVHSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggOFVMICkNCi0gICAgI2VuZGlmDQorLyogTG9jYXRpb24gb2YgdGhlIFRFWCxTLEMsQiBiaXRzIGluIHRoZSBNUFUgUmVnaW9uIEF0dHJpYnV0ZSBhbmQgU2l6ZQ0KKyAqIFJlZ2lzdGVyIChSQVNSKS4gKi8NCisjZGVmaW5lIHBvcnRNUFVfUkFTUl9URVhfU19DX0JfTE9DQVRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICggMTZVTCApDQorI2RlZmluZSBwb3J0TVBVX1JBU1JfVEVYX1NfQ19CX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDB4M0ZVTCApDQogDQotICAgIC8qDQotICAgICAqIFRoZSBURVgsIFNoYXJlYWJsZSAoUyksIENhY2hlYWJsZSAoQykgYW5kIEJ1ZmZlcmFibGUgKEIpIGJpdHMgZGVmaW5lIHRoZQ0KLSAgICAgKiBtZW1vcnkgdHlwZSwgYW5kIHdoZXJlIG5lY2Vzc2FyeSB0aGUgY2FjaGVhYmxlIGFuZCBzaGFyZWFibGUgcHJvcGVydGllcw0KLSAgICAgKiBvZiB0aGUgbWVtb3J5IHJlZ2lvbi4NCi0gICAgICoNCi0gICAgICogVGhlIFRFWCwgQywgYW5kIEIgYml0cyB0b2dldGhlciBpbmRpY2F0ZSB0aGUgbWVtb3J5IHR5cGUgb2YgdGhlIHJlZ2lvbiwNCi0gICAgICogYW5kOg0KLSAgICAgKiAtIEZvciBOb3JtYWwgbWVtb3J5LCB0aGUgY2FjaGVhYmxlIHByb3BlcnRpZXMgb2YgdGhlIHJlZ2lvbi4NCi0gICAgICogLSBGb3IgRGV2aWNlIG1lbW9yeSwgd2hldGhlciB0aGUgcmVnaW9uIGlzIHNoYXJlYWJsZS4NCi0gICAgICoNCi0gICAgICogRm9yIE5vcm1hbCBtZW1vcnkgcmVnaW9ucywgdGhlIFMgYml0IGluZGljYXRlcyB3aGV0aGVyIHRoZSByZWdpb24gaXMNCi0gICAgICogc2hhcmVhYmxlLiBGb3IgU3Ryb25nbHktb3JkZXJlZCBhbmQgRGV2aWNlIG1lbW9yeSwgdGhlIFMgYml0IGlzIGlnbm9yZWQuDQotICAgICAqDQotICAgICAqIFNlZSB0aGUgZm9sbG93aW5nIHR3byB0YWJsZXMgZm9yIHNldHRpbmcgVEVYLCBTLCBDIGFuZCBCIGJpdHMgZm9yDQotICAgICAqIHVucHJpdmlsZWdlZCBmbGFzaCwgcHJpdmlsZWdlZCBmbGFzaCBhbmQgcHJpdmlsZWdlZCBSQU0gcmVnaW9ucy4NCi0gICAgICoNCi0gICAgKy0tLS0tKy0tLSstLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQotICAgIHwgVEVYIHwgQyB8IEIgfCBNZW1vcnkgdHlwZSAgICAgICAgICAgIHwgIERlc2NyaXB0aW9uIG9yIE5vcm1hbCByZWdpb24gY2FjaGVhYmlsaXR5ICAgICAgICAgICAgIHwgIFNoYXJlYWJsZT8gICAgICAgICAgICAgfA0KLSAgICArLS0tLS0rLS0tKy0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCi0gICAgfCAwMDAgfCAwIHwgMCB8IFN0cm9uZ2x5LW9yZGVyZWQgICAgICAgfCAgU3Ryb25nbHkgb3JkZXJlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgU2hhcmVhYmxlICAgICAgICAgICAgICB8DQotICAgICstLS0tLSstLS0rLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KLSAgICB8IDAwMCB8IDAgfCAxIHwgRGV2aWNlICAgICAgICAgICAgICAgICB8ICBTaGFyZWQgZGV2aWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBTaGFyZWFibGUgICAgICAgICAgICAgIHwNCi0gICAgKy0tLS0tKy0tLSstLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQotICAgIHwgMDAwIHwgMSB8IDAgfCBOb3JtYWwgICAgICAgICAgICAgICAgIHwgIE91dGVyIGFuZCBpbm5lciAgIHdyaXRlLXRocm91Z2g7IG5vIHdyaXRlIGFsbG9jYXRlICAgIHwgIFMgYml0ICAgICAgICAgICAgICAgICAgfA0KLSAgICArLS0tLS0rLS0tKy0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCi0gICAgfCAwMDAgfCAxIHwgMSB8IE5vcm1hbCAgICAgICAgICAgICAgICAgfCAgT3V0ZXIgYW5kIGlubmVyICAgd3JpdGUtYmFjazsgbm8gd3JpdGUgYWxsb2NhdGUgICAgICAgfCAgUyBiaXQgICAgICAgICAgICAgICAgICB8DQotICAgICstLS0tLSstLS0rLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KLSAgICB8IDAwMSB8IDAgfCAwIHwgTm9ybWFsICAgICAgICAgICAgICAgICB8ICBPdXRlciBhbmQgaW5uZXIgICBOb24tY2FjaGVhYmxlICAgICAgICAgICAgICAgICAgICAgICB8ICBTIGJpdCAgICAgICAgICAgICAgICAgIHwNCi0gICAgKy0tLS0tKy0tLSstLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQotICAgIHwgMDAxIHwgMCB8IDEgfCBSZXNlcnZlZCAgICAgICAgICAgICAgIHwgIFJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFJlc2VydmVkICAgICAgICAgICAgICAgfA0KLSAgICArLS0tLS0rLS0tKy0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCi0gICAgfCAwMDEgfCAxIHwgMCB8IElNUExFTUVOVEFUSU9OIERFRklORUQgfCAgSU1QTEVNRU5UQVRJT04gREVGSU5FRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgSU1QTEVNRU5UQVRJT04gREVGSU5FRCB8DQotICAgICstLS0tLSstLS0rLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KLSAgICB8IDAwMSB8IDEgfCAxIHwgTm9ybWFsICAgICAgICAgICAgICAgICB8ICBPdXRlciBhbmQgaW5uZXIgICB3cml0ZS1iYWNrOyB3cml0ZSBhbmQgcmVhZCBhbGxvY2F0ZSB8ICBTIGJpdCAgICAgICAgICAgICAgICAgIHwNCi0gICAgKy0tLS0tKy0tLSstLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQotICAgIHwgMDEwIHwgMCB8IDAgfCBEZXZpY2UgICAgICAgICAgICAgICAgIHwgIE5vbi1zaGFyZWQgZGV2aWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIE5vdCBzaGFyZWFibGUgICAgICAgICAgfA0KLSAgICArLS0tLS0rLS0tKy0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCi0gICAgfCAwMTAgfCAwIHwgMSB8IFJlc2VydmVkICAgICAgICAgICAgICAgfCAgUmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgUmVzZXJ2ZWQgICAgICAgICAgICAgICB8DQotICAgICstLS0tLSstLS0rLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KLSAgICB8IDAxMCB8IDEgfCBYIHwgUmVzZXJ2ZWQgICAgICAgICAgICAgICB8ICBSZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBSZXNlcnZlZCAgICAgICAgICAgICAgIHwNCi0gICAgKy0tLS0tKy0tLSstLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQotICAgIHwgMDExIHwgWCB8IFggfCBSZXNlcnZlZCAgICAgICAgICAgICAgIHwgIFJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFJlc2VydmVkICAgICAgICAgICAgICAgfA0KLSAgICArLS0tLS0rLS0tKy0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCi0gICAgfCAxQkIgfCBBIHwgQSB8IE5vcm1hbCAgICAgICAgICAgICAgICAgfCBDYWNoZWQgbWVtb3J5LCB3aXRoIEFBIGFuZCBCQiBpbmRpY2F0aW5nIHRoZSBpbm5lciBhbmQgfCAgUmVzZXJ2ZWQgICAgICAgICAgICAgICB8DQotICAgIHwgICAgIHwgICB8ICAgfCAgICAgICAgICAgICAgICAgICAgICAgIHwgb3V0ZXIgY2FjaGVhYmlsaXR5IHJ1bGVzIHRoYXQgbXVzdCBiZSBleHBvcnRlZCBvbiB0aGUgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfA0KLSAgICB8ICAgICB8ICAgfCAgIHwgICAgICAgICAgICAgICAgICAgICAgICB8IGJ1cy4gU2VlIHRoZSB0YWJsZSBiZWxvdyBmb3IgdGhlIGNhY2hlYWJpbGl0eSBwb2xpY3kgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwNCi0gICAgfCAgICAgfCAgIHwgICB8ICAgICAgICAgICAgICAgICAgICAgICAgfCBlbmNvZGluZy4gbWVtb3J5LCBCQj1PdXRlciBwb2xpY3ksIEFBPUlubmVyIHBvbGljeS4gICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8DQotICAgICstLS0tLSstLS0rLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KKy8qIE1QVSBzZXR0aW5ncyB0aGF0IGNhbiBiZSBvdmVycmlkZW4gaW4gRnJlZVJUT1NDb25maWcuaC4gKi8NCisjaWZuZGVmIGNvbmZpZ1RPVEFMX01QVV9SRUdJT05TDQorICAgIC8qIERlZmluZSB0byA4IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAqLw0KKyAgICAjZGVmaW5lIGNvbmZpZ1RPVEFMX01QVV9SRUdJT05TICAgICggOFVMICkNCisjZW5kaWYNCiANCi0gICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQotICAgIHwgQUEgb3IgQkIgc3ViZmllbGQgb2Yge1RFWCxDLEJ9IGVuY29kaW5nIHwgIENhY2hlYWJpbGl0eSBwb2xpY3kgICAgICAgICAgICAgICAgICAgfA0KLSAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCi0gICAgfCAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgTm9uLWNhY2hlYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICB8DQotICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KLSAgICB8IDAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBXcml0ZS1iYWNrLCB3cml0ZSBhbmQgICByZWFkIGFsbG9jYXRlIHwNCi0gICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQotICAgIHwgMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFdyaXRlLXRocm91Z2gsIG5vIHdyaXRlICAgYWxsb2NhdGUgICAgfA0KLSAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCi0gICAgfCAxMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgV3JpdGUtYmFjaywgbm8gd3JpdGUgICBhbGxvY2F0ZSAgICAgICB8DQotICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KLSAgICAqLw0KKy8qDQorICogVGhlIFRFWCwgU2hhcmVhYmxlIChTKSwgQ2FjaGVhYmxlIChDKSBhbmQgQnVmZmVyYWJsZSAoQikgYml0cyBkZWZpbmUgdGhlDQorICogbWVtb3J5IHR5cGUsIGFuZCB3aGVyZSBuZWNlc3NhcnkgdGhlIGNhY2hlYWJsZSBhbmQgc2hhcmVhYmxlIHByb3BlcnRpZXMNCisgKiBvZiB0aGUgbWVtb3J5IHJlZ2lvbi4NCisgKg0KKyAqIFRoZSBURVgsIEMsIGFuZCBCIGJpdHMgdG9nZXRoZXIgaW5kaWNhdGUgdGhlIG1lbW9yeSB0eXBlIG9mIHRoZSByZWdpb24sDQorICogYW5kOg0KKyAqIC0gRm9yIE5vcm1hbCBtZW1vcnksIHRoZSBjYWNoZWFibGUgcHJvcGVydGllcyBvZiB0aGUgcmVnaW9uLg0KKyAqIC0gRm9yIERldmljZSBtZW1vcnksIHdoZXRoZXIgdGhlIHJlZ2lvbiBpcyBzaGFyZWFibGUuDQorICoNCisgKiBGb3IgTm9ybWFsIG1lbW9yeSByZWdpb25zLCB0aGUgUyBiaXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHJlZ2lvbiBpcw0KKyAqIHNoYXJlYWJsZS4gRm9yIFN0cm9uZ2x5LW9yZGVyZWQgYW5kIERldmljZSBtZW1vcnksIHRoZSBTIGJpdCBpcyBpZ25vcmVkLg0KKyAqDQorICogU2VlIHRoZSBmb2xsb3dpbmcgdHdvIHRhYmxlcyBmb3Igc2V0dGluZyBURVgsIFMsIEMgYW5kIEIgYml0cyBmb3INCisgKiB1bnByaXZpbGVnZWQgZmxhc2gsIHByaXZpbGVnZWQgZmxhc2ggYW5kIHByaXZpbGVnZWQgUkFNIHJlZ2lvbnMuDQorICoNCisgKy0tLS0tKy0tLSstLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQorIHwgVEVYIHwgQyB8IEIgfCBNZW1vcnkgdHlwZSAgICAgICAgICAgIHwgIERlc2NyaXB0aW9uIG9yIE5vcm1hbCByZWdpb24gY2FjaGVhYmlsaXR5ICAgICAgICAgICAgIHwgIFNoYXJlYWJsZT8gICAgICAgICAgICAgfA0KKyArLS0tLS0rLS0tKy0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCisgfCAwMDAgfCAwIHwgMCB8IFN0cm9uZ2x5LW9yZGVyZWQgICAgICAgfCAgU3Ryb25nbHkgb3JkZXJlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgU2hhcmVhYmxlICAgICAgICAgICAgICB8DQorICstLS0tLSstLS0rLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KKyB8IDAwMCB8IDAgfCAxIHwgRGV2aWNlICAgICAgICAgICAgICAgICB8ICBTaGFyZWQgZGV2aWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBTaGFyZWFibGUgICAgICAgICAgICAgIHwNCisgKy0tLS0tKy0tLSstLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQorIHwgMDAwIHwgMSB8IDAgfCBOb3JtYWwgICAgICAgICAgICAgICAgIHwgIE91dGVyIGFuZCBpbm5lciAgIHdyaXRlLXRocm91Z2g7IG5vIHdyaXRlIGFsbG9jYXRlICAgIHwgIFMgYml0ICAgICAgICAgICAgICAgICAgfA0KKyArLS0tLS0rLS0tKy0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCisgfCAwMDAgfCAxIHwgMSB8IE5vcm1hbCAgICAgICAgICAgICAgICAgfCAgT3V0ZXIgYW5kIGlubmVyICAgd3JpdGUtYmFjazsgbm8gd3JpdGUgYWxsb2NhdGUgICAgICAgfCAgUyBiaXQgICAgICAgICAgICAgICAgICB8DQorICstLS0tLSstLS0rLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KKyB8IDAwMSB8IDAgfCAwIHwgTm9ybWFsICAgICAgICAgICAgICAgICB8ICBPdXRlciBhbmQgaW5uZXIgICBOb24tY2FjaGVhYmxlICAgICAgICAgICAgICAgICAgICAgICB8ICBTIGJpdCAgICAgICAgICAgICAgICAgIHwNCisgKy0tLS0tKy0tLSstLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQorIHwgMDAxIHwgMCB8IDEgfCBSZXNlcnZlZCAgICAgICAgICAgICAgIHwgIFJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFJlc2VydmVkICAgICAgICAgICAgICAgfA0KKyArLS0tLS0rLS0tKy0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCisgfCAwMDEgfCAxIHwgMCB8IElNUExFTUVOVEFUSU9OIERFRklORUQgfCAgSU1QTEVNRU5UQVRJT04gREVGSU5FRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgSU1QTEVNRU5UQVRJT04gREVGSU5FRCB8DQorICstLS0tLSstLS0rLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KKyB8IDAwMSB8IDEgfCAxIHwgTm9ybWFsICAgICAgICAgICAgICAgICB8ICBPdXRlciBhbmQgaW5uZXIgICB3cml0ZS1iYWNrOyB3cml0ZSBhbmQgcmVhZCBhbGxvY2F0ZSB8ICBTIGJpdCAgICAgICAgICAgICAgICAgIHwNCisgKy0tLS0tKy0tLSstLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQorIHwgMDEwIHwgMCB8IDAgfCBEZXZpY2UgICAgICAgICAgICAgICAgIHwgIE5vbi1zaGFyZWQgZGV2aWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIE5vdCBzaGFyZWFibGUgICAgICAgICAgfA0KKyArLS0tLS0rLS0tKy0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCisgfCAwMTAgfCAwIHwgMSB8IFJlc2VydmVkICAgICAgICAgICAgICAgfCAgUmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgUmVzZXJ2ZWQgICAgICAgICAgICAgICB8DQorICstLS0tLSstLS0rLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KKyB8IDAxMCB8IDEgfCBYIHwgUmVzZXJ2ZWQgICAgICAgICAgICAgICB8ICBSZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBSZXNlcnZlZCAgICAgICAgICAgICAgIHwNCisgKy0tLS0tKy0tLSstLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQorIHwgMDExIHwgWCB8IFggfCBSZXNlcnZlZCAgICAgICAgICAgICAgIHwgIFJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFJlc2VydmVkICAgICAgICAgICAgICAgfA0KKyArLS0tLS0rLS0tKy0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCisgfCAxQkIgfCBBIHwgQSB8IE5vcm1hbCAgICAgICAgICAgICAgICAgfCBDYWNoZWQgbWVtb3J5LCB3aXRoIEFBIGFuZCBCQiBpbmRpY2F0aW5nIHRoZSBpbm5lciBhbmQgfCAgUmVzZXJ2ZWQgICAgICAgICAgICAgICB8DQorIHwgICAgIHwgICB8ICAgfCAgICAgICAgICAgICAgICAgICAgICAgIHwgb3V0ZXIgY2FjaGVhYmlsaXR5IHJ1bGVzIHRoYXQgbXVzdCBiZSBleHBvcnRlZCBvbiB0aGUgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyB8ICAgICB8ICAgfCAgIHwgICAgICAgICAgICAgICAgICAgICAgICB8IGJ1cy4gU2VlIHRoZSB0YWJsZSBiZWxvdyBmb3IgdGhlIGNhY2hlYWJpbGl0eSBwb2xpY3kgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgfCAgICAgfCAgIHwgICB8ICAgICAgICAgICAgICAgICAgICAgICAgfCBlbmNvZGluZy4gbWVtb3J5LCBCQj1PdXRlciBwb2xpY3ksIEFBPUlubmVyIHBvbGljeS4gICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICstLS0tLSstLS0rLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KKyB8DQorICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KKyB8IEFBIG9yIEJCIHN1YmZpZWxkIG9mIHtURVgsQyxCfSBlbmNvZGluZyB8ICBDYWNoZWFiaWxpdHkgcG9saWN5ICAgICAgICAgICAgICAgICAgIHwNCisgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQorIHwgMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIE5vbi1jYWNoZWFibGUgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCisgfCAwMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgV3JpdGUtYmFjaywgd3JpdGUgYW5kICAgcmVhZCBhbGxvY2F0ZSB8DQorICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KKyB8IDEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBXcml0ZS10aHJvdWdoLCBubyB3cml0ZSAgIGFsbG9jYXRlICAgIHwNCisgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQorIHwgMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFdyaXRlLWJhY2ssIG5vIHdyaXRlICAgYWxsb2NhdGUgICAgICAgfA0KKyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCisgKi8NCiANCi0gICAgLyogVEVYLCBTaGFyZWFibGUgKFMpLCBDYWNoZWFibGUgKEMpIGFuZCBCdWZmZXJhYmxlIChCKSBiaXRzIGZvciBGbGFzaA0KLSAgICAgKiByZWdpb24uICovDQotICAgICNpZm5kZWYgY29uZmlnVEVYX1NfQ19CX0ZMQVNIDQotICAgICAgICAvKiBEZWZhdWx0IHRvIFRFWD0wMDAsIFM9MSwgQz0xLCBCPTEgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuICovDQotICAgICAgICAjZGVmaW5lIGNvbmZpZ1RFWF9TX0NfQl9GTEFTSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAweDA3VUwgKQ0KLSAgICAjZW5kaWYNCisvKiBURVgsIFNoYXJlYWJsZSAoUyksIENhY2hlYWJsZSAoQykgYW5kIEJ1ZmZlcmFibGUgKEIpIGJpdHMgZm9yIEZsYXNoDQorICogcmVnaW9uLiAqLw0KKyNpZm5kZWYgY29uZmlnVEVYX1NfQ19CX0ZMQVNIDQorICAgIC8qIERlZmF1bHQgdG8gVEVYPTAwMCwgUz0xLCBDPTEsIEI9MSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gKi8NCisgICAgI2RlZmluZSBjb25maWdURVhfU19DX0JfRkxBU0ggICAgKCAweDA3VUwgKQ0KKyNlbmRpZg0KIA0KLSAgICAvKiBURVgsIFNoYXJlYWJsZSAoUyksIENhY2hlYWJsZSAoQykgYW5kIEJ1ZmZlcmFibGUgKEIpIGJpdHMgZm9yIFNSQU0NCi0gICAgICogcmVnaW9uLiAqLw0KLSAgICAjaWZuZGVmIGNvbmZpZ1RFWF9TX0NfQl9TUkFNDQotICAgICAgICAvKiBEZWZhdWx0IHRvIFRFWD0wMDAsIFM9MSwgQz0xLCBCPTEgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuICovDQotICAgICAgICAjZGVmaW5lIGNvbmZpZ1RFWF9TX0NfQl9TUkFNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAweDA3VUwgKQ0KLSAgICAjZW5kaWYNCisvKiBURVgsIFNoYXJlYWJsZSAoUyksIENhY2hlYWJsZSAoQykgYW5kIEJ1ZmZlcmFibGUgKEIpIGJpdHMgZm9yIFNSQU0NCisgKiByZWdpb24uICovDQorI2lmbmRlZiBjb25maWdURVhfU19DX0JfU1JBTQ0KKyAgICAvKiBEZWZhdWx0IHRvIFRFWD0wMDAsIFM9MSwgQz0xLCBCPTEgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuICovDQorICAgICNkZWZpbmUgY29uZmlnVEVYX1NfQ19CX1NSQU0gICAgICAgICAgKCAweDA3VUwgKQ0KKyNlbmRpZg0KIA0KLSAgICAjZGVmaW5lIHBvcnRVTlBSSVZJTEVHRURfRkxBU0hfUkVHSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMFVMICkNCi0gICAgI2RlZmluZSBwb3J0UFJJVklMRUdFRF9GTEFTSF9SRUdJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDFVTCApDQotICAgICNkZWZpbmUgcG9ydFBSSVZJTEVHRURfUkFNX1JFR0lPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAyVUwgKQ0KLSAgICAjZGVmaW5lIHBvcnRHRU5FUkFMX1BFUklQSEVSQUxTX1JFR0lPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICggM1VMICkNCi0gICAgI2RlZmluZSBwb3J0U1RBQ0tfUkVHSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDRVTCApDQotICAgICNkZWZpbmUgcG9ydEZJUlNUX0NPTkZJR1VSQUJMRV9SRUdJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCA1VUwgKQ0KLSAgICAjZGVmaW5lIHBvcnRUT1RBTF9OVU1fUkVHSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggY29uZmlnVE9UQUxfTVBVX1JFR0lPTlMgKQ0KLSAgICAjZGVmaW5lIHBvcnROVU1fQ09ORklHVVJBQkxFX1JFR0lPTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggcG9ydFRPVEFMX05VTV9SRUdJT05TIC0gcG9ydEZJUlNUX0NPTkZJR1VSQUJMRV9SRUdJT04gKQ0KLSAgICAjZGVmaW5lIHBvcnRMQVNUX0NPTkZJR1VSQUJMRV9SRUdJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICggcG9ydFRPVEFMX05VTV9SRUdJT05TIC0gMSApDQorI2RlZmluZSBwb3J0VU5QUklWSUxFR0VEX0ZMQVNIX1JFR0lPTiAgICAgKCAwVUwgKQ0KKyNkZWZpbmUgcG9ydFBSSVZJTEVHRURfRkxBU0hfUkVHSU9OICAgICAgICggMVVMICkNCisjZGVmaW5lIHBvcnRQUklWSUxFR0VEX1JBTV9SRUdJT04gICAgICAgICAoIDJVTCApDQorI2RlZmluZSBwb3J0R0VORVJBTF9QRVJJUEhFUkFMU19SRUdJT04gICAgKCAzVUwgKQ0KKyNkZWZpbmUgcG9ydFNUQUNLX1JFR0lPTiAgICAgICAgICAgICAgICAgICggNFVMICkNCisjZGVmaW5lIHBvcnRGSVJTVF9DT05GSUdVUkFCTEVfUkVHSU9OICAgICAoIDVVTCApDQorI2RlZmluZSBwb3J0VE9UQUxfTlVNX1JFR0lPTlMgICAgICAgICAgICAgKCBjb25maWdUT1RBTF9NUFVfUkVHSU9OUyApDQorI2RlZmluZSBwb3J0TlVNX0NPTkZJR1VSQUJMRV9SRUdJT05TICAgICAgKCBwb3J0VE9UQUxfTlVNX1JFR0lPTlMgLSBwb3J0RklSU1RfQ09ORklHVVJBQkxFX1JFR0lPTiApDQorI2RlZmluZSBwb3J0TEFTVF9DT05GSUdVUkFCTEVfUkVHSU9OICAgICAgKCBwb3J0VE9UQUxfTlVNX1JFR0lPTlMgLSAxICkNCiANCi0gICAgdm9pZCB2UG9ydFN3aXRjaFRvVXNlck1vZGUoIHZvaWQgKTsNCi0gICAgI2RlZmluZSBwb3J0U1dJVENIX1RPX1VTRVJfTU9ERSgpICAgIHZQb3J0U3dpdGNoVG9Vc2VyTW9kZSgpDQordm9pZCB2UG9ydFN3aXRjaFRvVXNlck1vZGUoIHZvaWQgKTsNCisjZGVmaW5lIHBvcnRTV0lUQ0hfVE9fVVNFUl9NT0RFKCkgICAgdlBvcnRTd2l0Y2hUb1VzZXJNb2RlKCkNCiANCi0gICAgdHlwZWRlZiBzdHJ1Y3QgTVBVX1JFR0lPTl9SRUdJU1RFUlMNCi0gICAgew0KLSAgICAgICAgdWludDMyX3QgdWxSZWdpb25CYXNlQWRkcmVzczsNCi0gICAgICAgIHVpbnQzMl90IHVsUmVnaW9uQXR0cmlidXRlOw0KLSAgICB9IHhNUFVfUkVHSU9OX1JFR0lTVEVSUzsNCit0eXBlZGVmIHN0cnVjdCBNUFVfUkVHSU9OX1JFR0lTVEVSUw0KK3sNCisgICAgdWludDMyX3QgdWxSZWdpb25CYXNlQWRkcmVzczsNCisgICAgdWludDMyX3QgdWxSZWdpb25BdHRyaWJ1dGU7DQorfSB4TVBVX1JFR0lPTl9SRUdJU1RFUlM7DQogDQogLyogUGx1cyAxIHRvIGNyZWF0ZSBzcGFjZSBmb3IgdGhlIHN0YWNrIHJlZ2lvbi4gKi8NCi0gICAgdHlwZWRlZiBzdHJ1Y3QgTVBVX1NFVFRJTkdTDQotICAgIHsNCi0gICAgICAgIHhNUFVfUkVHSU9OX1JFR0lTVEVSUyB4UmVnaW9uWyBwb3J0VE9UQUxfTlVNX1JFR0lPTlMgXTsNCi0gICAgfSB4TVBVX1NFVFRJTkdTOw0KK3R5cGVkZWYgc3RydWN0IE1QVV9TRVRUSU5HUw0KK3sNCisgICAgeE1QVV9SRUdJT05fUkVHSVNURVJTIHhSZWdpb25bIHBvcnRUT1RBTF9OVU1fUkVHSU9OUyBdOw0KK30geE1QVV9TRVRUSU5HUzsNCiANCiAvKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWNzLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEggICAgICAgICAgKCAtMSApDQotICAgICNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TICAgICAgICAoICggVGlja1R5cGVfdCApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KLSAgICAjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVCAgICAgICAgOA0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSCAgICAgICAgICAoIC0xICkNCisjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUyAgICAgICAgKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCisjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVCAgICAgICAgOA0KIA0KIC8qIENvbnN0YW50cyB1c2VkIHdpdGggbWVtb3J5IGJhcnJpZXIgaW50cmluc2ljcy4gKi8NCi0gICAgI2RlZmluZSBwb3J0U1lfRlVMTF9SRUFEX1dSSVRFICAgICggMTUgKQ0KKyNkZWZpbmUgcG9ydFNZX0ZVTExfUkVBRF9XUklURSAgICAoIDE1ICkNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBTVkMgbnVtYmVycyBmb3IgdmFyaW91cyBzZXJ2aWNlcy4gKi8NCi0gICAgI2RlZmluZSBwb3J0U1ZDX1NUQVJUX1NDSEVEVUxFUiAgICAwDQotICAgICNkZWZpbmUgcG9ydFNWQ19ZSUVMRCAgICAgICAgICAgICAgMQ0KLSAgICAjZGVmaW5lIHBvcnRTVkNfUkFJU0VfUFJJVklMRUdFICAgIDINCisjZGVmaW5lIHBvcnRTVkNfU1RBUlRfU0NIRURVTEVSICAgIDANCisjZGVmaW5lIHBvcnRTVkNfWUlFTEQgICAgICAgICAgICAgIDENCisjZGVmaW5lIHBvcnRTVkNfUkFJU0VfUFJJVklMRUdFICAgIDINCiANCiAvKiBTY2hlZHVsZXIgdXRpbGl0aWVzLiAqLw0KIA0KLSAgICAjZGVmaW5lIHBvcnRZSUVMRCgpICAgIF9fYXNteyBTVkMgcG9ydFNWQ19ZSUVMRCB9DQotICAgICNkZWZpbmUgcG9ydFlJRUxEX1dJVEhJTl9BUEkoKSAgICAgICAgICAgICAgICAgICAgICBcDQorI2RlZmluZSBwb3J0WUlFTEQoKSAgICBfX2FzbXsgU1ZDIHBvcnRTVkNfWUlFTEQgfQ0KKyNkZWZpbmUgcG9ydFlJRUxEX1dJVEhJTl9BUEkoKSAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KICAgICAgICAgLyogU2V0IGEgUGVuZFNWIHRvIHJlcXVlc3QgYSBjb250ZXh0IHN3aXRjaC4gKi8gXA0KICAgICAgICAgcG9ydE5WSUNfSU5UX0NUUkxfUkVHID0gcG9ydE5WSUNfUEVORFNWU0VUX0JJVDsgXA0KQEAgLTIyMiwxODAgKzIyNSwxOTAgQEAKICAgICB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQotICAgICNkZWZpbmUgcG9ydE5WSUNfSU5UX0NUUkxfUkVHICAgICAoICooICggdm9sYXRpbGUgdWludDMyX3QgKiApIDB4ZTAwMGVkMDQgKSApDQotICAgICNkZWZpbmUgcG9ydE5WSUNfUEVORFNWU0VUX0JJVCAgICAoIDFVTCA8PCAyOFVMICkNCi0gICAgI2RlZmluZSBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHhTd2l0Y2hSZXF1aXJlZCApICAgIGlmKCB4U3dpdGNoUmVxdWlyZWQgKSBwb3J0TlZJQ19JTlRfQ1RSTF9SRUcgPSBwb3J0TlZJQ19QRU5EU1ZTRVRfQklUDQotICAgICNkZWZpbmUgcG9ydFlJRUxEX0ZST01fSVNSKCB4ICkgICAgICAgICAgICAgICAgICAgICBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHggKQ0KKyNkZWZpbmUgcG9ydE5WSUNfSU5UX0NUUkxfUkVHICAgICAoICooICggdm9sYXRpbGUgdWludDMyX3QgKiApIDB4ZTAwMGVkMDQgKSApDQorI2RlZmluZSBwb3J0TlZJQ19QRU5EU1ZTRVRfQklUICAgICggMVVMIDw8IDI4VUwgKQ0KKyNkZWZpbmUgcG9ydEVORF9TV0lUQ0hJTkdfSVNSKCB4U3dpdGNoUmVxdWlyZWQgKSAgICBpZiggeFN3aXRjaFJlcXVpcmVkICkgcG9ydE5WSUNfSU5UX0NUUkxfUkVHID0gcG9ydE5WSUNfUEVORFNWU0VUX0JJVA0KKyNkZWZpbmUgcG9ydFlJRUxEX0ZST01fSVNSKCB4ICkgICAgICAgICAgICAgICAgICAgICBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHggKQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIENyaXRpY2FsIHNlY3Rpb24gbWFuYWdlbWVudC4gKi8NCi0gICAgZXh0ZXJuIHZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICk7DQotICAgIGV4dGVybiB2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCiANCi0gICAgI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgICAgICAgICAgICAgICAgICB2UG9ydFJhaXNlQkFTRVBSSSgpDQotICAgICNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkgICAgICAgICAgICAgICAgICAgdlBvcnRTZXRCQVNFUFJJKCAwICkNCi0gICAgI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKSAgICAgICAgICAgICAgICAgICAgICB2UG9ydEVudGVyQ3JpdGljYWwoKQ0KLSAgICAjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkgICAgICAgICAgICAgICAgICAgICAgIHZQb3J0RXhpdENyaXRpY2FsKCkNCi0gICAgI2RlZmluZSBwb3J0U0VUX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCkgICAgICAgICB1bFBvcnRSYWlzZUJBU0VQUkkoKQ0KLSAgICAjZGVmaW5lIHBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUiggeCApICAgIHZQb3J0U2V0QkFTRVBSSSggeCApDQorI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgICAgICAgICAgICAgICAgICB2UG9ydFJhaXNlQkFTRVBSSSgpDQorI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKSAgICAgICAgICAgICAgICAgICB2UG9ydFNldEJBU0VQUkkoIDAgKQ0KKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgICAgICAgICAgICAgICAgICAgICAgdlBvcnRFbnRlckNyaXRpY2FsKCkNCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkgICAgICAgICAgICAgICAgICAgICAgIHZQb3J0RXhpdENyaXRpY2FsKCkNCisjZGVmaW5lIHBvcnRTRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKSAgICAgICAgIHVsUG9ydFJhaXNlQkFTRVBSSSgpDQorI2RlZmluZSBwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoIHggKSAgICB2UG9ydFNldEJBU0VQUkkoIHggKQ0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIEFyY2hpdGVjdHVyZSBzcGVjaWZpYyBvcHRpbWlzYXRpb25zLiAqLw0KLSAgICAjaWZuZGVmIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTg0KLSAgICAgICAgI2RlZmluZSBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gICAgMQ0KLSAgICAjZW5kaWYNCisjaWZuZGVmIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTg0KKyAgICAjZGVmaW5lIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiAgICAxDQorI2VuZGlmDQogDQotICAgICNpZiBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gPT0gMQ0KKyNpZiBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gPT0gMQ0KIA0KIC8qIENoZWNrIHRoZSBjb25maWd1cmF0aW9uLiAqLw0KLSAgICAgICAgI2lmICggY29uZmlnTUFYX1BSSU9SSVRJRVMgPiAzMiApDQotICAgICAgICAgICAgI2Vycm9yIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiBjYW4gb25seSBiZSBzZXQgdG8gMSB3aGVuIGNvbmZpZ01BWF9QUklPUklUSUVTIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAzMi4gIEl0IGlzIHZlcnkgcmFyZSB0aGF0IGEgc3lzdGVtIHJlcXVpcmVzIG1vcmUgdGhhbiAxMCB0byAxNSBkaWZmZXJlbmNlIHByaW9yaXRpZXMgYXMgdGFza3MgdGhhdCBzaGFyZSBhIHByaW9yaXR5IHdpbGwgdGltZSBzbGljZS4NCi0gICAgICAgICNlbmRpZg0KKyAgICAjaWYgKCBjb25maWdNQVhfUFJJT1JJVElFUyA+IDMyICkNCisgICAgICAgICNlcnJvciBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gY2FuIG9ubHkgYmUgc2V0IHRvIDEgd2hlbiBjb25maWdNQVhfUFJJT1JJVElFUyBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMzIuICBJdCBpcyB2ZXJ5IHJhcmUgdGhhdCBhIHN5c3RlbSByZXF1aXJlcyBtb3JlIHRoYW4gMTAgdG8gMTUgZGlmZmVyZW5jZSBwcmlvcml0aWVzIGFzIHRhc2tzIHRoYXQgc2hhcmUgYSBwcmlvcml0eSB3aWxsIHRpbWUgc2xpY2UuDQorICAgICNlbmRpZg0KIA0KIC8qIFN0b3JlL2NsZWFyIHRoZSByZWFkeSBwcmlvcml0aWVzIGluIGEgYml0IG1hcC4gKi8NCi0gICAgICAgICNkZWZpbmUgcG9ydFJFQ09SRF9SRUFEWV9QUklPUklUWSggdXhQcmlvcml0eSwgdXhSZWFkeVByaW9yaXRpZXMgKSAgICAoIHV4UmVhZHlQcmlvcml0aWVzICkgfD0gKCAxVUwgPDwgKCB1eFByaW9yaXR5ICkgKQ0KLSAgICAgICAgI2RlZmluZSBwb3J0UkVTRVRfUkVBRFlfUFJJT1JJVFkoIHV4UHJpb3JpdHksIHV4UmVhZHlQcmlvcml0aWVzICkgICAgICggdXhSZWFkeVByaW9yaXRpZXMgKSAmPSB+KCAxVUwgPDwgKCB1eFByaW9yaXR5ICkgKQ0KKyAgICAjZGVmaW5lIHBvcnRSRUNPUkRfUkVBRFlfUFJJT1JJVFkoIHV4UHJpb3JpdHksIHV4UmVhZHlQcmlvcml0aWVzICkgICAgKCB1eFJlYWR5UHJpb3JpdGllcyApIHw9ICggMVVMIDw8ICggdXhQcmlvcml0eSApICkNCisgICAgI2RlZmluZSBwb3J0UkVTRVRfUkVBRFlfUFJJT1JJVFkoIHV4UHJpb3JpdHksIHV4UmVhZHlQcmlvcml0aWVzICkgICAgICggdXhSZWFkeVByaW9yaXRpZXMgKSAmPSB+KCAxVUwgPDwgKCB1eFByaW9yaXR5ICkgKQ0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KLSAgICAgICAgI2RlZmluZSBwb3J0R0VUX0hJR0hFU1RfUFJJT1JJVFkoIHV4VG9wUHJpb3JpdHksIHV4UmVhZHlQcmlvcml0aWVzICkgICAgdXhUb3BQcmlvcml0eSA9ICggMzFVTCAtICggdWludDMyX3QgKSBfX2NseiggKCB1eFJlYWR5UHJpb3JpdGllcyApICkgKQ0KKyAgICAjZGVmaW5lIHBvcnRHRVRfSElHSEVTVF9QUklPUklUWSggdXhUb3BQcmlvcml0eSwgdXhSZWFkeVByaW9yaXRpZXMgKSAgICB1eFRvcFByaW9yaXR5ID0gKCAzMVVMIC0gKCB1aW50MzJfdCApIF9fY2x6KCAoIHV4UmVhZHlQcmlvcml0aWVzICkgKSApDQogDQotICAgICNlbmRpZiAvKiBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gKi8NCisjZW5kaWYgLyogY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OICovDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICBUaGVzZSBhcmUNCiAgKiBub3QgbmVjZXNzYXJ5IGZvciB0byB1c2UgdGhpcyBwb3J0LiAgVGhleSBhcmUgZGVmaW5lZCBzbyB0aGUgY29tbW9uIGRlbW8gZmlsZXMNCiAgKiAod2hpY2ggYnVpbGQgd2l0aCBhbGwgdGhlIHBvcnRzKSB3aWxsIGJ1aWxkLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCi0gICAgI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICAgICAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICAgICAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQotICAgICNpZmRlZiBjb25maWdBU1NFUlQNCi0gICAgICAgIHZvaWQgdlBvcnRWYWxpZGF0ZUludGVycnVwdFByaW9yaXR5KCB2b2lkICk7DQotICAgICAgICAjZGVmaW5lIHBvcnRBU1NFUlRfSUZfSU5URVJSVVBUX1BSSU9SSVRZX0lOVkFMSUQoKSAgICB2UG9ydFZhbGlkYXRlSW50ZXJydXB0UHJpb3JpdHkoKQ0KLSAgICAjZW5kaWYNCisjaWZkZWYgY29uZmlnQVNTRVJUDQorICAgIHZvaWQgdlBvcnRWYWxpZGF0ZUludGVycnVwdFByaW9yaXR5KCB2b2lkICk7DQorICAgICNkZWZpbmUgcG9ydEFTU0VSVF9JRl9JTlRFUlJVUFRfUFJJT1JJVFlfSU5WQUxJRCgpICAgIHZQb3J0VmFsaWRhdGVJbnRlcnJ1cHRQcmlvcml0eSgpDQorI2VuZGlmDQogDQogLyogcG9ydE5PUCgpIGlzIG5vdCByZXF1aXJlZCBieSB0aGlzIHBvcnQuICovDQotICAgICNkZWZpbmUgcG9ydE5PUCgpDQorI2RlZmluZSBwb3J0Tk9QKCkNCiANCi0gICAgI2RlZmluZSBwb3J0SU5MSU5FICAgICAgICAgICAgICBfX2lubGluZQ0KKyNkZWZpbmUgcG9ydElOTElORSAgICAgICAgICAgICAgX19pbmxpbmUNCiANCi0gICAgI2lmbmRlZiBwb3J0Rk9SQ0VfSU5MSU5FDQotICAgICAgICAjZGVmaW5lIHBvcnRGT1JDRV9JTkxJTkUgICAgX19mb3JjZWlubGluZQ0KLSAgICAjZW5kaWYNCisjaWZuZGVmIHBvcnRGT1JDRV9JTkxJTkUNCisgICAgI2RlZmluZSBwb3J0Rk9SQ0VfSU5MSU5FICAgIF9fZm9yY2VpbmxpbmUNCisjZW5kaWYNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0gICAgZXh0ZXJuIEJhc2VUeXBlX3QgeElzUHJpdmlsZWdlZCggdm9pZCApOw0KLSAgICBleHRlcm4gdm9pZCB2UmVzZXRQcml2aWxlZ2UoIHZvaWQgKTsNCitleHRlcm4gQmFzZVR5cGVfdCB4SXNQcml2aWxlZ2VkKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdlJlc2V0UHJpdmlsZWdlKCB2b2lkICk7DQogDQogLyoqDQogICogQGJyaWVmIENoZWNrcyB3aGV0aGVyIG9yIG5vdCB0aGUgcHJvY2Vzc29yIGlzIHByaXZpbGVnZWQuDQogICoNCiAgKiBAcmV0dXJuIDEgaWYgdGhlIHByb2Nlc3NvciBpcyBhbHJlYWR5IHByaXZpbGVnZWQsIDAgb3RoZXJ3aXNlLg0KICAqLw0KLSAgICAjZGVmaW5lIHBvcnRJU19QUklWSUxFR0VEKCkgICAgICB4SXNQcml2aWxlZ2VkKCkNCisjZGVmaW5lIHBvcnRJU19QUklWSUxFR0VEKCkgICAgICB4SXNQcml2aWxlZ2VkKCkNCiANCiAvKioNCiAgKiBAYnJpZWYgUmFpc2UgYW4gU1ZDIHJlcXVlc3QgdG8gcmFpc2UgcHJpdmlsZWdlLg0KICAqLw0KLSAgICAjZGVmaW5lIHBvcnRSQUlTRV9QUklWSUxFR0UoKSAgICBfX2FzbSB7IHN2YyBwb3J0U1ZDX1JBSVNFX1BSSVZJTEVHRSB9DQorI2RlZmluZSBwb3J0UkFJU0VfUFJJVklMRUdFKCkgICAgX19hc20geyBzdmMgcG9ydFNWQ19SQUlTRV9QUklWSUxFR0UgfQ0KIA0KIC8qKg0KICAqIEBicmllZiBMb3dlcnMgdGhlIHByaXZpbGVnZSBsZXZlbCBieSBzZXR0aW5nIHRoZSBiaXQgMCBvZiB0aGUgQ09OVFJPTA0KICAqIHJlZ2lzdGVyLg0KICAqLw0KLSAgICAjZGVmaW5lIHBvcnRSRVNFVF9QUklWSUxFR0UoKSAgICB2UmVzZXRQcml2aWxlZ2UoKQ0KKyNkZWZpbmUgcG9ydFJFU0VUX1BSSVZJTEVHRSgpICAgIHZSZXNldFByaXZpbGVnZSgpDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQotICAgIHN0YXRpYyBwb3J0Rk9SQ0VfSU5MSU5FIHZvaWQgdlBvcnRTZXRCQVNFUFJJKCB1aW50MzJfdCB1bEJBU0VQUkkgKQ0KK3N0YXRpYyBwb3J0Rk9SQ0VfSU5MSU5FIHZvaWQgdlBvcnRTZXRCQVNFUFJJKCB1aW50MzJfdCB1bEJBU0VQUkkgKQ0KK3sNCisgICAgX19hc20NCiAgICAgew0KLSAgICAgICAgX19hc20NCi0gICAgICAgIHsNCi0gICAgICAgICAgICAvKiBCYXJyaWVyIGluc3RydWN0aW9ucyBhcmUgbm90IHVzZWQgYXMgdGhpcyBmdW5jdGlvbiBpcyBvbmx5IHVzZWQgdG8NCi0gICAgICAgICAgICAgKiBsb3dlciB0aGUgQkFTRVBSSSB2YWx1ZS4gKi8NCi0gICAgICAgICAgICBtc3IgYmFzZXByaSwgdWxCQVNFUFJJDQotICAgICAgICB9DQorICAgICAgICAvKiBCYXJyaWVyIGluc3RydWN0aW9ucyBhcmUgbm90IHVzZWQgYXMgdGhpcyBmdW5jdGlvbiBpcyBvbmx5IHVzZWQgdG8NCisgICAgICAgICAqIGxvd2VyIHRoZSBCQVNFUFJJIHZhbHVlLiAqLw0KKy8qICpJTkRFTlQtT0ZGKiAqLw0KKyAgICAgICAgbXNyIGJhc2VwcmksIHVsQkFTRVBSSQ0KKy8qICpJTkRFTlQtT04qICovDQogICAgIH0NCit9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQotICAgIHN0YXRpYyBwb3J0Rk9SQ0VfSU5MSU5FIHZvaWQgdlBvcnRSYWlzZUJBU0VQUkkoIHZvaWQgKQ0KK3N0YXRpYyBwb3J0Rk9SQ0VfSU5MSU5FIHZvaWQgdlBvcnRSYWlzZUJBU0VQUkkoIHZvaWQgKQ0KK3sNCisgICAgdWludDMyX3QgdWxOZXdCQVNFUFJJID0gY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZOw0KKw0KKyAgICBfX2FzbQ0KICAgICB7DQotICAgICAgICB1aW50MzJfdCB1bE5ld0JBU0VQUkkgPSBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFk7DQotDQotICAgICAgICBfX2FzbQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIC8qIFNldCBCQVNFUFJJIHRvIHRoZSBtYXggc3lzY2FsbCBwcmlvcml0eSB0byBlZmZlY3QgYSBjcml0aWNhbA0KLSAgICAgICAgICAgICAqIHNlY3Rpb24uICovDQotICAgICAgICAgICAgbXNyIGJhc2VwcmksIHVsTmV3QkFTRVBSSQ0KLSAgICAgICAgICAgIGRzYg0KLSAgICAgICAgICAgICAgICBpc2INCi0gICAgICAgIH0NCisgICAgICAgIC8qIFNldCBCQVNFUFJJIHRvIHRoZSBtYXggc3lzY2FsbCBwcmlvcml0eSB0byBlZmZlY3QgYSBjcml0aWNhbA0KKyAgICAgICAgICogc2VjdGlvbi4gKi8NCisvKiAqSU5ERU5ULU9GRiogKi8NCisgICAgICAgIG1zciBiYXNlcHJpLCB1bE5ld0JBU0VQUkkNCisgICAgICAgIGRzYg0KKyAgICAgICAgaXNiDQorLyogKklOREVOVC1PTiogKi8NCiAgICAgfQ0KK30NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0gICAgc3RhdGljIHBvcnRGT1JDRV9JTkxJTkUgdm9pZCB2UG9ydENsZWFyQkFTRVBSSUZyb21JU1IoIHZvaWQgKQ0KK3N0YXRpYyBwb3J0Rk9SQ0VfSU5MSU5FIHZvaWQgdlBvcnRDbGVhckJBU0VQUklGcm9tSVNSKCB2b2lkICkNCit7DQorICAgIF9fYXNtDQogICAgIHsNCi0gICAgICAgIF9fYXNtDQotICAgICAgICB7DQotICAgICAgICAgICAgLyogU2V0IEJBU0VQUkkgdG8gMCBzbyBubyBpbnRlcnJ1cHRzIGFyZSBtYXNrZWQuICBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkNCi0gICAgICAgICAgICAgKiB1c2VkIHRvIGxvd2VyIHRoZSBtYXNrIGluIGFuIGludGVycnVwdCwgc28gbWVtb3J5IGJhcnJpZXJzIGFyZSBub3QNCi0gICAgICAgICAgICAgKiB1c2VkLiAqLw0KLSAgICAgICAgICAgIG1zciBiYXNlcHJpLCAjIDANCi0gICAgICAgIH0NCisgICAgICAgIC8qIFNldCBCQVNFUFJJIHRvIDAgc28gbm8gaW50ZXJydXB0cyBhcmUgbWFza2VkLiAgVGhpcyBmdW5jdGlvbiBpcyBvbmx5DQorICAgICAgICAgKiB1c2VkIHRvIGxvd2VyIHRoZSBtYXNrIGluIGFuIGludGVycnVwdCwgc28gbWVtb3J5IGJhcnJpZXJzIGFyZSBub3QNCisgICAgICAgICAqIHVzZWQuICovDQorLyogKklOREVOVC1PRkYqICovDQorICAgICAgICBtc3IgYmFzZXByaSwgIyAwDQorLyogKklOREVOVC1PTiogKi8NCiAgICAgfQ0KK30NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0gICAgc3RhdGljIHBvcnRGT1JDRV9JTkxJTkUgdWludDMyX3QgdWxQb3J0UmFpc2VCQVNFUFJJKCB2b2lkICkNCitzdGF0aWMgcG9ydEZPUkNFX0lOTElORSB1aW50MzJfdCB1bFBvcnRSYWlzZUJBU0VQUkkoIHZvaWQgKQ0KK3sNCisgICAgdWludDMyX3QgdWxSZXR1cm4sIHVsTmV3QkFTRVBSSSA9IGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWTsNCisNCisgICAgX19hc20NCiAgICAgew0KLSAgICAgICAgdWludDMyX3QgdWxSZXR1cm4sIHVsTmV3QkFTRVBSSSA9IGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWTsNCi0NCi0gICAgICAgIF9fYXNtDQotICAgICAgICB7DQotICAgICAgICAgICAgLyogU2V0IEJBU0VQUkkgdG8gdGhlIG1heCBzeXNjYWxsIHByaW9yaXR5IHRvIGVmZmVjdCBhIGNyaXRpY2FsDQotICAgICAgICAgICAgICogc2VjdGlvbi4gKi8NCi0gICAgICAgICAgICBtcnMgdWxSZXR1cm4sIGJhc2VwcmkNCi0gICAgICAgICAgICBtc3IgYmFzZXByaSwgdWxOZXdCQVNFUFJJDQotICAgICAgICAgICAgZHNiDQotICAgICAgICAgICAgICAgIGlzYg0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgcmV0dXJuIHVsUmV0dXJuOw0KKyAgICAgICAgLyogU2V0IEJBU0VQUkkgdG8gdGhlIG1heCBzeXNjYWxsIHByaW9yaXR5IHRvIGVmZmVjdCBhIGNyaXRpY2FsDQorICAgICAgICAgKiBzZWN0aW9uLiAqLw0KKy8qICpJTkRFTlQtT0ZGKiAqLw0KKyAgICAgICAgbXJzIHVsUmV0dXJuLCBiYXNlcHJpDQorICAgICAgICBtc3IgYmFzZXByaSwgdWxOZXdCQVNFUFJJDQorICAgICAgICBkc2INCisgICAgICAgIGlzYg0KKy8qICpJTkRFTlQtT04qICovDQogICAgIH0NCisNCisgICAgcmV0dXJuIHVsUmV0dXJuOw0KK30NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0gICAgc3RhdGljIHBvcnRGT1JDRV9JTkxJTkUgQmFzZVR5cGVfdCB4UG9ydElzSW5zaWRlSW50ZXJydXB0KCB2b2lkICkNCitzdGF0aWMgcG9ydEZPUkNFX0lOTElORSBCYXNlVHlwZV90IHhQb3J0SXNJbnNpZGVJbnRlcnJ1cHQoIHZvaWQgKQ0KK3sNCisgICAgdWludDMyX3QgdWxDdXJyZW50SW50ZXJydXB0Ow0KKyAgICBCYXNlVHlwZV90IHhSZXR1cm47DQorDQorICAgIC8qIE9idGFpbiB0aGUgbnVtYmVyIG9mIHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nIGludGVycnVwdC4gKi8NCisgICAgX19hc20NCiAgICAgew0KLSAgICAgICAgdWludDMyX3QgdWxDdXJyZW50SW50ZXJydXB0Ow0KLSAgICAgICAgQmFzZVR5cGVfdCB4UmV0dXJuOw0KLQ0KLSAgICAgICAgLyogT2J0YWluIHRoZSBudW1iZXIgb2YgdGhlIGN1cnJlbnRseSBleGVjdXRpbmcgaW50ZXJydXB0LiAqLw0KLSAgICAgICAgX19hc20NCi0gICAgICAgIHsNCi0gICAgICAgICAgICBtcnMgdWxDdXJyZW50SW50ZXJydXB0LCBpcHNyDQotICAgICAgICB9DQotDQotICAgICAgICBpZiggdWxDdXJyZW50SW50ZXJydXB0ID09IDAgKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHhSZXR1cm4gPSBwZEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZWxzZQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHhSZXR1cm4gPSBwZFRSVUU7DQotICAgICAgICB9DQotDQotICAgICAgICByZXR1cm4geFJldHVybjsNCisgICAgICAgIG1ycyB1bEN1cnJlbnRJbnRlcnJ1cHQsIGlwc3INCiAgICAgfQ0KKw0KKyAgICBpZiggdWxDdXJyZW50SW50ZXJydXB0ID09IDAgKQ0KKyAgICB7DQorICAgICAgICB4UmV0dXJuID0gcGRGQUxTRTsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIHhSZXR1cm4gPSBwZFRSVUU7DQorICAgIH0NCisNCisgICAgcmV0dXJuIHhSZXR1cm47DQorfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KLSAgICAjaWZuZGVmIGNvbmZpZ0VORk9SQ0VfU1lTVEVNX0NBTExTX0ZST01fS0VSTkVMX09OTFkNCi0gICAgICAgICN3YXJuaW5nICJjb25maWdFTkZPUkNFX1NZU1RFTV9DQUxMU19GUk9NX0tFUk5FTF9PTkxZIGlzIG5vdCBkZWZpbmVkLiBXZSByZWNvbW1lbmQgZGVmaW5pbmcgaXQgdG8gMSBpbiBGcmVlUlRPU0NvbmZpZy5oIGZvciBiZXR0ZXIgc2VjdXJpdHkuIGh0dHBzOiAvKnd3dy5mcmVlcnRvcy5vcmcvRnJlZVJUT1MtVjEwLjMueC5odG1sIiAqLw0KLSAgICAgICAgI2RlZmluZSBjb25maWdFTkZPUkNFX1NZU1RFTV9DQUxMU19GUk9NX0tFUk5FTF9PTkxZICAgIDANCi0gICAgI2VuZGlmDQorI2lmbmRlZiBjb25maWdFTkZPUkNFX1NZU1RFTV9DQUxMU19GUk9NX0tFUk5FTF9PTkxZDQorICAgICN3YXJuaW5nICJjb25maWdFTkZPUkNFX1NZU1RFTV9DQUxMU19GUk9NX0tFUk5FTF9PTkxZIGlzIG5vdCBkZWZpbmVkLiBXZSByZWNvbW1lbmQgZGVmaW5pbmcgaXQgdG8gMSBpbiBGcmVlUlRPU0NvbmZpZy5oIGZvciBiZXR0ZXIgc2VjdXJpdHkuIGh0dHBzOiAvKnd3dy5mcmVlcnRvcy5vcmcvRnJlZVJUT1MtVjEwLjMueC5odG1sIiAqLw0KKyAgICAjZGVmaW5lIGNvbmZpZ0VORk9SQ0VfU1lTVEVNX0NBTExTX0ZST01fS0VSTkVMX09OTFkgICAgMA0KKyNlbmRpZg0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KLSAgICAjaWZkZWYgX19jcGx1c3BsdXMNCi0gICAgICAgIH0NCi0gICAgI2VuZGlmDQorLyogKklOREVOVC1PRkYqICovDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorICAgIH0NCisjZW5kaWYNCisvKiAqSU5ERU5ULU9OKiAqLw0KIA0KICNlbmRpZiAvKiBQT1JUTUFDUk9fSCAqLw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL1JWRFMvQVJNX0NNNy9yMHAxL3BvcnQuYyBiL3BvcnRhYmxlL1JWRFMvQVJNX0NNNy9yMHAxL3BvcnQuYwppbmRleCBkMjA2OTY0Li4wNTE5Y2FjIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9SVkRTL0FSTV9DTTcvcjBwMS9wb3J0LmMKKysrIGIvcG9ydGFibGUvUlZEUy9BUk1fQ003L3IwcDEvcG9ydC5jCkBAIC0yMzYsOSArMjM2LDEwIEBACiB7DQogICAgIFBSRVNFUlZFOA0KIA0KKy8qICpJTkRFTlQtT0ZGKiAqLw0KICAgICAvKiBHZXQgdGhlIGxvY2F0aW9uIG9mIHRoZSBjdXJyZW50IFRDQi4gKi8NCi0gICAgbGRyIHIzLCA9IHB4Q3VycmVudFRDQg0KLSAgICAgICAgICAgICAgbGRyIHIxLCBbIHIzIF0NCisgICAgbGRyIHIzLCA9cHhDdXJyZW50VENCDQorICAgIGxkciByMSwgWyByMyBdDQogICAgIGxkciByMCwgWyByMSBdDQogICAgIC8qIFBvcCB0aGUgY29yZSByZWdpc3RlcnMuICovDQogICAgIGxkbWlhIHIwICEsIHsNCkBAIC0yNDYsMTkgKzI0NywyMSBAQAogICAgIH0NCiAgICAgbXNyIHBzcCwgcjANCiAgICAgaXNiDQotICAgIG1vdiByMCwgIyAwDQorICAgIG1vdiByMCwgIzANCiAgICAgbXNyIGJhc2VwcmksIHIwDQogICAgIGJ4IHIxNA0KKy8qICpJTkRFTlQtT04qICovDQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIF9fYXNtIHZvaWQgcHJ2U3RhcnRGaXJzdFRhc2soIHZvaWQgKQ0KIHsNCisvKiAqSU5ERU5ULU9GRiogKi8NCiAgICAgUFJFU0VSVkU4DQogDQogICAgIC8qIFVzZSB0aGUgTlZJQyBvZmZzZXQgcmVnaXN0ZXIgdG8gbG9jYXRlIHRoZSBzdGFjay4gKi8NCi0gICAgbGRyIHIwLCA9IDB4RTAwMEVEMDgNCi0gICAgICAgICAgICAgIGxkciByMCwgWyByMCBdDQorICAgIGxkciByMCwgPTB4RTAwMEVEMDgNCisgICAgbGRyIHIwLCBbIHIwIF0NCiAgICAgbGRyIHIwLCBbIHIwIF0NCiAgICAgLyogU2V0IHRoZSBtc3AgYmFjayB0byB0aGUgc3RhcnQgb2YgdGhlIHN0YWNrLiAqLw0KICAgICBtc3IgbXNwLCByMA0KQEAgLTI2Nyw3ICsyNzAsNyBAQAogICAgICAqIGJlZm9yZSB0aGUgc2NoZWR1bGVyIHdhcyBzdGFydGVkIC0gd2hpY2ggd291bGQgb3RoZXJ3aXNlIHJlc3VsdCBpbiB0aGUNCiAgICAgICogdW5uZWNlc3NhcnkgbGVhdmluZyBvZiBzcGFjZSBpbiB0aGUgU1ZDIHN0YWNrIGZvciBsYXp5IHNhdmluZyBvZiBGUFUNCiAgICAgICogcmVnaXN0ZXJzLiAqLw0KLSAgICBtb3YgcjAsICMgMA0KKyAgICBtb3YgcjAsICMwDQogICAgIG1zciBjb250cm9sLCByMA0KICAgICAvKiBHbG9iYWxseSBlbmFibGUgaW50ZXJydXB0cy4gKi8NCiAgICAgY3BzaWUgaQ0KQEAgLTI3NywyMyArMjgwLDI2IEBACiAgICAgLyogQ2FsbCBTVkMgdG8gc3RhcnQgdGhlIGZpcnN0IHRhc2suICovDQogICAgICAgICBzdmMgMA0KICAgICBub3ANCi0gICAgICAgIG5vcA0KKyAgICBub3ANCisvKiAqSU5ERU5ULU9OKiAqLw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBfX2FzbSB2b2lkIHBydkVuYWJsZVZGUCggdm9pZCApDQogew0KKy8qICpJTkRFTlQtT0ZGKiAqLw0KICAgICBQUkVTRVJWRTgNCiANCiAgICAgLyogVGhlIEZQVSBlbmFibGUgYml0cyBhcmUgaW4gdGhlIENQQUNSLiAqLw0KLSAgICBsZHIudyByMCwgPSAweEUwMDBFRDg4DQotICAgICAgICAgICAgICAgIGxkciByMSwgWyByMCBdDQorICAgIGxkci53IHIwLCA9MHhFMDAwRUQ4OA0KKyAgICBsZHIgcjEsIFsgcjAgXQ0KIA0KICAgICAvKiBFbmFibGUgQ1AxMCBhbmQgQ1AxMSBjb3Byb2Nlc3NvcnMsIHRoZW4gc2F2ZSBiYWNrLiAqLw0KLSAgICBvcnIgcjEsIHIxLCAjICggMHhmIDw8IDIwICkNCisgICAgb3JyIHIxLCByMSwgIyggMHhmIDw8IDIwICkNCiAgICAgc3RyIHIxLCBbIHIwIF0NCiAgICAgYnggcjE0DQogICAgIG5vcA0KKy8qICpJTkRFTlQtT04qICovDQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KQEAgLTQzOCwxNiArNDQ0LDE3IEBACiAgICAgZXh0ZXJuIHB4Q3VycmVudFRDQjsNCiAgICAgZXh0ZXJuIHZUYXNrU3dpdGNoQ29udGV4dDsNCiANCisvKiAqSU5ERU5ULU9GRiogKi8NCiAgICAgUFJFU0VSVkU4DQogDQogICAgIG1ycyByMCwgcHNwDQogICAgIGlzYg0KICAgICAvKiBHZXQgdGhlIGxvY2F0aW9uIG9mIHRoZSBjdXJyZW50IFRDQi4gKi8NCi0gICAgbGRyIHIzLCA9IHB4Q3VycmVudFRDQg0KLSAgICAgICAgICAgICAgbGRyIHIyLCBbIHIzIF0NCisgICAgbGRyIHIzLCA9cHhDdXJyZW50VENCDQorICAgIGxkciByMiwgWyByMyBdDQogDQogICAgIC8qIElzIHRoZSB0YXNrIHVzaW5nIHRoZSBGUFUgY29udGV4dD8gIElmIHNvLCBwdXNoIGhpZ2ggdmZwIHJlZ2lzdGVycy4gKi8NCi0gICAgdHN0IHIxNCwgIyAweDEwDQorICAgIHRzdCByMTQsICMweDEwDQogICAgIGl0IGVxDQogICAgIHZzdG1kYmVxIHIwICEsIHsNCiAgICAgICAgIHMxNiAtIHMzMQ0KQEAgLTQ2NCwxNCArNDcxLDE0IEBACiAgICAgc3RtZGIgc3AgISwgew0KICAgICAgICAgcjAsIHIzDQogICAgIH0NCi0gICAgbW92IHIwLCAjIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWQ0KKyAgICBtb3YgcjAsICNjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkNCiAgICAgY3BzaWQgaQ0KICAgICBtc3IgYmFzZXByaSwgcjANCiAgICAgZHNiDQogICAgIGlzYg0KICAgICBjcHNpZSBpDQogICAgIGJsIHZUYXNrU3dpdGNoQ29udGV4dA0KLSAgICBtb3YgcjAsICMgMA0KKyAgICBtb3YgcjAsICMwDQogICAgIG1zciBiYXNlcHJpLCByMA0KICAgICBsZG1pYSBzcCAhLCB7DQogICAgICAgICByMCwgcjMNCkBAIC00ODgsMTQgKzQ5NSwxNCBAQAogDQogICAgIC8qIElzIHRoZSB0YXNrIHVzaW5nIHRoZSBGUFUgY29udGV4dD8gIElmIHNvLCBwb3AgdGhlIGhpZ2ggdmZwIHJlZ2lzdGVycw0KICAgICAgKiB0b28uICovDQotICAgIHRzdCByMTQsICMgMHgxMA0KKyAgICB0c3QgcjE0LCAjMHgxMA0KICAgICBpdCBlcQ0KICAgICB2bGRtaWFlcSByMCAhLCB7DQogICAgICAgICBzMTYgLSBzMzENCiAgICAgfQ0KIA0KICAgICBtc3IgcHNwLCByMA0KLSAgICAgICAgaXNiDQorICAgIGlzYg0KICAgICAjaWZkZWYgV09SS0FST1VORF9QTVVfQ00wMDEgLyogWE1DNDAwMCBzcGVjaWZpYyBlcnJhdGEgKi8NCiAgICAgICAgICNpZiBXT1JLQVJPVU5EX1BNVV9DTTAwMSA9PSAxDQogICAgICAgICAgICAgcHVzaCB7DQpAQCAtNTA5LDYgKzUxNiw3IEBACiAgICAgI2VuZGlmDQogDQogICAgIGJ4IHIxNA0KKy8qICpJTkRFTlQtT04qICovDQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KQEAgLTczNiwxMCArNzQ0LDEyIEBACiANCiBfX2FzbSB1aW50MzJfdCB2UG9ydEdldElQU1IoIHZvaWQgKQ0KIHsNCisvKiAqSU5ERU5ULU9GRiogKi8NCiAgICAgUFJFU0VSVkU4DQogDQogICAgIG1ycyByMCwgaXBzcg0KICAgICBieCByMTQNCisvKiAqSU5ERU5ULU9OKiAqLw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9SZW5lc2FzL1JYMTAwL3BvcnQuYyBiL3BvcnRhYmxlL1JlbmVzYXMvUlgxMDAvcG9ydC5jCmluZGV4IGMzZmY1ZGYuLmQ5NDdlNjQgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL1JlbmVzYXMvUlgxMDAvcG9ydC5jCisrKyBiL3BvcnRhYmxlL1JlbmVzYXMvUlgxMDAvcG9ydC5jCkBAIC0yNiw4ICsyNiw4IEBACiAgKi8NCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgUlgxMDAgcG9ydC4NCi0qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorICogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFibGUuaCBmb3IgdGhlIFJYMTAwIHBvcnQuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBTdGFuZGFyZCBDIGluY2x1ZGVzLiAqLw0KICNpbmNsdWRlICJsaW1pdHMuaCINCkBAIC00NSwzNSArNDUsMzUgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFRhc2tzIHNob3VsZCBzdGFydCB3aXRoIGludGVycnVwdHMgZW5hYmxlZCBhbmQgaW4gU3VwZXJ2aXNvciBtb2RlLCB0aGVyZWZvcmUNCi0gKiBQU1cgaXMgc2V0IHdpdGggVSBhbmQgSSBzZXQsIGFuZCBQTSBhbmQgSVBMIGNsZWFyLiAqLw0KLSNkZWZpbmUgcG9ydElOSVRJQUxfUFNXICAgICggKCBTdGFja1R5cGVfdCApIDB4MDAwMzAwMDAgKQ0KK1BTVyBpcyBzZXQgd2l0aCBVIGFuZCBJIHNldCwgYW5kIFBNIGFuZCBJUEwgY2xlYXIuICovDQorI2RlZmluZSBwb3J0SU5JVElBTF9QU1cgICAgICggKCBTdGFja1R5cGVfdCApIDB4MDAwMzAwMDAgKQ0KIA0KIC8qIFRoZSBwZXJpcGhlcmFsIGNsb2NrIGlzIGRpdmlkZWQgYnkgdGhpcyB2YWx1ZSBiZWZvcmUgYmVpbmcgc3VwcGx5aW5nIHRoZQ0KLSAqIENNVC4gKi8NCitDTVQuICovDQogI2lmICggY29uZmlnVVNFX1RJQ0tMRVNTX0lETEUgPT0gMCApDQotICAgIC8qIElmIHRpY2tsZXNzIGlkbGUgaXMgbm90IHVzZWQgdGhlbiB0aGUgZGl2aXNvciBjYW4gYmUgZml4ZWQuICovDQotICAgICNkZWZpbmUgcG9ydENMT0NLX0RJVklTT1IgICAgOFVMDQorCS8qIElmIHRpY2tsZXNzIGlkbGUgaXMgbm90IHVzZWQgdGhlbiB0aGUgZGl2aXNvciBjYW4gYmUgZml4ZWQuICovDQorCSNkZWZpbmUgcG9ydENMT0NLX0RJVklTT1IJOFVMDQogI2VsaWYgKCBjb25maWdQRVJJUEhFUkFMX0NMT0NLX0haID49IDEyMDAwMDAwICkNCi0gICAgI2RlZmluZSBwb3J0Q0xPQ0tfRElWSVNPUiAgICA1MTJVTA0KKwkjZGVmaW5lIHBvcnRDTE9DS19ESVZJU09SCTUxMlVMDQogI2VsaWYgKCBjb25maWdQRVJJUEhFUkFMX0NMT0NLX0haID49IDYwMDAwMDAgKQ0KLSAgICAjZGVmaW5lIHBvcnRDTE9DS19ESVZJU09SICAgIDEyOFVMDQorCSNkZWZpbmUgcG9ydENMT0NLX0RJVklTT1IJMTI4VUwNCiAjZWxpZiAoIGNvbmZpZ1BFUklQSEVSQUxfQ0xPQ0tfSFogPj0gMTAwMDAwMCApDQotICAgICNkZWZpbmUgcG9ydENMT0NLX0RJVklTT1IgICAgMzJVTA0KKwkjZGVmaW5lIHBvcnRDTE9DS19ESVZJU09SCTMyVUwNCiAjZWxzZQ0KLSAgICAjZGVmaW5lIHBvcnRDTE9DS19ESVZJU09SICAgIDhVTA0KKwkjZGVmaW5lIHBvcnRDTE9DS19ESVZJU09SCThVTA0KICNlbmRpZg0KIA0KIA0KIC8qIEtleXMgcmVxdWlyZWQgdG8gbG9jayBhbmQgdW5sb2NrIGFjY2VzcyB0byBjZXJ0YWluIHN5c3RlbSByZWdpc3RlcnMNCi0gKiByZXNwZWN0aXZlbHkuICovDQotI2RlZmluZSBwb3J0VU5MT0NLX0tFWSAgICAweEE1MEINCi0jZGVmaW5lIHBvcnRMT0NLX0tFWSAgICAgIDB4QTUwMA0KK3Jlc3BlY3RpdmVseS4gKi8NCisjZGVmaW5lIHBvcnRVTkxPQ0tfS0VZCQkweEE1MEINCisjZGVmaW5lIHBvcnRMT0NLX0tFWQkJMHhBNTAwDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGhlIGZvbGxvd2luZyBsaW5lcyBhcmUgdG8gZW5zdXJlIHZTb2Z0d2FyZUludGVycnVwdEVudHJ5IGNhbiBiZSByZWZlcmVuY2VkLA0KLSAqIGFuZCB0aGVyZWZvcmUgaW5zdGFsbGVkIGluIHRoZSB2ZWN0b3IgdGFibGUsIHdoZW4gdGhlIEZyZWVSVE9TIGNvZGUgaXMgYnVpbHQNCi0gKiBhcyBhIGxpYnJhcnkuICovDQorIGFuZCB0aGVyZWZvcmUgaW5zdGFsbGVkIGluIHRoZSB2ZWN0b3IgdGFibGUsIHdoZW4gdGhlIEZyZWVSVE9TIGNvZGUgaXMgYnVpbHQNCithcyBhIGxpYnJhcnkuICovDQogZXh0ZXJuIEJhc2VUeXBlX3QgdlNvZnR3YXJlSW50ZXJydXB0RW50cnk7DQogY29uc3QgQmFzZVR5cGVfdCAqIHBfdlNvZnR3YXJlSW50ZXJydXB0RW50cnkgPSAmdlNvZnR3YXJlSW50ZXJydXB0RW50cnk7DQogDQpAQCAtMTA4LDEwICsxMDgsOSBAQAogICovDQogc3RhdGljIHZvaWQgcHJ2U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApOw0KICNpZm5kZWYgY29uZmlnU0VUVVBfVElDS19JTlRFUlJVUFQNCi0NCi0vKiBUaGUgdXNlciBoYXMgbm90IHByb3ZpZGVkIHRoZWlyIG93biB0aWNrIGludGVycnVwdCBjb25maWd1cmF0aW9uIHNvIHVzZQ0KLSAqIHRoZSBkZWZpbml0aW9uIGluIHRoaXMgZmlsZSAod2hpY2ggdXNlcyB0aGUgaW50ZXJ2YWwgdGltZXIpLiAqLw0KLSAgICAjZGVmaW5lIGNvbmZpZ1NFVFVQX1RJQ0tfSU5URVJSVVBUKCkgICAgcHJ2U2V0dXBUaW1lckludGVycnVwdCgpDQorCS8qIFRoZSB1c2VyIGhhcyBub3QgcHJvdmlkZWQgdGhlaXIgb3duIHRpY2sgaW50ZXJydXB0IGNvbmZpZ3VyYXRpb24gc28gdXNlDQorICAgIHRoZSBkZWZpbml0aW9uIGluIHRoaXMgZmlsZSAod2hpY2ggdXNlcyB0aGUgaW50ZXJ2YWwgdGltZXIpLiAqLw0KKwkjZGVmaW5lIGNvbmZpZ1NFVFVQX1RJQ0tfSU5URVJSVVBUKCkgcHJ2U2V0dXBUaW1lckludGVycnVwdCgpDQogI2VuZGlmIC8qIGNvbmZpZ1NFVFVQX1RJQ0tfSU5URVJSVVBUICovDQogDQogLyoNCkBAIC0xMjAsMTMgKzExOSwxMyBAQAogICogaW5zdHJ1Y3Rpb24uDQogICovDQogI2lmIGNvbmZpZ1VTRV9USUNLTEVTU19JRExFID09IDENCi0gICAgc3RhdGljIHZvaWQgcHJ2U2xlZXAoIFRpY2tUeXBlX3QgeEV4cGVjdGVkSWRsZVRpbWUgKTsNCisJc3RhdGljIHZvaWQgcHJ2U2xlZXAoIFRpY2tUeXBlX3QgeEV4cGVjdGVkSWRsZVRpbWUgKTsNCiAjZW5kaWYgLyogY29uZmlnVVNFX1RJQ0tMRVNTX0lETEUgKi8NCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBUaGVzZSBpcyBhY2Nlc3NlZCBieSB0aGUgaW5saW5lIGFzc2VtYmxlciBmdW5jdGlvbnMuICovDQotZXh0ZXJuIHZvaWQgKiBweEN1cnJlbnRUQ0I7DQorZXh0ZXJuIHZvaWQgKnB4Q3VycmVudFRDQjsNCiBleHRlcm4gdm9pZCB2VGFza1N3aXRjaENvbnRleHQoIHZvaWQgKTsNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCkBAIC0xMzYsNTI0ICsxMzUsNTEyIEBACiANCiAjaWYgY29uZmlnVVNFX1RJQ0tMRVNTX0lETEUgPT0gMQ0KIA0KLS8qIEhvbGRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB0aWNrcyB0aGF0IGNhbiBiZSBzdXBwcmVzc2VkIC0gd2hpY2ggaXMNCi0gKiBiYXNpY2FsbHkgaG93IGZhciBpbnRvIHRoZSBmdXR1cmUgYW4gaW50ZXJydXB0IGNhbiBiZSBnZW5lcmF0ZWQuIFNldA0KLSAqIGR1cmluZyBpbml0aWFsaXNhdGlvbi4gIFRoaXMgaXMgdGhlIG1heGltdW0gcG9zc2libGUgdmFsdWUgdGhhdCB0aGUNCi0gKiBjb21wYXJlIG1hdGNoIHJlZ2lzdGVyIGNhbiBob2xkIGRpdmlkZWQgYnkgdWxNYXRjaFZhbHVlRm9yT25lVGljay4gKi8NCi0gICAgc3RhdGljIGNvbnN0IFRpY2tUeXBlX3QgeE1heGltdW1Qb3NzaWJsZVN1cHByZXNzZWRUaWNrcyA9IFVTSFJUX01BWCAvICggKCBjb25maWdQRVJJUEhFUkFMX0NMT0NLX0haIC8gcG9ydENMT0NLX0RJVklTT1IgKSAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApOw0KKwkvKiBIb2xkcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgdGlja3MgdGhhdCBjYW4gYmUgc3VwcHJlc3NlZCAtIHdoaWNoIGlzDQorCWJhc2ljYWxseSBob3cgZmFyIGludG8gdGhlIGZ1dHVyZSBhbiBpbnRlcnJ1cHQgY2FuIGJlIGdlbmVyYXRlZC4gU2V0DQorCWR1cmluZyBpbml0aWFsaXNhdGlvbi4gIFRoaXMgaXMgdGhlIG1heGltdW0gcG9zc2libGUgdmFsdWUgdGhhdCB0aGUNCisJY29tcGFyZSBtYXRjaCByZWdpc3RlciBjYW4gaG9sZCBkaXZpZGVkIGJ5IHVsTWF0Y2hWYWx1ZUZvck9uZVRpY2suICovDQorCXN0YXRpYyBjb25zdCBUaWNrVHlwZV90IHhNYXhpbXVtUG9zc2libGVTdXBwcmVzc2VkVGlja3MgPSBVU0hSVF9NQVggLyAoICggY29uZmlnUEVSSVBIRVJBTF9DTE9DS19IWiAvIHBvcnRDTE9DS19ESVZJU09SICkgLyBjb25maWdUSUNLX1JBVEVfSFogKTsNCiANCi0vKiBGbGFnIHNldCBmcm9tIHRoZSB0aWNrIGludGVycnVwdCB0byBhbGxvdyB0aGUgc2xlZXAgcHJvY2Vzc2luZyB0byBrbm93IGlmDQotICogc2xlZXAgbW9kZSB3YXMgZXhpdGVkIGJlY2F1c2Ugb2YgYSB0aWNrIGludGVycnVwdCwgb3IgYW4gaW50ZXJydXB0DQotICogZ2VuZXJhdGVkIGJ5IHNvbWV0aGluZyBlbHNlLiAqLw0KLSAgICBzdGF0aWMgdm9sYXRpbGUgdWludDMyX3QgdWxUaWNrRmxhZyA9IHBkRkFMU0U7DQorCS8qIEZsYWcgc2V0IGZyb20gdGhlIHRpY2sgaW50ZXJydXB0IHRvIGFsbG93IHRoZSBzbGVlcCBwcm9jZXNzaW5nIHRvIGtub3cgaWYNCisJc2xlZXAgbW9kZSB3YXMgZXhpdGVkIGJlY2F1c2Ugb2YgYSB0aWNrIGludGVycnVwdCwgb3IgYW4gaW50ZXJydXB0DQorCWdlbmVyYXRlZCBieSBzb21ldGhpbmcgZWxzZS4gKi8NCisJc3RhdGljIHZvbGF0aWxlIHVpbnQzMl90IHVsVGlja0ZsYWcgPSBwZEZBTFNFOw0KIA0KLS8qIFRoZSBDTVQgY291bnRlciBpcyBzdG9wcGVkIHRlbXBvcmFyaWx5IGVhY2ggdGltZSBpdCBpcyByZS1wcm9ncmFtbWVkLg0KLSAqIFRoZSBmb2xsb3dpbmcgY29uc3RhbnQgb2Zmc2V0cyB0aGUgQ01UIGNvdW50ZXIgbWF0Y2ggdmFsdWUgYnkgdGhlIG51bWJlciBvZg0KLSAqIENNVAljb3VudHMgdGhhdCB3b3VsZCB0eXBpY2FsbHkgYmUgbWlzc2VkIHdoaWxlIHRoZSBjb3VudGVyIHdhcyBzdG9wcGVkIHRvDQotICogY29tcGVuc2F0ZSBmb3IgdGhlIGxvc3QgdGltZS4gIFRoZSBsYXJnZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGRpdmlkZWQgQ01UDQotICogY2xvY2sgYW5kIHRoZSBDUFUgY2xvY2sgbWVhbnMgaXQgaXMgbGlrZWx5IHVsU3RvcHBlZFRpbWVyQ29tcGVuc2F0aW9uIHdpbGwNCi0gKiBlcXVhbCB6ZXJvIC0gYW5kIGJlIG9wdGltaXNlZCBhd2F5LiAqLw0KLSAgICBzdGF0aWMgY29uc3QgdWludDMyX3QgdWxTdG9wcGVkVGltZXJDb21wZW5zYXRpb24gPSAxMDBVTCAvICggY29uZmlnQ1BVX0NMT0NLX0haIC8gKCBjb25maWdQRVJJUEhFUkFMX0NMT0NLX0haIC8gcG9ydENMT0NLX0RJVklTT1IgKSApOw0KKwkvKiBUaGUgQ01UIGNvdW50ZXIgaXMgc3RvcHBlZCB0ZW1wb3JhcmlseSBlYWNoIHRpbWUgaXQgaXMgcmUtcHJvZ3JhbW1lZC4NCisJVGhlIGZvbGxvd2luZyBjb25zdGFudCBvZmZzZXRzIHRoZSBDTVQgY291bnRlciBtYXRjaCB2YWx1ZSBieSB0aGUgbnVtYmVyIG9mDQorCUNNVAljb3VudHMgdGhhdCB3b3VsZCB0eXBpY2FsbHkgYmUgbWlzc2VkIHdoaWxlIHRoZSBjb3VudGVyIHdhcyBzdG9wcGVkIHRvDQorCWNvbXBlbnNhdGUgZm9yIHRoZSBsb3N0IHRpbWUuICBUaGUgbGFyZ2UgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBkaXZpZGVkIENNVA0KKwljbG9jayBhbmQgdGhlIENQVSBjbG9jayBtZWFucyBpdCBpcyBsaWtlbHkgdWxTdG9wcGVkVGltZXJDb21wZW5zYXRpb24gd2lsbA0KKwllcXVhbCB6ZXJvIC0gYW5kIGJlIG9wdGltaXNlZCBhd2F5LiAqLw0KKwlzdGF0aWMgY29uc3QgdWludDMyX3QgdWxTdG9wcGVkVGltZXJDb21wZW5zYXRpb24gPSAxMDBVTCAvICggY29uZmlnQ1BVX0NMT0NLX0haIC8gKCBjb25maWdQRVJJUEhFUkFMX0NMT0NLX0haIC8gcG9ydENMT0NLX0RJVklTT1IgKSApOw0KIA0KLSNlbmRpZiAvKiBpZiBjb25maWdVU0VfVElDS0xFU1NfSURMRSA9PSAxICovDQorI2VuZGlmDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyoNCiAgKiBTZWUgaGVhZGVyIGZpbGUgZm9yIGRlc2NyaXB0aW9uLg0KICAqLw0KLVN0YWNrVHlwZV90ICogcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqIHB4VG9wT2ZTdGFjaywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFza0Z1bmN0aW9uX3QgcHhDb2RlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICogcHZQYXJhbWV0ZXJzICkNCitTdGFja1R5cGVfdCAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqcHhUb3BPZlN0YWNrLCBUYXNrRnVuY3Rpb25fdCBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycyApDQogew0KLSAgICAvKiBPZmZzZXQgdG8gZW5kIHVwIG9uIDggYnl0ZSBib3VuZGFyeS4gKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIE9mZnNldCB0byBlbmQgdXAgb24gOCBieXRlIGJvdW5kYXJ5LiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgLyogUjAgaXMgbm90IGluY2x1ZGVkIGFzIGl0IGlzIHRoZSBzdGFjayBwb2ludGVyLiAqLw0KKwkvKiBSMCBpcyBub3QgaW5jbHVkZWQgYXMgaXQgaXMgdGhlIHN0YWNrIHBvaW50ZXIuICovDQorCSpweFRvcE9mU3RhY2sgPSAweDAwOw0KKwlweFRvcE9mU3RhY2stLTsNCiAgICAgKnB4VG9wT2ZTdGFjayA9IDB4MDA7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMHgwMDsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSBwb3J0SU5JVElBTF9QU1c7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB4Q29kZTsNCisJcHhUb3BPZlN0YWNrLS07DQorIAkqcHhUb3BPZlN0YWNrID0gcG9ydElOSVRJQUxfUFNXOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBweENvZGU7DQogDQotICAgIC8qIFdoZW4gZGVidWdnaW5nIGl0IGNhbiBiZSB1c2VmdWwgaWYgZXZlcnkgcmVnaXN0ZXIgaXMgc2V0IHRvIGEga25vd24NCi0gICAgICogdmFsdWUuICBPdGhlcndpc2UgY29kZSBzcGFjZSBjYW4gYmUgc2F2ZWQgYnkganVzdCBzZXR0aW5nIHRoZSByZWdpc3RlcnMNCi0gICAgICogdGhhdCBuZWVkIHRvIGJlIHNldC4gKi8NCi0gICAgI2lmZGVmIFVTRV9GVUxMX1JFR0lTVEVSX0lOSVRJQUxJU0FUSU9ODQotICAgICAgICB7DQotICAgICAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICAgICAgICAgKnB4VG9wT2ZTdGFjayA9IDB4MTIzNDU2Nzg7IC8qIHIxNS4gKi8NCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHhhYWFhYmJiYjsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHhkZGRkZGRkZDsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHhjY2NjY2NjYzsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHhiYmJiYmJiYjsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHhhYWFhYWFhYTsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHg5OTk5OTk5OTsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHg4ODg4ODg4ODsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHg3Nzc3Nzc3NzsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHg2NjY2NjY2NjsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHg1NTU1NTU1NTsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHg0NDQ0NDQ0NDsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHgzMzMzMzMzMzsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHgyMjIyMjIyMjsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgIH0NCi0gICAgI2Vsc2UgLyogaWZkZWYgVVNFX0ZVTExfUkVHSVNURVJfSU5JVElBTElTQVRJT04gKi8NCi0gICAgICAgIHsNCi0gICAgICAgICAgICAvKiBMZWF2ZSBzcGFjZSBmb3IgdGhlIHJlZ2lzdGVycyB0aGF0IHdpbGwgZ2V0IHBvcHBlZCBmcm9tIHRoZSBzdGFjaw0KLSAgICAgICAgICAgICAqIHdoZW4gdGhlIHRhc2sgZmlyc3Qgc3RhcnRzIGV4ZWN1dGluZy4gKi8NCi0gICAgICAgICAgICBweFRvcE9mU3RhY2sgLT0gMTU7DQotICAgICAgICB9DQotICAgICNlbmRpZiAvKiBpZmRlZiBVU0VfRlVMTF9SRUdJU1RFUl9JTklUSUFMSVNBVElPTiAqLw0KKwkvKiBXaGVuIGRlYnVnZ2luZyBpdCBjYW4gYmUgdXNlZnVsIGlmIGV2ZXJ5IHJlZ2lzdGVyIGlzIHNldCB0byBhIGtub3duDQorCXZhbHVlLiAgT3RoZXJ3aXNlIGNvZGUgc3BhY2UgY2FuIGJlIHNhdmVkIGJ5IGp1c3Qgc2V0dGluZyB0aGUgcmVnaXN0ZXJzDQorCXRoYXQgbmVlZCB0byBiZSBzZXQuICovDQorCSNpZmRlZiBVU0VfRlVMTF9SRUdJU1RFUl9JTklUSUFMSVNBVElPTg0KKwl7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweDEyMzQ1Njc4OwkvKiByMTUuICovDQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweGFhYWFiYmJiOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHhkZGRkZGRkZDsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4Y2NjY2NjY2M7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweGJiYmJiYmJiOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHhhYWFhYWFhYTsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4OTk5OTk5OTk7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweDg4ODg4ODg4Ow0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHg3Nzc3Nzc3NzsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4NjY2NjY2NjY7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweDU1NTU1NTU1Ow0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHg0NDQ0NDQ0NDsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4MzMzMzMzMzM7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweDIyMjIyMjIyOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCX0NCisJI2Vsc2UNCisJew0KKwkJLyogTGVhdmUgc3BhY2UgZm9yIHRoZSByZWdpc3RlcnMgdGhhdCB3aWxsIGdldCBwb3BwZWQgZnJvbSB0aGUgc3RhY2sNCisJCXdoZW4gdGhlIHRhc2sgZmlyc3Qgc3RhcnRzIGV4ZWN1dGluZy4gKi8NCisJCXB4VG9wT2ZTdGFjayAtPSAxNTsNCisJfQ0KKwkjZW5kaWYNCiANCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwdlBhcmFtZXRlcnM7IC8qIFIxICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMHgxMjM0NTY3ODsgICAgICAgICAgICAgICAgICAgLyogQWNjdW11bGF0b3IuICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMHg4NzY1NDMyMTsgICAgICAgICAgICAgICAgICAgLyogQWNjdW11bGF0b3IuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHZQYXJhbWV0ZXJzOyAvKiBSMSAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MTIzNDU2Nzg7IC8qIEFjY3VtdWxhdG9yLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4ODc2NTQzMjE7IC8qIEFjY3VtdWxhdG9yLiAqLw0KIA0KLSAgICByZXR1cm4gcHhUb3BPZlN0YWNrOw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBCYXNlVHlwZV90IHhQb3J0U3RhcnRTY2hlZHVsZXIoIHZvaWQgKQ0KIHsNCi0gICAgLyogVXNlIHB4Q3VycmVudFRDQiBqdXN0IHNvIGl0IGRvZXMgbm90IGdldCBvcHRpbWlzZWQgYXdheS4gKi8NCi0gICAgaWYoIHB4Q3VycmVudFRDQiAhPSBOVUxMICkNCi0gICAgew0KLSAgICAgICAgLyogQ2FsbCBhbiBhcHBsaWNhdGlvbiBmdW5jdGlvbiB0byBzZXQgdXAgdGhlIHRpbWVyIHRoYXQgd2lsbCBnZW5lcmF0ZQ0KLSAgICAgICAgICogdGhlIHRpY2sgaW50ZXJydXB0LiAgVGhpcyB3YXkgdGhlIGFwcGxpY2F0aW9uIGNhbiBkZWNpZGUgd2hpY2gNCi0gICAgICAgICAqIHBlcmlwaGVyYWwgdG8gdXNlLiAgSWYgdGlja2xlc3MgbW9kZSBpcyB1c2VkIHRoZW4gdGhlIGRlZmF1bHQNCi0gICAgICAgICAqIGltcGxlbWVudGF0aW9uIGRlZmluZWQgaW4gdGhpcyBmaWxlICh3aGljaCB1c2VzIENNVDApIHNob3VsZCBub3QgYmUNCi0gICAgICAgICAqIG92ZXJyaWRkZW4uICovDQotICAgICAgICBjb25maWdTRVRVUF9USUNLX0lOVEVSUlVQVCgpOw0KKwkvKiBVc2UgcHhDdXJyZW50VENCIGp1c3Qgc28gaXQgZG9lcyBub3QgZ2V0IG9wdGltaXNlZCBhd2F5LiAqLw0KKwlpZiggcHhDdXJyZW50VENCICE9IE5VTEwgKQ0KKwl7DQorCQkvKiBDYWxsIGFuIGFwcGxpY2F0aW9uIGZ1bmN0aW9uIHRvIHNldCB1cCB0aGUgdGltZXIgdGhhdCB3aWxsIGdlbmVyYXRlDQorCQl0aGUgdGljayBpbnRlcnJ1cHQuICBUaGlzIHdheSB0aGUgYXBwbGljYXRpb24gY2FuIGRlY2lkZSB3aGljaA0KKwkJcGVyaXBoZXJhbCB0byB1c2UuICBJZiB0aWNrbGVzcyBtb2RlIGlzIHVzZWQgdGhlbiB0aGUgZGVmYXVsdA0KKwkJaW1wbGVtZW50YXRpb24gZGVmaW5lZCBpbiB0aGlzIGZpbGUgKHdoaWNoIHVzZXMgQ01UMCkgc2hvdWxkIG5vdCBiZQ0KKwkJb3ZlcnJpZGRlbi4gKi8NCisJCWNvbmZpZ1NFVFVQX1RJQ0tfSU5URVJSVVBUKCk7DQogDQotICAgICAgICAvKiBFbmFibGUgdGhlIHNvZnR3YXJlIGludGVycnVwdC4gKi8NCi0gICAgICAgIF9JRU4oIF9JQ1VfU1dJTlQgKSA9IDE7DQorCQkvKiBFbmFibGUgdGhlIHNvZnR3YXJlIGludGVycnVwdC4gKi8NCisJCV9JRU4oIF9JQ1VfU1dJTlQgKSA9IDE7DQogDQotICAgICAgICAvKiBFbnN1cmUgdGhlIHNvZnR3YXJlIGludGVycnVwdCBpcyBjbGVhci4gKi8NCi0gICAgICAgIF9JUiggX0lDVV9TV0lOVCApID0gMDsNCisJCS8qIEVuc3VyZSB0aGUgc29mdHdhcmUgaW50ZXJydXB0IGlzIGNsZWFyLiAqLw0KKwkJX0lSKCBfSUNVX1NXSU5UICkgPSAwOw0KIA0KLSAgICAgICAgLyogRW5zdXJlIHRoZSBzb2Z0d2FyZSBpbnRlcnJ1cHQgaXMgc2V0IHRvIHRoZSBrZXJuZWwgcHJpb3JpdHkuICovDQotICAgICAgICBfSVBSKCBfSUNVX1NXSU5UICkgPSBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZOw0KKwkJLyogRW5zdXJlIHRoZSBzb2Z0d2FyZSBpbnRlcnJ1cHQgaXMgc2V0IHRvIHRoZSBrZXJuZWwgcHJpb3JpdHkuICovDQorCQlfSVBSKCBfSUNVX1NXSU5UICkgPSBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZOw0KIA0KLSAgICAgICAgLyogU3RhcnQgdGhlIGZpcnN0IHRhc2suICovDQotICAgICAgICBwcnZTdGFydEZpcnN0VGFzaygpOw0KLSAgICB9DQorCQkvKiBTdGFydCB0aGUgZmlyc3QgdGFzay4gKi8NCisJCXBydlN0YXJ0Rmlyc3RUYXNrKCk7DQorCX0NCiANCi0gICAgLyogRXhlY3V0aW9uIHNob3VsZCBub3QgcmVhY2ggaGVyZSBhcyB0aGUgdGFza3MgYXJlIG5vdyBydW5uaW5nIQ0KLSAgICAgKiBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCkgaXMgY2FsbGVkIGhlcmUgdG8gcHJldmVudCB0aGUgY29tcGlsZXIgb3V0cHV0dGluZw0KLSAgICAgKiBhIHdhcm5pbmcgYWJvdXQgYSBzdGF0aWNhbGx5IGRlY2xhcmVkIGZ1bmN0aW9uIG5vdCBiZWluZyByZWZlcmVuY2VkIGluIHRoZQ0KLSAgICAgKiBjYXNlIHRoYXQgdGhlIGFwcGxpY2F0aW9uIHdyaXRlciBoYXMgcHJvdmlkZWQgdGhlaXIgb3duIHRpY2sgaW50ZXJydXB0DQotICAgICAqIGNvbmZpZ3VyYXRpb24gcm91dGluZSAoYW5kIGRlZmluZWQgY29uZmlnU0VUVVBfVElDS19JTlRFUlJVUFQoKSBzdWNoIHRoYXQNCi0gICAgICogdGhlaXIgb3duIHJvdXRpbmUgd2lsbCBiZSBjYWxsZWQgaW4gcGxhY2Ugb2YgcHJ2U2V0dXBUaW1lckludGVycnVwdCgpKS4gKi8NCi0gICAgcHJ2U2V0dXBUaW1lckludGVycnVwdCgpOw0KKwkvKiBFeGVjdXRpb24gc2hvdWxkIG5vdCByZWFjaCBoZXJlIGFzIHRoZSB0YXNrcyBhcmUgbm93IHJ1bm5pbmchDQorCXBydlNldHVwVGltZXJJbnRlcnJ1cHQoKSBpcyBjYWxsZWQgaGVyZSB0byBwcmV2ZW50IHRoZSBjb21waWxlciBvdXRwdXR0aW5nDQorCWEgd2FybmluZyBhYm91dCBhIHN0YXRpY2FsbHkgZGVjbGFyZWQgZnVuY3Rpb24gbm90IGJlaW5nIHJlZmVyZW5jZWQgaW4gdGhlDQorCWNhc2UgdGhhdCB0aGUgYXBwbGljYXRpb24gd3JpdGVyIGhhcyBwcm92aWRlZCB0aGVpciBvd24gdGljayBpbnRlcnJ1cHQNCisJY29uZmlndXJhdGlvbiByb3V0aW5lIChhbmQgZGVmaW5lZCBjb25maWdTRVRVUF9USUNLX0lOVEVSUlVQVCgpIHN1Y2ggdGhhdA0KKwl0aGVpciBvd24gcm91dGluZSB3aWxsIGJlIGNhbGxlZCBpbiBwbGFjZSBvZiBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCkpLiAqLw0KKwlwcnZTZXR1cFRpbWVySW50ZXJydXB0KCk7DQogDQotICAgIC8qIEp1c3QgdG8gbWFrZSBzdXJlIHRoZSBmdW5jdGlvbiBpcyBub3Qgb3B0aW1pc2VkIGF3YXkuICovDQotICAgICggdm9pZCApIHZTb2Z0d2FyZUludGVycnVwdElTUigpOw0KKwkvKiBKdXN0IHRvIG1ha2Ugc3VyZSB0aGUgZnVuY3Rpb24gaXMgbm90IG9wdGltaXNlZCBhd2F5LiAqLw0KKwkoIHZvaWQgKSB2U29mdHdhcmVJbnRlcnJ1cHRJU1IoKTsNCiANCi0gICAgLyogU2hvdWxkIG5vdCBnZXQgaGVyZS4gKi8NCi0gICAgcmV0dXJuIHBkRkFJTDsNCisJLyogU2hvdWxkIG5vdCBnZXQgaGVyZS4gKi8NCisJcmV0dXJuIHBkRkFJTDsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogI3ByYWdtYSBpbmxpbmVfYXNtIHBydlN0YXJ0Rmlyc3RUYXNrDQogc3RhdGljIHZvaWQgcHJ2U3RhcnRGaXJzdFRhc2soIHZvaWQgKQ0KIHsNCi0gICAgLyogV2hlbiBzdGFydGluZyB0aGUgc2NoZWR1bGVyIHRoZXJlIGlzIG5vdGhpbmcgdGhhdCBuZWVkcyBtb3ZpbmcgdG8gdGhlDQotICAgICAqIGludGVycnVwdCBzdGFjayBiZWNhdXNlIHRoZSBmdW5jdGlvbiBpcyBub3QgY2FsbGVkIGZyb20gYW4gaW50ZXJydXB0Lg0KLSAgICAgKiBKdXN0IGVuc3VyZSB0aGUgY3VycmVudCBzdGFjayBpcyB0aGUgdXNlciBzdGFjay4gKi8NCi0gICAgU0VUUFNXIFUNCisJLyogV2hlbiBzdGFydGluZyB0aGUgc2NoZWR1bGVyIHRoZXJlIGlzIG5vdGhpbmcgdGhhdCBuZWVkcyBtb3ZpbmcgdG8gdGhlDQorCWludGVycnVwdCBzdGFjayBiZWNhdXNlIHRoZSBmdW5jdGlvbiBpcyBub3QgY2FsbGVkIGZyb20gYW4gaW50ZXJydXB0Lg0KKwlKdXN0IGVuc3VyZSB0aGUgY3VycmVudCBzdGFjayBpcyB0aGUgdXNlciBzdGFjay4gKi8NCisJU0VUUFNXCVUNCiANCi0gICAgLyogT2J0YWluIHRoZSBsb2NhdGlvbiBvZiB0aGUgc3RhY2sgYXNzb2NpYXRlZCB3aXRoIHdoaWNoIGV2ZXIgdGFzaw0KLSAgICAgKiBweEN1cnJlbnRUQ0IgaXMgY3VycmVudGx5IHBvaW50aW5nIHRvLiAqLw0KLSAgICBNT1YuTCAgICMgX3B4Q3VycmVudFRDQiwgUjE1DQotICAgICAgICBNT1YuTFsgUjE1IF0sIFIxNQ0KLSAgICAgICAgTU9WLkxbIFIxNSBdLCBSMA0KKwkvKiBPYnRhaW4gdGhlIGxvY2F0aW9uIG9mIHRoZSBzdGFjayBhc3NvY2lhdGVkIHdpdGggd2hpY2ggZXZlciB0YXNrDQorCXB4Q3VycmVudFRDQiBpcyBjdXJyZW50bHkgcG9pbnRpbmcgdG8uICovDQorCU1PVi5MCSNfcHhDdXJyZW50VENCLCBSMTUNCisJTU9WLkwJW1IxNV0sIFIxNQ0KKwlNT1YuTAlbUjE1XSwgUjANCiANCi0gICAgLyogUmVzdG9yZSB0aGUgcmVnaXN0ZXJzIGZyb20gdGhlIHN0YWNrIG9mIHRoZSB0YXNrIHBvaW50ZWQgdG8gYnkNCi0gICAgICogcHhDdXJyZW50VENCLiAqLw0KLSAgICBQT1AgUjE1DQotICAgIE1WVEFDTE8gUjE1ICAgLyogQWNjdW11bGF0b3IgbG93IDMyIGJpdHMuICovDQotICAgIFBPUCBSMTUNCi0gICAgTVZUQUNISSBSMTUgICAvKiBBY2N1bXVsYXRvciBoaWdoIDMyIGJpdHMuICovDQotICAgIFBPUE0gUjEgLSBSMTUgLyogUjEgdG8gUjE1IC0gUjAgaXMgbm90IGluY2x1ZGVkIGFzIGl0IGlzIHRoZSBTUC4gKi8NCi0gICAgUlRFICAgICAgICAgICAvKiBUaGlzIHBvcHMgdGhlIHJlbWFpbmluZyByZWdpc3RlcnMuICovDQorCS8qIFJlc3RvcmUgdGhlIHJlZ2lzdGVycyBmcm9tIHRoZSBzdGFjayBvZiB0aGUgdGFzayBwb2ludGVkIHRvIGJ5DQorCXB4Q3VycmVudFRDQi4gKi8NCisgICAgUE9QCQlSMTUNCisgICAgTVZUQUNMTwlSMTUgCQkvKiBBY2N1bXVsYXRvciBsb3cgMzIgYml0cy4gKi8NCisgICAgUE9QCQlSMTUNCisgICAgTVZUQUNISQlSMTUgCQkvKiBBY2N1bXVsYXRvciBoaWdoIDMyIGJpdHMuICovDQorICAgIFBPUE0JUjEtUjE1IAkJLyogUjEgdG8gUjE1IC0gUjAgaXMgbm90IGluY2x1ZGVkIGFzIGl0IGlzIHRoZSBTUC4gKi8NCisgICAgUlRFCQkJCQkvKiBUaGlzIHBvcHMgdGhlIHJlbWFpbmluZyByZWdpc3RlcnMuICovDQogICAgIE5PUA0KLSAgICAgICAgTk9QDQorICAgIE5PUA0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAjcHJhZ21hIGludGVycnVwdCAoIHBydlRpY2tJU1IoIHZlY3QgPSBfVkVDVCggY29uZmlnVElDS19WRUNUT1IgKSwgZW5hYmxlICkgKQ0KIHZvaWQgcHJ2VGlja0lTUiggdm9pZCApDQogew0KLSAgICAvKiBJbmNyZW1lbnQgdGhlIHRpY2ssIGFuZCBwZXJmb3JtIGFueSBwcm9jZXNzaW5nIHRoZSBuZXcgdGljayB2YWx1ZQ0KLSAgICAgKiBuZWNlc3NpdGF0ZXMuICovDQotICAgIHNldF9pcGwoIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSApOw0KLSAgICB7DQotICAgICAgICBpZiggeFRhc2tJbmNyZW1lbnRUaWNrKCkgIT0gcGRGQUxTRSApDQotICAgICAgICB7DQotICAgICAgICAgICAgdGFza1lJRUxEKCk7DQotICAgICAgICB9DQotICAgIH0NCisJLyogSW5jcmVtZW50IHRoZSB0aWNrLCBhbmQgcGVyZm9ybSBhbnkgcHJvY2Vzc2luZyB0aGUgbmV3IHRpY2sgdmFsdWUNCisJbmVjZXNzaXRhdGVzLiAqLw0KKwlzZXRfaXBsKCBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgKTsNCisJew0KKwkJaWYoIHhUYXNrSW5jcmVtZW50VGljaygpICE9IHBkRkFMU0UgKQ0KKwkJew0KKwkJCXRhc2tZSUVMRCgpOw0KKwkJfQ0KKwl9DQorCXNldF9pcGwoIGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkgKTsNCiANCi0gICAgc2V0X2lwbCggY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWSApOw0KKwkjaWYgY29uZmlnVVNFX1RJQ0tMRVNTX0lETEUgPT0gMQ0KKwl7DQorCQkvKiBUaGUgQ1BVIHdva2UgYmVjYXVzZSBvZiBhIHRpY2suICovDQorCQl1bFRpY2tGbGFnID0gcGRUUlVFOw0KIA0KLSAgICAjaWYgY29uZmlnVVNFX1RJQ0tMRVNTX0lETEUgPT0gMQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIC8qIFRoZSBDUFUgd29rZSBiZWNhdXNlIG9mIGEgdGljay4gKi8NCi0gICAgICAgICAgICB1bFRpY2tGbGFnID0gcGRUUlVFOw0KLQ0KLSAgICAgICAgICAgIC8qIElmIHRoaXMgaXMgdGhlIGZpcnN0IHRpY2sgc2luY2UgZXhpdGluZyB0aWNrbGVzcyBtb2RlIHRoZW4gdGhlIENNVA0KLSAgICAgICAgICAgICAqIGNvbXBhcmUgbWF0Y2ggdmFsdWUgbmVlZHMgcmVzZXR0aW5nLiAqLw0KLSAgICAgICAgICAgIENNVDAuQ01DT1IgPSAoIHVpbnQxNl90ICkgdWxNYXRjaFZhbHVlRm9yT25lVGljazsNCi0gICAgICAgIH0NCi0gICAgI2VuZGlmDQorCQkvKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCB0aWNrIHNpbmNlIGV4aXRpbmcgdGlja2xlc3MgbW9kZSB0aGVuIHRoZSBDTVQNCisJCWNvbXBhcmUgbWF0Y2ggdmFsdWUgbmVlZHMgcmVzZXR0aW5nLiAqLw0KKwkJQ01UMC5DTUNPUiA9ICggdWludDE2X3QgKSB1bE1hdGNoVmFsdWVGb3JPbmVUaWNrOw0KKwl9DQorCSNlbmRpZg0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZTb2Z0d2FyZUludGVycnVwdElTUiggdm9pZCApDQogew0KLSAgICBwcnZZaWVsZEhhbmRsZXIoKTsNCisJcHJ2WWllbGRIYW5kbGVyKCk7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KICNwcmFnbWEgaW5saW5lX2FzbSBwcnZZaWVsZEhhbmRsZXINCiBzdGF0aWMgdm9pZCBwcnZZaWVsZEhhbmRsZXIoIHZvaWQgKQ0KIHsNCi0gICAgLyogUmUtZW5hYmxlIGludGVycnVwdHMuICovDQotICAgIFNFVFBTVyBJDQorCS8qIFJlLWVuYWJsZSBpbnRlcnJ1cHRzLiAqLw0KKwlTRVRQU1cJSQ0KIA0KLSAgICAvKiBNb3ZlIHRoZSBkYXRhIHRoYXQgd2FzIGF1dG9tYXRpY2FsbHkgcHVzaGVkIG9udG8gdGhlIGludGVycnVwdCBzdGFjaw0KLSAgICAgKiB3aGVuIHRoZSBpbnRlcnJ1cHQgb2NjdXJyZWQgZnJvbSB0aGUgaW50ZXJydXB0IHN0YWNrIHRvIHRoZSB1c2VyIHN0YWNrLg0KLSAgICAgKg0KLSAgICAgKiBSMTUgaXMgc2F2ZWQgYmVmb3JlIGl0IGlzIGNsb2JiZXJlZC4gKi8NCi0gICAgUFVTSC5MIFIxNQ0KKwkvKiBNb3ZlIHRoZSBkYXRhIHRoYXQgd2FzIGF1dG9tYXRpY2FsbHkgcHVzaGVkIG9udG8gdGhlIGludGVycnVwdCBzdGFjaw0KKwl3aGVuIHRoZSBpbnRlcnJ1cHQgb2NjdXJyZWQgZnJvbSB0aGUgaW50ZXJydXB0IHN0YWNrIHRvIHRoZSB1c2VyIHN0YWNrLg0KIA0KLSAgICAvKiBSZWFkIHRoZSB1c2VyIHN0YWNrIHBvaW50ZXIuICovDQotICAgIE1WRkMgVVNQLCBSMTUNCisJUjE1IGlzIHNhdmVkIGJlZm9yZSBpdCBpcyBjbG9iYmVyZWQuICovDQorCVBVU0guTAlSMTUNCiANCi0gICAgLyogTW92ZSB0aGUgYWRkcmVzcyBkb3duIHRvIHRoZSBkYXRhIGJlaW5nIG1vdmVkLiAqLw0KLSAgICAgICAgIFNVQiAgICAgIyAxMiwgUjE1DQotICAgIE1WVEMgUjE1LCBVU1ANCisJLyogUmVhZCB0aGUgdXNlciBzdGFjayBwb2ludGVyLiAqLw0KKwlNVkZDCVVTUCwgUjE1DQogDQotICAgIC8qIENvcHkgdGhlIGRhdGEgYWNyb3NzLiAqLw0KLSAgICAgICAgIE1PVi5MWyBSMCBdLCBbIFIxNSBdOw0KLSAgICBSMTUNCisJLyogTW92ZSB0aGUgYWRkcmVzcyBkb3duIHRvIHRoZSBkYXRhIGJlaW5nIG1vdmVkLiAqLw0KKwlTVUIJCSMxMiwgUjE1DQorCU1WVEMJUjE1LCBVU1ANCiANCi0gICAgTU9WLkwgICA0WyBSMCBdLCA0WyBSMTUgXTsNCi0gICAgUEMNCi0gICAgTU9WLkwgICA4WyBSMCBdLCA4WyBSMTUgXTsNCi0gICAgUFNXDQorCS8qIENvcHkgdGhlIGRhdGEgYWNyb3NzLiAqLw0KKwlNT1YuTAlbIFIwIF0sIFsgUjE1IF0gOyBSMTUNCisJTU9WLkwgCTRbIFIwIF0sIDRbIFIxNSBdICA7IFBDDQorCU1PVi5MCThbIFIwIF0sIDhbIFIxNSBdICA7IFBTVw0KIA0KLSAgICAvKiBNb3ZlIHRoZSBpbnRlcnJ1cHQgc3RhY2sgcG9pbnRlciB0byBpdHMgbmV3IGNvcnJlY3QgcG9zaXRpb24uICovDQotICAgICAgICBBREQgIyAxMiwgUjANCisJLyogTW92ZSB0aGUgaW50ZXJydXB0IHN0YWNrIHBvaW50ZXIgdG8gaXRzIG5ldyBjb3JyZWN0IHBvc2l0aW9uLiAqLw0KKwlBREQJIzEyLCBSMA0KIA0KLSAgICAvKiBBbGwgdGhlIHJlc3Qgb2YgdGhlIHJlZ2lzdGVycyBhcmUgc2F2ZWQgZGlyZWN0bHkgdG8gdGhlIHVzZXIgc3RhY2suICovDQotICAgIFNFVFBTVyBVDQorCS8qIEFsbCB0aGUgcmVzdCBvZiB0aGUgcmVnaXN0ZXJzIGFyZSBzYXZlZCBkaXJlY3RseSB0byB0aGUgdXNlciBzdGFjay4gKi8NCisJU0VUUFNXCVUNCiANCi0gICAgLyogU2F2ZSB0aGUgcmVzdCBvZiB0aGUgZ2VuZXJhbCByZWdpc3RlcnMgKFIxNSBoYXMgYmVlbiBzYXZlZCBhbHJlYWR5KS4gKi8NCi0gICAgUFVTSE0gUjEgLSBSMTQNCisJLyogU2F2ZSB0aGUgcmVzdCBvZiB0aGUgZ2VuZXJhbCByZWdpc3RlcnMgKFIxNSBoYXMgYmVlbiBzYXZlZCBhbHJlYWR5KS4gKi8NCisJUFVTSE0JUjEtUjE0DQogDQotICAgIC8qIFNhdmUgdGhlIGFjY3VtdWxhdG9yLiAqLw0KLSAgICBNVkZBQ0hJIFIxNQ0KLSAgICAgICAgUFVTSC5MIFIxNQ0KLSAgICBNVkZBQ01JIFIxNTsNCi0gICAgTWlkZGxlIG9yZGVyIHdvcmQuDQotICAgICAgIFNITEwgICAgIyAxNiwgUjE1Ow0KLSAgICBTaGlmdGVkIGxlZnQgYXMgaXQgaXMgcmVzdG9yZWQgdG8gdGhlIGxvdyBvcmRlciB3b3JkLg0KLSAgICAgICBQVVNILkwgUjE1DQorCS8qIFNhdmUgdGhlIGFjY3VtdWxhdG9yLiAqLw0KKwlNVkZBQ0hJCVIxNQ0KKwlQVVNILkwJUjE1DQorCU1WRkFDTUkJUjE1CTsgTWlkZGxlIG9yZGVyIHdvcmQuDQorCVNITEwJIzE2LCBSMTUgOyBTaGlmdGVkIGxlZnQgYXMgaXQgaXMgcmVzdG9yZWQgdG8gdGhlIGxvdyBvcmRlciB3b3JkLg0KKwlQVVNILkwJUjE1DQogDQotICAgIC8qIFNhdmUgdGhlIHN0YWNrIHBvaW50ZXIgdG8gdGhlIFRDQi4gKi8NCi0gICAgTU9WLkwgICAjIF9weEN1cnJlbnRUQ0IsIFIxNQ0KLSAgICAgICAgTU9WLkxbIFIxNSBdLCBSMTUNCi0gICAgICAgIE1PVi5MIFIwLCBbIFIxNSBdDQorCS8qIFNhdmUgdGhlIHN0YWNrIHBvaW50ZXIgdG8gdGhlIFRDQi4gKi8NCisJTU9WLkwJI19weEN1cnJlbnRUQ0IsIFIxNQ0KKwlNT1YuTAlbIFIxNSBdLCBSMTUNCisJTU9WLkwJUjAsIFsgUjE1IF0NCiANCi0gICAgLyogRW5zdXJlIHRoZSBpbnRlcnJ1cHQgbWFzayBpcyBzZXQgdG8gdGhlIHN5c2NhbGwgcHJpb3JpdHkgd2hpbGUgdGhlDQotICAgICAqIGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBhY2Nlc3NlZC4gKi8NCi0gICAgTVZUSVBMICAjIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWQ0KKwkvKiBFbnN1cmUgdGhlIGludGVycnVwdCBtYXNrIGlzIHNldCB0byB0aGUgc3lzY2FsbCBwcmlvcml0eSB3aGlsZSB0aGUNCisJa2VybmVsIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGFjY2Vzc2VkLiAqLw0KKwlNVlRJUEwJI2NvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWQ0KIA0KLSAgICAvKiBTZWxlY3QgdGhlIG5leHQgdGFzayB0byBydW4uICovDQotICAgIEJTUi5BIF92VGFza1N3aXRjaENvbnRleHQNCisJLyogU2VsZWN0IHRoZSBuZXh0IHRhc2sgdG8gcnVuLiAqLw0KKwlCU1IuQQlfdlRhc2tTd2l0Y2hDb250ZXh0DQogDQotICAgIC8qIFJlc2V0IHRoZSBpbnRlcnJ1cHQgbWFzayBhcyBubyBtb3JlIGRhdGEgc3RydWN0dXJlIGFjY2VzcyBpcw0KLSAgICAgKiByZXF1aXJlZC4gKi8NCi0gICAgTVZUSVBMICAjIGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkNCisJLyogUmVzZXQgdGhlIGludGVycnVwdCBtYXNrIGFzIG5vIG1vcmUgZGF0YSBzdHJ1Y3R1cmUgYWNjZXNzIGlzDQorCXJlcXVpcmVkLiAqLw0KKwlNVlRJUEwJI2NvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkNCiANCi0gICAgLyogTG9hZCB0aGUgc3RhY2sgcG9pbnRlciBvZiB0aGUgdGFzayB0aGF0IGlzIG5vdyBzZWxlY3RlZCBhcyB0aGUgUnVubmluZw0KLSAgICAgKiBzdGF0ZSB0YXNrIGZyb20gaXRzIFRDQi4gKi8NCi0gICAgTU9WLkwgICAjIF9weEN1cnJlbnRUQ0IsIFIxNQ0KLSAgICAgICAgTU9WLkxbIFIxNSBdLCBSMTUNCi0gICAgICAgIE1PVi5MWyBSMTUgXSwgUjANCisJLyogTG9hZCB0aGUgc3RhY2sgcG9pbnRlciBvZiB0aGUgdGFzayB0aGF0IGlzIG5vdyBzZWxlY3RlZCBhcyB0aGUgUnVubmluZw0KKwlzdGF0ZSB0YXNrIGZyb20gaXRzIFRDQi4gKi8NCisJTU9WLkwJI19weEN1cnJlbnRUQ0IsUjE1DQorCU1PVi5MCVsgUjE1IF0sIFIxNQ0KKwlNT1YuTAlbIFIxNSBdLCBSMA0KIA0KLSAgICAvKiBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBuZXcgdGFzay4gIFRoZSBQU1cgKFByb2dyYW0gU3RhdHVzIFdvcmQpIGFuZA0KLSAgICAgKiBQQyB3aWxsIGJlIHBvcHBlZCBieSB0aGUgUlRFIGluc3RydWN0aW9uLiAqLw0KLSAgICBQT1AgUjE1DQotICAgIE1WVEFDTE8gUjE1DQotICAgIFBPUCBSMTUNCi0gICAgTVZUQUNISSBSMTUNCi0gICAgUE9QTSBSMSAtIFIxNQ0KLSAgICBSVEUNCi0gICAgTk9QDQotICAgICAgICBOT1ANCisJLyogUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgbmV3IHRhc2suICBUaGUgUFNXIChQcm9ncmFtIFN0YXR1cyBXb3JkKSBhbmQNCisJUEMgd2lsbCBiZSBwb3BwZWQgYnkgdGhlIFJURSBpbnN0cnVjdGlvbi4gKi8NCisJUE9QCQlSMTUNCisJTVZUQUNMTwlSMTUNCisJUE9QCQlSMTUNCisJTVZUQUNISQlSMTUNCisJUE9QTQlSMS1SMTUNCisJUlRFDQorCU5PUA0KKwlOT1ANCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogdm9pZCB2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApDQogew0KLSAgICAvKiBOb3QgaW1wbGVtZW50ZWQgaW4gcG9ydHMgd2hlcmUgdGhlcmUgaXMgbm90aGluZyB0byByZXR1cm4gdG8uDQotICAgICAqIEFydGlmaWNpYWxseSBmb3JjZSBhbiBhc3NlcnQuICovDQotICAgIGNvbmZpZ0FTU0VSVCggcHhDdXJyZW50VENCID09IE5VTEwgKTsNCisJLyogTm90IGltcGxlbWVudGVkIGluIHBvcnRzIHdoZXJlIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmV0dXJuIHRvLg0KKwlBcnRpZmljaWFsbHkgZm9yY2UgYW4gYXNzZXJ0LiAqLw0KKwljb25maWdBU1NFUlQoIHB4Q3VycmVudFRDQiA9PSBOVUxMICk7DQogDQotICAgIC8qIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBqdXN0IHRvIHByZXZlbnQgdGhlIHN5bWJvbCBnZXR0aW5nIG9wdGltaXNlZCBhd2F5LiAqLw0KLSAgICAoIHZvaWQgKSB2VGFza1N3aXRjaENvbnRleHQoKTsNCisJLyogVGhlIGZvbGxvd2luZyBsaW5lIGlzIGp1c3QgdG8gcHJldmVudCB0aGUgc3ltYm9sIGdldHRpbmcgb3B0aW1pc2VkIGF3YXkuICovDQorCSggdm9pZCApIHZUYXNrU3dpdGNoQ29udGV4dCgpOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBzdGF0aWMgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICkNCiB7DQotICAgIC8qIFVubG9jay4gKi8NCi0gICAgU1lTVEVNLlBSQ1IuV09SRCA9IHBvcnRVTkxPQ0tfS0VZOw0KKwkvKiBVbmxvY2suICovDQorCVNZU1RFTS5QUkNSLldPUkQgPSBwb3J0VU5MT0NLX0tFWTsNCiANCi0gICAgLyogRW5hYmxlIENNVDAuICovDQotICAgIE1TVFAoIENNVDAgKSA9IDA7DQorCS8qIEVuYWJsZSBDTVQwLiAqLw0KKwlNU1RQKCBDTVQwICkgPSAwOw0KIA0KLSAgICAvKiBMb2NrIGFnYWluLiAqLw0KLSAgICBTWVNURU0uUFJDUi5XT1JEID0gcG9ydExPQ0tfS0VZOw0KKwkvKiBMb2NrIGFnYWluLiAqLw0KKwlTWVNURU0uUFJDUi5XT1JEID0gcG9ydExPQ0tfS0VZOw0KIA0KLSAgICAvKiBJbnRlcnJ1cHQgb24gY29tcGFyZSBtYXRjaC4gKi8NCi0gICAgQ01UMC5DTUNSLkJJVC5DTUlFID0gMTsNCisJLyogSW50ZXJydXB0IG9uIGNvbXBhcmUgbWF0Y2guICovDQorCUNNVDAuQ01DUi5CSVQuQ01JRSA9IDE7DQogDQotICAgIC8qIFNldCB0aGUgY29tcGFyZSBtYXRjaCB2YWx1ZS4gKi8NCi0gICAgQ01UMC5DTUNPUiA9ICggdWludDE2X3QgKSB1bE1hdGNoVmFsdWVGb3JPbmVUaWNrOw0KKwkvKiBTZXQgdGhlIGNvbXBhcmUgbWF0Y2ggdmFsdWUuICovDQorCUNNVDAuQ01DT1IgPSAoIHVpbnQxNl90ICkgdWxNYXRjaFZhbHVlRm9yT25lVGljazsNCiANCi0gICAgLyogRGl2aWRlIHRoZSBQQ0xLLiAqLw0KLSAgICAjaWYgcG9ydENMT0NLX0RJVklTT1IgPT0gNTEyDQotICAgICAgICB7DQotICAgICAgICAgICAgQ01UMC5DTUNSLkJJVC5DS1MgPSAzOw0KLSAgICAgICAgfQ0KLSAgICAjZWxpZiBwb3J0Q0xPQ0tfRElWSVNPUiA9PSAxMjgNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBDTVQwLkNNQ1IuQklULkNLUyA9IDI7DQotICAgICAgICB9DQotICAgICNlbGlmIHBvcnRDTE9DS19ESVZJU09SID09IDMyDQotICAgICAgICB7DQotICAgICAgICAgICAgQ01UMC5DTUNSLkJJVC5DS1MgPSAxOw0KLSAgICAgICAgfQ0KLSAgICAjZWxpZiBwb3J0Q0xPQ0tfRElWSVNPUiA9PSA4DQotICAgICAgICB7DQotICAgICAgICAgICAgQ01UMC5DTUNSLkJJVC5DS1MgPSAwOw0KLSAgICAgICAgfQ0KLSAgICAjZWxzZSAvKiBpZiBwb3J0Q0xPQ0tfRElWSVNPUiA9PSA1MTIgKi8NCi0gICAgICAgIHsNCi0gICAgICAgICAgICAjZXJyb3IgSW52YWxpZCBwb3J0Q0xPQ0tfRElWSVNPUiBzZXR0aW5nDQotICAgICAgICB9DQotICAgICNlbmRpZiAvKiBpZiBwb3J0Q0xPQ0tfRElWSVNPUiA9PSA1MTIgKi8NCisJLyogRGl2aWRlIHRoZSBQQ0xLLiAqLw0KKwkjaWYgcG9ydENMT0NLX0RJVklTT1IgPT0gNTEyDQorCXsNCisJCUNNVDAuQ01DUi5CSVQuQ0tTID0gMzsNCisJfQ0KKwkjZWxpZiBwb3J0Q0xPQ0tfRElWSVNPUiA9PSAxMjgNCisJew0KKwkJQ01UMC5DTUNSLkJJVC5DS1MgPSAyOw0KKwl9DQorCSNlbGlmIHBvcnRDTE9DS19ESVZJU09SID09IDMyDQorCXsNCisJCUNNVDAuQ01DUi5CSVQuQ0tTID0gMTsNCisJfQ0KKwkjZWxpZiBwb3J0Q0xPQ0tfRElWSVNPUiA9PSA4DQorCXsNCisJCUNNVDAuQ01DUi5CSVQuQ0tTID0gMDsNCisJfQ0KKwkjZWxzZQ0KKwl7DQorCQkjZXJyb3IgSW52YWxpZCBwb3J0Q0xPQ0tfRElWSVNPUiBzZXR0aW5nDQorCX0NCisJI2VuZGlmDQogDQogDQotICAgIC8qIEVuYWJsZSB0aGUgaW50ZXJydXB0Li4uICovDQotICAgIF9JRU4oIF9DTVQwX0NNSTAgKSA9IDE7DQorCS8qIEVuYWJsZSB0aGUgaW50ZXJydXB0Li4uICovDQorCV9JRU4oIF9DTVQwX0NNSTAgKSA9IDE7DQogDQotICAgIC8qIC4uLmFuZCBzZXQgaXRzIHByaW9yaXR5IHRvIHRoZSBhcHBsaWNhdGlvbiBkZWZpbmVkIGtlcm5lbCBwcmlvcml0eS4gKi8NCi0gICAgX0lQUiggX0NNVDBfQ01JMCApID0gY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWTsNCisJLyogLi4uYW5kIHNldCBpdHMgcHJpb3JpdHkgdG8gdGhlIGFwcGxpY2F0aW9uIGRlZmluZWQga2VybmVsIHByaW9yaXR5LiAqLw0KKwlfSVBSKCBfQ01UMF9DTUkwICkgPSBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZOw0KIA0KLSAgICAvKiBTdGFydCB0aGUgdGltZXIuICovDQotICAgIENNVC5DTVNUUjAuQklULlNUUjAgPSAxOw0KKwkvKiBTdGFydCB0aGUgdGltZXIuICovDQorCUNNVC5DTVNUUjAuQklULlNUUjAgPSAxOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAjaWYgY29uZmlnVVNFX1RJQ0tMRVNTX0lETEUgPT0gMQ0KIA0KLSAgICBzdGF0aWMgdm9pZCBwcnZTbGVlcCggVGlja1R5cGVfdCB4RXhwZWN0ZWRJZGxlVGltZSApDQotICAgIHsNCi0gICAgICAgIC8qIEFsbG93IHRoZSBhcHBsaWNhdGlvbiB0byBkZWZpbmUgc29tZSBwcmUtc2xlZXAgcHJvY2Vzc2luZy4gKi8NCi0gICAgICAgIGNvbmZpZ1BSRV9TTEVFUF9QUk9DRVNTSU5HKCB4RXhwZWN0ZWRJZGxlVGltZSApOw0KKwlzdGF0aWMgdm9pZCBwcnZTbGVlcCggVGlja1R5cGVfdCB4RXhwZWN0ZWRJZGxlVGltZSApDQorCXsNCisJCS8qIEFsbG93IHRoZSBhcHBsaWNhdGlvbiB0byBkZWZpbmUgc29tZSBwcmUtc2xlZXAgcHJvY2Vzc2luZy4gKi8NCisJCWNvbmZpZ1BSRV9TTEVFUF9QUk9DRVNTSU5HKCB4RXhwZWN0ZWRJZGxlVGltZSApOw0KIA0KLSAgICAgICAgLyogeEV4cGVjdGVkSWRsZVRpbWUgYmVpbmcgc2V0IHRvIDAgYnkgY29uZmlnUFJFX1NMRUVQX1BST0NFU1NJTkcoKQ0KLSAgICAgICAgICogbWVhbnMgdGhlIGFwcGxpY2F0aW9uIGRlZmluZWQgY29kZSBoYXMgYWxyZWFkeSBleGVjdXRlZCB0aGUgV0FJVA0KLSAgICAgICAgICogaW5zdHJ1Y3Rpb24uICovDQotICAgICAgICBpZiggeEV4cGVjdGVkSWRsZVRpbWUgPiAwICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICB3YWl0KCk7DQotICAgICAgICB9DQorCQkvKiB4RXhwZWN0ZWRJZGxlVGltZSBiZWluZyBzZXQgdG8gMCBieSBjb25maWdQUkVfU0xFRVBfUFJPQ0VTU0lORygpDQorCQltZWFucyB0aGUgYXBwbGljYXRpb24gZGVmaW5lZCBjb2RlIGhhcyBhbHJlYWR5IGV4ZWN1dGVkIHRoZSBXQUlUDQorCQlpbnN0cnVjdGlvbi4gKi8NCisJCWlmKCB4RXhwZWN0ZWRJZGxlVGltZSA+IDAgKQ0KKwkJew0KKwkJCXdhaXQoKTsNCisJCX0NCiANCi0gICAgICAgIC8qIEFsbG93IHRoZSBhcHBsaWNhdGlvbiB0byBkZWZpbmUgc29tZSBwb3N0IHNsZWVwIHByb2Nlc3NpbmcuICovDQotICAgICAgICBjb25maWdQT1NUX1NMRUVQX1BST0NFU1NJTkcoIHhFeHBlY3RlZElkbGVUaW1lICk7DQotICAgIH0NCisJCS8qIEFsbG93IHRoZSBhcHBsaWNhdGlvbiB0byBkZWZpbmUgc29tZSBwb3N0IHNsZWVwIHByb2Nlc3NpbmcuICovDQorCQljb25maWdQT1NUX1NMRUVQX1BST0NFU1NJTkcoIHhFeHBlY3RlZElkbGVUaW1lICk7DQorCX0NCiANCiAjZW5kaWYgLyogY29uZmlnVVNFX1RJQ0tMRVNTX0lETEUgKi8NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAjaWYgY29uZmlnVVNFX1RJQ0tMRVNTX0lETEUgPT0gMQ0KIA0KLSAgICB2b2lkIHZQb3J0U3VwcHJlc3NUaWNrc0FuZFNsZWVwKCBUaWNrVHlwZV90IHhFeHBlY3RlZElkbGVUaW1lICkNCi0gICAgew0KLSAgICAgICAgdWludDMyX3QgdWxNYXRjaFZhbHVlLCB1bENvbXBsZXRlVGlja1BlcmlvZHMsIHVsQ3VycmVudENvdW50Ow0KLSAgICAgICAgZVNsZWVwTW9kZVN0YXR1cyBlU2xlZXBBY3Rpb247DQorCXZvaWQgdlBvcnRTdXBwcmVzc1RpY2tzQW5kU2xlZXAoIFRpY2tUeXBlX3QgeEV4cGVjdGVkSWRsZVRpbWUgKQ0KKwl7DQorCXVpbnQzMl90IHVsTWF0Y2hWYWx1ZSwgdWxDb21wbGV0ZVRpY2tQZXJpb2RzLCB1bEN1cnJlbnRDb3VudDsNCisJZVNsZWVwTW9kZVN0YXR1cyBlU2xlZXBBY3Rpb247DQogDQotICAgICAgICAvKiBUSElTIEZVTkNUSU9OIElTIENBTExFRCBXSVRIIFRIRSBTQ0hFRFVMRVIgU1VTUEVOREVELiAqLw0KKwkJLyogVEhJUyBGVU5DVElPTiBJUyBDQUxMRUQgV0lUSCBUSEUgU0NIRURVTEVSIFNVU1BFTkRFRC4gKi8NCiANCi0gICAgICAgIC8qIE1ha2Ugc3VyZSB0aGUgQ01UIHJlbG9hZCB2YWx1ZSBkb2VzIG5vdCBvdmVyZmxvdyB0aGUgY291bnRlci4gKi8NCi0gICAgICAgIGlmKCB4RXhwZWN0ZWRJZGxlVGltZSA+IHhNYXhpbXVtUG9zc2libGVTdXBwcmVzc2VkVGlja3MgKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHhFeHBlY3RlZElkbGVUaW1lID0geE1heGltdW1Qb3NzaWJsZVN1cHByZXNzZWRUaWNrczsNCi0gICAgICAgIH0NCisJCS8qIE1ha2Ugc3VyZSB0aGUgQ01UIHJlbG9hZCB2YWx1ZSBkb2VzIG5vdCBvdmVyZmxvdyB0aGUgY291bnRlci4gKi8NCisJCWlmKCB4RXhwZWN0ZWRJZGxlVGltZSA+IHhNYXhpbXVtUG9zc2libGVTdXBwcmVzc2VkVGlja3MgKQ0KKwkJew0KKwkJCXhFeHBlY3RlZElkbGVUaW1lID0geE1heGltdW1Qb3NzaWJsZVN1cHByZXNzZWRUaWNrczsNCisJCX0NCiANCi0gICAgICAgIC8qIENhbGN1bGF0ZSB0aGUgcmVsb2FkIHZhbHVlIHJlcXVpcmVkIHRvIHdhaXQgeEV4cGVjdGVkSWRsZVRpbWUgdGljaw0KLSAgICAgICAgICogcGVyaW9kcy4gKi8NCi0gICAgICAgIHVsTWF0Y2hWYWx1ZSA9IHVsTWF0Y2hWYWx1ZUZvck9uZVRpY2sgKiB4RXhwZWN0ZWRJZGxlVGltZTsNCisJCS8qIENhbGN1bGF0ZSB0aGUgcmVsb2FkIHZhbHVlIHJlcXVpcmVkIHRvIHdhaXQgeEV4cGVjdGVkSWRsZVRpbWUgdGljaw0KKwkJcGVyaW9kcy4gKi8NCisJCXVsTWF0Y2hWYWx1ZSA9IHVsTWF0Y2hWYWx1ZUZvck9uZVRpY2sgKiB4RXhwZWN0ZWRJZGxlVGltZTsNCisJCWlmKCB1bE1hdGNoVmFsdWUgPiB1bFN0b3BwZWRUaW1lckNvbXBlbnNhdGlvbiApDQorCQl7DQorCQkJLyogQ29tcGVuc2F0ZSBmb3IgdGhlIGZhY3QgdGhhdCB0aGUgQ01UIGlzIGdvaW5nIHRvIGJlIHN0b3BwZWQNCisJCQltb21lbnRhcmlseS4gKi8NCisJCQl1bE1hdGNoVmFsdWUgLT0gdWxTdG9wcGVkVGltZXJDb21wZW5zYXRpb247DQorCQl9DQogDQotICAgICAgICBpZiggdWxNYXRjaFZhbHVlID4gdWxTdG9wcGVkVGltZXJDb21wZW5zYXRpb24gKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIC8qIENvbXBlbnNhdGUgZm9yIHRoZSBmYWN0IHRoYXQgdGhlIENNVCBpcyBnb2luZyB0byBiZSBzdG9wcGVkDQotICAgICAgICAgICAgICogbW9tZW50YXJpbHkuICovDQotICAgICAgICAgICAgdWxNYXRjaFZhbHVlIC09IHVsU3RvcHBlZFRpbWVyQ29tcGVuc2F0aW9uOw0KLSAgICAgICAgfQ0KKwkJLyogU3RvcCB0aGUgQ01UIG1vbWVudGFyaWx5LiAgVGhlIHRpbWUgdGhlIENNVCBpcyBzdG9wcGVkIGZvciBpcw0KKwkJYWNjb3VudGVkIGZvciBhcyBiZXN0IGl0IGNhbiBiZSwgYnV0IHVzaW5nIHRoZSB0aWNrbGVzcyBtb2RlIHdpbGwNCisJCWluZXZpdGFibHkgcmVzdWx0IGluIHNvbWUgdGlueSBkcmlmdCBvZiB0aGUgdGltZSBtYWludGFpbmVkIGJ5IHRoZQ0KKwkJa2VybmVsIHdpdGggcmVzcGVjdCB0byBjYWxlbmRhciB0aW1lLiAqLw0KKwkJQ01ULkNNU1RSMC5CSVQuU1RSMCA9IDA7DQorCQl3aGlsZSggQ01ULkNNU1RSMC5CSVQuU1RSMCA9PSAxICkNCisJCXsNCisJCQkvKiBOb3RoaW5nIHRvIGRvIGhlcmUuICovDQorCQl9DQogDQotICAgICAgICAvKiBTdG9wIHRoZSBDTVQgbW9tZW50YXJpbHkuICBUaGUgdGltZSB0aGUgQ01UIGlzIHN0b3BwZWQgZm9yIGlzDQotICAgICAgICAgKiBhY2NvdW50ZWQgZm9yIGFzIGJlc3QgaXQgY2FuIGJlLCBidXQgdXNpbmcgdGhlIHRpY2tsZXNzIG1vZGUgd2lsbA0KLSAgICAgICAgICogaW5ldml0YWJseSByZXN1bHQgaW4gc29tZSB0aW55IGRyaWZ0IG9mIHRoZSB0aW1lIG1haW50YWluZWQgYnkgdGhlDQotICAgICAgICAgKiBrZXJuZWwgd2l0aCByZXNwZWN0IHRvIGNhbGVuZGFyIHRpbWUuICovDQotICAgICAgICBDTVQuQ01TVFIwLkJJVC5TVFIwID0gMDsNCisJCS8qIENyaXRpY2FsIHNlY3Rpb24gdXNpbmcgdGhlIGdsb2JhbCBpbnRlcnJ1cHQgYml0IGFzIHRoZSBpIGJpdCBpcw0KKwkJYXV0b21hdGljYWxseSByZXNldCBieSB0aGUgV0FJVCBpbnN0cnVjdGlvbi4gKi8NCisJCWNscnBzd19pKCk7DQogDQotICAgICAgICB3aGlsZSggQ01ULkNNU1RSMC5CSVQuU1RSMCA9PSAxICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICAvKiBOb3RoaW5nIHRvIGRvIGhlcmUuICovDQotICAgICAgICB9DQorCQkvKiBUaGUgdGljayBmbGFnIGlzIHNldCB0byBmYWxzZSBiZWZvcmUgc2xlZXBpbmcuICBJZiBpdCBpcyB0cnVlIHdoZW4NCisJCXNsZWVwIG1vZGUgaXMgZXhpdGVkIHRoZW4gc2xlZXAgbW9kZSB3YXMgcHJvYmFibHkgZXhpdGVkIGJlY2F1c2UgdGhlDQorCQl0aWNrIHdhcyBzdXBwcmVzc2VkIGZvciB0aGUgZW50aXJlIHhFeHBlY3RlZElkbGVUaW1lIHBlcmlvZC4gKi8NCisJCXVsVGlja0ZsYWcgPSBwZEZBTFNFOw0KIA0KLSAgICAgICAgLyogQ3JpdGljYWwgc2VjdGlvbiB1c2luZyB0aGUgZ2xvYmFsIGludGVycnVwdCBiaXQgYXMgdGhlIGkgYml0IGlzDQotICAgICAgICAgKiBhdXRvbWF0aWNhbGx5IHJlc2V0IGJ5IHRoZSBXQUlUIGluc3RydWN0aW9uLiAqLw0KLSAgICAgICAgY2xycHN3X2koKTsNCisJCS8qIElmIGEgY29udGV4dCBzd2l0Y2ggaXMgcGVuZGluZyB0aGVuIGFiYW5kb24gdGhlIGxvdyBwb3dlciBlbnRyeSBhcw0KKwkJdGhlIGNvbnRleHQgc3dpdGNoIG1pZ2h0IGhhdmUgYmVlbiBwZW5kZWQgYnkgYW4gZXh0ZXJuYWwgaW50ZXJydXB0IHRoYXQNCisJCXJlcXVpcmVzIHByb2Nlc3NpbmcuICovDQorCQllU2xlZXBBY3Rpb24gPSBlVGFza0NvbmZpcm1TbGVlcE1vZGVTdGF0dXMoKTsNCisJCWlmKCBlU2xlZXBBY3Rpb24gPT0gZUFib3J0U2xlZXAgKQ0KKwkJew0KKwkJCS8qIFJlc3RhcnQgdGljay4gKi8NCisJCQlDTVQuQ01TVFIwLkJJVC5TVFIwID0gMTsNCisJCQlzZXRwc3dfaSgpOw0KKwkJfQ0KKwkJZWxzZSBpZiggZVNsZWVwQWN0aW9uID09IGVOb1Rhc2tzV2FpdGluZ1RpbWVvdXQgKQ0KKwkJew0KKwkJICAgIC8qIFByb3RlY3Rpb24gb2ZmLiAqLw0KKwkJICAgIFNZU1RFTS5QUkNSLldPUkQgPSBwb3J0VU5MT0NLX0tFWTsNCiANCi0gICAgICAgIC8qIFRoZSB0aWNrIGZsYWcgaXMgc2V0IHRvIGZhbHNlIGJlZm9yZSBzbGVlcGluZy4gIElmIGl0IGlzIHRydWUgd2hlbg0KLSAgICAgICAgICogc2xlZXAgbW9kZSBpcyBleGl0ZWQgdGhlbiBzbGVlcCBtb2RlIHdhcyBwcm9iYWJseSBleGl0ZWQgYmVjYXVzZSB0aGUNCi0gICAgICAgICAqIHRpY2sgd2FzIHN1cHByZXNzZWQgZm9yIHRoZSBlbnRpcmUgeEV4cGVjdGVkSWRsZVRpbWUgcGVyaW9kLiAqLw0KLSAgICAgICAgdWxUaWNrRmxhZyA9IHBkRkFMU0U7DQorCQkgICAgLyogUmVhZHkgZm9yIHNvZnR3YXJlIHN0YW5kYnkgd2l0aCBhbGwgY2xvY2tzIHN0b3BwZWQuICovDQorCQkJU1lTVEVNLlNCWUNSLkJJVC5TU0JZID0gMTsNCiANCi0gICAgICAgIC8qIElmIGEgY29udGV4dCBzd2l0Y2ggaXMgcGVuZGluZyB0aGVuIGFiYW5kb24gdGhlIGxvdyBwb3dlciBlbnRyeSBhcw0KLSAgICAgICAgICogdGhlIGNvbnRleHQgc3dpdGNoIG1pZ2h0IGhhdmUgYmVlbiBwZW5kZWQgYnkgYW4gZXh0ZXJuYWwgaW50ZXJydXB0IHRoYXQNCi0gICAgICAgICAqIHJlcXVpcmVzIHByb2Nlc3NpbmcuICovDQotICAgICAgICBlU2xlZXBBY3Rpb24gPSBlVGFza0NvbmZpcm1TbGVlcE1vZGVTdGF0dXMoKTsNCisJCSAgICAvKiBQcm90ZWN0aW9uIG9uLiAqLw0KKwkJICAgIFNZU1RFTS5QUkNSLldPUkQgPSBwb3J0TE9DS19LRVk7DQogDQotICAgICAgICBpZiggZVNsZWVwQWN0aW9uID09IGVBYm9ydFNsZWVwICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICAvKiBSZXN0YXJ0IHRpY2suICovDQotICAgICAgICAgICAgQ01ULkNNU1RSMC5CSVQuU1RSMCA9IDE7DQotICAgICAgICAgICAgc2V0cHN3X2koKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGVsc2UgaWYoIGVTbGVlcEFjdGlvbiA9PSBlTm9UYXNrc1dhaXRpbmdUaW1lb3V0ICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICAvKiBQcm90ZWN0aW9uIG9mZi4gKi8NCi0gICAgICAgICAgICBTWVNURU0uUFJDUi5XT1JEID0gcG9ydFVOTE9DS19LRVk7DQorCQkJLyogU2xlZXAgdW50aWwgc29tZXRoaW5nIGhhcHBlbnMuICBDYWxsaW5nIHBydlNsZWVwKCkgd2lsbA0KKwkJCWF1dG9tYXRpY2FsbHkgcmVzZXQgdGhlIGkgYml0IGluIHRoZSBQU1cuICovDQorCQkJcHJ2U2xlZXAoIHhFeHBlY3RlZElkbGVUaW1lICk7DQogDQotICAgICAgICAgICAgLyogUmVhZHkgZm9yIHNvZnR3YXJlIHN0YW5kYnkgd2l0aCBhbGwgY2xvY2tzIHN0b3BwZWQuICovDQotICAgICAgICAgICAgU1lTVEVNLlNCWUNSLkJJVC5TU0JZID0gMTsNCisJCQkvKiBSZXN0YXJ0IHRoZSBDTVQuICovDQorCQkJQ01ULkNNU1RSMC5CSVQuU1RSMCA9IDE7DQorCQl9DQorCQllbHNlDQorCQl7DQorCQkgICAgLyogUHJvdGVjdGlvbiBvZmYuICovDQorCQkgICAgU1lTVEVNLlBSQ1IuV09SRCA9IHBvcnRVTkxPQ0tfS0VZOw0KIA0KLSAgICAgICAgICAgIC8qIFByb3RlY3Rpb24gb24uICovDQotICAgICAgICAgICAgU1lTVEVNLlBSQ1IuV09SRCA9IHBvcnRMT0NLX0tFWTsNCisJCSAgICAvKiBSZWFkeSBmb3IgZGVlcCBzbGVlcCBtb2RlLiAqLw0KKwkJCVNZU1RFTS5NU1RQQ1JDLkJJVC5EU0xQRSA9IDE7DQorCQkJU1lTVEVNLk1TVFBDUkEuQklULk1TVFBBMjggPSAxOw0KKwkJCVNZU1RFTS5TQllDUi5CSVQuU1NCWSA9IDA7DQogDQotICAgICAgICAgICAgLyogU2xlZXAgdW50aWwgc29tZXRoaW5nIGhhcHBlbnMuICBDYWxsaW5nIHBydlNsZWVwKCkgd2lsbA0KLSAgICAgICAgICAgICAqIGF1dG9tYXRpY2FsbHkgcmVzZXQgdGhlIGkgYml0IGluIHRoZSBQU1cuICovDQotICAgICAgICAgICAgcHJ2U2xlZXAoIHhFeHBlY3RlZElkbGVUaW1lICk7DQorCQkgICAgLyogUHJvdGVjdGlvbiBvbi4gKi8NCisJCSAgICBTWVNURU0uUFJDUi5XT1JEID0gcG9ydExPQ0tfS0VZOw0KIA0KLSAgICAgICAgICAgIC8qIFJlc3RhcnQgdGhlIENNVC4gKi8NCi0gICAgICAgICAgICBDTVQuQ01TVFIwLkJJVC5TVFIwID0gMTsNCi0gICAgICAgIH0NCi0gICAgICAgIGVsc2UNCi0gICAgICAgIHsNCi0gICAgICAgICAgICAvKiBQcm90ZWN0aW9uIG9mZi4gKi8NCi0gICAgICAgICAgICBTWVNURU0uUFJDUi5XT1JEID0gcG9ydFVOTE9DS19LRVk7DQorCQkgICAgLyogQWRqdXN0IHRoZSBtYXRjaCB2YWx1ZSB0byB0YWtlIGludG8gYWNjb3VudCB0aGF0IHRoZSBjdXJyZW50DQorCQkJdGltZSBzbGljZSBpcyBhbHJlYWR5IHBhcnRpYWxseSBjb21wbGV0ZS4gKi8NCisJCQl1bE1hdGNoVmFsdWUgLT0gKCB1aW50MzJfdCApIENNVDAuQ01DTlQ7DQorCQkJQ01UMC5DTUNPUiA9ICggdWludDE2X3QgKSB1bE1hdGNoVmFsdWU7DQogDQotICAgICAgICAgICAgLyogUmVhZHkgZm9yIGRlZXAgc2xlZXAgbW9kZS4gKi8NCi0gICAgICAgICAgICBTWVNURU0uTVNUUENSQy5CSVQuRFNMUEUgPSAxOw0KLSAgICAgICAgICAgIFNZU1RFTS5NU1RQQ1JBLkJJVC5NU1RQQTI4ID0gMTsNCi0gICAgICAgICAgICBTWVNURU0uU0JZQ1IuQklULlNTQlkgPSAwOw0KKwkJCS8qIFJlc3RhcnQgdGhlIENNVCB0byBjb3VudCB1cCB0byB0aGUgbmV3IG1hdGNoIHZhbHVlLiAqLw0KKwkJCUNNVDAuQ01DTlQgPSAwOw0KKwkJCUNNVC5DTVNUUjAuQklULlNUUjAgPSAxOw0KIA0KLSAgICAgICAgICAgIC8qIFByb3RlY3Rpb24gb24uICovDQotICAgICAgICAgICAgU1lTVEVNLlBSQ1IuV09SRCA9IHBvcnRMT0NLX0tFWTsNCisJCQkvKiBTbGVlcCB1bnRpbCBzb21ldGhpbmcgaGFwcGVucy4gIENhbGxpbmcgcHJ2U2xlZXAoKSB3aWxsDQorCQkJYXV0b21hdGljYWxseSByZXNldCB0aGUgaSBiaXQgaW4gdGhlIFBTVy4gKi8NCisJCQlwcnZTbGVlcCggeEV4cGVjdGVkSWRsZVRpbWUgKTsNCiANCi0gICAgICAgICAgICAvKiBBZGp1c3QgdGhlIG1hdGNoIHZhbHVlIHRvIHRha2UgaW50byBhY2NvdW50IHRoYXQgdGhlIGN1cnJlbnQNCi0gICAgICAgICAgICAgKiB0aW1lIHNsaWNlIGlzIGFscmVhZHkgcGFydGlhbGx5IGNvbXBsZXRlLiAqLw0KLSAgICAgICAgICAgIHVsTWF0Y2hWYWx1ZSAtPSAoIHVpbnQzMl90ICkgQ01UMC5DTUNOVDsNCi0gICAgICAgICAgICBDTVQwLkNNQ09SID0gKCB1aW50MTZfdCApIHVsTWF0Y2hWYWx1ZTsNCisJCQkvKiBTdG9wIENNVC4gIEFnYWluLCB0aGUgdGltZSB0aGUgU3lzVGljayBpcyBzdG9wcGVkIGZvciBpcw0KKwkJCWFjY291bnRlZCBmb3IgYXMgYmVzdCBpdCBjYW4gYmUsIGJ1dCB1c2luZyB0aGUgdGlja2xlc3MgbW9kZSB3aWxsDQorCQkJaW5ldml0YWJseSByZXN1bHQgaW4gc29tZSB0aW55IGRyaWZ0IG9mIHRoZSB0aW1lIG1haW50YWluZWQgYnkgdGhlDQorCQkJa2VybmVsIHdpdGgJcmVzcGVjdCB0byBjYWxlbmRhciB0aW1lLiAqLw0KKwkJCUNNVC5DTVNUUjAuQklULlNUUjAgPSAwOw0KKwkJCXdoaWxlKCBDTVQuQ01TVFIwLkJJVC5TVFIwID09IDEgKQ0KKwkJCXsNCisJCQkJLyogTm90aGluZyB0byBkbyBoZXJlLiAqLw0KKwkJCX0NCiANCi0gICAgICAgICAgICAvKiBSZXN0YXJ0IHRoZSBDTVQgdG8gY291bnQgdXAgdG8gdGhlIG5ldyBtYXRjaCB2YWx1ZS4gKi8NCi0gICAgICAgICAgICBDTVQwLkNNQ05UID0gMDsNCi0gICAgICAgICAgICBDTVQuQ01TVFIwLkJJVC5TVFIwID0gMTsNCisJCQl1bEN1cnJlbnRDb3VudCA9ICggdWludDMyX3QgKSBDTVQwLkNNQ05UOw0KIA0KLSAgICAgICAgICAgIC8qIFNsZWVwIHVudGlsIHNvbWV0aGluZyBoYXBwZW5zLiAgQ2FsbGluZyBwcnZTbGVlcCgpIHdpbGwNCi0gICAgICAgICAgICAgKiBhdXRvbWF0aWNhbGx5IHJlc2V0IHRoZSBpIGJpdCBpbiB0aGUgUFNXLiAqLw0KLSAgICAgICAgICAgIHBydlNsZWVwKCB4RXhwZWN0ZWRJZGxlVGltZSApOw0KKwkJCWlmKCB1bFRpY2tGbGFnICE9IHBkRkFMU0UgKQ0KKwkJCXsNCisJCQkJLyogVGhlIHRpY2sgaW50ZXJydXB0IGhhcyBhbHJlYWR5IGV4ZWN1dGVkLCBhbHRob3VnaCBiZWNhdXNlDQorCQkJCXRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdGhlIHNjaGVkdWxlciBzdXNwZW5kZWQgdGhlIGFjdHVhbA0KKwkJCQl0aWNrIHByb2Nlc3Npbmcgd2lsbCBub3Qgb2NjdXIgdW50aWwgYWZ0ZXIgdGhpcyBmdW5jdGlvbiBoYXMNCisJCQkJZXhpdGVkLiAgUmVzZXQgdGhlIG1hdGNoIHZhbHVlIHdpdGggd2hhdGV2ZXIgcmVtYWlucyBvZiB0aGlzDQorCQkJCXRpY2sgcGVyaW9kLiAqLw0KKwkJCQl1bE1hdGNoVmFsdWUgPSB1bE1hdGNoVmFsdWVGb3JPbmVUaWNrIC0gdWxDdXJyZW50Q291bnQ7DQorCQkJCUNNVDAuQ01DT1IgPSAoIHVpbnQxNl90ICkgdWxNYXRjaFZhbHVlOw0KIA0KLSAgICAgICAgICAgIC8qIFN0b3AgQ01ULiAgQWdhaW4sIHRoZSB0aW1lIHRoZSBTeXNUaWNrIGlzIHN0b3BwZWQgZm9yIGlzDQotICAgICAgICAgICAgICogYWNjb3VudGVkIGZvciBhcyBiZXN0IGl0IGNhbiBiZSwgYnV0IHVzaW5nIHRoZSB0aWNrbGVzcyBtb2RlIHdpbGwNCi0gICAgICAgICAgICAgKiBpbmV2aXRhYmx5IHJlc3VsdCBpbiBzb21lIHRpbnkgZHJpZnQgb2YgdGhlIHRpbWUgbWFpbnRhaW5lZCBieSB0aGUNCi0gICAgICAgICAgICAgKiBrZXJuZWwgd2l0aAlyZXNwZWN0IHRvIGNhbGVuZGFyIHRpbWUuICovDQotICAgICAgICAgICAgQ01ULkNNU1RSMC5CSVQuU1RSMCA9IDA7DQorCQkJCS8qIFRoZSB0aWNrIGludGVycnVwdCBoYW5kbGVyIHdpbGwgYWxyZWFkeSBoYXZlIHBlbmRlZCB0aGUgdGljaw0KKwkJCQlwcm9jZXNzaW5nIGluIHRoZSBrZXJuZWwuICBBcyB0aGUgcGVuZGluZyB0aWNrIHdpbGwgYmUNCisJCQkJcHJvY2Vzc2VkIGFzIHNvb24gYXMgdGhpcyBmdW5jdGlvbiBleGl0cywgdGhlIHRpY2sgdmFsdWUNCisJCQkJbWFpbnRhaW5lZCBieSB0aGUgdGljayBpcyBzdGVwcGVkIGZvcndhcmQgYnkgb25lIGxlc3MgdGhhbiB0aGUNCisJCQkJdGltZSBzcGVudCBzbGVlcGluZy4gIFRoZSBhY3R1YWwgc3RlcHBpbmcgb2YgdGhlIHRpY2sgYXBwZWFycw0KKwkJCQlsYXRlciBpbiB0aGlzIGZ1bmN0aW9uLiAqLw0KKwkJCQl1bENvbXBsZXRlVGlja1BlcmlvZHMgPSB4RXhwZWN0ZWRJZGxlVGltZSAtIDFVTDsNCisJCQl9DQorCQkJZWxzZQ0KKwkJCXsNCisJCQkJLyogU29tZXRoaW5nIG90aGVyIHRoYW4gdGhlIHRpY2sgaW50ZXJydXB0IGVuZGVkIHRoZSBzbGVlcC4NCisJCQkJSG93CW1hbnkgY29tcGxldGUgdGljayBwZXJpb2RzIHBhc3NlZCB3aGlsZSB0aGUgcHJvY2Vzc29yIHdhcw0KKwkJCQlzbGVlcGluZz8gKi8NCisJCQkJdWxDb21wbGV0ZVRpY2tQZXJpb2RzID0gdWxDdXJyZW50Q291bnQgLyB1bE1hdGNoVmFsdWVGb3JPbmVUaWNrOw0KIA0KLSAgICAgICAgICAgIHdoaWxlKCBDTVQuQ01TVFIwLkJJVC5TVFIwID09IDEgKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgLyogTm90aGluZyB0byBkbyBoZXJlLiAqLw0KLSAgICAgICAgICAgIH0NCisJCQkJLyogVGhlIG1hdGNoIHZhbHVlIGlzIHNldCB0byB3aGF0ZXZlciBmcmFjdGlvbiBvZiBhIHNpbmdsZSB0aWNrDQorCQkJCXBlcmlvZCByZW1haW5zLiAqLw0KKwkJCQl1bE1hdGNoVmFsdWUgPSB1bEN1cnJlbnRDb3VudCAtICggdWxDb21wbGV0ZVRpY2tQZXJpb2RzICogdWxNYXRjaFZhbHVlRm9yT25lVGljayApOw0KKwkJCQlDTVQwLkNNQ09SID0gKCB1aW50MTZfdCApIHVsTWF0Y2hWYWx1ZTsNCisJCQl9DQogDQotICAgICAgICAgICAgdWxDdXJyZW50Q291bnQgPSAoIHVpbnQzMl90ICkgQ01UMC5DTUNOVDsNCisJCQkvKiBSZXN0YXJ0IHRoZSBDTVQgc28gaXQgcnVucyB1cCB0byB0aGUgbWF0Y2ggdmFsdWUuICBUaGUgbWF0Y2ggdmFsdWUNCisJCQl3aWxsIGdldCBzZXQgdG8gdGhlIHZhbHVlIHJlcXVpcmVkIHRvIGdlbmVyYXRlIGV4YWN0bHkgb25lIHRpY2sgcGVyaW9kDQorCQkJdGhlIG5leHQgdGltZSB0aGUgQ01UIGludGVycnVwdCBleGVjdXRlcy4gKi8NCisJCQlDTVQwLkNNQ05UID0gMDsNCisJCQlDTVQuQ01TVFIwLkJJVC5TVFIwID0gMTsNCiANCi0gICAgICAgICAgICBpZiggdWxUaWNrRmxhZyAhPSBwZEZBTFNFICkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIC8qIFRoZSB0aWNrIGludGVycnVwdCBoYXMgYWxyZWFkeSBleGVjdXRlZCwgYWx0aG91Z2ggYmVjYXVzZQ0KLSAgICAgICAgICAgICAgICAgKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHRoZSBzY2hlZHVsZXIgc3VzcGVuZGVkIHRoZSBhY3R1YWwNCi0gICAgICAgICAgICAgICAgICogdGljayBwcm9jZXNzaW5nIHdpbGwgbm90IG9jY3VyIHVudGlsIGFmdGVyIHRoaXMgZnVuY3Rpb24gaGFzDQotICAgICAgICAgICAgICAgICAqIGV4aXRlZC4gIFJlc2V0IHRoZSBtYXRjaCB2YWx1ZSB3aXRoIHdoYXRldmVyIHJlbWFpbnMgb2YgdGhpcw0KLSAgICAgICAgICAgICAgICAgKiB0aWNrIHBlcmlvZC4gKi8NCi0gICAgICAgICAgICAgICAgdWxNYXRjaFZhbHVlID0gdWxNYXRjaFZhbHVlRm9yT25lVGljayAtIHVsQ3VycmVudENvdW50Ow0KLSAgICAgICAgICAgICAgICBDTVQwLkNNQ09SID0gKCB1aW50MTZfdCApIHVsTWF0Y2hWYWx1ZTsNCi0NCi0gICAgICAgICAgICAgICAgLyogVGhlIHRpY2sgaW50ZXJydXB0IGhhbmRsZXIgd2lsbCBhbHJlYWR5IGhhdmUgcGVuZGVkIHRoZSB0aWNrDQotICAgICAgICAgICAgICAgICAqIHByb2Nlc3NpbmcgaW4gdGhlIGtlcm5lbC4gIEFzIHRoZSBwZW5kaW5nIHRpY2sgd2lsbCBiZQ0KLSAgICAgICAgICAgICAgICAgKiBwcm9jZXNzZWQgYXMgc29vbiBhcyB0aGlzIGZ1bmN0aW9uIGV4aXRzLCB0aGUgdGljayB2YWx1ZQ0KLSAgICAgICAgICAgICAgICAgKiBtYWludGFpbmVkIGJ5IHRoZSB0aWNrIGlzIHN0ZXBwZWQgZm9yd2FyZCBieSBvbmUgbGVzcyB0aGFuIHRoZQ0KLSAgICAgICAgICAgICAgICAgKiB0aW1lIHNwZW50IHNsZWVwaW5nLiAgVGhlIGFjdHVhbCBzdGVwcGluZyBvZiB0aGUgdGljayBhcHBlYXJzDQotICAgICAgICAgICAgICAgICAqIGxhdGVyIGluIHRoaXMgZnVuY3Rpb24uICovDQotICAgICAgICAgICAgICAgIHVsQ29tcGxldGVUaWNrUGVyaW9kcyA9IHhFeHBlY3RlZElkbGVUaW1lIC0gMVVMOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBlbHNlDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAvKiBTb21ldGhpbmcgb3RoZXIgdGhhbiB0aGUgdGljayBpbnRlcnJ1cHQgZW5kZWQgdGhlIHNsZWVwLg0KLSAgICAgICAgICAgICAgICAgKiBIb3cJbWFueSBjb21wbGV0ZSB0aWNrIHBlcmlvZHMgcGFzc2VkIHdoaWxlIHRoZSBwcm9jZXNzb3Igd2FzDQotICAgICAgICAgICAgICAgICAqIHNsZWVwaW5nPyAqLw0KLSAgICAgICAgICAgICAgICB1bENvbXBsZXRlVGlja1BlcmlvZHMgPSB1bEN1cnJlbnRDb3VudCAvIHVsTWF0Y2hWYWx1ZUZvck9uZVRpY2s7DQotDQotICAgICAgICAgICAgICAgIC8qIFRoZSBtYXRjaCB2YWx1ZSBpcyBzZXQgdG8gd2hhdGV2ZXIgZnJhY3Rpb24gb2YgYSBzaW5nbGUgdGljaw0KLSAgICAgICAgICAgICAgICAgKiBwZXJpb2QgcmVtYWlucy4gKi8NCi0gICAgICAgICAgICAgICAgdWxNYXRjaFZhbHVlID0gdWxDdXJyZW50Q291bnQgLSAoIHVsQ29tcGxldGVUaWNrUGVyaW9kcyAqIHVsTWF0Y2hWYWx1ZUZvck9uZVRpY2sgKTsNCi0gICAgICAgICAgICAgICAgQ01UMC5DTUNPUiA9ICggdWludDE2X3QgKSB1bE1hdGNoVmFsdWU7DQotICAgICAgICAgICAgfQ0KLQ0KLSAgICAgICAgICAgIC8qIFJlc3RhcnQgdGhlIENNVCBzbyBpdCBydW5zIHVwIHRvIHRoZSBtYXRjaCB2YWx1ZS4gIFRoZSBtYXRjaCB2YWx1ZQ0KLSAgICAgICAgICAgICAqIHdpbGwgZ2V0IHNldCB0byB0aGUgdmFsdWUgcmVxdWlyZWQgdG8gZ2VuZXJhdGUgZXhhY3RseSBvbmUgdGljayBwZXJpb2QNCi0gICAgICAgICAgICAgKiB0aGUgbmV4dCB0aW1lIHRoZSBDTVQgaW50ZXJydXB0IGV4ZWN1dGVzLiAqLw0KLSAgICAgICAgICAgIENNVDAuQ01DTlQgPSAwOw0KLSAgICAgICAgICAgIENNVC5DTVNUUjAuQklULlNUUjAgPSAxOw0KLQ0KLSAgICAgICAgICAgIC8qIFdpbmQgdGhlIHRpY2sgZm9yd2FyZCBieSB0aGUgbnVtYmVyIG9mIHRpY2sgcGVyaW9kcyB0aGF0IHRoZSBDUFUNCi0gICAgICAgICAgICAgKiByZW1haW5lZCBpbiBhIGxvdyBwb3dlciBzdGF0ZS4gKi8NCi0gICAgICAgICAgICB2VGFza1N0ZXBUaWNrKCB1bENvbXBsZXRlVGlja1BlcmlvZHMgKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KKwkJCS8qIFdpbmQgdGhlIHRpY2sgZm9yd2FyZCBieSB0aGUgbnVtYmVyIG9mIHRpY2sgcGVyaW9kcyB0aGF0IHRoZSBDUFUNCisJCQlyZW1haW5lZCBpbiBhIGxvdyBwb3dlciBzdGF0ZS4gKi8NCisJCQl2VGFza1N0ZXBUaWNrKCB1bENvbXBsZXRlVGlja1BlcmlvZHMgKTsNCisJCX0NCisJfQ0KIA0KICNlbmRpZiAvKiBjb25maWdVU0VfVElDS0xFU1NfSURMRSAqLw0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL1JlbmVzYXMvUlgxMDAvcG9ydG1hY3JvLmggYi9wb3J0YWJsZS9SZW5lc2FzL1JYMTAwL3BvcnRtYWNyby5oCmluZGV4IGI5YzAyOWEuLjJmNzFlN2UgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL1JlbmVzYXMvUlgxMDAvcG9ydG1hY3JvLmgKKysrIGIvcG9ydGFibGUvUmVuZXNhcy9SWDEwMC9wb3J0bWFjcm8uaApAQCAtMjcsMTQgKzI3LDE0IEBACiANCiANCiAjaWZuZGVmIFBPUlRNQUNST19IDQotICAgICNkZWZpbmUgUE9SVE1BQ1JPX0gNCisjZGVmaW5lIFBPUlRNQUNST19IDQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgZXh0ZXJuICJDIiB7DQotICAgICNlbmRpZg0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KIA0KIC8qIEhhcmR3YXJlIHNwZWNpZmljcy4gKi8NCi0gICAgI2luY2x1ZGUgIm1hY2hpbmUuaCINCisjaW5jbHVkZSAibWFjaGluZS5oIg0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgKiBQb3J0IHNwZWNpZmljIGRlZmluaXRpb25zLg0KQEAgLTQ3LDEwNCArNDcsMTA1IEBACiAgKi8NCiANCiAvKiBUeXBlIGRlZmluaXRpb25zIC0gdGhlc2UgYXJlIGEgYml0IGxlZ2FjeSBhbmQgbm90IHJlYWxseSB1c2VkIG5vdywgb3RoZXINCi0gKiB0aGFuIHBvcnRTVEFDS19UWVBFIGFuZCBwb3J0QkFTRV9UWVBFLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRDSEFSICAgICAgICAgIGNoYXINCi0gICAgI2RlZmluZSBwb3J0RkxPQVQgICAgICAgICBmbG9hdA0KLSAgICAjZGVmaW5lIHBvcnRET1VCTEUgICAgICAgIGRvdWJsZQ0KLSAgICAjZGVmaW5lIHBvcnRMT05HICAgICAgICAgIGxvbmcNCi0gICAgI2RlZmluZSBwb3J0U0hPUlQgICAgICAgICBzaG9ydA0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19UWVBFICAgIHVpbnQzMl90DQotICAgICNkZWZpbmUgcG9ydEJBU0VfVFlQRSAgICAgbG9uZw0KK3RoYW4gcG9ydFNUQUNLX1RZUEUgYW5kIHBvcnRCQVNFX1RZUEUuICovDQorI2RlZmluZSBwb3J0Q0hBUgkJY2hhcg0KKyNkZWZpbmUgcG9ydEZMT0FUCQlmbG9hdA0KKyNkZWZpbmUgcG9ydERPVUJMRQkJZG91YmxlDQorI2RlZmluZSBwb3J0TE9ORwkJbG9uZw0KKyNkZWZpbmUgcG9ydFNIT1JUCQlzaG9ydA0KKyNkZWZpbmUgcG9ydFNUQUNLX1RZUEUJdWludDMyX3QNCisjZGVmaW5lIHBvcnRCQVNFX1RZUEUJbG9uZw0KIA0KLSAgICB0eXBlZGVmIHBvcnRTVEFDS19UWVBFICAgU3RhY2tUeXBlX3Q7DQotICAgIHR5cGVkZWYgbG9uZyAgICAgICAgICAgICBCYXNlVHlwZV90Ow0KLSAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgICAgVUJhc2VUeXBlX3Q7DQordHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSBTdGFja1R5cGVfdDsNCit0eXBlZGVmIGxvbmcgQmFzZVR5cGVfdDsNCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgVUJhc2VUeXBlX3Q7DQogDQotICAgICNpZiAoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQotICAgICAgICB0eXBlZGVmIHVpbnQxNl90ICAgICBUaWNrVHlwZV90Ow0KLSAgICAgICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICAgICAgICAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmYNCi0gICAgI2Vsc2UNCi0gICAgICAgIHR5cGVkZWYgdWludDMyX3QgICAgIFRpY2tUeXBlX3Q7DQotICAgICAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgICAgICAgICAgICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTA0KKyNpZiggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCisJdHlwZWRlZiB1aW50MTZfdCBUaWNrVHlwZV90Ow0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQorI2Vsc2UNCisJdHlwZWRlZiB1aW50MzJfdCBUaWNrVHlwZV90Ow0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQogDQotLyogMzItYml0IHRpY2sgdHlwZSBvbiBhIDMyLWJpdCBhcmNoaXRlY3R1cmUsIHNvIHJlYWRzIG9mIHRoZSB0aWNrIGNvdW50IGRvDQotICogbm90IG5lZWQgdG8gYmUgZ3VhcmRlZCB3aXRoIGEgY3JpdGljYWwgc2VjdGlvbi4gKi8NCi0gICAgICAgICNkZWZpbmUgcG9ydFRJQ0tfVFlQRV9JU19BVE9NSUMgICAgMQ0KLSAgICAjZW5kaWYNCisJLyogMzItYml0IHRpY2sgdHlwZSBvbiBhIDMyLWJpdCBhcmNoaXRlY3R1cmUsIHNvIHJlYWRzIG9mIHRoZSB0aWNrIGNvdW50IGRvDQorCW5vdCBuZWVkIHRvIGJlIGd1YXJkZWQgd2l0aCBhIGNyaXRpY2FsIHNlY3Rpb24uICovDQorCSNkZWZpbmUgcG9ydFRJQ0tfVFlQRV9JU19BVE9NSUMgMQ0KKyNlbmRpZg0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIEhhcmR3YXJlIHNwZWNpZmljcy4gKi8NCi0gICAgI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQgICAgOCAgICAgICAgIC8qIENvdWxkIG1ha2UgZm91ciwgYWNjb3JkaW5nIHRvIG1hbnVhbC4gKi8NCi0gICAgI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RIICAgICAgLTENCi0gICAgI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMgICAgKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCi0gICAgI2RlZmluZSBwb3J0Tk9QKCkgICAgbm9wKCkNCisjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVAkJCQk4CS8qIENvdWxkIG1ha2UgZm91ciwgYWNjb3JkaW5nIHRvIG1hbnVhbC4gKi8NCisjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEgJCQkJLTENCisjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUwkJCQkoICggVGlja1R5cGVfdCApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KKyNkZWZpbmUgcG9ydE5PUCgpCQkJCQkJbm9wKCkNCiANCi0gICAgI3ByYWdtYSBpbmxpbmVfYXNtIHZQb3J0WWllbGQNCi0gICAgc3RhdGljIHZvaWQgdlBvcnRZaWVsZCggdm9pZCApDQotICAgIHsNCi0gICAgICAgIC8qIFNhdmUgY2xvYmJlcmVkIHJlZ2lzdGVyIC0gbWF5IG5vdCBhY3R1YWxseSBiZSBuZWNlc3NhcnkgaWYgaW5saW5lIGFzbQ0KLSAgICAgICAgICogZnVuY3Rpb25zIGFyZSBjb25zaWRlcmVkIHRvIHVzZSB0aGUgc2FtZSBydWxlcyBhcyBmdW5jdGlvbiBjYWxscyBieSB0aGUNCi0gICAgICAgICAqIGNvbXBpbGVyLiAqLw0KLSAgICAgICAgUFVTSC5MIFI1DQotICAgICAgICAvKiBTZXQgSVRVIFNXSU5UUi4gKi8NCi0gICAgICAgIE1PVi5MICMgODcyRTBILCBSNQ0KLSAgICAgICAgICAgIE1PVi5CICMgMSwgWyBSNSBdDQotICAgICAgICAvKiBSZWFkIGJhY2sgdG8gZW5zdXJlIHRoZSB2YWx1ZSBpcyB0YWtlbiBiZWZvcmUgcHJvY2VlZGluZy4gKi8NCi0gICAgICAgIE1PVi5MWyBSNSBdLCBSNQ0KLSAgICAgICAgLyogUmVzdG9yZSBjbG9iYmVyZWQgcmVnaXN0ZXIgdG8gaXRzIHByZXZpb3VzIHZhbHVlLiAqLw0KLSAgICAgICAgUE9QIFI1DQotICAgIH0NCi0gICAgI2RlZmluZSBwb3J0WUlFTEQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZQb3J0WWllbGQoKQ0KLSAgICAjZGVmaW5lIHBvcnRZSUVMRF9GUk9NX0lTUiggeCApICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIHggIT0gcGRGQUxTRSApIHsgcG9ydFlJRUxEKCk7IH0NCisjcHJhZ21hIGlubGluZV9hc20gdlBvcnRZaWVsZA0KK3N0YXRpYyB2b2lkIHZQb3J0WWllbGQoIHZvaWQgKQ0KK3sNCisJLyogU2F2ZSBjbG9iYmVyZWQgcmVnaXN0ZXIgLSBtYXkgbm90IGFjdHVhbGx5IGJlIG5lY2Vzc2FyeSBpZiBpbmxpbmUgYXNtDQorCWZ1bmN0aW9ucyBhcmUgY29uc2lkZXJlZCB0byB1c2UgdGhlIHNhbWUgcnVsZXMgYXMgZnVuY3Rpb24gY2FsbHMgYnkgdGhlDQorCWNvbXBpbGVyLiAqLw0KKwlQVVNILkwgUjUNCisJLyogU2V0IElUVSBTV0lOVFIuICovDQorCU1PVi5MICM4NzJFMEgsIFI1DQorCU1PVi5CICMxLCBbUjVdDQorCS8qIFJlYWQgYmFjayB0byBlbnN1cmUgdGhlIHZhbHVlIGlzIHRha2VuIGJlZm9yZSBwcm9jZWVkaW5nLiAqLw0KKwlNT1YuTCBbUjVdLCBSNQ0KKwkvKiBSZXN0b3JlIGNsb2JiZXJlZCByZWdpc3RlciB0byBpdHMgcHJldmlvdXMgdmFsdWUuICovDQorCVBPUCBSNQ0KK30NCisjZGVmaW5lIHBvcnRZSUVMRCgpCXZQb3J0WWllbGQoKQ0KKyNkZWZpbmUgcG9ydFlJRUxEX0ZST01fSVNSKCB4ICkJaWYoIHggIT0gcGRGQUxTRSApIHsgcG9ydFlJRUxEKCk7IH0NCiANCiAvKiBUaGVzZSBtYWNyb3Mgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHksIGJ1dCB0aHJvdWdoIHRoZQ0KLSAqIHRhc2tFTlRFUl9DUklUSUNBTCgpIGFuZCB0YXNrRVhJVF9DUklUSUNBTCgpIG1hY3Jvcy4gIEFuIGV4dHJhIGNoZWNrIGlzDQotICogcGVyZm9ybWVkIGlmIGNvbmZpZ0FTU0VSVCgpIGlzIGRlZmluZWQgdG8gZW5zdXJlIGFuIGFzc2VydGlvbiBoYW5kbGVyIGRvZXMgbm90DQotICogaW5hZHZlcnRlbnRseSBhdHRlbXB0IHRvIGxvd2VyIHRoZSBJUEwgd2hlbiB0aGUgY2FsbCB0byBhc3NlcnQgd2FzIHRyaWdnZXJlZA0KLSAqIGJlY2F1c2UgdGhlIElQTCB2YWx1ZSB3YXMgZm91bmQgdG8gYmUgYWJvdmUJY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZDQotICogd2hlbiBhbiBJU1Igc2FmZSBGcmVlUlRPUyBBUEkgZnVuY3Rpb24gd2FzIGV4ZWN1dGVkLiAgSVNSIHNhZmUgRnJlZVJUT1MgQVBJDQotICogZnVuY3Rpb25zIGFyZSB0aG9zZSB0aGF0IGVuZCBpbiBGcm9tSVNSLiAgRnJlZVJUT1MgbWFpbnRhaW5zIGEgc2VwYXJhdGUNCi0gKiBpbnRlcnJ1cHQgQVBJIHRvIGVuc3VyZSBBUEkgZnVuY3Rpb24gYW5kIGludGVycnVwdCBlbnRyeSBpcyBhcyBmYXN0IGFuZCBhcw0KLSAqIHNpbXBsZSBhcyBwb3NzaWJsZS4gKi8NCi0gICAgI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldF9pcGwoICggbG9uZyApIDAgKQ0KLSAgICAjaWZkZWYgY29uZmlnQVNTRVJUDQotICAgICAgICAjZGVmaW5lIHBvcnRBU1NFUlRfSUZfSU5URVJSVVBUX1BSSU9SSVRZX0lOVkFMSUQoKSAgICBjb25maWdBU1NFUlQoICggZ2V0X2lwbCgpIDw9IGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSApICkNCi0gICAgICAgICNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpICAgICAgICAgICAgICAgICAgICAgIGlmKCBnZXRfaXBsKCkgPCBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgKSBzZXRfaXBsKCAoIGxvbmcgKSBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgKQ0KLSAgICAjZWxzZQ0KLSAgICAgICAgI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgICAgICAgICAgICAgICAgICAgICAgc2V0X2lwbCggKCBsb25nICkgY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkNCi0gICAgI2VuZGlmDQordGFza0VOVEVSX0NSSVRJQ0FMKCkgYW5kIHRhc2tFWElUX0NSSVRJQ0FMKCkgbWFjcm9zLiAgQW4gZXh0cmEgY2hlY2sgaXMNCitwZXJmb3JtZWQgaWYgY29uZmlnQVNTRVJUKCkgaXMgZGVmaW5lZCB0byBlbnN1cmUgYW4gYXNzZXJ0aW9uIGhhbmRsZXIgZG9lcyBub3QNCitpbmFkdmVydGVudGx5IGF0dGVtcHQgdG8gbG93ZXIgdGhlIElQTCB3aGVuIHRoZSBjYWxsIHRvIGFzc2VydCB3YXMgdHJpZ2dlcmVkDQorYmVjYXVzZSB0aGUgSVBMIHZhbHVlIHdhcyBmb3VuZCB0byBiZSBhYm92ZQljb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkNCit3aGVuIGFuIElTUiBzYWZlIEZyZWVSVE9TIEFQSSBmdW5jdGlvbiB3YXMgZXhlY3V0ZWQuICBJU1Igc2FmZSBGcmVlUlRPUyBBUEkNCitmdW5jdGlvbnMgYXJlIHRob3NlIHRoYXQgZW5kIGluIEZyb21JU1IuICBGcmVlUlRPUyBtYWludGFpbnMgYSBzZXBhcmF0ZQ0KK2ludGVycnVwdCBBUEkgdG8gZW5zdXJlIEFQSSBmdW5jdGlvbiBhbmQgaW50ZXJydXB0IGVudHJ5IGlzIGFzIGZhc3QgYW5kIGFzDQorc2ltcGxlIGFzIHBvc3NpYmxlLiAqLw0KKyNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkgCXNldF9pcGwoICggbG9uZyApIDAgKQ0KKyNpZmRlZiBjb25maWdBU1NFUlQNCisJI2RlZmluZSBwb3J0QVNTRVJUX0lGX0lOVEVSUlVQVF9QUklPUklUWV9JTlZBTElEKCkgY29uZmlnQVNTRVJUKCAoIGdldF9pcGwoKSA8PSBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgKSApDQorCSNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpIAlpZiggZ2V0X2lwbCgpIDwgY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkgc2V0X2lwbCggKCBsb25nICkgY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkNCisjZWxzZQ0KKwkjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAJc2V0X2lwbCggKCBsb25nICkgY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkNCisjZW5kaWYNCiANCiAvKiBDcml0aWNhbCBuZXN0aW5nIGNvdW50cyBhcmUgc3RvcmVkIGluIHRoZSBUQ0IuICovDQotICAgICNkZWZpbmUgcG9ydENSSVRJQ0FMX05FU1RJTkdfSU5fVENCICAgICggMSApDQorI2RlZmluZSBwb3J0Q1JJVElDQUxfTkVTVElOR19JTl9UQ0IgKCAxICkNCiANCiAvKiBUaGUgY3JpdGljYWwgbmVzdGluZyBmdW5jdGlvbnMgZGVmaW5lZCB3aXRoaW4gdGFza3MuYy4gKi8NCi0gICAgZXh0ZXJuIHZvaWQgdlRhc2tFbnRlckNyaXRpY2FsKCB2b2lkICk7DQotICAgIGV4dGVybiB2b2lkIHZUYXNrRXhpdENyaXRpY2FsKCB2b2lkICk7DQotICAgICNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdlRhc2tFbnRlckNyaXRpY2FsKCkNCi0gICAgI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2VGFza0V4aXRDcml0aWNhbCgpDQorZXh0ZXJuIHZvaWQgdlRhc2tFbnRlckNyaXRpY2FsKCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdlRhc2tFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCisjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpCXZUYXNrRW50ZXJDcml0aWNhbCgpDQorI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpCQl2VGFza0V4aXRDcml0aWNhbCgpDQogDQogLyogQXMgdGhpcyBwb3J0IGFsbG93cyBpbnRlcnJ1cHQgbmVzdGluZy4uLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRTRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggVUJhc2VUeXBlX3QgKSBnZXRfaXBsKCk7IHNldF9pcGwoICggc2lnbmVkIGxvbmcgKSBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgKQ0KLSAgICAjZGVmaW5lIHBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUiggdXhTYXZlZEludGVycnVwdFN0YXR1cyApICAgIHNldF9pcGwoICggc2lnbmVkIGxvbmcgKSB1eFNhdmVkSW50ZXJydXB0U3RhdHVzICkNCisjZGVmaW5lIHBvcnRTRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKSAoIFVCYXNlVHlwZV90ICkgZ2V0X2lwbCgpOyBzZXRfaXBsKCAoIHNpZ25lZCBsb25nICkgY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkNCisjZGVmaW5lIHBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUiggdXhTYXZlZEludGVycnVwdFN0YXR1cyApIHNldF9pcGwoICggc2lnbmVkIGxvbmcgKSB1eFNhdmVkSW50ZXJydXB0U3RhdHVzICkNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBUaWNrbGVzcyBpZGxlL2xvdyBwb3dlciBmdW5jdGlvbmFsaXR5LiAqLw0KLSAgICAjaWYgY29uZmlnVVNFX1RJQ0tMRVNTX0lETEUgPT0gMQ0KLSAgICAgICAgI2lmbmRlZiBwb3J0U1VQUFJFU1NfVElDS1NfQU5EX1NMRUVQDQotICAgICAgICAgICAgZXh0ZXJuIHZvaWQgdlBvcnRTdXBwcmVzc1RpY2tzQW5kU2xlZXAoIFRpY2tUeXBlX3QgeEV4cGVjdGVkSWRsZVRpbWUgKTsNCi0gICAgICAgICAgICAjZGVmaW5lIHBvcnRTVVBQUkVTU19USUNLU19BTkRfU0xFRVAoIHhFeHBlY3RlZElkbGVUaW1lICkgICAgdlBvcnRTdXBwcmVzc1RpY2tzQW5kU2xlZXAoIHhFeHBlY3RlZElkbGVUaW1lICkNCi0gICAgICAgICNlbmRpZg0KLSAgICAjZW5kaWYNCisjaWYgY29uZmlnVVNFX1RJQ0tMRVNTX0lETEUgPT0gMQ0KKwkjaWZuZGVmIHBvcnRTVVBQUkVTU19USUNLU19BTkRfU0xFRVANCisJCWV4dGVybiB2b2lkIHZQb3J0U3VwcHJlc3NUaWNrc0FuZFNsZWVwKCBUaWNrVHlwZV90IHhFeHBlY3RlZElkbGVUaW1lICk7DQorCQkjZGVmaW5lIHBvcnRTVVBQUkVTU19USUNLU19BTkRfU0xFRVAoIHhFeHBlY3RlZElkbGVUaW1lICkgdlBvcnRTdXBwcmVzc1RpY2tzQW5kU2xlZXAoIHhFeHBlY3RlZElkbGVUaW1lICkNCisJI2VuZGlmDQorI2VuZGlmDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQotICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KLSAgICAjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgICAgICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgfQ0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQogDQogI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvUmVuZXNhcy9SWDIwMC9wb3J0LmMgYi9wb3J0YWJsZS9SZW5lc2FzL1JYMjAwL3BvcnQuYwppbmRleCBlZTRlNWI2Li45NzU3MjJmIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9SZW5lc2FzL1JYMjAwL3BvcnQuYworKysgYi9wb3J0YWJsZS9SZW5lc2FzL1JYMjAwL3BvcnQuYwpAQCAtMjYsOCArMjYsOCBAQAogICovDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLSogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFibGUuaCBmb3IgdGhlIFJYMjAwIHBvcnQuDQotKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyAqIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBSWDIwMCBwb3J0Lg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogU2NoZWR1bGVyIGluY2x1ZGVzLiAqLw0KICNpbmNsdWRlICJGcmVlUlRPUy5oIg0KQEAgLTQyLDE0ICs0MiwxNCBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGFza3Mgc2hvdWxkIHN0YXJ0IHdpdGggaW50ZXJydXB0cyBlbmFibGVkIGFuZCBpbiBTdXBlcnZpc29yIG1vZGUsIHRoZXJlZm9yZQ0KLSAqIFBTVyBpcyBzZXQgd2l0aCBVIGFuZCBJIHNldCwgYW5kIFBNIGFuZCBJUEwgY2xlYXIuICovDQotI2RlZmluZSBwb3J0SU5JVElBTF9QU1cgICAgKCAoIFN0YWNrVHlwZV90ICkgMHgwMDAzMDAwMCApDQorUFNXIGlzIHNldCB3aXRoIFUgYW5kIEkgc2V0LCBhbmQgUE0gYW5kIElQTCBjbGVhci4gKi8NCisjZGVmaW5lIHBvcnRJTklUSUFMX1BTVyAgICAgKCAoIFN0YWNrVHlwZV90ICkgMHgwMDAzMDAwMCApDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGhlIGZvbGxvd2luZyBsaW5lcyBhcmUgdG8gZW5zdXJlIHZTb2Z0d2FyZUludGVycnVwdEVudHJ5IGNhbiBiZSByZWZlcmVuY2VkLA0KLSAqIGFuZCB0aGVyZWZvcmUgaW5zdGFsbGVkIGluIHRoZSB2ZWN0b3IgdGFibGUsIHdoZW4gdGhlIEZyZWVSVE9TIGNvZGUgaXMgYnVpbHQNCi0gKiBhcyBhIGxpYnJhcnkuICovDQorIGFuZCB0aGVyZWZvcmUgaW5zdGFsbGVkIGluIHRoZSB2ZWN0b3IgdGFibGUsIHdoZW4gdGhlIEZyZWVSVE9TIGNvZGUgaXMgYnVpbHQNCithcyBhIGxpYnJhcnkuICovDQogZXh0ZXJuIEJhc2VUeXBlX3QgdlNvZnR3YXJlSW50ZXJydXB0RW50cnk7DQogY29uc3QgQmFzZVR5cGVfdCAqIHBfdlNvZnR3YXJlSW50ZXJydXB0RW50cnkgPSAmdlNvZnR3YXJlSW50ZXJydXB0RW50cnk7DQogDQpAQCAtNzksOCArNzksOCBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGhpcyBpcyBhY2Nlc3NlZCBieSB0aGUgaW5saW5lIGFzc2VtYmxlciBmdW5jdGlvbnMgc28gaXMgZmlsZSBzY29wZSBmb3INCi0gKiBjb252ZW5pZW5jZS4gKi8NCi1leHRlcm4gdm9pZCAqIHB4Q3VycmVudFRDQjsNCitjb252ZW5pZW5jZS4gKi8NCitleHRlcm4gdm9pZCAqcHhDdXJyZW50VENCOw0KIGV4dGVybiB2b2lkIHZUYXNrU3dpdGNoQ29udGV4dCggdm9pZCApOw0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KQEAgLTg4LDI0MyArODgsMjM3IEBACiAvKg0KICAqIFNlZSBoZWFkZXIgZmlsZSBmb3IgZGVzY3JpcHRpb24uDQogICovDQotU3RhY2tUeXBlX3QgKiBweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICogcHhUb3BPZlN0YWNrLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYXNrRnVuY3Rpb25fdCBweENvZGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KK1N0YWNrVHlwZV90ICpweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICpweFRvcE9mU3RhY2ssIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzICkNCiB7DQotICAgIC8qIE9mZnNldCB0byBlbmQgdXAgb24gOCBieXRlIGJvdW5kYXJ5LiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJLyogT2Zmc2V0IHRvIGVuZCB1cCBvbiA4IGJ5dGUgYm91bmRhcnkuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBSMCBpcyBub3QgaW5jbHVkZWQgYXMgaXQgaXMgdGhlIHN0YWNrIHBvaW50ZXIuICovDQorCS8qIFIwIGlzIG5vdCBpbmNsdWRlZCBhcyBpdCBpcyB0aGUgc3RhY2sgcG9pbnRlci4gKi8NCisJKnB4VG9wT2ZTdGFjayA9IDB4MDA7DQorCXB4VG9wT2ZTdGFjay0tOw0KICAgICAqcHhUb3BPZlN0YWNrID0gMHgwMDsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAweDAwOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IHBvcnRJTklUSUFMX1BTVzsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHhDb2RlOw0KKwlweFRvcE9mU3RhY2stLTsNCisgCSpweFRvcE9mU3RhY2sgPSBwb3J0SU5JVElBTF9QU1c7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB4Q29kZTsNCiANCi0gICAgLyogV2hlbiBkZWJ1Z2dpbmcgaXQgY2FuIGJlIHVzZWZ1bCBpZiBldmVyeSByZWdpc3RlciBpcyBzZXQgdG8gYSBrbm93bg0KLSAgICAgKiB2YWx1ZS4gIE90aGVyd2lzZSBjb2RlIHNwYWNlIGNhbiBiZSBzYXZlZCBieSBqdXN0IHNldHRpbmcgdGhlIHJlZ2lzdGVycw0KLSAgICAgKiB0aGF0IG5lZWQgdG8gYmUgc2V0LiAqLw0KLSAgICAjaWZkZWYgVVNFX0ZVTExfUkVHSVNURVJfSU5JVElBTElTQVRJT04NCi0gICAgICAgIHsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHgxMjM0NTY3ODsgLyogcjE1LiAqLw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweGFhYWFiYmJiOw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweGRkZGRkZGRkOw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweGNjY2NjY2NjOw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweGJiYmJiYmJiOw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweGFhYWFhYWFhOw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweDk5OTk5OTk5Ow0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweDg4ODg4ODg4Ow0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweDc3Nzc3Nzc3Ow0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweDY2NjY2NjY2Ow0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweDU1NTU1NTU1Ow0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweDQ0NDQ0NDQ0Ow0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweDMzMzMzMzMzOw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweDIyMjIyMjIyOw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgfQ0KLSAgICAjZWxzZSAvKiBpZmRlZiBVU0VfRlVMTF9SRUdJU1RFUl9JTklUSUFMSVNBVElPTiAqLw0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjayAtPSAxNTsNCi0gICAgICAgIH0NCi0gICAgI2VuZGlmIC8qIGlmZGVmIFVTRV9GVUxMX1JFR0lTVEVSX0lOSVRJQUxJU0FUSU9OICovDQorCS8qIFdoZW4gZGVidWdnaW5nIGl0IGNhbiBiZSB1c2VmdWwgaWYgZXZlcnkgcmVnaXN0ZXIgaXMgc2V0IHRvIGEga25vd24NCisJdmFsdWUuICBPdGhlcndpc2UgY29kZSBzcGFjZSBjYW4gYmUgc2F2ZWQgYnkganVzdCBzZXR0aW5nIHRoZSByZWdpc3RlcnMNCisJdGhhdCBuZWVkIHRvIGJlIHNldC4gKi8NCisJI2lmZGVmIFVTRV9GVUxMX1JFR0lTVEVSX0lOSVRJQUxJU0FUSU9ODQorCXsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4MTIzNDU2Nzg7CS8qIHIxNS4gKi8NCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4YWFhYWJiYmI7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweGRkZGRkZGRkOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHhjY2NjY2NjYzsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4YmJiYmJiYmI7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweGFhYWFhYWFhOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHg5OTk5OTk5OTsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4ODg4ODg4ODg7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweDc3Nzc3Nzc3Ow0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHg2NjY2NjY2NjsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4NTU1NTU1NTU7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweDQ0NDQ0NDQ0Ow0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHgzMzMzMzMzMzsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4MjIyMjIyMjI7DQorCQlweFRvcE9mU3RhY2stLTsNCisJfQ0KKwkjZWxzZQ0KKwl7DQorCQlweFRvcE9mU3RhY2sgLT0gMTU7DQorCX0NCisJI2VuZGlmDQogDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHZQYXJhbWV0ZXJzOyAvKiBSMSAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MTIzNDU2Nzg7ICAgICAgICAgICAgICAgICAgIC8qIEFjY3VtdWxhdG9yLiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4ODc2NTQzMjE7ICAgICAgICAgICAgICAgICAgIC8qIEFjY3VtdWxhdG9yLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB2UGFyYW1ldGVyczsgLyogUjEgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDEyMzQ1Njc4OyAvKiBBY2N1bXVsYXRvci4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDg3NjU0MzIxOyAvKiBBY2N1bXVsYXRvci4gKi8NCiANCi0gICAgcmV0dXJuIHB4VG9wT2ZTdGFjazsNCisJcmV0dXJuIHB4VG9wT2ZTdGFjazsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogQmFzZVR5cGVfdCB4UG9ydFN0YXJ0U2NoZWR1bGVyKCB2b2lkICkNCiB7DQotICAgIGV4dGVybiB2b2lkIHZBcHBsaWNhdGlvblNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2QXBwbGljYXRpb25TZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICk7DQogDQotICAgIC8qIFVzZSBweEN1cnJlbnRUQ0IganVzdCBzbyBpdCBkb2VzIG5vdCBnZXQgb3B0aW1pc2VkIGF3YXkuICovDQotICAgIGlmKCBweEN1cnJlbnRUQ0IgIT0gTlVMTCApDQotICAgIHsNCi0gICAgICAgIC8qIENhbGwgYW4gYXBwbGljYXRpb24gZnVuY3Rpb24gdG8gc2V0IHVwIHRoZSB0aW1lciB0aGF0IHdpbGwgZ2VuZXJhdGUgdGhlDQotICAgICAgICAgKiB0aWNrIGludGVycnVwdC4gIFRoaXMgd2F5IHRoZSBhcHBsaWNhdGlvbiBjYW4gZGVjaWRlIHdoaWNoIHBlcmlwaGVyYWwgdG8NCi0gICAgICAgICAqIHVzZS4gIEEgZGVtbyBhcHBsaWNhdGlvbiBpcyBwcm92aWRlZCB0byBzaG93IGEgc3VpdGFibGUgZXhhbXBsZS4gKi8NCi0gICAgICAgIHZBcHBsaWNhdGlvblNldHVwVGltZXJJbnRlcnJ1cHQoKTsNCisJLyogVXNlIHB4Q3VycmVudFRDQiBqdXN0IHNvIGl0IGRvZXMgbm90IGdldCBvcHRpbWlzZWQgYXdheS4gKi8NCisJaWYoIHB4Q3VycmVudFRDQiAhPSBOVUxMICkNCisJew0KKwkJLyogQ2FsbCBhbiBhcHBsaWNhdGlvbiBmdW5jdGlvbiB0byBzZXQgdXAgdGhlIHRpbWVyIHRoYXQgd2lsbCBnZW5lcmF0ZSB0aGUNCisJCXRpY2sgaW50ZXJydXB0LiAgVGhpcyB3YXkgdGhlIGFwcGxpY2F0aW9uIGNhbiBkZWNpZGUgd2hpY2ggcGVyaXBoZXJhbCB0bw0KKwkJdXNlLiAgQSBkZW1vIGFwcGxpY2F0aW9uIGlzIHByb3ZpZGVkIHRvIHNob3cgYSBzdWl0YWJsZSBleGFtcGxlLiAqLw0KKwkJdkFwcGxpY2F0aW9uU2V0dXBUaW1lckludGVycnVwdCgpOw0KIA0KLSAgICAgICAgLyogRW5hYmxlIHRoZSBzb2Z0d2FyZSBpbnRlcnJ1cHQuICovDQotICAgICAgICBfSUVOKCBfSUNVX1NXSU5UICkgPSAxOw0KKwkJLyogRW5hYmxlIHRoZSBzb2Z0d2FyZSBpbnRlcnJ1cHQuICovDQorCQlfSUVOKCBfSUNVX1NXSU5UICkgPSAxOw0KIA0KLSAgICAgICAgLyogRW5zdXJlIHRoZSBzb2Z0d2FyZSBpbnRlcnJ1cHQgaXMgY2xlYXIuICovDQotICAgICAgICBfSVIoIF9JQ1VfU1dJTlQgKSA9IDA7DQorCQkvKiBFbnN1cmUgdGhlIHNvZnR3YXJlIGludGVycnVwdCBpcyBjbGVhci4gKi8NCisJCV9JUiggX0lDVV9TV0lOVCApID0gMDsNCiANCi0gICAgICAgIC8qIEVuc3VyZSB0aGUgc29mdHdhcmUgaW50ZXJydXB0IGlzIHNldCB0byB0aGUga2VybmVsIHByaW9yaXR5LiAqLw0KLSAgICAgICAgX0lQUiggX0lDVV9TV0lOVCApID0gY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWTsNCisJCS8qIEVuc3VyZSB0aGUgc29mdHdhcmUgaW50ZXJydXB0IGlzIHNldCB0byB0aGUga2VybmVsIHByaW9yaXR5LiAqLw0KKwkJX0lQUiggX0lDVV9TV0lOVCApID0gY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWTsNCiANCi0gICAgICAgIC8qIFN0YXJ0IHRoZSBmaXJzdCB0YXNrLiAqLw0KLSAgICAgICAgcHJ2U3RhcnRGaXJzdFRhc2soKTsNCi0gICAgfQ0KKwkJLyogU3RhcnQgdGhlIGZpcnN0IHRhc2suICovDQorCQlwcnZTdGFydEZpcnN0VGFzaygpOw0KKwl9DQogDQotICAgIC8qIEp1c3QgdG8gbWFrZSBzdXJlIHRoZSBmdW5jdGlvbiBpcyBub3Qgb3B0aW1pc2VkIGF3YXkuICovDQotICAgICggdm9pZCApIHZTb2Z0d2FyZUludGVycnVwdElTUigpOw0KKwkvKiBKdXN0IHRvIG1ha2Ugc3VyZSB0aGUgZnVuY3Rpb24gaXMgbm90IG9wdGltaXNlZCBhd2F5LiAqLw0KKwkoIHZvaWQgKSB2U29mdHdhcmVJbnRlcnJ1cHRJU1IoKTsNCiANCi0gICAgLyogU2hvdWxkIG5vdCBnZXQgaGVyZS4gKi8NCi0gICAgcmV0dXJuIHBkRkFJTDsNCisJLyogU2hvdWxkIG5vdCBnZXQgaGVyZS4gKi8NCisJcmV0dXJuIHBkRkFJTDsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogI3ByYWdtYSBpbmxpbmVfYXNtIHBydlN0YXJ0Rmlyc3RUYXNrDQogc3RhdGljIHZvaWQgcHJ2U3RhcnRGaXJzdFRhc2soIHZvaWQgKQ0KIHsNCi0gICAgLyogV2hlbiBzdGFydGluZyB0aGUgc2NoZWR1bGVyIHRoZXJlIGlzIG5vdGhpbmcgdGhhdCBuZWVkcyBtb3ZpbmcgdG8gdGhlDQotICAgICAqIGludGVycnVwdCBzdGFjayBiZWNhdXNlIHRoZSBmdW5jdGlvbiBpcyBub3QgY2FsbGVkIGZyb20gYW4gaW50ZXJydXB0Lg0KLSAgICAgKiBKdXN0IGVuc3VyZSB0aGUgY3VycmVudCBzdGFjayBpcyB0aGUgdXNlciBzdGFjay4gKi8NCi0gICAgU0VUUFNXIFUNCisJLyogV2hlbiBzdGFydGluZyB0aGUgc2NoZWR1bGVyIHRoZXJlIGlzIG5vdGhpbmcgdGhhdCBuZWVkcyBtb3ZpbmcgdG8gdGhlDQorCWludGVycnVwdCBzdGFjayBiZWNhdXNlIHRoZSBmdW5jdGlvbiBpcyBub3QgY2FsbGVkIGZyb20gYW4gaW50ZXJydXB0Lg0KKwlKdXN0IGVuc3VyZSB0aGUgY3VycmVudCBzdGFjayBpcyB0aGUgdXNlciBzdGFjay4gKi8NCisJU0VUUFNXCVUNCiANCi0gICAgLyogT2J0YWluIHRoZSBsb2NhdGlvbiBvZiB0aGUgc3RhY2sgYXNzb2NpYXRlZCB3aXRoIHdoaWNoIGV2ZXIgdGFzaw0KLSAgICAgKiBweEN1cnJlbnRUQ0IgaXMgY3VycmVudGx5IHBvaW50aW5nIHRvLiAqLw0KLSAgICBNT1YuTCAgICMgX3B4Q3VycmVudFRDQiwgUjE1DQotICAgICAgICBNT1YuTFsgUjE1IF0sIFIxNQ0KLSAgICAgICAgTU9WLkxbIFIxNSBdLCBSMA0KKwkvKiBPYnRhaW4gdGhlIGxvY2F0aW9uIG9mIHRoZSBzdGFjayBhc3NvY2lhdGVkIHdpdGggd2hpY2ggZXZlciB0YXNrDQorCXB4Q3VycmVudFRDQiBpcyBjdXJyZW50bHkgcG9pbnRpbmcgdG8uICovDQorCU1PVi5MCSNfcHhDdXJyZW50VENCLCBSMTUNCisJTU9WLkwJW1IxNV0sIFIxNQ0KKwlNT1YuTAlbUjE1XSwgUjANCiANCi0gICAgLyogUmVzdG9yZSB0aGUgcmVnaXN0ZXJzIGZyb20gdGhlIHN0YWNrIG9mIHRoZSB0YXNrIHBvaW50ZWQgdG8gYnkNCi0gICAgICogcHhDdXJyZW50VENCLiAqLw0KLSAgICBQT1AgUjE1DQotICAgIE1WVEFDTE8gUjE1ICAgLyogQWNjdW11bGF0b3IgbG93IDMyIGJpdHMuICovDQotICAgIFBPUCBSMTUNCi0gICAgTVZUQUNISSBSMTUgICAvKiBBY2N1bXVsYXRvciBoaWdoIDMyIGJpdHMuICovDQotICAgIFBPUE0gUjEgLSBSMTUgLyogUjEgdG8gUjE1IC0gUjAgaXMgbm90IGluY2x1ZGVkIGFzIGl0IGlzIHRoZSBTUC4gKi8NCi0gICAgUlRFICAgICAgICAgICAvKiBUaGlzIHBvcHMgdGhlIHJlbWFpbmluZyByZWdpc3RlcnMuICovDQorCS8qIFJlc3RvcmUgdGhlIHJlZ2lzdGVycyBmcm9tIHRoZSBzdGFjayBvZiB0aGUgdGFzayBwb2ludGVkIHRvIGJ5DQorCXB4Q3VycmVudFRDQi4gKi8NCisgICAgUE9QCQlSMTUNCisgICAgTVZUQUNMTwlSMTUgCQkvKiBBY2N1bXVsYXRvciBsb3cgMzIgYml0cy4gKi8NCisgICAgUE9QCQlSMTUNCisgICAgTVZUQUNISQlSMTUgCQkvKiBBY2N1bXVsYXRvciBoaWdoIDMyIGJpdHMuICovDQorICAgIFBPUE0JUjEtUjE1IAkJLyogUjEgdG8gUjE1IC0gUjAgaXMgbm90IGluY2x1ZGVkIGFzIGl0IGlzIHRoZSBTUC4gKi8NCisgICAgUlRFCQkJCQkvKiBUaGlzIHBvcHMgdGhlIHJlbWFpbmluZyByZWdpc3RlcnMuICovDQogICAgIE5PUA0KLSAgICAgICAgTk9QDQorICAgIE5PUA0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAjcHJhZ21hIGludGVycnVwdCAoIHZUaWNrSVNSKCB2ZWN0ID0gX1ZFQ1QoIGNvbmZpZ1RJQ0tfVkVDVE9SICksIGVuYWJsZSApICkNCiB2b2lkIHZUaWNrSVNSKCB2b2lkICkNCiB7DQotICAgIC8qIEluY3JlbWVudCB0aGUgdGljaywgYW5kIHBlcmZvcm0gYW55IHByb2Nlc3NpbmcgdGhlIG5ldyB0aWNrIHZhbHVlDQotICAgICAqIG5lY2Vzc2l0YXRlcy4gKi8NCi0gICAgc2V0X2lwbCggY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICk7DQotICAgIHsNCi0gICAgICAgIGlmKCB4VGFza0luY3JlbWVudFRpY2soKSAhPSBwZEZBTFNFICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICB0YXNrWUlFTEQoKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLQ0KLSAgICBzZXRfaXBsKCBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZICk7DQorCS8qIEluY3JlbWVudCB0aGUgdGljaywgYW5kIHBlcmZvcm0gYW55IHByb2Nlc3NpbmcgdGhlIG5ldyB0aWNrIHZhbHVlDQorCW5lY2Vzc2l0YXRlcy4gKi8NCisJc2V0X2lwbCggY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICk7DQorCXsNCisJCWlmKCB4VGFza0luY3JlbWVudFRpY2soKSAhPSBwZEZBTFNFICkNCisJCXsNCisJCQl0YXNrWUlFTEQoKTsNCisJCX0NCisJfQ0KKwlzZXRfaXBsKCBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZICk7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlNvZnR3YXJlSW50ZXJydXB0SVNSKCB2b2lkICkNCiB7DQotICAgIHBydllpZWxkSGFuZGxlcigpOw0KKwlwcnZZaWVsZEhhbmRsZXIoKTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogI3ByYWdtYSBpbmxpbmVfYXNtIHBydllpZWxkSGFuZGxlcg0KIHN0YXRpYyB2b2lkIHBydllpZWxkSGFuZGxlciggdm9pZCApDQogew0KLSAgICAvKiBSZS1lbmFibGUgaW50ZXJydXB0cy4gKi8NCi0gICAgU0VUUFNXIEkNCisJLyogUmUtZW5hYmxlIGludGVycnVwdHMuICovDQorCVNFVFBTVwlJDQogDQotICAgIC8qIE1vdmUgdGhlIGRhdGEgdGhhdCB3YXMgYXV0b21hdGljYWxseSBwdXNoZWQgb250byB0aGUgaW50ZXJydXB0IHN0YWNrIHdoZW4NCi0gICAgICogdGhlIGludGVycnVwdCBvY2N1cnJlZCBmcm9tIHRoZSBpbnRlcnJ1cHQgc3RhY2sgdG8gdGhlIHVzZXIgc3RhY2suDQotICAgICAqDQotICAgICAqIFIxNSBpcyBzYXZlZCBiZWZvcmUgaXQgaXMgY2xvYmJlcmVkLiAqLw0KLSAgICBQVVNILkwgUjE1DQorCS8qIE1vdmUgdGhlIGRhdGEgdGhhdCB3YXMgYXV0b21hdGljYWxseSBwdXNoZWQgb250byB0aGUgaW50ZXJydXB0IHN0YWNrIHdoZW4NCisJdGhlIGludGVycnVwdCBvY2N1cnJlZCBmcm9tIHRoZSBpbnRlcnJ1cHQgc3RhY2sgdG8gdGhlIHVzZXIgc3RhY2suDQogDQotICAgIC8qIFJlYWQgdGhlIHVzZXIgc3RhY2sgcG9pbnRlci4gKi8NCi0gICAgTVZGQyBVU1AsIFIxNQ0KKwlSMTUgaXMgc2F2ZWQgYmVmb3JlIGl0IGlzIGNsb2JiZXJlZC4gKi8NCisJUFVTSC5MCVIxNQ0KIA0KLSAgICAvKiBNb3ZlIHRoZSBhZGRyZXNzIGRvd24gdG8gdGhlIGRhdGEgYmVpbmcgbW92ZWQuICovDQotICAgICAgICAgU1VCICAgICAjIDEyLCBSMTUNCi0gICAgTVZUQyBSMTUsIFVTUA0KKwkvKiBSZWFkIHRoZSB1c2VyIHN0YWNrIHBvaW50ZXIuICovDQorCU1WRkMJVVNQLCBSMTUNCiANCi0gICAgLyogQ29weSB0aGUgZGF0YSBhY3Jvc3MuICovDQotICAgICAgICAgTU9WLkxbIFIwIF0sIFsgUjE1IF07DQotICAgIFIxNQ0KKwkvKiBNb3ZlIHRoZSBhZGRyZXNzIGRvd24gdG8gdGhlIGRhdGEgYmVpbmcgbW92ZWQuICovDQorCVNVQgkJIzEyLCBSMTUNCisJTVZUQwlSMTUsIFVTUA0KIA0KLSAgICBNT1YuTCAgIDRbIFIwIF0sIDRbIFIxNSBdOw0KLSAgICBQQw0KLSAgICBNT1YuTCAgIDhbIFIwIF0sIDhbIFIxNSBdOw0KLSAgICBQU1cNCisJLyogQ29weSB0aGUgZGF0YSBhY3Jvc3MuICovDQorCU1PVi5MCVsgUjAgXSwgWyBSMTUgXSA7IFIxNQ0KKwlNT1YuTCAJNFsgUjAgXSwgNFsgUjE1IF0gIDsgUEMNCisJTU9WLkwJOFsgUjAgXSwgOFsgUjE1IF0gIDsgUFNXDQogDQotICAgIC8qIE1vdmUgdGhlIGludGVycnVwdCBzdGFjayBwb2ludGVyIHRvIGl0cyBuZXcgY29ycmVjdCBwb3NpdGlvbi4gKi8NCi0gICAgICAgIEFERCAjIDEyLCBSMA0KKwkvKiBNb3ZlIHRoZSBpbnRlcnJ1cHQgc3RhY2sgcG9pbnRlciB0byBpdHMgbmV3IGNvcnJlY3QgcG9zaXRpb24uICovDQorCUFERAkjMTIsIFIwDQogDQotICAgIC8qIEFsbCB0aGUgcmVzdCBvZiB0aGUgcmVnaXN0ZXJzIGFyZSBzYXZlZCBkaXJlY3RseSB0byB0aGUgdXNlciBzdGFjay4gKi8NCi0gICAgU0VUUFNXIFUNCisJLyogQWxsIHRoZSByZXN0IG9mIHRoZSByZWdpc3RlcnMgYXJlIHNhdmVkIGRpcmVjdGx5IHRvIHRoZSB1c2VyIHN0YWNrLiAqLw0KKwlTRVRQU1cJVQ0KIA0KLSAgICAvKiBTYXZlIHRoZSByZXN0IG9mIHRoZSBnZW5lcmFsIHJlZ2lzdGVycyAoUjE1IGhhcyBiZWVuIHNhdmVkIGFscmVhZHkpLiAqLw0KLSAgICBQVVNITSBSMSAtIFIxNA0KKwkvKiBTYXZlIHRoZSByZXN0IG9mIHRoZSBnZW5lcmFsIHJlZ2lzdGVycyAoUjE1IGhhcyBiZWVuIHNhdmVkIGFscmVhZHkpLiAqLw0KKwlQVVNITQlSMS1SMTQNCiANCi0gICAgLyogU2F2ZSB0aGUgYWNjdW11bGF0b3IuICovDQotICAgIE1WRkFDSEkgUjE1DQotICAgICAgICBQVVNILkwgUjE1DQotICAgIE1WRkFDTUkgUjE1Ow0KLSAgICBNaWRkbGUgb3JkZXIgd29yZC4NCi0gICAgICAgU0hMTCAgICAjIDE2LCBSMTU7DQotICAgIFNoaWZ0ZWQgbGVmdCBhcyBpdCBpcyByZXN0b3JlZCB0byB0aGUgbG93IG9yZGVyIHdvcmQuDQotICAgICAgIFBVU0guTCBSMTUNCisJLyogU2F2ZSB0aGUgYWNjdW11bGF0b3IuICovDQorCU1WRkFDSEkJUjE1DQorCVBVU0guTAlSMTUNCisJTVZGQUNNSQlSMTUJOyBNaWRkbGUgb3JkZXIgd29yZC4NCisJU0hMTAkjMTYsIFIxNSA7IFNoaWZ0ZWQgbGVmdCBhcyBpdCBpcyByZXN0b3JlZCB0byB0aGUgbG93IG9yZGVyIHdvcmQuDQorCVBVU0guTAlSMTUNCiANCi0gICAgLyogU2F2ZSB0aGUgc3RhY2sgcG9pbnRlciB0byB0aGUgVENCLiAqLw0KLSAgICBNT1YuTCAgICMgX3B4Q3VycmVudFRDQiwgUjE1DQotICAgICAgICBNT1YuTFsgUjE1IF0sIFIxNQ0KLSAgICAgICAgTU9WLkwgUjAsIFsgUjE1IF0NCisJLyogU2F2ZSB0aGUgc3RhY2sgcG9pbnRlciB0byB0aGUgVENCLiAqLw0KKwlNT1YuTAkjX3B4Q3VycmVudFRDQiwgUjE1DQorCU1PVi5MCVsgUjE1IF0sIFIxNQ0KKwlNT1YuTAlSMCwgWyBSMTUgXQ0KIA0KLSAgICAvKiBFbnN1cmUgdGhlIGludGVycnVwdCBtYXNrIGlzIHNldCB0byB0aGUgc3lzY2FsbCBwcmlvcml0eSB3aGlsZSB0aGUga2VybmVsDQotICAgICAqIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGFjY2Vzc2VkLiAqLw0KLSAgICBNVlRJUEwgICMgY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZDQorCS8qIEVuc3VyZSB0aGUgaW50ZXJydXB0IG1hc2sgaXMgc2V0IHRvIHRoZSBzeXNjYWxsIHByaW9yaXR5IHdoaWxlIHRoZSBrZXJuZWwNCisJc3RydWN0dXJlcyBhcmUgYmVpbmcgYWNjZXNzZWQuICovDQorCU1WVElQTAkjY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZDQogDQotICAgIC8qIFNlbGVjdCB0aGUgbmV4dCB0YXNrIHRvIHJ1bi4gKi8NCi0gICAgQlNSLkEgX3ZUYXNrU3dpdGNoQ29udGV4dA0KKwkvKiBTZWxlY3QgdGhlIG5leHQgdGFzayB0byBydW4uICovDQorCUJTUi5BCV92VGFza1N3aXRjaENvbnRleHQNCiANCi0gICAgLyogUmVzZXQgdGhlIGludGVycnVwdCBtYXNrIGFzIG5vIG1vcmUgZGF0YSBzdHJ1Y3R1cmUgYWNjZXNzIGlzIHJlcXVpcmVkLiAqLw0KLSAgICBNVlRJUEwgICMgY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWQ0KKwkvKiBSZXNldCB0aGUgaW50ZXJydXB0IG1hc2sgYXMgbm8gbW9yZSBkYXRhIHN0cnVjdHVyZSBhY2Nlc3MgaXMgcmVxdWlyZWQuICovDQorCU1WVElQTAkjY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWQ0KIA0KLSAgICAvKiBMb2FkIHRoZSBzdGFjayBwb2ludGVyIG9mIHRoZSB0YXNrIHRoYXQgaXMgbm93IHNlbGVjdGVkIGFzIHRoZSBSdW5uaW5nDQotICAgICAqIHN0YXRlIHRhc2sgZnJvbSBpdHMgVENCLiAqLw0KLSAgICBNT1YuTCAgICMgX3B4Q3VycmVudFRDQiwgUjE1DQotICAgICAgICBNT1YuTFsgUjE1IF0sIFIxNQ0KLSAgICAgICAgTU9WLkxbIFIxNSBdLCBSMA0KKwkvKiBMb2FkIHRoZSBzdGFjayBwb2ludGVyIG9mIHRoZSB0YXNrIHRoYXQgaXMgbm93IHNlbGVjdGVkIGFzIHRoZSBSdW5uaW5nDQorCXN0YXRlIHRhc2sgZnJvbSBpdHMgVENCLiAqLw0KKwlNT1YuTAkjX3B4Q3VycmVudFRDQixSMTUNCisJTU9WLkwJWyBSMTUgXSwgUjE1DQorCU1PVi5MCVsgUjE1IF0sIFIwDQogDQotICAgIC8qIFJlc3RvcmUgdGhlIGNvbnRleHQgb2YgdGhlIG5ldyB0YXNrLiAgVGhlIFBTVyAoUHJvZ3JhbSBTdGF0dXMgV29yZCkgYW5kDQotICAgICAqIFBDIHdpbGwgYmUgcG9wcGVkIGJ5IHRoZSBSVEUgaW5zdHJ1Y3Rpb24uICovDQotICAgIFBPUCBSMTUNCi0gICAgTVZUQUNMTyBSMTUNCi0gICAgUE9QIFIxNQ0KLSAgICBNVlRBQ0hJIFIxNQ0KLSAgICBQT1BNIFIxIC0gUjE1DQotICAgIFJURQ0KLSAgICBOT1ANCi0gICAgICAgIE5PUA0KKwkvKiBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBuZXcgdGFzay4gIFRoZSBQU1cgKFByb2dyYW0gU3RhdHVzIFdvcmQpIGFuZA0KKwlQQyB3aWxsIGJlIHBvcHBlZCBieSB0aGUgUlRFIGluc3RydWN0aW9uLiAqLw0KKwlQT1AJCVIxNQ0KKwlNVlRBQ0xPCVIxNQ0KKwlQT1AJCVIxNQ0KKwlNVlRBQ0hJCVIxNQ0KKwlQT1BNCVIxLVIxNQ0KKwlSVEUNCisJTk9QDQorCU5PUA0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0RW5kU2NoZWR1bGVyKCB2b2lkICkNCiB7DQotICAgIC8qIE5vdCBpbXBsZW1lbnRlZCBpbiBwb3J0cyB3aGVyZSB0aGVyZSBpcyBub3RoaW5nIHRvIHJldHVybiB0by4NCi0gICAgICogQXJ0aWZpY2lhbGx5IGZvcmNlIGFuIGFzc2VydC4gKi8NCi0gICAgY29uZmlnQVNTRVJUKCBweEN1cnJlbnRUQ0IgPT0gTlVMTCApOw0KKwkvKiBOb3QgaW1wbGVtZW50ZWQgaW4gcG9ydHMgd2hlcmUgdGhlcmUgaXMgbm90aGluZyB0byByZXR1cm4gdG8uDQorCUFydGlmaWNpYWxseSBmb3JjZSBhbiBhc3NlcnQuICovDQorCWNvbmZpZ0FTU0VSVCggcHhDdXJyZW50VENCID09IE5VTEwgKTsNCiANCi0gICAgLyogVGhlIGZvbGxvd2luZyBsaW5lIGlzIGp1c3QgdG8gcHJldmVudCB0aGUgc3ltYm9sIGdldHRpbmcgb3B0aW1pc2VkIGF3YXkuICovDQotICAgICggdm9pZCApIHZUYXNrU3dpdGNoQ29udGV4dCgpOw0KKwkvKiBUaGUgZm9sbG93aW5nIGxpbmUgaXMganVzdCB0byBwcmV2ZW50IHRoZSBzeW1ib2wgZ2V0dGluZyBvcHRpbWlzZWQgYXdheS4gKi8NCisJKCB2b2lkICkgdlRhc2tTd2l0Y2hDb250ZXh0KCk7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKw0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL1JlbmVzYXMvUlgyMDAvcG9ydG1hY3JvLmggYi9wb3J0YWJsZS9SZW5lc2FzL1JYMjAwL3BvcnRtYWNyby5oCmluZGV4IGMxYTU4YjUuLjRhYmFiMWMgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL1JlbmVzYXMvUlgyMDAvcG9ydG1hY3JvLmgKKysrIGIvcG9ydGFibGUvUmVuZXNhcy9SWDIwMC9wb3J0bWFjcm8uaApAQCAtMjcsMTQgKzI3LDE0IEBACiANCiANCiAjaWZuZGVmIFBPUlRNQUNST19IDQotICAgICNkZWZpbmUgUE9SVE1BQ1JPX0gNCisjZGVmaW5lIFBPUlRNQUNST19IDQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgZXh0ZXJuICJDIiB7DQotICAgICNlbmRpZg0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KIA0KIC8qIEhhcmR3YXJlIHNwZWNpZmljcy4gKi8NCi0gICAgI2luY2x1ZGUgIm1hY2hpbmUuaCINCisjaW5jbHVkZSAibWFjaGluZS5oIg0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgKiBQb3J0IHNwZWNpZmljIGRlZmluaXRpb25zLg0KQEAgLTQ3LDk0ICs0Nyw5NSBAQAogICovDQogDQogLyogVHlwZSBkZWZpbml0aW9ucyAtIHRoZXNlIGFyZSBhIGJpdCBsZWdhY3kgYW5kIG5vdCByZWFsbHkgdXNlZCBub3csIG90aGVyIHRoYW4NCi0gKiBwb3J0U1RBQ0tfVFlQRSBhbmQgcG9ydEJBU0VfVFlQRS4gKi8NCi0gICAgI2RlZmluZSBwb3J0Q0hBUiAgICAgICAgICBjaGFyDQotICAgICNkZWZpbmUgcG9ydEZMT0FUICAgICAgICAgZmxvYXQNCi0gICAgI2RlZmluZSBwb3J0RE9VQkxFICAgICAgICBkb3VibGUNCi0gICAgI2RlZmluZSBwb3J0TE9ORyAgICAgICAgICBsb25nDQotICAgICNkZWZpbmUgcG9ydFNIT1JUICAgICAgICAgc2hvcnQNCi0gICAgI2RlZmluZSBwb3J0U1RBQ0tfVFlQRSAgICB1aW50MzJfdA0KLSAgICAjZGVmaW5lIHBvcnRCQVNFX1RZUEUgICAgIGxvbmcNCitwb3J0U1RBQ0tfVFlQRSBhbmQgcG9ydEJBU0VfVFlQRS4gKi8NCisjZGVmaW5lIHBvcnRDSEFSCQljaGFyDQorI2RlZmluZSBwb3J0RkxPQVQJCWZsb2F0DQorI2RlZmluZSBwb3J0RE9VQkxFCQlkb3VibGUNCisjZGVmaW5lIHBvcnRMT05HCQlsb25nDQorI2RlZmluZSBwb3J0U0hPUlQJCXNob3J0DQorI2RlZmluZSBwb3J0U1RBQ0tfVFlQRQl1aW50MzJfdA0KKyNkZWZpbmUgcG9ydEJBU0VfVFlQRQlsb25nDQogDQotICAgIHR5cGVkZWYgcG9ydFNUQUNLX1RZUEUgICBTdGFja1R5cGVfdDsNCi0gICAgdHlwZWRlZiBsb25nICAgICAgICAgICAgIEJhc2VUeXBlX3Q7DQotICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyAgICBVQmFzZVR5cGVfdDsNCit0eXBlZGVmIHBvcnRTVEFDS19UWVBFIFN0YWNrVHlwZV90Ow0KK3R5cGVkZWYgbG9uZyBCYXNlVHlwZV90Ow0KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBVQmFzZVR5cGVfdDsNCiANCi0gICAgI2lmICggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCi0gICAgICAgIHR5cGVkZWYgdWludDE2X3QgICAgIFRpY2tUeXBlX3Q7DQotICAgICAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgICAgICAgICAgICggVGlja1R5cGVfdCApIDB4ZmZmZg0KLSAgICAjZWxzZQ0KLSAgICAgICAgdHlwZWRlZiB1aW50MzJfdCAgICAgVGlja1R5cGVfdDsNCi0gICAgICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAgICAgICAgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQorI2lmKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KKwl0eXBlZGVmIHVpbnQxNl90IFRpY2tUeXBlX3Q7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIFRpY2tUeXBlX3QgKSAweGZmZmYNCisjZWxzZQ0KKwl0eXBlZGVmIHVpbnQzMl90IFRpY2tUeXBlX3Q7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwNCiANCi0vKiAzMi1iaXQgdGljayB0eXBlIG9uIGEgMzItYml0IGFyY2hpdGVjdHVyZSwgc28gcmVhZHMgb2YgdGhlIHRpY2sgY291bnQgZG8NCi0gKiBub3QgbmVlZCB0byBiZSBndWFyZGVkIHdpdGggYSBjcml0aWNhbCBzZWN0aW9uLiAqLw0KLSAgICAgICAgI2RlZmluZSBwb3J0VElDS19UWVBFX0lTX0FUT01JQyAgICAxDQotICAgICNlbmRpZg0KKwkvKiAzMi1iaXQgdGljayB0eXBlIG9uIGEgMzItYml0IGFyY2hpdGVjdHVyZSwgc28gcmVhZHMgb2YgdGhlIHRpY2sgY291bnQgZG8NCisJbm90IG5lZWQgdG8gYmUgZ3VhcmRlZCB3aXRoIGEgY3JpdGljYWwgc2VjdGlvbi4gKi8NCisJI2RlZmluZSBwb3J0VElDS19UWVBFX0lTX0FUT01JQyAxDQorI2VuZGlmDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogSGFyZHdhcmUgc3BlY2lmaWNzLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVCAgICA4ICAgICAgICAgLyogQ291bGQgbWFrZSBmb3VyLCBhY2NvcmRpbmcgdG8gbWFudWFsLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEggICAgICAtMQ0KLSAgICAjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUyAgICAoICggVGlja1R5cGVfdCApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KLSAgICAjZGVmaW5lIHBvcnROT1AoKSAgICBub3AoKQ0KKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UCQkJCTgJLyogQ291bGQgbWFrZSBmb3VyLCBhY2NvcmRpbmcgdG8gbWFudWFsLiAqLw0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJCQktMQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TCQkJCSggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQorI2RlZmluZSBwb3J0Tk9QKCkJCQkJCQlub3AoKQ0KIA0KLSAgICAjcHJhZ21hIGlubGluZV9hc20gdlBvcnRZaWVsZA0KLSAgICBzdGF0aWMgdm9pZCB2UG9ydFlpZWxkKCB2b2lkICkNCi0gICAgew0KLSAgICAgICAgLyogU2F2ZSBjbG9iYmVyZWQgcmVnaXN0ZXIgLSBtYXkgbm90IGFjdHVhbGx5IGJlIG5lY2Vzc2FyeSBpZiBpbmxpbmUgYXNtDQotICAgICAgICAgKiBmdW5jdGlvbnMgYXJlIGNvbnNpZGVyZWQgdG8gdXNlIHRoZSBzYW1lIHJ1bGVzIGFzIGZ1bmN0aW9uIGNhbGxzIGJ5IHRoZQ0KLSAgICAgICAgICogY29tcGlsZXIuICovDQotICAgICAgICBQVVNILkwgUjUNCi0gICAgICAgIC8qIFNldCBJVFUgU1dJTlRSLiAqLw0KLSAgICAgICAgTU9WLkwgIyA1NTM2OTYsIFI1DQotICAgICAgICAgICAgTU9WLkIgIyAxLCBbIFI1IF0NCi0gICAgICAgIC8qIFJlYWQgYmFjayB0byBlbnN1cmUgdGhlIHZhbHVlIGlzIHRha2VuIGJlZm9yZSBwcm9jZWVkaW5nLiAqLw0KLSAgICAgICAgTU9WLkxbIFI1IF0sIFI1DQotICAgICAgICAvKiBSZXN0b3JlIGNsb2JiZXJlZCByZWdpc3RlciB0byBpdHMgcHJldmlvdXMgdmFsdWUuICovDQotICAgICAgICBQT1AgUjUNCi0gICAgfQ0KLSAgICAjZGVmaW5lIHBvcnRZSUVMRCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdlBvcnRZaWVsZCgpDQotICAgICNkZWZpbmUgcG9ydFlJRUxEX0ZST01fSVNSKCB4ICkgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiggeCAhPSBwZEZBTFNFICkgcG9ydFlJRUxEKCkNCisjcHJhZ21hIGlubGluZV9hc20gdlBvcnRZaWVsZA0KK3N0YXRpYyB2b2lkIHZQb3J0WWllbGQoIHZvaWQgKQ0KK3sNCisJLyogU2F2ZSBjbG9iYmVyZWQgcmVnaXN0ZXIgLSBtYXkgbm90IGFjdHVhbGx5IGJlIG5lY2Vzc2FyeSBpZiBpbmxpbmUgYXNtDQorCWZ1bmN0aW9ucyBhcmUgY29uc2lkZXJlZCB0byB1c2UgdGhlIHNhbWUgcnVsZXMgYXMgZnVuY3Rpb24gY2FsbHMgYnkgdGhlDQorCWNvbXBpbGVyLiAqLw0KKwlQVVNILkwgUjUNCisJLyogU2V0IElUVSBTV0lOVFIuICovDQorCU1PVi5MICM1NTM2OTYsIFI1DQorCU1PVi5CICMxLCBbUjVdDQorCS8qIFJlYWQgYmFjayB0byBlbnN1cmUgdGhlIHZhbHVlIGlzIHRha2VuIGJlZm9yZSBwcm9jZWVkaW5nLiAqLw0KKwlNT1YuTCBbUjVdLCBSNQ0KKwkvKiBSZXN0b3JlIGNsb2JiZXJlZCByZWdpc3RlciB0byBpdHMgcHJldmlvdXMgdmFsdWUuICovDQorCVBPUCBSNQ0KK30NCisjZGVmaW5lIHBvcnRZSUVMRCgpCXZQb3J0WWllbGQoKQ0KKyNkZWZpbmUgcG9ydFlJRUxEX0ZST01fSVNSKCB4ICkJaWYoIHggIT0gcGRGQUxTRSApIHBvcnRZSUVMRCgpDQogDQogLyogVGhlc2UgbWFjcm9zIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LCBidXQgdGhyb3VnaCB0aGUNCi0gKiB0YXNrRU5URVJfQ1JJVElDQUwoKSBhbmQgdGFza0VYSVRfQ1JJVElDQUwoKSBtYWNyb3MuICBBbiBleHRyYSBjaGVjayBpcw0KLSAqIHBlcmZvcm1lZCBpZiBjb25maWdBU1NFUlQoKSBpcyBkZWZpbmVkIHRvIGVuc3VyZSBhbiBhc3NlcnRpb24gaGFuZGxlciBkb2VzIG5vdA0KLSAqIGluYWR2ZXJ0ZW50bHkgYXR0ZW1wdCB0byBsb3dlciB0aGUgSVBMIHdoZW4gdGhlIGNhbGwgdG8gYXNzZXJ0IHdhcyB0cmlnZ2VyZWQNCi0gKiBiZWNhdXNlIHRoZSBJUEwgdmFsdWUgd2FzIGZvdW5kIHRvIGJlIGFib3ZlCWNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWQ0KLSAqIHdoZW4gYW4gSVNSIHNhZmUgRnJlZVJUT1MgQVBJIGZ1bmN0aW9uIHdhcyBleGVjdXRlZC4gIElTUiBzYWZlIEZyZWVSVE9TIEFQSQ0KLSAqIGZ1bmN0aW9ucyBhcmUgdGhvc2UgdGhhdCBlbmQgaW4gRnJvbUlTUi4gIEZyZWVSVE9TIG1haW50YWlucyBhIHNlcGFyYXRlDQotICogaW50ZXJydXB0IEFQSSB0byBlbnN1cmUgQVBJIGZ1bmN0aW9uIGFuZCBpbnRlcnJ1cHQgZW50cnkgaXMgYXMgZmFzdCBhbmQgYXMNCi0gKiBzaW1wbGUgYXMgcG9zc2libGUuICovDQotICAgICNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRfaXBsKCAoIGxvbmcgKSAwICkNCi0gICAgI2lmZGVmIGNvbmZpZ0FTU0VSVA0KLSAgICAgICAgI2RlZmluZSBwb3J0QVNTRVJUX0lGX0lOVEVSUlVQVF9QUklPUklUWV9JTlZBTElEKCkgICAgY29uZmlnQVNTRVJUKCAoIGdldF9pcGwoKSA8PSBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgKSApDQotICAgICAgICAjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAgICAgICAgICAgICAgICAgICAgICBpZiggZ2V0X2lwbCgpIDwgY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkgc2V0X2lwbCggKCBsb25nICkgY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkNCi0gICAgI2Vsc2UNCi0gICAgICAgICNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpICAgICAgICAgICAgICAgICAgICAgIHNldF9pcGwoICggbG9uZyApIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSApDQotICAgICNlbmRpZg0KK3Rhc2tFTlRFUl9DUklUSUNBTCgpIGFuZCB0YXNrRVhJVF9DUklUSUNBTCgpIG1hY3Jvcy4gIEFuIGV4dHJhIGNoZWNrIGlzDQorcGVyZm9ybWVkIGlmIGNvbmZpZ0FTU0VSVCgpIGlzIGRlZmluZWQgdG8gZW5zdXJlIGFuIGFzc2VydGlvbiBoYW5kbGVyIGRvZXMgbm90DQoraW5hZHZlcnRlbnRseSBhdHRlbXB0IHRvIGxvd2VyIHRoZSBJUEwgd2hlbiB0aGUgY2FsbCB0byBhc3NlcnQgd2FzIHRyaWdnZXJlZA0KK2JlY2F1c2UgdGhlIElQTCB2YWx1ZSB3YXMgZm91bmQgdG8gYmUgYWJvdmUJY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZDQord2hlbiBhbiBJU1Igc2FmZSBGcmVlUlRPUyBBUEkgZnVuY3Rpb24gd2FzIGV4ZWN1dGVkLiAgSVNSIHNhZmUgRnJlZVJUT1MgQVBJDQorZnVuY3Rpb25zIGFyZSB0aG9zZSB0aGF0IGVuZCBpbiBGcm9tSVNSLiAgRnJlZVJUT1MgbWFpbnRhaW5zIGEgc2VwYXJhdGUNCitpbnRlcnJ1cHQgQVBJIHRvIGVuc3VyZSBBUEkgZnVuY3Rpb24gYW5kIGludGVycnVwdCBlbnRyeSBpcyBhcyBmYXN0IGFuZCBhcw0KK3NpbXBsZSBhcyBwb3NzaWJsZS4gKi8NCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpIAlzZXRfaXBsKCAoIGxvbmcgKSAwICkNCisjaWZkZWYgY29uZmlnQVNTRVJUDQorCSNkZWZpbmUgcG9ydEFTU0VSVF9JRl9JTlRFUlJVUFRfUFJJT1JJVFlfSU5WQUxJRCgpIGNvbmZpZ0FTU0VSVCggKCBnZXRfaXBsKCkgPD0gY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkgKQ0KKwkjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAJaWYoIGdldF9pcGwoKSA8IGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSApIHNldF9pcGwoICggbG9uZyApIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSApDQorI2Vsc2UNCisJI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgCXNldF9pcGwoICggbG9uZyApIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSApDQorI2VuZGlmDQogDQogLyogQ3JpdGljYWwgbmVzdGluZyBjb3VudHMgYXJlIHN0b3JlZCBpbiB0aGUgVENCLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRDUklUSUNBTF9ORVNUSU5HX0lOX1RDQiAgICAoIDEgKQ0KKyNkZWZpbmUgcG9ydENSSVRJQ0FMX05FU1RJTkdfSU5fVENCICggMSApDQogDQogLyogVGhlIGNyaXRpY2FsIG5lc3RpbmcgZnVuY3Rpb25zIGRlZmluZWQgd2l0aGluIHRhc2tzLmMuICovDQotICAgIGV4dGVybiB2b2lkIHZUYXNrRW50ZXJDcml0aWNhbCggdm9pZCApOw0KLSAgICBleHRlcm4gdm9pZCB2VGFza0V4aXRDcml0aWNhbCggdm9pZCApOw0KLSAgICAjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZUYXNrRW50ZXJDcml0aWNhbCgpDQotICAgICNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdlRhc2tFeGl0Q3JpdGljYWwoKQ0KK2V4dGVybiB2b2lkIHZUYXNrRW50ZXJDcml0aWNhbCggdm9pZCApOw0KK2V4dGVybiB2b2lkIHZUYXNrRXhpdENyaXRpY2FsKCB2b2lkICk7DQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKQl2VGFza0VudGVyQ3JpdGljYWwoKQ0KKyNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKQkJdlRhc2tFeGl0Q3JpdGljYWwoKQ0KIA0KIC8qIEFzIHRoaXMgcG9ydCBhbGxvd3MgaW50ZXJydXB0IG5lc3RpbmcuLi4gKi8NCi0gICAgI2RlZmluZSBwb3J0U0VUX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfaXBsKCk7IHNldF9pcGwoICggbG9uZyApIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSApDQotICAgICNkZWZpbmUgcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCB1eFNhdmVkSW50ZXJydXB0U3RhdHVzICkgICAgc2V0X2lwbCggKCBsb25nICkgdXhTYXZlZEludGVycnVwdFN0YXR1cyApDQorI2RlZmluZSBwb3J0U0VUX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCkgZ2V0X2lwbCgpOyBzZXRfaXBsKCAoIGxvbmcgKSBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgKQ0KKyNkZWZpbmUgcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCB1eFNhdmVkSW50ZXJydXB0U3RhdHVzICkgc2V0X2lwbCggKCBsb25nICkgdXhTYXZlZEludGVycnVwdFN0YXR1cyApDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQotICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KLSAgICAjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgICAgICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgfQ0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQogDQogI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvUmVuZXNhcy9SWDYwMC9wb3J0LmMgYi9wb3J0YWJsZS9SZW5lc2FzL1JYNjAwL3BvcnQuYwppbmRleCAyZDlkYjQzLi5hYTYwMTBjIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9SZW5lc2FzL1JYNjAwL3BvcnQuYworKysgYi9wb3J0YWJsZS9SZW5lc2FzL1JYNjAwL3BvcnQuYwpAQCAtMjYsOCArMjYsOCBAQAogICovDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLSogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFibGUuaCBmb3IgdGhlIFJYNjAwIHBvcnQuDQotKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyAqIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBSWDYwMCBwb3J0Lg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogU2NoZWR1bGVyIGluY2x1ZGVzLiAqLw0KICNpbmNsdWRlICJGcmVlUlRPUy5oIg0KQEAgLTQyLDE1ICs0MiwxNSBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGFza3Mgc2hvdWxkIHN0YXJ0IHdpdGggaW50ZXJydXB0cyBlbmFibGVkIGFuZCBpbiBTdXBlcnZpc29yIG1vZGUsIHRoZXJlZm9yZQ0KLSAqIFBTVyBpcyBzZXQgd2l0aCBVIGFuZCBJIHNldCwgYW5kIFBNIGFuZCBJUEwgY2xlYXIuICovDQorUFNXIGlzIHNldCB3aXRoIFUgYW5kIEkgc2V0LCBhbmQgUE0gYW5kIElQTCBjbGVhci4gKi8NCiAjZGVmaW5lIHBvcnRJTklUSUFMX1BTVyAgICAgKCAoIFN0YWNrVHlwZV90ICkgMHgwMDAzMDAwMCApDQogI2RlZmluZSBwb3J0SU5JVElBTF9GUFNXICAgICggKCBTdGFja1R5cGVfdCApIDB4MDAwMDAxMDAgKQ0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFRoZSBmb2xsb3dpbmcgbGluZXMgYXJlIHRvIGVuc3VyZSB2U29mdHdhcmVJbnRlcnJ1cHRFbnRyeSBjYW4gYmUgcmVmZXJlbmNlZCwNCi0gKiBhbmQgdGhlcmVmb3JlIGluc3RhbGxlZCBpbiB0aGUgdmVjdG9yIHRhYmxlLCB3aGVuIHRoZSBGcmVlUlRPUyBjb2RlIGlzIGJ1aWx0DQotICogYXMgYSBsaWJyYXJ5LiAqLw0KKyBhbmQgdGhlcmVmb3JlIGluc3RhbGxlZCBpbiB0aGUgdmVjdG9yIHRhYmxlLCB3aGVuIHRoZSBGcmVlUlRPUyBjb2RlIGlzIGJ1aWx0DQorYXMgYSBsaWJyYXJ5LiAqLw0KIGV4dGVybiBCYXNlVHlwZV90IHZTb2Z0d2FyZUludGVycnVwdEVudHJ5Ow0KIGNvbnN0IEJhc2VUeXBlX3QgKiBwX3ZTb2Z0d2FyZUludGVycnVwdEVudHJ5ID0gJnZTb2Z0d2FyZUludGVycnVwdEVudHJ5Ow0KIA0KQEAgLTgwLDggKzgwLDggQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFRoaXMgaXMgYWNjZXNzZWQgYnkgdGhlIGlubGluZSBhc3NlbWJsZXIgZnVuY3Rpb25zIHNvIGlzIGZpbGUgc2NvcGUgZm9yDQotICogY29udmVuaWVuY2UuICovDQotZXh0ZXJuIHZvaWQgKiBweEN1cnJlbnRUQ0I7DQorY29udmVuaWVuY2UuICovDQorZXh0ZXJuIHZvaWQgKnB4Q3VycmVudFRDQjsNCiBleHRlcm4gdm9pZCB2VGFza1N3aXRjaENvbnRleHQoIHZvaWQgKTsNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCkBAIC04OSwyNDcgKzg5LDI0MSBAQAogLyoNCiAgKiBTZWUgaGVhZGVyIGZpbGUgZm9yIGRlc2NyaXB0aW9uLg0KICAqLw0KLVN0YWNrVHlwZV90ICogcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqIHB4VG9wT2ZTdGFjaywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFza0Z1bmN0aW9uX3QgcHhDb2RlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICogcHZQYXJhbWV0ZXJzICkNCitTdGFja1R5cGVfdCAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqcHhUb3BPZlN0YWNrLCBUYXNrRnVuY3Rpb25fdCBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycyApDQogew0KLSAgICAvKiBSMCBpcyBub3QgaW5jbHVkZWQgYXMgaXQgaXMgdGhlIHN0YWNrIHBvaW50ZXIuICovDQorCS8qIFIwIGlzIG5vdCBpbmNsdWRlZCBhcyBpdCBpcyB0aGUgc3RhY2sgcG9pbnRlci4gKi8NCiANCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MDA7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gcG9ydElOSVRJQUxfUFNXOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBweENvZGU7DQorCSpweFRvcE9mU3RhY2sgPSAweDAwOw0KKwlweFRvcE9mU3RhY2stLTsNCisgCSpweFRvcE9mU3RhY2sgPSBwb3J0SU5JVElBTF9QU1c7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB4Q29kZTsNCiANCi0gICAgLyogV2hlbiBkZWJ1Z2dpbmcgaXQgY2FuIGJlIHVzZWZ1bCBpZiBldmVyeSByZWdpc3RlciBpcyBzZXQgdG8gYSBrbm93bg0KLSAgICAgKiB2YWx1ZS4gIE90aGVyd2lzZSBjb2RlIHNwYWNlIGNhbiBiZSBzYXZlZCBieSBqdXN0IHNldHRpbmcgdGhlIHJlZ2lzdGVycw0KLSAgICAgKiB0aGF0IG5lZWQgdG8gYmUgc2V0LiAqLw0KLSAgICAjaWZkZWYgVVNFX0ZVTExfUkVHSVNURVJfSU5JVElBTElTQVRJT04NCi0gICAgICAgIHsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHhmZmZmZmZmZjsgLyogcjE1LiAqLw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweGVlZWVlZWVlOw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweGRkZGRkZGRkOw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweGNjY2NjY2NjOw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweGJiYmJiYmJiOw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweGFhYWFhYWFhOw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweDk5OTk5OTk5Ow0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweDg4ODg4ODg4Ow0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweDc3Nzc3Nzc3Ow0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweDY2NjY2NjY2Ow0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweDU1NTU1NTU1Ow0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweDQ0NDQ0NDQ0Ow0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweDMzMzMzMzMzOw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweDIyMjIyMjIyOw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgfQ0KLSAgICAjZWxzZSAvKiBpZmRlZiBVU0VfRlVMTF9SRUdJU1RFUl9JTklUSUFMSVNBVElPTiAqLw0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjayAtPSAxNTsNCi0gICAgICAgIH0NCi0gICAgI2VuZGlmIC8qIGlmZGVmIFVTRV9GVUxMX1JFR0lTVEVSX0lOSVRJQUxJU0FUSU9OICovDQorCS8qIFdoZW4gZGVidWdnaW5nIGl0IGNhbiBiZSB1c2VmdWwgaWYgZXZlcnkgcmVnaXN0ZXIgaXMgc2V0IHRvIGEga25vd24NCisJdmFsdWUuICBPdGhlcndpc2UgY29kZSBzcGFjZSBjYW4gYmUgc2F2ZWQgYnkganVzdCBzZXR0aW5nIHRoZSByZWdpc3RlcnMNCisJdGhhdCBuZWVkIHRvIGJlIHNldC4gKi8NCisJI2lmZGVmIFVTRV9GVUxMX1JFR0lTVEVSX0lOSVRJQUxJU0FUSU9ODQorCXsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4ZmZmZmZmZmY7CS8qIHIxNS4gKi8NCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4ZWVlZWVlZWU7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweGRkZGRkZGRkOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHhjY2NjY2NjYzsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4YmJiYmJiYmI7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweGFhYWFhYWFhOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHg5OTk5OTk5OTsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4ODg4ODg4ODg7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweDc3Nzc3Nzc3Ow0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHg2NjY2NjY2NjsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4NTU1NTU1NTU7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweDQ0NDQ0NDQ0Ow0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHgzMzMzMzMzMzsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4MjIyMjIyMjI7DQorCQlweFRvcE9mU3RhY2stLTsNCisJfQ0KKwkjZWxzZQ0KKwl7DQorCQlweFRvcE9mU3RhY2sgLT0gMTU7DQorCX0NCisJI2VuZGlmDQogDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHZQYXJhbWV0ZXJzOyAvKiBSMSAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IHBvcnRJTklUSUFMX0ZQU1c7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMHgxMjM0NTY3ODsgLyogQWNjdW11bGF0b3IuICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMHg4NzY1NDMyMTsgLyogQWNjdW11bGF0b3IuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHZQYXJhbWV0ZXJzOyAvKiBSMSAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IHBvcnRJTklUSUFMX0ZQU1c7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgxMjM0NTY3ODsgLyogQWNjdW11bGF0b3IuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHg4NzY1NDMyMTsgLyogQWNjdW11bGF0b3IuICovDQogDQotICAgIHJldHVybiBweFRvcE9mU3RhY2s7DQorCXJldHVybiBweFRvcE9mU3RhY2s7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIEJhc2VUeXBlX3QgeFBvcnRTdGFydFNjaGVkdWxlciggdm9pZCApDQogew0KLSAgICBleHRlcm4gdm9pZCB2QXBwbGljYXRpb25TZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdkFwcGxpY2F0aW9uU2V0dXBUaW1lckludGVycnVwdCggdm9pZCApOw0KIA0KLSAgICAvKiBVc2UgcHhDdXJyZW50VENCIGp1c3Qgc28gaXQgZG9lcyBub3QgZ2V0IG9wdGltaXNlZCBhd2F5LiAqLw0KLSAgICBpZiggcHhDdXJyZW50VENCICE9IE5VTEwgKQ0KLSAgICB7DQotICAgICAgICAvKiBDYWxsIGFuIGFwcGxpY2F0aW9uIGZ1bmN0aW9uIHRvIHNldCB1cCB0aGUgdGltZXIgdGhhdCB3aWxsIGdlbmVyYXRlIHRoZQ0KLSAgICAgICAgICogdGljayBpbnRlcnJ1cHQuICBUaGlzIHdheSB0aGUgYXBwbGljYXRpb24gY2FuIGRlY2lkZSB3aGljaCBwZXJpcGhlcmFsIHRvDQotICAgICAgICAgKiB1c2UuICBBIGRlbW8gYXBwbGljYXRpb24gaXMgcHJvdmlkZWQgdG8gc2hvdyBhIHN1aXRhYmxlIGV4YW1wbGUuICovDQotICAgICAgICB2QXBwbGljYXRpb25TZXR1cFRpbWVySW50ZXJydXB0KCk7DQorCS8qIFVzZSBweEN1cnJlbnRUQ0IganVzdCBzbyBpdCBkb2VzIG5vdCBnZXQgb3B0aW1pc2VkIGF3YXkuICovDQorCWlmKCBweEN1cnJlbnRUQ0IgIT0gTlVMTCApDQorCXsNCisJCS8qIENhbGwgYW4gYXBwbGljYXRpb24gZnVuY3Rpb24gdG8gc2V0IHVwIHRoZSB0aW1lciB0aGF0IHdpbGwgZ2VuZXJhdGUgdGhlDQorCQl0aWNrIGludGVycnVwdC4gIFRoaXMgd2F5IHRoZSBhcHBsaWNhdGlvbiBjYW4gZGVjaWRlIHdoaWNoIHBlcmlwaGVyYWwgdG8NCisJCXVzZS4gIEEgZGVtbyBhcHBsaWNhdGlvbiBpcyBwcm92aWRlZCB0byBzaG93IGEgc3VpdGFibGUgZXhhbXBsZS4gKi8NCisJCXZBcHBsaWNhdGlvblNldHVwVGltZXJJbnRlcnJ1cHQoKTsNCiANCi0gICAgICAgIC8qIEVuYWJsZSB0aGUgc29mdHdhcmUgaW50ZXJydXB0LiAqLw0KLSAgICAgICAgX0lFTiggX0lDVV9TV0lOVCApID0gMTsNCisJCS8qIEVuYWJsZSB0aGUgc29mdHdhcmUgaW50ZXJydXB0LiAqLw0KKwkJX0lFTiggX0lDVV9TV0lOVCApID0gMTsNCiANCi0gICAgICAgIC8qIEVuc3VyZSB0aGUgc29mdHdhcmUgaW50ZXJydXB0IGlzIGNsZWFyLiAqLw0KLSAgICAgICAgX0lSKCBfSUNVX1NXSU5UICkgPSAwOw0KKwkJLyogRW5zdXJlIHRoZSBzb2Z0d2FyZSBpbnRlcnJ1cHQgaXMgY2xlYXIuICovDQorCQlfSVIoIF9JQ1VfU1dJTlQgKSA9IDA7DQogDQotICAgICAgICAvKiBFbnN1cmUgdGhlIHNvZnR3YXJlIGludGVycnVwdCBpcyBzZXQgdG8gdGhlIGtlcm5lbCBwcmlvcml0eS4gKi8NCi0gICAgICAgIF9JUFIoIF9JQ1VfU1dJTlQgKSA9IGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFk7DQorCQkvKiBFbnN1cmUgdGhlIHNvZnR3YXJlIGludGVycnVwdCBpcyBzZXQgdG8gdGhlIGtlcm5lbCBwcmlvcml0eS4gKi8NCisJCV9JUFIoIF9JQ1VfU1dJTlQgKSA9IGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFk7DQogDQotICAgICAgICAvKiBTdGFydCB0aGUgZmlyc3QgdGFzay4gKi8NCi0gICAgICAgIHBydlN0YXJ0Rmlyc3RUYXNrKCk7DQotICAgIH0NCisJCS8qIFN0YXJ0IHRoZSBmaXJzdCB0YXNrLiAqLw0KKwkJcHJ2U3RhcnRGaXJzdFRhc2soKTsNCisJfQ0KIA0KLSAgICAvKiBKdXN0IHRvIG1ha2Ugc3VyZSB0aGUgZnVuY3Rpb24gaXMgbm90IG9wdGltaXNlZCBhd2F5LiAqLw0KLSAgICAoIHZvaWQgKSB2U29mdHdhcmVJbnRlcnJ1cHRJU1IoKTsNCisJLyogSnVzdCB0byBtYWtlIHN1cmUgdGhlIGZ1bmN0aW9uIGlzIG5vdCBvcHRpbWlzZWQgYXdheS4gKi8NCisJKCB2b2lkICkgdlNvZnR3YXJlSW50ZXJydXB0SVNSKCk7DQogDQotICAgIC8qIFNob3VsZCBub3QgZ2V0IGhlcmUuICovDQotICAgIHJldHVybiBwZEZBSUw7DQorCS8qIFNob3VsZCBub3QgZ2V0IGhlcmUuICovDQorCXJldHVybiBwZEZBSUw7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KICNwcmFnbWEgaW5saW5lX2FzbSBwcnZTdGFydEZpcnN0VGFzaw0KIHN0YXRpYyB2b2lkIHBydlN0YXJ0Rmlyc3RUYXNrKCB2b2lkICkNCiB7DQotICAgIC8qIFdoZW4gc3RhcnRpbmcgdGhlIHNjaGVkdWxlciB0aGVyZSBpcyBub3RoaW5nIHRoYXQgbmVlZHMgbW92aW5nIHRvIHRoZQ0KLSAgICAgKiBpbnRlcnJ1cHQgc3RhY2sgYmVjYXVzZSB0aGUgZnVuY3Rpb24gaXMgbm90IGNhbGxlZCBmcm9tIGFuIGludGVycnVwdC4NCi0gICAgICogSnVzdCBlbnN1cmUgdGhlIGN1cnJlbnQgc3RhY2sgaXMgdGhlIHVzZXIgc3RhY2suICovDQotICAgIFNFVFBTVyBVDQorCS8qIFdoZW4gc3RhcnRpbmcgdGhlIHNjaGVkdWxlciB0aGVyZSBpcyBub3RoaW5nIHRoYXQgbmVlZHMgbW92aW5nIHRvIHRoZQ0KKwlpbnRlcnJ1cHQgc3RhY2sgYmVjYXVzZSB0aGUgZnVuY3Rpb24gaXMgbm90IGNhbGxlZCBmcm9tIGFuIGludGVycnVwdC4NCisJSnVzdCBlbnN1cmUgdGhlIGN1cnJlbnQgc3RhY2sgaXMgdGhlIHVzZXIgc3RhY2suICovDQorCVNFVFBTVwlVDQogDQotICAgIC8qIE9idGFpbiB0aGUgbG9jYXRpb24gb2YgdGhlIHN0YWNrIGFzc29jaWF0ZWQgd2l0aCB3aGljaCBldmVyIHRhc2sNCi0gICAgICogcHhDdXJyZW50VENCIGlzIGN1cnJlbnRseSBwb2ludGluZyB0by4gKi8NCi0gICAgTU9WLkwgICAjIF9weEN1cnJlbnRUQ0IsIFIxNQ0KLSAgICAgICAgTU9WLkxbIFIxNSBdLCBSMTUNCi0gICAgICAgIE1PVi5MWyBSMTUgXSwgUjANCisJLyogT2J0YWluIHRoZSBsb2NhdGlvbiBvZiB0aGUgc3RhY2sgYXNzb2NpYXRlZCB3aXRoIHdoaWNoIGV2ZXIgdGFzaw0KKwlweEN1cnJlbnRUQ0IgaXMgY3VycmVudGx5IHBvaW50aW5nIHRvLiAqLw0KKwlNT1YuTAkjX3B4Q3VycmVudFRDQiwgUjE1DQorCU1PVi5MCVtSMTVdLCBSMTUNCisJTU9WLkwJW1IxNV0sIFIwDQogDQotICAgIC8qIFJlc3RvcmUgdGhlIHJlZ2lzdGVycyBmcm9tIHRoZSBzdGFjayBvZiB0aGUgdGFzayBwb2ludGVkIHRvIGJ5DQotICAgICAqIHB4Q3VycmVudFRDQi4gKi8NCi0gICAgUE9QIFIxNQ0KLSAgICBNVlRBQ0xPIFIxNSAgICAvKiBBY2N1bXVsYXRvciBsb3cgMzIgYml0cy4gKi8NCi0gICAgUE9QIFIxNQ0KLSAgICBNVlRBQ0hJIFIxNSAgICAvKiBBY2N1bXVsYXRvciBoaWdoIDMyIGJpdHMuICovDQotICAgIFBPUCBSMTUNCi0gICAgTVZUQyBSMTUsIEZQU1cgLyogRmxvYXRpbmcgcG9pbnQgc3RhdHVzIHdvcmQuICovDQotICAgIFBPUE0gUjEgLSBSMTUgIC8qIFIxIHRvIFIxNSAtIFIwIGlzIG5vdCBpbmNsdWRlZCBhcyBpdCBpcyB0aGUgU1AuICovDQotICAgIFJURSAgICAgICAgICAgIC8qIFRoaXMgcG9wcyB0aGUgcmVtYWluaW5nIHJlZ2lzdGVycy4gKi8NCisJLyogUmVzdG9yZSB0aGUgcmVnaXN0ZXJzIGZyb20gdGhlIHN0YWNrIG9mIHRoZSB0YXNrIHBvaW50ZWQgdG8gYnkNCisJcHhDdXJyZW50VENCLiAqLw0KKyAgICBQT1AJCVIxNQ0KKyAgICBNVlRBQ0xPCVIxNSAJCS8qIEFjY3VtdWxhdG9yIGxvdyAzMiBiaXRzLiAqLw0KKyAgICBQT1AJCVIxNQ0KKyAgICBNVlRBQ0hJCVIxNSAJCS8qIEFjY3VtdWxhdG9yIGhpZ2ggMzIgYml0cy4gKi8NCisgICAgUE9QCQlSMTUNCisgICAgTVZUQwlSMTUsRlBTVyAJLyogRmxvYXRpbmcgcG9pbnQgc3RhdHVzIHdvcmQuICovDQorICAgIFBPUE0JUjEtUjE1IAkJLyogUjEgdG8gUjE1IC0gUjAgaXMgbm90IGluY2x1ZGVkIGFzIGl0IGlzIHRoZSBTUC4gKi8NCisgICAgUlRFCQkJCQkvKiBUaGlzIHBvcHMgdGhlIHJlbWFpbmluZyByZWdpc3RlcnMuICovDQogICAgIE5PUA0KLSAgICAgICAgTk9QDQorICAgIE5PUA0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAjcHJhZ21hIGludGVycnVwdCAoIHZUaWNrSVNSKCB2ZWN0ID0gX1ZFQ1QoIGNvbmZpZ1RJQ0tfVkVDVE9SICksIGVuYWJsZSApICkNCiB2b2lkIHZUaWNrSVNSKCB2b2lkICkNCiB7DQotICAgIC8qIEluY3JlbWVudCB0aGUgdGljaywgYW5kIHBlcmZvcm0gYW55IHByb2Nlc3NpbmcgdGhlIG5ldyB0aWNrIHZhbHVlDQotICAgICAqIG5lY2Vzc2l0YXRlcy4gKi8NCi0gICAgc2V0X2lwbCggY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICk7DQotICAgIHsNCi0gICAgICAgIGlmKCB4VGFza0luY3JlbWVudFRpY2soKSAhPSBwZEZBTFNFICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICB0YXNrWUlFTEQoKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLQ0KLSAgICBzZXRfaXBsKCBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZICk7DQorCS8qIEluY3JlbWVudCB0aGUgdGljaywgYW5kIHBlcmZvcm0gYW55IHByb2Nlc3NpbmcgdGhlIG5ldyB0aWNrIHZhbHVlDQorCW5lY2Vzc2l0YXRlcy4gKi8NCisJc2V0X2lwbCggY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICk7DQorCXsNCisJCWlmKCB4VGFza0luY3JlbWVudFRpY2soKSAhPSBwZEZBTFNFICkNCisJCXsNCisJCQl0YXNrWUlFTEQoKTsNCisJCX0NCisJfQ0KKwlzZXRfaXBsKCBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZICk7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlNvZnR3YXJlSW50ZXJydXB0SVNSKCB2b2lkICkNCiB7DQotICAgIHBydllpZWxkSGFuZGxlcigpOw0KKwlwcnZZaWVsZEhhbmRsZXIoKTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogI3ByYWdtYSBpbmxpbmVfYXNtIHBydllpZWxkSGFuZGxlcg0KIHN0YXRpYyB2b2lkIHBydllpZWxkSGFuZGxlciggdm9pZCApDQogew0KLSAgICAvKiBSZS1lbmFibGUgaW50ZXJydXB0cy4gKi8NCi0gICAgU0VUUFNXIEkNCisJLyogUmUtZW5hYmxlIGludGVycnVwdHMuICovDQorCVNFVFBTVwlJDQogDQotICAgIC8qIE1vdmUgdGhlIGRhdGEgdGhhdCB3YXMgYXV0b21hdGljYWxseSBwdXNoZWQgb250byB0aGUgaW50ZXJydXB0IHN0YWNrIHdoZW4NCi0gICAgICogdGhlIGludGVycnVwdCBvY2N1cnJlZCBmcm9tIHRoZSBpbnRlcnJ1cHQgc3RhY2sgdG8gdGhlIHVzZXIgc3RhY2suDQotICAgICAqDQotICAgICAqIFIxNSBpcyBzYXZlZCBiZWZvcmUgaXQgaXMgY2xvYmJlcmVkLiAqLw0KLSAgICBQVVNILkwgUjE1DQorCS8qIE1vdmUgdGhlIGRhdGEgdGhhdCB3YXMgYXV0b21hdGljYWxseSBwdXNoZWQgb250byB0aGUgaW50ZXJydXB0IHN0YWNrIHdoZW4NCisJdGhlIGludGVycnVwdCBvY2N1cnJlZCBmcm9tIHRoZSBpbnRlcnJ1cHQgc3RhY2sgdG8gdGhlIHVzZXIgc3RhY2suDQogDQotICAgIC8qIFJlYWQgdGhlIHVzZXIgc3RhY2sgcG9pbnRlci4gKi8NCi0gICAgTVZGQyBVU1AsIFIxNQ0KKwlSMTUgaXMgc2F2ZWQgYmVmb3JlIGl0IGlzIGNsb2JiZXJlZC4gKi8NCisJUFVTSC5MCVIxNQ0KIA0KLSAgICAvKiBNb3ZlIHRoZSBhZGRyZXNzIGRvd24gdG8gdGhlIGRhdGEgYmVpbmcgbW92ZWQuICovDQotICAgICAgICAgU1VCICAgICAjIDEyLCBSMTUNCi0gICAgTVZUQyBSMTUsIFVTUA0KKwkvKiBSZWFkIHRoZSB1c2VyIHN0YWNrIHBvaW50ZXIuICovDQorCU1WRkMJVVNQLCBSMTUNCiANCi0gICAgLyogQ29weSB0aGUgZGF0YSBhY3Jvc3MuICovDQotICAgICAgICAgTU9WLkxbIFIwIF0sIFsgUjE1IF07DQotICAgIFIxNQ0KKwkvKiBNb3ZlIHRoZSBhZGRyZXNzIGRvd24gdG8gdGhlIGRhdGEgYmVpbmcgbW92ZWQuICovDQorCVNVQgkJIzEyLCBSMTUNCisJTVZUQwlSMTUsIFVTUA0KIA0KLSAgICBNT1YuTCAgIDRbIFIwIF0sIDRbIFIxNSBdOw0KLSAgICBQQw0KLSAgICBNT1YuTCAgIDhbIFIwIF0sIDhbIFIxNSBdOw0KLSAgICBQU1cNCisJLyogQ29weSB0aGUgZGF0YSBhY3Jvc3MuICovDQorCU1PVi5MCVsgUjAgXSwgWyBSMTUgXSA7IFIxNQ0KKwlNT1YuTCAJNFsgUjAgXSwgNFsgUjE1IF0gIDsgUEMNCisJTU9WLkwJOFsgUjAgXSwgOFsgUjE1IF0gIDsgUFNXDQogDQotICAgIC8qIE1vdmUgdGhlIGludGVycnVwdCBzdGFjayBwb2ludGVyIHRvIGl0cyBuZXcgY29ycmVjdCBwb3NpdGlvbi4gKi8NCi0gICAgICAgIEFERCAjIDEyLCBSMA0KKwkvKiBNb3ZlIHRoZSBpbnRlcnJ1cHQgc3RhY2sgcG9pbnRlciB0byBpdHMgbmV3IGNvcnJlY3QgcG9zaXRpb24uICovDQorCUFERAkjMTIsIFIwDQogDQotICAgIC8qIEFsbCB0aGUgcmVzdCBvZiB0aGUgcmVnaXN0ZXJzIGFyZSBzYXZlZCBkaXJlY3RseSB0byB0aGUgdXNlciBzdGFjay4gKi8NCi0gICAgU0VUUFNXIFUNCisJLyogQWxsIHRoZSByZXN0IG9mIHRoZSByZWdpc3RlcnMgYXJlIHNhdmVkIGRpcmVjdGx5IHRvIHRoZSB1c2VyIHN0YWNrLiAqLw0KKwlTRVRQU1cJVQ0KIA0KLSAgICAvKiBTYXZlIHRoZSByZXN0IG9mIHRoZSBnZW5lcmFsIHJlZ2lzdGVycyAoUjE1IGhhcyBiZWVuIHNhdmVkIGFscmVhZHkpLiAqLw0KLSAgICBQVVNITSBSMSAtIFIxNA0KKwkvKiBTYXZlIHRoZSByZXN0IG9mIHRoZSBnZW5lcmFsIHJlZ2lzdGVycyAoUjE1IGhhcyBiZWVuIHNhdmVkIGFscmVhZHkpLiAqLw0KKwlQVVNITQlSMS1SMTQNCiANCi0gICAgLyogU2F2ZSB0aGUgRlBTVyBhbmQgYWNjdW11bGF0b3IuICovDQotICAgIE1WRkMgRlBTVywgUjE1DQotICAgICAgICBQVVNILkwgUjE1DQotICAgIE1WRkFDSEkgUjE1DQotICAgICAgICBQVVNILkwgUjE1DQotICAgIE1WRkFDTUkgUjE1Ow0KLSAgICBNaWRkbGUgb3JkZXIgd29yZC4NCi0gICAgICAgU0hMTCAgICAjIDE2LCBSMTU7DQotICAgIFNoaWZ0ZWQgbGVmdCBhcyBpdCBpcyByZXN0b3JlZCB0byB0aGUgbG93IG9yZGVyIHdvcmQuDQotICAgICAgIFBVU0guTCBSMTUNCisJLyogU2F2ZSB0aGUgRlBTVyBhbmQgYWNjdW11bGF0b3IuICovDQorCU1WRkMJRlBTVywgUjE1DQorCVBVU0guTAlSMTUNCisJTVZGQUNISQlSMTUNCisJUFVTSC5MCVIxNQ0KKwlNVkZBQ01JCVIxNQk7IE1pZGRsZSBvcmRlciB3b3JkLg0KKwlTSExMCSMxNiwgUjE1IDsgU2hpZnRlZCBsZWZ0IGFzIGl0IGlzIHJlc3RvcmVkIHRvIHRoZSBsb3cgb3JkZXIgd29yZC4NCisJUFVTSC5MCVIxNQ0KIA0KLSAgICAvKiBTYXZlIHRoZSBzdGFjayBwb2ludGVyIHRvIHRoZSBUQ0IuICovDQotICAgIE1PVi5MICAgIyBfcHhDdXJyZW50VENCLCBSMTUNCi0gICAgICAgIE1PVi5MWyBSMTUgXSwgUjE1DQotICAgICAgICBNT1YuTCBSMCwgWyBSMTUgXQ0KKwkvKiBTYXZlIHRoZSBzdGFjayBwb2ludGVyIHRvIHRoZSBUQ0IuICovDQorCU1PVi5MCSNfcHhDdXJyZW50VENCLCBSMTUNCisJTU9WLkwJWyBSMTUgXSwgUjE1DQorCU1PVi5MCVIwLCBbIFIxNSBdDQogDQotICAgIC8qIEVuc3VyZSB0aGUgaW50ZXJydXB0IG1hc2sgaXMgc2V0IHRvIHRoZSBzeXNjYWxsIHByaW9yaXR5IHdoaWxlIHRoZSBrZXJuZWwNCi0gICAgICogc3RydWN0dXJlcyBhcmUgYmVpbmcgYWNjZXNzZWQuICovDQotICAgIE1WVElQTCAgIyBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkNCisJLyogRW5zdXJlIHRoZSBpbnRlcnJ1cHQgbWFzayBpcyBzZXQgdG8gdGhlIHN5c2NhbGwgcHJpb3JpdHkgd2hpbGUgdGhlIGtlcm5lbA0KKwlzdHJ1Y3R1cmVzIGFyZSBiZWluZyBhY2Nlc3NlZC4gKi8NCisJTVZUSVBMCSNjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkNCiANCi0gICAgLyogU2VsZWN0IHRoZSBuZXh0IHRhc2sgdG8gcnVuLiAqLw0KLSAgICBCU1IuQSBfdlRhc2tTd2l0Y2hDb250ZXh0DQorCS8qIFNlbGVjdCB0aGUgbmV4dCB0YXNrIHRvIHJ1bi4gKi8NCisJQlNSLkEJX3ZUYXNrU3dpdGNoQ29udGV4dA0KIA0KLSAgICAvKiBSZXNldCB0aGUgaW50ZXJydXB0IG1hc2sgYXMgbm8gbW9yZSBkYXRhIHN0cnVjdHVyZSBhY2Nlc3MgaXMgcmVxdWlyZWQuICovDQotICAgIE1WVElQTCAgIyBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZDQorCS8qIFJlc2V0IHRoZSBpbnRlcnJ1cHQgbWFzayBhcyBubyBtb3JlIGRhdGEgc3RydWN0dXJlIGFjY2VzcyBpcyByZXF1aXJlZC4gKi8NCisJTVZUSVBMCSNjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZDQogDQotICAgIC8qIExvYWQgdGhlIHN0YWNrIHBvaW50ZXIgb2YgdGhlIHRhc2sgdGhhdCBpcyBub3cgc2VsZWN0ZWQgYXMgdGhlIFJ1bm5pbmcNCi0gICAgICogc3RhdGUgdGFzayBmcm9tIGl0cyBUQ0IuICovDQotICAgIE1PVi5MICAgIyBfcHhDdXJyZW50VENCLCBSMTUNCi0gICAgICAgIE1PVi5MWyBSMTUgXSwgUjE1DQotICAgICAgICBNT1YuTFsgUjE1IF0sIFIwDQorCS8qIExvYWQgdGhlIHN0YWNrIHBvaW50ZXIgb2YgdGhlIHRhc2sgdGhhdCBpcyBub3cgc2VsZWN0ZWQgYXMgdGhlIFJ1bm5pbmcNCisJc3RhdGUgdGFzayBmcm9tIGl0cyBUQ0IuICovDQorCU1PVi5MCSNfcHhDdXJyZW50VENCLFIxNQ0KKwlNT1YuTAlbIFIxNSBdLCBSMTUNCisJTU9WLkwJWyBSMTUgXSwgUjANCiANCi0gICAgLyogUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgbmV3IHRhc2suICBUaGUgUFNXIChQcm9ncmFtIFN0YXR1cyBXb3JkKSBhbmQNCi0gICAgICogUEMgd2lsbCBiZSBwb3BwZWQgYnkgdGhlIFJURSBpbnN0cnVjdGlvbi4gKi8NCi0gICAgUE9QIFIxNQ0KLSAgICBNVlRBQ0xPIFIxNQ0KLSAgICBQT1AgUjE1DQotICAgIE1WVEFDSEkgUjE1DQotICAgIFBPUCBSMTUNCi0gICAgTVZUQyBSMTUsIEZQU1cNCi0gICAgUE9QTSBSMSAtIFIxNQ0KLSAgICBSVEUNCi0gICAgTk9QDQotICAgICAgICBOT1ANCisJLyogUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgbmV3IHRhc2suICBUaGUgUFNXIChQcm9ncmFtIFN0YXR1cyBXb3JkKSBhbmQNCisJUEMgd2lsbCBiZSBwb3BwZWQgYnkgdGhlIFJURSBpbnN0cnVjdGlvbi4gKi8NCisJUE9QCQlSMTUNCisJTVZUQUNMTwlSMTUNCisJUE9QCQlSMTUNCisJTVZUQUNISQlSMTUNCisJUE9QCQlSMTUNCisJTVZUQwlSMTUsRlBTVw0KKwlQT1BNCVIxLVIxNQ0KKwlSVEUNCisJTk9QDQorCU5PUA0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0RW5kU2NoZWR1bGVyKCB2b2lkICkNCiB7DQotICAgIC8qIE5vdCBpbXBsZW1lbnRlZCBpbiBwb3J0cyB3aGVyZSB0aGVyZSBpcyBub3RoaW5nIHRvIHJldHVybiB0by4NCi0gICAgICogQXJ0aWZpY2lhbGx5IGZvcmNlIGFuIGFzc2VydC4gKi8NCi0gICAgY29uZmlnQVNTRVJUKCBweEN1cnJlbnRUQ0IgPT0gTlVMTCApOw0KKwkvKiBOb3QgaW1wbGVtZW50ZWQgaW4gcG9ydHMgd2hlcmUgdGhlcmUgaXMgbm90aGluZyB0byByZXR1cm4gdG8uDQorCUFydGlmaWNpYWxseSBmb3JjZSBhbiBhc3NlcnQuICovDQorCWNvbmZpZ0FTU0VSVCggcHhDdXJyZW50VENCID09IE5VTEwgKTsNCiANCi0gICAgLyogVGhlIGZvbGxvd2luZyBsaW5lIGlzIGp1c3QgdG8gcHJldmVudCB0aGUgc3ltYm9sIGdldHRpbmcgb3B0aW1pc2VkIGF3YXkuICovDQotICAgICggdm9pZCApIHZUYXNrU3dpdGNoQ29udGV4dCgpOw0KKwkvKiBUaGUgZm9sbG93aW5nIGxpbmUgaXMganVzdCB0byBwcmV2ZW50IHRoZSBzeW1ib2wgZ2V0dGluZyBvcHRpbWlzZWQgYXdheS4gKi8NCisJKCB2b2lkICkgdlRhc2tTd2l0Y2hDb250ZXh0KCk7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKw0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL1JlbmVzYXMvUlg2MDAvcG9ydG1hY3JvLmggYi9wb3J0YWJsZS9SZW5lc2FzL1JYNjAwL3BvcnRtYWNyby5oCmluZGV4IDk0NTc1ZTYuLmFiMGQ2MDMgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL1JlbmVzYXMvUlg2MDAvcG9ydG1hY3JvLmgKKysrIGIvcG9ydGFibGUvUmVuZXNhcy9SWDYwMC9wb3J0bWFjcm8uaApAQCAtMjcsMTQgKzI3LDE0IEBACiANCiANCiAjaWZuZGVmIFBPUlRNQUNST19IDQotICAgICNkZWZpbmUgUE9SVE1BQ1JPX0gNCisjZGVmaW5lIFBPUlRNQUNST19IDQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgZXh0ZXJuICJDIiB7DQotICAgICNlbmRpZg0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KIA0KIC8qIEhhcmR3YXJlIHNwZWNpZmljcy4gKi8NCi0gICAgI2luY2x1ZGUgIm1hY2hpbmUuaCINCisjaW5jbHVkZSAibWFjaGluZS5oIg0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgKiBQb3J0IHNwZWNpZmljIGRlZmluaXRpb25zLg0KQEAgLTQ3LDk1ICs0Nyw5NiBAQAogICovDQogDQogLyogVHlwZSBkZWZpbml0aW9ucyAtIHRoZXNlIGFyZSBhIGJpdCBsZWdhY3kgYW5kIG5vdCByZWFsbHkgdXNlZCBub3csIG90aGVyIHRoYW4NCi0gKiBwb3J0U1RBQ0tfVFlQRSBhbmQgcG9ydEJBU0VfVFlQRS4gKi8NCi0gICAgI2RlZmluZSBwb3J0Q0hBUiAgICAgICAgICBjaGFyDQotICAgICNkZWZpbmUgcG9ydEZMT0FUICAgICAgICAgZmxvYXQNCi0gICAgI2RlZmluZSBwb3J0RE9VQkxFICAgICAgICBkb3VibGUNCi0gICAgI2RlZmluZSBwb3J0TE9ORyAgICAgICAgICBsb25nDQotICAgICNkZWZpbmUgcG9ydFNIT1JUICAgICAgICAgc2hvcnQNCi0gICAgI2RlZmluZSBwb3J0U1RBQ0tfVFlQRSAgICB1aW50MzJfdA0KLSAgICAjZGVmaW5lIHBvcnRCQVNFX1RZUEUgICAgIGxvbmcNCitwb3J0U1RBQ0tfVFlQRSBhbmQgcG9ydEJBU0VfVFlQRS4gKi8NCisjZGVmaW5lIHBvcnRDSEFSCQljaGFyDQorI2RlZmluZSBwb3J0RkxPQVQJCWZsb2F0DQorI2RlZmluZSBwb3J0RE9VQkxFCQlkb3VibGUNCisjZGVmaW5lIHBvcnRMT05HCQlsb25nDQorI2RlZmluZSBwb3J0U0hPUlQJCXNob3J0DQorI2RlZmluZSBwb3J0U1RBQ0tfVFlQRQl1aW50MzJfdA0KKyNkZWZpbmUgcG9ydEJBU0VfVFlQRQlsb25nDQogDQotICAgIHR5cGVkZWYgcG9ydFNUQUNLX1RZUEUgICBTdGFja1R5cGVfdDsNCi0gICAgdHlwZWRlZiBsb25nICAgICAgICAgICAgIEJhc2VUeXBlX3Q7DQotICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyAgICBVQmFzZVR5cGVfdDsNCit0eXBlZGVmIHBvcnRTVEFDS19UWVBFIFN0YWNrVHlwZV90Ow0KK3R5cGVkZWYgbG9uZyBCYXNlVHlwZV90Ow0KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBVQmFzZVR5cGVfdDsNCiANCi0gICAgI2lmICggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCi0gICAgICAgIHR5cGVkZWYgdWludDE2X3QgICAgIFRpY2tUeXBlX3Q7DQotICAgICAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgICAgICAgICAgICggVGlja1R5cGVfdCApIDB4ZmZmZg0KLSAgICAjZWxzZQ0KLSAgICAgICAgdHlwZWRlZiB1aW50MzJfdCAgICAgVGlja1R5cGVfdDsNCi0gICAgICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAgICAgICAgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQorI2lmKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KKwl0eXBlZGVmIHVpbnQxNl90IFRpY2tUeXBlX3Q7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIFRpY2tUeXBlX3QgKSAweGZmZmYNCisjZWxzZQ0KKwl0eXBlZGVmIHVpbnQzMl90IFRpY2tUeXBlX3Q7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwNCiANCi0vKiAzMi1iaXQgdGljayB0eXBlIG9uIGEgMzItYml0IGFyY2hpdGVjdHVyZSwgc28gcmVhZHMgb2YgdGhlIHRpY2sgY291bnQgZG8NCi0gKiBub3QgbmVlZCB0byBiZSBndWFyZGVkIHdpdGggYSBjcml0aWNhbCBzZWN0aW9uLiAqLw0KLSAgICAgICAgI2RlZmluZSBwb3J0VElDS19UWVBFX0lTX0FUT01JQyAgICAxDQotICAgICNlbmRpZg0KKwkvKiAzMi1iaXQgdGljayB0eXBlIG9uIGEgMzItYml0IGFyY2hpdGVjdHVyZSwgc28gcmVhZHMgb2YgdGhlIHRpY2sgY291bnQgZG8NCisJbm90IG5lZWQgdG8gYmUgZ3VhcmRlZCB3aXRoIGEgY3JpdGljYWwgc2VjdGlvbi4gKi8NCisJI2RlZmluZSBwb3J0VElDS19UWVBFX0lTX0FUT01JQyAxDQorI2VuZGlmDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogSGFyZHdhcmUgc3BlY2lmaWNzLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVCAgICA4ICAgICAgICAgLyogQ291bGQgbWFrZSBmb3VyLCBhY2NvcmRpbmcgdG8gbWFudWFsLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEggICAgICAtMQ0KLSAgICAjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUyAgICAoICggVGlja1R5cGVfdCApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KLSAgICAjZGVmaW5lIHBvcnROT1AoKSAgICBub3AoKQ0KKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UCQkJCTgJLyogQ291bGQgbWFrZSBmb3VyLCBhY2NvcmRpbmcgdG8gbWFudWFsLiAqLw0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJCQktMQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TCQkJCSggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQorI2RlZmluZSBwb3J0Tk9QKCkJCQkJCQlub3AoKQ0KIA0KIA0KLSAgICAjcHJhZ21hIGlubGluZV9hc20gdlBvcnRZaWVsZA0KLSAgICBzdGF0aWMgdm9pZCB2UG9ydFlpZWxkKCB2b2lkICkNCi0gICAgew0KLSAgICAgICAgLyogU2F2ZSBjbG9iYmVyZWQgcmVnaXN0ZXIgLSBtYXkgbm90IGFjdHVhbGx5IGJlIG5lY2Vzc2FyeSBpZiBpbmxpbmUgYXNtDQotICAgICAgICAgKiBmdW5jdGlvbnMgYXJlIGNvbnNpZGVyZWQgdG8gdXNlIHRoZSBzYW1lIHJ1bGVzIGFzIGZ1bmN0aW9uIGNhbGxzIGJ5IHRoZQ0KLSAgICAgICAgICogY29tcGlsZXIuICovDQotICAgICAgICBQVVNILkwgUjUNCi0gICAgICAgIC8qIFNldCBJVFUgU1dJTlRSLiAqLw0KLSAgICAgICAgTU9WLkwgIyA1NTM2OTYsIFI1DQotICAgICAgICAgICAgTU9WLkIgIyAxLCBbIFI1IF0NCi0gICAgICAgIC8qIFJlYWQgYmFjayB0byBlbnN1cmUgdGhlIHZhbHVlIGlzIHRha2VuIGJlZm9yZSBwcm9jZWVkaW5nLiAqLw0KLSAgICAgICAgTU9WLkxbIFI1IF0sIFI1DQotICAgICAgICAvKiBSZXN0b3JlIGNsb2JiZXJlZCByZWdpc3RlciB0byBpdHMgcHJldmlvdXMgdmFsdWUuICovDQotICAgICAgICBQT1AgUjUNCi0gICAgfQ0KLSAgICAjZGVmaW5lIHBvcnRZSUVMRCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdlBvcnRZaWVsZCgpDQotICAgICNkZWZpbmUgcG9ydFlJRUxEX0ZST01fSVNSKCB4ICkgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiggeCAhPSBwZEZBTFNFICkgcG9ydFlJRUxEKCkNCisjcHJhZ21hIGlubGluZV9hc20gdlBvcnRZaWVsZA0KK3N0YXRpYyB2b2lkIHZQb3J0WWllbGQoIHZvaWQgKQ0KK3sNCisJLyogU2F2ZSBjbG9iYmVyZWQgcmVnaXN0ZXIgLSBtYXkgbm90IGFjdHVhbGx5IGJlIG5lY2Vzc2FyeSBpZiBpbmxpbmUgYXNtDQorCWZ1bmN0aW9ucyBhcmUgY29uc2lkZXJlZCB0byB1c2UgdGhlIHNhbWUgcnVsZXMgYXMgZnVuY3Rpb24gY2FsbHMgYnkgdGhlDQorCWNvbXBpbGVyLiAqLw0KKwlQVVNILkwgUjUNCisJLyogU2V0IElUVSBTV0lOVFIuICovDQorCU1PVi5MICM1NTM2OTYsIFI1DQorCU1PVi5CICMxLCBbUjVdDQorCS8qIFJlYWQgYmFjayB0byBlbnN1cmUgdGhlIHZhbHVlIGlzIHRha2VuIGJlZm9yZSBwcm9jZWVkaW5nLiAqLw0KKwlNT1YuTCBbUjVdLCBSNQ0KKwkvKiBSZXN0b3JlIGNsb2JiZXJlZCByZWdpc3RlciB0byBpdHMgcHJldmlvdXMgdmFsdWUuICovDQorCVBPUCBSNQ0KK30NCisjZGVmaW5lIHBvcnRZSUVMRCgpCXZQb3J0WWllbGQoKQ0KKyNkZWZpbmUgcG9ydFlJRUxEX0ZST01fSVNSKCB4ICkJaWYoIHggIT0gcGRGQUxTRSApIHBvcnRZSUVMRCgpDQogDQogLyogVGhlc2UgbWFjcm9zIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LCBidXQgdGhyb3VnaCB0aGUNCi0gKiB0YXNrRU5URVJfQ1JJVElDQUwoKSBhbmQgdGFza0VYSVRfQ1JJVElDQUwoKSBtYWNyb3MuICBBbiBleHRyYSBjaGVjayBpcw0KLSAqIHBlcmZvcm1lZCBpZiBjb25maWdBU1NFUlQoKSBpcyBkZWZpbmVkIHRvIGVuc3VyZSBhbiBhc3NlcnRpb24gaGFuZGxlciBkb2VzIG5vdA0KLSAqIGluYWR2ZXJ0ZW50bHkgYXR0ZW1wdCB0byBsb3dlciB0aGUgSVBMIHdoZW4gdGhlIGNhbGwgdG8gYXNzZXJ0IHdhcyB0cmlnZ2VyZWQNCi0gKiBiZWNhdXNlIHRoZSBJUEwgdmFsdWUgd2FzIGZvdW5kIHRvIGJlIGFib3ZlCWNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWQ0KLSAqIHdoZW4gYW4gSVNSIHNhZmUgRnJlZVJUT1MgQVBJIGZ1bmN0aW9uIHdhcyBleGVjdXRlZC4gIElTUiBzYWZlIEZyZWVSVE9TIEFQSQ0KLSAqIGZ1bmN0aW9ucyBhcmUgdGhvc2UgdGhhdCBlbmQgaW4gRnJvbUlTUi4gIEZyZWVSVE9TIG1haW50YWlucyBhIHNlcGFyYXRlDQotICogaW50ZXJydXB0IEFQSSB0byBlbnN1cmUgQVBJIGZ1bmN0aW9uIGFuZCBpbnRlcnJ1cHQgZW50cnkgaXMgYXMgZmFzdCBhbmQgYXMNCi0gKiBzaW1wbGUgYXMgcG9zc2libGUuICovDQotICAgICNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRfaXBsKCAoIGxvbmcgKSAwICkNCi0gICAgI2lmZGVmIGNvbmZpZ0FTU0VSVA0KLSAgICAgICAgI2RlZmluZSBwb3J0QVNTRVJUX0lGX0lOVEVSUlVQVF9QUklPUklUWV9JTlZBTElEKCkgICAgY29uZmlnQVNTRVJUKCAoIGdldF9pcGwoKSA8PSBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgKSApDQotICAgICAgICAjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAgICAgICAgICAgICAgICAgICAgICBpZiggZ2V0X2lwbCgpIDwgY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkgc2V0X2lwbCggKCBsb25nICkgY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkNCi0gICAgI2Vsc2UNCi0gICAgICAgICNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpICAgICAgICAgICAgICAgICAgICAgIHNldF9pcGwoICggbG9uZyApIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSApDQotICAgICNlbmRpZg0KK3Rhc2tFTlRFUl9DUklUSUNBTCgpIGFuZCB0YXNrRVhJVF9DUklUSUNBTCgpIG1hY3Jvcy4gIEFuIGV4dHJhIGNoZWNrIGlzDQorcGVyZm9ybWVkIGlmIGNvbmZpZ0FTU0VSVCgpIGlzIGRlZmluZWQgdG8gZW5zdXJlIGFuIGFzc2VydGlvbiBoYW5kbGVyIGRvZXMgbm90DQoraW5hZHZlcnRlbnRseSBhdHRlbXB0IHRvIGxvd2VyIHRoZSBJUEwgd2hlbiB0aGUgY2FsbCB0byBhc3NlcnQgd2FzIHRyaWdnZXJlZA0KK2JlY2F1c2UgdGhlIElQTCB2YWx1ZSB3YXMgZm91bmQgdG8gYmUgYWJvdmUJY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZDQord2hlbiBhbiBJU1Igc2FmZSBGcmVlUlRPUyBBUEkgZnVuY3Rpb24gd2FzIGV4ZWN1dGVkLiAgSVNSIHNhZmUgRnJlZVJUT1MgQVBJDQorZnVuY3Rpb25zIGFyZSB0aG9zZSB0aGF0IGVuZCBpbiBGcm9tSVNSLiAgRnJlZVJUT1MgbWFpbnRhaW5zIGEgc2VwYXJhdGUNCitpbnRlcnJ1cHQgQVBJIHRvIGVuc3VyZSBBUEkgZnVuY3Rpb24gYW5kIGludGVycnVwdCBlbnRyeSBpcyBhcyBmYXN0IGFuZCBhcw0KK3NpbXBsZSBhcyBwb3NzaWJsZS4gKi8NCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpIAlzZXRfaXBsKCAoIGxvbmcgKSAwICkNCisjaWZkZWYgY29uZmlnQVNTRVJUDQorCSNkZWZpbmUgcG9ydEFTU0VSVF9JRl9JTlRFUlJVUFRfUFJJT1JJVFlfSU5WQUxJRCgpIGNvbmZpZ0FTU0VSVCggKCBnZXRfaXBsKCkgPD0gY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkgKQ0KKwkjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAJaWYoIGdldF9pcGwoKSA8IGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSApIHNldF9pcGwoICggbG9uZyApIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSApDQorI2Vsc2UNCisJI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgCXNldF9pcGwoICggbG9uZyApIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSApDQorI2VuZGlmDQogDQogLyogQ3JpdGljYWwgbmVzdGluZyBjb3VudHMgYXJlIHN0b3JlZCBpbiB0aGUgVENCLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRDUklUSUNBTF9ORVNUSU5HX0lOX1RDQiAgICAoIDEgKQ0KKyNkZWZpbmUgcG9ydENSSVRJQ0FMX05FU1RJTkdfSU5fVENCICggMSApDQogDQogLyogVGhlIGNyaXRpY2FsIG5lc3RpbmcgZnVuY3Rpb25zIGRlZmluZWQgd2l0aGluIHRhc2tzLmMuICovDQotICAgIGV4dGVybiB2b2lkIHZUYXNrRW50ZXJDcml0aWNhbCggdm9pZCApOw0KLSAgICBleHRlcm4gdm9pZCB2VGFza0V4aXRDcml0aWNhbCggdm9pZCApOw0KLSAgICAjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZUYXNrRW50ZXJDcml0aWNhbCgpDQotICAgICNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdlRhc2tFeGl0Q3JpdGljYWwoKQ0KK2V4dGVybiB2b2lkIHZUYXNrRW50ZXJDcml0aWNhbCggdm9pZCApOw0KK2V4dGVybiB2b2lkIHZUYXNrRXhpdENyaXRpY2FsKCB2b2lkICk7DQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKQl2VGFza0VudGVyQ3JpdGljYWwoKQ0KKyNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKQkJdlRhc2tFeGl0Q3JpdGljYWwoKQ0KIA0KIC8qIEFzIHRoaXMgcG9ydCBhbGxvd3MgaW50ZXJydXB0IG5lc3RpbmcuLi4gKi8NCi0gICAgI2RlZmluZSBwb3J0U0VUX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfaXBsKCk7IHNldF9pcGwoICggbG9uZyApIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSApDQotICAgICNkZWZpbmUgcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCB1eFNhdmVkSW50ZXJydXB0U3RhdHVzICkgICAgc2V0X2lwbCggKCBsb25nICkgdXhTYXZlZEludGVycnVwdFN0YXR1cyApDQorI2RlZmluZSBwb3J0U0VUX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCkgZ2V0X2lwbCgpOyBzZXRfaXBsKCAoIGxvbmcgKSBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgKQ0KKyNkZWZpbmUgcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCB1eFNhdmVkSW50ZXJydXB0U3RhdHVzICkgc2V0X2lwbCggKCBsb25nICkgdXhTYXZlZEludGVycnVwdFN0YXR1cyApDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQotICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KLSAgICAjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgICAgICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgfQ0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQogDQogI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvUmVuZXNhcy9SWDYwMHYyL3BvcnQuYyBiL3BvcnRhYmxlL1JlbmVzYXMvUlg2MDB2Mi9wb3J0LmMKaW5kZXggZWVlMDgyYy4uMTE2OTA4MiAxMDA2NDQKLS0tIGEvcG9ydGFibGUvUmVuZXNhcy9SWDYwMHYyL3BvcnQuYworKysgYi9wb3J0YWJsZS9SZW5lc2FzL1JYNjAwdjIvcG9ydC5jCkBAIC0yNiw4ICsyNiw4IEBACiAgKi8NCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgUlg2MDAgcG9ydC4NCi0qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorICogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFibGUuaCBmb3IgdGhlIFJYNjAwIHBvcnQuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBTY2hlZHVsZXIgaW5jbHVkZXMuICovDQogI2luY2x1ZGUgIkZyZWVSVE9TLmgiDQpAQCAtMzgsMjMgKzM4LDIzIEBACiANCiAvKiBIYXJkd2FyZSBzcGVjaWZpY3MuICovDQogI2lmIGRlZmluZWQoIGNvbmZpZ0lOQ0xVREVfUExBVEZPUk1fSF9JTlNURUFEX09GX0lPREVGSU5FX0ggKSAmJiAoIGNvbmZpZ0lOQ0xVREVfUExBVEZPUk1fSF9JTlNURUFEX09GX0lPREVGSU5FX0ggPT0gMSApDQotICAgICNpbmNsdWRlICJwbGF0Zm9ybS5oIg0KKwkjaW5jbHVkZSAicGxhdGZvcm0uaCINCiAjZWxzZQ0KLSAgICAjaW5jbHVkZSAiaW9kZWZpbmUuaCINCisJI2luY2x1ZGUgImlvZGVmaW5lLmgiDQogI2VuZGlmDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGFza3Mgc2hvdWxkIHN0YXJ0IHdpdGggaW50ZXJydXB0cyBlbmFibGVkIGFuZCBpbiBTdXBlcnZpc29yIG1vZGUsIHRoZXJlZm9yZQ0KLSAqIFBTVyBpcyBzZXQgd2l0aCBVIGFuZCBJIHNldCwgYW5kIFBNIGFuZCBJUEwgY2xlYXIuICovDQorUFNXIGlzIHNldCB3aXRoIFUgYW5kIEkgc2V0LCBhbmQgUE0gYW5kIElQTCBjbGVhci4gKi8NCiAjZGVmaW5lIHBvcnRJTklUSUFMX1BTVyAgICAgKCAoIFN0YWNrVHlwZV90ICkgMHgwMDAzMDAwMCApDQogI2RlZmluZSBwb3J0SU5JVElBTF9GUFNXICAgICggKCBTdGFja1R5cGVfdCApIDB4MDAwMDAxMDAgKQ0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFRoZSBmb2xsb3dpbmcgbGluZXMgYXJlIHRvIGVuc3VyZSB2U29mdHdhcmVJbnRlcnJ1cHRFbnRyeSBjYW4gYmUgcmVmZXJlbmNlZCwNCi0gKiBhbmQgdGhlcmVmb3JlIGluc3RhbGxlZCBpbiB0aGUgdmVjdG9yIHRhYmxlLCB3aGVuIHRoZSBGcmVlUlRPUyBjb2RlIGlzIGJ1aWx0DQotICogYXMgYSBsaWJyYXJ5LiAqLw0KKyBhbmQgdGhlcmVmb3JlIGluc3RhbGxlZCBpbiB0aGUgdmVjdG9yIHRhYmxlLCB3aGVuIHRoZSBGcmVlUlRPUyBjb2RlIGlzIGJ1aWx0DQorYXMgYSBsaWJyYXJ5LiAqLw0KIGV4dGVybiBCYXNlVHlwZV90IHZTb2Z0d2FyZUludGVycnVwdEVudHJ5Ow0KIGNvbnN0IEJhc2VUeXBlX3QgKiBwX3ZTb2Z0d2FyZUludGVycnVwdEVudHJ5ID0gJnZTb2Z0d2FyZUludGVycnVwdEVudHJ5Ow0KIA0KQEAgLTg0LDggKzg0LDggQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFRoaXMgaXMgYWNjZXNzZWQgYnkgdGhlIGlubGluZSBhc3NlbWJsZXIgZnVuY3Rpb25zIHNvIGlzIGZpbGUgc2NvcGUgZm9yDQotICogY29udmVuaWVuY2UuICovDQotZXh0ZXJuIHZvaWQgKiBweEN1cnJlbnRUQ0I7DQorY29udmVuaWVuY2UuICovDQorZXh0ZXJuIHZvaWQgKnB4Q3VycmVudFRDQjsNCiBleHRlcm4gdm9pZCB2VGFza1N3aXRjaENvbnRleHQoIHZvaWQgKTsNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCkBAIC05MywyNzggKzkzLDI3MiBAQAogLyoNCiAgKiBTZWUgaGVhZGVyIGZpbGUgZm9yIGRlc2NyaXB0aW9uLg0KICAqLw0KLVN0YWNrVHlwZV90ICogcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqIHB4VG9wT2ZTdGFjaywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFza0Z1bmN0aW9uX3QgcHhDb2RlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICogcHZQYXJhbWV0ZXJzICkNCitTdGFja1R5cGVfdCAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqcHhUb3BPZlN0YWNrLCBUYXNrRnVuY3Rpb25fdCBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycyApDQogew0KLSAgICAvKiBSMCBpcyBub3QgaW5jbHVkZWQgYXMgaXQgaXMgdGhlIHN0YWNrIHBvaW50ZXIuICovDQorCS8qIFIwIGlzIG5vdCBpbmNsdWRlZCBhcyBpdCBpcyB0aGUgc3RhY2sgcG9pbnRlci4gKi8NCiANCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MDA7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gcG9ydElOSVRJQUxfUFNXOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBweENvZGU7DQorCSpweFRvcE9mU3RhY2sgPSAweDAwOw0KKwlweFRvcE9mU3RhY2stLTsNCisgCSpweFRvcE9mU3RhY2sgPSBwb3J0SU5JVElBTF9QU1c7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB4Q29kZTsNCiANCi0gICAgLyogV2hlbiBkZWJ1Z2dpbmcgaXQgY2FuIGJlIHVzZWZ1bCBpZiBldmVyeSByZWdpc3RlciBpcyBzZXQgdG8gYSBrbm93bg0KLSAgICAgKiB2YWx1ZS4gIE90aGVyd2lzZSBjb2RlIHNwYWNlIGNhbiBiZSBzYXZlZCBieSBqdXN0IHNldHRpbmcgdGhlIHJlZ2lzdGVycw0KLSAgICAgKiB0aGF0IG5lZWQgdG8gYmUgc2V0LiAqLw0KLSAgICAjaWZkZWYgVVNFX0ZVTExfUkVHSVNURVJfSU5JVElBTElTQVRJT04NCi0gICAgICAgIHsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gMHhmZmZmZmZmZjsgLyogcjE1LiAqLw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweGVlZWVlZWVlOw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweGRkZGRkZGRkOw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweGNjY2NjY2NjOw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweGJiYmJiYmJiOw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweGFhYWFhYWFhOw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweDk5OTk5OTk5Ow0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweDg4ODg4ODg4Ow0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweDc3Nzc3Nzc3Ow0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweDY2NjY2NjY2Ow0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweDU1NTU1NTU1Ow0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweDQ0NDQ0NDQ0Ow0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweDMzMzMzMzMzOw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAweDIyMjIyMjIyOw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgfQ0KLSAgICAjZWxzZSAvKiBpZmRlZiBVU0VfRlVMTF9SRUdJU1RFUl9JTklUSUFMSVNBVElPTiAqLw0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjayAtPSAxNTsNCi0gICAgICAgIH0NCi0gICAgI2VuZGlmIC8qIGlmZGVmIFVTRV9GVUxMX1JFR0lTVEVSX0lOSVRJQUxJU0FUSU9OICovDQorCS8qIFdoZW4gZGVidWdnaW5nIGl0IGNhbiBiZSB1c2VmdWwgaWYgZXZlcnkgcmVnaXN0ZXIgaXMgc2V0IHRvIGEga25vd24NCisJdmFsdWUuICBPdGhlcndpc2UgY29kZSBzcGFjZSBjYW4gYmUgc2F2ZWQgYnkganVzdCBzZXR0aW5nIHRoZSByZWdpc3RlcnMNCisJdGhhdCBuZWVkIHRvIGJlIHNldC4gKi8NCisJI2lmZGVmIFVTRV9GVUxMX1JFR0lTVEVSX0lOSVRJQUxJU0FUSU9ODQorCXsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4ZmZmZmZmZmY7CS8qIHIxNS4gKi8NCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4ZWVlZWVlZWU7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweGRkZGRkZGRkOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHhjY2NjY2NjYzsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4YmJiYmJiYmI7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweGFhYWFhYWFhOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHg5OTk5OTk5OTsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4ODg4ODg4ODg7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweDc3Nzc3Nzc3Ow0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHg2NjY2NjY2NjsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4NTU1NTU1NTU7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAweDQ0NDQ0NDQ0Ow0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gMHgzMzMzMzMzMzsNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9IDB4MjIyMjIyMjI7DQorCQlweFRvcE9mU3RhY2stLTsNCisJfQ0KKwkjZWxzZQ0KKwl7DQorCQlweFRvcE9mU3RhY2sgLT0gMTU7DQorCX0NCisJI2VuZGlmDQogDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHZQYXJhbWV0ZXJzOyAvKiBSMSAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IHBvcnRJTklUSUFMX0ZQU1c7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMHgxMTExMTExMTsgLyogQWNjdW11bGF0b3IgMC4gKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAweDIyMjIyMjIyOyAvKiBBY2N1bXVsYXRvciAwLiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MzMzMzMzMzM7IC8qIEFjY3VtdWxhdG9yIDAuICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMHg0NDQ0NDQ0NDsgLyogQWNjdW11bGF0b3IgMS4gKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAweDU1NTU1NTU1OyAvKiBBY2N1bXVsYXRvciAxLiAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4NjY2NjY2NjY7IC8qIEFjY3VtdWxhdG9yIDEuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcHZQYXJhbWV0ZXJzOyAvKiBSMSAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IHBvcnRJTklUSUFMX0ZQU1c7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgxMTExMTExMTsgLyogQWNjdW11bGF0b3IgMC4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDIyMjIyMjIyOyAvKiBBY2N1bXVsYXRvciAwLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MzMzMzMzMzM7IC8qIEFjY3VtdWxhdG9yIDAuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHg0NDQ0NDQ0NDsgLyogQWNjdW11bGF0b3IgMS4gKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDU1NTU1NTU1OyAvKiBBY2N1bXVsYXRvciAxLiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4NjY2NjY2NjY7IC8qIEFjY3VtdWxhdG9yIDEuICovDQogDQotICAgIHJldHVybiBweFRvcE9mU3RhY2s7DQorCXJldHVybiBweFRvcE9mU3RhY2s7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIEJhc2VUeXBlX3QgeFBvcnRTdGFydFNjaGVkdWxlciggdm9pZCApDQogew0KLSAgICBleHRlcm4gdm9pZCB2QXBwbGljYXRpb25TZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdkFwcGxpY2F0aW9uU2V0dXBUaW1lckludGVycnVwdCggdm9pZCApOw0KIA0KLSAgICAvKiBVc2UgcHhDdXJyZW50VENCIGp1c3Qgc28gaXQgZG9lcyBub3QgZ2V0IG9wdGltaXNlZCBhd2F5LiAqLw0KLSAgICBpZiggcHhDdXJyZW50VENCICE9IE5VTEwgKQ0KLSAgICB7DQotICAgICAgICAvKiBDYWxsIGFuIGFwcGxpY2F0aW9uIGZ1bmN0aW9uIHRvIHNldCB1cCB0aGUgdGltZXIgdGhhdCB3aWxsIGdlbmVyYXRlIHRoZQ0KLSAgICAgICAgICogdGljayBpbnRlcnJ1cHQuICBUaGlzIHdheSB0aGUgYXBwbGljYXRpb24gY2FuIGRlY2lkZSB3aGljaCBwZXJpcGhlcmFsIHRvDQotICAgICAgICAgKiB1c2UuICBBIGRlbW8gYXBwbGljYXRpb24gaXMgcHJvdmlkZWQgdG8gc2hvdyBhIHN1aXRhYmxlIGV4YW1wbGUuICovDQotICAgICAgICB2QXBwbGljYXRpb25TZXR1cFRpbWVySW50ZXJydXB0KCk7DQorCS8qIFVzZSBweEN1cnJlbnRUQ0IganVzdCBzbyBpdCBkb2VzIG5vdCBnZXQgb3B0aW1pc2VkIGF3YXkuICovDQorCWlmKCBweEN1cnJlbnRUQ0IgIT0gTlVMTCApDQorCXsNCisJCS8qIENhbGwgYW4gYXBwbGljYXRpb24gZnVuY3Rpb24gdG8gc2V0IHVwIHRoZSB0aW1lciB0aGF0IHdpbGwgZ2VuZXJhdGUgdGhlDQorCQl0aWNrIGludGVycnVwdC4gIFRoaXMgd2F5IHRoZSBhcHBsaWNhdGlvbiBjYW4gZGVjaWRlIHdoaWNoIHBlcmlwaGVyYWwgdG8NCisJCXVzZS4gIEEgZGVtbyBhcHBsaWNhdGlvbiBpcyBwcm92aWRlZCB0byBzaG93IGEgc3VpdGFibGUgZXhhbXBsZS4gKi8NCisJCXZBcHBsaWNhdGlvblNldHVwVGltZXJJbnRlcnJ1cHQoKTsNCiANCi0gICAgICAgIC8qIEVuYWJsZSB0aGUgc29mdHdhcmUgaW50ZXJydXB0LiAqLw0KLSAgICAgICAgX0lFTiggX0lDVV9TV0lOVCApID0gMTsNCisJCS8qIEVuYWJsZSB0aGUgc29mdHdhcmUgaW50ZXJydXB0LiAqLw0KKwkJX0lFTiggX0lDVV9TV0lOVCApID0gMTsNCiANCi0gICAgICAgIC8qIEVuc3VyZSB0aGUgc29mdHdhcmUgaW50ZXJydXB0IGlzIGNsZWFyLiAqLw0KLSAgICAgICAgX0lSKCBfSUNVX1NXSU5UICkgPSAwOw0KKwkJLyogRW5zdXJlIHRoZSBzb2Z0d2FyZSBpbnRlcnJ1cHQgaXMgY2xlYXIuICovDQorCQlfSVIoIF9JQ1VfU1dJTlQgKSA9IDA7DQogDQotICAgICAgICAvKiBFbnN1cmUgdGhlIHNvZnR3YXJlIGludGVycnVwdCBpcyBzZXQgdG8gdGhlIGtlcm5lbCBwcmlvcml0eS4gKi8NCi0gICAgICAgIF9JUFIoIF9JQ1VfU1dJTlQgKSA9IGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFk7DQorCQkvKiBFbnN1cmUgdGhlIHNvZnR3YXJlIGludGVycnVwdCBpcyBzZXQgdG8gdGhlIGtlcm5lbCBwcmlvcml0eS4gKi8NCisJCV9JUFIoIF9JQ1VfU1dJTlQgKSA9IGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFk7DQogDQotICAgICAgICAvKiBTdGFydCB0aGUgZmlyc3QgdGFzay4gKi8NCi0gICAgICAgIHBydlN0YXJ0Rmlyc3RUYXNrKCk7DQotICAgIH0NCisJCS8qIFN0YXJ0IHRoZSBmaXJzdCB0YXNrLiAqLw0KKwkJcHJ2U3RhcnRGaXJzdFRhc2soKTsNCisJfQ0KIA0KLSAgICAvKiBKdXN0IHRvIG1ha2Ugc3VyZSB0aGUgZnVuY3Rpb24gaXMgbm90IG9wdGltaXNlZCBhd2F5LiAqLw0KLSAgICAoIHZvaWQgKSB2U29mdHdhcmVJbnRlcnJ1cHRJU1IoKTsNCisJLyogSnVzdCB0byBtYWtlIHN1cmUgdGhlIGZ1bmN0aW9uIGlzIG5vdCBvcHRpbWlzZWQgYXdheS4gKi8NCisJKCB2b2lkICkgdlNvZnR3YXJlSW50ZXJydXB0SVNSKCk7DQogDQotICAgIC8qIFNob3VsZCBub3QgZ2V0IGhlcmUuICovDQotICAgIHJldHVybiBwZEZBSUw7DQorCS8qIFNob3VsZCBub3QgZ2V0IGhlcmUuICovDQorCXJldHVybiBwZEZBSUw7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KICNwcmFnbWEgaW5saW5lX2FzbSBwcnZTdGFydEZpcnN0VGFzaw0KIHN0YXRpYyB2b2lkIHBydlN0YXJ0Rmlyc3RUYXNrKCB2b2lkICkNCiB7DQotICAgIC8qIFdoZW4gc3RhcnRpbmcgdGhlIHNjaGVkdWxlciB0aGVyZSBpcyBub3RoaW5nIHRoYXQgbmVlZHMgbW92aW5nIHRvIHRoZQ0KLSAgICAgKiBpbnRlcnJ1cHQgc3RhY2sgYmVjYXVzZSB0aGUgZnVuY3Rpb24gaXMgbm90IGNhbGxlZCBmcm9tIGFuIGludGVycnVwdC4NCi0gICAgICogSnVzdCBlbnN1cmUgdGhlIGN1cnJlbnQgc3RhY2sgaXMgdGhlIHVzZXIgc3RhY2suICovDQotICAgIFNFVFBTVyBVDQorCS8qIFdoZW4gc3RhcnRpbmcgdGhlIHNjaGVkdWxlciB0aGVyZSBpcyBub3RoaW5nIHRoYXQgbmVlZHMgbW92aW5nIHRvIHRoZQ0KKwlpbnRlcnJ1cHQgc3RhY2sgYmVjYXVzZSB0aGUgZnVuY3Rpb24gaXMgbm90IGNhbGxlZCBmcm9tIGFuIGludGVycnVwdC4NCisJSnVzdCBlbnN1cmUgdGhlIGN1cnJlbnQgc3RhY2sgaXMgdGhlIHVzZXIgc3RhY2suICovDQorCVNFVFBTVwlVDQogDQotICAgIC8qIE9idGFpbiB0aGUgbG9jYXRpb24gb2YgdGhlIHN0YWNrIGFzc29jaWF0ZWQgd2l0aCB3aGljaCBldmVyIHRhc2sNCi0gICAgICogcHhDdXJyZW50VENCIGlzIGN1cnJlbnRseSBwb2ludGluZyB0by4gKi8NCi0gICAgTU9WLkwgICAjIF9weEN1cnJlbnRUQ0IsIFIxNQ0KLSAgICAgICAgTU9WLkxbIFIxNSBdLCBSMTUNCi0gICAgICAgIE1PVi5MWyBSMTUgXSwgUjANCisJLyogT2J0YWluIHRoZSBsb2NhdGlvbiBvZiB0aGUgc3RhY2sgYXNzb2NpYXRlZCB3aXRoIHdoaWNoIGV2ZXIgdGFzaw0KKwlweEN1cnJlbnRUQ0IgaXMgY3VycmVudGx5IHBvaW50aW5nIHRvLiAqLw0KKwlNT1YuTAkjX3B4Q3VycmVudFRDQiwgUjE1DQorCU1PVi5MCVtSMTVdLCBSMTUNCisJTU9WLkwJW1IxNV0sIFIwDQogDQotICAgIC8qIFJlc3RvcmUgdGhlIHJlZ2lzdGVycyBmcm9tIHRoZSBzdGFjayBvZiB0aGUgdGFzayBwb2ludGVkIHRvIGJ5DQotICAgICAqIHB4Q3VycmVudFRDQi4gKi8NCi0gICAgUE9QIFIxNQ0KLSAgICBNVlRBQ0xPIFIxNSwgQTAgLyogQWNjdW11bGF0b3IgbG93IDMyIGJpdHMuICovDQotICAgIFBPUCBSMTUNCi0gICAgTVZUQUNISSBSMTUsIEEwIC8qIEFjY3VtdWxhdG9yIGhpZ2ggMzIgYml0cy4gKi8NCi0gICAgUE9QIFIxNQ0KLSAgICBNVlRBQ0dVIFIxNSwgQTAgLyogQWNjdW11bGF0b3IgZ3VhcmQuICovDQotICAgIFBPUCBSMTUNCi0gICAgTVZUQUNMTyBSMTUsIEExIC8qIEFjY3VtdWxhdG9yIGxvdyAzMiBiaXRzLiAqLw0KLSAgICBQT1AgUjE1DQotICAgIE1WVEFDSEkgUjE1LCBBMSAvKiBBY2N1bXVsYXRvciBoaWdoIDMyIGJpdHMuICovDQotICAgIFBPUCBSMTUNCi0gICAgTVZUQUNHVSBSMTUsIEExIC8qIEFjY3VtdWxhdG9yIGd1YXJkLiAqLw0KLSAgICBQT1AgUjE1DQotICAgIE1WVEMgUjE1LCBGUFNXICAvKiBGbG9hdGluZyBwb2ludCBzdGF0dXMgd29yZC4gKi8NCi0gICAgUE9QTSBSMSAtIFIxNSAgIC8qIFIxIHRvIFIxNSAtIFIwIGlzIG5vdCBpbmNsdWRlZCBhcyBpdCBpcyB0aGUgU1AuICovDQotICAgIFJURSAgICAgICAgICAgICAvKiBUaGlzIHBvcHMgdGhlIHJlbWFpbmluZyByZWdpc3RlcnMuICovDQorCS8qIFJlc3RvcmUgdGhlIHJlZ2lzdGVycyBmcm9tIHRoZSBzdGFjayBvZiB0aGUgdGFzayBwb2ludGVkIHRvIGJ5DQorCXB4Q3VycmVudFRDQi4gKi8NCisgICAgUE9QCQlSMTUNCisgICAgTVZUQUNMTwlSMTUsIEEwCQkvKiBBY2N1bXVsYXRvciBsb3cgMzIgYml0cy4gKi8NCisgICAgUE9QCQlSMTUNCisgICAgTVZUQUNISQlSMTUsIEEwCQkvKiBBY2N1bXVsYXRvciBoaWdoIDMyIGJpdHMuICovDQorICAgIFBPUAkJUjE1DQorICAgIE1WVEFDR1UJUjE1LCBBMAkJLyogQWNjdW11bGF0b3IgZ3VhcmQuICovDQorICAgIFBPUAkJUjE1DQorICAgIE1WVEFDTE8JUjE1LCBBMQkJLyogQWNjdW11bGF0b3IgbG93IDMyIGJpdHMuICovDQorICAgIFBPUAkJUjE1DQorICAgIE1WVEFDSEkJUjE1LCBBMQkJLyogQWNjdW11bGF0b3IgaGlnaCAzMiBiaXRzLiAqLw0KKyAgICBQT1AJCVIxNQ0KKyAgICBNVlRBQ0dVCVIxNSwgQTEJCS8qIEFjY3VtdWxhdG9yIGd1YXJkLiAqLw0KKyAgICBQT1AJCVIxNQ0KKyAgICBNVlRDCVIxNSxGUFNXIAkvKiBGbG9hdGluZyBwb2ludCBzdGF0dXMgd29yZC4gKi8NCisgICAgUE9QTQlSMS1SMTUgCQkvKiBSMSB0byBSMTUgLSBSMCBpcyBub3QgaW5jbHVkZWQgYXMgaXQgaXMgdGhlIFNQLiAqLw0KKyAgICBSVEUJCQkJCS8qIFRoaXMgcG9wcyB0aGUgcmVtYWluaW5nIHJlZ2lzdGVycy4gKi8NCiAgICAgTk9QDQotICAgICAgICBOT1ANCisgICAgTk9QDQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KICNwcmFnbWEgaW50ZXJydXB0ICggdlRpY2tJU1IoIHZlY3QgPSBfVkVDVCggY29uZmlnVElDS19WRUNUT1IgKSwgZW5hYmxlICkgKQ0KIHZvaWQgdlRpY2tJU1IoIHZvaWQgKQ0KIHsNCi0gICAgLyogSW5jcmVtZW50IHRoZSB0aWNrLCBhbmQgcGVyZm9ybSBhbnkgcHJvY2Vzc2luZyB0aGUgbmV3IHRpY2sgdmFsdWUNCi0gICAgICogbmVjZXNzaXRhdGVzLiAqLw0KLSAgICBzZXRfaXBsKCBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgKTsNCi0gICAgew0KLSAgICAgICAgaWYoIHhUYXNrSW5jcmVtZW50VGljaygpICE9IHBkRkFMU0UgKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHRhc2tZSUVMRCgpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotDQotICAgIHNldF9pcGwoIGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkgKTsNCisJLyogSW5jcmVtZW50IHRoZSB0aWNrLCBhbmQgcGVyZm9ybSBhbnkgcHJvY2Vzc2luZyB0aGUgbmV3IHRpY2sgdmFsdWUNCisJbmVjZXNzaXRhdGVzLiAqLw0KKwlzZXRfaXBsKCBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgKTsNCisJew0KKwkJaWYoIHhUYXNrSW5jcmVtZW50VGljaygpICE9IHBkRkFMU0UgKQ0KKwkJew0KKwkJCXRhc2tZSUVMRCgpOw0KKwkJfQ0KKwl9DQorCXNldF9pcGwoIGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkgKTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogdm9pZCB2U29mdHdhcmVJbnRlcnJ1cHRJU1IoIHZvaWQgKQ0KIHsNCi0gICAgcHJ2WWllbGRIYW5kbGVyKCk7DQorCXBydllpZWxkSGFuZGxlcigpOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAjcHJhZ21hIGlubGluZV9hc20gcHJ2WWllbGRIYW5kbGVyDQogc3RhdGljIHZvaWQgcHJ2WWllbGRIYW5kbGVyKCB2b2lkICkNCiB7DQotICAgIC8qIFJlLWVuYWJsZSBpbnRlcnJ1cHRzLiAqLw0KLSAgICBTRVRQU1cgSQ0KKwkvKiBSZS1lbmFibGUgaW50ZXJydXB0cy4gKi8NCisJU0VUUFNXCUkNCiANCi0gICAgLyogTW92ZSB0aGUgZGF0YSB0aGF0IHdhcyBhdXRvbWF0aWNhbGx5IHB1c2hlZCBvbnRvIHRoZSBpbnRlcnJ1cHQgc3RhY2sgd2hlbg0KLSAgICAgKiB0aGUgaW50ZXJydXB0IG9jY3VycmVkIGZyb20gdGhlIGludGVycnVwdCBzdGFjayB0byB0aGUgdXNlciBzdGFjay4NCi0gICAgICoNCi0gICAgICogUjE1IGlzIHNhdmVkIGJlZm9yZSBpdCBpcyBjbG9iYmVyZWQuICovDQotICAgIFBVU0guTCBSMTUNCisJLyogTW92ZSB0aGUgZGF0YSB0aGF0IHdhcyBhdXRvbWF0aWNhbGx5IHB1c2hlZCBvbnRvIHRoZSBpbnRlcnJ1cHQgc3RhY2sgd2hlbg0KKwl0aGUgaW50ZXJydXB0IG9jY3VycmVkIGZyb20gdGhlIGludGVycnVwdCBzdGFjayB0byB0aGUgdXNlciBzdGFjay4NCiANCi0gICAgLyogUmVhZCB0aGUgdXNlciBzdGFjayBwb2ludGVyLiAqLw0KLSAgICBNVkZDIFVTUCwgUjE1DQorCVIxNSBpcyBzYXZlZCBiZWZvcmUgaXQgaXMgY2xvYmJlcmVkLiAqLw0KKwlQVVNILkwJUjE1DQogDQotICAgIC8qIE1vdmUgdGhlIGFkZHJlc3MgZG93biB0byB0aGUgZGF0YSBiZWluZyBtb3ZlZC4gKi8NCi0gICAgICAgICBTVUIgICAgICMgMTIsIFIxNQ0KLSAgICBNVlRDIFIxNSwgVVNQDQorCS8qIFJlYWQgdGhlIHVzZXIgc3RhY2sgcG9pbnRlci4gKi8NCisJTVZGQwlVU1AsIFIxNQ0KIA0KLSAgICAvKiBDb3B5IHRoZSBkYXRhIGFjcm9zcy4gKi8NCi0gICAgICAgICBNT1YuTFsgUjAgXSwgWyBSMTUgXTsNCi0gICAgUjE1DQorCS8qIE1vdmUgdGhlIGFkZHJlc3MgZG93biB0byB0aGUgZGF0YSBiZWluZyBtb3ZlZC4gKi8NCisJU1VCCQkjMTIsIFIxNQ0KKwlNVlRDCVIxNSwgVVNQDQogDQotICAgIE1PVi5MICAgNFsgUjAgXSwgNFsgUjE1IF07DQotICAgIFBDDQotICAgIE1PVi5MICAgOFsgUjAgXSwgOFsgUjE1IF07DQotICAgIFBTVw0KKwkvKiBDb3B5IHRoZSBkYXRhIGFjcm9zcy4gKi8NCisJTU9WLkwJWyBSMCBdLCBbIFIxNSBdIDsgUjE1DQorCU1PVi5MIAk0WyBSMCBdLCA0WyBSMTUgXSAgOyBQQw0KKwlNT1YuTAk4WyBSMCBdLCA4WyBSMTUgXSAgOyBQU1cNCiANCi0gICAgLyogTW92ZSB0aGUgaW50ZXJydXB0IHN0YWNrIHBvaW50ZXIgdG8gaXRzIG5ldyBjb3JyZWN0IHBvc2l0aW9uLiAqLw0KLSAgICAgICAgQUREICMgMTIsIFIwDQorCS8qIE1vdmUgdGhlIGludGVycnVwdCBzdGFjayBwb2ludGVyIHRvIGl0cyBuZXcgY29ycmVjdCBwb3NpdGlvbi4gKi8NCisJQURECSMxMiwgUjANCiANCi0gICAgLyogQWxsIHRoZSByZXN0IG9mIHRoZSByZWdpc3RlcnMgYXJlIHNhdmVkIGRpcmVjdGx5IHRvIHRoZSB1c2VyIHN0YWNrLiAqLw0KLSAgICBTRVRQU1cgVQ0KKwkvKiBBbGwgdGhlIHJlc3Qgb2YgdGhlIHJlZ2lzdGVycyBhcmUgc2F2ZWQgZGlyZWN0bHkgdG8gdGhlIHVzZXIgc3RhY2suICovDQorCVNFVFBTVwlVDQogDQotICAgIC8qIFNhdmUgdGhlIHJlc3Qgb2YgdGhlIGdlbmVyYWwgcmVnaXN0ZXJzIChSMTUgaGFzIGJlZW4gc2F2ZWQgYWxyZWFkeSkuICovDQotICAgIFBVU0hNIFIxIC0gUjE0DQorCS8qIFNhdmUgdGhlIHJlc3Qgb2YgdGhlIGdlbmVyYWwgcmVnaXN0ZXJzIChSMTUgaGFzIGJlZW4gc2F2ZWQgYWxyZWFkeSkuICovDQorCVBVU0hNCVIxLVIxNA0KIA0KLSAgICAvKiBTYXZlIHRoZSBGUFNXIGFuZCBhY2N1bXVsYXRvcnMuICovDQotICAgIE1WRkMgRlBTVywgUjE1DQotICAgICAgICBQVVNILkwgUjE1DQotICAgICAgICBNVkZBQ0dVICMgMCwgQTEsIFIxNQ0KLSAgICAgICAgUFVTSC5MIFIxNQ0KLSAgICAgICAgTVZGQUNISSAjIDAsIEExLCBSMTUNCi0gICAgICAgIFBVU0guTCBSMTUNCi0gICAgICAgIE1WRkFDTE8gIyAwLCBBMSwgUjE1Ow0KLSAgICBMb3cgb3JkZXIgd29yZC4NCi0gICAgICAgUFVTSC5MIFIxNQ0KLSAgICAgICAgTVZGQUNHVSAjIDAsIEEwLCBSMTUNCi0gICAgICAgIFBVU0guTCBSMTUNCi0gICAgICAgIE1WRkFDSEkgIyAwLCBBMCwgUjE1DQotICAgICAgICBQVVNILkwgUjE1DQotICAgICAgICBNVkZBQ0xPICMgMCwgQTAsIFIxNTsNCi0gICAgTG93IG9yZGVyIHdvcmQuDQotICAgICAgIFBVU0guTCBSMTUNCisJLyogU2F2ZSB0aGUgRlBTVyBhbmQgYWNjdW11bGF0b3JzLiAqLw0KKwlNVkZDCUZQU1csIFIxNQ0KKwlQVVNILkwJUjE1DQorCU1WRkFDR1UJIzAsIEExLCBSMTUNCisJUFVTSC5MCVIxNQ0KKwlNVkZBQ0hJCSMwLCBBMSwgUjE1DQorCVBVU0guTAlSMTUNCisJTVZGQUNMTwkjMCwgQTEsIFIxNQk7IExvdyBvcmRlciB3b3JkLg0KKwlQVVNILkwJUjE1DQorCU1WRkFDR1UJIzAsIEEwLCBSMTUNCisJUFVTSC5MCVIxNQ0KKwlNVkZBQ0hJCSMwLCBBMCwgUjE1DQorCVBVU0guTAlSMTUNCisJTVZGQUNMTwkjMCwgQTAsIFIxNQk7IExvdyBvcmRlciB3b3JkLg0KKwlQVVNILkwJUjE1DQogDQotICAgIC8qIFNhdmUgdGhlIHN0YWNrIHBvaW50ZXIgdG8gdGhlIFRDQi4gKi8NCi0gICAgTU9WLkwgICAjIF9weEN1cnJlbnRUQ0IsIFIxNQ0KLSAgICAgICAgTU9WLkxbIFIxNSBdLCBSMTUNCi0gICAgICAgIE1PVi5MIFIwLCBbIFIxNSBdDQorCS8qIFNhdmUgdGhlIHN0YWNrIHBvaW50ZXIgdG8gdGhlIFRDQi4gKi8NCisJTU9WLkwJI19weEN1cnJlbnRUQ0IsIFIxNQ0KKwlNT1YuTAlbIFIxNSBdLCBSMTUNCisJTU9WLkwJUjAsIFsgUjE1IF0NCiANCi0gICAgLyogRW5zdXJlIHRoZSBpbnRlcnJ1cHQgbWFzayBpcyBzZXQgdG8gdGhlIHN5c2NhbGwgcHJpb3JpdHkgd2hpbGUgdGhlIGtlcm5lbA0KLSAgICAgKiBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBhY2Nlc3NlZC4gKi8NCi0gICAgTVZUSVBMICAjIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWQ0KKwkvKiBFbnN1cmUgdGhlIGludGVycnVwdCBtYXNrIGlzIHNldCB0byB0aGUgc3lzY2FsbCBwcmlvcml0eSB3aGlsZSB0aGUga2VybmVsDQorCXN0cnVjdHVyZXMgYXJlIGJlaW5nIGFjY2Vzc2VkLiAqLw0KKwlNVlRJUEwJI2NvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWQ0KIA0KLSAgICAvKiBTZWxlY3QgdGhlIG5leHQgdGFzayB0byBydW4uICovDQotICAgIEJTUi5BIF92VGFza1N3aXRjaENvbnRleHQNCisJLyogU2VsZWN0IHRoZSBuZXh0IHRhc2sgdG8gcnVuLiAqLw0KKwlCU1IuQQlfdlRhc2tTd2l0Y2hDb250ZXh0DQogDQotICAgIC8qIFJlc2V0IHRoZSBpbnRlcnJ1cHQgbWFzayBhcyBubyBtb3JlIGRhdGEgc3RydWN0dXJlIGFjY2VzcyBpcyByZXF1aXJlZC4gKi8NCi0gICAgTVZUSVBMICAjIGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkNCisJLyogUmVzZXQgdGhlIGludGVycnVwdCBtYXNrIGFzIG5vIG1vcmUgZGF0YSBzdHJ1Y3R1cmUgYWNjZXNzIGlzIHJlcXVpcmVkLiAqLw0KKwlNVlRJUEwJI2NvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkNCiANCi0gICAgLyogTG9hZCB0aGUgc3RhY2sgcG9pbnRlciBvZiB0aGUgdGFzayB0aGF0IGlzIG5vdyBzZWxlY3RlZCBhcyB0aGUgUnVubmluZw0KLSAgICAgKiBzdGF0ZSB0YXNrIGZyb20gaXRzIFRDQi4gKi8NCi0gICAgTU9WLkwgICAjIF9weEN1cnJlbnRUQ0IsIFIxNQ0KLSAgICAgICAgTU9WLkxbIFIxNSBdLCBSMTUNCi0gICAgICAgIE1PVi5MWyBSMTUgXSwgUjANCisJLyogTG9hZCB0aGUgc3RhY2sgcG9pbnRlciBvZiB0aGUgdGFzayB0aGF0IGlzIG5vdyBzZWxlY3RlZCBhcyB0aGUgUnVubmluZw0KKwlzdGF0ZSB0YXNrIGZyb20gaXRzIFRDQi4gKi8NCisJTU9WLkwJI19weEN1cnJlbnRUQ0IsUjE1DQorCU1PVi5MCVsgUjE1IF0sIFIxNQ0KKwlNT1YuTAlbIFIxNSBdLCBSMA0KIA0KLSAgICAvKiBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBuZXcgdGFzay4gIFRoZSBQU1cgKFByb2dyYW0gU3RhdHVzIFdvcmQpIGFuZA0KLSAgICAgKiBQQyB3aWxsIGJlIHBvcHBlZCBieSB0aGUgUlRFIGluc3RydWN0aW9uLiAqLw0KLSAgICBQT1AgUjE1DQotICAgIE1WVEFDTE8gUjE1LCBBMCAvKiBBY2N1bXVsYXRvciBsb3cgMzIgYml0cy4gKi8NCi0gICAgUE9QIFIxNQ0KLSAgICBNVlRBQ0hJIFIxNSwgQTAgLyogQWNjdW11bGF0b3IgaGlnaCAzMiBiaXRzLiAqLw0KLSAgICBQT1AgUjE1DQotICAgIE1WVEFDR1UgUjE1LCBBMCAvKiBBY2N1bXVsYXRvciBndWFyZC4gKi8NCi0gICAgUE9QIFIxNQ0KLSAgICBNVlRBQ0xPIFIxNSwgQTEgLyogQWNjdW11bGF0b3IgbG93IDMyIGJpdHMuICovDQotICAgIFBPUCBSMTUNCi0gICAgTVZUQUNISSBSMTUsIEExIC8qIEFjY3VtdWxhdG9yIGhpZ2ggMzIgYml0cy4gKi8NCi0gICAgUE9QIFIxNQ0KLSAgICBNVlRBQ0dVIFIxNSwgQTEgLyogQWNjdW11bGF0b3IgZ3VhcmQuICovDQotICAgIFBPUCBSMTUNCi0gICAgTVZUQyBSMTUsIEZQU1cNCi0gICAgUE9QTSBSMSAtIFIxNQ0KLSAgICBSVEUNCi0gICAgTk9QDQotICAgICAgICBOT1ANCisJLyogUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgbmV3IHRhc2suICBUaGUgUFNXIChQcm9ncmFtIFN0YXR1cyBXb3JkKSBhbmQNCisJUEMgd2lsbCBiZSBwb3BwZWQgYnkgdGhlIFJURSBpbnN0cnVjdGlvbi4gKi8NCisgICAgUE9QCQlSMTUNCisgICAgTVZUQUNMTwlSMTUsIEEwCQkvKiBBY2N1bXVsYXRvciBsb3cgMzIgYml0cy4gKi8NCisgICAgUE9QCQlSMTUNCisgICAgTVZUQUNISQlSMTUsIEEwCQkvKiBBY2N1bXVsYXRvciBoaWdoIDMyIGJpdHMuICovDQorICAgIFBPUAkJUjE1DQorICAgIE1WVEFDR1UJUjE1LCBBMAkJLyogQWNjdW11bGF0b3IgZ3VhcmQuICovDQorICAgIFBPUAkJUjE1DQorICAgIE1WVEFDTE8JUjE1LCBBMQkJLyogQWNjdW11bGF0b3IgbG93IDMyIGJpdHMuICovDQorICAgIFBPUAkJUjE1DQorICAgIE1WVEFDSEkJUjE1LCBBMQkJLyogQWNjdW11bGF0b3IgaGlnaCAzMiBiaXRzLiAqLw0KKyAgICBQT1AJCVIxNQ0KKyAgICBNVlRBQ0dVCVIxNSwgQTEJCS8qIEFjY3VtdWxhdG9yIGd1YXJkLiAqLw0KKwlQT1AJCVIxNQ0KKwlNVlRDCVIxNSxGUFNXDQorCVBPUE0JUjEtUjE1DQorCVJURQ0KKwlOT1ANCisJTk9QDQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQ0KIHsNCi0gICAgLyogTm90IGltcGxlbWVudGVkIGluIHBvcnRzIHdoZXJlIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmV0dXJuIHRvLg0KLSAgICAgKiBBcnRpZmljaWFsbHkgZm9yY2UgYW4gYXNzZXJ0LiAqLw0KLSAgICBjb25maWdBU1NFUlQoIHB4Q3VycmVudFRDQiA9PSBOVUxMICk7DQorCS8qIE5vdCBpbXBsZW1lbnRlZCBpbiBwb3J0cyB3aGVyZSB0aGVyZSBpcyBub3RoaW5nIHRvIHJldHVybiB0by4NCisJQXJ0aWZpY2lhbGx5IGZvcmNlIGFuIGFzc2VydC4gKi8NCisJY29uZmlnQVNTRVJUKCBweEN1cnJlbnRUQ0IgPT0gTlVMTCApOw0KIA0KLSAgICAvKiBUaGUgZm9sbG93aW5nIGxpbmUgaXMganVzdCB0byBwcmV2ZW50IHRoZSBzeW1ib2wgZ2V0dGluZyBvcHRpbWlzZWQgYXdheS4gKi8NCi0gICAgKCB2b2lkICkgdlRhc2tTd2l0Y2hDb250ZXh0KCk7DQorCS8qIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBqdXN0IHRvIHByZXZlbnQgdGhlIHN5bWJvbCBnZXR0aW5nIG9wdGltaXNlZCBhd2F5LiAqLw0KKwkoIHZvaWQgKSB2VGFza1N3aXRjaENvbnRleHQoKTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvUmVuZXNhcy9SWDYwMHYyL3BvcnRtYWNyby5oIGIvcG9ydGFibGUvUmVuZXNhcy9SWDYwMHYyL3BvcnRtYWNyby5oCmluZGV4IDFmODc1NzMuLmJmNzQyYTIgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL1JlbmVzYXMvUlg2MDB2Mi9wb3J0bWFjcm8uaAorKysgYi9wb3J0YWJsZS9SZW5lc2FzL1JYNjAwdjIvcG9ydG1hY3JvLmgKQEAgLTI3LDE0ICsyNywxNCBAQAogDQogDQogI2lmbmRlZiBQT1JUTUFDUk9fSA0KLSAgICAjZGVmaW5lIFBPUlRNQUNST19IDQorI2RlZmluZSBQT1JUTUFDUk9fSA0KIA0KLSAgICAjaWZkZWYgX19jcGx1c3BsdXMNCi0gICAgICAgIGV4dGVybiAiQyIgew0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCiANCiAvKiBIYXJkd2FyZSBzcGVjaWZpY3MuICovDQotICAgICNpbmNsdWRlICJtYWNoaW5lLmgiDQorI2luY2x1ZGUgIm1hY2hpbmUuaCINCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICogUG9ydCBzcGVjaWZpYyBkZWZpbml0aW9ucy4NCkBAIC00Nyw5NSArNDcsOTYgQEAKICAqLw0KIA0KIC8qIFR5cGUgZGVmaW5pdGlvbnMgLSB0aGVzZSBhcmUgYSBiaXQgbGVnYWN5IGFuZCBub3QgcmVhbGx5IHVzZWQgbm93LCBvdGhlciB0aGFuDQotICogcG9ydFNUQUNLX1RZUEUgYW5kIHBvcnRCQVNFX1RZUEUuICovDQotICAgICNkZWZpbmUgcG9ydENIQVIgICAgICAgICAgY2hhcg0KLSAgICAjZGVmaW5lIHBvcnRGTE9BVCAgICAgICAgIGZsb2F0DQotICAgICNkZWZpbmUgcG9ydERPVUJMRSAgICAgICAgZG91YmxlDQotICAgICNkZWZpbmUgcG9ydExPTkcgICAgICAgICAgbG9uZw0KLSAgICAjZGVmaW5lIHBvcnRTSE9SVCAgICAgICAgIHNob3J0DQotICAgICNkZWZpbmUgcG9ydFNUQUNLX1RZUEUgICAgdWludDMyX3QNCi0gICAgI2RlZmluZSBwb3J0QkFTRV9UWVBFICAgICBsb25nDQorcG9ydFNUQUNLX1RZUEUgYW5kIHBvcnRCQVNFX1RZUEUuICovDQorI2RlZmluZSBwb3J0Q0hBUgkJY2hhcg0KKyNkZWZpbmUgcG9ydEZMT0FUCQlmbG9hdA0KKyNkZWZpbmUgcG9ydERPVUJMRQkJZG91YmxlDQorI2RlZmluZSBwb3J0TE9ORwkJbG9uZw0KKyNkZWZpbmUgcG9ydFNIT1JUCQlzaG9ydA0KKyNkZWZpbmUgcG9ydFNUQUNLX1RZUEUJdWludDMyX3QNCisjZGVmaW5lIHBvcnRCQVNFX1RZUEUJbG9uZw0KIA0KLSAgICB0eXBlZGVmIHBvcnRTVEFDS19UWVBFICAgU3RhY2tUeXBlX3Q7DQotICAgIHR5cGVkZWYgbG9uZyAgICAgICAgICAgICBCYXNlVHlwZV90Ow0KLSAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgICAgVUJhc2VUeXBlX3Q7DQordHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSBTdGFja1R5cGVfdDsNCit0eXBlZGVmIGxvbmcgQmFzZVR5cGVfdDsNCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgVUJhc2VUeXBlX3Q7DQogDQotICAgICNpZiAoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQotICAgICAgICB0eXBlZGVmIHVpbnQxNl90ICAgICBUaWNrVHlwZV90Ow0KLSAgICAgICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICAgICAgICAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmYNCi0gICAgI2Vsc2UNCi0gICAgICAgIHR5cGVkZWYgdWludDMyX3QgICAgIFRpY2tUeXBlX3Q7DQotICAgICAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgICAgICAgICAgICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTA0KKyNpZiggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCisJdHlwZWRlZiB1aW50MTZfdCBUaWNrVHlwZV90Ow0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQorI2Vsc2UNCisJdHlwZWRlZiB1aW50MzJfdCBUaWNrVHlwZV90Ow0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQogDQotLyogMzItYml0IHRpY2sgdHlwZSBvbiBhIDMyLWJpdCBhcmNoaXRlY3R1cmUsIHNvIHJlYWRzIG9mIHRoZSB0aWNrIGNvdW50IGRvDQotICogbm90IG5lZWQgdG8gYmUgZ3VhcmRlZCB3aXRoIGEgY3JpdGljYWwgc2VjdGlvbi4gKi8NCi0gICAgICAgICNkZWZpbmUgcG9ydFRJQ0tfVFlQRV9JU19BVE9NSUMgICAgMQ0KLSAgICAjZW5kaWYNCisJLyogMzItYml0IHRpY2sgdHlwZSBvbiBhIDMyLWJpdCBhcmNoaXRlY3R1cmUsIHNvIHJlYWRzIG9mIHRoZSB0aWNrIGNvdW50IGRvDQorCW5vdCBuZWVkIHRvIGJlIGd1YXJkZWQgd2l0aCBhIGNyaXRpY2FsIHNlY3Rpb24uICovDQorCSNkZWZpbmUgcG9ydFRJQ0tfVFlQRV9JU19BVE9NSUMgMQ0KKyNlbmRpZg0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIEhhcmR3YXJlIHNwZWNpZmljcy4gKi8NCi0gICAgI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQgICAgOCAgICAgICAgIC8qIENvdWxkIG1ha2UgZm91ciwgYWNjb3JkaW5nIHRvIG1hbnVhbC4gKi8NCi0gICAgI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RIICAgICAgLTENCi0gICAgI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMgICAgKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCi0gICAgI2RlZmluZSBwb3J0Tk9QKCkgICAgbm9wKCkNCisjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVAkJCQk4CS8qIENvdWxkIG1ha2UgZm91ciwgYWNjb3JkaW5nIHRvIG1hbnVhbC4gKi8NCisjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEgJCQkJLTENCisjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUwkJCQkoICggVGlja1R5cGVfdCApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KKyNkZWZpbmUgcG9ydE5PUCgpCQkJCQkJbm9wKCkNCiANCiANCi0gICAgI3ByYWdtYSBpbmxpbmVfYXNtIHZQb3J0WWllbGQNCi0gICAgc3RhdGljIHZvaWQgdlBvcnRZaWVsZCggdm9pZCApDQotICAgIHsNCi0gICAgICAgIC8qIFNhdmUgY2xvYmJlcmVkIHJlZ2lzdGVyIC0gbWF5IG5vdCBhY3R1YWxseSBiZSBuZWNlc3NhcnkgaWYgaW5saW5lIGFzbQ0KLSAgICAgICAgICogZnVuY3Rpb25zIGFyZSBjb25zaWRlcmVkIHRvIHVzZSB0aGUgc2FtZSBydWxlcyBhcyBmdW5jdGlvbiBjYWxscyBieSB0aGUNCi0gICAgICAgICAqIGNvbXBpbGVyLiAqLw0KLSAgICAgICAgUFVTSC5MIFI1DQotICAgICAgICAvKiBTZXQgSVRVIFNXSU5UUi4gKi8NCi0gICAgICAgIE1PVi5MICMgNTUzNjk2LCBSNQ0KLSAgICAgICAgICAgIE1PVi5CICMgMSwgWyBSNSBdDQotICAgICAgICAvKiBSZWFkIGJhY2sgdG8gZW5zdXJlIHRoZSB2YWx1ZSBpcyB0YWtlbiBiZWZvcmUgcHJvY2VlZGluZy4gKi8NCi0gICAgICAgIE1PVi5MWyBSNSBdLCBSNQ0KLSAgICAgICAgLyogUmVzdG9yZSBjbG9iYmVyZWQgcmVnaXN0ZXIgdG8gaXRzIHByZXZpb3VzIHZhbHVlLiAqLw0KLSAgICAgICAgUE9QIFI1DQotICAgIH0NCi0gICAgI2RlZmluZSBwb3J0WUlFTEQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZQb3J0WWllbGQoKQ0KLSAgICAjZGVmaW5lIHBvcnRZSUVMRF9GUk9NX0lTUiggeCApICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIHggIT0gcGRGQUxTRSApIHBvcnRZSUVMRCgpDQorI3ByYWdtYSBpbmxpbmVfYXNtIHZQb3J0WWllbGQNCitzdGF0aWMgdm9pZCB2UG9ydFlpZWxkKCB2b2lkICkNCit7DQorCS8qIFNhdmUgY2xvYmJlcmVkIHJlZ2lzdGVyIC0gbWF5IG5vdCBhY3R1YWxseSBiZSBuZWNlc3NhcnkgaWYgaW5saW5lIGFzbQ0KKwlmdW5jdGlvbnMgYXJlIGNvbnNpZGVyZWQgdG8gdXNlIHRoZSBzYW1lIHJ1bGVzIGFzIGZ1bmN0aW9uIGNhbGxzIGJ5IHRoZQ0KKwljb21waWxlci4gKi8NCisJUFVTSC5MIFI1DQorCS8qIFNldCBJVFUgU1dJTlRSLiAqLw0KKwlNT1YuTCAjNTUzNjk2LCBSNQ0KKwlNT1YuQiAjMSwgW1I1XQ0KKwkvKiBSZWFkIGJhY2sgdG8gZW5zdXJlIHRoZSB2YWx1ZSBpcyB0YWtlbiBiZWZvcmUgcHJvY2VlZGluZy4gKi8NCisJTU9WLkwgW1I1XSwgUjUNCisJLyogUmVzdG9yZSBjbG9iYmVyZWQgcmVnaXN0ZXIgdG8gaXRzIHByZXZpb3VzIHZhbHVlLiAqLw0KKwlQT1AgUjUNCit9DQorI2RlZmluZSBwb3J0WUlFTEQoKQl2UG9ydFlpZWxkKCkNCisjZGVmaW5lIHBvcnRZSUVMRF9GUk9NX0lTUiggeCApCWlmKCB4ICE9IHBkRkFMU0UgKSBwb3J0WUlFTEQoKQ0KIA0KIC8qIFRoZXNlIG1hY3JvcyBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseSwgYnV0IHRocm91Z2ggdGhlDQotICogdGFza0VOVEVSX0NSSVRJQ0FMKCkgYW5kIHRhc2tFWElUX0NSSVRJQ0FMKCkgbWFjcm9zLiAgQW4gZXh0cmEgY2hlY2sgaXMNCi0gKiBwZXJmb3JtZWQgaWYgY29uZmlnQVNTRVJUKCkgaXMgZGVmaW5lZCB0byBlbnN1cmUgYW4gYXNzZXJ0aW9uIGhhbmRsZXIgZG9lcyBub3QNCi0gKiBpbmFkdmVydGVudGx5IGF0dGVtcHQgdG8gbG93ZXIgdGhlIElQTCB3aGVuIHRoZSBjYWxsIHRvIGFzc2VydCB3YXMgdHJpZ2dlcmVkDQotICogYmVjYXVzZSB0aGUgSVBMIHZhbHVlIHdhcyBmb3VuZCB0byBiZSBhYm92ZQljb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkNCi0gKiB3aGVuIGFuIElTUiBzYWZlIEZyZWVSVE9TIEFQSSBmdW5jdGlvbiB3YXMgZXhlY3V0ZWQuICBJU1Igc2FmZSBGcmVlUlRPUyBBUEkNCi0gKiBmdW5jdGlvbnMgYXJlIHRob3NlIHRoYXQgZW5kIGluIEZyb21JU1IuICBGcmVlUlRPUyBtYWludGFpbnMgYSBzZXBhcmF0ZQ0KLSAqIGludGVycnVwdCBBUEkgdG8gZW5zdXJlIEFQSSBmdW5jdGlvbiBhbmQgaW50ZXJydXB0IGVudHJ5IGlzIGFzIGZhc3QgYW5kIGFzDQotICogc2ltcGxlIGFzIHBvc3NpYmxlLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0X2lwbCggKCBsb25nICkgMCApDQotICAgICNpZmRlZiBjb25maWdBU1NFUlQNCi0gICAgICAgICNkZWZpbmUgcG9ydEFTU0VSVF9JRl9JTlRFUlJVUFRfUFJJT1JJVFlfSU5WQUxJRCgpICAgIGNvbmZpZ0FTU0VSVCggKCBnZXRfaXBsKCkgPD0gY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkgKQ0KLSAgICAgICAgI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgICAgICAgICAgICAgICAgICAgICAgaWYoIGdldF9pcGwoKSA8IGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSApIHNldF9pcGwoICggbG9uZyApIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSApDQotICAgICNlbHNlDQotICAgICAgICAjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAgICAgICAgICAgICAgICAgICAgICBzZXRfaXBsKCAoIGxvbmcgKSBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgKQ0KLSAgICAjZW5kaWYNCit0YXNrRU5URVJfQ1JJVElDQUwoKSBhbmQgdGFza0VYSVRfQ1JJVElDQUwoKSBtYWNyb3MuICBBbiBleHRyYSBjaGVjayBpcw0KK3BlcmZvcm1lZCBpZiBjb25maWdBU1NFUlQoKSBpcyBkZWZpbmVkIHRvIGVuc3VyZSBhbiBhc3NlcnRpb24gaGFuZGxlciBkb2VzIG5vdA0KK2luYWR2ZXJ0ZW50bHkgYXR0ZW1wdCB0byBsb3dlciB0aGUgSVBMIHdoZW4gdGhlIGNhbGwgdG8gYXNzZXJ0IHdhcyB0cmlnZ2VyZWQNCitiZWNhdXNlIHRoZSBJUEwgdmFsdWUgd2FzIGZvdW5kIHRvIGJlIGFib3ZlCWNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWQ0KK3doZW4gYW4gSVNSIHNhZmUgRnJlZVJUT1MgQVBJIGZ1bmN0aW9uIHdhcyBleGVjdXRlZC4gIElTUiBzYWZlIEZyZWVSVE9TIEFQSQ0KK2Z1bmN0aW9ucyBhcmUgdGhvc2UgdGhhdCBlbmQgaW4gRnJvbUlTUi4gIEZyZWVSVE9TIG1haW50YWlucyBhIHNlcGFyYXRlDQoraW50ZXJydXB0IEFQSSB0byBlbnN1cmUgQVBJIGZ1bmN0aW9uIGFuZCBpbnRlcnJ1cHQgZW50cnkgaXMgYXMgZmFzdCBhbmQgYXMNCitzaW1wbGUgYXMgcG9zc2libGUuICovDQorI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKSAJc2V0X2lwbCggKCBsb25nICkgMCApDQorI2lmZGVmIGNvbmZpZ0FTU0VSVA0KKwkjZGVmaW5lIHBvcnRBU1NFUlRfSUZfSU5URVJSVVBUX1BSSU9SSVRZX0lOVkFMSUQoKSBjb25maWdBU1NFUlQoICggZ2V0X2lwbCgpIDw9IGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSApICkNCisJI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgCWlmKCBnZXRfaXBsKCkgPCBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgKSBzZXRfaXBsKCAoIGxvbmcgKSBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgKQ0KKyNlbHNlDQorCSNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpIAlzZXRfaXBsKCAoIGxvbmcgKSBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgKQ0KKyNlbmRpZg0KIA0KIC8qIENyaXRpY2FsIG5lc3RpbmcgY291bnRzIGFyZSBzdG9yZWQgaW4gdGhlIFRDQi4gKi8NCi0gICAgI2RlZmluZSBwb3J0Q1JJVElDQUxfTkVTVElOR19JTl9UQ0IgICAgKCAxICkNCisjZGVmaW5lIHBvcnRDUklUSUNBTF9ORVNUSU5HX0lOX1RDQiAoIDEgKQ0KIA0KIC8qIFRoZSBjcml0aWNhbCBuZXN0aW5nIGZ1bmN0aW9ucyBkZWZpbmVkIHdpdGhpbiB0YXNrcy5jLiAqLw0KLSAgICBleHRlcm4gdm9pZCB2VGFza0VudGVyQ3JpdGljYWwoIHZvaWQgKTsNCi0gICAgZXh0ZXJuIHZvaWQgdlRhc2tFeGl0Q3JpdGljYWwoIHZvaWQgKTsNCi0gICAgI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2VGFza0VudGVyQ3JpdGljYWwoKQ0KLSAgICAjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZUYXNrRXhpdENyaXRpY2FsKCkNCitleHRlcm4gdm9pZCB2VGFza0VudGVyQ3JpdGljYWwoIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2VGFza0V4aXRDcml0aWNhbCggdm9pZCApOw0KKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkJdlRhc2tFbnRlckNyaXRpY2FsKCkNCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkJCXZUYXNrRXhpdENyaXRpY2FsKCkNCiANCiAvKiBBcyB0aGlzIHBvcnQgYWxsb3dzIGludGVycnVwdCBuZXN0aW5nLi4uICovDQotICAgICNkZWZpbmUgcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBVQmFzZVR5cGVfdCApIGdldF9pcGwoKTsgc2V0X2lwbCggKCBsb25nICkgY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkNCi0gICAgI2RlZmluZSBwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoIHV4U2F2ZWRJbnRlcnJ1cHRTdGF0dXMgKSAgICBzZXRfaXBsKCAoIGxvbmcgKSB1eFNhdmVkSW50ZXJydXB0U3RhdHVzICkNCisjZGVmaW5lIHBvcnRTRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKSAoIFVCYXNlVHlwZV90ICkgZ2V0X2lwbCgpOyBzZXRfaXBsKCAoIGxvbmcgKSBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgKQ0KKyNkZWZpbmUgcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCB1eFNhdmVkSW50ZXJydXB0U3RhdHVzICkgc2V0X2lwbCggKCBsb25nICkgdXhTYXZlZEludGVycnVwdFN0YXR1cyApDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQotICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KLSAgICAjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgICAgICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgfQ0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQogDQogI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvUmVuZXNhcy9TSDJBX0ZQVS9wb3J0LmMgYi9wb3J0YWJsZS9SZW5lc2FzL1NIMkFfRlBVL3BvcnQuYwppbmRleCAwMWE5OTJhLi5jMTU2ZjJjIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9SZW5lc2FzL1NIMkFfRlBVL3BvcnQuYworKysgYi9wb3J0YWJsZS9SZW5lc2FzL1NIMkFfRlBVL3BvcnQuYwpAQCAtMjYsOCArMjYsOCBAQAogICovDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLSogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFibGUuaCBmb3IgdGhlIFNIMkEgcG9ydC4NCi0qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorICogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFibGUuaCBmb3IgdGhlIFNIMkEgcG9ydC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFNjaGVkdWxlciBpbmNsdWRlcy4gKi8NCiAjaW5jbHVkZSAiRnJlZVJUT1MuaCINCkBAIC0zOSwxOCArMzksMTggQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFRoZSBTUiBhc3NpZ25lZCB0byBhIG5ld2x5IGNyZWF0ZWQgdGFzay4gIFRoZSBvbmx5IGltcG9ydGFudCB0aGluZyBpbiB0aGlzDQotICogdmFsdWUgaXMgZm9yIGFsbCBpbnRlcnJ1cHRzIHRvIGJlIGVuYWJsZWQuICovDQotI2RlZmluZSBwb3J0SU5JVElBTF9TUiAgICAgICAgICAgICAgICAgKCAwVUwgKQ0KK3ZhbHVlIGlzIGZvciBhbGwgaW50ZXJydXB0cyB0byBiZSBlbmFibGVkLiAqLw0KKyNkZWZpbmUgcG9ydElOSVRJQUxfU1IJCQkJKCAwVUwgKQ0KIA0KIC8qIERpbWVuc2lvbnMgdGhlIGFycmF5IGludG8gd2hpY2ggdGhlIGZsb2F0aW5nIHBvaW50IGNvbnRleHQgaXMgc2F2ZWQuDQotICogQWxsb2NhdGUgZW5vdWdoIHNwYWNlIGZvciBGUFIwIHRvIEZQUjE1LCBGUFVMIGFuZCBGUFNDUiwgZWFjaCBvZiB3aGljaCBpcyA0DQotICogYnl0ZXMgYmlnLiAgSWYgdGhpcyBudW1iZXIgaXMgY2hhbmdlZCB0aGVuIHRoZSA3MiBpbiBwb3J0YXNtLnNyYyBhbHNvIG5lZWRzDQotICogY2hhbmdpbmcuICovDQotI2RlZmluZSBwb3J0RkxPUF9SRUdJU1RFUlNfVE9fU1RPUkUgICAgKCAxOCApDQotI2RlZmluZSBwb3J0RkxPUF9TVE9SQUdFX1NJWkUgICAgICAgICAgKCBwb3J0RkxPUF9SRUdJU1RFUlNfVE9fU1RPUkUgKiA0ICkNCitBbGxvY2F0ZSBlbm91Z2ggc3BhY2UgZm9yIEZQUjAgdG8gRlBSMTUsIEZQVUwgYW5kIEZQU0NSLCBlYWNoIG9mIHdoaWNoIGlzIDQNCitieXRlcyBiaWcuICBJZiB0aGlzIG51bWJlciBpcyBjaGFuZ2VkIHRoZW4gdGhlIDcyIGluIHBvcnRhc20uc3JjIGFsc28gbmVlZHMNCitjaGFuZ2luZy4gKi8NCisjZGVmaW5lIHBvcnRGTE9QX1JFR0lTVEVSU19UT19TVE9SRQkoIDE4ICkNCisjZGVmaW5lIHBvcnRGTE9QX1NUT1JBR0VfU0laRSAJCSggcG9ydEZMT1BfUkVHSVNURVJTX1RPX1NUT1JFICogNCApDQogDQotI2lmICggY29uZmlnU1VQUE9SVF9EWU5BTUlDX0FMTE9DQVRJT04gPT0gMCApDQotICAgICNlcnJvciBjb25maWdTVVBQT1JUX0RZTkFNSUNfQUxMT0NBVElPTiBtdXN0IGJlIDEgdG8gdXNlIHRoaXMgcG9ydC4NCisjaWYoIGNvbmZpZ1NVUFBPUlRfRFlOQU1JQ19BTExPQ0FUSU9OID09IDAgKQ0KKwkjZXJyb3IgY29uZmlnU1VQUE9SVF9EWU5BTUlDX0FMTE9DQVRJT04gbXVzdCBiZSAxIHRvIHVzZSB0aGlzIHBvcnQuDQogI2VuZGlmDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQpAQCAtNzUsMTk3ICs3NSwxOTcgQEAKIC8qDQogICogU2VlIGhlYWRlciBmaWxlIGZvciBkZXNjcmlwdGlvbi4NCiAgKi8NCi1TdGFja1R5cGVfdCAqIHB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKiBweFRvcE9mU3RhY2ssDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqIHB2UGFyYW1ldGVycyApDQorU3RhY2tUeXBlX3QgKnB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKnB4VG9wT2ZTdGFjaywgVGFza0Z1bmN0aW9uX3QgcHhDb2RlLCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KIHsNCi0gICAgLyogTWFyayB0aGUgZW5kIG9mIHRoZSBzdGFjayAtIHVzZWQgZm9yIGRlYnVnZ2luZyBvbmx5IGFuZCBjYW4gYmUgcmVtb3ZlZC4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MTExMTExMTFVTDsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAweDIyMjIyMjIyVUw7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMHgzMzMzMzMzM1VMOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJLyogTWFyayB0aGUgZW5kIG9mIHRoZSBzdGFjayAtIHVzZWQgZm9yIGRlYnVnZ2luZyBvbmx5IGFuZCBjYW4gYmUgcmVtb3ZlZC4gKi8NCisJKnB4VG9wT2ZTdGFjayA9IDB4MTExMTExMTFVTDsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDIyMjIyMjIyVUw7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgzMzMzMzMzM1VMOw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgLyogU1IuICovDQotICAgICpweFRvcE9mU3RhY2sgPSBwb3J0SU5JVElBTF9TUjsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIFNSLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gcG9ydElOSVRJQUxfU1I7DQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBQQy4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggdWludDMyX3QgKSBweENvZGU7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkvKiBQQy4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggdWludDMyX3QgKSBweENvZGU7DQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBQUi4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9IDE1Ow0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJLyogUFIuICovDQorCSpweFRvcE9mU3RhY2sgPSAxNTsNCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgIC8qIDE0LiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMTQ7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkvKiAxNC4gKi8NCisJKnB4VG9wT2ZTdGFjayA9IDE0Ow0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgLyogUjEzLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMTM7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkvKiBSMTMuICovDQorCSpweFRvcE9mU3RhY2sgPSAxMzsNCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgIC8qIFIxMi4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9IDEyOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJLyogUjEyLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gMTI7DQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBSMTEuICovDQotICAgICpweFRvcE9mU3RhY2sgPSAxMTsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIFIxMS4gKi8NCisJKnB4VG9wT2ZTdGFjayA9IDExOw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgLyogUjEwLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMTA7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkvKiBSMTAuICovDQorCSpweFRvcE9mU3RhY2sgPSAxMDsNCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgIC8qIFI5LiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gOTsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIFI5LiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gOTsNCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgIC8qIFI4LiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gODsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIFI4LiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gODsNCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgIC8qIFI3LiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gNzsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIFI3LiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gNzsNCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgIC8qIFI2LiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gNjsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIFI2LiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gNjsNCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgIC8qIFI1LiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gNTsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIFI1LiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gNTsNCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgIC8qIFI0LiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCB1aW50MzJfdCApIHB2UGFyYW1ldGVyczsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIFI0LiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCB1aW50MzJfdCApIHB2UGFyYW1ldGVyczsNCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgIC8qIFIzLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMzsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIFIzLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gMzsNCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgIC8qIFIyLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMjsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIFIyLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gMjsNCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgIC8qIFIxLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMTsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIFIxLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gMTsNCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgIC8qIFIwICovDQotICAgICpweFRvcE9mU3RhY2sgPSAwOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJLyogUjAgKi8NCisJKnB4VG9wT2ZTdGFjayA9IDA7DQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBNQUNMLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMTY7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkvKiBNQUNMLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gMTY7DQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBNQUNILiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMTc7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkvKiBNQUNILiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gMTc7DQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBHQlIuICovDQotICAgICpweFRvcE9mU3RhY2sgPSB1bFBvcnRHZXRHQlIoKTsNCisJLyogR0JSLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gdWxQb3J0R2V0R0JSKCk7DQogDQotICAgIC8qIEdCUiA9IGdsb2JhbCBiYXNlIHJlZ2lzdGVyLg0KLSAgICAqIFZCUiA9IHZlY3RvciBiYXNlIHJlZ2lzdGVyLg0KLSAgICAqIFRCUiA9IGp1bXAgdGFibGUgYmFzZSByZWdpc3Rlci4NCi0gICAgKiBSMTUgaXMgdGhlIHN0YWNrIHBvaW50ZXIuICovDQorCS8qIEdCUiA9IGdsb2JhbCBiYXNlIHJlZ2lzdGVyLg0KKwkgICBWQlIgPSB2ZWN0b3IgYmFzZSByZWdpc3Rlci4NCisJICAgVEJSID0ganVtcCB0YWJsZSBiYXNlIHJlZ2lzdGVyLg0KKwkgICBSMTUgaXMgdGhlIHN0YWNrIHBvaW50ZXIuICovDQogDQotICAgIHJldHVybiBweFRvcE9mU3RhY2s7DQorCXJldHVybiBweFRvcE9mU3RhY2s7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIEJhc2VUeXBlX3QgeFBvcnRTdGFydFNjaGVkdWxlciggdm9pZCApDQogew0KLSAgICBleHRlcm4gdm9pZCB2QXBwbGljYXRpb25TZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgdkFwcGxpY2F0aW9uU2V0dXBUaW1lckludGVycnVwdCggdm9pZCApOw0KIA0KLSAgICAvKiBDYWxsIGFuIGFwcGxpY2F0aW9uIGZ1bmN0aW9uIHRvIHNldCB1cCB0aGUgdGltZXIgdGhhdCB3aWxsIGdlbmVyYXRlIHRoZQ0KLSAgICAgKiB0aWNrIGludGVycnVwdC4gIFRoaXMgd2F5IHRoZSBhcHBsaWNhdGlvbiBjYW4gZGVjaWRlIHdoaWNoIHBlcmlwaGVyYWwgdG8NCi0gICAgICogdXNlLiAgQSBkZW1vIGFwcGxpY2F0aW9uIGlzIHByb3ZpZGVkIHRvIHNob3cgYSBzdWl0YWJsZSBleGFtcGxlLiAqLw0KLSAgICB2QXBwbGljYXRpb25TZXR1cFRpbWVySW50ZXJydXB0KCk7DQorCS8qIENhbGwgYW4gYXBwbGljYXRpb24gZnVuY3Rpb24gdG8gc2V0IHVwIHRoZSB0aW1lciB0aGF0IHdpbGwgZ2VuZXJhdGUgdGhlDQorCXRpY2sgaW50ZXJydXB0LiAgVGhpcyB3YXkgdGhlIGFwcGxpY2F0aW9uIGNhbiBkZWNpZGUgd2hpY2ggcGVyaXBoZXJhbCB0bw0KKwl1c2UuICBBIGRlbW8gYXBwbGljYXRpb24gaXMgcHJvdmlkZWQgdG8gc2hvdyBhIHN1aXRhYmxlIGV4YW1wbGUuICovDQorCXZBcHBsaWNhdGlvblNldHVwVGltZXJJbnRlcnJ1cHQoKTsNCiANCi0gICAgLyogU3RhcnQgdGhlIGZpcnN0IHRhc2suICBUaGlzIHdpbGwgb25seSByZXN0b3JlIHRoZSBzdGFuZGFyZCByZWdpc3RlcnMgYW5kDQotICAgICAqIG5vdCB0aGUgZmxvcCByZWdpc3RlcnMuICBUaGlzIGRvZXMgbm90IHJlYWxseSBtYXR0ZXIgdGhvdWdoIGJlY2F1c2UgdGhlIG9ubHkNCi0gICAgICogZmxvcCByZWdpc3RlciB0aGF0IGlzIGluaXRpYWxpc2VkIHRvIGEgcGFydGljdWxhciB2YWx1ZSBpcyBmcHNjciwgYW5kIGl0IGlzDQotICAgICAqIG9ubHkgaW5pdGlhbGlzZWQgdG8gdGhlIGN1cnJlbnQgdmFsdWUsIHdoaWNoIHdpbGwgc3RpbGwgYmUgdGhlIGN1cnJlbnQgdmFsdWUNCi0gICAgICogd2hlbiB0aGUgZmlyc3QgdGFzayBzdGFydHMgZXhlY3V0aW5nLiAqLw0KLSAgICB0cmFwYSggcG9ydFNUQVJUX1NDSEVEVUxFUl9UUkFQX05PICk7DQorCS8qIFN0YXJ0IHRoZSBmaXJzdCB0YXNrLiAgVGhpcyB3aWxsIG9ubHkgcmVzdG9yZSB0aGUgc3RhbmRhcmQgcmVnaXN0ZXJzIGFuZA0KKwlub3QgdGhlIGZsb3AgcmVnaXN0ZXJzLiAgVGhpcyBkb2VzIG5vdCByZWFsbHkgbWF0dGVyIHRob3VnaCBiZWNhdXNlIHRoZSBvbmx5DQorCWZsb3AgcmVnaXN0ZXIgdGhhdCBpcyBpbml0aWFsaXNlZCB0byBhIHBhcnRpY3VsYXIgdmFsdWUgaXMgZnBzY3IsIGFuZCBpdCBpcw0KKwlvbmx5IGluaXRpYWxpc2VkIHRvIHRoZSBjdXJyZW50IHZhbHVlLCB3aGljaCB3aWxsIHN0aWxsIGJlIHRoZSBjdXJyZW50IHZhbHVlDQorCXdoZW4gdGhlIGZpcnN0IHRhc2sgc3RhcnRzIGV4ZWN1dGluZy4gKi8NCisJdHJhcGEoIHBvcnRTVEFSVF9TQ0hFRFVMRVJfVFJBUF9OTyApOw0KIA0KLSAgICAvKiBTaG91bGQgbm90IGdldCBoZXJlLiAqLw0KLSAgICByZXR1cm4gcGRGQUlMOw0KKwkvKiBTaG91bGQgbm90IGdldCBoZXJlLiAqLw0KKwlyZXR1cm4gcGRGQUlMOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0RW5kU2NoZWR1bGVyKCB2b2lkICkNCiB7DQotICAgIC8qIE5vdCBpbXBsZW1lbnRlZCBhcyB0aGVyZSBpcyBub3RoaW5nIHRvIHJldHVybiB0by4gKi8NCisJLyogTm90IGltcGxlbWVudGVkIGFzIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmV0dXJuIHRvLiAqLw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0WWllbGQoIHZvaWQgKQ0KIHsNCi0gICAgaW50MzJfdCBsSW50ZXJydXB0TWFzazsNCitpbnQzMl90IGxJbnRlcnJ1cHRNYXNrOw0KIA0KLSAgICAvKiBFbnN1cmUgdGhlIHlpZWxkIHRyYXAgcnVucyBhdCB0aGUgc2FtZSBwcmlvcml0eSBhcyB0aGUgb3RoZXIgaW50ZXJydXB0cw0KLSAgICAgKiB0aGF0IGNhbiBjYXVzZSBhIGNvbnRleHQgc3dpdGNoLiAqLw0KLSAgICBsSW50ZXJydXB0TWFzayA9IGdldF9pbWFzaygpOw0KKwkvKiBFbnN1cmUgdGhlIHlpZWxkIHRyYXAgcnVucyBhdCB0aGUgc2FtZSBwcmlvcml0eSBhcyB0aGUgb3RoZXIgaW50ZXJydXB0cw0KKwl0aGF0IGNhbiBjYXVzZSBhIGNvbnRleHQgc3dpdGNoLiAqLw0KKwlsSW50ZXJydXB0TWFzayA9IGdldF9pbWFzaygpOw0KIA0KLSAgICAvKiB0YXNrWUlFTEQoKSBjYW4gb25seSBiZSBjYWxsZWQgZnJvbSBhIHRhc2ssIG5vdCBhbiBpbnRlcnJ1cHQsIHNvIHRoZQ0KLSAgICAgKiBjdXJyZW50IGludGVycnVwdCBtYXNrIGNhbiBvbmx5IGJlIDAgb3IgcG9ydEtFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkgYW5kDQotICAgICAqIHRoZSBtYXNrIGNhbiBiZSBzZXQgd2l0aG91dCByaXNrIG9mIGFjY2lkZW50YWxseSBsb3dlcmluZyB0aGUgbWFzayB2YWx1ZS4gKi8NCi0gICAgc2V0X2ltYXNrKCBwb3J0S0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWSApOw0KKwkvKiB0YXNrWUlFTEQoKSBjYW4gb25seSBiZSBjYWxsZWQgZnJvbSBhIHRhc2ssIG5vdCBhbiBpbnRlcnJ1cHQsIHNvIHRoZQ0KKwljdXJyZW50IGludGVycnVwdCBtYXNrIGNhbiBvbmx5IGJlIDAgb3IgcG9ydEtFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkgYW5kDQorCXRoZSBtYXNrIGNhbiBiZSBzZXQgd2l0aG91dCByaXNrIG9mIGFjY2lkZW50YWxseSBsb3dlcmluZyB0aGUgbWFzayB2YWx1ZS4gKi8NCisJc2V0X2ltYXNrKCBwb3J0S0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWSApOw0KIA0KLSAgICB0cmFwYSggcG9ydFlJRUxEX1RSQVBfTk8gKTsNCisJdHJhcGEoIHBvcnRZSUVMRF9UUkFQX05PICk7DQogDQotICAgIC8qIFJlc3RvcmUgdGhlIGludGVycnVwdCBtYXNrIHRvIHdoYXRldmVyIGl0IHdhcyBwcmV2aW91c2x5ICh3aGVuIHRoZQ0KLSAgICAgKiBmdW5jdGlvbiB3YXMgZW50ZXJlZCkuICovDQotICAgIHNldF9pbWFzayggKCBpbnQgKSBsSW50ZXJydXB0TWFzayApOw0KKwkvKiBSZXN0b3JlIHRoZSBpbnRlcnJ1cHQgbWFzayB0byB3aGF0ZXZlciBpdCB3YXMgcHJldmlvdXNseSAod2hlbiB0aGUNCisJZnVuY3Rpb24gd2FzIGVudGVyZWQpLiAqLw0KKwlzZXRfaW1hc2soICggaW50ICkgbEludGVycnVwdE1hc2sgKTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogQmFzZVR5cGVfdCB4UG9ydFVzZXNGbG9hdGluZ1BvaW50KCBUYXNrSGFuZGxlX3QgeFRhc2sgKQ0KIHsNCi0gICAgdWludDMyX3QgKiBwdWxGbG9wQnVmZmVyOw0KLSAgICBCYXNlVHlwZV90IHhSZXR1cm47DQotICAgIGV4dGVybiB2b2lkICogdm9sYXRpbGUgcHhDdXJyZW50VENCOw0KK3VpbnQzMl90ICpwdWxGbG9wQnVmZmVyOw0KK0Jhc2VUeXBlX3QgeFJldHVybjsNCitleHRlcm4gdm9pZCAqIHZvbGF0aWxlIHB4Q3VycmVudFRDQjsNCiANCi0gICAgLyogVGhpcyBmdW5jdGlvbiB0ZWxscyB0aGUga2VybmVsIHRoYXQgdGhlIHRhc2sgcmVmZXJlbmNlZCBieSB4VGFzayBpcw0KLSAgICAgKiBnb2luZyB0byB1c2UgdGhlIGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycyBhbmQgdGhlcmVmb3JlIHJlcXVpcmVzIHRoZQ0KLSAgICAgKiBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMgc2F2ZWQgYXMgcGFydCBvZiBpdHMgY29udGV4dC4gKi8NCisJLyogVGhpcyBmdW5jdGlvbiB0ZWxscyB0aGUga2VybmVsIHRoYXQgdGhlIHRhc2sgcmVmZXJlbmNlZCBieSB4VGFzayBpcw0KKwlnb2luZyB0byB1c2UgdGhlIGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycyBhbmQgdGhlcmVmb3JlIHJlcXVpcmVzIHRoZQ0KKwlmbG9hdGluZyBwb2ludCByZWdpc3RlcnMgc2F2ZWQgYXMgcGFydCBvZiBpdHMgY29udGV4dC4gKi8NCiANCi0gICAgLyogUGFzc2luZyBOVUxMIGFzIHhUYXNrIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgY2FsbGluZyB0YXNrIGlzIHRoZQ0KLSAgICAgKiBzdWJqZWN0IHRhc2sgLSBzbyBweEN1cnJlbnRUQ0IgaXMgdGhlIHRhc2sgaGFuZGxlLiAqLw0KLSAgICBpZiggeFRhc2sgPT0gTlVMTCApDQotICAgIHsNCi0gICAgICAgIHhUYXNrID0gKCBUYXNrSGFuZGxlX3QgKSBweEN1cnJlbnRUQ0I7DQotICAgIH0NCisJLyogUGFzc2luZyBOVUxMIGFzIHhUYXNrIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgY2FsbGluZyB0YXNrIGlzIHRoZQ0KKwlzdWJqZWN0IHRhc2sgLSBzbyBweEN1cnJlbnRUQ0IgaXMgdGhlIHRhc2sgaGFuZGxlLiAqLw0KKwlpZiggeFRhc2sgPT0gTlVMTCApDQorCXsNCisJCXhUYXNrID0gKCBUYXNrSGFuZGxlX3QgKSBweEN1cnJlbnRUQ0I7DQorCX0NCiANCi0gICAgLyogQWxsb2NhdGUgYSBidWZmZXIgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYWxsIHRoZSBmbG9wIHJlZ2lzdGVycy4gKi8NCi0gICAgcHVsRmxvcEJ1ZmZlciA9ICggdWludDMyX3QgKiApIHB2UG9ydE1hbGxvYyggcG9ydEZMT1BfU1RPUkFHRV9TSVpFICk7DQorCS8qIEFsbG9jYXRlIGEgYnVmZmVyIGxhcmdlIGVub3VnaCB0byBob2xkIGFsbCB0aGUgZmxvcCByZWdpc3RlcnMuICovDQorCXB1bEZsb3BCdWZmZXIgPSAoIHVpbnQzMl90ICogKSBwdlBvcnRNYWxsb2MoIHBvcnRGTE9QX1NUT1JBR0VfU0laRSApOw0KIA0KLSAgICBpZiggcHVsRmxvcEJ1ZmZlciAhPSBOVUxMICkNCi0gICAgew0KLSAgICAgICAgLyogU3RhcnQgd2l0aCB0aGUgcmVnaXN0ZXJzIGluIGEgYmVuaWduIHN0YXRlLiAqLw0KLSAgICAgICAgbWVtc2V0KCAoIHZvaWQgKiApIHB1bEZsb3BCdWZmZXIsIDB4MDAsIHBvcnRGTE9QX1NUT1JBR0VfU0laRSApOw0KKwlpZiggcHVsRmxvcEJ1ZmZlciAhPSBOVUxMICkNCisJew0KKwkJLyogU3RhcnQgd2l0aCB0aGUgcmVnaXN0ZXJzIGluIGEgYmVuaWduIHN0YXRlLiAqLw0KKwkJbWVtc2V0KCAoIHZvaWQgKiApIHB1bEZsb3BCdWZmZXIsIDB4MDAsIHBvcnRGTE9QX1NUT1JBR0VfU0laRSApOw0KIA0KLSAgICAgICAgLyogVGhlIGZpcnN0IHRoaW5nIHRvIGdldCBzYXZlZCBpbiB0aGUgYnVmZmVyIGlzIHRoZSBGUFNDUiB2YWx1ZSAtDQotICAgICAgICAgKiBpbml0aWFsaXNlIHRoaXMgdG8gdGhlIGN1cnJlbnQgRlBTQ1IgdmFsdWUuICovDQotICAgICAgICAqcHVsRmxvcEJ1ZmZlciA9IGdldF9mcHNjcigpOw0KKwkJLyogVGhlIGZpcnN0IHRoaW5nIHRvIGdldCBzYXZlZCBpbiB0aGUgYnVmZmVyIGlzIHRoZSBGUFNDUiB2YWx1ZSAtDQorCQlpbml0aWFsaXNlIHRoaXMgdG8gdGhlIGN1cnJlbnQgRlBTQ1IgdmFsdWUuICovDQorCQkqcHVsRmxvcEJ1ZmZlciA9IGdldF9mcHNjcigpOw0KIA0KLSAgICAgICAgLyogVXNlIHRoZSB0YXNrIHRhZyB0byBwb2ludCB0byB0aGUgZmxvcCBidWZmZXIuICBQYXNzIHBvaW50ZXIgdG8ganVzdA0KLSAgICAgICAgICogYWJvdmUgdGhlIGJ1ZmZlciBiZWNhdXNlIHRoZSBmbG9wIHNhdmUgcm91dGluZSB1c2VzIGEgcHJlLWRlY3JlbWVudC4gKi8NCi0gICAgICAgIHZUYXNrU2V0QXBwbGljYXRpb25UYXNrVGFnKCB4VGFzaywgKCB2b2lkICogKSAoIHB1bEZsb3BCdWZmZXIgKyBwb3J0RkxPUF9SRUdJU1RFUlNfVE9fU1RPUkUgKSApOw0KLSAgICAgICAgeFJldHVybiA9IHBkUEFTUzsNCi0gICAgfQ0KLSAgICBlbHNlDQotICAgIHsNCi0gICAgICAgIHhSZXR1cm4gPSBwZEZBSUw7DQotICAgIH0NCisJCS8qIFVzZSB0aGUgdGFzayB0YWcgdG8gcG9pbnQgdG8gdGhlIGZsb3AgYnVmZmVyLiAgUGFzcyBwb2ludGVyIHRvIGp1c3QNCisJCWFib3ZlIHRoZSBidWZmZXIgYmVjYXVzZSB0aGUgZmxvcCBzYXZlIHJvdXRpbmUgdXNlcyBhIHByZS1kZWNyZW1lbnQuICovDQorCQl2VGFza1NldEFwcGxpY2F0aW9uVGFza1RhZyggeFRhc2ssICggdm9pZCAqICkgKCBwdWxGbG9wQnVmZmVyICsgcG9ydEZMT1BfUkVHSVNURVJTX1RPX1NUT1JFICkgKTsNCisJCXhSZXR1cm4gPSBwZFBBU1M7DQorCX0NCisJZWxzZQ0KKwl7DQorCQl4UmV0dXJuID0gcGRGQUlMOw0KKwl9DQogDQotICAgIHJldHVybiB4UmV0dXJuOw0KKwlyZXR1cm4geFJldHVybjsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvUmVuZXNhcy9TSDJBX0ZQVS9wb3J0bWFjcm8uaCBiL3BvcnRhYmxlL1JlbmVzYXMvU0gyQV9GUFUvcG9ydG1hY3JvLmgKaW5kZXggYzg4YjA2Ni4uZjBiODAzYyAxMDA2NDQKLS0tIGEvcG9ydGFibGUvUmVuZXNhcy9TSDJBX0ZQVS9wb3J0bWFjcm8uaAorKysgYi9wb3J0YWJsZS9SZW5lc2FzL1NIMkFfRlBVL3BvcnRtYWNyby5oCkBAIC0yNywxMyArMjcsMTMgQEAKIA0KIA0KICNpZm5kZWYgUE9SVE1BQ1JPX0gNCi0gICAgI2RlZmluZSBQT1JUTUFDUk9fSA0KKyNkZWZpbmUgUE9SVE1BQ1JPX0gNCiANCi0gICAgI2luY2x1ZGUgPG1hY2hpbmUuaD4NCisjaW5jbHVkZSA8bWFjaGluZS5oPg0KIA0KLSAgICAjaWZkZWYgX19jcGx1c3BsdXMNCi0gICAgICAgIGV4dGVybiAiQyIgew0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICogUG9ydCBzcGVjaWZpYyBkZWZpbml0aW9ucy4NCkBAIC00Niw5MyArNDYsOTQgQEAKICAqLw0KIA0KIC8qIFR5cGUgZGVmaW5pdGlvbnMgLSB0aGVzZSBhcmUgYSBiaXQgbGVnYWN5IGFuZCBub3QgcmVhbGx5IHVzZWQgbm93LCBvdGhlciB0aGFuDQotICogcG9ydFNUQUNLX1RZUEUgYW5kIHBvcnRCQVNFX1RZUEUuICovDQotICAgICNkZWZpbmUgcG9ydENIQVIgICAgICAgICAgY2hhcg0KLSAgICAjZGVmaW5lIHBvcnRGTE9BVCAgICAgICAgIGZsb2F0DQotICAgICNkZWZpbmUgcG9ydERPVUJMRSAgICAgICAgZG91YmxlDQotICAgICNkZWZpbmUgcG9ydExPTkcgICAgICAgICAgbG9uZw0KLSAgICAjZGVmaW5lIHBvcnRTSE9SVCAgICAgICAgIHNob3J0DQotICAgICNkZWZpbmUgcG9ydFNUQUNLX1RZUEUgICAgdWludDMyX3QNCi0gICAgI2RlZmluZSBwb3J0QkFTRV9UWVBFICAgICBsb25nDQorcG9ydFNUQUNLX1RZUEUgYW5kIHBvcnRCQVNFX1RZUEUuICovDQorI2RlZmluZSBwb3J0Q0hBUgkJY2hhcg0KKyNkZWZpbmUgcG9ydEZMT0FUCQlmbG9hdA0KKyNkZWZpbmUgcG9ydERPVUJMRQkJZG91YmxlDQorI2RlZmluZSBwb3J0TE9ORwkJbG9uZw0KKyNkZWZpbmUgcG9ydFNIT1JUCQlzaG9ydA0KKyNkZWZpbmUgcG9ydFNUQUNLX1RZUEUJdWludDMyX3QNCisjZGVmaW5lIHBvcnRCQVNFX1RZUEUJbG9uZw0KIA0KLSAgICB0eXBlZGVmIHBvcnRTVEFDS19UWVBFICAgU3RhY2tUeXBlX3Q7DQotICAgIHR5cGVkZWYgbG9uZyAgICAgICAgICAgICBCYXNlVHlwZV90Ow0KLSAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgICAgVUJhc2VUeXBlX3Q7DQordHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSBTdGFja1R5cGVfdDsNCit0eXBlZGVmIGxvbmcgQmFzZVR5cGVfdDsNCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgVUJhc2VUeXBlX3Q7DQogDQotICAgICNpZiAoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQotICAgICAgICB0eXBlZGVmIHVpbnQxNl90ICAgICBUaWNrVHlwZV90Ow0KLSAgICAgICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICAgICAgICAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmYNCi0gICAgI2Vsc2UNCi0gICAgICAgIHR5cGVkZWYgdWludDMyX3QgICAgIFRpY2tUeXBlX3Q7DQotICAgICAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgICAgICAgICAgICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTA0KKyNpZiggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCisJdHlwZWRlZiB1aW50MTZfdCBUaWNrVHlwZV90Ow0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQorI2Vsc2UNCisJdHlwZWRlZiB1aW50MzJfdCBUaWNrVHlwZV90Ow0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQogDQotLyogMzItYml0IHRpY2sgdHlwZSBvbiBhIDMyLWJpdCBhcmNoaXRlY3R1cmUsIHNvIHJlYWRzIG9mIHRoZSB0aWNrIGNvdW50IGRvDQotICogbm90IG5lZWQgdG8gYmUgZ3VhcmRlZCB3aXRoIGEgY3JpdGljYWwgc2VjdGlvbi4gKi8NCi0gICAgICAgICNkZWZpbmUgcG9ydFRJQ0tfVFlQRV9JU19BVE9NSUMgICAgMQ0KLSAgICAjZW5kaWYNCisJLyogMzItYml0IHRpY2sgdHlwZSBvbiBhIDMyLWJpdCBhcmNoaXRlY3R1cmUsIHNvIHJlYWRzIG9mIHRoZSB0aWNrIGNvdW50IGRvDQorCW5vdCBuZWVkIHRvIGJlIGd1YXJkZWQgd2l0aCBhIGNyaXRpY2FsIHNlY3Rpb24uICovDQorCSNkZWZpbmUgcG9ydFRJQ0tfVFlQRV9JU19BVE9NSUMgMQ0KKyNlbmRpZg0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIEhhcmR3YXJlIHNwZWNpZmljcy4gKi8NCi0gICAgI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQgICAgICAgICAgICAgICA4DQotICAgICNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSCAgICAgICAgICAgICAgICAgLTENCi0gICAgI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMgICAgICAgICAgICAgICAoICggVGlja1R5cGVfdCApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KLSAgICAjZGVmaW5lIHBvcnROT1AoKSAgICBub3AoKQ0KLSAgICAjZGVmaW5lIHBvcnRTVEFSVF9TQ0hFRFVMRVJfVFJBUF9OTyAgICAgICggMzIgKQ0KLSAgICAjZGVmaW5lIHBvcnRZSUVMRF9UUkFQX05PICAgICAgICAgICAgICAgICggMzMgKQ0KLSAgICAjZGVmaW5lIHBvcnRLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZICAgICggMSApDQorI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQJCQkJOA0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJCQktMQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TCQkJCSggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQorI2RlZmluZSBwb3J0Tk9QKCkJCQkJCQlub3AoKQ0KKyNkZWZpbmUgcG9ydFNUQVJUX1NDSEVEVUxFUl9UUkFQX05PCQkoIDMyICkNCisjZGVmaW5lIHBvcnRZSUVMRF9UUkFQX05PCQkJCSggMzMgKQ0KKyNkZWZpbmUgcG9ydEtFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkJKCAxICkNCiANCi0gICAgdm9pZCB2UG9ydFlpZWxkKCB2b2lkICk7DQotICAgICNkZWZpbmUgcG9ydFlJRUxEKCkgICAgICAgICAgICAgICAgdlBvcnRZaWVsZCgpDQordm9pZCB2UG9ydFlpZWxkKCB2b2lkICk7DQorI2RlZmluZSBwb3J0WUlFTEQoKQkJCQkJCXZQb3J0WWllbGQoKQ0KIA0KLSAgICBleHRlcm4gdm9pZCB2VGFza1N3aXRjaENvbnRleHQoIHZvaWQgKTsNCi0gICAgI2RlZmluZSBwb3J0WUlFTERfRlJPTV9JU1IoIHggKSAgICBpZiggeCAhPSBwZEZBTFNFICkgdlRhc2tTd2l0Y2hDb250ZXh0KCkNCitleHRlcm4gdm9pZCB2VGFza1N3aXRjaENvbnRleHQoIHZvaWQgKTsNCisjZGVmaW5lIHBvcnRZSUVMRF9GUk9NX0lTUiggeCApCQkJaWYoIHggIT0gcGRGQUxTRSApIHZUYXNrU3dpdGNoQ29udGV4dCgpDQogDQogLyoNCiAgKiBUaGlzIGZ1bmN0aW9uIHRlbGxzIHRoZSBrZXJuZWwgdGhhdCB0aGUgdGFzayByZWZlcmVuY2VkIGJ5IHhUYXNrIGlzIGdvaW5nIHRvDQogICogdXNlIHRoZSBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMgYW5kIHRoZXJlZm9yZSByZXF1aXJlcyB0aGUgZmxvYXRpbmcgcG9pbnQNCiAgKiByZWdpc3RlcnMgc2F2ZWQgYXMgcGFydCBvZiBpdHMgY29udGV4dC4NCiAgKi8NCi0gICAgQmFzZVR5cGVfdCB4UG9ydFVzZXNGbG9hdGluZ1BvaW50KCB2b2lkICogeFRhc2sgKTsNCitCYXNlVHlwZV90IHhQb3J0VXNlc0Zsb2F0aW5nUG9pbnQoIHZvaWQqIHhUYXNrICk7DQogDQogLyoNCiAgKiBUaGUgZmxvcCBzYXZlIGFuZCByZXN0b3JlIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCBpbiBwb3J0YXNtLnNyYyBhbmQgY2FsbGVkIGJ5DQogICogdGhlIHRyYWNlICJ0YXNrIHN3aXRjaGVkIGluIiBhbmQgInRyYWNlIHRhc2sgc3dpdGNoZWQgb3V0IiBtYWNyb3MuDQogICovDQotICAgIHZvaWQgdlBvcnRTYXZlRmxvcFJlZ2lzdGVycyggdm9pZCAqIHB1bEJ1ZmZlciApOw0KLSAgICB2b2lkIHZQb3J0UmVzdG9yZUZsb3BSZWdpc3RlcnMoIHZvaWQgKiBwdWxCdWZmZXIgKTsNCit2b2lkIHZQb3J0U2F2ZUZsb3BSZWdpc3RlcnMoIHZvaWQgKnB1bEJ1ZmZlciApOw0KK3ZvaWQgdlBvcnRSZXN0b3JlRmxvcFJlZ2lzdGVycyggdm9pZCAqcHVsQnVmZmVyICk7DQogDQogLyoNCiAgKiBweFRhc2tUYWcgaXMgdXNlZCB0byBwb2ludCB0byB0aGUgYnVmZmVyIGludG8gd2hpY2ggdGhlIGZsb2F0aW5nIHBvaW50DQogICogY29udGV4dCBzaG91bGQgYmUgc2F2ZWQuICBJZiBweFRhc2tUYWcgaXMgTlVMTCB0aGVuIHRoZSB0YXNrIGRvZXMgbm90IHVzZQ0KICAqIGEgZmxvYXRpbmcgcG9pbnQgY29udGV4dC4NCiAgKi8NCi0gICAgI2RlZmluZSB0cmFjZVRBU0tfU1dJVENIRURfT1VUKCkgICAgaWYoIHB4Q3VycmVudFRDQi0+cHhUYXNrVGFnICE9IE5VTEwgKSB2UG9ydFNhdmVGbG9wUmVnaXN0ZXJzKCBweEN1cnJlbnRUQ0ItPnB4VGFza1RhZyApDQotICAgICNkZWZpbmUgdHJhY2VUQVNLX1NXSVRDSEVEX0lOKCkgICAgIGlmKCBweEN1cnJlbnRUQ0ItPnB4VGFza1RhZyAhPSBOVUxMICkgdlBvcnRSZXN0b3JlRmxvcFJlZ2lzdGVycyggcHhDdXJyZW50VENCLT5weFRhc2tUYWcgKQ0KKyNkZWZpbmUgdHJhY2VUQVNLX1NXSVRDSEVEX09VVCgpIGlmKCBweEN1cnJlbnRUQ0ItPnB4VGFza1RhZyAhPSBOVUxMICkgdlBvcnRTYXZlRmxvcFJlZ2lzdGVycyggcHhDdXJyZW50VENCLT5weFRhc2tUYWcgKQ0KKyNkZWZpbmUgdHJhY2VUQVNLX1NXSVRDSEVEX0lOKCkgaWYoIHB4Q3VycmVudFRDQi0+cHhUYXNrVGFnICE9IE5VTEwgKSB2UG9ydFJlc3RvcmVGbG9wUmVnaXN0ZXJzKCBweEN1cnJlbnRUQ0ItPnB4VGFza1RhZyApDQogDQogLyoNCiAgKiBUaGVzZSBtYWNyb3Mgc2hvdWxkIGJlIGNhbGxlZCBkaXJlY3RseSwgYnV0IHRocm91Z2ggdGhlIHRhc2tFTlRFUl9DUklUSUNBTCgpDQogICogYW5kIHRhc2tFWElUX0NSSVRJQ0FMKCkgbWFjcm9zLg0KICAqLw0KLSAgICAjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpICAgICBzZXRfaW1hc2soIDB4MDAgKQ0KLSAgICAjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAgICBzZXRfaW1hc2soIHBvcnRLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZICkNCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpIAlzZXRfaW1hc2soIDB4MDAgKQ0KKyNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpIAlzZXRfaW1hc2soIHBvcnRLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZICkNCiANCiAvKiBDcml0aWNhbCBuZXN0aW5nIGNvdW50cyBhcmUgc3RvcmVkIGluIHRoZSBUQ0IuICovDQotICAgICNkZWZpbmUgcG9ydENSSVRJQ0FMX05FU1RJTkdfSU5fVENCICAgICggMSApDQorI2RlZmluZSBwb3J0Q1JJVElDQUxfTkVTVElOR19JTl9UQ0IgKCAxICkNCiANCiAvKiBUaGUgY3JpdGljYWwgbmVzdGluZyBmdW5jdGlvbnMgZGVmaW5lZCB3aXRoaW4gdGFza3MuYy4gKi8NCi0gICAgZXh0ZXJuIHZvaWQgdlRhc2tFbnRlckNyaXRpY2FsKCB2b2lkICk7DQotICAgIGV4dGVybiB2b2lkIHZUYXNrRXhpdENyaXRpY2FsKCB2b2lkICk7DQotICAgICNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgICAgdlRhc2tFbnRlckNyaXRpY2FsKCk7DQotICAgICNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKSAgICAgdlRhc2tFeGl0Q3JpdGljYWwoKTsNCitleHRlcm4gdm9pZCB2VGFza0VudGVyQ3JpdGljYWwoIHZvaWQgKTsNCitleHRlcm4gdm9pZCB2VGFza0V4aXRDcml0aWNhbCggdm9pZCApOw0KKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkJdlRhc2tFbnRlckNyaXRpY2FsKCk7DQorI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpCQl2VGFza0V4aXRDcml0aWNhbCgpOw0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCi0gICAgI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICAgICAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KIA0KLSAgICAjaWZkZWYgX19jcGx1c3BsdXMNCi0gICAgICAgIH0NCi0gICAgI2VuZGlmDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KIA0KICNlbmRpZiAvKiBQT1JUTUFDUk9fSCAqLw0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL1Jvd2xleS9NU1A0MzBGNDQ5L3BvcnQuYyBiL3BvcnRhYmxlL1Jvd2xleS9NU1A0MzBGNDQ5L3BvcnQuYwppbmRleCAyNDFkYWQ5Li43OThlMmExIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9Sb3dsZXkvTVNQNDMwRjQ0OS9wb3J0LmMKKysrIGIvcG9ydGFibGUvUm93bGV5L01TUDQzMEY0NDkvcG9ydC5jCkBAIC0zMCwyOCArMzAsMjggQEAKICNpbmNsdWRlICJ0YXNrLmgiDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLSogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFibGUuaCBmb3IgdGhlIE1TUDQzMCBwb3J0Lg0KLSotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgTVNQNDMwIHBvcnQuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0vKiBDb25zdGFudHMgcmVxdWlyZWQgZm9yIGhhcmR3YXJlIHNldHVwLiAgVGhlIHRpY2sgSVNSIHJ1bnMgb2ZmIHRoZSBBQ0xLLA0KLSAqIG5vdCB0aGUgTUNMSy4gKi8NCi0jZGVmaW5lIHBvcnRBQ0xLX0ZSRVFVRU5DWV9IWiAgICAgICAgICAgKCAoIFRpY2tUeXBlX3QgKSAzMjc2OCApDQotI2RlZmluZSBwb3J0SU5JVElBTF9DUklUSUNBTF9ORVNUSU5HICAgICggKCB1aW50MTZfdCApIDEwICkNCi0jZGVmaW5lIHBvcnRGTEFHU19JTlRfRU5BQkxFRCAgICAgICAgICAgKCAoIFN0YWNrVHlwZV90ICkgMHgwOCApDQorLyogQ29uc3RhbnRzIHJlcXVpcmVkIGZvciBoYXJkd2FyZSBzZXR1cC4gIFRoZSB0aWNrIElTUiBydW5zIG9mZiB0aGUgQUNMSywgDQorbm90IHRoZSBNQ0xLLiAqLw0KKyNkZWZpbmUgcG9ydEFDTEtfRlJFUVVFTkNZX0haCQkJKCAoIFRpY2tUeXBlX3QgKSAzMjc2OCApDQorI2RlZmluZSBwb3J0SU5JVElBTF9DUklUSUNBTF9ORVNUSU5HCSggKCB1aW50MTZfdCApIDEwICkNCisjZGVmaW5lIHBvcnRGTEFHU19JTlRfRU5BQkxFRAkJCSggKCBTdGFja1R5cGVfdCApIDB4MDggKQ0KIA0KIC8qIFdlIHJlcXVpcmUgdGhlIGFkZHJlc3Mgb2YgdGhlIHB4Q3VycmVudFRDQiB2YXJpYWJsZSwgYnV0IGRvbid0IHdhbnQgdG8ga25vdw0KLSAqIGFueSBkZXRhaWxzIG9mIGl0cyB0eXBlLiAqLw0KK2FueSBkZXRhaWxzIG9mIGl0cyB0eXBlLiAqLw0KIHR5cGVkZWYgdm9pZCBUQ0JfdDsNCiBleHRlcm4gdm9sYXRpbGUgVENCX3QgKiB2b2xhdGlsZSBweEN1cnJlbnRUQ0I7DQogDQotLyogRWFjaCB0YXNrIG1haW50YWlucyBhIGNvdW50IG9mIHRoZSBjcml0aWNhbCBzZWN0aW9uIG5lc3RpbmcgZGVwdGguICBFYWNoDQotICogdGltZSBhIGNyaXRpY2FsIHNlY3Rpb24gaXMgZW50ZXJlZCB0aGUgY291bnQgaXMgaW5jcmVtZW50ZWQuICBFYWNoIHRpbWUgYQ0KLSAqIGNyaXRpY2FsIHNlY3Rpb24gaXMgZXhpdGVkIHRoZSBjb3VudCBpcyBkZWNyZW1lbnRlZCAtIHdpdGggaW50ZXJydXB0cyBvbmx5DQotICogYmVpbmcgcmUtZW5hYmxlZCBpZiB0aGUgY291bnQgaXMgemVyby4NCi0gKg0KLSAqIHVzQ3JpdGljYWxOZXN0aW5nIHdpbGwgZ2V0IHNldCB0byB6ZXJvIHdoZW4gdGhlIHNjaGVkdWxlciBzdGFydHMsIGJ1dCBtdXN0DQotICogbm90IGJlIGluaXRpYWxpc2VkIHRvIHplcm8gYXMgdGhpcyB3aWxsIGNhdXNlIHByb2JsZW1zIGR1cmluZyB0aGUgc3RhcnR1cA0KLSAqIHNlcXVlbmNlLiAqLw0KKy8qIEVhY2ggdGFzayBtYWludGFpbnMgYSBjb3VudCBvZiB0aGUgY3JpdGljYWwgc2VjdGlvbiBuZXN0aW5nIGRlcHRoLiAgRWFjaCANCit0aW1lIGEgY3JpdGljYWwgc2VjdGlvbiBpcyBlbnRlcmVkIHRoZSBjb3VudCBpcyBpbmNyZW1lbnRlZC4gIEVhY2ggdGltZSBhIA0KK2NyaXRpY2FsIHNlY3Rpb24gaXMgZXhpdGVkIHRoZSBjb3VudCBpcyBkZWNyZW1lbnRlZCAtIHdpdGggaW50ZXJydXB0cyBvbmx5IA0KK2JlaW5nIHJlLWVuYWJsZWQgaWYgdGhlIGNvdW50IGlzIHplcm8uDQorDQordXNDcml0aWNhbE5lc3Rpbmcgd2lsbCBnZXQgc2V0IHRvIHplcm8gd2hlbiB0aGUgc2NoZWR1bGVyIHN0YXJ0cywgYnV0IG11c3QNCitub3QgYmUgaW5pdGlhbGlzZWQgdG8gemVybyBhcyB0aGlzIHdpbGwgY2F1c2UgcHJvYmxlbXMgZHVyaW5nIHRoZSBzdGFydHVwDQorc2VxdWVuY2UuICovDQogdm9sYXRpbGUgdWludDE2X3QgdXNDcml0aWNhbE5lc3RpbmcgPSBwb3J0SU5JVElBTF9DUklUSUNBTF9ORVNUSU5HOw0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KQEAgLTYzLDEwOSArNjMsMTEwIEBACiB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKTsNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0vKg0KLSAqIEluaXRpYWxpc2UgdGhlIHN0YWNrIG9mIGEgdGFzayB0byBsb29rIGV4YWN0bHkgYXMgaWYgYSBjYWxsIHRvDQorLyogDQorICogSW5pdGlhbGlzZSB0aGUgc3RhY2sgb2YgYSB0YXNrIHRvIGxvb2sgZXhhY3RseSBhcyBpZiBhIGNhbGwgdG8gDQogICogcG9ydFNBVkVfQ09OVEVYVCBoYWQgYmVlbiBjYWxsZWQuDQotICoNCisgKiANCiAgKiBTZWUgdGhlIGhlYWRlciBmaWxlIHBvcnRhYmxlLmguDQogICovDQotU3RhY2tUeXBlX3QgKiBweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICogcHhUb3BPZlN0YWNrLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYXNrRnVuY3Rpb25fdCBweENvZGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KK1N0YWNrVHlwZV90ICpweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICpweFRvcE9mU3RhY2ssIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzICkNCiB7DQotICAgIC8qDQotICAgICAqICBQbGFjZSBhIGZldyBieXRlcyBvZiBrbm93biB2YWx1ZXMgb24gdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suDQotICAgICAqICBUaGlzIGlzIGp1c3QgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgYW5kIGNhbiBiZSBpbmNsdWRlZCBpZiByZXF1aXJlZC4NCi0gICAgICoNCi0gICAgICogcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTExMTsNCi0gICAgICogIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgKiBweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgyMjIyOw0KLSAgICAgKiAgcHhUb3BPZlN0YWNrLS07DQotICAgICAqIHB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDMzMzM7DQotICAgICAqICBweFRvcE9mU3RhY2stLTsNCi0gICAgICovDQorCS8qIA0KKwkJUGxhY2UgYSBmZXcgYnl0ZXMgb2Yga25vd24gdmFsdWVzIG9uIHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLiANCisJCVRoaXMgaXMganVzdCB1c2VmdWwgZm9yIGRlYnVnZ2luZyBhbmQgY2FuIGJlIGluY2x1ZGVkIGlmIHJlcXVpcmVkLg0KIA0KLSAgICAvKiBUaGUgbXNwNDMwIGF1dG9tYXRpY2FsbHkgcHVzaGVzIHRoZSBQQyB0aGVuIFNSIG9udG8gdGhlIHN0YWNrIGJlZm9yZQ0KLSAgICAgKiBleGVjdXRpbmcgYW4gSVNSLiAgV2Ugd2FudCB0aGUgc3RhY2sgdG8gbG9vayBqdXN0IGFzIGlmIHRoaXMgaGFzIGhhcHBlbmVkDQotICAgICAqIHNvIHBsYWNlIGEgcG9pbnRlciB0byB0aGUgc3RhcnQgb2YgdGhlIHRhc2sgb24gdGhlIHN0YWNrIGZpcnN0IC0gZm9sbG93ZWQNCi0gICAgICogYnkgdGhlIGZsYWdzIHdlIHdhbnQgdGhlIHRhc2sgdG8gdXNlIHdoZW4gaXQgc3RhcnRzIHVwLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB4Q29kZTsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSBwb3J0RkxBR1NfSU5UX0VOQUJMRUQ7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDExMTE7DQorCQlweFRvcE9mU3RhY2stLTsNCisJCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgyMjIyOw0KKwkJcHhUb3BPZlN0YWNrLS07DQorCQkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MzMzMzsNCisJCXB4VG9wT2ZTdGFjay0tOyANCisJKi8NCiANCi0gICAgLyogTmV4dCB0aGUgZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycy4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDQ0NDQ7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4NTU1NTsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHg2NjY2Ow0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDc3Nzc7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4ODg4ODsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHg5OTk5Ow0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweGFhYWE7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4YmJiYjsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhjY2NjOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweGRkZGQ7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4ZWVlZTsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIFRoZSBtc3A0MzAgYXV0b21hdGljYWxseSBwdXNoZXMgdGhlIFBDIHRoZW4gU1Igb250byB0aGUgc3RhY2sgYmVmb3JlIA0KKwlleGVjdXRpbmcgYW4gSVNSLiAgV2Ugd2FudCB0aGUgc3RhY2sgdG8gbG9vayBqdXN0IGFzIGlmIHRoaXMgaGFzIGhhcHBlbmVkDQorCXNvIHBsYWNlIGEgcG9pbnRlciB0byB0aGUgc3RhcnQgb2YgdGhlIHRhc2sgb24gdGhlIHN0YWNrIGZpcnN0IC0gZm9sbG93ZWQNCisJYnkgdGhlIGZsYWdzIHdlIHdhbnQgdGhlIHRhc2sgdG8gdXNlIHdoZW4gaXQgc3RhcnRzIHVwLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB4Q29kZTsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSBwb3J0RkxBR1NfSU5UX0VOQUJMRUQ7DQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBXaGVuIHRoZSB0YXNrIHN0YXJ0cyBpcyB3aWxsIGV4cGVjdCB0byBmaW5kIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXIgaW4NCi0gICAgICogUjE1LiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHB2UGFyYW1ldGVyczsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIE5leHQgdGhlIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMuICovDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHg0NDQ0Ow0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDU1NTU7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4NjY2NjsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHg3Nzc3Ow0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDg4ODg7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4OTk5OTsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhhYWFhOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweGJiYmI7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4Y2NjYzsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhkZGRkOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweGVlZWU7DQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBBIHZhcmlhYmxlIGlzIHVzZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgY3JpdGljYWwgc2VjdGlvbiBuZXN0aW5nLg0KLSAgICAgKiBUaGlzIHZhcmlhYmxlIGhhcyB0byBiZSBzdG9yZWQgYXMgcGFydCBvZiB0aGUgdGFzayBjb250ZXh0IGFuZCBpcw0KLSAgICAgKiBpbml0aWFsbHkgc2V0IHRvIHplcm8uICovDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgcG9ydE5PX0NSSVRJQ0FMX1NFQ1RJT05fTkVTVElORzsNCisJLyogV2hlbiB0aGUgdGFzayBzdGFydHMgaXMgd2lsbCBleHBlY3QgdG8gZmluZCB0aGUgZnVuY3Rpb24gcGFyYW1ldGVyIGluDQorCVIxNS4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBwdlBhcmFtZXRlcnM7DQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSB0b3Agb2YgdGhlIHN0YWNrIHdlIGhhdmUgZ2VuZXJhdGVkIHNvIHRoaXMgY2FuDQotICAgICAqIGJlIHN0b3JlZCBpbiB0aGUgdGFzayBjb250cm9sIGJsb2NrIGZvciB0aGUgdGFzay4gKi8NCi0gICAgcmV0dXJuIHB4VG9wT2ZTdGFjazsNCisJLyogQSB2YXJpYWJsZSBpcyB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGNyaXRpY2FsIHNlY3Rpb24gbmVzdGluZy4gIA0KKwlUaGlzIHZhcmlhYmxlIGhhcyB0byBiZSBzdG9yZWQgYXMgcGFydCBvZiB0aGUgdGFzayBjb250ZXh0IGFuZCBpcyANCisJaW5pdGlhbGx5IHNldCB0byB6ZXJvLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkc7CQ0KKw0KKwkvKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSB0b3Agb2YgdGhlIHN0YWNrIHdlIGhhdmUgZ2VuZXJhdGVkIHNvIHRoaXMgY2FuDQorCWJlIHN0b3JlZCBpbiB0aGUgdGFzayBjb250cm9sIGJsb2NrIGZvciB0aGUgdGFzay4gKi8NCisJcmV0dXJuIHB4VG9wT2ZTdGFjazsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogdm9pZCB2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApDQogew0KLSAgICAvKiBJdCBpcyB1bmxpa2VseSB0aGF0IHRoZSBNU1A0MzAgcG9ydCB3aWxsIGdldCBzdG9wcGVkLiAgSWYgcmVxdWlyZWQgc2ltcGx5DQotICAgICAqIGRpc2FibGUgdGhlIHRpY2sgaW50ZXJydXB0IGhlcmUuICovDQorCS8qIEl0IGlzIHVubGlrZWx5IHRoYXQgdGhlIE1TUDQzMCBwb3J0IHdpbGwgZ2V0IHN0b3BwZWQuICBJZiByZXF1aXJlZCBzaW1wbHkNCisJZGlzYWJsZSB0aGUgdGljayBpbnRlcnJ1cHQgaGVyZS4gKi8NCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyoNCiAgKiBIYXJkd2FyZSBpbml0aWFsaXNhdGlvbiB0byBnZW5lcmF0ZSB0aGUgUlRPUyB0aWNrLiAgVGhpcyB1c2VzIHRpbWVyIDANCi0gKiBidXQgY291bGQgYWx0ZXJuYXRpdmVseSB1c2UgdGhlIHdhdGNoZG9nIHRpbWVyIG9yIHRpbWVyIDEuDQorICogYnV0IGNvdWxkIGFsdGVybmF0aXZlbHkgdXNlIHRoZSB3YXRjaGRvZyB0aW1lciBvciB0aW1lciAxLiANCiAgKi8NCiB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKQ0KIHsNCi0gICAgLyogRW5zdXJlIHRoZSB0aW1lciBpcyBzdG9wcGVkLiAqLw0KLSAgICBUQUNUTCA9IDA7DQorCS8qIEVuc3VyZSB0aGUgdGltZXIgaXMgc3RvcHBlZC4gKi8NCisJVEFDVEwgPSAwOw0KIA0KLSAgICAvKiBSdW4gdGhlIHRpbWVyIG9mIHRoZSBBQ0xLLiAqLw0KLSAgICBUQUNUTCA9IFRBU1NFTF8xOw0KKwkvKiBSdW4gdGhlIHRpbWVyIG9mIHRoZSBBQ0xLLiAqLw0KKwlUQUNUTCA9IFRBU1NFTF8xOw0KIA0KLSAgICAvKiBDbGVhciBldmVyeXRoaW5nIHRvIHN0YXJ0IHdpdGguICovDQotICAgIFRBQ1RMIHw9IFRBQ0xSOw0KKwkvKiBDbGVhciBldmVyeXRoaW5nIHRvIHN0YXJ0IHdpdGguICovDQorCVRBQ1RMIHw9IFRBQ0xSOw0KIA0KLSAgICAvKiBTZXQgdGhlIGNvbXBhcmUgbWF0Y2ggdmFsdWUgYWNjb3JkaW5nIHRvIHRoZSB0aWNrIHJhdGUgd2Ugd2FudC4gKi8NCi0gICAgVEFDQ1IwID0gcG9ydEFDTEtfRlJFUVVFTkNZX0haIC8gY29uZmlnVElDS19SQVRFX0haOw0KKwkvKiBTZXQgdGhlIGNvbXBhcmUgbWF0Y2ggdmFsdWUgYWNjb3JkaW5nIHRvIHRoZSB0aWNrIHJhdGUgd2Ugd2FudC4gKi8NCisJVEFDQ1IwID0gcG9ydEFDTEtfRlJFUVVFTkNZX0haIC8gY29uZmlnVElDS19SQVRFX0haOw0KIA0KLSAgICAvKiBFbmFibGUgdGhlIGludGVycnVwdHMuICovDQotICAgIFRBQ0NUTDAgPSBDQ0lFOw0KKwkvKiBFbmFibGUgdGhlIGludGVycnVwdHMuICovDQorCVRBQ0NUTDAgPSBDQ0lFOw0KIA0KLSAgICAvKiBTdGFydCB1cCBjbGVhbi4gKi8NCi0gICAgVEFDVEwgfD0gVEFDTFI7DQorCS8qIFN0YXJ0IHVwIGNsZWFuLiAqLw0KKwlUQUNUTCB8PSBUQUNMUjsNCiANCi0gICAgLyogVXAgbW9kZS4gKi8NCi0gICAgVEFDVEwgfD0gTUNfMTsNCisJLyogVXAgbW9kZS4gKi8NCisJVEFDVEwgfD0gTUNfMTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorDQorCQ0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL1Jvd2xleS9NU1A0MzBGNDQ5L3BvcnRhc20uaCBiL3BvcnRhYmxlL1Jvd2xleS9NU1A0MzBGNDQ5L3BvcnRhc20uaAppbmRleCAyMTQ0M2JkLi4wZmQxNWNkIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9Sb3dsZXkvTVNQNDMwRjQ0OS9wb3J0YXNtLmgKKysrIGIvcG9ydGFibGUvUm93bGV5L01TUDQzMEY0NDkvcG9ydGFzbS5oCkBAIC0yOSw1MSArMjksNTIgQEAKICNkZWZpbmUgUE9SVF9BU01fSA0KIA0KIHBvcnRTQVZFX0NPTlRFWFQgbWFjcm8NCi0vKiBTYXZlIHRoZSByZW1haW5pbmcgcmVnaXN0ZXJzLiAqLw0KLXB1c2ggcjQNCi1wdXNoIHI1DQotcHVzaCByNg0KLXB1c2ggcjcNCi1wdXNoIHI4DQotcHVzaCByOQ0KLXB1c2ggcjEwDQotcHVzaCByMTENCi1wdXNoIHIxMg0KLXB1c2ggcjEzDQotcHVzaCByMTQNCi1wdXNoIHIxNQ0KLW1vdi53ICZfdXNDcml0aWNhbE5lc3RpbmcsIHIxNA0KLXB1c2ggcjE0DQotICAgICAgIG1vdi53ICZfcHhDdXJyZW50VENCLCByMTINCi0gICAgICAgbW92LncgcjEsIEByMTINCi1lbmRtDQorICAgICAgICAgICAgICAgIC8qIFNhdmUgdGhlIHJlbWFpbmluZyByZWdpc3RlcnMuICovDQorCQlwdXNoCXI0DQorCQlwdXNoCXI1DQorCQlwdXNoCXI2DQorCQlwdXNoCXI3DQorCQlwdXNoCXI4DQorCQlwdXNoCXI5DQorCQlwdXNoCXIxMA0KKwkJcHVzaAlyMTENCisJCXB1c2gJcjEyDQorCQlwdXNoCXIxMw0KKwkJcHVzaAlyMTQNCisJCXB1c2gJcjE1DQorCQltb3YudwkmX3VzQ3JpdGljYWxOZXN0aW5nLCByMTQNCisJCXB1c2gJcjE0DQorCQltb3YudwkmX3B4Q3VycmVudFRDQiwgcjEyDQorCQltb3YudwlyMSwgQHIxMg0KKwkJZW5kbQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KLQ0KKwkJDQogcG9ydFJFU1RPUkVfQ09OVEVYVCBtYWNybw0KLSAgICAgICBtb3YudyAmX3B4Q3VycmVudFRDQiwgcjEyDQotICAgICAgIG1vdi53IEByMTIsIHIxDQotcG9wIHIxNQ0KLSAgICAgICBtb3YudyByMTUsICZfdXNDcml0aWNhbE5lc3RpbmcNCi1wb3AgcjE1DQotcG9wIHIxNA0KLXBvcCByMTMNCi1wb3AgcjEyDQotcG9wIHIxMQ0KLXBvcCByMTANCi1wb3AgcjkNCi1wb3AgcjgNCi1wb3AgcjcNCi1wb3AgcjYNCi1wb3AgcjUNCi1wb3AgcjQNCisJCW1vdi53CSZfcHhDdXJyZW50VENCLCByMTINCisJCW1vdi53CUByMTIsIHIxDQorCQlwb3AJCXIxNQ0KKwkJbW92LncJcjE1LCAmX3VzQ3JpdGljYWxOZXN0aW5nDQorCQlwb3AJCXIxNQ0KKwkJcG9wCQlyMTQNCisJCXBvcAkJcjEzDQorCQlwb3AJCXIxMg0KKwkJcG9wCQlyMTENCisJCXBvcAkJcjEwDQorCQlwb3AJCXI5DQorCQlwb3AJCXI4DQorCQlwb3AJCXI3DQorCQlwb3AJCXI2DQorCQlwb3AJCXI1DQorCQlwb3AJCXI0DQogDQotLyogVGhlIGxhc3QgdGhpbmcgb24gdGhlIHN0YWNrIHdpbGwgYmUgdGhlIHN0YXR1cyByZWdpc3Rlci4NCi0gKiAgICAgIEVuc3VyZSB0aGUgcG93ZXIgZG93biBiaXRzIGFyZSBjbGVhciByZWFkeSBmb3IgdGhlIG5leHQNCi0gKiAgICAgIHRpbWUgdGhpcyBwb3dlciBkb3duIHJlZ2lzdGVyIGlzIHBvcHBlZCBmcm9tIHRoZSBzdGFjay4gKi8NCi0gICAgICAgYmljLncgICAjIDB4ZjAsIDAgKCBTUCApDQorCQkvKiBUaGUgbGFzdCB0aGluZyBvbiB0aGUgc3RhY2sgd2lsbCBiZSB0aGUgc3RhdHVzIHJlZ2lzdGVyLg0KKyAgICAgICAgICAgICAgICBFbnN1cmUgdGhlIHBvd2VyIGRvd24gYml0cyBhcmUgY2xlYXIgcmVhZHkgZm9yIHRoZSBuZXh0DQorICAgICAgICAgICAgICAgIHRpbWUgdGhpcyBwb3dlciBkb3duIHJlZ2lzdGVyIGlzIHBvcHBlZCBmcm9tIHRoZSBzdGFjay4gKi8NCisJCWJpYy53ICAgIzB4ZjAsMChTUCkNCiANCi1yZXRpDQotZW5kbQ0KKwkJcmV0aQ0KKwkJZW5kbQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KLSNlbmRpZiAvKiBpZm5kZWYgUE9SVF9BU01fSCAqLw0KKyNlbmRpZg0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL1Jvd2xleS9NU1A0MzBGNDQ5L3BvcnRtYWNyby5oIGIvcG9ydGFibGUvUm93bGV5L01TUDQzMEY0NDkvcG9ydG1hY3JvLmgKaW5kZXggOWJkNjVhYS4uNDJmMWQ4NiAxMDA2NDQKLS0tIGEvcG9ydGFibGUvUm93bGV5L01TUDQzMEY0NDkvcG9ydG1hY3JvLmgKKysrIGIvcG9ydGFibGUvUm93bGV5L01TUDQzMEY0NDkvcG9ydG1hY3JvLmgKQEAgLTM5LDY2ICszOSw2NiBAQAogICovDQogDQogLyogVHlwZSBkZWZpbml0aW9ucy4gKi8NCi0jZGVmaW5lIHBvcnRDSEFSICAgICAgICAgIGNoYXINCi0jZGVmaW5lIHBvcnRGTE9BVCAgICAgICAgIGZsb2F0DQotI2RlZmluZSBwb3J0RE9VQkxFICAgICAgICBkb3VibGUNCi0jZGVmaW5lIHBvcnRMT05HICAgICAgICAgIGxvbmcNCi0jZGVmaW5lIHBvcnRTSE9SVCAgICAgICAgIGludA0KLSNkZWZpbmUgcG9ydFNUQUNLX1RZUEUgICAgdWludDE2X3QNCi0jZGVmaW5lIHBvcnRCQVNFX1RZUEUgICAgIHNob3J0DQorI2RlZmluZSBwb3J0Q0hBUgkJY2hhcg0KKyNkZWZpbmUgcG9ydEZMT0FUCQlmbG9hdA0KKyNkZWZpbmUgcG9ydERPVUJMRQkJZG91YmxlDQorI2RlZmluZSBwb3J0TE9ORwkJbG9uZw0KKyNkZWZpbmUgcG9ydFNIT1JUCQlpbnQNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFCXVpbnQxNl90DQorI2RlZmluZSBwb3J0QkFTRV9UWVBFCXNob3J0DQogDQotdHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSAgIFN0YWNrVHlwZV90Ow0KLXR5cGVkZWYgc2hvcnQgICAgICAgICAgICBCYXNlVHlwZV90Ow0KLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgICBVQmFzZVR5cGVfdDsNCit0eXBlZGVmIHBvcnRTVEFDS19UWVBFIFN0YWNrVHlwZV90Ow0KK3R5cGVkZWYgc2hvcnQgQmFzZVR5cGVfdDsNCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IFVCYXNlVHlwZV90Ow0KIA0KIA0KLSNpZiAoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQotICAgIHR5cGVkZWYgdWludDE2X3QgICAgIFRpY2tUeXBlX3Q7DQotICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmYNCisjaWYoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQorCXR5cGVkZWYgdWludDE2X3QgVGlja1R5cGVfdDsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggVGlja1R5cGVfdCApIDB4ZmZmZg0KICNlbHNlDQotICAgIHR5cGVkZWYgdWludDMyX3QgICAgIFRpY2tUeXBlX3Q7DQotICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwNCisJdHlwZWRlZiB1aW50MzJfdCBUaWNrVHlwZV90Ow0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQogI2VuZGlmDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogSW50ZXJydXB0IGNvbnRyb2wgbWFjcm9zLiAqLw0KLSNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpICAgIF9ESU5UKCk7IF9OT1AoKQ0KLSNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkgICAgIF9FSU5UKCk7DQorI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkJX0RJTlQoKTsgX05PUCgpDQorI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKQkJX0VJTlQoKTsNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBDcml0aWNhbCBzZWN0aW9uIGNvbnRyb2wgbWFjcm9zLiAqLw0KLSNkZWZpbmUgcG9ydE5PX0NSSVRJQ0FMX1NFQ1RJT05fTkVTVElORyAgICAoICggdWludDE2X3QgKSAwICkNCisjZGVmaW5lIHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkcJCSggKCB1aW50MTZfdCApIDAgKQ0KIA0KLSNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBleHRlcm4gdm9sYXRpbGUgdWludDE2X3QgdXNDcml0aWNhbE5lc3Rpbmc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgLyogTm93IGludGVycnVwdHMgYXJlIGRpc2FibGVkIHVzQ3JpdGljYWxOZXN0aW5nIGNhbiBiZSBhY2Nlc3NlZCAqLyAgICAgIFwNCi0gICAgICAgIC8qIGRpcmVjdGx5LiAgSW5jcmVtZW50IHVsQ3JpdGljYWxOZXN0aW5nIHRvIGtlZXAgYSBjb3VudCBvZiBob3cgbWFueSAqLyBcDQotICAgICAgICAvKiB0aW1lcyBwb3J0RU5URVJfQ1JJVElDQUwoKSBoYXMgYmVlbiBjYWxsZWQuICovICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgdXNDcml0aWNhbE5lc3RpbmcrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgfQ0KKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkJCQkJCQkJCQkJCQkJXA0KK3sJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCitleHRlcm4gdm9sYXRpbGUgdWludDE2X3QgdXNDcml0aWNhbE5lc3Rpbmc7CQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOwkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIE5vdyBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB1c0NyaXRpY2FsTmVzdGluZyBjYW4gYmUgYWNjZXNzZWQgKi8JCQlcDQorCS8qIGRpcmVjdGx5LiAgSW5jcmVtZW50IHVsQ3JpdGljYWxOZXN0aW5nIHRvIGtlZXAgYSBjb3VudCBvZiBob3cgbWFueSAqLwlcDQorCS8qIHRpbWVzIHBvcnRFTlRFUl9DUklUSUNBTCgpIGhhcyBiZWVuIGNhbGxlZC4gKi8JCQkJCQkJXA0KKwl1c0NyaXRpY2FsTmVzdGluZysrOwkJCQkJCQkJCQkJCQkJXA0KK30NCiANCi0jZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgZXh0ZXJuIHZvbGF0aWxlIHVpbnQxNl90IHVzQ3JpdGljYWxOZXN0aW5nOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBpZiggdXNDcml0aWNhbE5lc3RpbmcgPiBwb3J0Tk9fQ1JJVElDQUxfU0VDVElPTl9ORVNUSU5HICkgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBEZWNyZW1lbnQgdGhlIG5lc3RpbmcgY291bnQgYXMgd2UgYXJlIGxlYXZpbmcgYSBjcml0aWNhbCBzZWN0aW9uLiAqLyBcDQotICAgICAgICAgICAgdXNDcml0aWNhbE5lc3RpbmctLTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAvKiBJZiB0aGUgbmVzdGluZyBsZXZlbCBoYXMgcmVhY2hlZCB6ZXJvIHRoZW4gaW50ZXJydXB0cyBzaG91bGQgYmUgKi8gICBcDQotICAgICAgICAgICAgLyogcmUtZW5hYmxlZC4gKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIGlmKCB1c0NyaXRpY2FsTmVzdGluZyA9PSBwb3J0Tk9fQ1JJVElDQUxfU0VDVElPTl9ORVNUSU5HICkgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIH0NCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkJCQkJCQkJCQkJCQkJCVwNCit7CQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorZXh0ZXJuIHZvbGF0aWxlIHVpbnQxNl90IHVzQ3JpdGljYWxOZXN0aW5nOwkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCWlmKCB1c0NyaXRpY2FsTmVzdGluZyA+IHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkcgKQkJCQkJXA0KKwl7CQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCS8qIERlY3JlbWVudCB0aGUgbmVzdGluZyBjb3VudCBhcyB3ZSBhcmUgbGVhdmluZyBhIGNyaXRpY2FsIHNlY3Rpb24uICovCVwNCisJCXVzQ3JpdGljYWxOZXN0aW5nLS07CQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCS8qIElmIHRoZSBuZXN0aW5nIGxldmVsIGhhcyByZWFjaGVkIHplcm8gdGhlbiBpbnRlcnJ1cHRzIHNob3VsZCBiZSAqLwlcDQorCQkvKiByZS1lbmFibGVkLiAqLwkJCQkJCQkJCQkJCQkJXA0KKwkJaWYoIHVzQ3JpdGljYWxOZXN0aW5nID09IHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkcgKQkJCQlcDQorCQl7CQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCXBvcnRFTkFCTEVfSU5URVJSVVBUUygpOwkJCQkJCQkJCQkJXA0KKwkJfQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJfQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFRhc2sgdXRpbGl0aWVzLiAqLw0KQEAgLTEwNywyNSArMTA3LDI2IEBACiAgKiBNYW51YWwgY29udGV4dCBzd2l0Y2ggY2FsbGVkIGJ5IHBvcnRZSUVMRCBvciB0YXNrWUlFTEQuDQogICovDQogZXh0ZXJuIHZvaWQgdlBvcnRZaWVsZCggdm9pZCApOw0KLSNkZWZpbmUgcG9ydFlJRUxEKCkgICAgdlBvcnRZaWVsZCgpDQorI2RlZmluZSBwb3J0WUlFTEQoKSB2UG9ydFlpZWxkKCkNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBIYXJkd2FyZSBzcGVjaWZpY3MuICovDQotI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQgICAgMg0KLSNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSCAgICAgICggLTEgKQ0KLSNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TICAgICggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQorI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQJCQkyDQorI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RICQkJKCAtMSApDQorI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMJCQkoICggVGlja1R5cGVfdCApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KICNkZWZpbmUgcG9ydE5PUCgpDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQotI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQotI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICAgICAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApIF9fdG9wbGV2ZWwNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApIF9fdG9wbGV2ZWwNCiANCiAjaWYgY29uZmlnSU5URVJSVVBUX0VYQU1QTEVfTUVUSE9EID09IDINCiANCi0gICAgZXh0ZXJuIHZvaWQgdlRhc2tTd2l0Y2hDb250ZXh0KCB2b2lkICk7DQotICAgICNkZWZpbmUgcG9ydFlJRUxEX0ZST01fSVNSKCB4ICkgICAgaWYoIHggKSB2VGFza1N3aXRjaENvbnRleHQoKQ0KK2V4dGVybiB2b2lkIHZUYXNrU3dpdGNoQ29udGV4dCggdm9pZCApOw0KKyNkZWZpbmUgcG9ydFlJRUxEX0ZST01fSVNSKCB4ICkgaWYoIHggKSB2VGFza1N3aXRjaENvbnRleHQoKQ0KIA0KICNlbmRpZg0KIA0KICNlbmRpZiAvKiBQT1JUTUFDUk9fSCAqLw0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL1NEQ0MvQ3lnbmFsL3BvcnQuYyBiL3BvcnRhYmxlL1NEQ0MvQ3lnbmFsL3BvcnQuYwppbmRleCA3ODY1NDBiLi5kNTNlNDczIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9TRENDL0N5Z25hbC9wb3J0LmMKKysrIGIvcG9ydGFibGUvU0RDQy9DeWduYWwvcG9ydC5jCkBAIC0yNiw4ICsyNiw4IEBACiAgKi8NCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgQ3lnbmFsIHBvcnQuDQotKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyAqIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBDeWduYWwgcG9ydC4NCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFN0YW5kYXJkIGluY2x1ZGVzLiAqLw0KICNpbmNsdWRlIDxzdHJpbmcuaD4NCkBAIC0zNywyOTIgKzM3LDI4OSBAQAogI2luY2x1ZGUgInRhc2suaCINCiANCiAvKiBDb25zdGFudHMgcmVxdWlyZWQgdG8gc2V0dXAgdGltZXIgMiB0byBwcm9kdWNlIHRoZSBSVE9TIHRpY2suICovDQotI2RlZmluZSBwb3J0Q0xPQ0tfRElWSVNPUiAgICAgICAgICAgICAgICggKCB1aW50MzJfdCApIDEyICkNCi0jZGVmaW5lIHBvcnRNQVhfVElNRVJfVkFMVUUgICAgICAgICAgICAgKCAoIHVpbnQzMl90ICkgMHhmZmZmICkNCi0jZGVmaW5lIHBvcnRFTkFCTEVfVElNRVIgICAgICAgICAgICAgICAgKCAoIHVpbnQ4X3QgKSAweDA0ICkNCi0jZGVmaW5lIHBvcnRUSU1FUl8yX0lOVEVSUlVQVF9FTkFCTEUgICAgKCAoIHVpbnQ4X3QgKSAweDIwICkNCisjZGVmaW5lIHBvcnRDTE9DS19ESVZJU09SCQkJCSggKCB1aW50MzJfdCApIDEyICkNCisjZGVmaW5lIHBvcnRNQVhfVElNRVJfVkFMVUUJCQkJKCAoIHVpbnQzMl90ICkgMHhmZmZmICkNCisjZGVmaW5lIHBvcnRFTkFCTEVfVElNRVIJCQkJKCAoIHVpbnQ4X3QgKSAweDA0ICkNCisjZGVmaW5lIHBvcnRUSU1FUl8yX0lOVEVSUlVQVF9FTkFCTEUJKCAoIHVpbnQ4X3QgKSAweDIwICkNCiANCiAvKiBUaGUgdmFsdWUgdXNlZCBpbiB0aGUgSUUgcmVnaXN0ZXIgd2hlbiBhIHRhc2sgZmlyc3Qgc3RhcnRzLiAqLw0KLSNkZWZpbmUgcG9ydEdMT0JBTF9JTlRFUlJVUFRfQklUICAgICAgICAoICggU3RhY2tUeXBlX3QgKSAweDgwICkNCisjZGVmaW5lIHBvcnRHTE9CQUxfSU5URVJSVVBUX0JJVAkoICggU3RhY2tUeXBlX3QgKSAweDgwICkNCiANCiAvKiBUaGUgdmFsdWUgdXNlZCBpbiB0aGUgUFNXIHJlZ2lzdGVyIHdoZW4gYSB0YXNrIGZpcnN0IHN0YXJ0cy4gKi8NCi0jZGVmaW5lIHBvcnRJTklUSUFMX1BTVyAgICAgICAgICAgICAgICAgKCAoIFN0YWNrVHlwZV90ICkgMHgwMCApDQorI2RlZmluZSBwb3J0SU5JVElBTF9QU1cJCQkJKCAoIFN0YWNrVHlwZV90ICkgMHgwMCApDQogDQogLyogTWFjcm8gdG8gY2xlYXIgdGhlIHRpbWVyIDIgaW50ZXJydXB0IGZsYWcuICovDQotI2RlZmluZSBwb3J0Q0xFQVJfSU5URVJSVVBUX0ZMQUcoKSAgICBUTVIyQ04gJj0gfjB4ODA7DQorI2RlZmluZSBwb3J0Q0xFQVJfSU5URVJSVVBUX0ZMQUcoKQlUTVIyQ04gJj0gfjB4ODA7DQogDQogLyogVXNlZCBkdXJpbmcgYSBjb250ZXh0IHN3aXRjaCB0byBzdG9yZSB0aGUgc2l6ZSBvZiB0aGUgc3RhY2sgYmVpbmcgY29waWVkDQotICogdG8gb3IgZnJvbSBYUkFNLiAqLw0KK3RvIG9yIGZyb20gWFJBTS4gKi8NCiBkYXRhIHN0YXRpYyB1aW50OF90IHVjU3RhY2tCeXRlczsNCiANCiAvKiBVc2VkIGR1cmluZyBhIGNvbnRleHQgc3dpdGNoIHRvIHBvaW50IHRvIHRoZSBuZXh0IGJ5dGUgaW4gWFJBTSBmcm9tL3RvIHdoaWNoDQotICogYSBSQU0gYnl0ZSBpcyB0byBiZSBjb3BpZWQuICovDQorYSBSQU0gYnl0ZSBpcyB0byBiZSBjb3BpZWQuICovDQogeGRhdGEgc3RhdGljIFN0YWNrVHlwZV90ICogZGF0YSBweFhSQU1TdGFjazsNCiANCiAvKiBVc2VkIGR1cmluZyBhIGNvbnRleHQgc3dpdGNoIHRvIHBvaW50IHRvIHRoZSBuZXh0IGJ5dGUgaW4gUkFNIGZyb20vdG8gd2hpY2gNCi0gKiBhbiBYUkFNIGJ5dGUgaXMgdG8gYmUgY29waWVkLiAqLw0KK2FuIFhSQU0gYnl0ZSBpcyB0byBiZSBjb3BpZWQuICovDQogZGF0YSBzdGF0aWMgU3RhY2tUeXBlX3QgKiBkYXRhIHB4UkFNU3RhY2s7DQogDQogLyogV2UgcmVxdWlyZSB0aGUgYWRkcmVzcyBvZiB0aGUgcHhDdXJyZW50VENCIHZhcmlhYmxlLCBidXQgZG9uJ3Qgd2FudCB0byBrbm93DQotICogYW55IGRldGFpbHMgb2YgaXRzIHR5cGUuICovDQorYW55IGRldGFpbHMgb2YgaXRzIHR5cGUuICovDQogdHlwZWRlZiB2b2lkIFRDQl90Ow0KIGV4dGVybiB2b2xhdGlsZSBUQ0JfdCAqIHZvbGF0aWxlIHB4Q3VycmVudFRDQjsNCiANCiAvKg0KLSAqIFNldHVwIHRoZSBoYXJkd2FyZSB0byBnZW5lcmF0ZSBhbiBpbnRlcnJ1cHQgb2ZmIHRpbWVyIDIgYXQgdGhlIHJlcXVpcmVkDQorICogU2V0dXAgdGhlIGhhcmR3YXJlIHRvIGdlbmVyYXRlIGFuIGludGVycnVwdCBvZmYgdGltZXIgMiBhdCB0aGUgcmVxdWlyZWQgDQogICogZnJlcXVlbmN5Lg0KICAqLw0KIHN0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKTsNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCi0NCiAvKg0KLSAqIE1hY3JvIHRoYXQgY29waWVzIHRoZSBjdXJyZW50IHN0YWNrIGZyb20gaW50ZXJuYWwgUkFNIHRvIFhSQU0uICBUaGlzIGlzDQotICogcmVxdWlyZWQgYXMgdGhlIDgwNTEgb25seSBjb250YWlucyBlbm91Z2ggaW50ZXJuYWwgUkFNIGZvciBhIHNpbmdsZSBzdGFjaywNCisgKiBNYWNybyB0aGF0IGNvcGllcyB0aGUgY3VycmVudCBzdGFjayBmcm9tIGludGVybmFsIFJBTSB0byBYUkFNLiAgVGhpcyBpcyANCisgKiByZXF1aXJlZCBhcyB0aGUgODA1MSBvbmx5IGNvbnRhaW5zIGVub3VnaCBpbnRlcm5hbCBSQU0gZm9yIGEgc2luZ2xlIHN0YWNrLCANCiAgKiBidXQgd2UgaGF2ZSBhIHN0YWNrIGZvciBldmVyeSB0YXNrLg0KICAqLw0KLSNkZWZpbmUgcG9ydENPUFlfU1RBQ0tfVE9fWFJBTSgpIFwNCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAvKiBweEN1cnJlbnRUQ0IgcG9pbnRzIHRvIGEgVENCIHdoaWNoIGl0c2VsZiBwb2ludHMgdG8gdGhlIGxvY2F0aW9uIGludG8gXA0KLSAgICAgICAgICogd2hpY2ggdGhlIGZpcnN0CXN0YWNrIGJ5dGUgc2hvdWxkIGJlIGNvcGllZC4gIFNldCBweFhSQU1TdGFjayB0byBwb2ludCBcDQotICAgICAgICAgKiB0byB0aGUgbG9jYXRpb24gaW50byB3aGljaCB0aGUgZmlyc3Qgc3RhY2sgYnl0ZSBpcyB0byBiZSBjb3BpZWQuICovICAgICAgICAgICAgXA0KLSAgICAgICAgcHhYUkFNU3RhY2sgPSAoIHhkYXRhIFN0YWNrVHlwZV90ICogKSAqKCAoIHhkYXRhIFN0YWNrVHlwZV90ICoqICkgcHhDdXJyZW50VENCICk7IFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAvKiBTZXQgcHhSQU1TdGFjayB0byBwb2ludCB0byB0aGUgZmlyc3QgYnl0ZSB0byBiZSBjb3BlZCBmcm9tIHRoZSBzdGFjay4gKi8gICAgICAgXA0KLSAgICAgICAgcHhSQU1TdGFjayA9ICggZGF0YSBTdGFja1R5cGVfdCAqIGRhdGEgKSBjb25maWdTVEFDS19TVEFSVDsgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAvKiBDYWxjdWxhdGUgdGhlIHNpemUgb2YgdGhlIHN0YWNrIHdlIGFyZSBhYm91dCB0byBjb3B5IGZyb20gdGhlIGN1cnJlbnQgXA0KLSAgICAgICAgICogc3RhY2sgcG9pbnRlciB2YWx1ZS4gKi8gICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICB1Y1N0YWNrQnl0ZXMgPSBTUCAtICggY29uZmlnU1RBQ0tfU1RBUlQgLSAxICk7IFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgLyogQmVmb3JlIHN0YXJ0aW5nIHRvIGNvcHkgdGhlIHN0YWNrLCBzdG9yZSB0aGUgY2FsY3VsYXRlZCBzdGFjayBzaXplIHNvIFwNCi0gICAgICAgICAqIHRoZSBzdGFjayBjYW4gYmUgcmVzdG9yZWQgd2hlbiB0aGUgdGFzayBpcyByZXN1bWVkLiAqL1wNCi0gICAgICAgICogcHhYUkFNU3RhY2sgPSB1Y1N0YWNrQnl0ZXM7ICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIENvcHkgZWFjaCBzdGFjayBieXRlIGluIHR1cm4uICBweFhSQU1TdGFjayBpcyBpbmNyZW1lbnRlZCBmaXJzdCBhcyB3ZSBcDQotICAgICAgICAgKiBoYXZlIGFscmVhZHkgc3RvcmVkIHRoZSBzdGFjayBzaXplIGludG8gWFJBTS4gKi9cDQotICAgICAgICB3aGlsZSggdWNTdGFja0J5dGVzICkgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgcHhYUkFNU3RhY2sgKys7ICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgKiBweFhSQU1TdGFjayA9ICogcHhSQU1TdGFjazsgICAgICAgICAgICBcDQotICAgICAgICAgICAgcHhSQU1TdGFjayArKzsgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgdWNTdGFja0J5dGVzIC0tOyAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIH0NCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCi0NCi0vKg0KLSAqIE1hY3JvIHRoYXQgY29waWVzIHRoZSBzdGFjayBvZiB0aGUgdGFzayBiZWluZyByZXN1bWVkIGZyb20gWFJBTSBpbnRvDQotICogaW50ZXJuYWwgUkFNLg0KLSAqLw0KLSNkZWZpbmUgcG9ydENPUFlfWFJBTV9UT19TVEFDSygpIFwNCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAvKiBTZXR1cCB0aGUgcG9pbnRlcnMgYXMgcGVyIHBvcnRDT1BZX1NUQUNLX1RPX1hSQU0oKSwgYnV0IHRoaXMgdGltZSB0byBcDQotICAgICAgICAgKiBjb3B5IHRoZSBkYXRhIGJhY2sgb3V0IG9mIFhSQU0gYW5kIGludG8gdGhlIHN0YWNrLiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgcHhYUkFNU3RhY2sgPSAoIHhkYXRhIFN0YWNrVHlwZV90ICogKSAqKCAoIHhkYXRhIFN0YWNrVHlwZV90ICoqICkgcHhDdXJyZW50VENCICk7IFwNCi0gICAgICAgIHB4UkFNU3RhY2sgPSAoIGRhdGEgU3RhY2tUeXBlX3QgKiBkYXRhICkoIGNvbmZpZ1NUQUNLX1NUQVJUIC0gMSApOyAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgLyogVGhlIGZpcnN0IHZhbHVlIHN0b3JlZCBpbiBYUkFNIHdhcyB0aGUgc2l6ZSBvZiB0aGUgc3RhY2sgLSBpLmUuIHRoZSBcDQotICAgICAgICAgKiBudW1iZXIgb2YgYnl0ZXMgd2UgbmVlZCB0byBjb3B5IGJhY2suICovICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHVjU3RhY2tCeXRlcyA9IHB4WFJBTVN0YWNrWyAwIF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAvKiBDb3B5IHRoZSByZXF1aXJlZCBudW1iZXIgb2YgYnl0ZXMgYmFjayBpbnRvIHRoZSBzdGFjay4gKi8gICAgIFwNCi0gICAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgcHhYUkFNU3RhY2sgKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICBweFJBTVN0YWNrICsrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICogcHhSQU1TdGFjayA9ICogcHhYUkFNU3RhY2s7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgdWNTdGFja0J5dGVzIC0tOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIH0gd2hpbGUoIHVjU3RhY2tCeXRlcyApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAvKiBSZXN0b3JlIHRoZSBzdGFjayBwb2ludGVyIHJlYWR5IHRvIHVzZSB0aGUgcmVzdG9yZWQgc3RhY2suICovIFwNCi0gICAgICAgIFNQID0gKCB1aW50OF90ICkgcHhSQU1TdGFjazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB9DQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQotDQotLyoNCi0gKiBNYWNybyB0byBwdXNoIHRoZSBjdXJyZW50IGV4ZWN1dGlvbiBjb250ZXh0IG9udG8gdGhlIHN0YWNrLCBiZWZvcmUgdGhlIHN0YWNrDQotICogaXMgbW92ZWQgdG8gWFJBTS4NCi0gKi8NCi0jZGVmaW5lIHBvcnRTQVZFX0NPTlRFWFQoKSBcDQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgX2FzbSAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIFB1c2ggQUNDIGZpcnN0LCBhcyB3aGVuIHJlc3RvcmluZyB0aGUgY29udGV4dCBpdCBtdXN0IGJlIHJlc3RvcmVkIFwNCi0gICAgICAgICAqIGxhc3QgKGl0IGlzIHVzZWQgdG8gc2V0IHRoZSBJRSByZWdpc3RlcikuICovICAgICAgXA0KLSAgICAgICAgcHVzaCBBQ0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAvKiBTdG9yZSB0aGUgSUUgcmVnaXN0ZXIgdGhlbiBkaXNhYmxlIGludGVycnVwdHMuICovIFwNCi0gICAgICAgIHB1c2ggSUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgY2xyIF9FQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBwdXNoIERQTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHB1c2ggRFBIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgcHVzaCBiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBwdXNoIGFyMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHB1c2ggYXIzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgcHVzaCBhcjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBwdXNoIGFyNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHB1c2ggYXI2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgcHVzaCBhcjcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBwdXNoIGFyMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHB1c2ggYXIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgcHVzaCBQU1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBfZW5kYXNtOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIFBTVyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgX2FzbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBwdXNoIF9icCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIF9lbmRhc207ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB9DQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQotDQotLyoNCi0gKiBNYWNybyB0aGF0IHJlc3RvcmVzIHRoZSBleGVjdXRpb24gY29udGV4dCBmcm9tIHRoZSBzdGFjay4gIFRoZSBleGVjdXRpb24NCi0gKiBjb250ZXh0IHdhcyBzYXZlZCBpbnRvIHRoZSBzdGFjayBiZWZvcmUgdGhlIHN0YWNrIHdhcyBjb3BpZWQgaW50byBYUkFNLg0KLSAqLw0KLSNkZWZpbmUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpIFwNCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBfYXNtICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgcG9wIF9icCAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHBvcCBQU1cgICAgICAgICAgICAgICBcDQotICAgICAgICBwb3AgYXIxICAgICAgICAgICAgICAgXA0KLSAgICAgICAgcG9wIGFyMCAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHBvcCBhcjcgICAgICAgICAgICAgICBcDQotICAgICAgICBwb3AgYXI2ICAgICAgICAgICAgICAgXA0KLSAgICAgICAgcG9wIGFyNSAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHBvcCBhcjQgICAgICAgICAgICAgICBcDQotICAgICAgICBwb3AgYXIzICAgICAgICAgICAgICAgXA0KLSAgICAgICAgcG9wIGFyMiAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHBvcCBiICAgICAgICAgICAgICAgICBcDQotICAgICAgICBwb3AgRFBIICAgICAgICAgICAgICAgXA0KLSAgICAgICAgcG9wIERQTCAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIFRoZSBuZXh0IGJ5dGUgb2YgdGhlIHN0YWNrIGlzIHRoZSBJRSByZWdpc3Rlci4gIE9ubHkgdGhlIGdsb2JhbCBcDQotICAgICAgICAgKiBlbmFibGUgYml0IGZvcm1zIHBhcnQgb2YgdGhlIHRhc2sgY29udGV4dC4gIFBvcCBvZmYgdGhlIElFIHRoZW4gc2V0IFwNCi0gICAgICAgICAqIHRoZSBnbG9iYWwgZW5hYmxlIGJpdCB0byBtYXRjaCB0aGF0IG9mIHRoZSBzdG9yZWQgSUUgcmVnaXN0ZXIuICovXA0KLSAgICAgICAgcG9wIEFDQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIEpCIEFDQyAuNywgMDAgOTgkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBDTFIgSUUgLjcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgTEpNUCAwMCA5OSQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIDAwIDk4JCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBTRVRCIElFIC43ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgMDAgOTkkIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIEZpbmFsbHkgcG9wIG9mZiB0aGUgQUNDLCB3aGljaCB3YXMgdGhlIGZpcnN0IHJlZ2lzdGVyIHNhdmVkLiAqLyBcDQotICAgICAgICBwb3AgQUNDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgcmV0aSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIF9lbmRhc207ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIH0NCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCi0NCi0vKg0KLSAqIFNlZSBoZWFkZXIgZmlsZSBmb3IgZGVzY3JpcHRpb24uDQotICovDQotU3RhY2tUeXBlX3QgKiBweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICogcHhUb3BPZlN0YWNrLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYXNrRnVuY3Rpb25fdCBweENvZGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KLXsNCi0gICAgdWludDMyX3QgdWxBZGRyZXNzOw0KLSAgICBTdGFja1R5cGVfdCAqIHB4U3RhcnRPZlN0YWNrOw0KLQ0KLSAgICAvKiBMZWF2ZSBzcGFjZSB0byB3cml0ZSB0aGUgc2l6ZSBvZiB0aGUgc3RhY2sgYXMgdGhlIGZpcnN0IGJ5dGUuICovDQotICAgIHB4U3RhcnRPZlN0YWNrID0gcHhUb3BPZlN0YWNrOw0KLSAgICBweFRvcE9mU3RhY2srKzsNCi0NCi0gICAgLyogUGxhY2UgYSBmZXcgYnl0ZXMgb2Yga25vd24gdmFsdWVzIG9uIHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLg0KLSAgICAgKiBUaGlzIGlzIGp1c3QgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgYW5kIGNhbiBiZSB1bmNvbW1lbnRlZCBpZiByZXF1aXJlZC4NCi0gICAgICogcHhUb3BPZlN0YWNrID0gMHgxMTsNCi0gICAgICogcHhUb3BPZlN0YWNrKys7DQotICAgICAqIHB4VG9wT2ZTdGFjayA9IDB4MjI7DQotICAgICAqIHB4VG9wT2ZTdGFjaysrOw0KLSAgICAgKiBweFRvcE9mU3RhY2sgPSAweDMzOw0KLSAgICAgKiBweFRvcE9mU3RhY2srKzsNCi0gICAgICovDQotDQotICAgIC8qIFNpbXVsYXRlIGhvdyB0aGUgc3RhY2sgd291bGQgbG9vayBhZnRlciBhIGNhbGwgdG8gdGhlIHNjaGVkdWxlciB0aWNrDQotICAgICAqIElTUi4NCi0gICAgICoNCi0gICAgICogVGhlIHJldHVybiBhZGRyZXNzIHRoYXQgd291bGQgaGF2ZSBiZWVuIHB1c2hlZCBieSB0aGUgTUNVLiAqLw0KLSAgICB1bEFkZHJlc3MgPSAoIHVpbnQzMl90ICkgcHhDb2RlOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHVsQWRkcmVzczsNCi0gICAgdWxBZGRyZXNzID4+PSA4Ow0KLSAgICBweFRvcE9mU3RhY2srKzsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAoIHVsQWRkcmVzcyApOw0KLSAgICBweFRvcE9mU3RhY2srKzsNCi0NCi0gICAgLyogTmV4dCBhbGwgdGhlIHJlZ2lzdGVycyB3aWxsIGhhdmUgYmVlbiBwdXNoZWQgYnkgcG9ydFNBVkVfQ09OVEVYVCgpLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMHhhYTsgLyogYWNjICovDQotICAgIHB4VG9wT2ZTdGFjaysrOw0KLQ0KLSAgICAvKiBXZSB3YW50IHRhc2tzIHRvIHN0YXJ0IHdpdGggaW50ZXJydXB0cyBlbmFibGVkLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gcG9ydEdMT0JBTF9JTlRFUlJVUFRfQklUOw0KLSAgICBweFRvcE9mU3RhY2srKzsNCi0NCi0gICAgLyogVGhlIGZ1bmN0aW9uIHBhcmFtZXRlcnMgd2lsbCBiZSBwYXNzZWQgaW4gdGhlIERQVFIgYW5kIEIgcmVnaXN0ZXIgYXMNCi0gICAgICogYSB0aHJlZSBieXRlIGdlbmVyaWMgcG9pbnRlciBpcyB1c2VkLiAqLw0KLSAgICB1bEFkZHJlc3MgPSAoIHVpbnQzMl90ICkgcHZQYXJhbWV0ZXJzOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHVsQWRkcmVzczsgLyogRFBMICovDQotICAgIHVsQWRkcmVzcyA+Pj0gODsNCi0gICAgKnB4VG9wT2ZTdGFjaysrOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIHVsQWRkcmVzczsgLyogRFBIICovDQotICAgIHVsQWRkcmVzcyA+Pj0gODsNCi0gICAgcHhUb3BPZlN0YWNrKys7DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgdWxBZGRyZXNzOyAvKiBiICovDQotICAgIHB4VG9wT2ZTdGFjaysrOw0KLQ0KLSAgICAvKiBUaGUgcmVtYWluaW5nIHJlZ2lzdGVycyBhcmUgc3RyYWlnaHQgZm9yd2FyZC4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MDI7IC8qIFIyICovDQotICAgIHB4VG9wT2ZTdGFjaysrOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMHgwMzsgLyogUjMgKi8NCi0gICAgcHhUb3BPZlN0YWNrKys7DQotICAgICpweFRvcE9mU3RhY2sgPSAweDA0OyAvKiBSNCAqLw0KLSAgICBweFRvcE9mU3RhY2srKzsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MDU7IC8qIFI1ICovDQotICAgIHB4VG9wT2ZTdGFjaysrOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMHgwNjsgLyogUjYgKi8NCi0gICAgcHhUb3BPZlN0YWNrKys7DQotICAgICpweFRvcE9mU3RhY2sgPSAweDA3OyAvKiBSNyAqLw0KLSAgICBweFRvcE9mU3RhY2srKzsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MDA7IC8qIFIwICovDQotICAgIHB4VG9wT2ZTdGFjaysrOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMHgwMTsgLyogUjEgKi8NCi0gICAgcHhUb3BPZlN0YWNrKys7DQotICAgICpweFRvcE9mU3RhY2sgPSAweDAwOyAvKiBQU1cgKi8NCi0gICAgcHhUb3BPZlN0YWNrKys7DQotICAgICpweFRvcE9mU3RhY2sgPSAweGJiOyAvKiBCUCAqLw0KLQ0KLSAgICAvKiBEb250IGluY3JlbWVudCB0aGUgc3RhY2sgc2l6ZSBoZXJlIGFzIHdlIGRvbid0IHdhbnQgdG8gaW5jbHVkZQ0KLSAgICAgKiB0aGUgc3RhY2sgc2l6ZSBieXRlIGFzIHBhcnQgb2YgdGhlIHN0YWNrIHNpemUgY291bnQuDQotICAgICAqDQotICAgICAqIEZpbmFsbHkgd2UgcGxhY2UgdGhlIHN0YWNrIHNpemUgYXQgdGhlIGJlZ2lubmluZy4gKi8NCi0gICAgKnB4U3RhcnRPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApICggcHhUb3BPZlN0YWNrIC0gcHhTdGFydE9mU3RhY2sgKTsNCi0NCi0gICAgLyogVW5saWtlIG1vc3QgcG9ydHMsIHdlIHJldHVybiB0aGUgc3RhcnQgb2YgdGhlIHN0YWNrIGFzIHRoaXMgaXMgd2hlcmUgdGhlDQotICAgICAqIHNpemUgb2YgdGhlIHN0YWNrIGlzIHN0b3JlZC4gKi8NCi0gICAgcmV0dXJuIHB4U3RhcnRPZlN0YWNrOw0KKyNkZWZpbmUgcG9ydENPUFlfU1RBQ0tfVE9fWFJBTSgpCQkJCQkJCQkJCQkJCQkJCVwNCit7CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBweEN1cnJlbnRUQ0IgcG9pbnRzIHRvIGEgVENCIHdoaWNoIGl0c2VsZiBwb2ludHMgdG8gdGhlIGxvY2F0aW9uIGludG8JCQkJCVwNCisJd2hpY2ggdGhlIGZpcnN0CXN0YWNrIGJ5dGUgc2hvdWxkIGJlIGNvcGllZC4gIFNldCBweFhSQU1TdGFjayB0byBwb2ludAkJCQkJCVwNCisJdG8gdGhlIGxvY2F0aW9uIGludG8gd2hpY2ggdGhlIGZpcnN0IHN0YWNrIGJ5dGUgaXMgdG8gYmUgY29waWVkLiAqLwkJCQkJCQlcDQorCXB4WFJBTVN0YWNrID0gKCB4ZGF0YSBTdGFja1R5cGVfdCAqICkgKiggKCB4ZGF0YSBTdGFja1R5cGVfdCAqKiApIHB4Q3VycmVudFRDQiApOwkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJLyogU2V0IHB4UkFNU3RhY2sgdG8gcG9pbnQgdG8gdGhlIGZpcnN0IGJ5dGUgdG8gYmUgY29wZWQgZnJvbSB0aGUgc3RhY2suICovCQkJCQlcDQorCXB4UkFNU3RhY2sgPSAoIGRhdGEgU3RhY2tUeXBlX3QgKiBkYXRhICkgY29uZmlnU1RBQ0tfU1RBUlQ7CQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBDYWxjdWxhdGUgdGhlIHNpemUgb2YgdGhlIHN0YWNrIHdlIGFyZSBhYm91dCB0byBjb3B5IGZyb20gdGhlIGN1cnJlbnQJCQkJCVwNCisJc3RhY2sgcG9pbnRlciB2YWx1ZS4gKi8JCQkJCQkJCQkJCQkJCQkJCQlcDQorCXVjU3RhY2tCeXRlcyA9IFNQIC0gKCBjb25maWdTVEFDS19TVEFSVCAtIDEgKTsJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBCZWZvcmUgc3RhcnRpbmcgdG8gY29weSB0aGUgc3RhY2ssIHN0b3JlIHRoZSBjYWxjdWxhdGVkIHN0YWNrIHNpemUgc28JCQkJCVwNCisJdGhlIHN0YWNrIGNhbiBiZSByZXN0b3JlZCB3aGVuIHRoZSB0YXNrIGlzIHJlc3VtZWQuICovCQkJCQkJCQkJCVwNCisJKnB4WFJBTVN0YWNrID0gdWNTdGFja0J5dGVzOwkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBDb3B5IGVhY2ggc3RhY2sgYnl0ZSBpbiB0dXJuLiAgcHhYUkFNU3RhY2sgaXMgaW5jcmVtZW50ZWQgZmlyc3QgYXMgd2UJCQkJCVwNCisJaGF2ZSBhbHJlYWR5IHN0b3JlZCB0aGUgc3RhY2sgc2l6ZSBpbnRvIFhSQU0uICovCQkJCQkJCQkJCQlcDQorCXdoaWxlKCB1Y1N0YWNrQnl0ZXMgKQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJewkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJcHhYUkFNU3RhY2srKzsJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJKnB4WFJBTVN0YWNrID0gKnB4UkFNU3RhY2s7CQkJCQkJCQkJCQkJCQkJCVwNCisJCXB4UkFNU3RhY2srKzsJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJdWNTdGFja0J5dGVzLS07CQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJfQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKg0KLSAqIFNlZSBoZWFkZXIgZmlsZSBmb3IgZGVzY3JpcHRpb24uDQorICogTWFjcm8gdGhhdCBjb3BpZXMgdGhlIHN0YWNrIG9mIHRoZSB0YXNrIGJlaW5nIHJlc3VtZWQgZnJvbSBYUkFNIGludG8gDQorICogaW50ZXJuYWwgUkFNLg0KKyAqLw0KKyNkZWZpbmUgcG9ydENPUFlfWFJBTV9UT19TVEFDSygpCQkJCQkJCQkJCQkJCQkJCVwNCit7CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkvKiBTZXR1cCB0aGUgcG9pbnRlcnMgYXMgcGVyIHBvcnRDT1BZX1NUQUNLX1RPX1hSQU0oKSwgYnV0IHRoaXMgdGltZSB0bwkJCQkJCVwNCisJY29weSB0aGUgZGF0YSBiYWNrIG91dCBvZiBYUkFNIGFuZCBpbnRvIHRoZSBzdGFjay4gKi8JCQkJCQkJCQkJXA0KKwlweFhSQU1TdGFjayA9ICggeGRhdGEgU3RhY2tUeXBlX3QgKiApICooICggeGRhdGEgU3RhY2tUeXBlX3QgKiogKSBweEN1cnJlbnRUQ0IgKTsJCVwNCisJcHhSQU1TdGFjayA9ICggZGF0YSBTdGFja1R5cGVfdCAqIGRhdGEgKSAoIGNvbmZpZ1NUQUNLX1NUQVJUIC0gMSApOwkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIFRoZSBmaXJzdCB2YWx1ZSBzdG9yZWQgaW4gWFJBTSB3YXMgdGhlIHNpemUgb2YgdGhlIHN0YWNrIC0gaS5lLiB0aGUJCQkJCQlcDQorCW51bWJlciBvZiBieXRlcyB3ZSBuZWVkIHRvIGNvcHkgYmFjay4gKi8JCQkJCQkJCQkJCQkJXA0KKwl1Y1N0YWNrQnl0ZXMgPSBweFhSQU1TdGFja1sgMCBdOwkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIENvcHkgdGhlIHJlcXVpcmVkIG51bWJlciBvZiBieXRlcyBiYWNrIGludG8gdGhlIHN0YWNrLiAqLwkJCQkJCQkJXA0KKwlkbwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwl7CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQlweFhSQU1TdGFjaysrOwkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQlweFJBTVN0YWNrKys7CQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCSpweFJBTVN0YWNrID0gKnB4WFJBTVN0YWNrOwkJCQkJCQkJCQkJCQkJCQlcDQorCQl1Y1N0YWNrQnl0ZXMtLTsJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwl9IHdoaWxlKCB1Y1N0YWNrQnl0ZXMgKTsJCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCS8qIFJlc3RvcmUgdGhlIHN0YWNrIHBvaW50ZXIgcmVhZHkgdG8gdXNlIHRoZSByZXN0b3JlZCBzdGFjay4gKi8JCQkJCQkJXA0KKwlTUCA9ICggdWludDhfdCApIHB4UkFNU3RhY2s7CQkJCQkJCQkJCQkJCQlcDQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qDQorICogTWFjcm8gdG8gcHVzaCB0aGUgY3VycmVudCBleGVjdXRpb24gY29udGV4dCBvbnRvIHRoZSBzdGFjaywgYmVmb3JlIHRoZSBzdGFjayANCisgKiBpcyBtb3ZlZCB0byBYUkFNLiANCisgKi8NCisjZGVmaW5lIHBvcnRTQVZFX0NPTlRFWFQoKQkJCQkJCQkJCQkJCQkJCQkJCVwNCit7CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwlfYXNtCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCS8qIFB1c2ggQUNDIGZpcnN0LCBhcyB3aGVuIHJlc3RvcmluZyB0aGUgY29udGV4dCBpdCBtdXN0IGJlIHJlc3RvcmVkCQkJCQlcDQorCQlsYXN0IChpdCBpcyB1c2VkIHRvIHNldCB0aGUgSUUgcmVnaXN0ZXIpLiAqLwkJCQkJCQkJCQkJXA0KKwkJcHVzaAlBQ0MJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCS8qIFN0b3JlIHRoZSBJRSByZWdpc3RlciB0aGVuIGRpc2FibGUgaW50ZXJydXB0cy4gKi8JCQkJCQkJCQlcDQorCQlwdXNoCUlFCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQljbHIJCV9FQQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJcHVzaAlEUEwJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCXB1c2gJRFBICQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQlwdXNoCWIJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCXB1c2gJYXIyCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQlwdXNoCWFyMwkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJcHVzaAlhcjQJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCXB1c2gJYXI1CQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQlwdXNoCWFyNgkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJcHVzaAlhcjcJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCXB1c2gJYXIwCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQlwdXNoCWFyMQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJcHVzaAlQU1cJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJX2VuZGFzbTsJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQlQU1cgPSAwOwkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwlfYXNtCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCXB1c2gJX2JwCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCV9lbmRhc207CQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKg0KKyAqIE1hY3JvIHRoYXQgcmVzdG9yZXMgdGhlIGV4ZWN1dGlvbiBjb250ZXh0IGZyb20gdGhlIHN0YWNrLiAgVGhlIGV4ZWN1dGlvbiANCisgKiBjb250ZXh0IHdhcyBzYXZlZCBpbnRvIHRoZSBzdGFjayBiZWZvcmUgdGhlIHN0YWNrIHdhcyBjb3BpZWQgaW50byBYUkFNLg0KKyAqLw0KKyNkZWZpbmUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpCQkJCQkJCQkJCQkJCQkJCQlcDQorewkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJX2FzbQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQlwb3AJCV9icAkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJcG9wCQlQU1cJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCXBvcAkJYXIxCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQlwb3AJCWFyMAkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJcG9wCQlhcjcJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCXBvcAkJYXI2CQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQlwb3AJCWFyNQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJcG9wCQlhcjQJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCXBvcAkJYXIzCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQlwb3AJCWFyMgkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJcG9wCQliCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQlwb3AJCURQSAkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJcG9wCQlEUEwJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCS8qIFRoZSBuZXh0IGJ5dGUgb2YgdGhlIHN0YWNrIGlzIHRoZSBJRSByZWdpc3Rlci4gIE9ubHkgdGhlIGdsb2JhbAkJCQkJCVwNCisJCWVuYWJsZSBiaXQgZm9ybXMgcGFydCBvZiB0aGUgdGFzayBjb250ZXh0LiAgUG9wIG9mZiB0aGUgSUUgdGhlbiBzZXQJCQkJCQlcDQorCQl0aGUgZ2xvYmFsIGVuYWJsZSBiaXQgdG8gbWF0Y2ggdGhhdCBvZiB0aGUgc3RvcmVkIElFIHJlZ2lzdGVyLiAqLwkJCQkJCVwNCisJCXBvcAkJQUNDCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQlKQgkJQUNDLjcsMDA5OCQJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQlDTFIJCUlFLjcJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJTEpNUAkwMDk5JAkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCTAwOTgkOgkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQlTRVRCCUlFLjcJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkwMDk5JDoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJLyogRmluYWxseSBwb3Agb2ZmIHRoZSBBQ0MsIHdoaWNoIHdhcyB0aGUgZmlyc3QgcmVnaXN0ZXIgc2F2ZWQuICovCQkJCQkJXA0KKwkJcG9wCQlBQ0MJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCisJCXJldGkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQorCV9lbmRhc207CQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KK30NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiANCisgKiBTZWUgaGVhZGVyIGZpbGUgZm9yIGRlc2NyaXB0aW9uLiANCisgKi8NCitTdGFja1R5cGVfdCAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqcHhUb3BPZlN0YWNrLCBUYXNrRnVuY3Rpb25fdCBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycyApDQorew0KK3VpbnQzMl90IHVsQWRkcmVzczsNCitTdGFja1R5cGVfdCAqcHhTdGFydE9mU3RhY2s7DQorDQorCS8qIExlYXZlIHNwYWNlIHRvIHdyaXRlIHRoZSBzaXplIG9mIHRoZSBzdGFjayBhcyB0aGUgZmlyc3QgYnl0ZS4gKi8NCisJcHhTdGFydE9mU3RhY2sgPSBweFRvcE9mU3RhY2s7DQorCXB4VG9wT2ZTdGFjaysrOw0KKw0KKwkvKiBQbGFjZSBhIGZldyBieXRlcyBvZiBrbm93biB2YWx1ZXMgb24gdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suIA0KKwlUaGlzIGlzIGp1c3QgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgYW5kIGNhbiBiZSB1bmNvbW1lbnRlZCBpZiByZXF1aXJlZC4NCisJKnB4VG9wT2ZTdGFjayA9IDB4MTE7DQorCXB4VG9wT2ZTdGFjaysrOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgyMjsNCisJcHhUb3BPZlN0YWNrKys7DQorCSpweFRvcE9mU3RhY2sgPSAweDMzOw0KKwlweFRvcE9mU3RhY2srKzsNCisJKi8NCisNCisJLyogU2ltdWxhdGUgaG93IHRoZSBzdGFjayB3b3VsZCBsb29rIGFmdGVyIGEgY2FsbCB0byB0aGUgc2NoZWR1bGVyIHRpY2sgDQorCUlTUi4gDQorDQorCVRoZSByZXR1cm4gYWRkcmVzcyB0aGF0IHdvdWxkIGhhdmUgYmVlbiBwdXNoZWQgYnkgdGhlIE1DVS4gKi8NCisJdWxBZGRyZXNzID0gKCB1aW50MzJfdCApIHB4Q29kZTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSB1bEFkZHJlc3M7DQorCXVsQWRkcmVzcyA+Pj0gODsNCisJcHhUb3BPZlN0YWNrKys7DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgKCB1bEFkZHJlc3MgKTsNCisJcHhUb3BPZlN0YWNrKys7DQorDQorCS8qIE5leHQgYWxsIHRoZSByZWdpc3RlcnMgd2lsbCBoYXZlIGJlZW4gcHVzaGVkIGJ5IHBvcnRTQVZFX0NPTlRFWFQoKS4gKi8NCisJKnB4VG9wT2ZTdGFjayA9IDB4YWE7CS8qIGFjYyAqLw0KKwlweFRvcE9mU3RhY2srKzsJDQorDQorCS8qIFdlIHdhbnQgdGFza3MgdG8gc3RhcnQgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQuICovDQorCSpweFRvcE9mU3RhY2sgPSBwb3J0R0xPQkFMX0lOVEVSUlVQVF9CSVQ7DQorCXB4VG9wT2ZTdGFjaysrOw0KKw0KKwkvKiBUaGUgZnVuY3Rpb24gcGFyYW1ldGVycyB3aWxsIGJlIHBhc3NlZCBpbiB0aGUgRFBUUiBhbmQgQiByZWdpc3RlciBhcw0KKwlhIHRocmVlIGJ5dGUgZ2VuZXJpYyBwb2ludGVyIGlzIHVzZWQuICovDQorCXVsQWRkcmVzcyA9ICggdWludDMyX3QgKSBwdlBhcmFtZXRlcnM7DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgdWxBZGRyZXNzOwkvKiBEUEwgKi8NCisJdWxBZGRyZXNzID4+PSA4Ow0KKwkqcHhUb3BPZlN0YWNrKys7DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgdWxBZGRyZXNzOwkvKiBEUEggKi8NCisJdWxBZGRyZXNzID4+PSA4Ow0KKwlweFRvcE9mU3RhY2srKzsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSB1bEFkZHJlc3M7CS8qIGIgKi8NCisJcHhUb3BPZlN0YWNrKys7DQorDQorCS8qIFRoZSByZW1haW5pbmcgcmVnaXN0ZXJzIGFyZSBzdHJhaWdodCBmb3J3YXJkLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gMHgwMjsJLyogUjIgKi8NCisJcHhUb3BPZlN0YWNrKys7DQorCSpweFRvcE9mU3RhY2sgPSAweDAzOwkvKiBSMyAqLw0KKwlweFRvcE9mU3RhY2srKzsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MDQ7CS8qIFI0ICovDQorCXB4VG9wT2ZTdGFjaysrOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgwNTsJLyogUjUgKi8NCisJcHhUb3BPZlN0YWNrKys7DQorCSpweFRvcE9mU3RhY2sgPSAweDA2OwkvKiBSNiAqLw0KKwlweFRvcE9mU3RhY2srKzsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MDc7CS8qIFI3ICovDQorCXB4VG9wT2ZTdGFjaysrOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgwMDsJLyogUjAgKi8NCisJcHhUb3BPZlN0YWNrKys7DQorCSpweFRvcE9mU3RhY2sgPSAweDAxOwkvKiBSMSAqLw0KKwlweFRvcE9mU3RhY2srKzsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MDA7CS8qIFBTVyAqLw0KKwlweFRvcE9mU3RhY2srKzsNCisJKnB4VG9wT2ZTdGFjayA9IDB4YmI7CS8qIEJQICovDQorDQorCS8qIERvbnQgaW5jcmVtZW50IHRoZSBzdGFjayBzaXplIGhlcmUgYXMgd2UgZG9uJ3Qgd2FudCB0byBpbmNsdWRlDQorCXRoZSBzdGFjayBzaXplIGJ5dGUgYXMgcGFydCBvZiB0aGUgc3RhY2sgc2l6ZSBjb3VudC4NCisNCisJRmluYWxseSB3ZSBwbGFjZSB0aGUgc3RhY2sgc2l6ZSBhdCB0aGUgYmVnaW5uaW5nLiAqLw0KKwkqcHhTdGFydE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgKCBweFRvcE9mU3RhY2sgLSBweFN0YXJ0T2ZTdGFjayApOw0KKw0KKwkvKiBVbmxpa2UgbW9zdCBwb3J0cywgd2UgcmV0dXJuIHRoZSBzdGFydCBvZiB0aGUgc3RhY2sgYXMgdGhpcyBpcyB3aGVyZSB0aGUNCisJc2l6ZSBvZiB0aGUgc3RhY2sgaXMgc3RvcmVkLiAqLw0KKwlyZXR1cm4gcHhTdGFydE9mU3RhY2s7DQorfQ0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIA0KKyAqIFNlZSBoZWFkZXIgZmlsZSBmb3IgZGVzY3JpcHRpb24uIA0KICAqLw0KIEJhc2VUeXBlX3QgeFBvcnRTdGFydFNjaGVkdWxlciggdm9pZCApDQogew0KLSAgICAvKiBTZXR1cCB0aW1lciAyIHRvIGdlbmVyYXRlIHRoZSBSVE9TIHRpY2suICovDQotICAgIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoKTsNCisJLyogU2V0dXAgdGltZXIgMiB0byBnZW5lcmF0ZSB0aGUgUlRPUyB0aWNrLiAqLw0KKwlwcnZTZXR1cFRpbWVySW50ZXJydXB0KCk7CQ0KIA0KLSAgICAvKiBNYWtlIHN1cmUgd2Ugc3RhcnQgd2l0aCB0aGUgZXhwZWN0ZWQgU0ZSIHBhZ2UuICBUaGlzIGxpbmUgc2hvdWxkIG5vdA0KLSAgICAgKiByZWFsbHkgYmUgcmVxdWlyZWQuICovDQotICAgIFNGUlBBR0UgPSAwOw0KKwkvKiBNYWtlIHN1cmUgd2Ugc3RhcnQgd2l0aCB0aGUgZXhwZWN0ZWQgU0ZSIHBhZ2UuICBUaGlzIGxpbmUgc2hvdWxkIG5vdA0KKwlyZWFsbHkgYmUgcmVxdWlyZWQuICovDQorCVNGUlBBR0UgPSAwOw0KIA0KLSAgICAvKiBDb3B5IHRoZSBzdGFjayBmb3IgdGhlIGZpcnN0IHRhc2sgdG8gZXhlY3V0ZSBmcm9tIFhSQU0gaW50byB0aGUgc3RhY2ssDQotICAgICAqIHJlc3RvcmUgdGhlIHRhc2sgY29udGV4dCBmcm9tIHRoZSBuZXcgc3RhY2ssIHRoZW4gc3RhcnQgcnVubmluZyB0aGUgdGFzay4gKi8NCi0gICAgcG9ydENPUFlfWFJBTV9UT19TVEFDSygpOw0KLSAgICBwb3J0UkVTVE9SRV9DT05URVhUKCk7DQorCS8qIENvcHkgdGhlIHN0YWNrIGZvciB0aGUgZmlyc3QgdGFzayB0byBleGVjdXRlIGZyb20gWFJBTSBpbnRvIHRoZSBzdGFjaywNCisJcmVzdG9yZSB0aGUgdGFzayBjb250ZXh0IGZyb20gdGhlIG5ldyBzdGFjaywgdGhlbiBzdGFydCBydW5uaW5nIHRoZSB0YXNrLiAqLw0KKwlwb3J0Q09QWV9YUkFNX1RPX1NUQUNLKCk7DQorCXBvcnRSRVNUT1JFX0NPTlRFWFQoKTsNCiANCi0gICAgLyogU2hvdWxkIG5ldmVyIGdldCBoZXJlISAqLw0KLSAgICByZXR1cm4gcGRUUlVFOw0KKwkvKiBTaG91bGQgbmV2ZXIgZ2V0IGhlcmUhICovDQorCXJldHVybiBwZFRSVUU7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQ0KIHsNCi0gICAgLyogTm90IGltcGxlbWVudGVkIGZvciB0aGlzIHBvcnQuICovDQorCS8qIE5vdCBpbXBsZW1lbnRlZCBmb3IgdGhpcyBwb3J0LiAqLw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCkBAIC0zMzIsOTIgKzMyOSw5NiBAQAogICovDQogdm9pZCB2UG9ydFlpZWxkKCB2b2lkICkgX25ha2VkDQogew0KLSAgICAvKiBTYXZlIHRoZSBleGVjdXRpb24gY29udGV4dCBvbnRvIHRoZSBzdGFjaywgdGhlbiBjb3B5IHRoZSBlbnRpcmUgc3RhY2sNCi0gICAgICogdG8gWFJBTS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGFzIHRoZSBpbnRlcm5hbCBSQU0gaXMgb25seSBsYXJnZSBlbm91Z2ggdG8NCi0gICAgICogaG9sZCBvbmUgc3RhY2ssIGFuZCB3ZSB3YW50IG9uZSBwZXIgdGFzay4NCi0gICAgICoNCi0gICAgICogUEVSRk9STUFOQ0UgQ09VTEQgQkUgSU1QUk9WRUQgQlkgT05MWSBDT1BZSU5HIFRPIFhSQU0gSUYgQSBUQVNLIFNXSVRDSA0KLSAgICAgKiBJUyBSRVFVSVJFRC4gKi8NCi0gICAgcG9ydFNBVkVfQ09OVEVYVCgpOw0KLSAgICBwb3J0Q09QWV9TVEFDS19UT19YUkFNKCk7DQorCS8qIFNhdmUgdGhlIGV4ZWN1dGlvbiBjb250ZXh0IG9udG8gdGhlIHN0YWNrLCB0aGVuIGNvcHkgdGhlIGVudGlyZSBzdGFjaw0KKwl0byBYUkFNLiAgVGhpcyBpcyBuZWNlc3NhcnkgYXMgdGhlIGludGVybmFsIFJBTSBpcyBvbmx5IGxhcmdlIGVub3VnaCB0bw0KKwlob2xkIG9uZSBzdGFjaywgYW5kIHdlIHdhbnQgb25lIHBlciB0YXNrLiANCisJDQorCVBFUkZPUk1BTkNFIENPVUxEIEJFIElNUFJPVkVEIEJZIE9OTFkgQ09QWUlORyBUTyBYUkFNIElGIEEgVEFTSyBTV0lUQ0gNCisJSVMgUkVRVUlSRUQuICovDQorCXBvcnRTQVZFX0NPTlRFWFQoKTsNCisJcG9ydENPUFlfU1RBQ0tfVE9fWFJBTSgpOw0KIA0KLSAgICAvKiBDYWxsIHRoZSBzdGFuZGFyZCBzY2hlZHVsZXIgY29udGV4dCBzd2l0Y2ggZnVuY3Rpb24uICovDQotICAgIHZUYXNrU3dpdGNoQ29udGV4dCgpOw0KKwkvKiBDYWxsIHRoZSBzdGFuZGFyZCBzY2hlZHVsZXIgY29udGV4dCBzd2l0Y2ggZnVuY3Rpb24uICovDQorCXZUYXNrU3dpdGNoQ29udGV4dCgpOw0KIA0KLSAgICAvKiBDb3B5IHRoZSBzdGFjayBvZiB0aGUgdGFzayBhYm91dCB0byBleGVjdXRlIGZyb20gWFJBTSBpbnRvIFJBTSBhbmQNCi0gICAgICogcmVzdG9yZSBpdCdzIGNvbnRleHQgcmVhZHkgdG8gcnVuIG9uIGV4aXRpbmcuICovDQotICAgIHBvcnRDT1BZX1hSQU1fVE9fU1RBQ0soKTsNCi0gICAgcG9ydFJFU1RPUkVfQ09OVEVYVCgpOw0KKwkvKiBDb3B5IHRoZSBzdGFjayBvZiB0aGUgdGFzayBhYm91dCB0byBleGVjdXRlIGZyb20gWFJBTSBpbnRvIFJBTSBhbmQNCisJcmVzdG9yZSBpdCdzIGNvbnRleHQgcmVhZHkgdG8gcnVuIG9uIGV4aXRpbmcuICovDQorCXBvcnRDT1BZX1hSQU1fVE9fU1RBQ0soKTsNCisJcG9ydFJFU1RPUkVfQ09OVEVYVCgpOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMQ0KLSAgICB2b2lkIHZUaW1lcjJJU1IoIHZvaWQgKSBpbnRlcnJ1cHQgNSBfbmFrZWQNCi0gICAgew0KLSAgICAgICAgLyogUHJlZW1wdGl2ZSBjb250ZXh0IHN3aXRjaCBmdW5jdGlvbiB0cmlnZ2VyZWQgYnkgdGhlIHRpbWVyIDIgSVNSLg0KLSAgICAgICAgICogVGhpcyBkb2VzIHRoZSBzYW1lIGFzIHZQb3J0WWllbGQoKSAoc2VlIGFib3ZlKSB3aXRoIHRoZSBhZGRpdGlvbg0KLSAgICAgICAgICogb2YgaW5jcmVtZW50aW5nIHRoZSBSVE9TIHRpY2sgY291bnQuICovDQorCXZvaWQgdlRpbWVyMklTUiggdm9pZCApIGludGVycnVwdCA1IF9uYWtlZA0KKwl7DQorCQkvKiBQcmVlbXB0aXZlIGNvbnRleHQgc3dpdGNoIGZ1bmN0aW9uIHRyaWdnZXJlZCBieSB0aGUgdGltZXIgMiBJU1IuDQorCQlUaGlzIGRvZXMgdGhlIHNhbWUgYXMgdlBvcnRZaWVsZCgpIChzZWUgYWJvdmUpIHdpdGggdGhlIGFkZGl0aW9uDQorCQlvZiBpbmNyZW1lbnRpbmcgdGhlIFJUT1MgdGljayBjb3VudC4gKi8NCiANCi0gICAgICAgIHBvcnRTQVZFX0NPTlRFWFQoKTsNCi0gICAgICAgIHBvcnRDT1BZX1NUQUNLX1RPX1hSQU0oKTsNCisJCXBvcnRTQVZFX0NPTlRFWFQoKTsNCisJCXBvcnRDT1BZX1NUQUNLX1RPX1hSQU0oKTsNCiANCi0gICAgICAgIGlmKCB4VGFza0luY3JlbWVudFRpY2soKSAhPSBwZEZBTFNFICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICB2VGFza1N3aXRjaENvbnRleHQoKTsNCi0gICAgICAgIH0NCisJCWlmKCB4VGFza0luY3JlbWVudFRpY2soKSAhPSBwZEZBTFNFICkNCisJCXsNCisJCQl2VGFza1N3aXRjaENvbnRleHQoKTsNCisJCX0NCisJCQ0KKwkJcG9ydENMRUFSX0lOVEVSUlVQVF9GTEFHKCk7DQorCQlwb3J0Q09QWV9YUkFNX1RPX1NUQUNLKCk7DQorCQlwb3J0UkVTVE9SRV9DT05URVhUKCk7DQorCX0NCisjZWxzZQ0KKwl2b2lkIHZUaW1lcjJJU1IoIHZvaWQgKSBpbnRlcnJ1cHQgNQ0KKwl7DQorCQkvKiBXaGVuIHVzaW5nIHRoZSBjb29wZXJhdGl2ZSBzY2hlZHVsZXIgdGhlIHRpbWVyIDIgSVNSIGlzIG9ubHkgDQorCQlyZXF1aXJlZCB0byBpbmNyZW1lbnQgdGhlIFJUT1MgdGljayBjb3VudC4gKi8NCiANCi0gICAgICAgIHBvcnRDTEVBUl9JTlRFUlJVUFRfRkxBRygpOw0KLSAgICAgICAgcG9ydENPUFlfWFJBTV9UT19TVEFDSygpOw0KLSAgICAgICAgcG9ydFJFU1RPUkVfQ09OVEVYVCgpOw0KLSAgICB9DQotI2Vsc2UgIC8qIGlmIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDEgKi8NCi0gICAgdm9pZCB2VGltZXIySVNSKCB2b2lkICkgaW50ZXJydXB0IDUNCi0gICAgew0KLSAgICAgICAgLyogV2hlbiB1c2luZyB0aGUgY29vcGVyYXRpdmUgc2NoZWR1bGVyIHRoZSB0aW1lciAyIElTUiBpcyBvbmx5DQotICAgICAgICAgKiByZXF1aXJlZCB0byBpbmNyZW1lbnQgdGhlIFJUT1MgdGljayBjb3VudC4gKi8NCi0NCi0gICAgICAgIHhUYXNrSW5jcmVtZW50VGljaygpOw0KLSAgICAgICAgcG9ydENMRUFSX0lOVEVSUlVQVF9GTEFHKCk7DQotICAgIH0NCi0jZW5kaWYgLyogaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMSAqLw0KKwkJeFRhc2tJbmNyZW1lbnRUaWNrKCk7DQorCQlwb3J0Q0xFQVJfSU5URVJSVVBUX0ZMQUcoKTsNCisJfQ0KKyNlbmRpZg0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHN0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKQ0KIHsNCi0gICAgdWludDhfdCB1Y09yaWdpbmFsU0ZSUGFnZTsNCit1aW50OF90IHVjT3JpZ2luYWxTRlJQYWdlOw0KIA0KIC8qIENvbnN0YW50cyBjYWxjdWxhdGVkIHRvIGdpdmUgdGhlIHJlcXVpcmVkIHRpbWVyIGNhcHR1cmUgdmFsdWVzLiAqLw0KLSAgICBjb25zdCB1aW50MzJfdCB1bFRpY2tzUGVyU2Vjb25kID0gY29uZmlnQ1BVX0NMT0NLX0haIC8gcG9ydENMT0NLX0RJVklTT1I7DQotICAgIGNvbnN0IHVpbnQzMl90IHVsQ2FwdHVyZVRpbWUgPSB1bFRpY2tzUGVyU2Vjb25kIC8gY29uZmlnVElDS19SQVRFX0haOw0KLSAgICBjb25zdCB1aW50MzJfdCB1bENhcHR1cmVWYWx1ZSA9IHBvcnRNQVhfVElNRVJfVkFMVUUgLSB1bENhcHR1cmVUaW1lOw0KLSAgICBjb25zdCB1aW50OF90IHVjTG93Q2FwdHVyZUJ5dGUgPSAoIHVpbnQ4X3QgKSAoIHVsQ2FwdHVyZVZhbHVlICYgKCB1aW50MzJfdCApIDB4ZmYgKTsNCi0gICAgY29uc3QgdWludDhfdCB1Y0hpZ2hDYXB0dXJlQnl0ZSA9ICggdWludDhfdCApICggdWxDYXB0dXJlVmFsdWUgPj4gKCB1aW50MzJfdCApIDggKTsNCitjb25zdCB1aW50MzJfdCB1bFRpY2tzUGVyU2Vjb25kID0gY29uZmlnQ1BVX0NMT0NLX0haIC8gcG9ydENMT0NLX0RJVklTT1I7DQorY29uc3QgdWludDMyX3QgdWxDYXB0dXJlVGltZSA9IHVsVGlja3NQZXJTZWNvbmQgLyBjb25maWdUSUNLX1JBVEVfSFo7DQorY29uc3QgdWludDMyX3QgdWxDYXB0dXJlVmFsdWUgPSBwb3J0TUFYX1RJTUVSX1ZBTFVFIC0gdWxDYXB0dXJlVGltZTsNCitjb25zdCB1aW50OF90IHVjTG93Q2FwdHVyZUJ5dGUgPSAoIHVpbnQ4X3QgKSAoIHVsQ2FwdHVyZVZhbHVlICYgKCB1aW50MzJfdCApIDB4ZmYgKTsNCitjb25zdCB1aW50OF90IHVjSGlnaENhcHR1cmVCeXRlID0gKCB1aW50OF90ICkgKCB1bENhcHR1cmVWYWx1ZSA+PiAoIHVpbnQzMl90ICkgOCApOw0KIA0KLSAgICAvKiBOT1RFOiAgVGhpcyB1c2VzIGEgdGltZXIgb25seSBwcmVzZW50IG9uIDgwNTIgYXJjaGl0ZWN0dXJlLiAqLw0KKwkvKiBOT1RFOiAgVGhpcyB1c2VzIGEgdGltZXIgb25seSBwcmVzZW50IG9uIDgwNTIgYXJjaGl0ZWN0dXJlLiAqLw0KIA0KLSAgICAvKiBSZW1lbWJlciB0aGUgY3VycmVudCBTRlIgcGFnZSBzbyB3ZSBjYW4gcmVzdG9yZSBpdCBhdCB0aGUgZW5kIG9mIHRoZQ0KLSAgICAgKiBmdW5jdGlvbi4gKi8NCi0gICAgdWNPcmlnaW5hbFNGUlBhZ2UgPSBTRlJQQUdFOw0KLSAgICBTRlJQQUdFID0gMDsNCisJLyogUmVtZW1iZXIgdGhlIGN1cnJlbnQgU0ZSIHBhZ2Ugc28gd2UgY2FuIHJlc3RvcmUgaXQgYXQgdGhlIGVuZCBvZiB0aGUNCisJZnVuY3Rpb24uICovDQorCXVjT3JpZ2luYWxTRlJQYWdlID0gU0ZSUEFHRTsNCisJU0ZSUEFHRSA9IDA7DQogDQotICAgIC8qIFRNUjJDRiBjYW4gYmUgbGVmdCBpbiBpdHMgZGVmYXVsdCBzdGF0ZS4gKi8NCi0gICAgVE1SMkNGID0gKCB1aW50OF90ICkgMDsNCisJLyogVE1SMkNGIGNhbiBiZSBsZWZ0IGluIGl0cyBkZWZhdWx0IHN0YXRlLiAqLwkNCisJVE1SMkNGID0gKCB1aW50OF90ICkgMDsNCiANCi0gICAgLyogU2V0dXAgdGhlIG92ZXJmbG93IHJlbG9hZCB2YWx1ZS4gKi8NCi0gICAgUkNBUDJMID0gdWNMb3dDYXB0dXJlQnl0ZTsNCi0gICAgUkNBUDJIID0gdWNIaWdoQ2FwdHVyZUJ5dGU7DQorCS8qIFNldHVwIHRoZSBvdmVyZmxvdyByZWxvYWQgdmFsdWUuICovDQorCVJDQVAyTCA9IHVjTG93Q2FwdHVyZUJ5dGU7DQorCVJDQVAySCA9IHVjSGlnaENhcHR1cmVCeXRlOw0KIA0KLSAgICAvKiBUaGUgaW5pdGlhbCBsb2FkIGlzIHBlcmZvcm1lZCBtYW51YWxseS4gKi8NCi0gICAgVE1SMkwgPSB1Y0xvd0NhcHR1cmVCeXRlOw0KLSAgICBUTVIySCA9IHVjSGlnaENhcHR1cmVCeXRlOw0KKwkvKiBUaGUgaW5pdGlhbCBsb2FkIGlzIHBlcmZvcm1lZCBtYW51YWxseS4gKi8NCisJVE1SMkwgPSB1Y0xvd0NhcHR1cmVCeXRlOw0KKwlUTVIySCA9IHVjSGlnaENhcHR1cmVCeXRlOw0KIA0KLSAgICAvKiBFbmFibGUgdGhlIHRpbWVyIDIgaW50ZXJydXB0cy4gKi8NCi0gICAgSUUgfD0gcG9ydFRJTUVSXzJfSU5URVJSVVBUX0VOQUJMRTsNCisJLyogRW5hYmxlIHRoZSB0aW1lciAyIGludGVycnVwdHMuICovDQorCUlFIHw9IHBvcnRUSU1FUl8yX0lOVEVSUlVQVF9FTkFCTEU7DQogDQotICAgIC8qIEludGVycnVwdHMgYXJlIGRpc2FibGVkIHdoZW4gdGhpcyBpcyBjYWxsZWQgc28gdGhlIHRpbWVyIGNhbiBiZSBzdGFydGVkDQotICAgICAqIGhlcmUuICovDQotICAgIFRNUjJDTiA9IHBvcnRFTkFCTEVfVElNRVI7DQorCS8qIEludGVycnVwdHMgYXJlIGRpc2FibGVkIHdoZW4gdGhpcyBpcyBjYWxsZWQgc28gdGhlIHRpbWVyIGNhbiBiZSBzdGFydGVkDQorCWhlcmUuICovDQorCVRNUjJDTiA9IHBvcnRFTkFCTEVfVElNRVI7DQogDQotICAgIC8qIFJlc3RvcmUgdGhlIG9yaWdpbmFsIFNGUiBwYWdlLiAqLw0KLSAgICBTRlJQQUdFID0gdWNPcmlnaW5hbFNGUlBhZ2U7DQorCS8qIFJlc3RvcmUgdGhlIG9yaWdpbmFsIFNGUiBwYWdlLiAqLw0KKwlTRlJQQUdFID0gdWNPcmlnaW5hbFNGUlBhZ2U7DQogfQ0KKw0KKw0KKw0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL1NEQ0MvQ3lnbmFsL3BvcnRtYWNyby5oIGIvcG9ydGFibGUvU0RDQy9DeWduYWwvcG9ydG1hY3JvLmgKaW5kZXggMmZlMGEzZi4uOTc4YmNkMiAxMDA2NDQKLS0tIGEvcG9ydGFibGUvU0RDQy9DeWduYWwvcG9ydG1hY3JvLmgKKysrIGIvcG9ydGFibGUvU0RDQy9DeWduYWwvcG9ydG1hY3JvLmgKQEAgLTI5LDkgKzI5LDkgQEAKICNkZWZpbmUgUE9SVE1BQ1JPX0gNCiANCiAjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMA0KLSAgICB2b2lkIHZUaW1lcjJJU1IoIHZvaWQgKSBpbnRlcnJ1cHQgNTsNCisJdm9pZCB2VGltZXIySVNSKCB2b2lkICkgaW50ZXJydXB0IDU7DQogI2Vsc2UNCi0gICAgdm9pZCB2VGltZXIySVNSKCB2b2lkICkgaW50ZXJydXB0IDUgX25ha2VkOw0KKwl2b2lkIHZUaW1lcjJJU1IoIHZvaWQgKSBpbnRlcnJ1cHQgNSBfbmFrZWQ7DQogI2VuZGlmDQogDQogdm9pZCB2U2VyaWFsSVNSKCB2b2lkICkgaW50ZXJydXB0IDQ7DQpAQCAtNDgsNjkgKzQ4LDY4IEBACiAgKi8NCiANCiAvKiBUeXBlIGRlZmluaXRpb25zLiAqLw0KLSNkZWZpbmUgcG9ydENIQVIgICAgICAgICAgY2hhcg0KLSNkZWZpbmUgcG9ydEZMT0FUICAgICAgICAgZmxvYXQNCi0jZGVmaW5lIHBvcnRET1VCTEUgICAgICAgIGZsb2F0DQotI2RlZmluZSBwb3J0TE9ORyAgICAgICAgICBsb25nDQotI2RlZmluZSBwb3J0U0hPUlQgICAgICAgICBzaG9ydA0KLSNkZWZpbmUgcG9ydFNUQUNLX1RZUEUgICAgdWludDhfdA0KLSNkZWZpbmUgcG9ydEJBU0VfVFlQRSAgICAgY2hhcg0KKyNkZWZpbmUgcG9ydENIQVIJCWNoYXINCisjZGVmaW5lIHBvcnRGTE9BVAkJZmxvYXQNCisjZGVmaW5lIHBvcnRET1VCTEUJCWZsb2F0DQorI2RlZmluZSBwb3J0TE9ORwkJbG9uZw0KKyNkZWZpbmUgcG9ydFNIT1JUCQlzaG9ydA0KKyNkZWZpbmUgcG9ydFNUQUNLX1RZUEUJdWludDhfdA0KKyNkZWZpbmUgcG9ydEJBU0VfVFlQRQljaGFyDQogDQotdHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSAgIFN0YWNrVHlwZV90Ow0KLXR5cGVkZWYgc2lnbmVkIGNoYXIgICAgICBCYXNlVHlwZV90Ow0KLXR5cGVkZWYgdW5zaWduZWQgY2hhciAgICBVQmFzZVR5cGVfdDsNCit0eXBlZGVmIHBvcnRTVEFDS19UWVBFIFN0YWNrVHlwZV90Ow0KK3R5cGVkZWYgc2lnbmVkIGNoYXIgQmFzZVR5cGVfdDsNCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgVUJhc2VUeXBlX3Q7DQogDQotI2lmICggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCi0gICAgdHlwZWRlZiB1aW50MTZfdCAgICAgVGlja1R5cGVfdDsNCi0gICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICggVGlja1R5cGVfdCApIDB4ZmZmZg0KKyNpZiggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCisJdHlwZWRlZiB1aW50MTZfdCBUaWNrVHlwZV90Ow0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQogI2Vsc2UNCi0gICAgdHlwZWRlZiB1aW50MzJfdCAgICAgVGlja1R5cGVfdDsNCi0gICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTA0KKwl0eXBlZGVmIHVpbnQzMl90IFRpY2tUeXBlX3Q7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwNCiAjZW5kaWYNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBDcml0aWNhbCBzZWN0aW9uIG1hbmFnZW1lbnQuICovDQotI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKSBcDQotICAgIF9hc20gICAgICAgICAgICAgICAgICAgICBcDQotICAgIHB1c2ggQUNDICAgICAgICAgICAgICAgICBcDQotICAgIHB1c2ggSUUgICAgICAgICAgICAgICAgICBcDQotICAgIF9lbmRhc207ICAgICAgICAgICAgICAgICBcDQotICAgIEVBID0gMDsNCisjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpCQlfYXNtCQlcDQorCQkJCQkJCQkJcHVzaAlBQ0MJXA0KKwkJCQkJCQkJCXB1c2gJSUUJXA0KKwkJCQkJCQkJCV9lbmRhc207CVwNCisJCQkJCQkJCQlFQSA9IDA7DQogDQotI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpIFwNCi0gICAgX2FzbSAgICAgICAgICAgICAgICAgICAgXA0KLSAgICBwb3AgQUNDICAgICAgICAgICAgICAgICBcDQotICAgIF9lbmRhc207ICAgICAgICAgICAgICAgIFwNCi0gICAgQUNDICY9IDB4ODA7ICAgICAgICAgICAgXA0KLSAgICBJRSB8PSBBQ0M7ICAgICAgICAgICAgICBcDQotICAgIF9hc20gICAgICAgICAgICAgICAgICAgIFwNCi0gICAgcG9wIEFDQyAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgX2VuZGFzbTsNCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkJCQlfYXNtCQkJXA0KKwkJCQkJCQkJCXBvcAkJQUNDCQlcDQorCQkJCQkJCQkJX2VuZGFzbTsJCVwNCisJCQkJCQkJCQlBQ0MgJj0gMHg4MDsJXA0KKwkJCQkJCQkJCUlFIHw9IEFDQzsJCVwNCisJCQkJCQkJCQlfYXNtCQkJXA0KKwkJCQkJCQkJCXBvcAkJQUNDCQlcDQorCQkJCQkJCQkJX2VuZGFzbTsNCiANCi0jZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAgICBFQSA9IDA7DQotI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKSAgICAgRUEgPSAxOw0KKyNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpCUVBID0gMDsNCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpCQlFQSA9IDE7DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogSGFyZHdhcmUgc3BlY2lmaWNzLiAqLw0KLSNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UICAgIDENCi0jZGVmaW5lIHBvcnRTVEFDS19HUk9XVEggICAgICAoIDEgKQ0KLSNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TICAgICggKCB1aW50MzJfdCApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UCQkJMQ0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJCSggMSApDQorI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMJCQkoICggdWludDMyX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBUYXNrIHV0aWxpdGllcy4gKi8NCiB2b2lkIHZQb3J0WWllbGQoIHZvaWQgKSBfbmFrZWQ7DQotI2RlZmluZSBwb3J0WUlFTEQoKSAgICB2UG9ydFlpZWxkKCk7DQorI2RlZmluZSBwb3J0WUlFTEQoKQl2UG9ydFlpZWxkKCk7DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQotI2RlZmluZSBwb3J0Tk9QKCkgXA0KLSAgICBfYXNtICAgICAgICAgIFwNCi0gICAgbm9wICAgICAgICAgICBcDQotICAgIF9lbmRhc207DQorI2RlZmluZSBwb3J0Tk9QKCkJCQkJX2FzbQlcDQorCQkJCQkJCQkJbm9wIFwNCisJCQkJCQkJCV9lbmRhc207DQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQotI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQotI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICAgICAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KIA0KICNlbmRpZiAvKiBQT1JUTUFDUk9fSCAqLw0KKw0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL1NvZnR1bmUvTUI5MTQ2MC9fX1NURF9MSUJfc2Jyay5jIGIvcG9ydGFibGUvU29mdHVuZS9NQjkxNDYwL19fU1REX0xJQl9zYnJrLmMKaW5kZXggMDgyMDFjYS4uZmU3MGQ0OCAxMDA2NDQKLS0tIGEvcG9ydGFibGUvU29mdHVuZS9NQjkxNDYwL19fU1REX0xJQl9zYnJrLmMKKysrIGIvcG9ydGFibGUvU29mdHVuZS9NQjkxNDYwL19fU1REX0xJQl9zYnJrLmMKQEAgLTEsMjUgKzEsMjMgQEAKICNpbmNsdWRlICJGcmVlUlRPU0NvbmZpZy5oIg0KICNpbmNsdWRlIDxzdGRsaWIuaD4NCiANCi1zdGF0aWMgbG9uZyBicmtfc2l6ID0gMDsNCi0vKgkjaWYgIGNvbmZpZ1RPVEFMX0hFQVBfU0laRSAhPSAwICovDQotdHlwZWRlZiBpbnQgX2hlZXBfdDsNCi0jZGVmaW5lIFJPVU5EVVAoIHMgKSAgICAoICggKCBzICkgKyBzaXplb2YoIF9oZWVwX3QgKSAtIDEgKSAmIH4oIHNpemVvZiggX2hlZXBfdCApIC0gMSApICkNCi1zdGF0aWMgX2hlZXBfdCBfaGVlcFsgUk9VTkRVUCggY29uZmlnVE9UQUxfSEVBUF9TSVpFICkgLyBzaXplb2YoIF9oZWVwX3QgKSBdOw0KLSNkZWZpbmUgICAgICAgICAgICAgIF9oZWVwX3NpemUgICAgUk9VTkRVUCggY29uZmlnVE9UQUxfSEVBUF9TSVpFICkNCi0NCisJc3RhdGljICBsb25nICAgICAgICAgYnJrX3NpeiAgPSAgMDsNCisvLwkjaWYgIGNvbmZpZ1RPVEFMX0hFQVBfU0laRSAhPSAwDQorCXR5cGVkZWYgaW50ICAgICAgICAgIF9oZWVwX3Q7DQorCSNkZWZpbmUgUk9VTkRVUChzKSAgICgoKHMpK3NpemVvZihfaGVlcF90KS0xKSZ+KHNpemVvZihfaGVlcF90KS0xKSkNCisJc3RhdGljICBfaGVlcF90ICAgICAgX2hlZXBbUk9VTkRVUChjb25maWdUT1RBTF9IRUFQX1NJWkUpL3NpemVvZihfaGVlcF90KV07DQorCSNkZWZpbmUgICAgICAgICAgICAgIF9oZWVwX3NpemUgICAgICBST1VORFVQKGNvbmZpZ1RPVEFMX0hFQVBfU0laRSkNCiAvKgkjZWxzZQ0KLSAqICBleHRlcm4gIGNoYXIgICAgICAgICpfaGVlcDsNCi0gKiAgZXh0ZXJuICBsb25nICAgICAgICBfaGVlcF9zaXplOw0KLSAjZW5kaWYNCi0gKi8NCi1leHRlcm4gY2hhciAqIHNicmsoIGludCBzaXplICkNCi17DQotICAgIGlmKCAoIGJya19zaXogKyBzaXplID4gX2hlZXBfc2l6ZSApIHx8ICggYnJrX3NpeiArIHNpemUgPCAwICkgKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4oICggY2hhciAqICkgLTEgKTsNCi0gICAgfQ0KKwlleHRlcm4gIGNoYXIgICAgICAgICpfaGVlcDsNCisJZXh0ZXJuICBsb25nICAgICAgICBfaGVlcF9zaXplOw0KKwkjZW5kaWYNCisqLwkNCisJZXh0ZXJuICBjaGFyICAqc2JyayhpbnQgIHNpemUpDQorCXsNCisJICAgaWYgIChicmtfc2l6ICArICBzaXplICA+ICBfaGVlcF9zaXplICB8fCAgYnJrX3NpeiAgKyAgc2l6ZSAgPCAgMCkNCiANCi0gICAgYnJrX3NpeiArPSBzaXplOw0KLSAgICByZXR1cm4oICggY2hhciAqICkgX2hlZXAgKyBicmtfc2l6IC0gc2l6ZSApOw0KLX0NCisgICAgICAgICAgcmV0dXJuKChjaGFyKiktMSk7DQorCSAgIGJya19zaXogICs9ICBzaXplOw0KKwkgICByZXR1cm4oICAoY2hhciopX2hlZXAgICsgIGJya19zaXogIC0gIHNpemUpOw0KKwl9DQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvU29mdHVuZS9NQjkxNDYwL3BvcnQuYyBiL3BvcnRhYmxlL1NvZnR1bmUvTUI5MTQ2MC9wb3J0LmMKaW5kZXggMjNjMzE5NS4uMGYwOWY0MCAxMDA2NDQKLS0tIGEvcG9ydGFibGUvU29mdHVuZS9NQjkxNDYwL3BvcnQuYworKysgYi9wb3J0YWJsZS9Tb2Z0dW5lL01COTE0NjAvcG9ydC5jCkBAIC0zMiwxMiArMzIsMTIgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFdlIHJlcXVpcmUgdGhlIGFkZHJlc3Mgb2YgdGhlIHB4Q3VycmVudFRDQiB2YXJpYWJsZSwgYnV0IGRvbid0IHdhbnQgdG8ga25vdw0KLSAqIGFueSBkZXRhaWxzIG9mIGl0cyB0eXBlLiAqLw0KK2FueSBkZXRhaWxzIG9mIGl0cyB0eXBlLiAqLw0KIHR5cGVkZWYgdm9pZCBUQ0JfdDsNCiBleHRlcm4gdm9sYXRpbGUgVENCX3QgKiB2b2xhdGlsZSBweEN1cnJlbnRUQ0I7DQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQotDQorIA0KICNwcmFnbWEgYXNtDQogI21hY3JvICBTYXZlQ29udGV4dA0KIAkgT1JDQ1IgIzB4MjAJCQkJCQkJCTtTd2l0Y2ggdG8gdXNlciBzdGFjaw0KQEAgLTQ2LDIxICs0NiwyMSBAQAogCSBTVE0xIChSMTQsUjEzLFIxMixSMTEsUjEwLFI5LFI4KQkJCTtTdG9yZSBSMTQtUjgNCiAJIFNUIE1ESCwgQC1SMTUJCQkJCQkJCTtTdG9yZSBNREgNCiAJIFNUIE1ETCwgQC1SMTUJCQkJCQkJCTtTdG9yZSBNREwNCi0NCisJIA0KIAkgQU5EQ0NSICMweERGCQkJCQkJCQk7U3dpdGNoIGJhY2sgdG8gc3lzdGVtIHN0YWNrDQogCSBMRCBAUjE1KyxSMAkJCQkJCQkJO1N0b3JlIFBDIHRvIFIwIA0KIAkgT1JDQ1IgIzB4MjAJCQkJCQkJCTtTd2l0Y2ggdG8gdXNlciBzdGFjaw0KIAkgU1QgUjAsQC1SMTUJCQkJCQkJCTtTdG9yZSBQQyB0byBVc2VyIHN0YWNrDQotDQorCSANCiAJIEFORENDUiAjMHhERgkJCQkJCQkJO1N3aXRjaCBiYWNrIHRvIHN5c3RlbSBzdGFjaw0KIAkgTEQgQFIxNSssUjAJCQkJCQkJCTtTdG9yZSBQUyB0byBSMA0KIAkgT1JDQ1IgIzB4MjAJCQkJCQkJCTtTd2l0Y2ggdG8gdXNlciBzdGFjaw0KIAkgU1QgUjAsQC1SMTUJCQkJCQkJCTtTdG9yZSBQUyB0byBVc2VyIHN0YWNrDQotDQorCSANCiAJIExESSAjX3B4Q3VycmVudFRDQiwgUjAJCQkJCQk7R2V0IHB4Q3VycmVudFRDQiBhZGRyZXNzDQogCSBMRCBAUjAsIFIwCQkJCQkJCQkJO0dldCB0aGUgcHhDdXJyZW50VENCLT5weFRvcE9mU3RhY2sgYWRkcmVzcw0KIAkgU1QgUjE1LEBSMAkJCQkJCQkJCTtTdG9yZSBVU1AgdG8gcHhDdXJyZW50VENCLT5weFRvcE9mU3RhY2sNCi0NCisJIA0KIAkgQU5EQ0NSICMweERGCQkJCQkJCQk7U3dpdGNoIGJhY2sgdG8gc3lzdGVtIHN0YWNrIGZvciB0aGUgcmVzdCBvZiB0aWNrIElTUg0KICNlbmRtDQogDQpAQCAtODYsNyArODYsNyBAQAogCSBMRE0xIChSMTQsUjEzLFIxMixSMTEsUjEwLFI5LFI4KQkJCTtSZXN0b3JlIFIxNC1SOA0KIAkgTERNMCAoUjcsUjYsUjUsUjQsUjMsUjIsUjEsUjApCQkJCTtSZXN0b3JlIFI3LVIwDQogCSBMRCBAUjE1KywgUlAJCQkJCQkJCTtSZXN0b3JlIFJQDQotDQorCSANCiAJIEFORENDUiAjMHhERgkJCQkJCQkJO1N3aXRjaCBiYWNrIHRvIHN5c3RlbSBzdGFjayBmb3IgdGhlIHJlc3Qgb2YgdGljayBJU1INCiAjZW5kbQ0KICNwcmFnbWEgZW5kYXNtDQpAQCAtOTksMTQyICs5OSwxNDAgQEAKIHN0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKTsNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0vKg0KLSAqIEluaXRpYWxpc2UgdGhlIHN0YWNrIG9mIGEgdGFzayB0byBsb29rIGV4YWN0bHkgYXMgaWYgYSBjYWxsIHRvDQorLyogDQorICogSW5pdGlhbGlzZSB0aGUgc3RhY2sgb2YgYSB0YXNrIHRvIGxvb2sgZXhhY3RseSBhcyBpZiBhIGNhbGwgdG8gDQogICogcG9ydFNBVkVfQ09OVEVYVCBoYWQgYmVlbiBjYWxsZWQuDQotICoNCisgKiANCiAgKiBTZWUgdGhlIGhlYWRlciBmaWxlIHBvcnRhYmxlLmguDQogICovDQotU3RhY2tUeXBlX3QgKiBweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICogcHhUb3BPZlN0YWNrLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYXNrRnVuY3Rpb25fdCBweENvZGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KK1N0YWNrVHlwZV90ICpweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICpweFRvcE9mU3RhY2ssIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzICkNCiB7DQotICAgIC8qIFBsYWNlIGEgZmV3IGJ5dGVzIG9mIGtub3duIHZhbHVlcyBvbiB0aGUgYm90dG9tIG9mIHRoZSBzdGFjay4NCi0gICAgICogVGhpcyBpcyBqdXN0IHVzZWZ1bCBmb3IgZGVidWdnaW5nLiAqLw0KKwkvKiBQbGFjZSBhIGZldyBieXRlcyBvZiBrbm93biB2YWx1ZXMgb24gdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suIA0KKwlUaGlzIGlzIGp1c3QgdXNlZnVsIGZvciBkZWJ1Z2dpbmcuICovDQogDQotICAgICpweFRvcE9mU3RhY2sgPSAweDExMTExMTExOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MjIyMjIyMjI7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMHgzMzMzMzMzMzsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDExMTExMTExOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MjIyMjIyMjI7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgzMzMzMzMzMzsNCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgIC8qIFRoaXMgaXMgYSByZWR1bmRhbnQgcHVzaCB0byB0aGUgc3RhY2ssIGl0IG1heSBiZSByZXF1aXJlZCBpZg0KLSAgICAgKiBpbiBzb21lIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgY29tcGlsZXIgdGhlIHBhcmFtZXRlciB0byB0aGUgdGFzaw0KLSAgICAgKiBpcyBwYXNzZWQgb24gdG8gdGhlIHN0YWNrIHJhdGhlciB0aGFuIGluIFI0IHJlZ2lzdGVyLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApICggcHZQYXJhbWV0ZXJzICk7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KKwkvKiBUaGlzIGlzIGEgcmVkdW5kYW50IHB1c2ggdG8gdGhlIHN0YWNrLCBpdCBtYXkgYmUgcmVxdWlyZWQgaWYgDQorCWluIHNvbWUgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBjb21waWxlciB0aGUgcGFyYW1ldGVyIHRvIHRoZSB0YXNrIA0KKwlpcyBwYXNzZWQgb24gdG8gdGhlIHN0YWNrIHJhdGhlciB0aGFuIGluIFI0IHJlZ2lzdGVyLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gKFN0YWNrVHlwZV90KShwdlBhcmFtZXRlcnMpOw0KKwlweFRvcE9mU3RhY2stLTsgICAgICAgICAgICAgICAgICANCisgICAgDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMDAwMDAwMDsJLyogUlAgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMDAwNzc3NzsJLyogUjcgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMDAwNjY2NjsJLyogUjYgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMDAwNTU1NTsJLyogUjUgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCQ0KKwkvKiBJbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgY29tcGlsZXIgdGhlIGZpcnN0IA0KKwlwYXJhbWV0ZXIgdG8gdGhlIHRhc2sgKG9yIGZ1bmN0aW9uKSBpcyBwYXNzZWQgdmlhIFI0IHBhcmFtZXRlciANCisJdG8gdGhlIHRhc2ssIGhlbmNlIHRoZSBwdlBhcmFtZXRlcnMgcG9pbnRlciBpcyBjb3BpZWQgaW50byB0aGUgUjQgDQorCXJlZ2lzdGVyLiBTZWUgY29tcGlsZXIgbWFudWFsIHNlY3Rpb24gNC42LjIgZm9yIG1vcmUgaW5mb3JtYXRpb24uICovDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgKHB2UGFyYW1ldGVycyk7CS8qIFI0ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDAwMDMzMzM7CS8qIFIzICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDAwMDIyMjI7CS8qIFIyICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDAwMDExMTE7CS8qIFIxICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDAwMDAwMDE7CS8qIFIwICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAwMDBFRUVFOwkvKiBSMTQgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMDAwRERERDsJLyogUjEzICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDAwMENDQ0M7CS8qIFIxMiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAwMDBCQkJCOwkvKiBSMTEgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMDAwQUFBQTsJLyogUjEwICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDAwMDk5OTk7CS8qIFI5ICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDAwMDg4ODg7CS8qIFI4ICovDQorCXB4VG9wT2ZTdGFjay0tOwkNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDExMTEwMDAwOwkvKiBNREggKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgyMjIyMDAwMDsJLyogTURMICovDQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDAwMDAwMDA7IC8qIFJQICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDAwMDc3Nzc7IC8qIFI3ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDAwMDY2NjY7IC8qIFI2ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDAwMDU1NTU7IC8qIFI1ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLQ0KLSAgICAvKiBJbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgY29tcGlsZXIgdGhlIGZpcnN0DQotICAgICAqIHBhcmFtZXRlciB0byB0aGUgdGFzayAob3IgZnVuY3Rpb24pIGlzIHBhc3NlZCB2aWEgUjQgcGFyYW1ldGVyDQotICAgICAqIHRvIHRoZSB0YXNrLCBoZW5jZSB0aGUgcHZQYXJhbWV0ZXJzIHBvaW50ZXIgaXMgY29waWVkIGludG8gdGhlIFI0DQotICAgICAqIHJlZ2lzdGVyLiBTZWUgY29tcGlsZXIgbWFudWFsIHNlY3Rpb24gNC42LjIgZm9yIG1vcmUgaW5mb3JtYXRpb24uICovDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgKCBwdlBhcmFtZXRlcnMgKTsgLyogUjQgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMDAwMzMzMzsgICAgICAgLyogUjMgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMDAwMjIyMjsgICAgICAgLyogUjIgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMDAwMTExMTsgICAgICAgLyogUjEgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMDAwMDAwMTsgICAgICAgLyogUjAgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMDAwRUVFRTsgICAgICAgLyogUjE0ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDAwMEREREQ7ICAgICAgIC8qIFIxMyAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAwMDBDQ0NDOyAgICAgICAvKiBSMTIgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMDAwQkJCQjsgICAgICAgLyogUjExICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDAwMEFBQUE7ICAgICAgIC8qIFIxMCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAwMDA5OTk5OyAgICAgICAvKiBSOSAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAwMDA4ODg4OyAgICAgICAvKiBSOCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDExMTEwMDAwOyAgICAgICAvKiBNREggKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgyMjIyMDAwMDsgICAgICAgLyogTURMICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLQ0KLSAgICAvKiBUaGUgc3RhcnQgb2YgdGhlIHRhc2sgY29kZS4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBweENvZGU7IC8qIFBDICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLQ0KKwkvKiBUaGUgc3RhcnQgb2YgdGhlIHRhc2sgY29kZS4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSBweENvZGU7CS8qIFBDICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkgDQogICAgIC8qIFBTIC0gVXNlciBNb2RlLCBVU1AsIElMTT0zMSwgSW50ZXJydXB0cyBlbmFibGVkICovDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMDFGMDAzMDsgLyogUFMgKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAwMUYwMDMwOwkvKiBQUyAqLw0KIA0KLSAgICByZXR1cm4gcHhUb3BPZlN0YWNrOw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBCYXNlVHlwZV90IHhQb3J0U3RhcnRTY2hlZHVsZXIoIHZvaWQgKQ0KIHsNCi0gICAgLyogU2V0dXAgdGhlIGhhcmR3YXJlIHRvIGdlbmVyYXRlIHRoZSB0aWNrLiAqLw0KLSAgICBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCk7DQorCS8qIFNldHVwIHRoZSBoYXJkd2FyZSB0byBnZW5lcmF0ZSB0aGUgdGljay4gKi8NCisJcHJ2U2V0dXBUaW1lckludGVycnVwdCgpOw0KIA0KLSAgICAvKiBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBmaXJzdCB0YXNrIHRoYXQgaXMgZ29pbmcgdG8gcnVuLiAqLw0KLSAgICAjcHJhZ21hIGFzbQ0KKwkvKiBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBmaXJzdCB0YXNrIHRoYXQgaXMgZ29pbmcgdG8gcnVuLiAqLw0KKwkjcHJhZ21hIGFzbQ0KIAkJUmVzdG9yZUNvbnRleHQNCi0gICAgI3ByYWdtYSBlbmRhc20NCisJI3ByYWdtYSBlbmRhc20NCiANCi0gICAgLyogU2ltdWxhdGUgYSBmdW5jdGlvbiBjYWxsIGVuZCBhcyBnZW5lcmF0ZWQgYnkgdGhlIGNvbXBpbGVyLiAgV2Ugd2lsbCBub3cNCi0gICAgICoganVtcCB0byB0aGUgc3RhcnQgb2YgdGhlIHRhc2sgdGhlIGNvbnRleHQgb2Ygd2hpY2ggd2UgaGF2ZSBqdXN0IHJlc3RvcmVkLiAqLw0KLSAgICBfX2FzbSggIiByZXRpICIgKTsNCisJLyogU2ltdWxhdGUgYSBmdW5jdGlvbiBjYWxsIGVuZCBhcyBnZW5lcmF0ZWQgYnkgdGhlIGNvbXBpbGVyLiAgV2Ugd2lsbCBub3cNCisJanVtcCB0byB0aGUgc3RhcnQgb2YgdGhlIHRhc2sgdGhlIGNvbnRleHQgb2Ygd2hpY2ggd2UgaGF2ZSBqdXN0IHJlc3RvcmVkLiAqLwkNCisJX19hc20oIiByZXRpICIpOw0KIA0KLSAgICAvKiBTaG91bGQgbm90IGdldCBoZXJlLiAqLw0KLSAgICByZXR1cm4gcGRGQUlMOw0KKwkvKiBTaG91bGQgbm90IGdldCBoZXJlLiAqLw0KKwlyZXR1cm4gcGRGQUlMOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0RW5kU2NoZWR1bGVyKCB2b2lkICkNCiB7DQotICAgIC8qIE5vdCBpbXBsZW1lbnRlZCAtIHVubGlrZWx5IHRvIGV2ZXIgYmUgcmVxdWlyZWQgYXMgdGhlcmUgaXMgbm90aGluZyB0bw0KLSAgICAgKiByZXR1cm4gdG8uICovDQorCS8qIE5vdCBpbXBsZW1lbnRlZCAtIHVubGlrZWx5IHRvIGV2ZXIgYmUgcmVxdWlyZWQgYXMgdGhlcmUgaXMgbm90aGluZyB0bw0KKwlyZXR1cm4gdG8uICovDQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHN0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKQ0KIHsNCiAvKiBUaGUgcGVyaXBoZXJhbCBjbG9jayBkaXZpZGVkIGJ5IDMyIGlzIHVzZWQgYnkgdGhlIHRpbWVyLiAqLw0KLSAgICBjb25zdCB1aW50MTZfdCB1c1JlbG9hZFZhbHVlID0gKCB1aW50MTZfdCApICggKCAoIGNvbmZpZ1BFUl9DTE9DS19IWiAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApIC8gMzJVTCApIC0gMVVMICk7DQorY29uc3QgdWludDE2X3QgdXNSZWxvYWRWYWx1ZSA9ICggdWludDE2X3QgKSAoICggKCBjb25maWdQRVJfQ0xPQ0tfSFogLyBjb25maWdUSUNLX1JBVEVfSFogKSAvIDMyVUwgKSAtIDFVTCApOw0KIA0KLSAgICAvKiBTZXR1cCBSTFQwIHRvIGdlbmVyYXRlIGEgdGljayBpbnRlcnJ1cHQuICovDQorCS8qIFNldHVwIFJMVDAgdG8gZ2VuZXJhdGUgYSB0aWNrIGludGVycnVwdC4gKi8NCiANCi0gICAgVE1DU1IwX0NOVEUgPSAwOyAgLyogQ291bnQgRGlzYWJsZSAqLw0KLSAgICBUTUNTUjBfQ1NMID0gMHgyOyAvKiBDTEtQLzMyICovDQotICAgIFRNQ1NSMF9NT0QgPSAwOyAgIC8qIFNvZnR3YXJlIHRyaWdnZXIgKi8NCi0gICAgVE1DU1IwX1JFTEQgPSAxOyAgLyogUmVsb2FkICovDQotDQotICAgIFRNQ1NSMF9VRiA9IDA7ICAgIC8qIENsZWFyIHVuZGVyZmxvdyBmbGFnICovDQotICAgIFRNUkxSMCA9IHVzUmVsb2FkVmFsdWU7DQotICAgIFRNQ1NSMF9JTlRFID0gMTsgIC8qIEludGVycnVwdCBFbmFibGUgKi8NCi0gICAgVE1DU1IwX0NOVEUgPSAxOyAgLyogQ291bnQgRW5hYmxlICovDQotICAgIFRNQ1NSMF9UUkcgPSAxOyAgIC8qIFRyaWdnZXIgKi8NCi0NCi0gICAgUE9SVEVOID0gMHgzOyAgICAgLyogUG9ydCBFbmFibGUgKi8NCisJVE1DU1IwX0NOVEUgPSAwOwkJLyogQ291bnQgRGlzYWJsZSAqLw0KKyAgICBUTUNTUjBfQ1NMID0gMHgyOwkJLyogQ0xLUC8zMiAqLw0KKyAgICBUTUNTUjBfTU9EID0gMDsJCQkvKiBTb2Z0d2FyZSB0cmlnZ2VyICovDQorICAgIFRNQ1NSMF9SRUxEID0gMTsJCS8qIFJlbG9hZCAqLw0KKyAgICANCisgICAgVE1DU1IwX1VGID0gMDsJCQkvKiBDbGVhciB1bmRlcmZsb3cgZmxhZyAqLw0KKwlUTVJMUjAgPSB1c1JlbG9hZFZhbHVlOw0KKwlUTUNTUjBfSU5URSA9IDE7CQkvKiBJbnRlcnJ1cHQgRW5hYmxlICovDQorCVRNQ1NSMF9DTlRFID0gMTsJCS8qIENvdW50IEVuYWJsZSAqLw0KKwlUTUNTUjBfVFJHID0gMTsJCQkvKiBUcmlnZ2VyICovDQorCQ0KKyAgICBQT1JURU4gPSAweDM7CQkJLyogUG9ydCBFbmFibGUgKi8NCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogI2lmIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDENCiANCi0vKg0KLSAqIFRpY2sgSVNSIGZvciBwcmVlbXB0aXZlIHNjaGVkdWxlci4gVGhlIHRpY2sgY291bnQgaXMgaW5jcmVtZW50ZWQNCi0gKiBhZnRlciB0aGUgY29udGV4dCBpcyBzYXZlZC4gVGhlbiB0aGUgY29udGV4dCBpcyBzd2l0Y2hlZCBpZiByZXF1aXJlZCwNCi0gKiBhbmQgbGFzdCB0aGUgY29udGV4dCBvZiB0aGUgdGFzayB3aGljaCBpcyB0byBiZSByZXN1bWVkIGlzIHJlc3RvcmVkLg0KLSAqLw0KKwkvKiANCisJICogVGljayBJU1IgZm9yIHByZWVtcHRpdmUgc2NoZWR1bGVyLiBUaGUgdGljayBjb3VudCBpcyBpbmNyZW1lbnRlZCANCisJICogYWZ0ZXIgdGhlIGNvbnRleHQgaXMgc2F2ZWQuIFRoZW4gdGhlIGNvbnRleHQgaXMgc3dpdGNoZWQgaWYgcmVxdWlyZWQsDQorCSAqIGFuZCBsYXN0IHRoZSBjb250ZXh0IG9mIHRoZSB0YXNrIHdoaWNoIGlzIHRvIGJlIHJlc3VtZWQgaXMgcmVzdG9yZWQuDQorCSAqLw0KIA0KLSAgICAjcHJhZ21hIGFzbQ0KKwkjcHJhZ21hIGFzbQ0KIA0KIAkuZ2xvYmFsIF9SZWxvYWRUaW1lcjBfSVJRSGFuZGxlcg0KIAlfUmVsb2FkVGltZXIwX0lSUUhhbmRsZXI6DQpAQCAtMjU2LDI4ICsyNTQsMjggQEAKIA0KIAlSRVRJDQogDQotICAgICNwcmFnbWEgZW5kYXNtDQorCSNwcmFnbWEgZW5kYXNtDQorCQ0KKyNlbHNlDQorCQ0KKwkvKiANCisJICogVGljayBJU1IgZm9yIHRoZSBjb29wZXJhdGl2ZSBzY2hlZHVsZXIuICBBbGwgdGhpcyBkb2VzIGlzIGluY3JlbWVudCB0aGUNCisJICogdGljayBjb3VudC4gIFdlIGRvbid0IG5lZWQgdG8gc3dpdGNoIGNvbnRleHQsIHRoaXMgY2FuIG9ubHkgYmUgZG9uZSBieQ0KKwkgKiBtYW51YWwgY2FsbHMgdG8gdGFza1lJRUxEKCk7DQorCSAqLw0KKwlfX2ludGVycnVwdCB2b2lkIFJlbG9hZFRpbWVyMF9JUlFIYW5kbGVyKCB2b2lkICkNCisJew0KKwkJLyogQ2xlYXIgUkxUMCBpbnRlcnJ1cHQgZmxhZyAqLw0KKwkJVE1DU1IwX1VGID0gMDsgDQorCQl4VGFza0luY3JlbWVudFRpY2soKTsNCisJfQ0KIA0KLSNlbHNlIC8qIGlmIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDEgKi8NCisjZW5kaWYNCiANCiAvKg0KLSAqIFRpY2sgSVNSIGZvciB0aGUgY29vcGVyYXRpdmUgc2NoZWR1bGVyLiAgQWxsIHRoaXMgZG9lcyBpcyBpbmNyZW1lbnQgdGhlDQotICogdGljayBjb3VudC4gIFdlIGRvbid0IG5lZWQgdG8gc3dpdGNoIGNvbnRleHQsIHRoaXMgY2FuIG9ubHkgYmUgZG9uZSBieQ0KLSAqIG1hbnVhbCBjYWxscyB0byB0YXNrWUlFTEQoKTsNCi0gKi8NCi0gICAgX19pbnRlcnJ1cHQgdm9pZCBSZWxvYWRUaW1lcjBfSVJRSGFuZGxlciggdm9pZCApDQotICAgIHsNCi0gICAgICAgIC8qIENsZWFyIFJMVDAgaW50ZXJydXB0IGZsYWcgKi8NCi0gICAgICAgIFRNQ1NSMF9VRiA9IDA7DQotICAgICAgICB4VGFza0luY3JlbWVudFRpY2soKTsNCi0gICAgfQ0KLQ0KLSNlbmRpZiAvKiBpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAxICovDQotDQotLyoNCi0gKiBNYW51YWwgY29udGV4dCBzd2l0Y2guIFdlIGNhbiB1c2UgYSBfX25vc2F2ZXJlZyBhdHRyaWJ1dGUgIGFzIHRoZSBjb250ZXh0DQotICogd291bGQgYmUgc2F2ZWQgYnkgUG9ydFNBVkVfQ09OVEVYVCgpLiAgVGhlIGNvbnRleHQgaXMgc3dpdGNoZWQgYW5kIHRoZW4NCi0gKiB0aGUgY29udGV4dCBvZiB0aGUgbmV3IHRhc2sgaXMgcmVzdG9yZWQgc2F2ZWQuDQorICogTWFudWFsIGNvbnRleHQgc3dpdGNoLiBXZSBjYW4gdXNlIGEgX19ub3NhdmVyZWcgYXR0cmlidXRlICBhcyB0aGUgY29udGV4dCANCisgKiB3b3VsZCBiZSBzYXZlZCBieSBQb3J0U0FWRV9DT05URVhUKCkuICBUaGUgY29udGV4dCBpcyBzd2l0Y2hlZCBhbmQgdGhlbiANCisgKiB0aGUgY29udGV4dCBvZiB0aGUgbmV3IHRhc2sgaXMgcmVzdG9yZWQgc2F2ZWQuIA0KICAqLw0KICNwcmFnbWEgYXNtDQogDQpAQCAtMzAzLDEwICszMDEsMTAgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qDQotICogTWFudWFsIGNvbnRleHQgc3dpdGNoLiBXZSBjYW4gdXNlIGEgX19ub3NhdmVyZWcgYXR0cmlidXRlICBhcyB0aGUgY29udGV4dA0KLSAqIHdvdWxkIGJlIHNhdmVkIGJ5IFBvcnRTQVZFX0NPTlRFWFQoKS4gIFRoZSBjb250ZXh0IGlzIHN3aXRjaGVkIGFuZCB0aGVuDQotICogdGhlIGNvbnRleHQgb2YgdGhlIG5ldyB0YXNrIGlzIHJlc3RvcmVkIHNhdmVkLg0KLSAqLw0KKyAqIE1hbnVhbCBjb250ZXh0IHN3aXRjaC4gV2UgY2FuIHVzZSBhIF9fbm9zYXZlcmVnIGF0dHJpYnV0ZSAgYXMgdGhlIGNvbnRleHQgDQorICogd291bGQgYmUgc2F2ZWQgYnkgUG9ydFNBVkVfQ09OVEVYVCgpLiAgVGhlIGNvbnRleHQgaXMgc3dpdGNoZWQgYW5kIHRoZW4gDQorICogdGhlIGNvbnRleHQgb2YgdGhlIG5ldyB0YXNrIGlzIHJlc3RvcmVkIHNhdmVkLiANCisgKi8gCSANCiAjcHJhZ21hIGFzbQ0KIA0KIAkuZ2xvYmFsIF92UG9ydFlpZWxkDQpAQCAtMzE1LDggKzMxMyw5IEBACiAJU2F2ZUNvbnRleHQJCQkJCQkJCTtTYXZlIGNvbnRleHQNCiAJQ0FMTDMyCSBfdlRhc2tTd2l0Y2hDb250ZXh0LFIxMgkJO1N3aXRjaCBjb250ZXh0IGlmIHJlcXVpcmVkDQogCVJlc3RvcmVDb250ZXh0CQkJCQkJCTtSZXN0b3JlIGNvbnRleHQNCi0NCisJDQogCVJFVEkNCiANCiAjcHJhZ21hIGVuZGFzbQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL1NvZnR1bmUvTUI5MTQ2MC9wb3J0bWFjcm8uaCBiL3BvcnRhYmxlL1NvZnR1bmUvTUI5MTQ2MC9wb3J0bWFjcm8uaAppbmRleCAzYzM2ZjIyLi5kNmVmMjY1IDEwMDY0NAotLS0gYS9wb3J0YWJsZS9Tb2Z0dW5lL01COTE0NjAvcG9ydG1hY3JvLmgKKysrIGIvcG9ydGFibGUvU29mdHVuZS9NQjkxNDYwL3BvcnRtYWNyby5oCkBAIC00NSw2NCArNDUsNjUgQEAKICAqLw0KIA0KIC8qIFR5cGUgZGVmaW5pdGlvbnMuICovDQotI2RlZmluZSBwb3J0Q0hBUiAgICAgICAgICBjaGFyDQotI2RlZmluZSBwb3J0RkxPQVQgICAgICAgICBmbG9hdA0KLSNkZWZpbmUgcG9ydERPVUJMRSAgICAgICAgZG91YmxlDQotI2RlZmluZSBwb3J0TE9ORyAgICAgICAgICBsb25nDQotI2RlZmluZSBwb3J0U0hPUlQgICAgICAgICBzaG9ydA0KLSNkZWZpbmUgcG9ydFNUQUNLX1RZUEUgICAgdWludDMyX3QNCi0jZGVmaW5lIHBvcnRCQVNFX1RZUEUgICAgIGxvbmcNCisjZGVmaW5lIHBvcnRDSEFSCQljaGFyDQorI2RlZmluZSBwb3J0RkxPQVQJCWZsb2F0DQorI2RlZmluZSBwb3J0RE9VQkxFCQlkb3VibGUNCisjZGVmaW5lIHBvcnRMT05HCQlsb25nDQorI2RlZmluZSBwb3J0U0hPUlQJCXNob3J0DQorI2RlZmluZSBwb3J0U1RBQ0tfVFlQRQl1aW50MzJfdA0KKyNkZWZpbmUgcG9ydEJBU0VfVFlQRQlsb25nDQogDQotdHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSAgIFN0YWNrVHlwZV90Ow0KLXR5cGVkZWYgbG9uZyAgICAgICAgICAgICBCYXNlVHlwZV90Ow0KLXR5cGVkZWYgdW5zaWduZWQgbG9uZyAgICBVQmFzZVR5cGVfdDsNCit0eXBlZGVmIHBvcnRTVEFDS19UWVBFIFN0YWNrVHlwZV90Ow0KK3R5cGVkZWYgbG9uZyBCYXNlVHlwZV90Ow0KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBVQmFzZVR5cGVfdDsNCiANCiANCi0jaWYgKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KLSAgICB0eXBlZGVmIHVpbnQxNl90ICAgICBUaWNrVHlwZV90Ow0KLSAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQorI2lmKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KKwl0eXBlZGVmIHVpbnQxNl90IFRpY2tUeXBlX3Q7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIFRpY2tUeXBlX3QgKSAweGZmZmYNCiAjZWxzZQ0KLSAgICB0eXBlZGVmIHVpbnQzMl90ICAgICBUaWNrVHlwZV90Ow0KLSAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQorCXR5cGVkZWYgdWludDMyX3QgVGlja1R5cGVfdDsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTA0KICNlbmRpZg0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIENyaXRpY2FsIHNlY3Rpb24gbWFuYWdlbWVudC4gKi8NCiAjaWYgY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWSAhPSAzMA0KLSAgICAjZXJyb3IgY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWSAoc2V0IGluIEZyZWVSVE9TQ29uZmlnLmgpIG11c3QgbWF0Y2ggdGhlIElMTSB2YWx1ZSBzZXQgaW4gdGhlIGZvbGxvd2luZyBsaW5lIC0gMzAgKDFFaCkgYmVpbmcgdGhlIGRlZmF1bHQuDQorCSNlcnJvciBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZIChzZXQgaW4gRnJlZVJUT1NDb25maWcuaCkgbXVzdCBtYXRjaCB0aGUgSUxNIHZhbHVlIHNldCBpbiB0aGUgZm9sbG93aW5nIGxpbmUgLSAzMCAoMUVoKSBiZWluZyB0aGUgZGVmYXVsdC4NCiAjZW5kaWYNCi0jZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAgICBfX2FzbSggIiBTVElMTSAjMUVoICIgKQ0KLSNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkgICAgIF9fYXNtKCAiIFNUSUxNICMxRmggIiApDQorI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgX19hc20oIiBTVElMTSAjMUVoICIpDQorI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKSBfX2FzbSgiIFNUSUxNICMxRmggIikNCiANCi0jZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpICAgXA0KLSAgICBfX2FzbSggIiBTVCBQUyxALVIxNSAiICk7ICBcDQotICAgIF9fYXNtKCAiIEFORENDUiAjMHhlZiAiICk7IFwNCisjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpCVwNCisJX19hc20oIiBTVCBQUyxALVIxNSAiKTsJCVwNCisJX19hc20oIiBBTkRDQ1IgIzB4ZWYgIik7CVwNCiANCiANCi0jZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkgICBcDQotICAgIF9fYXNtKCAiIExEIEBSMTUrLFBTICIgKTsgXA0KKyNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKQkJXA0KKwlfX2FzbSgiIExEIEBSMTUrLFBTICIpOwkJXA0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIEFyY2hpdGVjdHVyZSBzcGVjaWZpY3MuICovDQotI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RIICAgICAgKCAtMSApDQotI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMgICAgKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCi0jZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVCAgICA0DQotI2RlZmluZSBwb3J0Tk9QKCkgICAgX19hc20oICIgbm9wICIgKTsNCisjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEgJCQkoIC0xICkNCisjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUwkJCSggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQorI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQJCQk0DQorI2RlZmluZSBwb3J0Tk9QKCkJCQkJCV9fYXNtKCAiIG5vcCAiICk7DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogcG9ydFlJRUxEKCkgdXNlcyBhIFNXIGludGVycnVwdCAqLw0KLSNkZWZpbmUgcG9ydFlJRUxEKCkgICAgICAgICAgICAgX19hc20oICIgSU5UICM0MEggIiApOw0KKyNkZWZpbmUgcG9ydFlJRUxEKCkJCQkJCV9fYXNtKCAiIElOVCAjNDBIICIgKTsNCiANCiAvKiBwb3J0WUlFTERfRlJPTV9JU1IoKSB1c2VzIGRlbGF5ZWQgaW50ZXJydXB0ICovDQotI2RlZmluZSBwb3J0WUlFTERfRlJPTV9JU1IoKSAgICBESUNSX0RMWUkgPSAxDQorI2RlZmluZSBwb3J0WUlFTERfRlJPTV9JU1IoKQkJCURJQ1JfRExZSSA9IDENCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBUYXNrIGZ1bmN0aW9uIG1hY3JvcyBhcyBkZXNjcmliZWQgb24gdGhlIEZyZWVSVE9TLm9yZyBXRUIgc2l0ZS4gKi8NCi0jZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCi0jZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgICAgICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQogDQotI2RlZmluZSBwb3J0TUlOSU1BTF9TVEFDS19TSVpFICAgIGNvbmZpZ01JTklNQUxfU1RBQ0tfU0laRQ0KKyNkZWZpbmUgcG9ydE1JTklNQUxfU1RBQ0tfU0laRSBjb25maWdNSU5JTUFMX1NUQUNLX1NJWkUNCiANCiANCiAjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8NCisNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9Tb2Z0dW5lL01COTYzNDAvX19TVERfTElCX3NicmsuYyBiL3BvcnRhYmxlL1NvZnR1bmUvTUI5NjM0MC9fX1NURF9MSUJfc2Jyay5jCmluZGV4IDA5MDYzMTkuLmE1MjBhZmYgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL1NvZnR1bmUvTUI5NjM0MC9fX1NURF9MSUJfc2Jyay5jCisrKyBiL3BvcnRhYmxlL1NvZnR1bmUvTUI5NjM0MC9fX1NURF9MSUJfc2Jyay5jCkBAIC0yLDI5ICsyLDI3IEBACiAvKiBNSUNST0VMRUNUUk9OSUNTIEFDQ0VQVFMgTk8gUkVTUE9OU0lCSUxJVFkgT1IgTElBQklMSVRZIEZPUiBBTlkgRVJST1JTIE9SICovDQogLyogRUxJR0lCSUxJVFkgRk9SIEFOWSBQVVJQT1NFUy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KIC8qICAgICAgICAgICAgICAgICAoQykgRnVqaXRzdSBNaWNyb2VsZWN0cm9uaWNzIEV1cm9wZSBHbWJIICAgICAgICAgICAgICAgICAgKi8NCi0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLSAqIF9fU1REX0xJQl9zYnJrLkMNCi0gKiAtIFVzZWQgYnkgaGVhcF8zLmMgZm9yIG1lbW9yeSBhY2NvY2F0aW9uIGFuZCBkZWxldGlvbi4NCi0gKg0KLSAqIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisgIF9fU1REX0xJQl9zYnJrLkMNCisgIC0gVXNlZCBieSBoZWFwXzMuYyBmb3IgbWVtb3J5IGFjY29jYXRpb24gYW5kIGRlbGV0aW9uLg0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAjaW5jbHVkZSAiRnJlZVJUT1NDb25maWcuaCINCiAjaW5jbHVkZSA8c3RkbGliLmg+DQogDQotc3RhdGljIGxvbmcgYnJrX3NpeiA9IDA7DQotdHlwZWRlZiBpbnQgX2hlZXBfdDsNCi0jZGVmaW5lIFJPVU5EVVAoIHMgKSAgICAoICggKCBzICkgKyBzaXplb2YoIF9oZWVwX3QgKSAtIDEgKSAmIH4oIHNpemVvZiggX2hlZXBfdCApIC0gMSApICkNCi1zdGF0aWMgX2hlZXBfdCBfaGVlcFsgUk9VTkRVUCggY29uZmlnVE9UQUxfSEVBUF9TSVpFICkgLyBzaXplb2YoIF9oZWVwX3QgKSBdOw0KLSNkZWZpbmUgICAgICAgICAgICAgIF9oZWVwX3NpemUgICAgUk9VTkRVUCggY29uZmlnVE9UQUxfSEVBUF9TSVpFICkNCisJc3RhdGljICBsb25nICAgICAgICAgYnJrX3NpeiAgPSAgMDsNCisJdHlwZWRlZiBpbnQgICAgICAgICAgX2hlZXBfdDsNCisJI2RlZmluZSBST1VORFVQKHMpICAgKCgocykrc2l6ZW9mKF9oZWVwX3QpLTEpJn4oc2l6ZW9mKF9oZWVwX3QpLTEpKQ0KKwlzdGF0aWMgIF9oZWVwX3QgICAgICBfaGVlcFtST1VORFVQKGNvbmZpZ1RPVEFMX0hFQVBfU0laRSkvc2l6ZW9mKF9oZWVwX3QpXTsNCisJI2RlZmluZSAgICAgICAgICAgICAgX2hlZXBfc2l6ZSAgICAgIFJPVU5EVVAoY29uZmlnVE9UQUxfSEVBUF9TSVpFKQ0KIA0KLWV4dGVybiBjaGFyICogc2JyayggaW50IHNpemUgKQ0KLXsNCi0gICAgaWYoICggYnJrX3NpeiArIHNpemUgPiBfaGVlcF9zaXplICkgfHwgKCBicmtfc2l6ICsgc2l6ZSA8IDAgKSApDQotICAgIHsNCi0gICAgICAgIHJldHVybiggKCBjaGFyICogKSAtMSApOw0KLSAgICB9DQorCWV4dGVybiAgY2hhciAgKnNicmsoaW50ICBzaXplKQ0KKwl7DQorCSAgIGlmICAoYnJrX3NpeiAgKyAgc2l6ZSAgPiAgX2hlZXBfc2l6ZSAgfHwgIGJya19zaXogICsgIHNpemUgIDwgIDApDQogDQotICAgIGJya19zaXogKz0gc2l6ZTsNCi0gICAgcmV0dXJuKCAoIGNoYXIgKiApIF9oZWVwICsgYnJrX3NpeiAtIHNpemUgKTsNCi19DQorICAgICAgICAgIHJldHVybigoY2hhciopLTEpOw0KKwkgICBicmtfc2l6ICArPSAgc2l6ZTsNCisJICAgcmV0dXJuKCAgKGNoYXIqKV9oZWVwICArICBicmtfc2l6ICAtICBzaXplKTsNCisJfQ0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL1NvZnR1bmUvTUI5NjM0MC9wb3J0LmMgYi9wb3J0YWJsZS9Tb2Z0dW5lL01COTYzNDAvcG9ydC5jCmluZGV4IGRlYTMwYmQuLmY3Y2YyYzggMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL1NvZnR1bmUvTUI5NjM0MC9wb3J0LmMKKysrIGIvcG9ydGFibGUvU29mdHVuZS9NQjk2MzQwL3BvcnQuYwpAQCAtMjksMTYgKzI5LDE2IEBACiAjaW5jbHVkZSAidGFzay5oIg0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0qIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSAxNkZYIHBvcnQuDQotKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyAqIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSAxNkZYIHBvcnQuDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0vKg0KLSAqIEdldCBjdXJyZW50IHZhbHVlIG9mIERQUiBhbmQgQURCIHJlZ2lzdGVycw0KKy8qIA0KKyAqIEdldCBjdXJyZW50IHZhbHVlIG9mIERQUiBhbmQgQURCIHJlZ2lzdGVycyANCiAgKi8NCi1TdGFja1R5cGVfdCB4R2V0X0RQUl9BREJfYmFuayggdm9pZCApOw0KK1N0YWNrVHlwZV90IHhHZXRfRFBSX0FEQl9iYW5rKCB2b2lkICk7IA0KIA0KLS8qDQotICogR2V0IGN1cnJlbnQgdmFsdWUgb2YgRFRCIGFuZCBQQ0IgcmVnaXN0ZXJzDQorLyogDQorICogR2V0IGN1cnJlbnQgdmFsdWUgb2YgRFRCIGFuZCBQQ0IgcmVnaXN0ZXJzIA0KICAqLw0KIFN0YWNrVHlwZV90IHhHZXRfRFRCX1BDQl9iYW5rKCB2b2lkICk7DQogDQpAQCAtNTAsMTc2ICs1MCwxNzYgQEAKIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KLS8qDQorLyogDQogICogV2UgcmVxdWlyZSB0aGUgYWRkcmVzcyBvZiB0aGUgcHhDdXJyZW50VENCIHZhcmlhYmxlLCBidXQgZG9uJ3Qgd2FudCB0byBrbm93DQotICogYW55IGRldGFpbHMgb2YgaXRzIHR5cGUuDQorICogYW55IGRldGFpbHMgb2YgaXRzIHR5cGUuIA0KICAqLw0KIHR5cGVkZWYgdm9pZCBUQ0JfdDsNCiBleHRlcm4gdm9sYXRpbGUgVENCX3QgKiB2b2xhdGlsZSBweEN1cnJlbnRUQ0I7DQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQotLyoNCi0gKiBNYWNybyB0byBzYXZlIGEgdGFzayBjb250ZXh0IHRvIHRoZSB0YXNrIHN0YWNrLiBUaGlzIG1hY3JvICBjb3BpZXMgdGhlDQotICogc2F2ZWQgY29udGV4dCAoQUg6QUwsIERQUjpBREIsIERUQjpQQ0IgLCBQQyBhbmQgUFMpIGZyb20gIHRoZSAgIHN5c3RlbQ0KLSAqIHN0YWNrIHRvIHRhc2sgc3RhY2sgcG9pbnRlZCBieSB1c2VyIHN0YWNrIHBvaW50ZXIgKCBVU1AgIGZvciBTTUFMTCBhbmQNCisvKiANCisgKiBNYWNybyB0byBzYXZlIGEgdGFzayBjb250ZXh0IHRvIHRoZSB0YXNrIHN0YWNrLiBUaGlzIG1hY3JvICBjb3BpZXMgdGhlIA0KKyAqIHNhdmVkIGNvbnRleHQgKEFIOkFMLCBEUFI6QURCLCBEVEI6UENCICwgUEMgYW5kIFBTKSBmcm9tICB0aGUgICBzeXN0ZW0gDQorICogc3RhY2sgdG8gdGFzayBzdGFjayBwb2ludGVkIGJ5IHVzZXIgc3RhY2sgcG9pbnRlciAoIFVTUCAgZm9yIFNNQUxMIGFuZCANCiAgKiBNRURJVU0gbWVtb3J5IG1vZGVsIGFtZCBVU0I6VVNQIGZvciBDT01QQUNUICBhbmQgTEFSR0UgbWVtb3J5IG1vZGVsICksDQotICogdGhlbiAgaXQgcHVzaGVzIHRoZSBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzIFJXMC1SVzcgIG9uICB0byB0aGUgdGFzaw0KLSAqIHN0YWNrLiBGaW5hbGx5IHRoZSAgcmVzdWx0YW50ICBzdGFjayAgcG9pbnRlciAgdmFsdWUgaXMgc2F2ZWQgaW50byB0aGUNCi0gKiB0YXNrICBjb250cm9sICBibG9jayAgc28gIGl0ICBjYW4gIGJlIHJldHJpZXZlZCB0aGUgbmV4dCB0aW1lIHRoZSB0YXNrDQorICogdGhlbiAgaXQgcHVzaGVzIHRoZSBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzIFJXMC1SVzcgIG9uICB0byB0aGUgdGFzayANCisgKiBzdGFjay4gRmluYWxseSB0aGUgIHJlc3VsdGFudCAgc3RhY2sgIHBvaW50ZXIgIHZhbHVlIGlzIHNhdmVkIGludG8gdGhlIA0KKyAqIHRhc2sgIGNvbnRyb2wgIGJsb2NrICBzbyAgaXQgIGNhbiAgYmUgcmV0cmlldmVkIHRoZSBuZXh0IHRpbWUgdGhlIHRhc2sgDQogICogZXhlY3V0ZXMuDQotICovDQotI2lmICggKCBjb25maWdNRU1NT0RFTCA9PSBwb3J0U01BTEwgKSB8fCAoIGNvbmZpZ01FTU1PREVMID09IHBvcnRNRURJVU0gKSApDQorICovIA0KKyNpZiggKCBjb25maWdNRU1NT0RFTCA9PSBwb3J0U01BTEwgKSB8fCAoIGNvbmZpZ01FTU1PREVMID09IHBvcnRNRURJVU0gKSApDQogDQotICAgICNkZWZpbmUgcG9ydFNBVkVfQ09OVEVYVCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB7IF9fYXNtKCAiIFBPUFcgIEEgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICBfX2FzbSggIiBBTkQgIENDUiwjSCdERiAiICk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgUFVTSFcgIEEgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgIF9fYXNtKCAiIE9SICAgQ0NSLCNIJzIwICIgKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICBfX2FzbSggIiBQT1BXICBBICIgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgQU5EICBDQ1IsI0gnREYgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgIF9fYXNtKCAiIFBVU0hXICBBICIgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICBfX2FzbSggIiBPUiAgIENDUiwjSCcyMCAiICk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgUE9QVyAgQSAiICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgIF9fYXNtKCAiIEFORCAgQ0NSLCNIJ0RGICIgKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICBfX2FzbSggIiBQVVNIVyAgQSAiICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgT1IgICBDQ1IsI0gnMjAgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgIF9fYXNtKCAiIFBPUFcgIEEgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICBfX2FzbSggIiBBTkQgIENDUiwjSCdERiAiICk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgUFVTSFcgIEEgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgIF9fYXNtKCAiIE9SICAgQ0NSLCNIJzIwICIgKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICBfX2FzbSggIiBQT1BXICBBICIgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgQU5EICBDQ1IsI0gnREYgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgIF9fYXNtKCAiIFBVU0hXICBBICIgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICBfX2FzbSggIiBPUiAgIENDUiwjSCcyMCAiICk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgUE9QVyAgQSAiICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgIF9fYXNtKCAiIEFORCAgQ0NSLCNIJ0RGICIgKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICBfX2FzbSggIiBQVVNIVyAgQSAiICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgUFVTSFcgKFJXMCxSVzEsUlcyLFJXMyxSVzQsUlc1LFJXNixSVzcpICIgKTsgXA0KLSAgICAgIF9fYXNtKCAiIE1PVlcgQSwgX3B4Q3VycmVudFRDQiAiICk7ICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICBfX2FzbSggIiBNT1ZXIEEsIFNQICIgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgU1dBUFcgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgIF9fYXNtKCAiIE1PVlcgQEFMLCBBSCAiICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICBfX2FzbSggIiBPUiAgIENDUiwjSCcyMCAiICk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIH0NCisJI2RlZmluZSBwb3J0U0FWRV9DT05URVhUKCkJCQkJCQkJCQkJCVwNCisJCQl7CV9fYXNtKCIgUE9QVyAgQSAiKTsJCQkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIEFORCAgQ0NSLCNIJ0RGICIpOyAgCQkJCQkJCVwNCisJCQkJX19hc20oIiBQVVNIVyAgQSAiKTsJCQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgT1IgICBDQ1IsI0gnMjAgIik7CQkJCQkJCQlcDQorCSAgICAJCV9fYXNtKCIgUE9QVyAgQSAiKTsJCQkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIEFORCAgQ0NSLCNIJ0RGICIpOyAgCQkJCQkJCVwNCisJCQkJX19hc20oIiBQVVNIVyAgQSAiKTsJCQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgT1IgICBDQ1IsI0gnMjAgIik7CQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgUE9QVyAgQSAiKTsJCQkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIEFORCAgQ0NSLCNIJ0RGICIpOyAgCQkJCQkJCVwNCisJCQkJX19hc20oIiBQVVNIVyAgQSAiKTsJCQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgT1IgICBDQ1IsI0gnMjAgIik7CQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgUE9QVyAgQSAiKTsJCQkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIEFORCAgQ0NSLCNIJ0RGICIpOyAgCQkJCQkJCVwNCisJCQkJX19hc20oIiBQVVNIVyAgQSAiKTsJCQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgT1IgICBDQ1IsI0gnMjAgIik7CQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgUE9QVyAgQSAiKTsJCQkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIEFORCAgQ0NSLCNIJ0RGICIpOyAgCQkJCQkJCVwNCisJCQkJX19hc20oIiBQVVNIVyAgQSAiKTsJCQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgT1IgICBDQ1IsI0gnMjAgIik7CQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgUE9QVyAgQSAiKTsJCQkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIEFORCAgQ0NSLCNIJ0RGICIpOyAgCQkJCQkJCVwNCisJCQkJX19hc20oIiBQVVNIVyAgQSAiKTsJCQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgUFVTSFcgKFJXMCxSVzEsUlcyLFJXMyxSVzQsUlc1LFJXNixSVzcpICIpOwkJXA0KKwkJCQlfX2FzbSgiIE1PVlcgQSwgX3B4Q3VycmVudFRDQiAiKTsJCQkJCQlcDQorCQkJCV9fYXNtKCIgTU9WVyBBLCBTUCAiKTsJCQkJCQkJCQlcDQorICAJCQkJX19hc20oIiBTV0FQVyAiKTsJCQkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIE1PVlcgQEFMLCBBSCAiKTsJCQkJCQkJCVwNCisJCQkJX19hc20oIiBPUiAgIENDUiwjSCcyMCAiKTsJCQkJCQkJCVwNCisJCQl9DQogDQotLyoNCisvKiANCiAgKiBNYWNybyB0byByZXN0b3JlIGEgdGFzayBjb250ZXh0IGZyb20gdGhlIHRhc2sgc3RhY2suICBUaGlzIGlzIGVmZmVjdGktDQogICogdmVseSB0aGUgcmV2ZXJzZSBvZiBTQVZFX0NPTlRFWFQoKS4gRmlyc3QgdGhlIHN0YWNrIHBvaW50ZXIgIHZhbHVlDQotICogKFVTUCBmb3IgU01BTEwgYW5kIE1FRElVTSBtZW1vcnkgbW9kZWwgYW1kICBVU0I6VVNQICBmb3IgIENPTVBBQ1QgIGFuZA0KLSAqIExBUkdFIG1lbW9yeSBtb2RlbCApIGlzIGxvYWRlZCBmcm9tIHRoZSB0YXNrICBjb250cm9sIGJsb2NrLiAgTmV4dCB0aGUNCisgKiAoVVNQIGZvciBTTUFMTCBhbmQgTUVESVVNIG1lbW9yeSBtb2RlbCBhbWQgIFVTQjpVU1AgIGZvciAgQ09NUEFDVCAgYW5kIA0KKyAqIExBUkdFIG1lbW9yeSBtb2RlbCApIGlzIGxvYWRlZCBmcm9tIHRoZSB0YXNrICBjb250cm9sIGJsb2NrLiAgTmV4dCB0aGUgDQogICogdmFsdWUgb2YgYWxsIHRoZSBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzIFJXMC1SVzcgaXMgcmV0cmlldmVkLiBGaW5hLQ0KLSAqIGxseSBpdCBjb3BpZXMgb2YgdGhlIGNvbnRleHQgKCBBSDpBTCwgIERQUjpBREIsIERUQjpQQ0IsIFBDIGFuZCBQUykgb2YNCi0gKiB0aGUgdGFzayB0byBiZSBleGVjdXRlZCB1cG9uIFJFVEkgZnJvbSB1c2VyIHN0YWNrIHRvIHN5c3RlbSBzdGFjay4NCisgKiBsbHkgaXQgY29waWVzIG9mIHRoZSBjb250ZXh0ICggQUg6QUwsICBEUFI6QURCLCBEVEI6UENCLCBQQyBhbmQgUFMpIG9mIA0KKyAqIHRoZSB0YXNrIHRvIGJlIGV4ZWN1dGVkIHVwb24gUkVUSSBmcm9tIHVzZXIgc3RhY2sgdG8gc3lzdGVtIHN0YWNrLiAgDQogICovDQorIA0KKwkjZGVmaW5lIHBvcnRSRVNUT1JFX0NPTlRFWFQoKQkJCQkJCQkJCQlcDQorCQkJewlfX2FzbSgiIE1PVlcgQSwgX3B4Q3VycmVudFRDQiAiKTsJCQkJCQlcDQorCQkJCV9fYXNtKCIgTU9WVyBBLCBAQSAiKTsJCQkJCQkJCQlcDQorICAJCQkJX19hc20oIiBBTkQgIENDUiwjSCdERiAiKTsgIAkJCQkJCQlcDQorICAJCQkJX19hc20oIiBNT1ZXIFNQLCBBICIpOwkJCQkJCQkJCVwNCisJCQkJX19hc20oIiBQT1BXIChSVzAsUlcxLFJXMixSVzMsUlc0LFJXNSxSVzYsUlc3KSAiKTsJCVwNCisJCQkJX19hc20oIiBQT1BXICBBICIpOwkJCQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgT1IgICBDQ1IsI0gnMjAgIik7CQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgUFVTSFcgIEEgIik7CQkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIEFORCAgQ0NSLCNIJ0RGICIpOyAgCQkJCQkJCVwNCisJCQkJX19hc20oIiBQT1BXICBBICIpOwkJCQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgT1IgICBDQ1IsI0gnMjAgIik7CQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgUFVTSFcgIEEgIik7CQkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIEFORCAgQ0NSLCNIJ0RGICIpOyAgCQkJCQkJCVwNCisJCQkJX19hc20oIiBQT1BXICBBICIpOwkJCQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgT1IgICBDQ1IsI0gnMjAgIik7CQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgUFVTSFcgIEEgIik7CQkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIEFORCAgQ0NSLCNIJ0RGICIpOyAgCQkJCQkJCVwNCisJCQkJX19hc20oIiBQT1BXICBBICIpOwkJCQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgT1IgICBDQ1IsI0gnMjAgIik7CQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgUFVTSFcgIEEgIik7CQkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIEFORCAgQ0NSLCNIJ0RGICIpOyAgCQkJCQkJCVwNCisJCQkJX19hc20oIiBQT1BXICBBICIpOwkJCQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgT1IgICBDQ1IsI0gnMjAgIik7CQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgUFVTSFcgIEEgIik7CQkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIEFORCAgQ0NSLCNIJ0RGICIpOyAgCQkJCQkJCVwNCisJCQkJX19hc20oIiBQT1BXICBBICIpOwkJCQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgT1IgICBDQ1IsI0gnMjAgIik7CQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgUFVTSFcgIEEgIik7CQkJCQkJCQkJXA0KKwkJCX0NCisJCQ0KKyNlbGlmKCAoIGNvbmZpZ01FTU1PREVMID09IHBvcnRDT01QQUNUICkgfHwgKCBjb25maWdNRU1NT0RFTCA9PSBwb3J0TEFSR0UgKSApDQogDQotICAgICNkZWZpbmUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIHsgX19hc20oICIgTU9WVyBBLCBfcHhDdXJyZW50VENCICIgKTsgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgTU9WVyBBLCBAQSAiICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgQU5EICBDQ1IsI0gnREYgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgTU9WVyBTUCwgQSAiICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgUE9QVyAoUlcwLFJXMSxSVzIsUlczLFJXNCxSVzUsUlc2LFJXNykgIiApOyBcDQotICAgICAgX19hc20oICIgUE9QVyAgQSAiICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgT1IgICBDQ1IsI0gnMjAgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgUFVTSFcgIEEgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgQU5EICBDQ1IsI0gnREYgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgUE9QVyAgQSAiICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgT1IgICBDQ1IsI0gnMjAgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgUFVTSFcgIEEgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgQU5EICBDQ1IsI0gnREYgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgUE9QVyAgQSAiICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgT1IgICBDQ1IsI0gnMjAgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgUFVTSFcgIEEgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgQU5EICBDQ1IsI0gnREYgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgUE9QVyAgQSAiICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgT1IgICBDQ1IsI0gnMjAgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgUFVTSFcgIEEgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgQU5EICBDQ1IsI0gnREYgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgUE9QVyAgQSAiICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgT1IgICBDQ1IsI0gnMjAgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgUFVTSFcgIEEgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgQU5EICBDQ1IsI0gnREYgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgUE9QVyAgQSAiICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgT1IgICBDQ1IsI0gnMjAgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgUFVTSFcgIEEgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIH0NCisJI2RlZmluZSBwb3J0U0FWRV9DT05URVhUKCkJCQkJCQkJCQkJCVwNCisJCQl7CV9fYXNtKCIgUE9QVyAgQSAiKTsJCQkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIEFORCAgQ0NSLCNIJ0RGICIpOyAgCQkJCQkJCVwNCisJCQkJX19hc20oIiBQVVNIVyAgQSAiKTsJCQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgT1IgICBDQ1IsI0gnMjAgIik7CQkJCQkJCQlcDQorCSAgICAJCV9fYXNtKCIgUE9QVyAgQSAiKTsJCQkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIEFORCAgQ0NSLCNIJ0RGICIpOyAgCQkJCQkJCVwNCisJCQkJX19hc20oIiBQVVNIVyAgQSAiKTsJCQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgT1IgICBDQ1IsI0gnMjAgIik7CQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgUE9QVyAgQSAiKTsJCQkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIEFORCAgQ0NSLCNIJ0RGICIpOyAgCQkJCQkJCVwNCisJCQkJX19hc20oIiBQVVNIVyAgQSAiKTsJCQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgT1IgICBDQ1IsI0gnMjAgIik7CQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgUE9QVyAgQSAiKTsJCQkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIEFORCAgQ0NSLCNIJ0RGICIpOyAgCQkJCQkJCVwNCisJCQkJX19hc20oIiBQVVNIVyAgQSAiKTsJCQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgT1IgICBDQ1IsI0gnMjAgIik7CQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgUE9QVyAgQSAiKTsJCQkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIEFORCAgQ0NSLCNIJ0RGICIpOyAgCQkJCQkJCVwNCisJCQkJX19hc20oIiBQVVNIVyAgQSAiKTsJCQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgT1IgICBDQ1IsI0gnMjAgIik7CQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgUE9QVyAgQSAiKTsJCQkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIEFORCAgQ0NSLCNIJ0RGICIpOyAgCQkJCQkJCVwNCisJCQkJX19hc20oIiBQVVNIVyAgQSAiKTsJCQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgUFVTSFcgKFJXMCxSVzEsUlcyLFJXMyxSVzQsUlc1LFJXNixSVzcpICIpOwkJXA0KKwkJCQlfX2FzbSgiIE1PVkwgQSwgX3B4Q3VycmVudFRDQiAiKTsJCQkJCQlcDQorCQkJCV9fYXNtKCIgTU9WTCBSTDIsIEEgIik7CQkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIE1PVlcgQSwgU1AgIik7CQkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIE1PVlcgQFJMMiswLCBBICIpOwkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIE1PViBBLCBVU0IgIik7CQkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIE1PViBAUkwyKzIsIEEgIik7CQkJCQkJCQlcDQorCQkJfQkNCisgICAgICAgICAgICANCisJI2RlZmluZSBwb3J0UkVTVE9SRV9DT05URVhUKCkJCQkJCQkJCQkJXA0KKwkJCXsJX19hc20oIiBNT1ZMIEEsIF9weEN1cnJlbnRUQ0IgIik7CQkJCQkJXA0KKwkJCQlfX2FzbSgiIE1PVkwgUkwyLCBBICIpOwkJCQkJCQkJCVwNCisJCQkJX19hc20oIiBNT1ZXIEEsIEBSTDIrMCAiKTsJCQkJCQkJCVwNCisJCQkJX19hc20oIiBBTkQgIENDUiwjSCdERiAiKTsgIAkJCQkJCQlcDQorCQkJCV9fYXNtKCIgTU9WVyBTUCwgQSAiKTsJCQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgTU9WIEEsIEBSTDIrMiAiKTsJCQkJCQkJCVwNCisJCQkJX19hc20oIiBNT1YgVVNCLCBBICIpOwkJCQkJCQkJCVwNCisJCQkJX19hc20oIiBQT1BXIChSVzAsUlcxLFJXMixSVzMsUlc0LFJXNSxSVzYsUlc3KSAiKTsJCVwNCisJCQkJX19hc20oIiBQT1BXICBBICIpOwkJCQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgT1IgICBDQ1IsI0gnMjAgIik7CQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgUFVTSFcgIEEgIik7CQkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIEFORCAgQ0NSLCNIJ0RGICIpOyAgCQkJCQkJCVwNCisJCQkJX19hc20oIiBQT1BXICBBICIpOwkJCQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgT1IgICBDQ1IsI0gnMjAgIik7CQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgUFVTSFcgIEEgIik7CQkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIEFORCAgQ0NSLCNIJ0RGICIpOyAgCQkJCQkJCVwNCisJCQkJX19hc20oIiBQT1BXICBBICIpOwkJCQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgT1IgICBDQ1IsI0gnMjAgIik7CQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgUFVTSFcgIEEgIik7CQkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIEFORCAgQ0NSLCNIJ0RGICIpOyAgCQkJCQkJCVwNCisJCQkJX19hc20oIiBQT1BXICBBICIpOwkJCQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgT1IgICBDQ1IsI0gnMjAgIik7CQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgUFVTSFcgIEEgIik7CQkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIEFORCAgQ0NSLCNIJ0RGICIpOyAgCQkJCQkJCVwNCisJCQkJX19hc20oIiBQT1BXICBBICIpOwkJCQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgT1IgICBDQ1IsI0gnMjAgIik7CQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgUFVTSFcgIEEgIik7CQkJCQkJCQkJXA0KKwkJCQlfX2FzbSgiIEFORCAgQ0NSLCNIJ0RGICIpOyAgCQkJCQkJCVwNCisJCQkJX19hc20oIiBQT1BXICBBICIpOwkJCQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgT1IgICBDQ1IsI0gnMjAgIik7CQkJCQkJCQlcDQorCQkJCV9fYXNtKCIgUFVTSFcgIEEgIik7CQkJCQkJCQkJXA0KKwkJCX0NCisjZW5kaWYNCiANCi0jZWxpZiAoICggY29uZmlnTUVNTU9ERUwgPT0gcG9ydENPTVBBQ1QgKSB8fCAoIGNvbmZpZ01FTU1PREVMID09IHBvcnRMQVJHRSApICkNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8JDQogDQotICAgICNkZWZpbmUgcG9ydFNBVkVfQ09OVEVYVCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB7IF9fYXNtKCAiIFBPUFcgIEEgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICBfX2FzbSggIiBBTkQgIENDUiwjSCdERiAiICk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgUFVTSFcgIEEgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgIF9fYXNtKCAiIE9SICAgQ0NSLCNIJzIwICIgKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICBfX2FzbSggIiBQT1BXICBBICIgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgQU5EICBDQ1IsI0gnREYgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgIF9fYXNtKCAiIFBVU0hXICBBICIgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICBfX2FzbSggIiBPUiAgIENDUiwjSCcyMCAiICk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgUE9QVyAgQSAiICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgIF9fYXNtKCAiIEFORCAgQ0NSLCNIJ0RGICIgKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICBfX2FzbSggIiBQVVNIVyAgQSAiICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgT1IgICBDQ1IsI0gnMjAgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgIF9fYXNtKCAiIFBPUFcgIEEgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICBfX2FzbSggIiBBTkQgIENDUiwjSCdERiAiICk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgUFVTSFcgIEEgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgIF9fYXNtKCAiIE9SICAgQ0NSLCNIJzIwICIgKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICBfX2FzbSggIiBQT1BXICBBICIgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgQU5EICBDQ1IsI0gnREYgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgIF9fYXNtKCAiIFBVU0hXICBBICIgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICBfX2FzbSggIiBPUiAgIENDUiwjSCcyMCAiICk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgUE9QVyAgQSAiICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgIF9fYXNtKCAiIEFORCAgQ0NSLCNIJ0RGICIgKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICBfX2FzbSggIiBQVVNIVyAgQSAiICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgUFVTSFcgKFJXMCxSVzEsUlcyLFJXMyxSVzQsUlc1LFJXNixSVzcpICIgKTsgXA0KLSAgICAgIF9fYXNtKCAiIE1PVkwgQSwgX3B4Q3VycmVudFRDQiAiICk7ICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICBfX2FzbSggIiBNT1ZMIFJMMiwgQSAiICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgTU9WVyBBLCBTUCAiICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgIF9fYXNtKCAiIE1PVlcgQFJMMiswLCBBICIgKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICBfX2FzbSggIiBNT1YgQSwgVVNCICIgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgTU9WIEBSTDIrMiwgQSAiICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB9DQotDQotICAgICNkZWZpbmUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIHsgX19hc20oICIgTU9WTCBBLCBfcHhDdXJyZW50VENCICIgKTsgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgTU9WTCBSTDIsIEEgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgTU9WVyBBLCBAUkwyKzAgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgQU5EICBDQ1IsI0gnREYgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgTU9WVyBTUCwgQSAiICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgTU9WIEEsIEBSTDIrMiAiICk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgTU9WIFVTQiwgQSAiICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgUE9QVyAoUlcwLFJXMSxSVzIsUlczLFJXNCxSVzUsUlc2LFJXNykgIiApOyBcDQotICAgICAgX19hc20oICIgUE9QVyAgQSAiICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgT1IgICBDQ1IsI0gnMjAgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgUFVTSFcgIEEgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgQU5EICBDQ1IsI0gnREYgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgUE9QVyAgQSAiICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgT1IgICBDQ1IsI0gnMjAgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgUFVTSFcgIEEgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgQU5EICBDQ1IsI0gnREYgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgUE9QVyAgQSAiICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgT1IgICBDQ1IsI0gnMjAgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgUFVTSFcgIEEgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgQU5EICBDQ1IsI0gnREYgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgUE9QVyAgQSAiICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgT1IgICBDQ1IsI0gnMjAgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgUFVTSFcgIEEgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgQU5EICBDQ1IsI0gnREYgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgUE9QVyAgQSAiICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgT1IgICBDQ1IsI0gnMjAgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgUFVTSFcgIEEgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgQU5EICBDQ1IsI0gnREYgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgUE9QVyAgQSAiICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgT1IgICBDQ1IsI0gnMjAgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgX19hc20oICIgUFVTSFcgIEEgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIH0NCi0jZW5kaWYgLyogaWYgKCAoIGNvbmZpZ01FTU1PREVMID09IHBvcnRTTUFMTCApIHx8ICggY29uZmlnTUVNTU9ERUwgPT0gcG9ydE1FRElVTSApICkgKi8NCi0NCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCi0NCi0vKg0KKy8qIA0KICAqIEZ1bmN0aW9ucyBmb3Igb2J0YWluaW5nIHRoZSBjdXJyZW50IHZhbHVlICBvZiAgRFBSOkFEQiwgRFRCOlBDQiBiYW5rIHJlZ2lzdGVycw0KICAqLw0KLQ0KKyANCiAjcHJhZ21hIGFzbQ0KIA0KICAgICAgICAgLkdMT0JBTCAgICBfeEdldF9EUFJfQURCX2JhbmsNCkBAIC0yNTQsMjU3ICsyNTQsMjU2IEBACiAjcHJhZ21hIGVuZGFzbQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KLS8qDQotICogSW5pdGlhbGlzZSB0aGUgc3RhY2sgb2YgYSB0YXNrIHRvIGxvb2sgZXhhY3RseSBhcyBpZiBhIGNhbGwgdG8NCisvKiANCisgKiBJbml0aWFsaXNlIHRoZSBzdGFjayBvZiBhIHRhc2sgdG8gbG9vayBleGFjdGx5IGFzIGlmIGEgY2FsbCB0byANCiAgKiBwb3J0U0FWRV9DT05URVhUIGhhZCBiZWVuIGNhbGxlZC4NCi0gKg0KKyAqIA0KICAqIFNlZSB0aGUgaGVhZGVyIGZpbGUgcG9ydGFibGUuaC4NCiAgKi8NCi1TdGFja1R5cGVfdCAqIHB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKiBweFRvcE9mU3RhY2ssDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqIHB2UGFyYW1ldGVycyApDQorU3RhY2tUeXBlX3QgKnB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKnB4VG9wT2ZTdGFjaywgVGFza0Z1bmN0aW9uX3QgcHhDb2RlLCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KIHsNCi0gICAgLyogUGxhY2UgYSBmZXcgYnl0ZXMgb2Yga25vd24gdmFsdWVzIG9uIHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLg0KLSAgICAgKiBUaGlzIGlzIGp1c3QgdXNlZnVsIGZvciBkZWJ1Z2dpbmcuICovDQotICAgICpweFRvcE9mU3RhY2sgPSAweDExMTE7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMHgyMjIyOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MzMzMzsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorCS8qIFBsYWNlIGEgZmV3IGJ5dGVzIG9mIGtub3duIHZhbHVlcyBvbiB0aGUgYm90dG9tIG9mIHRoZSBzdGFjay4gDQorCVRoaXMgaXMganVzdCB1c2VmdWwgZm9yIGRlYnVnZ2luZy4gKi8NCisJKnB4VG9wT2ZTdGFjayA9IDB4MTExMTsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDIyMjI7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgzMzMzOw0KKwlweFRvcE9mU3RhY2stLTsNCiANCi0gICAgLyogT25jZSB0aGUgdGFzayBpcyBjYWxsZWQgdGhlIHRhc2sgIHdvdWxkICBwdXNoICB0aGUgIHBvaW50ZXIgdG8gdGhlDQotICAgICAqIHBhcmFtZXRlciBvbnRvIHRoZSBzdGFjay4gSGVuY2UgaGVyZSB0aGUgcG9pbnRlciB3b3VsZCBiZSBjb3BpZWQgdG8gdGhlIHN0YWNrDQotICAgICAqIGZpcnN0LiAgV2hlbiB1c2luZyB0aGUgQ09NUEFDVCBvciBMQVJHRSBtZW1vcnkgbW9kZWwgdGhlIHBvaW50ZXIgd291bGQgYmUgMjQNCi0gICAgICogYml0cywgYW5kIHdoZW4gdXNpbmcgdGhlIFNNQUxMIG9yIE1FRElVTSBtZW1vcnkgbW9kZWwgdGhlIHBvaW50ZXIgd291bGQgYmUgMTYNCi0gICAgICogYml0cy4gKi8NCi0gICAgI2lmICggKCBjb25maWdNRU1NT0RFTCA9PSBwb3J0Q09NUEFDVCApIHx8ICggY29uZmlnTUVNTU9ERUwgPT0gcG9ydExBUkdFICkgKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgKCAoIHVpbnQzMl90ICkgKCBwdlBhcmFtZXRlcnMgKSA+PiAxNiApOw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgfQ0KLSAgICAjZW5kaWYNCisJLyogT25jZSB0aGUgdGFzayBpcyBjYWxsZWQgdGhlIHRhc2sgIHdvdWxkICBwdXNoICB0aGUgIHBvaW50ZXIgdG8gdGhlDQorCXBhcmFtZXRlciBvbnRvIHRoZSBzdGFjay4gSGVuY2UgaGVyZSB0aGUgcG9pbnRlciB3b3VsZCBiZSBjb3BpZWQgdG8gdGhlIHN0YWNrDQorCWZpcnN0LiAgV2hlbiB1c2luZyB0aGUgQ09NUEFDVCBvciBMQVJHRSBtZW1vcnkgbW9kZWwgdGhlIHBvaW50ZXIgd291bGQgYmUgMjQgDQorCWJpdHMsIGFuZCB3aGVuIHVzaW5nIHRoZSBTTUFMTCBvciBNRURJVU0gbWVtb3J5IG1vZGVsIHRoZSBwb2ludGVyIHdvdWxkIGJlIDE2IA0KKwliaXRzLiAqLyANCisJI2lmKCAoIGNvbmZpZ01FTU1PREVMID09IHBvcnRDT01QQUNUICkgfHwgKCBjb25maWdNRU1NT0RFTCA9PSBwb3J0TEFSR0UgKSApDQorCXsNCisJCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgKCAoIHVpbnQzMl90ICkgKCBwdlBhcmFtZXRlcnMgKSA+PiAxNiApOw0KKwkJcHhUb3BPZlN0YWNrLS07ICAgICAgICAgDQorCX0NCisJI2VuZGlmDQogDQogICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgKCBwdlBhcmFtZXRlcnMgKTsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorICAgIHB4VG9wT2ZTdGFjay0tOyAgICAgICAgICAgICAgICAgIA0KKyAgICANCisgICAgLyogVGhpcyBpcyByZWR1bmRhbnQgcHVzaCB0byB0aGUgc3RhY2suIFRoaXMgaXMgcmVxdWlyZWQgaW4gb3JkZXIgdG8gaW50cm9kdWNlIA0KKyAgICBhbiBvZmZzZXQgc28gdGhhdCB0aGUgdGFzayBhY2Nlc3NlcyBhIHBhcmFtZXRlciBjb3JyZWN0bHkgdGhhdCBpcyBwYXNzZWQgb24gdG8gDQorICAgIHRoZSB0YXNrIHN0YWNrLiAqLw0KKwkjaWYoICggY29uZmlnTUVNTU9ERUwgPT0gcG9ydE1FRElVTSApIHx8ICggY29uZmlnTUVNTU9ERUwgPT0gcG9ydExBUkdFICkgKQ0KKwl7DQorCQkqcHhUb3BPZlN0YWNrID0gKCB4R2V0X0RUQl9QQ0JfYmFuaygpICYgMHhmZjAwICkgfCAoICggKCBpbnQzMl90ICkgKCBweENvZGUgKSA+PiAxNiApICYgMHhmZiApOyAgICAgIA0KKwkJcHhUb3BPZlN0YWNrLS07ICAgICAgIA0KKwl9DQorCSNlbmRpZg0KIA0KLSAgICAvKiBUaGlzIGlzIHJlZHVuZGFudCBwdXNoIHRvIHRoZSBzdGFjay4gVGhpcyBpcyByZXF1aXJlZCBpbiBvcmRlciB0byBpbnRyb2R1Y2UNCi0gICAgICogYW4gb2Zmc2V0IHNvIHRoYXQgdGhlIHRhc2sgYWNjZXNzZXMgYSBwYXJhbWV0ZXIgY29ycmVjdGx5IHRoYXQgaXMgcGFzc2VkIG9uIHRvDQotICAgICAqIHRoZSB0YXNrIHN0YWNrLiAqLw0KLSAgICAjaWYgKCAoIGNvbmZpZ01FTU1PREVMID09IHBvcnRNRURJVU0gKSB8fCAoIGNvbmZpZ01FTU1PREVMID09IHBvcnRMQVJHRSApICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICAqcHhUb3BPZlN0YWNrID0gKCB4R2V0X0RUQl9QQ0JfYmFuaygpICYgMHhmZjAwICkgfCAoICggKCBpbnQzMl90ICkgKCBweENvZGUgKSA+PiAxNiApICYgMHhmZiApOw0KLSAgICAgICAgICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAgICAgfQ0KLSAgICAjZW5kaWYNCi0NCi0gICAgLyogVGhpcyBpcyByZWR1bmRhbnQgcHVzaCB0byB0aGUgc3RhY2suIFRoaXMgaXMgcmVxdWlyZWQgaW4gb3JkZXIgdG8gaW50cm9kdWNlDQotICAgICAqIGFuIG9mZnNldCBzbyB0aGUgdGFzayBjb3JyZWN0bHkgYWNjZXNzZXMgdGhlIHBhcmFtZXRlciBwYXNzZWQgb24gdGhlIHRhc2sgc3RhY2suICovDQorICAgIC8qIFRoaXMgaXMgcmVkdW5kYW50IHB1c2ggdG8gdGhlIHN0YWNrLiBUaGlzIGlzIHJlcXVpcmVkIGluIG9yZGVyIHRvIGludHJvZHVjZSANCisgICAgYW4gb2Zmc2V0IHNvIHRoZSB0YXNrIGNvcnJlY3RseSBhY2Nlc3NlcyB0aGUgcGFyYW1ldGVyIHBhc3NlZCBvbiB0aGUgdGFzayBzdGFjay4gKi8NCiAgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAoIHB4Q29kZSApOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisgICAgcHhUb3BPZlN0YWNrLS07ICAgICAgIA0KIA0KICAgICAvKiBQUyAtIFVzZXIgTW9kZSwgSUxNPTcsIFJCPTAsIEludGVycnVwdHMgZW5hYmxlZCxVU1AgKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4RTBDMDsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQorICAgICpweFRvcE9mU3RhY2sgPSAweEUwQzA7CQkJCQkJCQ0KKwlweFRvcE9mU3RhY2stLTsgDQogDQotICAgIC8qIFBDICovDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgKCBweENvZGUgKTsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQotDQorCS8qIFBDICovDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgKCBweENvZGUgKTsgICAgIA0KKyAgICBweFRvcE9mU3RhY2stLTsgICAgICANCisgICAgDQogICAgIC8qIERUQiB8IFBDQiAqLw0KLSAgICAjaWYgY29uZmlnTUVNTU9ERUwgPT0gcG9ydFNNQUxMIHx8IGNvbmZpZ01FTU1PREVMID09IHBvcnRDT01QQUNUDQotICAgICAgICB7DQotICAgICAgICAgICAgKnB4VG9wT2ZTdGFjayA9IHhHZXRfRFRCX1BDQl9iYW5rKCk7DQotICAgICAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICAgICB9DQotICAgICNlbmRpZg0KKwkjaWYgY29uZmlnTUVNTU9ERUwgPT0gcG9ydFNNQUxMIHx8IGNvbmZpZ01FTU1PREVMID09IHBvcnRDT01QQUNUDQorCXsNCisJCSpweFRvcE9mU3RhY2sgPSB4R2V0X0RUQl9QQ0JfYmFuaygpOyAgICAgICAgIAkNCisJCXB4VG9wT2ZTdGFjay0tOw0KKwl9DQorCSNlbmRpZg0KIA0KLSAgICAvKiBEVEIgfCBQQ0IsIGluIGNhc2Ugb2YgTUVESVVNIGFuZCBMQVJHRSBtZW1vcnkgbW9kZWxzLCBQQ0Igd291bGQgYmUgdXNlZA0KLSAgICAgKiBhbG9uZyB3aXRoIFBDIHRvIGluZGljYXRlIHRoZSBzdGFydCBhZGRyZXNzIG9mIHRoZSBmdW5jdGlvbi4gKi8NCi0gICAgI2lmICggKCBjb25maWdNRU1NT0RFTCA9PSBwb3J0TUVESVVNICkgfHwgKCBjb25maWdNRU1NT0RFTCA9PSBwb3J0TEFSR0UgKSApDQotICAgICAgICB7DQotICAgICAgICAgICAgKnB4VG9wT2ZTdGFjayA9ICggeEdldF9EVEJfUENCX2JhbmsoKSAmIDB4ZmYwMCApIHwgKCAoICggaW50MzJfdCApICggcHhDb2RlICkgPj4gMTYgKSAmIDB4ZmYgKTsNCi0gICAgICAgICAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgICAgIH0NCi0gICAgI2VuZGlmDQorCS8qIERUQiB8IFBDQiwgaW4gY2FzZSBvZiBNRURJVU0gYW5kIExBUkdFIG1lbW9yeSBtb2RlbHMsIFBDQiB3b3VsZCBiZSB1c2VkDQorCWFsb25nIHdpdGggUEMgdG8gaW5kaWNhdGUgdGhlIHN0YXJ0IGFkZHJlc3Mgb2YgdGhlIGZ1bmN0aW9uLiAqLw0KKwkjaWYoICggY29uZmlnTUVNTU9ERUwgPT0gcG9ydE1FRElVTSApIHx8ICggY29uZmlnTUVNTU9ERUwgPT0gcG9ydExBUkdFICkgKQ0KKwl7DQorCQkqcHhUb3BPZlN0YWNrID0gKCB4R2V0X0RUQl9QQ0JfYmFuaygpICYgMHhmZjAwICkgfCAoICggKCBpbnQzMl90ICkgKCBweENvZGUgKSA+PiAxNiApICYgMHhmZiApOw0KKwkJcHhUb3BPZlN0YWNrLS07ICAgICAgIA0KKwl9DQorCSNlbmRpZg0KIA0KLSAgICAvKiBEUFIgfCBBREIgICovDQotICAgICpweFRvcE9mU3RhY2sgPSB4R2V0X0RQUl9BREJfYmFuaygpOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJLyogRFBSIHwgQURCICAqLw0KKwkqcHhUb3BPZlN0YWNrID0geEdldF9EUFJfQURCX2JhbmsoKTsJCQkJDQorCXB4VG9wT2ZTdGFjay0tOw0KKyAgICANCisJLyogQUwgKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDk5OTk7CQkNCisJcHhUb3BPZlN0YWNrLS07DQogDQotICAgIC8qIEFMICovDQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHg5OTk5Ow0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0NCi0gICAgLyogQUggKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweEFBQUE7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLQ0KLSAgICAvKiBOZXh0IHRoZSBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4Nzc3NzsgLyogUlc3ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4NjY2NjsgLyogUlc2ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4NTU1NTsgLyogUlc1ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4NDQ0NDsgLyogUlc0ICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MzMzMzsgLyogUlczICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MjIyMjsgLyogUlcyICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MTExMTsgLyogUlcxICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4ODg4ODsgLyogUlcwICovDQotDQotICAgIHJldHVybiBweFRvcE9mU3RhY2s7DQorCS8qIEFIICovDQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhBQUFBOwkJDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkNCisJLyogTmV4dCB0aGUgZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycy4gKi8NCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDc3Nzc7CS8qIFJXNyAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDY2NjY7CS8qIFJXNiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDU1NTU7CS8qIFJXNSAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDQ0NDQ7CS8qIFJXNCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDMzMzM7CS8qIFJXMyAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDIyMjI7CS8qIFJXMiAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDExMTE7CS8qIFJXMSAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDg4ODg7CS8qIFJXMCAqLw0KKwkJDQorCXJldHVybiBweFRvcE9mU3RhY2s7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHN0YXRpYyB2b2lkIHBydlNldHVwUkxUMEludGVycnVwdCggdm9pZCApDQogew0KIC8qIFRoZSBwZXJpcGhlcmFsIGNsb2NrIGRpdmlkZWQgYnkgMTYgaXMgdXNlZCBieSB0aGUgdGltZXIuICovDQotICAgIGNvbnN0IHVpbnQxNl90IHVzUmVsb2FkVmFsdWUgPSAoIHVpbnQxNl90ICkgKCAoICggY29uZmlnQ0xLUDFfQ0xPQ0tfSFogLyBjb25maWdUSUNLX1JBVEVfSFogKSAvIDE2VUwgKSAtIDFVTCApOw0KK2NvbnN0IHVpbnQxNl90IHVzUmVsb2FkVmFsdWUgPSAoIHVpbnQxNl90ICkgKCAoICggY29uZmlnQ0xLUDFfQ0xPQ0tfSFogLyBjb25maWdUSUNLX1JBVEVfSFogKSAvIDE2VUwgKSAtIDFVTCApOw0KIA0KLSAgICAvKiBzZXQgcmVsb2FkIHZhbHVlID0gMzQ5OTkrMSwgVElDSyBJbnRlcnJ1cHQgYWZ0ZXIgMTAgbXMgQCA1Nk1IeiBvZiBDTEtQMSAqLw0KLSAgICBUTVJMUjAgPSB1c1JlbG9hZFZhbHVlOw0KLQ0KKwkvKiBzZXQgcmVsb2FkIHZhbHVlID0gMzQ5OTkrMSwgVElDSyBJbnRlcnJ1cHQgYWZ0ZXIgMTAgbXMgQCA1Nk1IeiBvZiBDTEtQMSAqLw0KKwlUTVJMUjAgPSB1c1JlbG9hZFZhbHVlOyAgICANCisgICAgDQogICAgIC8qIHByZXNjYWxlciAxOjE2LCByZWxvYWQsIGludGVycnVwdCBlbmFibGUsIGNvdW50IGVuYWJsZSwgdHJpZ2dlciAqLw0KLSAgICBUTUNTUjAgPSAweDA0MUI7DQorICAgIFRNQ1NSMCA9IDB4MDQxQjsgICAgDQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIEJhc2VUeXBlX3QgeFBvcnRTdGFydFNjaGVkdWxlciggdm9pZCApDQogew0KLSAgICAvKiBTZXR1cCB0aGUgaGFyZHdhcmUgdG8gZ2VuZXJhdGUgdGhlIHRpY2suICovDQotICAgIHBydlNldHVwUkxUMEludGVycnVwdCgpOw0KKwkvKiBTZXR1cCB0aGUgaGFyZHdhcmUgdG8gZ2VuZXJhdGUgdGhlIHRpY2suICovDQorCXBydlNldHVwUkxUMEludGVycnVwdCgpOw0KKwkNCisJLyogUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgZmlyc3QgdGFzayB0aGF0IGlzIGdvaW5nIHRvIHJ1bi4gKi8NCisJcG9ydFJFU1RPUkVfQ09OVEVYVCgpOw0KIA0KLSAgICAvKiBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBmaXJzdCB0YXNrIHRoYXQgaXMgZ29pbmcgdG8gcnVuLiAqLw0KLSAgICBwb3J0UkVTVE9SRV9DT05URVhUKCk7DQotDQotICAgIC8qIFNpbXVsYXRlIGEgZnVuY3Rpb24gY2FsbCBlbmQgYXMgZ2VuZXJhdGVkIGJ5IHRoZSBjb21waWxlci4gIFdlIHdpbGwgbm93DQotICAgICAqIGp1bXAgdG8gdGhlIHN0YXJ0IG9mIHRoZSB0YXNrIHRoZSBjb250ZXh0IG9mIHdoaWNoIHdlIGhhdmUganVzdCByZXN0b3JlZC4gKi8NCi0gICAgX19hc20oICIgcmV0aSAiICk7DQorCS8qIFNpbXVsYXRlIGEgZnVuY3Rpb24gY2FsbCBlbmQgYXMgZ2VuZXJhdGVkIGJ5IHRoZSBjb21waWxlci4gIFdlIHdpbGwgbm93DQorCWp1bXAgdG8gdGhlIHN0YXJ0IG9mIHRoZSB0YXNrIHRoZSBjb250ZXh0IG9mIHdoaWNoIHdlIGhhdmUganVzdCByZXN0b3JlZC4gKi8JDQorCV9fYXNtKCIgcmV0aSAiKTsNCiANCiANCi0gICAgLyogU2hvdWxkIG5vdCBnZXQgaGVyZS4gKi8NCi0gICAgcmV0dXJuIHBkVFJVRTsNCisJLyogU2hvdWxkIG5vdCBnZXQgaGVyZS4gKi8NCisJcmV0dXJuIHBkVFJVRTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogdm9pZCB2UG9ydEVuZFNjaGVkdWxlciggdm9pZCApDQogew0KLSAgICAvKiBOb3QgaW1wbGVtZW50ZWQgLSB1bmxpa2VseSB0byBldmVyIGJlIHJlcXVpcmVkIGFzIHRoZXJlIGlzIG5vdGhpbmcgdG8NCi0gICAgICogcmV0dXJuIHRvLiAqLw0KKwkvKiBOb3QgaW1wbGVtZW50ZWQgLSB1bmxpa2VseSB0byBldmVyIGJlIHJlcXVpcmVkIGFzIHRoZXJlIGlzIG5vdGhpbmcgdG8NCisJcmV0dXJuIHRvLiAqLw0KIH0NCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0vKg0KKy8qIA0KICAqIFRoZSBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lIHVzZWQgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSBwcmUtZW1wdGl2ZQ0KICAqIHNjaGVkdWxlciBpcyBiZWluZyB1c2VkIG9yIG5vdC4NCiAgKi8NCiANCiAjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMQ0KIA0KLS8qDQotICogVGljayBJU1IgZm9yIHByZWVtcHRpdmUgc2NoZWR1bGVyLiAgV2UgY2FuIHVzZSBhIF9fbm9zYXZlcmVnIGF0dHJpYnV0ZQ0KLSAqIGFzIHRoZSBjb250ZXh0IGlzIHRvIGJlIHNhdmVkIGJ5IHRoZSBwb3J0U0FWRV9DT05URVhUKCkgbWFjcm8sIG5vdCB0aGUNCi0gKiBjb21waWxlciBnZW5lcmF0ZWQgY29kZS4gIFRoZSB0aWNrIGNvdW50IGlzIGluY3JlbWVudGVkIGFmdGVyIHRoZSBjb250ZXh0DQotICogaXMgc2F2ZWQuDQotICovDQotICAgIF9fbm9zYXZlcmVnIF9faW50ZXJydXB0IHZvaWQgcHJ2UkxUMF9USUNLSVNSKCB2b2lkICkNCi0gICAgew0KLSAgICAgICAgLyogRGlzYWJsZSBpbnRlcnJ1cHRzIHNvIHRoYXQgcG9ydFNBVkVfQ09OVEVYVCgpIGlzIG5vdCBpbnRlcnJ1cHRlZCAqLw0KLSAgICAgICAgX19ESSgpOw0KKwkvKiANCisJICogVGljayBJU1IgZm9yIHByZWVtcHRpdmUgc2NoZWR1bGVyLiAgV2UgY2FuIHVzZSBhIF9fbm9zYXZlcmVnIGF0dHJpYnV0ZQ0KKwkgKiBhcyB0aGUgY29udGV4dCBpcyB0byBiZSBzYXZlZCBieSB0aGUgcG9ydFNBVkVfQ09OVEVYVCgpIG1hY3JvLCBub3QgdGhlDQorCSAqIGNvbXBpbGVyIGdlbmVyYXRlZCBjb2RlLiAgVGhlIHRpY2sgY291bnQgaXMgaW5jcmVtZW50ZWQgYWZ0ZXIgdGhlIGNvbnRleHQgDQorCSAqIGlzIHNhdmVkLiANCisJICovDQorCV9fbm9zYXZlcmVnIF9faW50ZXJydXB0IHZvaWQgcHJ2UkxUMF9USUNLSVNSKCB2b2lkICkNCisJew0KKwkJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIHNvIHRoYXQgcG9ydFNBVkVfQ09OVEVYVCgpIGlzIG5vdCBpbnRlcnJ1cHRlZCAqLw0KKwkJX19ESSgpOw0KKwkJDQorCQkvKiBTYXZlIHRoZSBjb250ZXh0IG9mIHRoZSBpbnRlcnJ1cHRlZCB0YXNrLiAqLw0KKwkJcG9ydFNBVkVfQ09OVEVYVCgpOw0KKwkJDQorCQkvKiBFbmFibGUgaW50ZXJydXB0cyAqLw0KKwkJX19FSSgpOw0KKwkJDQorCQkvKiBDbGVhciBSTFQwIGludGVycnVwdCBmbGFnICovDQorCQlUTUNTUjBfVUYgPSAwOyAgICAgIA0KKwkJDQorCQkvKiBJbmNyZW1lbnQgdGhlIHRpY2sgY291bnQgdGhlbiBzd2l0Y2ggdG8gdGhlIGhpZ2hlc3QgcHJpb3JpdHkgdGFzaw0KKwkJdGhhdCBpcyByZWFkeSB0byBydW4uICovDQorCQlpZiggeFRhc2tJbmNyZW1lbnRUaWNrKCkgIT0gcGRGQUxTRSApDQorCQl7DQorCQkJdlRhc2tTd2l0Y2hDb250ZXh0KCk7DQorCQl9DQogDQotICAgICAgICAvKiBTYXZlIHRoZSBjb250ZXh0IG9mIHRoZSBpbnRlcnJ1cHRlZCB0YXNrLiAqLw0KLSAgICAgICAgcG9ydFNBVkVfQ09OVEVYVCgpOw0KKwkJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIHNvIHRoYXQgcG9ydFJFU1RPUkVfQ09OVEVYVCgpIGlzIG5vdCBpbnRlcnJ1cHRlZCAqLw0KKwkJX19ESSgpOw0KKwkJDQorCQkvKiBSZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBuZXcgdGFzay4gKi8NCisJCXBvcnRSRVNUT1JFX0NPTlRFWFQoKTsNCisJCQ0KKwkJLyogRW5hYmxlIGludGVycnVwdHMgKi8NCisJCV9fRUkoKTsNCisJfQ0KIA0KLSAgICAgICAgLyogRW5hYmxlIGludGVycnVwdHMgKi8NCi0gICAgICAgIF9fRUkoKTsNCisjZWxzZQ0KIA0KLSAgICAgICAgLyogQ2xlYXIgUkxUMCBpbnRlcnJ1cHQgZmxhZyAqLw0KLSAgICAgICAgVE1DU1IwX1VGID0gMDsNCisJLyoNCisJICogVGljayBJU1IgZm9yIHRoZSBjb29wZXJhdGl2ZSBzY2hlZHVsZXIuICBBbGwgdGhpcyBkb2VzIGlzIGluY3JlbWVudCB0aGUNCisJICogdGljayBjb3VudC4gIFdlIGRvbid0IG5lZWQgdG8gc3dpdGNoIGNvbnRleHQsIHRoaXMgY2FuIG9ubHkgYmUgZG9uZSBieQ0KKwkgKiBtYW51YWwgY2FsbHMgdG8gdGFza1lJRUxEKCk7DQorCSAqLw0KKwlfX2ludGVycnVwdCB2b2lkIHBydlJMVDBfVElDS0lTUiggdm9pZCApDQorCXsNCisJCS8qIENsZWFyIFJMVDAgaW50ZXJydXB0IGZsYWcgKi8NCisJCVRNQ1NSMF9VRiA9IDA7ICANCisJCQ0KKwkJeFRhc2tJbmNyZW1lbnRUaWNrKCk7DQorCX0NCiANCi0gICAgICAgIC8qIEluY3JlbWVudCB0aGUgdGljayBjb3VudCB0aGVuIHN3aXRjaCB0byB0aGUgaGlnaGVzdCBwcmlvcml0eSB0YXNrDQotICAgICAgICAgKiB0aGF0IGlzIHJlYWR5IHRvIHJ1bi4gKi8NCi0gICAgICAgIGlmKCB4VGFza0luY3JlbWVudFRpY2soKSAhPSBwZEZBTFNFICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICB2VGFza1N3aXRjaENvbnRleHQoKTsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIC8qIERpc2FibGUgaW50ZXJydXB0cyBzbyB0aGF0IHBvcnRSRVNUT1JFX0NPTlRFWFQoKSBpcyBub3QgaW50ZXJydXB0ZWQgKi8NCi0gICAgICAgIF9fREkoKTsNCi0NCi0gICAgICAgIC8qIFJlc3RvcmUgdGhlIGNvbnRleHQgb2YgdGhlIG5ldyB0YXNrLiAqLw0KLSAgICAgICAgcG9ydFJFU1RPUkVfQ09OVEVYVCgpOw0KLQ0KLSAgICAgICAgLyogRW5hYmxlIGludGVycnVwdHMgKi8NCi0gICAgICAgIF9fRUkoKTsNCi0gICAgfQ0KLQ0KLSNlbHNlIC8qIGlmIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDEgKi8NCi0NCi0vKg0KLSAqIFRpY2sgSVNSIGZvciB0aGUgY29vcGVyYXRpdmUgc2NoZWR1bGVyLiAgQWxsIHRoaXMgZG9lcyBpcyBpbmNyZW1lbnQgdGhlDQotICogdGljayBjb3VudC4gIFdlIGRvbid0IG5lZWQgdG8gc3dpdGNoIGNvbnRleHQsIHRoaXMgY2FuIG9ubHkgYmUgZG9uZSBieQ0KLSAqIG1hbnVhbCBjYWxscyB0byB0YXNrWUlFTEQoKTsNCi0gKi8NCi0gICAgX19pbnRlcnJ1cHQgdm9pZCBwcnZSTFQwX1RJQ0tJU1IoIHZvaWQgKQ0KLSAgICB7DQotICAgICAgICAvKiBDbGVhciBSTFQwIGludGVycnVwdCBmbGFnICovDQotICAgICAgICBUTUNTUjBfVUYgPSAwOw0KLQ0KLSAgICAgICAgeFRhc2tJbmNyZW1lbnRUaWNrKCk7DQotICAgIH0NCi0NCi0jZW5kaWYgLyogaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMSAqLw0KKyNlbmRpZg0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qDQotICogTWFudWFsIGNvbnRleHQgc3dpdGNoLiBXZSBjYW4gdXNlIGEgX19ub3NhdmVyZWcgYXR0cmlidXRlICBhcyB0aGUgY29udGV4dA0KLSAqIGlzIHRvIGJlIHNhdmVkIGJ5IHRoZSBwb3J0U0FWRV9DT05URVhUKCkgbWFjcm8sIG5vdCB0aGUgY29tcGlsZXIgZ2VuZXJhdGVkDQorICogTWFudWFsIGNvbnRleHQgc3dpdGNoLiBXZSBjYW4gdXNlIGEgX19ub3NhdmVyZWcgYXR0cmlidXRlICBhcyB0aGUgY29udGV4dCANCisgKiBpcyB0byBiZSBzYXZlZCBieSB0aGUgcG9ydFNBVkVfQ09OVEVYVCgpIG1hY3JvLCBub3QgdGhlIGNvbXBpbGVyIGdlbmVyYXRlZCANCiAgKiBjb2RlLg0KICAqLw0KIF9fbm9zYXZlcmVnIF9faW50ZXJydXB0IHZvaWQgdlBvcnRZaWVsZCggdm9pZCApDQogew0KLSAgICAvKiBTYXZlIHRoZSBjb250ZXh0IG9mIHRoZSBpbnRlcnJ1cHRlZCB0YXNrLiAqLw0KLSAgICBwb3J0U0FWRV9DT05URVhUKCk7DQotDQotICAgIC8qIFN3aXRjaCB0byB0aGUgaGlnaGVzdCBwcmlvcml0eSB0YXNrIHRoYXQgaXMgcmVhZHkgdG8gcnVuLiAqLw0KLSAgICB2VGFza1N3aXRjaENvbnRleHQoKTsNCi0NCi0gICAgLyogUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgbmV3IHRhc2suICovDQotICAgIHBvcnRSRVNUT1JFX0NPTlRFWFQoKTsNCisJLyogU2F2ZSB0aGUgY29udGV4dCBvZiB0aGUgaW50ZXJydXB0ZWQgdGFzay4gKi8NCisJcG9ydFNBVkVfQ09OVEVYVCgpOw0KKwkNCisJLyogU3dpdGNoIHRvIHRoZSBoaWdoZXN0IHByaW9yaXR5IHRhc2sgdGhhdCBpcyByZWFkeSB0byBydW4uICovDQorCXZUYXNrU3dpdGNoQ29udGV4dCgpOw0KKwkNCisJLyogUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgbmV3IHRhc2suICovDQorCXBvcnRSRVNUT1JFX0NPTlRFWFQoKTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogX19ub3NhdmVyZWcgX19pbnRlcnJ1cHQgdm9pZCB2UG9ydFlpZWxkRGVsYXllZCggdm9pZCApDQotew0KLSAgICAvKiBEaXNhYmxlIGludGVycnVwdHMgc28gdGhhdCBwb3J0U0FWRV9DT05URVhUKCkgaXMgbm90IGludGVycnVwdGVkICovDQotICAgIF9fREkoKTsNCit7ICAgIA0KKyAgICAvKiBEaXNhYmxlIGludGVycnVwdHMgc28gdGhhdCBwb3J0U0FWRV9DT05URVhUKCkgaXMgbm90IGludGVycnVwdGVkICovICAgICAgDQorCV9fREkoKTsNCisJDQorCS8qIFNhdmUgdGhlIGNvbnRleHQgb2YgdGhlIGludGVycnVwdGVkIHRhc2suICovDQorCXBvcnRTQVZFX0NPTlRFWFQoKTsNCisJDQorCS8qIEVuYWJsZSBpbnRlcnJ1cHRzICovDQorCV9fRUkoKTsNCisJCQkJDQorCS8qIENsZWFyIGRlbGF5ZWQgaW50ZXJydXB0IGZsYWcgKi8NCisgICAgX19hc20gKCIgQ0xSQiAgMDNBNEg6MCAiKTsNCisJDQorCS8qIFN3aXRjaCB0byB0aGUgaGlnaGVzdCBwcmlvcml0eSB0YXNrIHRoYXQgaXMgcmVhZHkgdG8gcnVuLiAqLw0KKwl2VGFza1N3aXRjaENvbnRleHQoKTsNCisJDQorCS8qIERpc2FibGUgaW50ZXJydXB0cyBzbyB0aGF0IHBvcnRTQVZFX0NPTlRFWFQoKSBpcyBub3QgaW50ZXJydXB0ZWQgKi8gICANCisJX19ESSgpOw0KKwkNCisJLyogUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgbmV3IHRhc2suICovDQorCXBvcnRSRVNUT1JFX0NPTlRFWFQoKTsNCiANCi0gICAgLyogU2F2ZSB0aGUgY29udGV4dCBvZiB0aGUgaW50ZXJydXB0ZWQgdGFzay4gKi8NCi0gICAgcG9ydFNBVkVfQ09OVEVYVCgpOw0KLQ0KLSAgICAvKiBFbmFibGUgaW50ZXJydXB0cyAqLw0KLSAgICBfX0VJKCk7DQotDQotICAgIC8qIENsZWFyIGRlbGF5ZWQgaW50ZXJydXB0IGZsYWcgKi8NCi0gICAgX19hc20oICIgQ0xSQiAgMDNBNEg6MCAiICk7DQotDQotICAgIC8qIFN3aXRjaCB0byB0aGUgaGlnaGVzdCBwcmlvcml0eSB0YXNrIHRoYXQgaXMgcmVhZHkgdG8gcnVuLiAqLw0KLSAgICB2VGFza1N3aXRjaENvbnRleHQoKTsNCi0NCi0gICAgLyogRGlzYWJsZSBpbnRlcnJ1cHRzIHNvIHRoYXQgcG9ydFNBVkVfQ09OVEVYVCgpIGlzIG5vdCBpbnRlcnJ1cHRlZCAqLw0KLSAgICBfX0RJKCk7DQotDQotICAgIC8qIFJlc3RvcmUgdGhlIGNvbnRleHQgb2YgdGhlIG5ldyB0YXNrLiAqLw0KLSAgICBwb3J0UkVTVE9SRV9DT05URVhUKCk7DQotDQotICAgIC8qIEVuYWJsZSBpbnRlcnJ1cHRzICovDQotICAgIF9fRUkoKTsNCi19DQorCS8qIEVuYWJsZSBpbnRlcnJ1cHRzICovDQorCV9fRUkoKTsNCit9CQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL1NvZnR1bmUvTUI5NjM0MC9wb3J0bWFjcm8uaCBiL3BvcnRhYmxlL1NvZnR1bmUvTUI5NjM0MC9wb3J0bWFjcm8uaAppbmRleCA4NGYzYmVjLi43YjI3ZjUxIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9Tb2Z0dW5lL01COTYzNDAvcG9ydG1hY3JvLmgKKysrIGIvcG9ydGFibGUvU29mdHVuZS9NQjk2MzQwL3BvcnRtYWNyby5oCkBAIC0zMywxMSArMzMsMTEgQEAKICNpbmNsdWRlIDxzdGRkZWYuaD4NCiANCiAvKiBDb25zdGFudHMgZGVub3RpbmcgdGhlIGF2YWlsYWJsZSBtZW1vcnkgbW9kZWxzLiAgVGhlc2UgYXJlIHVzZWQgd2l0aGluDQotICogRnJlZVJUT1NDb25maWcuaCB0byBzZXQgdGhlIGNvbmZpZ01FTU1PREVMIHZhbHVlLiAqLw0KLSNkZWZpbmUgcG9ydFNNQUxMICAgICAgMA0KLSNkZWZpbmUgcG9ydE1FRElVTSAgICAgMQ0KLSNkZWZpbmUgcG9ydENPTVBBQ1QgICAgMg0KLSNkZWZpbmUgcG9ydExBUkdFICAgICAgMw0KK0ZyZWVSVE9TQ29uZmlnLmggdG8gc2V0IHRoZSBjb25maWdNRU1NT0RFTCB2YWx1ZS4gKi8NCisjZGVmaW5lIHBvcnRTTUFMTCAgICAgMA0KKyNkZWZpbmUgcG9ydE1FRElVTSAgICAxDQorI2RlZmluZSBwb3J0Q09NUEFDVCAgIDINCisjZGVmaW5lIHBvcnRMQVJHRSAgICAgMw0KIA0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCkBAIC01MSw2NSArNTEsNjYgQEAKICAqLw0KIA0KIC8qIFR5cGUgZGVmaW5pdGlvbnMuICovDQotI2RlZmluZSBwb3J0Q0hBUiAgICAgICAgICBjaGFyDQotI2RlZmluZSBwb3J0RkxPQVQgICAgICAgICBmbG9hdA0KLSNkZWZpbmUgcG9ydERPVUJMRSAgICAgICAgZG91YmxlDQotI2RlZmluZSBwb3J0TE9ORyAgICAgICAgICBsb25nDQotI2RlZmluZSBwb3J0U0hPUlQgICAgICAgICBzaG9ydA0KLSNkZWZpbmUgcG9ydFNUQUNLX1RZUEUgICAgdWludDE2X3QNCi0jZGVmaW5lIHBvcnRCQVNFX1RZUEUgICAgIHNob3J0DQorI2RlZmluZSBwb3J0Q0hBUgkJY2hhcg0KKyNkZWZpbmUgcG9ydEZMT0FUCQlmbG9hdA0KKyNkZWZpbmUgcG9ydERPVUJMRQkJZG91YmxlDQorI2RlZmluZSBwb3J0TE9ORwkJbG9uZw0KKyNkZWZpbmUgcG9ydFNIT1JUCQlzaG9ydA0KKyNkZWZpbmUgcG9ydFNUQUNLX1RZUEUJdWludDE2X3QNCisjZGVmaW5lIHBvcnRCQVNFX1RZUEUJc2hvcnQNCiANCi10eXBlZGVmIHBvcnRTVEFDS19UWVBFICAgU3RhY2tUeXBlX3Q7DQotdHlwZWRlZiBzaG9ydCAgICAgICAgICAgIEJhc2VUeXBlX3Q7DQotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgIFVCYXNlVHlwZV90Ow0KK3R5cGVkZWYgcG9ydFNUQUNLX1RZUEUgU3RhY2tUeXBlX3Q7DQordHlwZWRlZiBzaG9ydCBCYXNlVHlwZV90Ow0KK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgVUJhc2VUeXBlX3Q7DQogDQogDQotI2lmICggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCi0gICAgdHlwZWRlZiB1aW50MTZfdCAgICAgVGlja1R5cGVfdDsNCi0gICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICggVGlja1R5cGVfdCApIDB4ZmZmZg0KKyNpZiggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCisJdHlwZWRlZiB1aW50MTZfdCBUaWNrVHlwZV90Ow0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQogI2Vsc2UNCi0gICAgdHlwZWRlZiB1aW50MzJfdCAgICAgVGlja1R5cGVfdDsNCi0gICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTA0KKwl0eXBlZGVmIHVpbnQzMl90IFRpY2tUeXBlX3Q7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwNCiAjZW5kaWYNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBDcml0aWNhbCBzZWN0aW9uIGhhbmRsaW5nLiAqLw0KICNpZiBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZICE9IDYNCi0gICAgI2Vycm9yIGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkgKHNldCBpbiBGcmVlUlRPU0NvbmZpZy5oKSBtdXN0IG1hdGNoIHRoZSBJTE0gdmFsdWUgc2V0IGluIHRoZSBmb2xsb3dpbmcgbGluZSAtICMwNkggYmVpbmcgdGhlIGRlZmF1bHQuDQorCSNlcnJvciBjb25maWdLRVJORUxfSU5URVJSVVBUX1BSSU9SSVRZIChzZXQgaW4gRnJlZVJUT1NDb25maWcuaCkgbXVzdCBtYXRjaCB0aGUgSUxNIHZhbHVlIHNldCBpbiB0aGUgZm9sbG93aW5nIGxpbmUgLSAjMDZIIGJlaW5nIHRoZSBkZWZhdWx0Lg0KICNlbmRpZg0KLSNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpICAgIF9fYXNtKCAiIE1PViBJTE0sICMwNmggIiApDQotI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKSAgICAgX19hc20oICIgTU9WIElMTSwgIzA3aCAiICkNCisjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKQlfX2FzbSgiIE1PViBJTE0sICMwNmggIikNCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpCQlfX2FzbSgiIE1PViBJTE0sICMwN2ggIikNCiANCi0jZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpICAgIFwNCi0gICAgeyBfX2FzbSggIiBQVVNIVyBQUyAiICk7ICAgIFwNCi0gICAgICBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7IFwNCi0gICAgfQ0KKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkJCQkJCQkJCVwNCisJCXsJX19hc20oIiBQVVNIVyBQUyAiKTsJCQkJCQkJXA0KKwkJCXBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsJCQkJCQlcDQorCQl9DQogDQotI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpIFwNCi0gICAgeyBfX2FzbSggIiBQT1BXIFBTICIgKTsgXA0KLSAgICB9DQorI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpCQkJCQkJCQkJXA0KKwkJewlfX2FzbSgiIFBPUFcgUFMgIik7CQkJCQkJCQlcDQorCQl9DQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogQXJjaGl0ZWN0dXJlIHNwZWNpZmljcy4gKi8NCi0jZGVmaW5lIHBvcnRTVEFDS19HUk9XVEggICAgICAoIC0xICkNCi0jZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUyAgICAoICggVGlja1R5cGVfdCApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KLSNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UICAgIDINCi0jZGVmaW5lIHBvcnROT1AoKSAgICBfX2FzbSggIiBOT1AgIiApOw0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJCSggLTEgKQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TCQkJKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCisjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVAkJCTINCisjZGVmaW5lIHBvcnROT1AoKQkJCQkJX19hc20oICIgTk9QICIgKTsNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBwb3J0WUlFTEQoKSB1c2VzIFNXIGludGVycnVwdCAqLw0KLSNkZWZpbmUgcG9ydFlJRUxEKCkgICAgICAgICAgICAgX19hc20oICIgSU5UICMxMjIgIiApOw0KKyNkZWZpbmUgcG9ydFlJRUxEKCkJCQkJCV9fYXNtKCAiIElOVCAjMTIyICIgKTsNCiANCiAvKiBwb3J0WUlFTERfRlJPTV9JU1IoKSB1c2VzIGRlbGF5ZWQgaW50ZXJydXB0ICovDQotI2RlZmluZSBwb3J0WUlFTERfRlJPTV9JU1IoKSAgICBfX2FzbSggIiBTRVRCICAwM0E0SDowICIgKTsNCisjZGVmaW5lIHBvcnRZSUVMRF9GUk9NX0lTUigpCQkgX19hc20oICIgU0VUQiAgMDNBNEg6MCAiICk7DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQotI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQotI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICAgICAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KIA0KLSNkZWZpbmUgcG9ydE1JTklNQUxfU1RBQ0tfU0laRSAgICBjb25maWdNSU5JTUFMX1NUQUNLX1NJWkUNCisjZGVmaW5lIHBvcnRNSU5JTUFMX1NUQUNLX1NJWkUgY29uZmlnTUlOSU1BTF9TVEFDS19TSVpFDQogDQogDQogI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvVGhpcmRQYXJ0eS9DREsvVC1IRUFEX0NLODAyL3BvcnQuYyBiL3BvcnRhYmxlL1RoaXJkUGFydHkvQ0RLL1QtSEVBRF9DSzgwMi9wb3J0LmMKaW5kZXggNmNkMGNjOS4uZGI4ZDUwZiAxMDA2NDQKLS0tIGEvcG9ydGFibGUvVGhpcmRQYXJ0eS9DREsvVC1IRUFEX0NLODAyL3BvcnQuYworKysgYi9wb3J0YWJsZS9UaGlyZFBhcnR5L0NESy9ULUhFQURfQ0s4MDIvcG9ydC5jCkBAIC0yNSw0MSArMjUsMzkgQEAKICNpbmNsdWRlICJGcmVlUlRPUy5oIgogI2luY2x1ZGUgInRhc2suaCIKIAotZXh0ZXJuIHZvaWQgdlBvcnRTdGFydFRhc2soIHZvaWQgKTsKK2V4dGVybiB2b2lkIHZQb3J0U3RhcnRUYXNrKHZvaWQpOwogCiAvKiBVc2VkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIG51bWJlciBvZiBuZXN0ZWQgY2FsbHMgdG8gdGFza0VOVEVSX0NSSVRJQ0FMKCkuICBUaGlzCi0gKiB3aWxsIGJlIHNldCB0byAwIHByaW9yIHRvIHRoZSBmaXJzdCB0YXNrIGJlaW5nIHN0YXJ0ZWQuICovCit3aWxsIGJlIHNldCB0byAwIHByaW9yIHRvIHRoZSBmaXJzdCB0YXNrIGJlaW5nIHN0YXJ0ZWQuICovCiBwb3J0TE9ORyB1bENyaXRpY2FsTmVzdGluZyA9IDB4OTk5OVVMOwogCiAvKiBVc2VkIHRvIHJlY29yZCBvbmUgdGFjayB3YW50IHRvIHN3dGljaCB0YXNrIGFmdGVyIGVudGVyIGNyaXRpY2FsIGFyZWEsIHdlIG5lZWQga25vdyBpdAogICogYW5kIGltcGxlbWVudCB0YXNrIHN3aXRjaCBhZnRlciBleGl0IGNyaXRpY2FsIGFyZWEgKi8KIHBvcnRMT05HIHBlbmRzdmZsYWcgPSAwOwogCi1TdGFja1R5cGVfdCAqIHB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKiBweFRvcE9mU3RhY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFza0Z1bmN0aW9uX3QgcHhDb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQorU3RhY2tUeXBlX3QgKnB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKiBweFRvcE9mU3RhY2ssIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzICkKIHsKLSAgICBTdGFja1R5cGVfdCAqIHN0ayA9IE5VTEw7CisgICAgU3RhY2tUeXBlX3QgKnN0ayAgPSBOVUxMOwogCiAgICAgc3RrID0gcHhUb3BPZlN0YWNrOwogCi0gICAgKiggLS1zdGsgKSA9ICggdWludDMyX3QgKSBweENvZGU7ICAgICAgIC8qIEVudHJ5IFBvaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICooIC0tc3RrICkgPSAoIHVpbnQzMl90ICkgMHhFMDAwMDE0MEw7ICAvKiBQU1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAqKCAtLXN0ayApID0gKCB1aW50MzJfdCApIDB4RkZGRkZGRkVMOyAgLyogUjE1IChMUikgKGluaXQgdmFsdWUgd2lsbCBjYXVzZSBmYXVsdCBpZiBldmVyIHVzZWQpICovCi0gICAgKiggLS1zdGsgKSA9ICggdWludDMyX3QgKSAweDEzMTMxMzEzTDsgIC8qIFIxMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICooIC0tc3RrICkgPSAoIHVpbnQzMl90ICkgMHgxMjEyMTIxMkw7ICAvKiBSMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAqKCAtLXN0ayApID0gKCB1aW50MzJfdCApIDB4MTExMTExMTFMOyAgLyogUjExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgKiggLS1zdGsgKSA9ICggdWludDMyX3QgKSAweDEwMTAxMDEwTDsgIC8qIFIxMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICooIC0tc3RrICkgPSAoIHVpbnQzMl90ICkgMHgwOTA5MDkwOUw7ICAvKiBSOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAqKCAtLXN0ayApID0gKCB1aW50MzJfdCApIDB4MDgwODA4MDhMOyAgLyogUjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgKiggLS1zdGsgKSA9ICggdWludDMyX3QgKSAweDA3MDcwNzA3TDsgIC8qIFI3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICooIC0tc3RrICkgPSAoIHVpbnQzMl90ICkgMHgwNjA2MDYwNkw7ICAvKiBSNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAqKCAtLXN0ayApID0gKCB1aW50MzJfdCApIDB4MDUwNTA1MDVMOyAgLyogUjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgKiggLS1zdGsgKSA9ICggdWludDMyX3QgKSAweDA0MDQwNDA0TDsgIC8qIFI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICooIC0tc3RrICkgPSAoIHVpbnQzMl90ICkgMHgwMzAzMDMwM0w7ICAvKiBSMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAqKCAtLXN0ayApID0gKCB1aW50MzJfdCApIDB4MDIwMjAyMDJMOyAgLyogUjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgKiggLS1zdGsgKSA9ICggdWludDMyX3QgKSAweDAxMDEwMTAxTDsgIC8qIFIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICooIC0tc3RrICkgPSAoIHVpbnQzMl90ICkgcHZQYXJhbWV0ZXJzOyAvKiBSMCA6IGFyZ3VtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAqKC0tc3RrKSAgPSAodWludDMyX3QpcHhDb2RlOyAgICAgICAgICAgIC8qIEVudHJ5IFBvaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICooLS1zdGspICA9ICh1aW50MzJfdCkweEUwMDAwMTQwTDsgICAgICAgLyogUFNSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgKigtLXN0aykgID0gKHVpbnQzMl90KTB4RkZGRkZGRkVMOyAgICAgICAvKiBSMTUgKExSKSAoaW5pdCB2YWx1ZSB3aWxsIGNhdXNlIGZhdWx0IGlmIGV2ZXIgdXNlZCkgKi8KKyAgICAqKC0tc3RrKSAgPSAodWludDMyX3QpMHgxMzEzMTMxM0w7ICAgICAgIC8qIFIxMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICooLS1zdGspICA9ICh1aW50MzJfdCkweDEyMTIxMjEyTDsgICAgICAgLyogUjEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgKigtLXN0aykgID0gKHVpbnQzMl90KTB4MTExMTExMTFMOyAgICAgICAvKiBSMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAqKC0tc3RrKSAgPSAodWludDMyX3QpMHgxMDEwMTAxMEw7ICAgICAgIC8qIFIxMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICooLS1zdGspICA9ICh1aW50MzJfdCkweDA5MDkwOTA5TDsgICAgICAgLyogUjkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgKigtLXN0aykgID0gKHVpbnQzMl90KTB4MDgwODA4MDhMOyAgICAgICAvKiBSOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAqKC0tc3RrKSAgPSAodWludDMyX3QpMHgwNzA3MDcwN0w7ICAgICAgIC8qIFI3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICooLS1zdGspICA9ICh1aW50MzJfdCkweDA2MDYwNjA2TDsgICAgICAgLyogUjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgKigtLXN0aykgID0gKHVpbnQzMl90KTB4MDUwNTA1MDVMOyAgICAgICAvKiBSNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAqKC0tc3RrKSAgPSAodWludDMyX3QpMHgwNDA0MDQwNEw7ICAgICAgIC8qIFI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICooLS1zdGspICA9ICh1aW50MzJfdCkweDAzMDMwMzAzTDsgICAgICAgLyogUjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgKigtLXN0aykgID0gKHVpbnQzMl90KTB4MDIwMjAyMDJMOyAgICAgICAvKiBSMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAqKC0tc3RrKSAgPSAodWludDMyX3QpMHgwMTAxMDEwMUw7ICAgICAgIC8qIFIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICooLS1zdGspICA9ICh1aW50MzJfdClwdlBhcmFtZXRlcnM7ICAgICAgLyogUjAgOiBhcmd1bWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKICAgICByZXR1cm4gc3RrOwogfQpAQCAtODIsMjUgKzgwLDIxIEBACiB2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCggdm9pZCApCiB7CiAgICAgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOwotICAgIHVsQ3JpdGljYWxOZXN0aW5nKys7CisgICAgdWxDcml0aWNhbE5lc3RpbmcgKys7CiB9CiAKIHZvaWQgdlBvcnRFeGl0Q3JpdGljYWwoIHZvaWQgKQogewotICAgIGlmKCB1bENyaXRpY2FsTmVzdGluZyA9PSAwICkKLSAgICB7Ci0gICAgICAgIHdoaWxlKCAxICkKLSAgICAgICAgewotICAgICAgICB9CisgICAgaWYgKHVsQ3JpdGljYWxOZXN0aW5nID09IDApIHsKKyAgICAgICAgd2hpbGUoMSk7CiAgICAgfQogCi0gICAgdWxDcml0aWNhbE5lc3RpbmctLTsKLQotICAgIGlmKCB1bENyaXRpY2FsTmVzdGluZyA9PSAwICkKKyAgICB1bENyaXRpY2FsTmVzdGluZyAtLTsKKyAgICBpZiAodWxDcml0aWNhbE5lc3RpbmcgPT0gMCkKICAgICB7CiAgICAgICAgIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpOwogCi0gICAgICAgIGlmKCBwZW5kc3ZmbGFnICkKKyAgICAgICAgaWYgKHBlbmRzdmZsYWcpCiAgICAgICAgIHsKICAgICAgICAgICAgIHBlbmRzdmZsYWcgPSAwOwogICAgICAgICAgICAgcG9ydFlJRUxEKCk7CkBAIC0xMDksMzAgKzEwMywzMCBAQAogfQogCiAjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMAotICAgIHZvaWQgeFBvcnRTeXNUaWNrSGFuZGxlciggdm9pZCApCi0gICAgewotICAgICAgICBwb3J0TE9ORyB1bER1bW15Owordm9pZCB4UG9ydFN5c1RpY2tIYW5kbGVyKCB2b2lkICkKK3sKKyAgICBwb3J0TE9ORyB1bER1bW15OwogCi0gICAgICAgIHVsRHVtbXkgPSBwb3J0U0VUX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCk7Ci0gICAgICAgIHhUYXNrSW5jcmVtZW50VGljaygpOwotICAgICAgICBwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoIHVsRHVtbXkgKTsKLSAgICB9CisgICAgdWxEdW1teSA9IHBvcnRTRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKTsKKyAgICB4VGFza0luY3JlbWVudFRpY2soKTsKKyAgICBwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoIHVsRHVtbXkgKTsKK30KIAogI2Vsc2UKLSAgICB2b2lkIHhQb3J0U3lzVGlja0hhbmRsZXIoIHZvaWQgKQotICAgIHsKLSAgICAgICAgcG9ydExPTkcgdWxEdW1teTsKK3ZvaWQgeFBvcnRTeXNUaWNrSGFuZGxlciggdm9pZCApCit7CisgICAgcG9ydExPTkcgdWxEdW1teTsKIAotICAgICAgICB1bER1bW15ID0gcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpOworICAgIHVsRHVtbXkgPSBwb3J0U0VUX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCk7CisgICAgeworICAgICAgICBpZiAoeFRhc2tJbmNyZW1lbnRUaWNrKCkgIT0gcGRGQUxTRSkKICAgICAgICAgewotICAgICAgICAgICAgaWYoIHhUYXNrSW5jcmVtZW50VGljaygpICE9IHBkRkFMU0UgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBvcnRZSUVMRF9GUk9NX0lTUiggcGRUUlVFICk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBwb3J0WUlFTERfRlJPTV9JU1IocGRUUlVFKTsKICAgICAgICAgfQotICAgICAgICBwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoIHVsRHVtbXkgKTsKICAgICB9Ci0jZW5kaWYgLyogaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMCAqLworICAgIHBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUiggdWxEdW1teSApOworfQorI2VuZGlmCiAKIHZvaWQgdlBvcnRZaWVsZEhhbmRsZXIoIHZvaWQgKQogewpAQCAtMTQ1LDE3ICsxMzksMTIgQEAKICAgICBwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoIHVsU2F2ZWRJbnRlcnJ1cHRNYXNrICk7CiB9CiAKLV9fYXR0cmlidXRlX18oICggd2VhayApICkgdm9pZCB2QXBwbGljYXRpb25TdGFja092ZXJmbG93SG9vayggeFRhc2tIYW5kbGUgKiBweFRhc2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25lZCBwb3J0Q0hBUiAqIHBjVGFza05hbWUgKQorX19hdHRyaWJ1dGVfXygod2VhaykpIHZvaWQgdkFwcGxpY2F0aW9uU3RhY2tPdmVyZmxvd0hvb2soIHhUYXNrSGFuZGxlICpweFRhc2ssIHNpZ25lZCBwb3J0Q0hBUiAqcGNUYXNrTmFtZSApCiB7Ci0gICAgZm9yKCA7IDsgKQotICAgIHsKLSAgICB9CisgICAgZm9yKDs7KTsKIH0KIAotX19hdHRyaWJ1dGVfXyggKCB3ZWFrICkgKSB2b2lkIHZBcHBsaWNhdGlvbk1hbGxvY0ZhaWxlZEhvb2soIHZvaWQgKQorX19hdHRyaWJ1dGVfXygod2VhaykpIHZvaWQgdkFwcGxpY2F0aW9uTWFsbG9jRmFpbGVkSG9vayggdm9pZCApCiB7Ci0gICAgZm9yKCA7IDsgKQotICAgIHsKLSAgICB9CisgICAgZm9yKDs7KTsKIH0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL1RoaXJkUGFydHkvQ0RLL1QtSEVBRF9DSzgwMi9wb3J0bWFjcm8uaCBiL3BvcnRhYmxlL1RoaXJkUGFydHkvQ0RLL1QtSEVBRF9DSzgwMi9wb3J0bWFjcm8uaAppbmRleCA1ODQwZWExLi42ZGIzN2NjIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9UaGlyZFBhcnR5L0NESy9ULUhFQURfQ0s4MDIvcG9ydG1hY3JvLmgKKysrIGIvcG9ydGFibGUvVGhpcmRQYXJ0eS9DREsvVC1IRUFEX0NLODAyL3BvcnRtYWNyby5oCkBAIC0yMiwxNyArMjIsMTcgQEAKICAqLwogCiAjaWZuZGVmIFBPUlRNQUNST19ICi0gICAgI2RlZmluZSBQT1JUTUFDUk9fSAorI2RlZmluZSBQT1JUTUFDUk9fSAogCi0gICAgI2luY2x1ZGUgPHN0ZGxpYi5oPgotICAgICNpbmNsdWRlIDxzdGRpbnQuaD4KLSAgICAjaW5jbHVkZSA8Y3NpX2NvcmUuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxjc2lfY29yZS5oPgogCi0gICAgZXh0ZXJuIHZvaWQgdlBvcnRZaWVsZCggdm9pZCApOwotICAgICNpZmRlZiBfX2NwbHVzcGx1cwotICAgICAgICBjbGFzcyB2UG9ydFlpZWxkOwotICAgICAgICBleHRlcm4gIkMiIHsKLSAgICAjZW5kaWYKK2V4dGVybiB2b2lkIHZQb3J0WWllbGQodm9pZCk7CisjaWZkZWYgX19jcGx1c3BsdXMKK2NsYXNzIHZQb3J0WWllbGQ7CitleHRlcm4gIkMiIHsKKyNlbmRpZgogCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQ2LDExNiArNDYsMTE0IEBACiAgKi8KIAogLyogVHlwZSBkZWZpbml0aW9ucy4gKi8KLSAgICAjZGVmaW5lIHBvcnRDSEFSICAgICAgICAgIGNoYXIKLSAgICAjZGVmaW5lIHBvcnRGTE9BVCAgICAgICAgIGZsb2F0Ci0gICAgI2RlZmluZSBwb3J0RE9VQkxFICAgICAgICBkb3VibGUKLSAgICAjZGVmaW5lIHBvcnRMT05HICAgICAgICAgIGxvbmcKLSAgICAjZGVmaW5lIHBvcnRTSE9SVCAgICAgICAgIHNob3J0Ci0gICAgI2RlZmluZSBwb3J0U1RBQ0tfVFlQRSAgICB1aW50MzJfdAotICAgICNkZWZpbmUgcG9ydEJBU0VfVFlQRSAgICAgbG9uZworI2RlZmluZSBwb3J0Q0hBUiAgICAgICAgY2hhcgorI2RlZmluZSBwb3J0RkxPQVQgICAgICAgZmxvYXQKKyNkZWZpbmUgcG9ydERPVUJMRSAgICAgIGRvdWJsZQorI2RlZmluZSBwb3J0TE9ORyAgICAgICAgbG9uZworI2RlZmluZSBwb3J0U0hPUlQgICAgICAgc2hvcnQKKyNkZWZpbmUgcG9ydFNUQUNLX1RZUEUgIHVpbnQzMl90CisjZGVmaW5lIHBvcnRCQVNFX1RZUEUgICBsb25nCiAKLSAgICB0eXBlZGVmIHBvcnRTVEFDS19UWVBFICAgU3RhY2tUeXBlX3Q7Ci0gICAgdHlwZWRlZiBsb25nICAgICAgICAgICAgIEJhc2VUeXBlX3Q7Ci0gICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nICAgIFVCYXNlVHlwZV90OwotICAgIHR5cGVkZWYgdm9pZCAoKiBwb3J0dmVjdG9yZnVuYykoIHZvaWQgKTsKK3R5cGVkZWYgcG9ydFNUQUNLX1RZUEUgU3RhY2tUeXBlX3Q7Cit0eXBlZGVmIGxvbmcgQmFzZVR5cGVfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBVQmFzZVR5cGVfdDsKK3R5cGVkZWYgdm9pZCAoKnBvcnR2ZWN0b3JmdW5jKSh2b2lkKTsKIAotICAgICNpZiAoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApCi0gICAgICAgIHR5cGVkZWYgdWludDE2X3QgICAgIFRpY2tUeXBlX3Q7Ci0gICAgICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmYKLSAgICAjZWxzZQotICAgICAgICB0eXBlZGVmIHVpbnQzMl90ICAgICBUaWNrVHlwZV90OwotICAgICAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMCi0gICAgI2VuZGlmCisjaWYoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApCisgICAgdHlwZWRlZiB1aW50MTZfdCAgVGlja1R5cGVfdDsKKyAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmCisjZWxzZQorICAgIHR5cGVkZWYgdWludDMyX3QgIFRpY2tUeXBlX3Q7CisgICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTAorI2VuZGlmCiAKIAogLyogSGFyZHdhcmUgc3BlY2lmaWNzLiAqLwotICAgICNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UICAgIDgKLSAgICAjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEggICAgICAtMQotICAgICNkZWZpbmUgcG9ydE1TX1BFUklPRF9USUNLICAgIDEwCi0gICAgI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMgICAgKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkKKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UICAgICAgICAgIDgKKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSCAgICAgICAgICAgIC0xCisjZGVmaW5lIHBvcnRNU19QRVJJT0RfVElDSyAgICAgICAgICAxMAorI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMJICAgICAgICAoICggVGlja1R5cGVfdCApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQogCiAKLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgdlBvcnRFbmFibGVJbnRlcnJ1cHQoIHZvaWQgKQotICAgIHsKLSAgICAgICAgX19lbmFibGVfaXJxKCk7Ci0gICAgfQorc3RhdGljIGlubGluZSB2b2lkIHZQb3J0RW5hYmxlSW50ZXJydXB0KCB2b2lkICkKK3sKKyAgICBfX2VuYWJsZV9pcnEoKTsKK30KIAotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCB2UG9ydERpc2FibGVJbnRlcnJ1cHQoIHZvaWQgKQotICAgIHsKLSAgICAgICAgX19kaXNhYmxlX2lycSgpOwotICAgIH0KK3N0YXRpYyBpbmxpbmUgdm9pZCB2UG9ydERpc2FibGVJbnRlcnJ1cHQoIHZvaWQgKQoreworICAgIF9fZGlzYWJsZV9pcnEoKTsKK30KIAotICAgIHN0YXRpYyBpbmxpbmUgcG9ydExPTkcgR2V0Q3VycmVudFBTUiggdm9pZCApCi0gICAgewotICAgICAgICByZXR1cm4gX19nZXRfUFNSKCk7Ci0gICAgfQorc3RhdGljIGlubGluZSBwb3J0TE9ORyBHZXRDdXJyZW50UFNSICh2b2lkKQoreworICAgIHJldHVybiBfX2dldF9QU1IoKTsKK30KIAotICAgIHN0YXRpYyBpbmxpbmUgcG9ydExPTkcgU2F2ZUxvY2FsUFNSKCB2b2lkICkKLSAgICB7Ci0gICAgICAgIHBvcnRMT05HIGZsYWdzID0gX19nZXRfUFNSKCk7CitzdGF0aWMgaW5saW5lIHBvcnRMT05HIFNhdmVMb2NhbFBTUiAodm9pZCkKK3sKKyAgICBwb3J0TE9ORyBmbGFncyA9IF9fZ2V0X1BTUigpOworICAgIF9fZGlzYWJsZV9pcnEoKTsKKyAgICByZXR1cm4gZmxhZ3M7Cit9CiAKLSAgICAgICAgX19kaXNhYmxlX2lycSgpOwotICAgICAgICByZXR1cm4gZmxhZ3M7Ci0gICAgfQorc3RhdGljIGlubGluZSB2b2lkIFJlc3RvcmVMb2NhbFBTUiAocG9ydExPTkcgbmV3TWFzaykKK3sKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygKKyAgICAibXRjciAgICUwLCBwc3IgXG4iCisgICAgOgorICAgIDoiciIgKG5ld01hc2spCisgICAgOiJtZW1vcnkiCisgICAgKTsKK30KIAotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBSZXN0b3JlTG9jYWxQU1IoIHBvcnRMT05HIG5ld01hc2sgKQotICAgIHsKLSAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAotICAgICAgICAgICAgIm10Y3IgICAlMCwgcHNyIFxuIgotICAgICAgICAgICAgOgotICAgICAgICAgICAgOiAiciIgKCBuZXdNYXNrICkKLSAgICAgICAgICAgIDogIm1lbW9yeSIKLSAgICAgICAgICAgICk7Ci0gICAgfQorZXh0ZXJuIHZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKCB2b2lkICk7CitleHRlcm4gdm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApOworZXh0ZXJuIF9fYXR0cmlidXRlX18oKG5ha2VkKSkgdm9pZCBjcHVfeWVpbGQodm9pZCk7CiAKLSAgICBleHRlcm4gdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKTsKLSAgICBleHRlcm4gdm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApOwotICAgIGV4dGVybiBfX2F0dHJpYnV0ZV9fKCAoIG5ha2VkICkgKSB2b2lkIGNwdV95ZWlsZCggdm9pZCApOworI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgICAgICAgICAgICAgICAgdlBvcnREaXNhYmxlSW50ZXJydXB0KCkKKyNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkgICAgICAgICAgICAgICAgIHZQb3J0RW5hYmxlSW50ZXJydXB0KCkKKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgICAgICAgICAgICAgICAgICAgIHZQb3J0RW50ZXJDcml0aWNhbCgpCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkgICAgICAgICAgICAgICAgICAgICB2UG9ydEV4aXRDcml0aWNhbCgpCisjZGVmaW5lIHBvcnRTRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKSAgICAgICBTYXZlTG9jYWxQU1IoKQorI2RlZmluZSBwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoYSkgICAgUmVzdG9yZUxvY2FsUFNSKGEpCiAKLSAgICAjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAgICAgICAgICAgICAgICAgIHZQb3J0RGlzYWJsZUludGVycnVwdCgpCi0gICAgI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKSAgICAgICAgICAgICAgICAgICB2UG9ydEVuYWJsZUludGVycnVwdCgpCi0gICAgI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKSAgICAgICAgICAgICAgICAgICAgICB2UG9ydEVudGVyQ3JpdGljYWwoKQotICAgICNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKSAgICAgICAgICAgICAgICAgICAgICAgdlBvcnRFeGl0Q3JpdGljYWwoKQotICAgICNkZWZpbmUgcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpICAgICAgICAgU2F2ZUxvY2FsUFNSKCkKLSAgICAjZGVmaW5lIHBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUiggYSApICAgIFJlc3RvcmVMb2NhbFBTUiggYSApCisjZGVmaW5lIHBvcnROT1AoKSAgICAgICAgICAgICAgICAgICBhc20oIm5vcCIpCiAKLSAgICAjZGVmaW5lIHBvcnROT1AoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzbSAoICJub3AiICkKK2V4dGVybiBwb3J0TE9ORyB1bENyaXRpY2FsTmVzdGluZzsKK2V4dGVybiBwb3J0TE9ORyBwZW5kc3ZmbGFnOwogCi0gICAgZXh0ZXJuIHBvcnRMT05HIHVsQ3JpdGljYWxOZXN0aW5nOwotICAgIGV4dGVybiBwb3J0TE9ORyBwZW5kc3ZmbGFnOwotCi0gICAgI2RlZmluZSBwb3J0WUlFTEQoKSAgICAgICAgICBcCi0gICAgaWYoIHVsQ3JpdGljYWxOZXN0aW5nID09IDAgKSBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHZQb3J0WWllbGQoKTsgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHBlbmRzdmZsYWcgPSAxOyAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgcG9ydE5PUCgpOyBwb3J0Tk9QKCkKKyNkZWZpbmUgcG9ydFlJRUxEKCkgICAgICAgICAgICAgICAgIGlmICh1bENyaXRpY2FsTmVzdGluZyA9PSAwKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZQb3J0WWllbGQoKTsgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbmRzdmZsYWcgPSAxOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydE5PUCgpO3BvcnROT1AoKQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovCi0gICAgI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApIF9fYXR0cmlidXRlX18oICggbm9yZXR1cm4gKSApCi0gICAgI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICAgICAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKSBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLSAgICAjZGVmaW5lIHBvcnRFTkRfU1dJVENISU5HX0lTUiggeFN3aXRjaFJlcXVpcmVkICkgXAotICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmKCB4U3dpdGNoUmVxdWlyZWQgIT0gcGRGQUxTRSApICAgICAgICAgICAgIFwKLSAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgcG9ydFlJRUxEKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9IHdoaWxlKCAwICkKKyNkZWZpbmUgcG9ydEVORF9TV0lUQ0hJTkdfSVNSKCB4U3dpdGNoUmVxdWlyZWQgKSAgICBkbyB7ICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCB4U3dpdGNoUmVxdWlyZWQgIT0gcGRGQUxTRSApICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydFlJRUxEKCk7ICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfXdoaWxlKDApCiAKLSAgICAjZGVmaW5lIHBvcnRZSUVMRF9GUk9NX0lTUiggYSApICAgIHZUYXNrU3dpdGNoQ29udGV4dCgpCisjZGVmaW5lIHBvcnRZSUVMRF9GUk9NX0lTUiggYSApICAgICB2VGFza1N3aXRjaENvbnRleHQoKQogCiAKIAotICAgICNpZmRlZiBfX2NwbHVzcGx1cwotICAgICAgICB9Ci0gICAgI2VuZGlmCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgogCiAjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8KKwpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvVGhpcmRQYXJ0eS9HQ0MvQVJDX0VNX0hTL2ZyZWVydG9zX3Rscy5jIGIvcG9ydGFibGUvVGhpcmRQYXJ0eS9HQ0MvQVJDX0VNX0hTL2ZyZWVydG9zX3Rscy5jCmluZGV4IDkwMDY5MWMuLjI4YmYwNDggMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL1RoaXJkUGFydHkvR0NDL0FSQ19FTV9IUy9mcmVlcnRvc190bHMuYworKysgYi9wb3J0YWJsZS9UaGlyZFBhcnR5L0dDQy9BUkNfRU1fSFMvZnJlZXJ0b3NfdGxzLmMKQEAgLTU0LDcgKzU0LDggQEAKICAgICBleHRlcm4gdm9pZCBfX213X3J1bl90bHNfZHRvcigpOwogICAgIGV4dGVybiB2b2lkIF9fbXdfcnVuX3Rsc19jdG9yKCk7CiAKLWV4dGVybiB1aW50MzJfdCBleGNfbmVzdF9jb3VudDsKKyAgICBleHRlcm4gdWludDMyX3QgZXhjX25lc3RfY291bnQ7CisKIC8qCiAgKiBMaW5rZXIgZ2VuZXJhdGVkIHN5bWJvbHMgdG8gbWFyayAudGxzIHNlY3Rpb24gYWRkcmVzc2VzCiAgKiBmaXJzdCBieXRlIC4uIGxhc3QgYnl0ZQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvVGhpcmRQYXJ0eS9HQ0MvQVJDX0VNX0hTL3BvcnQuYyBiL3BvcnRhYmxlL1RoaXJkUGFydHkvR0NDL0FSQ19FTV9IUy9wb3J0LmMKaW5kZXggYjJlMzcxNi4uMzYwMjAyYSAxMDA2NDQKLS0tIGEvcG9ydGFibGUvVGhpcmRQYXJ0eS9HQ0MvQVJDX0VNX0hTL3BvcnQuYworKysgYi9wb3J0YWJsZS9UaGlyZFBhcnR5L0dDQy9BUkNfRU1fSFMvcG9ydC5jCkBAIC00MSw2ICs0MSw3IEBACiAKIHZvbGF0aWxlIHVuc2lnbmVkIGludCB1bENyaXRpY2FsTmVzdGluZyA9IDk5OVVMOwogdm9sYXRpbGUgdW5zaWduZWQgaW50IGNvbnRleHRfc3dpdGNoX3JlcWZsZzsgLyogdGFzayBjb250ZXh0IHN3aXRjaCByZXF1ZXN0IGZsYWcgaW4gZXhjZXB0aW9ucyBhbmQgaW50ZXJydXB0cyBoYW5kbGluZyAqLworCiAvKioKICAqIFx2YXIgZXhjX25lc3RfY291bnQKICAqIFxicmllZiB0aGUgY291bnRlciBmb3IgZXhjL2ludCBwcm9jZXNzaW5nLCA9MCBubyBpbnQvZXhjCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9UaGlyZFBhcnR5L0dDQy9BUkNfRU1fSFMvcG9ydG1hY3JvLmggYi9wb3J0YWJsZS9UaGlyZFBhcnR5L0dDQy9BUkNfRU1fSFMvcG9ydG1hY3JvLmgKaW5kZXggNmI1MmRlYi4uNWNjM2Y0NiAxMDA2NDQKLS0tIGEvcG9ydGFibGUvVGhpcmRQYXJ0eS9HQ0MvQVJDX0VNX0hTL3BvcnRtYWNyby5oCisrKyBiL3BvcnRhYmxlL1RoaXJkUGFydHkvR0NDL0FSQ19FTV9IUy9wb3J0bWFjcm8uaApAQCAtMjYsMTYgKzI2LDE4IEBACiAgKi8KIAogI2lmbmRlZiBQT1JUTUFDUk9fSAotICAgICNkZWZpbmUgUE9SVE1BQ1JPX0gKKyNkZWZpbmUgUE9SVE1BQ1JPX0gKIAotICAgICNpZmRlZiBfX2NwbHVzcGx1cwotICAgICAgICBleHRlcm4gIkMiIHsKLSAgICAjZW5kaWYKKy8qICpJTkRFTlQtT0ZGKiAqLworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgZXh0ZXJuICJDIiB7CisjZW5kaWYKKy8qICpJTkRFTlQtT04qICovCiAKIC8qIHJlY29yZCBzdGFjayBoaWdoIGFkZHJlc3MgZm9yIHN0YWNrIGNoZWNrICovCi0gICAgI2lmbmRlZiBjb25maWdSRUNPUkRfU1RBQ0tfSElHSF9BRERSRVNTCi0gICAgICAgICNkZWZpbmUgY29uZmlnUkVDT1JEX1NUQUNLX0hJR0hfQUREUkVTUyAgICAxCi0gICAgI2VuZGlmCisjaWZuZGVmIGNvbmZpZ1JFQ09SRF9TVEFDS19ISUdIX0FERFJFU1MKKyAgICAjZGVmaW5lIGNvbmZpZ1JFQ09SRF9TVEFDS19ISUdIX0FERFJFU1MgICAgMQorI2VuZGlmCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIFBvcnQgc3BlY2lmaWMgZGVmaW5pdGlvbnMuCkBAIC00OCw3OCArNTAsNzggQEAKICAqLwogCiAvKiBUeXBlIGRlZmluaXRpb25zLiAqLwotICAgICNkZWZpbmUgcG9ydENIQVIgICAgICAgICAgY2hhcgotICAgICNkZWZpbmUgcG9ydEZMT0FUICAgICAgICAgZmxvYXQKLSAgICAjZGVmaW5lIHBvcnRET1VCTEUgICAgICAgIGRvdWJsZQotICAgICNkZWZpbmUgcG9ydExPTkcgICAgICAgICAgbG9uZwotICAgICNkZWZpbmUgcG9ydFNIT1JUICAgICAgICAgc2hvcnQKLSAgICAjZGVmaW5lIHBvcnRTVEFDS19UWVBFICAgIHVuc2lnbmVkIGludAotICAgICNkZWZpbmUgcG9ydEJBU0VfVFlQRSAgICAgcG9ydExPTkcKKyNkZWZpbmUgcG9ydENIQVIgICAgICAgICAgY2hhcgorI2RlZmluZSBwb3J0RkxPQVQgICAgICAgICBmbG9hdAorI2RlZmluZSBwb3J0RE9VQkxFICAgICAgICBkb3VibGUKKyNkZWZpbmUgcG9ydExPTkcgICAgICAgICAgbG9uZworI2RlZmluZSBwb3J0U0hPUlQgICAgICAgICBzaG9ydAorI2RlZmluZSBwb3J0U1RBQ0tfVFlQRSAgICB1bnNpZ25lZCBpbnQKKyNkZWZpbmUgcG9ydEJBU0VfVFlQRSAgICAgcG9ydExPTkcKIAotICAgICNpZm5kZWYgQXNtCi0gICAgICAgICNkZWZpbmUgQXNtICAgICAgICAgICBfX2FzbV9fIHZvbGF0aWxlCi0gICAgI2VuZGlmCisjaWZuZGVmIEFzbQorICAgICNkZWZpbmUgQXNtICAgICAgICAgICBfX2FzbV9fIHZvbGF0aWxlCisjZW5kaWYKIAogLyoKICAqICBub3JtYWwgY29uc3RhbnRzCiAgKi8KLSAgICAjaWZuZGVmIE5VTEwKLSAgICAgICAgI2RlZmluZSBOVUxMICAgIDAgICAgICAgLyogaW52YWxpZCBwb2ludGVyICovCi0gICAgI2VuZGlmIC8qIE5VTEwgKi8KKyNpZm5kZWYgTlVMTAorICAgICNkZWZpbmUgTlVMTCAgICAwICAgICAgICAgICAvKiBpbnZhbGlkIHBvaW50ZXIgKi8KKyNlbmRpZiAvKiBOVUxMICovCiAKLSAgICAjaWZuZGVmIHRydWUKLSAgICAgICAgI2RlZmluZSB0cnVlICAgIDEgICAgICAgLyogdHJ1ZSAqLwotICAgICNlbmRpZiAvKiB0cnVlICovCisjaWZuZGVmIHRydWUKKyAgICAjZGVmaW5lIHRydWUgICAgMSAgICAgICAgICAgLyogdHJ1ZSAqLworI2VuZGlmIC8qIHRydWUgKi8KIAotICAgICNpZm5kZWYgZmFsc2UKLSAgICAgICAgI2RlZmluZSBmYWxzZSAgICAwICAgICAgLyogZmFsc2UgKi8KLSAgICAjZW5kaWYgLyogZmFsc2UgKi8KKyNpZm5kZWYgZmFsc2UKKyAgICAjZGVmaW5lIGZhbHNlICAgIDAgICAgICAgICAgLyogZmFsc2UgKi8KKyNlbmRpZiAvKiBmYWxzZSAqLwogCi0gICAgdHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSAgICAgU3RhY2tUeXBlX3Q7Ci0gICAgdHlwZWRlZiBsb25nICAgICAgICAgICAgICAgQmFzZVR5cGVfdDsKLSAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgICAgICBVQmFzZVR5cGVfdDsKK3R5cGVkZWYgcG9ydFNUQUNLX1RZUEUgICAgIFN0YWNrVHlwZV90OwordHlwZWRlZiBsb25nICAgICAgICAgICAgICAgQmFzZVR5cGVfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyAgICAgIFVCYXNlVHlwZV90OwogCi0gICAgI2lmICggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkKLSAgICAgICAgdHlwZWRlZiB1aW50MTZfdCAgICAgICBUaWNrVHlwZV90OwotICAgICAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICggVGlja1R5cGVfdCApIDB4ZmZmZgotICAgICNlbHNlCi0gICAgICAgIHR5cGVkZWYgdW5zaWduZWQgaW50ICAgVGlja1R5cGVfdDsKLSAgICAgICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwKLSAgICAjZW5kaWYKKyNpZiAoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApCisgICAgdHlwZWRlZiB1aW50MTZfdCAgICAgICBUaWNrVHlwZV90OworICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAgICAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmYKKyNlbHNlCisgICAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgICBUaWNrVHlwZV90OworICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAgICAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwKKyNlbmRpZgogCi0gICAgI2RlZmluZSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyAgICAoICggdWludDMyX3QgKSAwICkKLSAgICAjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEggICAgICAgICAgICggLTEgKQotICAgICNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TICAgICAgICAgKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkKLSAgICAjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVCAgICAgICAgIDgKLSAgICAjZGVmaW5lIHBvcnROT1AoKSAgICAgICAgICAgICAgICAgIEFzbSggIm5vcF9zIiApOwotICAgICNkZWZpbmUgSVBNX0VOQUJMRV9BTEwgICAgICAgICAgICAgMQorI2RlZmluZSBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyAgICAoICggdWludDMyX3QgKSAwICkKKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSCAgICAgICAgICAgKCAtMSApCisjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUyAgICAgICAgICggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApCisjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVCAgICAgICAgIDgKKyNkZWZpbmUgcG9ydE5PUCgpICAgICAgICAgICAgICAgQXNtKCAibm9wX3MiICk7CisjZGVmaW5lIElQTV9FTkFCTEVfQUxMICAgICAgICAgICAgIDEKIAotICAgICNkZWZpbmUgcG9ydFlJRUxEX0ZST01fSVNSKCkgICAgICAgdlBvcnRZaWVsZEZyb21Jc3IoKQotICAgICNkZWZpbmUgcG9ydFlJRUxEKCkgICAgICAgICAgICAgICAgdlBvcnRZaWVsZCgpCisjZGVmaW5lIHBvcnRZSUVMRF9GUk9NX0lTUigpICAgIHZQb3J0WWllbGRGcm9tSXNyKCkKKyNkZWZpbmUgcG9ydFlJRUxEKCkgICAgICAgICAgICAgdlBvcnRZaWVsZCgpCiAKIC8qIENyaXRpY2FsIHNlY3Rpb24gbWFuYWdlbWVudC4gKi8KLSAgICAjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBBc20oICJjbHJpIiApOyAgICAgICAgICAgICAgIFwKLSAgICAgICAgQXNtKCAiIiA6OjogIm1lbW9yeSIgKTsgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBBc20oICJjbHJpIiApOyAgICAgICAgICAgXAorICAgICAgICBBc20oICIiIDo6OiAibWVtb3J5IiApOyAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCi0gICAgI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKSBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIEFzbSggIiIgOjo6ICJtZW1vcnkiICk7ICAgICBcCi0gICAgICAgIEFzbSggInNldGkiICk7ICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBBc20oICIiIDo6OiAibWVtb3J5IiApOyBcCisgICAgICAgIEFzbSggInNldGkiICk7ICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCi0gICAgZXh0ZXJuIHZvbGF0aWxlIHVuc2lnbmVkIGludCB1bENyaXRpY2FsTmVzdGluZzsKK2V4dGVybiB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgdWxDcml0aWNhbE5lc3Rpbmc7CiAKLSAgICAjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpIFwKKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgICAgIFwKICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpIFwKICAgICAgICAgdWxDcml0aWNhbE5lc3RpbmcrKzsgICAgIFwKICAgICB9CiAKIAotICAgICNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBpZiggdWxDcml0aWNhbE5lc3RpbmcgPiBwb3J0Tk9fQ1JJVElDQUxfTkVTVElORyApICAgICAgXAogICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTMyLDI0ICsxMzQsMjYgQEAKICAgICB9CiAKIAotICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQotICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgICAgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgICAgICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkKIAotICAgICNkZWZpbmUgcG9ydENPTkZJR1VSRV9USU1FUl9GT1JfUlVOX1RJTUVfU1RBVFMoKSAgICAgICAgICAgICAgZG8ge30gd2hpbGUoIDAgKSAvKiB3ZSB1c2UgdGhlIHRpbWVyICovCi0gICAgI2RlZmluZSBwb3J0QUxUX0dFVF9SVU5fVElNRV9DT1VOVEVSX1ZBTFVFKCBkZXN0ICkgICAgICAgICAgICAoIGRlc3QgPSB4VGlja0NvdW50ICkKKyNkZWZpbmUgcG9ydENPTkZJR1VSRV9USU1FUl9GT1JfUlVOX1RJTUVfU1RBVFMoKSAgICAgICAgICAgICAgZG8ge30gd2hpbGUoIDAgKSAgICAgLyogd2UgdXNlIHRoZSB0aW1lciAqLworI2RlZmluZSBwb3J0QUxUX0dFVF9SVU5fVElNRV9DT1VOVEVSX1ZBTFVFKCBkZXN0ICkgICAgICAgICAgICAoIGRlc3QgPSB4VGlja0NvdW50ICkKIAotICAgICNpZiBkZWZpbmVkKCBfX01XX18gKQotICAgICAgICBleHRlcm4gdm9pZCB0YXNrX2VuZF9ob29rKCB2b2lkICogcHhUQ0IgKTsKLSAgICAgICAgI2RlZmluZSBwb3J0Q0xFQU5fVVBfVENCKCBweFRDQiApICAgIHRhc2tfZW5kX2hvb2soICggdm9pZCAqICkgcHhUQ0IgKQotICAgICNlbHNlCi0gICAgICAgICNkZWZpbmUgcG9ydENMRUFOX1VQX1RDQiggcHhUQ0IgKSAgICAoIHZvaWQgKSBweFRDQgotICAgICNlbmRpZgorI2lmIGRlZmluZWQoIF9fTVdfXyApCisgICAgZXh0ZXJuIHZvaWQgdGFza19lbmRfaG9vayggdm9pZCAqIHB4VENCICk7CisgICAgI2RlZmluZSBwb3J0Q0xFQU5fVVBfVENCKCBweFRDQiApICAgIHRhc2tfZW5kX2hvb2soICggdm9pZCAqICkgcHhUQ0IgKQorI2Vsc2UKKyAgICAjZGVmaW5lIHBvcnRDTEVBTl9VUF9UQ0IoIHB4VENCICkgICAgKCB2b2lkICkgcHhUQ0IKKyNlbmRpZgogCi0gICAgdm9pZCB2UG9ydFlpZWxkKCB2b2lkICk7Ci0gICAgdm9pZCB2UG9ydFlpZWxkRnJvbUlzciggdm9pZCApOwordm9pZCB2UG9ydFlpZWxkKCB2b2lkICk7Cit2b2lkIHZQb3J0WWllbGRGcm9tSXNyKCB2b2lkICk7CiAKLSAgICAjaWZkZWYgX19jcGx1c3BsdXMKLSAgICAgICAgfQotICAgICNlbmRpZgorLyogKklOREVOVC1PRkYqICovCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICB9CisjZW5kaWYKKy8qICpJTkRFTlQtT04qICovCiAKICNlbmRpZiAvKiBQT1JUTUFDUk9fSCAqLwpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvVGhpcmRQYXJ0eS9HQ0MvQVRtZWdhL3BvcnQuYyBiL3BvcnRhYmxlL1RoaXJkUGFydHkvR0NDL0FUbWVnYS9wb3J0LmMKaW5kZXggOWI1MDQ2OC4uZTBiYWZkNSAxMDA2NDQKLS0tIGEvcG9ydGFibGUvVGhpcmRQYXJ0eS9HQ0MvQVRtZWdhL3BvcnQuYworKysgYi9wb3J0YWJsZS9UaGlyZFBhcnR5L0dDQy9BVG1lZ2EvcG9ydC5jCkBAIC0zNiwxNjYgKzM2LDE2NSBAQAogI2luY2x1ZGUgInRhc2suaCIKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgQVZSIHBvcnQuCi0qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgQVZSIHBvcnQuCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKiBTdGFydCB0YXNrcyB3aXRoIGludGVycnVwdHMgZW5hYmxlZC4gKi8KLSNkZWZpbmUgcG9ydEZMQUdTX0lOVF9FTkFCTEVEICAgICggKCBTdGFja1R5cGVfdCApIDB4ODAgKQorI2RlZmluZSBwb3J0RkxBR1NfSU5UX0VOQUJMRUQgICAgICAgICAgICggKFN0YWNrVHlwZV90KSAweDgwICkKIAotI2lmIGRlZmluZWQoIHBvcnRVU0VfV0RUTyApCisjaWYgZGVmaW5lZCggcG9ydFVTRV9XRFRPKQogICAgICN3YXJuaW5nICJXYXRjaGRvZyBUaW1lciB1c2VkIGZvciBzY2hlZHVsZXIuIgotICAgICNkZWZpbmUgcG9ydFNDSEVEVUxFUl9JU1IgICAgV0RUX3ZlY3QKKyAgICAjZGVmaW5lIHBvcnRTQ0hFRFVMRVJfSVNSICAgICAgICAgICBXRFRfdmVjdAogCiAjZWxpZiBkZWZpbmVkKCBwb3J0VVNFX1RJTUVSMCApCiAvKiBIYXJkd2FyZSBjb25zdGFudHMgZm9yIFRpbWVyMC4gKi8KICAgICAjd2FybmluZyAiVGltZXIwIHVzZWQgZm9yIHNjaGVkdWxlci4iCi0gICAgI2RlZmluZSBwb3J0U0NIRURVTEVSX0lTUiAgICAgICAgICAgICAgICAgICAgICAgVElNRVIwX0NPTVBBX3ZlY3QKLSAgICAjZGVmaW5lIHBvcnRDTEVBUl9DT1VOVEVSX09OX01BVENIICAgICAgICAgICAgICAoICggdWludDhfdCApIF9CViggV0dNMDEgKSApCi0gICAgI2RlZmluZSBwb3J0UFJFU0NBTEVfMTAyNCAgICAgICAgICAgICAgICAgICAgICAgKCAoIHVpbnQ4X3QgKSAoIF9CViggQ1MwMiApIHwgX0JWKCBDUzAwICkgKSApCi0gICAgI2RlZmluZSBwb3J0Q0xPQ0tfUFJFU0NBTEVSICAgICAgICAgICAgICAgICAgICAgKCAoIHVpbnQzMl90ICkgMTAyNCApCi0gICAgI2RlZmluZSBwb3J0Q09NUEFSRV9NQVRDSF9BX0lOVEVSUlVQVF9FTkFCTEUgICAgKCAoIHVpbnQ4X3QgKSBfQlYoIE9DSUUwQSApICkKLSAgICAjZGVmaW5lIHBvcnRPQ1JMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ1IwQQotICAgICNkZWZpbmUgcG9ydFRDQ1JhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRDQ1IwQQotICAgICNkZWZpbmUgcG9ydFRDQ1JiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRDQ1IwQgotICAgICNkZWZpbmUgcG9ydFRJTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJTVNLMAotICAgICNkZWZpbmUgcG9ydFRJRlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJRlIwCisgICAgI2RlZmluZSBwb3J0U0NIRURVTEVSX0lTUiAgICAgICAgICAgVElNRVIwX0NPTVBBX3ZlY3QKKyAgICAjZGVmaW5lIHBvcnRDTEVBUl9DT1VOVEVSX09OX01BVENIICAoICh1aW50OF90KSBfQlYoV0dNMDEpICkKKyAgICAjZGVmaW5lIHBvcnRQUkVTQ0FMRV8xMDI0ICAgICAgICAgICAoICh1aW50OF90KSAoX0JWKENTMDIpfF9CVihDUzAwKSkgKQorICAgICNkZWZpbmUgcG9ydENMT0NLX1BSRVNDQUxFUiAgICAgICAgICggKHVpbnQzMl90KSAxMDI0ICkKKyAgICAjZGVmaW5lIHBvcnRDT01QQVJFX01BVENIX0FfSU5URVJSVVBUX0VOQUJMRSAgICAoICh1aW50OF90KSBfQlYoT0NJRTBBKSApCisgICAgI2RlZmluZSBwb3J0T0NSTCAgICAgICAgICAgICAgICAgICAgT0NSMEEKKyAgICAjZGVmaW5lIHBvcnRUQ0NSYSAgICAgICAgICAgICAgICAgICBUQ0NSMEEKKyAgICAjZGVmaW5lIHBvcnRUQ0NSYiAgICAgICAgICAgICAgICAgICBUQ0NSMEIKKyAgICAjZGVmaW5lIHBvcnRUSU1TSyAgICAgICAgICAgICAgICAgICBUSU1TSzAKKyAgICAjZGVmaW5lIHBvcnRUSUZSICAgICAgICAgICAgICAgICAgICBUSUZSMAogCi0jZW5kaWYgLyogaWYgZGVmaW5lZCggcG9ydFVTRV9XRFRPICkgKi8KKyNlbmRpZgogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyogV2UgcmVxdWlyZSB0aGUgYWRkcmVzcyBvZiB0aGUgcHhDdXJyZW50VENCIHZhcmlhYmxlLCBidXQgZG9uJ3Qgd2FudCB0byBrbm93Ci0gKiBhbnkgZGV0YWlscyBvZiBpdHMgdHlwZS4gKi8KK2FueSBkZXRhaWxzIG9mIGl0cyB0eXBlLiAqLwogdHlwZWRlZiB2b2lkIFRDQl90OwogZXh0ZXJuIHZvbGF0aWxlIFRDQl90ICogdm9sYXRpbGUgcHhDdXJyZW50VENCOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyoqCi0gKiAgRW5hYmxlIHRoZSB3YXRjaGRvZyB0aW1lciwgY29uZmlndXJpbmcgaXQgZm9yIGV4cGlyZSBhZnRlcgotICogICh2YWx1ZSkgdGltZW91dCAod2hpY2ggaXMgYSBjb21iaW5hdGlvbiBvZiB0aGUgV0RQMAotICogIHRocm91Z2ggV0RQMyBiaXRzKS4KLSAqCi0gKiAgVGhpcyBmdW5jdGlvbiBpcyBkZXJpdmVkIGZyb20gPGF2ci93ZHQuaD4gYnV0IGVuYWJsZXMgb25seQotICogIHRoZSBpbnRlcnJ1cHQgYml0IChXRElFKSwgcmF0aGVyIHRoYW4gdGhlIHJlc2V0IGJpdCAoV0RFKS4KLSAqCi0gKiAgQ2FuJ3QgZmluZCBpdCBkb2N1bWVudGVkIGJ1dCB0aGUgV0RULCBvbmNlIGVuYWJsZWQsCi0gKiAgcm9sbHMgb3ZlciBhbmQgZmlyZXMgYSBuZXcgaW50ZXJydXB0IGVhY2ggdGltZS4KLSAqCi0gKiAgU2VlIGFsc28gdGhlIHN5bWJvbGljIGNvbnN0YW50cyBXRFRPXzE1TVMgZXQgYWwuCi0gKgotICogIFVwZGF0ZWQgdG8gbWF0Y2ggYXZyLWxpYmMgMi4wLjAKLSAqLworICAgIEVuYWJsZSB0aGUgd2F0Y2hkb2cgdGltZXIsIGNvbmZpZ3VyaW5nIGl0IGZvciBleHBpcmUgYWZ0ZXIKKyAgICAodmFsdWUpIHRpbWVvdXQgKHdoaWNoIGlzIGEgY29tYmluYXRpb24gb2YgdGhlIFdEUDAKKyAgICB0aHJvdWdoIFdEUDMgYml0cykuCiAKLSNpZiBkZWZpbmVkKCBwb3J0VVNFX1dEVE8gKQorICAgIFRoaXMgZnVuY3Rpb24gaXMgZGVyaXZlZCBmcm9tIDxhdnIvd2R0Lmg+IGJ1dCBlbmFibGVzIG9ubHkKKyAgICB0aGUgaW50ZXJydXB0IGJpdCAoV0RJRSksIHJhdGhlciB0aGFuIHRoZSByZXNldCBiaXQgKFdERSkuCiAKLSAgICBzdGF0aWMgX19pbmxpbmVfXwotICAgIF9fYXR0cmlidXRlX18oICggX19hbHdheXNfaW5saW5lX18gKSApCi0gICAgdm9pZCB3ZHRfaW50ZXJydXB0X2VuYWJsZSggY29uc3QgdWludDhfdCB2YWx1ZSApCisgICAgQ2FuJ3QgZmluZCBpdCBkb2N1bWVudGVkIGJ1dCB0aGUgV0RULCBvbmNlIGVuYWJsZWQsCisgICAgcm9sbHMgb3ZlciBhbmQgZmlyZXMgYSBuZXcgaW50ZXJydXB0IGVhY2ggdGltZS4KKworICAgIFNlZSBhbHNvIHRoZSBzeW1ib2xpYyBjb25zdGFudHMgV0RUT18xNU1TIGV0IGFsLgorCisgICAgVXBkYXRlZCB0byBtYXRjaCBhdnItbGliYyAyLjAuMAorKi8KKworI2lmIGRlZmluZWQoIHBvcnRVU0VfV0RUTykKKworc3RhdGljIF9faW5saW5lX18KK19fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2b2lkIHdkdF9pbnRlcnJ1cHRfZW5hYmxlIChjb25zdCB1aW50OF90IHZhbHVlKQoreworICAgIGlmIChfU0ZSX0lPX1JFR19QIChfV0RfQ09OVFJPTF9SRUcpKQogICAgIHsKLSAgICAgICAgaWYoIF9TRlJfSU9fUkVHX1AoIF9XRF9DT05UUk9MX1JFRyApICkKLSAgICAgICAgewotICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAorICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAgICAgICAgICAgICAgICAgImluIF9fdG1wX3JlZ19fLF9fU1JFR19fIiAgICJcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2xpIiAgICAgICAgICAgICAgICAgICAgICAgIlxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2RyIiAgICAgICAgICAgICAgICAgICAgICAgIlxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm91dCAlMCwgJTEiICAgICAgICAgICAgICAgICJcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3V0IF9fU1JFR19fLF9fdG1wX3JlZ19fIiAgIlxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3V0ICUwLCAlMiIgICAgICAgICAgICAgICAgIlxuXHQiCisgICAgICAgICAgICAgICAgImNsaSIgICAgICAgICAgICAgICAgICAgICAgICJcblx0IgorICAgICAgICAgICAgICAgICJ3ZHIiICAgICAgICAgICAgICAgICAgICAgICAiXG5cdCIKKyAgICAgICAgICAgICAgICAib3V0ICUwLCAlMSIgICAgICAgICAgICAgICAgIlxuXHQiCisgICAgICAgICAgICAgICAgIm91dCBfX1NSRUdfXyxfX3RtcF9yZWdfXyIgICJcblx0IgorICAgICAgICAgICAgICAgICJvdXQgJTAsICUyIiAgICAgICAgICAgICAgICAiXG5cdCIKICAgICAgICAgICAgICAgICA6IC8qIG5vIG91dHB1dHMgKi8KLSAgICAgICAgICAgICAgICA6ICJJIiAoIF9TRlJfSU9fQUREUiggX1dEX0NPTlRST0xfUkVHICkgKSwKLSAgICAgICAgICAgICAgICAiciIgKCAoIHVpbnQ4X3QgKSAoIF9CViggX1dEX0NIQU5HRV9CSVQgKSB8IF9CViggV0RFICkgKSApLAotICAgICAgICAgICAgICAgICJyIiAoICggdWludDhfdCApICggKCB2YWx1ZSAmIDB4MDggPyBfV0RfUFMzX01BU0sgOiAweDAwICkgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JWKCBXRElGICkgfCBfQlYoIFdESUUgKSB8ICggdmFsdWUgJiAweDA3ICkgKSApCisgICAgICAgICAgICAgICAgOiAiSSIgKF9TRlJfSU9fQUREUihfV0RfQ09OVFJPTF9SRUcpKSwKKyAgICAgICAgICAgICAgICAiciIgKCh1aW50OF90KShfQlYoX1dEX0NIQU5HRV9CSVQpIHwgX0JWKFdERSkpKSwKKyAgICAgICAgICAgICAgICAiciIgKCh1aW50OF90KSAoKHZhbHVlICYgMHgwOCA/IF9XRF9QUzNfTUFTSyA6IDB4MDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIF9CVihXRElGKSB8IF9CVihXRElFKSB8ICh2YWx1ZSAmIDB4MDcpKSApCiAgICAgICAgICAgICAgICAgOiAicjAiCi0gICAgICAgICAgICAgICAgKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKLSAgICAgICAgICAgICAgICAiaW4gX190bXBfcmVnX18sX19TUkVHX18iICAgIlxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjbGkiICAgICAgICAgICAgICAgICAgICAgICAiXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3ZHIiICAgICAgICAgICAgICAgICAgICAgICAiXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3RzICUwLCAlMSIgICAgICAgICAgICAgICAgIlxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvdXQgX19TUkVHX18sX190bXBfcmVnX18iICAiXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdHMgJTAsICUyIiAgICAgICAgICAgICAgICAiXG5cdCIKLSAgICAgICAgICAgICAgICA6IC8qIG5vIG91dHB1dHMgKi8KLSAgICAgICAgICAgICAgICA6ICJuIiAoIF9TRlJfTUVNX0FERFIoIF9XRF9DT05UUk9MX1JFRyApICksCi0gICAgICAgICAgICAgICAgInIiICggKCB1aW50OF90ICkgKCBfQlYoIF9XRF9DSEFOR0VfQklUICkgfCBfQlYoIFdERSApICkgKSwKLSAgICAgICAgICAgICAgICAiciIgKCAoIHVpbnQ4X3QgKSAoICggdmFsdWUgJiAweDA4ID8gX1dEX1BTM19NQVNLIDogMHgwMCApIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CViggV0RJRiApIHwgX0JWKCBXRElFICkgfCAoIHZhbHVlICYgMHgwNyApICkgKQotICAgICAgICAgICAgICAgIDogInIwIgotICAgICAgICAgICAgICAgICk7Ci0gICAgICAgIH0KKyAgICAgICAgKTsKICAgICB9Ci0jZW5kaWYgLyogaWYgZGVmaW5lZCggcG9ydFVTRV9XRFRPICkgKi8KKyAgICBlbHNlCisgICAgeworICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisgICAgICAgICAgICAgICAgImluIF9fdG1wX3JlZ19fLF9fU1JFR19fIiAgICJcblx0IgorICAgICAgICAgICAgICAgICJjbGkiICAgICAgICAgICAgICAgICAgICAgICAiXG5cdCIKKyAgICAgICAgICAgICAgICAid2RyIiAgICAgICAgICAgICAgICAgICAgICAgIlxuXHQiCisgICAgICAgICAgICAgICAgInN0cyAlMCwgJTEiICAgICAgICAgICAgICAgICJcblx0IgorICAgICAgICAgICAgICAgICJvdXQgX19TUkVHX18sX190bXBfcmVnX18iICAiXG5cdCIKKyAgICAgICAgICAgICAgICAic3RzICUwLCAlMiIgICAgICAgICAgICAgICAgIlxuXHQiCisgICAgICAgICAgICAgICAgOiAvKiBubyBvdXRwdXRzICovCisgICAgICAgICAgICAgICAgOiAibiIgKF9TRlJfTUVNX0FERFIoX1dEX0NPTlRST0xfUkVHKSksCisgICAgICAgICAgICAgICAgInIiICgodWludDhfdCkoX0JWKF9XRF9DSEFOR0VfQklUKSB8IF9CVihXREUpKSksCisgICAgICAgICAgICAgICAgInIiICgodWludDhfdCkgKCh2YWx1ZSAmIDB4MDggPyBfV0RfUFMzX01BU0sgOiAweDAwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICBfQlYoV0RJRikgfCBfQlYoV0RJRSkgfCAodmFsdWUgJiAweDA3KSkgKQorICAgICAgICAgICAgICAgIDogInIwIgorICAgICAgICApOworICAgIH0KK30KKyNlbmRpZgogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQogLyoqCi0gKiAgRW5hYmxlIHRoZSB3YXRjaGRvZyB0aW1lciwgY29uZmlndXJpbmcgaXQgZm9yIGV4cGlyZSBhZnRlcgotICogICh2YWx1ZSkgdGltZW91dCAod2hpY2ggaXMgYSBjb21iaW5hdGlvbiBvZiB0aGUgV0RQMAotICogIHRocm91Z2ggV0RQMyBiaXRzKS4KLSAqCi0gKiAgVGhpcyBmdW5jdGlvbiBpcyBkZXJpdmVkIGZyb20gPGF2ci93ZHQuaD4gYnV0IGVuYWJsZXMgYm90aAotICogIHRoZSByZXNldCBiaXQgKFdERSksIGFuZCB0aGUgaW50ZXJydXB0IGJpdCAoV0RJRSkuCi0gKgotICogIFRoaXMgd2lsbCBlbnN1cmUgdGhhdCBpZiB0aGUgaW50ZXJydXB0IGlzIG5vdCBzZXJ2aWNlZAotICogIGJlZm9yZSB0aGUgc2Vjb25kIHRpbWVvdXQsIHRoZSBBVlIgd2lsbCByZXNldC4KLSAqCi0gKiAgU2VydmljaW5nIHRoZSBpbnRlcnJ1cHQgYXV0b21hdGljYWxseSBjbGVhcnMgaXQsCi0gKiAgYW5kIGVuc3VyZXMgdGhlIEFWUiBkb2VzIG5vdCByZXNldC4KLSAqCi0gKiAgQ2FuJ3QgZmluZCBpdCBkb2N1bWVudGVkIGJ1dCB0aGUgV0RULCBvbmNlIGVuYWJsZWQsCi0gKiAgcm9sbHMgb3ZlciBhbmQgZmlyZXMgYSBuZXcgaW50ZXJydXB0IGVhY2ggdGltZS4KLSAqCi0gKiAgU2VlIGFsc28gdGhlIHN5bWJvbGljIGNvbnN0YW50cyBXRFRPXzE1TVMgZXQgYWwuCi0gKgotICogIFVwZGF0ZWQgdG8gbWF0Y2ggYXZyLWxpYmMgMi4wLjAKLSAqLworICAgIEVuYWJsZSB0aGUgd2F0Y2hkb2cgdGltZXIsIGNvbmZpZ3VyaW5nIGl0IGZvciBleHBpcmUgYWZ0ZXIKKyAgICAodmFsdWUpIHRpbWVvdXQgKHdoaWNoIGlzIGEgY29tYmluYXRpb24gb2YgdGhlIFdEUDAKKyAgICB0aHJvdWdoIFdEUDMgYml0cykuCiAKLSNpZiBkZWZpbmVkKCBwb3J0VVNFX1dEVE8gKQorICAgIFRoaXMgZnVuY3Rpb24gaXMgZGVyaXZlZCBmcm9tIDxhdnIvd2R0Lmg+IGJ1dCBlbmFibGVzIGJvdGgKKyAgICB0aGUgcmVzZXQgYml0IChXREUpLCBhbmQgdGhlIGludGVycnVwdCBiaXQgKFdESUUpLgogCi0gICAgc3RhdGljIF9faW5saW5lX18KLSAgICBfX2F0dHJpYnV0ZV9fKCAoIF9fYWx3YXlzX2lubGluZV9fICkgKQotICAgIHZvaWQgd2R0X2ludGVycnVwdF9yZXNldF9lbmFibGUoIGNvbnN0IHVpbnQ4X3QgdmFsdWUgKQorICAgIFRoaXMgd2lsbCBlbnN1cmUgdGhhdCBpZiB0aGUgaW50ZXJydXB0IGlzIG5vdCBzZXJ2aWNlZAorICAgIGJlZm9yZSB0aGUgc2Vjb25kIHRpbWVvdXQsIHRoZSBBVlIgd2lsbCByZXNldC4KKworICAgIFNlcnZpY2luZyB0aGUgaW50ZXJydXB0IGF1dG9tYXRpY2FsbHkgY2xlYXJzIGl0LAorICAgIGFuZCBlbnN1cmVzIHRoZSBBVlIgZG9lcyBub3QgcmVzZXQuCisKKyAgICBDYW4ndCBmaW5kIGl0IGRvY3VtZW50ZWQgYnV0IHRoZSBXRFQsIG9uY2UgZW5hYmxlZCwKKyAgICByb2xscyBvdmVyIGFuZCBmaXJlcyBhIG5ldyBpbnRlcnJ1cHQgZWFjaCB0aW1lLgorCisgICAgU2VlIGFsc28gdGhlIHN5bWJvbGljIGNvbnN0YW50cyBXRFRPXzE1TVMgZXQgYWwuCisKKyAgICBVcGRhdGVkIHRvIG1hdGNoIGF2ci1saWJjIDIuMC4wCisqLworCisjaWYgZGVmaW5lZCggcG9ydFVTRV9XRFRPKQorCitzdGF0aWMgX19pbmxpbmVfXworX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZvaWQgd2R0X2ludGVycnVwdF9yZXNldF9lbmFibGUgKGNvbnN0IHVpbnQ4X3QgdmFsdWUpCit7CisgICAgaWYgKF9TRlJfSU9fUkVHX1AgKF9XRF9DT05UUk9MX1JFRykpCiAgICAgewotICAgICAgICBpZiggX1NGUl9JT19SRUdfUCggX1dEX0NPTlRST0xfUkVHICkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKICAgICAgICAgICAgICAgICAiaW4gX190bXBfcmVnX18sX19TUkVHX18iICAgIlxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjbGkiICAgICAgICAgICAgICAgICAgICAgICAiXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3ZHIiICAgICAgICAgICAgICAgICAgICAgICAiXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3V0ICUwLCAlMSIgICAgICAgICAgICAgICAgIlxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvdXQgX19TUkVHX18sX190bXBfcmVnX18iICAiXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvdXQgJTAsICUyIiAgICAgICAgICAgICAgICAiXG5cdCIKKyAgICAgICAgICAgICAgICAiY2xpIiAgICAgICAgICAgICAgICAgICAgICAgIlxuXHQiCisgICAgICAgICAgICAgICAgIndkciIgICAgICAgICAgICAgICAgICAgICAgICJcblx0IgorICAgICAgICAgICAgICAgICJvdXQgJTAsICUxIiAgICAgICAgICAgICAgICAiXG5cdCIKKyAgICAgICAgICAgICAgICAib3V0IF9fU1JFR19fLF9fdG1wX3JlZ19fIiAgIlxuXHQiCisgICAgICAgICAgICAgICAgIm91dCAlMCwgJTIiICAgICAgICAgICAgICAgICJcblx0IgogICAgICAgICAgICAgICAgIDogLyogbm8gb3V0cHV0cyAqLwotICAgICAgICAgICAgICAgIDogIkkiICggX1NGUl9JT19BRERSKCBfV0RfQ09OVFJPTF9SRUcgKSApLAotICAgICAgICAgICAgICAgICJyIiAoICggdWludDhfdCApICggX0JWKCBfV0RfQ0hBTkdFX0JJVCApIHwgX0JWKCBXREUgKSApICksCi0gICAgICAgICAgICAgICAgInIiICggKCB1aW50OF90ICkgKCAoIHZhbHVlICYgMHgwOCA/IF9XRF9QUzNfTUFTSyA6IDB4MDAgKSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQlYoIFdESUYgKSB8IF9CViggV0RJRSApIHwgX0JWKCBXREUgKSB8ICggdmFsdWUgJiAweDA3ICkgKSApCisgICAgICAgICAgICAgICAgOiAiSSIgKF9TRlJfSU9fQUREUihfV0RfQ09OVFJPTF9SRUcpKSwKKyAgICAgICAgICAgICAgICAiciIgKCh1aW50OF90KShfQlYoX1dEX0NIQU5HRV9CSVQpIHwgX0JWKFdERSkpKSwKKyAgICAgICAgICAgICAgICAiciIgKCh1aW50OF90KSAoKHZhbHVlICYgMHgwOCA/IF9XRF9QUzNfTUFTSyA6IDB4MDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIF9CVihXRElGKSB8IF9CVihXRElFKSB8IF9CVihXREUpIHwgKHZhbHVlICYgMHgwNykpICkKICAgICAgICAgICAgICAgICA6ICJyMCIKLSAgICAgICAgICAgICAgICApOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAotICAgICAgICAgICAgICAgICJpbiBfX3RtcF9yZWdfXyxfX1NSRUdfXyIgICAiXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNsaSIgICAgICAgICAgICAgICAgICAgICAgICJcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndkciIgICAgICAgICAgICAgICAgICAgICAgICJcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdHMgJTAsICUxIiAgICAgICAgICAgICAgICAiXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm91dCBfX1NSRUdfXyxfX3RtcF9yZWdfXyIgICJcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0cyAlMCwgJTIiICAgICAgICAgICAgICAgICJcblx0IgotICAgICAgICAgICAgICAgIDogLyogbm8gb3V0cHV0cyAqLwotICAgICAgICAgICAgICAgIDogIm4iICggX1NGUl9NRU1fQUREUiggX1dEX0NPTlRST0xfUkVHICkgKSwKLSAgICAgICAgICAgICAgICAiciIgKCAoIHVpbnQ4X3QgKSAoIF9CViggX1dEX0NIQU5HRV9CSVQgKSB8IF9CViggV0RFICkgKSApLAotICAgICAgICAgICAgICAgICJyIiAoICggdWludDhfdCApICggKCB2YWx1ZSAmIDB4MDggPyBfV0RfUFMzX01BU0sgOiAweDAwICkgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JWKCBXRElGICkgfCBfQlYoIFdESUUgKSB8IF9CViggV0RFICkgfCAoIHZhbHVlICYgMHgwNyApICkgKQotICAgICAgICAgICAgICAgIDogInIwIgotICAgICAgICAgICAgICAgICk7Ci0gICAgICAgIH0KKyAgICAgICAgKTsKICAgICB9Ci0jZW5kaWYgLyogaWYgZGVmaW5lZCggcG9ydFVTRV9XRFRPICkgKi8KKyAgICBlbHNlCisgICAgeworICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisgICAgICAgICAgICAgICAgImluIF9fdG1wX3JlZ19fLF9fU1JFR19fIiAgICJcblx0IgorICAgICAgICAgICAgICAgICJjbGkiICAgICAgICAgICAgICAgICAgICAgICAiXG5cdCIKKyAgICAgICAgICAgICAgICAid2RyIiAgICAgICAgICAgICAgICAgICAgICAgIlxuXHQiCisgICAgICAgICAgICAgICAgInN0cyAlMCwgJTEiICAgICAgICAgICAgICAgICJcblx0IgorICAgICAgICAgICAgICAgICJvdXQgX19TUkVHX18sX190bXBfcmVnX18iICAiXG5cdCIKKyAgICAgICAgICAgICAgICAic3RzICUwLCAlMiIgICAgICAgICAgICAgICAgIlxuXHQiCisgICAgICAgICAgICAgICAgOiAvKiBubyBvdXRwdXRzICovCisgICAgICAgICAgICAgICAgOiAibiIgKF9TRlJfTUVNX0FERFIoX1dEX0NPTlRST0xfUkVHKSksCisgICAgICAgICAgICAgICAgInIiICgodWludDhfdCkoX0JWKF9XRF9DSEFOR0VfQklUKSB8IF9CVihXREUpKSksCisgICAgICAgICAgICAgICAgInIiICgodWludDhfdCkgKCh2YWx1ZSAmIDB4MDggPyBfV0RfUFMzX01BU0sgOiAweDAwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICBfQlYoV0RJRikgfCBfQlYoV0RJRSkgfCBfQlYoV0RFKSB8ICh2YWx1ZSAmIDB4MDcpKSApCisgICAgICAgICAgICAgICAgOiAicjAiCisgICAgICAgICk7CisgICAgfQorfQorI2VuZGlmCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC0yMjQsMjk1ICsyMjMsMjk1IEBACiAgKiBUaGUgaW50ZXJydXB0cyB3aWxsIGhhdmUgYmVlbiBkaXNhYmxlZCBkdXJpbmcgdGhlIGNhbGwgdG8gcG9ydFNBVkVfQ09OVEVYVCgpCiAgKiBzbyB3ZSBuZWVkIG5vdCB3b3JyeSBhYm91dCByZWFkaW5nL3dyaXRpbmcgdG8gdGhlIHN0YWNrIHBvaW50ZXIuCiAgKi8KLSNpZiBkZWZpbmVkKCBfX0FWUl8zX0JZVEVfUENfXyApICYmIGRlZmluZWQoIF9fQVZSX0hBVkVfUkFNUFpfXyApCisjaWYgZGVmaW5lZChfX0FWUl8zX0JZVEVfUENfXykgJiYgZGVmaW5lZChfX0FWUl9IQVZFX1JBTVBaX18pCiAvKiAzLUJ5dGUgUEMgU2F2ZSAgd2l0aCBSQU1QWiAqLwotICAgICNkZWZpbmUgcG9ydFNBVkVfQ09OVEVYVCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIF9fYXNtX18gX192b2xhdGlsZV9fICggInB1c2ggICBfX3RtcF9yZWdfXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgImluICAgICBfX3RtcF9yZWdfXywgX19TUkVHX18gICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgImNsaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICBfX3RtcF9yZWdfXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgImluICAgICBfX3RtcF9yZWdfXywgMHgzQiAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICBfX3RtcF9yZWdfXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgImluICAgICBfX3RtcF9yZWdfXywgMHgzQyAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICBfX3RtcF9yZWdfXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICBfX3plcm9fcmVnX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgImNsciAgICBfX3plcm9fcmVnX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByMTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByMTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByMTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByMTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByMjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByMjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByMjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByMjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByMjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByMjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByMjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByMjcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByMjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByMjkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByMzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgImxkcyAgICByMjYsIHB4Q3VycmVudFRDQiAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgImxkcyAgICByMjcsIHB4Q3VycmVudFRDQiArIDEgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgImluICAgICBfX3RtcF9yZWdfXywgX19TUF9MX18gICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0ICAgICB4KywgX190bXBfcmVnX18gICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgImluICAgICBfX3RtcF9yZWdfXywgX19TUF9IX18gICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0ICAgICB4KywgX190bXBfcmVnX18gICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSNlbGlmIGRlZmluZWQoIF9fQVZSX0hBVkVfUkFNUFpfXyApCisjZGVmaW5lIHBvcnRTQVZFX0NPTlRFWFQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICAicHVzaCAgIF9fdG1wX3JlZ19fICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluICAgICBfX3RtcF9yZWdfXywgX19TUkVHX18gICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjbGkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVzaCAgIF9fdG1wX3JlZ19fICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluICAgICBfX3RtcF9yZWdfXywgMHgzQiAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgX190bXBfcmVnX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4gICAgIF9fdG1wX3JlZ19fLCAweDNDICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICBfX3RtcF9yZWdfXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgX196ZXJvX3JlZ19fICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2xyICAgIF9femVyb19yZWdfXyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVzaCAgIHI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVzaCAgIHI3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVzaCAgIHIxMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVzaCAgIHIxMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVzaCAgIHIxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByMTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjE4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVzaCAgIHIxOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByMjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVzaCAgIHIyMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByMjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVzaCAgIHIyNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByMjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjI3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVzaCAgIHIyOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByMjkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVzaCAgIHIzMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxkcyAgICByMjYsIHB4Q3VycmVudFRDQiAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsZHMgICAgcjI3LCBweEN1cnJlbnRUQ0IgKyAxICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4gICAgIF9fdG1wX3JlZ19fLCBfX1NQX0xfXyAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0ICAgICB4KywgX190bXBfcmVnX18gICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbiAgICAgX190bXBfcmVnX18sIF9fU1BfSF9fICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3QgICAgIHgrLCBfX3RtcF9yZWdfXyAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyNlbGlmIGRlZmluZWQoX19BVlJfSEFWRV9SQU1QWl9fKQogLyogMi1CeXRlIFBDIFNhdmUgIHdpdGggUkFNUFogKi8KLSAgICAjZGVmaW5lIHBvcnRTQVZFX0NPTlRFWFQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICJwdXNoICAgX190bXBfcmVnX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbiAgICAgX190bXBfcmVnX18sIF9fU1JFR19fICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJjbGkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgX190bXBfcmVnX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbiAgICAgX190bXBfcmVnX18sIDB4M0IgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgX190bXBfcmVnX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgX196ZXJvX3JlZ19fICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJjbHIgICAgX196ZXJvX3JlZ19fICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjE3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjE4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjE5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjIzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjI1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjI2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjI3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjI4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjI5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJsZHMgICAgcjI2LCBweEN1cnJlbnRUQ0IgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJsZHMgICAgcjI3LCBweEN1cnJlbnRUQ0IgKyAxICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbiAgICAgX190bXBfcmVnX18sIF9fU1BfTF9fICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdCAgICAgeCssIF9fdG1wX3JlZ19fICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbiAgICAgX190bXBfcmVnX18sIF9fU1BfSF9fICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdCAgICAgeCssIF9fdG1wX3JlZ19fICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0jZWxzZSAvKiBpZiBkZWZpbmVkKCBfX0FWUl8zX0JZVEVfUENfXyApICYmIGRlZmluZWQoIF9fQVZSX0hBVkVfUkFNUFpfXyApICovCisjZGVmaW5lIHBvcnRTQVZFX0NPTlRFWFQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICAicHVzaCAgIF9fdG1wX3JlZ19fICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluICAgICBfX3RtcF9yZWdfXywgX19TUkVHX18gICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjbGkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVzaCAgIF9fdG1wX3JlZ19fICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluICAgICBfX3RtcF9yZWdfXywgMHgzQiAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgX190bXBfcmVnX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVzaCAgIF9femVyb19yZWdfXyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNsciAgICBfX3plcm9fcmVnX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVzaCAgIHIzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVzaCAgIHI2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVzaCAgIHI5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVzaCAgIHIxMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByMTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVzaCAgIHIxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjE3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVzaCAgIHIxOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByMTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVzaCAgIHIyMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByMjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjIzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVzaCAgIHIyNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByMjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjI2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVzaCAgIHIyNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByMjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjI5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVzaCAgIHIzMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByMzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsZHMgICAgcjI2LCBweEN1cnJlbnRUQ0IgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGRzICAgIHIyNywgcHhDdXJyZW50VENCICsgMSAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluICAgICBfX3RtcF9yZWdfXywgX19TUF9MX18gICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdCAgICAgeCssIF9fdG1wX3JlZ19fICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4gICAgIF9fdG1wX3JlZ19fLCBfX1NQX0hfXyAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0ICAgICB4KywgX190bXBfcmVnX18gICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisjZWxzZQogLyogMi1CeXRlIFBDIFNhdmUgKi8KLSAgICAjZGVmaW5lIHBvcnRTQVZFX0NPTlRFWFQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICJwdXNoICAgX190bXBfcmVnX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbiAgICAgX190bXBfcmVnX18sIF9fU1JFR19fICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJjbGkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgX190bXBfcmVnX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgX196ZXJvX3JlZ19fICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJjbHIgICAgX196ZXJvX3JlZ19fICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjE3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjE4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjE5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjIzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjI1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjI2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjI3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjI4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjI5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJsZHMgICAgcjI2LCBweEN1cnJlbnRUQ0IgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJsZHMgICAgcjI3LCBweEN1cnJlbnRUQ0IgKyAxICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbiAgICAgX190bXBfcmVnX18sIF9fU1BfTF9fICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdCAgICAgeCssIF9fdG1wX3JlZ19fICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbiAgICAgX190bXBfcmVnX18sIF9fU1BfSF9fICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdCAgICAgeCssIF9fdG1wX3JlZ19fICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0jZW5kaWYgLyogaWYgZGVmaW5lZCggX19BVlJfM19CWVRFX1BDX18gKSAmJiBkZWZpbmVkKCBfX0FWUl9IQVZFX1JBTVBaX18gKSAqLworI2RlZmluZSBwb3J0U0FWRV9DT05URVhUKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCAgInB1c2ggICBfX3RtcF9yZWdfXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbiAgICAgX190bXBfcmVnX18sIF9fU1JFR19fICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2xpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICBfX3RtcF9yZWdfXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgX196ZXJvX3JlZ19fICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2xyICAgIF9femVyb19yZWdfXyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVzaCAgIHI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVzaCAgIHI3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVzaCAgIHIxMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVzaCAgIHIxMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVzaCAgIHIxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByMTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjE4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVzaCAgIHIxOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByMjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVzaCAgIHIyMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByMjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVzaCAgIHIyNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByMjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjI3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVzaCAgIHIyOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2ggICByMjkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoICAgcjMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVzaCAgIHIzMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxkcyAgICByMjYsIHB4Q3VycmVudFRDQiAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsZHMgICAgcjI3LCBweEN1cnJlbnRUQ0IgKyAxICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4gICAgIF9fdG1wX3JlZ19fLCBfX1NQX0xfXyAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0ICAgICB4KywgX190bXBfcmVnX18gICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbiAgICAgX190bXBfcmVnX18sIF9fU1BfSF9fICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3QgICAgIHgrLCBfX3RtcF9yZWdfXyAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyNlbmRpZgogCiAvKgogICogT3Bwb3NpdGUgdG8gcG9ydFNBVkVfQ09OVEVYVCgpLiAgSW50ZXJydXB0cyB3aWxsIGhhdmUgYmVlbiBkaXNhYmxlZCBkdXJpbmcKICAqIHRoZSBjb250ZXh0IHNhdmUgc28gd2UgY2FuIHdyaXRlIHRvIHRoZSBzdGFjayBwb2ludGVyLgogICovCi0jaWYgZGVmaW5lZCggX19BVlJfM19CWVRFX1BDX18gKSAmJiBkZWZpbmVkKCBfX0FWUl9IQVZFX1JBTVBaX18gKQorI2lmIGRlZmluZWQoX19BVlJfM19CWVRFX1BDX18pICYmIGRlZmluZWQoX19BVlJfSEFWRV9SQU1QWl9fKQogLyogMy1CeXRlIFBDIFJlc3RvcmUgd2l0aCBSQU1QWiAqLwotICAgICNkZWZpbmUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIF9fYXNtX18gX192b2xhdGlsZV9fICggImxkcyAgICByMjYsIHB4Q3VycmVudFRDQiAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgImxkcyAgICByMjcsIHB4Q3VycmVudFRDQiArIDEgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgImxkICAgICByMjgsIHgrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIm91dCAgICBfX1NQX0xfXywgcjI4ICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgImxkICAgICByMjksIHgrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIm91dCAgICBfX1NQX0hfXywgcjI5ICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByMzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByMjkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByMjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByMjcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByMjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByMjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByMjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByMjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByMjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByMjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByMjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByMTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByMTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByMTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByMTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICBfX3plcm9fcmVnX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICBfX3RtcF9yZWdfXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIm91dCAgICAweDNDLCBfX3RtcF9yZWdfXyAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICBfX3RtcF9yZWdfXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIm91dCAgICAweDNCLCBfX3RtcF9yZWdfXyAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICBfX3RtcF9yZWdfXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIm91dCAgICBfX1NSRUdfXywgX190bXBfcmVnX18gICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICBfX3RtcF9yZWdfXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSNlbGlmIGRlZmluZWQoIF9fQVZSX0hBVkVfUkFNUFpfXyApCisjZGVmaW5lIHBvcnRSRVNUT1JFX0NPTlRFWFQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICAibGRzICAgIHIyNiwgcHhDdXJyZW50VENCICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxkcyAgICByMjcsIHB4Q3VycmVudFRDQiArIDEgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsZCAgICAgcjI4LCB4KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3V0ICAgIF9fU1BfTF9fLCByMjggICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxkICAgICByMjksIHgrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvdXQgICAgX19TUF9IX18sIHIyOSAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHIzMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjI5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHIyOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByMjcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjI2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHIyNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByMjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjIzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHIyMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByMjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHIxOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByMTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjE3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHIxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHIxMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHIxMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHI3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIF9femVyb19yZWdfXyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICBfX3RtcF9yZWdfXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvdXQgICAgMHgzQywgX190bXBfcmVnX18gICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIF9fdG1wX3JlZ19fICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm91dCAgICAweDNCLCBfX3RtcF9yZWdfXyAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgX190bXBfcmVnX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3V0ICAgIF9fU1JFR19fLCBfX3RtcF9yZWdfXyAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICBfX3RtcF9yZWdfXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisjZWxpZiBkZWZpbmVkKF9fQVZSX0hBVkVfUkFNUFpfXykKIC8qIDItQnl0ZSBQQyBSZXN0b3JlIHdpdGggUkFNUFogKi8KLSAgICAjZGVmaW5lIHBvcnRSRVNUT1JFX0NPTlRFWFQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICJsZHMgICAgcjI2LCBweEN1cnJlbnRUQ0IgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJsZHMgICAgcjI3LCBweEN1cnJlbnRUQ0IgKyAxICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJsZCAgICAgcjI4LCB4KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJvdXQgICAgX19TUF9MX18sIHIyOCAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJsZCAgICAgcjI5LCB4KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJvdXQgICAgX19TUF9IX18sIHIyOSAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjI5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjI4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjI3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjI2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjI1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjIzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjE5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjE4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjE3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgX196ZXJvX3JlZ19fICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgX190bXBfcmVnX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJvdXQgICAgMHgzQiwgX190bXBfcmVnX18gICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgX190bXBfcmVnX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJvdXQgICAgX19TUkVHX18sIF9fdG1wX3JlZ19fICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgX190bXBfcmVnX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0jZWxzZSAvKiBpZiBkZWZpbmVkKCBfX0FWUl8zX0JZVEVfUENfXyApICYmIGRlZmluZWQoIF9fQVZSX0hBVkVfUkFNUFpfXyApICovCisjZGVmaW5lIHBvcnRSRVNUT1JFX0NPTlRFWFQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICAibGRzICAgIHIyNiwgcHhDdXJyZW50VENCICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxkcyAgICByMjcsIHB4Q3VycmVudFRDQiArIDEgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsZCAgICAgcjI4LCB4KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3V0ICAgIF9fU1BfTF9fLCByMjggICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxkICAgICByMjksIHgrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvdXQgICAgX19TUF9IX18sIHIyOSAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHIzMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjI5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHIyOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByMjcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjI2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHIyNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByMjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjIzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHIyMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByMjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHIxOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByMTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjE3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHIxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHIxMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHIxMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHI3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIF9femVyb19yZWdfXyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICBfX3RtcF9yZWdfXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvdXQgICAgMHgzQiwgX190bXBfcmVnX18gICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIF9fdG1wX3JlZ19fICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm91dCAgICBfX1NSRUdfXywgX190bXBfcmVnX18gICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgX190bXBfcmVnX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworI2Vsc2UKIC8qIDItQnl0ZSBQQyBSZXN0b3JlICovCi0gICAgI2RlZmluZSBwb3J0UkVTVE9SRV9DT05URVhUKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCAibGRzICAgIHIyNiwgcHhDdXJyZW50VENCICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibGRzICAgIHIyNywgcHhDdXJyZW50VENCICsgMSAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibGQgICAgIHIyOCwgeCsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAib3V0ICAgIF9fU1BfTF9fLCByMjggICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibGQgICAgIHIyOSwgeCsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAib3V0ICAgIF9fU1BfSF9fLCByMjkgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHIzMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHIzMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHIyOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHIyOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHIyNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHIyNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHIyNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHIyNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHIyMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHIyMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHIyMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHIyMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHIxOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHIxOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHIxNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHIxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHIxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHIxNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHIxMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHIxMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHIxMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHIxMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHI5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHI4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHI3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHI2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHI1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHIzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIF9femVyb19yZWdfXyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIF9fdG1wX3JlZ19fICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAib3V0ICAgIF9fU1JFR19fLCBfX3RtcF9yZWdfXyAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIF9fdG1wX3JlZ19fICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICApOwotI2VuZGlmIC8qIGlmIGRlZmluZWQoIF9fQVZSXzNfQllURV9QQ19fICkgJiYgZGVmaW5lZCggX19BVlJfSEFWRV9SQU1QWl9fICkgKi8KKyNkZWZpbmUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICggICJsZHMgICAgcjI2LCBweEN1cnJlbnRUQ0IgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGRzICAgIHIyNywgcHhDdXJyZW50VENCICsgMSAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxkICAgICByMjgsIHgrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvdXQgICAgX19TUF9MX18sIHIyOCAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGQgICAgIHIyOSwgeCsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm91dCAgICBfX1NQX0hfXywgcjI5ICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHIzMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByMjkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjI4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHIyNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByMjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjI1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHIyNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByMjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHIyMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByMjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjE5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHIxOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByMTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHIxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHIxMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHI5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHI2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgcjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIHIzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCAgICByMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgX196ZXJvX3JlZ19fICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICAgIF9fdG1wX3JlZ19fICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm91dCAgICBfX1NSRUdfXywgX190bXBfcmVnX18gICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgICAgX190bXBfcmVnX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworI2VuZGlmCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyoKQEAgLTUyNCwxNyArNTIzLDE0IEBACiAvKgogICogU2VlIGhlYWRlciBmaWxlIGZvciBkZXNjcmlwdGlvbi4KICAqLwotU3RhY2tUeXBlX3QgKiBweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICogcHhUb3BPZlN0YWNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICogcHZQYXJhbWV0ZXJzICkKK1N0YWNrVHlwZV90ICpweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICpweFRvcE9mU3RhY2ssIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzICkKIHsKLSAgICB1aW50MTZfdCB1c0FkZHJlc3M7Ci0KK3VpbnQxNl90IHVzQWRkcmVzczsKICAgICAvKiBTaW11bGF0ZSBob3cgdGhlIHN0YWNrIHdvdWxkIGxvb2sgYWZ0ZXIgYSBjYWxsIHRvIHZQb3J0WWllbGQoKSBnZW5lcmF0ZWQgYnkKLSAgICAgKiB0aGUgY29tcGlsZXIuICovCisgICAgdGhlIGNvbXBpbGVyLiAqLwogCiAgICAgLyogVGhlIHN0YXJ0IG9mIHRoZSB0YXNrIGNvZGUgd2lsbCBiZSBwb3BwZWQgb2ZmIHRoZSBzdGFjayBsYXN0LCBzbyBwbGFjZQotICAgICAqIGl0IG9uIGZpcnN0LiAqLworICAgIGl0IG9uIGZpcnN0LiAqLwogICAgIHVzQWRkcmVzcyA9ICggdWludDE2X3QgKSBweENvZGU7CiAgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAoIHVzQWRkcmVzcyAmICggdWludDE2X3QgKSAweDAwZmYgKTsKICAgICBweFRvcE9mU3RhY2stLTsKQEAgLTU0Myw1MSArNTM5LDQ4IEBACiAgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAoIHVzQWRkcmVzcyAmICggdWludDE2X3QgKSAweDAwZmYgKTsKICAgICBweFRvcE9mU3RhY2stLTsKIAotICAgICNpZiBkZWZpbmVkKCBfX0FWUl8zX0JZVEVfUENfXyApCi0KLSAgICAgICAgLyogVGhlIEFWUiBBVG1lZ2EyNTYwL0FUbWVnYTI1NjEgaGF2ZSAyNTZLQnl0ZXMgb2YgcHJvZ3JhbSBtZW1vcnkgYW5kIGEgMTctYml0Ci0gICAgICAgICAqIHByb2dyYW0gY291bnRlci4gV2hlbiBhIGNvZGUgYWRkcmVzcyBpcyBzdG9yZWQgb24gdGhlIHN0YWNrLCBpdCB0YWtlcyAzIGJ5dGVzCi0gICAgICAgICAqIGluc3RlYWQgb2YgMiBmb3IgdGhlIG90aGVyIEFUbWVnYSogY2hpcHMuCi0gICAgICAgICAqCi0gICAgICAgICAqIFN0b3JlIDAgYXMgdGhlIHRvcCBieXRlIHNpbmNlIHdlIGZvcmNlIGFsbCB0YXNrIHJvdXRpbmVzIHRvIHRoZSBib3R0b20gMTI4SwotICAgICAgICAgKiBvZiBmbGFzaC4gV2UgZG8gdGhpcyBieSB1c2luZyB0aGUgLmxvd3RleHQgbGFiZWwgaW4gdGhlIGxpbmtlciBzY3JpcHQuCi0gICAgICAgICAqCi0gICAgICAgICAqIEluIG9yZGVyIHRvIGRvIHRoaXMgcHJvcGVybHksIHdlIHdvdWxkIG5lZWQgdG8gZ2V0IGEgZnVsbCAzLWJ5dGUgcG9pbnRlciB0bwotICAgICAgICAgKiBweENvZGUuIFRoYXQgcmVxdWlyZXMgYSBjaGFuZ2UgdG8gR0NDLiBOb3QgbGlrZWx5IHRvIGhhcHBlbiBhbnkgdGltZSBzb29uLgotICAgICAgICAgKi8KLSAgICAgICAgKnB4VG9wT2ZTdGFjayA9IDA7Ci0gICAgICAgIHB4VG9wT2ZTdGFjay0tOwotICAgICNlbmRpZgorI2lmIGRlZmluZWQoX19BVlJfM19CWVRFX1BDX18pCisgICAgLyogVGhlIEFWUiBBVG1lZ2EyNTYwL0FUbWVnYTI1NjEgaGF2ZSAyNTZLQnl0ZXMgb2YgcHJvZ3JhbSBtZW1vcnkgYW5kIGEgMTctYml0CisgICAgICogcHJvZ3JhbSBjb3VudGVyLiBXaGVuIGEgY29kZSBhZGRyZXNzIGlzIHN0b3JlZCBvbiB0aGUgc3RhY2ssIGl0IHRha2VzIDMgYnl0ZXMKKyAgICAgKiBpbnN0ZWFkIG9mIDIgZm9yIHRoZSBvdGhlciBBVG1lZ2EqIGNoaXBzLgorICAgICAqCisgICAgICogU3RvcmUgMCBhcyB0aGUgdG9wIGJ5dGUgc2luY2Ugd2UgZm9yY2UgYWxsIHRhc2sgcm91dGluZXMgdG8gdGhlIGJvdHRvbSAxMjhLCisgICAgICogb2YgZmxhc2guIFdlIGRvIHRoaXMgYnkgdXNpbmcgdGhlIC5sb3d0ZXh0IGxhYmVsIGluIHRoZSBsaW5rZXIgc2NyaXB0LgorICAgICAqCisgICAgICogSW4gb3JkZXIgdG8gZG8gdGhpcyBwcm9wZXJseSwgd2Ugd291bGQgbmVlZCB0byBnZXQgYSBmdWxsIDMtYnl0ZSBwb2ludGVyIHRvCisgICAgICogcHhDb2RlLiBUaGF0IHJlcXVpcmVzIGEgY2hhbmdlIHRvIEdDQy4gTm90IGxpa2VseSB0byBoYXBwZW4gYW55IHRpbWUgc29vbi4KKyAgICAgKi8KKyAgICAqcHhUb3BPZlN0YWNrID0gMDsKKyAgICBweFRvcE9mU3RhY2stLTsKKyNlbmRpZgogCiAgICAgLyogTmV4dCBzaW11bGF0ZSB0aGUgc3RhY2sgYXMgaWYgYWZ0ZXIgYSBjYWxsIHRvIHBvcnRTQVZFX0NPTlRFWFQoKS4KLSAgICAgKiAgcG9ydFNBVkVfQ09OVEVYVCBwbGFjZXMgdGhlIGZsYWdzIG9uIHRoZSBzdGFjayBpbW1lZGlhdGVseSBhZnRlciByMAotICAgICAqICB0byBlbnN1cmUgdGhlIGludGVycnVwdHMgZ2V0IGRpc2FibGVkIGFzIHNvb24gYXMgcG9zc2libGUsIGFuZCBzbyBlbnN1cmluZwotICAgICAqICB0aGUgc3RhY2sgdXNlIGlzIG1pbmltYWwgc2hvdWxkIGEgY29udGV4dCBzd2l0Y2ggaW50ZXJydXB0IG9jY3VyLiAqLwotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMDsgLyogUjAgKi8KKyAgICBwb3J0U0FWRV9DT05URVhUIHBsYWNlcyB0aGUgZmxhZ3Mgb24gdGhlIHN0YWNrIGltbWVkaWF0ZWx5IGFmdGVyIHIwCisgICAgdG8gZW5zdXJlIHRoZSBpbnRlcnJ1cHRzIGdldCBkaXNhYmxlZCBhcyBzb29uIGFzIHBvc3NpYmxlLCBhbmQgc28gZW5zdXJpbmcKKyAgICB0aGUgc3RhY2sgdXNlIGlzIG1pbmltYWwgc2hvdWxkIGEgY29udGV4dCBzd2l0Y2ggaW50ZXJydXB0IG9jY3VyLiAqLworICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMDsgICAgLyogUjAgKi8KICAgICBweFRvcE9mU3RhY2stLTsKICAgICAqcHhUb3BPZlN0YWNrID0gcG9ydEZMQUdTX0lOVF9FTkFCTEVEOwogICAgIHB4VG9wT2ZTdGFjay0tOwogCi0gICAgI2lmIGRlZmluZWQoIF9fQVZSXzNfQllURV9QQ19fICkKKyNpZiBkZWZpbmVkKF9fQVZSXzNfQllURV9QQ19fKQorICAgIC8qIElmIHdlIGhhdmUgYW4gQVRtZWdhMjU2eCwgd2UgYXJlIGFsc28gc2F2aW5nIHRoZSBFSU5EIHJlZ2lzdGVyLgorICAgICAqIFdlIHNob3VsZCBkZWZhdWx0IHRvIDAuCisgICAgICovCisgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAwOyAgICAvKiBFSU5EICovCisgICAgcHhUb3BPZlN0YWNrLS07CisjZW5kaWYKIAotICAgICAgICAvKiBJZiB3ZSBoYXZlIGFuIEFUbWVnYTI1NngsIHdlIGFyZSBhbHNvIHNhdmluZyB0aGUgRUlORCByZWdpc3Rlci4KLSAgICAgICAgICogV2Ugc2hvdWxkIGRlZmF1bHQgdG8gMC4KLSAgICAgICAgICovCi0gICAgICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMDsgLyogRUlORCAqLwotICAgICAgICBweFRvcE9mU3RhY2stLTsKLSAgICAjZW5kaWYKLQotICAgICNpZiBkZWZpbmVkKCBfX0FWUl9IQVZFX1JBTVBaX18gKQotCi0gICAgICAgIC8qIFdlIGFyZSBzYXZpbmcgdGhlIFJBTVBaIHJlZ2lzdGVyLgotICAgICAgICAgKiBXZSBzaG91bGQgZGVmYXVsdCB0byAwLgotICAgICAgICAgKi8KLSAgICAgICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAwOyAvKiBSQU1QWiAqLwotICAgICAgICBweFRvcE9mU3RhY2stLTsKLSAgICAjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQVZSX0hBVkVfUkFNUFpfXykKKyAgICAvKiBXZSBhcmUgc2F2aW5nIHRoZSBSQU1QWiByZWdpc3Rlci4KKyAgICAgKiBXZSBzaG91bGQgZGVmYXVsdCB0byAwLgorICAgICAqLworICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMDsgICAgLyogUkFNUFogKi8KKyAgICBweFRvcE9mU3RhY2stLTsKKyNlbmRpZgogCiAgICAgLyogTm93IHRoZSByZW1haW5pbmcgcmVnaXN0ZXJzLiBUaGUgY29tcGlsZXIgZXhwZWN0cyBSMSB0byBiZSAwLiAqLwotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHgwMDsgLyogUjEgKi8KKyAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDA7ICAgIC8qIFIxICovCiAKICAgICAvKiBMZWF2ZSBSMiAtIFIyMyB1bnRvdWNoZWQgKi8KICAgICBweFRvcE9mU3RhY2sgLT0gMjM7CkBAIC02MTYsNyArNjA5LDcgQEAKICAgICBwb3J0UkVTVE9SRV9DT05URVhUKCk7CiAKICAgICAvKiBTaW11bGF0ZSBhIGZ1bmN0aW9uIGNhbGwgZW5kIGFzIGdlbmVyYXRlZCBieSB0aGUgY29tcGlsZXIuIFdlIHdpbGwgbm93Ci0gICAgICoganVtcCB0byB0aGUgc3RhcnQgb2YgdGhlIHRhc2sgdGhlIGNvbnRleHQgb2Ygd2hpY2ggd2UgaGF2ZSBqdXN0IHJlc3RvcmVkLiAqLworICAgIGp1bXAgdG8gdGhlIHN0YXJ0IG9mIHRoZSB0YXNrIHRoZSBjb250ZXh0IG9mIHdoaWNoIHdlIGhhdmUganVzdCByZXN0b3JlZC4gKi8KICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICJyZXQiICk7CiAKICAgICAvKiBTaG91bGQgbm90IGdldCBoZXJlLiAqLwpAQCAtNjI2LDcgKzYxOSw3IEBACiAKIHZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQogewotICAgIC8qIEl0IGlzIHVubGlrZWx5IHRoYXQgdGhlIEFUbWVnYSBwb3J0IHdpbGwgZ2V0IHN0b3BwZWQuICovCisJLyogSXQgaXMgdW5saWtlbHkgdGhhdCB0aGUgQVRtZWdhIHBvcnQgd2lsbCBnZXQgc3RvcHBlZC4gKi8KIH0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC02MzQsNyArNjI3LDcgQEAKICAqIE1hbnVhbCBjb250ZXh0IHN3aXRjaC4gVGhlIGZpcnN0IHRoaW5nIHdlIGRvIGlzIHNhdmUgdGhlIHJlZ2lzdGVycyBzbyB3ZQogICogY2FuIHVzZSBhIG5ha2VkIGF0dHJpYnV0ZS4KICAqLwotdm9pZCB2UG9ydFlpZWxkKCB2b2lkICkgX19hdHRyaWJ1dGVfXyggKCBob3QsIGZsYXR0ZW4sIG5ha2VkICkgKTsKK3ZvaWQgdlBvcnRZaWVsZCggdm9pZCApIF9fYXR0cmlidXRlX18gKCAoIGhvdCwgZmxhdHRlbiwgbmFrZWQgKSApOwogdm9pZCB2UG9ydFlpZWxkKCB2b2lkICkKIHsKICAgICBwb3J0U0FWRV9DT05URVhUKCk7CkBAIC02NDksOCArNjQyLDggQEAKICAqIE1hbnVhbCBjb250ZXh0IHN3aXRjaCBjYWxsYWJsZSBmcm9tIElTUnMuIFRoZSBmaXJzdCB0aGluZyB3ZSBkbyBpcyBzYXZlCiAgKiB0aGUgcmVnaXN0ZXJzIHNvIHdlIGNhbiB1c2UgYSBuYWtlZCBhdHRyaWJ1dGUuCiAgKi8KLXZvaWQgdlBvcnRZaWVsZEZyb21JU1IoIHZvaWQgKSBfX2F0dHJpYnV0ZV9fKCAoIGhvdCwgZmxhdHRlbiwgbmFrZWQgKSApOwotdm9pZCB2UG9ydFlpZWxkRnJvbUlTUiggdm9pZCApCit2b2lkIHZQb3J0WWllbGRGcm9tSVNSKHZvaWQpIF9fYXR0cmlidXRlX18gKCAoIGhvdCwgZmxhdHRlbiwgbmFrZWQgKSApOwordm9pZCB2UG9ydFlpZWxkRnJvbUlTUih2b2lkKQogewogICAgIHBvcnRTQVZFX0NPTlRFWFQoKTsKICAgICB2VGFza1N3aXRjaENvbnRleHQoKTsKQEAgLTY2NiwxMTEgKzY1OSwxMDcgQEAKICAqIGRpZmZlcmVuY2UgZnJvbSB2UG9ydFlpZWxkKCkgaXMgdGhlIHRpY2sgY291bnQgaXMgaW5jcmVtZW50ZWQgYXMgdGhlCiAgKiBjYWxsIGNvbWVzIGZyb20gdGhlIHRpY2sgSVNSLgogICovCi12b2lkIHZQb3J0WWllbGRGcm9tVGljayggdm9pZCApIF9fYXR0cmlidXRlX18oICggaG90LCBmbGF0dGVuLCBuYWtlZCApICk7Cit2b2lkIHZQb3J0WWllbGRGcm9tVGljayggdm9pZCApIF9fYXR0cmlidXRlX18gKCAoIGhvdCwgZmxhdHRlbiwgbmFrZWQgKSApOwogdm9pZCB2UG9ydFlpZWxkRnJvbVRpY2soIHZvaWQgKQogewogICAgIHBvcnRTQVZFX0NPTlRFWFQoKTsKLQogICAgIGlmKCB4VGFza0luY3JlbWVudFRpY2soKSAhPSBwZEZBTFNFICkKICAgICB7CiAgICAgICAgIHZUYXNrU3dpdGNoQ29udGV4dCgpOwogICAgIH0KLQogICAgIHBvcnRSRVNUT1JFX0NPTlRFWFQoKTsKIAogICAgIF9fYXNtX18gX192b2xhdGlsZV9fICggInJldCIgKTsKIH0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0jaWYgZGVmaW5lZCggcG9ydFVTRV9XRFRPICkKLQorI2lmIGRlZmluZWQocG9ydFVTRV9XRFRPKQogLyoKICAqIFNldHVwIFdEVCB0byBnZW5lcmF0ZSBhIHRpY2sgaW50ZXJydXB0LgogICovCi0gICAgdm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICkKLSAgICB7Ci0gICAgICAgIC8qIHJlc2V0IHdhdGNoZG9nICovCi0gICAgICAgIHdkdF9yZXNldCgpOwordm9pZCBwcnZTZXR1cFRpbWVySW50ZXJydXB0KCB2b2lkICkKK3sKKyAgICAvKiByZXNldCB3YXRjaGRvZyAqLworICAgIHdkdF9yZXNldCgpOwogCi0gICAgICAgIC8qIHNldCB1cCBXRFQgSW50ZXJydXB0IChyYXRoZXIgdGhhbiB0aGUgV0RUIFJlc2V0KS4gKi8KLSAgICAgICAgd2R0X2ludGVycnVwdF9lbmFibGUoIHBvcnRVU0VfV0RUTyApOwotICAgIH0KKyAgICAvKiBzZXQgdXAgV0RUIEludGVycnVwdCAocmF0aGVyIHRoYW4gdGhlIFdEVCBSZXNldCkuICovCisgICAgd2R0X2ludGVycnVwdF9lbmFibGUoIHBvcnRVU0VfV0RUTyApOworfQogCi0jZWxpZiBkZWZpbmVkKCBwb3J0VVNFX1RJTUVSMCApCi0KKyNlbGlmIGRlZmluZWQgKHBvcnRVU0VfVElNRVIwKQogLyoKICAqIFNldHVwIFRpbWVyMCBjb21wYXJlIG1hdGNoIEEgdG8gZ2VuZXJhdGUgYSB0aWNrIGludGVycnVwdC4KICAqLwotICAgIHN0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKQotICAgIHsKLSAgICAgICAgdWludDMyX3QgdWxDb21wYXJlTWF0Y2g7Ci0gICAgICAgIHVpbnQ4X3QgdWNMb3dCeXRlOworc3RhdGljIHZvaWQgcHJ2U2V0dXBUaW1lckludGVycnVwdCggdm9pZCApCit7Cit1aW50MzJfdCB1bENvbXBhcmVNYXRjaDsKK3VpbnQ4X3QgdWNMb3dCeXRlOwogCi0gICAgICAgIC8qIFVzaW5nIDhiaXQgVGltZXIwIHRvIGdlbmVyYXRlIHRoZSB0aWNrLiBDb3JyZWN0IGZ1c2VzIG11c3QgYmUKLSAgICAgICAgICogc2VsZWN0ZWQgZm9yIHRoZSBjb25maWdDUFVfQ0xPQ0tfSFogY2xvY2suKi8KKyAgICAvKiBVc2luZyA4Yml0IFRpbWVyMCB0byBnZW5lcmF0ZSB0aGUgdGljay4gQ29ycmVjdCBmdXNlcyBtdXN0IGJlCisgICAgc2VsZWN0ZWQgZm9yIHRoZSBjb25maWdDUFVfQ0xPQ0tfSFogY2xvY2suKi8KIAotICAgICAgICB1bENvbXBhcmVNYXRjaCA9IGNvbmZpZ0NQVV9DTE9DS19IWiAvIGNvbmZpZ1RJQ0tfUkFURV9IWjsKKyAgICB1bENvbXBhcmVNYXRjaCA9IGNvbmZpZ0NQVV9DTE9DS19IWiAvIGNvbmZpZ1RJQ0tfUkFURV9IWjsKIAotICAgICAgICAvKiBXZSBvbmx5IGhhdmUgOCBiaXRzIHNvIGhhdmUgdG8gc2NhbGUgMTAyNCB0byBnZXQgb3VyIHJlcXVpcmVkIHRpY2sgcmF0ZS4gKi8KLSAgICAgICAgdWxDb21wYXJlTWF0Y2ggLz0gcG9ydENMT0NLX1BSRVNDQUxFUjsKKyAgICAvKiBXZSBvbmx5IGhhdmUgOCBiaXRzIHNvIGhhdmUgdG8gc2NhbGUgMTAyNCB0byBnZXQgb3VyIHJlcXVpcmVkIHRpY2sgcmF0ZS4gKi8KKyAgICB1bENvbXBhcmVNYXRjaCAvPSBwb3J0Q0xPQ0tfUFJFU0NBTEVSOwogCi0gICAgICAgIC8qIEFkanVzdCBmb3IgY29ycmVjdCB2YWx1ZS4gKi8KLSAgICAgICAgdWxDb21wYXJlTWF0Y2ggLT0gKCB1aW50MzJfdCApIDE7CisgICAgLyogQWRqdXN0IGZvciBjb3JyZWN0IHZhbHVlLiAqLworICAgIHVsQ29tcGFyZU1hdGNoIC09ICggdWludDMyX3QgKSAxOwogCi0gICAgICAgIC8qIFNldHVwIGNvbXBhcmUgbWF0Y2ggdmFsdWUgZm9yIGNvbXBhcmUgbWF0Y2ggQS4gSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQKLSAgICAgICAgICogYmVmb3JlIHRoaXMgaXMgY2FsbGVkIHNvIHdlIG5lZWQgbm90IHdvcnJ5IGhlcmUuICovCi0gICAgICAgIHVjTG93Qnl0ZSA9ICggdWludDhfdCApICggdWxDb21wYXJlTWF0Y2ggJiAoIHVpbnQzMl90ICkgMHhmZiApOwotICAgICAgICBwb3J0T0NSTCA9IHVjTG93Qnl0ZTsKKyAgICAvKiBTZXR1cCBjb21wYXJlIG1hdGNoIHZhbHVlIGZvciBjb21wYXJlIG1hdGNoIEEuIEludGVycnVwdHMgYXJlIGRpc2FibGVkCisgICAgYmVmb3JlIHRoaXMgaXMgY2FsbGVkIHNvIHdlIG5lZWQgbm90IHdvcnJ5IGhlcmUuICovCisgICAgdWNMb3dCeXRlID0gKCB1aW50OF90ICkgKCB1bENvbXBhcmVNYXRjaCAmICggdWludDMyX3QgKSAweGZmICk7CisgICAgcG9ydE9DUkwgPSB1Y0xvd0J5dGU7CiAKLSAgICAgICAgLyogU2V0dXAgY2xvY2sgc291cmNlIGFuZCBjb21wYXJlIG1hdGNoIGJlaGF2aW91ci4gKi8KLSAgICAgICAgcG9ydFRDQ1JhID0gcG9ydENMRUFSX0NPVU5URVJfT05fTUFUQ0g7Ci0gICAgICAgIHBvcnRUQ0NSYiA9IHBvcnRQUkVTQ0FMRV8xMDI0OworICAgIC8qIFNldHVwIGNsb2NrIHNvdXJjZSBhbmQgY29tcGFyZSBtYXRjaCBiZWhhdmlvdXIuICovCisgICAgcG9ydFRDQ1JhID0gcG9ydENMRUFSX0NPVU5URVJfT05fTUFUQ0g7CisgICAgcG9ydFRDQ1JiID0gcG9ydFBSRVNDQUxFXzEwMjQ7CiAKIAotICAgICAgICAvKiBFbmFibGUgdGhlIGludGVycnVwdCAtIHRoaXMgaXMgb2theSBhcyBpbnRlcnJ1cHQgYXJlIGN1cnJlbnRseSBnbG9iYWxseSBkaXNhYmxlZC4gKi8KLSAgICAgICAgdWNMb3dCeXRlID0gcG9ydFRJTVNLOwotICAgICAgICB1Y0xvd0J5dGUgfD0gcG9ydENPTVBBUkVfTUFUQ0hfQV9JTlRFUlJVUFRfRU5BQkxFOwotICAgICAgICBwb3J0VElNU0sgPSB1Y0xvd0J5dGU7Ci0gICAgfQorICAgIC8qIEVuYWJsZSB0aGUgaW50ZXJydXB0IC0gdGhpcyBpcyBva2F5IGFzIGludGVycnVwdCBhcmUgY3VycmVudGx5IGdsb2JhbGx5IGRpc2FibGVkLiAqLworICAgIHVjTG93Qnl0ZSA9IHBvcnRUSU1TSzsKKyAgICB1Y0xvd0J5dGUgfD0gcG9ydENPTVBBUkVfTUFUQ0hfQV9JTlRFUlJVUFRfRU5BQkxFOworICAgIHBvcnRUSU1TSyA9IHVjTG93Qnl0ZTsKK30KIAotI2VuZGlmIC8qIGlmIGRlZmluZWQoIHBvcnRVU0VfV0RUTyApICovCisjZW5kaWYKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKICNpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAxCiAKLS8qCi0gKiBUaWNrIElTUiBmb3IgcHJlZW1wdGl2ZSBzY2hlZHVsZXIuIFdlIGNhbiB1c2UgYSBuYWtlZCBhdHRyaWJ1dGUgYXMKLSAqIHRoZSBjb250ZXh0IGlzIHNhdmVkIGF0IHRoZSBzdGFydCBvZiB2UG9ydFlpZWxkRnJvbVRpY2soKS4gVGhlIHRpY2sKLSAqIGNvdW50IGlzIGluY3JlbWVudGVkIGFmdGVyIHRoZSBjb250ZXh0IGlzIHNhdmVkLgotICoKLSAqIHVzZSBJU1JfTk9CTE9DSyB3aGVyZSB0aGVyZSBpcyBhbiBpbXBvcnRhbnQgdGltZXIgcnVubmluZywgdGhhdCBzaG91bGQgcHJlZW1wdCB0aGUgc2NoZWR1bGVyLgotICoKLSAqLwotICAgIElTUiggcG9ydFNDSEVEVUxFUl9JU1IsIElTUl9OQUtFRCApIF9fYXR0cmlidXRlX18oICggaG90LCBmbGF0dGVuICkgKTsKLQorICAgIC8qCisgICAgICogVGljayBJU1IgZm9yIHByZWVtcHRpdmUgc2NoZWR1bGVyLiBXZSBjYW4gdXNlIGEgbmFrZWQgYXR0cmlidXRlIGFzCisgICAgICogdGhlIGNvbnRleHQgaXMgc2F2ZWQgYXQgdGhlIHN0YXJ0IG9mIHZQb3J0WWllbGRGcm9tVGljaygpLiBUaGUgdGljaworICAgICAqIGNvdW50IGlzIGluY3JlbWVudGVkIGFmdGVyIHRoZSBjb250ZXh0IGlzIHNhdmVkLgorICAgICAqCisgICAgICogdXNlIElTUl9OT0JMT0NLIHdoZXJlIHRoZXJlIGlzIGFuIGltcG9ydGFudCB0aW1lciBydW5uaW5nLCB0aGF0IHNob3VsZCBwcmVlbXB0IHRoZSBzY2hlZHVsZXIuCisgICAgICoKKyAgICAgKi8KKyAgICBJU1IocG9ydFNDSEVEVUxFUl9JU1IsIElTUl9OQUtFRCkgX19hdHRyaWJ1dGVfXyAoKGhvdCwgZmxhdHRlbikpOwogLyogIElTUihwb3J0U0NIRURVTEVSX0lTUiwgSVNSX05BS0VEIElTUl9OT0JMT0NLKSBfX2F0dHJpYnV0ZV9fICgoaG90LCBmbGF0dGVuKSk7CiAgKi8KLSAgICBJU1IoIHBvcnRTQ0hFRFVMRVJfSVNSICkKKyAgICBJU1IocG9ydFNDSEVEVUxFUl9JU1IpCiAgICAgewogICAgICAgICB2UG9ydFlpZWxkRnJvbVRpY2soKTsKICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCAicmV0aSIgKTsKICAgICB9Ci0jZWxzZSAvKiBpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAxICovCisjZWxzZQogCi0vKgotICogVGljayBJU1IgZm9yIHRoZSBjb29wZXJhdGl2ZSBzY2hlZHVsZXIuIEFsbCB0aGlzIGRvZXMgaXMgaW5jcmVtZW50IHRoZQotICogdGljayBjb3VudC4gV2UgZG9uJ3QgbmVlZCB0byBzd2l0Y2ggY29udGV4dCwgdGhpcyBjYW4gb25seSBiZSBkb25lIGJ5Ci0gKiBtYW51YWwgY2FsbHMgdG8gdGFza1lJRUxEKCk7Ci0gKgotICogdXNlIElTUl9OT0JMT0NLIHdoZXJlIHRoZXJlIGlzIGFuIGltcG9ydGFudCB0aW1lciBydW5uaW5nLCB0aGF0IHNob3VsZCBwcmVlbXB0IHRoZSBzY2hlZHVsZXIuCi0gKi8KLSAgICBJU1IoIHBvcnRTQ0hFRFVMRVJfSVNSICkgX19hdHRyaWJ1dGVfXyggKCBob3QsIGZsYXR0ZW4gKSApOwotCisgICAgLyoKKyAgICAgKiBUaWNrIElTUiBmb3IgdGhlIGNvb3BlcmF0aXZlIHNjaGVkdWxlci4gQWxsIHRoaXMgZG9lcyBpcyBpbmNyZW1lbnQgdGhlCisgICAgICogdGljayBjb3VudC4gV2UgZG9uJ3QgbmVlZCB0byBzd2l0Y2ggY29udGV4dCwgdGhpcyBjYW4gb25seSBiZSBkb25lIGJ5CisgICAgICogbWFudWFsIGNhbGxzIHRvIHRhc2tZSUVMRCgpOworICAgICAqCisgICAgICogdXNlIElTUl9OT0JMT0NLIHdoZXJlIHRoZXJlIGlzIGFuIGltcG9ydGFudCB0aW1lciBydW5uaW5nLCB0aGF0IHNob3VsZCBwcmVlbXB0IHRoZSBzY2hlZHVsZXIuCisgICAgICovCisgICAgSVNSKHBvcnRTQ0hFRFVMRVJfSVNSKSBfX2F0dHJpYnV0ZV9fICgoaG90LCBmbGF0dGVuKSk7CiAvKiAgSVNSKHBvcnRTQ0hFRFVMRVJfSVNSLCBJU1JfTk9CTE9DSykgX19hdHRyaWJ1dGVfXyAoKGhvdCwgZmxhdHRlbikpOwogICovCi0gICAgSVNSKCBwb3J0U0NIRURVTEVSX0lTUiApCisgICAgSVNSKHBvcnRTQ0hFRFVMRVJfSVNSKQogICAgIHsKICAgICAgICAgeFRhc2tJbmNyZW1lbnRUaWNrKCk7CiAgICAgfQotI2VuZGlmIC8qIGlmIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDEgKi8KKyNlbmRpZgorCisKZGlmZiAtLWdpdCBhL3BvcnRhYmxlL1RoaXJkUGFydHkvR0NDL0FUbWVnYS9wb3J0bWFjcm8uaCBiL3BvcnRhYmxlL1RoaXJkUGFydHkvR0NDL0FUbWVnYS9wb3J0bWFjcm8uaAppbmRleCBhYjNkYzFmLi5iNmI1MTI4IDEwMDY0NAotLS0gYS9wb3J0YWJsZS9UaGlyZFBhcnR5L0dDQy9BVG1lZ2EvcG9ydG1hY3JvLmgKKysrIGIvcG9ydGFibGUvVGhpcmRQYXJ0eS9HQ0MvQVRtZWdhL3BvcnRtYWNyby5oCkBAIC0yMywxNCArMjMsMTQgQEAKICAqIGh0dHA6Ly9hd3MuYW1hem9uLmNvbS9mcmVlcnRvcwogICoKICAqIDEgdGFiID09IDQgc3BhY2VzIQotICovCisqLwogCiAjaWZuZGVmIFBPUlRNQUNST19ICi0gICAgI2RlZmluZSBQT1JUTUFDUk9fSAorI2RlZmluZSBQT1JUTUFDUk9fSAogCi0gICAgI2lmZGVmIF9fY3BsdXNwbHVzCi0gICAgICAgIGV4dGVybiAiQyIgewotICAgICNlbmRpZgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBQb3J0IHNwZWNpZmljIGRlZmluaXRpb25zLgpAQCAtNDIsNDkgKzQyLDQ3IEBACiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIAotICAgICNpbmNsdWRlIDxhdnIvd2R0Lmg+CisjaW5jbHVkZSA8YXZyL3dkdC5oPgogCiAvKiBUeXBlIGRlZmluaXRpb25zLiAqLwotICAgICNkZWZpbmUgcG9ydENIQVIgICAgICBjaGFyCi0gICAgI2RlZmluZSBwb3J0RkxPQVQgICAgIGZsb2F0Ci0gICAgI2RlZmluZSBwb3J0RE9VQkxFICAgIGRvdWJsZQotICAgICNkZWZpbmUgcG9ydExPTkcgICAgICBsb25nCi0gICAgI2RlZmluZSBwb3J0U0hPUlQgICAgIGludAorI2RlZmluZSBwb3J0Q0hBUiAgICAgICAgICAgICAgICAgICAgY2hhcgorI2RlZmluZSBwb3J0RkxPQVQgICAgICAgICAgICAgICAgICAgZmxvYXQKKyNkZWZpbmUgcG9ydERPVUJMRSAgICAgICAgICAgICAgICAgIGRvdWJsZQorI2RlZmluZSBwb3J0TE9ORyAgICAgICAgICAgICAgICAgICAgbG9uZworI2RlZmluZSBwb3J0U0hPUlQgICAgICAgICAgICAgICAgICAgaW50CiAKLSAgICB0eXBlZGVmIHVpbnQ4X3QgICAgICAgIFN0YWNrVHlwZV90OwotICAgIHR5cGVkZWYgaW50OF90ICAgICAgICAgQmFzZVR5cGVfdDsKLSAgICB0eXBlZGVmIHVpbnQ4X3QgICAgICAgIFVCYXNlVHlwZV90OwordHlwZWRlZiB1aW50OF90ICAgICAgICAgICAgICAgICAgICAgU3RhY2tUeXBlX3Q7Cit0eXBlZGVmIGludDhfdCAgICAgICAgICAgICAgICAgICAgICBCYXNlVHlwZV90OwordHlwZWRlZiB1aW50OF90ICAgICAgICAgICAgICAgICAgICAgVUJhc2VUeXBlX3Q7CiAKLSAgICAjaWYgY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxCi0gICAgICAgIHR5cGVkZWYgdWludDE2X3QgICBUaWNrVHlwZV90OwotICAgICAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmCi0gICAgI2Vsc2UKLSAgICAgICAgdHlwZWRlZiB1aW50MzJfdCAgIFRpY2tUeXBlX3Q7Ci0gICAgICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwKLSAgICAjZW5kaWYKKyNpZiBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEKKyAgICB0eXBlZGVmIHVpbnQxNl90ICAgICAgICAgICAgICAgIFRpY2tUeXBlX3Q7CisgICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICAgICAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmYKKyNlbHNlCisgICAgdHlwZWRlZiB1aW50MzJfdCAgICAgICAgICAgICAgICBUaWNrVHlwZV90OworICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAgICAgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMCisjZW5kaWYKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKiBDcml0aWNhbCBzZWN0aW9uIG1hbmFnZW1lbnQuICovCiAKLSAgICAjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgImluIF9fdG1wX3JlZ19fLCBfX1NSRUdfXyIgICAgICAgICJcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjbGkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVzaCBfX3RtcF9yZWdfXyIgICAgICAgICAgICAgICAgIlxuXHQiIFwKLSAgICAgICAgOjo6ICJtZW1vcnkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgKQorI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKSAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbiBfX3RtcF9yZWdfXywgX19TUkVHX18iICAgICAgICAiXG5cdCIgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjbGkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG5cdCIgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNoIF9fdG1wX3JlZ19fIiAgICAgICAgICAgICAgICAiXG5cdCIgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6OiAibWVtb3J5IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKIAogCi0gICAgI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAicG9wIF9fdG1wX3JlZ19fIiAgICAgICAgICAgICAgICAgIlxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3V0IF9fU1JFR19fLCBfX3RtcF9yZWdfXyIgICAgICAgIlxuXHQiIFwKLSAgICAgICAgOjo6ICJtZW1vcnkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICApCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcCBfX3RtcF9yZWdfXyIgICAgICAgICAgICAgICAgICJcblx0IiAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm91dCBfX1NSRUdfXywgX190bXBfcmVnX18iICAgICAgICJcblx0IiAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjo6ICJtZW1vcnkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogCiAKLSAgICAjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICJjbGkiIDo6OiAibWVtb3J5IiApCi0gICAgI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKSAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCAic2VpIiA6OjogIm1lbW9yeSIgKQorI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCAiY2xpIiA6OjogIm1lbW9yeSIpCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICJzZWkiIDo6OiAibWVtb3J5IikKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWNzLiAqLwpAQCAtOTMsNjYgKzkxLDY2IEBACiAgKiBQcmVmZXIgdG8gdXNlIHRoZSBlbmhhbmNlZCBXYXRjaGRvZyBUaW1lciwgYnV0IGFsc28gVGltZXIwIGlzIG9rLgogICovCiAKLSAgICAjaWYgZGVmaW5lZCggV0RJRSApICYmIGRlZmluZWQoIFdESUYgKSAvKiBJZiBFbmhhbmNlZCBXRFQgd2l0aCBpbnRlcnJ1cHQgY2FwYWJpbGl0eSBpcyBhdmFpbGFibGUgKi8KKyNpZiBkZWZpbmVkKFdESUUpICYmIGRlZmluZWQoV0RJRikgICAgICAgICAgICAgIC8qIElmIEVuaGFuY2VkIFdEVCB3aXRoIGludGVycnVwdCBjYXBhYmlsaXR5IGlzIGF2YWlsYWJsZSAqLwogCi0gICAgICAgICNkZWZpbmUgcG9ydFVTRV9XRFRPICAgIFdEVE9fMTVNUyAgLyogdXNlIHRoZSBXYXRjaGRvZyBUaW1lciBmb3IgeFRhc2tJbmNyZW1lbnRUaWNrICovCisjZGVmaW5lIHBvcnRVU0VfV0RUTyAgICAgICAgICAgICAgICBXRFRPXzE1TVMgICAvKiB1c2UgdGhlIFdhdGNoZG9nIFRpbWVyIGZvciB4VGFza0luY3JlbWVudFRpY2sgKi8KIAogLyogV2F0Y2hkb2cgcGVyaW9kIG9wdGlvbnM6ICAgICAgICAgV0RUT18xNU1TCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRFRPXzMwTVMKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdEVE9fNjBNUwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0RUT18xMjBNUwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0RUT18yNTBNUwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0RUT181MDBNUwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0RUT18xUwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0RUT18yUwotICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRFRPXzMwTVMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdEVE9fNjBNUworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0RUT18xMjBNUworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0RUT18yNTBNUworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0RUT181MDBNUworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0RUT18xUworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0RUT18yUworKi8KIAotICAgICNlbHNlCisjZWxzZQogCi0gICAgICAgICNkZWZpbmUgcG9ydFVTRV9USU1FUjAgICAgLyogdXNlIHRoZSA4LWJpdCBUaW1lcjAgZm9yIHhUYXNrSW5jcmVtZW50VGljayAqLworI2RlZmluZSBwb3J0VVNFX1RJTUVSMCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdXNlIHRoZSA4LWJpdCBUaW1lcjAgZm9yIHhUYXNrSW5jcmVtZW50VGljayAqLwogCi0gICAgI2VuZGlmCisjZW5kaWYKIAotICAgICNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSCAgICAoIC0xICkKKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSCAgICAgICAgICAgICggLTEgKQogCiAvKiBUaW1pbmcgZm9yIHRoZSBzY2hlZHVsZXIuCiAgKiBXYXRjaGRvZyBUaW1lciBpcyAxMjhrSHogbm9taW5hbCwKICAqIGJ1dCAxMjAga0h6IGF0IDVWIERDIGFuZCAyNSBkZWdyZWVzIGlzIGFjdHVhbGx5IG1vcmUgYWNjdXJhdGUsCiAgKiBmcm9tIGRhdGEgc2hlZXQuCiAgKi8KLSAgICAjaWYgZGVmaW5lZCggcG9ydFVTRV9XRFRPICkKLSAgICAgICAgI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMgICAgKCAoIFRpY2tUeXBlX3QgKSBfQlYoIHBvcnRVU0VfV0RUTyArIDQgKSApCi0gICAgI2Vsc2UKLSAgICAgICAgI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMgICAgKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkKLSAgICAjZW5kaWYKKyNpZiBkZWZpbmVkKCBwb3J0VVNFX1dEVE8gKQorI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMgICAgICAgICAgKCAoVGlja1R5cGVfdCkgX0JWKCBwb3J0VVNFX1dEVE8gKyA0ICkgKQorI2Vsc2UKKyNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TICAgICAgICAgICggKFRpY2tUeXBlX3QpIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQorI2VuZGlmCiAKLSAgICAjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVCAgICAgICAgMQotICAgICNkZWZpbmUgcG9ydE5PUCgpICAgIF9fYXNtX18gX192b2xhdGlsZV9fICggIm5vcCIgKTsKKyNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UICAgICAgICAgIDEKKyNkZWZpbmUgcG9ydE5PUCgpICAgICAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICggIm5vcCIgKTsKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKiBLZXJuZWwgdXRpbGl0aWVzLiAqLwotICAgIGV4dGVybiB2b2lkIHZQb3J0WWllbGQoIHZvaWQgKSAgICAgIF9fYXR0cmlidXRlX18oICggbmFrZWQgKSApOwotICAgICNkZWZpbmUgcG9ydFlJRUxEKCkgICAgICAgICAgICAgdlBvcnRZaWVsZCgpCitleHRlcm4gdm9pZCB2UG9ydFlpZWxkKCB2b2lkICkgICAgICBfX2F0dHJpYnV0ZV9fICggKCBuYWtlZCApICk7CisjZGVmaW5lIHBvcnRZSUVMRCgpICAgICAgICAgICAgICAgICB2UG9ydFlpZWxkKCkKIAotICAgIGV4dGVybiB2b2lkIHZQb3J0WWllbGRGcm9tSVNSKCB2b2lkICkgICBfX2F0dHJpYnV0ZV9fKCAoIG5ha2VkICkgKTsKLSAgICAjZGVmaW5lIHBvcnRZSUVMRF9GUk9NX0lTUigpICAgIHZQb3J0WWllbGRGcm9tSVNSKCkKK2V4dGVybiB2b2lkIHZQb3J0WWllbGRGcm9tSVNSKCB2b2lkICkgICBfX2F0dHJpYnV0ZV9fICggKCBuYWtlZCApICk7CisjZGVmaW5lIHBvcnRZSUVMRF9GUk9NX0lTUigpICAgICAgICAgICAgdlBvcnRZaWVsZEZyb21JU1IoKQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLSAgICAjaWYgZGVmaW5lZCggX19BVlJfM19CWVRFX1BDX18gKQorI2lmIGRlZmluZWQoX19BVlJfM19CWVRFX1BDX18pCiAvKiBUYXNrIGZ1bmN0aW9uIG1hY3JvcyBhcyBkZXNjcmliZWQgb24gdGhlIEZyZWVSVE9TLm9yZyBXRUIgc2l0ZS4gKi8KIAogLyogQWRkIC5sb3d0ZXh0IHRhZyBmcm9tIHRoZSBhdnIgbGlua2VyIHNjcmlwdCBhdnI2LnggZm9yIEFUbWVnYTI1NjAgYW5kIEFUbWVnYTI1NjEKICAqIHRvIG1ha2Ugc3VyZSBmdW5jdGlvbnMgYXJlIGxvYWRlZCBpbiBsb3cgbWVtb3J5LgogICovCi0gICAgICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKSBfX2F0dHJpYnV0ZV9fKCAoIHNlY3Rpb24oICIubG93dGV4dCIgKSApICkKLSAgICAjZWxzZQotICAgICAgICAjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkKLSAgICAjZW5kaWYKKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmxvd3RleHQiKSkpCisjZWxzZQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkKKyNlbmRpZgogCi0gICAgI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICAgICAgICAgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkKIAotICAgICNpZmRlZiBfX2NwbHVzcGx1cwotICAgICAgICB9Ci0gICAgI2VuZGlmCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgogCiAjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL1RoaXJkUGFydHkvR0NDL1Bvc2l4L3BvcnQuYyBiL3BvcnRhYmxlL1RoaXJkUGFydHkvR0NDL1Bvc2l4L3BvcnQuYwppbmRleCBhNjNlZjdlLi5hMDBhYjE3IDEwMDY0NAotLS0gYS9wb3J0YWJsZS9UaGlyZFBhcnR5L0dDQy9Qb3NpeC9wb3J0LmMKKysrIGIvcG9ydGFibGUvVGhpcmRQYXJ0eS9HQ0MvUG9zaXgvcG9ydC5jCkBAIC0yNiwzMSArMjYsMzEgQEAKICAqLwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBQb3NpeCBwb3J0LgotKgotKiBFYWNoIHRhc2sgaGFzIGEgcHRocmVhZCB3aGljaCBlYXNlcyB1c2Ugb2Ygc3RhbmRhcmQgZGVidWdnZXJzCi0qIChhbGxvd2luZyBiYWNrdHJhY2VzIG9mIHRhc2tzIGV0YykuIFRocmVhZHMgZm9yIHRhc2tzIHRoYXQgYXJlIG5vdAotKiBydW5uaW5nIGFyZSBibG9ja2VkIGluIHNpZ3dhaXQoKS4KLSoKLSogVGFzayBzd2l0Y2ggaXMgZG9uZSBieSByZXN1bWluZyB0aGUgdGhyZWFkIGZvciB0aGUgbmV4dCB0YXNrIGJ5Ci0qIHNlbmRpbmcgaXQgdGhlIHJlc3VtZSBzaWduYWwgKFNJR1VTUjEpIGFuZCB0aGVuIHN1c3BlbmRpbmcgdGhlCi0qIGN1cnJlbnQgdGhyZWFkLgotKgotKiBUaGUgdGltZXIgaW50ZXJydXB0IHVzZXMgU0lHQUxSTSBhbmQgY2FyZSBpcyB0YWtlbiB0byBlbnN1cmUgdGhhdAotKiB0aGUgc2lnbmFsIGhhbmRsZXIgcnVucyBvbmx5IG9uIHRoZSB0aHJlYWQgZm9yIHRoZSBjdXJyZW50IHRhc2suCi0qCi0qIFVzZSBvZiBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBDIGxpYnJhcnkgcmVxdWlyZXMgY2FyZSBhcyBzb21lCi0qIGZ1bmN0aW9ucyBjYW4gdGFrZSBwdGhyZWFkIG11dGV4ZXMgaW50ZXJuYWxseSB3aGljaCBjYW4gcmVzdWx0IGluCi0qIGRlYWRsb2NrcyBhcyB0aGUgRnJlZVJUT1Mga2VybmVsIGNhbiBzd2l0Y2ggdGFza3Mgd2hpbGUgdGhleSdyZQotKiBob2xkaW5nIGEgcHRocmVhZCBtdXRleC4KLSoKLSogUmVwbGFjZW1lbnQgbWFsbG9jKCksIGZyZWUoKSwgY2FsbG9jKCksIGFuZCByZWFsbG9jKCkgYXJlIHByb3ZpZGVkCi0qIGZvciBnbGliYyAoc2VlIGJlbG93IGZvciBtb3JlIGluZm9ybWF0aW9uKS4KLSoKLSogc3RkaW8gKHByaW50ZigpIGFuZCBmcmllbmRzKSBzaG91bGQgYmUgY2FsbGVkIGZyb20gYSBzaW5nbGUgdGFzawotKiBvbmx5IG9yIHNlcmlhbGl6ZWQgd2l0aCBhIEZyZWVSVE9TIHByaW1pdGl2ZSBzdWNoIGFzIGEgYmluYXJ5Ci0qIHNlbWFwaG9yZSBvciBtdXRleC4KLSotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAqIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHBvcnRhYmxlLmggZm9yIHRoZSBQb3NpeCBwb3J0LgorICoKKyAqIEVhY2ggdGFzayBoYXMgYSBwdGhyZWFkIHdoaWNoIGVhc2VzIHVzZSBvZiBzdGFuZGFyZCBkZWJ1Z2dlcnMKKyAqIChhbGxvd2luZyBiYWNrdHJhY2VzIG9mIHRhc2tzIGV0YykuIFRocmVhZHMgZm9yIHRhc2tzIHRoYXQgYXJlIG5vdAorICogcnVubmluZyBhcmUgYmxvY2tlZCBpbiBzaWd3YWl0KCkuCisgKgorICogVGFzayBzd2l0Y2ggaXMgZG9uZSBieSByZXN1bWluZyB0aGUgdGhyZWFkIGZvciB0aGUgbmV4dCB0YXNrIGJ5CisgKiBzZW5kaW5nIGl0IHRoZSByZXN1bWUgc2lnbmFsIChTSUdVU1IxKSBhbmQgdGhlbiBzdXNwZW5kaW5nIHRoZQorICogY3VycmVudCB0aHJlYWQuCisgKgorICogVGhlIHRpbWVyIGludGVycnVwdCB1c2VzIFNJR0FMUk0gYW5kIGNhcmUgaXMgdGFrZW4gdG8gZW5zdXJlIHRoYXQKKyAqIHRoZSBzaWduYWwgaGFuZGxlciBydW5zIG9ubHkgb24gdGhlIHRocmVhZCBmb3IgdGhlIGN1cnJlbnQgdGFzay4KKyAqCisgKiBVc2Ugb2YgcGFydCBvZiB0aGUgc3RhbmRhcmQgQyBsaWJyYXJ5IHJlcXVpcmVzIGNhcmUgYXMgc29tZQorICogZnVuY3Rpb25zIGNhbiB0YWtlIHB0aHJlYWQgbXV0ZXhlcyBpbnRlcm5hbGx5IHdoaWNoIGNhbiByZXN1bHQgaW4KKyAqIGRlYWRsb2NrcyBhcyB0aGUgRnJlZVJUT1Mga2VybmVsIGNhbiBzd2l0Y2ggdGFza3Mgd2hpbGUgdGhleSdyZQorICogaG9sZGluZyBhIHB0aHJlYWQgbXV0ZXguCisgKgorICogUmVwbGFjZW1lbnQgbWFsbG9jKCksIGZyZWUoKSwgY2FsbG9jKCksIGFuZCByZWFsbG9jKCkgYXJlIHByb3ZpZGVkCisgKiBmb3IgZ2xpYmMgKHNlZSBiZWxvdyBmb3IgbW9yZSBpbmZvcm1hdGlvbikuCisgKgorICogc3RkaW8gKHByaW50ZigpIGFuZCBmcmllbmRzKSBzaG91bGQgYmUgY2FsbGVkIGZyb20gYSBzaW5nbGUgdGFzaworICogb25seSBvciBzZXJpYWxpemVkIHdpdGggYSBGcmVlUlRPUyBwcmltaXRpdmUgc3VjaCBhcyBhIGJpbmFyeQorICogc2VtYXBob3JlIG9yIG11dGV4LgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8cHRocmVhZC5oPgpAQCAtNjcsMjUgKzY3LDI1IEBACiAjaW5jbHVkZSAidGFzay5oIgogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLSNkZWZpbmUgU0lHX1JFU1VNRSAgICBTSUdVU1IxCisjZGVmaW5lIFNJR19SRVNVTUUgU0lHVVNSMQogCiB0eXBlZGVmIHN0cnVjdCBUSFJFQUQKIHsKLSAgICBwdGhyZWFkX3QgcHRocmVhZDsKLSAgICBwZFRBU0tfQ09ERSBweENvZGU7Ci0gICAgdm9pZCAqIHB2UGFyYW1zOwotICAgIEJhc2VUeXBlX3QgeER5aW5nOworCXB0aHJlYWRfdCBwdGhyZWFkOworCXBkVEFTS19DT0RFIHB4Q29kZTsKKwl2b2lkICpwdlBhcmFtczsKKwlCYXNlVHlwZV90IHhEeWluZzsKIH0gVGhyZWFkX3Q7CiAKIC8qCiAgKiBUaGUgYWRkaXRpb25hbCBwZXItdGhyZWFkIGRhdGEgaXMgc3RvcmVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlCiAgKiB0YXNrJ3Mgc3RhY2suCiAgKi8KLXN0YXRpYyBpbmxpbmUgVGhyZWFkX3QgKiBwcnZHZXRUaHJlYWRGcm9tVGFzayggVGFza0hhbmRsZV90IHhUYXNrICkKK3N0YXRpYyBpbmxpbmUgVGhyZWFkX3QgKnBydkdldFRocmVhZEZyb21UYXNrKFRhc2tIYW5kbGVfdCB4VGFzaykKIHsKLSAgICBTdGFja1R5cGVfdCAqIHB4VG9wT2ZTdGFjayA9ICooIFN0YWNrVHlwZV90ICoqICkgeFRhc2s7CitTdGFja1R5cGVfdCAqcHhUb3BPZlN0YWNrID0gKihTdGFja1R5cGVfdCAqKil4VGFzazsKIAotICAgIHJldHVybiAoIFRocmVhZF90ICogKSAoIHB4VG9wT2ZTdGFjayArIDEgKTsKKwlyZXR1cm4gKFRocmVhZF90ICopKHB4VG9wT2ZTdGFjayArIDEpOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTk0LDcgKzk0LDcgQEAKIHN0YXRpYyBzaWdzZXRfdCB4UmVzdW1lU2lnbmFsczsKIHN0YXRpYyBzaWdzZXRfdCB4QWxsU2lnbmFsczsKIHN0YXRpYyBzaWdzZXRfdCB4U2NoZWR1bGVyT3JpZ2luYWxTaWduYWxNYXNrOwotc3RhdGljIHB0aHJlYWRfdCBoTWFpblRocmVhZCA9ICggcHRocmVhZF90ICkgTlVMTDsKK3N0YXRpYyBwdGhyZWFkX3QgaE1haW5UaHJlYWQgPSAoIHB0aHJlYWRfdCApTlVMTDsKIHN0YXRpYyB2b2xhdGlsZSBwb3J0QkFTRV9UWVBFIHV4Q3JpdGljYWxOZXN0aW5nOwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTEwMyw5ICsxMDMsOCBAQAogCiBzdGF0aWMgdm9pZCBwcnZTZXR1cFNpZ25hbHNBbmRTY2hlZHVsZXJQb2xpY3koIHZvaWQgKTsKIHN0YXRpYyB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKTsKLXN0YXRpYyB2b2lkICogcHJ2V2FpdEZvclN0YXJ0KCB2b2lkICogcHZQYXJhbXMgKTsKLXN0YXRpYyB2b2lkIHBydlN3aXRjaFRocmVhZCggVGhyZWFkX3QgKiB4VGhyZWFkVG9SZXN1bWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRocmVhZF90ICogeFRocmVhZFRvU3VzcGVuZCApOworc3RhdGljIHZvaWQgKnBydldhaXRGb3JTdGFydCggdm9pZCAqIHB2UGFyYW1zICk7CitzdGF0aWMgdm9pZCBwcnZTd2l0Y2hUaHJlYWQoIFRocmVhZF90ICp4VGhyZWFkVG9SZXN1bWUsIFRocmVhZF90ICp4VGhyZWFkVG9TdXNwZW5kICk7CiBzdGF0aWMgdm9pZCBwcnZTdXNwZW5kU2VsZiggdm9pZCApOwogc3RhdGljIHZvaWQgcHJ2UmVzdW1lVGhyZWFkKCBwdGhyZWFkX3QgeFRocmVhZElkICk7CiBzdGF0aWMgdm9pZCB2UG9ydFN5c3RlbVRpY2tIYW5kbGVyKCBpbnQgc2lnICk7CkBAIC0xMzIsMTE3ICsxMzEsMTEwIEBACiAgKiB0aW1lciAoU0lHQUxSTSkgYW5kIG90aGVyIHNpZ25hbHMuCiAgKi8KIAotZXh0ZXJuIHZvaWQgKiBfX2xpYmNfbWFsbG9jKCBzaXplX3QgKTsKLWV4dGVybiB2b2lkIF9fbGliY19mcmVlKCB2b2lkICogKTsKLWV4dGVybiB2b2lkICogX19saWJjX2NhbGxvYyggc2l6ZV90LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKTsKLWV4dGVybiB2b2lkICogX19saWJjX3JlYWxsb2MoIHZvaWQgKiBwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKTsKK2V4dGVybiB2b2lkICpfX2xpYmNfbWFsbG9jKHNpemVfdCk7CitleHRlcm4gdm9pZCBfX2xpYmNfZnJlZSh2b2lkICopOworZXh0ZXJuIHZvaWQgKl9fbGliY19jYWxsb2Moc2l6ZV90LCBzaXplX3QpOworZXh0ZXJuIHZvaWQgKl9fbGliY19yZWFsbG9jKHZvaWQgKnB0ciwgc2l6ZV90KTsKIAotdm9pZCAqIG1hbGxvYyggc2l6ZV90IHNpemUgKQordm9pZCAqbWFsbG9jKHNpemVfdCBzaXplKQogewotICAgIHNpZ3NldF90IHhTYXZlZFNpZ25hbHM7Ci0gICAgdm9pZCAqIHB0cjsKK3NpZ3NldF90IHhTYXZlZFNpZ25hbHM7Cit2b2lkICpwdHI7CiAKLSAgICBwdGhyZWFkX3NpZ21hc2soIFNJR19CTE9DSywgJnhBbGxTaWduYWxzLCAmeFNhdmVkU2lnbmFscyApOwotICAgIHB0ciA9IF9fbGliY19tYWxsb2MoIHNpemUgKTsKLSAgICBwdGhyZWFkX3NpZ21hc2soIFNJR19TRVRNQVNLLCAmeFNhdmVkU2lnbmFscywgTlVMTCApOworCXB0aHJlYWRfc2lnbWFzayggU0lHX0JMT0NLLCAmeEFsbFNpZ25hbHMsICZ4U2F2ZWRTaWduYWxzICk7CisJcHRyID0gX19saWJjX21hbGxvYyggc2l6ZSApOworCXB0aHJlYWRfc2lnbWFzayggU0lHX1NFVE1BU0ssICZ4U2F2ZWRTaWduYWxzLCBOVUxMICk7CiAKLSAgICByZXR1cm4gcHRyOworCXJldHVybiBwdHI7CiB9CiAKLXZvaWQgZnJlZSggdm9pZCAqIHB0ciApCit2b2lkIGZyZWUodm9pZCAqcHRyKQogewotICAgIHNpZ3NldF90IHhTYXZlZFNpZ25hbHM7CitzaWdzZXRfdCB4U2F2ZWRTaWduYWxzOwogCi0gICAgcHRocmVhZF9zaWdtYXNrKCBTSUdfQkxPQ0ssICZ4QWxsU2lnbmFscywgJnhTYXZlZFNpZ25hbHMgKTsKLSAgICBfX2xpYmNfZnJlZSggcHRyICk7Ci0gICAgcHRocmVhZF9zaWdtYXNrKCBTSUdfU0VUTUFTSywgJnhTYXZlZFNpZ25hbHMsIE5VTEwgKTsKKwlwdGhyZWFkX3NpZ21hc2soIFNJR19CTE9DSywgJnhBbGxTaWduYWxzLCAmeFNhdmVkU2lnbmFscyApOworCV9fbGliY19mcmVlKCBwdHIgKTsKKwlwdGhyZWFkX3NpZ21hc2soIFNJR19TRVRNQVNLLCAmeFNhdmVkU2lnbmFscywgTlVMTCApOwogfQogCi12b2lkICogY2FsbG9jKCBzaXplX3Qgbm1lbWIsCi0gICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSApCit2b2lkICpjYWxsb2Moc2l6ZV90IG5tZW1iLCBzaXplX3Qgc2l6ZSkKIHsKLSAgICBzaWdzZXRfdCB4U2F2ZWRTaWduYWxzOwotICAgIHZvaWQgKiBwdHI7CitzaWdzZXRfdCB4U2F2ZWRTaWduYWxzOwordm9pZCAqcHRyOwogCi0gICAgcHRocmVhZF9zaWdtYXNrKCBTSUdfQkxPQ0ssICZ4QWxsU2lnbmFscywgJnhTYXZlZFNpZ25hbHMgKTsKLSAgICBwdHIgPSBfX2xpYmNfY2FsbG9jKCBubWVtYiwgc2l6ZSApOwotICAgIHB0aHJlYWRfc2lnbWFzayggU0lHX1NFVE1BU0ssICZ4U2F2ZWRTaWduYWxzLCBOVUxMICk7CisJcHRocmVhZF9zaWdtYXNrKCBTSUdfQkxPQ0ssICZ4QWxsU2lnbmFscywgJnhTYXZlZFNpZ25hbHMgKTsKKwlwdHIgPSBfX2xpYmNfY2FsbG9jKCBubWVtYiwgc2l6ZSApOworCXB0aHJlYWRfc2lnbWFzayggU0lHX1NFVE1BU0ssICZ4U2F2ZWRTaWduYWxzLCBOVUxMICk7CiAKLSAgICByZXR1cm4gcHRyOworCXJldHVybiBwdHI7CiB9CiAKLXZvaWQgKiByZWFsbG9jKCB2b2lkICogcHRyLAotICAgICAgICAgICAgICAgIHNpemVfdCBzaXplICkKK3ZvaWQgKnJlYWxsb2Modm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkKIHsKLSAgICBzaWdzZXRfdCB4U2F2ZWRTaWduYWxzOworc2lnc2V0X3QgeFNhdmVkU2lnbmFsczsKIAotICAgIHB0aHJlYWRfc2lnbWFzayggU0lHX0JMT0NLLCAmeEFsbFNpZ25hbHMsICZ4U2F2ZWRTaWduYWxzICk7Ci0gICAgcHRyID0gX19saWJjX3JlYWxsb2MoIHB0ciwgc2l6ZSApOwotICAgIHB0aHJlYWRfc2lnbWFzayggU0lHX1NFVE1BU0ssICZ4U2F2ZWRTaWduYWxzLCBOVUxMICk7CisJcHRocmVhZF9zaWdtYXNrKCBTSUdfQkxPQ0ssICZ4QWxsU2lnbmFscywgJnhTYXZlZFNpZ25hbHMgKTsKKwlwdHIgPSBfX2xpYmNfcmVhbGxvYyggcHRyLCBzaXplICk7CisJcHRocmVhZF9zaWdtYXNrKCBTSUdfU0VUTUFTSywgJnhTYXZlZFNpZ25hbHMsIE5VTEwgKTsKIAotICAgIHJldHVybiBwdHI7CisJcmV0dXJuIHB0cjsKIH0KIAotc3RhdGljIHZvaWQgcHJ2RmF0YWxFcnJvciggY29uc3QgY2hhciAqIHBjQ2FsbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpRXJybm8gKQorc3RhdGljIHZvaWQgcHJ2RmF0YWxFcnJvciggY29uc3QgY2hhciAqcGNDYWxsLCBpbnQgaUVycm5vICkKIHsKLSAgICBmcHJpbnRmKCBzdGRlcnIsICIlczogJXNcbiIsIHBjQ2FsbCwgc3RyZXJyb3IoIGlFcnJubyApICk7Ci0gICAgYWJvcnQoKTsKKwlmcHJpbnRmKCBzdGRlcnIsICIlczogJXNcbiIsIHBjQ2FsbCwgc3RyZXJyb3IoIGlFcnJubyApICk7CisJYWJvcnQoKTsKIH0KIAogLyoKICAqIFNlZSBoZWFkZXIgZmlsZSBmb3IgZGVzY3JpcHRpb24uCiAgKi8KLXBvcnRTVEFDS19UWVBFICogcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBwb3J0U1RBQ0tfVFlQRSAqIHB4VG9wT2ZTdGFjaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0U1RBQ0tfVFlQRSAqIHB4RW5kT2ZTdGFjaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZFRBU0tfQ09ERSBweENvZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqIHB2UGFyYW1ldGVycyApCitwb3J0U1RBQ0tfVFlQRSAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBwb3J0U1RBQ0tfVFlQRSAqcHhUb3BPZlN0YWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydFNUQUNLX1RZUEUgKnB4RW5kT2ZTdGFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkVEFTS19DT0RFIHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzICkKIHsKLSAgICBUaHJlYWRfdCAqIHRocmVhZDsKLSAgICBwdGhyZWFkX2F0dHJfdCB4VGhyZWFkQXR0cmlidXRlczsKLSAgICBzaXplX3QgdWxTdGFja1NpemU7Ci0gICAgaW50IGlSZXQ7CitUaHJlYWRfdCAqdGhyZWFkOworcHRocmVhZF9hdHRyX3QgeFRocmVhZEF0dHJpYnV0ZXM7CitzaXplX3QgdWxTdGFja1NpemU7CitpbnQgaVJldDsKIAotICAgICggdm9pZCApIHB0aHJlYWRfb25jZSggJmhTaWdTZXR1cFRocmVhZCwgcHJ2U2V0dXBTaWduYWxzQW5kU2NoZWR1bGVyUG9saWN5ICk7CisJKHZvaWQpcHRocmVhZF9vbmNlKCAmaFNpZ1NldHVwVGhyZWFkLCBwcnZTZXR1cFNpZ25hbHNBbmRTY2hlZHVsZXJQb2xpY3kgKTsKIAotICAgIC8qCi0gICAgICogU3RvcmUgdGhlIGFkZGl0aW9uYWwgdGhyZWFkIGRhdGEgYXQgdGhlIHN0YXJ0IG9mIHRoZSBzdGFjay4KLSAgICAgKi8KLSAgICB0aHJlYWQgPSAoIFRocmVhZF90ICogKSAoIHB4VG9wT2ZTdGFjayArIDEgKSAtIDE7Ci0gICAgcHhUb3BPZlN0YWNrID0gKCBwb3J0U1RBQ0tfVFlQRSAqICkgdGhyZWFkIC0gMTsKLSAgICB1bFN0YWNrU2l6ZSA9ICggcHhUb3BPZlN0YWNrICsgMSAtIHB4RW5kT2ZTdGFjayApICogc2l6ZW9mKCAqcHhUb3BPZlN0YWNrICk7CisJLyoKKwkgKiBTdG9yZSB0aGUgYWRkaXRpb25hbCB0aHJlYWQgZGF0YSBhdCB0aGUgc3RhcnQgb2YgdGhlIHN0YWNrLgorCSAqLworCXRocmVhZCA9IChUaHJlYWRfdCAqKShweFRvcE9mU3RhY2sgKyAxKSAtIDE7CisJcHhUb3BPZlN0YWNrID0gKHBvcnRTVEFDS19UWVBFICopdGhyZWFkIC0gMTsKKwl1bFN0YWNrU2l6ZSA9IChweFRvcE9mU3RhY2sgKyAxIC0gcHhFbmRPZlN0YWNrKSAqIHNpemVvZigqcHhUb3BPZlN0YWNrKTsKIAotICAgIHRocmVhZC0+cHhDb2RlID0gcHhDb2RlOwotICAgIHRocmVhZC0+cHZQYXJhbXMgPSBwdlBhcmFtZXRlcnM7Ci0gICAgdGhyZWFkLT54RHlpbmcgPSBwZEZBTFNFOworCXRocmVhZC0+cHhDb2RlID0gcHhDb2RlOworCXRocmVhZC0+cHZQYXJhbXMgPSBwdlBhcmFtZXRlcnM7CisJdGhyZWFkLT54RHlpbmcgPSBwZEZBTFNFOwogCi0gICAgcHRocmVhZF9hdHRyX2luaXQoICZ4VGhyZWFkQXR0cmlidXRlcyApOwotICAgIHB0aHJlYWRfYXR0cl9zZXRzdGFjayggJnhUaHJlYWRBdHRyaWJ1dGVzLCBweEVuZE9mU3RhY2ssIHVsU3RhY2tTaXplICk7CisJcHRocmVhZF9hdHRyX2luaXQoICZ4VGhyZWFkQXR0cmlidXRlcyApOworCXB0aHJlYWRfYXR0cl9zZXRzdGFjayggJnhUaHJlYWRBdHRyaWJ1dGVzLCBweEVuZE9mU3RhY2ssIHVsU3RhY2tTaXplICk7CiAKLSAgICB2UG9ydEVudGVyQ3JpdGljYWwoKTsKKwl2UG9ydEVudGVyQ3JpdGljYWwoKTsKIAotICAgIGlSZXQgPSBwdGhyZWFkX2NyZWF0ZSggJnRocmVhZC0+cHRocmVhZCwgJnhUaHJlYWRBdHRyaWJ1dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ2V2FpdEZvclN0YXJ0LCB0aHJlYWQgKTsKKwlpUmV0ID0gcHRocmVhZF9jcmVhdGUoICZ0aHJlYWQtPnB0aHJlYWQsICZ4VGhyZWFkQXR0cmlidXRlcywKKwkJCQkJCSAgIHBydldhaXRGb3JTdGFydCwgdGhyZWFkICk7CisJaWYgKCBpUmV0ICkKKwl7CisJCXBydkZhdGFsRXJyb3IoICJwdGhyZWFkX2NyZWF0ZSIsIGlSZXQgKTsKKwl9CiAKLSAgICBpZiggaVJldCApCi0gICAgewotICAgICAgICBwcnZGYXRhbEVycm9yKCAicHRocmVhZF9jcmVhdGUiLCBpUmV0ICk7Ci0gICAgfQorCXZQb3J0RXhpdENyaXRpY2FsKCk7CiAKLSAgICB2UG9ydEV4aXRDcml0aWNhbCgpOwotCi0gICAgcmV0dXJuIHB4VG9wT2ZTdGFjazsKKwlyZXR1cm4gcHhUb3BPZlN0YWNrOwogfQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHZvaWQgdlBvcnRTdGFydEZpcnN0VGFzayggdm9pZCApCiB7Ci0gICAgVGhyZWFkX3QgKiBweEZpcnN0VGhyZWFkID0gcHJ2R2V0VGhyZWFkRnJvbVRhc2soIHhUYXNrR2V0Q3VycmVudFRhc2tIYW5kbGUoKSApOworVGhyZWFkX3QgKnB4Rmlyc3RUaHJlYWQgPSBwcnZHZXRUaHJlYWRGcm9tVGFzayggeFRhc2tHZXRDdXJyZW50VGFza0hhbmRsZSgpICk7CiAKLSAgICAvKiBTdGFydCB0aGUgZmlyc3QgdGFzay4gKi8KLSAgICBwcnZSZXN1bWVUaHJlYWQoIHB4Rmlyc3RUaHJlYWQtPnB0aHJlYWQgKTsKKwkvKiBTdGFydCB0aGUgZmlyc3QgdGFzay4gKi8KKwlwcnZSZXN1bWVUaHJlYWQoIHB4Rmlyc3RUaHJlYWQtPnB0aHJlYWQgKTsKIH0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC0yNTEsMTI2ICsyNDMsMTI1IEBACiAgKi8KIHBvcnRCQVNFX1RZUEUgeFBvcnRTdGFydFNjaGVkdWxlciggdm9pZCApCiB7Ci0gICAgaW50IGlTaWduYWw7Ci0gICAgc2lnc2V0X3QgeFNpZ25hbHM7CitpbnQgaVNpZ25hbDsKK3NpZ3NldF90IHhTaWduYWxzOwogCi0gICAgaE1haW5UaHJlYWQgPSBwdGhyZWFkX3NlbGYoKTsKKwloTWFpblRocmVhZCA9IHB0aHJlYWRfc2VsZigpOwogCi0gICAgLyogU3RhcnQgdGhlIHRpbWVyIHRoYXQgZ2VuZXJhdGVzIHRoZSB0aWNrIElTUi4gIEludGVycnVwdHMgYXJlIGRpc2FibGVkCi0gICAgICogaGVyZSBhbHJlYWR5LiAqLwotICAgIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoKTsKKwkvKiBTdGFydCB0aGUgdGltZXIgdGhhdCBnZW5lcmF0ZXMgdGhlIHRpY2sgSVNSLiAgSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQKKwloZXJlIGFscmVhZHkuICovCisJcHJ2U2V0dXBUaW1lckludGVycnVwdCgpOwogCi0gICAgLyogU3RhcnQgdGhlIGZpcnN0IHRhc2suICovCi0gICAgdlBvcnRTdGFydEZpcnN0VGFzaygpOworCS8qIFN0YXJ0IHRoZSBmaXJzdCB0YXNrLiAqLworCXZQb3J0U3RhcnRGaXJzdFRhc2soKTsKIAotICAgIC8qIFdhaXQgdW50aWwgc2lnbmFsZWQgYnkgdlBvcnRFbmRTY2hlZHVsZXIoKS4gKi8KLSAgICBzaWdlbXB0eXNldCggJnhTaWduYWxzICk7Ci0gICAgc2lnYWRkc2V0KCAmeFNpZ25hbHMsIFNJR19SRVNVTUUgKTsKKwkvKiBXYWl0IHVudGlsIHNpZ25hbGVkIGJ5IHZQb3J0RW5kU2NoZWR1bGVyKCkuICovCisJc2lnZW1wdHlzZXQoICZ4U2lnbmFscyApOworCXNpZ2FkZHNldCggJnhTaWduYWxzLCBTSUdfUkVTVU1FICk7CiAKLSAgICB3aGlsZSggIXhTY2hlZHVsZXJFbmQgKQotICAgIHsKLSAgICAgICAgc2lnd2FpdCggJnhTaWduYWxzLCAmaVNpZ25hbCApOwotICAgIH0KKwl3aGlsZSAoICF4U2NoZWR1bGVyRW5kICkKKwl7CisJCXNpZ3dhaXQoICZ4U2lnbmFscywgJmlTaWduYWwgKTsKKwl9CiAKLSAgICAvKiBSZXN0b3JlIG9yaWdpbmFsIHNpZ25hbCBtYXNrLiAqLwotICAgICggdm9pZCApIHB0aHJlYWRfc2lnbWFzayggU0lHX1NFVE1BU0ssICZ4U2NoZWR1bGVyT3JpZ2luYWxTaWduYWxNYXNrLCBOVUxMICk7CisJLyogUmVzdG9yZSBvcmlnaW5hbCBzaWduYWwgbWFzay4gKi8KKwkodm9pZClwdGhyZWFkX3NpZ21hc2soIFNJR19TRVRNQVNLLCAmeFNjaGVkdWxlck9yaWdpbmFsU2lnbmFsTWFzaywgIE5VTEwgKTsKIAotICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQogewotICAgIHN0cnVjdCBpdGltZXJ2YWwgaXRpbWVyOwotICAgIHN0cnVjdCBzaWdhY3Rpb24gc2lndGljazsKK3N0cnVjdCBpdGltZXJ2YWwgaXRpbWVyOworc3RydWN0IHNpZ2FjdGlvbiBzaWd0aWNrOwogCi0gICAgLyogU3RvcCB0aGUgdGltZXIgYW5kIGlnbm9yZSBhbnkgcGVuZGluZyBTSUdBTFJNcyB0aGF0IHdvdWxkIGVuZAotICAgICAqIHVwIHJ1bm5pbmcgb24gdGhlIG1haW4gdGhyZWFkIHdoZW4gaXQgaXMgcmVzdW1lZC4gKi8KLSAgICBpdGltZXIuaXRfdmFsdWUudHZfc2VjID0gMDsKLSAgICBpdGltZXIuaXRfdmFsdWUudHZfdXNlYyA9IDA7CisJLyogU3RvcCB0aGUgdGltZXIgYW5kIGlnbm9yZSBhbnkgcGVuZGluZyBTSUdBTFJNcyB0aGF0IHdvdWxkIGVuZAorCSAqIHVwIHJ1bm5pbmcgb24gdGhlIG1haW4gdGhyZWFkIHdoZW4gaXQgaXMgcmVzdW1lZC4gKi8KKwlpdGltZXIuaXRfdmFsdWUudHZfc2VjID0gMDsKKwlpdGltZXIuaXRfdmFsdWUudHZfdXNlYyA9IDA7CiAKLSAgICBpdGltZXIuaXRfaW50ZXJ2YWwudHZfc2VjID0gMDsKLSAgICBpdGltZXIuaXRfaW50ZXJ2YWwudHZfdXNlYyA9IDA7Ci0gICAgKCB2b2lkICkgc2V0aXRpbWVyKCBJVElNRVJfUkVBTCwgJml0aW1lciwgTlVMTCApOworCWl0aW1lci5pdF9pbnRlcnZhbC50dl9zZWMgPSAwOworCWl0aW1lci5pdF9pbnRlcnZhbC50dl91c2VjID0gMDsgIAorCSh2b2lkKXNldGl0aW1lciggSVRJTUVSX1JFQUwsICZpdGltZXIsIE5VTEwgKTsKIAotICAgIHNpZ3RpY2suc2FfZmxhZ3MgPSAwOwotICAgIHNpZ3RpY2suc2FfaGFuZGxlciA9IFNJR19JR047Ci0gICAgc2lnZW1wdHlzZXQoICZzaWd0aWNrLnNhX21hc2sgKTsKLSAgICBzaWdhY3Rpb24oIFNJR0FMUk0sICZzaWd0aWNrLCBOVUxMICk7CisJc2lndGljay5zYV9mbGFncyA9IDA7CisJc2lndGljay5zYV9oYW5kbGVyID0gU0lHX0lHTjsKKwlzaWdlbXB0eXNldCggJnNpZ3RpY2suc2FfbWFzayApOyAKKwlzaWdhY3Rpb24oIFNJR0FMUk0sICZzaWd0aWNrLCBOVUxMICk7CiAKLSAgICAvKiBTaWduYWwgdGhlIHNjaGVkdWxlciB0byBleGl0IGl0cyBsb29wLiAqLwotICAgIHhTY2hlZHVsZXJFbmQgPSBwZFRSVUU7Ci0gICAgKCB2b2lkICkgcHRocmVhZF9raWxsKCBoTWFpblRocmVhZCwgU0lHX1JFU1VNRSApOworCS8qIFNpZ25hbCB0aGUgc2NoZWR1bGVyIHRvIGV4aXQgaXRzIGxvb3AuICovCisJeFNjaGVkdWxlckVuZCA9IHBkVFJVRTsKKwkodm9pZClwdGhyZWFkX2tpbGwoIGhNYWluVGhyZWFkLCBTSUdfUkVTVU1FICk7CiAKLSAgICBwcnZTdXNwZW5kU2VsZigpOworCXBydlN1c3BlbmRTZWxmKCk7CiB9CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKQogewotICAgIGlmKCB1eENyaXRpY2FsTmVzdGluZyA9PSAwICkKLSAgICB7Ci0gICAgICAgIHZQb3J0RGlzYWJsZUludGVycnVwdHMoKTsKLSAgICB9Ci0KLSAgICB1eENyaXRpY2FsTmVzdGluZysrOworCWlmICggdXhDcml0aWNhbE5lc3RpbmcgPT0gMCApCisJeworCQl2UG9ydERpc2FibGVJbnRlcnJ1cHRzKCk7CisJfQorCXV4Q3JpdGljYWxOZXN0aW5nKys7CiB9CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogdm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApCiB7Ci0gICAgdXhDcml0aWNhbE5lc3RpbmctLTsKKwl1eENyaXRpY2FsTmVzdGluZy0tOwogCi0gICAgLyogSWYgd2UgaGF2ZSByZWFjaGVkIDAgdGhlbiByZS1lbmFibGUgdGhlIGludGVycnVwdHMuICovCi0gICAgaWYoIHV4Q3JpdGljYWxOZXN0aW5nID09IDAgKQotICAgIHsKLSAgICAgICAgdlBvcnRFbmFibGVJbnRlcnJ1cHRzKCk7Ci0gICAgfQorCS8qIElmIHdlIGhhdmUgcmVhY2hlZCAwIHRoZW4gcmUtZW5hYmxlIHRoZSBpbnRlcnJ1cHRzLiAqLworCWlmKCB1eENyaXRpY2FsTmVzdGluZyA9PSAwICkKKwl7CisJCXZQb3J0RW5hYmxlSW50ZXJydXB0cygpOworCX0KIH0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiB2b2lkIHZQb3J0WWllbGRGcm9tSVNSKCB2b2lkICkKIHsKLSAgICBUaHJlYWRfdCAqIHhUaHJlYWRUb1N1c3BlbmQ7Ci0gICAgVGhyZWFkX3QgKiB4VGhyZWFkVG9SZXN1bWU7CitUaHJlYWRfdCAqeFRocmVhZFRvU3VzcGVuZDsKK1RocmVhZF90ICp4VGhyZWFkVG9SZXN1bWU7CiAKLSAgICB4VGhyZWFkVG9TdXNwZW5kID0gcHJ2R2V0VGhyZWFkRnJvbVRhc2soIHhUYXNrR2V0Q3VycmVudFRhc2tIYW5kbGUoKSApOworCXhUaHJlYWRUb1N1c3BlbmQgPSBwcnZHZXRUaHJlYWRGcm9tVGFzayggeFRhc2tHZXRDdXJyZW50VGFza0hhbmRsZSgpICk7CiAKLSAgICB2VGFza1N3aXRjaENvbnRleHQoKTsKKwl2VGFza1N3aXRjaENvbnRleHQoKTsKIAotICAgIHhUaHJlYWRUb1Jlc3VtZSA9IHBydkdldFRocmVhZEZyb21UYXNrKCB4VGFza0dldEN1cnJlbnRUYXNrSGFuZGxlKCkgKTsKKwl4VGhyZWFkVG9SZXN1bWUgPSBwcnZHZXRUaHJlYWRGcm9tVGFzayggeFRhc2tHZXRDdXJyZW50VGFza0hhbmRsZSgpICk7CiAKLSAgICBwcnZTd2l0Y2hUaHJlYWQoIHhUaHJlYWRUb1Jlc3VtZSwgeFRocmVhZFRvU3VzcGVuZCApOworCXBydlN3aXRjaFRocmVhZCggeFRocmVhZFRvUmVzdW1lLCB4VGhyZWFkVG9TdXNwZW5kICk7CiB9CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogdm9pZCB2UG9ydFlpZWxkKCB2b2lkICkKIHsKLSAgICB2UG9ydEVudGVyQ3JpdGljYWwoKTsKKwl2UG9ydEVudGVyQ3JpdGljYWwoKTsKIAotICAgIHZQb3J0WWllbGRGcm9tSVNSKCk7CisJdlBvcnRZaWVsZEZyb21JU1IoKTsKIAotICAgIHZQb3J0RXhpdENyaXRpY2FsKCk7CisJdlBvcnRFeGl0Q3JpdGljYWwoKTsKIH0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiB2b2lkIHZQb3J0RGlzYWJsZUludGVycnVwdHMoIHZvaWQgKQogewotICAgIHB0aHJlYWRfc2lnbWFzayggU0lHX0JMT0NLLCAmeEFsbFNpZ25hbHMsIE5VTEwgKTsKKwlwdGhyZWFkX3NpZ21hc2soIFNJR19CTE9DSywgJnhBbGxTaWduYWxzLCBOVUxMICk7CiB9CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogdm9pZCB2UG9ydEVuYWJsZUludGVycnVwdHMoIHZvaWQgKQogewotICAgIHB0aHJlYWRfc2lnbWFzayggU0lHX1VOQkxPQ0ssICZ4QWxsU2lnbmFscywgTlVMTCApOworCXB0aHJlYWRfc2lnbWFzayggU0lHX1VOQkxPQ0ssICZ4QWxsU2lnbmFscywgTlVMTCApOwogfQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHBvcnRCQVNFX1RZUEUgeFBvcnRTZXRJbnRlcnJ1cHRNYXNrKCB2b2lkICkKIHsKLSAgICAvKiBJbnRlcnJ1cHRzIGFyZSBhbHdheXMgZGlzYWJsZWQgaW5zaWRlIElTUnMgKHNpZ25hbHMKLSAgICAgKiBoYW5kbGVycykuICovCi0gICAgcmV0dXJuIHBkVFJVRTsKKwkvKiBJbnRlcnJ1cHRzIGFyZSBhbHdheXMgZGlzYWJsZWQgaW5zaWRlIElTUnMgKHNpZ25hbHMKKwkgICBoYW5kbGVycykuICovCisJcmV0dXJuIHBkVFJVRTsKIH0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC0zNzksMTMgKzM3MCwxMyBAQAogfQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyB1aW50NjRfdCBwcnZHZXRUaW1lTnMoIHZvaWQgKQorc3RhdGljIHVpbnQ2NF90IHBydkdldFRpbWVOcyh2b2lkKQogewotICAgIHN0cnVjdCB0aW1lc3BlYyB0Oworc3RydWN0IHRpbWVzcGVjIHQ7CiAKLSAgICBjbG9ja19nZXR0aW1lKCBDTE9DS19NT05PVE9OSUMsICZ0ICk7CisJY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZ0KTsKIAotICAgIHJldHVybiB0LnR2X3NlYyAqIDEwMDAwMDAwMDB1bGwgKyB0LnR2X25zZWM7CisJcmV0dXJuIHQudHZfc2VjICogMTAwMDAwMDAwMHVsbCArIHQudHZfbnNlYzsKIH0KIAogc3RhdGljIHVpbnQ2NF90IHBydlN0YXJ0VGltZU5zOwpAQCAtMzk3LDIyOCArMzg4LDIxOCBAQAogICovCiB2b2lkIHBydlNldHVwVGltZXJJbnRlcnJ1cHQoIHZvaWQgKQogewotICAgIHN0cnVjdCBpdGltZXJ2YWwgaXRpbWVyOwotICAgIGludCBpUmV0Oworc3RydWN0IGl0aW1lcnZhbCBpdGltZXI7CitpbnQgaVJldDsKIAotICAgIC8qIEluaXRpYWxpc2UgdGhlIHN0cnVjdHVyZSB3aXRoIHRoZSBjdXJyZW50IHRpbWVyIGluZm9ybWF0aW9uLiAqLwotICAgIGlSZXQgPSBnZXRpdGltZXIoIElUSU1FUl9SRUFMLCAmaXRpbWVyICk7CisJLyogSW5pdGlhbGlzZSB0aGUgc3RydWN0dXJlIHdpdGggdGhlIGN1cnJlbnQgdGltZXIgaW5mb3JtYXRpb24uICovCisJaVJldCA9IGdldGl0aW1lciggSVRJTUVSX1JFQUwsICZpdGltZXIgKTsKKwlpZiAoIGlSZXQgKQorCXsKKwkJcHJ2RmF0YWxFcnJvciggImdldGl0aW1lciIsIGVycm5vICk7CisJfQogCi0gICAgaWYoIGlSZXQgKQotICAgIHsKLSAgICAgICAgcHJ2RmF0YWxFcnJvciggImdldGl0aW1lciIsIGVycm5vICk7Ci0gICAgfQorCS8qIFNldCB0aGUgaW50ZXJ2YWwgYmV0d2VlbiB0aW1lciBldmVudHMuICovCisJaXRpbWVyLml0X2ludGVydmFsLnR2X3NlYyA9IDA7CisJaXRpbWVyLml0X2ludGVydmFsLnR2X3VzZWMgPSBwb3J0VElDS19SQVRFX01JQ1JPU0VDT05EUzsKIAotICAgIC8qIFNldCB0aGUgaW50ZXJ2YWwgYmV0d2VlbiB0aW1lciBldmVudHMuICovCi0gICAgaXRpbWVyLml0X2ludGVydmFsLnR2X3NlYyA9IDA7Ci0gICAgaXRpbWVyLml0X2ludGVydmFsLnR2X3VzZWMgPSBwb3J0VElDS19SQVRFX01JQ1JPU0VDT05EUzsKKwkvKiBTZXQgdGhlIGN1cnJlbnQgY291bnQtZG93bi4gKi8KKwlpdGltZXIuaXRfdmFsdWUudHZfc2VjID0gMDsKKwlpdGltZXIuaXRfdmFsdWUudHZfdXNlYyA9IHBvcnRUSUNLX1JBVEVfTUlDUk9TRUNPTkRTOwogCi0gICAgLyogU2V0IHRoZSBjdXJyZW50IGNvdW50LWRvd24uICovCi0gICAgaXRpbWVyLml0X3ZhbHVlLnR2X3NlYyA9IDA7Ci0gICAgaXRpbWVyLml0X3ZhbHVlLnR2X3VzZWMgPSBwb3J0VElDS19SQVRFX01JQ1JPU0VDT05EUzsKKwkvKiBTZXQtdXAgdGhlIHRpbWVyIGludGVycnVwdC4gKi8KKwlpUmV0ID0gc2V0aXRpbWVyKCBJVElNRVJfUkVBTCwgJml0aW1lciwgTlVMTCApOworCWlmICggaVJldCApCisJeworCQlwcnZGYXRhbEVycm9yKCAic2V0aXRpbWVyIiwgZXJybm8gKTsKKwl9CiAKLSAgICAvKiBTZXQtdXAgdGhlIHRpbWVyIGludGVycnVwdC4gKi8KLSAgICBpUmV0ID0gc2V0aXRpbWVyKCBJVElNRVJfUkVBTCwgJml0aW1lciwgTlVMTCApOwotCi0gICAgaWYoIGlSZXQgKQotICAgIHsKLSAgICAgICAgcHJ2RmF0YWxFcnJvciggInNldGl0aW1lciIsIGVycm5vICk7Ci0gICAgfQotCi0gICAgcHJ2U3RhcnRUaW1lTnMgPSBwcnZHZXRUaW1lTnMoKTsKKwlwcnZTdGFydFRpbWVOcyA9IHBydkdldFRpbWVOcygpOwogfQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHN0YXRpYyB2b2lkIHZQb3J0U3lzdGVtVGlja0hhbmRsZXIoIGludCBzaWcgKQogewotICAgIFRocmVhZF90ICogcHhUaHJlYWRUb1N1c3BlbmQ7Ci0gICAgVGhyZWFkX3QgKiBweFRocmVhZFRvUmVzdW1lOwotICAgIHVpbnQ2NF90IHhFeHBlY3RlZFRpY2tzOworVGhyZWFkX3QgKnB4VGhyZWFkVG9TdXNwZW5kOworVGhyZWFkX3QgKnB4VGhyZWFkVG9SZXN1bWU7Cit1aW50NjRfdCB4RXhwZWN0ZWRUaWNrczsKIAotICAgIHV4Q3JpdGljYWxOZXN0aW5nKys7IC8qIFNpZ25hbHMgYXJlIGJsb2NrZWQgaW4gdGhpcyBzaWduYWwgaGFuZGxlci4gKi8KKwl1eENyaXRpY2FsTmVzdGluZysrOyAvKiBTaWduYWxzIGFyZSBibG9ja2VkIGluIHRoaXMgc2lnbmFsIGhhbmRsZXIuICovCiAKLSAgICBweFRocmVhZFRvU3VzcGVuZCA9IHBydkdldFRocmVhZEZyb21UYXNrKCB4VGFza0dldEN1cnJlbnRUYXNrSGFuZGxlKCkgKTsKKwlweFRocmVhZFRvU3VzcGVuZCA9IHBydkdldFRocmVhZEZyb21UYXNrKCB4VGFza0dldEN1cnJlbnRUYXNrSGFuZGxlKCkgKTsKIAotICAgIC8qIFRpY2sgSW5jcmVtZW50LCBhY2NvdW50aW5nIGZvciBhbnkgbG9zdCBzaWduYWxzIG9yIGRyaWZ0IGluCi0gICAgICogdGhlIHRpbWVyLiAqLwotICAgIHhFeHBlY3RlZFRpY2tzID0gKCBwcnZHZXRUaW1lTnMoKSAtIHBydlN0YXJ0VGltZU5zICkKLSAgICAgICAgICAgICAgICAgICAgIC8gKCBwb3J0VElDS19SQVRFX01JQ1JPU0VDT05EUyAqIDEwMDAgKTsKKwkvKiBUaWNrIEluY3JlbWVudCwgYWNjb3VudGluZyBmb3IgYW55IGxvc3Qgc2lnbmFscyBvciBkcmlmdCBpbgorCSAqIHRoZSB0aW1lci4gKi8KKwl4RXhwZWN0ZWRUaWNrcyA9IChwcnZHZXRUaW1lTnMoKSAtIHBydlN0YXJ0VGltZU5zKQorCQkvIChwb3J0VElDS19SQVRFX01JQ1JPU0VDT05EUyAqIDEwMDApOworCWRvIHsKKwkJeFRhc2tJbmNyZW1lbnRUaWNrKCk7CisJCXBydlRpY2tDb3VudCsrOworCX0gd2hpbGUgKHBydlRpY2tDb3VudCA8IHhFeHBlY3RlZFRpY2tzKTsKIAotICAgIGRvCi0gICAgewotICAgICAgICB4VGFza0luY3JlbWVudFRpY2soKTsKLSAgICAgICAgcHJ2VGlja0NvdW50Kys7Ci0gICAgfSB3aGlsZSggcHJ2VGlja0NvdW50IDwgeEV4cGVjdGVkVGlja3MgKTsKKyNpZiAoIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDEgKQorCS8qIFNlbGVjdCBOZXh0IFRhc2suICovCisJdlRhc2tTd2l0Y2hDb250ZXh0KCk7CiAKLSAgICAjaWYgKCBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAxICkKLSAgICAgICAgLyogU2VsZWN0IE5leHQgVGFzay4gKi8KLSAgICAgICAgdlRhc2tTd2l0Y2hDb250ZXh0KCk7CisJcHhUaHJlYWRUb1Jlc3VtZSA9IHBydkdldFRocmVhZEZyb21UYXNrKCB4VGFza0dldEN1cnJlbnRUYXNrSGFuZGxlKCkgKTsKIAotICAgICAgICBweFRocmVhZFRvUmVzdW1lID0gcHJ2R2V0VGhyZWFkRnJvbVRhc2soIHhUYXNrR2V0Q3VycmVudFRhc2tIYW5kbGUoKSApOworCXBydlN3aXRjaFRocmVhZChweFRocmVhZFRvUmVzdW1lLCBweFRocmVhZFRvU3VzcGVuZCk7CisjZW5kaWYKIAotICAgICAgICBwcnZTd2l0Y2hUaHJlYWQoIHB4VGhyZWFkVG9SZXN1bWUsIHB4VGhyZWFkVG9TdXNwZW5kICk7Ci0gICAgI2VuZGlmCi0KLSAgICB1eENyaXRpY2FsTmVzdGluZy0tOworCXV4Q3JpdGljYWxOZXN0aW5nLS07CiB9CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotdm9pZCB2UG9ydFRocmVhZER5aW5nKCB2b2lkICogcHhUYXNrVG9EZWxldGUsCi0gICAgICAgICAgICAgICAgICAgICAgIHZvbGF0aWxlIEJhc2VUeXBlX3QgKiBweFBlbmRZaWVsZCApCit2b2lkIHZQb3J0VGhyZWFkRHlpbmcoIHZvaWQgKnB4VGFza1RvRGVsZXRlLCB2b2xhdGlsZSBCYXNlVHlwZV90ICpweFBlbmRZaWVsZCApCiB7Ci0gICAgVGhyZWFkX3QgKiBweFRocmVhZCA9IHBydkdldFRocmVhZEZyb21UYXNrKCBweFRhc2tUb0RlbGV0ZSApOworVGhyZWFkX3QgKnB4VGhyZWFkID0gcHJ2R2V0VGhyZWFkRnJvbVRhc2soIHB4VGFza1RvRGVsZXRlICk7CiAKLSAgICBweFRocmVhZC0+eER5aW5nID0gcGRUUlVFOworCXB4VGhyZWFkLT54RHlpbmcgPSBwZFRSVUU7CiB9CiAKLXZvaWQgdlBvcnRDYW5jZWxUaHJlYWQoIHZvaWQgKiBweFRhc2tUb0RlbGV0ZSApCit2b2lkIHZQb3J0Q2FuY2VsVGhyZWFkKCB2b2lkICpweFRhc2tUb0RlbGV0ZSApCiB7Ci0gICAgVGhyZWFkX3QgKiBweFRocmVhZFRvQ2FuY2VsID0gcHJ2R2V0VGhyZWFkRnJvbVRhc2soIHB4VGFza1RvRGVsZXRlICk7CitUaHJlYWRfdCAqcHhUaHJlYWRUb0NhbmNlbCA9IHBydkdldFRocmVhZEZyb21UYXNrKCBweFRhc2tUb0RlbGV0ZSApOwogCi0gICAgLyoKLSAgICAgKiBUaGUgdGhyZWFkIGhhcyBhbHJlYWR5IGJlZW4gc3VzcGVuZGVkIHNvIGl0IGNhbiBiZSBzYWZlbHkKLSAgICAgKiBjYW5jZWxsZWQuCi0gICAgICovCi0gICAgcHRocmVhZF9jYW5jZWwoIHB4VGhyZWFkVG9DYW5jZWwtPnB0aHJlYWQgKTsKLSAgICBwdGhyZWFkX2pvaW4oIHB4VGhyZWFkVG9DYW5jZWwtPnB0aHJlYWQsIE5VTEwgKTsKKwkvKgorCSAqIFRoZSB0aHJlYWQgaGFzIGFscmVhZHkgYmVlbiBzdXNwZW5kZWQgc28gaXQgY2FuIGJlIHNhZmVseQorCSAqIGNhbmNlbGxlZC4KKwkgKi8KKwlwdGhyZWFkX2NhbmNlbCggcHhUaHJlYWRUb0NhbmNlbC0+cHRocmVhZCApOworCXB0aHJlYWRfam9pbiggcHhUaHJlYWRUb0NhbmNlbC0+cHRocmVhZCwgTlVMTCApOwogfQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyB2b2lkICogcHJ2V2FpdEZvclN0YXJ0KCB2b2lkICogcHZQYXJhbXMgKQorc3RhdGljIHZvaWQgKnBydldhaXRGb3JTdGFydCggdm9pZCAqIHB2UGFyYW1zICkKIHsKLSAgICBUaHJlYWRfdCAqIHB4VGhyZWFkID0gcHZQYXJhbXM7CitUaHJlYWRfdCAqcHhUaHJlYWQgPSBwdlBhcmFtczsKIAotICAgIHBydlN1c3BlbmRTZWxmKCk7CisJcHJ2U3VzcGVuZFNlbGYoKTsKIAotICAgIC8qIFJlc3VtZWQgZm9yIHRoZSBmaXJzdCB0aW1lLCB1bmJsb2NrcyBhbGwgc2lnbmFscy4gKi8KLSAgICB1eENyaXRpY2FsTmVzdGluZyA9IDA7Ci0gICAgdlBvcnRFbmFibGVJbnRlcnJ1cHRzKCk7CisJLyogUmVzdW1lZCBmb3IgdGhlIGZpcnN0IHRpbWUsIHVuYmxvY2tzIGFsbCBzaWduYWxzLiAqLworCXV4Q3JpdGljYWxOZXN0aW5nID0gMDsKKwl2UG9ydEVuYWJsZUludGVycnVwdHMoKTsKIAotICAgIC8qIENhbGwgdGhlIHRhc2sncyBlbnRyeSBwb2ludC4gKi8KLSAgICBweFRocmVhZC0+cHhDb2RlKCBweFRocmVhZC0+cHZQYXJhbXMgKTsKKwkvKiBDYWxsIHRoZSB0YXNrJ3MgZW50cnkgcG9pbnQuICovCisJcHhUaHJlYWQtPnB4Q29kZSggcHhUaHJlYWQtPnB2UGFyYW1zICk7CiAKLSAgICByZXR1cm4gTlVMTDsKKwlyZXR1cm4gTlVMTDsKIH0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgdm9pZCBwcnZTd2l0Y2hUaHJlYWQoIFRocmVhZF90ICogcHhUaHJlYWRUb1Jlc3VtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhyZWFkX3QgKiBweFRocmVhZFRvU3VzcGVuZCApCitzdGF0aWMgdm9pZCBwcnZTd2l0Y2hUaHJlYWQoIFRocmVhZF90ICpweFRocmVhZFRvUmVzdW1lLAorCQkJCQkJCSBUaHJlYWRfdCAqcHhUaHJlYWRUb1N1c3BlbmQgKQogewotICAgIEJhc2VUeXBlX3QgdXhTYXZlZENyaXRpY2FsTmVzdGluZzsKK0Jhc2VUeXBlX3QgdXhTYXZlZENyaXRpY2FsTmVzdGluZzsKIAotICAgIGlmKCBweFRocmVhZFRvU3VzcGVuZCAhPSBweFRocmVhZFRvUmVzdW1lICkKLSAgICB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIFN3aXRjaCB0YXNrcy4KLSAgICAgICAgICoKLSAgICAgICAgICogVGhlIGNyaXRpY2FsIHNlY3Rpb24gbmVzdGluZyBpcyBwZXItdGFzaywgc28gc2F2ZSBpdCBvbiB0aGUKLSAgICAgICAgICogc3RhY2sgb2YgdGhlIGN1cnJlbnQgKHN1c3BlbmRpbmcgdGhyZWFkKSwgcmVzdG9yaW5nIGl0IHdoZW4KLSAgICAgICAgICogd2Ugc3dpdGNoIGJhY2sgdG8gdGhpcyB0YXNrLgotICAgICAgICAgKi8KLSAgICAgICAgdXhTYXZlZENyaXRpY2FsTmVzdGluZyA9IHV4Q3JpdGljYWxOZXN0aW5nOworCWlmICggcHhUaHJlYWRUb1N1c3BlbmQgIT0gcHhUaHJlYWRUb1Jlc3VtZSApCisJeworCQkvKgorCQkgKiBTd2l0Y2ggdGFza3MuCisJCSAqCisJCSAqIFRoZSBjcml0aWNhbCBzZWN0aW9uIG5lc3RpbmcgaXMgcGVyLXRhc2ssIHNvIHNhdmUgaXQgb24gdGhlCisJCSAqIHN0YWNrIG9mIHRoZSBjdXJyZW50IChzdXNwZW5kaW5nIHRocmVhZCksIHJlc3RvcmluZyBpdCB3aGVuCisJCSAqIHdlIHN3aXRjaCBiYWNrIHRvIHRoaXMgdGFzay4KKwkJICovCisJCXV4U2F2ZWRDcml0aWNhbE5lc3RpbmcgPSB1eENyaXRpY2FsTmVzdGluZzsKIAotICAgICAgICBwcnZSZXN1bWVUaHJlYWQoIHB4VGhyZWFkVG9SZXN1bWUtPnB0aHJlYWQgKTsKKwkJcHJ2UmVzdW1lVGhyZWFkKCBweFRocmVhZFRvUmVzdW1lLT5wdGhyZWFkICk7CisJCWlmICggcHhUaHJlYWRUb1N1c3BlbmQtPnhEeWluZyApCisJCXsKKwkJCXB0aHJlYWRfZXhpdCggTlVMTCApOworCQl9CisJCXBydlN1c3BlbmRTZWxmKCk7CiAKLSAgICAgICAgaWYoIHB4VGhyZWFkVG9TdXNwZW5kLT54RHlpbmcgKQotICAgICAgICB7Ci0gICAgICAgICAgICBwdGhyZWFkX2V4aXQoIE5VTEwgKTsKLSAgICAgICAgfQotCi0gICAgICAgIHBydlN1c3BlbmRTZWxmKCk7Ci0KLSAgICAgICAgdXhDcml0aWNhbE5lc3RpbmcgPSB1eFNhdmVkQ3JpdGljYWxOZXN0aW5nOwotICAgIH0KKwkJdXhDcml0aWNhbE5lc3RpbmcgPSB1eFNhdmVkQ3JpdGljYWxOZXN0aW5nOworCX0KIH0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiBzdGF0aWMgdm9pZCBwcnZTdXNwZW5kU2VsZiggdm9pZCApCiB7Ci0gICAgaW50IGlTaWc7CitpbnQgaVNpZzsKIAotICAgIC8qCi0gICAgICogU3VzcGVuZCB0aGlzIHRocmVhZCBieSB3YWl0aW5nIGZvciBhIFNJR19SRVNVTUUgc2lnbmFsLgotICAgICAqCi0gICAgICogQSBzdXNwZW5kZWQgdGhyZWFkIG11c3Qgbm90IGhhbmRsZSBzaWduYWxzIChpbnRlcnJ1cHRzKSBzbwotICAgICAqIGFsbCBzaWduYWxzIG11c3QgYmUgYmxvY2tlZCBieSBjYWxsaW5nIHRoaXMgZnJvbToKLSAgICAgKgotICAgICAqIC0gSW5zaWRlIGEgY3JpdGljYWwgc2VjdGlvbiAodlBvcnRFbnRlckNyaXRpY2FsKCkgLwotICAgICAqICAgdlBvcnRFeGl0Q3JpdGljYWwoKSkuCi0gICAgICoKLSAgICAgKiAtIEZyb20gYSBzaWduYWwgaGFuZGxlciB0aGF0IGhhcyBhbGwgc2lnbmFscyBtYXNrZWQuCi0gICAgICoKLSAgICAgKiAtIEEgdGhyZWFkIHdpdGggYWxsIHNpZ25hbHMgYmxvY2tlZCB3aXRoIHB0aHJlYWRfc2lnbWFzaygpLgotICAgICAqLwotICAgIHNpZ3dhaXQoICZ4UmVzdW1lU2lnbmFscywgJmlTaWcgKTsKKwkvKgorCSAqIFN1c3BlbmQgdGhpcyB0aHJlYWQgYnkgd2FpdGluZyBmb3IgYSBTSUdfUkVTVU1FIHNpZ25hbC4KKwkgKgorCSAqIEEgc3VzcGVuZGVkIHRocmVhZCBtdXN0IG5vdCBoYW5kbGUgc2lnbmFscyAoaW50ZXJydXB0cykgc28KKwkgKiBhbGwgc2lnbmFscyBtdXN0IGJlIGJsb2NrZWQgYnkgY2FsbGluZyB0aGlzIGZyb206CisJICoKKwkgKiAtIEluc2lkZSBhIGNyaXRpY2FsIHNlY3Rpb24gKHZQb3J0RW50ZXJDcml0aWNhbCgpIC8KKwkgKiAgIHZQb3J0RXhpdENyaXRpY2FsKCkpLgorCSAqCisJICogLSBGcm9tIGEgc2lnbmFsIGhhbmRsZXIgdGhhdCBoYXMgYWxsIHNpZ25hbHMgbWFza2VkLgorCSAqCisJICogLSBBIHRocmVhZCB3aXRoIGFsbCBzaWduYWxzIGJsb2NrZWQgd2l0aCBwdGhyZWFkX3NpZ21hc2soKS4KKwkgKi8KKwlzaWd3YWl0KCAmeFJlc3VtZVNpZ25hbHMsICZpU2lnICk7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiBzdGF0aWMgdm9pZCBwcnZSZXN1bWVUaHJlYWQoIHB0aHJlYWRfdCB4VGhyZWFkSWQgKQogewotICAgIGlmKCBwdGhyZWFkX3NlbGYoKSAhPSB4VGhyZWFkSWQgKQotICAgIHsKLSAgICAgICAgcHRocmVhZF9raWxsKCB4VGhyZWFkSWQsIFNJR19SRVNVTUUgKTsKLSAgICB9CisJaWYgKCBwdGhyZWFkX3NlbGYoKSAhPSB4VGhyZWFkSWQgKQorCXsKKwkJcHRocmVhZF9raWxsKCB4VGhyZWFkSWQsIFNJR19SRVNVTUUgKTsKKwl9CiB9CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogc3RhdGljIHZvaWQgcHJ2U2V0dXBTaWduYWxzQW5kU2NoZWR1bGVyUG9saWN5KCB2b2lkICkKIHsKLSAgICBzdHJ1Y3Qgc2lnYWN0aW9uIHNpZ3Jlc3VtZSwgc2lndGljazsKLSAgICBpbnQgaVJldDsKK3N0cnVjdCBzaWdhY3Rpb24gc2lncmVzdW1lLCBzaWd0aWNrOworaW50IGlSZXQ7CiAKLSAgICBoTWFpblRocmVhZCA9IHB0aHJlYWRfc2VsZigpOworCWhNYWluVGhyZWFkID0gcHRocmVhZF9zZWxmKCk7CiAKLSAgICAvKiBJbml0aWFsaXNlIGNvbW1vbiBzaWduYWwgbWFza3MuICovCi0gICAgc2lnZW1wdHlzZXQoICZ4UmVzdW1lU2lnbmFscyApOwotICAgIHNpZ2FkZHNldCggJnhSZXN1bWVTaWduYWxzLCBTSUdfUkVTVU1FICk7Ci0gICAgc2lnZmlsbHNldCggJnhBbGxTaWduYWxzICk7CisJLyogSW5pdGlhbGlzZSBjb21tb24gc2lnbmFsIG1hc2tzLiAqLworCXNpZ2VtcHR5c2V0KCAmeFJlc3VtZVNpZ25hbHMgKTsKKwlzaWdhZGRzZXQoICZ4UmVzdW1lU2lnbmFscywgU0lHX1JFU1VNRSApOworCXNpZ2ZpbGxzZXQoICZ4QWxsU2lnbmFscyApOworCS8qIERvbid0IGJsb2NrIFNJR0lOVCBzbyB0aGlzIGNhbiBiZSB1c2VkIHRvIGJyZWFrIGludG8gR0RCIHdoaWxlCisJICogaW4gYSBjcml0aWNhbCBzZWN0aW9uLiAqLworCXNpZ2RlbHNldCggJnhBbGxTaWduYWxzLCBTSUdJTlQgKTsKIAotICAgIC8qIERvbid0IGJsb2NrIFNJR0lOVCBzbyB0aGlzIGNhbiBiZSB1c2VkIHRvIGJyZWFrIGludG8gR0RCIHdoaWxlCi0gICAgICogaW4gYSBjcml0aWNhbCBzZWN0aW9uLiAqLwotICAgIHNpZ2RlbHNldCggJnhBbGxTaWduYWxzLCBTSUdJTlQgKTsKKwkvKgorCSAqIEJsb2NrIGFsbCBzaWduYWxzIGluIHRoaXMgdGhyZWFkIHNvIGFsbCBuZXcgdGhyZWFkcworCSAqIGluaGVyaXRzIHRoaXMgbWFzay4KKwkgKgorCSAqIFdoZW4gYSB0aHJlYWQgaXMgcmVzdW1lZCBmb3IgdGhlIGZpcnN0IHRpbWUsIGFsbCBzaWduYWxzCisJICogd2lsbCBiZSB1bmJsb2NrZWQuCisJICovCisJKHZvaWQpcHRocmVhZF9zaWdtYXNrKCBTSUdfU0VUTUFTSywgJnhBbGxTaWduYWxzLAorCQkJCQkJICAgJnhTY2hlZHVsZXJPcmlnaW5hbFNpZ25hbE1hc2sgKTsKIAotICAgIC8qCi0gICAgICogQmxvY2sgYWxsIHNpZ25hbHMgaW4gdGhpcyB0aHJlYWQgc28gYWxsIG5ldyB0aHJlYWRzCi0gICAgICogaW5oZXJpdHMgdGhpcyBtYXNrLgotICAgICAqCi0gICAgICogV2hlbiBhIHRocmVhZCBpcyByZXN1bWVkIGZvciB0aGUgZmlyc3QgdGltZSwgYWxsIHNpZ25hbHMKLSAgICAgKiB3aWxsIGJlIHVuYmxvY2tlZC4KLSAgICAgKi8KLSAgICAoIHZvaWQgKSBwdGhyZWFkX3NpZ21hc2soIFNJR19TRVRNQVNLLCAmeEFsbFNpZ25hbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmeFNjaGVkdWxlck9yaWdpbmFsU2lnbmFsTWFzayApOworCS8qIFNJR19SRVNVTUUgaXMgb25seSB1c2VkIHdpdGggc2lnd2FpdCgpIHNvIGRvZXNuJ3QgbmVlZCBhCisJICAgaGFuZGxlci4gKi8KKwlzaWdyZXN1bWUuc2FfZmxhZ3MgPSAwOworCXNpZ3Jlc3VtZS5zYV9oYW5kbGVyID0gU0lHX0lHTjsKKwlzaWdmaWxsc2V0KCAmc2lncmVzdW1lLnNhX21hc2sgKTsKIAotICAgIC8qIFNJR19SRVNVTUUgaXMgb25seSB1c2VkIHdpdGggc2lnd2FpdCgpIHNvIGRvZXNuJ3QgbmVlZCBhCi0gICAgICogaGFuZGxlci4gKi8KLSAgICBzaWdyZXN1bWUuc2FfZmxhZ3MgPSAwOwotICAgIHNpZ3Jlc3VtZS5zYV9oYW5kbGVyID0gU0lHX0lHTjsKLSAgICBzaWdmaWxsc2V0KCAmc2lncmVzdW1lLnNhX21hc2sgKTsKKwlzaWd0aWNrLnNhX2ZsYWdzID0gMDsKKwlzaWd0aWNrLnNhX2hhbmRsZXIgPSB2UG9ydFN5c3RlbVRpY2tIYW5kbGVyOworCXNpZ2ZpbGxzZXQoICZzaWd0aWNrLnNhX21hc2sgKTsKIAotICAgIHNpZ3RpY2suc2FfZmxhZ3MgPSAwOwotICAgIHNpZ3RpY2suc2FfaGFuZGxlciA9IHZQb3J0U3lzdGVtVGlja0hhbmRsZXI7Ci0gICAgc2lnZmlsbHNldCggJnNpZ3RpY2suc2FfbWFzayApOworCWlSZXQgPSBzaWdhY3Rpb24oIFNJR19SRVNVTUUsICZzaWdyZXN1bWUsIE5VTEwgKTsKKwlpZiAoIGlSZXQgKQorCXsKKwkJcHJ2RmF0YWxFcnJvciggInNpZ2FjdGlvbiIsIGVycm5vICk7CisJfQogCi0gICAgaVJldCA9IHNpZ2FjdGlvbiggU0lHX1JFU1VNRSwgJnNpZ3Jlc3VtZSwgTlVMTCApOwotCi0gICAgaWYoIGlSZXQgKQotICAgIHsKLSAgICAgICAgcHJ2RmF0YWxFcnJvciggInNpZ2FjdGlvbiIsIGVycm5vICk7Ci0gICAgfQotCi0gICAgaVJldCA9IHNpZ2FjdGlvbiggU0lHQUxSTSwgJnNpZ3RpY2ssIE5VTEwgKTsKLQotICAgIGlmKCBpUmV0ICkKLSAgICB7Ci0gICAgICAgIHBydkZhdGFsRXJyb3IoICJzaWdhY3Rpb24iLCBlcnJubyApOwotICAgIH0KKwlpUmV0ID0gc2lnYWN0aW9uKCBTSUdBTFJNLCAmc2lndGljaywgTlVMTCApOworCWlmICggaVJldCApCisJeworCQlwcnZGYXRhbEVycm9yKCAic2lnYWN0aW9uIiwgZXJybm8gKTsKKwl9CiB9CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogdW5zaWduZWQgbG9uZyB1bFBvcnRHZXRSdW5UaW1lKCB2b2lkICkKIHsKLSAgICBzdHJ1Y3QgdG1zIHhUaW1lczsKK3N0cnVjdCB0bXMgeFRpbWVzOwogCi0gICAgdGltZXMoICZ4VGltZXMgKTsKKwl0aW1lcyggJnhUaW1lcyApOwogCi0gICAgcmV0dXJuICggdW5zaWduZWQgbG9uZyApIHhUaW1lcy50bXNfdXRpbWU7CisJcmV0dXJuICggdW5zaWduZWQgbG9uZyApIHhUaW1lcy50bXNfdXRpbWU7CiB9CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL1RoaXJkUGFydHkvR0NDL1Bvc2l4L3BvcnRtYWNyby5oIGIvcG9ydGFibGUvVGhpcmRQYXJ0eS9HQ0MvUG9zaXgvcG9ydG1hY3JvLmgKaW5kZXggOTFkNDRmZS4uODA0NmNiYyAxMDA2NDQKLS0tIGEvcG9ydGFibGUvVGhpcmRQYXJ0eS9HQ0MvUG9zaXgvcG9ydG1hY3JvLmgKKysrIGIvcG9ydGFibGUvVGhpcmRQYXJ0eS9HQ0MvUG9zaXgvcG9ydG1hY3JvLmgKQEAgLTI3LDEzICsyNywxMyBAQAogCiAKICNpZm5kZWYgUE9SVE1BQ1JPX0gKLSAgICAjZGVmaW5lIFBPUlRNQUNST19ICisjZGVmaW5lIFBPUlRNQUNST19ICiAKLSAgICAjaWZkZWYgX19jcGx1c3BsdXMKLSAgICAgICAgZXh0ZXJuICJDIiB7Ci0gICAgI2VuZGlmCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCiAKLSAgICAjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIFBvcnQgc3BlY2lmaWMgZGVmaW5pdGlvbnMuCkBAIC00Niw3MiArNDYsNzEgQEAKICAqLwogCiAvKiBUeXBlIGRlZmluaXRpb25zLiAqLwotICAgICNkZWZpbmUgcG9ydENIQVIgICAgICAgICAgICAgICAgIGNoYXIKLSAgICAjZGVmaW5lIHBvcnRGTE9BVCAgICAgICAgICAgICAgICBmbG9hdAotICAgICNkZWZpbmUgcG9ydERPVUJMRSAgICAgICAgICAgICAgIGRvdWJsZQotICAgICNkZWZpbmUgcG9ydExPTkcgICAgICAgICAgICAgICAgIGxvbmcKLSAgICAjZGVmaW5lIHBvcnRTSE9SVCAgICAgICAgICAgICAgICBzaG9ydAotICAgICNkZWZpbmUgcG9ydFNUQUNLX1RZUEUgICAgICAgICAgIHVuc2lnbmVkIGxvbmcKLSAgICAjZGVmaW5lIHBvcnRCQVNFX1RZUEUgICAgICAgICAgICBsb25nCi0gICAgI2RlZmluZSBwb3J0UE9JTlRFUl9TSVpFX1RZUEUgICAgaW50cHRyX3QKKyNkZWZpbmUgcG9ydENIQVIJCWNoYXIKKyNkZWZpbmUgcG9ydEZMT0FUCQlmbG9hdAorI2RlZmluZSBwb3J0RE9VQkxFCQlkb3VibGUKKyNkZWZpbmUgcG9ydExPTkcJCWxvbmcKKyNkZWZpbmUgcG9ydFNIT1JUCQlzaG9ydAorI2RlZmluZSBwb3J0U1RBQ0tfVFlQRQl1bnNpZ25lZCBsb25nCisjZGVmaW5lIHBvcnRCQVNFX1RZUEUJbG9uZworI2RlZmluZSBwb3J0UE9JTlRFUl9TSVpFX1RZUEUgaW50cHRyX3QKIAotICAgIHR5cGVkZWYgcG9ydFNUQUNLX1RZUEUgICBTdGFja1R5cGVfdDsKLSAgICB0eXBlZGVmIGxvbmcgICAgICAgICAgICAgQmFzZVR5cGVfdDsKLSAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgICAgVUJhc2VUeXBlX3Q7Cit0eXBlZGVmIHBvcnRTVEFDS19UWVBFIFN0YWNrVHlwZV90OwordHlwZWRlZiBsb25nIEJhc2VUeXBlX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgVUJhc2VUeXBlX3Q7CiAKLSAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgICAgVGlja1R5cGVfdDsKLSAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgICAgICAgICAgICggVGlja1R5cGVfdCApIFVMT05HX01BWAordHlwZWRlZiB1bnNpZ25lZCBsb25nIFRpY2tUeXBlX3Q7CisjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgVUxPTkdfTUFYCiAKLSAgICAjZGVmaW5lIHBvcnRUSUNLX1RZUEVfSVNfQVRPTUlDICAgIDEKKyNkZWZpbmUgcG9ydFRJQ0tfVFlQRV9JU19BVE9NSUMgMQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyogQXJjaGl0ZWN0dXJlIHNwZWNpZmljcy4gKi8KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEggICAgICAgICAgICAgICAgICAgKCAtMSApCi0gICAgI2RlZmluZSBwb3J0SEFTX1NUQUNLX09WRVJGTE9XX0NIRUNLSU5HICAgICggMSApCi0gICAgI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMgICAgICAgICAgICAgICAgICggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApCi0gICAgI2RlZmluZSBwb3J0VElDS19SQVRFX01JQ1JPU0VDT05EUyAgICAgICAgICggKCBwb3J0VGlja1R5cGUgKSAxMDAwMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkKLSAgICAjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVCAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RICQkJKCAtMSApCisjZGVmaW5lIHBvcnRIQVNfU1RBQ0tfT1ZFUkZMT1dfQ0hFQ0tJTkcJKCAxICkKKyNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TCQkJKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkKKyNkZWZpbmUgcG9ydFRJQ0tfUkFURV9NSUNST1NFQ09ORFMJKCAoIHBvcnRUaWNrVHlwZSApIDEwMDAwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQorI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQJCQk4CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyogU2NoZWR1bGVyIHV0aWxpdGllcy4gKi8KLSAgICBleHRlcm4gdm9pZCB2UG9ydFlpZWxkKCB2b2lkICk7CitleHRlcm4gdm9pZCB2UG9ydFlpZWxkKCB2b2lkICk7CiAKLSAgICAjZGVmaW5lIHBvcnRZSUVMRCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdlBvcnRZaWVsZCgpCisjZGVmaW5lIHBvcnRZSUVMRCgpIHZQb3J0WWllbGQoKQogCi0gICAgI2RlZmluZSBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHhTd2l0Y2hSZXF1aXJlZCApICAgIGlmKCB4U3dpdGNoUmVxdWlyZWQgIT0gcGRGQUxTRSApIHZQb3J0WWllbGQoKQotICAgICNkZWZpbmUgcG9ydFlJRUxEX0ZST01fSVNSKCB4ICkgICAgICAgICAgICAgICAgICAgICBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHggKQorI2RlZmluZSBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHhTd2l0Y2hSZXF1aXJlZCApIGlmKCB4U3dpdGNoUmVxdWlyZWQgIT0gcGRGQUxTRSApIHZQb3J0WWllbGQoKQorI2RlZmluZSBwb3J0WUlFTERfRlJPTV9JU1IoIHggKSBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHggKQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qIENyaXRpY2FsIHNlY3Rpb24gbWFuYWdlbWVudC4gKi8KLSAgICBleHRlcm4gdm9pZCB2UG9ydERpc2FibGVJbnRlcnJ1cHRzKCB2b2lkICk7Ci0gICAgZXh0ZXJuIHZvaWQgdlBvcnRFbmFibGVJbnRlcnJ1cHRzKCB2b2lkICk7Ci0gICAgI2RlZmluZSBwb3J0U0VUX0lOVEVSUlVQVF9NQVNLKCkgICAgICAoIHZQb3J0RGlzYWJsZUludGVycnVwdHMoKSApCi0gICAgI2RlZmluZSBwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0soKSAgICAoIHZQb3J0RW5hYmxlSW50ZXJydXB0cygpICkKK2V4dGVybiB2b2lkIHZQb3J0RGlzYWJsZUludGVycnVwdHMoIHZvaWQgKTsKK2V4dGVybiB2b2lkIHZQb3J0RW5hYmxlSW50ZXJydXB0cyggdm9pZCApOworI2RlZmluZSBwb3J0U0VUX0lOVEVSUlVQVF9NQVNLKCkgICAgICAgICggdlBvcnREaXNhYmxlSW50ZXJydXB0cygpICkKKyNkZWZpbmUgcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLKCkgICAgICAoIHZQb3J0RW5hYmxlSW50ZXJydXB0cygpICkKIAotICAgIGV4dGVybiBwb3J0QkFTRV9UWVBFIHhQb3J0U2V0SW50ZXJydXB0TWFzayggdm9pZCApOwotICAgIGV4dGVybiB2b2lkIHZQb3J0Q2xlYXJJbnRlcnJ1cHRNYXNrKCBwb3J0QkFTRV9UWVBFIHhNYXNrICk7CitleHRlcm4gcG9ydEJBU0VfVFlQRSB4UG9ydFNldEludGVycnVwdE1hc2soIHZvaWQgKTsKK2V4dGVybiB2b2lkIHZQb3J0Q2xlYXJJbnRlcnJ1cHRNYXNrKCBwb3J0QkFTRV9UWVBFIHhNYXNrICk7CiAKLSAgICBleHRlcm4gdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKTsKLSAgICBleHRlcm4gdm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApOwotICAgICNkZWZpbmUgcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpICAgICAgICAgeFBvcnRTZXRJbnRlcnJ1cHRNYXNrKCkKLSAgICAjZGVmaW5lIHBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUiggeCApICAgIHZQb3J0Q2xlYXJJbnRlcnJ1cHRNYXNrKCB4ICkKLSAgICAjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAgICAgICAgICAgICAgICAgIHBvcnRTRVRfSU5URVJSVVBUX01BU0soKQotICAgICNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkgICAgICAgICAgICAgICAgICAgcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLKCkKLSAgICAjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpICAgICAgICAgICAgICAgICAgICAgIHZQb3J0RW50ZXJDcml0aWNhbCgpCi0gICAgI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpICAgICAgICAgICAgICAgICAgICAgICB2UG9ydEV4aXRDcml0aWNhbCgpCitleHRlcm4gdm9pZCB2UG9ydEVudGVyQ3JpdGljYWwoIHZvaWQgKTsKK2V4dGVybiB2b2lkIHZQb3J0RXhpdENyaXRpY2FsKCB2b2lkICk7CisjZGVmaW5lIHBvcnRTRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKQkJeFBvcnRTZXRJbnRlcnJ1cHRNYXNrKCkKKyNkZWZpbmUgcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKHgpCXZQb3J0Q2xlYXJJbnRlcnJ1cHRNYXNrKHgpCisjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKQkJCQlwb3J0U0VUX0lOVEVSUlVQVF9NQVNLKCkKKyNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkJCQkJCXBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTSygpCisjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpCQkJCQl2UG9ydEVudGVyQ3JpdGljYWwoKQorI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpCQkJCQkJdlBvcnRFeGl0Q3JpdGljYWwoKQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotICAgIGV4dGVybiB2b2lkIHZQb3J0VGhyZWFkRHlpbmcoIHZvaWQgKiBweFRhc2tUb0RlbGV0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2xhdGlsZSBCYXNlVHlwZV90ICogcHhQZW5kWWllbGQgKTsKLSAgICBleHRlcm4gdm9pZCB2UG9ydENhbmNlbFRocmVhZCggdm9pZCAqIHB4VGFza1RvRGVsZXRlICk7Ci0gICAgI2RlZmluZSBwb3J0UFJFX1RBU0tfREVMRVRFX0hPT0soIHB2VGFza1RvRGVsZXRlLCBweFBlbmRZaWVsZCApICAgIHZQb3J0VGhyZWFkRHlpbmcoICggcHZUYXNrVG9EZWxldGUgKSwgKCBweFBlbmRZaWVsZCApICkKLSAgICAjZGVmaW5lIHBvcnRDTEVBTl9VUF9UQ0IoIHB4VENCICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdlBvcnRDYW5jZWxUaHJlYWQoIHB4VENCICkKK2V4dGVybiB2b2lkIHZQb3J0VGhyZWFkRHlpbmcoIHZvaWQgKnB4VGFza1RvRGVsZXRlLCB2b2xhdGlsZSBCYXNlVHlwZV90ICpweFBlbmRZaWVsZCApOworZXh0ZXJuIHZvaWQgdlBvcnRDYW5jZWxUaHJlYWQoIHZvaWQgKnB4VGFza1RvRGVsZXRlICk7CisjZGVmaW5lIHBvcnRQUkVfVEFTS19ERUxFVEVfSE9PSyggcHZUYXNrVG9EZWxldGUsIHB4UGVuZFlpZWxkICkgdlBvcnRUaHJlYWREeWluZyggKCBwdlRhc2tUb0RlbGV0ZSApLCAoIHB4UGVuZFlpZWxkICkgKQorI2RlZmluZSBwb3J0Q0xFQU5fVVBfVENCKCBweFRDQiApCXZQb3J0Q2FuY2VsVGhyZWFkKCBweFRDQiApCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgICAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApCi0gICAgI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICAgICAgICAgICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkKKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICpwdlBhcmFtZXRlcnMgKQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qCkBAIC0xMjIsMTQgKzEyMSwxNCBAQAogICogVGh1cywgb25seSBhIGNvbXBpbGllciBiYXJyaWVyIGlzIG5lZWRlZCB0byBwcmV2ZW50IHRoZSBjb21waWxlcgogICogcmVvcmRlcmluZy4KICAqLwotICAgICNkZWZpbmUgcG9ydE1FTU9SWV9CQVJSSUVSKCkgICAgICAgICAgICAgICAgICAgICAgICBfX2FzbSB2b2xhdGlsZSAoICIiIDo6OiAibWVtb3J5IiApCisjZGVmaW5lIHBvcnRNRU1PUllfQkFSUklFUigpIF9fYXNtIHZvbGF0aWxlKCAiIiA6OjogIm1lbW9yeSIgKQogCi0gICAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdWxQb3J0R2V0UnVuVGltZSggdm9pZCApOwotICAgICNkZWZpbmUgcG9ydENPTkZJR1VSRV9USU1FUl9GT1JfUlVOX1RJTUVfU1RBVFMoKSAgICAvKiBuby1vcCAqLwotICAgICNkZWZpbmUgcG9ydEdFVF9SVU5fVElNRV9DT1VOVEVSX1ZBTFVFKCkgICAgICAgICAgICB1bFBvcnRHZXRSdW5UaW1lKCkKK2V4dGVybiB1bnNpZ25lZCBsb25nIHVsUG9ydEdldFJ1blRpbWUoIHZvaWQgKTsKKyNkZWZpbmUgcG9ydENPTkZJR1VSRV9USU1FUl9GT1JfUlVOX1RJTUVfU1RBVFMoKSAvKiBuby1vcCAqLworI2RlZmluZSBwb3J0R0VUX1JVTl9USU1FX0NPVU5URVJfVkFMVUUoKSAgICAgICAgIHVsUG9ydEdldFJ1blRpbWUoKQogCi0gICAgI2lmZGVmIF9fY3BsdXNwbHVzCi0gICAgICAgIH0KLSAgICAjZW5kaWYKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCiAKICNlbmRpZiAvKiBQT1JUTUFDUk9fSCAqLwpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvVGhpcmRQYXJ0eS9HQ0MvWHRlbnNhX0VTUDMyL2luY2x1ZGUvcG9ydG1hY3JvLmggYi9wb3J0YWJsZS9UaGlyZFBhcnR5L0dDQy9YdGVuc2FfRVNQMzIvaW5jbHVkZS9wb3J0bWFjcm8uaAppbmRleCBjY2UwYmQwLi5kYzBjNzFjIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9UaGlyZFBhcnR5L0dDQy9YdGVuc2FfRVNQMzIvaW5jbHVkZS9wb3J0bWFjcm8uaAorKysgYi9wb3J0YWJsZS9UaGlyZFBhcnR5L0dDQy9YdGVuc2FfRVNQMzIvaW5jbHVkZS9wb3J0bWFjcm8uaApAQCAtNjQsMjYgKzY0LDI4IEBACiAgKi8NCiANCiAjaWZuZGVmIFBPUlRNQUNST19IDQotICAgICNkZWZpbmUgUE9SVE1BQ1JPX0gNCisjZGVmaW5lIFBPUlRNQUNST19IDQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgZXh0ZXJuICJDIiB7DQotICAgICNlbmRpZg0KKy8qICpJTkRFTlQtT0ZGKiAqLw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KKyAgICBleHRlcm4gIkMiIHsNCisjZW5kaWYNCisvKiAqSU5ERU5ULU9OKiAqLw0KIA0KLSAgICAjaWZuZGVmIF9fQVNTRU1CTEVSX18NCisjaWZuZGVmIF9fQVNTRU1CTEVSX18NCiANCi0gICAgICAgICNpbmNsdWRlIDxzdGRpbnQuaD4NCisgICAgI2luY2x1ZGUgPHN0ZGludC5oPg0KIA0KLSAgICAgICAgI2luY2x1ZGUgPHh0ZW5zYS9oYWwuaD4NCi0gICAgICAgICNpbmNsdWRlIDx4dGVuc2EvY29uZmlnL2NvcmUuaD4NCi0gICAgICAgICNpbmNsdWRlIDx4dGVuc2EvY29uZmlnL3N5c3RlbS5oPiAvKiByZXF1aXJlZCBmb3IgWFNIQUxfQ0xJQiAqLw0KLSAgICAgICAgI2luY2x1ZGUgPHh0ZW5zYS94dHJ1bnRpbWUuaD4NCi0gICAgICAgICNpbmNsdWRlICJlc3BfdGltZXIuaCIgICAgICAgICAgICAvKiByZXF1aXJlZCBmb3IgRnJlZVJUT1MgcnVuIHRpbWUgc3RhdHMgKi8NCi0gICAgICAgICNpbmNsdWRlICJlc3Bfc3lzdGVtLmgiDQorICAgICNpbmNsdWRlIDx4dGVuc2EvaGFsLmg+DQorICAgICNpbmNsdWRlIDx4dGVuc2EvY29uZmlnL2NvcmUuaD4NCisgICAgI2luY2x1ZGUgPHh0ZW5zYS9jb25maWcvc3lzdGVtLmg+IC8qIHJlcXVpcmVkIGZvciBYU0hBTF9DTElCICovDQorICAgICNpbmNsdWRlIDx4dGVuc2EveHRydW50aW1lLmg+DQorICAgICNpbmNsdWRlICJlc3BfdGltZXIuaCIgICAgICAgICAgICAvKiByZXF1aXJlZCBmb3IgRnJlZVJUT1MgcnVuIHRpbWUgc3RhdHMgKi8NCisgICAgI2luY2x1ZGUgImVzcF9zeXN0ZW0uaCINCiANCiANCi0gICAgICAgICNpbmNsdWRlIDxlc3BfaGVhcF9jYXBzLmg+DQotICAgICAgICAjaW5jbHVkZSAic29jL3NvY19tZW1vcnlfbGF5b3V0LmgiDQorICAgICNpbmNsdWRlIDxlc3BfaGVhcF9jYXBzLmg+DQorICAgICNpbmNsdWRlICJzb2Mvc29jX21lbW9yeV9sYXlvdXQuaCINCiANCiAvKiNpbmNsdWRlICJ4dGVuc2FfY29udGV4dC5oIiAqLw0KIA0KQEAgLTk5LDg0ICsxMDEsODQgQEAKIA0KIC8qIFR5cGUgZGVmaW5pdGlvbnMuICovDQogDQotICAgICAgICAjZGVmaW5lIHBvcnRDSEFSICAgICAgICAgIGludDhfdA0KLSAgICAgICAgI2RlZmluZSBwb3J0RkxPQVQgICAgICAgICBmbG9hdA0KLSAgICAgICAgI2RlZmluZSBwb3J0RE9VQkxFICAgICAgICBkb3VibGUNCi0gICAgICAgICNkZWZpbmUgcG9ydExPTkcgICAgICAgICAgaW50MzJfdA0KLSAgICAgICAgI2RlZmluZSBwb3J0U0hPUlQgICAgICAgICBpbnQxNl90DQotICAgICAgICAjZGVmaW5lIHBvcnRTVEFDS19UWVBFICAgIHVpbnQ4X3QNCi0gICAgICAgICNkZWZpbmUgcG9ydEJBU0VfVFlQRSAgICAgaW50DQorICAgICNkZWZpbmUgcG9ydENIQVIgICAgICAgICAgaW50OF90DQorICAgICNkZWZpbmUgcG9ydEZMT0FUICAgICAgICAgZmxvYXQNCisgICAgI2RlZmluZSBwb3J0RE9VQkxFICAgICAgICBkb3VibGUNCisgICAgI2RlZmluZSBwb3J0TE9ORyAgICAgICAgICBpbnQzMl90DQorICAgICNkZWZpbmUgcG9ydFNIT1JUICAgICAgICAgaW50MTZfdA0KKyAgICAjZGVmaW5lIHBvcnRTVEFDS19UWVBFICAgIHVpbnQ4X3QNCisgICAgI2RlZmluZSBwb3J0QkFTRV9UWVBFICAgICBpbnQNCiANCi0gICAgICAgIHR5cGVkZWYgcG9ydFNUQUNLX1RZUEUgICAgICAgICAgIFN0YWNrVHlwZV90Ow0KLSAgICAgICAgdHlwZWRlZiBwb3J0QkFTRV9UWVBFICAgICAgICAgICAgQmFzZVR5cGVfdDsNCi0gICAgICAgIHR5cGVkZWYgdW5zaWduZWQgcG9ydEJBU0VfVFlQRSAgIFVCYXNlVHlwZV90Ow0KKyAgICB0eXBlZGVmIHBvcnRTVEFDS19UWVBFICAgICAgICAgICBTdGFja1R5cGVfdDsNCisgICAgdHlwZWRlZiBwb3J0QkFTRV9UWVBFICAgICAgICAgICAgQmFzZVR5cGVfdDsNCisgICAgdHlwZWRlZiB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFICAgVUJhc2VUeXBlX3Q7DQogDQotICAgICAgICAjaWYgKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KLSAgICAgICAgICAgIHR5cGVkZWYgdWludDE2X3QgICAgICAgICAgICAgVGlja1R5cGVfdDsNCi0gICAgICAgICAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQotICAgICAgICAjZWxzZQ0KLSAgICAgICAgICAgIHR5cGVkZWYgdWludDMyX3QgICAgICAgICAgICAgVGlja1R5cGVfdDsNCi0gICAgICAgICAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQotICAgICAgICAjZW5kaWYNCisgICAgI2lmICggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCisgICAgICAgIHR5cGVkZWYgdWludDE2X3QgICAgICAgICAgICAgVGlja1R5cGVfdDsNCisgICAgICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmYNCisgICAgI2Vsc2UNCisgICAgICAgIHR5cGVkZWYgdWludDMyX3QgICAgICAgICAgICAgVGlja1R5cGVfdDsNCisgICAgICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwNCisgICAgI2VuZGlmDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogcG9ydGJlbmNobWFyayAqLw0KLSAgICAgICAgI2luY2x1ZGUgInBvcnRiZW5jaG1hcmsuaCINCisgICAgI2luY2x1ZGUgInBvcnRiZW5jaG1hcmsuaCINCiANCi0gICAgICAgICNpbmNsdWRlICJzZGtjb25maWcuaCINCi0gICAgICAgICNpbmNsdWRlICJlc3BfYXR0ci5oIg0KKyAgICAjaW5jbHVkZSAic2RrY29uZmlnLmgiDQorICAgICNpbmNsdWRlICJlc3BfYXR0ci5oIg0KIA0KIC8qICJtdXgiIGRhdGEgc3RydWN0dXJlIChzcGlubG9jaykgKi8NCi0gICAgICAgIHR5cGVkZWYgc3RydWN0DQotICAgICAgICB7DQotICAgICAgICAgICAgLyogb3duZXIgZmllbGQgdmFsdWVzOg0KLSAgICAgICAgICAgICAqIDAgICAgICAgICAgICAgICAgLSBVbmluaXRpYWxpemVkIChpbnZhbGlkKQ0KLSAgICAgICAgICAgICAqIHBvcnRNVVhfRlJFRV9WQUwgLSBNdXggaXMgZnJlZSwgY2FuIGJlIGxvY2tlZCBieSBlaXRoZXIgQ1BVDQotICAgICAgICAgICAgICogQ09SRV9JRF9QUk8gLyBDT1JFX0lEX0FQUCAtIE11eCBpcyBsb2NrZWQgdG8gdGhlIHBhcnRpY3VsYXIgY29yZQ0KLSAgICAgICAgICAgICAqDQotICAgICAgICAgICAgICogQW55IHZhbHVlIG90aGVyIHRoYW4gcG9ydE1VWF9GUkVFX1ZBTCwgQ09SRV9JRF9QUk8sIENPUkVfSURfQVBQIGluZGljYXRlcyBjb3JydXB0aW9uDQotICAgICAgICAgICAgICovDQotICAgICAgICAgICAgdWludDMyX3Qgb3duZXI7DQorICAgIHR5cGVkZWYgc3RydWN0DQorICAgIHsNCisgICAgICAgIC8qIG93bmVyIGZpZWxkIHZhbHVlczoNCisgICAgICAgICAqIDAgICAgICAgICAgICAgICAgLSBVbmluaXRpYWxpemVkIChpbnZhbGlkKQ0KKyAgICAgICAgICogcG9ydE1VWF9GUkVFX1ZBTCAtIE11eCBpcyBmcmVlLCBjYW4gYmUgbG9ja2VkIGJ5IGVpdGhlciBDUFUNCisgICAgICAgICAqIENPUkVfSURfUFJPIC8gQ09SRV9JRF9BUFAgLSBNdXggaXMgbG9ja2VkIHRvIHRoZSBwYXJ0aWN1bGFyIGNvcmUNCisgICAgICAgICAqDQorICAgICAgICAgKiBBbnkgdmFsdWUgb3RoZXIgdGhhbiBwb3J0TVVYX0ZSRUVfVkFMLCBDT1JFX0lEX1BSTywgQ09SRV9JRF9BUFAgaW5kaWNhdGVzIGNvcnJ1cHRpb24NCisgICAgICAgICAqLw0KKyAgICAgICAgdWludDMyX3Qgb3duZXI7DQogDQotICAgICAgICAgICAgLyogY291bnQgZmllbGQ6DQotICAgICAgICAgICAgICogSWYgbXV4IGlzIHVubG9ja2VkLCBjb3VudCBzaG91bGQgYmUgemVyby4NCi0gICAgICAgICAgICAgKiBJZiBtdXggaXMgbG9ja2VkLCBjb3VudCBpcyBub24temVybyAmIHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiByZWN1cnNpdmUgbG9ja3Mgb24gdGhlIG11eC4NCi0gICAgICAgICAgICAgKi8NCi0gICAgICAgICAgICB1aW50MzJfdCBjb3VudDsNCi0gICAgICAgICAgICAjaWZkZWYgQ09ORklHX0ZSRUVSVE9TX1BPUlRNVVhfREVCVUcNCi0gICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIGxhc3RMb2NrZWRGbjsNCi0gICAgICAgICAgICAgICAgaW50IGxhc3RMb2NrZWRMaW5lOw0KLSAgICAgICAgICAgICNlbmRpZg0KLSAgICAgICAgfSBwb3J0TVVYX1RZUEU7DQorICAgICAgICAvKiBjb3VudCBmaWVsZDoNCisgICAgICAgICAqIElmIG11eCBpcyB1bmxvY2tlZCwgY291bnQgc2hvdWxkIGJlIHplcm8uDQorICAgICAgICAgKiBJZiBtdXggaXMgbG9ja2VkLCBjb3VudCBpcyBub24temVybyAmIHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiByZWN1cnNpdmUgbG9ja3Mgb24gdGhlIG11eC4NCisgICAgICAgICAqLw0KKyAgICAgICAgdWludDMyX3QgY291bnQ7DQorICAgICAgICAjaWZkZWYgQ09ORklHX0ZSRUVSVE9TX1BPUlRNVVhfREVCVUcNCisgICAgICAgICAgICBjb25zdCBjaGFyICogbGFzdExvY2tlZEZuOw0KKyAgICAgICAgICAgIGludCBsYXN0TG9ja2VkTGluZTsNCisgICAgICAgICNlbmRpZg0KKyAgICB9IHBvcnRNVVhfVFlQRTsNCiANCi0gICAgICAgICNkZWZpbmUgcG9ydE1VWF9GUkVFX1ZBTCAgICAgIDB4QjMzRkZGRkYNCisgICAgI2RlZmluZSBwb3J0TVVYX0ZSRUVfVkFMICAgICAgMHhCMzNGRkZGRg0KIA0KIC8qIFNwZWNpYWwgY29uc3RhbnRzIGZvciB2UG9ydENQVUFjcXVpcmVNdXRleFRpbWVvdXQoKSAqLw0KLSAgICAgICAgI2RlZmluZSBwb3J0TVVYX05PX1RJTUVPVVQgICAgKCAtMSApIC8qIFdoZW4gcGFzc2VkIGZvciAndGltZW91dF9jeWNsZXMnLCBzcGluIGZvcmV2ZXIgaWYgbmVjZXNzYXJ5ICovDQotICAgICAgICAjZGVmaW5lIHBvcnRNVVhfVFJZX0xPQ0sgICAgICAwICAgICAgLyogVHJ5IHRvIGFjcXVpcmUgdGhlIHNwaW5sb2NrIGEgc2luZ2xlIHRpbWUgb25seSAqLw0KKyAgICAjZGVmaW5lIHBvcnRNVVhfTk9fVElNRU9VVCAgICAoIC0xICkgLyogV2hlbiBwYXNzZWQgZm9yICd0aW1lb3V0X2N5Y2xlcycsIHNwaW4gZm9yZXZlciBpZiBuZWNlc3NhcnkgKi8NCisgICAgI2RlZmluZSBwb3J0TVVYX1RSWV9MT0NLICAgICAgMCAgICAgIC8qIFRyeSB0byBhY3F1aXJlIHRoZSBzcGlubG9jayBhIHNpbmdsZSB0aW1lIG9ubHkgKi8NCiANCiAvKiBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIHRoZSBwb3J0TVVYX1RZUEUgc3RydWN0IGRlZmluaXRpb24gcGxlYXNlLiAqLw0KLSAgICAgICAgI2lmbmRlZiBDT05GSUdfRlJFRVJUT1NfUE9SVE1VWF9ERUJVRw0KLSAgICAgICAgICAgICNkZWZpbmUgcG9ydE1VWF9JTklUSUFMSVpFUl9VTkxPQ0tFRCBcDQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC5vd25lciA9IHBvcnRNVVhfRlJFRV9WQUwsICAgICAgICAgICAgICAgXA0KLSAgICAgICAgLmNvdW50ID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgICNpZm5kZWYgQ09ORklHX0ZSRUVSVE9TX1BPUlRNVVhfREVCVUcNCisgICAgICAgICNkZWZpbmUgcG9ydE1VWF9JTklUSUFMSVpFUl9VTkxPQ0tFRCBcDQorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgLm93bmVyID0gcG9ydE1VWF9GUkVFX1ZBTCwgICAgICAgICAgIFwNCisgICAgICAgIC5jb3VudCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICBcDQogICAgIH0NCi0gICAgICAgICNlbHNlDQotICAgICAgICAgICAgI2RlZmluZSBwb3J0TVVYX0lOSVRJQUxJWkVSX1VOTE9DS0VEIFwNCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgLm93bmVyID0gcG9ydE1VWF9GUkVFX1ZBTCwgICAgICAgICAgICAgICBcDQotICAgICAgICAuY291bnQgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC5sYXN0TG9ja2VkRm4gPSAiKG5ldmVyIGxvY2tlZCkiLCAgICAgICAgXA0KLSAgICAgICAgLmxhc3RMb2NrZWRMaW5lID0gLTEgICAgICAgICAgICAgICAgICAgICBcDQorICAgICNlbHNlDQorICAgICAgICAjZGVmaW5lIHBvcnRNVVhfSU5JVElBTElaRVJfVU5MT0NLRUQgXA0KKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAgIC5vd25lciA9IHBvcnRNVVhfRlJFRV9WQUwsICAgICAgICAgICBcDQorICAgICAgICAuY291bnQgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgLmxhc3RMb2NrZWRGbiA9ICIobmV2ZXIgbG9ja2VkKSIsICAgIFwNCisgICAgICAgIC5sYXN0TG9ja2VkTGluZSA9IC0xICAgICAgICAgICAgICAgICBcDQogICAgIH0NCi0gICAgICAgICNlbmRpZiAvKiBpZm5kZWYgQ09ORklHX0ZSRUVSVE9TX1BPUlRNVVhfREVCVUcgKi8NCisgICAgI2VuZGlmIC8qIGlmbmRlZiBDT05GSUdfRlJFRVJUT1NfUE9SVE1VWF9ERUJVRyAqLw0KIA0KIA0KLSAgICAgICAgI2RlZmluZSBwb3J0QVNTRVJUX0lGX0lOX0lTUigpICAgIHZQb3J0QXNzZXJ0SWZJbklTUigpDQotICAgICAgICB2b2lkIHZQb3J0QXNzZXJ0SWZJbklTUigpOw0KKyAgICAjZGVmaW5lIHBvcnRBU1NFUlRfSUZfSU5fSVNSKCkgICAgdlBvcnRBc3NlcnRJZkluSVNSKCkNCisgICAgdm9pZCB2UG9ydEFzc2VydElmSW5JU1IoKTsNCiANCi0gICAgICAgICNkZWZpbmUgcG9ydENSSVRJQ0FMX05FU1RJTkdfSU5fVENCICAgIDENCisgICAgI2RlZmluZSBwb3J0Q1JJVElDQUxfTkVTVElOR19JTl9UQ0IgICAgMQ0KIA0KIC8qDQogICogTW9kaWZpY2F0aW9ucyB0byBwb3J0RU5URVJfQ1JJVElDQUwuDQpAQCAtMjA0LDE3ICsyMDYsMTcgQEAKICAqIHRoYXQgZWl0aGVyIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgYm90aCBmcm9tIElTUiBhcyB3ZWxsIGFzIHRhc2sgY29udGV4dC4gVGhpcyBpcyBub3Qgc3RhbmRhcmQgRnJlZVJUT1MNCiAgKiBiZWhhdmlvdXI7IHBsZWFzZSBrZWVwIHRoaXMgaW4gbWluZCBpZiB5b3UgbmVlZCBhbnkgY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIEZyZWVSVE9TIGltcGxlbWVudGF0aW9ucy4NCiAgKi8NCi0gICAgICAgIHZvaWQgdlBvcnRDUFVJbml0aWFsaXplTXV0ZXgoIHBvcnRNVVhfVFlQRSAqIG11eCApOw0KLSAgICAgICAgI2lmZGVmIENPTkZJR19GUkVFUlRPU19QT1JUTVVYX0RFQlVHDQotICAgICAgICAgICAgI2Vycm9yIENPTkZJR19GUkVFUlRPU19QT1JUTVVYX0RFQlVHIG5vdCBzdXBwb3J0ZWQgaW4gQW1hem9uIEZyZWVSVE9TDQotICAgICAgICAjZW5kaWYNCisgICAgdm9pZCB2UG9ydENQVUluaXRpYWxpemVNdXRleCggcG9ydE1VWF9UWVBFICogbXV4ICk7DQorICAgICNpZmRlZiBDT05GSUdfRlJFRVJUT1NfUE9SVE1VWF9ERUJVRw0KKyAgICAgICAgI2Vycm9yIENPTkZJR19GUkVFUlRPU19QT1JUTVVYX0RFQlVHIG5vdCBzdXBwb3J0ZWQgaW4gQW1hem9uIEZyZWVSVE9TDQorICAgICNlbmRpZg0KIA0KLSAgICAgICAgdm9pZCB2VGFza0V4aXRDcml0aWNhbCgpOw0KLSAgICAgICAgdm9pZCB2VGFza0VudGVyQ3JpdGljYWwoKTsNCi0gICAgICAgIHN0YXRpYyBpbmxpbmUgdm9pZCB2UG9ydENvbnN1bWVTcGlubG9ja0FyZyggaW50IHVudXNlZCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uICkNCi0gICAgICAgIHsNCi0gICAgICAgIH0NCisgICAgdm9pZCB2VGFza0V4aXRDcml0aWNhbCgpOw0KKyAgICB2b2lkIHZUYXNrRW50ZXJDcml0aWNhbCgpOw0KKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgdlBvcnRDb25zdW1lU3BpbmxvY2tBcmcoIGludCB1bnVzZWQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uICkNCisgICAgew0KKyAgICB9DQogDQogLyoqIEBicmllZiBBY3F1aXJlIGEgcG9ydG11eCBzcGlubG9jayB3aXRoIGEgdGltZW91dA0KICAqDQpAQCAtMjI0LDM1ICsyMjYsMzUgQEAKICAqDQogICogQHJldHVybiB0cnVlIGlmIG11dGV4IGlzIHN1Y2Nlc3NmdWxseSBhY3F1aXJlZCwgZmFsc2Ugb24gdGltZW91dC4NCiAgKi8NCi0gICAgICAgIGJvb2wgdlBvcnRDUFVBY3F1aXJlTXV0ZXhUaW1lb3V0KCBwb3J0TVVYX1RZUEUgKiBtdXgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRpbWVvdXRfY3ljbGVzICk7DQotICAgICAgICB2b2lkIHZQb3J0Q1BVUmVsZWFzZU11dGV4KCBwb3J0TVVYX1RZUEUgKiBtdXggKTsNCisgICAgYm9vbCB2UG9ydENQVUFjcXVpcmVNdXRleFRpbWVvdXQoIHBvcnRNVVhfVFlQRSAqIG11eCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0aW1lb3V0X2N5Y2xlcyApOw0KKyAgICB2b2lkIHZQb3J0Q1BVUmVsZWFzZU11dGV4KCBwb3J0TVVYX1RZUEUgKiBtdXggKTsNCiANCi0gICAgICAgICNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCAuLi4gKSAgICAgICAgZG8geyB2VGFza0VudGVyQ3JpdGljYWwoKTsgdlBvcnRDb25zdW1lU3BpbmxvY2tBcmcoIDAsICMjIF9fVkFfQVJHU19fICk7IH0gd2hpbGUoIDAgKQ0KLSAgICAgICAgI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCggLi4uICkgICAgICAgICBkbyB7IHZUYXNrRXhpdENyaXRpY2FsKCk7IHZQb3J0Q29uc3VtZVNwaW5sb2NrQXJnKCAwLCAjIyBfX1ZBX0FSR1NfXyApOyB9IHdoaWxlKCAwICkNCisgICAgI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoIC4uLiApICAgICAgICBkbyB7IHZUYXNrRW50ZXJDcml0aWNhbCgpOyB2UG9ydENvbnN1bWVTcGlubG9ja0FyZyggMCwgIyMgX19WQV9BUkdTX18gKTsgfSB3aGlsZSggMCApDQorICAgICNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoIC4uLiApICAgICAgICAgZG8geyB2VGFza0V4aXRDcml0aWNhbCgpOyB2UG9ydENvbnN1bWVTcGlubG9ja0FyZyggMCwgIyMgX19WQV9BUkdTX18gKTsgfSB3aGlsZSggMCApDQogDQogDQotICAgICAgICAjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTF9JU1IoIG11eCApICAgIHZQb3J0Q1BVQWNxdWlyZU11dGV4VGltZW91dCggbXV4LCBwb3J0TVVYX05PX1RJTUVPVVQgKQ0KLSAgICAgICAgI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTF9JU1IoIG11eCApICAgICB2UG9ydENQVVJlbGVhc2VNdXRleCggbXV4ICkNCisgICAgI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUxfSVNSKCBtdXggKSAgICB2UG9ydENQVUFjcXVpcmVNdXRleFRpbWVvdXQoIG11eCwgcG9ydE1VWF9OT19USU1FT1VUICkNCisgICAgI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTF9JU1IoIG11eCApICAgICB2UG9ydENQVVJlbGVhc2VNdXRleCggbXV4ICkNCiANCi0gICAgICAgICNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMX1NBRkUoIG11eCApIFwNCi0gICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGlmKCB4UG9ydEluSXNyQ29udGV4dCgpICkgeyAgICAgICAgICAgIFwNCi0gICAgICAgICAgICBwb3J0RU5URVJfQ1JJVElDQUxfSVNSKCBtdXggKTsgICAgIFwNCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICBwb3J0RU5URVJfQ1JJVElDQUwoIG11eCApOyAgICAgICAgIFwNCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUxfU0FGRSggbXV4ICkgXA0KKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgICBpZiggeFBvcnRJbklzckNvbnRleHQoKSApIHsgICAgICAgIFwNCisgICAgICAgICAgICBwb3J0RU5URVJfQ1JJVElDQUxfSVNSKCBtdXggKTsgXA0KKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgICBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAgICAgICBwb3J0RU5URVJfQ1JJVElDQUwoIG11eCApOyAgICAgXA0KKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQogICAgIH0gd2hpbGUoIDAgKQ0KIA0KLSAgICAgICAgI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTF9TQUZFKCBtdXggKSBcDQotICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGlmKCB4UG9ydEluSXNyQ29udGV4dCgpICkgeyAgICAgICAgICAgXA0KLSAgICAgICAgICAgIHBvcnRFWElUX0NSSVRJQ0FMX0lTUiggbXV4ICk7ICAgICBcDQotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIHBvcnRFWElUX0NSSVRJQ0FMKCBtdXggKTsgICAgICAgICBcDQotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTF9TQUZFKCBtdXggKSBcDQorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgaWYoIHhQb3J0SW5Jc3JDb250ZXh0KCkgKSB7ICAgICAgIFwNCisgICAgICAgICAgICBwb3J0RVhJVF9DUklUSUNBTF9JU1IoIG11eCApOyBcDQorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAgICAgICBwb3J0RVhJVF9DUklUSUNBTCggbXV4ICk7ICAgICBcDQorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KICAgICB9IHdoaWxlKCAwICkNCiANCiANCkBAIC0yNjAsMzcgKzI2MiwzNyBAQAogLyogVGhlc2UgY2Fubm90IGJlIG5lc3RlZC4gVGhleSBzaG91bGQgYmUgdXNlZCB3aXRoIGEgbG90IG9mIGNhcmUgYW5kIGNhbm5vdCBiZSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgbGV2ZWwuICovDQogLyogKi8NCiAvKiBPbmx5IGFwcGxpZXMgdG8gb25lIENQVS4gU2VlIG5vdGVzIGFib3ZlICYgYmVsb3cgZm9yIHJlYXNvbnMgbm90IHRvIHVzZSB0aGVzZS4gKi8NCi0gICAgICAgICNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpICAgIGRvIHsgWFRPU19TRVRfSU5UTEVWRUwoIFhDSEFMX0VYQ01fTEVWRUwgKTsgcG9ydGJlbmNobWFya0lOVEVSUlVQVF9ESVNBQkxFKCk7IH0gd2hpbGUoIDAgKQ0KLSAgICAgICAgI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKSAgICAgZG8geyBwb3J0YmVuY2htYXJrSU5URVJSVVBUX1JFU1RPUkUoIDAgKTsgWFRPU19TRVRfSU5UTEVWRUwoIDAgKTsgfSB3aGlsZSggMCApDQorICAgICNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpICAgIGRvIHsgWFRPU19TRVRfSU5UTEVWRUwoIFhDSEFMX0VYQ01fTEVWRUwgKTsgcG9ydGJlbmNobWFya0lOVEVSUlVQVF9ESVNBQkxFKCk7IH0gd2hpbGUoIDAgKQ0KKyAgICAjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpICAgICBkbyB7IHBvcnRiZW5jaG1hcmtJTlRFUlJVUFRfUkVTVE9SRSggMCApOyBYVE9TX1NFVF9JTlRMRVZFTCggMCApOyB9IHdoaWxlKCAwICkNCiANCiAvKiBDbGVhbmVyIHNvbHV0aW9uIGFsbG93cyBuZXN0ZWQgaW50ZXJydXB0cyBkaXNhYmxpbmcgYW5kIHJlc3RvcmluZyB2aWEgbG9jYWwgcmVnaXN0ZXJzIG9yIHN0YWNrLiAqLw0KIC8qIFRoZXkgY2FuIGJlIGNhbGxlZCBmcm9tIGludGVycnVwdHMgdG9vLiAqLw0KIC8qIFdBUk5JTkc6IE9ubHkgYXBwbGllcyB0byBjdXJyZW50IENQVS4gU2VlIG5vdGVzIGFib3ZlLiAqLw0KLSAgICAgICAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBwb3J0RU5URVJfQ1JJVElDQUxfTkVTVEVEKCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICB1bnNpZ25lZCBzdGF0ZSA9IFhUT1NfU0VUX0lOVExFVkVMKCBYQ0hBTF9FWENNX0xFVkVMICk7DQorICAgIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgcG9ydEVOVEVSX0NSSVRJQ0FMX05FU1RFRCgpDQorICAgIHsNCisgICAgICAgIHVuc2lnbmVkIHN0YXRlID0gWFRPU19TRVRfSU5UTEVWRUwoIFhDSEFMX0VYQ01fTEVWRUwgKTsNCiANCi0gICAgICAgICAgICBwb3J0YmVuY2htYXJrSU5URVJSVVBUX0RJU0FCTEUoKTsNCi0gICAgICAgICAgICByZXR1cm4gc3RhdGU7DQotICAgICAgICB9DQotICAgICAgICAjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMX05FU1RFRCggc3RhdGUgKSAgICAgICAgICAgICBkbyB7IHBvcnRiZW5jaG1hcmtJTlRFUlJVUFRfUkVTVE9SRSggc3RhdGUgKTsgWFRPU19SRVNUT1JFX0pVU1RfSU5UTEVWRUwoIHN0YXRlICk7IH0gd2hpbGUoIDAgKQ0KKyAgICAgICAgcG9ydGJlbmNobWFya0lOVEVSUlVQVF9ESVNBQkxFKCk7DQorICAgICAgICByZXR1cm4gc3RhdGU7DQorICAgIH0NCisgICAgI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTF9ORVNURUQoIHN0YXRlICkgICAgICAgICAgICAgZG8geyBwb3J0YmVuY2htYXJrSU5URVJSVVBUX1JFU1RPUkUoIHN0YXRlICk7IFhUT1NfUkVTVE9SRV9KVVNUX0lOVExFVkVMKCBzdGF0ZSApOyB9IHdoaWxlKCAwICkNCiANCiAvKiBUaGVzZSBGcmVlUlRPUyB2ZXJzaW9ucyBhcmUgc2ltaWxhciB0byB0aGUgbmVzdGVkIHZlcnNpb25zIGFib3ZlICovDQotICAgICAgICAjZGVmaW5lIHBvcnRTRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKSAgICAgICAgICAgICBwb3J0RU5URVJfQ1JJVElDQUxfTkVTVEVEKCkNCi0gICAgICAgICNkZWZpbmUgcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCBzdGF0ZSApICAgIHBvcnRFWElUX0NSSVRJQ0FMX05FU1RFRCggc3RhdGUgKQ0KKyAgICAjZGVmaW5lIHBvcnRTRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKSAgICAgICAgICAgICBwb3J0RU5URVJfQ1JJVElDQUxfTkVTVEVEKCkNCisgICAgI2RlZmluZSBwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoIHN0YXRlICkgICAgcG9ydEVYSVRfQ1JJVElDQUxfTkVTVEVEKCBzdGF0ZSApDQogDQogLypCZWNhdXNlIHRoZSBST00gcm91dGluZXMgZG9uJ3QgbmVjZXNzYXJpbHkgaGFuZGxlIGEgc3RhY2sgaW4gZXh0ZXJuYWwgUkFNIGNvcnJlY3RseSwgd2UgZm9yY2UgKi8NCiAvKnRoZSBzdGFjayBtZW1vcnkgdG8gYWx3YXlzIGJlIGludGVybmFsLiAqLw0KLSAgICAgICAgI2RlZmluZSBwdlBvcnRNYWxsb2NUY2JNZW0oIHNpemUgKSAgICAgICAgaGVhcF9jYXBzX21hbGxvYyggc2l6ZSwgTUFMTE9DX0NBUF9JTlRFUk5BTCB8IE1BTExPQ19DQVBfOEJJVCApDQotICAgICAgICAjZGVmaW5lIHB2UG9ydE1hbGxvY1N0YWNrTWVtKCBzaXplICkgICAgICBoZWFwX2NhcHNfbWFsbG9jKCBzaXplLCBNQUxMT0NfQ0FQX0lOVEVSTkFMIHwgTUFMTE9DX0NBUF84QklUICkNCisgICAgI2RlZmluZSBwdlBvcnRNYWxsb2NUY2JNZW0oIHNpemUgKSAgICAgICAgaGVhcF9jYXBzX21hbGxvYyggc2l6ZSwgTUFMTE9DX0NBUF9JTlRFUk5BTCB8IE1BTExPQ19DQVBfOEJJVCApDQorICAgICNkZWZpbmUgcHZQb3J0TWFsbG9jU3RhY2tNZW0oIHNpemUgKSAgICAgIGhlYXBfY2Fwc19tYWxsb2MoIHNpemUsIE1BTExPQ19DQVBfSU5URVJOQUwgfCBNQUxMT0NfQ0FQXzhCSVQgKQ0KIA0KIC8qeFRhc2tDcmVhdGVTdGF0aWMgdXNlcyB0aGVzZSBmdW5jdGlvbnMgdG8gY2hlY2sgaW5jb21pbmcgbWVtb3J5LiAqLw0KLSAgICAgICAgI2RlZmluZSBwb3J0VkFMSURfVENCX01FTSggcHRyICkgICAgICAgICAgKCBlc3BfcHRyX2ludGVybmFsKCBwdHIgKSAmJiBlc3BfcHRyX2J5dGVfYWNjZXNzaWJsZSggcHRyICkgKQ0KLSAgICAgICAgI2lmZGVmIENPTkZJR19TUElSQU1fQUxMT1dfU1RBQ0tfRVhURVJOQUxfTUVNT1JZDQotICAgICAgICAgICAgI2RlZmluZSBwb3J0VkFMSURfU1RBQ0tfTUVNKCBwdHIgKSAgICBlc3BfcHRyX2J5dGVfYWNjZXNzaWJsZSggcHRyICkNCi0gICAgICAgICNlbHNlDQotICAgICAgICAgICAgI2RlZmluZSBwb3J0VkFMSURfU1RBQ0tfTUVNKCBwdHIgKSAgICAoIGVzcF9wdHJfaW50ZXJuYWwoIHB0ciApICYmIGVzcF9wdHJfYnl0ZV9hY2Nlc3NpYmxlKCBwdHIgKSApDQotICAgICAgICAjZW5kaWYNCisgICAgI2RlZmluZSBwb3J0VkFMSURfVENCX01FTSggcHRyICkgICAgICAgICAgKCBlc3BfcHRyX2ludGVybmFsKCBwdHIgKSAmJiBlc3BfcHRyX2J5dGVfYWNjZXNzaWJsZSggcHRyICkgKQ0KKyAgICAjaWZkZWYgQ09ORklHX1NQSVJBTV9BTExPV19TVEFDS19FWFRFUk5BTF9NRU1PUlkNCisgICAgICAgICNkZWZpbmUgcG9ydFZBTElEX1NUQUNLX01FTSggcHRyICkgICAgZXNwX3B0cl9ieXRlX2FjY2Vzc2libGUoIHB0ciApDQorICAgICNlbHNlDQorICAgICAgICAjZGVmaW5lIHBvcnRWQUxJRF9TVEFDS19NRU0oIHB0ciApICAgICggZXNwX3B0cl9pbnRlcm5hbCggcHRyICkgJiYgZXNwX3B0cl9ieXRlX2FjY2Vzc2libGUoIHB0ciApICkNCisgICAgI2VuZGlmDQogDQogLyoNCiAgKiBXcmFwcGVyIGZvciB0aGUgWHRlbnNhIGNvbXBhcmUtYW5kLXNldCBpbnN0cnVjdGlvbi4gVGhpcyBzdWJyb3V0aW5lIHdpbGwgYXRvbWljYWxseSBjb21wYXJlDQpAQCAtMzAxLDExOCArMzAzLDExOCBAQAogICogKmJpdHdpc2UgaW52ZXJzZSogb2YgdGhlIG9sZCBtZW0gaWYgdGhlIG1lbSB3YXNuJ3Qgd3JpdHRlbi4gVGhpcyBkb2Vzbid0IHNlZW0gdG8gaGFwcGVuIG9uIHRoZQ0KICAqIEVTUDMyIChwb3J0TVVYIGFzc2VydGlvbnMgd291bGQgZmFpbCkuDQogICovDQotICAgICAgICBzdGF0aWMgaW5saW5lIHZvaWQgdXhQb3J0Q29tcGFyZVNldCggdm9sYXRpbGUgdWludDMyX3QgKiBhZGRyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGNvbXBhcmUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKiBzZXQgKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgICNpZiAoIFhDSEFMX0hBVkVfUzMyQzFJID4gMCApDQotICAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgNCi0gICAgICAgICAgICAgICAgICAgICJXU1IgCSAgICAlMixTQ09NUEFSRTEgXG4iDQotICAgICAgICAgICAgICAgICAgICAiUzMyQzFJICAgICAlMCwgJTEsIDAJIFxuIg0KLSAgICAgICAgICAgICAgICAgICAgOiAiPXIiICggKnNldCApDQotICAgICAgICAgICAgICAgICAgICA6ICJyIiAoIGFkZHIgKSwgInIiICggY29tcGFyZSApLCAiMCIgKCAqc2V0ICkNCi0gICAgICAgICAgICAgICAgICAgICk7DQotICAgICAgICAgICAgI2Vsc2UNCi0gICAgICAgICAgICAgICAgLyogTm8gUzMyQzFJLCBzbyBkbyB0aGlzIGJ5IGRpc2FibGluZyBhbmQgcmUtZW5hYmxpbmcgaW50ZXJydXB0cyAoc2xvd2VyKSAqLw0KLSAgICAgICAgICAgICAgICB1aW50MzJfdCBpbnRsZXZlbCwgb2xkX3ZhbHVlOw0KLSAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICJyc2lsICUwLCAiIFhUU1RSKCBYQ0hBTF9FWENNX0xFVkVMICkgIlxuIg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIj1yIiAoIGludGxldmVsICkgKTsNCisgICAgc3RhdGljIGlubGluZSB2b2lkIHV4UG9ydENvbXBhcmVTZXQoIHZvbGF0aWxlIHVpbnQzMl90ICogYWRkciwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGNvbXBhcmUsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqIHNldCApDQorICAgIHsNCisgICAgICAgICNpZiAoIFhDSEFMX0hBVkVfUzMyQzFJID4gMCApDQorICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKA0KKyAgICAgICAgICAgICAgICAiV1NSIAkgICAgJTIsU0NPTVBBUkUxIFxuIg0KKyAgICAgICAgICAgICAgICAiUzMyQzFJICAgICAlMCwgJTEsIDAJIFxuIg0KKyAgICAgICAgICAgICAgICA6ICI9ciIgKCAqc2V0ICkNCisgICAgICAgICAgICAgICAgOiAiciIgKCBhZGRyICksICJyIiAoIGNvbXBhcmUgKSwgIjAiICggKnNldCApDQorICAgICAgICAgICAgICAgICk7DQorICAgICAgICAjZWxzZQ0KKyAgICAgICAgICAgIC8qIE5vIFMzMkMxSSwgc28gZG8gdGhpcyBieSBkaXNhYmxpbmcgYW5kIHJlLWVuYWJsaW5nIGludGVycnVwdHMgKHNsb3dlcikgKi8NCisgICAgICAgICAgICB1aW50MzJfdCBpbnRsZXZlbCwgb2xkX3ZhbHVlOw0KKyAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICggInJzaWwgJTAsICIgWFRTVFIoIFhDSEFMX0VYQ01fTEVWRUwgKSAiXG4iDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICI9ciIgKCBpbnRsZXZlbCApICk7DQogDQotICAgICAgICAgICAgICAgIG9sZF92YWx1ZSA9ICphZGRyOw0KKyAgICAgICAgICAgIG9sZF92YWx1ZSA9ICphZGRyOw0KIA0KLSAgICAgICAgICAgICAgICBpZiggb2xkX3ZhbHVlID09IGNvbXBhcmUgKQ0KLSAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAqYWRkciA9ICpzZXQ7DQotICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICBpZiggb2xkX3ZhbHVlID09IGNvbXBhcmUgKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgKmFkZHIgPSAqc2V0Ow0KKyAgICAgICAgICAgIH0NCiANCi0gICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCAibWVtdyBcbiINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid3NyICUwLCBwc1xuIg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogOiAiciIgKCBpbnRsZXZlbCApICk7DQorICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCAibWVtdyBcbiINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3c3IgJTAsIHBzXG4iDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDogInIiICggaW50bGV2ZWwgKSApOw0KIA0KLSAgICAgICAgICAgICAgICAqc2V0ID0gb2xkX3ZhbHVlOw0KLSAgICAgICAgICAgICNlbmRpZiAvKiBpZiAoIFhDSEFMX0hBVkVfUzMyQzFJID4gMCApICovDQotICAgICAgICB9DQorICAgICAgICAgICAgKnNldCA9IG9sZF92YWx1ZTsNCisgICAgICAgICNlbmRpZiAvKiBpZiAoIFhDSEFMX0hBVkVfUzMyQzFJID4gMCApICovDQorICAgIH0NCiANCi0gICAgICAgIHZvaWQgdXhQb3J0Q29tcGFyZVNldEV4dHJhbSggdm9sYXRpbGUgdWludDMyX3QgKiBhZGRyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBjb21wYXJlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqIHNldCApOw0KKyAgICB2b2lkIHV4UG9ydENvbXBhcmVTZXRFeHRyYW0oIHZvbGF0aWxlIHVpbnQzMl90ICogYWRkciwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBjb21wYXJlLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICogc2V0ICk7DQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogQXJjaGl0ZWN0dXJlIHNwZWNpZmljcy4gKi8NCi0gICAgICAgICNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSCAgICAgICggLTEgKQ0KLSAgICAgICAgI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMgICAgKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCi0gICAgICAgICNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UICAgIDQNCi0gICAgICAgICNkZWZpbmUgcG9ydE5PUCgpICAgIFhUX05PUCgpDQorICAgICNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSCAgICAgICggLTEgKQ0KKyAgICAjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUyAgICAoICggVGlja1R5cGVfdCApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KKyAgICAjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVCAgICA0DQorICAgICNkZWZpbmUgcG9ydE5PUCgpICAgIFhUX05PUCgpDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogRmluZSByZXNvbHV0aW9uIHRpbWUgKi8NCi0gICAgICAgICNkZWZpbmUgcG9ydEdFVF9SVU5fVElNRV9DT1VOVEVSX1ZBTFVFKCkgICAgeHRoYWxfZ2V0X2Njb3VudCgpDQorICAgICNkZWZpbmUgcG9ydEdFVF9SVU5fVElNRV9DT1VOVEVSX1ZBTFVFKCkgICAgeHRoYWxfZ2V0X2Njb3VudCgpDQogLypjY291bnQgb3IgZXNwX3RpbWVyIGFyZSBpbml0aWFsaXplZCBlbHNld2hlcmUgKi8NCi0gICAgICAgICNkZWZpbmUgcG9ydENPTkZJR1VSRV9USU1FUl9GT1JfUlVOX1RJTUVfU1RBVFMoKQ0KKyAgICAjZGVmaW5lIHBvcnRDT05GSUdVUkVfVElNRVJfRk9SX1JVTl9USU1FX1NUQVRTKCkNCiANCi0gICAgICAgICNpZmRlZiBDT05GSUdfRlJFRVJUT1NfUlVOX1RJTUVfU1RBVFNfVVNJTkdfRVNQX1RJTUVSDQorICAgICNpZmRlZiBDT05GSUdfRlJFRVJUT1NfUlVOX1RJTUVfU1RBVFNfVVNJTkdfRVNQX1RJTUVSDQogLyogQ29hcnNlIHJlc29sdXRpb24gdGltZSAodXMpICovDQotICAgICAgICAgICAgI2RlZmluZSBwb3J0QUxUX0dFVF9SVU5fVElNRV9DT1VOVEVSX1ZBTFVFKCB4ICkgICAgeCA9ICggdWludDMyX3QgKSBlc3BfdGltZXJfZ2V0X3RpbWUoKQ0KLSAgICAgICAgI2VuZGlmDQorICAgICAgICAjZGVmaW5lIHBvcnRBTFRfR0VUX1JVTl9USU1FX0NPVU5URVJfVkFMVUUoIHggKSAgICB4ID0gKCB1aW50MzJfdCApIGVzcF90aW1lcl9nZXRfdGltZSgpDQorICAgICNlbmRpZg0KIA0KIA0KIA0KIC8qIEtlcm5lbCB1dGlsaXRpZXMuICovDQotICAgICAgICB2b2lkIHZQb3J0WWllbGQoIHZvaWQgKTsNCi0gICAgICAgIHZvaWQgX2ZyeHRfc2V0dXBfc3dpdGNoKCB2b2lkICk7DQotICAgICAgICAjZGVmaW5lIHBvcnRZSUVMRCgpICAgICAgICAgICAgIHZQb3J0WWllbGQoKQ0KLSAgICAgICAgI2RlZmluZSBwb3J0WUlFTERfRlJPTV9JU1IoKSAgICB7IHRyYWNlSVNSX0VYSVRfVE9fU0NIRURVTEVSKCk7IF9mcnh0X3NldHVwX3N3aXRjaCgpOyB9DQorICAgIHZvaWQgdlBvcnRZaWVsZCggdm9pZCApOw0KKyAgICB2b2lkIF9mcnh0X3NldHVwX3N3aXRjaCggdm9pZCApOw0KKyAgICAjZGVmaW5lIHBvcnRZSUVMRCgpICAgICAgICAgICAgIHZQb3J0WWllbGQoKQ0KKyAgICAjZGVmaW5lIHBvcnRZSUVMRF9GUk9NX0lTUigpICAgIHsgdHJhY2VJU1JfRVhJVF9UT19TQ0hFRFVMRVIoKTsgX2ZyeHRfc2V0dXBfc3dpdGNoKCk7IH0NCiANCi0gICAgICAgIHN0YXRpYyBpbmxpbmUgdWludDMyX3QgeFBvcnRHZXRDb3JlSUQoKTsNCisgICAgc3RhdGljIGlubGluZSB1aW50MzJfdCB4UG9ydEdldENvcmVJRCgpOw0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAqLw0KLSAgICAgICAgI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQotICAgICAgICAjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgICAgICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCisgICAgI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQorICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgICAgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KIA0KIC8qIFdoZW4gY29wcm9jZXNzb3JzIGFyZSBkZWZpbmVkLCB3ZSB0byBtYWludGFpbiBhIHBvaW50ZXIgdG8gY29wcm9jZXNzb3JzIGFyZWEuICovDQogLyogV2UgY3VycmVudGx5IHVzZSBhIGhhY2s6IHJlZGVmaW5lIGZpZWxkIHhNUFVfU0VUVElOR1MgaW4gVENCIGJsb2NrIGFzIGEgc3RydWN0dXJlIHRoYXQgY2FuIGhvbGQ6ICovDQogLyogTVBVIHdyYXBwZXJzLCBjb3Byb2Nlc3NvciBhcmVhIHBvaW50ZXIsIHRyYWNlIGNvZGUgc3RydWN0dXJlLCBhbmQgbW9yZSBpZiBuZWVkZWQuICovDQogLyogVGhlIGZpZWxkIGlzIG5vcm1hbGx5IHVzZWQgZm9yIG1lbW9yeSBwcm90ZWN0aW9uLiBGcmVlUlRPUyBzaG91bGQgY3JlYXRlIGFub3RoZXIgZ2VuZXJhbCBwdXJwb3NlIGZpZWxkLiAqLw0KLSAgICAgICAgdHlwZWRlZiBzdHJ1Y3QNCi0gICAgICAgIHsNCi0gICAgICAgICAgICAjaWYgWENIQUxfQ1BfTlVNID4gMA0KLSAgICAgICAgICAgICAgICB2b2xhdGlsZSBTdGFja1R5cGVfdCAqIGNvcHJvY19hcmVhOyAvKiBQb2ludGVyIHRvIGNvcHJvY2Vzc29yIHNhdmUgYXJlYTsgTVVTVCBCRSBGSVJTVCAqLw0KLSAgICAgICAgICAgICNlbmRpZg0KLQ0KLSAgICAgICAgICAgICNpZiBwb3J0VVNJTkdfTVBVX1dSQVBQRVJTDQotICAgICAgICAgICAgICAgIC8qIERlZmluZSBoZXJlIG1wdV9zZXR0aW5ncywgd2hpY2ggaXMgcG9ydCBkZXBlbmRlbnQgKi8NCi0gICAgICAgICAgICAgICAgaW50IG1wdV9zZXR0aW5nOyAvKiBKdXN0IGEgZHVtbXkgZXhhbXBsZSBoZXJlOyBNUFUgbm90IHBvcnRlZCB0byBYdGVuc2EgeWV0ICovDQotICAgICAgICAgICAgI2VuZGlmDQotDQotICAgICAgICAgICAgI2lmIGNvbmZpZ1VTRV9UUkFDRV9GQUNJTElUWV8yDQotICAgICAgICAgICAgICAgIHN0cnVjdA0KLSAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAvKiBDZi4gcG9ydHRyYWNlU3RhbXAoKSAqLw0KLSAgICAgICAgICAgICAgICAgICAgaW50IHRhc2tzdGFtcDsgICAgICAvKiBTdGFtcCBmcm9tIGluc2lkZSB0YXNrIHRvIHNlZSB3aGVyZSB3ZSBhcmUgKi8NCi0gICAgICAgICAgICAgICAgICAgIGludCB0YXNrc3RhbXBjb3VudDsgLyogQSBjb3VudGVyIHVzdWFsbHkgaW5jcmVtZW50ZWQgd2hlbiB3ZSByZXN0YXJ0IHRoZSB0YXNrJ3MgbG9vcCAqLw0KLSAgICAgICAgICAgICAgICB9IHBvcnR0cmFjZTsNCi0gICAgICAgICAgICAjZW5kaWYNCi0gICAgICAgIH0geE1QVV9TRVRUSU5HUzsNCi0NCi0vKiBNYWluIGhhY2sgdG8gdXNlIE1QVV93cmFwcGVycyBldmVuIHdoZW4gbm8gTVBVIGlzIGRlZmluZWQgKHdhcm5pbmc6IG1wdV9zZXR0aW5nIHNob3VsZCBub3QgYmUgYWNjZXNzZWQ7IG90aGVyd2lzZSBtb3ZlIHRoaXMgYWJvdmUgeE1QVV9TRVRUSU5HUykgKi8NCi0gICAgICAgICNpZiAoIFhDSEFMX0NQX05VTSA+IDAgfHwgY29uZmlnVVNFX1RSQUNFX0ZBQ0lMSVRZXzIgKSAmJiAhcG9ydFVTSU5HX01QVV9XUkFQUEVSUyAvKiBJZiBNUFUgd3JhcHBlcnMgbm90IHVzZWQsIHdlIHN0aWxsIG5lZWQgdG8gYWxsb2NhdGUgY29wcm9jIGFyZWEgKi8NCi0gICAgICAgICAgICAjdW5kZWYgcG9ydFVTSU5HX01QVV9XUkFQUEVSUw0KLSAgICAgICAgICAgICNkZWZpbmUgcG9ydFVTSU5HX01QVV9XUkFQUEVSUyAgICAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuYWJsZSBpdCB0byBhbGxvY2F0ZSBjb3Byb2MgYXJlYSAqLw0KLSAgICAgICAgICAgICNkZWZpbmUgTVBVX1dSQVBQRVJTX0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE92ZXJyaWRlIG1wdV93cmFwcGVyLmggdG8gZGlzYWJsZSB1bndhbnRlZCBjb2RlICovDQotICAgICAgICAgICAgI2RlZmluZSBQUklWSUxFR0VEX0ZVTkNUSU9ODQotICAgICAgICAgICAgI2RlZmluZSBQUklWSUxFR0VEX0RBVEENCisgICAgdHlwZWRlZiBzdHJ1Y3QNCisgICAgew0KKyAgICAgICAgI2lmIFhDSEFMX0NQX05VTSA+IDANCisgICAgICAgICAgICB2b2xhdGlsZSBTdGFja1R5cGVfdCAqIGNvcHJvY19hcmVhOyAvKiBQb2ludGVyIHRvIGNvcHJvY2Vzc29yIHNhdmUgYXJlYTsgTVVTVCBCRSBGSVJTVCAqLw0KICAgICAgICAgI2VuZGlmDQogDQotICAgICAgICBib29sIHZBcHBsaWNhdGlvblNsZWVwKCBUaWNrVHlwZV90IHhFeHBlY3RlZElkbGVUaW1lICk7DQorICAgICAgICAjaWYgcG9ydFVTSU5HX01QVV9XUkFQUEVSUw0KKyAgICAgICAgICAgIC8qIERlZmluZSBoZXJlIG1wdV9zZXR0aW5ncywgd2hpY2ggaXMgcG9ydCBkZXBlbmRlbnQgKi8NCisgICAgICAgICAgICBpbnQgbXB1X3NldHRpbmc7IC8qIEp1c3QgYSBkdW1teSBleGFtcGxlIGhlcmU7IE1QVSBub3QgcG9ydGVkIHRvIFh0ZW5zYSB5ZXQgKi8NCisgICAgICAgICNlbmRpZg0KIA0KLSAgICAgICAgI2RlZmluZSBwb3J0U1VQUFJFU1NfVElDS1NfQU5EX1NMRUVQKCBpZGxlVGltZSApICAgIHZBcHBsaWNhdGlvblNsZWVwKCBpZGxlVGltZSApDQorICAgICAgICAjaWYgY29uZmlnVVNFX1RSQUNFX0ZBQ0lMSVRZXzINCisgICAgICAgICAgICBzdHJ1Y3QNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIC8qIENmLiBwb3J0dHJhY2VTdGFtcCgpICovDQorICAgICAgICAgICAgICAgIGludCB0YXNrc3RhbXA7ICAgICAgLyogU3RhbXAgZnJvbSBpbnNpZGUgdGFzayB0byBzZWUgd2hlcmUgd2UgYXJlICovDQorICAgICAgICAgICAgICAgIGludCB0YXNrc3RhbXBjb3VudDsgLyogQSBjb3VudGVyIHVzdWFsbHkgaW5jcmVtZW50ZWQgd2hlbiB3ZSByZXN0YXJ0IHRoZSB0YXNrJ3MgbG9vcCAqLw0KKyAgICAgICAgICAgIH0gcG9ydHRyYWNlOw0KKyAgICAgICAgI2VuZGlmDQorICAgIH0geE1QVV9TRVRUSU5HUzsNCisNCisvKiBNYWluIGhhY2sgdG8gdXNlIE1QVV93cmFwcGVycyBldmVuIHdoZW4gbm8gTVBVIGlzIGRlZmluZWQgKHdhcm5pbmc6IG1wdV9zZXR0aW5nIHNob3VsZCBub3QgYmUgYWNjZXNzZWQ7IG90aGVyd2lzZSBtb3ZlIHRoaXMgYWJvdmUgeE1QVV9TRVRUSU5HUykgKi8NCisgICAgI2lmICggWENIQUxfQ1BfTlVNID4gMCB8fCBjb25maWdVU0VfVFJBQ0VfRkFDSUxJVFlfMiApICYmICFwb3J0VVNJTkdfTVBVX1dSQVBQRVJTIC8qIElmIE1QVSB3cmFwcGVycyBub3QgdXNlZCwgd2Ugc3RpbGwgbmVlZCB0byBhbGxvY2F0ZSBjb3Byb2MgYXJlYSAqLw0KKyAgICAgICAgI3VuZGVmIHBvcnRVU0lOR19NUFVfV1JBUFBFUlMNCisgICAgICAgICNkZWZpbmUgcG9ydFVTSU5HX01QVV9XUkFQUEVSUyAgICAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuYWJsZSBpdCB0byBhbGxvY2F0ZSBjb3Byb2MgYXJlYSAqLw0KKyAgICAgICAgI2RlZmluZSBNUFVfV1JBUFBFUlNfSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT3ZlcnJpZGUgbXB1X3dyYXBwZXIuaCB0byBkaXNhYmxlIHVud2FudGVkIGNvZGUgKi8NCisgICAgICAgICNkZWZpbmUgUFJJVklMRUdFRF9GVU5DVElPTg0KKyAgICAgICAgI2RlZmluZSBQUklWSUxFR0VEX0RBVEENCisgICAgI2VuZGlmDQorDQorICAgIGJvb2wgdkFwcGxpY2F0aW9uU2xlZXAoIFRpY2tUeXBlX3QgeEV4cGVjdGVkSWRsZVRpbWUgKTsNCisNCisgICAgI2RlZmluZSBwb3J0U1VQUFJFU1NfVElDS1NfQU5EX1NMRUVQKCBpZGxlVGltZSApICAgIHZBcHBsaWNhdGlvblNsZWVwKCBpZGxlVGltZSApDQogDQogDQogDQotICAgICAgICB2b2lkIF94dF9jb3Byb2NfcmVsZWFzZSggdm9sYXRpbGUgdm9pZCAqIGNvcHJvY19zYV9iYXNlICk7DQorICAgIHZvaWQgX3h0X2NvcHJvY19yZWxlYXNlKCB2b2xhdGlsZSB2b2lkICogY29wcm9jX3NhX2Jhc2UgKTsNCiANCiANCiAvKg0KQEAgLTQyMiwyOSArNDI0LDI5IEBACiAgKiBub24tRnJlZVJUT1Mtc3BlY2lmaWMgY29kZSwgYW5kIGJlaGF2ZSB0aGUgc2FtZSBhcw0KICAqIHB2UG9ydE1hbGxvYygpL3ZQb3J0RnJlZSgpLg0KICAqLw0KLSAgICAgICAgI2RlZmluZSBwdlBvcnRNYWxsb2MgICAgICAgICAgICAgICAgICAgICAgIGhlYXBfY2Fwc19tYWxsb2NfZGVmYXVsdA0KLSAgICAgICAgI2RlZmluZSB2UG9ydEZyZWUgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYXBfY2Fwc19mcmVlDQotICAgICAgICAjZGVmaW5lIHhQb3J0R2V0RnJlZUhlYXBTaXplICAgICAgICAgICAgICAgZXNwX2dldF9mcmVlX2hlYXBfc2l6ZQ0KLSAgICAgICAgI2RlZmluZSB4UG9ydEdldE1pbmltdW1FdmVyRnJlZUhlYXBTaXplICAgIGVzcF9nZXRfbWluaW11bV9mcmVlX2hlYXBfc2l6ZQ0KKyAgICAjZGVmaW5lIHB2UG9ydE1hbGxvYyAgICAgICAgICAgICAgICAgICAgICAgaGVhcF9jYXBzX21hbGxvY19kZWZhdWx0DQorICAgICNkZWZpbmUgdlBvcnRGcmVlICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFwX2NhcHNfZnJlZQ0KKyAgICAjZGVmaW5lIHhQb3J0R2V0RnJlZUhlYXBTaXplICAgICAgICAgICAgICAgZXNwX2dldF9mcmVlX2hlYXBfc2l6ZQ0KKyAgICAjZGVmaW5lIHhQb3J0R2V0TWluaW11bUV2ZXJGcmVlSGVhcFNpemUgICAgZXNwX2dldF9taW5pbXVtX2ZyZWVfaGVhcF9zaXplDQogDQogDQogLyoNCiAgKiBDYWxsYmFjayB0byBzZXQgYSB3YXRjaHBvaW50IG9uIHRoZSBlbmQgb2YgdGhlIHN0YWNrLiBDYWxsZWQgZXZlcnkgY29udGV4dCBzd2l0Y2ggdG8gY2hhbmdlIHRoZSBzdGFjaw0KICAqIHdhdGNocG9pbnQgYXJvdW5kLg0KICAqLw0KLSAgICAgICAgdm9pZCB2UG9ydFNldFN0YWNrV2F0Y2hwb2ludCggdm9pZCAqIHB4U3RhY2tTdGFydCApOw0KKyAgICB2b2lkIHZQb3J0U2V0U3RhY2tXYXRjaHBvaW50KCB2b2lkICogcHhTdGFja1N0YXJ0ICk7DQogDQogLyoNCiAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGN1cnJlbnQgY29yZSBpcyBpbiBJU1IgY29udGV4dDsgbG93IHByaW8gSVNSLCBtZWQgcHJpbyBJU1Igb3IgdGltZXIgdGljayBJU1IuIEhpZ2ggcHJpbyBJU1JzDQogICogYXJlbid0IGRldGVjdGVkIGhlcmUsIGJ1dCB0aGV5IG5vcm1hbGx5IGNhbm5vdCBjYWxsIEMgY29kZSwgc28gdGhhdCBzaG91bGQgbm90IGJlIGFuIGlzc3VlIGFueXdheS4NCiAgKi8NCi0gICAgICAgIEJhc2VUeXBlX3QgeFBvcnRJbklzckNvbnRleHQoKTsNCisgICAgQmFzZVR5cGVfdCB4UG9ydEluSXNyQ29udGV4dCgpOw0KIA0KIC8qDQogICogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBpbiBIaWdoIHByaW8gSVNScy4gUmV0dXJucyB0cnVlIGlmIHRoZSBjdXJyZW50IGNvcmUgd2FzIGluIElTUiBjb250ZXh0DQogICogYmVmb3JlIGNhbGxpbmcgaW50byBoaWdoIHByaW8gSVNSIGNvbnRleHQuDQogICovDQotICAgICAgICBCYXNlVHlwZV90IHhQb3J0SW50ZXJydXB0ZWRGcm9tSVNSQ29udGV4dCgpOw0KKyAgICBCYXNlVHlwZV90IHhQb3J0SW50ZXJydXB0ZWRGcm9tSVNSQ29udGV4dCgpOw0KIA0KIC8qDQogICogVGhlIHN0cnVjdHVyZXMgYW5kIG1ldGhvZHMgb2YgbWFuaXB1bGF0aW5nIHRoZSBNUFUgYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhlDQpAQCAtNDUzLDQ2ICs0NTUsNDggQEAKICAqIEZpbGxzIHRoZSB4TVBVU2V0dGluZ3Mgc3RydWN0dXJlIHdpdGggdGhlIG1lbW9yeSByZWdpb24gaW5mb3JtYXRpb24NCiAgKiBjb250YWluZWQgaW4geFJlZ2lvbnMuDQogICovDQotICAgICAgICAjaWYgKCBwb3J0VVNJTkdfTVBVX1dSQVBQRVJTID09IDEgKQ0KLSAgICAgICAgICAgIHN0cnVjdCB4TUVNT1JZX1JFR0lPTjsNCi0gICAgICAgICAgICB2b2lkIHZQb3J0U3RvcmVUYXNrTVBVU2V0dGluZ3MoIHhNUFVfU0VUVElOR1MgKiB4TVBVU2V0dGluZ3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgeE1FTU9SWV9SRUdJT04gKiBjb25zdCB4UmVnaW9ucywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrVHlwZV90ICogcHhCb3R0b21PZlN0YWNrLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdXNTdGFja0RlcHRoICkgUFJJVklMRUdFRF9GVU5DVElPTjsNCi0gICAgICAgICAgICB2b2lkIHZQb3J0UmVsZWFzZVRhc2tNUFVTZXR0aW5ncyggeE1QVV9TRVRUSU5HUyAqIHhNUFVTZXR0aW5ncyApOw0KLSAgICAgICAgI2VuZGlmDQorICAgICNpZiAoIHBvcnRVU0lOR19NUFVfV1JBUFBFUlMgPT0gMSApDQorICAgICAgICBzdHJ1Y3QgeE1FTU9SWV9SRUdJT047DQorICAgICAgICB2b2lkIHZQb3J0U3RvcmVUYXNrTVBVU2V0dGluZ3MoIHhNUFVfU0VUVElOR1MgKiB4TVBVU2V0dGluZ3MsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB4TUVNT1JZX1JFR0lPTiAqIGNvbnN0IHhSZWdpb25zLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFja1R5cGVfdCAqIHB4Qm90dG9tT2ZTdGFjaywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdXNTdGFja0RlcHRoICkgUFJJVklMRUdFRF9GVU5DVElPTjsNCisgICAgICAgIHZvaWQgdlBvcnRSZWxlYXNlVGFza01QVVNldHRpbmdzKCB4TVBVX1NFVFRJTkdTICogeE1QVVNldHRpbmdzICk7DQorICAgICNlbmRpZg0KIA0KIC8qIE11bHRpLWNvcmU6IGdldCBjdXJyZW50IGNvcmUgSUQgKi8NCi0gICAgICAgIHN0YXRpYyBpbmxpbmUgdWludDMyX3QgSVJBTV9BVFRSIHhQb3J0R2V0Q29yZUlEKCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBpbnQgaWQ7DQorICAgIHN0YXRpYyBpbmxpbmUgdWludDMyX3QgSVJBTV9BVFRSIHhQb3J0R2V0Q29yZUlEKCkNCisgICAgew0KKyAgICAgICAgaW50IGlkOw0KIA0KLSAgICAgICAgICAgIGFzbSAoDQotICAgICAgICAgICAgICAgICJyc3IucHJpZCAlMFxuIg0KLSAgICAgICAgICAgICAgICAiIGV4dHVpICUwLCUwLDEzLDEiDQotICAgICAgICAgICAgICAgIDogIj1yIiAoIGlkICkgKTsNCi0gICAgICAgICAgICByZXR1cm4gaWQ7DQotICAgICAgICB9DQorICAgICAgICBhc20gKA0KKyAgICAgICAgICAgICJyc3IucHJpZCAlMFxuIg0KKyAgICAgICAgICAgICIgZXh0dWkgJTAsJTAsMTMsMSINCisgICAgICAgICAgICA6ICI9ciIgKCBpZCApICk7DQorICAgICAgICByZXR1cm4gaWQ7DQorICAgIH0NCiANCiAvKiBHZXQgdGljayByYXRlIHBlciBzZWNvbmQgKi8NCi0gICAgICAgIHVpbnQzMl90IHhQb3J0R2V0VGlja1JhdGVIeiggdm9pZCApOw0KKyAgICB1aW50MzJfdCB4UG9ydEdldFRpY2tSYXRlSHooIHZvaWQgKTsNCiANCiAvKiBwb3J0dHJhY2UgKi8NCi0gICAgICAgICNpZiBjb25maWdVU0VfVFJBQ0VfRkFDSUxJVFlfMg0KLSAgICAgICAgICAgICNpbmNsdWRlICJwb3J0dHJhY2UuaCINCi0gICAgICAgICNlbmRpZg0KKyAgICAjaWYgY29uZmlnVVNFX1RSQUNFX0ZBQ0lMSVRZXzINCisgICAgICAgICNpbmNsdWRlICJwb3J0dHJhY2UuaCINCisgICAgI2VuZGlmDQogDQogLyogY29uZmlnQVNTRVJUXzIgaWYgcmVxdWVzdGVkICovDQotICAgICAgICAjaWYgY29uZmlnQVNTRVJUXzINCi0gICAgICAgICAgICAjaW5jbHVkZSA8c3RkaW8uaD4NCi0gICAgICAgICAgICB2b2lkIGV4aXQoIGludCApOw0KLSAgICAgICAgICAgICNkZWZpbmUgY29uZmlnQVNTRVJUKCB4ICkgICAgaWYoICEoIHggKSApIHsgcG9ydHRyYWNlUHJpbnQoIC0xICk7IHByaW50ZiggIlxuQXNzZXJ0aW9uIGZhaWxlZCBpbiAlczolZFxuIiwgX19GSUxFX18sIF9fTElORV9fICk7IGV4aXQoIC0xICk7IH0NCi0gICAgICAgICNlbmRpZg0KLQ0KLSAgICAjZW5kaWYgLy8gX19BU1NFTUJMRVJfXw0KLQ0KLSAgICAjaWZkZWYgX19jcGx1c3BsdXMNCi0gICAgICAgIH0NCisgICAgI2lmIGNvbmZpZ0FTU0VSVF8yDQorICAgICAgICAjaW5jbHVkZSA8c3RkaW8uaD4NCisgICAgICAgIHZvaWQgZXhpdCggaW50ICk7DQorICAgICAgICAjZGVmaW5lIGNvbmZpZ0FTU0VSVCggeCApICAgIGlmKCAhKCB4ICkgKSB7IHBvcnR0cmFjZVByaW50KCAtMSApOyBwcmludGYoICJcbkFzc2VydGlvbiBmYWlsZWQgaW4gJXM6JWRcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyApOyBleGl0KCAtMSApOyB9DQogICAgICNlbmRpZg0KIA0KKyNlbmRpZiAvLyBfX0FTU0VNQkxFUl9fDQorDQorLyogKklOREVOVC1PRkYqICovDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorICAgIH0NCisjZW5kaWYNCisvKiAqSU5ERU5ULU9OKiAqLw0KKw0KICNlbmRpZiAvKiBQT1JUTUFDUk9fSCAqLw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL1RoaXJkUGFydHkvR0NDL1h0ZW5zYV9FU1AzMi9wb3J0LmMgYi9wb3J0YWJsZS9UaGlyZFBhcnR5L0dDQy9YdGVuc2FfRVNQMzIvcG9ydC5jCmluZGV4IDQxNGRiZmQuLjcwYmNjZjEgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL1RoaXJkUGFydHkvR0NDL1h0ZW5zYV9FU1AzMi9wb3J0LmMKKysrIGIvcG9ydGFibGUvVGhpcmRQYXJ0eS9HQ0MvWHRlbnNhX0VTUDMyL3BvcnQuYwpAQCAtMTU0LDYgKzE1NCw3IEBACiAvKg0KICAqIFN0YWNrIGluaXRpYWxpemF0aW9uDQogICovDQorLyogKklOREVOVC1PRkYqICovDQogI2lmIHBvcnRVU0lOR19NUFVfV1JBUFBFUlMNCiAgICAgU3RhY2tUeXBlX3QgKiBweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICogcHhUb3BPZlN0YWNrLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFza0Z1bmN0aW9uX3QgcHhDb2RlLA0KQEAgLTE2NCw2ICsxNjUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYXNrRnVuY3Rpb25fdCBweENvZGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICogcHZQYXJhbWV0ZXJzICkNCiAjZW5kaWYNCisvKiAqSU5ERU5ULU9OKiAqLw0KIHsNCiAgICAgU3RhY2tUeXBlX3QgKiBzcCwgKiB0cDsNCiAgICAgWHRFeGNGcmFtZSAqIGZyYW1lOw0KQEAgLTQwOSw3ICs0MTEsNyBAQAogICAgICAgICByZXR1cm4gcmVzdWx0Ow0KICAgICB9DQogDQotI2Vsc2UgIC8qIGlmZGVmIENPTkZJR19GUkVFUlRPU19QT1JUTVVYX0RFQlVHICovDQorI2Vsc2UgLyogaWZkZWYgQ09ORklHX0ZSRUVSVE9TX1BPUlRNVVhfREVCVUcgKi8NCiAgICAgdm9pZCB2UG9ydENQVUFjcXVpcmVNdXRleCggcG9ydE1VWF9UWVBFICogbXV4ICkNCiAgICAgew0KICAgICAgICAgdW5zaWduZWQgaW50IGlycVN0YXR1cyA9IHBvcnRFTlRFUl9DUklUSUNBTF9ORVNURUQoKTsNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9UaGlyZFBhcnR5L0dDQy9YdGVuc2FfRVNQMzIveHRlbnNhX2luaXQuYyBiL3BvcnRhYmxlL1RoaXJkUGFydHkvR0NDL1h0ZW5zYV9FU1AzMi94dGVuc2FfaW5pdC5jCmluZGV4IDJiZjFkYTcuLjYzNzg5OTUgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL1RoaXJkUGFydHkvR0NDL1h0ZW5zYV9FU1AzMi94dGVuc2FfaW5pdC5jCisrKyBiL3BvcnRhYmxlL1RoaXJkUGFydHkvR0NDL1h0ZW5zYV9FU1AzMi94dGVuc2FfaW5pdC5jCkBAIC0zNSw5ICszNSw5IEBACiANCiAjaW5jbHVkZSAgICAieHRlbnNhX3J0b3MuaCINCiAjaWYgQ09ORklHX0lERl9UQVJHRVRfRVNQMzJTMg0KLSNpbmNsdWRlICAgICJlc3AzMnMyL2Nsay5oIg0KKyAgICAjaW5jbHVkZSAgICAiZXNwMzJzMi9jbGsuaCINCiAjZWxpZiBDT05GSUdfSURGX1RBUkdFVF9FU1AzMg0KLSNpbmNsdWRlICAgICJlc3AzMi9jbGsuaCINCisgICAgI2luY2x1ZGUgICAgImVzcDMyL2Nsay5oIg0KICNlbmRpZg0KIA0KICNpZmRlZiBYVF9SVE9TX1RJTUVSX0lOVA0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL1RoaXJkUGFydHkvR0NDL1h0ZW5zYV9FU1AzMi94dGVuc2FfaW50ci5jIGIvcG9ydGFibGUvVGhpcmRQYXJ0eS9HQ0MvWHRlbnNhX0VTUDMyL3h0ZW5zYV9pbnRyLmMKaW5kZXggOTNlNDE2MC4uOGUxNDY1ZCAxMDA2NDQKLS0tIGEvcG9ydGFibGUvVGhpcmRQYXJ0eS9HQ0MvWHRlbnNhX0VTUDMyL3h0ZW5zYV9pbnRyLmMKKysrIGIvcG9ydGFibGUvVGhpcmRQYXJ0eS9HQ0MvWHRlbnNhX0VTUDMyL3h0ZW5zYV9pbnRyLmMKQEAgLTM1LDkgKzM1LDkgQEAKICNpbmNsdWRlICJmcmVlcnRvcy9wb3J0YWJsZS5oIg0KIA0KICNpZiBDT05GSUdfSURGX1RBUkdFVF9FU1AzMlMyDQotI2luY2x1ZGUgImVzcDMyczIvcm9tL2V0c19zeXMuaCINCisgICAgI2luY2x1ZGUgImVzcDMyczIvcm9tL2V0c19zeXMuaCINCiAjZWxpZiBDT05GSUdfSURGX1RBUkdFVF9FU1AzMg0KLSNpbmNsdWRlICJlc3AzMi9yb20vZXRzX3N5cy5oIg0KKyAgICAjaW5jbHVkZSAiZXNwMzIvcm9tL2V0c19zeXMuaCINCiAjZW5kaWYNCiANCiAjaWYgWENIQUxfSEFWRV9FWENFUFRJT05TDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvVGhpcmRQYXJ0eS9YQ0MvWHRlbnNhL3BvcnQuYyBiL3BvcnRhYmxlL1RoaXJkUGFydHkvWENDL1h0ZW5zYS9wb3J0LmMKaW5kZXggMTQxMjYzOS4uYzE2ZGZlZCAxMDA2NDQKLS0tIGEvcG9ydGFibGUvVGhpcmRQYXJ0eS9YQ0MvWHRlbnNhL3BvcnQuYworKysgYi9wb3J0YWJsZS9UaGlyZFBhcnR5L1hDQy9YdGVuc2EvcG9ydC5jCkBAIC0xLDMgKzEsNCBAQAorDQogLyoNCiAgKiBGcmVlUlRPUyBLZXJuZWwgVjEwLjAuMA0KICAqIENvcHlyaWdodCAoQykgMjAxNyBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCkBAIC01OSwxNTUgKzYwLDE0NiBAQAogDQogDQogLyogRGVmaW5lZCBpbiBwb3J0YXNtLmggKi8NCi1leHRlcm4gdm9pZCBfZnJ4dF90aWNrX3RpbWVyX2luaXQoIHZvaWQgKTsNCitleHRlcm4gdm9pZCBfZnJ4dF90aWNrX3RpbWVyX2luaXQodm9pZCk7DQogDQogLyogRGVmaW5lZCBpbiB4dGVuc2FfY29udGV4dC5TICovDQotZXh0ZXJuIHZvaWQgX3h0X2NvcHJvY19pbml0KCB2b2lkICk7DQorZXh0ZXJuIHZvaWQgX3h0X2NvcHJvY19pbml0KHZvaWQpOw0KIA0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFdlIHJlcXVpcmUgdGhlIGFkZHJlc3Mgb2YgdGhlIHB4Q3VycmVudFRDQiB2YXJpYWJsZSwgYnV0IGRvbid0IHdhbnQgdG8ga25vdw0KLSAqIGFueSBkZXRhaWxzIG9mIGl0cyB0eXBlLiAqLw0KK2FueSBkZXRhaWxzIG9mIGl0cyB0eXBlLiAqLw0KIHR5cGVkZWYgdm9pZCBUQ0JfdDsNCiBleHRlcm4gdm9sYXRpbGUgVENCX3QgKiB2b2xhdGlsZSBweEN1cnJlbnRUQ0I7DQogDQotdW5zaWduZWQgcG9ydF94U2NoZWR1bGVyUnVubmluZyA9IDA7IC8qIER1cGxpY2F0ZSBvZiBpbmFjY2Vzc2libGUgeFNjaGVkdWxlclJ1bm5pbmc7IG5lZWRlZCBhdCBzdGFydHVwIHRvIGF2b2lkIGNvdW50aW5nIG5lc3RpbmcgKi8NCi11bnNpZ25lZCBwb3J0X2ludGVycnVwdE5lc3RpbmcgPSAwOyAgLyogSW50ZXJydXB0IG5lc3RpbmcgbGV2ZWwgKi8NCit1bnNpZ25lZCBwb3J0X3hTY2hlZHVsZXJSdW5uaW5nID0gMDsgLy8gRHVwbGljYXRlIG9mIGluYWNjZXNzaWJsZSB4U2NoZWR1bGVyUnVubmluZzsgbmVlZGVkIGF0IHN0YXJ0dXAgdG8gYXZvaWQgY291bnRpbmcgbmVzdGluZw0KK3Vuc2lnbmVkIHBvcnRfaW50ZXJydXB0TmVzdGluZyA9IDA7ICAvLyBJbnRlcnJ1cHQgbmVzdGluZyBsZXZlbA0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KLS8qIFVzZXIgZXhjZXB0aW9uIGRpc3BhdGNoZXIgd2hlbiBleGl0aW5nICovDQotdm9pZCBfeHRfdXNlcl9leGl0KCB2b2lkICk7DQorLy8gVXNlciBleGNlcHRpb24gZGlzcGF0Y2hlciB3aGVuIGV4aXRpbmcNCit2b2lkIF94dF91c2VyX2V4aXQodm9pZCk7DQogDQotLyoNCisvKiANCiAgKiBTdGFjayBpbml0aWFsaXphdGlvbg0KICAqLw0KICNpZiBwb3J0VVNJTkdfTVBVX1dSQVBQRVJTDQotICAgIFN0YWNrVHlwZV90ICogcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqIHB4VG9wT2ZTdGFjaywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiBwdlBhcmFtZXRlcnMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYXNlVHlwZV90IHhSdW5Qcml2aWxlZ2VkICkNCitTdGFja1R5cGVfdCAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqcHhUb3BPZlN0YWNrLCBUYXNrRnVuY3Rpb25fdCBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycywgQmFzZVR5cGVfdCB4UnVuUHJpdmlsZWdlZCApDQogI2Vsc2UNCi0gICAgU3RhY2tUeXBlX3QgKiBweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICogcHhUb3BPZlN0YWNrLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFza0Z1bmN0aW9uX3QgcHhDb2RlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqIHB2UGFyYW1ldGVycyApDQorU3RhY2tUeXBlX3QgKnB4UG9ydEluaXRpYWxpc2VTdGFjayggU3RhY2tUeXBlX3QgKnB4VG9wT2ZTdGFjaywgVGFza0Z1bmN0aW9uX3QgcHhDb2RlLCB2b2lkICpwdlBhcmFtZXRlcnMgKQ0KICNlbmRpZg0KIHsNCi0gICAgU3RhY2tUeXBlX3QgKiBzcCwgKiB0cDsNCi0gICAgWHRFeGNGcmFtZSAqIGZyYW1lOw0KKwlTdGFja1R5cGVfdCAqc3AsICp0cDsNCisJWHRFeGNGcmFtZSAgKmZyYW1lOw0KKwkjaWYgWENIQUxfQ1BfTlVNID4gMA0KKwl1aW50MzJfdCAqcDsNCisJI2VuZGlmDQogDQotICAgICNpZiBYQ0hBTF9DUF9OVU0gPiAwDQotICAgICAgICB1aW50MzJfdCAqIHA7DQotICAgICNlbmRpZg0KKwkvKiBDcmVhdGUgaW50ZXJydXB0IHN0YWNrIGZyYW1lIGFsaWduZWQgdG8gMTYgYnl0ZSBib3VuZGFyeSAqLw0KKwlzcCA9IChTdGFja1R5cGVfdCAqKSAoKChVQmFzZVR5cGVfdCkocHhUb3BPZlN0YWNrICsgMSkgLSBYVF9DUF9TSVpFIC0gWFRfU1RLX0ZSTVNaKSAmIH4weGYpOw0KIA0KLSAgICAvKiBDcmVhdGUgaW50ZXJydXB0IHN0YWNrIGZyYW1lIGFsaWduZWQgdG8gMTYgYnl0ZSBib3VuZGFyeSAqLw0KLSAgICBzcCA9ICggU3RhY2tUeXBlX3QgKiApICggKCAoIFVCYXNlVHlwZV90ICkgKCBweFRvcE9mU3RhY2sgKyAxICkgLSBYVF9DUF9TSVpFIC0gWFRfU1RLX0ZSTVNaICkgJiB+MHhmICk7DQorCS8qIENsZWFyIHRoZSBlbnRpcmUgZnJhbWUgKGRvIG5vdCB1c2UgbWVtc2V0KCkgYmVjYXVzZSB3ZSBkb24ndCBkZXBlbmQgb24gQyBsaWJyYXJ5KSAqLw0KKwlmb3IgKHRwID0gc3A7IHRwIDw9IHB4VG9wT2ZTdGFjazsgKyt0cCkNCisJCSp0cCA9IDA7DQogDQotICAgIC8qIENsZWFyIHRoZSBlbnRpcmUgZnJhbWUgKGRvIG5vdCB1c2UgbWVtc2V0KCkgYmVjYXVzZSB3ZSBkb24ndCBkZXBlbmQgb24gQyBsaWJyYXJ5KSAqLw0KLSAgICBmb3IoIHRwID0gc3A7IHRwIDw9IHB4VG9wT2ZTdGFjazsgKyt0cCApDQotICAgIHsNCi0gICAgICAgICp0cCA9IDA7DQotICAgIH0NCisJZnJhbWUgPSAoWHRFeGNGcmFtZSAqKSBzcDsNCiANCi0gICAgZnJhbWUgPSAoIFh0RXhjRnJhbWUgKiApIHNwOw0KKwkvKiBFeHBsaWNpdGx5IGluaXRpYWxpemUgY2VydGFpbiBzYXZlZCByZWdpc3RlcnMgKi8NCisJZnJhbWUtPnBjICAgPSAoVUJhc2VUeXBlX3QpIHB4Q29kZTsgICAgICAgICAgICAgLyogdGFzayBlbnRyeXBvaW50ICAgICAgICAgICAgICAgICovDQorCWZyYW1lLT5hMCAgID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRvIHRlcm1pbmF0ZSBHREIgYmFja3RyYWNlICAgICAqLw0KKwlmcmFtZS0+YTEgICA9IChVQmFzZVR5cGVfdCkgc3AgKyBYVF9TVEtfRlJNU1o7ICAvKiBwaHlzaWNhbCB0b3Agb2Ygc3RhY2sgZnJhbWUgICAgKi8NCisJZnJhbWUtPmV4aXQgPSAoVUJhc2VUeXBlX3QpIF94dF91c2VyX2V4aXQ7ICAgICAgLyogdXNlciBleGNlcHRpb24gZXhpdCBkaXNwYXRjaGVyICovDQogDQotICAgIC8qIEV4cGxpY2l0bHkgaW5pdGlhbGl6ZSBjZXJ0YWluIHNhdmVkIHJlZ2lzdGVycyAqLw0KLSAgICBmcmFtZS0+cGMgPSAoIFVCYXNlVHlwZV90ICkgcHhDb2RlOyAgICAgICAgICAgICAvKiB0YXNrIGVudHJ5cG9pbnQgICAgICAgICAgICAgICAgKi8NCi0gICAgZnJhbWUtPmEwID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdG8gdGVybWluYXRlIEdEQiBiYWNrdHJhY2UgICAgICovDQotICAgIGZyYW1lLT5hMSA9ICggVUJhc2VUeXBlX3QgKSBzcCArIFhUX1NUS19GUk1TWjsgIC8qIHBoeXNpY2FsIHRvcCBvZiBzdGFjayBmcmFtZSAgICAqLw0KLSAgICBmcmFtZS0+ZXhpdCA9ICggVUJhc2VUeXBlX3QgKSBfeHRfdXNlcl9leGl0OyAgICAvKiB1c2VyIGV4Y2VwdGlvbiBleGl0IGRpc3BhdGNoZXIgKi8NCisJLyogU2V0IGluaXRpYWwgUFMgdG8gaW50IGxldmVsIDAsIEVYQ00gZGlzYWJsZWQgKCdyZmUnIHdpbGwgZW5hYmxlKSwgdXNlciBtb2RlLiAqLw0KKwkvKiBBbHNvIHNldCBlbnRyeSBwb2ludCBhcmd1bWVudCBwYXJhbWV0ZXIuICovDQorCSNpZmRlZiBfX1hURU5TQV9DQUxMMF9BQklfXw0KKwlmcmFtZS0+YTIgPSAoVUJhc2VUeXBlX3QpIHB2UGFyYW1ldGVyczsNCisJZnJhbWUtPnBzID0gUFNfVU0gfCBQU19FWENNOw0KKwkjZWxzZQ0KKwkvKiArIGZvciB3aW5kb3dlZCBBQkkgYWxzbyBzZXQgV09FIGFuZCBDQUxMSU5DIChwcmV0ZW5kIHRhc2sgd2FzICdjYWxsNCdkKS4gKi8NCisJZnJhbWUtPmE2ID0gKFVCYXNlVHlwZV90KSBwdlBhcmFtZXRlcnM7DQorCWZyYW1lLT5wcyA9IFBTX1VNIHwgUFNfRVhDTSB8IFBTX1dPRSB8IFBTX0NBTExJTkMoMSk7DQorCSNlbmRpZg0KIA0KLSAgICAvKiBTZXQgaW5pdGlhbCBQUyB0byBpbnQgbGV2ZWwgMCwgRVhDTSBkaXNhYmxlZCAoJ3JmZScgd2lsbCBlbmFibGUpLCB1c2VyIG1vZGUuICovDQotICAgIC8qIEFsc28gc2V0IGVudHJ5IHBvaW50IGFyZ3VtZW50IHBhcmFtZXRlci4gKi8NCi0gICAgI2lmZGVmIF9fWFRFTlNBX0NBTEwwX0FCSV9fDQotICAgICAgICBmcmFtZS0+YTIgPSAoIFVCYXNlVHlwZV90ICkgcHZQYXJhbWV0ZXJzOw0KLSAgICAgICAgZnJhbWUtPnBzID0gUFNfVU0gfCBQU19FWENNOw0KLSAgICAjZWxzZQ0KLSAgICAgICAgLyogKyBmb3Igd2luZG93ZWQgQUJJIGFsc28gc2V0IFdPRSBhbmQgQ0FMTElOQyAocHJldGVuZCB0YXNrIHdhcyAnY2FsbDQnZCkuICovDQotICAgICAgICBmcmFtZS0+YTYgPSAoIFVCYXNlVHlwZV90ICkgcHZQYXJhbWV0ZXJzOw0KLSAgICAgICAgZnJhbWUtPnBzID0gUFNfVU0gfCBQU19FWENNIHwgUFNfV09FIHwgUFNfQ0FMTElOQyggMSApOw0KLSAgICAjZW5kaWYNCisJI2lmZGVmIFhUX1VTRV9TV1BSSQ0KKwkvKiBTZXQgdGhlIGluaXRpYWwgdmlydHVhbCBwcmlvcml0eSBtYXNrIHZhbHVlIHRvIGFsbCAxJ3MuICovDQorCWZyYW1lLT52cHJpID0gMHhGRkZGRkZGRjsNCisJI2VuZGlmDQogDQotICAgICNpZmRlZiBYVF9VU0VfU1dQUkkNCi0gICAgICAgIC8qIFNldCB0aGUgaW5pdGlhbCB2aXJ0dWFsIHByaW9yaXR5IG1hc2sgdmFsdWUgdG8gYWxsIDEncy4gKi8NCi0gICAgICAgIGZyYW1lLT52cHJpID0gMHhGRkZGRkZGRjsNCi0gICAgI2VuZGlmDQotDQotICAgICNpZiBYQ0hBTF9DUF9OVU0gPiAwDQotICAgICAgICAvKiBJbml0IHRoZSBjb3Byb2Nlc3NvciBzYXZlIGFyZWEgKHNlZSB4dGVuc2FfY29udGV4dC5oKSAqLw0KLQ0KLSAgICAgICAgLyogTm8gYWNjZXNzIHRvIFRDQiBoZXJlLCBzbyBkZXJpdmUgaW5kaXJlY3RseS4gU3RhY2sgZ3Jvd3RoIGlzIHRvcCB0byBib3R0b20uDQorCSNpZiBYQ0hBTF9DUF9OVU0gPiAwDQorCS8qIEluaXQgdGhlIGNvcHJvY2Vzc29yIHNhdmUgYXJlYSAoc2VlIHh0ZW5zYV9jb250ZXh0LmgpICovDQorCS8qIE5vIGFjY2VzcyB0byBUQ0IgaGVyZSwgc28gZGVyaXZlIGluZGlyZWN0bHkuIFN0YWNrIGdyb3d0aCBpcyB0b3AgdG8gYm90dG9tLg0KICAgICAgICAgICogLy9wID0gKHVpbnQzMl90ICopIHhNUFVTZXR0aW5ncy0+Y29wcm9jX2FyZWE7DQotICAgICAgICAgKi8NCi0gICAgICAgIHAgPSAoIHVpbnQzMl90ICogKSAoICggKCB1aW50MzJfdCApIHB4VG9wT2ZTdGFjayAtIFhUX0NQX1NJWkUgKSAmIH4weGYgKTsNCi0gICAgICAgIHBbIDAgXSA9IDA7DQotICAgICAgICBwWyAxIF0gPSAwOw0KLSAgICAgICAgcFsgMiBdID0gKCAoICggdWludDMyX3QgKSBwICkgKyAxMiArIFhDSEFMX1RPVEFMX1NBX0FMSUdOIC0gMSApICYgLVhDSEFMX1RPVEFMX1NBX0FMSUdOOw0KLSAgICAjZW5kaWYNCisJICovDQorCXAgPSAodWludDMyX3QgKikoKCh1aW50MzJfdCkgcHhUb3BPZlN0YWNrIC0gWFRfQ1BfU0laRSkgJiB+MHhmKTsNCisJcFswXSA9IDA7DQorCXBbMV0gPSAwOw0KKwlwWzJdID0gKCgodWludDMyX3QpIHApICsgMTIgKyBYQ0hBTF9UT1RBTF9TQV9BTElHTiAtIDEpICYgLVhDSEFMX1RPVEFMX1NBX0FMSUdOOw0KKwkjZW5kaWYNCiANCi0gICAgcmV0dXJuIHNwOw0KKwlyZXR1cm4gc3A7DQogfQ0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQ0KIHsNCi0gICAgLyogSXQgaXMgdW5saWtlbHkgdGhhdCB0aGUgWHRlbnNhIHBvcnQgd2lsbCBnZXQgc3RvcHBlZC4gIElmIHJlcXVpcmVkIHNpbXBseQ0KLSAgICAgKiBkaXNhYmxlIHRoZSB0aWNrIGludGVycnVwdCBoZXJlLiAqLw0KKwkvKiBJdCBpcyB1bmxpa2VseSB0aGF0IHRoZSBYdGVuc2EgcG9ydCB3aWxsIGdldCBzdG9wcGVkLiAgSWYgcmVxdWlyZWQgc2ltcGx5DQorCWRpc2FibGUgdGhlIHRpY2sgaW50ZXJydXB0IGhlcmUuICovDQogfQ0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIEJhc2VUeXBlX3QgeFBvcnRTdGFydFNjaGVkdWxlciggdm9pZCApDQogew0KLSAgICAvKiBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCBhdCB0aGlzIHBvaW50IGFuZCBzdGFjayBjb250YWlucyBQUyB3aXRoIGVuYWJsZWQgaW50ZXJydXB0cyB3aGVuIHRhc2sgY29udGV4dCBpcyByZXN0b3JlZCAqLw0KKwkvLyBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCBhdCB0aGlzIHBvaW50IGFuZCBzdGFjayBjb250YWlucyBQUyB3aXRoIGVuYWJsZWQgaW50ZXJydXB0cyB3aGVuIHRhc2sgY29udGV4dCBpcyByZXN0b3JlZA0KIA0KLSAgICAjaWYgWENIQUxfQ1BfTlVNID4gMA0KLSAgICAgICAgLyogSW5pdGlhbGl6ZSBjby1wcm9jZXNzb3IgbWFuYWdlbWVudCBmb3IgdGFza3MuIExlYXZlIENQRU5BQkxFIGFsb25lLiAqLw0KLSAgICAgICAgX3h0X2NvcHJvY19pbml0KCk7DQotICAgICNlbmRpZg0KKwkjaWYgWENIQUxfQ1BfTlVNID4gMA0KKwkvKiBJbml0aWFsaXplIGNvLXByb2Nlc3NvciBtYW5hZ2VtZW50IGZvciB0YXNrcy4gTGVhdmUgQ1BFTkFCTEUgYWxvbmUuICovDQorCV94dF9jb3Byb2NfaW5pdCgpOw0KKwkjZW5kaWYNCiANCi0gICAgLyogSW5pdCB0aGUgdGljayBkaXZpc29yIHZhbHVlICovDQotICAgIF94dF90aWNrX2Rpdmlzb3JfaW5pdCgpOw0KKwkvKiBJbml0IHRoZSB0aWNrIGRpdmlzb3IgdmFsdWUgKi8NCisJX3h0X3RpY2tfZGl2aXNvcl9pbml0KCk7DQogDQotICAgIC8qIFNldHVwIHRoZSBoYXJkd2FyZSB0byBnZW5lcmF0ZSB0aGUgdGljay4gKi8NCi0gICAgX2ZyeHRfdGlja190aW1lcl9pbml0KCk7DQorCS8qIFNldHVwIHRoZSBoYXJkd2FyZSB0byBnZW5lcmF0ZSB0aGUgdGljay4gKi8NCisJX2ZyeHRfdGlja190aW1lcl9pbml0KCk7DQogDQotICAgICNpZiBYVF9VU0VfVEhSRUFEX1NBRkVfQ0xJQg0KLSAgICAgICAgLyogSW5pdCBDIGxpYnJhcnkgKi8NCi0gICAgICAgIHZQb3J0Q2xpYkluaXQoKTsNCi0gICAgI2VuZGlmDQorCSNpZiBYVF9VU0VfVEhSRUFEX1NBRkVfQ0xJQg0KKwkvLyBJbml0IEMgbGlicmFyeQ0KKwl2UG9ydENsaWJJbml0KCk7DQorCSNlbmRpZg0KIA0KLSAgICBwb3J0X3hTY2hlZHVsZXJSdW5uaW5nID0gMTsNCisJcG9ydF94U2NoZWR1bGVyUnVubmluZyA9IDE7DQogDQotICAgIC8qIENhbm5vdCBiZSBkaXJlY3RseSBjYWxsZWQgZnJvbSBDOyBuZXZlciByZXR1cm5zICovDQotICAgIF9fYXNtX18gdm9sYXRpbGUgKCAiY2FsbDAgICAgX2ZyeHRfZGlzcGF0Y2hcbiIgKTsNCisJLy8gQ2Fubm90IGJlIGRpcmVjdGx5IGNhbGxlZCBmcm9tIEM7IG5ldmVyIHJldHVybnMNCisJX19hc21fXyB2b2xhdGlsZSAoImNhbGwwICAgIF9mcnh0X2Rpc3BhdGNoXG4iKTsNCiANCi0gICAgLyogU2hvdWxkIG5vdCBnZXQgaGVyZS4gKi8NCi0gICAgcmV0dXJuIHBkVFJVRTsNCisJLyogU2hvdWxkIG5vdCBnZXQgaGVyZS4gKi8NCisJcmV0dXJuIHBkVFJVRTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogQmFzZVR5cGVfdCB4UG9ydFN5c1RpY2tIYW5kbGVyKCB2b2lkICkNCiB7DQotICAgIEJhc2VUeXBlX3QgcmV0Ow0KLSAgICB1aW50MzJfdCBpbnRlcnJ1cHRNYXNrOw0KKwlCYXNlVHlwZV90IHJldDsNCisJdWludDMyX3QgaW50ZXJydXB0TWFzazsNCiANCi0gICAgcG9ydGJlbmNobWFya0ludExhdGVuY3koKTsNCisJcG9ydGJlbmNobWFya0ludExhdGVuY3koKTsNCiANCi0gICAgLyogSW50ZXJydXB0cyB1cHRvIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSBtdXN0IGJlDQotICAgICAqIGRpc2FibGVkIGJlZm9yZSBjYWxsaW5nIHhUYXNrSW5jcmVtZW50VGljayBhcyBpdCBhY2Nlc3MgdGhlDQotICAgICAqIGtlcm5lbCBsaXN0cy4gKi8NCi0gICAgaW50ZXJydXB0TWFzayA9IHBvcnRTRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKTsNCi0gICAgew0KLSAgICAgICAgcmV0ID0geFRhc2tJbmNyZW1lbnRUaWNrKCk7DQotICAgIH0NCi0gICAgcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCBpbnRlcnJ1cHRNYXNrICk7DQorCS8qIEludGVycnVwdHMgdXB0byBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgbXVzdCBiZQ0KKwkgKiBkaXNhYmxlZCBiZWZvcmUgY2FsbGluZyB4VGFza0luY3JlbWVudFRpY2sgYXMgaXQgYWNjZXNzIHRoZQ0KKwkgKiBrZXJuZWwgbGlzdHMuICovDQorCWludGVycnVwdE1hc2sgPSBwb3J0U0VUX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCk7DQorCXsNCisJCXJldCA9IHhUYXNrSW5jcmVtZW50VGljaygpOw0KKwl9DQorCXBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUiggaW50ZXJydXB0TWFzayApOw0KIA0KLSAgICBwb3J0WUlFTERfRlJPTV9JU1IoIHJldCApOw0KKwlwb3J0WUlFTERfRlJPTV9JU1IoIHJldCApOw0KIA0KLSAgICByZXR1cm4gcmV0Ow0KKwlyZXR1cm4gcmV0Ow0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCkBAIC0yMTUsMTggKzIwNywxNiBAQAogICogVXNlZCB0byBzZXQgY29wcm9jZXNzb3IgYXJlYSBpbiBzdGFjay4gQ3VycmVudCBoYWNrIGlzIHRvIHJldXNlIE1QVSBwb2ludGVyIGZvciBjb3Byb2Nlc3NvciBhcmVhLg0KICAqLw0KICNpZiBwb3J0VVNJTkdfTVBVX1dSQVBQRVJTDQotICAgIHZvaWQgdlBvcnRTdG9yZVRhc2tNUFVTZXR0aW5ncyggeE1QVV9TRVRUSU5HUyAqIHhNUFVTZXR0aW5ncywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgeE1FTU9SWV9SRUdJT04gKiBjb25zdCB4UmVnaW9ucywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFja1R5cGVfdCAqIHB4Qm90dG9tT2ZTdGFjaywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1bFN0YWNrRGVwdGggKQ0KLSAgICB7DQotICAgICAgICAjaWYgWENIQUxfQ1BfTlVNID4gMA0KLSAgICAgICAgICAgIHhNUFVTZXR0aW5ncy0+Y29wcm9jX2FyZWEgPSAoIFN0YWNrVHlwZV90ICogKSAoICggKCAoIHVpbnQzMl90ICkgKCBweEJvdHRvbU9mU3RhY2sgKyB1bFN0YWNrRGVwdGggLSAxICkgKSAtIFhUX0NQX1NJWkUgKSAmIH4weGYgKTsNCit2b2lkIHZQb3J0U3RvcmVUYXNrTVBVU2V0dGluZ3MoIHhNUFVfU0VUVElOR1MgKnhNUFVTZXR0aW5ncywgY29uc3Qgc3RydWN0IHhNRU1PUllfUkVHSU9OICogY29uc3QgeFJlZ2lvbnMsIFN0YWNrVHlwZV90ICpweEJvdHRvbU9mU3RhY2ssIHVpbnQzMl90IHVsU3RhY2tEZXB0aCApDQorew0KKwkjaWYgWENIQUxfQ1BfTlVNID4gMA0KKwl4TVBVU2V0dGluZ3MtPmNvcHJvY19hcmVhID0gKFN0YWNrVHlwZV90KikoKCgodWludDMyX3QpKHB4Qm90dG9tT2ZTdGFjayArIHVsU3RhY2tEZXB0aCAtIDEpKSAtIFhUX0NQX1NJWkUgKSAmIH4weGYpOw0KIA0KIA0KLSAgICAgICAgICAgIC8qIE5PVEU6IHdlIGNhbm5vdCBpbml0aWFsaXplIHRoZSBjb3Byb2Nlc3NvciBzYXZlIGFyZWEgaGVyZSBiZWNhdXNlIEZyZWVSVE9TIGlzIGdvaW5nIHRvDQotICAgICAgICAgICAgICogY2xlYXIgdGhlIHN0YWNrIGFyZWEgYWZ0ZXIgd2UgcmV0dXJuLiBUaGlzIGlzIGRvbmUgaW4gcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCkuDQotICAgICAgICAgICAgICovDQotICAgICAgICAjZW5kaWYNCi0gICAgfQ0KLSNlbmRpZiAvKiBpZiBwb3J0VVNJTkdfTVBVX1dSQVBQRVJTICovDQorCS8qIE5PVEU6IHdlIGNhbm5vdCBpbml0aWFsaXplIHRoZSBjb3Byb2Nlc3NvciBzYXZlIGFyZWEgaGVyZSBiZWNhdXNlIEZyZWVSVE9TIGlzIGdvaW5nIHRvDQorICAgICAgICAgKiBjbGVhciB0aGUgc3RhY2sgYXJlYSBhZnRlciB3ZSByZXR1cm4uIFRoaXMgaXMgZG9uZSBpbiBweFBvcnRJbml0aWFsaXNlU3RhY2soKS4NCisJICovDQorCSNlbmRpZg0KK30NCisjZW5kaWYNCisNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9UaGlyZFBhcnR5L1hDQy9YdGVuc2EvcG9ydGJlbmNobWFyay5oIGIvcG9ydGFibGUvVGhpcmRQYXJ0eS9YQ0MvWHRlbnNhL3BvcnRiZW5jaG1hcmsuaAppbmRleCA2Y2JmODQ3Li4zZGY2MTAzIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9UaGlyZFBhcnR5L1hDQy9YdGVuc2EvcG9ydGJlbmNobWFyay5oCisrKyBiL3BvcnRhYmxlL1RoaXJkUGFydHkvWENDL1h0ZW5zYS9wb3J0YmVuY2htYXJrLmgKQEAgLTEsMyArMSw0IEBACisNCiAvKg0KICAqIENvcHlyaWdodCAoYykgMjAxNS0yMDE5IENhZGVuY2UgRGVzaWduIFN5c3RlbXMsIEluYy4NCiAgKg0KQEAgLTM2LDcgKzM3LDcgQEAKICNlbmRpZg0KIA0KICNkZWZpbmUgcG9ydGJlbmNobWFya0lOVEVSUlVQVF9ESVNBQkxFKCkNCi0jZGVmaW5lIHBvcnRiZW5jaG1hcmtJTlRFUlJVUFRfUkVTVE9SRSggbmV3c3RhdGUgKQ0KKyNkZWZpbmUgcG9ydGJlbmNobWFya0lOVEVSUlVQVF9SRVNUT1JFKG5ld3N0YXRlKQ0KICNkZWZpbmUgcG9ydGJlbmNobWFya0ludExhdGVuY3koKQ0KICNkZWZpbmUgcG9ydGJlbmNobWFya0ludFdhaXQoKQ0KICNkZWZpbmUgcG9ydGJlbmNobWFya1Jlc2V0KCkNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9UaGlyZFBhcnR5L1hDQy9YdGVuc2EvcG9ydGNsaWIuYyBiL3BvcnRhYmxlL1RoaXJkUGFydHkvWENDL1h0ZW5zYS9wb3J0Y2xpYi5jCmluZGV4IDY3ZDEzYmIuLjcyNjg5MjMgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL1RoaXJkUGFydHkvWENDL1h0ZW5zYS9wb3J0Y2xpYi5jCisrKyBiL3BvcnRhYmxlL1RoaXJkUGFydHkvWENDL1h0ZW5zYS9wb3J0Y2xpYi5jCkBAIC0xLDMgKzEsNCBAQAorDQogLyoNCiAgKiBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxOSBDYWRlbmNlIERlc2lnbiBTeXN0ZW1zLCBJbmMuDQogICoNCkBAIC0yNSwyMDQgKzI2LDIwMCBAQAogDQogI2lmIFhUX1VTRV9USFJFQURfU0FGRV9DTElCDQogDQotICAgICNpZiBYU0hBTF9DTElCID09IFhUSEFMX0NMSUJfWENMSUINCisjaWYgWFNIQUxfQ0xJQiA9PSBYVEhBTF9DTElCX1hDTElCDQogDQotICAgICAgICAjaW5jbHVkZSA8ZXJybm8uaD4NCi0gICAgICAgICNpbmNsdWRlIDxzeXMvcmVlbnQuaD4NCisjaW5jbHVkZSA8ZXJybm8uaD4NCisjaW5jbHVkZSA8c3lzL3JlZW50Lmg+DQogDQotICAgICAgICAjaW5jbHVkZSAic2VtcGhyLmgiDQorI2luY2x1ZGUgInNlbXBoci5oIg0KIA0KLSAgICAgICAgdHlwZWRlZiBTZW1hcGhvcmVIYW5kbGVfdCBfUm10eDsNCit0eXBlZGVmIFNlbWFwaG9yZUhhbmRsZV90ICAgICAgIF9SbXR4Ow0KIA0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiAgT3ZlcnJpZGUgdGhpcyBhbmQgc2V0IHRvIG5vbnplcm8gdG8gZW5hYmxlIGxvY2tpbmcuICovDQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLSAgICAgICAgaW50MzJfdCBfeGNsaWJfdXNlX210ID0gMTsNCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8gIE92ZXJyaWRlIHRoaXMgYW5kIHNldCB0byBub256ZXJvIHRvIGVuYWJsZSBsb2NraW5nLg0KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitpbnQzMl90IF94Y2xpYl91c2VfbXQgPSAxOw0KIA0KIA0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiAgSW5pdCBsb2NrLiAqLw0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0gICAgICAgIHZvaWQgX010eGluaXQoIF9SbXR4ICogbXR4ICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICAqbXR4ID0geFNlbWFwaG9yZUNyZWF0ZVJlY3Vyc2l2ZU11dGV4KCk7DQotICAgICAgICB9DQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vICBJbml0IGxvY2suDQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK3ZvaWQNCitfTXR4aW5pdChfUm10eCAqIG10eCkNCit7DQorICAgICptdHggPSB4U2VtYXBob3JlQ3JlYXRlUmVjdXJzaXZlTXV0ZXgoKTsNCit9DQogDQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qICBEZXN0cm95IGxvY2suICovDQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLSAgICAgICAgdm9pZCBfTXR4ZHN0KCBfUm10eCAqIG10eCApDQotICAgICAgICB7DQotICAgICAgICAgICAgaWYoICggbXR4ICE9IE5VTEwgKSAmJiAoICptdHggIT0gTlVMTCApICkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIHZTZW1hcGhvcmVEZWxldGUoICptdHggKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vICBEZXN0cm95IGxvY2suDQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK3ZvaWQNCitfTXR4ZHN0KF9SbXR4ICogbXR4KQ0KK3sNCisgICAgaWYgKChtdHggIT0gTlVMTCkgJiYgKCptdHggIT0gTlVMTCkpIHsNCisgICAgICAgIHZTZW1hcGhvcmVEZWxldGUoKm10eCk7DQorICAgIH0NCit9DQogDQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qICBMb2NrLiAqLw0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0gICAgICAgIHZvaWQgX010eGxvY2soIF9SbXR4ICogbXR4ICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBpZiggKCBtdHggIT0gTlVMTCApICYmICggKm10eCAhPSBOVUxMICkgKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgeFNlbWFwaG9yZVRha2VSZWN1cnNpdmUoICptdHgsIHBvcnRNQVhfREVMQVkgKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vICBMb2NrLg0KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCit2b2lkDQorX010eGxvY2soX1JtdHggKiBtdHgpDQorew0KKyAgICBpZiAoKG10eCAhPSBOVUxMKSAmJiAoKm10eCAhPSBOVUxMKSkgew0KKyAgICAgICAgeFNlbWFwaG9yZVRha2VSZWN1cnNpdmUoKm10eCwgcG9ydE1BWF9ERUxBWSk7DQorICAgIH0NCit9DQogDQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qICBVbmxvY2suICovDQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLSAgICAgICAgdm9pZCBfTXR4dW5sb2NrKCBfUm10eCAqIG10eCApDQotICAgICAgICB7DQotICAgICAgICAgICAgaWYoICggbXR4ICE9IE5VTEwgKSAmJiAoICptdHggIT0gTlVMTCApICkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIHhTZW1hcGhvcmVHaXZlUmVjdXJzaXZlKCAqbXR4ICk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyAgVW5sb2NrLg0KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCit2b2lkDQorX010eHVubG9jayhfUm10eCAqIG10eCkNCit7DQorICAgIGlmICgobXR4ICE9IE5VTEwpICYmICgqbXR4ICE9IE5VTEwpKSB7DQorICAgICAgICB4U2VtYXBob3JlR2l2ZVJlY3Vyc2l2ZSgqbXR4KTsNCisgICAgfQ0KK30NCiANCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyogIENhbGxlZCBieSBtYWxsb2MoKSB0byBhbGxvY2F0ZSBibG9ja3Mgb2YgbWVtb3J5IGZyb20gdGhlIGhlYXAuICovDQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLSAgICAgICAgdm9pZCAqIF9zYnJrX3IoIHN0cnVjdCBfcmVlbnQgKiByZWVudCwNCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IGluY3IgKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGV4dGVybiBjaGFyIF9lbmQ7DQotICAgICAgICAgICAgZXh0ZXJuIGNoYXIgX2hlYXBfc2VudHJ5Ow0KLSAgICAgICAgICAgIHN0YXRpYyBjaGFyICogX2hlYXBfc2VudHJ5X3B0ciA9ICZfaGVhcF9zZW50cnk7DQotICAgICAgICAgICAgc3RhdGljIGNoYXIgKiBoZWFwX3B0cjsNCi0gICAgICAgICAgICBjaGFyICogYmFzZTsNCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8gIENhbGxlZCBieSBtYWxsb2MoKSB0byBhbGxvY2F0ZSBibG9ja3Mgb2YgbWVtb3J5IGZyb20gdGhlIGhlYXAuDQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK3ZvaWQgKg0KK19zYnJrX3IgKHN0cnVjdCBfcmVlbnQgKiByZWVudCwgaW50MzJfdCBpbmNyKQ0KK3sNCisgICAgZXh0ZXJuIGNoYXIgX2VuZDsNCisgICAgZXh0ZXJuIGNoYXIgX2hlYXBfc2VudHJ5Ow0KKyAgICBzdGF0aWMgY2hhciAqIF9oZWFwX3NlbnRyeV9wdHIgPSAmX2hlYXBfc2VudHJ5Ow0KKyAgICBzdGF0aWMgY2hhciAqIGhlYXBfcHRyOw0KKyAgICBjaGFyICogYmFzZTsNCiANCi0gICAgICAgICAgICBpZiggIWhlYXBfcHRyICkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIGhlYXBfcHRyID0gKCBjaGFyICogKSAmX2VuZDsNCi0gICAgICAgICAgICB9DQorICAgIGlmICghaGVhcF9wdHIpDQorICAgICAgICBoZWFwX3B0ciA9IChjaGFyICopICZfZW5kOw0KIA0KLSAgICAgICAgICAgIGJhc2UgPSBoZWFwX3B0cjsNCisgICAgYmFzZSA9IGhlYXBfcHRyOw0KKyAgICBpZiAoaGVhcF9wdHIgKyBpbmNyID49IF9oZWFwX3NlbnRyeV9wdHIpIHsNCisgICAgICAgIHJlZW50LT5fZXJybm8gPSBFTk9NRU07DQorICAgICAgICByZXR1cm4gKGNoYXIgKikgLTE7DQorICAgIH0NCiANCi0gICAgICAgICAgICBpZiggaGVhcF9wdHIgKyBpbmNyID49IF9oZWFwX3NlbnRyeV9wdHIgKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgcmVlbnQtPl9lcnJubyA9IEVOT01FTTsNCi0gICAgICAgICAgICAgICAgcmV0dXJuICggY2hhciAqICkgLTE7DQotICAgICAgICAgICAgfQ0KKyAgICBoZWFwX3B0ciArPSBpbmNyOw0KKyAgICByZXR1cm4gYmFzZTsNCit9DQogDQotICAgICAgICAgICAgaGVhcF9wdHIgKz0gaW5jcjsNCi0gICAgICAgICAgICByZXR1cm4gYmFzZTsNCi0gICAgICAgIH0NCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8gIEdsb2JhbCBpbml0aWFsaXphdGlvbiBmb3IgQyBsaWJyYXJ5Lg0KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCit2b2lkDQordlBvcnRDbGliSW5pdCh2b2lkKQ0KK3sNCit9DQogDQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qICBHbG9iYWwgaW5pdGlhbGl6YXRpb24gZm9yIEMgbGlicmFyeS4gKi8NCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotICAgICAgICB2b2lkIHZQb3J0Q2xpYkluaXQoIHZvaWQgKQ0KLSAgICAgICAgew0KLSAgICAgICAgfQ0KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyAgUGVyLXRocmVhZCBjbGVhbnVwIHN0dWIgcHJvdmlkZWQgZm9yIGxpbmtpbmcsIGRvZXMgbm90aGluZy4NCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQordm9pZA0KK19yZWNsYWltX3JlZW50KHZvaWQgKiBwdHIpDQorew0KK30NCiANCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyogIFBlci10aHJlYWQgY2xlYW51cCBzdHViIHByb3ZpZGVkIGZvciBsaW5raW5nLCBkb2VzIG5vdGhpbmcuICovDQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLSAgICAgICAgdm9pZCBfcmVjbGFpbV9yZWVudCggdm9pZCAqIHB0ciApDQotICAgICAgICB7DQotICAgICAgICB9DQorI2VuZGlmIC8qIFhTSEFMX0NMSUIgPT0gWFRIQUxfQ0xJQl9YQ0xJQiAqLw0KIA0KLSAgICAjZW5kaWYgLyogWFNIQUxfQ0xJQiA9PSBYVEhBTF9DTElCX1hDTElCICovDQorI2lmIFhTSEFMX0NMSUIgPT0gWFRIQUxfQ0xJQl9ORVdMSUINCiANCi0gICAgI2lmIFhTSEFMX0NMSUIgPT0gWFRIQUxfQ0xJQl9ORVdMSUINCisjaW5jbHVkZSA8ZXJybm8uaD4NCisjaW5jbHVkZSA8bWFsbG9jLmg+DQorI2luY2x1ZGUgPHN0ZGlvLmg+DQorI2luY2x1ZGUgPHN0ZGxpYi5oPg0KKyNpbmNsdWRlIDxzdHJpbmcuaD4NCiANCi0gICAgICAgICNpbmNsdWRlIDxlcnJuby5oPg0KLSAgICAgICAgI2luY2x1ZGUgPG1hbGxvYy5oPg0KLSAgICAgICAgI2luY2x1ZGUgPHN0ZGlvLmg+DQotICAgICAgICAjaW5jbHVkZSA8c3RkbGliLmg+DQotICAgICAgICAjaW5jbHVkZSA8c3RyaW5nLmg+DQorI2luY2x1ZGUgInNlbXBoci5oIg0KIA0KLSAgICAgICAgI2luY2x1ZGUgInNlbXBoci5oIg0KK3N0YXRpYyBTZW1hcGhvcmVIYW5kbGVfdCB4Q2xpYk11dGV4Ow0KK3N0YXRpYyB1aW50MzJfdCAgdWxDbGliSW5pdERvbmUgPSAwOw0KIA0KLSAgICAgICAgc3RhdGljIFNlbWFwaG9yZUhhbmRsZV90IHhDbGliTXV0ZXg7DQotICAgICAgICBzdGF0aWMgdWludDMyX3QgdWxDbGliSW5pdERvbmUgPSAwOw0KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyAgR2V0IEMgbGlicmFyeSBsb2NrLg0KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCit2b2lkDQorX19tYWxsb2NfbG9jayhzdHJ1Y3QgX3JlZW50ICogcHRyKQ0KK3sNCisgICAgaWYgKCF1bENsaWJJbml0RG9uZSkNCisgICAgICAgIHJldHVybjsNCiANCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyogIEdldCBDIGxpYnJhcnkgbG9jay4gKi8NCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotICAgICAgICB2b2lkIF9fbWFsbG9jX2xvY2soIHN0cnVjdCBfcmVlbnQgKiBwdHIgKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGlmKCAhdWxDbGliSW5pdERvbmUgKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgICAgIH0NCisgICAgeFNlbWFwaG9yZVRha2VSZWN1cnNpdmUoeENsaWJNdXRleCwgcG9ydE1BWF9ERUxBWSk7DQorfQ0KIA0KLSAgICAgICAgICAgIHhTZW1hcGhvcmVUYWtlUmVjdXJzaXZlKCB4Q2xpYk11dGV4LCBwb3J0TUFYX0RFTEFZICk7DQotICAgICAgICB9DQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vICBSZWxlYXNlIEMgbGlicmFyeSBsb2NrLg0KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCit2b2lkDQorX19tYWxsb2NfdW5sb2NrKHN0cnVjdCBfcmVlbnQgKiBwdHIpDQorew0KKyAgICBpZiAoIXVsQ2xpYkluaXREb25lKQ0KKyAgICAgICAgcmV0dXJuOw0KIA0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiAgUmVsZWFzZSBDIGxpYnJhcnkgbG9jay4gKi8NCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotICAgICAgICB2b2lkIF9fbWFsbG9jX3VubG9jayggc3RydWN0IF9yZWVudCAqIHB0ciApDQotICAgICAgICB7DQotICAgICAgICAgICAgaWYoICF1bENsaWJJbml0RG9uZSApDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICByZXR1cm47DQotICAgICAgICAgICAgfQ0KKyAgICB4U2VtYXBob3JlR2l2ZVJlY3Vyc2l2ZSh4Q2xpYk11dGV4KTsNCit9DQogDQotICAgICAgICAgICAgeFNlbWFwaG9yZUdpdmVSZWN1cnNpdmUoIHhDbGliTXV0ZXggKTsNCi0gICAgICAgIH0NCi0NCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLyogIExvY2sgZm9yIGVudmlyb25tZW50LiBTaW5jZSB3ZSBoYXZlIG9ubHkgb25lIGdsb2JhbCBsb2NrIHdlIGNhbiBqdXN0IGNhbGwgKi8NCi0vKiAgdGhlIG1hbGxvYygpIGxvY2sgZnVuY3Rpb24uICovDQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLSAgICAgICAgdm9pZCBfX2Vudl9sb2NrKCBzdHJ1Y3QgX3JlZW50ICogcHRyICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBfX21hbGxvY19sb2NrKCBwdHIgKTsNCi0gICAgICAgIH0NCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8gIExvY2sgZm9yIGVudmlyb25tZW50LiBTaW5jZSB3ZSBoYXZlIG9ubHkgb25lIGdsb2JhbCBsb2NrIHdlIGNhbiBqdXN0IGNhbGwNCisvLyAgdGhlIG1hbGxvYygpIGxvY2sgZnVuY3Rpb24uDQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK3ZvaWQNCitfX2Vudl9sb2NrKHN0cnVjdCBfcmVlbnQgKiBwdHIpDQorew0KKyAgICBfX21hbGxvY19sb2NrKHB0cik7DQorfQ0KIA0KIA0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiAgVW5sb2NrIGVudmlyb25tZW50LiAqLw0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0gICAgICAgIHZvaWQgX19lbnZfdW5sb2NrKCBzdHJ1Y3QgX3JlZW50ICogcHRyICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBfX21hbGxvY191bmxvY2soIHB0ciApOw0KLSAgICAgICAgfQ0KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyAgVW5sb2NrIGVudmlyb25tZW50Lg0KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCit2b2lkDQorX19lbnZfdW5sb2NrKHN0cnVjdCBfcmVlbnQgKiBwdHIpDQorew0KKyAgICBfX21hbGxvY191bmxvY2socHRyKTsNCit9DQogDQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8qICBDYWxsZWQgYnkgbWFsbG9jKCkgdG8gYWxsb2NhdGUgYmxvY2tzIG9mIG1lbW9yeSBmcm9tIHRoZSBoZWFwLiAqLw0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0gICAgICAgIHZvaWQgKiBfc2Jya19yKCBzdHJ1Y3QgX3JlZW50ICogcmVlbnQsDQotICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBpbmNyICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBleHRlcm4gY2hhciBfZW5kOw0KLSAgICAgICAgICAgIGV4dGVybiBjaGFyIF9oZWFwX3NlbnRyeTsNCi0gICAgICAgICAgICBzdGF0aWMgY2hhciAqIF9oZWFwX3NlbnRyeV9wdHIgPSAmX2hlYXBfc2VudHJ5Ow0KLSAgICAgICAgICAgIHN0YXRpYyBjaGFyICogaGVhcF9wdHI7DQotICAgICAgICAgICAgY2hhciAqIGJhc2U7DQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vICBDYWxsZWQgYnkgbWFsbG9jKCkgdG8gYWxsb2NhdGUgYmxvY2tzIG9mIG1lbW9yeSBmcm9tIHRoZSBoZWFwLg0KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCit2b2lkICoNCitfc2Jya19yIChzdHJ1Y3QgX3JlZW50ICogcmVlbnQsIGludDMyX3QgaW5jcikNCit7DQorICAgIGV4dGVybiBjaGFyIF9lbmQ7DQorICAgIGV4dGVybiBjaGFyIF9oZWFwX3NlbnRyeTsNCisgICAgc3RhdGljIGNoYXIgKiBfaGVhcF9zZW50cnlfcHRyID0gJl9oZWFwX3NlbnRyeTsNCisgICAgc3RhdGljIGNoYXIgKiBoZWFwX3B0cjsNCisgICAgY2hhciAqIGJhc2U7DQogDQotICAgICAgICAgICAgaWYoICFoZWFwX3B0ciApDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBoZWFwX3B0ciA9ICggY2hhciAqICkgJl9lbmQ7DQotICAgICAgICAgICAgfQ0KKyAgICBpZiAoIWhlYXBfcHRyKQ0KKyAgICAgICAgaGVhcF9wdHIgPSAoY2hhciAqKSAmX2VuZDsNCiANCi0gICAgICAgICAgICBiYXNlID0gaGVhcF9wdHI7DQorICAgIGJhc2UgPSBoZWFwX3B0cjsNCisgICAgaWYgKGhlYXBfcHRyICsgaW5jciA+PSBfaGVhcF9zZW50cnlfcHRyKSB7DQorICAgICAgICByZWVudC0+X2Vycm5vID0gRU5PTUVNOw0KKyAgICAgICAgcmV0dXJuIChjaGFyICopIC0xOw0KKyAgICB9DQogDQotICAgICAgICAgICAgaWYoIGhlYXBfcHRyICsgaW5jciA+PSBfaGVhcF9zZW50cnlfcHRyICkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIHJlZW50LT5fZXJybm8gPSBFTk9NRU07DQotICAgICAgICAgICAgICAgIHJldHVybiAoIGNoYXIgKiApIC0xOw0KLSAgICAgICAgICAgIH0NCisgICAgaGVhcF9wdHIgKz0gaW5jcjsNCisgICAgcmV0dXJuIGJhc2U7DQorfQ0KIA0KLSAgICAgICAgICAgIGhlYXBfcHRyICs9IGluY3I7DQotICAgICAgICAgICAgcmV0dXJuIGJhc2U7DQotICAgICAgICB9DQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vICBHbG9iYWwgaW5pdGlhbGl6YXRpb24gZm9yIEMgbGlicmFyeS4NCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQordm9pZA0KK3ZQb3J0Q2xpYkluaXQodm9pZCkNCit7DQorICAgIGNvbmZpZ0FTU0VSVCghdWxDbGliSW5pdERvbmUpOw0KIA0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vKiAgR2xvYmFsIGluaXRpYWxpemF0aW9uIGZvciBDIGxpYnJhcnkuICovDQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLSAgICAgICAgdm9pZCB2UG9ydENsaWJJbml0KCB2b2lkICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBjb25maWdBU1NFUlQoICF1bENsaWJJbml0RG9uZSApOw0KKyAgICB4Q2xpYk11dGV4ID0geFNlbWFwaG9yZUNyZWF0ZVJlY3Vyc2l2ZU11dGV4KCk7DQorICAgIHVsQ2xpYkluaXREb25lICA9IDE7DQorfQ0KIA0KLSAgICAgICAgICAgIHhDbGliTXV0ZXggPSB4U2VtYXBob3JlQ3JlYXRlUmVjdXJzaXZlTXV0ZXgoKTsNCi0gICAgICAgICAgICB1bENsaWJJbml0RG9uZSA9IDE7DQotICAgICAgICB9DQotDQotICAgICNlbmRpZiAvKiBYU0hBTF9DTElCID09IFhUSEFMX0NMSUJfTkVXTElCICovDQorI2VuZGlmIC8qIFhTSEFMX0NMSUIgPT0gWFRIQUxfQ0xJQl9ORVdMSUIgKi8NCiANCiAjZW5kaWYgLyogWFRfVVNFX1RIUkVBRF9TQUZFX0NMSUIgKi8NCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9UaGlyZFBhcnR5L1hDQy9YdGVuc2EvcG9ydG1hY3JvLmggYi9wb3J0YWJsZS9UaGlyZFBhcnR5L1hDQy9YdGVuc2EvcG9ydG1hY3JvLmgKaW5kZXggZDBmNjhkOC4uZWRmNDhhYSAxMDA2NDQKLS0tIGEvcG9ydGFibGUvVGhpcmRQYXJ0eS9YQ0MvWHRlbnNhL3BvcnRtYWNyby5oCisrKyBiL3BvcnRhYmxlL1RoaXJkUGFydHkvWENDL1h0ZW5zYS9wb3J0bWFjcm8uaApAQCAtMSwzICsxLDQgQEAKKw0KIC8qDQogICogRnJlZVJUT1MgS2VybmVsIFYxMC4wLjANCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQpAQCAtNTAsMjMgKzUxLDIzIEBACiAgKi8NCiANCiAjaWZuZGVmIFBPUlRNQUNST19IDQotICAgICNkZWZpbmUgUE9SVE1BQ1JPX0gNCisjZGVmaW5lIFBPUlRNQUNST19IDQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgZXh0ZXJuICJDIiB7DQotICAgICNlbmRpZg0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KIA0KLSAgICAjaWZuZGVmIF9fQVNTRU1CTEVSX18NCisjaWZuZGVmIF9fQVNTRU1CTEVSX18NCiANCi0gICAgICAgICNpbmNsdWRlIDxzdGRpbnQuaD4NCisjaW5jbHVkZSA8c3RkaW50Lmg+DQogDQotICAgICAgICAjaW5jbHVkZSA8eHRlbnNhL3RpZS94dF9jb3JlLmg+DQotICAgICAgICAjaW5jbHVkZSA8eHRlbnNhL2hhbC5oPg0KLSAgICAgICAgI2luY2x1ZGUgPHh0ZW5zYS9jb25maWcvY29yZS5oPg0KLSAgICAgICAgI2luY2x1ZGUgPHh0ZW5zYS9jb25maWcvc3lzdGVtLmg+IC8qIHJlcXVpcmVkIGZvciBYU0hBTF9DTElCICovDQotICAgICAgICAjaW5jbHVkZSA8eHRlbnNhL3h0cnVudGltZS5oPg0KKyNpbmNsdWRlIDx4dGVuc2EvdGllL3h0X2NvcmUuaD4NCisjaW5jbHVkZSA8eHRlbnNhL2hhbC5oPg0KKyNpbmNsdWRlIDx4dGVuc2EvY29uZmlnL2NvcmUuaD4NCisjaW5jbHVkZSA8eHRlbnNhL2NvbmZpZy9zeXN0ZW0uaD4JLyogcmVxdWlyZWQgZm9yIFhTSEFMX0NMSUIgKi8NCisjaW5jbHVkZSA8eHRlbnNhL3h0cnVudGltZS5oPg0KIA0KLS8qI2luY2x1ZGUgInh0ZW5zYV9jb250ZXh0LmgiICovDQorLy8jaW5jbHVkZSAieHRlbnNhX2NvbnRleHQuaCINCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICogUG9ydCBzcGVjaWZpYyBkZWZpbml0aW9ucy4NCkBAIC04MCwxNjUgKzgxLDE1NiBAQAogDQogLyogVHlwZSBkZWZpbml0aW9ucy4gKi8NCiANCi0gICAgICAgICNkZWZpbmUgcG9ydENIQVIgICAgICAgICAgaW50OF90DQotICAgICAgICAjZGVmaW5lIHBvcnRGTE9BVCAgICAgICAgIGZsb2F0DQotICAgICAgICAjZGVmaW5lIHBvcnRET1VCTEUgICAgICAgIGRvdWJsZQ0KLSAgICAgICAgI2RlZmluZSBwb3J0TE9ORyAgICAgICAgICBpbnQzMl90DQotICAgICAgICAjZGVmaW5lIHBvcnRTSE9SVCAgICAgICAgIGludDE2X3QNCi0gICAgICAgICNkZWZpbmUgcG9ydFNUQUNLX1RZUEUgICAgdWludDMyX3QNCi0gICAgICAgICNkZWZpbmUgcG9ydEJBU0VfVFlQRSAgICAgaW50DQorI2RlZmluZSBwb3J0Q0hBUgkJaW50OF90DQorI2RlZmluZSBwb3J0RkxPQVQJCWZsb2F0DQorI2RlZmluZSBwb3J0RE9VQkxFCQlkb3VibGUNCisjZGVmaW5lIHBvcnRMT05HCQlpbnQzMl90DQorI2RlZmluZSBwb3J0U0hPUlQJCWludDE2X3QNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFCXVpbnQzMl90DQorI2RlZmluZSBwb3J0QkFTRV9UWVBFCWludA0KIA0KLSAgICAgICAgdHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSAgICAgICAgICAgU3RhY2tUeXBlX3Q7DQotICAgICAgICB0eXBlZGVmIHBvcnRCQVNFX1RZUEUgICAgICAgICAgICBCYXNlVHlwZV90Ow0KLSAgICAgICAgdHlwZWRlZiB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFICAgVUJhc2VUeXBlX3Q7DQordHlwZWRlZiBwb3J0U1RBQ0tfVFlQRQkJCVN0YWNrVHlwZV90Ow0KK3R5cGVkZWYgcG9ydEJBU0VfVFlQRQkJCUJhc2VUeXBlX3Q7DQordHlwZWRlZiB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFCVVCYXNlVHlwZV90Ow0KIA0KLSAgICAgICAgI2lmICggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCi0gICAgICAgICAgICB0eXBlZGVmIHVpbnQxNl90ICAgICAgICAgICAgIFRpY2tUeXBlX3Q7DQotICAgICAgICAgICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICggVGlja1R5cGVfdCApIDB4ZmZmZg0KLSAgICAgICAgI2Vsc2UNCi0gICAgICAgICAgICB0eXBlZGVmIHVpbnQzMl90ICAgICAgICAgICAgIFRpY2tUeXBlX3Q7DQotICAgICAgICAgICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTA0KLSAgICAgICAgI2VuZGlmDQorI2lmKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KKwl0eXBlZGVmIHVpbnQxNl90IFRpY2tUeXBlX3Q7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIFRpY2tUeXBlX3QgKSAweGZmZmYNCisjZWxzZQ0KKwl0eXBlZGVmIHVpbnQzMl90IFRpY2tUeXBlX3Q7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwNCisjZW5kaWYNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0vKiBwb3J0YmVuY2htYXJrICovDQotICAgICAgICAjaW5jbHVkZSAicG9ydGJlbmNobWFyay5oIg0KKy8vIHBvcnRiZW5jaG1hcmsNCisjaW5jbHVkZSAicG9ydGJlbmNobWFyay5oIg0KIA0KIC8qIENyaXRpY2FsIHNlY3Rpb24gbWFuYWdlbWVudC4gTlctVE9ETzogcmVwbGFjZSBYVE9TX1NFVF9JTlRMRVZFTCB3aXRoIG1vcmUgZWZmaWNpZW50IHZlcnNpb24sIGlmIGFueT8gKi8NCi0vKiBUaGVzZSBjYW5ub3QgYmUgbmVzdGVkLiBUaGV5IHNob3VsZCBiZSB1c2VkIHdpdGggYSBsb3Qgb2YgY2FyZSBhbmQgY2Fubm90IGJlIGNhbGxlZCBmcm9tIGludGVycnVwdCBsZXZlbC4gKi8NCi0gICAgICAgICNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpICAgIGRvIHsgWFRPU19TRVRfSU5UTEVWRUwoIFhDSEFMX0VYQ01fTEVWRUwgKTsgcG9ydGJlbmNobWFya0lOVEVSUlVQVF9ESVNBQkxFKCk7IH0gd2hpbGUoIDAgKQ0KLSAgICAgICAgI2RlZmluZSBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKSAgICAgZG8geyBwb3J0YmVuY2htYXJrSU5URVJSVVBUX1JFU1RPUkUoIDAgKTsgWFRPU19TRVRfSU5UTEVWRUwoIDAgKTsgfSB3aGlsZSggMCApDQorLy8gVGhlc2UgY2Fubm90IGJlIG5lc3RlZC4gVGhleSBzaG91bGQgYmUgdXNlZCB3aXRoIGEgbG90IG9mIGNhcmUgYW5kIGNhbm5vdCBiZSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgbGV2ZWwuDQorI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkgICAgICBkbyB7IFhUT1NfU0VUX0lOVExFVkVMKFhDSEFMX0VYQ01fTEVWRUwpOyBwb3J0YmVuY2htYXJrSU5URVJSVVBUX0RJU0FCTEUoKTsgfSB3aGlsZSAoMCkNCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpICAgICAgIGRvIHsgcG9ydGJlbmNobWFya0lOVEVSUlVQVF9SRVNUT1JFKDApOyBYVE9TX1NFVF9JTlRMRVZFTCgwKTsgfSB3aGlsZSAoMCkNCiANCi0vKiBUaGVzZSBjYW4gYmUgbmVzdGVkICovDQotICAgICAgICAjZGVmaW5lIHBvcnRDUklUSUNBTF9ORVNUSU5HX0lOX1RDQiAgICAxIC8qIEZvciBub3csIGxldCBGcmVlUlRPUycgKHRhc2tzLmMpIG1hbmFnZSBjcml0aWNhbCBuZXN0aW5nICovDQotICAgICAgICB2b2lkIHZUYXNrRW50ZXJDcml0aWNhbCggdm9pZCApOw0KLSAgICAgICAgdm9pZCB2VGFza0V4aXRDcml0aWNhbCggdm9pZCApOw0KLSAgICAgICAgI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKSAgICB2VGFza0VudGVyQ3JpdGljYWwoKQ0KLSAgICAgICAgI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpICAgICB2VGFza0V4aXRDcml0aWNhbCgpDQorLy8gVGhlc2UgY2FuIGJlIG5lc3RlZA0KKyNkZWZpbmUgcG9ydENSSVRJQ0FMX05FU1RJTkdfSU5fVENCIDEgIC8vIEZvciBub3csIGxldCBGcmVlUlRPUycgKHRhc2tzLmMpIG1hbmFnZSBjcml0aWNhbCBuZXN0aW5nDQordm9pZCB2VGFza0VudGVyQ3JpdGljYWwodm9pZCk7DQordm9pZCB2VGFza0V4aXRDcml0aWNhbCh2b2lkKTsNCisjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpICAgICAgICB2VGFza0VudGVyQ3JpdGljYWwoKQ0KKyNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKSAgICAgICAgIHZUYXNrRXhpdENyaXRpY2FsKCkNCiANCi0vKiBDbGVhbmVyIGFuZCBwcmVmZXJyZWQgc29sdXRpb24gYWxsb3dzIG5lc3RlZCBpbnRlcnJ1cHRzIGRpc2FibGluZyBhbmQgcmVzdG9yaW5nIHZpYSBsb2NhbCByZWdpc3RlcnMgb3Igc3RhY2suICovDQotLyogVGhleSBjYW4gYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0cyB0b28uICovDQotICAgICAgICBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHBvcnRFTlRFUl9DUklUSUNBTF9ORVNURUQoKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHVuc2lnbmVkIHN0YXRlID0gWFRPU19TRVRfSU5UTEVWRUwoIFhDSEFMX0VYQ01fTEVWRUwgKTsNCisvLyBDbGVhbmVyIGFuZCBwcmVmZXJyZWQgc29sdXRpb24gYWxsb3dzIG5lc3RlZCBpbnRlcnJ1cHRzIGRpc2FibGluZyBhbmQgcmVzdG9yaW5nIHZpYSBsb2NhbCByZWdpc3RlcnMgb3Igc3RhY2suDQorLy8gVGhleSBjYW4gYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0cyB0b28uDQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBwb3J0RU5URVJfQ1JJVElDQUxfTkVTVEVEKCkgeyB1bnNpZ25lZCBzdGF0ZSA9IFhUT1NfU0VUX0lOVExFVkVMKFhDSEFMX0VYQ01fTEVWRUwpOyBwb3J0YmVuY2htYXJrSU5URVJSVVBUX0RJU0FCTEUoKTsgcmV0dXJuIHN0YXRlOyB9DQorI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTF9ORVNURUQoc3RhdGUpICAgZG8geyBwb3J0YmVuY2htYXJrSU5URVJSVVBUX1JFU1RPUkUoc3RhdGUpOyBYVE9TX1JFU1RPUkVfSlVTVF9JTlRMRVZFTChzdGF0ZSk7IH0gd2hpbGUgKDApDQogDQotICAgICAgICAgICAgcG9ydGJlbmNobWFya0lOVEVSUlVQVF9ESVNBQkxFKCk7DQotICAgICAgICAgICAgcmV0dXJuIHN0YXRlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTF9ORVNURUQoIHN0YXRlICkgICAgICAgICAgICAgZG8geyBwb3J0YmVuY2htYXJrSU5URVJSVVBUX1JFU1RPUkUoIHN0YXRlICk7IFhUT1NfUkVTVE9SRV9KVVNUX0lOVExFVkVMKCBzdGF0ZSApOyB9IHdoaWxlKCAwICkNCi0NCi0vKiBUaGVzZSBGcmVlUlRPUyB2ZXJzaW9ucyBhcmUgc2ltaWxhciB0byB0aGUgbmVzdGVkIHZlcnNpb25zIGFib3ZlICovDQotICAgICAgICAjZGVmaW5lIHBvcnRTRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKSAgICAgICAgICAgICBwb3J0RU5URVJfQ1JJVElDQUxfTkVTVEVEKCkNCi0gICAgICAgICNkZWZpbmUgcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCBzdGF0ZSApICAgIHBvcnRFWElUX0NSSVRJQ0FMX05FU1RFRCggc3RhdGUgKQ0KKy8vIFRoZXNlIEZyZWVSVE9TIHZlcnNpb25zIGFyZSBzaW1pbGFyIHRvIHRoZSBuZXN0ZWQgdmVyc2lvbnMgYWJvdmUNCisjZGVmaW5lIHBvcnRTRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKSAgICAgICAgICAgIHBvcnRFTlRFUl9DUklUSUNBTF9ORVNURUQoKQ0KKyNkZWZpbmUgcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKHN0YXRlKSAgICAgcG9ydEVYSVRfQ1JJVElDQUxfTkVTVEVEKHN0YXRlKQ0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIEFyY2hpdGVjdHVyZSBzcGVjaWZpY3MuICovDQotICAgICAgICAjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEggICAgICAoIC0xICkNCi0gICAgICAgICNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TICAgICggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQotICAgICAgICAjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVCAgICA0DQotICAgICAgICAjZGVmaW5lIHBvcnROT1AoKSAgICBYVF9OT1AoKQ0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJCSggLTEgKQ0KKyNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TCQkJKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCisjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVAkJCTQNCisjZGVmaW5lIHBvcnROT1AoKQkJCQkJWFRfTk9QKCkNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBGaW5lIHJlc29sdXRpb24gdGltZSAqLw0KLSAgICAgICAgI2RlZmluZSBwb3J0R0VUX1JVTl9USU1FX0NPVU5URVJfVkFMVUUoKSAgICB4dGhhbF9nZXRfY2NvdW50KCkNCisjZGVmaW5lIHBvcnRHRVRfUlVOX1RJTUVfQ09VTlRFUl9WQUxVRSgpICB4dGhhbF9nZXRfY2NvdW50KCkNCiANCiAvKiBLZXJuZWwgdXRpbGl0aWVzLiAqLw0KLSAgICAgICAgdm9pZCB2UG9ydFlpZWxkKCB2b2lkICk7DQotICAgICAgICB2b2lkIF9mcnh0X3NldHVwX3N3aXRjaCggdm9pZCApOw0KLSAgICAgICAgI2RlZmluZSBwb3J0WUlFTEQoKSAgICB2UG9ydFlpZWxkKCkNCi0gICAgICAgICNkZWZpbmUgcG9ydFlJRUxEX0ZST01fSVNSKCB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4gKSBcDQotICAgIGlmKCAoIHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiApICE9IDAgKSB7ICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgX2ZyeHRfc2V0dXBfc3dpdGNoKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgfQ0KK3ZvaWQgdlBvcnRZaWVsZCggdm9pZCApOw0KK3ZvaWQgX2ZyeHRfc2V0dXBfc3dpdGNoKCB2b2lkICk7DQorI2RlZmluZSBwb3J0WUlFTEQoKSAgICAgICB2UG9ydFlpZWxkKCkNCisjZGVmaW5lIHBvcnRZSUVMRF9GUk9NX0lTUiggeEhpZ2hlclByaW9yaXR5VGFza1dva2VuICkJXA0KKwlpZiAoICggeEhpZ2hlclByaW9yaXR5VGFza1dva2VuICkgIT0gMCApIHsJXA0KKwkJX2ZyeHRfc2V0dXBfc3dpdGNoKCk7CQkJXA0KKwl9DQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogVGFzayBmdW5jdGlvbiBtYWNyb3MgYXMgZGVzY3JpYmVkIG9uIHRoZSBGcmVlUlRPUy5vcmcgV0VCIHNpdGUuICovDQotICAgICAgICAjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2RnVuY3Rpb24sIHB2UGFyYW1ldGVycyApICAgIHZvaWQgdkZ1bmN0aW9uKCB2b2lkICogcHZQYXJhbWV0ZXJzICkNCi0gICAgICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgICAgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCiANCi0vKiBXaGVuIGNvcHJvY2Vzc29ycyBhcmUgZGVmaW5lZCwgd2UgdG8gbWFpbnRhaW4gYSBwb2ludGVyIHRvIGNvcHJvY2Vzc29ycyBhcmVhLiAqLw0KLS8qIFdlIGN1cnJlbnRseSB1c2UgYSBoYWNrOiByZWRlZmluZSBmaWVsZCB4TVBVX1NFVFRJTkdTIGluIFRDQiBibG9jayBhcyBhIHN0cnVjdHVyZSB0aGF0IGNhbiBob2xkOiAqLw0KLS8qIE1QVSB3cmFwcGVycywgY29wcm9jZXNzb3IgYXJlYSBwb2ludGVyLCB0cmFjZSBjb2RlIHN0cnVjdHVyZSwgYW5kIG1vcmUgaWYgbmVlZGVkLiAqLw0KLS8qIFRoZSBmaWVsZCBpcyBub3JtYWxseSB1c2VkIGZvciBtZW1vcnkgcHJvdGVjdGlvbi4gRnJlZVJUT1Mgc2hvdWxkIGNyZWF0ZSBhbm90aGVyIGdlbmVyYWwgcHVycG9zZSBmaWVsZC4gKi8NCi0gICAgICAgIHR5cGVkZWYgc3RydWN0DQotICAgICAgICB7DQotICAgICAgICAgICAgI2lmIFhDSEFMX0NQX05VTSA+IDANCi0gICAgICAgICAgICAgICAgdm9sYXRpbGUgU3RhY2tUeXBlX3QgKiBjb3Byb2NfYXJlYTsgLyogUG9pbnRlciB0byBjb3Byb2Nlc3NvciBzYXZlIGFyZWE7IE1VU1QgQkUgRklSU1QgKi8NCi0gICAgICAgICAgICAjZW5kaWYNCisvLyBXaGVuIGNvcHJvY2Vzc29ycyBhcmUgZGVmaW5lZCwgd2UgdG8gbWFpbnRhaW4gYSBwb2ludGVyIHRvIGNvcHJvY2Vzc29ycyBhcmVhLg0KKy8vIFdlIGN1cnJlbnRseSB1c2UgYSBoYWNrOiByZWRlZmluZSBmaWVsZCB4TVBVX1NFVFRJTkdTIGluIFRDQiBibG9jayBhcyBhIHN0cnVjdHVyZSB0aGF0IGNhbiBob2xkOg0KKy8vIE1QVSB3cmFwcGVycywgY29wcm9jZXNzb3IgYXJlYSBwb2ludGVyLCB0cmFjZSBjb2RlIHN0cnVjdHVyZSwgYW5kIG1vcmUgaWYgbmVlZGVkLg0KKy8vIFRoZSBmaWVsZCBpcyBub3JtYWxseSB1c2VkIGZvciBtZW1vcnkgcHJvdGVjdGlvbi4gRnJlZVJUT1Mgc2hvdWxkIGNyZWF0ZSBhbm90aGVyIGdlbmVyYWwgcHVycG9zZSBmaWVsZC4NCit0eXBlZGVmIHN0cnVjdCB7DQorCSNpZiBYQ0hBTF9DUF9OVU0gPiAwDQorCXZvbGF0aWxlIFN0YWNrVHlwZV90KiBjb3Byb2NfYXJlYTsgLy8gUG9pbnRlciB0byBjb3Byb2Nlc3NvciBzYXZlIGFyZWE7IE1VU1QgQkUgRklSU1QNCisJI2VuZGlmDQogDQotICAgICAgICAgICAgI2lmIHBvcnRVU0lOR19NUFVfV1JBUFBFUlMNCi0gICAgICAgICAgICAgICAgLyogRGVmaW5lIGhlcmUgbXB1X3NldHRpbmdzLCB3aGljaCBpcyBwb3J0IGRlcGVuZGVudCAqLw0KLSAgICAgICAgICAgICAgICBpbnQgbXB1X3NldHRpbmc7IC8qIEp1c3QgYSBkdW1teSBleGFtcGxlIGhlcmU7IE1QVSBub3QgcG9ydGVkIHRvIFh0ZW5zYSB5ZXQgKi8NCi0gICAgICAgICAgICAjZW5kaWYNCisJI2lmIHBvcnRVU0lOR19NUFVfV1JBUFBFUlMNCisJLy8gRGVmaW5lIGhlcmUgbXB1X3NldHRpbmdzLCB3aGljaCBpcyBwb3J0IGRlcGVuZGVudA0KKwlpbnQgbXB1X3NldHRpbmc7IC8vIEp1c3QgYSBkdW1teSBleGFtcGxlIGhlcmU7IE1QVSBub3QgcG9ydGVkIHRvIFh0ZW5zYSB5ZXQNCisJI2VuZGlmDQogDQotICAgICAgICAgICAgI2lmIGNvbmZpZ1VTRV9UUkFDRV9GQUNJTElUWV8yDQotICAgICAgICAgICAgICAgIHN0cnVjdA0KLSAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAvKiBDZi4gcG9ydHRyYWNlU3RhbXAoKSAqLw0KLSAgICAgICAgICAgICAgICAgICAgaW50IHRhc2tzdGFtcDsgICAgICAvKiBTdGFtcCBmcm9tIGluc2lkZSB0YXNrIHRvIHNlZSB3aGVyZSB3ZSBhcmUgKi8NCi0gICAgICAgICAgICAgICAgICAgIGludCB0YXNrc3RhbXBjb3VudDsgLyogQSBjb3VudGVyIHVzdWFsbHkgaW5jcmVtZW50ZWQgd2hlbiB3ZSByZXN0YXJ0IHRoZSB0YXNrJ3MgbG9vcCAqLw0KLSAgICAgICAgICAgICAgICB9IHBvcnR0cmFjZTsNCi0gICAgICAgICAgICAjZW5kaWYNCi0gICAgICAgIH0geE1QVV9TRVRUSU5HUzsNCisJI2lmIGNvbmZpZ1VTRV9UUkFDRV9GQUNJTElUWV8yDQorCXN0cnVjdCB7DQorCQkvLyBDZi4gcG9ydHRyYWNlU3RhbXAoKQ0KKwkJaW50IHRhc2tzdGFtcDsgICAgICAgIC8qIFN0YW1wIGZyb20gaW5zaWRlIHRhc2sgdG8gc2VlIHdoZXJlIHdlIGFyZSAqLw0KKwkJaW50IHRhc2tzdGFtcGNvdW50OyAgIC8qIEEgY291bnRlciB1c3VhbGx5IGluY3JlbWVudGVkIHdoZW4gd2UgcmVzdGFydCB0aGUgdGFzaydzIGxvb3AgKi8NCisJfSBwb3J0dHJhY2U7DQorCSNlbmRpZg0KK30geE1QVV9TRVRUSU5HUzsNCiANCi0vKiBNYWluIGhhY2sgdG8gdXNlIE1QVV93cmFwcGVycyBldmVuIHdoZW4gbm8gTVBVIGlzIGRlZmluZWQgKHdhcm5pbmc6IG1wdV9zZXR0aW5nIHNob3VsZCBub3QgYmUgYWNjZXNzZWQ7IG90aGVyd2lzZSBtb3ZlIHRoaXMgYWJvdmUgeE1QVV9TRVRUSU5HUykgKi8NCi0gICAgICAgICNpZiAoIFhDSEFMX0NQX05VTSA+IDAgfHwgY29uZmlnVVNFX1RSQUNFX0ZBQ0lMSVRZXzIgKSAmJiAhcG9ydFVTSU5HX01QVV9XUkFQUEVSUyAvKiBJZiBNUFUgd3JhcHBlcnMgbm90IHVzZWQsIHdlIHN0aWxsIG5lZWQgdG8gYWxsb2NhdGUgY29wcm9jIGFyZWEgKi8NCi0gICAgICAgICAgICAjdW5kZWYgcG9ydFVTSU5HX01QVV9XUkFQUEVSUw0KLSAgICAgICAgICAgICNkZWZpbmUgcG9ydFVTSU5HX01QVV9XUkFQUEVSUyAgICAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuYWJsZSBpdCB0byBhbGxvY2F0ZSBjb3Byb2MgYXJlYSAqLw0KLSAgICAgICAgICAgICNkZWZpbmUgTVBVX1dSQVBQRVJTX0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE92ZXJyaWRlIG1wdV93cmFwcGVyLmggdG8gZGlzYWJsZSB1bndhbnRlZCBjb2RlICovDQotICAgICAgICAgICAgI2RlZmluZSBQUklWSUxFR0VEX0ZVTkNUSU9ODQotICAgICAgICAgICAgI2RlZmluZSBQUklWSUxFR0VEX0RBVEENCi0gICAgICAgICNlbmRpZg0KKy8vIE1haW4gaGFjayB0byB1c2UgTVBVX3dyYXBwZXJzIGV2ZW4gd2hlbiBubyBNUFUgaXMgZGVmaW5lZCAod2FybmluZzogbXB1X3NldHRpbmcgc2hvdWxkIG5vdCBiZSBhY2Nlc3NlZDsgb3RoZXJ3aXNlIG1vdmUgdGhpcyBhYm92ZSB4TVBVX1NFVFRJTkdTKQ0KKyNpZiAoWENIQUxfQ1BfTlVNID4gMCB8fCBjb25maWdVU0VfVFJBQ0VfRkFDSUxJVFlfMikgJiYgIXBvcnRVU0lOR19NUFVfV1JBUFBFUlMgICAvLyBJZiBNUFUgd3JhcHBlcnMgbm90IHVzZWQsIHdlIHN0aWxsIG5lZWQgdG8gYWxsb2NhdGUgY29wcm9jIGFyZWENCisJI3VuZGVmIHBvcnRVU0lOR19NUFVfV1JBUFBFUlMNCisJI2RlZmluZSBwb3J0VVNJTkdfTVBVX1dSQVBQRVJTIDEgICAvLyBFbmFibGUgaXQgdG8gYWxsb2NhdGUgY29wcm9jIGFyZWENCisJI2RlZmluZSBNUFVfV1JBUFBFUlNfSCAgICAgICAgICAgICAvLyBPdmVycmlkZSBtcHVfd3JhcHBlci5oIHRvIGRpc2FibGUgdW53YW50ZWQgY29kZQ0KKwkjZGVmaW5lIFBSSVZJTEVHRURfRlVOQ1RJT04NCisJI2RlZmluZSBQUklWSUxFR0VEX0RBVEENCisjZW5kaWYNCiANCi0vKiBwb3J0dHJhY2UgKi8NCi0gICAgICAgICNpZiBjb25maWdVU0VfVFJBQ0VfRkFDSUxJVFlfMg0KLSAgICAgICAgICAgICNpbmNsdWRlICJwb3J0dHJhY2UuaCINCi0gICAgICAgICNlbmRpZg0KKy8vIHBvcnR0cmFjZQ0KKyNpZiBjb25maWdVU0VfVFJBQ0VfRkFDSUxJVFlfMg0KKyNpbmNsdWRlICJwb3J0dHJhY2UuaCINCisjZW5kaWYNCiANCi0vKiBjb25maWdBU1NFUlRfMiBpZiByZXF1ZXN0ZWQgKi8NCi0gICAgICAgICNpZiBjb25maWdBU1NFUlRfMg0KLSAgICAgICAgICAgICNpbmNsdWRlIDxzdGRpby5oPg0KLSAgICAgICAgICAgIHZvaWQgZXhpdCggaW50ICk7DQotICAgICAgICAgICAgI2RlZmluZSBjb25maWdBU1NFUlQoIHggKSAgICBpZiggISggeCApICkgeyBwb3J0dHJhY2VQcmludCggLTEgKTsgcHJpbnRmKCAiXG5Bc3NlcnRpb24gZmFpbGVkIGluICVzOiVkXG4iLCBfX0ZJTEVfXywgX19MSU5FX18gKTsgZXhpdCggLTEgKTsgfQ0KLSAgICAgICAgI2VuZGlmDQorLy8gY29uZmlnQVNTRVJUXzIgaWYgcmVxdWVzdGVkDQorI2lmIGNvbmZpZ0FTU0VSVF8yDQorI2luY2x1ZGUgPHN0ZGlvLmg+DQordm9pZCBleGl0KGludCk7DQorI2RlZmluZSBjb25maWdBU1NFUlQoIHggKSAgIGlmICghKHgpKSB7IHBvcnR0cmFjZVByaW50KC0xKTsgcHJpbnRmKCJcbkFzc2VydGlvbiBmYWlsZWQgaW4gJXM6JWRcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7IGV4aXQoLTEpOyB9DQorI2VuZGlmDQogDQogDQogLyogQyBsaWJyYXJ5IHN1cHBvcnQgLS0gb25seSBYQ0xJQiBhbmQgTkVXTElCIGFyZSBzdXBwb3J0ZWQuICovDQogDQogLyogVG8gZW5hYmxlIHRocmVhZC1zYWZlIEMgbGlicmFyeSBzdXBwb3J0LCBYVF9VU0VfVEhSRUFEX1NBRkVfQ0xJQiBtdXN0IGJlDQotICogZGVmaW5lZCB0byBiZSA+IDAgc29tZXdoZXJlIGFib3ZlIG9yIG9uIHRoZSBjb21tYW5kIGxpbmUuICovDQorICAgZGVmaW5lZCB0byBiZSA+IDAgc29tZXdoZXJlIGFib3ZlIG9yIG9uIHRoZSBjb21tYW5kIGxpbmUuICovDQogDQotICAgICAgICAjaWYgKCBYVF9VU0VfVEhSRUFEX1NBRkVfQ0xJQiA+IDB1ICkgJiYgKCBYU0hBTF9DTElCID09IFhUSEFMX0NMSUJfWENMSUIgKQ0KLSAgICAgICAgICAgIGV4dGVybiB2b2lkIHZQb3J0Q2xpYkluaXQoIHZvaWQgKTsNCisjaWYgKFhUX1VTRV9USFJFQURfU0FGRV9DTElCID4gMHUpICYmIChYU0hBTF9DTElCID09IFhUSEFMX0NMSUJfWENMSUIpDQorZXh0ZXJuIHZvaWQgdlBvcnRDbGliSW5pdCh2b2lkKTsNCiANCi0vKiBObyBjbGVhbnVwIG5lY2Vzc2FyeSBhdCB0aGlzIHRpbWUuICovDQotICAgICAgICAgICAgI2RlZmluZSBwb3J0Q0xFQU5fVVBfVENCKCBweFRDQiApDQotICAgICAgICAjZW5kaWYgLy8gWENMSUIgc3VwcG9ydA0KKy8vIE5vIGNsZWFudXAgbmVjZXNzYXJ5IGF0IHRoaXMgdGltZS4NCisjZGVmaW5lIHBvcnRDTEVBTl9VUF9UQ0IocHhUQ0IpDQorI2VuZGlmIC8vIFhDTElCIHN1cHBvcnQNCiANCi0gICAgICAgICNpZiAoIFhUX1VTRV9USFJFQURfU0FGRV9DTElCID4gMHUgKSAmJiAoIFhTSEFMX0NMSUIgPT0gWFRIQUxfQ0xJQl9ORVdMSUIgKQ0KLSAgICAgICAgICAgIGV4dGVybiB2b2lkIHZQb3J0Q2xpYkluaXQoIHZvaWQgKTsNCisjaWYgKFhUX1VTRV9USFJFQURfU0FGRV9DTElCID4gMHUpICYmIChYU0hBTF9DTElCID09IFhUSEFMX0NMSUJfTkVXTElCKQ0KK2V4dGVybiB2b2lkIHZQb3J0Q2xpYkluaXQodm9pZCk7DQogDQotLyogVGhpcyBDIGxpYnJhcnkgY2xlYW51cCBpcyBub3QgY3VycmVudGx5IGRvbmUgYnkgRnJlZVJUT1Mgd2hlbiBkZWxldGluZyBhIHRhc2sgKi8NCi0gICAgICAgICAgICAjaW5jbHVkZSA8c3RkaW8uaD4NCi0gICAgICAgICAgICAjZGVmaW5lIHBvcnRDTEVBTl9VUF9UQ0IoIHB4VENCICkgICAgdlBvcnRDbGVhblVwVGNiQ2xpYiggJiggKCBweFRDQiApLT54TmV3TGliX3JlZW50ICkgKQ0KLSAgICAgICAgICAgIHN0YXRpYyBpbmxpbmUgdm9pZCB2UG9ydENsZWFuVXBUY2JDbGliKCBzdHJ1Y3QgX3JlZW50ICogcHRyICkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIEZJTEUgKiBmcCA9ICYoIHB0ci0+X19zZlsgMCBdICk7DQotICAgICAgICAgICAgICAgIGludCBpOw0KKy8vIFRoaXMgQyBsaWJyYXJ5IGNsZWFudXAgaXMgbm90IGN1cnJlbnRseSBkb25lIGJ5IEZyZWVSVE9TIHdoZW4gZGVsZXRpbmcgYSB0YXNrDQorI2luY2x1ZGUgPHN0ZGlvLmg+DQorI2RlZmluZSBwb3J0Q0xFQU5fVVBfVENCKHB4VENCKSAgIHZQb3J0Q2xlYW5VcFRjYkNsaWIoJigocHhUQ0IpLT54TmV3TGliX3JlZW50KSkNCitzdGF0aWMgaW5saW5lIHZvaWQgdlBvcnRDbGVhblVwVGNiQ2xpYihzdHJ1Y3QgX3JlZW50ICpwdHIpDQorew0KKyAgICBGSUxFICogZnAgPSAmKHB0ci0+X19zZlswXSk7DQorICAgIGludCBpOw0KKyAgICBmb3IgKGkgPSAwOyBpIDwgMzsgKytpLCArK2ZwKSB7DQorICAgICAgICBmcC0+X2Nsb3NlID0gTlVMTDsNCisgICAgfQ0KK30NCisjZW5kaWYgLy8gTkVXTElCIHN1cHBvcnQNCiANCi0gICAgICAgICAgICAgICAgZm9yKCBpID0gMDsgaSA8IDM7ICsraSwgKytmcCApDQotICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgIGZwLT5fY2xvc2UgPSBOVUxMOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgI2VuZGlmIC8vIE5FV0xJQiBzdXBwb3J0DQorI2VuZGlmIC8vIF9fQVNTRU1CTEVSX18NCiANCi0gICAgI2VuZGlmIC8vIF9fQVNTRU1CTEVSX18NCi0NCi0gICAgI2lmZGVmIF9fY3BsdXNwbHVzDQotICAgICAgICB9DQotICAgICNlbmRpZg0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCiANCiAjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8NCisNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9UaGlyZFBhcnR5L1hDQy9YdGVuc2EvcG9ydHRyYWNlLmggYi9wb3J0YWJsZS9UaGlyZFBhcnR5L1hDQy9YdGVuc2EvcG9ydHRyYWNlLmgKaW5kZXggODI3YTA2MS4uNDk4NDQ0YiAxMDA2NDQKLS0tIGEvcG9ydGFibGUvVGhpcmRQYXJ0eS9YQ0MvWHRlbnNhL3BvcnR0cmFjZS5oCisrKyBiL3BvcnRhYmxlL1RoaXJkUGFydHkvWENDL1h0ZW5zYS9wb3J0dHJhY2UuaApAQCAtMSwzICsxLDQgQEAKKw0KIC8qDQogICogQ29weXJpZ2h0IChjKSAyMDE1LTIwMTkgQ2FkZW5jZSBEZXNpZ24gU3lzdGVtcywgSW5jLg0KICAqDQpAQCAtMjUsNyArMjYsNyBAQAogICogVGhpcyB1dGlsaXR5IGhlbHBzIHRyYWNpbmcgdGhlIGVudGVyaW5nIGFuZCBleGl0aW5nIGZyb20gdGFza3MuDQogICogSXQgbWFpbnRhaW5zIGEgY2lyY3VsYXIgYnVmZmVyIG9mIHRhc2tzIGluIHRoZSBvcmRlciB0aGV5IGV4ZWN1dGUsDQogICogYW5kIHRoZWlyIGV4ZWN1dGlvbiB0aW1lLiBUbyBlbmFibGUgaXQsIHNldCBjb25maWdVU0VfVFJBQ0VfRkFDSUxJVFlfMg0KLSAqIHRvIDEgaW4gRnJlZVJUT1NDb25maWcuaC4gWW91IHdpbGwgYWxzbyBuZWVkIHRvIGRvd25sb2FkIHRoZQ0KKyAqIHRvIDEgaW4gRnJlZVJUT1NDb25maWcuaC4gWW91IHdpbGwgYWxzbyBuZWVkIHRvIGRvd25sb2FkIHRoZSANCiAgKiBGcmVlUlRPU190cmFjZSBwYXRjaCB0aGF0IGNvbnRhaW5zIHBvcnR0cmFjZS5jIGFuZCB0aGUgY29tcGxldGUgdmVyc2lvbg0KICAqIG9mIHBvcnR0cmFjZS5oLg0KICAqLw0KQEAgLTM3LDcgKzM4LDcgQEAKICAgICAjZXJyb3IgIllvdSBuZWVkIHRvIGRvd25sb2FkIHRoZSBGcmVlUlRPU190cmFjZSBwYXRjaCB0aGF0IG92ZXJ3cml0ZXMgdGhpcyBmaWxlIg0KICNlbmRpZg0KIA0KLSNkZWZpbmUgcG9ydHRyYWNlUHJpbnQoIG5lbGVtZW50cyApDQotI2RlZmluZSBwb3J0dHJhY2VTdGFtcCggc3RhbXAsIGNvdW50X2luY3IgKQ0KKyNkZWZpbmUgcG9ydHRyYWNlUHJpbnQobmVsZW1lbnRzKQ0KKyNkZWZpbmUgcG9ydHRyYWNlU3RhbXAoc3RhbXAsIGNvdW50X2luY3IpDQogDQogI2VuZGlmIC8qIFBPUlRUUkFDRV9IICovDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvVGhpcmRQYXJ0eS9YQ0MvWHRlbnNhL3h0ZW5zYV9hcGkuaCBiL3BvcnRhYmxlL1RoaXJkUGFydHkvWENDL1h0ZW5zYS94dGVuc2FfYXBpLmgKaW5kZXggODMzNGEzNS4uMWJlMjkwNSAxMDA2NDQKLS0tIGEvcG9ydGFibGUvVGhpcmRQYXJ0eS9YQ0MvWHRlbnNhL3h0ZW5zYV9hcGkuaAorKysgYi9wb3J0YWJsZS9UaGlyZFBhcnR5L1hDQy9YdGVuc2EveHRlbnNhX2FwaS5oCkBAIC0xLDMgKzEsNCBAQAorDQogLyoNCiAgKiBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxOSBDYWRlbmNlIERlc2lnbiBTeXN0ZW1zLCBJbmMuDQogICoNCkBAIC0zNCw5MSArMzUsODkgQEAKIA0KIA0KIC8qIFR5cGVkZWYgZm9yIEMtY2FsbGFibGUgaW50ZXJydXB0IGhhbmRsZXIgZnVuY3Rpb24gKi8NCi10eXBlZGVmIHZvaWQgKCogeHRfaGFuZGxlcikoIHZvaWQgKiApOw0KK3R5cGVkZWYgdm9pZCAoKnh0X2hhbmRsZXIpKHZvaWQgKik7DQogDQogLyogVHlwZWRlZiBmb3IgQy1jYWxsYWJsZSBleGNlcHRpb24gaGFuZGxlciBmdW5jdGlvbiAqLw0KLXR5cGVkZWYgdm9pZCAoKiB4dF9leGNfaGFuZGxlcikoIFh0RXhjRnJhbWUgKiApOw0KK3R5cGVkZWYgdm9pZCAoKnh0X2V4Y19oYW5kbGVyKShYdEV4Y0ZyYW1lICopOw0KIA0KIA0KIC8qDQotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLSAqIENhbGwgdGhpcyBmdW5jdGlvbiB0byBzZXQgYSBoYW5kbGVyIGZvciB0aGUgc3BlY2lmaWVkIGV4Y2VwdGlvbi4NCi0gKg0KLSAqICBuICAgICAgICAtIEV4Y2VwdGlvbiBudW1iZXIgKHR5cGUpDQotICogIGYgICAgICAgIC0gSGFuZGxlciBmdW5jdGlvbiBhZGRyZXNzLCBOVUxMIHRvIHVuaW5zdGFsbCBoYW5kbGVyLg0KLSAqDQotICogVGhlIGhhbmRsZXIgd2lsbCBiZSBwYXNzZWQgYSBwb2ludGVyIHRvIHRoZSBleGNlcHRpb24gZnJhbWUsIHdoaWNoIGlzIGNyZWF0ZWQNCi0gKiBvbiB0aGUgc3RhY2sgb2YgdGhlIHRocmVhZCB0aGF0IGNhdXNlZCB0aGUgZXhjZXB0aW9uLg0KLSAqDQotICogSWYgdGhlIGhhbmRsZXIgcmV0dXJucywgdGhlIHRocmVhZCBjb250ZXh0IHdpbGwgYmUgcmVzdG9yZWQgYW5kIHRoZSBmYXVsdGluZw0KLSAqIGluc3RydWN0aW9uIHdpbGwgYmUgcmV0cmllZC4gQW55IHZhbHVlcyBpbiB0aGUgZXhjZXB0aW9uIGZyYW1lIHRoYXQgYXJlDQotICogbW9kaWZpZWQgYnkgdGhlIGhhbmRsZXIgd2lsbCBiZSByZXN0b3JlZCBhcyBwYXJ0IG9mIHRoZSBjb250ZXh0LiBGb3IgZGV0YWlscw0KLSAqIG9mIHRoZSBleGNlcHRpb24gZnJhbWUgc3RydWN0dXJlIHNlZSB4dGVuc2FfY29udGV4dC5oLg0KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0gKi8NCi1leHRlcm4geHRfZXhjX2hhbmRsZXIgeHRfc2V0X2V4Y2VwdGlvbl9oYW5kbGVyKCBpbnQgbiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4dF9leGNfaGFuZGxlciBmICk7DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAgQ2FsbCB0aGlzIGZ1bmN0aW9uIHRvIHNldCBhIGhhbmRsZXIgZm9yIHRoZSBzcGVjaWZpZWQgZXhjZXB0aW9uLg0KKw0KKyAgICBuICAgICAgICAtIEV4Y2VwdGlvbiBudW1iZXIgKHR5cGUpDQorICAgIGYgICAgICAgIC0gSGFuZGxlciBmdW5jdGlvbiBhZGRyZXNzLCBOVUxMIHRvIHVuaW5zdGFsbCBoYW5kbGVyLg0KKw0KKyAgVGhlIGhhbmRsZXIgd2lsbCBiZSBwYXNzZWQgYSBwb2ludGVyIHRvIHRoZSBleGNlcHRpb24gZnJhbWUsIHdoaWNoIGlzIGNyZWF0ZWQNCisgIG9uIHRoZSBzdGFjayBvZiB0aGUgdGhyZWFkIHRoYXQgY2F1c2VkIHRoZSBleGNlcHRpb24uDQorDQorICBJZiB0aGUgaGFuZGxlciByZXR1cm5zLCB0aGUgdGhyZWFkIGNvbnRleHQgd2lsbCBiZSByZXN0b3JlZCBhbmQgdGhlIGZhdWx0aW5nDQorICBpbnN0cnVjdGlvbiB3aWxsIGJlIHJldHJpZWQuIEFueSB2YWx1ZXMgaW4gdGhlIGV4Y2VwdGlvbiBmcmFtZSB0aGF0IGFyZQ0KKyAgbW9kaWZpZWQgYnkgdGhlIGhhbmRsZXIgd2lsbCBiZSByZXN0b3JlZCBhcyBwYXJ0IG9mIHRoZSBjb250ZXh0LiBGb3IgZGV0YWlscw0KKyAgb2YgdGhlIGV4Y2VwdGlvbiBmcmFtZSBzdHJ1Y3R1cmUgc2VlIHh0ZW5zYV9jb250ZXh0LmguDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyovDQorZXh0ZXJuIHh0X2V4Y19oYW5kbGVyIHh0X3NldF9leGNlcHRpb25faGFuZGxlcihpbnQgbiwgeHRfZXhjX2hhbmRsZXIgZik7DQogDQogDQogLyoNCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotICogQ2FsbCB0aGlzIGZ1bmN0aW9uIHRvIHNldCBhIGhhbmRsZXIgZm9yIHRoZSBzcGVjaWZpZWQgaW50ZXJydXB0Lg0KLSAqDQotICogIG4gICAgICAgIC0gSW50ZXJydXB0IG51bWJlci4NCi0gKiAgZiAgICAgICAgLSBIYW5kbGVyIGZ1bmN0aW9uIGFkZHJlc3MsIE5VTEwgdG8gdW5pbnN0YWxsIGhhbmRsZXIuDQotICogIGFyZyAgICAgIC0gQXJndW1lbnQgdG8gYmUgcGFzc2VkIHRvIGhhbmRsZXIuDQotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLSAqLw0KLWV4dGVybiB4dF9oYW5kbGVyIHh0X3NldF9pbnRlcnJ1cHRfaGFuZGxlciggaW50IG4sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4dF9oYW5kbGVyIGYsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICogYXJnICk7DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAgQ2FsbCB0aGlzIGZ1bmN0aW9uIHRvIHNldCBhIGhhbmRsZXIgZm9yIHRoZSBzcGVjaWZpZWQgaW50ZXJydXB0Lg0KKyANCisgICAgbiAgICAgICAgLSBJbnRlcnJ1cHQgbnVtYmVyLg0KKyAgICBmICAgICAgICAtIEhhbmRsZXIgZnVuY3Rpb24gYWRkcmVzcywgTlVMTCB0byB1bmluc3RhbGwgaGFuZGxlci4NCisgICAgYXJnICAgICAgLSBBcmd1bWVudCB0byBiZSBwYXNzZWQgdG8gaGFuZGxlci4NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorKi8NCitleHRlcm4geHRfaGFuZGxlciB4dF9zZXRfaW50ZXJydXB0X2hhbmRsZXIoaW50IG4sIHh0X2hhbmRsZXIgZiwgdm9pZCAqIGFyZyk7DQogDQogDQogLyoNCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotICogQ2FsbCB0aGlzIGZ1bmN0aW9uIHRvIGVuYWJsZSB0aGUgc3BlY2lmaWVkIGludGVycnVwdHMuDQotICoNCi0gKiAgbWFzayAgICAgLSBCaXQgbWFzayBvZiBpbnRlcnJ1cHRzIHRvIGJlIGVuYWJsZWQuDQotICoNCi0gKiBSZXR1cm5zIHRoZSBwcmV2aW91cyBzdGF0ZSBvZiB0aGUgaW50ZXJydXB0IGVuYWJsZXMuDQotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLSAqLw0KLWV4dGVybiB1bnNpZ25lZCBpbnQgeHRfaW50c19vbiggdW5zaWduZWQgaW50IG1hc2sgKTsNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICBDYWxsIHRoaXMgZnVuY3Rpb24gdG8gZW5hYmxlIHRoZSBzcGVjaWZpZWQgaW50ZXJydXB0cy4NCisNCisgICAgbWFzayAgICAgLSBCaXQgbWFzayBvZiBpbnRlcnJ1cHRzIHRvIGJlIGVuYWJsZWQuDQorDQorICBSZXR1cm5zIHRoZSBwcmV2aW91cyBzdGF0ZSBvZiB0aGUgaW50ZXJydXB0IGVuYWJsZXMuDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyovDQorZXh0ZXJuIHVuc2lnbmVkIGludCB4dF9pbnRzX29uKHVuc2lnbmVkIGludCBtYXNrKTsNCiANCiANCiAvKg0KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0gKiBDYWxsIHRoaXMgZnVuY3Rpb24gdG8gZGlzYWJsZSB0aGUgc3BlY2lmaWVkIGludGVycnVwdHMuDQotICoNCi0gKiAgbWFzayAgICAgLSBCaXQgbWFzayBvZiBpbnRlcnJ1cHRzIHRvIGJlIGRpc2FibGVkLg0KLSAqDQotICogUmV0dXJucyB0aGUgcHJldmlvdXMgc3RhdGUgb2YgdGhlIGludGVycnVwdCBlbmFibGVzLg0KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0gKi8NCi1leHRlcm4gdW5zaWduZWQgaW50IHh0X2ludHNfb2ZmKCB1bnNpZ25lZCBpbnQgbWFzayApOw0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgIENhbGwgdGhpcyBmdW5jdGlvbiB0byBkaXNhYmxlIHRoZSBzcGVjaWZpZWQgaW50ZXJydXB0cy4NCisNCisgICAgbWFzayAgICAgLSBCaXQgbWFzayBvZiBpbnRlcnJ1cHRzIHRvIGJlIGRpc2FibGVkLg0KKw0KKyAgUmV0dXJucyB0aGUgcHJldmlvdXMgc3RhdGUgb2YgdGhlIGludGVycnVwdCBlbmFibGVzLg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisqLw0KK2V4dGVybiB1bnNpZ25lZCBpbnQgeHRfaW50c19vZmYodW5zaWduZWQgaW50IG1hc2spOw0KIA0KIA0KIC8qDQotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLSAqIENhbGwgdGhpcyBmdW5jdGlvbiB0byBzZXQgdGhlIHNwZWNpZmllZCAocy93KSBpbnRlcnJ1cHQuDQotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLSAqLw0KLXN0YXRpYyBpbmxpbmUgdm9pZCB4dF9zZXRfaW50c2V0KCB1bnNpZ25lZCBpbnQgYXJnICkNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICBDYWxsIHRoaXMgZnVuY3Rpb24gdG8gc2V0IHRoZSBzcGVjaWZpZWQgKHMvdykgaW50ZXJydXB0Lg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisqLw0KK3N0YXRpYyBpbmxpbmUgdm9pZCB4dF9zZXRfaW50c2V0KHVuc2lnbmVkIGludCBhcmcpDQogew0KLSAgICB4dGhhbF9zZXRfaW50c2V0KCBhcmcgKTsNCisgICAgeHRoYWxfc2V0X2ludHNldChhcmcpOw0KIH0NCiANCiANCiAvKg0KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0gKiBDYWxsIHRoaXMgZnVuY3Rpb24gdG8gY2xlYXIgdGhlIHNwZWNpZmllZCAocy93IG9yIGVkZ2UtdHJpZ2dlcmVkKQ0KLSAqIGludGVycnVwdC4NCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotICovDQotc3RhdGljIGlubGluZSB2b2lkIHh0X3NldF9pbnRjbGVhciggdW5zaWduZWQgaW50IGFyZyApDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAgQ2FsbCB0aGlzIGZ1bmN0aW9uIHRvIGNsZWFyIHRoZSBzcGVjaWZpZWQgKHMvdyBvciBlZGdlLXRyaWdnZXJlZCkNCisgIGludGVycnVwdC4NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorKi8NCitzdGF0aWMgaW5saW5lIHZvaWQgeHRfc2V0X2ludGNsZWFyKHVuc2lnbmVkIGludCBhcmcpDQogew0KLSAgICB4dGhhbF9zZXRfaW50Y2xlYXIoIGFyZyApOw0KKyAgICB4dGhhbF9zZXRfaW50Y2xlYXIoYXJnKTsNCiB9DQogDQogDQogI2VuZGlmIC8qIF9fWFRFTlNBX0FQSV9IX18gKi8NCisNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9UaGlyZFBhcnR5L1hDQy9YdGVuc2EveHRlbnNhX2NvbmZpZy5oIGIvcG9ydGFibGUvVGhpcmRQYXJ0eS9YQ0MvWHRlbnNhL3h0ZW5zYV9jb25maWcuaAppbmRleCAwN2IxZjkxLi4zMDgzNjFmIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9UaGlyZFBhcnR5L1hDQy9YdGVuc2EveHRlbnNhX2NvbmZpZy5oCisrKyBiL3BvcnRhYmxlL1RoaXJkUGFydHkvWENDL1h0ZW5zYS94dGVuc2FfY29uZmlnLmgKQEAgLTEsMyArMSw0IEBACisNCiAvKg0KICAqIENvcHlyaWdodCAoYykgMjAxNS0yMDE5IENhZGVuY2UgRGVzaWduIFN5c3RlbXMsIEluYy4NCiAgKg0KQEAgLTMxLDE1MSArMzIsMTUyIEBACiAgKi8NCiANCiAjaWZuZGVmIFhURU5TQV9DT05GSUdfSA0KLSAgICAjZGVmaW5lIFhURU5TQV9DT05GSUdfSA0KKyNkZWZpbmUgWFRFTlNBX0NPTkZJR19IDQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgZXh0ZXJuICJDIiB7DQotICAgICNlbmRpZg0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KIA0KLSAgICAjaW5jbHVkZSA8eHRlbnNhL2hhbC5oPg0KLSAgICAjaW5jbHVkZSA8eHRlbnNhL2NvbmZpZy9jb3JlLmg+DQotICAgICNpbmNsdWRlIDx4dGVuc2EvY29uZmlnL3N5c3RlbS5oPiAvKiByZXF1aXJlZCBmb3IgWFNIQUxfQ0xJQiAqLw0KKyNpbmNsdWRlIDx4dGVuc2EvaGFsLmg+DQorI2luY2x1ZGUgPHh0ZW5zYS9jb25maWcvY29yZS5oPg0KKyNpbmNsdWRlIDx4dGVuc2EvY29uZmlnL3N5c3RlbS5oPgkvKiByZXF1aXJlZCBmb3IgWFNIQUxfQ0xJQiAqLw0KIA0KLSAgICAjaW5jbHVkZSAieHRlbnNhX2NvbnRleHQuaCINCisjaW5jbHVkZSAieHRlbnNhX2NvbnRleHQuaCINCiANCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVEFDSyBSRVFVSVJFTUVOVFMNCi0gKg0KLSAqIFRoaXMgc2VjdGlvbiBkZWZpbmVzIHRoZSBtaW5pbXVtIHN0YWNrIHNpemUsIGFuZCB0aGUgZXh0cmEgc3BhY2UgcmVxdWlyZWQgdG8NCi0gKiBiZSBhbGxvY2F0ZWQgZm9yIHNhdmluZyBjb3Byb2Nlc3NvciBzdGF0ZSBhbmQvb3IgQyBsaWJyYXJ5IHN0YXRlIGluZm9ybWF0aW9uDQotICogKGlmIHRocmVhZCBzYWZldHkgaXMgZW5hYmxlZCBmb3IgdGhlIEMgbGlicmFyeSkuIFRoZSBzaXplcyBhcmUgaW4gYnl0ZXMuDQotICoNCi0gKiBTdGFjayBzaXplcyBmb3IgaW5kaXZpZHVhbCB0YXNrcyBzaG91bGQgYmUgZGVyaXZlZCBmcm9tIHRoZXNlIG1pbmltYSBiYXNlZCBvbg0KLSAqIHRoZSBtYXhpbXVtIGNhbGwgZGVwdGggb2YgdGhlIHRhc2sgYW5kIHRoZSBtYXhpbXVtIGxldmVsIG9mIGludGVycnVwdCBuZXN0aW5nLg0KLSAqIEEgbWluaW11bSBzdGFjayBzaXplIGlzIGRlZmluZWQgYnkgWFRfU1RBQ0tfTUlOX1NJWkUuIFRoaXMgbWluaW11bSBpcyBiYXNlZA0KLSAqIG9uIHRoZSByZXF1aXJlbWVudCBmb3IgYSB0YXNrIHRoYXQgY2FsbHMgbm90aGluZyBlbHNlIGJ1dCBjYW4gYmUgaW50ZXJydXB0ZWQuDQotICogVGhpcyBhc3N1bWVzIHRoYXQgaW50ZXJydXB0IGhhbmRsZXJzIGRvIG5vdCBjYWxsIG1vcmUgdGhhbiBhIGZldyBsZXZlbHMgZGVlcC4NCi0gKiBJZiB0aGlzIGlzIG5vdCB0cnVlLCBpLmUuIG9uZSBvciBtb3JlIGludGVycnVwdCBoYW5kbGVycyBtYWtlIGRlZXAgY2FsbHMgdGhlbg0KLSAqIHRoZSBtaW5pbXVtIG11c3QgYmUgaW5jcmVhc2VkLg0KLSAqDQotICogSWYgdGhlIFh0ZW5zYSBwcm9jZXNzb3IgY29uZmlndXJhdGlvbiBpbmNsdWRlcyBjb3Byb2Nlc3NvcnMsIHRoZW4gc3BhY2UgaXMNCi0gKiBhbGxvY2F0ZWQgdG8gc2F2ZSB0aGUgY29wcm9jZXNzb3Igc3RhdGUgb24gdGhlIHN0YWNrLg0KLSAqDQotICogSWYgdGhyZWFkIHNhZmV0eSBpcyBlbmFibGVkIGZvciB0aGUgQyBydW50aW1lIGxpYnJhcnksIChYVF9VU0VfVEhSRUFEX1NBRkVfQ0xJQg0KLSAqIGlzIGRlZmluZWQpIHRoZW4gc3BhY2UgaXMgYWxsb2NhdGVkIHRvIHNhdmUgdGhlIEMgbGlicmFyeSBjb250ZXh0IGluIHRoZSBUQ0IuDQotICoNCi0gKiBBbGxvY2F0aW5nIGluc3VmZmljaWVudCBzdGFjayBzcGFjZSBpcyBhIGNvbW1vbiBzb3VyY2Ugb2YgaGFyZC10by1maW5kIGVycm9ycy4NCi0gKiBEdXJpbmcgZGV2ZWxvcG1lbnQsIGl0IGlzIGJlc3QgdG8gZW5hYmxlIHRoZSBGcmVlUlRPUyBzdGFjayBjaGVja2luZyBmZWF0dXJlcy4NCi0gKg0KLSAqIFVzYWdlOg0KLSAqDQotICogWFRfVVNFX1RIUkVBRF9TQUZFX0NMSUIgLS0gRGVmaW5lIHRoaXMgdG8gYSBub256ZXJvIHZhbHVlIHRvIGVuYWJsZSB0aHJlYWQtc2FmZQ0KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZSBvZiB0aGUgQyBsaWJyYXJ5LiBUaGlzIHdpbGwgcmVxdWlyZSBleHRyYSBzdGFjaw0KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlIHRvIGJlIGFsbG9jYXRlZCBmb3IgdGFza3MgdGhhdCB1c2UgdGhlIEMgbGlicmFyeQ0KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZW50cmFudCBmdW5jdGlvbnMuIFNlZSBiZWxvdyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4NCi0gKg0KLSAqIE5PVEU6IFRoZSBYdGVuc2EgdG9vbGNoYWluIHN1cHBvcnRzIG11bHRpcGxlIEMgbGlicmFyaWVzIGFuZCBub3QgYWxsIG9mIHRoZW0NCi0gKiBzdXBwb3J0IHRocmVhZCBzYWZldHkuIENoZWNrIHlvdXIgY29yZSBjb25maWd1cmF0aW9uIHRvIHNlZSB3aGljaCBDIGxpYnJhcnkNCi0gKiB3YXMgY2hvc2VuIGZvciB5b3VyIHN5c3RlbS4NCi0gKg0KLSAqIFhUX1NUQUNLX01JTl9TSVpFICAgICAgIC0tIFRoZSBtaW5pbXVtIHN0YWNrIHNpemUgZm9yIGFueSB0YXNrLiBJdCBpcyByZWNvbW1lbmRlZA0KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgeW91IGRvIG5vdCB1c2UgYSBzdGFjayBzbWFsbGVyIHRoYW4gdGhpcyBmb3IgYW55DQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzay4gSW4gY2FzZSB5b3Ugd2FudCB0byB1c2Ugc3RhY2tzIHNtYWxsZXIgdGhhbiB0aGlzDQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSwgeW91IG11c3QgdmVyaWZ5IHRoYXQgdGhlIHNtYWxsZXIgc2l6ZShzKSB3aWxsIHdvcmsNCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlciBhbGwgb3BlcmF0aW5nIGNvbmRpdGlvbnMuDQotICoNCi0gKiBYVF9TVEFDS19FWFRSQSAgICAgICAgICAtLSBUaGUgYW1vdW50IG9mIGV4dHJhIHN0YWNrIHNwYWNlIHRvIGFsbG9jYXRlIGZvciBhIHRhc2sNCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGRvZXMgbm90IG1ha2UgQyBsaWJyYXJ5IHJlZW50cmFudCBjYWxscy4gQWRkIHRoaXMNCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgYW1vdW50IG9mIHN0YWNrIHNwYWNlIHJlcXVpcmVkIGJ5IHRoZSB0YXNrIGl0c2VsZi4NCi0gKg0KLSAqIFhUX1NUQUNLX0VYVFJBX0NMSUIgICAgIC0tIFRoZSBhbW91bnQgb2Ygc3BhY2UgdG8gYWxsb2NhdGUgZm9yIEMgbGlicmFyeSBzdGF0ZS4NCi0gKg0KLSAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUQUNLIFJFUVVJUkVNRU5UUw0KKyoNCisqIFRoaXMgc2VjdGlvbiBkZWZpbmVzIHRoZSBtaW5pbXVtIHN0YWNrIHNpemUsIGFuZCB0aGUgZXh0cmEgc3BhY2UgcmVxdWlyZWQgdG8NCisqIGJlIGFsbG9jYXRlZCBmb3Igc2F2aW5nIGNvcHJvY2Vzc29yIHN0YXRlIGFuZC9vciBDIGxpYnJhcnkgc3RhdGUgaW5mb3JtYXRpb24NCisqIChpZiB0aHJlYWQgc2FmZXR5IGlzIGVuYWJsZWQgZm9yIHRoZSBDIGxpYnJhcnkpLiBUaGUgc2l6ZXMgYXJlIGluIGJ5dGVzLg0KKyoNCisqIFN0YWNrIHNpemVzIGZvciBpbmRpdmlkdWFsIHRhc2tzIHNob3VsZCBiZSBkZXJpdmVkIGZyb20gdGhlc2UgbWluaW1hIGJhc2VkIG9uDQorKiB0aGUgbWF4aW11bSBjYWxsIGRlcHRoIG9mIHRoZSB0YXNrIGFuZCB0aGUgbWF4aW11bSBsZXZlbCBvZiBpbnRlcnJ1cHQgbmVzdGluZy4NCisqIEEgbWluaW11bSBzdGFjayBzaXplIGlzIGRlZmluZWQgYnkgWFRfU1RBQ0tfTUlOX1NJWkUuIFRoaXMgbWluaW11bSBpcyBiYXNlZA0KKyogb24gdGhlIHJlcXVpcmVtZW50IGZvciBhIHRhc2sgdGhhdCBjYWxscyBub3RoaW5nIGVsc2UgYnV0IGNhbiBiZSBpbnRlcnJ1cHRlZC4NCisqIFRoaXMgYXNzdW1lcyB0aGF0IGludGVycnVwdCBoYW5kbGVycyBkbyBub3QgY2FsbCBtb3JlIHRoYW4gYSBmZXcgbGV2ZWxzIGRlZXAuDQorKiBJZiB0aGlzIGlzIG5vdCB0cnVlLCBpLmUuIG9uZSBvciBtb3JlIGludGVycnVwdCBoYW5kbGVycyBtYWtlIGRlZXAgY2FsbHMgdGhlbg0KKyogdGhlIG1pbmltdW0gbXVzdCBiZSBpbmNyZWFzZWQuDQorKg0KKyogSWYgdGhlIFh0ZW5zYSBwcm9jZXNzb3IgY29uZmlndXJhdGlvbiBpbmNsdWRlcyBjb3Byb2Nlc3NvcnMsIHRoZW4gc3BhY2UgaXMgDQorKiBhbGxvY2F0ZWQgdG8gc2F2ZSB0aGUgY29wcm9jZXNzb3Igc3RhdGUgb24gdGhlIHN0YWNrLg0KKyoNCisqIElmIHRocmVhZCBzYWZldHkgaXMgZW5hYmxlZCBmb3IgdGhlIEMgcnVudGltZSBsaWJyYXJ5LCAoWFRfVVNFX1RIUkVBRF9TQUZFX0NMSUINCisqIGlzIGRlZmluZWQpIHRoZW4gc3BhY2UgaXMgYWxsb2NhdGVkIHRvIHNhdmUgdGhlIEMgbGlicmFyeSBjb250ZXh0IGluIHRoZSBUQ0IuDQorKiANCisqIEFsbG9jYXRpbmcgaW5zdWZmaWNpZW50IHN0YWNrIHNwYWNlIGlzIGEgY29tbW9uIHNvdXJjZSBvZiBoYXJkLXRvLWZpbmQgZXJyb3JzLg0KKyogRHVyaW5nIGRldmVsb3BtZW50LCBpdCBpcyBiZXN0IHRvIGVuYWJsZSB0aGUgRnJlZVJUT1Mgc3RhY2sgY2hlY2tpbmcgZmVhdHVyZXMuDQorKg0KKyogVXNhZ2U6DQorKiANCisqIFhUX1VTRV9USFJFQURfU0FGRV9DTElCIC0tIERlZmluZSB0aGlzIHRvIGEgbm9uemVybyB2YWx1ZSB0byBlbmFibGUgdGhyZWFkLXNhZmUNCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZSBvZiB0aGUgQyBsaWJyYXJ5LiBUaGlzIHdpbGwgcmVxdWlyZSBleHRyYSBzdGFjaw0KKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2UgdG8gYmUgYWxsb2NhdGVkIGZvciB0YXNrcyB0aGF0IHVzZSB0aGUgQyBsaWJyYXJ5DQorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWVudHJhbnQgZnVuY3Rpb25zLiBTZWUgYmVsb3cgZm9yIG1vcmUgaW5mb3JtYXRpb24uDQorKiANCisqIE5PVEU6IFRoZSBYdGVuc2EgdG9vbGNoYWluIHN1cHBvcnRzIG11bHRpcGxlIEMgbGlicmFyaWVzIGFuZCBub3QgYWxsIG9mIHRoZW0NCisqIHN1cHBvcnQgdGhyZWFkIHNhZmV0eS4gQ2hlY2sgeW91ciBjb3JlIGNvbmZpZ3VyYXRpb24gdG8gc2VlIHdoaWNoIEMgbGlicmFyeQ0KKyogd2FzIGNob3NlbiBmb3IgeW91ciBzeXN0ZW0uDQorKiANCisqIFhUX1NUQUNLX01JTl9TSVpFICAgICAgIC0tIFRoZSBtaW5pbXVtIHN0YWNrIHNpemUgZm9yIGFueSB0YXNrLiBJdCBpcyByZWNvbW1lbmRlZA0KKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCB5b3UgZG8gbm90IHVzZSBhIHN0YWNrIHNtYWxsZXIgdGhhbiB0aGlzIGZvciBhbnkNCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2suIEluIGNhc2UgeW91IHdhbnQgdG8gdXNlIHN0YWNrcyBzbWFsbGVyIHRoYW4gdGhpcw0KKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSwgeW91IG11c3QgdmVyaWZ5IHRoYXQgdGhlIHNtYWxsZXIgc2l6ZShzKSB3aWxsIHdvcmsNCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVyIGFsbCBvcGVyYXRpbmcgY29uZGl0aW9ucy4NCisqDQorKiBYVF9TVEFDS19FWFRSQSAgICAgICAgICAtLSBUaGUgYW1vdW50IG9mIGV4dHJhIHN0YWNrIHNwYWNlIHRvIGFsbG9jYXRlIGZvciBhIHRhc2sNCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgZG9lcyBub3QgbWFrZSBDIGxpYnJhcnkgcmVlbnRyYW50IGNhbGxzLiBBZGQgdGhpcw0KKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGFtb3VudCBvZiBzdGFjayBzcGFjZSByZXF1aXJlZCBieSB0aGUgdGFzayBpdHNlbGYuDQorKg0KKyogWFRfU1RBQ0tfRVhUUkFfQ0xJQiAgICAgLS0gVGhlIGFtb3VudCBvZiBzcGFjZSB0byBhbGxvY2F0ZSBmb3IgQyBsaWJyYXJ5IHN0YXRlLg0KKyoNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogRXh0cmEgc3BhY2UgcmVxdWlyZWQgZm9yIGludGVycnVwdC9leGNlcHRpb24gaG9va3MuICovDQotICAgICNpZmRlZiBYVF9JTlRFWENfSE9PS1MNCi0gICAgICAgICNpZmRlZiBfX1hURU5TQV9DQUxMMF9BQklfXw0KLSAgICAgICAgICAgICNkZWZpbmUgU1RLX0lOVEVYQ19FWFRSQSAgICAweDIwMA0KLSAgICAgICAgI2Vsc2UNCi0gICAgICAgICAgICAjZGVmaW5lIFNUS19JTlRFWENfRVhUUkEgICAgMHgxODANCi0gICAgICAgICNlbmRpZg0KLSAgICAjZWxzZQ0KLSAgICAgICAgI2RlZmluZSBTVEtfSU5URVhDX0VYVFJBICAgICAgICAwDQotICAgICNlbmRpZg0KKyNpZmRlZiBYVF9JTlRFWENfSE9PS1MNCisgICNpZmRlZiBfX1hURU5TQV9DQUxMMF9BQklfXw0KKyAgICAjZGVmaW5lIFNUS19JTlRFWENfRVhUUkEgICAgICAgIDB4MjAwDQorICAjZWxzZQ0KKyAgICAjZGVmaW5lIFNUS19JTlRFWENfRVhUUkEgICAgICAgIDB4MTgwDQorICAjZW5kaWYNCisjZWxzZQ0KKyAgI2RlZmluZSBTVEtfSU5URVhDX0VYVFJBICAgICAgICAgIDANCisjZW5kaWYNCiANCiAvKiBDaGVjayBDIGxpYnJhcnkgdGhyZWFkIHNhZmV0eSBzdXBwb3J0IGFuZCBjb21wdXRlIHNpemUgb2YgQyBsaWJyYXJ5IHNhdmUgYXJlYS4NCi0gKiBGb3IgdGhlIHN1cHBvcnRlZCBsaWJyYXJpZXMsIHdlIGVuYWJsZSB0aHJlYWQgc2FmZXR5IGJ5IGRlZmF1bHQsIGFuZCB0aGlzIGNhbg0KLSAqIGJlIG92ZXJyaWRkZW4gZnJvbSB0aGUgY29tcGlsZXIvbWFrZSBjb21tYW5kIGxpbmUuICovDQotICAgICNpZiAoIFhTSEFMX0NMSUIgPT0gWFRIQUxfQ0xJQl9ORVdMSUIgKSB8fCAoIFhTSEFMX0NMSUIgPT0gWFRIQUxfQ0xJQl9YQ0xJQiApDQotICAgICAgICAjaWZuZGVmIFhUX1VTRV9USFJFQURfU0FGRV9DTElCDQotICAgICAgICAgICAgI2RlZmluZSBYVF9VU0VfVEhSRUFEX1NBRkVfQ0xJQiAgICAxDQotICAgICAgICAjZW5kaWYNCi0gICAgI2Vsc2UNCi0gICAgICAgICNkZWZpbmUgWFRfVVNFX1RIUkVBRF9TQUZFX0NMSUIgICAgICAgIDANCisgICBGb3IgdGhlIHN1cHBvcnRlZCBsaWJyYXJpZXMsIHdlIGVuYWJsZSB0aHJlYWQgc2FmZXR5IGJ5IGRlZmF1bHQsIGFuZCB0aGlzIGNhbg0KKyAgIGJlIG92ZXJyaWRkZW4gZnJvbSB0aGUgY29tcGlsZXIvbWFrZSBjb21tYW5kIGxpbmUuICovDQorI2lmIChYU0hBTF9DTElCID09IFhUSEFMX0NMSUJfTkVXTElCKSB8fCAoWFNIQUxfQ0xJQiA9PSBYVEhBTF9DTElCX1hDTElCKQ0KKyAgI2lmbmRlZiBYVF9VU0VfVEhSRUFEX1NBRkVfQ0xJQg0KKyAgICAjZGVmaW5lIFhUX1VTRV9USFJFQURfU0FGRV9DTElCICAgICAgICAgMQ0KKyAgI2VuZGlmDQorI2Vsc2UNCisgICNkZWZpbmUgWFRfVVNFX1RIUkVBRF9TQUZFX0NMSUIgICAgICAgICAgIDANCisjZW5kaWYNCisNCisjaWYgWFRfVVNFX1RIUkVBRF9TQUZFX0NMSUIgPiAwdQ0KKyAgI2lmIFhTSEFMX0NMSUIgPT0gWFRIQUxfQ0xJQl9YQ0xJQg0KKyAgICAjZGVmaW5lIFhUX0hBVkVfVEhSRUFEX1NBRkVfQ0xJQiAgICAgICAgMQ0KKyAgICAjaWYgIWRlZmluZWQgX19BU1NFTUJMRVJfXw0KKyAgICAgICNpbmNsdWRlIDxzeXMvcmVlbnQuaD4NCisgICAgICAjZGVmaW5lIFhUX0NMSUJfQ09OVEVYVF9BUkVBX1NJWkUgICAgICgoc2l6ZW9mKHN0cnVjdCBfcmVlbnQpICsgMTUpICsgKC0xNikpDQorICAgICAgI2RlZmluZSBYVF9DTElCX0dMT0JBTF9QVFIgICAgICAgICAgICBfcmVlbnRfcHRyDQorICAgICAgI2RlZmluZSBfUkVFTlRfSU5JVF9QVFIgICAgICAgICAgICAgICBfaW5pdF9yZWVudA0KKyAgICAgICNkZWZpbmUgX2ltcHVyZV9wdHIgICAgICAgICAgICAgICAgICAgX3JlZW50X3B0cg0KKw0KKyAgICAgIHZvaWQgX3JlY2xhaW1fcmVlbnQodm9pZCAqIHB0cik7DQogICAgICNlbmRpZg0KLQ0KLSAgICAjaWYgWFRfVVNFX1RIUkVBRF9TQUZFX0NMSUIgPiAwdQ0KLSAgICAgICAgI2lmIFhTSEFMX0NMSUIgPT0gWFRIQUxfQ0xJQl9YQ0xJQg0KLSAgICAgICAgICAgICNkZWZpbmUgWFRfSEFWRV9USFJFQURfU0FGRV9DTElCICAgICAgICAgMQ0KLSAgICAgICAgICAgICNpZiAhZGVmaW5lZCBfX0FTU0VNQkxFUl9fDQotICAgICAgICAgICAgICAgICNpbmNsdWRlIDxzeXMvcmVlbnQuaD4NCi0gICAgICAgICAgICAgICAgI2RlZmluZSBYVF9DTElCX0NPTlRFWFRfQVJFQV9TSVpFICAgICggKCBzaXplb2YoIHN0cnVjdCBfcmVlbnQgKSArIDE1ICkgKyAoIC0xNiApICkNCi0gICAgICAgICAgICAgICAgI2RlZmluZSBYVF9DTElCX0dMT0JBTF9QVFIgICAgICAgICAgIF9yZWVudF9wdHINCi0gICAgICAgICAgICAgICAgI2RlZmluZSBfUkVFTlRfSU5JVF9QVFIgICAgICAgICAgICAgIF9pbml0X3JlZW50DQotICAgICAgICAgICAgICAgICNkZWZpbmUgX2ltcHVyZV9wdHIgICAgICAgICAgICAgICAgICBfcmVlbnRfcHRyDQotDQotICAgICAgICAgICAgICAgIHZvaWQgX3JlY2xhaW1fcmVlbnQoIHZvaWQgKiBwdHIgKTsNCi0gICAgICAgICAgICAjZW5kaWYNCi0gICAgICAgICNlbGlmIFhTSEFMX0NMSUIgPT0gWFRIQUxfQ0xJQl9ORVdMSUINCi0gICAgICAgICAgICAjZGVmaW5lIFhUX0hBVkVfVEhSRUFEX1NBRkVfQ0xJQiAgICAgICAgIDENCi0gICAgICAgICAgICAjaWYgIWRlZmluZWQgX19BU1NFTUJMRVJfXw0KLSAgICAgICAgICAgICAgICAjaW5jbHVkZSA8c3lzL3JlZW50Lmg+DQotICAgICAgICAgICAgICAgICNkZWZpbmUgWFRfQ0xJQl9DT05URVhUX0FSRUFfU0laRSAgICAoICggc2l6ZW9mKCBzdHJ1Y3QgX3JlZW50ICkgKyAxNSApICsgKCAtMTYgKSApDQotICAgICAgICAgICAgICAgICNkZWZpbmUgWFRfQ0xJQl9HTE9CQUxfUFRSICAgICAgICAgICBfaW1wdXJlX3B0cg0KLSAgICAgICAgICAgICNlbmRpZg0KLSAgICAgICAgI2Vsc2UgLyogaWYgWFNIQUxfQ0xJQiA9PSBYVEhBTF9DTElCX1hDTElCICovDQotICAgICAgICAgICAgI2RlZmluZSBYVF9IQVZFX1RIUkVBRF9TQUZFX0NMSUIgICAgICAgICAwDQotICAgICAgICAgICAgI2Vycm9yIFRoZSBzZWxlY3RlZCBDIHJ1bnRpbWUgbGlicmFyeSBpcyBub3QgdGhyZWFkIHNhZmUuDQotICAgICAgICAjZW5kaWYgLyogaWYgWFNIQUxfQ0xJQiA9PSBYVEhBTF9DTElCX1hDTElCICovDQotICAgICNlbHNlIC8qIGlmIFhUX1VTRV9USFJFQURfU0FGRV9DTElCID4gMHUgKi8NCi0gICAgICAgICNkZWZpbmUgWFRfQ0xJQl9DT05URVhUX0FSRUFfU0laRSAgICAwDQotICAgICNlbmRpZiAvKiBpZiBYVF9VU0VfVEhSRUFEX1NBRkVfQ0xJQiA+IDB1ICovDQorICAjZWxpZiBYU0hBTF9DTElCID09IFhUSEFMX0NMSUJfTkVXTElCDQorICAgICNkZWZpbmUgWFRfSEFWRV9USFJFQURfU0FGRV9DTElCICAgICAgICAxDQorICAgICNpZiAhZGVmaW5lZCBfX0FTU0VNQkxFUl9fDQorICAgICAgI2luY2x1ZGUgPHN5cy9yZWVudC5oPg0KKyAgICAgICNkZWZpbmUgWFRfQ0xJQl9DT05URVhUX0FSRUFfU0laRSAgICAgKChzaXplb2Yoc3RydWN0IF9yZWVudCkgKyAxNSkgKyAoLTE2KSkNCisgICAgICAjZGVmaW5lIFhUX0NMSUJfR0xPQkFMX1BUUiAgICAgICAgICAgIF9pbXB1cmVfcHRyDQorICAgICNlbmRpZg0KKyAgI2Vsc2UNCisgICAgI2RlZmluZSBYVF9IQVZFX1RIUkVBRF9TQUZFX0NMSUIgICAgICAgIDANCisgICAgI2Vycm9yIFRoZSBzZWxlY3RlZCBDIHJ1bnRpbWUgbGlicmFyeSBpcyBub3QgdGhyZWFkIHNhZmUuDQorICAjZW5kaWYNCisjZWxzZQ0KKyAgI2RlZmluZSBYVF9DTElCX0NPTlRFWFRfQVJFQV9TSVpFICAgICAgICAgMA0KKyNlbmRpZg0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotICogIEV4dHJhIHNpemUgLS0gaW50ZXJydXB0IGZyYW1lIHBsdXMgY29wcm9jZXNzb3Igc2F2ZSBhcmVhIHBsdXMgaG9vayBzcGFjZS4NCi0gKiAgTk9URTogTWFrZSBzdXJlIFhUX0lOVEVYQ19IT09LUyBpcyB1bmRlZmluZWQgdW5sZXNzIHlvdSByZWFsbHkgbmVlZCB0aGUgaG9va3MuDQotICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQotICAgICNpZmRlZiBfX1hURU5TQV9DQUxMMF9BQklfXw0KLSAgICAgICAgI2RlZmluZSBYVF9YVFJBX1NJWkUgICAgKCBYVF9TVEtfRlJNU1ogKyBTVEtfSU5URVhDX0VYVFJBICsgMHgxMCArIFhUX0NQX1NJWkUgKQ0KLSAgICAjZWxzZQ0KLSAgICAgICAgI2RlZmluZSBYVF9YVFJBX1NJWkUgICAgKCBYVF9TVEtfRlJNU1ogKyBTVEtfSU5URVhDX0VYVFJBICsgMHgyMCArIFhUX0NQX1NJWkUgKQ0KLSAgICAjZW5kaWYNCisgIEV4dHJhIHNpemUgLS0gaW50ZXJydXB0IGZyYW1lIHBsdXMgY29wcm9jZXNzb3Igc2F2ZSBhcmVhIHBsdXMgaG9vayBzcGFjZS4NCisgIE5PVEU6IE1ha2Ugc3VyZSBYVF9JTlRFWENfSE9PS1MgaXMgdW5kZWZpbmVkIHVubGVzcyB5b3UgcmVhbGx5IG5lZWQgdGhlIGhvb2tzLg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2lmZGVmIF9fWFRFTlNBX0NBTEwwX0FCSV9fDQorICAjZGVmaW5lIFhUX1hUUkFfU0laRSAgICAgICAgICAgIChYVF9TVEtfRlJNU1ogKyBTVEtfSU5URVhDX0VYVFJBICsgMHgxMCArIFhUX0NQX1NJWkUpDQorI2Vsc2UNCisgICNkZWZpbmUgWFRfWFRSQV9TSVpFICAgICAgICAgICAgKFhUX1NUS19GUk1TWiArIFNUS19JTlRFWENfRVhUUkEgKyAweDIwICsgWFRfQ1BfU0laRSkNCisjZW5kaWYNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLSAqICBTcGFjZSBhbGxvY2F0ZWQgZm9yIHVzZXIgY29kZSAtLSBmdW5jdGlvbiBjYWxscyBhbmQgbG9jYWwgdmFyaWFibGVzLg0KLSAqICBOT1RFOiBUaGlzIG51bWJlciBjYW4gYmUgYWRqdXN0ZWQgdG8gc3VpdCB5b3VyIG5lZWRzLiBZb3UgbXVzdCB2ZXJpZnkgdGhhdCB0aGUNCi0gKiAgYW1vdW50IG9mIHNwYWNlIHlvdSByZXNlcnZlIGlzIGFkZXF1YXRlIGZvciB0aGUgd29yc3QtY2FzZSBjb25kaXRpb25zIGluIHlvdXINCi0gKiAgYXBwbGljYXRpb24uDQotICogIE5PVEU6IFRoZSB3aW5kb3dlZCBBQkkgcmVxdWlyZXMgbW9yZSBzdGFjaywgc2luY2Ugc3BhY2UgaGFzIHRvIGJlIHJlc2VydmVkDQotICogIGZvciBzcGlsbGluZyByZWdpc3RlciB3aW5kb3dzLg0KLSAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KLSAgICAjaWZkZWYgX19YVEVOU0FfQ0FMTDBfQUJJX18NCi0gICAgICAgICNkZWZpbmUgWFRfVVNFUl9TSVpFICAgIDB4MjAwDQotICAgICNlbHNlDQotICAgICAgICAjZGVmaW5lIFhUX1VTRVJfU0laRSAgICAweDQwMA0KLSAgICAjZW5kaWYNCisgIFNwYWNlIGFsbG9jYXRlZCBmb3IgdXNlciBjb2RlIC0tIGZ1bmN0aW9uIGNhbGxzIGFuZCBsb2NhbCB2YXJpYWJsZXMuDQorICBOT1RFOiBUaGlzIG51bWJlciBjYW4gYmUgYWRqdXN0ZWQgdG8gc3VpdCB5b3VyIG5lZWRzLiBZb3UgbXVzdCB2ZXJpZnkgdGhhdCB0aGUNCisgIGFtb3VudCBvZiBzcGFjZSB5b3UgcmVzZXJ2ZSBpcyBhZGVxdWF0ZSBmb3IgdGhlIHdvcnN0LWNhc2UgY29uZGl0aW9ucyBpbiB5b3VyDQorICBhcHBsaWNhdGlvbi4NCisgIE5PVEU6IFRoZSB3aW5kb3dlZCBBQkkgcmVxdWlyZXMgbW9yZSBzdGFjaywgc2luY2Ugc3BhY2UgaGFzIHRvIGJlIHJlc2VydmVkDQorICBmb3Igc3BpbGxpbmcgcmVnaXN0ZXIgd2luZG93cy4NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyNpZmRlZiBfX1hURU5TQV9DQUxMMF9BQklfXw0KKyAgI2RlZmluZSBYVF9VU0VSX1NJWkUgICAgICAgICAgICAweDIwMA0KKyNlbHNlDQorICAjZGVmaW5lIFhUX1VTRVJfU0laRSAgICAgICAgICAgIDB4NDAwDQorI2VuZGlmDQogDQogLyogTWluaW11bSByZWNvbW1lbmRlZCBzdGFjayBzaXplLiAqLw0KLSAgICAjZGVmaW5lIFhUX1NUQUNLX01JTl9TSVpFICAgICAgKCAoIFhUX1hUUkFfU0laRSArIFhUX1VTRVJfU0laRSApIC8gc2l6ZW9mKCB1bnNpZ25lZCBjaGFyICkgKQ0KKyNkZWZpbmUgWFRfU1RBQ0tfTUlOX1NJWkUgICAgICAgICAoKFhUX1hUUkFfU0laRSArIFhUX1VTRVJfU0laRSkgLyBzaXplb2YodW5zaWduZWQgY2hhcikpDQogDQogLyogT1Mgb3ZlcmhlYWQgd2l0aCBhbmQgd2l0aG91dCBDIGxpYnJhcnkgdGhyZWFkIGNvbnRleHQuICovDQotICAgICNkZWZpbmUgWFRfU1RBQ0tfRVhUUkEgICAgICAgICAoIFhUX1hUUkFfU0laRSApDQotICAgICNkZWZpbmUgWFRfU1RBQ0tfRVhUUkFfQ0xJQiAgICAoIFhUX1hUUkFfU0laRSArIFhUX0NMSUJfQ09OVEVYVF9BUkVBX1NJWkUgKQ0KKyNkZWZpbmUgWFRfU1RBQ0tfRVhUUkEgICAgICAgICAgICAgIChYVF9YVFJBX1NJWkUpDQorI2RlZmluZSBYVF9TVEFDS19FWFRSQV9DTElCICAgICAgICAgKFhUX1hUUkFfU0laRSArIFhUX0NMSUJfQ09OVEVYVF9BUkVBX1NJWkUpDQogDQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgfQ0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQogDQogI2VuZGlmIC8qIFhURU5TQV9DT05GSUdfSCAqLw0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL1RoaXJkUGFydHkvWENDL1h0ZW5zYS94dGVuc2FfY29udGV4dC5oIGIvcG9ydGFibGUvVGhpcmRQYXJ0eS9YQ0MvWHRlbnNhL3h0ZW5zYV9jb250ZXh0LmgKaW5kZXggNjk1ZDQ0MS4uMTIyZDIzNiAxMDA2NDQKLS0tIGEvcG9ydGFibGUvVGhpcmRQYXJ0eS9YQ0MvWHRlbnNhL3h0ZW5zYV9jb250ZXh0LmgKKysrIGIvcG9ydGFibGUvVGhpcmRQYXJ0eS9YQ0MvWHRlbnNhL3h0ZW5zYV9jb250ZXh0LmgKQEAgLTEsMyArMSw0IEBACisNCiAvKg0KICAqIENvcHlyaWdodCAoYykgMjAxNS0yMDE5IENhZGVuY2UgRGVzaWduIFN5c3RlbXMsIEluYy4NCiAgKg0KQEAgLTM4LDcgKzM5LDcgQEAKICNkZWZpbmUgWFRFTlNBX0NPTlRFWFRfSA0KIA0KICNpZmRlZiBfX0FTU0VNQkxFUl9fDQotICAgICNpbmNsdWRlICAgIDx4dGVuc2EvY29yZWFzbS5oPg0KKyNpbmNsdWRlICAgIDx4dGVuc2EvY29yZWFzbS5oPg0KICNlbmRpZg0KIA0KICNpbmNsdWRlICAgIDx4dGVuc2EvY29uZmlnL3RpZS5oPg0KQEAgLTQ3LDMxMCArNDgsMzA0IEBACiANCiANCiAvKiBBbGlnbiBhIHZhbHVlIHVwIHRvIG5lYXJlc3Qgbi1ieXRlIGJvdW5kYXJ5LCB3aGVyZSBuIGlzIGEgcG93ZXIgb2YgMi4gKi8NCi0jZGVmaW5lIEFMSUdOVVAoIG4sIHZhbCApICAgICggKCAoIHZhbCApICsgKCBuICkgLSAxICkgJiAtKCBuICkgKQ0KKyNkZWZpbmUgQUxJR05VUChuLCB2YWwpICgoKHZhbCkgKyAobiktMSkgJiAtKG4pKQ0KIA0KIA0KIC8qDQotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLSAqIE1hY3JvcyB0aGF0IGhlbHAgZGVmaW5lIHN0cnVjdHVyZXMgZm9yIGJvdGggQyBhbmQgYXNzZW1ibGVyLg0KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0gKi8NCi0jaWYgZGVmaW5lZCggX0FTTUxBTkdVQUdFICkgfHwgZGVmaW5lZCggX19BU1NFTUJMRVJfXyApDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAgTWFjcm9zIHRoYXQgaGVscCBkZWZpbmUgc3RydWN0dXJlcyBmb3IgYm90aCBDIGFuZCBhc3NlbWJsZXIuDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyovDQorI2lmIGRlZmluZWQoX0FTTUxBTkdVQUdFKSB8fCBkZWZpbmVkKF9fQVNTRU1CTEVSX18pDQogDQotICAgICNkZWZpbmUgU1RSVUNUX0JFR0lOICAgIC5wdXNoc2VjdGlvbi50ZXh0OyAuc3RydWN0IDANCi0gICAgI2RlZmluZSBTVFJVQ1RfRklFTEQoIGN0eXBlLCBzaXplLCBhc25hbWUsIG5hbWUgKSAgICAgICAgYXNuYW1lOi5zcGFjZSBzaXplDQotICAgICNkZWZpbmUgU1RSVUNUX0FGSUVMRCggY3R5cGUsIHNpemUsIGFzbmFtZSwgbmFtZSwgbiApICAgIGFzbmFtZTouc3BhY2UoIHNpemUgKSAqKCBuICkNCi0gICAgI2RlZmluZSBTVFJVQ1RfRU5EKCBzbmFtZSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25hbWUgIyMgU2l6ZTo7IC5wb3BzZWN0aW9uDQorI2RlZmluZSBTVFJVQ1RfQkVHSU4gICAgICAgICAgICAucHVzaHNlY3Rpb24gLnRleHQ7IC5zdHJ1Y3QgMA0KKyNkZWZpbmUgU1RSVUNUX0ZJRUxEKGN0eXBlLHNpemUsYXNuYW1lLG5hbWUpICAgIGFzbmFtZTogLnNwYWNlICBzaXplDQorI2RlZmluZSBTVFJVQ1RfQUZJRUxEKGN0eXBlLHNpemUsYXNuYW1lLG5hbWUsbikgYXNuYW1lOiAuc3BhY2UgIChzaXplKSoobikNCisjZGVmaW5lIFNUUlVDVF9FTkQoc25hbWUpICAgICAgIHNuYW1lIyNTaXplOjsgLnBvcHNlY3Rpb24NCiANCiAjZWxzZQ0KIA0KLSAgICAjZGVmaW5lIFNUUlVDVF9CRUdJTiAgICB0eXBlZGVmIHN0cnVjdCB7DQotICAgICNkZWZpbmUgU1RSVUNUX0ZJRUxEKCBjdHlwZSwgc2l6ZSwgYXNuYW1lLCBuYW1lICkgICAgICAgIGN0eXBlIG5hbWU7DQotICAgICNkZWZpbmUgU1RSVUNUX0FGSUVMRCggY3R5cGUsIHNpemUsIGFzbmFtZSwgbmFtZSwgbiApICAgIGN0eXBlIG5hbWVbIG4gXTsNCi0gICAgI2RlZmluZSBTVFJVQ1RfRU5EKCBzbmFtZSApIFwNCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgc25hbWU7DQorI2RlZmluZSBTVFJVQ1RfQkVHSU4gICAgICAgICAgICB0eXBlZGVmIHN0cnVjdCB7DQorI2RlZmluZSBTVFJVQ1RfRklFTEQoY3R5cGUsc2l6ZSxhc25hbWUsbmFtZSkgICAgY3R5cGUgICBuYW1lOw0KKyNkZWZpbmUgU1RSVUNUX0FGSUVMRChjdHlwZSxzaXplLGFzbmFtZSxuYW1lLG4pIGN0eXBlICAgbmFtZVtuXTsNCisjZGVmaW5lIFNUUlVDVF9FTkQoc25hbWUpICAgICAgIH0gc25hbWU7DQogDQogI2VuZGlmIC8vX0FTTUxBTkdVQUdFIHx8IF9fQVNTRU1CTEVSX18NCiANCiANCiAvKg0KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0gKiBJTlRFUlJVUFQvRVhDRVBUSU9OIFNUQUNLIEZSQU1FIEZPUiBBIFRIUkVBRCBPUiBORVNURUQgSU5URVJSVVBUDQotICoNCi0gKiBBIHN0YWNrIGZyYW1lIG9mIHRoaXMgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCBmb3IgYW55IGludGVycnVwdCBvciBleGNlcHRpb24uDQotICogSXQgZ29lcyBvbiB0aGUgY3VycmVudCBzdGFjay4gSWYgdGhlIFJUT1MgaGFzIGEgc3lzdGVtIHN0YWNrIGZvciBoYW5kbGluZw0KLSAqIGludGVycnVwdHMsIGV2ZXJ5IHRocmVhZCBzdGFjayBtdXN0IGFsbG93IHNwYWNlIGZvciBqdXN0IG9uZSBpbnRlcnJ1cHQgc3RhY2sNCi0gKiBmcmFtZSwgdGhlbiBuZXN0ZWQgaW50ZXJydXB0IHN0YWNrIGZyYW1lcyBnbyBvbiB0aGUgc3lzdGVtIHN0YWNrLg0KLSAqDQotICogVGhlIGZyYW1lIGluY2x1ZGVzIGJhc2ljIHJlZ2lzdGVycyAoZXhwbGljaXQpIGFuZCAiZXh0cmEiIHJlZ2lzdGVycyBpbnRyb2R1Y2VkDQotICogYnkgdXNlciBUSUUgb3IgdGhlIHVzZSBvZiB0aGUgTUFDMTYgb3B0aW9uIGluIHRoZSB1c2VyJ3MgWHRlbnNhIGNvbmZpZy4NCi0gKiBUaGUgZnJhbWUgc2l6ZSBpcyBtaW5pbWl6ZWQgYnkgb21pdHRpbmcgcmVncyBub3QgYXBwbGljYWJsZSB0byB1c2VyJ3MgY29uZmlnLg0KLSAqDQotICogRm9yIFdpbmRvd2VkIEFCSSwgdGhpcyBzdGFjayBmcmFtZSBpbmNsdWRlcyB0aGUgaW50ZXJydXB0ZWUncyBiYXNlIHNhdmUgYXJlYSwNCi0gKiBhbm90aGVyIGJhc2Ugc2F2ZSBhcmVhIHRvIG1hbmFnZSBnY2MgbmVzdGVkIGZ1bmN0aW9ucywgYW5kIGEgbGl0dGxlIHRlbXBvcmFyeQ0KLSAqIHNwYWNlIHRvIGhlbHAgbWFuYWdlIHRoZSBzcGlsbGluZyBvZiB0aGUgcmVnaXN0ZXIgd2luZG93cy4NCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotICovDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAgSU5URVJSVVBUL0VYQ0VQVElPTiBTVEFDSyBGUkFNRSBGT1IgQSBUSFJFQUQgT1IgTkVTVEVEIElOVEVSUlVQVA0KIA0KLVNUUlVDVF9CRUdJTiBTVFJVQ1RfRklFTEQoIGxvbmcsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgNCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBYVF9TVEtfRVhJVCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBleGl0ICkgICAgICAvKiBleGl0IHBvaW50IGZvciBkaXNwYXRjaCAqLw0KLVNUUlVDVF9GSUVMRCggbG9uZywgNCwgWFRfU1RLX1BDLCBwYyApIC8qIHJldHVybiBQQyAqLw0KLVNUUlVDVF9GSUVMRCggbG9uZywgNCwgWFRfU1RLX1BTLCBwcyApIC8qIHJldHVybiBQUyAqLw0KLVNUUlVDVF9GSUVMRCggbG9uZywgNCwgWFRfU1RLX0EwLCBhMCApDQotU1RSVUNUX0ZJRUxEKCBsb25nLCA0LCBYVF9TVEtfQTEsIGExICkgLyogc3RhY2sgcG9pbnRlciBiZWZvcmUgaW50ZXJydXB0ICovDQotU1RSVUNUX0ZJRUxEKCBsb25nLCA0LCBYVF9TVEtfQTIsIGEyICkNCi1TVFJVQ1RfRklFTEQoIGxvbmcsIDQsIFhUX1NUS19BMywgYTMgKQ0KLVNUUlVDVF9GSUVMRCggbG9uZywgNCwgWFRfU1RLX0E0LCBhNCApDQotU1RSVUNUX0ZJRUxEKCBsb25nLCA0LCBYVF9TVEtfQTUsIGE1ICkNCi1TVFJVQ1RfRklFTEQoIGxvbmcsIDQsIFhUX1NUS19BNiwgYTYgKQ0KLVNUUlVDVF9GSUVMRCggbG9uZywgNCwgWFRfU1RLX0E3LCBhNyApDQotU1RSVUNUX0ZJRUxEKCBsb25nLCA0LCBYVF9TVEtfQTgsIGE4ICkNCi1TVFJVQ1RfRklFTEQoIGxvbmcsIDQsIFhUX1NUS19BOSwgYTkgKQ0KLVNUUlVDVF9GSUVMRCggbG9uZywgNCwgWFRfU1RLX0ExMCwgYTEwICkNCi1TVFJVQ1RfRklFTEQoIGxvbmcsIDQsIFhUX1NUS19BMTEsIGExMSApDQotU1RSVUNUX0ZJRUxEKCBsb25nLCA0LCBYVF9TVEtfQTEyLCBhMTIgKQ0KLVNUUlVDVF9GSUVMRCggbG9uZywgNCwgWFRfU1RLX0ExMywgYTEzICkNCi1TVFJVQ1RfRklFTEQoIGxvbmcsIDQsIFhUX1NUS19BMTQsIGExNCApDQotU1RSVUNUX0ZJRUxEKCBsb25nLCA0LCBYVF9TVEtfQTE1LCBhMTUgKQ0KLVNUUlVDVF9GSUVMRCggbG9uZywgNCwgWFRfU1RLX1NBUiwgc2FyICkNCi1TVFJVQ1RfRklFTEQoIGxvbmcsIDQsIFhUX1NUS19FWENDQVVTRSwgZXhjY2F1c2UgKQ0KLVNUUlVDVF9GSUVMRCggbG9uZywgNCwgWFRfU1RLX0VYQ1ZBRERSLCBleGN2YWRkciApDQorICBBIHN0YWNrIGZyYW1lIG9mIHRoaXMgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCBmb3IgYW55IGludGVycnVwdCBvciBleGNlcHRpb24uDQorICBJdCBnb2VzIG9uIHRoZSBjdXJyZW50IHN0YWNrLiBJZiB0aGUgUlRPUyBoYXMgYSBzeXN0ZW0gc3RhY2sgZm9yIGhhbmRsaW5nIA0KKyAgaW50ZXJydXB0cywgZXZlcnkgdGhyZWFkIHN0YWNrIG11c3QgYWxsb3cgc3BhY2UgZm9yIGp1c3Qgb25lIGludGVycnVwdCBzdGFjayANCisgIGZyYW1lLCB0aGVuIG5lc3RlZCBpbnRlcnJ1cHQgc3RhY2sgZnJhbWVzIGdvIG9uIHRoZSBzeXN0ZW0gc3RhY2suDQorDQorICBUaGUgZnJhbWUgaW5jbHVkZXMgYmFzaWMgcmVnaXN0ZXJzIChleHBsaWNpdCkgYW5kICJleHRyYSIgcmVnaXN0ZXJzIGludHJvZHVjZWQgDQorICBieSB1c2VyIFRJRSBvciB0aGUgdXNlIG9mIHRoZSBNQUMxNiBvcHRpb24gaW4gdGhlIHVzZXIncyBYdGVuc2EgY29uZmlnLg0KKyAgVGhlIGZyYW1lIHNpemUgaXMgbWluaW1pemVkIGJ5IG9taXR0aW5nIHJlZ3Mgbm90IGFwcGxpY2FibGUgdG8gdXNlcidzIGNvbmZpZy4NCisNCisgIEZvciBXaW5kb3dlZCBBQkksIHRoaXMgc3RhY2sgZnJhbWUgaW5jbHVkZXMgdGhlIGludGVycnVwdGVlJ3MgYmFzZSBzYXZlIGFyZWEsDQorICBhbm90aGVyIGJhc2Ugc2F2ZSBhcmVhIHRvIG1hbmFnZSBnY2MgbmVzdGVkIGZ1bmN0aW9ucywgYW5kIGEgbGl0dGxlIHRlbXBvcmFyeSANCisgIHNwYWNlIHRvIGhlbHAgbWFuYWdlIHRoZSBzcGlsbGluZyBvZiB0aGUgcmVnaXN0ZXIgd2luZG93cy4NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorKi8NCisNCitTVFJVQ1RfQkVHSU4NCitTVFJVQ1RfRklFTEQgKGxvbmcsIDQsIFhUX1NUS19FWElULCAgICAgZXhpdCkgLyogZXhpdCBwb2ludCBmb3IgZGlzcGF0Y2ggKi8NCitTVFJVQ1RfRklFTEQgKGxvbmcsIDQsIFhUX1NUS19QQywgICAgICAgcGMpICAgLyogcmV0dXJuIFBDICovDQorU1RSVUNUX0ZJRUxEIChsb25nLCA0LCBYVF9TVEtfUFMsICAgICAgIHBzKSAgIC8qIHJldHVybiBQUyAqLw0KK1NUUlVDVF9GSUVMRCAobG9uZywgNCwgWFRfU1RLX0EwLCAgICAgICBhMCkNCitTVFJVQ1RfRklFTEQgKGxvbmcsIDQsIFhUX1NUS19BMSwgICAgICAgYTEpICAgLyogc3RhY2sgcG9pbnRlciBiZWZvcmUgaW50ZXJydXB0ICovDQorU1RSVUNUX0ZJRUxEIChsb25nLCA0LCBYVF9TVEtfQTIsICAgICAgIGEyKQ0KK1NUUlVDVF9GSUVMRCAobG9uZywgNCwgWFRfU1RLX0EzLCAgICAgICBhMykNCitTVFJVQ1RfRklFTEQgKGxvbmcsIDQsIFhUX1NUS19BNCwgICAgICAgYTQpDQorU1RSVUNUX0ZJRUxEIChsb25nLCA0LCBYVF9TVEtfQTUsICAgICAgIGE1KQ0KK1NUUlVDVF9GSUVMRCAobG9uZywgNCwgWFRfU1RLX0E2LCAgICAgICBhNikNCitTVFJVQ1RfRklFTEQgKGxvbmcsIDQsIFhUX1NUS19BNywgICAgICAgYTcpDQorU1RSVUNUX0ZJRUxEIChsb25nLCA0LCBYVF9TVEtfQTgsICAgICAgIGE4KQ0KK1NUUlVDVF9GSUVMRCAobG9uZywgNCwgWFRfU1RLX0E5LCAgICAgICBhOSkNCitTVFJVQ1RfRklFTEQgKGxvbmcsIDQsIFhUX1NUS19BMTAsICAgICAgYTEwKQ0KK1NUUlVDVF9GSUVMRCAobG9uZywgNCwgWFRfU1RLX0ExMSwgICAgICBhMTEpDQorU1RSVUNUX0ZJRUxEIChsb25nLCA0LCBYVF9TVEtfQTEyLCAgICAgIGExMikNCitTVFJVQ1RfRklFTEQgKGxvbmcsIDQsIFhUX1NUS19BMTMsICAgICAgYTEzKQ0KK1NUUlVDVF9GSUVMRCAobG9uZywgNCwgWFRfU1RLX0ExNCwgICAgICBhMTQpDQorU1RSVUNUX0ZJRUxEIChsb25nLCA0LCBYVF9TVEtfQTE1LCAgICAgIGExNSkNCitTVFJVQ1RfRklFTEQgKGxvbmcsIDQsIFhUX1NUS19TQVIsICAgICAgc2FyKQ0KK1NUUlVDVF9GSUVMRCAobG9uZywgNCwgWFRfU1RLX0VYQ0NBVVNFLCBleGNjYXVzZSkNCitTVFJVQ1RfRklFTEQgKGxvbmcsIDQsIFhUX1NUS19FWENWQUREUiwgZXhjdmFkZHIpDQogI2lmIFhDSEFMX0hBVkVfTE9PUFMNCi0gICAgU1RSVUNUX0ZJRUxEKCBsb25nLCA0LCBYVF9TVEtfTEJFRywgbGJlZyApDQotICAgIFNUUlVDVF9GSUVMRCggbG9uZywgNCwgWFRfU1RLX0xFTkQsIGxlbmQgKQ0KLSAgICBTVFJVQ1RfRklFTEQoIGxvbmcsIDQsIFhUX1NUS19MQ09VTlQsIGxjb3VudCApDQorU1RSVUNUX0ZJRUxEIChsb25nLCA0LCBYVF9TVEtfTEJFRywgICBsYmVnKQ0KK1NUUlVDVF9GSUVMRCAobG9uZywgNCwgWFRfU1RLX0xFTkQsICAgbGVuZCkNCitTVFJVQ1RfRklFTEQgKGxvbmcsIDQsIFhUX1NUS19MQ09VTlQsIGxjb3VudCkNCiAjZW5kaWYNCiAjaWZuZGVmIF9fWFRFTlNBX0NBTEwwX0FCSV9fDQogLyogVGVtcG9yYXJ5IHNwYWNlIGZvciBzYXZpbmcgc3R1ZmYgZHVyaW5nIHdpbmRvdyBzcGlsbCAqLw0KLSAgICBTVFJVQ1RfRklFTEQoIGxvbmcsIDQsIFhUX1NUS19UTVAwLCB0bXAwICkNCi0gICAgU1RSVUNUX0ZJRUxEKCBsb25nLCA0LCBYVF9TVEtfVE1QMSwgdG1wMSApDQotICAgIFNUUlVDVF9GSUVMRCggbG9uZywgNCwgWFRfU1RLX1RNUDIsIHRtcDIgKQ0KK1NUUlVDVF9GSUVMRCAobG9uZywgNCwgWFRfU1RLX1RNUDAsICAgdG1wMCkNCitTVFJVQ1RfRklFTEQgKGxvbmcsIDQsIFhUX1NUS19UTVAxLCAgIHRtcDEpDQorU1RSVUNUX0ZJRUxEIChsb25nLCA0LCBYVF9TVEtfVE1QMiwgICB0bXAyKQ0KICNlbmRpZg0KICNpZmRlZiBYVF9VU0VfU1dQUkkNCiAvKiBTdG9yYWdlIGZvciB2aXJ0dWFsIHByaW9yaXR5IG1hc2sgKi8NCi0gICAgU1RSVUNUX0ZJRUxEKCBsb25nLCA0LCBYVF9TVEtfVlBSSSwgdnByaSApDQorU1RSVUNUX0ZJRUxEIChsb25nLCA0LCBYVF9TVEtfVlBSSSwgICB2cHJpKQ0KICNlbmRpZg0KICNpZmRlZiBYVF9VU0VfT1ZMWQ0KIC8qIFN0b3JhZ2UgZm9yIG92ZXJsYXkgc3RhdGUgKi8NCi0gICAgU1RSVUNUX0ZJRUxEKCBsb25nLCA0LCBYVF9TVEtfT1ZMWSwgb3ZseSApDQorU1RSVUNUX0ZJRUxEIChsb25nLCA0LCBYVF9TVEtfT1ZMWSwgICBvdmx5KQ0KICNlbmRpZg0KLVNUUlVDVF9FTkQoIFh0RXhjRnJhbWUgKQ0KK1NUUlVDVF9FTkQoWHRFeGNGcmFtZSkNCiANCi0jaWYgZGVmaW5lZCggX0FTTUxBTkdVQUdFICkgfHwgZGVmaW5lZCggX19BU1NFTUJMRVJfXyApDQotI2RlZmluZSBYVF9TVEtfTkVYVDEgICAgWHRFeGNGcmFtZVNpemUNCisjaWYgZGVmaW5lZChfQVNNTEFOR1VBR0UpIHx8IGRlZmluZWQoX19BU1NFTUJMRVJfXykNCisjZGVmaW5lIFhUX1NUS19ORVhUMSAgICAgIFh0RXhjRnJhbWVTaXplDQogI2Vsc2UNCi0jZGVmaW5lIFhUX1NUS19ORVhUMSAgICBzaXplb2YoIFh0RXhjRnJhbWUgKQ0KKyNkZWZpbmUgWFRfU1RLX05FWFQxICAgICAgc2l6ZW9mKFh0RXhjRnJhbWUpDQogI2VuZGlmDQogDQogLyogQWxsb2NhdGUgZXh0cmEgc3RvcmFnZSBpZiBuZWVkZWQgKi8NCiAjaWYgWENIQUxfRVhUUkFfU0FfU0laRSAhPSAwDQogDQotICAgICNpZiBYQ0hBTF9FWFRSQV9TQV9BTElHTiA8PSAxNg0KLSNkZWZpbmUgWFRfU1RLX0VYVFJBICAgIEFMSUdOVVAoIFhDSEFMX0VYVFJBX1NBX0FMSUdOLCBYVF9TVEtfTkVYVDEgKQ0KLSAgICAjZWxzZQ0KKyNpZiBYQ0hBTF9FWFRSQV9TQV9BTElHTiA8PSAxNg0KKyNkZWZpbmUgWFRfU1RLX0VYVFJBICAgICAgICAgICAgQUxJR05VUChYQ0hBTF9FWFRSQV9TQV9BTElHTiwgWFRfU1RLX05FWFQxKQ0KKyNlbHNlDQogLyogSWYgbmVlZCBtb3JlIGFsaWdubWVudCB0aGFuIHN0YWNrLCBhZGQgc3BhY2UgZm9yIGR5bmFtaWMgYWxpZ25tZW50ICovDQotI2RlZmluZSBYVF9TVEtfRVhUUkEgICAgKCBBTElHTlVQKCBYQ0hBTF9FWFRSQV9TQV9BTElHTiwgWFRfU1RLX05FWFQxICkgKyBYQ0hBTF9FWFRSQV9TQV9BTElHTiApDQotICAgICNlbmRpZg0KLSNkZWZpbmUgWFRfU1RLX05FWFQyICAgICggWFRfU1RLX0VYVFJBICsgWENIQUxfRVhUUkFfU0FfU0laRSApDQorI2RlZmluZSBYVF9TVEtfRVhUUkEgICAgICAgICAgICAoQUxJR05VUChYQ0hBTF9FWFRSQV9TQV9BTElHTiwgWFRfU1RLX05FWFQxKSArIFhDSEFMX0VYVFJBX1NBX0FMSUdOKQ0KKyNlbmRpZg0KKyNkZWZpbmUgWFRfU1RLX05FWFQyICAgICAgICAgICAgKFhUX1NUS19FWFRSQSArIFhDSEFMX0VYVFJBX1NBX1NJWkUpDQogDQogI2Vsc2UNCiANCi0jZGVmaW5lIFhUX1NUS19ORVhUMiAgICBYVF9TVEtfTkVYVDENCisjZGVmaW5lIFhUX1NUS19ORVhUMiAgICAgICAgICAgIFhUX1NUS19ORVhUMSAgIA0KIA0KLSNlbmRpZiAvKiBpZiBYQ0hBTF9FWFRSQV9TQV9TSVpFICE9IDAgKi8NCisjZW5kaWYNCiANCiAvKg0KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0gKiBUaGlzIGlzIHRoZSBmcmFtZSBzaXplLiBBZGQgc3BhY2UgZm9yIDQgcmVnaXN0ZXJzIChpbnRlcnJ1cHRlZSdzIGJhc2Ugc2F2ZQ0KLSAqIGFyZWEpIGFuZCBzb21lIHNwYWNlIGZvciBnY2MgbmVzdGVkIGZ1bmN0aW9ucyBpZiBhbnkuDQotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLSAqLw0KLSNkZWZpbmUgWFRfU1RLX0ZSTVNaICAgICggQUxJR05VUCggMHgxMCwgWFRfU1RLX05FWFQyICkgKyAweDIwICkNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICBUaGlzIGlzIHRoZSBmcmFtZSBzaXplLiBBZGQgc3BhY2UgZm9yIDQgcmVnaXN0ZXJzIChpbnRlcnJ1cHRlZSdzIGJhc2Ugc2F2ZQ0KKyAgYXJlYSkgYW5kIHNvbWUgc3BhY2UgZm9yIGdjYyBuZXN0ZWQgZnVuY3Rpb25zIGlmIGFueS4NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorKi8NCisjZGVmaW5lIFhUX1NUS19GUk1TWiAgICAgICAgICAgIChBTElHTlVQKDB4MTAsIFhUX1NUS19ORVhUMikgKyAweDIwKQ0KIA0KIA0KIC8qDQotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLSAqIFNPTElDSVRFRCBTVEFDSyBGUkFNRSBGT1IgQSBUSFJFQUQNCi0gKg0KLSAqIEEgc3RhY2sgZnJhbWUgb2YgdGhpcyBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHdoZW5ldmVyIGEgdGhyZWFkIGVudGVycyB0aGUNCi0gKiBSVE9TIGtlcm5lbCBpbnRlbnRpb25hbGx5IChhbmQgc3luY2hyb25vdXNseSkgdG8gc3VibWl0IHRvIHRocmVhZCBzY2hlZHVsaW5nLg0KLSAqIEl0IGdvZXMgb24gdGhlIGN1cnJlbnQgdGhyZWFkJ3Mgc3RhY2suDQotICoNCi0gKiBUaGUgc29saWNpdGVkIGZyYW1lIG9ubHkgaW5jbHVkZXMgcmVnaXN0ZXJzIHRoYXQgYXJlIHJlcXVpcmVkIHRvIGJlIHByZXNlcnZlZA0KLSAqIGJ5IHRoZSBjYWxsZWUgYWNjb3JkaW5nIHRvIHRoZSBjb21waWxlcidzIEFCSSBjb252ZW50aW9ucywgc29tZSBzcGFjZSB0byBzYXZlDQotICogdGhlIHJldHVybiBhZGRyZXNzIGZvciByZXR1cm5pbmcgdG8gdGhlIGNhbGxlciwgYW5kIHRoZSBjYWxsZXIncyBQUyByZWdpc3Rlci4NCi0gKg0KLSAqIEZvciBXaW5kb3dlZCBBQkksIHRoaXMgc3RhY2sgZnJhbWUgaW5jbHVkZXMgdGhlIGNhbGxlcidzIGJhc2Ugc2F2ZSBhcmVhLg0KLSAqDQotICogTm90ZSBvbiBYVF9TT0xfRVhJVCBmaWVsZDoNCi0gKiAgICBJdCBpcyBuZWNlc3NhcnkgdG8gZGlzdGluZ3Vpc2ggYSBzb2xpY2l0ZWQgZnJvbSBhbiBpbnRlcnJ1cHQgc3RhY2sgZnJhbWUuDQotICogICAgVGhpcyBmaWVsZCBjb3JyZXNwb25kcyB0byBYVF9TVEtfRVhJVCBpbiB0aGUgaW50ZXJydXB0IHN0YWNrIGZyYW1lIGFuZCBpcw0KLSAqICAgIGFsd2F5cyBhdCB0aGUgc2FtZSBvZmZzZXQgKDApLiBJdCBjYW4gYmUgd3JpdHRlbiB3aXRoIGEgY29kZSAodXN1YWxseSAwKQ0KLSAqICAgIHRvIGRpc3Rpbmd1aXNoIGEgc29saWN0ZWQgZnJhbWUgZnJvbSBhbiBpbnRlcnJ1cHQgZnJhbWUuIEFuIFJUT1MgcG9ydCBtYXkNCi0gKiAgICBvcHQgdG8gaWdub3JlIHRoaXMgZmllbGQgaWYgaXQgaGFzIGFub3RoZXIgd2F5IG9mIGRpc3Rpbmd1aXNoaW5nIGZyYW1lcy4NCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotICovDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAgU09MSUNJVEVEIFNUQUNLIEZSQU1FIEZPUiBBIFRIUkVBRA0KKw0KKyAgQSBzdGFjayBmcmFtZSBvZiB0aGlzIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgd2hlbmV2ZXIgYSB0aHJlYWQgZW50ZXJzIHRoZSANCisgIFJUT1Mga2VybmVsIGludGVudGlvbmFsbHkgKGFuZCBzeW5jaHJvbm91c2x5KSB0byBzdWJtaXQgdG8gdGhyZWFkIHNjaGVkdWxpbmcuDQorICBJdCBnb2VzIG9uIHRoZSBjdXJyZW50IHRocmVhZCdzIHN0YWNrLg0KKw0KKyAgVGhlIHNvbGljaXRlZCBmcmFtZSBvbmx5IGluY2x1ZGVzIHJlZ2lzdGVycyB0aGF0IGFyZSByZXF1aXJlZCB0byBiZSBwcmVzZXJ2ZWQNCisgIGJ5IHRoZSBjYWxsZWUgYWNjb3JkaW5nIHRvIHRoZSBjb21waWxlcidzIEFCSSBjb252ZW50aW9ucywgc29tZSBzcGFjZSB0byBzYXZlIA0KKyAgdGhlIHJldHVybiBhZGRyZXNzIGZvciByZXR1cm5pbmcgdG8gdGhlIGNhbGxlciwgYW5kIHRoZSBjYWxsZXIncyBQUyByZWdpc3Rlci4NCisNCisgIEZvciBXaW5kb3dlZCBBQkksIHRoaXMgc3RhY2sgZnJhbWUgaW5jbHVkZXMgdGhlIGNhbGxlcidzIGJhc2Ugc2F2ZSBhcmVhLg0KKw0KKyAgTm90ZSBvbiBYVF9TT0xfRVhJVCBmaWVsZDoNCisgICAgICBJdCBpcyBuZWNlc3NhcnkgdG8gZGlzdGluZ3Vpc2ggYSBzb2xpY2l0ZWQgZnJvbSBhbiBpbnRlcnJ1cHQgc3RhY2sgZnJhbWUuDQorICAgICAgVGhpcyBmaWVsZCBjb3JyZXNwb25kcyB0byBYVF9TVEtfRVhJVCBpbiB0aGUgaW50ZXJydXB0IHN0YWNrIGZyYW1lIGFuZCBpcw0KKyAgICAgIGFsd2F5cyBhdCB0aGUgc2FtZSBvZmZzZXQgKDApLiBJdCBjYW4gYmUgd3JpdHRlbiB3aXRoIGEgY29kZSAodXN1YWxseSAwKSANCisgICAgICB0byBkaXN0aW5ndWlzaCBhIHNvbGljdGVkIGZyYW1lIGZyb20gYW4gaW50ZXJydXB0IGZyYW1lLiBBbiBSVE9TIHBvcnQgbWF5DQorICAgICAgb3B0IHRvIGlnbm9yZSB0aGlzIGZpZWxkIGlmIGl0IGhhcyBhbm90aGVyIHdheSBvZiBkaXN0aW5ndWlzaGluZyBmcmFtZXMuDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyovDQogDQogU1RSVUNUX0JFR0lODQogI2lmZGVmIF9fWFRFTlNBX0NBTEwwX0FCSV9fDQotICAgIFNUUlVDVF9GSUVMRCggbG9uZywNCi0gICAgICAgICAgICAgICAgICA0LA0KLSAgICAgICAgICAgICAgICAgIFhUX1NPTF9FWElULA0KLSAgICAgICAgICAgICAgICAgIGV4aXQgKQ0KLSAgICBTVFJVQ1RfRklFTEQoIGxvbmcsIDQsIFhUX1NPTF9QQywgcGMgKQ0KLSAgICBTVFJVQ1RfRklFTEQoIGxvbmcsIDQsIFhUX1NPTF9QUywgcHMgKQ0KLSAgICBTVFJVQ1RfRklFTEQoIGxvbmcsIDQsIFhUX1NPTF9ORVhULCBuZXh0ICkNCi0gICAgU1RSVUNUX0ZJRUxEKCBsb25nLCA0LCBYVF9TT0xfQTEyLCBhMTIgKSAvKiBzaG91bGQgYmUgb24gMTYtYnl0ZSBhbGlnbm1lbnQgKi8NCi0gICAgU1RSVUNUX0ZJRUxEKCBsb25nLCA0LCBYVF9TT0xfQTEzLCBhMTMgKQ0KLSAgICBTVFJVQ1RfRklFTEQoIGxvbmcsIDQsIFhUX1NPTF9BMTQsIGExNCApDQotICAgIFNUUlVDVF9GSUVMRCggbG9uZywgNCwgWFRfU09MX0ExNSwgYTE1ICkNCi0jZWxzZSAvKiBpZmRlZiBfX1hURU5TQV9DQUxMMF9BQklfXyAqLw0KLSAgICBTVFJVQ1RfRklFTEQoIGxvbmcsIDQsIFhUX1NPTF9FWElULCBleGl0ICkNCi0gICAgU1RSVUNUX0ZJRUxEKCBsb25nLCA0LCBYVF9TT0xfUEMsIHBjICkNCi0gICAgU1RSVUNUX0ZJRUxEKCBsb25nLCA0LCBYVF9TT0xfUFMsIHBzICkNCi0gICAgU1RSVUNUX0ZJRUxEKCBsb25nLCA0LCBYVF9TT0xfTkVYVCwgbmV4dCApDQotICAgIFNUUlVDVF9GSUVMRCggbG9uZywgNCwgWFRfU09MX0EwLCBhMCApIC8qIHNob3VsZCBiZSBvbiAxNi1ieXRlIGFsaWdubWVudCAqLw0KLSAgICBTVFJVQ1RfRklFTEQoIGxvbmcsIDQsIFhUX1NPTF9BMSwgYTEgKQ0KLSAgICBTVFJVQ1RfRklFTEQoIGxvbmcsIDQsIFhUX1NPTF9BMiwgYTIgKQ0KLSAgICBTVFJVQ1RfRklFTEQoIGxvbmcsIDQsIFhUX1NPTF9BMywgYTMgKQ0KLSNlbmRpZiAvKiBpZmRlZiBfX1hURU5TQV9DQUxMMF9BQklfXyAqLw0KLVNUUlVDVF9FTkQoIFh0U29sRnJhbWUgKQ0KK1NUUlVDVF9GSUVMRCAobG9uZywgNCwgWFRfU09MX0VYSVQsIGV4aXQpDQorU1RSVUNUX0ZJRUxEIChsb25nLCA0LCBYVF9TT0xfUEMsICAgcGMpDQorU1RSVUNUX0ZJRUxEIChsb25nLCA0LCBYVF9TT0xfUFMsICAgcHMpDQorU1RSVUNUX0ZJRUxEIChsb25nLCA0LCBYVF9TT0xfTkVYVCwgbmV4dCkNCitTVFJVQ1RfRklFTEQgKGxvbmcsIDQsIFhUX1NPTF9BMTIsICBhMTIpICAgIC8qIHNob3VsZCBiZSBvbiAxNi1ieXRlIGFsaWdubWVudCAqLw0KK1NUUlVDVF9GSUVMRCAobG9uZywgNCwgWFRfU09MX0ExMywgIGExMykNCitTVFJVQ1RfRklFTEQgKGxvbmcsIDQsIFhUX1NPTF9BMTQsICBhMTQpDQorU1RSVUNUX0ZJRUxEIChsb25nLCA0LCBYVF9TT0xfQTE1LCAgYTE1KQ0KKyNlbHNlDQorU1RSVUNUX0ZJRUxEIChsb25nLCA0LCBYVF9TT0xfRVhJVCwgZXhpdCkNCitTVFJVQ1RfRklFTEQgKGxvbmcsIDQsIFhUX1NPTF9QQywgICBwYykNCitTVFJVQ1RfRklFTEQgKGxvbmcsIDQsIFhUX1NPTF9QUywgICBwcykNCitTVFJVQ1RfRklFTEQgKGxvbmcsIDQsIFhUX1NPTF9ORVhULCBuZXh0KQ0KK1NUUlVDVF9GSUVMRCAobG9uZywgNCwgWFRfU09MX0EwLCAgIGEwKSAgICAvKiBzaG91bGQgYmUgb24gMTYtYnl0ZSBhbGlnbm1lbnQgKi8NCitTVFJVQ1RfRklFTEQgKGxvbmcsIDQsIFhUX1NPTF9BMSwgICBhMSkNCitTVFJVQ1RfRklFTEQgKGxvbmcsIDQsIFhUX1NPTF9BMiwgICBhMikNCitTVFJVQ1RfRklFTEQgKGxvbmcsIDQsIFhUX1NPTF9BMywgICBhMykNCisjZW5kaWYNCitTVFJVQ1RfRU5EKFh0U29sRnJhbWUpDQogDQogLyogU2l6ZSBvZiBzb2xpY2l0ZWQgc3RhY2sgZnJhbWUgKi8NCi0jZGVmaW5lIFhUX1NPTF9GUk1TWiAgICBBTElHTlVQKCAweDEwLCBYdFNvbEZyYW1lU2l6ZSApDQorI2RlZmluZSBYVF9TT0xfRlJNU1ogICAgICAgICAgICBBTElHTlVQKDB4MTAsIFh0U29sRnJhbWVTaXplKQ0KIA0KIA0KIC8qDQotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLSAqIENPLVBST0NFU1NPUiBTVEFURSBTQVZFIEFSRUEgRk9SIEEgVEhSRUFEDQotICoNCi0gKiBUaGUgUlRPUyBtdXN0IHByb3ZpZGUgYW4gYXJlYSBwZXIgdGhyZWFkIHRvIHNhdmUgdGhlIHN0YXRlIG9mIGNvLXByb2Nlc3NvcnMNCi0gKiB3aGVuIHRoYXQgdGhyZWFkIGRvZXMgbm90IGhhdmUgY29udHJvbC4gQ28tcHJvY2Vzc29ycyBhcmUgY29udGV4dC1zd2l0Y2hlZA0KLSAqIGxhemlseSAob24gZGVtYW5kKSBvbmx5IHdoZW4gYSBuZXcgdGhyZWFkIHVzZXMgYSBjby1wcm9jZXNzb3IgaW5zdHJ1Y3Rpb24sDQotICogb3RoZXJ3aXNlIGEgdGhyZWFkIHJldGFpbnMgb3duZXJzaGlwIG9mIHRoZSBjby1wcm9jZXNzb3IgZXZlbiB3aGVuIGl0IGxvc2VzDQotICogY29udHJvbCBvZiB0aGUgcHJvY2Vzc29yLiBBbiBYdGVuc2EgY28tcHJvY2Vzc29yIGV4Y2VwdGlvbiBpcyB0cmlnZ2VyZWQgd2hlbg0KLSAqIGFueSBjby1wcm9jZXNzb3IgaW5zdHJ1Y3Rpb24gaXMgZXhlY3V0ZWQgYnkgYSB0aHJlYWQgdGhhdCBpcyBub3QgdGhlIG93bmVyLA0KLSAqIGFuZCB0aGUgY29udGV4dCBzd2l0Y2ggb2YgdGhhdCBjby1wcm9jZXNzb3IgaXMgdGhlbiBwZWZvcm1lZCBieSB0aGUgaGFuZGxlci4NCi0gKiBPd25lcnNoaXAgcmVwcmVzZW50cyB3aGljaCB0aHJlYWQncyBzdGF0ZSBpcyBjdXJyZW50bHkgaW4gdGhlIGNvLXByb2Nlc3Nvci4NCi0gKg0KLSAqIENvLXByb2Nlc3NvcnMgbWF5IG5vdCBiZSB1c2VkIGJ5IGludGVycnVwdCBvciBleGNlcHRpb24gaGFuZGxlcnMuIElmIGFuDQotICogY28tcHJvY2Vzc29yIGluc3RydWN0aW9uIGlzIGV4ZWN1dGVkIGJ5IGFuIGludGVycnVwdCBvciBleGNlcHRpb24gaGFuZGxlciwNCi0gKiB0aGUgY28tcHJvY2Vzc29yIGV4Y2VwdGlvbiBoYW5kbGVyIHdpbGwgdHJpZ2dlciBhIGtlcm5lbCBwYW5pYyBhbmQgZnJlZXplLg0KLSAqIFRoaXMgcmVzdHJpY3Rpb24gaXMgaW50cm9kdWNlZCB0byByZWR1Y2UgdGhlIG92ZXJoZWFkIG9mIHNhdmluZyBhbmQgcmVzdG9yaW5nDQotICogY28tcHJvY2Vzc29yIHN0YXRlICh3aGljaCBjYW4gYmUgcXVpdGUgbGFyZ2UpIGFuZCBpbiBwYXJ0aWN1bGFyIHJlbW92ZSB0aGF0DQotICogb3ZlcmhlYWQgZnJvbSBpbnRlcnJ1cHQgaGFuZGxlcnMuDQotICoNCi0gKiBUaGUgY28tcHJvY2Vzc29yIHN0YXRlIHNhdmUgYXJlYSBtYXkgYmUgaW4gYW55IGNvbnZlbmllbnQgcGVyLXRocmVhZCBsb2NhdGlvbg0KLSAqIHN1Y2ggYXMgaW4gdGhlIHRocmVhZCBjb250cm9sIGJsb2NrIG9yIGFib3ZlIHRoZSB0aHJlYWQgc3RhY2sgYXJlYS4gSXQgbmVlZA0KLSAqIG5vdCBiZSBpbiB0aGUgaW50ZXJydXB0IHN0YWNrIGZyYW1lIHNpbmNlIGludGVycnVwdHMgZG9uJ3QgdXNlIGNvLXByb2Nlc3NvcnMuDQotICoNCi0gKiBBbG9uZyB3aXRoIHRoZSBzYXZlIGFyZWEgZm9yIGVhY2ggY28tcHJvY2Vzc29yLCB0d28gYml0bWFza3Mgd2l0aCBmbGFncyBwZXINCi0gKiBjby1wcm9jZXNzb3IgKGxhaWQgb3V0IGFzIGluIHRoZSBDUEVOQUJMRSByZWcpIGhlbHAgbWFuYWdlIGNvbnRleHQtc3dpdGNoaW5nDQotICogY28tcHJvY2Vzc29ycyBhcyBlZmZpY2llbnRseSBhcyBwb3NzaWJsZToNCi0gKg0KLSAqIFhUX0NQRU5BQkxFDQotICogIFRoZSBjb250ZW50cyBvZiBhIG5vbi1ydW5uaW5nIHRocmVhZCdzIENQRU5BQkxFIHJlZ2lzdGVyLg0KLSAqICBJdCByZXByZXNlbnRzIHRoZSBjby1wcm9jZXNzb3JzIG93bmVkIChhbmQgd2hvc2Ugc3RhdGUgaXMgc3RpbGwgbmVlZGVkKQ0KLSAqICBieSB0aGUgdGhyZWFkLiBXaGVuIGEgdGhyZWFkIGlzIHByZWVtcHRlZCwgaXRzIENQRU5BQkxFIGlzIHNhdmVkIGhlcmUuDQotICogIFdoZW4gYSB0aHJlYWQgc29saWNpdHMgYSBjb250ZXh0LXN3dGljaCwgaXRzIENQRU5BQkxFIGlzIGNsZWFyZWQgLSB0aGUNCi0gKiAgY29tcGlsZXIgaGFzIHNhdmVkIHRoZSAoY2FsbGVyLXNhdmVkKSBjby1wcm9jIHN0YXRlIGlmIGl0IG5lZWRzIHRvLg0KLSAqICBXaGVuIGEgbm9uLXJ1bm5pbmcgdGhyZWFkIGxvc2VzIG93bmVyc2hpcCBvZiBhIENQLCBpdHMgYml0IGlzIGNsZWFyZWQuDQotICogIFdoZW4gYSB0aHJlYWQgcnVucywgaXQncyBYVF9DUEVOQUJMRSBpcyBsb2FkZWQgaW50byB0aGUgQ1BFTkFCTEUgcmVnLg0KLSAqICBBdm9pZHMgY28tcHJvY2Vzc29yIGV4Y2VwdGlvbnMgd2hlbiBubyBjaGFuZ2Ugb2Ygb3duZXJzaGlwIGlzIG5lZWRlZC4NCi0gKg0KLSAqIFhUX0NQU1RPUkVEDQotICogIEEgYml0bWFzayB3aXRoIHRoZSBzYW1lIGxheW91dCBhcyBDUEVOQUJMRSwgYSBiaXQgcGVyIGNvLXByb2Nlc3Nvci4NCi0gKiAgSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHN0YXRlIG9mIGVhY2ggY28tcHJvY2Vzc29yIGlzIHNhdmVkIGluIHRoZSBzdGF0ZQ0KLSAqICBzYXZlIGFyZWEuIFdoZW4gYSB0aHJlYWQgZW50ZXJzIHRoZSBrZXJuZWwsIG9ubHkgdGhlIHN0YXRlIG9mIGNvLXByb2NzDQotICogIHN0aWxsIGVuYWJsZWQgaW4gQ1BFTkFCTEUgaXMgc2F2ZWQuIFdoZW4gdGhlIGNvLXByb2Nlc3NvciBleGNlcHRpb24NCi0gKiAgaGFuZGxlciBhc3NpZ25zIG93bmVyc2hpcCBvZiBhIGNvLXByb2Nlc3NvciB0byBhIHRocmVhZCwgaXQgcmVzdG9yZXMNCi0gKiAgdGhlIHNhdmVkIHN0YXRlIG9ubHkgaWYgdGhpcyBiaXQgaXMgc2V0LCBhbmQgY2xlYXJzIHRoaXMgYml0Lg0KLSAqDQotICogWFRfQ1BfQ1NfU1QNCi0gKiAgQSBiaXRtYXNrIHdpdGggdGhlIHNhbWUgbGF5b3V0IGFzIENQRU5BQkxFLCBhIGJpdCBwZXIgY28tcHJvY2Vzc29yLg0KLSAqICBJbmRpY2F0ZXMgd2hldGhlciBjYWxsZWUtc2F2ZWQgc3RhdGUgaXMgc2F2ZWQgaW4gdGhlIHN0YXRlIHNhdmUgYXJlYS4NCi0gKiAgQ2FsbGVlLXNhdmVkIHN0YXRlIGlzIHNhdmVkIGJ5IGl0c2VsZiBvbiBhIHNvbGljaXRlZCBjb250ZXh0IHN3aXRjaCwNCi0gKiAgYW5kIHJlc3RvcmVkIHdoZW4gbmVlZGVkIGJ5IHRoZSBjb3Byb2Nlc3NvciBleGNlcHRpb24gaGFuZGxlci4NCi0gKiAgVW5zb2xpY2l0ZWQgc3dpdGNoZXMgd2lsbCBjYXVzZSB0aGUgZW50aXJlIGNvcHJvY2Vzc29yIHRvIGJlIHNhdmVkDQotICogIHdoZW4gbmVjZXNzYXJ5Lg0KLSAqDQotICogWFRfQ1BfQVNBDQotICogIFBvaW50ZXIgdG8gdGhlIGFsaWduZWQgc2F2ZSBhcmVhLiAgQWxsb3dzIGl0IHRvIGJlIGFsaWduZWQgbW9yZSB0aGFuDQotICogIHRoZSBvdmVyYWxsIHNhdmUgYXJlYSAod2hpY2ggbWlnaHQgb25seSBiZSBzdGFjay1hbGlnbmVkIG9yIFRDQi1hbGlnbmVkKS4NCi0gKiAgRXNwZWNpYWxseSByZWxldmFudCBmb3IgWHRlbnNhIGNvcmVzIGNvbmZpZ3VyZWQgd2l0aCBhIHZlcnkgbGFyZ2UgZGF0YQ0KLSAqICBwYXRoIHRoYXQgcmVxdWlyZXMgYWxpZ25tZW50IGdyZWF0ZXIgdGhhbiAxNiBieXRlcyAoQUJJIHN0YWNrIGFsaWdubWVudCkuDQotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLSAqLw0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgIENPLVBST0NFU1NPUiBTVEFURSBTQVZFIEFSRUEgRk9SIEEgVEhSRUFEDQorDQorICBUaGUgUlRPUyBtdXN0IHByb3ZpZGUgYW4gYXJlYSBwZXIgdGhyZWFkIHRvIHNhdmUgdGhlIHN0YXRlIG9mIGNvLXByb2Nlc3NvcnMNCisgIHdoZW4gdGhhdCB0aHJlYWQgZG9lcyBub3QgaGF2ZSBjb250cm9sLiBDby1wcm9jZXNzb3JzIGFyZSBjb250ZXh0LXN3aXRjaGVkDQorICBsYXppbHkgKG9uIGRlbWFuZCkgb25seSB3aGVuIGEgbmV3IHRocmVhZCB1c2VzIGEgY28tcHJvY2Vzc29yIGluc3RydWN0aW9uLA0KKyAgb3RoZXJ3aXNlIGEgdGhyZWFkIHJldGFpbnMgb3duZXJzaGlwIG9mIHRoZSBjby1wcm9jZXNzb3IgZXZlbiB3aGVuIGl0IGxvc2VzDQorICBjb250cm9sIG9mIHRoZSBwcm9jZXNzb3IuIEFuIFh0ZW5zYSBjby1wcm9jZXNzb3IgZXhjZXB0aW9uIGlzIHRyaWdnZXJlZCB3aGVuDQorICBhbnkgY28tcHJvY2Vzc29yIGluc3RydWN0aW9uIGlzIGV4ZWN1dGVkIGJ5IGEgdGhyZWFkIHRoYXQgaXMgbm90IHRoZSBvd25lciwNCisgIGFuZCB0aGUgY29udGV4dCBzd2l0Y2ggb2YgdGhhdCBjby1wcm9jZXNzb3IgaXMgdGhlbiBwZWZvcm1lZCBieSB0aGUgaGFuZGxlci4NCisgIE93bmVyc2hpcCByZXByZXNlbnRzIHdoaWNoIHRocmVhZCdzIHN0YXRlIGlzIGN1cnJlbnRseSBpbiB0aGUgY28tcHJvY2Vzc29yLg0KKw0KKyAgQ28tcHJvY2Vzc29ycyBtYXkgbm90IGJlIHVzZWQgYnkgaW50ZXJydXB0IG9yIGV4Y2VwdGlvbiBoYW5kbGVycy4gSWYgYW4gDQorICBjby1wcm9jZXNzb3IgaW5zdHJ1Y3Rpb24gaXMgZXhlY3V0ZWQgYnkgYW4gaW50ZXJydXB0IG9yIGV4Y2VwdGlvbiBoYW5kbGVyLA0KKyAgdGhlIGNvLXByb2Nlc3NvciBleGNlcHRpb24gaGFuZGxlciB3aWxsIHRyaWdnZXIgYSBrZXJuZWwgcGFuaWMgYW5kIGZyZWV6ZS4NCisgIFRoaXMgcmVzdHJpY3Rpb24gaXMgaW50cm9kdWNlZCB0byByZWR1Y2UgdGhlIG92ZXJoZWFkIG9mIHNhdmluZyBhbmQgcmVzdG9yaW5nDQorICBjby1wcm9jZXNzb3Igc3RhdGUgKHdoaWNoIGNhbiBiZSBxdWl0ZSBsYXJnZSkgYW5kIGluIHBhcnRpY3VsYXIgcmVtb3ZlIHRoYXQNCisgIG92ZXJoZWFkIGZyb20gaW50ZXJydXB0IGhhbmRsZXJzLg0KKw0KKyAgVGhlIGNvLXByb2Nlc3NvciBzdGF0ZSBzYXZlIGFyZWEgbWF5IGJlIGluIGFueSBjb252ZW5pZW50IHBlci10aHJlYWQgbG9jYXRpb24NCisgIHN1Y2ggYXMgaW4gdGhlIHRocmVhZCBjb250cm9sIGJsb2NrIG9yIGFib3ZlIHRoZSB0aHJlYWQgc3RhY2sgYXJlYS4gSXQgbmVlZA0KKyAgbm90IGJlIGluIHRoZSBpbnRlcnJ1cHQgc3RhY2sgZnJhbWUgc2luY2UgaW50ZXJydXB0cyBkb24ndCB1c2UgY28tcHJvY2Vzc29ycy4NCisNCisgIEFsb25nIHdpdGggdGhlIHNhdmUgYXJlYSBmb3IgZWFjaCBjby1wcm9jZXNzb3IsIHR3byBiaXRtYXNrcyB3aXRoIGZsYWdzIHBlciANCisgIGNvLXByb2Nlc3NvciAobGFpZCBvdXQgYXMgaW4gdGhlIENQRU5BQkxFIHJlZykgaGVscCBtYW5hZ2UgY29udGV4dC1zd2l0Y2hpbmcNCisgIGNvLXByb2Nlc3NvcnMgYXMgZWZmaWNpZW50bHkgYXMgcG9zc2libGU6DQorDQorICBYVF9DUEVOQUJMRQ0KKyAgICBUaGUgY29udGVudHMgb2YgYSBub24tcnVubmluZyB0aHJlYWQncyBDUEVOQUJMRSByZWdpc3Rlci4NCisgICAgSXQgcmVwcmVzZW50cyB0aGUgY28tcHJvY2Vzc29ycyBvd25lZCAoYW5kIHdob3NlIHN0YXRlIGlzIHN0aWxsIG5lZWRlZCkNCisgICAgYnkgdGhlIHRocmVhZC4gV2hlbiBhIHRocmVhZCBpcyBwcmVlbXB0ZWQsIGl0cyBDUEVOQUJMRSBpcyBzYXZlZCBoZXJlLg0KKyAgICBXaGVuIGEgdGhyZWFkIHNvbGljaXRzIGEgY29udGV4dC1zd3RpY2gsIGl0cyBDUEVOQUJMRSBpcyBjbGVhcmVkIC0gdGhlDQorICAgIGNvbXBpbGVyIGhhcyBzYXZlZCB0aGUgKGNhbGxlci1zYXZlZCkgY28tcHJvYyBzdGF0ZSBpZiBpdCBuZWVkcyB0by4NCisgICAgV2hlbiBhIG5vbi1ydW5uaW5nIHRocmVhZCBsb3NlcyBvd25lcnNoaXAgb2YgYSBDUCwgaXRzIGJpdCBpcyBjbGVhcmVkLg0KKyAgICBXaGVuIGEgdGhyZWFkIHJ1bnMsIGl0J3MgWFRfQ1BFTkFCTEUgaXMgbG9hZGVkIGludG8gdGhlIENQRU5BQkxFIHJlZy4NCisgICAgQXZvaWRzIGNvLXByb2Nlc3NvciBleGNlcHRpb25zIHdoZW4gbm8gY2hhbmdlIG9mIG93bmVyc2hpcCBpcyBuZWVkZWQuDQorDQorICBYVF9DUFNUT1JFRA0KKyAgICBBIGJpdG1hc2sgd2l0aCB0aGUgc2FtZSBsYXlvdXQgYXMgQ1BFTkFCTEUsIGEgYml0IHBlciBjby1wcm9jZXNzb3IuDQorICAgIEluZGljYXRlcyB3aGV0aGVyIHRoZSBzdGF0ZSBvZiBlYWNoIGNvLXByb2Nlc3NvciBpcyBzYXZlZCBpbiB0aGUgc3RhdGUgDQorICAgIHNhdmUgYXJlYS4gV2hlbiBhIHRocmVhZCBlbnRlcnMgdGhlIGtlcm5lbCwgb25seSB0aGUgc3RhdGUgb2YgY28tcHJvY3MNCisgICAgc3RpbGwgZW5hYmxlZCBpbiBDUEVOQUJMRSBpcyBzYXZlZC4gV2hlbiB0aGUgY28tcHJvY2Vzc29yIGV4Y2VwdGlvbiANCisgICAgaGFuZGxlciBhc3NpZ25zIG93bmVyc2hpcCBvZiBhIGNvLXByb2Nlc3NvciB0byBhIHRocmVhZCwgaXQgcmVzdG9yZXMgDQorICAgIHRoZSBzYXZlZCBzdGF0ZSBvbmx5IGlmIHRoaXMgYml0IGlzIHNldCwgYW5kIGNsZWFycyB0aGlzIGJpdC4NCisNCisgIFhUX0NQX0NTX1NUDQorICAgIEEgYml0bWFzayB3aXRoIHRoZSBzYW1lIGxheW91dCBhcyBDUEVOQUJMRSwgYSBiaXQgcGVyIGNvLXByb2Nlc3Nvci4NCisgICAgSW5kaWNhdGVzIHdoZXRoZXIgY2FsbGVlLXNhdmVkIHN0YXRlIGlzIHNhdmVkIGluIHRoZSBzdGF0ZSBzYXZlIGFyZWEuDQorICAgIENhbGxlZS1zYXZlZCBzdGF0ZSBpcyBzYXZlZCBieSBpdHNlbGYgb24gYSBzb2xpY2l0ZWQgY29udGV4dCBzd2l0Y2gsDQorICAgIGFuZCByZXN0b3JlZCB3aGVuIG5lZWRlZCBieSB0aGUgY29wcm9jZXNzb3IgZXhjZXB0aW9uIGhhbmRsZXIuDQorICAgIFVuc29saWNpdGVkIHN3aXRjaGVzIHdpbGwgY2F1c2UgdGhlIGVudGlyZSBjb3Byb2Nlc3NvciB0byBiZSBzYXZlZA0KKyAgICB3aGVuIG5lY2Vzc2FyeS4NCisNCisgIFhUX0NQX0FTQQ0KKyAgICBQb2ludGVyIHRvIHRoZSBhbGlnbmVkIHNhdmUgYXJlYS4gIEFsbG93cyBpdCB0byBiZSBhbGlnbmVkIG1vcmUgdGhhbg0KKyAgICB0aGUgb3ZlcmFsbCBzYXZlIGFyZWEgKHdoaWNoIG1pZ2h0IG9ubHkgYmUgc3RhY2stYWxpZ25lZCBvciBUQ0ItYWxpZ25lZCkuDQorICAgIEVzcGVjaWFsbHkgcmVsZXZhbnQgZm9yIFh0ZW5zYSBjb3JlcyBjb25maWd1cmVkIHdpdGggYSB2ZXJ5IGxhcmdlIGRhdGENCisgICAgcGF0aCB0aGF0IHJlcXVpcmVzIGFsaWdubWVudCBncmVhdGVyIHRoYW4gMTYgYnl0ZXMgKEFCSSBzdGFjayBhbGlnbm1lbnQpLg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisqLw0KIA0KICNpZiBYQ0hBTF9DUF9OVU0gPiAwDQogDQogLyogIE9mZnNldHMgb2YgZWFjaCBjb3Byb2Nlc3NvciBzYXZlIGFyZWEgd2l0aGluIHRoZSAnYWxpZ25lZCBzYXZlIGFyZWEnOiAgKi8NCi0jZGVmaW5lIFhUX0NQMF9TQSAgICAgICAgMA0KLSNkZWZpbmUgWFRfQ1AxX1NBICAgICAgICBBTElHTlVQKCBYQ0hBTF9DUDFfU0FfQUxJR04sIFhUX0NQMF9TQSArIFhDSEFMX0NQMF9TQV9TSVpFICkNCi0jZGVmaW5lIFhUX0NQMl9TQSAgICAgICAgQUxJR05VUCggWENIQUxfQ1AyX1NBX0FMSUdOLCBYVF9DUDFfU0EgKyBYQ0hBTF9DUDFfU0FfU0laRSApDQotI2RlZmluZSBYVF9DUDNfU0EgICAgICAgIEFMSUdOVVAoIFhDSEFMX0NQM19TQV9BTElHTiwgWFRfQ1AyX1NBICsgWENIQUxfQ1AyX1NBX1NJWkUgKQ0KLSNkZWZpbmUgWFRfQ1A0X1NBICAgICAgICBBTElHTlVQKCBYQ0hBTF9DUDRfU0FfQUxJR04sIFhUX0NQM19TQSArIFhDSEFMX0NQM19TQV9TSVpFICkNCi0jZGVmaW5lIFhUX0NQNV9TQSAgICAgICAgQUxJR05VUCggWENIQUxfQ1A1X1NBX0FMSUdOLCBYVF9DUDRfU0EgKyBYQ0hBTF9DUDRfU0FfU0laRSApDQotI2RlZmluZSBYVF9DUDZfU0EgICAgICAgIEFMSUdOVVAoIFhDSEFMX0NQNl9TQV9BTElHTiwgWFRfQ1A1X1NBICsgWENIQUxfQ1A1X1NBX1NJWkUgKQ0KLSNkZWZpbmUgWFRfQ1A3X1NBICAgICAgICBBTElHTlVQKCBYQ0hBTF9DUDdfU0FfQUxJR04sIFhUX0NQNl9TQSArIFhDSEFMX0NQNl9TQV9TSVpFICkNCi0jZGVmaW5lIFhUX0NQX1NBX1NJWkUgICAgQUxJR05VUCggMTYsIFhUX0NQN19TQSArIFhDSEFMX0NQN19TQV9TSVpFICkNCisjZGVmaW5lIFhUX0NQMF9TQSAgIDANCisjZGVmaW5lIFhUX0NQMV9TQSAgIEFMSUdOVVAoWENIQUxfQ1AxX1NBX0FMSUdOLCBYVF9DUDBfU0EgKyBYQ0hBTF9DUDBfU0FfU0laRSkNCisjZGVmaW5lIFhUX0NQMl9TQSAgIEFMSUdOVVAoWENIQUxfQ1AyX1NBX0FMSUdOLCBYVF9DUDFfU0EgKyBYQ0hBTF9DUDFfU0FfU0laRSkNCisjZGVmaW5lIFhUX0NQM19TQSAgIEFMSUdOVVAoWENIQUxfQ1AzX1NBX0FMSUdOLCBYVF9DUDJfU0EgKyBYQ0hBTF9DUDJfU0FfU0laRSkNCisjZGVmaW5lIFhUX0NQNF9TQSAgIEFMSUdOVVAoWENIQUxfQ1A0X1NBX0FMSUdOLCBYVF9DUDNfU0EgKyBYQ0hBTF9DUDNfU0FfU0laRSkNCisjZGVmaW5lIFhUX0NQNV9TQSAgIEFMSUdOVVAoWENIQUxfQ1A1X1NBX0FMSUdOLCBYVF9DUDRfU0EgKyBYQ0hBTF9DUDRfU0FfU0laRSkNCisjZGVmaW5lIFhUX0NQNl9TQSAgIEFMSUdOVVAoWENIQUxfQ1A2X1NBX0FMSUdOLCBYVF9DUDVfU0EgKyBYQ0hBTF9DUDVfU0FfU0laRSkNCisjZGVmaW5lIFhUX0NQN19TQSAgIEFMSUdOVVAoWENIQUxfQ1A3X1NBX0FMSUdOLCBYVF9DUDZfU0EgKyBYQ0hBTF9DUDZfU0FfU0laRSkNCisjZGVmaW5lIFhUX0NQX1NBX1NJWkUgICBBTElHTlVQKDE2LCBYVF9DUDdfU0EgKyBYQ0hBTF9DUDdfU0FfU0laRSkNCiANCiAvKiAgT2Zmc2V0cyB3aXRoaW4gdGhlIG92ZXJhbGwgc2F2ZSBhcmVhOiAgKi8NCi0jZGVmaW5lIFhUX0NQRU5BQkxFICAgICAgMCAvKiAoMiBieXRlcykgY29wcm9jZXNzb3JzIGFjdGl2ZSBmb3IgdGhpcyB0aHJlYWQgKi8NCi0jZGVmaW5lIFhUX0NQU1RPUkVEICAgICAgMiAvKiAoMiBieXRlcykgY29wcm9jZXNzb3JzIHNhdmVkIGZvciB0aGlzIHRocmVhZCAqLw0KLSNkZWZpbmUgWFRfQ1BfQ1NfU1QgICAgICA0IC8qICgyIGJ5dGVzKSBjb3Byb2Nlc3NvciBjYWxsZWUtc2F2ZWQgcmVncyBzdG9yZWQgZm9yIHRoaXMgdGhyZWFkICovDQotI2RlZmluZSBYVF9DUF9BU0EgICAgICAgIDggLyogKDQgYnl0ZXMpIHB0ciB0byBhbGlnbmVkIHNhdmUgYXJlYSAqLw0KKyNkZWZpbmUgWFRfQ1BFTkFCTEUgMCAgIC8qICgyIGJ5dGVzKSBjb3Byb2Nlc3NvcnMgYWN0aXZlIGZvciB0aGlzIHRocmVhZCAqLw0KKyNkZWZpbmUgWFRfQ1BTVE9SRUQgMiAgIC8qICgyIGJ5dGVzKSBjb3Byb2Nlc3NvcnMgc2F2ZWQgZm9yIHRoaXMgdGhyZWFkICovDQorI2RlZmluZSBYVF9DUF9DU19TVCA0ICAgLyogKDIgYnl0ZXMpIGNvcHJvY2Vzc29yIGNhbGxlZS1zYXZlZCByZWdzIHN0b3JlZCBmb3IgdGhpcyB0aHJlYWQgKi8NCisjZGVmaW5lIFhUX0NQX0FTQSAgIDggICAvKiAoNCBieXRlcykgcHRyIHRvIGFsaWduZWQgc2F2ZSBhcmVhICovDQogLyogIE92ZXJhbGwgc2l6ZSBhbGxvd3MgZm9yIGR5bmFtaWMgYWxpZ25tZW50OiAgKi8NCi0jZGVmaW5lIFhUX0NQX1NJWkUgICAgICAgKCAxMiArIFhUX0NQX1NBX1NJWkUgKyBYQ0hBTF9UT1RBTF9TQV9BTElHTiApDQotI2Vsc2UgLyogaWYgWENIQUxfQ1BfTlVNID4gMCAqLw0KLSNkZWZpbmUgWFRfQ1BfU0laRSAgICAgICAwDQotI2VuZGlmIC8qIGlmIFhDSEFMX0NQX05VTSA+IDAgKi8NCisjZGVmaW5lIFhUX0NQX1NJWkUgICgxMiArIFhUX0NQX1NBX1NJWkUgKyBYQ0hBTF9UT1RBTF9TQV9BTElHTikNCisjZWxzZQ0KKyNkZWZpbmUgWFRfQ1BfU0laRSAgMA0KKyNlbmRpZg0KIA0KIA0KIC8qDQotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLSAqIE1BQ1JPUyBUTyBIQU5ETEUgQUJJIFNQRUNJRklDUyBPRiBGVU5DVElPTiBFTlRSWSBBTkQgUkVUVVJODQotICoNCi0gKiBDb252ZW5pZW50IHdoZXJlIHRoZSBmcmFtZSBzaXplIHJlcXVpcmVtZW50cyBhcmUgdGhlIHNhbWUgZm9yIGJvdGggQUJJcy4NCi0gKiAgRU5UUlkoc3opLCBSRVQoc3opIGFyZSBmb3IgZnJhbWVkIGZ1bmN0aW9ucyAoaGF2ZSBsb2NhbHMgb3IgbWFrZSBjYWxscykuDQotICogIEVOVFJZMCwgICAgUkVUMCAgICBhcmUgZm9yIGZyYW1lbGVzcyBmdW5jdGlvbnMgKG5vIGxvY2Fscywgbm8gY2FsbHMpLg0KLSAqDQotICogd2hlcmUgc2l6ZSA9IHNpemUgb2Ygc3RhY2sgZnJhbWUgaW4gYnl0ZXMgKG11c3QgYmUgPjAgYW5kIGFsaWduZWQgdG8gMTYpLg0KLSAqIEZvciBmcmFtZWQgZnVuY3Rpb25zIHRoZSBmcmFtZSBpcyBjcmVhdGVkIGFuZCB0aGUgcmV0dXJuIGFkZHJlc3Mgc2F2ZWQgYXQNCi0gKiBiYXNlIG9mIGZyYW1lIChDYWxsMCBBQkkpIG9yIGFzIGRldGVybWluZWQgYnkgaGFyZHdhcmUgKFdpbmRvd2VkIEFCSSkuDQotICogRm9yIGZyYW1lbGVzcyBmdW5jdGlvbnMsIHRoZXJlIGlzIG5vIGZyYW1lIGFuZCByZXR1cm4gYWRkcmVzcyByZW1haW5zIGluIGEwLg0KLSAqIE5vdGU6IEJlY2F1c2UgQ1BQIG1hY3JvcyBleHBhbmQgdG8gYSBzaW5nbGUgbGluZSwgbWFjcm9zIHJlcXVpcmluZyBtdWx0aS1saW5lDQotICogZXhwYW5zaW9ucyBhcmUgaW1wbGVtZW50ZWQgYXMgYXNzZW1ibGVyIG1hY3Jvcy4NCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotICovDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAgTUFDUk9TIFRPIEhBTkRMRSBBQkkgU1BFQ0lGSUNTIE9GIEZVTkNUSU9OIEVOVFJZIEFORCBSRVRVUk4NCisNCisgIENvbnZlbmllbnQgd2hlcmUgdGhlIGZyYW1lIHNpemUgcmVxdWlyZW1lbnRzIGFyZSB0aGUgc2FtZSBmb3IgYm90aCBBQklzLg0KKyAgICBFTlRSWShzeiksIFJFVChzeikgYXJlIGZvciBmcmFtZWQgZnVuY3Rpb25zIChoYXZlIGxvY2FscyBvciBtYWtlIGNhbGxzKS4NCisgICAgRU5UUlkwLCAgICBSRVQwICAgIGFyZSBmb3IgZnJhbWVsZXNzIGZ1bmN0aW9ucyAobm8gbG9jYWxzLCBubyBjYWxscykuDQorDQorICB3aGVyZSBzaXplID0gc2l6ZSBvZiBzdGFjayBmcmFtZSBpbiBieXRlcyAobXVzdCBiZSA+MCBhbmQgYWxpZ25lZCB0byAxNikuDQorICBGb3IgZnJhbWVkIGZ1bmN0aW9ucyB0aGUgZnJhbWUgaXMgY3JlYXRlZCBhbmQgdGhlIHJldHVybiBhZGRyZXNzIHNhdmVkIGF0DQorICBiYXNlIG9mIGZyYW1lIChDYWxsMCBBQkkpIG9yIGFzIGRldGVybWluZWQgYnkgaGFyZHdhcmUgKFdpbmRvd2VkIEFCSSkuDQorICBGb3IgZnJhbWVsZXNzIGZ1bmN0aW9ucywgdGhlcmUgaXMgbm8gZnJhbWUgYW5kIHJldHVybiBhZGRyZXNzIHJlbWFpbnMgaW4gYTAuDQorICBOb3RlOiBCZWNhdXNlIENQUCBtYWNyb3MgZXhwYW5kIHRvIGEgc2luZ2xlIGxpbmUsIG1hY3JvcyByZXF1aXJpbmcgbXVsdGktbGluZSANCisgIGV4cGFuc2lvbnMgYXJlIGltcGxlbWVudGVkIGFzIGFzc2VtYmxlciBtYWNyb3MuDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyovDQogDQogI2lmZGVmIF9fQVNTRU1CTEVSX18NCi0gICAgI2lmZGVmIF9fWFRFTlNBX0NBTEwwX0FCSV9fDQotICAgICAgICAvKiBDYWxsMCAqLw0KLSNkZWZpbmUgRU5UUlkoIHN6ICkgICAgZW50cnkxIHN6DQotICAgICAgICAgICAubWFjcm8gZW50cnkxIHNpemUgPSAweDEwDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRpIHNwLCBzcCwgLVwgc2l6ZQ0KLSAgICAgICAgczMyaSBhMCwgc3AsIDANCi0gICAgICAgICAgIC5lbmRtDQotI2RlZmluZSBFTlRSWTANCi0jZGVmaW5lIFJFVCggc3ogKSAgICByZXQxIHN6DQotICAgICAgICAgICAubWFjcm8gcmV0MSBzaXplID0gMHgxMA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwzMmkgYTAsIHNwLCAwDQotICAgICAgICBhZGRpIHNwLCBzcCwgXCBzaXplDQotICAgICAgICByZXQNCi0gICAgICAgICAgIC5lbmRtDQotI2RlZmluZSBSRVQwICAgIHJldA0KLSAgICAjZWxzZSAvKiBpZmRlZiBfX1hURU5TQV9DQUxMMF9BQklfXyAqLw0KLSAgICAgICAgLyogV2luZG93ZWQgKi8NCi0jZGVmaW5lIEVOVFJZKCBzeiApICAgIGVudHJ5IHNwLCBzeg0KLSNkZWZpbmUgRU5UUlkwICAgIGVudHJ5IHNwLCAweDEwDQotI2RlZmluZSBSRVQoIHN6ICkgICAgICByZXR3DQotI2RlZmluZSBSRVQwICAgICAgcmV0dw0KLSAgICAjZW5kaWYgLyogaWZkZWYgX19YVEVOU0FfQ0FMTDBfQUJJX18gKi8NCi0jZW5kaWYgLyogaWZkZWYgX19BU1NFTUJMRVJfXyAqLw0KKyNpZmRlZiBfX1hURU5TQV9DQUxMMF9BQklfXw0KKyAgLyogQ2FsbDAgKi8NCisgICNkZWZpbmUgRU5UUlkoc3opICAgICBlbnRyeTEgIHN6DQorICAgIC5tYWNybyAgZW50cnkxIHNpemU9MHgxMA0KKyAgICBhZGRpICAgIHNwLCBzcCwgLVxzaXplDQorICAgIHMzMmkgICAgYTAsIHNwLCAwDQorICAgIC5lbmRtDQorICAjZGVmaW5lIEVOVFJZMCAgICAgIA0KKyAgI2RlZmluZSBSRVQoc3opICAgICAgIHJldDEgICAgc3oNCisgICAgLm1hY3JvICByZXQxIHNpemU9MHgxMA0KKyAgICBsMzJpICAgIGEwLCBzcCwgMA0KKyAgICBhZGRpICAgIHNwLCBzcCwgXHNpemUNCisgICAgcmV0DQorICAgIC5lbmRtDQorICAjZGVmaW5lIFJFVDAgICAgICAgICAgcmV0DQorI2Vsc2UNCisgIC8qIFdpbmRvd2VkICovDQorICAjZGVmaW5lIEVOVFJZKHN6KSAgICAgZW50cnkgICBzcCwgc3oNCisgICNkZWZpbmUgRU5UUlkwICAgICAgICBlbnRyeSAgIHNwLCAweDEwDQorICAjZGVmaW5lIFJFVChzeikgICAgICAgcmV0dw0KKyAgI2RlZmluZSBSRVQwICAgICAgICAgIHJldHcNCisjZW5kaWYNCisjZW5kaWYNCiANCiANCiAjZW5kaWYgLyogWFRFTlNBX0NPTlRFWFRfSCAqLw0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL1RoaXJkUGFydHkvWENDL1h0ZW5zYS94dGVuc2FfaW5pdC5jIGIvcG9ydGFibGUvVGhpcmRQYXJ0eS9YQ0MvWHRlbnNhL3h0ZW5zYV9pbml0LmMKaW5kZXggZjIyNzE4Ni4uZGE4YmYyZCAxMDA2NDQKLS0tIGEvcG9ydGFibGUvVGhpcmRQYXJ0eS9YQ0MvWHRlbnNhL3h0ZW5zYV9pbml0LmMKKysrIGIvcG9ydGFibGUvVGhpcmRQYXJ0eS9YQ0MvWHRlbnNhL3h0ZW5zYV9pbml0LmMKQEAgLTEsMyArMSw0IEBACisNCiAvKg0KICAqIENvcHlyaWdodCAoYykgMjAxNS0yMDE5IENhZGVuY2UgRGVzaWduIFN5c3RlbXMsIEluYy4NCiAgKg0KQEAgLTMwLDMxICszMSwzNiBAQAogDQogDQogI2lmZGVmIFhUX0JPQVJEDQotICAgICNpbmNsdWRlICAgIDx4dGVuc2EveHRic3AuaD4NCisjaW5jbHVkZSAgICA8eHRlbnNhL3h0YnNwLmg+DQogI2VuZGlmDQogDQogI2luY2x1ZGUgICAgInh0ZW5zYV9ydG9zLmgiDQogDQogI2lmZGVmIFhUX1JUT1NfVElNRVJfSU5UDQogDQotICAgIHVuc2lnbmVkIF94dF90aWNrX2Rpdmlzb3IgPSAwOyAvKiBjYWNoZWQgbnVtYmVyIG9mIGN5Y2xlcyBwZXIgdGljayAqLw0KK3Vuc2lnbmVkIF94dF90aWNrX2Rpdmlzb3IgPSAwOyAgLyogY2FjaGVkIG51bWJlciBvZiBjeWNsZXMgcGVyIHRpY2sgKi8NCiANCiAvKg0KLSAqIENvbXB1dGUgYW5kIGluaXRpYWxpemUgYXQgcnVuLXRpbWUgdGhlIHRpY2sgZGl2aXNvciAodGhlIG51bWJlciBvZg0KLSAqIHByb2Nlc3NvciBjbG9jayBjeWNsZXMgaW4gYW4gUlRPUyB0aWNrLCB1c2VkIHRvIHNldCB0aGUgdGljayB0aW1lcikuDQotICogQ2FsbGVkIHdoZW4gdGhlIHByb2Nlc3NvciBjbG9jayBmcmVxdWVuY3kgaXMgbm90IGtub3duIGF0IGNvbXBpbGUtdGltZS4NCi0gKi8NCi0gICAgdm9pZCBfeHRfdGlja19kaXZpc29yX2luaXQoIHZvaWQgKQ0KLSAgICB7DQotICAgICAgICAjaWZkZWYgWFRfQ0xPQ0tfRlJFUQ0KLSAgICAgICAgICAgIF94dF90aWNrX2Rpdmlzb3IgPSAoIFhUX0NMT0NLX0ZSRVEgLyBYVF9USUNLX1BFUl9TRUMgKTsNCi0gICAgICAgICNlbHNlDQotICAgICAgICAgICAgI2lmZGVmIFhUX0JPQVJEDQotICAgICAgICAgICAgICAgIF94dF90aWNrX2Rpdmlzb3IgPSB4dGJzcF9jbG9ja19mcmVxX2h6KCkgLyBYVF9USUNLX1BFUl9TRUM7DQotICAgICAgICAgICAgI2Vsc2UNCi0gICAgICAgICAgICAjZXJyb3IgIk5vIHdheSB0byBvYnRhaW4gcHJvY2Vzc29yIGNsb2NrIGZyZXF1ZW5jeSINCi0gICAgICAgICAgICAjZW5kaWYgLyogWFRfQk9BUkQgKi8NCi0gICAgICAgICNlbmRpZiAvKiBYVF9DTE9DS19GUkVRICovDQotICAgIH0NCitDb21wdXRlIGFuZCBpbml0aWFsaXplIGF0IHJ1bi10aW1lIHRoZSB0aWNrIGRpdmlzb3IgKHRoZSBudW1iZXIgb2YgDQorcHJvY2Vzc29yIGNsb2NrIGN5Y2xlcyBpbiBhbiBSVE9TIHRpY2ssIHVzZWQgdG8gc2V0IHRoZSB0aWNrIHRpbWVyKS4NCitDYWxsZWQgd2hlbiB0aGUgcHJvY2Vzc29yIGNsb2NrIGZyZXF1ZW5jeSBpcyBub3Qga25vd24gYXQgY29tcGlsZS10aW1lLg0KKyovDQordm9pZCBfeHRfdGlja19kaXZpc29yX2luaXQodm9pZCkNCit7DQorI2lmZGVmIFhUX0NMT0NLX0ZSRVENCisNCisgICAgX3h0X3RpY2tfZGl2aXNvciA9IChYVF9DTE9DS19GUkVRIC8gWFRfVElDS19QRVJfU0VDKTsNCisNCisjZWxzZQ0KKw0KKyAgICAjaWZkZWYgWFRfQk9BUkQNCisgICAgX3h0X3RpY2tfZGl2aXNvciA9IHh0YnNwX2Nsb2NrX2ZyZXFfaHooKSAvIFhUX1RJQ0tfUEVSX1NFQzsNCisgICAgI2Vsc2UNCisgICAgI2Vycm9yICJObyB3YXkgdG8gb2J0YWluIHByb2Nlc3NvciBjbG9jayBmcmVxdWVuY3kiDQorICAgICNlbmRpZiAgLyogWFRfQk9BUkQgKi8NCisNCisjZW5kaWYgLyogWFRfQ0xPQ0tfRlJFUSAqLw0KK30NCiANCiAjZW5kaWYgLyogWFRfUlRPU19USU1FUl9JTlQgKi8NCisNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9UaGlyZFBhcnR5L1hDQy9YdGVuc2EveHRlbnNhX2ludHIuYyBiL3BvcnRhYmxlL1RoaXJkUGFydHkvWENDL1h0ZW5zYS94dGVuc2FfaW50ci5jCmluZGV4IGI3OWM5ZWQuLjg0NmFhZmIgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL1RoaXJkUGFydHkvWENDL1h0ZW5zYS94dGVuc2FfaW50ci5jCisrKyBiL3BvcnRhYmxlL1RoaXJkUGFydHkvWENDL1h0ZW5zYS94dGVuc2FfaW50ci5jCkBAIC0xLDMgKzEsNCBAQAorDQogLyoNCiAgKiBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxOSBDYWRlbmNlIERlc2lnbiBTeXN0ZW1zLCBJbmMuDQogICoNCkBAIC0zNywxMTAgKzM4LDk2IEBACiANCiAvKiBIYW5kbGVyIHRhYmxlIGlzIGluIHh0ZW5zYV9pbnRyX2FzbS5TICovDQogDQotICAgIGV4dGVybiB4dF9leGNfaGFuZGxlciBfeHRfZXhjZXB0aW9uX3RhYmxlWyBYQ0hBTF9FWENDQVVTRV9OVU0gXTsNCitleHRlcm4geHRfZXhjX2hhbmRsZXIgX3h0X2V4Y2VwdGlvbl90YWJsZVtYQ0hBTF9FWENDQVVTRV9OVU1dOw0KIA0KIA0KIC8qDQotICogRGVmYXVsdCBoYW5kbGVyIGZvciB1bmhhbmRsZWQgZXhjZXB0aW9ucy4NCi0gKi8NCi0gICAgdm9pZCB4dF91bmhhbmRsZWRfZXhjZXB0aW9uKCBYdEV4Y0ZyYW1lICogZnJhbWUgKQ0KLSAgICB7DQotICAgICAgICBleGl0KCAtMSApOw0KLSAgICB9DQorICBEZWZhdWx0IGhhbmRsZXIgZm9yIHVuaGFuZGxlZCBleGNlcHRpb25zLg0KKyovDQordm9pZCB4dF91bmhhbmRsZWRfZXhjZXB0aW9uKFh0RXhjRnJhbWUgKmZyYW1lKQ0KK3sNCisgICAgZXhpdCgtMSk7DQorfQ0KIA0KIA0KIC8qDQotICogVGhpcyBmdW5jdGlvbiByZWdpc3RlcnMgYSBoYW5kbGVyIGZvciB0aGUgc3BlY2lmaWVkIGV4Y2VwdGlvbi4NCi0gKiBUaGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgYWRkcmVzcyBvZiB0aGUgcHJldmlvdXMgaGFuZGxlci4NCi0gKiBPbiBlcnJvciwgaXQgcmV0dXJucyAwLg0KLSAqLw0KLSAgICB4dF9leGNfaGFuZGxlciB4dF9zZXRfZXhjZXB0aW9uX2hhbmRsZXIoIGludCBuLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHh0X2V4Y19oYW5kbGVyIGYgKQ0KLSAgICB7DQotICAgICAgICB4dF9leGNfaGFuZGxlciBvbGQ7DQorICBUaGlzIGZ1bmN0aW9uIHJlZ2lzdGVycyBhIGhhbmRsZXIgZm9yIHRoZSBzcGVjaWZpZWQgZXhjZXB0aW9uLg0KKyAgVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGFkZHJlc3Mgb2YgdGhlIHByZXZpb3VzIGhhbmRsZXIuDQorICBPbiBlcnJvciwgaXQgcmV0dXJucyAwLg0KKyovDQoreHRfZXhjX2hhbmRsZXIgeHRfc2V0X2V4Y2VwdGlvbl9oYW5kbGVyKGludCBuLCB4dF9leGNfaGFuZGxlciBmKQ0KK3sNCisgICAgeHRfZXhjX2hhbmRsZXIgb2xkOw0KIA0KLSAgICAgICAgaWYoICggbiA8IDAgKSB8fCAoIG4gPj0gWENIQUxfRVhDQ0FVU0VfTlVNICkgKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHJldHVybiAwOyAvKiBpbnZhbGlkIGV4Y2VwdGlvbiBudW1iZXIgKi8NCi0gICAgICAgIH0NCisgICAgaWYoIG4gPCAwIHx8IG4gPj0gWENIQUxfRVhDQ0FVU0VfTlVNICkNCisgICAgICAgIHJldHVybiAwOyAgICAgICAvKiBpbnZhbGlkIGV4Y2VwdGlvbiBudW1iZXIgKi8NCiANCi0gICAgICAgIG9sZCA9IF94dF9leGNlcHRpb25fdGFibGVbIG4gXTsNCisgICAgb2xkID0gX3h0X2V4Y2VwdGlvbl90YWJsZVtuXTsNCiANCi0gICAgICAgIGlmKCBmICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBfeHRfZXhjZXB0aW9uX3RhYmxlWyBuIF0gPSBmOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZWxzZQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIF94dF9leGNlcHRpb25fdGFibGVbIG4gXSA9ICZ4dF91bmhhbmRsZWRfZXhjZXB0aW9uOw0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgcmV0dXJuKCAoIG9sZCA9PSAmeHRfdW5oYW5kbGVkX2V4Y2VwdGlvbiApID8gMCA6IG9sZCApOw0KKyAgICBpZiAoZikgew0KKyAgICAgICAgX3h0X2V4Y2VwdGlvbl90YWJsZVtuXSA9IGY7DQorICAgIH0NCisgICAgZWxzZSB7DQorICAgICAgICBfeHRfZXhjZXB0aW9uX3RhYmxlW25dID0gJnh0X3VuaGFuZGxlZF9leGNlcHRpb247DQogICAgIH0NCiANCi0jZW5kaWYgLyogaWYgWENIQUxfSEFWRV9FWENFUFRJT05TICovDQorICAgIHJldHVybiAoKG9sZCA9PSAmeHRfdW5oYW5kbGVkX2V4Y2VwdGlvbikgPyAwIDogb2xkKTsNCit9DQorDQorI2VuZGlmDQogDQogI2lmIFhDSEFMX0hBVkVfSU5URVJSVVBUUw0KIA0KIC8qIEhhbmRsZXIgdGFibGUgaXMgaW4geHRlbnNhX2ludHJfYXNtLlMgKi8NCiANCi0gICAgdHlwZWRlZiBzdHJ1Y3QgeHRfaGFuZGxlcl90YWJsZV9lbnRyeQ0KLSAgICB7DQotICAgICAgICB2b2lkICogaGFuZGxlcjsNCi0gICAgICAgIHZvaWQgKiBhcmc7DQotICAgIH0geHRfaGFuZGxlcl90YWJsZV9lbnRyeTsNCit0eXBlZGVmIHN0cnVjdCB4dF9oYW5kbGVyX3RhYmxlX2VudHJ5IHsNCisgICAgdm9pZCAqIGhhbmRsZXI7DQorICAgIHZvaWQgKiBhcmc7DQorfSB4dF9oYW5kbGVyX3RhYmxlX2VudHJ5Ow0KIA0KLSAgICBleHRlcm4geHRfaGFuZGxlcl90YWJsZV9lbnRyeSBfeHRfaW50ZXJydXB0X3RhYmxlWyBYQ0hBTF9OVU1fSU5URVJSVVBUUyBdOw0KK2V4dGVybiB4dF9oYW5kbGVyX3RhYmxlX2VudHJ5IF94dF9pbnRlcnJ1cHRfdGFibGVbWENIQUxfTlVNX0lOVEVSUlVQVFNdOw0KIA0KIA0KIC8qDQotICogRGVmYXVsdCBoYW5kbGVyIGZvciB1bmhhbmRsZWQgaW50ZXJydXB0cy4NCi0gKi8NCi0gICAgdm9pZCB4dF91bmhhbmRsZWRfaW50ZXJydXB0KCB2b2lkICogYXJnICkNCi0gICAgew0KLSAgICAgICAgZXhpdCggLTEgKTsNCi0gICAgfQ0KKyAgRGVmYXVsdCBoYW5kbGVyIGZvciB1bmhhbmRsZWQgaW50ZXJydXB0cy4NCisqLw0KK3ZvaWQgeHRfdW5oYW5kbGVkX2ludGVycnVwdCh2b2lkICogYXJnKQ0KK3sNCisgICAgZXhpdCgtMSk7DQorfQ0KIA0KIA0KIC8qDQotICogVGhpcyBmdW5jdGlvbiByZWdpc3RlcnMgYSBoYW5kbGVyIGZvciB0aGUgc3BlY2lmaWVkIGludGVycnVwdC4gVGhlICJhcmciDQotICogcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgYXJndW1lbnQgdG8gYmUgcGFzc2VkIHRvIHRoZSBoYW5kbGVyIHdoZW4gaXQgaXMNCi0gKiBpbnZva2VkLiBUaGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgYWRkcmVzcyBvZiB0aGUgcHJldmlvdXMgaGFuZGxlci4NCi0gKiBPbiBlcnJvciwgaXQgcmV0dXJucyAwLg0KLSAqLw0KLSAgICB4dF9oYW5kbGVyIHh0X3NldF9pbnRlcnJ1cHRfaGFuZGxlciggaW50IG4sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4dF9oYW5kbGVyIGYsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICogYXJnICkNCi0gICAgew0KLSAgICAgICAgeHRfaGFuZGxlcl90YWJsZV9lbnRyeSAqIGVudHJ5Ow0KLSAgICAgICAgeHRfaGFuZGxlciBvbGQ7DQorICBUaGlzIGZ1bmN0aW9uIHJlZ2lzdGVycyBhIGhhbmRsZXIgZm9yIHRoZSBzcGVjaWZpZWQgaW50ZXJydXB0LiBUaGUgImFyZyINCisgIHBhcmFtZXRlciBzcGVjaWZpZXMgdGhlIGFyZ3VtZW50IHRvIGJlIHBhc3NlZCB0byB0aGUgaGFuZGxlciB3aGVuIGl0IGlzDQorICBpbnZva2VkLiBUaGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgYWRkcmVzcyBvZiB0aGUgcHJldmlvdXMgaGFuZGxlci4NCisgIE9uIGVycm9yLCBpdCByZXR1cm5zIDAuDQorKi8NCit4dF9oYW5kbGVyIHh0X3NldF9pbnRlcnJ1cHRfaGFuZGxlcihpbnQgbiwgeHRfaGFuZGxlciBmLCB2b2lkICogYXJnKQ0KK3sNCisgICAgeHRfaGFuZGxlcl90YWJsZV9lbnRyeSAqIGVudHJ5Ow0KKyAgICB4dF9oYW5kbGVyICAgICAgICAgICAgICAgb2xkOw0KIA0KLSAgICAgICAgaWYoICggbiA8IDAgKSB8fCAoIG4gPj0gWENIQUxfTlVNX0lOVEVSUlVQVFMgKSApDQotICAgICAgICB7DQotICAgICAgICAgICAgcmV0dXJuIDA7IC8qIGludmFsaWQgaW50ZXJydXB0IG51bWJlciAqLw0KLSAgICAgICAgfQ0KKyAgICBpZiggbiA8IDAgfHwgbiA+PSBYQ0hBTF9OVU1fSU5URVJSVVBUUyApDQorICAgICAgICByZXR1cm4gMDsgICAgICAgLyogaW52YWxpZCBpbnRlcnJ1cHQgbnVtYmVyICovDQorICAgIGlmKCBYdGhhbF9pbnRsZXZlbFtuXSA+IFhDSEFMX0VYQ01fTEVWRUwgKQ0KKyAgICAgICAgcmV0dXJuIDA7ICAgICAgIC8qIHByaW9yaXR5IGxldmVsIHRvbyBoaWdoIHRvIHNhZmVseSBoYW5kbGUgaW4gQyAqLw0KIA0KLSAgICAgICAgaWYoIFh0aGFsX2ludGxldmVsWyBuIF0gPiBYQ0hBTF9FWENNX0xFVkVMICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICByZXR1cm4gMDsgLyogcHJpb3JpdHkgbGV2ZWwgdG9vIGhpZ2ggdG8gc2FmZWx5IGhhbmRsZSBpbiBDICovDQotICAgICAgICB9DQorICAgIGVudHJ5ID0gX3h0X2ludGVycnVwdF90YWJsZSArIG47DQorICAgIG9sZCAgID0gZW50cnktPmhhbmRsZXI7DQogDQotICAgICAgICBlbnRyeSA9IF94dF9pbnRlcnJ1cHRfdGFibGUgKyBuOw0KLSAgICAgICAgb2xkID0gZW50cnktPmhhbmRsZXI7DQotDQotICAgICAgICBpZiggZiApDQotICAgICAgICB7DQotICAgICAgICAgICAgZW50cnktPmhhbmRsZXIgPSBmOw0KLSAgICAgICAgICAgIGVudHJ5LT5hcmcgPSBhcmc7DQotICAgICAgICB9DQotICAgICAgICBlbHNlDQotICAgICAgICB7DQotICAgICAgICAgICAgZW50cnktPmhhbmRsZXIgPSAmeHRfdW5oYW5kbGVkX2ludGVycnVwdDsNCi0gICAgICAgICAgICBlbnRyeS0+YXJnID0gKCB2b2lkICogKSBuOw0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgcmV0dXJuKCAoIG9sZCA9PSAmeHRfdW5oYW5kbGVkX2ludGVycnVwdCApID8gMCA6IG9sZCApOw0KKyAgICBpZiAoZikgew0KKyAgICAgICAgZW50cnktPmhhbmRsZXIgPSBmOw0KKyAgICAgICAgZW50cnktPmFyZyAgICAgPSBhcmc7DQogICAgIH0NCisgICAgZWxzZSB7DQorICAgICAgICBlbnRyeS0+aGFuZGxlciA9ICZ4dF91bmhhbmRsZWRfaW50ZXJydXB0Ow0KKyAgICAgICAgZW50cnktPmFyZyAgICAgPSAodm9pZCopbjsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gKChvbGQgPT0gJnh0X3VuaGFuZGxlZF9pbnRlcnJ1cHQpID8gMCA6IG9sZCk7DQorfQ0KIA0KIA0KICNlbmRpZiAvKiBYQ0hBTF9IQVZFX0lOVEVSUlVQVFMgKi8NCisNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9UaGlyZFBhcnR5L1hDQy9YdGVuc2EveHRlbnNhX292ZXJsYXlfb3NfaG9vay5jIGIvcG9ydGFibGUvVGhpcmRQYXJ0eS9YQ0MvWHRlbnNhL3h0ZW5zYV9vdmVybGF5X29zX2hvb2suYwppbmRleCBmODJkMmQ2Li4wNTBiNDk1IDEwMDY0NAotLS0gYS9wb3J0YWJsZS9UaGlyZFBhcnR5L1hDQy9YdGVuc2EveHRlbnNhX292ZXJsYXlfb3NfaG9vay5jCisrKyBiL3BvcnRhYmxlL1RoaXJkUGFydHkvWENDL1h0ZW5zYS94dGVuc2Ffb3ZlcmxheV9vc19ob29rLmMKQEAgLTEsMyArMSw0IEBACisNCiAvKg0KICAqIENvcHlyaWdodCAoYykgMjAxNS0yMDE5IENhZGVuY2UgRGVzaWduIFN5c3RlbXMsIEluYy4NCiAgKg0KQEAgLTMzLDcgKzM0LDcgQEAKIC8qIE11dGV4IG9iamVjdCB0aGF0IGNvbnRyb2xzIGFjY2VzcyB0byB0aGUgb3ZlcmxheS4gQ3VycmVudGx5IG9ubHkgb25lDQogICogb3ZlcmxheSByZWdpb24gaXMgc3VwcG9ydGVkIHNvIG9uZSBtdXRleCBzdWZmaWNlcy4NCiAgKi8NCi0gICAgc3RhdGljIFNlbWFwaG9yZUhhbmRsZV90IHh0X292ZXJsYXlfbXV0ZXg7DQorc3RhdGljIFNlbWFwaG9yZUhhbmRsZV90IHh0X292ZXJsYXlfbXV0ZXg7DQogDQogDQogLyogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgb3ZlcnJpZGRlbiB0byBwcm92aWRlIE9TIHNwZWNpZmljIGluaXQgc3VjaA0KQEAgLTQxLDMwICs0MiwzMCBAQAogICogVHlwaWNhbGx5IHRoaXMgbXV0ZXggd291bGQgYmUgc2V0IHVwIHdpdGggcHJpb3JpdHkgaW5oZXJpdGFuY2UuIFNlZQ0KICAqIG92ZXJsYXkgbWFuYWdlciBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGRldGFpbHMuDQogICovDQotICAgIHZvaWQgeHRfb3ZlcmxheV9pbml0X29zKCB2b2lkICkNCi0gICAgew0KLSAgICAgICAgLyogQ3JlYXRlIHRoZSBtdXRleCBmb3Igb3ZlcmxheSBhY2Nlc3MuIFByaW9yaXR5IGluaGVyaXRhbmNlIGlzDQotICAgICAgICAgKiByZXF1aXJlZC4NCi0gICAgICAgICAqLw0KLSAgICAgICAgeHRfb3ZlcmxheV9tdXRleCA9IHhTZW1hcGhvcmVDcmVhdGVNdXRleCgpOw0KLSAgICB9DQordm9pZCB4dF9vdmVybGF5X2luaXRfb3Modm9pZCkNCit7DQorICAgIC8qIENyZWF0ZSB0aGUgbXV0ZXggZm9yIG92ZXJsYXkgYWNjZXNzLiBQcmlvcml0eSBpbmhlcml0YW5jZSBpcw0KKyAgICAgKiByZXF1aXJlZC4NCisgICAgICovDQorICAgIHh0X292ZXJsYXlfbXV0ZXggPSB4U2VtYXBob3JlQ3JlYXRlTXV0ZXgoKTsNCit9DQogDQogDQogLyogVGhpcyBmdW5jdGlvbiBsb2NrcyBhY2Nlc3MgdG8gc2hhcmVkIG92ZXJsYXkgcmVzb3VyY2VzLCB0eXBpY2FsbHkNCiAgKiBieSBhY3F1aXJpbmcgYSBtdXRleC4NCiAgKi8NCi0gICAgdm9pZCB4dF9vdmVybGF5X2xvY2soIHZvaWQgKQ0KLSAgICB7DQotICAgICAgICB4U2VtYXBob3JlVGFrZSggeHRfb3ZlcmxheV9tdXRleCwgMCApOw0KLSAgICB9DQordm9pZCB4dF9vdmVybGF5X2xvY2sodm9pZCkNCit7DQorICAgIHhTZW1hcGhvcmVUYWtlKHh0X292ZXJsYXlfbXV0ZXgsIDApOw0KK30NCiANCiANCiAvKiBUaGlzIGZ1bmN0aW9uIHJlbGVhc2VzIGFjY2VzcyB0byBzaGFyZWQgb3ZlcmxheSByZXNvdXJjZXMsIHR5cGljYWxseQ0KICAqIGJ5IHVubG9ja2luZyBhIG11dGV4Lg0KICAqLw0KLSAgICB2b2lkIHh0X292ZXJsYXlfdW5sb2NrKCB2b2lkICkNCi0gICAgew0KLSAgICAgICAgeFNlbWFwaG9yZUdpdmUoIHh0X292ZXJsYXlfbXV0ZXggKTsNCi0gICAgfQ0KK3ZvaWQgeHRfb3ZlcmxheV91bmxvY2sodm9pZCkNCit7DQorICAgIHhTZW1hcGhvcmVHaXZlKHh0X292ZXJsYXlfbXV0ZXgpOw0KK30NCiANCi0jZW5kaWYgLyogaWYgY29uZmlnVVNFX01VVEVYICovDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvVGhpcmRQYXJ0eS9YQ0MvWHRlbnNhL3h0ZW5zYV9ydG9zLmggYi9wb3J0YWJsZS9UaGlyZFBhcnR5L1hDQy9YdGVuc2EveHRlbnNhX3J0b3MuaAppbmRleCAyMTIzYTdmLi4yMDdhNzZjIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9UaGlyZFBhcnR5L1hDQy9YdGVuc2EveHRlbnNhX3J0b3MuaAorKysgYi9wb3J0YWJsZS9UaGlyZFBhcnR5L1hDQy9YdGVuc2EveHRlbnNhX3J0b3MuaApAQCAtMSwzICsxLDQgQEAKKw0KIC8qDQogICogQ29weXJpZ2h0IChjKSAyMDE1LTIwMTkgQ2FkZW5jZSBEZXNpZ24gU3lzdGVtcywgSW5jLg0KICAqDQpAQCAtMzIsMTAgKzMzLDEwIEBACiAgKiBNYWNyb3MgaW4gdGhpcyBoZWFkZXIgbWFwIGNhbGxvdXRzIGZyb20gZ2VuZXJpYyBYdGVuc2EgZmlsZXMgdG8gc3BlY2lmaWMNCiAgKiBSVE9TIGZ1bmN0aW9ucy4gSXQgbWF5IGFsc28gYmUgaW5jbHVkZWQgaW4gQyBzb3VyY2UgZmlsZXMuDQogICoNCi0gKiBYdGVuc2EgUlRPUyBwb3J0cyBzdXBwb3J0IGFsbCBSVE9TLWNvbXBhdGlibGUgY29uZmlndXJhdGlvbnMgb2YgdGhlIFh0ZW5zYQ0KLSAqIGFyY2hpdGVjdHVyZSwgdXNpbmcgdGhlIFh0ZW5zYSBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllciAoSEFMKSB0byBkZWFsDQorICogWHRlbnNhIFJUT1MgcG9ydHMgc3VwcG9ydCBhbGwgUlRPUy1jb21wYXRpYmxlIGNvbmZpZ3VyYXRpb25zIG9mIHRoZSBYdGVuc2EgDQorICogYXJjaGl0ZWN0dXJlLCB1c2luZyB0aGUgWHRlbnNhIGhhcmR3YXJlIGFic3RyYWN0aW9uIGxheWVyIChIQUwpIHRvIGRlYWwgDQogICogd2l0aCBjb25maWd1cmF0aW9uIHNwZWNpZmljcy4NCi0gKg0KKyAqIA0KICAqIFNob3VsZCBiZSBpbmNsdWRlZCBieSBhbGwgWHRlbnNhIGdlbmVyaWMgYW5kIFJUT1MgcG9ydC1zcGVjaWZpYyBzb3VyY2VzLg0KICAqLw0KIA0KQEAgLTQzLDkgKzQ0LDkgQEAKICNkZWZpbmUgWFRFTlNBX1JUT1NfSA0KIA0KICNpZmRlZiBfX0FTU0VNQkxFUl9fDQotICAgICNpbmNsdWRlICAgIDx4dGVuc2EvY29yZWFzbS5oPg0KKyNpbmNsdWRlICAgIDx4dGVuc2EvY29yZWFzbS5oPg0KICNlbHNlDQotICAgICNpbmNsdWRlICAgIDx4dGVuc2EvY29uZmlnL2NvcmUuaD4NCisjaW5jbHVkZSAgICA8eHRlbnNhL2NvbmZpZy9jb3JlLmg+DQogI2VuZGlmDQogDQogI2luY2x1ZGUgICAgPHh0ZW5zYS9jb3JlYml0cy5oPg0KQEAgLTUzLDE4MCArNTQsMTgxIEBACiAjaW5jbHVkZSAgICA8eHRlbnNhL3NpbWNhbGwuaD4NCiANCiAvKg0KLSAqIEluY2x1ZGUgYW55IFJUT1Mgc3BlY2lmaWMgZGVmaW5pdGlvbnMgdGhhdCBhcmUgbmVlZGVkIGJ5IHRoaXMgaGVhZGVyLg0KLSAqLw0KK0luY2x1ZGUgYW55IFJUT1Mgc3BlY2lmaWMgZGVmaW5pdGlvbnMgdGhhdCBhcmUgbmVlZGVkIGJ5IHRoaXMgaGVhZGVyLg0KKyovDQogI2luY2x1ZGUgICAgPEZyZWVSVE9TQ29uZmlnLmg+DQogDQogLyoNCi0gKiBDb252ZXJ0IEZyZWVSVE9TQ29uZmlnIGRlZmluaXRpb25zIHRvIFhURU5TQSBkZWZpbml0aW9ucy4NCi0gKiBIb3dldmVyIHRoZXNlIGNhbiBzdGlsbCBiZSBvdmVycmlkZGVuIGZyb20gdGhlIGNvbW1hbmQgbGluZS4NCi0gKi8NCitDb252ZXJ0IEZyZWVSVE9TQ29uZmlnIGRlZmluaXRpb25zIHRvIFhURU5TQSBkZWZpbml0aW9ucy4NCitIb3dldmVyIHRoZXNlIGNhbiBzdGlsbCBiZSBvdmVycmlkZGVuIGZyb20gdGhlIGNvbW1hbmQgbGluZS4NCisqLw0KIA0KICNpZm5kZWYgWFRfU0lNVUxBVE9SDQotICAgICNpZiBjb25maWdYVF9TSU1VTEFUT1INCi0gICAgICAgICNkZWZpbmUgWFRfU0lNVUxBVE9SICAgIDEgICAgICAgLyogU2ltdWxhdG9yIG1vZGUgKi8NCi0gICAgI2VuZGlmDQorICAjaWYgY29uZmlnWFRfU0lNVUxBVE9SDQorICAgICNkZWZpbmUgWFRfU0lNVUxBVE9SICAgICAgICAgICAgIDEgIC8qIFNpbXVsYXRvciBtb2RlICovDQorICAjZW5kaWYNCiAjZW5kaWYNCiANCiAjaWZuZGVmIFhUX0JPQVJEDQotICAgICNpZiBjb25maWdYVF9CT0FSRA0KLSAgICAgICAgI2RlZmluZSBYVF9CT0FSRCAgICAxICAgICAgICAgICAvKiBCb2FyZCBtb2RlICovDQotICAgICNlbmRpZg0KKyAgI2lmIGNvbmZpZ1hUX0JPQVJEDQorICAgICNkZWZpbmUgWFRfQk9BUkQgICAgICAgICAgICAgICAgIDEgIC8qIEJvYXJkIG1vZGUgKi8NCisgICNlbmRpZg0KICNlbmRpZg0KIA0KICNpZm5kZWYgWFRfVElNRVJfSU5ERVgNCi0gICAgI2lmIGRlZmluZWQgY29uZmlnWFRfVElNRVJfSU5ERVgNCi0gICAgICAgICNkZWZpbmUgWFRfVElNRVJfSU5ERVggICAgY29uZmlnWFRfVElNRVJfSU5ERVggICAgIC8qIEluZGV4IG9mIGhhcmR3YXJlIHRpbWVyIHRvIGJlIHVzZWQgKi8NCi0gICAgI2VuZGlmDQorICAjaWYgZGVmaW5lZCBjb25maWdYVF9USU1FUl9JTkRFWA0KKyAgICAjZGVmaW5lIFhUX1RJTUVSX0lOREVYICAgICAgICAgICBjb25maWdYVF9USU1FUl9JTkRFWCAgLyogSW5kZXggb2YgaGFyZHdhcmUgdGltZXIgdG8gYmUgdXNlZCAqLw0KKyAgI2VuZGlmDQogI2VuZGlmDQogDQogI2lmbmRlZiBYVF9JTlRFWENfSE9PS1MNCi0gICAgI2lmIGNvbmZpZ1hUX0lOVEVYQ19IT09LUw0KLSAgICAgICAgI2RlZmluZSBYVF9JTlRFWENfSE9PS1MgICAgMSAgICAvKiBFbmFibGVzIGV4Y2VwdGlvbiBob29rcyAqLw0KLSAgICAjZW5kaWYNCisgICNpZiBjb25maWdYVF9JTlRFWENfSE9PS1MNCisgICAgI2RlZmluZSBYVF9JTlRFWENfSE9PS1MgICAgICAgICAgMSAgLyogRW5hYmxlcyBleGNlcHRpb24gaG9va3MgKi8NCisgICNlbmRpZg0KICNlbmRpZg0KIA0KLSNpZiAoICFYVF9TSU1VTEFUT1IgKSAmJiAoICFYVF9CT0FSRCApDQotICAgICNlcnJvciBFaXRoZXIgWFRfU0lNVUxBVE9SIG9yIFhUX0JPQVJEIG11c3QgYmUgZGVmaW5lZC4NCisjaWYgKCFYVF9TSU1VTEFUT1IpICYmICghWFRfQk9BUkQpDQorICAjZXJyb3IgRWl0aGVyIFhUX1NJTVVMQVRPUiBvciBYVF9CT0FSRCBtdXN0IGJlIGRlZmluZWQuDQogI2VuZGlmDQogDQogDQogLyoNCi0gKiBOYW1lIG9mIFJUT1MgKGZvciBtZXNzYWdlcykuDQotICovDQorTmFtZSBvZiBSVE9TIChmb3IgbWVzc2FnZXMpLg0KKyovDQogI2RlZmluZSBYVF9SVE9TX05BTUUgICAgRnJlZVJUT1MNCiANCiAvKg0KLSAqIENoZWNrIHNvbWUgWHRlbnNhIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIGFuZCByZXBvcnQgZXJyb3IgaWYgbm90IG1ldC4NCi0gKiBFcnJvciBtZXNzYWdlcyBjYW4gYmUgY3VzdG9taXplIHRvIHRoZSBSVE9TIHBvcnQuDQotICovDQorQ2hlY2sgc29tZSBYdGVuc2EgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgYW5kIHJlcG9ydCBlcnJvciBpZiBub3QgbWV0Lg0KK0Vycm9yIG1lc3NhZ2VzIGNhbiBiZSBjdXN0b21pemUgdG8gdGhlIFJUT1MgcG9ydC4NCisqLw0KIA0KICNpZiAhWENIQUxfSEFWRV9YRUEyDQotICAgICNlcnJvciAiRnJlZVJUT1MvWHRlbnNhIHJlcXVpcmVzIFhFQTIgKGV4Y2VwdGlvbiBhcmNoaXRlY3R1cmUgMikuIg0KKyNlcnJvciAiRnJlZVJUT1MvWHRlbnNhIHJlcXVpcmVzIFhFQTIgKGV4Y2VwdGlvbiBhcmNoaXRlY3R1cmUgMikuIg0KICNlbmRpZg0KIA0KIA0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotKg0KLSogIFJUT1MgQ0FMTE9VVCBNQUNST1MgTUFQUEVEIFRPIFJUT1MgUE9SVC1TUEVDSUZJQyBGVU5DVElPTlMuDQotKg0KLSogIERlZmluZSBjYWxsb3V0IG1hY3JvcyB1c2VkIGluIGdlbmVyaWMgWHRlbnNhIGNvZGUgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgUlRPUy4NCi0qICBUaGUgbWFjcm9zIGFyZSBzaW1wbHkgdGhlIGZ1bmN0aW9uIG5hbWVzIGZvciB1c2UgaW4gY2FsbHMgZnJvbSBhc3NlbWJsZXIgY29kZS4NCi0qICBTb21lIG9mIHRoZXNlIGZ1bmN0aW9ucyBtYXkgY2FsbCBiYWNrIHRvIGdlbmVyaWMgZnVuY3Rpb25zIGluIHh0ZW5zYV9jb250ZXh0LmggLg0KLSoNCisNCitSVE9TIENBTExPVVQgTUFDUk9TIE1BUFBFRCBUTyBSVE9TIFBPUlQtU1BFQ0lGSUMgRlVOQ1RJT05TLg0KKw0KK0RlZmluZSBjYWxsb3V0IG1hY3JvcyB1c2VkIGluIGdlbmVyaWMgWHRlbnNhIGNvZGUgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgUlRPUy4NCitUaGUgbWFjcm9zIGFyZSBzaW1wbHkgdGhlIGZ1bmN0aW9uIG5hbWVzIGZvciB1c2UgaW4gY2FsbHMgZnJvbSBhc3NlbWJsZXIgY29kZS4NCitTb21lIG9mIHRoZXNlIGZ1bmN0aW9ucyBtYXkgY2FsbCBiYWNrIHRvIGdlbmVyaWMgZnVuY3Rpb25zIGluIHh0ZW5zYV9jb250ZXh0LmggLg0KKw0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQogDQogLyoNCi0gKiBJbmZvcm0gUlRPUyBvZiBlbnRyeSBpbnRvIGFuIGludGVycnVwdCBoYW5kbGVyIHRoYXQgd2lsbCBhZmZlY3QgaXQuDQotICogQWxsb3dzIFJUT1MgdG8gbWFuYWdlIHN3aXRjaCB0byBhbnkgc3lzdGVtIHN0YWNrIGFuZCBjb3VudCBuZXN0aW5nIGxldmVsLg0KLSAqIENhbGxlZCBhZnRlciBtaW5pbWFsIGNvbnRleHQgaGFzIGJlZW4gc2F2ZWQsIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4NCi0gKiBSVE9TIHBvcnQgY2FuIGNhbGwwIF94dF9jb250ZXh0X3NhdmUgdG8gc2F2ZSB0aGUgcmVzdCBvZiB0aGUgY29udGV4dC4NCi0gKiBNYXkgb25seSBiZSBjYWxsZWQgZnJvbSBhc3NlbWJseSBjb2RlIGJ5IHRoZSAnY2FsbDAnIGluc3RydWN0aW9uLg0KLSAqLw0KLS8qIHZvaWQgWFRfUlRPU19JTlRfRU5URVIodm9pZCkgKi8NCi0jZGVmaW5lIFhUX1JUT1NfSU5UX0VOVEVSICAgIF9mcnh0X2ludF9lbnRlcg0KK0luZm9ybSBSVE9TIG9mIGVudHJ5IGludG8gYW4gaW50ZXJydXB0IGhhbmRsZXIgdGhhdCB3aWxsIGFmZmVjdCBpdC4gDQorQWxsb3dzIFJUT1MgdG8gbWFuYWdlIHN3aXRjaCB0byBhbnkgc3lzdGVtIHN0YWNrIGFuZCBjb3VudCBuZXN0aW5nIGxldmVsLg0KK0NhbGxlZCBhZnRlciBtaW5pbWFsIGNvbnRleHQgaGFzIGJlZW4gc2F2ZWQsIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4NCitSVE9TIHBvcnQgY2FuIGNhbGwwIF94dF9jb250ZXh0X3NhdmUgdG8gc2F2ZSB0aGUgcmVzdCBvZiB0aGUgY29udGV4dC4NCitNYXkgb25seSBiZSBjYWxsZWQgZnJvbSBhc3NlbWJseSBjb2RlIGJ5IHRoZSAnY2FsbDAnIGluc3RydWN0aW9uLg0KKyovDQorLy8gdm9pZCBYVF9SVE9TX0lOVF9FTlRFUih2b2lkKQ0KKyNkZWZpbmUgWFRfUlRPU19JTlRfRU5URVIgICBfZnJ4dF9pbnRfZW50ZXINCiANCiAvKg0KLSAqIEluZm9ybSBSVE9TIG9mIGNvbXBsZXRpb24gb2YgYW4gaW50ZXJydXB0IGhhbmRsZXIsIGFuZCBnaXZlIGNvbnRyb2wgdG8NCi0gKiBSVE9TIHRvIHBlcmZvcm0gdGhyZWFkL3Rhc2sgc2NoZWR1bGluZywgc3dpdGNoIGJhY2sgZnJvbSBhbnkgc3lzdGVtIHN0YWNrDQotICogYW5kIHJlc3RvcmUgdGhlIGNvbnRleHQsIGFuZCByZXR1cm4gdG8gdGhlIGV4aXQgZGlzcGF0Y2hlciBzYXZlZCBpbiB0aGUNCi0gKiBzdGFjayBmcmFtZSBhdCBYVF9TVEtfRVhJVC4gUlRPUyBwb3J0IGNhbiBjYWxsMCBfeHRfY29udGV4dF9yZXN0b3JlDQotICogdG8gc2F2ZSB0aGUgY29udGV4dCBzYXZlZCBpbiBYVF9SVE9TX0lOVF9FTlRFUiB2aWEgX3h0X2NvbnRleHRfc2F2ZSwNCi0gKiBsZWF2aW5nIG9ubHkgYSBtaW5pbWFsIHBhcnQgb2YgdGhlIGNvbnRleHQgdG8gYmUgcmVzdG9yZWQgYnkgdGhlIGV4aXQNCi0gKiBkaXNwYXRjaGVyLiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHJldHVybiB0byB0aGUgcGxhY2UgaXQgd2FzIGNhbGxlZCBmcm9tLg0KLSAqIE1heSBvbmx5IGJlIGNhbGxlZCBmcm9tIGFzc2VtYmx5IGNvZGUgYnkgdGhlICdjYWxsMCcgaW5zdHJ1Y3Rpb24uDQotICovDQotLyogdm9pZCBYVF9SVE9TX0lOVF9FWElUKHZvaWQpICovDQorSW5mb3JtIFJUT1Mgb2YgY29tcGxldGlvbiBvZiBhbiBpbnRlcnJ1cHQgaGFuZGxlciwgYW5kIGdpdmUgY29udHJvbCB0bw0KK1JUT1MgdG8gcGVyZm9ybSB0aHJlYWQvdGFzayBzY2hlZHVsaW5nLCBzd2l0Y2ggYmFjayBmcm9tIGFueSBzeXN0ZW0gc3RhY2sNCithbmQgcmVzdG9yZSB0aGUgY29udGV4dCwgYW5kIHJldHVybiB0byB0aGUgZXhpdCBkaXNwYXRjaGVyIHNhdmVkIGluIHRoZQ0KK3N0YWNrIGZyYW1lIGF0IFhUX1NUS19FWElULiBSVE9TIHBvcnQgY2FuIGNhbGwwIF94dF9jb250ZXh0X3Jlc3RvcmUNCit0byBzYXZlIHRoZSBjb250ZXh0IHNhdmVkIGluIFhUX1JUT1NfSU5UX0VOVEVSIHZpYSBfeHRfY29udGV4dF9zYXZlLA0KK2xlYXZpbmcgb25seSBhIG1pbmltYWwgcGFydCBvZiB0aGUgY29udGV4dCB0byBiZSByZXN0b3JlZCBieSB0aGUgZXhpdA0KK2Rpc3BhdGNoZXIuIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmV0dXJuIHRvIHRoZSBwbGFjZSBpdCB3YXMgY2FsbGVkIGZyb20uDQorTWF5IG9ubHkgYmUgY2FsbGVkIGZyb20gYXNzZW1ibHkgY29kZSBieSB0aGUgJ2NhbGwwJyBpbnN0cnVjdGlvbi4NCisqLw0KKy8vIHZvaWQgWFRfUlRPU19JTlRfRVhJVCh2b2lkKQ0KICNkZWZpbmUgWFRfUlRPU19JTlRfRVhJVCAgICBfZnJ4dF9pbnRfZXhpdA0KIA0KIC8qDQotICogSW5mb3JtIFJUT1Mgb2YgdGhlIG9jY3VycmVuY2Ugb2YgYSB0aWNrIHRpbWVyIGludGVycnVwdC4NCi0gKiBJZiBSVE9TIGhhcyBubyB0aWNrIHRpbWVyLCBsZWF2ZSBYVF9SVE9TX1RJTUVSX0lOVCB1bmRlZmluZWQuDQotICogTWF5IGJlIGNvZGVkIGluIG9yIGNhbGxlZCBmcm9tIEMgb3IgYXNzZW1ibHksIHBlciBBQkkgY29udmVudGlvbnMuDQotICogUlRPUyBtYXkgb3B0aW9uYWxseSBkZWZpbmUgWFRfVElDS19QRVJfU0VDIGluIGl0cyBvd24gd2F5IChlZy4gbWFjcm8pLg0KLSAqLw0KLS8qIHZvaWQgWFRfUlRPU19USU1FUl9JTlQodm9pZCkgKi8NCi0jZGVmaW5lIFhUX1JUT1NfVElNRVJfSU5UICAgIF9mcnh0X3RpbWVyX2ludA0KLSNkZWZpbmUgWFRfVElDS19QRVJfU0VDICAgICAgY29uZmlnVElDS19SQVRFX0haDQorSW5mb3JtIFJUT1Mgb2YgdGhlIG9jY3VycmVuY2Ugb2YgYSB0aWNrIHRpbWVyIGludGVycnVwdC4NCitJZiBSVE9TIGhhcyBubyB0aWNrIHRpbWVyLCBsZWF2ZSBYVF9SVE9TX1RJTUVSX0lOVCB1bmRlZmluZWQuDQorTWF5IGJlIGNvZGVkIGluIG9yIGNhbGxlZCBmcm9tIEMgb3IgYXNzZW1ibHksIHBlciBBQkkgY29udmVudGlvbnMuDQorUlRPUyBtYXkgb3B0aW9uYWxseSBkZWZpbmUgWFRfVElDS19QRVJfU0VDIGluIGl0cyBvd24gd2F5IChlZy4gbWFjcm8pLg0KKyovDQorLy8gdm9pZCBYVF9SVE9TX1RJTUVSX0lOVCh2b2lkKQ0KKyNkZWZpbmUgWFRfUlRPU19USU1FUl9JTlQgICBfZnJ4dF90aW1lcl9pbnQNCisjZGVmaW5lIFhUX1RJQ0tfUEVSX1NFQyAgICAgY29uZmlnVElDS19SQVRFX0haDQogDQogLyoNCi0gKiBSZXR1cm4gaW4gYTE1IHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIGNvLXByb2Nlc3NvciBzdGF0ZSBzYXZlIGFyZWEgZm9yIHRoZQ0KLSAqIHRocmVhZCB0aGF0IHRyaWdnZXJlZCBhIGNvLXByb2Nlc3NvciBleGNlcHRpb24sIG9yIDAgaWYgbm8gdGhyZWFkIHdhcyBydW5uaW5nLg0KLSAqIFRoZSBzdGF0ZSBzYXZlIGFyZWEgaXMgc3RydWN0dXJlZCBhcyBkZWZpbmVkIGluIHh0ZW5zYV9jb250ZXh0LmggYW5kIGhhcyBzaXplDQotICogWFRfQ1BfU0laRS4gQ28tcHJvY2Vzc29yIGluc3RydWN0aW9ucyBzaG91bGQgb25seSBiZSB1c2VkIGluIHRocmVhZCBjb2RlLCBuZXZlcg0KLSAqIGluIGludGVycnVwdCBoYW5kbGVycyBvciB0aGUgUlRPUyBrZXJuZWwuIE1heSBvbmx5IGJlIGNhbGxlZCBmcm9tIGFzc2VtYmx5IGNvZGUNCi0gKiBhbmQgYnkgdGhlICdjYWxsMCcgaW5zdHJ1Y3Rpb24uIEEgcmVzdWx0IG9mIDAgaW5kaWNhdGVzIGFuIHVucmVjb3ZlcmFibGUgZXJyb3IuDQotICogVGhlIGltcGxlbWVudGF0aW9uIG1heSB1c2Ugb25seSBhMi00LCBhMTUgKGFsbCBvdGhlciByZWdzIG11c3QgYmUgcHJlc2VydmVkKS4NCi0gKi8NCi0vKiB2b2lkKiBYVF9SVE9TX0NQX1NUQVRFKHZvaWQpICovDQorUmV0dXJuIGluIGExNSB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBjby1wcm9jZXNzb3Igc3RhdGUgc2F2ZSBhcmVhIGZvciB0aGUgDQordGhyZWFkIHRoYXQgdHJpZ2dlcmVkIGEgY28tcHJvY2Vzc29yIGV4Y2VwdGlvbiwgb3IgMCBpZiBubyB0aHJlYWQgd2FzIHJ1bm5pbmcuDQorVGhlIHN0YXRlIHNhdmUgYXJlYSBpcyBzdHJ1Y3R1cmVkIGFzIGRlZmluZWQgaW4geHRlbnNhX2NvbnRleHQuaCBhbmQgaGFzIHNpemUgDQorWFRfQ1BfU0laRS4gQ28tcHJvY2Vzc29yIGluc3RydWN0aW9ucyBzaG91bGQgb25seSBiZSB1c2VkIGluIHRocmVhZCBjb2RlLCBuZXZlcg0KK2luIGludGVycnVwdCBoYW5kbGVycyBvciB0aGUgUlRPUyBrZXJuZWwuIE1heSBvbmx5IGJlIGNhbGxlZCBmcm9tIGFzc2VtYmx5IGNvZGUNCithbmQgYnkgdGhlICdjYWxsMCcgaW5zdHJ1Y3Rpb24uIEEgcmVzdWx0IG9mIDAgaW5kaWNhdGVzIGFuIHVucmVjb3ZlcmFibGUgZXJyb3IuIA0KK1RoZSBpbXBsZW1lbnRhdGlvbiBtYXkgdXNlIG9ubHkgYTItNCwgYTE1IChhbGwgb3RoZXIgcmVncyBtdXN0IGJlIHByZXNlcnZlZCkuDQorKi8NCisvLyB2b2lkKiBYVF9SVE9TX0NQX1NUQVRFKHZvaWQpDQogI2RlZmluZSBYVF9SVE9TX0NQX1NUQVRFICAgIF9mcnh0X3Rhc2tfY29wcm9jX3N0YXRlDQogDQogDQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0qDQotKiAgSE9PS1MgVE8gRFlOQU1JQ0FMTFkgSU5TVEFMTCBJTlRFUlJVUFQgQU5EIEVYQ0VQVElPTiBIQU5ETEVSUyBQRVIgTEVWRUwuDQotKg0KLSogIFRoaXMgWHRlbnNhIFJUT1MgcG9ydCBwcm92aWRlcyBob29rcyBmb3IgZHluYW1pY2FsbHkgaW5zdGFsbGluZyBleGNlcHRpb24NCi0qICBhbmQgaW50ZXJydXB0IGhhbmRsZXJzIHRvIGZhY2lsaXRhdGUgYXV0b21hdGVkIHRlc3Rpbmcgd2hlcmUgZWFjaCB0ZXN0DQotKiAgY2FzZSBjYW4gaW5zdGFsbCBpdHMgb3duIGhhbmRsZXIgZm9yIHVzZXIgZXhjZXB0aW9ucyBhbmQgZWFjaCBpbnRlcnJ1cHQNCi0qICBwcmlvcml0eSAobGV2ZWwpLiBUaGlzIGNvbnNpc3RzIG9mIGFuIGFycmF5IG9mIGZ1bmN0aW9uIHBvaW50ZXJzIGluZGV4ZWQNCi0qICBieSBpbnRlcnJ1cHQgcHJpb3JpdHksIHdpdGggaW5kZXggMCBiZWluZyB0aGUgdXNlciBleGNlcHRpb24gaGFuZGxlciBob29rLg0KLSogIEVhY2ggZW50cnkgaW4gdGhlIGFycmF5IGlzIGluaXRpYWxseSAwLCBhbmQgbWF5IGJlIHJlcGxhY2VkIGJ5IGEgZnVuY3Rpb24NCi0qICBwb2ludGVyIG9mIHR5cGUgWFRfSU5URVhDX0hPT0suIEEgaGFuZGxlciBtYXkgYmUgdW5pbnN0YWxsZWQgYnkgaW5zdGFsbGluZyAwLg0KLSoNCi0qICBUaGUgaGFuZGxlciBmb3IgbG93IGFuZCBtZWRpdW0gcHJpb3JpdHkgb2JleXMgQUJJIGNvbnZlbnRpb25zIHNvIG1heSBiZSBjb2RlZA0KLSogIGluIEMuIEZvciB0aGUgZXhjZXB0aW9uIGhhbmRsZXIsIHRoZSBjYXVzZSBpcyB0aGUgY29udGVudHMgb2YgdGhlIEVYQ0NBVVNFDQotKiAgcmVnLCBhbmQgdGhlIHJlc3VsdCBpcyAtMSBpZiBoYW5kbGVkLCBlbHNlIHRoZSBjYXVzZSAoc3RpbGwgbmVlZHMgaGFuZGxpbmcpLg0KLSogIEZvciBpbnRlcnJ1cHQgaGFuZGxlcnMsIHRoZSBjYXVzZSBpcyBhIG1hc2sgb2YgcGVuZGluZyBlbmFibGVkIGludGVycnVwdHMgYXQNCi0qICB0aGF0IGxldmVsLCBhbmQgdGhlIHJlc3VsdCBpcyB0aGUgc2FtZSBtYXNrIHdpdGggdGhlIGJpdHMgZm9yIHRoZSBoYW5kbGVkDQotKiAgaW50ZXJydXB0cyBjbGVhcmVkICh0aG9zZSBub3QgY2xlYXJlZCBzdGlsbCBuZWVkIGhhbmRsaW5nKS4gVGhpcyBhbGxvd3MgYSB0ZXN0DQotKiAgY2FzZSB0byBlaXRoZXIgcHJlLWhhbmRsZSBvciBvdmVycmlkZSB0aGUgZGVmYXVsdCBoYW5kbGluZyBmb3IgdGhlIGV4Y2VwdGlvbg0KLSogIG9yIGludGVycnVwdCBsZXZlbCAoc2VlIHh0ZW5zYV92ZWN0b3JzLlMpLg0KLSoNCi0qICBIaWdoIHByaW9yaXR5IGhhbmRsZXJzIChpbmNsdWRpbmcgTk1JKSBtdXN0IGJlIGNvZGVkIGluIGFzc2VtYmx5LCBhcmUgYWx3YXlzDQotKiAgY2FsbGVkIGJ5ICdjYWxsMCcgcmVnYXJkbGVzcyBvZiBBQkksIG11c3QgcHJlc2VydmUgYWxsIHJlZ2lzdGVycyBleGNlcHQgYTAsDQotKiAgYW5kIG11c3Qgbm90IHVzZSBvciBtb2RpZnkgdGhlIGludGVycnVwdGVkIHN0YWNrLiBUaGUgaG9vayBhcmd1bWVudCAnY2F1c2UnDQotKiAgaXMgbm90IHBhc3NlZCBhbmQgdGhlIHJlc3VsdCBpcyBpZ25vcmVkLCBzbyBhcyBub3QgdG8gYnVyZGVuIHRoZSBjYWxsZXIgd2l0aA0KLSogIHNhdmluZyBhbmQgcmVzdG9yaW5nIGEyIChpdCBhc3N1bWVzIG9ubHkgb25lIGludGVycnVwdCBwZXIgbGV2ZWwgLSBzZWUgdGhlDQotKiAgZGlzY3Vzc2lvbiBpbiBoaWdoIHByaW9yaXR5IGludGVycnVwdHMgaW4geHRlbnNhX3ZlY3RvcnMuUykuIFRoZSBoYW5kbGVyDQotKiAgdGhlcmVmb3JlIHNob3VsZCBiZSBjb2RlZCB0byBwcm90b3R5cGUgJ3ZvaWQgaCh2b2lkKScgZXZlbiB0aG91Z2ggaXQgcGx1Z3MNCi0qICBpbnRvIGFuIGFycmF5IG9mIGhhbmRsZXJzIG9mIHByb3RvdHlwZSAndW5zaWduZWQgaCh1bnNpZ25lZCknLg0KLSoNCi0qICBUbyBlbmFibGUgaW50ZXJydXB0L2V4Y2VwdGlvbiBob29rcywgY29tcGlsZSB0aGUgUlRPUyB3aXRoICctRFhUX0lOVEVYQ19IT09LUycuDQotKg0KKw0KK0hPT0tTIFRPIERZTkFNSUNBTExZIElOU1RBTEwgSU5URVJSVVBUIEFORCBFWENFUFRJT04gSEFORExFUlMgUEVSIExFVkVMLg0KKw0KK1RoaXMgWHRlbnNhIFJUT1MgcG9ydCBwcm92aWRlcyBob29rcyBmb3IgZHluYW1pY2FsbHkgaW5zdGFsbGluZyBleGNlcHRpb24NCithbmQgaW50ZXJydXB0IGhhbmRsZXJzIHRvIGZhY2lsaXRhdGUgYXV0b21hdGVkIHRlc3Rpbmcgd2hlcmUgZWFjaCB0ZXN0DQorY2FzZSBjYW4gaW5zdGFsbCBpdHMgb3duIGhhbmRsZXIgZm9yIHVzZXIgZXhjZXB0aW9ucyBhbmQgZWFjaCBpbnRlcnJ1cHQNCitwcmlvcml0eSAobGV2ZWwpLiBUaGlzIGNvbnNpc3RzIG9mIGFuIGFycmF5IG9mIGZ1bmN0aW9uIHBvaW50ZXJzIGluZGV4ZWQNCitieSBpbnRlcnJ1cHQgcHJpb3JpdHksIHdpdGggaW5kZXggMCBiZWluZyB0aGUgdXNlciBleGNlcHRpb24gaGFuZGxlciBob29rLg0KK0VhY2ggZW50cnkgaW4gdGhlIGFycmF5IGlzIGluaXRpYWxseSAwLCBhbmQgbWF5IGJlIHJlcGxhY2VkIGJ5IGEgZnVuY3Rpb24gDQorcG9pbnRlciBvZiB0eXBlIFhUX0lOVEVYQ19IT09LLiBBIGhhbmRsZXIgbWF5IGJlIHVuaW5zdGFsbGVkIGJ5IGluc3RhbGxpbmcgMC4NCisNCitUaGUgaGFuZGxlciBmb3IgbG93IGFuZCBtZWRpdW0gcHJpb3JpdHkgb2JleXMgQUJJIGNvbnZlbnRpb25zIHNvIG1heSBiZSBjb2RlZA0KK2luIEMuIEZvciB0aGUgZXhjZXB0aW9uIGhhbmRsZXIsIHRoZSBjYXVzZSBpcyB0aGUgY29udGVudHMgb2YgdGhlIEVYQ0NBVVNFDQorcmVnLCBhbmQgdGhlIHJlc3VsdCBpcyAtMSBpZiBoYW5kbGVkLCBlbHNlIHRoZSBjYXVzZSAoc3RpbGwgbmVlZHMgaGFuZGxpbmcpLg0KK0ZvciBpbnRlcnJ1cHQgaGFuZGxlcnMsIHRoZSBjYXVzZSBpcyBhIG1hc2sgb2YgcGVuZGluZyBlbmFibGVkIGludGVycnVwdHMgYXQNCit0aGF0IGxldmVsLCBhbmQgdGhlIHJlc3VsdCBpcyB0aGUgc2FtZSBtYXNrIHdpdGggdGhlIGJpdHMgZm9yIHRoZSBoYW5kbGVkDQoraW50ZXJydXB0cyBjbGVhcmVkICh0aG9zZSBub3QgY2xlYXJlZCBzdGlsbCBuZWVkIGhhbmRsaW5nKS4gVGhpcyBhbGxvd3MgYSB0ZXN0DQorY2FzZSB0byBlaXRoZXIgcHJlLWhhbmRsZSBvciBvdmVycmlkZSB0aGUgZGVmYXVsdCBoYW5kbGluZyBmb3IgdGhlIGV4Y2VwdGlvbg0KK29yIGludGVycnVwdCBsZXZlbCAoc2VlIHh0ZW5zYV92ZWN0b3JzLlMpLg0KKw0KK0hpZ2ggcHJpb3JpdHkgaGFuZGxlcnMgKGluY2x1ZGluZyBOTUkpIG11c3QgYmUgY29kZWQgaW4gYXNzZW1ibHksIGFyZSBhbHdheXMNCitjYWxsZWQgYnkgJ2NhbGwwJyByZWdhcmRsZXNzIG9mIEFCSSwgbXVzdCBwcmVzZXJ2ZSBhbGwgcmVnaXN0ZXJzIGV4Y2VwdCBhMCwNCithbmQgbXVzdCBub3QgdXNlIG9yIG1vZGlmeSB0aGUgaW50ZXJydXB0ZWQgc3RhY2suIFRoZSBob29rIGFyZ3VtZW50ICdjYXVzZScNCitpcyBub3QgcGFzc2VkIGFuZCB0aGUgcmVzdWx0IGlzIGlnbm9yZWQsIHNvIGFzIG5vdCB0byBidXJkZW4gdGhlIGNhbGxlciB3aXRoDQorc2F2aW5nIGFuZCByZXN0b3JpbmcgYTIgKGl0IGFzc3VtZXMgb25seSBvbmUgaW50ZXJydXB0IHBlciBsZXZlbCAtIHNlZSB0aGUNCitkaXNjdXNzaW9uIGluIGhpZ2ggcHJpb3JpdHkgaW50ZXJydXB0cyBpbiB4dGVuc2FfdmVjdG9ycy5TKS4gVGhlIGhhbmRsZXINCit0aGVyZWZvcmUgc2hvdWxkIGJlIGNvZGVkIHRvIHByb3RvdHlwZSAndm9pZCBoKHZvaWQpJyBldmVuIHRob3VnaCBpdCBwbHVncw0KK2ludG8gYW4gYXJyYXkgb2YgaGFuZGxlcnMgb2YgcHJvdG90eXBlICd1bnNpZ25lZCBoKHVuc2lnbmVkKScuDQorDQorVG8gZW5hYmxlIGludGVycnVwdC9leGNlcHRpb24gaG9va3MsIGNvbXBpbGUgdGhlIFJUT1Mgd2l0aCAnLURYVF9JTlRFWENfSE9PS1MnLg0KKw0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQogDQotI2RlZmluZSBYVF9JTlRFWENfSE9PS19OVU0gICAgKCAxICsgWENIQUxfTlVNX0lOVExFVkVMUyArIFhDSEFMX0hBVkVfTk1JICkNCisjZGVmaW5lIFhUX0lOVEVYQ19IT09LX05VTSAgKDEgKyBYQ0hBTF9OVU1fSU5UTEVWRUxTICsgWENIQUxfSEFWRV9OTUkpDQogDQogI2lmbmRlZiBfX0FTU0VNQkxFUl9fDQotICAgIHR5cGVkZWYgdW5zaWduZWQgKCogWFRfSU5URVhDX0hPT0spKCB1bnNpZ25lZCBjYXVzZSApOw0KLSAgICBleHRlcm4gdm9sYXRpbGUgWFRfSU5URVhDX0hPT0sgX3h0X2ludGV4Y19ob29rc1sgWFRfSU5URVhDX0hPT0tfTlVNIF07DQordHlwZWRlZiB1bnNpZ25lZCAoKlhUX0lOVEVYQ19IT09LKSh1bnNpZ25lZCBjYXVzZSk7DQorZXh0ZXJuICB2b2xhdGlsZSBYVF9JTlRFWENfSE9PSyBfeHRfaW50ZXhjX2hvb2tzW1hUX0lOVEVYQ19IT09LX05VTV07DQogI2VuZGlmDQogDQogDQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0qDQotKiAgQ09OVkVOSUVOQ0UgSU5DTFVTSU9OUy4NCi0qDQotKiAgRW5zdXJlcyBSVE9TIHNwZWNpZmljIGZpbGVzIG5lZWQgb25seSBpbmNsdWRlIHRoaXMgb25lIFh0ZW5zYS1nZW5lcmljIGhlYWRlci4NCi0qICBUaGVzZSBoZWFkZXJzIGFyZSBpbmNsdWRlZCBsYXN0IHNvIHRoZXkgY2FuIHVzZSB0aGUgUlRPUyBkZWZpbml0aW9ucyBhYm92ZS4NCi0qDQorDQorQ09OVkVOSUVOQ0UgSU5DTFVTSU9OUy4NCisNCitFbnN1cmVzIFJUT1Mgc3BlY2lmaWMgZmlsZXMgbmVlZCBvbmx5IGluY2x1ZGUgdGhpcyBvbmUgWHRlbnNhLWdlbmVyaWMgaGVhZGVyLg0KK1RoZXNlIGhlYWRlcnMgYXJlIGluY2x1ZGVkIGxhc3Qgc28gdGhleSBjYW4gdXNlIHRoZSBSVE9TIGRlZmluaXRpb25zIGFib3ZlLg0KKw0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQogDQogI2luY2x1ZGUgICAgInh0ZW5zYV9jb250ZXh0LmgiDQogDQogI2lmZGVmIFhUX1JUT1NfVElNRVJfSU5UDQotICAgICNpbmNsdWRlICAgICJ4dGVuc2FfdGltZXIuaCINCisjaW5jbHVkZSAgICAieHRlbnNhX3RpbWVyLmgiDQogI2VuZGlmDQogDQogDQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0qDQotKiAgWHRlbnNhIFBvcnQgVmVyc2lvbi4NCi0qDQorDQorWHRlbnNhIFBvcnQgVmVyc2lvbi4NCisNCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KIA0KLSNkZWZpbmUgWFRFTlNBX1BPUlRfVkVSU0lPTiAgICAgICAgICAgMS43DQotI2RlZmluZSBYVEVOU0FfUE9SVF9WRVJTSU9OX1NUUklORyAgICAiMS43Ig0KKyNkZWZpbmUgWFRFTlNBX1BPUlRfVkVSU0lPTiAgICAgICAgICAgICAxLjcNCisjZGVmaW5lIFhURU5TQV9QT1JUX1ZFUlNJT05fU1RSSU5HICAgICAgIjEuNyINCiANCiAjZW5kaWYgLyogWFRFTlNBX1JUT1NfSCAqLw0KKw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL1RoaXJkUGFydHkvWENDL1h0ZW5zYS94dGVuc2FfdGltZXIuaCBiL3BvcnRhYmxlL1RoaXJkUGFydHkvWENDL1h0ZW5zYS94dGVuc2FfdGltZXIuaAppbmRleCA4OWE1NWQ2Li43ZDdhY2FhIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9UaGlyZFBhcnR5L1hDQy9YdGVuc2EveHRlbnNhX3RpbWVyLmgKKysrIGIvcG9ydGFibGUvVGhpcmRQYXJ0eS9YQ0MvWHRlbnNhL3h0ZW5zYV90aW1lci5oCkBAIC0xLDMgKzEsNCBAQAorDQogLyoNCiAgKiBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxOSBDYWRlbmNlIERlc2lnbiBTeXN0ZW1zLCBJbmMuDQogICoNCkBAIC00MSwxMTggKzQyLDExOSBAQAogI2RlZmluZSBYVEVOU0FfVElNRVJfSA0KIA0KICNpZmRlZiBfX0FTU0VNQkxFUl9fDQotICAgICNpbmNsdWRlICAgIDx4dGVuc2EvY29yZWFzbS5oPg0KKyNpbmNsdWRlICAgIDx4dGVuc2EvY29yZWFzbS5oPg0KICNlbmRpZg0KIA0KICNpbmNsdWRlICAgIDx4dGVuc2EvY29yZWJpdHMuaD4NCiAjaW5jbHVkZSAgICA8eHRlbnNhL2NvbmZpZy9zeXN0ZW0uaD4NCiANCi0jaW5jbHVkZSAgICAieHRlbnNhX3J0b3MuaCIgLyogaW4gY2FzZSB0aGlzIHdhc24ndCBpbmNsdWRlZCBkaXJlY3RseSAqLw0KKyNpbmNsdWRlICAgICJ4dGVuc2FfcnRvcy5oIiAgICAgLyogaW4gY2FzZSB0aGlzIHdhc24ndCBpbmNsdWRlZCBkaXJlY3RseSAqLw0KIA0KICNpbmNsdWRlICAgIDxGcmVlUlRPU0NvbmZpZy5oPg0KIA0KIC8qDQotICogU2VsZWN0IHRpbWVyIHRvIHVzZSBmb3IgcGVyaW9kaWMgdGljaywgYW5kIGRldGVybWluZSBpdHMgaW50ZXJydXB0IG51bWJlcg0KLSAqIGFuZCBwcmlvcml0eS4gVXNlciBtYXkgc3BlY2lmeSBhIHRpbWVyIGJ5IGRlZmluaW5nIFhUX1RJTUVSX0lOREVYIHdpdGggLUQsDQotICogaW4gd2hpY2ggY2FzZSBpdHMgdmFsaWRpdHkgaXMgY2hlY2tlZCAoaXQgbXVzdCBleGlzdCBpbiB0aGlzIGNvcmUgYW5kIG11c3QNCi0gKiBub3QgYmUgb24gYSBoaWdoIHByaW9yaXR5IGludGVycnVwdCAtIGFuIGVycm9yIHdpbGwgYmUgcmVwb3J0ZWQgaW4gaW52YWxpZCkuDQotICogT3RoZXJ3aXNlIHNlbGVjdCB0aGUgZmlyc3QgbG93IG9yIG1lZGl1bSBwcmlvcml0eSBpbnRlcnJ1cHQgdGltZXIgYXZhaWxhYmxlLg0KLSAqLw0KK1NlbGVjdCB0aW1lciB0byB1c2UgZm9yIHBlcmlvZGljIHRpY2ssIGFuZCBkZXRlcm1pbmUgaXRzIGludGVycnVwdCBudW1iZXIgDQorYW5kIHByaW9yaXR5LiBVc2VyIG1heSBzcGVjaWZ5IGEgdGltZXIgYnkgZGVmaW5pbmcgWFRfVElNRVJfSU5ERVggd2l0aCAtRCwNCitpbiB3aGljaCBjYXNlIGl0cyB2YWxpZGl0eSBpcyBjaGVja2VkIChpdCBtdXN0IGV4aXN0IGluIHRoaXMgY29yZSBhbmQgbXVzdCANCitub3QgYmUgb24gYSBoaWdoIHByaW9yaXR5IGludGVycnVwdCAtIGFuIGVycm9yIHdpbGwgYmUgcmVwb3J0ZWQgaW4gaW52YWxpZCkuDQorT3RoZXJ3aXNlIHNlbGVjdCB0aGUgZmlyc3QgbG93IG9yIG1lZGl1bSBwcmlvcml0eSBpbnRlcnJ1cHQgdGltZXIgYXZhaWxhYmxlLg0KKyovDQogI2lmIFhDSEFMX05VTV9USU1FUlMgPT0gMA0KIA0KLSAgICAjZXJyb3IgIlRoaXMgWHRlbnNhIGNvbmZpZ3VyYXRpb24gaXMgdW5zdXBwb3J0ZWQsIGl0IGhhcyBubyB0aW1lcnMuIg0KKyAgI2Vycm9yICJUaGlzIFh0ZW5zYSBjb25maWd1cmF0aW9uIGlzIHVuc3VwcG9ydGVkLCBpdCBoYXMgbm8gdGltZXJzLiINCiANCiAjZWxzZQ0KIA0KLSAgICAjaWZuZGVmIFhUX1RJTUVSX0lOREVYDQotICAgICAgICAjaWYgWENIQUxfVElNRVIzX0lOVEVSUlVQVCAhPSBYVEhBTF9USU1FUl9VTkNPTkZJR1VSRUQNCi0gICAgICAgICAgICAjaWYgWENIQUxfSU5UX0xFVkVMKCBYQ0hBTF9USU1FUjNfSU5URVJSVVBUICkgPD0gWENIQUxfRVhDTV9MRVZFTA0KLSAgICAgICAgICAgICAgICAjdW5kZWYgIFhUX1RJTUVSX0lOREVYDQotICAgICAgICAgICAgICAgICNkZWZpbmUgWFRfVElNRVJfSU5ERVggICAgMw0KLSAgICAgICAgICAgICNlbmRpZg0KLSAgICAgICAgI2VuZGlmDQotICAgICAgICAjaWYgWENIQUxfVElNRVIyX0lOVEVSUlVQVCAhPSBYVEhBTF9USU1FUl9VTkNPTkZJR1VSRUQNCi0gICAgICAgICAgICAjaWYgWENIQUxfSU5UX0xFVkVMKCBYQ0hBTF9USU1FUjJfSU5URVJSVVBUICkgPD0gWENIQUxfRVhDTV9MRVZFTA0KLSAgICAgICAgICAgICAgICAjdW5kZWYgIFhUX1RJTUVSX0lOREVYDQotICAgICAgICAgICAgICAgICNkZWZpbmUgWFRfVElNRVJfSU5ERVggICAgMg0KLSAgICAgICAgICAgICNlbmRpZg0KLSAgICAgICAgI2VuZGlmDQotICAgICAgICAjaWYgWENIQUxfVElNRVIxX0lOVEVSUlVQVCAhPSBYVEhBTF9USU1FUl9VTkNPTkZJR1VSRUQNCi0gICAgICAgICAgICAjaWYgWENIQUxfSU5UX0xFVkVMKCBYQ0hBTF9USU1FUjFfSU5URVJSVVBUICkgPD0gWENIQUxfRVhDTV9MRVZFTA0KLSAgICAgICAgICAgICAgICAjdW5kZWYgIFhUX1RJTUVSX0lOREVYDQotICAgICAgICAgICAgICAgICNkZWZpbmUgWFRfVElNRVJfSU5ERVggICAgMQ0KLSAgICAgICAgICAgICNlbmRpZg0KLSAgICAgICAgI2VuZGlmDQotICAgICAgICAjaWYgWENIQUxfVElNRVIwX0lOVEVSUlVQVCAhPSBYVEhBTF9USU1FUl9VTkNPTkZJR1VSRUQNCi0gICAgICAgICAgICAjaWYgWENIQUxfSU5UX0xFVkVMKCBYQ0hBTF9USU1FUjBfSU5URVJSVVBUICkgPD0gWENIQUxfRVhDTV9MRVZFTA0KLSAgICAgICAgICAgICAgICAjdW5kZWYgIFhUX1RJTUVSX0lOREVYDQotICAgICAgICAgICAgICAgICNkZWZpbmUgWFRfVElNRVJfSU5ERVggICAgMA0KLSAgICAgICAgICAgICNlbmRpZg0KLSAgICAgICAgI2VuZGlmDQotICAgICNlbmRpZiAvKiBpZm5kZWYgWFRfVElNRVJfSU5ERVggKi8NCi0gICAgI2lmbmRlZiBYVF9USU1FUl9JTkRFWA0KLSAgICAgICAgI2Vycm9yICJUaGVyZSBpcyBubyBzdWl0YWJsZSB0aW1lciBpbiB0aGlzIFh0ZW5zYSBjb25maWd1cmF0aW9uLiINCisjaWZuZGVmIFhUX1RJTUVSX0lOREVYDQorICAjaWYgWENIQUxfVElNRVIzX0lOVEVSUlVQVCAhPSBYVEhBTF9USU1FUl9VTkNPTkZJR1VSRUQNCisgICAgI2lmIFhDSEFMX0lOVF9MRVZFTChYQ0hBTF9USU1FUjNfSU5URVJSVVBUKSA8PSBYQ0hBTF9FWENNX0xFVkVMDQorICAgICAgI3VuZGVmICBYVF9USU1FUl9JTkRFWA0KKyAgICAgICNkZWZpbmUgWFRfVElNRVJfSU5ERVggICAgMw0KICAgICAjZW5kaWYNCi0NCi0gICAgI2RlZmluZSBYVF9DQ09NUEFSRSAgICAgICAgKCBDQ09NUEFSRSArIFhUX1RJTUVSX0lOREVYICkNCi0gICAgI2RlZmluZSBYVF9USU1FUl9JTlROVU0gICAgWENIQUxfVElNRVJfSU5URVJSVVBUKCBYVF9USU1FUl9JTkRFWCApDQotICAgICNkZWZpbmUgWFRfVElNRVJfSU5UUFJJICAgIFhDSEFMX0lOVF9MRVZFTCggWFRfVElNRVJfSU5UTlVNICkNCi0gICAgI2RlZmluZSBYVF9USU1FUl9JTlRFTiAgICAgKCAxIDw8IFhUX1RJTUVSX0lOVE5VTSApDQotDQotICAgICNpZiBYVF9USU1FUl9JTlROVU0gPT0gWFRIQUxfVElNRVJfVU5DT05GSUdVUkVEDQotICAgICAgICAjZXJyb3IgIlRoZSB0aW1lciBzZWxlY3RlZCBieSBYVF9USU1FUl9JTkRFWCBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIGNvcmUuIg0KLSAgICAjZWxpZiBYVF9USU1FUl9JTlRQUkkgPiBYQ0hBTF9FWENNX0xFVkVMDQotICAgICAgICAjZXJyb3IgIlRoZSB0aW1lciBpbnRlcnJ1cHQgY2Fubm90IGJlIGhpZ2ggcHJpb3JpdHkgKHVzZSBtZWRpdW0gb3IgbG93KS4iDQorICAjZW5kaWYNCisgICNpZiBYQ0hBTF9USU1FUjJfSU5URVJSVVBUICE9IFhUSEFMX1RJTUVSX1VOQ09ORklHVVJFRA0KKyAgICAjaWYgWENIQUxfSU5UX0xFVkVMKFhDSEFMX1RJTUVSMl9JTlRFUlJVUFQpIDw9IFhDSEFMX0VYQ01fTEVWRUwNCisgICAgICAjdW5kZWYgIFhUX1RJTUVSX0lOREVYDQorICAgICAgI2RlZmluZSBYVF9USU1FUl9JTkRFWCAgICAyDQogICAgICNlbmRpZg0KKyAgI2VuZGlmDQorICAjaWYgWENIQUxfVElNRVIxX0lOVEVSUlVQVCAhPSBYVEhBTF9USU1FUl9VTkNPTkZJR1VSRUQNCisgICAgI2lmIFhDSEFMX0lOVF9MRVZFTChYQ0hBTF9USU1FUjFfSU5URVJSVVBUKSA8PSBYQ0hBTF9FWENNX0xFVkVMDQorICAgICAgI3VuZGVmICBYVF9USU1FUl9JTkRFWA0KKyAgICAgICNkZWZpbmUgWFRfVElNRVJfSU5ERVggICAgMQ0KKyAgICAjZW5kaWYNCisgICNlbmRpZg0KKyAgI2lmIFhDSEFMX1RJTUVSMF9JTlRFUlJVUFQgIT0gWFRIQUxfVElNRVJfVU5DT05GSUdVUkVEDQorICAgICNpZiBYQ0hBTF9JTlRfTEVWRUwoWENIQUxfVElNRVIwX0lOVEVSUlVQVCkgPD0gWENIQUxfRVhDTV9MRVZFTA0KKyAgICAgICN1bmRlZiAgWFRfVElNRVJfSU5ERVgNCisgICAgICAjZGVmaW5lIFhUX1RJTUVSX0lOREVYICAgIDANCisgICAgI2VuZGlmDQorICAjZW5kaWYNCisjZW5kaWYNCisjaWZuZGVmIFhUX1RJTUVSX0lOREVYDQorICAjZXJyb3IgIlRoZXJlIGlzIG5vIHN1aXRhYmxlIHRpbWVyIGluIHRoaXMgWHRlbnNhIGNvbmZpZ3VyYXRpb24uIg0KKyNlbmRpZg0KKw0KKyNkZWZpbmUgWFRfQ0NPTVBBUkUgICAgICAgICAgICAgKENDT01QQVJFICsgWFRfVElNRVJfSU5ERVgpDQorI2RlZmluZSBYVF9USU1FUl9JTlROVU0gICAgICAgICBYQ0hBTF9USU1FUl9JTlRFUlJVUFQoWFRfVElNRVJfSU5ERVgpDQorI2RlZmluZSBYVF9USU1FUl9JTlRQUkkgICAgICAgICBYQ0hBTF9JTlRfTEVWRUwoWFRfVElNRVJfSU5UTlVNKQ0KKyNkZWZpbmUgWFRfVElNRVJfSU5URU4gICAgICAgICAgKDEgPDwgWFRfVElNRVJfSU5UTlVNKQ0KKw0KKyNpZiBYVF9USU1FUl9JTlROVU0gPT0gWFRIQUxfVElNRVJfVU5DT05GSUdVUkVEDQorICAjZXJyb3IgIlRoZSB0aW1lciBzZWxlY3RlZCBieSBYVF9USU1FUl9JTkRFWCBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIGNvcmUuIg0KKyNlbGlmIFhUX1RJTUVSX0lOVFBSSSA+IFhDSEFMX0VYQ01fTEVWRUwNCisgICNlcnJvciAiVGhlIHRpbWVyIGludGVycnVwdCBjYW5ub3QgYmUgaGlnaCBwcmlvcml0eSAodXNlIG1lZGl1bSBvciBsb3cpLiINCisjZW5kaWYNCiANCiAjZW5kaWYgLyogWENIQUxfTlVNX1RJTUVSUyAqLw0KIA0KIC8qDQotICogU2V0IHByb2Nlc3NvciBjbG9jayBmcmVxdWVuY3ksIHVzZWQgdG8gZGV0ZXJtaW5lIGNsb2NrIGRpdmlzb3IgZm9yIHRpbWVyIHRpY2suDQotICogVXNlciBzaG91bGQgQkUgU1VSRSBUTyBBREpVU1QgVEhJUyBmb3IgdGhlIFh0ZW5zYSBwbGF0Zm9ybSBiZWluZyB1c2VkLg0KLSAqIElmIHVzaW5nIGEgc3VwcG9ydGVkIGJvYXJkIHZpYSB0aGUgYm9hcmQtaW5kZXBlbmRlbnQgQVBJIGRlZmluZWQgaW4geHRic3AuaCwNCi0gKiB0aGlzIG1heSBiZSBsZWZ0IHVuZGVmaW5lZCBhbmQgZnJlcXVlbmN5IGFuZCB0aWNrIGRpdmlzb3Igd2lsbCBiZSBjb21wdXRlZA0KLSAqIGFuZCBjYWNoZWQgZHVyaW5nIHJ1bi10aW1lIGluaXRpYWxpemF0aW9uLg0KLSAqDQotICogTk9URSBPTiBTSU1VTEFUT1I6DQotICogVW5kZXIgdGhlIFh0ZW5zYSBpbnN0cnVjdGlvbiBzZXQgc2ltdWxhdG9yLCB0aGUgZnJlcXVlbmN5IGNhbiBvbmx5IGJlIGVzdGltYXRlZA0KLSAqIGJlY2F1c2UgaXQgZGVwZW5kcyBvbiB0aGUgc3BlZWQgb2YgdGhlIGhvc3QgYW5kIHRoZSB2ZXJzaW9uIG9mIHRoZSBzaW11bGF0b3IuDQotICogQWxzbyBiZWNhdXNlIGl0IHJ1bnMgbXVjaCBzbG93ZXIgdGhhbiBoYXJkd2FyZSwgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGFjaGlldmUNCi0gKiByZWFsLXRpbWUgcGVyZm9ybWFuY2UgZm9yIG1vc3QgYXBwbGljYXRpb25zIHVuZGVyIHRoZSBzaW11bGF0b3IuIEEgZnJlcXVlbmN5DQotICogdG9vIGxvdyBkb2VzIG5vdCBhbGxvdyBlbm91Z2ggdGltZSBiZXR3ZWVuIHRpbWVyIGludGVycnVwdHMsIHN0YXJ2aW5nIHRocmVhZHMuDQotICogVG8gb2J0YWluIGEgbW9yZSBjb252ZW5pZW50IGJ1dCBub24tcmVhbC10aW1lIHRpY2sgZHVyYXRpb24gb24gdGhlIHNpbXVsYXRvciwNCi0gKiBjb21waWxlIHdpdGggeHQteGNjIG9wdGlvbiAiLURYVF9TSU1VTEFUT1IiLg0KLSAqIEFkanVzdCB0aGlzIGZyZXF1ZW5jeSB0byB0YXN0ZSAoaXQncyBub3QgcmVhbC10aW1lIGFueXdheSEpLg0KLSAqLw0KLSNpZiBkZWZpbmVkKCBYVF9TSU1VTEFUT1IgKSAmJiAhZGVmaW5lZCggWFRfQ0xPQ0tfRlJFUSApDQotICAgICNkZWZpbmUgWFRfQ0xPQ0tfRlJFUSAgICBjb25maWdDUFVfQ0xPQ0tfSFoNCitTZXQgcHJvY2Vzc29yIGNsb2NrIGZyZXF1ZW5jeSwgdXNlZCB0byBkZXRlcm1pbmUgY2xvY2sgZGl2aXNvciBmb3IgdGltZXIgdGljay4NCitVc2VyIHNob3VsZCBCRSBTVVJFIFRPIEFESlVTVCBUSElTIGZvciB0aGUgWHRlbnNhIHBsYXRmb3JtIGJlaW5nIHVzZWQuDQorSWYgdXNpbmcgYSBzdXBwb3J0ZWQgYm9hcmQgdmlhIHRoZSBib2FyZC1pbmRlcGVuZGVudCBBUEkgZGVmaW5lZCBpbiB4dGJzcC5oLA0KK3RoaXMgbWF5IGJlIGxlZnQgdW5kZWZpbmVkIGFuZCBmcmVxdWVuY3kgYW5kIHRpY2sgZGl2aXNvciB3aWxsIGJlIGNvbXB1dGVkIA0KK2FuZCBjYWNoZWQgZHVyaW5nIHJ1bi10aW1lIGluaXRpYWxpemF0aW9uLg0KKw0KK05PVEUgT04gU0lNVUxBVE9SOg0KK1VuZGVyIHRoZSBYdGVuc2EgaW5zdHJ1Y3Rpb24gc2V0IHNpbXVsYXRvciwgdGhlIGZyZXF1ZW5jeSBjYW4gb25seSBiZSBlc3RpbWF0ZWQgDQorYmVjYXVzZSBpdCBkZXBlbmRzIG9uIHRoZSBzcGVlZCBvZiB0aGUgaG9zdCBhbmQgdGhlIHZlcnNpb24gb2YgdGhlIHNpbXVsYXRvci4NCitBbHNvIGJlY2F1c2UgaXQgcnVucyBtdWNoIHNsb3dlciB0aGFuIGhhcmR3YXJlLCBpdCBpcyBub3QgcG9zc2libGUgdG8gYWNoaWV2ZQ0KK3JlYWwtdGltZSBwZXJmb3JtYW5jZSBmb3IgbW9zdCBhcHBsaWNhdGlvbnMgdW5kZXIgdGhlIHNpbXVsYXRvci4gQSBmcmVxdWVuY3kNCit0b28gbG93IGRvZXMgbm90IGFsbG93IGVub3VnaCB0aW1lIGJldHdlZW4gdGltZXIgaW50ZXJydXB0cywgc3RhcnZpbmcgdGhyZWFkcy4NCitUbyBvYnRhaW4gYSBtb3JlIGNvbnZlbmllbnQgYnV0IG5vbi1yZWFsLXRpbWUgdGljayBkdXJhdGlvbiBvbiB0aGUgc2ltdWxhdG9yLCANCitjb21waWxlIHdpdGggeHQteGNjIG9wdGlvbiAiLURYVF9TSU1VTEFUT1IiLg0KK0FkanVzdCB0aGlzIGZyZXF1ZW5jeSB0byB0YXN0ZSAoaXQncyBub3QgcmVhbC10aW1lIGFueXdheSEpLg0KKyovDQorI2lmIGRlZmluZWQoWFRfU0lNVUxBVE9SKSAmJiAhZGVmaW5lZChYVF9DTE9DS19GUkVRKQ0KKyNkZWZpbmUgWFRfQ0xPQ0tfRlJFUSAgICAgICBjb25maWdDUFVfQ0xPQ0tfSFoNCiAjZW5kaWYNCiANCi0jaWYgIWRlZmluZWQoIFhUX0NMT0NLX0ZSRVEgKSAmJiAhZGVmaW5lZCggWFRfQk9BUkQgKQ0KLSAgICAjZXJyb3IgIlhUX0NMT0NLX0ZSRVEgbXVzdCBiZSBkZWZpbmVkIGZvciB0aGUgdGFyZ2V0IHBsYXRmb3JtLiINCisjaWYgIWRlZmluZWQoWFRfQ0xPQ0tfRlJFUSkgJiYgIWRlZmluZWQoWFRfQk9BUkQpDQorICAjZXJyb3IgIlhUX0NMT0NLX0ZSRVEgbXVzdCBiZSBkZWZpbmVkIGZvciB0aGUgdGFyZ2V0IHBsYXRmb3JtLiINCiAjZW5kaWYNCiANCiAvKg0KLSAqIERlZmF1bHQgbnVtYmVyIG9mIHRpbWVyICJ0aWNrcyIgcGVyIHNlY29uZCAoZGVmYXVsdCAxMDAgZm9yIDEwbXMgdGljaykuDQotICogUlRPUyBtYXkgZGVmaW5lIHRoaXMgaW4gaXRzIG93biB3YXkgKGlmIGFwcGxpY2FibGUpIGluIHh0ZW5zYV9ydG9zLmguDQotICogVXNlciBtYXkgcmVkZWZpbmUgdGhpcyB0byBhbiBvcHRpbWFsIHZhbHVlIGZvciB0aGUgYXBwbGljYXRpb24sIGVpdGhlciBieQ0KLSAqIGVkaXRpbmcgdGhpcyBoZXJlIG9yIGluIHh0ZW5zYV9ydG9zLmgsIG9yIGNvbXBpbGluZyB3aXRoIHh0LXhjYyBvcHRpb24NCi0gKiAiLURYVF9USUNLX1BFUl9TRUM9PHZhbHVlPiIgd2hlcmUgPHZhbHVlPiBpcyBhIHN1aXRhYmxlIG51bWJlci4NCi0gKi8NCitEZWZhdWx0IG51bWJlciBvZiB0aW1lciAidGlja3MiIHBlciBzZWNvbmQgKGRlZmF1bHQgMTAwIGZvciAxMG1zIHRpY2spLg0KK1JUT1MgbWF5IGRlZmluZSB0aGlzIGluIGl0cyBvd24gd2F5IChpZiBhcHBsaWNhYmxlKSBpbiB4dGVuc2FfcnRvcy5oLg0KK1VzZXIgbWF5IHJlZGVmaW5lIHRoaXMgdG8gYW4gb3B0aW1hbCB2YWx1ZSBmb3IgdGhlIGFwcGxpY2F0aW9uLCBlaXRoZXIgYnkNCitlZGl0aW5nIHRoaXMgaGVyZSBvciBpbiB4dGVuc2FfcnRvcy5oLCBvciBjb21waWxpbmcgd2l0aCB4dC14Y2Mgb3B0aW9uDQorIi1EWFRfVElDS19QRVJfU0VDPTx2YWx1ZT4iIHdoZXJlIDx2YWx1ZT4gaXMgYSBzdWl0YWJsZSBudW1iZXIuDQorKi8NCiAjaWZuZGVmIFhUX1RJQ0tfUEVSX1NFQw0KLSAgICAjZGVmaW5lIFhUX1RJQ0tfUEVSX1NFQyAgICBjb25maWdUSUNLX1JBVEVfSFogICAgLyogMTAgbXMgdGljayA9IDEwMCB0aWNrcyBwZXIgc2Vjb25kICovDQorI2RlZmluZSBYVF9USUNLX1BFUl9TRUMgICAgY29uZmlnVElDS19SQVRFX0haICAgICAgICAvKiAxMCBtcyB0aWNrID0gMTAwIHRpY2tzIHBlciBzZWNvbmQgKi8NCiAjZW5kaWYNCiANCiAvKg0KLSAqIERlcml2YXRpb24gb2YgY2xvY2sgZGl2aXNvciBmb3IgdGltZXIgdGljayBhbmQgaW50ZXJydXB0IChvbmUgcGVyIHRpY2spLg0KLSAqLw0KK0Rlcml2YXRpb24gb2YgY2xvY2sgZGl2aXNvciBmb3IgdGltZXIgdGljayBhbmQgaW50ZXJydXB0IChvbmUgcGVyIHRpY2spLg0KKyovDQogI2lmZGVmIFhUX0NMT0NLX0ZSRVENCi0gICAgI2RlZmluZSBYVF9USUNLX0RJVklTT1IgICAgKCBYVF9DTE9DS19GUkVRIC8gWFRfVElDS19QRVJfU0VDICkNCisjZGVmaW5lIFhUX1RJQ0tfRElWSVNPUiAgICAgKFhUX0NMT0NLX0ZSRVEgLyBYVF9USUNLX1BFUl9TRUMpDQogI2VuZGlmDQogDQogI2lmbmRlZiBfX0FTU0VNQkxFUl9fDQotICAgIGV4dGVybiB1bnNpZ25lZCBfeHRfdGlja19kaXZpc29yOw0KLSAgICBleHRlcm4gdm9pZCBfeHRfdGlja19kaXZpc29yX2luaXQoIHZvaWQgKTsNCitleHRlcm4gdW5zaWduZWQgX3h0X3RpY2tfZGl2aXNvcjsNCitleHRlcm4gdm9pZCAgICAgX3h0X3RpY2tfZGl2aXNvcl9pbml0KHZvaWQpOw0KICNlbmRpZg0KIA0KLSNlbmRpZiAvKiBYVEVOU0FfVElNRVJfSCAqLw0KKyNlbmRpZiAgLyogWFRFTlNBX1RJTUVSX0ggKi8NCisNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9XaXpDL1BJQzE4L0RyaXZlcnMvVGljay9UaWNrLmMgYi9wb3J0YWJsZS9XaXpDL1BJQzE4L0RyaXZlcnMvVGljay9UaWNrLmMKaW5kZXggYzg1ZGU1MC4uMjg5MDJjNyAxMDA2NDQKLS0tIGEvcG9ydGFibGUvV2l6Qy9QSUMxOC9Ecml2ZXJzL1RpY2svVGljay5jCisrKyBiL3BvcnRhYmxlL1dpekMvUElDMTgvRHJpdmVycy9UaWNrL1RpY2suYwpAQCAtMjUsNTEgKzI1LDUxIEBACiAgKiAxIHRhYiA9PSA0IHNwYWNlcyENCiAgKi8NCiANCi0vKg0KLSAqIENoYW5nZXMgZnJvbSBWMy4wLjANCi0gKyBJU1Jjb2RlIGlzIHB1bGxlZCBpbmxpbmUgYW5kIHBvcnRUSUNLaXNyKCkgaXMgdGhlcmVmb3JlDQotICsgICAgZGVsZXRlZCBmcm9tIHRoaXMgZmlsZS4NCi0gKw0KLSArIFByZXNjYWxlciBsb2dpYyBmb3IgVGltZXIxIGFkZGVkIHRvIGFsbG93IGZvciBhIHdpZGVyDQotICsgICAgcmFuZ2Ugb2YgVGlja1JhdGVzLg0KLSArDQotICsgQ2hhbmdlcyBmcm9tIFYzLjAuMQ0KLSAqLw0KKy8qIA0KK0NoYW5nZXMgZnJvbSBWMy4wLjANCisJKyBJU1Jjb2RlIGlzIHB1bGxlZCBpbmxpbmUgYW5kIHBvcnRUSUNLaXNyKCkgaXMgdGhlcmVmb3JlDQorCSAgZGVsZXRlZCBmcm9tIHRoaXMgZmlsZS4NCisNCisJKyBQcmVzY2FsZXIgbG9naWMgZm9yIFRpbWVyMSBhZGRlZCB0byBhbGxvdyBmb3IgYSB3aWRlcg0KKwkgIHJhbmdlIG9mIFRpY2tSYXRlcy4NCisNCitDaGFuZ2VzIGZyb20gVjMuMC4xDQorKi8NCiANCiAjaW5jbHVkZSA8RnJlZVJUT1MuaD4NCiAjaW5jbHVkZSA8dGFzay5oPg0KIA0KIC8qIElPIHBvcnQgY29uc3RhbnRzLiAqLw0KLSNkZWZpbmUgcG9ydEJJVF9TRVQgICAgICAgICAgICAgICAgICAgICggMSApDQotI2RlZmluZSBwb3J0QklUX0NMRUFSICAgICAgICAgICAgICAgICAgKCAwICkNCisjZGVmaW5lIHBvcnRCSVRfU0VUCQkoMSkNCisjZGVmaW5lIHBvcnRCSVRfQ0xFQVIJKDApDQogDQotLyoNCisvKiANCiAgKiBIYXJkd2FyZSBzZXR1cCBmb3IgdGhlIHRpY2suDQogICogV2UgdXNlIGEgY29tcGFyZSBtYXRjaCBvbiB0aW1lcjEuIERlcGVuZGluZyBvbiBNUFUtZnJlcXVlbmN5DQogICogYW5kIHJlcXVlc3RlZCB0aWNrcmF0ZSwgYSBwcmVzY2FsZWQgdmFsdWUgd2l0aCBhIG1hdGNoaW5nDQogICogcHJlc2NhbGVyIGFyZSBkZXRlcm1pbmVkLg0KICAqLw0KLSNkZWZpbmUgcG9ydFRJTUVSX0NPTVBBUkVfQkFTRSAgICAgICAgICggKCBBUFJPQ0ZSRVEgLyA0ICkgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KKyNkZWZpbmUJcG9ydFRJTUVSX0NPTVBBUkVfQkFTRQkJCSgoQVBST0NGUkVRLzQpL2NvbmZpZ1RJQ0tfUkFURV9IWikNCiANCi0jaWYgcG9ydFRJTUVSX0NPTVBBUkVfQkFTRSA8IDB4MTAwMDANCi0gICAgI2RlZmluZSBwb3J0VElNRVJfQ09NUEFSRV9WQUxVRSAgICAoIHBvcnRUSU1FUl9DT01QQVJFX0JBU0UgKQ0KLSAgICAjZGVmaW5lIHBvcnRUSU1FUl9DT01QQVJFX1BTMSAgICAgICggcG9ydEJJVF9DTEVBUiApDQotICAgICNkZWZpbmUgcG9ydFRJTUVSX0NPTVBBUkVfUFMwICAgICAgKCBwb3J0QklUX0NMRUFSICkNCisjaWYgcG9ydFRJTUVSX0NPTVBBUkVfQkFTRSAgIDwgMHgxMDAwMA0KKwkjZGVmaW5lCXBvcnRUSU1FUl9DT01QQVJFX1ZBTFVFCQkocG9ydFRJTUVSX0NPTVBBUkVfQkFTRSkNCisJI2RlZmluZSBwb3J0VElNRVJfQ09NUEFSRV9QUzEJCShwb3J0QklUX0NMRUFSKQ0KKwkjZGVmaW5lIHBvcnRUSU1FUl9DT01QQVJFX1BTMAkJKHBvcnRCSVRfQ0xFQVIpDQogI2VsaWYgcG9ydFRJTUVSX0NPTVBBUkVfQkFTRSA8IDB4MjAwMDANCi0gICAgI2RlZmluZSBwb3J0VElNRVJfQ09NUEFSRV9WQUxVRSAgICAoIHBvcnRUSU1FUl9DT01QQVJFX0JBU0UgLyAyICkNCi0gICAgI2RlZmluZSBwb3J0VElNRVJfQ09NUEFSRV9QUzEgICAgICAoIHBvcnRCSVRfQ0xFQVIgKQ0KLSAgICAjZGVmaW5lIHBvcnRUSU1FUl9DT01QQVJFX1BTMCAgICAgICggcG9ydEJJVF9TRVQgKQ0KKwkjZGVmaW5lCXBvcnRUSU1FUl9DT01QQVJFX1ZBTFVFCQkocG9ydFRJTUVSX0NPTVBBUkVfQkFTRSAvIDIpDQorCSNkZWZpbmUgcG9ydFRJTUVSX0NPTVBBUkVfUFMxCQkocG9ydEJJVF9DTEVBUikNCisJI2RlZmluZSBwb3J0VElNRVJfQ09NUEFSRV9QUzAJCShwb3J0QklUX1NFVCkNCiAjZWxpZiBwb3J0VElNRVJfQ09NUEFSRV9CQVNFIDwgMHg0MDAwMA0KLSAgICAjZGVmaW5lIHBvcnRUSU1FUl9DT01QQVJFX1ZBTFVFICAgICggcG9ydFRJTUVSX0NPTVBBUkVfQkFTRSAvIDQgKQ0KLSAgICAjZGVmaW5lIHBvcnRUSU1FUl9DT01QQVJFX1BTMSAgICAgICggcG9ydEJJVF9TRVQgKQ0KLSAgICAjZGVmaW5lIHBvcnRUSU1FUl9DT01QQVJFX1BTMCAgICAgICggcG9ydEJJVF9DTEVBUiApDQorCSNkZWZpbmUJcG9ydFRJTUVSX0NPTVBBUkVfVkFMVUUJCShwb3J0VElNRVJfQ09NUEFSRV9CQVNFIC8gNCkNCisJI2RlZmluZSBwb3J0VElNRVJfQ09NUEFSRV9QUzEJCShwb3J0QklUX1NFVCkNCisJI2RlZmluZSBwb3J0VElNRVJfQ09NUEFSRV9QUzAJCShwb3J0QklUX0NMRUFSKQ0KICNlbGlmIHBvcnRUSU1FUl9DT01QQVJFX0JBU0UgPCAweDgwMDAwDQotICAgICNkZWZpbmUgcG9ydFRJTUVSX0NPTVBBUkVfVkFMVUUgICAgKCBwb3J0VElNRVJfQ09NUEFSRV9CQVNFIC8gOCApDQotICAgICNkZWZpbmUgcG9ydFRJTUVSX0NPTVBBUkVfUFMxICAgICAgKCBwb3J0QklUX1NFVCApDQotICAgICNkZWZpbmUgcG9ydFRJTUVSX0NPTVBBUkVfUFMwICAgICAgKCBwb3J0QklUX1NFVCApDQotI2Vsc2UgLyogaWYgcG9ydFRJTUVSX0NPTVBBUkVfQkFTRSA8IDB4MTAwMDAgKi8NCi0gICAgI2Vycm9yICJUaWNrUmF0ZSBvdXQgb2YgcmFuZ2UiDQotI2VuZGlmIC8qIGlmIHBvcnRUSU1FUl9DT01QQVJFX0JBU0UgPCAweDEwMDAwICovDQorCSNkZWZpbmUJcG9ydFRJTUVSX0NPTVBBUkVfVkFMVUUJCShwb3J0VElNRVJfQ09NUEFSRV9CQVNFIC8gOCkNCisJI2RlZmluZSBwb3J0VElNRVJfQ09NUEFSRV9QUzEJCShwb3J0QklUX1NFVCkNCisJI2RlZmluZSBwb3J0VElNRVJfQ09NUEFSRV9QUzAJCShwb3J0QklUX1NFVCkNCisjZWxzZQ0KKwkjZXJyb3IgIlRpY2tSYXRlIG91dCBvZiByYW5nZSINCisjZW5kaWYNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCkBAIC03OCw2MSArNzgsNjEgQEAKICAqLw0KIHZvaWQgcG9ydFNldHVwVGljayggdm9pZCApDQogew0KLSAgICAvKg0KLSAgICAgKiBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLg0KLSAgICAgKi8NCisJLyoNCisJICogSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4NCisJICovDQogDQotICAgIC8qDQotICAgICAqIFNldHVwIENDUDENCi0gICAgICogUHJvdmlkZSB0aGUgdGljayBpbnRlcnJ1cHQgdXNpbmcgYSBjb21wYXJlIG1hdGNoIG9uIHRpbWVyMS4NCi0gICAgICovDQorCS8qDQorCSAqIFNldHVwIENDUDENCisJICogUHJvdmlkZSB0aGUgdGljayBpbnRlcnJ1cHQgdXNpbmcgYSBjb21wYXJlIG1hdGNoIG9uIHRpbWVyMS4NCisJICovDQogDQotICAgIC8qDQotICAgICAqIFNldCB0aGUgY29tcGFyZSBtYXRjaCB2YWx1ZS4NCi0gICAgICovDQotICAgIENDUFIxSCA9ICggdWludDhfdCApICggKCBwb3J0VElNRVJfQ09NUEFSRV9WQUxVRSA+PiA4ICkgJiAweGZmICk7DQotICAgIENDUFIxTCA9ICggdWludDhfdCApICggcG9ydFRJTUVSX0NPTVBBUkVfVkFMVUUgJiAweGZmICk7DQorCS8qDQorCSAqIFNldCB0aGUgY29tcGFyZSBtYXRjaCB2YWx1ZS4NCisJICovDQorCUNDUFIxSCA9ICggdWludDhfdCApICggKCBwb3J0VElNRVJfQ09NUEFSRV9WQUxVRSA+PiA4ICkgJiAweGZmICk7DQorCUNDUFIxTCA9ICggdWludDhfdCApICAgKCBwb3J0VElNRVJfQ09NUEFSRV9WQUxVRSAmIDB4ZmYgKTsNCiANCi0gICAgLyoNCi0gICAgICogU2V0IENvbXBhcmUgU3BlY2lhbCBFdmVudCBUcmlnZ2VyIE1vZGUNCi0gICAgICovDQotICAgIGJDQ1AxTTMgPSBwb3J0QklUX1NFVDsNCi0gICAgYkNDUDFNMiA9IHBvcnRCSVRfQ0xFQVI7DQotICAgIGJDQ1AxTTEgPSBwb3J0QklUX1NFVDsNCi0gICAgYkNDUDFNMCA9IHBvcnRCSVRfU0VUOw0KKwkvKg0KKwkgKiBTZXQgQ29tcGFyZSBTcGVjaWFsIEV2ZW50IFRyaWdnZXIgTW9kZQ0KKwkgKi8NCisJYkNDUDFNMyAJPSBwb3J0QklUX1NFVDsNCisJYkNDUDFNMiAJPSBwb3J0QklUX0NMRUFSOw0KKwliQ0NQMU0xIAk9IHBvcnRCSVRfU0VUOw0KKwliQ0NQMU0wCQk9IHBvcnRCSVRfU0VUOw0KIA0KLSAgICAvKg0KLSAgICAgKiBFbmFibGUgQ0NQMSBpbnRlcnJ1cHQNCi0gICAgICovDQotICAgIGJDQ1AxSUUgPSBwb3J0QklUX1NFVDsNCisJLyoNCisJICogRW5hYmxlIENDUDEgaW50ZXJydXB0DQorCSAqLw0KKwliQ0NQMUlFIAk9IHBvcnRCSVRfU0VUOw0KIA0KLSAgICAvKg0KLSAgICAgKiBXZSBhcmUgb25seSBnb2luZyB0byB1c2UgdGhlIGdsb2JhbCBpbnRlcnJ1cHQgYml0LCBzbyBkaXNhYmxlDQotICAgICAqIGludGVycnVwdHByaW9yaXRpZXMgYW5kIGVuYWJsZSBwZXJpcGhlcmFsIGludGVycnVwdHMuDQotICAgICAqLw0KLSAgICBiSVBFTiA9IHBvcnRCSVRfQ0xFQVI7DQotICAgIGJQRUlFID0gcG9ydEJJVF9TRVQ7DQorCS8qDQorCSAqIFdlIGFyZSBvbmx5IGdvaW5nIHRvIHVzZSB0aGUgZ2xvYmFsIGludGVycnVwdCBiaXQsIHNvIGRpc2FibGUNCisJICogaW50ZXJydXB0cHJpb3JpdGllcyBhbmQgZW5hYmxlIHBlcmlwaGVyYWwgaW50ZXJydXB0cy4NCisJICovDQorCWJJUEVOCQk9IHBvcnRCSVRfQ0xFQVI7DQorCWJQRUlFCQk9IHBvcnRCSVRfU0VUOw0KIA0KLSAgICAvKg0KLSAgICAgKiBTZXQgdXAgdGltZXIxDQotICAgICAqIEl0IHdpbGwgcHJvZHVjZSB0aGUgc3lzdGVtIHRpY2suDQotICAgICAqLw0KKwkvKg0KKwkgKiBTZXQgdXAgdGltZXIxDQorCSAqIEl0IHdpbGwgcHJvZHVjZSB0aGUgc3lzdGVtIHRpY2suDQorCSAqLw0KIA0KLSAgICAvKg0KLSAgICAgKiBDbGVhciB0aGUgdGltZSBjb3VudA0KLSAgICAgKi8NCi0gICAgVE1SMUggPSAoIHVpbnQ4X3QgKSAweDAwOw0KLSAgICBUTVIxTCA9ICggdWludDhfdCApIDB4MDA7DQorCS8qDQorCSAqIENsZWFyIHRoZSB0aW1lIGNvdW50DQorCSAqLw0KKwlUTVIxSCA9ICggdWludDhfdCApIDB4MDA7DQorCVRNUjFMID0gKCB1aW50OF90ICkgMHgwMDsNCiANCi0gICAgLyoNCi0gICAgICogU2V0dXAgdGhlIHRpbWVyDQotICAgICAqLw0KLSAgICBiUkQxNiA9IHBvcnRCSVRfU0VUOyAgICAgICAgICAgICAgLyogMTYtYml0ICovDQotICAgIGJUMUNLUFMxID0gcG9ydFRJTUVSX0NPTVBBUkVfUFMxOyAvKiBwcmVzY2FsZXIgKi8NCi0gICAgYlQxQ0tQUzAgPSBwb3J0VElNRVJfQ09NUEFSRV9QUzA7IC8qIHByZXNjYWxlciAqLw0KLSAgICBiVDFPU0NFTiA9IHBvcnRCSVRfU0VUOyAgICAgICAgICAgLyogT3NjaWxsYXRvciBlbmFibGUgKi8NCi0gICAgYlQxU1lOQyA9IHBvcnRCSVRfU0VUOyAgICAgICAgICAgIC8qIE5vIGV4dGVybmFsIGNsb2NrIHN5bmMgKi8NCi0gICAgYlRNUjFDUyA9IHBvcnRCSVRfQ0xFQVI7ICAgICAgICAgIC8qIEludGVybmFsIGNsb2NrICovDQotDQotICAgIGJUTVIxT04gPSBwb3J0QklUX1NFVDsgICAgICAgICAgICAvKiBTdGFydCB0aW1lcjEgKi8NCisJLyoNCisJICogU2V0dXAgdGhlIHRpbWVyDQorCSAqLw0KKwliUkQxNgkJPSBwb3J0QklUX1NFVDsJCQkJLy8gMTYtYml0DQorCWJUMUNLUFMxCT0gcG9ydFRJTUVSX0NPTVBBUkVfUFMxOwkvLyBwcmVzY2FsZXINCisJYlQxQ0tQUzAJPSBwb3J0VElNRVJfQ09NUEFSRV9QUzA7CS8vIHByZXNjYWxlcg0KKwliVDFPU0NFTgk9IHBvcnRCSVRfU0VUOwkJCQkvLyBPc2NpbGxhdG9yIGVuYWJsZQ0KKwliVDFTWU5DCQk9IHBvcnRCSVRfU0VUOwkJCQkvLyBObyBleHRlcm5hbCBjbG9jayBzeW5jDQorCWJUTVIxQ1MJCT0gcG9ydEJJVF9DTEVBUjsJCQkvLyBJbnRlcm5hbCBjbG9jaw0KKwkNCisJYlRNUjFPTgkJPSBwb3J0QklUX1NFVDsJCQkJLy8gU3RhcnQgdGltZXIxDQogfQ0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL1dpekMvUElDMTgvRHJpdmVycy9UaWNrL2lzclRpY2suYyBiL3BvcnRhYmxlL1dpekMvUElDMTgvRHJpdmVycy9UaWNrL2lzclRpY2suYwppbmRleCAzNGRkNTk5Li5lNWVlZTZkIDEwMDY0NAotLS0gYS9wb3J0YWJsZS9XaXpDL1BJQzE4L0RyaXZlcnMvVGljay9pc3JUaWNrLmMKKysrIGIvcG9ydGFibGUvV2l6Qy9QSUMxOC9Ecml2ZXJzL1RpY2svaXNyVGljay5jCkBAIC0yNSw1NCArMjUsNTQgQEAKICAqIDEgdGFiID09IDQgc3BhY2VzIQ0KICAqLw0KIA0KLS8qDQotICogQ2hhbmdlcyBmcm9tIFYzLjAuMA0KLSArIElTUmNvZGUgcHVsbGVkIGlubGluZSB0byByZWR1Y2Ugc3RhY2stdXNhZ2UuDQotICsNCi0gKyBBZGRlZCBmdW5jdGlvbmFsaXR5IHRvIG9ubHkgY2FsbCB2VGFza1N3aXRjaENvbnRleHQoKSBvbmNlDQotICsgICAgd2hlbiBoYW5kbGluZyBtdWx0aXBsZSBpbnRlcnJ1cHRzb3VyY2VzIGluIGEgc2luZ2xlIGludGVycnVwdGNhbGwuDQotICsNCi0gKyBGaWxlbmFtZSBjaGFuZ2VkIHRvIGEgLmMgZXh0ZW5zaW9uIHRvIGFsbG93IHN0ZXBwaW5nIHRocm91Z2ggY29kZQ0KLSArICAgIHVzaW5nIEY3Lg0KLSArDQotICsgQ2hhbmdlcyBmcm9tIFYzLjAuMQ0KLSAqLw0KKy8qIA0KK0NoYW5nZXMgZnJvbSBWMy4wLjANCisJKyBJU1Jjb2RlIHB1bGxlZCBpbmxpbmUgdG8gcmVkdWNlIHN0YWNrLXVzYWdlLg0KKw0KKwkrIEFkZGVkIGZ1bmN0aW9uYWxpdHkgdG8gb25seSBjYWxsIHZUYXNrU3dpdGNoQ29udGV4dCgpIG9uY2UNCisJICB3aGVuIGhhbmRsaW5nIG11bHRpcGxlIGludGVycnVwdHNvdXJjZXMgaW4gYSBzaW5nbGUgaW50ZXJydXB0Y2FsbC4NCisNCisJKyBGaWxlbmFtZSBjaGFuZ2VkIHRvIGEgLmMgZXh0ZW5zaW9uIHRvIGFsbG93IHN0ZXBwaW5nIHRocm91Z2ggY29kZQ0KKwkgIHVzaW5nIEY3Lg0KKw0KK0NoYW5nZXMgZnJvbSBWMy4wLjENCisqLw0KIA0KIC8qDQogICogSVNSIGZvciB0aGUgdGljay4NCi0gKiBUaGlzIGluY3JlbWVudHMgdGhlIHRpY2sgY291bnQgYW5kLCBpZiB1c2luZyB0aGUgcHJlZW1wdGl2ZSBzY2hlZHVsZXIsDQotICogcGVyZm9ybXMgYSBjb250ZXh0IHN3aXRjaC4gIFRoaXMgbXVzdCBiZSBpZGVudGljYWwgdG8gdGhlIG1hbnVhbA0KLSAqIGNvbnRleHQgc3dpdGNoIGluIGhvdyBpdCBzdG9yZXMgdGhlIGNvbnRleHQgb2YgYSB0YXNrLg0KKyAqIFRoaXMgaW5jcmVtZW50cyB0aGUgdGljayBjb3VudCBhbmQsIGlmIHVzaW5nIHRoZSBwcmVlbXB0aXZlIHNjaGVkdWxlciwgDQorICogcGVyZm9ybXMgYSBjb250ZXh0IHN3aXRjaC4gIFRoaXMgbXVzdCBiZSBpZGVudGljYWwgdG8gdGhlIG1hbnVhbCANCisgKiBjb250ZXh0IHN3aXRjaCBpbiBob3cgaXQgc3RvcmVzIHRoZSBjb250ZXh0IG9mIGEgdGFzay4gDQogICovDQogDQogI2lmbmRlZiBfRlJFRVJUT1NfRFJJVkVSU19USUNLX0lTUlRJQ0tfQw0KICNkZWZpbmUgX0ZSRUVSVE9TX0RSSVZFUlNfVElDS19JU1JUSUNLX0MNCiANCiB7DQotICAgIC8qDQotICAgICAqIFdhcyB0aGUgaW50ZXJydXB0IHRoZSBTeXN0ZW1DbG9jaz8NCi0gICAgICovDQotICAgIGlmKCBiQ0NQMUlGICYmIGJDQ1AxSUUgKQ0KLSAgICB7DQotICAgICAgICAvKg0KLSAgICAgICAgICogUmVzZXQgdGhlIGludGVycnVwdCBmbGFnDQotICAgICAgICAgKi8NCi0gICAgICAgIGJDQ1AxSUYgPSAwOw0KLQ0KLSAgICAgICAgLyoNCi0gICAgICAgICAqIE1haW50YWluIHRoZSB0aWNrIGNvdW50Lg0KLSAgICAgICAgICovDQotICAgICAgICBpZiggeFRhc2tJbmNyZW1lbnRUaWNrKCkgIT0gcGRGQUxTRSApDQotICAgICAgICB7DQotICAgICAgICAgICAgLyoNCi0gICAgICAgICAgICAgKiBBc2sgZm9yIGEgc3dpdGNoIHRvIHRoZSBoaWdoZXN0IHByaW9yaXR5IHRhc2sNCi0gICAgICAgICAgICAgKiB0aGF0IGlzIHJlYWR5IHRvIHJ1bi4NCi0gICAgICAgICAgICAgKi8NCi0gICAgICAgICAgICB1eFN3aXRjaFJlcXVlc3RlZCA9IHBkVFJVRTsNCi0gICAgICAgIH0NCi0gICAgfQ0KKwkvKg0KKwkgKiBXYXMgdGhlIGludGVycnVwdCB0aGUgU3lzdGVtQ2xvY2s/DQorCSAqLw0KKwlpZiggYkNDUDFJRiAmJiBiQ0NQMUlFICkNCisJew0KKwkJLyoNCisJCSAqIFJlc2V0IHRoZSBpbnRlcnJ1cHQgZmxhZw0KKwkJICovDQorCQliQ0NQMUlGID0gMDsNCisJDQorCQkvKg0KKwkgCSAqIE1haW50YWluIHRoZSB0aWNrIGNvdW50Lg0KKwkgCSAqLw0KKwkJaWYoIHhUYXNrSW5jcmVtZW50VGljaygpICE9IHBkRkFMU0UgKQ0KKwkJew0KKwkJCS8qDQorCQkgCSAqIEFzayBmb3IgYSBzd2l0Y2ggdG8gdGhlIGhpZ2hlc3QgcHJpb3JpdHkgdGFzaw0KKwkJIAkgKiB0aGF0IGlzIHJlYWR5IHRvIHJ1bi4NCisJCSAJICovDQorCQkJdXhTd2l0Y2hSZXF1ZXN0ZWQgPSBwZFRSVUU7DQorCQl9DQorCX0NCiB9DQogDQogI3ByYWdtYSB3aXpjcHAgdXNlbGliICAgICAiJF9fUEFUSE5BTUVfXy9UaWNrLmMiDQogDQotI2VuZGlmIC8qIF9GUkVFUlRPU19EUklWRVJTX1RJQ0tfSVNSVElDS19DICovDQorI2VuZGlmCS8qIF9GUkVFUlRPU19EUklWRVJTX1RJQ0tfSVNSVElDS19DICovDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvV2l6Qy9QSUMxOC9hZGRGcmVlUlRPUy5oIGIvcG9ydGFibGUvV2l6Qy9QSUMxOC9hZGRGcmVlUlRPUy5oCmluZGV4IDhkMTRkZjcuLjhiMmU3YTUgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL1dpekMvUElDMTgvYWRkRnJlZVJUT1MuaAorKysgYi9wb3J0YWJsZS9XaXpDL1BJQzE4L2FkZEZyZWVSVE9TLmgKQEAgLTI2LDEzICsyNiwxMyBAQAogICovDQogDQogLyoNCi0gKiBDaGFuZ2VzIGZyb20gVjMuMC4wDQotICoNCi0gKiBDaGFuZ2VzIGZyb20gVjMuMC4xDQotICoNCi0gKiBDaGFuZ2VzIGZyb20gVjQuMC4xDQotICogIFVzZWxpYiBwcmFnbWEgYWRkZWQgZm9yIENyb3V0aW5lLmMNCi0gKi8NCitDaGFuZ2VzIGZyb20gVjMuMC4wDQorDQorQ2hhbmdlcyBmcm9tIFYzLjAuMQ0KKw0KK0NoYW5nZXMgZnJvbSBWNC4wLjENCisgICAgVXNlbGliIHByYWdtYSBhZGRlZCBmb3IgQ3JvdXRpbmUuYw0KKyovDQogDQogLyoNCiAgKiBUaGUgaW5zdGFsbGF0aW9uIHNjcmlwdCB3aWxsIGF1dG9tYXRpY2FsbHkgcHJlcGVuZCB0aGlzIGZpbGUgdG8gdGhlIGRlZmF1bHQgRnJlZVJUT1MuaC4NCkBAIC00MSw3ICs0MSw3IEBACiAjaWZuZGVmIFdJWkNfRlJFRVJUT1NfSA0KICNkZWZpbmUgV0laQ19GUkVFUlRPU19IDQogDQotI3ByYWdtYSBub2hlYXANCisjcHJhZ21hCW5vaGVhcA0KICNwcmFnbWEgd2l6Y3BwIGV4cGFuZG5sICAgb24NCiAjcHJhZ21hIHdpemNwcCBzZWFyY2hwYXRoICIkX19QQVRITkFNRV9fL2xpYkZyZWVSVE9TL0luY2x1ZGUvIg0KICNwcmFnbWEgd2l6Y3BwIHVzZWxpYiAgICAgIiRfX1BBVEhOQU1FX18vbGliRnJlZVJUT1MvTW9kdWxlcy9Dcm91dGluZS5jIg0KQEAgLTUwLDQgKzUwLDQgQEAKICNwcmFnbWEgd2l6Y3BwIHVzZWxpYiAgICAgIiRfX1BBVEhOQU1FX18vbGliRnJlZVJUT1MvTW9kdWxlcy9MaXN0LmMiDQogI3ByYWdtYSB3aXpjcHAgdXNlbGliICAgICAiJF9fUEFUSE5BTUVfXy9saWJGcmVlUlRPUy9Nb2R1bGVzL1BvcnQuYyINCiANCi0jZW5kaWYgLyogV0laQ19GUkVFUlRPU19IICovDQorI2VuZGlmCS8qIFdJWkNfRlJFRVJUT1NfSCAqLw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL1dpekMvUElDMTgvcG9ydC5jIGIvcG9ydGFibGUvV2l6Qy9QSUMxOC9wb3J0LmMKaW5kZXggZTkxODI1My4uYTUyZmU3MyAxMDA2NDQKLS0tIGEvcG9ydGFibGUvV2l6Qy9QSUMxOC9wb3J0LmMKKysrIGIvcG9ydGFibGUvV2l6Qy9QSUMxOC9wb3J0LmMKQEAgLTI2LDE5ICsyNiwxOSBAQAogICovDQogDQogLyoNCi0gKiBDaGFuZ2VzIGZyb20gVjMuMi4xDQotICsgQ2FsbFJldHVybiBEZXB0aCBpbmNyZWFzZWQgZnJvbSA4IHRvIDEwIGxldmVscyB0byBhY2NvbW9kYXRlIHdpekMvZmVkQyBWMTIuDQotICsNCi0gKyBDaGFuZ2VzIGZyb20gVjMuMi4wDQotICsgVEJMUFRSVSBpcyBub3cgaW5pdGlhbGlzZWQgdG8gemVybyBkdXJpbmcgdGhlIGluaXRpYWwgc3RhY2sgY3JlYXRpb24gb2YgYSBuZXcgdGFzay4gVGhpcyBzb2x2ZXMNCi0gKyAgYW4gZXJyb3Igb24gZGV2aWNlcyB3aXRoIG1vcmUgdGhhbiA2NGtCIFJPTS4NCi0gKw0KLSArIENoYW5nZXMgZnJvbSBWMy4wLjANCi0gKyB1Y0NyaXRpY2FsTmVzdGluZyBpcyBub3cgaW5pdGlhbGlzZWQgdG8gMHg3RiB0byBwcmV2ZW50IGludGVycnVwdHMgZnJvbSBiZWluZw0KLSArICAgICAgICBoYW5kbGVkIGJlZm9yZSB0aGUgc2NoZWR1bGVyIGlzIHN0YXJ0ZWQuDQotICsNCi0gKyBDaGFuZ2VzIGZyb20gVjMuMC4xDQotICovDQorQ2hhbmdlcyBmcm9tIFYzLjIuMQ0KKwkrIENhbGxSZXR1cm4gRGVwdGggaW5jcmVhc2VkIGZyb20gOCB0byAxMCBsZXZlbHMgdG8gYWNjb21vZGF0ZSB3aXpDL2ZlZEMgVjEyLg0KKw0KK0NoYW5nZXMgZnJvbSBWMy4yLjANCisJKyBUQkxQVFJVIGlzIG5vdyBpbml0aWFsaXNlZCB0byB6ZXJvIGR1cmluZyB0aGUgaW5pdGlhbCBzdGFjayBjcmVhdGlvbiBvZiBhIG5ldyB0YXNrLiBUaGlzIHNvbHZlcw0KKwlhbiBlcnJvciBvbiBkZXZpY2VzIHdpdGggbW9yZSB0aGFuIDY0a0IgUk9NLg0KKw0KK0NoYW5nZXMgZnJvbSBWMy4wLjANCisJKyB1Y0NyaXRpY2FsTmVzdGluZyBpcyBub3cgaW5pdGlhbGlzZWQgdG8gMHg3RiB0byBwcmV2ZW50IGludGVycnVwdHMgZnJvbSBiZWluZw0KKyAgICAgICAgICBoYW5kbGVkIGJlZm9yZSB0aGUgc2NoZWR1bGVyIGlzIHN0YXJ0ZWQuDQorDQorQ2hhbmdlcyBmcm9tIFYzLjAuMQ0KKyovDQogDQogLyogU2NoZWR1bGVyIGluY2x1ZGUgZmlsZXMuICovDQogI2luY2x1ZGUgPEZyZWVSVE9TLmg+DQpAQCAtNzcsMTcgKzc3LDE3IEBACiAgKgkJMTYgYnl0ZXM6IEZyZWUgc3BhY2Ugb24gc3RhY2sNCiAgKi8NCiAjaWYgX1JPTVNJWkUgPiAweDgwMDANCi0gICAgI2RlZmluZSBwb3J0U1RBQ0tfRlNSX0JZVEVTICAgICAgICAgICAgICAgICggMTUgKQ0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19DQUxMUkVUVVJOX0VOVFJZX1NJWkUgICAgKCAzICkNCisJI2RlZmluZSBwb3J0U1RBQ0tfRlNSX0JZVEVTCQkJCSggMTUgKQ0KKwkjZGVmaW5lIHBvcnRTVEFDS19DQUxMUkVUVVJOX0VOVFJZX1NJWkUJKCAgMyApDQogI2Vsc2UNCi0gICAgI2RlZmluZSBwb3J0U1RBQ0tfRlNSX0JZVEVTICAgICAgICAgICAgICAgICggMTMgKQ0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19DQUxMUkVUVVJOX0VOVFJZX1NJWkUgICAgKCAyICkNCisJI2RlZmluZSBwb3J0U1RBQ0tfRlNSX0JZVEVTCQkJCSggMTMgKQ0KKwkjZGVmaW5lIHBvcnRTVEFDS19DQUxMUkVUVVJOX0VOVFJZX1NJWkUJKCAgMiApDQogI2VuZGlmDQogDQotI2RlZmluZSBwb3J0U1RBQ0tfTUlOSU1BTF9DQUxMUkVUVVJOX0RFUFRIICAgICAoIDEwICkNCi0jZGVmaW5lIHBvcnRTVEFDS19PVEhFUl9CWVRFUyAgICAgICAgICAgICAgICAgICggMjAgKQ0KKyNkZWZpbmUgcG9ydFNUQUNLX01JTklNQUxfQ0FMTFJFVFVSTl9ERVBUSAkoIDEwICkNCisjZGVmaW5lIHBvcnRTVEFDS19PVEhFUl9CWVRFUwkJCQkoIDIwICkNCiANCi11aW50MTZfdCB1c0NhbGNNaW5TdGFja1NpemUgPSAwOw0KK3VpbnQxNl90IHVzQ2FsY01pblN0YWNrU2l6ZQkJPSAwOw0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KQEAgLTEwNSwxNTYgKzEwNSwxNTQgQEAKICAqIEluaXRpYWxpc2UgdGhlIHN0YWNrIG9mIGEgbmV3IHRhc2suDQogICogU2VlIHBvcnRTQVZFX0NPTlRFWFQgbWFjcm8gZm9yIGRlc2NyaXB0aW9uLg0KICAqLw0KLVN0YWNrVHlwZV90ICogcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqIHB4VG9wT2ZTdGFjaywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFza0Z1bmN0aW9uX3QgcHhDb2RlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICogcHZQYXJhbWV0ZXJzICkNCitTdGFja1R5cGVfdCAqcHhQb3J0SW5pdGlhbGlzZVN0YWNrKCBTdGFja1R5cGVfdCAqcHhUb3BPZlN0YWNrLCBUYXNrRnVuY3Rpb25fdCBweENvZGUsIHZvaWQgKnB2UGFyYW1ldGVycyApDQogew0KLSAgICB1aW50OF90IHVjU2NyYXRjaDsNCit1aW50OF90IHVjU2NyYXRjaDsNCisJLyoNCisJICogR2V0IHRoZSBzaXplIG9mIHRoZSBSQU1hcmVhIGluIHBhZ2UgMCB1c2VkIGJ5IHRoZSBjb21waWxlcg0KKwkgKiBXZSBkbyB0aGlzIGhlcmUgYWxyZWFkeSB0byBhdm9pZCBXLXJlZ2lzdGVyIGNvbmZsaWN0cy4NCisJICovDQorCV9QcmFnbWEoImFzbSIpDQorCQltb3ZsdwlPVkVSSEVBRFBBR0UwLUxPQ09QVFNJWkUrTUFYTE9DT1BUU0laRQ0KKwkJbW92d2YJUFJPREwsQUNDRVNTCQk7IFBST0RMIGlzIHVzZWQgYXMgdGVtcCByZWdpc3Rlcg0KKwlfUHJhZ21hKCJhc21lbmQiKQ0KKwl1Y1NjcmF0Y2ggPSBQUk9ETDsNCiANCi0gICAgLyoNCi0gICAgICogR2V0IHRoZSBzaXplIG9mIHRoZSBSQU1hcmVhIGluIHBhZ2UgMCB1c2VkIGJ5IHRoZSBjb21waWxlcg0KLSAgICAgKiBXZSBkbyB0aGlzIGhlcmUgYWxyZWFkeSB0byBhdm9pZCBXLXJlZ2lzdGVyIGNvbmZsaWN0cy4NCi0gICAgICovDQotICAgIF9QcmFnbWEoICJhc20iICkNCi0gICAgbW92bHcgT1ZFUkhFQURQQUdFMCAtIExPQ09QVFNJWkUgKyBNQVhMT0NPUFRTSVpFDQotICAgIG1vdndmIFBST0RMLCBBQ0NFU1M7DQotICAgIFBST0RMIGlzIHVzZWQgYXMgdGVtcCByZWdpc3RlciBfUHJhZ21hKCAiYXNtZW5kIiApDQotICAgIHVjU2NyYXRjaCA9IFBST0RMOw0KKwkvKg0KKwkgKiBQbGFjZSBhIGZldyBieXRlcyBvZiBrbm93biB2YWx1ZXMgb24gdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suDQorCSAqIFRoaXMgaXMganVzdCB1c2VmdWwgZm9yIGRlYnVnZ2luZy4NCisJICovDQorLy8JKnB4VG9wT2ZTdGFjay0tCT0gMHgxMTsNCisvLwkqcHhUb3BPZlN0YWNrLS0gPSAweDIyOw0KKy8vCSpweFRvcE9mU3RhY2stLSA9IDB4MzM7DQogDQotICAgIC8qDQotICAgICAqIFBsYWNlIGEgZmV3IGJ5dGVzIG9mIGtub3duIHZhbHVlcyBvbiB0aGUgYm90dG9tIG9mIHRoZSBzdGFjay4NCi0gICAgICogVGhpcyBpcyBqdXN0IHVzZWZ1bCBmb3IgZGVidWdnaW5nLg0KLSAgICAgKi8NCi0vKgkqcHhUb3BPZlN0YWNrLS0JPSAweDExOyAqLw0KLS8qCSpweFRvcE9mU3RhY2stLSA9IDB4MjI7ICovDQotLyoJKnB4VG9wT2ZTdGFjay0tID0gMHgzMzsgKi8NCisJLyoNCisJICogU2ltdWxhdGUgaG93IHRoZSBzdGFjayB3b3VsZCBsb29rIGFmdGVyIGEgY2FsbCB0byB2UG9ydFlpZWxkKCkNCisJICogZ2VuZXJhdGVkIGJ5IHRoZSBjb21waWxlci4NCisJICovDQogDQotICAgIC8qDQotICAgICAqIFNpbXVsYXRlIGhvdyB0aGUgc3RhY2sgd291bGQgbG9vayBhZnRlciBhIGNhbGwgdG8gdlBvcnRZaWVsZCgpDQotICAgICAqIGdlbmVyYXRlZCBieSB0aGUgY29tcGlsZXIuDQotICAgICAqLw0KKwkvKg0KKwkgKiBGaXJzdCBzdG9yZSB0aGUgZnVuY3Rpb24gcGFyYW1ldGVycy4gIFRoaXMgaXMgd2hlcmUgdGhlIHRhc2sgZXhwZWN0cw0KKwkgKiB0byBmaW5kIHRoZW0gd2hlbiBpdCBzdGFydHMgcnVubmluZy4NCisJICovDQorCSpweFRvcE9mU3RhY2stLSA9ICggU3RhY2tUeXBlX3QgKSAoICgoIHVpbnQxNl90ICkgcHZQYXJhbWV0ZXJzID4+IDgpICYgMHgwMGZmICk7DQorCSpweFRvcE9mU3RhY2stLSA9ICggU3RhY2tUeXBlX3QgKSAoICAoIHVpbnQxNl90ICkgcHZQYXJhbWV0ZXJzICAgICAgICYgMHgwMGZmICk7DQogDQotICAgIC8qDQotICAgICAqIEZpcnN0IHN0b3JlIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXJzLiAgVGhpcyBpcyB3aGVyZSB0aGUgdGFzayBleHBlY3RzDQotICAgICAqIHRvIGZpbmQgdGhlbSB3aGVuIGl0IHN0YXJ0cyBydW5uaW5nLg0KLSAgICAgKi8NCi0gICAgKnB4VG9wT2ZTdGFjay0tID0gKCBTdGFja1R5cGVfdCApICggKCAoIHVpbnQxNl90ICkgcHZQYXJhbWV0ZXJzID4+IDggKSAmIDB4MDBmZiApOw0KLSAgICAqcHhUb3BPZlN0YWNrLS0gPSAoIFN0YWNrVHlwZV90ICkgKCAoIHVpbnQxNl90ICkgcHZQYXJhbWV0ZXJzICYgMHgwMGZmICk7DQorCS8qDQorCSAqIE5leHQgYXJlIGFsbCB0aGUgcmVnaXN0ZXJzIHRoYXQgZm9ybSBwYXJ0IG9mIHRoZSB0YXNrIGNvbnRleHQuDQorCSAqLw0KKwkqcHhUb3BPZlN0YWNrLS0gPSAoIFN0YWNrVHlwZV90ICkgMHgxMTsgLyogU1RBVFVTLiAqLw0KKwkqcHhUb3BPZlN0YWNrLS0gPSAoIFN0YWNrVHlwZV90ICkgMHgyMjsgLyogV1JFRy4gKi8NCisJKnB4VG9wT2ZTdGFjay0tID0gKCBTdGFja1R5cGVfdCApIDB4MzM7IC8qIEJTUi4gKi8NCisJKnB4VG9wT2ZTdGFjay0tID0gKCBTdGFja1R5cGVfdCApIDB4NDQ7IC8qIFBST0RILiAqLw0KKwkqcHhUb3BPZlN0YWNrLS0gPSAoIFN0YWNrVHlwZV90ICkgMHg1NTsgLyogUFJPREwuICovDQorCSpweFRvcE9mU3RhY2stLSA9ICggU3RhY2tUeXBlX3QgKSAweDY2OyAvKiBGU1IwSC4gKi8NCisJKnB4VG9wT2ZTdGFjay0tID0gKCBTdGFja1R5cGVfdCApIDB4Nzc7IC8qIEZTUjBMLiAqLw0KKwkqcHhUb3BPZlN0YWNrLS0gPSAoIFN0YWNrVHlwZV90ICkgMHg4ODsgLyogRlNSMUguICovDQorCSpweFRvcE9mU3RhY2stLSA9ICggU3RhY2tUeXBlX3QgKSAweDk5OyAvKiBGU1IxTC4gKi8NCisJKnB4VG9wT2ZTdGFjay0tID0gKCBTdGFja1R5cGVfdCApIDB4QUE7IC8qIFRBQkxBVC4gKi8NCisjaWYgX1JPTVNJWkUgPiAweDgwMDANCisJKnB4VG9wT2ZTdGFjay0tID0gKCBTdGFja1R5cGVfdCApIDB4MDA7IC8qIFRCTFBUUlUuICovDQorI2VuZGlmDQorCSpweFRvcE9mU3RhY2stLSA9ICggU3RhY2tUeXBlX3QgKSAweENDOyAvKiBUQkxQVFJILiAqLw0KKwkqcHhUb3BPZlN0YWNrLS0gPSAoIFN0YWNrVHlwZV90ICkgMHhERDsgLyogVEJMUFRSTC4gKi8NCisjaWYgX1JPTVNJWkUgPiAweDgwMDANCisJKnB4VG9wT2ZTdGFjay0tID0gKCBTdGFja1R5cGVfdCApIDB4RUU7IC8qIFBDTEFUVS4gKi8NCisjZW5kaWYNCisJKnB4VG9wT2ZTdGFjay0tID0gKCBTdGFja1R5cGVfdCApIDB4RkY7IC8qIFBDTEFUSC4gKi8NCiANCi0gICAgLyoNCi0gICAgICogTmV4dCBhcmUgYWxsIHRoZSByZWdpc3RlcnMgdGhhdCBmb3JtIHBhcnQgb2YgdGhlIHRhc2sgY29udGV4dC4NCi0gICAgICovDQotICAgICpweFRvcE9mU3RhY2stLSA9ICggU3RhY2tUeXBlX3QgKSAweDExOyAgICAgLyogU1RBVFVTLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrLS0gPSAoIFN0YWNrVHlwZV90ICkgMHgyMjsgICAgIC8qIFdSRUcuICovDQotICAgICpweFRvcE9mU3RhY2stLSA9ICggU3RhY2tUeXBlX3QgKSAweDMzOyAgICAgLyogQlNSLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrLS0gPSAoIFN0YWNrVHlwZV90ICkgMHg0NDsgICAgIC8qIFBST0RILiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrLS0gPSAoIFN0YWNrVHlwZV90ICkgMHg1NTsgICAgIC8qIFBST0RMLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrLS0gPSAoIFN0YWNrVHlwZV90ICkgMHg2NjsgICAgIC8qIEZTUjBILiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrLS0gPSAoIFN0YWNrVHlwZV90ICkgMHg3NzsgICAgIC8qIEZTUjBMLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrLS0gPSAoIFN0YWNrVHlwZV90ICkgMHg4ODsgICAgIC8qIEZTUjFILiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrLS0gPSAoIFN0YWNrVHlwZV90ICkgMHg5OTsgICAgIC8qIEZTUjFMLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrLS0gPSAoIFN0YWNrVHlwZV90ICkgMHhBQTsgICAgIC8qIFRBQkxBVC4gKi8NCi0gICAgI2lmIF9ST01TSVpFID4gMHg4MDAwDQotICAgICAgICAqcHhUb3BPZlN0YWNrLS0gPSAoIFN0YWNrVHlwZV90ICkgMHgwMDsgLyogVEJMUFRSVS4gKi8NCi0gICAgI2VuZGlmDQotICAgICpweFRvcE9mU3RhY2stLSA9ICggU3RhY2tUeXBlX3QgKSAweENDOyAgICAgLyogVEJMUFRSSC4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjay0tID0gKCBTdGFja1R5cGVfdCApIDB4REQ7ICAgICAvKiBUQkxQVFJMLiAqLw0KLSAgICAjaWYgX1JPTVNJWkUgPiAweDgwMDANCi0gICAgICAgICpweFRvcE9mU3RhY2stLSA9ICggU3RhY2tUeXBlX3QgKSAweEVFOyAvKiBQQ0xBVFUuICovDQotICAgICNlbmRpZg0KLSAgICAqcHhUb3BPZlN0YWNrLS0gPSAoIFN0YWNrVHlwZV90ICkgMHhGRjsgICAgIC8qIFBDTEFUSC4gKi8NCisJLyoNCisJICogTmV4dCB0aGUgY29tcGlsZXIncyBzY3JhdGNoc3BhY2UuDQorCSAqLw0KKwl3aGlsZSh1Y1NjcmF0Y2gtLSA+IDApDQorCXsNCisJCSpweFRvcE9mU3RhY2stLSA9ICggU3RhY2tUeXBlX3QgKSAwOw0KKwl9DQogDQotICAgIC8qDQotICAgICAqIE5leHQgdGhlIGNvbXBpbGVyJ3Mgc2NyYXRjaHNwYWNlLg0KLSAgICAgKi8NCi0gICAgd2hpbGUoIHVjU2NyYXRjaC0tID4gMCApDQotICAgIHsNCi0gICAgICAgICpweFRvcE9mU3RhY2stLSA9ICggU3RhY2tUeXBlX3QgKSAwOw0KLSAgICB9DQorCS8qDQorCSAqIFRoZSBvbmx5IGZ1bmN0aW9uIHJldHVybiBhZGRyZXNzIHNvIGZhciBpcyB0aGUgYWRkcmVzcyBvZiB0aGUgdGFzayBlbnRyeS4NCisJICogVGhlIG9yZGVyIGlzIFRPU1UvVE9TSC9UT1NMLiBGb3IgZGV2aWNlcyA+IDY0a0IsIFRPU1UgaXMgcHV0IG9uIHRoZQ0KKwkgKiBzdGFjaywgdG9vLiBUT1NVIGlzIGFsd2F5cyB3cml0dGVuIGFzIHplcm8gaGVyZSBiZWNhdXNlIHdpekMgZG9lcyBub3QgYWxsb3cNCisJICogZnVuY3Rpb25wb2ludGVycyB0byBwb2ludCBhYm92ZSA2NGtCIGluIFJPTS4NCisJICovDQorI2lmIF9ST01TSVpFID4gMHg4MDAwDQorCSpweFRvcE9mU3RhY2stLSA9ICggU3RhY2tUeXBlX3QgKSAwOw0KKyNlbmRpZg0KKwkqcHhUb3BPZlN0YWNrLS0gPSAoIFN0YWNrVHlwZV90ICkgKCAoICggdWludDE2X3QgKSBweENvZGUgPj4gOCApICYgMHgwMGZmICk7DQorCSpweFRvcE9mU3RhY2stLSA9ICggU3RhY2tUeXBlX3QgKSAoICggICB1aW50MTZfdCApIHB4Q29kZSAgICAgICAgJiAweDAwZmYgKTsNCiANCi0gICAgLyoNCi0gICAgICogVGhlIG9ubHkgZnVuY3Rpb24gcmV0dXJuIGFkZHJlc3Mgc28gZmFyIGlzIHRoZSBhZGRyZXNzIG9mIHRoZSB0YXNrIGVudHJ5Lg0KLSAgICAgKiBUaGUgb3JkZXIgaXMgVE9TVS9UT1NIL1RPU0wuIEZvciBkZXZpY2VzID4gNjRrQiwgVE9TVSBpcyBwdXQgb24gdGhlDQotICAgICAqIHN0YWNrLCB0b28uIFRPU1UgaXMgYWx3YXlzIHdyaXR0ZW4gYXMgemVybyBoZXJlIGJlY2F1c2Ugd2l6QyBkb2VzIG5vdCBhbGxvdw0KLSAgICAgKiBmdW5jdGlvbnBvaW50ZXJzIHRvIHBvaW50IGFib3ZlIDY0a0IgaW4gUk9NLg0KLSAgICAgKi8NCi0gICAgI2lmIF9ST01TSVpFID4gMHg4MDAwDQotICAgICAgICAqcHhUb3BPZlN0YWNrLS0gPSAoIFN0YWNrVHlwZV90ICkgMDsNCi0gICAgI2VuZGlmDQotICAgICpweFRvcE9mU3RhY2stLSA9ICggU3RhY2tUeXBlX3QgKSAoICggKCB1aW50MTZfdCApIHB4Q29kZSA+PiA4ICkgJiAweDAwZmYgKTsNCi0gICAgKnB4VG9wT2ZTdGFjay0tID0gKCBTdGFja1R5cGVfdCApICggKCB1aW50MTZfdCApIHB4Q29kZSAmIDB4MDBmZiApOw0KKwkvKg0KKwkgKiBTdG9yZSB0aGUgbnVtYmVyIG9mIHJldHVybiBhZGRyZXNzZXMgb24gdGhlIGhhcmR3YXJlIHN0YWNrLg0KKwkgKiBTbyBmYXIgb25seSB0aGUgYWRkcmVzcyBvZiB0aGUgdGFzayBlbnRyeSBwb2ludC4NCisJICovDQorCSpweFRvcE9mU3RhY2stLSA9ICggU3RhY2tUeXBlX3QgKSAxOw0KIA0KLSAgICAvKg0KLSAgICAgKiBTdG9yZSB0aGUgbnVtYmVyIG9mIHJldHVybiBhZGRyZXNzZXMgb24gdGhlIGhhcmR3YXJlIHN0YWNrLg0KLSAgICAgKiBTbyBmYXIgb25seSB0aGUgYWRkcmVzcyBvZiB0aGUgdGFzayBlbnRyeSBwb2ludC4NCi0gICAgICovDQotICAgICpweFRvcE9mU3RhY2stLSA9ICggU3RhY2tUeXBlX3QgKSAxOw0KKwkvKg0KKwkgKiBUaGUgY29kZSBnZW5lcmF0ZWQgYnkgd2l6QyBkb2VzIG5vdCBtYWludGFpbiBzZXBhcmF0ZQ0KKwkgKiBzdGFjayBhbmQgZnJhbWUgcG9pbnRlcnMuIFRoZXJlZm9yZSB0aGUgcG9ydEVOVEVSX0NSSVRJQ0FMIG1hY3JvIGNhbm5vdA0KKwkgKiB1c2UgdGhlIHN0YWNrIGFzIHBlciBvdGhlciBwb3J0cy4gIEluc3RlYWQgYSB2YXJpYWJsZSBpcyB1c2VkIHRvIGtlZXANCisJICogdHJhY2sgb2YgdGhlIGNyaXRpY2FsIHNlY3Rpb24gbmVzdGluZy4gIFRoaXMgdmFyaWFibGUgaGFzIHRvIGJlIHN0b3JlZA0KKwkgKiBhcyBwYXJ0IG9mIHRoZSB0YXNrIGNvbnRleHQgYW5kIGlzIGluaXRpYWxseSBzZXQgdG8gemVyby4NCisJICovDQorCSpweFRvcE9mU3RhY2stLSA9ICggU3RhY2tUeXBlX3QgKSBwb3J0Tk9fQ1JJVElDQUxfU0VDVElPTl9ORVNUSU5HOw0KIA0KLSAgICAvKg0KLSAgICAgKiBUaGUgY29kZSBnZW5lcmF0ZWQgYnkgd2l6QyBkb2VzIG5vdCBtYWludGFpbiBzZXBhcmF0ZQ0KLSAgICAgKiBzdGFjayBhbmQgZnJhbWUgcG9pbnRlcnMuIFRoZXJlZm9yZSB0aGUgcG9ydEVOVEVSX0NSSVRJQ0FMIG1hY3JvIGNhbm5vdA0KLSAgICAgKiB1c2UgdGhlIHN0YWNrIGFzIHBlciBvdGhlciBwb3J0cy4gIEluc3RlYWQgYSB2YXJpYWJsZSBpcyB1c2VkIHRvIGtlZXANCi0gICAgICogdHJhY2sgb2YgdGhlIGNyaXRpY2FsIHNlY3Rpb24gbmVzdGluZy4gIFRoaXMgdmFyaWFibGUgaGFzIHRvIGJlIHN0b3JlZA0KLSAgICAgKiBhcyBwYXJ0IG9mIHRoZSB0YXNrIGNvbnRleHQgYW5kIGlzIGluaXRpYWxseSBzZXQgdG8gemVyby4NCi0gICAgICovDQotICAgICpweFRvcE9mU3RhY2stLSA9ICggU3RhY2tUeXBlX3QgKSBwb3J0Tk9fQ1JJVElDQUxfU0VDVElPTl9ORVNUSU5HOw0KLQ0KLSAgICByZXR1cm4gcHhUb3BPZlN0YWNrOw0KKwlyZXR1cm4gcHhUb3BPZlN0YWNrOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB1aW50MTZfdCB1c1BvcnRDQUxDVUxBVEVfTUlOSU1BTF9TVEFDS19TSVpFKCB2b2lkICkNCiB7DQotICAgIC8qDQotICAgICAqIEZldGNoIHRoZSBzaXplIG9mIGNvbXBpbGVyJ3Mgc2NyYXRjaHNwYWNlLg0KLSAgICAgKi8NCi0gICAgX1ByYWdtYSggImFzbSIgKQ0KLSAgICBtb3ZsdyBPVkVSSEVBRFBBR0UwIC0gTE9DT1BUU0laRSArIE1BWExPQ09QVFNJWkUNCi0gICAgbW92bGIgdXNDYWxjTWluU3RhY2tTaXplID4+IDgNCi0gICAgbW92d2YgdXNDYWxjTWluU3RhY2tTaXplLCBCQU5LRUQgX1ByYWdtYSggImFzbWVuZCIgKQ0KKwkvKg0KKwkgKiBGZXRjaCB0aGUgc2l6ZSBvZiBjb21waWxlcidzIHNjcmF0Y2hzcGFjZS4NCisJICovDQorCV9QcmFnbWEoImFzbSIpDQorCQltb3ZsdwlPVkVSSEVBRFBBR0UwLUxPQ09QVFNJWkUrTUFYTE9DT1BUU0laRQ0KKwkJbW92bGIJdXNDYWxjTWluU3RhY2tTaXplPj44DQorCQltb3Z3Zgl1c0NhbGNNaW5TdGFja1NpemUsQkFOS0VEDQorCV9QcmFnbWEoImFzbWVuZCIpDQogDQotICAgIC8qDQotICAgICAqIEFkZCBtaW5pbXVtIG5lZWRlZCBzdGFja3NwYWNlDQotICAgICAqLw0KLSAgICB1c0NhbGNNaW5TdGFja1NpemUgKz0gKCBwb3J0U1RBQ0tfRlNSX0JZVEVTICkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICsgKCBwb3J0U1RBQ0tfTUlOSU1BTF9DQUxMUkVUVVJOX0RFUFRIICogcG9ydFNUQUNLX0NBTExSRVRVUk5fRU5UUllfU0laRSApDQotICAgICAgICAgICAgICAgICAgICAgICAgICArICggcG9ydFNUQUNLX09USEVSX0JZVEVTICk7DQorCS8qDQorCSAqIEFkZCBtaW5pbXVtIG5lZWRlZCBzdGFja3NwYWNlDQorCSAqLw0KKwl1c0NhbGNNaW5TdGFja1NpemUJKz0JKCBwb3J0U1RBQ0tfRlNSX0JZVEVTICkNCisJCSsJKCBwb3J0U1RBQ0tfTUlOSU1BTF9DQUxMUkVUVVJOX0RFUFRIICogcG9ydFNUQUNLX0NBTExSRVRVUk5fRU5UUllfU0laRSApDQorCQkrCSggcG9ydFNUQUNLX09USEVSX0JZVEVTICk7DQogDQotICAgIHJldHVybiggdXNDYWxjTWluU3RhY2tTaXplICk7DQorCXJldHVybih1c0NhbGNNaW5TdGFja1NpemUpOw0KIH0NCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBCYXNlVHlwZV90IHhQb3J0U3RhcnRTY2hlZHVsZXIoIHZvaWQgKQ0KIHsNCi0gICAgZXh0ZXJuIHZvaWQgcG9ydFNldHVwVGljayggdm9pZCApOw0KKwlleHRlcm4gdm9pZCBwb3J0U2V0dXBUaWNrKCB2b2lkICk7DQogDQotICAgIC8qDQotICAgICAqIFNldHVwIGEgdGltZXIgZm9yIHRoZSB0aWNrIElTUiBmb3IgdGhlIHByZWVtcHRpdmUgc2NoZWR1bGVyLg0KLSAgICAgKi8NCi0gICAgcG9ydFNldHVwVGljaygpOw0KKwkvKg0KKwkgKiBTZXR1cCBhIHRpbWVyIGZvciB0aGUgdGljayBJU1IgZm9yIHRoZSBwcmVlbXB0aXZlIHNjaGVkdWxlci4NCisJICovDQorCXBvcnRTZXR1cFRpY2soKTsNCiANCi0gICAgLyoNCi0gICAgICogUmVzdG9yZSB0aGUgY29udGV4dCBvZiB0aGUgZmlyc3QgdGFzayB0byBydW4uDQotICAgICAqLw0KLSAgICBwb3J0UkVTVE9SRV9DT05URVhUKCk7DQorCS8qDQorCSAqIFJlc3RvcmUgdGhlIGNvbnRleHQgb2YgdGhlIGZpcnN0IHRhc2sgdG8gcnVuLg0KKwkgKi8NCisJcG9ydFJFU1RPUkVfQ09OVEVYVCgpOw0KIA0KLSAgICAvKg0KLSAgICAgKiBUaGlzIHBvaW50IHNob3VsZCBuZXZlciBiZSByZWFjaGVkIGR1cmluZyBleGVjdXRpb24uDQotICAgICAqLw0KLSAgICByZXR1cm4gcGRUUlVFOw0KKwkvKg0KKwkgKiBUaGlzIHBvaW50IHNob3VsZCBuZXZlciBiZSByZWFjaGVkIGR1cmluZyBleGVjdXRpb24uDQorCSAqLw0KKwlyZXR1cm4gcGRUUlVFOw0KIH0NCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0RW5kU2NoZWR1bGVyKCB2b2lkICkNCiB7DQotICAgIC8qDQotICAgICAqIEl0IGlzIHVubGlrZWx5IHRoYXQgdGhlIHNjaGVkdWxlciBmb3IgdGhlIFBJQyBwb3J0IHdpbGwgZ2V0IHN0b3BwZWQNCi0gICAgICogb25jZSBydW5uaW5nLiBXaGVuIGNhbGxlZCBhIHJlc2V0IGlzIGRvbmUgd2hpY2ggaXMgcHJvYmFibHkgdGhlDQotICAgICAqIG1vc3QgdmFsaWQgYWN0aW9uLg0KLSAgICAgKi8NCi0gICAgX1ByYWdtYSggYXNtbGluZSByZXNldCApOw0KKwkvKg0KKwkgKiBJdCBpcyB1bmxpa2VseSB0aGF0IHRoZSBzY2hlZHVsZXIgZm9yIHRoZSBQSUMgcG9ydCB3aWxsIGdldCBzdG9wcGVkDQorCSAqIG9uY2UgcnVubmluZy4gV2hlbiBjYWxsZWQgYSByZXNldCBpcyBkb25lIHdoaWNoIGlzIHByb2JhYmx5IHRoZQ0KKwkgKiBtb3N0IHZhbGlkIGFjdGlvbi4NCisJICovDQorCV9QcmFnbWEoYXNtbGluZSByZXNldCk7DQogfQ0KIA0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KQEAgLTI2Niw1NCArMjY0LDU0IEBACiAgKi8NCiB2b2lkIHZQb3J0WWllbGQoIHZvaWQgKQ0KIHsNCi0gICAgLyoNCi0gICAgICogU2F2ZSB0aGUgY29udGV4dCBvZiB0aGUgY3VycmVudCB0YXNrLg0KLSAgICAgKi8NCi0gICAgcG9ydFNBVkVfQ09OVEVYVCggcG9ydElOVEVSUlVQVFNfVU5DSEFOR0VEICk7DQorCS8qDQorCSAqIFNhdmUgdGhlIGNvbnRleHQgb2YgdGhlIGN1cnJlbnQgdGFzay4NCisJICovDQorCXBvcnRTQVZFX0NPTlRFWFQoIHBvcnRJTlRFUlJVUFRTX1VOQ0hBTkdFRCApOw0KIA0KLSAgICAvKg0KLSAgICAgKiBTd2l0Y2ggdG8gdGhlIGhpZ2hlc3QgcHJpb3JpdHkgdGFzayB0aGF0IGlzIHJlYWR5IHRvIHJ1bi4NCi0gICAgICovDQotICAgIHZUYXNrU3dpdGNoQ29udGV4dCgpOw0KKwkvKg0KKwkgKiBTd2l0Y2ggdG8gdGhlIGhpZ2hlc3QgcHJpb3JpdHkgdGFzayB0aGF0IGlzIHJlYWR5IHRvIHJ1bi4NCisJICovDQorCXZUYXNrU3dpdGNoQ29udGV4dCgpOw0KIA0KLSAgICAvKg0KLSAgICAgKiBTdGFydCBleGVjdXRpbmcgdGhlIHRhc2sgd2UgaGF2ZSBqdXN0IHN3aXRjaGVkIHRvLg0KLSAgICAgKi8NCi0gICAgcG9ydFJFU1RPUkVfQ09OVEVYVCgpOw0KKwkvKg0KKwkgKiBTdGFydCBleGVjdXRpbmcgdGhlIHRhc2sgd2UgaGF2ZSBqdXN0IHN3aXRjaGVkIHRvLg0KKwkgKi8NCisJcG9ydFJFU1RPUkVfQ09OVEVYVCgpOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCi0jaWYgKCBjb25maWdTVVBQT1JUX0RZTkFNSUNfQUxMT0NBVElPTiA9PSAxICkNCisjaWYoIGNvbmZpZ1NVUFBPUlRfRFlOQU1JQ19BTExPQ0FUSU9OID09IDEgKQ0KIA0KLSAgICB2b2lkICogcHZQb3J0TWFsbG9jKCB1aW50MTZfdCB1c1dhbnRlZFNpemUgKQ0KLSAgICB7DQotICAgICAgICB2b2lkICogcHZSZXR1cm47DQorCXZvaWQgKnB2UG9ydE1hbGxvYyggdWludDE2X3QgdXNXYW50ZWRTaXplICkNCisJew0KKwl2b2lkICpwdlJldHVybjsNCiANCi0gICAgICAgIHZUYXNrU3VzcGVuZEFsbCgpOw0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHB2UmV0dXJuID0gbWFsbG9jKCAoIG1hbGxvY190ICkgdXNXYW50ZWRTaXplICk7DQotICAgICAgICB9DQotICAgICAgICB4VGFza1Jlc3VtZUFsbCgpOw0KKwkJdlRhc2tTdXNwZW5kQWxsKCk7DQorCQl7DQorCQkJcHZSZXR1cm4gPSBtYWxsb2MoICggbWFsbG9jX3QgKSB1c1dhbnRlZFNpemUgKTsNCisJCX0NCisJCXhUYXNrUmVzdW1lQWxsKCk7DQogDQotICAgICAgICByZXR1cm4gcHZSZXR1cm47DQotICAgIH0NCisJCXJldHVybiBwdlJldHVybjsNCisJfQ0KIA0KICNlbmRpZiAvKiBjb25maWdTVVBQT1JUX1NUQVRJQ19BTExPQ0FUSU9OICovDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQotI2lmICggY29uZmlnU1VQUE9SVF9EWU5BTUlDX0FMTE9DQVRJT04gPT0gMSApDQorI2lmKCBjb25maWdTVVBQT1JUX0RZTkFNSUNfQUxMT0NBVElPTiA9PSAxICkNCiANCi0gICAgdm9pZCB2UG9ydEZyZWUoIHZvaWQgKiBwdiApDQotICAgIHsNCi0gICAgICAgIGlmKCBwdiApDQotICAgICAgICB7DQotICAgICAgICAgICAgdlRhc2tTdXNwZW5kQWxsKCk7DQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBmcmVlKCBwdiApOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB4VGFza1Jlc3VtZUFsbCgpOw0KLSAgICAgICAgfQ0KLSAgICB9DQorCXZvaWQgdlBvcnRGcmVlKCB2b2lkICpwdiApDQorCXsNCisJCWlmKCBwdiApDQorCQl7DQorCQkJdlRhc2tTdXNwZW5kQWxsKCk7DQorCQkJew0KKwkJCQlmcmVlKCBwdiApOw0KKwkJCX0NCisJCQl4VGFza1Jlc3VtZUFsbCgpOw0KKwkJfQ0KKwl9DQogDQotI2VuZGlmIC8qIGNvbmZpZ1NVUFBPUlRfRFlOQU1JQ19BTExPQ0FUSU9OICovDQorI2VuZGlmIC8qIGNvbmZpZ1NVUFBPUlRfRFlOQU1JQ19BTExPQ0FUSU9OICovClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvV2l6Qy9QSUMxOC9wb3J0bWFjcm8uaCBiL3BvcnRhYmxlL1dpekMvUElDMTgvcG9ydG1hY3JvLmgKaW5kZXggZjU2ODU1Yi4uODcxZmNkMiAxMDA2NDQKLS0tIGEvcG9ydGFibGUvV2l6Qy9QSUMxOC9wb3J0bWFjcm8uaAorKysgYi9wb3J0YWJsZS9XaXpDL1BJQzE4L3BvcnRtYWNyby5oCkBAIC0yNiw0NiArMjYsNDYgQEAKICAqLw0KIA0KIC8qDQotICogQ2hhbmdlcyBmcm9tIFYzLjAuMA0KLSAqDQotICogQ2hhbmdlcyBmcm9tIFYzLjAuMQ0KLSAqLw0KK0NoYW5nZXMgZnJvbSBWMy4wLjANCisNCitDaGFuZ2VzIGZyb20gVjMuMC4xDQorKi8NCiAjaWZuZGVmIFBPUlRNQUNST19IDQotICAgICNkZWZpbmUgUE9SVE1BQ1JPX0gNCisjZGVmaW5lIFBPUlRNQUNST19IDQogDQotICAgICNpZiAhZGVmaW5lZCggX1NFUklFUyApIHx8IF9TRVJJRVMgIT0gMTgNCi0gICAgICAgICNlcnJvciAiV2l6QyBzdXBwb3J0cyBGcmVlUlRPUyBvbiB0aGUgTWljcm9jaGlwIFBJQzE4LXNlcmllcyBvbmx5Ig0KLSAgICAjZW5kaWYNCisjaWYgIWRlZmluZWQoX1NFUklFUykgfHwgX1NFUklFUyAhPSAxOA0KKwkjZXJyb3IgIldpekMgc3VwcG9ydHMgRnJlZVJUT1Mgb24gdGhlIE1pY3JvY2hpcCBQSUMxOC1zZXJpZXMgb25seSINCisjZW5kaWYNCiANCi0gICAgI2lmICFkZWZpbmVkKCBRVUlDS0NBTEwgKSB8fCBRVUlDS0NBTEwgIT0gMQ0KLSAgICAgICAgI2Vycm9yICJRdWlja0NhbGwgbXVzdCBiZSBlbmFibGVkIChzZWUgUHJvamVjdE9wdGlvbnMvT3B0aW1pc2F0aW9ucykiDQotICAgICNlbmRpZg0KKyNpZiAhZGVmaW5lZChRVUlDS0NBTEwpIHx8IFFVSUNLQ0FMTCAhPSAxDQorCSNlcnJvciAiUXVpY2tDYWxsIG11c3QgYmUgZW5hYmxlZCAoc2VlIFByb2plY3RPcHRpb25zL09wdGltaXNhdGlvbnMpIg0KKyNlbmRpZg0KIA0KLSAgICAjaW5jbHVkZSA8c3RkZGVmLmg+DQotICAgICNpbmNsdWRlIDxwaWMuaD4NCisjaW5jbHVkZSA8c3RkZGVmLmg+DQorI2luY2x1ZGUgPHBpYy5oPg0KIA0KLSAgICAjZGVmaW5lIHBvcnRDSEFSICAgICAgICAgIGNoYXINCi0gICAgI2RlZmluZSBwb3J0RkxPQVQgICAgICAgICBmbG9hdA0KLSAgICAjZGVmaW5lIHBvcnRET1VCTEUgICAgICAgIHBvcnRGTE9BVA0KLSAgICAjZGVmaW5lIHBvcnRMT05HICAgICAgICAgIGxvbmcNCi0gICAgI2RlZmluZSBwb3J0U0hPUlQgICAgICAgICBzaG9ydA0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19UWVBFICAgIHVpbnQ4X3QNCi0gICAgI2RlZmluZSBwb3J0QkFTRV9UWVBFICAgICBjaGFyDQorI2RlZmluZSBwb3J0Q0hBUgkJY2hhcg0KKyNkZWZpbmUgcG9ydEZMT0FUCQlmbG9hdA0KKyNkZWZpbmUgcG9ydERPVUJMRQkJcG9ydEZMT0FUDQorI2RlZmluZSBwb3J0TE9ORwkJbG9uZw0KKyNkZWZpbmUgcG9ydFNIT1JUCQlzaG9ydA0KKyNkZWZpbmUgcG9ydFNUQUNLX1RZUEUJdWludDhfdA0KKyNkZWZpbmUgcG9ydEJBU0VfVFlQRQljaGFyDQogDQotICAgIHR5cGVkZWYgcG9ydFNUQUNLX1RZUEUgICBTdGFja1R5cGVfdDsNCi0gICAgdHlwZWRlZiBzaWduZWQgY2hhciAgICAgIEJhc2VUeXBlX3Q7DQotICAgIHR5cGVkZWYgdW5zaWduZWQgY2hhciAgICBVQmFzZVR5cGVfdDsNCit0eXBlZGVmIHBvcnRTVEFDS19UWVBFIFN0YWNrVHlwZV90Ow0KK3R5cGVkZWYgc2lnbmVkIGNoYXIgQmFzZVR5cGVfdDsNCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgVUJhc2VUeXBlX3Q7DQogDQogDQotICAgICNpZiAoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQotICAgICAgICB0eXBlZGVmIHVpbnQxNl90ICAgICBUaWNrVHlwZV90Ow0KLSAgICAgICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICAoIFRpY2tUeXBlX3QgKSAoIDB4RkZGRiApDQotICAgICNlbHNlDQotICAgICAgICB0eXBlZGVmIHVpbnQzMl90ICAgICBUaWNrVHlwZV90Ow0KLSAgICAgICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICAoIFRpY2tUeXBlX3QgKSAoIDB4RkZGRkZGRkYgKQ0KLSAgICAjZW5kaWYNCisjaWYoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQorCXR5cGVkZWYgdWludDE2X3QgVGlja1R5cGVfdDsNCisJI2RlZmluZSBwb3J0TUFYX0RFTEFZICggVGlja1R5cGVfdCApCSggMHhGRkZGICkNCisjZWxzZQ0KKwl0eXBlZGVmIHVpbnQzMl90IFRpY2tUeXBlX3Q7DQorCSNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIFRpY2tUeXBlX3QgKQkoIDB4RkZGRkZGRkYgKQ0KKyNlbmRpZg0KIA0KLSAgICAjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVCAgICAxDQorI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQJCQkxDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQpAQCAtNzMsNzggKzczLDc4IEBACiAgKiBDb25zdGFudCB1c2VkIGZvciBjb250ZXh0IHN3aXRjaCBtYWNybyB3aGVuIHdlIHJlcXVpcmUgdGhlIGludGVycnVwdA0KICAqIGVuYWJsZSBzdGF0ZSB0byBiZSBmb3JjZWQgd2hlbiB0aGUgaW50ZXJydXB0ZWQgdGFzayBpcyBzd2l0Y2hlZCBiYWNrIGluLg0KICAqLw0KLSAgICAjZGVmaW5lIHBvcnRJTlRFUlJVUFRTX0ZPUkNFRCAgICAgICAgICAgKCAweDAxICkNCisjZGVmaW5lIHBvcnRJTlRFUlJVUFRTX0ZPUkNFRAkJCQkoMHgwMSkNCiANCiAvKg0KICAqIENvbnN0YW50IHVzZWQgZm9yIGNvbnRleHQgc3dpdGNoIG1hY3JvIHdoZW4gd2UgcmVxdWlyZSB0aGUgaW50ZXJydXB0DQogICogZW5hYmxlIHN0YXRlIHRvIGJlIHVuY2hhbmdlZCB3aGVuIHRoZSBpbnRlcnJ1cHRlZCB0YXNrIGlzIHN3aXRjaGVkIGJhY2sgaW4uDQogICovDQotICAgICNkZWZpbmUgcG9ydElOVEVSUlVQVFNfVU5DSEFOR0VEICAgICAgICAoIDB4MDAgKQ0KKyNkZWZpbmUgcG9ydElOVEVSUlVQVFNfVU5DSEFOR0VECQkJKDB4MDApDQogDQogLyogSW5pdGlhbCBpbnRlcnJ1cHQgZW5hYmxlIHN0YXRlIGZvciBuZXdseSBjcmVhdGVkIHRhc2tzLiAgVGhpcyB2YWx1ZSBpcw0KICAqIHVzZWQgd2hlbiBhIHRhc2sgc3dpdGNoZXMgaW4gZm9yIHRoZSBmaXJzdCB0aW1lLg0KICAqLw0KLSAgICAjZGVmaW5lIHBvcnRJTlRFUlJVUFRTX0lOSVRJQUxfU1RBVEUgICAgKCBwb3J0SU5URVJSVVBUU19GT1JDRUQgKQ0KKyNkZWZpbmUgcG9ydElOVEVSUlVQVFNfSU5JVElBTF9TVEFURQkJKHBvcnRJTlRFUlJVUFRTX0ZPUkNFRCkNCiANCiAvKg0KICAqIE1hY3JvcyB0byBtb2RpZnkgdGhlIGdsb2JhbCBpbnRlcnJ1cHQgZW5hYmxlIGJpdCBpbiBJTlRDT04uDQogICovDQotICAgICNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpIFwNCi0gICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBiR0lFID0gMDsgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgfSB3aGlsZSggYkdJRSApIC8qIE1pY3JvQ2hpcCByZWNvbW1lbmRzIHRoaXMgY2hlY2shICovDQorI2RlZmluZSBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCkJXA0KKwlkbwkJCQkJCQkJXA0KKwl7CQkJCQkJCQlcDQorCQliR0lFPTA7CQkJCQkJXA0KKwl9IHdoaWxlKGJHSUUpCS8vIE1pY3JvQ2hpcCByZWNvbW1lbmRzIHRoaXMgY2hlY2shDQogDQotICAgICNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkgXA0KLSAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBiR0lFID0gMTsgICAgICAgICAgICAgICAgICAgXA0KLSAgICB9IHdoaWxlKCAwICkNCisjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpCQlcDQorCWRvCQkJCQkJCQlcDQorCXsJCQkJCQkJCVwNCisJCWJHSUU9MTsJCQkJCQlcDQorCX0gd2hpbGUoMCkNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKg0KICAqIENyaXRpY2FsIHNlY3Rpb24gbWFjcm9zLg0KICAqLw0KLSAgICBleHRlcm4gdWludDhfdCB1Y0NyaXRpY2FsTmVzdGluZzsNCitleHRlcm4gdWludDhfdCB1Y0NyaXRpY2FsTmVzdGluZzsNCiANCi0gICAgI2RlZmluZSBwb3J0Tk9fQ1JJVElDQUxfU0VDVElPTl9ORVNUSU5HICAgICggKCB1aW50OF90ICkgMCApDQorI2RlZmluZSBwb3J0Tk9fQ1JJVElDQUxfU0VDVElPTl9ORVNUSU5HCQkoICggdWludDhfdCApIDAgKQ0KIA0KLSAgICAjZGVmaW5lIHBvcnRFTlRFUl9DUklUSUNBTCgpICBcDQotICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOyBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIFwNCi0gICAgICAgICAqIE5vdyBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB1Y0NyaXRpY2FsTmVzdGluZyBcDQotICAgICAgICAgKiBjYW4gYmUgYWNjZXNzZWQgZGlyZWN0bHkuIEluY3JlbWVudCBcDQotICAgICAgICAgKiB1Y0NyaXRpY2FsTmVzdGluZyB0byBrZWVwIGEgY291bnQgb2YgaG93IFwNCi0gICAgICAgICAqIG1hbnkgdGltZXMgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgaGFzIGJlZW4gY2FsbGVkLiBcDQotICAgICAgICAgKi8gICAgICAgICAgICAgICAgICBcDQotICAgICAgICB1Y0NyaXRpY2FsTmVzdGluZysrOyBcDQotICAgIH0gd2hpbGUoIDAgKQ0KKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkJCQkJCQkJCQkJXA0KKwlkbwkJCQkJCQkJCQkJCQkJCQlcDQorCXsJCQkJCQkJCQkJCQkJCQkJXA0KKwkJcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOwkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCVwNCisJCS8qCQkJCQkJCQkJCQkJCQkJXA0KKwkJICogTm93IGludGVycnVwdHMgYXJlIGRpc2FibGVkIHVjQ3JpdGljYWxOZXN0aW5nCQkJXA0KKwkJICogY2FuIGJlIGFjY2Vzc2VkIGRpcmVjdGx5LiBJbmNyZW1lbnQJCQkJCQlcDQorCQkgKiB1Y0NyaXRpY2FsTmVzdGluZyB0byBrZWVwIGEgY291bnQgb2YgaG93CQkJCQlcDQorCQkgKiBtYW55IHRpbWVzIHBvcnRFTlRFUl9DUklUSUNBTCgpIGhhcyBiZWVuIGNhbGxlZC4gCQlcDQorCQkgKi8JCQkJCQkJCQkJCQkJCQlcDQorCQl1Y0NyaXRpY2FsTmVzdGluZysrOwkJCQkJCQkJCQlcDQorCX0gd2hpbGUoMCkNCiANCi0gICAgI2RlZmluZSBwb3J0RVhJVF9DUklUSUNBTCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGlmKCB1Y0NyaXRpY2FsTmVzdGluZyA+IHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkcgKSBcDQotICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIC8qIFwNCi0gICAgICAgICAgICAgKiBEZWNyZW1lbnQgdGhlIG5lc3RpbmcgY291bnQgYXMgd2UgYXJlIGxlYXZpbmcgYSBcDQotICAgICAgICAgICAgICogY3JpdGljYWwgc2VjdGlvbi4gXA0KLSAgICAgICAgICAgICAqLyAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICB1Y0NyaXRpY2FsTmVzdGluZy0tOyBcDQotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIC8qIFwNCi0gICAgICAgICAqIElmIHRoZSBuZXN0aW5nIGxldmVsIGhhcyByZWFjaGVkIHplcm8gdGhlbiBcDQotICAgICAgICAgKiBpbnRlcnJ1cHRzIHNob3VsZCBiZSByZS1lbmFibGVkLiBcDQotICAgICAgICAgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGlmKCB1Y0NyaXRpY2FsTmVzdGluZyA9PSBwb3J0Tk9fQ1JJVElDQUxfU0VDVElPTl9ORVNUSU5HICkgXA0KLSAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB9IHdoaWxlKCAwICkNCisjZGVmaW5lIHBvcnRFWElUX0NSSVRJQ0FMKCkJCQkJCQkJCQkJCVwNCisJZG8JCQkJCQkJCQkJCQkJCQkJXA0KKwl7CQkJCQkJCQkJCQkJCQkJCVwNCisJCWlmKHVjQ3JpdGljYWxOZXN0aW5nID4gcG9ydE5PX0NSSVRJQ0FMX1NFQ1RJT05fTkVTVElORykJCVwNCisJCXsJCQkJCQkJCQkJCQkJCQlcDQorCQkJLyoJCQkJCQkJCQkJCQkJCVwNCisJCQkgKiBEZWNyZW1lbnQgdGhlIG5lc3RpbmcgY291bnQgYXMgd2UgYXJlIGxlYXZpbmcgYQkJXA0KKwkJCSAqIGNyaXRpY2FsIHNlY3Rpb24uCQkJCQkJCQkJXA0KKwkJCSAqLwkJCQkJCQkJCQkJCQkJXA0KKwkJCXVjQ3JpdGljYWxOZXN0aW5nLS07CQkJCQkJCQkJXA0KKwkJfQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJCQkJCQkJCVwNCisJCS8qCQkJCQkJCQkJCQkJCQkJXA0KKwkJICogSWYgdGhlIG5lc3RpbmcgbGV2ZWwgaGFzIHJlYWNoZWQgemVybyB0aGVuCQkJCVwNCisJCSAqIGludGVycnVwdHMgc2hvdWxkIGJlIHJlLWVuYWJsZWQuCQkJCQkJCVwNCisJCSAqLwkJCQkJCQkJCQkJCQkJCVwNCisJCWlmKCB1Y0NyaXRpY2FsTmVzdGluZyA9PSBwb3J0Tk9fQ1JJVElDQUxfU0VDVElPTl9ORVNUSU5HICkJXA0KKwkJewkJCQkJCQkJCQkJCQkJCVwNCisJCQlwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKTsJCQkJCQkJCVwNCisJCX0JCQkJCQkJCQkJCQkJCQlcDQorCX0gd2hpbGUoMCkNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCkBAIC0xNTMsMTggKzE1MywxOCBAQAogICogcG9ydE1JTklNQUxfU1RBQ0tfU0laRS4gU29tZSBpbnB1dCB0byB0aGlzIGNhbGN1bGF0aW9uIGlzDQogICogY29tcGlsZXRpbWUgZGV0ZXJtaW5lZCwgb3RoZXIgaW5wdXQgaXMgcG9ydC1kZWZpbmVkIChzZWUgcG9ydC5jKQ0KICAqLw0KLSAgICBleHRlcm4gdWludDE2X3QgdXNQb3J0Q0FMQ1VMQVRFX01JTklNQUxfU1RBQ0tfU0laRSggdm9pZCApOw0KLSAgICBleHRlcm4gdWludDE2X3QgdXNDYWxjTWluU3RhY2tTaXplOw0KK2V4dGVybiB1aW50MTZfdCB1c1BvcnRDQUxDVUxBVEVfTUlOSU1BTF9TVEFDS19TSVpFKCB2b2lkICk7DQorZXh0ZXJuIHVpbnQxNl90IHVzQ2FsY01pblN0YWNrU2l6ZTsNCiANCi0gICAgI2RlZmluZSBwb3J0TUlOSU1BTF9TVEFDS19TSVpFICAgICAgICAgICBcDQotICAgICggKCB1c0NhbGNNaW5TdGFja1NpemUgPT0gMCApICAgICAgICAgICAgXA0KLSAgICAgID8gdXNQb3J0Q0FMQ1VMQVRFX01JTklNQUxfU1RBQ0tfU0laRSgpIFwNCi0gICAgICA6IHVzQ2FsY01pblN0YWNrU2l6ZSApDQorI2RlZmluZSBwb3J0TUlOSU1BTF9TVEFDS19TSVpFCQkJCQlcDQorCSgodXNDYWxjTWluU3RhY2tTaXplID09IDApCQkJCQlcDQorCQk/IHVzUG9ydENBTENVTEFURV9NSU5JTUFMX1NUQUNLX1NJWkUoKQlcDQorCQk6IHVzQ2FsY01pblN0YWNrU2l6ZSApDQogDQogLyoNCiAgKiBXaXpDIHVzZXMgYSBkb3duZ3Jvd2luZyBzdGFjaw0KICAqLw0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEggICAgKCAtMSApDQorI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RICQkJKCAtMSApDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQpAQCAtMjAwLDEyMCArMjAwLDEyMCBAQAogICogYXNzZW1ibGVyIGRlZmluaXRpb25zLg0KICAqLw0KIA0KLSAgICAjZGVmaW5lIHBvcnRTQVZFX0NPTlRFWFQoIHVjSW50ZXJydXB0Rm9yY2VkICkgICAgICAgICAgICAgICAgIFwNCi0gICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBfUHJhZ21hKCAiYXNtIiApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIDsgUHVzaCB0aGUgcmVsZXZhbnQgU0ZSICdzIG9udG8gdGhlIHRhc2sncyBzdGFjayAgICAgICAgICBcDQotICAgICAgICA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgbW92ZmYgU1RBVFVTLCBQT1NUREVDMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIG1vdmZmIFdSRUcsIFBPU1RERUMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBtb3ZmZiBCU1IsIFBPU1RERUMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgbW92ZmYgUFJPREgsIFBPU1RERUMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIG1vdmZmIFBST0RMLCBQT1NUREVDMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBtb3ZmZiBGU1IwSCwgUE9TVERFQzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgbW92ZmYgRlNSMEwsIFBPU1RERUMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIG1vdmZmIEZTUjFILCBQT1NUREVDMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBtb3ZmZiBGU1IxTCwgUE9TVERFQzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgbW92ZmYgVEFCTEFULCBQT1NUREVDMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgIGlmIF9fUk9NU0laRSA+IDB4ODAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBtb3ZmZiBUQkxQVFJVLCBQT1NUREVDMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIG1vdmZmIFRCTFBUUkgsIFBPU1RERUMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBtb3ZmZiBUQkxQVFJMLCBQT1NUREVDMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgaWYgX19ST01TSVpFID4gMHg4MDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIG1vdmZmIFBDTEFUVSwgUE9TVERFQzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgbW92ZmYgUENMQVRILCBQT1NUREVDMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICA7IFN0b3JlIHRoZSBjb21waWxlciAtIHNjcmF0Y2ggLSBhcmVhIGFzIGRlc2NyaWJlZCBhYm92ZS4gXA0KLSAgICAgICAgICAgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIG1vdmx3IE9WRVJIRUFEUEFHRTAgLSBMT0NPUFRTSVpFICsgTUFYTE9DT1BUU0laRSAgICAgICAgICBcDQotICAgICAgICBjbHJmIEZTUjBMLCBBQ0NFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgY2xyZiBGU1IwSCwgQUNDRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi1fcnRvc19TMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBtb3ZmZiBQT1NUSU5DMCwgUE9TVERFQzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgZGVjZnN6IFdSRUcsIFcsIEFDQ0VTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIFNNQVJUSlVNUCBfcnRvc19TMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgOyBTYXZlIHRoZSBwaWMgY2FsbCAvIHJldHVybiAtc3RhY2sgYmVsb25naW5nIHRvIHRoZSAgICAgIFwNCi0gICAgICAgIDsgY3VycmVudCB0YXNrIGJ5IGNvcHlpbmcgaXQgdG8gdGhlIHRhc2sgJ3Mgc29mdHdhcmUtCVwNCisjZGVmaW5lCXBvcnRTQVZFX0NPTlRFWFQoIHVjSW50ZXJydXB0Rm9yY2VkICkJCQkJCQlcDQorCWRvCQkJCQkJCQkJCQkJCQkJCVwNCisJewkJCQkJCQkJCQkJCQkJCQlcDQorCQlwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7CQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJX1ByYWdtYSgiYXNtIikJCQkJCQkJCQkJCQlcDQorCQkJOwkJCQkJCQkJCQkJCQkJXA0KKwkJCTsgUHVzaCB0aGUgcmVsZXZhbnQgU0ZSJ3Mgb250byB0aGUgdGFzaydzIHN0YWNrCQkJXA0KKwkJCTsJCQkJCQkJCQkJCQkJCVwNCisJCQltb3ZmZiAgIFNUQVRVUyxQT1NUREVDMgkJCQkJCQkJCVwNCisJCQltb3ZmZglXUkVHLFBPU1RERUMyCQkJCQkJCQkJXA0KKwkJCW1vdmZmCUJTUixQT1NUREVDMgkJCQkJCQkJCVwNCisJCQltb3ZmZglQUk9ESCxQT1NUREVDMgkJCQkJCQkJCVwNCisJCQltb3ZmZglQUk9ETCxQT1NUREVDMgkJCQkJCQkJCVwNCisJCQltb3ZmZglGU1IwSCxQT1NUREVDMgkJCQkJCQkJCVwNCisJCQltb3ZmZglGU1IwTCxQT1NUREVDMgkJCQkJCQkJCVwNCisJCQltb3ZmZglGU1IxSCxQT1NUREVDMgkJCQkJCQkJCVwNCisJCQltb3ZmZglGU1IxTCxQT1NUREVDMgkJCQkJCQkJCVwNCisJCQltb3ZmZglUQUJMQVQsUE9TVERFQzIJCQkJCQkJCQlcDQorCQkJaWYgX19ST01TSVpFID4gMHg4MDAwCQkJCQkJCQkJXA0KKwkJCQltb3ZmZglUQkxQVFJVLFBPU1RERUMyCQkJCQkJCVwNCisJCQllbmRpZgkJCQkJCQkJCQkJCQlcDQorCQkJbW92ZmYJVEJMUFRSSCxQT1NUREVDMgkJCQkJCQkJXA0KKwkJCW1vdmZmCVRCTFBUUkwsUE9TVERFQzIJCQkJCQkJCVwNCisJCQlpZiBfX1JPTVNJWkUgPiAweDgwMDAJCQkJCQkJCQlcDQorCQkJCW1vdmZmCVBDTEFUVSxQT1NUREVDMgkJCQkJCQkJXA0KKwkJCWVuZGlmCQkJCQkJCQkJCQkJCVwNCisJCQltb3ZmZglQQ0xBVEgsUE9TVERFQzIJCQkJCQkJCQlcDQorCQkJOwkJCQkJCQkJCQkJCQkJXA0KKwkJCTsgU3RvcmUgdGhlIGNvbXBpbGVyLXNjcmF0Y2gtYXJlYSBhcyBkZXNjcmliZWQgYWJvdmUuCVwNCisJCQk7CQkJCQkJCQkJCQkJCQlcDQorCQkJbW92bHcJT1ZFUkhFQURQQUdFMC1MT0NPUFRTSVpFK01BWExPQ09QVFNJWkUJCQlcDQorCQkJY2xyZglGU1IwTCxBQ0NFU1MJCQkJCQkJCQlcDQorCQkJY2xyZglGU1IwSCxBQ0NFU1MJCQkJCQkJCQlcDQorCQlfcnRvc19TMToJCQkJCQkJCQkJCQkJXA0KKwkJCW1vdmZmCVBPU1RJTkMwLFBPU1RERUMyCQkJCQkJCQlcDQorCQkJZGVjZnN6CVdSRUcsVyxBQ0NFU1MJCQkJCQkJCQlcDQorCQkJU01BUlRKVU1QIF9ydG9zX1MxCQkJCQkJCQkJCVwNCisJCQk7CQkJCQkJCQkJCQkJCQlcDQorCQkJOyBTYXZlIHRoZSBwaWMgY2FsbC9yZXR1cm4tc3RhY2sgYmVsb25naW5nIHRvIHRoZQkJXA0KKwkJCTsgY3VycmVudCB0YXNrIGJ5IGNvcHlpbmcgaXQgdG8gdGhlIHRhc2sncyBzb2Z0d2FyZS0JXA0KIAkJCTsgc3RhY2suIFdlIHNhdmUgdGhlIGhhcmR3YXJlIHN0YWNrIHBvaW50ZXIgKHdoaWNoCQlcDQogCQkJOyBpcyB0aGUgbnVtYmVyIG9mIGFkZHJlc3NlcyBvbiB0aGUgc3RhY2spIGluIHRoZQkJXA0KIAkJCTsgVy1yZWdpc3RlciBmaXJzdCBiZWNhdXNlIHdlIG5lZWQgaXQgbGF0ZXIgYW5kIGl0CQlcDQotCQkJOyBpcyBtb2RpZmllZCBpbiB0aGUgc2F2ZS1sb29wIGJ5IGV4ZWN1dGluZyBwb3Ancy4gICAgXA0KLSAgICAgICAgICAgOyBBZnRlciB0aGUgbG9vcCB0aGUgVyAtIHJlZ2lzdGVyIGlzIHN0b3JlZCBvbiB0aGUgICAgIFwNCi0gICAgICAgIDsgc3RhY2ssIHRvby4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgbW92ZiBTVEtQVFIsIFcsIEFDQ0VTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGJ6IF9ydG9zX3MzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotX3J0b3NfUzI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgaWYgX19ST01TSVpFID4gMHg4MDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIG1vdmZmIFRPU1UsIFBPU1RERUMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgbW92ZmYgVE9TSCwgUE9TVERFQzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIG1vdmZmIFRPU0wsIFBPU1RERUMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBwb3AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgdHN0ZnN6IFNUS1BUUiwgQUNDRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIFNNQVJUSlVNUCBfcnRvc19TMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotX3J0b3NfczM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgbW92d2YgUE9TVERFQzIsIEFDQ0VTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICA7IE5leHQgdGhlIHZhbHVlIGZvciB1Y0NyaXRpY2FsTmVzdGluZyB1c2VkIGJ5IHRoZSAgICAgICAgXA0KLSAgICAgICAgOyB0YXNrIGlzIHN0b3JlZCBvbiB0aGUgc3RhY2suV2hlbiAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIDsgKCB1Y0ludGVycnVwdEZvcmNlZCA9PSBwb3J0SU5URVJSVVBUU19GT1JDRUQgKSwgd2Ugc2F2ZSBcDQotICAgICAgICA7IGl0IGFzIDAgKCBwb3J0Tk9fQ1JJVElDQUxfU0VDVElPTl9ORVNUSU5HICkuICAgICAgICAgICAgXA0KLSAgICAgICAgICAgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIGlmIHVjSW50ZXJydXB0Rm9yY2VkID09IHBvcnRJTlRFUlJVUFRTX0ZPUkNFRCAgICAgICAgICAgICBcDQotICAgICAgICBjbHJmIFBPU1RERUMyLCBBQ0NFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgZWxzZXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICBtb3ZmZiB1Y0NyaXRpY2FsTmVzdGluZywgUE9TVERFQzIgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICBlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgIDsgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIDsgU2F2ZSB0aGUgbmV3IHRvcCBvZiB0aGUgc29mdHdhcmUgc3RhY2sgaW4gdGhlIFRDQi4gICAgICBcDQotICAgICAgICAgICA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgbW92ZmYgcHhDdXJyZW50VENCLCBGU1IwTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIG1vdmZmIHB4Q3VycmVudFRDQiArIDEsIEZTUjBIICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBtb3ZmZiBGU1IyTCwgUE9TVElOQzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgbW92ZmYgRlNSMkgsIFBPU1RJTkMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIF9QcmFnbWEoICJhc21lbmQiICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIH0gd2hpbGUoIDAgKQ0KKwkJCTsgaXMgbW9kaWZpZWQgaW4gdGhlIHNhdmUtbG9vcCBieSBleGVjdXRpbmcgcG9wJ3MuCQlcDQorCQkJOyBBZnRlciB0aGUgbG9vcCB0aGUgVy1yZWdpc3RlciBpcyBzdG9yZWQgb24gdGhlCQlcDQorCQkJOyBzdGFjaywgdG9vLgkJCQkJCQkJCQkJXA0KKwkJCTsJCQkJCQkJCQkJCQkJCVwNCisJCQltb3ZmCVNUS1BUUixXLEFDQ0VTUwkJCQkJCQkJCVwNCisJCQliegkJX3J0b3NfczMJCQkJCQkJCQkJXA0KKwkJX3J0b3NfUzI6CQkJCQkJCQkJCQkJCVwNCisJCQlpZiBfX1JPTVNJWkUgPiAweDgwMDAJCQkJCQkJCQlcDQorCQkJCW1vdmZmCVRPU1UsUE9TVERFQzIJCQkJCQkJCVwNCisJCQllbmRpZgkJCQkJCQkJCQkJCQlcDQorCQkJbW92ZmYJVE9TSCxQT1NUREVDMgkJCQkJCQkJCVwNCisJCQltb3ZmZglUT1NMLFBPU1RERUMyCQkJCQkJCQkJXA0KKwkJCXBvcAkJCQkJCQkJCQkJCQkJXA0KKwkJCXRzdGZzeglTVEtQVFIsQUNDRVNTCQkJCQkJCQkJXA0KKwkJCVNNQVJUSlVNUCBfcnRvc19TMgkJCQkJCQkJCQlcDQorCQlfcnRvc19zMzoJCQkJCQkJCQkJCQkJXA0KKwkJCW1vdndmCVBPU1RERUMyLEFDQ0VTUwkJCQkJCQkJCVwNCisJCQk7CQkJCQkJCQkJCQkJCQlcDQorCQkJOyBOZXh0IHRoZSB2YWx1ZSBmb3IgdWNDcml0aWNhbE5lc3RpbmcgdXNlZCBieSB0aGUJCVwNCisJCQk7IHRhc2sgaXMgc3RvcmVkIG9uIHRoZSBzdGFjay4gV2hlbgkJCQkJCVwNCisJCQk7ICh1Y0ludGVycnVwdEZvcmNlZCA9PSBwb3J0SU5URVJSVVBUU19GT1JDRUQpLCB3ZSBzYXZlCVwNCisJCQk7IGl0IGFzIDAgKHBvcnROT19DUklUSUNBTF9TRUNUSU9OX05FU1RJTkcpLgkJCVwNCisJCQk7CQkJCQkJCQkJCQkJCQlcDQorCQkJaWYgdWNJbnRlcnJ1cHRGb3JjZWQgPT0gcG9ydElOVEVSUlVQVFNfRk9SQ0VECQkJXA0KKwkJCQljbHJmIFBPU1RERUMyLEFDQ0VTUwkJCQkJCQkJXA0KKwkJCWVsc2UJCQkJCQkJCQkJCQkJXA0KKwkJCQltb3ZmZgl1Y0NyaXRpY2FsTmVzdGluZyxQT1NUREVDMgkJCQkJXA0KKwkJCWVuZGlmCQkJCQkJCQkJCQkJCVwNCisJCQk7CQkJCQkJCQkJCQkJCQlcDQorCQkJOyBTYXZlIHRoZSBuZXcgdG9wIG9mIHRoZSBzb2Z0d2FyZSBzdGFjayBpbiB0aGUgVENCLglcDQorCQkJOwkJCQkJCQkJCQkJCQkJXA0KKwkJCW1vdmZmCXB4Q3VycmVudFRDQixGU1IwTAkJCQkJCQkJXA0KKwkJCW1vdmZmCXB4Q3VycmVudFRDQisxLEZTUjBICQkJCQkJCVwNCisJCQltb3ZmZglGU1IyTCxQT1NUSU5DMAkJCQkJCQkJCVwNCisJCQltb3ZmZglGU1IySCxQT1NUSU5DMAkJCQkJCQkJCVwNCisJCV9QcmFnbWEoImFzbWVuZCIpCQkJCQkJCQkJCQlcDQorCX0gd2hpbGUoMCkNCiANCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KIA0KIC8qDQogICogVGhpcyBpcyB0aGUgcmV2ZXJzZSBvZiBwb3J0U0FWRV9DT05URVhULg0KICAqLw0KLSAgICAjZGVmaW5lIHBvcnRSRVNUT1JFX0NPTlRFWFQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgX1ByYWdtYSggImFzbSIgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgOyBTZXQgRlNSMCB0byBwb2ludCB0byBweEN1cnJlbnRUQ0ItPnB4VG9wT2ZTdGFjay4gICAgICAgICAgXA0KLSAgICAgICAgICAgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgbW92ZmYgcHhDdXJyZW50VENCLCBGU1IwTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgbW92ZmYgcHhDdXJyZW50VENCICsgMSwgRlNSMEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgOyBEZSAtIHJlZmVyZW5jZSBGU1IwIHRvIHNldCB0aGUgYWRkcmVzcyBpdCBob2xkcyBpbnRvICAgICAgXA0KLSAgICAgICAgOyBGU1IyKCBpLmUuICooIHB4Q3VycmVudFRDQi0+cHhUb3BPZlN0YWNrICkgKS5GU1IyICAgICAgICAgXA0KLSAgICAgICAgOyBpcyB1c2VkIGJ5IHdpekMgYXMgc3RhY2twb2ludGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgbW92ZmYgUE9TVElOQzAsIEZTUjJMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgbW92ZmYgUE9TVElOQzAsIEZTUjJIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgOyBOZXh0LCB0aGUgdmFsdWUgZm9yIHVjQ3JpdGljYWxOZXN0aW5nIHVzZWQgYnkgdGhlICAgICAgICAgXA0KLSAgICAgICAgOyB0YXNrIGlzIHJldHJpZXZlZCBmcm9tIHRoZSBzdGFjay4gICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgbW92ZmYgUFJFSU5DMiwgdWNDcml0aWNhbE5lc3RpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgOyBSZWJ1aWxkIHRoZSBwaWMgY2FsbCAvIHJldHVybiAtc3RhY2suVGhlIG51bWJlciBvZiAgICAgICAgXA0KLSAgICAgICAgOyByZXR1cm4gYWRkcmVzc2VzIGlzIHRoZSBuZXh0IGl0ZW0gb24gdGhlIHRhc2sgc3RhY2suICAgICAgXA0KLSAgICAgICAgICAgOyBTYXZlIHRoaXMgbnVtYmVyIGluIFBST0RMLlRoZW4gZmV0Y2ggdGhlIGFkZHJlc3NlcyAgICAgXA0KLSAgICAgICAgOyBhbmQgc3RvcmUgdGhlbSBvbiB0aGUgaGFyZHdhcmVzdGFjay4gICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgOyBUaGUgZGF0YXNoZWV0cyBzYXkgd2UgY2FuICd0IHVzZSBtb3ZmZiBoZXJlLi4uCQkJXA0KKyNkZWZpbmUgcG9ydFJFU1RPUkVfQ09OVEVYVCgpCQkJCQkJCQkJCVwNCisJZG8JCQkJCQkJCQkJCQkJCQkJXA0KKwl7CQkJCQkJCQkJCQkJCQkJCVwNCisJCV9QcmFnbWEoImFzbSIpCQkJCQkJCQkJCQkJXA0KKwkJCTsJCQkJCQkJCQkJCQkJCVwNCisJCQk7IFNldCBGU1IwIHRvIHBvaW50IHRvIHB4Q3VycmVudFRDQi0+cHhUb3BPZlN0YWNrLgkJXA0KKwkJCTsJCQkJCQkJCQkJCQkJCVwNCisJCQltb3ZmZglweEN1cnJlbnRUQ0IsRlNSMEwJCQkJCQkJCVwNCisJCQltb3ZmZglweEN1cnJlbnRUQ0IrMSxGU1IwSAkJCQkJCQlcDQorCQkJOwkJCQkJCQkJCQkJCQkJXA0KKwkJCTsgRGUtcmVmZXJlbmNlIEZTUjAgdG8gc2V0IHRoZSBhZGRyZXNzIGl0IGhvbGRzIGludG8JXA0KKwkJCTsgRlNSMiAoaS5lLiAqKCBweEN1cnJlbnRUQ0ItPnB4VG9wT2ZTdGFjayApICkuIEZTUjIJXA0KKwkJCTsgaXMgdXNlZCBieSB3aXpDIGFzIHN0YWNrcG9pbnRlci4JCQkJCQlcDQorCQkJOwkJCQkJCQkJCQkJCQkJXA0KKwkJCW1vdmZmCVBPU1RJTkMwLEZTUjJMCQkJCQkJCQkJXA0KKwkJCW1vdmZmCVBPU1RJTkMwLEZTUjJICQkJCQkJCQkJXA0KKwkJCTsJCQkJCQkJCQkJCQkJCVwNCisJCQk7IE5leHQsIHRoZSB2YWx1ZSBmb3IgdWNDcml0aWNhbE5lc3RpbmcgdXNlZCBieSB0aGUJCVwNCisJCQk7IHRhc2sgaXMgcmV0cmlldmVkIGZyb20gdGhlIHN0YWNrLgkJCQkJCVwNCisJCQk7CQkJCQkJCQkJCQkJCQlcDQorCQkJbW92ZmYJUFJFSU5DMix1Y0NyaXRpY2FsTmVzdGluZwkJCQkJCVwNCisJCQk7CQkJCQkJCQkJCQkJCQlcDQorCQkJOyBSZWJ1aWxkIHRoZSBwaWMgY2FsbC9yZXR1cm4tc3RhY2suIFRoZSBudW1iZXIgb2YJCVwNCisJCQk7IHJldHVybiBhZGRyZXNzZXMgaXMgdGhlIG5leHQgaXRlbSBvbiB0aGUgdGFzayBzdGFjay4JXA0KKwkJCTsgU2F2ZSB0aGlzIG51bWJlciBpbiBQUk9ETC4gVGhlbiBmZXRjaCB0aGUgYWRkcmVzc2VzCVwNCisJCQk7IGFuZCBzdG9yZSB0aGVtIG9uIHRoZSBoYXJkd2FyZXN0YWNrLgkJCQkJXA0KKwkJCTsgVGhlIGRhdGFzaGVldHMgc2F5IHdlIGNhbid0IHVzZSBtb3ZmZiBoZXJlLi4uCQkJXA0KIAkJCTsJCQkJCQkJCQkJCQkJCVwNCiAJCQltb3ZmZglQUkVJTkMyLFBST0RMCS8vIFVzZSBQUk9ETCBhcyB0ZW1wcmVnaXN0ZXIJXA0KIAkJCWNscmYJU1RLUFRSLEFDQ0VTUwkJCQkJCQkJCVwNCkBAIC0zMzIsMTggKzMzMiwxOCBAQAogCQkJZGVjZnN6CVBST0RMLEYsQUNDRVNTCQkJCQkJCQkJXA0KIAkJCVNNQVJUSlVNUCBfcnRvc19SMQkJCQkJCQkJCQlcDQogCQkJOwkJCQkJCQkJCQkJCQkJXA0KLQkJCTsgUmVzdG9yZSB0aGUgY29tcGlsZXIncyB3b3JraW5nIHN0b3JhZ2UgYXJlYSB0byBwYWdlIDAgXA0KLSAgICAgICAgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgbW92bHcgT1ZFUkhFQURQQUdFMCAtIExPQ09QVFNJWkUgKyBNQVhMT0NPUFRTSVpFICAgICAgICAgICAgXA0KLSAgICAgICAgbW92d2YgRlNSMEwsIEFDQ0VTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgY2xyZiBGU1IwSCwgQUNDRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLV9ydG9zX1IyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgZGVjZiBGU1IwTCwgRiwgQUNDRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgbW92ZmYgUFJFSU5DMiwgSU5ERjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgdHN0ZnN6IEZTUjBMLCBBQ0NFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgU01BUlRKVU1QIF9ydG9zX1IyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgOyBSZXN0b3JlIHRoZSBzZnIgJ3MgZm9ybWluZyB0aGUgdGFza3MgY29udGV4dC4JCQlcDQorCQkJOyBSZXN0b3JlIHRoZSBjb21waWxlcidzIHdvcmtpbmcgc3RvcmFnZSBhcmVhIHRvIHBhZ2UgMAlcDQorCQkJOwkJCQkJCQkJCQkJCQkJXA0KKwkJCW1vdmx3CU9WRVJIRUFEUEFHRTAtTE9DT1BUU0laRStNQVhMT0NPUFRTSVpFCQkJXA0KKwkJCW1vdndmCUZTUjBMLEFDQ0VTUwkJCQkJCQkJCVwNCisJCQljbHJmCUZTUjBILEFDQ0VTUwkJCQkJCQkJCVwNCisJCV9ydG9zX1IyOgkJCQkJCQkJCQkJCQlcDQorCQkJZGVjZglGU1IwTCxGLEFDQ0VTUwkJCQkJCQkJCVwNCisJCQltb3ZmZglQUkVJTkMyLElOREYwCQkJCQkJCQkJXA0KKwkJCXRzdGZzeglGU1IwTCxBQ0NFU1MJCQkJCQkJCQlcDQorCQkJU01BUlRKVU1QIF9ydG9zX1IyCQkJCQkJCQkJCVwNCisJCQk7CQkJCQkJCQkJCQkJCQlcDQorCQkJOyBSZXN0b3JlIHRoZSBzZnIncyBmb3JtaW5nIHRoZSB0YXNrcyBjb250ZXh0LgkJCVwNCiAJCQk7IFdlIGNhbm5vdCB5ZXQgcmVzdG9yZSBic3IsIHcgYW5kIHN0YXR1cyBiZWNhdXNlCQlcDQogCQkJOyB3ZSBuZWVkIHRoZXNlCXJlZ2lzdGVycyBmb3IgYSBmaW5hbCB0ZXN0LgkJCQlcDQogCQkJOwkJCQkJCQkJCQkJCQkJXA0KQEAgLTM3NCw4ICszNzQsOCBAQAogCQkJOyByZXRmaWUgaW5zdHJ1Y3Rpb24gYmVjYXVzZSB3ZSBuZWVkIHRoZQkJCQlcDQogCQkJOyBpbnRlcnJ1cHQtZW5hYmxpbmcgYW5kIHRoZSByZXR1cm4gdG8gdGhlIHJlc3RvcmVkCQlcDQogCQkJOyB0YXNrIHRvIGJlIHVuaW50ZXJydXB0YWJsZS4JCQkJCQkJXA0KLQkgICAgICAgIDsgQmVjYXVzZSBic3IsIHN0YXR1cyBhbmQgVyBhcmUgYWZmZWN0ZWQgYnkgdGhlIHRlc3QJXA0KLQkgICAgICAgIDsgdGhleSBhcmUgcmVzdG9yZWQgYWZ0ZXIgdGhlIHRlc3QuCQkJCQkJXA0KKwkgCQk7IEJlY2F1c2UgYnNyLCBzdGF0dXMgYW5kIFcgYXJlIGFmZmVjdGVkIGJ5IHRoZSB0ZXN0CVwNCisJIAkJOyB0aGV5IGFyZSByZXN0b3JlZCBhZnRlciB0aGUgdGVzdC4JCQkJCQlcDQogCQkJOwkJCQkJCQkJCQkJCQkJXA0KIAkJCW1vdmxiCXVjQ3JpdGljYWxOZXN0aW5nPj44CQkJCQkJCVwNCiAJCQl0c3Rmc3oJdWNDcml0aWNhbE5lc3RpbmcsQkFOS0VECQkJCQkJXA0KQEAgLTQwOCw3ICs0MDgsNyBAQAogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQotI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggeEZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKQkgICAgXA0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHhGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkJIAlcDQogCXZvaWQgcG9pbnRlZCB4RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApCQlcDQogCV9QcmFnbWEoYXNtZnVuYyB4RnVuY3Rpb24pDQogDQpAQCAtNDIxLDE0ICs0MjEsMyBAQAogDQogI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQogDQotDQotDQotDQotDQotDQotDQotDQotDQotDQotDQotDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvb1dhdGNvbS8xNkJpdERPUy9GbHNoMTg2L3BvcnQuYyBiL3BvcnRhYmxlL29XYXRjb20vMTZCaXRET1MvRmxzaDE4Ni9wb3J0LmMKaW5kZXggY2RjNTI1NS4uZTQxOTk1OCAxMDA2NDQKLS0tIGEvcG9ydGFibGUvb1dhdGNvbS8xNkJpdERPUy9GbHNoMTg2L3BvcnQuYworKysgYi9wb3J0YWJsZS9vV2F0Y29tLzE2Qml0RE9TL0Zsc2gxODYvcG9ydC5jCkBAIC0yNiwyNyArMjYsMjcgQEAKICAqLw0KIA0KIC8qDQotICogQ2hhbmdlcyBmcm9tIFYxLjAwOg0KLSAqDQotICsgQ2FsbCB0byB0YXNrWUlFTEQoKSBmcm9tIHdpdGhpbiB0aWNrIElTUiBoYXMgYmVlbiByZXBsYWNlZCBieSB0aGUgbW9yZQ0KLSArICAgIGVmZmljaWVudCBwb3J0U1dJVENIX0NPTlRFWFQoKS4NCi0gKyBJU1IgZnVuY3Rpb24gZGVmaW5pdGlvbnMgcmVuYW1lZCB0byBpbmNsdWRlIHRoZSBwcnYgcHJlZml4Lg0KLSArDQotICsgQ2hhbmdlcyBmcm9tIFYxLjIuMDoNCi0gKw0KLSArIHBvcnRSRVNFVF9QSUMoKSBpcyBub3cgY2FsbGVkIGxhc3QgdGhpbmcgYmVmb3JlIHRoZSBlbmQgb2YgdGhlIHByZWVtcHRpdmUNCi0gKyAgICB0aWNrIHJvdXRpbmUuDQotICsNCi0gKyBDaGFuZ2VzIGZyb20gVjIuNi4xDQotICsNCi0gKyBSZXBsYWNlZCB0aGUgc1VzaW5nUHJlZW1wdGlvbiB2YXJpYWJsZSB3aXRoIHRoZSBjb25maWdVU0VfUFJFRU1QVElPTg0KLSArICAgIG1hY3JvIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgbGF0ZXIgcG9ydHMuDQotICovDQorQ2hhbmdlcyBmcm9tIFYxLjAwOg0KKwkNCisJKyBDYWxsIHRvIHRhc2tZSUVMRCgpIGZyb20gd2l0aGluIHRpY2sgSVNSIGhhcyBiZWVuIHJlcGxhY2VkIGJ5IHRoZSBtb3JlDQorCSAgZWZmaWNpZW50IHBvcnRTV0lUQ0hfQ09OVEVYVCgpLg0KKwkrIElTUiBmdW5jdGlvbiBkZWZpbml0aW9ucyByZW5hbWVkIHRvIGluY2x1ZGUgdGhlIHBydiBwcmVmaXguDQorDQorQ2hhbmdlcyBmcm9tIFYxLjIuMDoNCisNCisJKyBwb3J0UkVTRVRfUElDKCkgaXMgbm93IGNhbGxlZCBsYXN0IHRoaW5nIGJlZm9yZSB0aGUgZW5kIG9mIHRoZSBwcmVlbXB0aXZlDQorCSAgdGljayByb3V0aW5lLg0KKw0KK0NoYW5nZXMgZnJvbSBWMi42LjENCisNCisJKyBSZXBsYWNlZCB0aGUgc1VzaW5nUHJlZW1wdGlvbiB2YXJpYWJsZSB3aXRoIHRoZSBjb25maWdVU0VfUFJFRU1QVElPTg0KKwkgIG1hY3JvIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgbGF0ZXIgcG9ydHMuDQorKi8NCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgRmxhc2hsaXRlIDE4Ng0KLSogcG9ydC4NCi0qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorICogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFibGUuaCBmb3IgdGhlIEZsYXNobGl0ZSAxODYNCisgKiBwb3J0Lg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogI2luY2x1ZGUgPHN0ZGxpYi5oPg0KICNpbmNsdWRlIDxpODYuaD4NCkBAIC01OSwxMyArNTksMTMgQEAKIA0KIC8qbGludCAtZTk1MCBOb24gQU5TSSByZXNlcnZlZCB3b3JkcyBva2F5IGluIHRoaXMgZmlsZSBvbmx5LiAqLw0KIA0KLSNkZWZpbmUgcG9ydFRJTUVSX0VPSV9UWVBFICAgICAgICAgICAgICAoIDggKQ0KLSNkZWZpbmUgcG9ydFJFU0VUX1BJQygpICAgIHBvcnRPVVRQVVRfV09SRCggKCB1aW50MTZfdCApIDB4ZmYyMiwgcG9ydFRJTUVSX0VPSV9UWVBFICkNCi0jZGVmaW5lIHBvcnRUSU1FUl9JTlRfTlVNQkVSICAgICAgICAgICAgMHgxMg0KKyNkZWZpbmUgcG9ydFRJTUVSX0VPSV9UWVBFCQkoIDggKQ0KKyNkZWZpbmUgcG9ydFJFU0VUX1BJQygpCQkJcG9ydE9VVFBVVF9XT1JEKCAoIHVpbnQxNl90ICkgMHhmZjIyLCBwb3J0VElNRVJfRU9JX1RZUEUgKQ0KKyNkZWZpbmUgcG9ydFRJTUVSX0lOVF9OVU1CRVIJMHgxMg0KIA0KLSNkZWZpbmUgcG9ydFRJTUVSXzFfQ09OVFJPTF9SRUdJU1RFUiAgICAoICggdWludDE2X3QgKSAweGZmNWUgKQ0KLSNkZWZpbmUgcG9ydFRJTUVSXzBfQ09OVFJPTF9SRUdJU1RFUiAgICAoICggdWludDE2X3QgKSAweGZmNTYgKQ0KLSNkZWZpbmUgcG9ydFRJTUVSX0lOVEVSUlVQVF9FTkFCTEUgICAgICAoICggdWludDE2X3QgKSAweDIwMDAgKQ0KKyNkZWZpbmUgcG9ydFRJTUVSXzFfQ09OVFJPTF9SRUdJU1RFUgkoICggdWludDE2X3QgKSAweGZmNWUgKQ0KKyNkZWZpbmUgcG9ydFRJTUVSXzBfQ09OVFJPTF9SRUdJU1RFUgkoICggdWludDE2X3QgKSAweGZmNTYgKQ0KKyNkZWZpbmUgcG9ydFRJTUVSX0lOVEVSUlVQVF9FTkFCTEUJCSggKCB1aW50MTZfdCApIDB4MjAwMCApDQogDQogLyogU2V0dXAgdGhlIGhhcmR3YXJlIHRvIGdlbmVyYXRlIHRoZSByZXF1aXJlZCB0aWNrIGZyZXF1ZW5jeS4gKi8NCiBzdGF0aWMgdm9pZCBwcnZTZXRUaWNrRnJlcXVlbmN5KCB1aW50MzJfdCB1bFRpY2tSYXRlSHogKTsNCkBAIC03NCwxNSArNzQsMTMgQEAKIHN0YXRpYyB2b2lkIHBydkV4aXRGdW5jdGlvbiggdm9pZCApOw0KIA0KICNpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAxDQotDQotLyogVGljayBzZXJ2aWNlIHJvdXRpbmUgdXNlZCBieSB0aGUgc2NoZWR1bGVyIHdoZW4gcHJlZW1wdGl2ZSBzY2hlZHVsaW5nIGlzDQotICogYmVpbmcgdXNlZC4gKi8NCi0gICAgc3RhdGljIHZvaWQgX19pbnRlcnJ1cHQgX19mYXIgcHJ2UHJlZW1wdGl2ZVRpY2soIHZvaWQgKTsNCisJLyogVGljayBzZXJ2aWNlIHJvdXRpbmUgdXNlZCBieSB0aGUgc2NoZWR1bGVyIHdoZW4gcHJlZW1wdGl2ZSBzY2hlZHVsaW5nIGlzDQorCWJlaW5nIHVzZWQuICovDQorCXN0YXRpYyB2b2lkIF9faW50ZXJydXB0IF9fZmFyIHBydlByZWVtcHRpdmVUaWNrKCB2b2lkICk7DQogI2Vsc2UNCi0NCi0vKiBUaWNrIHNlcnZpY2Ugcm91dGluZSB1c2VkIGJ5IHRoZSBzY2hlZHVsZXIgd2hlbiBjb29wZXJhdGl2ZSBzY2hlZHVsaW5nIGlzDQotICogYmVpbmcgdXNlZC4gKi8NCi0gICAgc3RhdGljIHZvaWQgX19pbnRlcnJ1cHQgX19mYXIgcHJ2Tm9uUHJlZW1wdGl2ZVRpY2soIHZvaWQgKTsNCisJLyogVGljayBzZXJ2aWNlIHJvdXRpbmUgdXNlZCBieSB0aGUgc2NoZWR1bGVyIHdoZW4gY29vcGVyYXRpdmUgc2NoZWR1bGluZyBpcyANCisJYmVpbmcgdXNlZC4gKi8NCisJc3RhdGljIHZvaWQgX19pbnRlcnJ1cHQgX19mYXIgcHJ2Tm9uUHJlZW1wdGl2ZVRpY2soIHZvaWQgKTsNCiAjZW5kaWYNCiANCiAvKiBUcmFwIHJvdXRpbmUgdXNlZCBieSB0YXNrWUlFTEQoKSB0byBtYW51YWxseSBjYXVzZSBhIGNvbnRleHQgc3dpdGNoLiAqLw0KQEAgLTk0LDcgKzkyLDcgQEAKIHN0YXRpYyBpbnQxNl90IHNTY2hlZHVsZXJSdW5uaW5nID0gcGRGQUxTRTsNCiANCiAvKiBQb2ludHMgdG8gdGhlIG9yaWdpbmFsIHJvdXRpbmUgaW5zdGFsbGVkIG9uIHRoZSB2ZWN0b3Igd2UgdXNlIGZvciBtYW51YWwgY29udGV4dCBzd2l0Y2hlcy4gIFRoaXMgaXMgdGhlbiB1c2VkIHRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIHJvdXRpbmUgZHVyaW5nIHBydkV4aXRGdW5jdGlvbigpLiAqLw0KLXN0YXRpYyB2b2lkKCBfX2ludGVycnVwdCBfX2ZhciAqIHB4T2xkU3dpdGNoSVNSICkoKTsNCitzdGF0aWMgdm9pZCAoIF9faW50ZXJydXB0IF9fZmFyICpweE9sZFN3aXRjaElTUiApKCk7DQogDQogLyogVXNlZCB0byByZXN0b3JlIHRoZSBvcmlnaW5hbCBET1MgY29udGV4dCB3aGVuIHRoZSBzY2hlZHVsZXIgaXMgZW5kZWQuICovDQogc3RhdGljIGptcF9idWYgeEp1bXBCdWY7DQpAQCAtMTA0LDE0NSArMTAyLDE0NSBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogQmFzZVR5cGVfdCB4UG9ydFN0YXJ0U2NoZWR1bGVyKCB2b2lkICkNCiB7DQotICAgIC8qIFRoaXMgaXMgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBhbHJlYWR5IGRpc2FibGVkLiAqLw0KKwkvKiBUaGlzIGlzIGNhbGxlZCB3aXRoIGludGVycnVwdHMgYWxyZWFkeSBkaXNhYmxlZC4gKi8NCiANCi0gICAgLyogUmVtZW1iZXIgd2hhdCB3YXMgb24gdGhlIGludGVycnVwdHMgd2UgYXJlIGdvaW5nIHRvIHVzZQ0KLSAgICAgKiBzbyB3ZSBjYW4gcHV0IHRoZW0gYmFjayBsYXRlciBpZiByZXF1aXJlZC4gKi8NCi0gICAgcHhPbGRTd2l0Y2hJU1IgPSBfZG9zX2dldHZlY3QoIHBvcnRTV0lUQ0hfSU5UX05VTUJFUiApOw0KKwkvKiBSZW1lbWJlciB3aGF0IHdhcyBvbiB0aGUgaW50ZXJydXB0cyB3ZSBhcmUgZ29pbmcgdG8gdXNlDQorCXNvIHdlIGNhbiBwdXQgdGhlbSBiYWNrIGxhdGVyIGlmIHJlcXVpcmVkLiAqLw0KKwlweE9sZFN3aXRjaElTUiA9IF9kb3NfZ2V0dmVjdCggcG9ydFNXSVRDSF9JTlRfTlVNQkVSICk7DQogDQotICAgIC8qIFB1dCBvdXIgbWFudWFsIHN3aXRjaCAoeWllbGQpIGZ1bmN0aW9uIG9uIGEga25vd24NCi0gICAgICogdmVjdG9yLiAqLw0KLSAgICBfZG9zX3NldHZlY3QoIHBvcnRTV0lUQ0hfSU5UX05VTUJFUiwgcHJ2WWllbGRQcm9jZXNzb3IgKTsNCisJLyogUHV0IG91ciBtYW51YWwgc3dpdGNoICh5aWVsZCkgZnVuY3Rpb24gb24gYSBrbm93bg0KKwl2ZWN0b3IuICovDQorCV9kb3Nfc2V0dmVjdCggcG9ydFNXSVRDSF9JTlRfTlVNQkVSLCBwcnZZaWVsZFByb2Nlc3NvciApOw0KIA0KLSAgICAjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIC8qIFB1dCBvdXIgdGljayBzd2l0Y2ggZnVuY3Rpb24gb24gdGhlIHRpbWVyIGludGVycnVwdC4gKi8NCi0gICAgICAgICAgICBfZG9zX3NldHZlY3QoIHBvcnRUSU1FUl9JTlRfTlVNQkVSLCBwcnZQcmVlbXB0aXZlVGljayApOw0KLSAgICAgICAgfQ0KLSAgICAjZWxzZQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIC8qIFdlIHdhbnQgdGhlIHRpbWVyIGludGVycnVwdCB0byBqdXN0IGluY3JlbWVudCB0aGUgdGljayBjb3VudC4gKi8NCi0gICAgICAgICAgICBfZG9zX3NldHZlY3QoIHBvcnRUSU1FUl9JTlRfTlVNQkVSLCBwcnZOb25QcmVlbXB0aXZlVGljayApOw0KLSAgICAgICAgfQ0KLSAgICAjZW5kaWYNCisJI2lmIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDENCisJewkJDQorCQkvKiBQdXQgb3VyIHRpY2sgc3dpdGNoIGZ1bmN0aW9uIG9uIHRoZSB0aW1lciBpbnRlcnJ1cHQuICovDQorCQlfZG9zX3NldHZlY3QoIHBvcnRUSU1FUl9JTlRfTlVNQkVSLCBwcnZQcmVlbXB0aXZlVGljayApOw0KKwl9DQorCSNlbHNlDQorCXsNCisJCS8qIFdlIHdhbnQgdGhlIHRpbWVyIGludGVycnVwdCB0byBqdXN0IGluY3JlbWVudCB0aGUgdGljayBjb3VudC4gKi8NCisJCV9kb3Nfc2V0dmVjdCggcG9ydFRJTUVSX0lOVF9OVU1CRVIsIHBydk5vblByZWVtcHRpdmVUaWNrICk7DQorCX0NCisJI2VuZGlmDQogDQotICAgIHBydlNldFRpY2tGcmVxdWVuY3koIGNvbmZpZ1RJQ0tfUkFURV9IWiApOw0KKwlwcnZTZXRUaWNrRnJlcXVlbmN5KCBjb25maWdUSUNLX1JBVEVfSFogKTsNCiANCi0gICAgLyogQ2xlYW4gdXAgZnVuY3Rpb24gaWYgd2Ugd2FudCB0byByZXR1cm4gdG8gRE9TLiAqLw0KLSAgICBpZiggc2V0am1wKCB4SnVtcEJ1ZiApICE9IDAgKQ0KLSAgICB7DQotICAgICAgICBwcnZFeGl0RnVuY3Rpb24oKTsNCi0gICAgICAgIHNTY2hlZHVsZXJSdW5uaW5nID0gcGRGQUxTRTsNCi0gICAgfQ0KLSAgICBlbHNlDQotICAgIHsNCi0gICAgICAgIHNTY2hlZHVsZXJSdW5uaW5nID0gcGRUUlVFOw0KKwkvKiBDbGVhbiB1cCBmdW5jdGlvbiBpZiB3ZSB3YW50IHRvIHJldHVybiB0byBET1MuICovDQorCWlmKCBzZXRqbXAoIHhKdW1wQnVmICkgIT0gMCApDQorCXsNCisJCXBydkV4aXRGdW5jdGlvbigpOw0KKwkJc1NjaGVkdWxlclJ1bm5pbmcgPSBwZEZBTFNFOw0KKwl9DQorCWVsc2UNCisJew0KKwkJc1NjaGVkdWxlclJ1bm5pbmcgPSBwZFRSVUU7DQogDQotICAgICAgICAvKiBLaWNrIG9mZiB0aGUgc2NoZWR1bGVyIGJ5IHNldHRpbmcgdXAgdGhlIGNvbnRleHQgb2YgdGhlIGZpcnN0IHRhc2suICovDQotICAgICAgICBwb3J0RklSU1RfQ09OVEVYVCgpOw0KLSAgICB9DQorCQkvKiBLaWNrIG9mZiB0aGUgc2NoZWR1bGVyIGJ5IHNldHRpbmcgdXAgdGhlIGNvbnRleHQgb2YgdGhlIGZpcnN0IHRhc2suICovDQorCQlwb3J0RklSU1RfQ09OVEVYVCgpOw0KKwl9DQogDQotICAgIHJldHVybiBzU2NoZWR1bGVyUnVubmluZzsNCisJcmV0dXJuIHNTY2hlZHVsZXJSdW5uaW5nOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBUaGUgdGljayBJU1IgdXNlZCBkZXBlbmQgb24gd2hldGhlciBvciBub3QgdGhlIHByZWVtcHRpdmUgb3IgY29vcGVyYXRpdmUNCi0gKiBrZXJuZWwgaXMgYmVpbmcgdXNlZC4gKi8NCitrZXJuZWwgaXMgYmVpbmcgdXNlZC4gKi8NCiAjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMQ0KLSAgICBzdGF0aWMgdm9pZCBfX2ludGVycnVwdCBfX2ZhciBwcnZQcmVlbXB0aXZlVGljayggdm9pZCApDQotICAgIHsNCi0gICAgICAgIC8qIEdldCB0aGUgc2NoZWR1bGVyIHRvIHVwZGF0ZSB0aGUgdGFzayBzdGF0ZXMgZm9sbG93aW5nIHRoZSB0aWNrLiAqLw0KLSAgICAgICAgaWYoIHhUYXNrSW5jcmVtZW50VGljaygpICE9IHBkRkFMU0UgKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIC8qIFN3aXRjaCBpbiB0aGUgY29udGV4dCBvZiB0aGUgbmV4dCB0YXNrIHRvIGJlIHJ1bi4gKi8NCi0gICAgICAgICAgICBwb3J0U1dJVENIX0NPTlRFWFQoKTsNCi0gICAgICAgIH0NCisJc3RhdGljIHZvaWQgX19pbnRlcnJ1cHQgX19mYXIgcHJ2UHJlZW1wdGl2ZVRpY2soIHZvaWQgKQ0KKwl7DQorCQkvKiBHZXQgdGhlIHNjaGVkdWxlciB0byB1cGRhdGUgdGhlIHRhc2sgc3RhdGVzIGZvbGxvd2luZyB0aGUgdGljay4gKi8NCisJCWlmKCB4VGFza0luY3JlbWVudFRpY2soKSAhPSBwZEZBTFNFICkNCisJCXsNCisJCQkvKiBTd2l0Y2ggaW4gdGhlIGNvbnRleHQgb2YgdGhlIG5leHQgdGFzayB0byBiZSBydW4uICovDQorCQkJcG9ydFNXSVRDSF9DT05URVhUKCk7DQorCQl9DQogDQotICAgICAgICAvKiBSZXNldCB0aGUgUElDIHJlYWR5IGZvciB0aGUgbmV4dCB0aW1lLiAqLw0KLSAgICAgICAgcG9ydFJFU0VUX1BJQygpOw0KLSAgICB9DQotI2Vsc2UgLyogaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMSAqLw0KLSAgICBzdGF0aWMgdm9pZCBfX2ludGVycnVwdCBfX2ZhciBwcnZOb25QcmVlbXB0aXZlVGljayggdm9pZCApDQotICAgIHsNCi0gICAgICAgIC8qIFNhbWUgYXMgcHJlZW1wdGl2ZSB0aWNrLCBidXQgdGhlIGNvb3BlcmF0aXZlIHNjaGVkdWxlciBpcyBiZWluZyB1c2VkDQotICAgICAgICAgKiBzbyB3ZSBkb24ndCBoYXZlIHRvIHN3aXRjaCBpbiB0aGUgY29udGV4dCBvZiB0aGUgbmV4dCB0YXNrLiAqLw0KLSAgICAgICAgeFRhc2tJbmNyZW1lbnRUaWNrKCk7DQotICAgICAgICBwb3J0UkVTRVRfUElDKCk7DQotICAgIH0NCi0jZW5kaWYgLyogaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMSAqLw0KKwkJLyogUmVzZXQgdGhlIFBJQyByZWFkeSBmb3IgdGhlIG5leHQgdGltZS4gKi8NCisJCXBvcnRSRVNFVF9QSUMoKTsNCisJfQ0KKyNlbHNlDQorCXN0YXRpYyB2b2lkIF9faW50ZXJydXB0IF9fZmFyIHBydk5vblByZWVtcHRpdmVUaWNrKCB2b2lkICkNCisJew0KKwkJLyogU2FtZSBhcyBwcmVlbXB0aXZlIHRpY2ssIGJ1dCB0aGUgY29vcGVyYXRpdmUgc2NoZWR1bGVyIGlzIGJlaW5nIHVzZWQNCisJCXNvIHdlIGRvbid0IGhhdmUgdG8gc3dpdGNoIGluIHRoZSBjb250ZXh0IG9mIHRoZSBuZXh0IHRhc2suICovDQorCQl4VGFza0luY3JlbWVudFRpY2soKTsNCisJCXBvcnRSRVNFVF9QSUMoKTsNCisJfQ0KKyNlbmRpZg0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHN0YXRpYyB2b2lkIF9faW50ZXJydXB0IF9fZmFyIHBydllpZWxkUHJvY2Vzc29yKCB2b2lkICkNCiB7DQotICAgIC8qIFN3aXRjaCBpbiB0aGUgY29udGV4dCBvZiB0aGUgbmV4dCB0YXNrIHRvIGJlIHJ1bi4gKi8NCi0gICAgcG9ydFNXSVRDSF9DT05URVhUKCk7DQorCS8qIFN3aXRjaCBpbiB0aGUgY29udGV4dCBvZiB0aGUgbmV4dCB0YXNrIHRvIGJlIHJ1bi4gKi8NCisJcG9ydFNXSVRDSF9DT05URVhUKCk7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHZvaWQgdlBvcnRFbmRTY2hlZHVsZXIoIHZvaWQgKQ0KIHsNCi0gICAgLyogSnVtcCBiYWNrIHRvIHRoZSBwcm9jZXNzb3Igc3RhdGUgcHJpb3IgdG8gc3RhcnRpbmcgdGhlDQotICAgICAqIHNjaGVkdWxlci4gIFRoaXMgbWVhbnMgd2UgYXJlIG5vdCBnb2luZyB0byBiZSB1c2luZyBhDQotICAgICAqIHRhc2sgc3RhY2sgZnJhbWUgc28gdGhlIHRhc2sgY2FuIGJlIGRlbGV0ZWQuICovDQotICAgIGxvbmdqbXAoIHhKdW1wQnVmLCAxICk7DQorCS8qIEp1bXAgYmFjayB0byB0aGUgcHJvY2Vzc29yIHN0YXRlIHByaW9yIHRvIHN0YXJ0aW5nIHRoZQ0KKwlzY2hlZHVsZXIuICBUaGlzIG1lYW5zIHdlIGFyZSBub3QgZ29pbmcgdG8gYmUgdXNpbmcgYQ0KKwl0YXNrIHN0YWNrIGZyYW1lIHNvIHRoZSB0YXNrIGNhbiBiZSBkZWxldGVkLiAqLw0KKwlsb25nam1wKCB4SnVtcEJ1ZiwgMSApOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBzdGF0aWMgdm9pZCBwcnZFeGl0RnVuY3Rpb24oIHZvaWQgKQ0KIHsNCi0gICAgY29uc3QgdWludDE2X3QgdXNUaW1lckRpc2FibGUgPSAweDAwMDA7DQotICAgIHVpbnQxNl90IHVzVGltZXIwQ29udHJvbDsNCitjb25zdCB1aW50MTZfdCB1c1RpbWVyRGlzYWJsZSA9IDB4MDAwMDsNCit1aW50MTZfdCB1c1RpbWVyMENvbnRyb2w7DQogDQotICAgIC8qIEludGVycnVwdHMgc2hvdWxkIGJlIGRpc2FibGVkIGhlcmUgYW55d2F5IC0gYnV0IG5vDQotICAgICAqIGhhcm0gaW4gbWFraW5nIHN1cmUuICovDQotICAgIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsNCisJLyogSW50ZXJydXB0cyBzaG91bGQgYmUgZGlzYWJsZWQgaGVyZSBhbnl3YXkgLSBidXQgbm8gDQorCWhhcm0gaW4gbWFraW5nIHN1cmUuICovDQorCXBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsNCisJaWYoIHNTY2hlZHVsZXJSdW5uaW5nID09IHBkVFJVRSApDQorCXsNCisJCS8qIFB1dCBiYWNrIHRoZSBzd2l0Y2ggaW50ZXJydXB0IHJvdXRpbmVzIHRoYXQgd2FzIGluIHBsYWNlDQorCQliZWZvcmUgdGhlIHNjaGVkdWxlciBzdGFydGVkLiAqLw0KKwkJX2Rvc19zZXR2ZWN0KCBwb3J0U1dJVENIX0lOVF9OVU1CRVIsIHB4T2xkU3dpdGNoSVNSICk7DQorCX0NCiANCi0gICAgaWYoIHNTY2hlZHVsZXJSdW5uaW5nID09IHBkVFJVRSApDQotICAgIHsNCi0gICAgICAgIC8qIFB1dCBiYWNrIHRoZSBzd2l0Y2ggaW50ZXJydXB0IHJvdXRpbmVzIHRoYXQgd2FzIGluIHBsYWNlDQotICAgICAgICAgKiBiZWZvcmUgdGhlIHNjaGVkdWxlciBzdGFydGVkLiAqLw0KLSAgICAgICAgX2Rvc19zZXR2ZWN0KCBwb3J0U1dJVENIX0lOVF9OVU1CRVIsIHB4T2xkU3dpdGNoSVNSICk7DQotICAgIH0NCisJLyogRGlzYWJsZSB0aGUgdGltZXIgdXNlZCBmb3IgdGhlIHRpY2sgdG8gZW5zdXJlIHRoZSBzY2hlZHVsZXIgaXMNCisJbm90IGNhbGxlZCBiZWZvcmUgcmVzdG9yaW5nIGludGVycnVwdHMuICBUaGVyZSB3YXMgcHJldmlvdXNseSBub3RoaW5nDQorCW9uIHRoaXMgdGltZXIgc28gdGhlcmUgaXMgbm8gb2xkIElTUiB0byByZXN0b3JlLiAqLw0KKwlwb3J0T1VUUFVUX1dPUkQoIHBvcnRUSU1FUl8xX0NPTlRST0xfUkVHSVNURVIsIHVzVGltZXJEaXNhYmxlICk7DQogDQotICAgIC8qIERpc2FibGUgdGhlIHRpbWVyIHVzZWQgZm9yIHRoZSB0aWNrIHRvIGVuc3VyZSB0aGUgc2NoZWR1bGVyIGlzDQotICAgICAqIG5vdCBjYWxsZWQgYmVmb3JlIHJlc3RvcmluZyBpbnRlcnJ1cHRzLiAgVGhlcmUgd2FzIHByZXZpb3VzbHkgbm90aGluZw0KLSAgICAgKiBvbiB0aGlzIHRpbWVyIHNvIHRoZXJlIGlzIG5vIG9sZCBJU1IgdG8gcmVzdG9yZS4gKi8NCi0gICAgcG9ydE9VVFBVVF9XT1JEKCBwb3J0VElNRVJfMV9DT05UUk9MX1JFR0lTVEVSLCB1c1RpbWVyRGlzYWJsZSApOw0KLQ0KLSAgICAvKiBSZXN0YXJ0IHRoZSBET1MgdGljay4gKi8NCi0gICAgdXNUaW1lcjBDb250cm9sID0gcG9ydElOUFVUX1dPUkQoIHBvcnRUSU1FUl8wX0NPTlRST0xfUkVHSVNURVIgKTsNCi0gICAgdXNUaW1lcjBDb250cm9sIHw9IHBvcnRUSU1FUl9JTlRFUlJVUFRfRU5BQkxFOw0KLSAgICBwb3J0T1VUUFVUX1dPUkQoIHBvcnRUSU1FUl8wX0NPTlRST0xfUkVHSVNURVIsIHVzVGltZXIwQ29udHJvbCApOw0KKwkvKiBSZXN0YXJ0IHRoZSBET1MgdGljay4gKi8NCisJdXNUaW1lcjBDb250cm9sID0gcG9ydElOUFVUX1dPUkQoIHBvcnRUSU1FUl8wX0NPTlRST0xfUkVHSVNURVIgKTsNCisJdXNUaW1lcjBDb250cm9sIHw9IHBvcnRUSU1FUl9JTlRFUlJVUFRfRU5BQkxFOw0KKwlwb3J0T1VUUFVUX1dPUkQoIHBvcnRUSU1FUl8wX0NPTlRST0xfUkVHSVNURVIsIHVzVGltZXIwQ29udHJvbCApOw0KIA0KIA0KLSAgICBwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKTsNCisJcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHN0YXRpYyB2b2lkIHBydlNldFRpY2tGcmVxdWVuY3koIHVpbnQzMl90IHVsVGlja1JhdGVIeiApDQogew0KLSAgICBjb25zdCB1aW50MTZfdCB1c01heENvdW50UmVnaXN0ZXIgPSAweGZmNWE7DQotICAgIGNvbnN0IHVpbnQxNl90IHVzVGltZXJQcmlvcml0eVJlZ2lzdGVyID0gMHhmZjMyOw0KLSAgICBjb25zdCB1aW50MTZfdCB1c1RpbWVyRW5hYmxlID0gMHhDMDAwOw0KLSAgICBjb25zdCB1aW50MTZfdCB1c1JldHJpZ2dlciA9IDB4MDAwMTsNCi0gICAgY29uc3QgdWludDE2X3QgdXNUaW1lckhpZ2hQcmlvcml0eSA9IDB4MDAwMDsNCi0gICAgdWludDE2X3QgdXNUaW1lcjBDb250cm9sOw0KK2NvbnN0IHVpbnQxNl90IHVzTWF4Q291bnRSZWdpc3RlciA9IDB4ZmY1YTsNCitjb25zdCB1aW50MTZfdCB1c1RpbWVyUHJpb3JpdHlSZWdpc3RlciA9IDB4ZmYzMjsNCitjb25zdCB1aW50MTZfdCB1c1RpbWVyRW5hYmxlID0gMHhDMDAwOw0KK2NvbnN0IHVpbnQxNl90IHVzUmV0cmlnZ2VyID0gMHgwMDAxOw0KK2NvbnN0IHVpbnQxNl90IHVzVGltZXJIaWdoUHJpb3JpdHkgPSAweDAwMDA7DQordWludDE2X3QgdXNUaW1lcjBDb250cm9sOw0KIA0KIC8qICggQ1BVIGZyZXF1ZW5jeSAvIDQgKSAvIGNsb2NrIDIgbWF4IGNvdW50IFtpbnB3KCAweGZmNjIgKSA9IDddICovDQogDQotICAgIGNvbnN0IHVpbnQzMl90IHVsQ2xvY2tGcmVxdWVuY3kgPSAweDdmMzFhMDsNCitjb25zdCB1aW50MzJfdCB1bENsb2NrRnJlcXVlbmN5ID0gMHg3ZjMxYTA7DQogDQotICAgIHVpbnQzMl90IHVsVGltZXJDb3VudCA9IHVsQ2xvY2tGcmVxdWVuY3kgLyB1bFRpY2tSYXRlSHo7DQordWludDMyX3QgdWxUaW1lckNvdW50ID0gdWxDbG9ja0ZyZXF1ZW5jeSAvIHVsVGlja1JhdGVIejsNCiANCi0gICAgcG9ydE9VVFBVVF9XT1JEKCBwb3J0VElNRVJfMV9DT05UUk9MX1JFR0lTVEVSLCB1c1RpbWVyRW5hYmxlIHwgcG9ydFRJTUVSX0lOVEVSUlVQVF9FTkFCTEUgfCB1c1JldHJpZ2dlciApOw0KLSAgICBwb3J0T1VUUFVUX1dPUkQoIHVzTWF4Q291bnRSZWdpc3RlciwgKCB1aW50MTZfdCApIHVsVGltZXJDb3VudCApOw0KLSAgICBwb3J0T1VUUFVUX1dPUkQoIHVzVGltZXJQcmlvcml0eVJlZ2lzdGVyLCB1c1RpbWVySGlnaFByaW9yaXR5ICk7DQorCXBvcnRPVVRQVVRfV09SRCggcG9ydFRJTUVSXzFfQ09OVFJPTF9SRUdJU1RFUiwgdXNUaW1lckVuYWJsZSB8IHBvcnRUSU1FUl9JTlRFUlJVUFRfRU5BQkxFIHwgdXNSZXRyaWdnZXIgKTsNCisJcG9ydE9VVFBVVF9XT1JEKCB1c01heENvdW50UmVnaXN0ZXIsICggdWludDE2X3QgKSB1bFRpbWVyQ291bnQgKTsNCisJcG9ydE9VVFBVVF9XT1JEKCB1c1RpbWVyUHJpb3JpdHlSZWdpc3RlciwgdXNUaW1lckhpZ2hQcmlvcml0eSApOw0KIA0KLSAgICAvKiBTdG9wIHRoZSBET1MgdGljayAtIGRvbid0IGRvIHRoaXMgaWYgeW91IHdhbnQgdG8gbWFpbnRhaW4gYSBUT0QgY2xvY2suICovDQotICAgIHVzVGltZXIwQ29udHJvbCA9IHBvcnRJTlBVVF9XT1JEKCBwb3J0VElNRVJfMF9DT05UUk9MX1JFR0lTVEVSICk7DQotICAgIHVzVGltZXIwQ29udHJvbCAmPSB+cG9ydFRJTUVSX0lOVEVSUlVQVF9FTkFCTEU7DQotICAgIHBvcnRPVVRQVVRfV09SRCggcG9ydFRJTUVSXzBfQ09OVFJPTF9SRUdJU1RFUiwgdXNUaW1lcjBDb250cm9sICk7DQorCS8qIFN0b3AgdGhlIERPUyB0aWNrIC0gZG9uJ3QgZG8gdGhpcyBpZiB5b3Ugd2FudCB0byBtYWludGFpbiBhIFRPRCBjbG9jay4gKi8NCisJdXNUaW1lcjBDb250cm9sID0gcG9ydElOUFVUX1dPUkQoIHBvcnRUSU1FUl8wX0NPTlRST0xfUkVHSVNURVIgKTsNCisJdXNUaW1lcjBDb250cm9sICY9IH5wb3J0VElNRVJfSU5URVJSVVBUX0VOQUJMRTsNCisJcG9ydE9VVFBVVF9XT1JEKCBwb3J0VElNRVJfMF9DT05UUk9MX1JFR0lTVEVSLCB1c1RpbWVyMENvbnRyb2wgKTsNCiB9DQogDQogDQogLypsaW50ICtlOTUwICovDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvb1dhdGNvbS8xNkJpdERPUy9GbHNoMTg2L3BvcnRtYWNyby5oIGIvcG9ydGFibGUvb1dhdGNvbS8xNkJpdERPUy9GbHNoMTg2L3BvcnRtYWNyby5oCmluZGV4IDU3NDE0YzYuLjc1ZGJmZjAgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL29XYXRjb20vMTZCaXRET1MvRmxzaDE4Ni9wb3J0bWFjcm8uaAorKysgYi9wb3J0YWJsZS9vV2F0Y29tLzE2Qml0RE9TL0Zsc2gxODYvcG9ydG1hY3JvLmgKQEAgLTI2LDExICsyNiwxMSBAQAogICovDQogDQogI2lmbmRlZiBQT1JUTUFDUk9fSA0KLSAgICAjZGVmaW5lIFBPUlRNQUNST19IDQorI2RlZmluZSBQT1JUTUFDUk9fSA0KIA0KLSAgICAjaWZkZWYgX19jcGx1c3BsdXMNCi0gICAgICAgIGV4dGVybiAiQyIgew0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICogUG9ydCBzcGVjaWZpYyBkZWZpbml0aW9ucy4NCkBAIC00NCw2NiArNDQsNjcgQEAKIA0KIA0KIC8qIFR5cGUgZGVmaW5pdGlvbnMuICovDQotICAgICNkZWZpbmUgcG9ydENIQVIgICAgICAgICAgY2hhcg0KLSAgICAjZGVmaW5lIHBvcnRGTE9BVCAgICAgICAgIGZsb2F0DQotICAgICNkZWZpbmUgcG9ydERPVUJMRSAgICAgICAgbG9uZw0KLSAgICAjZGVmaW5lIHBvcnRMT05HICAgICAgICAgIGxvbmcNCi0gICAgI2RlZmluZSBwb3J0U0hPUlQgICAgICAgICBpbnQNCi0gICAgI2RlZmluZSBwb3J0U1RBQ0tfVFlQRSAgICB1aW50MTZfdA0KLSAgICAjZGVmaW5lIHBvcnRCQVNFX1RZUEUgICAgIHNob3J0DQorI2RlZmluZSBwb3J0Q0hBUiAgICAgICAgY2hhcg0KKyNkZWZpbmUgcG9ydEZMT0FUICAgICAgIGZsb2F0DQorI2RlZmluZSBwb3J0RE9VQkxFICAgICAgbG9uZw0KKyNkZWZpbmUgcG9ydExPTkcgICAgICAgIGxvbmcNCisjZGVmaW5lIHBvcnRTSE9SVCAgICAgICBpbnQNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFICB1aW50MTZfdA0KKyNkZWZpbmUgcG9ydEJBU0VfVFlQRQlzaG9ydA0KIA0KLSAgICB0eXBlZGVmIHBvcnRTVEFDS19UWVBFICAgU3RhY2tUeXBlX3Q7DQotICAgIHR5cGVkZWYgc2hvcnQgICAgICAgICAgICBCYXNlVHlwZV90Ow0KLSAgICB0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICAgVUJhc2VUeXBlX3Q7DQordHlwZWRlZiBwb3J0U1RBQ0tfVFlQRSBTdGFja1R5cGVfdDsNCit0eXBlZGVmIHNob3J0IEJhc2VUeXBlX3Q7DQordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBVQmFzZVR5cGVfdDsNCiANCiANCi0gICAgI2lmICggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCi0gICAgICAgIHR5cGVkZWYgdWludDE2X3QgICAgIFRpY2tUeXBlX3Q7DQotICAgICAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQotICAgICNlbHNlDQotICAgICAgICB0eXBlZGVmIHVpbnQzMl90ICAgICBUaWNrVHlwZV90Ow0KLSAgICAgICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICAgICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTA0KLSAgICAjZW5kaWYNCisjaWYoIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMSApDQorICAgICAgICB0eXBlZGVmIHVpbnQxNl90IFRpY2tUeXBlX3Q7DQorICAgICAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQorI2Vsc2UNCisgICAgICAgIHR5cGVkZWYgdWludDMyX3QgVGlja1R5cGVfdDsNCisgICAgICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAoIFRpY2tUeXBlX3QgKSAweGZmZmZmZmZmVUwNCisjZW5kaWYNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBDcml0aWNhbCBzZWN0aW9uIG1hbmFnZW1lbnQuICovDQotICAgIHZvaWQgcG9ydEVOVEVSX0NSSVRJQ0FMKCB2b2lkICk7DQotICAgICNwcmFnbWEgYXV4IHBvcnRFTlRFUl9DUklUSUNBTCA9ICJwdXNoZiIgXA0KLSAgICAiY2xpIjsNCit2b2lkIHBvcnRFTlRFUl9DUklUSUNBTCggdm9pZCApOw0KKyNwcmFnbWEgYXV4IHBvcnRFTlRFUl9DUklUSUNBTCA9ICJwdXNoZiIgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjbGkiOw0KIA0KLSAgICB2b2lkIHBvcnRFWElUX0NSSVRJQ0FMKCB2b2lkICk7DQotICAgICNwcmFnbWEgYXV4IHBvcnRFWElUX0NSSVRJQ0FMICAgPSAicG9wZiI7DQordm9pZCBwb3J0RVhJVF9DUklUSUNBTCggdm9pZCApOw0KKyNwcmFnbWEgYXV4IHBvcnRFWElUX0NSSVRJQ0FMICAgPSAicG9wZiI7DQogDQotICAgIHZvaWQgcG9ydERJU0FCTEVfSU5URVJSVVBUUyggdm9pZCApOw0KLSAgICAjcHJhZ21hIGF1eCBwb3J0RElTQUJMRV9JTlRFUlJVUFRTID0gImNsaSI7DQordm9pZCBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCB2b2lkICk7DQorI3ByYWdtYSBhdXggcG9ydERJU0FCTEVfSU5URVJSVVBUUyA9ICJjbGkiOw0KIA0KLSAgICB2b2lkIHBvcnRFTkFCTEVfSU5URVJSVVBUUyggdm9pZCApOw0KLSAgICAjcHJhZ21hIGF1eCBwb3J0RU5BQkxFX0lOVEVSUlVQVFMgPSAic3RpIjsNCit2b2lkIHBvcnRFTkFCTEVfSU5URVJSVVBUUyggdm9pZCApOw0KKyNwcmFnbWEgYXV4IHBvcnRFTkFCTEVfSU5URVJSVVBUUyA9ICJzdGkiOw0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIEFyY2hpdGVjdHVyZSBzcGVjaWZpY3MuICovDQotICAgICNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSCAgICAgICAgICggLTEgKQ0KLSAgICAjZGVmaW5lIHBvcnRTV0lUQ0hfSU5UX05VTUJFUiAgICAweDgwDQotICAgICNkZWZpbmUgcG9ydFlJRUxEKCkgICAgX19hc217IGludCBwb3J0U1dJVENIX0lOVF9OVU1CRVIgfQ0KLSAgICAjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUyAgICAgICAoICggVGlja1R5cGVfdCApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KLSAgICAjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVCAgICAgICAyDQotICAgICNkZWZpbmUgcG9ydElOSVRJQUxfU1cgICAgICAgICAgICggKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDIwMiApIC8qIFN0YXJ0IHRoZSB0YXNrcyB3aXRoIGludGVycnVwdHMgZW5hYmxlZC4gKi8NCi0gICAgI2RlZmluZSBwb3J0Tk9QKCkgICAgX19hc217IG5vcCB9DQorI2RlZmluZSBwb3J0U1RBQ0tfR1JPV1RIICAgICAgICAoIC0xICkNCisjZGVmaW5lIHBvcnRTV0lUQ0hfSU5UX05VTUJFUiAgIDB4ODANCisjZGVmaW5lIHBvcnRZSUVMRCgpICAgICAgICAgICAgIF9fYXNteyBpbnQgcG9ydFNXSVRDSF9JTlRfTlVNQkVSIH0NCisjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUyAgICAgICAgKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCisjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVCAgICAgIDINCisjZGVmaW5lIHBvcnRJTklUSUFMX1NXICAgICAgICAgICggKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDIwMiApICAgLyogU3RhcnQgdGhlIHRhc2tzIHdpdGggaW50ZXJydXB0cyBlbmFibGVkLiAqLw0KKyNkZWZpbmUgcG9ydE5PUCgpCQkJCV9fYXNteyBub3AgfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIENvbXBpbGVyIHNwZWNpZmljcy4gKi8NCi0gICAgI2RlZmluZSBwb3J0SU5QVVRfQllURSggeEFkZHIgKSAgICAgICAgICAgICAgaW5wKCB4QWRkciApDQotICAgICNkZWZpbmUgcG9ydE9VVFBVVF9CWVRFKCB4QWRkciwgdWNWYWx1ZSApICAgIG91dHAoIHhBZGRyLCB1Y1ZhbHVlICkNCi0gICAgI2RlZmluZSBwb3J0SU5QVVRfV09SRCggeEFkZHIgKSAgICAgICAgICAgICAgaW5wdyggeEFkZHIgKQ0KLSAgICAjZGVmaW5lIHBvcnRPVVRQVVRfV09SRCggeEFkZHIsIHVzVmFsdWUgKSAgICBvdXRwdyggeEFkZHIsIHVzVmFsdWUgKQ0KKyNkZWZpbmUgcG9ydElOUFVUX0JZVEUoIHhBZGRyICkgICAgICAgICAgICAgICAgIGlucCggeEFkZHIgKQ0KKyNkZWZpbmUgcG9ydE9VVFBVVF9CWVRFKCB4QWRkciwgdWNWYWx1ZSApICAgICAgIG91dHAoIHhBZGRyLCB1Y1ZhbHVlICkNCisjZGVmaW5lIHBvcnRJTlBVVF9XT1JEKCB4QWRkciApICAgICAgICAgICAgICAgICBpbnB3KCB4QWRkciApDQorI2RlZmluZSBwb3J0T1VUUFVUX1dPUkQoIHhBZGRyLCB1c1ZhbHVlICkgICAgICAgb3V0cHcoIHhBZGRyLCB1c1ZhbHVlICkNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBUYXNrIGZ1bmN0aW9uIG1hY3JvcyBhcyBkZXNjcmliZWQgb24gdGhlIEZyZWVSVE9TLm9yZyBXRUIgc2l0ZS4gKi8NCi0gICAgI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTl9QUk9UTyggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICB2b2lkIHZGdW5jdGlvbiggdm9pZCAqIHB2UGFyYW1ldGVycyApDQotICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgICAgICAgICAgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQorI2RlZmluZSBwb3J0VEFTS19GVU5DVElPTiggdkZ1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCiANCi0gICAgI2lmZGVmIF9fY3BsdXNwbHVzDQotICAgICAgICB9DQotICAgICNlbmRpZg0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCiANCiAjZW5kaWYgLyogUE9SVE1BQ1JPX0ggKi8NCisNCmRpZmYgLS1naXQgYS9wb3J0YWJsZS9vV2F0Y29tLzE2Qml0RE9TL1BDL3BvcnQuYyBiL3BvcnRhYmxlL29XYXRjb20vMTZCaXRET1MvUEMvcG9ydC5jCmluZGV4IDdlZjk3OWQuLmMyMGFkN2MgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL29XYXRjb20vMTZCaXRET1MvUEMvcG9ydC5jCisrKyBiL3BvcnRhYmxlL29XYXRjb20vMTZCaXRET1MvUEMvcG9ydC5jCkBAIC0yNiwyNyArMjYsMjcgQEAKICAqLw0KIA0KIC8qDQotICogQ2hhbmdlcyBmcm9tIFYxLjAwOg0KLSAqDQotICsgQ2FsbCB0byB0YXNrWUlFTEQoKSBmcm9tIHdpdGhpbiB0aWNrIElTUiBoYXMgYmVlbiByZXBsYWNlZCBieSB0aGUgbW9yZQ0KLSArICAgIGVmZmljaWVudCBwb3J0U1dJVENIX0NPTlRFWFQoKS4NCi0gKyBJU1IgZnVuY3Rpb24gZGVmaW5pdGlvbnMgcmVuYW1lZCB0byBpbmNsdWRlIHRoZSBwcnYgcHJlZml4Lg0KLSArDQotICsgQ2hhbmdlcyBmcm9tIFYxLjIuMDoNCi0gKw0KLSArIHBydlBvcnRSZXNldFBJQygpIGlzIG5vdyBjYWxsZWQgbGFzdCB0aGluZyBiZWZvcmUgdGhlIGVuZCBvZiB0aGUNCi0gKyAgICBwcmVlbXB0aXZlIHRpY2sgcm91dGluZS4NCi0gKw0KLSArIENoYW5nZXMgZnJvbSBWMi42LjENCi0gKw0KLSArIFJlcGxhY2VkIHRoZSBzVXNpbmdQcmVlbXB0aW9uIHZhcmlhYmxlIHdpdGggdGhlIGNvbmZpZ1VTRV9QUkVFTVBUSU9ODQotICsgICAgbWFjcm8gdG8gYmUgY29uc2lzdGVudCB3aXRoIHRoZSBsYXRlciBwb3J0cy4NCi0gKw0KLSArIENoYW5nZXMgZnJvbSBWNC4wLjENCi0gKw0KLSArIEFkZCBmdW5jdGlvbiBwcnZTZXRUaWNrRnJlcXVlbmN5RGVmYXVsdCgpIHRvIHNldCB0aGUgRE9TIHRpY2sgYmFjayB0bw0KLSArICAgIGl0cyBwcm9wZXIgdmFsdWUgd2hlbiB0aGUgc2NoZWR1bGVyIGV4aXRzLg0KLSAqLw0KK0NoYW5nZXMgZnJvbSBWMS4wMDoNCisJDQorCSsgQ2FsbCB0byB0YXNrWUlFTEQoKSBmcm9tIHdpdGhpbiB0aWNrIElTUiBoYXMgYmVlbiByZXBsYWNlZCBieSB0aGUgbW9yZQ0KKwkgIGVmZmljaWVudCBwb3J0U1dJVENIX0NPTlRFWFQoKS4NCisJKyBJU1IgZnVuY3Rpb24gZGVmaW5pdGlvbnMgcmVuYW1lZCB0byBpbmNsdWRlIHRoZSBwcnYgcHJlZml4Lg0KKw0KK0NoYW5nZXMgZnJvbSBWMS4yLjA6DQorDQorCSsgcHJ2UG9ydFJlc2V0UElDKCkgaXMgbm93IGNhbGxlZCBsYXN0IHRoaW5nIGJlZm9yZSB0aGUgZW5kIG9mIHRoZSANCisJICBwcmVlbXB0aXZlIHRpY2sgcm91dGluZS4NCisNCitDaGFuZ2VzIGZyb20gVjIuNi4xDQorDQorCSsgUmVwbGFjZWQgdGhlIHNVc2luZ1ByZWVtcHRpb24gdmFyaWFibGUgd2l0aCB0aGUgY29uZmlnVVNFX1BSRUVNUFRJT04NCisJICBtYWNybyB0byBiZSBjb25zaXN0ZW50IHdpdGggdGhlIGxhdGVyIHBvcnRzLg0KKw0KK0NoYW5nZXMgZnJvbSBWNC4wLjENCisJDQorCSsgQWRkIGZ1bmN0aW9uIHBydlNldFRpY2tGcmVxdWVuY3lEZWZhdWx0KCkgdG8gc2V0IHRoZSBET1MgdGljayBiYWNrIHRvDQorCSAgaXRzIHByb3BlciB2YWx1ZSB3aGVuIHRoZSBzY2hlZHVsZXIgZXhpdHMuIA0KKyovDQogDQogI2luY2x1ZGUgPHN0ZGxpYi5oPg0KICNpbmNsdWRlIDxzdGRpby5oPg0KQEAgLTU5LDEzICs1OSwxMyBAQAogI2luY2x1ZGUgInBvcnRhc20uaCINCiANCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotKiBJbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBwb3J0YWJsZS5oIGZvciB0aGUgaW5kdXN0cmlhbA0KLSogUEMgcG9ydC4NCi0qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorICogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFibGUuaCBmb3IgdGhlIGluZHVzdHJpYWwNCisgKiBQQyBwb3J0Lg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLypsaW50IC1lOTUwIE5vbiBBTlNJIHJlc2VydmVkIHdvcmRzIG9rYXkgaW4gdGhpcyBmaWxlIG9ubHkuICovDQogDQotI2RlZmluZSBwb3J0VElNRVJfSU5UX05VTUJFUiAgICAweDA4DQorI2RlZmluZSBwb3J0VElNRVJfSU5UX05VTUJFUgkweDA4DQogDQogLyogU2V0dXAgaGFyZHdhcmUgZm9yIHJlcXVpcmVkIHRpY2sgaW50ZXJydXB0IHJhdGUuICovDQogc3RhdGljIHZvaWQgcHJ2U2V0VGlja0ZyZXF1ZW5jeSggdWludDMyX3QgdWxUaWNrUmF0ZUh6ICk7DQpAQCAtNzQsNDMgKzc0LDQxIEBACiBzdGF0aWMgdm9pZCBwcnZFeGl0RnVuY3Rpb24oIHZvaWQgKTsNCiANCiAvKiBFaXRoZXIgY2hhaW4gdG8gdGhlIERPUyB0aWNrICh3aGljaCBpdHNlbGYgY2xlYXJzIHRoZSBQSUMpIG9yIGNsZWFyIHRoZSBQSUMNCi0gKiBkaXJlY3RseS4gIFdlIGNoYWluIHRvIHRoZSBET1MgdGljayBhcyBjbG9zZSBhcyBwb3NzaWJsZSB0byB0aGUgc3RhbmRhcmQgRE9TDQotICogdGljayByYXRlLiAqLw0KK2RpcmVjdGx5LiAgV2UgY2hhaW4gdG8gdGhlIERPUyB0aWNrIGFzIGNsb3NlIGFzIHBvc3NpYmxlIHRvIHRoZSBzdGFuZGFyZCBET1MNCit0aWNrIHJhdGUuICovDQogc3RhdGljIHZvaWQgcHJ2UG9ydFJlc2V0UElDKCB2b2lkICk7DQogDQogLyogVGhlIHRpY2sgSVNSIHVzZWQgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSBwcmVlbXB0aXZlIG9yIGNvb3BlcmF0aXZlIHNjaGVkdWxlcg0KLSAqIGlzIGJlaW5nIHVzZWQuICovDQoraXMgYmVpbmcgdXNlZC4gKi8NCiAjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMQ0KLQ0KLS8qIFRpY2sgc2VydmljZSByb3V0aW5lIHVzZWQgYnkgdGhlIHNjaGVkdWxlciB3aGVuIHByZWVtcHRpdmUgc2NoZWR1bGluZyBpcw0KLSAqIGJlaW5nIHVzZWQuICovDQotICAgIHN0YXRpYyB2b2lkIF9faW50ZXJydXB0IF9fZmFyIHBydlByZWVtcHRpdmVUaWNrKCB2b2lkICk7DQorCS8qIFRpY2sgc2VydmljZSByb3V0aW5lIHVzZWQgYnkgdGhlIHNjaGVkdWxlciB3aGVuIHByZWVtcHRpdmUgc2NoZWR1bGluZyBpcw0KKwliZWluZyB1c2VkLiAqLw0KKwlzdGF0aWMgdm9pZCBfX2ludGVycnVwdCBfX2ZhciBwcnZQcmVlbXB0aXZlVGljayggdm9pZCApOw0KICNlbHNlDQotDQotLyogVGljayBzZXJ2aWNlIHJvdXRpbmUgdXNlZCBieSB0aGUgc2NoZWR1bGVyIHdoZW4gY29vcGVyYXRpdmUgc2NoZWR1bGluZyBpcw0KLSAqIGJlaW5nIHVzZWQuICovDQotICAgIHN0YXRpYyB2b2lkIF9faW50ZXJydXB0IF9fZmFyIHBydk5vblByZWVtcHRpdmVUaWNrKCB2b2lkICk7DQorCS8qIFRpY2sgc2VydmljZSByb3V0aW5lIHVzZWQgYnkgdGhlIHNjaGVkdWxlciB3aGVuIGNvb3BlcmF0aXZlIHNjaGVkdWxpbmcgaXMgDQorCWJlaW5nIHVzZWQuICovDQorCXN0YXRpYyB2b2lkIF9faW50ZXJydXB0IF9fZmFyIHBydk5vblByZWVtcHRpdmVUaWNrKCB2b2lkICk7DQogI2VuZGlmDQogLyogVHJhcCByb3V0aW5lIHVzZWQgYnkgdGFza1lJRUxEKCkgdG8gbWFudWFsbHkgY2F1c2UgYSBjb250ZXh0IHN3aXRjaC4gKi8NCiBzdGF0aWMgdm9pZCBfX2ludGVycnVwdCBfX2ZhciBwcnZZaWVsZFByb2Nlc3Nvciggdm9pZCApOw0KIA0KIC8qIFNldCB0aGUgdGljayBmcmVxdWVuY3kgYmFjayBzbyB0aGUgZmxvcHB5IGRyaXZlIHdvcmtzIGNvcnJlY3RseSB3aGVuIHRoZQ0KLSAqIHNjaGVkdWxlciBleGl0cy4gKi8NCitzY2hlZHVsZXIgZXhpdHMuICovDQogc3RhdGljIHZvaWQgcHJ2U2V0VGlja0ZyZXF1ZW5jeURlZmF1bHQoIHZvaWQgKTsNCiANCiAvKmxpbnQgLWU5NTYgRmlsZSBzY29wZXMgbmVjZXNzYXJ5IGhlcmUuICovDQogDQogLyogVXNlZCB0byBzaWduYWwgd2hlbiB0byBjaGFpbiB0byB0aGUgRE9TIHRpY2ssIGFuZCB3aGVuIHRvIGp1c3QgY2xlYXIgdGhlIFBJQyBvdXJzZWx2ZXMuICovDQotc3RhdGljIGludDE2X3Qgc0RPU1RpY2tDb3VudGVyOw0KK3N0YXRpYyBpbnQxNl90IHNET1NUaWNrQ291bnRlcjsJCQkJCQkJDQogDQogLyogU2V0IHRydWUgd2hlbiB0aGUgdmVjdG9ycyBhcmUgc2V0IHNvIHRoZSBzY2hlZHVsZXIgd2lsbCBzZXJ2aWNlIHRoZSB0aWNrLiAqLw0KLXN0YXRpYyBpbnQxNl90IHNTY2hlZHVsZXJSdW5uaW5nID0gcGRGQUxTRTsNCitzdGF0aWMgaW50MTZfdCBzU2NoZWR1bGVyUnVubmluZyA9IHBkRkFMU0U7CQkJCQ0KIA0KIC8qIFBvaW50cyB0byB0aGUgb3JpZ2luYWwgcm91dGluZSBpbnN0YWxsZWQgb24gdGhlIHZlY3RvciB3ZSB1c2UgZm9yIG1hbnVhbCBjb250ZXh0IHN3aXRjaGVzLiAgVGhpcyBpcyB0aGVuIHVzZWQgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgcm91dGluZSBkdXJpbmcgcHJ2RXhpdEZ1bmN0aW9uKCkuICovDQotc3RhdGljIHZvaWQoIF9faW50ZXJydXB0IF9fZmFyICogcHhPbGRTd2l0Y2hJU1IgKSgpOw0KK3N0YXRpYyB2b2lkICggX19pbnRlcnJ1cHQgX19mYXIgKnB4T2xkU3dpdGNoSVNSICkoKTsJCQ0KIA0KIC8qIFBvaW50cyB0byB0aGUgb3JpZ2luYWwgcm91dGluZSBpbnN0YWxsZWQgb24gdGhlIHZlY3RvciB3ZSB1c2UgdG8gY2hhaW4gdG8gdGhlIERPUyB0aWNrLiAgVGhpcyBpcyB0aGVuIHVzZWQgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgcm91dGluZSBkdXJpbmcgcHJ2RXhpdEZ1bmN0aW9uKCkuICovDQotc3RhdGljIHZvaWQoIF9faW50ZXJydXB0IF9fZmFyICogcHhPbGRTd2l0Y2hJU1JQbHVzMSApKCk7DQorc3RhdGljIHZvaWQgKCBfX2ludGVycnVwdCBfX2ZhciAqcHhPbGRTd2l0Y2hJU1JQbHVzMSApKCk7CQ0KIA0KIC8qIFVzZWQgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgRE9TIGNvbnRleHQgd2hlbiB0aGUgc2NoZWR1bGVyIGlzIGVuZGVkLiAqLw0KIHN0YXRpYyBqbXBfYnVmIHhKdW1wQnVmOw0KQEAgLTEyMCwxOTAgKzExOCwxODUgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIEJhc2VUeXBlX3QgeFBvcnRTdGFydFNjaGVkdWxlciggdm9pZCApDQogew0KLSAgICBweElTUiBweE9yaWdpbmFsVGlja0lTUjsNCitweElTUiBweE9yaWdpbmFsVGlja0lTUjsNCisJDQorCS8qIFRoaXMgaXMgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBhbHJlYWR5IGRpc2FibGVkLiAqLw0KIA0KLSAgICAvKiBUaGlzIGlzIGNhbGxlZCB3aXRoIGludGVycnVwdHMgYWxyZWFkeSBkaXNhYmxlZC4gKi8NCisJLyogUmVtZW1iZXIgd2hhdCB3YXMgb24gdGhlIGludGVycnVwdHMgd2UgYXJlIGdvaW5nIHRvIHVzZQ0KKwlzbyB3ZSBjYW4gcHV0IHRoZW0gYmFjayBsYXRlciBpZiByZXF1aXJlZC4gKi8NCisJcHhPbGRTd2l0Y2hJU1IgPSBfZG9zX2dldHZlY3QoIHBvcnRTV0lUQ0hfSU5UX05VTUJFUiApOw0KKwlweE9yaWdpbmFsVGlja0lTUiA9IF9kb3NfZ2V0dmVjdCggcG9ydFRJTUVSX0lOVF9OVU1CRVIgKTsNCisJcHhPbGRTd2l0Y2hJU1JQbHVzMSA9IF9kb3NfZ2V0dmVjdCggcG9ydFNXSVRDSF9JTlRfTlVNQkVSICsgMSApOw0KIA0KLSAgICAvKiBSZW1lbWJlciB3aGF0IHdhcyBvbiB0aGUgaW50ZXJydXB0cyB3ZSBhcmUgZ29pbmcgdG8gdXNlDQotICAgICAqIHNvIHdlIGNhbiBwdXQgdGhlbSBiYWNrIGxhdGVyIGlmIHJlcXVpcmVkLiAqLw0KLSAgICBweE9sZFN3aXRjaElTUiA9IF9kb3NfZ2V0dmVjdCggcG9ydFNXSVRDSF9JTlRfTlVNQkVSICk7DQotICAgIHB4T3JpZ2luYWxUaWNrSVNSID0gX2Rvc19nZXR2ZWN0KCBwb3J0VElNRVJfSU5UX05VTUJFUiApOw0KLSAgICBweE9sZFN3aXRjaElTUlBsdXMxID0gX2Rvc19nZXR2ZWN0KCBwb3J0U1dJVENIX0lOVF9OVU1CRVIgKyAxICk7DQorCXBydlNldFRpY2tGcmVxdWVuY3koIGNvbmZpZ1RJQ0tfUkFURV9IWiApOw0KIA0KLSAgICBwcnZTZXRUaWNrRnJlcXVlbmN5KCBjb25maWdUSUNLX1JBVEVfSFogKTsNCisJLyogUHV0IG91ciBtYW51YWwgc3dpdGNoICh5aWVsZCkgZnVuY3Rpb24gb24gYSBrbm93bg0KKwl2ZWN0b3IuICovDQorCV9kb3Nfc2V0dmVjdCggcG9ydFNXSVRDSF9JTlRfTlVNQkVSLCBwcnZZaWVsZFByb2Nlc3NvciApOw0KIA0KLSAgICAvKiBQdXQgb3VyIG1hbnVhbCBzd2l0Y2ggKHlpZWxkKSBmdW5jdGlvbiBvbiBhIGtub3duDQotICAgICAqIHZlY3Rvci4gKi8NCi0gICAgX2Rvc19zZXR2ZWN0KCBwb3J0U1dJVENIX0lOVF9OVU1CRVIsIHBydllpZWxkUHJvY2Vzc29yICk7DQorCS8qIFB1dCB0aGUgb2xkIHRpY2sgb24gYSBkaWZmZXJlbnQgaW50ZXJydXB0IG51bWJlciBzbyB3ZSBjYW4NCisJY2FsbCBpdCB3aGVuIHdlIHdhbnQuICovDQorCV9kb3Nfc2V0dmVjdCggcG9ydFNXSVRDSF9JTlRfTlVNQkVSICsgMSwgcHhPcmlnaW5hbFRpY2tJU1IgKTsNCiANCi0gICAgLyogUHV0IHRoZSBvbGQgdGljayBvbiBhIGRpZmZlcmVudCBpbnRlcnJ1cHQgbnVtYmVyIHNvIHdlIGNhbg0KLSAgICAgKiBjYWxsIGl0IHdoZW4gd2Ugd2FudC4gKi8NCi0gICAgX2Rvc19zZXR2ZWN0KCBwb3J0U1dJVENIX0lOVF9OVU1CRVIgKyAxLCBweE9yaWdpbmFsVGlja0lTUiApOw0KKwkjaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMQ0KKwl7CQkNCisJCS8qIFB1dCBvdXIgdGljayBzd2l0Y2ggZnVuY3Rpb24gb24gdGhlIHRpbWVyIGludGVycnVwdC4gKi8NCisJCV9kb3Nfc2V0dmVjdCggcG9ydFRJTUVSX0lOVF9OVU1CRVIsIHBydlByZWVtcHRpdmVUaWNrICk7DQorCX0NCisJI2Vsc2UNCisJew0KKwkJLyogV2Ugd2FudCB0aGUgdGltZXIgaW50ZXJydXB0IHRvIGp1c3QgaW5jcmVtZW50IHRoZSB0aWNrIGNvdW50LiAqLw0KKwkJX2Rvc19zZXR2ZWN0KCBwb3J0VElNRVJfSU5UX05VTUJFUiwgcHJ2Tm9uUHJlZW1wdGl2ZVRpY2sgKTsNCisJfQ0KKwkjZW5kaWYNCiANCi0gICAgI2lmIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDENCi0gICAgICAgIHsNCi0gICAgICAgICAgICAvKiBQdXQgb3VyIHRpY2sgc3dpdGNoIGZ1bmN0aW9uIG9uIHRoZSB0aW1lciBpbnRlcnJ1cHQuICovDQotICAgICAgICAgICAgX2Rvc19zZXR2ZWN0KCBwb3J0VElNRVJfSU5UX05VTUJFUiwgcHJ2UHJlZW1wdGl2ZVRpY2sgKTsNCi0gICAgICAgIH0NCi0gICAgI2Vsc2UNCi0gICAgICAgIHsNCi0gICAgICAgICAgICAvKiBXZSB3YW50IHRoZSB0aW1lciBpbnRlcnJ1cHQgdG8ganVzdCBpbmNyZW1lbnQgdGhlIHRpY2sgY291bnQuICovDQotICAgICAgICAgICAgX2Rvc19zZXR2ZWN0KCBwb3J0VElNRVJfSU5UX05VTUJFUiwgcHJ2Tm9uUHJlZW1wdGl2ZVRpY2sgKTsNCi0gICAgICAgIH0NCi0gICAgI2VuZGlmDQorCS8qIFNldHVwIGEgY291bnRlciB0aGF0IGlzIHVzZWQgdG8gY2FsbCB0aGUgRE9TIGludGVycnVwdCBhcyBjbG9zZQ0KKwl0byBpdCdzIG9yaWdpbmFsIGZyZXF1ZW5jeSBhcyBjYW4gYmUgYWNoaWV2ZWQgZ2l2ZW4gb3VyIGNob3NlbiB0aWNrDQorCWZyZXF1ZW5jeS4gKi8NCisJc0RPU1RpY2tDb3VudGVyID0gcG9ydFRJQ0tTX1BFUl9ET1NfVElDSzsNCiANCi0gICAgLyogU2V0dXAgYSBjb3VudGVyIHRoYXQgaXMgdXNlZCB0byBjYWxsIHRoZSBET1MgaW50ZXJydXB0IGFzIGNsb3NlDQotICAgICAqIHRvIGl0J3Mgb3JpZ2luYWwgZnJlcXVlbmN5IGFzIGNhbiBiZSBhY2hpZXZlZCBnaXZlbiBvdXIgY2hvc2VuIHRpY2sNCi0gICAgICogZnJlcXVlbmN5LiAqLw0KLSAgICBzRE9TVGlja0NvdW50ZXIgPSBwb3J0VElDS1NfUEVSX0RPU19USUNLOw0KKwkvKiBDbGVhbiB1cCBmdW5jdGlvbiBpZiB3ZSB3YW50IHRvIHJldHVybiB0byBET1MuICovDQorCWlmKCBzZXRqbXAoIHhKdW1wQnVmICkgIT0gMCApDQorCXsNCisJCXBydkV4aXRGdW5jdGlvbigpOw0KKwkJc1NjaGVkdWxlclJ1bm5pbmcgPSBwZEZBTFNFOw0KKwl9DQorCWVsc2UNCisJew0KKwkJc1NjaGVkdWxlclJ1bm5pbmcgPSBwZFRSVUU7DQogDQotICAgIC8qIENsZWFuIHVwIGZ1bmN0aW9uIGlmIHdlIHdhbnQgdG8gcmV0dXJuIHRvIERPUy4gKi8NCi0gICAgaWYoIHNldGptcCggeEp1bXBCdWYgKSAhPSAwICkNCi0gICAgew0KLSAgICAgICAgcHJ2RXhpdEZ1bmN0aW9uKCk7DQotICAgICAgICBzU2NoZWR1bGVyUnVubmluZyA9IHBkRkFMU0U7DQotICAgIH0NCi0gICAgZWxzZQ0KLSAgICB7DQotICAgICAgICBzU2NoZWR1bGVyUnVubmluZyA9IHBkVFJVRTsNCisJCS8qIEtpY2sgb2ZmIHRoZSBzY2hlZHVsZXIgYnkgc2V0dGluZyB1cCB0aGUgY29udGV4dCBvZiB0aGUgZmlyc3QgdGFzay4gKi8NCisJCXBvcnRGSVJTVF9DT05URVhUKCk7DQorCX0NCiANCi0gICAgICAgIC8qIEtpY2sgb2ZmIHRoZSBzY2hlZHVsZXIgYnkgc2V0dGluZyB1cCB0aGUgY29udGV4dCBvZiB0aGUgZmlyc3QgdGFzay4gKi8NCi0gICAgICAgIHBvcnRGSVJTVF9DT05URVhUKCk7DQotICAgIH0NCi0NCi0gICAgcmV0dXJuIHNTY2hlZHVsZXJSdW5uaW5nOw0KKwlyZXR1cm4gc1NjaGVkdWxlclJ1bm5pbmc7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFRoZSB0aWNrIElTUiB1c2VkIGRlcGVuZHMgb24gd2hldGhlciB0aGUgcHJlZW1wdGl2ZSBvciBjb29wZXJhdGl2ZSBzY2hlZHVsZXINCi0gKiBpcyBiZWluZyB1c2VkLiAqLw0KK2lzIGJlaW5nIHVzZWQuICovDQogI2lmIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDENCisJLyogVGljayBzZXJ2aWNlIHJvdXRpbmUgdXNlZCBieSB0aGUgc2NoZWR1bGVyIHdoZW4gcHJlZW1wdGl2ZSBzY2hlZHVsaW5nIGlzDQorCWJlaW5nIHVzZWQuICovDQorCXN0YXRpYyB2b2lkIF9faW50ZXJydXB0IF9fZmFyIHBydlByZWVtcHRpdmVUaWNrKCB2b2lkICkNCisJew0KKwkJLyogR2V0IHRoZSBzY2hlZHVsZXIgdG8gdXBkYXRlIHRoZSB0YXNrIHN0YXRlcyBmb2xsb3dpbmcgdGhlIHRpY2suICovDQorCQlpZiggeFRhc2tJbmNyZW1lbnRUaWNrKCkgIT0gcGRGQUxTRSApDQorCQl7DQorCQkJLyogU3dpdGNoIGluIHRoZSBjb250ZXh0IG9mIHRoZSBuZXh0IHRhc2sgdG8gYmUgcnVuLiAqLw0KKwkJCXBvcnRTV0lUQ0hfQ09OVEVYVCgpOw0KKwkJfQ0KIA0KLS8qIFRpY2sgc2VydmljZSByb3V0aW5lIHVzZWQgYnkgdGhlIHNjaGVkdWxlciB3aGVuIHByZWVtcHRpdmUgc2NoZWR1bGluZyBpcw0KLSAqIGJlaW5nIHVzZWQuICovDQotICAgIHN0YXRpYyB2b2lkIF9faW50ZXJydXB0IF9fZmFyIHBydlByZWVtcHRpdmVUaWNrKCB2b2lkICkNCi0gICAgew0KLSAgICAgICAgLyogR2V0IHRoZSBzY2hlZHVsZXIgdG8gdXBkYXRlIHRoZSB0YXNrIHN0YXRlcyBmb2xsb3dpbmcgdGhlIHRpY2suICovDQotICAgICAgICBpZiggeFRhc2tJbmNyZW1lbnRUaWNrKCkgIT0gcGRGQUxTRSApDQotICAgICAgICB7DQotICAgICAgICAgICAgLyogU3dpdGNoIGluIHRoZSBjb250ZXh0IG9mIHRoZSBuZXh0IHRhc2sgdG8gYmUgcnVuLiAqLw0KLSAgICAgICAgICAgIHBvcnRTV0lUQ0hfQ09OVEVYVCgpOw0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgLyogUmVzZXQgdGhlIFBJQyByZWFkeSBmb3IgdGhlIG5leHQgdGltZS4gKi8NCi0gICAgICAgIHBydlBvcnRSZXNldFBJQygpOw0KLSAgICB9DQotI2Vsc2UgLyogaWYgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMSAqLw0KLSAgICBzdGF0aWMgdm9pZCBfX2ludGVycnVwdCBfX2ZhciBwcnZOb25QcmVlbXB0aXZlVGljayggdm9pZCApDQotICAgIHsNCi0gICAgICAgIC8qIFNhbWUgYXMgcHJlZW1wdGl2ZSB0aWNrLCBidXQgdGhlIGNvb3BlcmF0aXZlIHNjaGVkdWxlciBpcyBiZWluZyB1c2VkDQotICAgICAgICAgKiBzbyB3ZSBkb24ndCBoYXZlIHRvIHN3aXRjaCBpbiB0aGUgY29udGV4dCBvZiB0aGUgbmV4dCB0YXNrLiAqLw0KLSAgICAgICAgeFRhc2tJbmNyZW1lbnRUaWNrKCk7DQotICAgICAgICBwcnZQb3J0UmVzZXRQSUMoKTsNCi0gICAgfQ0KLSNlbmRpZiAvKiBpZiBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAxICovDQorCQkvKiBSZXNldCB0aGUgUElDIHJlYWR5IGZvciB0aGUgbmV4dCB0aW1lLiAqLw0KKwkJcHJ2UG9ydFJlc2V0UElDKCk7DQorCX0NCisjZWxzZQ0KKwlzdGF0aWMgdm9pZCBfX2ludGVycnVwdCBfX2ZhciBwcnZOb25QcmVlbXB0aXZlVGljayggdm9pZCApDQorCXsNCisJCS8qIFNhbWUgYXMgcHJlZW1wdGl2ZSB0aWNrLCBidXQgdGhlIGNvb3BlcmF0aXZlIHNjaGVkdWxlciBpcyBiZWluZyB1c2VkDQorCQlzbyB3ZSBkb24ndCBoYXZlIHRvIHN3aXRjaCBpbiB0aGUgY29udGV4dCBvZiB0aGUgbmV4dCB0YXNrLiAqLw0KKwkJeFRhc2tJbmNyZW1lbnRUaWNrKCk7DQorCQlwcnZQb3J0UmVzZXRQSUMoKTsNCisJfQ0KKyNlbmRpZg0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIA0KIHN0YXRpYyB2b2lkIF9faW50ZXJydXB0IF9fZmFyIHBydllpZWxkUHJvY2Vzc29yKCB2b2lkICkNCiB7DQotICAgIC8qIFN3aXRjaCBpbiB0aGUgY29udGV4dCBvZiB0aGUgbmV4dCB0YXNrIHRvIGJlIHJ1bi4gKi8NCi0gICAgcG9ydFNXSVRDSF9DT05URVhUKCk7DQorCS8qIFN3aXRjaCBpbiB0aGUgY29udGV4dCBvZiB0aGUgbmV4dCB0YXNrIHRvIGJlIHJ1bi4gKi8NCisJcG9ydFNXSVRDSF9DT05URVhUKCk7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHN0YXRpYyB2b2lkIHBydlBvcnRSZXNldFBJQyggdm9pZCApDQogew0KLSAgICAvKiBXZSBhcmUgZ29pbmcgdG8gY2FsbCB0aGUgRE9TIHRpY2sgaW50ZXJydXB0IGF0IGFzIGNsb3NlIGENCi0gICAgICogZnJlcXVlbmN5IHRvIHRoZSBub3JtYWwgRE9TIHRpY2sgYXMgcG9zc2libGUuICovDQorCS8qIFdlIGFyZSBnb2luZyB0byBjYWxsIHRoZSBET1MgdGljayBpbnRlcnJ1cHQgYXQgYXMgY2xvc2UgYQ0KKwlmcmVxdWVuY3kgdG8gdGhlIG5vcm1hbCBET1MgdGljayBhcyBwb3NzaWJsZS4gKi8NCiANCi0gICAgLyogV0UgU0hPVUxEIE5PVCBETyBUSElTIElGIFlJRUxEIFdBUyBDQUxMRUQuICovDQotICAgIC0tc0RPU1RpY2tDb3VudGVyOw0KLQ0KLSAgICBpZiggc0RPU1RpY2tDb3VudGVyIDw9IDAgKQ0KLSAgICB7DQotICAgICAgICBzRE9TVGlja0NvdW50ZXIgPSAoIGludDE2X3QgKSBwb3J0VElDS1NfUEVSX0RPU19USUNLOw0KLSAgICAgICAgX19hc20gew0KLSAgICAgICAgICAgIGludCBwb3J0U1dJVENIX0lOVF9OVU1CRVIgKyAxDQotICAgICAgICB9Ow0KLSAgICB9DQotICAgIGVsc2UNCi0gICAgew0KLSAgICAgICAgLyogUmVzZXQgdGhlIFBJQyBhcyB0aGUgRE9TIHRpY2sgaXMgbm90IGJlaW5nIGNhbGxlZCB0bw0KLSAgICAgICAgICogZG8gaXQuICovDQotICAgICAgICBfX2FzbQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIG1vdiBhbCwgMjBIDQotICAgICAgICAgICAgb3V0IDIwSCwgYWwNCi0gICAgICAgIH07DQotICAgIH0NCisJLyogV0UgU0hPVUxEIE5PVCBETyBUSElTIElGIFlJRUxEIFdBUyBDQUxMRUQuICovDQorCS0tc0RPU1RpY2tDb3VudGVyOw0KKwlpZiggc0RPU1RpY2tDb3VudGVyIDw9IDAgKQ0KKwl7DQorCQlzRE9TVGlja0NvdW50ZXIgPSAoIGludDE2X3QgKSBwb3J0VElDS1NfUEVSX0RPU19USUNLOw0KKwkJX19hc217IGludAlwb3J0U1dJVENIX0lOVF9OVU1CRVIgKyAxIH07CQkgDQorCX0NCisJZWxzZQ0KKwl7DQorCQkvKiBSZXNldCB0aGUgUElDIGFzIHRoZSBET1MgdGljayBpcyBub3QgYmVpbmcgY2FsbGVkIHRvDQorCQlkbyBpdC4gKi8NCisJCV9fYXNtDQorCQl7DQorCQkJbW92CWFsLCAyMEgNCisJCQlvdXQgMjBILCBhbA0KKwkJfTsNCisJfQ0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiB2b2lkIHZQb3J0RW5kU2NoZWR1bGVyKCB2b2lkICkNCiB7DQotICAgIC8qIEp1bXAgYmFjayB0byB0aGUgcHJvY2Vzc29yIHN0YXRlIHByaW9yIHRvIHN0YXJ0aW5nIHRoZQ0KLSAgICAgKiBzY2hlZHVsZXIuICBUaGlzIG1lYW5zIHdlIGFyZSBub3QgZ29pbmcgdG8gYmUgdXNpbmcgYQ0KLSAgICAgKiB0YXNrIHN0YWNrIGZyYW1lIHNvIHRoZSB0YXNrIGNhbiBiZSBkZWxldGVkLiAqLw0KLSAgICBsb25nam1wKCB4SnVtcEJ1ZiwgMSApOw0KKwkvKiBKdW1wIGJhY2sgdG8gdGhlIHByb2Nlc3NvciBzdGF0ZSBwcmlvciB0byBzdGFydGluZyB0aGUNCisJc2NoZWR1bGVyLiAgVGhpcyBtZWFucyB3ZSBhcmUgbm90IGdvaW5nIHRvIGJlIHVzaW5nIGENCisJdGFzayBzdGFjayBmcmFtZSBzbyB0aGUgdGFzayBjYW4gYmUgZGVsZXRlZC4gKi8NCisJbG9uZ2ptcCggeEp1bXBCdWYsIDEgKTsNCiB9DQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogc3RhdGljIHZvaWQgcHJ2RXhpdEZ1bmN0aW9uKCB2b2lkICkNCiB7DQotICAgIHZvaWQoIF9faW50ZXJydXB0IF9fZmFyICogcHhPcmlnaW5hbFRpY2tJU1IgKSgpOw0KK3ZvaWQgKCBfX2ludGVycnVwdCBfX2ZhciAqcHhPcmlnaW5hbFRpY2tJU1IgKSgpOw0KIA0KLSAgICAvKiBJbnRlcnJ1cHRzIHNob3VsZCBiZSBkaXNhYmxlZCBoZXJlIGFueXdheSAtIGJ1dCBubw0KLSAgICAgKiBoYXJtIGluIG1ha2luZyBzdXJlLiAqLw0KLSAgICBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7DQorCS8qIEludGVycnVwdHMgc2hvdWxkIGJlIGRpc2FibGVkIGhlcmUgYW55d2F5IC0gYnV0IG5vIA0KKwloYXJtIGluIG1ha2luZyBzdXJlLiAqLw0KKwlwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7DQorCWlmKCBzU2NoZWR1bGVyUnVubmluZyA9PSBwZFRSVUUgKQ0KKwl7DQorCQkvKiBTZXQgdGhlIERPUyB0aWNrIGJhY2sgb250byB0aGUgdGltZXIgdGlja2VyLiAqLw0KKwkJcHhPcmlnaW5hbFRpY2tJU1IgPSBfZG9zX2dldHZlY3QoIHBvcnRTV0lUQ0hfSU5UX05VTUJFUiArIDEgKTsNCisJCV9kb3Nfc2V0dmVjdCggcG9ydFRJTUVSX0lOVF9OVU1CRVIsIHB4T3JpZ2luYWxUaWNrSVNSICk7DQorCQlwcnZTZXRUaWNrRnJlcXVlbmN5RGVmYXVsdCgpOw0KIA0KLSAgICBpZiggc1NjaGVkdWxlclJ1bm5pbmcgPT0gcGRUUlVFICkNCi0gICAgew0KLSAgICAgICAgLyogU2V0IHRoZSBET1MgdGljayBiYWNrIG9udG8gdGhlIHRpbWVyIHRpY2tlci4gKi8NCi0gICAgICAgIHB4T3JpZ2luYWxUaWNrSVNSID0gX2Rvc19nZXR2ZWN0KCBwb3J0U1dJVENIX0lOVF9OVU1CRVIgKyAxICk7DQotICAgICAgICBfZG9zX3NldHZlY3QoIHBvcnRUSU1FUl9JTlRfTlVNQkVSLCBweE9yaWdpbmFsVGlja0lTUiApOw0KLSAgICAgICAgcHJ2U2V0VGlja0ZyZXF1ZW5jeURlZmF1bHQoKTsNCi0NCi0gICAgICAgIC8qIFB1dCBiYWNrIHRoZSBzd2l0Y2ggaW50ZXJydXB0IHJvdXRpbmVzIHRoYXQgd2FzIGluIHBsYWNlDQotICAgICAgICAgKiBiZWZvcmUgdGhlIHNjaGVkdWxlciBzdGFydGVkLiAqLw0KLSAgICAgICAgX2Rvc19zZXR2ZWN0KCBwb3J0U1dJVENIX0lOVF9OVU1CRVIsIHB4T2xkU3dpdGNoSVNSICk7DQotICAgICAgICBfZG9zX3NldHZlY3QoIHBvcnRTV0lUQ0hfSU5UX05VTUJFUiArIDEsIHB4T2xkU3dpdGNoSVNSUGx1czEgKTsNCi0gICAgfQ0KLQ0KLSAgICAvKiBUaGUgdGljayB0aW1lciBpcyBiYWNrIGhvdyBET1Mgd2FudHMgaXQuICBXZSBjYW4gcmUtZW5hYmxlDQotICAgICAqIGludGVycnVwdHMgd2l0aG91dCB0aGUgc2NoZWR1bGVyIGJlaW5nIGNhbGxlZC4gKi8NCi0gICAgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7DQorCQkvKiBQdXQgYmFjayB0aGUgc3dpdGNoIGludGVycnVwdCByb3V0aW5lcyB0aGF0IHdhcyBpbiBwbGFjZQ0KKwkJYmVmb3JlIHRoZSBzY2hlZHVsZXIgc3RhcnRlZC4gKi8NCisJCV9kb3Nfc2V0dmVjdCggcG9ydFNXSVRDSF9JTlRfTlVNQkVSLCBweE9sZFN3aXRjaElTUiApOw0KKwkJX2Rvc19zZXR2ZWN0KCBwb3J0U1dJVENIX0lOVF9OVU1CRVIgKyAxLCBweE9sZFN3aXRjaElTUlBsdXMxICk7DQorCX0NCisJLyogVGhlIHRpY2sgdGltZXIgaXMgYmFjayBob3cgRE9TIHdhbnRzIGl0LiAgV2UgY2FuIHJlLWVuYWJsZQ0KKwlpbnRlcnJ1cHRzIHdpdGhvdXQgdGhlIHNjaGVkdWxlciBiZWluZyBjYWxsZWQuICovDQorCXBvcnRFTkFCTEVfSU5URVJSVVBUUygpOw0KIH0NCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiBzdGF0aWMgdm9pZCBwcnZTZXRUaWNrRnJlcXVlbmN5KCB1aW50MzJfdCB1bFRpY2tSYXRlSHogKQ0KIHsNCi0gICAgY29uc3QgdWludDE2X3QgdXNQSVRfTU9ERSA9ICggdWludDE2X3QgKSAweDQzOw0KLSAgICBjb25zdCB1aW50MTZfdCB1c1BJVDAgPSAoIHVpbnQxNl90ICkgMHg0MDsNCi0gICAgY29uc3QgdWludDMyX3QgdWxQSVRfQ09OU1QgPSAoIHVpbnQzMl90ICkgMTE5MzE4MDsNCi0gICAgY29uc3QgdWludDE2X3QgdXM4MjU0X0NUUjBfTU9ERTMgPSAoIHVpbnQxNl90ICkgMHgzNjsNCi0gICAgdWludDMyX3QgdWxPdXRwdXQ7DQorY29uc3QgdWludDE2X3QgdXNQSVRfTU9ERSA9ICggdWludDE2X3QgKSAweDQzOw0KK2NvbnN0IHVpbnQxNl90IHVzUElUMCA9ICggdWludDE2X3QgKSAweDQwOw0KK2NvbnN0IHVpbnQzMl90IHVsUElUX0NPTlNUID0gKCB1aW50MzJfdCApIDExOTMxODA7DQorY29uc3QgdWludDE2X3QgdXM4MjU0X0NUUjBfTU9ERTMgPSAoIHVpbnQxNl90ICkgMHgzNjsNCit1aW50MzJfdCB1bE91dHB1dDsNCiANCi0gICAgLyogU2V0dXAgdGhlIDgyNDUgdG8gdGljayBhdCB0aGUgd2FudGVkIGZyZXF1ZW5jeS4gKi8NCi0gICAgcG9ydE9VVFBVVF9CWVRFKCB1c1BJVF9NT0RFLCB1czgyNTRfQ1RSMF9NT0RFMyApOw0KLSAgICB1bE91dHB1dCA9IHVsUElUX0NPTlNUIC8gdWxUaWNrUmF0ZUh6Ow0KLQ0KLSAgICBwb3J0T1VUUFVUX0JZVEUoIHVzUElUMCwgKCB1aW50MTZfdCApICggdWxPdXRwdXQgJiAoIHVpbnQzMl90ICkgMHhmZiApICk7DQotICAgIHVsT3V0cHV0ID4+PSA4Ow0KLSAgICBwb3J0T1VUUFVUX0JZVEUoIHVzUElUMCwgKCB1aW50MTZfdCApICggdWxPdXRwdXQgJiAoIHVpbnQzMl90ICkgMHhmZiApICk7DQorCS8qIFNldHVwIHRoZSA4MjQ1IHRvIHRpY2sgYXQgdGhlIHdhbnRlZCBmcmVxdWVuY3kuICovDQorCXBvcnRPVVRQVVRfQllURSggdXNQSVRfTU9ERSwgdXM4MjU0X0NUUjBfTU9ERTMgKTsNCisJdWxPdXRwdXQgPSB1bFBJVF9DT05TVCAvIHVsVGlja1JhdGVIejsNCisgICANCisJcG9ydE9VVFBVVF9CWVRFKCB1c1BJVDAsICggdWludDE2X3QgKSggdWxPdXRwdXQgJiAoIHVpbnQzMl90ICkgMHhmZiApICk7DQorCXVsT3V0cHV0ID4+PSA4Ow0KKwlwb3J0T1VUUFVUX0JZVEUoIHVzUElUMCwgKCB1aW50MTZfdCApICggdWxPdXRwdXQgJiAoIHVpbnQzMl90ICkgMHhmZiApICk7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIHN0YXRpYyB2b2lkIHBydlNldFRpY2tGcmVxdWVuY3lEZWZhdWx0KCB2b2lkICkNCiB7DQotICAgIGNvbnN0IHVpbnQxNl90IHVzUElUX01PREUgPSAoIHVpbnQxNl90ICkgMHg0MzsNCi0gICAgY29uc3QgdWludDE2X3QgdXNQSVQwID0gKCB1aW50MTZfdCApIDB4NDA7DQotICAgIGNvbnN0IHVpbnQxNl90IHVzODI1NF9DVFIwX01PREUzID0gKCB1aW50MTZfdCApIDB4MzY7DQorY29uc3QgdWludDE2X3QgdXNQSVRfTU9ERSA9ICggdWludDE2X3QgKSAweDQzOw0KK2NvbnN0IHVpbnQxNl90IHVzUElUMCA9ICggdWludDE2X3QgKSAweDQwOw0KK2NvbnN0IHVpbnQxNl90IHVzODI1NF9DVFIwX01PREUzID0gKCB1aW50MTZfdCApIDB4MzY7DQogDQotICAgIHBvcnRPVVRQVVRfQllURSggdXNQSVRfTU9ERSwgdXM4MjU0X0NUUjBfTU9ERTMgKTsNCi0gICAgcG9ydE9VVFBVVF9CWVRFKCB1c1BJVDAsIDAgKTsNCi0gICAgcG9ydE9VVFBVVF9CWVRFKCB1c1BJVDAsIDAgKTsNCisJcG9ydE9VVFBVVF9CWVRFKCB1c1BJVF9NT0RFLCB1czgyNTRfQ1RSMF9NT0RFMyApOw0KKwlwb3J0T1VUUFVUX0JZVEUoIHVzUElUMCwwICk7DQorCXBvcnRPVVRQVVRfQllURSggdXNQSVQwLDAgKTsNCiB9DQogDQogDQogLypsaW50ICtlOTUwICovDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvb1dhdGNvbS8xNkJpdERPUy9QQy9wb3J0bWFjcm8uaCBiL3BvcnRhYmxlL29XYXRjb20vMTZCaXRET1MvUEMvcG9ydG1hY3JvLmgKaW5kZXggNzQ4OWZmZS4uZDY1ZWQzNiAxMDA2NDQKLS0tIGEvcG9ydGFibGUvb1dhdGNvbS8xNkJpdERPUy9QQy9wb3J0bWFjcm8uaAorKysgYi9wb3J0YWJsZS9vV2F0Y29tLzE2Qml0RE9TL1BDL3BvcnRtYWNyby5oCkBAIC0yNiwxMSArMjYsMTEgQEAKICAqLw0KIA0KICNpZm5kZWYgUE9SVE1BQ1JPX0gNCi0gICAgI2RlZmluZSBQT1JUTUFDUk9fSA0KKyNkZWZpbmUgUE9SVE1BQ1JPX0gNCiANCi0gICAgI2lmZGVmIF9fY3BsdXNwbHVzDQotICAgICAgICBleHRlcm4gIkMiIHsNCi0gICAgI2VuZGlmDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQogDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAqIFBvcnQgc3BlY2lmaWMgZGVmaW5pdGlvbnMuDQpAQCAtNDMsNjkgKzQzLDcwIEBACiAgKi8NCiANCiAvKiBUeXBlIGRlZmluaXRpb25zLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRDSEFSICAgICAgICAgIGNoYXINCi0gICAgI2RlZmluZSBwb3J0RkxPQVQgICAgICAgICBmbG9hdA0KLSAgICAjZGVmaW5lIHBvcnRET1VCTEUgICAgICAgIGRvdWJsZQ0KLSAgICAjZGVmaW5lIHBvcnRMT05HICAgICAgICAgIGxvbmcNCi0gICAgI2RlZmluZSBwb3J0U0hPUlQgICAgICAgICBpbnQNCi0gICAgI2RlZmluZSBwb3J0U1RBQ0tfVFlQRSAgICB1aW50MTZfdA0KLSAgICAjZGVmaW5lIHBvcnRCQVNFX1RZUEUgICAgIHNob3J0DQorI2RlZmluZSBwb3J0Q0hBUgkJY2hhcg0KKyNkZWZpbmUgcG9ydEZMT0FUCQlmbG9hdA0KKyNkZWZpbmUgcG9ydERPVUJMRQkJZG91YmxlDQorI2RlZmluZSBwb3J0TE9ORwkJbG9uZw0KKyNkZWZpbmUgcG9ydFNIT1JUCQlpbnQNCisjZGVmaW5lIHBvcnRTVEFDS19UWVBFCXVpbnQxNl90DQorI2RlZmluZSBwb3J0QkFTRV9UWVBFCXNob3J0DQogDQotICAgIHR5cGVkZWYgcG9ydFNUQUNLX1RZUEUgICBTdGFja1R5cGVfdDsNCi0gICAgdHlwZWRlZiBzaG9ydCAgICAgICAgICAgIEJhc2VUeXBlX3Q7DQotICAgIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgICBVQmFzZVR5cGVfdDsNCit0eXBlZGVmIHBvcnRTVEFDS19UWVBFIFN0YWNrVHlwZV90Ow0KK3R5cGVkZWYgc2hvcnQgQmFzZVR5cGVfdDsNCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IFVCYXNlVHlwZV90Ow0KIA0KIA0KLSAgICAjaWYgKCBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDEgKQ0KLSAgICAgICAgdHlwZWRlZiB1aW50MTZfdCAgICAgVGlja1R5cGVfdDsNCi0gICAgICAgICNkZWZpbmUgcG9ydE1BWF9ERUxBWSAgICAoIFRpY2tUeXBlX3QgKSAweGZmZmYNCi0gICAgI2Vsc2UNCi0gICAgICAgIHR5cGVkZWYgdWludDMyX3QgICAgIFRpY2tUeXBlX3Q7DQotICAgICAgICAjZGVmaW5lIHBvcnRNQVhfREVMQVkgICAgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQotICAgICNlbmRpZg0KKyNpZiggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCisJdHlwZWRlZiB1aW50MTZfdCBUaWNrVHlwZV90Ow0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmDQorI2Vsc2UNCisJdHlwZWRlZiB1aW50MzJfdCBUaWNrVHlwZV90Ow0KKwkjZGVmaW5lIHBvcnRNQVhfREVMQVkgKCBUaWNrVHlwZV90ICkgMHhmZmZmZmZmZlVMDQorI2VuZGlmDQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogDQogLyogQ3JpdGljYWwgc2VjdGlvbiBkZWZpbml0aW9ucy4gIHBvcnRFTlRFUl9DUklUSUNBTCgpIG11c3QgYmUgZGVmaW5lZCBhcyBhDQotICogbWFjcm8gZm9yIHBvcnRhYmxlLmggdG8gd29yayBwcm9wZXJseS4gKi8NCi0gICAgdm9pZCBwb3J0TE9DQUxfRU5URVJfQ1JJVElDQUwoIHZvaWQgKTsNCi0gICAgI3ByYWdtYSBhdXggcG9ydExPQ0FMX0VOVEVSX0NSSVRJQ0FMID0gICJwdXNoZiIgXA0KLSAgICAiY2xpIjsNCi0gICAgI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKSAgICBwb3J0TE9DQUxfRU5URVJfQ1JJVElDQUwoKQ0KK21hY3JvIGZvciBwb3J0YWJsZS5oIHRvIHdvcmsgcHJvcGVybHkuICovDQordm9pZCBwb3J0TE9DQUxfRU5URVJfQ1JJVElDQUwoIHZvaWQgKTsNCisjcHJhZ21hIGF1eCBwb3J0TE9DQUxfRU5URVJfQ1JJVElDQUwgPSAJInB1c2hmIiBcDQorCQkJCQkJCQkJCSJjbGkiOw0KKyNkZWZpbmUgcG9ydEVOVEVSX0NSSVRJQ0FMKCkgcG9ydExPQ0FMX0VOVEVSX0NSSVRJQ0FMKCkNCiANCi0gICAgdm9pZCBwb3J0RVhJVF9DUklUSUNBTCggdm9pZCApOw0KLSAgICAjcHJhZ21hIGF1eCBwb3J0RVhJVF9DUklUSUNBTAk9CQkicG9wZiI7DQordm9pZCBwb3J0RVhJVF9DUklUSUNBTCggdm9pZCApOw0KKyNwcmFnbWEgYXV4IHBvcnRFWElUX0NSSVRJQ0FMCT0JCSJwb3BmIjsNCiANCi0gICAgdm9pZCBwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCB2b2lkICk7DQotICAgICNwcmFnbWEgYXV4IHBvcnRESVNBQkxFX0lOVEVSUlVQVFMgPQkiY2xpIjsNCit2b2lkIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoIHZvaWQgKTsNCisjcHJhZ21hIGF1eCBwb3J0RElTQUJMRV9JTlRFUlJVUFRTID0JImNsaSI7DQogDQotICAgIHZvaWQgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCB2b2lkICk7DQotICAgICNwcmFnbWEgYXV4IHBvcnRFTkFCTEVfSU5URVJSVVBUUyA9CQkic3RpIjsNCit2b2lkIHBvcnRFTkFCTEVfSU5URVJSVVBUUyggdm9pZCApOw0KKyNwcmFnbWEgYXV4IHBvcnRFTkFCTEVfSU5URVJSVVBUUyA9CQkic3RpIjsNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWNzLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRTVEFDS19HUk9XVEggICAgICAgICAgKCAtMSApDQotICAgICNkZWZpbmUgcG9ydFNXSVRDSF9JTlRfTlVNQkVSICAgICAweDgwDQotICAgICNkZWZpbmUgcG9ydFlJRUxEKCkgICAgX19hc217IGludCBwb3J0U1dJVENIX0lOVF9OVU1CRVIgfQ0KLSAgICAjZGVmaW5lIHBvcnRET1NfVElDS19SQVRFICAgICAgICAgKCAxOC4yMDY0OCApDQotICAgICNkZWZpbmUgcG9ydFRJQ0tfUEVSSU9EX01TICAgICAgICAoICggVGlja1R5cGVfdCApIDEwMDAgLyBjb25maWdUSUNLX1JBVEVfSFogKQ0KLSAgICAjZGVmaW5lIHBvcnRUSUNLU19QRVJfRE9TX1RJQ0sgICAgKCAoIHVpbnQxNl90ICkgKCAoICggcG9ydERPVUJMRSApIGNvbmZpZ1RJQ0tfUkFURV9IWiAvIHBvcnRET1NfVElDS19SQVRFICkgKyAwLjUgKSApDQotICAgICNkZWZpbmUgcG9ydElOSVRJQUxfU1cgICAgICAgICAgICAoICggcG9ydFNUQUNLX1RZUEUgKSAweDAyMDIgKSAvKiBTdGFydCB0aGUgdGFza3Mgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQuICovDQotICAgICNkZWZpbmUgcG9ydEJZVEVfQUxJR05NRU5UICAgICAgICAoIDIgKQ0KKyNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSAkJKCAtMSApDQorI2RlZmluZSBwb3J0U1dJVENIX0lOVF9OVU1CRVIgCTB4ODANCisjZGVmaW5lIHBvcnRZSUVMRCgpCQkJCV9fYXNteyBpbnQgcG9ydFNXSVRDSF9JTlRfTlVNQkVSIH0NCisjZGVmaW5lIHBvcnRET1NfVElDS19SQVRFCQkoIDE4LjIwNjQ4ICkNCisjZGVmaW5lIHBvcnRUSUNLX1BFUklPRF9NUyAgICAgICAgKCAoIFRpY2tUeXBlX3QgKSAxMDAwIC8gY29uZmlnVElDS19SQVRFX0haICkNCisjZGVmaW5lIHBvcnRUSUNLU19QRVJfRE9TX1RJQ0sJKCAoIHVpbnQxNl90ICkgKCAoICggcG9ydERPVUJMRSApIGNvbmZpZ1RJQ0tfUkFURV9IWiAvIHBvcnRET1NfVElDS19SQVRFICkgKyAwLjUgKSApDQorI2RlZmluZSBwb3J0SU5JVElBTF9TVwkJCSggKCBwb3J0U1RBQ0tfVFlQRSApIDB4MDIwMiApCS8qIFN0YXJ0IHRoZSB0YXNrcyB3aXRoIGludGVycnVwdHMgZW5hYmxlZC4gKi8NCisjZGVmaW5lIHBvcnRCWVRFX0FMSUdOTUVOVAkJKCAyICkNCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCiAvKiBDb21waWxlciBzcGVjaWZpY3MuICovDQotICAgICNkZWZpbmUgcG9ydElOUFVUX0JZVEUoIHhBZGRyICkgICAgICAgICAgICAgIGlucCggeEFkZHIgKQ0KLSAgICAjZGVmaW5lIHBvcnRPVVRQVVRfQllURSggeEFkZHIsIHVjVmFsdWUgKSAgICBvdXRwKCB4QWRkciwgdWNWYWx1ZSApDQotICAgICNkZWZpbmUgcG9ydE5PUCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXNteyBub3AgfQ0KKyNkZWZpbmUgcG9ydElOUFVUX0JZVEUoIHhBZGRyICkJCQkJaW5wKCB4QWRkciApDQorI2RlZmluZSBwb3J0T1VUUFVUX0JZVEUoIHhBZGRyLCB1Y1ZhbHVlICkJb3V0cCggeEFkZHIsIHVjVmFsdWUgKQ0KKyNkZWZpbmUgcG9ydE5PUCgpIF9fYXNteyBub3AgfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFRhc2sgZnVuY3Rpb24gbWFjcm9zIGFzIGRlc2NyaWJlZCBvbiB0aGUgRnJlZVJUT1Mub3JnIFdFQiBzaXRlLiAqLw0KLSAgICAjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCB2VGFza0Z1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICB2b2lkIHZUYXNrRnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KLSAgICAjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2VGFza0Z1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSAgICAgICAgICB2b2lkIHZUYXNrRnVuY3Rpb24oIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KKyNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZUYXNrRnVuY3Rpb24sIHB2UGFyYW1ldGVycyApIHZvaWQgdlRhc2tGdW5jdGlvbiggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCisjZGVmaW5lIHBvcnRUQVNLX0ZVTkNUSU9OKCB2VGFza0Z1bmN0aW9uLCBwdlBhcmFtZXRlcnMgKSB2b2lkIHZUYXNrRnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQogDQotICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KLSAgICAgICAgfQ0KLSAgICAjZW5kaWYNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQogDQogDQogI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQorDQpkaWZmIC0tZ2l0IGEvcG9ydGFibGUvb1dhdGNvbS8xNkJpdERPUy9jb21tb24vcG9ydGFzbS5oIGIvcG9ydGFibGUvb1dhdGNvbS8xNkJpdERPUy9jb21tb24vcG9ydGFzbS5oCmluZGV4IGJiNWI5ZTcuLjVhM2YyNTAgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL29XYXRjb20vMTZCaXRET1MvY29tbW9uL3BvcnRhc20uaAorKysgYi9wb3J0YWJsZS9vV2F0Y29tLzE2Qml0RE9TL2NvbW1vbi9wb3J0YXNtLmgKQEAgLTI5LDEwICsyOSwxMCBAQAogZXh0ZXJuIHZvbGF0aWxlIFRDQl90ICogdm9sYXRpbGUgcHhDdXJyZW50VENCOw0KIGV4dGVybiB2b2lkIHZUYXNrU3dpdGNoQ29udGV4dCggdm9pZCApOw0KIA0KLS8qDQotICogU2F2ZXMgdGhlIHN0YWNrIHBvaW50ZXIgZm9yIG9uZSB0YXNrIGludG8gaXRzIFRDQiwgY2FsbHMNCi0gKiB2VGFza1N3aXRjaENvbnRleHQoKSB0byB1cGRhdGUgdGhlIFRDQiBiZWluZyB1c2VkLCB0aGVuIHJlc3RvcmVzIHRoZSBzdGFjaw0KLSAqIGZyb20gdGhlIG5ldyBUQ0IgcmVhZCB0byBydW4gdGhlIHRhc2suDQorLyogDQorICogU2F2ZXMgdGhlIHN0YWNrIHBvaW50ZXIgZm9yIG9uZSB0YXNrIGludG8gaXRzIFRDQiwgY2FsbHMgDQorICogdlRhc2tTd2l0Y2hDb250ZXh0KCkgdG8gdXBkYXRlIHRoZSBUQ0IgYmVpbmcgdXNlZCwgdGhlbiByZXN0b3JlcyB0aGUgc3RhY2sgDQorICogZnJvbSB0aGUgbmV3IFRDQiByZWFkIHRvIHJ1biB0aGUgdGFzay4gDQogICovDQogdm9pZCBwb3J0U1dJVENIX0NPTlRFWFQoIHZvaWQgKTsNCiANCkBAIC00NCw2NSArNDQsNjcgQEAKIHZvaWQgcG9ydEZJUlNUX0NPTlRFWFQoIHZvaWQgKTsNCiANCiAvKiBUaGVyZSBhcmUgc2xpZ2h0bHkgZGlmZmVyZW50IHZlcnNpb25zIGRlcGVuZGluZyBvbiB3aGV0aGVyIHlvdSBhcmUgYnVpbGRpbmcNCi0gKiB0byBpbmNsdWRlIGRlYnVnZ2VyIGluZm9ybWF0aW9uLiAgSWYgZGVidWdnZXIgaW5mb3JtYXRpb24gaXMgdXNlZCB0aGVuIHRoZXJlDQotICogYXJlIGEgY291cGxlIG9mIGV4dHJhIGJ5dGVzIGxlZnQgb2YgdGhlIElTUiBzdGFjayAocHJlc3VtYWJseSBmb3IgdXNlIGJ5IHRoZQ0KLSAqIGRlYnVnZ2VyKS4gIFRoZSB0cnVlIHN0YWNrIHBvaW50ZXIgaXMgdGhlbiBzdG9yZWQgaW4gdGhlIGJwIHJlZ2lzdGVyLiAgV2UgYWRkDQotICogMiB0byB0aGUgc3RhY2sgcG9pbnRlciB0byByZW1vdmUgdGhlIGV4dHJhIGJ5dGVzIGJlZm9yZSB3ZSByZXN0b3JlIG91ciBjb250ZXh0LiAqLw0KK3RvIGluY2x1ZGUgZGVidWdnZXIgaW5mb3JtYXRpb24uICBJZiBkZWJ1Z2dlciBpbmZvcm1hdGlvbiBpcyB1c2VkIHRoZW4gdGhlcmUNCithcmUgYSBjb3VwbGUgb2YgZXh0cmEgYnl0ZXMgbGVmdCBvZiB0aGUgSVNSIHN0YWNrIChwcmVzdW1hYmx5IGZvciB1c2UgYnkgdGhlDQorZGVidWdnZXIpLiAgVGhlIHRydWUgc3RhY2sgcG9pbnRlciBpcyB0aGVuIHN0b3JlZCBpbiB0aGUgYnAgcmVnaXN0ZXIuICBXZSBhZGQNCisyIHRvIHRoZSBzdGFjayBwb2ludGVyIHRvIHJlbW92ZSB0aGUgZXh0cmEgYnl0ZXMgYmVmb3JlIHdlIHJlc3RvcmUgb3VyIGNvbnRleHQuICovDQogDQogI2lmZGVmIERFQlVHX0JVSUxEDQogDQotICAgICNwcmFnbWEgYXV4IHBvcnRTV0lUQ0hfQ09OVEVYVCA9CSJtb3YJYXgsIHNlZyBweEN1cnJlbnRUQ0IiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgIm1vdglkcywgYXgiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAibGVzCWJ4LCBweEN1cnJlbnRUQ0IiCQkJLyogU2F2ZSB0aGUgc3RhY2sgcG9pbnRlciBpbnRvIHRoZSBUQ0IuICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAibW92CWVzOjB4MlsgYnggXSwgc3MiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICJtb3YJZXM6WyBieCBdLCBzcCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgImNhbGwJdlRhc2tTd2l0Y2hDb250ZXh0IgkJCS8qIFBlcmZvcm0gdGhlIHN3aXRjaC4gKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgIm1vdglheCwgc2VnIHB4Q3VycmVudFRDQiIJCS8qIFJlc3RvcmUgdGhlIHN0YWNrIHBvaW50ZXIgZnJvbSB0aGUgVENCLiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgIm1vdglkcywgYXgiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAibGVzCWJ4LCBkd29yZCBwdHIgcHhDdXJyZW50VENCIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICJtb3YJc3MsIGVzOlsgYnggKyAyIF0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgIm1vdglzcCwgZXM6WyBieCBdIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAibW92CWJwLCBzcCIJCQkJCQkvKiBQcmVwYWlyIHRoZSBicCByZWdpc3RlciBmb3IgdGhlIHJlc3RvcmF0aW9uIG9mIHRoZSBTUCBpbiB0aGUgY29tcGlsZXIgZ2VuZXJhdGVkIHBvcnRpb24gb2YgdGhlIElTUiAqL1wNCi0gICAgImFkZAlicCwgMHgwMDAyIg0KKwkjcHJhZ21hIGF1eCBwb3J0U1dJVENIX0NPTlRFWFQgPQkibW92CWF4LCBzZWcgcHhDdXJyZW50VENCIgkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkibW92CWRzLCBheCIJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCSJsZXMJYngsIHB4Q3VycmVudFRDQiIJCQkvKiBTYXZlIHRoZSBzdGFjayBwb2ludGVyIGludG8gdGhlIFRDQi4gKi8JCVwNCisJCQkJCQkJCQkJIm1vdgllczoweDJbIGJ4IF0sIHNzIgkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJIm1vdgllczpbIGJ4IF0sIHNwIgkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCSJjYWxsCXZUYXNrU3dpdGNoQ29udGV4dCIJCQkvKiBQZXJmb3JtIHRoZSBzd2l0Y2guICovCQkJCQkJXA0KKwkJCQkJCQkJCQkibW92CWF4LCBzZWcgcHhDdXJyZW50VENCIgkJLyogUmVzdG9yZSB0aGUgc3RhY2sgcG9pbnRlciBmcm9tIHRoZSBUQ0IuICovCVwNCisJCQkJCQkJCQkJIm1vdglkcywgYXgiCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkibGVzCWJ4LCBkd29yZCBwdHIgcHhDdXJyZW50VENCIgkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCSJtb3YJc3MsIGVzOlsgYnggKyAyIF0iCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkibW92CXNwLCBlczpbIGJ4IF0iCQkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJIm1vdglicCwgc3AiCQkJCQkJLyogUHJlcGFpciB0aGUgYnAgcmVnaXN0ZXIgZm9yIHRoZSByZXN0b3JhdGlvbiBvZiB0aGUgU1AgaW4gdGhlIGNvbXBpbGVyIGdlbmVyYXRlZCBwb3J0aW9uIG9mIHRoZSBJU1IgKi8JXA0KKwkJCQkJCQkJCQkiYWRkCWJwLCAweDAwMDIiDQorDQorCQkJCQkJCQkJCQ0KKw0KKwkjcHJhZ21hIGF1eCBwb3J0RklSU1RfQ09OVEVYVCA9CQkibW92CWF4LCBzZWcgcHhDdXJyZW50VENCIgkJCVwNCisJCQkJCQkJCQkJIm1vdglkcywgYXgiCQkJCQkJCVwNCisJCQkJCQkJCQkJImxlcwlieCwgZHdvcmQgcHRyIHB4Q3VycmVudFRDQiIJCVwNCisJCQkJCQkJCQkJIm1vdglzcywgZXM6WyBieCArIDIgXSIJCQkJXA0KKwkJCQkJCQkJCQkibW92CXNwLCBlczpbIGJ4IF0iCQkJCQlcDQorCQkJCQkJCQkJCSJhZGQJc3AsIDB4MDAwMiIJCQkJCQkvKiBSZW1vdmUgdGhlIGV4dHJhIGJ5dGVzIHRoYXQgZXhpc3QgaW4gZGVidWcgYnVpbGRzIGJlZm9yZSByZXN0b3JpbmcgdGhlIGNvbnRleHQuICovIFwNCisJCQkJCQkJCQkJInBvcAlheCIJCQkJCQkJCVwNCisJCQkJCQkJCQkJInBvcAlheCIJCQkJCQkJCVwNCisJCQkJCQkJCQkJInBvcAllcyIJCQkJCQkJCVwNCisJCQkJCQkJCQkJInBvcAlkcyIJCQkJCQkJCVwNCisJCQkJCQkJCQkJInBvcGEiCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkiaXJldCIJCQkJCQkJCQkNCisjZWxzZQ0KKw0KKwkjcHJhZ21hIGF1eCBwb3J0U1dJVENIX0NPTlRFWFQgPQkibW92CWF4LCBzZWcgcHhDdXJyZW50VENCIgkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkibW92CWRzLCBheCIJCQkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCSJsZXMJYngsIHB4Q3VycmVudFRDQiIJCQkvKiBTYXZlIHRoZSBzdGFjayBwb2ludGVyIGludG8gdGhlIFRDQi4gKi8JCVwNCisJCQkJCQkJCQkJIm1vdgllczoweDJbIGJ4IF0sIHNzIgkJCQkJCQkJCQkJCQkJCVwNCisJCQkJCQkJCQkJIm1vdgllczpbIGJ4IF0sIHNwIgkJCQkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCSJjYWxsCXZUYXNrU3dpdGNoQ29udGV4dCIJCQkvKiBQZXJmb3JtIHRoZSBzd2l0Y2guICovCQkJCQkJXA0KKwkJCQkJCQkJCQkibW92CWF4LCBzZWcgcHhDdXJyZW50VENCIgkJLyogUmVzdG9yZSB0aGUgc3RhY2sgcG9pbnRlciBmcm9tIHRoZSBUQ0IuICovCVwNCisJCQkJCQkJCQkJIm1vdglkcywgYXgiCQkJCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkibGVzCWJ4LCBkd29yZCBwdHIgcHhDdXJyZW50VENCIgkJCQkJCQkJCQkJCQlcDQorCQkJCQkJCQkJCSJtb3YJc3MsIGVzOlsgYnggKyAyIF0iCQkJCQkJCQkJCQkJCQkJXA0KKwkJCQkJCQkJCQkibW92CXNwLCBlczpbIGJ4IF0iDQorCQkJCQkJCQkJCQ0KKw0KKwkjcHJhZ21hIGF1eCBwb3J0RklSU1RfQ09OVEVYVCA9CQkibW92CWF4LCBzZWcgcHhDdXJyZW50VENCIgkJCVwNCisJCQkJCQkJCQkJIm1vdglkcywgYXgiCQkJCQkJCVwNCisJCQkJCQkJCQkJImxlcwlieCwgZHdvcmQgcHRyIHB4Q3VycmVudFRDQiIJCVwNCisJCQkJCQkJCQkJIm1vdglzcywgZXM6WyBieCArIDIgXSIJCQkJXA0KKwkJCQkJCQkJCQkibW92CXNwLCBlczpbIGJ4IF0iCQkJCQlcDQorCQkJCQkJCQkJCSJwb3AJYXgiCQkJCQkJCQlcDQorCQkJCQkJCQkJCSJwb3AJYXgiCQkJCQkJCQlcDQorCQkJCQkJCQkJCSJwb3AJZXMiCQkJCQkJCQlcDQorCQkJCQkJCQkJCSJwb3AJZHMiCQkJCQkJCQlcDQorCQkJCQkJCQkJCSJwb3BhIgkJCQkJCQkJCVwNCisJCQkJCQkJCQkJImlyZXQiCQkJCQkJCQkJDQorI2VuZGlmDQogDQogDQotDQotICAgICNwcmFnbWEgYXV4IHBvcnRGSVJTVF9DT05URVhUID0JCSJtb3YJYXgsIHNlZyBweEN1cnJlbnRUQ0IiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgIm1vdglkcywgYXgiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAibGVzCWJ4LCBkd29yZCBwdHIgcHhDdXJyZW50VENCIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICJtb3YJc3MsIGVzOlsgYnggKyAyIF0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgIm1vdglzcCwgZXM6WyBieCBdIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAiYWRkCXNwLCAweDAwMDIiCQkJCQkJLyogUmVtb3ZlIHRoZSBleHRyYSBieXRlcyB0aGF0IGV4aXN0IGluIGRlYnVnIGJ1aWxkcyBiZWZvcmUgcmVzdG9yaW5nIHRoZSBjb250ZXh0LiAqL1wNCi0gICAgInBvcAlheCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAicG9wCWF4IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICJwb3AJZXMiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgInBvcAlkcyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAicG9wYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICJpcmV0Ig0KLSNlbHNlIC8qIGlmZGVmIERFQlVHX0JVSUxEICovDQotDQotICAgICNwcmFnbWEgYXV4IHBvcnRTV0lUQ0hfQ09OVEVYVCA9CSJtb3YJYXgsIHNlZyBweEN1cnJlbnRUQ0IiICAgICAgICAgXA0KLSAgICAibW92CWRzLCBheCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgImxlcwlieCwgcHhDdXJyZW50VENCIgkJCS8qIFNhdmUgdGhlIHN0YWNrIHBvaW50ZXIgaW50byB0aGUgVENCLiAqL1wNCi0gICAgIm1vdgllczoweDJbIGJ4IF0sIHNzIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICJtb3YJZXM6WyBieCBdLCBzcCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAiY2FsbAl2VGFza1N3aXRjaENvbnRleHQiCQkJLyogUGVyZm9ybSB0aGUgc3dpdGNoLiAqLyAgICAgICAgICAgICBcDQotICAgICJtb3YJYXgsIHNlZyBweEN1cnJlbnRUQ0IiCQkvKiBSZXN0b3JlIHRoZSBzdGFjayBwb2ludGVyIGZyb20gdGhlIFRDQi4gKi9cDQotICAgICJtb3YJZHMsIGF4IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAibGVzCWJ4LCBkd29yZCBwdHIgcHhDdXJyZW50VENCIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgIm1vdglzcywgZXM6WyBieCArIDIgXSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICJtb3YJc3AsIGVzOlsgYnggXSINCi0NCi0NCi0gICAgI3ByYWdtYSBhdXggcG9ydEZJUlNUX0NPTlRFWFQgPQkJIm1vdglheCwgc2VnIHB4Q3VycmVudFRDQiJcDQotICAgICJtb3YJZHMsIGF4IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgImxlcwlieCwgZHdvcmQgcHRyIHB4Q3VycmVudFRDQiIgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAibW92CXNzLCBlczpbIGJ4ICsgMiBdIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICJtb3YJc3AsIGVzOlsgYnggXSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgInBvcAlheCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAicG9wCWF4IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICJwb3AJZXMiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgInBvcAlkcyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAicG9wYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICJpcmV0Ig0KLSNlbmRpZiAvKiBpZmRlZiBERUJVR19CVUlMRCAqLw0KZGlmZiAtLWdpdCBhL3BvcnRhYmxlL29XYXRjb20vMTZCaXRET1MvY29tbW9uL3BvcnRjb21uLmMgYi9wb3J0YWJsZS9vV2F0Y29tLzE2Qml0RE9TL2NvbW1vbi9wb3J0Y29tbi5jCmluZGV4IDNlMDNhNTAuLjVhYmNhNjMgMTAwNjQ0Ci0tLSBhL3BvcnRhYmxlL29XYXRjb20vMTZCaXRET1MvY29tbW9uL3BvcnRjb21uLmMKKysrIGIvcG9ydGFibGUvb1dhdGNvbS8xNkJpdERPUy9jb21tb24vcG9ydGNvbW4uYwpAQCAtMjYsMjMgKzI2LDIzIEBACiAgKi8NCiANCiAvKg0KLSAqIENoYW5nZXMgZnJvbSBWMS4wMDoNCi0gKg0KLSArIHB4UG9ydEluaXRpYWxpc2VTdGFjaygpIG5vdyBpbml0aWFsaXNlcyB0aGUgc3RhY2sgb2YgbmV3IHRhc2tzIHRvIHRoZQ0KLSArICAgIHNhbWUgZm9ybWF0IHVzZWQgYnkgdGhlIGNvbXBpbGVyLiAgVGhpcyBhbGxvd3MgdGhlIGNvbXBpbGVyIGdlbmVyYXRlZA0KLSArICAgIGludGVycnVwdCBtZWNoYW5pc20gdG8gYmUgdXNlZCBmb3IgY29udGV4dCBzd2l0Y2hlcy4NCi0gKw0KLSArIENoYW5nZXMgZnJvbSBWMi40LjI6DQotICsNCi0gKyBwdlBvcnRNYWxsb2MgYW5kIHZQb3J0RnJlZSBoYXZlIGJlZW4gcmVtb3ZlZC4gIFRoZSBwcm9qZWN0cyBub3cgdXNlDQotICsgICAgdGhlIGRlZmluaXRpb25zIGZyb20gdGhlIHNvdXJjZS9wb3J0YWJsZS9NZW1NYW5nIGRpcmVjdG9yeS4NCi0gKw0KLSArIENoYW5nZXMgZnJvbSBWMi42LjE6DQotICsNCi0gKyB1c1BvcnRDaGVja0ZyZWVTdGFja1NwYWNlKCkgaGFzIGJlZW4gbW92ZWQgdG8gdGFza3MuYy4NCi0gKi8NCitDaGFuZ2VzIGZyb20gVjEuMDA6DQorCQ0KKwkrIHB4UG9ydEluaXRpYWxpc2VTdGFjaygpIG5vdyBpbml0aWFsaXNlcyB0aGUgc3RhY2sgb2YgbmV3IHRhc2tzIHRvIHRoZSANCisJICBzYW1lIGZvcm1hdCB1c2VkIGJ5IHRoZSBjb21waWxlci4gIFRoaXMgYWxsb3dzIHRoZSBjb21waWxlciBnZW5lcmF0ZWQNCisJICBpbnRlcnJ1cHQgbWVjaGFuaXNtIHRvIGJlIHVzZWQgZm9yIGNvbnRleHQgc3dpdGNoZXMuDQogDQorQ2hhbmdlcyBmcm9tIFYyLjQuMjoNCiANCisJKyBwdlBvcnRNYWxsb2MgYW5kIHZQb3J0RnJlZSBoYXZlIGJlZW4gcmVtb3ZlZC4gIFRoZSBwcm9qZWN0cyBub3cgdXNlDQorCSAgdGhlIGRlZmluaXRpb25zIGZyb20gdGhlIHNvdXJjZS9wb3J0YWJsZS9NZW1NYW5nIGRpcmVjdG9yeS4NCisNCitDaGFuZ2VzIGZyb20gVjIuNi4xOg0KKw0KKwkrIHVzUG9ydENoZWNrRnJlZVN0YWNrU3BhY2UoKSBoYXMgYmVlbiBtb3ZlZCB0byB0YXNrcy5jLg0KKyovDQorDQorCQ0KIA0KICNpbmNsdWRlIDxzdGRsaWIuaD4NCiAjaW5jbHVkZSAiRnJlZVJUT1MuaCINCkBAIC01MCw5NSArNTAsOTIgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KIA0KIC8qIFNlZSBoZWFkZXIgZmlsZSBmb3IgZGVzY3JpcHRpb24uICovDQotU3RhY2tUeXBlX3QgKiBweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICogcHhUb3BPZlN0YWNrLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYXNrRnVuY3Rpb25fdCBweENvZGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiBwdlBhcmFtZXRlcnMgKQ0KK1N0YWNrVHlwZV90ICpweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICpweFRvcE9mU3RhY2ssIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzICkNCiB7DQotICAgIFN0YWNrVHlwZV90IERTX1JlZyA9IDAsICogcHhPcmlnaW5hbFNQOw0KK1N0YWNrVHlwZV90IERTX1JlZyA9IDAsICpweE9yaWdpbmFsU1A7DQogDQotICAgIC8qIFBsYWNlIGEgZmV3IGJ5dGVzIG9mIGtub3duIHZhbHVlcyBvbiB0aGUgYm90dG9tIG9mIHRoZSBzdGFjay4NCi0gICAgICogVGhpcyBpcyBqdXN0IHVzZWZ1bCBmb3IgZGVidWdnaW5nLiAqLw0KKwkvKiBQbGFjZSBhIGZldyBieXRlcyBvZiBrbm93biB2YWx1ZXMgb24gdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suIA0KKwlUaGlzIGlzIGp1c3QgdXNlZnVsIGZvciBkZWJ1Z2dpbmcuICovDQogDQotICAgICpweFRvcE9mU3RhY2sgPSAweDExMTE7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMHgyMjIyOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IDB4MzMzMzsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAweDQ0NDQ7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gMHg1NTU1Ow0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4MTExMTsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDIyMjI7DQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gMHgzMzMzOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IDB4NDQ0NDsNCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAweDU1NTU7DQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KIA0KLSAgICAvKmxpbnQgLWU5NTAgLWU2MTEgLWU5MjMgTGludCBkb2Vzbid0IGxpa2UgdGhpcyBtdWNoIC0gYnV0IG5vdGhpbmcgSSBjYW4gZG8gYWJvdXQgaXQuICovDQorCS8qbGludCAtZTk1MCAtZTYxMSAtZTkyMyBMaW50IGRvZXNuJ3QgbGlrZSB0aGlzIG11Y2ggLSBidXQgbm90aGluZyBJIGNhbiBkbyBhYm91dCBpdC4gKi8NCiANCi0gICAgLyogV2UgYXJlIGdvaW5nIHRvIHN0YXJ0IHRoZSBzY2hlZHVsZXIgdXNpbmcgYSByZXR1cm4gZnJvbSBpbnRlcnJ1cHQNCi0gICAgICogaW5zdHJ1Y3Rpb24gdG8gbG9hZCB0aGUgcHJvZ3JhbSBjb3VudGVyLCBzbyBmaXJzdCB0aGVyZSB3b3VsZCBiZSB0aGUNCi0gICAgICogc3RhdHVzIHJlZ2lzdGVyIGFuZCBpbnRlcnJ1cHQgcmV0dXJuIGFkZHJlc3MuICBXZSBtYWtlIHRoaXMgdGhlIHN0YXJ0DQotICAgICAqIG9mIHRoZSB0YXNrLiAqLw0KLSAgICAqcHhUb3BPZlN0YWNrID0gcG9ydElOSVRJQUxfU1c7DQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gRlBfU0VHKCBweENvZGUgKTsNCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSBGUF9PRkYoIHB4Q29kZSApOw0KLSAgICBweFRvcE9mU3RhY2stLTsNCisJLyogV2UgYXJlIGdvaW5nIHRvIHN0YXJ0IHRoZSBzY2hlZHVsZXIgdXNpbmcgYSByZXR1cm4gZnJvbSBpbnRlcnJ1cHQNCisJaW5zdHJ1Y3Rpb24gdG8gbG9hZCB0aGUgcHJvZ3JhbSBjb3VudGVyLCBzbyBmaXJzdCB0aGVyZSB3b3VsZCBiZSB0aGUNCisJc3RhdHVzIHJlZ2lzdGVyIGFuZCBpbnRlcnJ1cHQgcmV0dXJuIGFkZHJlc3MuICBXZSBtYWtlIHRoaXMgdGhlIHN0YXJ0IA0KKwlvZiB0aGUgdGFzay4gKi8NCisJKnB4VG9wT2ZTdGFjayA9IHBvcnRJTklUSUFMX1NXOyANCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSBGUF9TRUcoIHB4Q29kZSApOw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IEZQX09GRiggcHhDb2RlICk7DQorCXB4VG9wT2ZTdGFjay0tOw0KIA0KLSAgICAvKiBXZSBhcmUgZ29pbmcgdG8gc2V0dXAgdGhlIHN0YWNrIGZvciB0aGUgbmV3IHRhc2sgdG8gbG9vayBsaWtlDQotICAgICAqIHRoZSBzdGFjayBmcmFtZSB3YXMgc2V0dXAgYnkgYSBjb21waWxlciBnZW5lcmF0ZWQgSVNSLiAgV2UgbmVlZCB0byBrbm93DQotICAgICAqIHRoZSBhZGRyZXNzIG9mIHRoZSBleGlzdGluZyBzdGFjayB0b3AgdG8gcGxhY2UgaW4gdGhlIFNQIHJlZ2lzdGVyIHdpdGhpbg0KLSAgICAgKiB0aGUgc3RhY2sgZnJhbWUuICBweE9yaWdpbmFsU1AgaG9sZHMgU1AgYmVmb3JlIChzaW11bGF0ZWQpIHB1c2hhIHdhcw0KLSAgICAgKiBjYWxsZWQuICovDQotICAgIHB4T3JpZ2luYWxTUCA9IHB4VG9wT2ZTdGFjazsNCisJLyogV2UgYXJlIGdvaW5nIHRvIHNldHVwIHRoZSBzdGFjayBmb3IgdGhlIG5ldyB0YXNrIHRvIGxvb2sgbGlrZQ0KKwl0aGUgc3RhY2sgZnJhbWUgd2FzIHNldHVwIGJ5IGEgY29tcGlsZXIgZ2VuZXJhdGVkIElTUi4gIFdlIG5lZWQgdG8ga25vdw0KKwl0aGUgYWRkcmVzcyBvZiB0aGUgZXhpc3Rpbmcgc3RhY2sgdG9wIHRvIHBsYWNlIGluIHRoZSBTUCByZWdpc3RlciB3aXRoaW4NCisJdGhlIHN0YWNrIGZyYW1lLiAgcHhPcmlnaW5hbFNQIGhvbGRzIFNQIGJlZm9yZSAoc2ltdWxhdGVkKSBwdXNoYSB3YXMgDQorCWNhbGxlZC4gKi8NCisJcHhPcmlnaW5hbFNQID0gcHhUb3BPZlN0YWNrOw0KIA0KLSAgICAvKiBUaGUgcmVtYWluaW5nIHJlZ2lzdGVycyB3b3VsZCBiZSBwdXNoZWQgb24gdGhlIHN0YWNrIGJ5IG91ciBjb250ZXh0DQotICAgICAqIHN3aXRjaCBmdW5jdGlvbi4gIFRoZXNlIGFyZSBsb2FkZWQgd2l0aCB2YWx1ZXMgc2ltcGx5IHRvIG1ha2UgZGVidWdnaW5nDQotICAgICAqIGVhc2llci4gKi8NCi0gICAgKnB4VG9wT2ZTdGFjayA9IEZQX09GRiggcHZQYXJhbWV0ZXJzICk7IC8qIEFYICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4Q0NDQzsgLyogQ1ggKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSBGUF9TRUcoIHB2UGFyYW1ldGVycyApOyAvKiBEWCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweEJCQkI7IC8qIEJYICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gRlBfT0ZGKCBweE9yaWdpbmFsU1AgKTsgLyogU1AgKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhCQkJCOyAvKiBCUCAqLw0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweDAxMjM7IC8qIFNJICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4RERERDsgLyogREkgKi8NCisJLyogVGhlIHJlbWFpbmluZyByZWdpc3RlcnMgd291bGQgYmUgcHVzaGVkIG9uIHRoZSBzdGFjayBieSBvdXIgY29udGV4dCANCisJc3dpdGNoIGZ1bmN0aW9uLiAgVGhlc2UgYXJlIGxvYWRlZCB3aXRoIHZhbHVlcyBzaW1wbHkgdG8gbWFrZSBkZWJ1Z2dpbmcNCisJZWFzaWVyLiAqLw0KKwkqcHhUb3BPZlN0YWNrID0gRlBfT0ZGKCBwdlBhcmFtZXRlcnMgKTsJCS8qIEFYICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4Q0NDQzsJLyogQ1ggKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSBGUF9TRUcoIHB2UGFyYW1ldGVycyApOwkJLyogRFggKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhCQkJCOwkvKiBCWCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9IEZQX09GRiggcHhPcmlnaW5hbFNQICk7CQkvKiBTUCAqLw0KKwlweFRvcE9mU3RhY2stLTsNCisJKnB4VG9wT2ZTdGFjayA9ICggU3RhY2tUeXBlX3QgKSAweEJCQkI7CS8qIEJQICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4MDEyMzsJLyogU0kgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhEREREOwkvKiBESSAqLw0KIA0KLSAgICAvKiBXZSBuZWVkIHRoZSB0cnVlIGRhdGEgc2VnbWVudC4gKi8NCi0gICAgX19hc20gew0KLSAgICAgICAgTU9WIERTX1JlZywgRFMNCi0gICAgfTsNCisJLyogV2UgbmVlZCB0aGUgdHJ1ZSBkYXRhIHNlZ21lbnQuICovDQorCV9fYXNtewlNT1YgRFNfUmVnLCBEUyB9Ow0KIA0KLSAgICBweFRvcE9mU3RhY2stLTsNCi0gICAgKnB4VG9wT2ZTdGFjayA9IERTX1JlZzsgLyogRFMgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSBEU19SZWc7CS8qIERTICovDQogDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gKCBTdGFja1R5cGVfdCApIDB4RUVFRTsgLyogRVMgKi8NCisJcHhUb3BPZlN0YWNrLS07DQorCSpweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICkgMHhFRUVFOwkvKiBFUyAqLw0KIA0KLSAgICAvKiBUaGUgQVggcmVnaXN0ZXIgaXMgcHVzaGVkIGFnYWluIHR3aWNlIC0gZG9uJ3Qga25vdyB3aHkuICovDQotICAgIHB4VG9wT2ZTdGFjay0tOw0KLSAgICAqcHhUb3BPZlN0YWNrID0gRlBfT0ZGKCBwdlBhcmFtZXRlcnMgKTsgLyogQVggKi8NCi0gICAgcHhUb3BPZlN0YWNrLS07DQotICAgICpweFRvcE9mU3RhY2sgPSBGUF9PRkYoIHB2UGFyYW1ldGVycyApOyAvKiBBWCAqLw0KKwkvKiBUaGUgQVggcmVnaXN0ZXIgaXMgcHVzaGVkIGFnYWluIHR3aWNlIC0gZG9uJ3Qga25vdyB3aHkuICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gRlBfT0ZGKCBwdlBhcmFtZXRlcnMgKTsJCS8qIEFYICovDQorCXB4VG9wT2ZTdGFjay0tOw0KKwkqcHhUb3BPZlN0YWNrID0gRlBfT0ZGKCBwdlBhcmFtZXRlcnMgKTsJCS8qIEFYICovDQogDQogDQotICAgICNpZmRlZiBERUJVR19CVUlMRA0KKwkjaWZkZWYgREVCVUdfQlVJTEQNCisJCS8qIFRoZSBjb21waWxlciBhZGRzIHNwYWNlIHRvIGVhY2ggSVNSIHN0YWNrIGlmIGJ1aWxkaW5nIHRvDQorCQlpbmNsdWRlIGRlYnVnIGluZm9ybWF0aW9uLiAgUHJlc3VtYWJseSB0aGlzIGlzIHVzZWQgYnkgdGhlDQorCQlkZWJ1Z2dlciAtIHdlIGRvbid0IG5lZWQgdG8gaW5pdGlhbGlzZSBpdCB0byBhbnl0aGluZyBqdXN0DQorCQltYWtlIHN1cmUgaXQgaXMgdGhlcmUuICovDQorCQlweFRvcE9mU3RhY2stLTsNCisJI2VuZGlmDQogDQotICAgICAgICAvKiBUaGUgY29tcGlsZXIgYWRkcyBzcGFjZSB0byBlYWNoIElTUiBzdGFjayBpZiBidWlsZGluZyB0bw0KLSAgICAgICAgICogaW5jbHVkZSBkZWJ1ZyBpbmZvcm1hdGlvbi4gIFByZXN1bWFibHkgdGhpcyBpcyB1c2VkIGJ5IHRoZQ0KLSAgICAgICAgICogZGVidWdnZXIgLSB3ZSBkb24ndCBuZWVkIHRvIGluaXRpYWxpc2UgaXQgdG8gYW55dGhpbmcganVzdA0KLSAgICAgICAgICogbWFrZSBzdXJlIGl0IGlzIHRoZXJlLiAqLw0KLSAgICAgICAgcHhUb3BPZlN0YWNrLS07DQotICAgICNlbmRpZg0KKwkvKmxpbnQgK2U5NTAgK2U2MTEgK2U5MjMgKi8NCiANCi0gICAgLypsaW50ICtlOTUwICtlNjExICtlOTIzICovDQotDQotICAgIHJldHVybiBweFRvcE9mU3RhY2s7DQorCXJldHVybiBweFRvcE9mU3RhY2s7DQogfQ0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKw0K